<?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>232462</bug_id>
          
          <creation_ts>2021-10-28 16:28:22 -0700</creation_ts>
          <short_desc>Remove code inside ENABLE(NETSCAPE_PLUGIN_API)</short_desc>
          <delta_ts>2024-02-26 00:29:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=232519</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=270068</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>232642</blocked>
    
    <blocked>237555</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>andersca</cc>
    
    <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1809891</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-10-28 16:28:22 -0700</bug_when>
    <thetext>Remove code inside ENABLE(NETSCAPE_PLUGIN_API)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809893</commentid>
    <comment_count>1</comment_count>
      <attachid>442764</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-10-28 16:30:00 -0700</bug_when>
    <thetext>Created attachment 442764
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809924</commentid>
    <comment_count>2</comment_count>
      <attachid>442769</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-10-28 17:59:35 -0700</bug_when>
    <thetext>Created attachment 442769
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809936</commentid>
    <comment_count>3</comment_count>
      <attachid>442769</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2021-10-28 19:27:35 -0700</bug_when>
    <thetext>Comment on attachment 442769
Patch

I have to say I&apos;m a little sad I didn&apos;t get to pull the plug(-ins), but at least I can r=me doing so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809944</commentid>
    <comment_count>4</comment_count>
      <attachid>442777</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-10-28 20:44:15 -0700</bug_when>
    <thetext>Created attachment 442777
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809965</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-10-28 22:44:56 -0700</bug_when>
    <thetext>iOS needs a clean build after this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809993</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-10-29 00:39:00 -0700</bug_when>
    <thetext>I&apos;m pretty happy that we can remove NPAPI support!!!
Now, super hacky RuntimeArray thing (runtime_array.cpp) is only used by Objective-C bridge.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1810216</commentid>
    <comment_count>7</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-10-29 13:33:34 -0700</bug_when>
    <thetext>r285047</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1810233</commentid>
    <comment_count>8</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-10-29 14:09:33 -0700</bug_when>
    <thetext>I love this patch so much!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1810236</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-10-29 14:11:11 -0700</bug_when>
    <thetext>r285051</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1810240</commentid>
    <comment_count>10</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-10-29 14:15:54 -0700</bug_when>
    <thetext>r285052</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1810289</commentid>
    <comment_count>11</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-10-29 15:21:32 -0700</bug_when>
    <thetext>r285058</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1810306</commentid>
    <comment_count>12</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-10-29 16:06:38 -0700</bug_when>
    <thetext>Internal commit 2e4c44c95333771d6b86b5ac3f93cc5edb845ac2 was also necessary to fix the internal build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814509</commentid>
    <comment_count>13</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-11-12 10:18:43 -0800</bug_when>
    <thetext>&lt;rdar://problem/84566739&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442764</attachid>
            <date>2021-10-28 16:30:00 -0700</date>
            <delta_ts>2021-10-28 18:07:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232462-20211028162958.patch</filename>
            <type>text/plain</type>
            <size>1652986</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1MDAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDZhOTAxZjkxMDVjZjhiN2E0Y2RhNzk2
YzYxM2E4MzE1NDk4ODVmNzIuLjZhNzMzMDQzM2I3NzIxMzMxZjFjMWE0NDExNzFkYWVlYTJiZjA2
NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMTAtMjggIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgY29kZSBpbnNpZGUgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzI0NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJdCBpcyBub3QgdXNlZCBhbnl3aGVyZSBzaW5jZSBodHRwczovL3Ry
YWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjg1MDAzL3dlYmtpdAorCisgICAgICAgICogd3RmL1Bs
YXRmb3JtRW5hYmxlLmg6CisgICAgICAgICogd3RmL1BsYXRmb3JtRW5hYmxlQ29jb2EuaDoKKwog
MjAyMS0xMC0yOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIERpc2FibGUgTkVUU0NBUEVfUExVR0lOX0FQSSBhdCBidWlsZCB0aW1lIG9uIG1h
Y09TIGFuZCBXaW5kb3dzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjNkZTRiODAxM2NjOTkyMzJmOTQzM2IwODFm
NzM2YTFhYjc3OWJhYi4uNzk0YjE0OGI0NzQ2NGNkODVhNjc5YjI0YWM2ODBiZTRhOWE0ZGVlYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDIxLTEwLTI4ICBBbGV4IENocmlzdGVuc2Vu
ICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIGNvZGUgaW5zaWRl
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNDYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMu
dHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENvbnRyb2xsZXI6OlNjcmlwdENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1NjcmlwdE5QT2JqZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgICogYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRy
b2xsZXI6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KToKKyAgICAgICAgKiBicmlkZ2Uv
TlBfanNvYmplY3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9OUF9qc29iamVjdC5o
OiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9jL0NSdW50aW1lT2JqZWN0LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBicmlkZ2UvYy9DUnVudGltZU9iamVjdC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGJyaWRnZS9jL2NfY2xhc3MuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9jL2Nf
Y2xhc3MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBicmlkZ2UvYy9jX2luc3RhbmNlLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBicmlkZ2UvYy9jX2luc3RhbmNlLmg6IFJlbW92ZWQuCisgICAgICAg
ICogYnJpZGdlL2MvY19ydW50aW1lLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBicmlkZ2UvYy9j
X3J1bnRpbWUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBicmlkZ2UvYy9jX3V0aWxpdHkuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9jL2NfdXRpbGl0eS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGJyaWRnZS9ucHJ1bnRpbWUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9ucHJ1
bnRpbWVfaW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9ucHJ1bnRpbWVfaW50ZXJu
YWwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBicmlkZ2UvbnBydW50aW1lX3ByaXYuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcDoKKyAgICAgICAgKiBwYWdl
L0ZyYW1lLmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL25wYXBpLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGx1Z2lucy9ucGZ1bmN0aW9ucy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsdWdpbnMvbnBy
dW50aW1lLmg6IFJlbW92ZWQuCisgICAgICAgICogcGx1Z2lucy9ucHR5cGVzLmg6IFJlbW92ZWQu
CisKIDIwMjEtMTAtMjggIEFuZHJlcyBHb256YWxleiAgPGFuZHJlc2dfMjJAYXBwbGUuY29tPgog
CiAgICAgICAgIElzb2xhdGVkIHRyZWUgbW9kZTogRGlzcGF0Y2ggYWxsIGNhbGxzIHRvIFtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWVdIGlu
IFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudCB0byB0aGUgQVggdGhyZWFkLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRl
eCA0NjZhNDQ3N2MwOWY4MmM5YTgxYzQ2ZTQxZGY2YjE5M2M0N2E2YmM3Li40MDczODY3YzA3YWVl
NTM1ODkwNTBjZWMyN2MzM2FhNTU3NWIwNDE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2NyBAQAor
MjAyMS0xMC0yOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgor
CisgICAgICAgIFJlbW92ZSBjb2RlIGluc2lkZSBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjQ2Mgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ29uZmln
dXJhdGlvbnMvUGx1Z2luU2VydmljZS54Y2NvbmZpZzoKKyAgICAgICAgKiBDb25maWd1cmF0aW9u
cy9XZWJLaXQueGNjb25maWc6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlLmNwcDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlRGF0YVJlY29yZHMpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNob3VsZFJlbW92ZURhdGFSZWNvcmRzIGNvbnN0
KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjptb25pdG9yZWREYXRhVHlwZXMpOgorICAgICAgICAqIFBs
YXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFBsdWdpblByb2Nlc3MvRW50cnlQb2ludC9Db2Nv
YS9YUENTZXJ2aWNlL1BsdWdpblNlcnZpY2UuSW5mby5wbGlzdDogUmVtb3ZlZC4KKyAgICAgICAg
KiBQbHVnaW5Qcm9jZXNzL0VudHJ5UG9pbnQvQ29jb2EvWFBDU2VydmljZS9QbHVnaW5TZXJ2aWNl
RW50cnlQb2ludC5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNv
bnRyb2xsZXJQcm94eS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2luUHJvY2Vzcy9QbHVn
aW5Db250cm9sbGVyUHJveHkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1Bs
dWdpbkNvbnRyb2xsZXJQcm94eS5tZXNzYWdlcy5pbjogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVn
aW5Qcm9jZXNzL1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogUGx1Z2luUHJvY2Vzcy9QbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBQbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIFBsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5oOiBSZW1vdmVkLgorICAgICAgICAqIFBs
dWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5tZXNzYWdlcy5pbjogUmVtb3ZlZC4KKyAgICAgICAg
KiBQbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBQbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmg6IFJlbW92ZWQuCisgICAg
ICAgICogUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbjogUmVt
b3ZlZC4KKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Db250cm9sbGVyUHJveHlN
YWMubW06IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vz
c01hYy5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9j
ZXNzU2hpbS5oOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpblByb2Nlc3MvbWFjL1BsdWdpblBy
b2Nlc3NTaGltLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpblByb2Nlc3MvbWFjL2NvbS5h
cHBsZS5XZWJLaXQucGx1Z2luLWNvbW1vbi5zYi5pbjogUmVtb3ZlZC4KKyAgICAgICAgKiBSZXNv
dXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NuLm1pY3JvZG9uZS5jbWIuc2FmYXJpLnNiOiBS
ZW1vdmVkLgorICAgICAgICAqIFJlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmFw
cGxlLkJvY29tU3VibWl0Q3RybC5zYjogUmVtb3ZlZC4KKyAgICAgICAgKiBSZXNvdXJjZXMvUGx1
Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5hcHBsZS5OUFNhZmVJbnB1dC5zYjogUmVtb3ZlZC4KKyAg
ICAgICAgKiBSZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5hcHBsZS5OUFNhZmVT
dWJtaXQuc2I6IFJlbW92ZWQuCisgICAgICAgICogUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9m
aWxlcy9jb20uYXBwbGUuUXVpY2tUaW1lIFBsdWdpbi5wbHVnaW4uc2I6IFJlbW92ZWQuCisgICAg
ICAgICogUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uYXBwbGUuYXBwc3RvcmUu
Q29kZVJlZGVlbWVyTmV0c2NhcGVQbHVnaW4uc2I6IFJlbW92ZWQuCisgICAgICAgICogUmVzb3Vy
Y2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uYXBwbGUuaXN0LmRzLmFwcGxlY29ubmVjdC53
ZWJwbHVnaW4uc2I6IFJlbW92ZWQuCisgICAgICAgICogUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQ
cm9maWxlcy9jb20uY2ZjYS5ucFNlY0VkaXRDdGwuTUFDLkJPQy5wbHVnaW4uc2I6IFJlbW92ZWQu
CisgICAgICAgICogUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uY2lzY28ud2Vi
ZXgucGx1Z2luLmdwYzY0LnNiOiBSZW1vdmVkLgorICAgICAgICAqIFJlc291cmNlcy9QbHVnSW5T
YW5kYm94UHJvZmlsZXMvY29tLmNtYmNoaW5hLkNNQlNlY3VyaXR5LnNiOiBSZW1vdmVkLgorICAg
ICAgICAqIFJlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmZ0c2FmZS5OUEFQSS1D
b3JlLVNhZmUtU29mdEtleWJhb3JkLnBsdWdpbi5yZmMxMDM0aWRlbnRpZmllci5zYjogUmVtb3Zl
ZC4KKyAgICAgICAgKiBSZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5nb29nbGUu
Z29vZ2xldGFsa2Jyb3dzZXJwbHVnaW4uc2I6IFJlbW92ZWQuCisgICAgICAgICogUmVzb3VyY2Vz
L1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uZ29vZ2xlLm8xZGJyb3dzZXJwbHVnaW4uc2I6IFJl
bW92ZWQuCisgICAgICAgICogUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20ubWFj
cm9tZWRpYS5GbGFzaCBQbGF5ZXIgRVNSLnBsdWdpbi5zYjogUmVtb3ZlZC4KKyAgICAgICAgKiBS
ZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5tYWNyb21lZGlhLkZsYXNoIFBsYXll
ci5wbHVnaW4uc2I6IFJlbW92ZWQuCisgICAgICAgICogUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQ
cm9maWxlcy9jb20ubWljcm9zb2Z0LlNpbHZlcmxpZ2h0UGx1Z2luLnNiOiBSZW1vdmVkLgorICAg
ICAgICAqIFJlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLm9yYWNsZS5qYXZhLkph
dmFBcHBsZXRQbHVnaW4uc2I6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL0FQSS9jL1dLUGx1
Z2luSW5mb3JtYXRpb24uY3BwOgorICAgICAgICAoV0tQbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZUlk
ZW50aWZpZXJLZXkpOgorICAgICAgICAoV0tQbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZVZlcnNpb25L
ZXkpOgorICAgICAgICAoV0tQbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZVNob3J0VmVyc2lvbktleSk6
CisgICAgICAgIChXS1BsdWdpbkluZm9ybWF0aW9uUGF0aEtleSk6CisgICAgICAgIChXS1BsdWdp
bkluZm9ybWF0aW9uRGlzcGxheU5hbWVLZXkpOgorICAgICAgICAoV0tQbHVnaW5JbmZvcm1hdGlv
bkRlZmF1bHRMb2FkUG9saWN5S2V5KToKKyAgICAgICAgKFdLUGx1Z2luSW5mb3JtYXRpb25VcGRh
dGVQYXN0TGFzdEJsb2NrZWRWZXJzaW9uSXNLbm93bkF2YWlsYWJsZUtleSk6CisgICAgICAgIChX
S1BsdWdpbkluZm9ybWF0aW9uSGFzU2FuZGJveFByb2ZpbGVLZXkpOgorICAgICAgICAoV0tQbHVn
aW5JbmZvcm1hdGlvbkZyYW1lVVJMS2V5KToKKyAgICAgICAgKFdLUGx1Z2luSW5mb3JtYXRpb25N
SU1FVHlwZUtleSk6CisgICAgICAgIChXS1BsdWdpbkluZm9ybWF0aW9uUGFnZVVSTEtleSk6Cisg
ICAgICAgIChXS1BsdWdpbkluZm9ybWF0aW9uUGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkxLZXkpOgor
ICAgICAgICAoV0tQbHVnaW5JbmZvcm1hdGlvblBsdWdpblVSTEtleSk6CisgICAgICAgIChXS1Bs
dWdJbkluZm9ybWF0aW9uUmVwbGFjZW1lbnRPYnNjdXJlZEtleSk6CisgICAgICAgICogU2hhcmVk
L1BsdWdpbnMvTlBJZGVudGlmaWVyRGF0YS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVk
L1BsdWdpbnMvTlBJZGVudGlmaWVyRGF0YS5oOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9Q
bHVnaW5zL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBT
aGFyZWQvUGx1Z2lucy9OUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5oOiBSZW1vdmVkLgorICAgICAg
ICAqIFNoYXJlZC9QbHVnaW5zL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLm1lc3NhZ2VzLmluOiBS
ZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL05QT2JqZWN0UHJveHkuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL05QT2JqZWN0UHJveHkuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogU2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9OUFZhcmlhbnREYXRhLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBTaGFyZWQvUGx1Z2lucy9OUFZhcmlhbnREYXRhLmg6IFJlbW92ZWQuCisgICAgICAg
ICogU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5Nb2R1bGUuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luTW9k
dWxlLmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvUGx1Z2lu
SW5mb3JtYXRpb24uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL05ldHNj
YXBlL1BsdWdpbkluZm9ybWF0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL1BsdWdp
bnMvTmV0c2NhcGUvbWFjL05ldHNjYXBlUGx1Z2luTW9kdWxlTWFjLm1tOiBSZW1vdmVkLgorICAg
ICAgICAqIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL21hYy9QbHVnaW5JbmZvcm1hdGlvbk1hYy5t
bTogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9QbHVnaW5Nb2R1bGVJbmZvLmg6
IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0F0dHJpYnV0
ZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9Q
bHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6IFJlbW92ZWQuCisgICAgICAgICogU2hh
cmVkL1BsdWdpbnMvUGx1Z2luUXVpcmtzLmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL1Bs
dWdpbnMvbWFjL1BsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIFNoYXJlZC9QbHVnaW5zL21hYy9QbHVnaW5TYW5kYm94UHJvZmlsZS5oOiBSZW1vdmVkLgor
ICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL21hYy9QbHVnaW5TYW5kYm94UHJvZmlsZS5tbTogUmVt
b3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oOgor
ICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGE6Om93bmVyUHJv
Y2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhOjppc29sYXRlZENvcHkgY29uc3Qp
OgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YS5oOgorICAgICAgICAq
IFNoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUuaDoKKyAgICAgICAgKiBTb3VyY2Vz
LnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQVBJTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0
aW9uQ2xpZW50Lmg6CisgICAgICAgIChBUEk6Ok5hdmlnYXRpb25DbGllbnQ6OmNvbnRlbnRSdWxl
TGlzdE5vdGlmaWNhdGlvbik6CisgICAgICAgIChBUEk6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZEZh
aWxUb0luaXRpYWxpemVQbHVnSW4pOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpOYXZpZ2F0aW9u
Q2xpZW50OjpkaWRCbG9ja0luc2VjdXJlUGx1Z2luVmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAg
IChBUEk6Ok5hdmlnYXRpb25DbGllbnQ6OmRlY2lkZVBvbGljeUZvclBsdWdpbkxvYWQpOiBEZWxl
dGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVUlDbGllbnQuaDoKKyAgICAgICAgKEFQ
STo6VUlDbGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KToKKyAgICAgICAgKEFQSTo6VUlD
bGllbnQ6OnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZCk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oOgorICAgICAgICAoV2ViS2l0Ojp0b1dLUGx1
Z2luTG9hZFBvbGljeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OnRvV0tQbHVnaW5Mb2Fk
Q2xpZW50UG9saWN5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6dG9QbHVnaW5Nb2R1bGVM
b2FkUG9saWN5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6dG9QbHVnaW5Mb2FkQ2xpZW50
UG9saWN5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNw
cDoKKyAgICAgICAgKFdLQ29udGV4dFNldEFkZGl0aW9uYWxQbHVnaW5zRGlyZWN0b3J5KToKKyAg
ICAgICAgKFdLQ29udGV4dFJlZnJlc2hQbHVnSW5zKToKKyAgICAgICAgKFdLQ29udGV4dEFkZFN1
cHBvcnRlZFBsdWdpbik6CisgICAgICAgIChXS0NvbnRleHRDbGVhclN1cHBvcnRlZFBsdWdpbnMp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgorICAgICAgICAoV0tQYWdl
U2V0UGFnZVVJQ2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNl
cy5jcHA6CisgICAgICAgIChXS1ByZWZlcmVuY2VzU2V0UGx1Z2luU2FuZGJveFByb2ZpbGVzRW5h
YmxlZEZvckFsbFBsdWdpbnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9tYWMvV0tDb250
ZXh0UHJpdmF0ZU1hYy5tbToKKyAgICAgICAgKFdLQ29udGV4dENvcHlQbHVnSW5JbmZvRm9yQnVu
ZGxlSWRlbnRpZmllcik6CisgICAgICAgIChXS0NvbnRleHRHZXRJbmZvRm9ySW5zdGFsbGVkUGx1
Z0lucyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1tOgor
ICAgICAgICAoLVtXS1ByZWZlcmVuY2VzIF9zZXRFeHBlcmltZW50YWxQbHVnSW5TYW5kYm94UHJv
ZmlsZXNFbmFibGVkOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNz
UG9vbC5tbToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfcGx1Z2luUHJvY2Vzc0NvdW50XSk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhUmVjb3JkSW50ZXJu
YWwuaDoKKyAgICAgICAgKFdlYktpdDo6dG9XZWJzaXRlRGF0YVR5cGUpOgorICAgICAgICAoV2Vi
S2l0Ojp0b1dLV2Vic2l0ZURhdGFUeXBlcyk6CisgICAgICAgICogVUlQcm9jZXNzL0F1eGlsaWFy
eVByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkF1eGlsaWFyeVByb2Nlc3NQcm94
eTo6Z2V0TGF1bmNoT3B0aW9ucyk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdh
dGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbToKKyAgICAgICAg
KFdlYktpdDo6dG9XS1BsdWdJblVuYXZhaWxhYmlsaXR5UmVhc29uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9u
Q2xpY2tlZCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQ
b29sQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9j
ZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJ
bXBsLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpwbHVnaW5Db21wbGV4VGV4dElu
cHV0U3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJW
aWV3SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRpc2FibGVDb21wbGV4
VGV4dElucHV0SWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aGFu
ZGxlUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd24pOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6dHJ5SGFuZGxlUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dHJ5UG9zdFByb2Nlc3NQbHVnaW5Db21wbGV4VGV4dElu
cHV0S2V5RG93bik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRQbHVnaW5Db21w
bGV4VGV4dElucHV0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6c2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlQW5kSWRlbnRpZmllcik6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9tYWMvUHJvY2Vzc0xhdW5jaGVyTWFjLm1tOgorICAgICAg
ICAoV2ViS2l0OjpzZXJ2aWNlTmFtZSk6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NNYW5hZ2VyLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzTWFu
YWdlci5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nl
c3NQcm94eS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
UHJvY2Vzc1Byb3h5Lmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1BsdWdpbnMvUGx1
Z2luUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9QbHVnaW5zL21hYy9QbHVnaW5JbmZvU3RvcmVNYWMubW06IFJlbW92ZWQuCisgICAgICAgICog
VUlQcm9jZXNzL1BsdWdpbnMvbWFjL1BsdWdpblByb2Nlc3NNYW5hZ2VyTWFjLm1tOiBSZW1vdmVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL21hYy9QbHVnaW5Qcm9jZXNzUHJveHlNYWMu
bW06IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y2FuU2hvd01JTUVUeXBlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpmaW5kUGx1Z2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5Ojp1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZEZhaWxUb0luaXRpYWxpemVQbHVn
aW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZEJsb2NrSW5z
ZWN1cmVQbHVnaW5WZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE1lbW9yeVByZXNzdXJlRXZlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6YWRkU3VwcG9ydGVkUGx1Z2luKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OmNsZWFyU3VwcG9ydGVkUGx1Z2lucyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpzZXRBZGRpdGlvbmFsUGx1Z2luc0RpcmVjdG9yeSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWZyZXNoUGx1Z2lucyk6IERl
bGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmg6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQcm94eTo6Z2V0UGx1Z2lucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQcm94eTo6Z2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Byb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVJlY29yZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhUmVjb3Jk
Ojp0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFSZWNvcmQ6Omlzb2xhdGVkQ29weSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhUmVjb3JkOjphZGRQbHVnaW5EYXRhSG9zdE5hbWUpOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVJlY29yZC5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6cGx1Z2lucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9z
L1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRQ
bHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VD
bGllbnRJbXBsTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2V0UGx1
Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
bWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpz
ZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIFdlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9KU05QTWV0aG9kLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5oOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oOiBSZW1vdmVkLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5oOiBS
ZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVP
YmplY3RNYXAuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lVXRpbGl0aWVzLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lVXRpbGl0aWVzLmg6IFJl
bW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlQnJv
d3NlckZ1bmNzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0
c2NhcGUvTmV0c2NhcGVCcm93c2VyRnVuY3MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5oOiBSZW1vdmVk
LgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpblN0
cmVhbS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L05ldHNjYXBlUGx1Z2luU3RyZWFtLmg6IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL21hYy9OZXRzY2FwZVBsdWdpbk1hYy5tbTogUmVtb3ZlZC4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvbWFjL1BsdWdpblByb3h5TWFjLm1tOiBS
ZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Db250cm9sbGVyLmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Nv
bm5lY3Rpb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW46IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFu
YWdlci5oOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9j
ZXNzQ29ubmVjdGlvbk1hbmFnZXIubWVzc2FnZXMuaW46IFJlbW92ZWQuCisgICAgICAgICogV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkubWVzc2FnZXMuaW46IFJlbW92ZWQuCisgICAgICAgICog
V2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVn
aW5WaWV3OjpTdHJlYW06OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpQbHVn
aW5WaWV3OjpkZXN0cm95UGx1Z2luQW5kUmVzZXQpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5W
aWV3OjpkaWRGYWlsVG9Jbml0aWFsaXplUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2lu
Vmlldzo6c2NyaXB0T2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6cGFnZU11
dGVkU3RhdGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojp3aW5kb3dT
Y3JpcHROUE9iamVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OnBs
dWdpbkVsZW1lbnROUE9iamVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZp
ZXc6OmV2YWx1YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6c2V0
UGx1Z2luSXNQbGF5aW5nQXVkaW8pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5W
aWV3Ojppc011dGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmll
dzo6c2V0Q29tcGxleFRleHRJbnB1dFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9X
ZWJQbHVnaW5JbmZvUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5JbmZv
UHJvdmlkZXI6OnJlZnJlc2hQbHVnaW5zKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luSW5m
b1Byb3ZpZGVyOjpwbHVnaW5JbmZvKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luSW5mb1By
b3ZpZGVyOjpwb3B1bGF0ZVBsdWdpbkNhY2hlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1BsdWdpbnMvV2ViUGx1Z2luSW5mb1Byb3ZpZGVyLmg6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJDaHJvbWVDbGllbnQ6OnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZCBjb25zdCk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMu
Y3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6Y3JlYXRlUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6Y2FuUGx1Z2luSGFuZGxlUmVzcG9uc2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJv
Y2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OldlYlByb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFsaXplQ29ubmVjdGlvbik6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3M6OnJlZnJlc2hQbHVnaW5zKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzczo6cGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuaDoKKwogMjAyMS0xMC0yOCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIERpc2FibGUgTkVU
U0NBUEVfUExVR0lOX0FQSSBhdCBidWlsZCB0aW1lIG9uIG1hY09TIGFuZCBXaW5kb3dzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvQ2hhbmdlTG9nCmluZGV4IGM3NmIwNTA0ZmQyZDM0MjAyOGZhMjhmMzlkMGU3OGY5YzJkODVh
NGEuLjE4MDBhOTU0MzE3ZDBhMWE0OGJhOGI1MGU0ODE5MmQ2OWJiNjJkZWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMTAtMjggIEFsZXggQ2hyaXN0ZW5zZW4g
IDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgY29kZSBpbnNpZGUg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI0NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFdlYktp
dExlZ2FjeS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDIxLTEwLTIyICBJYW4gQW5k
ZXJzb24gIDxpYW5hQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBtb2R1bGUgbWFwIGZpbGUg
Zm9yIFByaXZhdGVGcmFtZXdvcmtzL1dlYktpdExlZ2FjeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCmluZGV4IDIxZWExMzA2OTA0NjEzYjQ0YWE1ODNiZGM0ZTUyMmEzNjRhM2MyNDQuLjZlMTkz
NWQzNmNkNmJlNjZjOTkwNmE2ZmE1OWNmMjQ4NTA3MmQ1NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw4MyBAQAorMjAyMS0xMC0yOCAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSBjb2RlIGluc2lkZSBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzMjQ2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvSG9zdGVkTmV0c2NhcGVQbHVnaW5T
dHJlYW0uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9Ib3N0ZWROZXRzY2Fw
ZVBsdWdpblN0cmVhbS5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRz
Y2FwZVBsdWdpbkhvc3RNYW5hZ2VyLmg6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9Ib3N0
ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVn
aW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5oOiBSZW1vdmVkLgorICAgICAgICAq
IFBsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tOiBSZW1vdmVkLgorICAg
ICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5oOiBSZW1v
dmVkLgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eS5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLmg6
IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbTogUmVt
b3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9Qcm94eVJ1bnRpbWVPYmplY3QuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9Qcm94eVJ1bnRpbWVPYmplY3QubW06IFJl
bW92ZWQuCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5W
aWV3Lmg6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2Nh
cGVQbHVnaW5WaWV3Lm1tOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL1dlYktp
dFBsdWdpbkFnZW50LmRlZnM6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvV2Vi
S2l0UGx1Z2luQWdlbnRSZXBseS5kZWZzOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMvSG9z
dGVkL1dlYktpdFBsdWdpbkNsaWVudC5kZWZzOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMv
SG9zdGVkL1dlYktpdFBsdWdpbkhvc3QuZGVmczogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5z
L0hvc3RlZC9XZWJLaXRQbHVnaW5Ib3N0VHlwZXMuZGVmczogUmVtb3ZlZC4KKyAgICAgICAgKiBQ
bHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5Ib3N0VHlwZXMuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBQbHVnaW5zL0hvc3RlZC9XZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLmg6IFJlbW92ZWQu
CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlci5t
OiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5o
OiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5t
bTogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL1dlYkJhc2VQbHVnaW5QYWNrYWdlLmg6Cisg
ICAgICAgICogUGx1Z2lucy9XZWJCYXNlUGx1Z2luUGFja2FnZS5tbToKKyAgICAgICAgKCtbV2Vi
QmFzZVBsdWdpblBhY2thZ2UgcGx1Z2luV2l0aFBhdGg6XSk6CisgICAgICAgICogUGx1Z2lucy9X
ZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlci5oOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdp
bnMvV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXIubW06IFJlbW92ZWQuCisgICAgICAgICog
UGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hLmg6IFJlbW92ZWQuCisg
ICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hLm1tOiBS
ZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLmg6IFJl
bW92ZWQuCisgICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UubW06IFJl
bW92ZWQuCisgICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5oOiBSZW1v
dmVkLgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW06IFJlbW92
ZWQuCisgICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbTogUmVtb3ZlZC4KKyAg
ICAgICAgKiBQbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW06CisgICAgICAgICgtW1dlYlBs
dWdpbkNvbnRyb2xsZXIgZGVzdHJveVBsdWdpbjpdKToKKyAgICAgICAgKC1bV2ViUGx1Z2luQ29u
dHJvbGxlciBkZXN0cm95QWxsUGx1Z2luc10pOgorICAgICAgICAqIFBsdWdpbnMvV2ViUGx1Z2lu
RGF0YWJhc2UubW06CisgICAgICAgIChQbHVnaW5QYWNrYWdlQ2FuZGlkYXRlczo6dXBkYXRlKToK
KyAgICAgICAgKC1bV2ViUGx1Z2luRGF0YWJhc2UgcmVtb3ZlUGx1Z2luSW5zdGFuY2VWaWV3c0Zv
cjpdKToKKyAgICAgICAgKC1bV2ViUGx1Z2luRGF0YWJhc2UgZGVzdHJveUFsbFBsdWdpbkluc3Rh
bmNlVmlld3NdKToKKyAgICAgICAgKiBQbHVnaW5zL1dlYlBsdWdpblJlcXVlc3QuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBQbHVnaW5zL1dlYlBsdWdpblJlcXVlc3QubTogUmVtb3ZlZC4KKyAgICAg
ICAgKiBQbHVnaW5zL25wYXBpLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlV2lu
ZG93KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbToK
KyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaENyZWF0ZVBhZ2UpOgorICAg
ICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbik6CisgICAgICAgIChXZWJG
cmFtZUxvYWRlckNsaWVudDo6cmVkaXJlY3REYXRhVG9QbHVnaW4pOgorICAgICAgICAoTmV0c2Nh
cGVQbHVnaW5XaWRnZXQ6Ok5ldHNjYXBlUGx1Z2luV2lkZ2V0KTogRGVsZXRlZC4KKyAgICAgICAg
KE5ldHNjYXBlUGx1Z2luV2lkZ2V0OjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKE5ldHNjYXBlUGx1Z2luV2lkZ2V0OjpnZXRGb3JtVmFsdWUpOiBEZWxldGVkLgorICAg
ICAgICAoTmV0c2NhcGVQbHVnaW5XaWRnZXQ6OmhhbmRsZUV2ZW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKE5ldHNjYXBlUGx1Z2luV2lkZ2V0OjpjbGlwUmVjdENoYW5nZWQpOiBEZWxldGVkLgorICAg
ICAgICAoTmV0c2NhcGVQbHVnaW5XaWRnZXQ6Om5vdGlmeVdpZGdldCk6IERlbGV0ZWQuCisgICAg
ICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3JlY3Vyc2l2
ZV9yZXN1bWVOdWxsRXZlbnRzRm9yQWxsTmV0c2NhcGVQbHVnaW5zXSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dlYkZyYW1lIF9yZWN1cnNpdmVfcGF1c2VOdWxsRXZlbnRzRm9yQWxsTmV0c2NhcGVQ
bHVnaW5zXSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZVByaXZhdGUuaDoK
KyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAobmVlZHNDdXJzb3JS
ZWN0c1N1cHBvcnRBdFBvaW50KToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgdmlld1dpbGxNb3Zl
VG9Ib3N0V2luZG93Ol0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyB2aWV3RGlkTW92ZVRvSG9z
dFdpbmRvd10pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfd2ViX21ha2VQbHVnaW5TdWJ2aWV3
c1BlcmZvcm1TZWxlY3Rvcjp3aXRoT2JqZWN0Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJI
VE1MVmlldyBfcGF1c2VOdWxsRXZlbnRzRm9yQWxsTmV0c2NhcGVQbHVnaW5zXSk6IERlbGV0ZWQu
CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9yZXN1bWVOdWxsRXZlbnRzRm9yQWxsTmV0c2NhcGVQ
bHVnaW5zXSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlld1ByaXZhdGUu
aDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisKIDIwMjEtMTAtMjggIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBEaXNhYmxlIE5F
VFNDQVBFX1BMVUdJTl9BUEkgYXQgYnVpbGQgdGltZSBvbiBtYWNPUyBhbmQgV2luZG93cwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGUuaCBiL1NvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtRW5hYmxlLmgKaW5kZXggNjYyYThkYThiYWNiNGNkNDllZmUzZmZhOGNkMTYxMzE5
NzY0MmU1MS4uN2NhNGNhMTE2OGQ1OThhMDc5ZmIyN2I2MGVjMWJlY2ZmNDc5YTE2NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybUVuYWJsZS5oCkBAIC0zODcsMTAgKzM4Nyw2IEBACiAjZGVmaW5lIEVOQUJMRV9N
T1VTRV9GT1JDRV9FVkVOVFMgMQogI2VuZGlmCiAKLSNpZiAhZGVmaW5lZChFTkFCTEVfTkVUU0NB
UEVfUExVR0lOX0FQSSkKLSNkZWZpbmUgRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkgMAotI2Vu
ZGlmCi0KICNpZiAhZGVmaW5lZChFTkFCTEVfTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hF
KQogI2RlZmluZSBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFIDAKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGVDb2NvYS5oIGIvU291
cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGVDb2NvYS5oCmluZGV4IGQxZGIyMjIxYjI2YTZlY2Y3
ZDhiYjhjOTAwOTg1ZTlhMTc3NjM5MDUuLjZhYjAzYTdiYWIyZDdlMTZiMmMzMzg2ZDc5Yjc0MGM2
YzRiMTNiNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlQ29jb2Eu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZUNvY29hLmgKQEAgLTQxOCwxMCAr
NDE4LDYgQEAKICNkZWZpbmUgRU5BQkxFX05BVklHQVRPUl9TVEFOREFMT05FIDEKICNlbmRpZgog
Ci0jaWYgIWRlZmluZWQoRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkpICYmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0jZGVmaW5lIEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJIDAKLSNlbmRpZgot
CiAjaWYgIWRlZmluZWQoRU5BQkxFX05FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFU
SU9OKQogI2RlZmluZSBFTkFCTEVfTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJ
T04gMQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCA3MWE2ZWJiZTkzOGJlYTdjOTYwZWJh
YmM0YWU3NjY2ZjU4ZWU0NDlmLi4yYWVlZjQzYWU5NDRkYTUwNmM2ZTBjMzY1ZGY4NjlhNGRhODli
MzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTMzMCwxNiArMzMwLDEwIEBAIHNldChXZWJDb3Jl
X1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIGJyaWRnZS9CcmlkZ2UuaAogICAgIGJy
aWRnZS9JZGVudGlmaWVyUmVwLmgKLSAgICBicmlkZ2UvTlBfanNvYmplY3QuaAotICAgIGJyaWRn
ZS9ucHJ1bnRpbWVfaW1wbC5oCi0gICAgYnJpZGdlL25wcnVudGltZV9pbnRlcm5hbC5oCiAgICAg
YnJpZGdlL3J1bnRpbWVfbWV0aG9kLmgKICAgICBicmlkZ2UvcnVudGltZV9vYmplY3QuaAogICAg
IGJyaWRnZS9ydW50aW1lX3Jvb3QuaAogCi0gICAgYnJpZGdlL2MvY19pbnN0YW5jZS5oCi0gICAg
YnJpZGdlL2MvY191dGlsaXR5LmgKLQogICAgIGJyaWRnZS9qc2MvQnJpZGdlSlNDLmgKIAogICAg
IGNvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkRmlsdGVyc0FscGhhYmV0LmgKQEAgLTE1ODUsMTAg
KzE1NzksNiBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGx1
Z2lucy9QbHVnaW5EYXRhLmgKICAgICBwbHVnaW5zL1BsdWdpbkluZm9Qcm92aWRlci5oCiAgICAg
cGx1Z2lucy9QbHVnaW5WaWV3QmFzZS5oCi0gICAgcGx1Z2lucy9ucGFwaS5oCi0gICAgcGx1Z2lu
cy9ucGZ1bmN0aW9ucy5oCi0gICAgcGx1Z2lucy9ucHJ1bnRpbWUuaAotICAgIHBsdWdpbnMvbnB0
eXBlcy5oCiAKICAgICByZW5kZXJpbmcvQnJlYWtMaW5lcy5oCiAgICAgcmVuZGVyaW5nL0NsaXBS
ZWN0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKaW5kZXggZWYyNzk2ODE2ZDU1MmMxYmMxMzU3MDQxOGMxNWUzNDMw
NzE2NDM4Ni4uNjY4MTg1Yzk4NTk5ZDA1MjNmOWQ3NDcwOTkwMTY3OWQ5ODdiOWFjMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKQEAgLTU5NiwxNCArNTk2LDcgQEAgYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJy
YXlDb250cm9sbGVyLmNwcAogYmluZGluZ3MvanMvV29ya2VyTW9kdWxlU2NyaXB0TG9hZGVyLmNw
cAogYmluZGluZ3MvanMvV2luZG93UHJveHkuY3BwCiBicmlkZ2UvSWRlbnRpZmllclJlcC5jcHAK
LWJyaWRnZS9OUF9qc29iamVjdC5jcHAKLWJyaWRnZS9jL0NSdW50aW1lT2JqZWN0LmNwcAotYnJp
ZGdlL2MvY19jbGFzcy5jcHAKLWJyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCi1icmlkZ2UvYy9jX3J1
bnRpbWUuY3BwCi1icmlkZ2UvYy9jX3V0aWxpdHkuY3BwCiBicmlkZ2UvanNjL0JyaWRnZUpTQy5j
cHAKLWJyaWRnZS9ucHJ1bnRpbWUuY3BwCiBicmlkZ2UvcnVudGltZV9hcnJheS5jcHAKIGJyaWRn
ZS9ydW50aW1lX21ldGhvZC5jcHAKIGJyaWRnZS9ydW50aW1lX29iamVjdC5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4MTk1
Mjk3ZWE2ZTViYWY5MjI1ODdlNmU2NzZhOGQyYzEyM2M4ZDI4Li45YzBlMzZkMjkyZjU2YWVlNTlm
NWE2OTBlYmVkZmQwNjFlOWI2MGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00NzUsNyArNDc1LDYgQEAKIAkJMUEwRDU3NDEw
QTVDNzg2NzAwN0VERDRDIC8qIEpTT3ZlcmZsb3dFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwRDU3M0YwQTVDNzg2NzAwN0VERDRDIC8qIEpT
T3ZlcmZsb3dFdmVudC5oICovOyB9OwogCQkxQTE0MTRCNTEzQTBGMDUwMDAxOTk5NkMgLyogV2Vi
S2l0Rm9udEZhbWlseU5hbWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBMTQxNEIzMTNBMEYwNTAwMDE5OTk2QyAvKiBXZWJLaXRGb250RmFtaWx5
TmFtZXMuY3BwICovOyB9OwogCQkxQTE0MTRCNjEzQTBGMDUwMDAxOTk5NkMgLyogV2ViS2l0Rm9u
dEZhbWlseU5hbWVzLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTE0MTRCNDEzQTBGMDUwMDAxOTk5NkMgLyogV2ViS2l0Rm9u
dEZhbWlseU5hbWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKLQkJ
MUEyMTlCM0IwRENBODdBQjAwNDBFM0EwIC8qIG5wZnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTIxOUIzQTBEQ0E4N0FCMDA0MEUzQTAg
LyogbnBmdW5jdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxQTIyNDY0QTBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlRGF0YWJhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMjI0NjQ0MEND
OThEREIwMEMwNTI0MCAvKiBTUUxpdGVEYXRhYmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFBMjI0NjRDMENDOThEREIwMEMwNTI0MCAvKiBT
UUxpdGVTdGF0ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBMjI0NjQ2MENDOThEREIwMEMwNTI0MCAvKiBTUUxpdGVTdGF0ZW1lbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQTIyNDY0RTBD
Qzk4RERCMDBDMDUyNDAgLyogU1FMaXRlVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMjI0NjQ4MENDOThEREIwMEMwNTI0MCAvKiBT
UUxpdGVUcmFuc2FjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC00OTIsMTQgKzQ5MSw2IEBACiAJCTFBNEEyREYwMEExQjg1MkEwMEM4MDdG
OCAvKiBKU0hUTUxBbmNob3JFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQTRBMkRFQzBBMUI4NTJBMDBDODA3RjggLyogSlNIVE1MQW5jaG9y
RWxlbWVudC5oICovOyB9OwogCQkxQTRBOTU0RTBCNEVEQ0NCMDAyRDhDM0MgLyogU2hhcmVkQnVm
ZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTRB
OTU0QzBCNEVEQ0NCMDAyRDhDM0MgLyogU2hhcmVkQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUE0REE0MjIxQ0REM0E4MzAwRjQ0NzND
IC8qIExpbmtJY29uQ29sbGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQTREQTQyMDFDREQzQTgzMDBGNDQ3M0MgLyogTGlua0ljb25Db2xsZWN0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkx
QTU2OUNGODBEN0UyQjgyMDA3QzM5ODMgLyogY19jbGFzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1NjlDQzcwRDdFMkI4MjAwN0MzOTgzIC8qIGNf
Y2xhc3MuaCAqLzsgfTsKLQkJMUE1NjlDRkEwRDdFMkI4MjAwN0MzOTgzIC8qIGNfaW5zdGFuY2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNTY5Q0M5
MEQ3RTJCODIwMDdDMzk4MyAvKiBjX2luc3RhbmNlLmggKi87IH07Ci0JCTFBNTY5Q0ZDMEQ3RTJC
ODIwMDdDMzk4MyAvKiBjX3J1bnRpbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBNTY5Q0NCMEQ3RTJCODIwMDdDMzk4MyAvKiBjX3J1bnRpbWUuaCAq
LzsgfTsKLQkJMUE1NjlDRkUwRDdFMkI4MjAwN0MzOTgzIC8qIGNfdXRpbGl0eS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1NjlDQ0QwRDdFMkI4MjAw
N0MzOTgzIC8qIGNfdXRpbGl0eS5oICovOyB9OwotCQkxQTU2OUQwQjBEN0UyQjgyMDA3QzM5ODMg
LyogTlBfanNvYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBNTY5Q0RCMEQ3RTJCODIwMDdDMzk4MyAvKiBOUF9qc29iamVjdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTFBNTY5RDBGMEQ3RTJC
ODIwMDdDMzk4MyAvKiBucHJ1bnRpbWVfaW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1NjlDREYwRDdFMkI4MjAwN0MzOTgzIC8qIG5wcnVudGlt
ZV9pbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJMUE1NjlEMTAwRDdFMkI4MjAwN0MzOTgzIC8qIG5wcnVudGltZV9pbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1NjlDRTAwRDdFMkI4
MjAwN0MzOTgzIC8qIG5wcnVudGltZV9pbnRlcm5hbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTFBNTY5RDExMEQ3RTJCODIwMDdDMzk4MyAvKiBu
cHJ1bnRpbWVfcHJpdi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUE1NjlDRTEwRDdFMkI4MjAwN0MzOTgzIC8qIG5wcnVudGltZV9wcml2LmggKi87IH07
CiAJCTFBNTY5RDEyMEQ3RTJCODIwMDdDMzk4MyAvKiBvYmpjX2NsYXNzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNFMzBEN0UyQjgyMDA3QzM5
ODMgLyogb2JqY19jbGFzcy5oICovOyB9OwogCQkxQTU2OUQxMzBEN0UyQjgyMDA3QzM5ODMgLyog
b2JqY19jbGFzcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBNTY5Q0U0MEQ3RTJCODIwMDdDMzk4MyAvKiBvYmpjX2NsYXNzLm1tICovOyB9OwogCQkx
QTU2OUQxNDBEN0UyQjgyMDA3QzM5ODMgLyogb2JqY19oZWFkZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNTY5Q0U1MEQ3RTJCODIwMDdDMzk4MyAv
KiBvYmpjX2hlYWRlci5oICovOyB9OwpAQCAtNTUwLDkgKzU0MSw2IEBACiAJCTFBOEY2QkMxMERC
NTVDREMwMDFEQjc5NCAvKiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOEY2QkI2MERCNTVDREMwMDFEQjc5
NCAvKiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaCAqLzsgfTsKIAkJMUE4RjZCQzMwREI1NUNE
QzAwMURCNzk0IC8qIERPTUFwcGxpY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOEY2QkI4MERCNTVDREMwMDFEQjc5NCAvKiBET01B
cHBsaWNhdGlvbkNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsK
IAkJMUE4RjZCQzYwREI1NUNEQzAwMURCNzk0IC8qIEFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFBh
cnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE4
RjZCQkIwREI1NUNEQzAwMURCNzk0IC8qIEFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFBhcnNlci5o
ICovOyB9OwotCQkxQTkyN0ZEMjE0MTZBMTVCMDAzQTgzQzggLyogbnBhcGkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTI3RkNGMTQxNkExNUIwMDNB
ODNDOCAvKiBucGFwaS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTFBOTI3RkQzMTQxNkExNUIwMDNBODNDOCAvKiBucHJ1bnRpbWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTI3RkQwMTQxNkExNUIw
MDNBODNDOCAvKiBucHJ1bnRpbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQkxQTkyN0ZENDE0MTZBMTVCMDAzQTgzQzggLyogbnB0eXBlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MjdGRDExNDE2
QTE1QjAwM0E4M0M4IC8qIG5wdHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxQUFBRERBNDE0REI0MDlGMDBBRjY0QjMgLyogU2Nyb2xsaW5n
VHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFB
QUREQTIxNERCNDA5RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQUFBRERFNDE0REM4QzhGMDBBRjY0
QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBQUFEREUyMTREQzhDOEYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVl
Tm9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTFBQjMzREE1MTI1NTFFMzIwMDI0NDU3QSAvKiBJT0tpdC5mcmFtZXdvcmsgaW4gRnJhbWV3b3Jr
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUIzM0RBNDEyNTUxRTMyMDAy
NDQ1N0EgLyogSU9LaXQuZnJhbWV3b3JrICovOyB9OwpAQCAtNTExOSw3ICs1MTA3LDYgQEAKIAkJ
RTE1QTM2RDkxMTA0NTcyNzAwQjdCNjM5IC8qIFhNTE5TTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1QTM2RDgxMTA0NTcyNzAwQjdCNjM5
IC8qIFhNTE5TTmFtZXMuY3BwICovOyB9OwogCQlFMTVGRjdENTE4Qzk1NTM4MDBGRTRDODcgLyog
S2V5cHJlc3NDb21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMTVGRjdENDE4Qzk1NTM4MDBGRTRDODcgLyogS2V5cHJlc3NDb21tYW5kLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTE2NEZBQTMx
ODMxNUJGNDAwREI0RTYxIC8qIENyeXB0b0tleVJTQS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE2NEZBQTIxODMxNUJGNDAwREI0RTYxIC8qIENyeXB0
b0tleVJTQS5oICovOyB9OwotCQlFMTY5ODAzRDExMzM1NDJEMDA4OTQxMTUgLyogQ1J1bnRpbWVP
YmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
Njk4MDNDMTEzMzU0MkQwMDg5NDExNSAvKiBDUnVudGltZU9iamVjdC5oICovOyB9OwogCQlFMTY5
ODI1NTExMzQ2MjlEMDA4OTQxMTUgLyogT2JqQ1J1bnRpbWVPYmplY3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNjk4MjU0MTEzNDYyOUQwMDg5NDEx
NSAvKiBPYmpDUnVudGltZU9iamVjdC5oICovOyB9OwogCQlFMTY5ODI2MDExMzQ2MzZBMDA4OTQx
MTUgLyogT2JqQ1J1bnRpbWVPYmplY3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMTY5ODI1RjExMzQ2MzZBMDA4OTQxMTUgLyogT2JqQ1J1bnRpbWVP
YmplY3QubW0gKi87IH07CiAJCUUxNkE4NEZBMTRDODVDQ0MwMDI5NzdERiAvKiBDU1NCb3JkZXJJ
bWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE2
QTg0RjgxNEM4NUNDQzAwMjk3N0RGIC8qIENTU0JvcmRlckltYWdlLmggKi87IH07CkBAIC02Njk1
LDcgKzY2ODIsNiBAQAogCQkxQTBENTczRjBBNUM3ODY3MDA3RURENEMgLyogSlNPdmVyZmxvd0V2
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU092ZXJmbG93RXZlbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUExNDE0QjMxM0EwRjA1MDAwMTk5OTZD
IC8qIFdlYktpdEZvbnRGYW1pbHlOYW1lcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJLaXRG
b250RmFtaWx5TmFtZXMuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9XZWJLaXRG
b250RmFtaWx5TmFtZXMuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9Owog
CQkxQTE0MTRCNDEzQTBGMDUwMDAxOTk5NkMgLyogV2ViS2l0Rm9udEZhbWlseU5hbWVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFdlYktpdEZvbnRGYW1pbHlOYW1lcy5oOyBwYXRoID0gRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9XZWJLaXRGb250RmFtaWx5TmFtZXMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BS
T0RVQ1RTX0RJUjsgfTsKLQkJMUEyMTlCM0EwRENBODdBQjAwNDBFM0EwIC8qIG5wZnVuY3Rpb25z
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG5wZnVuY3Rpb25zLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMjI0NjQzMENDOThEREIwMEMwNTI0MCAvKiBTUUxp
dGVEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTUUxp
dGVEYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMjI0NjQ0MEND
OThEREIwMEMwNTI0MCAvKiBTUUxpdGVEYXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTUUxpdGVEYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQTIyNDY0NTBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlU3RhdGVtZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNRTGl0ZVN0YXRlbWVudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NzM1LDIwICs2NzIxLDYgQEAKIAkJMUE0QTk1NTEw
QjRFRENGRjAwMkQ4QzNDIC8qIFNoYXJlZEJ1ZmZlckNvY29hLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNoYXJlZEJ1ZmZlckNvY29hLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQTREQTQxRjFDREQzQTgzMDBGNDQ3M0MgLyogTGlua0ljb25D
b2xsZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGlua0lj
b25Db2xsZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTREQTQyMDFD
REQzQTgzMDBGNDQ3M0MgLyogTGlua0ljb25Db2xsZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTGlua0ljb25Db2xsZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMUE1NjlDQzYwRDdFMkI4MjAwN0MzOTgzIC8qIGNfY2xhc3MuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gY19jbGFzcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTFBNTY5Q0M3MEQ3RTJCODIwMDdDMzk4MyAvKiBjX2NsYXNzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNfY2xhc3MuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMUE1NjlDQzgwRDdFMkI4MjAwN0MzOTgzIC8qIGNfaW5zdGFuY2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gY19pbnN0YW5jZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBNTY5Q0M5MEQ3RTJCODIwMDdDMzk4MyAvKiBj
X2luc3RhbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNfaW5zdGFuY2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE1NjlDQ0EwRDdFMkI4MjAwN0MzOTgz
IC8qIGNfcnVudGltZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBj
X3J1bnRpbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTU2OUNDQjBEN0Uy
QjgyMDA3QzM5ODMgLyogY19ydW50aW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IGNfcnVudGltZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTU2OUNDQzBE
N0UyQjgyMDA3QzM5ODMgLyogY191dGlsaXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IGNfdXRpbGl0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTFBNTY5Q0NEMEQ3RTJCODIwMDdDMzk4MyAvKiBjX3V0aWxpdHkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gY191dGlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTFBNTY5Q0RBMEQ3RTJCODIwMDdDMzk4MyAvKiBOUF9qc29iamVjdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOUF9qc29iamVjdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTFBNTY5Q0RCMEQ3RTJCODIwMDdDMzk4MyAvKiBOUF9qc29iamVj
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOUF9qc29iamVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTU2OUNERDBEN0UyQjgyMDA3QzM5ODMgLyogbnBy
dW50aW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG5wcnVudGlt
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBNTY5Q0RGMEQ3RTJCODIwMDdD
Mzk4MyAvKiBucHJ1bnRpbWVfaW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBucHJ1bnRpbWVfaW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTU2OUNF
MDBEN0UyQjgyMDA3QzM5ODMgLyogbnBydW50aW1lX2ludGVybmFsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IG5wcnVudGltZV9pbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkxQTU2OUNFMTBEN0UyQjgyMDA3QzM5ODMgLyogbnBydW50aW1lX3ByaXYu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbnBydW50aW1lX3ByaXYuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE1NjlDRTMwRDdFMkI4MjAwN0MzOTgzIC8qIG9i
amNfY2xhc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gb2JqY19jbGFzcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTU2OUNFNDBEN0UyQjgyMDA3QzM5ODMg
Lyogb2JqY19jbGFzcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IG9iamNfY2xhc3MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBNTY5Q0U1MEQ3
RTJCODIwMDdDMzk4MyAvKiBvYmpjX2hlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBvYmpjX2hlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjg1
Miw5ICs2ODI0LDYgQEAKIAkJMUE4RjZCQjkwREI1NUNEQzAwMURCNzk0IC8qIERPTUFwcGxpY2F0
aW9uQ2FjaGUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IERPTUFwcGxpY2F0aW9uQ2FjaGUu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQThGNkJCQTBEQjU1Q0RDMDAxREI3
OTQgLyogQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFBhcnNlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOEY2QkJCMERCNTVDREMwMDFEQjc5NCAv
KiBBcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0UGFyc2VyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTFBOTI3RkNGMTQxNkExNUIwMDNBODNDOCAvKiBucGFwaS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBucGFwaS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkxQTkyN0ZEMDE0MTZBMTVCMDAzQTgzQzggLyogbnBydW50aW1lLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG5wcnVudGltZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkxQTkyN0ZEMTE0MTZBMTVCMDAzQTgzQzggLyogbnB0eXBlcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBucHR5cGVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFBQUFEREExMTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGluZ1RyZWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUFBRERBMjE0REI0MDlGMDBBRjY0
QjMgLyogU2Nyb2xsaW5nVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
Y3JvbGxpbmdUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQUFEREUxMTRE
QzhDOEYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxpbmdUcmVlTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNjIzNSw4ICsxNjIwNCw2IEBACiAJCUUxNjRBMkVCMTkxQUU2MzUw
MDEwNzM3RCAvKiBCbG9iRGF0YUZpbGVSZWZlcmVuY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBCbG9iRGF0YUZpbGVSZWZlcmVuY2VNYWMubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNjRGQUEyMTgzMTVCRjQwMERCNEU2MSAvKiBDcnlw
dG9LZXlSU0EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3J5cHRvS2V5UlNB
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNjRGQUE0MTgzMTVFMUEwMERCNEU2
MSAvKiBDcnlwdG9LZXlSU0FNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ3J5cHRvS2V5UlNBTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
RTE2OTgwM0MxMTMzNTQyRDAwODk0MTE1IC8qIENSdW50aW1lT2JqZWN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENSdW50aW1lT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUUxNjk4MDQ4MTEzMzY0NDcwMDg5NDExNSAvKiBDUnVudGltZU9iamVjdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDUnVudGltZU9iamVjdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNjk4MjU0MTEzNDYyOUQwMDg5NDEx
NSAvKiBPYmpDUnVudGltZU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBPYmpDUnVudGltZU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTY5
ODI1RjExMzQ2MzZBMDA4OTQxMTUgLyogT2JqQ1J1bnRpbWVPYmplY3QubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBPYmpDUnVudGltZU9iamVjdC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE2QTg0RjcxNEM4NUNDQzAwMjk3N0RGIC8qIENTU0Jv
cmRlckltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0Jv
cmRlckltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NjUzLDE4ICsx
ODYyMCwxMSBAQAogCQkxQTU2OUNDNDBEN0UyQjYwMDA3QzM5ODMgLyogYnJpZGdlICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkxQTU2OUNDNTBEN0UyQjgy
MDA3QzM5ODMgLyogYyAqLywKLQkJCQk1OUI1OTc3MTExMDg2NTU2MDA3MTU5RTggLyoganNjICov
LAotCQkJCTFBNTY5Q0UyMEQ3RTJCODIwMDdDMzk4MyAvKiBvYmpjICovLAogCQkJCTU5OUU3NThG
MTEwNTVBMUYwMEQ5MDRGQSAvKiBCcmlkZ2UuaCAqLywKIAkJCQkxQTcxRDU3OTBGMzM4MTkwMDBG
OUNFNEUgLyogSWRlbnRpZmllclJlcC5jcHAgKi8sCiAJCQkJMUE3MUQ1N0EwRjMzODE5MDAwRjlD
RTRFIC8qIElkZW50aWZpZXJSZXAuaCAqLywKLQkJCQkxQTU2OUNEQTBEN0UyQjgyMDA3QzM5ODMg
LyogTlBfanNvYmplY3QuY3BwICovLAotCQkJCTFBNTY5Q0RCMEQ3RTJCODIwMDdDMzk4MyAvKiBO
UF9qc29iamVjdC5oICovLAotCQkJCTFBNTY5Q0REMEQ3RTJCODIwMDdDMzk4MyAvKiBucHJ1bnRp
bWUuY3BwICovLAotCQkJCTFBNTY5Q0RGMEQ3RTJCODIwMDdDMzk4MyAvKiBucHJ1bnRpbWVfaW1w
bC5oICovLAotCQkJCTFBNTY5Q0UwMEQ3RTJCODIwMDdDMzk4MyAvKiBucHJ1bnRpbWVfaW50ZXJu
YWwuaCAqLywKLQkJCQkxQTU2OUNFMTBEN0UyQjgyMDA3QzM5ODMgLyogbnBydW50aW1lX3ByaXYu
aCAqLywKKwkJCQk1OUI1OTc3MTExMDg2NTU2MDA3MTU5RTggLyoganNjICovLAorCQkJCTFBNTY5
Q0UyMEQ3RTJCODIwMDdDMzk4MyAvKiBvYmpjICovLAogCQkJCTFBNTY5Q0VGMEQ3RTJCODIwMDdD
Mzk4MyAvKiBydW50aW1lX2FycmF5LmNwcCAqLywKIAkJCQkxQTU2OUNGMDBEN0UyQjgyMDA3QzM5
ODMgLyogcnVudGltZV9hcnJheS5oICovLAogCQkJCTFBNTY5Q0YxMEQ3RTJCODIwMDdDMzk4MyAv
KiBydW50aW1lX21ldGhvZC5jcHAgKi8sCkBAIC0xODY3NywyMyArMTg2MzcsNiBAQAogCQkJcGF0
aCA9IGJyaWRnZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCTFBNTY5Q0M1
MEQ3RTJCODIwMDdDMzk4MyAvKiBjICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGls
ZHJlbiA9ICgKLQkJCQkxQTU2OUNDNjBEN0UyQjgyMDA3QzM5ODMgLyogY19jbGFzcy5jcHAgKi8s
Ci0JCQkJMUE1NjlDQzcwRDdFMkI4MjAwN0MzOTgzIC8qIGNfY2xhc3MuaCAqLywKLQkJCQkxQTU2
OUNDODBEN0UyQjgyMDA3QzM5ODMgLyogY19pbnN0YW5jZS5jcHAgKi8sCi0JCQkJMUE1NjlDQzkw
RDdFMkI4MjAwN0MzOTgzIC8qIGNfaW5zdGFuY2UuaCAqLywKLQkJCQkxQTU2OUNDQTBEN0UyQjgy
MDA3QzM5ODMgLyogY19ydW50aW1lLmNwcCAqLywKLQkJCQkxQTU2OUNDQjBEN0UyQjgyMDA3QzM5
ODMgLyogY19ydW50aW1lLmggKi8sCi0JCQkJMUE1NjlDQ0MwRDdFMkI4MjAwN0MzOTgzIC8qIGNf
dXRpbGl0eS5jcHAgKi8sCi0JCQkJMUE1NjlDQ0QwRDdFMkI4MjAwN0MzOTgzIC8qIGNfdXRpbGl0
eS5oICovLAotCQkJCUUxNjk4MDQ4MTEzMzY0NDcwMDg5NDExNSAvKiBDUnVudGltZU9iamVjdC5j
cHAgKi8sCi0JCQkJRTE2OTgwM0MxMTMzNTQyRDAwODk0MTE1IC8qIENSdW50aW1lT2JqZWN0Lmgg
Ki8sCi0JCQkpOwotCQkJcGF0aCA9IGM7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9
OwogCQkxQTU2OUNFMjBEN0UyQjgyMDA3QzM5ODMgLyogb2JqYyAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMjEwOSwxMCArMjIwNTIsNiBAQAogCQkJCUE5
QzZFNEVEMEQ3NDVFMzgwMDY0NDJFOSAvKiBET01QbHVnaW5BcnJheS5jcHAgKi8sCiAJCQkJQTlD
NkU0RUUwRDc0NUUzODAwNjQ0MkU5IC8qIERPTVBsdWdpbkFycmF5LmggKi8sCiAJCQkJQTlDNkU2
NjEwRDc0NjcxRTAwNjQ0MkU5IC8qIERPTVBsdWdpbkFycmF5LmlkbCAqLywKLQkJCQkxQTkyN0ZD
RjE0MTZBMTVCMDAzQTgzQzggLyogbnBhcGkuaCAqLywKLQkJCQkxQTIxOUIzQTBEQ0E4N0FCMDA0
MEUzQTAgLyogbnBmdW5jdGlvbnMuaCAqLywKLQkJCQkxQTkyN0ZEMDE0MTZBMTVCMDAzQTgzQzgg
LyogbnBydW50aW1lLmggKi8sCi0JCQkJMUE5MjdGRDExNDE2QTE1QjAwM0E4M0M4IC8qIG5wdHlw
ZXMuaCAqLywKIAkJCQlBOUM2RTRGMTBENzQ1RTQ4MDA2NDQyRTkgLyogUGx1Z2luRGF0YS5jcHAg
Ki8sCiAJCQkJQTlDNkU0RjIwRDc0NUU0ODAwNjQ0MkU5IC8qIFBsdWdpbkRhdGEuaCAqLywKIAkJ
CQkxQTA4RkVEQTFENTkyQjhCMDA4QkE4Q0IgLyogUGx1Z2luSW5mb1Byb3ZpZGVyLmNwcCAqLywK
QEAgLTMxOTUyLDEwICszMTg5MSw2IEBACiAJCQkJN0E0NTAzMzAxOERCNzE3MjAwMzc3QjM0IC8q
IEJ1ZmZlcmVkTGluZVJlYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRGQTQ4OEYxREI1NDFE
MDAwMzYyQjk5IC8qIEJ1ZmZlclNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQjAx
MjUxRjEyRDAwM0VGMjY5IC8qIEJ1dHRvbklucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MUE1NjlDRjgwRDdFMkI4MjAwN0MzOTgzIC8qIGNfY2xhc3MuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTFBNTY5Q0ZBMEQ3RTJCODIwMDdDMzk4MyAvKiBjX2luc3RhbmNlLmggaW4gSGVhZGVycyAqLywK
LQkJCQkxQTU2OUNGQzBEN0UyQjgyMDA3QzM5ODMgLyogY19ydW50aW1lLmggaW4gSGVhZGVycyAq
LywKLQkJCQkxQTU2OUNGRTBEN0UyQjgyMDA3QzM5ODMgLyogY191dGlsaXR5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwN0MwNDZDNDFFNDI1MDhCMDA3MjAxRTcgLyogQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk2MzUzRTFFNjFGOTE3NDMxMDBBMzQyMDggLyog
Q2FjaGVkQXBwbGljYXRpb25NYW5pZmVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCMTZDMUEw
OTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZENTU1N0eWxlU2hlZXQuaCBpbiBIZWFkZXJzICovLApA
QCAtMzIyMTAsNyArMzIxNDUsNiBAQAogCQkJCTQxQUJFNjdCMUQwNTgwREIwMDZEODYyRCAvKiBD
cm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQzQxNURB
MEY2NTVENkYwMDkyRDJGQiAvKiBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk2QjFGNDgxMTIyOThBMzdFMDBERThCODIgLyogQ3Jvc3NTaXRlTmF2
aWdhdGlvbkRhdGFUcmFuc2Zlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTE2OTgwM0QxMTMzNTQy
RDAwODk0MTE1IC8qIENSdW50aW1lT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzVDQTI4
QjEzMDM2NUY4MDBFOTlBRDkgLyogQ3J5cHRvLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzlBQ0E5
ODFGM0NDREFEMDBGM0FBMDkgLyogQ3J5cHRvQWVzS2V5QWxnb3JpdGhtLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFMTcyQUY2RTE4MEYyNEM2MDBGQkFEQjkgLyogQ3J5cHRvQWxnb3JpdGhtLmggaW4g
SGVhZGVycyAqLywKQEAgLTM0NjM1LDE0ICszNDU2OSw2IEBACiAJCQkJOThFQjFGOTUxMzEzRkUw
NTAwRDBFMUVBIC8qIE5vdEltcGxlbWVudGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTZGRDI1
RjI0MEZBNEU1MDA2NjYxRDggLyogTm93UGxheWluZ0luZm8uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQxNzhFRjE3MjQxMjYwODQwMDE5M0M3NCAvKiBOb3dQbGF5aW5nTWFuYWdlci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMUE1NjlEMEIwRDdFMkI4MjAwN0MzOTgzIC8qIE5QX2pzb2JqZWN0LmggaW4g
SGVhZGVycyAqLywKLQkJCQkxQTkyN0ZEMjE0MTZBMTVCMDAzQTgzQzggLyogbnBhcGkuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTFBMjE5QjNCMERDQTg3QUIwMDQwRTNBMCAvKiBucGZ1bmN0aW9ucy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMUE5MjdGRDMxNDE2QTE1QjAwM0E4M0M4IC8qIG5wcnVudGlt
ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUE1NjlEMEYwRDdFMkI4MjAwN0MzOTgzIC8qIG5wcnVu
dGltZV9pbXBsLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTU2OUQxMDBEN0UyQjgyMDA3QzM5ODMg
LyogbnBydW50aW1lX2ludGVybmFsLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTU2OUQxMTBEN0Uy
QjgyMDA3QzM5ODMgLyogbnBydW50aW1lX3ByaXYuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBOTI3
RkQ0MTQxNkExNUIwMDNBODNDOCAvKiBucHR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzUw
MEYzMjEzRkRFM0JFMDA5OUVDMjQgLyogTlNTY3JvbGxlckltcERldGFpbHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTJEQTM5N0U1MjY1QzczNzUwMDQ2OEYzMyAvKiBOdWxsR3JhcGhpY3NDb250ZXh0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RDODEyNTFGMTJEMDAzRUYyNjkgLyogTnVtYmVy
SW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggYTQzYWVlMDQ4ZjRiYzg1MDQ4Njg5ZWNmMTcx
MDhjYmQ4NTE5YjZiYS4uMDFjMTQxOTA1Yjk4ODExOTM0ZGZhYTNhMTdlMTg0YjRmYjQ5ODc5MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAK
QEAgLTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTW9kdWxl
RmV0Y2hGYWlsdXJlS2luZC5oIgogI2luY2x1ZGUgIk1vZHVsZUZldGNoUGFyYW1ldGVycy5oIgot
I2luY2x1ZGUgIk5QX2pzb2JqZWN0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBh
Z2VDb25zb2xlQ2xpZW50LmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCkBAIC01OSw3ICs1OCw2
IEBACiAjaW5jbHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3IuaCIKICNpbmNsdWRlICJXZWJDb3Jl
SklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKLSNpbmNs
dWRlICJucHJ1bnRpbWVfaW1wbC5oIgogI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0RlYnVnZ2VyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SGVhcC5oPgpAQCAtOTcsOSArOTUsNiBAQCBTY3JpcHRDb250cm9sbGVyOjpTY3JpcHRDb250cm9s
bGVyKEZyYW1lJiBmcmFtZSkKICAgICA6IG1fZnJhbWUoZnJhbWUpCiAgICAgLCBtX3NvdXJjZVVS
TCgwKQogICAgICwgbV9wYXVzZWQoZmFsc2UpCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi0gICAgLCBtX3dpbmRvd1NjcmlwdE5QT2JqZWN0KDApCi0jZW5kaWYKICNpZiBQTEFURk9S
TShDT0NPQSkKICAgICAsIG1fd2luZG93U2NyaXB0T2JqZWN0KDApCiAjZW5kaWYKQEAgLTQ3MSwy
OSArNDY2LDYgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjb2xsZWN0SXNvbGF0ZWRDb250ZXh0
cyhWZWN0b3I8c3RkOjpwYWlyPEpTQzo6SlNHbG9iYWxPYmoKICAgICB9CiB9CiAKLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLU5QT2JqZWN0KiBTY3JpcHRDb250cm9sbGVyOjp3aW5k
b3dTY3JpcHROUE9iamVjdCgpCi17Ci0gICAgaWYgKCFtX3dpbmRvd1NjcmlwdE5QT2JqZWN0KSB7
Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOwotICAgICAgICBpZiAoY2Fu
RXhlY3V0ZVNjcmlwdHMoTm90QWJvdXRUb0V4ZWN1dGVTY3JpcHQpKSB7Ci0gICAgICAgICAgICAv
LyBKYXZhU2NyaXB0IGlzIGVuYWJsZWQsIHNvIHRoZXJlIGlzIGEgSmF2YVNjcmlwdCB3aW5kb3cg
b2JqZWN0LgotICAgICAgICAgICAgLy8gUmV0dXJuIGFuIE5QT2JqZWN0IGJvdW5kIHRvIHRoZSB3
aW5kb3cgb2JqZWN0LgotICAgICAgICAgICAgYXV0byogd2luZG93ID0ganNXaW5kb3dQcm94eShw
bHVnaW5Xb3JsZCgpKS53aW5kb3coKTsKLSAgICAgICAgICAgIEFTU0VSVCh3aW5kb3cpOwotICAg
ICAgICAgICAgQmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3QgPSBiaW5kaW5nUm9vdE9iamVjdCgp
OwotICAgICAgICAgICAgbV93aW5kb3dTY3JpcHROUE9iamVjdCA9IF9OUE5fQ3JlYXRlU2NyaXB0
T2JqZWN0KDAsIHdpbmRvdywgcm9vdCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyBKYXZhU2NyaXB0IGlzIG5vdCBlbmFibGVkLCBzbyB3ZSBjYW5ub3QgYmluZCB0aGUgTlBPYmpl
Y3QgdG8gdGhlIEphdmFTY3JpcHQgd2luZG93IG9iamVjdC4KLSAgICAgICAgICAgIC8vIEluc3Rl
YWQsIHdlIGNyZWF0ZSBhbiBOUE9iamVjdCBvZiBhIGRpZmZlcmVudCBjbGFzcywgb25lIHdoaWNo
IGlzIG5vdCBib3VuZCB0byBhIEphdmFTY3JpcHQgb2JqZWN0LgotICAgICAgICAgICAgbV93aW5k
b3dTY3JpcHROUE9iamVjdCA9IF9OUE5fQ3JlYXRlTm9TY3JpcHRPYmplY3QoKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiBtX3dpbmRvd1NjcmlwdE5QT2JqZWN0OwotfQotI2VuZGlm
Ci0KICNpZiAhUExBVEZPUk0oQ09DT0EpCiBSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+
IFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCog
d2lkZ2V0KQogewpAQCAtNTU3LDE2ICs1MjksNiBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNs
ZWFyU2NyaXB0T2JqZWN0cygpCiAgICAgICAgIG1fYmluZGluZ1Jvb3RPYmplY3QtPmludmFsaWRh
dGUoKTsKICAgICAgICAgbV9iaW5kaW5nUm9vdE9iamVjdCA9IG51bGxwdHI7CiAgICAgfQotCi0j
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgaWYgKG1fd2luZG93U2NyaXB0TlBP
YmplY3QpIHsKLSAgICAgICAgLy8gQ2FsbCBfTlBOX0RlYWxsb2NhdGVPYmplY3QoKSBpbnN0ZWFk
IG9mIF9OUE5fUmVsZWFzZU9iamVjdCgpIHNvIHRoYXQgd2UgZG9uJ3QgbGVhayBpZiBhIHBsdWdp
biBmYWlscyB0byByZWxlYXNlIHRoZSB3aW5kb3cKLSAgICAgICAgLy8gc2NyaXB0IG9iamVjdCBw
cm9wZXJseS4KLSAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgY2F1c2UgYW55IHByb2JsZW1zIGZv
ciBwbHVnaW5zIHNpbmNlIHRoZXkgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHN0b3BwZWQgYW5k
IGRlc3Ryb3llZCBhdCB0aGlzIHBvaW50LgotICAgICAgICBfTlBOX0RlYWxsb2NhdGVPYmplY3Qo
bV93aW5kb3dTY3JpcHROUE9iamVjdCk7Ci0gICAgICAgIG1fd2luZG93U2NyaXB0TlBPYmplY3Qg
PSBudWxscHRyOwotICAgIH0KLSNlbmRpZgogfQogCiBKU0M6OkpTVmFsdWUgU2NyaXB0Q29udHJv
bGxlcjo6ZXhlY3V0ZVNjcmlwdElnbm9yaW5nRXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgc2NyaXB0
LCBib29sIGZvcmNlVXNlckdlc3R1cmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRDb250cm9sbGVyLmgKaW5kZXggZGFmOWVhZDIxY2Q4M2NjZjA1MzFlYWZhNjEzN2ZmMDcx
ODhmNjcxZi4uMDExZWJlNzI1ZmM3ZDJiNmE5ODU3NjE5NmMxNzk2NWMxMTRmOWQwMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaApAQCAtMTY1LDEw
ICsxNjUsNiBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIFdFQkNPUkVfRVhQT1JUIEpTQzo6SlNP
YmplY3QqIGpzT2JqZWN0Rm9yUGx1Z2luRWxlbWVudChIVE1MUGx1Z0luRWxlbWVudCopOwotICAg
IAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIFdFQkNPUkVfRVhQT1JUIE5Q
T2JqZWN0KiB3aW5kb3dTY3JpcHROUE9iamVjdCgpOwotI2VuZGlmCiAKICAgICB2b2lkIGluaXRT
Y3JpcHRGb3JXaW5kb3dQcm94eShKU1dpbmRvd1Byb3h5Jik7CiAKQEAgLTIwMCw5ICsxOTYsNiBA
QCBwcml2YXRlOgogICAgIC8vIFRoaXMgZW5zdXJlcyB0aGV5IGFyZSBzdGlsbCBhdmFpbGFibGUg
d2hlbiB0aGUgcGFnZSBpcyByZXN0b3JlZC4KICAgICBSZWZQdHI8SlNDOjpCaW5kaW5nczo6Um9v
dE9iamVjdD4gbV9jYWNoZWFibGVCaW5kaW5nUm9vdE9iamVjdDsKICAgICBSb290T2JqZWN0TWFw
IG1fcm9vdE9iamVjdHM7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgTlBP
YmplY3QqIG1fd2luZG93U2NyaXB0TlBPYmplY3Q7Ci0jZW5kaWYKICNpZiBQTEFURk9STShDT0NP
QSkKICAgICBSZXRhaW5QdHI8V2ViU2NyaXB0T2JqZWN0PiBtX3dpbmRvd1NjcmlwdE9iamVjdDsK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29u
dHJvbGxlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xs
ZXJNYWMubW0KaW5kZXggNmYyYzA5YjI0YTlmMTcwYjE1NWQ4ZjE4MmE2MmIwYmEyMzI4ODA2OS4u
YzY5M2FmNDdmZjI2ZTg4NTMxMjA4MWU3M2EwNTZhOTgwYmQ4YWIzMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tCkBAIC00NCwxMiAr
NDQsNiBAQAogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0SW50ZXJuYWwuaD4KICNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCi0jaW1wb3J0ICJjX2luc3RhbmNlLmgiCi0jaW1wb3J0ICJOUF9qc29iamVjdC5o
IgotI2ltcG9ydCAibnBydW50aW1lX2ltcGwuaCIKLSNlbmRpZgotCiBAaW50ZXJmYWNlIE5TT2Jq
ZWN0IChXZWJQbHVnaW4pCiAtIChpZClvYmplY3RGb3JXZWJTY3JpcHQ7CiAtIChOUE9iamVjdCAq
KWNyZWF0ZVBsdWdpblNjcmlwdGFibGVPYmplY3Q7CkBAIC03NywyMSArNzEsNiBAQCBSZWZQdHI8
SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+IFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNjcmlwdElu
c3RhbmNlRm9yV2lkZ2V0KAogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJl
dHVybiBKU0M6OkJpbmRpbmdzOjpPYmpjSW5zdGFuY2U6OmNyZWF0ZShvYmplY3RGb3JXZWJTY3Jp
cHQsIFdURk1vdmUocm9vdE9iamVjdCkpOwogICAgIH0KLQotICAgIGlmIChbd2lkZ2V0VmlldyBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNyZWF0ZVBsdWdpblNjcmlwdGFibGVPYmplY3Qp
XSkgewotI2lmICFFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0jZWxzZQotICAgICAgICBOUE9iamVjdCogbnBPYmplY3QgPSBbd2lkZ2V0VmlldyBj
cmVhdGVQbHVnaW5TY3JpcHRhYmxlT2JqZWN0XTsKLSAgICAgICAgaWYgKCFucE9iamVjdCkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBhdXRvIGluc3RhbmNlID0gSlNDOjpC
aW5kaW5nczo6Q0luc3RhbmNlOjpjcmVhdGUobnBPYmplY3QsIFdURk1vdmUocm9vdE9iamVjdCkp
OwotICAgICAgICAvLyAtY3JlYXRlUGx1Z2luU2NyaXB0YWJsZU9iamVjdCByZXR1cm5zIGEgcmV0
YWluZWQgTlBPYmplY3QuICBUaGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIHJlbGVhc2UgaXQuCi0g
ICAgICAgIF9OUE5fUmVsZWFzZU9iamVjdChucE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBXVEZN
b3ZlKGluc3RhbmNlKTsKLSNlbmRpZgotICAgIH0KLQogICAgIHJldHVybiBudWxscHRyOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggY2RjNmQ2YjljMjU3ZjRmNWI3NDY1MTJhZmVlYzk1YzIyMmUxMDRjOS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvTlBfanNvYmplY3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTU3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNs
dWRlICJOUF9qc29iamVjdC5oIgotCi0jaW5jbHVkZSAiSWRlbnRpZmllclJlcC5oIgotI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgImNfaW5zdGFuY2UuaCIKLSNpbmNsdWRlICJj
X3V0aWxpdHkuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfcHJpdi5oIgotI2luY2x1ZGUgInJ1bnRp
bWVfcm9vdC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NhdGNoU2NvcGUuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9Db21wbGV0aW9uLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvRXJyb3IuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdC5oPgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1Byb3BlcnR5TmFtZUFycmF5Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU291cmNl
Q29kZS5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi0jcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2goZGVmYXVsdCkK
LSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3AK
LQotbmFtZXNwYWNlIEpTQyB7Ci11c2luZyBuYW1lc3BhY2UgQmluZGluZ3M7Ci11c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKLQotY2xhc3MgT2JqZWN0TWFwIHsKLXB1YmxpYzoKLSAgICBOUE9iamVj
dCogZ2V0KFJvb3RPYmplY3QqIHJvb3RPYmplY3QsIEpTT2JqZWN0KiBqc09iamVjdCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX21hcC5nZXQocm9vdE9iamVjdCkuZ2V0KGpzT2JqZWN0KTsKLSAg
ICB9Ci0KLSAgICB2b2lkIGFkZChSb290T2JqZWN0KiByb290T2JqZWN0LCBKU09iamVjdCoganNP
YmplY3QsIE5QT2JqZWN0KiBucE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEhhc2hNYXA8Um9vdE9i
amVjdCosIEpTVG9OUE9iamVjdE1hcD46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHJvb3RP
YmplY3QpOwotICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkgewotICAgICAgICAgICAg
cm9vdE9iamVjdC0+YWRkSW52YWxpZGF0aW9uQ2FsbGJhY2soJm1faW52YWxpZGF0aW9uQ2FsbGJh
Y2spOwotICAgICAgICAgICAgaXRlciA9IG1fbWFwLmFkZChyb290T2JqZWN0LCBKU1RvTlBPYmpl
Y3RNYXAoKSkuaXRlcmF0b3I7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQoaXRlci0+dmFs
dWUuZmluZChqc09iamVjdCkgPT0gaXRlci0+dmFsdWUuZW5kKCkpOwotICAgICAgICBpdGVyLT52
YWx1ZS5hZGQoanNPYmplY3QsIG5wT2JqZWN0KTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlbW92ZShS
b290T2JqZWN0KiByb290T2JqZWN0KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fbWFwLmNvbnRh
aW5zKHJvb3RPYmplY3QpKTsKLSAgICAgICAgbV9tYXAucmVtb3ZlKHJvb3RPYmplY3QpOwotICAg
IH0KLQotICAgIHZvaWQgcmVtb3ZlKFJvb3RPYmplY3QqIHJvb3RPYmplY3QsIEpTT2JqZWN0KiBq
c09iamVjdCkKLSAgICB7Ci0gICAgICAgIEhhc2hNYXA8Um9vdE9iamVjdCosIEpTVG9OUE9iamVj
dE1hcD46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHJvb3RPYmplY3QpOwotICAgICAgICBB
U1NFUlQoaXRlciAhPSBtX21hcC5lbmQoKSk7Ci0gICAgICAgIEFTU0VSVChpdGVyLT52YWx1ZS5m
aW5kKGpzT2JqZWN0KSAhPSBpdGVyLT52YWx1ZS5lbmQoKSk7Ci0KLSAgICAgICAgaXRlci0+dmFs
dWUucmVtb3ZlKGpzT2JqZWN0KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RydWN0IFJvb3RP
YmplY3RJbnZhbGlkYXRpb25DYWxsYmFjayA6IHB1YmxpYyBSb290T2JqZWN0OjpJbnZhbGlkYXRp
b25DYWxsYmFjayB7Ci0gICAgICAgIHZvaWQgb3BlcmF0b3IoKShSb290T2JqZWN0Kikgb3ZlcnJp
ZGU7Ci0gICAgfTsKLSAgICBSb290T2JqZWN0SW52YWxpZGF0aW9uQ2FsbGJhY2sgbV9pbnZhbGlk
YXRpb25DYWxsYmFjazsKLQotICAgIC8vIEpTT2JqZWN0cyBhcmUgcHJvdGVjdGVkIGJ5IFJvb3RP
YmplY3QuCi0gICAgdHlwZWRlZiBIYXNoTWFwPEpTT2JqZWN0KiwgTlBPYmplY3QqPiBKU1RvTlBP
YmplY3RNYXA7Ci0gICAgSGFzaE1hcDxSb290T2JqZWN0KiwgSlNUb05QT2JqZWN0TWFwPiBtX21h
cDsKLX07Ci0KLQotc3RhdGljIE9iamVjdE1hcCYgb2JqZWN0TWFwKCkKLXsKLSAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8T2JqZWN0TWFwPiBtYXA7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotdm9p
ZCBPYmplY3RNYXA6OlJvb3RPYmplY3RJbnZhbGlkYXRpb25DYWxsYmFjazo6b3BlcmF0b3IoKShS
b290T2JqZWN0KiByb290T2JqZWN0KQotewotICAgIG9iamVjdE1hcCgpLnJlbW92ZShyb290T2Jq
ZWN0KTsKLX0KLQotc3RhdGljIHZvaWQgZ2V0TGlzdEZyb21WYXJpYW50QXJncyhKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgTlBWYXJpYW50KiBhcmdzLCB1bnNpZ25l
ZCBhcmdDb3VudCwgUm9vdE9iamVjdCogcm9vdE9iamVjdCwgTWFya2VkQXJndW1lbnRCdWZmZXIm
IGFMaXN0KQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdDb3VudDsgKytpKQot
ICAgICAgICBhTGlzdC5hcHBlbmQoY29udmVydE5QVmFyaWFudFRvVmFsdWUobGV4aWNhbEdsb2Jh
bE9iamVjdCwgJmFyZ3NbaV0sIHJvb3RPYmplY3QpKTsKLX0KLQotc3RhdGljIE5QT2JqZWN0KiBq
c0FsbG9jYXRlKE5QUCwgTlBDbGFzcyopCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PE5QT2Jq
ZWN0Kj4obWFsbG9jKHNpemVvZihKYXZhU2NyaXB0T2JqZWN0KSkpOwotfQotCi1zdGF0aWMgdm9p
ZCBqc0RlYWxsb2NhdGUoTlBPYmplY3QqIG5wT2JqKQotewotICAgIEphdmFTY3JpcHRPYmplY3Qq
IG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlwdE9iamVjdCo+KG5wT2JqKTsKLQotICAg
IGlmIChvYmotPnJvb3RPYmplY3QgJiYgb2JqLT5yb290T2JqZWN0LT5pc1ZhbGlkKCkpIHsKLSAg
ICAgICAgb2JqZWN0TWFwKCkucmVtb3ZlKG9iai0+cm9vdE9iamVjdCwgb2JqLT5pbXApOwotICAg
ICAgICBvYmotPnJvb3RPYmplY3QtPmdjVW5wcm90ZWN0KG9iai0+aW1wKTsKLSAgICB9Ci0KLSAg
ICBpZiAob2JqLT5yb290T2JqZWN0KQotICAgICAgICBvYmotPnJvb3RPYmplY3QtPmRlcmVmKCk7
Ci0KLSAgICBmcmVlKG9iaik7Ci19Ci0KLXN0YXRpYyBOUENsYXNzIGphdmFzY3JpcHRDbGFzcyA9
IHsgMSwganNBbGxvY2F0ZSwganNEZWFsbG9jYXRlLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwIH07Ci1zdGF0aWMgTlBDbGFzcyBub1NjcmlwdENsYXNzID0geyAxLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07Ci0KLWV4dGVybiAiQyIgewotTlBDbGFzcyogTlBTY3Jp
cHRPYmplY3RDbGFzcyA9ICZqYXZhc2NyaXB0Q2xhc3M7Ci1zdGF0aWMgTlBDbGFzcyogTlBOb1Nj
cmlwdE9iamVjdENsYXNzID0gJm5vU2NyaXB0Q2xhc3M7Ci0KLU5QT2JqZWN0KiBfTlBOX0NyZWF0
ZVNjcmlwdE9iamVjdChOUFAgbnBwLCBKU09iamVjdCogaW1wLCBSZWZQdHI8Um9vdE9iamVjdD4m
JiByb290T2JqZWN0KQotewotICAgIGlmIChOUE9iamVjdCogb2JqZWN0ID0gb2JqZWN0TWFwKCku
Z2V0KHJvb3RPYmplY3QuZ2V0KCksIGltcCkpCi0gICAgICAgIHJldHVybiBfTlBOX1JldGFpbk9i
amVjdChvYmplY3QpOwotCi0gICAgSmF2YVNjcmlwdE9iamVjdCogb2JqID0gcmVpbnRlcnByZXRf
Y2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4oX05QTl9DcmVhdGVPYmplY3QobnBwLCBOUFNjcmlwdE9i
amVjdENsYXNzKSk7Ci0KLSAgICBvYmotPnJvb3RPYmplY3QgPSByb290T2JqZWN0LmxlYWtSZWYo
KTsKLQotICAgIGlmIChvYmotPnJvb3RPYmplY3QpIHsKLSAgICAgICAgb2JqLT5yb290T2JqZWN0
LT5nY1Byb3RlY3QoaW1wKTsKLSAgICAgICAgb2JqZWN0TWFwKCkuYWRkKG9iai0+cm9vdE9iamVj
dCwgaW1wLCByZWludGVycHJldF9jYXN0PE5QT2JqZWN0Kj4ob2JqKSk7Ci0gICAgfQotCi0gICAg
b2JqLT5pbXAgPSBpbXA7Ci0KLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxOUE9iamVjdCo+
KG9iaik7Ci19Ci0KLU5QT2JqZWN0KiBfTlBOX0NyZWF0ZU5vU2NyaXB0T2JqZWN0KHZvaWQpCi17
Ci0gICAgcmV0dXJuIF9OUE5fQ3JlYXRlT2JqZWN0KDAsIE5QTm9TY3JpcHRPYmplY3RDbGFzcyk7
Ci19Ci0KLWJvb2wgX05QTl9JbnZva2VEZWZhdWx0KE5QUCwgTlBPYmplY3QqIG8sIGNvbnN0IE5Q
VmFyaWFudCogYXJncywgdWludDMyX3QgYXJnQ291bnQsIE5QVmFyaWFudCogcmVzdWx0KQotewot
ICAgIGlmIChvLT5fY2xhc3MgPT0gTlBTY3JpcHRPYmplY3RDbGFzcykgewotICAgICAgICBKYXZh
U2NyaXB0T2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEphdmFTY3JpcHRPYmplY3QqPihv
KTsgCi0gICAgICAgIAotICAgICAgICBWT0lEX1RPX05QVkFSSUFOVCgqcmVzdWx0KTsKLSAgICAg
ICAgCi0gICAgICAgIC8vIExvb2t1cCB0aGUgZnVuY3Rpb24gb2JqZWN0LgotICAgICAgICBSb290
T2JqZWN0KiByb290T2JqZWN0ID0gb2JqLT5yb290T2JqZWN0OwotICAgICAgICBpZiAoIXJvb3RP
YmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgCi0gICAgICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gcm9vdE9iamVjdC0+Z2xv
YmFsT2JqZWN0KCk7Ci0gICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICAg
ICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7Ci0KLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QgPSBnbG9iYWxPYmplY3Q7Ci0gICAgICAgIAotICAgICAgICAvLyBDYWxsIHRoZSBmdW5j
dGlvbiBvYmplY3QuCi0gICAgICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBvYmotPmltcDsKLSAgICAg
ICAgYXV0byBjYWxsRGF0YSA9IGdldENhbGxEYXRhKHZtLCBmdW5jdGlvbik7Ci0gICAgICAgIGlm
IChjYWxsRGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOb25lKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnTGlz
dDsKLSAgICAgICAgZ2V0TGlzdEZyb21WYXJpYW50QXJncyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmdzLCBhcmdDb3VudCwgcm9vdE9iamVjdCwgYXJnTGlzdCk7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFhcmdMaXN0Lmhhc092ZXJmbG93ZWQoKSk7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ViA9
IEpTQzo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwgY2FsbERhdGEsIGZ1bmN0
aW9uLCBhcmdMaXN0KTsKLQotICAgICAgICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3Vs
dCBvZiB0aGUgZnVuY3Rpb24gY2FsbC4KLSAgICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQo
bGV4aWNhbEdsb2JhbE9iamVjdCwgcmVzdWx0ViwgcmVzdWx0KTsKLSAgICAgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIHRydWU7ICAgICAgICAKLSAgICB9Ci0KLSAg
ICBpZiAoby0+X2NsYXNzLT5pbnZva2VEZWZhdWx0KQotICAgICAgICByZXR1cm4gby0+X2NsYXNz
LT5pbnZva2VEZWZhdWx0KG8sIGFyZ3MsIGFyZ0NvdW50LCByZXN1bHQpOyAgICAKLSAgICBWT0lE
X1RPX05QVkFSSUFOVCgqcmVzdWx0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBfTlBO
X0ludm9rZShOUFAgbnBwLCBOUE9iamVjdCogbywgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUsIGNv
bnN0IE5QVmFyaWFudCogYXJncywgdWludDMyX3QgYXJnQ291bnQsIE5QVmFyaWFudCogcmVzdWx0
KQotewotICAgIGlmIChvLT5fY2xhc3MgPT0gTlBTY3JpcHRPYmplY3RDbGFzcykgewotICAgICAg
ICBKYXZhU2NyaXB0T2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEphdmFTY3JpcHRPYmpl
Y3QqPihvKTsgCi0KLSAgICAgICAgSWRlbnRpZmllclJlcCogaSA9IHN0YXRpY19jYXN0PElkZW50
aWZpZXJSZXAqPihtZXRob2ROYW1lKTsKLSAgICAgICAgaWYgKCFpLT5pc1N0cmluZygpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIFNwZWNpYWwgY2FzZSB0aGUgImV2
YWwiIG1ldGhvZC4KLSAgICAgICAgaWYgKG1ldGhvZE5hbWUgPT0gX05QTl9HZXRTdHJpbmdJZGVu
dGlmaWVyKCJldmFsIikpIHsKLSAgICAgICAgICAgIGlmIChhcmdDb3VudCAhPSAxKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChhcmdzWzBdLnR5cGUgIT0g
TlBWYXJpYW50VHlwZV9TdHJpbmcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgcmV0dXJuIF9OUE5fRXZhbHVhdGUobnBwLCBvLCBjb25zdF9jYXN0PE5QU3RyaW5n
Kj4oJmFyZ3NbMF0udmFsdWUuc3RyaW5nVmFsdWUpLCByZXN1bHQpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gTG9vayB1cCB0aGUgZnVuY3Rpb24gb2JqZWN0LgotICAgICAgICBSb290T2JqZWN0
KiByb290T2JqZWN0ID0gb2JqLT5yb290T2JqZWN0OwotICAgICAgICBpZiAoIXJvb3RPYmplY3Qg
fHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOwot
ICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrKHZtKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OwotCi0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFs
T2JqZWN0OwotICAgICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gb2JqLT5pbXAtPmdldChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBpLT5zdHJpbmcoKSkpOwotICAgICAgICBhdXRvIGNhbGxEYXRhID0gZ2V0Q2FsbERhdGEo
dm0sIGZ1bmN0aW9uKTsKLSAgICAgICAgaWYgKGNhbGxEYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5
cGU6Ok5vbmUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gQ2FsbCB0
aGUgZnVuY3Rpb24gb2JqZWN0LgotICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0
OwotICAgICAgICBnZXRMaXN0RnJvbVZhcmlhbnRBcmdzKGxleGljYWxHbG9iYWxPYmplY3QsIGFy
Z3MsIGFyZ0NvdW50LCByb290T2JqZWN0LCBhcmdMaXN0KTsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIWFyZ0xpc3QuaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHRWID0g
SlNDOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIGZ1bmN0aW9uLCBjYWxsRGF0YSwgb2JqLT5p
bXAsIGFyZ0xpc3QpOwotCi0gICAgICAgIC8vIENvbnZlcnQgYW5kIHJldHVybiB0aGUgcmVzdWx0
IG9mIHRoZSBmdW5jdGlvbiBjYWxsLgotICAgICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChs
ZXhpY2FsR2xvYmFsT2JqZWN0LCByZXN1bHRWLCByZXN1bHQpOwotICAgICAgICBzY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoby0+
X2NsYXNzLT5pbnZva2UpCi0gICAgICAgIHJldHVybiBvLT5fY2xhc3MtPmludm9rZShvLCBtZXRo
b2ROYW1lLCBhcmdzLCBhcmdDb3VudCwgcmVzdWx0KTsKLSAgICAKLSAgICBWT0lEX1RPX05QVkFS
SUFOVCgqcmVzdWx0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBfTlBOX0V2YWx1YXRl
KE5QUCwgTlBPYmplY3QqIG8sIE5QU3RyaW5nKiBzLCBOUFZhcmlhbnQqIHZhcmlhbnQpCi17Ci0g
ICAgaWYgKG8tPl9jbGFzcyA9PSBOUFNjcmlwdE9iamVjdENsYXNzKSB7Ci0gICAgICAgIEphdmFT
Y3JpcHRPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlwdE9iamVjdCo+KG8p
OyAKLQotICAgICAgICBSb290T2JqZWN0KiByb290T2JqZWN0ID0gb2JqLT5yb290T2JqZWN0Owot
ICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RP
YmplY3QtPmdsb2JhbE9iamVjdCgpOwotICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0OwotICAgICAgICBTdHJpbmcgc2NyaXB0U3Ry
aW5nID0gY29udmVydE5QU3RyaW5nVG9VVEYxNihzKTsKLSAgICAgICAgCi0gICAgICAgIEpTVmFs
dWUgcmV0dXJuVmFsdWUgPSBKU0M6OmV2YWx1YXRlKGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6
bWFrZVNvdXJjZShzY3JpcHRTdHJpbmcsIHsgfSksIEpTQzo6SlNWYWx1ZSgpKTsKLQotICAgICAg
ICBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChsZXhpY2FsR2xvYmFsT2JqZWN0LCByZXR1cm5WYWx1
ZSwgdmFyaWFudCk7Ci0gICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIFZPSURfVE9fTlBWQVJJQU5UKCp2YXJpYW50KTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgX05QTl9HZXRQcm9wZXJ0eShOUFAsIE5QT2JqZWN0
KiBvLCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBOUFZhcmlhbnQqIHZhcmlhbnQpCi17Ci0g
ICAgaWYgKG8tPl9jbGFzcyA9PSBOUFNjcmlwdE9iamVjdENsYXNzKSB7Ci0gICAgICAgIEphdmFT
Y3JpcHRPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlwdE9iamVjdCo+KG8p
OyAKLQotICAgICAgICBSb290T2JqZWN0KiByb290T2JqZWN0ID0gb2JqLT5yb290T2JqZWN0Owot
ICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RP
YmplY3QtPmdsb2JhbE9iamVjdCgpOwotICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0OwotICAgICAgICBJZGVudGlmaWVyUmVwKiBp
ID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIAot
ICAgICAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICAgICAgaWYgKGktPmlzU3RyaW5nKCkpCi0gICAg
ICAgICAgICByZXN1bHQgPSBvYmotPmltcC0+Z2V0KGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50
aWZpZXJGcm9tTlBJZGVudGlmaWVyKGxleGljYWxHbG9iYWxPYmplY3QsIGktPnN0cmluZygpKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IG9iai0+aW1wLT5nZXQobGV4aWNh
bEdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGktPm51bWJlcigpKSk7Ci0KLSAg
ICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQobGV4aWNhbEdsb2JhbE9iamVjdCwgcmVzdWx0
LCB2YXJpYW50KTsKLSAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG8tPl9jbGFzcy0+aGFzUHJvcGVydHkgJiYgby0+
X2NsYXNzLT5nZXRQcm9wZXJ0eSkgewotICAgICAgICBpZiAoby0+X2NsYXNzLT5oYXNQcm9wZXJ0
eShvLCBwcm9wZXJ0eU5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIG8tPl9jbGFzcy0+Z2V0UHJv
cGVydHkobywgcHJvcGVydHlOYW1lLCB2YXJpYW50KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIFZPSURfVE9fTlBWQVJJQU5UKCp2YXJpYW50KTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgX05QTl9TZXRQcm9wZXJ0eShOUFAsIE5QT2JqZWN0KiBvLCBOUElkZW50
aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBOUFZhcmlhbnQqIHZhcmlhbnQpCi17Ci0gICAgaWYg
KG8tPl9jbGFzcyA9PSBOUFNjcmlwdE9iamVjdENsYXNzKSB7Ci0gICAgICAgIEphdmFTY3JpcHRP
YmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlwdE9iamVjdCo+KG8pOyAKLQot
ICAgICAgICBSb290T2JqZWN0KiByb290T2JqZWN0ID0gb2JqLT5yb290T2JqZWN0OwotICAgICAg
ICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpOwotICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0g
ICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0OwotICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3Rh
dGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5TmFtZSk7Ci0KLSAgICAgICAgaWYgKGkt
PmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iai0+aW1w
KTsKLSAgICAgICAgICAgIG9iai0+aW1wLT5tZXRob2RUYWJsZSh2bSktPnB1dChvYmotPmltcCwg
bGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIobGV4aWNhbEds
b2JhbE9iamVjdCwgaS0+c3RyaW5nKCkpLCBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YXJpYW50LCByb290T2JqZWN0KSwgc2xvdCk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgb2JqLT5pbXAtPm1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleChvYmot
PmltcCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaS0+bnVtYmVyKCksIGNvbnZlcnROUFZhcmlhbnRU
b1ZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsIHZhcmlhbnQsIHJvb3RPYmplY3QpLCBmYWxzZSk7
Ci0gICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIGlmIChvLT5fY2xhc3MtPnNldFByb3BlcnR5KQotICAgICAgICByZXR1cm4g
by0+X2NsYXNzLT5zZXRQcm9wZXJ0eShvLCBwcm9wZXJ0eU5hbWUsIHZhcmlhbnQpOwotCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1ib29sIF9OUE5fUmVtb3ZlUHJvcGVydHkoTlBQLCBOUE9iamVj
dCogbywgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKLXsKLSAgICBpZiAoby0+X2NsYXNzID09
IE5QU2NyaXB0T2JqZWN0Q2xhc3MpIHsKLSAgICAgICAgSmF2YVNjcmlwdE9iamVjdCogb2JqID0g
cmVpbnRlcnByZXRfY2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4obyk7IAotCi0gICAgICAgIFJvb3RP
YmplY3QqIHJvb3RPYmplY3QgPSBvYmotPnJvb3RPYmplY3Q7Ci0gICAgICAgIGlmICghcm9vdE9i
amVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCk7Ci0gICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICAgICAgSlNMb2Nr
SG9sZGVyIGxvY2sodm0pOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7Ci0KLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBn
bG9iYWxPYmplY3Q7Ci0KLSAgICAgICAgSWRlbnRpZmllclJlcCogaSA9IHN0YXRpY19jYXN0PElk
ZW50aWZpZXJSZXAqPihwcm9wZXJ0eU5hbWUpOwotICAgICAgICBpZiAoaS0+aXNTdHJpbmcoKSkg
ewotICAgICAgICAgICAgaWYgKCFvYmotPmltcC0+aGFzUHJvcGVydHkobGV4aWNhbEdsb2JhbE9i
amVjdCwgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgaS0+
c3RyaW5nKCkpKSkgewotICAgICAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgaWYgKCFvYmotPmltcC0+aGFzUHJvcGVydHkobGV4aWNhbEdsb2Jh
bE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGktPm51bWJlcigpKSkpIHsKLSAgICAgICAg
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpLT5pc1N0cmlu
ZygpKQotICAgICAgICAgICAgSlNDZWxsOjpkZWxldGVQcm9wZXJ0eShvYmotPmltcCwgbGV4aWNh
bEdsb2JhbE9iamVjdCwgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIobGV4aWNhbEdsb2JhbE9i
amVjdCwgaS0+c3RyaW5nKCkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb2JqLT5pbXAt
Pm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KG9iai0+aW1wLCBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBpLT5udW1iZXIoKSk7Ci0KLSAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBfTlBOX0hhc1Byb3BlcnR5KE5QUCwgTlBPYmplY3QqIG8sIE5QSWRlbnRpZmllciBw
cm9wZXJ0eU5hbWUpCi17Ci0gICAgaWYgKG8tPl9jbGFzcyA9PSBOUFNjcmlwdE9iamVjdENsYXNz
KSB7Ci0gICAgICAgIEphdmFTY3JpcHRPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8SmF2
YVNjcmlwdE9iamVjdCo+KG8pOyAKLQotICAgICAgICBSb290T2JqZWN0KiByb290T2JqZWN0ID0g
b2JqLT5yb290T2JqZWN0OwotICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3Qt
PmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBhdXRvIGds
b2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOwotICAgICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0OwotICAgICAg
ICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5
TmFtZSk7Ci0gICAgICAgIGlmIChpLT5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICBib29sIHJl
c3VsdCA9IG9iai0+aW1wLT5oYXNQcm9wZXJ0eShsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVudGlm
aWVyRnJvbU5QSWRlbnRpZmllcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBpLT5zdHJpbmcoKSkpOwot
ICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIHJlc3VsdCA9IG9iai0+aW1wLT5oYXNQ
cm9wZXJ0eShsZXhpY2FsR2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaS0+bnVt
YmVyKCkpKTsKLSAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9Ci0KLSAgICBpZiAoby0+X2NsYXNzLT5oYXNQcm9wZXJ0eSkKLSAgICAg
ICAgcmV0dXJuIG8tPl9jbGFzcy0+aGFzUHJvcGVydHkobywgcHJvcGVydHlOYW1lKTsKLQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBfTlBOX0hhc01ldGhvZChOUFAsIE5QT2JqZWN0KiBv
LCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSkKLXsKLSAgICBpZiAoby0+X2NsYXNzID09IE5QU2Ny
aXB0T2JqZWN0Q2xhc3MpIHsKLSAgICAgICAgSmF2YVNjcmlwdE9iamVjdCogb2JqID0gcmVpbnRl
cnByZXRfY2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4obyk7IAotCi0gICAgICAgIElkZW50aWZpZXJS
ZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4obWV0aG9kTmFtZSk7Ci0gICAgICAg
IGlmICghaS0+aXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBSb290T2JqZWN0KiByb290T2JqZWN0ID0gb2JqLT5yb290T2JqZWN0OwotICAgICAgICBpZiAo
IXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2Jh
bE9iamVjdCgpOwotICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgICAg
IEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOwotCi0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0ID0gZ2xvYmFsT2JqZWN0OwotICAgICAgICBKU1ZhbHVlIGZ1bmMgPSBvYmotPmltcC0+Z2V0
KGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGxleGljYWxH
bG9iYWxPYmplY3QsIGktPnN0cmluZygpKSk7Ci0gICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7Ci0gICAgICAgIHJldHVybiAhZnVuYy5pc1VuZGVmaW5lZCgpOwotICAgIH0KLSAgICAKLSAg
ICBpZiAoby0+X2NsYXNzLT5oYXNNZXRob2QpCi0gICAgICAgIHJldHVybiBvLT5fY2xhc3MtPmhh
c01ldGhvZChvLCBtZXRob2ROYW1lKTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgX05QTl9TZXRFeGNlcHRpb24oTlBPYmplY3QqLCBjb25zdCBOUFVURjgqIG1lc3NhZ2UpCi17
Ci0gICAgLy8gSWdub3JpbmcgdGhlIE5QT2JqZWN0IHBhcmFtIGlzIGNvbnNpc3RlbnQgd2l0aCB0
aGUgTW96aWxsYSBpbXBsZW1lbnRhdGlvbi4KLSAgICBTdHJpbmcgZXhjZXB0aW9uKG1lc3NhZ2Up
OwotICAgIENJbnN0YW5jZTo6c2V0R2xvYmFsRXhjZXB0aW9uKGV4Y2VwdGlvbik7Ci19Ci0KLWJv
b2wgX05QTl9FbnVtZXJhdGUoTlBQLCBOUE9iamVjdCogbywgTlBJZGVudGlmaWVyKiogaWRlbnRp
ZmllciwgdWludDMyX3QqIGNvdW50KQotewotICAgIGlmIChvLT5fY2xhc3MgPT0gTlBTY3JpcHRP
YmplY3RDbGFzcykgewotICAgICAgICBKYXZhU2NyaXB0T2JqZWN0KiBvYmogPSByZWludGVycHJl
dF9jYXN0PEphdmFTY3JpcHRPYmplY3QqPihvKTsgCi0gICAgICAgIAotICAgICAgICBSb290T2Jq
ZWN0KiByb290T2JqZWN0ID0gb2JqLT5yb290T2JqZWN0OwotICAgICAgICBpZiAoIXJvb3RPYmpl
Y3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgCi0gICAgICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFs
T2JqZWN0KCk7Ci0gICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICAgICAg
SlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRD
SF9TQ09QRSh2bSk7Ci0KLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QgPSBnbG9iYWxPYmplY3Q7Ci0gICAgICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFt
ZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNs
dWRlKTsKLQotICAgICAgICBvYmotPmltcC0+Z2V0UHJvcGVydHlOYW1lcyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKTsK
LSAgICAgICAgdW5zaWduZWQgc2l6ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihwcm9wZXJ0eU5h
bWVzLnNpemUoKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZWFsbHkgY2FsbCBO
UE5fTWVtQWxsb2MgYnV0IHRoYXQncyBpbiBXZWJLaXQKLSAgICAgICAgTlBJZGVudGlmaWVyKiBp
ZGVudGlmaWVycyA9IHN0YXRpY19jYXN0PE5QSWRlbnRpZmllcio+KG1hbGxvYyhzaXplb2YoTlBJ
ZGVudGlmaWVyKSAqIHNpemUpKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICBpZGVudGlmaWVyc1tpXSA9IF9OUE5fR2V0
U3RyaW5nSWRlbnRpZmllcihwcm9wZXJ0eU5hbWVzW2ldLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OwotCi0gICAgICAgICppZGVudGlmaWVyID0gaWRlbnRpZmllcnM7Ci0gICAgICAgICpjb3VudCA9
IHNpemU7Ci0KLSAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmIChOUF9DTEFTU19TVFJVQ1RfVkVSU0lPTl9IQVNf
RU5VTShvLT5fY2xhc3MpICYmIG8tPl9jbGFzcy0+ZW51bWVyYXRlKQotICAgICAgICByZXR1cm4g
by0+X2NsYXNzLT5lbnVtZXJhdGUobywgaWRlbnRpZmllciwgY291bnQpOwotICAgIAotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBfTlBOX0NvbnN0cnVjdChOUFAsIE5QT2JqZWN0KiBvLCBj
b25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVpbnQzMl90IGFyZ0NvdW50LCBOUFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICBpZiAoby0+X2NsYXNzID09IE5QU2NyaXB0T2JqZWN0Q2xhc3MpIHsKLSAgICAg
ICAgSmF2YVNjcmlwdE9iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxKYXZhU2NyaXB0T2Jq
ZWN0Kj4obyk7Ci0gICAgICAgIAotICAgICAgICBWT0lEX1RPX05QVkFSSUFOVCgqcmVzdWx0KTsK
LSAgICAgICAgCi0gICAgICAgIC8vIExvb2t1cCB0aGUgY29uc3RydWN0b3Igb2JqZWN0LgotICAg
ICAgICBSb290T2JqZWN0KiByb290T2JqZWN0ID0gb2JqLT5yb290T2JqZWN0OwotICAgICAgICBp
ZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmds
b2JhbE9iamVjdCgpOwotICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAg
ICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOwotCi0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0ID0gZ2xvYmFsT2JqZWN0OwotICAgICAgICAKLSAgICAgICAgLy8gQ2FsbCB0aGUgY29u
c3RydWN0b3Igb2JqZWN0LgotICAgICAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0gb2JqLT5pbXA7
Ci0gICAgICAgIGF1dG8gY29uc3RydWN0RGF0YSA9IGdldENvbnN0cnVjdERhdGEodm0sIGNvbnN0
cnVjdG9yKTsKLSAgICAgICAgaWYgKGNvbnN0cnVjdERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlw
ZTo6Tm9uZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xpc3Q7Ci0gICAgICAgIGdldExpc3RGcm9tVmFyaWFudEFy
Z3MobGV4aWNhbEdsb2JhbE9iamVjdCwgYXJncywgYXJnQ291bnQsIHJvb3RPYmplY3QsIGFyZ0xp
c3QpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghYXJnTGlzdC5oYXNPdmVyZmxvd2VkKCkpOwot
ICAgICAgICBKU1ZhbHVlIHJlc3VsdFYgPSBKU0M6OmNvbnN0cnVjdChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjb25zdHJ1Y3RvciwgY29uc3RydWN0RGF0YSwgYXJnTGlzdCk7Ci0gICAgICAgIAotICAg
ICAgICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3VsdC4KLSAgICAgICAgY29udmVydFZh
bHVlVG9OUFZhcmlhbnQobGV4aWNhbEdsb2JhbE9iamVjdCwgcmVzdWx0ViwgcmVzdWx0KTsKLSAg
ICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIAotICAgIGlmIChOUF9DTEFTU19TVFJVQ1RfVkVSU0lPTl9IQVNfQ1RPUihvLT5fY2xh
c3MpICYmIG8tPl9jbGFzcy0+Y29uc3RydWN0KQotICAgICAgICByZXR1cm4gby0+X2NsYXNzLT5j
b25zdHJ1Y3QobywgYXJncywgYXJnQ291bnQsIHJlc3VsdCk7Ci0gICAgCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi19IC8vIGV4dGVybiAiQyIKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9OUF9qc29iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2Jq
ZWN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZjE2ZGViNTAzZTNjNjkwNTRh
YmIzMDU2YmUxZGVlZjg5ZjRmYzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmgKKysrIC9kZXYv
bnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIE5QX0pTT0JKRUNUX0gKLSNkZWZpbmUgTlBfSlNP
QkpFQ1RfSAotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJu
cHJ1bnRpbWVfaW50ZXJuYWwuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1lc3Bh
Y2UgSlNDIHsKLWNsYXNzIEpTT2JqZWN0OwotbmFtZXNwYWNlIEJpbmRpbmdzIHsKLWNsYXNzIFJv
b3RPYmplY3Q7Ci19Ci19Ci0KLXN0cnVjdCBKYXZhU2NyaXB0T2JqZWN0Ci17Ci0gICAgTlBPYmpl
Y3Qgb2JqZWN0OwotICAgIEpTQzo6SlNPYmplY3QqIGltcDsKLSAgICBKU0M6OkJpbmRpbmdzOjpS
b290T2JqZWN0KiByb290T2JqZWN0OwotfTsKLQotZXh0ZXJuICJDIiB7Ci1leHRlcm4gTlBDbGFz
cyogTlBTY3JpcHRPYmplY3RDbGFzczsKLQotV0VCQ09SRV9FWFBPUlQgTlBPYmplY3QqIF9OUE5f
Q3JlYXRlU2NyaXB0T2JqZWN0KE5QUCwgSlNDOjpKU09iamVjdCosIFJlZlB0cjxKU0M6OkJpbmRp
bmdzOjpSb290T2JqZWN0PiYmKTsKLVdFQkNPUkVfRVhQT1JUIE5QT2JqZWN0KiBfTlBOX0NyZWF0
ZU5vU2NyaXB0T2JqZWN0KHZvaWQpOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2Mv
Q1J1bnRpbWVPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvQ1J1bnRpbWVPYmpl
Y3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjRmYTVhZGU1NTBmM2ViY2Ey
YjJhY2UwODU2NmM4MmUyN2U3MGY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL0NSdW50aW1lT2JqZWN0LmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNSdW50
aW1lT2JqZWN0LmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgImNfaW5zdGFuY2UuaCIKLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9PYmplY3RQcm90b3R5cGUuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci1uYW1l
c3BhY2UgQmluZGluZ3MgewotCi1jb25zdCBDbGFzc0luZm8gQ1J1bnRpbWVPYmplY3Q6OnNfaW5m
byA9IHsgIkNSdW50aW1lT2JqZWN0IiwgJlJ1bnRpbWVPYmplY3Q6OnNfaW5mbywgbnVsbHB0ciwg
bnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShDUnVudGltZU9iamVjdCkgfTsKLQotQ1J1bnRp
bWVPYmplY3Q6OkNSdW50aW1lT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJl
ZlB0cjxDSW5zdGFuY2U+JiYgaW5zdGFuY2UpCi0gICAgOiBSdW50aW1lT2JqZWN0KHZtLCBzdHJ1
Y3R1cmUsIFdURk1vdmUoaW5zdGFuY2UpKQotewotfQotCi12b2lkIENSdW50aW1lT2JqZWN0Ojpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwot
ICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci19Ci0KLUNJbnN0YW5jZSogQ1J1bnRp
bWVPYmplY3Q6OmdldEludGVybmFsQ0luc3RhbmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Q0luc3RhbmNlKj4oZ2V0SW50ZXJuYWxJbnN0YW5jZSgpKTsKLX0KLQotfQotfQot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL0NSdW50aW1lT2Jq
ZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9DUnVudGltZU9iamVjdC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTIyN2VjZGJmOTRmYzY5YTA3ZWM3ZWFkZDg5ZDAwMDEx
ZGZmMGRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JyaWRnZS9jL0NSdW50aW1lT2JqZWN0LmgKKysrIC9kZXYvbnVsbApAQCAt
MSw3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgQ1J1bnRpbWVPYmplY3RfaAotI2RlZmluZSBDUnVudGltZU9iamVjdF9oCi0K
LSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgotI2luY2x1ZGUgInJ1bnRpbWVfb2JqZWN0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LSAgICBjbGFzcyBKU0RPTUdsb2JhbE9iamVjdDsKLX0KLQotbmFtZXNwYWNlIEpTQyB7Ci1uYW1l
c3BhY2UgQmluZGluZ3MgewotCi1jbGFzcyBDSW5zdGFuY2U7Ci0KLWNsYXNzIENSdW50aW1lT2Jq
ZWN0IGZpbmFsIDogcHVibGljIFJ1bnRpbWVPYmplY3QgewotcHVibGljOgotICAgIHVzaW5nIEJh
c2UgPSBSdW50aW1lT2JqZWN0OwotCi0gICAgc3RhdGljIENSdW50aW1lT2JqZWN0KiBjcmVhdGUo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmUHRyPENJbnN0YW5jZT4mJiBpbnN0YW5j
ZSkKLSAgICB7Ci0gICAgICAgIENSdW50aW1lT2JqZWN0KiBvYmplY3QgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxDUnVudGltZU9iamVjdD4odm0uaGVhcCkpIENSdW50aW1lT2JqZWN0KHZt
LCBzdHJ1Y3R1cmUsIFdURk1vdmUoaW5zdGFuY2UpKTsKLSAgICAgICAgb2JqZWN0LT5maW5pc2hD
cmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotCi0gICAgQ0luc3Rh
bmNlKiBnZXRJbnRlcm5hbENJbnN0YW5jZSgpIGNvbnN0OwotCi0gICAgREVDTEFSRV9JTkZPOwot
Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIENSdW50aW1lT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgUmVmUHRyPENJbnN0YW5j
ZT4mJik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotfTsKLQotfQotfQotCi0jZW5k
aWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19jbGFzcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2NsYXNzLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYWE1NmUyZmRlODU1NzdhY2Y5YzA0NzRjODk4NzdmNGUwZDVjNTEwMS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvYy9jX2NsYXNzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQot
I2luY2x1ZGUgImNfY2xhc3MuaCIKLQotI2luY2x1ZGUgImNfaW5zdGFuY2UuaCIKLSNpbmNsdWRl
ICJjX3J1bnRpbWUuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0lkZW50aWZpZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NK
U1ZhbHVlSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTR2xvYmFsT2JqZWN0
Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQmluZGluZ3Mg
ewotCi1DQ2xhc3M6OkNDbGFzcyhOUENsYXNzKiBhQ2xhc3MpCi17Ci0gICAgbV9pc2EgPSBhQ2xh
c3M7Ci19Ci0KLUNDbGFzczo6fkNDbGFzcygpCi17Ci0gICAgbV9tZXRob2RzLmNsZWFyKCk7Ci0g
ICAgbV9maWVsZHMuY2xlYXIoKTsKLX0KLQotdHlwZWRlZiBIYXNoTWFwPE5QQ2xhc3MqLCBDQ2xh
c3MqPiBDbGFzc2VzQnlJc0FNYXA7Ci1zdGF0aWMgQ2xhc3Nlc0J5SXNBTWFwKiBjbGFzc2VzQnlJ
c0EgPSAwOwotCi1DQ2xhc3MqIENDbGFzczo6Y2xhc3NGb3JJc0EoTlBDbGFzcyogaXNhKQotewot
ICAgIGlmICghY2xhc3Nlc0J5SXNBKQotICAgICAgICBjbGFzc2VzQnlJc0EgPSBuZXcgQ2xhc3Nl
c0J5SXNBTWFwOwotCi0gICAgQ0NsYXNzKiBhQ2xhc3MgPSBjbGFzc2VzQnlJc0EtPmdldChpc2Ep
OwotICAgIGlmICghYUNsYXNzKSB7Ci0gICAgICAgIGFDbGFzcyA9IG5ldyBDQ2xhc3MoaXNhKTsK
LSAgICAgICAgY2xhc3Nlc0J5SXNBLT5zZXQoaXNhLCBhQ2xhc3MpOwotICAgIH0KLQotICAgIHJl
dHVybiBhQ2xhc3M7Ci19Ci0KLU1ldGhvZCogQ0NsYXNzOjptZXRob2ROYW1lZChQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBJbnN0YW5jZSogaW5zdGFuY2UpIGNvbnN0Ci17Ci0gICAgU3RyaW5n
IG5hbWUocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Ci0gICAgaWYgKG5hbWUuaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIGlmIChNZXRob2QqIG1ldGhvZCA9
IG1fbWV0aG9kcy5nZXQobmFtZS5pbXBsKCkpKQotICAgICAgICByZXR1cm4gbWV0aG9kOwotCi0g
ICAgTlBJZGVudGlmaWVyIGlkZW50ID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyKG5hbWUuYXNj
aWkoKS5kYXRhKCkpOwotICAgIGNvbnN0IENJbnN0YW5jZSogaW5zdCA9IHN0YXRpY19jYXN0PGNv
bnN0IENJbnN0YW5jZSo+KGluc3RhbmNlKTsKLSAgICBOUE9iamVjdCogb2JqID0gaW5zdC0+Z2V0
T2JqZWN0KCk7Ci0gICAgaWYgKG1faXNhLT5oYXNNZXRob2QgJiYgbV9pc2EtPmhhc01ldGhvZChv
YmosIGlkZW50KSkgewotICAgICAgICBhdXRvIG1ldGhvZCA9IG1ha2VVbmlxdWU8Q01ldGhvZD4o
aWRlbnQpOwotICAgICAgICBDTWV0aG9kKiByZXQgPSBtZXRob2QuZ2V0KCk7Ci0gICAgICAgIG1f
bWV0aG9kcy5zZXQobmFtZS5pbXBsKCksIFdURk1vdmUobWV0aG9kKSk7Ci0gICAgICAgIHJldHVy
biByZXQ7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBudWxscHRyOwotfQotCi1GaWVsZCogQ0Ns
YXNzOjpmaWVsZE5hbWVkKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEluc3RhbmNlKiBpbnN0
YW5jZSkgY29uc3QKLXsKLSAgICBTdHJpbmcgbmFtZShwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgp
KTsKLSAgICBpZiAobmFtZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
Ci0gICAgaWYgKEZpZWxkKiBmaWVsZCA9IG1fZmllbGRzLmdldChuYW1lLmltcGwoKSkpCi0gICAg
ICAgIHJldHVybiBmaWVsZDsKLQotICAgIE5QSWRlbnRpZmllciBpZGVudCA9IF9OUE5fR2V0U3Ry
aW5nSWRlbnRpZmllcihuYW1lLmFzY2lpKCkuZGF0YSgpKTsKLSAgICBjb25zdCBDSW5zdGFuY2Uq
IGluc3QgPSBzdGF0aWNfY2FzdDxjb25zdCBDSW5zdGFuY2UqPihpbnN0YW5jZSk7Ci0gICAgTlBP
YmplY3QqIG9iaiA9IGluc3QtPmdldE9iamVjdCgpOwotICAgIGlmIChtX2lzYS0+aGFzUHJvcGVy
dHkgJiYgbV9pc2EtPmhhc1Byb3BlcnR5KG9iaiwgaWRlbnQpKSB7Ci0gICAgICAgIGF1dG8gZmll
bGQgPSBtYWtlVW5pcXVlPENGaWVsZD4oaWRlbnQpOwotICAgICAgICBDRmllbGQqIHJldCA9IGZp
ZWxkLmdldCgpOwotICAgICAgICBtX2ZpZWxkcy5zZXQobmFtZS5pbXBsKCksIFdURk1vdmUoZmll
bGQpKTsKLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkJpbmRpbmdzCi0KLSNlbmRpZiAvLyBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9j
L2NfY2xhc3MuaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfY2xhc3MuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZDRiNmIwZWU2ZWEzMmRhNzQ5M2E2YTVjZTY0Yjg3ZTU5YjA1
MzAwMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvYy9jX2NsYXNzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZu
ZGVmIEJJTkRJTkdTX0NfQ0xBU1NfSF8KLSNkZWZpbmUgQklORElOR1NfQ19DTEFTU19IXwotCi0j
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJCcmlkZ2VKU0MuaCIK
LSNpbmNsdWRlICJucHJ1bnRpbWVfaW50ZXJuYWwuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotCi1uYW1lc3BhY2UgSlNDIHsKLW5hbWVzcGFjZSBCaW5kaW5ncyB7Ci0KLWNsYXNzIENDbGFz
cyA6IHB1YmxpYyBDbGFzcyB7Ci1wcm90ZWN0ZWQ6Ci0gICAgQ0NsYXNzKE5QQ2xhc3MqKTsgLy8g
VXNlIGNsYXNzRm9ySXNBIHRvIGNyZWF0ZSBhIENDbGFzcy4KLSAgICAKLXB1YmxpYzoKLSAgICBz
dGF0aWMgQ0NsYXNzKiBjbGFzc0ZvcklzQShOUENsYXNzKik7Ci0gICAgdmlydHVhbCB+Q0NsYXNz
KCk7Ci0KLSAgICBNZXRob2QqIG1ldGhvZE5hbWVkKFByb3BlcnR5TmFtZSwgSW5zdGFuY2UqKSBj
b25zdCBvdmVycmlkZTsKLSAgICBGaWVsZCogZmllbGROYW1lZChQcm9wZXJ0eU5hbWUsIEluc3Rh
bmNlKikgY29uc3Qgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgTlBDbGFzcyogbV9pc2E7Ci0g
ICAgbXV0YWJsZSBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgc3RkOjp1bmlxdWVfcHRyPE1l
dGhvZD4+IG1fbWV0aG9kczsKLSAgICBtdXRhYmxlIEhhc2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+
LCBzdGQ6OnVuaXF1ZV9wdHI8RmllbGQ+PiBtX2ZpZWxkczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IEJpbmRpbmdzCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9jL2NfaW5zdGFuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhNzZlMTk4NTYxMmFjNTk4ZjFmOGY5
NmVmM2FjNWMyNTZmZGRjYmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwzODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiY19pbnN0YW5jZS5oIgotCi0jaW5jbHVkZSAi
Q1J1bnRpbWVPYmplY3QuaCIKLSNpbmNsdWRlICJJZGVudGlmaWVyUmVwLmgiCi0jaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiY19jbGFzcy5oIgotI2luY2x1ZGUgImNfcnVudGlt
ZS5oIgotI2luY2x1ZGUgImNfdXRpbGl0eS5oIgotI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgi
Ci0jaW5jbHVkZSAicnVudGltZV9tZXRob2QuaCIKLSNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BcmdMaXN0Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvQ2FsbEZyYW1lLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRXJyb3IuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTTG9jay5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Byb3BlcnR5
TmFtZUFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNl
IEpTQyB7Ci1uYW1lc3BhY2UgQmluZGluZ3MgewotCi1zdGF0aWMgU3RyaW5nJiBnbG9iYWxFeGNl
cHRpb25TdHJpbmcoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGV4Y2Vw
dGlvblN0cjsKLSAgICByZXR1cm4gZXhjZXB0aW9uU3RyOwotfQotCi12b2lkIENJbnN0YW5jZTo6
c2V0R2xvYmFsRXhjZXB0aW9uKFN0cmluZyBleGNlcHRpb24pCi17Ci0gICAgZ2xvYmFsRXhjZXB0
aW9uU3RyaW5nKCkgPSBleGNlcHRpb247Ci19Ci0KLXZvaWQgQ0luc3RhbmNlOjptb3ZlR2xvYmFs
RXhjZXB0aW9uVG9FeGVjU3RhdGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qp
Ci17Ci0gICAgaWYgKGdsb2JhbEV4Y2VwdGlvblN0cmluZygpLmlzTnVsbCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICB7Ci0gICAgICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZt
KCk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICB0aHJvd0V4Y2VwdGlvbihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xv
YmFsRXhjZXB0aW9uU3RyaW5nKCkpKTsKLSAgICB9Ci0KLSAgICBnbG9iYWxFeGNlcHRpb25TdHJp
bmcoKSA9IFN0cmluZygpOwotfQotCi1DSW5zdGFuY2U6OkNJbnN0YW5jZShOUE9iamVjdCogbywg
UmVmUHRyPFJvb3RPYmplY3Q+JiYgcm9vdE9iamVjdCkKLSAgICA6IEluc3RhbmNlKFdURk1vdmUo
cm9vdE9iamVjdCkpCi17Ci0gICAgX29iamVjdCA9IF9OUE5fUmV0YWluT2JqZWN0KG8pOwotICAg
IF9jbGFzcyA9IDA7Ci19Ci0KLUNJbnN0YW5jZTo6fkNJbnN0YW5jZSgpCi17Ci0gICAgX05QTl9S
ZWxlYXNlT2JqZWN0KF9vYmplY3QpOwotfQotCi1SdW50aW1lT2JqZWN0KiBDSW5zdGFuY2U6Om5l
d1J1bnRpbWVPYmplY3QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QpCi17Ci0g
ICAgLy8gRklYTUU6IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNlcyB0aGUgcHJvdG90eXBl
IG9mZiBvZiB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdC4KLSAgICByZXR1cm4gQ1J1bnRpbWVPYmpl
Y3Q6OmNyZWF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpLCBXZWJDb3JlOjpkZXByZWNhdGVk
R2V0RE9NU3RydWN0dXJlPENSdW50aW1lT2JqZWN0PihsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhp
cyk7Ci19Ci0KLUNsYXNzICpDSW5zdGFuY2U6OmdldENsYXNzKCkgY29uc3QKLXsKLSAgICBpZiAo
IV9jbGFzcykKLSAgICAgICAgX2NsYXNzID0gQ0NsYXNzOjpjbGFzc0ZvcklzQShfb2JqZWN0LT5f
Y2xhc3MpOwotICAgIHJldHVybiBfY2xhc3M7Ci19Ci0KLWJvb2wgQ0luc3RhbmNlOjpzdXBwb3J0
c0ludm9rZURlZmF1bHRNZXRob2QoKSBjb25zdAotewotICAgIHJldHVybiBfb2JqZWN0LT5fY2xh
c3MtPmludm9rZURlZmF1bHQ7Ci19Ci0KLWNsYXNzIENSdW50aW1lTWV0aG9kIGZpbmFsIDogcHVi
bGljIFJ1bnRpbWVNZXRob2QgewotcHVibGljOgotICAgIHVzaW5nIEJhc2UgPSBSdW50aW1lTWV0
aG9kOwotCi0gICAgc3RhdGljIENSdW50aW1lTWV0aG9kKiBjcmVhdGUoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IFN0cmluZyYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZCogbWV0aG9kKQotICAgIHsKLSAgICAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgICAgICAvLyBGSVhNRTogZGVwcmVjYXRl
ZEdldERPTVN0cnVjdHVyZSB1c2VzIHRoZSBwcm90b3R5cGUgb2ZmIG9mIHRoZSB3cm9uZyBnbG9i
YWwgb2JqZWN0Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiB0aGUgcmlnaHQgZ2xvYmFs
IG9iamVjdCBmb3IgImkiLgotICAgICAgICBTdHJ1Y3R1cmUqIGRvbVN0cnVjdHVyZSA9IFdlYkNv
cmU6OmRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8Q1J1bnRpbWVNZXRob2Q+KGxleGljYWxHbG9i
YWxPYmplY3QpOwotICAgICAgICBDUnVudGltZU1ldGhvZCogcnVudGltZU1ldGhvZCA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPENSdW50aW1lTWV0aG9kPih2bS5oZWFwKSkgQ1J1bnRpbWVN
ZXRob2Qodm0sIGRvbVN0cnVjdHVyZSwgbWV0aG9kKTsKLSAgICAgICAgcnVudGltZU1ldGhvZC0+
ZmluaXNoQ3JlYXRpb24odm0sIG5hbWUpOwotICAgICAgICByZXR1cm4gcnVudGltZU1ldGhvZDsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKEludGVybmFsRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotCi1wcml2YXRlOgotICAgIENSdW50aW1l
TWV0aG9kKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJpbmRpbmdzOjpNZXRob2QqIG1l
dGhvZCkKLSAgICAgICAgOiBSdW50aW1lTWV0aG9kKHZtLCBzdHJ1Y3R1cmUsIG1ldGhvZCkKLSAg
ICB7Ci0gICAgfQotCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0sIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKLSAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBuYW1lKTsK
LSAgICAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKLSAgICB9Ci19OwotCi1jb25z
dCBDbGFzc0luZm8gQ1J1bnRpbWVNZXRob2Q6OnNfaW5mbyA9IHsgIkNSdW50aW1lTWV0aG9kIiwg
JlJ1bnRpbWVNZXRob2Q6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShDUnVudGltZU1ldGhvZCkgfTsKLQotSlNWYWx1ZSBDSW5zdGFuY2U6OmdldE1ldGhvZChK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkKLXsKLSAgICBNZXRob2QqIG1ldGhvZCA9IGdldENsYXNzKCktPm1ldGhvZE5hbWVkKHBy
b3BlcnR5TmFtZSwgdGhpcyk7Ci0gICAgcmV0dXJuIENSdW50aW1lTWV0aG9kOjpjcmVhdGUobGV4
aWNhbEdsb2JhbE9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLnB1Ymxp
Y05hbWUoKSwgbWV0aG9kKTsKLX0KLQotSlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZU1ldGhvZChK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IFJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QpCi17Ci0gICAgVk0mIHZtID0gbGV4aWNhbEds
b2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0KLSAgICBpZiAoIWFzT2JqZWN0KHJ1bnRpbWVNZXRob2QpLT5pbmhlcml0czxDUnVudGlt
ZU1ldGhvZD4odm0pKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgc2NvcGUsICJBdHRlbXB0IHRvIGludm9rZSBub24tcGx1Zy1pbiBtZXRob2Qgb24g
cGx1Zy1pbiBvYmplY3QuIl9zKTsKLQotICAgIENNZXRob2QqIG1ldGhvZCA9IHN0YXRpY19jYXN0
PENNZXRob2QqPihydW50aW1lTWV0aG9kLT5tZXRob2QoKSk7Ci0gICAgQVNTRVJUKG1ldGhvZCk7
Ci0KLSAgICBOUElkZW50aWZpZXIgaWRlbnQgPSBtZXRob2QtPmlkZW50aWZpZXIoKTsKLSAgICBp
ZiAoIV9vYmplY3QtPl9jbGFzcy0+aGFzTWV0aG9kKF9vYmplY3QsIGlkZW50KSkKLSAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICB1bnNpZ25lZCBjb3VudCA9IGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpOwotICAgIFZlY3RvcjxOUFZhcmlhbnQsIDg+IGNBcmdzKGNvdW50KTsK
LQotICAgIHVuc2lnbmVkIGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAg
ICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoaSksICZjQXJnc1tpXSk7Ci0KLSAgICAvLyBJbnZva2UgdGhl
ICdDJyBtZXRob2QuCi0gICAgYm9vbCByZXR2YWwgPSB0cnVlOwotICAgIE5QVmFyaWFudCByZXN1
bHRWYXJpYW50OwotICAgIFZPSURfVE9fTlBWQVJJQU5UKHJlc3VsdFZhcmlhbnQpOwotCi0gICAg
ewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MobGV4aWNhbEdsb2Jh
bE9iamVjdCk7Ci0gICAgICAgIEFTU0VSVChnbG9iYWxFeGNlcHRpb25TdHJpbmcoKS5pc051bGwo
KSk7Ci0gICAgICAgIHJldHZhbCA9IF9vYmplY3QtPl9jbGFzcy0+aW52b2tlKF9vYmplY3QsIGlk
ZW50LCBjQXJncy5kYXRhKCksIGNvdW50LCAmcmVzdWx0VmFyaWFudCk7Ci0gICAgICAgIG1vdmVH
bG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICB9Ci0K
LSAgICBpZiAoIXJldHZhbCkKLSAgICAgICAgdGhyb3dFeGNlcHRpb24obGV4aWNhbEdsb2JhbE9i
amVjdCwgc2NvcGUsIGNyZWF0ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsICJFcnJvciBjYWxs
aW5nIG1ldGhvZCBvbiBOUE9iamVjdC4iX3MpKTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQotICAgICAgICBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWUoJmNBcmdzW2ldKTsKLQot
ICAgIEpTVmFsdWUgcmVzdWx0VmFsdWUgPSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAmcmVzdWx0VmFyaWFudCwgbV9yb290T2JqZWN0LmdldCgpKTsKLSAgICBf
TlBOX1JlbGVhc2VWYXJpYW50VmFsdWUoJnJlc3VsdFZhcmlhbnQpOwotICAgIHJldHVybiByZXN1
bHRWYWx1ZTsKLX0KLQotCi1KU1ZhbHVlIENJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZChK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
Ci17Ci0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoIV9vYmplY3QtPl9jbGFz
cy0+aW52b2tlRGVmYXVsdCkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICB1
bnNpZ25lZCBjb3VudCA9IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOwotICAgIFZlY3RvcjxO
UFZhcmlhbnQsIDg+IGNBcmdzKGNvdW50KTsKLQotICAgIHVuc2lnbmVkIGk7Ci0gICAgZm9yIChp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGxl
eGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSksICZjQXJn
c1tpXSk7Ci0KLSAgICAvLyBJbnZva2UgdGhlICdDJyBtZXRob2QuCi0gICAgYm9vbCByZXR2YWwg
PSB0cnVlOwotICAgIE5QVmFyaWFudCByZXN1bHRWYXJpYW50OwotICAgIFZPSURfVE9fTlBWQVJJ
QU5UKHJlc3VsdFZhcmlhbnQpOwotICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgICAgICBBU1NFUlQoZ2xvYmFs
RXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwotICAgICAgICByZXR2YWwgPSBfb2JqZWN0LT5f
Y2xhc3MtPmludm9rZURlZmF1bHQoX29iamVjdCwgY0FyZ3MuZGF0YSgpLCBjb3VudCwgJnJlc3Vs
dFZhcmlhbnQpOwotICAgICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUobGV4aWNh
bEdsb2JhbE9iamVjdCk7Ci0gICAgfQotCi0gICAgaWYgKCFyZXR2YWwpCi0gICAgICAgIHRocm93
RXhjZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiRXJyb3IgY2FsbGluZyBtZXRob2Qgb24gTlBPYmplY3QuIl9zKSk7Ci0K
LSAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgX05QTl9SZWxlYXNlVmFy
aWFudFZhbHVlKCZjQXJnc1tpXSk7Ci0KLSAgICBKU1ZhbHVlIHJlc3VsdFZhbHVlID0gY29udmVy
dE5QVmFyaWFudFRvVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgJnJlc3VsdFZhcmlhbnQsIG1f
cm9vdE9iamVjdC5nZXQoKSk7Ci0gICAgX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlKCZyZXN1bHRW
YXJpYW50KTsKLSAgICByZXR1cm4gcmVzdWx0VmFsdWU7Ci19Ci0KLWJvb2wgQ0luc3RhbmNlOjpz
dXBwb3J0c0NvbnN0cnVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIF9vYmplY3QtPl9jbGFzcy0+
Y29uc3RydWN0OwotfQotCi1KU1ZhbHVlIENJbnN0YW5jZTo6aW52b2tlQ29uc3RydWN0KEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQotewotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKCFfb2JqZWN0
LT5fY2xhc3MtPmNvbnN0cnVjdCkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAg
ICB1bnNpZ25lZCBjb3VudCA9IGFyZ3Muc2l6ZSgpOwotICAgIFZlY3RvcjxOUFZhcmlhbnQsIDg+
IGNBcmdzKGNvdW50KTsKLQotICAgIHVuc2lnbmVkIGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGNv
dW50OyBpKyspCi0gICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGxleGljYWxHbG9iYWxP
YmplY3QsIGFyZ3MuYXQoaSksICZjQXJnc1tpXSk7Ci0KLSAgICAvLyBJbnZva2UgdGhlICdDJyBt
ZXRob2QuCi0gICAgYm9vbCByZXR2YWwgPSB0cnVlOwotICAgIE5QVmFyaWFudCByZXN1bHRWYXJp
YW50OwotICAgIFZPSURfVE9fTlBWQVJJQU5UKHJlc3VsdFZhcmlhbnQpOwotICAgIHsKLSAgICAg
ICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGxleGljYWxHbG9iYWxPYmplY3Qp
OwotICAgICAgICBBU1NFUlQoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwotICAg
ICAgICByZXR2YWwgPSBfb2JqZWN0LT5fY2xhc3MtPmNvbnN0cnVjdChfb2JqZWN0LCBjQXJncy5k
YXRhKCksIGNvdW50LCAmcmVzdWx0VmFyaWFudCk7Ci0gICAgICAgIG1vdmVHbG9iYWxFeGNlcHRp
b25Ub0V4ZWNTdGF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICB9Ci0KLSAgICBpZiAoIXJl
dHZhbCkKLSAgICAgICAgdGhyb3dFeGNlcHRpb24obGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUs
IGNyZWF0ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsICJFcnJvciBjYWxsaW5nIG1ldGhvZCBv
biBOUE9iamVjdC4iX3MpKTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAg
ICAgICBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWUoJmNBcmdzW2ldKTsKLQotICAgIEpTVmFsdWUg
cmVzdWx0VmFsdWUgPSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0
LCAmcmVzdWx0VmFyaWFudCwgbV9yb290T2JqZWN0LmdldCgpKTsKLSAgICBfTlBOX1JlbGVhc2VW
YXJpYW50VmFsdWUoJnJlc3VsdFZhcmlhbnQpOwotICAgIHJldHVybiByZXN1bHRWYWx1ZTsKLX0K
LQotSlNWYWx1ZSBDSW5zdGFuY2U6OmRlZmF1bHRWYWx1ZShKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBoaW50KSBjb25zdAotewotICAg
IGlmIChoaW50ID09IFByZWZlclN0cmluZykKLSAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlKGxl
eGljYWxHbG9iYWxPYmplY3QpOwotICAgIGlmIChoaW50ID09IFByZWZlck51bWJlcikKLSAgICAg
ICAgcmV0dXJuIG51bWJlclZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIHJldHVybiB2
YWx1ZU9mKGxleGljYWxHbG9iYWxPYmplY3QpOwotfQotCi1KU1ZhbHVlIENJbnN0YW5jZTo6c3Ry
aW5nVmFsdWUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QpIGNvbnN0Ci17Ci0g
ICAgSlNWYWx1ZSB2YWx1ZTsKLSAgICBpZiAodG9KU1ByaW1pdGl2ZShsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAidG9TdHJpbmciLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLQotICAgIC8v
IEZhbGxiYWNrIHRvIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uCi0gICAgcmV0dXJuIGpzTm9udHJp
dmlhbFN0cmluZyhsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpLCAiTlBPYmplY3QiX3MpOwotfQot
Ci1KU1ZhbHVlIENJbnN0YW5jZTo6bnVtYmVyVmFsdWUoSlNHbG9iYWxPYmplY3QqKSBjb25zdAot
ewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgc29tZXRoaW5nIHNlbnNpYmxlLgotICAgIHJldHVy
biBqc051bWJlcigwKTsKLX0KLQotSlNWYWx1ZSBDSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSgpIGNv
bnN0Ci17Ci0gICAgLy8gQXMgcGVyIEVDTUEgOS4yLgotICAgIHJldHVybiBqc0Jvb2xlYW4oZ2V0
T2JqZWN0KCkpOwotfQotCi1KU1ZhbHVlIENJbnN0YW5jZTo6dmFsdWVPZihKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCkgY29uc3QKLXsKLSAgICBKU1ZhbHVlIHZhbHVlOwotICAg
IGlmICh0b0pTUHJpbWl0aXZlKGxleGljYWxHbG9iYWxPYmplY3QsICJ2YWx1ZU9mIiwgdmFsdWUp
KQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0KLSAgICAvLyBGYWxsYmFjayB0byBkZWZhdWx0IGlt
cGxlbWVudGF0aW9uLgotICAgIHJldHVybiBzdHJpbmdWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKLX0KLQotYm9vbCBDSW5zdGFuY2U6OnRvSlNQcmltaXRpdmUoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IGNoYXIqIG5hbWUsIEpTVmFsdWUmIHJlc3VsdFZhbHVl
KSBjb25zdAotewotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgTlBJZGVudGlmaWVy
IGlkZW50ID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyKG5hbWUpOwotICAgIGlmICghX29iamVj
dC0+X2NsYXNzLT5oYXNNZXRob2QoX29iamVjdCwgaWRlbnQpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAvLyBJbnZva2UgdGhlICdDJyBtZXRob2QuCi0gICAgYm9vbCByZXR2YWwgPSB0
cnVlOwotICAgIE5QVmFyaWFudCByZXN1bHRWYXJpYW50OwotICAgIFZPSURfVE9fTlBWQVJJQU5U
KHJlc3VsdFZhcmlhbnQpOwotCi0gICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgICAgIEFTU0VSVChnbG9iYWxF
eGNlcHRpb25TdHJpbmcoKS5pc051bGwoKSk7Ci0gICAgICAgIHJldHZhbCA9IF9vYmplY3QtPl9j
bGFzcy0+aW52b2tlKF9vYmplY3QsIGlkZW50LCAwLCAwLCAmcmVzdWx0VmFyaWFudCk7Ci0gICAg
ICAgIG1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
LSAgICB9Ci0KLSAgICBpZiAoIXJldHZhbCkKLSAgICAgICAgdGhyb3dFeGNlcHRpb24obGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsICJF
cnJvciBjYWxsaW5nIG1ldGhvZCBvbiBOUE9iamVjdC4iX3MpKTsKLQotICAgIHJlc3VsdFZhbHVl
ID0gY29udmVydE5QVmFyaWFudFRvVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgJnJlc3VsdFZh
cmlhbnQsIG1fcm9vdE9iamVjdC5nZXQoKSk7Ci0gICAgX05QTl9SZWxlYXNlVmFyaWFudFZhbHVl
KCZyZXN1bHRWYXJpYW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDSW5zdGFuY2U6
OmdldFByb3BlcnR5TmFtZXMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZUFycmF5JiBuYW1lQXJyYXkpCi17Ci0gICAgaWYgKCFOUF9DTEFTU19TVFJVQ1Rf
VkVSU0lPTl9IQVNfRU5VTShfb2JqZWN0LT5fY2xhc3MpIHx8ICFfb2JqZWN0LT5fY2xhc3MtPmVu
dW1lcmF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdWludDMyX3QgY291bnQ7Ci0gICAgTlBJ
ZGVudGlmaWVyKiBpZGVudGlmaWVyczsKLQotICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgICAgICBBU1NFUlQo
Z2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwotICAgICAgICBib29sIG9rID0gX29i
amVjdC0+X2NsYXNzLT5lbnVtZXJhdGUoX29iamVjdCwgJmlkZW50aWZpZXJzLCAmY291bnQpOwot
ICAgICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUobGV4aWNhbEdsb2JhbE9iamVj
dCk7Ci0gICAgICAgIGlmICghb2spCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Vk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVy
ID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KGlkZW50aWZpZXJzW2ldKTsKLQotICAgICAg
ICBpZiAoaWRlbnRpZmllci0+aXNTdHJpbmcoKSkKLSAgICAgICAgICAgIG5hbWVBcnJheS5hZGQo
aWRlbnRpZmllckZyb21OUElkZW50aWZpZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmll
ci0+c3RyaW5nKCkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbmFtZUFycmF5LmFkZChJ
ZGVudGlmaWVyOjpmcm9tKHZtLCBpZGVudGlmaWVyLT5udW1iZXIoKSkpOwotICAgIH0KLQotICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZWFsbHkgY2FsbCBOUE5fTWVtRnJlZSBidXQgdGhhdCdz
IGluIFdlYktpdAotICAgIGZyZWUoaWRlbnRpZmllcnMpOwotfQotCi19Ci19Ci0KLSNlbmRpZiAv
LyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9jL2NfaW5zdGFuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFu
Y2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJkZDdmOThjODUzOTM3Mjk2Mjli
ZDcyODJhZDQwNDcwNDE2YzMwNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgQklORElOR1NfQ19JTlNUQU5DRV9IXwotI2RlZmluZSBCSU5E
SU5HU19DX0lOU1RBTkNFX0hfCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQot
I2luY2x1ZGUgIkJyaWRnZUpTQy5oIgotI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi10eXBlZGVmIHN0cnVjdCBOUE9iamVjdCBOUE9i
amVjdDsKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLW5hbWVzcGFjZSBCaW5kaW5ncyB7Ci0KLWNsYXNz
IENDbGFzczsKLQotY2xhc3MgQ0luc3RhbmNlIDogcHVibGljIEluc3RhbmNlIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPENJbnN0YW5jZT4gY3JlYXRlKE5QT2JqZWN0KiBvYmplY3QsIFJlZlB0
cjxSb290T2JqZWN0PiYmIHJvb3RPYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBDSW5zdGFuY2Uob2JqZWN0LCBXVEZNb3ZlKHJvb3RPYmplY3QpKSk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIHZvaWQgc2V0R2xvYmFsRXhjZXB0aW9uKFN0cmluZyk7Ci0gICAgc3RhdGlj
IHZvaWQgbW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKEpTR2xvYmFsT2JqZWN0Kik7Ci0K
LSAgICB2aXJ0dWFsIH5DSW5zdGFuY2UoKTsKLQotICAgIENsYXNzICpnZXRDbGFzcygpIGNvbnN0
IG92ZXJyaWRlOwotCi0gICAgSlNWYWx1ZSB2YWx1ZU9mKEpTR2xvYmFsT2JqZWN0KikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoSlNHbG9iYWxPYmplY3QqLCBQcmVm
ZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdCBvdmVycmlkZTsKLQotICAgIEpTVmFsdWUgZ2V0TWV0
aG9kKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lKSBvdmVycmlkZTsKLSAgICBKU1ZhbHVl
IGludm9rZU1ldGhvZChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFJ1bnRpbWVNZXRob2Qq
KSBvdmVycmlkZTsKLSAgICBib29sIHN1cHBvcnRzSW52b2tlRGVmYXVsdE1ldGhvZCgpIGNvbnN0
IG92ZXJyaWRlOwotICAgIEpTVmFsdWUgaW52b2tlRGVmYXVsdE1ldGhvZChKU0dsb2JhbE9iamVj
dCosIENhbGxGcmFtZSopIG92ZXJyaWRlOwotCi0gICAgYm9vbCBzdXBwb3J0c0NvbnN0cnVjdCgp
IGNvbnN0IG92ZXJyaWRlOwotICAgIEpTVmFsdWUgaW52b2tlQ29uc3RydWN0KEpTR2xvYmFsT2Jq
ZWN0KiwgQ2FsbEZyYW1lKiwgY29uc3QgQXJnTGlzdCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBn
ZXRQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmKSBvdmVy
cmlkZTsKLQotICAgIEpTVmFsdWUgc3RyaW5nVmFsdWUoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsK
LSAgICBKU1ZhbHVlIG51bWJlclZhbHVlKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7Ci0gICAgSlNW
YWx1ZSBib29sZWFuVmFsdWUoKSBjb25zdDsKLQotICAgIE5QT2JqZWN0ICpnZXRPYmplY3QoKSBj
b25zdCB7IHJldHVybiBfb2JqZWN0OyB9Ci0KLXByaXZhdGU6Ci0gICAgQ0luc3RhbmNlKE5QT2Jq
ZWN0KiwgUmVmUHRyPFJvb3RPYmplY3Q+JiYpOwotCi0gICAgUnVudGltZU9iamVjdCogbmV3UnVu
dGltZU9iamVjdChKU0dsb2JhbE9iamVjdCopIG92ZXJyaWRlOwotICAgIGJvb2wgdG9KU1ByaW1p
dGl2ZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IGNoYXIqLCBKU1ZhbHVlJikgY29uc3Q7Ci0KLQot
ICAgIG11dGFibGUgQ0NsYXNzICpfY2xhc3M7Ci0gICAgTlBPYmplY3QgKl9vYmplY3Q7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBCaW5kaW5ncwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlm
IC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfcnVudGltZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlk
Z2UvYy9jX3J1bnRpbWUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzUyZmUy
MjE1ZDQxNzU2ZjJlNWM0NjE4OTRlYjVlNmRlOWQxNDA0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfcnVudGlt
ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgImNfcnVudGltZS5oIgotCi0j
aW5jbHVkZSAiY19pbnN0YW5jZS5oIgotI2luY2x1ZGUgImNfdXRpbGl0eS5oIgotI2luY2x1ZGUg
Im5wcnVudGltZV9pbXBsLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNMb2NrLmg+Ci0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3QuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci1u
YW1lc3BhY2UgQmluZGluZ3MgewotCi1KU1ZhbHVlIENGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2Uo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IEluc3RhbmNlKiBpbnN0
KSBjb25zdAotewotICAgIGNvbnN0IENJbnN0YW5jZSogaW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxj
b25zdCBDSW5zdGFuY2UqPihpbnN0KTsKLSAgICBOUE9iamVjdCogb2JqID0gaW5zdGFuY2UtPmdl
dE9iamVjdCgpOwotICAgIGlmIChvYmotPl9jbGFzcy0+Z2V0UHJvcGVydHkpIHsKLSAgICAgICAg
TlBWYXJpYW50IHByb3BlcnR5OwotICAgICAgICBWT0lEX1RPX05QVkFSSUFOVChwcm9wZXJ0eSk7
Ci0KLSAgICAgICAgYm9vbCByZXN1bHQ7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICAgICAg
ICAgIHJlc3VsdCA9IG9iai0+X2NsYXNzLT5nZXRQcm9wZXJ0eShvYmosIF9maWVsZElkZW50aWZp
ZXIsICZwcm9wZXJ0eSk7Ci0gICAgICAgICAgICBDSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRp
b25Ub0V4ZWNTdGF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAocmVzdWx0KSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNvbnZlcnROUFZhcmlh
bnRUb1ZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsICZwcm9wZXJ0eSwgaW5zdGFuY2UtPnJvb3RP
YmplY3QoKSk7Ci0gICAgICAgICAgICBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWUoJnByb3BlcnR5
KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLWJvb2wgQ0ZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2Uo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IEluc3RhbmNlICppbnN0
LCBKU1ZhbHVlIGFWYWx1ZSkgY29uc3QKLXsKLSAgICBjb25zdCBDSW5zdGFuY2UqIGluc3RhbmNl
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ0luc3RhbmNlKj4oaW5zdCk7Ci0gICAgTlBPYmplY3QqIG9i
aiA9IGluc3RhbmNlLT5nZXRPYmplY3QoKTsKLSAgICBpZiAob2JqLT5fY2xhc3MtPnNldFByb3Bl
cnR5KSB7Ci0gICAgICAgIE5QVmFyaWFudCB2YXJpYW50OwotICAgICAgICBjb252ZXJ0VmFsdWVU
b05QVmFyaWFudChsZXhpY2FsR2xvYmFsT2JqZWN0LCBhVmFsdWUsICZ2YXJpYW50KTsKLQotICAg
ICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICB7Ci0gICAgICAgICAgICBKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgICAg
ICAgICByZXN1bHQgPSBvYmotPl9jbGFzcy0+c2V0UHJvcGVydHkob2JqLCBfZmllbGRJZGVudGlm
aWVyLCAmdmFyaWFudCk7Ci0gICAgICAgICAgICBDSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRp
b25Ub0V4ZWNTdGF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICAgICAgfQotCi0gICAgICAg
IF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSgmdmFyaWFudCk7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSB9Ci0KLSNlbmRpZiAvLyBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9jL2NfcnVudGltZS5oIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19ydW50aW1lLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3OTA4NGRkZWEyM2E2YmRlMWVhMjFiOWZiZmFk
YzNjZTlmODUwM2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19ydW50aW1lLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaWZuZGVmIEJJTkRJTkdTX0NfUlVOVElNRV9IXwotI2RlZmluZSBCSU5ESU5H
U19DX1JVTlRJTUVfSF8KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5j
bHVkZSAiQnJpZGdlSlNDLmgiCi0jaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCi0KLW5h
bWVzcGFjZSBKU0MgewotbmFtZXNwYWNlIEJpbmRpbmdzIHsKLQotY2xhc3MgQ0ZpZWxkIDogcHVi
bGljIEZpZWxkIHsKLXB1YmxpYzoKLSAgICBDRmllbGQoTlBJZGVudGlmaWVyIGlkZW50KSA6IF9m
aWVsZElkZW50aWZpZXIoaWRlbnQpIHsgfQotCi0gICAgSlNWYWx1ZSB2YWx1ZUZyb21JbnN0YW5j
ZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3RhbmNlKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
Ym9vbCBzZXRWYWx1ZVRvSW5zdGFuY2UoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0YW5jZSos
IEpTVmFsdWUpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgTlBJZGVudGlmaWVyIGlkZW50aWZpZXIo
KSBjb25zdCB7IHJldHVybiBfZmllbGRJZGVudGlmaWVyOyB9Ci0KLXByaXZhdGU6Ci0gICAgTlBJ
ZGVudGlmaWVyIF9maWVsZElkZW50aWZpZXI7Ci19OwotCi0KLWNsYXNzIENNZXRob2QgOiBwdWJs
aWMgTWV0aG9kIHsKLXB1YmxpYzoKLSAgICBDTWV0aG9kKE5QSWRlbnRpZmllciBpZGVudCkgOiBf
bWV0aG9kSWRlbnRpZmllcihpZGVudCkgeyB9Ci0KLSAgICBOUElkZW50aWZpZXIgaWRlbnRpZmll
cigpIGNvbnN0IHsgcmV0dXJuIF9tZXRob2RJZGVudGlmaWVyOyB9Ci0gICAgaW50IG51bVBhcmFt
ZXRlcnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9Ci0KLXByaXZhdGU6Ci0gICAgTlBJ
ZGVudGlmaWVyIF9tZXRob2RJZGVudGlmaWVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgQmluZGlu
Z3MKLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191
dGlsaXR5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3OTFiODI1MjY0YjlmYTcwNjA1NDFmMzA1ZWViMGJj
MzY1NzgwMzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDE1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1
cnlha292IChhcEBueXBvcC5jb20pCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLQotI2luY2x1ZGUgImNfdXRpbGl0eS5oIgotCi0jaW5jbHVkZSAiQ1J1bnRpbWVP
YmplY3QuaCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgotI2luY2x1ZGUgIk5QX2pzb2JqZWN0LmgiCi0j
aW5jbHVkZSAiY19pbnN0YW5jZS5oIgotI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCi0jaW5j
bHVkZSAibnBydW50aW1lX3ByaXYuaCIKLSNpbmNsdWRlICJydW50aW1lX29iamVjdC5oIgotI2lu
Y2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTR2xvYmFs
T2JqZWN0Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNMb2NrLmg+Ci0jaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCaW5kaW5ncyB7Ci0KLXN0YXRpYyBTdHJpbmcgY29udmVy
dFVURjhUb1VURjE2V2l0aExhdGluMUZhbGxiYWNrKGNvbnN0IE5QVVRGOCogVVRGOENoYXJzLCBp
bnQgVVRGOExlbmd0aCkKLXsKLSAgICBBU1NFUlQoVVRGOENoYXJzIHx8IFVURjhMZW5ndGggPT0g
MCk7Ci0gICAgCi0gICAgaWYgKFVURjhMZW5ndGggPT0gLTEpCi0gICAgICAgIFVURjhMZW5ndGgg
PSBzdGF0aWNfY2FzdDxpbnQ+KHN0cmxlbihVVEY4Q2hhcnMpKTsKLQotICAgIFN0cmluZyByZXN1
bHQgPSBTdHJpbmc6OmZyb21VVEY4KFVURjhDaGFycywgVVRGOExlbmd0aCk7Ci0gICAgCi0gICAg
Ly8gSWYgd2UgZ290IGJhY2sgYSBudWxsIHN0cmluZyBpbmRpY2F0aW5nIGFuIHVuc3VjY2Vzc2Z1
bCBjb252ZXJzaW9uLCBmYWxsIGJhY2sgdG8gbGF0aW4gMS4KLSAgICAvLyBTb21lIHBsdWdpbnMg
cmV0dXJuIGludmFsaWQgVVRGLTggaW4gTlBWYXJpYW50VHlwZV9TdHJpbmcsIHNlZSA8aHR0cDov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE2Mz4KLSAgICAvLyBUaGVyZSBpcyBu
byAiYmFkIGRhdGEiIGZvciBsYXRpbjEuIEl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIHBsdWdpbiB3
YXMgcmVhbGx5IHNlbmRpbmcgdGV4dCBpbiB0aGlzIGVuY29kaW5nLAotICAgIC8vIGJ1dCBpdCBz
aG91bGQgaGF2ZSB1c2VkIFVURi04LCBhbmQgbm93IHdlIGFyZSBzaW1wbHkgYXZvaWRpbmcgYSBj
cmFzaC4KLSAgICBpZiAocmVzdWx0LmlzTnVsbCgpKQotICAgICAgICByZXN1bHQgPSBTdHJpbmco
VVRGOENoYXJzLCBVVEY4TGVuZ3RoKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0v
LyBWYXJpYW50IHZhbHVlIG11c3QgYmUgcmVsZWFzZWQgd2l0aCBOUFJlbGVhc2VWYXJpYW50VmFs
dWUoKQotdm9pZCBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChKU0dsb2JhbE9iamVjdCogZXhlYywg
SlNWYWx1ZSB2YWx1ZSwgTlBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICAKLSAgICBWT0lEX1RPX05Q
VkFSSUFOVCgqcmVzdWx0KTsKLQotICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAg
IFN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgICAgIENTdHJp
bmcgY3N0cmluZyA9IHVzdHJpbmcudXRmOCgpOwotICAgICAgICBOUFN0cmluZyBzdHJpbmcgPSB7
IChjb25zdCBOUFVURjgqKWNzdHJpbmcuZGF0YSgpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY3N0
cmluZy5sZW5ndGgoKSkgfTsKLSAgICAgICAgTlBOX0luaXRpYWxpemVWYXJpYW50V2l0aFN0cmlu
Z0NvcHkocmVzdWx0LCAmc3RyaW5nKTsKLSAgICB9IGVsc2UgaWYgKHZhbHVlLmlzTnVtYmVyKCkp
IHsKLSAgICAgICAgRE9VQkxFX1RPX05QVkFSSUFOVCh2YWx1ZS50b051bWJlcihleGVjKSwgKnJl
c3VsdCk7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkgewotICAgICAgICBCT09M
RUFOX1RPX05QVkFSSUFOVCh2YWx1ZS50b0Jvb2xlYW4oZXhlYyksICpyZXN1bHQpOwotICAgIH0g
ZWxzZSBpZiAodmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgTlVMTF9UT19OUFZBUklBTlQoKnJl
c3VsdCk7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgIGlmIChvYmplY3QtPmNsYXNz
SW5mbyh2bSkgPT0gQ1J1bnRpbWVPYmplY3Q6OmluZm8oKSkgewotICAgICAgICAgICAgQ1J1bnRp
bWVPYmplY3QqIHJ1bnRpbWVPYmplY3QgPSBzdGF0aWNfY2FzdDxDUnVudGltZU9iamVjdCo+KG9i
amVjdCk7Ci0gICAgICAgICAgICBDSW5zdGFuY2UqIGluc3RhbmNlID0gcnVudGltZU9iamVjdC0+
Z2V0SW50ZXJuYWxDSW5zdGFuY2UoKTsKLSAgICAgICAgICAgIGlmIChpbnN0YW5jZSkgewotICAg
ICAgICAgICAgICAgIE5QT2JqZWN0KiBvYmogPSBpbnN0YW5jZS0+Z2V0T2JqZWN0KCk7Ci0gICAg
ICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qob2JqKTsKLSAgICAgICAgICAgICAgICBPQkpF
Q1RfVE9fTlBWQVJJQU5UKG9iaiwgKnJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdm0uZGVw
cmVjYXRlZFZNRW50cnlHbG9iYWxPYmplY3QoZXhlYyk7Ci0KLSAgICAgICAgICAgIFJvb3RPYmpl
Y3QqIHJvb3RPYmplY3QgPSBmaW5kUm9vdE9iamVjdChnbG9iYWxPYmplY3QpOwotICAgICAgICAg
ICAgaWYgKHJvb3RPYmplY3QpIHsKLSAgICAgICAgICAgICAgICBOUE9iamVjdCogbnBPYmplY3Qg
PSBfTlBOX0NyZWF0ZVNjcmlwdE9iamVjdCgwLCBvYmplY3QsIHJvb3RPYmplY3QpOwotICAgICAg
ICAgICAgICAgIE9CSkVDVF9UT19OUFZBUklBTlQobnBPYmplY3QsICpyZXN1bHQpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1KU1ZhbHVlIGNvbnZlcnROUFZhcmlhbnRU
b1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiBleGVjLCBjb25zdCBOUFZhcmlhbnQqIHZhcmlhbnQsIFJv
b3RPYmplY3QqIHJvb3RPYmplY3QpCi17Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0g
ICAgCi0gICAgTlBWYXJpYW50VHlwZSB0eXBlID0gdmFyaWFudC0+dHlwZTsKLQotICAgIGlmICh0
eXBlID09IE5QVmFyaWFudFR5cGVfQm9vbCkKLSAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihOUFZB
UklBTlRfVE9fQk9PTEVBTigqdmFyaWFudCkpOwotICAgIGlmICh0eXBlID09IE5QVmFyaWFudFR5
cGVfTnVsbCkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIGlmICh0eXBlID09IE5QVmFy
aWFudFR5cGVfVm9pZCkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgaWYgKHR5
cGUgPT0gTlBWYXJpYW50VHlwZV9JbnQzMikKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKE5QVkFS
SUFOVF9UT19JTlQzMigqdmFyaWFudCkpOwotICAgIGlmICh0eXBlID09IE5QVmFyaWFudFR5cGVf
RG91YmxlKQotICAgICAgICByZXR1cm4ganNOdW1iZXIoTlBWQVJJQU5UX1RPX0RPVUJMRSgqdmFy
aWFudCkpOwotICAgIGlmICh0eXBlID09IE5QVmFyaWFudFR5cGVfU3RyaW5nKQotICAgICAgICBy
ZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYy0+dm0oKSwgY29udmVydE5QU3RyaW5nVG9VVEYx
NigmdmFyaWFudC0+dmFsdWUuc3RyaW5nVmFsdWUpKTsKLSAgICBpZiAodHlwZSA9PSBOUFZhcmlh
bnRUeXBlX09iamVjdCkgewotICAgICAgICBOUE9iamVjdCogb2JqID0gdmFyaWFudC0+dmFsdWUu
b2JqZWN0VmFsdWU7Ci0gICAgICAgIAotICAgICAgICBpZiAob2JqLT5fY2xhc3MgPT0gTlBTY3Jp
cHRPYmplY3RDbGFzcykKLSAgICAgICAgICAgIC8vIEdldCBKU09iamVjdCBmcm9tIE5QX0phdmFT
Y3JpcHRPYmplY3QuCi0gICAgICAgICAgICByZXR1cm4gKChKYXZhU2NyaXB0T2JqZWN0KilvYmop
LT5pbXA7Ci0KLSAgICAgICAgLy8gV3JhcCBOUE9iamVjdCBpbiBhIENJbnN0YW5jZS4KLSAgICAg
ICAgcmV0dXJuIENJbnN0YW5jZTo6Y3JlYXRlKG9iaiwgcm9vdE9iamVjdCktPmNyZWF0ZVJ1bnRp
bWVPYmplY3QoZXhlYyk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
fQotCi1TdHJpbmcgY29udmVydE5QU3RyaW5nVG9VVEYxNihjb25zdCBOUFN0cmluZyogc3RyaW5n
KQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHN0cmlu
Zy0+VVRGOENoYXJhY3RlcnMsIHN0cmluZy0+VVRGOExlbmd0aCk7Ci19Ci0KLUlkZW50aWZpZXIg
aWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoSlNHbG9iYWxPYmplY3QqIGV4ZWMsIGNvbnN0IE5Q
VVRGOCogbmFtZSkKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIHJldHVybiBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBjb252ZXJ0VVRGOFRvVVRGMTZXaXRoTGF0aW4xRmFsbGJh
Y2sobmFtZSwgLTEpKTsKLX0KLQotfSB9Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5o
IGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGJmOWEzNzQxNGM2YjJhMjk1MmZiYzg4ZjEwOGNiZmExNmNjNDYwMjQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvYnJpZGdlL2MvY191dGlsaXR5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIENf
VVRJTElUWV9IXwotI2RlZmluZSBDX1VUSUxJVFlfSF8KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQotCi0jaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q0pTVmFsdWUuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotY2xhc3MgQ2FsbEZyYW1lOwotY2xhc3MgSWRlbnRpZmllcjsKLQotbmFtZXNwYWNlIEJpbmRp
bmdzIHsKLQotY2xhc3MgUm9vdE9iamVjdDsKLSAgICAKLXR5cGVkZWYgdWludDE2X3QgTlBVVEYx
NjsKLQotU3RyaW5nIGNvbnZlcnROUFN0cmluZ1RvVVRGMTYoY29uc3QgTlBTdHJpbmcgKik7Ci12
b2lkIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwgTlBW
YXJpYW50KiByZXN1bHQpOwotSlNWYWx1ZSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShKU0dsb2Jh
bE9iamVjdCosIGNvbnN0IE5QVmFyaWFudCosIFJvb3RPYmplY3QqKTsKLUlkZW50aWZpZXIgaWRl
bnRpZmllckZyb21OUElkZW50aWZpZXIoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBOUFVURjgqIG5h
bWUpOwotCi19IH0KLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWUuY3BwIGIv
U291cmNlL1dlYkNvcmUvYnJpZGdlL25wcnVudGltZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDM4YjAyOWZiM2UzMDAyYTk5OGJkZGUzODgxNjM1MjhiYjFiNjBiNzQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
YnJpZGdlL25wcnVudGltZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNs
dWRlICJJZGVudGlmaWVyUmVwLmgiCi0jaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCi0j
aW5jbHVkZSAibnBydW50aW1lX3ByaXYuaCIKLQotI2luY2x1ZGUgImNfdXRpbGl0eS5oIgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lkZW50aWZpZXIuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgotCi0jcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2goZGVmYXVsdCkKLSNpbmNsdWRl
ICJucHJ1bnRpbWVfaW1wbC5oIgotI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3AKLQotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci0KLU5QSWRlbnRpZmllciBfTlBOX0dldFN0cmluZ0lkZW50aWZp
ZXIoY29uc3QgTlBVVEY4KiBuYW1lKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUElkZW50
aWZpZXI+KElkZW50aWZpZXJSZXA6OmdldChuYW1lKSk7Ci19Ci0KLXZvaWQgX05QTl9HZXRTdHJp
bmdJZGVudGlmaWVycyhjb25zdCBOUFVURjgqKiBuYW1lcywgaW50MzJfdCBuYW1lQ291bnQsIE5Q
SWRlbnRpZmllciogaWRlbnRpZmllcnMpCi17Ci0gICAgQVNTRVJUKG5hbWVzKTsKLSAgICBBU1NF
UlQoaWRlbnRpZmllcnMpOwotICAgIAotICAgIGlmIChuYW1lcyAmJiBpZGVudGlmaWVycykgewot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5hbWVDb3VudDsgaSsrKQotICAgICAgICAgICAg
aWRlbnRpZmllcnNbaV0gPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIobmFtZXNbaV0pOwotICAg
IH0KLX0KLQotTlBJZGVudGlmaWVyIF9OUE5fR2V0SW50SWRlbnRpZmllcihpbnQzMl90IGludGlk
KQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXI+KElkZW50aWZpZXJSZXA6
OmdldChpbnRpZCkpOwotfQotCi1ib29sIF9OUE5fSWRlbnRpZmllcklzU3RyaW5nKE5QSWRlbnRp
ZmllciBpZGVudGlmaWVyKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVw
Kj4oaWRlbnRpZmllciktPmlzU3RyaW5nKCk7Ci19Ci0KLU5QVVRGOCAqX05QTl9VVEY4RnJvbUlk
ZW50aWZpZXIoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIpCi17Ci0gICAgY29uc3QgY2hhciogc3Ry
aW5nID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KGlkZW50aWZpZXIpLT5zdHJpbmcoKTsK
LSAgICBpZiAoIXN0cmluZykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIHN0
cmR1cChzdHJpbmcpOwotfQotCi1pbnQzMl90IF9OUE5fSW50RnJvbUlkZW50aWZpZXIoTlBJZGVu
dGlmaWVyIGlkZW50aWZpZXIpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PElkZW50aWZpZXJS
ZXAqPihpZGVudGlmaWVyKS0+bnVtYmVyKCk7Ci19Ci0KLXZvaWQgTlBOX0luaXRpYWxpemVWYXJp
YW50V2l0aFN0cmluZ0NvcHkoTlBWYXJpYW50KiB2YXJpYW50LCBjb25zdCBOUFN0cmluZyogdmFs
dWUpCi17Ci0gICAgdmFyaWFudC0+dHlwZSA9IE5QVmFyaWFudFR5cGVfU3RyaW5nOwotICAgIHZh
cmlhbnQtPnZhbHVlLnN0cmluZ1ZhbHVlLlVURjhMZW5ndGggPSB2YWx1ZS0+VVRGOExlbmd0aDsK
LSAgICAvLyBTd2l0Y2hpbmcgdG8gZmFzdE1hbGxvYyB3b3VsZCBiZSBiZXR0ZXIgdG8gYXZvaWQg
bGVuZ3RoIGNoZWNrIGJ1dCB0aGlzIGlzIG5vdCBkZXNpcmFibGUKLSAgICAvLyBhcyBOUE5fTWVt
QWxsb2MgaXMgdXNpbmcgbWFsbG9jIGFuZCB0aGVyZSBtaWdodCBiZSBwbHVnaW5zIHRoYXQgbWl4
IE5QTl9NZW1BbGxvYyBhbmQgbWFsbG9jIHRvby4KLSAgICB2YXJpYW50LT52YWx1ZS5zdHJpbmdW
YWx1ZS5VVEY4Q2hhcmFjdGVycyA9IChOUFVURjgqKW1hbGxvYyhzaXplb2YoTlBVVEY4KSAqIHZh
bHVlLT5VVEY4TGVuZ3RoKTsKLSAgICBpZiAodmFsdWUtPlVURjhMZW5ndGggJiYgIXZhcmlhbnQt
PnZhbHVlLnN0cmluZ1ZhbHVlLlVURjhDaGFyYWN0ZXJzKQotICAgICAgICBDUkFTSCgpOwotICAg
IG1lbWNweSgodm9pZCopdmFyaWFudC0+dmFsdWUuc3RyaW5nVmFsdWUuVVRGOENoYXJhY3RlcnMs
IHZhbHVlLT5VVEY4Q2hhcmFjdGVycywgc2l6ZW9mKE5QVVRGOCkgKiB2YWx1ZS0+VVRGOExlbmd0
aCk7Ci19Ci0KLXZvaWQgX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlKE5QVmFyaWFudCogdmFyaWFu
dCkKLXsKLSAgICBBU1NFUlQodmFyaWFudCk7Ci0KLSAgICBpZiAodmFyaWFudC0+dHlwZSA9PSBO
UFZhcmlhbnRUeXBlX09iamVjdCkgewotICAgICAgICBfTlBOX1JlbGVhc2VPYmplY3QodmFyaWFu
dC0+dmFsdWUub2JqZWN0VmFsdWUpOwotICAgICAgICB2YXJpYW50LT52YWx1ZS5vYmplY3RWYWx1
ZSA9IDA7Ci0gICAgfSBlbHNlIGlmICh2YXJpYW50LT50eXBlID09IE5QVmFyaWFudFR5cGVfU3Ry
aW5nKSB7Ci0gICAgICAgIGZyZWUoKHZvaWQqKXZhcmlhbnQtPnZhbHVlLnN0cmluZ1ZhbHVlLlVU
RjhDaGFyYWN0ZXJzKTsKLSAgICAgICAgdmFyaWFudC0+dmFsdWUuc3RyaW5nVmFsdWUuVVRGOENo
YXJhY3RlcnMgPSAwOwotICAgICAgICB2YXJpYW50LT52YWx1ZS5zdHJpbmdWYWx1ZS5VVEY4TGVu
Z3RoID0gMDsKLSAgICB9Ci0KLSAgICB2YXJpYW50LT50eXBlID0gTlBWYXJpYW50VHlwZV9Wb2lk
OwotfQotCi1OUE9iamVjdCAqX05QTl9DcmVhdGVPYmplY3QoTlBQIG5wcCwgTlBDbGFzcyogYUNs
YXNzKQotewotICAgIEFTU0VSVChhQ2xhc3MpOwotCi0gICAgaWYgKGFDbGFzcykgewotICAgICAg
ICBOUE9iamVjdCogb2JqOwotICAgICAgICBpZiAoYUNsYXNzLT5hbGxvY2F0ZSAhPSBOVUxMKQot
ICAgICAgICAgICAgb2JqID0gYUNsYXNzLT5hbGxvY2F0ZShucHAsIGFDbGFzcyk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG9iaiA9IChOUE9iamVjdCopbWFsbG9jKHNpemVvZihOUE9iamVj
dCkpOwotICAgICAgICBpZiAoIW9iaikKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIG9i
ai0+X2NsYXNzID0gYUNsYXNzOwotICAgICAgICBvYmotPnJlZmVyZW5jZUNvdW50ID0gMTsKLQot
ICAgICAgICByZXR1cm4gb2JqOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1OUE9iamVj
dCogX05QTl9SZXRhaW5PYmplY3QoTlBPYmplY3QqIG9iaikKLXsKLSAgICBBU1NFUlQob2JqKTsK
LQotICAgIGlmIChvYmopCi0gICAgICAgIG9iai0+cmVmZXJlbmNlQ291bnQrKzsKLQotICAgIHJl
dHVybiBvYmo7Ci19Ci0KLXZvaWQgX05QTl9SZWxlYXNlT2JqZWN0KE5QT2JqZWN0KiBvYmopCi17
Ci0gICAgQVNTRVJUKG9iaik7Ci0gICAgQVNTRVJUKG9iai0+cmVmZXJlbmNlQ291bnQgPj0gMSk7
Ci0KLSAgICBpZiAob2JqICYmIG9iai0+cmVmZXJlbmNlQ291bnQgPj0gMSkgewotICAgICAgICBp
ZiAoLS1vYmotPnJlZmVyZW5jZUNvdW50ID09IDApCi0gICAgICAgICAgICBfTlBOX0RlYWxsb2Nh
dGVPYmplY3Qob2JqKTsKLSAgICB9Ci19Ci0KLXZvaWQgX05QTl9EZWFsbG9jYXRlT2JqZWN0KE5Q
T2JqZWN0ICpvYmopCi17Ci0gICAgQVNTRVJUKG9iaik7Ci0KLSAgICBpZiAob2JqKSB7Ci0gICAg
ICAgIGlmIChvYmotPl9jbGFzcy0+ZGVhbGxvY2F0ZSkKLSAgICAgICAgICAgIG9iai0+X2NsYXNz
LT5kZWFsbG9jYXRlKG9iaik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZyZWUob2JqKTsK
LSAgICB9Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWVfaW1wbC5oIGIvU291cmNlL1dl
YkNvcmUvYnJpZGdlL25wcnVudGltZV9pbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDA2MTgwNDJjY2MyZmE1OTJjYmZlMjI0MGYxODc5MmY4NWIyZjMxYTcuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdl
L25wcnVudGltZV9pbXBsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIF9OUF9SVU5U
SU1FX0lNUExfSF8KLSNkZWZpbmUgX05QX1JVTlRJTUVfSU1QTF9IXwotCi0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJucHJ1bnRpbWVfaW50ZXJuYWwuaCIKLQot
I2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi1leHRlcm4gdm9pZCBf
TlBOX1JlbGVhc2VWYXJpYW50VmFsdWUoTlBWYXJpYW50Kik7Ci1leHRlcm4gTlBJZGVudGlmaWVy
IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcihjb25zdCBOUFVURjgqKTsKLWV4dGVybiB2b2lkIF9O
UE5fR2V0U3RyaW5nSWRlbnRpZmllcnMoY29uc3QgTlBVVEY4KiogbmFtZXMsIGludDMyX3QgbmFt
ZUNvdW50LCBOUElkZW50aWZpZXIqIGlkZW50aWZpZXJzKTsKLWV4dGVybiBOUElkZW50aWZpZXIg
X05QTl9HZXRJbnRJZGVudGlmaWVyKGludDMyX3QpOwotZXh0ZXJuIGJvb2wgX05QTl9JZGVudGlm
aWVySXNTdHJpbmcoTlBJZGVudGlmaWVyKTsKLWV4dGVybiBOUFVURjgqIF9OUE5fVVRGOEZyb21J
ZGVudGlmaWVyKE5QSWRlbnRpZmllcik7Ci1leHRlcm4gaW50MzJfdCBfTlBOX0ludEZyb21JZGVu
dGlmaWVyKE5QSWRlbnRpZmllcik7ICAgIAotZXh0ZXJuIE5QT2JqZWN0KiBfTlBOX0NyZWF0ZU9i
amVjdChOUFAsIE5QQ2xhc3MqKTsKLWV4dGVybiBOUE9iamVjdCogX05QTl9SZXRhaW5PYmplY3Qo
TlBPYmplY3QqKTsKLWV4dGVybiB2b2lkIF9OUE5fUmVsZWFzZU9iamVjdChOUE9iamVjdCopOwot
ZXh0ZXJuIHZvaWQgX05QTl9EZWFsbG9jYXRlT2JqZWN0KE5QT2JqZWN0Kik7Ci1leHRlcm4gYm9v
bCBfTlBOX0ludm9rZShOUFAsIE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUsIGNv
bnN0IE5QVmFyaWFudCogYXJncywgdWludDMyX3QgYXJnQ291bnQsIE5QVmFyaWFudCogcmVzdWx0
KTsKLWV4dGVybiBib29sIF9OUE5fSW52b2tlRGVmYXVsdChOUFAsIE5QT2JqZWN0KiwgY29uc3Qg
TlBWYXJpYW50KiBhcmdzLCB1aW50MzJfdCBhcmdDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpOwot
ZXh0ZXJuIGJvb2wgX05QTl9FdmFsdWF0ZShOUFAsIE5QT2JqZWN0KiwgTlBTdHJpbmcqLCBOUFZh
cmlhbnQqIHJlc3VsdCk7Ci1leHRlcm4gYm9vbCBfTlBOX0dldFByb3BlcnR5KE5QUCwgTlBPYmpl
Y3QqLCBOUElkZW50aWZpZXIsIE5QVmFyaWFudCogcmVzdWx0KTsKLWV4dGVybiBib29sIF9OUE5f
U2V0UHJvcGVydHkoTlBQLCBOUE9iamVjdCosIE5QSWRlbnRpZmllciwgY29uc3QgTlBWYXJpYW50
Kik7Ci1leHRlcm4gYm9vbCBfTlBOX1JlbW92ZVByb3BlcnR5KE5QUCwgTlBPYmplY3QqLCBOUElk
ZW50aWZpZXIpOwotZXh0ZXJuIGJvb2wgX05QTl9IYXNQcm9wZXJ0eShOUFAsIE5QT2JqZWN0Kiwg
TlBJZGVudGlmaWVyKTsKLWV4dGVybiBib29sIF9OUE5fSGFzTWV0aG9kKE5QUCwgTlBPYmplY3Qq
LCBOUElkZW50aWZpZXIpOwotZXh0ZXJuIHZvaWQgX05QTl9TZXRFeGNlcHRpb24oTlBPYmplY3Qq
LCBjb25zdCBOUFVURjgqKTsKLWV4dGVybiBib29sIF9OUE5fRW51bWVyYXRlKE5QUCwgTlBPYmpl
Y3QqLCBOUElkZW50aWZpZXIqKiwgdWludDMyX3QqIGNvdW50KTsKLWV4dGVybiBib29sIF9OUE5f
Q29uc3RydWN0KE5QUCwgTlBPYmplY3QqLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVpbnQzMl90
IGFyZ0NvdW50LCBOUFZhcmlhbnQgKnJlc3VsdCk7Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfSAg
LyogZW5kIGV4dGVybiAiQyIgKi8KLSNlbmRpZgotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdl
L25wcnVudGltZV9pbnRlcm5hbC5oIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL25wcnVudGltZV9p
bnRlcm5hbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OThmOWRkZjEwODAyY2My
MGY4NGI0OWMyYWE5MzQwYmE4NjViOWExLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWVfaW50ZXJuYWwu
aAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDctMjAwOCBDb2xsYWJvcmEgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2
NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0gKgotICogVGhpcyBp
cyBhIGludGVybmFsIGluY2x1ZGUgaGVhZGVyIGZvciBucGFwaS5oCi0gKgotICogU29tZSBvZiB0
aGUgI2RlZmluZXMgd2hpY2ggYXJlIGluIFgxMSBoZWFkZXJzIGNvbmZsaWN0IHdpdGggdHlwZSBh
bmQgZW51bQotICogbmFtZXMgaW4gSmF2YVNjcmlwdENvcmUgYW5kIFdlYkNvcmUKLSAqIFRoaXMg
aGVhZGVyICN1bmRlZnMgdGhvc2UgZGVmaW5lcyB0byBmaXggdGhlIGNvbmZsaWN0cwotICogSWYg
eW91IG5lZWQgdG8gaW5jbHVkZSBucGFwaS5oIG9yIG5wcnVudGltZS5oIHdoZW4gYnVpbGRpbmcg
b24gWDExLAotICogaW5jbHVkZSB0aGlzIGZpbGUgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIG5wYXBp
Lmggb3IgbnBydW50aW1lLmgKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIm5wYXBp
LmgiCi0jaW5jbHVkZSAibnBmdW5jdGlvbnMuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWUuaCIKLQot
I2lmIGRlZmluZWQoTU9aX1gxMSkKLSAgICAjaW5jbHVkZSA8WDExL1hyZXNvdXJjZS5oPgotCi0g
ICAgI3VuZGVmIEFsd2F5cwotICAgICN1bmRlZiBOb25lCi0gICAgI3VuZGVmIEFib3ZlCi0gICAg
I3VuZGVmIEJlbG93Ci0gICAgI3VuZGVmIEF1dG8KLSAgICAjdW5kZWYgQ29tcGxleAotICAgICN1
bmRlZiBTdGF0dXMKLSAgICAjdW5kZWYgQ3Vyc29yU2hhcGUKLSAgICAjdW5kZWYgRm9jdXNJbgot
ICAgICN1bmRlZiBGb2N1c091dAotICAgICN1bmRlZiBLZXlQcmVzcwotICAgICN1bmRlZiBLZXlS
ZWxlYXNlCi0gICAgI3VuZGVmIFVuc29ydGVkCi0gICAgI3VuZGVmIEJvb2wKLSAgICAjdW5kZWYg
Rm9udENoYW5nZQotICAgICN1bmRlZiBHcmF5U2NhbGUKLSAgICAjdW5kZWYgTm9ybWFsU3RhdGUK
LSAgICAjdW5kZWYgVHJ1ZQotICAgICN1bmRlZiBGYWxzZQotICAgICN1bmRlZiBTdWNjZXNzCi0g
ICAgI3VuZGVmIEV4cG9zZQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlk
Z2UvbnBydW50aW1lX3ByaXYuaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWVfcHJp
di5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWRjMGExN2RjNGQ1OWUwNDljYjll
MGRjNWIxNjBlMTQ0YzZkMjU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWVfcHJpdi5oCisrKyAvZGV2
L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBOUF9SVU5USU1FX1BSSVZfSF8KLSNkZWZpbmUg
TlBfUlVOVElNRV9QUklWX0hfCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQot
I2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgotCi0vKgotICAgIE5QTl9Jbml0aWFsaXpl
VmFyaWFudFdpdGhTdHJpbmdDb3B5KCkgd2lsbCBjb3B5IHN0cmluZyBkYXRhLiAgVGhlIHN0cmlu
ZyBkYXRhCi0gICAgd2lsbCBiZSBkZWFsbG9jYXRlZCBieSBjYWxscyB0byBOUFJlbGVhc2VWYXJp
YW50VmFsdWUoKS4KLSovCi12b2lkIE5QTl9Jbml0aWFsaXplVmFyaWFudFdpdGhTdHJpbmdDb3B5
KE5QVmFyaWFudCosIGNvbnN0IE5QU3RyaW5nKik7Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLSNlbmRpZgotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxQbHVnSW5FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVs
ZW1lbnQuY3BwCmluZGV4IDk2NTFkODRlYTAyYjVmOTdmMjZiNzc0ZTBmMzY4NWRlMjk4NzQ3OWEu
LmQ1NzkwNmYxZTdiZTFhZjM5NThiM2NmMTRmZTZiOGE0ZWFkOWZhNTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCkBAIC01MCwxMCArNTAsNiBAQAogI2luY2x1
ZGUgIldpZGdldC5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKLSNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgot
I2VuZGlmCi0KICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlICJRdWlja1RpbWVQbHVnaW5S
ZXBsYWNlbWVudC5oIgogI2luY2x1ZGUgIllvdVR1YmVQbHVnaW5SZXBsYWNlbWVudC5oIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lLmNwcAppbmRleCA3ZThhYzA1MjQwYTVlMTAzYzg1NGMwYzQ1NzNkZGIyYzViN2Q3
YTJhLi44MmE3NjNmODI3NjAxODFmNDZiYjhmMzQxZmU3ODE4ZTM2YzE2NWQ0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lLmNwcApAQCAtMTAyLDcgKzEwMiw2IEBACiAjaW5jbHVkZSAiVXNlclR5cGluZ0dlc3R1
cmVJbmRpY2F0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKICNpbmNsdWRlICJtYXJr
dXAuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgogI2luY2x1ZGUgInJ1bnRpbWVfcm9v
dC5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9ucGFwaS5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ucGFwaS5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzNiNGU5NDY1Zjk2ZTk0MWEyNjdjMzhiNzU4MGNk
NTJjNjE2YmI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbnBhcGkuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2OSAr
MCwwIEBACi0vKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiA0OyBpbmRlbnQtdGFicy1tb2RlOiBu
aWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLSAqLwotLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9D
SyAqKioqKgotICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCi0gKgotICogVGhl
IGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMg
TGljZW5zZSBWZXJzaW9uCi0gKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2Ug
dGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSAqIHRoZSBMaWNlbnNlLiBZb3Ug
bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIGh0dHA6Ly93d3cubW96aWxs
YS5vcmcvTVBMLwotICoKLSAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNl
IGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCi0gKiBXSVRIT1VUIFdBUlJBTlRZ
IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UK
LSAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRh
dGlvbnMgdW5kZXIgdGhlCi0gKiBMaWNlbnNlLgotICoKLSAqIFRoZSBPcmlnaW5hbCBDb2RlIGlz
IG1vemlsbGEub3JnIGNvZGUuCi0gKgotICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBP
cmlnaW5hbCBDb2RlIGlzCi0gKiBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4K
LSAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmln
aHQgKEMpIDE5OTgKLSAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiBDb250cmlidXRvcihzKToKLSAqCi0gKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29u
dGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgotICogZWl0
aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRo
ZSAiR1BMIiksIG9yCi0gKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZl
cnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKLSAqIGluIHdoaWNoIGNhc2UgdGhlIHBy
b3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCi0g
KiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lv
biBvZiB0aGlzIGZpbGUgb25seQotICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BM
IG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bwotICogdXNlIHlvdXIgdmVy
c2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlv
dXIKLSAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBs
YWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCi0gKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJl
ZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQotICogdGhlIHBy
b3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMg
ZmlsZSB1bmRlcgotICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBv
ciB0aGUgTEdQTC4KLSAqCi0gKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLwotCi0j
aWZuZGVmIG5wYXBpX2hfCi0jZGVmaW5lIG5wYXBpX2hfCi0KLSNpZiBkZWZpbmVkKF9fT1MyX18p
Ci0jcHJhZ21hIHBhY2soMSkKLSNlbmRpZgotCi0jaW5jbHVkZSAibnB0eXBlcy5oIgotCi0jaWYg
ZGVmaW5lZChfX09TMl9fKSB8fCBkZWZpbmVkKE9TMikKLSNpZm5kZWYgWFBfT1MyCi0jZGVmaW5l
IFhQX09TMiAxCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgSU5DTFVERV9KQVZBCi0jaW5jbHVk
ZSAianJpLmgiICAgICAgICAgICAgICAgIC8qIEphdmEgUnVudGltZSBJbnRlcmZhY2UgKi8KLSNl
bHNlCi0jZGVmaW5lIGpyZWYgICAgdm9pZCAqCi0jZGVmaW5lIEpSSUVudiAgdm9pZAotI2VuZGlm
Ci0KLSNpZmRlZiBfV0lOMzIKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaWZuZGVmIFhQX1dJTgot
I2RlZmluZSBYUF9XSU4gMQotI2VuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19BUFBMRV9D
Q19fKSAmJiAhZGVmaW5lZChYUF9VTklYKQotI2lmbmRlZiBYUF9NQUNPU1gKLSNkZWZpbmUgWFBf
TUFDT1NYIDEKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFhQX01BQ09TWCkgJiYgZGVm
aW5lZChfX0xQNjRfXykKLSNkZWZpbmUgTlBfTk9fUVVJQ0tEUkFXCi0jZGVmaW5lIE5QX05PX0NB
UkJPTgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFhQX01BQ09TWCkKLSNpbmNsdWRlIDxDb3JlR3Jh
cGhpY3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8T3BlbkdML09wZW5HTC5oPgotI2lmbmRl
ZiBOUF9OT19DQVJCT04KLSNpbmNsdWRlIDxDYXJib24vQ2FyYm9uLmg+Ci0jZW5kaWYKLSNlbmRp
ZgotCi0jaWYgZGVmaW5lZChYUF9VTklYKQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaWYgZGVmaW5l
ZChNT1pfWDExKQotI2luY2x1ZGUgPFgxMS9YbGliLmg+Ci0jaW5jbHVkZSA8WDExL1h1dGlsLmg+
Ci0jZW5kaWYKLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogICAgICAgICAgICAgICAg
ICAgICAgICBQbHVnaW4gVmVyc2lvbiBDb25zdGFudHMgICAgICAgICAgICAgICAgICAgICAgKi8K
LS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCi0KLSNkZWZpbmUgTlBfVkVSU0lPTl9NQUpPUiAwCi0jZGVmaW5l
IE5QX1ZFUlNJT05fTUlOT1IgMjYKLQotCi0vKiBUaGUgT1MvMiB2ZXJzaW9uIG9mIE5ldHNjYXBl
IHVzZXMgUkNfREFUQSB0byBkZWZpbmUgdGhlCi0gICBtaW1lIHR5cGVzLCBmaWxlIGV4dGVuc2lv
bnMsIGV0YyB0aGF0IGFyZSByZXF1aXJlZC4KLSAgIFVzZSBhIHZlcnRpY2FsIGJhciB0byBzZXBh
cmF0ZSB0eXBlcywgZW5kIHR5cGVzIHdpdGggXDAuCi0gICBGaWxlVmVyc2lvbiBhbmQgUHJvZHVj
dFZlcnNpb24gYXJlIDMyYml0IGludHMsIGFsbCBvdGhlcgotICAgZW50cmllcyBhcmUgc3RyaW5n
cyB0aGF0IE1VU1QgYmUgdGVybWluYXRlZCB3aXRoIGEgXDAuCi0KLUFOIEVYQU1QTEU6Ci0KLVJD
REFUQSBOUF9JTkZPX1Byb2R1Y3RWZXJzaW9uIHsgMSwwLDAsMSx9Ci0KLVJDREFUQSBOUF9JTkZP
X01JTUVUeXBlICAgIHsgInZpZGVvL3gtdmlkZW98IiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInZpZGVvL3gtZmxpY2tcMCIgfQotUkNEQVRBIE5QX0lORk9fRmlsZUV4dGVudHMgeyAi
YXZpfCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmbGNcMCIgfQotUkNEQVRBIE5Q
X0lORk9fRmlsZU9wZW5OYW1leyAiTU1PUzIgdmlkZW8gcGxheWVyKCouYXZpKXwiLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiTU1PUzIgRmxjL0ZsaSBwbGF5ZXIoKi5mbGMpXDAiIH0K
LQotUkNEQVRBIE5QX0lORk9fRmlsZVZlcnNpb24gICAgICAgeyAxLDAsMCwxIH0KLVJDREFUQSBO
UF9JTkZPX0NvbXBhbnlOYW1lICAgICAgIHsgIk5ldHNjYXBlIENvbW11bmljYXRpb25zXDAiIH0K
LVJDREFUQSBOUF9JTkZPX0ZpbGVEZXNjcmlwdGlvbiAgIHsgIk5QQVZJMzIgRXh0ZW5zaW9uIERM
TFwwIgotUkNEQVRBIE5QX0lORk9fSW50ZXJuYWxOYW1lICAgICAgeyAiTlBBVkkzMlwwIiApCi1S
Q0RBVEEgTlBfSU5GT19MZWdhbENvcHlyaWdodCAgICB7ICJDb3B5cmlnaHQgTmV0c2NhcGUgQ29t
bXVuaWNhdGlvbnMgXDI1MSAxOTk2XDAiCi1SQ0RBVEEgTlBfSU5GT19PcmlnaW5hbEZpbGVuYW1l
ICB7ICJOVkFQSTMyLkRMTCIgfQotUkNEQVRBIE5QX0lORk9fUHJvZHVjdE5hbWUgICAgICAgeyAi
TlBBVkkzMiBEeW5hbWljIExpbmsgTGlicmFyeVwwIiB9Ci0qLwotLyogUkNfREFUQSB0eXBlcyBm
b3IgdmVyc2lvbiBpbmZvIC0gcmVxdWlyZWQgKi8KLSNkZWZpbmUgTlBfSU5GT19Qcm9kdWN0VmVy
c2lvbiAgICAgIDEKLSNkZWZpbmUgTlBfSU5GT19NSU1FVHlwZSAgICAgICAgICAgIDIKLSNkZWZp
bmUgTlBfSU5GT19GaWxlT3Blbk5hbWUgICAgICAgIDMKLSNkZWZpbmUgTlBfSU5GT19GaWxlRXh0
ZW50cyAgICAgICAgIDQKLS8qIFJDX0RBVEEgdHlwZXMgZm9yIHZlcnNpb24gaW5mbyAtIHVzZWQg
aWYgZm91bmQgKi8KLSNkZWZpbmUgTlBfSU5GT19GaWxlRGVzY3JpcHRpb24gICAgIDUKLSNkZWZp
bmUgTlBfSU5GT19Qcm9kdWN0TmFtZSAgICAgICAgIDYKLS8qIFJDX0RBVEEgdHlwZXMgZm9yIHZl
cnNpb24gaW5mbyAtIG9wdGlvbmFsICovCi0jZGVmaW5lIE5QX0lORk9fQ29tcGFueU5hbWUgICAg
ICAgICA3Ci0jZGVmaW5lIE5QX0lORk9fRmlsZVZlcnNpb24gICAgICAgICA4Ci0jZGVmaW5lIE5Q
X0lORk9fSW50ZXJuYWxOYW1lICAgICAgICA5Ci0jZGVmaW5lIE5QX0lORk9fTGVnYWxDb3B5cmln
aHQgICAgICAxMAotI2RlZmluZSBOUF9JTkZPX09yaWdpbmFsRmlsZW5hbWUgICAgMTEKLQotI2lm
bmRlZiBSQ19JTlZPS0VECi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiAgICAgICAgICAgICAgICAg
ICAgICAgRGVmaW5pdGlvbiBvZiBCYXNpYyBUeXBlcyAgICAgICAgICAgICAgICAgICAgICAqLwot
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmbmRlZiBGQUxTRQotI2RlZmluZSBGQUxTRSAoMCkKLSNl
bmRpZgotI2lmbmRlZiBUUlVFCi0jZGVmaW5lIFRSVUUgKDEpCi0jZW5kaWYKLSNpZm5kZWYgTlVM
TAotI2RlZmluZSBOVUxMICgwTCkKLSNlbmRpZgotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgTlBC
b29sOwotdHlwZWRlZiBpbnQxNl90ICAgICAgIE5QRXJyb3I7Ci10eXBlZGVmIGludDE2X3QgICAg
ICAgTlBSZWFzb247Ci10eXBlZGVmIGNoYXIqICAgICAgICAgTlBNSU1FVHlwZTsKLQotLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVzIGFuZCBkZWZp
bml0aW9ucyAgICAgICAgICAgICAgICAgICAgICovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYg
IWRlZmluZWQoX19MUDY0X18pCi0jaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0jcHJhZ21hIG9wdGlv
bnMgYWxpZ249bWFjNjhrCi0jZW5kaWYKLSNlbmRpZiAvKiBfX0xQNjRfXyAqLwotCi0vKgotICog
IE5QUCBpcyBhIHBsdWctaW4ncyBvcGFxdWUgaW5zdGFuY2UgaGFuZGxlCi0gKi8KLXR5cGVkZWYg
c3RydWN0IF9OUFAKLXsKLSAgdm9pZCogcGRhdGE7ICAgICAgLyogcGx1Zy1pbiBwcml2YXRlIGRh
dGEgKi8KLSAgdm9pZCogbmRhdGE7ICAgICAgLyogbmV0c2NhcGUgcHJpdmF0ZSBkYXRhICovCi19
IE5QUF90OwotCi10eXBlZGVmIE5QUF90KiAgTlBQOwotCi10eXBlZGVmIHN0cnVjdCBfTlBTdHJl
YW0KLXsKLSAgdm9pZCogICAgcGRhdGE7IC8qIHBsdWctaW4gcHJpdmF0ZSBkYXRhICovCi0gIHZv
aWQqICAgIG5kYXRhOyAvKiBuZXRzY2FwZSBwcml2YXRlIGRhdGEgKi8KLSAgY29uc3QgICAgY2hh
ciogdXJsOwotICB1aW50MzJfdCBlbmQ7Ci0gIHVpbnQzMl90IGxhc3Rtb2RpZmllZDsKLSAgdm9p
ZCogICAgbm90aWZ5RGF0YTsKLSAgY29uc3QgICAgY2hhciogaGVhZGVyczsgLyogUmVzcG9uc2Ug
aGVhZGVycyBmcm9tIGhvc3QuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAqIEV4aXN0cyBv
bmx5IGZvciA+PSBOUFZFUlNfSEFTX1JFU1BPTlNFX0hFQURFUlMuCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAqIFVzZWQgZm9yIEhUVFAgb25seTsgTlVMTCBmb3Igbm9uLUhUVFAuCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAqIEF2YWlsYWJsZSBmcm9tIE5QUF9OZXdTdHJlYW0gb253
YXJkcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICogUGx1Z2luIHNob3VsZCBjb3B5IHRo
aXMgZGF0YSBiZWZvcmUgc3RvcmluZyBpdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICog
SW5jbHVkZXMgSFRUUCBzdGF0dXMgbGluZSBhbmQgYWxsIGhlYWRlcnMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAqIHByZWZlcmFibHkgdmVyYmF0aW0gYXMgcmVjZWl2ZWQgZnJvbSBzZXJ2
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAqIGhlYWRlcnMgZm9ybWF0dGVkIGFzIGlu
IEhUVFAgKCJIZWFkZXI6IFZhbHVlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFu
ZCBuZXdsaW5lcyAoXG4sIE5PVCBcclxuKSBzZXBhcmF0aW5nIGxpbmVzLgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKiBUZXJtaW5hdGVkIGJ5IFxuXDAgKE5PVCBcblxuXDApLiAqLwotfSBO
UFN0cmVhbTsKLQotdHlwZWRlZiBzdHJ1Y3QgX05QQnl0ZVJhbmdlCi17Ci0gIGludDMyX3QgIG9m
ZnNldDsgLyogbmVnYXRpdmUgb2Zmc2V0IG1lYW5zIGZyb20gdGhlIGVuZCAqLwotICB1aW50MzJf
dCBsZW5ndGg7Ci0gIHN0cnVjdCBfTlBCeXRlUmFuZ2UqIG5leHQ7Ci19IE5QQnl0ZVJhbmdlOwot
Ci10eXBlZGVmIHN0cnVjdCBfTlBTYXZlZERhdGEKLXsKLSAgaW50MzJfdCBsZW47Ci0gIHZvaWQq
ICAgYnVmOwotfSBOUFNhdmVkRGF0YTsKLQotdHlwZWRlZiBzdHJ1Y3QgX05QUmVjdAotewotICB1
aW50MTZfdCB0b3A7Ci0gIHVpbnQxNl90IGxlZnQ7Ci0gIHVpbnQxNl90IGJvdHRvbTsKLSAgdWlu
dDE2X3QgcmlnaHQ7Ci19IE5QUmVjdDsKLQotdHlwZWRlZiBzdHJ1Y3QgX05QU2l6ZQotewotICBp
bnQzMl90IHdpZHRoOwotICBpbnQzMl90IGhlaWdodDsKLX0gTlBTaXplOwotCi10eXBlZGVmIGVu
dW0gewotICBOUEZvY3VzTmV4dCA9IDAsCi0gIE5QRm9jdXNQcmV2aW91cyA9IDEKLX0gTlBGb2N1
c0RpcmVjdGlvbjsKLQotLyogUmV0dXJuIHZhbHVlcyBmb3IgTlBQX0hhbmRsZUV2ZW50ICovCi0j
ZGVmaW5lIGtOUEV2ZW50Tm90SGFuZGxlZCAwCi0jZGVmaW5lIGtOUEV2ZW50SGFuZGxlZCAxCi0v
KiBFeGFjdCBtZWFuaW5nIG11c3QgYmUgc3BlYydkIGluIGV2ZW50IG1vZGVsLiAqLwotI2RlZmlu
ZSBrTlBFdmVudFN0YXJ0SU1FIDIKLQotI2lmIGRlZmluZWQoWFBfVU5JWCkKLS8qCi0gKiBVbml4
IHNwZWNpZmljIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zCi0gKi8KLQotLyoKLSAqIENhbGxi
YWNrIFN0cnVjdHVyZXMuCi0gKgotICogVGhlc2UgYXJlIHVzZWQgdG8gcGFzcyBhZGRpdGlvbmFs
IHBsYXRmb3JtIHNwZWNpZmljIGluZm9ybWF0aW9uLgotICovCi1lbnVtIHsKLSAgTlBfU0VUV0lO
RE9XID0gMSwKLSAgTlBfUFJJTlQKLX07Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGludDMyX3Qg
dHlwZTsKLX0gTlBBbnlDYWxsYmFja1N0cnVjdDsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgaW50
MzJfdCAgICAgIHR5cGU7Ci0jaWYgZGVmaW5lZChNT1pfWDExKQotICBEaXNwbGF5KiAgICAgZGlz
cGxheTsKLSAgVmlzdWFsKiAgICAgIHZpc3VhbDsKLSAgQ29sb3JtYXAgICAgIGNvbG9ybWFwOwot
ICB1bnNpZ25lZCBpbnQgZGVwdGg7Ci0jZW5kaWYKLX0gTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVj
dDsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgaW50MzJfdCB0eXBlOwotICBGSUxFKiBmcDsKLX0g
TlBQcmludENhbGxiYWNrU3RydWN0OwotCi0jZW5kaWYgLyogWFBfVU5JWCAqLwotCi0jaWYgZGVm
aW5lZChYUF9NQUNPU1gpCi10eXBlZGVmIGVudW0gewotI2lmbmRlZiBOUF9OT19RVUlDS0RSQVcK
LSAgTlBEcmF3aW5nTW9kZWxRdWlja0RyYXcgPSAwLAotI2VuZGlmCi0gIE5QRHJhd2luZ01vZGVs
Q29yZUdyYXBoaWNzID0gMSwKLSAgTlBEcmF3aW5nTW9kZWxPcGVuR0wgPSAyLCAvLyBOb3RlOiBU
aGlzIGlzIG5vdCBzdXBwb3J0ZWQuCi0gIE5QRHJhd2luZ01vZGVsQ29yZUFuaW1hdGlvbiA9IDMK
LX0gTlBEcmF3aW5nTW9kZWw7Ci0KLXR5cGVkZWYgZW51bSB7Ci0jaWZuZGVmIE5QX05PX0NBUkJP
TgotICBOUEV2ZW50TW9kZWxDYXJib24gPSAwLAotI2VuZGlmCi0gIE5QRXZlbnRNb2RlbENvY29h
ID0gMQotfSBOUEV2ZW50TW9kZWw7Ci0jZW5kaWYKLQotLyoKLSAqICAgVGhlIGZvbGxvd2luZyBt
YXNrcyBhcmUgYXBwbGllZCBvbiBjZXJ0YWluIHBsYXRmb3JtcyB0byBOUE5WIGFuZAotICogICBO
UFBWIHNlbGVjdG9ycyB0aGF0IHBhc3MgYXJvdW5kIHBvaW50ZXJzIHRvIENPTSBpbnRlcmZhY2Vz
LiBOZXdlcgotICogICBjb21waWxlcnMgb24gc29tZSBwbGF0Zm9ybXMgbWF5IGdlbmVyYXRlIHZ0
YWJsZXMgdGhhdCBhcmUgbm90Ci0gKiAgIGNvbXBhdGlibGUgd2l0aCBvbGRlciBjb21waWxlcnMu
IFRvIHByZXZlbnQgb2xkZXIgcGx1Z2lucyBmcm9tCi0gKiAgIG5vdCB1bmRlcnN0YW5kaW5nIGEg
bmV3IGJyb3dzZXIncyBBQkksIHRoZXNlIG1hc2tzIGNoYW5nZSB0aGUKLSAqICAgdmFsdWVzIG9m
IHRob3NlIHNlbGVjdG9ycyBvbiB0aG9zZSBwbGF0Zm9ybXMuIFRvIHJlbWFpbiBiYWNrd2FyZHMK
LSAqICAgY29tcGF0aWJsZSB3aXRoIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgYnJvd3Nlciwg
cGx1Z2lucyBjYW4KLSAqICAgdXNlIHRoZXNlIG1hc2tzIHRvIGR5bmFtaWNhbGx5IGRldGVybWlu
ZSBhbmQgdXNlIHRoZSBjb3JyZWN0IEMrKwotICogICBBQkkgdGhhdCB0aGUgYnJvd3NlciBpcyBl
eHBlY3RpbmcuIFRoaXMgZG9lcyBub3QgYXBwbHkgdG8gV2luZG93cwotICogICBhcyBNaWNyb3Nv
ZnQncyBDT00gQUJJIHdpbGwgbGlrZWx5IG5vdCBjaGFuZ2UuCi0gKi8KLQotI2RlZmluZSBOUF9B
QklfR0NDM19NQVNLICAweDEwMDAwMDAwCi0vKgotICogICBnY2MgMy54IGdlbmVyYXRlZCB2dGFi
bGVzIG9uIFVOSVggYW5kIE9TWCBhcmUgaW5jb21wYXRpYmxlIHdpdGgKLSAqICAgcHJldmlvdXMg
Y29tcGlsZXJzLgotICovCi0jaWYgKGRlZmluZWQoWFBfVU5JWCkgJiYgZGVmaW5lZChfX0dOVUNf
XykgJiYgKF9fR05VQ19fID49IDMpKQotI2RlZmluZSBfTlBfQUJJX01JWElOX0ZPUl9HQ0MzIE5Q
X0FCSV9HQ0MzX01BU0sKLSNlbHNlCi0jZGVmaW5lIF9OUF9BQklfTUlYSU5fRk9SX0dDQzMgMAot
I2VuZGlmCi0KLSNpZiBkZWZpbmVkKFhQX01BQ09TWCkKLSNkZWZpbmUgTlBfQUJJX01BQ0hPX01B
U0sgMHgwMTAwMDAwMAotI2RlZmluZSBfTlBfQUJJX01JWElOX0ZPUl9NQUNITyBOUF9BQklfTUFD
SE9fTUFTSwotI2Vsc2UKLSNkZWZpbmUgX05QX0FCSV9NSVhJTl9GT1JfTUFDSE8gMAotI2VuZGlm
Ci0KLSNkZWZpbmUgTlBfQUJJX01BU0sgKF9OUF9BQklfTUlYSU5fRk9SX0dDQzMgfCBfTlBfQUJJ
X01JWElOX0ZPUl9NQUNITykKLQotLyoKLSAqIExpc3Qgb2YgdmFyaWFibGUgbmFtZXMgZm9yIHdo
aWNoIE5QUF9HZXRWYWx1ZSBzaGFsbCBiZSBpbXBsZW1lbnRlZAotICovCi10eXBlZGVmIGVudW0g
ewotICBOUFBWcGx1Z2luTmFtZVN0cmluZyA9IDEsCi0gIE5QUFZwbHVnaW5EZXNjcmlwdGlvblN0
cmluZywKLSAgTlBQVnBsdWdpbldpbmRvd0Jvb2wsCi0gIE5QUFZwbHVnaW5UcmFuc3BhcmVudEJv
b2wsCi0gIE5QUFZqYXZhQ2xhc3MsICAgICAgICAgICAgICAgIC8qIE5vdCBpbXBsZW1lbnRlZCBp
biBXZWJLaXQgKi8KLSAgTlBQVnBsdWdpbldpbmRvd1NpemUsICAgICAgICAgLyogTm90IGltcGxl
bWVudGVkIGluIFdlYktpdCAqLwotICBOUFBWcGx1Z2luVGltZXJJbnRlcnZhbCwgICAgICAvKiBO
b3QgaW1wbGVtZW50ZWQgaW4gV2ViS2l0ICovCi0gIE5QUFZwbHVnaW5TY3JpcHRhYmxlSW5zdGFu
Y2UgPSAoMTAgfCBOUF9BQklfTUFTSyksIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBXZWJLaXQgKi8K
LSAgTlBQVnBsdWdpblNjcmlwdGFibGVJSUQgPSAxMSwgLyogTm90IGltcGxlbWVudGVkIGluIFdl
YktpdCAqLwotICBOUFBWamF2YXNjcmlwdFB1c2hDYWxsZXJCb29sID0gMTIsICAvKiBOb3QgaW1w
bGVtZW50ZWQgaW4gV2ViS2l0ICovCi0gIE5QUFZwbHVnaW5LZWVwTGlicmFyeUluTWVtb3J5ID0g
MTMsIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBXZWJLaXQgKi8KLSAgTlBQVnBsdWdpbk5lZWRzWEVt
YmVkICAgICAgICAgPSAxNCwgLyogTm90IGltcGxlbWVudGVkIGluIFdlYktpdCAqLwotCi0gIC8q
IEdldCB0aGUgTlBPYmplY3QgZm9yIHNjcmlwdGluZyB0aGUgcGx1Z2luLiBJbnRyb2R1Y2VkIGlu
IE5QQVBJIG1pbm9yIHZlcnNpb24gMTQuCi0gICAqLwotICBOUFBWcGx1Z2luU2NyaXB0YWJsZU5Q
T2JqZWN0ICA9IDE1LAotCi0gIC8qIEdldCB0aGUgcGx1Z2luIHZhbHVlIChhcyBcMC10ZXJtaW5h
dGVkIFVURi04IHN0cmluZyBkYXRhKSBmb3IKLSAgICogZm9ybSBzdWJtaXNzaW9uIGlmIHRoZSBw
bHVnaW4gaXMgcGFydCBvZiBhIGZvcm0uIFVzZQotICAgKiBOUE5fTWVtQWxsb2MoKSB0byBhbGxv
Y2F0ZSBtZW1vcnkgZm9yIHRoZSBzdHJpbmcgZGF0YS4gSW50cm9kdWNlZAotICAgKiBpbiBOUEFQ
SSBtaW5vciB2ZXJzaW9uIDE1LgotICAgKi8KLSAgTlBQVmZvcm1WYWx1ZSA9IDE2LCAgICAvKiBO
b3QgaW1wbGVtZW50ZWQgaW4gV2ViS2l0ICovCi0KLSAgTlBQVnBsdWdpblVybFJlcXVlc3RzRGlz
cGxheWVkQm9vbCA9IDE3LCAvKiBOb3QgaW1wbGVtZW50ZWQgaW4gV2ViS2l0ICovCi0KLSAgLyog
Q2hlY2tzIGlmIHRoZSBwbHVnaW4gaXMgaW50ZXJlc3RlZCBpbiByZWNlaXZpbmcgdGhlIGh0dHAg
Ym9keSBvZgotICAgKiBhbGwgaHR0cCByZXF1ZXN0cyAoaW5jbHVkaW5nIGZhaWxlZCBvbmVzLCBo
dHRwIHN0YXR1cyAhPSAyMDApLgotICAgKi8KLSAgTlBQVnBsdWdpbldhbnRzQWxsTmV0d29ya1N0
cmVhbXMgPSAxOCwKLQotICAvKiBCcm93c2VycyBjYW4gcmV0cmlldmUgYSBuYXRpdmUgQVRLIGFj
Y2Vzc2liaWxpdHkgcGx1ZyBJRCB2aWEgdGhpcyB2YXJpYWJsZS4gKi8KLSAgTlBQVnBsdWdpbk5h
dGl2ZUFjY2Vzc2libGVBdGtQbHVnSWQgPSAxOSwKLQotICAvKiBDaGVja3MgdG8gc2VlIGlmIHRo
ZSBwbHVnLWluIHdvdWxkIGxpa2UgdGhlIGJyb3dzZXIgdG8gbG9hZCB0aGUgInNyYyIgYXR0cmli
dXRlLiAqLwotICBOUFBWcGx1Z2luQ2FuY2VsU3JjU3RyZWFtID0gMjAKLQotI2lmIGRlZmluZWQo
WFBfTUFDT1NYKQotICAvKiBVc2VkIGZvciBuZWdvdGlhdGluZyBkcmF3aW5nIG1vZGVscyAqLwot
ICAsIE5QUFZwbHVnaW5EcmF3aW5nTW9kZWwgPSAxMDAwCi0gIC8qIFVzZWQgZm9yIG5lZ290aWF0
aW5nIGV2ZW50IG1vZGVscyAqLwotICAsIE5QUFZwbHVnaW5FdmVudE1vZGVsID0gMTAwMQotICAv
KiBJbiB0aGUgTlBEcmF3aW5nTW9kZWxDb3JlQW5pbWF0aW9uIGRyYXdpbmcgbW9kZWwsIHRoZSBi
cm93c2VyIGFza3MgdGhlIHBsdWctaW4gZm9yIGEgQ29yZSBBbmltYXRpb24gbGF5ZXIuICovCi0g
ICwgTlBQVnBsdWdpbkNvcmVBbmltYXRpb25MYXllciA9IDEwMDMKLSNlbmRpZgotCi0gIC8qIFVz
ZWQgZm9yIGZpZ3VyaW5nIG91dCB3aGV0aGVyIGEgcGx1Zy1pbiBpcyBwbGF5aW5nIGF1ZGlvLiAq
LwotICAsIE5QUFZwbHVnaW5Jc1BsYXlpbmdBdWRpbyA9IDQwMDAKLQotfSBOUFBWYXJpYWJsZTsK
LQotLyoKLSAqIExpc3Qgb2YgdmFyaWFibGUgbmFtZXMgZm9yIHdoaWNoIE5QTl9HZXRWYWx1ZSBz
aG91bGQgYmUgaW1wbGVtZW50ZWQuCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIE5QTlZ4RGlzcGxh
eSA9IDEsCi0gIE5QTlZ4dEFwcENvbnRleHQsCi0gIE5QTlZuZXRzY2FwZVdpbmRvdywKLSAgTlBO
VmphdmFzY3JpcHRFbmFibGVkQm9vbCwKLSAgTlBOVmFzZEVuYWJsZWRCb29sLAotICBOUE5WaXNP
ZmZsaW5lQm9vbCwKLQotICBOUE5Wc2VydmljZU1hbmFnZXIgPSAoMTAgfCBOUF9BQklfTUFTSyks
ICAvKiBOb3QgaW1wbGVtZW50ZWQgaW4gV2ViS2l0ICovCi0gIE5QTlZET01FbGVtZW50ICAgICA9
ICgxMSB8IE5QX0FCSV9NQVNLKSwgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBXZWJLaXQgKi8KLSAg
TlBOVkRPTVdpbmRvdyAgICAgID0gKDEyIHwgTlBfQUJJX01BU0spLCAgLyogTm90IGltcGxlbWVu
dGVkIGluIFdlYktpdCAqLwotICBOUE5WVG9vbGtpdCAgICAgICAgPSAoMTMgfCBOUF9BQklfTUFT
SyksICAvKiBOb3QgaW1wbGVtZW50ZWQgaW4gV2ViS2l0ICovCi0gIE5QTlZTdXBwb3J0c1hFbWJl
ZEJvb2wgPSAxNCwgICAgICAgICAgICAgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBXZWJLaXQgKi8K
LQotICAvKiBHZXQgdGhlIE5QT2JqZWN0IHdyYXBwZXIgZm9yIHRoZSBicm93c2VyIHdpbmRvdy4g
Ki8KLSAgTlBOVldpbmRvd05QT2JqZWN0ID0gMTUsCi0KLSAgLyogR2V0IHRoZSBOUE9iamVjdCB3
cmFwcGVyIGZvciB0aGUgcGx1Z2lucyBET00gZWxlbWVudC4gKi8KLSAgTlBOVlBsdWdpbkVsZW1l
bnROUE9iamVjdCA9IDE2LAotCi0gIE5QTlZTdXBwb3J0c1dpbmRvd2xlc3MgPSAxNywKLQotICBO
UE5WcHJpdmF0ZU1vZGVCb29sID0gMTgsCi0KLSAgTlBOVnN1cHBvcnRzQWR2YW5jZWRLZXlIYW5k
bGluZyA9IDIxCi0KLSNpZiBkZWZpbmVkKFhQX01BQ09TWCkKLSAgLyogVXNlZCBmb3IgbmVnb3Rp
YXRpbmcgZHJhd2luZyBtb2RlbHMgKi8KLSAgLCBOUE5WcGx1Z2luRHJhd2luZ01vZGVsID0gMTAw
MAotICAsIE5QTlZjb250ZW50c1NjYWxlRmFjdG9yID0gMTAwMQotI2lmbmRlZiBOUF9OT19RVUlD
S0RSQVcKLSAgLCBOUE5Wc3VwcG9ydHNRdWlja0RyYXdCb29sID0gMjAwMAotI2VuZGlmCi0gICwg
TlBOVnN1cHBvcnRzQ29yZUdyYXBoaWNzQm9vbCA9IDIwMDEKLSAgLCBOUE5Wc3VwcG9ydHNPcGVu
R0xCb29sID0gMjAwMgotICAsIE5QTlZzdXBwb3J0c0NvcmVBbmltYXRpb25Cb29sID0gMjAwMwot
I2lmbmRlZiBOUF9OT19DQVJCT04KLSAgLCBOUE5Wc3VwcG9ydHNDYXJib25Cb29sID0gMzAwMCAv
KiBUUlVFIGlmIHRoZSBicm93c2VyIHN1cHBvcnRzIHRoZSBDYXJib24gZXZlbnQgbW9kZWwgKi8K
LSNlbmRpZgotICAsIE5QTlZzdXBwb3J0c0NvY29hQm9vbCA9IDMwMDEgLyogVFJVRSBpZiB0aGUg
YnJvd3NlciBzdXBwb3J0cyB0aGUgQ29jb2EgZXZlbnQgbW9kZWwgKi8KLSAgLCBOUE5Wc3VwcG9y
dHNVcGRhdGVkQ29jb2FUZXh0SW5wdXRCb29sID0gMzAwMiAvKiBUUlVFIGlmIHRoZSBicm93c2Vy
IHN1cHBvcnRzIHRoZSB1cGRhdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ29jb2EgdGV4dCBpbnB1dCBzcGVjaWZpY2F0aW9uLiAqLwotICAs
IE5QTlZzdXBwb3J0c0NvbXBvc2l0aW5nQ29yZUFuaW1hdGlvblBsdWdpbnNCb29sID0gNzQ2NTYg
LyogVFJVRSBpZiB0aGUgYnJvd3NlciBzdXBwb3J0cwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0EgbW9kZWwgY29tcG9zaXRp
bmcgKi8KLSNlbmRpZiAvKiBYUF9NQUNPU1ggKi8KLQotICAsIE5QTlZtdXRlQXVkaW9Cb29sID0g
NDAwMAotCi19IE5QTlZhcmlhYmxlOwotCi10eXBlZGVmIGVudW0gewotICBOUE5VUkxWQ29va2ll
ID0gNTAxLAotICBOUE5VUkxWUHJveHkKLX0gTlBOVVJMVmFyaWFibGU7Ci0KLS8qCi0gKiBUaGUg
dHlwZSBvZiBUb29sa2l0IHRoZSB3aWRnZXRzIHVzZQotICovCi10eXBlZGVmIGVudW0gewotICBO
UE5WR3RrMTIgPSAxLAotICBOUE5WR3RrMgotfSBOUE5Ub29sa2l0VHlwZTsKLQotLyoKLSAqIFRo
ZSB0eXBlIG9mIGEgTlBXaW5kb3cgLSBpdCBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgdGhlIGRhdGEg
c3RydWN0dXJlCi0gKiByZXR1cm5lZCBpbiB0aGUgd2luZG93IGZpZWxkLgotICovCi10eXBlZGVm
IGVudW0gewotICBOUFdpbmRvd1R5cGVXaW5kb3cgPSAxLAotICBOUFdpbmRvd1R5cGVEcmF3YWJs
ZQotfSBOUFdpbmRvd1R5cGU7Ci0KLXR5cGVkZWYgc3RydWN0IF9OUFdpbmRvdwotewotICB2b2lk
KiB3aW5kb3c7ICAvKiBQbGF0Zm9ybSBzcGVjaWZpYyB3aW5kb3cgaGFuZGxlICovCi0gICAgICAg
ICAgICAgICAgIC8qIE9TLzI6IHggLSBQb3NpdGlvbiBvZiBib3R0b20gbGVmdCBjb3JuZXIgKi8K
LSAgICAgICAgICAgICAgICAgLyogT1MvMjogeSAtIHJlbGF0aXZlIHRvIHZpc2libGUgbmV0c2Nh
cGUgd2luZG93ICovCi0gIGludDMyX3QgIHg7ICAgICAgLyogUG9zaXRpb24gb2YgdG9wIGxlZnQg
Y29ybmVyIHJlbGF0aXZlICovCi0gIGludDMyX3QgIHk7ICAgICAgLyogdG8gYSBuZXRzY2FwZSBw
YWdlLiAqLwotICB1aW50MzJfdCB3aWR0aDsgIC8qIE1heGltdW0gd2luZG93IHNpemUgKi8KLSAg
dWludDMyX3QgaGVpZ2h0OwotICBOUFJlY3QgICBjbGlwUmVjdDsgLyogQ2xpcHBpbmcgcmVjdGFu
Z2xlIGluIHBvcnQgY29vcmRpbmF0ZXMgKi8KLSNpZiBkZWZpbmVkKFhQX1VOSVgpCi0gIHZvaWQg
KiB3c19pbmZvOyAvKiBQbGF0Zm9ybS1kZXBlbmRlbnQgYWRkaXRvbmFsIGRhdGEgKi8KLSNlbmRp
ZiAvKiBYUF9VTklYICovCi0gIE5QV2luZG93VHlwZSB0eXBlOyAvKiBJcyB0aGlzIGEgd2luZG93
IG9yIGEgZHJhd2FibGU/ICovCi19IE5QV2luZG93OwotCi10eXBlZGVmIHN0cnVjdCBfTlBGdWxs
UHJpbnQKLXsKLSAgTlBCb29sIHBsdWdpblByaW50ZWQ7LyogU2V0IFRSVUUgaWYgcGx1Z2luIGhh
bmRsZWQgZnVsbHNjcmVlbiBwcmludGluZyAqLwotICBOUEJvb2wgcHJpbnRPbmU7ICAgICAvKiBU
UlVFIGlmIHBsdWdpbiBzaG91bGQgcHJpbnQgb25lIGNvcHkgdG8gZGVmYXVsdAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcmludGVyICovCi0gIHZvaWQqIHBsYXRmb3JtUHJpbnQ7IC8qIFBs
YXRmb3JtLXNwZWNpZmljIHByaW50aW5nIGluZm8gKi8KLX0gTlBGdWxsUHJpbnQ7Ci0KLXR5cGVk
ZWYgc3RydWN0IF9OUEVtYmVkUHJpbnQKLXsKLSAgTlBXaW5kb3cgd2luZG93OwotICB2b2lkKiBw
bGF0Zm9ybVByaW50OyAvKiBQbGF0Zm9ybS1zcGVjaWZpYyBwcmludGluZyBpbmZvICovCi19IE5Q
RW1iZWRQcmludDsKLQotdHlwZWRlZiBzdHJ1Y3QgX05QUHJpbnQKLXsKLSAgdWludDE2X3QgbW9k
ZTsgICAgICAgICAgICAgICAvKiBOUF9GVUxMIG9yIE5QX0VNQkVEICovCi0gIHVuaW9uCi0gIHsK
LSAgICBOUEZ1bGxQcmludCBmdWxsUHJpbnQ7ICAgLyogaWYgbW9kZSBpcyBOUF9GVUxMICovCi0g
ICAgTlBFbWJlZFByaW50IGVtYmVkUHJpbnQ7IC8qIGlmIG1vZGUgaXMgTlBfRU1CRUQgKi8KLSAg
fSBwcmludDsKLX0gTlBQcmludDsKLQotI2lmIGRlZmluZWQoWFBfTUFDT1NYKQotI2lmbmRlZiBO
UF9OT19DQVJCT04KLXR5cGVkZWYgRXZlbnRSZWNvcmQgTlBFdmVudDsKLSNlbHNlCi10eXBlZGVm
IHZvaWQqICBOUEV2ZW50OwotI2VuZGlmCi0jZWxpZiBkZWZpbmVkKFhQX1dJTikKLXR5cGVkZWYg
c3RydWN0IF9OUEV2ZW50Ci17Ci0gIHVpbnQxNl90IGV2ZW50OwotICB1aW50cHRyX3Qgd1BhcmFt
OwotICB1aW50cHRyX3QgbFBhcmFtOwotfSBOUEV2ZW50OwotI2VsaWYgZGVmaW5lZChYUF9PUzIp
Ci10eXBlZGVmIHN0cnVjdCBfTlBFdmVudAotewotICB1aW50MzJfdCBldmVudDsKLSAgdWludDMy
X3Qgd1BhcmFtOwotICB1aW50MzJfdCBsUGFyYW07Ci19IE5QRXZlbnQ7Ci0jZWxpZiBkZWZpbmVk
KFhQX1VOSVgpICYmIGRlZmluZWQoTU9aX1gxMSkKLXR5cGVkZWYgWEV2ZW50IE5QRXZlbnQ7Ci0j
ZWxzZQotdHlwZWRlZiB2b2lkKiAgTlBFdmVudDsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChYUF9N
QUNPU1gpCi10eXBlZGVmIHZvaWQqIE5QUmVnaW9uOwotI2lmbmRlZiBOUF9OT19RVUlDS0RSQVcK
LXR5cGVkZWYgUmduSGFuZGxlIE5QUURSZWdpb247Ci0jZW5kaWYKLXR5cGVkZWYgQ0dQYXRoUmVm
IE5QQ0dSZWdpb247Ci0jZWxpZiBkZWZpbmVkKFhQX1dJTikKLXR5cGVkZWYgSFJHTiBOUFJlZ2lv
bjsKLSNlbGlmIGRlZmluZWQoWFBfVU5JWCkgJiYgZGVmaW5lZChNT1pfWDExKQotdHlwZWRlZiBS
ZWdpb24gTlBSZWdpb247Ci0jZWxzZQotdHlwZWRlZiB2b2lkICpOUFJlZ2lvbjsKLSNlbmRpZgot
Ci10eXBlZGVmIHN0cnVjdCBfTlBOU1N0cmluZyBOUE5TU3RyaW5nOwotdHlwZWRlZiBzdHJ1Y3Qg
X05QTlNXaW5kb3cgTlBOU1dpbmRvdzsKLXR5cGVkZWYgc3RydWN0IF9OUE5TTWVudSAgIE5QTlNN
ZW51OwotCi0jaWYgZGVmaW5lZChYUF9NQUNPU1gpCi10eXBlZGVmIE5QTlNNZW51IE5QTWVudTsK
LSNlbHNlCi10eXBlZGVmIHZvaWQgKk5QTWVudTsKLSNlbmRpZgotCi10eXBlZGVmIGVudW0gewot
ICBOUENvb3JkaW5hdGVTcGFjZVBsdWdpbiA9IDEsCi0gIE5QQ29vcmRpbmF0ZVNwYWNlV2luZG93
LAotICBOUENvb3JkaW5hdGVTcGFjZUZsaXBwZWRXaW5kb3csCi0gIE5QQ29vcmRpbmF0ZVNwYWNl
U2NyZWVuLAotICBOUENvb3JkaW5hdGVTcGFjZUZsaXBwZWRTY3JlZW4KLX0gTlBDb29yZGluYXRl
U3BhY2U7Ci0KLSNpZiBkZWZpbmVkKFhQX01BQ09TWCkKLQotI2lmbmRlZiBOUF9OT19RVUlDS0RS
QVcKLXR5cGVkZWYgc3RydWN0IE5QX1BvcnQKLXsKLSAgQ0dyYWZQdHIgcG9ydDsKLSAgaW50MzJf
dCBwb3J0eDsgLyogcG9zaXRpb24gaW5zaWRlIHRoZSB0b3Btb3N0IHdpbmRvdyAqLwotICBpbnQz
Ml90IHBvcnR5OwotfSBOUF9Qb3J0OwotI2VuZGlmIC8qIE5QX05PX1FVSUNLRFJBVyAqLwotCi0v
KgotICogTlBfQ0dDb250ZXh0IGlzIHRoZSB0eXBlIG9mIHRoZSBOUFdpbmRvdydzICd3aW5kb3cn
IHdoZW4gdGhlIHBsdWdpbiBzcGVjaWZpZXMgTlBEcmF3aW5nTW9kZWxDb3JlR3JhcGhpY3MKLSAq
IGFzIGl0cyBkcmF3aW5nIG1vZGVsLgotICovCi0KLXR5cGVkZWYgc3RydWN0IE5QX0NHQ29udGV4
dAotewotICBDR0NvbnRleHRSZWYgY29udGV4dDsKLSNpZmRlZiBOUF9OT19DQVJCT04KLSAgTlBO
U1dpbmRvdyAqd2luZG93OwotI2Vsc2UKLSAgdm9pZCAqd2luZG93OyAvKiBBIFdpbmRvd1JlZiBv
ciBOVUxMIGZvciB0aGUgQ29jb2EgZXZlbnQgbW9kZWwuICovCi0jZW5kaWYKLX0gTlBfQ0dDb250
ZXh0OwotCi10eXBlZGVmIGVudW0gewotICBOUENvY29hRXZlbnREcmF3UmVjdCA9IDEsCi0gIE5Q
Q29jb2FFdmVudE1vdXNlRG93biwKLSAgTlBDb2NvYUV2ZW50TW91c2VVcCwKLSAgTlBDb2NvYUV2
ZW50TW91c2VNb3ZlZCwKLSAgTlBDb2NvYUV2ZW50TW91c2VFbnRlcmVkLAotICBOUENvY29hRXZl
bnRNb3VzZUV4aXRlZCwKLSAgTlBDb2NvYUV2ZW50TW91c2VEcmFnZ2VkLAotICBOUENvY29hRXZl
bnRLZXlEb3duLAotICBOUENvY29hRXZlbnRLZXlVcCwKLSAgTlBDb2NvYUV2ZW50RmxhZ3NDaGFu
Z2VkLAotICBOUENvY29hRXZlbnRGb2N1c0NoYW5nZWQsCi0gIE5QQ29jb2FFdmVudFdpbmRvd0Zv
Y3VzQ2hhbmdlZCwKLSAgTlBDb2NvYUV2ZW50U2Nyb2xsV2hlZWwsCi0gIE5QQ29jb2FFdmVudFRl
eHRJbnB1dAotfSBOUENvY29hRXZlbnRUeXBlOwotCi10eXBlZGVmIHN0cnVjdCBfTlBDb2NvYUV2
ZW50IHsKLSAgTlBDb2NvYUV2ZW50VHlwZSB0eXBlOwotICB1aW50MzJfdCB2ZXJzaW9uOwotICB1
bmlvbiB7Ci0gICAgc3RydWN0IHsKLSAgICAgIHVpbnQzMl90IG1vZGlmaWVyRmxhZ3M7Ci0gICAg
ICBkb3VibGUgICBwbHVnaW5YOwotICAgICAgZG91YmxlICAgcGx1Z2luWTsKLSAgICAgIGludDMy
X3QgIGJ1dHRvbk51bWJlcjsKLSAgICAgIGludDMyX3QgIGNsaWNrQ291bnQ7Ci0gICAgICBkb3Vi
bGUgICBkZWx0YVg7Ci0gICAgICBkb3VibGUgICBkZWx0YVk7Ci0gICAgICBkb3VibGUgICBkZWx0
YVo7Ci0gICAgfSBtb3VzZTsKLSAgICBzdHJ1Y3QgewotICAgICAgdWludDMyX3QgICAgbW9kaWZp
ZXJGbGFnczsKLSAgICAgIE5QTlNTdHJpbmcgKmNoYXJhY3RlcnM7Ci0gICAgICBOUE5TU3RyaW5n
ICpjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnM7Ci0gICAgICBOUEJvb2wgICAgICBpc0FSZXBl
YXQ7Ci0gICAgICB1aW50MTZfdCAgICBrZXlDb2RlOwotICAgIH0ga2V5OwotICAgIHN0cnVjdCB7
Ci0gICAgICBDR0NvbnRleHRSZWYgY29udGV4dDsKLSAgICAgIGRvdWJsZSB4OwotICAgICAgZG91
YmxlIHk7Ci0gICAgICBkb3VibGUgd2lkdGg7Ci0gICAgICBkb3VibGUgaGVpZ2h0OwotICAgIH0g
ZHJhdzsKLSAgICBzdHJ1Y3QgewotICAgICAgTlBCb29sIGhhc0ZvY3VzOwotICAgIH0gZm9jdXM7
Ci0gICAgc3RydWN0IHsKLSAgICAgIE5QTlNTdHJpbmcgKnRleHQ7Ci0gICAgfSB0ZXh0OwotICB9
IGRhdGE7Ci19IE5QQ29jb2FFdmVudDsKLQotI2lmbmRlZiBOUF9OT19DQVJCT04KLS8qIE5vbi1z
dGFuZGFyZCBldmVudCB0eXBlcyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gSGFuZGxlRXZlbnQgKi8K
LWVudW0gTlBFdmVudFR5cGUgewotICBOUEV2ZW50VHlwZV9HZXRGb2N1c0V2ZW50ID0gKG9zRXZ0
ICsgMTYpLAotICBOUEV2ZW50VHlwZV9Mb3NlRm9jdXNFdmVudCwKLSAgTlBFdmVudFR5cGVfQWRq
dXN0Q3Vyc29yRXZlbnQsCi0gIE5QRXZlbnRUeXBlX01lbnVDb21tYW5kRXZlbnQsCi0gIE5QRXZl
bnRUeXBlX0NsaXBwaW5nQ2hhbmdlZEV2ZW50LAotICBOUEV2ZW50VHlwZV9TY3JvbGxpbmdCZWdp
bnNFdmVudCA9IDEwMDAsCi0gIE5QRXZlbnRUeXBlX1Njcm9sbGluZ0VuZHNFdmVudAotfTsKLSNl
bmRpZiAvKiBOUF9OT19DQVJCT04gKi8KLQotI2VuZGlmIC8qIFhQX01BQ09TWCAqLwotCi0vKgot
ICogVmFsdWVzIGZvciBtb2RlIHBhc3NlZCB0byBOUFBfTmV3OgotICovCi0jZGVmaW5lIE5QX0VN
QkVEIDEKLSNkZWZpbmUgTlBfRlVMTCAgMgotCi0vKgotICogVmFsdWVzIGZvciBzdHJlYW0gdHlw
ZSBwYXNzZWQgdG8gTlBQX05ld1N0cmVhbToKLSAqLwotI2RlZmluZSBOUF9OT1JNQUwgICAgIDEK
LSNkZWZpbmUgTlBfU0VFSyAgICAgICAyCi0jZGVmaW5lIE5QX0FTRklMRSAgICAgMwotI2RlZmlu
ZSBOUF9BU0ZJTEVPTkxZIDQKLQotI2RlZmluZSBOUF9NQVhSRUFEWSAoKCh1bnNpZ25lZCkofjAp
PDwxKT4+MSkKLQotLyoKLSAqIEZsYWdzIGZvciBOUFBfQ2xlYXJTaXRlRGF0YS4KLSAqLwotI2Rl
ZmluZSBOUF9DTEVBUl9BTEwgICAwCi0jZGVmaW5lIE5QX0NMRUFSX0NBQ0hFICgxIDw8IDApCi0K
LSNpZiAhZGVmaW5lZChfX0xQNjRfXykKLSNpZiBkZWZpbmVkKFhQX01BQ09TWCkKLSNwcmFnbWEg
b3B0aW9ucyBhbGlnbj1yZXNldAotI2VuZGlmCi0jZW5kaWYgLyogX19MUDY0X18gKi8KLQotLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KLS8qICAgICAgIEVycm9yIGFuZCBSZWFzb24gQ29kZSBkZWZpbml0aW9u
cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0v
KgotICogVmFsdWVzIG9mIHR5cGUgTlBFcnJvcjoKLSAqLwotI2RlZmluZSBOUEVSUl9CQVNFICAg
ICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTlBFUlJfTk9fRVJST1IgICAgICAgICAg
ICAgICAgICAgIChOUEVSUl9CQVNFICsgMCkKLSNkZWZpbmUgTlBFUlJfR0VORVJJQ19FUlJPUiAg
ICAgICAgICAgICAgIChOUEVSUl9CQVNFICsgMSkKLSNkZWZpbmUgTlBFUlJfSU5WQUxJRF9JTlNU
QU5DRV9FUlJPUiAgICAgIChOUEVSUl9CQVNFICsgMikKLSNkZWZpbmUgTlBFUlJfSU5WQUxJRF9G
VU5DVEFCTEVfRVJST1IgICAgIChOUEVSUl9CQVNFICsgMykKLSNkZWZpbmUgTlBFUlJfTU9EVUxF
X0xPQURfRkFJTEVEX0VSUk9SICAgIChOUEVSUl9CQVNFICsgNCkKLSNkZWZpbmUgTlBFUlJfT1VU
X09GX01FTU9SWV9FUlJPUiAgICAgICAgIChOUEVSUl9CQVNFICsgNSkKLSNkZWZpbmUgTlBFUlJf
SU5WQUxJRF9QTFVHSU5fRVJST1IgICAgICAgIChOUEVSUl9CQVNFICsgNikKLSNkZWZpbmUgTlBF
UlJfSU5WQUxJRF9QTFVHSU5fRElSX0VSUk9SICAgIChOUEVSUl9CQVNFICsgNykKLSNkZWZpbmUg
TlBFUlJfSU5DT01QQVRJQkxFX1ZFUlNJT05fRVJST1IgIChOUEVSUl9CQVNFICsgOCkKLSNkZWZp
bmUgTlBFUlJfSU5WQUxJRF9QQVJBTSAgICAgICAgICAgICAgIChOUEVSUl9CQVNFICsgOSkKLSNk
ZWZpbmUgTlBFUlJfSU5WQUxJRF9VUkwgICAgICAgICAgICAgICAgIChOUEVSUl9CQVNFICsgMTAp
Ci0jZGVmaW5lIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EICAgICAgICAgICAgICAoTlBFUlJfQkFTRSAr
IDExKQotI2RlZmluZSBOUEVSUl9OT19EQVRBICAgICAgICAgICAgICAgICAgICAgKE5QRVJSX0JB
U0UgKyAxMikKLSNkZWZpbmUgTlBFUlJfU1RSRUFNX05PVF9TRUVLQUJMRSAgICAgICAgIChOUEVS
Ul9CQVNFICsgMTMpCi0KLS8qCi0gKiBWYWx1ZXMgb2YgdHlwZSBOUFJlYXNvbjoKLSAqLwotI2Rl
ZmluZSBOUFJFU19CQVNFICAgICAgICAgIDAKLSNkZWZpbmUgTlBSRVNfRE9ORSAgICAgICAgIChO
UFJFU19CQVNFICsgMCkKLSNkZWZpbmUgTlBSRVNfTkVUV09SS19FUlIgIChOUFJFU19CQVNFICsg
MSkKLSNkZWZpbmUgTlBSRVNfVVNFUl9CUkVBSyAgIChOUFJFU19CQVNFICsgMikKLQotLyoKLSAq
IERvbid0IHVzZSB0aGVzZSBvYnNvbGV0ZSBlcnJvciBjb2RlcyBhbnkgbW9yZS4KLSAqLwotI2Rl
ZmluZSBOUF9OT0VSUiAgTlBfTk9FUlJfaXNfb2Jzb2xldGVfdXNlX05QRVJSX05PX0VSUk9SCi0j
ZGVmaW5lIE5QX0VJTlZBTCBOUF9FSU5WQUxfaXNfb2Jzb2xldGVfdXNlX05QRVJSX0dFTkVSSUNf
RVJST1IKLSNkZWZpbmUgTlBfRUFCT1JUIE5QX0VBQk9SVF9pc19vYnNvbGV0ZV91c2VfTlBSRVNf
VVNFUl9CUkVBSwotCi0vKgotICogVmVyc2lvbiBmZWF0dXJlIGluZm9ybWF0aW9uCi0gKi8KLSNk
ZWZpbmUgTlBWRVJTX0hBU19TVFJFQU1PVVRQVVQgICAgICAgICAgICAgOAotI2RlZmluZSBOUFZF
UlNfSEFTX05PVElGSUNBVElPTiAgICAgICAgICAgICA5Ci0jZGVmaW5lIE5QVkVSU19IQVNfTElW
RUNPTk5FQ1QgICAgICAgICAgICAgIDkKLSNkZWZpbmUgTlBWRVJTX1dJTjE2X0hBU19MSVZFQ09O
TkVDVCAgICAgICAgOQotI2RlZmluZSBOUFZFUlNfNjhLX0hBU19MSVZFQ09OTkVDVCAgICAgICAg
ICAxMQotI2RlZmluZSBOUFZFUlNfSEFTX1dJTkRPV0xFU1MgICAgICAgICAgICAgICAxMQotI2Rl
ZmluZSBOUFZFUlNfSEFTX1hQQ09OTkVDVF9TQ1JJUFRJTkcgICAgICAxMyAgLyogTm90IGltcGxl
bWVudGVkIGluIFdlYktpdCAqLwotI2RlZmluZSBOUFZFUlNfSEFTX05QUlVOVElNRV9TQ1JJUFRJ
TkcgICAgICAxNAotI2RlZmluZSBOUFZFUlNfSEFTX0ZPUk1fVkFMVUVTICAgICAgICAgICAgICAx
NSAgLyogTm90IGltcGxlbWVudGVkIGluIFdlYktpdDsgc2VlIGJ1ZyAxMzA2MSAqLwotI2RlZmlu
ZSBOUFZFUlNfSEFTX1BPUFVQU19FTkFCTEVEX1NUQVRFICAgICAxNiAgLyogTm90IGltcGxlbWVu
dGVkIGluIFdlYktpdCAqLwotI2RlZmluZSBOUFZFUlNfSEFTX1JFU1BPTlNFX0hFQURFUlMgICAg
ICAgICAxNwotI2RlZmluZSBOUFZFUlNfSEFTX05QT0JKRUNUX0VOVU0gICAgICAgICAgICAxOAot
I2RlZmluZSBOUFZFUlNfSEFTX1BMVUdJTl9USFJFQURfQVNZTkNfQ0FMTCAxOQotI2RlZmluZSBO
UFZFUlNfSEFTX0FMTF9ORVRXT1JLX1NUUkVBTVMgICAgICAyMAotI2RlZmluZSBOUFZFUlNfSEFT
X1VSTF9BTkRfQVVUSF9JTkZPICAgICAgICAyMQotI2RlZmluZSBOUFZFUlNfSEFTX1BSSVZBVEVf
TU9ERSAgICAgICAgICAgICAyMgotI2RlZmluZSBOUFZFUlNfTUFDT1NYX0hBU19FVkVOVF9NT0RF
TFMgICAgICAyMwotI2RlZmluZSBOUFZFUlNfSEFTX0NBTkNFTF9TUkNfU1RSRUFNICAgICAgICAy
NAotI2RlZmluZSBOUFZFUlNfSEFTX0FEVkFOQ0VEX0tFWV9IQU5ETElORyAgICAyNQotI2RlZmlu
ZSBOUFZFUlNfSEFTX1VSTF9SRURJUkVDVF9IQU5ETElORyAgICAyNgotI2RlZmluZSBOUFZFUlNf
SEFTX0NMRUFSX1NJVEVfREFUQSAgICAgICAgICAyNwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyog
ICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBQcm90b3R5cGVzICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZiBkZWZpbmVkKF9fT1MyX18p
Ci0jZGVmaW5lIE5QX0xPQUREUyBfU3lzdGVtCi0jZWxzZQotI2RlZmluZSBOUF9MT0FERFMKLSNl
bmRpZgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLS8qIE5Q
UF8qIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgYnkgdGhlIHBsdWdpbiBhbmQgY2FsbGVkIGJ5IHRo
ZSBuYXZpZ2F0b3IuICovCi0KLSNpZiBkZWZpbmVkKFhQX1VOSVgpCi1jb25zdCBjaGFyKiBOUFBf
R2V0TUlNRURlc2NyaXB0aW9uKHZvaWQpOwotI2VuZGlmCi0KLU5QRXJyb3IgTlBfTE9BRERTIE5Q
UF9Jbml0aWFsaXplKHZvaWQpOwotdm9pZCAgICBOUF9MT0FERFMgTlBQX1NodXRkb3duKHZvaWQp
OwotTlBFcnJvciBOUF9MT0FERFMgTlBQX05ldyhOUE1JTUVUeXBlIHBsdWdpblR5cGUsIE5QUCBp
bnN0YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgbW9kZSwgaW50MTZf
dCBhcmdjLCBjaGFyKiBhcmduW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGFy
Z3ZbXSwgTlBTYXZlZERhdGEqIHNhdmVkKTsKLU5QRXJyb3IgTlBfTE9BRERTIE5QUF9EZXN0cm95
KE5QUCBpbnN0YW5jZSwgTlBTYXZlZERhdGEqKiBzYXZlKTsKLU5QRXJyb3IgTlBfTE9BRERTIE5Q
UF9TZXRXaW5kb3coTlBQIGluc3RhbmNlLCBOUFdpbmRvdyogd2luZG93KTsKLU5QRXJyb3IgTlBf
TE9BRERTIE5QUF9OZXdTdHJlYW0oTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5cGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5QU3RyZWFtKiBzdHJlYW0sIE5QQm9vbCBzZWVr
YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QqIHN0eXBlKTsK
LU5QRXJyb3IgTlBfTE9BRERTIE5QUF9EZXN0cm95U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBTdHJl
YW0qIHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5QUmVhc29u
IHJlYXNvbik7Ci1pbnQzMl90IE5QX0xPQUREUyBOUFBfV3JpdGVSZWFkeShOUFAgaW5zdGFuY2Us
IE5QU3RyZWFtKiBzdHJlYW0pOwotaW50MzJfdCBOUF9MT0FERFMgTlBQX1dyaXRlKE5QUCBpbnN0
YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzJfdCBvZmZzZXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZlcik7Ci12b2lkICAgIE5QX0xPQURE
UyBOUFBfU3RyZWFtQXNGaWxlKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZm5hbWUpOwotdm9pZCAg
ICBOUF9MT0FERFMgTlBQX1ByaW50KE5QUCBpbnN0YW5jZSwgTlBQcmludCogcGxhdGZvcm1Qcmlu
dCk7Ci1pbnQxNl90IE5QX0xPQUREUyBOUFBfSGFuZGxlRXZlbnQoTlBQIGluc3RhbmNlLCB2b2lk
KiBldmVudCk7Ci12b2lkICAgIE5QX0xPQUREUyBOUFBfVVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwg
Y29uc3QgY2hhciogdXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUFJlYXNv
biByZWFzb24sIHZvaWQqIG5vdGlmeURhdGEpOwotanJlZiAgICBOUF9MT0FERFMgTlBQX0dldEph
dmFDbGFzcyh2b2lkKTsKLU5QRXJyb3IgTlBfTE9BRERTIE5QUF9HZXRWYWx1ZShOUFAgaW5zdGFu
Y2UsIE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkICp2YWx1ZSk7Ci1OUEVycm9yIE5QX0xPQURE
UyBOUFBfU2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAq
dmFsdWUpOwotTlBCb29sICBOUF9MT0FERFMgTlBQX0dvdEZvY3VzKE5QUCBpbnN0YW5jZSwgTlBG
b2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24pOwotdm9pZCAgICBOUF9MT0FERFMgTlBQX0xvc3RGb2N1
cyhOUFAgaW5zdGFuY2UpOwotdm9pZCAgICBOUF9MT0FERFMgTlBQX1VSTFJlZGlyZWN0Tm90aWZ5
KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBpbnQzMl90IHN0YXR1cywgdm9pZCogbm90
aWZ5RGF0YSk7Ci1OUEVycm9yIE5QX0xPQUREUyBOUFBfQ2xlYXJTaXRlRGF0YShjb25zdCBjaGFy
KiBzaXRlLCB1aW50NjRfdCBmbGFncywgdWludDY0X3QgbWF4QWdlKTsKLWNoYXIqKiAgTlBfTE9B
RERTIE5QUF9HZXRTaXRlc1dpdGhEYXRhKHZvaWQpOwotCi0vKiBOUE5fKiBmdW5jdGlvbnMgYXJl
IHByb3ZpZGVkIGJ5IHRoZSBuYXZpZ2F0b3IgYW5kIGNhbGxlZCBieSB0aGUgcGx1Z2luLiAqLwot
dm9pZCAgICAgICAgTlBfTE9BRERTIE5QTl9WZXJzaW9uKGludCogcGx1Z2luX21ham9yLCBpbnQq
IHBsdWdpbl9taW5vciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIG5l
dHNjYXBlX21ham9yLCBpbnQqIG5ldHNjYXBlX21pbm9yKTsKLU5QRXJyb3IgICAgIE5QX0xPQURE
UyBOUE5fR2V0VVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lk
KiBub3RpZnlEYXRhKTsKLU5QRXJyb3IgICAgIE5QX0xPQUREUyBOUE5fR2V0VVJMKE5QUCBpbnN0
YW5jZSwgY29uc3QgY2hhciogdXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogdGFyZ2V0KTsKLU5QRXJyb3IgICAgIE5QX0xPQUREUyBOUE5fUG9zdFVSTE5v
dGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBidWYsIE5Q
Qm9vbCBmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQq
IG5vdGlmeURhdGEpOwotTlBFcnJvciAgICAgTlBfTE9BRERTIE5QTl9Qb3N0VVJMKE5QUCBpbnN0
YW5jZSwgY29uc3QgY2hhciogdXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpOwotTlBFcnJvciAgICAg
TlBfTE9BRERTIE5QTl9SZXF1ZXN0UmVhZChOUFN0cmVhbSogc3RyZWFtLCBOUEJ5dGVSYW5nZSog
cmFuZ2VMaXN0KTsKLU5QRXJyb3IgICAgIE5QX0xPQUREUyBOUE5fTmV3U3RyZWFtKE5QUCBpbnN0
YW5jZSwgTlBNSU1FVHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVhbSk7Ci1pbnQzMl90ICAgICBO
UF9MT0FERFMgTlBOX1dyaXRlKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzJf
dCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGJ1ZmZlcik7Ci1O
UEVycm9yICAgICBOUF9MT0FERFMgTlBOX0Rlc3Ryb3lTdHJlYW0oTlBQIGluc3RhbmNlLCBOUFN0
cmVhbSogc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5Q
UmVhc29uIHJlYXNvbik7Ci12b2lkICAgICAgICBOUF9MT0FERFMgTlBOX1N0YXR1cyhOUFAgaW5z
dGFuY2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwotY29uc3QgY2hhciogTlBfTE9BRERTIE5QTl9V
c2VyQWdlbnQoTlBQIGluc3RhbmNlKTsKLXZvaWQqICAgICAgIE5QX0xPQUREUyBOUE5fTWVtQWxs
b2ModWludDMyX3Qgc2l6ZSk7Ci12b2lkICAgICAgICBOUF9MT0FERFMgTlBOX01lbUZyZWUodm9p
ZCogcHRyKTsKLXVpbnQzMl90ICAgIE5QX0xPQUREUyBOUE5fTWVtRmx1c2godWludDMyX3Qgc2l6
ZSk7Ci12b2lkICAgICAgICBOUF9MT0FERFMgTlBOX1JlbG9hZFBsdWdpbnMoTlBCb29sIHJlbG9h
ZFBhZ2VzKTsKLUpSSUVudiogICAgIE5QX0xPQUREUyBOUE5fR2V0SmF2YUVudih2b2lkKTsKLWpy
ZWYgICAgICAgIE5QX0xPQUREUyBOUE5fR2V0SmF2YVBlZXIoTlBQIGluc3RhbmNlKTsKLU5QRXJy
b3IgICAgIE5QX0xPQUREUyBOUE5fR2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2
YXJpYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdmFsdWUp
OwotTlBFcnJvciAgICAgTlBfTE9BRERTIE5QTl9TZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5QUFZh
cmlhYmxlIHZhcmlhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
ICp2YWx1ZSk7Ci12b2lkICAgICAgICBOUF9MT0FERFMgTlBOX0ludmFsaWRhdGVSZWN0KE5QUCBp
bnN0YW5jZSwgTlBSZWN0ICppbnZhbGlkUmVjdCk7Ci12b2lkICAgICAgICBOUF9MT0FERFMgTlBO
X0ludmFsaWRhdGVSZWdpb24oTlBQIGluc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5QUmVnaW9uIGludmFsaWRSZWdpb24pOwotdm9pZCAgICAgICAg
TlBfTE9BRERTIE5QTl9Gb3JjZVJlZHJhdyhOUFAgaW5zdGFuY2UpOwotdm9pZCAgICAgICAgTlBf
TE9BRERTIE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSwgTlBCb29sIGVu
YWJsZWQpOwotdm9pZCAgICAgICAgTlBfTE9BRERTIE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGUo
TlBQIGluc3RhbmNlKTsKLXZvaWQgICAgICAgIE5QX0xPQUREUyBOUE5fUGx1Z2luVGhyZWFkQXN5
bmNDYWxsKE5QUCBpbnN0YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKCpmdW5jKSAodm9pZCAqKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhKTsKLU5QRXJyb3IgICAg
IE5QX0xPQUREUyBOUE5fR2V0VmFsdWVGb3JVUkwoTlBQIGluc3RhbmNlLCBOUE5VUkxWYXJpYWJs
ZSB2YXJpYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqdXJsLCBjaGFyICoqdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQzMl90ICpsZW4pOwotTlBFcnJvciAgICAgTlBfTE9BRERTIE5QTl9T
ZXRWYWx1ZUZvclVSTChOUFAgaW5zdGFuY2UsIE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp1cmwsIGNv
bnN0IGNoYXIgKnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50MzJfdCBsZW4pOwotTlBFcnJvciAgICAgTlBfTE9BRERTIE5QTl9HZXRBdXRoZW50aWNh
dGlvbkluZm8oTlBQIGluc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHJvdG9jb2wsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0LCBpbnQzMl90IHBv
cnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICpzY2hlbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICpyZWFsbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKip1c2VybmFtZSwgdWludDMyX3QgKnVsZW4sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqcGFzc3dv
cmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCAqcGxlbik7Ci11aW50MzJfdCAgICBOUF9MT0FERFMgTlBOX1NjaGVkdWxlVGltZXIoTlBQ
IGluc3RhbmNlLCB1aW50MzJfdCBpbnRlcnZhbCwgTlBCb29sIHJlcGVhdCwgdm9pZCAoKnRpbWVy
RnVuYykoTlBQIG5wcCwgdWludDMyX3QgdGltZXJJRCkpOwotdm9pZCAgICAgICAgTlBfTE9BRERT
IE5QTl9VbnNjaGVkdWxlVGltZXIoTlBQIGluc3RhbmNlLCB1aW50MzJfdCB0aW1lcklEKTsKLU5Q
RXJyb3IgICAgIE5QX0xPQUREUyBOUE5fUG9wVXBDb250ZXh0TWVudShOUFAgaW5zdGFuY2UsIE5Q
TWVudSogbWVudSk7Ci1OUEJvb2wgICAgICBOUF9MT0FERFMgTlBOX0NvbnZlcnRQb2ludChOUFAg
aW5zdGFuY2UsIGRvdWJsZSBzb3VyY2VYLCBkb3VibGUgc291cmNlWSwgTlBDb29yZGluYXRlU3Bh
Y2Ugc291cmNlU3BhY2UsIGRvdWJsZSAqZGVzdFgsIGRvdWJsZSAqZGVzdFksIE5QQ29vcmRpbmF0
ZVNwYWNlIGRlc3RTcGFjZSk7Ci1OUEJvb2wgICAgICBOUF9MT0FERFMgTlBOX0hhbmRsZUV2ZW50
KE5QUCBpbnN0YW5jZSwgdm9pZCAqZXZlbnQsIE5QQm9vbCBoYW5kbGVkKTsKLU5QQm9vbCAgICAg
IE5QX0xPQUREUyBOUE5fVW5mb2N1c0luc3RhbmNlKE5QUCBpbnN0YW5jZSwgTlBGb2N1c0RpcmVj
dGlvbiBkaXJlY3Rpb24pOwotdm9pZCAgICAgICAgTlBfTE9BRERTIE5QTl9VUkxSZWRpcmVjdFJl
c3BvbnNlKE5QUCBpbnN0YW5jZSwgdm9pZCogbm90aWZ5RGF0YSwgTlBCb29sIGFsbG93KTsKLQot
I2lmZGVmIF9fY3BsdXNwbHVzCi19ICAvKiBlbmQgZXh0ZXJuICJDIiAqLwotI2VuZGlmCi0KLSNl
bmRpZiAvKiBSQ19JTlZPS0VEICovCi0jaWYgZGVmaW5lZChfX09TMl9fKQotI3ByYWdtYSBwYWNr
KCkKLSNlbmRpZgotCi0jZW5kaWYgLyogbnBhcGlfaF8gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvbnBmdW5jdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbnBm
dW5jdGlvbnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY1Zjc2YjBkZjU5MmZj
YzU2N2FiZjM1ZDVkZTVlNDZjNzgyYzJkMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL25wZnVuY3Rpb25zLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwyMjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLSNpZm5kZWYgTlBGVU5DVElPTlNfSAotI2RlZmluZSBOUEZVTkNU
SU9OU19ICi0KLQotI2luY2x1ZGUgIm5wcnVudGltZS5oIgotI2luY2x1ZGUgIm5wYXBpLmgiCi0K
LSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQo
WFBfV0lOKQotI2RlZmluZSBFWFBPUlRFRF9DQUxMQkFDSyhfdHlwZSwgX25hbWUpIF90eXBlIChf
X3N0ZGNhbGwgKiBfbmFtZSkKLSNlbHNlCi0jZGVmaW5lIEVYUE9SVEVEX0NBTExCQUNLKF90eXBl
LCBfbmFtZSkgX3R5cGUgKCogX25hbWUpCi0jZW5kaWYKLQotdHlwZWRlZiBOUEVycm9yICgqTlBO
X0dldFVSTE5vdGlmeVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25z
dCBjaGFyKiB3aW5kb3csIHZvaWQqIG5vdGlmeURhdGEpOwotdHlwZWRlZiBOUEVycm9yICgqTlBO
X1Bvc3RVUkxOb3RpZnlQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgY29u
c3QgY2hhciogd2luZG93LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZp
bGUsIHZvaWQqIG5vdGlmeURhdGEpOwotdHlwZWRlZiBOUEVycm9yICgqTlBOX1JlcXVlc3RSZWFk
UHJvY1B0cikoTlBTdHJlYW0qIHN0cmVhbSwgTlBCeXRlUmFuZ2UqIHJhbmdlTGlzdCk7Ci10eXBl
ZGVmIE5QRXJyb3IgKCpOUE5fTmV3U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUE1JTUVU
eXBlIHR5cGUsIGNvbnN0IGNoYXIqIHdpbmRvdywgTlBTdHJlYW0qKiBzdHJlYW0pOwotdHlwZWRl
ZiBpbnQzMl90ICgqTlBOX1dyaXRlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3Ry
ZWFtLCBpbnQzMl90IGxlbiwgdm9pZCogYnVmZmVyKTsKLXR5cGVkZWYgTlBFcnJvciAoKk5QTl9E
ZXN0cm95U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBOUFJl
YXNvbiByZWFzb24pOwotdHlwZWRlZiB2b2lkICgqTlBOX1N0YXR1c1Byb2NQdHIpKE5QUCBpbnN0
YW5jZSwgY29uc3QgY2hhciogbWVzc2FnZSk7Ci10eXBlZGVmIGNvbnN0IGNoYXIqKCpOUE5fVXNl
ckFnZW50UHJvY1B0cikoTlBQIGluc3RhbmNlKTsKLXR5cGVkZWYgdm9pZCogKCpOUE5fTWVtQWxs
b2NQcm9jUHRyKSh1aW50MzJfdCBzaXplKTsKLXR5cGVkZWYgdm9pZCAoKk5QTl9NZW1GcmVlUHJv
Y1B0cikodm9pZCogcHRyKTsKLXR5cGVkZWYgdWludDMyX3QgKCpOUE5fTWVtRmx1c2hQcm9jUHRy
KSh1aW50MzJfdCBzaXplKTsKLXR5cGVkZWYgdm9pZCAoKk5QTl9SZWxvYWRQbHVnaW5zUHJvY1B0
cikoTlBCb29sIHJlbG9hZFBhZ2VzKTsKLXR5cGVkZWYgTlBFcnJvciAoKk5QTl9HZXRWYWx1ZVBy
b2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnJldF92YWx1
ZSk7Ci10eXBlZGVmIE5QRXJyb3IgKCpOUE5fU2V0VmFsdWVQcm9jUHRyKShOUFAgaW5zdGFuY2Us
IE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkICp2YWx1ZSk7Ci10eXBlZGVmIHZvaWQgKCpOUE5f
SW52YWxpZGF0ZVJlY3RQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUmVjdCAqcmVjdCk7Ci10eXBl
ZGVmIHZvaWQgKCpOUE5fSW52YWxpZGF0ZVJlZ2lvblByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBS
ZWdpb24gcmVnaW9uKTsKLXR5cGVkZWYgdm9pZCAoKk5QTl9Gb3JjZVJlZHJhd1Byb2NQdHIpKE5Q
UCBpbnN0YW5jZSk7Ci10eXBlZGVmIE5QRXJyb3IgKCpOUE5fR2V0VVJMUHJvY1B0cikoTlBQIGlu
c3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHdpbmRvdyk7Ci10eXBlZGVmIE5Q
RXJyb3IgKCpOUE5fUG9zdFVSTFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJM
LCBjb25zdCBjaGFyKiB3aW5kb3csIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJv
b2wgZmlsZSk7Ci10eXBlZGVmIHZvaWQqICgqTlBOX0dldEphdmFFbnZQcm9jUHRyKSh2b2lkKTsK
LXR5cGVkZWYgdm9pZCogKCpOUE5fR2V0SmF2YVBlZXJQcm9jUHRyKShOUFAgaW5zdGFuY2UpOwot
dHlwZWRlZiB2b2lkICAoKk5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0cikoTlBQIGlu
c3RhbmNlLCBOUEJvb2wgZW5hYmxlZCk7Ci10eXBlZGVmIHZvaWQgICgqTlBOX1BvcFBvcHVwc0Vu
YWJsZWRTdGF0ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSk7Ci10eXBlZGVmIHZvaWQgKCpOUE5fUGx1
Z2luVGhyZWFkQXN5bmNDYWxsUHJvY1B0cikoTlBQIG5wcCwgdm9pZCAoKmZ1bmMpKHZvaWQgKiks
IHZvaWQgKnVzZXJEYXRhKTsKLXR5cGVkZWYgTlBFcnJvciAoKk5QTl9HZXRWYWx1ZUZvclVSTFBy
b2NQdHIpKE5QUCBucHAsIE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1cmws
IGNoYXIqKiB2YWx1ZSwgdWludDMyX3QqIGxlbik7Ci10eXBlZGVmIE5QRXJyb3IgKCpOUE5fU2V0
VmFsdWVGb3JVUkxQcm9jUHRyKShOUFAgbnBwLCBOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwgY29u
c3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB2YWx1ZSwgdWludDMyX3QgbGVuKTsKLXR5cGVkZWYg
TlBFcnJvciAoKk5QTl9HZXRBdXRoZW50aWNhdGlvbkluZm9Qcm9jUHRyKShOUFAgbnBwLCBjb25z
dCBjaGFyKiBwcm90b2NvbCwgY29uc3QgY2hhciogaG9zdCwgaW50MzJfdCBwb3J0LCBjb25zdCBj
aGFyKiBzY2hlbWUsIGNvbnN0IGNoYXIgKnJlYWxtLCBjaGFyKiogdXNlcm5hbWUsIHVpbnQzMl90
KiB1bGVuLCBjaGFyKiogcGFzc3dvcmQsIHVpbnQzMl90KiBwbGVuKTsKLQotdHlwZWRlZiB1aW50
MzJfdCAoKk5QTl9TY2hlZHVsZVRpbWVyUHJvY1B0cikoTlBQIG5wcCwgdWludDMyX3QgaW50ZXJ2
YWwsIE5QQm9vbCByZXBlYXQsIHZvaWQgKCp0aW1lckZ1bmMpKE5QUCBucHAsIHVpbnQzMl90IHRp
bWVySUQpKTsKLXR5cGVkZWYgdm9pZCAoKk5QTl9VbnNjaGVkdWxlVGltZXJQcm9jUHRyKShOUFAg
bnBwLCB1aW50MzJfdCB0aW1lcklEKTsKLXR5cGVkZWYgTlBFcnJvciAoKk5QTl9Qb3BVcENvbnRl
eHRNZW51UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUE1lbnUqIG1lbnUpOwotdHlwZWRlZiBOUEJv
b2wgKCpOUE5fQ29udmVydFBvaW50UHJvY1B0cikoTlBQIG5wcCwgZG91YmxlIHNvdXJjZVgsIGRv
dWJsZSBzb3VyY2VZLCBOUENvb3JkaW5hdGVTcGFjZSBzb3VyY2VTcGFjZSwgZG91YmxlICpkZXN0
WCwgZG91YmxlICpkZXN0WSwgTlBDb29yZGluYXRlU3BhY2UgZGVzdFNwYWNlKTsKLXR5cGVkZWYg
TlBCb29sICgqTlBOX0hhbmRsZUV2ZW50UHRyKShOUFAgaW5zdGFuY2UsIHZvaWQgKmV2ZW50LCBO
UEJvb2wgaGFuZGxlZCk7Ci10eXBlZGVmIE5QQm9vbCAoKk5QTl9VbmZvY3VzSW5zdGFuY2VQdHIp
KE5QUCBpbnN0YW5jZSwgTlBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24pOwotdHlwZWRlZiB2b2lk
ICgqTlBOX1VSTFJlZGlyZWN0UmVzcG9uc2VQdHIpKE5QUCBpbnN0YW5jZSwgdm9pZCogbm90aWZ5
RGF0YSwgTlBCb29sIGFsbG93KTsKLQotdHlwZWRlZiB2b2lkICgqTlBOX1JlbGVhc2VWYXJpYW50
VmFsdWVQcm9jUHRyKSAoTlBWYXJpYW50ICp2YXJpYW50KTsKLQotdHlwZWRlZiBOUElkZW50aWZp
ZXIgKCpOUE5fR2V0U3RyaW5nSWRlbnRpZmllclByb2NQdHIpIChjb25zdCBOUFVURjggKm5hbWUp
OwotdHlwZWRlZiB2b2lkICgqTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzUHJvY1B0cikgKGNvbnN0
IE5QVVRGOCAqKm5hbWVzLCBpbnQzMl90IG5hbWVDb3VudCwgTlBJZGVudGlmaWVyICppZGVudGlm
aWVycyk7Ci10eXBlZGVmIE5QSWRlbnRpZmllciAoKk5QTl9HZXRJbnRJZGVudGlmaWVyUHJvY1B0
cikgKGludDMyX3QgaW50aWQpOwotdHlwZWRlZiBpbnQzMl90ICgqTlBOX0ludEZyb21JZGVudGlm
aWVyUHJvY1B0cikgKE5QSWRlbnRpZmllciBpZGVudGlmaWVyKTsKLXR5cGVkZWYgYm9vbCAoKk5Q
Tl9JZGVudGlmaWVySXNTdHJpbmdQcm9jUHRyKSAoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIpOwot
dHlwZWRlZiBOUFVURjggKigqTlBOX1VURjhGcm9tSWRlbnRpZmllclByb2NQdHIpIChOUElkZW50
aWZpZXIgaWRlbnRpZmllcik7Ci0KLXR5cGVkZWYgTlBPYmplY3QqICgqTlBOX0NyZWF0ZU9iamVj
dFByb2NQdHIpIChOUFAsIE5QQ2xhc3MgKmFDbGFzcyk7Ci10eXBlZGVmIE5QT2JqZWN0KiAoKk5Q
Tl9SZXRhaW5PYmplY3RQcm9jUHRyKSAoTlBPYmplY3QgKm9iaik7Ci10eXBlZGVmIHZvaWQgKCpO
UE5fUmVsZWFzZU9iamVjdFByb2NQdHIpIChOUE9iamVjdCAqb2JqKTsKLXR5cGVkZWYgYm9vbCAo
Kk5QTl9JbnZva2VQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm9iaiwgTlBJZGVudGlmaWVy
IG1ldGhvZE5hbWUsIGNvbnN0IE5QVmFyaWFudCAqYXJncywgdW5zaWduZWQgYXJnQ291bnQsIE5Q
VmFyaWFudCAqcmVzdWx0KTsKLXR5cGVkZWYgYm9vbCAoKk5QTl9JbnZva2VEZWZhdWx0UHJvY1B0
cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIGNvbnN0IE5QVmFyaWFudCAqYXJncywgdW5zaWdu
ZWQgYXJnQ291bnQsIE5QVmFyaWFudCAqcmVzdWx0KTsKLXR5cGVkZWYgYm9vbCAoKk5QTl9FdmFs
dWF0ZVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUFN0cmluZyAqc2NyaXB0LCBO
UFZhcmlhbnQgKnJlc3VsdCk7Ci10eXBlZGVmIGJvb2wgKCpOUE5fR2V0UHJvcGVydHlQcm9jUHRy
KSAoTlBQIG5wcCwgTlBPYmplY3QgKm9iaiwgTlBJZGVudGlmaWVyICBwcm9wZXJ0eU5hbWUsIE5Q
VmFyaWFudCAqcmVzdWx0KTsKLXR5cGVkZWYgYm9vbCAoKk5QTl9TZXRQcm9wZXJ0eVByb2NQdHIp
IChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIgIHByb3BlcnR5TmFtZSwgY29u
c3QgTlBWYXJpYW50ICp2YWx1ZSk7Ci10eXBlZGVmIGJvb2wgKCpOUE5fSGFzUHJvcGVydHlQcm9j
UHRyKSAoTlBQLCBOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpOwot
dHlwZWRlZiBib29sICgqTlBOX0hhc01ldGhvZFByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAq
bnBvYmosIE5QSWRlbnRpZmllciBtZXRob2ROYW1lKTsKLXR5cGVkZWYgYm9vbCAoKk5QTl9SZW1v
dmVQcm9wZXJ0eVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIg
cHJvcGVydHlOYW1lKTsKLXR5cGVkZWYgdm9pZCAoKk5QTl9TZXRFeGNlcHRpb25Qcm9jUHRyKSAo
TlBPYmplY3QgKm9iaiwgY29uc3QgTlBVVEY4ICptZXNzYWdlKTsKLXR5cGVkZWYgYm9vbCAoKk5Q
Tl9FbnVtZXJhdGVQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm5wb2JqLCBOUElkZW50aWZp
ZXIgKippZGVudGlmaWVyLCB1aW50MzJfdCAqY291bnQpOwotdHlwZWRlZiBib29sICgqTlBOX0Nv
bnN0cnVjdFByb2NQdHIpKE5QUCBucHAsIE5QT2JqZWN0KiBvYmosIGNvbnN0IE5QVmFyaWFudCAq
YXJncywgdWludDMyX3QgYXJnQ291bnQsIE5QVmFyaWFudCAqcmVzdWx0KTsgICAgCi0KLXR5cGVk
ZWYgTlBFcnJvciAoKk5QUF9OZXdQcm9jUHRyKShOUE1JTUVUeXBlIHBsdWdpblR5cGUsIE5QUCBp
bnN0YW5jZSwgdWludDE2X3QgbW9kZSwgaW50MTZfdCBhcmdjLCBjaGFyKiBhcmduW10sIGNoYXIq
IGFyZ3ZbXSwgTlBTYXZlZERhdGEqIHNhdmVkKTsKLXR5cGVkZWYgTlBFcnJvciAoKk5QUF9EZXN0
cm95UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFNhdmVkRGF0YSoqIHNhdmUpOwotdHlwZWRlZiBO
UEVycm9yICgqTlBQX1NldFdpbmRvd1Byb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBXaW5kb3cqIHdp
bmRvdyk7Ci10eXBlZGVmIE5QRXJyb3IgKCpOUFBfTmV3U3RyZWFtUHJvY1B0cikoTlBQIGluc3Rh
bmNlLCBOUE1JTUVUeXBlIHR5cGUsIE5QU3RyZWFtKiBzdHJlYW0sIE5QQm9vbCBzZWVrYWJsZSwg
dWludDE2X3QqIHN0eXBlKTsKLXR5cGVkZWYgTlBFcnJvciAoKk5QUF9EZXN0cm95U3RyZWFtUHJv
Y1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pOwot
dHlwZWRlZiB2b2lkICgqTlBQX1N0cmVhbUFzRmlsZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBT
dHJlYW0qIHN0cmVhbSwgY29uc3QgY2hhciogZm5hbWUpOwotdHlwZWRlZiBpbnQzMl90ICgqTlBQ
X1dyaXRlUmVhZHlQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0pOwotdHlw
ZWRlZiBpbnQzMl90ICgqTlBQX1dyaXRlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSog
c3RyZWFtLCBpbnQzMl90IG9mZnNldCwgaW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZlcik7Ci10eXBl
ZGVmIHZvaWQgKCpOUFBfUHJpbnRQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUHJpbnQqIHBsYXRm
b3JtUHJpbnQpOwotdHlwZWRlZiBpbnQxNl90ICgqTlBQX0hhbmRsZUV2ZW50UHJvY1B0cikoTlBQ
IGluc3RhbmNlLCB2b2lkKiBldmVudCk7Ci10eXBlZGVmIHZvaWQgKCpOUFBfVVJMTm90aWZ5UHJv
Y1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIE5QUmVhc29uIHJlYXNvbiwgdm9p
ZCogbm90aWZ5RGF0YSk7Ci10eXBlZGVmIE5QRXJyb3IgKCpOUFBfR2V0VmFsdWVQcm9jUHRyKShO
UFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkICpyZXRfdmFsdWUpOwotdHlw
ZWRlZiBOUEVycm9yICgqTlBQX1NldFZhbHVlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUE5WYXJp
YWJsZSB2YXJpYWJsZSwgdm9pZCAqdmFsdWUpOwotdHlwZWRlZiBOUEJvb2wgKCpOUFBfR290Rm9j
dXNQdHIpKE5QUCBpbnN0YW5jZSwgTlBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24pOwotdHlwZWRl
ZiB2b2lkICgqTlBQX0xvc3RGb2N1c1B0cikoTlBQIGluc3RhbmNlKTsKLXR5cGVkZWYgdm9pZCAo
Kk5QUF9VUkxSZWRpcmVjdE5vdGlmeVB0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmws
IGludDMyX3Qgc3RhdHVzLCB2b2lkKiBub3RpZnlEYXRhKTsKLXR5cGVkZWYgTlBFcnJvciAoKk5Q
UF9DbGVhclNpdGVEYXRhUHRyKShjb25zdCBjaGFyKiBzaXRlLCB1aW50NjRfdCBmbGFncywgdWlu
dDY0X3QgbWF4QWdlKTsKLXR5cGVkZWYgY2hhcioqICgqTlBQX0dldFNpdGVzV2l0aERhdGFQdHIp
KHZvaWQpOwotCi10eXBlZGVmIHZvaWQgKigqTlBQX0dldEphdmFDbGFzc1Byb2NQdHIpKHZvaWQp
OwotdHlwZWRlZiB2b2lkKiBKUklHbG9iYWxSZWY7IC8vbm90IHVzaW5nIHRoaXMgcmlnaHQgbm93
Ci0KLXR5cGVkZWYgc3RydWN0IF9OUE5ldHNjYXBlRnVuY3MgewotICAgIHVpbnQxNl90IHNpemU7
Ci0gICAgdWludDE2X3QgdmVyc2lvbjsKLSAgICAKLSAgICBOUE5fR2V0VVJMUHJvY1B0ciBnZXR1
cmw7Ci0gICAgTlBOX1Bvc3RVUkxQcm9jUHRyIHBvc3R1cmw7Ci0gICAgTlBOX1JlcXVlc3RSZWFk
UHJvY1B0ciByZXF1ZXN0cmVhZDsKLSAgICBOUE5fTmV3U3RyZWFtUHJvY1B0ciBuZXdzdHJlYW07
Ci0gICAgTlBOX1dyaXRlUHJvY1B0ciB3cml0ZTsKLSAgICBOUE5fRGVzdHJveVN0cmVhbVByb2NQ
dHIgZGVzdHJveXN0cmVhbTsKLSAgICBOUE5fU3RhdHVzUHJvY1B0ciBzdGF0dXM7Ci0gICAgTlBO
X1VzZXJBZ2VudFByb2NQdHIgdWFnZW50OwotICAgIE5QTl9NZW1BbGxvY1Byb2NQdHIgbWVtYWxs
b2M7Ci0gICAgTlBOX01lbUZyZWVQcm9jUHRyIG1lbWZyZWU7Ci0gICAgTlBOX01lbUZsdXNoUHJv
Y1B0ciBtZW1mbHVzaDsKLSAgICBOUE5fUmVsb2FkUGx1Z2luc1Byb2NQdHIgcmVsb2FkcGx1Z2lu
czsKLSAgICBOUE5fR2V0SmF2YUVudlByb2NQdHIgZ2V0SmF2YUVudjsKLSAgICBOUE5fR2V0SmF2
YVBlZXJQcm9jUHRyIGdldEphdmFQZWVyOwotICAgIE5QTl9HZXRVUkxOb3RpZnlQcm9jUHRyIGdl
dHVybG5vdGlmeTsKLSAgICBOUE5fUG9zdFVSTE5vdGlmeVByb2NQdHIgcG9zdHVybG5vdGlmeTsK
LSAgICBOUE5fR2V0VmFsdWVQcm9jUHRyIGdldHZhbHVlOwotICAgIE5QTl9TZXRWYWx1ZVByb2NQ
dHIgc2V0dmFsdWU7Ci0gICAgTlBOX0ludmFsaWRhdGVSZWN0UHJvY1B0ciBpbnZhbGlkYXRlcmVj
dDsKLSAgICBOUE5fSW52YWxpZGF0ZVJlZ2lvblByb2NQdHIgaW52YWxpZGF0ZXJlZ2lvbjsKLSAg
ICBOUE5fRm9yY2VSZWRyYXdQcm9jUHRyIGZvcmNlcmVkcmF3OwotICAgIAotICAgIE5QTl9HZXRT
dHJpbmdJZGVudGlmaWVyUHJvY1B0ciBnZXRzdHJpbmdpZGVudGlmaWVyOwotICAgIE5QTl9HZXRT
dHJpbmdJZGVudGlmaWVyc1Byb2NQdHIgZ2V0c3RyaW5naWRlbnRpZmllcnM7Ci0gICAgTlBOX0dl
dEludElkZW50aWZpZXJQcm9jUHRyIGdldGludGlkZW50aWZpZXI7Ci0gICAgTlBOX0lkZW50aWZp
ZXJJc1N0cmluZ1Byb2NQdHIgaWRlbnRpZmllcmlzc3RyaW5nOwotICAgIE5QTl9VVEY4RnJvbUlk
ZW50aWZpZXJQcm9jUHRyIHV0Zjhmcm9taWRlbnRpZmllcjsKLSAgICBOUE5fSW50RnJvbUlkZW50
aWZpZXJQcm9jUHRyIGludGZyb21pZGVudGlmaWVyOwotICAgIE5QTl9DcmVhdGVPYmplY3RQcm9j
UHRyIGNyZWF0ZW9iamVjdDsKLSAgICBOUE5fUmV0YWluT2JqZWN0UHJvY1B0ciByZXRhaW5vYmpl
Y3Q7Ci0gICAgTlBOX1JlbGVhc2VPYmplY3RQcm9jUHRyIHJlbGVhc2VvYmplY3Q7Ci0gICAgTlBO
X0ludm9rZVByb2NQdHIgaW52b2tlOwotICAgIE5QTl9JbnZva2VEZWZhdWx0UHJvY1B0ciBpbnZv
a2VEZWZhdWx0OwotICAgIE5QTl9FdmFsdWF0ZVByb2NQdHIgZXZhbHVhdGU7Ci0gICAgTlBOX0dl
dFByb3BlcnR5UHJvY1B0ciBnZXRwcm9wZXJ0eTsKLSAgICBOUE5fU2V0UHJvcGVydHlQcm9jUHRy
IHNldHByb3BlcnR5OwotICAgIE5QTl9SZW1vdmVQcm9wZXJ0eVByb2NQdHIgcmVtb3ZlcHJvcGVy
dHk7Ci0gICAgTlBOX0hhc1Byb3BlcnR5UHJvY1B0ciBoYXNwcm9wZXJ0eTsKLSAgICBOUE5fSGFz
TWV0aG9kUHJvY1B0ciBoYXNtZXRob2Q7Ci0gICAgTlBOX1JlbGVhc2VWYXJpYW50VmFsdWVQcm9j
UHRyIHJlbGVhc2V2YXJpYW50dmFsdWU7Ci0gICAgTlBOX1NldEV4Y2VwdGlvblByb2NQdHIgc2V0
ZXhjZXB0aW9uOwotICAgIE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0ciBwdXNocG9w
dXBzZW5hYmxlZHN0YXRlOwotICAgIE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyIHBv
cHBvcHVwc2VuYWJsZWRzdGF0ZTsKLSAgICBOUE5fRW51bWVyYXRlUHJvY1B0ciBlbnVtZXJhdGU7
Ci0gICAgTlBOX1BsdWdpblRocmVhZEFzeW5jQ2FsbFByb2NQdHIgcGx1Z2ludGhyZWFkYXN5bmNj
YWxsOwotICAgIE5QTl9Db25zdHJ1Y3RQcm9jUHRyIGNvbnN0cnVjdDsKLSAgICBOUE5fR2V0VmFs
dWVGb3JVUkxQcm9jUHRyIGdldHZhbHVlZm9ydXJsOwotICAgIE5QTl9TZXRWYWx1ZUZvclVSTFBy
b2NQdHIgc2V0dmFsdWVmb3J1cmw7Ci0gICAgTlBOX0dldEF1dGhlbnRpY2F0aW9uSW5mb1Byb2NQ
dHIgZ2V0YXV0aGVudGljYXRpb25pbmZvOwotICAgIE5QTl9TY2hlZHVsZVRpbWVyUHJvY1B0ciBz
Y2hlZHVsZXRpbWVyOwotICAgIE5QTl9VbnNjaGVkdWxlVGltZXJQcm9jUHRyIHVuc2NoZWR1bGV0
aW1lcjsKLSAgICBOUE5fUG9wVXBDb250ZXh0TWVudVByb2NQdHIgcG9wdXBjb250ZXh0bWVudTsK
LSAgICBOUE5fQ29udmVydFBvaW50UHJvY1B0ciBjb252ZXJ0cG9pbnQ7Ci0gICAgTlBOX0hhbmRs
ZUV2ZW50UHRyIGhhbmRsZWV2ZW50OwotICAgIE5QTl9VbmZvY3VzSW5zdGFuY2VQdHIgdW5mb2N1
c2luc3RhbmNlOwotICAgIE5QTl9VUkxSZWRpcmVjdFJlc3BvbnNlUHRyIHVybHJlZGlyZWN0cmVz
cG9uc2U7Ci19IE5QTmV0c2NhcGVGdW5jczsKLQotdHlwZWRlZiBzdHJ1Y3QgX05QUGx1Z2luRnVu
Y3MgewotICAgIHVpbnQxNl90IHNpemU7Ci0gICAgdWludDE2X3QgdmVyc2lvbjsKLSAgICBOUFBf
TmV3UHJvY1B0ciBuZXdwOwotICAgIE5QUF9EZXN0cm95UHJvY1B0ciBkZXN0cm95OwotICAgIE5Q
UF9TZXRXaW5kb3dQcm9jUHRyIHNldHdpbmRvdzsKLSAgICBOUFBfTmV3U3RyZWFtUHJvY1B0ciBu
ZXdzdHJlYW07Ci0gICAgTlBQX0Rlc3Ryb3lTdHJlYW1Qcm9jUHRyIGRlc3Ryb3lzdHJlYW07Ci0g
ICAgTlBQX1N0cmVhbUFzRmlsZVByb2NQdHIgYXNmaWxlOwotICAgIE5QUF9Xcml0ZVJlYWR5UHJv
Y1B0ciB3cml0ZXJlYWR5OwotICAgIE5QUF9Xcml0ZVByb2NQdHIgd3JpdGU7Ci0gICAgTlBQX1By
aW50UHJvY1B0ciBwcmludDsKLSAgICBOUFBfSGFuZGxlRXZlbnRQcm9jUHRyIGV2ZW50OwotICAg
IE5QUF9VUkxOb3RpZnlQcm9jUHRyIHVybG5vdGlmeTsKLSAgICBKUklHbG9iYWxSZWYgamF2YUNs
YXNzOwotICAgIE5QUF9HZXRWYWx1ZVByb2NQdHIgZ2V0dmFsdWU7Ci0gICAgTlBQX1NldFZhbHVl
UHJvY1B0ciBzZXR2YWx1ZTsKLSAgICBOUFBfR290Rm9jdXNQdHIgZ290Zm9jdXM7Ci0gICAgTlBQ
X0xvc3RGb2N1c1B0ciBsb3N0Zm9jdXM7Ci0gICAgTlBQX1VSTFJlZGlyZWN0Tm90aWZ5UHRyIHVy
bHJlZGlyZWN0bm90aWZ5OwotICAgIE5QUF9DbGVhclNpdGVEYXRhUHRyIGNsZWFyc2l0ZWRhdGE7
Ci0gICAgTlBQX0dldFNpdGVzV2l0aERhdGFQdHIgZ2V0c2l0ZXN3aXRoZGF0YTsKLX0gTlBQbHVn
aW5GdW5jczsKLQotdHlwZWRlZiBFWFBPUlRFRF9DQUxMQkFDSyhOUEVycm9yLCBOUF9HZXRFbnRy
eVBvaW50c0Z1bmNQdHIpKE5QUGx1Z2luRnVuY3MqKTsKLXR5cGVkZWYgRVhQT1JURURfQ0FMTEJB
Q0sodm9pZCwgTlBQX1NodXRkb3duUHJvY1B0cikodm9pZCk7ICAgIAotCi0jaWYgZGVmaW5lZChY
UF9NQUNPU1gpCi10eXBlZGVmIHZvaWQgKCpCUF9DcmVhdGVQbHVnaW5NSU1FVHlwZXNQcmVmZXJl
bmNlc0Z1bmNQdHIpKHZvaWQpOwotdHlwZWRlZiBOUEVycm9yICgqTWFpbkZ1bmNQdHIpKE5QTmV0
c2NhcGVGdW5jcyosIE5QUGx1Z2luRnVuY3MqLCBOUFBfU2h1dGRvd25Qcm9jUHRyKik7Ci0jZW5k
aWYKLQotI2lmIGRlZmluZWQoWFBfVU5JWCkKLXR5cGVkZWYgRVhQT1JURURfQ0FMTEJBQ0soTlBF
cnJvciwgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIpKE5QTmV0c2NhcGVGdW5jcyosIE5QUGx1Z2luRnVu
Y3MqKTsKLXR5cGVkZWYgRVhQT1JURURfQ0FMTEJBQ0soY29uc3QgY2hhciosIE5QX0dldE1JTUVE
ZXNjcmlwdGlvbkZ1bmNQdHIpKHZvaWQpOwotI2Vsc2UKLXR5cGVkZWYgRVhQT1JURURfQ0FMTEJB
Q0soTlBFcnJvciwgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIpKE5QTmV0c2NhcGVGdW5jcyopOwotI2Vu
ZGlmCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ucHJ1bnRpbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvbnBydW50aW1lLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwZWM2YzZi
YTFmODJjMGQ2ZmZhYjhlMTc0NmRlYjlkNjBkMjVkNDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ucHJ1bnRpbWUu
aAorKysgL2Rldi9udWxsCkBAIC0xLDM5MyArMCwwIEBACi0vKiAtKi0gTW9kZTogQzsgdGFiLXdp
ZHRoOiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiA0IC0qLSAqLwot
LyoKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgQXBwbGUgSW5jLiBhbmQgVGhlIE1vemlsbGEgRm91
bmRhdGlvbi4gCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0
aGUgbmFtZXMgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgb3IgVGhlIE1vemlsbGEKLSAqIEZvdW5k
YXRpb24gKCJNb3ppbGxhIikgbm9yIHRoZSBuYW1lcyBvZiB0aGVpciBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQKLSAqIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0gKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUsIE1PWklMTEEg
QU5EIFRIRUlSIENPTlRSSUJVVE9SUyAiQVMKLSAqIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotICogVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCi0g
KiBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFLCBNT1pJTExBIE9SCi0gKiBUSEVJUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotICogVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLSAqIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKgotICovCi0jaWZuZGVmIF9OUF9SVU5USU1FX0hfCi0jZGVmaW5lIF9OUF9S
VU5USU1FX0hfCi0KLSNpbmNsdWRlICJucGFwaS5oIgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4
dGVybiAiQyIgewotI2VuZGlmCi0KLS8qCi0gICAgVGhpcyBBUEkgaXMgdXNlZCB0byBmYWNpbGl0
YXRlIGJpbmRpbmcgY29kZSB3cml0dGVuIGluIEMgdG8gc2NyaXB0Ci0gICAgb2JqZWN0cy4gIFRo
ZSBBUEkgaW4gdGhpcyBoZWFkZXIgZG9lcyBub3QgYXNzdW1lIHRoZSBwcmVzZW5jZSBvZiBhCi0g
ICAgdXNlciBhZ2VudC4gIFRoYXQgaXMsIGl0IGNhbiBiZSB1c2VkIHRvIGJpbmQgQyBjb2RlIHRv
IHNjcmlwdGluZwotICAgIGVudmlyb25tZW50cyBvdXRzaWRlIG9mIHRoZSBjb250ZXh0IG9mIGEg
dXNlciBhZ2VudC4KLSAgICAKLSAgICBIb3dldmVyLCB0aGUgbm9ybWFsIHVzZSBvZiB0aGUgdGhp
cyBBUEkgaXMgaW4gdGhlIGNvbnRleHQgb2YgYQotICAgIHNjcmlwdGluZyBlbnZpcm9ubWVudCBy
dW5uaW5nIGluIGEgYnJvd3NlciBvciBvdGhlciB1c2VyIGFnZW50LgotICAgIEluIHBhcnRpY3Vs
YXIgaXQgaXMgdXNlZCB0byBzdXBwb3J0IHRoZSBleHRlbmRlZCBOZXRzY2FwZQotICAgIHNjcmlw
dC1hYmlsaXR5IEFQSSBmb3IgcGx1Z2lucyAoTlAtU0FQKS4gIE5QLVNBUCBpcyBhbiBleHRlbnNp
b24KLSAgICBvZiB0aGUgTmV0c2NhcGUgcGx1Z2luIEFQSS4gIEFzIHN1Y2ggd2UgaGF2ZSBhZG9w
dGVkIHRoZSB1c2Ugb2YKLSAgICB0aGUgIk5QIiBwcmVmaXggZm9yIHRoaXMgQVBJLgotCi0gICAg
VGhlIGZvbGxvd2luZyBOUHtOfFB9VmFyaWFibGVzIHdlcmUgYWRkZWQgdG8gdGhlIE5ldHNjYXBl
IHBsdWdpbgotICAgIEFQSSAoaW4gbnBhcGkuaCk6Ci0KLSAgICBOUE5WV2luZG93TlBPYmplY3QK
LSAgICBOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0Ci0gICAgTlBQVnBsdWdpblNjcmlwdGFibGVO
UE9iamVjdAotCi0gICAgVGhlc2UgdmFyaWFibGVzIGFyZSBleHBvc2VkIHRocm91Z2ggTlBOX0dl
dFZhbHVlKCkgYW5kCi0gICAgTlBQX0dldFZhbHVlKCkgKHJlc3BlY3RpdmVseSkgYW5kIGFyZSB1
c2VkIHRvIGVzdGFibGlzaCB0aGUKLSAgICBpbml0aWFsIGJpbmRpbmcgYmV0d2VlbiB0aGUgdXNl
ciBhZ2VudCBhbmQgbmF0aXZlIGNvZGUuICBUaGUgRE9NCi0gICAgb2JqZWN0cyBpbiB0aGUgdXNl
ciBhZ2VudCBjYW4gYmUgZXhhbWluZWQgYW5kIG1hbmlwdWxhdGVkIHVzaW5nCi0gICAgdGhlIE5Q
Tl8gZnVuY3Rpb25zIHRoYXQgb3BlcmF0ZSBvbiBOUE9iamVjdHMgZGVzY3JpYmVkIGluIHRoaXMK
LSAgICBoZWFkZXIuCi0KLSAgICBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHRoZSBhc3N1bXB0aW9u
cyBhYm91dCB0aGUgc2NyaXB0aW5nCi0gICAgbGFuZ3VhZ2UgdXNlZCBieSB0aGUgc2NyaXB0aW5n
IGVudmlyb25tZW50IGhhdmUgYmVlbiBtaW5pbWl6ZWQuCi0qLwotCi0jZGVmaW5lIE5QX0JFR0lO
X01BQ1JPICBkbyB7Ci0jZGVmaW5lIE5QX0VORF9NQUNSTyAgICB9IHdoaWxlICgwKQotCi0vKgot
ICAgIE9iamVjdHMgKG5vbi1wcmltaXRpdmUgZGF0YSkgcGFzc2VkIGJldHdlZW4gJ0MnIGFuZCBz
Y3JpcHQgaXMKLSAgICBhbHdheXMgd3JhcHBlZCBpbiBhbiBOUE9iamVjdC4gIFRoZSAnaW50ZXJm
YWNlJyBvZiBhbiBOUE9iamVjdCBpcwotICAgIGRlc2NyaWJlZCBieSBhbiBOUENsYXNzLgotKi8K
LXR5cGVkZWYgc3RydWN0IE5QT2JqZWN0IE5QT2JqZWN0OwotdHlwZWRlZiBzdHJ1Y3QgTlBDbGFz
cyBOUENsYXNzOwotCi10eXBlZGVmIGNoYXIgTlBVVEY4OwotdHlwZWRlZiBzdHJ1Y3QgX05QU3Ry
aW5nIHsKLSAgICBjb25zdCBOUFVURjggKlVURjhDaGFyYWN0ZXJzOwotICAgIHVpbnQzMl90IFVU
RjhMZW5ndGg7Ci19IE5QU3RyaW5nOwotCi10eXBlZGVmIGVudW0gewotICAgIE5QVmFyaWFudFR5
cGVfVm9pZCwKLSAgICBOUFZhcmlhbnRUeXBlX051bGwsCi0gICAgTlBWYXJpYW50VHlwZV9Cb29s
LAotICAgIE5QVmFyaWFudFR5cGVfSW50MzIsCi0gICAgTlBWYXJpYW50VHlwZV9Eb3VibGUsCi0g
ICAgTlBWYXJpYW50VHlwZV9TdHJpbmcsCi0gICAgTlBWYXJpYW50VHlwZV9PYmplY3QKLX0gTlBW
YXJpYW50VHlwZTsKLQotdHlwZWRlZiBzdHJ1Y3QgX05QVmFyaWFudCB7Ci0gICAgTlBWYXJpYW50
VHlwZSB0eXBlOwotICAgIHVuaW9uIHsKLSAgICAgICAgYm9vbCBib29sVmFsdWU7Ci0gICAgICAg
IGludDMyX3QgaW50VmFsdWU7Ci0gICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKLSAgICAgICAg
TlBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgICAgIE5QT2JqZWN0ICpvYmplY3RWYWx1ZTsKLSAg
ICB9IHZhbHVlOwotfSBOUFZhcmlhbnQ7Ci0KLS8qCi0gICAgTlBOX1JlbGVhc2VWYXJpYW50VmFs
dWUgaXMgY2FsbGVkIG9uIGFsbCAnb3V0JyBwYXJhbWV0ZXJzCi0gICAgcmVmZXJlbmNlcy4gIFNw
ZWNpZmljYWxseSBpdCBpcyB0byBiZSBjYWxsZWQgb24gdmFyaWFudHMgdGhhdCBvd24KLSAgICB0
aGVpciB2YWx1ZSwgYXMgaXMgdGhlIGNhc2Ugd2l0aCBhbGwgbm9uLWNvbnN0IE5QVmFyaWFudCoK
LSAgICBhcmd1bWVudHMgYWZ0ZXIgYSBzdWNjZXNzZnVsIGNhbGwgdG8gYW55IG1ldGhvZHMgKGV4
Y2VwdCB0aGlzIG9uZSkKLSAgICBpbiB0aGlzIEFQSS4KLQotICAgIEFmdGVyIGNhbGxpbmcgTlBO
X1JlbGVhc2VWYXJpYW50VmFsdWUsIHRoZSB0eXBlIG9mIHRoZSB2YXJpYW50Ci0gICAgd2lsbCBi
ZSBOUFZhcmlhbnRUeXBlX1ZvaWQuCi0qLwotdm9pZCBOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZShO
UFZhcmlhbnQgKnZhcmlhbnQpOwotCi0jZGVmaW5lIE5QVkFSSUFOVF9JU19WT0lEKF92KSAgICAo
KF92KS50eXBlID09IE5QVmFyaWFudFR5cGVfVm9pZCkKLSNkZWZpbmUgTlBWQVJJQU5UX0lTX05V
TEwoX3YpICAgICgoX3YpLnR5cGUgPT0gTlBWYXJpYW50VHlwZV9OdWxsKQotI2RlZmluZSBOUFZB
UklBTlRfSVNfQk9PTEVBTihfdikgKChfdikudHlwZSA9PSBOUFZhcmlhbnRUeXBlX0Jvb2wpCi0j
ZGVmaW5lIE5QVkFSSUFOVF9JU19JTlQzMihfdikgICAoKF92KS50eXBlID09IE5QVmFyaWFudFR5
cGVfSW50MzIpCi0jZGVmaW5lIE5QVkFSSUFOVF9JU19ET1VCTEUoX3YpICAoKF92KS50eXBlID09
IE5QVmFyaWFudFR5cGVfRG91YmxlKQotI2RlZmluZSBOUFZBUklBTlRfSVNfU1RSSU5HKF92KSAg
KChfdikudHlwZSA9PSBOUFZhcmlhbnRUeXBlX1N0cmluZykKLSNkZWZpbmUgTlBWQVJJQU5UX0lT
X09CSkVDVChfdikgICgoX3YpLnR5cGUgPT0gTlBWYXJpYW50VHlwZV9PYmplY3QpCi0KLSNkZWZp
bmUgTlBWQVJJQU5UX1RPX0JPT0xFQU4oX3YpICgoX3YpLnZhbHVlLmJvb2xWYWx1ZSkKLSNkZWZp
bmUgTlBWQVJJQU5UX1RPX0lOVDMyKF92KSAgICgoX3YpLnZhbHVlLmludFZhbHVlKQotI2RlZmlu
ZSBOUFZBUklBTlRfVE9fRE9VQkxFKF92KSAgKChfdikudmFsdWUuZG91YmxlVmFsdWUpCi0jZGVm
aW5lIE5QVkFSSUFOVF9UT19TVFJJTkcoX3YpICAoKF92KS52YWx1ZS5zdHJpbmdWYWx1ZSkKLSNk
ZWZpbmUgTlBWQVJJQU5UX1RPX09CSkVDVChfdikgICgoX3YpLnZhbHVlLm9iamVjdFZhbHVlKQot
Ci0jZGVmaW5lIFZPSURfVE9fTlBWQVJJQU5UKF92KSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi1OUF9CRUdJTl9NQUNSTyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKF92
KS50eXBlID0gTlBWYXJpYW50VHlwZV9Wb2lkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgKF92KS52YWx1ZS5vYmplY3RWYWx1ZSA9IE5VTEw7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1OUF9FTkRfTUFDUk8KLQot
I2RlZmluZSBOVUxMX1RPX05QVkFSSUFOVChfdikgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotTlBfQkVHSU5fTUFDUk8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChfdiku
dHlwZSA9IE5QVmFyaWFudFR5cGVfTnVsbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIChfdikudmFsdWUub2JqZWN0VmFsdWUgPSBOVUxMOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotTlBfRU5EX01BQ1JPCi0KLSNk
ZWZpbmUgQk9PTEVBTl9UT19OUFZBUklBTlQoX3ZhbCwgX3YpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLU5QX0JFR0lOX01BQ1JPICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoX3YpLnR5
cGUgPSBOUFZhcmlhbnRUeXBlX0Jvb2w7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAoX3YpLnZhbHVlLmJvb2xWYWx1ZSA9ICEhKF92YWwpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLU5QX0VORF9NQUNSTwotCi0jZGVm
aW5lIElOVDMyX1RPX05QVkFSSUFOVChfdmFsLCBfdikgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi1OUF9CRUdJTl9NQUNSTyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKF92KS50eXBl
ID0gTlBWYXJpYW50VHlwZV9JbnQzMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgKF92KS52YWx1ZS5pbnRWYWx1ZSA9IF92YWw7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1OUF9FTkRfTUFDUk8KLQotI2RlZmlu
ZSBET1VCTEVfVE9fTlBWQVJJQU5UKF92YWwsIF92KSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotTlBfQkVHSU5fTUFDUk8gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChfdikudHlwZSA9
IE5QVmFyaWFudFR5cGVfRG91YmxlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIChfdikudmFsdWUuZG91YmxlVmFsdWUgPSBfdmFsOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotTlBfRU5EX01BQ1JPCi0KLSNkZWZpbmUg
U1RSSU5HWl9UT19OUFZBUklBTlQoX3ZhbCwgX3YpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLU5QX0JFR0lOX01BQ1JPICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoX3YpLnR5cGUgPSBO
UFZhcmlhbnRUeXBlX1N0cmluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBOUFN0cmluZyBzdHIgPSB7IF92YWwsIHVpbnQzMl90KHN0cmxlbihfdmFsKSkg
fTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoX3YpLnZhbHVlLnN0cmluZ1ZhbHVl
ID0gc3RyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLU5Q
X0VORF9NQUNSTwotCi0jZGVmaW5lIFNUUklOR05fVE9fTlBWQVJJQU5UKF92YWwsIF9sZW4sIF92
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1OUF9CRUdJTl9NQUNSTyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgKF92KS50eXBlID0gTlBWYXJpYW50VHlwZV9TdHJpbmc7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTlBTdHJpbmcgc3RyID0geyBfdmFsLCB1
aW50MzJfdChfbGVuKSB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
KF92KS52YWx1ZS5zdHJpbmdWYWx1ZSA9IHN0cjsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi1OUF9FTkRfTUFDUk8KLQotI2RlZmluZSBPQkpFQ1RfVE9fTlBW
QVJJQU5UKF92YWwsIF92KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotTlBfQkVHSU5fTUFDUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChfdikudHlwZSA9IE5QVmFyaWFudFR5cGVf
T2JqZWN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChf
dikudmFsdWUub2JqZWN0VmFsdWUgPSBfdmFsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotTlBfRU5EX01BQ1JPCi0KLQotLyoKLSAgVHlwZSBtYXBwaW5ncyAo
SmF2YVNjcmlwdCB0eXBlcyBoYXZlIGJlZW4gdXNlZCBmb3IgaWxsdXN0cmF0aW9uCi0gICAgcHVy
cG9zZXMpOgotCi0gIEphdmFTY3JpcHQgICAgICAgdG8gICAgICAgICAgICAgQyAoTlBWYXJpYW50
IHdpdGggdHlwZTopCi0gIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgTlBWYXJpYW50
VHlwZV9Wb2lkCi0gIG51bGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlBWYXJpYW50VHlw
ZV9OdWxsCi0gIEJvb2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgTlBWYXJpYW50VHlwZV9C
b29sCi0gIE51bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgTlBWYXJpYW50VHlwZV9Eb3Vi
bGUgb3IgTlBWYXJpYW50VHlwZV9JbnQzMgotICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5QVmFyaWFudFR5cGVfU3RyaW5nCi0gIE9iamVjdCAgICAgICAgICAgICAgICAgICAgICAg
ICAgTlBWYXJpYW50VHlwZV9PYmplY3QKLQotICBDIChOUFZhcmlhbnQgd2l0aCB0eXBlOikgICB0
byAgIEphdmFTY3JpcHQKLSAgTlBWYXJpYW50VHlwZV9Wb2lkICAgICAgICAgICAgICB1bmRlZmlu
ZWQKLSAgTlBWYXJpYW50VHlwZV9OdWxsICAgICAgICAgICAgICBudWxsCi0gIE5QVmFyaWFudFR5
cGVfQm9vbCAgICAgICAgICAgICAgQm9vbGVhbgotICBOUFZhcmlhbnRUeXBlX0ludDMyICAgICAg
ICAgICAgIE51bWJlcgotICBOUFZhcmlhbnRUeXBlX0RvdWJsZSAgICAgICAgICAgIE51bWJlcgot
ICBOUFZhcmlhbnRUeXBlX1N0cmluZyAgICAgICAgICAgIFN0cmluZwotICBOUFZhcmlhbnRUeXBl
X09iamVjdCAgICAgICAgICAgIE9iamVjdAotKi8KLQotdHlwZWRlZiB2b2lkICpOUElkZW50aWZp
ZXI7Ci0KLS8qCi0gICAgTlBPYmplY3RzIGhhdmUgbWV0aG9kcyBhbmQgcHJvcGVydGllcy4gIE1l
dGhvZHMgYW5kIHByb3BlcnRpZXMgYXJlCi0gICAgaWRlbnRpZmllZCB3aXRoIE5QSWRlbnRpZmll
cnMuICBUaGVzZSBpZGVudGlmaWVycyBtYXkgYmUgcmVmbGVjdGVkCi0gICAgaW4gc2NyaXB0LiAg
TlBJZGVudGlmaWVycyBjYW4gYmUgZWl0aGVyIHN0cmluZ3Mgb3IgaW50ZWdlcnMsIElPVywKLSAg
ICBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIGNhbiBiZSBpZGVudGlmaWVkIGJ5IGVpdGhlciBzdHJp
bmdzIG9yCi0gICAgaW50ZWdlcnMgKGkuZS4gZm9vWyJiYXIiXSB2cyBmb29bMV0pLiBOUElkZW50
aWZpZXJzIGNhbiBiZQotICAgIGNvbXBhcmVkIHVzaW5nID09LiAgSW4gY2FzZSBvZiBhbnkgZXJy
b3JzLCB0aGUgcmVxdWVzdGVkCi0gICAgTlBJZGVudGlmaWVyKHMpIHdpbGwgYmUgTlVMTC4gTlBJ
ZGVudGlmaWVyIGxpZmV0aW1lIGlzIGNvbnRyb2xsZWQKLSAgICBieSB0aGUgYnJvd3Nlci4gUGx1
Z2lucyBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBtZW1vcnkgbWFuYWdlbWVudAotICAgIHdp
dGggcmVnYXJkcyB0byBOUElkZW50aWZpZXJzLgotKi8KLU5QSWRlbnRpZmllciBOUE5fR2V0U3Ry
aW5nSWRlbnRpZmllcihjb25zdCBOUFVURjggKm5hbWUpOwotdm9pZCBOUE5fR2V0U3RyaW5nSWRl
bnRpZmllcnMoY29uc3QgTlBVVEY4ICoqbmFtZXMsIGludDMyX3QgbmFtZUNvdW50LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTlBJZGVudGlmaWVyICppZGVudGlmaWVycyk7Ci1OUElk
ZW50aWZpZXIgTlBOX0dldEludElkZW50aWZpZXIoaW50MzJfdCBpbnRpZCk7Ci1ib29sIE5QTl9J
ZGVudGlmaWVySXNTdHJpbmcoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIpOwotCi0vKgotICAgIFRo
ZSBOUFVURjggcmV0dXJuZWQgZnJvbSBOUE5fVVRGOEZyb21JZGVudGlmaWVyIFNIT1VMRCBiZSBm
cmVlZC4KLSovCi1OUFVURjggKk5QTl9VVEY4RnJvbUlkZW50aWZpZXIoTlBJZGVudGlmaWVyIGlk
ZW50aWZpZXIpOwotCi0vKgotICAgIEdldCB0aGUgaW50ZWdlciByZXByZXNlbnRlZCBieSBpZGVu
dGlmaWVyLiBJZiBpZGVudGlmaWVyIGlzIG5vdCBhbgotICAgIGludGVnZXIgaWRlbnRpZmllciwg
dGhlIGJlaGF2aW91ciBpcyB1bmRlZmluZWQuCi0qLwotaW50MzJfdCBOUE5fSW50RnJvbUlkZW50
aWZpZXIoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIpOwotCi0vKgotICAgIE5QT2JqZWN0IGJlaGF2
aW9yIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgc2V0IG9mCi0gICAgY2FsbGJh
Y2sgZnVuY3Rpb25zLgotCi0gICAgVGhlIE5QVmFyaWFudCAqcmVzdWx0IGFyZ3VtZW50IG9mIHRo
ZXNlIGZ1bmN0aW9ucyAod2hlcmUKLSAgICBhcHBsaWNhYmxlKSBzaG91bGQgYmUgcmVsZWFzZWQg
dXNpbmcgTlBOX1JlbGVhc2VWYXJpYW50VmFsdWUoKS4KLSovCi10eXBlZGVmIE5QT2JqZWN0ICoo
Kk5QQWxsb2NhdGVGdW5jdGlvblB0cikoTlBQIG5wcCwgTlBDbGFzcyAqYUNsYXNzKTsKLXR5cGVk
ZWYgdm9pZCAoKk5QRGVhbGxvY2F0ZUZ1bmN0aW9uUHRyKShOUE9iamVjdCAqbnBvYmopOwotdHlw
ZWRlZiB2b2lkICgqTlBJbnZhbGlkYXRlRnVuY3Rpb25QdHIpKE5QT2JqZWN0ICpucG9iaik7Ci10
eXBlZGVmIGJvb2wgKCpOUEhhc01ldGhvZEZ1bmN0aW9uUHRyKShOUE9iamVjdCAqbnBvYmosIE5Q
SWRlbnRpZmllciBuYW1lKTsKLXR5cGVkZWYgYm9vbCAoKk5QSW52b2tlRnVuY3Rpb25QdHIpKE5Q
T2JqZWN0ICpucG9iaiwgTlBJZGVudGlmaWVyIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBOUFZhcmlhbnQgKmFyZ3MsIHVpbnQzMl90IGFyZ0NvdW50LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlBWYXJpYW50ICpyZXN1bHQpOwot
dHlwZWRlZiBib29sICgqTlBJbnZva2VEZWZhdWx0RnVuY3Rpb25QdHIpKE5QT2JqZWN0ICpucG9i
aiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOUFZh
cmlhbnQgKmFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dWludDMyX3QgYXJnQ291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTlBWYXJpYW50ICpyZXN1bHQpOwotdHlwZWRlZiBib29sICgqTlBIYXNQcm9wZXJ0eUZ1
bmN0aW9uUHRyKShOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciBuYW1lKTsKLXR5cGVkZWYg
Ym9vbCAoKk5QR2V0UHJvcGVydHlGdW5jdGlvblB0cikoTlBPYmplY3QgKm5wb2JqLCBOUElkZW50
aWZpZXIgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlBW
YXJpYW50ICpyZXN1bHQpOwotdHlwZWRlZiBib29sICgqTlBTZXRQcm9wZXJ0eUZ1bmN0aW9uUHRy
KShOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciBuYW1lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOUFZhcmlhbnQgKnZhbHVlKTsKLXR5cGVkZWYg
Ym9vbCAoKk5QUmVtb3ZlUHJvcGVydHlGdW5jdGlvblB0cikoTlBPYmplY3QgKm5wb2JqLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUElkZW50aWZpZXIgbmFt
ZSk7Ci10eXBlZGVmIGJvb2wgKCpOUEVudW1lcmF0aW9uRnVuY3Rpb25QdHIpKE5QT2JqZWN0ICpu
cG9iaiwgTlBJZGVudGlmaWVyICoqdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQzMl90ICpjb3VudCk7Ci10eXBlZGVmIGJvb2wgKCpOUENvbnN0cnVj
dEZ1bmN0aW9uUHRyKShOUE9iamVjdCAqbnBvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBOUFZhcmlhbnQgKmFyZ3MsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhcmdDb3VudCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE5QVmFyaWFudCAqcmVzdWx0KTsKLQotLyoKLSAgICBOUE9i
amVjdHMgcmV0dXJuZWQgYnkgY3JlYXRlLCByZXRhaW4sIGludm9rZSwgYW5kIGdldFByb3BlcnR5
IHBhc3MKLSAgICBhIHJlZmVyZW5jZSBjb3VudCB0byB0aGUgY2FsbGVyLiAgVGhhdCBpcywgdGhl
IGNhbGxlZSBhZGRzIGEKLSAgICByZWZlcmVuY2UgY291bnQgd2hpY2ggcGFzc2VzIHRvIHRoZSBj
YWxsZXIuICBJdCBpcyB0aGUgY2FsbGVyJ3MKLSAgICByZXNwb25zaWJpbGl0eSB0byByZWxlYXNl
IHRoZSByZXR1cm5lZCBvYmplY3QuCi0KLSAgICBOUEludm9rZUZ1bmN0aW9uUHRyIGZ1bmN0aW9u
IG1heSByZXR1cm4gMCB0byBpbmRpY2F0ZSBhIHZvaWQKLSAgICByZXN1bHQuCi0KLSAgICBOUElu
dmFsaWRhdGVGdW5jdGlvblB0ciBpcyBjYWxsZWQgYnkgdGhlIHNjcmlwdGluZyBlbnZpcm9ubWVu
dAotICAgIHdoZW4gdGhlIG5hdGl2ZSBjb2RlIGlzIHNodXRkb3duLiAgQW55IGF0dGVtcHQgdG8g
bWVzc2FnZSBhCi0gICAgTlBPYmplY3QgaW5zdGFuY2UgYWZ0ZXIgdGhlIGludmFsaWRhdGUgY2Fs
bGJhY2sgaGFzIGJlZW4KLSAgICBjYWxsZWQgd2lsbCByZXN1bHQgaW4gdW5kZWZpbmVkIGJlaGF2
aW9yLCBldmVuIGlmIHRoZSBuYXRpdmUgY29kZQotICAgIGlzIHN0aWxsIHJldGFpbmluZyB0aG9z
ZSBOUE9iamVjdCBpbnN0YW5jZXMuICAoVGhlIHJ1bnRpbWUKLSAgICB3aWxsIHR5cGljYWxseSBy
ZXR1cm4gaW1tZWRpYXRlbHksIHdpdGggMCBvciBOVUxMLCBmcm9tIGFuIGF0dGVtcHQKLSAgICB0
byBkaXNwYXRjaCB0byBhIE5QT2JqZWN0LCBidXQgdGhpcyBiZWhhdmlvciBzaG91bGQgbm90IGJl
Ci0gICAgZGVwZW5kZWQgdXBvbi4pCi0KLSAgICBUaGUgTlBFbnVtZXJhdGlvbkZ1bmN0aW9uUHRy
IGZ1bmN0aW9uIG1heSBwYXNzIGFuIGFycmF5IG9mCi0gICAgTlBJZGVudGlmaWVycyBiYWNrIHRv
IHRoZSBjYWxsZXIuIFRoZSBjYWxsZWUgYWxsb2NzIHRoZSBtZW1vcnkgb2YKLSAgICB0aGUgYXJy
YXkgdXNpbmcgTlBOX01lbUFsbG9jKCksIGFuZCBpdCdzIHRoZSBjYWxsZXIncyByZXNwb25zaWJp
bGl0eQotICAgIHRvIHJlbGVhc2UgaXQgdXNpbmcgTlBOX01lbUZyZWUoKS4KLSovCi1zdHJ1Y3Qg
TlBDbGFzcwotewotICAgIHVpbnQzMl90IHN0cnVjdFZlcnNpb247Ci0gICAgTlBBbGxvY2F0ZUZ1
bmN0aW9uUHRyIGFsbG9jYXRlOwotICAgIE5QRGVhbGxvY2F0ZUZ1bmN0aW9uUHRyIGRlYWxsb2Nh
dGU7Ci0gICAgTlBJbnZhbGlkYXRlRnVuY3Rpb25QdHIgaW52YWxpZGF0ZTsKLSAgICBOUEhhc01l
dGhvZEZ1bmN0aW9uUHRyIGhhc01ldGhvZDsKLSAgICBOUEludm9rZUZ1bmN0aW9uUHRyIGludm9r
ZTsKLSAgICBOUEludm9rZURlZmF1bHRGdW5jdGlvblB0ciBpbnZva2VEZWZhdWx0OwotICAgIE5Q
SGFzUHJvcGVydHlGdW5jdGlvblB0ciBoYXNQcm9wZXJ0eTsKLSAgICBOUEdldFByb3BlcnR5RnVu
Y3Rpb25QdHIgZ2V0UHJvcGVydHk7Ci0gICAgTlBTZXRQcm9wZXJ0eUZ1bmN0aW9uUHRyIHNldFBy
b3BlcnR5OwotICAgIE5QUmVtb3ZlUHJvcGVydHlGdW5jdGlvblB0ciByZW1vdmVQcm9wZXJ0eTsK
LSAgICBOUEVudW1lcmF0aW9uRnVuY3Rpb25QdHIgZW51bWVyYXRlOwotICAgIE5QQ29uc3RydWN0
RnVuY3Rpb25QdHIgY29uc3RydWN0OwotfTsKLQotI2RlZmluZSBOUF9DTEFTU19TVFJVQ1RfVkVS
U0lPTiAgICAgIDMKLQotI2RlZmluZSBOUF9DTEFTU19TVFJVQ1RfVkVSU0lPTl9FTlVNIDIKLSNk
ZWZpbmUgTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT05fQ1RPUiAzCi0KLSNkZWZpbmUgTlBfQ0xBU1Nf
U1RSVUNUX1ZFUlNJT05fSEFTX0VOVU0obnBjbGFzcykgICBcCi0gICAgICAgICgobnBjbGFzcykt
PnN0cnVjdFZlcnNpb24gPj0gTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT05fRU5VTSkKLQotI2RlZmlu
ZSBOUF9DTEFTU19TVFJVQ1RfVkVSU0lPTl9IQVNfQ1RPUihucGNsYXNzKSAgIFwKLSAgICAgICAg
KChucGNsYXNzKS0+c3RydWN0VmVyc2lvbiA+PSBOUF9DTEFTU19TVFJVQ1RfVkVSU0lPTl9DVE9S
KQotCi1zdHJ1Y3QgTlBPYmplY3QgewotICAgIE5QQ2xhc3MgKl9jbGFzczsKLSAgICB1aW50MzJf
dCByZWZlcmVuY2VDb3VudDsKLSAgICAvKgotICAgICAqIEFkZGl0aW9uYWwgc3BhY2UgbWF5IGJl
IGFsbG9jYXRlZCBoZXJlIGJ5IHR5cGVzIG9mIE5QT2JqZWN0cwotICAgICAqLwotfTsKLQotLyoK
LSAgICBJZiB0aGUgY2xhc3MgaGFzIGFuIGFsbG9jYXRlIGZ1bmN0aW9uLCBOUE5fQ3JlYXRlT2Jq
ZWN0IGludm9rZXMKLSAgICB0aGF0IGZ1bmN0aW9uLCBvdGhlcndpc2UgYSBOUE9iamVjdCBpcyBh
bGxvY2F0ZWQgYW5kCi0gICAgcmV0dXJuZWQuIFRoaXMgbWV0aG9kIHdpbGwgaW5pdGlhbGl6ZSB0
aGUgcmVmZXJlbmNlQ291bnQgbWVtYmVyIG9mCi0gICAgdGhlIE5QT2JqZWN0IHRvIDEuCi0qLwot
TlBPYmplY3QgKk5QTl9DcmVhdGVPYmplY3QoTlBQIG5wcCwgTlBDbGFzcyAqYUNsYXNzKTsKLQot
LyoKLSAgICBJbmNyZW1lbnQgdGhlIE5QT2JqZWN0J3MgcmVmZXJlbmNlIGNvdW50LgotKi8KLU5Q
T2JqZWN0ICpOUE5fUmV0YWluT2JqZWN0KE5QT2JqZWN0ICpucG9iaik7Ci0KLS8qCi0gICAgRGVj
cmVtZW50ZWQgdGhlIE5QT2JqZWN0J3MgcmVmZXJlbmNlIGNvdW50LiAgSWYgdGhlIHJlZmVyZW5j
ZQotICAgIGNvdW50IGdvZXMgdG8gemVybywgdGhlIGNsYXNzJ3MgZGVzdHJveSBmdW5jdGlvbiBp
cyBpbnZva2UgaWYKLSAgICBzcGVjaWZpZWQsIG90aGVyd2lzZSB0aGUgb2JqZWN0IGlzIGZyZWVk
IGRpcmVjdGx5LgotKi8KLXZvaWQgTlBOX1JlbGVhc2VPYmplY3QoTlBPYmplY3QgKm5wb2JqKTsK
LQotLyoKLSAgICBGdW5jdGlvbnMgdG8gYWNjZXNzIHNjcmlwdCBvYmplY3RzIHJlcHJlc2VudGVk
IGJ5IE5QT2JqZWN0LgotCi0gICAgQ2FsbHMgdG8gc2NyaXB0IG9iamVjdHMgYXJlIHN5bmNocm9u
b3VzLiAgSWYgYSBmdW5jdGlvbiByZXR1cm5zIGEKLSAgICB2YWx1ZSwgaXQgd2lsbCBiZSBzdXBw
bGllZCB2aWEgdGhlIHJlc3VsdCBOUFZhcmlhbnQKLSAgICBhcmd1bWVudC4gU3VjY2Vzc2Z1bCBj
YWxscyB3aWxsIHJldHVybiB0cnVlLCBmYWxzZSB3aWxsIGJlCi0gICAgcmV0dXJuZWQgaW4gY2Fz
ZSBvZiBhbiBlcnJvci4KLSAgICAKLSAgICBDYWxscyBtYWRlIGZyb20gcGx1Z2luIGNvZGUgdG8g
c2NyaXB0IG11c3QgYmUgbWFkZSBmcm9tIHRoZSB0aHJlYWQKLSAgICBvbiB3aGljaCB0aGUgcGx1
Z2luIHdhcyBpbml0aWFsaXplZC4KLSovCi0KLWJvb2wgTlBOX0ludm9rZShOUFAgbnBwLCBOUE9i
amVjdCAqbnBvYmosIE5QSWRlbnRpZmllciBtZXRob2ROYW1lLAotICAgICAgICAgICAgICAgIGNv
bnN0IE5QVmFyaWFudCAqYXJncywgdWludDMyX3QgYXJnQ291bnQsIE5QVmFyaWFudCAqcmVzdWx0
KTsKLWJvb2wgTlBOX0ludm9rZURlZmF1bHQoTlBQIG5wcCwgTlBPYmplY3QgKm5wb2JqLCBjb25z
dCBOUFZhcmlhbnQgKmFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFyZ0Nv
dW50LCBOUFZhcmlhbnQgKnJlc3VsdCk7Ci1ib29sIE5QTl9FdmFsdWF0ZShOUFAgbnBwLCBOUE9i
amVjdCAqbnBvYmosIE5QU3RyaW5nICpzY3JpcHQsCi0gICAgICAgICAgICAgICAgICBOUFZhcmlh
bnQgKnJlc3VsdCk7Ci1ib29sIE5QTl9HZXRQcm9wZXJ0eShOUFAgbnBwLCBOUE9iamVjdCAqbnBv
YmosIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICBOUFZh
cmlhbnQgKnJlc3VsdCk7Ci1ib29sIE5QTl9TZXRQcm9wZXJ0eShOUFAgbnBwLCBOUE9iamVjdCAq
bnBvYmosIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICBj
b25zdCBOUFZhcmlhbnQgKnZhbHVlKTsKLWJvb2wgTlBOX1JlbW92ZVByb3BlcnR5KE5QUCBucHAs
IE5QT2JqZWN0ICpucG9iaiwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSk7Ci1ib29sIE5QTl9I
YXNQcm9wZXJ0eShOUFAgbnBwLCBOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciBwcm9wZXJ0
eU5hbWUpOwotYm9vbCBOUE5fSGFzTWV0aG9kKE5QUCBucHAsIE5QT2JqZWN0ICpucG9iaiwgTlBJ
ZGVudGlmaWVyIG1ldGhvZE5hbWUpOwotYm9vbCBOUE5fRW51bWVyYXRlKE5QUCBucHAsIE5QT2Jq
ZWN0ICpucG9iaiwgTlBJZGVudGlmaWVyICoqaWRlbnRpZmllciwKLSAgICAgICAgICAgICAgICAg
ICB1aW50MzJfdCAqY291bnQpOwotYm9vbCBOUE5fQ29uc3RydWN0KE5QUCBucHAsIE5QT2JqZWN0
ICpucG9iaiwgY29uc3QgTlBWYXJpYW50ICphcmdzLAotICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IGFyZ0NvdW50LCBOUFZhcmlhbnQgKnJlc3VsdCk7Ci0KLS8qCi0gICAgTlBOX1NldEV4Y2Vw
dGlvbiBtYXkgYmUgY2FsbGVkIHRvIHRyaWdnZXIgYSBzY3JpcHQgZXhjZXB0aW9uIHVwb24KLSAg
ICByZXR1cm4gZnJvbSBlbnRyeSBwb2ludHMgaW50byBOUE9iamVjdHMuICBUeXBpY2FsIHVzYWdl
OgotCi0gICAgTlBOX1NldEV4Y2VwdGlvbiAobnBvYmosIG1lc3NhZ2UpOwotKi8KLXZvaWQgTlBO
X1NldEV4Y2VwdGlvbihOUE9iamVjdCAqbnBvYmosIGNvbnN0IE5QVVRGOCAqbWVzc2FnZSk7Ci0K
LSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ucHR5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL25w
dHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAwMTI4ODg1Y2MzNDY3NDVi
ZGJhODdmODcxNjc0ZGNmYzVlMjMxYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL25wdHlwZXMuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDEyMSArMCwwIEBACi0vKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiAyOyBpbmRl
bnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLSAqLwotLyogKioqKiogQkVH
SU4gTElDRU5TRSBCTE9DSyAqKioqKgotICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwg
Mi4xCi0gKgotICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUg
TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCi0gKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5
b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSAqIHRo
ZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIGh0
dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLwotICoKLSAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCi0gKiBX
SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBT
ZWUgdGhlIExpY2Vuc2UKLSAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJp
Z2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCi0gKiBMaWNlbnNlLgotICoKLSAqIFRoZSBP
cmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3JnIGNvZGUuCi0gKgotICogVGhlIEluaXRpYWwgRGV2
ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCi0gKiBtb3ppbGxhLm9yZy4KLSAqIFBvcnRp
b25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIw
MDQKLSAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0g
KiBDb250cmlidXRvcihzKToKLSAqICAgSm9obm55IFN0ZW5iYWNrIDxqc3RAbW96aWxsYS5vcmc+
IChPcmlnaW5hbCBhdXRob3IpCi0gKgotICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9m
IHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKLSAqIGVpdGhlciB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIp
LCBvcgotICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIu
MSBvciBsYXRlciAodGhlICJMR1BMIiksCi0gKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25z
IG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAotICogb2YgdGhv
c2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhp
cyBmaWxlIG9ubHkKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUg
TEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KLSAqIHVzZSB5b3VyIHZlcnNpb24gb2Yg
dGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCi0gKiBk
ZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVt
IHdpdGggdGhlIG5vdGljZQotICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhl
IEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKLSAqIHRoZSBwcm92aXNpb25z
IGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5k
ZXIKLSAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExH
UEwuCi0gKgotICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KLQotI2lmbmRlZiBu
cHR5cGVzX2hfCi0jZGVmaW5lIG5wdHlwZXNfaF8KLQotLyoKLSAqIEhlYWRlciBmaWxlIGZvciBl
bnN1cmluZyB0aGF0IEM5OSB0eXBlcyAoW3VdaW50MzJfdCwgW3VdaW50NjRfdCBhbmQgYm9vbCkg
YW5kCi0gKiB0cnVlL2ZhbHNlIG1hY3JvcyBhcmUgYXZhaWxhYmxlLgotICovCi0KLSNpZiBkZWZp
bmVkKFdJTjMyKSB8fCBkZWZpbmVkKE9TMikKLSAgLyoKLSAgICogV2luMzIgYW5kIE9TLzIgZG9u
J3Qga25vdyBDOTksIHNvIGRlZmluZSBbdV1pbnRfMTYvMzIvNjQgaGVyZS4gVGhlIGJvb2wKLSAg
ICogaXMgcHJlZGVmaW5lZCB0aG8sIGJvdGggaW4gQyBhbmQgQysrLgotICAgKi8KLSAgdHlwZWRl
ZiBzaG9ydCBpbnQxNl90OwotICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVpbnQxNl90OwotICB0
eXBlZGVmIGludCBpbnQzMl90OwotICB0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzJfdDsKLSAg
dHlwZWRlZiBsb25nIGxvbmcgaW50NjRfdDsKLSAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcg
dWludDY0X3Q7Ci0jZWxpZiBkZWZpbmVkKF9BSVgpIHx8IGRlZmluZWQoX19zdW4pIHx8IGRlZmlu
ZWQoX19vc2ZfXykgfHwgZGVmaW5lZChJUklYKSB8fCBkZWZpbmVkKEhQVVgpCi0gIC8qCi0gICAq
IEFJWCBhbmQgU3VuT1Mgc2hpcCBhIGludHR5cGVzLmggaGVhZGVyIHRoYXQgZGVmaW5lcyBbdV1p
bnQzMl90LAotICAgKiBidXQgbm90IGJvb2wgZm9yIEMuCi0gICAqLwotICAjaW5jbHVkZSA8aW50
dHlwZXMuaD4KLQotICAjaWZuZGVmIF9fY3BsdXNwbHVzCi0gICAgdHlwZWRlZiBpbnQgYm9vbDsK
LSAgICAjZGVmaW5lIHRydWUgICAxCi0gICAgI2RlZmluZSBmYWxzZSAgMAotICAjZW5kaWYKLSNl
bGlmIGRlZmluZWQoYnNkaSkgfHwgZGVmaW5lZChGUkVFQlNEKSB8fCBkZWZpbmVkKE9QRU5CU0Qp
Ci0gIC8qCi0gICAqIEJTRC9PUywgRnJlZUJTRCwgYW5kIE9wZW5CU0Qgc2hpcCBzeXMvdHlwZXMu
aCB0aGF0IGRlZmluZSBpbnQzMl90IGFuZCAKLSAgICogdV9pbnQzMl90LgotICAgKi8KLSAgI2lu
Y2x1ZGUgPHN5cy90eXBlcy5oPgotCi0gIC8qCi0gICAqIEJTRC9PUyBzaGlwcyBubyBoZWFkZXIg
dGhhdCBkZWZpbmVzIHVpbnQzMl90LCBub3IgYm9vbCAoZm9yIEMpCi0gICAqLwotICAjaWYgZGVm
aW5lZChic2RpKQotICB0eXBlZGVmIHVfaW50MzJfdCB1aW50MzJfdDsKLSAgdHlwZWRlZiB1X2lu
dDY0X3QgdWludDY0X3Q7Ci0KLSAgI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKQotICAgIHR5cGVk
ZWYgaW50IGJvb2w7Ci0gICAgI2RlZmluZSB0cnVlICAgMQotICAgICNkZWZpbmUgZmFsc2UgIDAK
LSAgI2VuZGlmCi0gICNlbHNlCi0gIC8qCi0gICAqIEZyZWVCU0QgYW5kIE9wZW5CU0QgZGVmaW5l
IHVpbnQzMl90IGFuZCBib29sLgotICAgKi8KLSAgICAjaW5jbHVkZSA8aW50dHlwZXMuaD4KLSAg
ICAjaW5jbHVkZSA8c3RkYm9vbC5oPgotICAjZW5kaWYKLSNlbGlmIGRlZmluZWQoQkVPUykKLSAg
I2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jZWxzZQotICAvKgotICAgKiBGb3IgdGhvc2UgdGhhdCBz
aGlwIGEgc3RhbmRhcmQgQzk5IHN0ZGludC5oIGhlYWRlciBmaWxlLCBpbmNsdWRlCi0gICAqIGl0
LiBDYW4ndCBkbyB0aGUgc2FtZSBmb3Igc3RkYm9vbC5oIHRobywgc2luY2Ugc29tZSBzeXN0ZW1z
IHNoaXAKLSAgICogd2l0aCBhIHN0ZGJvb2wuaCBmaWxlIHRoYXQgZG9lc24ndCBjb21waWxlIQot
ICAgKi8KLSAgI2luY2x1ZGUgPHN0ZGludC5oPgotCi0gICNpZm5kZWYgX19jcGx1c3BsdXMKLSAg
ICAjaWYgIWRlZmluZWQoX19HTlVDX18pIHx8IChfX0dOVUNfXyA+IDIgfHwgX19HTlVDX01JTk9S
X18gPiA5NSkKLSAgICAgICNpbmNsdWRlIDxzdGRib29sLmg+Ci0gICAgI2Vsc2UKLSAgICAgIC8q
Ci0gICAgICAgKiBHQ0MgMi45MSBjYW4ndCBkZWFsIHdpdGggYSB0eXBlZGVmIGZvciBib29sLCBi
dXQgYSAjZGVmaW5lCi0gICAgICAgKiB3b3Jrcy4KLSAgICAgICAqLwotICAgICAgI2RlZmluZSBi
b29sIGludAotICAgICAgI2RlZmluZSB0cnVlICAgMQotICAgICAgI2RlZmluZSBmYWxzZSAgMAot
ICAgICNlbmRpZgotICAjZW5kaWYKLSNlbmRpZgotCi0jZW5kaWYgLyogbnB0eXBlc19oXyAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Db25maWd1cmF0aW9ucy9QbHVnaW5TZXJ2aWNlLnhj
Y29uZmlnIGIvU291cmNlL1dlYktpdC9Db25maWd1cmF0aW9ucy9QbHVnaW5TZXJ2aWNlLnhjY29u
ZmlnCmluZGV4IDRiOTJhNDBmZDQ0N2UwMTYyOGJkOGUxMjc5NTYxOTA2NWYzZmViMjEuLmViZDg0
NmY2MmQyNzY4ZTQ1Y2JhNzJiYzkwNTVmYTExMjU0NTYyN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvQ29uZmlndXJhdGlvbnMvUGx1Z2luU2VydmljZS54Y2NvbmZpZworKysgYi9Tb3VyY2Uv
V2ViS2l0L0NvbmZpZ3VyYXRpb25zL1BsdWdpblNlcnZpY2UueGNjb25maWcKQEAgLTMxLDcgKzMx
LDYgQEAgV0tfQVBQS0lUX0xERkxBR1MgPSAkKFdLX0FQUEtJVF9MREZMQUdTXyQoV0tfUExBVEZP
Uk1fTkFNRSkpOwogV0tfQVBQS0lUX0xERkxBR1NfbWFjb3N4ID0gLWZyYW1ld29yayBBcHBLaXQ7
CiAKIE9USEVSX0xERkxBR1MgPSAkKGluaGVyaXRlZCkgJChXS19BUFBLSVRfTERGTEFHUykgJChP
VEhFUl9MREZMQUdTX1BMQVRGT1JNKSAkKE9USEVSX0xERkxBR1NfVkVSU0lPTkVEX0ZSQU1FV09S
S19QQVRIKSAkKFdLX1JFTE9DQVRBQkxFX0ZSQU1FV09SS1NfTERGTEFHUyk7Ci1PVEhFUl9MREZM
QUdTX1BMQVRGT1JNW3Nkaz1tYWNvc3gqXSA9ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9QbHVnaW5Q
cm9jZXNzU2hpbS5keWxpYjsKIAogV0tfTElCUkFSWV9WQUxJREFUSU9OX0NPREVfU0lHTl9GTEFH
U1tzZGs9bWFjb3N4Kl0gPSAtLWVudGl0bGVtZW50cyAkKFdLX1BST0NFU1NFRF9YQ0VOVF9GSUxF
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Db25maWd1cmF0aW9ucy9XZWJLaXQueGNj
b25maWcgYi9Tb3VyY2UvV2ViS2l0L0NvbmZpZ3VyYXRpb25zL1dlYktpdC54Y2NvbmZpZwppbmRl
eCBmMzU2MzNjN2E0ZGFmODc3NjVhOTM5YWIxZjE0ZmY1MzZlNzRjMTljLi45ZDRkMzczNjYyMjVl
YWI3ZDk5YjVjMjc2ZWJlZWE2N2Q2ODYwMDc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Nv
bmZpZ3VyYXRpb25zL1dlYktpdC54Y2NvbmZpZworKysgYi9Tb3VyY2UvV2ViS2l0L0NvbmZpZ3Vy
YXRpb25zL1dlYktpdC54Y2NvbmZpZwpAQCAtMTczLDcgKzE3Myw3IEBAIFNFQ1RPUkRFUl9GTEFH
U19Qcm9kdWN0aW9uW3Nkaz1tYWNvc3gqXSA9IC1XbCwtb3JkZXJfZmlsZSxtYWMvV2ViS2l0Mi5v
cmRlcjsKIEVYQ0xVREVEX0lPU19SRVNPVVJDRV9GSUxFX05BTUVTID0gUmVzb3VyY2VzL2lvcy8q
OwogRVhDTFVERURfSU9TX1JFU09VUkNFX0ZJTEVfTkFNRVNbc2RrPWlwaG9uZSpdID0gOwogCi1F
WENMVURFRF9NQUNPU19QTFVHSU5fRklMRV9OQU1FU1tzZGs9aXBob25lKl0gPSBQbHVnaW5Qcm9j
ZXNzU2hpbS5keWxpYiBTZWNJdGVtU2hpbS5keWxpYiBXZWJQcm9jZXNzU2hpbS5keWxpYiAqLnBk
ZiBSZXNvdXJjZXMvbWFjLyogY29tLmFwcGxlLldlYktpdC5OZXR3b3JrUHJvY2Vzcy5zYiBjb20u
YXBwbGUuV2ViS2l0LkdQVVByb2Nlc3Muc2IgY29tLmFwcGxlLldlYktpdC5XZWJBdXRoblByb2Nl
c3Muc2IgY29tLmFwcGxlLldlYlByb2Nlc3Muc2IgY29tLmFwcGxlLldlYktpdC5wbHVnaW4tY29t
bW9uLnNiIFBsdWdJblNhbmRib3hQcm9maWxlcy8qLnNiOworRVhDTFVERURfTUFDT1NfUExVR0lO
X0ZJTEVfTkFNRVNbc2RrPWlwaG9uZSpdID0gU2VjSXRlbVNoaW0uZHlsaWIgV2ViUHJvY2Vzc1No
aW0uZHlsaWIgKi5wZGYgUmVzb3VyY2VzL21hYy8qIGNvbS5hcHBsZS5XZWJLaXQuTmV0d29ya1By
b2Nlc3Muc2IgY29tLmFwcGxlLldlYktpdC5HUFVQcm9jZXNzLnNiIGNvbS5hcHBsZS5XZWJLaXQu
V2ViQXV0aG5Qcm9jZXNzLnNiIGNvbS5hcHBsZS5XZWJQcm9jZXNzLnNiOwogCiBJTlNUQUxMSERS
U19TQ1JJUFRfUEhBU0UgPSBZRVM7CiBBUFBMWV9SVUxFU19JTl9DT1BZX0hFQURFUlMgPSAkKFdL
X1VTRV9ORVdfQlVJTERfU1lTVEVNKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZl
ZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCAx
NGYyYThjYzA2Y2M1OGVkN2QyN2JlYWZiMjdkOTI1OTFlZGY1MDA1Li41ZjVmNDczMDk2M2RiNjk1
NWVlOWI0MDkzMTNkY2IwNDBmM2M5Njg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2
ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCkBA
IC0xNDMsNyArMTQzLDYgQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAJTmV0d29ya1Byb2Nlc3Mv
d2VicnRjL1JUQ0RhdGFDaGFubmVsUmVtb3RlTWFuYWdlclByb3h5IFwKIAlOZXR3b3JrUHJvY2Vz
cy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIgXAogCU5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyIFwKLQlTaGFyZWQvUGx1Z2lucy9OUE9iamVjdE1lc3NhZ2VSZWNl
aXZlciBcCiAJU2hhcmVkL0F1eGlsaWFyeVByb2Nlc3MgXAogCVNoYXJlZC9BUEkvQ29jb2EvUmVt
b3RlT2JqZWN0UmVnaXN0cnkgXAogCVNoYXJlZC9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0
b3JQcm94eSBcCkBAIC0xNjAsNyArMTU5LDYgQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAJVUlQ
cm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSVByb3h5IFwKIAlVSVByb2Nlc3MvSW5zcGVj
dG9yL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHkgXAogCVVJUHJvY2Vzcy9JbnNwZWN0b3IvV2Vi
SW5zcGVjdG9yVUlFeHRlbnNpb25Db250cm9sbGVyUHJveHkgXAotCVVJUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblByb2Nlc3NQcm94eSBcCiAJVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkgXAogCVVJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkgXAogCVVJUHJvY2Vzcy9OZXR3b3Jr
L0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSBcCkBAIC0y
MTAsOSArMjA4LDYgQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAJV2ViUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViSW5zcGVjdG9yIFwKIAlXZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0
b3JVSSBcCiAJV2ViUHJvY2Vzcy9NZWRpYVNlc3Npb24vUmVtb3RlTWVkaWFTZXNzaW9uQ29vcmRp
bmF0b3IgXAotCVdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFn
ZXIgXAotCVdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eSBcCi0JV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uIFwKIAlXZWJQcm9jZXNzL05ldHdvcmsvV2ViU29j
a2V0Q2hhbm5lbCBcCiAJV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
biBcCiAJV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldFN0cmVhbSBcCkBAIC0yNDgsOSArMjQz
LDYgQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAJV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRh
dGVEaXNwYXRjaGVyIFwKIAlXZWJQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhuUHJv
Y2Vzc0Nvbm5lY3Rpb24gXAogCVdlYlByb2Nlc3MvWFIvUGxhdGZvcm1YUlN5c3RlbVByb3h5IFwK
LQlQbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uIFwKLQlQbHVnaW5Qcm9jZXNzL1Bs
dWdpbkNvbnRyb2xsZXJQcm94eSBcCi0JUGx1Z2luUHJvY2Vzcy9QbHVnaW5Qcm9jZXNzIFwKIAlH
UFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgXAogCUdQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlciBcCiAJR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kIFwKQEAgLTMyNSw3ICszMTcsNiBAQCBlbmRpZgogCiBTQU5EQk9Y
X1BST0ZJTEVTID0gXAogCWNvbS5hcHBsZS5XZWJQcm9jZXNzLnNiIFwKLQljb20uYXBwbGUuV2Vi
S2l0LnBsdWdpbi1jb21tb24uc2IgXAogCWNvbS5hcHBsZS5XZWJLaXQuTmV0d29ya1Byb2Nlc3Mu
c2IgXAogCWNvbS5hcHBsZS5XZWJLaXQuR1BVUHJvY2Vzcy5zYiBcCiAJY29tLmFwcGxlLldlYktp
dC5XZWJBdXRoblByb2Nlc3Muc2IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCmluZGV4IDI2ODU1MjBmODIxZDU2Njk1M2NiNDc0ZDdj
N2FlYjhiOTM1ODhhZDEuLjM1NWJiODRmY2JhN2Q2ZWFiYWE5NzUyMDIyNzZiZTlhYjNlNmZmYjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlLmNwcApAQCAtMzAsOCArMzAsNiBAQAogCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1
ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCIK
LSNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudE1hbmFnZXIuaCIKICNpbmNsdWRlICJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1h
bmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKaW5kZXggNDkzZTQzYWUwYjZiYmU4
ODc1Yjk5YzY2YTU4MmZhZTZiNTQ3NjBjZC4uMjAxZDFhZmRmNzMyZTJiY2YwZjU4ZGEzMTAwMjQw
OGJiN2FhYWE2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFz
c2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5j
cHAKQEAgLTMxLDggKzMxLDYgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0
d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgotI2luY2x1ZGUgIlBs
dWdpblByb2Nlc3NNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc1Byb3h5LmgiCiAj
aW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94
eS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIKQEAgLTE2NCwxMiArMTYyLDYgQEAg
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZURhdGFSZWNvcmRzKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0jaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgbV9hY3RpdmVQbHVnaW5Ub2tlbnMuY2xlYXIo
KTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHBsdWdpbiA6IFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpz
aW5nbGV0b24oKS5wbHVnaW5Qcm9jZXNzZXMoKSkKLSAgICAgICAgbV9hY3RpdmVQbHVnaW5Ub2tl
bnMuYWRkKHBsdWdpbi0+cGx1Z2luUHJvY2Vzc1Rva2VuKCkpOwotI2VuZGlmCi0KICAgICBhdXRv
IGRvbWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvciA9IHJlZ2lzdHJhYmxlRG9t
YWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yKCk7CiAgICAgaWYgKGRvbWFpbnNU
b0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvci5pc0VtcHR5KCkpIHsKICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKQEAgLTM5MiwxMyArMzg0LDYgQEAgYm9vbCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnNob3VsZFJlbW92ZURhdGFSZWNvcmRzKCkgY29uc3QKICAgICBpZiAo
bV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0jaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgZm9yIChjb25zdCBhdXRvJiBwbHVnaW4g
OiBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkucGx1Z2luUHJvY2Vzc2VzKCkpIHsK
LSAgICAgICAgaWYgKCFtX2FjdGl2ZVBsdWdpblRva2Vucy5jb250YWlucyhwbHVnaW4tPnBsdWdp
blByb2Nlc3NUb2tlbigpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSNlbmRp
ZgotCiAgICAgcmV0dXJuICFtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCB8fCBNb25v
dG9uaWNUaW1lOjpub3coKSA+PSAobV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgKyBt
X3BhcmFtZXRlcnMubWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKSB8fCBwYXJh
bWV0ZXJzKCkuaXNSdW5uaW5nVGVzdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oCmluZGV4IDlhOTgzYWRjNzcyMTg5OWNhMjdkNjJiOTY2YTE0ZWEyYzNhZjkx
NDUuLjFhM2IwOGJmNzNlMTRmYzdjZTBhNjU3ZGU1ODNmOWYyMmQ0YWE4MjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZp
ZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKQEAgLTI3Miw5ICsyNzIsNiBAQCBwcml2
YXRlOgogICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EgbV9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcjsKICNlbHNlCiAgICAgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0NsYXNzaWZpZXIgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcjsKLSNlbmRp
ZgotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIEhhc2hTZXQ8dWludDY0X3Q+
IG1fYWN0aXZlUGx1Z2luVG9rZW5zOwogI2VuZGlmCiAgICAgUGFyYW1ldGVycyBtX3BhcmFtZXRl
cnM7CiAgICAgV2FsbFRpbWUgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Ns
YXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAppbmRleCA1Mzk5NTQ1
NWY3NWYzYzViZjRiZjk2MjM4ZjYzZjNkNzIzNzVmNDFmLi5kZTc2NWRlNDUwNzFmNDFmM2ZjNGQ0
Njk3MDUzODE2ZTE4OTllYmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmNwcApAQCAtNjksOSArNjksNiBAQCBjb25zdCBPcHRpb25TZXQ8V2Vic2l0
ZURhdGFUeXBlPiYgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptb25pdG9yZWREYXRh
VAogICAgICAgICBXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSwKICAgICAgICAgV2Vic2l0
ZURhdGFUeXBlOjpNZWRpYUtleXMsCiAgICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6T2ZmbGluZVdl
YkFwcGxpY2F0aW9uQ2FjaGUsCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAg
ICAgIFdlYnNpdGVEYXRhVHlwZTo6UGx1Z0luRGF0YSwKLSNlbmRpZgogICAgICAgICBXZWJzaXRl
RGF0YVR5cGU6OlNlYXJjaEZpZWxkUmVjZW50U2VhcmNoZXMsCiAgICAgICAgIFdlYnNpdGVEYXRh
VHlwZTo6U2Vzc2lvblN0b3JhZ2UsCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm1NYWMuY21ha2UKaW5kZXggMDY1NDliODk3MDhhNDQxMjk3MGQzYTE5ZTg0MjVlNmNmNmEx
ZjQ5MC4uMzMyOWE4ZjU1OWMwY2NmNTRjOTU3ZmQwMzMwODQwMjgxN2ZlNjBlYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtTWFjLmNtYWtlCkBAIC0xODEsMTEgKzE4MSw2IEBAIHNldChOZXR3b3JrUHJvY2Vzc19T
T1VSQ0VTCiAgICAgJHtYUENTZXJ2aWNlX1NPVVJDRVN9CiApCiAKLXNldChQbHVnaW5Qcm9jZXNz
X1NPVVJDRVMKLSAgICBQbHVnaW5Qcm9jZXNzL0VudHJ5UG9pbnQvQ29jb2EvWFBDU2VydmljZS9Q
bHVnaW5TZXJ2aWNlRW50cnlQb2ludC5tbQotICAgICR7WFBDU2VydmljZV9TT1VSQ0VTfQotKQot
CiBzZXQoR1BVUHJvY2Vzc19TT1VSQ0VTCiAgICAgR1BVUHJvY2Vzcy9FbnRyeVBvaW50L0NvY29h
L1hQQ1NlcnZpY2UvR1BVU2VydmljZUVudHJ5UG9pbnQubW0KICAgICAke1hQQ1NlcnZpY2VfU09V
UkNFU30KQEAgLTE5OSwxMyArMTk0LDExIEBAIHNldChXZWJBdXRoblByb2Nlc3NfU09VUkNFUwog
IyBGSVhNRTogVGhlc2Ugc2hvdWxkIG5vdCBoYXZlIERldmVsb3BtZW50IGluIHByb2R1Y3Rpb24g
YnVpbGRzLgogc2V0KFdlYlByb2Nlc3NfT1VUUFVUX05BTUUgY29tLmFwcGxlLldlYktpdC5XZWJD
b250ZW50LkRldmVsb3BtZW50KQogc2V0KE5ldHdvcmtQcm9jZXNzX09VVFBVVF9OQU1FIGNvbS5h
cHBsZS5XZWJLaXQuTmV0d29ya2luZy5EZXZlbG9wbWVudCkKLXNldChQbHVnaW5Qcm9jZXNzX09V
VFBVVF9OQU1FIGNvbS5hcHBsZS5XZWJLaXQuUGx1Z2luLjY0LkRldmVsb3BtZW50KQogc2V0KEdQ
VVByb2Nlc3NfT1VUUFVUX05BTUUgY29tLmFwcGxlLldlYktpdC5HUFUuRGV2ZWxvcG1lbnQpCiBz
ZXQoV2ViQXV0aG5Qcm9jZXNzX09VVFBVVF9OQU1FIGNvbS5hcHBsZS5XZWJLaXQuV2ViQXV0aG4u
RGV2ZWxvcG1lbnQpCiAKIHNldChXZWJQcm9jZXNzX0lOQ0xVREVfRElSRUNUT1JJRVMgJHtDTUFL
RV9CSU5BUllfRElSfSkKIHNldChOZXR3b3JrUHJvY2Vzc19JTkNMVURFX0RJUkVDVE9SSUVTICR7
Q01BS0VfQklOQVJZX0RJUn0pCi1zZXQoUGx1Z2luUHJvY2Vzc19JTkNMVURFX0RJUkVDVE9SSUVT
ICR7Q01BS0VfQklOQVJZX0RJUn0pCiAKIGFkZF9kZWZpbml0aW9ucygiLWluY2x1ZGUgV2ViS2l0
MlByZWZpeC5oIikKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL0Vu
dHJ5UG9pbnQvQ29jb2EvWFBDU2VydmljZS9QbHVnaW5TZXJ2aWNlLkluZm8ucGxpc3QgYi9Tb3Vy
Y2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvRW50cnlQb2ludC9Db2NvYS9YUENTZXJ2aWNlL1BsdWdp
blNlcnZpY2UuSW5mby5wbGlzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJiMDJh
YzgzZjAxZmM1MGQxMmUzYTUzMmUwN2I1MGRlZWNlNDI3YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvRW50
cnlQb2ludC9Db2NvYS9YUENTZXJ2aWNlL1BsdWdpblNlcnZpY2UuSW5mby5wbGlzdAorKysgL2Rl
di9udWxsCkBAIC0xLDU2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVU
Ri04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8v
RU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxw
bGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0JPGtleT5DRkJ1bmRsZUdldEluZm9TdHJpbmc8
L2tleT4KLQk8c3RyaW5nPiR7QlVORExFX1ZFUlNJT059LCBDb3B5cmlnaHQgMjAwMy0yMDIxIEFw
cGxlIEluYy48L3N0cmluZz4KLQk8a2V5PkNGQnVuZGxlRGV2ZWxvcG1lbnRSZWdpb248L2tleT4K
LQk8c3RyaW5nPkVuZ2xpc2g8L3N0cmluZz4KLQk8a2V5PkNGQnVuZGxlRXhlY3V0YWJsZTwva2V5
PgotCTxzdHJpbmc+JHtFWEVDVVRBQkxFX05BTUV9PC9zdHJpbmc+Ci0JPGtleT5DRkJ1bmRsZUlk
ZW50aWZpZXI8L2tleT4KLQk8c3RyaW5nPiR7UFJPRFVDVF9CVU5ETEVfSURFTlRJRklFUn08L3N0
cmluZz4KLQk8a2V5PkNGQnVuZGxlSW5mb0RpY3Rpb25hcnlWZXJzaW9uPC9rZXk+Ci0JPHN0cmlu
Zz42LjA8L3N0cmluZz4KLQk8a2V5PkNGQnVuZGxlTmFtZTwva2V5PgotCTxzdHJpbmc+JHtQUk9E
VUNUX05BTUV9PC9zdHJpbmc+Ci0JPGtleT5DRkJ1bmRsZVBhY2thZ2VUeXBlPC9rZXk+Ci0JPHN0
cmluZz5YUEMhPC9zdHJpbmc+Ci0JPGtleT5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZzwva2V5
PgotCTxzdHJpbmc+JHtTSE9SVF9WRVJTSU9OX1NUUklOR308L3N0cmluZz4KLQk8a2V5PkNGQnVu
ZGxlU2lnbmF0dXJlPC9rZXk+Ci0JPHN0cmluZz4/Pz8/PC9zdHJpbmc+Ci0JPGtleT5DRkJ1bmRs
ZVZlcnNpb248L2tleT4KLQk8c3RyaW5nPiR7QlVORExFX1ZFUlNJT059PC9zdHJpbmc+Ci0JPGtl
eT5MU0ZpbGVRdWFyYW50aW5lRW5hYmxlZDwva2V5PgotCTxmYWxzZS8+Ci0JPGtleT5OU1ByaW5j
aXBhbENsYXNzPC9rZXk+Ci0JPHN0cmluZz5OU0FwcGxpY2F0aW9uPC9zdHJpbmc+Ci0JPGtleT5M
U1VJRWxlbWVudDwva2V5PgotCTx0cnVlLz4KLQk8a2V5Pk5TU3VwcG9ydHNBdXRvbWF0aWNHcmFw
aGljc1N3aXRjaGluZzwva2V5PgotCTx0cnVlLz4KLQk8a2V5Pk5TU3VwcG9ydHNBcHBOYXA8L2tl
eT4KLQk8dHJ1ZS8+Ci0JPGtleT5YUENTZXJ2aWNlPC9rZXk+Ci0JPGRpY3Q+Ci0JCTxrZXk+U2Vy
dmljZVR5cGU8L2tleT4KLQkJPHN0cmluZz5BcHBsaWNhdGlvbjwvc3RyaW5nPgotCQk8a2V5PlJ1
bkxvb3BUeXBlPC9rZXk+Ci0JCTxzdHJpbmc+X05TQXBwbGljYXRpb25NYWluPC9zdHJpbmc+Ci0J
CTxrZXk+Sm9pbkV4aXN0aW5nU2Vzc2lvbjwva2V5PgotCQk8dHJ1ZS8+Ci0JCTxrZXk+X011bHRp
cGxlSW5zdGFuY2VzPC9rZXk+Ci0JCTx0cnVlLz4KLQkJPGtleT5fQWJhbmRvbkNvYWxpdGlvbjwv
a2V5PgotCQk8dHJ1ZS8+Ci0JCTxrZXk+X0hpZ2hCaXRzQVNMUjwva2V5PgotCQk8dHJ1ZS8+Ci0J
CTxrZXk+RW52aXJvbm1lbnRWYXJpYWJsZXM8L2tleT4KLQkJPGRpY3Q+Ci0JCQk8a2V5Pk5TU3Ry
aW5nRGlzYWJsZVRhZ2dlZDwva2V5PgotCQkJPHN0cmluZz5ZRVM8L3N0cmluZz4KLQkJPC9kaWN0
PgotCTwvZGljdD4KLTwvZGljdD4KLTwvcGxpc3Q+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1BsdWdpblByb2Nlc3MvRW50cnlQb2ludC9Db2NvYS9YUENTZXJ2aWNlL1BsdWdpblNlcnZpY2VF
bnRyeVBvaW50Lm1tIGIvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL0VudHJ5UG9pbnQvQ29j
b2EvWFBDU2VydmljZS9QbHVnaW5TZXJ2aWNlRW50cnlQb2ludC5tbQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMzQ3NGMzZTQ1NDBjYmE4ODc4MzljMWRjNzEyMmM4OTRhYjE3MDc1OS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1BsdWdpblByb2Nlc3MvRW50cnlQb2ludC9Db2NvYS9YUENTZXJ2aWNlL1BsdWdpblNlcnZp
Y2VFbnRyeVBvaW50Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotCi0jaW1wb3J0ICJFbnZpcm9ubWVudFV0aWxpdGllcy5o
IgotI2ltcG9ydCAiUGx1Z2luUHJvY2Vzcy5oIgotI2ltcG9ydCAiV0tCYXNlLmgiCi0jaW1wb3J0
ICJYUENTZXJ2aWNlRW50cnlQb2ludC5oIgotI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KLQotI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xh
c3MgUGx1Z2luU2VydmljZUluaXRpYWxpemVyRGVsZWdhdGUgOiBwdWJsaWMgWFBDU2VydmljZUlu
aXRpYWxpemVyRGVsZWdhdGUgewotcHVibGljOgotICAgIFBsdWdpblNlcnZpY2VJbml0aWFsaXpl
ckRlbGVnYXRlKE9TT2JqZWN0UHRyPHhwY19jb25uZWN0aW9uX3Q+IGNvbm5lY3Rpb24sIHhwY19v
YmplY3RfdCBpbml0aWFsaXplck1lc3NhZ2UpCi0gICAgICAgIDogWFBDU2VydmljZUluaXRpYWxp
emVyRGVsZWdhdGUoV1RGTW92ZShjb25uZWN0aW9uKSwgaW5pdGlhbGl6ZXJNZXNzYWdlKQotICAg
IHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RXh0cmFJbml0aWFsaXphdGlvbkRhdGEo
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGV4dHJhSW5pdGlhbGl6YXRpb25EYXRhKQotICAgIHsK
LSAgICAgICAgeHBjX29iamVjdF90IGV4dHJhRGF0YUluaXRpYWxpemF0aW9uRGF0YU9iamVjdCA9
IHhwY19kaWN0aW9uYXJ5X2dldF92YWx1ZShtX2luaXRpYWxpemVyTWVzc2FnZSwgImV4dHJhLWlu
aXRpYWxpemF0aW9uLWRhdGEiKTsKLQotICAgICAgICBTdHJpbmcgcGx1Z2luUGF0aCA9IHhwY19k
aWN0aW9uYXJ5X2dldF9zdHJpbmcoZXh0cmFEYXRhSW5pdGlhbGl6YXRpb25EYXRhT2JqZWN0LCAi
cGx1Z2luLXBhdGgiKTsKLSAgICAgICAgaWYgKHBsdWdpblBhdGguaXNFbXB0eSgpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uRGF0YS5hZGQo
InBsdWdpbi1wYXRoIiwgcGx1Z2luUGF0aCk7Ci0KLSAgICAgICAgU3RyaW5nIGRpc2FibGVTYW5k
Ym94ID0geHBjX2RpY3Rpb25hcnlfZ2V0X3N0cmluZyhleHRyYURhdGFJbml0aWFsaXphdGlvbkRh
dGFPYmplY3QsICJkaXNhYmxlLXNhbmRib3giKTsKLSAgICAgICAgaWYgKCFkaXNhYmxlU2FuZGJv
eC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uRGF0YS5hZGQoImRp
c2FibGUtc2FuZGJveCIsIGRpc2FibGVTYW5kYm94KTsKLQotICAgICAgICBTdHJpbmcgZXhwZXJp
bWVudGFsU2FuZGJveFBsdWdJbiA9IHhwY19kaWN0aW9uYXJ5X2dldF9zdHJpbmcoZXh0cmFEYXRh
SW5pdGlhbGl6YXRpb25EYXRhT2JqZWN0LCAiZXhwZXJpbWVudGFsLXNhbmRib3gtcGx1Z2luIik7
Ci0gICAgICAgIGlmICghZXhwZXJpbWVudGFsU2FuZGJveFBsdWdJbi5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uRGF0YS5hZGQoImV4cGVyaW1lbnRhbC1zYW5kYm94
LXBsdWdpbiJfcywgZXhwZXJpbWVudGFsU2FuZGJveFBsdWdJbik7Ci0KLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLXVzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQot
ZXh0ZXJuICJDIiBXS19FWFBPUlQgdm9pZCBQTFVHSU5fU0VSVklDRV9JTklUSUFMSVpFUih4cGNf
Y29ubmVjdGlvbl90IGNvbm5lY3Rpb24sIHhwY19vYmplY3RfdCBpbml0aWFsaXplck1lc3NhZ2Us
IHhwY19vYmplY3RfdCBwcmlvcml0eUJvb3N0TWVzc2FnZSk7Ci0KLXZvaWQgUExVR0lOX1NFUlZJ
Q0VfSU5JVElBTElaRVIoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uLCB4cGNfb2JqZWN0X3Qg
aW5pdGlhbGl6ZXJNZXNzYWdlLCB4cGNfb2JqZWN0X3QgcHJpb3JpdHlCb29zdE1lc3NhZ2UpCi17
Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgV1RGOjppbml0aWFsaXplTWFp
blRocmVhZCgpOwotCi0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciB0ZWFyZG93biBmcm9t
IFBsdWdpblByb2Nlc3NNYWluLm1tCi0KLSAgICAvLyBSZW1vdmUgdGhlIFBsdWdpblByb2Nlc3Mg
c2hpbSBmcm9tIHRoZSBEWUxEX0lOU0VSVF9MSUJSQVJJRVMgZW52aXJvbm1lbnQgdmFyaWFibGUg
c28gYW55IHByb2Nlc3NlcwotICAgIC8vIHNwYXduZWQgYnkgdGhlIFBsdWdpblByb2Nlc3MgZG9u
J3QgdHJ5IHRvIGluc2VydCB0aGUgc2hpbSBhbmQgY3Jhc2guCi0gICAgRW52aXJvbm1lbnRVdGls
aXRpZXM6OnJlbW92ZVZhbHVlc0VuZGluZ1dpdGgoIkRZTERfSU5TRVJUX0xJQlJBUklFUyIsICIv
UGx1Z2luUHJvY2Vzc1NoaW0uZHlsaWIiKTsKLSAgICBYUENTZXJ2aWNlSW5pdGlhbGl6ZXI8UGx1
Z2luUHJvY2VzcywgUGx1Z2luU2VydmljZUluaXRpYWxpemVyRGVsZWdhdGU+KGNvbm5lY3Rpb24s
IGluaXRpYWxpemVyTWVzc2FnZSwgcHJpb3JpdHlCb29zdE1lc3NhZ2UpOwotI2VuZGlmIC8vIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Q
bHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1Bs
dWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggY2JkMDRkOTliN2MyNzE2NzFjODc1MmIxOGE5MmU0MjE1ODU2YzllMS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDY3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlBsdWdpbkNvbnRyb2xsZXJQcm94eS5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCi0KLSNpbmNsdWRlICJOUE9iamVjdFByb3h5LmgiCi0jaW5jbHVkZSAiTlBSZW1vdGVP
YmplY3RNYXAuaCIKLSNpbmNsdWRlICJOUFJ1bnRpbWVVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJO
UFZhcmlhbnREYXRhLmgiCi0jaW5jbHVkZSAiTmV0c2NhcGVQbHVnaW4uaCIKLSNpbmNsdWRlICJQ
bHVnaW5DcmVhdGlvblBhcmFtZXRlcnMuaCIKLSNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzLmgiCi0j
aW5jbHVkZSAiUGx1Z2luUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1h
cC5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIldlYlBy
b2Nlc3NDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdl
cy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9IVFRQSGVhZGVyTWFwLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JZGVudGlmaWVyUmVwLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9TZXRG
b3JTY29wZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgUExBVEZP
Uk0oQ09DT0EpCi0jaW5jbHVkZSAiTGF5ZXJIb3N0aW5nQ29udGV4dC5oIgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVBsdWdpbkNvbnRy
b2xsZXJQcm94eTo6UGx1Z2luQ29udHJvbGxlclByb3h5KFdlYlByb2Nlc3NDb25uZWN0aW9uKiBj
b25uZWN0aW9uLCBjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmIGNyZWF0aW9uUGFyYW1l
dGVycykKLSAgICA6IG1fY29ubmVjdGlvbihjb25uZWN0aW9uKQotICAgICwgbV9wbHVnaW5JbnN0
YW5jZUlEKGNyZWF0aW9uUGFyYW1ldGVycy5wbHVnaW5JbnN0YW5jZUlEKQotICAgICwgbV91c2Vy
QWdlbnQoY3JlYXRpb25QYXJhbWV0ZXJzLnVzZXJBZ2VudCkKLSAgICAsIG1faXNQcml2YXRlQnJv
d3NpbmdFbmFibGVkKGNyZWF0aW9uUGFyYW1ldGVycy5pc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQp
Ci0gICAgLCBtX2lzTXV0ZWQoY3JlYXRpb25QYXJhbWV0ZXJzLmlzTXV0ZWQpCi0gICAgLCBtX2lz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoY3JlYXRpb25QYXJhbWV0ZXJzLmlzQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQpCi0gICAgLCBtX2lzSW5pdGlhbGl6aW5nKGZhbHNlKQot
ICAgICwgbV9pc1Zpc2libGUoZmFsc2UpCi0gICAgLCBtX2lzV2luZG93VmlzaWJsZShmYWxzZSkK
LSAgICAsIG1fcGFpbnRUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZQbHVnaW5Db250cm9s
bGVyUHJveHk6OnBhaW50KQotICAgICwgbV9wbHVnaW5EZXN0cnVjdGlvblByb3RlY3RDb3VudCgw
KQotICAgICwgbV9wbHVnaW5EZXN0cm95VGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmUGx1
Z2luQ29udHJvbGxlclByb3h5OjpkZXN0cm95KQotICAgICwgbV93YWl0aW5nRm9yRGlkVXBkYXRl
KGZhbHNlKQotICAgICwgbV9wbHVnaW5DYW5jZWxlZE1hbnVhbFN0cmVhbUxvYWQoZmFsc2UpCi0j
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgLCBtX2lzQ29tcGxleFRleHRJbnB1dEVuYWJsZWQoZmFs
c2UpCi0jZW5kaWYKLSAgICAsIG1fY29udGVudHNTY2FsZUZhY3RvcihjcmVhdGlvblBhcmFtZXRl
cnMuY29udGVudHNTY2FsZUZhY3RvcikKLSAgICAsIG1fd2luZG93TlBPYmplY3QoMCkKLSAgICAs
IG1fcGx1Z2luRWxlbWVudE5QT2JqZWN0KDApCi0gICAgLCBtX3Zpc2libGl0eUFjdGl2aXR5KCJQ
bHVnaW4gaXMgdmlzaWJsZS4iKQotewotfQotCi1QbHVnaW5Db250cm9sbGVyUHJveHk6On5QbHVn
aW5Db250cm9sbGVyUHJveHkoKQotewotICAgIEFTU0VSVCghbV9wbHVnaW4pOwotCi0gICAgaWYg
KG1fd2luZG93TlBPYmplY3QpCi0gICAgICAgIHJlbGVhc2VOUE9iamVjdChtX3dpbmRvd05QT2Jq
ZWN0KTsKLQotICAgIGlmIChtX3BsdWdpbkVsZW1lbnROUE9iamVjdCkKLSAgICAgICAgcmVsZWFz
ZU5QT2JqZWN0KG1fcGx1Z2luRWxlbWVudE5QT2JqZWN0KTsKLX0KLQotdm9pZCBQbHVnaW5Db250
cm9sbGVyUHJveHk6OnNldEluaXRpYWxpemF0aW9uUmVwbHkoTWVzc2FnZXM6OldlYlByb2Nlc3ND
b25uZWN0aW9uOjpDcmVhdGVQbHVnaW46OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQotewotICAgIEFT
U0VSVCghbV9pbml0aWFsaXphdGlvblJlcGx5KTsKLSAgICBtX2luaXRpYWxpemF0aW9uUmVwbHkg
PSBXVEZNb3ZlKHJlcGx5KTsKLX0KLQotTWVzc2FnZXM6OldlYlByb2Nlc3NDb25uZWN0aW9uOjpD
cmVhdGVQbHVnaW46OkRlbGF5ZWRSZXBseSBQbHVnaW5Db250cm9sbGVyUHJveHk6OnRha2VJbml0
aWFsaXphdGlvblJlcGx5KCkKLXsKLSAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2luaXRpYWxp
emF0aW9uUmVwbHksIG51bGxwdHIpOwotfQotCi1ib29sIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6
aW5pdGlhbGl6ZShjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmIGNyZWF0aW9uUGFyYW1l
dGVycykKLXsKLSAgICBBU1NFUlQoIW1fcGx1Z2luKTsKLQotICAgIEFTU0VSVCghbV9pc0luaXRp
YWxpemluZyk7Ci0gICAgbV9pc0luaXRpYWxpemluZyA9IHRydWU7IC8vIENhbm5vdCB1c2UgU2V0
Rm9yU2NvcGUgaGVyZSwgYmVjYXVzZSB0aGlzIG9iamVjdCBjYW4gYmUgZGVsZXRlZCBiZWZvcmUg
dGhlIGZ1bmN0aW9uIHJldHVybnMuCi0KLSAgICBtX3BsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpj
cmVhdGUoUGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0c2NhcGVQbHVnaW5Nb2R1bGUoKSk7
Ci0gICAgaWYgKCFtX3BsdWdpbikgewotICAgICAgICAvLyBUaGlzIHdpbGwgZGVsZXRlIHRoZSBw
bHVnLWluIGNvbnRyb2xsZXIgcHJveHkgb2JqZWN0LgotICAgICAgICBtX2Nvbm5lY3Rpb24tPnJl
bW92ZVBsdWdpbkNvbnRyb2xsZXJQcm94eSh0aGlzLCAwKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGlmIChjcmVhdGlvblBhcmFtZXRlcnMud2luZG93TlBPYmplY3RJRCkK
LSAgICAgICAgbV93aW5kb3dOUE9iamVjdCA9IG1fY29ubmVjdGlvbi0+bnBSZW1vdGVPYmplY3RN
YXAoKS0+Y3JlYXRlTlBPYmplY3RQcm94eShjcmVhdGlvblBhcmFtZXRlcnMud2luZG93TlBPYmpl
Y3RJRCwgbV9wbHVnaW4uZ2V0KCkpOwotCi0gICAgYm9vbCByZXR1cm5WYWx1ZSA9IG1fcGx1Z2lu
LT5pbml0aWFsaXplKCp0aGlzLCBjcmVhdGlvblBhcmFtZXRlcnMucGFyYW1ldGVycyk7Ci0KLSAg
ICBpZiAoIXJldHVyblZhbHVlKSB7Ci0gICAgICAgIC8vIEdldCB0aGUgcGx1Zy1pbiBzbyB3ZSBj
YW4gcGFzcyBpdCB0byByZW1vdmVQbHVnaW5Db250cm9sbGVyUHJveHkuIFRoZSBwb2ludGVyIGlz
IG9ubHkKLSAgICAgICAgLy8gdXNlZCBhcyBhbiBpZGVudGlmaWVyIHNvIGl0J3MgT0sgdG8ganVz
dCBnZXQgYSB3ZWFrIHJlZmVyZW5jZS4KLSAgICAgICAgUGx1Z2luKiBwbHVnaW4gPSBtX3BsdWdp
bi5nZXQoKTsKLSAgICAgICAgCi0gICAgICAgIG1fcGx1Z2luID0gbnVsbHB0cjsKLQotICAgICAg
ICAvLyBUaGlzIHdpbGwgZGVsZXRlIHRoZSBwbHVnLWluIGNvbnRyb2xsZXIgcHJveHkgb2JqZWN0
LgotICAgICAgICBtX2Nvbm5lY3Rpb24tPnJlbW92ZVBsdWdpbkNvbnRyb2xsZXJQcm94eSh0aGlz
LCBwbHVnaW4pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcGxhdGZvcm1J
bml0aWFsaXplKGNyZWF0aW9uUGFyYW1ldGVycyk7Ci0KLSAgICBtX2lzSW5pdGlhbGl6aW5nID0g
ZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5
OjpkZXN0cm95KCkKLXsKLSAgICBBU1NFUlQobV9wbHVnaW4pOwotCi0gICAgLy8gRklYTUU6IENv
bnNpZGVyIHJlbW92aW5nIG1fcGx1Z2luRGVzdHJ1Y3Rpb25Qcm90ZWN0Q291bnQgYW5kIGFsd2F5
cyB1c2UgaW5TZW5kU3luYyBoZXJlLgotICAgIGlmIChtX3BsdWdpbkRlc3RydWN0aW9uUHJvdGVj
dENvdW50IHx8IG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5pblNlbmRTeW5jKCkpIHsKLSAg
ICAgICAgLy8gV2UgaGF2ZSBwbHVnLWluIGNvZGUgb24gdGhlIHN0YWNrIHNvIHdlIGNhbid0IGRl
c3Ryb3kgaXQgcmlnaHQgbm93LgotICAgICAgICAvLyBEZXN0cm95IGl0IGxhdGVyLgotICAgICAg
ICBtX3BsdWdpbkRlc3Ryb3lUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIC8vIEdldCB0aGUgcGx1Zy1pbiBzbyB3ZSBjYW4gcGFzcyBpdCB0byBy
ZW1vdmVQbHVnaW5Db250cm9sbGVyUHJveHkuIFRoZSBwb2ludGVyIGlzIG9ubHkKLSAgICAvLyB1
c2VkIGFzIGFuIGlkZW50aWZpZXIgc28gaXQncyBPSyB0byBqdXN0IGdldCBhIHdlYWsgcmVmZXJl
bmNlLgotICAgIFBsdWdpbiogcGx1Z2luID0gbV9wbHVnaW4uZ2V0KCk7Ci0KLSAgICBtX3BsdWdp
bi0+ZGVzdHJveVBsdWdpbigpOwotICAgIG1fcGx1Z2luID0gbnVsbHB0cjsKLQotICAgIHBsYXRm
b3JtRGVzdHJveSgpOwotCi0gICAgLy8gVGhpcyB3aWxsIGRlbGV0ZSB0aGUgcGx1Zy1pbiBjb250
cm9sbGVyIHByb3h5IG9iamVjdC4KLSAgICBtX2Nvbm5lY3Rpb24tPnJlbW92ZVBsdWdpbkNvbnRy
b2xsZXJQcm94eSh0aGlzLCBwbHVnaW4pOwotfQotCi1ib29sIFBsdWdpbkNvbnRyb2xsZXJQcm94
eTo6d2FudHNXaGVlbEV2ZW50cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGx1Z2luLT53YW50
c1doZWVsRXZlbnRzKCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpwYWludCgp
Ci17Ci0gICAgQVNTRVJUKCFtX2RpcnR5UmVjdC5pc0VtcHR5KCkpOwotICAgIG1fcGFpbnRUaW1l
ci5zdG9wKCk7Ci0KLSAgICBpZiAoIW1fYmFja2luZ1N0b3JlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IG1fZGlydHlSZWN0OwotICAgIG1fZGlydHlSZWN0ID0g
SW50UmVjdCgpOwotCi0gICAgQVNTRVJUKG1fcGx1Z2luKTsKLQotICAgIC8vIENyZWF0ZSBhIGdy
YXBoaWNzIGNvbnRleHQuCi0gICAgYXV0byBncmFwaGljc0NvbnRleHQgPSBtX2JhY2tpbmdTdG9y
ZS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgaWYgKCFncmFwaGljc0NvbnRleHQpCi0g
ICAgICAgIHJldHVybjsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgcmVhbGx5IGNhbGwgYXBwbHlEZXZpY2VTY2FsZUZhY3RvciBpbnN0ZWFkIG9mIHNjYWxl
LCBidXQgdGhhdCBlbmRzIHVwIGNhbGxpbmcgaW50byBXS1NJCi0gICAgLy8gd2hpY2ggd2UgY3Vy
cmVudGx5IGRvbid0IGhhdmUgaW5pdGlhdGVkIGluIHRoZSBwbHVnLWluIHByb2Nlc3MuCi0gICAg
Z3JhcGhpY3NDb250ZXh0LT5zY2FsZShtX2NvbnRlbnRzU2NhbGVGYWN0b3IpOwotI2VuZGlmCi0K
LSAgICBpZiAobV9wbHVnaW4tPmlzVHJhbnNwYXJlbnQoKSkKLSAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LT5jbGVhclJlY3QoZGlydHlSZWN0KTsKLQotICAgIG1fcGx1Z2luLT5wYWludCgqZ3JhcGhp
Y3NDb250ZXh0LCBkaXJ0eVJlY3QpOwotCi0gICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OlBsdWdpblByb3h5OjpVcGRhdGUoZGlydHlSZWN0KSwgbV9wbHVnaW5J
bnN0YW5jZUlEKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnN0YXJ0UGFpbnRU
aW1lcigpCi17Ci0gICAgLy8gQ2hlY2sgaWYgd2Ugc2hvdWxkIHN0YXJ0IHRoZSB0aW1lci4KLSAg
ICAKLSAgICBpZiAobV9kaXJ0eVJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBGSVhNRTogQ2hlY2sgY2xpcCByZWN0LgotICAgIAotICAgIGlmIChtX3BhaW50VGltZXIu
aXNBY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fd2FpdGluZ0ZvckRpZFVw
ZGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU3RhcnQgdGhlIHRpbWVyLgotICAgIG1f
cGFpbnRUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLQotICAgIG1fd2FpdGluZ0ZvckRpZFVwZGF0
ZSA9IHRydWU7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjppbnZhbGlkYXRlKGNv
bnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgSW50UmVjdCBkaXJ0eVJlY3QgPSByZWN0OwotCi0g
ICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGRpcnR5IHJlY3QgaXMgbm90IGdyZWF0ZXIgdGhhbiB0
aGUgcGx1Zy1pbiBpdHNlbGYuCi0gICAgZGlydHlSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBv
aW50KCksIG1fcGx1Z2luU2l6ZSkpOwotICAgIG1fZGlydHlSZWN0LnVuaXRlKGRpcnR5UmVjdCk7
Ci0KLSAgICBzdGFydFBhaW50VGltZXIoKTsKLX0KLQotU3RyaW5nIFBsdWdpbkNvbnRyb2xsZXJQ
cm94eTo6dXNlckFnZW50KCkKLXsKLSAgICByZXR1cm4gbV91c2VyQWdlbnQ7Ci19Ci0KLXZvaWQg
UGx1Z2luQ29udHJvbGxlclByb3h5Ojpsb2FkVVJMKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3Qg
U3RyaW5nJiBtZXRob2QsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRh
cmdldCwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVyRmllbGRzLCBjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGh0dHBCb2R5LCBib29sIGFsbG93UG9wdXBzKQotewotICAgIG1fY29ubmVjdGlvbi0+
Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Qcm94eTo6TG9hZFVSTChyZXF1ZXN0
SUQsIG1ldGhvZCwgdXJsU3RyaW5nLCB0YXJnZXQsIGhlYWRlckZpZWxkcywgaHR0cEJvZHksIGFs
bG93UG9wdXBzKSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9s
bGVyUHJveHk6OmNvbnRpbnVlU3RyZWFtTG9hZCh1aW50NjRfdCBzdHJlYW1JRCkKLXsKLSAgICBt
X2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1Z2luUHJveHk6OkNv
bnRpbnVlU3RyZWFtTG9hZChzdHJlYW1JRCksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0KLXZv
aWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpjYW5jZWxTdHJlYW1Mb2FkKHVpbnQ2NF90IHN0cmVh
bUlEKQotewotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQ
bHVnaW5Qcm94eTo6Q2FuY2VsU3RyZWFtTG9hZChzdHJlYW1JRCksIG1fcGx1Z2luSW5zdGFuY2VJ
RCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpjYW5jZWxNYW51YWxTdHJlYW1M
b2FkKCkKLXsKLSAgICBtX3BsdWdpbkNhbmNlbGVkTWFudWFsU3RyZWFtTG9hZCA9IHRydWU7Ci0K
LSAgICBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1Z2luUHJv
eHk6OkNhbmNlbE1hbnVhbFN0cmVhbUxvYWQoKSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLX0KLQot
TlBPYmplY3QqIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6d2luZG93U2NyaXB0TlBPYmplY3QoKQot
ewotICAgIGlmICghbV93aW5kb3dOUE9iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBy
ZXRhaW5OUE9iamVjdChtX3dpbmRvd05QT2JqZWN0KTsKLSAgICByZXR1cm4gbV93aW5kb3dOUE9i
amVjdDsKLX0KLQotTlBPYmplY3QqIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6cGx1Z2luRWxlbWVu
dE5QT2JqZWN0KCkKLXsKLSAgICBpZiAoIW1fcGx1Z2luRWxlbWVudE5QT2JqZWN0KSB7Ci0gICAg
ICAgIHVpbnQ2NF90IHBsdWdpbkVsZW1lbnROUE9iamVjdElEID0gMDsKLQotICAgICAgICBpZiAo
IW1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6UGx1Z2luUHJv
eHk6OkdldFBsdWdpbkVsZW1lbnROUE9iamVjdCgpLCBNZXNzYWdlczo6UGx1Z2luUHJveHk6Okdl
dFBsdWdpbkVsZW1lbnROUE9iamVjdDo6UmVwbHkocGx1Z2luRWxlbWVudE5QT2JqZWN0SUQpLCBt
X3BsdWdpbkluc3RhbmNlSUQpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgaWYg
KCFwbHVnaW5FbGVtZW50TlBPYmplY3RJRCkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAg
ICAgIG1fcGx1Z2luRWxlbWVudE5QT2JqZWN0ID0gbV9jb25uZWN0aW9uLT5ucFJlbW90ZU9iamVj
dE1hcCgpLT5jcmVhdGVOUE9iamVjdFByb3h5KHBsdWdpbkVsZW1lbnROUE9iamVjdElELCBtX3Bs
dWdpbi5nZXQoKSk7Ci0gICAgICAgIEFTU0VSVChtX3BsdWdpbkVsZW1lbnROUE9iamVjdCk7Ci0g
ICAgfQotCi0gICAgcmV0YWluTlBPYmplY3QobV9wbHVnaW5FbGVtZW50TlBPYmplY3QpOwotICAg
IHJldHVybiBtX3BsdWdpbkVsZW1lbnROUE9iamVjdDsKLX0KLQotYm9vbCBQbHVnaW5Db250cm9s
bGVyUHJveHk6OmV2YWx1YXRlKE5QT2JqZWN0KiBucE9iamVjdCwgY29uc3QgU3RyaW5nJiBzY3Jp
cHRTdHJpbmcsIE5QVmFyaWFudCogcmVzdWx0LCBib29sIGFsbG93UG9wdXBzKQotewotICAgIFBs
dWdpbkRlc3RydWN0aW9uUHJvdGVjdG9yIHByb3RlY3Rvcih0aGlzKTsKLQotICAgIE5QVmFyaWFu
dCBucE9iamVjdEFzTlBWYXJpYW50OwotICAgIE9CSkVDVF9UT19OUFZBUklBTlQobnBPYmplY3Qs
IG5wT2JqZWN0QXNOUFZhcmlhbnQpOwotCi0gICAgLy8gU2VuZCB0aGUgTlBPYmplY3Qgb3ZlciBh
cyBhbiBOUFZhcmlhbnREYXRhLgotICAgIE5QVmFyaWFudERhdGEgbnBPYmplY3RBc05QVmFyaWFu
dERhdGEgPSBtX2Nvbm5lY3Rpb24tPm5wUmVtb3RlT2JqZWN0TWFwKCktPm5wVmFyaWFudFRvTlBW
YXJpYW50RGF0YShucE9iamVjdEFzTlBWYXJpYW50LCBtX3BsdWdpbi5nZXQoKSk7Ci0KLSAgICBi
b29sIHJldHVyblZhbHVlID0gZmFsc2U7Ci0gICAgTlBWYXJpYW50RGF0YSByZXN1bHREYXRhOwot
Ci0gICAgaWYgKCFtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6
OlBsdWdpblByb3h5OjpFdmFsdWF0ZShucE9iamVjdEFzTlBWYXJpYW50RGF0YSwgc2NyaXB0U3Ry
aW5nLCBhbGxvd1BvcHVwcyksIE1lc3NhZ2VzOjpQbHVnaW5Qcm94eTo6RXZhbHVhdGU6OlJlcGx5
KHJldHVyblZhbHVlLCByZXN1bHREYXRhKSwgbV9wbHVnaW5JbnN0YW5jZUlEKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFyZXR1cm5WYWx1ZSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgKnJlc3VsdCA9IG1fY29ubmVjdGlvbi0+bnBSZW1vdGVPYmplY3RNYXAoKS0+
bnBWYXJpYW50RGF0YVRvTlBWYXJpYW50KHJlc3VsdERhdGEsIG1fcGx1Z2luLmdldCgpKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnNldFBsdWdp
bklzUGxheWluZ0F1ZGlvKGJvb2wgcGx1Z2luSXNQbGF5aW5nQXVkaW8pCi17Ci0gICAgbV9jb25u
ZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpblByb3h5OjpTZXRQbHVn
aW5Jc1BsYXlpbmdBdWRpbyhwbHVnaW5Jc1BsYXlpbmdBdWRpbyksIG1fcGx1Z2luSW5zdGFuY2VJ
RCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpzZXRTdGF0dXNiYXJUZXh0KGNv
bnN0IFN0cmluZyYgc3RhdHVzYmFyVGV4dCkKLXsKLSAgICBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6UGx1Z2luUHJveHk6OlNldFN0YXR1c2JhclRleHQoc3RhdHVz
YmFyVGV4dCksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0KLWJvb2wgUGx1Z2luQ29udHJvbGxl
clByb3h5Ojppc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCkKLXsKLSAgICByZXR1cm4g
bV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkOwotfQotCi12b2lkIFBsdWdpbkNvbnRy
b2xsZXJQcm94eTo6cGx1Z2luUHJvY2Vzc0NyYXNoZWQoKQotewotICAgIC8vIFRoaXMgc2hvdWxk
IG5ldmVyIGJlIGNhbGxlZCBmcm9tIGhlcmUuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19
Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpkaWRJbml0aWFsaXplUGx1Z2luKCkKLXsK
LSAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiB0aGUgcGx1Z2luIGluIHRoZSB3
ZWIgcHJvY2Vzcy4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBQbHVnaW5D
b250cm9sbGVyUHJveHk6OmRpZEZhaWxUb0luaXRpYWxpemVQbHVnaW4oKQotewotICAgIC8vIFRo
aXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIHRoZSBwbHVnaW4gaW4gdGhlIHdlYiBwcm9jZXNz
LgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1mbG9hdCBQbHVnaW5Db250cm9sbGVy
UHJveHk6OmNvbnRlbnRzU2NhbGVGYWN0b3IoKQotewotICAgIHJldHVybiBtX2NvbnRlbnRzU2Nh
bGVGYWN0b3I7Ci19Ci0KLVN0cmluZyBQbHVnaW5Db250cm9sbGVyUHJveHk6OnByb3hpZXNGb3JV
UkwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCi17Ci0gICAgU3RyaW5nIHByb3h5U3RyaW5nOwot
Ci0gICAgaWYgKCFtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6
OlBsdWdpblByb3h5OjpQcm94aWVzRm9yVVJMKHVybFN0cmluZyksIE1lc3NhZ2VzOjpQbHVnaW5Q
cm94eTo6UHJveGllc0ZvclVSTDo6UmVwbHkocHJveHlTdHJpbmcpLCBtX3BsdWdpbkluc3RhbmNl
SUQpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gcHJveHlTdHJpbmc7
Ci19Ci0KLVN0cmluZyBQbHVnaW5Db250cm9sbGVyUHJveHk6OmNvb2tpZXNGb3JVUkwoY29uc3Qg
U3RyaW5nJiB1cmxTdHJpbmcpCi17Ci0gICAgU3RyaW5nIGNvb2tpZVN0cmluZzsKLQotICAgIGlm
ICghbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Q
cm94eTo6Q29va2llc0ZvclVSTCh1cmxTdHJpbmcpLCBNZXNzYWdlczo6UGx1Z2luUHJveHk6OkNv
b2tpZXNGb3JVUkw6OlJlcGx5KGNvb2tpZVN0cmluZyksIG1fcGx1Z2luSW5zdGFuY2VJRCkpCi0g
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIHJldHVybiBjb29raWVTdHJpbmc7Ci19Ci0K
LXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpzZXRDb29raWVzRm9yVVJMKGNvbnN0IFN0cmlu
ZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cmluZykKLXsKLSAgICBtX2Nvbm5l
Y3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1Z2luUHJveHk6OlNldENvb2tp
ZXNGb3JVUkwodXJsU3RyaW5nLCBjb29raWVTdHJpbmcpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwot
fQotCi1ib29sIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6aXNQcml2YXRlQnJvd3NpbmdFbmFibGVk
KCkKLXsKLSAgICByZXR1cm4gbV9pc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQ7Ci19Ci0KLWJvb2wg
UGx1Z2luQ29udHJvbGxlclByb3h5OjpnZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgUHJvdGVj
dGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UsIFN0cmluZyYgdXNlcm5hbWUsIFN0cmluZyYgcGFz
c3dvcmQpCi17Ci0gICAgYm9vbCByZXR1cm5WYWx1ZTsKLSAgICBpZiAoIW1fY29ubmVjdGlvbi0+
Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6UGx1Z2luUHJveHk6OkdldEF1dGhlbnRp
Y2F0aW9uSW5mbyhwcm90ZWN0aW9uU3BhY2UpLCBNZXNzYWdlczo6UGx1Z2luUHJveHk6OkdldEF1
dGhlbnRpY2F0aW9uSW5mbzo6UmVwbHkocmV0dXJuVmFsdWUsIHVzZXJuYW1lLCBwYXNzd29yZCks
IG1fcGx1Z2luSW5zdGFuY2VJRCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biByZXR1cm5WYWx1ZTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnByb3RlY3RQ
bHVnaW5Gcm9tRGVzdHJ1Y3Rpb24oKQotewotICAgIG1fcGx1Z2luRGVzdHJ1Y3Rpb25Qcm90ZWN0
Q291bnQrKzsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnVucHJvdGVjdFBsdWdp
bkZyb21EZXN0cnVjdGlvbigpCi17Ci0gICAgQVNTRVJUKG1fcGx1Z2luRGVzdHJ1Y3Rpb25Qcm90
ZWN0Q291bnQpOwotCi0gICAgbV9wbHVnaW5EZXN0cnVjdGlvblByb3RlY3RDb3VudC0tOwotfQot
Ci12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6ZnJhbWVEaWRGaW5pc2hMb2FkaW5nKHVpbnQ2
NF90IHJlcXVlc3RJRCkKLXsKLSAgICBtX3BsdWdpbi0+ZnJhbWVEaWRGaW5pc2hMb2FkaW5nKHJl
cXVlc3RJRCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpmcmFtZURpZEZhaWwo
dWludDY0X3QgcmVxdWVzdElELCBib29sIHdhc0NhbmNlbGxlZCkKLXsKLSAgICBtX3BsdWdpbi0+
ZnJhbWVEaWRGYWlsKHJlcXVlc3RJRCwgd2FzQ2FuY2VsbGVkKTsKLX0KLQotdm9pZCBQbHVnaW5D
b250cm9sbGVyUHJveHk6Omdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHBsdWdpblNp
emUsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBsdWdp
blRvUm9vdFZpZXdUcmFuc2Zvcm0sIGZsb2F0IGNvbnRlbnRzU2NhbGVGYWN0b3IsIGNvbnN0IFNo
YXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBiYWNraW5nU3RvcmVIYW5kbGUpCi17Ci0gICAgQVNTRVJU
KG1fcGx1Z2luKTsKLQotICAgIG1fcGx1Z2luU2l6ZSA9IHBsdWdpblNpemU7Ci0KLSAgICBpZiAo
Y29udGVudHNTY2FsZUZhY3RvciAhPSBtX2NvbnRlbnRzU2NhbGVGYWN0b3IpIHsKLSAgICAgICAg
bV9jb250ZW50c1NjYWxlRmFjdG9yID0gY29udGVudHNTY2FsZUZhY3RvcjsKLSAgICAgICAgbV9w
bHVnaW4tPmNvbnRlbnRzU2NhbGVGYWN0b3JDaGFuZ2VkKG1fY29udGVudHNTY2FsZUZhY3Rvcik7
Ci0gICAgfQotCi0gICAgcGxhdGZvcm1HZW9tZXRyeURpZENoYW5nZSgpOwotCi0gICAgaWYgKCFi
YWNraW5nU3RvcmVIYW5kbGUuaXNOdWxsKCkpIHsKLSAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGJh
Y2tpbmcgc3RvcmUuCi0gICAgICAgIG1fYmFja2luZ1N0b3JlID0gU2hhcmVhYmxlQml0bWFwOjpj
cmVhdGUoYmFja2luZ1N0b3JlSGFuZGxlKTsKLSAgICB9Ci0KLSAgICBtX3BsdWdpbi0+Z2VvbWV0
cnlEaWRDaGFuZ2UocGx1Z2luU2l6ZSwgY2xpcFJlY3QsIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zv
cm0pOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6dmlzaWJpbGl0eURpZENoYW5n
ZShib29sIGlzVmlzaWJsZSkKLXsKLSAgICBtX2lzVmlzaWJsZSA9IGlzVmlzaWJsZTsKLSAgICAK
LSAgICBBU1NFUlQobV9wbHVnaW4pOwotICAgIG1fcGx1Z2luLT52aXNpYmlsaXR5RGlkQ2hhbmdl
KGlzVmlzaWJsZSk7Ci0KLSAgICB1cGRhdGVWaXNpYmlsaXR5QWN0aXZpdHkoKTsKLX0KLQotdm9p
ZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OndpbmRvd0ZvY3VzQ2hhbmdlZChib29sIGhhc0ZvY3Vz
KQotewotICAgIEFTU0VSVChtX3BsdWdpbik7Ci0gICAgbV9wbHVnaW4tPndpbmRvd0ZvY3VzQ2hh
bmdlZChoYXNGb2N1cyk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5Ojp3aW5kb3dW
aXNpYmlsaXR5Q2hhbmdlZChib29sIGlzVmlzaWJsZSkKLXsKLSAgICBtX2lzV2luZG93VmlzaWJs
ZSA9IGlzVmlzaWJsZTsKLQotICAgIEFTU0VSVChtX3BsdWdpbik7Ci0gICAgbV9wbHVnaW4tPndp
bmRvd1Zpc2liaWxpdHlDaGFuZ2VkKGlzVmlzaWJsZSk7Ci0KLSAgICB1cGRhdGVWaXNpYmlsaXR5
QWN0aXZpdHkoKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnVwZGF0ZVZpc2li
aWxpdHlBY3Rpdml0eSgpCi17Ci0gICAgaWYgKG1faXNWaXNpYmxlICYmIG1faXNXaW5kb3dWaXNp
YmxlKQotICAgICAgICBtX3Zpc2libGl0eUFjdGl2aXR5LnN0YXJ0KCk7Ci0gICAgZWxzZQotICAg
ICAgICBtX3Zpc2libGl0eUFjdGl2aXR5LnN0b3AoKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9s
bGVyUHJveHk6OmRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0
IFN0cmluZyYgcmVzdWx0KQotewotICAgIG1fcGx1Z2luLT5kaWRFdmFsdWF0ZUphdmFTY3JpcHQo
cmVxdWVzdElELCByZXN1bHQpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6c3Ry
ZWFtV2lsbFNlbmRSZXF1ZXN0KHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBTdHJpbmcmIHJlcXVl
c3RVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVkaXJlY3RSZXNwb25zZVVSTFN0cmluZywgdWlu
dDMyX3QgcmVkaXJlY3RSZXNwb25zZVN0YXR1c0NvZGUpCi17Ci0gICAgbV9wbHVnaW4tPnN0cmVh
bVdpbGxTZW5kUmVxdWVzdChzdHJlYW1JRCwgVVJMKHsgfSwgcmVxdWVzdFVSTFN0cmluZyksIFVS
TCh7IH0sIHJlZGlyZWN0UmVzcG9uc2VVUkxTdHJpbmcpLCByZWRpcmVjdFJlc3BvbnNlU3RhdHVz
Q29kZSk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpzdHJlYW1EaWRSZWNlaXZl
UmVzcG9uc2UodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IFN0cmluZyYgcmVzcG9uc2VVUkxTdHJp
bmcsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBoZWFkZXJzKQotewotICAgIG1fcGx1
Z2luLT5zdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2Uoc3RyZWFtSUQsIFVSTCh7IH0sIHJlc3BvbnNl
VVJMU3RyaW5nKSwgc3RyZWFtTGVuZ3RoLCBsYXN0TW9kaWZpZWRUaW1lLCBtaW1lVHlwZSwgaGVh
ZGVycywgU3RyaW5nKCkpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6c3RyZWFt
RGlkUmVjZWl2ZURhdGEodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5j
ZSYgZGF0YSkKLXsKLSAgICBtX3BsdWdpbi0+c3RyZWFtRGlkUmVjZWl2ZURhdGEoc3RyZWFtSUQs
IGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclBy
b3h5OjpzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlEKQotewotICAgIG1f
cGx1Z2luLT5zdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHN0cmVhbUlEKTsKLX0KLQotdm9pZCBQbHVn
aW5Db250cm9sbGVyUHJveHk6OnN0cmVhbURpZEZhaWwodWludDY0X3Qgc3RyZWFtSUQsIGJvb2wg
d2FzQ2FuY2VsbGVkKQotewotICAgIG1fcGx1Z2luLT5zdHJlYW1EaWRGYWlsKHN0cmVhbUlELCB3
YXNDYW5jZWxsZWQpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6bWFudWFsU3Ry
ZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFN0cmluZyYgcmVzcG9uc2VVUkxTdHJpbmcsIHVp
bnQzMl90IHN0cmVhbUxlbmd0aCwgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBoZWFkZXJzKQotewotICAgIGlmIChtX3BsdWdp
bkNhbmNlbGVkTWFudWFsU3RyZWFtTG9hZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wbHVn
aW4tPm1hbnVhbFN0cmVhbURpZFJlY2VpdmVSZXNwb25zZShVUkwoeyB9LCByZXNwb25zZVVSTFN0
cmluZyksIHN0cmVhbUxlbmd0aCwgbGFzdE1vZGlmaWVkVGltZSwgbWltZVR5cGUsIGhlYWRlcnMs
IFN0cmluZygpKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6Om1hbnVhbFN0cmVh
bURpZFJlY2VpdmVEYXRhKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSkKLXsKLSAgICBp
ZiAobV9wbHVnaW5DYW5jZWxlZE1hbnVhbFN0cmVhbUxvYWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fcGx1Z2luLT5tYW51YWxTdHJlYW1EaWRSZWNlaXZlRGF0YShkYXRhLmRhdGEoKSwgZGF0
YS5zaXplKCkpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6bWFudWFsU3RyZWFt
RGlkRmluaXNoTG9hZGluZygpCi17Ci0gICAgaWYgKG1fcGx1Z2luQ2FuY2VsZWRNYW51YWxTdHJl
YW1Mb2FkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9wbHVnaW4tPm1hbnVhbFN0cmVh
bURpZEZpbmlzaExvYWRpbmcoKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6Om1h
bnVhbFN0cmVhbURpZEZhaWwoYm9vbCB3YXNDYW5jZWxsZWQpCi17Ci0gICAgaWYgKG1fcGx1Z2lu
Q2FuY2VsZWRNYW51YWxTdHJlYW1Mb2FkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9w
bHVnaW4tPm1hbnVhbFN0cmVhbURpZEZhaWwod2FzQ2FuY2VsbGVkKTsKLX0KLQotdm9pZCBQbHVn
aW5Db250cm9sbGVyUHJveHk6OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYg
bW91c2VFdmVudCkKLXsKLSAgICBtX3BsdWdpbi0+aGFuZGxlTW91c2VFdmVudChtb3VzZUV2ZW50
KTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OmhhbmRsZVdoZWVsRXZlbnQoY29u
c3QgV2ViV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihtX3BsdWdp
bi0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KSk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJv
bGxlclByb3h5OjpoYW5kbGVNb3VzZUVudGVyRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91
c2VFbnRlckV2ZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQotewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcGx1Z2luLT5oYW5kbGVNb3VzZUVu
dGVyRXZlbnQobW91c2VFbnRlckV2ZW50KSk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclBy
b3h5OjpoYW5kbGVNb3VzZUxlYXZlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VMZWF2
ZUV2ZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQotewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcGx1Z2luLT5oYW5kbGVNb3VzZUxlYXZlRXZl
bnQobW91c2VMZWF2ZUV2ZW50KSk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5Ojpo
YW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0g
ICAgY29tcGxldGlvbkhhbmRsZXIobV9wbHVnaW4tPmhhbmRsZUtleWJvYXJkRXZlbnQoa2V5Ym9h
cmRFdmVudCkpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6aGFuZGxlRWRpdGlu
Z0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVu
dCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsK
LSAgICBjb21wbGV0aW9uSGFuZGxlcihtX3BsdWdpbi0+aGFuZGxlRWRpdGluZ0NvbW1hbmQoY29t
bWFuZE5hbWUsIGFyZ3VtZW50KSk7Ci19Ci0gICAgCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94
eTo6aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBj
b21wbGV0aW9uSGFuZGxlcihtX3BsdWdpbi0+aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29tbWFu
ZE5hbWUpKTsKLX0KLSAgICAKLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpoYW5kbGVzUGFn
ZVNjYWxlRmFjdG9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCi17Ci0gICAgY29tcGxldGlvbkhhbmRsZXIobV9wbHVnaW4tPmhhbmRsZXNQYWdlU2Nh
bGVGYWN0b3IoKSk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpyZXF1aXJlc1Vu
aWZpZWRTY2FsZUZhY3RvcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQotewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcGx1Z2luLT5yZXF1aXJlc1Vu
aWZpZWRTY2FsZUZhY3RvcigpKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnBh
aW50RW50aXJlUGx1Z2luKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKLXsKLSAgICBpZiAobV9wbHVnaW5TaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0KLSAgICBtX2RpcnR5UmVjdCA9IEludFJlY3QoSW50UG9p
bnQoKSwgbV9wbHVnaW5TaXplKTsKLSAgICBwYWludCgpOwotICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpzdXBwb3J0c1NuYXBzaG90dGlu
ZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewot
ICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcGx1Z2luLT5zdXBwb3J0c1NuYXBzaG90dGluZygpKTsK
LX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnNuYXBzaG90KENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmJik+IGNvbXBsZXRpb25IYW5kbGVyKQot
ewotICAgIEFTU0VSVChtX3BsdWdpbik7Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0
bWFwID0gbV9wbHVnaW4tPnNuYXBzaG90KCk7Ci0gICAgaWYgKCFiaXRtYXApCi0gICAgICAgIHJl
dHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwotCi0gICAgU2hhcmVhYmxlQml0bWFwOjpIYW5k
bGUgYmFja2luZ1N0b3JlSGFuZGxlOwotICAgIGJpdG1hcC0+Y3JlYXRlSGFuZGxlKGJhY2tpbmdT
dG9yZUhhbmRsZSk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShiYWNraW5nU3RvcmVI
YW5kbGUpKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnNldEZvY3VzKGJvb2wg
aGFzRm9jdXMpCi17Ci0gICAgbV9wbHVnaW4tPnNldEZvY3VzKGhhc0ZvY3VzKTsKLX0KLQotdm9p
ZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OmRpZFVwZGF0ZSgpCi17Ci0gICAgbV93YWl0aW5nRm9y
RGlkVXBkYXRlID0gZmFsc2U7Ci0gICAgc3RhcnRQYWludFRpbWVyKCk7Ci19Ci0KLXZvaWQgUGx1
Z2luQ29udHJvbGxlclByb3h5OjpnZXRQbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCh1aW50NjRfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgTlBP
YmplY3QqIHBsdWdpblNjcmlwdGFibGVOUE9iamVjdCA9IG1fcGx1Z2luLT5wbHVnaW5TY3JpcHRh
YmxlTlBPYmplY3QoKTsKLSAgICBpZiAoIXBsdWdpblNjcmlwdGFibGVOUE9iamVjdCkKLSAgICAg
ICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKDApOwotICAgIAotICAgIHVpbnQ2NF90IHBsdWdp
blNjcmlwdGFibGVOUE9iamVjdElEID0gbV9jb25uZWN0aW9uLT5ucFJlbW90ZU9iamVjdE1hcCgp
LT5yZWdpc3Rlck5QT2JqZWN0KHBsdWdpblNjcmlwdGFibGVOUE9iamVjdCwgbV9wbHVnaW4uZ2V0
KCkpOwotICAgIHJlbGVhc2VOUE9iamVjdChwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QpOwotICAg
IGNvbXBsZXRpb25IYW5kbGVyKHBsdWdpblNjcmlwdGFibGVOUE9iamVjdElEKTsKLX0KLQotdm9p
ZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZChib29s
IGlzU3RvcmFnZUJsb2NraW5nRW5hYmxlZCkKLXsKLSAgICBpZiAobV9zdG9yYWdlQmxvY2tpbmdF
bmFibGVkICE9IGlzU3RvcmFnZUJsb2NraW5nRW5hYmxlZCkgewotICAgICAgICBtX3N0b3JhZ2VC
bG9ja2luZ0VuYWJsZWQgPSBpc1N0b3JhZ2VCbG9ja2luZ0VuYWJsZWQ7Ci0gICAgICAgIG1fcGx1
Z2luLT5zdG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5nZWQobV9zdG9yYWdlQmxvY2tpbmdFbmFibGVk
KTsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5Ojpwcml2YXRlQnJvd3Np
bmdTdGF0ZUNoYW5nZWQoYm9vbCBpc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQpCi17Ci0gICAgbV9p
c1ByaXZhdGVCcm93c2luZ0VuYWJsZWQgPSBpc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQ7Ci0KLSAg
ICBtX3BsdWdpbi0+cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGlzUHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjptdXRlZFN0YXRlQ2hh
bmdlZChib29sIGlzTXV0ZWQpCi17Ci0gICAgaWYgKG1faXNNdXRlZCA9PSBpc011dGVkKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9pc011dGVkID0gaXNNdXRlZDsKLSAgICBtX3BsdWdp
bi0+bXV0ZWRTdGF0ZUNoYW5nZWQoaXNNdXRlZCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxl
clByb3h5OjpnZXRGb3JtVmFsdWUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sLCBTdHJpbmcm
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgU3RyaW5nIGZvcm1WYWx1ZTsKLSAgICBi
b29sIHJldHVyblZhbHVlID0gbV9wbHVnaW4tPmdldEZvcm1WYWx1ZShmb3JtVmFsdWUpOwotICAg
IGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlLCBXVEZNb3ZlKGZvcm1WYWx1ZSkpOwotfQot
Ci0jaWYgUExBVEZPUk0oWDExKQotdWludDY0X3QgUGx1Z2luQ29udHJvbGxlclByb3h5OjpjcmVh
dGVQbHVnaW5Db250YWluZXIoKQotewotICAgIHVpbnQ2NF90IHdpbmRvd0lEID0gMDsKLSAgICBt
X2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OlBsdWdpblByb3h5
OjpDcmVhdGVQbHVnaW5Db250YWluZXIoKSwgTWVzc2FnZXM6OlBsdWdpblByb3h5OjpDcmVhdGVQ
bHVnaW5Db250YWluZXI6OlJlcGx5KHdpbmRvd0lEKSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLSAg
ICByZXR1cm4gd2luZG93SUQ7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5Ojp3aW5k
b3dlZFBsdWdpbkdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IEludFJlY3QmIGZyYW1lUmVjdCwgY29u
c3QgSW50UmVjdCYgY2xpcFJlY3QsIHVpbnQ2NF90IHdpbmRvd0lEKQotewotICAgIG1fY29ubmVj
dGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Qcm94eTo6V2luZG93ZWRQ
bHVnaW5HZW9tZXRyeURpZENoYW5nZShmcmFtZVJlY3QsIGNsaXBSZWN0LCB3aW5kb3dJRCksIG1f
cGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5Ojp3aW5k
b3dlZFBsdWdpblZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCBpc1Zpc2libGUsIHVpbnQ2NF90IHdp
bmRvd0lEKQotewotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpQbHVnaW5Qcm94eTo6V2luZG93ZWRQbHVnaW5WaXNpYmlsaXR5RGlkQ2hhbmdlKGlzVmlzaWJs
ZSwgd2luZG93SUQpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwotfQotI2VuZGlmCi0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjZjVlMWY5N2I4N2E0YmQ5MmEzNjZh
NGNjODkwMjUxNzM0MDE4YjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94
eS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRl
ICJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIlBs
dWdpbi5oIgotI2luY2x1ZGUgIlBsdWdpbkNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJTaGFyZWFi
bGVCaXRtYXAuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzUmVwbGll
cy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1VzZXJBY3Rpdml0eS5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1
ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBMYXllckhv
c3RpbmdDb250ZXh0OwotY2xhc3MgU2hhcmVhYmxlQml0bWFwOwotY2xhc3MgV2ViUHJvY2Vzc0Nv
bm5lY3Rpb247Ci1zdHJ1Y3QgUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzOwotCi1jbGFzcyBQbHVn
aW5Db250cm9sbGVyUHJveHkgOiBwdWJsaWMgUGx1Z2luQ29udHJvbGxlciB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGx1Z2luQ29udHJv
bGxlclByb3h5KTsKLQotcHVibGljOgotICAgIFBsdWdpbkNvbnRyb2xsZXJQcm94eShXZWJQcm9j
ZXNzQ29ubmVjdGlvbiosIGNvbnN0IFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyYpOwotICAgIH5Q
bHVnaW5Db250cm9sbGVyUHJveHkoKTsKLQotICAgIHVpbnQ2NF90IHBsdWdpbkluc3RhbmNlSUQo
KSBjb25zdCB7IHJldHVybiBtX3BsdWdpbkluc3RhbmNlSUQ7IH0KLQotICAgIGJvb2wgaW5pdGlh
bGl6ZShjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICB2b2lkIGRlc3Ryb3ko
KTsKLQotICAgIHZvaWQgZGlkUmVjZWl2ZVBsdWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7Ci0gICAgYm9vbCBkaWRSZWNlaXZlU3luY1Bs
dWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVy
JiwgVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mKTsKLQotICAgIGJvb2wgd2FudHNXaGVlbEV2ZW50
cygpIGNvbnN0OwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgdWludDMyX3QgcmVtb3RlTGF5
ZXJDbGllbnRJRCgpIGNvbnN0OwotI2VuZGlmCi0KLSAgICBQbHVnaW5Db250cm9sbGVyKiBhc1Bs
dWdpbkNvbnRyb2xsZXIoKSB7IHJldHVybiB0aGlzOyB9Ci0KLSAgICBib29sIGlzSW5pdGlhbGl6
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc0luaXRpYWxpemluZzsgfQotICAgIAotICAgIHZvaWQg
c2V0SW5pdGlhbGl6YXRpb25SZXBseShNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNy
ZWF0ZVBsdWdpbkRlbGF5ZWRSZXBseSYmKTsKLSAgICBNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5l
Y3Rpb246OkNyZWF0ZVBsdWdpbkRlbGF5ZWRSZXBseSB0YWtlSW5pdGlhbGl6YXRpb25SZXBseSgp
OwotCi1wcml2YXRlOgotICAgIHZvaWQgc3RhcnRQYWludFRpbWVyKCk7Ci0gICAgdm9pZCBwYWlu
dCgpOwotCi0gICAgLy8gUGx1Z2luQ29udHJvbGxlcgotICAgIHZvaWQgaW52YWxpZGF0ZShjb25z
dCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHVzZXJBZ2VudCgpIG92
ZXJyaWRlOwotICAgIHZvaWQgbG9hZFVSTCh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgU3RyaW5nJiB0YXJnZXQs
IGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmIGhlYWRlckZpZWxkcywgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBodHRwQm9keSwgYm9vbCBhbGxvd1BvcHVwcykgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBjb250aW51ZVN0cmVhbUxvYWQodWludDY0X3Qgc3RyZWFtSUQpIG92ZXJyaWRlOwotICAgIHZv
aWQgY2FuY2VsU3RyZWFtTG9hZCh1aW50NjRfdCBzdHJlYW1JRCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBjYW5jZWxNYW51YWxTdHJlYW1Mb2FkKCkgb3ZlcnJpZGU7Ci0gICAgTlBPYmplY3QqIHdpbmRv
d1NjcmlwdE5QT2JqZWN0KCkgb3ZlcnJpZGU7Ci0gICAgTlBPYmplY3QqIHBsdWdpbkVsZW1lbnRO
UE9iamVjdCgpIG92ZXJyaWRlOwotICAgIGJvb2wgZXZhbHVhdGUoTlBPYmplY3QqLCBjb25zdCBT
dHJpbmcmIHNjcmlwdFN0cmluZywgTlBWYXJpYW50KiByZXN1bHQsIGJvb2wgYWxsb3dQb3B1cHMp
IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0UGx1Z2luSXNQbGF5aW5nQXVkaW8oYm9vbCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBzZXRTdGF0dXNiYXJUZXh0KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwot
ICAgIGJvb2wgaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpIG92ZXJyaWRlOwotICAg
IHZvaWQgcGx1Z2luUHJvY2Vzc0NyYXNoZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEluaXRp
YWxpemVQbHVnaW4oKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEZhaWxUb0luaXRpYWxpemVQbHVn
aW4oKSBvdmVycmlkZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHZvaWQgcGx1Z2luRm9j
dXNPcldpbmRvd0ZvY3VzQ2hhbmdlZChib29sKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldENvbXBs
ZXhUZXh0SW5wdXRTdGF0ZShQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUpIG92ZXJyaWRlOwot
ICAgIGNvbnN0IFdURjo6TWFjaFNlbmRSaWdodCYgY29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0
KCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotICAgIGZsb2F0IGNvbnRlbnRzU2NhbGVGYWN0b3IoKSBv
dmVycmlkZTsKLSAgICBTdHJpbmcgcHJveGllc0ZvclVSTChjb25zdCBTdHJpbmcmKSBvdmVycmlk
ZTsKLSAgICBTdHJpbmcgY29va2llc0ZvclVSTChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHNldENvb2tpZXNGb3JVUkwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IFN0
cmluZyYgY29va2llU3RyaW5nKSBvdmVycmlkZTsKLSAgICBib29sIGlzUHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZCgpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNNdXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1faXNNdXRlZDsgfQotICAgIGJvb2wgZ2V0QXV0aGVudGljYXRpb25JbmZvKGNvbnN0
IFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZSYsIFN0cmluZyYgdXNlcm5hbWUsIFN0cmluZyYgcGFz
c3dvcmQpIG92ZXJyaWRlOwotICAgIHZvaWQgcHJvdGVjdFBsdWdpbkZyb21EZXN0cnVjdGlvbigp
IG92ZXJyaWRlOwotICAgIHZvaWQgdW5wcm90ZWN0UGx1Z2luRnJvbURlc3RydWN0aW9uKCkgb3Zl
cnJpZGU7Ci0jaWYgUExBVEZPUk0oWDExKQotICAgIHVpbnQ2NF90IGNyZWF0ZVBsdWdpbkNvbnRh
aW5lcigpIG92ZXJyaWRlOwotICAgIHZvaWQgd2luZG93ZWRQbHVnaW5HZW9tZXRyeURpZENoYW5n
ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmcmFtZVJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIGNsaXBSZWN0LCB1aW50NjRfdCB3aW5kb3dJRCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aW5k
b3dlZFBsdWdpblZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCBpc1Zpc2libGUsIHVpbnQ2NF90IHdp
bmRvd0lEKSBvdmVycmlkZTsKLSNlbmRpZgotICAgIAotICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMu
Ci0gICAgdm9pZCBmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QgcmVxdWVzdElEKTsKLSAg
ICB2b2lkIGZyYW1lRGlkRmFpbCh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgd2FzQ2FuY2VsbGVk
KTsKLSAgICB2b2lkIGdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBs
dWdpblNpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0LCBjb25zdCBXZWJDb3Jl
OjpBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0sIGZsb2F0IGNvbnRl
bnRzU2NhbGVGYWN0b3IsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBiYWNraW5nU3Rv
cmVIYW5kbGUpOwotICAgIHZvaWQgdmlzaWJpbGl0eURpZENoYW5nZShib29sIGlzVmlzaWJsZSk7
Ci0gICAgdm9pZCBkaWRFdmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3QgcmVxdWVzdElELCBjb25z
dCBTdHJpbmcmIHJlc3VsdCk7Ci0gICAgdm9pZCBzdHJlYW1XaWxsU2VuZFJlcXVlc3QodWludDY0
X3Qgc3RyZWFtSUQsIGNvbnN0IFN0cmluZyYgcmVxdWVzdFVSTFN0cmluZywgY29uc3QgU3RyaW5n
JiByZWRpcmVjdFJlc3BvbnNlVVJMU3RyaW5nLCB1aW50MzJfdCByZWRpcmVjdFJlc3BvbnNlU3Rh
dHVzQ29kZSk7Ci0gICAgdm9pZCBzdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3Qgc3Ry
ZWFtSUQsIGNvbnN0IFN0cmluZyYgcmVzcG9uc2VVUkxTdHJpbmcsIHVpbnQzMl90IHN0cmVhbUxl
bmd0aCwgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
Y29uc3QgU3RyaW5nJiBoZWFkZXJzKTsKLSAgICB2b2lkIHN0cmVhbURpZFJlY2VpdmVEYXRhKHVp
bnQ2NF90IHN0cmVhbUlELCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEpOwotICAgIHZv
aWQgc3RyZWFtRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCBzdHJlYW1JRCk7Ci0gICAgdm9pZCBz
dHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0cmVhbUlELCBib29sIHdhc0NhbmNlbGxlZCk7Ci0gICAg
dm9pZCBtYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgU3RyaW5nJiByZXNwb25z
ZVVSTFN0cmluZywgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRU
aW1lLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMpOwotICAg
IHZvaWQgbWFudWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNl
JiBkYXRhKTsKLSAgICB2b2lkIG1hbnVhbFN0cmVhbURpZEZpbmlzaExvYWRpbmcoKTsKLSAgICB2
b2lkIG1hbnVhbFN0cmVhbURpZEZhaWwoYm9vbCB3YXNDYW5jZWxsZWQpOwotICAgIHZvaWQgaGFu
ZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAgdm9pZCBoYW5kbGVXaGVl
bEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wg
aGFuZGxlZCk+JiYpOwotICAgIHZvaWQgaGFuZGxlTW91c2VFbnRlckV2ZW50KGNvbnN0IFdlYk1v
dXNlRXZlbnQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaGFuZGxlZCk+JiYpOwotICAg
IHZvaWQgaGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wgaGFuZGxlZCk+JiYpOwotICAgIHZvaWQgaGFuZGxlS2V5Ym9h
cmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChi
b29sIGhhbmRsZWQpPiYmKTsKLSAgICB2b2lkIGhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBoYW5kbGVk
KT4mJik7Ci0gICAgdm9pZCBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKLSAgICB2b2lkIGhhbmRsZXNQYWdlU2Nh
bGVGYWN0b3IoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7Ci0gICAgdm9pZCByZXF1
aXJlc1VuaWZpZWRTY2FsZUZhY3RvcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsK
LSAgICB2b2lkIHBhaW50RW50aXJlUGx1Z2luKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7
Ci0gICAgdm9pZCBzdXBwb3J0c1NuYXBzaG90dGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wpPiYmKTsKLSAgICB2b2lkIHNuYXBzaG90KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUmJik+KTsKLSAgICB2b2lkIHNldEZvY3VzKGJvb2wpOwotICAgIHZv
aWQgZGlkVXBkYXRlKCk7Ci0gICAgdm9pZCBnZXRQbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCh1aW50NjRfdCBwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3RJRCk+
JiYpOwotCi0gICAgdm9pZCB3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCk7Ci0gICAgdm9pZCB3aW5k
b3dWaXNpYmlsaXR5Q2hhbmdlZChib29sKTsKLSAgICB2b2lkIHVwZGF0ZVZpc2liaWxpdHlBY3Rp
dml0eSgpOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgdm9pZCB3aW5kb3dBbmRWaWV3RnJh
bWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29v
cmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRp
bmF0ZXMpOwotICAgIHZvaWQgc2VuZENvbXBsZXhUZXh0SW5wdXQoY29uc3QgU3RyaW5nJiB0ZXh0
SW5wdXQpOwotICAgIHZvaWQgc2V0TGF5ZXJIb3N0aW5nTW9kZSh1aW50MzJfdCk7Ci0KLSAgICB2
b2lkIHVwZGF0ZUxheWVySG9zdGluZ0NvbnRleHQoTGF5ZXJIb3N0aW5nTW9kZSk7Ci0jZW5kaWYK
LQotICAgIHZvaWQgc3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKGJvb2wpOwotICAgIHZvaWQg
cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJvb2wpOwotICAgIHZvaWQgbXV0ZWRTdGF0ZUNo
YW5nZWQoYm9vbCk7Ci0gICAgdm9pZCBnZXRGb3JtVmFsdWUoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sIHJldHVyblZhbHVlLCBTdHJpbmcmJiBmb3JtVmFsdWUpPiYmKTsKLQotICAgIHZvaWQg
cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyYpOwotICAg
IHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUdlb21ldHJ5RGlkQ2hh
bmdlKCk7Ci0KLSAgICBXZWJQcm9jZXNzQ29ubmVjdGlvbiogbV9jb25uZWN0aW9uOwotICAgIHVp
bnQ2NF90IG1fcGx1Z2luSW5zdGFuY2VJRDsKLQotICAgIFN0cmluZyBtX3VzZXJBZ2VudDsKLSAg
ICBib29sIG1fc3RvcmFnZUJsb2NraW5nRW5hYmxlZDsKLSAgICBib29sIG1faXNQcml2YXRlQnJv
d3NpbmdFbmFibGVkOwotICAgIGJvb2wgbV9pc011dGVkOwotICAgIGJvb2wgbV9pc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdFbmFibGVkOwotICAgIGJvb2wgbV9pc0luaXRpYWxpemluZzsKLSAgICBi
b29sIG1faXNWaXNpYmxlOwotICAgIGJvb2wgbV9pc1dpbmRvd1Zpc2libGU7Ci0KLSAgICBNZXNz
YWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdpbkRlbGF5ZWRSZXBseSBtX2lu
aXRpYWxpemF0aW9uUmVwbHk7Ci0KLSAgICBSZWZQdHI8UGx1Z2luPiBtX3BsdWdpbjsKLQotICAg
IFdlYkNvcmU6OkludFNpemUgbV9wbHVnaW5TaXplOwotCi0gICAgLy8gVGhlIGRpcnR5IHJlY3Qg
aW4gcGx1Zy1pbiBjb29yZGluYXRlcy4KLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fZGlydHlSZWN0
OwotCi0gICAgLy8gVGhlIHBhaW50IHRpbWVyLCB1c2VkIGZvciBjb2FsZXNjaW5nIHBhaW50aW5n
LgotICAgIFJ1bkxvb3A6OlRpbWVyPFBsdWdpbkNvbnRyb2xsZXJQcm94eT4gbV9wYWludFRpbWVy
OwotICAgIAotICAgIC8vIEEgY291bnRlciB1c2VkIHRvIHByZXZlbnQgdGhlIHBsdWctaW4gZnJv
bSBiZWluZyBkZXN0cm95ZWQuCi0gICAgdW5zaWduZWQgbV9wbHVnaW5EZXN0cnVjdGlvblByb3Rl
Y3RDb3VudDsKLQotICAgIC8vIEEgdGltZXIgdGhhdCB3ZSB1c2UgdG8gcHJldmVudCBkZXN0cnVj
dGlvbiBvZiB0aGUgcGx1Zy1pbiB3aGlsZSBwbHVnLWluCi0gICAgLy8gY29kZSBpcyBvbiB0aGUg
c3RhY2suCi0gICAgUnVuTG9vcDo6VGltZXI8UGx1Z2luQ29udHJvbGxlclByb3h5PiBtX3BsdWdp
bkRlc3Ryb3lUaW1lcjsKLQotICAgIC8vIFdoZXRoZXIgd2UncmUgd2FpdGluZyBmb3IgdGhlIHBs
dWctaW4gcHJveHkgaW4gdGhlIHdlYiBwcm9jZXNzIHRvIGRyYXcgdGhlIGNvbnRlbnRzIG9mIGl0
cwotICAgIC8vIGJhY2tpbmcgc3RvcmUgaW50byB0aGUgd2ViIHByb2Nlc3MgYmFja2luZyBzdG9y
ZS4KLSAgICBib29sIG1fd2FpdGluZ0ZvckRpZFVwZGF0ZTsKLQotICAgIC8vIFdoZXRoZXIgdGhl
IHBsdWctaW4gaGFzIGNhbmNlbGVkIHRoZSBtYW51YWwgc3RyZWFtIGxvYWQuCi0gICAgYm9vbCBt
X3BsdWdpbkNhbmNlbGVkTWFudWFsU3RyZWFtTG9hZDsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQot
ICAgIC8vIFdoZXRoZXIgY29tcGxleCB0ZXh0IGlucHV0IGlzIGVuYWJsZWQgZm9yIHRoaXMgcGx1
Zy1pbi4KLSAgICBib29sIG1faXNDb21wbGV4VGV4dElucHV0RW5hYmxlZDsKLQotICAgIC8vIEZv
ciBDQSBwbHVnLWlucywgdGhpcyBob2xkcyB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGV4cG9y
dCB0aGUgbGF5ZXIgaGllcmFyY2h5IHRvIHRoZSBVSSBwcm9jZXNzLgotICAgIHN0ZDo6dW5pcXVl
X3B0cjxMYXllckhvc3RpbmdDb250ZXh0PiBtX2xheWVySG9zdGluZ0NvbnRleHQ7Ci0jZW5kaWYK
LQotICAgIC8vIFRoZSBjb250ZW50cyBzY2FsZSBmYWN0b3Igb2YgdGhpcyBwbHVnLWluLgotICAg
IGZsb2F0IG1fY29udGVudHNTY2FsZUZhY3RvcjsKLSAgICAKLSAgICAvLyBUaGUgYmFja2luZyBz
dG9yZSB0aGF0IHRoaXMgcGx1Zy1pbiBkcmF3cyBpbnRvLgotICAgIFJlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IG1fYmFja2luZ1N0b3JlOwotCi0gICAgLy8gVGhlIHdpbmRvdyBOUE9iamVjdC4KLSAg
ICBOUE9iamVjdCogbV93aW5kb3dOUE9iamVjdDsKLQotICAgIC8vIFRoZSBwbHVnLWluIGVsZW1l
bnQgTlBPYmplY3QuCi0gICAgTlBPYmplY3QqIG1fcGx1Z2luRWxlbWVudE5QT2JqZWN0OwotCi0g
ICAgLy8gSG9sZCBhbiBhY3Rpdml0eSB3aGVuIHRoZSBwbHVnaW4gaXMgdmlzaWJsZSB0byBwcmV2
ZW50IHRocm90dGxpbmcuCi0gICAgVXNlckFjdGl2aXR5IG1fdmlzaWJsaXR5QWN0aXZpdHk7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1BsdWdp
bkNvbnRyb2xsZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vz
cy9QbHVnaW5Db250cm9sbGVyUHJveHkubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGMxYTE2ODZmY2E2MGE2MDBjYzU1MjRmYzk2NWJlMTJjNzU3NjQ2OWQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9Q
bHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5tZXNzYWdlcy5pbgorKysgL2Rldi9u
dWxsCkBAIC0xLDE0MyArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1l
dDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0j
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotbWVzc2FnZXMgLT4gUGx1
Z2luQ29udHJvbGxlclByb3h5IExlZ2FjeVJlY2VpdmVyIE5vdFJlZkNvdW50ZWQgewotICAgICMg
U2VudCB3aGVuIHRoZSBwbHVnLWluIGdlb21ldHJ5IGNoYW5nZXMuCi0gICAgR2VvbWV0cnlEaWRD
aGFuZ2UoV2ViQ29yZTo6SW50U2l6ZSBwbHVnaW5TaXplLCBXZWJDb3JlOjpJbnRSZWN0IGNsaXBS
ZWN0LCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybSwg
ZmxvYXQgc2NhbGVGYWN0b3IsIFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgYmFja2lu
Z1N0b3JlSGFuZGxlKQotCi0gICAgIyBTZW50IHdoZW4gdGhlIHBsdWctaW4gdmlzaWJpbGl0eSBj
aGFuZ2VzLgotICAgIFZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCBpc1Zpc2libGUpCi0KLSAgICAj
IFNlbnQgd2hlbiBhIGZyYW1lIGhhcyBmaW5pc2hlZCBsb2FkaW5nLgotICAgIEZyYW1lRGlkRmlu
aXNoTG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpCi0KLSAgICAjIFNlbnQgd2hlbiBhIGZyYW1l
IGRmYWlsZWQgdG8gbG9hZC4KLSAgICBGcmFtZURpZEZhaWwodWludDY0X3QgcmVxdWVzdElELCBi
b29sIHdhc0NhbmNlbGxlZCkKLQotICAgICMgU2VudCB3aGVuIEphdmFTY3JpcHQgdGhhdCB0aGUg
cGx1Zy1pbiBhc2tlZCB0byBiZSBldmFsdWF0ZWQgaGFzIGJlZW4gZXZhbHVhdGVkLgotICAgIERp
ZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCByZXF1ZXN0SUQsIFN0cmluZyByZXN1bHQpCi0K
LSAgICAjIFNlbnQgd2hlbiB0aGUgcGx1Zy1pbiByZWNlaXZlcyB3aWxsIHNlbmQgYSByZXF1ZXN0
IGZvciBhIHN0cmVhbS4KLSAgICBTdHJlYW1XaWxsU2VuZFJlcXVlc3QodWludDY0X3Qgc3RyZWFt
SUQsIFN0cmluZyByZXF1ZXN0VVJMU3RyaW5nLCBTdHJpbmcgcmVkaXJlY3RSZXNwb25zZVVSTFN0
cmluZywgdWludDMyX3QgcmVkaXJlY3RSZXNwb25zZVN0YXR1c0NvZGUpCi0KLSAgICAjIFNlbnQg
d2hlbiB0aGUgcGx1Zy1pbiByZWNlaXZlcyBhIHJlc3BvbnNlIGZvciBhIHN0cmVhbS4KLSAgICBT
dHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3Qgc3RyZWFtSUQsIFN0cmluZyByZXNwb25z
ZVVSTFN0cmluZywgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRU
aW1lLCBTdHJpbmcgbWltZVR5cGUsIFN0cmluZyBoZWFkZXJzKQotCi0gICAgIyBTZW50IHdoZW4g
dGhlIHBsdWctaW4gcmVjZWl2ZXMgZGF0YSBmb3IgYSBzdHJlYW0uCi0gICAgU3RyZWFtRGlkUmVj
ZWl2ZURhdGEodWludDY0X3Qgc3RyZWFtSUQsIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKQotCi0g
ICAgIyBTZW50IHdoZW4gYSBwbHVnLWluIHN0cmVhbSBoYXMgZmluaXNoZXMgbG9hZGluZy4KLSAg
ICBTdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlEKQotCi0gICAgIyBTZW50
IHdoZW4gYSBwbHVnLWluIHN0cmVhbSBoYXMgZmFpbGVkIHRvIGxvYWQuCi0gICAgU3RyZWFtRGlk
RmFpbCh1aW50NjRfdCBzdHJlYW1JRCwgYm9vbCB3YXNDYW5jZWxsZWQpCi0KLSAgICAjIFNlbnQg
d2hlbiB0aGUgcGx1Zy1pbiByZWNlaXZlcyBhIHJlc3BvbnNlIGZvciB0aGUgbWFudWFsIHN0cmVh
bS4KLSAgICBNYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UoU3RyaW5nIHJlc3BvbnNlVVJM
U3RyaW5nLCB1aW50MzJfdCBzdHJlYW1MZW5ndGgsIHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUs
IFN0cmluZyBtaW1lVHlwZSwgU3RyaW5nIGhlYWRlcnMpCi0KLSAgICAjIFNlbnQgd2hlbiB0aGUg
cGx1Zy1pbiByZWNlaXZlcyBkYXRhIGZvciB0aGUgbWFudWFsIHN0cmVhbS4KLSAgICBNYW51YWxT
dHJlYW1EaWRSZWNlaXZlRGF0YShJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YSkKLQotICAgICMgU2Vu
dCB3aGVuIHRoZSBwbHVnLWluIG1hbnVhbCBzdHJlYW0gaGFzIGZpbmlzaGVzIGxvYWRpbmcuCi0g
ICAgTWFudWFsU3RyZWFtRGlkRmluaXNoTG9hZGluZygpCi0KLSAgICAjIFNlbnQgd2hlbiB0aGUg
cGx1Zy1pbiBtYW51YWwgc3RyZWFtIGhhcyBmYWlsZWQgdG8gbG9hZC4KLSAgICBNYW51YWxTdHJl
YW1EaWRGYWlsKGJvb2wgd2FzQ2FuY2VsbGVkKQotCi0gICAgIyBTZW50IHdoZW4gYSBtb3VzZSBl
dmVudCAodGhhdCBpc24ndCBhIG1vdXNlIGVudGVyL2xlYXZlIGV2ZW50IG9yIGEgd2hlZWwgZXZl
bnQpIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAgSGFuZGxlTW91c2VFdmVudChXZWJLaXQ6Oldl
Yk1vdXNlRXZlbnQgbW91c2VFdmVudCkKLSAgICAKLSAgICAjIFNlbnQgd2hlbiBhIG1vdXNlIHdo
ZWVsIGV2ZW50IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAgSGFuZGxlV2hlZWxFdmVudChXZWJL
aXQ6OldlYldoZWVsRXZlbnQgd2hlZWxFdmVudCkgLT4gKGJvb2wgaGFuZGxlZCkgU3luY2hyb25v
dXMKLQotICAgICMgU2VudCB3aGVuIGEgbW91c2UgZW50ZXIgZXZlbnQgc2hvdWxkIGJlIHByb2Nl
c3NlZC4KLSAgICBIYW5kbGVNb3VzZUVudGVyRXZlbnQoV2ViS2l0OjpXZWJNb3VzZUV2ZW50IG1v
dXNlRXZlbnQpIC0+IChib29sIGhhbmRsZWQpIFN5bmNocm9ub3VzCi0gICAgCi0gICAgIyBTZW50
IHdoZW4gYSBtb3VzZSBsZWF2ZSBldmVudCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgIEhhbmRs
ZU1vdXNlTGVhdmVFdmVudChXZWJLaXQ6OldlYk1vdXNlRXZlbnQgbW91c2VFdmVudCkgLT4gKGJv
b2wgaGFuZGxlZCkgU3luY2hyb25vdXMKLQotICAgICMgU2VudCB3aGVuIGEga2V5Ym9hcmQgc2hv
dWxkIGJlIHByb2Nlc3NlZC4KLSAgICBIYW5kbGVLZXlib2FyZEV2ZW50KFdlYktpdDo6V2ViS2V5
Ym9hcmRFdmVudCBrZXlib2FyZEV2ZW50KSAtPiAoYm9vbCBoYW5kbGVkKSBTeW5jaHJvbm91cwot
ICAgIAotICAgICMgU2VudCB3aGVuIGFuIGVkaXRpbmcgY29tbWFuZCBzaG91bGQgYmUgcHJvY2Vz
c2VkLgotICAgIEhhbmRsZUVkaXRpbmdDb21tYW5kKFN0cmluZyBjb21tYW5kTmFtZSwgU3RyaW5n
IGFyZ3VtZW50KSAtPiAoYm9vbCBoYW5kbGVkKSBTeW5jaHJvbm91cwotICAgIAotICAgICMgUmV0
dXJuIHdoZXRoZXIgb3Igbm90IGEgcGx1Z2luIHdhbnRzIHRvIGVuYWJsZSB0aGUgZ2l2ZW4gZWRp
dGluZyBjb21tYW5kLgotICAgIElzRWRpdGluZ0NvbW1hbmRFbmFibGVkKFN0cmluZyBjb21tYW5k
TmFtZSkgLT4gKGJvb2wgZW5hYmxlZCkgU3luY2hyb25vdXMKLSAgICAKLSAgICAjIFJldHVybiB3
aGV0aGVyIG9yIG5vdCBhIHBsdWdpbiB3YW50cyB0byBoYW5kbGUgcGFnZSBzY2FsZSBmYWN0b3Ig
aXRzZWxmLgotICAgIEhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSAtPiAoYm9vbCBlbmFibGVkKSBT
eW5jaHJvbm91cwotCi0gICAgIyBSZXR1cm4gd2hldGhlciBvciBub3QgYSBwbHVnaW4gd2FudHMg
cGFnZSBzY2FsZSwgcGFnZSB6b29tLCBhbmQgdGV4dCB6b29tIGFsbCB0byBhZmZlY3QgcGFnZSBz
Y2FsZS4KLSAgICBSZXF1aXJlc1VuaWZpZWRTY2FsZUZhY3RvcigpIC0+IChib29sIHJlcXVpcmVk
KSBTeW5jaHJvbm91cwotCi0gICAgIyBTZW50IHdoZW4gdGhlIHBsdWctaW4gZm9jdXMgY2hhbmdl
cy4KLSAgICBTZXRGb2N1cyhib29sIGlzRm9jdXNlZCkKLQotICAgICMgU2VudCB3aGVuIHRoZSB1
cGRhdGUgcmVxdWVzdGVkIGJ5IFVwZGF0ZSBoYXMgYmVlbiBwYWludGVkLgotICAgIERpZFVwZGF0
ZSgpCi0KLSAgICAjIFBhaW50IHRoZSBlbnRpcmUgcGx1Zy1pbi4KLSAgICBQYWludEVudGlyZVBs
dWdpbigpIC0+ICgpIFN5bmNocm9ub3VzCi0KLSAgICAjIEdldCBhIHJlZmVyZW5jZSB0byB0aGUg
cGx1Zy1pbidzIHNjcmlwdGFibGUgTlBPYmplY3QuCi0gICAgR2V0UGx1Z2luU2NyaXB0YWJsZU5Q
T2JqZWN0KCkgLT4gKHVpbnQ2NF90IHBsdWdpblNjcmlwdGFibGVOUE9iamVjdElEKSBTeW5jaHJv
bm91cwotCi0gICAgIyBTZW50IHdoZW4gdGhlIGNvbnRhaW5pbmcgTlNXaW5kb3cncyBmb2N1cyBj
aGFuZ2VzCi0gICAgV2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wgaGFzRm9jdXMpCi0KLSAgICAjIFNl
bnQgd2hlbiB0aGUgY29udGFpbmluZyBOU1dpbmRvdydzIHZpc2liaWxpdHkgY2hhbmdlcwotICAg
IFdpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKGJvb2wgaXNWaXNpYmxlKQotCi0jaWYgUExBVEZPUk0o
Q09DT0EpCi0gICAgIyBTZW5kIHRoZSBjb21wbGV4IHRleHQgaW5wdXQgdG8gdGhlIHBsdWctaW4u
Ci0gICAgU2VuZENvbXBsZXhUZXh0SW5wdXQoU3RyaW5nIHRleHRJbnB1dCkKLQotICAgICMgU2Vu
dCB3aGVuIHRoZSBjb250YWluaW5nIE5TV2luZG93IG9yIE5TVmlldyBmcmFtZSBjaGFuZ2VzCi0g
ICAgV2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoV2ViQ29yZTo6SW50UmVjdCB3aW5kb3dGcmFt
ZUluU2NyZWVuQ29vcmRpbmF0ZXMsIFdlYkNvcmU6OkludFJlY3Qgdmlld0ZyYW1lSW5XaW5kb3dD
b29yZGluYXRlcykKLQotICAgICMgU2VudCB3aGVuIHRoZSBjb250YWluaW5nIHdpbmRvdydzIGxh
eWVyIGhvc3RpbmcgbW9kZSBjaGFuZ2VzCi0gICAgU2V0TGF5ZXJIb3N0aW5nTW9kZSh1aW50MzJf
dCBsYXllckhvc3RpbmdNb2RlKQotI2VuZGlmCi0KLSAgICAjIERvZXMgdGhlIHBsdWdpbiBzdXBw
b3J0IHNuYXBzaG90dGluZz8KLSAgICBTdXBwb3J0c1NuYXBzaG90dGluZygpIC0+IChib29sIGlz
U3VwcG9ydGVkKSBTeW5jaHJvbm91cwotCi0gICAgIyBSZXR1cm4gYSBzbmFwc2hvdCBvZiB0aGUg
cGx1Z2luLgotICAgIFNuYXBzaG90KCkgLT4gKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5k
bGUgYmFja2luZ1N0b3JlSGFuZGxlKSBTeW5jaHJvbm91cwotCi0gICAgIyBTZW50IHdoZW4gc3Rv
cmFnZSBibG9ja2luZyBwb2xpY3kgY2hhbmdlcwotICAgIFN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hh
bmdlZChib29sIHN0b3JhZ2VCbG9ja2luZ0VuYWJsZWQpCi0KLSAgICAjIFNlbnQgd2hlbiBwcml2
YXRlIGJyb3dzaW5nIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQKLSAgICBQcml2YXRlQnJvd3NpbmdT
dGF0ZUNoYW5nZWQoYm9vbCBpc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQpCi0KLSAgICAjIEdldHMg
dGhlIHN0cmluZyByZXByZXNlbnRhdGluZyB0aGUgZm9ybSB2YWx1ZSBvZiB0aGUgcGx1Zy1pbgot
ICAgIEdldEZvcm1WYWx1ZSgpIC0+IChib29sIHJldHVyblZhbHVlLCBTdHJpbmcgZm9ybVZhbHVl
KSBTeW5jaHJvbm91cwotCi0gICAgIyBTZW50IHdoZW4gdGhlIGJyb3dzZXIgd2FudHMgdG8gbXV0
ZSBvciB1bm11dGUgdGhlIHBsdWdpbi4KLSAgICBNdXRlZFN0YXRlQ2hhbmdlZChib29sIG11dGVk
KQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9Q
bHVnaW5DcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNz
L1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGVjMjdlZWQ3NDk0OTNkNWIwYmM5MDVkMzY5MzVkODJlN2ZkNjY0ZDguLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9QbHVnaW5Q
cm9jZXNzL1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBs
dWdpbkNyZWF0aW9uUGFyYW1ldGVycy5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi0KLSNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzOjpQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMoKQot
ICAgIDogcGx1Z2luSW5zdGFuY2VJRCgwKQotICAgICwgd2luZG93TlBPYmplY3RJRCgwKQotICAg
ICwgY29udGVudHNTY2FsZUZhY3RvcigxKQotICAgICwgaXNQcml2YXRlQnJvd3NpbmdFbmFibGVk
KGZhbHNlKQotICAgICwgaXNNdXRlZChmYWxzZSkKLSAgICAsIGFzeW5jaHJvbm91c0NyZWF0aW9u
SW5jb21wbGV0ZShmYWxzZSkKLSAgICAsIGFydGlmaWNpYWxQbHVnaW5Jbml0aWFsaXphdGlvbkRl
bGF5RW5hYmxlZChmYWxzZSkKLSAgICAsIGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQo
ZmFsc2UpCi17Ci19Ci0KLXZvaWQgUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBD
OjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgcGx1Z2luSW5zdGFu
Y2VJRDsKLSAgICBlbmNvZGVyIDw8IHdpbmRvd05QT2JqZWN0SUQ7Ci0gICAgZW5jb2RlciA8PCBw
YXJhbWV0ZXJzOwotICAgIGVuY29kZXIgPDwgdXNlckFnZW50OwotICAgIGVuY29kZXIgPDwgY29u
dGVudHNTY2FsZUZhY3RvcjsKLSAgICBlbmNvZGVyIDw8IGlzUHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZDsKLSAgICBlbmNvZGVyIDw8IGlzTXV0ZWQ7Ci0gICAgZW5jb2RlciA8PCBhc3luY2hyb25vdXND
cmVhdGlvbkluY29tcGxldGU7Ci0gICAgZW5jb2RlciA8PCBhcnRpZmljaWFsUGx1Z2luSW5pdGlh
bGl6YXRpb25EZWxheUVuYWJsZWQ7Ci0gICAgZW5jb2RlciA8PCBpc0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdFbmFibGVkOwotfQotCi1ib29sIFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2Rl
KElQQzo6RGVjb2RlciYgZGVjb2RlciwgUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzJiByZXN1bHQp
Ci17Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucGx1Z2luSW5zdGFuY2VJRCkgfHwg
IXJlc3VsdC5wbHVnaW5JbnN0YW5jZUlEKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC53aW5kb3dOUE9iamVjdElEKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucGFyYW1ldGVycykp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LnVzZXJBZ2VudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0LmNvbnRlbnRzU2NhbGVGYWN0b3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc1ByaXZhdGVCcm93c2luZ0VuYWJs
ZWQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3VsdC5pc011dGVkKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQuYXN5bmNocm9ub3VzQ3JlYXRpb25JbmNvbXBsZXRlKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYXJ0aWZpY2lh
bFBsdWdpbkluaXRpYWxpemF0aW9uRGVsYXlFbmFibGVkKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nRW5hYmxlZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvUGx1
Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvUGx1
Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQy
OGY1Njc5MjE4Yzc3ZGYwMTIxNTE5ZjQ5NzE1ZWQzMDkwZGEzNjkuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNz
L1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5oCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzX2gKLSNkZWZp
bmUgUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzX2gKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotCi0jaW5jbHVkZSAiUGx1Z2luLmgiCi0KLW5hbWVzcGFjZSBJUEMgewotY2xhc3Mg
RGVjb2RlcjsKLWNsYXNzIEVuY29kZXI7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdHJ1
Y3QgUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMoKTsKLQotICAgIHZvaWQg
ZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0OwotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRV
Uk4gYm9vbCBkZWNvZGUoSVBDOjpEZWNvZGVyJiwgUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzJik7
Ci0KLSAgICAvLyBUaGUgdW5pcXVlIElEIG9mIHRoaXMgcGx1Zy1pbiBpbnN0YW5jZS4KLSAgICB1
aW50NjRfdCBwbHVnaW5JbnN0YW5jZUlEOwotCi0gICAgLy8gVGhlIElEIG9mIHRoZSB3aW5kb3cg
TlBPYmplY3QuCi0gICAgdWludDY0X3Qgd2luZG93TlBPYmplY3RJRDsKLQotICAgIC8vIFRoZSBw
YXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUgcGx1Zy1pbi4KLSAgICBQbHVnaW46OlBhcmFtZXRlcnMg
cGFyYW1ldGVyczsKLQotICAgIC8vIFRoZSBicm93c2VyIHVzZXIgYWdlbnQuCi0gICAgU3RyaW5n
IHVzZXJBZ2VudDsKLQotICAgIC8vIFRoZSBjdXJyZW50IGNvbnRlbnRzIHNjYWxlIGZhY3RvciB0
aGF0IHRoaXMgcGx1Zy1pbiBzaG91bGQgaGF2ZS4KLSAgICBmbG9hdCBjb250ZW50c1NjYWxlRmFj
dG9yOwotCi0gICAgLy8gV2hldGhlciBwcml2YXRlIGJyb3dzaW5nIGlzIGVuYWJsZWQgYXQgdGhl
IHRpbWUgb2YgaW5zdGFudGlhdGlvbi4KLSAgICBib29sIGlzUHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZDsKLQotICAgIC8vIFdoZXRoZXIgdGhlIHBsdWdpbiBzaG91bGQgYmUgbXV0ZWQuCi0gICAgYm9v
bCBpc011dGVkOwotICAgIAotICAgIC8vIElmIHJlcXVlc3Rpbmcgc3luY2hyb25vdXMgaW5pdGlh
bGl6YXRpb24sIHdoZXRoZXIgdGhpcyBwbHVnaW4gaGFkIHByZXZpb3VzbHkgYmVlbiByZXF1ZXN0
ZWQgYXN5bmNocm9ub3VzbHkKLSAgICBib29sIGFzeW5jaHJvbm91c0NyZWF0aW9uSW5jb21wbGV0
ZTsKLQotICAgIC8vIFNpbXVsYXRlZCBpbml0aWFsaXphdGlvbiBkZWxheSB0ZXN0IGFzeW5jaHJv
bm91cyBwbHVnaW4gaW5pdGlhbGl6YXRpb24KLSAgICBib29sIGFydGlmaWNpYWxQbHVnaW5Jbml0
aWFsaXphdGlvbkRlbGF5RW5hYmxlZDsKLQotICAgIC8vIFdoZXRoZXIgYWNjZWxlcmF0ZWQgY29t
cG9zaXRpbmcgaXMgZW5hYmxlZC4KLSAgICBib29sIGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Vu
YWJsZWQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jZW5kaWYgLy8gUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJz
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Qcm9jZXNz
LmNwcCBiL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Qcm9jZXNzLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM5NWFlNjBhMzQ4MjIyYzg0NTYwZmQ5OTQwYTM2
YjMwZWY0YzcwMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwyNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3MuaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJBdHRh
Y2htZW50LmgiCi0jaW5jbHVkZSAiQXV4aWxpYXJ5UHJvY2Vzc01lc3NhZ2VzLmgiCi0jaW5jbHVk
ZSAiTmV0c2NhcGVQbHVnaW4uaCIKLSNpbmNsdWRlICJOZXRzY2FwZVBsdWdpbk1vZHVsZS5oIgot
I2luY2x1ZGUgIlBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJQ
bHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vz
c1Byb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzQ29ubmVjdGlvbi5oIgotI2lu
Y2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHd0Zi9N
ZW1vcnlQcmVzc3VyZUhhbmRsZXIuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29w
Lmg+Ci0KLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSA8Y3J0X2V4dGVybnMuaD4KLSNlbmRp
ZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLU5P
X1JFVFVSTiBzdGF0aWMgdm9pZCBjYWxsRXhpdChJUEM6OkNvbm5lY3Rpb24qKQotewotICAgIF9l
eGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLVBsdWdpblByb2Nlc3MmIFBsdWdpblByb2Nlc3M6OnNp
bmdsZXRvbigpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFBsdWdpblByb2Nlc3M+IHBs
dWdpblByb2Nlc3M7Ci0gICAgcmV0dXJuIHBsdWdpblByb2Nlc3M7Ci19Ci0KLVBsdWdpblByb2Nl
c3M6OlBsdWdpblByb2Nlc3MoKQotICAgIDogbV9zdXBwb3J0c0FzeW5jaHJvbm91c1BsdWdpbklu
aXRpYWxpemF0aW9uKGZhbHNlKQotICAgICwgbV9taW5pbXVtTGlmZXRpbWVUaW1lcihSdW5Mb29w
OjptYWluKCksIHRoaXMsICZQbHVnaW5Qcm9jZXNzOjptaW5pbXVtTGlmZXRpbWVUaW1lckZpcmVk
KQotICAgICwgbV9jb25uZWN0aW9uQWN0aXZpdHkoIlBsdWdpblByb2Nlc3MgY29ubmVjdGlvbiBh
Y3Rpdml0eS4iKQotewotICAgIE5ldHNjYXBlUGx1Z2luOjpzZXRTZXRFeGNlcHRpb25GdW5jdGlv
bihXZWJQcm9jZXNzQ29ubmVjdGlvbjo6c2V0R2xvYmFsRXhjZXB0aW9uKTsKLX0KLQotUGx1Z2lu
UHJvY2Vzczo6flBsdWdpblByb2Nlc3MoKQotewotfQotCi12b2lkIFBsdWdpblByb2Nlc3M6Omlu
aXRpYWxpemVQcm9jZXNzKGNvbnN0IEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFt
ZXRlcnMmIHBhcmFtZXRlcnMpCi17Ci0gICAgV1RGOjpzZXRQcm9jZXNzUHJpdmlsZWdlcyhhbGxQ
cml2aWxlZ2VzKCkpOwotICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cGVybWl0
UHJvY2Vzc1RvVXNlQ29va2llQVBJKHRydWUpOwotICAgIG1fcGx1Z2luUGF0aCA9IHBhcmFtZXRl
cnMuZXh0cmFJbml0aWFsaXphdGlvbkRhdGEuZ2V0KCJwbHVnaW4tcGF0aCIpOwotICAgIHBsYXRm
b3JtSW5pdGlhbGl6ZVByb2Nlc3MocGFyYW1ldGVycyk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vz
czo6aW5pdGlhbGl6ZUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uKQotewot
ICAgIEF1eGlsaWFyeVByb2Nlc3M6OmluaXRpYWxpemVDb25uZWN0aW9uKGNvbm5lY3Rpb24pOwot
Ci0gICAgLy8gV2UgY2FsbCBfZXhpdCgpIGRpcmVjdGx5IGZyb20gdGhlIGJhY2tncm91bmQgcXVl
dWUgaW4gY2FzZSB0aGUgbWFpbiB0aHJlYWQgaXMgdW5yZXNwb25zaXZlCi0gICAgLy8gYW5kIEF1
eGlsaWFyeVByb2Nlc3M6OmRpZENsb3NlKCkgZG9lcyBub3QgZ2V0IGNhbGxlZC4KLSAgICBjb25u
ZWN0aW9uLT5zZXREaWRDbG9zZU9uQ29ubmVjdGlvbldvcmtRdWV1ZUNhbGxiYWNrKGNhbGxFeGl0
KTsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzOjpyZW1vdmVXZWJQcm9jZXNzQ29ubmVjdGlvbihX
ZWJQcm9jZXNzQ29ubmVjdGlvbiogd2ViUHJvY2Vzc0Nvbm5lY3Rpb24pCi17Ci0gICAgc2l6ZV90
IHZlY3RvckluZGV4ID0gbV93ZWJQcm9jZXNzQ29ubmVjdGlvbnMuZmluZCh3ZWJQcm9jZXNzQ29u
bmVjdGlvbik7Ci0gICAgQVNTRVJUKHZlY3RvckluZGV4ICE9IG5vdEZvdW5kKTsKLQotICAgIG1f
d2ViUHJvY2Vzc0Nvbm5lY3Rpb25zLnJlbW92ZSh2ZWN0b3JJbmRleCk7Ci0gICAgCi0gICAgaWYg
KG1fd2ViUHJvY2Vzc0Nvbm5lY3Rpb25zLmlzRW1wdHkoKSAmJiBtX3BsdWdpbk1vZHVsZSkgewot
ICAgICAgICAvLyBEZWNyZW1lbnQgdGhlIGxvYWQgY291bnQuIFRoaXMgaXMgYmFsYW5jZWQgYnkg
YSBjYWxsIHRvIGluY3JlbWVudExvYWRDb3VudCBpbiBjcmVhdGVXZWJQcm9jZXNzQ29ubmVjdGlv
bi4KLSAgICAgICAgbV9wbHVnaW5Nb2R1bGUtPmRlY3JlbWVudExvYWRDb3VudCgpOwotICAgIH0g
ICAgICAgIAotCi0gICAgZW5hYmxlVGVybWluYXRpb24oKTsKLX0KLQotTmV0c2NhcGVQbHVnaW5N
b2R1bGUqIFBsdWdpblByb2Nlc3M6Om5ldHNjYXBlUGx1Z2luTW9kdWxlKCkKLXsKLSAgICBpZiAo
IW1fcGx1Z2luTW9kdWxlKSB7Ci0gICAgICAgIEFTU0VSVCghbV9wbHVnaW5QYXRoLmlzTnVsbCgp
KTsKLSAgICAgICAgbV9wbHVnaW5Nb2R1bGUgPSBOZXRzY2FwZVBsdWdpbk1vZHVsZTo6Z2V0T3JD
cmVhdGUobV9wbHVnaW5QYXRoKTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgaWYgKG1f
cGx1Z2luTW9kdWxlKSB7Ci0gICAgICAgICAgICBpZiAobV9wbHVnaW5Nb2R1bGUtPnBsdWdpblF1
aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrczo6UHJvZ25hbWVTaG91bGRCZVdlYktpdFBsdWdp
bkhvc3QpKQotICAgICAgICAgICAgICAgICpjb25zdF9jYXN0PGNvbnN0IGNoYXIqKj4oX05TR2V0
UHJvZ25hbWUoKSkgPSAiV2ViS2l0UGx1Z2luSG9zdCI7Ci0gICAgICAgIH0KLSNlbmRpZgotICAg
IH0KLQotICAgIHJldHVybiBtX3BsdWdpbk1vZHVsZS5nZXQoKTsKLX0KLQotYm9vbCBQbHVnaW5Q
cm9jZXNzOjpzaG91bGRUZXJtaW5hdGUoKQotewotICAgIHJldHVybiBtX3dlYlByb2Nlc3NDb25u
ZWN0aW9ucy5pc0VtcHR5KCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzczo6ZGlkUmVjZWl2ZU1l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIp
Ci17Ci0jaWYgT1MoTElOVVgpCi0gICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgp
ID09IE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsK
LSAgICAgICAgQXV4aWxpYXJ5UHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwg
ZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGRpZFJlY2Vp
dmVQbHVnaW5Qcm9jZXNzTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLX0KLQotdm9pZCBQ
bHVnaW5Qcm9jZXNzOjppbml0aWFsaXplUGx1Z2luUHJvY2VzcyhQbHVnaW5Qcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKLXsKLSAgICBBU1NFUlQoIW1fcGx1Z2luTW9kdWxl
KTsKLQotICAgIGF1dG8mIG1lbW9yeVByZXNzdXJlSGFuZGxlciA9IE1lbW9yeVByZXNzdXJlSGFu
ZGxlcjo6c2luZ2xldG9uKCk7Ci0gICAgbWVtb3J5UHJlc3N1cmVIYW5kbGVyLnNldExvd01lbW9y
eUhhbmRsZXIoW3RoaXNdIChDcml0aWNhbCwgU3luY2hyb25vdXMpIHsKLSAgICAgICAgaWYgKHNo
b3VsZFRlcm1pbmF0ZSgpKQotICAgICAgICAgICAgdGVybWluYXRlKCk7Ci0gICAgfSk7Ci0gICAg
bWVtb3J5UHJlc3N1cmVIYW5kbGVyLmluc3RhbGwoKTsKLQotICAgIG1fc3VwcG9ydHNBc3luY2hy
b25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbiA9IHBhcmFtZXRlcnMuc3VwcG9ydHNBc3luY2hyb25v
dXNQbHVnaW5Jbml0aWFsaXphdGlvbjsKLSAgICBzZXRNaW5pbXVtTGlmZXRpbWUocGFyYW1ldGVy
cy5taW5pbXVtTGlmZXRpbWUpOwotICAgIHNldFRlcm1pbmF0aW9uVGltZW91dChwYXJhbWV0ZXJz
LnRlcm1pbmF0aW9uVGltZW91dCk7Ci0KLSAgICBwbGF0Zm9ybUluaXRpYWxpemVQbHVnaW5Qcm9j
ZXNzKFdURk1vdmUocGFyYW1ldGVycykpOwotfQotCi12b2lkIFBsdWdpblByb2Nlc3M6OmNyZWF0
ZVdlYlByb2Nlc3NDb25uZWN0aW9uKCkKLXsKLSAgICAvLyBGSVhNRTogTWVyZ2UgdGhpcyB3aXRo
IEF1eGlsaWFyeVByb2Nlc3M6OmNyZWF0ZUlQQ0Nvbm5lY3Rpb25QYWlyKCkuCi0KLSAgICBib29s
IGRpZEhhdmVBbnlXZWJQcm9jZXNzQ29ubmVjdGlvbnMgPSAhbV93ZWJQcm9jZXNzQ29ubmVjdGlv
bnMuaXNFbXB0eSgpOwotCi0jaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCi0gICAgSVBDOjpD
b25uZWN0aW9uOjpTb2NrZXRQYWlyIHNvY2tldFBhaXIgPSBJUEM6OkNvbm5lY3Rpb246OmNyZWF0
ZVBsYXRmb3JtQ29ubmVjdGlvbigpOwotCi0gICAgYXV0byBjb25uZWN0aW9uID0gV2ViUHJvY2Vz
c0Nvbm5lY3Rpb246OmNyZWF0ZShzb2NrZXRQYWlyLnNlcnZlcik7Ci0gICAgbV93ZWJQcm9jZXNz
Q29ubmVjdGlvbnMuYXBwZW5kKFdURk1vdmUoY29ubmVjdGlvbikpOwotCi0gICAgSVBDOjpBdHRh
Y2htZW50IGNsaWVudFNvY2tldChzb2NrZXRQYWlyLmNsaWVudCk7Ci0gICAgcGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1Z2luUHJvY2Vzc1Byb3h5OjpEaWRDcmVh
dGVXZWJQcm9jZXNzQ29ubmVjdGlvbihjbGllbnRTb2NrZXQsIG1fc3VwcG9ydHNBc3luY2hyb25v
dXNQbHVnaW5Jbml0aWFsaXphdGlvbiksIDApOwotI2VsaWYgT1MoREFSV0lOKQotICAgIC8vIENy
ZWF0ZSB0aGUgbGlzdGVuaW5nIHBvcnQuCi0gICAgbWFjaF9wb3J0X3QgbGlzdGVuaW5nUG9ydCA9
IE1BQ0hfUE9SVF9OVUxMOwotICAgIGF1dG8ga3IgPSBtYWNoX3BvcnRfYWxsb2NhdGUobWFjaF90
YXNrX3NlbGYoKSwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZsaXN0ZW5pbmdQb3J0KTsKLSAg
ICBpZiAoa3IgIT0gS0VSTl9TVUNDRVNTKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90
IGFsbG9jYXRlIG1hY2ggcG9ydCwgZXJyb3IgJXgiLCBrcik7Ci0gICAgICAgIENSQVNIKCk7Ci0g
ICAgfQotCi0gICAgLy8gQ3JlYXRlIGEgbGlzdGVuaW5nIGNvbm5lY3Rpb24uCi0gICAgYXV0byBj
b25uZWN0aW9uID0gV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0ZShJUEM6OkNvbm5lY3Rpb246
OklkZW50aWZpZXIobGlzdGVuaW5nUG9ydCkpOwotCi0gICAgbV93ZWJQcm9jZXNzQ29ubmVjdGlv
bnMuYXBwZW5kKFdURk1vdmUoY29ubmVjdGlvbikpOwotCi0gICAgSVBDOjpBdHRhY2htZW50IGNs
aWVudFBvcnQobGlzdGVuaW5nUG9ydCwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpOwotICAgIHBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpblByb2Nlc3NQcm94
eTo6RGlkQ3JlYXRlV2ViUHJvY2Vzc0Nvbm5lY3Rpb24oY2xpZW50UG9ydCwgbV9zdXBwb3J0c0Fz
eW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uKSwgMCk7Ci0jZWxzZQotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0jZW5kaWYKLQotICAgIGlmIChOZXRzY2FwZVBsdWdpbk1vZHVsZSogbW9kdWxl
ID0gbmV0c2NhcGVQbHVnaW5Nb2R1bGUoKSkgewotICAgICAgICBpZiAoIWRpZEhhdmVBbnlXZWJQ
cm9jZXNzQ29ubmVjdGlvbnMpIHsKLSAgICAgICAgICAgIC8vIEluY3JlbWVudCB0aGUgbG9hZCBj
b3VudC4gVGhpcyBpcyBtYXRjaGVkIGJ5IGEgY2FsbCB0byBkZWNyZW1lbnRMb2FkQ291bnQgaW4g
cmVtb3ZlV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uCi0gICAgICAgICAgICAvLyBXZSBkbyB0aGlzIHNv
IHRoYXQgdGhlIHBsdWctaW4gbW9kdWxlJ3MgTlBfU2h1dGRvd24gd29uJ3QgYmUgY2FsbGVkIHVu
dGlsIHJpZ2h0IGJlZm9yZSBleGl0aW5nLgotICAgICAgICAgICAgbW9kdWxlLT5pbmNyZW1lbnRM
b2FkQ291bnQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGRpc2FibGVUZXJtaW5hdGlvbigp
OwotfQotCi12b2lkIFBsdWdpblByb2Nlc3M6OmdldFNpdGVzV2l0aERhdGEodWludDY0X3QgY2Fs
bGJhY2tJRCkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiBzaXRlczsKLSAgICBpZiAoTmV0c2NhcGVQ
bHVnaW5Nb2R1bGUqIG1vZHVsZSA9IG5ldHNjYXBlUGx1Z2luTW9kdWxlKCkpCi0gICAgICAgIHNp
dGVzID0gbW9kdWxlLT5zaXRlc1dpdGhEYXRhKCk7Ci0KLSAgICBwYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Qcm9jZXNzUHJveHk6OkRpZEdldFNpdGVzV2l0
aERhdGEoc2l0ZXMsIGNhbGxiYWNrSUQpLCAwKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzOjpk
ZWxldGVXZWJzaXRlRGF0YShXYWxsVGltZSBtb2RpZmllZFNpbmNlLCB1aW50NjRfdCBjYWxsYmFj
a0lEKQotewotICAgIGlmIChhdXRvKiBtb2R1bGUgPSBuZXRzY2FwZVBsdWdpbk1vZHVsZSgpKSB7
Ci0gICAgICAgIGF1dG8gY3VycmVudFRpbWUgPSBXYWxsVGltZTo6bm93KCk7Ci0KLSAgICAgICAg
aWYgKGN1cnJlbnRUaW1lID4gbW9kaWZpZWRTaW5jZSkgewotICAgICAgICAgICAgdWludDY0X3Qg
bWF4aW11bUFnZSA9IChjdXJyZW50VGltZSAtIG1vZGlmaWVkU2luY2UpLnNlY29uZHNBczx1aW50
NjRfdD4oKTsKLQotICAgICAgICAgICAgbW9kdWxlLT5jbGVhclNpdGVEYXRhKFN0cmluZygpLCBO
UF9DTEVBUl9BTEwsIG1heGltdW1BZ2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1Z2luUHJvY2Vzc1Byb3h5OjpE
aWREZWxldGVXZWJzaXRlRGF0YShjYWxsYmFja0lEKSwgMCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJv
Y2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JIb3N0TmFtZXMoY29uc3QgVmVjdG9yPFN0cmluZz4m
IGhvc3ROYW1lcywgdWludDY0X3QgY2FsbGJhY2tJRCkKLXsKLSAgICBpZiAoYXV0byogbW9kdWxl
ID0gbmV0c2NhcGVQbHVnaW5Nb2R1bGUoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGhvc3ROYW1l
IDogaG9zdE5hbWVzKQotICAgICAgICAgICAgbW9kdWxlLT5jbGVhclNpdGVEYXRhKGhvc3ROYW1l
LCBOUF9DTEVBUl9BTEwsIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSk7Ci0g
ICAgfQotCi0gICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1
Z2luUHJvY2Vzc1Byb3h5OjpEaWREZWxldGVXZWJzaXRlRGF0YUZvckhvc3ROYW1lcyhjYWxsYmFj
a0lEKSwgMCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzczo6c2V0TWluaW11bUxpZmV0aW1lKFNl
Y29uZHMgbGlmZXRpbWUpCi17Ci0gICAgaWYgKGxpZmV0aW1lIDw9IDBfcykKLSAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIGRpc2FibGVUZXJtaW5hdGlvbigpOwotICAgIAotICAgIG1fbWluaW11
bUxpZmV0aW1lVGltZXIuc3RhcnRPbmVTaG90KGxpZmV0aW1lKTsKLX0KLQotdm9pZCBQbHVnaW5Q
cm9jZXNzOjptaW5pbXVtTGlmZXRpbWVUaW1lckZpcmVkKCkKLXsKLSAgICBlbmFibGVUZXJtaW5h
dGlvbigpOwotfQotCi0jaWYgIVBMQVRGT1JNKENPQ09BKQotdm9pZCBQbHVnaW5Qcm9jZXNzOjpp
bml0aWFsaXplUHJvY2Vzc05hbWUoY29uc3QgQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9u
UGFyYW1ldGVycyYpCi17Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzczo6aW5pdGlhbGl6ZVNhbmRi
b3goY29uc3QgQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYsIFNhbmRi
b3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKQotewotfQotI2VuZGlmCi0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Qcm9jZXNzLmggYi9T
b3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA0ZmNhYjEyZWIwN2Q4M2Q0ODdhNzczNDRjM2Q0ZDdmMzk3Njc1Zjkx
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Qcm9jZXNzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
MzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIkF1eGlsaWFyeVByb2Nlc3MuaCIKLSNp
bmNsdWRlIDxXZWJDb3JlL0NvdW50ZWRVc2VyQWN0aXZpdHkuaD4KLSNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgUExBVEZPUk0o
Q09DT0EpCi0jaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KLSNlbmRpZgotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotY2xhc3MgTmV0c2NhcGVQbHVnaW5Nb2R1bGU7Ci1jbGFzcyBXZWJQcm9j
ZXNzQ29ubmVjdGlvbjsKLXN0cnVjdCBQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwot
ICAgICAgICAKLWNsYXNzIFBsdWdpblByb2Nlc3MgOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzcwot
ewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBsdWdpblByb2Nlc3MpOwotICAgIGZyaWVuZCBO
ZXZlckRlc3Ryb3llZDxQbHVnaW5Qcm9jZXNzPjsKLQotcHVibGljOgotICAgIHN0YXRpYyBQbHVn
aW5Qcm9jZXNzJiBzaW5nbGV0b24oKTsKLSAgICBzdGF0aWMgY29uc3RleHByIFdlYkNvcmU6OkF1
eGlsaWFyeVByb2Nlc3NUeXBlIHByb2Nlc3NUeXBlID0gV2ViQ29yZTo6QXV4aWxpYXJ5UHJvY2Vz
c1R5cGU6OlBsdWdpbjsKLQotICAgIHZvaWQgcmVtb3ZlV2ViUHJvY2Vzc0Nvbm5lY3Rpb24oV2Vi
UHJvY2Vzc0Nvbm5lY3Rpb24qKTsKLQotICAgIE5ldHNjYXBlUGx1Z2luTW9kdWxlKiBuZXRzY2Fw
ZVBsdWdpbk1vZHVsZSgpOwotCi0gICAgY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoKCkgY29uc3Qg
eyByZXR1cm4gbV9wbHVnaW5QYXRoOyB9Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICB2b2lk
IHNldE1vZGFsV2luZG93SXNTaG93aW5nKGJvb2wpOwotICAgIHZvaWQgc2V0RnVsbHNjcmVlbldp
bmRvd0lzU2hvd2luZyhib29sKTsKLQotICAgIGNvbnN0IFdURjo6TWFjaFNlbmRSaWdodCYgY29t
cG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0KCkgY29uc3QgeyByZXR1cm4gbV9jb21wb3NpdGluZ1Jl
bmRlclNlcnZlclBvcnQ7IH0KLQotICAgIGJvb2wgbGF1bmNoUHJvY2Vzcyhjb25zdCBTdHJpbmcm
IGxhdW5jaFBhdGgsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhcmd1bWVudHMpOwotICAgIGJvb2wg
bGF1bmNoQXBwbGljYXRpb25BdFVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGFyZ3VtZW50cyk7Ci0gICAgYm9vbCBvcGVuVVJMKGNvbnN0IFN0cmluZyYg
dXJsU3RyaW5nLCBpbnQzMl90JiBzdGF0dXMsIFN0cmluZyYgbGF1bmNoZWRVUkxTdHJpbmcpOwot
ICAgIGJvb2wgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOwotI2VuZGlmCi0KLSAg
ICBDb3VudGVkVXNlckFjdGl2aXR5JiBjb25uZWN0aW9uQWN0aXZpdHkoKSB7IHJldHVybiBtX2Nv
bm5lY3Rpb25BY3Rpdml0eTsgfQotCi1wcml2YXRlOgotICAgIFBsdWdpblByb2Nlc3MoKTsKLSAg
ICB+UGx1Z2luUHJvY2VzcygpOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIGJvb2wgc2hvdWxk
T3ZlcnJpZGVRdWFyYW50aW5lKCkgZmluYWw7Ci0jZW5kaWYKLQotICAgIC8vIEF1eGlsaWFyeVBy
b2Nlc3MKLSAgICB2b2lkIGluaXRpYWxpemVQcm9jZXNzKGNvbnN0IEF1eGlsaWFyeVByb2Nlc3NJ
bml0aWFsaXphdGlvblBhcmFtZXRlcnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGluaXRpYWxpemVQ
cm9jZXNzTmFtZShjb25zdCBBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJz
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBpbml0aWFsaXplQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rp
b24qKSBvdmVycmlkZTsKLSAgICB2b2lkIGluaXRpYWxpemVTYW5kYm94KGNvbnN0IEF1eGlsaWFy
eVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmLCBTYW5kYm94SW5pdGlhbGl6YXRpb25Q
YXJhbWV0ZXJzJikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzaG91bGRUZXJtaW5hdGUoKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZVByb2Nlc3MoY29uc3QgQXV4aWxpYXJ5UHJv
Y2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYpOwotCi0jaWYgVVNFKEFQUEtJVCkKLSAgICB2
b2lkIHN0b3BSdW5Mb29wKCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotICAgIC8vIElQQzo6Q29ubmVj
dGlvbjo6Q2xpZW50Ci0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKLQotICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMuCi0g
ICAgdm9pZCBkaWRSZWNlaXZlUGx1Z2luUHJvY2Vzc01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwg
SVBDOjpEZWNvZGVyJik7Ci0gICAgdm9pZCBpbml0aWFsaXplUGx1Z2luUHJvY2VzcyhQbHVnaW5Q
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYpOwotICAgIHZvaWQgY3JlYXRlV2ViUHJvY2Vzc0Nv
bm5lY3Rpb24oKTsKLQotICAgIHZvaWQgZ2V0U2l0ZXNXaXRoRGF0YSh1aW50NjRfdCBjYWxsYmFj
a0lEKTsKLSAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKFdhbGxUaW1lIG1vZGlmaWVkU2luY2Us
IHVpbnQ2NF90IGNhbGxiYWNrSUQpOwotICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGFGb3JIb3N0
TmFtZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3ROYW1lcywgdWludDY0X3QgY2FsbGJhY2tJ
RCk7Ci0KLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZVBsdWdpblByb2Nlc3MoUGx1Z2luUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmKTsKLSAgICAKLSAgICB2b2lkIHNldE1pbmltdW1MaWZl
dGltZShTZWNvbmRzKTsKLSAgICB2b2lkIG1pbmltdW1MaWZldGltZVRpbWVyRmlyZWQoKTsKLSAg
ICAvLyBPdXIgd2ViIHByb2Nlc3MgY29ubmVjdGlvbnMuCi0gICAgVmVjdG9yPFJlZlB0cjxXZWJQ
cm9jZXNzQ29ubmVjdGlvbj4+IG1fd2ViUHJvY2Vzc0Nvbm5lY3Rpb25zOwotCi0gICAgLy8gVGhl
IHBsdWctaW4gcGF0aC4KLSAgICBTdHJpbmcgbV9wbHVnaW5QYXRoOwotCi0jaWYgUExBVEZPUk0o
Q09DT0EpCi0gICAgU3RyaW5nIG1fcGx1Z2luQnVuZGxlSWRlbnRpZmllcjsKLSNlbmRpZgotCi0g
ICAgLy8gVGhlIHBsdWctaW4gbW9kdWxlLgotICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbk1vZHVs
ZT4gbV9wbHVnaW5Nb2R1bGU7Ci0gICAgCi0gICAgYm9vbCBtX3N1cHBvcnRzQXN5bmNocm9ub3Vz
UGx1Z2luSW5pdGlhbGl6YXRpb247Ci0KLSAgICBSdW5Mb29wOjpUaW1lcjxQbHVnaW5Qcm9jZXNz
PiBtX21pbmltdW1MaWZldGltZVRpbWVyOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgLy8g
VGhlIE1hY2ggcG9ydCB1c2VkIGZvciBhY2NlbGVyYXRlZCBjb21wb3NpdGluZy4KLSAgICBXVEY6
Ok1hY2hTZW5kUmlnaHQgbV9jb21wb3NpdGluZ1JlbmRlclNlcnZlclBvcnQ7Ci0KLSAgICBTdHJp
bmcgbV9uc3VybENhY2hlRGlyZWN0b3J5OwotI2VuZGlmCi0KLSAgICBDb3VudGVkVXNlckFjdGl2
aXR5IG1fY29ubmVjdGlvbkFjdGl2aXR5OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Qcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNl
L1dlYktpdC9QbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MubWVzc2FnZXMuaW4KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2NDY4MjYwNTM3MjBjZjYxMWU5NjYyNzRkODIwZjdhY2Ji
MDRiZTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MubWVzc2FnZXMuaW4KKysrIC9k
ZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJl
IG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgot
IyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
Ci0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotbWVzc2FnZXMgLT4g
UGx1Z2luUHJvY2VzcyBMZWdhY3lSZWNlaXZlciBOb3RSZWZDb3VudGVkIHsKLSAgICAjIEluaXRp
YWxpemVzIHRoZSBwbHVnLWluIHByb2Nlc3MuCi0gICAgSW5pdGlhbGl6ZVBsdWdpblByb2Nlc3Mo
c3RydWN0IFdlYktpdDo6UGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzKQotICAgIAotICAgICMgQ3JlYXRlcyBhIHdlYiBwcm9jZXNzIGNvbm5l
Y3Rpb24uIFdoZW4gdGhlIGNvbm5lY3Rpb24gaGFzIGJlZW4gY3JlYXRlZCwKLSAgICAjIFRoZSBw
bHVnLWluIHByb2Nlc3Mgc2VuZHMgYmFjayBhIERpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9u
IG1lc3NhZ2Ugd2l0aAotICAgICMgYSBjb25uZWN0aW9uIGlkZW50aWZpZXIuCi0gICAgQ3JlYXRl
V2ViUHJvY2Vzc0Nvbm5lY3Rpb24oKQotCi0gICAgIyBBc2tzIHRoZSBwbHVnLWluIHByb2Nlc3Mg
Zm9yIHNpdGVzIHdpdGggZGF0YS4gVGhlIHBsdWctaW4gcHJvY2VzcyBzZW5kcyBiYWNrIGEgCi0g
ICAgIyBEaWRHZXRTaXRlc1dpdGhEYXRhIG1lc3NhZ2Ugd2l0aCB0aGUgc2l0ZXMuCi0gICAgR2V0
U2l0ZXNXaXRoRGF0YSh1aW50NjRfdCBjYWxsYmFja0lEKQotCi0gICAgRGVsZXRlV2Vic2l0ZURh
dGEoV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgdWludDY0X3QgY2FsbGJhY2tJRCkKLSAgICBEZWxl
dGVXZWJzaXRlRGF0YUZvckhvc3ROYW1lcyhWZWN0b3I8U3RyaW5nPiBob3N0TmFtZXMsIHVpbnQ2
NF90IGNhbGxiYWNrSUQpCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBTZXRRT1MoaW50IGxh
dGVuY3lRT1MsIGludCB0aHJvdWdocHV0UU9TKQotI2VuZGlmCi19Ci0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmNw
cCBiL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZjMzZjgyMDJiMjdlNGVmOGNmODQ3Y2Zi
NjFkNjBiNGU3ZmY5NTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NDb25uZWN0aW9uLmgiCi0KLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIkFjdGl2aXR5QXNzZXJ0aW9uLmgi
Ci0jaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJOUE9iamVjdE1lc3NhZ2VS
ZWNlaXZlck1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiTlBSZW1vdGVPYmplY3RNYXAuaCIKLSNpbmNs
dWRlICJQbHVnaW5Db250cm9sbGVyUHJveHkuaCIKLSNpbmNsdWRlICJQbHVnaW5DcmVhdGlvblBh
cmFtZXRlcnMuaCIKLSNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzLmgiCi0jaW5jbHVkZSAiUGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oIgotI2luY2x1ZGUgIlBsdWdpblByb3h5TWVzc2Fn
ZXMuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmgiCi0jaW5jbHVk
ZSA8d3RmL1NldEZvclNjb3BlLmg+Ci0KLSNpZiAhT1MoV0lORE9XUykKLSNpbmNsdWRlIDx1bmlz
dGQuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwotCi1zdGF0aWMgSVBDOjpDb25uZWN0aW9uKiBjdXJyZW50Q29ubmVjdGlvbjsKLQotUmVm
PFdlYlByb2Nlc3NDb25uZWN0aW9uPiBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Y3JlYXRlKElQQzo6
Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcikKLXsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBXZWJQcm9jZXNzQ29ubmVjdGlvbihjb25uZWN0aW9uSWRlbnRpZmll
cikpOwotfQotCi1XZWJQcm9jZXNzQ29ubmVjdGlvbjo6fldlYlByb2Nlc3NDb25uZWN0aW9uKCkK
LXsKLSAgICBBU1NFUlQobV9wbHVnaW5Db250cm9sbGVycy5pc0VtcHR5KCkpOwotICAgIEFTU0VS
VCghbV9ucFJlbW90ZU9iamVjdE1hcCk7Ci0gICAgQVNTRVJUKCFtX2Nvbm5lY3Rpb24pOwotfQot
ICAgIAotV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OldlYlByb2Nlc3NDb25uZWN0aW9uKElQQzo6Q29u
bmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcikKLXsKLSAgICBtX2Nvbm5l
Y3Rpb24gPSBJUEM6OkNvbm5lY3Rpb246OmNyZWF0ZVNlcnZlckNvbm5lY3Rpb24oY29ubmVjdGlv
bklkZW50aWZpZXIsICp0aGlzKTsKLSAgICBtX25wUmVtb3RlT2JqZWN0TWFwID0gTlBSZW1vdGVP
YmplY3RNYXA6OmNyZWF0ZShtX2Nvbm5lY3Rpb24uZ2V0KCkpOwotCi0gICAgLy8gVXNlIHRoaXMg
ZmxhZyB0byBmb3JjZSBzeW5jaHJvbm91cyBtZXNzYWdlcyB0byBiZSB0cmVhdGVkIGFzIGFzeW5j
aHJvbm91cyBtZXNzYWdlcyBpbiB0aGUgV2ViUHJvY2Vzcy4KLSAgICAvLyBPdGhlcndpc2UsIHRo
ZSBXZWJQcm9jZXNzIHdvdWxkIHByb2Nlc3MgaW5jb21pbmcgc3luY2hyb25vdXMgSVBDIHdoaWxl
IHdhaXRpbmcgZm9yIGEgc3luY2hyb25vdXMgSVBDCi0gICAgLy8gcmVwbHkgZnJvbSB0aGUgUGx1
Z2luIHByb2Nlc3MsIHdoaWNoIHdvdWxkIGJlIHVuc2FmZS4KLSAgICBtX2Nvbm5lY3Rpb24tPnNl
dE9ubHlTZW5kTWVzc2FnZXNBc0Rpc3BhdGNoV2hlbldhaXRpbmdGb3JTeW5jUmVwbHlXaGVuUHJv
Y2Vzc2luZ1N1Y2hBTWVzc2FnZSh0cnVlKTsKLSAgICBtX2Nvbm5lY3Rpb24tPm9wZW4oKTsKLX0K
LQotdm9pZCBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6YWRkUGx1Z2luQ29udHJvbGxlclByb3h5KHN0
ZDo6dW5pcXVlX3B0cjxQbHVnaW5Db250cm9sbGVyUHJveHk+IHBsdWdpbkNvbnRyb2xsZXIpCi17
Ci0gICAgdWludDY0X3QgcGx1Z2luSW5zdGFuY2VJRCA9IHBsdWdpbkNvbnRyb2xsZXItPnBsdWdp
bkluc3RhbmNlSUQoKTsKLQotICAgIEFTU0VSVCghbV9wbHVnaW5Db250cm9sbGVycy5jb250YWlu
cyhwbHVnaW5JbnN0YW5jZUlEKSk7Ci0gICAgbV9wbHVnaW5Db250cm9sbGVycy5zZXQocGx1Z2lu
SW5zdGFuY2VJRCwgV1RGTW92ZShwbHVnaW5Db250cm9sbGVyKSk7Ci19Ci0KLXZvaWQgV2ViUHJv
Y2Vzc0Nvbm5lY3Rpb246OmRlc3Ryb3lQbHVnaW5Db250cm9sbGVyUHJveHkoUGx1Z2luQ29udHJv
bGxlclByb3h5KiBwbHVnaW5Db250cm9sbGVyKQotewotICAgIC8vIFRoaXMgbWF5IGVuZCB1cCBj
YWxsaW5nIHJlbW92ZVBsdWdpbkNvbnRyb2xsZXJQcm94eSB3aGljaCBlbmRzIHVwIGRlbGV0aW5n
Ci0gICAgLy8gdGhlIFdlYlByb2Nlc3NDb25uZWN0aW9uIG9iamVjdCBpZiB0aGlzIHdhcyB0aGUg
bGFzdCBvYmplY3QuCi0gICAgcGx1Z2luQ29udHJvbGxlci0+ZGVzdHJveSgpOwotfQotCi12b2lk
IFdlYlByb2Nlc3NDb25uZWN0aW9uOjpyZW1vdmVQbHVnaW5Db250cm9sbGVyUHJveHkoUGx1Z2lu
Q29udHJvbGxlclByb3h5KiBwbHVnaW5Db250cm9sbGVyLCBQbHVnaW4qIHBsdWdpbikKLXsKLSAg
ICB1bnNpZ25lZCBwbHVnaW5JbnN0YW5jZUlEID0gcGx1Z2luQ29udHJvbGxlci0+cGx1Z2luSW5z
dGFuY2VJRCgpOwotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcGx1Z2luQ29udHJvbGxlcnMuY29u
dGFpbnMocGx1Z2luSW5zdGFuY2VJRCkpOwotCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQbHVn
aW5Db250cm9sbGVyUHJveHk+IHBsdWdpbkNvbnRyb2xsZXJVbmlxdWVQdHIgPSBtX3BsdWdpbkNv
bnRyb2xsZXJzLnRha2UocGx1Z2luSW5zdGFuY2VJRCk7Ci0gICAgICAgIEFTU0VSVChwbHVnaW5D
b250cm9sbGVyVW5pcXVlUHRyLmdldCgpID09IHBsdWdpbkNvbnRyb2xsZXIpOwotICAgIH0KLQot
ICAgIC8vIEludmFsaWRhdGUgYWxsIG9iamVjdHMgcmVsYXRlZCB0byB0aGlzIHBsdWctaW4uCi0g
ICAgaWYgKHBsdWdpbikKLSAgICAgICAgbV9ucFJlbW90ZU9iamVjdE1hcC0+cGx1Z2luRGVzdHJv
eWVkKHBsdWdpbik7Ci0KLSAgICBpZiAoIW1fcGx1Z2luQ29udHJvbGxlcnMuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX25wUmVtb3RlT2JqZWN0TWFwID0gbnVsbHB0cjsKLQot
ICAgIC8vIFRoZSBsYXN0IHBsdWctaW4gd2VudCBhd2F5LCBjbG9zZSB0aGlzIGNvbm5lY3Rpb24u
Ci0gICAgbV9jb25uZWN0aW9uLT5pbnZhbGlkYXRlKCk7Ci0gICAgbV9jb25uZWN0aW9uID0gbnVs
bHB0cjsKLQotICAgIC8vIFRoaXMgd2lsbCBjYXVzZSB1cyB0byBiZSBkZWxldGVkLiAgICAKLSAg
ICBQbHVnaW5Qcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVXZWJQcm9jZXNzQ29ubmVjdGlvbih0
aGlzKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6c2V0R2xvYmFsRXhjZXB0aW9u
KGNvbnN0IFN0cmluZyYgZXhjZXB0aW9uU3RyaW5nKQotewotICAgIGlmICghY3VycmVudENvbm5l
Y3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGN1cnJlbnRDb25uZWN0aW9uLT5zZW5kU3lu
YyhNZXNzYWdlczo6UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246OlNldEV4Y2VwdGlvbihleGNlcHRp
b25TdHJpbmcpLCBNZXNzYWdlczo6UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246OlNldEV4Y2VwdGlv
bjo6UmVwbHkoKSwgMCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2Vp
dmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNv
ZGVyKQotewotICAgIFNldEZvclNjb3BlPElQQzo6Q29ubmVjdGlvbio+IGN1cnJlbnRDb25uZWN0
aW9uQ2hhbmdlKGN1cnJlbnRDb25uZWN0aW9uLCAmY29ubmVjdGlvbik7Ci0KLSAgICBpZiAoZGVj
b2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlByb2Nlc3NDb25uZWN0
aW9uOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKLSAgICAgICAgZGlkUmVjZWl2ZVdlYlByb2Nl
c3NDb25uZWN0aW9uTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICghZGVjb2Rlci5kZXN0aW5hdGlvbklEKCkpIHsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBQbHVn
aW5Db250cm9sbGVyUHJveHkqIHBsdWdpbkNvbnRyb2xsZXJQcm94eSA9IG1fcGx1Z2luQ29udHJv
bGxlcnMuZ2V0KGRlY29kZXIuZGVzdGluYXRpb25JRCgpKTsKLSAgICBpZiAoIXBsdWdpbkNvbnRy
b2xsZXJQcm94eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGx1Z2luQ29udHJvbGxlcjo6UGx1
Z2luRGVzdHJ1Y3Rpb25Qcm90ZWN0b3IgcHJvdGVjdG9yKHBsdWdpbkNvbnRyb2xsZXJQcm94eS0+
YXNQbHVnaW5Db250cm9sbGVyKCkpOwotICAgIHBsdWdpbkNvbnRyb2xsZXJQcm94eS0+ZGlkUmVj
ZWl2ZVBsdWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci19
Ci0KLWJvb2wgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlciwgVW5pcXVlUmVm
PElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKLXsKLSAgICBTZXRGb3JTY29wZTxJUEM6OkNv
bm5lY3Rpb24qPiBjdXJyZW50Q29ubmVjdGlvbkNoYW5nZShjdXJyZW50Q29ubmVjdGlvbiwgJmNv
bm5lY3Rpb24pOwotCi0gICAgdWludDY0X3QgZGVzdGluYXRpb25JRCA9IGRlY29kZXIuZGVzdGlu
YXRpb25JRCgpOwotCi0gICAgaWYgKCFkZXN0aW5hdGlvbklEKQotICAgICAgICByZXR1cm4gZGlk
UmVjZWl2ZVN5bmNXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rl
ciwgcmVwbHlFbmNvZGVyKTsKLQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUo
KSA9PSBNZXNzYWdlczo6TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSkKLSAgICAgICAgcmV0dXJuIG1fbnBSZW1vdGVPYmplY3RNYXAtPmRpZFJlY2VpdmVTeW5j
TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwotCi0gICAgUGx1Z2lu
Q29udHJvbGxlclByb3h5KiBwbHVnaW5Db250cm9sbGVyUHJveHkgPSBtX3BsdWdpbkNvbnRyb2xs
ZXJzLmdldChkZWNvZGVyLmRlc3RpbmF0aW9uSUQoKSk7Ci0gICAgaWYgKCFwbHVnaW5Db250cm9s
bGVyUHJveHkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFBsdWdpbkNvbnRyb2xsZXI6
OlBsdWdpbkRlc3RydWN0aW9uUHJvdGVjdG9yIHByb3RlY3RvcihwbHVnaW5Db250cm9sbGVyUHJv
eHktPmFzUGx1Z2luQ29udHJvbGxlcigpKTsKLSAgICByZXR1cm4gcGx1Z2luQ29udHJvbGxlclBy
b3h5LT5kaWRSZWNlaXZlU3luY1BsdWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2UoY29ubmVjdGlv
biwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzQ29ubmVjdGlv
bjo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKLXsKLSAgICAvLyBUaGUgd2ViIHByb2Nlc3Mg
Y3Jhc2hlZC4gRGVzdHJveSBhbGwgdGhlIHBsdWctaW4gY29udHJvbGxlcnMuIERlc3Ryb3lpbmcg
dGhlIGxhc3QgcGx1Zy1pbiBjb250cm9sbGVyCi0gICAgLy8gd2lsbCBjYXVzZSB0aGUgd2ViIHBy
b2Nlc3MgY29ubmVjdGlvbiBpdHNlbGYgdG8gYmUgZGVzdHJveWVkLgotICAgIFZlY3RvcjxQbHVn
aW5Db250cm9sbGVyUHJveHkqPiBwbHVnaW5Db250cm9sbGVyczsKLSAgICBmb3IgKGF1dG8gaXQg
PSBtX3BsdWdpbkNvbnRyb2xsZXJzLnZhbHVlcygpLmJlZ2luKCksIGVuZCA9IG1fcGx1Z2luQ29u
dHJvbGxlcnMudmFsdWVzKCkuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcGx1Z2lu
Q29udHJvbGxlcnMuYXBwZW5kKGl0LT5nZXQoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHBsdWdpbkNvbnRyb2xsZXJzLnNpemUoKTsgKytpKQotICAgICAgICBkZXN0cm95UGx1Z2lu
Q29udHJvbGxlclByb3h5KHBsdWdpbkNvbnRyb2xsZXJzW2ldKTsKLX0KLQotdm9pZCBXZWJQcm9j
ZXNzQ29ubmVjdGlvbjo6ZGVzdHJveVBsdWdpbih1aW50NjRfdCBwbHVnaW5JbnN0YW5jZUlELCBi
b29sIGFzeW5jaHJvbm91c0NyZWF0aW9uSW5jb21wbGV0ZSwgTWVzc2FnZXM6OldlYlByb2Nlc3ND
b25uZWN0aW9uOjpEZXN0cm95UGx1Z2luOjpEZWxheWVkUmVwbHkmJiByZXBseSkKLXsKLSAgICAv
LyBXZSByZXR1cm4gaW1tZWRpYXRlbHkgZnJvbSB0aGlzIHN5bmNocm9ub3VzIElQQy4gV2Ugd2Fu
dCB0byBtYWtlIHN1cmUgdGhlIHBsdWdpbiBkZXN0cnVjdGlvbiBpcyBqdXN0IGFib3V0IHRvIHN0
YXJ0IHNvIGF1ZGlvIHBsYXliYWNrCi0gICAgLy8gd2lsbCBmaW5pc2ggc29vbiBhZnRlciByZXR1
cm5pbmcuIEhvd2V2ZXIgd2UgZG9uJ3Qgd2FudCB0byB3YWl0IGZvciBkZXN0cnVjdGlvbiB0byBj
b21wbGV0ZSBmdWxseSBhcyB0aGF0IG1heSB0YWtlIGEgd2hpbGUuCi0gICAgcmVwbHkoKTsKLQot
ICAgIC8vIEVuc3VyZSB3ZSBkb24ndCBjbGFtcCBhbnkgdGltZXJzIGR1cmluZyBkZXN0cnVjdGlv
bgotICAgIEFjdGl2aXR5QXNzZXJ0aW9uIGFjdGl2aXR5QXNzZXJ0aW9uKFBsdWdpblByb2Nlc3M6
OnNpbmdsZXRvbigpLmNvbm5lY3Rpb25BY3Rpdml0eSgpKTsKLQotICAgIFBsdWdpbkNvbnRyb2xs
ZXJQcm94eSogcGx1Z2luQ29udHJvbGxlclByb3h5ID0gbV9wbHVnaW5Db250cm9sbGVycy5nZXQo
cGx1Z2luSW5zdGFuY2VJRCk7Ci0gICAgCi0gICAgLy8gSWYgdGhlcmUgaXMgbm8gUGx1Z2luQ29u
dHJvbGxlclByb3h5IHRoZW4gdGhpcyBwbHVnLWluIGRvZXNuJ3QgZXhpc3QgeWV0IGFuZCB3ZSBw
cm9iYWJseSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKCFwbHVnaW5Db250cm9sbGVyUHJv
eHkpIHsKLSAgICAgICAgLy8gSWYgdGhlIHBsdWdpbiB3ZSdyZSBzdXBwb3NlZCB0byBkZXN0cm95
IHdhcyByZXF1ZXN0ZWQgYXN5bmNocm9ub3VzbHkgYW5kIGRvZXNuJ3QgZXhpc3QgeWV0LAotICAg
ICAgICAvLyB3ZSBuZWVkIHRvIGZsYWcgdGhlIGluc3RhbmNlIElEIHNvIGl0IGlzIG5vdCBjcmVh
dGVkIGxhdGVyLgotICAgICAgICBpZiAoYXN5bmNocm9ub3VzQ3JlYXRpb25JbmNvbXBsZXRlKQot
ICAgICAgICAgICAgbV9hc3luY2hyb25vdXNJbnN0YW5jZUlEc1RvSWdub3JlLmFkZChwbHVnaW5J
bnN0YW5jZUlEKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAg
ZGVzdHJveVBsdWdpbkNvbnRyb2xsZXJQcm94eShwbHVnaW5Db250cm9sbGVyUHJveHkpOwotfQot
Ci12b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpNZXNzYWdlTmFtZSkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVt
ZW50LgotfQotCi12b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjpjcmVhdGVQbHVnaW5JbnRlcm5h
bChjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmIGNyZWF0aW9uUGFyYW1ldGVycywgYm9v
bCYgcmVzdWx0LCBib29sJiB3YW50c1doZWVsRXZlbnRzLCB1aW50MzJfdCYgcmVtb3RlTGF5ZXJD
bGllbnRJRCkKLXsKLSAgICBhdXRvIHBsdWdpbkNvbnRyb2xsZXJQcm94eSA9IG1ha2VVbmlxdWU8
UGx1Z2luQ29udHJvbGxlclByb3h5Pih0aGlzLCBjcmVhdGlvblBhcmFtZXRlcnMpOwotCi0gICAg
UGx1Z2luQ29udHJvbGxlclByb3h5KiBwbHVnaW5Db250cm9sbGVyUHJveHlQdHIgPSBwbHVnaW5D
b250cm9sbGVyUHJveHkuZ2V0KCk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdG8gYWRkIHRoZSBwcm94
eSB0byB0aGUgbWFwIGJlZm9yZSBpbml0aWFsaXppbmcgaXQsIHNpbmNlIHRoZSBwbHVnLWluIG1p
Z2h0IGNhbGwgb3V0IHRvIHRoZSB3ZWIgcHJvY2VzcyBmcm9tIAotICAgIC8vIGl0cyBOUFBfTmV3
IGZ1bmN0aW9uLiBUaGlzIHdpbGwgaGFuZCBvdmVyIG93bmVyc2hpcCBvZiB0aGUgcHJveHkgdG8g
dGhlIHdlYiBwcm9jZXNzIGNvbm5lY3Rpb24uCi0gICAgYWRkUGx1Z2luQ29udHJvbGxlclByb3h5
KFdURk1vdmUocGx1Z2luQ29udHJvbGxlclByb3h5KSk7Ci0KLSAgICAvLyBOb3cgdHJ5IHRvIGlu
aXRpYWxpemUgdGhlIHBsdWctaW4uCi0gICAgcmVzdWx0ID0gcGx1Z2luQ29udHJvbGxlclByb3h5
UHRyLT5pbml0aWFsaXplKGNyZWF0aW9uUGFyYW1ldGVycyk7Ci0KLSAgICBpZiAoIXJlc3VsdCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgd2FudHNXaGVlbEV2ZW50cyA9IHBsdWdpbkNvbnRyb2xs
ZXJQcm94eVB0ci0+d2FudHNXaGVlbEV2ZW50cygpOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAg
IHJlbW90ZUxheWVyQ2xpZW50SUQgPSBwbHVnaW5Db250cm9sbGVyUHJveHlQdHItPnJlbW90ZUxh
eWVyQ2xpZW50SUQoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHJlbW90ZUxheWVyQ2xpZW50
SUQpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0ZVBsdWdp
bihjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmIGNyZWF0aW9uUGFyYW1ldGVycywgTWVz
c2FnZXM6OldlYlByb2Nlc3NDb25uZWN0aW9uOjpDcmVhdGVQbHVnaW46OkRlbGF5ZWRSZXBseSYm
IHJlcGx5KQotewotICAgIC8vIEVuc3VyZSB3ZSBkb24ndCBjbGFtcCBhbnkgdGltZXJzIGR1cmlu
ZyBpbml0aWFsaXphdGlvbgotICAgIEFjdGl2aXR5QXNzZXJ0aW9uIGFjdGl2aXR5QXNzZXJ0aW9u
KFBsdWdpblByb2Nlc3M6OnNpbmdsZXRvbigpLmNvbm5lY3Rpb25BY3Rpdml0eSgpKTsKLQotICAg
IFBsdWdpbkNvbnRyb2xsZXJQcm94eSogcGx1Z2luQ29udHJvbGxlclByb3h5ID0gbV9wbHVnaW5D
b250cm9sbGVycy5nZXQoY3JlYXRpb25QYXJhbWV0ZXJzLnBsdWdpbkluc3RhbmNlSUQpOwotCi0g
ICAgLy8gVGhlIGNvbnRyb2xsZXIgcHJveHkgZm9yIHRoZSBwbHVnLWluIHdlJ3JlIGJlaW5nIGFz
a2VkIHRvIGNyZWF0ZSBzeW5jaHJvbm91c2x5IG1pZ2h0IGFscmVhZHkgZXhpc3QgaWYgaXQgd2Fz
IHJlcXVlc3RlZCBhc3luY2hyb25vdXNseSBiZWZvcmUuCi0gICAgaWYgKHBsdWdpbkNvbnRyb2xs
ZXJQcm94eSkgewotICAgICAgICAvLyBJdCBtaWdodCBzdGlsbCBiZSBpbiB0aGUgbWlkZGxlIG9m
IGluaXRpYWxpemF0aW9uIGluIHdoaWNoIGNhc2Ugd2UgaGF2ZSB0byBsZXQgdGhhdCBpbml0aWFs
aXphdGlvbiBjb21wbGV0ZSBhbmQgcmVzcG9uZCB0byB0aGlzIG1lc3NhZ2UgbGF0ZXIuCi0gICAg
ICAgIGlmIChwbHVnaW5Db250cm9sbGVyUHJveHktPmlzSW5pdGlhbGl6aW5nKCkpIHsKLSAgICAg
ICAgICAgIHBsdWdpbkNvbnRyb2xsZXJQcm94eS0+c2V0SW5pdGlhbGl6YXRpb25SZXBseShXVEZN
b3ZlKHJlcGx5KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIC8vIElmIGl0cyBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZSB0aGVuIHdlIG5lZWQg
dG8gcmVzcG9uZCB0byB0aGlzIG1lc3NhZ2Ugd2l0aCB0aGUgY29ycmVjdCBpbmZvcm1hdGlvbiBh
Ym91dCBpdHMgY3JlYXRpb24uCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgIHJlcGx5KHRy
dWUsIHBsdWdpbkNvbnRyb2xsZXJQcm94eS0+d2FudHNXaGVlbEV2ZW50cygpLCBwbHVnaW5Db250
cm9sbGVyUHJveHktPnJlbW90ZUxheWVyQ2xpZW50SUQoKSk7Ci0jZWxzZQotICAgICAgICByZXBs
eSh0cnVlLCBwbHVnaW5Db250cm9sbGVyUHJveHktPndhbnRzV2hlZWxFdmVudHMoKSwgMCk7Ci0j
ZW5kaWYKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAvLyBUaGUgcGx1Z2luIHdl
J3JlIHN1cHBvc2VkIHRvIGNyZWF0ZSBtaWdodCBoYXZlIGJlZW4gcmVxdWVzdGVkIGFzeW5jaHJv
bm91c2x5IGJlZm9yZS4KLSAgICAvLyBJbiB0aGF0IGNhc2Ugd2UgbmVlZCB0byBjcmVhdGUgaXQg
c3luY2hyb25vdXNseSBub3cgYnV0IGZsYWcgdGhlIGluc3RhbmNlIElEIHNvIHdlIGRvbid0IHJl
Y3JlYXRlIGl0IGFzeW5jaHJvbm91c2x5IGxhdGVyLgotICAgIGlmIChjcmVhdGlvblBhcmFtZXRl
cnMuYXN5bmNocm9ub3VzQ3JlYXRpb25JbmNvbXBsZXRlKQotICAgICAgICBtX2FzeW5jaHJvbm91
c0luc3RhbmNlSURzVG9JZ25vcmUuYWRkKGNyZWF0aW9uUGFyYW1ldGVycy5wbHVnaW5JbnN0YW5j
ZUlEKTsKLSAgICAKLSAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIGJvb2wgd2FudHNXaGVl
bEV2ZW50cyA9IGZhbHNlOwotICAgIHVpbnQzMl90IHJlbW90ZUxheWVyQ2xpZW50SUQgPSAwOwot
ICAgIGNyZWF0ZVBsdWdpbkludGVybmFsKGNyZWF0aW9uUGFyYW1ldGVycywgcmVzdWx0LCB3YW50
c1doZWVsRXZlbnRzLCByZW1vdGVMYXllckNsaWVudElEKTsKLSAgICAKLSAgICByZXBseShyZXN1
bHQsIHdhbnRzV2hlZWxFdmVudHMsIHJlbW90ZUxheWVyQ2xpZW50SUQpOwotfQotCi12b2lkIFdl
YlByb2Nlc3NDb25uZWN0aW9uOjpjcmVhdGVQbHVnaW5Bc3luY2hyb25vdXNseShjb25zdCBQbHVn
aW5DcmVhdGlvblBhcmFtZXRlcnMmIGNyZWF0aW9uUGFyYW1ldGVycykKLXsKLSAgICAvLyBJbiB0
aGUgdGltZSBzaW5jZSB0aGlzIHBsdWdpbiB3YXMgcmVxdWVzdGVkIGFzeW5jaHJvbm91c2x5IHdl
IG1pZ2h0IGhhdmUgY3JlYXRlZCBpdCBzeW5jaHJvbm91c2x5IG9yIGRlc3Ryb3llZCBpdC4KLSAg
ICAvLyBJbiBlaXRoZXIgb2YgdGhvc2UgY2FzZXMgd2UgbmVlZCB0byBpZ25vcmUgdGhpcyBjcmVh
dGlvbiByZXF1ZXN0LgotICAgIGlmIChtX2FzeW5jaHJvbm91c0luc3RhbmNlSURzVG9JZ25vcmUu
Y29udGFpbnMoY3JlYXRpb25QYXJhbWV0ZXJzLnBsdWdpbkluc3RhbmNlSUQpKSB7Ci0gICAgICAg
IG1fYXN5bmNocm9ub3VzSW5zdGFuY2VJRHNUb0lnbm9yZS5yZW1vdmUoY3JlYXRpb25QYXJhbWV0
ZXJzLnBsdWdpbkluc3RhbmNlSUQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAg
IC8vIFRoaXMgdmVyc2lvbiBvZiBDcmVhdGVQbHVnaW4gaXMgb25seSB1c2VkIGJ5IHBsdWctaW5z
IHRoYXQgYXJlIGtub3duIHRvIGJlaGF2ZSB3aGVuIHN0YXJ0ZWQgYXN5bmNocm9ub3VzbHkuCi0g
ICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBib29sIHdhbnRzV2hlZWxFdmVudHMgPSBmYWxz
ZTsKLSAgICB1aW50MzJfdCByZW1vdGVMYXllckNsaWVudElEID0gMDsKLSAgICAKLSAgICBpZiAo
Y3JlYXRpb25QYXJhbWV0ZXJzLmFydGlmaWNpYWxQbHVnaW5Jbml0aWFsaXphdGlvbkRlbGF5RW5h
YmxlZCkgewotICAgICAgICBTZWNvbmRzIGFydGlmaWNpYWxQbHVnaW5Jbml0aWFsaXphdGlvbkRl
bGF5IHsgNV9zIH07Ci0gICAgICAgIHNsZWVwKGFydGlmaWNpYWxQbHVnaW5Jbml0aWFsaXphdGlv
bkRlbGF5KTsKLSAgICB9Ci0KLSAgICAvLyBTaW5jZSBwbHVnLWluIGNyZWF0aW9uIGNhbiBvZnRl
biBtZXNzYWdlIHRvIHRoZSBXZWJQcm9jZXNzIHN5bmNocm9ub3VzbHkgKHdpdGggTlBQX0V2YWx1
YXRlIGZvciBleGFtcGxlKQotICAgIC8vIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHdl
YiBwcm9jZXNzIHdpbGwgaGFuZGxlIHRoZSBwbHVnLWluIHByb2Nlc3MncyBzeW5jaHJvbm91cyBt
ZXNzYWdlcywKLSAgICAvLyBldmVuIGlmIHRoZSB3ZWIgcHJvY2VzcyBpcyB3YWl0aW5nIG9uIGEg
c3luY2hyb25vdXMgcmVwbHkgaXRzZWxmLgotICAgIC8vIE5vcm1hbGx5IHRoZSBwbHVnLWluIHBy
b2Nlc3MgZG9lc24ndCBnaXZlIGl0cyBzeW5jaHJvbm91cyBtZXNzYWdlcyB0aGUgc3BlY2lhbCBm
bGFnIHRvIGFsbG93IGZvciB0aGF0LgotICAgIC8vIFdlIGNhbiBmb3JjZSBpdCB0byBkbyBzbyBi
eSBpbmNyZW1lbnRpbmcgdGhlICJEaXNwYXRjaE1lc3NhZ2VNYXJrZWREaXNwYXRjaFdoZW5XYWl0
aW5nRm9yU3luY1JlcGx5IiBjb3VudC4KLSAgICBtX2Nvbm5lY3Rpb24tPmluY3JlbWVudERpc3Bh
dGNoTWVzc2FnZU1hcmtlZERpc3BhdGNoV2hlbldhaXRpbmdGb3JTeW5jUmVwbHlDb3VudCgpOwot
Ci0gICAgLy8gVGhlIGNhbGwgdG8gY3JlYXRlUGx1Z2luSW50ZXJuYWwgY2FuIHBvdGVudGlhbGx5
IGNhdXNlIHRoZSBwbHVnLWluIHRvIGJlIGRlc3Ryb3llZCBhbmQKLSAgICAvLyB0aHVzIGZyZWUg
dGhlIFdlYlByb2Nlc3NDb25uZWN0aW9uIG9iamVjdC4gUHJvdGVjdCBpdC4KLSAgICBSZWY8V2Vi
UHJvY2Vzc0Nvbm5lY3Rpb24+IHByb3RlY3QoKnRoaXMpOwotICAgIGNyZWF0ZVBsdWdpbkludGVy
bmFsKGNyZWF0aW9uUGFyYW1ldGVycywgcmVzdWx0LCB3YW50c1doZWVsRXZlbnRzLCByZW1vdGVM
YXllckNsaWVudElEKTsKLQotICAgIGlmICghbV9jb25uZWN0aW9uKSB7Ci0gICAgICAgIC8vIGNy
ZWF0ZVBsdWdpbkludGVybmFsIGNhdXNlZCB0aGUgY29ubmVjdGlvbiB0byBnbyBhd2F5LgotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb25uZWN0aW9uLT5kZWNyZW1lbnREaXNwYXRj
aE1lc3NhZ2VNYXJrZWREaXNwYXRjaFdoZW5XYWl0aW5nRm9yU3luY1JlcGx5Q291bnQoKTsKLQot
ICAgIC8vIElmIHNvbWVvbmUgYXNrZWQgZm9yIHRoaXMgcGx1Zy1pbiBzeW5jaHJvbm91c2x5IHdo
aWxlIGl0IHdhcyBpbiB0aGUgbWlkZGxlIG9mIGJlaW5nIGNyZWF0ZWQgdGhlbiB3ZSBuZWVkIHBl
cmZvcm0gdGhlCi0gICAgLy8gc3luY2hyb25vdXMgcmVwbHkgaW5zdGVhZCBvZiBzZW5kaW5nIHRo
ZSBhc3luY2hyb25vdXMgcmVwbHkuCi0gICAgUGx1Z2luQ29udHJvbGxlclByb3h5KiBwbHVnaW5D
b250cm9sbGVyUHJveHkgPSBtX3BsdWdpbkNvbnRyb2xsZXJzLmdldChjcmVhdGlvblBhcmFtZXRl
cnMucGx1Z2luSW5zdGFuY2VJRCk7Ci0gICAgQVNTRVJUKHBsdWdpbkNvbnRyb2xsZXJQcm94eSk7
Ci0gICAgaWYgKGF1dG8gZGVsYXllZFN5bmNSZXBseSA9IHBsdWdpbkNvbnRyb2xsZXJQcm94eS0+
dGFrZUluaXRpYWxpemF0aW9uUmVwbHkoKSkgewotICAgICAgICBkZWxheWVkU3luY1JlcGx5KHJl
c3VsdCwgd2FudHNXaGVlbEV2ZW50cywgcmVtb3RlTGF5ZXJDbGllbnRJRCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBPdGhlcndpc2UsIHNlbmQgdGhlIGFzeW5jaHJvbm91cyBy
ZXN1bHRzIG5vdy4KLSAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICBtX2Nvbm5lY3Rpb24tPnNl
bmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Qcm94eTo6RGlkRmFpbFRvQ3JlYXRlUGx1Z2luKCksIE1l
c3NhZ2VzOjpQbHVnaW5Qcm94eTo6RGlkRmFpbFRvQ3JlYXRlUGx1Z2luOjpSZXBseSgpLCBjcmVh
dGlvblBhcmFtZXRlcnMucGx1Z2luSW5zdGFuY2VJRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBtX2Nvbm5lY3Rpb24tPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Qcm94eTo6RGlk
Q3JlYXRlUGx1Z2luKHdhbnRzV2hlZWxFdmVudHMsIHJlbW90ZUxheWVyQ2xpZW50SUQpLCBNZXNz
YWdlczo6UGx1Z2luUHJveHk6OkRpZENyZWF0ZVBsdWdpbjo6UmVwbHkoKSwgY3JlYXRpb25QYXJh
bWV0ZXJzLnBsdWdpbkluc3RhbmNlSUQpOwotfQotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5oIGIvU291cmNl
L1dlYktpdC9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGQxNzY2ZmQ0YTEyNTNhZGExZDVkMjI3ZjJhNzk3NWJiYTBiZjU0
ZWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNs
dWRlICJQbHVnaW4uaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzUmVw
bGllcy5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIE5QUmVtb3RlT2JqZWN0TWFwOwot
Y2xhc3MgUGx1Z2luQ29udHJvbGxlclByb3h5Owotc3RydWN0IFBsdWdpbkNyZWF0aW9uUGFyYW1l
dGVyczsKLSAgICAKLS8vIEEgY29ubmVjdGlvbiBmcm9tIGEgcGx1Zy1pbiBwcm9jZXNzIHRvIGEg
d2ViIHByb2Nlc3MuCi0KLWNsYXNzIFdlYlByb2Nlc3NDb25uZWN0aW9uIDogcHVibGljIFJlZkNv
dW50ZWQ8V2ViUHJvY2Vzc0Nvbm5lY3Rpb24+LCBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQcm9jZXNzQ29ubmVjdGlvbj4gY3JlYXRlKElQQzo6
Q29ubmVjdGlvbjo6SWRlbnRpZmllcik7Ci0gICAgdmlydHVhbCB+V2ViUHJvY2Vzc0Nvbm5lY3Rp
b24oKTsKLQotICAgIElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fY29ubmVjdGlvbi5nZXQoKTsgfQotICAgIE5QUmVtb3RlT2JqZWN0TWFwKiBucFJlbW90ZU9i
amVjdE1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fbnBSZW1vdGVPYmplY3RNYXAuZ2V0KCk7IH0KLQot
ICAgIHZvaWQgcmVtb3ZlUGx1Z2luQ29udHJvbGxlclByb3h5KFBsdWdpbkNvbnRyb2xsZXJQcm94
eSosIFBsdWdpbiopOwotCi0gICAgc3RhdGljIHZvaWQgc2V0R2xvYmFsRXhjZXB0aW9uKGNvbnN0
IFN0cmluZyYpOwotICAgIAotcHJpdmF0ZToKLSAgICBXZWJQcm9jZXNzQ29ubmVjdGlvbihJUEM6
OkNvbm5lY3Rpb246OklkZW50aWZpZXIpOwotCi0gICAgdm9pZCBhZGRQbHVnaW5Db250cm9sbGVy
UHJveHkoc3RkOjp1bmlxdWVfcHRyPFBsdWdpbkNvbnRyb2xsZXJQcm94eT4pOwotCi0gICAgdm9p
ZCBkZXN0cm95UGx1Z2luQ29udHJvbGxlclByb3h5KFBsdWdpbkNvbnRyb2xsZXJQcm94eSopOwot
Ci0gICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwotICAgIGJvb2wg
ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIFVu
aXF1ZVJlZjxJUEM6OkVuY29kZXI+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRDbG9zZShJUEM6
OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VOYW1lKSBvdmVycmlkZTsKLQotICAgIC8v
IE1lc3NhZ2UgaGFuZGxlcnMuCi0gICAgdm9pZCBkaWRSZWNlaXZlV2ViUHJvY2Vzc0Nvbm5lY3Rp
b25NZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwotICAgIGJvb2wgZGlk
UmVjZWl2ZVN5bmNXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwg
SVBDOjpEZWNvZGVyJiwgVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mKTsKLSAgICB2b2lkIGNyZWF0
ZVBsdWdpbihjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmLCBNZXNzYWdlczo6V2ViUHJv
Y2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdpbkRlbGF5ZWRSZXBseSYmKTsKLSAgICB2b2lkIGNy
ZWF0ZVBsdWdpbkFzeW5jaHJvbm91c2x5KGNvbnN0IFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyYp
OwotICAgIHZvaWQgZGVzdHJveVBsdWdpbih1aW50NjRfdCBwbHVnaW5JbnN0YW5jZUlELCBib29s
IGFzeW5jaHJvbm91c0NyZWF0aW9uSW5jb21wbGV0ZSwgTWVzc2FnZXM6OldlYlByb2Nlc3NDb25u
ZWN0aW9uOjpEZXN0cm95UGx1Z2luRGVsYXllZFJlcGx5JiYpOwotICAgIAotICAgIHZvaWQgY3Jl
YXRlUGx1Z2luSW50ZXJuYWwoY29uc3QgUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzJiwgYm9vbCYg
cmVzdWx0LCBib29sJiB3YW50c1doZWVsRXZlbnRzLCB1aW50MzJfdCYgcmVtb3RlTGF5ZXJDbGll
bnRJRCk7Ci0KLSAgICBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247Ci0KLSAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luQ29udHJvbGxlclByb3h5
Pj4gbV9wbHVnaW5Db250cm9sbGVyczsKLSAgICBSZWZQdHI8TlBSZW1vdGVPYmplY3RNYXA+IG1f
bnBSZW1vdGVPYmplY3RNYXA7Ci0gICAgSGFzaFNldDx1aW50NjRfdD4gbV9hc3luY2hyb25vdXNJ
bnN0YW5jZUlEc1RvSWdub3JlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRp
ZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiBiL1NvdXJj
ZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlhZTFjNzVmMTFkOGM1NmY3ZmYyN2E0N2My
OTQ5NjZjMTg0NjE1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24ubWVz
c2FnZXMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0jIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
LQotbWVzc2FnZXMgLT4gV2ViUHJvY2Vzc0Nvbm5lY3Rpb24gTGVnYWN5UmVjZWl2ZXIgewotICAg
ICMgQ3JlYXRlcyBhIHBsdWctaW4gaW5zdGFuY2UgdXNpbmcgdGhlIGdpdmVuIGNyZWF0aW9uIHBh
cmFtZXRlcnMuCi0gICAgQ3JlYXRlUGx1Z2luKHN0cnVjdCBXZWJLaXQ6OlBsdWdpbkNyZWF0aW9u
UGFyYW1ldGVycyBwbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMpIC0+IChib29sIGNyZWF0aW9uUmVz
dWx0LCBib29sIHdhbnRzV2hlZWxFdmVudHMsIHVpbnQzMl90IHJlbW90ZUxheWVyQ2xpZW50SUQp
IFN5bmNocm9ub3VzCi0KLSAgICAjIENyZWF0ZXMgYSBwbHVnLWluIGluc3RhbmNlIGFzeW5jaHJv
bm91c2x5IHVzaW5nIHRoZSBnaXZlbiBjcmVhdGlvbiBwYXJhbWV0ZXJzLgotICAgIENyZWF0ZVBs
dWdpbkFzeW5jaHJvbm91c2x5KHN0cnVjdCBXZWJLaXQ6OlBsdWdpbkNyZWF0aW9uUGFyYW1ldGVy
cyBwbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMpCi0KLSAgICAjIERlc3Ryb3lzIHRoZSBwbHVnLWlu
IGluc3RhbmNlIHdpdGggdGhlIGdpdmVuIGluc3RhbmNlIElELgotICAgIERlc3Ryb3lQbHVnaW4o
dWludDY0X3QgcGx1Z2luSW5zdGFuY2VJRCwgYm9vbCBhc3luY2hyb25vdXNDcmVhdGlvbkluY29t
cGxldGUpIC0+ICgpIFN5bmNocm9ub3VzCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Db250cm9sbGVyUHJveHlNYWMubW0gYi9T
b3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpbkNvbnRyb2xsZXJQcm94eU1hYy5t
bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE2Y2QyNzY2OWQzNTM5MzliZjI0YTc5
NjFjNTM5M2IyMjJhNzcwMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpbkNvbnRyb2xsZXJQ
cm94eU1hYy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJQbHVnaW5Db250cm9sbGVyUHJveHkuaCIKLQot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW1wb3J0ICJMYXllckhvc3RpbmdD
b250ZXh0LmgiCi0jaW1wb3J0ICJMYXllclRyZWVDb250ZXh0LmgiCi0jaW1wb3J0ICJQbHVnaW5D
cmVhdGlvblBhcmFtZXRlcnMuaCIKLSNpbXBvcnQgIlBsdWdpblByb2Nlc3MuaCIKLSNpbXBvcnQg
IlBsdWdpblByb2Nlc3NQcm94eU1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJQbHVnaW5Qcm94eU1lc3Nh
Z2VzLmgiCi0jaW1wb3J0ICJXZWJQcm9jZXNzQ29ubmVjdGlvbi5oIgotI2ltcG9ydCA8UXVhcnR6
Q29yZS9RdWFydHpDb3JlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6cGx1
Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZChib29sIHBsdWdpbkhhc0ZvY3VzQW5kV2luZG93
SGFzRm9jdXMpCi17Ci0gICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OlBsdWdpblByb3h5OjpQbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkKHBsdWdpbkhh
c0ZvY3VzQW5kV2luZG93SGFzRm9jdXMpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwotfQotCi12b2lk
IFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6c2V0Q29tcGxleFRleHRJbnB1dFN0YXRlKFBsdWdpbkNv
bXBsZXhUZXh0SW5wdXRTdGF0ZSBwbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUpCi17Ci0gICAg
bV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpblByb3h5OjpT
ZXRDb21wbGV4VGV4dElucHV0U3RhdGUocGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKSwgbV9w
bHVnaW5JbnN0YW5jZUlELCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVu
V2FpdGluZ0ZvclN5bmNSZXBseSk7Ci19Ci0KLWNvbnN0IE1hY2hTZW5kUmlnaHQmIFBsdWdpbkNv
bnRyb2xsZXJQcm94eTo6Y29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0KCkKLXsKLSAgICByZXR1
cm4gUGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkuY29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0
KCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpwbGF0Zm9ybUluaXRpYWxpemUo
Y29uc3QgUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzJiBjcmVhdGlvblBhcmFtZXRlcnMpCi17Ci0g
ICAgQVNTRVJUKCFtX2xheWVySG9zdGluZ0NvbnRleHQpOwotICAgIHVwZGF0ZUxheWVySG9zdGlu
Z0NvbnRleHQoY3JlYXRpb25QYXJhbWV0ZXJzLnBhcmFtZXRlcnMubGF5ZXJIb3N0aW5nTW9kZSk7
Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpwbGF0Zm9ybURlc3Ryb3koKQotewot
ICAgIGlmICghbV9sYXllckhvc3RpbmdDb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2xheWVySG9zdGluZ0NvbnRleHQtPmludmFsaWRhdGUoKTsKLSAgICBtX2xheWVySG9zdGluZ0Nv
bnRleHQgPSBudWxscHRyOwotfQotCi11aW50MzJfdCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnJl
bW90ZUxheWVyQ2xpZW50SUQoKSBjb25zdAotewotICAgIGlmICghbV9sYXllckhvc3RpbmdDb250
ZXh0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2xheWVySG9zdGluZ0NvbnRl
eHQtPmNvbnRleHRJRCgpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6cGxhdGZv
cm1HZW9tZXRyeURpZENoYW5nZSgpCi17Ci0gICAgQ0FMYXllciAqcGx1Z2luTGF5ZXIgPSBtX3Bs
dWdpbi0+cGx1Z2luTGF5ZXIoKTsKLQotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gYW5pbWF0ZSB0
byB0aGUgbmV3IHNpemUgc28gd2UgZGlzYWJsZSBhY3Rpb25zIGZvciB0aGlzIHRyYW5zYWN0aW9u
LgotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXRWYWx1
ZTpAWUVTIGZvcktleTprQ0FUcmFuc2FjdGlvbkRpc2FibGVBY3Rpb25zXTsKLSAgICBbcGx1Z2lu
TGF5ZXIgc2V0RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCBtX3BsdWdpblNpemUud2lkdGgoKSwgbV9w
bHVnaW5TaXplLmhlaWdodCgpKV07Ci0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLX0KLQot
dm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OndpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcykKLXsKLSAg
ICBtX3BsdWdpbi0+d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQod2luZG93RnJhbWVJblNjcmVl
bkNvb3JkaW5hdGVzLCB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKTsKLX0KLQotdm9pZCBQ
bHVnaW5Db250cm9sbGVyUHJveHk6OnNlbmRDb21wbGV4VGV4dElucHV0KGNvbnN0IFN0cmluZyYg
dGV4dElucHV0KQotewotICAgIG1fcGx1Z2luLT5zZW5kQ29tcGxleFRleHRJbnB1dCh0ZXh0SW5w
dXQpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6c2V0TGF5ZXJIb3N0aW5nTW9k
ZSh1aW50MzJfdCBvcGFxdWVMYXllckhvc3RpbmdNb2RlKQotewotICAgIExheWVySG9zdGluZ01v
ZGUgbGF5ZXJIb3N0aW5nTW9kZSA9IHN0YXRpY19jYXN0PExheWVySG9zdGluZ01vZGU+KG9wYXF1
ZUxheWVySG9zdGluZ01vZGUpOwotCi0gICAgbV9wbHVnaW4tPnNldExheWVySG9zdGluZ01vZGUo
bGF5ZXJIb3N0aW5nTW9kZSk7Ci0gICAgdXBkYXRlTGF5ZXJIb3N0aW5nQ29udGV4dChsYXllckhv
c3RpbmdNb2RlKTsKLQotICAgIGlmIChtX2xheWVySG9zdGluZ0NvbnRleHQpCi0gICAgICAgIG1f
Y29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Qcm94eTo6U2V0
TGF5ZXJIb3N0aW5nQ29udGV4dElEKG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+Y29udGV4dElEKCkp
LCBtX3BsdWdpbkluc3RhbmNlSUQpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6
dXBkYXRlTGF5ZXJIb3N0aW5nQ29udGV4dChMYXllckhvc3RpbmdNb2RlIGxheWVySG9zdGluZ01v
ZGUpCi17Ci0gICAgQ0FMYXllciAqcGxhdGZvcm1MYXllciA9IG1fcGx1Z2luLT5wbHVnaW5MYXll
cigpOwotICAgIGlmICghcGxhdGZvcm1MYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1fbGF5ZXJIb3N0aW5nQ29udGV4dCkgewotICAgICAgICBpZiAobV9sYXllckhvc3RpbmdDb250
ZXh0LT5sYXllckhvc3RpbmdNb2RlKCkgPT0gbGF5ZXJIb3N0aW5nTW9kZSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBtX2xheWVySG9zdGluZ0NvbnRleHQtPmludmFsaWRhdGUoKTsK
LSAgICB9Ci0KLSAgICBzd2l0Y2ggKGxheWVySG9zdGluZ01vZGUpIHsKLSAgICAgICAgY2FzZSBM
YXllckhvc3RpbmdNb2RlOjpJblByb2Nlc3M6Ci0gICAgICAgICAgICBtX2xheWVySG9zdGluZ0Nv
bnRleHQgPSBMYXllckhvc3RpbmdDb250ZXh0OjpjcmVhdGVGb3JQb3J0KFBsdWdpblByb2Nlc3M6
OnNpbmdsZXRvbigpLmNvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydCgpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotI2lmIEhBVkUoT1VUX09GX1BST0NFU1NfTEFZRVJfSE9TVElORykKLSAgICAgICAg
Y2FzZSBMYXllckhvc3RpbmdNb2RlOjpPdXRPZlByb2Nlc3M6Ci0gICAgICAgICAgICBtX2xheWVy
SG9zdGluZ0NvbnRleHQgPSBMYXllckhvc3RpbmdDb250ZXh0OjpjcmVhdGVGb3JFeHRlcm5hbFBs
dWdpbkhvc3RpbmdQcm9jZXNzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIH0K
LQotICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+c2V0Q29sb3JTcGFjZShXZWJDb3JlOjpzUkdC
Q29sb3JTcGFjZVJlZigpKTsKLSAgICBtX2xheWVySG9zdGluZ0NvbnRleHQtPnNldENvbG9yTWF0
Y2hVbnRhZ2dlZENvbnRlbnQodHJ1ZSk7Ci0KLSAgICBtX2xheWVySG9zdGluZ0NvbnRleHQtPnNl
dFJvb3RMYXllcihwbGF0Zm9ybUxheWVyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc01hYy5tbSBiL1NvdXJjZS9X
ZWJLaXQvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc01hYy5tbQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggN2MzNjJjODFjNjkxMTA4Y2RhZjc3YjJlNzlhYTcwOTdiY2EyZDRk
OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpblByb2Nlc3NNYWMubW0KKysrIC9kZXYvbnVs
bApAQCAtMSw1MTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIlBsdWdpblByb2Nlc3MuaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQotCi0jaW1wb3J0ICJBcmd1bWVudENvZGVycy5oIgotI2ltcG9ydCAiTmV0c2NhcGVQbHVn
aW4uaCIKLSNpbXBvcnQgIlBsdWdpbkluZm9TdG9yZS5oIgotI2ltcG9ydCAiUGx1Z2luUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oIgotI2ltcG9ydCAiUGx1Z2luUHJvY2Vzc1Byb3h5TWVzc2Fn
ZXMuaCIKLSNpbXBvcnQgIlBsdWdpblByb2Nlc3NTaGltLmgiCi0jaW1wb3J0ICJQbHVnaW5TYW5k
Ym94UHJvZmlsZS5oIgotI2ltcG9ydCAiU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycy5o
IgotI2ltcG9ydCAiU2FuZGJveFV0aWxpdGllcy5oIgotI2ltcG9ydCA8Q29yZUF1ZGlvL0F1ZGlv
SGFyZHdhcmUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgotI2ltcG9y
dCA8V2ViQ29yZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmg+Ci0jaW1wb3J0IDxkbGZjbi5oPgot
I2ltcG9ydCA8bWFjaC1vL2R5bGQuaD4KLSNpbXBvcnQgPG1hY2gtby9nZXRzZWN0Lmg+Ci0jaW1w
b3J0IDxtYWNoL21hY2hfdm0uaD4KLSNpbXBvcnQgPG1hY2gvdm1fc3RhdGlzdGljcy5oPgotI2lt
cG9ydCA8b2JqYy9ydW50aW1lLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5o
PgotI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNpbXBvcnQgPHBhbC9z
cGkvY29jb2EvTGF1bmNoU2VydmljZXNTUEkuaD4KLSNpbXBvcnQgPHBhbC9zcGkvbWFjL0hJVG9v
bGJveFNQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNBcHBsaWNhdGlvblNQSS5oPgotI2lt
cG9ydCA8cGFsL3NwaS9tYWMvTlNXaW5kb3dTUEkuaD4KLSNpbXBvcnQgPHN5c2V4aXRzLmg+Ci0j
aW1wb3J0IDx3dGYvSGFzaFNldC5oPgotI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0j
aW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KLQotY29uc3QgQ0ZTdHJpbmdSZWYga0xT
UGx1Z0luQnVuZGxlSWRlbnRpZmllcktleSA9IENGU1RSKCJMU1BsdWdJbkJ1bmRsZUlkZW50aWZp
ZXJLZXkiKTsKLQotLy8gVGhlc2UgdmFsdWVzIHdlcmUgY2hvc2VuIHRvIG1hdGNoIGRlZmF1bHQg
TlNVUkxDYWNoZSBzaXplcyBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcuCi1jb25zdCBOU1VJ
bnRlZ2VyIHBsdWdpbk1lbW9yeUNhY2hlU2l6ZSA9IDUxMjAwMDsKLWNvbnN0IE5TVUludGVnZXIg
cGx1Z2luRGlza0NhY2hlU2l6ZSA9IDIwMDAwMDAwOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
Y2xhc3MgRnVsbHNjcmVlbldpbmRvd1RyYWNrZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEZ1bGxzY3JlZW5XaW5kb3dUcmFja2VyKTsKLQotcHVibGljOgotICAgIEZ1bGxzY3JlZW5XaW5k
b3dUcmFja2VyKCkgeyB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCB3aW5k
b3dTaG93bihUIHdpbmRvdyk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCB3aW5kb3dI
aWRkZW4oVCB3aW5kb3cpOwotCi1wcml2YXRlOgotICAgIEhhc2hTZXQ8Q0dXaW5kb3dJRD4gbV93
aW5kb3dzOwotfTsKLQotc3RhdGljIGJvb2wgcmVjdENvdmVyc0FueVNjcmVlbihOU1JlY3QgcmVj
dCkKLXsKLSAgICBmb3IgKE5TU2NyZWVuICpzY3JlZW4gaW4gW05TU2NyZWVuIHNjcmVlbnNdKSB7
Ci0gICAgICAgIGlmIChOU0NvbnRhaW5zUmVjdChyZWN0LCBbc2NyZWVuIGZyYW1lXSkpCi0gICAg
ICAgICAgICByZXR1cm4gWUVTOwotICAgIH0KLSAgICByZXR1cm4gTk87Ci19Ci0KLXN0YXRpYyBi
b29sIHdpbmRvd0NvdmVyc0FueVNjcmVlbihOU1dpbmRvdyAqd2luZG93KQotewotICAgIHJldHVy
biByZWN0Q292ZXJzQW55U2NyZWVuKHdpbmRvdy5mcmFtZSk7Ci19Ci0KLXN0YXRpYyBDR1dpbmRv
d0lEIGNnV2luZG93SUQoTlNXaW5kb3cgKndpbmRvdykKLXsKLSAgICByZXR1cm4gd2luZG93Lndp
bmRvd051bWJlcjsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgRnVsbHNjcmVlbldp
bmRvd1RyYWNrZXI6OndpbmRvd1Nob3duKFQgd2luZG93KQotewotICAgIENHV2luZG93SUQgd2lu
ZG93SUQgPSBjZ1dpbmRvd0lEKHdpbmRvdyk7Ci0gICAgaWYgKCF3aW5kb3dJRCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gSWYgdGhpcyB3aW5kb3cgaXMgYWxyZWFkeSB2aXNpYmxlIHRoZW4g
dGhlcmUgaXMgbm90aGluZyB0byBkby4KLSAgICBpZiAobV93aW5kb3dzLmNvbnRhaW5zKHdpbmRv
d0lEKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIElmIHRoZSB3aW5kb3cgaXMgbm90
IGZ1bGwtc2NyZWVuIHRoZW4gd2UncmUgbm90IGludGVyZXN0ZWQgaW4gaXQuCi0gICAgaWYgKCF3
aW5kb3dDb3ZlcnNBbnlTY3JlZW4od2luZG93KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9v
bCB3aW5kb3dTZXRXYXNFbXB0eSA9IG1fd2luZG93cy5pc0VtcHR5KCk7Ci0KLSAgICBtX3dpbmRv
d3MuYWRkKHdpbmRvd0lEKTsKLSAgICAKLSAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCBmdWxs
IHNjcmVlbiB3aW5kb3cgdG8gYmUgc2hvd24sIG5vdGlmeSB0aGUgVUkgcHJvY2Vzcy4KLSAgICBp
ZiAod2luZG93U2V0V2FzRW1wdHkpCi0gICAgICAgIFBsdWdpblByb2Nlc3M6OnNpbmdsZXRvbigp
LnNldEZ1bGxzY3JlZW5XaW5kb3dJc1Nob3dpbmcodHJ1ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci12b2lkIEZ1bGxzY3JlZW5XaW5kb3dUcmFja2VyOjp3aW5kb3dIaWRkZW4oVCB3aW5k
b3cpCi17Ci0gICAgQ0dXaW5kb3dJRCB3aW5kb3dJRCA9IGNnV2luZG93SUQod2luZG93KTsKLSAg
ICBpZiAoIXdpbmRvd0lEKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB0aGlzIGlzIG5v
dCBhIHdpbmRvdyB0aGF0IHdlJ3JlIHRyYWNraW5nIHRoZW4gdGhlcmUgaXMgbm90aGluZyB0byBk
by4KLSAgICBpZiAoIW1fd2luZG93cy5yZW1vdmUod2luZG93SUQpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBJZiB0aGlzIHdhcyB0aGUgbGFzdCBmdWxsIHNjcmVlbiB3aW5kb3cgdGhhdCB3
YXMgdmlzaWJsZSwgbm90aWZ5IHRoZSBVSSBwcm9jZXNzLgotICAgIGlmIChtX3dpbmRvd3MuaXNF
bXB0eSgpKQotICAgICAgICBQbHVnaW5Qcm9jZXNzOjpzaW5nbGV0b24oKS5zZXRGdWxsc2NyZWVu
V2luZG93SXNTaG93aW5nKGZhbHNlKTsKLX0KLQotc3RhdGljIEZ1bGxzY3JlZW5XaW5kb3dUcmFj
a2VyJiBmdWxsc2NyZWVuV2luZG93VHJhY2tlcigpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEZ1bGxzY3JlZW5XaW5kb3dUcmFja2VyPiBmdWxsc2NyZWVuV2luZG93VHJhY2tlcjsKLSAg
ICByZXR1cm4gZnVsbHNjcmVlbldpbmRvd1RyYWNrZXI7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldE1v
ZGFsKGJvb2wgbW9kYWxXaW5kb3dJc1Nob3dpbmcpCi17Ci0gICAgUGx1Z2luUHJvY2Vzczo6c2lu
Z2xldG9uKCkuc2V0TW9kYWxXaW5kb3dJc1Nob3dpbmcobW9kYWxXaW5kb3dJc1Nob3dpbmcpOwot
fQotCi1zdGF0aWMgdW5zaWduZWQgbW9kYWxDb3VudDsKLQotc3RhdGljIHZvaWQgYmVnaW5Nb2Rh
bCgpCi17Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICAvLyBN
YWtlIHN1cmUgdG8gbWFrZSBvdXJzZWx2ZXMgdGhlIGZyb250IHByb2Nlc3MKLSAgICBQcm9jZXNz
U2VyaWFsTnVtYmVyIHBzbjsKLSAgICBHZXRDdXJyZW50UHJvY2VzcygmcHNuKTsKLSAgICBTZXRG
cm9udFByb2Nlc3MoJnBzbik7Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5E
Ci0KLSAgICBpZiAoIW1vZGFsQ291bnQrKykKLSAgICAgICAgc2V0TW9kYWwodHJ1ZSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIGVuZE1vZGFsKCkKLXsKLSAgICBpZiAoIS0tbW9kYWxDb3VudCkKLSAgICAg
ICAgc2V0TW9kYWwoZmFsc2UpOwotfQotCi1zdGF0aWMgSU1QIE5TQXBwbGljYXRpb25fUnVuTW9k
YWxGb3JXaW5kb3c7Ci0KLXN0YXRpYyBOU0ludGVnZXIgcmVwbGFjZWRSdW5Nb2RhbEZvcldpbmRv
dyhpZCBzZWxmLCBTRUwgX2NtZCwgTlNXaW5kb3cqIHdpbmRvdykKLXsKLSAgICBiZWdpbk1vZGFs
KCk7Ci0gICAgTlNJbnRlZ2VyIHJlc3VsdCA9ICgoTlNJbnRlZ2VyICgqKShpZCwgU0VMLCBOU1dp
bmRvdyAqKSlOU0FwcGxpY2F0aW9uX1J1bk1vZGFsRm9yV2luZG93KShzZWxmLCBfY21kLCB3aW5k
b3cpOwotICAgIGVuZE1vZGFsKCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMg
Ym9vbCBvbGRQbHVnaW5Qcm9jZXNzTmFtZVNob3VsZEVxdWFsTmV3UGx1Z2luUHJvY2Vzc05hbWVG
b3JBZG9iZVJlYWRlcjsKLQotc3RhdGljIGJvb2wgaXNBZG9iZUFjcm9iYXRBZGRyZXNzKGNvbnN0
IHZvaWQqIGFkZHJlc3MpCi17Ci0gICAgRGxfaW5mbyBpbWFnZUluZm87Ci0gICAgaWYgKCFkbGFk
ZHIoYWRkcmVzcywgJmltYWdlSW5mbykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNv
bnN0IGNoYXIqIHBhdGhTdWZmaXggPSAiL0NvbnRlbnRzL0ZyYW1ld29ya3MvQWNyb2JhdC5mcmFt
ZXdvcmsvQWNyb2JhdCI7Ci0KLSAgICBpbnQgcGF0aFN1ZmZpeExlbmd0aCA9IHN0cmxlbihwYXRo
U3VmZml4KTsKLSAgICBpbnQgaW1hZ2VGaWxlUGF0aExlbmd0aCA9IHN0cmxlbihpbWFnZUluZm8u
ZGxpX2ZuYW1lKTsKLQotICAgIGlmIChpbWFnZUZpbGVQYXRoTGVuZ3RoIDwgcGF0aFN1ZmZpeExl
bmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHN0cmNtcChpbWFnZUluZm8u
ZGxpX2ZuYW1lICsgKGltYWdlRmlsZVBhdGhMZW5ndGggLSBwYXRoU3VmZml4TGVuZ3RoKSwgcGF0
aFN1ZmZpeCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1zdGF0aWMgYm9vbCBzdHJpbmdDb21wYXJlKENGU3RyaW5nUmVmIGEsIENGU3RyaW5nUmVmIGIs
IENGU3RyaW5nQ29tcGFyZUZsYWdzIG9wdGlvbnMsIHZvaWQqIHJldHVybkFkZHJlc3MsIENGQ29t
cGFyaXNvblJlc3VsdCYgcmVzdWx0KQotewotICAgIGlmIChwdGhyZWFkX21haW5fbnAoKSAhPSAx
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW9sZFBsdWdpblByb2Nlc3NOYW1l
U2hvdWxkRXF1YWxOZXdQbHVnaW5Qcm9jZXNzTmFtZUZvckFkb2JlUmVhZGVyKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAob3B0aW9ucyAhPSBrQ0ZDb21wYXJlQ2FzZUluc2Vuc2l0
aXZlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBjaGFyKiBhQ1N0cmluZyA9
IENGU3RyaW5nR2V0Q1N0cmluZ1B0cihhLCBrQ0ZTdHJpbmdFbmNvZGluZ0FTQ0lJKTsKLSAgICBp
ZiAoIWFDU3RyaW5nKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBjaGFyKiBi
Q1N0cmluZyA9IENGU3RyaW5nR2V0Q1N0cmluZ1B0cihiLCBrQ0ZTdHJpbmdFbmNvZGluZ0FTQ0lJ
KTsKLSAgICBpZiAoIWJDU3RyaW5nKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
c3RyY21wKGFDU3RyaW5nLCAiY29tLmFwcGxlLldlYktpdC5QbHVnaW5Qcm9jZXNzIikpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzdHJjbXAoYkNTdHJpbmcsICJjb20uYXBwbGUu
V2ViS2l0LlBsdWdpbi42NCIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBDaGVj
ayBpZiB0aGUgTEhTIHN0cmluZyBjb21lcyBmcm9tIHRoZSBBY3JvYmF0IGZyYW1ld29yay4KLSAg
ICBpZiAoIWlzQWRvYmVBY3JvYmF0QWRkcmVzcyhhKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLy8gQ2hlY2sgaWYgdGhlIHJldHVybiBhZHJlc3MgaXMgcGFydCBvZiB0aGUgQWNyb2Jh
dCBmcmFtZXdvcmsgYXMgd2VsbC4KLSAgICBpZiAoIWlzQWRvYmVBY3JvYmF0QWRkcmVzcyhyZXR1
cm5BZGRyZXNzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmVzdWx0ID0ga0NGQ29t
cGFyZUVxdWFsVG87Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGluaXRpYWxp
emVTaGltKCkKLXsKLSAgICAvLyBJbml0aWFsaXplIHRoZSBzaGltIGZvciAzMi1iaXQgb25seS4K
LSAgICBjb25zdCBQbHVnaW5Qcm9jZXNzU2hpbUNhbGxiYWNrcyBjYWxsYmFja3MgPSB7Ci0gICAg
ICAgIHN0cmluZ0NvbXBhcmUsCi0gICAgfTsKLQotICAgIFBsdWdpblByb2Nlc3NTaGltSW5pdGlh
bGl6ZUZ1bmMgaW5pdEZ1bmMgPSByZWludGVycHJldF9jYXN0PFBsdWdpblByb2Nlc3NTaGltSW5p
dGlhbGl6ZUZ1bmM+KGRsc3ltKFJUTERfREVGQVVMVCwgIldlYktpdFBsdWdpblByb2Nlc3NTaGlt
SW5pdGlhbGl6ZSIpKTsKLSAgICBpbml0RnVuYyhjYWxsYmFja3MpOwotfQotCi1zdGF0aWMgdm9p
ZCAoKk5TQ29uY3JldGVUYXNrX2xhdW5jaCkoTlNUYXNrICosIFNFTCk7Ci0KLXN0YXRpYyB2b2lk
IHJlcGxhY2VkTlNDb25jcmV0ZVRhc2tfbGF1bmNoKE5TVGFzayAqc2VsZiwgU0VMIF9jbWQpCi17
Ci0gICAgU3RyaW5nIGxhdW5jaFBhdGggPSBzZWxmLmxhdW5jaFBhdGg7Ci0KLSAgICBpZiAoUGx1
Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkubGF1bmNoUHJvY2VzcyhsYXVuY2hQYXRoLCBtYWtlVmVj
dG9yPFN0cmluZz4oc2VsZi5hcmd1bWVudHMpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlND
b25jcmV0ZVRhc2tfbGF1bmNoKHNlbGYsIF9jbWQpOwotfQotCi1zdGF0aWMgTlNSdW5uaW5nQXBw
bGljYXRpb24gKigqTlNXb3Jrc3BhY2VfbGF1bmNoQXBwbGljYXRpb25BdFVSTF9vcHRpb25zX2Nv
bmZpZ3VyYXRpb25fZXJyb3IpKE5TV29ya3NwYWNlICosIFNFTCwgTlNVUkwgKiwgTlNXb3Jrc3Bh
Y2VMYXVuY2hPcHRpb25zLCBOU0RpY3Rpb25hcnkgKiwgTlNFcnJvciAqKik7Ci0KLXN0YXRpYyBO
U1J1bm5pbmdBcHBsaWNhdGlvbiAqcmVwbGFjZWROU1dvcmtzcGFjZV9sYXVuY2hBcHBsaWNhdGlv
bkF0VVJMX29wdGlvbnNfY29uZmlndXJhdGlvbl9lcnJvcihOU1dvcmtzcGFjZSAqc2VsZiwgU0VM
IF9jbWQsIE5TVVJMICp1cmwsIE5TV29ya3NwYWNlTGF1bmNoT3B0aW9ucyBvcHRpb25zLCBOU0Rp
Y3Rpb25hcnkgKmNvbmZpZ3VyYXRpb24sIE5TRXJyb3IgKiplcnJvcikKLXsKLSAgICBBTExPV19E
RVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIGF1dG8gYXJndW1lbnRzID0gbWFrZVZl
Y3RvcjxTdHJpbmc+KFtjb25maWd1cmF0aW9uIG9iamVjdEZvcktleTpOU1dvcmtzcGFjZUxhdW5j
aENvbmZpZ3VyYXRpb25Bcmd1bWVudHNdKTsKLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFU
SU9OU19FTkQKLQotICAgIGlmIChQbHVnaW5Qcm9jZXNzOjpzaW5nbGV0b24oKS5sYXVuY2hBcHBs
aWNhdGlvbkF0VVJMKFVSTCh1cmwpLnN0cmluZygpLCBhcmd1bWVudHMpKSB7Ci0gICAgICAgIGlm
IChlcnJvcikKLSAgICAgICAgICAgICplcnJvciA9IG5pbDsKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICB9Ci0KLSAgICByZXR1cm4gTlNXb3Jrc3BhY2VfbGF1bmNoQXBwbGljYXRpb25BdFVSTF9v
cHRpb25zX2NvbmZpZ3VyYXRpb25fZXJyb3Ioc2VsZiwgX2NtZCwgdXJsLCBvcHRpb25zLCBjb25m
aWd1cmF0aW9uLCBlcnJvcik7Ci19Ci0KLXN0YXRpYyBCT09MICgqTlNXb3Jrc3BhY2Vfb3BlbkZp
bGUpKE5TV29ya3NwYWNlICosIFNFTCwgTlNTdHJpbmcgKik7Ci0KLXN0YXRpYyBCT09MIHJlcGxh
Y2VkTlNXb3Jrc3BhY2Vfb3BlbkZpbGUoTlNXb3Jrc3BhY2UgKnNlbGYsIFNFTCBfY21kLCBOU1N0
cmluZyAqZnVsbFBhdGgpCi17Ci0gICAgaWYgKFBsdWdpblByb2Nlc3M6OnNpbmdsZXRvbigpLm9w
ZW5GaWxlKGZ1bGxQYXRoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gTlNX
b3Jrc3BhY2Vfb3BlbkZpbGUoc2VsZiwgX2NtZCwgZnVsbFBhdGgpOwotfQotCi1zdGF0aWMgdm9p
ZCBpbml0aWFsaXplQ29jb2FPdmVycmlkZXMoKQotewotICAgIC8vIE92ZXJyaWRlIC1bTlNDb25j
cmV0ZVRhc2sgbGF1bmNoOl0KLSAgICBNZXRob2QgbGF1bmNoTWV0aG9kID0gY2xhc3NfZ2V0SW5z
dGFuY2VNZXRob2Qob2JqY19nZXRDbGFzcygiTlNDb25jcmV0ZVRhc2siKSwgQHNlbGVjdG9yKGxh
dW5jaCkpOwotICAgIE5TQ29uY3JldGVUYXNrX2xhdW5jaCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCAoKikoTlNUYXNrICosIFNFTCk+KG1ldGhvZF9zZXRJbXBsZW1lbnRhdGlvbihsYXVuY2hNZXRo
b2QsIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihyZXBsYWNlZE5TQ29uY3JldGVUYXNrX2xhdW5jaCkp
KTsKLQotICAgIC8vIE92ZXJyaWRlIC1bTlNXb3Jrc3BhY2UgbGF1bmNoQXBwbGljYXRpb25BdFVS
TDpvcHRpb25zOmNvbmZpZ3VyYXRpb246ZXJyb3I6XQotICAgIC8vIEZJWE1FOiBBcmUgdGhlc2Ug
ZGVwcmVjYXRpb24gYWxsb3dhbmNlcyBuZWNlc3Nhcnk/Ci0gICAgTWV0aG9kIGxhdW5jaEFwcGxp
Y2F0aW9uQXRVUkxPcHRpb25zQ29uZmlndXJhdGlvbkVycm9yTWV0aG9kID0gY2xhc3NfZ2V0SW5z
dGFuY2VNZXRob2Qob2JqY19nZXRDbGFzcygiTlNXb3Jrc3BhY2UiKSwgQHNlbGVjdG9yKGxhdW5j
aEFwcGxpY2F0aW9uQXRVUkw6b3B0aW9uczpjb25maWd1cmF0aW9uOmVycm9yOikpOwotICAgIE5T
V29ya3NwYWNlX2xhdW5jaEFwcGxpY2F0aW9uQXRVUkxfb3B0aW9uc19jb25maWd1cmF0aW9uX2Vy
cm9yID0gcmVpbnRlcnByZXRfY2FzdDxOU1J1bm5pbmdBcHBsaWNhdGlvbiAqKCopKE5TV29ya3Nw
YWNlICosIFNFTCwgTlNVUkwgKiwgTlNXb3Jrc3BhY2VMYXVuY2hPcHRpb25zLCBOU0RpY3Rpb25h
cnkgKiwgTlNFcnJvciAqKik+KG1ldGhvZF9zZXRJbXBsZW1lbnRhdGlvbihsYXVuY2hBcHBsaWNh
dGlvbkF0VVJMT3B0aW9uc0NvbmZpZ3VyYXRpb25FcnJvck1ldGhvZCwgcmVpbnRlcnByZXRfY2Fz
dDxJTVA+KHJlcGxhY2VkTlNXb3Jrc3BhY2VfbGF1bmNoQXBwbGljYXRpb25BdFVSTF9vcHRpb25z
X2NvbmZpZ3VyYXRpb25fZXJyb3IpKSk7Ci0KLSAgICAvLyBPdmVycmlkZSAtW05TV29ya3NwYWNl
IG9wZW5GaWxlOl0KLSAgICBNZXRob2Qgb3BlbkZpbGVNZXRob2QgPSBjbGFzc19nZXRJbnN0YW5j
ZU1ldGhvZChvYmpjX2dldENsYXNzKCJOU1dvcmtzcGFjZSIpLCBAc2VsZWN0b3Iob3BlbkZpbGU6
KSk7Ci0gICAgTlNXb3Jrc3BhY2Vfb3BlbkZpbGUgPSByZWludGVycHJldF9jYXN0PEJPT0wgKCop
KE5TV29ya3NwYWNlICosIFNFTCwgTlNTdHJpbmcgKik+KG1ldGhvZF9zZXRJbXBsZW1lbnRhdGlv
bihvcGVuRmlsZU1ldGhvZCwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KHJlcGxhY2VkTlNXb3Jrc3Bh
Y2Vfb3BlbkZpbGUpKSk7Ci0KLSAgICAvLyBPdmVycmlkZSAtW05TQXBwbGljYXRpb24gcnVuTW9k
YWxGb3JXaW5kb3c6XQotICAgIE1ldGhvZCBydW5Nb2RhbEZvcldpbmRvd01ldGhvZCA9IGNsYXNz
X2dldEluc3RhbmNlTWV0aG9kKG9iamNfZ2V0Q2xhc3MoIk5TQXBwbGljYXRpb24iKSwgQHNlbGVj
dG9yKHJ1bk1vZGFsRm9yV2luZG93OikpOwotICAgIE5TQXBwbGljYXRpb25fUnVuTW9kYWxGb3JX
aW5kb3cgPSBtZXRob2Rfc2V0SW1wbGVtZW50YXRpb24ocnVuTW9kYWxGb3JXaW5kb3dNZXRob2Qs
IHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihyZXBsYWNlZFJ1bk1vZGFsRm9yV2luZG93KSk7Ci0KLSAg
ICBOU05vdGlmaWNhdGlvbkNlbnRlciAqZGVmYXVsdENlbnRlciA9IFtOU05vdGlmaWNhdGlvbkNl
bnRlciBkZWZhdWx0Q2VudGVyXTsKLQotICAgIC8vIFRyYWNrIHdoZW4gYW55IENvY29hIHdpbmRv
dyBpcyBhYm91dCB0byBiZSBiZSBzaG93bi4KLSAgICBbZGVmYXVsdENlbnRlciBhZGRPYnNlcnZl
ckZvck5hbWU6TlNXaW5kb3dXaWxsT3JkZXJPblNjcmVlbk5vdGlmaWNhdGlvbgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDpuaWwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcXVldWU6bmlsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZ0Jsb2Nr
Ol4oTlNOb3RpZmljYXRpb24gKm5vdGlmaWNhdGlvbikgeyBmdWxsc2NyZWVuV2luZG93VHJhY2tl
cigpLndpbmRvd1Nob3duKFtub3RpZmljYXRpb24gb2JqZWN0XSk7IH1dOwotICAgIC8vIFRyYWNr
IHdoZW4gYW55IENvY29hIHdpbmRvdyBpcyBhYm91dCB0byBiZSBoaWRkZW4uCi0gICAgW2RlZmF1
bHRDZW50ZXIgYWRkT2JzZXJ2ZXJGb3JOYW1lOk5TV2luZG93V2lsbE9yZGVyT2ZmU2NyZWVuTm90
aWZpY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Om5pbAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZTpuaWwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVzaW5nQmxvY2s6XihOU05vdGlmaWNhdGlvbiAqbm90aWZpY2F0aW9uKSB7IGZ1
bGxzY3JlZW5XaW5kb3dUcmFja2VyKCkud2luZG93SGlkZGVuKFtub3RpZmljYXRpb24gb2JqZWN0
XSk7IH1dOwotCi19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzczo6c2V0TW9kYWxXaW5kb3dJc1Nob3dp
bmcoYm9vbCBtb2RhbFdpbmRvd0lzU2hvd2luZykKLXsKLSAgICBwYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Qcm9jZXNzUHJveHk6OlNldE1vZGFsV2luZG93
SXNTaG93aW5nKG1vZGFsV2luZG93SXNTaG93aW5nKSwgMCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJv
Y2Vzczo6c2V0RnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZyhib29sIGZ1bGxzY3JlZW5XaW5kb3dJ
c1Nob3dpbmcpCi17Ci0gICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6UGx1Z2luUHJvY2Vzc1Byb3h5OjpTZXRGdWxsc2NyZWVuV2luZG93SXNTaG93aW5nKGZ1bGxz
Y3JlZW5XaW5kb3dJc1Nob3dpbmcpLCAwKTsKLX0KLQotYm9vbCBQbHVnaW5Qcm9jZXNzOjpsYXVu
Y2hQcm9jZXNzKGNvbnN0IFN0cmluZyYgbGF1bmNoUGF0aCwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGFyZ3VtZW50cykKLXsKLSAgICBib29sIHJlc3VsdDsKLSAgICBpZiAoIXBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Qcm9jZXNzUHJveHk6OkxhdW5j
aFByb2Nlc3MobGF1bmNoUGF0aCwgYXJndW1lbnRzKSwgTWVzc2FnZXM6OlBsdWdpblByb2Nlc3NQ
cm94eTo6TGF1bmNoUHJvY2Vzczo6UmVwbHkocmVzdWx0KSwgMCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgUGx1Z2luUHJvY2Vzczo6bGF1
bmNoQXBwbGljYXRpb25BdFVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGFyZ3VtZW50cykKLXsKLSAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIGlm
ICghcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OlBsdWdpblBy
b2Nlc3NQcm94eTo6TGF1bmNoQXBwbGljYXRpb25BdFVSTCh1cmxTdHJpbmcsIGFyZ3VtZW50cyks
IE1lc3NhZ2VzOjpQbHVnaW5Qcm9jZXNzUHJveHk6OkxhdW5jaFByb2Nlc3M6OlJlcGx5KHJlc3Vs
dCksIDApKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1ib29sIFBsdWdpblByb2Nlc3M6Om9wZW5VUkwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGlu
dDMyX3QmIHN0YXR1cywgU3RyaW5nJiBsYXVuY2hlZFVSTFN0cmluZykKLXsKLSAgICBib29sIHJl
c3VsdDsKLSAgICBpZiAoIXBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpQbHVnaW5Qcm9jZXNzUHJveHk6Ok9wZW5VUkwodXJsU3RyaW5nKSwgTWVzc2FnZXM6OlBs
dWdpblByb2Nlc3NQcm94eTo6T3BlblVSTDo6UmVwbHkocmVzdWx0LCBzdGF0dXMsIGxhdW5jaGVk
VVJMU3RyaW5nKSwgMCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLWJvb2wgUGx1Z2luUHJvY2Vzczo6b3BlbkZpbGUoY29uc3QgU3RyaW5nJiBmdWxs
UGF0aCkKLXsKLSAgICBib29sIHJlc3VsdDsKLSAgICBpZiAoIXBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Qcm9jZXNzUHJveHk6Ok9wZW5GaWxlKGZ1
bGxQYXRoKSwgTWVzc2FnZXM6OlBsdWdpblByb2Nlc3NQcm94eTo6T3BlbkZpbGU6OlJlcGx5KHJl
c3VsdCksIDApKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi12b2lkIFBsdWdpblByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVBsdWdpblByb2Nlc3Mo
UGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCi17Ci0gICAgbV9j
b21wb3NpdGluZ1JlbmRlclNlcnZlclBvcnQgPSBXVEZNb3ZlKHBhcmFtZXRlcnMuYWNjZWxlcmF0
ZWRDb21wb3NpdGluZ1BvcnQpOwotCi0gICAgW05TVVJMQ2FjaGUgc2V0U2hhcmVkVVJMQ2FjaGU6
YWRvcHROUyhbW05TVVJMQ2FjaGUgYWxsb2NdCi0gICAgICAgIGluaXRXaXRoTWVtb3J5Q2FwYWNp
dHk6cGx1Z2luTWVtb3J5Q2FjaGVTaXplCi0gICAgICAgIGRpc2tDYXBhY2l0eTpwbHVnaW5EaXNr
Q2FjaGVTaXplCi0gICAgICAgIGRpc2tQYXRoOm1fbnN1cmxDYWNoZURpcmVjdG9yeV0pLmdldCgp
XTsKLQotICAgIC8vIERpc2FibGUgRGFyayBNb2RlIGluIHRoZSBwbHVnaW4gcHJvY2VzcyB0byBh
dm9pZCByZW5kZXJpbmcgaXNzdWVzLgotICAgIFtOU0FwcCBzZXRBcHBlYXJhbmNlOltOU0FwcGVh
cmFuY2UgYXBwZWFyYW5jZU5hbWVkOk5TQXBwZWFyYW5jZU5hbWVBcXVhXV07Ci0KLSNpZiBIQVZF
KEFQUF9TU08pIHx8IFBMQVRGT1JNKE1BQ0NBVEFMWVNUKQotICAgIFtOU1VSTFNlc3Npb24gX2Rp
c2FibGVBcHBTU09dOwotI2VuZGlmCi19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzczo6cGxhdGZvcm1J
bml0aWFsaXplUHJvY2Vzcyhjb25zdCBBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzKQotewotICAgIGluaXRpYWxpemVTaGltKCk7Ci0KLSAgICBpbml0
aWFsaXplQ29jb2FPdmVycmlkZXMoKTsKLQotICAgIGJvb2wgZXhwZXJpbWVudGFsUGx1Z0luU2Fu
ZGJveFByb2ZpbGVzRW5hYmxlZCA9IHBhcmFtZXRlcnMuZXh0cmFJbml0aWFsaXphdGlvbkRhdGEu
Z2V0KCJleHBlcmltZW50YWwtc2FuZGJveC1wbHVnaW4iKSA9PSAiMSI7Ci0gICAgV2ViQ29yZTo6
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRFeHBlcmltZW50YWxQ
bHVnSW5TYW5kYm94UHJvZmlsZXNFbmFibGVkKGV4cGVyaW1lbnRhbFBsdWdJblNhbmRib3hQcm9m
aWxlc0VuYWJsZWQpOwotCi0gICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIGJldHRlciB0byBwcm94
eSBTZXRDdXJzb3IgY2FsbHMgb3ZlciB0byB0aGUgVUkgcHJvY2VzcyBpbnN0ZWFkIG9mCi0gICAg
Ly8gYWxsb3dpbmcgcGx1Zy1pbnMgdG8gY2hhbmdlIHRoZSBtb3VzZSBjdXJzb3IgYXQgYW55IHRp
bWUuCi0gICAgLy8gRklYTUU6IFNldHNDdXJzb3JJbkJhY2tncm91bmQgY29ubmVjdGlvbiBwcm9w
ZXJ0eSBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGtDR1NTZXRzQ3Vyc29ySW5CYWNrZ3JvdW5k
VGFnQml0IHdpbmRvdyB0YWcgYml0LgotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS83NzUyNDIyPiBh
c2tzIGZvciBhbiBBUEkgdG8gc2V0IGN1cnNvciBmcm9tIGJhY2tncm91bmQgcHJvY2Vzc2VzLgot
ICAgIENHU0Nvbm5lY3Rpb25JRCBjaWQgPSBDR1NNYWluQ29ubmVjdGlvbklEKCk7Ci0gICAgQ0dT
U2V0Q29ubmVjdGlvblByb3BlcnR5KGNpZCwgY2lkLCBDRlNUUigiU2V0c0N1cnNvckluQmFja2dy
b3VuZCIpLCAoQ0ZUeXBlUmVmKWtDRkJvb2xlYW5UcnVlKTsKLQotICAgIFJldGFpblB0cjxDRlVS
TFJlZj4gcGx1Z2luVVJMID0gYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgw
LCBtX3BsdWdpblBhdGguY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5
bGUsIGZhbHNlKSk7Ci0gICAgaWYgKCFwbHVnaW5VUkwpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFJldGFpblB0cjxDRkJ1bmRsZVJlZj4gcGx1Z2luQnVuZGxlID0gYWRvcHRDRihDRkJ1bmRsZUNy
ZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwbHVnaW5VUkwuZ2V0KCkpKTsKLSAgICBpZiAoIXBs
dWdpbkJ1bmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wbHVnaW5CdW5kbGVJZGVudGlm
aWVyID0gQ0ZCdW5kbGVHZXRJZGVudGlmaWVyKHBsdWdpbkJ1bmRsZS5nZXQoKSk7Ci0KLSAgICBp
ZiAobV9wbHVnaW5CdW5kbGVJZGVudGlmaWVyID09ICJjb20uYWRvYmUuYWNyb2JhdC5wZGZ2aWV3
ZXJOUEFQSSIpCi0gICAgICAgIG9sZFBsdWdpblByb2Nlc3NOYW1lU2hvdWxkRXF1YWxOZXdQbHVn
aW5Qcm9jZXNzTmFtZUZvckFkb2JlUmVhZGVyID0gdHJ1ZTsKLQotICAgIC8vIEZJWE1FOiBXb3Jr
YXJvdW5kIGZvciBKYXZhIG5vdCBsaWtpbmcgaXRzIHBsdWdpbiBwcm9jZXNzIHRvIGJlIHN1cHBy
ZXNzZWQgLSA8cmRhcjovL3Byb2JsZW0vMTQyNjc4NDM+Ci0gICAgaWYgKG1fcGx1Z2luQnVuZGxl
SWRlbnRpZmllciA9PSAiY29tLm9yYWNsZS5qYXZhLkphdmFBcHBsZXRQbHVnaW4iKQotICAgICAg
ICAobmV3IFVzZXJBY3Rpdml0eSgiY29tLm9yYWNsZS5qYXZhLkphdmFBcHBsZXRQbHVnaW4iKSkt
PnN0YXJ0KCk7Ci0gICAgCi0gICAgaWYgKCFwbHVnaW5IYXNTYW5kYm94UHJvZmlsZShtX3BsdWdp
bkJ1bmRsZUlkZW50aWZpZXIpKSB7Ci0gICAgICAgIC8vIEFsbG93IEFwcGxlIEV2ZW50cyBmcm9t
IENpdHJpeCBwbHVnaW4uIFRoaXMgY2FuIGJlIHJlbW92ZWQgd2hlbiA8cmRhcjovL3Byb2JsZW0v
MTQwMTI4MjM+IGlzIGZpeGVkLgotICAgICAgICBzZXRlbnYoIl9fQVBQTEVFVkVOVFNTRVJWSUNF
TkFNRSIsICJjb20uYXBwbGUuY29yZXNlcnZpY2VzLmFwcGxlZXZlbnRzIiwgMSk7Ci0gICAgfQot
fQotCi12b2lkIFBsdWdpblByb2Nlc3M6OmluaXRpYWxpemVQcm9jZXNzTmFtZShjb25zdCBBdXhp
bGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQotewotICAg
IE5TU3RyaW5nICphcHBsaWNhdGlvbk5hbWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpX
RUJfVUlfTlNTVFJJTkcoQCIlQCAoJUAgSW50ZXJuZXQgcGx1Zy1pbikiLCAidmlzaWJsZSBuYW1l
IG9mIHRoZSBwbHVnLWluIGhvc3QgcHJvY2Vzcy4gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBw
bHVnLWluIG5hbWUgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGFwcGxpY2F0aW9uIG5h
bWUuIiksIFtbKE5TU3RyaW5nICopbV9wbHVnaW5QYXRoIGxhc3RQYXRoQ29tcG9uZW50XSBzdHJp
bmdCeURlbGV0aW5nUGF0aEV4dGVuc2lvbl0sIChOU1N0cmluZyAqKXBhcmFtZXRlcnMudWlQcm9j
ZXNzTmFtZV07Ci0gICAgX0xTU2V0QXBwbGljYXRpb25JbmZvcm1hdGlvbkl0ZW0oa0xTRGVmYXVs
dFNlc3Npb25JRCwgX0xTR2V0Q3VycmVudEFwcGxpY2F0aW9uQVNOKCksIF9rTFNEaXNwbGF5TmFt
ZUtleSwgKENGU3RyaW5nUmVmKWFwcGxpY2F0aW9uTmFtZSwgbnVsbHB0cik7Ci0gICAgaWYgKCFt
X3BsdWdpbkJ1bmRsZUlkZW50aWZpZXIuaXNFbXB0eSgpKQotICAgICAgICBfTFNTZXRBcHBsaWNh
dGlvbkluZm9ybWF0aW9uSXRlbShrTFNEZWZhdWx0U2Vzc2lvbklELCBfTFNHZXRDdXJyZW50QXBw
bGljYXRpb25BU04oKSwga0xTUGx1Z0luQnVuZGxlSWRlbnRpZmllcktleSwgbV9wbHVnaW5CdW5k
bGVJZGVudGlmaWVyLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIG51bGxwdHIpOwotfQotCi12b2lk
IFBsdWdpblByb2Nlc3M6OmluaXRpYWxpemVTYW5kYm94KGNvbnN0IEF1eGlsaWFyeVByb2Nlc3NJ
bml0aWFsaXphdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIFNhbmRib3hJbml0aWFsaXphdGlv
blBhcmFtZXRlcnMmIHNhbmRib3hQYXJhbWV0ZXJzKQotewotICAgIC8vIFBsdWdpblByb2Nlc3Mg
bWF5IGFscmVhZHkgYmUgc2FuZGJveGVkIGlmIGl0cyBwYXJlbnQgcHJvY2VzcyB3YXMgc2FuZGJv
eGVkLCBhbmQgbGF1bmNoZWQgYSBjaGlsZCBwcm9jZXNzIGluc3RlYWQgb2YgYW4gWFBDIHNlcnZp
Y2UuCi0gICAgLy8gVGhpcyBpcyBnZW5lcmFsbHkgbm90IGV4cGVjdGVkLCBob3dldmVyIHdlIGN1
cnJlbnRseSBhbHdheXMgc3Bhd24gYSBjaGlsZCBwcm9jZXNzIHRvIGNyZWF0ZSBhIE1JTUUgdHlw
ZSBwcmVmZXJlbmNlcyBmaWxlLgotICAgIGlmIChjdXJyZW50UHJvY2Vzc0lzU2FuZGJveGVkKCkp
IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXBhcmFtZXRlcnMuY29ubmVjdGlvbklkZW50aWZp
ZXIueHBjQ29ubmVjdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjaGFyIGNh
Y2hlRGlyZWN0b3J5W1BBVEhfTUFYXTsKLSAgICBpZiAoIWNvbmZzdHIoX0NTX0RBUldJTl9VU0VS
X0NBQ0hFX0RJUiwgY2FjaGVEaXJlY3RvcnksIHNpemVvZihjYWNoZURpcmVjdG9yeSkpKSB7Ci0g
ICAgICAgIFdURkxvZ0Fsd2F5cygiUGx1Z2luUHJvY2VzczogY291bGRuJ3QgcmV0cmlldmUgc3lz
dGVtIGNhY2hlIGRpcmVjdG9yeSBwYXRoOiAlZFxuIiwgZXJybm8pOwotICAgICAgICBleGl0KEVY
X09TRVJSKTsKLSAgICB9Ci0KLSAgICBtX25zdXJsQ2FjaGVEaXJlY3RvcnkgPSBbW1tOU0ZpbGVN
YW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBzdHJpbmdXaXRoRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
OmNhY2hlRGlyZWN0b3J5IGxlbmd0aDpzdHJsZW4oY2FjaGVEaXJlY3RvcnkpXSBzdHJpbmdCeUFw
cGVuZGluZ1BhdGhDb21wb25lbnQ6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlm
aWVyXV07Ci0gICAgaWYgKCFbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNyZWF0ZURp
cmVjdG9yeUF0VVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6bV9uc3VybENhY2hlRGlyZWN0b3J5
IGlzRGlyZWN0b3J5OllFU10gd2l0aEludGVybWVkaWF0ZURpcmVjdG9yaWVzOllFUyBhdHRyaWJ1
dGVzOm5pbCBlcnJvcjpuaWxdKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiUGx1Z2luUHJvY2Vz
czogY291bGRuJ3QgY3JlYXRlIE5TVVJMIGNhY2hlIGRpcmVjdG9yeSAnJXMnXG4iLCBjYWNoZURp
cmVjdG9yeSk7Ci0gICAgICAgIGV4aXQoRVhfT1NFUlIpOwotICAgIH0KLQotICAgIGJvb2wgcGFy
ZW50SXNTYW5kYm94ZWQgPSBwYXJhbWV0ZXJzLmNvbm5lY3Rpb25JZGVudGlmaWVyLnhwY0Nvbm5l
Y3Rpb24gJiYgY29ubmVjdGVkUHJvY2Vzc0lzU2FuZGJveGVkKHBhcmFtZXRlcnMuY29ubmVjdGlv
bklkZW50aWZpZXIueHBjQ29ubmVjdGlvbi5nZXQoKSk7Ci0KLSAgICBpZiAocGFyYW1ldGVycy5l
eHRyYUluaXRpYWxpemF0aW9uRGF0YS5nZXQoImRpc2FibGUtc2FuZGJveCIpID09ICIxIikgewot
ICAgICAgICBpZiAocGFyZW50SXNTYW5kYm94ZWQpIHsKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5
cygiU2FuZGJveGVkIHByb2Nlc3NlcyBtYXkgbm90IGRpc2FibGUgcGx1Zy1pbiBzYW5kYm94LCB0
ZXJtaW5hdGluZyAlcy4iLCBwYXJhbWV0ZXJzLmNsaWVudElkZW50aWZpZXIudXRmOCgpLmRhdGEo
KSk7Ci0gICAgICAgICAgICBleGl0KEVYX09TRVJSKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgU3RyaW5nIHNhbmRib3hQcm9maWxlID0gcGx1Z2luU2FuZGJveFBy
b2ZpbGUobV9wbHVnaW5CdW5kbGVJZGVudGlmaWVyKTsKLSAgICBpZiAoc2FuZGJveFByb2ZpbGUu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChwYXJlbnRJc1NhbmRib3hlZCkgewotICAgICAgICAg
ICAgV1RGTG9nQWx3YXlzKCJTYW5kYm94ZWQgcHJvY2Vzc2VzIG1heSBvbmx5IHVzZSBzYW5kYm94
ZWQgcGx1Zy1pbnMsIHRlcm1pbmF0aW5nICVzLiIsIHBhcmFtZXRlcnMuY2xpZW50SWRlbnRpZmll
ci51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGV4aXQoRVhfT1NFUlIpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzYW5kYm94UGFyYW1ldGVycy5zZXRTYW5k
Ym94UHJvZmlsZShzYW5kYm94UHJvZmlsZSk7Ci0KLSAgICBjaGFyIHRlbXBvcmFyeURpcmVjdG9y
eVtQQVRIX01BWF07Ci0gICAgaWYgKCFjb25mc3RyKF9DU19EQVJXSU5fVVNFUl9URU1QX0RJUiwg
dGVtcG9yYXJ5RGlyZWN0b3J5LCBzaXplb2YodGVtcG9yYXJ5RGlyZWN0b3J5KSkpIHsKLSAgICAg
ICAgV1RGTG9nQWx3YXlzKCJQbHVnaW5Qcm9jZXNzOiBjb3VsZG4ndCByZXRyaWV2ZSBzeXN0ZW0g
dGVtcG9yYXJ5IGRpcmVjdG9yeSBwYXRoOiAlZFxuIiwgZXJybm8pOwotICAgICAgICBleGl0KEVY
X09TRVJSKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RybGNweSh0ZW1wb3JhcnlEaXJlY3RvcnksIFtb
W1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBzdHJpbmdXaXRoRmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uOnRlbXBvcmFyeURpcmVjdG9yeSBsZW5ndGg6c3RybGVuKHRlbXBvcmFyeURpcmVj
dG9yeSldIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIldlYktpdFBsdWdpbi1YWFhY
WFgiXSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb25dLCBzaXplb2YodGVtcG9yYXJ5RGlyZWN0b3J5
KSkgPj0gc2l6ZW9mKHRlbXBvcmFyeURpcmVjdG9yeSkKLSAgICAgICAgfHwgIW1rZHRlbXAodGVt
cG9yYXJ5RGlyZWN0b3J5KSkgewotICAgICAgICBXVEZMb2dBbHdheXMoIlBsdWdpblByb2Nlc3M6
IGNvdWxkbid0IGNyZWF0ZSBwcml2YXRlIHRlbXBvcmFyeSBkaXJlY3RvcnkgJyVzJ1xuIiwgdGVt
cG9yYXJ5RGlyZWN0b3J5KTsKLSAgICAgICAgZXhpdChFWF9PU0VSUik7Ci0gICAgfQotCi0gICAg
c2FuZGJveFBhcmFtZXRlcnMuc2V0VXNlckRpcmVjdG9yeVN1ZmZpeChbW1tbTlNGaWxlTWFuYWdl
ciBkZWZhdWx0TWFuYWdlcl0gc3RyaW5nV2l0aEZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbjp0ZW1w
b3JhcnlEaXJlY3RvcnkgbGVuZ3RoOnN0cmxlbih0ZW1wb3JhcnlEaXJlY3RvcnkpXSBsYXN0UGF0
aENvbXBvbmVudF0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uXSk7Ci0KLSAgICBzYW5kYm94UGFy
YW1ldGVycy5hZGRQYXRoUGFyYW1ldGVyKCJQTFVHSU5fUEFUSCIsIG1fcGx1Z2luUGF0aCk7Ci0g
ICAgc2FuZGJveFBhcmFtZXRlcnMuYWRkUGF0aFBhcmFtZXRlcigiTlNVUkxfQ0FDSEVfRElSIiwg
bV9uc3VybENhY2hlRGlyZWN0b3J5KTsKLQotICAgIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRV
c2VyRGVmYXVsdHNdIHJlZ2lzdGVyRGVmYXVsdHM6QHsgQCJOU1VzZVJlbW90ZVNhdmVQYW5lbCIg
OiBAWUVTIH1dOwotCi0gICAgQXV4aWxpYXJ5UHJvY2Vzczo6aW5pdGlhbGl6ZVNhbmRib3gocGFy
YW1ldGVycywgc2FuZGJveFBhcmFtZXRlcnMpOwotfQotCi1ib29sIFBsdWdpblByb2Nlc3M6OnNo
b3VsZE92ZXJyaWRlUXVhcmFudGluZSgpCi17Ci0gICAgcmV0dXJuIG1fcGx1Z2luQnVuZGxlSWRl
bnRpZmllciAhPSAiY29tLmNpc2NvLndlYmV4LnBsdWdpbi5ncGM2NCI7Ci19Ci0KLXZvaWQgUGx1
Z2luUHJvY2Vzczo6c3RvcFJ1bkxvb3AoKQotewotICAgIEF1eGlsaWFyeVByb2Nlc3M6OnN0b3BO
U0FwcFJ1bkxvb3AoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGx1
Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc1NoaW0uaCBiL1NvdXJjZS9XZWJLaXQvUGx1Z2lu
UHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc1NoaW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDNiMGJmNmM5ODFiZjhkODE4ZTQyYjRiMTY4MmY0ZDJiN2NhOWU1Yy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsdWdp
blByb2Nlc3MvbWFjL1BsdWdpblByb2Nlc3NTaGltLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLUBjbGFzcyBOU1dpbmRvdzsKLQot
I2luY2x1ZGUgPENhcmJvbi9DYXJib24uaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0cnVj
dCBQbHVnaW5Qcm9jZXNzU2hpbUNhbGxiYWNrcyB7Ci0gICAgYm9vbCAoKnN0cmluZ0NvbXBhcmUp
KENGU3RyaW5nUmVmIGEsIENGU3RyaW5nUmVmIGIsIENGU3RyaW5nQ29tcGFyZUZsYWdzIG9wdGlv
bnMsIHZvaWQqIHJldHVybkFkZHJlc3MsIENGQ29tcGFyaXNvblJlc3VsdCYgcmVzdWx0KTsKLX07
Ci0KLXR5cGVkZWYgdm9pZCAoKlBsdWdpblByb2Nlc3NTaGltSW5pdGlhbGl6ZUZ1bmMpKGNvbnN0
IFBsdWdpblByb2Nlc3NTaGltQ2FsbGJhY2tzJik7Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc1NoaW0ubW0gYi9Tb3VyY2UvV2Vi
S2l0L1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpblByb2Nlc3NTaGltLm1tCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA2OTg0NzFlODhhYWU0NTJlOTBkY2JmNjI0NDcyOGE1MDhhMzNkMmNl
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc1NoaW0ubW0KKysrIC9kZXYvbnVs
bApAQCAtMSwyNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmICFQTEFURk9STShJT1Nf
RkFNSUxZKQotCi0jaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KLSNpbXBvcnQgIlBsdWdpblByb2Nl
c3NTaGltLmgiCi0KLSNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KLSNpbXBvcnQgPENhcmJvbi9D
YXJib24uaD4KLSNpbXBvcnQgPFdlYkNvcmUvRHluYW1pY0xpbmtlckludGVycG9zaW5nLmg+Ci0j
aW1wb3J0IDxtYWNoL21hY2hfdm0uaD4KLSNpbXBvcnQgPG9iamMvbWVzc2FnZS5oPgotI2ltcG9y
dCA8c3RkaW8uaD4KLSNpbXBvcnQgPHN5cy9pcGMuaD4KLSNpbXBvcnQgPHN5cy9tbWFuLmg+Ci0j
aW1wb3J0IDxzeXMvc2htLmg+Ci0jaW1wb3J0IDx3dGYvQ29tcGlsZXIuaD4KLSNpbXBvcnQgPHd0
Zi9zcGkvZGFyd2luL1NhbmRib3hTUEkuaD4KLQotI2lmIENQVShBUk02NEUpCi0jaW1wb3J0IDxw
dHJhdXRoLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWV4dGVybiAiQyIgdm9p
ZCBXZWJLaXRQbHVnaW5Qcm9jZXNzU2hpbUluaXRpYWxpemUoY29uc3QgUGx1Z2luUHJvY2Vzc1No
aW1DYWxsYmFja3MmIGNhbGxiYWNrcyk7Ci0KLXN0YXRpYyBQbHVnaW5Qcm9jZXNzU2hpbUNhbGxi
YWNrcyBwbHVnaW5Qcm9jZXNzU2hpbUNhbGxiYWNrczsKLQotLy8gU2ltcGxlIEZha2UgU3lzdGVt
IFYgc2hhcmVkIG1lbW9yeS4gVGhpcyByZXBsYWNlbWVudCBBUEkgaW1wbGVtZW50cwotLy8gdXNh
YmxlIHN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgZm9yIHVzZSB3aXRoaW4gYSBzaW5nbGUgcHJvY2Vz
cy4gVGhlIG1lbW9yeQotLy8gaXMgbm90IHNoYXJlZCBvdXRzaWRlIG9mIHRoZSBzY29wZSBvZiB0
aGUgcHJvY2Vzcy4KLXN0cnVjdCBGYWtlU2hhcmVkTWVtb3J5RGVzY3JpcHRvciB7Ci0gICAgRmFr
ZVNoYXJlZE1lbW9yeURlc2NyaXB0b3IqIG5leHQ7Ci0gICAgaW50IHJlZmVyZW5jZUNvdW50Owot
ICAgIGtleV90IGtleTsKLSAgICBzaXplX3QgcmVxdWVzdGVkU2l6ZTsKLSAgICBzaXplX3QgbW1h
cGVkU2l6ZTsKLSAgICBpbnQgc2hhcmVkTWVtb3J5RmxhZ3M7Ci0gICAgaW50IHNoYXJlZE1lbW9y
eUlkZW50aWZpZXI7Ci0gICAgdm9pZCogbW1hcGVkQWRkcmVzczsKLX07Ci0KLXN0YXRpYyBGYWtl
U2hhcmVkTWVtb3J5RGVzY3JpcHRvciogc2htRGVzY3JpcHRvckxpc3QgPSAwOwotc3RhdGljIGlu
dCBmYWtlU2hhcmVkTWVtb3J5SWRlbnRpZmllciA9IDA7Ci0KLXN0YXRpYyBGYWtlU2hhcmVkTWVt
b3J5RGVzY3JpcHRvciogZmluZEJ5U2hhcmVkTWVtb3J5SWRlbnRpZmllcihpbnQgc2hhcmVkTWVt
b3J5SWRlbnRpZmllcikKLXsKLSAgICBGYWtlU2hhcmVkTWVtb3J5RGVzY3JpcHRvciogZGVzY3Jp
cHRvclB0ciA9IHNobURlc2NyaXB0b3JMaXN0OwotCi0gICAgd2hpbGUgKGRlc2NyaXB0b3JQdHIp
IHsKLSAgICAgICAgaWYgKGRlc2NyaXB0b3JQdHItPnNoYXJlZE1lbW9yeUlkZW50aWZpZXIgPT0g
c2hhcmVkTWVtb3J5SWRlbnRpZmllcikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZXNj
cmlwdG9yUHRyID0gZGVzY3JpcHRvclB0ci0+bmV4dDsKLSAgICB9Ci0gICAgcmV0dXJuIGRlc2Ny
aXB0b3JQdHI7Ci19Ci0KLXN0YXRpYyBGYWtlU2hhcmVkTWVtb3J5RGVzY3JpcHRvciogZmluZEJ5
U2hhcmVkTWVtb3J5QWRkcmVzcyhjb25zdCB2b2lkKiBtbWFwZWRBZGRyZXNzKQotewotICAgIEZh
a2VTaGFyZWRNZW1vcnlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yUHRyID0gc2htRGVzY3JpcHRvckxp
c3Q7Ci0KLSAgICB3aGlsZSAoZGVzY3JpcHRvclB0cikgewotICAgICAgICBpZiAoZGVzY3JpcHRv
clB0ci0+bW1hcGVkQWRkcmVzcyA9PSBtbWFwZWRBZGRyZXNzKQotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgZGVzY3JpcHRvclB0ciA9IGRlc2NyaXB0b3JQdHItPm5leHQ7Ci0gICAgfQot
ICAgIHJldHVybiBkZXNjcmlwdG9yUHRyOwotfQotCi1zdGF0aWMgQm9vbGVhbiBzaGltX2Rpc2Fi
bGVkKHZvaWQpCi17Ci0gICAgc3RhdGljIEJvb2xlYW4gaXNGYWtlU0hNRGlzYWJsZWQ7Ci0KLSAg
ICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2U7Ci0gICAgZGlzcGF0Y2hfb25jZSgmb25jZSwg
XigpIHsKLSAgICAgICAgQm9vbGVhbiBrZXlFeGlzdHNBbmRIYXNWYWxpZEZvcm1hdCA9IGZhbHNl
OwotICAgICAgICBCb29sZWFuIHByZWZWYWx1ZSA9IENGUHJlZmVyZW5jZXNHZXRBcHBCb29sZWFu
VmFsdWUoQ0ZTVFIoIldlYktpdERpc2FibGVGYWtlU1lTVlNITSIpLCBrQ0ZQcmVmZXJlbmNlc0N1
cnJlbnRBcHBsaWNhdGlvbiwgJmtleUV4aXN0c0FuZEhhc1ZhbGlkRm9ybWF0KTsKLQotICAgICAg
ICBpZiAoa2V5RXhpc3RzQW5kSGFzVmFsaWRGb3JtYXQgJiYgcHJlZlZhbHVlKQotICAgICAgICAg
ICAgaXNGYWtlU0hNRGlzYWJsZWQgPSB0cnVlOwotICAgICAgICBlbHNlIGlmIChzYW5kYm94X2No
ZWNrKGdldHBpZCgpLCBOVUxMLCBTQU5EQk9YX0ZJTFRFUl9OT05FKSA9PSAxKQotICAgICAgICAg
ICAgaXNGYWtlU0hNRGlzYWJsZWQgPSBmYWxzZTsgIC8vIFNhbmRib3hlZAotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBpc0Zha2VTSE1EaXNhYmxlZCA9IHRydWU7ICAgLy8gTm90IFNhbmRib3hl
ZAotCi0gICAgfSk7Ci0KLSAgICByZXR1cm4gaXNGYWtlU0hNRGlzYWJsZWQ7Ci19Ci0KLXN0YXRp
YyBpbnQgc2hpbV9zaG1kdChjb25zdCB2b2lkKiBzaGFyZWRBZGRyZXNzKQotewotICAgIGlmIChz
aGltX2Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBzaG1kdChzaGFyZWRBZGRyZXNzKTsKLQot
ICAgIEZha2VTaGFyZWRNZW1vcnlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yUHRyID0gZmluZEJ5U2hh
cmVkTWVtb3J5QWRkcmVzcyhzaGFyZWRBZGRyZXNzKTsKLSAgICBpZiAoIWRlc2NyaXB0b3JQdHIp
IHsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0K
LSAgICBkZXNjcmlwdG9yUHRyLT5yZWZlcmVuY2VDb3VudC0tOwotICAgIGlmICghZGVzY3JpcHRv
clB0ci0+cmVmZXJlbmNlQ291bnQpIHsKLSAgICAgICAgbXVubWFwKGRlc2NyaXB0b3JQdHItPm1t
YXBlZEFkZHJlc3MsIGRlc2NyaXB0b3JQdHItPm1tYXBlZFNpemUpOwotICAgICAgICBkZXNjcmlw
dG9yUHRyLT5tbWFwZWRBZGRyZXNzID0gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQot
c3RhdGljIHZvaWQqIHNoaW1fc2htYXQoaW50IHNoYXJlZE1lbW9yeUlkZW50aWZpZXIsIGNvbnN0
IHZvaWQqIHJlcXVlc3RlZFNoYXJlZEFkZHJlc3MsIGludCBzaG1mbGcpCi17Ci0gICAgaWYgKHNo
aW1fZGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHNobWF0KHNoYXJlZE1lbW9yeUlkZW50aWZp
ZXIsIHJlcXVlc3RlZFNoYXJlZEFkZHJlc3MsIHNobWZsZyk7Ci0KLSAgICBGYWtlU2hhcmVkTWVt
b3J5RGVzY3JpcHRvciogZGVzY3JpcHRvclB0ciA9IGZpbmRCeVNoYXJlZE1lbW9yeUlkZW50aWZp
ZXIoc2hhcmVkTWVtb3J5SWRlbnRpZmllcik7Ci0gICAgdm9pZCogbWFwcGVkQWRkcmVzcyA9ICh2
b2lkKiktMTsKLQotICAgIGlmICghZGVzY3JpcHRvclB0cikgewotICAgICAgICBlcnJubyA9IEVJ
TlZBTDsKLSAgICAgICAgcmV0dXJuIG1hcHBlZEFkZHJlc3M7Ci0gICAgfQotCi0gICAgaWYgKGRl
c2NyaXB0b3JQdHItPm1tYXBlZEFkZHJlc3MpIHsKLSAgICAgICAgaWYgKCFyZXF1ZXN0ZWRTaGFy
ZWRBZGRyZXNzIHx8IHJlcXVlc3RlZFNoYXJlZEFkZHJlc3MgPT0gZGVzY3JpcHRvclB0ci0+bW1h
cGVkQWRkcmVzcykgewotICAgICAgICAgICAgbWFwcGVkQWRkcmVzcyA9IGRlc2NyaXB0b3JQdHIt
Pm1tYXBlZEFkZHJlc3M7Ci0gICAgICAgICAgICBkZXNjcmlwdG9yUHRyLT5yZWZlcmVuY2VDb3Vu
dCsrOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVzY3JpcHRvclB0ci0+bW1h
cGVkU2l6ZSA9IChkZXNjcmlwdG9yUHRyLT5yZXF1ZXN0ZWRTaXplICsgUEFHRV9TSVpFKSAmIH4o
UEFHRV9TSVpFIC0gMSk7Ci0gICAgICAgIG1hcHBlZEFkZHJlc3MgPSBkZXNjcmlwdG9yUHRyLT5t
bWFwZWRBZGRyZXNzID0gbW1hcChjb25zdF9jYXN0PHZvaWQqPihyZXF1ZXN0ZWRTaGFyZWRBZGRy
ZXNzKSwKLSAgICAgICAgICAgIGRlc2NyaXB0b3JQdHItPm1tYXBlZFNpemUsIFBST1RfUkVBRCB8
IFBST1RfV1JJVEUsIE1BUF9BTk9OIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTsKLSAgICAgICAgZGVz
Y3JpcHRvclB0ci0+cmVmZXJlbmNlQ291bnQrKzsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWFwcGVk
QWRkcmVzczsKLX0KLQotc3RhdGljIGludCBzaGltX3NobWdldChrZXlfdCBrZXksIHNpemVfdCBy
ZXF1ZXN0ZWRTaXplT2ZTaGFyZWRNZW1vcnksIGludCBzaGFyZWRNZW1vcnlGbGFncykKLXsKLSAg
ICBpZiAoc2hpbV9kaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gc2htZ2V0KGtleSwgcmVxdWVz
dGVkU2l6ZU9mU2hhcmVkTWVtb3J5LCBzaGFyZWRNZW1vcnlGbGFncyk7Ci0KLSAgICBGYWtlU2hh
cmVkTWVtb3J5RGVzY3JpcHRvciogZGVzY3JpcHRvclB0ciA9IHNobURlc2NyaXB0b3JMaXN0Owot
Ci0gICAgd2hpbGUgKGRlc2NyaXB0b3JQdHIpIHsKLSAgICAgICAgLy8gQXJlIHdlIGxvb2tpbmcg
Zm9yIHNvbWV0aGluZyB3ZSd2ZSBhbHJlYWR5IGNyZWF0ZWQ/Ci0gICAgICAgIGlmIChkZXNjcmlw
dG9yUHRyLT5rZXkgPT0ga2V5Ci0gICAgICAgICAgICAmJiBkZXNjcmlwdG9yUHRyLT5yZXF1ZXN0
ZWRTaXplID09IHJlcXVlc3RlZFNpemVPZlNoYXJlZE1lbW9yeQotICAgICAgICAgICAgJiYgISgo
ZGVzY3JpcHRvclB0ci0+c2hhcmVkTWVtb3J5RmxhZ3MgXiBzaGFyZWRNZW1vcnlGbGFncykgJiAw
Nzc3KSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZXNjcmlwdG9yUHRyID0gZGVzY3Jp
cHRvclB0ci0+bmV4dDsKLSAgICB9Ci0KLSAgICBpZiAoIWRlc2NyaXB0b3JQdHIpIHsKLSAgICAg
ICAgZGVzY3JpcHRvclB0ciA9IChGYWtlU2hhcmVkTWVtb3J5RGVzY3JpcHRvciopbWFsbG9jKHNp
emVvZihGYWtlU2hhcmVkTWVtb3J5RGVzY3JpcHRvcikpOwotICAgICAgICBpZiAoIWRlc2NyaXB0
b3JQdHIpIHsKLSAgICAgICAgICAgIGVycm5vID0gRU5PTUVNOwotICAgICAgICAgICAgcmV0dXJu
IC0xOwotICAgICAgICB9Ci0gICAgICAgIGRlc2NyaXB0b3JQdHItPmtleSA9IGtleTsKLSAgICAg
ICAgZGVzY3JpcHRvclB0ci0+cmVxdWVzdGVkU2l6ZSA9IHJlcXVlc3RlZFNpemVPZlNoYXJlZE1l
bW9yeTsKLSAgICAgICAgZGVzY3JpcHRvclB0ci0+c2hhcmVkTWVtb3J5RmxhZ3MgPSBzaGFyZWRN
ZW1vcnlGbGFnczsKLSAgICAgICAgZGVzY3JpcHRvclB0ci0+c2hhcmVkTWVtb3J5SWRlbnRpZmll
ciA9ICsrZmFrZVNoYXJlZE1lbW9yeUlkZW50aWZpZXI7Ci0gICAgICAgIGRlc2NyaXB0b3JQdHIt
PnJlZmVyZW5jZUNvdW50ID0gMDsKLSAgICAgICAgZGVzY3JpcHRvclB0ci0+bW1hcGVkQWRkcmVz
cyA9IDA7Ci0gICAgICAgIGRlc2NyaXB0b3JQdHItPm1tYXBlZFNpemUgPSAwOwotICAgICAgICBk
ZXNjcmlwdG9yUHRyLT5uZXh0ID0gc2htRGVzY3JpcHRvckxpc3Q7Ci0gICAgICAgIHNobURlc2Ny
aXB0b3JMaXN0ID0gZGVzY3JpcHRvclB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIGRlc2NyaXB0b3JQ
dHItPnNoYXJlZE1lbW9yeUlkZW50aWZpZXI7Ci19Ci0KLXN0YXRpYyBpbnQgc2hpbV9zaG1jdGwo
aW50IHNoYXJlZE1lbW9yeUlkZW50aWZpZXIsIGludCBjbWQsIHN0cnVjdCBzaG1pZF9kcyogb3V0
cHV0RGVzY3JpcHRvcikKLXsKLSAgICBpZiAoc2hpbV9kaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm4gc2htY3RsKHNoYXJlZE1lbW9yeUlkZW50aWZpZXIsIGNtZCwgb3V0cHV0RGVzY3JpcHRvcik7
Ci0KLSAgICBGYWtlU2hhcmVkTWVtb3J5RGVzY3JpcHRvciogZGVzY3JpcHRvclB0ciA9IGZpbmRC
eVNoYXJlZE1lbW9yeUlkZW50aWZpZXIoc2hhcmVkTWVtb3J5SWRlbnRpZmllcik7Ci0KLSAgICBp
ZiAoIWRlc2NyaXB0b3JQdHIpIHsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJl
dHVybiAtMTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGNtZCkgewotICAgIGNhc2UgSVBDX1NFVDoK
LSAgICBjYXNlIElQQ19STUlEOgotICAgICAgICBlcnJubyA9IEVQRVJNOwotICAgICAgICByZXR1
cm4gLTE7Ci0KLSAgICBjYXNlIElQQ19TVEFUOgotICAgICAgICBvdXRwdXREZXNjcmlwdG9yLT5z
aG1fcGVybS5jdWlkID0gb3V0cHV0RGVzY3JpcHRvci0+c2htX3Blcm0udWlkID0gZ2V0dWlkKCk7
Ci0gICAgICAgIG91dHB1dERlc2NyaXB0b3ItPnNobV9wZXJtLmNnaWQgPSBvdXRwdXREZXNjcmlw
dG9yLT5zaG1fcGVybS5naWQgPSBnZXRnaWQoKTsKLSAgICAgICAgb3V0cHV0RGVzY3JpcHRvci0+
c2htX3Blcm0ubW9kZSA9IGRlc2NyaXB0b3JQdHItPnNoYXJlZE1lbW9yeUZsYWdzICYgMDc3NzsK
LQotICAgICAgICBvdXRwdXREZXNjcmlwdG9yLT5zaG1fc2Vnc3ogPSBkZXNjcmlwdG9yUHRyLT5y
ZXF1ZXN0ZWRTaXplOwotCi0gICAgICAgIG91dHB1dERlc2NyaXB0b3ItPnNobV9jcGlkID0gb3V0
cHV0RGVzY3JpcHRvci0+c2htX2xwaWQgPSBnZXRwaWQoKTsKLQotICAgICAgICBvdXRwdXREZXNj
cmlwdG9yLT5zaG1fbmF0dGNoID0gZGVzY3JpcHRvclB0ci0+cmVmZXJlbmNlQ291bnQ7Ci0KLSAg
ICAgICAgb3V0cHV0RGVzY3JpcHRvci0+c2htX2N0aW1lID0gb3V0cHV0RGVzY3JpcHRvci0+c2ht
X2F0aW1lID0gb3V0cHV0RGVzY3JpcHRvci0+c2htX2R0aW1lID0gdGltZSgwKTsKLQotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBlcnJubyA9IEVJTlZBTDsKLSAgICByZXR1cm4gLTE7
Ci19Ci0KLURZTERfSU5URVJQT1NFKHNoaW1fc2htYXQsIHNobWF0KTsKLURZTERfSU5URVJQT1NF
KHNoaW1fc2htZHQsIHNobWR0KTsKLURZTERfSU5URVJQT1NFKHNoaW1fc2htZ2V0LCBzaG1nZXQp
OwotRFlMRF9JTlRFUlBPU0Uoc2hpbV9zaG1jdGwsIHNobWN0bCk7Ci0KLXN0YXRpYyBDRkNvbXBh
cmlzb25SZXN1bHQgc2hpbUNGU3RyaW5nQ29tcGFyZShDRlN0cmluZ1JlZiBhLCBDRlN0cmluZ1Jl
ZiBiLCBDRlN0cmluZ0NvbXBhcmVGbGFncyBvcHRpb25zKQotewotICAgIGlmIChwbHVnaW5Qcm9j
ZXNzU2hpbUNhbGxiYWNrcy5zdHJpbmdDb21wYXJlKSB7Ci0gICAgICAgIENGQ29tcGFyaXNvblJl
c3VsdCByZXN1bHQ7Ci0gICAgICAgIC8vIEZJWE1FIChzZWUgcmRhcjovLzcyODk3MjkxKTogV29y
ayBhcm91bmQgYSBDbGFuZyBidWcgd2hlcmUgX19idWlsdGluX3JldHVybl9hZGRyZXNzKCkKLSAg
ICAgICAgLy8gc29tZXRpbWVzIGdpdmVzIHVzIGEgc2lnbmVkIHBvaW50ZXIsIGFuZCBzb21ldGlt
ZXMgZG9lcyBub3QuCi0gICAgICAgIHZvaWQqIHJldHVybkFkZHJlc3MgPSBfX2J1aWx0aW5fcmV0
dXJuX2FkZHJlc3MoMCk7Ci0jaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgcmV0dXJuQWRkcmVzcyA9
IHB0cmF1dGhfc3RyaXAocmV0dXJuQWRkcmVzcywgcHRyYXV0aF9rZXlfcHJvY2Vzc19kZXBlbmRl
bnRfY29kZSk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKHBsdWdpblByb2Nlc3NTaGltQ2FsbGJhY2tz
LnN0cmluZ0NvbXBhcmUoYSwgYiwgb3B0aW9ucywgcmV0dXJuQWRkcmVzcywgcmVzdWx0KSkKLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIENGU3RyaW5nQ29t
cGFyZShhLCBiLCBvcHRpb25zKTsKLX0KLQotRFlMRF9JTlRFUlBPU0Uoc2hpbUNGU3RyaW5nQ29t
cGFyZSwgQ0ZTdHJpbmdDb21wYXJlKTsKLQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJk
ZWZhdWx0IikpKQotdm9pZCBXZWJLaXRQbHVnaW5Qcm9jZXNzU2hpbUluaXRpYWxpemUoY29uc3Qg
UGx1Z2luUHJvY2Vzc1NoaW1DYWxsYmFja3MmIGNhbGxiYWNrcykKLXsKLSAgICBwbHVnaW5Qcm9j
ZXNzU2hpbUNhbGxiYWNrcyA9IGNhbGxiYWNrczsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvUGx1Z2luUHJvY2Vzcy9tYWMvY29tLmFwcGxlLldlYktpdC5wbHVnaW4tY29tbW9uLnNi
LmluIGIvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL21hYy9jb20uYXBwbGUuV2ViS2l0LnBs
dWdpbi1jb21tb24uc2IuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMDE1ZWFm
MDVmNzAyZDg3ZDdhMDVlNGM1NzU4MjJlOTBjNzFmZjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL21hYy9j
b20uYXBwbGUuV2ViS2l0LnBsdWdpbi1jb21tb24uc2IuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw1
MjAgKzAsMCBAQAotOyBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi07Ci07IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotOyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLTsgYXJlIG1ldDoKLTsg
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLTsgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotOyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotOyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi07ICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi07Ci07IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLTsgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi07IFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLTsgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi07IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLTsgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLTsgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi07IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi07IENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci07IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLTsgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0o
dmVyc2lvbiAxKQotKGRlbnkgZGVmYXVsdCAod2l0aCBwYXJ0aWFsLXN5bWJvbGljYXRpb24pKQot
KGFsbG93IHN5c3RlbS1hdWRpdCBmaWxlLXJlYWQtbWV0YWRhdGEpCi0KLShpbXBvcnQgInN5c3Rl
bS5zYiIpCi0KLSNpbmNsdWRlICJTaGFyZWQvU2FuZGJveC9wcmVmZXJlbmNlcy5zYiIKLQotOzs7
IHByb2Nlc3MtaW5mbyogZGVmYXVsdHMgdG8gYWxsb3c7IGRlbnkgaXQgYW5kIHRoZW4gYWxsb3cg
b3BlcmF0aW9ucyB3ZSBhY3R1YWxseSBuZWVkLgotKGRlbnkgcHJvY2Vzcy1pbmZvKikKLShhbGxv
dyBwcm9jZXNzLWluZm8tcGlkaW5mbykKLShhbGxvdyBwcm9jZXNzLWluZm8tc2V0Y29udHJvbCAo
dGFyZ2V0IHNlbGYpKQotCi0oZGVueSBzeXNjdGwqKQotKGFsbG93IHN5c2N0bC1yZWFkCi0gICAg
KHN5c2N0bC1uYW1lCi0gICAgICAgICJody5hdmFpbGNwdSIKLSAgICAgICAgImh3Lm5jcHUiCi0g
ICAgICAgICJody5tb2RlbCIKLSAgICAgICAgImtlcm4ubWVtb3J5c3RhdHVzX2xldmVsIgotICAg
ICAgICAidm0uZm9vdHByaW50X3N1c3BlbmQiKSkKLQotKGRlbnkgaW9raXQtZ2V0LXByb3BlcnRp
ZXMpCi0oYWxsb3cgaW9raXQtZ2V0LXByb3BlcnRpZXMKLSAgICAoaW9raXQtcHJvcGVydHktcmVn
ZXggIyJeQUFQTCwoRGlzcGxheVBpcGV8T3BlbkNMZGlzYWJsZWR8SU9HcmFwaGljc19MRVIofF9S
ZWdUYWdfMXxfUmVnVGFnXzB8X0J1c3lfMil8YWxpYXMtcG9saWN5fGJvb3QtZGlzcGxheXxkaXNw
bGF5LWFsaWFzfG11eC1zd2l0Y2gtc3RhdGV8bmRydi1kZXZ8cHJpbWFyeS1kaXNwbGF5fHNsb3Qt
bmFtZSkiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiQUdDSW5mbyIpCi0gICAgKGlva2l0LXByb3Bl
cnR5LXJlZ2V4ICMiXkFUWSwoY2JpdHN8ZmJfKGxpbmVieXRlc3xvZmZzZXR8c2l6ZSl8aW50cmV2
KSIpCi0gICAgKGlva2l0LXByb3BlcnR5LXJlZ2V4ICMiXkFjY2VsKENhcHN8TmF0aXZlRE1BUm93
Qnl0ZUFsaWdubWVudCkiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiQWN0dWF0aW9uU3VwcG9ydGVk
IikKLSAgICAoaW9raXQtcHJvcGVydHkgIkFsbG93RGlzcGxheVNsZWVwIikKLSAgICAoaW9raXQt
cHJvcGVydHkgIkFsd2F5c05lZWRzVmVsb2NpdHlDYWxjdWxhdGVkIikKLSAgICAoaW9raXQtcHJv
cGVydHkgIkFwcGxlKERpc3BsYXlUeXBlfEdWQUtleURvZXNOb3RFeGlzdHxJbnRlbE1FVkFCdW5k
bGVOYW1lfFNlbnNlKSIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJDRkJ1bmRsZUlkZW50aWZpZXIi
KQotICAgIChpb2tpdC1wcm9wZXJ0eSAiQ0ZCdW5kbGVJZGVudGlmaWVyS2VybmVsIikgOzsgPHJk
YXI6Ly9wcm9ibGVtLzU0MzQ3NTAzPgotICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdleCAjIl5EaXNw
bGF5KFBhcmFtZXRlckhhbmRsZXJVc2VzQ2hhclB0cnxQcm9kdWN0SUR8Um91dGluZ3xTZXJpYWxO
dW1iZXJ8VmVuZG9ySUQpIikKLSAgICAoaW9raXQtcHJvcGVydHkgIkRldmVsb3BtZW50IikKLSAg
ICAoaW9raXQtcHJvcGVydHkgIkRldmljZUVxSUQiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiRHJp
dmVyIGlzIFJlYWR5IikKLSAgICAoaW9raXQtcHJvcGVydHkgIkVuYWJsZUxQVlAiKQotICAgIChp
b2tpdC1wcm9wZXJ0eSAiRW5kaWFubmVzcyIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJGYW1pbHkg
SUQiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiRm9yY2VTdXBwb3J0ZWQiKQotICAgIChpb2tpdC1w
cm9wZXJ0eSAiR1BVQ29uZmlndXJhdGlvblZhcmlhYmxlIikKLSAgICAoaW9raXQtcHJvcGVydHkg
IkdwdURlYnVnUG9saWN5IikKLSAgICAoaW9raXQtcHJvcGVydHkgIkhJRFBvaW50ZXJBY2NlbGVy
YXRpb25UeXBlIikKLSAgICAoaW9raXQtcHJvcGVydHktcmVnZXggIyJeSU9BViguKikoRGV8RW4p
Y29kZSQiKQotICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdleCAjIl5JT0FjY2VsKERpc3BsYXlQaXBl
Q2FwYWJpbGl0aWVzfEluZGV4fFJldmlzaW9ufFR5cGVzKSIpCi0gICAgKGlva2l0LXByb3BlcnR5
LXJlZ2V4ICMiXklPQXVkaW9Db250cm9sKENoYW5uZWxJRHxJRHxTdWJUeXBlfFVzYWdlKSIpCi0g
ICAgKGlva2l0LXByb3BlcnR5ICJJT0F1ZGlvQ29udHJvbFZhbHVlIikKLSAgICAoaW9raXQtcHJv
cGVydHktcmVnZXggIyJeSU9BdWRpb0RldmljZShDYW5CZURlZmF1bHRzfFRyYW5zcG9ydFR5cGUp
IikKLSAgICAoaW9raXQtcHJvcGVydHktcmVnZXggIyJeSU9BdWRpb0VuZ2luZShDaGFubmVsTmFt
ZXN8Q2xpZW50RGVzY3JpcHRpb258Q29yZUF1ZGlvUGx1Z0lufCh8RGV2aWNlKURlc2NyaXB0aW9u
fEZsYXZvcnxHbG9iYWxVbmlxdWVJRHxPdXRwdXRDaGFubmVsTGF5b3V0fFNhbXBsZU9mZnNldHxT
dGF0ZSkiKQotICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdleCAjIl5JT0F1ZGlvRW5naW5lQ2xvY2so
RG9tYWlufElzU3RhYmxlKSIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJJT0F1ZGlvRW5naW5lRGlz
YWJsZUNsb2NrQm91bmRzQ2hlY2siKQotICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdleCAjIl5JT0F1
ZGlvRW5naW5lKElucHV0fE91dHB1dClTYW1wbGUoTGF0ZW5jeXxPZmZzZXQpIikKLSAgICAoaW9r
aXQtcHJvcGVydHkgIklPQXVkaW9FbmdpbmVJc0hpZGRlbiIpCi0gICAgKGlva2l0LXByb3BlcnR5
LXJlZ2V4ICMiXklPQXVkaW9FbmdpbmVOdW0oQWN0aXZlVXNlckNsaWVudHN8U2FtcGxlRnJhbWVz
UGVyQnVmZmVyKSIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJJT0F1ZGlvU2FtcGxlUmF0ZSIpCi0g
ICAgKGlva2l0LXByb3BlcnR5ICJJT0F1ZGlvU3RyZWFtU2FtcGxlRm9ybWF0Qnl0ZU9yZGVyIikK
LSAgICAoaW9raXQtcHJvcGVydHkgIklPQmFja2xpZ2h0SGFuZGxlcklEIikKLSAgICAoaW9raXQt
cHJvcGVydHkgIklPQ2xhc3NOYW1lT3ZlcnJpZGUiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiSU9D
RlBsdWdJblR5cGVzIikKLSAgICAoaW9raXQtcHJvcGVydHkgIklPQ2xhc3MiKQotICAgIChpb2tp
dC1wcm9wZXJ0eSAiSU9Db25zb2xlVXNlcnMiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiSU9EVkRC
dW5kbGVOYW1lIikKLSAgICAoaW9raXQtcHJvcGVydHktcmVnZXggIyJeSU9EaXNwbGF5KEF0dHJp
YnV0ZXN8Q2FwYWJpbGl0eVN0cmluZ3xDb25uZWN0RmxhZ3N8Q29udHJvbGxlcklEfEVESUR8Rmly
bXdhcmVMZXZlbHxNQ0NTVmVyc2lvbnxQYXJhbWV0ZXJzfFByZWZzS2V5fFRlY2hub2xvZ3lUeXBl
fFVzYWdlVGltZSkiKQotICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdleCAjIl5JT0ZCKENMVVREZWZl
cnxDb25maWd8Q3VycmVudFBpeGVsQ2xvY2t8Q3VycmVudFBpeGVsQ291bnR8Q3Vyc29ySW5mb3xE
ZXBlbmRlbnRJRHxEZXBlbmRlbnRJbmRleHxEZXRhaWxlZFRpbWluZ3N8R2FtbWFDb3VudHxHYW1t
YUhlYWRlclNpemV8R2FtbWFXaWR0aHxJMkNJbnRlcmZhY2VJRHN8STJDSW50ZXJmYWNlSW5mb3xJ
bnRlZ3JhdGVkfE1lbW9yeVNpemV8TmVlZHNSZWZyZXNofFByb2JlT3B0aW9uc3xTY2FsZXJJbmZv
fFRpbWluZ1JhbmdlfFRyYW5zZm9ybXxVSVNjYWxlfFdhaXRDdXJzb3JGcmFtZXN8V2FpdEN1cnNv
clBlcmlvZCkiKQotICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdleCAjIl5JT0ZCQ3VycmVudFBpeGVs
Q291bnQoUmVhbCkiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiSU9GcmFtZWJ1ZmZlck9wZW5HTElu
ZGV4IikKLSAgICAoaW9raXQtcHJvcGVydHkgIklPR2VuZXJhbEludGVyZXN0IikKLSAgICAoaW9r
aXQtcHJvcGVydHkgIklPR0xCdW5kbGVOYW1lIikKLSAgICAoaW9raXQtcHJvcGVydHktcmVnZXgg
IyJeSU9HVkEoQkdSQUVuY3xDb2RlY3xFbmNvZGVyUmVzdHJpY3RlZHxTY2FsZXJ8VlRDYXBhYmls
aXRpZXMpIikKLSAgICAoaW9raXQtcHJvcGVydHktcmVnZXggIl5JT0dWQVtBLVpdKyhEZXxFbilj
b2RlIikKLSAgICAoaW9raXQtcHJvcGVydHkgIklPR1ZBSDI2NEVuY29kZUNhcGFiaWxpdGllcyIp
IDs7IDxyZGFyOi8vcHJvYmxlbS80OTQ5ODA0MD4KLSAgICAoaW9raXQtcHJvcGVydHkgIklPSTJD
VHJhbnNhY3Rpb25UeXBlcyIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJJT0tpdERlYnVnIikKLSAg
ICAoaW9raXQtcHJvcGVydHkgIklPTUFDQWRkcmVzcyIpIDs7IEZvciBzb21lIEZsYXNoIHBsYXll
cnMKLSAgICAoaW9raXQtcHJvcGVydHkgIklPTWF0Y2hDYXRlZ29yeSIpCi0gICAgKGlva2l0LXBy
b3BlcnR5LXJlZ2V4ICMiXklPTmFtZShNYXRjaHxNYXRjaGVkKSIpCi0gICAgKGlva2l0LXByb3Bl
cnR5ICJJT09DREJ1bmRsZU5hbWUiKQotICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdleCAjIl5JT1BD
SSgoQ2xhc3N8UHJpbWFyeXxQcm9wZXJ0eXwpTWF0Y2h8RXhwcmVzcyhDYXBhYmlsaXRpZXN8TGlu
ayhTdGF0dXN8Q2FwYWJpbGl0aWVzKSl8TVNJTW9kZXxSZXNvdXJjZWR8VHVubmVsbGVkKSIpCi0g
ICAgKGlva2l0LXByb3BlcnR5ICJJT1BNU3RyaWN0VHJlZU9yZGVyIikKLSAgICAoaW9raXQtcHJv
cGVydHktcmVnZXggIyJeSU9QbGF0Zm9ybShTZXJpYWxOdW1iZXJ8VVVJRCkiKSA7OyBEaXR0bwot
ICAgIChpb2tpdC1wcm9wZXJ0eSAiSU9Qb3dlck1hbmFnZW1lbnQiKQotICAgIChpb2tpdC1wcm9w
ZXJ0eSAiSU9Qcm9iZVNjb3JlIikKLSAgICAoaW9raXQtcHJvcGVydHkgIklPUHJvcGVydHlNYXRj
aCIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJJT1Byb3ZpZGVyQ2xhc3MiKQotICAgIChpb2tpdC1w
cm9wZXJ0eS1yZWdleCAjIl5JT1JlcG9ydChMdXJlc3xMZWdlbmQofFB1YmxpYykpIikKLSAgICAo
aW9raXQtcHJvcGVydHkgIklPU2NyZWVuUmVzdG9yZVN0YXRlIikKLSAgICAoaW9raXQtcHJvcGVy
dHkgIklPU291cmNlVmVyc2lvbiIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJJT1ZBQnVuZGxlTmFt
ZSIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJJT1ZBUmVuZGVyZXJJRCIpCi0gICAgKGlva2l0LXBy
b3BlcnR5ICJJT1ZBUmVuZGVyZXJTdWJJRCIpCi0gICAgKGlva2l0LXByb3BlcnR5LXJlZ2V4ICMi
XkludGVybmFsU3RhdGlzdGljcyh8QWNjbSkiKQotICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdleCAj
Il5NVCggQnVpbHQtSW58SElERGV2aWNlKSIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJNYWludGFp
blBvd2VySW5VSUxvY2siKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiTWF4IFBhY2tldCBTaXplIikK
LSAgICAoaW9raXQtcHJvcGVydHktcmVnZXggIyJeTWV0YWxQbHVnaW4oTmFtZXxDbGFzc05hbWUp
IikKLSAgICAoaW9raXQtcHJvcGVydHkgIk1ldGFsU3RhdGlzdGljc05hbWUiKQotICAgIChpb2tp
dC1wcm9wZXJ0eS1yZWdleCAjIl5NdWx0aXRvdWNoIChJRHxTZXJpYWwgTnVtYmVyfFN1YmRldmlj
ZSBJRCkiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiTlZEQSxtbS12ZXJzaW9uIikKLSAgICAoaW9r
aXQtcHJvcGVydHkgIk5WREEsTlZQcmVzZW50bWVudC12ZXJzaW9uIikKLSAgICAoaW9raXQtcHJv
cGVydHkgIk5WREEsRW5hYmxlLUEyUjEwRzEwQjEwRm9ybWF0IikKLSAgICAoaW9raXQtcHJvcGVy
dHkgIk5YU3lzdGVtSW5mbyIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJOb0F1dG9Sb3V0ZSIpCi0g
ICAgKGlva2l0LXByb3BlcnR5LXJlZ2V4ICMiXlBlcmZvcm1hbmNlU3RhdGlzdGljcyh8QWNjdW0p
IikKLSAgICAoaW9raXQtcHJvcGVydHkgIlByb3RvY29sIENoYXJhY3RlcmlzdGljcyIpCi0gICAg
KGlva2l0LXByb3BlcnR5ICJTYWZlRWplY3RSZXF1ZXN0ZWQiKQotICAgIChpb2tpdC1wcm9wZXJ0
eS1yZWdleCAjIl5TZW5zb3IgKENvbHVtbnN8UmVnaW9uIChEZXNjcmlwdG9yfFBhcmFtKXxSb3dz
fFN1cmZhY2UgKERlc2NyaXB0b3J8SGVpZ2h0fFdpZHRoKSkiKQotICAgIChpb2tpdC1wcm9wZXJ0
eSAiU3VwcG9ydEF1ZGlvQVVVQyIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJTdXJmYWNlTGlzdCIp
Ci0gICAgKGlva2l0LXByb3BlcnR5ICJUaW1lU3RhbXBGaWx0ZXJpbmciKQotICAgIChpb2tpdC1w
cm9wZXJ0eSAiVHJhbnNwb3J0IikKLSAgICAoaW9raXQtcHJvcGVydHkgIlZSQU0sdG90YWxNQiIp
Ci0gICAgKGlva2l0LXByb3BlcnR5ICJXQU5UU19GUkFNRVNfSUdOT1JFRCIpCi0gICAgKGlva2l0
LXByb3BlcnR5ICJib2FyZC1pZCIpCi0gICAgKGlva2l0LXByb3BlcnR5LXJlZ2V4ICMiXmF1ZGlv
LShjb2RlYy1pbmZvfGRldmljZS0obXZhbHVlfG52YWx1ZSkpIikKLSAgICAoaW9raXQtcHJvcGVy
dHkgImF2LXNpZ25hbC10eXBlIikKLSAgICAoaW9raXQtcHJvcGVydHkgImJjZFZlcnNpb24iKQot
ICAgIChpb2tpdC1wcm9wZXJ0eSAiYm9vdC1nYW1tYS1yZXN0b3JlZCIpCi0gICAgKGlva2l0LXBy
b3BlcnR5ICJidWlsdC1pbiIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJjYWlsX3Byb3BlcnRpZXMi
KQotICAgIChpb2tpdC1wcm9wZXJ0eSAiY29ubmVjdG9yLXR5cGUiKQotICAgIChpb2tpdC1wcm9w
ZXJ0eSAiZGV2aWNlLWNvbG9ycyIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJkcG0iKQotICAgIChp
b2tpdC1wcm9wZXJ0eSAiZ3JhcGhpYy1vcHRpb25zIikKLSAgICAoaW9raXQtcHJvcGVydHkgImlk
UHJvZHVjdCIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJpZFZlbmRvciIpCi0gICAgKGlva2l0LXBy
b3BlcnR5ICJpb2ZiX3ZlcnNpb24iKQotICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdleCAjIl5wYXJz
ZXItKG9wdGlvbnN8dHlwZSkiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAicG9ydC1udW1iZXIiKQot
ICAgIChpb2tpdC1wcm9wZXJ0eSAic3RhcnR1cC10aW1pbmciKQotICAgIChpb2tpdC1wcm9wZXJ0
eSAidG91Y2gtc2l6ZS1pZCIpCi0pCi0KLShkZW55IG1hY2gtbG9va3VwICh4cGMtc2VydmljZS1u
YW1lLXByZWZpeCAiIikpCi0oYWxsb3cgbWFjaC1sb29rdXAKLSAgICAoeHBjLXNlcnZpY2UtbmFt
ZSAiY29tLmFwcGxlLlZpZXdCcmlkZ2VBdXhpbGlhcnkiKQotICAgICh4cGMtc2VydmljZS1uYW1l
ICJjb20uYXBwbGUuYWNjZXNzaWJpbGl0eS5tZWRpYWFjY2Vzc2liaWxpdHlkIikKLSAgICAoeHBj
LXNlcnZpY2UtbmFtZSAiY29tLmFwcGxlLmFwcGtpdC54cGMub3BlbkFuZFNhdmVQYW5lbFNlcnZp
Y2UiKQotICAgICh4cGMtc2VydmljZS1uYW1lICJjb20uYXBwbGUuYXBwc3RvcmUuUGx1Z2luWFBD
U2VydmljZSIpIDsgPHJkYXI6Ly9wcm9ibGVtLzM1OTQwOTQ4PgotICAgICh4cGMtc2VydmljZS1u
YW1lICJjb20uYXBwbGUuYXVkaW8uU2FuZGJveEhlbHBlciIpCi0gICAgKHhwYy1zZXJ2aWNlLW5h
bWUgImNvbS5hcHBsZS5jb3JlbWVkaWEudmlkZW9kZWNvZGVyIikKLSAgICAoeHBjLXNlcnZpY2Ut
bmFtZSAiY29tLmFwcGxlLmNvcmVtZWRpYS52aWRlb2VuY29kZXIiKQotICAgICh4cGMtc2Vydmlj
ZS1uYW1lLXJlZ2V4ICMiXC5hcHBsZS1leHRlbnNpb24tc2VydmljZSQiKQotICAgICh4cGMtc2Vy
dmljZS1uYW1lICJjb20uYXBwbGUuaGlzZXJ2aWNlcy14cGNzZXJ2aWNlIikKLSkKLQotI2lmIFBM
QVRGT1JNKE1BQykKLTs7IDxyZGFyOi8vcHJvYmxlbS80NzI2ODE2Nj4KLShhbGxvdyBtYWNoLWxv
b2t1cCAoeHBjLXNlcnZpY2UtbmFtZSAiY29tLmFwcGxlLk1UTENvbXBpbGVyU2VydmljZSIpKQot
I2VuZGlmCi0KLTs7IFV0aWxpdHkgZnVuY3Rpb25zCi0oZGVmaW5lIChob21lLWxpdGVyYWwgaG9t
ZS1yZWxhdGl2ZS1saXRlcmFsKQotICAgIChsaXRlcmFsIChzdHJpbmctYXBwZW5kIChwYXJhbSAi
SE9NRV9ESVIiKSBob21lLXJlbGF0aXZlLWxpdGVyYWwpKSkKLQotKGRlZmluZSAoaG9tZS1saWJy
YXJ5LXJlZ2V4IGhvbWUtbGlicmFyeS1yZWxhdGl2ZS1yZWdleCkKLSAgICAocmVnZXggKHN0cmlu
Zy1hcHBlbmQgIl4iIChyZWdleC1xdW90ZSAocGFyYW0gIkhPTUVfTElCUkFSWV9ESVIiKSkgaG9t
ZS1saWJyYXJ5LXJlbGF0aXZlLXJlZ2V4KSkpCi0KLShkZWZpbmUgKGhvbWUtbGlicmFyeS1zdWJw
YXRoIGhvbWUtbGlicmFyeS1yZWxhdGl2ZS1zdWJwYXRoKQotICAgIChzdWJwYXRoIChzdHJpbmct
YXBwZW5kIChwYXJhbSAiSE9NRV9MSUJSQVJZX0RJUiIpIGhvbWUtbGlicmFyeS1yZWxhdGl2ZS1z
dWJwYXRoKSkpCi0KLShkZWZpbmUgKGhvbWUtbGlicmFyeS1saXRlcmFsIGhvbWUtbGlicmFyeS1y
ZWxhdGl2ZS1saXRlcmFsKQotICAgIChsaXRlcmFsIChzdHJpbmctYXBwZW5kIChwYXJhbSAiSE9N
RV9MSUJSQVJZX0RJUiIpIGhvbWUtbGlicmFyeS1yZWxhdGl2ZS1saXRlcmFsKSkpCi0KLShkZWZp
bmUgKGhvbWUtbGlicmFyeS1wcmVmZXJlbmNlcy1yZWdleCBob21lLWxpYnJhcnktcHJlZmVyZW5j
ZXMtcmVsYXRpdmUtcmVnZXgpCi0gICAgKHJlZ2V4IChzdHJpbmctYXBwZW5kICJeIiAocmVnZXgt
cXVvdGUgKHBhcmFtICJIT01FX0xJQlJBUllfUFJFRkVSRU5DRVNfRElSIikpIGhvbWUtbGlicmFy
eS1wcmVmZXJlbmNlcy1yZWxhdGl2ZS1yZWdleCkpKQotCi0oZGVmaW5lIChob21lLWxpYnJhcnkt
cHJlZmVyZW5jZXMtc3VicGF0aCBob21lLWxpYnJhcnktcHJlZmVyZW5jZXMtcmVsYXRpdmUtc3Vi
cGF0aCkKLSAgICAoc3VicGF0aCAoc3RyaW5nLWFwcGVuZCAocGFyYW0gIkhPTUVfTElCUkFSWV9Q
UkVGRVJFTkNFU19ESVIiKSBob21lLWxpYnJhcnktcHJlZmVyZW5jZXMtcmVsYXRpdmUtc3VicGF0
aCkpKQotCi0oZGVmaW5lIChob21lLWxpYnJhcnktcHJlZmVyZW5jZXMtbGl0ZXJhbCBob21lLWxp
YnJhcnktcHJlZmVyZW5jZXMtcmVsYXRpdmUtbGl0ZXJhbCkKLSAgICAobGl0ZXJhbCAoc3RyaW5n
LWFwcGVuZCAocGFyYW0gIkhPTUVfTElCUkFSWV9QUkVGRVJFTkNFU19ESVIiKSBob21lLWxpYnJh
cnktcHJlZmVyZW5jZXMtcmVsYXRpdmUtbGl0ZXJhbCkpKQotCi0oZGVmaW5lIChzaGFyZWQtcHJl
ZmVyZW5jZXMtcmVhZC13cml0ZSAuIGRvbWFpbnMpCi0gIChmb3ItZWFjaCAobGFtYmRhIChkb21h
aW4pCi0gICAgICAgICAgICAgIChiZWdpbgotICAgICAgICAgICAgICAgIChpZiAoZGVmaW5lZD8g
YHVzZXItcHJlZmVyZW5jZS13cml0ZSkKLSAgICAgICAgICAgICAgICAgICAgKGFsbG93IHVzZXIt
cHJlZmVyZW5jZS1yZWFkIHVzZXItcHJlZmVyZW5jZS13cml0ZSAocHJlZmVyZW5jZS1kb21haW4g
ZG9tYWluKSkpCi0gICAgICAgICAgICAgICAgOyAoVGVtcG9yYXJ5KSBiYWNrd2FyZCBjb21wYXRp
YmlsaXR5IHdpdGggbm9uLUNGUHJlZmVyZW5jZXMgcmVhZGVycyAvIHdyaXRlcnMuCi0gICAgICAg
ICAgICAgICAgKGFsbG93IGZpbGUtcmVhZCogZmlsZS13cml0ZSoKLSAgICAgICAgICAgICAgICAg
ICAgICAgKGxpdGVyYWwgKHN0cmluZy1hcHBlbmQgIi9MaWJyYXJ5L1ByZWZlcmVuY2VzLyIgZG9t
YWluICIucGxpc3QiKSkKLSAgICAgICAgICAgICAgICAgICAgICAgKGhvbWUtbGlicmFyeS1wcmVm
ZXJlbmNlcy1saXRlcmFsIChzdHJpbmctYXBwZW5kICIvIiBkb21haW4gIi5wbGlzdCIpKQotICAg
ICAgICAgICAgICAgICAgICAgICAoaG9tZS1saWJyYXJ5LXByZWZlcmVuY2VzLXJlZ2V4IChzdHJp
bmctYXBwZW5kICMiL0J5SG9zdC8iIChyZWdleC1xdW90ZSBkb21haW4pICMiXC4uKlwucGxpc3Qk
IikpKSkpCi0gICAgICAgICAgICBkb21haW5zKSkKLQotOzsgUmVtb3ZlIHdoZW4gPHJkYXI6Ly9w
cm9ibGVtLzI5NjQ2MDk0PiBpcyBmaXhlZC4KLShkZWZpbmUgKEhFWC1wYXR0ZXJuLW1hdGNoLWdl
bmVyYXRvciBwYXR0ZXJuLWRlc2NyaXB0b3IpCi0gICAgKGxldHJlYyAoKHBhdHRlcm4tc3RyaW5n
ICIiKSkKLSAgICAgICAgKGZvci1lYWNoICAobGFtYmRhIChyZXBlYXQtY291bnQpCi0gICAgICAg
ICAgICAoaWYgKHplcm8/IHJlcGVhdC1jb3VudCkKLSAgICAgICAgICAgICAgICAoc2V0ISBwYXR0
ZXJuLXN0cmluZyAoc3RyaW5nLWFwcGVuZCAgcGF0dGVybi1zdHJpbmcgIi0iKSkKLSAgICAgICAg
ICAgICAgICAobGV0IGFwcGVuZGVyICgoY291bnQgcmVwZWF0LWNvdW50KSkKLSAgICAgICAgICAg
ICAgICAgICAgKGlmICg+IGNvdW50IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAoYmVnaW4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0ISBwYXR0ZXJuLXN0cmluZyAoc3RyaW5n
LWFwcGVuZCAgcGF0dGVybi1zdHJpbmcgIlswLTlBLUZdIikpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGFwcGVuZGVyICgtIGNvdW50IDEpKSkpKSkpCi0gICAgICAgICAgICBwYXR0ZXJu
LWRlc2NyaXB0b3IpCi0gICAgcGF0dGVybi1zdHJpbmcpKQotCi07OyByZXR1cm4gYSByZWdleCBw
YXR0ZXJuIG1hdGNoaW5nIHN0cmluZyBmb3IgOC00LTQtNC0xMiBVVUlEczoKLShkZWZpbmUgKHV1
aWQtSEVYLXBhdHRlcm4tbWF0Y2gtc3RyaW5nKQotICAgIChIRVgtcGF0dGVybi1tYXRjaC1nZW5l
cmF0b3IgJyg4IDAgNCAwIDQgMCA0IDAgMTIpKSkKLQotOzsgZ2xvYmFsIHRvIGhvbGQgdGhlIGNv
bXB1dGVkIFVVSUQgbWF0Y2hpbmcgcGF0dGVybi4KLShkZWZpbmUgKnV1aWQtcGF0dGVybiogIiIp
Ci0KLShkZWZpbmUgKHV1aWQtcmVnZXgtc3RyaW5nKQotICAgIChpZiAoemVybz8gKHN0cmluZy1s
ZW5ndGggKnV1aWQtcGF0dGVybiopKQotICAgICAgICAoc2V0ISAqdXVpZC1wYXR0ZXJuKiAodXVp
ZC1IRVgtcGF0dGVybi1tYXRjaC1zdHJpbmcpKSkKLSAgICAqdXVpZC1wYXR0ZXJuKikKLQotKGRl
ZmluZSAoYWxsb3ctcmVhZC13cml0ZS1kaXJlY3RvcnktYW5kLWlzc3VlLXJlYWQtd3JpdGUtZXh0
ZW5zaW9ucyBwYXRoKQotICAgIChpZiBwYXRoCi0gICAgICAgIChiZWdpbgotICAgICAgICAgICAg
KGFsbG93IGZpbGUtcmVhZCogZmlsZS13cml0ZSogKHN1YnBhdGggcGF0aCkpCi0gICAgICAgICAg
ICAoYWxsb3cgZmlsZS1pc3N1ZS1leHRlbnNpb24gKHJlcXVpcmUtYWxsIChleHRlbnNpb24tY2xh
c3MgImNvbS5hcHBsZS5hcHAtc2FuZGJveC5yZWFkIikgKHN1YnBhdGggcGF0aCkpKQotICAgICAg
ICAgICAgKGFsbG93IGZpbGUtaXNzdWUtZXh0ZW5zaW9uIChyZXF1aXJlLWFsbCAoZXh0ZW5zaW9u
LWNsYXNzICJjb20uYXBwbGUuYXBwLXNhbmRib3gucmVhZC13cml0ZSIpIChzdWJwYXRoIHBhdGgp
KSkpKSkKLQotOzsgV2ViS2l0MiBzYW5kYm94IGxhdW5jaGVyIG5lZWRzIHRvIGRlZmluZSBhbiBf
T1NfVkVSU0lPTiBwYXJhbWV0ZXIKLTs7IFRoaXMgcGFyYW1ldGVyIGlzIHRoZSBtYWpvciBPUyBW
ZXJzaW9uIG51bWJlci4KLShpZiAobm90IChkZWZpbmVkPyAnb3MtdmVyc2lvbikpCi0gICAgKGRl
ZmluZSBvcy12ZXJzaW9uIChwYXJhbSAiX09TX1ZFUlNJT04iKSkpCi0KLShzeXN0ZW0tZ3JhcGhp
Y3MpCi0KLTs7IFJlYWQtb25seSBwcmVmZXJlbmNlcwotKHNoYXJlZC1wcmVmZXJlbmNlcy1yZWFk
Ci0gICAgIi5HbG9iYWxQcmVmZXJlbmNlcyIKLSAgICAiY29tLmFwcGxlLkFUUyIKLSAgICAiY29t
LmFwcGxlLkFjY2Vzc2liaWxpdHkiCi0gICAgImNvbS5hcHBsZS5CbHVldG9vdGgiCi0gICAgImNv
bS5hcHBsZS5Db3JlR3JhcGhpY3MiCi0gICAgImNvbS5hcHBsZS5ISVRvb2xib3giCi0gICAgImNv
bS5hcHBsZS5RdWlja1RpbWUiCi0gICAgImNvbS5hcHBsZS5kcml2ZXIuQXBwbGVCbHVldG9vdGhN
dWx0aXRvdWNoLm1vdXNlIgotICAgICJjb20uYXBwbGUuZHJpdmVyLkFwcGxlQmx1ZXRvb3RoTXVs
dGl0b3VjaC50cmFja3BhZCIKLSAgICAiY29tLmFwcGxlLmRyaXZlci5BcHBsZUhJRE1vdXNlIgot
ICAgICJjb20uYXBwbGUuaW5wdXRtZXRob2RraXQiCi0gICAgImNvbS5hcHBsZS5pV29yay5QYWdl
cyIKLSAgICAiY29tLmFwcGxlLkxhdW5jaFNlcnZpY2VzIgotICAgICJjb20uYXBwbGUuTXVsdGl0
b3VjaFN1cHBvcnQiCi0gICAgImNvbS5hcHBsZS5zZWN1cml0eSIKLSAgICAiY29tLmFwcGxlLnNl
Y3VyaXR5LnJldm9jYXRpb24iCi0gICAgImNvbS5hcHBsZS5zZWN1cml0eV9jb21tb24iCi0gICAg
ImNvbS5hcHBsZS5zcGVlY2gudm9pY2UucHJlZnMiCi0gICAgImNvbS5hcHBsZS5zcGVlY2guc3lu
dGhlc2lzLmdlbmVyYWwucHJlZnMiCi0gICAgImNvbS5hcHBsZS5zcGVlY2gucmVjb2duaXRpb24u
QXBwbGVTcGVlY2hSZWNvZ25pdGlvbi5wcmVmcyIKLSAgICAiY29tLmFwcGxlLnN5c3RlbXNvdW5k
IgotICAgICJjb20uYXBwbGUudW5pdmVyc2FsYWNjZXNzIgotICAgICJjb20uYXBwbGUuV2ViRm91
bmRhdGlvbiIKLSAgICAiY29tLmFwcGxlLldlYktpdC5QbHVnaW5Qcm9jZXNzIgotICAgICJwYnMi
Ci0gICAgImNvbS5hcHBsZS5TZXJ2aWNlc01lbnUuU2VydmljZXMiKQotCi07OyBSZWFkLW9ubHkg
ZGF0YQotKGFsbG93IGZpbGUtcmVhZCoKLSAgICAobGl0ZXJhbCAiLyIpCi0gICAgKGxpdGVyYWwg
Ii9wcml2YXRlL2V0Yy9ob3N0cyIpCi0gICAgKGxpdGVyYWwgIi9wcml2YXRlL2V0Yy9wcm90b2Nv
bHMiKQotICAgIChsaXRlcmFsICIvcHJpdmF0ZS9ldGMvc2VydmljZXMiKQotICAgIChsaXRlcmFs
ICIvcHJpdmF0ZS9ldGMvcmVzb2x2LmNvbmYiKQotICAgIChsaXRlcmFsICIvcHJpdmF0ZS92YXIv
cnVuL3Jlc29sdi5jb25mIikKLQotICAgIChzdWJwYXRoICIvTGlicmFyeS9GcmFtZXdvcmtzIikK
LSAgICAoc3VicGF0aCAiL0xpYnJhcnkvTWFuYWdlZCBQcmVmZXJlbmNlcyIpCi0gICAgKHN1YnBh
dGggIi9wcml2YXRlL3Zhci9kYi9tZHMiKQotCi0gICAgKHJlZ2V4ICMiXi9MaWJyYXJ5L1ByZWZl
cmVuY2VzL2NvbVwuYXBwbGVcLnNlY3VyaXR5IikKLSAgICAoaG9tZS1saXRlcmFsICIvLkNGVXNl
clRleHRFbmNvZGluZyIpCi0gICAgKGhvbWUtbGlicmFyeS1zdWJwYXRoICIvQXVkaW8iKQotICAg
IChob21lLWxpYnJhcnktc3VicGF0aCAiL0NvbG9yUGlja2VycyIpCi0gICAgKGhvbWUtbGlicmFy
eS1zdWJwYXRoICIvQ29sb3JTeW5jIikKLSAgICAoc3VicGF0aCAiL0xpYnJhcnkvQ29tcG9uZW50
cyIpCi0gICAgKGhvbWUtbGlicmFyeS1zdWJwYXRoICIvQ29tcG9uZW50cyIpCi0gICAgKHN1YnBh
dGggIi9MaWJyYXJ5L0NvbnRleHR1YWwgTWVudSBJdGVtcyIpCi0gICAgKHN1YnBhdGggIi9MaWJy
YXJ5L0lucHV0IE1ldGhvZHMiKQotICAgIChob21lLWxpYnJhcnktc3VicGF0aCAiL0lucHV0IE1l
dGhvZHMiKQotICAgIChzdWJwYXRoICIvTGlicmFyeS9JbnB1dE1hbmFnZXJzIikKLSAgICAoaG9t
ZS1saWJyYXJ5LXN1YnBhdGggIi9JbnB1dE1hbmFnZXJzIikKLSAgICAoaG9tZS1saWJyYXJ5LXN1
YnBhdGggIi9LZXlCaW5kaW5ncyIpCi0gICAgKHN1YnBhdGggIi9MaWJyYXJ5L0tleWJvYXJkIExh
eW91dHMiKQotICAgIChob21lLWxpYnJhcnktc3VicGF0aCAiL0tleWJvYXJkIExheW91dHMiKQot
ICAgIChzdWJwYXRoICIvTGlicmFyeS9Gb250cyIpCi0gICAgKGhvbWUtbGlicmFyeS1zdWJwYXRo
ICIvRm9udHMiKQotICAgIChzdWJwYXRoICIvTGlicmFyeS9TcGVsbGluZyIpCi0gICAgKGhvbWUt
bGlicmFyeS1zdWJwYXRoICIvU3BlbGxpbmciKQotICAgIChzdWJwYXRoICIvTGlicmFyeS9QREYg
U2VydmljZXMiKQotICAgIChob21lLWxpYnJhcnktc3VicGF0aCAiL1BERiBTZXJ2aWNlcyIpCi0g
ICAgKGhvbWUtbGlicmFyeS1wcmVmZXJlbmNlcy1saXRlcmFsICIvUXVpY2tUaW1lIFByZWZlcmVu
Y2VzIikKLQotICAgIChob21lLWxpYnJhcnktbGl0ZXJhbCAiL0NhY2hlcy9jb20uYXBwbGUuY29y
ZWF1ZGlvLmNvbXBvbmVudHMucGxpc3QiKQotCi0gICAgKHN1YnBhdGggIi9MaWJyYXJ5L0F1ZGlv
L1NvdW5kcyIpCi0gICAgKHN1YnBhdGggIi9MaWJyYXJ5L0F1ZGlvL1BsdWctSW5zL0NvbXBvbmVu
dHMiKQotICAgIChob21lLWxpYnJhcnktc3VicGF0aCAiL0F1ZGlvL1BsdWctSW5zL0NvbXBvbmVu
dHMiKQotICAgIChzdWJwYXRoICIvTGlicmFyeS9BdWRpby9QbHVnLUlucy9IQUwiKQotICAgIChz
dWJwYXRoICIvTGlicmFyeS9Db3JlTWVkaWFJTy9QbHVnLUlucy9EQUwiKQotICAgIChzdWJwYXRo
ICIvTGlicmFyeS9RdWlja1RpbWUiKQotICAgIChob21lLWxpYnJhcnktc3VicGF0aCAiL1F1aWNr
VGltZSIpCi0gICAgKHN1YnBhdGggIi9MaWJyYXJ5L1ZpZGVvL1BsdWctSW5zIikKLSAgICAoaG9t
ZS1saWJyYXJ5LXN1YnBhdGggIi9DYWNoZXMvUXVpY2tUaW1lIikKLQotICAgIChob21lLWxpYnJh
cnktbGl0ZXJhbCAiL0FwcGxpY2F0aW9uIFN1cHBvcnQvU3luY1NlcnZpY2VzL0xvY2FsL0NsaWVu
dHNXaXRoQ2hhbmdlcy9jb20uYXBwbGUuS2V5Y2hhaW4iKQotCi0gICAgKHN1YnBhdGggIi9MaWJy
YXJ5L0NvbG9yU3luYyIpCi0KLSAgICAoaG9tZS1saXRlcmFsICIvTGlicmFyeS9QcmVmZXJlbmNl
cy9jb20uYXBwbGUubG9va3VwLnNoYXJlZC5wbGlzdCIpKQotCi07OyBTZWN1cml0eSBmcmFtZXdv
cmsKLShhbGxvdyBtYWNoLWxvb2t1cCAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5vY3NwZCIpKQot
KGFsbG93IGZpbGUtcmVhZCoKLSAgICAgICAoc3VicGF0aCAiL3ByaXZhdGUvdmFyL2RiL21kcyIp
Ci0gICAgICAgKGxpdGVyYWwgIi9wcml2YXRlL3Zhci9kYi9EZXRhY2hlZFNpZ25hdHVyZXMiKSkK
LShhbGxvdyBpcGMtcG9zaXgtc2htLXJlYWQqIGlwYy1wb3NpeC1zaG0td3JpdGUtZGF0YQotICAg
ICAgIChpcGMtcG9zaXgtbmFtZSAiY29tLmFwcGxlLkFwcGxlRGF0YWJhc2VDaGFuZ2VkIikpCi0K
LTs7IFJlYWQtd3JpdGUgcHJlZmVyZW5jZXMgYW5kIGRhdGEKLShhbGxvdyBzeXN0ZW0tZnNjdGwg
KGZzY3RsLWNvbW1hbmQgKF9JTyAiaCIgNDcpKSkKLQotOzsgSU9LaXQgdXNlciBjbGllbnRzCi0o
YWxsb3cgaW9raXQtb3BlbgotICAgIChpb2tpdC11c2VyLWNsaWVudC1jbGFzcyAiSU9BdWRpb0Nv
bnRyb2xVc2VyQ2xpZW50IikKLSAgICAoaW9raXQtdXNlci1jbGllbnQtY2xhc3MgIklPQXVkaW9F
bmdpbmVVc2VyQ2xpZW50IikKLSAgICAoaW9raXQtdXNlci1jbGllbnQtY2xhc3MgIklPSElEUGFy
YW1Vc2VyQ2xpZW50IikKLSAgICAoaW9raXQtdXNlci1jbGllbnQtY2xhc3MgIlJvb3REb21haW5V
c2VyQ2xpZW50IikpCi0KLTs7IFZhcmlvdXMgc2VydmljZXMgcmVxdWlyZWQgYnkgQXBwS2l0IGFu
ZCBvdGhlciBmcmFtZXdvcmtzCi0oYWxsb3cgbWFjaC1sb29rdXAKLSAgICAoZ2xvYmFsLW5hbWUg
ImNvbS5hcHBsZS5hdWRpby5BdWRpb0NvbXBvbmVudFJlZ2lzdHJhciIpCi0gICAgKGdsb2JhbC1u
YW1lICJjb20uYXBwbGUuYXNzZXJ0aW9uZC5wcm9jZXNzYXNzZXJ0aW9uY29ubmVjdGlvbiIpCi0g
ICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuQ29yZVNlcnZpY2VzLmNvcmVzZXJ2aWNlc2QiKQot
ICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLkRpc2tBcmJpdHJhdGlvbi5kaXNrYXJiaXRyYXRp
b25kIikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5GaWxlQ29vcmRpbmF0aW9uIikKLSAg
ICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5Gb250T2JqZWN0c1NlcnZlciIpCi0gICAgKGdsb2Jh
bC1uYW1lICJjb20uYXBwbGUuSW1hZ2VDYXB0dXJlRXh0ZW5zaW9uMi5wcmVzZW5jZSIpCi0gICAg
KGdsb2JhbC1uYW1lICJjb20uYXBwbGUuUG93ZXJNYW5hZ2VtZW50LmNvbnRyb2wiKQotICAgIChn
bG9iYWwtbmFtZSAiY29tLmFwcGxlLlNlY3VyaXR5U2VydmVyIikKLSAgICAoZ2xvYmFsLW5hbWUg
ImNvbS5hcHBsZS5TeXN0ZW1Db25maWd1cmF0aW9uLlBQUENvbnRyb2xsZXIiKQotICAgIChnbG9i
YWwtbmFtZSAiY29tLmFwcGxlLlN5c3RlbUNvbmZpZ3VyYXRpb24uY29uZmlnZCIpCi0gICAgKGds
b2JhbC1uYW1lICJjb20uYXBwbGUuVU5DVXNlck5vdGlmaWNhdGlvbiIpCi0gICAgKGdsb2JhbC1u
YW1lICJjb20uYXBwbGUuYW5hbHl0aWNzZCIpCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUu
YXVkaW8uYXVkaW9oYWxkIikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5hdWRpby5jb3Jl
YXVkaW9kIikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5jZm5ldHdvcmsuQXV0aEJyb2tl
ckFnZW50IikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5jbWlvLlZEQ0Fzc2lzdGFudCIp
Ci0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuY29va2llZCIpIDs7IEZJWE1FOiA8cmRhcjov
L3Byb2JsZW0vMTA3OTA3Njg+IExpbWl0IGFjY2VzcyB0byBjb29raWVzLgotICAgIChnbG9iYWwt
bmFtZSAiY29tLmFwcGxlLmNvcmVzZXJ2aWNlcy5sYXVuY2hzZXJ2aWNlc2QiKQotICAgIChnbG9i
YWwtbmFtZSAiY29tLmFwcGxlLmZvbnRzIikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5s
c2QubWFwZGIiKQotICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLm9jc3BkIikKLSAgICAoZ2xv
YmFsLW5hbWUgImNvbS5hcHBsZS5wYXN0ZWJvYXJkLjEiKQotICAgIChnbG9iYWwtbmFtZSAiY29t
LmFwcGxlLnBicy5mZXRjaF9zZXJ2aWNlcyIpCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUu
dGNjZCIpCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUudGNjZC5zeXN0ZW0iKQotICAgIChn
bG9iYWwtbmFtZSAiY29tLmFwcGxlLnRzbS51aXNlcnZlciIpCi0gICAgKGdsb2JhbC1uYW1lICJj
b20uYXBwbGUud2luZG93X3Byb3hpZXMiKQotICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLndp
bmRvd3NlcnZlci5hY3RpdmUiKQotICAgIChsb2NhbC1uYW1lICJjb20uYXBwbGUudHNtLnBvcnRu
YW1lIikKLSAgICAoZ2xvYmFsLW5hbWUtcmVnZXggIyJfT3BlblN0ZXAkIikpCi0KLTs7IENvbmZp
Z3VyYXRpb24gZGlyZWN0b3JpZXMKLShhbGxvdyBmaWxlLXJlYWQqIChzdWJwYXRoIChwYXJhbSAi
UExVR0lOX1BBVEgiKSkpCi0oYWxsb3cgZmlsZS1yZWFkKiAoc3VicGF0aCAocGFyYW0gIldFQktJ
VDJfRlJBTUVXT1JLX0RJUiIpKSkKLShpZiAocG9zaXRpdmU/IChzdHJpbmctbGVuZ3RoIChwYXJh
bSAiREFSV0lOX1VTRVJfQ0FDSEVfRElSIikpKQotICAgIChhbGxvdy1yZWFkLXdyaXRlLWRpcmVj
dG9yeS1hbmQtaXNzdWUtcmVhZC13cml0ZS1leHRlbnNpb25zIChwYXJhbSAiREFSV0lOX1VTRVJf
Q0FDSEVfRElSIikpKQotKGlmIChwb3NpdGl2ZT8gKHN0cmluZy1sZW5ndGggKHBhcmFtICJEQVJX
SU5fVVNFUl9URU1QX0RJUiIpKSkKLSAgICAoYWxsb3ctcmVhZC13cml0ZS1kaXJlY3RvcnktYW5k
LWlzc3VlLXJlYWQtd3JpdGUtZXh0ZW5zaW9ucyAocGFyYW0gIkRBUldJTl9VU0VSX1RFTVBfRElS
IikpKQotKGlmIChwb3NpdGl2ZT8gKHN0cmluZy1sZW5ndGggKHBhcmFtICJOU1VSTF9DQUNIRV9E
SVIiKSkpCi0gICAgKGFsbG93LXJlYWQtd3JpdGUtZGlyZWN0b3J5LWFuZC1pc3N1ZS1yZWFkLXdy
aXRlLWV4dGVuc2lvbnMgKHBhcmFtICJOU1VSTF9DQUNIRV9ESVIiKSkpCi0KLTs7IEFsbG93IHRo
ZSBPcGVuR0wgUHJvZmlsZXIgdG8gYXR0YWNoLgotKGlmIChkZWZpbmVkPyAnbWFjaC1yZWdpc3Rl
cikKLSAgICAoYWxsb3cgbWFjaC1yZWdpc3RlciAoZ2xvYmFsLW5hbWUtcmVnZXggIyJeX29nbHBy
b2ZfYXR0YWNoXzxbMC05XSs+JCIpKSkKLQotKHN5c3RlbS1uZXR3b3JrKQotCi0oYWxsb3cgbmV0
d29yay1vdXRib3VuZAotICAgIDs7IExvY2FsIG1ETlNSZXNwb25kZXIgZm9yIEROUywgYXJiaXRy
YXJ5IG91dGJvdW5kIFRDUCBhbmQgVURQCi0gICAgKGxpdGVyYWwgIi9wcml2YXRlL3Zhci9ydW4v
bUROU1Jlc3BvbmRlciIpCi0gICAgKHJlbW90ZSB0Y3ApCi0gICAgKHJlbW90ZSB1ZHApKQotKGFs
bG93IG5ldHdvcmstaW5ib3VuZAotICAgIChsb2NhbCB1ZHApKQotCi07OyBPcGVuIGFuZCBTYXZl
IHBhbmVscwotKGRlZmluZSAod2Via2l0LXBvd2VyYm94KQotICAgIChhbGxvdyBmaWxlLXJlYWQq
IChsaXRlcmFsICIvTGlicmFyeS9QcmVmZXJlbmNlcy9jb20uYXBwbGUuVmlld0JyaWRnZS5wbGlz
dCIpKQotICAgIChhbGxvdyBmaWxlLXJlYWQqIGZpbGUtd3JpdGUqIChleHRlbnNpb24gImNvbS5h
cHBsZS5hcHAtc2FuZGJveC5yZWFkLXdyaXRlIikpCi0gICAgKGFsbG93IGZpbGUtaXNzdWUtZXh0
ZW5zaW9uCi0gICAgICAgIChyZXF1aXJlLWFsbAotICAgICAgICAgICAgKGV4dGVuc2lvbi1jbGFz
cyAiY29tLmFwcGxlLmFwcC1zYW5kYm94LnJlYWQiKQotICAgICAgICAgICAgKGV4dGVuc2lvbiAi
Y29tLmFwcGxlLmFwcC1zYW5kYm94LnJlYWQtd3JpdGUiKSkKLSAgICAgICAgKHJlcXVpcmUtYWxs
Ci0gICAgICAgICAgICAoZXh0ZW5zaW9uLWNsYXNzICJjb20uYXBwbGUuYXBwLXNhbmRib3gucmVh
ZC13cml0ZSIpCi0gICAgICAgICAgICAoZXh0ZW5zaW9uICJjb20uYXBwbGUuYXBwLXNhbmRib3gu
cmVhZC13cml0ZSIpKSkpCi0KLTs7IFByaW50aW5nCi0oZGVmaW5lICh3ZWJraXQtcHJpbnRpbmcp
Ci0gICAgKGlmIChkZWZpbmVkPyAnYXV0aG9yaXphdGlvbi1yaWdodC1vYnRhaW4pCi0gICAgICAg
IChhbGxvdyBhdXRob3JpemF0aW9uLXJpZ2h0LW9idGFpbgotICAgICAgICAgICAgICAgKHJpZ2h0
LW5hbWUgInN5c3RlbS5wcmludC5vcGVyYXRvciIpCi0gICAgICAgICAgICAgICAocmlnaHQtbmFt
ZSAic3lzdGVtLnByaW50aW5nbWFuYWdlciIpKSkKLSAgICAoaWYgKGRlZmluZWQ/ICdtYWNoLXJl
Z2lzdGVyKQotICAgICAgICAoZGVueSBtYWNoLXJlZ2lzdGVyICh3aXRoIG5vLWxvZykKLSAgICAg
ICAgICAgICAgIChnbG9iYWwtbmFtZS1yZWdleCAjIl5jb21cLmFwcGxlXC5JQ0EtWzAtOV0rJCIp
KSkKLSAgICAoaWYgKGRlZmluZWQ/ICdtYWNoLXRhc2stbmFtZSkKLSAgICAgICAgKGFsbG93IG1h
Y2gtdGFzay1uYW1lKSkKLSAgICAoYWxsb3cgbmV0d29yay1vdXRib3VuZCAobGl0ZXJhbCAiL3By
aXZhdGUvdmFyL3J1bi9jdXBzZCIpKQotICAgIChhbGxvdyBtYWNoLWxvb2t1cAotICAgICAgICAo
Z2xvYmFsLW5hbWUgImNvbS5hcHBsZS5wcmludHVpdG9vbC5hZ2VudCIpCi0gICAgICAgIChnbG9i
YWwtbmFtZSAiY29tLmFwcGxlLnByaW50dG9vbC5hZ2VudCIpCi0gICAgICAgIChnbG9iYWwtbmFt
ZSAiY29tLmFwcGxlLnByaW50dG9vbC5kYWVtb24iKSkKLSAgICAoYWxsb3cgZmlsZS1yZWFkKgot
ICAgICAgICAoc3VicGF0aCAiL0xpYnJhcnkvUHJpbnRlcnMiKQotICAgICAgICAoaG9tZS1saXRl
cmFsICIvLmN1cHMvbHBvcHRpb25zIikKLSAgICAgICAgKGhvbWUtbGl0ZXJhbCAiLy5jdXBzL2Ns
aWVudC5jb25mIikKLSAgICAgICAgKGxpdGVyYWwgIi9wcml2YXRlL2V0Yy9jdXBzL2NsaWVudC5j
b25mIikKLSAgICAgICAgKGxpdGVyYWwgIi9wcml2YXRlL2V0Yy9jdXBzL2xwb3B0aW9ucyIpCi0g
ICAgICAgIChzdWJwYXRoICIvcHJpdmF0ZS9ldGMvY3Vwcy9wcGQiKQotICAgICAgICAobGl0ZXJh
bCAiL3ByaXZhdGUvdmFyL3J1bi9jdXBzZCIpKQotICAgIChzaGFyZWQtcHJlZmVyZW5jZXMtcmVh
ZCAib3JnLmN1cHMuUHJpbnRpbmdQcmVmcyIpKQotCi07OyBUZXh0IFNlcnZpY2VzIE1hbmFnZXIK
LSh3aXRoLWZpbHRlciAoaW9raXQtcmVnaXN0cnktZW50cnktY2xhc3MgIklPSElERXZlbnREcml2
ZXIiKQotICAgIChhbGxvdyBpb2tpdC1zZXQtcHJvcGVydGllcyAoaW9raXQtcHJvcGVydHkgIkNh
cHNMb2NrRGVsYXlPdmVycmlkZSIpKSkKLQotOzsgSW1hZ2UgQ2FwdHVyZQotKGRlZmluZSAod2Vi
a2l0LWltYWdlY2FwdHVyZSkKLSAgICAoYWxsb3cgYXBwbGVldmVudC1zZW5kIChhcHBsZWV2ZW50
LWRlc3RpbmF0aW9uICJjb20uYXBwbGUuaW1hZ2VjYXB0dXJlZXh0ZW5zaW9uMiIpKSkKLQotOzsg
Q2FtZXJhCi0oZGVmaW5lICh3ZWJraXQtY2FtZXJhKQotICAgIChzaGFyZWQtcHJlZmVyZW5jZXMt
cmVhZCAiY29tLmFwcGxlLmNvcmVtZWRpYSIpCi0gICAgKGFsbG93IG1hY2gtbG9va3VwIChleHRl
bnNpb24gImNvbS5hcHBsZS5hcHAtc2FuZGJveC5tYWNoIikpCi0gICAgKGFsbG93IG1hY2gtbG9v
a3VwCi0gICAgICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLmNtaW8uQXBwbGVDYW1lcmFBc3Np
c3RhbnQiKQotICAgICAgICA7OyBBcHBsZSBEQUwgYXNzaXN0YW50cwotICAgICAgICAoZ2xvYmFs
LW5hbWUgImNvbS5hcHBsZS5jbWlvLlZEQ0Fzc2lzdGFudCIpCi0gICAgICAgIChnbG9iYWwtbmFt
ZSAiY29tLmFwcGxlLmNtaW8uQVZDQXNzaXN0YW50IikKLSAgICAgICAgKGdsb2JhbC1uYW1lICJj
b20uYXBwbGUuY21pby5JSURDVmlkZW9Bc3Npc3RhbnQiKQotICAgICAgICA7OyBRdWlja1RpbWVJ
SURDRGlnaXRpemVyIGFzc2lzdGFudAotICAgICAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5J
SURDQXNzaXN0YW50IikpCi0gICAgKGFsbG93IGlva2l0LW9wZW4KLSAgICAgICAgOzsgUXVpY2tU
aW1lVVNCVkRDRGlnaXRpemVyCi0gICAgICAgIChpb2tpdC11c2VyLWNsaWVudC1jbGFzcyAiSU9V
U0JEZXZpY2VVc2VyQ2xpZW50VjIiKQotICAgICAgICAoaW9raXQtdXNlci1jbGllbnQtY2xhc3Mg
IklPVVNCSW50ZXJmYWNlVXNlckNsaWVudFYyIikpCi0gICAgKGFsbG93IGRldmljZS1jYW1lcmEp
KQotCi07OyBNaWNyb3Bob25lCi0oZGVmaW5lICh3ZWJraXQtbWljcm9waG9uZSkKLSAgICAoYWxs
b3cgZGV2aWNlLW1pY3JvcGhvbmUpKQotCi0oYWxsb3cgaXBjLXBvc2l4LXNobSoKLSAgICAoaXBj
LXBvc2l4LW5hbWUtcmVnZXggIyJeQXVkaW9JTyIpCi0gICAgKGlwYy1wb3NpeC1uYW1lLXJlZ2V4
ICMiXkNGUEJTOiIpCi0gICAgKGlwYy1wb3NpeC1uYW1lLXJlZ2V4ICMiXmNvbVwuYXBwbGVcLmNz
XC4iKQotICAgIChpcGMtcG9zaXgtbmFtZS1yZWdleCAjIl5sc1wuIikpCi0oYWxsb3cgaXBjLXBv
c2l4LXNobS1yZWFkKgotICAgIChpcGMtcG9zaXgtbmFtZS1yZWdleCAjIl4vdG1wL2NvbVwuYXBw
bGVcLmNzc2VlZFwuIikKLSAgICAoaXBjLXBvc2l4LW5hbWUgIkZOZXR3b3JrLmRlZmF1bHRTdG9y
YWdlU2Vzc2lvbiIpCi0gICAgKGlwYy1wb3NpeC1uYW1lICJhcHBsZS5zaG0ubm90aWZpY2F0aW9u
X2NlbnRlciIpKQotCi07OyBTaWxlbnRseSBibG9jayBhY2Nlc3MgdG8gc29tZSByZXNvdXJjZXMK
LShkZW55IGZpbGUtcmVhZCogZmlsZS13cml0ZSogKHdpdGggbm8tbG9nKQotICAgIChzdWJwYXRo
ICIvTmV0d29yay9MaWJyYXJ5IikKLSAgICAoc3VicGF0aCAiL05ldHdvcmsvQXBwbGljYXRpb25z
IikKLSAgICAoaG9tZS1saWJyYXJ5LXByZWZlcmVuY2VzLXJlZ2V4ICMiL2NvbVwuYXBwbGVcLmlu
dGVybmV0Y29uZmlnKHByaXYpP1wucGxpc3QiKQotCi0gICAgOzsgRklYTUU6IFNob3VsZCBiZSBy
ZW1vdmVkIGFmdGVyIDxyZGFyOi8vcHJvYmxlbS8xMDQ2Mzg4MT4gaXMgZml4ZWQuCi0gICAgKGhv
bWUtbGlicmFyeS1wcmVmZXJlbmNlcy1saXRlcmFsICIvY29tLmFwcGxlLkxhdW5jaFNlcnZpY2Vz
LlF1YXJhbnRpbmVFdmVudHNWMiIpCi0gICAgKGhvbWUtbGlicmFyeS1wcmVmZXJlbmNlcy1saXRl
cmFsICIvY29tLmFwcGxlLkxhdW5jaFNlcnZpY2VzLlF1YXJhbnRpbmVFdmVudHNWMi1qb3VybmFs
IikpCi0KLShkZW55IG1hY2gtbG9va3VwICh3aXRoIG5vLWxvZykKLSAgICAoZ2xvYmFsLW5hbWUg
ImNvbS5hcHBsZS5GU0V2ZW50cyIpCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuY29yZXNl
cnZpY2VzLmFwcGxlZXZlbnRzIikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5kb2NrLnNl
cnZlciIpCi0gICAgKGdsb2JhbC1uYW1lLXJlZ2V4ICMiXmNvbVwuYXBwbGVcLmRpc3RyaWJ1dGVk
X25vdGlmaWNhdGlvbnMiKSkKLQotOzsgVGhlIGJlbG93IHJ1bGVzIGFyZSBpbnNlcnRlZCBhdCB0
aGUgZW5kIG9mIHNhbmRib3ggcHJvZmlsZSBjb21waWxhdGlvbiBieSBvdmVycmlkaW5nIHRoZSBm
aW5hbGl6ZXIuCi07OyBUaGUgaW5pdGlhbCB2YWx1ZSBvZiAlZmluYWxpemUgbXVzdCBiZSB0aGUg
bGFzdCBmdW5jdGlvbiBjYWxsZWQuCi0obGV0cmVjCi0gICAoKG9yaWdpbmFsLSVmaW5hbGl6ZSAl
ZmluYWxpemUpCi0gICAgKHdlYmtpdC0lZmluYWxpemUKLSAgICAgICAgKGxhbWJkYSAoKQotICAg
ICAgICAgICAgKGlmIChub3QgKGRlZmluZWQ/ICdhbGxvdy1zeW1saW5rcykpCi0gICAgICAgICAg
ICAgICAgKGlmIChkZWZpbmVkPyAndm5vZGUtdHlwZSkKLSAgICAgICAgICAgICAgICAgICAgKGRl
bnkgZmlsZS13cml0ZS1jcmVhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICh2bm9kZS10eXBl
IFNZTUxJTkspKSkpCi0gICAgICAgICAgICA7OyBSZXNlcnZlIGEgbmFtZXNwYWNlIGZvciBhZGRp
dGlvbmFsIHByb3RlY3RlZCBleHRlbmRlZCBhdHRyaWJ1dGVzLgotICAgICAgICAgICAgKGRlbnkg
ZmlsZS1yZWFkLXhhdHRyIGZpbGUtd3JpdGUteGF0dHIgKHhhdHRyICMiXmNvbVwuYXBwbGVcLnNl
Y3VyaXR5XC5wcml2YXRlXC4iKSkKLSAgICAgICAgICAgIDs7IEZJWE1FOiBTaG91bGQgYmUgcmVt
b3ZlZCBvbmNlIDxyZGFyOi8vcHJvYmxlbS8xNjMyOTA4Nz4gaXMgZml4ZWQuCi0gICAgICAgICAg
ICAoaWYgKGRlZmluZWQ/ICd4YXR0ci1yZWdleCkKLSAgICAgICAgICAgICAgICAoZGVueSBmaWxl
LXJlYWQteGF0dHIgZmlsZS13cml0ZS14YXR0ciAoeGF0dHItcmVnZXggIyJeY29tXC5hcHBsZVwu
c2VjdXJpdHlcLnByaXZhdGVcLiIpKQotICAgICAgICAgICAgICAgIChkZW55IGZpbGUtcmVhZC14
YXR0ciBmaWxlLXdyaXRlLXhhdHRyICh4YXR0ciAjIl5jb21cLmFwcGxlXC5zZWN1cml0eVwucHJp
dmF0ZVwuIikpKQotICAgICAgICAgICAgKG9yaWdpbmFsLSVmaW5hbGl6ZSkpKSkKLSAgIChzZXQh
ICVmaW5hbGl6ZSB3ZWJraXQtJWZpbmFsaXplKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
UmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jbi5taWNyb2RvbmUuY21iLnNhZmFyaS5z
YiBiL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jbi5taWNy
b2RvbmUuY21iLnNhZmFyaS5zYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBhNzFj
Zjc1ZThiOGE5ODc0ODI1N2ViYzRiMzExNjk1ZWNjMTMxZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5T
YW5kYm94UHJvZmlsZXMvY24ubWljcm9kb25lLmNtYi5zYWZhcmkuc2IKKysrIC9kZXYvbnVsbApA
QCAtMSwyMyArMCwwIEBACi07IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi07Ci07IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotOyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLTsgYXJlIG1ldDoKLTsg
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLTsgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotOyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotOyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi07ICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi07Ci07IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLTsgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi07IFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLTsgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi07IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLTsgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLTsgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi07IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi07IENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci07IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLTsgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMv
Y29tLmFwcGxlLkJvY29tU3VibWl0Q3RybC5zYiBiL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1Bs
dWdJblNhbmRib3hQcm9maWxlcy9jb20uYXBwbGUuQm9jb21TdWJtaXRDdHJsLnNiCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGE3MWNmNzVlOGI4YTk4NzQ4MjU3ZWJjNGIzMTE2OTVl
Y2MxMzFkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uYXBwbGUuQm9j
b21TdWJtaXRDdHJsLnNiCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotOyBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotOwotOyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLTsgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi07IGFyZSBtZXQ6Ci07IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLTsgMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLTsgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotOyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotOwotOyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi07IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotOyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi07IFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotOyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi07IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi07IFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotOyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotOyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotOyBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi07IFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9S
ZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5hcHBsZS5OUFNhZmVJbnB1dC5zYiBi
L1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uYXBwbGUu
TlBTYWZlSW5wdXQuc2IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxN2IyZDg2ZmUx
MDcxMmJmOGY2YjlhNWUwYjdiNDBkYzI1M2FmZTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJv
eFByb2ZpbGVzL2NvbS5hcHBsZS5OUFNhZmVJbnB1dC5zYgorKysgL2Rldi9udWxsCkBAIC0xLDMy
ICswLDAgQEAKLTsgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLTsKLTsgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci07IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotOyBhcmUgbWV0OgotOyAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotOyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi07IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLTsgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLTsKLTsgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotOyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLTsgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotOyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLTsgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotOyBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotOyBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLTsgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLTsgQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLTsgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotOyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLShhbGxvdyBt
YWNoLWxvb2t1cAotICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLmRvY2suZnVsbHNjcmVlbiIp
Ci0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuaW9oaWRldmVudHN5c3RlbSIpKQotCi0oYWxs
b3cgZmlsZS1yZWFkKgotICAgIChsaXRlcmFsICIvTGlicmFyeS9JbnRlcm5ldCBQbHVnLUlucy9k
YXRhLmluaSIpKQotCi0oYWxsb3cgaW9raXQtZ2V0LXByb3BlcnRpZXMKLSAgICAoaW9raXQtcHJv
cGVydHkgIm1hbnVmYWN0dXJlciIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9SZXNvdXJj
ZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5hcHBsZS5OUFNhZmVTdWJtaXQuc2IgYi9Tb3Vy
Y2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmFwcGxlLk5QU2Fm
ZVN1Ym1pdC5zYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBhNzFjZjc1ZThiOGE5
ODc0ODI1N2ViYzRiMzExNjk1ZWNjMTMxZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJv
ZmlsZXMvY29tLmFwcGxlLk5QU2FmZVN1Ym1pdC5zYgorKysgL2Rldi9udWxsCkBAIC0xLDIzICsw
LDAgQEAKLTsgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLTsKLTsgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci07IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotOyBhcmUgbWV0OgotOyAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
OyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi07IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLTsgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLTsKLTsgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotOyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLTsgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
OyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLTsgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotOyBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotOyBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLTsgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLTsgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLTsgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotOyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uYXBwbGUu
UXVpY2tUaW1lIFBsdWdpbi5wbHVnaW4uc2IgYi9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVn
SW5TYW5kYm94UHJvZmlsZXMvY29tLmFwcGxlLlF1aWNrVGltZSBQbHVnaW4ucGx1Z2luLnNiCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDFjZDU0YmJjYjg1OWM4YzAzMWFhYjhlZDY2
ZTc2MGVkNjNmMDE5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uYXBw
bGUuUXVpY2tUaW1lIFBsdWdpbi5wbHVnaW4uc2IJCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAs
MCBAQAotOyBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotOwotOyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLTsgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi07IGFyZSBtZXQ6Ci07IDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci07
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLTsgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLTsgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotOyAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotOwotOyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi07IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotOyBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi07
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotOyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi07IENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi07IFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotOyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotOyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotOyBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi07IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotKHdlYmtpdC1wb3dl
cmJveCkKLShzaGFyZWQtcHJlZmVyZW5jZXMtcmVhZC13cml0ZSAiY29tLmFwcGxlLnF1aWNrdGlt
ZS5wbHVnaW4ucHJlZmVyZW5jZXMiKQotCi0oYWxsb3cgZmlsZS1yZWFkKiBmaWxlLXdyaXRlKgot
ICAgIChob21lLWxpYnJhcnktc3VicGF0aCAiL0NhY2hlcy9RdWlja1RpbWUiKQotICAgIChob21l
LWxpYnJhcnktcHJlZmVyZW5jZXMtbGl0ZXJhbCAiL1F1aWNrVGltZSBQcmVmZXJlbmNlcyIpKQot
Ci0oYWxsb3cgbmV0d29yay1iaW5kIChsb2NhbCBpcCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmFwcGxlLmFwcHN0b3JlLkNv
ZGVSZWRlZW1lck5ldHNjYXBlUGx1Z2luLnNiIGIvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1
Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5hcHBsZS5hcHBzdG9yZS5Db2RlUmVkZWVtZXJOZXRzY2Fw
ZVBsdWdpbi5zYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhkMjAwYzU2NTJlZGUw
YWU0ODM4NGVlZDllYzhmZTMyYzc1NWRiNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJv
ZmlsZXMvY29tLmFwcGxlLmFwcHN0b3JlLkNvZGVSZWRlZW1lck5ldHNjYXBlUGx1Z2luLnNiCisr
KyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotOyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotOwotOyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLTsgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi07
IGFyZSBtZXQ6Ci07IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLTsgMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLTsgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotOyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotOwotOyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi07IEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotOyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi07IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotOyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci07IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi07IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotOyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotOyBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotOyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi07IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLQotKHdlYmtpdC1jYW1lcmEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Jl
c291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmFwcGxlLmlzdC5kcy5hcHBsZWNvbm5l
Y3Qud2VicGx1Z2luLnNiIGIvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFBy
b2ZpbGVzL2NvbS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0LndlYnBsdWdpbi5zYgpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNmNmZkOTY5ZGU2YWQ1MDAyYWFhNzgzY2YyOGQ0YjBi
OTA2NDk3OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmFwcGxlLmlz
dC5kcy5hcHBsZWNvbm5lY3Qud2VicGx1Z2luLnNiCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAs
MCBAQAotOyBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotOwotOyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLTsgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi07IGFyZSBtZXQ6Ci07IDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci07ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLTsgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLTsgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotOyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotOwotOyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi07IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotOyBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi07IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotOyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi07IENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi07
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotOyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotOyBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotOyBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi07IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotKGFsbG93
IG1hY2gtbG9va3VwCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuaXN0LmRzLmFwcGxlY29u
bmVjdDIuc2VydmljZS5hZG1pbiIpCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuaXN0LmRz
LmFwcGxlY29ubmVjdDIuc2VydmljZS5hZ2VudCIpCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBw
bGUuaXN0LmRzLmFwcGxlY29ubmVjdDIuc2VydmljZS5rZGN0dW5uZWxjb250cm9sbGVyIikKLSAg
ICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0Mi5zZXJ2aWNlLm1l
bnVleHRyYSIpCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUud2lmaS5hbnFwIikKLSAgICAo
Z2xvYmFsLW5hbWUgImNvbS5hcHBsZS5HU1NDcmVkIikKLSAgICAoZ2xvYmFsLW5hbWUgIm9yZy5o
NWwua2NtIikpCi0oYWxsb3cgbWFjaC1sb29rdXAKLSAgICAoZ2xvYmFsLW5hbWUtcmVnZXggIyJe
Y29tXC5hcHBsZVwuaXN0XC5kc1wuYXBwbGVjb25uZWN0Mlwuc2VydmljZVwuY29tXC5hcHBsZVwu
V2ViS2l0XC5QbHVnaW5cLigzMnw2NCkoXC5EZXZlbG9wbWVudCk/XFtbMC05XStcXSQiKQotICAg
IChnbG9iYWwtbmFtZS1yZWdleCAjIl5jb21cLmFwcGxlXC5pc3RcLmRzXC5hcHBsZWNvbm5lY3Qy
XC5zZXJ2aWNlXC5QbHVnaW5Qcm9jZXNzXFtbMC05XStcXSQiKSkKLQotKHNoYXJlZC1wcmVmZXJl
bmNlcy1yZWFkCi0gICAgImNvbS5hcHBsZS5HU1MiCi0gICAgImNvbS5hcHBsZS5pc3QuZHMuYXBw
bGVjb25uZWN0MiIKLSAgICAiY29tLmFwcGxlLmlzdC5kcy5hcHBsZWNvbm5lY3QyLmFjY2VwdGFu
Y2VUZXN0IgotICAgICJjb20uYXBwbGUuaXN0LmRzLmFwcGxlY29ubmVjdDIucHJvZHVjdGlvbiIK
LSAgICAiY29tLmFwcGxlLmlzdC5kcy5hcHBsZWNvbm5lY3QyLnVhdCIKLSAgICAiY29tLmFwcGxl
LktlcmJlcm9zIgotICAgICJjb20uYXBwbGUubmV0d29ya0Nvbm5lY3QiCi0gICAgImVkdS5taXQu
S2VyYmVyb3MiKQotCi0oYWxsb3cgZmlsZS1yZWFkKgotICAgIChzdWJwYXRoICIvTGlicmFyeS9L
ZXJiZXJvc1BsdWdpbnMvR1NTQVBJIikKLSAgICAoc3VicGF0aCAiL0xpYnJhcnkvS2VyYmVyb3NQ
bHVnaW5zL0tlcmJlcm9zRnJhbWV3b3JrUGx1Z2lucyIpCi0gICAgKGxpdGVyYWwgIi9MaWJyYXJ5
L1ByZWZlcmVuY2VzL2VkdS5taXQuS2VyYmVyb3MiKQotICAgIChsaXRlcmFsICIvTGlicmFyeS9Q
cmVmZXJlbmNlcy9TeXN0ZW1Db25maWd1cmF0aW9uL3ByZWZlcmVuY2VzLnBsaXN0IikKLSAgICAo
aG9tZS1saWJyYXJ5LXByZWZlcmVuY2VzLWxpdGVyYWwgIi9lZHUubWl0LktlcmJlcm9zIikpCi0K
LShhbGxvdyBmaWxlLXJlYWQqCi0gICAgKGxpdGVyYWwgIi9wcml2YXRlL2V0Yy9zZXJ2aWNlcyIp
KQotCi0oaWYgKGRlZmluZWQ/ICdtYWNoLXJlZ2lzdGVyKQotICAgIChhbGxvdyBtYWNoLXJlZ2lz
dGVyCi0gICAgICAgIChnbG9iYWwtbmFtZS1yZWdleCAjIl5jb21cLmFwcGxlXC5pc3RcLmRzXC5h
cHBsZWNvbm5lY3QyXC5zZXJ2aWNlXC5jb21cLmFwcGxlXC5XZWJLaXRcLlBsdWdpblwuKDMyfDY0
KShcLkRldmVsb3BtZW50KT9cW1swLTldK1xdJCIpCi0gICAgICAgIChnbG9iYWwtbmFtZS1yZWdl
eCAjIl5jb21cLmFwcGxlXC5pc3RcLmRzXC5hcHBsZWNvbm5lY3QyXC5zZXJ2aWNlXC5QbHVnaW5Q
cm9jZXNzXFtbMC05XStcXSQiKSkpCi0KLShhbGxvdyBzeXN0ZW0tc29ja2V0KQotKGFsbG93IG5l
dHdvcmstb3V0Ym91bmQKLSAgIChyZW1vdGUgdWRwICIqOjQxNjAiICIqOjg4IikpCi0oYWxsb3cg
bmV0d29yay1pbmJvdW5kCi0gICAobG9jYWwgdWRwKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uY2ZjYS5ucFNlY0VkaXRDdGwu
TUFDLkJPQy5wbHVnaW4uc2IgYi9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94
UHJvZmlsZXMvY29tLmNmY2EubnBTZWNFZGl0Q3RsLk1BQy5CT0MucGx1Z2luLnNiCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTdjYTBmZjQ1YjJhYjg5ZmU0OTY4M2I0ZTViOTNlY2Yy
ZWFmZjVlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uY2ZjYS5ucFNl
Y0VkaXRDdGwuTUFDLkJPQy5wbHVnaW4uc2IKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBA
Ci07IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi07
Ci07IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotOyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLTsgYXJlIG1ldDoKLTsgMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLTsgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotOyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotOyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi07ICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi07
Ci07IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLTsgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi07IFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLTsgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi07IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLTsgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLTsgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi07IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi07IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi07IEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLTsgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0oYWxsb3cgZmlsZS1yZWFk
KiBmaWxlLXdyaXRlKgotICAgIChsaXRlcmFsICIvTGlicmFyeS9JbnRlcm5ldCBQbHVnLUlucy9u
cFNlY0VkaXRDdGwuTUFDLkJPQy5zaWciKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUmVz
b3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uY2lzY28ud2ViZXgucGx1Z2luLmdwYzY0
LnNiIGIvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5j
aXNjby53ZWJleC5wbHVnaW4uZ3BjNjQuc2IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGNhNmNmODM1OGZhYzhhZGNmOGRjYmRkM2E0NTQ5OTBhODUwNzM5ZDcuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9SZXNvdXJjZXMv
UGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5jaXNjby53ZWJleC5wbHVnaW4uZ3BjNjQuc2IKKysr
IC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi07IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi07Ci07IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotOyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLTsg
YXJlIG1ldDoKLTsgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLTsgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotOyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotOyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi07ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi07Ci07IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLTsgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi07IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLTsgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi07IEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LTsgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLTsgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi07IElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi07IENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi07IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLTsgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi0oZGVmaW5lIGFsbG93LXN5bWxpbmtzICN0KQotCi0oZGVmaW5lIChob21lLXN1
YnBhdGggaG9tZS1yZWxhdGl2ZS1zdWJwYXRoKQotICAgIChzdWJwYXRoIChzdHJpbmctYXBwZW5k
IChwYXJhbSAiSE9NRV9ESVIiKSBob21lLXJlbGF0aXZlLXN1YnBhdGgpKSkKLShkZWZpbmUgKGhv
bWUtbGl0ZXJhbCBob21lLXJlbGF0aXZlLWxpdGVyYWwpCi0gICAgKGxpdGVyYWwgKHN0cmluZy1h
cHBlbmQgKHBhcmFtICJIT01FX0RJUiIpIGhvbWUtcmVsYXRpdmUtbGl0ZXJhbCkpKQotCi0oYWxs
b3cgZmlsZS1yZWFkKiBmaWxlLXdyaXRlKgotICAgIChob21lLWxpdGVyYWwgIi9MaWJyYXJ5L1By
ZWZlcmVuY2VzL2NvbS5jaXNjby53ZWJleC5mdXp6eVdpbmRvd0NvbmZpZy5wbGlzdCIpKQotCi0o
YWxsb3cgZmlsZS1yZWFkKiBmaWxlLXdyaXRlKgotICAgIChob21lLWxpdGVyYWwgIi9MaWJyYXJ5
L1ByZWZlcmVuY2VzL2NvbS53ZWJleC5tZWV0aW5nbWFuYWdlci5wbGlzdCIpKQotCi0oYWxsb3cg
ZmlsZS1yZWFkKiBmaWxlLXdyaXRlKiBmaWxlLXdyaXRlLWNyZWF0ZQotICAgIChob21lLXN1YnBh
dGggIi9MaWJyYXJ5L0FwcGxpY2F0aW9uIFN1cHBvcnQvV2ViRXggRm9sZGVyIikpCi0KLTs7IEZJ
WE1FOiBXZSBzaG91bGQgdGlndGhlbiB0aGUgc2FuZGJveCB0byBzb21lIHRtcCBzdWJmb2xkZXJz
Ci0oYWxsb3cgZmlsZSoKLSAgICAocHJlZml4ICIvcHJpdmF0ZS90bXAiKSkKLQotKGFsbG93IGZp
bGUtcmVhZC1kYXRhIGZpbGUtd3JpdGUtZGF0YQotICAgIChwYXRoICIvZGV2L3R0eSIpKQotCi0o
YWxsb3cgcHJvY2Vzcy1leGVjKQotKGFsbG93IHByb2Nlc3MtZm9yaykKLShhbGxvdyBkaXN0cmli
dXRlZC1ub3RpZmljYXRpb24tcG9zdCkKLQotKGFsbG93IG1hY2gtbG9va3VwCi0gICAgKGdsb2Jh
bC1uYW1lICJjb20uYXBwbGUuUGVyZm9ybWFuY2VBbmFseXNpcy5hbmltYXRpb25wZXJmZCIpCi0g
ICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuZG9jay5mdWxsc2NyZWVuIikKLSAgICAoZ2xvYmFs
LW5hbWUgImNvbS5hcHBsZS5xdWlja2xvb2sudWkuaGVscGVyLmFjdGl2ZSIpCi0gICAgKGdsb2Jh
bC1uYW1lICJjb20uYXBwbGUucXVpY2tsb29rLnVpLmhlbHBlciIpCi0gICAgKGdsb2JhbC1uYW1l
ICJjb20uYXBwbGUuaW5wdXRtZXRob2RraXQubGF1bmNoYWdlbnQiKQotICAgIChnbG9iYWwtbmFt
ZSAiY29tLmFwcGxlLmlucHV0bWV0aG9ka2l0LmxhdW5jaGVyIikKLSAgICAoZ2xvYmFsLW5hbWUg
ImNvbS5hcHBsZS5pbnB1dG1ldGhvZGtpdC5nZXR4cGNlbmRwb2ludCIpKQotCi0oYWxsb3cgaW9r
aXQtZ2V0LXByb3BlcnRpZXMKLSAgICAoaW9raXQtcHJvcGVydHkgIlBvd2VyQ29udHJvbFN1cHBv
cnRlZCIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJTdXBwb3J0VGFwVG9XYWtlIikKLSAgICAoaW9r
aXQtcHJvcGVydHkgIlJlc2V0T25Mb2NrTXMiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiUmVzZXRP
blVubG9ja01zIikKLSAgICAoaW9raXQtcHJvcGVydHkgIlNob3VsZFJlc2V0T25CdXR0b24iKQot
ICAgIChpb2tpdC1wcm9wZXJ0eSAiV2lyZWxlc3NDaGFyZ2luZ05vdGlmaWNhdGlvblN1cHBvcnRl
ZCIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJTdXBwb3J0c1NpbGVudENsaWNrIikKLSAgICAoaW9r
aXQtcHJvcGVydHkgIk1pbkRpZ2l0aXplclByZXNzdXJlVmFsdWUiKQotICAgIChpb2tpdC1wcm9w
ZXJ0eSAiQWNjdXJhdGVNYXhEaWdpdGl6ZXJQcmVzc3VyZVZhbHVlIikKLSAgICAoaW9raXQtcHJv
cGVydHkgIkV4dGVuZGVkTWF4RGlnaXRpemVyUHJlc3N1cmVWYWx1ZSIpCi0gICAgKGlva2l0LXBy
b3BlcnR5ICJBbmltYXRpb25UaHJlc2hvbGRzIikKLSAgICAoaW9raXQtcHJvcGVydHkgIkFjdGl2
YXRpb25UaHJlc2hvbGRzIikKLSAgICAoaW9raXQtcHJvcGVydHkgIm10LWRldmljZS1pZCIpKQot
Ci0od2Via2l0LXBvd2VyYm94KQotKHdlYmtpdC1wcmludGluZykKLSh3ZWJraXQtY2FtZXJhKQot
KHdlYmtpdC1taWNyb3Bob25lKQotCi0oYWxsb3cgbmV0d29yay1iaW5kIChsb2NhbCBpcCkpCi0K
LShhbGxvdyBuZXR3b3JrLW91dGJvdW5kKQotKGFsbG93IG5ldHdvcmstaW5ib3VuZCAobG9jYWwg
aXApKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFBy
b2ZpbGVzL2NvbS5jbWJjaGluYS5DTUJTZWN1cml0eS5zYiBiL1NvdXJjZS9XZWJLaXQvUmVzb3Vy
Y2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uY21iY2hpbmEuQ01CU2VjdXJpdHkuc2IKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwZTliZmQ0YzUyMjAyOGNhNTk2YWY2MzZjZjgw
YzZmOGU5ODZhZDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5jbWJj
aGluYS5DTUJTZWN1cml0eS5zYgorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLTsgQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLTsKLTsgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci07IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotOyBhcmUgbWV0OgotOyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotOyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi07
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLTsgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLTsKLTsgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotOyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLTsgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotOyBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLTsgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotOyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotOyBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LTsgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLTsgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLTsgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotOyBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLShhbGxvdyBtYWNoLWxvb2t1cAotICAg
IChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLmRvY2suZnVsbHNjcmVlbiIpCi0gICAgKGdsb2JhbC1u
YW1lICJjb20uYXBwbGUuaW9oaWRldmVudHN5c3RlbSIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5mdHNhZmUuTlBBUEktQ29y
ZS1TYWZlLVNvZnRLZXliYW9yZC5wbHVnaW4ucmZjMTAzNGlkZW50aWZpZXIuc2IgYi9Tb3VyY2Uv
V2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmZ0c2FmZS5OUEFQSS1D
b3JlLVNhZmUtU29mdEtleWJhb3JkLnBsdWdpbi5yZmMxMDM0aWRlbnRpZmllci5zYgpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBhNzFjZjc1ZThiOGE5ODc0ODI1N2ViYzRiMzExNjk1
ZWNjMTMxZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmZ0c2FmZS5O
UEFQSS1Db3JlLVNhZmUtU29mdEtleWJhb3JkLnBsdWdpbi5yZmMxMDM0aWRlbnRpZmllci5zYgor
KysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTsgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLTsKLTsgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci07IG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
OyBhcmUgbWV0OgotOyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotOyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi07IDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLTsgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLTsKLTsgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotOyBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLTsgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotOyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLTsgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotOyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotOyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLTsgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLTsg
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLTsgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotOyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNh
bmRib3hQcm9maWxlcy9jb20uZ29vZ2xlLmdvb2dsZXRhbGticm93c2VycGx1Z2luLnNiIGIvU291
cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5nb29nbGUuZ29v
Z2xldGFsa2Jyb3dzZXJwbHVnaW4uc2IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJm
NGYwZGQ3OGM5ZWUyZWE0ODJiYTc3ZjU4ZWIzMTQ4OWIwZGI5MjEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1
Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5nb29nbGUuZ29vZ2xldGFsa2Jyb3dzZXJwbHVnaW4uc2IK
KysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi07IENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi07Ci07IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotOyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LTsgYXJlIG1ldDoKLTsgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLTsgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotOyAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotOyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi07ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi07Ci07IFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLTsgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi07IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLTsgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi07IEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLTsgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLTsgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi07IElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi07
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi07IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLTsgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0oZGVmaW5lIChob21lLXN1YnBhdGggaG9tZS1yZWxhdGl2ZS1zdWJwYXRo
KQotICAgIChzdWJwYXRoIChzdHJpbmctYXBwZW5kIChwYXJhbSAiSE9NRV9ESVIiKSBob21lLXJl
bGF0aXZlLXN1YnBhdGgpKSkKLQotKGFsbG93IGZpbGUtcmVhZCogZmlsZS13cml0ZSoKLSAgICAo
aG9tZS1zdWJwYXRoICIvTGlicmFyeS9BcHBsaWNhdGlvbiBTdXBwb3J0L0dvb2dsZS9Hb29nbGUg
VGFsayBQbHVnaW4iKSkKLQotKGFsbG93IGZpbGUtcmVhZCogZmlsZS13cml0ZSoKLSAgICAoc3Vi
cGF0aCAiL0xpYnJhcnkvQXBwbGljYXRpb24gU3VwcG9ydC9Hb29nbGUiKSkKLQotKGFsbG93IGpv
Yi1jcmVhdGlvbikKLShhbGxvdyBzaWduYWwpCi0oYWxsb3cgbWFjaC1sb29rdXApCi0KLSh3ZWJr
aXQtcG93ZXJib3gpCi0od2Via2l0LXByaW50aW5nKQotKHdlYmtpdC1jYW1lcmEpCi0od2Via2l0
LW1pY3JvcGhvbmUpCi0KLShhbGxvdyBuZXR3b3JrLWJpbmQgKGxvY2FsIGlwKSkKLQotKGFsbG93
IG5ldHdvcmstb3V0Ym91bmQpCi0oYWxsb3cgbmV0d29yay1pbmJvdW5kIChsb2NhbCBpcCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMv
Y29tLmdvb2dsZS5vMWRicm93c2VycGx1Z2luLnNiIGIvU291cmNlL1dlYktpdC9SZXNvdXJjZXMv
UGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5nb29nbGUubzFkYnJvd3NlcnBsdWdpbi5zYgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdiYmQ3NDkwMjcxMDU0Mjc1YWY5OTA2MGEwNGM4
YWMzNDkyYzVmMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmdvb2ds
ZS5vMWRicm93c2VycGx1Z2luLnNiCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotOyBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotOwotOyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLTsgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi07IGFyZSBtZXQ6Ci07IDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LTsgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLTsgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotOyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotOwotOyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi07IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotOyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi07IFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotOyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi07IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi07IFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotOyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotOyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotOyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi07
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotKGRlZmluZSAoaG9tZS1zdWJwYXRo
IGhvbWUtcmVsYXRpdmUtc3VicGF0aCkKLSAgICAoc3VicGF0aCAoc3RyaW5nLWFwcGVuZCAocGFy
YW0gIkhPTUVfRElSIikgaG9tZS1yZWxhdGl2ZS1zdWJwYXRoKSkpCi0KLShhbGxvdyBmaWxlLXJl
YWQqIGZpbGUtd3JpdGUqCi0gICAgKGhvbWUtc3VicGF0aCAiL0xpYnJhcnkvQXBwbGljYXRpb24g
U3VwcG9ydC9Hb29nbGUvR29vZ2xlIFRhbGsgUGx1Z2luIikpCi0KLShhbGxvdyBmaWxlLXJlYWQq
IGZpbGUtd3JpdGUqCi0gICAgKHN1YnBhdGggIi9MaWJyYXJ5L0FwcGxpY2F0aW9uIFN1cHBvcnQv
R29vZ2xlIikpCi0KLShhbGxvdyBmaWxlKgotICAgIChwcmVmaXggIi9wcml2YXRlL3RtcCIpKQot
Ci0oYWxsb3cgbmV0d29yay1iaW5kIChwcmVmaXggIi9wcml2YXRlL3RtcCIpKQotCi0oYWxsb3cg
am9iLWNyZWF0aW9uKQotKGFsbG93IHNpZ25hbCkKLShhbGxvdyBtYWNoLWxvb2t1cCkKLQotKHdl
YmtpdC1wb3dlcmJveCkKLSh3ZWJraXQtcHJpbnRpbmcpCi0od2Via2l0LWNhbWVyYSkKLSh3ZWJr
aXQtbWljcm9waG9uZSkKLQotKGFsbG93IG5ldHdvcmstYmluZCAobG9jYWwgaXApKQotCi0oYWxs
b3cgbmV0d29yay1vdXRib3VuZCkKLShhbGxvdyBuZXR3b3JrLWluYm91bmQgKGxvY2FsIGlwKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxl
cy9jb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIgRVNSLnBsdWdpbi5zYiBiL1NvdXJjZS9XZWJL
aXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20ubWFjcm9tZWRpYS5GbGFzaCBQ
bGF5ZXIgRVNSLnBsdWdpbi5zYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFmYWY0
OTQ2ODA0N2IzMTIyYzBhZmQwYzk5ODNiZjcyZGYyM2I0Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5T
YW5kYm94UHJvZmlsZXMvY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyIEVTUi5wbHVnaW4uc2IJ
CisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotOyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotOwotOyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLTsgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci07IGFyZSBtZXQ6Ci07IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLTsgMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLTsgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotOyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotOwotOyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi07IEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotOyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi07IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotOyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi07IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi07IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotOyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
OyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotOyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi07IFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotKHdlYmtpdC1wb3dlcmJveCkKLSh3ZWJraXQtcHJpbnRpbmcpCi0od2Vi
a2l0LWNhbWVyYSkKLSh3ZWJraXQtbWljcm9waG9uZSkKLQotKGFsbG93IGlwYy1wb3NpeC1zZW0K
LSAgICAoaXBjLXBvc2l4LW5hbWUgIk1hY3JvbWVkaWFTZW1hcGhvcmVEaWciKQotICAgIChpcGMt
cG9zaXgtbmFtZSAiNTk5MTgxMzAiKSkKLQotKGFsbG93IGZpbGUtcmVhZCoKLSAgICAoaG9tZS1s
aXRlcmFsICIvbW0uY2ZnIikKLSAgICAoaG9tZS1saXRlcmFsICIvbW1zLmNmZyIpKQotCi0oZGVu
eSBmaWxlLXJlYWQteGF0dHIgKHdpdGggbm8tbG9nKQotICAgIChob21lLWxpYnJhcnktbGl0ZXJh
bCAiL0NhY2hlcyIpCi0gICAgKGhvbWUtbGlicmFyeS1wcmVmZXJlbmNlcy1saXRlcmFsICIvIikp
Ci0KLShhbGxvdyBmaWxlLXJlYWQqIGZpbGUtd3JpdGUtY3JlYXRlIGZpbGUtd3JpdGUtbW9kZSBm
aWxlLXdyaXRlLW93bmVyCi0gICAgKGhvbWUtbGlicmFyeS1saXRlcmFsICIvQ2FjaGVzL0Fkb2Jl
IikKLSAgICAoaG9tZS1saWJyYXJ5LXByZWZlcmVuY2VzLWxpdGVyYWwgIi9NYWNyb21lZGlhIikp
Ci0KLShhbGxvdyBmaWxlLXJlYWQqIGZpbGUtd3JpdGUqCi0gICAgKGxpdGVyYWwgIi9MaWJyYXJ5
L0FwcGxpY2F0aW9uIFN1cHBvcnQvTWFjcm9tZWRpYS9tbXMuY2ZnIikKLSAgICAoaG9tZS1saWJy
YXJ5LWxpdGVyYWwgIi9BcHBsaWNhdGlvbiBTdXBwb3J0L01hY3JvbWVkaWEvbW1zLmNmZyIpCi0g
ICAgKGhvbWUtbGlicmFyeS1zdWJwYXRoICIvQ2FjaGVzL0Fkb2JlL0ZsYXNoIFBsYXllciIpCi0g
ICAgKGhvbWUtbGlicmFyeS1wcmVmZXJlbmNlcy1zdWJwYXRoICIvTWFjcm9tZWRpYS9GbGFzaCBQ
bGF5ZXIiKSkKLQotKGFsbG93IGZpbGUtcmVhZCoKLSAgICAobGl0ZXJhbCAiL0xpYnJhcnkvUHJl
ZmVyZW5jZVBhbmVzL0ZsYXNoIFBsYXllci5wcmVmUGFuZSIpCi0gICAgKGhvbWUtbGlicmFyeS1s
aXRlcmFsICIvUHJlZmVyZW5jZVBhbmVzL0ZsYXNoIFBsYXllci5wcmVmUGFuZSIpCi0gICAgKGhv
bWUtbGlicmFyeS1yZWdleCAiL0FwcGxpY2F0aW9uIFN1cHBvcnQvTWFjcm9tZWRpYS9zc1wuKGNm
Z3xjZm58c2duKSQiKSkKLQotKGFsbG93IGZpbGUtcmVhZCogZmlsZS13cml0ZSoKLSAgICAobW91
bnQtcmVsYXRpdmUtcmVnZXggIyJeL1wuVGVtcG9yYXJ5SXRlbXMvIikpCi0KLShkZW55IGZpbGUt
cmVhZCogKHdpdGggbm8tbG9nKQotICAgIChsaXRlcmFsICIvTGlicmFyeS9BcHBsaWNhdGlvbiBT
dXBwb3J0L01hY3JvbWVkaWEvRmxhc2hBdXRob3IuY2ZnIikKLSAgICAoc3VicGF0aCAiL0xpYnJh
cnkvQXBwbGljYXRpb24gU3VwcG9ydC9NYWNyb21lZGlhL0ZsYXNoUGxheWVyVHJ1c3QiKSkKLQot
KGFsbG93IG5ldHdvcmstYmluZCAobG9jYWwgaXApKQotCi07OzsKLTs7OyBOZWVkZWQgZm9yIENh
bWVyYSBhY2Nlc3MKLTs7OwotKGFsbG93IGlva2l0LWdldC1wcm9wZXJ0aWVzCi0gICAgKGlva2l0
LXByb3BlcnR5LXJlZ2V4ICMiXihBY3RpdmF0aW9ufEFuaW1hdGlvbilUaHJlc2hvbGRzIikKLSAg
ICAoaW9raXQtcHJvcGVydHktcmVnZXggIyJeKChBY2N1cmF0ZXxFeHRlbmRlZClNYXh8TWluKURp
Z2l0aXplclByZXNzdXJlVmFsdWUiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiSU9QQ0lUdW5uZWxD
b21wYXRpYmxlIikKLSAgICAoaW9raXQtcHJvcGVydHkgIlBvd2VyQ29udHJvbFN1cHBvcnRlZCIp
Ci0gICAgKGlva2l0LXByb3BlcnR5ICJSZW1vdmFibGUiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAi
UmVzZXRPbkxvY2tNcyIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJSZXNldE9uVW5sb2NrTXMiKQot
ICAgIChpb2tpdC1wcm9wZXJ0eSAiU2hvdWxkUmVzZXRPbkJ1dHRvbiIpCi0gICAgKGlva2l0LXBy
b3BlcnR5LXJlZ2V4ICMiXlN1cHBvcnQoc1NpbGVudENsaWNrfFRhcFRvV2FrZSkiKQotICAgIChp
b2tpdC1wcm9wZXJ0eSAiV2lyZWxlc3NDaGFyZ2luZ05vdGlmaWNhdGlvblN1cHBvcnRlZCIpCi0p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmls
ZXMvY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyLnBsdWdpbi5zYiBiL1NvdXJjZS9XZWJLaXQv
UmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5
ZXIucGx1Z2luLnNiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGMyYTIzNzcxMmE2
MzM3YmZjOGQzMjE2YWUxNmRhYTEwOTJiZmYyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQ
cm9maWxlcy9jb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIucGx1Z2luLnNiCQorKysgL2Rldi9u
dWxsCkBAIC0xLDc5ICswLDAgQEAKLTsgQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLTsKLTsgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci07IG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotOyBhcmUgbWV0
OgotOyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotOyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi07IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LTsgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLTsKLTsgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotOyBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLTsg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotOyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLTsgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotOyBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotOyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLTsgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLTsgQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLTsgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotOyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLSh3ZWJraXQtcG93ZXJib3gpCi0od2Via2l0LXByaW50aW5nKQotKHdlYmtpdC1jYW1lcmEp
Ci0od2Via2l0LW1pY3JvcGhvbmUpCi0KLShhbGxvdyBpcGMtcG9zaXgtc2VtCi0gICAgKGlwYy1w
b3NpeC1uYW1lICJNYWNyb21lZGlhU2VtYXBob3JlRGlnIikKLSAgICAoaXBjLXBvc2l4LW5hbWUg
IjU5OTE4MTMwIikpCi0KLShhbGxvdyBmaWxlLXJlYWQqCi0gICAgKGhvbWUtbGl0ZXJhbCAiL21t
LmNmZyIpCi0gICAgKGhvbWUtbGl0ZXJhbCAiL21tcy5jZmciKSkKLQotKGRlbnkgZmlsZS1yZWFk
LXhhdHRyICh3aXRoIG5vLWxvZykKLSAgICAoaG9tZS1saWJyYXJ5LWxpdGVyYWwgIi9DYWNoZXMi
KQotICAgIChob21lLWxpYnJhcnktcHJlZmVyZW5jZXMtbGl0ZXJhbCAiLyIpKQotCi0oYWxsb3cg
ZmlsZS1yZWFkKiBmaWxlLXdyaXRlLWNyZWF0ZSBmaWxlLXdyaXRlLW1vZGUgZmlsZS13cml0ZS1v
d25lcgotICAgIChob21lLWxpYnJhcnktbGl0ZXJhbCAiL0NhY2hlcy9BZG9iZSIpCi0gICAgKGhv
bWUtbGlicmFyeS1wcmVmZXJlbmNlcy1saXRlcmFsICIvTWFjcm9tZWRpYSIpKQotCi0oYWxsb3cg
ZmlsZS1yZWFkKiBmaWxlLXdyaXRlKgotICAgIChsaXRlcmFsICIvTGlicmFyeS9BcHBsaWNhdGlv
biBTdXBwb3J0L01hY3JvbWVkaWEvbW1zLmNmZyIpCi0gICAgKGhvbWUtbGlicmFyeS1saXRlcmFs
ICIvQXBwbGljYXRpb24gU3VwcG9ydC9NYWNyb21lZGlhL21tcy5jZmciKQotICAgIChob21lLWxp
YnJhcnktc3VicGF0aCAiL0NhY2hlcy9BZG9iZS9GbGFzaCBQbGF5ZXIiKQotICAgIChob21lLWxp
YnJhcnktcHJlZmVyZW5jZXMtc3VicGF0aCAiL01hY3JvbWVkaWEvRmxhc2ggUGxheWVyIikpCi0K
LShhbGxvdyBmaWxlLXJlYWQqCi0gICAgKGxpdGVyYWwgIi9MaWJyYXJ5L1ByZWZlcmVuY2VQYW5l
cy9GbGFzaCBQbGF5ZXIucHJlZlBhbmUiKQotICAgIChob21lLWxpYnJhcnktbGl0ZXJhbCAiL1By
ZWZlcmVuY2VQYW5lcy9GbGFzaCBQbGF5ZXIucHJlZlBhbmUiKQotICAgIChob21lLWxpYnJhcnkt
cmVnZXggIi9BcHBsaWNhdGlvbiBTdXBwb3J0L01hY3JvbWVkaWEvc3NcLihjZmd8Y2ZufHNnbikk
IikpCi0KLShhbGxvdyBmaWxlLXJlYWQqIGZpbGUtd3JpdGUqCi0gICAgKG1vdW50LXJlbGF0aXZl
LXJlZ2V4ICMiXi9cLlRlbXBvcmFyeUl0ZW1zLyIpKQotCi0oZGVueSBmaWxlLXJlYWQqICh3aXRo
IG5vLWxvZykKLSAgICAobGl0ZXJhbCAiL0xpYnJhcnkvQXBwbGljYXRpb24gU3VwcG9ydC9NYWNy
b21lZGlhL0ZsYXNoQXV0aG9yLmNmZyIpCi0gICAgKHN1YnBhdGggIi9MaWJyYXJ5L0FwcGxpY2F0
aW9uIFN1cHBvcnQvTWFjcm9tZWRpYS9GbGFzaFBsYXllclRydXN0IikpCi0KLShhbGxvdyBuZXR3
b3JrLWJpbmQgKGxvY2FsIGlwKSkKLQotOzs7Ci07OzsgTmVlZGVkIGZvciBDYW1lcmEgYWNjZXNz
Ci07OzsKLShhbGxvdyBpb2tpdC1nZXQtcHJvcGVydGllcwotICAgIChpb2tpdC1wcm9wZXJ0eS1y
ZWdleCAjIl4oQWN0aXZhdGlvbnxBbmltYXRpb24pVGhyZXNob2xkcyIpCi0gICAgKGlva2l0LXBy
b3BlcnR5LXJlZ2V4ICMiXigoQWNjdXJhdGV8RXh0ZW5kZWQpTWF4fE1pbilEaWdpdGl6ZXJQcmVz
c3VyZVZhbHVlIikKLSAgICAoaW9raXQtcHJvcGVydHkgIklPUENJVHVubmVsQ29tcGF0aWJsZSIp
Ci0gICAgKGlva2l0LXByb3BlcnR5ICJQb3dlckNvbnRyb2xTdXBwb3J0ZWQiKQotICAgIChpb2tp
dC1wcm9wZXJ0eSAiUmVtb3ZhYmxlIikKLSAgICAoaW9raXQtcHJvcGVydHkgIlJlc2V0T25Mb2Nr
TXMiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiUmVzZXRPblVubG9ja01zIikKLSAgICAoaW9raXQt
cHJvcGVydHkgIlNob3VsZFJlc2V0T25CdXR0b24iKQotICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdl
eCAjIl5TdXBwb3J0KHNTaWxlbnRDbGlja3xUYXBUb1dha2UpIikKLSAgICAoaW9raXQtcHJvcGVy
dHkgIldpcmVsZXNzQ2hhcmdpbmdOb3RpZmljYXRpb25TdXBwb3J0ZWQiKQotKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5taWNy
b3NvZnQuU2lsdmVybGlnaHRQbHVnaW4uc2IgYi9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVn
SW5TYW5kYm94UHJvZmlsZXMvY29tLm1pY3Jvc29mdC5TaWx2ZXJsaWdodFBsdWdpbi5zYgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ5NGI3ZjgyZGRkZjY1ZTJkMGY3YzA5NWYyMDdl
NjIxYmIyYjhjZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLm1pY3Jv
c29mdC5TaWx2ZXJsaWdodFBsdWdpbi5zYgorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAK
LTsgQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLTsK
LTsgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci07IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotOyBhcmUgbWV0OgotOyAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotOyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi07IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLTsgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLTsK
LTsgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotOyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLTsgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotOyBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLTsgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotOyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotOyBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLTsgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLTsgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLTsgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotOyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLShhbGxvdyBpb2tpdC1vcGVu
Ci0gICAgKGlva2l0LXVzZXItY2xpZW50LWNsYXNzICJJT0hJRExpYlVzZXJDbGllbnQiKQotICAg
IChpb2tpdC11c2VyLWNsaWVudC1jbGFzcyAiSU9CbHVldG9vdGhIQ0lVc2VyQ2xpZW50IikpCi0K
LShzaGFyZWQtcHJlZmVyZW5jZXMtcmVhZAotICAgICJjb20ubWljcm9zb2Z0LlBsYXlSZWFkeSIK
LSAgICAiY29tLm1pY3Jvc29mdC5hdXRvdXBkYXRlMiIpCi0oc2hhcmVkLXByZWZlcmVuY2VzLXJl
YWQtd3JpdGUgImNvbS5taWNyb3NvZnQuc2lsdmVybGlnaHQiKQotCi0oYWxsb3cgZmlsZS13cml0
ZS1jcmVhdGUKLSAgICAoaG9tZS1saWJyYXJ5LWxpdGVyYWwgIi9BcHBsaWNhdGlvbiBTdXBwb3J0
L01pY3Jvc29mdCIpKQotCi0oYWxsb3cgZmlsZS1yZWFkKiBmaWxlLXdyaXRlKgotICAgIDs7IFNp
Z2gsIG1vZGUgNzc3IGluIC9MaWJyYXJ5LgotICAgIChzdWJwYXRoICIvTGlicmFyeS9BcHBsaWNh
dGlvbiBTdXBwb3J0L01pY3Jvc29mdC9QbGF5UmVhZHkiKQotICAgIChob21lLWxpYnJhcnktc3Vi
cGF0aCAiL0FwcGxpY2F0aW9uIFN1cHBvcnQvTWljcm9zb2Z0L1BsYXlSZWFkeSIpCi0gICAgKGhv
bWUtbGlicmFyeS1zdWJwYXRoICIvQXBwbGljYXRpb24gU3VwcG9ydC9NaWNyb3NvZnQvU2lsdmVy
bGlnaHQiKQotICAgIChob21lLWxpYnJhcnktc3VicGF0aCAiL0NhY2hlcy9UZW1wb3JhcnlJdGVt
cyIpKQotCi0oaWYgKGRlZmluZWQ/ICdzZW1hcGhvcmUtb3duZXIpCi0gICAgKGFsbG93IGlwYy1w
b3NpeC1zZW0KLSAgICAgICAgIChzZW1hcGhvcmUtb3duZXIgc2FtZS1zYW5kYm94KSkKLSAgICAo
YWxsb3cgaXBjLXBvc2l4LXNlbQotICAgICAgICAgKGlwYy1wb3NpeC1uYW1lICJMQ19NdXRleCIp
KSkKLQotOzsgRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8xMzYzNjA3OD4KLShhbGxvdyBpcGMtcG9z
aXgtc2htKgotICAgIChpcGMtcG9zaXgtbmFtZS1yZWdleCAjIl5Db3JlQ0xSXyIpKQotCi0oYWxs
b3cgbmV0d29yay1iaW5kIChsb2NhbCBpcCkpCi0KLSh3ZWJraXQtcG93ZXJib3gpCi0od2Via2l0
LXByaW50aW5nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2Fu
ZGJveFByb2ZpbGVzL2NvbS5vcmFjbGUuamF2YS5KYXZhQXBwbGV0UGx1Z2luLnNiIGIvU291cmNl
L1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5vcmFjbGUuamF2YS5K
YXZhQXBwbGV0UGx1Z2luLnNiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTYxZWJj
ZjVhODZjNjgzM2Q1YzU1MzM3ZjcxYWM1MDJkZDcyNmU3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNh
bmRib3hQcm9maWxlcy9jb20ub3JhY2xlLmphdmEuSmF2YUFwcGxldFBsdWdpbi5zYgorKysgL2Rl
di9udWxsCkBAIC0xLDcwICswLDAgQEAKLTsgQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLTsKLTsgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci07IG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotOyBhcmUg
bWV0OgotOyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotOyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi07IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLTsgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLTsKLTsgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotOyBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LTsgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotOyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLTsgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotOyBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotOyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLTsgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLTsgQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLTsgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotOyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLSh3ZWJraXQtcHJpbnRpbmcpCi0KLShhbGxvdyBzaWduYWwgbmV0d29yay1pbmJvdW5k
KQotKGFsbG93IHByb2Nlc3MtZm9yaykKLShhbGxvdyBwcm9jZXNzLWV4ZWMKLSAgICAoc3VicGF0
aCAiL1N5c3RlbS9MaWJyYXJ5L0phdmEvSmF2YVZpcnR1YWxNYWNoaW5lcyIpCi0gICAgKHN1YnBh
dGggIi9MaWJyYXJ5L0ludGVybmV0IFBsdWctSW5zL0phdmFBcHBsZXRQbHVnaW4ucGx1Z2luIikp
Ci0KLShhbGxvdyBtYWNoLWxvb2t1cAotICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLmNvcmVz
ZXJ2aWNlcy5sYXVuY2hzZXJ2aWNlc2QiKQotICAgIChnbG9iYWwtbmFtZS1yZWdleCAjIl5QbGFj
ZUhvbGRlclNlcnZlck5hbWUtIikpCi0KLShhbGxvdyBmaWxlLXJlYWQqCi0gICAgKGxpdGVyYWwg
Ii9kZXYvZmQiKQotICAgIChsaXRlcmFsICIvdXNyL2JpbiIpCi0gICAgKGxpdGVyYWwgIi9wcml2
YXRlL2V0Yy9ob3N0cyIpCi0gICAgKHN1YnBhdGggIi9MaWJyYXJ5L0phdmEiKQotICAgIChzdWJw
YXRoICIvU3lzdGVtL0xpYnJhcnkvSmF2YSIpKQotCi0oc2hhcmVkLXByZWZlcmVuY2VzLXJlYWQK
LSAgICAiY29tLmFwcGxlLmphdmEuSmF2YVByZWZlcmVuY2VzIgotICAgICJuZXQuamF2YS5vcGVu
amRrLmNtZCIpCi0KLShzaGFyZWQtcHJlZmVyZW5jZXMtcmVhZC13cml0ZQotICAgICJjb20uYXBw
bGUuamF2YS51dGlsLnByZWZzIgotICAgICJjb20ub3JhY2xlLmphdmFkZXBsb3ltZW50IikKLQot
KGFsbG93IGZpbGUtcmVhZCogZmlsZS13cml0ZSoKLSAgICAoaG9tZS1saWJyYXJ5LXN1YnBhdGgg
Ii9TYXZlZCBBcHBsaWNhdGlvbiBTdGF0ZS9uZXQuamF2YS5vcGVuamRrLmNtZC5zYXZlZFN0YXRl
IikKLSAgICAoaG9tZS1saWJyYXJ5LXN1YnBhdGggIi9BcHBsaWNhdGlvbiBTdXBwb3J0L09yYWNs
ZS9KYXZhL0RlcGxveW1lbnQiKQotICAgIChob21lLWxpYnJhcnktc3VicGF0aCAiL0NhY2hlcy9K
YXZhIikpCi0KLShhbGxvdyBmaWxlLXdyaXRlLWNyZWF0ZQotICAgIChob21lLWxpYnJhcnktbGl0
ZXJhbCAiL0FwcGxpY2F0aW9uIFN1cHBvcnQvT3JhY2xlIikKLSAgICAoaG9tZS1saWJyYXJ5LWxp
dGVyYWwgIi9BcHBsaWNhdGlvbiBTdXBwb3J0L09yYWNsZS9KYXZhIikpCi0KLShhbGxvdyBmaWxl
LXJlYWQqCi0gICAgKHN1YnBhdGggIi9MaWJyYXJ5L0FwcGxpY2F0aW9uIFN1cHBvcnQvSmF2YS9Q
dWJsaWNGaWxlcyIpCi0gICAgKHN1YnBhdGggIi9MaWJyYXJ5L0FwcGxpY2F0aW9uIFN1cHBvcnQv
T3JhY2xlL0phdmEvRGVwbG95bWVudCIpKQotCi0oYWxsb3cgbmV0d29yay1iaW5kIG5ldHdvcmst
b3V0Ym91bmQgKHN1YnBhdGggKHBhcmFtICJEQVJXSU5fVVNFUl9URU1QX0RJUiIpKSkKLShhbGxv
dyBuZXR3b3JrLWJpbmQgKGxvY2FsIGlwKSkKLQotKGRlbnkgZmlsZS13cml0ZSogKHdpdGggbm8t
bG9nKSAoc3VicGF0aCAiL0xpYnJhcnkvQXBwbGljYXRpb24gU3VwcG9ydC9PcmFjbGUiKSkKLShk
ZW55IGZpbGUtd3JpdGUqICh3aXRoIG5vLWxvZykgKHN1YnBhdGggKHBhcmFtICJXRUJLSVQyX0ZS
QU1FV09SS19ESVIiKSkpCi0KLShkZW55IGpvYi1jcmVhdGlvbiAod2l0aCBuby1sb2cpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvV0tQbHVnaW5JbmZvcm1hdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9XS1BsdWdpbkluZm9ybWF0aW9uLmNwcApp
bmRleCBkNWIzNDFiMWM5NjE5YzgxMzFhN2Q3ZmMzNzgzMmJhYjkxYzk5MjEyLi5jNWU3Zjk2Nzc0
ZjA5M2ZmODcxMDJiNWE5NTdhYjYxNTc5NWYxODBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9BUEkvYy9XS1BsdWdpbkluZm9ybWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9BUEkvYy9XS1BsdWdpbkluZm9ybWF0aW9uLmNwcApAQCAtMjcsMTQ1ICsyNyw3NCBA
QAogI2luY2x1ZGUgIldLUGx1Z2luSW5mb3JtYXRpb24uaCIKIAogI2luY2x1ZGUgIkFQSVN0cmlu
Zy5oIgotI2luY2x1ZGUgIlBsdWdpbkluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV0tTaGFyZWRB
UElDYXN0LmgiCiAKIFdLU3RyaW5nUmVmIFdLUGx1Z2luSW5mb3JtYXRpb25CdW5kbGVJZGVudGlm
aWVyS2V5KCkKIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBzdGF0aWMg
QVBJOjpTdHJpbmcmIGtleSA9IEFQSTo6U3RyaW5nOjpjcmVhdGUoV2ViS2l0OjpwbHVnaW5JbmZv
cm1hdGlvbkJ1bmRsZUlkZW50aWZpZXJLZXkoKSkubGVha1JlZigpOwotICAgIHJldHVybiBXZWJL
aXQ6OnRvQVBJKCZrZXkpOwotI2Vsc2UKICAgICByZXR1cm4gMDsKLSNlbmRpZgogfQogCiBXS1N0
cmluZ1JlZiBXS1BsdWdpbkluZm9ybWF0aW9uQnVuZGxlVmVyc2lvbktleSgpCiB7Ci0jaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgc3RhdGljIEFQSTo6U3RyaW5nJiBrZXkgPSBB
UEk6OlN0cmluZzo6Y3JlYXRlKFdlYktpdDo6cGx1Z2luSW5mb3JtYXRpb25CdW5kbGVWZXJzaW9u
S2V5KCkpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgma2V5KTsKLSNlbHNl
CiAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKIH0KIAogV0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1h
dGlvbkJ1bmRsZVNob3J0VmVyc2lvbktleSgpCiB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCi0gICAgc3RhdGljIEFQSTo6U3RyaW5nJiBrZXkgPSBBUEk6OlN0cmluZzo6Y3JlYXRl
KFdlYktpdDo6cGx1Z2luSW5mb3JtYXRpb25CdW5kbGVTaG9ydFZlcnNpb25LZXkoKSkubGVha1Jl
ZigpOwotICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZrZXkpOwotI2Vsc2UKICAgICByZXR1cm4g
MDsKLSNlbmRpZgogfQogCiBXS1N0cmluZ1JlZiBXS1BsdWdpbkluZm9ybWF0aW9uUGF0aEtleSgp
CiB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgc3RhdGljIEFQSTo6U3Ry
aW5nJiBrZXkgPSBBUEk6OlN0cmluZzo6Y3JlYXRlKFdlYktpdDo6cGx1Z2luSW5mb3JtYXRpb25Q
YXRoS2V5KCkpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgma2V5KTsKLSNl
bHNlCiAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKIH0KIAogV0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZv
cm1hdGlvbkRpc3BsYXlOYW1lS2V5KCkKIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKLSAgICBzdGF0aWMgQVBJOjpTdHJpbmcmIGtleSA9IEFQSTo6U3RyaW5nOjpjcmVhdGUoV2Vi
S2l0OjpwbHVnaW5JbmZvcm1hdGlvbkRpc3BsYXlOYW1lS2V5KCkpLmxlYWtSZWYoKTsKLSAgICBy
ZXR1cm4gV2ViS2l0Ojp0b0FQSSgma2V5KTsKLSNlbHNlCiAgICAgcmV0dXJuIDA7Ci0jZW5kaWYK
IH0KIAogV0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlvbkRlZmF1bHRMb2FkUG9saWN5S2V5
KCkKIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBzdGF0aWMgQVBJOjpT
dHJpbmcmIGtleSA9IEFQSTo6U3RyaW5nOjpjcmVhdGUoV2ViS2l0OjpwbHVnaW5JbmZvcm1hdGlv
bkRlZmF1bHRMb2FkUG9saWN5S2V5KCkpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gV2ViS2l0Ojp0
b0FQSSgma2V5KTsKLSNlbHNlCiAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKIH0KIAogV0tTdHJpbmdS
ZWYgV0tQbHVnaW5JbmZvcm1hdGlvblVwZGF0ZVBhc3RMYXN0QmxvY2tlZFZlcnNpb25Jc0tub3du
QXZhaWxhYmxlS2V5KCkKIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBz
dGF0aWMgQVBJOjpTdHJpbmcmIGtleSA9IEFQSTo6U3RyaW5nOjpjcmVhdGUoV2ViS2l0OjpwbHVn
aW5JbmZvcm1hdGlvblVwZGF0ZVBhc3RMYXN0QmxvY2tlZFZlcnNpb25Jc0tub3duQXZhaWxhYmxl
S2V5KCkpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgma2V5KTsKLSNlbHNl
CiAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKIH0KIAogV0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1h
dGlvbkhhc1NhbmRib3hQcm9maWxlS2V5KCkKIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLSAgICBzdGF0aWMgQVBJOjpTdHJpbmcmIGtleSA9IEFQSTo6U3RyaW5nOjpjcmVhdGUo
V2ViS2l0OjpwbHVnaW5JbmZvcm1hdGlvbkhhc1NhbmRib3hQcm9maWxlS2V5KCkpLmxlYWtSZWYo
KTsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgma2V5KTsKLSNlbHNlCiAgICAgcmV0dXJuIDA7
Ci0jZW5kaWYKIH0KIAogV0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlvbkZyYW1lVVJMS2V5
KCkKIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBzdGF0aWMgQVBJOjpT
dHJpbmcmIGtleSA9IEFQSTo6U3RyaW5nOjpjcmVhdGUoV2ViS2l0OjpwbHVnaW5JbmZvcm1hdGlv
bkZyYW1lVVJMS2V5KCkpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgma2V5
KTsKLSNlbHNlCiAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKIH0KIAogV0tTdHJpbmdSZWYgV0tQbHVn
aW5JbmZvcm1hdGlvbk1JTUVUeXBlS2V5KCkKIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLSAgICBzdGF0aWMgQVBJOjpTdHJpbmcmIGtleSA9IEFQSTo6U3RyaW5nOjpjcmVhdGUo
V2ViS2l0OjpwbHVnaW5JbmZvcm1hdGlvbk1JTUVUeXBlS2V5KCkpLmxlYWtSZWYoKTsKLSAgICBy
ZXR1cm4gV2ViS2l0Ojp0b0FQSSgma2V5KTsKLSNlbHNlCiAgICAgcmV0dXJuIDA7Ci0jZW5kaWYK
IH0KIAogV0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlvblBhZ2VVUkxLZXkoKQogewotI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHN0YXRpYyBBUEk6OlN0cmluZyYga2V5
ID0gQVBJOjpTdHJpbmc6OmNyZWF0ZShXZWJLaXQ6OnBsdWdpbkluZm9ybWF0aW9uUGFnZVVSTEtl
eSgpKS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJmtleSk7Ci0jZWxzZQog
ICAgIHJldHVybiAwOwotI2VuZGlmCiB9CiAKIFdLU3RyaW5nUmVmIFdLUGx1Z2luSW5mb3JtYXRp
b25QbHVnaW5zcGFnZUF0dHJpYnV0ZVVSTEtleSgpCiB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCi0gICAgc3RhdGljIEFQSTo6U3RyaW5nJiBrZXkgPSBBUEk6OlN0cmluZzo6Y3Jl
YXRlKFdlYktpdDo6cGx1Z2luSW5mb3JtYXRpb25QbHVnaW5zcGFnZUF0dHJpYnV0ZVVSTEtleSgp
KS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJmtleSk7Ci0jZWxzZQogICAg
IHJldHVybiAwOwotI2VuZGlmCiB9CiAKIFdLU3RyaW5nUmVmIFdLUGx1Z2luSW5mb3JtYXRpb25Q
bHVnaW5VUkxLZXkoKQogewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHN0
YXRpYyBBUEk6OlN0cmluZyYga2V5ID0gQVBJOjpTdHJpbmc6OmNyZWF0ZShXZWJLaXQ6OnBsdWdp
bkluZm9ybWF0aW9uUGx1Z2luVVJMS2V5KCkpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gV2ViS2l0
Ojp0b0FQSSgma2V5KTsKLSNlbHNlCiAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKIH0KIAogV0tTdHJp
bmdSZWYgV0tQbHVnSW5JbmZvcm1hdGlvblJlcGxhY2VtZW50T2JzY3VyZWRLZXkoKQogewotI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHN0YXRpYyBBUEk6OlN0cmluZyYga2V5
ID0gQVBJOjpTdHJpbmc6OmNyZWF0ZShXZWJLaXQ6OnBsdWdJbkluZm9ybWF0aW9uUmVwbGFjZW1l
bnRPYnNjdXJlZEtleSgpKS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJmtl
eSk7Ci0jZWxzZQogICAgIHJldHVybiAwOwotI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9QbHVnaW5zL05QSWRlbnRpZmllckRhdGEuY3BwIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvUGx1Z2lucy9OUElkZW50aWZpZXJEYXRhLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYTI5Yjg0YzQxNzRhNjUxOGJiNThlYzYzNGE2Y2IxOTY4MmRmMzNkMi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9QbHVnaW5zL05QSWRlbnRpZmllckRhdGEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
OTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJO
UElkZW50aWZpZXJEYXRhLmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQot
I2luY2x1ZGUgIkRlY29kZXIuaCIKLSNpbmNsdWRlICJFbmNvZGVyLmgiCi0jaW5jbHVkZSAiV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9JZGVudGlmaWVyUmVwLmg+
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLU5QSWRl
bnRpZmllckRhdGE6Ok5QSWRlbnRpZmllckRhdGEoKQotICAgIDogbV9pc1N0cmluZyhmYWxzZSkK
LSAgICAsIG1fbnVtYmVyKDApCi17Ci19Ci0KLQotTlBJZGVudGlmaWVyRGF0YSBOUElkZW50aWZp
ZXJEYXRhOjpmcm9tTlBJZGVudGlmaWVyKE5QSWRlbnRpZmllciBucElkZW50aWZpZXIpCi17Ci0g
ICAgTlBJZGVudGlmaWVyRGF0YSBucElkZW50aWZpZXJEYXRhOwotCi0gICAgSWRlbnRpZmllclJl
cCogaWRlbnRpZmllclJlcCA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihucElkZW50aWZp
ZXIpOwotICAgIG5wSWRlbnRpZmllckRhdGEubV9pc1N0cmluZyA9IGlkZW50aWZpZXJSZXAtPmlz
U3RyaW5nKCk7Ci0KLSAgICBpZiAobnBJZGVudGlmaWVyRGF0YS5tX2lzU3RyaW5nKQotICAgICAg
ICBucElkZW50aWZpZXJEYXRhLm1fc3RyaW5nID0gaWRlbnRpZmllclJlcC0+c3RyaW5nKCk7Ci0g
ICAgZWxzZQotICAgICAgICBucElkZW50aWZpZXJEYXRhLm1fbnVtYmVyID0gaWRlbnRpZmllclJl
cC0+bnVtYmVyKCk7Ci0KLSAgICByZXR1cm4gbnBJZGVudGlmaWVyRGF0YTsKLX0KLQotTlBJZGVu
dGlmaWVyIE5QSWRlbnRpZmllckRhdGE6OmNyZWF0ZU5QSWRlbnRpZmllcigpIGNvbnN0Ci17Ci0g
ICAgaWYgKG1faXNTdHJpbmcpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUElkZW50aWZp
ZXI+KElkZW50aWZpZXJSZXA6OmdldChtX3N0cmluZy5kYXRhKCkpKTsKLSAgICAKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyPihJZGVudGlmaWVyUmVwOjpnZXQobV9udW1iZXIp
KTsKLX0KLQotdm9pZCBOUElkZW50aWZpZXJEYXRhOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9pc1N0cmluZzsKLSAgICBpZiAobV9pc1N0
cmluZykKLSAgICAgICAgZW5jb2RlciA8PCBtX3N0cmluZzsKLSAgICBlbHNlCi0gICAgICAgIGVu
Y29kZXIgPDwgbV9udW1iZXI7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8TlBJZGVudGlmaWVyRGF0YT4g
TlBJZGVudGlmaWVyRGF0YTo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBO
UElkZW50aWZpZXJEYXRhIHJlc3VsdDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5t
X2lzU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgCi0gICAg
aWYgKHJlc3VsdC5tX2lzU3RyaW5nKSB7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
dWx0Lm1fc3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
bV9udW1iZXIpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5z
L05QSWRlbnRpZmllckRhdGEuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTlBJZGVu
dGlmaWVyRGF0YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGFhMjRmMTEwMTZm
YTE2Y2UxOWNlNTQzODBjNGQ3OTQ0NGZhZjkyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTlBJZGVudGlm
aWVyRGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRl
IDxXZWJDb3JlL25wcnVudGltZV9pbnRlcm5hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIElQQyB7Ci1jbGFzcyBEZWNvZGVyOwotY2xhc3MgRW5jb2RlcjsK
LX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIE5QSWRlbnRpZmllckRhdGEgewotcHVi
bGljOgotICAgIE5QSWRlbnRpZmllckRhdGEoKTsKLSAgICAKLSAgICBzdGF0aWMgTlBJZGVudGlm
aWVyRGF0YSBmcm9tTlBJZGVudGlmaWVyKE5QSWRlbnRpZmllcik7Ci0gICAgTlBJZGVudGlmaWVy
IGNyZWF0ZU5QSWRlbnRpZmllcigpIGNvbnN0OwotCi0gICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNv
ZGVyJikgY29uc3Q7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TlBJZGVudGlmaWVyRGF0YT4g
ZGVjb2RlKElQQzo6RGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIGJvb2wgbV9pc1N0cmluZzsK
LSAgICBDU3RyaW5nIG1fc3RyaW5nOwotICAgIGludCBtX251bWJlcjsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL05QT2JqZWN0TWVzc2FnZVJl
Y2VpdmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTlBPYmplY3RNZXNzYWdl
UmVjZWl2ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWY5MDQ1NWUyN2Y2
Y2Y5YzRkYTk4ZGMyZWQ4MWVmZmMxZjE2ZDA2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTlBPYmplY3RN
ZXNzYWdlUmVjZWl2ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjMxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTlBPYmplY3RNZXNzYWdlUmVj
ZWl2ZXIuaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAi
TlBJZGVudGlmaWVyRGF0YS5oIgotI2luY2x1ZGUgIk5QUmVtb3RlT2JqZWN0TWFwLmgiCi0jaW5j
bHVkZSAiTlBSdW50aW1lVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiTlBWYXJpYW50RGF0YS5oIgot
I2luY2x1ZGUgIlBsdWdpbi5oIgotI2luY2x1ZGUgIlBsdWdpbkNvbnRyb2xsZXIuaCIKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLU5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyOjpOUE9iamVjdE1lc3Nh
Z2VSZWNlaXZlcihOUFJlbW90ZU9iamVjdE1hcCogbnBSZW1vdGVPYmplY3RNYXAsIFBsdWdpbiog
cGx1Z2luLCB1aW50NjRfdCBucE9iamVjdElELCBOUE9iamVjdCogbnBPYmplY3QpCi0gICAgOiBt
X25wUmVtb3RlT2JqZWN0TWFwKG5wUmVtb3RlT2JqZWN0TWFwKQotICAgICwgbV9wbHVnaW4ocGx1
Z2luKQotICAgICwgbV9ucE9iamVjdElEKG5wT2JqZWN0SUQpCi0gICAgLCBtX25wT2JqZWN0KG5w
T2JqZWN0KQotewotICAgIHJldGFpbk5QT2JqZWN0KG1fbnBPYmplY3QpOwotfQotCi1OUE9iamVj
dE1lc3NhZ2VSZWNlaXZlcjo6fk5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyKCkKLXsKLSAgICBtX25w
UmVtb3RlT2JqZWN0TWFwLT51bnJlZ2lzdGVyTlBPYmplY3QobV9ucE9iamVjdElEKTsKLQotICAg
IHJlbGVhc2VOUE9iamVjdChtX25wT2JqZWN0KTsKLX0KLQotdm9pZCBOUE9iamVjdE1lc3NhZ2VS
ZWNlaXZlcjo6ZGVhbGxvY2F0ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCi17Ci0gICAgZGVsZXRlIHRoaXM7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
LX0KLQotdm9pZCBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6aGFzTWV0aG9kKGNvbnN0IE5QSWRl
bnRpZmllckRhdGEmIG1ldGhvZE5hbWVEYXRhLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmIChtX3BsdWdpbi0+aXNCZWluZ0Rlc3Ry
b3llZCgpIHx8ICFtX25wT2JqZWN0LT5fY2xhc3MtPmhhc01ldGhvZCkKLSAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKLQotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fbnBP
YmplY3QtPl9jbGFzcy0+aGFzTWV0aG9kKG1fbnBPYmplY3QsIG1ldGhvZE5hbWVEYXRhLmNyZWF0
ZU5QSWRlbnRpZmllcigpKSk7Ci19Ci0KLXZvaWQgTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6Omlu
dm9rZShjb25zdCBOUElkZW50aWZpZXJEYXRhJiBtZXRob2ROYW1lRGF0YSwgY29uc3QgVmVjdG9y
PE5QVmFyaWFudERhdGE+JiBhcmd1bWVudHNEYXRhLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wsIE5QVmFyaWFudERhdGEmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKG1f
cGx1Z2luLT5pc0JlaW5nRGVzdHJveWVkKCkgfHwgIW1fbnBPYmplY3QtPl9jbGFzcy0+aW52b2tl
KQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UsIHsgfSk7Ci0KLSAgICBW
ZWN0b3I8TlBWYXJpYW50PiBhcmd1bWVudHM7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBh
cmd1bWVudHNEYXRhLnNpemUoKTsgKytpKQotICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fbnBS
ZW1vdGVPYmplY3RNYXAtPm5wVmFyaWFudERhdGFUb05QVmFyaWFudChhcmd1bWVudHNEYXRhW2ld
LCBtX3BsdWdpbikpOwotCi0gICAgTlBWYXJpYW50IHJlc3VsdDsKLSAgICBWT0lEX1RPX05QVkFS
SUFOVChyZXN1bHQpOwotCi0gICAgUGx1Z2luQ29udHJvbGxlcjo6UGx1Z2luRGVzdHJ1Y3Rpb25Q
cm90ZWN0b3IgcHJvdGVjdG9yKG1fcGx1Z2luLT5jb250cm9sbGVyKCkpOwotCi0gICAgTlBWYXJp
YW50RGF0YSByZXN1bHREYXRhOwotICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5f
Y2xhc3MtPmludm9rZShtX25wT2JqZWN0LCBtZXRob2ROYW1lRGF0YS5jcmVhdGVOUElkZW50aWZp
ZXIoKSwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1lbnRzLnNpemUoKSwgJnJlc3VsdCk7Ci0gICAg
aWYgKHJldHVyblZhbHVlKSB7Ci0gICAgICAgIC8vIENvbnZlcnQgdGhlIE5QVmFyaWFudCB0byBh
biBOUFZhcmlhbnREYXRhLgotICAgICAgICByZXN1bHREYXRhID0gbV9ucFJlbW90ZU9iamVjdE1h
cC0+bnBWYXJpYW50VG9OUFZhcmlhbnREYXRhKHJlc3VsdCwgbV9wbHVnaW4pOwotICAgIH0KLQot
ICAgIC8vIFJlbGVhc2UgYWxsIGFyZ3VtZW50cy4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGFyZ3VtZW50c0RhdGEuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlbGVhc2VOUFZhcmlhbnRWYWx1
ZSgmYXJndW1lbnRzW2ldKTsKLSAgICAKLSAgICAvLyBBbmQgcmVsZWFzZSB0aGUgcmVzdWx0Lgot
ICAgIHJlbGVhc2VOUFZhcmlhbnRWYWx1ZSgmcmVzdWx0KTsKLSAgICBjb21wbGV0aW9uSGFuZGxl
cihyZXR1cm5WYWx1ZSwgV1RGTW92ZShyZXN1bHREYXRhKSk7Ci19Ci0KLXZvaWQgTlBPYmplY3RN
ZXNzYWdlUmVjZWl2ZXI6Omludm9rZURlZmF1bHQoY29uc3QgVmVjdG9yPE5QVmFyaWFudERhdGE+
JiBhcmd1bWVudHNEYXRhLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wsIE5QVmFyaWFudERh
dGEmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKG1fcGx1Z2luLT5pc0JlaW5n
RGVzdHJveWVkKCkgfHwgIW1fbnBPYmplY3QtPl9jbGFzcy0+aW52b2tlRGVmYXVsdCkKLSAgICAg
ICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlLCB7IH0pOwotCi0gICAgVmVjdG9yPE5Q
VmFyaWFudD4gYXJndW1lbnRzOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRz
RGF0YS5zaXplKCk7ICsraSkKLSAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX25wUmVtb3RlT2Jq
ZWN0TWFwLT5ucFZhcmlhbnREYXRhVG9OUFZhcmlhbnQoYXJndW1lbnRzRGF0YVtpXSwgbV9wbHVn
aW4pKTsKLQotICAgIE5QVmFyaWFudCByZXN1bHQ7Ci0gICAgVk9JRF9UT19OUFZBUklBTlQocmVz
dWx0KTsKLQotICAgIFBsdWdpbkNvbnRyb2xsZXI6OlBsdWdpbkRlc3RydWN0aW9uUHJvdGVjdG9y
IHByb3RlY3RvcihtX3BsdWdpbi0+Y29udHJvbGxlcigpKTsKLQotICAgIE5QVmFyaWFudERhdGEg
cmVzdWx0RGF0YTsKLSAgICBib29sIHJldHVyblZhbHVlID0gbV9ucE9iamVjdC0+X2NsYXNzLT5p
bnZva2VEZWZhdWx0KG1fbnBPYmplY3QsIGFyZ3VtZW50cy5kYXRhKCksIGFyZ3VtZW50cy5zaXpl
KCksICZyZXN1bHQpOwotICAgIGlmIChyZXR1cm5WYWx1ZSkgewotICAgICAgICAvLyBDb252ZXJ0
IHRoZSBOUFZhcmlhbnQgdG8gYW4gTlBWYXJpYW50RGF0YS4KLSAgICAgICAgcmVzdWx0RGF0YSA9
IG1fbnBSZW1vdGVPYmplY3RNYXAtPm5wVmFyaWFudFRvTlBWYXJpYW50RGF0YShyZXN1bHQsIG1f
cGx1Z2luKTsKLSAgICB9Ci0KLSAgICAvLyBSZWxlYXNlIGFsbCBhcmd1bWVudHMuCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudHNEYXRhLnNpemUoKTsgKytpKQotICAgICAgICBy
ZWxlYXNlTlBWYXJpYW50VmFsdWUoJmFyZ3VtZW50c1tpXSk7Ci0gICAgCi0gICAgLy8gQW5kIHJl
bGVhc2UgdGhlIHJlc3VsdC4KLSAgICByZWxlYXNlTlBWYXJpYW50VmFsdWUoJnJlc3VsdCk7Ci0g
ICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUsIFdURk1vdmUocmVzdWx0RGF0YSkpOwot
fQotCi12b2lkIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyOjpoYXNQcm9wZXJ0eShjb25zdCBOUElk
ZW50aWZpZXJEYXRhJiBwcm9wZXJ0eU5hbWVEYXRhLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmIChtX3BsdWdpbi0+aXNCZWluZ0Rl
c3Ryb3llZCgpIHx8ICFtX25wT2JqZWN0LT5fY2xhc3MtPmhhc1Byb3BlcnR5KQotICAgICAgICBy
ZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwotCi0gICAgY29tcGxldGlvbkhhbmRsZXIo
bV9ucE9iamVjdC0+X2NsYXNzLT5oYXNQcm9wZXJ0eShtX25wT2JqZWN0LCBwcm9wZXJ0eU5hbWVE
YXRhLmNyZWF0ZU5QSWRlbnRpZmllcigpKSk7Ci19Ci0KLXZvaWQgTlBPYmplY3RNZXNzYWdlUmVj
ZWl2ZXI6OmdldFByb3BlcnR5KGNvbnN0IE5QSWRlbnRpZmllckRhdGEmIHByb3BlcnR5TmFtZURh
dGEsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCwgTlBWYXJpYW50RGF0YSYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAobV9wbHVnaW4tPmlzQmVpbmdEZXN0cm95ZWQoKSB8
fCAhbV9ucE9iamVjdC0+X2NsYXNzLT5nZXRQcm9wZXJ0eSkKLSAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb25IYW5kbGVyKGZhbHNlLCB7IH0pOwotCi0gICAgTlBWYXJpYW50IHJlc3VsdDsKLSAgICBW
T0lEX1RPX05QVkFSSUFOVChyZXN1bHQpOwotCi0gICAgUGx1Z2luQ29udHJvbGxlcjo6UGx1Z2lu
RGVzdHJ1Y3Rpb25Qcm90ZWN0b3IgcHJvdGVjdG9yKG1fcGx1Z2luLT5jb250cm9sbGVyKCkpOwot
Ci0gICAgYm9vbCByZXR1cm5WYWx1ZSA9IG1fbnBPYmplY3QtPl9jbGFzcy0+Z2V0UHJvcGVydHko
bV9ucE9iamVjdCwgcHJvcGVydHlOYW1lRGF0YS5jcmVhdGVOUElkZW50aWZpZXIoKSwgJnJlc3Vs
dCk7Ci0gICAgaWYgKCFyZXR1cm5WYWx1ZSkKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5k
bGVyKGZhbHNlLCB7IH0pOwotCi0KLSAgICBOUFZhcmlhbnREYXRhIHJlc3VsdERhdGEgPSBtX25w
UmVtb3RlT2JqZWN0TWFwLT5ucFZhcmlhbnRUb05QVmFyaWFudERhdGEocmVzdWx0LCBtX3BsdWdp
bik7Ci0KLSAgICByZWxlYXNlTlBWYXJpYW50VmFsdWUoJnJlc3VsdCk7Ci0gICAgY29tcGxldGlv
bkhhbmRsZXIodHJ1ZSwgV1RGTW92ZShyZXN1bHREYXRhKSk7Ci19Ci0KLXZvaWQgTlBPYmplY3RN
ZXNzYWdlUmVjZWl2ZXI6OnNldFByb3BlcnR5KGNvbnN0IE5QSWRlbnRpZmllckRhdGEmIHByb3Bl
cnR5TmFtZURhdGEsIGNvbnN0IE5QVmFyaWFudERhdGEmIHByb3BlcnR5VmFsdWVEYXRhLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlm
IChtX3BsdWdpbi0+aXNCZWluZ0Rlc3Ryb3llZCgpIHx8ICFtX25wT2JqZWN0LT5fY2xhc3MtPnNl
dFByb3BlcnR5KQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwotCi0g
ICAgTlBWYXJpYW50IHByb3BlcnR5VmFsdWUgPSBtX25wUmVtb3RlT2JqZWN0TWFwLT5ucFZhcmlh
bnREYXRhVG9OUFZhcmlhbnQocHJvcGVydHlWYWx1ZURhdGEsIG1fcGx1Z2luKTsKLQotICAgIFBs
dWdpbkNvbnRyb2xsZXI6OlBsdWdpbkRlc3RydWN0aW9uUHJvdGVjdG9yIHByb3RlY3RvcihtX3Bs
dWdpbi0+Y29udHJvbGxlcigpKTsKLQotICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0
LT5fY2xhc3MtPnNldFByb3BlcnR5KG1fbnBPYmplY3QsIHByb3BlcnR5TmFtZURhdGEuY3JlYXRl
TlBJZGVudGlmaWVyKCksICZwcm9wZXJ0eVZhbHVlKTsKLQotICAgIHJlbGVhc2VOUFZhcmlhbnRW
YWx1ZSgmcHJvcGVydHlWYWx1ZSk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUp
OwotfQotCi12b2lkIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyOjpyZW1vdmVQcm9wZXJ0eShjb25z
dCBOUElkZW50aWZpZXJEYXRhJiBwcm9wZXJ0eU5hbWVEYXRhLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmIChtX3BsdWdpbi0+aXNC
ZWluZ0Rlc3Ryb3llZCgpIHx8ICFtX25wT2JqZWN0LT5fY2xhc3MtPnJlbW92ZVByb3BlcnR5KQot
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwotCi0gICAgY29tcGxldGlv
bkhhbmRsZXIobV9ucE9iamVjdC0+X2NsYXNzLT5yZW1vdmVQcm9wZXJ0eShtX25wT2JqZWN0LCBw
cm9wZXJ0eU5hbWVEYXRhLmNyZWF0ZU5QSWRlbnRpZmllcigpKSk7Ci19Ci0KLXZvaWQgTlBPYmpl
Y3RNZXNzYWdlUmVjZWl2ZXI6OmVudW1lcmF0ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2ws
IFZlY3RvcjxOUElkZW50aWZpZXJEYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAg
ICBpZiAobV9wbHVnaW4tPmlzQmVpbmdEZXN0cm95ZWQoKSB8fCAhTlBfQ0xBU1NfU1RSVUNUX1ZF
UlNJT05fSEFTX0VOVU0obV9ucE9iamVjdC0+X2NsYXNzKSB8fCAhbV9ucE9iamVjdC0+X2NsYXNz
LT5lbnVtZXJhdGUpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSwgeyB9
KTsKLQotICAgIE5QSWRlbnRpZmllciogaWRlbnRpZmllcnMgPSAwOwotICAgIHVpbnQzMl90IGlk
ZW50aWZpZXJDb3VudCA9IDA7Ci0KLSAgICBib29sIHJldHVyblZhbHVlID0gbV9ucE9iamVjdC0+
X2NsYXNzLT5lbnVtZXJhdGUobV9ucE9iamVjdCwgJmlkZW50aWZpZXJzLCAmaWRlbnRpZmllckNv
dW50KTsKLSAgICBpZiAoIXJldHVyblZhbHVlKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIoZmFsc2UsIHsgfSk7Ci0KLSAgICBWZWN0b3I8V2ViS2l0OjpOUElkZW50aWZpZXJEYXRh
PiBpZGVudGlmaWVyc0RhdGE7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGlkZW50aWZp
ZXJDb3VudDsgKytpKQotICAgICAgICBpZGVudGlmaWVyc0RhdGEuYXBwZW5kKE5QSWRlbnRpZmll
ckRhdGE6OmZyb21OUElkZW50aWZpZXIoaWRlbnRpZmllcnNbaV0pKTsKLQotICAgIG5wbk1lbUZy
ZWUoaWRlbnRpZmllcnMpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKHRydWUsIFdURk1vdmUoaWRl
bnRpZmllcnNEYXRhKSk7Ci19Ci0KLXZvaWQgTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6OmNvbnN0
cnVjdChjb25zdCBWZWN0b3I8TlBWYXJpYW50RGF0YT4mIGFyZ3VtZW50c0RhdGEsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCwgTlBWYXJpYW50RGF0YSYmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKLXsKLSAgICBpZiAobV9wbHVnaW4tPmlzQmVpbmdEZXN0cm95ZWQoKSB8fCAhTlBfQ0xBU1Nf
U1RSVUNUX1ZFUlNJT05fSEFTX0NUT1IobV9ucE9iamVjdC0+X2NsYXNzKSB8fCAhbV9ucE9iamVj
dC0+X2NsYXNzLT5jb25zdHJ1Y3QpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSwgeyB9KTsKLQotICAgIFZlY3RvcjxOUFZhcmlhbnQ+IGFyZ3VtZW50czsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50c0RhdGEuc2l6ZSgpOyArK2kpCi0gICAgICAgIGFy
Z3VtZW50cy5hcHBlbmQobV9ucFJlbW90ZU9iamVjdE1hcC0+bnBWYXJpYW50RGF0YVRvTlBWYXJp
YW50KGFyZ3VtZW50c0RhdGFbaV0sIG1fcGx1Z2luKSk7Ci0KLSAgICBOUFZhcmlhbnQgcmVzdWx0
OwotICAgIFZPSURfVE9fTlBWQVJJQU5UKHJlc3VsdCk7Ci0KLSAgICBQbHVnaW5Db250cm9sbGVy
OjpQbHVnaW5EZXN0cnVjdGlvblByb3RlY3RvciBwcm90ZWN0b3IobV9wbHVnaW4tPmNvbnRyb2xs
ZXIoKSk7Ci0KLSAgICBib29sIHJldHVyblZhbHVlID0gbV9ucE9iamVjdC0+X2NsYXNzLT5jb25z
dHJ1Y3QobV9ucE9iamVjdCwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1lbnRzLnNpemUoKSwgJnJl
c3VsdCk7Ci0gICAgTlBWYXJpYW50RGF0YSByZXN1bHREYXRhOwotICAgIGlmIChyZXR1cm5WYWx1
ZSkKLSAgICAgICAgcmVzdWx0RGF0YSA9IG1fbnBSZW1vdGVPYmplY3RNYXAtPm5wVmFyaWFudFRv
TlBWYXJpYW50RGF0YShyZXN1bHQsIG1fcGx1Z2luKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYXJndW1lbnRzRGF0YS5zaXplKCk7ICsraSkKLSAgICAgICAgcmVsZWFzZU5QVmFyaWFu
dFZhbHVlKCZhcmd1bWVudHNbaV0pOwotICAgIAotICAgIHJlbGVhc2VOUFZhcmlhbnRWYWx1ZSgm
cmVzdWx0KTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSwgV1RGTW92ZShyZXN1
bHREYXRhKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1BsdWdpbnMvTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1BsdWdpbnMvTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYmYyNWU4MGVhN2Y0MjE1ZGMzYTc1YmZiYzQxMzg3NGNhMTk4M2FhZC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9QbHVnaW5zL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlIDxX
ZWJDb3JlL25wcnVudGltZS5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgTlBJZGVudGlmaWVyRGF0YTsKLWNsYXNzIE5QUmVtb3Rl
T2JqZWN0TWFwOwotY2xhc3MgTlBWYXJpYW50RGF0YTsKLWNsYXNzIFBsdWdpbjsKLQotY2xhc3Mg
TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyKTsKLQotcHVi
bGljOgotICAgIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyKE5QUmVtb3RlT2JqZWN0TWFwKiwgUGx1
Z2luKiwgdWludDY0X3QgbnBPYmplY3RJRCwgTlBPYmplY3QqKTsKLSAgICB+TlBPYmplY3RNZXNz
YWdlUmVjZWl2ZXIoKTsKLQotICAgIGJvb2wgZGlkUmVjZWl2ZVN5bmNOUE9iamVjdE1lc3NhZ2VS
ZWNlaXZlck1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgVW5pcXVlUmVm
PElQQzo6RW5jb2Rlcj4mKTsKLQotICAgIFBsdWdpbiogcGx1Z2luKCkgY29uc3QgeyByZXR1cm4g
bV9wbHVnaW47IH0KLSAgICBOUE9iamVjdCogbnBPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX25w
T2JqZWN0OyB9Ci0gICAgCi1wcml2YXRlOgotICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMuCi0gICAg
dm9pZCBkZWFsbG9jYXRlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCBo
YXNNZXRob2QoY29uc3QgTlBJZGVudGlmaWVyRGF0YSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYpOwotICAgIHZvaWQgaW52b2tlKGNvbnN0IE5QSWRlbnRpZmllckRhdGEmLCBjb25z
dCBWZWN0b3I8TlBWYXJpYW50RGF0YT4mIGFyZ3VtZW50c0RhdGEsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCwgTlBWYXJpYW50RGF0YSYmKT4mJik7Ci0gICAgdm9pZCBpbnZva2VEZWZhdWx0
KGNvbnN0IFZlY3RvcjxOUFZhcmlhbnREYXRhPiYgYXJndW1lbnRzRGF0YSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sLCBOUFZhcmlhbnREYXRhJiYpPiYmKTsKLSAgICB2b2lkIGhhc1Byb3Bl
cnR5KGNvbnN0IE5QSWRlbnRpZmllckRhdGEmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wp
PiYmKTsKLSAgICB2b2lkIGdldFByb3BlcnR5KGNvbnN0IE5QSWRlbnRpZmllckRhdGEmLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wsIE5QVmFyaWFudERhdGEmJik+JiYpOwotICAgIHZvaWQg
c2V0UHJvcGVydHkoY29uc3QgTlBJZGVudGlmaWVyRGF0YSYsIGNvbnN0IE5QVmFyaWFudERhdGEm
IHByb3BlcnR5VmFsdWVEYXRhLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKLSAg
ICB2b2lkIHJlbW92ZVByb3BlcnR5KGNvbnN0IE5QSWRlbnRpZmllckRhdGEmLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKLSAgICB2b2lkIGVudW1lcmF0ZShDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wsIFZlY3RvcjxOUElkZW50aWZpZXJEYXRhPiYmKT4mJik7Ci0gICAgdm9p
ZCBjb25zdHJ1Y3QoY29uc3QgVmVjdG9yPE5QVmFyaWFudERhdGE+JiBhcmd1bWVudHNEYXRhLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wsIE5QVmFyaWFudERhdGEmJik+JiYpOwotCi0gICAg
TlBSZW1vdGVPYmplY3RNYXAqIG1fbnBSZW1vdGVPYmplY3RNYXA7Ci0gICAgUGx1Z2luKiBtX3Bs
dWdpbjsKLSAgICB1aW50NjRfdCBtX25wT2JqZWN0SUQ7Ci0gICAgTlBPYmplY3QqIG1fbnBPYmpl
Y3Q7Ci19OwotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Bs
dWdpbnMvTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9QbHVnaW5zL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLm1lc3NhZ2VzLmluCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmZmODg0ZmIyOWVlZmNjOTBhMjdhOWE1Njc5NDk5
ZmRkZmQxZDhkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIubWVz
c2FnZXMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0jIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
LQotbWVzc2FnZXMgLT4gTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIgTGVnYWN5UmVjZWl2ZXIgTm90
UmVmQ291bnRlZCB7Ci0gICAgRGVhbGxvY2F0ZSgpIC0+ICgpIFN5bmNocm9ub3VzCi0gICAgSGFz
TWV0aG9kKFdlYktpdDo6TlBJZGVudGlmaWVyRGF0YSBtZXRob2ROYW1lKSAtPiAoYm9vbCByZXR1
cm5WYWx1ZSkgU3luY2hyb25vdXMKLSAgICBJbnZva2UoV2ViS2l0OjpOUElkZW50aWZpZXJEYXRh
IG1ldGhvZE5hbWUsIFZlY3RvcjxXZWJLaXQ6Ok5QVmFyaWFudERhdGE+IGFyZ3VtZW50c0RhdGEp
IC0+IChib29sIHJldHVyblZhbHVlLCBXZWJLaXQ6Ok5QVmFyaWFudERhdGEgcmVzdWx0RGF0YSkg
U3luY2hyb25vdXMKLSAgICBJbnZva2VEZWZhdWx0KFZlY3RvcjxXZWJLaXQ6Ok5QVmFyaWFudERh
dGE+IGFyZ3VtZW50c0RhdGEpIC0+IChib29sIHJldHVyblZhbHVlLCBXZWJLaXQ6Ok5QVmFyaWFu
dERhdGEgcmVzdWx0RGF0YSkgU3luY2hyb25vdXMKLSAgICBIYXNQcm9wZXJ0eShXZWJLaXQ6Ok5Q
SWRlbnRpZmllckRhdGEgcHJvcGVydHlOYW1lKSAtPiAoYm9vbCByZXR1cm5WYWx1ZSkgU3luY2hy
b25vdXMKLSAgICBHZXRQcm9wZXJ0eShXZWJLaXQ6Ok5QSWRlbnRpZmllckRhdGEgcHJvcGVydHlO
YW1lKSAtPiAoYm9vbCByZXR1cm5WYWx1ZSwgV2ViS2l0OjpOUFZhcmlhbnREYXRhIHJlc3VsdERh
dGEpIFN5bmNocm9ub3VzCi0gICAgU2V0UHJvcGVydHkoV2ViS2l0OjpOUElkZW50aWZpZXJEYXRh
IHByb3BlcnR5TmFtZSwgV2ViS2l0OjpOUFZhcmlhbnREYXRhIHByb3BlcnR5VmFsdWVEYXRhKSAt
PiAoYm9vbCByZXR1cm5WYWx1ZSkgU3luY2hyb25vdXMKLSAgICBSZW1vdmVQcm9wZXJ0eShXZWJL
aXQ6Ok5QSWRlbnRpZmllckRhdGEgcHJvcGVydHlOYW1lKSAtPiAoYm9vbCByZXR1cm5WYWx1ZSkg
U3luY2hyb25vdXMKLSAgICBFbnVtZXJhdGUoKSAtPiAoYm9vbCByZXR1cm5WYWx1ZSwgVmVjdG9y
PFdlYktpdDo6TlBJZGVudGlmaWVyRGF0YT4gaWRlbnRpZmllcnNEYXRhKSBTeW5jaHJvbm91cwot
ICAgIENvbnN0cnVjdChWZWN0b3I8V2ViS2l0OjpOUFZhcmlhbnREYXRhPiBhcmd1bWVudHNEYXRh
KSAtPiAoYm9vbCByZXR1cm5WYWx1ZSwgV2ViS2l0OjpOUFZhcmlhbnREYXRhIHJlc3VsdERhdGEp
IFN5bmNocm9ub3VzCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvUGx1Z2lucy9OUE9iamVjdFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdp
bnMvTlBPYmplY3RQcm94eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZWM0
ZGMzZmVjNTBhN2MxYWQ3MjQ2MjIyN2IxNWZiNDIzNmY1ODIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9O
UE9iamVjdFByb3h5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1NyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5QT2JqZWN0UHJveHkuaCIKLQot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiQXJndW1lbnRDb2Rl
cnMuaCIKLSNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiTlBJZGVudGlmaWVyRGF0
YS5oIgotI2luY2x1ZGUgIk5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyTWVzc2FnZXMuaCIKLSNpbmNs
dWRlICJOUFJlbW90ZU9iamVjdE1hcC5oIgotI2luY2x1ZGUgIk5QUnVudGltZVV0aWxpdGllcy5o
IgotI2luY2x1ZGUgIk5QVmFyaWFudERhdGEuaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1OUE9i
amVjdFByb3h5KiBOUE9iamVjdFByb3h5OjpjcmVhdGUoTlBSZW1vdGVPYmplY3RNYXAqIG5wUmVt
b3RlT2JqZWN0TWFwLCBQbHVnaW4qIHBsdWdpbiwgdWludDY0X3QgbnBPYmplY3RJRCkKLXsKLSAg
ICBOUE9iamVjdFByb3h5KiBucE9iamVjdFByb3h5ID0gdG9OUE9iamVjdFByb3h5KGNyZWF0ZU5Q
T2JqZWN0KDAsIG5wQ2xhc3MoKSkpOwotICAgIG5wT2JqZWN0UHJveHktPmluaXRpYWxpemUobnBS
ZW1vdGVPYmplY3RNYXAsIHBsdWdpbiwgbnBPYmplY3RJRCk7Ci0KLSAgICByZXR1cm4gbnBPYmpl
Y3RQcm94eTsKLX0KLQotTlBPYmplY3RQcm94eTo6TlBPYmplY3RQcm94eSgpCi0gICAgOiBtX25w
UmVtb3RlT2JqZWN0TWFwKDApCi0gICAgLCBtX3BsdWdpbigwKQotICAgICwgbV9ucE9iamVjdElE
KDApCi17Ci19Ci0KLU5QT2JqZWN0UHJveHk6On5OUE9iamVjdFByb3h5KCkKLXsKLSAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKCFtX25wUmVtb3RlT2JqZWN0TWFwKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX25wUmVtb3RlT2JqZWN0TWFwLT5ucE9iamVjdFByb3h5
RGVzdHJveWVkKHRoaXMpOwotICAgIG1fbnBSZW1vdGVPYmplY3RNYXAtPmNvbm5lY3Rpb24oKS0+
c2VuZFN5bmMoTWVzc2FnZXM6Ok5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyOjpEZWFsbG9jYXRlKCks
IE1lc3NhZ2VzOjpOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6RGVhbGxvY2F0ZTo6UmVwbHkoKSwg
bV9ucE9iamVjdElEKTsKLX0KLQotYm9vbCBOUE9iamVjdFByb3h5Ojppc05QT2JqZWN0UHJveHko
TlBPYmplY3QqIG5wT2JqZWN0KQotewotICAgIHJldHVybiBucE9iamVjdC0+X2NsYXNzID09IG5w
Q2xhc3MoKTsKLX0KLQotdm9pZCBOUE9iamVjdFByb3h5OjppbnZhbGlkYXRlKCkKLXsKLSAgICBB
U1NFUlQobV9ucFJlbW90ZU9iamVjdE1hcCk7Ci0gICAgQVNTRVJUKG1fcGx1Z2luKTsKLQotICAg
IG1fbnBSZW1vdGVPYmplY3RNYXAgPSAwOwotICAgIG1fcGx1Z2luID0gMDsKLX0KLSAgICAKLXZv
aWQgTlBPYmplY3RQcm94eTo6aW5pdGlhbGl6ZShOUFJlbW90ZU9iamVjdE1hcCogbnBSZW1vdGVP
YmplY3RNYXAsIFBsdWdpbiogcGx1Z2luLCB1aW50NjRfdCBucE9iamVjdElEKQotewotICAgIEFT
U0VSVCghbV9ucFJlbW90ZU9iamVjdE1hcCk7Ci0gICAgQVNTRVJUKCFtX3BsdWdpbik7Ci0gICAg
QVNTRVJUKCFtX25wT2JqZWN0SUQpOwotCi0gICAgQVNTRVJUKG5wUmVtb3RlT2JqZWN0TWFwKTsK
LSAgICBBU1NFUlQocGx1Z2luKTsKLSAgICBBU1NFUlQobnBPYmplY3RJRCk7Ci0KLSAgICBtX25w
UmVtb3RlT2JqZWN0TWFwID0gbnBSZW1vdGVPYmplY3RNYXA7Ci0gICAgbV9wbHVnaW4gPSBwbHVn
aW47Ci0gICAgbV9ucE9iamVjdElEID0gbnBPYmplY3RJRDsKLX0KLQotYm9vbCBOUE9iamVjdFBy
b3h5OjpoYXNNZXRob2QoTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUpCi17Ci0gICAgaWYgKCFtX25w
UmVtb3RlT2JqZWN0TWFwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgTlBJZGVu
dGlmaWVyRGF0YSBtZXRob2ROYW1lRGF0YSA9IE5QSWRlbnRpZmllckRhdGE6OmZyb21OUElkZW50
aWZpZXIobWV0aG9kTmFtZSk7Ci0gICAgCi0gICAgYm9vbCByZXR1cm5WYWx1ZSA9IGZhbHNlOwot
ICAgIAotICAgIGlmICghbV9ucFJlbW90ZU9iamVjdE1hcC0+Y29ubmVjdGlvbigpLT5zZW5kU3lu
YyhNZXNzYWdlczo6TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6Okhhc01ldGhvZChtZXRob2ROYW1l
RGF0YSksIE1lc3NhZ2VzOjpOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6SGFzTWV0aG9kOjpSZXBs
eShyZXR1cm5WYWx1ZSksIG1fbnBPYmplY3RJRCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci19Ci0KLWJvb2wgTlBPYmplY3RQcm94eTo6aW52
b2tlKE5QSWRlbnRpZmllciBtZXRob2ROYW1lLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3VtZW50cywg
dWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKCFt
X25wUmVtb3RlT2JqZWN0TWFwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBOUElkZW50
aWZpZXJEYXRhIG1ldGhvZE5hbWVEYXRhID0gTlBJZGVudGlmaWVyRGF0YTo6ZnJvbU5QSWRlbnRp
ZmllcihtZXRob2ROYW1lKTsKLSAgICBWZWN0b3I8TlBWYXJpYW50RGF0YT4gYXJndW1lbnRzRGF0
YTsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKQotICAg
ICAgICBhcmd1bWVudHNEYXRhLmFwcGVuZChtX25wUmVtb3RlT2JqZWN0TWFwLT5ucFZhcmlhbnRU
b05QVmFyaWFudERhdGEoYXJndW1lbnRzW2ldLCBtX3BsdWdpbikpOwotCi0gICAgYm9vbCByZXR1
cm5WYWx1ZSA9IGZhbHNlOwotICAgIE5QVmFyaWFudERhdGEgcmVzdWx0RGF0YTsKLSAgICAKLSAg
ICBpZiAoIW1fbnBSZW1vdGVPYmplY3RNYXAtPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6Ok5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyOjpJbnZva2UobWV0aG9kTmFtZURhdGEsIGFyZ3Vt
ZW50c0RhdGEpLCBNZXNzYWdlczo6TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6Okludm9rZTo6UmVw
bHkocmV0dXJuVmFsdWUsIHJlc3VsdERhdGEpLCBtX25wT2JqZWN0SUQpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKCFyZXR1cm5WYWx1ZSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIAotICAgICpyZXN1bHQgPSBtX25wUmVtb3RlT2JqZWN0TWFwLT5ucFZhcmlhbnRE
YXRhVG9OUFZhcmlhbnQocmVzdWx0RGF0YSwgbV9wbHVnaW4pOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIE5QT2JqZWN0UHJveHk6Omludm9rZURlZmF1bHQoY29uc3QgTlBWYXJpYW50KiBh
cmd1bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KQotewot
ICAgIGlmICghbV9ucFJlbW90ZU9iamVjdE1hcCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgVmVjdG9yPE5QVmFyaWFudERhdGE+IGFyZ3VtZW50c0RhdGE7Ci0gICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkKLSAgICAgICAgYXJndW1lbnRzRGF0YS5h
cHBlbmQobV9ucFJlbW90ZU9iamVjdE1hcC0+bnBWYXJpYW50VG9OUFZhcmlhbnREYXRhKGFyZ3Vt
ZW50c1tpXSwgbV9wbHVnaW4pKTsKLQotICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAg
ICBOUFZhcmlhbnREYXRhIHJlc3VsdERhdGE7Ci0gICAgCi0gICAgaWYgKCFtX25wUmVtb3RlT2Jq
ZWN0TWFwLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOUE9iamVjdE1lc3NhZ2VS
ZWNlaXZlcjo6SW52b2tlRGVmYXVsdChhcmd1bWVudHNEYXRhKSwgTWVzc2FnZXM6Ok5QT2JqZWN0
TWVzc2FnZVJlY2VpdmVyOjpJbnZva2VEZWZhdWx0OjpSZXBseShyZXR1cm5WYWx1ZSwgcmVzdWx0
RGF0YSksIG1fbnBPYmplY3RJRCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBp
ZiAoIXJldHVyblZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgKnJlc3Vs
dCA9IG1fbnBSZW1vdGVPYmplY3RNYXAtPm5wVmFyaWFudERhdGFUb05QVmFyaWFudChyZXN1bHRE
YXRhLCBtX3BsdWdpbik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTlBPYmplY3RQcm94
eTo6aGFzUHJvcGVydHkoTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKLXsKLSAgICBpZiAoIW1f
bnBSZW1vdGVPYmplY3RNYXApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBOUElk
ZW50aWZpZXJEYXRhIHByb3BlcnR5TmFtZURhdGEgPSBOUElkZW50aWZpZXJEYXRhOjpmcm9tTlBJ
ZGVudGlmaWVyKHByb3BlcnR5TmFtZSk7Ci0KLSAgICBib29sIHJldHVyblZhbHVlID0gZmFsc2U7
Ci0gICAgCi0gICAgaWYgKCFtX25wUmVtb3RlT2JqZWN0TWFwLT5jb25uZWN0aW9uKCktPnNlbmRT
eW5jKE1lc3NhZ2VzOjpOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6SGFzUHJvcGVydHkocHJvcGVy
dHlOYW1lRGF0YSksIE1lc3NhZ2VzOjpOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6SGFzUHJvcGVy
dHk6OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ucE9iamVjdElEKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIHJldHVyblZhbHVlOwotfQotCi1ib29sIE5QT2JqZWN0UHJveHk6
OmdldFByb3BlcnR5KE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIE5QVmFyaWFudCogcmVzdWx0
KQotewotICAgIGlmICghbV9ucFJlbW90ZU9iamVjdE1hcCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgTlBJZGVudGlmaWVyRGF0YSBwcm9wZXJ0eU5hbWVEYXRhID0gTlBJZGVudGlmaWVy
RGF0YTo6ZnJvbU5QSWRlbnRpZmllcihwcm9wZXJ0eU5hbWUpOwotCi0gICAgYm9vbCByZXR1cm5W
YWx1ZSA9IGZhbHNlOwotICAgIE5QVmFyaWFudERhdGEgcmVzdWx0RGF0YTsKLSAgICAKLSAgICBp
ZiAoIW1fbnBSZW1vdGVPYmplY3RNYXAtPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6
Ok5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyOjpHZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWVEYXRhKSwg
TWVzc2FnZXM6Ok5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyOjpHZXRQcm9wZXJ0eTo6UmVwbHkocmV0
dXJuVmFsdWUsIHJlc3VsdERhdGEpLCBtX25wT2JqZWN0SUQpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoIXJldHVyblZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAqcmVzdWx0ID0gbV9ucFJlbW90ZU9iamVjdE1hcC0+bnBWYXJpYW50RGF0YVRvTlBWYXJpYW50
KHJlc3VsdERhdGEsIG1fcGx1Z2luKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBOUE9i
amVjdFByb3h5OjpzZXRQcm9wZXJ0eShOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBO
UFZhcmlhbnQqIHZhbHVlKQotewotICAgIGlmICghbV9ucFJlbW90ZU9iamVjdE1hcCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE5QSWRlbnRpZmllckRhdGEgcHJvcGVydHlOYW1l
RGF0YSA9IE5QSWRlbnRpZmllckRhdGE6OmZyb21OUElkZW50aWZpZXIocHJvcGVydHlOYW1lKTsK
LSAgICBOUFZhcmlhbnREYXRhIHByb3BlcnR5VmFsdWVEYXRhID0gbV9ucFJlbW90ZU9iamVjdE1h
cC0+bnBWYXJpYW50VG9OUFZhcmlhbnREYXRhKCp2YWx1ZSwgbV9wbHVnaW4pOwotCi0gICAgYm9v
bCByZXR1cm5WYWx1ZSA9IGZhbHNlOwotCi0gICAgaWYgKCFtX25wUmVtb3RlT2JqZWN0TWFwLT5j
b25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6
U2V0UHJvcGVydHkocHJvcGVydHlOYW1lRGF0YSwgcHJvcGVydHlWYWx1ZURhdGEpLCBNZXNzYWdl
czo6TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6OlNldFByb3BlcnR5OjpSZXBseShyZXR1cm5WYWx1
ZSksIG1fbnBPYmplY3RJRCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBy
ZXR1cm5WYWx1ZTsKLX0KLQotYm9vbCBOUE9iamVjdFByb3h5OjpyZW1vdmVQcm9wZXJ0eShOUElk
ZW50aWZpZXIgcHJvcGVydHlOYW1lKQotewotICAgIGlmICghbV9ucFJlbW90ZU9iamVjdE1hcCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE5QSWRlbnRpZmllckRhdGEgcHJvcGVy
dHlOYW1lRGF0YSA9IE5QSWRlbnRpZmllckRhdGE6OmZyb21OUElkZW50aWZpZXIocHJvcGVydHlO
YW1lKTsKLQotICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAoIW1f
bnBSZW1vdGVPYmplY3RNYXAtPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5QT2Jq
ZWN0TWVzc2FnZVJlY2VpdmVyOjpSZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWVEYXRhKSwgTWVz
c2FnZXM6Ok5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyOjpSZW1vdmVQcm9wZXJ0eTo6UmVwbHkocmV0
dXJuVmFsdWUpLCBtX25wT2JqZWN0SUQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXR1cm4gcmV0dXJuVmFsdWU7Ci19Ci0KLWJvb2wgTlBPYmplY3RQcm94eTo6ZW51bWVyYXRlKE5Q
SWRlbnRpZmllcioqIGlkZW50aWZpZXJzLCB1aW50MzJfdCogaWRlbnRpZmllckNvdW50KQotewot
ICAgIGlmICghbV9ucFJlbW90ZU9iamVjdE1hcCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgYm9vbCByZXR1cm5WYWx1ZTsKLSAgICBWZWN0b3I8TlBJZGVudGlmaWVyRGF0YT4gaWRlbnRp
ZmllcnNEYXRhOwotCi0gICAgaWYgKCFtX25wUmVtb3RlT2JqZWN0TWFwLT5jb25uZWN0aW9uKCkt
PnNlbmRTeW5jKE1lc3NhZ2VzOjpOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6RW51bWVyYXRlKCks
IE1lc3NhZ2VzOjpOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6RW51bWVyYXRlOjpSZXBseShyZXR1
cm5WYWx1ZSwgaWRlbnRpZmllcnNEYXRhKSwgbV9ucE9iamVjdElEKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKCFyZXR1cm5WYWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgTlBJZGVudGlmaWVyKiBuYW1lSWRlbnRpZmllcnMgPSBucG5NZW1OZXdBcnJheTxOUElk
ZW50aWZpZXI+KGlkZW50aWZpZXJzRGF0YS5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgaWRlbnRpZmllcnNEYXRhLnNpemUoKTsgKytpKQotICAgICAgICBuYW1lSWRl
bnRpZmllcnNbaV0gPSBpZGVudGlmaWVyc0RhdGFbaV0uY3JlYXRlTlBJZGVudGlmaWVyKCk7Ci0g
ICAgCi0gICAgKmlkZW50aWZpZXJzID0gbmFtZUlkZW50aWZpZXJzOwotICAgICppZGVudGlmaWVy
Q291bnQgPSBpZGVudGlmaWVyc0RhdGEuc2l6ZSgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIE5QT2JqZWN0UHJveHk6OmNvbnN0cnVjdChjb25zdCBOUFZhcmlhbnQqIGFyZ3VtZW50cywg
dWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKCFt
X25wUmVtb3RlT2JqZWN0TWFwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8
TlBWYXJpYW50RGF0YT4gYXJndW1lbnRzRGF0YTsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBp
IDwgYXJndW1lbnRDb3VudDsgKytpKQotICAgICAgICBhcmd1bWVudHNEYXRhLmFwcGVuZChtX25w
UmVtb3RlT2JqZWN0TWFwLT5ucFZhcmlhbnRUb05QVmFyaWFudERhdGEoYXJndW1lbnRzW2ldLCBt
X3BsdWdpbikpOwotCi0gICAgYm9vbCByZXR1cm5WYWx1ZSA9IGZhbHNlOwotICAgIE5QVmFyaWFu
dERhdGEgcmVzdWx0RGF0YTsKLSAgICAKLSAgICBpZiAoIW1fbnBSZW1vdGVPYmplY3RNYXAtPmNv
bm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyOjpD
b25zdHJ1Y3QoYXJndW1lbnRzRGF0YSksIE1lc3NhZ2VzOjpOUE9iamVjdE1lc3NhZ2VSZWNlaXZl
cjo6Q29uc3RydWN0OjpSZXBseShyZXR1cm5WYWx1ZSwgcmVzdWx0RGF0YSksIG1fbnBPYmplY3RJ
RCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAoIXJldHVyblZhbHVlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgKnJlc3VsdCA9IG1fbnBSZW1vdGVPYmpl
Y3RNYXAtPm5wVmFyaWFudERhdGFUb05QVmFyaWFudChyZXN1bHREYXRhLCBtX3BsdWdpbik7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLU5QQ2xhc3MqIE5QT2JqZWN0UHJveHk6Om5wQ2xhc3MoKQot
ewotICAgIHN0YXRpYyBOUENsYXNzIG5wQ2xhc3MgPSB7Ci0gICAgICAgIE5QX0NMQVNTX1NUUlVD
VF9WRVJTSU9OLAotICAgICAgICBOUF9BbGxvY2F0ZSwKLSAgICAgICAgTlBfRGVhbGxvY2F0ZSwK
LSAgICAgICAgMCwKLSAgICAgICAgTlBfSGFzTWV0aG9kLAotICAgICAgICBOUF9JbnZva2UsCi0g
ICAgICAgIE5QX0ludm9rZURlZmF1bHQsCi0gICAgICAgIE5QX0hhc1Byb3BlcnR5LAotICAgICAg
ICBOUF9HZXRQcm9wZXJ0eSwKLSAgICAgICAgTlBfU2V0UHJvcGVydHksCi0gICAgICAgIE5QX1Jl
bW92ZVByb3BlcnR5LAotICAgICAgICBOUF9FbnVtZXJhdGUsCi0gICAgICAgIE5QX0NvbnN0cnVj
dAotICAgIH07Ci0KLSAgICByZXR1cm4gJm5wQ2xhc3M7Ci19Ci0KLU5QT2JqZWN0KiBOUE9iamVj
dFByb3h5OjpOUF9BbGxvY2F0ZShOUFAgbnBwLCBOUENsYXNzKikKLXsKLSAgICBBU1NFUlRfVU5V
U0VEKG5wcCwgIW5wcCk7Ci0KLSAgICByZXR1cm4gbmV3IE5QT2JqZWN0UHJveHk7Ci19Ci0KLXZv
aWQgTlBPYmplY3RQcm94eTo6TlBfRGVhbGxvY2F0ZShOUE9iamVjdCogbnBPYmplY3QpCi17Ci0g
ICAgLy8gaHR0cDovL3dlYmtpdC5vcmcvYi8xMTg1MzUgLSBUaGUgSmF2YSBOZXRzY2FwZSBQbHVn
LWluIGhhcyBhIGJhY2tncm91bmQgdGhyZWFkIGRvIHNvbWUgb2YgdGhlaXIgTlBQX0Rlc3Ryb3kg
d29yay4KLSAgICAvLyBUaGF0IGJhY2tncm91bmQgdGhyZWFkIGNhbiBjYWxsIE5QX0RlYWxsb2Nh
dGUsIGFuZCB0aGlzIGxlYWRzIHRvIGEgV2ViUHJvY2VzcyA8LT4gUGx1Z2luUHJvY2VzcyBkZWFk
bG9jay4KLSAgICAvLyBTaW5jZSBOUEFQSSBiZWhhdmlvciBvbiBhIGJhY2tncm91bmQgdGhyZWFk
IGlzIHVuZGVmaW5lZCwgaXQgaXMgb2theSB0byBsaW1pdCB0aGlzIHdvcmthcm91bmQgdG8gdGhl
IG9uZSBBUEkKLSAgICAvLyB0aGF0IGlzIGtub3duIHRvIGJlIG1pc3VzZWQgZHVyaW5nIHBsdWdp
biB0ZWFyZG93biwgYW5kIHRvIG5vdCBiZSBjb25jZXJuZWQgYWJvdXQgY2hhbmdlIGluIGJlaGF2
aW9yIGlmIHRoaXMKLSAgICAvLyBvY2N1cmVkIGF0IGFueSBvdGhlciB0aW1lLgotICAgIGVuc3Vy
ZU9uTWFpblJ1bkxvb3AoW25wT2JqZWN0XSB7Ci0gICAgICAgIGRlbGV0ZSB0b05QT2JqZWN0UHJv
eHkobnBPYmplY3QpOwotICAgIH0pOwotfQotCi1ib29sIE5QT2JqZWN0UHJveHk6Ok5QX0hhc01l
dGhvZChOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBtZXRob2ROYW1lKQotewotICAg
IHJldHVybiB0b05QT2JqZWN0UHJveHkobnBPYmplY3QpLT5oYXNNZXRob2QobWV0aG9kTmFtZSk7
Ci19Ci0KLWJvb2wgTlBPYmplY3RQcm94eTo6TlBfSW52b2tlKE5QT2JqZWN0KiBucE9iamVjdCwg
TlBJZGVudGlmaWVyIG1ldGhvZE5hbWUsIGNvbnN0IE5QVmFyaWFudCogYXJndW1lbnRzLCB1aW50
MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gdG9O
UE9iamVjdFByb3h5KG5wT2JqZWN0KS0+aW52b2tlKG1ldGhvZE5hbWUsIGFyZ3VtZW50cywgYXJn
dW1lbnRDb3VudCwgcmVzdWx0KTsKLX0KLQotYm9vbCBOUE9iamVjdFByb3h5OjpOUF9JbnZva2VE
ZWZhdWx0KE5QT2JqZWN0KiBucE9iamVjdCwgY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMsIHVp
bnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KQotewotICAgIHJldHVybiB0
b05QT2JqZWN0UHJveHkobnBPYmplY3QpLT5pbnZva2VEZWZhdWx0KGFyZ3VtZW50cywgYXJndW1l
bnRDb3VudCwgcmVzdWx0KTsKLX0KLQotYm9vbCBOUE9iamVjdFByb3h5OjpOUF9IYXNQcm9wZXJ0
eShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCi17Ci0gICAg
cmV0dXJuIHRvTlBPYmplY3RQcm94eShucE9iamVjdCktPmhhc1Byb3BlcnR5KHByb3BlcnR5TmFt
ZSk7Ci19Ci0KLWJvb2wgTlBPYmplY3RQcm94eTo6TlBfR2V0UHJvcGVydHkoTlBPYmplY3QqIG5w
T2JqZWN0LCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBOUFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICByZXR1cm4gdG9OUE9iamVjdFByb3h5KG5wT2JqZWN0KS0+Z2V0UHJvcGVydHkocHJvcGVy
dHlOYW1lLCByZXN1bHQpOwotfQotCi1ib29sIE5QT2JqZWN0UHJveHk6Ok5QX1NldFByb3BlcnR5
KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgTlBW
YXJpYW50KiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9OUE9iamVjdFByb3h5KG5wT2JqZWN0KS0+
c2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSk7Ci19Ci0KLWJvb2wgTlBPYmplY3RQcm94
eTo6TlBfUmVtb3ZlUHJvcGVydHkoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgcHJv
cGVydHlOYW1lKQotewotICAgIHJldHVybiB0b05QT2JqZWN0UHJveHkobnBPYmplY3QpLT5yZW1v
dmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwotfQotCi1ib29sIE5QT2JqZWN0UHJveHk6Ok5QX0Vu
dW1lcmF0ZShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllcioqIGlkZW50aWZpZXJzLCB1
aW50MzJfdCogaWRlbnRpZmllckNvdW50KQotewotICAgIHJldHVybiB0b05QT2JqZWN0UHJveHko
bnBPYmplY3QpLT5lbnVtZXJhdGUoaWRlbnRpZmllcnMsIGlkZW50aWZpZXJDb3VudCk7Ci19Ci0K
LWJvb2wgTlBPYmplY3RQcm94eTo6TlBfQ29uc3RydWN0KE5QT2JqZWN0KiBucE9iamVjdCwgY29u
c3QgTlBWYXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFu
dCogcmVzdWx0KQotewotICAgIHJldHVybiB0b05QT2JqZWN0UHJveHkobnBPYmplY3QpLT5jb25z
dHJ1Y3QoYXJndW1lbnRzLCBhcmd1bWVudENvdW50LCByZXN1bHQpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OUE9iamVjdFByb3h5LmggYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL05QT2JqZWN0UHJveHkuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNmFmYWIxZTM3NWY0NTYxNjZjMjVkOWNkYTcwN2E4ODhjYTZmNzg5
ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9QbHVnaW5zL05QT2JqZWN0UHJveHkuaAorKysgL2Rldi9udWxsCkBAIC0x
LDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlIDxXZWJDb3JlL25wcnVudGltZV9pbnRl
cm5hbC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotY2xhc3MgTlBSZW1vdGVPYmplY3RNYXA7Ci1jbGFzcyBQbHVnaW47Ci0KLWNsYXNzIE5Q
T2JqZWN0UHJveHkgOiBwdWJsaWMgTlBPYmplY3QgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KE5QT2JqZWN0UHJveHkpOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIE5QT2JqZWN0UHJveHkqIGNy
ZWF0ZShOUFJlbW90ZU9iamVjdE1hcCosIFBsdWdpbiosIHVpbnQ2NF90IG5wT2JqZWN0SUQpOwot
Ci0gICAgc3RhdGljIGJvb2wgaXNOUE9iamVjdFByb3h5KE5QT2JqZWN0Kik7Ci0gICAgCi0gICAg
c3RhdGljIE5QT2JqZWN0UHJveHkqIHRvTlBPYmplY3RQcm94eShOUE9iamVjdCogbnBPYmplY3Qp
Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KGlzTlBPYmplY3RQcm94eShucE9iamVjdCkpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
TlBPYmplY3RQcm94eSo+KG5wT2JqZWN0KTsKLSAgICB9Ci0KLSAgICBQbHVnaW4qIHBsdWdpbigp
IGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luOyB9Ci0gICAgdWludDY0X3QgbnBPYmplY3RJRCgpIGNv
bnN0IHsgcmV0dXJuIG1fbnBPYmplY3RJRDsgfQotCi0gICAgdm9pZCBpbnZhbGlkYXRlKCk7Ci0K
LXByaXZhdGU6Ci0gICAgTlBPYmplY3RQcm94eSgpOwotICAgIH5OUE9iamVjdFByb3h5KCk7Ci0K
LSAgICB2b2lkIGluaXRpYWxpemUoTlBSZW1vdGVPYmplY3RNYXAqLCBQbHVnaW4qLCB1aW50NjRf
dCBucE9iamVjdElEKTsKLQotICAgIGJvb2wgaGFzTWV0aG9kKE5QSWRlbnRpZmllciBtZXRob2RO
YW1lKTsKLSAgICBib29sIGludm9rZShOUElkZW50aWZpZXIgbWV0aG9kTmFtZSwgY29uc3QgTlBW
YXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVz
dWx0KTsKLSAgICBib29sIGludm9rZURlZmF1bHQoY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMs
IHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KTsKLSAgICBib29sIGhh
c1Byb3BlcnR5KE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpOwotICAgIGJvb2wgZ2V0UHJvcGVy
dHkoTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgTlBWYXJpYW50KiByZXN1bHQpOwotICAgIGJv
b2wgc2V0UHJvcGVydHkoTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgTlBWYXJpYW50
KiB2YWx1ZSk7Ci0gICAgYm9vbCByZW1vdmVQcm9wZXJ0eShOUElkZW50aWZpZXIgcHJvcGVydHlO
YW1lKTsKLSAgICBib29sIGVudW1lcmF0ZShOUElkZW50aWZpZXIqKiBpZGVudGlmaWVycywgdWlu
dDMyX3QqIGlkZW50aWZpZXJDb3VudCk7Ci0gICAgYm9vbCBjb25zdHJ1Y3QoY29uc3QgTlBWYXJp
YW50KiBhcmd1bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0
KTsKLQotICAgIHN0YXRpYyBOUENsYXNzKiBucENsYXNzKCk7Ci0gICAgc3RhdGljIE5QT2JqZWN0
KiBOUF9BbGxvY2F0ZShOUFAsIE5QQ2xhc3MqKTsKLSAgICBzdGF0aWMgdm9pZCBOUF9EZWFsbG9j
YXRlKE5QT2JqZWN0Kik7Ci0gICAgc3RhdGljIGJvb2wgTlBfSGFzTWV0aG9kKE5QT2JqZWN0Kiwg
TlBJZGVudGlmaWVyIG1ldGhvZE5hbWUpOwotICAgIHN0YXRpYyBib29sIE5QX0ludm9rZShOUE9i
amVjdCosIE5QSWRlbnRpZmllciBtZXRob2ROYW1lLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3VtZW50
cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpOwotICAgIHN0YXRp
YyBib29sIE5QX0ludm9rZURlZmF1bHQoTlBPYmplY3QqLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3Vt
ZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpOwotICAgIHN0
YXRpYyBib29sIE5QX0hhc1Byb3BlcnR5KE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyIHByb3BlcnR5
TmFtZSk7Ci0gICAgc3RhdGljIGJvb2wgTlBfR2V0UHJvcGVydHkoTlBPYmplY3QqLCBOUElkZW50
aWZpZXIgcHJvcGVydHlOYW1lLCBOUFZhcmlhbnQqIHJlc3VsdCk7Ci0gICAgc3RhdGljIGJvb2wg
TlBfU2V0UHJvcGVydHkoTlBPYmplY3QqLCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25z
dCBOUFZhcmlhbnQqIHZhbHVlKTsKLSAgICBzdGF0aWMgYm9vbCBOUF9SZW1vdmVQcm9wZXJ0eShO
UE9iamVjdCosIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBib29sIE5Q
X0VudW1lcmF0ZShOUE9iamVjdCosIE5QSWRlbnRpZmllcioqIGlkZW50aWZpZXJzLCB1aW50MzJf
dCogaWRlbnRpZmllckNvdW50KTsKLSAgICBzdGF0aWMgYm9vbCBOUF9Db25zdHJ1Y3QoTlBPYmpl
Y3QqLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3VtZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwg
TlBWYXJpYW50KiByZXN1bHQpOwotCi0gICAgTlBSZW1vdGVPYmplY3RNYXAqIG1fbnBSZW1vdGVP
YmplY3RNYXA7Ci0gICAgUGx1Z2luKiBtX3BsdWdpbjsKLSAgICB1aW50NjRfdCBtX25wT2JqZWN0
SUQ7Ci19OwotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Bs
dWdpbnMvTlBSZW1vdGVPYmplY3RNYXAuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lu
cy9OUFJlbW90ZU9iamVjdE1hcC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3
MWUxN2Y1OGFjNjFhM2RjNGE4ZjU4NmQ3YmQ0MmJlNDg4NmZjYWYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lu
cy9OUFJlbW90ZU9iamVjdE1hcC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOUFJlbW90ZU9iamVj
dE1hcC5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJO
UE9iamVjdE1lc3NhZ2VSZWNlaXZlci5oIgotI2luY2x1ZGUgIk5QT2JqZWN0UHJveHkuaCIKLSNp
bmNsdWRlICJOUFJ1bnRpbWVVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJOUFZhcmlhbnREYXRhLmgi
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVOUE9iamVj
dElEKCkKLXsKLSAgICBzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVOUE9iamVjdElEOwotICAgIHJl
dHVybiArK2dlbmVyYXRlTlBPYmplY3RJRDsKLX0KLQotUmVmPE5QUmVtb3RlT2JqZWN0TWFwPiBO
UFJlbW90ZU9iamVjdE1hcDo6Y3JlYXRlKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbikKLXsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOUFJlbW90ZU9iamVjdE1hcChjb25uZWN0aW9uKSk7
Ci19Ci0KLU5QUmVtb3RlT2JqZWN0TWFwOjpOUFJlbW90ZU9iamVjdE1hcChJUEM6OkNvbm5lY3Rp
b24qIGNvbm5lY3Rpb24pCi0gICAgOiBtX2Nvbm5lY3Rpb24oY29ubmVjdGlvbikKLXsKLX0KLQot
TlBSZW1vdGVPYmplY3RNYXA6On5OUFJlbW90ZU9iamVjdE1hcCgpCi17Ci0gICAgQVNTRVJUKG1f
bnBPYmplY3RQcm94aWVzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fcmVnaXN0ZXJlZE5QT2Jq
ZWN0cy5pc0VtcHR5KCkpOwotfQotCi1OUE9iamVjdCogTlBSZW1vdGVPYmplY3RNYXA6OmNyZWF0
ZU5QT2JqZWN0UHJveHkodWludDY0X3QgcmVtb3RlT2JqZWN0SUQsIFBsdWdpbiogcGx1Z2luKQot
ewotICAgIE5QT2JqZWN0UHJveHkqIG5wT2JqZWN0UHJveHkgPSBOUE9iamVjdFByb3h5OjpjcmVh
dGUodGhpcywgcGx1Z2luLCByZW1vdGVPYmplY3RJRCk7Ci0KLSAgICBtX25wT2JqZWN0UHJveGll
cy5hZGQobnBPYmplY3RQcm94eSk7Ci0KLSAgICByZXR1cm4gbnBPYmplY3RQcm94eTsKLX0KLQot
dm9pZCBOUFJlbW90ZU9iamVjdE1hcDo6bnBPYmplY3RQcm94eURlc3Ryb3llZChOUE9iamVjdCog
bnBPYmplY3QpCi17Ci0gICAgTlBPYmplY3RQcm94eSogbnBPYmplY3RQcm94eSA9IE5QT2JqZWN0
UHJveHk6OnRvTlBPYmplY3RQcm94eShucE9iamVjdCk7Ci0gICAgQVNTRVJUKG1fbnBPYmplY3RQ
cm94aWVzLmNvbnRhaW5zKG5wT2JqZWN0UHJveHkpKTsKLQotICAgIG1fbnBPYmplY3RQcm94aWVz
LnJlbW92ZShucE9iamVjdFByb3h5KTsKLX0KLQotdWludDY0X3QgTlBSZW1vdGVPYmplY3RNYXA6
OnJlZ2lzdGVyTlBPYmplY3QoTlBPYmplY3QqIG5wT2JqZWN0LCBQbHVnaW4qIHBsdWdpbikKLXsK
LSAgICB1aW50NjRfdCBucE9iamVjdElEID0gZ2VuZXJhdGVOUE9iamVjdElEKCk7Ci0gICAgbV9y
ZWdpc3RlcmVkTlBPYmplY3RzLnNldChucE9iamVjdElELCBtYWtlVW5pcXVlPE5QT2JqZWN0TWVz
c2FnZVJlY2VpdmVyPih0aGlzLCBwbHVnaW4sIG5wT2JqZWN0SUQsIG5wT2JqZWN0KS5yZWxlYXNl
KCkpOwotCi0gICAgcmV0dXJuIG5wT2JqZWN0SUQ7Ci19Ci0KLXZvaWQgTlBSZW1vdGVPYmplY3RN
YXA6OnVucmVnaXN0ZXJOUE9iamVjdCh1aW50NjRfdCBucE9iamVjdElEKQotewotICAgIG1fcmVn
aXN0ZXJlZE5QT2JqZWN0cy5yZW1vdmUobnBPYmplY3RJRCk7Ci19Ci0KLXN0YXRpYyB1aW50NjRf
dCByZW1vdGVOUE9iamVjdElEKFBsdWdpbiogcGx1Z2luLCBOUE9iamVjdCogbnBPYmplY3QpCi17
Ci0gICAgaWYgKCFOUE9iamVjdFByb3h5Ojppc05QT2JqZWN0UHJveHkobnBPYmplY3QpKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIE5QT2JqZWN0UHJveHkqIG5wT2JqZWN0UHJveHkgPSBOUE9i
amVjdFByb3h5Ojp0b05QT2JqZWN0UHJveHkobnBPYmplY3QpOwotICAgIGlmIChucE9iamVjdFBy
b3h5LT5wbHVnaW4oKSAhPSBwbHVnaW4pCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJu
IG5wT2JqZWN0UHJveHktPm5wT2JqZWN0SUQoKTsKLX0KLQotTlBWYXJpYW50RGF0YSBOUFJlbW90
ZU9iamVjdE1hcDo6bnBWYXJpYW50VG9OUFZhcmlhbnREYXRhKGNvbnN0IE5QVmFyaWFudCYgdmFy
aWFudCwgUGx1Z2luKiBwbHVnaW4pCi17Ci0gICAgc3dpdGNoICh2YXJpYW50LnR5cGUpIHsKLSAg
ICBjYXNlIE5QVmFyaWFudFR5cGVfVm9pZDoKLSAgICAgICAgcmV0dXJuIE5QVmFyaWFudERhdGE6
Om1ha2VWb2lkKCk7Ci0KLSAgICBjYXNlIE5QVmFyaWFudFR5cGVfTnVsbDoKLSAgICAgICAgcmV0
dXJuIE5QVmFyaWFudERhdGE6Om1ha2VOdWxsKCk7Ci0KLSAgICBjYXNlIE5QVmFyaWFudFR5cGVf
Qm9vbDoKLSAgICAgICAgcmV0dXJuIE5QVmFyaWFudERhdGE6Om1ha2VCb29sKHZhcmlhbnQudmFs
dWUuYm9vbFZhbHVlKTsKLQotICAgIGNhc2UgTlBWYXJpYW50VHlwZV9JbnQzMjoKLSAgICAgICAg
cmV0dXJuIE5QVmFyaWFudERhdGE6Om1ha2VJbnQzMih2YXJpYW50LnZhbHVlLmludFZhbHVlKTsK
LQotICAgIGNhc2UgTlBWYXJpYW50VHlwZV9Eb3VibGU6Ci0gICAgICAgIHJldHVybiBOUFZhcmlh
bnREYXRhOjptYWtlRG91YmxlKHZhcmlhbnQudmFsdWUuZG91YmxlVmFsdWUpOwotCi0gICAgY2Fz
ZSBOUFZhcmlhbnRUeXBlX1N0cmluZzoKLSAgICAgICAgcmV0dXJuIE5QVmFyaWFudERhdGE6Om1h
a2VTdHJpbmcodmFyaWFudC52YWx1ZS5zdHJpbmdWYWx1ZS5VVEY4Q2hhcmFjdGVycywgdmFyaWFu
dC52YWx1ZS5zdHJpbmdWYWx1ZS5VVEY4TGVuZ3RoKTsKLQotICAgIGNhc2UgTlBWYXJpYW50VHlw
ZV9PYmplY3Q6IHsKLSAgICAgICAgTlBPYmplY3QqIG5wT2JqZWN0ID0gdmFyaWFudC52YWx1ZS5v
YmplY3RWYWx1ZTsKLQotICAgICAgICBpZiAodWludDY0X3QgbnBPYmplY3RJRCA9IHJlbW90ZU5Q
T2JqZWN0SUQocGx1Z2luLCBucE9iamVjdCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBVbmRl
ciBzb21lIGNpcmN1bXN0YW5jZXMsIHRoaXMgbWlnaHQgbGVhayB0aGUgTlBPYmplY3RQcm94eSBv
YmplY3QuIAotICAgICAgICAgICAgLy8gRmlndXJlIG91dCBob3cgdG8gYXZvaWQgdGhhdC4KLSAg
ICAgICAgICAgIHJldGFpbk5QT2JqZWN0KG5wT2JqZWN0KTsKLSAgICAgICAgICAgIHJldHVybiBO
UFZhcmlhbnREYXRhOjptYWtlUmVtb3RlTlBPYmplY3RJRChucE9iamVjdElEKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHVpbnQ2NF90IG5wT2JqZWN0SUQgPSByZWdpc3Rlck5QT2JqZWN0KG5wT2Jq
ZWN0LCBwbHVnaW4pOwotICAgICAgICByZXR1cm4gTlBWYXJpYW50RGF0YTo6bWFrZUxvY2FsTlBP
YmplY3RJRChucE9iamVjdElEKTsKLSAgICB9Ci0KLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gTlBWYXJpYW50RGF0YTo6bWFrZVZvaWQoKTsKLX0KLQotTlBW
YXJpYW50IE5QUmVtb3RlT2JqZWN0TWFwOjpucFZhcmlhbnREYXRhVG9OUFZhcmlhbnQoY29uc3Qg
TlBWYXJpYW50RGF0YSYgbnBWYXJpYW50RGF0YSwgUGx1Z2luKiBwbHVnaW4pCi17Ci0gICAgTlBW
YXJpYW50IG5wVmFyaWFudDsKLQotICAgIHN3aXRjaCAobnBWYXJpYW50RGF0YS50eXBlKCkpIHsK
LSAgICBjYXNlIE5QVmFyaWFudERhdGE6OlZvaWQ6Ci0gICAgICAgIFZPSURfVE9fTlBWQVJJQU5U
KG5wVmFyaWFudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlBWYXJpYW50RGF0YTo6TnVs
bDoKLSAgICAgICAgTlVMTF9UT19OUFZBUklBTlQobnBWYXJpYW50KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBOUFZhcmlhbnREYXRhOjpCb29sOgotICAgICAgICBCT09MRUFOX1RPX05QVkFS
SUFOVChucFZhcmlhbnREYXRhLmJvb2xWYWx1ZSgpLCBucFZhcmlhbnQpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIE5QVmFyaWFudERhdGE6OkludDMyOgotICAgICAgICBJTlQzMl9UT19OUFZB
UklBTlQobnBWYXJpYW50RGF0YS5pbnQzMlZhbHVlKCksIG5wVmFyaWFudCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgTlBWYXJpYW50RGF0YTo6RG91YmxlOgotICAgICAgICBET1VCTEVfVE9f
TlBWQVJJQU5UKG5wVmFyaWFudERhdGEuZG91YmxlVmFsdWUoKSwgbnBWYXJpYW50KTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBOUFZhcmlhbnREYXRhOjpTdHJpbmc6IHsKLSAgICAgICAgTlBT
dHJpbmcgbnBTdHJpbmcgPSBjcmVhdGVOUFN0cmluZyhucFZhcmlhbnREYXRhLnN0cmluZ1ZhbHVl
KCkpOwotICAgICAgICBTVFJJTkdOX1RPX05QVkFSSUFOVChucFN0cmluZy5VVEY4Q2hhcmFjdGVy
cywgbnBTdHJpbmcuVVRGOExlbmd0aCwgbnBWYXJpYW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgTlBWYXJpYW50RGF0YTo6TG9jYWxOUE9iamVjdElEOiB7Ci0gICAgICAgIHVp
bnQ2NF90IG5wT2JqZWN0SUQgPSBucFZhcmlhbnREYXRhLmxvY2FsTlBPYmplY3RJRFZhbHVlKCk7
Ci0gICAgICAgIEFTU0VSVChucE9iamVjdElEKTsKLQotICAgICAgICBOUE9iamVjdE1lc3NhZ2VS
ZWNlaXZlciogbnBPYmplY3RNZXNzYWdlUmVjZWl2ZXIgPSBtX3JlZ2lzdGVyZWROUE9iamVjdHMu
Z2V0KG5wT2JqZWN0SUQpOwotICAgICAgICBpZiAoIW5wT2JqZWN0TWVzc2FnZVJlY2VpdmVyKSB7
Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIFZPSURfVE9f
TlBWQVJJQU5UKG5wVmFyaWFudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIE5QT2JqZWN0KiBucE9iamVjdCA9IG5wT2JqZWN0TWVzc2FnZVJlY2VpdmVyLT5ucE9i
amVjdCgpOwotICAgICAgICBBU1NFUlQobnBPYmplY3QpOwotCi0gICAgICAgIHJldGFpbk5QT2Jq
ZWN0KG5wT2JqZWN0KTsKLSAgICAgICAgT0JKRUNUX1RPX05QVkFSSUFOVChucE9iamVjdCwgbnBW
YXJpYW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgTlBWYXJpYW50RGF0YTo6
UmVtb3RlTlBPYmplY3RJRDogewotICAgICAgICBOUE9iamVjdCogbnBPYmplY3RQcm94eSA9IGNy
ZWF0ZU5QT2JqZWN0UHJveHkobnBWYXJpYW50RGF0YS5yZW1vdGVOUE9iamVjdElEVmFsdWUoKSwg
cGx1Z2luKTsKLSAgICAgICAgT0JKRUNUX1RPX05QVkFSSUFOVChucE9iamVjdFByb3h5LCBucFZh
cmlhbnQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5wVmFy
aWFudDsKLX0KLQotdm9pZCBOUFJlbW90ZU9iamVjdE1hcDo6cGx1Z2luRGVzdHJveWVkKFBsdWdp
biogcGx1Z2luKQotewotICAgIC8vIEdhdGhlciBhbmQgZGVsZXRlIHRoZSByZWNlaXZlcnMgYXNz
b2NpYXRlZCB3aXRoIHRoaXMgcGx1Zy1pbi4KLSAgICBWZWN0b3I8TlBPYmplY3RNZXNzYWdlUmVj
ZWl2ZXIqPiByZWNlaXZlcnM7Ci0gICAgZm9yIChhdXRvKiByZWNlaXZlciA6IG1fcmVnaXN0ZXJl
ZE5QT2JqZWN0cy52YWx1ZXMoKSkgewotICAgICAgICBpZiAocmVjZWl2ZXItPnBsdWdpbigpID09
IHBsdWdpbikKLSAgICAgICAgICAgIHJlY2VpdmVycy5hcHBlbmQocmVjZWl2ZXIpOwotICAgIH0K
LSAgICBmb3IgKGF1dG8qIHJlY2VpdmVyIDogcmVjZWl2ZXJzKQotICAgICAgICBkZWxldGUgcmVj
ZWl2ZXI7Ci0KLSAgICAvLyBJbnZhbGlkYXRlIGFuZCByZW1vdmUgYWxsIHByb3hpZXMgYXNzb2Np
YXRlZCB3aXRoIHRoaXMgcGx1Zy1pbi4KLSAgICBWZWN0b3I8TlBPYmplY3RQcm94eSo+IHByb3hp
ZXM7Ci0gICAgZm9yIChhdXRvKiBwcm94eSA6IG1fbnBPYmplY3RQcm94aWVzKSB7Ci0gICAgICAg
IGlmIChwcm94eS0+cGx1Z2luKCkgPT0gcGx1Z2luKQotICAgICAgICAgICAgcHJveGllcy5hcHBl
bmQocHJveHkpOwotICAgIH0KLSAgICBmb3IgKGF1dG8qIHByb3h5IDogcHJveGllcykgewotICAg
ICAgICBwcm94eS0+aW52YWxpZGF0ZSgpOwotICAgICAgICBBU1NFUlQobV9ucE9iamVjdFByb3hp
ZXMuY29udGFpbnMocHJveHkpKTsKLSAgICAgICAgbV9ucE9iamVjdFByb3hpZXMucmVtb3ZlKHBy
b3h5KTsKLSAgICB9Ci19Ci0KLWJvb2wgTlBSZW1vdGVPYmplY3RNYXA6OmRpZFJlY2VpdmVTeW5j
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rl
ciwgVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKLXsKLSAgICBOUE9iamVj
dE1lc3NhZ2VSZWNlaXZlciogbWVzc2FnZVJlY2VpdmVyID0gbV9yZWdpc3RlcmVkTlBPYmplY3Rz
LmdldChkZWNvZGVyLmRlc3RpbmF0aW9uSUQoKSk7Ci0gICAgaWYgKCFtZXNzYWdlUmVjZWl2ZXIp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXItPmRp
ZFJlY2VpdmVTeW5jTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXJNZXNzYWdlKGNvbm5lY3Rpb24sIGRl
Y29kZXIsIHJlcGx5RW5jb2Rlcik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmggYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDg2Y2QyZjM4NTMwZjJhYjQzMmVlNzQyYWQ1ZGY1MDliNzczNGJhYzguLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5oCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTlBSZW1vdGVPYmplY3RNYXBfaAotI2RlZmluZSBO
UFJlbW90ZU9iamVjdE1hcF9oCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQot
I2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlIDxXZWJDb3JlL25wcnVudGltZS5oPgot
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgTlBP
YmplY3RNZXNzYWdlUmVjZWl2ZXI7Ci1jbGFzcyBOUE9iamVjdFByb3h5OwotY2xhc3MgTlBWYXJp
YW50RGF0YTsKLWNsYXNzIFBsdWdpbjsKLQotY2xhc3MgTlBSZW1vdGVPYmplY3RNYXAgOiBwdWJs
aWMgUmVmQ291bnRlZDxOUFJlbW90ZU9iamVjdE1hcD4gewotcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8TlBSZW1vdGVPYmplY3RNYXA+IGNyZWF0ZShJUEM6OkNvbm5lY3Rpb24qKTsKLSAgICB+TlBS
ZW1vdGVPYmplY3RNYXAoKTsKLQotICAgIC8vIENyZWF0ZXMgYW4gTlBPYmplY3RQcm94eSB3cmFw
cGVyIGZvciB0aGUgcmVtb3RlIG9iamVjdCB3aXRoIHRoZSBnaXZlbiByZW1vdGUgb2JqZWN0IElE
LgotICAgIE5QT2JqZWN0KiBjcmVhdGVOUE9iamVjdFByb3h5KHVpbnQ2NF90IHJlbW90ZU9iamVj
dElELCBQbHVnaW4qKTsKLSAgICB2b2lkIG5wT2JqZWN0UHJveHlEZXN0cm95ZWQoTlBPYmplY3Qq
KTsKLQotICAgIC8vIEV4cG9zZSB0aGUgZ2l2ZW4gTlBPYmplY3QgYXMgYSByZW1vdGUgb2JqZWN0
LiBSZXR1cm5zIHRoZSBvYmplY3RJRC4KLSAgICB1aW50NjRfdCByZWdpc3Rlck5QT2JqZWN0KE5Q
T2JqZWN0KiwgUGx1Z2luKik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyTlBPYmplY3QodWludDY0X3Qp
OwotCi0gICAgTlBWYXJpYW50RGF0YSBucFZhcmlhbnRUb05QVmFyaWFudERhdGEoY29uc3QgTlBW
YXJpYW50JiwgUGx1Z2luKik7Ci0gICAgTlBWYXJpYW50IG5wVmFyaWFudERhdGFUb05QVmFyaWFu
dChjb25zdCBOUFZhcmlhbnREYXRhJiwgUGx1Z2luKik7Ci0KLSAgICBJUEM6OkNvbm5lY3Rpb24q
IGNvbm5lY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2Nvbm5lY3Rpb247IH0KLQotICAgIHZvaWQg
cGx1Z2luRGVzdHJveWVkKFBsdWdpbiopOwotCi0gICAgYm9vbCBkaWRSZWNlaXZlU3luY01lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgVW5pcXVlUmVmPElQQzo6RW5jb2Rl
cj4mKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBOUFJlbW90ZU9iamVjdE1hcChJUEM6OkNv
bm5lY3Rpb24qKTsKLSAgICBJUEM6OkNvbm5lY3Rpb24qIG1fY29ubmVjdGlvbjsKLQotICAgIC8v
IEEgbWFwIG9mIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyIGNsYXNzZXMsIHdyYXBwaW5nIG9iamVj
dHMgdGhhdCB3ZSBleHBvcnQgdG8gdGhlCi0gICAgLy8gb3RoZXIgZW5kIG9mIHRoZSBjb25uZWN0
aW9uLgotICAgIEhhc2hNYXA8dWludDY0X3QsIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyKj4gbV9y
ZWdpc3RlcmVkTlBPYmplY3RzOwotCi0gICAgLy8gQSBzZXQgb2YgTlBPYmplY3RQcm94eSBvYmpl
Y3RzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1hcC4KLSAgICBIYXNoU2V0PE5QT2JqZWN0UHJveHkq
PiBtX25wT2JqZWN0UHJveGllczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNlbmRpZiAvLyBOUFJlbW90ZU9i
amVjdE1hcF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL05QVmFy
aWFudERhdGEuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OUFZhcmlhbnREYXRh
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RiOTJiZGM5NDA2N2ExMmZkNjg1
MmE2MTc5NmQxZWFhYTAxMDQ5OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL05QVmFyaWFudERhdGEuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMjAzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiTlBWYXJpYW50RGF0YS5oIgotCi0jaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJEZWNvZGVyLmgiCi0jaW5jbHVkZSAiRW5jb2Rl
ci5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotTlBWYXJpYW50RGF0YTo6TlBWYXJpYW50RGF0YSgpCi0gICAgOiBtX3R5cGUoTlBW
YXJpYW50RGF0YTo6Vm9pZCkKLSAgICAsIG1fYm9vbFZhbHVlKGZhbHNlKQotICAgICwgbV9pbnQz
MlZhbHVlKDApCi0gICAgLCBtX2RvdWJsZVZhbHVlKDApCi0gICAgLCBtX2xvY2FsTlBPYmplY3RJ
RFZhbHVlKDApCi0gICAgLCBtX3JlbW90ZU5QT2JqZWN0SURWYWx1ZSgwKQotewotfQotCi1OUFZh
cmlhbnREYXRhIE5QVmFyaWFudERhdGE6Om1ha2VWb2lkKCkKLXsKLSAgICByZXR1cm4gTlBWYXJp
YW50RGF0YSgpOwotfQotCi1OUFZhcmlhbnREYXRhIE5QVmFyaWFudERhdGE6Om1ha2VOdWxsKCkK
LXsKLSAgICBOUFZhcmlhbnREYXRhIG5wVmFyaWFudERhdGE7Ci0gICAgCi0gICAgbnBWYXJpYW50
RGF0YS5tX3R5cGUgPSBOUFZhcmlhbnREYXRhOjpOdWxsOwotICAgIAotICAgIHJldHVybiBucFZh
cmlhbnREYXRhOwotfQotICAgIAotTlBWYXJpYW50RGF0YSBOUFZhcmlhbnREYXRhOjptYWtlQm9v
bChib29sIHZhbHVlKQotewotICAgIE5QVmFyaWFudERhdGEgbnBWYXJpYW50RGF0YTsKLQotICAg
IG5wVmFyaWFudERhdGEubV90eXBlID0gTlBWYXJpYW50RGF0YTo6Qm9vbDsKLSAgICBucFZhcmlh
bnREYXRhLm1fYm9vbFZhbHVlID0gdmFsdWU7Ci0KLSAgICByZXR1cm4gbnBWYXJpYW50RGF0YTsK
LX0KLQotTlBWYXJpYW50RGF0YSBOUFZhcmlhbnREYXRhOjptYWtlSW50MzIoaW50MzJfdCB2YWx1
ZSkKLXsKLSAgICBOUFZhcmlhbnREYXRhIG5wVmFyaWFudERhdGE7Ci0KLSAgICBucFZhcmlhbnRE
YXRhLm1fdHlwZSA9IE5QVmFyaWFudERhdGE6OkludDMyOwotICAgIG5wVmFyaWFudERhdGEubV9p
bnQzMlZhbHVlID0gdmFsdWU7Ci0KLSAgICByZXR1cm4gbnBWYXJpYW50RGF0YTsKLX0gICAgCi0K
LU5QVmFyaWFudERhdGEgTlBWYXJpYW50RGF0YTo6bWFrZURvdWJsZShkb3VibGUgdmFsdWUpCi17
Ci0gICAgTlBWYXJpYW50RGF0YSBucFZhcmlhbnREYXRhOwotCi0gICAgbnBWYXJpYW50RGF0YS5t
X3R5cGUgPSBOUFZhcmlhbnREYXRhOjpEb3VibGU7Ci0gICAgbnBWYXJpYW50RGF0YS5tX2RvdWJs
ZVZhbHVlID0gdmFsdWU7Ci0KLSAgICByZXR1cm4gbnBWYXJpYW50RGF0YTsKLX0KLQotTlBWYXJp
YW50RGF0YSBOUFZhcmlhbnREYXRhOjptYWtlU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZywgdW5z
aWduZWQgbGVuZ3RoKQotewotICAgIE5QVmFyaWFudERhdGEgbnBWYXJpYW50RGF0YTsKLSAgICAK
LSAgICBucFZhcmlhbnREYXRhLm1fdHlwZSA9IE5QVmFyaWFudERhdGE6OlN0cmluZzsKLSAgICBu
cFZhcmlhbnREYXRhLm1fc3RyaW5nVmFsdWUgPSBDU3RyaW5nKHN0cmluZywgbGVuZ3RoKTsKLSAg
ICAKLSAgICByZXR1cm4gbnBWYXJpYW50RGF0YTsKLX0KLQotTlBWYXJpYW50RGF0YSBOUFZhcmlh
bnREYXRhOjptYWtlTG9jYWxOUE9iamVjdElEKHVpbnQ2NF90IHZhbHVlKQotewotICAgIE5QVmFy
aWFudERhdGEgbnBWYXJpYW50RGF0YTsKLQotICAgIG5wVmFyaWFudERhdGEubV90eXBlID0gTlBW
YXJpYW50RGF0YTo6TG9jYWxOUE9iamVjdElEOwotICAgIG5wVmFyaWFudERhdGEubV9sb2NhbE5Q
T2JqZWN0SURWYWx1ZSA9IHZhbHVlOwotCi0gICAgcmV0dXJuIG5wVmFyaWFudERhdGE7Ci19Ci0K
LU5QVmFyaWFudERhdGEgTlBWYXJpYW50RGF0YTo6bWFrZVJlbW90ZU5QT2JqZWN0SUQodWludDY0
X3QgdmFsdWUpCi17Ci0gICAgTlBWYXJpYW50RGF0YSBucFZhcmlhbnREYXRhOwotCi0gICAgbnBW
YXJpYW50RGF0YS5tX3R5cGUgPSBOUFZhcmlhbnREYXRhOjpSZW1vdGVOUE9iamVjdElEOwotICAg
IG5wVmFyaWFudERhdGEubV9yZW1vdGVOUE9iamVjdElEVmFsdWUgPSB2YWx1ZTsKLQotICAgIHJl
dHVybiBucFZhcmlhbnREYXRhOwotfQotCi12b2lkIE5QVmFyaWFudERhdGE6OmVuY29kZShJUEM6
OkVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3R5cGU7Ci0KLSAg
ICBzd2l0Y2ggKHR5cGUoKSkgewotICAgIGNhc2UgTlBWYXJpYW50RGF0YTo6Vm9pZDoKLSAgICBj
YXNlIE5QVmFyaWFudERhdGE6Ok51bGw6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlBWYXJp
YW50RGF0YTo6Qm9vbDoKLSAgICAgICAgZW5jb2RlciA8PCBib29sVmFsdWUoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBOUFZhcmlhbnREYXRhOjpJbnQzMjoKLSAgICAgICAgZW5jb2RlciA8
PCBpbnQzMlZhbHVlKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlBWYXJpYW50RGF0YTo6
RG91YmxlOgotICAgICAgICBlbmNvZGVyIDw8IGRvdWJsZVZhbHVlKCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgTlBWYXJpYW50RGF0YTo6U3RyaW5nOgotICAgICAgICBlbmNvZGVyIDw8IHN0
cmluZ1ZhbHVlKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlBWYXJpYW50RGF0YTo6TG9j
YWxOUE9iamVjdElEOgotICAgICAgICBlbmNvZGVyIDw8IGxvY2FsTlBPYmplY3RJRFZhbHVlKCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlBWYXJpYW50RGF0YTo6UmVtb3RlTlBPYmplY3RJ
RDoKLSAgICAgICAgZW5jb2RlciA8PCByZW1vdGVOUE9iamVjdElEVmFsdWUoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotfQotCi1zdGQ6Om9wdGlvbmFsPE5QVmFyaWFudERhdGE+IE5QVmFyaWFu
dERhdGE6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIpCi17Ci0gICAgTlBWYXJpYW50RGF0
YSByZXN1bHQ7Ci0gICAgdWludDMyX3QgdHlwZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHR5
cGUpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgLy8gV2Ugc3BlY2lhbC1j
YXNlIExvY2FsTlBPYmplY3RJRCBhbmQgUmVtb3RlTlBPYmplY3RJRCBoZXJlIHNvIGEgTG9jYWxO
UE9iamVjdElEIGlzCi0gICAgLy8gZGVjb2RlZCBhcyBhIFJlbW90ZU5QT2JqZWN0SUQgYW5kIHZp
Y2UgdmVyc2EuCi0gICAgLy8gVGhpcyBpcyBkb25lIGJlY2F1c2UgdGhlIHR5cGUgaXMgZnJvbSB0
aGUgcGVyc3BlY3RpdmUgb2YgdGhlIG90aGVyIGNvbm5lY3Rpb24sIGFuZAotICAgIC8vIHRodXMg
d2UgaGF2ZSB0byBhZGp1c3QgaXQgdG8gbWF0Y2ggb3VyIG93biBwZXJzcGVjdGl2ZS4KLSAgICBp
ZiAodHlwZSA9PSBOUFZhcmlhbnREYXRhOjpMb2NhbE5QT2JqZWN0SUQpCi0gICAgICAgIHR5cGUg
PSBOUFZhcmlhbnREYXRhOjpSZW1vdGVOUE9iamVjdElEOwotICAgIGVsc2UgaWYgKHR5cGUgPT0g
TlBWYXJpYW50RGF0YTo6UmVtb3RlTlBPYmplY3RJRCkKLSAgICAgICAgdHlwZSA9IE5QVmFyaWFu
dERhdGE6OkxvY2FsTlBPYmplY3RJRDsKLQotICAgIHJlc3VsdC5tX3R5cGUgPSB0eXBlOwotCi0g
ICAgc3dpdGNoIChyZXN1bHQubV90eXBlKSB7Ci0gICAgY2FzZSBOUFZhcmlhbnREYXRhOjpWb2lk
OgotICAgIGNhc2UgTlBWYXJpYW50RGF0YTo6TnVsbDoKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICBjYXNlIE5QVmFyaWFudERhdGE6OkJvb2w6Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0Lm1fYm9vbFZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgY2FzZSBOUFZhcmlhbnREYXRhOjpJbnQzMjoK
LSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubV9pbnQzMlZhbHVlKSkKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
Y2FzZSBOUFZhcmlhbnREYXRhOjpEb3VibGU6Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0Lm1fZG91YmxlVmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBjYXNlIE5QVmFyaWFudERhdGE6OlN0cmluZzoK
LSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubV9zdHJpbmdWYWx1ZSkpCi0gICAg
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IGNhc2UgTlBWYXJpYW50RGF0YTo6TG9jYWxOUE9iamVjdElEOgotICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5tX2xvY2FsTlBPYmplY3RJRFZhbHVlKSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgY2FzZSBOUFZh
cmlhbnREYXRhOjpSZW1vdGVOUE9iamVjdElEOgotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC5tX3JlbW90ZU5QT2JqZWN0SURWYWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9QbHVnaW5zL05QVmFyaWFudERhdGEuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMv
TlBWYXJpYW50RGF0YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNThlMmQ1MDRi
YWQ5Yjc0NmQ2Mzc0MjU3OTA1Y2NlMzhmYjczYmZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTlBWYXJp
YW50RGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSVBDIHsKLWNsYXNzIERlY29kZXI7
Ci1jbGFzcyBFbmNvZGVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgTlBWYXJp
YW50RGF0YSB7Ci1wdWJsaWM6Ci0gICAgZW51bSBUeXBlIHsKLSAgICAgICAgVm9pZCwKLSAgICAg
ICAgTnVsbCwKLSAgICAgICAgQm9vbCwKLSAgICAgICAgSW50MzIsCi0gICAgICAgIERvdWJsZSwK
LSAgICAgICAgU3RyaW5nLAotICAgICAgICBMb2NhbE5QT2JqZWN0SUQsCi0gICAgICAgIFJlbW90
ZU5QT2JqZWN0SUQsCi0gICAgfTsKLSAgICBOUFZhcmlhbnREYXRhKCk7Ci0KLSAgICBzdGF0aWMg
TlBWYXJpYW50RGF0YSBtYWtlVm9pZCgpOwotICAgIHN0YXRpYyBOUFZhcmlhbnREYXRhIG1ha2VO
dWxsKCk7Ci0gICAgc3RhdGljIE5QVmFyaWFudERhdGEgbWFrZUJvb2woYm9vbCB2YWx1ZSk7Ci0g
ICAgc3RhdGljIE5QVmFyaWFudERhdGEgbWFrZUludDMyKGludDMyX3QgdmFsdWUpOwotICAgIHN0
YXRpYyBOUFZhcmlhbnREYXRhIG1ha2VEb3VibGUoZG91YmxlIHZhbHVlKTsKLSAgICBzdGF0aWMg
TlBWYXJpYW50RGF0YSBtYWtlU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZywgdW5zaWduZWQgbGVu
Z3RoKTsKLSAgICBzdGF0aWMgTlBWYXJpYW50RGF0YSBtYWtlTG9jYWxOUE9iamVjdElEKHVpbnQ2
NF90IHZhbHVlKTsKLSAgICBzdGF0aWMgTlBWYXJpYW50RGF0YSBtYWtlUmVtb3RlTlBPYmplY3RJ
RCh1aW50NjRfdCB2YWx1ZSk7Ci0KLSAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxUeXBlPihtX3R5cGUpOyB9Ci0KLSAgICBib29sIGJvb2xWYWx1ZSgpIGNvbnN0Ci0g
ICAgewotICAgICAgICBBU1NFUlQodHlwZSgpID09IE5QVmFyaWFudERhdGE6OkJvb2wpOwotICAg
ICAgICByZXR1cm4gbV9ib29sVmFsdWU7Ci0gICAgfQotCi0gICAgaW50MzJfdCBpbnQzMlZhbHVl
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh0eXBlKCkgPT0gTlBWYXJpYW50RGF0YTo6
SW50MzIpOwotICAgICAgICByZXR1cm4gbV9pbnQzMlZhbHVlOwotICAgIH0KLQotICAgIGRvdWJs
ZSBkb3VibGVWYWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQodHlwZSgpID09IE5Q
VmFyaWFudERhdGE6OkRvdWJsZSk7Ci0gICAgICAgIHJldHVybiBtX2RvdWJsZVZhbHVlOwotICAg
IH0KLQotICAgIGNvbnN0IENTdHJpbmcmIHN0cmluZ1ZhbHVlKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVCh0eXBlKCkgPT0gTlBWYXJpYW50RGF0YTo6U3RyaW5nKTsKLSAgICAgICAgcmV0
dXJuIG1fc3RyaW5nVmFsdWU7Ci0gICAgfQotCi0gICAgdWludDY0X3QgbG9jYWxOUE9iamVjdElE
VmFsdWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKHR5cGUoKSA9PSBOUFZhcmlhbnRE
YXRhOjpMb2NhbE5QT2JqZWN0SUQpOwotICAgICAgICByZXR1cm4gbV9sb2NhbE5QT2JqZWN0SURW
YWx1ZTsKLSAgICB9Ci0KLSAgICB1aW50NjRfdCByZW1vdGVOUE9iamVjdElEVmFsdWUoKSBjb25z
dAotICAgIHsKLSAgICAgICAgQVNTRVJUKHR5cGUoKSA9PSBOUFZhcmlhbnREYXRhOjpSZW1vdGVO
UE9iamVjdElEKTsKLSAgICAgICAgcmV0dXJuIG1fcmVtb3RlTlBPYmplY3RJRFZhbHVlOwotICAg
IH0KLQotICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0OwotICAgIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPE5QVmFyaWFudERhdGE+IGRlY29kZShJUEM6OkRlY29kZXImKTsKLQotcHJp
dmF0ZToKLSAgICB1aW50MzJfdCBtX3R5cGU7Ci0gICAgYm9vbCBtX2Jvb2xWYWx1ZTsKLSAgICBp
bnQzMl90IG1faW50MzJWYWx1ZTsKLSAgICBkb3VibGUgbV9kb3VibGVWYWx1ZTsKLSAgICBDU3Ry
aW5nIG1fc3RyaW5nVmFsdWU7Ci0gICAgdWludDY0X3QgbV9sb2NhbE5QT2JqZWN0SURWYWx1ZTsK
LSAgICB1aW50NjRfdCBtX3JlbW90ZU5QT2JqZWN0SURWYWx1ZTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1
Z2luTW9kdWxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0
c2NhcGVQbHVnaW5Nb2R1bGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjFk
N2E4OTY5MzA2YTg5MjVjNGFiMzZlNDc5NDdiMzk2YzEyNTJjLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMv
TmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5Nb2R1bGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjU3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTmV0
c2NhcGVQbHVnaW5Nb2R1bGUuaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQot
Ci0jaW5jbHVkZSAiTW9kdWxlLmgiCi0jaW5jbHVkZSAiTlBSdW50aW1lVXRpbGl0aWVzLmgiCi0j
aW5jbHVkZSAiTmV0c2NhcGVCcm93c2VyRnVuY3MuaCIKLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1zdGF0aWMgVmVjdG9yPE5ldHNjYXBlUGx1Z2luTW9kdWxlKj4mIGluaXRpYWxpemVk
TmV0c2NhcGVQbHVnaW5Nb2R1bGVzKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVj
dG9yPE5ldHNjYXBlUGx1Z2luTW9kdWxlKj4+IGluaXRpYWxpemVkTmV0c2NhcGVQbHVnaW5Nb2R1
bGVzOwotICAgIHJldHVybiBpbml0aWFsaXplZE5ldHNjYXBlUGx1Z2luTW9kdWxlczsKLX0KLQot
TmV0c2NhcGVQbHVnaW5Nb2R1bGU6Ok5ldHNjYXBlUGx1Z2luTW9kdWxlKGNvbnN0IFN0cmluZyYg
cGx1Z2luUGF0aCkKLSAgICA6IG1fcGx1Z2luUGF0aChwbHVnaW5QYXRoKQotICAgICwgbV9pc0lu
aXRpYWxpemVkKGZhbHNlKQotICAgICwgbV9sb2FkQ291bnQoMCkKLSAgICAsIG1fc2h1dGRvd25Q
cm9jUHRyKDApCi0gICAgLCBtX3BsdWdpbkZ1bmNzKCkKLXsKLX0KLQotTmV0c2NhcGVQbHVnaW5N
b2R1bGU6On5OZXRzY2FwZVBsdWdpbk1vZHVsZSgpCi17Ci0gICAgQVNTRVJUKGluaXRpYWxpemVk
TmV0c2NhcGVQbHVnaW5Nb2R1bGVzKCkuZmluZCh0aGlzKSA9PSBub3RGb3VuZCk7Ci19Ci0KLVZl
Y3RvcjxTdHJpbmc+IE5ldHNjYXBlUGx1Z2luTW9kdWxlOjpzaXRlc1dpdGhEYXRhKCkKLXsKLSAg
ICBWZWN0b3I8U3RyaW5nPiBzaXRlczsKLQotICAgIGluY3JlbWVudExvYWRDb3VudCgpOwotICAg
IHRyeUdldFNpdGVzV2l0aERhdGEoc2l0ZXMpOwotICAgIGRlY3JlbWVudExvYWRDb3VudCgpOwot
Ci0gICAgcmV0dXJuIHNpdGVzOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luTW9kdWxlOjpjbGVh
clNpdGVEYXRhKGNvbnN0IFN0cmluZyYgc2l0ZSwgdWludDY0X3QgZmxhZ3MsIHVpbnQ2NF90IG1h
eEFnZSkKLXsKLSAgICBpbmNyZW1lbnRMb2FkQ291bnQoKTsKLSAgICBib29sIHJlc3VsdCA9IHRy
eUNsZWFyU2l0ZURhdGEoc2l0ZSwgZmxhZ3MsIG1heEFnZSk7Ci0gICAgZGVjcmVtZW50TG9hZENv
dW50KCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luTW9k
dWxlOjp0cnlHZXRTaXRlc1dpdGhEYXRhKFZlY3RvcjxTdHJpbmc+JiBzaXRlcykKLXsKLSAgICBp
ZiAoIW1faXNJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQ2hl
Y2sgaWYgdGhlIHBsdWctaW4gc3VwcG9ydHMgTlBQX0dldFNpdGVzV2l0aERhdGEuCi0gICAgaWYg
KCFtX3BsdWdpbkZ1bmNzLmdldHNpdGVzd2l0aGRhdGEpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGNoYXIqKiBzaXRlQXJyYXkgPSBtX3BsdWdpbkZ1bmNzLmdldHNpdGVzd2l0aGRhdGEo
KTsKLQotICAgIC8vIFRoZXJlIHdlcmUgbm8gc2l0ZXMgd2l0aCBkYXRhLgotICAgIGlmICghc2l0
ZUFycmF5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBzaXRl
QXJyYXlbaV07ICsraSkgewotICAgICAgICBjaGFyKiBzaXRlID0gc2l0ZUFycmF5W2ldOwotCi0g
ICAgICAgIFN0cmluZyBzaXRlU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChzaXRlKTsKLSAgICAg
ICAgaWYgKCFzaXRlU3RyaW5nLmlzTnVsbCgpKQotICAgICAgICAgICAgc2l0ZXMuYXBwZW5kKHNp
dGVTdHJpbmcpOwotCi0gICAgICAgIG5wbk1lbUZyZWUoc2l0ZSk7Ci0gICAgfQotCi0gICAgbnBu
TWVtRnJlZShzaXRlQXJyYXkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE5ldHNjYXBl
UGx1Z2luTW9kdWxlOjp0cnlDbGVhclNpdGVEYXRhKGNvbnN0IFN0cmluZyYgc2l0ZSwgdWludDY0
X3QgZmxhZ3MsIHVpbnQ2NF90IG1heEFnZSkKLXsKLSAgICBpZiAoIW1faXNJbml0aWFsaXplZCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIHBsdWctaW4gc3Vw
cG9ydHMgTlBQX0NsZWFyU2l0ZURhdGEuCi0gICAgaWYgKCFtX3BsdWdpbkZ1bmNzLmNsZWFyc2l0
ZWRhdGEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENTdHJpbmcgc2l0ZVN0cmluZzsK
LSAgICBpZiAoIXNpdGUuaXNOdWxsKCkpCi0gICAgICAgIHNpdGVTdHJpbmcgPSBzaXRlLnV0Zjgo
KTsKLQotICAgIHJldHVybiBtX3BsdWdpbkZ1bmNzLmNsZWFyc2l0ZWRhdGEoc2l0ZVN0cmluZy5k
YXRhKCksIGZsYWdzLCBtYXhBZ2UpID09IE5QRVJSX05PX0VSUk9SOwotfQotCi12b2lkIE5ldHNj
YXBlUGx1Z2luTW9kdWxlOjpzaHV0ZG93bigpCi17Ci0gICAgQVNTRVJUKG1faXNJbml0aWFsaXpl
ZCk7Ci0KLSAgICBtX3NodXRkb3duUHJvY1B0cigpOwotCi0gICAgbV9pc0luaXRpYWxpemVkID0g
ZmFsc2U7Ci0KLSAgICBzaXplX3QgcGx1Z2luTW9kdWxlSW5kZXggPSBpbml0aWFsaXplZE5ldHNj
YXBlUGx1Z2luTW9kdWxlcygpLmZpbmQodGhpcyk7Ci0gICAgQVNTRVJUKHBsdWdpbk1vZHVsZUlu
ZGV4ICE9IG5vdEZvdW5kKTsKLQotICAgIGluaXRpYWxpemVkTmV0c2NhcGVQbHVnaW5Nb2R1bGVz
KCkucmVtb3ZlKHBsdWdpbk1vZHVsZUluZGV4KTsKLX0KLQotUmVmUHRyPE5ldHNjYXBlUGx1Z2lu
TW9kdWxlPiBOZXRzY2FwZVBsdWdpbk1vZHVsZTo6Z2V0T3JDcmVhdGUoY29uc3QgU3RyaW5nJiBw
bHVnaW5QYXRoKQotewotICAgIC8vIEZpcnN0LCBzZWUgaWYgd2UgYWxyZWFkeSBoYXZlIGEgbW9k
dWxlIHdpdGggdGhpcyBwbHVnLWluIHBhdGguCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
bml0aWFsaXplZE5ldHNjYXBlUGx1Z2luTW9kdWxlcygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IE5ldHNjYXBlUGx1Z2luTW9kdWxlKiBwbHVnaW5Nb2R1bGUgPSBpbml0aWFsaXplZE5ldHNjYXBl
UGx1Z2luTW9kdWxlcygpW2ldOwotCi0gICAgICAgIGlmIChwbHVnaW5Nb2R1bGUtPm1fcGx1Z2lu
UGF0aCA9PSBwbHVnaW5QYXRoKQotICAgICAgICAgICAgcmV0dXJuIHBsdWdpbk1vZHVsZTsKLSAg
ICB9Ci0KLSAgICBhdXRvIHBsdWdpbk1vZHVsZShhZG9wdFJlZigqbmV3IE5ldHNjYXBlUGx1Z2lu
TW9kdWxlKHBsdWdpblBhdGgpKSk7Ci0gICAgCi0gICAgLy8gVHJ5IHRvIGxvYWQgYW5kIGluaXRp
YWxpemUgdGhlIHBsdWctaW4gbW9kdWxlLgotICAgIGlmICghcGx1Z2luTW9kdWxlLT5sb2FkKCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIHJldHVybiBwbHVnaW5Nb2R1bGU7
Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5Nb2R1bGU6OmluY3JlbWVudExvYWRDb3VudCgpCi17
Ci0gICAgaWYgKCFtX2xvYWRDb3VudCkgewotICAgICAgICAvLyBMb2FkIHRoZSBwbHVnLWluIG1v
ZHVsZSBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGxvYWQoKTsKLSAgICB9Ci0gICAgCi0gICAgbV9s
b2FkQ291bnQrKzsKLX0KLSAgICAKLXZvaWQgTmV0c2NhcGVQbHVnaW5Nb2R1bGU6OmRlY3JlbWVu
dExvYWRDb3VudCgpCi17Ci0gICAgQVNTRVJUKG1fbG9hZENvdW50ID4gMCk7Ci0gICAgbV9sb2Fk
Q291bnQtLTsKLSAgICAKLSAgICBpZiAoIW1fbG9hZENvdW50ICYmIG1faXNJbml0aWFsaXplZCkg
ewotICAgICAgICBzaHV0ZG93bigpOwotICAgICAgICB1bmxvYWQoKTsKLSAgICB9Ci19Ci0KLWJv
b2wgTmV0c2NhcGVQbHVnaW5Nb2R1bGU6OmxvYWQoKQotewotICAgIGlmIChtX2lzSW5pdGlhbGl6
ZWQpIHsKLSAgICAgICAgQVNTRVJUKGluaXRpYWxpemVkTmV0c2NhcGVQbHVnaW5Nb2R1bGVzKCku
ZmluZCh0aGlzKSAhPSBub3RGb3VuZCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIGlmICghdHJ5TG9hZCgpKSB7Ci0gICAgICAgIHVubG9hZCgpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIAotICAgIG1faXNJbml0aWFsaXplZCA9IHRydWU7Ci0KLSAgICBB
U1NFUlQoaW5pdGlhbGl6ZWROZXRzY2FwZVBsdWdpbk1vZHVsZXMoKS5maW5kKHRoaXMpID09IG5v
dEZvdW5kKTsKLSAgICBpbml0aWFsaXplZE5ldHNjYXBlUGx1Z2luTW9kdWxlcygpLmFwcGVuZCh0
aGlzKTsKLQotICAgIGRldGVybWluZVF1aXJrcygpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LSNpZiBQTEFURk9STShHVEspCi1zdGF0aWMgYm9vbCBtb2R1bGVNaXhlc0d0a1N5bWJvbHMoTW9k
dWxlKiBtb2R1bGUpCi17Ci0gICAgcmV0dXJuIG1vZHVsZS0+ZnVuY3Rpb25Qb2ludGVyPGdwb2lu
dGVyPigiZ3RrX29iamVjdF9nZXRfdHlwZSIpOwotfQotI2VuZGlmCi0KLWJvb2wgTmV0c2NhcGVQ
bHVnaW5Nb2R1bGU6OnRyeUxvYWQoKQotewotICAgIG1fbW9kdWxlID0gbWFrZVVuaXF1ZTxNb2R1
bGU+KG1fcGx1Z2luUGF0aCk7Ci0gICAgaWYgKCFtX21vZHVsZS0+bG9hZCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSNpZiBQTEFURk9STShHVEspCi0gICAgaWYgKG1vZHVsZU1peGVzR3Rr
U3ltYm9scyhtX21vZHVsZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgot
Ci0gICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIgaW5pdGlhbGl6ZUZ1bmNQdHIgPSBtX21vZHVsZS0+
ZnVuY3Rpb25Qb2ludGVyPE5QX0luaXRpYWxpemVGdW5jUHRyPigiTlBfSW5pdGlhbGl6ZSIpOwot
ICAgIGlmICghaW5pdGlhbGl6ZUZ1bmNQdHIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lm
ICFQTFVHSU5fQVJDSElURUNUVVJFKFVOSVgpCi0gICAgTlBfR2V0RW50cnlQb2ludHNGdW5jUHRy
IGdldEVudHJ5UG9pbnRzRnVuY1B0ciA9IG1fbW9kdWxlLT5mdW5jdGlvblBvaW50ZXI8TlBfR2V0
RW50cnlQb2ludHNGdW5jUHRyPigiTlBfR2V0RW50cnlQb2ludHMiKTsKLSAgICBpZiAoIWdldEVu
dHJ5UG9pbnRzRnVuY1B0cikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0KLSAgICBt
X3NodXRkb3duUHJvY1B0ciA9IG1fbW9kdWxlLT5mdW5jdGlvblBvaW50ZXI8TlBQX1NodXRkb3du
UHJvY1B0cj4oIk5QX1NodXRkb3duIik7Ci0gICAgaWYgKCFtX3NodXRkb3duUHJvY1B0cikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKE5Q
UGx1Z2luRnVuY3MpOwotICAgIG1fcGx1Z2luRnVuY3MudmVyc2lvbiA9IChOUF9WRVJTSU9OX01B
Sk9SIDw8IDgpIHwgTlBfVkVSU0lPTl9NSU5PUjsKLQotICAgIC8vIE9uIE1hYywgTlBfSW5pdGlh
bGl6ZSBtdXN0IGJlIGNhbGxlZCBmaXJzdCwgdGhlbiBOUF9HZXRFbnRyeVBvaW50cy4gT24gV2lu
ZG93cywgdGhlIG9yZGVyIGlzCi0gICAgLy8gcmV2ZXJzZWQuIEZhaWxpbmcgdG8gZm9sbG93IHRo
aXMgb3JkZXIgcmVzdWx0cyBpbiBjcmFzaGVzIChlLmcuLCBpbiBTaWx2ZXJsaWdodCBvbiBNYWMg
YW5kCi0gICAgLy8gaW4gRmxhc2ggYW5kIFF1aWNrVGltZSBvbiBXaW5kb3dzKS4KLSNpZiBQTFVH
SU5fQVJDSElURUNUVVJFKE1BQykKLSAgICByZXR1cm4gaW5pdGlhbGl6ZUZ1bmNQdHIobmV0c2Nh
cGVCcm93c2VyRnVuY3MoKSkgPT0gTlBFUlJfTk9fRVJST1IgJiYgZ2V0RW50cnlQb2ludHNGdW5j
UHRyKCZtX3BsdWdpbkZ1bmNzKSA9PSBOUEVSUl9OT19FUlJPUjsKLSNlbGlmIFBMVUdJTl9BUkNI
SVRFQ1RVUkUoVU5JWCkKLSAgICBpZiAoaW5pdGlhbGl6ZUZ1bmNQdHIobmV0c2NhcGVCcm93c2Vy
RnVuY3MoKSwgJm1fcGx1Z2luRnVuY3MpICE9IE5QRVJSX05PX0VSUk9SKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0jZW5kaWYKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIE5ldHNjYXBl
UGx1Z2luTW9kdWxlOjp1bmxvYWQoKQotewotICAgIEFTU0VSVCghbV9pc0luaXRpYWxpemVkKTsK
LQotICAgIG1fbW9kdWxlID0gbnVsbHB0cjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5Nb2R1
bGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgyYWRhMTEzNzg0NDNhNDU2NjQw
ZDhjOTVhNDQ4NDliYzA0ZjUwYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBl
UGx1Z2luTW9kdWxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgTmV0c2NhcGVQbHVnaW5Nb2R1bGVfaAotI2RlZmluZSBOZXRzY2FwZVBsdWdp
bk1vZHVsZV9oCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUg
Ik1vZHVsZS5oIgotI2luY2x1ZGUgIlBsdWdpbk1vZHVsZUluZm8uaCIKLSNpbmNsdWRlICJQbHVn
aW5RdWlya3MuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL25wcnVudGltZV9pbnRlcm5hbC5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLXN0cnVjdCBNaW1lQ2xhc3NJbmZvOwotfQotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotc3RydWN0IFJhd1BsdWdpbk1ldGFEYXRhOwotCi1jbGFzcyBOZXRz
Y2FwZVBsdWdpbk1vZHVsZSA6IHB1YmxpYyBSZWZDb3VudGVkPE5ldHNjYXBlUGx1Z2luTW9kdWxl
PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxOZXRzY2FwZVBsdWdpbk1vZHVsZT4gZ2V0
T3JDcmVhdGUoY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoKTsKLSAgICB+TmV0c2NhcGVQbHVnaW5N
b2R1bGUoKTsKLQotICAgIGNvbnN0IE5QUGx1Z2luRnVuY3MmIHBsdWdpbkZ1bmNzKCkgY29uc3Qg
eyByZXR1cm4gbV9wbHVnaW5GdW5jczsgfQotIAotICAgIHZvaWQgaW5jcmVtZW50TG9hZENvdW50
KCk7Ci0gICAgdm9pZCBkZWNyZW1lbnRMb2FkQ291bnQoKTsKLQotICAgIHN0YXRpYyBib29sIGdl
dFBsdWdpbkluZm8oY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoLCBQbHVnaW5Nb2R1bGVJbmZvJik7
Ci0KLSAgICBjb25zdCBQbHVnaW5RdWlya3MmIHBsdWdpblF1aXJrcygpIGNvbnN0IHsgcmV0dXJu
IG1fcGx1Z2luUXVpcmtzOyB9Ci0KLSAgICAvLyBSZXR1cm4gYSBsaXN0IG9mIGRvbWFpbnMgZm9y
IHdoaWNoIHRoZSBwbHVnLWluIGhhcyBkYXRhIHN0b3JlZC4KLSAgICBWZWN0b3I8U3RyaW5nPiBz
aXRlc1dpdGhEYXRhKCk7Ci0KLSAgICAvLyBSZXF1ZXN0IHRoYXQgdGhlIHBsdWctaW4gY2xlYXIg
dGhlIHNpdGUgZGF0YS4KLSAgICBib29sIGNsZWFyU2l0ZURhdGEoY29uc3QgU3RyaW5nJiBzaXRl
LCB1aW50NjRfdCBmbGFncywgdWludDY0X3QgbWF4QWdlKTsKLQotICAgIE1vZHVsZSogbW9kdWxl
KCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7IH0KLQotI2lmIFBMVUdJTl9BUkNISVRF
Q1RVUkUoVU5JWCkKLSAgICBzdGF0aWMgYm9vbCBzY2FuUGx1Z2luKGNvbnN0IFN0cmluZyYgcGx1
Z2luUGF0aCk7Ci0gICAgc3RhdGljIHZvaWQgcGFyc2VNSU1FRGVzY3JpcHRpb24oY29uc3QgU3Ry
aW5nJiBtaW1lRGVzY3JpcHRpb24sIFZlY3RvcjxXZWJDb3JlOjpNaW1lQ2xhc3NJbmZvPiYgcmVz
dWx0KTsKLSAgICBzdGF0aWMgU3RyaW5nIGJ1aWxkTUlNRURlc2NyaXB0aW9uKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpNaW1lQ2xhc3NJbmZvPiYpOwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZXhw
bGljaXQgTmV0c2NhcGVQbHVnaW5Nb2R1bGUoY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoKTsKLQot
ICAgIHZvaWQgZGV0ZXJtaW5lUXVpcmtzKCk7Ci0KLSNpZiBQTFVHSU5fQVJDSElURUNUVVJFKFVO
SVgpCi0gICAgYm9vbCBnZXRQbHVnaW5JbmZvRm9yTG9hZGVkUGx1Z2luKFJhd1BsdWdpbk1ldGFE
YXRhJik7Ci0jZW5kaWYKLQotICAgIGJvb2wgdHJ5R2V0U2l0ZXNXaXRoRGF0YShWZWN0b3I8U3Ry
aW5nPiYpOwotICAgIGJvb2wgdHJ5Q2xlYXJTaXRlRGF0YShjb25zdCBTdHJpbmcmIHNpdGUsIHVp
bnQ2NF90IGZsYWdzLCB1aW50NjRfdCBtYXhBZ2UpOwotCi0gICAgYm9vbCB0cnlMb2FkKCk7Ci0g
ICAgYm9vbCBsb2FkKCk7Ci0gICAgdm9pZCB1bmxvYWQoKTsKLQotICAgIHZvaWQgc2h1dGRvd24o
KTsKLQotICAgIFN0cmluZyBtX3BsdWdpblBhdGg7Ci0gICAgYm9vbCBtX2lzSW5pdGlhbGl6ZWQ7
Ci0gICAgdW5zaWduZWQgbV9sb2FkQ291bnQ7Ci0KLSAgICBQbHVnaW5RdWlya3MgbV9wbHVnaW5R
dWlya3M7Ci0KLSAgICBOUFBfU2h1dGRvd25Qcm9jUHRyIG1fc2h1dGRvd25Qcm9jUHRyOwotICAg
IE5QUGx1Z2luRnVuY3MgbV9wbHVnaW5GdW5jczsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1
bGU+IG1fbW9kdWxlOwotfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYg
Ly8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNlbmRpZiAvLyBOZXRzY2FwZVBsdWdp
bk1vZHVsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL05ldHNj
YXBlL1BsdWdpbkluZm9ybWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMv
TmV0c2NhcGUvUGx1Z2luSW5mb3JtYXRpb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA2Njc3MzRiNGEzYTU5OTM1YmYwOGQ5NDUyYWJiYTAzZDBjNjk3OTkwLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1BsdWdpbnMvTmV0c2NhcGUvUGx1Z2luSW5mb3JtYXRpb24uY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiUGx1Z2luSW5mb3JtYXRpb24uaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQotCi0jaW5jbHVkZSAiQVBJTnVtYmVyLmgiCi0jaW5jbHVkZSAiQVBJU3RyaW5nLmgiCi0jaW5j
bHVkZSAiQVBJVVJMLmgiCi0jaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCi0jaW5jbHVkZSAi
UGx1Z2luTW9kdWxlSW5mby5oIgotI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotU3RyaW5nIHBsdWdp
bkluZm9ybWF0aW9uQnVuZGxlSWRlbnRpZmllcktleSgpCi17Ci0gICAgcmV0dXJuICJQbHVnaW5J
bmZvcm1hdGlvbkJ1bmRsZUlkZW50aWZpZXIiX3M7Ci19Ci0KLVN0cmluZyBwbHVnaW5JbmZvcm1h
dGlvbkJ1bmRsZVZlcnNpb25LZXkoKQotewotICAgIHJldHVybiAiUGx1Z2luSW5mb3JtYXRpb25C
dW5kbGVWZXJzaW9uIl9zOwotfQotCi1TdHJpbmcgcGx1Z2luSW5mb3JtYXRpb25CdW5kbGVTaG9y
dFZlcnNpb25LZXkoKQotewotICAgIHJldHVybiAiUGx1Z2luSW5mb3JtYXRpb25CdW5kbGVTaG9y
dFZlcnNpb24iX3M7Ci19Ci0KLVN0cmluZyBwbHVnaW5JbmZvcm1hdGlvblBhdGhLZXkoKQotewot
ICAgIHJldHVybiAiUGx1Z2luSW5mb3JtYXRpb25QYXRoIl9zOwotfQotCi1TdHJpbmcgcGx1Z2lu
SW5mb3JtYXRpb25EaXNwbGF5TmFtZUtleSgpCi17Ci0gICAgcmV0dXJuICJQbHVnaW5JbmZvcm1h
dGlvbkRpc3BsYXlOYW1lIl9zOwotfQotCi1TdHJpbmcgcGx1Z2luSW5mb3JtYXRpb25EZWZhdWx0
TG9hZFBvbGljeUtleSgpCi17Ci0gICAgcmV0dXJuICJQbHVnaW5JbmZvcm1hdGlvbkRlZmF1bHRM
b2FkUG9saWN5Il9zOwotfQotCi1TdHJpbmcgcGx1Z2luSW5mb3JtYXRpb25VcGRhdGVQYXN0TGFz
dEJsb2NrZWRWZXJzaW9uSXNLbm93bkF2YWlsYWJsZUtleSgpCi17Ci0gICAgcmV0dXJuICJQbHVn
aW5JbmZvcm1hdGlvblVwZGF0ZVBhc3RMYXN0QmxvY2tlZFZlcnNpb25Jc0tub3duQXZhaWxhYmxl
Il9zOwotfQotCi1TdHJpbmcgcGx1Z2luSW5mb3JtYXRpb25IYXNTYW5kYm94UHJvZmlsZUtleSgp
Ci17Ci0gICAgcmV0dXJuICJQbHVnaW5JbmZvcm1hdGlvbkhhc1NhbmRib3hQcm9maWxlIl9zOwot
fQotCi1TdHJpbmcgcGx1Z2luSW5mb3JtYXRpb25GcmFtZVVSTEtleSgpCi17Ci0gICAgcmV0dXJu
ICJQbHVnaW5JbmZvcm1hdGlvbkZyYW1lVVJMIl9zOwotfQotCi1TdHJpbmcgcGx1Z2luSW5mb3Jt
YXRpb25NSU1FVHlwZUtleSgpCi17Ci0gICAgcmV0dXJuICJQbHVnaW5JbmZvcm1hdGlvbk1JTUVU
eXBlIl9zOwotfQotCi1TdHJpbmcgcGx1Z2luSW5mb3JtYXRpb25QYWdlVVJMS2V5KCkKLXsKLSAg
ICByZXR1cm4gIlBsdWdpbkluZm9ybWF0aW9uUGFnZVVSTCJfczsKLX0KLQotU3RyaW5nIHBsdWdp
bkluZm9ybWF0aW9uUGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkxLZXkoKQotewotICAgIHJldHVybiAi
UGx1Z2luSW5mb3JtYXRpb25QbHVnaW5zcGFnZUF0dHJpYnV0ZVVSTCJfczsKLX0KLQotU3RyaW5n
IHBsdWdpbkluZm9ybWF0aW9uUGx1Z2luVVJMS2V5KCkKLXsKLSAgICByZXR1cm4gIlBsdWdpbklu
Zm9ybWF0aW9uUGx1Z2luVVJMIl9zOwotfQotCi1TdHJpbmcgcGx1Z0luSW5mb3JtYXRpb25SZXBs
YWNlbWVudE9ic2N1cmVkS2V5KCkKLXsKLSAgICByZXR1cm4gIlBsdWdJbkluZm9ybWF0aW9uUmVw
bGFjZW1lbnRPYnNjdXJlZCJfczsKLX0KLQotdm9pZCBnZXRQbHVnaW5Nb2R1bGVJbmZvcm1hdGlv
bihjb25zdCBQbHVnaW5Nb2R1bGVJbmZvJiBwbHVnaW4sIEFQSTo6RGljdGlvbmFyeTo6TWFwVHlw
ZSYgbWFwKQotewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIG1hcC5zZXQo
cGx1Z2luSW5mb3JtYXRpb25QYXRoS2V5KCksIEFQSTo6U3RyaW5nOjpjcmVhdGUocGx1Z2luLnBh
dGgpKTsKLSAgICBtYXAuc2V0KHBsdWdpbkluZm9ybWF0aW9uRGlzcGxheU5hbWVLZXkoKSwgQVBJ
OjpTdHJpbmc6OmNyZWF0ZShwbHVnaW4uaW5mby5uYW1lKSk7Ci0gICAgbWFwLnNldChwbHVnaW5J
bmZvcm1hdGlvbkRlZmF1bHRMb2FkUG9saWN5S2V5KCksIEFQSTo6VUludDY0OjpjcmVhdGUodG9X
S1BsdWdpbkxvYWRQb2xpY3koUGx1Z2luSW5mb1N0b3JlOjpkZWZhdWx0TG9hZFBvbGljeUZvclBs
dWdpbihwbHVnaW4pKSkpOwotCi0gICAgZ2V0UGxhdGZvcm1QbHVnaW5Nb2R1bGVJbmZvcm1hdGlv
bihwbHVnaW4sIG1hcCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShwbHVnaW4pOwotICAgIFVO
VVNFRF9QQVJBTShtYXApOwotI2VuZGlmCi19Ci0KLVJlZjxBUEk6OkRpY3Rpb25hcnk+IGNyZWF0
ZVBsdWdpbkluZm9ybWF0aW9uRGljdGlvbmFyeShjb25zdCBQbHVnaW5Nb2R1bGVJbmZvJiBwbHVn
aW4pCi17Ci0gICAgQVBJOjpEaWN0aW9uYXJ5OjpNYXBUeXBlIG1hcDsKLSAgICBnZXRQbHVnaW5N
b2R1bGVJbmZvcm1hdGlvbihwbHVnaW4sIG1hcCk7Ci0KLSAgICByZXR1cm4gQVBJOjpEaWN0aW9u
YXJ5OjpjcmVhdGUoV1RGTW92ZShtYXApKTsKLX0KLQotUmVmPEFQSTo6RGljdGlvbmFyeT4gY3Jl
YXRlUGx1Z2luSW5mb3JtYXRpb25EaWN0aW9uYXJ5KGNvbnN0IFBsdWdpbk1vZHVsZUluZm8mIHBs
dWdpbiwgY29uc3QgU3RyaW5nJiBmcmFtZVVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgY29uc3QgU3RyaW5nJiBwYWdlVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIHBsdWdpbnNwYWdl
QXR0cmlidXRlVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIHBsdWdpblVSTFN0cmluZywgYm9vbCBy
ZXBsYWNlbWVudE9ic2N1cmVkKQotewotICAgIEFQSTo6RGljdGlvbmFyeTo6TWFwVHlwZSBtYXA7
Ci0gICAgZ2V0UGx1Z2luTW9kdWxlSW5mb3JtYXRpb24ocGx1Z2luLCBtYXApOwotCi0gICAgaWYg
KCFmcmFtZVVSTFN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIG1hcC5zZXQocGx1Z2luSW5mb3Jt
YXRpb25GcmFtZVVSTEtleSgpLCBBUEk6OlVSTDo6Y3JlYXRlKGZyYW1lVVJMU3RyaW5nKSk7Ci0g
ICAgaWYgKCFtaW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIG1hcC5zZXQocGx1Z2luSW5mb3Jt
YXRpb25NSU1FVHlwZUtleSgpLCBBUEk6OlN0cmluZzo6Y3JlYXRlKG1pbWVUeXBlKSk7Ci0gICAg
aWYgKCFwYWdlVVJMU3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgbWFwLnNldChwbHVnaW5JbmZv
cm1hdGlvblBhZ2VVUkxLZXkoKSwgQVBJOjpVUkw6OmNyZWF0ZShwYWdlVVJMU3RyaW5nKSk7Ci0g
ICAgaWYgKCFwbHVnaW5zcGFnZUF0dHJpYnV0ZVVSTFN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAg
IG1hcC5zZXQocGx1Z2luSW5mb3JtYXRpb25QbHVnaW5zcGFnZUF0dHJpYnV0ZVVSTEtleSgpLCBB
UEk6OlVSTDo6Y3JlYXRlKHBsdWdpbnNwYWdlQXR0cmlidXRlVVJMU3RyaW5nKSk7Ci0gICAgaWYg
KCFwbHVnaW5VUkxTdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICBtYXAuc2V0KHBsdWdpbkluZm9y
bWF0aW9uUGx1Z2luVVJMS2V5KCksIEFQSTo6VVJMOjpjcmVhdGUocGx1Z2luVVJMU3RyaW5nKSk7
Ci0gICAgbWFwLnNldChwbHVnSW5JbmZvcm1hdGlvblJlcGxhY2VtZW50T2JzY3VyZWRLZXkoKSwg
QVBJOjpCb29sZWFuOjpjcmVhdGUocmVwbGFjZW1lbnRPYnNjdXJlZCkpOwotCi0gICAgcmV0dXJu
IEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKFdURk1vdmUobWFwKSk7Ci19Ci0KLVJlZjxBUEk6OkRp
Y3Rpb25hcnk+IGNyZWF0ZVBsdWdpbkluZm9ybWF0aW9uRGljdGlvbmFyeShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGZyYW1lVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIHBh
Z2VVUkxTdHJpbmcpCi17Ci0gICAgQVBJOjpEaWN0aW9uYXJ5OjpNYXBUeXBlIG1hcDsKLQotICAg
IGlmICghZnJhbWVVUkxTdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICBtYXAuc2V0KHBsdWdpbklu
Zm9ybWF0aW9uRnJhbWVVUkxLZXkoKSwgQVBJOjpVUkw6OmNyZWF0ZShmcmFtZVVSTFN0cmluZykp
OwotICAgIGlmICghbWltZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICBtYXAuc2V0KHBsdWdpbklu
Zm9ybWF0aW9uTUlNRVR5cGVLZXkoKSwgQVBJOjpTdHJpbmc6OmNyZWF0ZShtaW1lVHlwZSkpOwot
ICAgIGlmICghcGFnZVVSTFN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIG1hcC5zZXQocGx1Z2lu
SW5mb3JtYXRpb25QYWdlVVJMS2V5KCksIEFQSTo6VVJMOjpjcmVhdGUocGFnZVVSTFN0cmluZykp
OwotCi0gICAgcmV0dXJuIEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKFdURk1vdmUobWFwKSk7Ci19
Ci0KLSNpZiAhUExBVEZPUk0oQ09DT0EpCi12b2lkIGdldFBsYXRmb3JtUGx1Z2luTW9kdWxlSW5m
b3JtYXRpb24oY29uc3QgUGx1Z2luTW9kdWxlSW5mbyYsIEFQSTo6RGljdGlvbmFyeTo6TWFwVHlw
ZSYpCi17Ci19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1BsdWdpbnMvTmV0c2NhcGUvUGx1Z2luSW5mb3JtYXRpb24uaCBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvUGx1Z2luSW5mb3JtYXRpb24uaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOTY5ZTg1YTBhNGQxYzMxYjc1MDU4OTI2MDM4MzA4MTE5OTFlNzJh
OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL1BsdWdpbkluZm9ybWF0aW9uLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5JbmZv
cm1hdGlvbl9oCi0jZGVmaW5lIFBsdWdpbkluZm9ybWF0aW9uX2gKLQotI2luY2x1ZGUgIkFQSURp
Y3Rpb25hcnkuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotc3RydWN0IFBsdWdpbk1vZHVsZUluZm87Ci0KLS8vIFBsdWctaW4gbW9kdWxlIGluZm9y
bWF0aW9uIGtleXMKLVN0cmluZyBwbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZUlkZW50aWZpZXJLZXko
KTsKLVN0cmluZyBwbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZVZlcnNpb25LZXkoKTsKLVN0cmluZyBw
bHVnaW5JbmZvcm1hdGlvbkJ1bmRsZVNob3J0VmVyc2lvbktleSgpOwotU3RyaW5nIHBsdWdpbklu
Zm9ybWF0aW9uUGF0aEtleSgpOwotU3RyaW5nIHBsdWdpbkluZm9ybWF0aW9uRGlzcGxheU5hbWVL
ZXkoKTsKLVN0cmluZyBwbHVnaW5JbmZvcm1hdGlvbkRlZmF1bHRMb2FkUG9saWN5S2V5KCk7Ci1T
dHJpbmcgcGx1Z2luSW5mb3JtYXRpb25VcGRhdGVQYXN0TGFzdEJsb2NrZWRWZXJzaW9uSXNLbm93
bkF2YWlsYWJsZUtleSgpOwotU3RyaW5nIHBsdWdpbkluZm9ybWF0aW9uSGFzU2FuZGJveFByb2Zp
bGVLZXkoKTsKLQotLy8gUGx1Zy1pbiBsb2FkIHNwZWNpZmljIGluZm9ybWF0aW9uIGtleXMKLVN0
cmluZyBwbHVnaW5JbmZvcm1hdGlvbkZyYW1lVVJMS2V5KCk7Ci1TdHJpbmcgcGx1Z2luSW5mb3Jt
YXRpb25NSU1FVHlwZUtleSgpOwotU3RyaW5nIHBsdWdpbkluZm9ybWF0aW9uUGFnZVVSTEtleSgp
OwotU3RyaW5nIHBsdWdpbkluZm9ybWF0aW9uUGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkxLZXkoKTsK
LVN0cmluZyBwbHVnaW5JbmZvcm1hdGlvblBsdWdpblVSTEtleSgpOwotU3RyaW5nIHBsdWdJbklu
Zm9ybWF0aW9uUmVwbGFjZW1lbnRPYnNjdXJlZEtleSgpOwotCi1SZWY8QVBJOjpEaWN0aW9uYXJ5
PiBjcmVhdGVQbHVnaW5JbmZvcm1hdGlvbkRpY3Rpb25hcnkoY29uc3QgUGx1Z2luTW9kdWxlSW5m
byYpOwotUmVmPEFQSTo6RGljdGlvbmFyeT4gY3JlYXRlUGx1Z2luSW5mb3JtYXRpb25EaWN0aW9u
YXJ5KGNvbnN0IFBsdWdpbk1vZHVsZUluZm8mLCBjb25zdCBTdHJpbmcmIGZyYW1lVVJMU3RyaW5n
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkxTdHJpbmcsIGNv
bnN0IFN0cmluZyYgcGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cGx1Z2luVVJMU3RyaW5nLCBib29sIHJlcGxhY2VtZW50T2JzY3VyZWQgPSBmYWxzZSk7Ci1SZWY8
QVBJOjpEaWN0aW9uYXJ5PiBjcmVhdGVQbHVnaW5JbmZvcm1hdGlvbkRpY3Rpb25hcnkoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBmcmFtZVVSTFN0cmluZywgY29uc3QgU3Ry
aW5nJiBwYWdlVVJMU3RyaW5nKTsKLQotdm9pZCBnZXRQbHVnaW5Nb2R1bGVJbmZvcm1hdGlvbihj
b25zdCBQbHVnaW5Nb2R1bGVJbmZvJiwgQVBJOjpEaWN0aW9uYXJ5OjpNYXBUeXBlJik7Ci12b2lk
IGdldFBsYXRmb3JtUGx1Z2luTW9kdWxlSW5mb3JtYXRpb24oY29uc3QgUGx1Z2luTW9kdWxlSW5m
byYsIEFQSTo6RGljdGlvbmFyeTo6TWFwVHlwZSYpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmIC8vIFBsdWdpbkluZm9ybWF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvbWFjL05ldHNjYXBlUGx1Z2luTW9kdWxlTWFjLm1t
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9tYWMvTmV0c2NhcGVQbHVn
aW5Nb2R1bGVNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjM2ExN2VhOTk2
OTljYzI3ZjEwMWNkN2U3MzUwYTY5OTI2MzNkOTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OZXRzY2Fw
ZS9tYWMvTmV0c2NhcGVQbHVnaW5Nb2R1bGVNYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSwyNzkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiTmV0c2Nh
cGVQbHVnaW5Nb2R1bGUuaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0j
aW1wb3J0ICJQbHVnaW5Qcm9jZXNzUHJveHkuaCIKLSNpbXBvcnQgIlBsdWdpblNhbmRib3hQcm9m
aWxlLmgiCi0jaW1wb3J0IDx3dGYvSGFzaFNldC5oPgotI2ltcG9ydCA8d3RmL01haW5UaHJlYWQu
aD4KLSNpbXBvcnQgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5oPgotI2ltcG9ydCA8d3RmL3NwaS9jZi9D
RkJ1bmRsZVNQSS5oPgotI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lv
bi5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIGJvb2wgZ2V0UGx1Z2luQXJjaGl0
ZWN0dXJlKENGQnVuZGxlUmVmIGJ1bmRsZSwgUGx1Z2luTW9kdWxlSW5mbyYgcGx1Z2luKQotewot
ICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBwbHVnaW5BcmNoaXRlY3R1cmVzQXJyYXkgPSBhZG9w
dENGKENGQnVuZGxlQ29weUV4ZWN1dGFibGVBcmNoaXRlY3R1cmVzKGJ1bmRsZSkpOwotICAgIGlm
ICghcGx1Z2luQXJjaGl0ZWN0dXJlc0FycmF5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAvLyBUdXJuIHRoZSBhcnJheSBpbnRvIGEgc2V0LgotICAgIEhhc2hTZXQ8dW5zaWduZWQ+IGFy
Y2hpdGVjdHVyZXM7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwLCBudW1QbHVnaW5BcmNoaXRlY3R1
cmVzID0gQ0ZBcnJheUdldENvdW50KHBsdWdpbkFyY2hpdGVjdHVyZXNBcnJheS5nZXQoKSk7IGkg
PCBudW1QbHVnaW5BcmNoaXRlY3R1cmVzOyArK2kpIHsKLSAgICAgICAgQ0ZOdW1iZXJSZWYgbnVt
YmVyID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgocGx1
Z2luQXJjaGl0ZWN0dXJlc0FycmF5LmdldCgpLCBpKSk7Ci0gICAgICAgIAotICAgICAgICBTSW50
MzIgYXJjaGl0ZWN0dXJlOwotICAgICAgICBpZiAoIUNGTnVtYmVyR2V0VmFsdWUobnVtYmVyLCBr
Q0ZOdW1iZXJTSW50MzJUeXBlLCAmYXJjaGl0ZWN0dXJlKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBhcmNoaXRlY3R1cmVzLmFkZChhcmNoaXRlY3R1cmUpOwotICAgIH0KLSAgICAK
LSNpZmRlZiBfX3g4Nl82NF9fCi0gICAgLy8gV2Ugb25seSBzdXBwb3J0IDY0LWJpdCBJbnRlbCBw
bHVnLWlucyBvbiA2NC1iaXQgSW50ZWwuCi0gICAgaWYgKGFyY2hpdGVjdHVyZXMuY29udGFpbnMo
a0NGQnVuZGxlRXhlY3V0YWJsZUFyY2hpdGVjdHVyZVg4Nl82NCkpIHsKLSAgICAgICAgcGx1Z2lu
LnBsdWdpbkFyY2hpdGVjdHVyZSA9IENQVV9UWVBFX1g4Nl82NDsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29s
IGdldFBsdWdpbkluZm9Gcm9tUHJvcGVydHlMaXN0cyhDRkJ1bmRsZVJlZiBidW5kbGUsIFBsdWdp
bk1vZHVsZUluZm8mIHBsdWdpbikKLXsKLSAgICBSZXRhaW5QdHIgbWltZVR5cGVzID0gZHluYW1p
Y19jZl9jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZCdW5kbGVHZXRWYWx1ZUZvckluZm9EaWN0aW9u
YXJ5S2V5KGJ1bmRsZSwgQ0ZTVFIoIldlYlBsdWdpbk1JTUVUeXBlcyIpKSk7Ci0gICAgaWYgKCFt
aW1lVHlwZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEdldCB0aGUgcGx1Zy1p
biBuYW1lLgotICAgIGF1dG8gcGx1Z2luTmFtZSA9IGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1Jl
Zj4oQ0ZCdW5kbGVHZXRWYWx1ZUZvckluZm9EaWN0aW9uYXJ5S2V5KGJ1bmRsZSwgQ0ZTVFIoIldl
YlBsdWdpbk5hbWUiKSkpOwotICAgIGlmIChwbHVnaW5OYW1lKQotICAgICAgICBwbHVnaW4uaW5m
by5uYW1lID0gcGx1Z2luTmFtZTsKLSAgICAKLSAgICAvLyBHZXQgdGhlIHBsdWctaW4gZGVzY3Jp
cHRpb24uCi0gICAgYXV0byBwbHVnaW5EZXNjcmlwdGlvbiA9IGR5bmFtaWNfY2ZfY2FzdDxDRlN0
cmluZ1JlZj4oQ0ZCdW5kbGVHZXRWYWx1ZUZvckluZm9EaWN0aW9uYXJ5S2V5KGJ1bmRsZSwgQ0ZT
VFIoIldlYlBsdWdpbkRlc2NyaXB0aW9uIikpKTsKLSAgICBpZiAocGx1Z2luRGVzY3JpcHRpb24p
Ci0gICAgICAgIHBsdWdpbi5pbmZvLmRlc2MgPSBwbHVnaW5EZXNjcmlwdGlvbjsKLSAgICAKLSAg
ICAvLyBHZXQgdGhlIE1JTUUgdHlwZSBtYXBwaW5nIGRpY3Rpb25hcnkuCi0gICAgQ0ZJbmRleCBu
dW1NaW1lVHlwZXMgPSBDRkRpY3Rpb25hcnlHZXRDb3VudChtaW1lVHlwZXMuZ2V0KCkpOyAgICAg
ICAgICAKLSAgICBWZWN0b3I8Q0ZUeXBlUmVmPiBtaW1lVHlwZXNWZWN0b3IobnVtTWltZVR5cGVz
KTsKLSAgICBWZWN0b3I8Q0ZUeXBlUmVmPiBtaW1lVHlwZUluZm9WZWN0b3IobnVtTWltZVR5cGVz
KTsKLSAgICBDRkRpY3Rpb25hcnlHZXRLZXlzQW5kVmFsdWVzKG1pbWVUeXBlcy5nZXQoKSwgbWlt
ZVR5cGVzVmVjdG9yLmRhdGEoKSwgbWltZVR5cGVJbmZvVmVjdG9yLmRhdGEoKSk7Ci0gICAgCi0g
ICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgbnVtTWltZVR5cGVzOyArK2kpIHsKLSAgICAgICAg
V2ViQ29yZTo6TWltZUNsYXNzSW5mbyBtaW1lQ2xhc3NJbmZvOwotICAgICAgICAKLSAgICAgICAg
Ly8gSWYgdGhpcyBNSU1FIHR5cGUgaXMgaW52YWxpZCwgaWdub3JlIGl0LgotICAgICAgICBhdXRv
IG1pbWVUeXBlID0gZHluYW1pY19jZl9jYXN0PENGU3RyaW5nUmVmPihtaW1lVHlwZXNWZWN0b3Jb
aV0pOwotICAgICAgICBpZiAoIW1pbWVUeXBlIHx8ICFDRlN0cmluZ0dldExlbmd0aChtaW1lVHlw
ZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBJZiB0aGlzIE1JTUUgdHlw
ZSBkb2Vzbid0IGhhdmUgYSB2YWxpZCBpbmZvIGRpY3Rpb25hcnksIGlnbm9yZSBpdC4KLSAgICAg
ICAgYXV0byBtaW1lVHlwZUluZm8gPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPiht
aW1lVHlwZUluZm9WZWN0b3JbaV0pOwotICAgICAgICBpZiAoIW1pbWVUeXBlSW5mbykKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBzdG9yaW5nIGRp
c2FibGVkIE1JTUUgdHlwZXMuCi0gICAgICAgIGF1dG8gaXNFbmFibGVkID0gQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUobWltZVR5cGVJbmZvLCBDRlNUUigiV2ViUGx1Z2luVHlwZUVuYWJsZWQiKSk7Ci0g
ICAgICAgIGlmIChpc0VuYWJsZWQpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIG51bWJlciA9IGR5
bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJlZj4oaXNFbmFibGVkKSkgewotICAgICAgICAgICAgICAg
IGludCB2YWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAoIUNGTnVtYmVyR2V0VmFsdWUobnVtYmVy
LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmdmFsdWUpIHx8ICF2YWx1ZSkKLSAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzRW5hYmxlZCAhPSBrQ0ZCb29s
ZWFuVHJ1ZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IG1pbWVDbGFzc0luZm8udHlwZSA9IFN0cmluZyhtaW1lVHlwZSkuY29udmVydFRvQVNDSUlMb3dl
cmNhc2UoKTsKLSAgICAgICAgbWltZUNsYXNzSW5mby5kZXNjID0gZHluYW1pY19jZl9jYXN0PENG
U3RyaW5nUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShtaW1lVHlwZUluZm8sIENGU1RSKCJXZWJQ
bHVnaW5UeXBlRGVzY3JpcHRpb24iKSkpOwotCi0gICAgICAgIC8vIE5vdyBnZXQgdGhlIGV4dGVu
c2lvbnMgZm9yIHRoaXMgTUlNRSB0eXBlLgotICAgICAgICBDRkluZGV4IG51bUV4dGVuc2lvbnMg
PSAwOwotICAgICAgICBhdXRvIGV4dGVuc2lvbnNBcnJheSA9IGR5bmFtaWNfY2ZfY2FzdDxDRkFy
cmF5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShtaW1lVHlwZUluZm8sIENGU1RSKCJXZWJQbHVn
aW5FeHRlbnNpb25zIikpKTsKLSAgICAgICAgaWYgKGV4dGVuc2lvbnNBcnJheSkKLSAgICAgICAg
ICAgIG51bUV4dGVuc2lvbnMgPSBDRkFycmF5R2V0Q291bnQoZXh0ZW5zaW9uc0FycmF5KTsKLQot
ICAgICAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBudW1FeHRlbnNpb25zOyArK2kpIHsKLSAg
ICAgICAgICAgIGF1dG8gZXh0ZW5zaW9uID0gZHluYW1pY19jZl9jYXN0PENGU3RyaW5nUmVmPihD
RkFycmF5R2V0VmFsdWVBdEluZGV4KGV4dGVuc2lvbnNBcnJheSwgaSkpOwotICAgICAgICAgICAg
aWYgKCFleHRlbnNpb24pCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAg
IC8vIFRoZSBEaXZYIHBsdWctaW4gbGlzdHMgbXVsdGlwbGUgZXh0ZW5zaW9ucyBpbiBhIGNvbW1h
IHNlcGFyYXRlZCBzdHJpbmcgaW5zdGVhZCBvZiB1c2luZwotICAgICAgICAgICAgLy8gbXVsdGlw
bGUgYXJyYXkgZWxlbWVudHMgaW4gdGhlIHByb3BlcnR5IGxpc3QuIFdvcmsgYXJvdW5kIHRoaXMg
aGVyZSBieSBzcGxpdHRpbmcgdGhlCi0gICAgICAgICAgICAvLyBleHRlbnNpb24gc3RyaW5nIGlu
dG8gY29tcG9uZW50cy4KLSAgICAgICAgICAgIGZvciAoYXV0byYgY29tcG9uZW50IDogU3RyaW5n
KGV4dGVuc2lvbikuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKS5zcGxpdCgnLCcpKQotICAgICAg
ICAgICAgICAgIG1pbWVDbGFzc0luZm8uZXh0ZW5zaW9ucy5hcHBlbmQoY29tcG9uZW50KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIEFkZCB0aGlzIE1JTUUgdHlwZS4KLSAgICAgICAgcGx1Z2lu
LmluZm8ubWltZXMuYXBwZW5kKG1pbWVDbGFzc0luZm8pOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOyAgICAKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbk1vZHVsZTo6Z2V0UGx1Z2luSW5mbyhj
b25zdCBTdHJpbmcmIHBsdWdpblBhdGgsIFBsdWdpbk1vZHVsZUluZm8mIHBsdWdpbikKLXsKLSAg
ICBhdXRvIGJ1bmRsZVVSTCA9IGFkb3B0Q0YoQ0ZVUkxDcmVhdGVXaXRoRmlsZVN5c3RlbVBhdGgo
a0NGQWxsb2NhdG9yRGVmYXVsdCwgcGx1Z2luUGF0aC5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBr
Q0ZVUkxQT1NJWFBhdGhTdHlsZSwgZmFsc2UpKTsKLSAgICAKLSAgICAvLyBUcnkgdG8gaW5pdGlh
bGl6ZSB0aGUgYnVuZGxlLgotICAgIGF1dG8gYnVuZGxlID0gYWRvcHRDRihfQ0ZCdW5kbGVDcmVh
dGVVbmlxdWUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYnVuZGxlVVJMLmdldCgpKSk7Ci0gICAgaWYg
KCFidW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBDaGVjayBpZiB0
aGlzIGJ1bmRsZSBpcyBhbiBOUEFQSSBwbHVnLWluLgotICAgIFVJbnQzMiBwYWNrYWdlVHlwZSA9
IDA7Ci0gICAgQ0ZCdW5kbGVHZXRQYWNrYWdlSW5mbyhidW5kbGUuZ2V0KCksICZwYWNrYWdlVHlw
ZSwgMCk7Ci0gICAgaWYgKHBhY2thZ2VUeXBlICE9IEZPVVJfQ0hBUl9DT0RFKCdCUlBMJykpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBDaGVjayB0aGF0IHRoZSBhcmNoaXRl
Y3R1cmUgaXMgdmFsaWQuCi0gICAgaWYgKCFnZXRQbHVnaW5BcmNoaXRlY3R1cmUoYnVuZGxlLmdl
dCgpLCBwbHVnaW4pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBwbHVnaW4ucGF0aCA9
IHBsdWdpblBhdGg7Ci0gICAgcGx1Z2luLmJ1bmRsZUlkZW50aWZpZXIgPSBDRkJ1bmRsZUdldElk
ZW50aWZpZXIoYnVuZGxlLmdldCgpKTsKLSAgICBwbHVnaW4udmVyc2lvblN0cmluZyA9IGR5bmFt
aWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZCdW5kbGVHZXRWYWx1ZUZvckluZm9EaWN0aW9uYXJ5
S2V5KGJ1bmRsZS5nZXQoKSwga0NGQnVuZGxlVmVyc2lvbktleSkpOwotICAgIHBsdWdpbi5zaG9y
dFZlcnNpb25TdHJpbmcgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGQnVuZGxlR2V0
VmFsdWVGb3JJbmZvRGljdGlvbmFyeUtleShidW5kbGUuZ2V0KCksIENGU1RSKCJDRkJ1bmRsZVNo
b3J0VmVyc2lvblN0cmluZyIpKSk7Ci0KLSAgICBpZiAoIWdldFBsdWdpbkluZm9Gcm9tUHJvcGVy
dHlMaXN0cyhidW5kbGUuZ2V0KCksIHBsdWdpbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHBsdWdpbi5oYXNTYW5kYm94UHJvZmlsZSA9IHBsdWdpbkhhc1NhbmRib3hQcm9maWxlKHBs
dWdpbi5idW5kbGVJZGVudGlmaWVyKTsKLQotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZmls
ZW5hbWUgPSBhZG9wdENGKENGVVJMQ29weUxhc3RQYXRoQ29tcG9uZW50KGJ1bmRsZVVSTC5nZXQo
KSkpOwotICAgIHBsdWdpbi5pbmZvLmZpbGUgPSBmaWxlbmFtZS5nZXQoKTsKLSAgICAKLSAgICBp
ZiAocGx1Z2luLmluZm8ubmFtZS5pc051bGwoKSkKLSAgICAgICAgcGx1Z2luLmluZm8ubmFtZSA9
IHBsdWdpbi5pbmZvLmZpbGU7Ci0gICAgaWYgKHBsdWdpbi5pbmZvLmRlc2MuaXNOdWxsKCkpCi0g
ICAgICAgIHBsdWdpbi5pbmZvLmRlc2MgPSBwbHVnaW4uaW5mby5maWxlOwotCi0gICAgcGx1Z2lu
LmluZm8uaXNBcHBsaWNhdGlvblBsdWdpbiA9IGZhbHNlOwotICAgIHBsdWdpbi5pbmZvLmNsaWVu
dExvYWRQb2xpY3kgPSBXZWJDb3JlOjpQbHVnaW5Mb2FkQ2xpZW50UG9saWN5OjpVbmRlZmluZWQ7
Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHBsdWdpbi5pbmZvLmJ1bmRsZUlkZW50aWZpZXIgPSBw
bHVnaW4uYnVuZGxlSWRlbnRpZmllcjsKLSAgICBwbHVnaW4uaW5mby52ZXJzaW9uU3RyaW5nID0g
cGx1Z2luLnZlcnNpb25TdHJpbmc7Ci0jZW5kaWYKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0v
LyBGSVhNRTogVGhpcyBkb2Vzbid0IG5lZWQgdG8gYmUgcGxhdGZvcm0tc3BlY2lmaWMuCi1jbGFz
cyBQbHVnaW5WZXJzaW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGx1Z2luVmVyc2lvbiBwYXJz
ZShjb25zdCBTdHJpbmcmIHZlcnNpb25TdHJpbmcpOwotCi0gICAgYm9vbCBpc0xlc3NUaGFuKHVu
c2lnbmVkIGNvbXBvbmVudEEpIGNvbnN0OwotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0
dXJuICFtX3ZlcnNpb25Db21wb25lbnRzLmlzRW1wdHkoKTsgfQotCi1wcml2YXRlOgotICAgIFBs
dWdpblZlcnNpb24oKQotICAgIHsKLSAgICB9Ci0KLSAgICBWZWN0b3I8dW5zaWduZWQsIDQ+IG1f
dmVyc2lvbkNvbXBvbmVudHM7Ci19OwotCi1QbHVnaW5WZXJzaW9uIFBsdWdpblZlcnNpb246OnBh
cnNlKGNvbnN0IFN0cmluZyYgdmVyc2lvblN0cmluZykKLXsKLSAgICBQbHVnaW5WZXJzaW9uIHZl
cnNpb247Ci0gICAgZm9yIChhdXRvIGNvbXBvbmVudCA6IFN0cmluZ1ZpZXcgeyB2ZXJzaW9uU3Ry
aW5nIH0uc3BsaXQoJy4nKSkgewotICAgICAgICBhdXRvIHZlcnNpb25Db21wb25lbnQgPSBwYXJz
ZUludGVnZXJBbGxvd2luZ1RyYWlsaW5nSnVuazx1bnNpZ25lZD4oY29tcG9uZW50KTsKLSAgICAg
ICAgaWYgKCF2ZXJzaW9uQ29tcG9uZW50KQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAg
ICAgdmVyc2lvbi5tX3ZlcnNpb25Db21wb25lbnRzLmFwcGVuZCgqdmVyc2lvbkNvbXBvbmVudCk7
Ci0gICAgfQotICAgIHJldHVybiB2ZXJzaW9uOwotfQotCi1ib29sIFBsdWdpblZlcnNpb246Omlz
TGVzc1RoYW4odW5zaWduZWQgY29tcG9uZW50QSkgY29uc3QKLXsKLSAgICBBU1NFUlQoaXNWYWxp
ZCgpKTsKLQotICAgIHJldHVybiBtX3ZlcnNpb25Db21wb25lbnRzWzBdIDwgY29tcG9uZW50QTsK
LX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbk1vZHVsZTo6ZGV0ZXJtaW5lUXVpcmtzKCkKLXsKLSAg
ICBQbHVnaW5Nb2R1bGVJbmZvIHBsdWdpbjsKLSAgICBpZiAoIWdldFBsdWdpbkluZm8obV9wbHVn
aW5QYXRoLCBwbHVnaW4pKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocGx1Z2luLmJ1bmRs
ZUlkZW50aWZpZXIgPT0gImNvbS5tYWNyb21lZGlhLkZsYXNoIFBsYXllci5wbHVnaW4iKSB7Ci0g
ICAgICAgIC8vIEZsYXNoIHJlcXVpcmVzIHRoYXQgdGhlIHJldHVybiB2YWx1ZSBvZiBnZXRwcm9n
bmFtZSgpIGJlICJXZWJLaXRQbHVnaW5Ib3N0Ii4KLSAgICAgICAgbV9wbHVnaW5RdWlya3MuYWRk
KFBsdWdpblF1aXJrczo6UHJvZ25hbWVTaG91bGRCZVdlYktpdFBsdWdpbkhvc3QpOwotCi0gICAg
ICAgIC8vIEZsYXNoIHN1cHBvcnRzIHNuYXBzaG90dGluZy4KLSAgICAgICAgbV9wbHVnaW5RdWly
a3MuYWRkKFBsdWdpblF1aXJrczo6U3VwcG9ydHNTbmFwc2hvdHRpbmcpOwotCi0gICAgICAgIC8v
IEZsYXNoIHJldHVybnMgYSByZXRhaW5lZCBDb3JlIEFuaW1hdGlvbiBsYXllci4KLSAgICAgICAg
bV9wbHVnaW5RdWlya3MuYWRkKFBsdWdpblF1aXJrczo6UmV0dXJuc1JldGFpbmVkQ29yZUFuaW1h
dGlvbkxheWVyKTsKLQotICAgICAgICAvLyBGbGFzaCBoYXMgYSBidWcgd2hlcmUgTlNFeGNlcHRp
b25zIGNhbiBiZSByZWxlYXNlZCB0b28gZWFybHkuCi0gICAgICAgIG1fcGx1Z2luUXVpcmtzLmFk
ZChQbHVnaW5RdWlya3M6OkxlYWtBbGxUaHJvd25OU0V4Y2VwdGlvbnMpOwotICAgIH0KLQotICAg
IGlmIChwbHVnaW4uYnVuZGxlSWRlbnRpZmllciA9PSAiY29tLm1pY3Jvc29mdC5TaWx2ZXJsaWdo
dFBsdWdpbiIpIHsKLSAgICAgICAgLy8gU2lsdmVybGlnaHQgZG9lc24ndCBleHBsaWNpdGx5IG9w
dCBpbnRvIHRyYW5zcGFyZW5jeSwgc28gd2UnbGwgZG8gaXQgd2hlbmV2ZXIKLSAgICAgICAgLy8g
dGhlcmUncyBhICdiYWNrZ3JvdW5kJyBhdHRyaWJ1dGUgdGhhdCdzIHNldCB0byBhIHRyYW5zcGFy
ZW50IGNvbG9yLgotICAgICAgICBtX3BsdWdpblF1aXJrcy5hZGQoUGx1Z2luUXVpcmtzOjpNYWtl
T3BhcXVlVW5sZXNzVHJhbnNwYXJlbnRTaWx2ZXJsaWdodEJhY2tncm91bmRBdHRyaWJ1dGVFeGlz
dHMpOwotCi0gICAgICAgIC8vIFNpbHZlcmxpZ2h0IGhhcyBhIHdvcmthcm91bmQgZm9yIGEgbGVh
ayBpbiBTYWZhcmkgMi4gVGhpcyB3b3JrYXJvdW5kIGlzCi0gICAgICAgIC8vIGFwcGxpZWQgd2hl
biB0aGUgdXNlciBhZ2VudCBkb2VzIG5vdCBjb250YWluICJWZXJzaW9uLzMiIHNvIHdlIGFwcGVu
ZCBpdAotICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSB1c2VyIGFnZW50LgotICAgICAgICBt
X3BsdWdpblF1aXJrcy5hZGQoUGx1Z2luUXVpcmtzOjpBcHBlbmRWZXJzaW9uM1VzZXJBZ2VudCk7
Ci0KLSAgICAgICAgUGx1Z2luVmVyc2lvbiBwbHVnaW5WZXJzaW9uID0gUGx1Z2luVmVyc2lvbjo6
cGFyc2UocGx1Z2luLnZlcnNpb25TdHJpbmcpOwotICAgICAgICBpZiAocGx1Z2luVmVyc2lvbi5p
c1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIGlmIChwbHVnaW5WZXJzaW9uLmlzTGVzc1RoYW4oNCkp
IHsKLSAgICAgICAgICAgICAgICAvLyBWZXJzaW9ucyBvZiBTaWx2ZXJsaWdodCBwcmlvciB0byA0
IGRvbid0IHJldGFpbiB0aGUgc2NyaXB0YWJsZSBOUE9iamVjdC4KLSAgICAgICAgICAgICAgICBt
X3BsdWdpblF1aXJrcy5hZGQoUGx1Z2luUXVpcmtzOjpSZXR1cm5zTm9uUmV0YWluZWRTY3JpcHRh
YmxlTlBPYmplY3QpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KHBsdWdpbi5idW5kbGVJZGVudGlmaWVyID09ICJjb20uYXBwbGUuaXN0LmRzLmFwcGxlY29ubmVj
dC53ZWJwbHVnaW4iKSB7Ci0gICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS84NDQwOTAzPjogQXBw
bGVDb25uZWN0IGhhcyBhIGJ1ZyB3aGVyZSBpdCBkb2VzIG5vdAotICAgICAgICAvLyB1bmRlcnN0
YW5kIHRoZSBwYXJhbWV0ZXIgbmFtZXMgc3BlY2lmaWVkIGluIHRoZSA8b2JqZWN0PiBlbGVtZW50
IHRoYXQKLSAgICAgICAgLy8gZW1iZWRzIGl0cyBwbHVnLWluLiAKLSAgICAgICAgbV9wbHVnaW5R
dWlya3MuYWRkKFBsdWdpblF1aXJrczo6V2FudHNMb3dlcmNhc2VQYXJhbWV0ZXJOYW1lcyk7Ci0g
ICAgfQotCi0gICAgaWYgKHBsdWdpbi5idW5kbGVJZGVudGlmaWVyID09ICJjb20uYWRvYmUuYWNy
b2JhdC5wZGZ2aWV3ZXJOUEFQSSIgfHwgcGx1Z2luLmJ1bmRsZUlkZW50aWZpZXIgPT0gImNvbS5h
cHBsZS50ZXN0bmV0c2NhcGVwbHVnaW4iKSB7Ci0gICAgICAgIC8vIFRoZSBBZG9iZSBSZWFkZXIg
cGx1Zy1pbiB3YW50cyB3aGVlbCBldmVudHMuCi0gICAgICAgIG1fcGx1Z2luUXVpcmtzLmFkZChQ
bHVnaW5RdWlya3M6OldhbnRzV2hlZWxFdmVudHMpOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvbWFjL1BsdWdpbklu
Zm9ybWF0aW9uTWFjLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9t
YWMvUGx1Z2luSW5mb3JtYXRpb25NYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDY3OWE0MzhhOTA5ODhjN2U4YjdhZmMxNzBlODA4MjcxZmU2NGI2OGYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1
Z2lucy9OZXRzY2FwZS9tYWMvUGx1Z2luSW5mb3JtYXRpb25NYWMubW0KKysrIC9kZXYvbnVsbApA
QCAtMSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0
ICJQbHVnaW5JbmZvcm1hdGlvbi5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0KLSNpbXBvcnQgIkFQSU51bWJlci5oIgotI2ltcG9ydCAiQVBJU3RyaW5nLmgiCi0jaW1wb3J0
ICJQbHVnaW5Nb2R1bGVJbmZvLmgiCi0jaW1wb3J0ICJTdHJpbmdVdGlsaXRpZXMuaCIKLSNpbXBv
cnQgPFdlYkNvcmUvUGx1Z2luQmxvY2tsaXN0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXZvaWQgZ2V0UGxhdGZvcm1QbHVnaW5Nb2R1bGVJbmZv
cm1hdGlvbihjb25zdCBQbHVnaW5Nb2R1bGVJbmZvJiBwbHVnaW4sIEFQSTo6RGljdGlvbmFyeTo6
TWFwVHlwZSYgbWFwKQotewotICAgIG1hcC5zZXQocGx1Z2luSW5mb3JtYXRpb25CdW5kbGVJZGVu
dGlmaWVyS2V5KCksIEFQSTo6U3RyaW5nOjpjcmVhdGUocGx1Z2luLmJ1bmRsZUlkZW50aWZpZXIp
KTsKLSAgICBtYXAuc2V0KHBsdWdpbkluZm9ybWF0aW9uQnVuZGxlVmVyc2lvbktleSgpLCBBUEk6
OlN0cmluZzo6Y3JlYXRlKHBsdWdpbi52ZXJzaW9uU3RyaW5nKSk7Ci0gICAgbWFwLnNldChwbHVn
aW5JbmZvcm1hdGlvbkJ1bmRsZVNob3J0VmVyc2lvbktleSgpLCBBUEk6OlN0cmluZzo6Y3JlYXRl
KHBsdWdpbi5zaG9ydFZlcnNpb25TdHJpbmcpKTsKLSAgICBtYXAuc2V0KHBsdWdpbkluZm9ybWF0
aW9uVXBkYXRlUGFzdExhc3RCbG9ja2VkVmVyc2lvbklzS25vd25BdmFpbGFibGVLZXkoKSwgQVBJ
OjpCb29sZWFuOjpjcmVhdGUoV2ViQ29yZTo6UGx1Z2luQmxvY2tsaXN0Ojppc1BsdWdpblVwZGF0
ZUF2YWlsYWJsZShuc1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5nKHBsdWdpbi5idW5kbGVJZGVudGlm
aWVyKSkpKTsKLSAgICBtYXAuc2V0KHBsdWdpbkluZm9ybWF0aW9uSGFzU2FuZGJveFByb2ZpbGVL
ZXkoKSwgQVBJOjpCb29sZWFuOjpjcmVhdGUocGx1Z2luLmhhc1NhbmRib3hQcm9maWxlKSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL1BsdWdp
bk1vZHVsZUluZm8uaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvUGx1Z2luTW9kdWxl
SW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjE2M2M5YzViN2QyYmY0NDJj
ZDliYWRmZTM2Y2I2OGZlZjA5ZmY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvUGx1Z2luTW9kdWxlSW5m
by5oCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5EYXRhLmg+Ci0KLSNpZiBQTEFURk9STShD
T0NPQSkKLSNpbmNsdWRlIDxtYWNoL21hY2hpbmUuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotZW51bSBQbHVnaW5Nb2R1bGVMb2FkUG9saWN5IHsKLSAgICAvLyBUaGUgcGx1Zy1p
biBtb2R1bGUgc2hvdWxkIGJlIGxvYWRlZCBub3JtYWxseS4KLSAgICBQbHVnaW5Nb2R1bGVMb2Fk
Tm9ybWFsbHksCi0KLSAgICAvLyBUaGUgcGx1Zy1pbiBtb2R1bGUgc2hvdWxkIGJlIGxvYWRlZCBu
b3JtYWxseS4gSWYgdGhlIHBsdWctaW4gaGFzIGEgc2FuZGJveCwgaXQgd2lsbCBiZSBkaXNhYmxl
ZC4KLSAgICBQbHVnaW5Nb2R1bGVMb2FkVW5zYW5kYm94ZWQsCi0KLSAgICAvLyBUaGUgcGx1Zy1p
biBzaG91bGQgYmUgYmxvY2tlZCBmcm9tIGJlaW5nIGluc3RhbnRpYXRlZC4KLSAgICAvLyBOb3Rl
IHRoYXQgdGhlIHBsdWctaW4gd2lsbCBzdGlsbCBiZSBzZWVuIGJ5IGUuZy4gbmF2aWdhdG9yLnBs
dWdpbnMKLSAgICBQbHVnaW5Nb2R1bGVCbG9ja2VkRm9yU2VjdXJpdHksCi0gICAgUGx1Z2luTW9k
dWxlQmxvY2tlZEZvckNvbXBhdGliaWxpdHksCi19OwotCi1zdHJ1Y3QgUGx1Z2luTW9kdWxlSW5m
byB7Ci0gICAgU3RyaW5nIHBhdGg7Ci0gICAgV2ViQ29yZTo6UGx1Z2luSW5mbyBpbmZvOwotCi0j
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgY3B1X3R5cGVfdCBwbHVnaW5BcmNoaXRlY3R1cmU7Ci0g
ICAgU3RyaW5nIGJ1bmRsZUlkZW50aWZpZXI7Ci0gICAgU3RyaW5nIHZlcnNpb25TdHJpbmc7Ci0g
ICAgU3RyaW5nIHNob3J0VmVyc2lvblN0cmluZzsKLSAgICBib29sIGhhc1NhbmRib3hQcm9maWxl
OwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMuaCBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE4N2FhZmMzNzM0NGE2Mjg3N2JhMTFhZGY5ZDhkYTM1
ZjIwNzlkMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL1BsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIlBsdWdpbk1vZHVsZUluZm8uaCIKLSNpbmNsdWRlIDx3dGYvRW51bVRy
YWl0cy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotZW51bSBjbGFzcyBQbHVnaW5Qcm9jZXNz
U2FuZGJveFBvbGljeSA6IGJvb2wgewotICAgIE5vcm1hbCwKLSAgICBVbnNhbmRib3hlZCwKLX07
Ci0KLXN0cnVjdCBQbHVnaW5Qcm9jZXNzQXR0cmlidXRlcyB7Ci0gICAgUGx1Z2luTW9kdWxlSW5m
byBtb2R1bGVJbmZvOwotICAgIFBsdWdpblByb2Nlc3NTYW5kYm94UG9saWN5IHNhbmRib3hQb2xp
Y3k7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL1BsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODllMjI2ZmZjMmFjNDdlOGEy
OTE1NjVmZWEzMDIzMDJkOGQxOTVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotI2lm
IFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzQ0YuaCIKLSNlbmRpZgot
I2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6UGx1Z2luUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycygpCi0gICAgOiBzdXBwb3J0c0FzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0
aW9uKGZhbHNlKQotewotfQotCi12b2lkIFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6
OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBz
dXBwb3J0c0FzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uOwotICAgIGVuY29kZXIgPDwg
bWluaW11bUxpZmV0aW1lOwotICAgIGVuY29kZXIgPDwgdGVybWluYXRpb25UaW1lb3V0OwotI2lm
IFBMQVRGT1JNKENPQ09BKQotICAgIGVuY29kZXIgPDwgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Bv
cnQ7Ci0gICAgZW5jb2RlciA8PCBuZXR3b3JrQVRTQ29udGV4dDsKLSNlbmRpZgotfQotCi1ib29s
IFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRl
Y29kZXIsIFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHJlc3VsdCkKLXsKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zdXBwb3J0c0FzeW5jaHJvbm91c1BsdWdpbkluaXRp
YWxpemF0aW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0Lm1pbmltdW1MaWZldGltZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC50ZXJtaW5hdGlvblRpbWVvdXQpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ1BvcnQpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubmV0d29ya0FUU0NvbnRleHQpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL1BsdWdpblBy
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMv
UGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiZjg0MmYwYTU0Yjk5YzU0NTg1ZmRiMmU3NmZjZWQ2OWE5ZjAyNjI5Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCisrKyAvZGV2L251
bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NB
dHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KLQotI2lmIFBMQVRGT1JNKENP
Q09BKQotI2luY2x1ZGUgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNl
IElQQyB7Ci1jbGFzcyBEZWNvZGVyOwotY2xhc3MgRW5jb2RlcjsKLX0KLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLXN0cnVjdCBQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKLSAgICBQ
bHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzKCk7Ci0KLSAgICB2b2lkIGVuY29kZShJUEM6
OkVuY29kZXImKSBjb25zdDsKLSAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVj
b2RlKElQQzo6RGVjb2RlciYsIFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLQot
ICAgIGJvb2wgc3VwcG9ydHNBc3luY2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbjsKLQotICAg
IFNlY29uZHMgbWluaW11bUxpZmV0aW1lOwotICAgIFNlY29uZHMgdGVybWluYXRpb25UaW1lb3V0
OwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgV1RGOjpNYWNoU2VuZFJpZ2h0IGFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdQb3J0OwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG5ldHdvcmtBVFND
b250ZXh0OwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8v
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
aGFyZWQvUGx1Z2lucy9QbHVnaW5RdWlya3MuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdp
bnMvUGx1Z2luUXVpcmtzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhZTZmOTFi
MGQ4MGY4YjMyODNkZTI5MWM5YjdlM2FmZWUxYWNhOTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9QbHVn
aW5RdWlya3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFBsdWdpblF1
aXJrcyB7Ci1wdWJsaWM6Ci0gICAgZW51bSBQbHVnaW5RdWlyayB7Ci0gICAgICAgIC8vIE1hYyBz
cGVjaWZpYyBxdWlya3M6Ci0jaWYgUExVR0lOX0FSQ0hJVEVDVFVSRShNQUMpCi0gICAgICAgIC8v
IFRoZSBwbHVnLWluIHdhbnRzIHRoZSBjYWxsIHRvIGdldHByb2duYW1lKCkgdG8gcmV0dXJuICJX
ZWJLaXRQbHVnaW5Ib3N0Ii4KLSAgICAgICAgLy8gQWRvYmUgRmxhc2ggV2lsbCBub3QgaGFuZGxl
IGtleSBkb3duIGV2ZW50cyBvdGhlcndpc2UuCi0gICAgICAgIFByb2duYW1lU2hvdWxkQmVXZWJL
aXRQbHVnaW5Ib3N0LAotCi0gICAgICAgIC8vIFN1cHBvcnRzIHJlY2VpdmluZyBhIHBhaW50IGV2
ZW50LCBldmVuIHdoZW4gdXNpbmcgQ29yZUFuaW1hdGlvbiByZW5kZXJpbmcuCi0gICAgICAgIFN1
cHBvcnRzU25hcHNob3R0aW5nLAotCi0gICAgICAgIC8vIE1ha2UgdGhlIHBsdWctaW4gb3BhcXVl
IHVubGVzcyBpdCBoYXMgYSAiYmFja2dyb3VuZCIgYXR0cmlidXRlIHNldCB0byBhIHRyYW5zcGFy
ZW50IGNvbG9yCi0gICAgICAgIC8vIGFjY29yZGluZyB0byBodHRwOi8vbXNkbi5taWNyb3NvZnQu
Y29tL2VuLXVzL2xpYnJhcnkvY2M4MzgxNDgoVlMuOTUpLmFzcHgKLSAgICAgICAgLy8gQSBub24t
ZXhpc3RlbnQgImJhY2tncm91bmQiIGF0dHJpYnV0ZSBpcyBpbnRlcnByZXRlZCBhcyB0aGUgbmFt
ZWQgY29sb3IgV2hpdGUgd2hpY2ggaXMgb3BhcXVlLgotICAgICAgICAvLyBNaWNyb3NvZnQgU2ls
dmVybGlnaHQgZG9lc24ndCBvcHQgaW50byB0cmFuc3BhcmVuY3kgdXNpbmcgTlBOX1NldFZhbHVl
IGFuZAotICAgICAgICAvLyBOUFBWcGx1Z2luVHJhbnNwYXJlbnRCb29sLCBzbyB3ZSdsbCBhbHdh
eXMgZm9yY2UgaXQgdW5sZXNzIHRoZSBwbHVnLWluIGhhcyBhICJiYWNrZ3JvdW5kIgotICAgICAg
ICAvLyBhdHRyaWJ1dGUgdGhhdCBzcGVjaWZpZXMgYSBvcGFxdWUgY29sb3IuCi0gICAgICAgIE1h
a2VPcGFxdWVVbmxlc3NUcmFuc3BhcmVudFNpbHZlcmxpZ2h0QmFja2dyb3VuZEF0dHJpYnV0ZUV4
aXN0cywKLQotICAgICAgICAvLyBXaGV0aGVyIGNhbGxpbmcgTlBQX0dldFZhbHVlIHdpdGggTlBQ
VnBsdWdpbkNvcmVBbmltYXRpb25MYXllciByZXR1cm5zIGEgcmV0YWluZWQgQ29yZSBBbmltYXRp
b24KLSAgICAgICAgLy8gbGF5ZXIgb3Igbm90LiBBY2NvcmRpbmcgdG8gdGhlIE5QQVBJIHNwZWNp
ZmljYXRpb25zLCBwbHVnLWluIHNob3VsZG4ndCByZXR1cm4gYSByZXRhaW5lZCBsYXllciBidXQK
LSAgICAgICAgLy8gV2ViS2l0MSBleHBlY3RzIGEgcmV0YWluZWQgcGx1Zy1pbiBsYXllci4gV2Ug
dXNlIHRoaXMgZm9yIEZsYXNoIHRvIGF2b2lkIGxlYWtpbmcgT3BlbkdMIGxheWVycy4KLSAgICAg
ICAgUmV0dXJuc1JldGFpbmVkQ29yZUFuaW1hdGlvbkxheWVyLAotCi0gICAgICAgIC8vIFdoZXRo
ZXIgTlBQX0dldFZhbHVlIHdpdGggTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCByZXR1cm5z
IGEgbm9uLXJldGFpbmVkIE5QT2JqZWN0IG9yIG5vdC4KLSAgICAgICAgLy8gVmVyc2lvbnMgb2Yg
U2lsdmVybGlnaHQgcHJpb3IgdG8gNCBuZXZlciByZXRhaW5lZCB0aGUgcmV0dXJuZWQgTlBPYmpl
Y3QuCi0gICAgICAgIFJldHVybnNOb25SZXRhaW5lZFNjcmlwdGFibGVOUE9iamVjdCwKLQotICAg
ICAgICAvLyBXaGV0aGVyIHRoZSBwbHVnLWluIHdhbnRzIHBhcmFtZXRlciBuYW1lcyB0byBiZSBs
b3dlcmNhc2UuCi0gICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS84NDQwOTAzPjogQXBwbGVDb25u
ZWN0IGhhcyBhIGJ1ZyB3aGVyZSBpdCBkb2VzIG5vdAotICAgICAgICAvLyB1bmRlcnN0YW5kIHRo
ZSBwYXJhbWV0ZXIgbmFtZXMgc3BlY2lmaWVkIGluIHRoZSA8b2JqZWN0PiBlbGVtZW50IHRoYXQK
LSAgICAgICAgLy8gZW1iZWRzIGl0cyBwbHVnLWluLiAKLSAgICAgICAgV2FudHNMb3dlcmNhc2VQ
YXJhbWV0ZXJOYW1lcywKLQotICAgICAgICAvLyBXaGV0aGVyIHRvIGFwcGVuZCBWZXJzaW9uLzMu
Mi4xIHRvIHRoZSB1c2VyLWFnZW50IHBhc3NlZCB0byB0aGUgcGx1Z2luCi0gICAgICAgIC8vIFRo
aXMgaXMgbmVjZXNzYXJ5IHRvIGRpc2FibGUgU2lsdmVybGlnaHQncyB3b3JrYXJvdW5kIGZvciBh
IFNhZmFyaSAyIGxlYWsKLSAgICAgICAgLy8gd2hpY2ggaXMgZW5hYmxlZCBpZiBpdCBkb2Vzbid0
IGZpbmQgVmVyc2lvbi8zIGluIHRoZSB1c2VyLWFnZW50LgotICAgICAgICBBcHBlbmRWZXJzaW9u
M1VzZXJBZ2VudCwKLQotICAgICAgICAvLyBXaGV0aGVyIGFsbCB0aHJvd24gTlNFeGNlcHRpb25z
IHNob3VsZCBiZSBsZWFrZWQuCi0gICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8xMzAwMzQ3MD4g
QWRvYmUgRmxhc2ggaGFzIGEgYnVnIHdoZXJlIGV4Y2VwdGlvbnMgYXJlIHJlbGVhc2VkIHRvbyBl
YXJseS4KLSAgICAgICAgTGVha0FsbFRocm93bk5TRXhjZXB0aW9ucywKLQotICAgICAgICAvLyBY
MTEgc3BlY2lmaWMgcXVpcmtzOgotI2VsaWYgUExBVEZPUk0oWDExKQotICAgICAgICAvLyBGbGFz
aCBhbmQgbnB3cmFwcGVyIGFzayB0aGUgYnJvd3NlciBhYm91dCB3aGljaCBHVEsgdmVyc2lvbiBk
b2VzIGl0IHVzZQotICAgICAgICAvLyBhbmQgcmVmdXNlIHRvIGxvYWQgYW5kIHdvcmsgaWYgaXQg
aXMgbm90IEdUSyAyIHNvIHdlIG5lZWQgdG8gZmFrZSBpdCBpbgotICAgICAgICAvLyBOUE5fR2V0
VmFsdWUgZXZlbiB3aGVuIGl0IGlzIGEgbGllLgotICAgICAgICBSZXF1aXJlc0dUS1Rvb2xLaXQs
Ci0KLSAgICAgICAgLy8gU29tZSB2ZXJzaW9uIDEwIHJlbGVhc2VzIG9mIEZsYXNoIHJ1biB1bmRl
ciBuc3BsdWdpbndyYXBwZXIgd2lsbCBjb21wbGV0ZWx5Ci0gICAgICAgIC8vIGZyZWV6ZSB3aGVu
IHNlbmRpbmcgcmlnaHQgY2xpY2sgZXZlbnRzIHRvIHRoZW0gaW4gd2luZG93ZWQgbW9kZS4KLSAg
ICAgICAgSWdub3JlUmlnaHRDbGlja0luV2luZG93bGVzc01vZGUsCi0KLSAgICAgICAgLy8gU29t
ZSBwb3J0cyBkb24ndCBzdXBwb3J0IHdpbmRvd2VkIHBsdWdpbnMuCi0gICAgICAgIEZvcmNlRmxh
c2hXaW5kb3dsZXNzTW9kZSwKLQotICAgICAgICAvLyBGbGFzaCBjcmFzaGVzIHdoZW4gTlBQX0dl
dFZhbHVlIGlzIGNhbGxlZCBmb3IgTlBQVnBsdWdpbkNhbmNlbFNyY1N0cmVhbSBpbiB3aW5kb3dl
ZCBtb2RlLgotICAgICAgICBEb05vdENhbmNlbFNyY1N0cmVhbUluV2luZG93ZWRNb2RlLAotI2Vu
ZGlmCi0KLSAgICAgICAgLy8gVGhpcyBpc24ndCByZWFsbHkgYSBxdWlyayBhcyBtdWNoIGFzIHRo
ZSBvcHBvc2l0ZSBvZiBhIHF1aXJrLiBCeSBkZWZhdWx0LCB3ZSBkb24ndCBzZW5kIHdoZWVsIGV2
ZW50cwotICAgICAgICAvLyB0byBwbHVnLWlucyB1bmxlc3Mgd2Uga25vdyB0aGF0IHRoZXkgaGFu
ZGxlIHRoZW0gY29ycmVjdGx5LiBBZG9iZSBSZWFkZXIgb24gTWFjIGhhbmRsZXMgd2hlZWwgZXZl
bnRzIGNvcnJlY3RseS4KLSAgICAgICAgV2FudHNXaGVlbEV2ZW50cywKLQotICAgICAgICBOdW1Q
bHVnaW5RdWlya3MKLSAgICB9OwotICAgIAotICAgIFBsdWdpblF1aXJrcygpCi0gICAgICAgIDog
bV9xdWlya3MoMCkKLSAgICB7Ci0gICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihtX3F1aXJr
cykgKiA4ID49IE51bVBsdWdpblF1aXJrcywgbm90X2Vub3VnaF9yb29tX2Zvcl9xdWlya3MpOwot
ICAgIH0KLSAgICAKLSAgICB2b2lkIGFkZChQbHVnaW5RdWlyayBxdWlyaykKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChxdWlyayA+PSAwKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihxdWlyayA8IE51bVBsdWdpblF1aXJrcyk7Ci0gICAgICAgIAotICAg
ICAgICBtX3F1aXJrcyB8PSAoMSA8PCBxdWlyayk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgY29u
dGFpbnMoUGx1Z2luUXVpcmsgcXVpcmspIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9x
dWlya3MgJiAoMSA8PCBxdWlyayk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHVpbnQzMl90IG1f
cXVpcmtzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9QbHVnaW5zL21hYy9QbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUuaCBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvbWFjL1BsdWdpbkNvbXBsZXhUZXh0SW5wdXRT
dGF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmVkZDJiMDY3MzNhMjg3YmY1
OWY0ZWJiZGIzMDc0OWE4YTM5MmYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvbWFjL1BsdWdpbkNvbXBs
ZXhUZXh0SW5wdXRTdGF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlX2gKLSNkZWZpbmUgUGx1
Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlX2gKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWVudW0g
UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlIHsKLSAgICAvLyBDb21wbGV4IHRleHQgaW5wdXQg
aXMgZGlzYWJsZWQuCi0gICAgUGx1Z2luQ29tcGxleFRleHRJbnB1dERpc2FibGVkLAotCi0gICAg
Ly8gQ29tcGxleCB0ZXh0IGlucHV0IGlzIGVuYWJsZWQgdXNpbmcgdGhlIHVwZGF0ZWQgQ29jb2Eg
ZXZlbnQgbW9kZWwgdGV4dAotICAgIC8vIGlucHV0IGhhbmRsaW5nIHNwZWNpZmljYXRpb24gZGVz
Y3JpYmVkIGF0IGh0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9OUEFQSTpDb2NvYUV2ZW50TW9kZWwj
VGV4dF9JbnB1dAotICAgIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRFbmFibGVkLAotCi0gICAgLy8g
Q29tcGxleCB0ZXh0IGlucHV0IGlzIGVuYWJsZWQgdXNpbmcgdGhlIGxlZ2FjeSBDb2NvYS9DYXJi
b24gZXZlbnQgbW9kZWwgdGV4dAotICAgIC8vIGlucHV0IGhhbmRsaW5nIHRoYXQgbWF0Y2hlcyBX
ZWJLaXQxLgotICAgIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRFbmFibGVkTGVnYWN5Ci19OwotCi1z
dGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSh1aW50
NjRfdCB2YWx1ZSkKLXsKLSAgICBzd2l0Y2ggKHZhbHVlKSB7Ci0gICAgY2FzZSBQbHVnaW5Db21w
bGV4VGV4dElucHV0RGlzYWJsZWQ6Ci0gICAgY2FzZSBQbHVnaW5Db21wbGV4VGV4dElucHV0RW5h
YmxlZDoKLSAgICBjYXNlIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRFbmFibGVkTGVnYWN5OgotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRl
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvbWFjL1BsdWdpblNh
bmRib3hQcm9maWxlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL21hYy9QbHVnaW5T
YW5kYm94UHJvZmlsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTI0NmI2MjQ5
NzM0MzBjNzYyMTVjNjgyZTg5MjljZTFiN2ZjYjczLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvbWFjL1Bs
dWdpblNhbmRib3hQcm9maWxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBQbHVnaW5TYW5kYm94UHJvZmlsZV9oCi0jZGVmaW5lIFBsdWdpblNh
bmRib3hQcm9maWxlX2gKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1TdHJpbmcgcGx1Z2luU2FuZGJveFByb2ZpbGUoY29uc3QgU3RyaW5nJiBidW5k
bGVJZGVudGlmaWVyKTsKLWJvb2wgcGx1Z2luSGFzU2FuZGJveFByb2ZpbGUoY29uc3QgU3RyaW5n
JiBidW5kbGVJZGVudGlmaWVyKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAv
LyBQbHVnaW5TYW5kYm94UHJvZmlsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9QbHVnaW5zL21hYy9QbHVnaW5TYW5kYm94UHJvZmlsZS5tbSBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1BsdWdpbnMvbWFjL1BsdWdpblNhbmRib3hQcm9maWxlLm1tCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAyNzI0MzljOWEzY2EwNTk1OGFkZGY2MjdmM2M1ODY1NTYwOWZlOTk3Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1BsdWdpbnMvbWFjL1BsdWdpblNhbmRib3hQcm9maWxlLm1tCisrKyAvZGV2L251
bGwKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiUGx1Z2luU2FuZGJveFByb2ZpbGUuaCIKLQotI2ltcG9ydCAiV0tGb3VuZGF0aW9uLmgi
Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdDb25j
YXRlbmF0ZS5oPgotI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1zdGF0aWMgTlNTdHJpbmcgKnBsdWdpblNhbmRib3hQcm9maWxlRGlyZWN0b3J5
KCkKLXsKLSAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOk5T
Q2xhc3NGcm9tU3RyaW5nKEAiV0tXZWJWaWV3IildOwotICAgIHJldHVybiBbW2J1bmRsZSByZXNv
dXJjZVBhdGhdIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIlBsdWdJblNhbmRib3hQ
cm9maWxlcyJdOwotfQotCi1zdGF0aWMgTlNTdHJpbmcgKnBsdWdpblNhbmRib3hQcm9maWxlTmFt
ZShjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpCi17Ci0gICAgLy8gRm9sZCBhbGwgLyBj
aGFyYWN0ZXJzIHRvIDogdG8gcHJldmVudCB0aGUgcGx1Z2luIGJ1bmRsZS1pZCBmcm9tIHRyeWlu
ZyB0byBlc2NhcGUgdGhlIHByb2ZpbGUgZGlyZWN0b3J5Ci0gICAgU3RyaW5nIHNhbml0aXplZEJ1
bmRsZUlkZW50aWZpZXIgPSBidW5kbGVJZGVudGlmaWVyOwotICAgIHNhbml0aXplZEJ1bmRsZUlk
ZW50aWZpZXIucmVwbGFjZSgnLycsICc6Jyk7Ci0KLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCIlQC5zYiIsIChOU1N0cmluZyAqKXNhbml0aXplZEJ1bmRsZUlkZW50aWZp
ZXJdOwotfQotCi1zdGF0aWMgU3RyaW5nIHBsdWdpblNhbmRib3hDb21tb25Qcm9maWxlKCkKLXsK
LSAgICBOU1N0cmluZyAqcHJvZmlsZVBhdGggPSBbcGx1Z2luU2FuZGJveFByb2ZpbGVEaXJlY3Rv
cnkoKSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJjb20uYXBwbGUuV2ViS2l0LnBs
dWdpbi1jb21tb24uc2IiXTsKLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50
c09mRmlsZTpwcm9maWxlUGF0aCBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpO
VUxMXTsKLX0KLQotU3RyaW5nIHBsdWdpblNhbmRib3hQcm9maWxlKGNvbnN0IFN0cmluZyYgYnVu
ZGxlSWRlbnRpZmllcikKLXsKLSAgICBpZiAoYnVuZGxlSWRlbnRpZmllci5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIE5TU3RyaW5nICpwcm9maWxlTmFtZSA9IHBs
dWdpblNhbmRib3hQcm9maWxlTmFtZShidW5kbGVJZGVudGlmaWVyKTsKLQotICAgIE5TU3RyaW5n
ICpwcm9maWxlUGF0aCA9IFtwbHVnaW5TYW5kYm94UHJvZmlsZURpcmVjdG9yeSgpIHN0cmluZ0J5
QXBwZW5kaW5nUGF0aENvbXBvbmVudDpwcm9maWxlTmFtZV07Ci0gICAgTlNTdHJpbmcgKnByb2Zp
bGVTdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRlbnRzT2ZGaWxlOnByb2ZpbGVQYXRo
IGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOk5VTExdOwotICAgIGlmICghcHJv
ZmlsZVN0cmluZykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIG1ha2VT
dHJpbmcocGx1Z2luU2FuZGJveENvbW1vblByb2ZpbGUoKSwgU3RyaW5nKHByb2ZpbGVTdHJpbmcp
KTsKLX0KLQotYm9vbCBwbHVnaW5IYXNTYW5kYm94UHJvZmlsZShjb25zdCBTdHJpbmcmIGJ1bmRs
ZUlkZW50aWZpZXIpCi17Ci0gICAgaWYgKGJ1bmRsZUlkZW50aWZpZXIuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBOU1N0cmluZyAqcHJvZmlsZU5hbWUgPSBwbHVnaW5T
YW5kYm94UHJvZmlsZU5hbWUoYnVuZGxlSWRlbnRpZmllcik7Ci0gICAgTlNTdHJpbmcgKnByb2Zp
bGVQYXRoID0gW3BsdWdpblNhbmRib3hQcm9maWxlRGlyZWN0b3J5KCkgc3RyaW5nQnlBcHBlbmRp
bmdQYXRoQ29tcG9uZW50OnByb2ZpbGVOYW1lXTsKLQotICAgIHJldHVybiBbW05TRmlsZU1hbmFn
ZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6cHJvZmlsZVBhdGhdOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBy
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAppbmRleCBmNzYxNGNkMjAzYTNhOTUwYjgyNjA1ZGRk
OThjNzY2NThhMmY5ODY1Li5kYzBkYjM2ZDgwMmVhMTA5ZGUzZjdmNDk3MWM3ZDQ0ZDE2NDAyMDdj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5oCkBAIC00OSwxMCArNDksNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVGhl
bWVJT1MuaD4KICNlbmRpZgogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0jaW5j
bHVkZSA8V2ViQ29yZS9QbHVnaW5EYXRhLmg+Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKEdUSykg
fHwgUExBVEZPUk0oV1BFKQogI2luY2x1ZGUgPHd0Zi9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaD4K
ICNlbmRpZgpAQCAtMTczLDEwICsxNjksNiBAQCBzdHJ1Y3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycyB7CiAgICAgSGFzaE1hcDxTdHJpbmcsIGJvb2w+IG5vdGlmaWNhdGlvblBlcm1pc3Np
b25zOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBIYXNo
TWFwPFN0cmluZywgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8U3RyaW5nLCBXZWJDb3JlOjpQbHVn
aW5Mb2FkQ2xpZW50UG9saWN5Pj4+IHBsdWdpbkxvYWRDbGllbnRQb2xpY2llczsKLSNlbmRpZgot
CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gbmV0d29ya0FU
U0NvbnRleHQ7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNp
dGVEYXRhL1dlYnNpdGVEYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRh
L1dlYnNpdGVEYXRhLmNwcAppbmRleCBhYTczOTBkNmE0YzNlMjgzYTZjMWM4NmY5MWIxZjc2MWIw
MDRkNGI4Li5mMzcyOTAxMzhiNGZhZmYzMjM1M2IyYWNkYWRlODM0MDBkYTljYzhhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGEuY3BwCkBAIC02
NSw5ICs2NSw2IEBAIHZvaWQgV2Vic2l0ZURhdGE6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBlbnRyaWVzOwogICAgIGVuY29kZXIgPDwgaG9z
dE5hbWVzV2l0aENvb2tpZXM7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAg
ZW5jb2RlciA8PCBob3N0TmFtZXNXaXRoUGx1Z2luRGF0YTsKLSNlbmRpZgogICAgIGVuY29kZXIg
PDwgaG9zdE5hbWVzV2l0aEhTVFNDYWNoZTsKICNpZiBFTkFCTEUoSU5URUxMSUdFTlRfVFJBQ0tJ
TkdfUFJFVkVOVElPTikKICAgICBlbmNvZGVyIDw8IHJlZ2lzdHJhYmxlRG9tYWluc1dpdGhSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzOwpAQCAtODAsMTAgKzc3LDYgQEAgYm9vbCBXZWJzaXRlRGF0YTo6
ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgV2Vic2l0ZURhdGEmIHJlc3VsdCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lmhvc3ROYW1l
c1dpdGhDb29raWVzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lmhvc3ROYW1lc1dp
dGhQbHVnaW5EYXRhKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCiAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQuaG9zdE5hbWVzV2l0aEhTVFNDYWNoZSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICNpZiBFTkFCTEUoSU5URUxMSUdFTlRfVFJBQ0tJTkdfUFJFVkVOVElPTikK
QEAgLTExOCwxMCArMTExLDYgQEAgV2Vic2l0ZURhdGFQcm9jZXNzVHlwZSBXZWJzaXRlRGF0YTo6
b3duZXJQcm9jZXNzKFdlYnNpdGVEYXRhVHlwZSBkYXRhVHlwZSkKICAgICAgICAgcmV0dXJuIFdl
YnNpdGVEYXRhUHJvY2Vzc1R5cGU6Ok5ldHdvcms7CiAgICAgY2FzZSBXZWJzaXRlRGF0YVR5cGU6
OlNlYXJjaEZpZWxkUmVjZW50U2VhcmNoZXM6CiAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YVBy
b2Nlc3NUeXBlOjpVSTsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBjYXNl
IFdlYnNpdGVEYXRhVHlwZTo6UGx1Z0luRGF0YToKLSAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRh
UHJvY2Vzc1R5cGU6OlVJOwotI2VuZGlmCiAgICAgY2FzZSBXZWJzaXRlRGF0YVR5cGU6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3M6CiAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YVByb2Nlc3NUeXBl
OjpOZXR3b3JrOwogICAgIGNhc2UgV2Vic2l0ZURhdGFUeXBlOjpDcmVkZW50aWFsczoKQEAgLTE2
MSw5ICsxNTAsNiBAQCBXZWJzaXRlRGF0YSBXZWJzaXRlRGF0YTo6aXNvbGF0ZWRDb3B5KCkgY29u
c3QKICAgICByZXR1cm4gV2Vic2l0ZURhdGEgewogICAgICAgICBjcm9zc1RocmVhZENvcHkoZW50
cmllcyksCiAgICAgICAgIGNyb3NzVGhyZWFkQ29weShob3N0TmFtZXNXaXRoQ29va2llcyksCi0j
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIGNyb3NzVGhyZWFkQ29weSho
b3N0TmFtZXNXaXRoUGx1Z2luRGF0YSksCi0jZW5kaWYKICAgICAgICAgY3Jvc3NUaHJlYWRDb3B5
KGhvc3ROYW1lc1dpdGhIU1RTQ2FjaGUpLAogI2lmIEVOQUJMRShJTlRFTExJR0VOVF9UUkFDS0lO
R19QUkVWRU5USU9OKQogICAgICAgICBjcm9zc1RocmVhZENvcHkocmVnaXN0cmFibGVEb21haW5z
V2l0aFJlc291cmNlTG9hZFN0YXRpc3RpY3MpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
aGFyZWQvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGEuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YnNpdGVEYXRhL1dlYnNpdGVEYXRhLmgKaW5kZXggNDQ0YjFhZTEzMTkzOTBhNzEwZjdjNzQ0YzY0
OTA2OWNkMGU5MzQwYS4uYmIyMGIyNTE5MjNmNGZlYjlkNzdhYWQ0ZmIyY2M3MWY5NDBhYzQ5MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGEu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YS5oCkBA
IC01OSw5ICs1OSw2IEBAIHN0cnVjdCBXZWJzaXRlRGF0YSB7CiAgICAgVmVjdG9yPEVudHJ5PiBl
bnRyaWVzOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBob3N0TmFtZXNXaXRoQ29va2llczsKIAotI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIEhhc2hTZXQ8U3RyaW5nPiBob3N0TmFt
ZXNXaXRoUGx1Z2luRGF0YTsKLSNlbmRpZgogICAgIEhhc2hTZXQ8U3RyaW5nPiBob3N0TmFtZXNX
aXRoSFNUU0NhY2hlOwogI2lmIEVOQUJMRShJTlRFTExJR0VOVF9UUkFDS0lOR19QUkVWRU5USU9O
KQogICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHJlZ2lzdHJhYmxlRG9t
YWluc1dpdGhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFUeXBlLmggYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUuaAppbmRleCAzNWY3Mjk5NDE2Y2I5ZDRm
YjAyYmY5NTYzMzE4MjZhMTRjOGE3ZDY4Li43YTllNTAwZmUxYjA5ZTM4OTVkZDc0M2UxNjVjOTg5
MThiZTdhOGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVR5cGUuaApAQCAtNDEsOSArNDEsNiBAQCBlbnVtIGNsYXNzIFdlYnNpdGVEYXRh
VHlwZSA6IHVpbnQzMl90IHsKICAgICBNZWRpYUtleXMgPSAxIDw8IDgsCiAgICAgSFNUU0NhY2hl
ID0gMSA8PCA5LAogICAgIFNlYXJjaEZpZWxkUmVjZW50U2VhcmNoZXMgPSAxIDw8IDEwLAotI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIFBsdWdJbkRhdGEgPSAxIDw8IDExLAot
I2VuZGlmCiAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IDEgPDwgMTIsCiAgICAgQ3JlZGVu
dGlhbHMgPSAxIDw8IDEzLAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKQEAgLTc1LDkgKzcy
LDYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJLaXQ6OldlYnNpdGVEYXRhVHlw
ZT4gewogICAgICAgICBXZWJLaXQ6OldlYnNpdGVEYXRhVHlwZTo6TWVkaWFLZXlzLAogICAgICAg
ICBXZWJLaXQ6OldlYnNpdGVEYXRhVHlwZTo6SFNUU0NhY2hlLAogICAgICAgICBXZWJLaXQ6Oldl
YnNpdGVEYXRhVHlwZTo6U2VhcmNoRmllbGRSZWNlbnRTZWFyY2hlcywKLSNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgV2ViS2l0OjpXZWJzaXRlRGF0YVR5cGU6OlBsdWdJ
bkRhdGEsCi0jZW5kaWYKICAgICAgICAgV2ViS2l0OjpXZWJzaXRlRGF0YVR5cGU6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3MsCiAgICAgICAgIFdlYktpdDo6V2Vic2l0ZURhdGFUeXBlOjpDcmVkZW50
aWFscywKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCAxNDI3ZTdl
M2JiY2YxMWU5ZWUyMWQ5YmY4NzhiYTFjNDJjNzMxNjQwLi4wYWNmZjVjNjgwNTQ3OGIzZGEyODAz
MzAyNGY1OGU3NjdjM2YyMTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0
CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTE4MSwxMSArMTgxLDYgQEAgUGxh
dGZvcm0vSVBDL1NoYXJlZEZpbGVIYW5kbGUuY3BwIEBuby11bmlmeQogUGxhdGZvcm0vSVBDL1N0
cmVhbVNlcnZlckNvbm5lY3Rpb24uY3BwIEBuby11bmlmeQogUGxhdGZvcm0vSVBDL1N0cmluZ1Jl
ZmVyZW5jZS5jcHAgQG5vLXVuaWZ5CiAKLVBsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclBy
b3h5LmNwcCBAbm8tdW5pZnkKLVBsdWdpblByb2Nlc3MvUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJz
LmNwcCBAbm8tdW5pZnkKLVBsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5jcHAgQG5vLXVuaWZ5
Ci1QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcCBAbm8tdW5pZnkKLQogLy8g
VE9ETzogVGhlIGZpbGVzIGhlcmUgbWFya2VkIEBuby11bmlmeSBzaG91bGQgYmUgdW5pZmllZCBv
bmNlIEdUSydzIFBsdWdpblByb2Nlc3MyIGlzIHJlbW92ZWQuCiBTaGFyZWQvQWNjZXNzaWJpbGl0
eVByZWZlcmVuY2VzLmNwcAogU2hhcmVkL0FjdGl2aXR5QXNzZXJ0aW9uLmNwcCBAbm8tdW5pZnkK
QEAgLTI5NywxOCArMjkyLDYgQEAgU2hhcmVkL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCUmVz
dWx0LmNwcAogCiBTaGFyZWQvR2FtZXBhZC9HYW1lcGFkRGF0YS5jcHAKIAotLy8gVE9ETzogVGhl
c2UgZmlsZXMgc2hvdWxkIGJlIHVuaWZpZWQgb25jZSBHVEsncyBQbHVnaW5Qcm9jZXNzMiBpcyBy
ZW1vdmVkLgotU2hhcmVkL1BsdWdpbnMvTlBJZGVudGlmaWVyRGF0YS5jcHAgQG5vLXVuaWZ5Ci1T
aGFyZWQvUGx1Z2lucy9OUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5jcHAgQG5vLXVuaWZ5Ci1TaGFy
ZWQvUGx1Z2lucy9OUE9iamVjdFByb3h5LmNwcCBAbm8tdW5pZnkKLVNoYXJlZC9QbHVnaW5zL05Q
UmVtb3RlT2JqZWN0TWFwLmNwcCBAbm8tdW5pZnkKLVNoYXJlZC9QbHVnaW5zL05QVmFyaWFudERh
dGEuY3BwIEBuby11bmlmeQotU2hhcmVkL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5jcHAgQG5vLXVuaWZ5Ci0KLS8vIFRPRE86IFRoZXNlIGZpbGVzIHNob3VsZCBiZSB1
bmlmaWVkIG9uY2UgR1RLJ3MgUGx1Z2luUHJvY2VzczIgaXMgcmVtb3ZlZC4KLVNoYXJlZC9QbHVn
aW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luTW9kdWxlLmNwcCAgQG5vLXVuaWZ5Ci1TaGFyZWQv
UGx1Z2lucy9OZXRzY2FwZS9QbHVnaW5JbmZvcm1hdGlvbi5jcHAgQG5vLXVuaWZ5Ci0KIFNoYXJl
ZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YS5jcHAKIAogU2hhcmVkL1hSL1hSRGV2aWNlSW5mby5j
cHAKQEAgLTUwMSwxMCArNDg0LDYgQEAgVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZp
Y2F0aW9uTWFuYWdlck1lc3NhZ2VIYW5kbGVyLmNwcAogVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMv
V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5LmNwcAogVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMv
V2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwCiAKLVVJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbklu
Zm9TdG9yZS5jcHAKLVVJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NNYW5hZ2VyLmNwcAot
VUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcAotCiBVSVByb2Nlc3MvVXNl
ckNvbnRlbnQvV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuY3BwCiBVSVByb2Nlc3MvVXNlckNvbnRl
bnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCiAKQEAgLTY3NCwyMiArNjUzLDkg
QEAgV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIuY3BwCiAK
IC8vIFRPRE86IFRoZXNlIGZpbGVzIHNob3VsZCBiZSB1bmlmaWVkIG9uY2UgR1RLJ3MgUGx1Z2lu
UHJvY2VzczIgaXMgcmVtb3ZlZC4KIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4uY3BwIEBuby11
bmlmeQotV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uLmNwcCBAbm8t
dW5pZnkKLVdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIu
Y3BwIEBuby11bmlmeQotV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmNwcCBAbm8tdW5p
ZnkKIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBAbm8tdW5pZnkKIFdlYlByb2Nl
c3MvUGx1Z2lucy9XZWJQbHVnaW5JbmZvUHJvdmlkZXIuY3BwIEBuby11bmlmeQogCi0vLyBUT0RP
OiBUaGVzZSBmaWxlcyBzaG91bGQgYmUgdW5pZmllZCBvbmNlIEdUSydzIFBsdWdpblByb2Nlc3My
IGlzIHJlbW92ZWQuCi1XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5jcHAg
QG5vLXVuaWZ5Ci1XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAgQG5v
LXVuaWZ5Ci1XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAgQG5vLXVu
aWZ5Ci1XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcCBA
bm8tdW5pZnkKLVdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVVdGlsaXRpZXMu
Y3BwIEBuby11bmlmeQotV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlQnJvd3Nl
ckZ1bmNzLmNwcCBAbm8tdW5pZnkKLVdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2Fw
ZVBsdWdpbi5jcHAgQG5vLXVuaWZ5Ci1XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2Nh
cGVQbHVnaW5TdHJlYW0uY3BwIEBuby11bmlmeQotCiBXZWJQcm9jZXNzL1NwZWVjaC9TcGVlY2hS
ZWNvZ25pdGlvblJlYWx0aW1lTWVkaWFTb3VyY2VNYW5hZ2VyLmNwcAogCiBXZWJQcm9jZXNzL1N0
b3JhZ2UvV2ViU1dDbGllbnRDb25uZWN0aW9uLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4
IDczZGY5NWM4MDg1MGYxOTFiOWI2OTgyNDNjYTIwY2E3NDY1MmM5NDYuLjBjYmUzN2ZmYTcwZmE3
Y2I1NmRlZjA5ODJkYmEwZTNmNGJmOThkMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291
cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTEw
OSwxMSArMTA5LDYgQEAgUGxhdGZvcm0vbWFjL1N0cmluZ1V0aWxpdGllcy5tbQogCiBQbGF0Zm9y
bS91bml4L0Vudmlyb25tZW50VXRpbGl0aWVzLmNwcAogCi1QbHVnaW5Qcm9jZXNzL0VudHJ5UG9p
bnQvQ29jb2EvWFBDU2VydmljZS9QbHVnaW5TZXJ2aWNlRW50cnlQb2ludC5tbSBAbm8tdW5pZnkK
LQotUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luQ29udHJvbGxlclByb3h5TWFjLm1tIEBuby11bmlm
eQotUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc01hYy5tbSBAbm8tdW5pZnkKLQogU2hh
cmVkL0FQSS9jL2NmL1dLRXJyb3JDRi5jcHAKIFNoYXJlZC9BUEkvYy9jZi9XS1N0cmluZ0NGLm1t
CiBTaGFyZWQvQVBJL2MvY2YvV0tVUkxDRi5tbQpAQCAtMjQwLDExICsyMzUsNiBAQCBTaGFyZWQv
bWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmNwcAogU2hhcmVkL21h
Yy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNvci5jcHAKIFNoYXJlZC9tYWMvTWVk
aWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFja1JlYWRlci5jcHAKIAotU2hhcmVkL1BsdWdpbnMvbWFj
L1BsdWdpblNhbmRib3hQcm9maWxlLm1tCi0KLVNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL21hYy9O
ZXRzY2FwZVBsdWdpbk1vZHVsZU1hYy5tbQotU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvbWFjL1Bs
dWdpbkluZm9ybWF0aW9uTWFjLm1tCi0KIFNoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5
ZXJCYWNraW5nU3RvcmUubW0KIFNoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJCYWNr
aW5nU3RvcmVDb2xsZWN0aW9uLm1tCiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVy
VHJlZVByb3BlcnR5QXBwbGllci5tbQpAQCAtNTU3LDEwICs1NDcsNiBAQCBVSVByb2Nlc3MvTWVk
aWEvY29jb2EvTWVkaWFVc2FnZU1hbmFnZXJDb2NvYS5tbQogCiBVSVByb2Nlc3MvTmV0d29yay9D
dXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCiAKLVVJ
UHJvY2Vzcy9QbHVnaW5zL21hYy9QbHVnaW5JbmZvU3RvcmVNYWMubW0KLVVJUHJvY2Vzcy9QbHVn
aW5zL21hYy9QbHVnaW5Qcm9jZXNzTWFuYWdlck1hYy5tbQotVUlQcm9jZXNzL1BsdWdpbnMvbWFj
L1BsdWdpblByb2Nlc3NQcm94eU1hYy5tbQotCiBVSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2Nv
Y29hL1JlbW90ZUxheWVyVHJlZUxheWVycy5tbQogCiBVSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVl
L21hYy9TY3JvbGxlck1hYy5tbQpAQCAtNjY5LDkgKzY1NSw2IEBAIFdlYlByb2Nlc3MvSW5zcGVj
dG9yL21hYy9XZWJJbnNwZWN0b3JVSU1hYy5tbQogCiBXZWJQcm9jZXNzL01lZGlhQ2FjaGUvV2Vi
TWVkaWFLZXlTdG9yYWdlTWFuYWdlci5jcHAKIAotV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L21hYy9OZXRzY2FwZVBsdWdpbk1hYy5tbQotV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL21h
Yy9QbHVnaW5Qcm94eU1hYy5tbQotCiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5t
bQogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5Bbm5vdGF0aW9uLm1tCiBXZWJQcm9j
ZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbkNob2ljZUFubm90YXRpb24ubW0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElMb2FkZXJDbGllbnQuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElMb2FkZXJDbGllbnQuaAppbmRleCBjMzY0YWVmNWQ5MDY4
MmU3MjRlYjM3MzNlOTk5N2FiYmZlOGJkNzAzLi45YTczMDFiODAxZWJjMDE5YmQ5OGI2ZmY1ODJh
OGU3NGVhNDBmMDhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJ
TG9hZGVyQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUxvYWRl
ckNsaWVudC5oCkBAIC0yNiw3ICsyNiw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFQ
SURhdGEuaCIKLSNpbmNsdWRlICJQbHVnaW5Nb2R1bGVJbmZvLmgiCiAjaW5jbHVkZSAiU2FtZURv
Y3VtZW50TmF2aWdhdGlvblR5cGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlw
ZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0xheW91dE1pbGVzdG9uZS5oPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb25DbGllbnQuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uQ2xpZW50LmgKaW5kZXggMWM5ZmEz
ZjIwNmIyOTZhZTdmZDdlYjdlYmFjY2QzZTE2NTVlMjU0Yi4uNTYyMzQwMTQ1OWRhNWZlMzBmNDkx
YTQxZmIzNDdhNjc1NzIwMmM0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSU5hdmlnYXRpb25DbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJTmF2aWdhdGlvbkNsaWVudC5oCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbi5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlUHJveHkuaCIKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlz
dGVuZXIuaCIKLSNpbmNsdWRlICJQbHVnaW5Nb2R1bGVJbmZvLmgiCiAjaW5jbHVkZSAiUHJvY2Vz
c1Rlcm1pbmF0aW9uUmVhc29uLmgiCiAjaW5jbHVkZSAiU2FtZURvY3VtZW50TmF2aWdhdGlvblR5
cGUuaCIKICNpbmNsdWRlICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKQEAgLTEzNCwx
NSArMTMzLDYgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB2aXJ0dWFsIHZvaWQgY29udGVu
dFJ1bGVMaXN0Tm90aWZpY2F0aW9uKFdlYktpdDo6V2ViUGFnZVByb3h5JiwgV1RGOjpVUkwmJiwg
V2ViQ29yZTo6Q29udGVudFJ1bGVMaXN0UmVzdWx0cyYmKSB7IH07Ci0gICAgCi0jaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgdmlydHVhbCBib29sIGRpZEZhaWxUb0luaXRpYWxp
emVQbHVnSW4oV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBBUEk6OkRpY3Rpb25hcnkmKSB7IHJldHVy
biBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBkaWRCbG9ja0luc2VjdXJlUGx1Z2luVmVyc2lv
bihXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIEFQSTo6RGljdGlvbmFyeSYpIHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlY2lkZVBvbGljeUZvclBsdWdpbkxvYWQoV2ViS2l0OjpX
ZWJQYWdlUHJveHkmLCBXZWJLaXQ6OlBsdWdpbk1vZHVsZUxvYWRQb2xpY3kgY3VycmVudFBsdWdp
bkxvYWRQb2xpY3ksIERpY3Rpb25hcnkmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYktpdDo6
UGx1Z2luTW9kdWxlTG9hZFBvbGljeSwgY29uc3QgV1RGOjpTdHJpbmcmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKLSAgICB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGN1cnJlbnRQbHVnaW5M
b2FkUG9saWN5LCB7IH0pOwotICAgIH0KLSNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQkdMKQogICAg
IHZpcnR1YWwgdm9pZCB3ZWJHTExvYWRQb2xpY3koV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBjb25z
dCBXVEY6OlVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6V2ViR0xMb2FkUG9s
aWN5KT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QgeyBjb21wbGV0aW9uSGFuZGxlcihXZWJD
b3JlOjpXZWJHTExvYWRQb2xpY3k6OldlYkdMQWxsb3dDcmVhdGlvbik7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElVSUNsaWVudC5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSVVJQ2xpZW50LmgKaW5kZXggNTQ5MTAyZWI1ZmVlYWIwMDliZjk0
Nzc1MzJkNGY5ZDUwMWVhOGU1Yi4uNjU4Y2ViYzNjMjg1YWE2ZDg5ODI2OTk1MGJlYmRmZGNmYjFj
OTdjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVVJQ2xpZW50
LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVVJQ2xpZW50LmgKQEAgLTk3
LDkgKzk3LDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldFN0YXR1c1RleHQoV2Vi
S2l0OjpXZWJQYWdlUHJveHkqLCBjb25zdCBXVEY6OlN0cmluZyYpIHsgfQogICAgIHZpcnR1YWwg
dm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGNvbnN0
IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGEmLCBPcHRpb25TZXQ8V2ViS2l0OjpXZWJFdmVu
dDo6TW9kaWZpZXI+LCBPYmplY3QqKSB7IH0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKLSAgICB2aXJ0dWFsIHZvaWQgdW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkKFdlYktp
dDo6V2ViUGFnZVByb3h5JiwgV0tQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiwgRGljdGlvbmFy
eSYpIHsgfQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogCiAgICAgdmly
dHVhbCB2b2lkIGRpZE5vdEhhbmRsZUtleUV2ZW50KFdlYktpdDo6V2ViUGFnZVByb3h5KiwgY29u
c3QgV2ViS2l0OjpOYXRpdmVXZWJLZXlib2FyZEV2ZW50JikgeyB9CiAgICAgdmlydHVhbCB2b2lk
IGRpZE5vdEhhbmRsZVdoZWVsRXZlbnQoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJL
aXQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQmKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tBUElDYXN0LmgKaW5kZXggZDg5ODdlYjliN2RmNjJhYTgwODQ1NWY3NWFlYzEzNmNjNTMz
YmU1ZC4uNTEyYjJiYzY5NTI0Yjc5OTAxODU2NTJjYzEzNmNkNWEzODRhNjZjYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgKQEAgLTI5LDcgKzI5LDYgQEAKIAog
I2luY2x1ZGUgIkNhY2hlTW9kZWwuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZUhpdFRlc3RS
ZXN1bHRNZWRpYVR5cGUuaCIKLSNpbmNsdWRlICJQbHVnaW5Nb2R1bGVJbmZvLmgiCiAjaW5jbHVk
ZSAiUHJvY2Vzc1Rlcm1pbmF0aW9uUmVhc29uLmgiCiAjaW5jbHVkZSAiV0tCdW5kbGVIaXRUZXN0
UmVzdWx0LmgiCiAjaW5jbHVkZSAiV0tDb250ZXh0LmgiCkBAIC00MTgsNzggKzQxNyw2IEBAIGlu
bGluZSBXS1N0b3JhZ2VCbG9ja2luZ1BvbGljeSB0b0FQSShXZWJDb3JlOjpTdG9yYWdlQmxvY2tp
bmdQb2xpY3kgcG9saWN5KQogICAgIHJldHVybiBrV0tBbGxvd0FsbFN0b3JhZ2U7CiB9CiAKLWlu
bGluZSBXS1BsdWdpbkxvYWRQb2xpY3kgdG9XS1BsdWdpbkxvYWRQb2xpY3koUGx1Z2luTW9kdWxl
TG9hZFBvbGljeSBwbHVnaW5Nb2R1bGVMb2FkUG9saWN5KQotewotICAgIHN3aXRjaCAocGx1Z2lu
TW9kdWxlTG9hZFBvbGljeSkgewotICAgIGNhc2UgUGx1Z2luTW9kdWxlTG9hZE5vcm1hbGx5Ogot
ICAgICAgICByZXR1cm4ga1dLUGx1Z2luTG9hZFBvbGljeUxvYWROb3JtYWxseTsKLSAgICBjYXNl
IFBsdWdpbk1vZHVsZUxvYWRVbnNhbmRib3hlZDoKLSAgICAgICAgcmV0dXJuIGtXS1BsdWdpbkxv
YWRQb2xpY3lMb2FkVW5zYW5kYm94ZWQ7Ci0gICAgY2FzZSBQbHVnaW5Nb2R1bGVCbG9ja2VkRm9y
U2VjdXJpdHk6Ci0gICAgICAgIHJldHVybiBrV0tQbHVnaW5Mb2FkUG9saWN5QmxvY2tlZDsKLSAg
ICBjYXNlIFBsdWdpbk1vZHVsZUJsb2NrZWRGb3JDb21wYXRpYmlsaXR5OgotICAgICAgICByZXR1
cm4ga1dLUGx1Z2luTG9hZFBvbGljeUJsb2NrZWRGb3JDb21wYXRpYmlsaXR5OwotICAgIH0KLSAg
ICAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4ga1dLUGx1Z2luTG9hZFBv
bGljeUJsb2NrZWQ7Ci19Ci0KLWlubGluZSBXS1BsdWdpbkxvYWRDbGllbnRQb2xpY3kgdG9XS1Bs
dWdpbkxvYWRDbGllbnRQb2xpY3koV2ViQ29yZTo6UGx1Z2luTG9hZENsaWVudFBvbGljeSBQbHVn
aW5Mb2FkQ2xpZW50UG9saWN5KQotewotICAgIHN3aXRjaCAoUGx1Z2luTG9hZENsaWVudFBvbGlj
eSkgewotICAgIGNhc2UgV2ViQ29yZTo6UGx1Z2luTG9hZENsaWVudFBvbGljeTo6VW5kZWZpbmVk
OgotICAgICAgICByZXR1cm4ga1dLUGx1Z2luTG9hZENsaWVudFBvbGljeVVuZGVmaW5lZDsKLSAg
ICBjYXNlIFdlYkNvcmU6OlBsdWdpbkxvYWRDbGllbnRQb2xpY3k6OkJsb2NrOgotICAgICAgICBy
ZXR1cm4ga1dLUGx1Z2luTG9hZENsaWVudFBvbGljeUJsb2NrOwotICAgIGNhc2UgV2ViQ29yZTo6
UGx1Z2luTG9hZENsaWVudFBvbGljeTo6QXNrOgotICAgICAgICByZXR1cm4ga1dLUGx1Z2luTG9h
ZENsaWVudFBvbGljeUFzazsKLSAgICBjYXNlIFdlYkNvcmU6OlBsdWdpbkxvYWRDbGllbnRQb2xp
Y3k6OkFsbG93OgotICAgICAgICByZXR1cm4ga1dLUGx1Z2luTG9hZENsaWVudFBvbGljeUFsbG93
OwotICAgIGNhc2UgV2ViQ29yZTo6UGx1Z2luTG9hZENsaWVudFBvbGljeTo6QWxsb3dBbHdheXM6
Ci0gICAgICAgIHJldHVybiBrV0tQbHVnaW5Mb2FkQ2xpZW50UG9saWN5QWxsb3dBbHdheXM7Ci0g
ICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGtXS1BsdWdpbkxv
YWRDbGllbnRQb2xpY3lCbG9jazsKLX0KLQotaW5saW5lIFBsdWdpbk1vZHVsZUxvYWRQb2xpY3kg
dG9QbHVnaW5Nb2R1bGVMb2FkUG9saWN5KFdLUGx1Z2luTG9hZFBvbGljeSBwbHVnaW5Mb2FkUG9s
aWN5KQotewotICAgIHN3aXRjaCAocGx1Z2luTG9hZFBvbGljeSkgewotICAgIGNhc2Uga1dLUGx1
Z2luTG9hZFBvbGljeUxvYWROb3JtYWxseToKLSAgICAgICAgcmV0dXJuIFBsdWdpbk1vZHVsZUxv
YWROb3JtYWxseTsKLSAgICBjYXNlIGtXS1BsdWdpbkxvYWRQb2xpY3lCbG9ja2VkOgotICAgICAg
ICByZXR1cm4gUGx1Z2luTW9kdWxlQmxvY2tlZEZvclNlY3VyaXR5OwotICAgIGNhc2Uga1dLUGx1
Z2luTG9hZFBvbGljeUJsb2NrZWRGb3JDb21wYXRpYmlsaXR5OgotICAgICAgICByZXR1cm4gUGx1
Z2luTW9kdWxlQmxvY2tlZEZvckNvbXBhdGliaWxpdHk7Ci0gICAgY2FzZSBrV0tQbHVnaW5Mb2Fk
UG9saWN5TG9hZFVuc2FuZGJveGVkOgotICAgICAgICByZXR1cm4gUGx1Z2luTW9kdWxlTG9hZFVu
c2FuZGJveGVkOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gUGx1Z2luTW9kdWxlQmxvY2tlZEZvclNlY3VyaXR5OwotfQotCi1pbmxpbmUgV2ViQ29y
ZTo6UGx1Z2luTG9hZENsaWVudFBvbGljeSB0b1BsdWdpbkxvYWRDbGllbnRQb2xpY3koV0tQbHVn
aW5Mb2FkQ2xpZW50UG9saWN5IHBsdWdpbkxvYWRDbGllbnRQb2xpY3kpCi17Ci0gICAgc3dpdGNo
IChwbHVnaW5Mb2FkQ2xpZW50UG9saWN5KSB7Ci0gICAgY2FzZSBrV0tQbHVnaW5Mb2FkQ2xpZW50
UG9saWN5VW5kZWZpbmVkOgotICAgICAgICByZXR1cm4gV2ViQ29yZTo6UGx1Z2luTG9hZENsaWVu
dFBvbGljeTo6VW5kZWZpbmVkOwotICAgIGNhc2Uga1dLUGx1Z2luTG9hZENsaWVudFBvbGljeUJs
b2NrOgotICAgICAgICByZXR1cm4gV2ViQ29yZTo6UGx1Z2luTG9hZENsaWVudFBvbGljeTo6Qmxv
Y2s7Ci0gICAgY2FzZSBrV0tQbHVnaW5Mb2FkQ2xpZW50UG9saWN5QXNrOgotICAgICAgICByZXR1
cm4gV2ViQ29yZTo6UGx1Z2luTG9hZENsaWVudFBvbGljeTo6QXNrOwotICAgIGNhc2Uga1dLUGx1
Z2luTG9hZENsaWVudFBvbGljeUFsbG93OgotICAgICAgICByZXR1cm4gV2ViQ29yZTo6UGx1Z2lu
TG9hZENsaWVudFBvbGljeTo6QWxsb3c7Ci0gICAgY2FzZSBrV0tQbHVnaW5Mb2FkQ2xpZW50UG9s
aWN5QWxsb3dBbHdheXM6Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpQbHVnaW5Mb2FkQ2xpZW50
UG9saWN5OjpBbGxvd0Fsd2F5czsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gV2ViQ29yZTo6UGx1Z2luTG9hZENsaWVudFBvbGljeTo6QmxvY2s7Ci19Ci0K
IGlubGluZSBXZWJDb3JlOjpXZWJHTExvYWRQb2xpY3kgdG9XZWJHTExvYWRQb2xpY3koV0tXZWJH
TExvYWRQb2xpY3kgd2ViR0xMb2FkUG9saWN5KQogewogICAgIHN3aXRjaCAod2ViR0xMb2FkUG9s
aWN5KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAppbmRl
eCBmMWViY2I1OWNkYzUyYjE1ZDkzZWJmZjliZWRiM2QxMDVmMmNhZDQxLi5jMjlhZjgxN2ZkOGIw
ZWNhYjNhNzc5NmExMjJkYjY0MmNmMDkwZjczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLQ29udGV4dC5jcHAKQEAgLTMzNCwyMSArMzM0LDEzIEBAIHZvaWQgV0tDb250ZXh0
U2V0U2hvdWxkVXNlRm9udFNtb290aGluZyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgYm9vbCB1
c2VGb250U21vCiAKIHZvaWQgV0tDb250ZXh0U2V0QWRkaXRpb25hbFBsdWdpbnNEaXJlY3Rvcnko
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLU3RyaW5nUmVmIHBsdWdpbnNEaXJlY3RvcnkpCiB7
Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgV2ViS2l0Ojp0b0ltcGwoY29u
dGV4dFJlZiktPnNldEFkZGl0aW9uYWxQbHVnaW5zRGlyZWN0b3J5KFdlYktpdDo6dG9JbXBsKHBs
dWdpbnNEaXJlY3RvcnkpLT5zdHJpbmcoKSk7Ci0jZWxzZQogICAgIFVOVVNFRF9QQVJBTShjb250
ZXh0UmVmKTsKICAgICBVTlVTRURfUEFSQU0ocGx1Z2luc0RpcmVjdG9yeSk7Ci0jZW5kaWYKIH0K
IAogdm9pZCBXS0NvbnRleHRSZWZyZXNoUGx1Z0lucyhXS0NvbnRleHRSZWYgY29udGV4dCkKIHsK
LSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250
ZXh0KS0+cmVmcmVzaFBsdWdpbnMoKTsKLSNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQp
OwotI2VuZGlmCiB9CiAKIHZvaWQgV0tDb250ZXh0UmVnaXN0ZXJVUkxTY2hlbWVBc0VtcHR5RG9j
dW1lbnQoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLU3RyaW5nUmVmIHVybFNjaGVtZSkKQEAg
LTU2MSwyNiArNTUzLDEwIEBAIHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMo
V0tDb250ZXh0UmVmIGNvbnRleHQpCiAKIHZvaWQgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2lu
KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBkb21haW5SZWYsIFdLU3RyaW5n
UmVmIG5hbWVSZWYsIFdLQXJyYXlSZWYgbWltZVR5cGVzUmVmLCBXS0FycmF5UmVmIGV4dGVuc2lv
bnNSZWYpCiB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgSGFzaFNldDxT
dHJpbmc+IG1pbWVUeXBlczsKLSAgICBIYXNoU2V0PFN0cmluZz4gZXh0ZW5zaW9uczsKLQotICAg
IHNpemVfdCBjb3VudCA9IFdLQXJyYXlHZXRTaXplKG1pbWVUeXBlc1JlZik7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBtaW1lVHlwZXMuYWRkKFdlYktp
dDo6dG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJ
bmRleChtaW1lVHlwZXNSZWYsIGkpKSkpOwotICAgIGNvdW50ID0gV0tBcnJheUdldFNpemUoZXh0
ZW5zaW9uc1JlZik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAg
ICAgICBleHRlbnNpb25zLmFkZChXZWJLaXQ6OnRvV1RGU3RyaW5nKHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoZXh0ZW5zaW9uc1JlZiwgaSkpKSk7Ci0KLSAg
ICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+YWRkU3VwcG9ydGVkUGx1Z2luKFdlYktpdDo6
dG9XVEZTdHJpbmcoZG9tYWluUmVmKSwgV2ViS2l0Ojp0b1dURlN0cmluZyhuYW1lUmVmKSwgV1RG
TW92ZShtaW1lVHlwZXMpLCBXVEZNb3ZlKGV4dGVuc2lvbnMpKTsKLSNlbmRpZgogfQogCiB2b2lk
IFdLQ29udGV4dENsZWFyU3VwcG9ydGVkUGx1Z2lucyhXS0NvbnRleHRSZWYgY29udGV4dFJlZikK
IHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBXZWJLaXQ6OnRvSW1wbChj
b250ZXh0UmVmKS0+Y2xlYXJTdXBwb3J0ZWRQbHVnaW5zKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBX
S0NvbnRleHRDbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZyhXS0NvbnRleHRSZWYg
Y29udGV4dFJlZikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dL
UGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCmluZGV4
IGE4ZGE3ZmQ0ODVhNDc2NDk5NjQ0N2Y2MjgyYTc5ZjIwYTQ4NzkyMWUuLjY3YTc2MDVmZjVlYTlk
ZmU5ZDE5YmVhMWI1NjRlYjJjMWQxZTU3NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tQYWdlLmNwcApAQCAtNjQsNyArNjQsNiBAQAogI2luY2x1ZGUgIk5hdmlnYXRpb25BY3Rp
b25EYXRhLmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuaCIKICNp
bmNsdWRlICJQYWdlQ2xpZW50LmgiCi0jaW5jbHVkZSAiUGx1Z2luSW5mb3JtYXRpb24uaCIKICNp
bmNsdWRlICJQcmludEluZm8uaCIKICNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvblBlcm1pc3Np
b25SZXF1ZXN0LmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCkBAIC0xODAxLDM3ICsxODAwLDYg
QEAgdm9pZCBXS1BhZ2VTZXRQYWdlVUlDbGllbnQoV0tQYWdlUmVmIHBhZ2VSZWYsIGNvbnN0IFdL
UGFnZVVJQ2xpZW50QmFzZSogd2tDbGllbnQKICAgICAgICAgICAgIG1fY2xpZW50Lm1vdXNlRGlk
TW92ZU92ZXJFbGVtZW50KHRvQVBJKCZwYWdlKSwgdG9BUEkoYXBpSGl0VGVzdFJlc3VsdC5wdHIo
KSksIHRvQVBJKG1vZGlmaWVycyksIHRvQVBJKHVzZXJEYXRhKSwgbV9jbGllbnQuYmFzZS5jbGll
bnRJbmZvKTsKICAgICAgICAgfQogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0g
ICAgICAgIHZvaWQgdW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkKFdlYlBhZ2VQcm94eSYg
cGFnZSwgV0tQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiBwbHVnaW5VbmF2YWlsYWJpbGl0eVJl
YXNvbiwgQVBJOjpEaWN0aW9uYXJ5JiBwbHVnaW5JbmZvcm1hdGlvbikgZmluYWwKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uID09IGtXS1BsdWdp
blVuYXZhaWxhYmlsaXR5UmVhc29uUGx1Z2luTWlzc2luZykgewotICAgICAgICAgICAgICAgIGlm
IChtX2NsaWVudC5taXNzaW5nUGx1Z2luQnV0dG9uQ2xpY2tlZF9kZXByZWNhdGVkRm9yVXNlV2l0
aFYwKQotICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC5taXNzaW5nUGx1Z2luQnV0dG9uQ2xp
Y2tlZF9kZXByZWNhdGVkRm9yVXNlV2l0aFYwKAotICAgICAgICAgICAgICAgICAgICAgICAgdG9B
UEkoJnBhZ2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgdG9BUEkocGx1Z2luSW5mb3JtYXRp
b24uZ2V0PEFQSTo6U3RyaW5nPihwbHVnaW5JbmZvcm1hdGlvbk1JTUVUeXBlS2V5KCkpKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRvQVBJKHBsdWdpbkluZm9ybWF0aW9uLmdldDxBUEk6OlN0
cmluZz4ocGx1Z2luSW5mb3JtYXRpb25QbHVnaW5VUkxLZXkoKSkpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgdG9BUEkocGx1Z2luSW5mb3JtYXRpb24uZ2V0PEFQSTo6U3RyaW5nPihwbHVnaW5J
bmZvcm1hdGlvblBsdWdpbnNwYWdlQXR0cmlidXRlVVJMS2V5KCkpKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmIChtX2NsaWVudC51bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWRfZGVw
cmVjYXRlZEZvclVzZVdpdGhWMSkKLSAgICAgICAgICAgICAgICBtX2NsaWVudC51bmF2YWlsYWJs
ZVBsdWdpbkJ1dHRvbkNsaWNrZWRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMSgKLSAgICAgICAgICAg
ICAgICAgICAgdG9BUEkoJnBhZ2UpLAotICAgICAgICAgICAgICAgICAgICBwbHVnaW5VbmF2YWls
YWJpbGl0eVJlYXNvbiwKLSAgICAgICAgICAgICAgICAgICAgdG9BUEkocGx1Z2luSW5mb3JtYXRp
b24uZ2V0PEFQSTo6U3RyaW5nPihwbHVnaW5JbmZvcm1hdGlvbk1JTUVUeXBlS2V5KCkpKSwKLSAg
ICAgICAgICAgICAgICAgICAgdG9BUEkocGx1Z2luSW5mb3JtYXRpb24uZ2V0PEFQSTo6U3RyaW5n
PihwbHVnaW5JbmZvcm1hdGlvblBsdWdpblVSTEtleSgpKSksCi0gICAgICAgICAgICAgICAgICAg
IHRvQVBJKHBsdWdpbkluZm9ybWF0aW9uLmdldDxBUEk6OlN0cmluZz4ocGx1Z2luSW5mb3JtYXRp
b25QbHVnaW5zcGFnZUF0dHJpYnV0ZVVSTEtleSgpKSksCi0gICAgICAgICAgICAgICAgICAgIG1f
Y2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Ci0KLSAgICAgICAgICAgIGlmIChtX2NsaWVudC51bmF2
YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQpCi0gICAgICAgICAgICAgICAgbV9jbGllbnQudW5h
dmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkKAotICAgICAgICAgICAgICAgICAgICB0b0FQSSgm
cGFnZSksCi0gICAgICAgICAgICAgICAgICAgIHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uLAot
ICAgICAgICAgICAgICAgICAgICB0b0FQSSgmcGx1Z2luSW5mb3JtYXRpb24pLAotICAgICAgICAg
ICAgICAgICAgICBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotICAgICAgICB9Ci0jZW5kaWYg
Ly8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KICAgICAgICAgdm9pZCBkaWROb3RIYW5k
bGVLZXlFdmVudChXZWJQYWdlUHJveHkqIHBhZ2UsIGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZl
bnQmIGV2ZW50KSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmRp
ZE5vdEhhbmRsZUtleUV2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1ByZWZlcmVuY2VzLmNwcAppbmRleCBiZWQ4MzE2ZjM3NThmOTMzMzAxNGMyZmJlMmYyZDI1YzE4
OTU5YmNhLi4yMTkwNTA5OWY2NWQzNjk5M2MxYWNmMTY4ZWViODRkZDk1N2UzYjljIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcApAQCAtMjUs
NyArMjUsNiBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpbmNsdWRlICJQbHVnaW5Qcm9j
ZXNzTWFuYWdlci5oIgogI2luY2x1ZGUgIldLUHJlZmVyZW5jZXNSZWYuaCIKICNpbmNsdWRlICJX
S1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgpAQCAtMTA2
Nyw5ICsxMDY2LDYgQEAgYm9vbCBXS1ByZWZlcmVuY2VzR2V0UGx1Z0luU25hcHNob3R0aW5nRW5h
YmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogCiB2b2lkIFdLUHJlZmVyZW5j
ZXNTZXRQbHVnaW5TYW5kYm94UHJvZmlsZXNFbmFibGVkRm9yQWxsUGx1Z2lucyhXS1ByZWZlcmVu
Y2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCiB7Ci0jaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpICYmIFBMQVRGT1JNKE1BQykKLSAgICBXZWJLaXQ6OlBsdWdpblByb2Nl
c3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5zZXRFeHBlcmltZW50YWxQbHVnSW5TYW5kYm94UHJvZmls
ZXNFbmFibGVkKGVuYWJsZWQpOwotI2VuZGlmCiAgICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+
c2V0RXhwZXJpbWVudGFsUGx1Z0luU2FuZGJveFByb2ZpbGVzRW5hYmxlZChlbmFibGVkKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvbWFjL1dLQ29udGV4
dFByaXZhdGVNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9tYWMvV0tDb250
ZXh0UHJpdmF0ZU1hYy5tbQppbmRleCAyM2I3MjgyYzVlN2QyNzZiMzk5ZjM4Y2M2Nzk4NTUwY2Y3
OTM2MjMzLi40YjBkMTU1YmE5ZjkyMzg4NjkxZGUyYjgxMzQzOThiZDgyY2JlOGI5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9tYWMvV0tDb250ZXh0UHJpdmF0ZU1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9tYWMvV0tDb250ZXh0UHJp
dmF0ZU1hYy5tbQpAQCAtMzAsOCArMzAsNiBAQAogI2ltcG9ydCAiQVBJRGljdGlvbmFyeS5oIgog
I2ltcG9ydCAiQVBJTnVtYmVyLmgiCiAjaW1wb3J0ICJBUElTdHJpbmcuaCIKLSNpbXBvcnQgIlBs
dWdpbkluZm9TdG9yZS5oIgotI2ltcG9ydCAiUGx1Z2luSW5mb3JtYXRpb24uaCIKICNpbXBvcnQg
IlN0cmluZ1V0aWxpdGllcy5oIgogI2ltcG9ydCAiV0tBUElDYXN0LmgiCiAjaW1wb3J0ICJXS1Bs
dWdpbkluZm9ybWF0aW9uLmgiCkBAIC01OCwzOCArNTYsMTEgQEAgdm9pZCBXS0NvbnRleHRDbGVh
clBsdWdpbkNsaWVudFBvbGljaWVzKFdLQ29udGV4dFJlZikKIAogV0tEaWN0aW9uYXJ5UmVmIFdL
Q29udGV4dENvcHlQbHVnSW5JbmZvRm9yQnVuZGxlSWRlbnRpZmllcihXS0NvbnRleHRSZWYgY29u
dGV4dFJlZiwgV0tTdHJpbmdSZWYgcGx1Z0luQnVuZGxlSWRlbnRpZmllclJlZikKIHsKLSNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBXZWJLaXQ6OlBsdWdpbk1vZHVsZUluZm8g
cGx1Z2luID0gV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnBsdWdpbkluZm9TdG9yZSgpLmZp
bmRQbHVnaW5XaXRoQnVuZGxlSWRlbnRpZmllcihXZWJLaXQ6OnRvV1RGU3RyaW5nKHBsdWdJbkJ1
bmRsZUlkZW50aWZpZXJSZWYpKTsKLSAgICBpZiAocGx1Z2luLnBhdGguaXNOdWxsKCkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgYXV0byBkaWN0aW9uYXJ5ID0gY3JlYXRlUGx1Z2luSW5mb3Jt
YXRpb25EaWN0aW9uYXJ5KHBsdWdpbik7Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJmRpY3Rp
b25hcnkubGVha1JlZigpKTsKLSNlbHNlCiAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKIH0KIAogdm9p
ZCBXS0NvbnRleHRHZXRJbmZvRm9ySW5zdGFsbGVkUGx1Z0lucyhXS0NvbnRleHRSZWYgY29udGV4
dFJlZiwgV0tDb250ZXh0R2V0SW5mb0Zvckluc3RhbGxlZFBsdWdJbnNCbG9jayBibG9jaykKIHsK
LSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBWZWN0b3I8V2ViS2l0OjpQbHVn
aW5Nb2R1bGVJbmZvPiBwbHVnaW5zID0gV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnBsdWdp
bkluZm9TdG9yZSgpLnBsdWdpbnMoKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8QVBJOjpPYmplY3Q+
PiBwbHVnaW5JbmZvRGljdGlvbmFyaWVzOwotICAgIHBsdWdpbkluZm9EaWN0aW9uYXJpZXMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShwbHVnaW5zLnNpemUoKSk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1
dG8mIHBsdWdpbjogcGx1Z2lucykKLSAgICAgICAgcGx1Z2luSW5mb0RpY3Rpb25hcmllcy51bmNo
ZWNrZWRBcHBlbmQoY3JlYXRlUGx1Z2luSW5mb3JtYXRpb25EaWN0aW9uYXJ5KHBsdWdpbikpOwot
Ci0gICAgUmVmUHRyPEFQSTo6QXJyYXk+IGFycmF5ID0gQVBJOjpBcnJheTo6Y3JlYXRlKFdURk1v
dmUocGx1Z2luSW5mb0RpY3Rpb25hcmllcykpOwotCi0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4
dFJlZiktPnJlZigpOwotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbYmxvY2sgPSBtYWtl
QmxvY2tQdHIoYmxvY2spLCBhcnJheSA9IFdURk1vdmUoYXJyYXkpLCBjb250ZXh0UmVmXSB7Ci0g
ICAgICAgIGJsb2NrKFdlYktpdDo6dG9BUEkoYXJyYXkuZ2V0KCkpLCAwKTsKLSAgICAKLSAgICAg
ICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPmRlcmVmKCk7Ci0gICAgfSk7Ci0jZW5kaWYK
IH0KIAogdm9pZCBXS0NvbnRleHRSZXNldEhTVFNIb3N0cyhXS0NvbnRleHRSZWYpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1tCmluZGV4
IGQ2NWVhZGJjMjcxYTM1ZDViNTNiZmM2YmYxNThjNjcxMmRhMDhkNTMuLjliY2Y3ZWRhZjA2YzE4
YjZkN2Q5ZWZlNTcwN2MwYjlmNWY0NGU1Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1tCkBAIC0yOCw3ICsyOCw2IEBACiAKICNp
bXBvcnQgIkFQSUFycmF5LmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJQbHVnaW5Q
cm9jZXNzTWFuYWdlci5oIgogI2ltcG9ydCAiV0tOU0FycmF5LmgiCiAjaW1wb3J0ICJXZWJQcmVm
ZXJlbmNlcy5oIgogI2ltcG9ydCAiX1dLRXhwZXJpbWVudGFsRmVhdHVyZUludGVybmFsLmgiCkBA
IC0xMTA3LDkgKzExMDYsNiBAQCBzdGF0aWMgV2ViQ29yZTo6RWRpdGFibGVMaW5rQmVoYXZpb3Ig
dG9FZGl0YWJsZUxpbmtCZWhhdmlvcihfV0tFZGl0YWJsZUxpbmtCZWhhdgogCiAtICh2b2lkKV9z
ZXRFeHBlcmltZW50YWxQbHVnSW5TYW5kYm94UHJvZmlsZXNFbmFibGVkOihCT09MKWVuYWJsZWQK
IHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBXZWJLaXQ6OlBsdWdpblBy
b2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5zZXRFeHBlcmltZW50YWxQbHVnSW5TYW5kYm94UHJv
ZmlsZXNFbmFibGVkKGVuYWJsZWQpOwotI2VuZGlmCiAgICAgX3ByZWZlcmVuY2VzLT5zZXRFeHBl
cmltZW50YWxQbHVnSW5TYW5kYm94UHJvZmlsZXNFbmFibGVkKGVuYWJsZWQpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCmlu
ZGV4IDk2YjcxMWJhZDI1ODAwYTlmYmJkM2Q1ZDA5NTNkZmIyZTQ2Y2ZjYTEuLjcxMzdiZDZiNGZm
YmVlMzM2ZTMyNWYwYjJiOGU3NGI2Y2RhNDI1NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCkBAIC0zMSw3ICszMSw2IEBACiAj
aW1wb3J0ICJEb3dubG9hZE1hbmFnZXIuaCIKICNpbXBvcnQgIkxlZ2FjeURvd25sb2FkQ2xpZW50
LmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJQbHVnaW5Qcm9jZXNzTWFuYWdlci5o
IgogI2ltcG9ydCAiU2FuZGJveFV0aWxpdGllcy5oIgogI2ltcG9ydCAiVUlHYW1lcGFkUHJvdmlk
ZXIuaCIKICNpbXBvcnQgIldLRG93bmxvYWRJbnRlcm5hbC5oIgpAQCAtNDU2LDExICs0NTUsNyBA
QCBzdGF0aWMgUmV0YWluUHRyPFdLUHJvY2Vzc1Bvb2w+JiBzaGFyZWRQcm9jZXNzUG9vbCgpCiAK
IC0gKHNpemVfdClfcGx1Z2luUHJvY2Vzc0NvdW50CiB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCi0gICAgcmV0dXJuIFdlYktpdDo6UGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmds
ZXRvbigpLnBsdWdpblByb2Nlc3NlcygpLnNpemUoKTsKLSNlbHNlCiAgICAgcmV0dXJuIDA7Ci0j
ZW5kaWYKIH0KIAogLSAoTlNVSW50ZWdlcilfbWF4aW11bVN1c3BlbmRlZFBhZ2VDb3VudApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFS
ZWNvcmRJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
c2l0ZURhdGFSZWNvcmRJbnRlcm5hbC5oCmluZGV4IGUxNzgyNmJmYmRmMDliYjg4NWRmMTkzOGRj
OTVkMDA1YWVhODJiYzguLmRiYzVmM2Y3YTFmZjRmYjc0OWFhZmQ3MGU1NzBiYTA0ODU2OGFjZDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVE
YXRhUmVjb3JkSW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJzaXRlRGF0YVJlY29yZEludGVybmFsLmgKQEAgLTY1LDEwICs2NSw2IEBAIHN0YXRp
YyBpbmxpbmUgc3RkOjpvcHRpb25hbDxXZWJzaXRlRGF0YVR5cGU+IHRvV2Vic2l0ZURhdGFUeXBl
KE5TU3RyaW5nICp3ZWJzaXRlCiAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YVR5cGU6Ok1lZGlh
S2V5czsKICAgICBpZiAoW3dlYnNpdGVEYXRhVHlwZSBpc0VxdWFsVG9TdHJpbmc6X1dLV2Vic2l0
ZURhdGFUeXBlU2VhcmNoRmllbGRSZWNlbnRTZWFyY2hlc10pCiAgICAgICAgIHJldHVybiBXZWJz
aXRlRGF0YVR5cGU6OlNlYXJjaEZpZWxkUmVjZW50U2VhcmNoZXM7Ci0jaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCi0gICAgaWYgKFt3ZWJzaXRlRGF0YVR5cGUgaXNFcXVhbFRvU3RyaW5n
Ol9XS1dlYnNpdGVEYXRhVHlwZVBsdWdJbkRhdGFdKQotICAgICAgICByZXR1cm4gV2Vic2l0ZURh
dGFUeXBlOjpQbHVnSW5EYXRhOwotI2VuZGlmCiAgICAgaWYgKFt3ZWJzaXRlRGF0YVR5cGUgaXNF
cXVhbFRvU3RyaW5nOl9XS1dlYnNpdGVEYXRhVHlwZVJlc291cmNlTG9hZFN0YXRpc3RpY3NdKQog
ICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFUeXBlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwog
ICAgIGlmIChbd2Vic2l0ZURhdGFUeXBlIGlzRXF1YWxUb1N0cmluZzpfV0tXZWJzaXRlRGF0YVR5
cGVDcmVkZW50aWFsc10pCkBAIC0xMjgsMTAgKzEyNCw2IEBAIHN0YXRpYyBpbmxpbmUgUmV0YWlu
UHRyPE5TU2V0PiB0b1dLV2Vic2l0ZURhdGFUeXBlcyhPcHRpb25TZXQ8V2ViS2l0OjpXZWJzaXRl
RGF0CiAgICAgICAgIFt3a1dlYnNpdGVEYXRhVHlwZXMgYWRkT2JqZWN0Ol9XS1dlYnNpdGVEYXRh
VHlwZU1lZGlhS2V5c107CiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0
ZURhdGFUeXBlOjpTZWFyY2hGaWVsZFJlY2VudFNlYXJjaGVzKSkKICAgICAgICAgW3drV2Vic2l0
ZURhdGFUeXBlcyBhZGRPYmplY3Q6X1dLV2Vic2l0ZURhdGFUeXBlU2VhcmNoRmllbGRSZWNlbnRT
ZWFyY2hlc107Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgaWYgKHdlYnNp
dGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpQbHVnSW5EYXRhKSkKLSAgICAg
ICAgW3drV2Vic2l0ZURhdGFUeXBlcyBhZGRPYmplY3Q6X1dLV2Vic2l0ZURhdGFUeXBlUGx1Z0lu
RGF0YV07Ci0jZW5kaWYKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRl
RGF0YVR5cGU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MpKQogICAgICAgICBbd2tXZWJzaXRlRGF0
YVR5cGVzIGFkZE9iamVjdDpfV0tXZWJzaXRlRGF0YVR5cGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
XTsKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkNy
ZWRlbnRpYWxzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFy
eVByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9j
ZXNzUHJveHkuY3BwCmluZGV4IDg1YTgyY2JiNmYzYmQ4MjkzZGM2YzU5YTY2YjFkZTg5ODk0ZDli
M2EuLmU1YTZjMzdjYTNmZWQ0NGEzYjEyNWEwZWM3Y2I5MTJmNmU4YzIxNmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmNwcApAQCAtNzUs
MTEgKzc1LDYgQEAgdm9pZCBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMo
UHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXUKICAgICBjYXNlIFByb2Nlc3NMYXVu
Y2hlcjo6UHJvY2Vzc1R5cGU6OldlYjoKICAgICAgICAgdmFybmFtZSA9ICJXRUJfUFJPQ0VTU19D
TURfUFJFRklYIjsKICAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi0gICAgY2FzZSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpQbHVnaW46Ci0gICAg
ICAgIHZhcm5hbWUgPSAiUExVR0lOX1BST0NFU1NfQ01EX1BSRUZJWCI7Ci0gICAgICAgIGJyZWFr
OwotI2VuZGlmCiAgICAgY2FzZSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpOZXR3b3Jr
OgogICAgICAgICB2YXJuYW1lID0gIk5FVFdPUktfUFJPQ0VTU19DTURfUFJFRklYIjsKICAgICAg
ICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURl
bGVnYXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLmgKaW5k
ZXggOWZkZWIyM2RjMjdkZjA0NzRkYzljM2YzNmVmMjZhMzViNzNlNzVmMC4uNWNiY2E3N2ExMDBm
NDA4YmE1NjU0NWJlOWIwOTlmYmU4ODg0NzZkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1VJRGVsZWdhdGUuaApAQCAtMTIzLDkgKzEyMyw2IEBAIHByaXZhdGU6CiAgICAgICAg
IHZvaWQgZHJhd0Zvb3RlcihXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5JiwgV2ViQ29yZTo6
RmxvYXRSZWN0JiYpIGZpbmFsOwogCiAgICAgICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yTm90aWZp
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3QoV2ViUGFnZVByb3h5JiwgQVBJOjpTZWN1cml0eU9yaWdp
biYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBhbGxvd2VkKT4mJikgZmluYWw7Ci0jaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIHZvaWQgdW5hdmFpbGFibGVQbHVn
aW5CdXR0b25DbGlja2VkKFdlYlBhZ2VQcm94eSYsIFdLUGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFz
b24sIEFQSTo6RGljdGlvbmFyeSYpIGZpbmFsOwotI2VuZGlmCiAgICAgICAgIHZvaWQgbW91c2VE
aWRNb3ZlT3ZlckVsZW1lbnQoV2ViUGFnZVByb3h5JiwgY29uc3QgV2ViSGl0VGVzdFJlc3VsdERh
dGEmLCBPcHRpb25TZXQ8V2ViRXZlbnQ6Ok1vZGlmaWVyPiwgQVBJOjpPYmplY3QqKTsKICAgICAg
ICAgdm9pZCBkaWRDbGlja0F1dG9GaWxsQnV0dG9uKFdlYlBhZ2VQcm94eSYsIEFQSTo6T2JqZWN0
KikgZmluYWw7CiAgICAgICAgIHZvaWQgdG9vbGJhcnNBcmVWaXNpYmxlKFdlYlBhZ2VQcm94eSYs
IEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1VJRGVsZWdhdGUubW0KaW5kZXggMDlhMzk0MGMyOWM3YjFkNmE0Mjc4NmY4NDhmZTc3
OGJkYTg2ZjllNC4uYTAwNGExNWRiOTcxMTkyN2UyNTg3YzYxYjE3YTdjMTkzY2IwZThlMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tCkBAIC03NDgsMzcg
Kzc0OCw2IEBAIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnVuZm9jdXMoV2ViUGFnZVByb3h5
KikKICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfdW5mb2N1c1dlYlZp
ZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwogfQogCi0jaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCi1zdGF0aWMgX1dLUGx1Z0luVW5hdmFpbGFiaWxpdHlSZWFz
b24gdG9XS1BsdWdJblVuYXZhaWxhYmlsaXR5UmVhc29uKFdLUGx1Z2luVW5hdmFpbGFiaWxpdHlS
ZWFzb24gcmVhc29uKQotewotICAgIHN3aXRjaCAocmVhc29uKSB7Ci0gICAgY2FzZSBrV0tQbHVn
aW5VbmF2YWlsYWJpbGl0eVJlYXNvblBsdWdpbk1pc3Npbmc6Ci0gICAgICAgIHJldHVybiBfV0tQ
bHVnSW5VbmF2YWlsYWJpbGl0eVJlYXNvblBsdWdpbk1pc3Npbmc7Ci0gICAgY2FzZSBrV0tQbHVn
aW5VbmF2YWlsYWJpbGl0eVJlYXNvblBsdWdpbkNyYXNoZWQ6Ci0gICAgICAgIHJldHVybiBfV0tQ
bHVnSW5VbmF2YWlsYWJpbGl0eVJlYXNvblBsdWdpbkNyYXNoZWQ7Ci0gICAgY2FzZSBrV0tQbHVn
aW5VbmF2YWlsYWJpbGl0eVJlYXNvbkluc2VjdXJlUGx1Z2luVmVyc2lvbjoKLSAgICAgICAgcmV0
dXJuIF9XS1BsdWdJblVuYXZhaWxhYmlsaXR5UmVhc29uSW5zZWN1cmVQbHVnaW5WZXJzaW9uOwot
ICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gX1dLUGx1Z0luVW5h
dmFpbGFiaWxpdHlSZWFzb25QbHVnaW5NaXNzaW5nOwotfQotICAgIAotdm9pZCBVSURlbGVnYXRl
OjpVSUNsaWVudDo6dW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkKFdlYlBhZ2VQcm94eSYs
IFdLUGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24gcmVhc29uLCBBUEk6OkRpY3Rpb25hcnkmIHBs
dWdJbkluZm8pCi17Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3VW5hdmFpbGFi
bGVQbHVnSW5CdXR0b25DbGlja2VkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYXV0byBk
ZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKLSAgICBpZiAoIWRlbGVn
YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilk
ZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSB1bmF2
YWlsYWJsZVBsdWdJbkJ1dHRvbkNsaWNrZWRXaXRoUmVhc29uOnRvV0tQbHVnSW5VbmF2YWlsYWJp
bGl0eVJlYXNvbihyZWFzb24pIHBsdWdJbkluZm86d3JhcHBlcihwbHVnSW5JbmZvKV07Ci19Ci0j
ZW5kaWYKLSAgICAKIHN0YXRpYyBfV0tSZXNvdXJjZUxpbWl0IHRvV0tSZXNvdXJjZUxpbWl0KFdL
UmVzb3VyY2VMaW1pdCBsaW1pdCkKIHsKICAgICBzd2l0Y2ggKGxpbWl0KSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQppbmRl
eCBiMTIxNWZjOWIyMjQyNGJkODUyZTNjY2E2Y2YxZmJmNjEyMWJlNjc4Li4xMWYwNTNmMWI1Mzdl
YTY0ZmMyNDFlNjBhM2RlOTcwNjE5YzAxZDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KQEAgLTM1LDcgKzM1LDYgQEAK
ICNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW1wb3J0ICJO
ZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW1wb3J0ICJOZXR3b3JrUHJvY2Vzc1Byb3h5Lmgi
Ci0jaW1wb3J0ICJQbHVnaW5Qcm9jZXNzTWFuYWdlci5oIgogI2ltcG9ydCAiUHJlZmVyZW5jZU9i
c2VydmVyLmgiCiAjaW1wb3J0ICJTYW5kYm94VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXh0Q2hl
Y2tlci5oIgpAQCAtMTg5LDEzICsxODgsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQ
cm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpCiAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vz
cyA9IGRhdGFTdG9yZS5uZXR3b3JrUHJvY2Vzc0lmRXhpc3RzKCkpCiAgICAgICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+c2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChlbmFibGVkKTsKICAgICB9
KTsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGlmICghbV9wcm9jZXNz
U3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCkpCi0gICAgICAgIG1fcGx1
Z2luUHJvY2Vzc01hbmFnZXJQcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZFRva2VuID0gbnVsbHB0
cjsKLSAgICBlbHNlIGlmICghbV9wbHVnaW5Qcm9jZXNzTWFuYWdlclByb2Nlc3NTdXBwcmVzc2lv
bkRpc2FibGVkVG9rZW4pCi0gICAgICAgIG1fcGx1Z2luUHJvY2Vzc01hbmFnZXJQcm9jZXNzU3Vw
cHJlc3Npb25EaXNhYmxlZFRva2VuID0gUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigp
LnByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkVG9rZW4oKTsKLSNlbmRpZgogfQogCiBOU011dGFi
bGVEaWN0aW9uYXJ5ICpXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlQnVuZGxlUGFyYW1ldGVycygpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAppbmRleCAxYzU3NDQ1
OGVmMzA4YzFhMDU1NDFiZDZhZGQyYmRhNTA0MDBkMjYwLi5iNzdkNGMwN2NiMDczMjAwOTc0YmQz
MGEzNGM3N2Y4MGUyODkzZGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dl
YlZpZXdJbXBsLmgKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBQTEFURk9STShNQUMpCiAKICNpbmNs
dWRlICJQREZQbHVnaW5JZGVudGlmaWVyLmgiCi0jaW5jbHVkZSAiUGx1Z2luQ29tcGxleFRleHRJ
bnB1dFN0YXRlLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiV0tM
YXlvdXRNb2RlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9ET01QYXN0ZUFjY2Vzcy5oPgpAQCAtMzQx
LDEzICszNDAsMTEgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXRTZWN1cmVJbnB1dFN0YXRlKCk7
CiAgICAgYm9vbCBpblNlY3VyZUlucHV0U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2luU2VjdXJl
SW5wdXRTdGF0ZTsgfQogICAgIHZvaWQgbm90aWZ5SW5wdXRDb250ZXh0QWJvdXREaXNjYXJkZWRD
b21wb3NpdGlvbigpOwotICAgIHZvaWQgc2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlQW5k
SWRlbnRpZmllcihQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUsIHVpbnQ2NF90IGlkZW50aWZp
ZXIpOwogICAgIHZvaWQgZGlzYWJsZUNvbXBsZXhUZXh0SW5wdXRJZk5lY2Vzc2FyeSgpOwogICAg
IGJvb2wgaGFuZGxlUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd24oTlNFdmVudCAqKTsKICAg
ICBib29sIHRyeUhhbmRsZVBsdWdpbkNvbXBsZXhUZXh0SW5wdXRLZXlEb3duKE5TRXZlbnQgKik7
CiAgICAgdm9pZCBwbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wgcGx1Z2luSGFz
Rm9jdXNBbmRXaW5kb3dIYXNGb2N1cywgdWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElk
ZW50aWZpZXIpOwogICAgIGJvb2wgdHJ5UG9zdFByb2Nlc3NQbHVnaW5Db21wbGV4VGV4dElucHV0
S2V5RG93bihOU0V2ZW50ICopOwotICAgIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSBwbHVn
aW5Db21wbGV4VGV4dElucHV0U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbkNvbXBsZXhU
ZXh0SW5wdXRTdGF0ZTsgfQogICAgIHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVu
dGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmll
cjsgfQogICAgIAogICAgIHZvaWQgaGFuZGxlQWNjZXB0ZWRBbHRlcm5hdGl2ZVRleHQoY29uc3Qg
U3RyaW5nJik7CkBAIC03MTcsOCArNzE0LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcG9zdEZh
a2VNb3VzZU1vdmVkRXZlbnRGb3JGbGFnc0NoYW5nZWRFdmVudChOU0V2ZW50ICopOwogCi0gICAg
dm9pZCBzZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUoUGx1Z2luQ29tcGxleFRleHRJbnB1
dFN0YXRlKTsKLQogICAgIHZvaWQgc2VuZFRvb2xUaXBNb3VzZUV4aXRlZCgpOwogICAgIHZvaWQg
c2VuZFRvb2xUaXBNb3VzZUVudGVyZWQoKTsKIApAQCAtNzkzLDkgKzc4OCw2IEBAIHByaXZhdGU6
CiAgICAgLy8gVGhlIGlkZW50aWZpZXIgb2YgdGhlIHBsdWctaW4gd2Ugd2FudCB0byBzZW5kIGNv
bXBsZXggdGV4dCBpbnB1dCB0bywgb3IgMCBpZiB0aGVyZSBpcyBub25lLgogICAgIHVpbnQ2NF90
IG1fcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIgeyAwIH07CiAKLSAgICAvLyBUaGUg
c3RhdGUgb2YgY29tcGxleCB0ZXh0IGlucHV0IGZvciB0aGUgcGx1Zy1pbi4KLSAgICBQbHVnaW5D
b21wbGV4VGV4dElucHV0U3RhdGUgbV9wbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUgeyBQbHVn
aW5Db21wbGV4VGV4dElucHV0RGlzYWJsZWQgfTsKLQogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKICAgICBSZXRhaW5QdHI8V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcj4gbV9mdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlcjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9XZWJWaWV3SW1wbC5tbQppbmRleCBiYmQyNTk5ZDllYWYzNTQzMTJlY2ExY2ZiYTEzNjJj
MTM4MzY5YTg1Li4wOWFkMzk4YmNhYjZkNDJmNDA4YTdmYjhmNDg2MjhmMmMxMGI0MWI1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQpAQCAtMjc1Myw3
MyArMjc1MywxNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpub3RpZnlJbnB1dENvbnRleHRBYm91dERp
c2NhcmRlZENvbXBvc2l0aW9uKCkKICAgICBbW21fdmlldyBfd2ViX3N1cGVySW5wdXRDb250ZXh0
XSBkaXNjYXJkTWFya2VkVGV4dF07IC8vIEluZm9ybSB0aGUgaW5wdXQgbWV0aG9kIHRoYXQgd2Ug
d29uJ3QgaGF2ZSBhbiBpbmxpbmUgaW5wdXQgYXJlYSBkZXNwaXRlIGhhdmluZyBiZWVuIGFza2Vk
IHRvLgogfQogCi12b2lkIFdlYlZpZXdJbXBsOjpzZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3Rh
dGUoUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlIHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0
ZSkKLXsKLSAgICBtX3BsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSA9IHBsdWdpbkNvbXBsZXhU
ZXh0SW5wdXRTdGF0ZTsKLQotICAgIGlmIChtX3BsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSAh
PSBQbHVnaW5Db21wbGV4VGV4dElucHV0RGlzYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIFNlbmQgYmFjayBhbiBlbXB0eSBzdHJpbmcgdG8gdGhlIHBsdWctaW4uIFRoaXMgd2lsbCBk
aXNhYmxlIHRleHQgaW5wdXQuCi0gICAgbV9wYWdlLT5zZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1
Z2luKG1fcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIFN0cmluZygpKTsKLX0KLQot
dm9pZCBXZWJWaWV3SW1wbDo6c2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlQW5kSWRlbnRp
ZmllcihQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUgcGx1Z2luQ29tcGxleFRleHRJbnB1dFN0
YXRlLCB1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcikKLXsKLSAgICBp
ZiAocGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIgIT0gbV9wbHVnaW5Db21wbGV4VGV4
dElucHV0SWRlbnRpZmllcikgewotICAgICAgICAvLyBXZSdyZSBhc2tlZCB0byB1cGRhdGUgdGhl
IHN0YXRlIGZvciBhIHBsdWctaW4gdGhhdCBkb2Vzbid0IGhhdmUgZm9jdXMuCi0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUocGx1Z2lu
Q29tcGxleFRleHRJbnB1dFN0YXRlKTsKLX0KLQogdm9pZCBXZWJWaWV3SW1wbDo6ZGlzYWJsZUNv
bXBsZXhUZXh0SW5wdXRJZk5lY2Vzc2FyeSgpCiB7Ci0gICAgaWYgKCFtX3BsdWdpbkNvbXBsZXhU
ZXh0SW5wdXRJZGVudGlmaWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wbHVnaW5D
b21wbGV4VGV4dElucHV0U3RhdGUgIT0gUGx1Z2luQ29tcGxleFRleHRJbnB1dEVuYWJsZWQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIENoZWNrIGlmIHRoZSB0ZXh0IGlucHV0IHdpbmRvdyBo
YXMgYmVlbiBkaXNtaXNzZWQuCi0gICAgaWYgKCFbW1dLVGV4dElucHV0V2luZG93Q29udHJvbGxl
ciBzaGFyZWRUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyXSBoYXNNYXJrZWRUZXh0XSkKLSAgICAg
ICAgc2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRE
aXNhYmxlZCk7CiB9CiAKLWJvb2wgV2ViVmlld0ltcGw6OmhhbmRsZVBsdWdpbkNvbXBsZXhUZXh0
SW5wdXRLZXlEb3duKE5TRXZlbnQgKmV2ZW50KQorYm9vbCBXZWJWaWV3SW1wbDo6aGFuZGxlUGx1
Z2luQ29tcGxleFRleHRJbnB1dEtleURvd24oTlNFdmVudCAqKQogewotICAgIEFTU0VSVChtX3Bs
dWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyKTsKLSAgICBBU1NFUlQobV9wbHVnaW5Db21w
bGV4VGV4dElucHV0U3RhdGUgIT0gUGx1Z2luQ29tcGxleFRleHRJbnB1dERpc2FibGVkKTsKLQot
ICAgIEJPT0wgdXNpbmdMZWdhY3lDb2NvYVRleHRJbnB1dCA9IG1fcGx1Z2luQ29tcGxleFRleHRJ
bnB1dFN0YXRlID09IFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRFbmFibGVkTGVnYWN5OwotCi0gICAg
TlNTdHJpbmcgKnN0cmluZyA9IG5pbDsKLSAgICBCT09MIGRpZEhhbmRsZUV2ZW50ID0gW1tXS1Rl
eHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIgc2hhcmVkVGV4dElucHV0V2luZG93Q29udHJvbGxlcl0g
aW50ZXJwcmV0S2V5RXZlbnQ6ZXZlbnQgdXNpbmdMZWdhY3lDb2NvYVRleHRJbnB1dDp1c2luZ0xl
Z2FjeUNvY29hVGV4dElucHV0IHN0cmluZzomc3RyaW5nXTsKLQotICAgIGlmIChzdHJpbmcpIHsK
LSAgICAgICAgbV9wYWdlLT5zZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1Z2luKG1fcGx1Z2luQ29t
cGxleFRleHRJbnB1dElkZW50aWZpZXIsIHN0cmluZyk7Ci0KLSAgICAgICAgaWYgKCF1c2luZ0xl
Z2FjeUNvY29hVGV4dElucHV0KQotICAgICAgICAgICAgbV9wbHVnaW5Db21wbGV4VGV4dElucHV0
U3RhdGUgPSBQbHVnaW5Db21wbGV4VGV4dElucHV0RGlzYWJsZWQ7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGRpZEhhbmRsZUV2ZW50OworICAgIHJldHVybiBOTzsKIH0KIAotYm9vbCBXZWJWaWV3SW1w
bDo6dHJ5SGFuZGxlUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd24oTlNFdmVudCAqZXZlbnQp
Citib29sIFdlYlZpZXdJbXBsOjp0cnlIYW5kbGVQbHVnaW5Db21wbGV4VGV4dElucHV0S2V5RG93
bihOU0V2ZW50ICopCiB7Ci0gICAgaWYgKCFtX3BsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlm
aWVyIHx8IG1fcGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlID09IFBsdWdpbkNvbXBsZXhUZXh0
SW5wdXREaXNhYmxlZCkKLSAgICAgICAgcmV0dXJuIE5POwotCi0gICAgLy8gQ2hlY2sgaWYgdGhl
IHRleHQgaW5wdXQgd2luZG93IGhhcyBiZWVuIGRpc21pc3NlZCBhbmQgbGV0IHRoZSBwbHVnLWlu
IHByb2Nlc3Mga25vdy4KLSAgICAvLyBUaGlzIGlzIG9ubHkgdmFsaWQgd2l0aCB0aGUgdXBkYXRl
ZCBDb2NvYSB0ZXh0IGlucHV0IHNwZWMuCi0gICAgZGlzYWJsZUNvbXBsZXhUZXh0SW5wdXRJZk5l
Y2Vzc2FyeSgpOwotCi0gICAgLy8gVHJ5IGZlZWRpbmcgdGhlIGtleWJvYXJkIGV2ZW50IGRpcmVj
dGx5IHRvIHRoZSBwbHVnLWluLgotICAgIGlmIChtX3BsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0
ZSA9PSBQbHVnaW5Db21wbGV4VGV4dElucHV0RW5hYmxlZExlZ2FjeSkKLSAgICAgICAgcmV0dXJu
IGhhbmRsZVBsdWdpbkNvbXBsZXhUZXh0SW5wdXRLZXlEb3duKGV2ZW50KTsKLQogICAgIHJldHVy
biBOTzsKIH0KIApAQCAtMjg1MiwxNiArMjc5Niw5IEBAIHZvaWQgV2ViVmlld0ltcGw6OnBsdWdp
bkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQoYm9vbCBwbHVnaW5IYXNGb2N1c0FuZFdpbmRvd0hh
CiAgICAgW05TQXBwIHVwZGF0ZVdpbmRvd3NdOwogfQogCi1ib29sIFdlYlZpZXdJbXBsOjp0cnlQ
b3N0UHJvY2Vzc1BsdWdpbkNvbXBsZXhUZXh0SW5wdXRLZXlEb3duKE5TRXZlbnQgKmV2ZW50KQor
Ym9vbCBXZWJWaWV3SW1wbDo6dHJ5UG9zdFByb2Nlc3NQbHVnaW5Db21wbGV4VGV4dElucHV0S2V5
RG93bihOU0V2ZW50ICopCiB7Ci0gICAgaWYgKCFtX3BsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVu
dGlmaWVyIHx8IG1fcGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlID09IFBsdWdpbkNvbXBsZXhU
ZXh0SW5wdXREaXNhYmxlZCkKLSAgICAgICAgcmV0dXJuIE5POwotCi0gICAgLy8gSW4gdGhlIGxl
Z2FjeSB0ZXh0IGlucHV0IG1vZGVsLCB0aGUgZXZlbnQgaGFzIGFscmVhZHkgYmVlbiBzZW50IHRv
IHRoZSBpbnB1dCBtZXRob2QuCi0gICAgaWYgKG1fcGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRl
ID09IFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRFbmFibGVkTGVnYWN5KQotICAgICAgICByZXR1cm4g
Tk87Ci0KLSAgICByZXR1cm4gaGFuZGxlUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd24oZXZl
bnQpOworICAgIHJldHVybiBOTzsKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6aGFuZGxlQWNjZXB0
ZWRBbHRlcm5hdGl2ZVRleHQoY29uc3QgU3RyaW5nJiBhY2NlcHRlZEFsdGVybmF0aXZlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVy
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaApp
bmRleCBkMzBmNmQ0OWIwOTJmNzk0MTc1ODU2ODUyMWEwNmFhMzBkMmJkYmVkLi43NTY2YzRlNjQ3
NzM5YmJiMWIwZjMxYTM3NTc3Yjc2MmM2OGExNGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaApAQCAtNjksOSArNjksNiBAQCBw
dWJsaWM6CiAgICAgCiAgICAgZW51bSBjbGFzcyBQcm9jZXNzVHlwZSB7CiAgICAgICAgIFdlYiwK
LSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgUGx1Z2luLAotI2VuZGlm
CiAgICAgICAgIE5ldHdvcmssCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogICAgICAgICBHUFUs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9MYXVuY2hlci9tYWMvUHJvY2Vz
c0xhdW5jaGVyTWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTGF1bmNoZXIvbWFjL1By
b2Nlc3NMYXVuY2hlck1hYy5tbQppbmRleCBlYzI2ZDM3NDNhYWEyZDY3YjU5MjAyZWQ5YTZhYzA0
YTlhYTNiYjhmLi5lMjg4ZTMwODRiMGQxMmRkM2RkODMxZWI2ZjI2M2I0NGY3YWZlOTZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9MYXVuY2hlci9tYWMvUHJvY2Vzc0xhdW5j
aGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0xhdW5jaGVyL21hYy9Qcm9j
ZXNzTGF1bmNoZXJNYWMubW0KQEAgLTY4LDEwICs2OCw2IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBz
ZXJ2aWNlTmFtZShjb25zdCBQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jaE9w
dGlvCiAjaWYgRU5BQkxFKFdFQl9BVVRITikKICAgICBjYXNlIFByb2Nlc3NMYXVuY2hlcjo6UHJv
Y2Vzc1R5cGU6OldlYkF1dGhuOgogICAgICAgICByZXR1cm4gImNvbS5hcHBsZS5XZWJLaXQuV2Vi
QXV0aG4iOwotI2VuZGlmCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgY2Fz
ZSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpQbHVnaW46Ci0gICAgICAgIHJldHVybiAi
Y29tLmFwcGxlLldlYktpdC5QbHVnaW4uNjQiOwogI2VuZGlmCiAgICAgfQogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvUGFnZUNsaWVudC5oCmluZGV4IDllN2RmMTg0MWFlOWY1OTkwODQ3N2NkZGExYWRj
NTEwNTg2Nzk2ZTAuLjVlMmVjNzU1OTljNTZhY2E1NDZiYWQyYTVjNjNkZWUxYTBhNjczMmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKQEAgLTU2LDcgKzU2LDYgQEAKICNpbmNs
dWRlIDx3dGYvV2Vha1B0ci5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiUGx1
Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVtb3RlTGF5ZXJUcmVlTm9k
ZS5oIgogI2luY2x1ZGUgIldLRm91bmRhdGlvbi5oIgogCkBAIC00MjMsNyArNDIyLDYgQEAgcHVi
bGljOgogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZpcnR1YWwgdm9pZCBwbHVnaW5Gb2N1c09y
V2luZG93Rm9jdXNDaGFuZ2VkKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlm
aWVyLCBib29sIHBsdWdpbkhhc0ZvY3VzQW5kV2luZG93SGFzRm9jdXMpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKHVpbnQ2NF90IHBsdWdpbkNv
bXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpBbHRlcm5h
dGl2ZVRleHRUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFj
ZW1lbnRTdHJpbmdzKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFu
ZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgPSAwOwogICAg
IHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJlYXNv
bkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMGJmMGJmNGQ0MTc5ODQyODk3YjNmNTg3ODJkMmU5NTA4Mjg0M2M4Ny4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwyNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotCi0jaW5jbHVkZSAiUGx1Z2luTW9kdWxlSW5mby5oIgotI2luY2x1ZGUgPFdlYkNv
cmUvTUlNRVR5cGVSZWdpc3RyeS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4u
aD4KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+Ci0j
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9VUkwuaD4KLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotUGx1Z2luSW5mb1N0
b3JlOjpQbHVnaW5JbmZvU3RvcmUoKQotICAgIDogbV9wbHVnaW5MaXN0SXNVcFRvRGF0ZShmYWxz
ZSkKLXsKLX0KLQotdm9pZCBQbHVnaW5JbmZvU3RvcmU6OnNldEFkZGl0aW9uYWxQbHVnaW5zRGly
ZWN0b3JpZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQotewotICAgIG1fYWRk
aXRpb25hbFBsdWdpbnNEaXJlY3RvcmllcyA9IGRpcmVjdG9yaWVzOwotICAgIHJlZnJlc2goKTsK
LX0KLQotdm9pZCBQbHVnaW5JbmZvU3RvcmU6OnJlZnJlc2goKQotewotICAgIG1fcGx1Z2luTGlz
dElzVXBUb0RhdGUgPSBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+Ci1zdGF0aWMgdm9pZCBhZGRGcm9tVmVjdG9yKFQmIGhhc2hTZXQsIGNvbnN0IFUmIHZlY3Rv
cikKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkKLSAg
ICAgICAgaGFzaFNldC5hZGQodmVjdG9yW2ldKTsKLX0KLQotdm9pZCBQbHVnaW5JbmZvU3RvcmU6
OmxvYWRQbHVnaW5zSWZOZWNlc3NhcnkoKQotewotICAgIGlmIChtX3BsdWdpbkxpc3RJc1VwVG9E
YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMaXN0SGFzaFNldDxTdHJpbmc+IHVuaXF1ZVBs
dWdpblBhdGhzOwotCi0gICAgLy8gRmlyc3QsIGxvYWQgcGx1Zy1pbnMgZnJvbSB0aGUgYWRkaXRp
b25hbCBwbHVnLWlucyBkaXJlY3RvcmllcyBzcGVjaWZpZWQuCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2FkZGl0aW9uYWxQbHVnaW5zRGlyZWN0b3JpZXMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIGFkZEZyb21WZWN0b3IodW5pcXVlUGx1Z2luUGF0aHMsIHBsdWdpblBhdGhzSW5EaXJlY3Rv
cnkobV9hZGRpdGlvbmFsUGx1Z2luc0RpcmVjdG9yaWVzW2ldKSk7Ci0KLSAgICAvLyBUaGVuIGxv
YWQgcGx1Zy1pbnMgZnJvbSB0aGUgc3RhbmRhcmQgcGx1Zy1pbnMgZGlyZWN0b3JpZXMuCi0gICAg
VmVjdG9yPFN0cmluZz4gZGlyZWN0b3JpZXMgPSBwbHVnaW5zRGlyZWN0b3JpZXMoKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGRpcmVjdG9yaWVzLnNpemUoKTsgKytpKQotICAgICAgICBh
ZGRGcm9tVmVjdG9yKHVuaXF1ZVBsdWdpblBhdGhzLCBwbHVnaW5QYXRoc0luRGlyZWN0b3J5KGRp
cmVjdG9yaWVzW2ldKSk7Ci0KLSAgICAvLyBUaGVuIGxvYWQgcGx1Zy1pbnMgdGhhdCBhcmUgbm90
IGluIHRoZSBzdGFuZGFyZCBwbHVnLWlucyBkaXJlY3Rvcmllcy4KLSAgICBhZGRGcm9tVmVjdG9y
KHVuaXF1ZVBsdWdpblBhdGhzLCBpbmRpdmlkdWFsUGx1Z2luUGF0aHMoKSk7Ci0KLSAgICBtX3Bs
dWdpbnMuY2xlYXIoKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgcGx1Z2luUGF0aCA6IHVuaXF1
ZVBsdWdpblBhdGhzKQotICAgICAgICBsb2FkUGx1Z2luKG1fcGx1Z2lucywgcGx1Z2luUGF0aCk7
Ci0KLSAgICBtX3BsdWdpbkxpc3RJc1VwVG9EYXRlID0gdHJ1ZTsKLX0KLQotdm9pZCBQbHVnaW5J
bmZvU3RvcmU6OmxvYWRQbHVnaW4oVmVjdG9yPFBsdWdpbk1vZHVsZUluZm8+JiBwbHVnaW5zLCBj
b25zdCBTdHJpbmcmIHBsdWdpblBhdGgpCi17Ci0gICAgUGx1Z2luTW9kdWxlSW5mbyBwbHVnaW47
Ci0gICAgCi0gICAgaWYgKCFnZXRQbHVnaW5JbmZvKHBsdWdpblBhdGgsIHBsdWdpbikpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghc2hvdWxkVXNlUGx1Z2luKHBsdWdpbnMsIHBsdWdpbikp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBwbHVnaW5zLmFwcGVuZChwbHVnaW4pOwotfQot
Ci1WZWN0b3I8UGx1Z2luTW9kdWxlSW5mbz4gUGx1Z2luSW5mb1N0b3JlOjpwbHVnaW5zKCkKLXsK
LSAgICBsb2FkUGx1Z2luc0lmTmVjZXNzYXJ5KCk7Ci0gICAgcmV0dXJuIG1fcGx1Z2luczsKLX0K
LQotUGx1Z2luTW9kdWxlSW5mbyBQbHVnaW5JbmZvU3RvcmU6OmZpbmRQbHVnaW5Gb3JNSU1FVHlw
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBQbHVnaW5EYXRhOjpBbGxvd2VkUGx1Z2luVHlwZXMg
YWxsb3dlZFBsdWdpblR5cGVzKSBjb25zdAotewotICAgIEFTU0VSVCghbWltZVR5cGUuaXNOdWxs
KCkpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBwbHVnaW4gOiBtX3BsdWdpbnMpIHsKLSAgICAg
ICAgaWYgKGFsbG93ZWRQbHVnaW5UeXBlcyA9PSBQbHVnaW5EYXRhOjpPbmx5QXBwbGljYXRpb25Q
bHVnaW5zICYmICFwbHVnaW4uaW5mby5pc0FwcGxpY2F0aW9uUGx1Z2luKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBtaW1lQ2xhc3NJbmZvIDogcGx1
Z2luLmluZm8ubWltZXMpIHsKLSAgICAgICAgICAgIGlmIChtaW1lQ2xhc3NJbmZvLnR5cGUgPT0g
bWltZVR5cGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBsdWdpbjsKLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gUGx1Z2luTW9kdWxlSW5mbygpOwotfQotCi1QbHVnaW5Nb2R1
bGVJbmZvIFBsdWdpbkluZm9TdG9yZTo6ZmluZFBsdWdpbkZvckV4dGVuc2lvbihjb25zdCBTdHJp
bmcmIGV4dGVuc2lvbiwgU3RyaW5nJiBtaW1lVHlwZSwgUGx1Z2luRGF0YTo6QWxsb3dlZFBsdWdp
blR5cGVzIGFsbG93ZWRQbHVnaW5UeXBlcykgY29uc3QKLXsKLSAgICBBU1NFUlQoIWV4dGVuc2lv
bi5pc051bGwoKSk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIHBsdWdpbiA6IG1fcGx1Z2lucykg
ewotICAgICAgICBpZiAoYWxsb3dlZFBsdWdpblR5cGVzID09IFBsdWdpbkRhdGE6Ok9ubHlBcHBs
aWNhdGlvblBsdWdpbnMgJiYgIXBsdWdpbi5pbmZvLmlzQXBwbGljYXRpb25QbHVnaW4pCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG1pbWVDbGFzc0lu
Zm8gOiBwbHVnaW4uaW5mby5taW1lcykgewotICAgICAgICAgICAgaWYgKG1pbWVDbGFzc0luZm8u
ZXh0ZW5zaW9ucy5jb250YWlucyhleHRlbnNpb24pKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2Ug
Zm91bmQgYSBzdXBwb3J0ZWQgZXh0ZW5zaW9uLCBzZXQgdGhlIGNvcnJlY3QgTUlNRSB0eXBlLgot
ICAgICAgICAgICAgICAgIG1pbWVUeXBlID0gbWltZUNsYXNzSW5mby50eXBlOwotICAgICAgICAg
ICAgICAgIHJldHVybiBwbHVnaW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIFBsdWdpbk1vZHVsZUluZm8oKTsKLX0KLQotc3RhdGljIFN0cmluZyBw
YXRoRXh0ZW5zaW9uKGNvbnN0IFVSTCYgdXJsKQotewotICAgIGF1dG8gZmlsZW5hbWUgPSB1cmwu
bGFzdFBhdGhDb21wb25lbnQoKTsKLSAgICBpZiAoZmlsZW5hbWUuZW5kc1dpdGgoJy8nKSkKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICBzaXplX3QgbGFzdERvdFBvc2l0aW9uID0gZmlsZW5hbWUu
cmV2ZXJzZUZpbmQoJy4nKTsKLSAgICBpZiAobGFzdERvdFBvc2l0aW9uID09IG5vdEZvdW5kKQot
ICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBmaWxlbmFtZS5zdWJzdHJpbmcobGFzdERv
dFBvc2l0aW9uICsgMSkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKLX0KLQotI2lmICFQTEFU
Rk9STShDT0NPQSkKLQotUGx1Z2luTW9kdWxlTG9hZFBvbGljeSBQbHVnaW5JbmZvU3RvcmU6OmRl
ZmF1bHRMb2FkUG9saWN5Rm9yUGx1Z2luKGNvbnN0IFBsdWdpbk1vZHVsZUluZm8mKQotewotICAg
IHJldHVybiBQbHVnaW5Nb2R1bGVMb2FkTm9ybWFsbHk7Ci19Ci0gICAgCi1QbHVnaW5Nb2R1bGVJ
bmZvIFBsdWdpbkluZm9TdG9yZTo6ZmluZFBsdWdpbldpdGhCdW5kbGVJZGVudGlmaWVyKGNvbnN0
IFN0cmluZyYpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFBsdWdp
bk1vZHVsZUluZm8oKTsKLX0KLQotI2VuZGlmCi0KLVBsdWdpbk1vZHVsZUluZm8gUGx1Z2luSW5m
b1N0b3JlOjpmaW5kUGx1Z2luKFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFVSTCYgdXJsLCBQbHVn
aW5EYXRhOjpBbGxvd2VkUGx1Z2luVHlwZXMgYWxsb3dlZFBsdWdpblR5cGVzKQotewotICAgIGxv
YWRQbHVnaW5zSWZOZWNlc3NhcnkoKTsKLSAgICAKLSAgICAvLyBGaXJzdCwgY2hlY2sgaWYgd2Ug
Y2FuIGdldCB0aGUgcGx1Zy1pbiBiYXNlZCBvbiBpdHMgTUlNRSB0eXBlLgotICAgIGlmICghbWlt
ZVR5cGUuaXNOdWxsKCkpIHsKLSAgICAgICAgUGx1Z2luTW9kdWxlSW5mbyBwbHVnaW4gPSBmaW5k
UGx1Z2luRm9yTUlNRVR5cGUobWltZVR5cGUsIGFsbG93ZWRQbHVnaW5UeXBlcyk7Ci0gICAgICAg
IGlmICghcGx1Z2luLnBhdGguaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gcGx1Z2luOwot
ICAgIH0KLQotICAgIC8vIE5leHQsIGNoZWNrIGlmIGFueSBwbHVnLWlucyBjbGFpbSB0byBzdXBw
b3J0IHRoZSBVUkwgZXh0ZW5zaW9uLgotICAgIFN0cmluZyBleHRlbnNpb24gPSBwYXRoRXh0ZW5z
aW9uKHVybCk7Ci0gICAgaWYgKCFleHRlbnNpb24uaXNOdWxsKCkgJiYgbWltZVR5cGUuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIFBsdWdpbk1vZHVsZUluZm8gcGx1Z2luID0gZmluZFBsdWdpbkZvckV4
dGVuc2lvbihleHRlbnNpb24sIG1pbWVUeXBlLCBhbGxvd2VkUGx1Z2luVHlwZXMpOwotICAgICAg
ICBpZiAoIXBsdWdpbi5wYXRoLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIHBsdWdpbjsK
LSAgICAgICAgCi0gICAgICAgIC8vIEZpbmFsbHksIHRyeSB0byBnZXQgdGhlIE1JTUUgdHlwZSBm
cm9tIHRoZSBleHRlbnNpb24gaW4gYSBwbGF0Zm9ybSBzcGVjaWZpYyBtYW5uZXIgYW5kIHVzZSB0
aGF0LgotICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uTWltZVR5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5
OjptaW1lVHlwZUZvckV4dGVuc2lvbihleHRlbnNpb24pOwotICAgICAgICBpZiAoIWV4dGVuc2lv
bk1pbWVUeXBlLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBQbHVnaW5Nb2R1bGVJbmZvIHBsdWdp
biA9IGZpbmRQbHVnaW5Gb3JNSU1FVHlwZShleHRlbnNpb25NaW1lVHlwZSwgYWxsb3dlZFBsdWdp
blR5cGVzKTsKLSAgICAgICAgICAgIGlmICghcGx1Z2luLnBhdGguaXNOdWxsKCkpIHsKLSAgICAg
ICAgICAgICAgICBtaW1lVHlwZSA9IGV4dGVuc2lvbk1pbWVUeXBlOwotICAgICAgICAgICAgICAg
IHJldHVybiBwbHVnaW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIFBsdWdpbk1vZHVsZUluZm8oKTsKLX0KLQotYm9vbCBQbHVnaW5JbmZvU3RvcmU6
OmlzU3VwcG9ydGVkUGx1Z2luKGNvbnN0IFBsdWdpbkluZm9TdG9yZTo6U3VwcG9ydGVkUGx1Z2lu
JiBwbHVnaW4sIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFVSTCYgcGx1Z2luVVJMKQot
ewotICAgIGlmICghbWltZVR5cGUuaXNFbXB0eSgpICYmIHBsdWdpbi5taW1lVHlwZXMuY29udGFp
bnMobWltZVR5cGUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBhdXRvIGV4dGVuc2lvbiA9
IHBhdGhFeHRlbnNpb24ocGx1Z2luVVJMKTsKLSAgICByZXR1cm4gZXh0ZW5zaW9uLmlzRW1wdHko
KSA/IGZhbHNlIDogcGx1Z2luLmV4dGVuc2lvbnMuY29udGFpbnMoZXh0ZW5zaW9uKTsKLX0KLQot
Ym9vbCBQbHVnaW5JbmZvU3RvcmU6OmlzU3VwcG9ydGVkUGx1Z2luKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGNvbnN0IFVSTCYgcGx1Z2luVVJMLCBjb25zdCBTdHJpbmcmLCBjb25zdCBVUkwmIHBh
Z2VVUkwpCi17Ci0gICAgLy8gV2UgY2hlY2sgb25seSBwYWdlVVJMIGZvciBjb25zaXN0ZW5jeSB3
aXRoIFdlYlByb2Nlc3MgdmlzaWJsZSBwbHVnaW5zLgotICAgIGlmICghbV9zdXBwb3J0ZWRQbHVn
aW5zKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBtX3N1cHBvcnRlZFBsdWdp
bnMtPmZpbmRNYXRjaGluZyhbJl0gKGF1dG8mJiBwbHVnaW4pIHsKLSAgICAgICAgcmV0dXJuIHBh
Z2VVUkwuaXNNYXRjaGluZ0RvbWFpbihwbHVnaW4ubWF0Y2hpbmdEb21haW4pICYmIGlzU3VwcG9y
dGVkUGx1Z2luKHBsdWdpbiwgbWltZVR5cGUsIHBsdWdpblVSTCk7Ci0gICAgfSkgIT0gbm90Rm91
bmQ7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPFN1cHBvcnRlZFBsdWdpbklkZW50aWZpZXI+
PiBQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRlZFBsdWdpbklkZW50aWZpZXJzKCkKLXsKLSAgICBp
ZiAoIW1fc3VwcG9ydGVkUGx1Z2lucykKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQot
ICAgIHJldHVybiBXVEY6Om1hcCgqbV9zdXBwb3J0ZWRQbHVnaW5zLCBbXSAoYXV0byYmIGl0ZW0p
IHsKLSAgICAgICAgcmV0dXJuIFN1cHBvcnRlZFBsdWdpbklkZW50aWZpZXIgeyBpdGVtLm1hdGNo
aW5nRG9tYWluLCBpdGVtLmlkZW50aWZpZXIgfTsKLSAgICB9KTsKLX0KLQotdm9pZCBQbHVnaW5J
bmZvU3RvcmU6OmFkZFN1cHBvcnRlZFBsdWdpbihTdHJpbmcmJiBkb21haW5OYW1lLCBTdHJpbmcm
JiBpZGVudGlmaWVyLCBIYXNoU2V0PFN0cmluZz4mJiBtaW1lVHlwZXMsIEhhc2hTZXQ8U3RyaW5n
PiBleHRlbnNpb25zKQotewotICAgIGlmICghbV9zdXBwb3J0ZWRQbHVnaW5zKQotICAgICAgICBt
X3N1cHBvcnRlZFBsdWdpbnMgPSBWZWN0b3I8U3VwcG9ydGVkUGx1Z2luPiB7IH07Ci0KLSAgICBt
X3N1cHBvcnRlZFBsdWdpbnMtPmFwcGVuZChTdXBwb3J0ZWRQbHVnaW4geyBXVEZNb3ZlKGRvbWFp
bk5hbWUpLCBXVEZNb3ZlKGlkZW50aWZpZXIpLCBXVEZNb3ZlKG1pbWVUeXBlcyksIFdURk1vdmUo
ZXh0ZW5zaW9ucykgfSk7Ci19Ci0KLVBsdWdpbk1vZHVsZUluZm8gUGx1Z2luSW5mb1N0b3JlOjpp
bmZvRm9yUGx1Z2luV2l0aFBhdGgoY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoKSBjb25zdAotewot
ICAgIGZvciAoY29uc3QgYXV0byYgcGx1Z2luIDogbV9wbHVnaW5zKSB7Ci0gICAgICAgIGlmIChw
bHVnaW4ucGF0aCA9PSBwbHVnaW5QYXRoKQotICAgICAgICAgICAgcmV0dXJuIHBsdWdpbjsKLSAg
ICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gUGx1Z2luTW9kdWxl
SW5mbygpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luSW5mb1N0b3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwOWI4
MDU2YjUyMGZkYmFmYTJlMzIzNTUwZThiYjM2YzVjZWQ4ZWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5JbmZvU3RvcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIlBsdWdpbk1vZHVsZUluZm8uaCIKLQotI2luY2x1ZGUg
PFdlYkNvcmUvUGx1Z2luRGF0YS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1jbGFzcyBQbHVnaW5JbmZvU3RvcmU7Ci0KLWNsYXNzIFBsdWdpbklu
Zm9TdG9yZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGx1Z2luSW5mb1N0b3JlKTsKLQot
cHVibGljOgotICAgIFBsdWdpbkluZm9TdG9yZSgpOwotCi0gICAgdm9pZCBzZXRBZGRpdGlvbmFs
UGx1Z2luc0RpcmVjdG9yaWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7Ci0KLSAgICB2b2lkIHJl
ZnJlc2goKTsKLSAgICBWZWN0b3I8UGx1Z2luTW9kdWxlSW5mbz4gcGx1Z2lucygpOwotCi0gICAg
Ly8gUmV0dXJucyB0aGUgaW5mbyBmb3IgYSBwbHVnLWluIHRoYXQgY2FuIGhhbmRsZSB0aGUgZ2l2
ZW4gTUlNRSB0eXBlLgotICAgIC8vIElmIHRoZSBNSU1FIHR5cGUgaXMgbnVsbCwgdGhlIGZpbGUg
ZXh0ZW5zaW9uIG9mIHRoZSBnaXZlbiB1cmwgd2lsbCBiZSB1c2VkIHRvIGluZmVyIHRoZQotICAg
IC8vIHBsdWctaW4gdHlwZS4gSW4gdGhhdCBjYXNlLCBtaW1lVHlwZSB3aWxsIGJlIGZpbGxlZCBp
biB3aXRoIHRoZSByaWdodCBNSU1FIHR5cGUuCi0gICAgUGx1Z2luTW9kdWxlSW5mbyBmaW5kUGx1
Z2luKFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFVSTCYsIFdlYkNvcmU6OlBsdWdpbkRhdGE6OkFs
bG93ZWRQbHVnaW5UeXBlcyA9IFdlYkNvcmU6OlBsdWdpbkRhdGE6OkFsbFBsdWdpbnMpOwotCi0g
ICAgLy8gUmV0dXJucyB0aGUgaW5mbyBmb3IgdGhlIHBsdWctaW4gd2l0aCB0aGUgZ2l2ZW4gYnVu
ZGxlIGlkZW50aWZpZXIuCi0gICAgUGx1Z2luTW9kdWxlSW5mbyBmaW5kUGx1Z2luV2l0aEJ1bmRs
ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKTsKLQotICAgIC8vIFJl
dHVybnMgdGhlIGluZm8gZm9yIHRoZSBwbHVnLWluIHdpdGggdGhlIGdpdmVuIHBhdGguCi0gICAg
UGx1Z2luTW9kdWxlSW5mbyBpbmZvRm9yUGx1Z2luV2l0aFBhdGgoY29uc3QgU3RyaW5nJiBwbHVn
aW5QYXRoKSBjb25zdDsKLQotICAgIHN0YXRpYyBQbHVnaW5Nb2R1bGVMb2FkUG9saWN5IGRlZmF1
bHRMb2FkUG9saWN5Rm9yUGx1Z2luKGNvbnN0IFBsdWdpbk1vZHVsZUluZm8mKTsKLQotICAgIGJv
b2wgaXNTdXBwb3J0ZWRQbHVnaW4oY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVVJMJiBw
bHVnaW5VUkwsIGNvbnN0IFN0cmluZyYgZnJhbWVVUkxTdHJpbmcsIGNvbnN0IFVSTCYgcGFnZVVS
TCk7Ci0gICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6U3VwcG9ydGVkUGx1Z2luSWRl
bnRpZmllcj4+IHN1cHBvcnRlZFBsdWdpbklkZW50aWZpZXJzKCk7Ci0gICAgdm9pZCBhZGRTdXBw
b3J0ZWRQbHVnaW4oU3RyaW5nJiYgbWF0Y2hpbmdEb21haW4sIFN0cmluZyYmIGlkZW50aWZpZXIs
IEhhc2hTZXQ8U3RyaW5nPiYmIG1pbWVUeXBlcywgSGFzaFNldDxTdHJpbmc+IGV4dGVuc2lvbnMp
OwotICAgIHZvaWQgY2xlYXJTdXBwb3J0ZWRQbHVnaW5zKCkgeyBtX3N1cHBvcnRlZFBsdWdpbnMg
PSBzdGQ6Om51bGxvcHQ7IH0KLQotcHJpdmF0ZToKLSAgICBQbHVnaW5Nb2R1bGVJbmZvIGZpbmRQ
bHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBXZWJDb3JlOjpQbHVnaW5E
YXRhOjpBbGxvd2VkUGx1Z2luVHlwZXMpIGNvbnN0OwotICAgIFBsdWdpbk1vZHVsZUluZm8gZmlu
ZFBsdWdpbkZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgU3RyaW5nJiBtaW1l
VHlwZSwgV2ViQ29yZTo6UGx1Z2luRGF0YTo6QWxsb3dlZFBsdWdpblR5cGVzKSBjb25zdDsKLQot
ICAgIHZvaWQgbG9hZFBsdWdpbnNJZk5lY2Vzc2FyeSgpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRQ
bHVnaW4oVmVjdG9yPFBsdWdpbk1vZHVsZUluZm8+JiBwbHVnaW5zLCBjb25zdCBTdHJpbmcmIHBs
dWdpblBhdGgpOwotICAgIAotICAgIC8vIFBsYXRmb3JtLXNwZWNpZmljIG1lbWJlciBmdW5jdGlv
bnM6Ci0KLSAgICAvLyBSZXR1cm5zIHBhdGhzIHRvIGRpcmVjdG9yaWVzIHRoYXQgc2hvdWxkIGJl
IHNlYXJjaGVkIGZvciBwbHVnLWlucyAodmlhIHBsdWdpblBhdGhzSW5EaXJlY3RvcnkpLgotICAg
IHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBwbHVnaW5zRGlyZWN0b3JpZXMoKTsKLQotICAgIC8vIFJl
dHVybnMgcGF0aHMgdG8gYWxsIHBsdWctaW5zIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5Lgot
ICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBwbHVnaW5QYXRoc0luRGlyZWN0b3J5KGNvbnN0IFN0
cmluZyYgZGlyZWN0b3J5KTsKLQotICAgIC8vIFJldHVybnMgcGF0aHMgdG8gaW5kaXZpZHVhbCBw
bHVnLWlucyB0aGF0IHdvbid0IGJlIGZvdW5kIHZpYSBwbHVnaW5zRGlyZWN0b3JpZXMvcGx1Z2lu
UGF0aHNJbkRpcmVjdG9yeS4KLSAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gaW5kaXZpZHVhbFBs
dWdpblBhdGhzKCk7Ci0KLSAgICAvLyBMb2FkIHBsdWctaW4gaW5mbyBmb3IgdGhlIHBsdWctaW4g
d2l0aCB0aGUgc3BlY2lmaWVkIHBhdGguCi0gICAgc3RhdGljIGJvb2wgZ2V0UGx1Z2luSW5mbyhj
b25zdCBTdHJpbmcmIHBsdWdpblBhdGgsIFBsdWdpbk1vZHVsZUluZm8mKTsKLQotICAgIC8vIFJl
dHVybiB3aGV0aGVyIHRoaXMgcGx1Zy1pbiBzaG91bGQgYmUgdXNlZCAoYWRkZWQgdG8gdGhlIGxp
c3Qgb2YgcGx1Zy1pbnMpIG9yIG5vdC4KLSAgICBzdGF0aWMgYm9vbCBzaG91bGRVc2VQbHVnaW4o
VmVjdG9yPFBsdWdpbk1vZHVsZUluZm8+JiBhbHJlYWR5TG9hZGVkUGx1Z2lucywgY29uc3QgUGx1
Z2luTW9kdWxlSW5mbyYpOwotCi0gICAgVmVjdG9yPFN0cmluZz4gbV9hZGRpdGlvbmFsUGx1Z2lu
c0RpcmVjdG9yaWVzOwotICAgIFZlY3RvcjxQbHVnaW5Nb2R1bGVJbmZvPiBtX3BsdWdpbnM7Ci0g
ICAgYm9vbCBtX3BsdWdpbkxpc3RJc1VwVG9EYXRlOwotCi0gICAgc3RydWN0IFN1cHBvcnRlZFBs
dWdpbiB7Ci0gICAgICAgIFN0cmluZyBtYXRjaGluZ0RvbWFpbjsKLSAgICAgICAgU3RyaW5nIGlk
ZW50aWZpZXI7Ci0gICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBtaW1lVHlwZXM7Ci0gICAgICAgIEhh
c2hTZXQ8U3RyaW5nPiBleHRlbnNpb25zOwotICAgIH07Ci0gICAgc3RhdGljIGJvb2wgaXNTdXBw
b3J0ZWRQbHVnaW4oY29uc3QgU3VwcG9ydGVkUGx1Z2luJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgY29uc3QgVVJMJiBwbHVnaW5VUkwpOwotCi0gICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8U3Vw
cG9ydGVkUGx1Z2luPj4gbV9zdXBwb3J0ZWRQbHVnaW5zOwotfTsKLSAgICAKLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NNYW5h
Z2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc01h
bmFnZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2Q1ZTMzMDYxOGZjZjNj
ZmI0ODE2NjliZTIzNmYxZDZhYmVjZDI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJv
Y2Vzc01hbmFnZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzTWFu
YWdlci5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJQ
bHVnaW5Qcm9jZXNzUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHlNZXNzYWdlcy5o
IgotI2luY2x1ZGUgIldlYnNpdGVEYXRhRmV0Y2hPcHRpb24uaCIKLSNpbmNsdWRlIDx3dGYvQ3J5
cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1QbHVnaW5Qcm9jZXNzTWFuYWdl
ciYgUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpCi17Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFBsdWdpblByb2Nlc3NNYW5hZ2VyPiBwbHVnaW5Qcm9jZXNzTWFuYWdlcjsKLSAg
ICByZXR1cm4gcGx1Z2luUHJvY2Vzc01hbmFnZXI7Ci19Ci0KLVBsdWdpblByb2Nlc3NNYW5hZ2Vy
OjpQbHVnaW5Qcm9jZXNzTWFuYWdlcigpCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgOiBtX3By
b2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIoW3RoaXNdKFJlZkNvdW50ZXJF
dmVudCBldmVudCkgeyB1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZChldmVudCk7IH0p
Ci0jZW5kaWYKLXsKLX0KLQotdWludDY0X3QgUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnBsdWdpblBy
b2Nlc3NUb2tlbihjb25zdCBQbHVnaW5Nb2R1bGVJbmZvJiBwbHVnaW5Nb2R1bGVJbmZvLCBQbHVn
aW5Qcm9jZXNzU2FuZGJveFBvbGljeSBwbHVnaW5Qcm9jZXNzU2FuZGJveFBvbGljeSkKLXsKLSAg
ICAvLyBTZWUgaWYgd2Uga25vdyB0aGlzIHRva2VuIGFscmVhZHkuCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX3BsdWdpblByb2Nlc3NUb2tlbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
Y29uc3QgUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMgPSBtX3BsdWdpblByb2Nl
c3NUb2tlbnNbaV0uZmlyc3Q7Ci0KLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMubW9kdWxlSW5mby5w
YXRoID09IHBsdWdpbk1vZHVsZUluZm8ucGF0aAotICAgICAgICAgICAgJiYgYXR0cmlidXRlcy5z
YW5kYm94UG9saWN5ID09IHBsdWdpblByb2Nlc3NTYW5kYm94UG9saWN5KQotICAgICAgICAgICAg
cmV0dXJuIG1fcGx1Z2luUHJvY2Vzc1Rva2Vuc1tpXS5zZWNvbmQ7Ci0gICAgfQotCi0gICAgdWlu
dDY0X3QgdG9rZW47Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgY3J5cHRvZ3JhcGhpY2Fs
bHlSYW5kb21WYWx1ZXMoJnRva2VuLCBzaXplb2YodG9rZW4pKTsKLQotICAgICAgICBpZiAobV9r
bm93blRva2Vucy5pc1ZhbGlkVmFsdWUodG9rZW4pICYmICFtX2tub3duVG9rZW5zLmNvbnRhaW5z
KHRva2VuKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIFBsdWdpblByb2Nlc3NB
dHRyaWJ1dGVzIGF0dHJpYnV0ZXM7Ci0gICAgYXR0cmlidXRlcy5tb2R1bGVJbmZvID0gcGx1Z2lu
TW9kdWxlSW5mbzsKLSAgICBhdHRyaWJ1dGVzLnNhbmRib3hQb2xpY3kgPSBwbHVnaW5Qcm9jZXNz
U2FuZGJveFBvbGljeTsKLQotICAgIG1fcGx1Z2luUHJvY2Vzc1Rva2Vucy5hcHBlbmQoc3RkOjpt
YWtlX3BhaXIoV1RGTW92ZShhdHRyaWJ1dGVzKSwgdG9rZW4pKTsKLSAgICBtX2tub3duVG9rZW5z
LmFkZCh0b2tlbik7Ci0KLSAgICByZXR1cm4gdG9rZW47Ci19Ci0KLWJvb2wgUGx1Z2luUHJvY2Vz
c01hbmFnZXI6OmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKHVpbnQ2NF90IHBsdWdpblByb2Nl
c3NUb2tlbiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0UGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQotewotICAgIEFTU0VSVChwbHVnaW5Qcm9jZXNz
VG9rZW4pOwotCi0gICAgYXV0byogcGx1Z2luUHJvY2VzcyA9IGdldE9yQ3JlYXRlUGx1Z2luUHJv
Y2VzcyhwbHVnaW5Qcm9jZXNzVG9rZW4pOwotICAgIEFTU0VSVChwbHVnaW5Qcm9jZXNzKTsKLSAg
ICBpZiAoIXBsdWdpblByb2Nlc3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHBsdWdp
blByb2Nlc3MtPmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKFdURk1vdmUocmVwbHkpKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6cmVtb3ZlUGx1
Z2luUHJvY2Vzc1Byb3h5KFBsdWdpblByb2Nlc3NQcm94eSogcGx1Z2luUHJvY2Vzc1Byb3h5KQot
ewotICAgIHNpemVfdCB2ZWN0b3JJbmRleCA9IG1fcGx1Z2luUHJvY2Vzc2VzLmZpbmQocGx1Z2lu
UHJvY2Vzc1Byb3h5KTsKLSAgICBBU1NFUlQodmVjdG9ySW5kZXggIT0gbm90Rm91bmQpOwotCi0g
ICAgbV9wbHVnaW5Qcm9jZXNzZXMucmVtb3ZlKHZlY3RvckluZGV4KTsKLX0KLQotdm9pZCBQbHVn
aW5Qcm9jZXNzTWFuYWdlcjo6ZmV0Y2hXZWJzaXRlRGF0YShjb25zdCBQbHVnaW5Nb2R1bGVJbmZv
JiBwbHVnaW4sIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlvbnMs
IFdURjo6RnVuY3Rpb248dm9pZCAoVmVjdG9yPFN0cmluZz4pPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQotewotICAgIGF1dG8gdG9rZW4gPSBwbHVnaW5Qcm9jZXNzVG9rZW4ocGx1Z2luLCBQbHVnaW5Q
cm9jZXNzU2FuZGJveFBvbGljeTo6Tm9ybWFsKTsKLSAgICBhdXRvIHBsdWdpblByb2Nlc3MgPSBm
ZXRjaE9wdGlvbnMuY29udGFpbnMoV2Vic2l0ZURhdGFGZXRjaE9wdGlvbjo6RG9Ob3RDcmVhdGVQ
cm9jZXNzZXMpID8gZ2V0UGx1Z2luUHJvY2Vzcyh0b2tlbikgOiBnZXRPckNyZWF0ZVBsdWdpblBy
b2Nlc3ModG9rZW4pOwotICAgIGlmICghcGx1Z2luUHJvY2VzcykgewotICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcih7IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcGx1Z2luUHJv
Y2Vzcy0+ZmV0Y2hXZWJzaXRlRGF0YShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0K
LXZvaWQgUGx1Z2luUHJvY2Vzc01hbmFnZXI6OmRlbGV0ZVdlYnNpdGVEYXRhKGNvbnN0IFBsdWdp
bk1vZHVsZUluZm8mIHBsdWdpbiwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgV1RGOjpGdW5jdGlv
bjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIFBsdWdpblByb2Nlc3NQcm94
eSogcGx1Z2luUHJvY2VzcyA9IGdldE9yQ3JlYXRlUGx1Z2luUHJvY2VzcyhwbHVnaW5Qcm9jZXNz
VG9rZW4ocGx1Z2luLCBQbHVnaW5Qcm9jZXNzU2FuZGJveFBvbGljeTo6Tm9ybWFsKSk7Ci0gICAg
cGx1Z2luUHJvY2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEobW9kaWZpZWRTaW5jZSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotfQotCi12b2lkIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpkZWxl
dGVXZWJzaXRlRGF0YUZvckhvc3ROYW1lcyhjb25zdCBQbHVnaW5Nb2R1bGVJbmZvJiBwbHVnaW4s
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBob3N0TmFtZXMsV1RGOjpGdW5jdGlvbjx2b2lkICgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIFBsdWdpblByb2Nlc3NQcm94eSogcGx1Z2luUHJv
Y2VzcyA9IGdldE9yQ3JlYXRlUGx1Z2luUHJvY2VzcyhwbHVnaW5Qcm9jZXNzVG9rZW4ocGx1Z2lu
LCBQbHVnaW5Qcm9jZXNzU2FuZGJveFBvbGljeTo6Tm9ybWFsKSk7Ci0gICAgcGx1Z2luUHJvY2Vz
cy0+ZGVsZXRlV2Vic2l0ZURhdGFGb3JIb3N0TmFtZXMoaG9zdE5hbWVzLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci19Ci0KLVBsdWdpblByb2Nlc3NQcm94eSogUGx1Z2luUHJvY2Vzc01h
bmFnZXI6OmdldFBsdWdpblByb2Nlc3ModWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2VuKQotewot
ICAgIGZvciAoY29uc3QgYXV0byYgcGx1Z2luUHJvY2VzcyA6IG1fcGx1Z2luUHJvY2Vzc2VzKSB7
Ci0gICAgICAgIGlmIChwbHVnaW5Qcm9jZXNzLT5wbHVnaW5Qcm9jZXNzVG9rZW4oKSA9PSBwbHVn
aW5Qcm9jZXNzVG9rZW4pCi0gICAgICAgICAgICByZXR1cm4gcGx1Z2luUHJvY2Vzcy5nZXQoKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotI2lmIE9TKExJTlVYKQotdm9pZCBQ
bHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2VuZE1lbW9yeVByZXNzdXJlRXZlbnQoYm9vbCBpc0NyaXRp
Y2FsKQotewotICAgIGZvciAoYXV0byYgcGx1Z2luUHJvY2VzcyA6IG1fcGx1Z2luUHJvY2Vzc2Vz
KQotICAgICAgICBwbHVnaW5Qcm9jZXNzLT5zZW5kTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRp
Y2FsKTsKLX0KLSNlbmRpZgotCi1QbHVnaW5Qcm9jZXNzUHJveHkqIFBsdWdpblByb2Nlc3NNYW5h
Z2VyOjpnZXRPckNyZWF0ZVBsdWdpblByb2Nlc3ModWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2Vu
KQotewotICAgIGlmIChhdXRvIGV4aXN0aW5nUHJvY2VzcyA9IGdldFBsdWdpblByb2Nlc3MocGx1
Z2luUHJvY2Vzc1Rva2VuKSkKLSAgICAgICAgcmV0dXJuIGV4aXN0aW5nUHJvY2VzczsKLQotICAg
IGZvciAoYXV0byYgYXR0cmlidXRlc0FuZFRva2VuIDogbV9wbHVnaW5Qcm9jZXNzVG9rZW5zKSB7
Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzQW5kVG9rZW4uc2Vjb25kID09IHBsdWdpblByb2Nlc3NU
b2tlbikgewotICAgICAgICAgICAgYXV0byBwbHVnaW5Qcm9jZXNzID0gUGx1Z2luUHJvY2Vzc1By
b3h5OjpjcmVhdGUodGhpcywgYXR0cmlidXRlc0FuZFRva2VuLmZpcnN0LCBhdHRyaWJ1dGVzQW5k
VG9rZW4uc2Vjb25kKTsKLSAgICAgICAgICAgIFBsdWdpblByb2Nlc3NQcm94eSogcGx1Z2luUHJv
Y2Vzc1B0ciA9IHBsdWdpblByb2Nlc3MucHRyKCk7Ci0gICAgICAgICAgICBtX3BsdWdpblByb2Nl
c3Nlcy5hcHBlbmQoV1RGTW92ZShwbHVnaW5Qcm9jZXNzKSk7Ci0gICAgICAgICAgICByZXR1cm4g
cGx1Z2luUHJvY2Vzc1B0cjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBudWxscHRy
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5Qcm9jZXNzTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5Qcm9jZXNzTWFuYWdlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
ZTBkYmIwMDJlYjNlZjMyODA2YzJkYWJiNTMyODU2NDIwZmJjZjVlLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luUHJvY2Vzc01hbmFnZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiUGx1Z2luTW9kdWxlSW5mby5oIgotI2luY2x1ZGUg
IlBsdWdpblByb2Nlc3MuaCIKLSNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzQXR0cmlidXRlcy5oIgot
I2luY2x1ZGUgIlByb2Nlc3NUaHJvdHRsZXIuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHlN
ZXNzYWdlc1JlcGxpZXMuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZXIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBJUEMg
ewotY2xhc3MgRW5jb2RlcjsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFBsdWdp
bkluZm9TdG9yZTsKLWNsYXNzIFBsdWdpblByb2Nlc3NQcm94eTsKLWNsYXNzIFdlYlByb2Nlc3NQ
cm94eTsKLWVudW0gY2xhc3MgV2Vic2l0ZURhdGFGZXRjaE9wdGlvbiA6IHVpbnQ4X3Q7Ci0KLWNs
YXNzIFBsdWdpblByb2Nlc3NNYW5hZ2VyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQbHVn
aW5Qcm9jZXNzTWFuYWdlcik7Ci0gICAgZnJpZW5kIE5ldmVyRGVzdHJveWVkPFBsdWdpblByb2Nl
c3NNYW5hZ2VyPjsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGx1Z2luUHJvY2Vzc01hbmFnZXImIHNp
bmdsZXRvbigpOwotCi0gICAgdWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2VuKGNvbnN0IFBsdWdp
bk1vZHVsZUluZm8mLCBQbHVnaW5Qcm9jZXNzU2FuZGJveFBvbGljeSk7Ci0KLSAgICBib29sIGdl
dFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKHVpbnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbiwgTWVz
c2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVk
UmVwbHkmJik7Ci0gICAgdm9pZCByZW1vdmVQbHVnaW5Qcm9jZXNzUHJveHkoUGx1Z2luUHJvY2Vz
c1Byb3h5Kik7Ci0KLSAgICB2b2lkIGZldGNoV2Vic2l0ZURhdGEoY29uc3QgUGx1Z2luTW9kdWxl
SW5mbyYsIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwgV1RGOjpGdW5jdGlvbjx2
b2lkIChWZWN0b3I8U3RyaW5nPik+JiYgY29tcGxldGlvbkhhbmRsZXIpOwotICAgIHZvaWQgZGVs
ZXRlV2Vic2l0ZURhdGEoY29uc3QgUGx1Z2luTW9kdWxlSW5mbyYsIFdhbGxUaW1lIG1vZGlmaWVk
U2luY2UsIFdURjo6RnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAg
dm9pZCBkZWxldGVXZWJzaXRlRGF0YUZvckhvc3ROYW1lcyhjb25zdCBQbHVnaW5Nb2R1bGVJbmZv
JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3ROYW1lcywgV1RGOjpGdW5jdGlvbjx2b2lkICgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKLQotI2lmIE9TKExJTlVYKQotICAgIHZvaWQgc2VuZE1l
bW9yeVByZXNzdXJlRXZlbnQoYm9vbCBpc0NyaXRpY2FsKTsKLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oQ09DT0EpCi0gICAgaW5saW5lIFByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkVG9rZW4gcHJv
Y2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRUb2tlbigpOwotICAgIGlubGluZSBib29sIHByb2Nlc3NT
dXBwcmVzc2lvbkRpc2FibGVkKCkgY29uc3Q7Ci0gICAgdm9pZCB1cGRhdGVQcm9jZXNzU3VwcHJl
c3Npb25EaXNhYmxlZChSZWZDb3VudGVyRXZlbnQpOwotI2VuZGlmCi0KLSAgICBjb25zdCBWZWN0
b3I8UmVmUHRyPFBsdWdpblByb2Nlc3NQcm94eT4+JiBwbHVnaW5Qcm9jZXNzZXMoKSBjb25zdCB7
IHJldHVybiBtX3BsdWdpblByb2Nlc3NlczsgfQotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIHZv
aWQgc2V0RXhwZXJpbWVudGFsUGx1Z0luU2FuZGJveFByb2ZpbGVzRW5hYmxlZChib29sKTsKLSAg
ICBib29sIGV4cGVyaW1lbnRhbFBsdWdJblNhbmRib3hQcm9maWxlc0VuYWJsZWQoKSBjb25zdCB7
IHJldHVybiBtX2V4cGVyaW1lbnRhbFBsdWdJblNhbmRib3hQcm9maWxlc0VuYWJsZWQ7IH0KLSNl
bmRpZgotCi1wcml2YXRlOgotICAgIFBsdWdpblByb2Nlc3NNYW5hZ2VyKCk7Ci0KLSAgICBQbHVn
aW5Qcm9jZXNzUHJveHkqIGdldFBsdWdpblByb2Nlc3ModWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rv
a2VuKTsKLSAgICBQbHVnaW5Qcm9jZXNzUHJveHkqIGdldE9yQ3JlYXRlUGx1Z2luUHJvY2Vzcyh1
aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4pOwotCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjxQbHVn
aW5Qcm9jZXNzQXR0cmlidXRlcywgdWludDY0X3Q+PiBtX3BsdWdpblByb2Nlc3NUb2tlbnM7Ci0g
ICAgSGFzaFNldDx1aW50NjRfdD4gbV9rbm93blRva2VuczsKLQotICAgIFZlY3RvcjxSZWZQdHI8
UGx1Z2luUHJvY2Vzc1Byb3h5Pj4gbV9wbHVnaW5Qcm9jZXNzZXM7Ci0KLSNpZiBQTEFURk9STShD
T0NPQSkKLSAgICBQcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZENvdW50ZXIgbV9wcm9jZXNzU3Vw
cHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oTUFD
KQotICAgIGJvb2wgbV9leHBlcmltZW50YWxQbHVnSW5TYW5kYm94UHJvZmlsZXNFbmFibGVkIHsg
ZmFsc2UgfTsKLSNlbmRpZgotfTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotaW5saW5lIFByb2Nl
c3NTdXBwcmVzc2lvbkRpc2FibGVkVG9rZW4gUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnByb2Nlc3NT
dXBwcmVzc2lvbkRpc2FibGVkVG9rZW4oKQotewotICAgIHJldHVybiBtX3Byb2Nlc3NTdXBwcmVz
c2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIuY291bnQoKTsKLX0KLQotaW5saW5lIGJvb2wgUGx1
Z2luUHJvY2Vzc01hbmFnZXI6OnByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnZh
bHVlKCk7Ci19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYzQwMzUzODFiYjhhMTUzZmQwMGE4ZTRjNmNmMjA3YTQ4MzFiYzBmYi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwzMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlBsdWdpblByb2Nlc3NQcm94eS5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCi0KLSNpbmNsdWRlICJBdXhpbGlhcnlQcm9jZXNzTWVzc2FnZXMuaCIKLSNpbmNs
dWRlICJQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXJNZXNzYWdlcy5oIgotI2luY2x1ZGUg
IlBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKLSNpbmNsdWRlICJQbHVnaW5Qcm9j
ZXNzTWFuYWdlci5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NNZXNzYWdlcy5oIgotI2luY2x1
ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgi
Ci0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5
TWVzc2FnZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1J1bkxvb3AuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotc3RhdGljIGNvbnN0IFNlY29uZHMgbWluaW11bUxpZmV0aW1lIHsgMl9taW4g
fTsKLXN0YXRpYyBjb25zdCBTZWNvbmRzIHNuYXBzaG90dGluZ01pbmltdW1MaWZldGltZSB7IDMw
X3MgfTsKLQotc3RhdGljIGNvbnN0IFNlY29uZHMgc2h1dGRvd25UaW1lb3V0IHsgMV9taW4gfTsK
LXN0YXRpYyBjb25zdCBTZWNvbmRzIHNuYXBzaG90dGluZ1NodXRkb3duVGltZW91dCB7IDE1X3Mg
fTsKLQotc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlUGx1Z2luUHJvY2Vzc0NhbGxiYWNrSUQoKQot
ewotICAgIHN0YXRpYyB1aW50NjRfdCBjYWxsYmFja0lEOwotCi0gICAgcmV0dXJuICsrY2FsbGJh
Y2tJRDsKLX0KLQotUmVmPFBsdWdpblByb2Nlc3NQcm94eT4gUGx1Z2luUHJvY2Vzc1Byb3h5Ojpj
cmVhdGUoUGx1Z2luUHJvY2Vzc01hbmFnZXIqIFBsdWdpblByb2Nlc3NNYW5hZ2VyLCBjb25zdCBQ
bHVnaW5Qcm9jZXNzQXR0cmlidXRlcyYgcGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMsIHVpbnQ2NF90
IHBsdWdpblByb2Nlc3NUb2tlbikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQbHVnaW5Q
cm9jZXNzUHJveHkoUGx1Z2luUHJvY2Vzc01hbmFnZXIsIHBsdWdpblByb2Nlc3NBdHRyaWJ1dGVz
LCBwbHVnaW5Qcm9jZXNzVG9rZW4pKTsKLX0KLQotUGx1Z2luUHJvY2Vzc1Byb3h5OjpQbHVnaW5Q
cm9jZXNzUHJveHkoUGx1Z2luUHJvY2Vzc01hbmFnZXIqIFBsdWdpblByb2Nlc3NNYW5hZ2VyLCBj
b25zdCBQbHVnaW5Qcm9jZXNzQXR0cmlidXRlcyYgcGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMsIHVp
bnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbikKLSAgICA6IG1fdGhyb3R0bGVyKCp0aGlzLCBmYWxz
ZSkKLSAgICAsIG1fcGx1Z2luUHJvY2Vzc01hbmFnZXIoUGx1Z2luUHJvY2Vzc01hbmFnZXIpCi0g
ICAgLCBtX3BsdWdpblByb2Nlc3NBdHRyaWJ1dGVzKHBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzKQot
ICAgICwgbV9wbHVnaW5Qcm9jZXNzVG9rZW4ocGx1Z2luUHJvY2Vzc1Rva2VuKQotICAgICwgbV9u
dW1QZW5kaW5nQ29ubmVjdGlvblJlcXVlc3RzKDApCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAg
LCBtX21vZGFsV2luZG93SXNTaG93aW5nKGZhbHNlKQotICAgICwgbV9mdWxsc2NyZWVuV2luZG93
SXNTaG93aW5nKGZhbHNlKQotICAgICwgbV9wcmVGdWxsc2NyZWVuQXBwUHJlc2VudGF0aW9uT3B0
aW9ucygwKQotI2VuZGlmCi17Ci0gICAgY29ubmVjdCgpOwotfQotCi1QbHVnaW5Qcm9jZXNzUHJv
eHk6On5QbHVnaW5Qcm9jZXNzUHJveHkoKQotewotICAgIGlmIChtX2Nvbm5lY3Rpb24pCi0gICAg
ICAgIG1fY29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOwotCi0gICAgQVNTRVJUKG1fcGVuZGluZ0Zl
dGNoV2Vic2l0ZURhdGFSZXF1ZXN0cy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChtX3BlbmRpbmdG
ZXRjaFdlYnNpdGVEYXRhQ2FsbGJhY2tzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fcGVuZGlu
Z0RlbGV0ZVdlYnNpdGVEYXRhUmVxdWVzdHMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQobV9wZW5k
aW5nRGVsZXRlV2Vic2l0ZURhdGFDYWxsYmFja3MuaXNFbXB0eSgpKTsKLX0KLQotdm9pZCBQbHVn
aW5Qcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hP
cHRpb25zJiBsYXVuY2hPcHRpb25zKQotewotICAgIHBsYXRmb3JtR2V0TGF1bmNoT3B0aW9uc1dp
dGhBdHRyaWJ1dGVzKGxhdW5jaE9wdGlvbnMsIG1fcGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMpOwot
ICAgIEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25z
KTsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6OnByb2Nlc3NXaWxsU2h1dERvd24oSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQotewotICAgIEFTU0VSVF9VTlVTRUQoY29ubmVjdGlv
biwgdGhpcy0+Y29ubmVjdGlvbigpID09ICZjb25uZWN0aW9uKTsKLX0KLQotLy8gQXNrcyB0aGUg
cGx1Zy1pbiBwcm9jZXNzIHRvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uIHRvIGEgd2ViIHByb2Nl
c3MuIFRoZSBjb25uZWN0aW9uIGlkZW50aWZpZXIgd2lsbCBiZSAKLS8vIGVuY29kZWQgaW4gdGhl
IGdpdmVuIGFyZ3VtZW50IGVuY29kZXIgYW5kIHNlbnQgYmFjayB0byB0aGUgY29ubmVjdGlvbiBv
ZiB0aGUgZ2l2ZW4gd2ViIHByb2Nlc3MuCi12b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6Z2V0UGx1
Z2luUHJvY2Vzc0Nvbm5lY3Rpb24oTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0UGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQotewotICAgIG1fcGVuZGlu
Z0Nvbm5lY3Rpb25SZXBsaWVzLmFwcGVuZChXVEZNb3ZlKHJlcGx5KSk7Ci0KLSAgICBpZiAoc3Rh
dGUoKSA9PSBTdGF0ZTo6TGF1bmNoaW5nKSB7Ci0gICAgICAgIG1fbnVtUGVuZGluZ0Nvbm5lY3Rp
b25SZXF1ZXN0cysrOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIC8vIEFzayB0
aGUgcGx1Zy1pbiBwcm9jZXNzIHRvIGNyZWF0ZSBhIGNvbm5lY3Rpb24uIFNpbmNlIHRoZSBwbHVn
LWluIGNhbiBiZSB3YWl0aW5nIGZvciBhIHN5bmNocm9ub3VzIHJlcGx5Ci0gICAgLy8gd2UgbmVl
ZCB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIG1lc3NhZ2UgaXMgYWx3YXlzIHByb2Nlc3NlZCwgZXZl
biB3aGVuIHRoZSBwbHVnLWluIGlzIHdhaXRpbmcgZm9yIGEgc3luY2hyb251cyByZXBseS4KLSAg
ICBtX2Nvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OlBsdWdpblByb2Nlc3M6OkNyZWF0ZVdlYlBy
b2Nlc3NDb25uZWN0aW9uKCksIDAsIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZl
bldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6
OmZldGNoV2Vic2l0ZURhdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAoVmVjdG9yPFN0cmluZz4p
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBnZW5l
cmF0ZVBsdWdpblByb2Nlc3NDYWxsYmFja0lEKCk7Ci0gICAgbV9wZW5kaW5nRmV0Y2hXZWJzaXRl
RGF0YUNhbGxiYWNrcy5zZXQoY2FsbGJhY2tJRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotCi0gICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6OkxhdW5jaGluZykgewotICAgICAgICBtX3Bl
bmRpbmdGZXRjaFdlYnNpdGVEYXRhUmVxdWVzdHMuYXBwZW5kKGNhbGxiYWNrSUQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpQbHVn
aW5Qcm9jZXNzOjpHZXRTaXRlc1dpdGhEYXRhKGNhbGxiYWNrSUQpLCAwKTsKLX0KLQotdm9pZCBQ
bHVnaW5Qcm9jZXNzUHJveHk6OmRlbGV0ZVdlYnNpdGVEYXRhKFdhbGxUaW1lIG1vZGlmaWVkU2lu
Y2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0g
ICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IGdlbmVyYXRlUGx1Z2luUHJvY2Vzc0NhbGxiYWNrSUQo
KTsKLSAgICBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUNhbGxiYWNrcy5zZXQoY2FsbGJhY2tJ
RCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgaWYgKHN0YXRlKCkgPT0gU3Rh
dGU6OkxhdW5jaGluZykgewotICAgICAgICBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YVJlcXVl
c3RzLmFwcGVuZCh7IG1vZGlmaWVkU2luY2UsIGNhbGxiYWNrSUQgfSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBtX2Nvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OlBsdWdpblByb2Nl
c3M6OkRlbGV0ZVdlYnNpdGVEYXRhKG1vZGlmaWVkU2luY2UsIGNhbGxiYWNrSUQpLCAwKTsKLX0K
LQotdm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6OmRlbGV0ZVdlYnNpdGVEYXRhRm9ySG9zdE5hbWVz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBob3N0TmFtZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQg
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IGdl
bmVyYXRlUGx1Z2luUHJvY2Vzc0NhbGxiYWNrSUQoKTsKLSAgICBtX3BlbmRpbmdEZWxldGVXZWJz
aXRlRGF0YUZvckhvc3ROYW1lc0NhbGxiYWNrcy5zZXQoY2FsbGJhY2tJRCwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotCi0gICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6OkxhdW5jaGluZykg
ewotICAgICAgICBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUZvckhvc3ROYW1lc1JlcXVlc3Rz
LmFwcGVuZCh7IGhvc3ROYW1lcywgY2FsbGJhY2tJRCB9KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIG1fY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6UGx1Z2luUHJvY2Vzczo6RGVs
ZXRlV2Vic2l0ZURhdGFGb3JIb3N0TmFtZXMoaG9zdE5hbWVzLCBjYWxsYmFja0lEKSwgMCk7Ci19
Ci0KLSNpZiBPUyhMSU5VWCkKLXZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjpzZW5kTWVtb3J5UHJl
c3N1cmVFdmVudChib29sIGlzQ3JpdGljYWwpCi17Ci0gICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6
OkxhdW5jaGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb25uZWN0aW9uLT5zZW5kKE1l
c3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChp
c0NyaXRpY2FsKSwgMCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6OnBs
dWdpblByb2Nlc3NDcmFzaGVkT3JGYWlsZWRUb0xhdW5jaCgpCi17Ci0gICAgLy8gVGhlIHBsdWct
aW4gcHJvY2VzcyBtdXN0IGhhdmUgY3Jhc2hlZCBvciBleGl0ZWQsIHNlbmQgYW55IHBlbmRpbmcg
c3luYyByZXBsaWVzIHdlIG1pZ2h0IGhhdmUuCi0gICAgd2hpbGUgKCFtX3BlbmRpbmdDb25uZWN0
aW9uUmVwbGllcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byByZXBseSA9IG1fcGVuZGluZ0Nv
bm5lY3Rpb25SZXBsaWVzLnRha2VGaXJzdCgpOwotCi0jaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tF
VFMpCi0gICAgICAgIHJlcGx5KElQQzo6QXR0YWNobWVudCgpLCBmYWxzZSk7Ci0jZWxpZiBPUyhE
QVJXSU4pCi0gICAgICAgIHJlcGx5KElQQzo6QXR0YWNobWVudCgwLCBNQUNIX01TR19UWVBFX01P
VkVfU0VORCksIGZhbHNlKTsKLSNlbHNlCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0jZW5k
aWYKLSAgICB9Ci0KLSAgICBtX3BlbmRpbmdGZXRjaFdlYnNpdGVEYXRhUmVxdWVzdHMuY2xlYXIo
KTsKLSAgICBmb3IgKGF1dG8mJiBjYWxsYmFjayA6IG1fcGVuZGluZ0ZldGNoV2Vic2l0ZURhdGFD
YWxsYmFja3MudmFsdWVzKCkpCi0gICAgICAgIGNhbGxiYWNrKHsgfSk7Ci0gICAgbV9wZW5kaW5n
RmV0Y2hXZWJzaXRlRGF0YUNhbGxiYWNrcy5jbGVhcigpOwotCi0gICAgbV9wZW5kaW5nRGVsZXRl
V2Vic2l0ZURhdGFSZXF1ZXN0cy5jbGVhcigpOwotICAgIGZvciAoYXV0byYmIGNhbGxiYWNrIDog
bV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFDYWxsYmFja3MudmFsdWVzKCkpCi0gICAgICAgIGNh
bGxiYWNrKCk7Ci0gICAgbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFSZXF1ZXN0cy5jbGVhcigp
OwotCi0gICAgbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFGb3JIb3N0TmFtZXNSZXF1ZXN0cy5j
bGVhcigpOwotICAgIGZvciAoYXV0byYmIGNhbGxiYWNrIDogbV9wZW5kaW5nRGVsZXRlV2Vic2l0
ZURhdGFGb3JIb3N0TmFtZXNDYWxsYmFja3MudmFsdWVzKCkpCi0gICAgICAgIGNhbGxiYWNrKCk7
Ci0gICAgbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFGb3JIb3N0TmFtZXNDYWxsYmFja3MuY2xl
YXIoKTsKLQotICAgIC8vIFRlbGwgdGhlIHBsdWctaW4gcHJvY2VzcyBtYW5hZ2VyIHRvIGZvcmdl
dCBhYm91dCB0aGlzIHBsdWctaW4gcHJvY2VzcyBwcm94eS4gVGhpcyBtYXkgY2F1c2UgdXMgdG8g
YmUgZGVsZXRlZC4KLSAgICBtX3BsdWdpblByb2Nlc3NNYW5hZ2VyLT5yZW1vdmVQbHVnaW5Qcm9j
ZXNzUHJveHkodGhpcyk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZShJ
UEM6OkNvbm5lY3Rpb24mKQotewotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmIChtX21vZGFs
V2luZG93SXNTaG93aW5nKQotICAgICAgICBlbmRNb2RhbCgpOwotCi0gICAgaWYgKG1fZnVsbHNj
cmVlbldpbmRvd0lzU2hvd2luZykKLSAgICAgICAgZXhpdEZ1bGxzY3JlZW4oKTsKLSNlbmRpZgot
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNz
UG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdl
czo6UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyOjpQbHVnaW5Qcm9jZXNzQ3Jhc2hlZCht
X3BsdWdpblByb2Nlc3NUb2tlbikpOwotCi0gICAgLy8gVGhpcyB3aWxsIGNhdXNlIHVzIHRvIGJl
IGRlbGV0ZWQuCi0gICAgcGx1Z2luUHJvY2Vzc0NyYXNoZWRPckZhaWxlZFRvTGF1bmNoKCk7Ci19
Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6Ok1lc3NhZ2VOYW1lIG1lc3NhZ2VOYW1lKQot
ewotICAgIGxvZ0ludmFsaWRNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VOYW1lKTsKLSAgICB0
ZXJtaW5hdGUoKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5j
aGluZyhQcm9jZXNzTGF1bmNoZXIqLCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVj
dGlvbklkZW50aWZpZXIpCi17Ci0gICAgQVNTRVJUKCFtX2Nvbm5lY3Rpb24pOwotCi0gICAgaWYg
KCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJc1ZhbGlkKGNvbm5lY3Rpb25JZGVudGlmaWVy
KSkgewotICAgICAgICBwbHVnaW5Qcm9jZXNzQ3Jhc2hlZE9yRmFpbGVkVG9MYXVuY2goKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY29ubmVjdGlvbiA9IElQQzo6Q29ubmVjdGlv
bjo6Y3JlYXRlU2VydmVyQ29ubmVjdGlvbihjb25uZWN0aW9uSWRlbnRpZmllciwgKnRoaXMpOwot
Ci0gICAgbV9jb25uZWN0aW9uLT5vcGVuKCk7Ci0gICAgCi0gICAgUGx1Z2luUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotICAgIHBhcmFtZXRlcnMubWluaW11bUxpZmV0aW1l
ID0gbWluaW11bUxpZmV0aW1lOwotICAgIHBhcmFtZXRlcnMudGVybWluYXRpb25UaW1lb3V0ID0g
c2h1dGRvd25UaW1lb3V0OwotCi0gICAgcGxhdGZvcm1Jbml0aWFsaXplUGx1Z2luUHJvY2Vzcyhw
YXJhbWV0ZXJzKTsKLQotICAgIC8vIEluaXRpYWxpemUgdGhlIHBsdWctaW4gaG9zdCBwcm9jZXNz
LgotICAgIG1fY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6UGx1Z2luUHJvY2Vzczo6SW5pdGlh
bGl6ZVBsdWdpblByb2Nlc3MocGFyYW1ldGVycyksIDApOwotCi0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci0gICAgbV9jb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Qcm9jZXNzOjpTZXRRT1Mo
cGx1Z2luUHJvY2Vzc0xhdGVuY3lRT1MoKSwgcGx1Z2luUHJvY2Vzc1Rocm91Z2hwdXRRT1MoKSks
IDApOwotI2VuZGlmCi0KLSAgICBmb3IgKGF1dG8gY2FsbGJhY2tJRCA6IG1fcGVuZGluZ0ZldGNo
V2Vic2l0ZURhdGFSZXF1ZXN0cykKLSAgICAgICAgbV9jb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2Vz
OjpQbHVnaW5Qcm9jZXNzOjpHZXRTaXRlc1dpdGhEYXRhKGNhbGxiYWNrSUQpLCAwKTsKLSAgICBt
X3BlbmRpbmdGZXRjaFdlYnNpdGVEYXRhUmVxdWVzdHMuY2xlYXIoKTsKLQotICAgIGZvciAoYXV0
byYgcmVxdWVzdCA6IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhUmVxdWVzdHMpCi0gICAgICAg
IG1fY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6UGx1Z2luUHJvY2Vzczo6RGVsZXRlV2Vic2l0
ZURhdGEocmVxdWVzdC5tb2RpZmllZFNpbmNlLCByZXF1ZXN0LmNhbGxiYWNrSUQpLCAwKTsKLSAg
ICBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YVJlcXVlc3RzLmNsZWFyKCk7Ci0KLSAgICBmb3Ig
KGF1dG8mIHJlcXVlc3QgOiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUZvckhvc3ROYW1lc1Jl
cXVlc3RzKQotICAgICAgICBtX2Nvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OlBsdWdpblByb2Nl
c3M6OkRlbGV0ZVdlYnNpdGVEYXRhRm9ySG9zdE5hbWVzKHJlcXVlc3QuaG9zdE5hbWVzLCByZXF1
ZXN0LmNhbGxiYWNrSUQpLCAwKTsKLSAgICBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUZvckhv
c3ROYW1lc1JlcXVlc3RzLmNsZWFyKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9udW1QZW5kaW5nQ29ubmVjdGlvblJlcXVlc3RzOyArK2kpCi0gICAgICAgIG1fY29ubmVjdGlv
bi0+c2VuZChNZXNzYWdlczo6UGx1Z2luUHJvY2Vzczo6Q3JlYXRlV2ViUHJvY2Vzc0Nvbm5lY3Rp
b24oKSwgMCk7Ci0gICAgCi0gICAgbV9udW1QZW5kaW5nQ29ubmVjdGlvblJlcXVlc3RzID0gMDsK
LQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmICghUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNp
bmdsZXRvbigpLnByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkKCkpCi0gICAgICAgIHNldFByb2Nl
c3NTdXBwcmVzc2lvbkVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBQbHVnaW5Qcm9j
ZXNzUHJveHk6OmRpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9uKGNvbnN0IElQQzo6QXR0YWNo
bWVudCYgY29ubmVjdGlvbklkZW50aWZpZXIsIGJvb2wgc3VwcG9ydHNBc3luY2hyb25vdXNQbHVn
aW5Jbml0aWFsaXphdGlvbikKLXsKLSAgICBBU1NFUlQoIW1fcGVuZGluZ0Nvbm5lY3Rpb25SZXBs
aWVzLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBHcmFiIHRoZSBmaXJzdCBwZW5kaW5nIGNvbm5lY3Rp
b24gcmVwbHkuCi0gICAgYXV0byByZXBseSA9IG1fcGVuZGluZ0Nvbm5lY3Rpb25SZXBsaWVzLnRh
a2VGaXJzdCgpOwotCi0jaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCi0gICAgcmVwbHkoY29u
bmVjdGlvbklkZW50aWZpZXIsIHN1cHBvcnRzQXN5bmNocm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRp
b24pOwotI2VsaWYgT1MoREFSV0lOKQotICAgIHJlcGx5KElQQzo6QXR0YWNobWVudChjb25uZWN0
aW9uSWRlbnRpZmllci5wb3J0KCksIE1BQ0hfTVNHX1RZUEVfTU9WRV9TRU5EKSwgc3VwcG9ydHNB
c3luY2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbik7Ci0jZWxzZQotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6OmRpZEdldFNpdGVz
V2l0aERhdGEoY29uc3QgVmVjdG9yPFN0cmluZz4mIHNpdGVzLCB1aW50NjRfdCBjYWxsYmFja0lE
KQotewotICAgIGF1dG8gY2FsbGJhY2sgPSBtX3BlbmRpbmdGZXRjaFdlYnNpdGVEYXRhQ2FsbGJh
Y2tzLnRha2UoY2FsbGJhY2tJRCk7Ci0gICAgY2FsbGJhY2soc2l0ZXMpOwotfQotCi12b2lkIFBs
dWdpblByb2Nlc3NQcm94eTo6ZGlkRGVsZXRlV2Vic2l0ZURhdGEodWludDY0X3QgY2FsbGJhY2tJ
RCkKLXsKLSAgICBhdXRvIGNhbGxiYWNrID0gbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFDYWxs
YmFja3MudGFrZShjYWxsYmFja0lEKTsKLSAgICBjYWxsYmFjaygpOwotfQotCi12b2lkIFBsdWdp
blByb2Nlc3NQcm94eTo6ZGlkRGVsZXRlV2Vic2l0ZURhdGFGb3JIb3N0TmFtZXModWludDY0X3Qg
Y2FsbGJhY2tJRCkKLXsKLSAgICBhdXRvIGNhbGxiYWNrID0gbV9wZW5kaW5nRGVsZXRlV2Vic2l0
ZURhdGFGb3JIb3N0TmFtZXNDYWxsYmFja3MudGFrZShjYWxsYmFja0lEKTsKLSAgICBjYWxsYmFj
aygpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNi
NGEyYWVkMTQxYmVhODI0MjVkYWEyNjUwMmFiYTJlYTcyZTkzMDcuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLQotI2luY2x1ZGUgIkF1eGlsaWFyeVByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgIkNv
bm5lY3Rpb24uaCIKLSNpbmNsdWRlICJQbHVnaW5Nb2R1bGVJbmZvLmgiCi0jaW5jbHVkZSAiUGx1
Z2luUHJvY2Vzcy5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLmgiCi0jaW5j
bHVkZSAiUHJvY2Vzc0xhdW5jaGVyLmgiCi0jaW5jbHVkZSAiUHJvY2Vzc1Rocm90dGxlci5oIgot
I2luY2x1ZGUgIlByb2Nlc3NUaHJvdHRsZXJDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNz
UHJveHlNZXNzYWdlc1JlcGxpZXMuaCIKLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLQotI2lmIFBM
QVRGT1JNKENPQ09BKQotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLU9CSkNfQ0xBU1MgTlNP
YmplY3Q7Ci1PQkpDX0NMQVNTIFdLUGxhY2Vob2xkZXJNb2RhbFdpbmRvdzsKLSNlbmRpZgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgUGx1Z2luUHJvY2Vzc01hbmFnZXI7Ci1jbGFzcyBX
ZWJQcm9jZXNzUHJveHk7Ci1zdHJ1Y3QgUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsK
LQotI2lmIFBMVUdJTl9BUkNISVRFQ1RVUkUoVU5JWCkKLXN0cnVjdCBSYXdQbHVnaW5NZXRhRGF0
YSB7Ci0gICAgU3RyaW5nIG5hbWU7Ci0gICAgU3RyaW5nIGRlc2NyaXB0aW9uOwotICAgIFN0cmlu
ZyBtaW1lRGVzY3JpcHRpb247Ci19OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLWlu
dCBwbHVnaW5Qcm9jZXNzTGF0ZW5jeVFPUygpOwotaW50IHBsdWdpblByb2Nlc3NUaHJvdWdocHV0
UU9TKCk7Ci0jZW5kaWYKLQotY2xhc3MgUGx1Z2luUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGlj
IEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHJpdmF0ZSBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50IHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFBsdWdpblByb2Nlc3NQcm94eT4gY3JlYXRlKFBsdWdp
blByb2Nlc3NNYW5hZ2VyKiwgY29uc3QgUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMmLCB1aW50NjRf
dCBwbHVnaW5Qcm9jZXNzVG9rZW4pOwotICAgIH5QbHVnaW5Qcm9jZXNzUHJveHkoKTsKLQotICAg
IGNvbnN0IFBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzJiBwbHVnaW5Qcm9jZXNzQXR0cmlidXRlcygp
IGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXM7IH0KLSAgICB1aW50NjRf
dCBwbHVnaW5Qcm9jZXNzVG9rZW4oKSBjb25zdCB7IHJldHVybiBtX3BsdWdpblByb2Nlc3NUb2tl
bjsgfQotCi0gICAgLy8gQXNrcyB0aGUgcGx1Zy1pbiBwcm9jZXNzIHRvIGNyZWF0ZSBhIG5ldyBj
b25uZWN0aW9uIHRvIGEgd2ViIHByb2Nlc3MuIFRoZSBjb25uZWN0aW9uIGlkZW50aWZpZXIgd2ls
bCBiZQotICAgIC8vIGVuY29kZWQgaW4gdGhlIGdpdmVuIGFyZ3VtZW50IGVuY29kZXIgYW5kIHNl
bnQgYmFjayB0byB0aGUgY29ubmVjdGlvbiBvZiB0aGUgZ2l2ZW4gd2ViIHByb2Nlc3MuCi0gICAg
dm9pZCBnZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbihNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5
OjpHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKLQotICAgIHZvaWQg
ZmV0Y2hXZWJzaXRlRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChWZWN0b3I8U3RyaW5nPik+
JiYpOwotICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGEoV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCAoKT4mJik7Ci0gICAgdm9pZCBkZWxldGVXZWJzaXRlRGF0
YUZvckhvc3ROYW1lcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdE5hbWVzLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkICgpPiYmKTsKLQotI2lmIE9TKExJTlVYKQotICAgIHZvaWQgc2VuZE1lbW9y
eVByZXNzdXJlRXZlbnQoYm9vbCBpc0NyaXRpY2FsKTsKLSNlbmRpZgotCi0gICAgYm9vbCBpc1Zh
bGlkKCkgY29uc3QgeyByZXR1cm4gbV9jb25uZWN0aW9uOyB9Ci0KLSNpZiBQTFVHSU5fQVJDSElU
RUNUVVJFKFVOSVgpCi0gICAgc3RhdGljIGJvb2wgc2NhblBsdWdpbihjb25zdCBTdHJpbmcmIHBs
dWdpblBhdGgsIFJhd1BsdWdpbk1ldGFEYXRhJiByZXN1bHQpOwotI2VuZGlmCi0KLSAgICBQcm9j
ZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSBmaW5hbCB7IHJldHVybiBtX3Rocm90dGxlcjsgfQot
Ci1wcml2YXRlOgotICAgIFBsdWdpblByb2Nlc3NQcm94eShQbHVnaW5Qcm9jZXNzTWFuYWdlcios
IGNvbnN0IFBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzJiwgdWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rv
a2VuKTsKLQotICAgIC8vIEF1eGlsaWFyeVByb2Nlc3NQcm94eQotICAgIEFTQ0lJTGl0ZXJhbCBw
cm9jZXNzTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJQbHVnaW4iX3M7IH0KLQotICAgIHZv
aWQgZ2V0TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHBsYXRmb3JtR2V0TGF1bmNoT3B0aW9uc1dpdGhBdHRyaWJ1dGVzKFBy
b2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYsIGNvbnN0IFBsdWdpblByb2Nlc3NBdHRyaWJ1
dGVzJik7Ci0gICAgdm9pZCBwcm9jZXNzV2lsbFNodXREb3duKElQQzo6Q29ubmVjdGlvbiYpIG92
ZXJyaWRlOwotCi0gICAgdm9pZCBwbHVnaW5Qcm9jZXNzQ3Jhc2hlZE9yRmFpbGVkVG9MYXVuY2go
KTsKLQotICAgIC8vIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQKLSAgICB2b2lkIHNlbmRQcmVwYXJl
VG9TdXNwZW5kKElzU3VzcGVuc2lvbkltbWluZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpIGZpbmFsIHsgY29tcGxldGlvbkhhbmRsZXIoKTsgfQotICAg
IHZvaWQgc2VuZFByb2Nlc3NEaWRSZXN1bWUoKSBmaW5hbCB7IH0KLSAgICBBU0NJSUxpdGVyYWwg
Y2xpZW50TmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJQbHVnaW5Qcm9jZXNzIl9zOyB9Ci0K
LSAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBk
aWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgVW5p
cXVlUmVmPElQQzo6RW5jb2Rlcj4mKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGlkQ2xvc2UoSVBD
OjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpNZXNzYWdlTmFtZSkgb3ZlcnJpZGU7Ci0KLSAgICAv
LyBQcm9jZXNzTGF1bmNoZXI6OkNsaWVudAotICAgIHZvaWQgZGlkRmluaXNoTGF1bmNoaW5nKFBy
b2Nlc3NMYXVuY2hlciosIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllcikgb3ZlcnJpZGU7Ci0K
LSAgICAvLyBNZXNzYWdlIGhhbmRsZXJzCi0gICAgdm9pZCBkaWRDcmVhdGVXZWJQcm9jZXNzQ29u
bmVjdGlvbihjb25zdCBJUEM6OkF0dGFjaG1lbnQmLCBib29sIHN1cHBvcnRzQXN5bmNocm9ub3Vz
UGx1Z2luSW5pdGlhbGl6YXRpb24pOwotICAgIHZvaWQgZGlkR2V0U2l0ZXNXaXRoRGF0YShjb25z
dCBWZWN0b3I8U3RyaW5nPiYgc2l0ZXMsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwotICAgIHZvaWQg
ZGlkRGVsZXRlV2Vic2l0ZURhdGEodWludDY0X3QgY2FsbGJhY2tJRCk7Ci0gICAgdm9pZCBkaWRE
ZWxldGVXZWJzaXRlRGF0YUZvckhvc3ROYW1lcyh1aW50NjRfdCBjYWxsYmFja0lEKTsKLQotI2lm
IFBMQVRGT1JNKENPQ09BKQotICAgIGJvb2wgZ2V0UGx1Z2luUHJvY2Vzc1NlcmlhbE51bWJlcihQ
cm9jZXNzU2VyaWFsTnVtYmVyJik7Ci0gICAgdm9pZCBtYWtlUGx1Z2luUHJvY2Vzc1RoZUZyb250
UHJvY2VzcygpOwotICAgIHZvaWQgbWFrZVVJUHJvY2Vzc1RoZUZyb250UHJvY2VzcygpOwotCi0g
ICAgdm9pZCBzZXRGdWxsc2NyZWVuV2luZG93SXNTaG93aW5nKGJvb2wpOwotICAgIHZvaWQgZW50
ZXJGdWxsc2NyZWVuKCk7Ci0gICAgdm9pZCBleGl0RnVsbHNjcmVlbigpOwotCi0gICAgdm9pZCBz
ZXRNb2RhbFdpbmRvd0lzU2hvd2luZyhib29sKTsKLSAgICB2b2lkIGJlZ2luTW9kYWwoKTsKLSAg
ICB2b2lkIGVuZE1vZGFsKCk7Ci0KLSAgICB2b2lkIGFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZl
KCk7Ci0gICAgdm9pZCBsYXVuY2hQcm9jZXNzKGNvbnN0IFN0cmluZyYgbGF1bmNoUGF0aCwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJik7Ci0gICAgdm9pZCBsYXVuY2hBcHBsaWNhdGlvbkF0VVJMKGNvbnN0IFN0cmluZyYgdXJs
U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRzLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPiYmKTsKLSAgICB2b2lkIG9wZW5VUkwoY29uc3QgU3RyaW5nJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCByZXN1bHQsIGludDMyX3Qgc3RhdHVzLCBTdHJpbmcg
bGF1bmNoZWRVUkxTdHJpbmcpPiYmKTsKLSAgICB2b2lkIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYg
ZnVsbFBhdGgsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwotI2VuZGlmCi0KLSAg
ICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZVBsdWdpblByb2Nlc3MoUGx1Z2luUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycyk7Ci0KLSAgICBQcm9jZXNzVGhyb3R0bGVyIG1fdGhy
b3R0bGVyOwotCi0gICAgLy8gVGhlIHBsdWctaW4gaG9zdCBwcm9jZXNzIG1hbmFnZXIuCi0gICAg
UGx1Z2luUHJvY2Vzc01hbmFnZXIqIG1fcGx1Z2luUHJvY2Vzc01hbmFnZXI7Ci0KLSAgICBQbHVn
aW5Qcm9jZXNzQXR0cmlidXRlcyBtX3BsdWdpblByb2Nlc3NBdHRyaWJ1dGVzOwotICAgIHVpbnQ2
NF90IG1fcGx1Z2luUHJvY2Vzc1Rva2VuOwotCi0gICAgLy8gVGhlIGNvbm5lY3Rpb24gdG8gdGhl
IHBsdWctaW4gaG9zdCBwcm9jZXNzLgotICAgIFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+IG1fY29u
bmVjdGlvbjsKLQotICAgIERlcXVlPE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldFBsdWdp
blByb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5PiBtX3BlbmRpbmdDb25uZWN0aW9uUmVwbGll
czsKLQotICAgIFZlY3Rvcjx1aW50NjRfdD4gbV9wZW5kaW5nRmV0Y2hXZWJzaXRlRGF0YVJlcXVl
c3RzOwotICAgIEhhc2hNYXA8dWludDY0X3QsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKFZlY3Rv
cjxTdHJpbmc+KT4+IG1fcGVuZGluZ0ZldGNoV2Vic2l0ZURhdGFDYWxsYmFja3M7Ci0KLSAgICBz
dHJ1Y3QgRGVsZXRlV2Vic2l0ZURhdGFSZXF1ZXN0IHsKLSAgICAgICAgV2FsbFRpbWUgbW9kaWZp
ZWRTaW5jZTsKLSAgICAgICAgdWludDY0X3QgY2FsbGJhY2tJRDsKLSAgICB9OwotICAgIFZlY3Rv
cjxEZWxldGVXZWJzaXRlRGF0YVJlcXVlc3Q+IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhUmVx
dWVzdHM7Ci0gICAgSGFzaE1hcDx1aW50NjRfdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAoKT4+
IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhQ2FsbGJhY2tzOwotCi0gICAgc3RydWN0IERlbGV0
ZVdlYnNpdGVEYXRhRm9ySG9zdE5hbWVzUmVxdWVzdCB7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+
IGhvc3ROYW1lczsKLSAgICAgICAgdWludDY0X3QgY2FsbGJhY2tJRDsKLSAgICB9OwotICAgIFZl
Y3RvcjxEZWxldGVXZWJzaXRlRGF0YUZvckhvc3ROYW1lc1JlcXVlc3Q+IG1fcGVuZGluZ0RlbGV0
ZVdlYnNpdGVEYXRhRm9ySG9zdE5hbWVzUmVxdWVzdHM7Ci0gICAgSGFzaE1hcDx1aW50NjRfdCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCAoKT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhRm9y
SG9zdE5hbWVzQ2FsbGJhY2tzOwotCi0gICAgLy8gSWYgY3JlYXRlUGx1Z2luQ29ubmVjdGlvbiBp
cyBjYWxsZWQgd2hpbGUgdGhlIHByb2Nlc3MgaXMgc3RpbGwgbGF1bmNoaW5nIHdlJ2xsIGtlZXAg
Y291bnQgb2YgaXQgYW5kIHNlbmQgYSBidW5jaCBvZiByZXF1ZXN0cwotICAgIC8vIHdoZW4gdGhl
IHByb2Nlc3MgZmluaXNoZXMgbGF1bmNoaW5nLgotICAgIHVuc2lnbmVkIG1fbnVtUGVuZGluZ0Nv
bm5lY3Rpb25SZXF1ZXN0czsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIFJldGFpblB0cjxO
U09iamVjdD4gbV9hY3RpdmF0aW9uT2JzZXJ2ZXI7Ci0gICAgUmV0YWluUHRyPFdLUGxhY2Vob2xk
ZXJNb2RhbFdpbmRvdz4gbV9wbGFjZWhvbGRlcldpbmRvdzsKLSAgICBib29sIG1fbW9kYWxXaW5k
b3dJc1Nob3dpbmc7Ci0gICAgYm9vbCBtX2Z1bGxzY3JlZW5XaW5kb3dJc1Nob3dpbmc7Ci0gICAg
dW5zaWduZWQgbV9wcmVGdWxsc2NyZWVuQXBwUHJlc2VudGF0aW9uT3B0aW9uczsKLSNlbmRpZgot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDJhZTA4M2QzNzI3OWNhMDAwMjFjYjVjZmE1ZmQyYTI4MzIzMjAyZTQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkubWVzc2FnZXMuaW4KKysrIC9k
ZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJl
IG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgot
IyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
Ci0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotbWVzc2FnZXMgLT4g
UGx1Z2luUHJvY2Vzc1Byb3h5IHsKLSAgICBEaWRDcmVhdGVXZWJQcm9jZXNzQ29ubmVjdGlvbihJ
UEM6OkF0dGFjaG1lbnQgY29ubmVjdGlvbklkZW50aWZpZXIsIGJvb2wgc3VwcG9ydHNBc3luY2hy
b25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbikKLQotICAgIERpZEdldFNpdGVzV2l0aERhdGEoVmVj
dG9yPFN0cmluZz4gc2l0ZXMsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCi0gICAgRGlkRGVsZXRlV2Vi
c2l0ZURhdGEodWludDY0X3QgY2FsbGJhY2tJRCkKLSAgICBEaWREZWxldGVXZWJzaXRlRGF0YUZv
ckhvc3ROYW1lcyh1aW50NjRfdCBjYWxsYmFja0lEKQotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0g
ICAgU2V0TW9kYWxXaW5kb3dJc1Nob3dpbmcoYm9vbCBtb2RhbFdpbmRvd0lzU2hvd2luZykKLSAg
ICBTZXRGdWxsc2NyZWVuV2luZG93SXNTaG93aW5nKGJvb2wgZnVsbHNjcmVlbldpbmRvd0lzU2hv
d2luZykKLSAgICAKLSAgICAjIFJldHVybnMgdHJ1ZSBpZiB0aGUgVUkgcHJvY2VzcyBsYXVuY2hl
ZCB0aGUgcHJvY2Vzcy4KLSAgICBMYXVuY2hQcm9jZXNzKFN0cmluZyBsYXVuY2hQYXRoLCBWZWN0
b3I8U3RyaW5nPiBhcmd1bWVudHMpIC0+IChib29sIHJlc3VsdCkgU3luY2hyb25vdXMKLQotICAg
ICMgUmV0dXJucyB0cnVlIGlmIHRoZSBVSSBwcm9jZXNzIGxhdW5jaGVkIHRoZSBhcHBsaWNhdGlv
bi4KLSAgICBMYXVuY2hBcHBsaWNhdGlvbkF0VVJMKFN0cmluZyB1cmwsIFZlY3RvcjxTdHJpbmc+
IGFyZ3VtZW50cykgLT4gKGJvb2wgcmVzdWx0KSBTeW5jaHJvbm91cwotCi0gICAgIyBSZXR1cm5z
IHRydWUgaWYgdGhlIFVJIHByb2Nlc3MgZGlkIG9wZW4gdGhlIFVSTC4KLSAgICBPcGVuVVJMKFN0
cmluZyB1cmxTdHJpbmcpIC0+IChib29sIHJlc3VsdCwgaW50MzJfdCBzdGF0dXMsIFN0cmluZyBs
YXVuY2hlZFVSTFN0cmluZykgU3luY2hyb25vdXMKLSAgICAKLSAgICAjIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgVUkgcHJvY2VzcyBkaWQgb3BlbiB0aGUgZmlsZS4KLSAgICBPcGVuRmlsZShTdHJpbmcg
ZnVsbFBhdGgpIC0+IChib29sIHJlc3VsdCkgU3luY2hyb25vdXMKLSNlbmRpZgotfQotCi0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BsdWdpbnMvbWFjL1BsdWdp
bkluZm9TdG9yZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BsdWdpbnMvbWFjL1Bs
dWdpbkluZm9TdG9yZU1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZmMWIy
MmY0OWNjNjQ1ZjdmMTE4ZjYxMTU0MDU3ODUxZGFmNjc2ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QbHVnaW5z
L21hYy9QbHVnaW5JbmZvU3RvcmVNYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUGx1Z2lu
SW5mb1N0b3JlLmgiCi0KLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJOZXRzY2FwZVBsdWdpbk1v
ZHVsZS5oIgotI2ltcG9ydCAiU2FuZGJveFV0aWxpdGllcy5oIgotI2ltcG9ydCA8V2ViQ29yZS9Q
bHVnaW5CbG9ja2xpc3QuaD4KLSNpbXBvcnQgPHB3ZC5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0
ci5oPgotI2ltcG9ydCA8d3RmL2NvY29hL1R5cGVDYXN0c0NvY29hLmg+Ci0jaW1wb3J0IDx3dGYv
Y29jb2EvVmVjdG9yQ29jb2EuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotVmVjdG9yPFN0cmlu
Zz4gUGx1Z2luSW5mb1N0b3JlOjpwbHVnaW5zRGlyZWN0b3JpZXMoKQotewotICAgIFZlY3RvcjxT
dHJpbmc+IHBsdWdpbnNEaXJlY3RvcmllczsKLSAgICBwbHVnaW5zRGlyZWN0b3JpZXMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eSgyKTsKLQotICAgIEFTQ0lJTGl0ZXJhbCBwbHVnaW5QYXRoIHsgIi9M
aWJyYXJ5L0ludGVybmV0IFBsdWctSW5zIl9zIH07Ci0KLSAgICBpZiAoYXV0byogcHcgPSBnZXRw
d3VpZChnZXR1aWQoKSkpCi0gICAgICAgIHBsdWdpbnNEaXJlY3Rvcmllcy51bmNoZWNrZWRBcHBl
bmQobWFrZVN0cmluZyhwdy0+cHdfZGlyLCBwbHVnaW5QYXRoKSk7Ci0gICAgcGx1Z2luc0RpcmVj
dG9yaWVzLnVuY2hlY2tlZEFwcGVuZChwbHVnaW5QYXRoKTsKLSAgICAKLSAgICByZXR1cm4gcGx1
Z2luc0RpcmVjdG9yaWVzOwotfQotICAgIAotVmVjdG9yPFN0cmluZz4gUGx1Z2luSW5mb1N0b3Jl
OjpwbHVnaW5QYXRoc0luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5KQotewotICAg
IGF1dG8gZGlyZWN0b3J5TlNTdHJpbmcgPSBicmlkZ2VfY2FzdChkaXJlY3RvcnkuY3JlYXRlQ0ZT
dHJpbmcoKSk7Ci0gICAgcmV0dXJuIG1ha2VWZWN0b3IoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRN
YW5hZ2VyXSBjb250ZW50c09mRGlyZWN0b3J5QXRQYXRoOmRpcmVjdG9yeU5TU3RyaW5nLmdldCgp
IGVycm9yOm5pbF0sIFsmXSAoaWQgZmlsZW5hbWUpIC0+IHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiB7
Ci0gICAgICAgIHJldHVybiBbZGlyZWN0b3J5TlNTdHJpbmcgc3RyaW5nQnlBcHBlbmRpbmdQYXRo
Q29tcG9uZW50OmZpbGVuYW1lXTsKLSAgICB9KTsKLX0KLQotVmVjdG9yPFN0cmluZz4gUGx1Z2lu
SW5mb1N0b3JlOjppbmRpdmlkdWFsUGx1Z2luUGF0aHMoKQotewotICAgIHJldHVybiBWZWN0b3I8
U3RyaW5nPigpOwotfQotCi1ib29sIFBsdWdpbkluZm9TdG9yZTo6Z2V0UGx1Z2luSW5mbyhjb25z
dCBTdHJpbmcmIHBsdWdpblBhdGgsIFBsdWdpbk1vZHVsZUluZm8mIHBsdWdpbikKLXsKLSAgICBy
ZXR1cm4gTmV0c2NhcGVQbHVnaW5Nb2R1bGU6OmdldFBsdWdpbkluZm8ocGx1Z2luUGF0aCwgcGx1
Z2luKTsKLX0KLQotc3RhdGljIGJvb2wgc2hvdWxkQmxvY2tQbHVnaW4oY29uc3QgUGx1Z2luTW9k
dWxlSW5mbyYgcGx1Z2luKQotewotICAgIFBsdWdpbk1vZHVsZUxvYWRQb2xpY3kgbG9hZFBvbGlj
eSA9IFBsdWdpbkluZm9TdG9yZTo6ZGVmYXVsdExvYWRQb2xpY3lGb3JQbHVnaW4ocGx1Z2luKTsK
LSAgICByZXR1cm4gbG9hZFBvbGljeSA9PSBQbHVnaW5Nb2R1bGVCbG9ja2VkRm9yU2VjdXJpdHkg
fHwgbG9hZFBvbGljeSA9PSBQbHVnaW5Nb2R1bGVCbG9ja2VkRm9yQ29tcGF0aWJpbGl0eTsKLX0K
LQotYm9vbCBQbHVnaW5JbmZvU3RvcmU6OnNob3VsZFVzZVBsdWdpbihWZWN0b3I8UGx1Z2luTW9k
dWxlSW5mbz4mIGFscmVhZHlMb2FkZWRQbHVnaW5zLCBjb25zdCBQbHVnaW5Nb2R1bGVJbmZvJiBw
bHVnaW4pCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbHJlYWR5TG9hZGVkUGx1Z2lu
cy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBQbHVnaW5Nb2R1bGVJbmZvJiBsb2FkZWRQ
bHVnaW4gPSBhbHJlYWR5TG9hZGVkUGx1Z2luc1tpXTsKLQotICAgICAgICAvLyBJZiBhIHBsdWct
aW4gd2l0aCB0aGUgc2FtZSBidW5kbGUgaWRlbnRpZmllciBhbHJlYWR5IGV4aXN0cywgd2UgZG9u
J3Qgd2FudCB0byBsb2FkIGl0LgotICAgICAgICAvLyBIb3dldmVyLCBpZiB0aGUgYWxyZWFkeSBl
eGlzdGluZyBwbHVnLWluIGlzIGJsb2NrZWQgd2Ugd2FudCB0byByZXBsYWNlIGl0IHdpdGggdGhl
IG5ldyBwbHVnLWluLgotICAgICAgICBpZiAobG9hZGVkUGx1Z2luLmJ1bmRsZUlkZW50aWZpZXIg
PT0gcGx1Z2luLmJ1bmRsZUlkZW50aWZpZXIpIHsKLSAgICAgICAgICAgIGlmICghc2hvdWxkQmxv
Y2tQbHVnaW4obG9hZGVkUGx1Z2luKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgICAgIGFscmVhZHlMb2FkZWRQbHVnaW5zLnJlbW92ZShpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHBsdWdpbi5idW5kbGVJZGVudGlm
aWVyID09ICJjb20uYXBwbGUuamF2YS5KYXZhQXBwbGV0UGx1Z2luIikgewotICAgICAgICBMT0co
UGx1Z2lucywgIklnbm9yaW5nIGNvbS5hcHBsZS5qYXZhLkphdmFBcHBsZXRQbHVnaW4iKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChjdXJyZW50UHJvY2Vzc0lzU2Fu
ZGJveGVkKCkgJiYgIXBsdWdpbi5oYXNTYW5kYm94UHJvZmlsZSkgewotICAgICAgICBMT0coUGx1
Z2lucywgIklnbm9yaW5nIHVuc2FuZGJveGVkIHBsdWctaW4gJXMiLCBwbHVnaW4uYnVuZGxlSWRl
bnRpZmllci51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1QbHVnaW5Nb2R1bGVMb2FkUG9saWN5IFBsdWdpbkluZm9T
dG9yZTo6ZGVmYXVsdExvYWRQb2xpY3lGb3JQbHVnaW4oY29uc3QgUGx1Z2luTW9kdWxlSW5mbyYg
cGx1Z2luKQotewotICAgIHN3aXRjaCAoUGx1Z2luQmxvY2tsaXN0Ojpsb2FkUG9saWN5Rm9yUGx1
Z2luVmVyc2lvbihwbHVnaW4uYnVuZGxlSWRlbnRpZmllciwgcGx1Z2luLnZlcnNpb25TdHJpbmcp
KSB7Ci0gICAgY2FzZSBQbHVnaW5CbG9ja2xpc3Q6OkxvYWRQb2xpY3k6OkxvYWROb3JtYWxseToK
LSAgICAgICAgcmV0dXJuIFBsdWdpbk1vZHVsZUxvYWROb3JtYWxseTsKLSAgICBjYXNlIFBsdWdp
bkJsb2NrbGlzdDo6TG9hZFBvbGljeTo6QmxvY2tlZEZvclNlY3VyaXR5OgotICAgICAgICByZXR1
cm4gUGx1Z2luTW9kdWxlQmxvY2tlZEZvclNlY3VyaXR5OwotICAgIGNhc2UgUGx1Z2luQmxvY2ts
aXN0OjpMb2FkUG9saWN5OjpCbG9ja2VkRm9yQ29tcGF0aWJpbGl0eToKLSAgICAgICAgcmV0dXJu
IFBsdWdpbk1vZHVsZUJsb2NrZWRGb3JDb21wYXRpYmlsaXR5OwotICAgIH0KLX0KLQotUGx1Z2lu
TW9kdWxlSW5mbyBQbHVnaW5JbmZvU3RvcmU6OmZpbmRQbHVnaW5XaXRoQnVuZGxlSWRlbnRpZmll
cihjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpCi17Ci0gICAgbG9hZFBsdWdpbnNJZk5l
Y2Vzc2FyeSgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BsdWdpbnMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgaWYgKG1fcGx1Z2luc1tpXS5idW5kbGVJZGVudGlmaWVyID09IGJ1
bmRsZUlkZW50aWZpZXIpCi0gICAgICAgICAgICByZXR1cm4gbV9wbHVnaW5zW2ldOwotICAgIH0K
LSAgICAKLSAgICByZXR1cm4gUGx1Z2luTW9kdWxlSW5mbygpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QbHVnaW5zL21h
Yy9QbHVnaW5Qcm9jZXNzTWFuYWdlck1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Bs
dWdpbnMvbWFjL1BsdWdpblByb2Nlc3NNYW5hZ2VyTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBiOTBhMzE0NDVlODUxZDNmNDEzOTNlNjczNjRhNWU5ZjhkZDQyOWQzLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1BsdWdpbnMvbWFjL1BsdWdpblByb2Nlc3NNYW5hZ2VyTWFjLm1tCisrKyAvZGV2
L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQotCi0jaW1wb3J0ICJQbHVnaW5Qcm9jZXNzUHJveHkuaCIKLSNpbXBvcnQgPFdl
YkNvcmUvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
dm9pZCBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJs
ZWQoUmVmQ291bnRlckV2ZW50IGV2ZW50KQotewotICAgIHNpemVfdCBkaXNhYmxlQ291bnQgPSBt
X3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKTsKLQotICAg
IC8vIFdlIG9ubHkgY2FyZSBhYm91dCB6ZXJvL25vbi16ZXJvIGVkZ2UgY2hhbmdlczsgaWdub3Jl
IGNhc2VzIHdoZXJlIHRoZSBjb3VudCB3YXMgcHJldmlvdXNseSBub24temVybywgYW5kIHN0aWxs
IGlzLgotICAgIGlmIChkaXNhYmxlQ291bnQgPj0gMiB8fCAoZGlzYWJsZUNvdW50ID09IDEgJiYg
ZXZlbnQgPT0gUmVmQ291bnRlckV2ZW50OjpEZWNyZW1lbnQpKQotICAgICAgICByZXR1cm47Ci0g
ICAgQVNTRVJUKChldmVudCA9PSBSZWZDb3VudGVyRXZlbnQ6OkluY3JlbWVudCAmJiBkaXNhYmxl
Q291bnQgPT0gMSkKLSAgICAgICAgfHwgKGV2ZW50ID09IFJlZkNvdW50ZXJFdmVudDo6RGVjcmVt
ZW50ICYmICFkaXNhYmxlQ291bnQpKTsKLQotICAgIGJvb2wgZW5hYmxlZCA9ICFkaXNhYmxlQ291
bnQ7Ci0gICAgZm9yIChhdXRvJiBwbHVnaW5Qcm9jZXNzIDogbV9wbHVnaW5Qcm9jZXNzZXMpCi0g
ICAgICAgIHBsdWdpblByb2Nlc3MtPnNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoZW5hYmxl
ZCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNldEV4cGVyaW1lbnRhbFBsdWdJ
blNhbmRib3hQcm9maWxlc0VuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIG1fZXhwZXJpbWVu
dGFsUGx1Z0luU2FuZGJveFByb2ZpbGVzRW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgV2ViQ29yZTo6
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRFeHBlcmltZW50YWxQ
bHVnSW5TYW5kYm94UHJvZmlsZXNFbmFibGVkKGVuYWJsZWQpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1Z2lucy9tYWMvUGx1Z2luUHJvY2Vzc1By
b3h5TWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1Z2lucy9tYWMvUGx1Z2luUHJv
Y2Vzc1Byb3h5TWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzRiYTYwOGI0
NzIyYmYwYjJlMzIzMTA3ZDkyNzQwZTA3OGMyNDFlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BsdWdpbnMvbWFj
L1BsdWdpblByb2Nlc3NQcm94eU1hYy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDM2MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlBsdWdpblBy
b2Nlc3NQcm94eS5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbXBv
cnQgIlBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKLSNpbXBvcnQgIlBsdWdpblBy
b2Nlc3NNYW5hZ2VyLmgiCi0jaW1wb3J0ICJQbHVnaW5Qcm9jZXNzTWVzc2FnZXMuaCIKLSNpbXBv
cnQgIlNhbmRib3hVdGlsaXRpZXMuaCIKLSNpbXBvcnQgPFF1YXJ0ekNvcmUvQ0FSZW1vdGVMYXll
clNlcnZlci5oPgotI2ltcG9ydCA8Y3J0X2V4dGVybnMuaD4KLSNpbXBvcnQgPG1hY2gtby9keWxk
Lmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgotI2ltcG9ydCA8c3Bhd24u
aD4KLSNpbXBvcnQgPHd0Zi9GaWxlU3lzdGVtLmg+Ci0jaW1wb3J0IDx3dGYvUHJvY2Vzc1ByaXZp
bGVnZS5oPgotI2ltcG9ydCA8d3RmL1VSTC5oPgotI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNv
Y29hLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLUBpbnRlcmZhY2UgV0tQbGFj
ZWhvbGRlck1vZGFsV2luZG93IDogTlNXaW5kb3cgCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBX
S1BsYWNlaG9sZGVyTW9kYWxXaW5kb3cKLQotLy8gUHJldmVudCBOU0FwcCBmcm9tIGNhbGxpbmcg
cmVxdWVzdFVzZXJBdHRlbnRpb246IHdoZW4gdGhlIHdpbmRvdyBpcyBzaG93biAKLS8vIG1vZGFs
bHksIGV2ZW4gaWYgdGhlIGFwcCBpcyBpbmFjdGl2ZS4gU2VlIDY4MjMwNDkuCi0tIChCT09MKV93
YW50c1VzZXJBdHRlbnRpb24KLXsKLSAgICByZXR1cm4gTk87ICAgCi19Ci0KLUBlbmQKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0gICAgCi12b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6cGxhdGZvcm1H
ZXRMYXVuY2hPcHRpb25zV2l0aEF0dHJpYnV0ZXMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRp
b25zJiBsYXVuY2hPcHRpb25zLCBjb25zdCBQbHVnaW5Qcm9jZXNzQXR0cmlidXRlcyYgcGx1Z2lu
UHJvY2Vzc0F0dHJpYnV0ZXMpCi17Ci0gICAgQVNTRVJUKHBsdWdpblByb2Nlc3NBdHRyaWJ1dGVz
Lm1vZHVsZUluZm8ucGx1Z2luQXJjaGl0ZWN0dXJlID09IENQVV9UWVBFX1g4Nl82NCk7Ci0gICAg
bGF1bmNoT3B0aW9ucy5wcm9jZXNzVHlwZSA9IFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6
OlBsdWdpbjsKLQotICAgIGxhdW5jaE9wdGlvbnMuZXh0cmFJbml0aWFsaXphdGlvbkRhdGEuYWRk
KCJwbHVnaW4tcGF0aCIsIHBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLm1vZHVsZUluZm8ucGF0aCk7
Ci0KLSAgICBpZiAoUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLmV4cGVyaW1lbnRh
bFBsdWdJblNhbmRib3hQcm9maWxlc0VuYWJsZWQoKSkKLSAgICAgICAgbGF1bmNoT3B0aW9ucy5l
eHRyYUluaXRpYWxpemF0aW9uRGF0YS5hZGQoImV4cGVyaW1lbnRhbC1zYW5kYm94LXBsdWdpbiIs
ICIxIik7Ci0KLSAgICBpZiAocGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMuc2FuZGJveFBvbGljeSA9
PSBQbHVnaW5Qcm9jZXNzU2FuZGJveFBvbGljeTo6VW5zYW5kYm94ZWQpIHsKLSAgICAgICAgaWYg
KCFjdXJyZW50UHJvY2Vzc0lzU2FuZGJveGVkKCkpCi0gICAgICAgICAgICBsYXVuY2hPcHRpb25z
LmV4dHJhSW5pdGlhbGl6YXRpb25EYXRhLmFkZCgiZGlzYWJsZS1zYW5kYm94IiwgIjEiKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJNYWluIHByb2Nlc3MgaXMgc2Fu
ZGJveGVkLCBpZ25vcmluZyBwbHVnLWluIHNhbmRib3ggcG9saWN5Iik7Ci0gICAgfQotfQotCi12
b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6cGxhdGZvcm1Jbml0aWFsaXplUGx1Z2luUHJvY2VzcyhQ
bHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQotewotICAgIC8vIEZv
ciBub3cgb25seSBGbGFzaCBpcyBrbm93biB0byBiZWhhdmUgd2l0aCBhc3luY2hyb25vdXMgcGx1
Zy1pbiBpbml0aWFsaXphdGlvbi4KLSAgICBwYXJhbWV0ZXJzLnN1cHBvcnRzQXN5bmNocm9ub3Vz
UGx1Z2luSW5pdGlhbGl6YXRpb24gPSBtX3BsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLm1vZHVsZUlu
Zm8uYnVuZGxlSWRlbnRpZmllciA9PSAiY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyLnBsdWdp
biI7Ci0KLSAgICBwYXJhbWV0ZXJzLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdQb3J0ID0gTWFjaFNl
bmRSaWdodDo6Y3JlYXRlKFtDQVJlbW90ZUxheWVyU2VydmVyIHNoYXJlZFNlcnZlcl0uc2VydmVy
UG9ydCk7Ci0gICAgcGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dCA9IGFkb3B0Q0YoX0NGTmV0
d29ya0NvcHlBVFNDb250ZXh0KCkpOwotfQotCi1ib29sIFBsdWdpblByb2Nlc3NQcm94eTo6Z2V0
UGx1Z2luUHJvY2Vzc1NlcmlhbE51bWJlcihQcm9jZXNzU2VyaWFsTnVtYmVyJiBwbHVnaW5Qcm9j
ZXNzU2VyaWFsTnVtYmVyKQotewotICAgIHBpZF90IHBsdWdpblByb2Nlc3NQSUQgPSBwcm9jZXNz
SWRlbnRpZmllcigpOwotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0g
ICAgcmV0dXJuIEdldFByb2Nlc3NGb3JQSUQocGx1Z2luUHJvY2Vzc1BJRCwgJnBsdWdpblByb2Nl
c3NTZXJpYWxOdW1iZXIpID09IG5vRXJyOwotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJ
T05TX0VORAotfQotCi12b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6bWFrZVBsdWdpblByb2Nlc3NU
aGVGcm9udFByb2Nlc3MoKQotewotICAgIFByb2Nlc3NTZXJpYWxOdW1iZXIgcGx1Z2luUHJvY2Vz
c1NlcmlhbE51bWJlcjsKLSAgICBpZiAoIWdldFBsdWdpblByb2Nlc3NTZXJpYWxOdW1iZXIocGx1
Z2luUHJvY2Vzc1NlcmlhbE51bWJlcikpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFMTE9XX0RF
UFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgU2V0RnJvbnRQcm9jZXNzKCZwbHVnaW5Q
cm9jZXNzU2VyaWFsTnVtYmVyKTsKLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19F
TkQKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6Om1ha2VVSVByb2Nlc3NUaGVGcm9udFBy
b2Nlc3MoKQotewotICAgIFByb2Nlc3NTZXJpYWxOdW1iZXIgcHJvY2Vzc1NlcmlhbE51bWJlcjsK
LSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIEdldEN1cnJlbnRQ
cm9jZXNzKCZwcm9jZXNzU2VyaWFsTnVtYmVyKTsKLSAgICBTZXRGcm9udFByb2Nlc3MoJnByb2Nl
c3NTZXJpYWxOdW1iZXIpOyAgICAgICAgICAgIAotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFS
QVRJT05TX0VORAotfQotCi12b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6c2V0RnVsbHNjcmVlbldp
bmRvd0lzU2hvd2luZyhib29sIGZ1bGxzY3JlZW5XaW5kb3dJc1Nob3dpbmcpCi17Ci0gICAgaWYg
KG1fZnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZyA9PSBmdWxsc2NyZWVuV2luZG93SXNTaG93aW5n
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Z1bGxzY3JlZW5XaW5kb3dJc1Nob3dpbmcgPSBm
dWxsc2NyZWVuV2luZG93SXNTaG93aW5nOwotICAgIGlmIChtX2Z1bGxzY3JlZW5XaW5kb3dJc1No
b3dpbmcpCi0gICAgICAgIGVudGVyRnVsbHNjcmVlbigpOwotICAgIGVsc2UKLSAgICAgICAgZXhp
dEZ1bGxzY3JlZW4oKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6OmVudGVyRnVsbHNj
cmVlbigpCi17Ci0gICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVn
ZTo6Q2FuQ29tbXVuaWNhdGVXaXRoV2luZG93U2VydmVyKSk7Ci0gICAgLy8gR2V0IHRoZSBjdXJy
ZW50IHByZXNlbnRhdGlvbiBvcHRpb25zLgotICAgIG1fcHJlRnVsbHNjcmVlbkFwcFByZXNlbnRh
dGlvbk9wdGlvbnMgPSBbTlNBcHAgcHJlc2VudGF0aW9uT3B0aW9uc107Ci0KLSAgICAvLyBGaWd1
cmUgb3V0IHdoaWNoIHByZXNlbnRhdGlvbiBvcHRpb25zIHRvIHVzZS4KLSAgICB1bnNpZ25lZCBw
cmVzZW50YXRpb25PcHRpb25zID0gbV9wcmVGdWxsc2NyZWVuQXBwUHJlc2VudGF0aW9uT3B0aW9u
cyAmIH4oTlNBcHBsaWNhdGlvblByZXNlbnRhdGlvbkF1dG9IaWRlRG9jayB8IE5TQXBwbGljYXRp
b25QcmVzZW50YXRpb25BdXRvSGlkZU1lbnVCYXIpOwotICAgIHByZXNlbnRhdGlvbk9wdGlvbnMg
fD0gTlNBcHBsaWNhdGlvblByZXNlbnRhdGlvbkhpZGVEb2NrIHwgTlNBcHBsaWNhdGlvblByZXNl
bnRhdGlvbkhpZGVNZW51QmFyOwotCi0gICAgW05TQXBwIHNldFByZXNlbnRhdGlvbk9wdGlvbnM6
cHJlc2VudGF0aW9uT3B0aW9uc107Ci0gICAgbWFrZVBsdWdpblByb2Nlc3NUaGVGcm9udFByb2Nl
c3MoKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6OmV4aXRGdWxsc2NyZWVuKCkKLXsK
LSAgICAvLyBJZiB0aGUgcGx1Zy1pbiBob3N0IGlzIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIHRo
ZW4gd2Ugc2hvdWxkIGJyaW5nIG91cnNlbHZlcyB0byB0aGUgZnJvbnQgd2hlbiBpdCBleGl0cyBm
dWxsLXNjcmVlbiBtb2RlLgotICAgIFByb2Nlc3NTZXJpYWxOdW1iZXIgZnJvbnRQcm9jZXNzU2Vy
aWFsTnVtYmVyOwotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAg
R2V0RnJvbnRQcm9jZXNzKCZmcm9udFByb2Nlc3NTZXJpYWxOdW1iZXIpOwotICAgIEFMTE9XX0RF
UFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotCi0gICAgLy8gVGhlIFVJIHByb2Nlc3MgbXVzdCBi
ZSB0aGUgZnJvbnQgcHJvY2VzcyBpbiBvcmRlciB0byBjaGFuZ2UgdGhlIHByZXNlbnRhdGlvbiBt
b2RlLgotICAgIG1ha2VVSVByb2Nlc3NUaGVGcm9udFByb2Nlc3MoKTsKLSAgICBbTlNBcHAgc2V0
UHJlc2VudGF0aW9uT3B0aW9uczptX3ByZUZ1bGxzY3JlZW5BcHBQcmVzZW50YXRpb25PcHRpb25z
XTsKLQotICAgIFByb2Nlc3NTZXJpYWxOdW1iZXIgcGx1Z2luUHJvY2Vzc1NlcmlhbE51bWJlcjsK
LSAgICBpZiAoIWdldFBsdWdpblByb2Nlc3NTZXJpYWxOdW1iZXIocGx1Z2luUHJvY2Vzc1Nlcmlh
bE51bWJlcikpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHRoZSBwbHVnLWluIHByb2Nl
c3Mgd2FzIG5vdCB0aGUgZnJvbnQgcHJvY2Vzcywgc3dpdGNoIGJhY2sgdG8gdGhlIHByZXZpb3Vz
IGZyb250IHByb2Nlc3MuCi0gICAgLy8gKE90aGVyd2lzZSB3ZSdsbCBrZWVwIHRoZSBVSSBwcm9j
ZXNzIGFzIHRoZSBmcm9udCBwcm9jZXNzKS4KLSAgICBCb29sZWFuIGlzUGx1Z2luUHJvY2Vzc0Zy
b250UHJvY2VzczsKLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAg
IFNhbWVQcm9jZXNzKCZmcm9udFByb2Nlc3NTZXJpYWxOdW1iZXIsICZwbHVnaW5Qcm9jZXNzU2Vy
aWFsTnVtYmVyLCAmaXNQbHVnaW5Qcm9jZXNzRnJvbnRQcm9jZXNzKTsKLSAgICBBTExPV19ERVBS
RUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLSAgICBpZiAoIWlzUGx1Z2luUHJvY2Vzc0Zyb250UHJv
Y2VzcykgewotICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAg
ICAgICBTZXRGcm9udFByb2Nlc3MoJmZyb250UHJvY2Vzc1NlcmlhbE51bWJlcik7Ci0gICAgICAg
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotICAgIH0KLX0KLQotdm9pZCBQbHVn
aW5Qcm9jZXNzUHJveHk6OnNldE1vZGFsV2luZG93SXNTaG93aW5nKGJvb2wgbW9kYWxXaW5kb3dJ
c1Nob3dpbmcpCi17Ci0gICAgaWYgKG1vZGFsV2luZG93SXNTaG93aW5nID09IG1fbW9kYWxXaW5k
b3dJc1Nob3dpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX21vZGFsV2luZG93SXNT
aG93aW5nID0gbW9kYWxXaW5kb3dJc1Nob3dpbmc7Ci0gICAgCi0gICAgaWYgKG1fbW9kYWxXaW5k
b3dJc1Nob3dpbmcpCi0gICAgICAgIGJlZ2luTW9kYWwoKTsKLSAgICBlbHNlCi0gICAgICAgIGVu
ZE1vZGFsKCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjpiZWdpbk1vZGFsKCkKLXsK
LSAgICBBU1NFUlQoIW1fcGxhY2Vob2xkZXJXaW5kb3cpOwotICAgIEFTU0VSVCghbV9hY3RpdmF0
aW9uT2JzZXJ2ZXIpOwotICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2
aWxlZ2U6OkNhbkNvbW11bmljYXRlV2l0aFdpbmRvd1NlcnZlcikpOwotCi0gICAgbV9wbGFjZWhv
bGRlcldpbmRvdyA9IGFkb3B0TlMoW1tXS1BsYWNlaG9sZGVyTW9kYWxXaW5kb3cgYWxsb2NdIGlu
aXRXaXRoQ29udGVudFJlY3Q6TlNNYWtlUmVjdCgwLCAwLCAxLCAxKSBzdHlsZU1hc2s6TlNXaW5k
b3dTdHlsZU1hc2tCb3JkZXJsZXNzIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZl
cjpZRVNdKTsKLSAgICBbbV9wbGFjZWhvbGRlcldpbmRvdyBzZXRSZWxlYXNlZFdoZW5DbG9zZWQ6
Tk9dOwotICAgIAotICAgIG1fYWN0aXZhdGlvbk9ic2VydmVyID0gW1tOU05vdGlmaWNhdGlvbkNl
bnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlckZvck5hbWU6TlNBcHBsaWNhdGlvbldpbGxC
ZWNvbWVBY3RpdmVOb3RpZmljYXRpb24gb2JqZWN0Ok5TQXBwIHF1ZXVlOm5pbAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVzaW5nQmxvY2s6XihOU05vdGlmaWNhdGlvbiAqKXsgYXBwbGljYXRpb25EaWRCZWNv
bWVBY3RpdmUoKTsgfV07Ci0KLSAgICAvLyBUaGUgY2FsbCB0byAtW05TQXBwIHJ1bk1vZGFsRm9y
V2luZG93Ol0gYmVsb3cgd2lsbCBydW4gYSBuZXN0ZWQgcnVuIGxvb3AsIGFuZCBpZiB0aGUgcGx1
Zy1pbiBwcm9jZXNzCi0gICAgLy8gY3Jhc2hlcyB0aGUgUGx1Z2luUHJvY2Vzc1Byb3h5IG9iamVj
dCBjYW4gYmUgZGVzdHJveWVkLiBQcm90ZWN0IGFnYWluc3QgdGhpcyBoZXJlLgotICAgIFJlZjxQ
bHVnaW5Qcm9jZXNzUHJveHk+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgW05TQXBwIHJ1bk1vZGFs
Rm9yV2luZG93Om1fcGxhY2Vob2xkZXJXaW5kb3cuZ2V0KCldOwotICAgIAotICAgIFttX3BsYWNl
aG9sZGVyV2luZG93IG9yZGVyT3V0Om5pbF07Ci0gICAgbV9wbGFjZWhvbGRlcldpbmRvdyA9IG51
bGxwdHI7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjplbmRNb2RhbCgpCi17Ci0gICAg
QVNTRVJUKG1fcGxhY2Vob2xkZXJXaW5kb3cpOwotICAgIEFTU0VSVChtX2FjdGl2YXRpb25PYnNl
cnZlcik7Ci0gICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6
Q2FuQ29tbXVuaWNhdGVXaXRoV2luZG93U2VydmVyKSk7Ci0KLSAgICBbW05TTm90aWZpY2F0aW9u
Q2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fYWN0aXZhdGlvbk9ic2VydmVy
LmdldCgpXTsKLSAgICBtX2FjdGl2YXRpb25PYnNlcnZlciA9IG51bGxwdHI7Ci0gICAgCi0gICAg
W05TQXBwIHN0b3BNb2RhbF07Ci0KLSAgICBtYWtlVUlQcm9jZXNzVGhlRnJvbnRQcm9jZXNzKCk7
Ci19Ci0gICAgCi12b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6YXBwbGljYXRpb25EaWRCZWNvbWVB
Y3RpdmUoKQotewotICAgIG1ha2VQbHVnaW5Qcm9jZXNzVGhlRnJvbnRQcm9jZXNzKCk7Ci19Ci0K
LXN0YXRpYyBib29sIGlzRmxhc2hVcGRhdGVyKGNvbnN0IFN0cmluZyYgbGF1bmNoUGF0aCwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cykKLXsKLSAgICBpZiAobGF1bmNoUGF0aCAhPSAi
L0FwcGxpY2F0aW9ucy9VdGlsaXRpZXMvQWRvYmUgRmxhc2ggUGxheWVyIEluc3RhbGwgTWFuYWdl
ci5hcHAvQ29udGVudHMvTWFjT1MvQWRvYmUgRmxhc2ggUGxheWVyIEluc3RhbGwgTWFuYWdlciIp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDEp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhcmd1bWVudHNbMF0gIT0gIi11cGRh
dGUiKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3Rh
dGljIGJvb2wgc2hvdWxkTGF1bmNoUHJvY2Vzcyhjb25zdCBQbHVnaW5Qcm9jZXNzQXR0cmlidXRl
cyYgcGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMsIGNvbnN0IFN0cmluZyYgbGF1bmNoUGF0aCwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cykKLXsKLSAgICBpZiAocGx1Z2luUHJvY2Vzc0F0
dHJpYnV0ZXMubW9kdWxlSW5mby5idW5kbGVJZGVudGlmaWVyID09ICJjb20ubWFjcm9tZWRpYS5G
bGFzaCBQbGF5ZXIucGx1Z2luIikKLSAgICAgICAgcmV0dXJuIGlzRmxhc2hVcGRhdGVyKGxhdW5j
aFBhdGgsIGFyZ3VtZW50cyk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUGx1Z2lu
UHJvY2Vzc1Byb3h5OjpsYXVuY2hQcm9jZXNzKGNvbnN0IFN0cmluZyYgbGF1bmNoUGF0aCwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIXNob3VsZExhdW5jaFByb2Nlc3Mo
bV9wbHVnaW5Qcm9jZXNzQXR0cmlidXRlcywgbGF1bmNoUGF0aCwgYXJndW1lbnRzKSkKLSAgICAg
ICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKLQotICAgIFtOU1Rhc2sgbGF1bmNo
ZWRUYXNrV2l0aExhdW5jaFBhdGg6bGF1bmNoUGF0aCBhcmd1bWVudHM6Y3JlYXRlTlNBcnJheShh
cmd1bWVudHMpLmdldCgpXTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcih0cnVlKTsKLX0KLQotc3Rh
dGljIGJvb2wgaXNKYXZhVXBkYXRlclVSTChjb25zdCBQbHVnaW5Qcm9jZXNzQXR0cmlidXRlcyYg
cGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQotewotICAg
IE5TVVJMICp1cmwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzp1cmxTdHJpbmddOwotICAgIGlmICgh
W3VybCBpc0ZpbGVVUkxdKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBOU0FycmF5ICpq
YXZhVXBkYXRlckFwcE5hbWVzID0gQFtAIkphdmEgVXBkYXRlci5hcHAiLCBAIkphdmFVcGRhdGVy
LmFwcCJdOwotCi0gICAgZm9yIChOU1N0cmluZyAqamF2YVVwZGF0ZXJBcHBOYW1lIGluIGphdmFV
cGRhdGVyQXBwTmFtZXMpIHsKLSAgICAgICAgTlNTdHJpbmcgKmphdmFVcGRhdGVyUGF0aCA9IFtO
U1N0cmluZyBwYXRoV2l0aENvbXBvbmVudHM6QFsoTlNTdHJpbmcgKilwbHVnaW5Qcm9jZXNzQXR0
cmlidXRlcy5tb2R1bGVJbmZvLnBhdGgsIEAiQ29udGVudHMvUmVzb3VyY2VzIiwgamF2YVVwZGF0
ZXJBcHBOYW1lXV07Ci0gICAgICAgIGlmIChbdXJsLnBhdGggaXNFcXVhbFRvU3RyaW5nOmphdmFV
cGRhdGVyUGF0aF0pCi0gICAgICAgICAgICByZXR1cm4gWUVTOwotICAgIH0KLQotICAgIHJldHVy
biBOTzsKLX0KLQotc3RhdGljIGJvb2wgc2hvdWxkTGF1bmNoQXBwbGljYXRpb25BdFVSTChjb25z
dCBQbHVnaW5Qcm9jZXNzQXR0cmlidXRlcyYgcGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMsIGNvbnN0
IFN0cmluZyYgdXJsU3RyaW5nKQotewotICAgIGlmIChwbHVnaW5Qcm9jZXNzQXR0cmlidXRlcy5t
b2R1bGVJbmZvLmJ1bmRsZUlkZW50aWZpZXIgPT0gImNvbS5vcmFjbGUuamF2YS5KYXZhQXBwbGV0
UGx1Z2luIikKLSAgICAgICAgcmV0dXJuIGlzSmF2YVVwZGF0ZXJVUkwocGx1Z2luUHJvY2Vzc0F0
dHJpYnV0ZXMsIHVybFN0cmluZyk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUGx1
Z2luUHJvY2Vzc1Byb3h5OjpsYXVuY2hBcHBsaWNhdGlvbkF0VVJMKGNvbnN0IFN0cmluZyYgdXJs
U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRzLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmICghc2hvdWxkTGF1
bmNoQXBwbGljYXRpb25BdFVSTChtX3BsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLCB1cmxTdHJpbmcp
KQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwotCi1BTExPV19ERVBS
RUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IEB7IE5T
V29ya3NwYWNlTGF1bmNoQ29uZmlndXJhdGlvbkFyZ3VtZW50czogY3JlYXRlTlNBcnJheShhcmd1
bWVudHMpLmdldCgpIH07Ci0gICAgW1tOU1dvcmtzcGFjZSBzaGFyZWRXb3Jrc3BhY2VdIGxhdW5j
aEFwcGxpY2F0aW9uQXRVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6dXJsU3RyaW5nXSBvcHRpb25z
Ok5TV29ya3NwYWNlTGF1bmNoQXN5bmMgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uIGVycm9y
Om51bGxwdHJdOwotQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0gICAgY29tcGxl
dGlvbkhhbmRsZXIodHJ1ZSk7Ci19Ci0KLXN0YXRpYyBib29sIGlzU2lsdmVybGlnaHRQcmVmZXJl
bmNlc1VSTChjb25zdCBQbHVnaW5Qcm9jZXNzQXR0cmlidXRlcyYgcGx1Z2luUHJvY2Vzc0F0dHJp
YnV0ZXMsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQotewotICAgIE5TVVJMICpzaWx2ZXJsaWdo
dFByZWZlcmVuY2VzVVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aENvbXBvbmVudHM6QFsoTlNT
dHJpbmcgKilwbHVnaW5Qcm9jZXNzQXR0cmlidXRlcy5tb2R1bGVJbmZvLnBhdGgsIEAiQ29udGVu
dHMvUmVzb3VyY2VzL1NpbHZlcmxpZ2h0IFByZWZlcmVuY2VzLmFwcCJdXTsKLQotICAgIHJldHVy
biBbW05TVVJMIFVSTFdpdGhTdHJpbmc6dXJsU3RyaW5nXSBpc0VxdWFsOnNpbHZlcmxpZ2h0UHJl
ZmVyZW5jZXNVUkxdOwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGRPcGVuVVJMKGNvbnN0IFBsdWdp
blByb2Nlc3NBdHRyaWJ1dGVzJiBwbHVnaW5Qcm9jZXNzQXR0cmlidXRlcywgY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcpCi17Ci0gICAgaWYgKHBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLm1vZHVsZUlu
Zm8uYnVuZGxlSWRlbnRpZmllciA9PSAiY29tLm1pY3Jvc29mdC5TaWx2ZXJsaWdodFBsdWdpbiIp
Ci0gICAgICAgIHJldHVybiBpc1NpbHZlcmxpZ2h0UHJlZmVyZW5jZXNVUkwocGx1Z2luUHJvY2Vz
c0F0dHJpYnV0ZXMsIHVybFN0cmluZyk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
UGx1Z2luUHJvY2Vzc1Byb3h5OjpvcGVuVVJMKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgcmVzdWx0LCBpbnQzMl90IHN0YXR1cywgU3RyaW5nIGxh
dW5jaGVkVVJMU3RyaW5nKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIXNob3Vs
ZE9wZW5VUkwobV9wbHVnaW5Qcm9jZXNzQXR0cmlidXRlcywgdXJsU3RyaW5nKSkKLSAgICAgICAg
cmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlLCAwLCB7IH0pOwotCi0gICAgQ0ZVUkxSZWYg
bGF1bmNoZWRVUkw7Ci0gICAgdWludDMyX3Qgc3RhdHVzID0gTFNPcGVuQ0ZVUkxSZWYoVVJMKHsg
fSwgdXJsU3RyaW5nKS5jcmVhdGVDRlVSTCgpLmdldCgpLCAmbGF1bmNoZWRVUkwpOwotCi0gICAg
U3RyaW5nIGxhdW5jaGVkVVJMU3RyaW5nOwotICAgIGlmIChsYXVuY2hlZFVSTCkgewotICAgICAg
ICBsYXVuY2hlZFVSTFN0cmluZyA9IFVSTChsYXVuY2hlZFVSTCkuc3RyaW5nKCk7Ci0gICAgICAg
IENGUmVsZWFzZShsYXVuY2hlZFVSTCk7Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKHRy
dWUsIHN0YXR1cywgbGF1bmNoZWRVUkxTdHJpbmcpOwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGRP
cGVuRmlsZShjb25zdCBQbHVnaW5Qcm9jZXNzQXR0cmlidXRlcyYgcGx1Z2luUHJvY2Vzc0F0dHJp
YnV0ZXMsIGNvbnN0IFN0cmluZyYgZnVsbFBhdGgpCi17Ci0gICAgaWYgKHBsdWdpblByb2Nlc3NB
dHRyaWJ1dGVzLm1vZHVsZUluZm8uYnVuZGxlSWRlbnRpZmllciA9PSAiY29tLm1hY3JvbWVkaWEu
Rmxhc2ggUGxheWVyLnBsdWdpbiIpIHsKLSAgICAgICAgaWYgKGZ1bGxQYXRoID09ICIvTGlicmFy
eS9QcmVmZXJlbmNlUGFuZXMvRmxhc2ggUGxheWVyLnByZWZQYW5lIikKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBQbHVnaW5Q
cm9jZXNzUHJveHk6Om9wZW5GaWxlKGNvbnN0IFN0cmluZyYgZnVsbFBhdGgsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFzaG91
bGRPcGVuRmlsZShtX3BsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLCBmdWxsUGF0aCkpCi0gICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Ci0KLSAgICBBTExPV19ERVBSRUNBVEVE
X0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIFtbTlNXb3Jrc3BhY2Ugc2hhcmVkV29ya3NwYWNlXSBv
cGVuRmlsZTpmdWxsUGF0aF07Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5E
Ci0gICAgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7Ci19Ci0KLWludCBwbHVnaW5Qcm9jZXNzTGF0
ZW5jeVFPUygpCi17Ci0gICAgc3RhdGljIGNvbnN0IGludCBxb3MgPSBbW05TVXNlckRlZmF1bHRz
IHN0YW5kYXJkVXNlckRlZmF1bHRzXSBpbnRlZ2VyRm9yS2V5OkAiV2ViS2l0UGx1Z2luUHJvY2Vz
c0xhdGVuY3lRT1MiXTsKLSAgICByZXR1cm4gcW9zOwotfQotCi1pbnQgcGx1Z2luUHJvY2Vzc1Ro
cm91Z2hwdXRRT1MoKQotewotICAgIHN0YXRpYyBjb25zdCBpbnQgcW9zID0gW1tOU1VzZXJEZWZh
dWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gaW50ZWdlckZvcktleTpAIldlYktpdFBsdWdpblBy
b2Nlc3NUaHJvdWdocHV0UU9TIl07Ci0gICAgcmV0dXJuIHFvczsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDIxMGIyZjRkYTJkMjFhY2Qw
MTA3N2U4MjA4ZmRhNGEzNDg3NDNmNDEuLmM5MzY3YjAwZjFkYjA3N2I4YzJkZDJjOTlhNzFkNTY3
NGE5YWJkZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAt
ODEsOCArODEsNiBAQAogI2luY2x1ZGUgIk5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0Lmgi
CiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmgiCiAjaW5j
bHVkZSAiUGFnZUNsaWVudC5oIgotI2luY2x1ZGUgIlBsdWdpbkluZm9ybWF0aW9uLmgiCi0jaW5j
bHVkZSAiUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCIKICNpbmNsdWRlICJQcmludEluZm8uaCIKICNp
bmNsdWRlICJQcm9jZXNzVGhyb3R0bGVyLmgiCiAjaW5jbHVkZSAiUHJvdmlzaW9uYWxQYWdlUHJv
eHkuaCIKQEAgLTE4OTIsMTMgKzE4OTAsNiBAQCBib29sIFdlYlBhZ2VQcm94eTo6Y2FuU2hvd01J
TUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6
OmNhblNob3dNSU1FVHlwZShtaW1lVHlwZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0jaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgU3RyaW5nIG5ld01pbWVUeXBlID0gbWlt
ZVR5cGU7Ci0gICAgUGx1Z2luTW9kdWxlSW5mbyBwbHVnaW4gPSBtX3Byb2Nlc3MtPnByb2Nlc3NQ
b29sKCkucGx1Z2luSW5mb1N0b3JlKCkuZmluZFBsdWdpbihuZXdNaW1lVHlwZSwgVVJMKCkpOwot
ICAgIGlmICghcGx1Z2luLnBhdGguaXNOdWxsKCkgJiYgbV9wcmVmZXJlbmNlcy0+cGx1Z2luc0Vu
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0KICNpZiBQTEFURk9STShDT0NPQSkKICAgICAvLyBPbiBNYWMsIHdlIGNh
biBzaG93IFBERnMuCiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzUERGT3JQb3N0U2NyaXB0
TUlNRVR5cGUobWltZVR5cGUpICYmICFXZWJQcm9jZXNzUG9vbDo6b21pdFBERlN1cHBvcnQoKSkK
QEAgLTMwMDYsNjQgKzI5OTcsNiBAQCBXZWJQcmVmZXJlbmNlc1N0b3JlIFdlYlBhZ2VQcm94eTo6
cHJlZmVyZW5jZXNTdG9yZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcHJlZmVyZW5jZXMtPnN0b3Jl
KCk7CiB9CiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLXZvaWQgV2ViUGFnZVBy
b3h5OjpmaW5kUGx1Z2luKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgdXJs
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIHBhZ2VV
UkxTdHJpbmcsIGJvb2wgYWxsb3dPbmx5QXBwbGljYXRpb25QbHVnaW5zLCBNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpGaW5kUGx1Z2luOjpEZWxheWVkUmVwbHkmJiByZXBseSkKLXsKLSAgICBQYWdl
Q2xpZW50UHJvdGVjdG9yIHByb3RlY3RvcihwYWdlQ2xpZW50KCkpOwotCi0gICAgTUVTU0FHRV9D
SEVDS19VUkwobV9wcm9jZXNzLCB1cmxTdHJpbmcpOwotCi0gICAgVVJMIHBsdWdpblVSTCA9IFVS
TCB7IFVSTCgpLCB1cmxTdHJpbmcgfTsKLSAgICBTdHJpbmcgbmV3TWltZVR5cGUgPSBtaW1lVHlw
ZS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwotCi0gICAgUGx1Z2luRGF0YTo6QWxsb3dlZFBs
dWdpblR5cGVzIGFsbG93ZWRQbHVnaW5UeXBlcyA9IGFsbG93T25seUFwcGxpY2F0aW9uUGx1Z2lu
cyA/IFBsdWdpbkRhdGE6Ok9ubHlBcHBsaWNhdGlvblBsdWdpbnMgOiBQbHVnaW5EYXRhOjpBbGxQ
bHVnaW5zOwotCi0gICAgVVJMIHBhZ2VVUkwgPSBVUkwgeyBVUkwoKSwgcGFnZVVSTFN0cmluZyB9
OwotICAgIGlmICghbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnBsdWdpbkluZm9TdG9yZSgpLmlz
U3VwcG9ydGVkUGx1Z2luKG1pbWVUeXBlLCBwbHVnaW5VUkwsIGZyYW1lVVJMU3RyaW5nLCBwYWdl
VVJMKSkgewotICAgICAgICByZXBseSgwLCBuZXdNaW1lVHlwZSwgUGx1Z2luTW9kdWxlTG9hZE5v
cm1hbGx5LCB7IH0sIHRydWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUGx1Z2lu
TW9kdWxlSW5mbyBwbHVnaW4gPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkucGx1Z2luSW5mb1N0
b3JlKCkuZmluZFBsdWdpbihuZXdNaW1lVHlwZSwgcGx1Z2luVVJMLCBhbGxvd2VkUGx1Z2luVHlw
ZXMpOwotICAgIGlmICghcGx1Z2luLnBhdGgpIHsKLSAgICAgICAgcmVwbHkoMCwgbmV3TWltZVR5
cGUsIFBsdWdpbk1vZHVsZUxvYWROb3JtYWxseSwgeyB9LCBmYWxzZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICB1aW50MzJfdCBwbHVnaW5Mb2FkUG9saWN5ID0gUGx1Z2luSW5mb1N0
b3JlOjpkZWZhdWx0TG9hZFBvbGljeUZvclBsdWdpbihwbHVnaW4pOwotCi0jaWYgUExBVEZPUk0o
Q09DT0EpCi0gICAgYXV0byBwbHVnaW5JbmZvcm1hdGlvbiA9IGNyZWF0ZVBsdWdpbkluZm9ybWF0
aW9uRGljdGlvbmFyeShwbHVnaW4sIGZyYW1lVVJMU3RyaW5nLCBTdHJpbmcoKSwgcGFnZVVSTFN0
cmluZywgU3RyaW5nKCksIFN0cmluZygpKTsKLSNlbmRpZgotCi0gICAgYXV0byBmaW5kUGx1Z2lu
Q29tcGxldGlvbiA9IFtyZXBseSA9IFdURk1vdmUocmVwbHkpLCBuZXdNaW1lVHlwZSA9IFdURk1v
dmUobmV3TWltZVR5cGUpLCBwbHVnaW4gPSBXVEZNb3ZlKHBsdWdpbildICh1aW50MzJfdCBwbHVn
aW5Mb2FkUG9saWN5LCBjb25zdCBTdHJpbmcmIHVuYXZhaWxhYmlsaXR5RGVzY3JpcHRpb24pIG11
dGFibGUgewotICAgICAgICBQbHVnaW5Qcm9jZXNzU2FuZGJveFBvbGljeSBwbHVnaW5Qcm9jZXNz
U2FuZGJveFBvbGljeSA9IFBsdWdpblByb2Nlc3NTYW5kYm94UG9saWN5OjpOb3JtYWw7Ci0gICAg
ICAgIHN3aXRjaCAocGx1Z2luTG9hZFBvbGljeSkgewotICAgICAgICBjYXNlIFBsdWdpbk1vZHVs
ZUxvYWROb3JtYWxseToKLSAgICAgICAgICAgIHBsdWdpblByb2Nlc3NTYW5kYm94UG9saWN5ID0g
UGx1Z2luUHJvY2Vzc1NhbmRib3hQb2xpY3k6Ok5vcm1hbDsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFBsdWdpbk1vZHVsZUxvYWRVbnNhbmRib3hlZDoKLSAgICAgICAgICAgIHBs
dWdpblByb2Nlc3NTYW5kYm94UG9saWN5ID0gUGx1Z2luUHJvY2Vzc1NhbmRib3hQb2xpY3k6OlVu
c2FuZGJveGVkOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBQbHVnaW5Nb2R1
bGVCbG9ja2VkRm9yU2VjdXJpdHk6Ci0gICAgICAgIGNhc2UgUGx1Z2luTW9kdWxlQmxvY2tlZEZv
ckNvbXBhdGliaWxpdHk6Ci0gICAgICAgICAgICByZXBseSgwLCBuZXdNaW1lVHlwZSwgcGx1Z2lu
TG9hZFBvbGljeSwgdW5hdmFpbGFiaWxpdHlEZXNjcmlwdGlvbiwgZmFsc2UpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVwbHkoUGx1Z2luUHJvY2Vzc01hbmFn
ZXI6OnNpbmdsZXRvbigpLnBsdWdpblByb2Nlc3NUb2tlbihwbHVnaW4sIHBsdWdpblByb2Nlc3NT
YW5kYm94UG9saWN5KSwgbmV3TWltZVR5cGUsIHBsdWdpbkxvYWRQb2xpY3ksIHVuYXZhaWxhYmls
aXR5RGVzY3JpcHRpb24sIGZhbHNlKTsKLSAgICB9OwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0g
ICAgbV9uYXZpZ2F0aW9uQ2xpZW50LT5kZWNpZGVQb2xpY3lGb3JQbHVnaW5Mb2FkKCp0aGlzLCBz
dGF0aWNfY2FzdDxQbHVnaW5Nb2R1bGVMb2FkUG9saWN5PihwbHVnaW5Mb2FkUG9saWN5KSwgcGx1
Z2luSW5mb3JtYXRpb24uZ2V0KCksIFdURk1vdmUoZmluZFBsdWdpbkNvbXBsZXRpb24pKTsKLSNl
bHNlCi0gICAgZmluZFBsdWdpbkNvbXBsZXRpb24ocGx1Z2luTG9hZFBvbGljeSwgeyB9KTsKLSNl
bmRpZgotfQotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KICNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQogCiBzdGF0aWMgVHJhY2tpbmdUeXBlIG1lcmdlVHJhY2tpbmdU
eXBlcyhUcmFja2luZ1R5cGUgYSwgVHJhY2tpbmdUeXBlIGIpCkBAIC02MDI3LDM5ICs1OTYwLDYg
QEAgdm9pZCBXZWJQYWdlUHJveHk6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KFdlYkhpdFRlc3RS
ZXN1bHREYXRhJiYgaGl0VGVzdFJlc3VsdEQKICAgICBzZXRUb29sVGlwKGhpdFRlc3RSZXN1bHRE
YXRhLnRvb2xUaXBUZXh0KTsKIH0KIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQot
dm9pZCBXZWJQYWdlUHJveHk6OnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZCh1aW50MzJf
dCBvcGFxdWVQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgY29uc3QgU3RyaW5nJiBwbHVnaW5VUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgcGx1Z2luc3Bh
Z2VBdHRyaWJ1dGVVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVVUkxTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcGFnZVVSTFN0cmluZykKLXsKLSAgICBNRVNTQUdFX0NIRUNLX1VSTChtX3Byb2Nl
c3MsIHBsdWdpblVSTFN0cmluZyk7Ci0gICAgTUVTU0FHRV9DSEVDS19VUkwobV9wcm9jZXNzLCBw
bHVnaW5zcGFnZUF0dHJpYnV0ZVVSTFN0cmluZyk7Ci0gICAgTUVTU0FHRV9DSEVDS19VUkwobV9w
cm9jZXNzLCBmcmFtZVVSTFN0cmluZyk7Ci0gICAgTUVTU0FHRV9DSEVDS19VUkwobV9wcm9jZXNz
LCBwYWdlVVJMU3RyaW5nKTsKLQotICAgIFN0cmluZyBuZXdNaW1lVHlwZSA9IG1pbWVUeXBlOwot
ICAgIFBsdWdpbk1vZHVsZUluZm8gcGx1Z2luID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnBs
dWdpbkluZm9TdG9yZSgpLmZpbmRQbHVnaW4obmV3TWltZVR5cGUsIFVSTChVUkwoKSwgcGx1Z2lu
VVJMU3RyaW5nKSk7Ci0gICAgYXV0byBwbHVnaW5JbmZvcm1hdGlvbiA9IGNyZWF0ZVBsdWdpbklu
Zm9ybWF0aW9uRGljdGlvbmFyeShwbHVnaW4sIGZyYW1lVVJMU3RyaW5nLCBtaW1lVHlwZSwgcGFn
ZVVSTFN0cmluZywgcGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkxTdHJpbmcsIHBsdWdpblVSTFN0cmlu
Zyk7Ci0KLSAgICBXS1BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uIHBsdWdpblVuYXZhaWxhYmls
aXR5UmVhc29uID0ga1dLUGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb25QbHVnaW5NaXNzaW5nOwot
ICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8UmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBsdWdpblVuYXZh
aWxhYmlsaXR5UmVhc29uPihvcGFxdWVQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbikpIHsKLSAg
ICBjYXNlIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpQbHVnaW5NaXNzaW5nOgotICAgICAgICBwbHVn
aW5VbmF2YWlsYWJpbGl0eVJlYXNvbiA9IGtXS1BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uUGx1
Z2luTWlzc2luZzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZW5kZXJFbWJlZGRlZE9iamVj
dDo6SW5zZWN1cmVQbHVnaW5WZXJzaW9uOgotICAgICAgICBwbHVnaW5VbmF2YWlsYWJpbGl0eVJl
YXNvbiA9IGtXS1BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uSW5zZWN1cmVQbHVnaW5WZXJzaW9u
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpQbHVnaW5D
cmFzaGVkOgotICAgICAgICBwbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiA9IGtXS1BsdWdpblVu
YXZhaWxhYmlsaXR5UmVhc29uUGx1Z2luQ3Jhc2hlZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBSZW5kZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2luQmxvY2tlZEJ5Q29udGVudFNlY3VyaXR5UG9s
aWN5OgotICAgIGNhc2UgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlVuc3VwcG9ydGVkUGx1Z2luOgot
ICAgIGNhc2UgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBsdWdpblRvb1NtYWxsOgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBtX3VpQ2xpZW50LT51bmF2YWlsYWJs
ZVBsdWdpbkJ1dHRvbkNsaWNrZWQoKnRoaXMsIHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uLCBw
bHVnaW5JbmZvcm1hdGlvbi5nZXQoKSk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCi0KICNpZiBFTkFCTEUoV0VCR0wpCiB2b2lkIFdlYlBhZ2VQcm94eTo6d2ViR0xQ
b2xpY3lGb3JVUkwoVVJMJiYgdXJsLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpXZWJHTFBvbGlj
eUZvclVSTDo6RGVsYXllZFJlcGx5JiYgcmVwbHkpCiB7CkBAIC04ODk0LDIyICs4Nzk0LDYgQEAg
Q29sb3IgV2ViUGFnZVByb3h5OjpwbGF0Zm9ybVVuZGVyUGFnZUJhY2tncm91bmRDb2xvcigpIGNv
bnN0CiAKICNlbmRpZiAvLyAhUExBVEZPUk0oQ09DT0EpCiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKLXZvaWQgV2ViUGFnZVByb3h5OjpkaWRGYWlsVG9Jbml0aWFsaXplUGx1Z2lu
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgZnJhbWVVUkxTdHJpbmcsIGNv
bnN0IFN0cmluZyYgcGFnZVVSTFN0cmluZykKLXsKLSAgICBtX25hdmlnYXRpb25DbGllbnQtPmRp
ZEZhaWxUb0luaXRpYWxpemVQbHVnSW4oKnRoaXMsIGNyZWF0ZVBsdWdpbkluZm9ybWF0aW9uRGlj
dGlvbmFyeShtaW1lVHlwZSwgZnJhbWVVUkxTdHJpbmcsIHBhZ2VVUkxTdHJpbmcpLmdldCgpKTsK
LX0KLQotdm9pZCBXZWJQYWdlUHJveHk6OmRpZEJsb2NrSW5zZWN1cmVQbHVnaW5WZXJzaW9uKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgcGx1Z2luVVJMU3RyaW5nLCBjb25z
dCBTdHJpbmcmIGZyYW1lVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkxTdHJpbmcsIGJv
b2wgcmVwbGFjZW1lbnRPYnNjdXJlZCkKLXsKLSAgICBTdHJpbmcgbmV3TWltZVR5cGUgPSBtaW1l
VHlwZTsKLSAgICBQbHVnaW5Nb2R1bGVJbmZvIHBsdWdpbiA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bv
b2woKS5wbHVnaW5JbmZvU3RvcmUoKS5maW5kUGx1Z2luKG5ld01pbWVUeXBlLCBVUkwoVVJMKCks
IHBsdWdpblVSTFN0cmluZykpOwotICAgIGF1dG8gcGx1Z2luSW5mb3JtYXRpb24gPSBjcmVhdGVQ
bHVnaW5JbmZvcm1hdGlvbkRpY3Rpb25hcnkocGx1Z2luLCBmcmFtZVVSTFN0cmluZywgbWltZVR5
cGUsIHBhZ2VVUkxTdHJpbmcsIFN0cmluZygpLCBTdHJpbmcoKSwgcmVwbGFjZW1lbnRPYnNjdXJl
ZCk7Ci0KLSAgICBtX25hdmlnYXRpb25DbGllbnQtPmRpZEJsb2NrSW5zZWN1cmVQbHVnaW5WZXJz
aW9uKCp0aGlzLCBwbHVnaW5JbmZvcm1hdGlvbi5nZXQoKSk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KIGJvb2wgV2ViUGFnZVByb3h5Ojp3aWxsSGFuZGxlSG9y
aXpvbnRhbFNjcm9sbEV2ZW50cygpIGNvbnN0CiB7CiAgICAgcmV0dXJuICFtX2NhblNob3J0Q2ly
Y3VpdEhvcml6b250YWxXaGVlbEV2ZW50czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgKaW5kZXggOTkzMzZjYzc5YTU5YTBmM2Q3ZTQwNzEwMzA5MTE3MWFiODkxYzZiZS4uZjdl
NWRkYTY5NTM4N2QxZTcxNjljNTdjNGNkNWNhOWM5YTU5ZjkwZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTQ3LDcgKzQ3LDYgQEAKICNpbmNsdWRlICJQREZQbHVn
aW5JZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUGFnZUxvYWRTdGF0ZS5oIgogI2luY2x1ZGUgIlBh
c3RlYm9hcmRBY2Nlc3NJbnRlbnQuaCIKLSNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzQXR0cmlidXRl
cy5oIgogI2luY2x1ZGUgIlBvbGljeURlY2lzaW9uLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc1Rlcm1p
bmF0aW9uUmVhc29uLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc1Rocm90dGxlci5oIgpAQCAtMjExNCw5
ICsyMTEzLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFN0YXR1c1RleHQoY29uc3QgU3RyaW5n
Jik7CiAgICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChXZWJIaXRUZXN0UmVzdWx0RGF0
YSYmLCB1aW50MzJfdCBtb2RpZmllcnMsIFVzZXJEYXRhJiYpOwogCi0jaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCi0gICAgdm9pZCB1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQo
dWludDMyX3Qgb3BhcXVlUGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24sIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIGNvbnN0IFN0cmluZyYgcGx1Z2luVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIHBs
dWdpbnNQYWdlVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lVVJMU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHBhZ2VVUkxTdHJpbmcpOwotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQogI2lmIEVOQUJMRShXRUJHTCkKICAgICB2b2lkIHdlYkdMUG9saWN5Rm9yVVJMKFVSTCYm
LCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpXZWJHTFBvbGljeUZvclVSTERlbGF5ZWRSZXBseSYm
KTsKICAgICB2b2lkIHJlc29sdmVXZWJHTFBvbGljeUZvclVSTChVUkwmJiwgTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6UmVzb2x2ZVdlYkdMUG9saWN5Rm9yVVJMRGVsYXllZFJlcGx5JiYpOwpAQCAt
MjE3NSwxMCArMjE3MSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWdlRXh0ZW5kZWRCYWNrZ3Jv
dW5kQ29sb3JEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKICAgICB2b2lkIHNhbXBs
ZWRQYWdlVG9wQ29sb3JDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7CiAgICAgV2ViQ29y
ZTo6Q29sb3IgcGxhdGZvcm1VbmRlclBhZ2VCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICB2b2lkIGRpZEZhaWxUb0luaXRpYWxpemVQ
bHVnaW4oY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBmcmFtZVVSTFN0cmlu
ZywgY29uc3QgU3RyaW5nJiBwYWdlVVJMU3RyaW5nKTsKLSAgICB2b2lkIGRpZEJsb2NrSW5zZWN1
cmVQbHVnaW5WZXJzaW9uKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgcGx1
Z2luVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHBhZ2VVUkxTdHJpbmcsIGJvb2wgcmVwbGFjZW1lbnRPYnNjdXJlZCk7Ci0jZW5kaWYgLy8gRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgdm9pZCBzZXRDYW5TaG9ydENpcmN1aXRIb3Jp
em9udGFsV2hlZWxFdmVudHMoYm9vbCBjYW5TaG9ydENpcmN1aXRIb3Jpem9udGFsV2hlZWxFdmVu
dHMpIHsgbV9jYW5TaG9ydENpcmN1aXRIb3Jpem9udGFsV2hlZWxFdmVudHMgPSBjYW5TaG9ydENp
cmN1aXRIb3Jpem9udGFsV2hlZWxFdmVudHM7IH0KIAogICAgIGVudW0gY2xhc3MgUHJvY2Vzc0xh
dW5jaFJlYXNvbiB7CkBAIC0yMzMxLDcgKzIzMjMsNiBAQCBwcml2YXRlOgogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgdm9pZCBwbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkKHVpbnQ2
NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBib29sIHBsdWdpbkhhc0ZvY3Vz
QW5kV2luZG93SGFzRm9jdXMpOwotICAgIHZvaWQgc2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0
YXRlKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCB1aW50NjRfdCBj
b21wbGV4VGV4dElucHV0U3RhdGUpOwogI2VuZGlmCiAKICNpZiBVU0UoQVVUT01BVElDX1RFWFRf
UkVQTEFDRU1FTlQpCkBAIC0yNDA5LDEwICsyNDAwLDYgQEAgcHJpdmF0ZToKICAgICBXZWJDb3Jl
OjpUcmFja2luZ1R5cGUgdG91Y2hFdmVudFRyYWNraW5nVHlwZShjb25zdCBXZWJUb3VjaEV2ZW50
JikgY29uc3Q7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAg
IHZvaWQgZmluZFBsdWdpbihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHVy
bFN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZVVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBwYWdl
VVJMU3RyaW5nLCBib29sIGFsbG93T25seUFwcGxpY2F0aW9uUGx1Z2lucywgTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6RmluZFBsdWdpbkRlbGF5ZWRSZXBseSYmKTsKLSNlbmRpZgotCiAjaWYgVVNF
KFFVSUNLX0xPT0spCiAgICAgdm9pZCBkaWRTdGFydExvYWRGb3JRdWlja0xvb2tEb2N1bWVudElu
TWFpbkZyYW1lKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgdXRpKTsKICAg
ICB2b2lkIGRpZEZpbmlzaExvYWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lKGNvbnN0
IFNoYXJlYWJsZVJlc291cmNlOjpIYW5kbGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgppbmRleCBmNTcwNWEwNjExNWEyMmU4ZTMwNzZi
YzVmOTViYzlkYzFiZTdjNDZhLi41NmU4YTFkY2U4MThjNjM5MGNhMDYyMmUzYjQ0YTVjMWVkMTBl
ZjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVz
c2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3Nh
Z2VzLmluCkBAIC0zMCw5ICszMCw2IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAg
UnVuSmF2YVNjcmlwdFByb21wdChXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgc3Ry
dWN0IFdlYktpdDo6RnJhbWVJbmZvRGF0YSBmcmFtZUluZm8sIFN0cmluZyBtZXNzYWdlLCBTdHJp
bmcgZGVmYXVsdFZhbHVlKSAtPiAoU3RyaW5nIHJlc3VsdCkgU3luY2hyb25vdXMKICAgICBNb3Vz
ZURpZE1vdmVPdmVyRWxlbWVudChzdHJ1Y3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0RGF0YSBo
aXRUZXN0UmVzdWx0RGF0YSwgdWludDMyX3QgbW9kaWZpZXJzLCBXZWJLaXQ6OlVzZXJEYXRhIHVz
ZXJEYXRhKQogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgVW5hdmFpbGFi
bGVQbHVnaW5CdXR0b25DbGlja2VkKHVpbnQzMl90IHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29u
LCBTdHJpbmcgbWltZVR5cGUsIFN0cmluZyBwbHVnaW5VUkxTdHJpbmcsIFN0cmluZyBwbHVnaW5z
cGFnZUF0dHJpYnV0ZVVSTFN0cmluZywgU3RyaW5nIGZyYW1lVVJMU3RyaW5nLCBTdHJpbmcgcGFn
ZVVSTFN0cmluZykKLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICNpZiBF
TkFCTEUoV0VCR0wpCiAgICAgV2ViR0xQb2xpY3lGb3JVUkwoVVJMIHVybCkgLT4gKGVudW06dWlu
dDhfdCBXZWJDb3JlOjpXZWJHTExvYWRQb2xpY3kgbG9hZFBvbGljeSkgU3luY2hyb25vdXMKICAg
ICBSZXNvbHZlV2ViR0xQb2xpY3lGb3JVUkwoVVJMIHVybCkgLT4gKGVudW06dWludDhfdCBXZWJD
b3JlOjpXZWJHTExvYWRQb2xpY3kgbG9hZFBvbGljeSkgU3luY2hyb25vdXMKQEAgLTgxLDEwICs3
OCw2IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgVGhlbWVDb2xvckNoYW5nZWQo
V2ViQ29yZTo6Q29sb3IgdGhlbWVDb2xvcikKICAgICBQYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29s
b3JEaWRDaGFuZ2UoV2ViQ29yZTo6Q29sb3IgYmFja2dyb3VuZENvbG9yKQogICAgIFNhbXBsZWRQ
YWdlVG9wQ29sb3JDaGFuZ2VkKFdlYkNvcmU6OkNvbG9yIHNhbXBsZWRQYWdlVG9wQ29sb3IpCi0j
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgRGlkRmFpbFRvSW5pdGlhbGl6ZVBs
dWdpbihTdHJpbmcgbWltZVR5cGUsIFN0cmluZyBmcmFtZVVSTFN0cmluZywgU3RyaW5nIHBhZ2VV
UkxTdHJpbmcpCi0gICAgRGlkQmxvY2tJbnNlY3VyZVBsdWdpblZlcnNpb24oU3RyaW5nIG1pbWVU
eXBlLCBTdHJpbmcgcGx1Z2luVVJMU3RyaW5nLCBTdHJpbmcgZnJhbWVVUkxTdHJpbmcsIFN0cmlu
ZyBwYWdlVVJMU3RyaW5nLCBib29sIHJlcGxhY2VtZW50T2JzY3VyZWQpCi0jZW5kaWYgLy8gRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgU2V0Q2FuU2hvcnRDaXJjdWl0SG9yaXpvbnRh
bFdoZWVsRXZlbnRzKGJvb2wgY2FuU2hvcnRDaXJjdWl0SG9yaXpvbnRhbFdoZWVsRXZlbnRzKQog
CiAgICAgRGlkQ2hhbmdlQ29udGVudFNpemUoV2ViQ29yZTo6SW50U2l6ZSBuZXdTaXplKQpAQCAt
MzM2LDcgKzMyOSw2IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAKICAgICAjIFBsdWct
aW4gY29tcGxleCB0ZXh0IGlucHV0IHN1cHBvcnQgbWVzc2FnZXMKICAgICBQbHVnaW5Gb2N1c09y
V2luZG93Rm9jdXNDaGFuZ2VkKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlm
aWVyLCBib29sIHBsdWdpbkhhc0ZvY3VzQW5kV2luZG93SGFzRm9jdXMpCi0gICAgU2V0UGx1Z2lu
Q29tcGxleFRleHRJbnB1dFN0YXRlKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVu
dGlmaWVyLCB1aW50NjRfdCBjb21wbGV4VGV4dElucHV0U3RhdGUpCiAKICAgICAjIFNwZWVjaCBt
ZXNzYWdlcwogICAgIEdldElzU3BlYWtpbmcoKSAtPiAoYm9vbCBpc1NwZWFraW5nKSBTeW5jaHJv
bm91cwpAQCAtNDM1LDEwICs0MjcsNiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAg
IFNob3dQREZDb250ZXh0TWVudShzdHJ1Y3QgV2ViS2l0OjpQREZDb250ZXh0TWVudSBjb250ZXh0
TWVudSwgV2ViS2l0OjpQREZQbHVnaW5JZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IChzdGQ6Om9w
dGlvbmFsPGludDMyX3Q+IHNlbGVjdGVkSXRlbSkgU3luY2hyb25vdXMKICNlbmRpZgogCi0jaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgRmluZFBsdWdpbihTdHJpbmcgbWltZVR5
cGUsIFN0cmluZyB1cmxTdHJpbmcsIFN0cmluZyBmcmFtZVVSTFN0cmluZywgU3RyaW5nIHBhZ2VV
UkxTdHJpbmcsIGJvb2wgYWxsb3dPbmx5QXBwbGljYXRpb25QbHVnaW5zKSAtPiAodWludDY0X3Qg
cGx1Z2luUHJvY2Vzc1Rva2VuLCBTdHJpbmcgbmV3TUlNRVR5cGUsIHVpbnQzMl90IHBsdWdpbkxv
YWRQb2xpY3ksIFN0cmluZyB1bmF2YWlsYWJpbGl0eURlc2NyaXB0aW9uLCBib29sIGlzVW5zdXBw
b3J0ZWQpIFN5bmNocm9ub3VzCi0jZW5kaWYKLQogICAgIERpZFVwZGF0ZUFjdGl2aXR5U3RhdGUo
KQogCiAjaWYgRU5BQkxFKFdFQl9DUllQVE8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUG9vbC5jcHAKaW5kZXggYjY1ZTA4NmQ4OGVhY2ZlYmIzNDMzZDdkZDEyNjhhMTkxZGNi
ZGQwYS4uN2EwMjY2YjhhMTFhNGUxYzYwNWNiMDMzODUyYzdiZDAyMTQzYzUzZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtNTAsNyArNTAsNiBAQAog
I2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJv
Y2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiUGVyQWN0aXZpdHlTdGF0ZUNQVVVzYWdlU2FtcGxlci5o
IgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiU2FuZGJveEV4
dGVuc2lvbi5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyLmgiCiAjaW5jbHVkZSAiVUlHYW1lcGFk
LmgiCkBAIC0zODcsOSArMzg2LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE1lbW9yeVBy
ZXNzdXJlRXZlbnQoYm9vbCBpc0NyaXRpY2FsKQogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNz
YWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXND
cml0aWNhbCkpOwogICAgIGZvciAoYXV0byBuZXR3b3JrUHJvY2VzcyA6IE5ldHdvcmtQcm9jZXNz
UHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKSkKICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2
ZW50KGlzQ3JpdGljYWwpLCAwKTsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAg
ICBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuc2VuZE1lbW9yeVByZXNzdXJlRXZl
bnQoaXNDcml0aWNhbCk7Ci0jZW5kaWYKIH0KICNlbmRpZgogCkBAIC0xMjQ4LDIzICsxMjQ0LDYg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6aGFuZGxlTWVtb3J5UHJlc3N1cmVXYXJuaW5nKENyaXRp
Y2FsKQogICAgIEFTU0VSVCghbV9wcmV3YXJtZWRQcm9jZXNzKTsKIH0KIAotI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QWRkaXRpb25hbFBs
dWdpbnNEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnkpCi17Ci0gICAgVmVjdG9yPFN0
cmluZz4gZGlyZWN0b3JpZXM7Ci0gICAgZGlyZWN0b3JpZXMuYXBwZW5kKGRpcmVjdG9yeSk7Ci0K
LSAgICBtX3BsdWdpbkluZm9TdG9yZS5zZXRBZGRpdGlvbmFsUGx1Z2luc0RpcmVjdG9yaWVzKGRp
cmVjdG9yaWVzKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVmcmVzaFBsdWdpbnMoKQot
ewotICAgIG1fcGx1Z2luSW5mb1N0b3JlLnJlZnJlc2goKTsKLSAgICBzZW5kVG9BbGxQcm9jZXNz
ZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZnJlc2hQbHVnaW5zKCkpOwotfQotCi0jZW5kaWYg
Ly8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KIFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9v
bDo6cHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIoKQogewogICAgIHJldHVybiBtX3ByZXdhcm1l
ZFByb2Nlc3MgPyBtX3ByZXdhcm1lZFByb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCkgOiAwOwpA
QCAtMTY5MywyMSArMTY3MiwxNCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRKYXZhU2NyaXB0
R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChib29sIGZsYWcpCiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmFkZFN1cHBvcnRlZFBsdWdpbihTdHJpbmcmJiBtYXRjaGluZ0RvbWFpbiwgU3RyaW5n
JiYgbmFtZSwgSGFzaFNldDxTdHJpbmc+JiYgbWltZVR5cGVzLCBIYXNoU2V0PFN0cmluZz4gZXh0
ZW5zaW9ucykKIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBtX3BsdWdp
bkluZm9TdG9yZS5hZGRTdXBwb3J0ZWRQbHVnaW4oV1RGTW92ZShtYXRjaGluZ0RvbWFpbiksIFdU
Rk1vdmUobmFtZSksIFdURk1vdmUobWltZVR5cGVzKSwgV1RGTW92ZShleHRlbnNpb25zKSk7Ci0j
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShtYXRjaGluZ0RvbWFpbik7CiAgICAgVU5VU0VEX1BBUkFN
KG5hbWUpOwogICAgIFVOVVNFRF9QQVJBTShtaW1lVHlwZXMpOwogICAgIFVOVVNFRF9QQVJBTShl
eHRlbnNpb25zKTsKLSNlbmRpZgogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhclN1cHBv
cnRlZFBsdWdpbnMoKQogewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIG1f
cGx1Z2luSW5mb1N0b3JlLmNsZWFyU3VwcG9ydGVkUGx1Z2lucygpOwotI2VuZGlmCiB9CiAKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNldE1lbW9yeUNhY2hlRGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCmluZGV4IGU0ODdkNzgzYTJh
MWY0YmQ3M2JhMzE1ODcwNjMzNDJkYmViYTM3MjUuLjhhYjk5NjUzY2Y4NzY1ZGJmZDNiYjhhMTA4
NzliNTRjYjUxYTBkYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
aApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1
ZGUgIk1lc3NhZ2VSZWNlaXZlck1hcC5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHku
aCIKLSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKICNpbmNsdWRlICJQcm9jZXNzVGhyb3R0
bGVyLmgiCiAjaW5jbHVkZSAiVmlzaXRlZExpbmtTdG9yZS5oIgogI2luY2x1ZGUgIldlYkNvbnRl
eHRDbGllbnQuaCIKQEAgLTIyOSwxMyArMjI4LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBoYW5k
bGVNZW1vcnlQcmVzc3VyZVdhcm5pbmcoQ3JpdGljYWwpOwogCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0gICAgdm9pZCBzZXRBZGRpdGlvbmFsUGx1Z2luc0RpcmVjdG9yeShjb25z
dCBTdHJpbmcmKTsKLSAgICB2b2lkIHJlZnJlc2hQbHVnaW5zKCk7Ci0KLSAgICBQbHVnaW5JbmZv
U3RvcmUmIHBsdWdpbkluZm9TdG9yZSgpIHsgcmV0dXJuIG1fcGx1Z2luSW5mb1N0b3JlOyB9Ci0j
ZW5kaWYKLQogI2lmIEhBVkUoQ1ZESVNQTEFZTElOSykKICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNv
cmU6OkZyYW1lc1BlclNlY29uZD4gbm9taW5hbEZyYW1lc1BlclNlY29uZEZvckRpc3BsYXkoV2Vi
Q29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpOwogICAgIHZvaWQgc3RhcnREaXNwbGF5TGluayhJUEM6
OkNvbm5lY3Rpb24mLCBEaXNwbGF5TGlua09ic2VydmVySUQsIFdlYkNvcmU6OlBsYXRmb3JtRGlz
cGxheUlELCBXZWJDb3JlOjpGcmFtZXNQZXJTZWNvbmQpOwpAQCAtNjM5LDkgKzYzMSw2IEBAIHBy
aXZhdGU6CiAKICAgICBSZWZQdHI8V2ViQXV0b21hdGlvblNlc3Npb24+IG1fYXV0b21hdGlvblNl
c3Npb247CiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBQbHVnaW5JbmZv
U3RvcmUgbV9wbHVnaW5JbmZvU3RvcmU7Ci0jZW5kaWYKICAgICBSZWY8VmlzaXRlZExpbmtTdG9y
ZT4gbV92aXNpdGVkTGlua1N0b3JlOwogICAgIGJvb2wgbV92aXNpdGVkTGlua3NQb3B1bGF0ZWQg
eyBmYWxzZSB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cAppbmRleCA1YzU5NjZlY2NiOWU4YTJjYTAyYzFhMjg5ZTFiODE4MjBkNzNkOTJjLi45NDgxNzYw
OGM4MDhhNmJlMDljZWM0NGVjMGNhMDg5NTVmNjA5NTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKQEAgLTM0LDggKzM0LDYgQEAKICNpbmNsdWRlICJE
b3dubG9hZFByb3h5TWFwLmgiCiAjaW5jbHVkZSAiTG9hZFBhcmFtZXRlcnMuaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCi0jaW5jbHVkZSAiUGx1
Z2luUHJvY2Vzc01hbmFnZXIuaCIKICNpbmNsdWRlICJQcm92aXNpb25hbFBhZ2VQcm94eS5oIgog
I2luY2x1ZGUgIlNwZWVjaFJlY29nbml0aW9uUGVybWlzc2lvblJlcXVlc3QuaCIKICNpbmNsdWRl
ICJTcGVlY2hSZWNvZ25pdGlvblJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2VNYW5hZ2VyLmgiCkBA
IC04MDMsNDAgKzgwMSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojp1cGRhdGVCYWNrRm9yd2Fy
ZEl0ZW0oY29uc3QgQmFja0ZvcndhcmRMaXN0SXRlbVN0YXRlJiBpdGVtCiAgICAgfQogfQogCi0j
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi12b2lkIFdlYlByb2Nlc3NQcm94eTo6Z2V0
UGx1Z2lucyhib29sIHJlZnJlc2gsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFBsdWdp
bkluZm8+JiYgcGx1Z2lucywgVmVjdG9yPFBsdWdpbkluZm8+JiYgYXBwbGljYXRpb25QbHVnaW5z
LCBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpTdXBwb3J0ZWRQbHVnaW5JZGVudGlmaWVy
Pj4mJiBzdXBwb3J0ZWRQbHVnaW5JZGVudGlmaWVycyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17
Ci0gICAgaWYgKHJlZnJlc2gpCi0gICAgICAgIG1fcHJvY2Vzc1Bvb2wtPnBsdWdpbkluZm9TdG9y
ZSgpLnJlZnJlc2goKTsKLQotICAgIGF1dG8gc3VwcG9ydGVkUGx1Z2luSWRlbnRpZmllcnMgPSBt
X3Byb2Nlc3NQb29sLT5wbHVnaW5JbmZvU3RvcmUoKS5zdXBwb3J0ZWRQbHVnaW5JZGVudGlmaWVy
cygpOwotCi0gICAgVmVjdG9yPFBsdWdpbkluZm8+IHBsdWdpbnM7Ci0gICAgVmVjdG9yPFBsdWdp
bk1vZHVsZUluZm8+IHBsdWdpbk1vZHVsZXMgPSBtX3Byb2Nlc3NQb29sLT5wbHVnaW5JbmZvU3Rv
cmUoKS5wbHVnaW5zKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwbHVnaW5Nb2R1bGVz
LnNpemUoKTsgKytpKQotICAgICAgICBwbHVnaW5zLmFwcGVuZChwbHVnaW5Nb2R1bGVzW2ldLmlu
Zm8pOwotCi0gICAgVmVjdG9yPFBsdWdpbkluZm8+IGFwcGxpY2F0aW9uUGx1Z2luczsKLSNpZiBF
TkFCTEUoUERGS0lUX1BMVUdJTikKLSAgICAvLyBBZGQgYnVpbHQtaW4gUERGIGxhc3QsIHNvIHRo
YXQgaXQncyBub3QgdXNlZCB3aGVuIGEgcmVhbCBwbHVnLWluIGlzIGluc3RhbGxlZC4KLSAgICBp
ZiAoIW1fcHJvY2Vzc1Bvb2wtPm9taXRQREZTdXBwb3J0KCkpIHsKLSAgICAgICAgcGx1Z2lucy5h
cHBlbmQoUERGUGx1Z2luOjpwbHVnaW5JbmZvKCkpOwotICAgICAgICBhcHBsaWNhdGlvblBsdWdp
bnMuYXBwZW5kKFBERlBsdWdpbjo6cGx1Z2luSW5mbygpKTsKLSAgICB9Ci0jZW5kaWYKLSAgICBj
b21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHBsdWdpbnMpLCBXVEZNb3ZlKGFwcGxpY2F0aW9uUGx1
Z2lucyksIFdURk1vdmUoc3VwcG9ydGVkUGx1Z2luSWRlbnRpZmllcnMpKTsKLX0KLSNlbmRpZiAv
LyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotdm9pZCBXZWJQcm9jZXNzUHJveHk6OmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9u
KHVpbnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6
R2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQotewotICAg
IE1FU1NBR0VfQ0hFQ0soSGFzaFNldDx1aW50NjRfdD46OmlzVmFsaWRWYWx1ZShwbHVnaW5Qcm9j
ZXNzVG9rZW4pKTsKLSAgICBib29sIHN1Y2Nlc3MgPSBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2lu
Z2xldG9uKCkuZ2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24ocGx1Z2luUHJvY2Vzc1Rva2VuLCBX
VEZNb3ZlKHJlcGx5KSk7Ci0gICAgTUVTU0FHRV9DSEVDSyhzdWNjZXNzKTsKLX0KLSNlbmRpZgot
CiB2b2lkIFdlYlByb2Nlc3NQcm94eTo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXll
ZFJlcGx5JiYgcmVwbHkpCiB7CiAgICAgd2Vic2l0ZURhdGFTdG9yZSgpLmdldE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbigqdGhpcywgV1RGTW92ZShyZXBseSkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuaAppbmRleCAxMzk1MTdiZGIyNGI1NGM0OGVkZmJiZWIwMTNk
ZTkyOWE1ZjE0ZWY2Li4xOTQwMDU4NzgwNjZhMzA4ZDMwYmE1YzkwOWI1NTg5NTNkOWE0NjczIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaApAQCAtMzEsNyArMzEs
NiBAQAogI2luY2x1ZGUgIkRpc3BsYXlMaW5rT2JzZXJ2ZXJJRC5oIgogI2luY2x1ZGUgIk1lc3Nh
Z2VSZWNlaXZlck1hcC5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKLSNpbmNs
dWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKICNpbmNsdWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKICNp
bmNsdWRlICJQcm9jZXNzVGVybWluYXRpb25SZWFzb24uaCIKICNpbmNsdWRlICJQcm9jZXNzVGhy
b3R0bGVyLmgiCkBAIC00NzAsMTQgKzQ2OSw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIGhhc1By
b3Zpc2lvbmFsUGFnZVdpdGhJRChXZWJQYWdlUHJveHlJZGVudGlmaWVyKSBjb25zdDsKICAgICBi
b29sIGlzQWxsb3dlZFRvVXBkYXRlQmFja0ZvcndhcmRJdGVtKFdlYkJhY2tGb3J3YXJkTGlzdEl0
ZW0mKSBjb25zdDsKLQotICAgIC8vIFBsdWdpbnMKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLSAgICB2b2lkIGdldFBsdWdpbnMoYm9vbCByZWZyZXNoLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZvPiYmIHBsdWdpbnMsIFZlY3RvcjxXZWJD
b3JlOjpQbHVnaW5JbmZvPiYmIGFwcGxpY2F0aW9uUGx1Z2lucywgc3RkOjpvcHRpb25hbDxWZWN0
b3I8V2ViQ29yZTo6U3VwcG9ydGVkUGx1Z2luSWRlbnRpZmllcj4+JiYpPiYmKTsKLSNlbmRpZiAv
LyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLSAgICB2b2lkIGdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKHVpbnQ2NF90IHBsdWdp
blByb2Nlc3NUb2tlbiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0UGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkmJik7Ci0jZW5kaWYKICAgICAKICAgICB2b2lkIGdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbihNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkmJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgppbmRleCA5ZTkzZGEx
M2Y2MzVmNTdkYTlhZWE2MjE2M2Y1ZTZkMmZmYjRlMDZmLi5iMjg5NWY5NGI2Mjc2NTZhZGJkZDFm
ZmExYWQ2ZjQzYzJkYTAyMDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCkBAIC0zMSwxMSArMzEsNiBAQCBtZXNzYWdlcyAt
PiBXZWJQcm9jZXNzUHJveHkgTGVnYWN5UmVjZWl2ZXIgewogICAgIEVuYWJsZVN1ZGRlblRlcm1p
bmF0aW9uKCkKICAgICBEaXNhYmxlU3VkZGVuVGVybWluYXRpb24oKQogCi0gICAgIyBQbHVnaW4g
bWVzc2FnZXMuCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgR2V0UGx1Z2lu
cyhib29sIHJlZnJlc2gpIC0+IChWZWN0b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4gcGx1Z2lucywg
VmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+IGFwcGxpY2F0aW9uUGx1Z2lucywgc3RydWN0IHN0
ZDo6b3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6OlN1cHBvcnRlZFBsdWdpbklkZW50aWZpZXI+PiBz
dXBwb3J0ZWRQbHVnaW5JZGVudGlmaWVycykgU3luY2hyb25vdXMKLSAgICBHZXRQbHVnaW5Qcm9j
ZXNzQ29ubmVjdGlvbih1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4pIC0+IChJUEM6OkF0dGFj
aG1lbnQgY29ubmVjdGlvbkhhbmRsZSwgYm9vbCBzdXBwb3J0c0FzeW5jaHJvbm91c0luaXRpYWxp
emF0aW9uKSBTeW5jaHJvbm91cwotI2VuZGlmCiAgICAgR2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uKCkgLT4gKHN0cnVjdCBXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8gY29u
bmVjdGlvbkluZm8pIFN5bmNocm9ub3VzCiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVJl
Y29yZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVJlY29yZC5jcHAKaW5kZXggZTkzYzhmYTI4MjdlNWFjNjg1ZjFlYTU1Yzk3Y2E4MTA3YjNmNzll
OC4uODVkMjJkMmRjNTJhMzNiMmJkMTBkYzQyZmQxMTc2ODhjNmIwYjMzMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFSZWNvcmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhUmVj
b3JkLmNwcApAQCAtOTAsMTQgKzkwLDYgQEAgdm9pZCBXZWJzaXRlRGF0YVJlY29yZDo6YWRkQ29v
a2llSG9zdE5hbWUoY29uc3QgU3RyaW5nJiBob3N0TmFtZSkKICAgICBjb29raWVIb3N0TmFtZXMu
YWRkKGhvc3ROYW1lKTsKIH0KIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotdm9p
ZCBXZWJzaXRlRGF0YVJlY29yZDo6YWRkUGx1Z2luRGF0YUhvc3ROYW1lKGNvbnN0IFN0cmluZyYg
aG9zdE5hbWUpCi17Ci0gICAgdHlwZXMuYWRkKFdlYnNpdGVEYXRhVHlwZTo6UGx1Z0luRGF0YSk7
Ci0gICAgcGx1Z2luRGF0YUhvc3ROYW1lcy5hZGQoaG9zdE5hbWUpOwotfQotI2VuZGlmCi0KIHZv
aWQgV2Vic2l0ZURhdGFSZWNvcmQ6OmFkZEhTVFNDYWNoZUhvc3RuYW1lKGNvbnN0IFN0cmluZyYg
aG9zdE5hbWUpCiB7CiAgICAgdHlwZXMuYWRkKFdlYnNpdGVEYXRhVHlwZTo6SFNUU0NhY2hlKTsK
QEAgLTE2MCwxMiArMTUyLDYgQEAgU3RyaW5nIFdlYnNpdGVEYXRhUmVjb3JkOjp0b3BQcml2YXRl
bHlDb250cm9sbGVkRG9tYWluKCkKICAgICAKICAgICBpZiAoIW9yaWdpbnMuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gV2ViQ29yZTo6dG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbihvcmln
aW5zLnRha2VBbnkoKS5zZWN1cml0eU9yaWdpbigpLmdldCgpLmhvc3QoKSk7Ci0gICAgCi0jaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgaWYgKCFwbHVnaW5EYXRhSG9zdE5hbWVz
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OnRvcFByaXZhdGVseUNvbnRyb2xs
ZWREb21haW4ocGx1Z2luRGF0YUhvc3ROYW1lcy50YWtlQW55KCkpOwotI2VuZGlmCi0gICAgCiAj
ZW5kaWYgLy8gRU5BQkxFKFBVQkxJQ19TVUZGSVhfTElTVCkKICAgICAKICAgICByZXR1cm4gZW1w
dHlTdHJpbmcoKTsKQEAgLTE3OSw5ICsxNjUsNiBAQCBXZWJzaXRlRGF0YVJlY29yZCBXZWJzaXRl
RGF0YVJlY29yZDo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKICAgICAgICAgc2l6ZSwKICAgICAgICAg
Y3Jvc3NUaHJlYWRDb3B5KG9yaWdpbnMpLAogICAgICAgICBjcm9zc1RocmVhZENvcHkoY29va2ll
SG9zdE5hbWVzKSwKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgY3Jv
c3NUaHJlYWRDb3B5KHBsdWdpbkRhdGFIb3N0TmFtZXMpLAotI2VuZGlmCiAgICAgICAgIGNyb3Nz
VGhyZWFkQ29weShIU1RTQ2FjaGVIb3N0TmFtZXMpLAogICAgICAgICBjcm9zc1RocmVhZENvcHko
YWx0ZXJuYXRpdmVTZXJ2aWNlc0hvc3ROYW1lcyksCiAjaWYgRU5BQkxFKElOVEVMTElHRU5UX1RS
QUNLSU5HX1BSRVZFTlRJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVJlY29yZC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFSZWNvcmQuaAppbmRleCA5ZDg2ZWEwNWE5YzgwZTMwNTFi
YTJlMjQ5YmQ4M2JmMzZmMWM2NTgwLi4xMWNhOGU4MDAyNmJhODUyOTdkZTMxZTNmZDAxMjFjYjFm
Y2Q1ZTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVJlY29yZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhUmVjb3JkLmgKQEAgLTQ5LDkgKzQ5LDYgQEAgc3RydWN0IFdlYnNpdGVE
YXRhUmVjb3JkIHsKIAogICAgIHZvaWQgYWRkKFdlYnNpdGVEYXRhVHlwZSwgY29uc3QgV2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW5EYXRhJik7CiAgICAgdm9pZCBhZGRDb29raWVIb3N0TmFtZShjb25z
dCBTdHJpbmcmIGhvc3ROYW1lKTsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAg
ICB2b2lkIGFkZFBsdWdpbkRhdGFIb3N0TmFtZShjb25zdCBTdHJpbmcmIGhvc3ROYW1lKTsKLSNl
bmRpZgogICAgIHZvaWQgYWRkSFNUU0NhY2hlSG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0TmFt
ZSk7CiAgICAgdm9pZCBhZGRBbHRlcm5hdGl2ZVNlcnZpY2VzSG9zdG5hbWUoY29uc3QgU3RyaW5n
JiBob3N0TmFtZSk7CiAjaWYgRU5BQkxFKElOVEVMTElHRU5UX1RSQUNLSU5HX1BSRVZFTlRJT04p
CkBAIC03NCw5ICs3MSw2IEBAIHN0cnVjdCBXZWJzaXRlRGF0YVJlY29yZCB7CiAKICAgICBIYXNo
U2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2luczsKICAgICBIYXNoU2V0PFN0
cmluZz4gY29va2llSG9zdE5hbWVzOwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQot
ICAgIEhhc2hTZXQ8U3RyaW5nPiBwbHVnaW5EYXRhSG9zdE5hbWVzOwotI2VuZGlmCiAgICAgSGFz
aFNldDxTdHJpbmc+IEhTVFNDYWNoZUhvc3ROYW1lczsKICAgICBIYXNoU2V0PFN0cmluZz4gYWx0
ZXJuYXRpdmVTZXJ2aWNlc0hvc3ROYW1lczsKICNpZiBFTkFCTEUoSU5URUxMSUdFTlRfVFJBQ0tJ
TkdfUFJFVkVOVElPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXggZmZmY2EyMjY2ZmU3MDE1YTZjMDM5
YjI5MzdhYTY0ODg5MWIzY2Q0Ni4uOTY3MDUxNTM0N2E1NGMwNmFkNGU3MjRmMGRlNjY5ZTEyMzJi
ZDA4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTcwLDEwICs3MCw2IEBACiAjaW5jbHVkZSA8d3Rm
L3NwaS9kYXJ3aW4vT1NWYXJpYW50U1BJLmg+CiAjZW5kaWYKIAotI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NNYW5hZ2VyLmgiCi0jZW5kaWYK
LQogI2lmIEhBVkUoU0VDX0tFWV9QUk9YWSkKICNpbmNsdWRlICJTZWNLZXlQcm94eVN0b3JlLmgi
CiAjZW5kaWYKQEAgLTM5MSwyMCArMzg3LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRj
aERhdGFBbmRBcHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE8KICAg
ICAgICAgICAgICAgICByZWNvcmQuYWRkQ29va2llSG9zdE5hbWUoaG9zdE5hbWUpOwogICAgICAg
ICAgICAgfQogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgICAgICBm
b3IgKGF1dG8mIGhvc3ROYW1lIDogd2Vic2l0ZURhdGEuaG9zdE5hbWVzV2l0aFBsdWdpbkRhdGEp
IHsKLSAgICAgICAgICAgICAgICBhdXRvIGRpc3BsYXlOYW1lID0gV2Vic2l0ZURhdGFSZWNvcmQ6
OmRpc3BsYXlOYW1lRm9ySG9zdE5hbWUoaG9zdE5hbWUpOwotICAgICAgICAgICAgICAgIGlmICgh
ZGlzcGxheU5hbWUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAg
ICAgICAgYXV0byYgcmVjb3JkID0gbV93ZWJzaXRlRGF0YVJlY29yZHMuYWRkKGRpc3BsYXlOYW1l
LCBXZWJzaXRlRGF0YVJlY29yZCB7IH0pLml0ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgICAgICAg
ICBpZiAoIXJlY29yZC5kaXNwbGF5TmFtZSkKLSAgICAgICAgICAgICAgICAgICAgcmVjb3JkLmRp
c3BsYXlOYW1lID0gV1RGTW92ZShkaXNwbGF5TmFtZSk7Ci0KLSAgICAgICAgICAgICAgICByZWNv
cmQuYWRkUGx1Z2luRGF0YUhvc3ROYW1lKGhvc3ROYW1lKTsKLSAgICAgICAgICAgIH0KLSNlbmRp
ZgotCiAgICAgICAgICAgICBmb3IgKGF1dG8mIGhvc3ROYW1lIDogd2Vic2l0ZURhdGEuaG9zdE5h
bWVzV2l0aEhTVFNDYWNoZSkgewogICAgICAgICAgICAgICAgIGF1dG8gZGlzcGxheU5hbWUgPSBX
ZWJzaXRlRGF0YVJlY29yZDo6ZGlzcGxheU5hbWVGb3JIb3N0TmFtZShob3N0TmFtZSk7CiAgICAg
ICAgICAgICAgICAgaWYgKCFkaXNwbGF5TmFtZSkKQEAgLTU0Miw1NyArNTI0LDYgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkV2Vic2l0ZURhdGEoV1RGTW92
ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICB9KTsKICAgICB9Ci0KLSNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLSAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6UGx1Z0luRGF0YSkgJiYgaXNQZXJzaXN0ZW50KCkpIHsKLSAgICAgICAgY2xhc3MgU3RhdGUg
ewotICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBzdGF0aWMgdm9pZCBmZXRjaERhdGEoUmVm
PENhbGxiYWNrQWdncmVnYXRvcj4mJiBjYWxsYmFja0FnZ3JlZ2F0b3IsIFZlY3RvcjxQbHVnaW5N
b2R1bGVJbmZvPiYmIHBsdWdpbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbmV3
IFN0YXRlKFdURk1vdmUoY2FsbGJhY2tBZ2dyZWdhdG9yKSwgV1RGTW92ZShwbHVnaW5zKSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgIFN0YXRlKFJlZjxD
YWxsYmFja0FnZ3JlZ2F0b3I+JiYgY2FsbGJhY2tBZ2dyZWdhdG9yLCBWZWN0b3I8UGx1Z2luTW9k
dWxlSW5mbz4mJiBwbHVnaW5zKQotICAgICAgICAgICAgICAgIDogbV9jYWxsYmFja0FnZ3JlZ2F0
b3IoV1RGTW92ZShjYWxsYmFja0FnZ3JlZ2F0b3IpKQotICAgICAgICAgICAgICAgICwgbV9wbHVn
aW5zKFdURk1vdmUocGx1Z2lucykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmV0
Y2hXZWJzaXRlRGF0YUZvck5leHRQbHVnaW4oKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgflN0YXRlKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9wbHVn
aW5zLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZvaWQgZmV0Y2hX
ZWJzaXRlRGF0YUZvck5leHRQbHVnaW4oKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChtX3BsdWdpbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFdlYnNpdGVE
YXRhIHdlYnNpdGVEYXRhOwotICAgICAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YS5ob3N0TmFt
ZXNXaXRoUGx1Z2luRGF0YSA9IFdURk1vdmUobV9ob3N0TmFtZXMpOwotCi0gICAgICAgICAgICAg
ICAgICAgIG1fY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRXZWJzaXRlRGF0YShXVEZNb3ZlKHdlYnNp
dGVEYXRhKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXM7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBh
dXRvIHBsdWdpbiA9IG1fcGx1Z2lucy50YWtlTGFzdCgpOwotICAgICAgICAgICAgICAgIFBsdWdp
blByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5mZXRjaFdlYnNpdGVEYXRhKHBsdWdpbiwgbV9j
YWxsYmFja0FnZ3JlZ2F0b3ItPmZldGNoT3B0aW9ucygpLCBbdGhpc10oVmVjdG9yPFN0cmluZz4g
aG9zdE5hbWVzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byYgaG9zdE5hbWUgOiBo
b3N0TmFtZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2hvc3ROYW1lcy5hZGQoV1RGTW92
ZShob3N0TmFtZSkpOwotICAgICAgICAgICAgICAgICAgICBmZXRjaFdlYnNpdGVEYXRhRm9yTmV4
dFBsdWdpbigpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBSZWY8Q2FsbGJhY2tBZ2dyZWdhdG9yPiBtX2NhbGxiYWNrQWdncmVnYXRvcjsKLSAgICAg
ICAgICAgIFZlY3RvcjxQbHVnaW5Nb2R1bGVJbmZvPiBtX3BsdWdpbnM7Ci0gICAgICAgICAgICBI
YXNoU2V0PFN0cmluZz4gbV9ob3N0TmFtZXM7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgU3RhdGU6
OmZldGNoRGF0YShjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpLCBwbHVnaW5zKCkpOwotICAg
IH0KLSNlbmRpZgogfQogCiAjaWYgRU5BQkxFKElOVEVMTElHRU5UX1RSQUNLSU5HX1BSRVZFTlRJ
T04pCkBAIC03NjMsNTEgKzY5NCw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0
YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxUaW1lCiAgICAgICAg
IH0pOwogICAgIH0KIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGlmIChk
YXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpQbHVnSW5EYXRhKSAmJiBpc1BlcnNp
c3RlbnQoKSkgewotICAgICAgICBjbGFzcyBTdGF0ZSB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAg
ICAgICAgIHN0YXRpYyB2b2lkIGRlbGV0ZURhdGEoUmVmPFJlbW92YWxDYWxsYmFja0FnZ3JlZ2F0
b3I+JiYgY2FsbGJhY2tBZ2dyZWdhdG9yLCBWZWN0b3I8UGx1Z2luTW9kdWxlSW5mbz4mJiBwbHVn
aW5zLCBXYWxsVGltZSBtb2RpZmllZFNpbmNlKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG5ldyBTdGF0ZShXVEZNb3ZlKGNhbGxiYWNrQWdncmVnYXRvciksIFdURk1vdmUocGx1Z2lu
cyksIG1vZGlmaWVkU2luY2UpOwotICAgICAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGU6Ci0g
ICAgICAgICAgICBTdGF0ZShSZWY8UmVtb3ZhbENhbGxiYWNrQWdncmVnYXRvcj4mJiBjYWxsYmFj
a0FnZ3JlZ2F0b3IsIFZlY3RvcjxQbHVnaW5Nb2R1bGVJbmZvPiYmIHBsdWdpbnMsIFdhbGxUaW1l
IG1vZGlmaWVkU2luY2UpCi0gICAgICAgICAgICAgICAgOiBtX2NhbGxiYWNrQWdncmVnYXRvcihX
VEZNb3ZlKGNhbGxiYWNrQWdncmVnYXRvcikpCi0gICAgICAgICAgICAgICAgLCBtX3BsdWdpbnMo
V1RGTW92ZShwbHVnaW5zKSkKLSAgICAgICAgICAgICAgICAsIG1fbW9kaWZpZWRTaW5jZShtb2Rp
ZmllZFNpbmNlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRlbGV0ZVdlYnNpdGVE
YXRhRm9yTmV4dFBsdWdpbigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB+U3RhdGUo
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEFTU0VSVChtX3BsdWdpbnMuaXNFbXB0
eSgpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdm9pZCBkZWxldGVXZWJzaXRlRGF0
YUZvck5leHRQbHVnaW4oKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtX3Bs
dWdpbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgYXV0byBwbHVnaW4gPSBtX3BsdWdpbnMudGFrZUxhc3QoKTsKLSAgICAgICAgICAgICAg
ICBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuZGVsZXRlV2Vic2l0ZURhdGEocGx1
Z2luLCBtX21vZGlmaWVkU2luY2UsIFt0aGlzXSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0
ZVdlYnNpdGVEYXRhRm9yTmV4dFBsdWdpbigpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBSZWY8UmVtb3ZhbENhbGxiYWNrQWdncmVnYXRvcj4gbV9j
YWxsYmFja0FnZ3JlZ2F0b3I7Ci0gICAgICAgICAgICBWZWN0b3I8UGx1Z2luTW9kdWxlSW5mbz4g
bV9wbHVnaW5zOwotICAgICAgICAgICAgV2FsbFRpbWUgbV9tb2RpZmllZFNpbmNlOwotICAgICAg
ICB9OwotCi0gICAgICAgIFN0YXRlOjpkZWxldGVEYXRhKGNhbGxiYWNrQWdncmVnYXRvci5jb3B5
UmVmKCksIHBsdWdpbnMoKSwgbW9kaWZpZWRTaW5jZSk7Ci0gICAgfQotI2VuZGlmCi0KICNpZiBF
TkFCTEUoSU5URUxMSUdFTlRfVFJBQ0tJTkdfUFJFVkVOVElPTikKICAgICBpZiAoZGF0YVR5cGVz
LmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcykpIHsKICAg
ICAgICAgaWYgKCFkaWROb3RpZnlOZXR3b3JrUHJvY2Vzc1RvRGVsZXRlV2Vic2l0ZURhdGEpCkBA
IC05NDIsNTkgKzgyOCw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRp
b25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAgICAgICAgICAgICBy
ZW1vdmVNZWRpYUtleXMobWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwgb3JpZ2lucyk7CiAgICAg
ICAgIH0pOwogICAgIH0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGlm
IChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpQbHVnSW5EYXRhKSAmJiBpc1Bl
cnNpc3RlbnQoKSkgewotICAgICAgICBWZWN0b3I8U3RyaW5nPiBob3N0TmFtZXM7Ci0gICAgICAg
IGZvciAoY29uc3QgYXV0byYgZGF0YVJlY29yZCA6IGRhdGFSZWNvcmRzKSB7Ci0gICAgICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGhvc3ROYW1lIDogZGF0YVJlY29yZC5wbHVnaW5EYXRhSG9zdE5h
bWVzKQotICAgICAgICAgICAgICAgIGhvc3ROYW1lcy5hcHBlbmQoaG9zdE5hbWUpOwotICAgICAg
ICB9Ci0KLQotICAgICAgICBjbGFzcyBTdGF0ZSB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAg
ICAgIHN0YXRpYyB2b2lkIGRlbGV0ZURhdGEoUmVmPFJlbW92YWxDYWxsYmFja0FnZ3JlZ2F0b3I+
JiYgY2FsbGJhY2tBZ2dyZWdhdG9yLCBWZWN0b3I8UGx1Z2luTW9kdWxlSW5mbz4mJiBwbHVnaW5z
LCBWZWN0b3I8U3RyaW5nPiYmIGhvc3ROYW1lcykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBuZXcgU3RhdGUoV1RGTW92ZShjYWxsYmFja0FnZ3JlZ2F0b3IpLCBXVEZNb3ZlKHBsdWdp
bnMpLCBXVEZNb3ZlKGhvc3ROYW1lcykpOwotICAgICAgICAgICAgfQotCi0gICAgICAgIHByaXZh
dGU6Ci0gICAgICAgICAgICBTdGF0ZShSZWY8UmVtb3ZhbENhbGxiYWNrQWdncmVnYXRvcj4mJiBj
YWxsYmFja0FnZ3JlZ2F0b3IsIFZlY3RvcjxQbHVnaW5Nb2R1bGVJbmZvPiYmIHBsdWdpbnMsIFZl
Y3RvcjxTdHJpbmc+JiYgaG9zdE5hbWVzKQotICAgICAgICAgICAgICAgIDogbV9jYWxsYmFja0Fn
Z3JlZ2F0b3IoV1RGTW92ZShjYWxsYmFja0FnZ3JlZ2F0b3IpKQotICAgICAgICAgICAgICAgICwg
bV9wbHVnaW5zKFdURk1vdmUocGx1Z2lucykpCi0gICAgICAgICAgICAgICAgLCBtX2hvc3ROYW1l
cyhXVEZNb3ZlKGhvc3ROYW1lcykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGVs
ZXRlV2Vic2l0ZURhdGFGb3JOZXh0UGx1Z2luKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIH5TdGF0ZSgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fcGx1
Z2lucy5pc0VtcHR5KCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2b2lkIGRlbGV0
ZVdlYnNpdGVEYXRhRm9yTmV4dFBsdWdpbigpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fcGx1Z2lucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRl
IHRoaXM7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBhdXRvIHBsdWdpbiA9IG1fcGx1Z2lucy50YWtlTGFzdCgpOwotICAg
ICAgICAgICAgICAgIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5kZWxldGVXZWJz
aXRlRGF0YUZvckhvc3ROYW1lcyhwbHVnaW4sIG1faG9zdE5hbWVzLCBbdGhpc10gewotICAgICAg
ICAgICAgICAgICAgICBkZWxldGVXZWJzaXRlRGF0YUZvck5leHRQbHVnaW4oKTsKLSAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgUmVmPFJlbW92YWxDYWxs
YmFja0FnZ3JlZ2F0b3I+IG1fY2FsbGJhY2tBZ2dyZWdhdG9yOwotICAgICAgICAgICAgVmVjdG9y
PFBsdWdpbk1vZHVsZUluZm8+IG1fcGx1Z2luczsKLSAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+
IG1faG9zdE5hbWVzOwotICAgICAgICB9OwotCi0gICAgICAgIGlmICghaG9zdE5hbWVzLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIFN0YXRlOjpkZWxldGVEYXRhKGNhbGxiYWNrQWdncmVnYXRvci5j
b3B5UmVmKCksIHBsdWdpbnMoKSwgV1RGTW92ZShob3N0TmFtZXMpKTsKLSAgICB9Ci0jZW5kaWYK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRl
c3RpbmcoU2Vjb25kcyBzZWNvbmRzKQpAQCAtMTY2MiwyMCArMTQ5NSw2IEBAIEhhc2hTZXQ8UmVm
UHRyPFdlYlByb2Nlc3NQb29sPj4gV2Vic2l0ZURhdGFTdG9yZTo6ZW5zdXJlUHJvY2Vzc1Bvb2xz
KCkgY29uc3QKICAgICByZXR1cm4gcHJvY2Vzc1Bvb2xzOwogfQogCi0jaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCi1WZWN0b3I8UGx1Z2luTW9kdWxlSW5mbz4gV2Vic2l0ZURhdGFTdG9y
ZTo6cGx1Z2lucygpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPFBsdWdpbk1vZHVsZUluZm8+IHBsdWdp
bnM7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgZm9yIChhdXRvJiBwbHVnaW4gOiBwcm9jZXNzUG9vbC0+cGx1Z2luSW5mb1N0
b3JlKCkucGx1Z2lucygpKQotICAgICAgICAgICAgcGx1Z2lucy5hcHBlbmQocGx1Z2luKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gcGx1Z2luczsKLX0KLSNlbmRpZgotCiBzdGF0aWMgU3RyaW5nIGNv
bXB1dGVNZWRpYUtleUZpbGUoY29uc3QgU3RyaW5nJiBtZWRpYUtleURpcmVjdG9yeSkKIHsKICAg
ICByZXR1cm4gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1lZGlhS2V5RGly
ZWN0b3J5LCAiU2VjdXJlU3RvcC5wbGlzdCIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCmluZGV4IDQyZWU2NzZjY2Rh
NGFiMTRiNWE0Mjg5ZWUxYTU3MWQxMmVkYzVmZWIuLjE1MDQ2YmU1YjVlNDBmZjFiNzg1ZWM1NGNi
NGI1ZTQxYzBiNWM3MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAgLTEwNSwxMCArMTA1LDYgQEAgZW51bSBj
bGFzcyBTdG9yYWdlQWNjZXNzU3RhdHVzIDogdWludDhfdDsKIGVudW0gY2xhc3MgU3RvcmFnZUFj
Y2Vzc1Byb21wdFN0YXR1czsKICNlbmRpZgogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi1zdHJ1Y3QgUGx1Z2luTW9kdWxlSW5mbzsKLSNlbmRpZgotCiBjbGFzcyBXZWJzaXRlRGF0
YVN0b3JlIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6V2Vic2l0
ZURhdGFTdG9yZT4sIHB1YmxpYyBJZGVudGlmaWVkPFdlYnNpdGVEYXRhU3RvcmU+LCBwdWJsaWMg
Q2FuTWFrZVdlYWtQdHI8V2Vic2l0ZURhdGFTdG9yZT4gIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UmVmPFdlYnNpdGVEYXRhU3RvcmU+IGRlZmF1bHREYXRhU3RvcmUoKTsKQEAgLTM5OSwxMCArMzk1
LDYgQEAgcHJpdmF0ZToKICAgICAvLyBXaWxsIGNyZWF0ZSBhIHRlbXBvcmFyeSBwcm9jZXNzIHBv
b2wgaXMgbm9uZSBleGlzdHMgeWV0LgogICAgIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29s
Pj4gZW5zdXJlUHJvY2Vzc1Bvb2xzKCkgY29uc3Q7CiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLSAgICBWZWN0b3I8UGx1Z2luTW9kdWxlSW5mbz4gcGx1Z2lucygpIGNvbnN0Owot
I2VuZGlmCi0KICAgICBzdGF0aWMgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4g
bWVkaWFLZXlPcmlnaW5zKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSk7
CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlz
U3RvcmFnZURpcmVjdG9yeSwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSk7CiAgICAgc3RhdGljIHZv
aWQgcmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9y
eSwgY29uc3QgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+Jik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQppbmRleCBiNDYzYzU1
ZWIxMDlkNGI2ZDJhZGQxZTg4NDgxMTU4YTMwYzc1ZjU0Li40Njc5ZDdiMDk4MWFhN2QzZmNkOWJk
ZTkwZWQ2ZmYyYWMyMzJlZTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV2ViUGFnZVByb3h5SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
ZWJQYWdlUHJveHlJT1MubW0KQEAgLTc2NSwxMSArNzY1LDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OnBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQodWludDY0X3QsIGJvb2wpCiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnNldFBsdWdpbkNvbXBsZXhU
ZXh0SW5wdXRTdGF0ZSh1aW50NjRfdCwgdWludDY0X3QpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQogdm9pZCBXZWJQYWdlUHJveHk6OmV4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9y
KGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgKaW5kZXggZDM3YzI4ZmViMWE1N2VkZmI0
YThmNGQ4OTgzNDJkMTk2YzdhODgwMi4uMzhhNDMwMmFmODhhMDE1MTM5YzIyYzg4NjgxZTc5ZjQ2
NzNhMWQxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGll
bnRJbXBsTWFjLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJ
bXBsTWFjLmgKQEAgLTE3NCw3ICsxNzQsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgYWNjZXNzaWJp
bGl0eVdlYlByb2Nlc3NUb2tlblJlY2VpdmVkKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpIG92
ZXJyaWRlOwogCiAgICAgdm9pZCBwbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkKHVpbnQ2
NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBib29sIHBsdWdpbkhhc0ZvY3Vz
QW5kV2luZG93SGFzRm9jdXMpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0UGx1Z2luQ29tcGxleFRl
eHRJbnB1dFN0YXRlKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBQ
bHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBtYWtlRmly
c3RSZXNwb25kZXIoKSBvdmVycmlkZTsKICAgICB2b2lkIGFzc2lzdGl2ZVRlY2hub2xvZ3lNYWtl
Rmlyc3RSZXNwb25kZXIoKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQppbmRleCBhYjczOTk0ODk5YzU0N2NlMTg0Yjk5NjFh
YTI1N2NlMWJhOWJmY2Q1Li5kNDMzYTZkZDJiMmY4NGM0ZDliNDFiOTg3ZWQzMzFjY2E1MDEwMzlh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxN
YWMubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFj
Lm1tCkBAIC02NTksMTEgKzY1OSw2IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnBsdWdpbkZvY3Vz
T3JXaW5kb3dGb2N1c0NoYW5nZWQodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJCiAgICAgbV9p
bXBsLT5wbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkKHBsdWdpbkhhc0ZvY3VzQW5kV2lu
ZG93SGFzRm9jdXMsIHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyKTsKIH0KIAotdm9p
ZCBQYWdlQ2xpZW50SW1wbDo6c2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKHVpbnQ2NF90
IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBQbHVnaW5Db21wbGV4VGV4dElucHV0
U3RhdGUgcGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKQotewotICAgIG1faW1wbC0+c2V0UGx1
Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlQW5kSWRlbnRpZmllcihwbHVnaW5Db21wbGV4VGV4dElu
cHV0U3RhdGUsIHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyKTsKLX0KLQogdm9pZCBQ
YWdlQ2xpZW50SW1wbDo6ZGlkUGVyZm9ybURpY3Rpb25hcnlMb29rdXAoY29uc3QgRGljdGlvbmFy
eVBvcHVwSW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbykKIHsKICAgICBtX2ltcGwtPnByZXBhcmVG
b3JEaWN0aW9uYXJ5TG9va3VwKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dl
YlBhZ2VQcm94eU1hYy5tbQppbmRleCA5YzMwODlmZjdkNjZjOTIxMjIwMTMyOWZhOGZjMTBjZmI4
NTc3MGU2Li42ZDMzMzg2OWU0ZTAwMTJkMjdkM2ZlODVkODVlNTNhNGVkOTY5NjBhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KQEAgLTQwLDcg
KzQwLDYgQEAKICNpbXBvcnQgIlBERkNvbnRleHRNZW51LmgiCiAjaW1wb3J0ICJQYWdlQ2xpZW50
LmgiCiAjaW1wb3J0ICJQYWdlQ2xpZW50SW1wbE1hYy5oIgotI2ltcG9ydCAiUGx1Z2luQ29tcGxl
eFRleHRJbnB1dFN0YXRlLmgiCiAjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVIb3N0LmgiCiAjaW1w
b3J0ICJTdHJpbmdVdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRleHRDaGVja2VyLmgiCkBAIC0zNjYs
MTMgKzM2NSw2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwbHVnaW5Gb2N1c09yV2luZG93Rm9jdXND
aGFuZ2VkKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wCiAgICAgcGFnZUNsaWVudCgpLnBs
dWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQocGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50
aWZpZXIsIHBsdWdpbkhhc0ZvY3VzQW5kV2luZG93SGFzRm9jdXMpOwogfQogCi12b2lkIFdlYlBh
Z2VQcm94eTo6c2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKHVpbnQ2NF90IHBsdWdpbkNv
bXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCB1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0
U3RhdGUpCi17Ci0gICAgTUVTU0FHRV9DSEVDSyhpc1ZhbGlkUGx1Z2luQ29tcGxleFRleHRJbnB1
dFN0YXRlKHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkpOwotCi0gICAgcGFnZUNsaWVudCgp
LnNldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZShwbHVnaW5Db21wbGV4VGV4dElucHV0SWRl
bnRpZmllciwgc3RhdGljX2Nhc3Q8UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlPihwbHVnaW5D
b21wbGV4VGV4dElucHV0U3RhdGUpKTsKLX0KLQogdm9pZCBXZWJQYWdlUHJveHk6OmV4ZWN1dGVT
YXZlZENvbW1hbmRCeVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgTUVTU0FHRV9D
SEVDSyhpc1ZhbGlkS2V5cHJlc3NDb21tYW5kTmFtZShzZWxlY3RvcikpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzg2YjA5NWUyZDQ5
MWNiM2MwNjIwYjQ2OWQ4OWUyNTU1MzJmNjdlMi4uNGM5MGU3MTE0MTE5NWQzZTk0OGU3ODM2YWMy
ZDhjMGM1MjU4MmM1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0xOSw3ICsxOSw2IEBACiAJCQkJNTc0MkEyRkEyNTM1NjE5RDAwQjdC
QTE0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJQkNBOEQ0NjgxNUJDRTBENjAwOURD
MUYxIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJMzcyRUJCNDkyMDE3RTZDRjAwMDg1
MDY0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCi0JCQkJQkM4Mjg0NDYxNkI0RkY2NjAwQTI3
OEZFIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJQkM4MjgzRDUxNkI0QzAxRjAwQTI3
OEZFIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJMkQ5RkIyMkMyMzc1MjQ1QzAwNDlG
OTM2IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkpOwpAQCAtMTc4LDE2ICsxNzcsNiBA
QAogCQkxQTAwMkQ0MzE5NkIzMzcwMDBCOUFENDQgLyogX1dLU2Vzc2lvblN0YXRlSW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMDAyRDQy
MTk2QjMzNzAwMEI5QUQ0NCAvKiBfV0tTZXNzaW9uU3RhdGVJbnRlcm5hbC5oICovOyB9OwogCQkx
QTAwMkQ0NDE5NkIzMzg5MDBCOUFENDQgLyogX1dLU2Vzc2lvblN0YXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTAwMkQzRjE5NkIzMjk0MDBCOUFE
NDQgLyogX1dLU2Vzc2lvblN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMUEwMDJENDkxOTZCMzQ1RDAwQjlBRDQ0IC8qIFNlc3Npb25TdGF0
ZUNvZGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUEwMDJENDcxOTZCMzQ1RDAwQjlBRDQ0IC8qIFNlc3Npb25TdGF0ZUNvZGluZy5oICovOyB9Owot
CQkxQTA0Mzk3NjEyNEQwMzQ4MDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwNDM5NzQxMjREMDM0ODAwRkZC
RkI1IC8qIFBsdWdpblByb2Nlc3MuaCAqLzsgfTsKLQkJMUEwNDM5NzcxMjREMDM0ODAwRkZCRkI1
IC8qIFBsdWdpblByb2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUEwNDM5NzUxMjREMDM0ODAwRkZCRkI1IC8qIFBsdWdpblByb2Nlc3MuY3Bw
ICovOyB9OwotCQkxQTA0M0EwOTEyNEQxMUE5MDBGRkJGQjUgLyogV2ViUHJvY2Vzc0Nvbm5lY3Rp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMDQz
QTA3MTI0RDExQTkwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbi5oICovOyB9OwotCQkx
QTA0M0EwQTEyNEQxMUE5MDBGRkJGQjUgLyogV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwNDNBMDgxMjREMTFB
OTAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uLmNwcCAqLzsgfTsKLQkJMUEwNDNCNUQx
MjRENUU5RDAwRkZCRkI1IC8qIFBsdWdpblByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTA0M0I1QjEy
NEQ1RTlEMDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAq
LzsgfTsKLQkJMUEwNDNCNUUxMjRENUU5RDAwRkZCRkI1IC8qIFBsdWdpblByb2Nlc3NQcm94eU1l
c3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTA0M0I1QzEyNEQ1RTlEMDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCAq
LzsgfTsKLQkJMUEwNDNDRUIxMjRGRTM4RjAwRkZCRkI1IC8qIFBsdWdpblByb2Nlc3NNZXNzYWdl
UmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUEwRUM2QkQxMjRCQkQ5QjAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NNZXNzYWdlUmVjZWl2
ZXIuY3BwICovOyB9OwotCQkxQTA0M0RDMTEyNEZGODc1MDBGRkJGQjUgLyogUGx1Z2luUHJveHku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMDQzREJG
MTI0RkY4NzUwMEZGQkZCNSAvKiBQbHVnaW5Qcm94eS5oICovOyB9OwotCQkxQTA0M0Y2OTEyNTE0
RDhCMDBGRkJGQjUgLyogV2ViUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwNDNGNjcxMjUx
NEQ4QjAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAq
LzsgfTsKLQkJMUEwNDNGNkExMjUxNEQ4QjAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9u
TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBMDQzRjY4MTI1MTREOEIwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2Vz
LmggKi87IH07CiAJCTFBMDdEMkY4MTkxOUIzQTkwMEVDREExNiAvKiBfX2luaXRfXy5weSBpbiBD
b3B5IE1lc3NhZ2UgR2VuZXJhdGlvbiBTY3JpcHRzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQzA4NTZFMTg3Q0UwQTkwMDc4MEQ4NiAvKiBfX2luaXRfXy5weSAqLzsgfTsK
IAkJMUEwN0QyRjkxOTE5QjNBOTAwRUNEQTE2IC8qIG1lc3NhZ2VzLnB5IGluIENvcHkgTWVzc2Fn
ZSBHZW5lcmF0aW9uIFNjcmlwdHMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZDMDg1NkYxODdDRTBBOTAwNzgwRDg2IC8qIG1lc3NhZ2VzLnB5ICovOyB9OwogCQkxQTA3RDJG
QTE5MTlCM0E5MDBFQ0RBMTYgLyogbW9kZWwucHkgaW4gQ29weSBNZXNzYWdlIEdlbmVyYXRpb24g
U2NyaXB0cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwODU3MDE4N0NF
MEE5MDA3ODBEODYgLyogbW9kZWwucHkgKi87IH07CkBAIC0xOTUsMTYgKzE4NCw5IEBACiAJCTFB
MEMyMjVFMjQzNTc1Q0QwMEVENjE0RCAvKiBRdWlja0xvb2tUaHVtYm5haWxMb2FkZXIubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUVFNTcyNDI0MDlG
MTQyMDAyMDA1RDYgLyogUXVpY2tMb29rVGh1bWJuYWlsTG9hZGVyLm1tICovOyB9OwogCQkxQTBD
MjI3RTI0NTExMzBBMDBFRDYxNEQgLyogUXVpY2tMb29rVGh1bWJuYWlsaW5nU29mdExpbmsuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMEMyMjdDMjQ1
MTEzMEEwMEVENjE0RCAvKiBRdWlja0xvb2tUaHVtYm5haWxpbmdTb2Z0TGluay5oICovOyB9Owog
CQkxQTBDMjI3RjI0NTExMzBBMDBFRDYxNEQgLyogUXVpY2tMb29rVGh1bWJuYWlsaW5nU29mdExp
bmsubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTBD
MjI3RDI0NTExMzBBMDBFRDYxNEQgLyogUXVpY2tMb29rVGh1bWJuYWlsaW5nU29mdExpbmsubW0g
Ki87IH07Ci0JCTFBMEVDNjAzMTI0QTlGMkMwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzTWFuYWdl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwRUM2
MDExMjRBOUYyQzAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NNYW5hZ2VyLmggKi87IH07Ci0JCTFB
MEVDNkMwMTI0QkJEOUIwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzTWVzc2FnZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMEVDNkJFMTI0QkJEOUIw
MDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzTWVzc2FnZXMuaCAqLzsgfTsKLQkJMUEwRUM3NUUxMjRC
QzdCMjAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwRUM3NUMxMjRCQzdCMjAwN0VGNEE1IC8qIFBs
dWdpblByb2Nlc3NQcm94eS5oICovOyB9OwotCQkxQTBFQzkwNjEyNEMwQUI4MDA3RUY0QTUgLyog
UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBMEVDOTA0MTI0QzBBQjgwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbi5oICovOyB9OwotCQkxQTBFQzkwRjEyNEMwQUY1MDA3RUY0QTUgLyogUGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQTBFQzkwRDEyNEMwQUY1MDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb25NYW5hZ2VyLmggKi87IH07CiAJCTFBMEYyOUU0MTIwQjQ0NDIwMDUzRDFCOSAv
KiBWaXNpdGVkTGlua1N0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQTBGMjlFMjEyMEI0NDQyMDA1M0QxQjkgLyogVmlzaXRlZExpbmtTdG9yZS5o
ICovOyB9OwogCQkxQTE0RjhFMjFENzRDODM0MDA2Q0JFQzYgLyogRnJhbWVJbmZvRGF0YS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUExNEY4RTAxRDc0
QzgzNDAwNkNCRUM2IC8qIEZyYW1lSW5mb0RhdGEuaCAqLzsgfTsKIAkJMUExNTg0MUExODkwNDRG
NTAwMTc2MTZDIC8qIFdLUHJvY2Vzc1Bvb2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBMTU4NDE4MTg5MDQ0RjUwMDE3NjE2QyAvKiBXS1Byb2Nlc3NQ
b29sLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwotCQkx
QTE3OTc3RjEzN0VFODJDMDBGOTdENDUgLyogUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMTc5NzdEMTM3
RUU4MkMwMEY5N0Q0NSAvKiBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMuY3BwICovOyB9OwotCQkx
QTE3OTc4MDEzN0VFODJDMDBGOTdENDUgLyogUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTE3OTc3RTEzN0VF
ODJDMDBGOTdENDUgLyogUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmggKi87IH07CiAJCTFBMUIw
RUI2MThBNDI0OTUwMDM4NDgxQSAvKiBXS05hdmlnYXRpb25SZXNwb25zZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUExQjBFQjQxOEE0MjQ5NTAwMzg0
ODFBIC8qIFdLTmF2aWdhdGlvblJlc3BvbnNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHVibGljLCApOyB9OyB9OwogCQkxQTFCMEVCODE4QTQyNENEMDAzODQ4MUEgLyogV0tOYXZp
Z2F0aW9uUmVzcG9uc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUExQjBFQjcxOEE0MjRDRDAwMzg0ODFBIC8qIFdLTmF2aWdhdGlvblJl
c3BvbnNlSW50ZXJuYWwuaCAqLzsgfTsKIAkJMUExREMzNDAxOTYzNDZENzAwRkY3MDU5IC8qIExl
Z2FjeVNlc3Npb25TdGF0ZUNvZGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzE2MDdGMzgxOTYyNzAwMjAwOUI4N0RBIC8qIExlZ2FjeVNlc3Npb25T
dGF0ZUNvZGluZy5oICovOyB9OwpAQCAtMjEyLDI0ICsxOTQsMTEgQEAKIAkJMUExRUM2OUUxODcy
MDkyMTAwQjk1MUYwIC8qIEltcG9ydGFuY2VBc3NlcnRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMUVDNjlEMTg3MjA5MjEwMEI5NTFGMCAvKiBJ
bXBvcnRhbmNlQXNzZXJ0aW9uLmggKi87IH07CiAJCTFBMUZFQzFDMTYyN0I0NTcwMDcwMEY2RCAv
KiBXZWJDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMUZFQzFBMTYyN0I0NTYwMDcwMEY2RCAvKiBXZWJD
b25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJMUExRkVDMUQxNjI3QjQ1NzAw
NzAwRjZEIC8qIFdlYkNvbm5lY3Rpb25NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUExRkVDMUIxNjI3QjQ1NzAwNzAwRjZEIC8qIFdlYkNv
bm5lY3Rpb25NZXNzYWdlcy5oICovOyB9OwotCQkxQTIxNjFCMDExRjM3NjY0MDA4QUQwRjUgLyog
TlBSdW50aW1lT2JqZWN0TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQTIxNjFBRTExRjM3NjY0MDA4QUQwRjUgLyogTlBSdW50aW1lT2JqZWN0TWFw
LmggKi87IH07Ci0JCTFBMjE2MkIxMTFGMzg5NzEwMDhBRDBGNSAvKiBOUFJ1bnRpbWVVdGlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMjE2
MkFGMTFGMzg5NzEwMDhBRDBGNSAvKiBOUFJ1bnRpbWVVdGlsaXRpZXMuaCAqLzsgfTsKIAkJMUEy
NDY0RjMxODkxRTQ1MTAwMjM0QzVCIC8qIEFQSUxvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyNDY0RjIxODkxRTQ1MTAwMjM0QzVC
IC8qIEFQSUxvYWRlckNsaWVudC5oICovOyB9OwogCQkxQTI0QjVGMzExRjUzMUU4MDBDMzgyNjkg
LyogTWFjaFV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUEyNEI1RjExMUY1MzFFODAwQzM4MjY5IC8qIE1hY2hVdGlsaXRpZXMuaCAqLzsg
fTsKIAkJMUEyNEJFRDUxMjA4OTREMTAwRkJCMDU5IC8qIFNoYXJlZE1lbW9yeS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyNEJFRDMxMjA4OTREMTAw
RkJCMDU5IC8qIFNoYXJlZE1lbW9yeS5oICovOyB9OwogCQkxQTI1NkUzODE4QTFBNzg4MDA2RkI5
MjIgLyogV0tOYXZpZ2F0aW9uQWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQTI1NkUzNjE4QTFBNzg4MDA2RkI5MjIgLyogV0tOYXZpZ2F0aW9u
QWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9Owog
CQkxQTI1NkUzQTE4QTFBN0RGMDA2RkI5MjIgLyogV0tOYXZpZ2F0aW9uQWN0aW9uSW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMjU2RTM5
MThBMUE3REYwMDZGQjkyMiAvKiBXS05hdmlnYXRpb25BY3Rpb25JbnRlcm5hbC5oICovOyB9Owot
CQkxQTJCQjZEMDE0MTE3QjREMDAwRjM1RDQgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NZXNz
YWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUEyQkI2Q0UxNDExN0I0RDAwMEYzNUQ0IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9u
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKLQkJMUEyQkI2RDExNDExN0I0RDAwMEYzNUQ0IC8q
IFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMkJCNkNGMTQxMTdCNEQwMDBGMzVENCAvKiBQbHVn
aW5Qcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmggKi87IH07Ci0JCTFBMkQ4MkE1MTI3RjRFQUIw
MDFFQjk2MiAvKiBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUExRkEzNUIxMjdBNDVCRjAwNTBFNzA5IC8qIE5Q
T2JqZWN0TWVzc2FnZVJlY2VpdmVyLmggKi87IH07Ci0JCTFBMkQ4MkE3MTI3RjRFQUIwMDFFQjk2
MiAvKiBOUE9iamVjdFByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQTFGQTI4MzEyN0ExM0JDMDA1MEU3MDkgLyogTlBPYmplY3RQcm94eS5oICov
OyB9OwotCQkxQTJEODJBOTEyN0Y0RUFCMDAxRUI5NjIgLyogTlBSZW1vdGVPYmplY3RNYXAuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMUZBMjUxMTI3
QTBFNEYwMDUwRTcwOSAvKiBOUFJlbW90ZU9iamVjdE1hcC5oICovOyB9OwotCQkxQTJEODQzOTEy
N0Y2NUQ1MDAxRUI5NjIgLyogTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXJNZXNzYWdlUmVjZWl2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyRDg0
MzcxMjdGNjVENTAwMUVCOTYyIC8qIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyTWVzc2FnZVJlY2Vp
dmVyLmNwcCAqLzsgfTsKLQkJMUEyRDg0M0ExMjdGNjVENTAwMUVCOTYyIC8qIE5QT2JqZWN0TWVz
c2FnZVJlY2VpdmVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBMkQ4NDM4MTI3RjY1RDUwMDFFQjk2MiAvKiBOUE9iamVjdE1lc3NhZ2VS
ZWNlaXZlck1lc3NhZ2VzLmggKi87IH07Ci0JCTFBMkQ4NDhCMTI3RjZBNDkwMDFFQjk2MiAvKiBO
UElkZW50aWZpZXJEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTJEODQ4OTEyN0Y2QTQ5MDAxRUI5NjIgLyogTlBJZGVudGlmaWVyRGF0YS5oICov
OyB9OwotCQkxQTJEODRBMzEyN0Y2QUQxMDAxRUI5NjIgLyogTlBWYXJpYW50RGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyRDg0QTExMjdGNkFE
MTAwMUVCOTYyIC8qIE5QVmFyaWFudERhdGEuaCAqLzsgfTsKLQkJMUEyRDkwRDIxMjgxQzk2NjAw
MUVCOTYyIC8qIFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMkQ5MEQwMTI4MUM5NjYwMDFFQjk2
MiAvKiBQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggKi87IH07Ci0JCTFBMkQ5MUE2
MTI4MUQ3MzkwMDFFQjk2MiAvKiBQbHVnaW5Db250cm9sbGVyUHJveHlNYWMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTJEOTFBNTEyODFENzM5MDAx
RUI5NjIgLyogUGx1Z2luQ29udHJvbGxlclByb3h5TWFjLm1tICovOyB9OwogCQkxQTJEOTU2RjEy
ODQ4NTY0MDAxRUI5NjIgLyogQXV4aWxpYXJ5UHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyRDk1NkQxMjg0ODU2NDAwMUVCOTYyIC8qIEF1
eGlsaWFyeVByb2Nlc3MuaCAqLzsgfTsKIAkJMUEzMDA2NkUxMTEwRjRGNzAwMzE5MzdDIC8qIFJl
c3BvbnNpdmVuZXNzVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBMzAwNjZDMTExMEY0RjcwMDMxOTM3QyAvKiBSZXNwb25zaXZlbmVzc1RpbWVy
LmggKi87IH07CiAJCTFBMzM0REVEMTZERThGODgwMDZBOEUzOCAvKiBTdG9yYWdlQXJlYU1hcE1l
c3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTMzNERFQjE2REU4Rjg4MDA2QThFMzggLyogU3RvcmFnZUFyZWFNYXBNZXNzYWdl
UmVjZWl2ZXIuY3BwICovOyB9OwpAQCAtMjM3LDcgKzIwNiw2IEBACiAJCTFBM0M4ODgwMThBNUFC
QUUwMEM0Qzk2MiAvKiBXS1ByZWZlcmVuY2VzSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBM0M4ODdGMThBNUFCQUUwMEM0Qzk2MiAvKiBX
S1ByZWZlcmVuY2VzSW50ZXJuYWwuaCAqLzsgfTsKIAkJMUEzQ0MxNjcxODkwNkFDRjAwMUU2RUQ4
IC8qIFdLV2ViVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUEzQ0MxNjUxODkwNkFDRjAwMUU2RUQ4IC8qIFdLV2ViVmlldy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJMUEzQ0MxNjkxODkwN0VCMDAw
MUU2RUQ4IC8qIFdLUHJvY2Vzc1Bvb2xJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEzQ0MxNjgxODkwN0VCMDAwMUU2RUQ4IC8qIFdLUHJv
Y2Vzc1Bvb2xJbnRlcm5hbC5oICovOyB9OwotCQkxQTNENjEwMjEzQTdDQzJBMDBGOTVENEUgLyog
UGx1Z2luTW9kdWxlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUEzRDYxMDAxM0E3Q0MyQTAwRjk1RDRFIC8qIFBsdWdpbk1vZHVsZUluZm8uaCAq
LzsgfTsKIAkJMUEzREQyMDYxMjVFNUEyRjAwNDUxNUU2IC8qIEFQSUNsaWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEzREQyMDUxMjVFNUEyRjAw
NDUxNUU2IC8qIEFQSUNsaWVudC5oICovOyB9OwogCQkxQTNFNzM2MTExQ0MyNjU5MDA3QkQ1Mzkg
LyogV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQTNFNzM1RjExQ0MyNjU5MDA3QkQ1MzkgLyogV2ViUGxhdGZvcm1T
dHJhdGVnaWVzLmggKi87IH07CiAJCTFBM0VFRDBGMTYxQTUzNTQwMEFFQjRGNSAvKiBNZXNzYWdl
UmVjZWl2ZXJNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBM0VFRDBEMTYxQTUzNTMwMEFFQjRGNSAvKiBNZXNzYWdlUmVjZWl2ZXJNYXAuaCAqLzsg
fTsKQEAgLTI1Miw4ICsyMjAsNiBAQAogCQkxQTQ4MzJEMTFBOUJEQzJGMDA4QjRERkUgLyogV2Vi
c2l0ZURhdGFSZWNvcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBNDgzMkNGMUE5QkQ4MjEwMDhCNERGRSAvKiBXZWJzaXRlRGF0YVJlY29yZC5oICov
OyB9OwogCQkxQTQ4MzJENzFBOUNERjk2MDA4QjRERkUgLyogV2Vic2l0ZURhdGEuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNDgzMkQ1MUE5Q0RGOTYw
MDhCNERGRSAvKiBXZWJzaXRlRGF0YS5oICovOyB9OwogCQkxQTRBOTNCNzFBRUIwOEVBMDAxNTBF
OUMgLyogX1dLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTRBOTNCNjFBRUIwOEVBMDAxNTBFOUMgLyogX1dL
V2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmggKi87IH07Ci0JCTFBNEE5QzU2MTJCODE2Q0YwMDhG
RTk4NCAvKiBOZXRzY2FwZVBsdWdpbk1vZHVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUE0QTlDNTQxMkI4MTZDRjAwOEZFOTg0IC8qIE5ldHNjYXBl
UGx1Z2luTW9kdWxlLmggKi87IH07Ci0JCTFBNEE5RjMzMTJCODQ0RTIwMDhGRTk4NCAvKiBQbHVn
aW5RdWlya3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBNEE5RjMxMTJCODQ0RTIwMDhGRTk4NCAvKiBQbHVnaW5RdWlya3MuaCAqLzsgfTsKIAkJMUE0
RDY2NDgxOEEyRDkxQTAwRDgyRTIxIC8qIEFQSVVJQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTRENjY0NzE4QTJEOTFBMDBEODJFMjEgLyog
QVBJVUlDbGllbnQuaCAqLzsgfTsKIAkJMUE0RDY2NEMxOEEzMDMwRTAwRDgyRTIxIC8qIFdLRnJh
bWVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTRENjY0QTE4QTMwMzBFMDBEODJFMjEgLyogV0tGcmFtZUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJCTFBNTJDMEY4MUEzOENEQzcwMDE2MTYw
QSAvKiBXZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNTJDMEY2MUEzOENEQzcwMDE2MTYwQSAvKiBXZWJT
dG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaCAqLzsgfTsKQEAgLTI4NCwxMCArMjUwLDYgQEAKIAkJ
MUE2RkEyMUUxQkQwNDM1QjAwQUFBNjUwIC8qIFdLRnJhbWVJbmZvUHJpdmF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE2RkEyMUQxQkQwNDM1QjAw
QUFBNjUwIC8qIFdLRnJhbWVJbmZvUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFBNkZCN0FGMTFFNjRCNjgwMERCMTM3MSAvKiBQbHVn
aW5WaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTZGQjdBRDExRTY0QjY4MDBEQjEzNzEgLyogUGx1Z2luVmlldy5oICovOyB9OwogCQkxQTZGQjdE
MzExRTY1MUUyMDBEQjEzNzEgLyogUGx1Z2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTZGQjdEMTExRTY1MUUyMDBEQjEzNzEgLyogUGx1Z2luLmgg
Ki87IH07Ci0JCTFBNkZCQTJBMTFFNjg2MjcwMERCMTM3MSAvKiBOZXRzY2FwZUJyb3dzZXJGdW5j
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE2RkJB
MjgxMUU2ODYyNzAwREIxMzcxIC8qIE5ldHNjYXBlQnJvd3NlckZ1bmNzLmggKi87IH07Ci0JCTFB
NkZCRDI4MTFFNjlCQzIwMERCMTM3MSAvKiBOZXRzY2FwZVBsdWdpbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE2RkJEMjYxMUU2OUJDMjAwREIxMzcx
IC8qIE5ldHNjYXBlUGx1Z2luLmggKi87IH07Ci0JCTFBNzg2NUI5MTZDQUM3MTUwMEFDRTgzQSAv
KiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3ODY1QjcxNkNBQzcx
NTAwQUNFODNBIC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi87IH07Ci0JCTFBNzg2NUJBMTZDQUM3MTUwMEFDRTgzQSAvKiBQbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbk1hbmFnZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUE3ODY1QjgxNkNBQzcxNTAwQUNFODNBIC8qIFBsdWdpblByb2Nl
c3NDb25uZWN0aW9uTWFuYWdlck1lc3NhZ2VzLmggKi87IH07CiAJCTFBN0MwREY3MUI3RDFGMTAw
MEE5Qjg0OCAvKiBXS1dpbmRvd0ZlYXR1cmVzUmVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTdDMERGNTFCN0QxRjEwMDBBOUI4NDggLyogV0tXaW5k
b3dGZWF0dXJlc1JlZi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTFBN0UzNzc1MThFNEEzM0EwMDNEMEZGRiAvKiBXS1NjcmlwdE1lc3NhZ2VIYW5k
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTdF
Mzc3NDE4RTRBMzNBMDAzRDBGRkYgLyogV0tTY3JpcHRNZXNzYWdlSGFuZGxlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJMUE3RTM3NzkxOEU0QTRG
RTAwM0QwRkZGIC8qIFdLU2NyaXB0TWVzc2FnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3RTM3NzcxOEU0QTRGRTAwM0QwRkZGIC8qIFdLU2NyaXB0
TWVzc2FnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsK
QEAgLTI5OCwxMiArMjYwLDYgQEAKIAkJMUE4QjY2QjQxQkM0NUIwMTAwODJERjc3IC8qIFdLQnVu
ZGxlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QThCNjZCMjFCQzQ1QjAxMDA4MkRGNzcgLyogV0tCdW5kbGVNYWMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQThFN0QzQzE4QzE1MTQ5MDA1QTcw
MkEgLyogVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE4RTdEM0ExOEMxNTE0
OTAwNUE3MDJBIC8qIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNw
cCAqLzsgfTsKIAkJMUE4RTdEM0QxOEMxNTE0OTAwNUE3MDJBIC8qIFZpc2l0ZWRMaW5rVGFibGVD
b250cm9sbGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBOEU3RDNCMThDMTUxNDkwMDVBNzAyQSAvKiBWaXNpdGVkTGlua1RhYmxlQ29u
dHJvbGxlck1lc3NhZ2VzLmggKi87IH07Ci0JCTFBOEVGNENCMTI1MjQwMzcwMEY3MDY3RiAvKiBQ
bHVnaW5Db250cm9sbGVyUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBOEVGNEM5MTI1MjQwMzcwMEY3MDY3RiAvKiBQbHVnaW5Db250cm9sbGVy
UHJveHkuaCAqLzsgfTsKLQkJMUE4RUY0Q0MxMjUyNDAzNzAwRjcwNjdGIC8qIFBsdWdpbkNvbnRy
b2xsZXJQcm94eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQThFRjRDQTEyNTI0MDM3MDBGNzA2N0YgLyogUGx1Z2luQ29udHJvbGxlclByb3h5LmNw
cCAqLzsgfTsKLQkJMUE4RUY5NkUxMjUyQUY2QjAwRjcwNjdGIC8qIFBsdWdpbkNvbnRyb2xsZXJQ
cm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQThFRjk2QzEyNTJBRjZCMDBGNzA2N0YgLyogUGx1Z2luQ29udHJvbGxl
clByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKLQkJMUE4RUY5NkYxMjUyQUY2QjAwRjcw
NjdGIC8qIFBsdWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQThFRjk2RDEyNTJBRjZCMDBGNzA2N0YgLyog
UGx1Z2luQ29udHJvbGxlclByb3h5TWVzc2FnZXMuaCAqLzsgfTsKLQkJMUE4RUZBNzAxMjUyQjg0
MTAwRjcwNjdGIC8qIFBsdWdpblByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOEVGQTZFMTI1MkI4NDEwMEY3MDY3
RiAvKiBQbHVnaW5Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07Ci0JCTFBOEVGQTcxMTI1
MkI4NDEwMEY3MDY3RiAvKiBQbHVnaW5Qcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQThFRkE2RjEyNTJCODQxMDBGNzA2N0YgLyog
UGx1Z2luUHJveHlNZXNzYWdlcy5oICovOyB9OwogCQkxQTkwQzFFRTEyNjRGRDUwMDAzRTQ0RDQg
LyogV2ViRmluZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBOTBDMUVEMTI2NEZENTAwMDNFNDRENCAvKiBXZWJGaW5kT3B0aW9ucy5oICov
OyB9OwogCQkxQTkwQzFGNDEyNjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTBDMUYyMTI2NEZE
NzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5oICovOyB9OwogCQkxQTkyREMxMTEyRjhCQTQ2
MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MkRDMTAxMkY4QkE0NjAwMTdBRjY1IC8qIExheWVyVHJl
ZUNvbnRleHQuaCAqLzsgfTsKQEAgLTMxMiwxOCArMjY4LDE1IEBACiAJCTFBOUUzMjlCMTgyMkUx
Q0MwMEY1RDA0QyAvKiBXS1JlbW90ZU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5RTMyOTkxODIyRTFDQzAwRjVEMDRDIC8qIFdLUmVtb3Rl
T2JqZWN0LmggKi87IH07CiAJCTFBOUUzMjlGMTgyMkZFREQwMEY1RDA0QyAvKiBXS1JlbW90ZU9i
amVjdENvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQTlFMzI5RDE4MjJGRUREMDBGNUQwNEMgLyogV0tSZW1vdGVPYmplY3RDb2Rlci5oICovOyB9
OwogCQkxQTlFMzJBMTE4MjMwMTg5MDBGNUQwNEMgLyogX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnlJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUE5RTMyQTAxODIzMDE4OTAwRjVEMDRDIC8qIF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5SW50ZXJu
YWwuaCAqLzsgfTsKLQkJMUE5RkJBOEQxM0ZGMDRFNjAwREVFRDY3IC8qIFBsdWdpbkNvbXBsZXhU
ZXh0SW5wdXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUE5RkJBOEMxM0ZGMDRFNjAwREVFRDY3IC8qIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRT
dGF0ZS5oICovOyB9OwogCQkxQUExMzIxMjE5MUQ1OTI0MDA5QzE0ODkgLyogV0tOYXZpZ2F0aW9u
UmVzcG9uc2VQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQUExMzIxMTE5MUQ1OTI0MDA5QzE0ODkgLyogV0tOYXZpZ2F0aW9uUmVzcG9uc2VQ
cml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMUFBMjBENTExOEFENTBFMDAwNUQxRUQ0IC8qIFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBMjBE
NTAxOEFENTBFMDAwNUQxRUQ0IC8qIFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFBQTJFNTY3MThE
Nzc1MDgwMDM4MTRCRCAvKiBXS1dlYlByb2Nlc3NCdW5kbGVQYXJhbWV0ZXJzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUEyRTU2NTE4RDc3NTA4MDAz
ODE0QkQgLyogV0tXZWJQcm9jZXNzQnVuZGxlUGFyYW1ldGVycy5oICovOyB9OwogCQkxQUEzRDc1
QzE2NTFCNDRGMDA4NzEzRDAgLyogUmVtb3RlTGF5ZXJUcmVlSG9zdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBM0Q3NUExNjUxQjQ0RjAwODcxM0Qw
IC8qIFJlbW90ZUxheWVyVHJlZUhvc3QuaCAqLzsgfTsKIAkJMUFBNDE3Q0IxMkMwMENDQTAwMkJF
NjdCIC8qIFRleHRDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQUE0MTdDOTEyQzAwQ0NBMDAyQkU2N0IgLyogVGV4dENoZWNrZXIuaCAqLzsg
fTsKIAkJMUFBNDFBQjUxMkMwMkVDNDAwMkJFNjdCIC8qIEVkaXRvclN0YXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE0MUFCNDEyQzAyRUM0MDAy
QkU2N0IgLyogRWRpdG9yU3RhdGUuaCAqLzsgfTsKLQkJMUFBNDc5MjMxMkE1OUZEOTAwODIzNkMz
IC8qIFBsdWdpblByb2Nlc3NNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQUE0NzkyMjEyQTU5RkQ5MDA4MjM2QzMgLyogUGx1Z2luUHJvY2Vzc01h
Yy5tbSAqLzsgfTsKIAkJMUFBNTZGMjkxMUU5MkJDODAwNjFCODgyIC8qIFBsdWdpbkNvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTU2
RjI4MTFFOTJCQzgwMDYxQjg4MiAvKiBQbHVnaW5Db250cm9sbGVyLmggKi87IH07CiAJCTFBQTU3
NUZCMTQ5NkI1MjYwMEE0RUUwNiAvKiBFdmVudERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTU3NUY5MTQ5NkI1MjYwMEE0RUUwNiAv
KiBFdmVudERpc3BhdGNoZXIuaCAqLzsgfTsKIAkJMUFBNTc2MDIxNDk2Qjk3OTAwQTRFRTA2IC8q
IEV2ZW50RGlzcGF0Y2hlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE1NzVGRjE0OTZCN0MwMDBBNEVFMDYgLyogRXZl
bnREaXNwYXRjaGVyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKLQkJMUFBNTg4OTIxMUVFNzA0
MDAwNjFCODgyIC8qIE5ldHNjYXBlUGx1Z2luU3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE1ODg5MDExRUU3MDQwMDA2MUI4ODIgLyogTmV0
c2NhcGVQbHVnaW5TdHJlYW0uaCAqLzsgfTsKIAkJMUFBNjU0RDExQjE0RjcxNDAwQkYxRDNFIC8q
IFdLV2Vic2l0ZURhdGFSZWNvcmRQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE2NTREMDFCMTRGNzE0MDBCRjFEM0UgLyogV0tXZWJzaXRl
RGF0YVJlY29yZFByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkxQUE4M0Y2RDFBNUI2M0ZGMDAwMjZFQzYgLyogV2ViRGF0YWJhc2VQcm92
aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFB
ODNGNkIxQTVCNjNGRjAwMDI2RUM2IC8qIFdlYkRhdGFiYXNlUHJvdmlkZXIuaCAqLzsgfTsKIAkJ
MUFBQjAzN0ExODVBN0M2QTAwRURGNTAxIC8qIE1lc3NhZ2VTZW5kZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUIwMzc4MTg1QTdDNkEwMEVERjUw
MSAvKiBNZXNzYWdlU2VuZGVyLmggKi87IH07CkBAIC0zNzYsOSArMzI5LDcgQEAKIAkJMUFDMTMz
ODUxODU5MEM0NjAwRjNFQzA1IC8qIFJlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQzEz
MzgzMTg1OTBDNDYwMEYzRUMwNSAvKiBSZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi87IH07CiAJCTFBQzEzMzg2MTg1OTBDNDYwMEYzRUMwNSAvKiBSZW1vdGVPYmplY3RS
ZWdpc3RyeU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQUMxMzM4NDE4NTkwQzQ2MDBGM0VDMDUgLyogUmVtb3RlT2JqZWN0UmVnaXN0cnlN
ZXNzYWdlcy5oICovOyB9OwogCQkxQUMxNDE1MTE4QUM0N0VFMDA2QzYwMkMgLyogV0tXZWJWaWV3
Q29uZmlndXJhdGlvblByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBQzE0MTUwMThBQzQ3RUUwMDZDNjAyQyAvKiBXS1dlYlZpZXdDb25maWd1
cmF0aW9uUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTFBQzI1RkMyMTJBNDhGNjAwMEJEMjY3MSAvKiBQbHVnaW5Qcm9jZXNzU2hpbS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQzI1RjhB
MTJBNDhFMDMwMEJEMjY3MSAvKiBQbHVnaW5Qcm9jZXNzU2hpbS5tbSAqLzsgfTsKIAkJMUFDNEM4
MjkxNkI4NzZBOTAwNjlEQ0NEIC8qIE1lc3NhZ2VGbGFncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFDNEM4MjgxNkI4NzZBOTAwNjlEQ0NEIC8qIE1l
c3NhZ2VGbGFncy5oICovOyB9OwotCQkxQUM1RkZDMjE3NEJGRDFCMDAwMTQ4M0QgLyogUGx1Z2lu
UHJvY2Vzc0F0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBQzVGRkMxMTc0QkZEMUIwMDAxNDgzRCAvKiBQbHVnaW5Qcm9jZXNzQXR0cmli
dXRlcy5oICovOyB9OwogCQkxQUM3NTM3QzE4M0E5RkRCMDA3MkNCMTUgLyogUGFnZUxvYWRTdGF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFDNzUz
N0ExODNBOUZEQjAwNzJDQjE1IC8qIFBhZ2VMb2FkU3RhdGUuaCAqLzsgfTsKIAkJMUFDNzUzODAx
ODNCRTUwRjAwNzJDQjE1IC8qIERhdGFSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQzc1MzdFMTgzQkU1MEYwMDcyQ0IxNSAvKiBEYXRh
UmVmZXJlbmNlLmggKi87IH07CiAJCTFBQzc1QTFCMUIzMzY4MjcwMDU2NzQ1QiAvKiBIYW5nRGV0
ZWN0aW9uRGlzYWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBQzc1QTFBMUIzMzY4MjcwMDU2NzQ1QiAvKiBIYW5nRGV0ZWN0aW9uRGlzYWJsZXIu
aCAqLzsgfTsKQEAgLTQwNCwxMiArMzU1LDggQEAKIAkJMUFFMjg2N0ExQzdGN0JBNjAwNjlBQzRG
IC8qIFdLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRTI4Njc5MUM3RjdCQTYwMDY5QUM0RiAvKiBXS1dlYnNp
dGVEYXRhU3RvcmVQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMUFFMjg2ODAxQzdGOTJDMDAwNjlBQzRGIC8qIF9XS1dlYnNpdGVEYXRh
U2l6ZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQUUyODY3RjFDN0Y5MkJGMDA2OUFDNEYgLyogX1dLV2Vic2l0ZURhdGFTaXplSW50ZXJu
YWwuaCAqLzsgfTsKIAkJMUFFMjg2ODQxQzdGOTM4NjAwNjlBQzRGIC8qIEFQSVdlYnNpdGVEYXRh
UmVjb3JkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QUUyODY4MjFDN0Y5Mzg2MDA2OUFDNEYgLyogQVBJV2Vic2l0ZURhdGFSZWNvcmQuaCAqLzsgfTsK
LQkJMUFFNDk3NjgxMUZGNjU4RTAwNDhCNDY0IC8qIE5QSlNPYmplY3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRTQ5NzY2MTFGRjY1OEUwMDQ4QjQ2
NCAvKiBOUEpTT2JqZWN0LmggKi87IH07Ci0JCTFBRTQ5ODc4MTFGRjdGQUEwMDQ4QjQ2NCAvKiBK
U05QT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQUU0OTg3NjExRkY3RkFBMDA0OEI0NjQgLyogSlNOUE9iamVjdC5oICovOyB9OwotCQkxQUU0
OUE0OTExRkZBOENFMDA0OEI0NjQgLyogSlNOUE1ldGhvZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFFNDlBNDcxMUZGQThDRTAwNDhCNDY0IC8qIEpT
TlBNZXRob2QuaCAqLzsgfTsKIAkJMUFFNTJGOTgxOTIwMjY3MjAwQTFGQTM3IC8qIFdLQ29udGV4
dENvbmZpZ3VyYXRpb25SZWYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBRTUyRjk0MTkyMDFGNkIwMEExRkEzNyAvKiBXS0NvbnRleHRDb25maWd1cmF0
aW9uUmVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMUFFRTU3MjUyNDA5RjE0MjAwMjAwNUQ2IC8qIFF1aWNrTG9va1RodW1ibmFpbExvYWRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFFRTU3MjMy
NDA5RjE0MjAwMjAwNUQ2IC8qIFF1aWNrTG9va1RodW1ibmFpbExvYWRlci5oICovOyB9OwotCQkx
QUVGQ0MxMjExRDAxRjk2MDA4MjE5RDMgLyogUGx1Z2luSW5mb1N0b3JlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUVGQ0MxMDExRDAxRjk2MDA4MjE5
RDMgLyogUGx1Z2luSW5mb1N0b3JlLmggKi87IH07CiAJCTFBRUZEMjc5MTFEMTZDODEwMDgyMTlE
MyAvKiBBcmd1bWVudENvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQUVGRDI3ODExRDE2QzgxMDA4MjE5RDMgLyogQXJndW1lbnRDb2Rlci5oICov
OyB9OwogCQkxQUVGRDJGNzExRDE4MDdCMDA4MjE5RDMgLyogQXJndW1lbnRDb2RlcnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRUZEMkY2MTFEMTgw
N0IwMDgyMTlEMyAvKiBBcmd1bWVudENvZGVycy5oICovOyB9OwogCQkxQUYwNUQ4NzE0Njg4MzQ4
MDA4QjFFODEgLyogVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGMDVEODUxNDY4ODM0ODAw
OEIxRTgxIC8qIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkuaCAqLzsgfTsKQEAg
LTcxMCwxOCArNjU3LDcgQEAKIAkJMkQ4Nzg2MjAxQkRCNTdGNTAwRDAyQUJCIC8qIF9XS1VzZXJT
dHlsZVNoZWV0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJEODc4NjFGMUJEQjU3RjUwMEQwMkFCQiAvKiBfV0tVc2VyU3R5bGVTaGVldElu
dGVybmFsLmggKi87IH07CiAJCTJEODc4NjI0MUJEQjU4RkYwMEQwMkFCQiAvKiBBUElVc2VyU3R5
bGVTaGVldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkQ4Nzg2MjIxQkRCNThGRjAwRDAyQUJCIC8qIEFQSVVzZXJTdHlsZVNoZWV0LmggKi87IH07CiAJ
CTJEODk0OUYxMTgyMDQ0RjYwMEU4OThBQSAvKiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVUaWxlZEJh
Y2tpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJE
ODk0OUVGMTgyMDQ0RjYwMEU4OThBQSAvKiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVUaWxlZEJhY2tp
bmcuaCAqLzsgfTsKLQkJMkQ5MTM0NDEyMTJDRjlGMDAwMTI4QUZEIC8qIEpTTlBNZXRob2QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFFNDlBNDgx
MUZGQThDRTAwNDhCNDY0IC8qIEpTTlBNZXRob2QuY3BwICovOyB9OwotCQkyRDkxMzQ0MjIxMkNG
OUYwMDAxMjhBRkQgLyogSlNOUE9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQUU0OTg3NzExRkY3RkFBMDA0OEI0NjQgLyogSlNOUE9iamVj
dC5jcHAgKi87IH07Ci0JCTJEOTEzNDQzMjEyQ0Y5RjAwMDEyOEFGRCAvKiBOZXRzY2FwZUJyb3dz
ZXJGdW5jcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQTZGQkEyOTExRTY4NjI3MDBEQjEzNzEgLyogTmV0c2NhcGVCcm93c2VyRnVuY3MuY3BwICov
OyB9OwotCQkyRDkxMzQ0NDIxMkNGOUYwMDAxMjhBRkQgLyogTmV0c2NhcGVQbHVnaW4uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE2RkJEMjcxMUU2
OUJDMjAwREIxMzcxIC8qIE5ldHNjYXBlUGx1Z2luLmNwcCAqLzsgfTsKLQkJMkQ5MTM0NDUyMTJD
RjlGMDAwMTI4QUZEIC8qIE5ldHNjYXBlUGx1Z2luU3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTU4ODkxMTFFRTcwNDAwMDYxQjg4MiAv
KiBOZXRzY2FwZVBsdWdpblN0cmVhbS5jcHAgKi87IH07Ci0JCTJEOTEzNDQ2MjEyQ0Y5RjAwMDEy
OEFGRCAvKiBOUEpTT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBRTQ5NzY3MTFGRjY1OEUwMDQ4QjQ2NCAvKiBOUEpTT2JqZWN0LmNwcCAq
LzsgfTsKLQkJMkQ5MTM0NDcyMTJDRjlGMDAwMTI4QUZEIC8qIE5QUnVudGltZU9iamVjdE1hcC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTIxNjFB
RjExRjM3NjY0MDA4QUQwRjUgLyogTlBSdW50aW1lT2JqZWN0TWFwLmNwcCAqLzsgfTsKLQkJMkQ5
MTM0NDgyMTJDRjlGMDAwMTI4QUZEIC8qIE5QUnVudGltZVV0aWxpdGllcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTIxNjJBRTExRjM4OTcxMDA4
QUQwRjUgLyogTlBSdW50aW1lVXRpbGl0aWVzLmNwcCAqLzsgfTsKIAkJMkQ5MTM0NDkyMTJDRjlG
MDAwMTI4QUZEIC8qIFBsdWdpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQTZGQjdEMDExRTY1MUUyMDBEQjEzNzEgLyogUGx1Z2luLmNwcCAqLzsg
fTsKLQkJMkQ5MTM0NEEyMTJDRjlGMDAwMTI4QUZEIC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMEVD
OTA1MTI0QzBBQjgwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5jcHAgKi87IH07
Ci0JCTJEOTEzNDRCMjEyQ0Y5RjAwMDEyOEFGRCAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1h
bmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUEwRUM5MEUxMjRDMEFGNTAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdl
ci5jcHAgKi87IH07Ci0JCTJEOTEzNDRDMjEyQ0Y5RjAwMDEyOEFGRCAvKiBQbHVnaW5Qcm94eS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTA0M0RD
MDEyNEZGODc1MDBGRkJGQjUgLyogUGx1Z2luUHJveHkuY3BwICovOyB9OwogCQkyRDkxMzQ0RDIx
MkNGOUYwMDAxMjhBRkQgLyogUGx1Z2luVmlldy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTZGQjdBQzExRTY0QjY4MDBEQjEzNzEgLyogUGx1Z2lu
Vmlldy5jcHAgKi87IH07CiAJCTJEOTEzNDRFMjEyQ0Y5RjAwMDEyOEFGRCAvKiBXZWJQbHVnaW5J
bmZvUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUEwOEZFRTIxRDU5M0NGMTAwOEJBOENCIC8qIFdlYlBsdWdpbkluZm9Qcm92aWRlci5j
cHAgKi87IH07CiAJCTJEOTJBNzc5MjEyQjZBNjEwMEY0OTNGRCAvKiBMb2dnaW5nLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTdGMkY0MTI1QkY4
RDQwMDhBRUIxRCAvKiBMb2dnaW5nLmNwcCAqLzsgfTsKQEAgLTc0NiwxNCArNjgyLDYgQEAKIAkJ
MkQ5MkE3OEQyMTJCNkFCMTAwRjQ5M0ZEIC8qIFdlYlBsYXRmb3JtVG91Y2hQb2ludC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMDMzN0REQzEyN0E1
MjFDMDA4RkY0RjQgLyogV2ViUGxhdGZvcm1Ub3VjaFBvaW50LmNwcCAqLzsgfTsKIAkJMkQ5MkE3
OEUyMTJCNkFCMTAwRjQ5M0ZEIC8qIFdlYlRvdWNoRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzAzMzdERDcxMjdBNTFCNjAwOEZGNEY0IC8q
IFdlYlRvdWNoRXZlbnQuY3BwICovOyB9OwogCQkyRDkyQTc4RjIxMkI2QUIxMDBGNDkzRkQgLyog
V2ViV2hlZWxFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMDMzN0REMDEyN0EyOTgwMDA4RkY0RjQgLyogV2ViV2hlZWxFdmVudC5jcHAgKi87
IH07Ci0JCTJEOTJBNzkwMjEyQjZBRDQwMEY0OTNGRCAvKiBOUElkZW50aWZpZXJEYXRhLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMkQ4NDhBMTI3
RjZBNDkwMDFFQjk2MiAvKiBOUElkZW50aWZpZXJEYXRhLmNwcCAqLzsgfTsKLQkJMkQ5MkE3OTEy
MTJCNkFENDAwRjQ5M0ZEIC8qIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMUZBMzVDMTI3QTQ1QkYwMDUw
RTcwOSAvKiBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07Ci0JCTJEOTJBNzkyMjEy
QjZBRDQwMEY0OTNGRCAvKiBOUE9iamVjdFByb3h5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMUZBMjg0MTI3QTEzQkMwMDUwRTcwOSAvKiBOUE9i
amVjdFByb3h5LmNwcCAqLzsgfTsKLQkJMkQ5MkE3OTMyMTJCNkFENDAwRjQ5M0ZEIC8qIE5QUmVt
b3RlT2JqZWN0TWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBMUZBMjUyMTI3QTBFNEYwMDUwRTcwOSAvKiBOUFJlbW90ZU9iamVjdE1hcC5jcHAg
Ki87IH07Ci0JCTJEOTJBNzk0MjEyQjZBRDQwMEY0OTNGRCAvKiBOUFZhcmlhbnREYXRhLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMkQ4NEEyMTI3
RjZBRDEwMDFFQjk2MiAvKiBOUFZhcmlhbnREYXRhLmNwcCAqLzsgfTsKLQkJMkQ5MkE3OTUyMTJC
NkFENDAwRjQ5M0ZEIC8qIFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyRDkwRDExMjgxQzk2
NjAwMUVCOTYyIC8qIFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwICovOyB9Owot
CQkyRDkyQTc5NjIxMkI2QURBMDBGNDkzRkQgLyogTmV0c2NhcGVQbHVnaW5Nb2R1bGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE0QTlDNTMxMkI4
MTZDRjAwOEZFOTg0IC8qIE5ldHNjYXBlUGx1Z2luTW9kdWxlLmNwcCAqLzsgfTsKLQkJMkQ5MkE3
OTcyMTJCNkFEQTAwRjQ5M0ZEIC8qIFBsdWdpbkluZm9ybWF0aW9uLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDM0Y4QzhFMTczQUY1MkQwMDdCN0Yz
OSAvKiBQbHVnaW5JbmZvcm1hdGlvbi5jcHAgKi87IH07CiAJCTJEOTMxMTY5MjEyRjYxQjIwMDA0
NEJGRSAvKiBXS0NvbnRlbnRWaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZDQjRFM0QxOEJCRTA0NDAwMEZDRkM5IC8qIFdLQ29udGVudFZpZXcu
bW0gKi87IH07CiAJCTJEOTMxMTZBMjEyRjYxQjUwMDA0NEJGRSAvKiBXS0NvbnRlbnRWaWV3SW50
ZXJhY3Rpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkNCNEU2QjE4QkJGMjZBMDAwRkNGQzkgLyogV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1t
ICovOyB9OwogCQkyRDlFQTMwRDFBOTZDQjU5MDAyRDI4MDcgLyogV0tQYWdlSW5qZWN0ZWRCdW5k
bGVDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJEOUVBMzBDMUE5NkNCNTkwMDJEMjgwNyAvKiBXS1BhZ2VJbmplY3RlZEJ1bmRsZUNsaWVudC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04NTMs
NyArNzgxLDYgQEAKIAkJMzcwRjM0QTcxODI5Q0ZGMzAwOTAyN0M4IC8qIFdLQnJvd3NpbmdDb250
ZXh0SGlzdG9yeURlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzNzBGMzRBNjE4MjlDRkYzMDA5MDI3QzggLyogV0tCcm93c2luZ0NvbnRleHRI
aXN0b3J5RGVsZWdhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkzNzE4M0Q1NzE4MkY0RTcwMDA4MEM4MTEgLyogV0tOU1VSTEV4dHJhcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxODNENTUxODJG
NEU3MDAwODBDODExIC8qIFdLTlNVUkxFeHRyYXMuaCAqLzsgfTsKIAkJMzcxQTE5NDIxODI0RDI5
MzAwRjMyQTVFIC8qIFdLTlNEaWN0aW9uYXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFBMTk0MDE4MjREMjkzMDBGMzJBNUUgLyogV0tOU0RpY3Rp
b25hcnkuaCAqLzsgfTsKLQkJMzcxRTY5NTkxQUVEN0EwRjAwNDk1RTQ4IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkMzREU0NjgxNUE5MTc2MzAwOEQyNkZDIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQkzNzJDQUYwQjE4MzNGRDkxMDA0MEFDMjcgLyogV0tOU0Vycm9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzJDQUYwOTE4MzNGRDkxMDA0MEFD
MjcgLyogV0tOU0Vycm9yLmggKi87IH07CiAJCTM3MkVCQjNFMjAxN0U2NDMwMDA4NTA2NCAvKiBG
b3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDM0RFNDY4MTVBOTE3NjMwMDhEMjZGQyAvKiBGb3VuZGF0aW9uLmZyYW1l
d29yayAqLzsgfTsKIAkJMzcyRUJCM0YyMDE3RTY0MzAwMDg1MDY0IC8qIFdlYktpdC5mcmFtZXdv
cmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4REMy
RUY1QjA0ODZBNjk0MDA5OEIyMTYgLyogV2ViS2l0LmZyYW1ld29yayAqLzsgfTsKQEAgLTg5NSw3
ICs4MjIsNiBAQAogCQkzN0E2NEU1NzE4RjM4RjQ2MDBFQjMwRjEgLyogX1dLRm9ybUlucHV0U2Vz
c2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdB
NjRFNTYxOEYzOEY0NjAwRUIzMEYxIC8qIF9XS0Zvcm1JbnB1dFNlc3Npb24uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzN0E3MDlBNzFFM0VBMEZE
MDBDQTU5NjkgLyogV0tEYXRhRGV0ZWN0b3JUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdBNzA5QTYxRTNFQTBGRDAwQ0E1OTY5IC8qIFdLRGF0
YURldGVjdG9yVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7
IH07IH07CiAJCTM3QTcwOUE5MUUzRUE0MEMwMENBNTk2OSAvKiBXS0RhdGFEZXRlY3RvclR5cGVz
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDM3QTcwOUE4MUUzRUE0MEMwMENBNTk2OSAvKiBXS0RhdGFEZXRlY3RvclR5cGVzSW50ZXJuYWwu
aCAqLzsgfTsKLQkJMzdCMEQxODQxQzFFNDk5QTAwRDQwRDY0IC8qIFBsdWdpblByb2Nlc3NTaGlt
LmR5bGliIGluIENvcHkgU2hpbXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUFDMjVGQjAxMkE0OEVBNzAwQkQyNjcxIC8qIFBsdWdpblByb2Nlc3NTaGltLmR5bGliICovOyB9
OwogCQkzN0I1MDQ1MjE5RUVGMzEzMDBDRTJDRjggLyogV0tFcnJvclByaXZhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3QjUwNDUxMTlFRUYzMTMw
MENFMkNGOCAvKiBXS0Vycm9yUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTM3QkVDNEREMTk0OEZDNkEwMDhCNDI4NiAvKiBXZWJDb3Jl
LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBQTFDNzlBMTAwRTdGQzUwMDc4REVCQyAvKiBXZWJDb3JlLmZyYW1ld29yayAqLzsgfTsK
IAkJMzdCRUM0RTExOTQ5MTQ4NjAwOEI0Mjg2IC8qIENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNr
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3QkVD
NERGMTk0OTE0ODYwMDhCNDI4NiAvKiBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyLmggKi87
IH07CkBAIC05MjAsMTIgKzg0Niw2IEBACiAJCTNGRkREQjk2MUY1NzdGNDgwMDUwRTU5MyAvKiBX
S0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjkxNUMwRjFGNTY0REVEMDAxODNDRTkgLyogV0tGdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5oICovOyB9OwogCQk0MTA0ODJDRTFEREQzMjRGMDBG
MDA2RDAgLyogUlRDTmV0d29yay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDEwNDgyQ0MxREREMkZCNTAwRjAwNkQwIC8qIFJUQ05ldHdvcmsuaCAqLzsg
fTsKIAkJNDEwRjBENEMyNzAxRUZGOTAwRjk2REZDIC8qIEdQVVByb2Nlc3NDb25uZWN0aW9uSW5p
dGlhbGl6YXRpb25QYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0MTBGMEQ0QjI3MDFFRkVBMDBGOTZERkMgLyogR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb25Jbml0aWFsaXphdGlvblBhcmFtZXRlcnMuaCAqLzsgfTsKLQkJNDExMkVEREIyMEU0MDdB
NTAwQkVBOTJBIC8qIGNvbS5hcHBsZS5Cb2NvbVN1Ym1pdEN0cmwuc2IgaW4gQ29weSBQbHVnLWlu
IFNhbmRib3ggUHJvZmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEx
MkVERDkyMEU0MDc3NTAwQkVBOTJBIC8qIGNvbS5hcHBsZS5Cb2NvbVN1Ym1pdEN0cmwuc2IgKi87
IH07Ci0JCTQxMTJFRERDMjBFNDA3QTUwMEJFQTkyQSAvKiBjb20uYXBwbGUuTlBTYWZlSW5wdXQu
c2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDExMkVERDgyMEU0MDc3NTAwQkVBOTJBIC8qIGNvbS5hcHBsZS5OUFNh
ZmVJbnB1dC5zYiAqLzsgfTsKLQkJNDExMkVEREQyMEU0MDdBNTAwQkVBOTJBIC8qIGNvbS5hcHBs
ZS5OUFNhZmVTdWJtaXQuc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDExMkVERDcyMEU0MDc3NTAwQkVBOTJBIC8q
IGNvbS5hcHBsZS5OUFNhZmVTdWJtaXQuc2IgKi87IH07Ci0JCTQxMTJFRERFMjBFNDA3QTUwMEJF
QTkyQSAvKiBjb20uY2ZjYS5ucFNlY0VkaXRDdGwuTUFDLkJPQy5wbHVnaW4uc2IgaW4gQ29weSBQ
bHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDExMkVERDMyMEU0MDc3NDAwQkVBOTJBIC8qIGNvbS5jZmNhLm5wU2VjRWRpdEN0bC5NQUMu
Qk9DLnBsdWdpbi5zYiAqLzsgfTsKLQkJNDExMkVEREYyMEU0MDdBNTAwQkVBOTJBIC8qIGNvbS5j
bWJjaGluYS5DTUJTZWN1cml0eS5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTEyRURENTIwRTQwNzc0MDBCRUE5
MkEgLyogY29tLmNtYmNoaW5hLkNNQlNlY3VyaXR5LnNiICovOyB9OwotCQk0MTEyRURFMDIwRTQw
N0E1MDBCRUE5MkEgLyogY29tLmZ0c2FmZS5OUEFQSS1Db3JlLVNhZmUtU29mdEtleWJhb3JkLnBs
dWdpbi5yZmMxMDM0aWRlbnRpZmllci5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTEyRUREMjIwRTQwNzczMDBC
RUE5MkEgLyogY29tLmZ0c2FmZS5OUEFQSS1Db3JlLVNhZmUtU29mdEtleWJhb3JkLnBsdWdpbi5y
ZmMxMDM0aWRlbnRpZmllci5zYiAqLzsgfTsKIAkJNDExQThEREIyMERERDFBQzAwNjBEMzRGIC8q
IFdLTW9ja01lZGlhRGV2aWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MTFBOEREOTIwRERCNjA1MDA2MEQzNEYgLyogV0tNb2NrTWVkaWFEZXZpY2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MTFC
MjI2NDFFMzcxQkE2MDA0RjczNjMgLyogTGliV2ViUlRDTmV0d29yay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDExQjIyNjIxRTM3MTI0NDAwNEY3MzYz
IC8qIExpYldlYlJUQ05ldHdvcmsuaCAqLzsgfTsKIAkJNDEyODdENEUyMjVEMUVDQjAwOUEzRTI2
IC8qIFdlYlNvY2tldFRhc2tDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxMjg3RDRCMjI1QzA1QzQwMDlBM0UyNiAvKiBXZWJTb2NrZXRUYXNr
Q29jb2EubW0gKi87IH07CkBAIC05MzQsMTEgKzg1NCw2IEBACiAJCTQxMzA3NUIwMURFODVGNTgw
MDM5RUM2OSAvKiBXZWJSVENNb25pdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MTMwNzVBMzFERTg1RUU3MDAzOUVDNjkgLyogV2ViUlRDTW9uaXRv
ci5oICovOyB9OwogCQk0MTMwNzVCMjFERTg1RjU4MDAzOUVDNjkgLyogTGliV2ViUlRDU29ja2V0
RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDEzMDc1QTYxREU4NUVFNzAwMzlFQzY5IC8qIExpYldlYlJUQ1NvY2tldEZhY3RvcnkuaCAqLzsg
fTsKIAkJNDEzMDc1QjQxREU4NUY1ODAwMzlFQzY5IC8qIExpYldlYlJUQ1Byb3ZpZGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTMwNzVBODFERTg1
RUU3MDAzOUVDNjkgLyogTGliV2ViUlRDUHJvdmlkZXIuaCAqLzsgfTsKLQkJNDEzQ0NENTAyMERF
QkM3NDAwNjVBMjFBIC8qIGNvbS5nb29nbGUuZ29vZ2xldGFsa2Jyb3dzZXJwbHVnaW4uc2IgaW4g
Q29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDEzQ0NENEYyMERFQkMyRjAwNjVBMjFBIC8qIGNvbS5nb29nbGUuZ29vZ2xldGFs
a2Jyb3dzZXJwbHVnaW4uc2IgKi87IH07Ci0JCTQxNDM3NTFDMjBFQUVBMkQwMEZBRDA2QyAvKiBj
bi5taWNyb2RvbmUuY21iLnNhZmFyaS5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTQzNzUxQjIwRUFFQTFFMDBG
QUQwNkMgLyogY24ubWljcm9kb25lLmNtYi5zYWZhcmkuc2IgKi87IH07Ci0JCTQxNEREMzc5MjBC
RjQzRjUwMDY5NTlGQiAvKiBjb20uY2lzY28ud2ViZXgucGx1Z2luLmdwYzY0LnNiIGluIFJlc291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTRERDM3ODIwQkY0M0VB
MDA2OTU5RkIgLyogY29tLmNpc2NvLndlYmV4LnBsdWdpbi5ncGM2NC5zYiAqLzsgfTsKLQkJNDE0
REQzN0EyMEJGNDlBNTAwNjk1OUZCIC8qIGNvbS5jaXNjby53ZWJleC5wbHVnaW4uZ3BjNjQuc2Ig
aW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDE0REQzNzgyMEJGNDNFQTAwNjk1OUZCIC8qIGNvbS5jaXNjby53ZWJleC5w
bHVnaW4uZ3BjNjQuc2IgKi87IH07Ci0JCTQxNTdFNEIwMjBFMkVDREYwMEE2QzBENyAvKiBjb20u
Z29vZ2xlLm8xZGJyb3dzZXJwbHVnaW4uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmls
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE1N0U0QUYyMEUyRUM5ODAw
QTZDMEQ3IC8qIGNvbS5nb29nbGUubzFkYnJvd3NlcnBsdWdpbi5zYiAqLzsgfTsKIAkJNDE3Njkw
MTQyMkZERDQxQjAwQjE1NzZEIC8qIE5ldHdvcmtSVENQcm92aWRlci5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNzY5MDEzMjJGREQ0MUIwMEIxNTc2
RCAvKiBOZXR3b3JrUlRDUHJvdmlkZXIubW0gKi87IH07CiAJCTQxNzkxNUFGMjI1NkJCNzUwMEQ2
Rjk3RSAvKiBXZWJTb2NrZXRDaGFubmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MTc5MTVBRDIyNTZCQjc0MDBENkY5N0UgLyogV2ViU29ja2V0Q2hh
bm5lbC5oICovOyB9OwogCQk0MTc5MTVCMTIyNTZDMEQ2MDBENkY5N0UgLyogV2ViU29ja2V0Q2hh
bm5lbE1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxNzkxNUIwMjI1NkMwRDYwMEQ2Rjk3RSAvKiBXZWJTb2NrZXRDaGFubmVsTWFuYWdlci5o
ICovOyB9OwpAQCAtMTI5OSw3ICsxMjE0LDYgQEAKIAkJNUM5QTkxMTEyMjhGNjlDQzAwNUM1QjE3
IC8qIFhQQ1NlcnZpY2VNYWluLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkM4MjgzOTYxNkI0N0VDNDAwQTI3OEZFIC8qIFhQQ1NlcnZpY2VNYWluLm1t
ICovOyB9OwogCQk1QzlBOTExMjIyOEY2OUNDMDA1QzVCMTcgLyogWFBDU2VydmljZU1haW4ubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzgyODM5NjE2
QjQ3RUM0MDBBMjc4RkUgLyogWFBDU2VydmljZU1haW4ubW0gKi87IH07CiAJCTVDOUE5MTEzMjI4
RjY5Q0QwMDVDNUIxNyAvKiBYUENTZXJ2aWNlTWFpbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODI4Mzk2MTZCNDdFQzQwMEEyNzhGRSAvKiBYUENT
ZXJ2aWNlTWFpbi5tbSAqLzsgfTsKLQkJNUM5QTkxMTQyMjhGNjlDRTAwNUM1QjE3IC8qIFhQQ1Nl
cnZpY2VNYWluLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkM4MjgzOTYxNkI0N0VDNDAwQTI3OEZFIC8qIFhQQ1NlcnZpY2VNYWluLm1tICovOyB9Owog
CQk1QzlFNTY4MzFERjdGMUIzMDBDOUVFMzMgLyogV0tXZWJzaXRlUG9saWNpZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUU1NjgxMURGN0YwNTUw
MEM5RUUzMyAvKiBXS1dlYnNpdGVQb2xpY2llcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDQTI2RDgxMjE3QUJENUIwMEY5N0EzNSAvKiBXS1Nh
ZmVCcm93c2luZ1dhcm5pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDQTI2RDgwMjE3QUJCQjYwMEY5N0EzNSAvKiBXS1NhZmVCcm93c2luZ1dhcm5p
bmcuaCAqLzsgfTsKIAkJNUNBMjZEODMyMTdBRDFCODAwRjk3QTM1IC8qIFdLU2FmZUJyb3dzaW5n
V2FybmluZy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVDQTI2RDdGMjE3QUJCQjYwMEY5N0EzNSAvKiBXS1NhZmVCcm93c2luZ1dhcm5pbmcubW0gKi87
IH07CkBAIC0xMzI4LDcgKzEyNDIsNiBAQAogCQk1Q0U5MTIxMDIyOTNDMjc3MDA1QkVDNzggLyog
QXV4aWxpYXJ5UHJvY2Vzc01haW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUNFOTEyMEYyMjkzQzI1RjAwNUJFQzc4IC8qIEF1eGlsaWFyeVByb2Nl
c3NNYWluLmNwcCAqLzsgfTsKIAkJNUNFOTEyMTEyMjkzQzI3ODAwNUJFQzc4IC8qIEF1eGlsaWFy
eVByb2Nlc3NNYWluLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVDRTkxMjBGMjI5M0MyNUYwMDVCRUM3OCAvKiBBdXhpbGlhcnlQcm9jZXNzTWFpbi5j
cHAgKi87IH07CiAJCTVDRTkxMjEyMjI5M0MyNzgwMDVCRUM3OCAvKiBBdXhpbGlhcnlQcm9jZXNz
TWFpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
Q0U5MTIwRjIyOTNDMjVGMDA1QkVDNzggLyogQXV4aWxpYXJ5UHJvY2Vzc01haW4uY3BwICovOyB9
OwotCQk1Q0U5MTIxMzIyOTNDMjc5MDA1QkVDNzggLyogQXV4aWxpYXJ5UHJvY2Vzc01haW4uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNFOTEyMEYy
MjkzQzI1RjAwNUJFQzc4IC8qIEF1eGlsaWFyeVByb2Nlc3NNYWluLmNwcCAqLzsgfTsKIAkJNUNF
OTEyMTQyMjkzQzI4MDAwNUJFQzc4IC8qIFdLTWFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNFOTEyMEIyMjkzQzFFMDAwNUJFQzc4IC8qIFdLTWFp
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTYz
MTA4Rjk2MUY5NjcxOUMwMEEwREI4NCAvKiBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MzEwOEY5NDFGOTY3MTlD
MDBBMERCODQgLyogX1dLQXBwbGljYXRpb25NYW5pZmVzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTYzMTA4Rjk5MUY5NjcxRjcwMEEwREI4NCAv
KiBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYzMTA4Rjk4MUY5NjcxRjcwMEEwREI4NCAvKiBfV0tB
cHBsaWNhdGlvbk1hbmlmZXN0SW50ZXJuYWwuaCAqLzsgfTsKQEAgLTEzNTksNyArMTI3Miw2IEBA
CiAJCTdBM0FDRTFCMUVFRUY3OUIwMEE4NjRBNCAvKiBBUElJbmplY3RlZEJ1bmRsZVBhZ2VMb2Fk
ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdBM0FDRTFBMUVFRUY3OEMwMEE4NjRBNCAvKiBBUElJbmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJD
bGllbnQuaCAqLzsgfTsKIAkJN0EzRkVDQTIyMUY3QzA5NzAwRjI2N0NEIC8qIFN0b3JhZ2VBY2Nl
c3NTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdBM0ZFQ0ExMjFGN0MwOTcwMEYyNjdDRCAvKiBTdG9yYWdlQWNjZXNzU3RhdHVzLmggKi87IH07
CiAJCTdBNDFFOUZCMjFGODFEQUQwMEI4OENEQiAvKiBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3Rp
Y3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNDFF
OUZBMjFGODFEQUMwMEI4OENEQiAvKiBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCAqLzsg
fTsKLQkJN0E3NzJDOEQxRERENEEyNTAwMEYzNEYxIC8qIGNvbS5hcHBsZS5XZWJLaXQucGx1Z2lu
LWNvbW1vbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTE1MDY3MjFERDU2Mjk4MDAxRjRCNTggLyogY29tLmFw
cGxlLldlYktpdC5wbHVnaW4tY29tbW9uLnNiICovOyB9OwogCQk3QTc4RkYzMjIyNDE5MTk2MDA5
NjQ4M0UgLyogV0tTdG9yYWdlQWNjZXNzQWxlcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNzhGRjJFMjI0MTkxNzUwMDk2NDgzRSAvKiBXS1N0b3Jh
Z2VBY2Nlc3NBbGVydC5oICovOyB9OwogCQk3QTc4RkYzMzIyNDE5MTlCMDA5NjQ4M0UgLyogV0tT
dG9yYWdlQWNjZXNzQWxlcnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QTc4RkYyRjIyNDE5MTc2MDA5NjQ4M0UgLyogV0tTdG9yYWdlQWNjZXNzQWxl
cnQubW0gKi87IH07CiAJCTdBODIxRjRDMUUyRjY3MzkwMDYwNDU3NyAvKiBMZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdBODIxRjRCMUUyRjY2NDgwMDYwNDU3NyAvKiBMZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQuaCAqLzsgfTsKQEAgLTEzOTgsNyArMTMxMCw2IEBACiAJCTdDMzYx
RDc4MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QzM2MUQ3NjE5MjgwM0JEMDAzNkE1OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQk3QzM2MUQ3OTE5MjgwM0JEMDAzNkE1
OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzNjFENzcxOTI4MDNCRDAwMzZB
NTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZXMuaCAqLzsgfTsKIAkJ
N0MzQTA2QTgxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNBMDZBNjFBQUI5
MDNFMDA5RDc0QkEgLyogQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuaCAqLzsgfTsKLQkJN0MzRjhD
OTExNzNBRjUyRDAwN0I3RjM5IC8qIFBsdWdpbkluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNGOEM4RjE3M0FGNTJEMDA3QjdGMzkg
LyogUGx1Z2luSW5mb3JtYXRpb24uaCAqLzsgfTsKIAkJN0M0Njk0QzkxQTRCNEVBMTAwQUQ1ODQ1
IC8qIFdlYlBhc3RlYm9hcmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzQ2OTRDNzFBNEI0RUEwMDBBRDU4NDUg
LyogV2ViUGFzdGVib2FyZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJN0M0Njk0
Q0ExQTRCNEVBMTAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eU1lc3NhZ2VzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzQ2OTRDODFBNEI0RUEx
MDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5TWVzc2FnZXMuaCAqLzsgfTsKIAkJN0M0Njk0
RDExQTUxRTM2ODAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0Njk0Q0UxQTUxRTM2ODAwQUQ1ODQ1
IC8qIFdlYlBhc3RlYm9hcmRQcm94eS5oICovOyB9OwpAQCAtMTQyNSwxMSArMTMzNiw2IEBACiAJ
CTdDQjEwMEYyMUZBMzg1OEUwMDE3MjlFRSAvKiBXZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0RFNzNBMzFG
OURBQjY1MDAzOTAzMTIgLyogV2ViUHJlZmVyZW5jZXNEZWZpbml0aW9ucy5oICovOyB9OwogCQk3
Q0IxMDBGMzFGQTM4NThFMDAxNzI5RUUgLyogV2ViUHJlZmVyZW5jZXNLZXlzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0IxMDBFRjFGQTJENzRCMDAx
NzI5RUUgLyogV2ViUHJlZmVyZW5jZXNLZXlzLmggKi87IH07CiAJCTdDQjEwMEY0MUZBMzg1OTIw
MDE3MjlFRSAvKiBXZWJQcmVmZXJlbmNlc1N0b3JlRGVmYXVsdHNNYXAuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCMTAwRjAxRkEyRDc4NDAwMTcy
OUVFIC8qIFdlYlByZWZlcmVuY2VzU3RvcmVEZWZhdWx0c01hcC5jcHAgKi87IH07Ci0JCTdDQjE2
RkVGMTcyNEJBMjMwMDdBMEE5NSAvKiBjb20uYXBwbGUuaXN0LmRzLmFwcGxlY29ubmVjdC53ZWJw
bHVnaW4uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCMTZGRTIxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5hcHBs
ZS5pc3QuZHMuYXBwbGVjb25uZWN0LndlYnBsdWdpbi5zYiAqLzsgfTsKLQkJN0NCMTZGRjAxNzI0
QkEyNDAwN0EwQTk1IC8qIGNvbS5hcHBsZS5RdWlja1RpbWUgUGx1Z2luLnBsdWdpbi5zYiBpbiBD
b3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3Q0IxNkZFMzE3MjRCOUI1MDA3QTBBOTUgLyogY29tLmFwcGxlLlF1aWNrVGltZSBQ
bHVnaW4ucGx1Z2luLnNiICovOyB9OwotCQk3Q0IxNkZGMjE3MjRCQTI4MDA3QTBBOTUgLyogY29t
Lm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyLnBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJv
eCBQcm9maWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0IxNkZFNTE3
MjRCOUI1MDA3QTBBOTUgLyogY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyLnBsdWdpbi5zYiAq
LzsgfTsKLQkJN0NCMTZGRjMxNzI0QkEyRjAwN0EwQTk1IC8qIGNvbS5taWNyb3NvZnQuU2lsdmVy
bGlnaHRQbHVnaW4uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCMTZGRTYxNzI0QjlCNTAwN0EwQTk1IC8qIGNv
bS5taWNyb3NvZnQuU2lsdmVybGlnaHRQbHVnaW4uc2IgKi87IH07Ci0JCTdDQjE2RkY0MTcyNEJB
MzAwMDdBMEE5NSAvKiBjb20ub3JhY2xlLmphdmEuSmF2YUFwcGxldFBsdWdpbi5zYiBpbiBDb3B5
IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3Q0IxNkZFNzE3MjRCOUI1MDA3QTBBOTUgLyogY29tLm9yYWNsZS5qYXZhLkphdmFBcHBs
ZXRQbHVnaW4uc2IgKi87IH07CiAJCTdDQjM2NUFBMUQzMURCNzAwMDcxNThDQSAvKiBfV0tVc2Vy
SW5pdGlhdGVkQWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3Q0IzNjVBODFEMzFEQjcwMDA3MTU4Q0EgLyogX1dLVXNlckluaXRpYXRlZEFjdGlv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdD
QjM2NUFEMUQzMURDMTAwMDcxNThDQSAvKiBfV0tVc2VySW5pdGlhdGVkQWN0aW9uSW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQjM2NUFD
MUQzMURDMTAwMDcxNThDQSAvKiBfV0tVc2VySW5pdGlhdGVkQWN0aW9uSW50ZXJuYWwuaCAqLzsg
fTsKIAkJN0NCMzY1QjExRDMxREQxRTAwNzE1OENBIC8qIEFQSVVzZXJJbml0aWF0ZWRBY3Rpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQjM2NUFG
MUQzMUREMUUwMDcxNThDQSAvKiBBUElVc2VySW5pdGlhdGVkQWN0aW9uLmggKi87IH07CkBAIC0x
NDQwLDcgKzEzNDYsNiBAQAogCQk3Q0Q1RUJCOTE3NDZBMTVCMDAwQzFDNDUgLyogV0tPYmpDVHlw
ZVdyYXBwZXJSZWYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDRDVFQkI3MTc0NkExNUIwMDBDMUM0NSAvKiBXS09iakNUeXBlV3JhcHBlclJlZi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDRDVFQkJC
MTc0NkE4M0UwMDBDMUM0NSAvKiBXS0Jhc2VNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRDVFQkJBMTc0NkE4M0UwMDBDMUM0NSAvKiBXS0Jhc2VN
YWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
Q0Q1RUJCRjE3NDZCMDRDMDAwQzFDNDUgLyogV0tUeXBlUmVmV3JhcHBlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NENUVCQkQxNzQ2QjA0QzAwMEMx
QzQ1IC8qIFdLVHlwZVJlZldyYXBwZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQk3Q0Q2MjI3ODE3MzlEODYzMDA1QkQ3RkYgLyogUGx1Z2luU2Fu
ZGJveFByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDRDYyMjc2MTczOUQ4NjMwMDVCRDdGRiAvKiBQbHVnaW5TYW5kYm94UHJvZmlsZS5oICov
OyB9OwogCQk3Q0U0RDIwNzFBNDY3NzYxMDBDN0YxNTIgLyogQVBJTGVnYWN5Q29udGV4dEhpc3Rv
cnlDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDRTREMjA2MUE0Njc3NTcwMEM3RjE1MiAvKiBBUElMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVu
dC5oICovOyB9OwogCQk3Q0U0RDIxQjFBNDkxNEEzMDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bvb2wu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTREMjE4
MUE0OTE0QTMwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbC5oICovOyB9OwogCQk3Q0U0RDIyMDFB
NDkxNENBMDBDN0YxNTIgLyogQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0U0RDIxRTFBNDkxNENBMDBD
N0YxNTIgLyogQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmggKi87IH07CkBAIC0xNjI2LDcg
KzE1MzEsNiBAQAogCQk5QkY1RUM2NDI1NDExNDU2MDA5ODRFNzcgLyogSlNJUENCaW5kaW5nLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCRjVFQzYz
MjU0MTBFOTkwMDk4NEU3NyAvKiBKU0lQQ0JpbmRpbmcuY3BwICovOyB9OwogCQk5RUM1MzJBMzI0
NDdGQkFEMDAyMTUyMTYgLyogR2VvbG9jYXRpb25JZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5RUM1MzJBMjI0NDdGQkFEMDAyMTUyMTYg
LyogR2VvbG9jYXRpb25JZGVudGlmaWVyLmggKi87IH07CiAJCTlGQjVGMzk1MTY5RTZBODAwMDJD
MjVCRiAvKiBXS0NvbnRleHRQcml2YXRlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5RkI1RjM5MzE2OUU2QTgwMDAyQzI1QkYgLyogV0tDb250ZXh0
UHJpdmF0ZU1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCUExMDJBNzA4MUVDMEVFRTkwMEQ4MUQ4MiAvKiBjb20ubWFjcm9tZWRpYS5GbGFzaCBQ
bGF5ZXIgRVNSLnBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTVFMzk0OTFENUJEOEE3MDBCNEI3Q0Ug
LyogY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyIEVTUi5wbHVnaW4uc2IgKi87IH07CiAJCUEx
MDQ2RUExMjA3OTI2MzEwMEYwQzVEOCAvKiBXS1BERlZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMDQ2RTlGMjA3OTI2MzEwMEYwQzVEOCAvKiBX
S1BERlZpZXcuaCAqLzsgfTsKIAkJQTExNURDNzIxOTFEODJEQTAwREE4MDcyIC8qIF9XS1dlYlZp
ZXdQcmludEZvcm1hdHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTExNURDNkUxOTFEODJBQjAwREE4MDcyIC8qIF9XS1dlYlZpZXdQcmludEZvcm1h
dHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUExMThBOUYzMTkwOEI4RUEwMEY3QzkyQiAvKiBfV0tOU0ZpbGVNYW5hZ2VyRXh0cmFzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTE4QTlGMTE5MDhC
OEVBMDBGN0M5MkIgLyogX1dLTlNGaWxlTWFuYWdlckV4dHJhcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xODA0LDggKzE3MDgsNiBAQAogCQlC
QzgxNDdBOTEyRjY0Q0RBMDA3QjJDMzIgLyogSW5qZWN0ZWRCdW5kbGVQYWdlUG9saWN5Q2xpZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzgxNDdB
NzEyRjY0Q0RBMDA3QjJDMzIgLyogSW5qZWN0ZWRCdW5kbGVQYWdlUG9saWN5Q2xpZW50LmggKi87
IH07CiAJCUJDODE0N0Q1MTJGNjZEMzEwMDdCMkMzMiAvKiBJbmplY3RlZEJ1bmRsZU5hdmlnYXRp
b25BY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDODE0N0QzMTJGNjZEMzEwMDdCMkMzMiAvKiBJbmplY3RlZEJ1bmRsZU5hdmlnYXRpb25BY3Rp
b24uaCAqLzsgfTsKIAkJQkM4MjgzREExNkI0REI5MzAwQTI3OEZFIC8qIFdlYktpdC5mcmFtZXdv
cmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4REMy
RUY1QjA0ODZBNjk0MDA5OEIyMTYgLyogV2ViS2l0LmZyYW1ld29yayAqLzsgfTsKLQkJQkM4Mjg0
NEQxNkI1MDgxQzAwQTI3OEZFIC8qIFBsdWdpblNlcnZpY2VFbnRyeVBvaW50Lm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4MjgzRUYxNkI0RjhFMjAw
QTI3OEZFIC8qIFBsdWdpblNlcnZpY2VFbnRyeVBvaW50Lm1tICovOyB9OwotCQlCQzgyODQ0RjE2
QjUwODk4MDBBMjc4RkUgLyogV2ViS2l0LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhEQzJFRjVCMDQ4NkE2OTQwMDk4QjIxNiAvKiBX
ZWJLaXQuZnJhbWV3b3JrICovOyB9OwogCQlCQzg0NTJBODExNjJDODA5MDBDQUI5QjUgLyogRHJh
d2luZ0FyZWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDODQ1MkE2MTE2MkM4MDkwMENBQjlCNSAvKiBEcmF3aW5nQXJlYS5oICovOyB9OwogCQlCQzg1
N0Y4NTEyQjgyRDBCMDBFREVCMkUgLyogV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODU3RjgzMTJCODJE
MEIwMEVERUIyRSAvKiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oICovOyB9OwogCQlCQzg1
N0ZCNTEyQjgzMEU2MDBFREVCMkUgLyogQVBJT3BlblBhbmVsUGFyYW1ldGVycy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4NTdGQjMxMkI4MzBFNjAw
RURFQjJFIC8qIEFQSU9wZW5QYW5lbFBhcmFtZXRlcnMuaCAqLzsgfTsKQEAgLTIwMTUsNyArMTkx
Nyw2IEBACiAJCUUxOEU2OTBDMTY5QjU2M0YwMDlCNjY3MCAvKiBTZWNJdGVtU2hpbVByb3h5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMThFNjkwQTE2
OUI1NjNGMDA5QjY2NzAgLyogU2VjSXRlbVNoaW1Qcm94eS5oICovOyB9OwogCQlFMThFNjkxNzE2
OUI2NjdCMDA5QjY2NzAgLyogU2VjSXRlbVNoaW1Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMThFNjkxMzE2OUI2
NjdCMDA5QjY2NzAgLyogU2VjSXRlbVNoaW1Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07
CiAJCUUxOEU2OTE4MTY5QjY2N0IwMDlCNjY3MCAvKiBTZWNJdGVtU2hpbVByb3h5TWVzc2FnZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOEU2OTE0
MTY5QjY2N0IwMDlCNjY3MCAvKiBTZWNJdGVtU2hpbVByb3h5TWVzc2FnZXMuaCAqLzsgfTsKLQkJ
RTE5QkRBODYxOTM2NjVFMzAwQjk3RjU3IC8qIGNvbS5hcHBsZS5hcHBzdG9yZS5Db2RlUmVkZWVt
ZXJOZXRzY2FwZVBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTlCREE4NDE5MzY1RjRCMDBCOTdGNTcg
LyogY29tLmFwcGxlLmFwcHN0b3JlLkNvZGVSZWRlZW1lck5ldHNjYXBlUGx1Z2luLnNiICovOyB9
OwogCQlFMUFFQTIyRjE0Njg3QkRCMDA4MDQ1NjkgLyogV0tGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRj
aGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUFF
QTIyRDE0Njg3QkRCMDA4MDQ1NjkgLyogV0tGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLmggKi87
IH07CiAJCUUxQjc4NDcxMTYzRjI0NjkwMDA3QjY5MiAvKiBSZW1vdGVOZXR3b3JraW5nQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFCNzg0
NzAxNjNGMjQ2OTAwMDdCNjkyIC8qIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmggKi87IH07CiAJ
CUUxQ0MxQjkwMTJEN0VBREYwMDYyNTgzOCAvKiBQcmludEluZm8uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQ0MxQjhFMTJEN0VBREYwMDYyNTgzOCAv
KiBQcmludEluZm8uaCAqLzsgfTsKQEAgLTIxNjMsMTMgKzIwNjQsNiBAQAogCQkJcmVtb3RlR2xv
YmFsSURTdHJpbmcgPSAzNzJFQkIzODIwMTdFNjQzMDAwODUwNjQ7CiAJCQlyZW1vdGVJbmZvID0g
V2ViQ29udGVudC5EZXZlbG9wbWVudDsKIAkJfTsKLQkJMzc1RTA2MkExOTFFQThENDAwNEUzQ0FG
IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKLQkJCWlzYSA9IFBCWENvbnRhaW5lckl0
ZW1Qcm94eTsKLQkJCWNvbnRhaW5lclBvcnRhbCA9IDA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAv
KiBQcm9qZWN0IG9iamVjdCAqLzsKLQkJCXByb3h5VHlwZSA9IDE7Ci0JCQlyZW1vdGVHbG9iYWxJ
RFN0cmluZyA9IDhEQzJFRjRGMDQ4NkE2OTQwMDk4QjIxNjsKLQkJCXJlbW90ZUluZm8gPSBXZWJL
aXQ7Ci0JCX07CiAJCTM3NUUwNjMwMTkxRUE5MDQwMDRFM0NBRiAvKiBQQlhDb250YWluZXJJdGVt
UHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7CiAJCQljb250YWlu
ZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87
CkBAIC0yMTg0LDEzICsyMDc4LDYgQEAKIAkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gOERDMkVG
NEYwNDg2QTY5NDAwOThCMjE2OwogCQkJcmVtb3RlSW5mbyA9IFdlYktpdDsKIAkJfTsKLQkJMzdC
MUQwMTMxQzFFNDIxMTAwRDY3RkU5IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKLQkJ
CWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKLQkJCWNvbnRhaW5lclBvcnRhbCA9IDA4NjdE
NjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKLQkJCXByb3h5VHlwZSA9
IDE7Ci0JCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDFBQzI1RkFGMTJBNDhFQTcwMEJEMjY3MTsK
LQkJCXJlbW90ZUluZm8gPSBQbHVnaW5Qcm9jZXNzU2hpbTsKLQkJfTsKIAkJMzdGNzQwNzgxMjcy
MUY3NDAwOTM4NjlCIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKIAkJCWlzYSA9IFBC
WENvbnRhaW5lckl0ZW1Qcm94eTsKIAkJCWNvbnRhaW5lclBvcnRhbCA9IDA4NjdENjkwRkU4NDAy
OEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKQEAgLTIyODIsMTMgKzIxNjksNiBAQAog
CQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSBCQzgyODNCMDE2QjRCRjc3MDBBMjc4RkU7CiAJCQly
ZW1vdGVJbmZvID0gTmV0d29ya2luZzsKIAkJfTsKLQkJQkM4Mjg0NDUxNkI0RkY2NjAwQTI3OEZF
IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKLQkJCWlzYSA9IFBCWENvbnRhaW5lckl0
ZW1Qcm94eTsKLQkJCWNvbnRhaW5lclBvcnRhbCA9IDA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAv
KiBQcm9qZWN0IG9iamVjdCAqLzsKLQkJCXByb3h5VHlwZSA9IDE7Ci0JCQlyZW1vdGVHbG9iYWxJ
RFN0cmluZyA9IEJDODI4NDFFMTZCNEZERjYwMEEyNzhGRTsKLQkJCXJlbW90ZUluZm8gPSBQbHVn
aW4uNjQ7Ci0JCX07CiAJCUJDQThENDY3MTVCQ0UwRDYwMDlEQzFGMSAvKiBQQlhDb250YWluZXJJ
dGVtUHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7CiAJCQljb250
YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3Qg
Ki87CkBAIC0yMzI0LDEzICsyMjA0LDYgQEAKIAkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gOERD
MkVGNEYwNDg2QTY5NDAwOThCMjE2OwogCQkJcmVtb3RlSW5mbyA9IFdlYktpdDsKIAkJfTsKLQkJ
RTFBQzJFMkQyMEY3Qjk4ODAwQjA4OTdEIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsK
LQkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKLQkJCWNvbnRhaW5lclBvcnRhbCA9IDA4
NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKLQkJCXByb3h5VHlw
ZSA9IDE7Ci0JCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IEUxQUMyRTI3MjBGN0I5NEMwMEIwODk3
RDsKLQkJCXJlbW90ZUluZm8gPSAiVW5sb2NrIEtleWNoYWluIjsKLQkJfTsKIAkJRTFBQzJFMzEy
MEY3Qjk5QjAwQjA4OTdEIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKIAkJCWlzYSA9
IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKIAkJCWNvbnRhaW5lclBvcnRhbCA9IDA4NjdENjkwRkU4
NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKQEAgLTIzNTIsMTMgKzIyMjUsNiBA
QAogCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSBFMUFDMkUyNzIwRjdCOTRDMDBCMDg5N0Q7CiAJ
CQlyZW1vdGVJbmZvID0gIlVubG9jayBLZXljaGFpbiI7CiAJCX07Ci0JCUUxQUMyRTM5MjBGN0I5
QTcwMEIwODk3RCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhD
b250YWluZXJJdGVtUHJveHk7Ci0JCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhG
QzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87Ci0JCQlwcm94eVR5cGUgPSAxOwotCQkJcmVt
b3RlR2xvYmFsSURTdHJpbmcgPSBFMUFDMkUyNzIwRjdCOTRDMDBCMDg5N0Q7Ci0JCQlyZW1vdGVJ
bmZvID0gIlVubG9jayBLZXljaGFpbiI7Ci0JCX07CiAJCUUxQUMyRTNEMjBGN0I5QzAwMEIwODk3
RCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb250YWluZXJJ
dGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcg
LyogUHJvamVjdCBvYmplY3QgKi87CkBAIC0yNDAyLDM5ICsyMjY4LDEwIEBACiAJCQlkc3RQYXRo
ID0gIiI7CiAJCQlkc3RTdWJmb2xkZXJTcGVjID0gMTA7CiAJCQlmaWxlcyA9ICgKLQkJCQkzN0Iw
RDE4NDFDMUU0OTlBMDBENDBENjQgLyogUGx1Z2luUHJvY2Vzc1NoaW0uZHlsaWIgaW4gQ29weSBT
aGltcyAqLywKIAkJCSk7CiAJCQluYW1lID0gIkNvcHkgU2hpbXMiOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Ci0JCTdDQjE2RkVFMTcyNEJBMDUwMDdB
MEE5NSAvKiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9IHsKLQkJCWlzYSA9IFBC
WENvcHlGaWxlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3Owot
CQkJZHN0UGF0aCA9IFBsdWdJblNhbmRib3hQcm9maWxlczsKLQkJCWRzdFN1YmZvbGRlclNwZWMg
PSA3OwotCQkJZmlsZXMgPSAoCi0JCQkJNDE0Mzc1MUMyMEVBRUEyRDAwRkFEMDZDIC8qIGNuLm1p
Y3JvZG9uZS5jbWIuc2FmYXJpLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICov
LAotCQkJCUUxOUJEQTg2MTkzNjY1RTMwMEI5N0Y1NyAvKiBjb20uYXBwbGUuYXBwc3RvcmUuQ29k
ZVJlZGVlbWVyTmV0c2NhcGVQbHVnaW4uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmls
ZXMgKi8sCi0JCQkJNDExMkVEREIyMEU0MDdBNTAwQkVBOTJBIC8qIGNvbS5hcHBsZS5Cb2NvbVN1
Ym1pdEN0cmwuc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8sCi0JCQkJN0NC
MTZGRUYxNzI0QkEyMzAwN0EwQTk1IC8qIGNvbS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0Lndl
YnBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLywKLQkJCQk0MTEy
RUREQzIwRTQwN0E1MDBCRUE5MkEgLyogY29tLmFwcGxlLk5QU2FmZUlucHV0LnNiIGluIENvcHkg
UGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovLAotCQkJCTQxMTJFREREMjBFNDA3QTUwMEJFQTky
QSAvKiBjb20uYXBwbGUuTlBTYWZlU3VibWl0LnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFBy
b2ZpbGVzICovLAotCQkJCTdDQjE2RkYwMTcyNEJBMjQwMDdBMEE5NSAvKiBjb20uYXBwbGUuUXVp
Y2tUaW1lIFBsdWdpbi5wbHVnaW4uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMg
Ki8sCi0JCQkJN0E3NzJDOEQxRERENEEyNTAwMEYzNEYxIC8qIGNvbS5hcHBsZS5XZWJLaXQucGx1
Z2luLWNvbW1vbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLywKLQkJCQk0
MTEyRURERTIwRTQwN0E1MDBCRUE5MkEgLyogY29tLmNmY2EubnBTZWNFZGl0Q3RsLk1BQy5CT0Mu
cGx1Z2luLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovLAotCQkJCTQxNERE
MzdBMjBCRjQ5QTUwMDY5NTlGQiAvKiBjb20uY2lzY28ud2ViZXgucGx1Z2luLmdwYzY0LnNiIGlu
IENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovLAotCQkJCTQxMTJFRERGMjBFNDA3QTUw
MEJFQTkyQSAvKiBjb20uY21iY2hpbmEuQ01CU2VjdXJpdHkuc2IgaW4gQ29weSBQbHVnLWluIFNh
bmRib3ggUHJvZmlsZXMgKi8sCi0JCQkJNDExMkVERTAyMEU0MDdBNTAwQkVBOTJBIC8qIGNvbS5m
dHNhZmUuTlBBUEktQ29yZS1TYWZlLVNvZnRLZXliYW9yZC5wbHVnaW4ucmZjMTAzNGlkZW50aWZp
ZXIuc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8sCi0JCQkJNDEzQ0NENTAy
MERFQkM3NDAwNjVBMjFBIC8qIGNvbS5nb29nbGUuZ29vZ2xldGFsa2Jyb3dzZXJwbHVnaW4uc2Ig
aW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8sCi0JCQkJNDE1N0U0QjAyMEUyRUNE
RjAwQTZDMEQ3IC8qIGNvbS5nb29nbGUubzFkYnJvd3NlcnBsdWdpbi5zYiBpbiBDb3B5IFBsdWct
aW4gU2FuZGJveCBQcm9maWxlcyAqLywKLQkJCQlBMTAyQTcwODFFQzBFRUU5MDBEODFEODIgLyog
Y29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyIEVTUi5wbHVnaW4uc2IgaW4gQ29weSBQbHVnLWlu
IFNhbmRib3ggUHJvZmlsZXMgKi8sCi0JCQkJN0NCMTZGRjIxNzI0QkEyODAwN0EwQTk1IC8qIGNv
bS5tYWNyb21lZGlhLkZsYXNoIFBsYXllci5wbHVnaW4uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRi
b3ggUHJvZmlsZXMgKi8sCi0JCQkJN0NCMTZGRjMxNzI0QkEyRjAwN0EwQTk1IC8qIGNvbS5taWNy
b3NvZnQuU2lsdmVybGlnaHRQbHVnaW4uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmls
ZXMgKi8sCi0JCQkJN0NCMTZGRjQxNzI0QkEzMDAwN0EwQTk1IC8qIGNvbS5vcmFjbGUuamF2YS5K
YXZhQXBwbGV0UGx1Z2luLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovLAot
CQkJKTsKLQkJCW5hbWUgPSAiQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMiOwotCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07CiAJCUExNTc5NzYzMjU4
MkIxQTUwMDUyODIzNiAvKiBDb3B5IFBsdWctaW5zICovID0gewogCQkJaXNhID0gUEJYQ29weUZp
bGVzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0yNjgx
LDM0ICsyNTE4LDExIEBACiAJCTFBMDAyRDQyMTk2QjMzNzAwMEI5QUQ0NCAvKiBfV0tTZXNzaW9u
U3RhdGVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tTZXNz
aW9uU3RhdGVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTAwMkQ0
NjE5NkIzNDVEMDBCOUFENDQgLyogU2Vzc2lvblN0YXRlQ29kaW5nLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Vzc2lvblN0YXRlQ29kaW5nLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQTAwMkQ0NzE5NkIzNDVEMDBCOUFENDQgLyogU2Vzc2lv
blN0YXRlQ29kaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlc3Npb25T
dGF0ZUNvZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTA0Mzk3NDEyNEQw
MzQ4MDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQbHVnaW5Qcm9jZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFB
MDQzOTc1MTI0RDAzNDgwMEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsdWdpblByb2Nlc3MuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkxQTA0M0EwNzEyNEQxMUE5MDBGRkJGQjUgLyogV2ViUHJvY2Vzc0Nv
bm5lY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUHJvY2Vzc0Nv
bm5lY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEwNDNBMDgxMjREMTFB
OTAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlByb2Nlc3NDb25uZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMUEwNDNCNEMxMjRENUUzNjAwRkZCRkI1IC8qIFBsdWdpblByb2Nl
c3NQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQbHVnaW5Qcm9jZXNz
UHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMDQzQjVC
MTI0RDVFOUQwMEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUGx1Z2luUHJvY2Vzc1Byb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2lu
UHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKLQkJMUEwNDNCNUMxMjRENUU5RDAwRkZCRkI1IC8qIFBsdWdpblByb2Nlc3NQ
cm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBsdWdpblBy
b2Nlc3NQcm94eU1lc3NhZ2VzLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdp
blByb2Nlc3NQcm94eU1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07Ci0JCTFBMDQzREJGMTI0RkY4NzUwMEZGQkZCNSAvKiBQbHVnaW5Qcm94eS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW5Qcm94eS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkxQTA0M0RDMDEyNEZGODc1MDBGRkJGQjUgLyogUGx1Z2luUHJveHkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGx1Z2luUHJveHkuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTA0M0Y1OTEyNTE0Q0YzMDBGRkJGQjUgLyog
V2ViUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
V2ViUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTFBMDQzRjY3MTI1MTREOEIwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbk1l
c3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBX
ZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291
cmNlcy9XZWJLaXQyL1dlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291
cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJMUEwNDNGNjgxMjUxNEQ4QjAwRkZC
RkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gV2ViUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oOyBwYXRoID0gRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmg7IHNvdXJj
ZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTFBMDRGNjE3MUE0QTNBN0EwMEEyMUI2
RSAvKiBXZWJQcm9jZXNzUHJveHlDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdlYlByb2Nlc3NQcm94eUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQTA4RkVFMjFENTkzQ0YxMDA4QkE4Q0IgLyogV2ViUGx1Z2luSW5mb1Byb3Zp
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBsdWdpbklu
Zm9Qcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMDhGRUUzMUQ1
OTNDRjEwMDhCQThDQiAvKiBXZWJQbHVnaW5JbmZvUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViUGx1Z2luSW5mb1Byb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFBMEMyMjdDMjQ1MTEzMEEwMEVENjE0RCAvKiBRdWlja0xvb2tUaHVt
Ym5haWxpbmdTb2Z0TGluay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWlja0xvb2tUaHVtYm5haWxpbmdT
b2Z0TGluay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTBDMjI3RDI0NTExMzBB
MDBFRDYxNEQgLyogUXVpY2tMb29rVGh1bWJuYWlsaW5nU29mdExpbmsubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBRdWlja0xvb2tUaHVtYm5haWxpbmdTb2Z0TGluay5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMUEwRUM2MDExMjRBOUYyQzAwN0VGNEE1IC8qIFBsdWdpblByb2Nl
c3NNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdpblByb2Nl
c3NNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMEVDNjAyMTI0QTlG
MkMwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQbHVnaW5Qcm9jZXNzTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTFBMEVDNkIxMTI0QkJEMzYwMDdFRjRBNSAvKiBQbHVnaW5Qcm9j
ZXNzLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBsdWdpblByb2Nlc3MubWVz
c2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMEVDNkJEMTI0QkJEOUIw
MDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDE7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUGx1Z2luUHJvY2Vz
c01lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdp
blByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNf
RElSOyB9OwotCQkxQTBFQzZCRTEyNEJCRDlCMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc01lc3Nh
Z2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBsdWdpblByb2Nlc3NNZXNz
YWdlcy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzTWVzc2Fn
ZXMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJMUEwRUM3NUMxMjRC
QzdCMjAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQbHVnaW5Qcm9jZXNzUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMUEwRUM3NUQxMjRCQzdCMjAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NQcm94eS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbHVnaW5Qcm9jZXNzUHJv
eHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTBFQzkwNDEyNEMwQUI4MDA3
RUY0QTUgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMUEwRUM5MDUxMjRDMEFCODAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NDb25u
ZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsdWdpblBy
b2Nlc3NDb25uZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEwRUM5
MEQxMjRDMEFGNTAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1h
bmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEwRUM5MEUxMjRDMEFGNTAw
N0VGNEE1IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTBGMjlFMTEyMEI0NDQyMDA1M0Qx
QjkgLyogVmlzaXRlZExpbmtTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBWaXNpdGVkTGlua1N0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUEwRjI5RTIxMjBCNDQ0MjAwNTNEMUI5IC8qIFZpc2l0ZWRMaW5rU3RvcmUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlzaXRlZExpbmtTdG9yZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQTE0RjhERjFENzRDODM0MDA2Q0JFQzYgLyogRnJhbWVJbmZv
RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGcmFtZUluZm9E
YXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3MTcsOCArMjUzMSw2IEBA
CiAJCTFBMTU4NDE4MTg5MDQ0RjUwMDE3NjE2QyAvKiBXS1Byb2Nlc3NQb29sLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUHJvY2Vzc1Bvb2wuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUExNzYzNTQxNkIxRDVEMDAwRDg4RkQ2IC8qIFN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VO
YW1lc3BhY2VJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUExNzYzNTUx
NkIxRDVEMDAwRDg4RkQ2IC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTFBMTc5NzdEMTM3RUU4MkMwMEY5N0Q0NSAvKiBQbHVnaW5DcmVhdGlv
blBhcmFtZXRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGx1
Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MUExNzk3N0UxMzdFRTgyQzAwRjk3RDQ1IC8qIFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUExQjBFQjMxOEE0MjQ5NTAwMzg0ODFB
IC8qIFdLTmF2aWdhdGlvblJlc3BvbnNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV0tOYXZpZ2F0aW9uUmVzcG9uc2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFBMUIwRUI0MThBNDI0OTUwMDM4NDgxQSAvKiBXS05hdmlnYXRpb25SZXNwb25z
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS05hdmlnYXRpb25SZXNwb25z
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTFCMEVCNzE4QTQyNENEMDAzODQ4
MUEgLyogV0tOYXZpZ2F0aW9uUmVzcG9uc2VJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXS05hdmlnYXRpb25SZXNwb25zZUludGVybmFsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yNzI4LDE5ICsyNTQwLDkgQEAKIAkJMUExRTA5MzIxODg2MUQz
ODAwRDJEQzQ5IC8qIFdlYlByb2dyZXNzVHJhY2tlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJQcm9ncmVzc1RyYWNrZXJDbGllbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUExRUM2OUQxODcyMDkyMTAwQjk1MUYwIC8qIEltcG9ydGFuY2VB
c3NlcnRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1wb3J0YW5jZUFz
c2VydGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTFFRjE5NzFBMUQ1QjQy
MDAyMzIwMEEgLyogQVBJRGF0YUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gQVBJRGF0YUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkxQTFGQTI1MTEyN0EwRTRGMDA1MEU3MDkgLyogTlBSZW1vdGVPYmplY3RNYXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTlBSZW1vdGVPYmplY3RNYXAuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUExRkEyNTIxMjdBMEU0RjAwNTBFNzA5IC8qIE5QUmVtb3Rl
T2JqZWN0TWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5QUmVt
b3RlT2JqZWN0TWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUExRkEyODMx
MjdBMTNCQzAwNTBFNzA5IC8qIE5QT2JqZWN0UHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTlBPYmplY3RQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkxQTFGQTI4NDEyN0ExM0JDMDA1MEU3MDkgLyogTlBPYmplY3RQcm94eS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOUE9iamVjdFByb3h5LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUExRkEzNUIxMjdBNDVCRjAwNTBFNzA5IC8qIE5QT2JqZWN0
TWVzc2FnZVJlY2VpdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5QT2Jq
ZWN0TWVzc2FnZVJlY2VpdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMUZB
MzVDMTI3QTQ1QkYwMDUwRTcwOSAvKiBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMUZFQzE5MTYyN0IzRUYwMDcwMEY2
RCAvKiBXZWJDb25uZWN0aW9uLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYkNvbm5lY3Rpb24ubWVzc2Fn
ZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMUZFQzFBMTYyN0I0NTYwMDcw
MEY2RCAvKiBXZWJDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBw
YXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVy
LmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMUExRkVDMUIxNjI3
QjQ1NzAwNzAwRjZEIC8qIFdlYkNvbm5lY3Rpb25NZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBXZWJDb25uZWN0aW9uTWVzc2FnZXMuaDsgcGF0aCA9IERlcml2ZWRT
b3VyY2VzL1dlYktpdDIvV2ViQ29ubmVjdGlvbk1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07Ci0JCTFBMjE2MUFFMTFGMzc2NjQwMDhBRDBGNSAvKiBOUFJ1bnRp
bWVPYmplY3RNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTlBSdW50aW1l
T2JqZWN0TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMjE2MUFGMTFGMzc2
NjQwMDhBRDBGNSAvKiBOUFJ1bnRpbWVPYmplY3RNYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTlBSdW50aW1lT2JqZWN0TWFwLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMUEyMTYyQUUxMUYzODk3MTAwOEFEMEY1IC8qIE5QUnVudGltZVV0aWxp
dGllcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOUFJ1bnRpbWVV
dGlsaXRpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTIxNjJBRjExRjM4
OTcxMDA4QUQwRjUgLyogTlBSdW50aW1lVXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE5QUnVudGltZVV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQTIyRjBGRjEyODlGQ0Q5MDA4NUU3NEYgLyogV0tCdW5kbGVQYWdlT3ZlcmxheS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0J1bmRsZVBhZ2VPdmVybGF5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMjJGMTAwMTI4OUZDRDkwMDg1RTc0RiAv
KiBXS0J1bmRsZVBhZ2VPdmVybGF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdLQnVuZGxlUGFnZU92ZXJsYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQTI0NjRGMjE4OTFFNDUxMDAyMzRDNUIgLyogQVBJTG9hZGVyQ2xpZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUxvYWRlckNsaWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjc1MSwyMiArMjU1Myw3IEBACiAJCTFBMjU2RTM2MThBMUE3
ODgwMDZGQjkyMiAvKiBXS05hdmlnYXRpb25BY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0tOYXZpZ2F0aW9uQWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFBMjU2RTM5MThBMUE3REYwMDZGQjkyMiAvKiBXS05hdmlnYXRpb25BY3Rpb25JbnRl
cm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS05hdmlnYXRpb25BY3Rp
b25JbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTI4QjhDQjFDODBF
RDU5MDA2RkQ3NDMgLyogV2Vic2l0ZURhdGFGZXRjaE9wdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJzaXRlRGF0YUZldGNoT3B0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTFBMkJCNkNDMTQxMTdBNUYwMDBGMzVENCAvKiBQbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbi5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQbHVnaW5Qcm9j
ZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MUEyQkI2Q0UxNDExN0I0RDAwMEYzNUQ0IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFBsdWdp
blByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBz
b3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkxQTJCQjZDRjE0MTE3QjREMDAw
RjM1RDQgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmg7IHBh
dGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWVzc2Fn
ZXMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMUEyRDI1MkExOTQ2
ODhGRDAwNDUzN0IwIC8qIFdLRXJyb3JJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXS0Vycm9ySW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMUEyRDg0MTExMjdGNjRFODAwMUVCOTYyIC8qIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLm1l
c3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVy
Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTJEODQzNzEyN0Y2
NUQ1MDAxRUI5NjIgLyogTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTlBPYmplY3RNZXNzYWdlUmVj
ZWl2ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9O
UE9iamVjdE1lc3NhZ2VSZWNlaXZlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSBC
VUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTFBMkQ4NDM4MTI3RjY1RDUwMDFFQjk2MiAvKiBOUE9i
amVjdE1lc3NhZ2VSZWNlaXZlck1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyTWVzc2FnZXMuaDsgcGF0aCA9IERlcml2ZWRT
b3VyY2VzL1dlYktpdDIvTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXJNZXNzYWdlcy5oOyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkxQTJEODQ4OTEyN0Y2QTQ5MDAxRUI5NjIg
LyogTlBJZGVudGlmaWVyRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBO
UElkZW50aWZpZXJEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMkQ4NDhB
MTI3RjZBNDkwMDFFQjk2MiAvKiBOUElkZW50aWZpZXJEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5QSWRlbnRpZmllckRhdGEuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkxQTJEODRBMTEyN0Y2QUQxMDAxRUI5NjIgLyogTlBWYXJpYW50RGF0
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOUFZhcmlhbnREYXRhLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMkQ4NEEyMTI3RjZBRDEwMDFFQjk2MiAvKiBO
UFZhcmlhbnREYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5Q
VmFyaWFudERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTJEOTBCQTEy
ODFDOTMxMDAxRUI5NjIgLyogUGx1Z2luUHJvY2Vzc1Byb3h5TWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGx1Z2luUHJvY2Vzc1Byb3h5TWFjLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTJEOTBEMDEyODFDOTY2MDAxRUI5NjIgLyogUGx1
Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTFBMkQ5MEQxMTI4MUM5NjYwMDFFQjk2MiAvKiBQbHVnaW5Qcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkxQTJEOTFBNTEyODFENzM5MDAxRUI5NjIgLyogUGx1Z2luQ29udHJvbGxl
clByb3h5TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGx1
Z2luQ29udHJvbGxlclByb3h5TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkx
QTJEOTIyMDEyODFEQzFCMDAxRUI5NjIgLyogUGx1Z2luUHJveHlNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbHVnaW5Qcm94eU1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEyRDk1NkQxMjg0ODU2NDAwMUVCOTYyIC8qIEF1eGlsaWFy
eVByb2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV4aWxpYXJ5UHJv
Y2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTJEOTU2RTEyODQ4NTY0MDAx
RUI5NjIgLyogQXV4aWxpYXJ5UHJvY2Vzcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBBdXhpbGlhcnlQcm9jZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUEzMDA2NkMxMTEwRjRGNzAwMzE5MzdDIC8qIFJlc3BvbnNpdmVuZXNzVGltZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzcG9uc2l2ZW5lc3NUaW1lci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjc4MCw3ICsyNTY3LDYgQEAKIAkJMUEzQ0Mx
NjQxODkwNkFDRjAwMUU2RUQ4IC8qIFdLV2ViVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdLV2ViVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUEzQ0MxNjUxODkwNkFDRjAwMUU2RUQ4IC8qIFdLV2ViVmlldy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYlZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUEzQ0MxNjgxODkwN0VCMDAwMUU2RUQ4IC8qIFdLUHJvY2Vzc1Bvb2xJbnRlcm5h
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1Byb2Nlc3NQb29sSW50ZXJu
YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEzRDYxMDAxM0E3Q0MyQTAwRjk1
RDRFIC8qIFBsdWdpbk1vZHVsZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGx1Z2luTW9kdWxlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTNE
NjEwNDEzQTdGMDNBMDBGOTVENEUgLyogQXJndW1lbnRDb2RlcnMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJndW1lbnRDb2RlcnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQTNERDIwNTEyNUU1QTJGMDA0NTE1RTYgLyogQVBJQ2xpZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUNsaWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQTNFNzM1RjExQ0MyNjU5MDA3QkQ1MzkgLyogV2ViUGxhdGZv
cm1TdHJhdGVnaWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsYXRm
b3JtU3RyYXRlZ2llcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjgwMywxMCAr
MjU4OSw2IEBACiAJCTFBNDgzMkQ1MUE5Q0RGOTYwMDhCNERGRSAvKiBXZWJzaXRlRGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJzaXRlRGF0YS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQTQ4MzJEODFBOUQxRkQyMDA4QjRERkUgLyogV2Vic2l0ZURh
dGFSZWNvcmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vic2l0
ZURhdGFSZWNvcmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTRBOTNCNjFB
RUIwOEVBMDAxNTBFOUMgLyogX1dLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTRBOUM1MzEyQjgxNkNGMDA4RkU5ODQgLyog
TmV0c2NhcGVQbHVnaW5Nb2R1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTmV0c2NhcGVQbHVnaW5Nb2R1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkxQTRBOUM1NDEyQjgxNkNGMDA4RkU5ODQgLyogTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE0QTlDOTkxMkI4MjFDRDAwOEZFOTg0IC8q
IE5ldHNjYXBlUGx1Z2luTW9kdWxlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gTmV0c2NhcGVQbHVnaW5Nb2R1bGVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTFBNEE5RjMxMTJCODQ0RTIwMDhGRTk4NCAvKiBQbHVnaW5RdWlya3MuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luUXVpcmtzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBNEQ2NjQ3MThBMkQ5MUEwMEQ4MkUyMSAvKiBBUElVSUNs
aWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElVSUNsaWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTRENjY0OTE4QTMwMzBFMDBEODJFMjEgLyog
V0tGcmFtZUluZm8ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBX
S0ZyYW1lSW5mby5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE0RDY2NEExOEEz
MDMwRTAwRDgyRTIxIC8qIFdLRnJhbWVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdLRnJhbWVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODU5
LDE1ICsyNjQxLDggQEAKIAkJMUE2RkI3QUQxMUU2NEI2ODAwREIxMzcxIC8qIFBsdWdpblZpZXcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luVmlldy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQTZGQjdEMDExRTY1MUUyMDBEQjEzNzEgLyogUGx1Z2lu
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsdWdpbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBNkZCN0QxMTFFNjUxRTIwMERCMTM3MSAvKiBQ
bHVnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBNkZCQTI4MTFFNjg2MjcwMERCMTM3MSAvKiBOZXRz
Y2FwZUJyb3dzZXJGdW5jcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXRz
Y2FwZUJyb3dzZXJGdW5jcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTZGQkEy
OTExRTY4NjI3MDBEQjEzNzEgLyogTmV0c2NhcGVCcm93c2VyRnVuY3MuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0c2NhcGVCcm93c2VyRnVuY3MuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTZGQkQyNjExRTY5QkMyMDBEQjEzNzEgLyogTmV0
c2NhcGVQbHVnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0c2NhcGVQ
bHVnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE2RkJEMjcxMUU2OUJDMjAw
REIxMzcxIC8qIE5ldHNjYXBlUGx1Z2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE5ldHNjYXBlUGx1Z2luLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUE3Mjg0NDQxOTU5RUQxMDAwMDdCQ0U1IC8qIFNlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Vzc2lvblN0YXRlQ29udmVy
c2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBNzI4NDQ1MTk1OUVEMTAw
MDA3QkNFNSAvKiBTZXNzaW9uU3RhdGVDb252ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNlc3Npb25TdGF0ZUNvbnZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMUE3ODY1QjYxNkNBQzZGRDAwQUNFODNBIC8qIFBsdWdpblByb2Nlc3NDb25u
ZWN0aW9uTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1h
bmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBNzg2NUI3
MTZDQUM3MTUwMEFDRTgzQSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXJNZXNzYWdl
UmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2
ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyTWVzc2FnZVJl
Y2VpdmVyLmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJMUE3ODY1
QjgxNkNBQzcxNTAwQUNFODNBIC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlck1lc3Nh
Z2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBsdWdpblByb2Nlc3NDb25u
ZWN0aW9uTWFuYWdlck1lc3NhZ2VzLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1Bs
dWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlck1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CiAJCTFBN0MwREY0MUI3RDFGMTAwMEE5Qjg0OCAvKiBXS1dpbmRv
d0ZlYXR1cmVzUmVmLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdL
V2luZG93RmVhdHVyZXNSZWYuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTdD
MERGNTFCN0QxRjEwMDBBOUI4NDggLyogV0tXaW5kb3dGZWF0dXJlc1JlZi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dpbmRvd0ZlYXR1cmVzUmVmLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFBN0UzNzc0MThFNEEzM0EwMDNEMEZGRiAvKiBXS1NjcmlwdE1l
c3NhZ2VIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLU2NyaXB0
TWVzc2FnZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4ODMsMTQg
KzI2NTgsNiBAQAogCQkxQThFN0QzODE4QzE1MEJGMDA1QTcwMkEgLyogVmlzaXRlZExpbmtUYWJs
ZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVmlzaXRlZExp
bmtUYWJsZUNvbnRyb2xsZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFBOEU3RDNBMThDMTUxNDkwMDVBNzAyQSAvKiBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxl
ck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBE
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyTWVzc2FnZVJl
Y2VpdmVyLmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMUE4RTdE
M0IxOEMxNTE0OTAwNUE3MDJBIC8qIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyTWVzc2FnZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVmlzaXRlZExpbmtUYWJsZUNvbnRy
b2xsZXJNZXNzYWdlcy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9WaXNpdGVkTGlu
a1RhYmxlQ29udHJvbGxlck1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19E
SVI7IH07Ci0JCTFBOEVGNEM5MTI1MjQwMzcwMEY3MDY3RiAvKiBQbHVnaW5Db250cm9sbGVyUHJv
eHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luQ29udHJvbGxlclBy
b3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBOEVGNENBMTI1MjQwMzcwMEY3
MDY3RiAvKiBQbHVnaW5Db250cm9sbGVyUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMUE4RUY5NDExMjUyQUU4NDAwRjcwNjdGIC8qIFBsdWdpbkNvbnRyb2xs
ZXJQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQbHVnaW5Db250cm9s
bGVyUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBOEVG
OTZDMTI1MkFGNkIwMEY3MDY3RiAvKiBQbHVnaW5Db250cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUGx1Z2luQ29udHJv
bGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktp
dDIvUGx1Z2luQ29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9
IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJMUE4RUY5NkQxMjUyQUY2QjAwRjcwNjdGIC8qIFBs
dWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFBsdWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmg7IHBhdGggPSBEZXJpdmVkU291
cmNlcy9XZWJLaXQyL1BsdWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTFBOEVGQTVCMTI1MkI3Q0UwMEY3MDY3RiAvKiBQ
bHVnaW5Qcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQbHVnaW5Qcm94
eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE4RUZBNkUxMjUy
Qjg0MTAwRjcwNjdGIC8qIFBsdWdpblByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFBsdWdpblByb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkxQThFRkE2RjEy
NTJCODQxMDBGNzA2N0YgLyogUGx1Z2luUHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBQbHVnaW5Qcm94eU1lc3NhZ2VzLmg7IHBhdGggPSBEZXJpdmVkU291
cmNlcy9XZWJLaXQyL1BsdWdpblByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BS
T0RVQ1RTX0RJUjsgfTsKIAkJMUE5MEMxRUQxMjY0RkQ1MDAwM0U0NEQ0IC8qIFdlYkZpbmRPcHRp
b25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZpbmRPcHRpb25zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOTBDMUYyMTI2NEZENzEwMDNFNDRENCAv
KiBGaW5kQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaW5k
Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTkwQzFGMzEyNjRG
RDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRmluZENvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjkwNiw3ICsyNjczLDYgQEAKIAkJMUE5RTMyOUQxODIyRkVERDAwRjVEMDRDIC8q
IFdLUmVtb3RlT2JqZWN0Q29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0tSZW1vdGVPYmplY3RDb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTlF
MzJBMDE4MjMwMTg5MDBGNUQwNEMgLyogX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnlJbnRlcm5hbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tSZW1vdGVPYmplY3RSZWdpc3Ry
eUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOUYyODEwMTk1OEY0
NzgwMDhDQUM3MiAvKiBXS0JhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0tCYWNrRm9yd2FyZExpc3RQcml2YXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTFBOUZCQThDMTNGRjA0RTYwMERFRUQ2NyAvKiBQbHVnaW5Db21w
bGV4VGV4dElucHV0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1
Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFBQTEzMjExMTkxRDU5MjQwMDlDMTQ4OSAvKiBXS05hdmlnYXRpb25SZXNwb25zZVByaXZhdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tOYXZpZ2F0aW9uUmVzcG9uc2VQ
cml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTFDNzlBMTAwRTdGQzUw
MDc4REVCQyAvKiBXZWJDb3JlLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBwYXRoID0gV2ViQ29yZS5m
cmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTFBQTFDN0RF
MTAwRTg0NkUwMDc4REVCQyAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsg
cGF0aCA9IEphdmFTY3JpcHRDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKQEAgLTI5MjAsMTUgKzI2ODYsMTIgQEAKIAkJMUFBNDE3QzkxMkMwMENDQTAw
MkJFNjdCIC8qIFRleHRDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRleHRDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTQxN0VEMTJD
MDBEODcwMDJCRTY3QiAvKiBUZXh0Q2hlY2tlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFRleHRDaGVja2VyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQUE0MUFCNDEyQzAyRUM0MDAyQkU2N0IgLyogRWRpdG9yU3RhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWRpdG9yU3RhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMUFBNDc5MjIxMkE1OUZEOTAwODIzNkMzIC8qIFBsdWdpblByb2Nl
c3NNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbHVnaW5Q
cm9jZXNzTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUE1NkYyODExRTky
QkM4MDA2MUI4ODIgLyogUGx1Z2luQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQbHVnaW5Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFBQTU3NUY4MTQ5NkI1MjYwMEE0RUUwNiAvKiBFdmVudERpc3BhdGNoZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXZlbnREaXNwYXRjaGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBNTc1RjkxNDk2QjUyNjAwQTRFRTA2IC8qIEV2
ZW50RGlzcGF0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFdmVudERp
c3BhdGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBNTc1RkQxNDk2QjZG
MzAwQTRFRTA2IC8qIEV2ZW50RGlzcGF0Y2hlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBFdmVudERpc3BhdGNoZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFBQTU3NUZGMTQ5NkI3QzAwMEE0RUUwNiAvKiBFdmVudERpc3BhdGNoZXJNZXNz
YWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRXZl
bnREaXNwYXRjaGVyTWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dl
YktpdDIvRXZlbnREaXNwYXRjaGVyTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9IEJV
SUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMUFBNTc2MDAxNDk2QjdDMDAwQTRFRTA2IC8qIEV2ZW50
RGlzcGF0Y2hlck1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEV2
ZW50RGlzcGF0Y2hlck1lc3NhZ2VzLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL0V2
ZW50RGlzcGF0Y2hlck1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07Ci0JCTFBQTU4ODkwMTFFRTcwNDAwMDYxQjg4MiAvKiBOZXRzY2FwZVBsdWdpblN0cmVhbS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXRzY2FwZVBsdWdpblN0cmVhbS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUE1ODg5MTExRUU3MDQwMDA2MUI4ODIg
LyogTmV0c2NhcGVQbHVnaW5TdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTmV0c2NhcGVQbHVnaW5TdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQUE2NTREMDFCMTRGNzE0MDBCRjFEM0UgLyogV0tXZWJzaXRlRGF0YVJlY29yZFBy
aXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0YVJl
Y29yZFByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBODNGNkExQTVC
NjNGRjAwMDI2RUM2IC8qIFdlYkRhdGFiYXNlUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViRGF0YWJhc2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFBQTgzRjZCMUE1QjYzRkYwMDAyNkVDNiAvKiBXZWJEYXRhYmFz
ZVByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkRhdGFiYXNl
UHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMwMTYsMTEgKzI3Nzks
NyBAQAogCQkxQUMxMzM4MzE4NTkwQzQ2MDBGM0VDMDUgLyogUmVtb3RlT2JqZWN0UmVnaXN0cnlN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
UmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNv
dXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTFBQzEzMzg0MTg1OTBDNDYwMEYz
RUMwNSAvKiBSZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFJlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaDsgcGF0aCA9IERl
cml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlcy5oOyBzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkxQUMxNDE1MDE4QUM0N0VFMDA2QzYw
MkMgLyogV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFDMjVGODkxMkE0OEUwMzAwQkQyNjcxIC8qIFBsdWdpblBy
b2Nlc3NTaGltLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdpblByb2Nl
c3NTaGltLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQzI1RjhBMTJBNDhFMDMw
MEJEMjY3MSAvKiBQbHVnaW5Qcm9jZXNzU2hpbS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFBsdWdpblByb2Nlc3NTaGltLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkxQUMyNUZCMDEyQTQ4RUE3MDBCRDI2NzEgLyogUGx1Z2luUHJvY2Vzc1NoaW0u
ZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJj
b21waWxlZC5tYWNoLW8uZHlsaWIiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBQbHVnaW5Q
cm9jZXNzU2hpbS5keWxpYjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJ
MUFDNEM4MjgxNkI4NzZBOTAwNjlEQ0NEIC8qIE1lc3NhZ2VGbGFncy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNZXNzYWdlRmxhZ3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMUFDNUZGQzExNzRCRkQxQjAwMDE0ODNEIC8qIFBsdWdpblByb2Nlc3NBdHRyaWJ1
dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdpblByb2Nlc3NBdHRy
aWJ1dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQzc1Mzc5MTgzQTlGREEw
MDcyQ0IxNSAvKiBQYWdlTG9hZFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFBhZ2VMb2FkU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQUM3NTM3QTE4M0E5RkRCMDA3MkNCMTUgLyogUGFnZUxvYWRTdGF0ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlTG9hZFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFBQzc1MzdFMTgzQkU1MEYwMDcyQ0IxNSAvKiBEYXRhUmVmZXJlbmNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFSZWZlcmVuY2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMwNjUsMjAgKzI4MjQsMTAgQEAKIAkJMUFFMjg2N0Yx
QzdGOTJCRjAwNjlBQzRGIC8qIF9XS1dlYnNpdGVEYXRhU2l6ZUludGVybmFsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1dlYnNpdGVEYXRhU2l6ZUludGVybmFsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRTI4NjgxMUM3RjkzODYwMDY5QUM0RiAvKiBB
UElXZWJzaXRlRGF0YVJlY29yZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBBUElXZWJzaXRlRGF0YVJlY29yZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFBRTI4NjgyMUM3RjkzODYwMDY5QUM0RiAvKiBBUElXZWJzaXRlRGF0YVJlY29yZC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElXZWJzaXRlRGF0YVJlY29yZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUU0OTc2NjExRkY2NThFMDA0OEI0NjQgLyog
TlBKU09iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOUEpTT2JqZWN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBRTQ5NzY3MTFGRjY1OEUwMDQ4QjQ2
NCAvKiBOUEpTT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE5QSlNPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUU0OTg3NjEx
RkY3RkFBMDA0OEI0NjQgLyogSlNOUE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU05QT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBRTQ5
ODc3MTFGRjdGQUEwMDQ4QjQ2NCAvKiBKU05QT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTTlBPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkxQUU0OUE0NzExRkZBOENFMDA0OEI0NjQgLyogSlNOUE1ldGhvZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU05QTWV0aG9kLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTFBRTQ5QTQ4MTFGRkE4Q0UwMDQ4QjQ2NCAvKiBKU05QTWV0aG9kLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTlBNZXRob2QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUU1MkY5MzE5MjAxRjZCMDBBMUZBMzcgLyogV0tD
b250ZXh0Q29uZmlndXJhdGlvblJlZi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUFFNTJGOTQxOTIwMUY2QjAwQTFGQTM3IC8qIFdLQ29udGV4dENvbmZpZ3Vy
YXRpb25SZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb250ZXh0Q29u
ZmlndXJhdGlvblJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUU1QjdGOTEx
RTdBRUQyMDBCQTY3NjcgLyogTmV0c2NhcGVQbHVnaW5NYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOZXRzY2FwZVBsdWdpbk1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUFFRTU3MjMyNDA5RjE0MjAwMjAwNUQ2IC8qIFF1aWNrTG9va1Ro
dW1ibmFpbExvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWlja0xvb2tUaHVtYm5haWxMb2FkZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFFRTU3MjQyNDA5RjE0MjAwMjAwNUQ2
IC8qIFF1aWNrTG9va1RodW1ibmFpbExvYWRlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUXVp
Y2tMb29rVGh1bWJuYWlsTG9hZGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkx
QUVGQ0MxMDExRDAxRjk2MDA4MjE5RDMgLyogUGx1Z2luSW5mb1N0b3JlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdpbkluZm9TdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkxQUVGQ0MxMTExRDAxRjk2MDA4MjE5RDMgLyogUGx1Z2luSW5mb1N0b3Jl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsdWdpbkluZm9TdG9y
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBRUZDQ0JDMTFEMDJDNUUwMDgy
MTlEMyAvKiBQbHVnaW5JbmZvU3RvcmVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBQbHVnaW5JbmZvU3RvcmVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFBRUZEMjc4MTFEMTZDODEwMDgyMTlEMyAvKiBBcmd1bWVudENvZGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFyZ3VtZW50Q29kZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFFRkQyRjYxMUQxODA3QjAwODIxOUQzIC8qIEFyZ3VtZW50
Q29kZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFyZ3VtZW50Q29kZXJz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRjA1RDg0MTQ2ODgzNDgwMDhCMUU4
MSAvKiBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5Lm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQ
cm94eS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM4NDIsMTIgKzM1OTEsNiBA
QAogCQk0MTEyQjU0NzFGOUZEM0FCMDBFNjc5ODYgLyogTmV0d29ya1JUQ1Jlc29sdmVyQ29jb2Eu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya1JUQ1Jlc29s
dmVyQ29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTEyQjU0ODFGOUZE
M0FDMDBFNjc4NzUgLyogTmV0d29ya1JUQ1Jlc29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE5ldHdvcmtSVENSZXNvbHZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0MTEyQjU0ODFGOUZEM0FDMDBFNjc5ODYgLyogTmV0d29ya1JUQ1Jlc29sdmVyQ29j
b2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya1JUQ1Jlc29sdmVy
Q29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDExMkVERDIyMEU0MDc3MzAw
QkVBOTJBIC8qIGNvbS5mdHNhZmUuTlBBUEktQ29yZS1TYWZlLVNvZnRLZXliYW9yZC5wbHVnaW4u
cmZjMTAzNGlkZW50aWZpZXIuc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gImNvbS5mdHNhZmUu
TlBBUEktQ29yZS1TYWZlLVNvZnRLZXliYW9yZC5wbHVnaW4ucmZjMTAzNGlkZW50aWZpZXIuc2Ii
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTEyRUREMzIwRTQwNzc0MDBCRUE5MkEg
LyogY29tLmNmY2EubnBTZWNFZGl0Q3RsLk1BQy5CT0MucGx1Z2luLnNiICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IGNvbS5jZmNhLm5wU2VjRWRpdEN0bC5NQUMuQk9DLnBsdWdpbi5zYjsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDExMkVERDUyMEU0MDc3NDAwQkVBOTJBIC8qIGNvbS5j
bWJjaGluYS5DTUJTZWN1cml0eS5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBjb20uY21iY2hp
bmEuQ01CU2VjdXJpdHkuc2I7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxMTJFREQ3
MjBFNDA3NzUwMEJFQTkyQSAvKiBjb20uYXBwbGUuTlBTYWZlU3VibWl0LnNiICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IGNvbS5hcHBsZS5OUFNhZmVTdWJtaXQuc2I7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTQxMTJFREQ4MjBFNDA3NzUwMEJFQTkyQSAvKiBjb20uYXBwbGUuTlBTYWZl
SW5wdXQuc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gY29tLmFwcGxlLk5QU2FmZUlucHV0LnNi
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTEyRUREOTIwRTQwNzc1MDBCRUE5MkEg
LyogY29tLmFwcGxlLkJvY29tU3VibWl0Q3RybC5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBj
b20uYXBwbGUuQm9jb21TdWJtaXRDdHJsLnNiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0MTE4REMxQjIxRTZEMTFBMDBERTA0QzcgLyogV2Vic2l0ZURhdGFTdG9yZUNsaWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJzaXRlRGF0YVN0b3JlQ2xpZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMUE4REQ5MjBEREI2MDUwMDYwRDM0RiAv
KiBXS01vY2tNZWRpYURldmljZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
S01vY2tNZWRpYURldmljZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTFBOERE
QTIwRERCNjA1MDA2MEQzNEYgLyogV0tNb2NrTWVkaWFEZXZpY2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tNb2NrTWVkaWFEZXZpY2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMzg3OCwxNiArMzYyMSwxMiBAQAogCQk0MTM1RkJDRjFGNEZC
N0YyMDA3NEM0N0IgLyogQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMzVGQkQwMUY0RkI3RjIwMDc0QzQ3QiAvKiBD
YWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQxM0M4QjEzMjU1MTZCRkEwMEU2NTA1NSAvKiBMaWJXZWJSVENDb2RlY3MubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBMaWJXZWJSVENDb2RlY3MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTQxM0NDRDRGMjBERUJDMkYwMDY1QTIxQSAvKiBjb20uZ29vZ2xlLmdvb2dsZXRh
bGticm93c2VycGx1Z2luLnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGNvbS5nb29nbGUuZ29v
Z2xldGFsa2Jyb3dzZXJwbHVnaW4uc2I7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQx
NDM3NTFCMjBFQUVBMUUwMEZBRDA2QyAvKiBjbi5taWNyb2RvbmUuY21iLnNhZmFyaS5zYiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBjbi5taWNyb2RvbmUuY21iLnNhZmFyaS5zYjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDE0REQzNzgyMEJGNDNFQTAwNjk1OUZCIC8qIGNvbS5jaXNj
by53ZWJleC5wbHVnaW4uZ3BjNjQuc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gY29tLmNpc2Nv
LndlYmV4LnBsdWdpbi5ncGM2NC5zYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE1
MEE1QTAyM0UwNkM5MTAwNTEyNjRBIC8qIEdQVVByb2Nlc3NTZXNzaW9uUGFyYW1ldGVycy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHUFVQcm9jZXNzU2Vzc2lvblBhcmFtZXRl
cnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE1MTg1MzUyMjI3MDRGNTAwNTQz
MEM2IC8qIFNlcnZpY2VXb3JrZXJGZXRjaFRhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2VydmljZVdvcmtlckZldGNoVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0MTUxODUzNjIyMjcwNEY2MDA1NDMwQzYgLyogU2VydmljZVdvcmtlckZldGNoVGFz
ay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZXJ2aWNlV29ya2Vy
RmV0Y2hUYXNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE1MTg1MzgyMjI3
MEY1MzAwNTQzMEM2IC8qIFNlcnZpY2VXb3JrZXJGZXRjaFRhc2subWVzc2FnZXMuaW4gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gU2VydmljZVdvcmtlckZldGNoVGFzay5tZXNzYWdlcy5pbjsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE1MUU1QzMxRkJCOTBBOTAwRTQ3RTJEIC8qIEZv
cm1EYXRhUmVmZXJlbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvcm1E
YXRhUmVmZXJlbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNTc4NTMwMjEy
NzZCNkYwMEREMzgwMCAvKiBjb3B5LXdlYmNvbnRlbnQtcmVzb3VyY2VzLXRvLXByaXZhdGUtaGVh
ZGVycy5zaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQuc2NyaXB0LnNoOyBwYXRoID0gImNvcHktd2ViY29udGVudC1yZXNvdXJjZXMtdG8tcHJp
dmF0ZS1oZWFkZXJzLnNoIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDE1N0U0QUYy
MEUyRUM5ODAwQTZDMEQ3IC8qIGNvbS5nb29nbGUubzFkYnJvd3NlcnBsdWdpbi5zYiAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBjb20uZ29vZ2xlLm8xZGJyb3dzZXJwbHVnaW4uc2I7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNTg2NDlBMjNCRTA5MjQwMEEwQTYxRSAvKiBSVENFbmNv
ZGVySWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENFbmNv
ZGVySWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTYwMDhCMTI1
REE4NkI5MDBFODkyRkUgLyogUmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZVByb3h5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2VQcm94eS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0MTYwMDhCMjI1REE4OTVCMDBFODkyRkUgLyogUmVtb3RlUmVhbHRp
bWVNZWRpYVNvdXJjZVByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlYWx0aW1l
TWVkaWFTb3VyY2VQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00Nzg5
LDcgKzQ1MjgsNiBAQAogCQk3QTNBQ0UxQTFFRUVGNzhDMDBBODY0QTQgLyogQVBJSW5qZWN0ZWRC
dW5kbGVQYWdlTG9hZGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEFQSUluamVjdGVkQnVuZGxlUGFnZUxvYWRlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QTNGRUNBMTIxRjdDMDk3MDBGMjY3Q0QgLyogU3RvcmFnZUFjY2Vzc1N0YXR1
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTdG9yYWdlQWNjZXNzU3RhdHVz
Lmg7IHBhdGggPSBDbGFzc2lmaWVyL1N0b3JhZ2VBY2Nlc3NTdGF0dXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0E0MUU5RkEyMUY4MURBQzAwQjg4Q0RCIC8qIFNob3VsZEdyYW5k
ZmF0aGVyU3RhdGlzdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTaG91
bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaDsgcGF0aCA9IENsYXNzaWZpZXIvU2hvdWxkR3JhbmRm
YXRoZXJTdGF0aXN0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdBNUUzOTQ5
MUQ1QkQ4QTcwMEI0QjdDRSAvKiBjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIgRVNSLnBsdWdp
bi5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSAiY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVy
IEVTUi5wbHVnaW4uc2IiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTc4RkYyRTIy
NDE5MTc1MDA5NjQ4M0UgLyogV0tTdG9yYWdlQWNjZXNzQWxlcnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0tTdG9yYWdlQWNjZXNzQWxlcnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0E3OEZGMkYyMjQxOTE3NjAwOTY0ODNFIC8qIFdLU3RvcmFnZUFjY2Vz
c0FsZXJ0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tTdG9y
YWdlQWNjZXNzQWxlcnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBODIxRjQ5
MUUyRjY1REQwMDYwNDU3NyAvKiBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMZWdhY3lDdXN0b21Qcm90b2Nv
bE1hbmFnZXJQcm94eS5jcHA7IHBhdGggPSBDdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDg0
OSw3ICs0NTg3LDYgQEAKIAkJN0MwNjVGMkExQzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250
ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0MxMzVBQTYxNzNCMEJDQTAwNTg2QUUyIC8qIFdLUGx1Z2luSW5mb3JtYXRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tQbHVnaW5JbmZv
cm1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMTM1QUE3MTczQjBC
Q0EwMDU4NkFFMiAvKiBXS1BsdWdpbkluZm9ybWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdLUGx1Z2luSW5mb3JtYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJN0MxMzVBQUExNzNCMENGRjAwNTg2QUUyIC8qIFBsdWdpbkluZm9ybWF0aW9uTWFj
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGx1Z2luSW5mb3Jt
YXRpb25NYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMUJBMzNCMUE0QTBF
NjAwMDQzRTI0OSAvKiBBUElEaWN0aW9uYXJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEFQSURpY3Rpb25hcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QzFCQTMzQzFBNEEwRTYwMDA0M0UyNDkgLyogQVBJRGljdGlvbmFyeS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElEaWN0aW9uYXJ5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDMjQxMzAwMUFBQ0ZBNzUwMEE1OEMxNSAvKiBfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTQ4NjUsOCArNDYwMiw2IEBACiAJCTdDMzg3NDMzMTcyRjU2MTUwMDFCRDg4QSAv
KiBQYWdlQmFubmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBh
Z2VCYW5uZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzNBMDZBNTFBQUI5
MDNFMDA5RDc0QkEgLyogQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzNBMDZBNjFBQUI5MDNFMDA5RDc0QkEgLyogQVBJ
Q29udGVudFJ1bGVMaXN0U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
N0MzRjhDOEUxNzNBRjUyRDAwN0I3RjM5IC8qIFBsdWdpbkluZm9ybWF0aW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsdWdpbkluZm9ybWF0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0MzRjhDOEYxNzNBRjUyRDAwN0I3RjM5IC8qIFBs
dWdpbkluZm9ybWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdp
bkluZm9ybWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNDY5NEM3MUE0
QjRFQTAwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViUGFzdGVib2FyZFByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViUGFzdGVi
b2FyZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RT
X0RJUjsgfTsKIAkJN0M0Njk0QzgxQTRCNEVBMTAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94
eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlBhc3RlYm9h
cmRQcm94eU1lc3NhZ2VzLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYlBhc3Rl
Ym9hcmRQcm94eU1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07
CiAJCTdDNDY5NENCMUE0QjUxMEEwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlBhc3RlYm9hcmRQ
cm94eUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDkwOSwxMiArNDY0
NCw2IEBACiAJCTdDQjEwMEVFMUZBMkQ3NEEwMDE3MjlFRSAvKiBXZWJQcmVmZXJlbmNlc0tleXMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViUHJlZmVyZW5jZXNLZXlzLmNwcDsgcGF0aCA9IERl
cml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViUHJlZmVyZW5jZXNLZXlzLmNwcDsgc291cmNlVHJlZSA9
IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJN0NCMTAwRUYxRkEyRDc0QjAwMTcyOUVFIC8qIFdl
YlByZWZlcmVuY2VzS2V5cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJQcmVmZXJlbmNlc0tleXMuaDsg
cGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViUHJlZmVyZW5jZXNLZXlzLmg7IHNvdXJj
ZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTdDQjEwMEYwMUZBMkQ3ODQwMDE3MjlF
RSAvKiBXZWJQcmVmZXJlbmNlc1N0b3JlRGVmYXVsdHNNYXAuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gV2ViUHJlZmVyZW5jZXNTdG9yZURlZmF1bHRzTWFwLmNwcDsgcGF0aCA9IERlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvV2ViUHJlZmVyZW5jZXNTdG9yZURlZmF1bHRzTWFwLmNwcDsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJN0NCMTZGRTIxNzI0QjlCNTAwN0EwQTk1IC8q
IGNvbS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0LndlYnBsdWdpbi5zYiAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBjb20uYXBwbGUuaXN0LmRzLmFwcGxlY29ubmVjdC53ZWJwbHVnaW4uc2I7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDQjE2RkUzMTcyNEI5QjUwMDdBMEE5NSAvKiBj
b20uYXBwbGUuUXVpY2tUaW1lIFBsdWdpbi5wbHVnaW4uc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gImNvbS5hcHBsZS5RdWlja1RpbWUgUGx1Z2luLnBsdWdpbi5zYiI7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTdDQjE2RkU0MTcyNEI5QjUwMDdBMEE5NSAvKiBjb20uYXBwbGUuV2Vi
S2l0LnBsdWdpbi1jb21tb24uc2IuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gImNvbS5hcHBs
ZS5XZWJLaXQucGx1Z2luLWNvbW1vbi5zYi5pbiI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTdDQjE2RkU1MTcyNEI5QjUwMDdBMEE5NSAvKiBjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5
ZXIucGx1Z2luLnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9ICJjb20ubWFjcm9tZWRpYS5GbGFz
aCBQbGF5ZXIucGx1Z2luLnNiIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0NCMTZG
RTYxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5taWNyb3NvZnQuU2lsdmVybGlnaHRQbHVnaW4uc2Ig
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gY29tLm1pY3Jvc29mdC5TaWx2ZXJsaWdodFBsdWdpbi5z
Yjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0NCMTZGRTcxNzI0QjlCNTAwN0EwQTk1
IC8qIGNvbS5vcmFjbGUuamF2YS5KYXZhQXBwbGV0UGx1Z2luLnNiICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IGNvbS5vcmFjbGUuamF2YS5KYXZhQXBwbGV0UGx1Z2luLnNiOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3Q0IzNjVBODFEMzFEQjcwMDA3MTU4Q0EgLyogX1dLVXNlckluaXRp
YXRlZEFjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tVc2VySW5p
dGlhdGVkQWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQjM2NUE5MUQz
MURCNzAwMDcxNThDQSAvKiBfV0tVc2VySW5pdGlhdGVkQWN0aW9uLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVXNlckluaXRpYXRlZEFjdGlvbi5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NCMzY1QUMxRDMxREMxMDAwNzE1OENBIC8qIF9X
S1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBfV0tVc2VySW5pdGlhdGVkQWN0aW9uSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTQ5MzAsOCArNDY1OSw2IEBACiAJCTdDRDVFQkJBMTc0NkE4M0UwMDBD
MUM0NSAvKiBXS0Jhc2VNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tC
YXNlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRDVFQkJDMTc0NkIwNEMw
MDBDMUM0NSAvKiBXS1R5cGVSZWZXcmFwcGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV0tUeXBlUmVmV3JhcHBlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0NENUVCQkQxNzQ2QjA0QzAwMEMxQzQ1IC8qIFdLVHlwZVJlZldyYXBwZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tUeXBlUmVmV3JhcHBlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3Q0Q2MjI3NTE3MzlEODYzMDA1QkQ3RkYgLyogUGx1
Z2luU2FuZGJveFByb2ZpbGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBQbHVnaW5TYW5kYm94UHJvZmlsZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJN0NENjIyNzYxNzM5RDg2MzAwNUJEN0ZGIC8qIFBsdWdpblNhbmRib3hQcm9maWxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdpblNhbmRib3hQcm9maWxlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDREU3M0EwMUY5REEzN0IwMDM5MDMxMiAvKiBX
ZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdDREU3M0EyMUY5REE1OTcwMDM5MDMxMiAvKiBQcmVmZXJlbmNlc1RlbXBsYXRl
cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZvbGRl
cjsgcGF0aCA9IFByZWZlcmVuY2VzVGVtcGxhdGVzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3Q0RFNzNBMzFGOURBQjY1MDAzOTAzMTIgLyogV2ViUHJlZmVyZW5jZXNEZWZpbml0aW9u
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmg7IHBhdGggPSBE
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaDsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTUyNTMsNyArNDk4MCw2IEBACiAJCTlC
RjVFQzYzMjU0MTBFOTkwMDk4NEU3NyAvKiBKU0lQQ0JpbmRpbmcuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNJUENCaW5kaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUVD
NTMyQTIyNDQ3RkJBRDAwMjE1MjE2IC8qIEdlb2xvY2F0aW9uSWRlbnRpZmllci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBHZW9sb2NhdGlvbklkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOUY1NEY4OEUxNjQ4OEU4NzAwN0RGODFBIC8qIEF1eGlsaWFyeVByb2Nlc3NNYWMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBdXhpbGlhcnlQcm9jZXNz
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5RjU0Rjg5NDE2NDhBRTBFMDA3
REY4MUEgLyogUGx1Z2luUHJvY2Vzc01hbmFnZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBQbHVnaW5Qcm9jZXNzTWFuYWdlck1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUZCNUYzOTIxNjlFNkE4MDAwMkMyNUJGIC8qIFdLQ29udGV4
dFByaXZhdGVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBX
S0NvbnRleHRQcml2YXRlTWFjLm1tOyBwYXRoID0gbWFjL1dLQ29udGV4dFByaXZhdGVNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlGQjVGMzkzMTY5RTZBODAwMDJDMjVCRiAv
KiBXS0NvbnRleHRQcml2YXRlTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFdLQ29udGV4dFByaXZhdGVNYWMuaDsgcGF0aCA9IG1hYy9XS0NvbnRleHRQcml2YXRlTWFjLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMDQ2RTlGMjA3OTI2MzEwMEYwQzVEOCAv
KiBXS1BERlZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tQREZWaWV3Lmg7IHBhdGggPSBpb3MvV0tQ
REZWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NjAwLDkgKzUzMjYsNyBA
QAogCQlCQzgyODNBODE2QjRCRDkxMDBBMjc4RkUgLyogTmV0d29ya1NlcnZpY2VFbnRyeVBvaW50
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmV0d29ya1NlcnZpY2VFbnRyeVBvaW50Lm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzgyODNBQjE2QjRCRUFEMDBBMjc4RkUgLyog
TmV0d29ya1NlcnZpY2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gTmV0d29ya1NlcnZpY2UueGNj
b25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDODI4M0IxMTZCNEJGNzcwMEEy
NzhGRSAvKiBjb20uYXBwbGUuV2ViS2l0Lk5ldHdvcmtpbmcueHBjICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAid3JhcHBlci54cGMtc2VydmljZSI7IGlu
Y2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGNvbS5hcHBsZS5XZWJLaXQuTmV0d29ya2luZy54cGM7
IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCUJDODI4M0VGMTZCNEY4RTIw
MEEyNzhGRSAvKiBQbHVnaW5TZXJ2aWNlRW50cnlQb2ludC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFBsdWdpblNlcnZpY2VFbnRyeVBvaW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQzgyODNGNDE2QjRGQzUzMDBBMjc4RkUgLyogUGx1Z2luU2VydmljZS54Y2NvbmZpZyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNj
b25maWc7IHBhdGggPSBQbHVnaW5TZXJ2aWNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlCQzgyODQxRjE2QjRGREY2MDBBMjc4RkUgLyogY29tLmFwcGxlLldlYktpdC5Q
bHVnaW4uNjQueHBjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSAid3JhcHBlci54cGMtc2VydmljZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGNv
bS5hcHBsZS5XZWJLaXQuUGx1Z2luLjY0LnhwYzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RT
X0RJUjsgfTsKIAkJQkM4NDUyQTUxMTYyQzgwOTAwQ0FCOUI1IC8qIERyYXdpbmdBcmVhLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERyYXdpbmdBcmVhLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4NDUyQTYxMTYyQzgwOTAwQ0FCOUI1IC8qIERy
YXdpbmdBcmVhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERyYXdpbmdBcmVh
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDODU3RTg1MTJCNzFFQkIwMEVERUIy
RSAvKiBXZWJQYWdlUHJveHlNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXZWJQYWdlUHJveHlNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC01NzQxLDcgKzU0NjUsNiBAQAogCQlCQ0Y2OUZBMTExNzZEMDE0MDA0NzFBNTIgLyogQVBJTmF2
aWdhdGlvbkRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQVBJ
TmF2aWdhdGlvbkRhdGEuY3BwOyBwYXRoID0gVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uRGF0
YS5jcHA7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJQkNGNjlGQTcxMTc2RDFDQjAw
NDcxQTUyIC8qIFdLTmF2aWdhdGlvbkRhdGFSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0tOYXZpZ2F0aW9uRGF0YVJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQ0Y2OUZBODExNzZEMUNCMDA0NzFBNTIgLyogV0tOYXZpZ2F0aW9uRGF0YVJlZi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS05hdmlnYXRpb25EYXRhUmVm
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkNGQ0E4OTUxNkRFOTZDQjAwMDc0
MDY5IC8qIFBsdWdpblNlcnZpY2UuSW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1sOyBwYXRoID0gUGx1Z2luU2Vy
dmljZS5JbmZvLnBsaXN0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0ZENTQ4OTEz
MkQ4MjY4MDA1NUQ4MTYgLyogV0tFcnJvckNGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdLRXJyb3JDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDRkQ1NDhBMTMyRDgyNjgwMDU1RDgxNiAvKiBXS0Vycm9yQ0YuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0tFcnJvckNGLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJGQTYxNzlFMTJGMEI5OUQwMDMzRTBDQSAvKiBXS1ZpZXdQcml2YXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLVmlld1ByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTYwODgsNyArNTgxMSw2IEBACiAJCUUxOEU2OTQ3MTY5Qjc3QzgwMDlC
NjY3MCAvKiBTZWNJdGVtU2hpbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTZWNJdGVtU2hpbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxOEU2
OTQ4MTY5Qjc3QzgwMDlCNjY3MCAvKiBTZWNJdGVtU2hpbS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTZWNJdGVtU2hpbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMTk2N0UzNzE1MEFCNUUyMDBDNzMxNjkgLyogY29tLmFwcGxlLldlYlByb2Nlc3Muc2IgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBuYW1lID0gY29tLmFwcGxlLldlYlByb2Nlc3Muc2I7IHBhdGggPSBEZXJp
dmVkU291cmNlcy9XZWJLaXQyL2NvbS5hcHBsZS5XZWJQcm9jZXNzLnNiOyBzb3VyY2VUcmVlID0g
QlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQlFMTlCREE4NDE5MzY1RjRCMDBCOTdGNTcgLyogY29t
LmFwcGxlLmFwcHN0b3JlLkNvZGVSZWRlZW1lck5ldHNjYXBlUGx1Z2luLnNiICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IGNvbS5hcHBsZS5hcHBzdG9yZS5Db2RlUmVkZWVtZXJOZXRzY2FwZVBsdWdp
bi5zYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE5QkRBODgxOTM2ODZBNDAwQjk3
RjU3IC8qIFNhbmRib3hVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2FuZGJveFV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUFF
QTIyRDE0Njg3QkRCMDA4MDQ1NjkgLyogV0tGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLRnVsbEtleWJvYXJkQWNjZXNzV2F0Y2hl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUFFQTIyRTE0Njg3QkRCMDA4MDQ1
NjkgLyogV0tGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV0tGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI1OCwxMyArNTk4MCw2IEBACiAvKiBFbmQgUEJY
RmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBo
YXNlIHNlY3Rpb24gKi8KLQkJMUFDMjVGQUUxMkE0OEVBNzAwQkQyNjcxIC8qIEZyYW1ld29ya3Mg
Ki8gPSB7Ci0JCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9u
TWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKIAkJMkQ5RkIyMUUyMzc1MjM4MzAwNDlG
OTM2IC8qIEZyYW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFz
ZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC02MzM1LDE1ICs2MDUwLDYg
QEAKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKLQkJQkM4Mjg0MUMxNkI0RkRGNjAwQTI3OEZFIC8qIEZyYW1ld29ya3MgKi8gPSB7Ci0JCQlp
c2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCQkzNzFFNjk1OTFBRUQ3QTBGMDA0OTVFNDggLyogRm91
bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKLQkJCQlCQzgyODQ0RjE2QjUwODk4
MDBBMjc4RkUgLyogV2ViS2l0LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAotCQkJKTsKLQkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwogCQlCQ0RDMzA4
RDE1RkRCOTlBMDA2QjY2OTUgLyogRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEZyYW1l
d29ya3NCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTYz
NzAsMTMgKzYwNzYsMTEgQEAKIAkJCQk1QzE1NzlEQTI3MTY1QjJGMDBFRDUyODAgLyogd2VicHVz
aGQgKi8sCiAJCQkJMkQ5RkIyMjgyMzc1MjM4MzAwNDlGOTM2IC8qIGNvbS5hcHBsZS5XZWJLaXQu
R1BVLnhwYyAqLywKIAkJCQlCQzgyODNCMTE2QjRCRjc3MDBBMjc4RkUgLyogY29tLmFwcGxlLldl
YktpdC5OZXR3b3JraW5nLnhwYyAqLywKLQkJCQlCQzgyODQxRjE2QjRGREY2MDBBMjc4RkUgLyog
Y29tLmFwcGxlLldlYktpdC5QbHVnaW4uNjQueHBjICovLAogCQkJCTU3NDJBMkY3MjUzNTYxM0Yw
MEI3QkExNCAvKiBjb20uYXBwbGUuV2ViS2l0LldlYkF1dGhuLnhwYyAqLywKIAkJCQkzNzJFQkI0
NjIwMTdFNjQzMDAwODUwNjQgLyogY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50LkRldmVsb3Bt
ZW50LnhwYyAqLywKIAkJCQlCQzNERTQ2NjE1QTkxNzYzMDA4RDI2RkMgLyogY29tLmFwcGxlLldl
YktpdC5XZWJDb250ZW50LnhwYyAqLywKIAkJCQlDRDk1NDkzNTI2MTU5MDA0MDA4MzcyRDkgLyog
bGliV2ViS2l0U3dpZnQuZHlsaWIgKi8sCiAJCQkJQTE2RTY2MDAyNTgxOTMwODAwRUUxNzQ5IC8q
IE1lZGlhRm9ybWF0UmVhZGVyLmJ1bmRsZSAqLywKLQkJCQkxQUMyNUZCMDEyQTQ4RUE3MDBCRDI2
NzEgLyogUGx1Z2luUHJvY2Vzc1NoaW0uZHlsaWIgKi8sCiAJCQkJOERDMkVGNUIwNDg2QTY5NDAw
OThCMjE2IC8qIFdlYktpdC5mcmFtZXdvcmsgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1Y3Rz
OwpAQCAtNjU4Myw3ICs2Mjg3LDYgQEAKIAkJCQlCQzAzMkRDMzEwRjQzODI2MDA1OEMxNUEgLyog
VUlQcm9jZXNzICovLAogCQkJCUJDMDMyRDVDMTBGNDM2RDUwMDU4QzE1QSAvKiBXZWJQcm9jZXNz
ICovLAogCQkJCTUxMENDN0RBMTYxMzhFMDEwMEQwM0VEMyAvKiBOZXR3b3JrUHJvY2VzcyAqLywK
LQkJCQkxQTBFQzZCMDEyNEJCRDM2MDA3RUY0QTUgLyogUGx1Z2luUHJvY2VzcyAqLywKIAkJCQky
RDlGQjFGRjIzNzUyMDlEMDA0OUY5MzYgLyogR1BVUHJvY2VzcyAqLywKIAkJCQk1NzQyQTJGRjI1
MzU3NTgwMDBCN0JBMTQgLyogV2ViQXV0aG5Qcm9jZXNzICovLAogCQkJCUMwQ0U3MjlEMTI0N0U3
MUQwMEJDMEVDNCAvKiBEZXJpdmVkIFNvdXJjZXMgKi8sCkBAIC02NjEzLDcgKzYzMTYsNiBAQAog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkzNzI4ODc5ODIwMDBBQTM3
MDBGNEVGNUQgLyogaW9zICovLAotCQkJCTdDQjE2RkUxMTcyNEI5QjUwMDdBMEE5NSAvKiBQbHVn
SW5TYW5kYm94UHJvZmlsZXMgKi8sCiAJCQkJNkJFOTY5QkYxRTU0RDQ1MjAwOEI3NDgzIC8qIFJl
c291cmNlTG9hZFN0YXRpc3RpY3MgKi8sCiAJCQkJQTc4Q0NERDUxOTNBQzlFMzAwNUVDQzI1IC8q
IFNhbmRib3hQcm9maWxlcyAqLywKIAkJCQk2RDhBOTFBNTExRjBFRkQxMDBERDAxRkUgLyogY29t
LmFwcGxlLldlYlByb2Nlc3Muc2IuaW4gKi8sCkBAIC02NzAwLDQwICs2NDAyLDYgQEAKIAkJCXBh
dGggPSBYUjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCTFBMEVDNkIwMTI0
QkJEMzYwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7
Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlCQzgyODM4NjE2QjQ1RUYyMDBBMjc4RkUgLyogRW50cnlQ
b2ludCAqLywKLQkJCQkxQTBFQzdGRDEyNEJENDAyMDA3RUY0QTUgLyogbWFjICovLAotCQkJCTFB
OEVGNENBMTI1MjQwMzcwMEY3MDY3RiAvKiBQbHVnaW5Db250cm9sbGVyUHJveHkuY3BwICovLAot
CQkJCTFBOEVGNEM5MTI1MjQwMzcwMEY3MDY3RiAvKiBQbHVnaW5Db250cm9sbGVyUHJveHkuaCAq
LywKLQkJCQkxQThFRjk0MTEyNTJBRTg0MDBGNzA2N0YgLyogUGx1Z2luQ29udHJvbGxlclByb3h5
Lm1lc3NhZ2VzLmluICovLAotCQkJCTFBMTc5NzdEMTM3RUU4MkMwMEY5N0Q0NSAvKiBQbHVnaW5D
cmVhdGlvblBhcmFtZXRlcnMuY3BwICovLAotCQkJCTFBMTc5NzdFMTM3RUU4MkMwMEY5N0Q0NSAv
KiBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMuaCAqLywKLQkJCQkxQTA0Mzk3NTEyNEQwMzQ4MDBG
RkJGQjUgLyogUGx1Z2luUHJvY2Vzcy5jcHAgKi8sCi0JCQkJMUEwNDM5NzQxMjREMDM0ODAwRkZC
RkI1IC8qIFBsdWdpblByb2Nlc3MuaCAqLywKLQkJCQkxQTBFQzZCMTEyNEJCRDM2MDA3RUY0QTUg
LyogUGx1Z2luUHJvY2Vzcy5tZXNzYWdlcy5pbiAqLywKLQkJCQkxQTA0M0EwODEyNEQxMUE5MDBG
RkJGQjUgLyogV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwICovLAotCQkJCTFBMDQzQTA3MTI0RDEx
QTkwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbi5oICovLAotCQkJCTFBMDQzRjU5MTI1
MTRDRjMwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiAqLywKLQkJ
CSk7Ci0JCQlwYXRoID0gUGx1Z2luUHJvY2VzczsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
Ci0JCQl0YWJXaWR0aCA9IDg7Ci0JCQl1c2VzVGFicyA9IDA7Ci0JCX07Ci0JCTFBMEVDN0ZEMTI0
QkQ0MDIwMDdFRjRBNSAvKiBtYWMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxk
cmVuID0gKAotCQkJCTdDQjE2RkU0MTcyNEI5QjUwMDdBMEE5NSAvKiBjb20uYXBwbGUuV2ViS2l0
LnBsdWdpbi1jb21tb24uc2IuaW4gKi8sCi0JCQkJMUEyRDkxQTUxMjgxRDczOTAwMUVCOTYyIC8q
IFBsdWdpbkNvbnRyb2xsZXJQcm94eU1hYy5tbSAqLywKLQkJCQkxQUE0NzkyMjEyQTU5RkQ5MDA4
MjM2QzMgLyogUGx1Z2luUHJvY2Vzc01hYy5tbSAqLywKLQkJCQkxQUMyNUY4OTEyQTQ4RTAzMDBC
RDI2NzEgLyogUGx1Z2luUHJvY2Vzc1NoaW0uaCAqLywKLQkJCQkxQUMyNUY4QTEyQTQ4RTAzMDBC
RDI2NzEgLyogUGx1Z2luUHJvY2Vzc1NoaW0ubW0gKi8sCi0JCQkpOwotCQkJcGF0aCA9IG1hYzsK
LQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07CiAJCTFBNDNFODI2MTg4RjM4RTIwMDlF
NEQzMCAvKiBEZXByZWNhdGVkICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKQEAgLTY3ODAsMjcgKzY0NDgsNiBAQAogCQkJcGF0aCA9IENvY29hOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJMUE0QTlDNTIxMkI4MTZDRjAwOEZFOTg0IC8qIE5l
dHNjYXBlICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkx
QTRBOUM5ODEyQjgyMUMwMDA4RkU5ODQgLyogbWFjICovLAotCQkJCTFBNEE5QzUzMTJCODE2Q0Yw
MDhGRTk4NCAvKiBOZXRzY2FwZVBsdWdpbk1vZHVsZS5jcHAgKi8sCi0JCQkJMUE0QTlDNTQxMkI4
MTZDRjAwOEZFOTg0IC8qIE5ldHNjYXBlUGx1Z2luTW9kdWxlLmggKi8sCi0JCQkJN0MzRjhDOEUx
NzNBRjUyRDAwN0I3RjM5IC8qIFBsdWdpbkluZm9ybWF0aW9uLmNwcCAqLywKLQkJCQk3QzNGOEM4
RjE3M0FGNTJEMDA3QjdGMzkgLyogUGx1Z2luSW5mb3JtYXRpb24uaCAqLywKLQkJCSk7Ci0JCQlw
YXRoID0gTmV0c2NhcGU7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQkxQTRB
OUM5ODEyQjgyMUMwMDA4RkU5ODQgLyogbWFjICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0J
CQljaGlsZHJlbiA9ICgKLQkJCQkxQTRBOUM5OTEyQjgyMUNEMDA4RkU5ODQgLyogTmV0c2NhcGVQ
bHVnaW5Nb2R1bGVNYWMubW0gKi8sCi0JCQkJN0MxMzVBQUExNzNCMENGRjAwNTg2QUUyIC8qIFBs
dWdpbkluZm9ybWF0aW9uTWFjLm1tICovLAotCQkJKTsKLQkJCXBhdGggPSBtYWM7Ci0JCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQkxQTRGOTc2OTEwMEU3QjY2MDA2MzdBMTggLyog
Q29uZmlndXJhdGlvbnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KApAQCAtNjg1MywyMSArNjUwMCwxMSBAQAogCQkxQTZGQjdBQTExRTY0QjQ5MDBEQjEzNzEgLyog
UGx1Z2lucyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
MUE2RkI5MDgxMUU2NkZCMTAwREIxMzcxIC8qIE5ldHNjYXBlICovLAogCQkJCUUxOTk4NzVCMTQy
QkY5Q0YwMEJCMkRFNyAvKiBQREYgKi8sCiAJCQkJREY3NDI3NUMyNEY0OTU1MDAwRjhBQkU5IC8q
IFBERlBsdWdpbklkZW50aWZpZXIuaCAqLywKIAkJCQkxQTZGQjdEMDExRTY1MUUyMDBEQjEzNzEg
LyogUGx1Z2luLmNwcCAqLywKIAkJCQkxQTZGQjdEMTExRTY1MUUyMDBEQjEzNzEgLyogUGx1Z2lu
LmggKi8sCiAJCQkJMUFBNTZGMjgxMUU5MkJDODAwNjFCODgyIC8qIFBsdWdpbkNvbnRyb2xsZXIu
aCAqLywKLQkJCQkxQTBFQzkwNTEyNEMwQUI4MDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb24uY3BwICovLAotCQkJCTFBMEVDOTA0MTI0QzBBQjgwMDdFRjRBNSAvKiBQbHVnaW5Qcm9j
ZXNzQ29ubmVjdGlvbi5oICovLAotCQkJCTFBMkJCNkNDMTQxMTdBNUYwMDBGMzVENCAvKiBQbHVn
aW5Qcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiAqLywKLQkJCQkxQTBFQzkwRTEyNEMwQUY1
MDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLmNwcCAqLywKLQkJCQkx
QTBFQzkwRDEyNEMwQUY1MDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2Vy
LmggKi8sCi0JCQkJMUE3ODY1QjYxNkNBQzZGRDAwQUNFODNBIC8qIFBsdWdpblByb2Nlc3NDb25u
ZWN0aW9uTWFuYWdlci5tZXNzYWdlcy5pbiAqLywKLQkJCQkxQTA0M0RDMDEyNEZGODc1MDBGRkJG
QjUgLyogUGx1Z2luUHJveHkuY3BwICovLAotCQkJCTFBMDQzREJGMTI0RkY4NzUwMEZGQkZCNSAv
KiBQbHVnaW5Qcm94eS5oICovLAotCQkJCTFBOEVGQTVCMTI1MkI3Q0UwMEY3MDY3RiAvKiBQbHVn
aW5Qcm94eS5tZXNzYWdlcy5pbiAqLywKIAkJCQkxQTZGQjdBQzExRTY0QjY4MDBEQjEzNzEgLyog
UGx1Z2luVmlldy5jcHAgKi8sCiAJCQkJMUE2RkI3QUQxMUU2NEI2ODAwREIxMzcxIC8qIFBsdWdp
blZpZXcuaCAqLywKIAkJCQkxQTA4RkVFMjFENTkzQ0YxMDA4QkE4Q0IgLyogV2ViUGx1Z2luSW5m
b1Byb3ZpZGVyLmNwcCAqLywKQEAgLTY4NzYsMzkgKzY1MTMsNiBAQAogCQkJcGF0aCA9IFBsdWdp
bnM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQkxQTZGQjkwODExRTY2RkIx
MDBEQjEzNzEgLyogTmV0c2NhcGUgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxk
cmVuID0gKAotCQkJCTFBNkZCQTAxMTFFNjgxMkIwMERCMTM3MSAvKiBtYWMgKi8sCi0JCQkJMUFF
NDlBNDgxMUZGQThDRTAwNDhCNDY0IC8qIEpTTlBNZXRob2QuY3BwICovLAotCQkJCTFBRTQ5QTQ3
MTFGRkE4Q0UwMDQ4QjQ2NCAvKiBKU05QTWV0aG9kLmggKi8sCi0JCQkJMUFFNDk4NzcxMUZGN0ZB
QTAwNDhCNDY0IC8qIEpTTlBPYmplY3QuY3BwICovLAotCQkJCTFBRTQ5ODc2MTFGRjdGQUEwMDQ4
QjQ2NCAvKiBKU05QT2JqZWN0LmggKi8sCi0JCQkJMUE2RkJBMjkxMUU2ODYyNzAwREIxMzcxIC8q
IE5ldHNjYXBlQnJvd3NlckZ1bmNzLmNwcCAqLywKLQkJCQkxQTZGQkEyODExRTY4NjI3MDBEQjEz
NzEgLyogTmV0c2NhcGVCcm93c2VyRnVuY3MuaCAqLywKLQkJCQkxQTZGQkQyNzExRTY5QkMyMDBE
QjEzNzEgLyogTmV0c2NhcGVQbHVnaW4uY3BwICovLAotCQkJCTFBNkZCRDI2MTFFNjlCQzIwMERC
MTM3MSAvKiBOZXRzY2FwZVBsdWdpbi5oICovLAotCQkJCTFBQTU4ODkxMTFFRTcwNDAwMDYxQjg4
MiAvKiBOZXRzY2FwZVBsdWdpblN0cmVhbS5jcHAgKi8sCi0JCQkJMUFBNTg4OTAxMUVFNzA0MDAw
NjFCODgyIC8qIE5ldHNjYXBlUGx1Z2luU3RyZWFtLmggKi8sCi0JCQkJMUFFNDk3NjcxMUZGNjU4
RTAwNDhCNDY0IC8qIE5QSlNPYmplY3QuY3BwICovLAotCQkJCTFBRTQ5NzY2MTFGRjY1OEUwMDQ4
QjQ2NCAvKiBOUEpTT2JqZWN0LmggKi8sCi0JCQkJMUEyMTYxQUYxMUYzNzY2NDAwOEFEMEY1IC8q
IE5QUnVudGltZU9iamVjdE1hcC5jcHAgKi8sCi0JCQkJMUEyMTYxQUUxMUYzNzY2NDAwOEFEMEY1
IC8qIE5QUnVudGltZU9iamVjdE1hcC5oICovLAotCQkJCTFBMjE2MkFFMTFGMzg5NzEwMDhBRDBG
NSAvKiBOUFJ1bnRpbWVVdGlsaXRpZXMuY3BwICovLAotCQkJCTFBMjE2MkFGMTFGMzg5NzEwMDhB
RDBGNSAvKiBOUFJ1bnRpbWVVdGlsaXRpZXMuaCAqLywKLQkJCSk7Ci0JCQlwYXRoID0gTmV0c2Nh
cGU7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQkxQTZGQkEwMTExRTY4MTJC
MDBEQjEzNzEgLyogbWFjICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9
ICgKLQkJCQkxQUU1QjdGOTExRTdBRUQyMDBCQTY3NjcgLyogTmV0c2NhcGVQbHVnaW5NYWMubW0g
Ki8sCi0JCQkJMUEyRDkyMjAxMjgxREMxQjAwMUVCOTYyIC8qIFBsdWdpblByb3h5TWFjLm1tICov
LAotCQkJKTsKLQkJCXBhdGggPSBtYWM7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9
OwogCQkxQTdFODE0RTExNTJEMjI0MDAwMzY5NUIgLyogbWFjICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTY5MjIsMTYgKzY1MjYsNiBAQAogCQkJcGF0aCA9
IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCTFBOUZCQThCMTNGRjA0
RTYwMERFRUQ2NyAvKiBtYWMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVu
ID0gKAotCQkJCTFBOUZCQThDMTNGRjA0RTYwMERFRUQ2NyAvKiBQbHVnaW5Db21wbGV4VGV4dElu
cHV0U3RhdGUuaCAqLywKLQkJCQk3Q0Q2MjI3NjE3MzlEODYzMDA1QkQ3RkYgLyogUGx1Z2luU2Fu
ZGJveFByb2ZpbGUuaCAqLywKLQkJCQk3Q0Q2MjI3NTE3MzlEODYzMDA1QkQ3RkYgLyogUGx1Z2lu
U2FuZGJveFByb2ZpbGUubW0gKi8sCi0JCQkpOwotCQkJcGF0aCA9IG1hYzsKLQkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7Ci0JCX07CiAJCTFBQUM0RERFMTZCMUNCRjYwMDk0MjVFMyAvKiBXZWJT
dG9yYWdlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTY5
NjcsNyArNjU2MSw2IEBACiAJCQkJMkRBOTQ0OTYxODg0RTREQTAwRUQ4NkRCIC8qIGlvcyAqLywK
IAkJCQlCQzExMUI1QTExMkY2MjgyMDAzMzdCQUIgLyogbWFjICovLAogCQkJCTUxQUYxQjNEMjcx
RjQ2QTYwMDE1MzhFNiAvKiBOb3RpZmljYXRpb25zICovLAotCQkJCTFBQUUwNThDMTI3OURDRDQw
MDg1MjQxOCAvKiBQbHVnaW5zICovLAogCQkJCTJEMkUwNDc2MUY1QkVDNEYwMEJCMjVFRCAvKiBS
ZW1vdGVMYXllclRyZWUgKi8sCiAJCQkJRTM2MTJGRjAyNkY5MDg2MjAwN0IxMTc1IC8qIFNhbmRi
b3ggKi8sCiAJCQkJMUFCRjQzNzgxQTM2ODAzNTAwM0ZCMEU2IC8qIFdlYnNpdGVEYXRhICovLApA
QCAtNzE3NywzMSArNjc3MCw2IEBACiAJCQl0YWJXaWR0aCA9IDg7CiAJCQl1c2VzVGFicyA9IDA7
CiAJCX07Ci0JCTFBQUUwNThDMTI3OURDRDQwMDg1MjQxOCAvKiBQbHVnaW5zICovID0gewotCQkJ
aXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkxQTlGQkE4QjEzRkYwNEU2MDBE
RUVENjcgLyogbWFjICovLAotCQkJCTFBNEE5QzUyMTJCODE2Q0YwMDhGRTk4NCAvKiBOZXRzY2Fw
ZSAqLywKLQkJCQkxQTJEODQ4QTEyN0Y2QTQ5MDAxRUI5NjIgLyogTlBJZGVudGlmaWVyRGF0YS5j
cHAgKi8sCi0JCQkJMUEyRDg0ODkxMjdGNkE0OTAwMUVCOTYyIC8qIE5QSWRlbnRpZmllckRhdGEu
aCAqLywKLQkJCQkxQTFGQTM1QzEyN0E0NUJGMDA1MEU3MDkgLyogTlBPYmplY3RNZXNzYWdlUmVj
ZWl2ZXIuY3BwICovLAotCQkJCTFBMUZBMzVCMTI3QTQ1QkYwMDUwRTcwOSAvKiBOUE9iamVjdE1l
c3NhZ2VSZWNlaXZlci5oICovLAotCQkJCTFBMkQ4NDExMTI3RjY0RTgwMDFFQjk2MiAvKiBOUE9i
amVjdE1lc3NhZ2VSZWNlaXZlci5tZXNzYWdlcy5pbiAqLywKLQkJCQkxQTFGQTI4NDEyN0ExM0JD
MDA1MEU3MDkgLyogTlBPYmplY3RQcm94eS5jcHAgKi8sCi0JCQkJMUExRkEyODMxMjdBMTNCQzAw
NTBFNzA5IC8qIE5QT2JqZWN0UHJveHkuaCAqLywKLQkJCQkxQTFGQTI1MjEyN0EwRTRGMDA1MEU3
MDkgLyogTlBSZW1vdGVPYmplY3RNYXAuY3BwICovLAotCQkJCTFBMUZBMjUxMTI3QTBFNEYwMDUw
RTcwOSAvKiBOUFJlbW90ZU9iamVjdE1hcC5oICovLAotCQkJCTFBMkQ4NEEyMTI3RjZBRDEwMDFF
Qjk2MiAvKiBOUFZhcmlhbnREYXRhLmNwcCAqLywKLQkJCQkxQTJEODRBMTEyN0Y2QUQxMDAxRUI5
NjIgLyogTlBWYXJpYW50RGF0YS5oICovLAotCQkJCTFBM0Q2MTAwMTNBN0NDMkEwMEY5NUQ0RSAv
KiBQbHVnaW5Nb2R1bGVJbmZvLmggKi8sCi0JCQkJMUFDNUZGQzExNzRCRkQxQjAwMDE0ODNEIC8q
IFBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLmggKi8sCi0JCQkJMUEyRDkwRDExMjgxQzk2NjAwMUVC
OTYyIC8qIFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwICovLAotCQkJCTFBMkQ5
MEQwMTI4MUM5NjYwMDFFQjk2MiAvKiBQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgg
Ki8sCi0JCQkJMUE0QTlGMzExMkI4NDRFMjAwOEZFOTg0IC8qIFBsdWdpblF1aXJrcy5oICovLAot
CQkJKTsKLQkJCXBhdGggPSBQbHVnaW5zOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJ
fTsKIAkJMUFBRjA4OUUxOTI2ODFBQzAwQjYzOTBDIC8qIFVzZXJDb250ZW50ICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTc0NzAsMzEgKzcwMzgsNiBAQAog
CQkJcGF0aCA9IElQQzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCTFBRUZD
QzA1MTFEMDFGMzQwMDgyMTlEMyAvKiBQbHVnaW5zICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7
Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkxQUVGQ0MwRDExRDAxRjQxMDA4MjE5RDMgLyogbWFjICov
LAotCQkJCTFBRUZDQzExMTFEMDFGOTYwMDgyMTlEMyAvKiBQbHVnaW5JbmZvU3RvcmUuY3BwICov
LAotCQkJCTFBRUZDQzEwMTFEMDFGOTYwMDgyMTlEMyAvKiBQbHVnaW5JbmZvU3RvcmUuaCAqLywK
LQkJCQkxQTBFQzYwMjEyNEE5RjJDMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc01hbmFnZXIuY3Bw
ICovLAotCQkJCTFBMEVDNjAxMTI0QTlGMkMwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzTWFuYWdl
ci5oICovLAotCQkJCTFBMEVDNzVEMTI0QkM3QjIwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzUHJv
eHkuY3BwICovLAotCQkJCTFBMEVDNzVDMTI0QkM3QjIwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNz
UHJveHkuaCAqLywKLQkJCQkxQTA0M0I0QzEyNEQ1RTM2MDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vz
c1Byb3h5Lm1lc3NhZ2VzLmluICovLAotCQkJKTsKLQkJCXBhdGggPSBQbHVnaW5zOwotCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJMUFFRkNDMEQxMUQwMUY0MTAwODIxOUQzIC8q
IG1hYyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMUFF
RkNDQkMxMUQwMkM1RTAwODIxOUQzIC8qIFBsdWdpbkluZm9TdG9yZU1hYy5tbSAqLywKLQkJCQk5
RjU0Rjg5NDE2NDhBRTBFMDA3REY4MUEgLyogUGx1Z2luUHJvY2Vzc01hbmFnZXJNYWMubW0gKi8s
Ci0JCQkJMUEyRDkwQkExMjgxQzkzMTAwMUVCOTYyIC8qIFBsdWdpblByb2Nlc3NQcm94eU1hYy5t
bSAqLywKLQkJCSk7Ci0JCQlwYXRoID0gbWFjOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
LQkJfTsKIAkJMUMwQTE5NDMxQzhGRjFBODAwRkUwRUJCIC8qIEF1dG9tYXRpb24gKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtOTU5OSw5ICs5MTQyLDkgQEAK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNUNCQjZENEQyNzFGNjdD
QzAwRkQxQTVEIC8qIGNvbS5hcHBsZS53ZWJraXQud2VicHVzaGQucGxpc3QgKi8sCi0JCQkJNUMx
NTdBMEIyNzE3Q0ExQzAwRUQ1MjgwIC8qIFdlYlB1c2hEYWVtb25NYWluLm1tICovLAogCQkJCTUx
MkNENjlEMjcyMzM5M0EwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uLmggKi8sCiAJCQkJNTEyQ0Q2
OUUyNzIzMzkzQTAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb24ubW0gKi8sCisJCQkJNUMxNTdBMEIy
NzE3Q0ExQzAwRUQ1MjgwIC8qIFdlYlB1c2hEYWVtb25NYWluLm1tICovLAogCQkJKTsKIAkJCXBh
dGggPSB3ZWJwdXNoZDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC05NzcwLDMxICs5
MzEzLDYgQEAKIAkJCXBhdGggPSBjb2NvYTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJ
CX07Ci0JCTdDQjE2RkUxMTcyNEI5QjUwMDdBMEE5NSAvKiBQbHVnSW5TYW5kYm94UHJvZmlsZXMg
Ki8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTQxNDM3NTFC
MjBFQUVBMUUwMEZBRDA2QyAvKiBjbi5taWNyb2RvbmUuY21iLnNhZmFyaS5zYiAqLywKLQkJCQlF
MTlCREE4NDE5MzY1RjRCMDBCOTdGNTcgLyogY29tLmFwcGxlLmFwcHN0b3JlLkNvZGVSZWRlZW1l
ck5ldHNjYXBlUGx1Z2luLnNiICovLAotCQkJCTQxMTJFREQ5MjBFNDA3NzUwMEJFQTkyQSAvKiBj
b20uYXBwbGUuQm9jb21TdWJtaXRDdHJsLnNiICovLAotCQkJCTdDQjE2RkUyMTcyNEI5QjUwMDdB
MEE5NSAvKiBjb20uYXBwbGUuaXN0LmRzLmFwcGxlY29ubmVjdC53ZWJwbHVnaW4uc2IgKi8sCi0J
CQkJNDExMkVERDgyMEU0MDc3NTAwQkVBOTJBIC8qIGNvbS5hcHBsZS5OUFNhZmVJbnB1dC5zYiAq
LywKLQkJCQk0MTEyRURENzIwRTQwNzc1MDBCRUE5MkEgLyogY29tLmFwcGxlLk5QU2FmZVN1Ym1p
dC5zYiAqLywKLQkJCQk3Q0IxNkZFMzE3MjRCOUI1MDA3QTBBOTUgLyogY29tLmFwcGxlLlF1aWNr
VGltZSBQbHVnaW4ucGx1Z2luLnNiICovLAotCQkJCTQxMTJFREQzMjBFNDA3NzQwMEJFQTkyQSAv
KiBjb20uY2ZjYS5ucFNlY0VkaXRDdGwuTUFDLkJPQy5wbHVnaW4uc2IgKi8sCi0JCQkJNDE0REQz
NzgyMEJGNDNFQTAwNjk1OUZCIC8qIGNvbS5jaXNjby53ZWJleC5wbHVnaW4uZ3BjNjQuc2IgKi8s
Ci0JCQkJNDExMkVERDUyMEU0MDc3NDAwQkVBOTJBIC8qIGNvbS5jbWJjaGluYS5DTUJTZWN1cml0
eS5zYiAqLywKLQkJCQk0MTEyRUREMjIwRTQwNzczMDBCRUE5MkEgLyogY29tLmZ0c2FmZS5OUEFQ
SS1Db3JlLVNhZmUtU29mdEtleWJhb3JkLnBsdWdpbi5yZmMxMDM0aWRlbnRpZmllci5zYiAqLywK
LQkJCQk0MTNDQ0Q0RjIwREVCQzJGMDA2NUEyMUEgLyogY29tLmdvb2dsZS5nb29nbGV0YWxrYnJv
d3NlcnBsdWdpbi5zYiAqLywKLQkJCQk0MTU3RTRBRjIwRTJFQzk4MDBBNkMwRDcgLyogY29tLmdv
b2dsZS5vMWRicm93c2VycGx1Z2luLnNiICovLAotCQkJCTdBNUUzOTQ5MUQ1QkQ4QTcwMEI0QjdD
RSAvKiBjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIgRVNSLnBsdWdpbi5zYiAqLywKLQkJCQk3
Q0IxNkZFNTE3MjRCOUI1MDA3QTBBOTUgLyogY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyLnBs
dWdpbi5zYiAqLywKLQkJCQk3Q0IxNkZFNjE3MjRCOUI1MDA3QTBBOTUgLyogY29tLm1pY3Jvc29m
dC5TaWx2ZXJsaWdodFBsdWdpbi5zYiAqLywKLQkJCQk3Q0IxNkZFNzE3MjRCOUI1MDA3QTBBOTUg
LyogY29tLm9yYWNsZS5qYXZhLkphdmFBcHBsZXRQbHVnaW4uc2IgKi8sCi0JCQkpOwotCQkJbmFt
ZSA9IFBsdWdJblNhbmRib3hQcm9maWxlczsKLQkJCXBhdGggPSBSZXNvdXJjZXMvUGx1Z0luU2Fu
ZGJveFByb2ZpbGVzOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJN0VDNEYw
RjgxOEU0QTkyMjAwODA1NkFGIC8qIGNvY29hICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKQEAgLTEwNDAzLDcgKzk5MjEsNiBAQAogCQkJCTUxMENDN0U3MTYxMzhF
NzIwMEQwM0VEMyAvKiBOZXR3b3JrICovLAogCQkJCTMxQTJFQzQwMTQ4OTk3MzcwMDgxMEQ3MSAv
KiBOb3RpZmljYXRpb25zICovLAogCQkJCURGODRDRUUxMjQ5QUEyMDAwMDkwOTZGNiAvKiBQREYg
Ki8sCi0JCQkJMUFFRkNDMDUxMUQwMUYzNDAwODIxOUQzIC8qIFBsdWdpbnMgKi8sCiAJCQkJMkQx
NTUxQTkxRjVBOUI0MjAwMDZFM0ZFIC8qIFJlbW90ZUxheWVyVHJlZSAqLywKIAkJCQkxQUFGMDg5
RTE5MjY4MUFDMDBCNjM5MEMgLyogVXNlckNvbnRlbnQgKi8sCiAJCQkJNTc2MDgyOTQyMDJCRDg0
OTAwMTE2Njc4IC8qIFdlYkF1dGhlbnRpY2F0aW9uICovLApAQCAtMTExNTcsMTQgKzEwNjc0LDYg
QEAKIAkJCXBhdGggPSBFbnRyeVBvaW50OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJ
fTsKLQkJQkM4MjgzODYxNkI0NUVGMjAwQTI3OEZFIC8qIEVudHJ5UG9pbnQgKi8gPSB7Ci0JCQlp
c2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCUJDODI4M0UyMTZCNEY4RTIwMEEy
NzhGRSAvKiBYUENTZXJ2aWNlICovLAotCQkJKTsKLQkJCXBhdGggPSBFbnRyeVBvaW50OwotCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJQkM4MjgzQTExNkI0QkQ5MTAwQTI3OEZF
IC8qIFhQQ1NlcnZpY2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KApAQCAtMTExODQsMjQgKzEwNjkzLDYgQEAKIAkJCXBhdGggPSBOZXR3b3JrU2VydmljZTsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCUJDODI4M0UyMTZCNEY4RTIwMEEyNzhG
RSAvKiBYUENTZXJ2aWNlICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9
ICgKLQkJCQlCQzgyODNFOTE2QjRGOEUyMDBBMjc4RkUgLyogUGx1Z2luU2VydmljZSAqLywKLQkJ
CQlCQzgyODNFRjE2QjRGOEUyMDBBMjc4RkUgLyogUGx1Z2luU2VydmljZUVudHJ5UG9pbnQubW0g
Ki8sCi0JCQkpOwotCQkJbmFtZSA9IFhQQ1NlcnZpY2U7Ci0JCQlwYXRoID0gQ29jb2EvWFBDU2Vy
dmljZTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCUJDODI4M0U5MTZCNEY4
RTIwMEEyNzhGRSAvKiBQbHVnaW5TZXJ2aWNlICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0J
CQljaGlsZHJlbiA9ICgKLQkJCQlCQ0ZDQTg5NTE2REU5NkNCMDAwNzQwNjkgLyogUGx1Z2luU2Vy
dmljZS5JbmZvLnBsaXN0ICovLAotCQkJKTsKLQkJCW5hbWUgPSBQbHVnaW5TZXJ2aWNlOwotCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJQkM4QTUwMTMxMTc2NUY0NTAwNzU3NTcz
IC8qIGNwcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0x
MTU0NCwyNCArMTEwMzUsMTAgQEAKIAkJCQk1MTQ1MjcwMjI3MUZCQTM2MDAwNDY3QjYgLyogTm90
aWZpY2F0aW9uTWFuYWdlck1lc3NhZ2VIYW5kbGVyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKIAkJ
CQk1MTQ1MjcwMTI3MUZCQTM1MDAwNDY3QjYgLyogTm90aWZpY2F0aW9uTWFuYWdlck1lc3NhZ2VI
YW5kbGVyTWVzc2FnZXMuaCAqLywKIAkJCQk1MTQ1MjcwMDI3MUZCQTM0MDAwNDY3QjYgLyogTm90
aWZpY2F0aW9uTWFuYWdlck1lc3NhZ2VIYW5kbGVyTWVzc2FnZXNSZXBsaWVzLmggKi8sCi0JCQkJ
MUEyRDg0MzcxMjdGNjVENTAwMUVCOTYyIC8qIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyTWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLywKLQkJCQkxQTJEODQzODEyN0Y2NUQ1MDAxRUI5NjIgLyogTlBPYmpl
Y3RNZXNzYWdlUmVjZWl2ZXJNZXNzYWdlcy5oICovLAogCQkJCUNEQTI5QTI0MUNCRUI2N0EwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKIAkJ
CQlDREEyOUEyNTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3Nh
Z2VzLmggKi8sCiAJCQkJQ0RBMjlBMjYxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJQ0RBMjlBMjcxQ0JFQjY3
QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi8sCi0J
CQkJMUE4RUY5NkMxMjUyQUY2QjAwRjcwNjdGIC8qIFBsdWdpbkNvbnRyb2xsZXJQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAgKi8sCi0JCQkJMUE4RUY5NkQxMjUyQUY2QjAwRjcwNjdGIC8qIFBsdWdp
bkNvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmggKi8sCi0JCQkJMUE3ODY1QjcxNkNBQzcxNTAwQUNF
ODNBIC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAg
Ki8sCi0JCQkJMUE3ODY1QjgxNkNBQzcxNTAwQUNFODNBIC8qIFBsdWdpblByb2Nlc3NDb25uZWN0
aW9uTWFuYWdlck1lc3NhZ2VzLmggKi8sCi0JCQkJMUEyQkI2Q0UxNDExN0I0RDAwMEYzNUQ0IC8q
IFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKLQkJCQkxQTJC
QjZDRjE0MTE3QjREMDAwRjM1RDQgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5o
ICovLAotCQkJCTFBMEVDNkJEMTI0QkJEOUIwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzTWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLywKLQkJCQkxQTBFQzZCRTEyNEJCRDlCMDA3RUY0QTUgLyogUGx1Z2lu
UHJvY2Vzc01lc3NhZ2VzLmggKi8sCi0JCQkJMUEwNDNCNUIxMjRENUU5RDAwRkZCRkI1IC8qIFBs
dWdpblByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCi0JCQkJMUEwNDNCNUMxMjRE
NUU5RDAwRkZCRkI1IC8qIFBsdWdpblByb2Nlc3NQcm94eU1lc3NhZ2VzLmggKi8sCi0JCQkJMUE4
RUZBNkUxMjUyQjg0MTAwRjcwNjdGIC8qIFBsdWdpblByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAq
LywKLQkJCQkxQThFRkE2RjEyNTJCODQxMDBGNzA2N0YgLyogUGx1Z2luUHJveHlNZXNzYWdlcy5o
ICovLAogCQkJCUNEMjBDRTc3MjVDRDJCOUQwMDY5QjU0MiAvKiBSZW1vdGVBdWRpb0hhcmR3YXJl
TGlzdGVuZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCUNEMjBDRTc5MjVDRDJCOUUwMDY5
QjU0MiAvKiBSZW1vdGVBdWRpb0hhcmR3YXJlTGlzdGVuZXJNZXNzYWdlcy5oICovLAogCQkJCUNE
MjBDRTc4MjVDRDJCOUQwMDY5QjU0MiAvKiBSZW1vdGVBdWRpb0hhcmR3YXJlTGlzdGVuZXJNZXNz
YWdlc1JlcGxpZXMuaCAqLywKQEAgLTExNzU2LDggKzExMjMzLDYgQEAKIAkJCQk3Q0IxMDBFRTFG
QTJENzRBMDAxNzI5RUUgLyogV2ViUHJlZmVyZW5jZXNLZXlzLmNwcCAqLywKIAkJCQk3Q0IxMDBF
RjFGQTJENzRCMDAxNzI5RUUgLyogV2ViUHJlZmVyZW5jZXNLZXlzLmggKi8sCiAJCQkJN0NCMTAw
RjAxRkEyRDc4NDAwMTcyOUVFIC8qIFdlYlByZWZlcmVuY2VzU3RvcmVEZWZhdWx0c01hcC5jcHAg
Ki8sCi0JCQkJMUEwNDNGNjcxMjUxNEQ4QjAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9u
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKLQkJCQkxQTA0M0Y2ODEyNTE0RDhCMDBGRkJGQjUgLyog
V2ViUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oICovLAogCQkJCUJDMzA2NkJDMTI1QTQ0MjEw
MEU3MTI3OCAvKiBXZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKIAkJCQlCQzMwNjZC
RDEyNUE0NDIxMDBFNzEyNzggLyogV2ViUHJvY2Vzc01lc3NhZ2VzLmggKi8sCiAJCQkJN0NFNEQy
MjUxQTQ5MTZDMjAwQzdGMTUyIC8qIFdlYlByb2Nlc3NQb29sTWVzc2FnZVJlY2VpdmVyLmNwcCAq
LywKQEAgLTEyMTEyLDEzICsxMTU4Nyw2IEBACiAvKiBFbmQgUEJYR3JvdXAgc2VjdGlvbiAqLwog
CiAvKiBCZWdpbiBQQlhIZWFkZXJzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTFBQzI1RkFDMTJB
NDhFQTcwMEJEMjY3MSAvKiBIZWFkZXJzICovID0gewotCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxk
UGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0J
CQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07CiAJ
CTVDMTU3OUQxMjcxNjVCMkYwMEVENTI4MCAvKiBIZWFkZXJzICovID0gewogCQkJaXNhID0gUEJY
SGVhZGVyc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAt
MTI1MjAsOCArMTE5ODgsNiBAQAogCQkJCTJENEQyQzgxMURGNjBCRjMwMDJFQjEwQyAvKiBJbnRl
cmFjdGlvbkluZm9ybWF0aW9uUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTMxRjYwQTQy
NUNDN0RCOTAwQUYxNEY0IC8qIElQQ1NlbWFwaG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUI0
NzkwOEYyNTMxNTFDQzAwRUMxMUFCIC8qIEpTSVBDQmluZGluZy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMUFFNDlBNDkxMUZGQThDRTAwNDhCNDY0IC8qIEpTTlBNZXRob2QuaCBpbiBIZWFkZXJzICov
LAotCQkJCTFBRTQ5ODc4MTFGRjdGQUEwMDQ4QjQ2NCAvKiBKU05QT2JqZWN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDMTY2M0U1QjI0QUVBQTJGMDBDNkEzQjIgLyogTGF1bmNoU2VydmljZXNEYXRh
YmFzZVhQQ0NvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFMDkzNzgxNEZCMTI4QzAw
MTEzOEQ5IC8qIExheWVySG9zdGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOTJE
QzExMTJGOEJBNDYwMDE3QUY2NSAvKiBMYXllclRyZWVDb250ZXh0LmggaW4gSGVhZGVycyAqLywK
QEAgLTEyNTg5LDEwICsxMjA1NSw2IEBACiAJCQkJMUFCQzNERjYxODk5RTQzNzAwNEYwNjI2IC8q
IE5hdmlnYXRpb25TdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTdCODI2NDQyMzA0RjE0MDAw
QjcyRUIwIC8qIE5lYXJGaWVsZFNvZnRMaW5rLmggaW4gSGVhZGVycyAqLywKIAkJCQk1N0I4MjY0
MTIzMDRFQjNFMDBCNzJFQjAgLyogTmVhckZpZWxkU1BJLmggaW4gSGVhZGVycyAqLywKLQkJCQkx
QTZGQkEyQTExRTY4NjI3MDBEQjEzNzEgLyogTmV0c2NhcGVCcm93c2VyRnVuY3MuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTFBNkZCRDI4MTFFNjlCQzIwMERCMTM3MSAvKiBOZXRzY2FwZVBsdWdpbi5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMUE0QTlDNTYxMkI4MTZDRjAwOEZFOTg0IC8qIE5ldHNjYXBl
UGx1Z2luTW9kdWxlLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQUE1ODg5MjExRUU3MDQwMDA2MUI4
ODIgLyogTmV0c2NhcGVQbHVnaW5TdHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTUzNUJDQjky
MjA2OUM0OUMwMENDQ0UwMiAvKiBOZXR3b3JrQWN0aXZpdHlUcmFja2VyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0NkVFMjg0RDI2OUUwNTI1MDBERDQ4QUIgLyogTmV0d29ya0Jyb2FkY2FzdENoYW5u
ZWxSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0MzZFQ0MxQTBEMDQwQjAwRUFEMjA0
IC8qIE5ldHdvcmtDYWNoZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMjY0NSwxNSArMTIxMDcsNiBA
QAogCQkJCTUxNDUyNzA0MjcxRkJBNDAwMDA0NjdCNiAvKiBOb3RpZmljYXRpb25NYW5hZ2VyTWVz
c2FnZUhhbmRsZXJNZXNzYWdlc1JlcGxpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxQTJFQzU2
MTQ4OTlDMDkwMDgxMEQ3MSAvKiBOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzEzMTI2MUYxNDhGRjgyQzAwQkEyQTM5IC8qIE5vdGlmaWNhdGlvblBl
cm1pc3Npb25SZXF1ZXN0TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUEyRDg0OEIxMjdG
NkE0OTAwMUVCOTYyIC8qIE5QSWRlbnRpZmllckRhdGEuaCBpbiBIZWFkZXJzICovLAotCQkJCTFB
RTQ5NzY4MTFGRjY1OEUwMDQ4QjQ2NCAvKiBOUEpTT2JqZWN0LmggaW4gSGVhZGVycyAqLywKLQkJ
CQkxQTJEODJBNTEyN0Y0RUFCMDAxRUI5NjIgLyogTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIuaCBp
biBIZWFkZXJzICovLAotCQkJCTFBMkQ4NDNBMTI3RjY1RDUwMDFFQjk2MiAvKiBOUE9iamVjdE1l
c3NhZ2VSZWNlaXZlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTJEODJBNzEyN0Y0
RUFCMDAxRUI5NjIgLyogTlBPYmplY3RQcm94eS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUEyRDgy
QTkxMjdGNEVBQjAwMUVCOTYyIC8qIE5QUmVtb3RlT2JqZWN0TWFwLmggaW4gSGVhZGVycyAqLywK
LQkJCQkxQTIxNjFCMDExRjM3NjY0MDA4QUQwRjUgLyogTlBSdW50aW1lT2JqZWN0TWFwLmggaW4g
SGVhZGVycyAqLywKLQkJCQkxQTIxNjJCMTExRjM4OTcxMDA4QUQwRjUgLyogTlBSdW50aW1lVXRp
bGl0aWVzLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTJEODRBMzEyN0Y2QUQxMDAxRUI5NjIgLyog
TlBWYXJpYW50RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUMyMDkzNjAyMjMxOENCMDAwMDI2
QTM5IC8qIE5TQXR0cmlidXRlZFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUMyMTg0MDIy
MjMzODcyODAwQkFDNzAwIC8qIE5TQXR0cmlidXRlZFN0cmluZ1ByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTM3NTRENTQ1MUIzQTI5RkQwMDNBNEM3RiAvKiBOU0ludm9jYXRpb25TUEkuaCBp
biBIZWFkZXJzICovLApAQCAtMTI2ODksMjkgKzEyMTQyLDcgQEAKIAkJCQlDREEyOUEyMDFDQkVC
NUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAq
LywKIAkJCQlDREEyOUEyQjFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNkZCN0QzMTFFNjUxRTIwMERC
MTM3MSAvKiBQbHVnaW4uaCBpbiBIZWFkZXJzICovLAotCQkJCTFBOUZCQThEMTNGRjA0RTYwMERF
RUQ2NyAvKiBQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBQTU2RjI5MTFFOTJCQzgwMDYxQjg4MiAvKiBQbHVnaW5Db250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkxQThFRjRDQjEyNTI0MDM3MDBGNzA2N0YgLyogUGx1Z2luQ29udHJvbGxlclBy
b3h5LmggaW4gSGVhZGVycyAqLywKLQkJCQkxQThFRjk2RjEyNTJBRjZCMDBGNzA2N0YgLyogUGx1
Z2luQ29udHJvbGxlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBMTc5Nzgw
MTM3RUU4MkMwMEY5N0Q0NSAvKiBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTdDM0Y4QzkxMTczQUY1MkQwMDdCN0YzOSAvKiBQbHVnaW5JbmZvcm1hdGlvbi5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMUFFRkNDMTIxMUQwMUY5NjAwODIxOUQzIC8qIFBsdWdpbklu
Zm9TdG9yZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUEzRDYxMDIxM0E3Q0MyQTAwRjk1RDRFIC8q
IFBsdWdpbk1vZHVsZUluZm8uaCBpbiBIZWFkZXJzICovLAotCQkJCTFBMDQzOTc2MTI0RDAzNDgw
MEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNzLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQUM1RkZDMjE3
NEJGRDFCMDAwMTQ4M0QgLyogUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICov
LAotCQkJCTFBMEVDOTA2MTI0QzBBQjgwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlv
bi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUEwRUM5MEYxMjRDMEFGNTAwN0VGNEE1IC8qIFBsdWdp
blByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUE3ODY1QkEx
NkNBQzcxNTAwQUNFODNBIC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlck1lc3NhZ2Vz
LmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTJCQjZEMTE0MTE3QjREMDAwRjM1RDQgLyogUGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUEyRDkwRDIx
MjgxQzk2NjAwMUVCOTYyIC8qIFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTFBMEVDNjAzMTI0QTlGMkMwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNz
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUEwRUM2QzAxMjRCQkQ5QjAwN0VGNEE1IC8q
IFBsdWdpblByb2Nlc3NNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUEwRUM3NUUxMjRC
QzdCMjAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NQcm94eS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MUEwNDNCNUUxMjRENUU5RDAwRkZCRkI1IC8qIFBsdWdpblByb2Nlc3NQcm94eU1lc3NhZ2VzLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkxQTA0M0RDMTEyNEZGODc1MDBGRkJGQjUgLyogUGx1Z2luUHJv
eHkuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBOEVGQTcxMTI1MkI4NDEwMEY3MDY3RiAvKiBQbHVn
aW5Qcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTRBOUYzMzEyQjg0NEUyMDA4
RkU5ODQgLyogUGx1Z2luUXVpcmtzLmggaW4gSGVhZGVycyAqLywKLQkJCQk3Q0Q2MjI3ODE3MzlE
ODYzMDA1QkQ3RkYgLyogUGx1Z2luU2FuZGJveFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBNkZCN0FGMTFFNjRCNjgwMERCMTM3MSAvKiBQbHVnaW5WaWV3LmggaW4gSGVhZGVycyAqLywK
IAkJCQk0OUVDQTQxQzIzRkNBNUQ4MDAyMzM1OEQgLyogUG9saWN5RGVjaXNpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTU3RkQzMTgxMjJCMzUxNUIwMDhEMEU4QiAvKiBQb3BVcFNPQXV0aG9yaXph
dGlvblNlc3Npb24uaCBpbiBIZWFkZXJzICovLApAQCAtMTI4NDMsNyArMTIyNzQsNiBAQAogCQkJ
CTkzQUI5QjRFMjU3NTY3RTIwMDk4QjEwRSAvKiBTcGVlY2hSZWNvZ25pdGlvblJlbW90ZVJlYWx0
aW1lTWVkaWFTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQUI5QjREMjU3NTY3REMwMDk4
QjEwRSAvKiBTcGVlY2hSZWNvZ25pdGlvblJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2VNYW5hZ2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Q2Qjc3MjI1NEJCNTE5MDA1OEREM0EgLyogU3BlZWNo
UmVjb2duaXRpb25TZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxMkNENjlBMjcyMUYwQTkw
MEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
M0Q2Qjc4NDI1NENDRDBFMDA1OEREM0EgLyogU3BlZWNoUmVjb2duaXRpb25TZXJ2ZXJNZXNzYWdl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNENkI3ODUyNTRDQ0Q0MzAwNThERDNBIC8qIFNwZWVj
aFJlY29nbml0aW9uU2VydmVyTWVzc2FnZXNSZXBsaWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
QTNGRUNBMjIxRjdDMDk3MDBGMjY3Q0QgLyogU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIGluIEhlYWRl
cnMgKi8sCkBAIC0xMjkzMSw3ICsxMjM2MSw2IEBACiAJCQkJOTkwRDM5RjUyNDNCRTY0ODAwMTk5
Mzg4IC8qIFdlYkF1dG9tYXRpb25ET01XaW5kb3dPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTk1NUE2RUMxQzc5ODBDMjAwRUI2QTkzIC8qIFdlYkF1dG9tYXRpb25TZXNzaW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5OUMzQUUyRDFEQURBNkFEMDBBRjVDMTYgLyogV2ViQXV0b21hdGlv
blNlc3Npb25NYWNyb3MuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxMkNENjk4MjcyMUVGQzgwMEY3
RjhFQyAvKiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUMw
QTE5NTgxQzkwMDY4RjAwRkUwRUJCIC8qIFdlYkF1dG9tYXRpb25TZXNzaW9uTWVzc2FnZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTFDMEExOTQ3MUM4RkYxQTgwMEZFMEVCQiAvKiBXZWJBdXRvbWF0
aW9uU2Vzc2lvblByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzBBMTk1NDFDOEZGREZCMDBG
RTBFQkIgLyogV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAq
LywKQEAgLTEzMDk4LDggKzEyNTI3LDYgQEAKIAkJCQlCQ0Q1OThBQzExMkI3RkRGMDBFQzhDMjMg
LyogV2ViUHJlZmVyZW5jZXNTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFDNTEyQzkxOTA2
NTZFNTAwNDQ4OTE0IC8qIFdlYlByZXZpZXdMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMDMyRDk3MTBGNDM3QUYwMDU4QzE1QSAvKiBXZWJQcm9jZXNzLmggaW4gSGVhZGVycyAq
LywKLQkJCQkxQTA0M0EwOTEyNEQxMUE5MDBGRkJGQjUgLyogV2ViUHJvY2Vzc0Nvbm5lY3Rpb24u
aCBpbiBIZWFkZXJzICovLAotCQkJCTFBMDQzRjZBMTI1MTREOEIwMEZGQkZCNSAvKiBXZWJQcm9j
ZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzMwNjgyNDEyNUE2
Qjk0MDBFNzEyNzggLyogV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDY3RTQzRTgyMjQzRkY3RDAwQjEzOTI0IC8qIFdlYlByb2Nlc3NEYXRhU3RvcmVQ
YXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzMwNjZCRjEyNUE0NDIxMDBFNzEyNzgg
LyogV2ViUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKQEAgLTEzMTEwLDYgKzEyNTM3
LDggQEAKIAkJCQlCQ0UwRTQyNTE2OEI3QTI4MDA1N0U2NkEgLyogV2ViUHJvY2Vzc1N1cHBsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMUUwOTM0MTg4NjFEMzgwMEQyREM0OSAvKiBXZWJQ
cm9ncmVzc1RyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkY1ODlEMTJBODgz
ODgwMDYyOTUzMCAvKiBXZWJQcm90ZWN0aW9uU3BhY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTUx
MkNENjk4MjcyMUVGQzgwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTEyQ0Q2OUEyNzIxRjBBOTAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb25D
b25zdGFudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2MUNDQ0E2MjMxNDg1QUEwMEI2NTlCOSAv
KiBXZWJSZW1vdGVPYmplY3RSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NjBFNzEy
MzBGNjdGQzAwNDYxQUFFIC8qIFdlYlJlc291cmNlSW50ZXJjZXB0Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTEwQUZGQkExNjU0MjA0ODAwMUJBMDVFIC8qIFdlYlJlc291cmNlTG9h
ZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTEzNjEwLDI0ICsxMzAzOSw2IEBACiAvKiBFbmQgUEJY
SGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhOYXRpdmVUYXJnZXQg
c2VjdGlvbiAqLwotCQkxQUMyNUZBRjEyQTQ4RUE3MDBCRDI2NzEgLyogUGx1Z2luUHJvY2Vzc1No
aW0gKi8gPSB7Ci0JCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7Ci0JCQlidWlsZENvbmZpZ3VyYXRp
b25MaXN0ID0gMUFDMjVGQkExMkE0OEVCNjAwQkQyNjcxIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24g
bGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJQbHVnaW5Qcm9jZXNzU2hpbSIgKi87Ci0JCQlidWls
ZFBoYXNlcyA9ICgKLQkJCQkxQUMyNUZBQzEyQTQ4RUE3MDBCRDI2NzEgLyogSGVhZGVycyAqLywK
LQkJCQkxQUMyNUZBRDEyQTQ4RUE3MDBCRDI2NzEgLyogU291cmNlcyAqLywKLQkJCQkxQUMyNUZB
RTEyQTQ4RUE3MDBCRDI2NzEgLyogRnJhbWV3b3JrcyAqLywKLQkJCSk7Ci0JCQlidWlsZFJ1bGVz
ID0gKAotCQkJKTsKLQkJCWRlcGVuZGVuY2llcyA9ICgKLQkJCQlFMUFDMkUyRTIwRjdCOTg4MDBC
MDg5N0QgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKLQkJCSk7Ci0JCQluYW1lID0gUGx1Z2lu
UHJvY2Vzc1NoaW07Ci0JCQlwcm9kdWN0TmFtZSA9IFBsdWdpblByb2Nlc3NTaGltOwotCQkJcHJv
ZHVjdFJlZmVyZW5jZSA9IDFBQzI1RkIwMTJBNDhFQTcwMEJEMjY3MSAvKiBQbHVnaW5Qcm9jZXNz
U2hpbS5keWxpYiAqLzsKLQkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUu
bGlicmFyeS5keW5hbWljIjsKLQkJfTsKIAkJMkQ5RkIyMTYyMzc1MjM4MzAwNDlGOTM2IC8qIEdQ
VSAqLyA9IHsKIAkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlv
bkxpc3QgPSAyRDlGQjIyNDIzNzUyMzgzMDA0OUY5MzYgLyogQnVpbGQgY29uZmlndXJhdGlvbiBs
aXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkdQVSIgKi87CkBAIC0xMzc0OCw3ICsxMzE1OSw2IEBA
CiAJCQkJMkUxNkI2RjQyMDE5QkMyNTAwODk5NkQ2IC8qIENvcHkgQWRkaXRpb25hbCBSZXNvdXJj
ZXMgKi8sCiAJCQkJOERDMkVGNTIwNDg2QTY5NDAwOThCMjE2IC8qIFJlc291cmNlcyAqLywKIAkJ
CQkzNzI1ODk0MzFDMUU0OTY4MDBDOTJDQTkgLyogQ29weSBTaGltcyAqLywKLQkJCQk3Q0IxNkZF
RTE3MjRCQTA1MDA3QTBBOTUgLyogQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8sCiAJ
CQkJOTlDQTM4NjIyMDcyODZEQjAwQkFENTc4IC8qIENvcHkgV2ViRHJpdmVyIEF0b21zIHRvIEZy
YW1ld29yayBQcml2YXRlIEhlYWRlcnMgKi8sCiAJCQkJMzdFNTMxMDExQjIzOTEwOTAwNzRGMERG
IC8qIENvcHkgaU9TIFNhbmRib3ggUHJvZmlsZXMgZm9yIE1hbnVhbCBTYW5kYm94aW5nICovLAog
CQkJCTFBMDdEMkY3MTkxOUIzNjUwMEVDREExNiAvKiBDb3B5IE1lc3NhZ2UgR2VuZXJhdGlvbiBT
Y3JpcHRzICovLApAQCAtMTM3NzMsNyArMTMxODMsNiBAQAogCQkJCUUxQUMyRTNFMjBGN0I5QzAw
MEIwODk3RCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTM3Rjc0MDc5MTI3MjFGNzQw
MDkzODY5QiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTJEMTFCQTA1MjEyNkE1QUUw
MDZGODg3OCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAotCQkJCTM3QjFEMDE0MUMxRTQyMTEw
MEQ2N0ZFOSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJKTsKIAkJCW5hbWUgPSBXZWJL
aXQ7CiAJCQlwcm9kdWN0SW5zdGFsbFBhdGggPSAiJChIT01FKS9MaWJyYXJ5L0ZyYW1ld29ya3Mi
OwpAQCAtMTM4NDIsMjYgKzEzMjUxLDYgQEAKIAkJCXByb2R1Y3RSZWZlcmVuY2UgPSBCQzgyODNC
MTE2QjRCRjc3MDBBMjc4RkUgLyogY29tLmFwcGxlLldlYktpdC5OZXR3b3JraW5nLnhwYyAqLzsK
IAkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUueHBjLXNlcnZpY2UiOwog
CQl9OwotCQlCQzgyODQxRTE2QjRGREY2MDBBMjc4RkUgLyogUGx1Z2luLjY0ICovID0gewotCQkJ
aXNhID0gUEJYTmF0aXZlVGFyZ2V0OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IEJDODI4
NDJBMTZCNEZERjcwMEEyNzhGRSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5h
dGl2ZVRhcmdldCAiUGx1Z2luLjY0IiAqLzsKLQkJCWJ1aWxkUGhhc2VzID0gKAotCQkJCUJDODI4
NDFCMTZCNEZERjYwMEEyNzhGRSAvKiBTb3VyY2VzICovLAotCQkJCUJDODI4NDFDMTZCNEZERjYw
MEEyNzhGRSAvKiBGcmFtZXdvcmtzICovLAotCQkJCUJDODI4NDFEMTZCNEZERjYwMEEyNzhGRSAv
KiBSZXNvdXJjZXMgKi8sCi0JCQkJN0E3OUUyREQyMTA3RjJERDAwRUYzMkE0IC8qIFByb2Nlc3Mg
UGx1Z2luIGVudGl0bGVtZW50cyAqLywKLQkJCSk7Ci0JCQlidWlsZFJ1bGVzID0gKAotCQkJKTsK
LQkJCWRlcGVuZGVuY2llcyA9ICgKLQkJCQlFMUFDMkUzQTIwRjdCOUE3MDBCMDg5N0QgLyogUEJY
VGFyZ2V0RGVwZW5kZW5jeSAqLywKLQkJCQkzNzVFMDYyQjE5MUVBOEQ0MDA0RTNDQUYgLyogUEJY
VGFyZ2V0RGVwZW5kZW5jeSAqLywKLQkJCSk7Ci0JCQluYW1lID0gUGx1Z2luLjY0OwotCQkJcHJv
ZHVjdE5hbWUgPSBQbHVnaW4uNjQ7Ci0JCQlwcm9kdWN0UmVmZXJlbmNlID0gQkM4Mjg0MUYxNkI0
RkRGNjAwQTI3OEZFIC8qIGNvbS5hcHBsZS5XZWJLaXQuUGx1Z2luLjY0LnhwYyAqLzsKLQkJCXBy
b2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUueHBjLXNlcnZpY2UiOwotCQl9Owog
CQlDRDk1NDkzNDI2MTU5MDA0MDA4MzcyRDkgLyogV2ViS2l0U3dpZnQgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhOYXRpdmVUYXJnZXQ7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gQ0Q5NTQ5M0Iy
NjE1OTAwNDAwODM3MkQ5IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZl
VGFyZ2V0ICJXZWJLaXRTd2lmdCIgKi87CkBAIC0xMzkzNCwxMyArMTMzMjMsMTEgQEAKIAkJCQky
RDdERUJEODIxMjY5QzZCMDBCOUY3M0MgLyogR2VuZXJhdGUgVW5pZmllZCBTb3VyY2VzICovLAog
CQkJCUMwQ0U3Mjg1MTI0N0U2NjgwMEJDMEVDNCAvKiBEZXJpdmVkIFNvdXJjZXMgKi8sCiAJCQkJ
QTE2RTY1RkYyNTgxOTMwODAwRUUxNzQ5IC8qIE1lZGlhRm9ybWF0UmVhZGVyICovLAotCQkJCTFB
QzI1RkFGMTJBNDhFQTcwMEJEMjY3MSAvKiBQbHVnaW5Qcm9jZXNzU2hpbSAqLywKIAkJCQlCQzNE
RTQ2NTE1QTkxNzYzMDA4RDI2RkMgLyogV2ViQ29udGVudCAqLywKIAkJCQkzNzJFQkIzODIwMTdF
NjQzMDAwODUwNjQgLyogV2ViQ29udGVudC5EZXZlbG9wbWVudCAqLywKIAkJCQlCQzgyODNCMDE2
QjRCRjc3MDBBMjc4RkUgLyogTmV0d29ya2luZyAqLywKIAkJCQkyRDlGQjIxNjIzNzUyMzgzMDA0
OUY5MzYgLyogR1BVICovLAogCQkJCTU3NDJBMkU1MjUzNTYxM0YwMEI3QkExNCAvKiBXZWJBdXRo
biAqLywKLQkJCQlCQzgyODQxRTE2QjRGREY2MDBBMjc4RkUgLyogUGx1Z2luLjY0ICovLAogCQkJ
CUE3QUFEQTEwMTkzOTVDQTkwMDNFQTFDNyAvKiBTYW5kYm94IFByb2ZpbGVzICovLAogCQkJCUUx
QUMyRTI3MjBGN0I5NEMwMEIwODk3RCAvKiBVbmxvY2sgS2V5Y2hhaW4gKi8sCiAJCQkJNTMyNUJE
Q0QyMURGRjQ3NzAwQTBERUUxIC8qIEFwcGx5IENvbmZpZ3VyYXRpb24gdG8gWENGaWxlTGlzdHMg
Ki8sCkBAIC0xMzk4Miw3ICsxMzM2OSw2IEBACiAJCQkJRTE3QUUyQzMxNkI5QzYzQTAwMUM0MkYx
IC8qIGNvbS5hcHBsZS5XZWJLaXQuTmV0d29ya1Byb2Nlc3Muc2IgaW4gUmVzb3VyY2VzICovLAog
CQkJCTU3MkVCQkM0MjUzNkFCODQwMDA1NTJCMyAvKiBjb20uYXBwbGUuV2ViS2l0LldlYkF1dGhu
UHJvY2Vzcy5zYiBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJRTExRDM1QUUxNkI2M0QxQjAwNkQyM0Q3
IC8qIGNvbS5hcHBsZS5XZWJQcm9jZXNzLnNiIGluIFJlc291cmNlcyAqLywKLQkJCQk0MTRERDM3
OTIwQkY0M0Y1MDA2OTU5RkIgLyogY29tLmNpc2NvLndlYmV4LnBsdWdpbi5ncGM2NC5zYiBpbiBS
ZXNvdXJjZXMgKi8sCiAJCQkJNkJFOTY5QzExRTU0RDQ1MjAwOEI3NDgzIC8qIGNvcmVQcmVkaWN0
aW9uX21vZGVsIGluIFJlc291cmNlcyAqLywKIAkJCQk4REMyRUY1MzA0ODZBNjk0MDA5OEIyMTYg
LyogSW5mb1BsaXN0LnN0cmluZ3MgaW4gUmVzb3VyY2VzICovLAogCQkJCTNGQjA4RTQzMUY2MEIy
NDAwMDVFNTMxMiAvKiBpT1MueGNhc3NldHMgaW4gUmVzb3VyY2VzICovLApAQCAtMTQwMDUsMTMg
KzEzMzkxLDYgQEAKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKLQkJQkM4Mjg0MUQxNkI0RkRGNjAwQTI3OEZFIC8qIFJlc291cmNlcyAqLyA9
IHsKLQkJCWlzYSA9IFBCWFJlc291cmNlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sg
PSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07CiAvKiBFbmQgUEJYUmVzb3VyY2VzQnVpbGRQaGFz
ZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZSBzZWN0aW9u
ICovCkBAIC0xNDQzNywyMiArMTM4MTYsNiBAQAogCQkJc2hlbGxQYXRoID0gL2Jpbi9zaDsKIAkJ
CXNoZWxsU2NyaXB0ID0gImlmIFsgXCIke0FDVElPTn1cIiA9IFwiaW5zdGFsbGhkcnNcIiBdIHx8
IFsgXCIke0FDVElPTn1cIiA9IFwiaW5zdGFsbGFwaVwiIF07IHRoZW5cbiAgICBleGl0IDA7XG5m
aVxuXG5pZiBbIC1mIC4uLy4uL1Rvb2xzL1NjcmlwdHMvY2hlY2stZm9yLWluYXBwcm9wcmlhdGUt
ZmlsZXMtaW4tZnJhbWV3b3JrIF07IHRoZW5cbiAgICAuLi8uLi9Ub29scy9TY3JpcHRzL2NoZWNr
LWZvci1pbmFwcHJvcHJpYXRlLWZpbGVzLWluLWZyYW1ld29yayB8fCBleGl0ICQ/XG5maVxuIjsK
IAkJfTsKLQkJN0E3OUUyREQyMTA3RjJERDAwRUYzMkE0IC8qIFByb2Nlc3MgUGx1Z2luIGVudGl0
bGVtZW50cyAqLyA9IHsKLQkJCWlzYSA9IFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZTsKLQkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQlpbnB1
dFBhdGhzID0gKAotCQkJCSIkKFNSQ1JPT1QpL1NjcmlwdHMvcHJvY2Vzcy1lbnRpdGxlbWVudHMu
c2giLAotCQkJKTsKLQkJCW5hbWUgPSAiUHJvY2VzcyBQbHVnaW4gZW50aXRsZW1lbnRzIjsKLQkJ
CW91dHB1dFBhdGhzID0gKAotCQkJCSIkKFdLX1BST0NFU1NFRF9YQ0VOVF9GSUxFKSIsCi0JCQkp
OwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCQlzaGVsbFBh
dGggPSAvYmluL3NoOwotCQkJc2hlbGxTY3JpcHQgPSAiU2NyaXB0cy9wcm9jZXNzLWVudGl0bGVt
ZW50cy5zaFxuIjsKLQkJfTsKIAkJN0FGQ0JENTQyMEI4OTExRDAwRjU1QzlDIC8qIFByb2Nlc3Mg
V2ViQ29udGVudCBlbnRpdGxlbWVudHMgKi8gPSB7CiAJCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1
aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtMTQ2NDgsMTQg
KzE0MDExLDYgQEAKIC8qIEVuZCBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2VjdGlvbiAqLwog
CiAvKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTFBQzI1RkFEMTJB
NDhFQTcwMEJEMjY3MSAvKiBTb3VyY2VzICovID0gewotCQkJaXNhID0gUEJYU291cmNlc0J1aWxk
UGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0J
CQkJMUFDMjVGQzIxMkE0OEY2MDAwQkQyNjcxIC8qIFBsdWdpblByb2Nlc3NTaGltLm1tIGluIFNv
dXJjZXMgKi8sCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7Ci0JCX07CiAJCTJEOUZCMjFCMjM3NTIzODMwMDQ5RjkzNiAvKiBTb3VyY2VzICovID0gewog
CQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3
NDgzNjQ3OwpAQCAtMTQ2ODcsMTEgKzE0MDQyLDExIEBACiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVp
bGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgK
LQkJCQk1MTJDRDZBMDI3MjMzOTNBMDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbi5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDMTU3QTAxMjcxN0I3RkIwMEVENTI4MCAvKiBBcmd1bWVudENvZGVycy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzE1NzlGRjI3MTdCNkQyMDBFRDUyODAgLyogRGFlbW9u
RGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzE1NzlGRTI3MTdCNkMxMDBFRDUyODAg
LyogRGFlbW9uRW5jb2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzE1NzlGQjI3MTdBRjUw
MDBFRDUyODAgLyogRGFlbW9uVXRpbGl0aWVzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTEyQ0Q2
QTAyNzIzMzkzQTAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb24ubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk1QzE1N0EwQzI3MTdDQTFEMDBFRDUyODAgLyogV2ViUHVzaERhZW1vbk1haW4ubW0gaW4gU291
cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKQEAgLTE0NzU2LDggKzE0MTExLDYgQEAKIAkJCQkyNzQ5RjY0NDIxNDY1NjFCMDA4MzgwQkYg
LyogSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI3NDlG
NjQ1MjE0NjU2MUUwMDgzODBCRiAvKiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTlCRjVFQzY0MjU0MTE0NTYwMDk4NEU3NyAvKiBKU0lQQ0JpbmRpbmcu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkQ5MTM0NDEyMTJDRjlGMDAwMTI4QUZEIC8qIEpTTlBN
ZXRob2QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkQ5MTM0NDIyMTJDRjlGMDAwMTI4QUZEIC8q
IEpTTlBPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzE0RDM3RkUyNEFDRTA4NjAwN0ZG
MDE0IC8qIExhdW5jaFNlcnZpY2VzRGF0YWJhc2VNYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQzE3MTBDRjcyNEFBNjQzMjAwRDdDMTEyIC8qIExhdW5jaFNlcnZpY2VzRGF0YWJhc2VPYnNl
cnZlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTI5ODRGNTg4MTY0QkEwOTUwMDRCQzBDNiAvKiBM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0xNDc3NSwxMCArMTQxMjgsNiBAQAogCQkJCTJEOTJBNzgyMjEyQjZBNzEwMEY0OTNG
RCAvKiBNZXNzYWdlU2VuZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOTJBNzdBMjEyQjZB
NjEwMEY0OTNGRCAvKiBNb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTdCODI2NDUyMzA0
RjE0MDAwQjcyRUIwIC8qIE5lYXJGaWVsZFNvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJ
MkQ5MTM0NDMyMTJDRjlGMDAwMTI4QUZEIC8qIE5ldHNjYXBlQnJvd3NlckZ1bmNzLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTJEOTEzNDQ0MjEyQ0Y5RjAwMDEyOEFGRCAvKiBOZXRzY2FwZVBsdWdp
bi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRDkyQTc5NjIxMkI2QURBMDBGNDkzRkQgLyogTmV0
c2NhcGVQbHVnaW5Nb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkQ5MTM0NDUyMTJDRjlG
MDAwMTI4QUZEIC8qIE5ldHNjYXBlUGx1Z2luU3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUMxQzFCMzBGMjU0MEY1MEQwMEQ5MTAwQiAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
c01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxREQ5RjI4MTYzNjdEQTIwMDE1NzhFOSAvKiBO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MkYwNjBFMTE2NTQzMTg1MDBGMzI4MUIgLyogTmV0d29ya0NvbnRlbnRSdWxl
TGlzdE1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNDc5NSwz
NSArMTQxNDQsOSBAQAogCQkJCTVDMEIxNzc4MUU3Qzg4MEUwMEU5MTIzQyAvKiBOZXR3b3JrU29j
a2V0U3RyZWFtTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMDg1REQy
MjZFMkY1OEQwMDBFQzZBNyAvKiBOZXR3b3JrU3RvcmFnZU1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0NTI3MDMyNzFGQkEzQTAwMDQ2N0I2IC8qIE5vdGlm
aWNhdGlvbk1hbmFnZXJNZXNzYWdlSGFuZGxlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQkyRDkyQTc5MDIxMkI2QUQ0MDBGNDkzRkQgLyogTlBJZGVudGlmaWVyRGF0YS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQkyRDkxMzQ0NjIxMkNGOUYwMDAxMjhBRkQgLyogTlBKU09i
amVjdC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRDkyQTc5MTIxMkI2QUQ0MDBGNDkzRkQgLyog
TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUEyRDg0Mzkx
MjdGNjVENTAwMUVCOTYyIC8qIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyTWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTJEOTJBNzkyMjEyQjZBRDQwMEY0OTNGRCAvKiBOUE9i
amVjdFByb3h5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTJEOTJBNzkzMjEyQjZBRDQwMEY0OTNG
RCAvKiBOUFJlbW90ZU9iamVjdE1hcC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRDkxMzQ0NzIx
MkNGOUYwMDAxMjhBRkQgLyogTlBSdW50aW1lT2JqZWN0TWFwLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTJEOTEzNDQ4MjEyQ0Y5RjAwMDEyOEFGRCAvKiBOUFJ1bnRpbWVVdGlsaXRpZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJMkQ5MkE3OTQyMTJCNkFENDAwRjQ5M0ZEIC8qIE5QVmFyaWFudERh
dGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RBMjlBMjgxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBs
YXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQ0RBMjlBMkExQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDkxMzQ0OTIxMkNGOUYw
MDAxMjhBRkQgLyogUGx1Z2luLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTFBOEVGNENDMTI1MjQw
MzcwMEY3MDY3RiAvKiBQbHVnaW5Db250cm9sbGVyUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJMUEyRDkxQTYxMjgxRDczOTAwMUVCOTYyIC8qIFBsdWdpbkNvbnRyb2xsZXJQcm94eU1hYy5t
bSBpbiBTb3VyY2VzICovLAotCQkJCTFBOEVGOTZFMTI1MkFGNkIwMEY3MDY3RiAvKiBQbHVnaW5D
b250cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUEx
Nzk3N0YxMzdFRTgyQzAwRjk3RDQ1IC8qIFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkyRDkyQTc5NzIxMkI2QURBMDBGNDkzRkQgLyogUGx1Z2luSW5mb3Jt
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUEwNDM5NzcxMjREMDM0ODAwRkZCRkI1IC8q
IFBsdWdpblByb2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkQ5MTM0NEEyMTJDRjlGMDAw
MTI4QUZEIC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTJEOTEzNDRCMjEyQ0Y5RjAwMDEyOEFGRCAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFn
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUE3ODY1QjkxNkNBQzcxNTAwQUNFODNBIC8qIFBs
dWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQkxQTJCQjZEMDE0MTE3QjREMDAwRjM1RDQgLyogUGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkQ5MkE3OTUyMTJC
NkFENDAwRjQ5M0ZEIC8qIFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJMUFBNDc5MjMxMkE1OUZEOTAwODIzNkMzIC8qIFBsdWdpblByb2Nlc3NN
YWMubW0gaW4gU291cmNlcyAqLywKLQkJCQkxQTA0M0NFQjEyNEZFMzhGMDBGRkJGQjUgLyogUGx1
Z2luUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxQTA0M0I1
RDEyNEQ1RTlEMDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTJEOTEzNDRDMjEyQ0Y5RjAwMDEyOEFGRCAvKiBQbHVnaW5Q
cm94eS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxQThFRkE3MDEyNTJCODQxMDBGNzA2N0YgLyog
UGx1Z2luUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkM4Mjg0
NEQxNkI1MDgxQzAwQTI3OEZFIC8qIFBsdWdpblNlcnZpY2VFbnRyeVBvaW50Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkQ5MTM0NEQyMTJDRjlGMDAwMTI4QUZEIC8qIFBsdWdpblZpZXcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQzE1Q0JCMzcyM0YzN0VDQjAwMzAwQ0M3IC8qIFByZWZlcmVuY2VP
YnNlcnZlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJENTRDMzFCMjEyRjREQTYwMDQ5QzE3NCAv
KiBQcm9jZXNzTGF1bmNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNTEyMSw4ICsxNDQ0NCw2
IEBACiAJCQkJMzFCMzYyOTkyMTQxRjZFODAwN0JGQTUzIC8qIFdlYlByZWZlcmVuY2VzSW50ZXJu
YWxEZWJ1Z0ZlYXR1cmVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQjEwMEYxMUZBMzg1OEEw
MDE3MjlFRSAvKiBXZWJQcmVmZXJlbmNlc0tleXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NC
MTAwRjQxRkEzODU5MjAwMTcyOUVFIC8qIFdlYlByZWZlcmVuY2VzU3RvcmVEZWZhdWx0c01hcC5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQkxQTA0M0EwQTEyNEQxMUE5MDBGRkJGQjUgLyogV2ViUHJv
Y2Vzc0Nvbm5lY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUEwNDNGNjkxMjUxNEQ4QjAw
RkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDMzA2NkJFMTI1QTQ0MjEwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDRTREMjI3MUE0OTE2QzIwMEM3RjE1
MiAvKiBXZWJQcm9jZXNzUG9vbE1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQ0VFN0FEMDEyODE3OTg4MDA5ODI3REEgLyogV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTUxODYsMTUgKzE0NTA3LDYgQEAKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKLQkJQkM4Mjg0
MUIxNkI0RkRGNjAwQTI3OEZFIC8qIFNvdXJjZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhTb3VyY2Vz
QnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9
ICgKLQkJCQk1Q0U5MTIxMzIyOTNDMjc5MDA1QkVDNzggLyogQXV4aWxpYXJ5UHJvY2Vzc01haW4u
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNUM5QTkxMTQyMjhGNjlDRTAwNUM1QjE3IC8qIFhQQ1Nl
cnZpY2VNYWluLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07CiAJCUNEOTU0OTMyMjYxNTkwMDQwMDgzNzJEOSAv
KiBTb3VyY2VzICovID0gewogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtMTUyMzYsMTEgKzE0NTQ4LDYgQEAKIAkJCXRh
cmdldCA9IDM3MkVCQjM4MjAxN0U2NDMwMDA4NTA2NCAvKiBXZWJDb250ZW50LkRldmVsb3BtZW50
ICovOwogCQkJdGFyZ2V0UHJveHkgPSAzNzJFQkI0ODIwMTdFNkNGMDAwODUwNjQgLyogUEJYQ29u
dGFpbmVySXRlbVByb3h5ICovOwogCQl9OwotCQkzNzVFMDYyQjE5MUVBOEQ0MDA0RTNDQUYgLyog
UEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKLQkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7
Ci0JCQl0YXJnZXQgPSA4REMyRUY0RjA0ODZBNjk0MDA5OEIyMTYgLyogV2ViS2l0ICovOwotCQkJ
dGFyZ2V0UHJveHkgPSAzNzVFMDYyQTE5MUVBOEQ0MDA0RTNDQUYgLyogUEJYQ29udGFpbmVySXRl
bVByb3h5ICovOwotCQl9OwogCQkzNzVFMDYzMTE5MUVBOTA0MDA0RTNDQUYgLyogUEJYVGFyZ2V0
RGVwZW5kZW5jeSAqLyA9IHsKIAkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CiAJCQl0YXJn
ZXQgPSA4REMyRUY0RjA0ODZBNjk0MDA5OEIyMTYgLyogV2ViS2l0ICovOwpAQCAtMTUyNTEsMTEg
KzE0NTU4LDYgQEAKIAkJCXRhcmdldCA9IDhEQzJFRjRGMDQ4NkE2OTQwMDk4QjIxNiAvKiBXZWJL
aXQgKi87CiAJCQl0YXJnZXRQcm94eSA9IDM3NUUwNjMyMTkxRUE5MDkwMDRFM0NBRiAvKiBQQlhD
b250YWluZXJJdGVtUHJveHkgKi87CiAJCX07Ci0JCTM3QjFEMDE0MUMxRTQyMTEwMEQ2N0ZFOSAv
KiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0gewotCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5j
eTsKLQkJCXRhcmdldCA9IDFBQzI1RkFGMTJBNDhFQTcwMEJEMjY3MSAvKiBQbHVnaW5Qcm9jZXNz
U2hpbSAqLzsKLQkJCXRhcmdldFByb3h5ID0gMzdCMUQwMTMxQzFFNDIxMTAwRDY3RkU5IC8qIFBC
WENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKLQkJfTsKIAkJMzdGNzQwNzkxMjcyMUY3NDAwOTM4NjlC
IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CiAJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRl
bmN5OwogCQkJdGFyZ2V0ID0gQzBDRTcyODUxMjQ3RTY2ODAwQkMwRUM0IC8qIERlcml2ZWQgU291
cmNlcyAqLzsKQEAgLTE1MzIxLDExICsxNDYyMyw2IEBACiAJCQl0YXJnZXQgPSBCQzgyODNCMDE2
QjRCRjc3MDBBMjc4RkUgLyogTmV0d29ya2luZyAqLzsKIAkJCXRhcmdldFByb3h5ID0gQkM4Mjgz
RDQxNkI0QzAxRjAwQTI3OEZFIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKIAkJfTsKLQkJ
QkM4Mjg0NDYxNkI0RkY2NjAwQTI3OEZFIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7Ci0J
CQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwotCQkJdGFyZ2V0ID0gQkM4Mjg0MUUxNkI0RkRG
NjAwQTI3OEZFIC8qIFBsdWdpbi42NCAqLzsKLQkJCXRhcmdldFByb3h5ID0gQkM4Mjg0NDUxNkI0
RkY2NjAwQTI3OEZFIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKLQkJfTsKIAkJQkNBOEQ0
NjgxNUJDRTBENjAwOURDMUYxIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhUYXJnZXREZXBlbmRlbmN5OwogCQkJdGFyZ2V0ID0gQkMzREU0NjUxNUE5MTc2MzAwOEQy
NkZDIC8qIFdlYkNvbnRlbnQgKi87CkBAIC0xNTM1MSwxMSArMTQ2NDgsNiBAQAogCQkJdGFyZ2V0
ID0gOERDMkVGNEYwNDg2QTY5NDAwOThCMjE2IC8qIFdlYktpdCAqLzsKIAkJCXRhcmdldFByb3h5
ID0gREZFRTM2OTkyNkZBRDExMjAwN0M3OEUwIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsK
IAkJfTsKLQkJRTFBQzJFMkUyMEY3Qjk4ODAwQjA4OTdEIC8qIFBCWFRhcmdldERlcGVuZGVuY3kg
Ki8gPSB7Ci0JCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwotCQkJdGFyZ2V0ID0gRTFBQzJF
MjcyMEY3Qjk0QzAwQjA4OTdEIC8qIFVubG9jayBLZXljaGFpbiAqLzsKLQkJCXRhcmdldFByb3h5
ID0gRTFBQzJFMkQyMEY3Qjk4ODAwQjA4OTdEIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsK
LQkJfTsKIAkJRTFBQzJFMzIyMEY3Qjk5QjAwQjA4OTdEIC8qIFBCWFRhcmdldERlcGVuZGVuY3kg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwogCQkJdGFyZ2V0ID0gRTFBQzJF
MjcyMEY3Qjk0QzAwQjA4OTdEIC8qIFVubG9jayBLZXljaGFpbiAqLzsKQEAgLTE1MzcxLDExICsx
NDY2Myw2IEBACiAJCQl0YXJnZXQgPSBFMUFDMkUyNzIwRjdCOTRDMDBCMDg5N0QgLyogVW5sb2Nr
IEtleWNoYWluICovOwogCQkJdGFyZ2V0UHJveHkgPSBFMUFDMkUzNTIwRjdCOUExMDBCMDg5N0Qg
LyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOwogCQl9OwotCQlFMUFDMkUzQTIwRjdCOUE3MDBC
MDg5N0QgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKLQkJCWlzYSA9IFBCWFRhcmdldERl
cGVuZGVuY3k7Ci0JCQl0YXJnZXQgPSBFMUFDMkUyNzIwRjdCOTRDMDBCMDg5N0QgLyogVW5sb2Nr
IEtleWNoYWluICovOwotCQkJdGFyZ2V0UHJveHkgPSBFMUFDMkUzOTIwRjdCOUE3MDBCMDg5N0Qg
LyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOwotCQl9OwogCQlFMUFDMkUzRTIwRjdCOUMwMDBC
MDg5N0QgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKIAkJCWlzYSA9IFBCWFRhcmdldERl
cGVuZGVuY3k7CiAJCQl0YXJnZXQgPSBFMUFDMkUyNzIwRjdCOTRDMDBCMDg5N0QgLyogVW5sb2Nr
IEtleWNoYWluICovOwpAQCAtMTU0MTEsMzMgKzE0Njk4LDYgQEAKIAkJCX07CiAJCQluYW1lID0g
UmVsZWFzZTsKIAkJfTsKLQkJMUFDMjVGQjExMkE0OEVBNzAwQkQyNjcxIC8qIERlYnVnICovID0g
ewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJl
ZmVyZW5jZSA9IEExRUREMkRCMTg4NEI5NjQwMEJCRkU5OCAvKiBQbHVnaW5Qcm9jZXNzU2hpbS54
Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJT1RIRVJfTERGTEFHUyA9ICIk
KE9USEVSX0xERkxBR1MpIjsKLQkJCQlQUk9EVUNUX05BTUUgPSBQbHVnaW5Qcm9jZXNzU2hpbTsK
LQkJCX07Ci0JCQluYW1lID0gRGVidWc7Ci0JCX07Ci0JCTFBQzI1RkIyMTJBNDhFQTcwMEJEMjY3
MSAvKiBSZWxlYXNlICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQli
YXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEExRUREMkRCMTg4NEI5NjQwMEJCRkU5OCAvKiBQ
bHVnaW5Qcm9jZXNzU2hpbS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJ
T1RIRVJfTERGTEFHUyA9ICIkKE9USEVSX0xERkxBR1MpIjsKLQkJCQlQUk9EVUNUX05BTUUgPSBQ
bHVnaW5Qcm9jZXNzU2hpbTsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJMUFD
MjVGQjMxMkE0OEVBNzAwQkQyNjcxIC8qIFByb2R1Y3Rpb24gKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1
aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQTFFREQy
REIxODg0Qjk2NDAwQkJGRTk4IC8qIFBsdWdpblByb2Nlc3NTaGltLnhjY29uZmlnICovOwotCQkJ
YnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlPVEhFUl9MREZMQUdTID0gIiQoT1RIRVJfTERGTEFHUyki
OwotCQkJCVBST0RVQ1RfTkFNRSA9IFBsdWdpblByb2Nlc3NTaGltOwotCQkJfTsKLQkJCW5hbWUg
PSBQcm9kdWN0aW9uOwotCQl9OwogCQkxREVCOTFBRTA4NzMzREE1MDAxMEU5Q0QgLyogRGVidWcg
Ki8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJhc2VDb25maWd1cmF0
aW9uUmVmZXJlbmNlID0gQkNCODZGNEIxMTZBQUFDRDAwQ0UyMEI3IC8qIFdlYktpdC54Y2NvbmZp
ZyAqLzsKQEAgLTE1NzY0LDI3ICsxNTAyNCw2IEBACiAJCQl9OwogCQkJbmFtZSA9IFByb2R1Y3Rp
b247CiAJCX07Ci0JCUJDODI4NDJCMTZCNEZERjcwMEEyNzhGRSAvKiBEZWJ1ZyAqLyA9IHsKLQkJ
CWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVu
Y2UgPSBCQzgyODNGNDE2QjRGQzUzMDBBMjc4RkUgLyogUGx1Z2luU2VydmljZS54Y2NvbmZpZyAq
LzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9Owot
CQlCQzgyODQyQzE2QjRGREY3MDBBMjc4RkUgLyogUmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhD
QnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzgy
ODNGNDE2QjRGQzUzMDBBMjc4RkUgLyogUGx1Z2luU2VydmljZS54Y2NvbmZpZyAqLzsKLQkJCWJ1
aWxkU2V0dGluZ3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0JCUJDODI4
NDJEMTZCNEZERjcwMEEyNzhGRSAvKiBQcm9kdWN0aW9uICovID0gewotCQkJaXNhID0gWENCdWls
ZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDODI4M0Y0
MTZCNEZDNTMwMEEyNzhGRSAvKiBQbHVnaW5TZXJ2aWNlLnhjY29uZmlnICovOwotCQkJYnVpbGRT
ZXR0aW5ncyA9IHsKLQkJCX07Ci0JCQluYW1lID0gUHJvZHVjdGlvbjsKLQkJfTsKIAkJQzBDRTcy
ODYxMjQ3RTY2ODAwQkMwRUM0IC8qIERlYnVnICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZp
Z3VyYXRpb247CiAJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDVEQUQ3M0YxMTE2RkY5
MEMwMEVFNTM5NiAvKiBCYXNlVGFyZ2V0LnhjY29uZmlnICovOwpAQCAtMTU4OTYsMTYgKzE1MTM1
LDYgQEAKIAkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKIAkJCWRlZmF1bHRD
b25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CiAJCX07Ci0JCTFBQzI1RkJBMTJBNDhFQjYw
MEJEMjY3MSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAi
UGx1Z2luUHJvY2Vzc1NoaW0iICovID0gewotCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsK
LQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0JCQkJMUFDMjVGQjExMkE0OEVBNzAwQkQyNjcx
IC8qIERlYnVnICovLAotCQkJCTFBQzI1RkIyMTJBNDhFQTcwMEJEMjY3MSAvKiBSZWxlYXNlICov
LAotCQkJCTFBQzI1RkIzMTJBNDhFQTcwMEJEMjY3MSAvKiBQcm9kdWN0aW9uICovLAotCQkJKTsK
LQkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKLQkJCWRlZmF1bHRDb25maWd1
cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247Ci0JCX07CiAJCTFERUI5MUFEMDg3MzNEQTUwMDEwRTlD
RCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiV2ViS2l0
IiAqLyA9IHsKIAkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CiAJCQlidWlsZENvbmZpZ3Vy
YXRpb25zID0gKApAQCAtMTYwNDYsMTYgKzE1Mjc1LDYgQEAKIAkJCWRlZmF1bHRDb25maWd1cmF0
aW9uSXNWaXNpYmxlID0gMDsKIAkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rp
b247CiAJCX07Ci0JCUJDODI4NDJBMTZCNEZERjcwMEEyNzhGRSAvKiBCdWlsZCBjb25maWd1cmF0
aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiUGx1Z2luLjY0IiAqLyA9IHsKLQkJCWlzYSA9
IFhDQ29uZmlndXJhdGlvbkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAotCQkJCUJD
ODI4NDJCMTZCNEZERjcwMEEyNzhGRSAvKiBEZWJ1ZyAqLywKLQkJCQlCQzgyODQyQzE2QjRGREY3
MDBBMjc4RkUgLyogUmVsZWFzZSAqLywKLQkJCQlCQzgyODQyRDE2QjRGREY3MDBBMjc4RkUgLyog
UHJvZHVjdGlvbiAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9
IDA7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9uOwotCQl9OwogCQlD
MENFNzI4OTEyNDdFNjg2MDBCQzBFQzQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQ
QlhBZ2dyZWdhdGVUYXJnZXQgIkRlcml2ZWQgU291cmNlcyIgKi8gPSB7CiAJCQlpc2EgPSBYQ0Nv
bmZpZ3VyYXRpb25MaXN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRob2QuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViNGE5NmUxNzk0Y2I4ZDkxZWQzOWYx
NWQzZDQ1YmYwMDk2OTQ4YzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1l
dGhvZC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNOUE1ldGhvZC5oIgotCi0jaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJKU05QT2JqZWN0LmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvRXJyb3IuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9G
dW5jdGlvblByb3RvdHlwZS5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lzb1N1YnNwYWNl
UGVyVk0uaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZS5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTR2xvYmFsT2JqZWN0SW5s
aW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9KU0hUTUxFbGVtZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9KU1BsdWdpbkVsZW1l
bnRGdW5jdGlvbnMuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgSlND
OwotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZ
X0RFU1RSVUNUSUJMRShKU05QTWV0aG9kKTsKLQotY29uc3QgQ2xhc3NJbmZvIEpTTlBNZXRob2Q6
OnNfaW5mbyA9IHsgIk5QTWV0aG9kIiwgJkludGVybmFsRnVuY3Rpb246OnNfaW5mbywgbnVsbHB0
ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU05QTWV0aG9kKSB9OwotCi1zdGF0aWMg
SlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjYWxsTWV0aG9kKTsKLQotSlNOUE1ldGhvZDo6SlNO
UE1ldGhvZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgTlBJZGVudGlmaWVyIG5wSWRlbnRpZmllcikKLSAgICA6IEludGVybmFsRnVuY3Rpb24oZ2xv
YmFsT2JqZWN0LT52bSgpLCBzdHJ1Y3R1cmUsIGNhbGxNZXRob2QsIG51bGxwdHIpCi0gICAgLCBt
X25wSWRlbnRpZmllcihucElkZW50aWZpZXIpCi17Ci19Ci0KLXZvaWQgSlNOUE1ldGhvZDo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0sIDAsIG5hbWUpOwotICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygp
KSk7Ci19Ci0KLUlzb1N1YnNwYWNlKiBKU05QTWV0aG9kOjpzdWJzcGFjZUZvckltcGwoVk0mIHZt
KQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJc29TdWJzcGFjZVBlclZNPiBwZXJWTShb
XSAoVk0mIHZtKSB7IHJldHVybiBJU09fU1VCU1BBQ0VfUEFSQU1FVEVSUyh2bS5jZWxsSGVhcENl
bGxUeXBlLmdldCgpLCBKU05QTWV0aG9kKTsgfSk7Ci0gICAgcmV0dXJuICZwZXJWTS5nZXQoKS5m
b3JWTSh2bSk7Ci19Ci0KLUpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxsTWV0aG9kLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQotewotICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU05QTWV0aG9kKiBqc05QTWV0aG9kID0ganNDYXN0PEpT
TlBNZXRob2QqPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwotCi0gICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwotCi0gICAgLy8gQ2hlY2sgaWYgd2UncmUgY2Fs
bGluZyBhIG1ldGhvZCBvbiB0aGUgcGx1Zy1pbiBzY3JpcHQgb2JqZWN0LgotICAgIGlmICh0aGlz
VmFsdWUuaW5oZXJpdHM8SlNIVE1MRWxlbWVudD4odm0pKSB7Ci0gICAgICAgIEpTSFRNTEVsZW1l
bnQqIGVsZW1lbnQgPSBqc0Nhc3Q8SlNIVE1MRWxlbWVudCo+KGFzT2JqZWN0KHRoaXNWYWx1ZSkp
OwotCi0gICAgICAgIC8vIFRyeSB0byBnZXQgdGhlIHNjcmlwdCBvYmplY3QgZnJvbSB0aGUgZWxl
bWVudAotICAgICAgICBpZiAoSlNPYmplY3QqIHNjcmlwdE9iamVjdCA9IHBsdWdpblNjcmlwdE9i
amVjdChnbG9iYWxPYmplY3QsIGVsZW1lbnQpKQotICAgICAgICAgICAgdGhpc1ZhbHVlID0gc2Ny
aXB0T2JqZWN0OwotICAgIH0KLQotICAgIGlmICh0aGlzVmFsdWUuaW5oZXJpdHM8SlNOUE9iamVj
dD4odm0pKSB7Ci0gICAgICAgIEpTTlBPYmplY3QqIGpzTlBPYmplY3QgPSBqc0Nhc3Q8SlNOUE9i
amVjdCo+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOUE9iamVjdC0+Y2FsbE1ldGhvZChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwganNO
UE1ldGhvZC0+bnBJZGVudGlmaWVyKCkpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRob2QuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRob2QuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc2OTAyNzE2ODg1NTAxYzdmNTI3OTkwMzA4N2Fl
ZTRlOGU0NGZiZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0aG9kLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IEpTTlBNZXRob2RfaAotI2RlZmluZSBKU05QTWV0aG9kX2gKLQotI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5
cGUuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnRlcm5hbEZ1bmN0aW9uLmg+Ci0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3QuaD4KLQotdHlwZWRlZiB2b2lkKiBO
UElkZW50aWZpZXI7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi0vLyBBIEpTT2JqZWN0IHRoYXQg
d3JhcHMgYW4gTlBNZXRob2QuCi1jbGFzcyBKU05QTWV0aG9kIGZpbmFsIDogcHVibGljIEpTQzo6
SW50ZXJuYWxGdW5jdGlvbiB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgQmFzZSA9IEpTQzo6SW50ZXJu
YWxGdW5jdGlvbjsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNw
YWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwotICAg
IH0KLQotICAgIHN0YXRpYyBKU05QTWV0aG9kKiBjcmVhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIE5QSWRlbnRpZmllciBucElkZW50KQot
ICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgICAg
IEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0
LT52bSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25Qcm90b3R5cGUoKSk7
Ci0gICAgICAgIEpTTlBNZXRob2QqIG1ldGhvZCA9IG5ldyAoSlNDOjphbGxvY2F0ZUNlbGw8SlNO
UE1ldGhvZD4odm0uaGVhcCkpIEpTTlBNZXRob2QoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIG5w
SWRlbnQpOwotICAgICAgICBtZXRob2QtPmZpbmlzaENyZWF0aW9uKHZtLCBuYW1lKTsKLSAgICAg
ICAgcmV0dXJuIG1ldGhvZDsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0KLSAgICBOUElk
ZW50aWZpZXIgbnBJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9ucElkZW50aWZpZXI7IH0K
LQotcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mKTsKLSAgICAKLSAgICBKU05QTWV0aG9kKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlN0cnVjdHVyZSosIE5QSWRlbnRpZmllcik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLQotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6
VHlwZUluZm8oSlNDOjpJbnRlcm5hbEZ1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwotICAgIH0KLQotICAgIE5QSWRlbnRpZmllciBtX25wSWRlbnRpZmllcjsKLX07Ci0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLQotI2VuZGlmIC8vIEpTTlBNZXRob2RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOWRmNDcwMDU2YjBkY2EyODIyNzZkNzllMzc0ZWU0NWY3ZGY0
YjQzZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDU0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSlNOUE9iamVjdC5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJKU05QTWV0aG9kLmgiCi0jaW5jbHVkZSAiTlBKU09i
amVjdC5oIgotI2luY2x1ZGUgIk5QUnVudGltZU9iamVjdE1hcC5oIgotI2luY2x1ZGUgIk5QUnVu
dGltZVV0aWxpdGllcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0F1eGlsaWFyeUJhcnJp
ZXJJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRXJyb3IuaD4KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JZGVudGlmaWVySW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0lzb1N1YnNwYWNlUGVyVk0uaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNMb2NrLmg+Ci0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT2JqZWN0UHJvdG90eXBlLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9Db21tb25WTS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRE9NV2luZG93Lmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9JZGVudGlmaWVyUmVwLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9KU0RPTVdpbmRv
d0Jhc2UuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBKU0M7
Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9H
RVRURVIocHJvcGVydHlHZXR0ZXIpOwotc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIo
bWV0aG9kR2V0dGVyKTsKLQotc3RhdGljIE5QSWRlbnRpZmllciBucElkZW50aWZpZXJGcm9tSWRl
bnRpZmllcihQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIFN0cmluZyBuYW1lKHBy
b3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwotICAgIC8vIElmIHRoZSBwcm9wZXJ0eU5hbWUgaXMg
U3ltYm9sLgotICAgIGlmIChuYW1lLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyPihJZGVudGlmaWVyUmVwOjpnZXQo
bmFtZS51dGY4KCkuZGF0YSgpKSk7Ci19Ci0KLXN0YXRpYyBKU0M6OkV4Y2VwdGlvbiogdGhyb3dJ
bnZhbGlkQWNjZXNzRXJyb3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFRo
cm93U2NvcGUmIHNjb3BlKQotewotICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlUmVmZXJlbmNlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRyeWluZyB0byBhY2Nlc3Mgb2JqZWN0IGZyb20gZGVzdHJveWVkIHBsdWctaW4uIikpOwot
fQotCi1jb25zdCBDbGFzc0luZm8gSlNOUE9iamVjdDo6c19pbmZvID0geyAiTlBPYmplY3QiLCAm
QmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTTlBP
YmplY3QpIH07Ci0KLUpTTlBPYmplY3Q6OkpTTlBPYmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5QUnVudGltZU9iamVjdE1hcCogb2JqZWN0
TWFwLCBOUE9iamVjdCogbnBPYmplY3QpCi0gICAgOiBKU0Rlc3RydWN0aWJsZU9iamVjdChnbG9i
YWxPYmplY3QtPnZtKCksIHN0cnVjdHVyZSkKLSAgICAsIG1fb2JqZWN0TWFwKG9iamVjdE1hcCkK
LSAgICAsIG1fbnBPYmplY3QobnBPYmplY3QpCi17Ci0gICAgQVNTRVJUKGdsb2JhbE9iamVjdCA9
PSBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpKTsKLX0KLQotdm9pZCBKU05QT2JqZWN0OjpmaW5p
c2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAg
QVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKLQotICAgIC8vIFdlIHNob3VsZCBuZXZlciBo
YXZlIGFuIE5QSlNPYmplY3QgaW5zaWRlIGEgSlNOUE9iamVjdC4KLSAgICBBU1NFUlQoIU5QSlNP
YmplY3Q6OmlzTlBKU09iamVjdChtX25wT2JqZWN0KSk7Ci0KLSAgICByZXRhaW5OUE9iamVjdCht
X25wT2JqZWN0KTsKLX0KLQotSlNOUE9iamVjdDo6fkpTTlBPYmplY3QoKQotewotICAgIGlmICht
X25wT2JqZWN0KQotICAgICAgICBpbnZhbGlkYXRlKCk7Ci19Ci0KLXZvaWQgSlNOUE9iamVjdDo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAgc3RhdGljX2Nhc3Q8SlNOUE9iamVjdCo+KGNl
bGwpLT5KU05QT2JqZWN0Ojp+SlNOUE9iamVjdCgpOwotfQotCi12b2lkIEpTTlBPYmplY3Q6Omlu
dmFsaWRhdGUoKQotewotICAgIEFTU0VSVChtX25wT2JqZWN0KTsKLQotICAgIHJlbGVhc2VOUE9i
amVjdChtX25wT2JqZWN0KTsKLSAgICBtX25wT2JqZWN0ID0gMDsKLX0KLQotTlBPYmplY3QqIEpT
TlBPYmplY3Q6OmxlYWtOUE9iamVjdCgpCi17Ci0gICAgQVNTRVJUKG1fbnBPYmplY3QpOwotCi0g
ICAgTlBPYmplY3QqIG9iamVjdCA9IG1fbnBPYmplY3Q7Ci0gICAgbV9ucE9iamVjdCA9IDA7Ci0g
ICAgcmV0dXJuIG9iamVjdDsKLX0KLQotSlNWYWx1ZSBKU05QT2JqZWN0OjpjYWxsTWV0aG9kKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
TlBJZGVudGlmaWVyIG1ldGhvZE5hbWUpCi17Ci0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9i
amVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0K
LSAgICBBU1NFUlRfVEhJU19HQ19PQkpFQ1RfSU5IRVJJVFMoaW5mbygpKTsKLSAgICBpZiAoIW1f
bnBPYmplY3QpCi0gICAgICAgIHJldHVybiB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBzY29wZSk7Ci0KLSAgICAvLyBJZiB0aGUgcHJvcGVydHlOYW1lIGlzIHN5
bWJvbC4KLSAgICBpZiAoIW1ldGhvZE5hbWUpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotCi0gICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQo
KTsKLSAgICBWZWN0b3I8TlBWYXJpYW50LCA4PiBhcmd1bWVudHMoYXJndW1lbnRDb3VudCk7Ci0K
LSAgICAvLyBDb252ZXJ0IGFsbCBhcmd1bWVudHMgdG8gTlBWYXJpYW50cy4KLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkKLSAgICAgICAgbV9vYmplY3RNYXAt
PmNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudChpKSwgYXJndW1lbnRzW2ldKTsKLQotICAgIC8vIENhbGxpbmcg
TlBDbGFzczo6aW52b2tlIHdpbGwgY2FsbCBpbnRvIHBsdWctaW4gY29kZSwgYW5kIHRoZXJlJ3Mg
bm8gdGVsbGluZyB3aGF0IHRoZSBwbHVnLWluIGNhbiBkby4KLSAgICAvLyAoaW5jbHVkaW5nIGRl
c3Ryb3lpbmcgdGhlIHBsdWctaW4pLiBCZWNhdXNlIG9mIHRoaXMsIHdlIG1ha2Ugc3VyZSB0byBr
ZWVwIHRoZSBwbHVnLWluIGFsaXZlIHVudGlsIAotICAgIC8vIHRoZSBjYWxsIGhhcyBmaW5pc2hl
ZC4KLSAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBwcm90ZWN0b3IobV9v
YmplY3RNYXApOwotCi0gICAgYm9vbCByZXR1cm5WYWx1ZTsKLSAgICBOUFZhcmlhbnQgcmVzdWx0
OwotICAgIFZPSURfVE9fTlBWQVJJQU5UKHJlc3VsdCk7Ci0gICAgCi0gICAgewotICAgICAgICBK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7Ci0gICAgICAgIHJl
dHVyblZhbHVlID0gbV9ucE9iamVjdC0+X2NsYXNzLT5pbnZva2UobV9ucE9iamVjdCwgbWV0aG9k
TmFtZSwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1lbnRDb3VudCwgJnJlc3VsdCk7Ci0gICAgICAg
IE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGxleGlj
YWxHbG9iYWxPYmplY3QpOwotICAgIH0KLQotICAgIC8vIFJlbGVhc2UgYWxsIGFyZ3VtZW50cy4K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkKLSAgICAgICAg
cmVsZWFzZU5QVmFyaWFudFZhbHVlKCZhcmd1bWVudHNbaV0pOwotCi0gICAgaWYgKCFyZXR1cm5W
YWx1ZSkKLSAgICAgICAgdGhyb3dFeGNlcHRpb24obGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUs
IGNyZWF0ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsICJFcnJvciBjYWxsaW5nIG1ldGhvZCBv
biBOUE9iamVjdC4iKSk7Ci0KLSAgICBKU1ZhbHVlIHByb3BlcnR5VmFsdWUgPSBtX29iamVjdE1h
cC0+Y29udmVydE5QVmFyaWFudFRvSlNWYWx1ZShnbG9iYWxPYmplY3QoKSwgcmVzdWx0KTsKLSAg
ICByZWxlYXNlTlBWYXJpYW50VmFsdWUoJnJlc3VsdCk7Ci0gICAgcmV0dXJuIHByb3BlcnR5VmFs
dWU7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU05QT2JqZWN0OjpjYWxsT2JqZWN0KEpTQzo6SlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUp
Ci17Ci0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBBU1NFUlRfVEhJU19HQ19PQkpF
Q1RfSU5IRVJJVFMoaW5mbygpKTsKLSAgICBpZiAoIW1fbnBPYmplY3QpCi0gICAgICAgIHJldHVy
biB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSk7Ci0K
LSAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOwot
ICAgIFZlY3RvcjxOUFZhcmlhbnQsIDg+IGFyZ3VtZW50cyhhcmd1bWVudENvdW50KTsKLSAgICAK
LSAgICAvLyBDb252ZXJ0IGFsbCBhcmd1bWVudHMgdG8gTlBWYXJpYW50cy4KLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkKLSAgICAgICAgbV9vYmplY3RNYXAt
PmNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudChpKSwgYXJndW1lbnRzW2ldKTsKLQotICAgIC8vIENhbGxpbmcg
TlBDbGFzczo6aW52b2tlRGVmYXVsdCB3aWxsIGNhbGwgaW50byBwbHVnLWluIGNvZGUsIGFuZCB0
aGVyZSdzIG5vIHRlbGxpbmcgd2hhdCB0aGUgcGx1Zy1pbiBjYW4gZG8uCi0gICAgLy8gKGluY2x1
ZGluZyBkZXN0cm95aW5nIHRoZSBwbHVnLWluKS4gQmVjYXVzZSBvZiB0aGlzLCB3ZSBtYWtlIHN1
cmUgdG8ga2VlcCB0aGUgcGx1Zy1pbiBhbGl2ZSB1bnRpbCAKLSAgICAvLyB0aGUgY2FsbCBoYXMg
ZmluaXNoZWQuCi0gICAgTlBSdW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVj
dG9yKG1fb2JqZWN0TWFwKTsKLSAgICAKLSAgICBib29sIHJldHVyblZhbHVlOwotICAgIE5QVmFy
aWFudCByZXN1bHQ7Ci0gICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsKLQotICAgIHsKLSAg
ICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwotICAg
ICAgICByZXR1cm5WYWx1ZSA9IG1fbnBPYmplY3QtPl9jbGFzcy0+aW52b2tlRGVmYXVsdChtX25w
T2JqZWN0LCBhcmd1bWVudHMuZGF0YSgpLCBhcmd1bWVudENvdW50LCAmcmVzdWx0KTsKLSAgICAg
ICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUobGV4
aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgfQotCi0gICAgLy8gUmVsZWFzZSBhbGwgYXJndW1lbnRz
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKQotICAgICAg
ICByZWxlYXNlTlBWYXJpYW50VmFsdWUoJmFyZ3VtZW50c1tpXSk7Ci0KLSAgICBpZiAoIXJldHVy
blZhbHVlKQotICAgICAgICB0aHJvd0V4Y2VwdGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29w
ZSwgY3JlYXRlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgIkVycm9yIGNhbGxpbmcgbWV0aG9k
IG9uIE5QT2JqZWN0LiIpKTsKLQotICAgIEpTVmFsdWUgcHJvcGVydHlWYWx1ZSA9IG1fb2JqZWN0
TWFwLT5jb252ZXJ0TlBWYXJpYW50VG9KU1ZhbHVlKGdsb2JhbE9iamVjdCgpLCByZXN1bHQpOwot
ICAgIHJlbGVhc2VOUFZhcmlhbnRWYWx1ZSgmcmVzdWx0KTsKLSAgICByZXR1cm4gcHJvcGVydHlW
YWx1ZTsKLX0KLQotSlNWYWx1ZSBKU05QT2JqZWN0OjpjYWxsQ29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAg
IFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgQVNTRVJUX1RISVNfR0NfT0JKRUNUX0lOSEVS
SVRTKGluZm8oKSk7Ci0gICAgaWYgKCFtX25wT2JqZWN0KQotICAgICAgICByZXR1cm4gdGhyb3dJ
bnZhbGlkQWNjZXNzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUpOwotCi0gICAgc2l6
ZV90IGFyZ3VtZW50Q291bnQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsKLSAgICBWZWN0
b3I8TlBWYXJpYW50LCA4PiBhcmd1bWVudHMoYXJndW1lbnRDb3VudCk7Ci0KLSAgICAvLyBDb252
ZXJ0IGFsbCBhcmd1bWVudHMgdG8gTlBWYXJpYW50cy4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGFyZ3VtZW50Q291bnQ7ICsraSkKLSAgICAgICAgbV9vYmplY3RNYXAtPmNvbnZlcnRKU1Zh
bHVlVG9OUFZhcmlhbnQobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudChpKSwgYXJndW1lbnRzW2ldKTsKLQotICAgIC8vIENhbGxpbmcgTlBDbGFzczo6Y29u
c3RydWN0IHdpbGwgY2FsbCBpbnRvIHBsdWctaW4gY29kZSwgYW5kIHRoZXJlJ3Mgbm8gdGVsbGlu
ZyB3aGF0IHRoZSBwbHVnLWluIGNhbiBkby4KLSAgICAvLyAoaW5jbHVkaW5nIGRlc3Ryb3lpbmcg
dGhlIHBsdWctaW4pLiBCZWNhdXNlIG9mIHRoaXMsIHdlIG1ha2Ugc3VyZSB0byBrZWVwIHRoZSBw
bHVnLWluIGFsaXZlIHVudGlsIAotICAgIC8vIHRoZSBjYWxsIGhhcyBmaW5pc2hlZC4KLSAgICBO
UFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBwcm90ZWN0b3IobV9vYmplY3RNYXAp
OwotICAgIAotICAgIGJvb2wgcmV0dXJuVmFsdWU7Ci0gICAgTlBWYXJpYW50IHJlc3VsdDsKLSAg
ICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHQpOwotICAgIAotICAgIHsKLSAgICAgICAgSlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwotICAgICAgICByZXR1cm5W
YWx1ZSA9IG1fbnBPYmplY3QtPl9jbGFzcy0+Y29uc3RydWN0KG1fbnBPYmplY3QsIGFyZ3VtZW50
cy5kYXRhKCksIGFyZ3VtZW50Q291bnQsICZyZXN1bHQpOwotICAgICAgICBOUFJ1bnRpbWVPYmpl
Y3RNYXA6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKLSAgICB9Ci0KLSAgICBpZiAoIXJldHVyblZhbHVlKQotICAgICAgICB0aHJvd0V4Y2VwdGlv
bihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgIkVycm9yIGNhbGxpbmcgbWV0aG9kIG9uIE5QT2JqZWN0LiIpKTsKLSAgICAKLSAgICBK
U1ZhbHVlIHZhbHVlID0gbV9vYmplY3RNYXAtPmNvbnZlcnROUFZhcmlhbnRUb0pTVmFsdWUoZ2xv
YmFsT2JqZWN0KCksIHJlc3VsdCk7Ci0gICAgcmVsZWFzZU5QVmFyaWFudFZhbHVlKCZyZXN1bHQp
OwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04oY2FsbE5QSlNPYmplY3QpOwotc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY29u
c3RydWN0V2l0aENvbnN0cnVjdG9yKTsKLQotSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxO
UEpTT2JqZWN0LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpKQotewotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBjYWxsRnJhbWUtPmpzQ2FsbGVlKCk7
Ci0gICAgQVNTRVJUX1VOVVNFRChnbG9iYWxPYmplY3QsIG9iamVjdC0+aW5oZXJpdHM8SlNOUE9i
amVjdD4oZ2xvYmFsT2JqZWN0LT52bSgpKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzQ2FzdDxKU05QT2JqZWN0Kj4ob2JqZWN0KS0+Y2FsbE9iamVjdChnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZSkpOwotfQotCi1DYWxsRGF0YSBKU05QT2JqZWN0OjpnZXRDYWxsRGF0YShKU0NlbGwq
IGNlbGwpCi17Ci0gICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgSlNOUE9iamVjdCogdGhpc09i
amVjdCA9IEpTQzo6anNDYXN0PEpTTlBPYmplY3QqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgaWYgKHRoaXNPYmplY3QtPm1f
bnBPYmplY3QgJiYgdGhpc09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5pbnZva2VEZWZhdWx0
KSB7Ci0gICAgICAgIGNhbGxEYXRhLnR5cGUgPSBDYWxsRGF0YTo6VHlwZTo6TmF0aXZlOwotICAg
ICAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjYWxsTlBKU09iamVjdDsKLSAgICB9Ci0g
ICAgcmV0dXJuIGNhbGxEYXRhOwotfQotCi1KU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY29uc3Ry
dWN0V2l0aENvbnN0cnVjdG9yLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpKQotewotICAgIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciA9IGNhbGxGcmFt
ZS0+anNDYWxsZWUoKTsKLSAgICBBU1NFUlRfVU5VU0VEKGdsb2JhbE9iamVjdCwgY29uc3RydWN0
b3ItPmluaGVyaXRzPEpTTlBPYmplY3Q+KGdsb2JhbE9iamVjdC0+dm0oKSkpOwotCi0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0Nhc3Q8SlNOUE9iamVjdCo+KGNvbnN0cnVjdG9yKS0+Y2Fs
bENvbnN0cnVjdG9yKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lKSk7Ci19Ci0KLUNhbGxEYXRhIEpT
TlBPYmplY3Q6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiBjZWxsKQotewotICAgIENhbGxEYXRh
IGNvbnN0cnVjdERhdGE7Ci0KLSAgICBKU05QT2JqZWN0KiB0aGlzT2JqZWN0ID0gSlNDOjpqc0Nh
c3Q8SlNOUE9iamVjdCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKLSAgICBpZiAodGhpc09iamVjdC0+bV9ucE9iamVjdCAmJiB0aGlz
T2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3MtPmNvbnN0cnVjdCkgewotICAgICAgICBjb25zdHJ1
Y3REYXRhLnR5cGUgPSBDYWxsRGF0YTo6VHlwZTo6TmF0aXZlOwotICAgICAgICBjb25zdHJ1Y3RE
YXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdFdpdGhDb25zdHJ1Y3RvcjsKLSAgICB9Ci0K
LSAgICByZXR1cm4gY29uc3RydWN0RGF0YTsKLX0KLQotYm9vbCBKU05QT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
LXsKLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIEpTTlBPYmplY3QqIHRoaXNPYmpl
Y3QgPSBKU0M6OmpzQ2FzdDxKU05QT2JqZWN0Kj4ob2JqZWN0KTsKLSAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgaWYgKCF0aGlzT2JqZWN0LT5t
X25wT2JqZWN0KSB7Ci0gICAgICAgIHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAg
ICBOUElkZW50aWZpZXIgbnBJZGVudGlmaWVyID0gbnBJZGVudGlmaWVyRnJvbUlkZW50aWZpZXIo
cHJvcGVydHlOYW1lKTsKLSAgICAvLyBJZiB0aGUgcHJvcGVydHlOYW1lIGlzIHN5bWJvbC4KLSAg
ICBpZiAoIW5wSWRlbnRpZmllcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQ2Fs
bGluZyBOUENsYXNzOjppbnZva2Ugd2lsbCBjYWxsIGludG8gcGx1Zy1pbiBjb2RlLCBhbmQgdGhl
cmUncyBubyB0ZWxsaW5nIHdoYXQgdGhlIHBsdWctaW4gY2FuIGRvLgotICAgIC8vIChpbmNsdWRp
bmcgZGVzdHJveWluZyB0aGUgcGx1Zy1pbikuIEJlY2F1c2Ugb2YgdGhpcywgd2UgbWFrZSBzdXJl
IHRvIGtlZXAgdGhlIHBsdWctaW4gYWxpdmUgdW50aWwgCi0gICAgLy8gdGhlIGNhbGwgaGFzIGZp
bmlzaGVkLgotICAgIE5QUnVudGltZU9iamVjdE1hcDo6UGx1Z2luUHJvdGVjdG9yIHByb3RlY3Rv
cih0aGlzT2JqZWN0LT5tX29iamVjdE1hcCk7Ci0KLSAgICAvLyBGaXJzdCwgY2hlY2sgaWYgdGhl
IE5QT2JqZWN0IGhhcyBhIHByb3BlcnR5IHdpdGggdGhpcyBuYW1lLgotICAgIGlmICh0aGlzT2Jq
ZWN0LT5tX25wT2JqZWN0LT5fY2xhc3MtPmhhc1Byb3BlcnR5ICYmIHRoaXNPYmplY3QtPm1fbnBP
YmplY3QtPl9jbGFzcy0+aGFzUHJvcGVydHkodGhpc09iamVjdC0+bV9ucE9iamVjdCwgbnBJZGVu
dGlmaWVyKSkgewotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSksIHByb3BlcnR5
R2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gU2Vjb25kLCBj
aGVjayBpZiB0aGUgTlBPYmplY3QgaGFzIGEgbWV0aG9kIHdpdGggdGhpcyBuYW1lLgotICAgIGlm
ICh0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3MtPmhhc01ldGhvZCAmJiB0aGlzT2JqZWN0
LT5tX25wT2JqZWN0LT5fY2xhc3MtPmhhc01ldGhvZCh0aGlzT2JqZWN0LT5tX25wT2JqZWN0LCBu
cElkZW50aWZpZXIpKSB7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSwgbWV0aG9kR2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBKU05QT2JqZWN0OjpwdXQoSlNDZWxsKiBj
ZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JikKLXsKLSAgICBWTSYg
dm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIEpTTlBPYmplY3QqIHRoaXNPYmplY3QgPSBKU0M6Ompz
Q2FzdDxKU05QT2JqZWN0Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGlmICghdGhpc09iamVjdC0+bV9ucE9iamVjdCkgewot
ICAgICAgICB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29w
ZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBOUElkZW50aWZpZXIgbnBJ
ZGVudGlmaWVyID0gbnBJZGVudGlmaWVyRnJvbUlkZW50aWZpZXIocHJvcGVydHlOYW1lKTsKLSAg
ICAvLyBJZiB0aGUgcHJvcGVydHlOYW1lIGlzIHN5bWJvbC4KLSAgICBpZiAoIW5wSWRlbnRpZmll
cikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmICghdGhpc09iamVjdC0+bV9u
cE9iamVjdC0+X2NsYXNzLT5oYXNQcm9wZXJ0eSB8fCAhdGhpc09iamVjdC0+bV9ucE9iamVjdC0+
X2NsYXNzLT5oYXNQcm9wZXJ0eSh0aGlzT2JqZWN0LT5tX25wT2JqZWN0LCBucElkZW50aWZpZXIp
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdGhyb3cgYW4gZXhjZXB0aW9uIGhlcmU/
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIXRoaXNPYmplY3QtPm1f
bnBPYmplY3QtPl9jbGFzcy0+c2V0UHJvcGVydHkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIE5QVmFyaWFudCB2YXJpYW50OwotICAgIHRoaXNPYmplY3QtPm1fb2JqZWN0TWFwLT5jb252
ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCB2YXJpYW50
KTsKLQotICAgIC8vIENhbGxpbmcgTlBDbGFzczo6c2V0UHJvcGVydHkgd2lsbCBjYWxsIGludG8g
cGx1Zy1pbiBjb2RlLCBhbmQgdGhlcmUncyBubyB0ZWxsaW5nIHdoYXQgdGhlIHBsdWctaW4gY2Fu
IGRvLgotICAgIC8vIChpbmNsdWRpbmcgZGVzdHJveWluZyB0aGUgcGx1Zy1pbikuIEJlY2F1c2Ug
b2YgdGhpcywgd2UgbWFrZSBzdXJlIHRvIGtlZXAgdGhlIHBsdWctaW4gYWxpdmUgdW50aWwgCi0g
ICAgLy8gdGhlIGNhbGwgaGFzIGZpbmlzaGVkLgotICAgIE5QUnVudGltZU9iamVjdE1hcDo6UGx1
Z2luUHJvdGVjdG9yIHByb3RlY3Rvcih0aGlzT2JqZWN0LT5tX29iamVjdE1hcCk7Ci0KLSAgICBi
b29sIHJlc3VsdCA9IGZhbHNlOwotICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwotICAgICAgICByZXN1bHQgPSB0aGlzT2JqZWN0LT5t
X25wT2JqZWN0LT5fY2xhc3MtPnNldFByb3BlcnR5KHRoaXNPYmplY3QtPm1fbnBPYmplY3QsIG5w
SWRlbnRpZmllciwgJnZhcmlhbnQpOwotCi0gICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92
ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGxleGljYWxHbG9iYWxPYmplY3QpOwotCi0gICAg
ICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHNldFByb3BlcnR5
IHJldHVybnMgZmFsc2U/Ci0gICAgfQotCi0gICAgcmVsZWFzZU5QVmFyaWFudFZhbHVlKCZ2YXJp
YW50KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIEpTTlBPYmplY3Q6OmRlbGV0ZVBy
b3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCkKLXsK
LSAgICByZXR1cm4ganNDYXN0PEpTTlBPYmplY3QqPihjZWxsKS0+ZGVsZXRlUHJvcGVydHkobGV4
aWNhbEdsb2JhbE9iamVjdCwgbnBJZGVudGlmaWVyRnJvbUlkZW50aWZpZXIocHJvcGVydHlOYW1l
KSk7Ci19Ci0KLWJvb2wgSlNOUE9iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCog
Y2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSkKLXsKLSAgICByZXR1cm4ganNDYXN0PEpTTlBPYmplY3QqPihjZWxsKS0+ZGVsZXRl
UHJvcGVydHkobGV4aWNhbEdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyPihJ
ZGVudGlmaWVyUmVwOjpnZXQocHJvcGVydHlOYW1lKSkpOwotfQotCi1ib29sIEpTTlBPYmplY3Q6
OmRlbGV0ZVByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBOUElk
ZW50aWZpZXIgcHJvcGVydHlOYW1lKQotewotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmpl
Y3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0g
ICAgQVNTRVJUX1RISVNfR0NfT0JKRUNUX0lOSEVSSVRTKGluZm8oKSk7Ci0KLSAgICAvLyBJZiB0
aGUgcHJvcGVydHlOYW1lIGlzIHN5bWJvbC4KLSAgICBpZiAoIXByb3BlcnR5TmFtZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtX25wT2JqZWN0KSB7Ci0gICAgICAgIHRocm93
SW52YWxpZEFjY2Vzc0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghbV9ucE9iamVjdC0+X2NsYXNzLT5yZW1v
dmVQcm9wZXJ0eSkgewotICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHRocm93IGFuIGV4Y2Vw
dGlvbiBoZXJlPwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gQ2FsbGlu
ZyBOUENsYXNzOjpzZXRQcm9wZXJ0eSB3aWxsIGNhbGwgaW50byBwbHVnLWluIGNvZGUsIGFuZCB0
aGVyZSdzIG5vIHRlbGxpbmcgd2hhdCB0aGUgcGx1Zy1pbiBjYW4gZG8uCi0gICAgLy8gKGluY2x1
ZGluZyBkZXN0cm95aW5nIHRoZSBwbHVnLWluKS4gQmVjYXVzZSBvZiB0aGlzLCB3ZSBtYWtlIHN1
cmUgdG8ga2VlcCB0aGUgcGx1Zy1pbiBhbGl2ZSB1bnRpbCAKLSAgICAvLyB0aGUgY2FsbCBoYXMg
ZmluaXNoZWQuCi0gICAgTlBSdW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVj
dG9yKG1fb2JqZWN0TWFwKTsKLQotICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwotCi0gICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ug
dGhyb3cgYW4gZXhjZXB0aW9uIGlmIHJlbW92ZVByb3BlcnR5IHJldHVybnMgZmFsc2U/Ci0gICAg
ICAgIGlmICghbV9ucE9iamVjdC0+X2NsYXNzLT5yZW1vdmVQcm9wZXJ0eShtX25wT2JqZWN0LCBw
cm9wZXJ0eU5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIE5QUnVu
dGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGxleGljYWxHbG9i
YWxPYmplY3QpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEpTTlBPYmpl
Y3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVBcnJh
eSwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSkKLXsKLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFs
T2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LQotICAgIEpTTlBPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNOUE9iamVjdCo+KG9iamVj
dCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwot
ICAgIGlmICghdGhpc09iamVjdC0+bV9ucE9iamVjdCkgewotICAgICAgICB0aHJvd0ludmFsaWRB
Y2Nlc3NFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoIU5QX0NMQVNTX1NUUlVDVF9WRVJTSU9OX0hBU19FTlVNKHRoaXNP
YmplY3QtPm1fbnBPYmplY3QtPl9jbGFzcykgfHwgIXRoaXNPYmplY3QtPm1fbnBPYmplY3QtPl9j
bGFzcy0+ZW51bWVyYXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOUElkZW50aWZpZXIqIGlk
ZW50aWZpZXJzID0gMDsKLSAgICB1aW50MzJfdCBpZGVudGlmaWVyQ291bnQgPSAwOwotICAgIAot
ICAgIC8vIENhbGxpbmcgTlBDbGFzczo6ZW51bWVyYXRlIHdpbGwgY2FsbCBpbnRvIHBsdWctaW4g
Y29kZSwgYW5kIHRoZXJlJ3Mgbm8gdGVsbGluZyB3aGF0IHRoZSBwbHVnLWluIGNhbiBkby4KLSAg
ICAvLyAoaW5jbHVkaW5nIGRlc3Ryb3lpbmcgdGhlIHBsdWctaW4pLiBCZWNhdXNlIG9mIHRoaXMs
IHdlIG1ha2Ugc3VyZSB0byBrZWVwIHRoZSBwbHVnLWluIGFsaXZlIHVudGlsIAotICAgIC8vIHRo
ZSBjYWxsIGhhcyBmaW5pc2hlZC4KLSAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3Rl
Y3RvciBwcm90ZWN0b3IodGhpc09iamVjdC0+bV9vYmplY3RNYXApOwotICAgIAotICAgIHsKLSAg
ICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwotCi0g
ICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGVudW1lcmF0
ZSByZXR1cm5zIGZhbHNlPwotICAgICAgICBpZiAoIXRoaXNPYmplY3QtPm1fbnBPYmplY3QtPl9j
bGFzcy0+ZW51bWVyYXRlKHRoaXNPYmplY3QtPm1fbnBPYmplY3QsICZpZGVudGlmaWVycywgJmlk
ZW50aWZpZXJDb3VudCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgTlBSdW50aW1l
T2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUobGV4aWNhbEdsb2JhbE9i
amVjdCk7Ci0gICAgfQotCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGlkZW50aWZpZXJD
b3VudDsgKytpKSB7Ci0gICAgICAgIElkZW50aWZpZXJSZXAqIGlkZW50aWZpZXJSZXAgPSBzdGF0
aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4oaWRlbnRpZmllcnNbaV0pOwotICAgICAgICAKLSAgICAg
ICAgSWRlbnRpZmllciBpZGVudGlmaWVyOwotICAgICAgICBpZiAoaWRlbnRpZmllclJlcC0+aXNT
dHJpbmcoKSkgewotICAgICAgICAgICAgY29uc3QgY2hhciogc3RyaW5nID0gaWRlbnRpZmllclJl
cC0+c3RyaW5nKCk7Ci0gICAgICAgICAgICBpbnQgbGVuZ3RoID0gc3RybGVuKHN0cmluZyk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHN0cmluZywgbGVuZ3Ro
KSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaWRlbnRpZmllciA9IElkZW50aWZpZXI6
OmZyb20odm0sIGlkZW50aWZpZXJSZXAtPm51bWJlcigpKTsKLQotICAgICAgICBwcm9wZXJ0eU5h
bWVBcnJheS5hZGQoaWRlbnRpZmllcik7Ci0gICAgfQotCi0gICAgbnBuTWVtRnJlZShpZGVudGlm
aWVycyk7Ci19Ci0KLUpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihwcm9wZXJ0eUdldHRlciwgKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpKQotewotICAgIFZNJiB2bSA9IGxleGljYWxH
bG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotCi0gICAgSlNOUE9iamVjdCogdGhpc09iaiA9IGpzQ2FzdDxKU05QT2JqZWN0Kj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iaiwgSlNOUE9iamVjdDo6aW5mbygpKTsKLSAgICAKLSAgICBpZiAoIXRoaXNPYmotPm5w
T2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dJbnZhbGlkQWNj
ZXNzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUpKTsKLQotICAgIGlmICghdGhpc09i
ai0+bnBPYmplY3QoKS0+X2NsYXNzLT5nZXRQcm9wZXJ0eSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQotICAgIE5QVmFyaWFudCByZXN1bHQ7Ci0gICAg
Vk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsKLQotICAgIC8vIENhbGxpbmcgTlBDbGFzczo6Z2V0
UHJvcGVydHkgd2lsbCBjYWxsIGludG8gcGx1Zy1pbiBjb2RlLCBhbmQgdGhlcmUncyBubyB0ZWxs
aW5nIHdoYXQgdGhlIHBsdWctaW4gY2FuIGRvLgotICAgIC8vIChpbmNsdWRpbmcgZGVzdHJveWlu
ZyB0aGUgcGx1Zy1pbikuIEJlY2F1c2Ugb2YgdGhpcywgd2UgbWFrZSBzdXJlIHRvIGtlZXAgdGhl
IHBsdWctaW4gYWxpdmUgdW50aWwgCi0gICAgLy8gdGhlIGNhbGwgaGFzIGZpbmlzaGVkLgotICAg
IE5QUnVudGltZU9iamVjdE1hcDo6UGx1Z2luUHJvdGVjdG9yIHByb3RlY3Rvcih0aGlzT2JqLT5v
YmplY3RNYXAoKSk7Ci0gICAgCi0gICAgYm9vbCByZXR1cm5WYWx1ZTsKLSAgICB7Ci0gICAgICAg
IEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKLSAgICAgICAg
TlBJZGVudGlmaWVyIG5wSWRlbnRpZmllciA9IG5wSWRlbnRpZmllckZyb21JZGVudGlmaWVyKHBy
b3BlcnR5TmFtZSk7Ci0gICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eU5hbWUgaXMgc3ltYm9sLgot
ICAgICAgICBpZiAoIW5wSWRlbnRpZmllcikKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAgICAgICAgcmV0dXJuVmFsdWUgPSB0aGlzT2JqLT5u
cE9iamVjdCgpLT5fY2xhc3MtPmdldFByb3BlcnR5KHRoaXNPYmotPm5wT2JqZWN0KCksIG5wSWRl
bnRpZmllciwgJnJlc3VsdCk7Ci0gICAgICAgIAotICAgICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6
Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAg
ICB9Ci0KLSAgICBpZiAoIXJldHVyblZhbHVlKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotCi0gICAgSlNWYWx1ZSBwcm9wZXJ0eVZhbHVlID0gdGhpc09i
ai0+b2JqZWN0TWFwKCktPmNvbnZlcnROUFZhcmlhbnRUb0pTVmFsdWUodGhpc09iai0+Z2xvYmFs
T2JqZWN0KCksIHJlc3VsdCk7Ci0gICAgcmVsZWFzZU5QVmFyaWFudFZhbHVlKCZyZXN1bHQpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocHJvcGVydHlWYWx1ZSk7Ci19Ci0KLUpTQ19ERUZJ
TkVfQ1VTVE9NX0dFVFRFUihtZXRob2RHZXR0ZXIsIChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKSkKLXsKLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIEpTTlBPYmplY3Qq
IHRoaXNPYmogPSBqc0Nhc3Q8SlNOUE9iamVjdCo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmosIEpTTlBPYmplY3Q6Omlu
Zm8oKSk7Ci0gICAgCi0gICAgaWYgKCF0aGlzT2JqLT5ucE9iamVjdCgpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHNjb3BlKSk7Ci0KLSAgICBOUElkZW50aWZpZXIgbnBJZGVudGlmaWVyID0gbnBJZGVu
dGlmaWVyRnJvbUlkZW50aWZpZXIocHJvcGVydHlOYW1lKTsKLSAgICAvLyBJZiB0aGUgcHJvcGVy
dHlOYW1lIGlzIHN5bWJvbC4KLSAgICBpZiAoIW5wSWRlbnRpZmllcikKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBzY29wZSkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU05QTWV0aG9kOjpj
cmVhdGUodGhpc09iai0+Z2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCks
IG5wSWRlbnRpZmllcikpOwotfQotCi1Jc29TdWJzcGFjZSogSlNOUE9iamVjdDo6c3Vic3BhY2VG
b3JJbXBsKFZNJiB2bSkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SXNvU3Vic3BhY2VQ
ZXJWTT4gcGVyVk0oW10gKFZNJiB2bSkgeyByZXR1cm4gSVNPX1NVQlNQQUNFX1BBUkFNRVRFUlMo
dm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCBKU05QT2JqZWN0KTsgfSk7
Ci0gICAgcmV0dXJuICZwZXJWTS5nZXQoKS5mb3JWTSh2bSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YzY4ZDg5ZDY2Y2M2YzA1ZTBmOWYz
ZTUxZDM5NGIzYTljMWYzMTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9i
amVjdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgSlNOUE9iamVjdF9oCi0jZGVmaW5lIEpTTlBPYmplY3RfaAotCi0jaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2Jh
bE9iamVjdC5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0Lmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvT2JqZWN0UHJvdG90eXBlLmg+Ci0KLXR5cGVkZWYgdm9pZCogTlBJ
ZGVudGlmaWVyOwotc3RydWN0IE5QT2JqZWN0OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xh
c3MgTlBSdW50aW1lT2JqZWN0TWFwOwotICAgIAotLy8gSlNOUE9iamVjdCBpcyBhIEpTT2JqZWN0
IHRoYXQgd3JhcHMgYW4gTlBPYmplY3QuCi0KLWNsYXNzIEpTTlBPYmplY3QgZmluYWwgOiBwdWJs
aWMgSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgQmFzZSA9
IEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBK
U0M6Ok92ZXJyaWRlc0dldENhbGxEYXRhIHwgSlNDOjpPdmVycmlkZXNQdXQgfCBKU0M6OkdldE93
blByb3BlcnR5U2xvdE1heUJlV3JvbmdBYm91dERvbnRFbnVtOwotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHN1YnNwYWNlRm9ySW1wbCh2bSk7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTTlBPYmplY3QqIGNy
ZWF0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE5QUnVudGltZU9iamVjdE1h
cCogb2JqZWN0TWFwLCBOUE9iamVjdCogbnBPYmplY3QpCi0gICAgewotICAgICAgICBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlID0gY3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+dm0oKSwg
Z2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKTsKLSAgICAgICAg
SlNOUE9iamVjdCogb2JqZWN0ID0gbmV3IChKU0M6OmFsbG9jYXRlQ2VsbDxKU05QT2JqZWN0Pihn
bG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTTlBPYmplY3QoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUsIG9iamVjdE1hcCwgbnBPYmplY3QpOwotICAgICAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9u
KGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotCi0gICAgfkpT
TlBPYmplY3QoKTsKLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotCi0gICAgdm9p
ZCBpbnZhbGlkYXRlKCk7Ci0KLSAgICAvLyBVc2VkIHRvIGludmFsaWRhdGUgYW4gTlBPYmplY3Qg
YXN5bmNocm9ub3VzbHkuCi0gICAgTlBPYmplY3QqIGxlYWtOUE9iamVjdCgpOwotCi0gICAgSlND
OjpKU1ZhbHVlIGNhbGxNZXRob2QoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1l
KiwgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUpOwotICAgIEpTQzo6SlNWYWx1ZSBjYWxsT2JqZWN0
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwotICAgIEpTQzo6SlNWYWx1
ZSBjYWxsQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7
Ci0KLSAgICBERUNMQVJFX0lORk87Ci0KLSAgICBOUE9iamVjdCogbnBPYmplY3QoKSBjb25zdCB7
IHJldHVybiBtX25wT2JqZWN0OyB9Ci0gICAgTlBSdW50aW1lT2JqZWN0TWFwKiBvYmplY3RNYXAo
KSBjb25zdCB7IHJldHVybiBtX29iamVjdE1hcDsgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYpOwotICAgIAotICAgIEpT
TlBPYmplY3QoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiwgTlBSdW50aW1l
T2JqZWN0TWFwKiwgTlBPYmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6SlNH
bG9iYWxPYmplY3QqKTsKLSAgICAKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotICAgIHN0
YXRpYyBKU0M6OkNhbGxEYXRhIGdldENhbGxEYXRhKEpTQzo6SlNDZWxsKik7Ci0gICAgc3RhdGlj
IEpTQzo6Q2FsbERhdGEgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCopOwotCi0gICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3Rh
dGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJv
cGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7Ci0KLSAgICBz
dGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpEZWxldGVQcm9wZXJ0eVNsb3QmKTsKLSAgICBz
dGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKLQotICAgIGJvb2wgZGVsZXRlUHJv
cGVydHkoSlNDOjpKU0dsb2JhbE9iamVjdCosIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpOwot
Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVt
UHJvcGVydGllc01vZGUpOwotCi0gICAgTlBSdW50aW1lT2JqZWN0TWFwKiBtX29iamVjdE1hcDsK
LSAgICBOUE9iamVjdCogbV9ucE9iamVjdDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAot
Ci0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNlbmRpZiAvLyBKU05Q
T2JqZWN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL05QSlNPYmplY3QuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvTlBKU09iamVjdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEy
OWI3NTUxOGJiZDFhNDcwMGM5MzI0YmZiNGUyMWJmZjFhOWU0NGMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MTIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5Q
SlNPYmplY3QuaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVk
ZSAiSlNOUE9iamVjdC5oIgotI2luY2x1ZGUgIk5QUnVudGltZU9iamVjdE1hcC5oIgotI2luY2x1
ZGUgIk5QUnVudGltZVV0aWxpdGllcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NhdGNo
U2NvcGUuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNDZWxsSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTTG9jay5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0Lmg+Ci0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvU3Ryb25nSW5saW5lcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
RnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0lkZW50aWZpZXJSZXAuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3Bh
Y2UgSlNDOwotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLU5QSlNPYmplY3QqIE5QSlNPYmpl
Y3Q6OmNyZWF0ZShWTSYgdm0sIE5QUnVudGltZU9iamVjdE1hcCogb2JqZWN0TWFwLCBKU09iamVj
dCoganNPYmplY3QpCi17Ci0gICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGhhdmUgYSBKU05QT2JqZWN0
IGluc2lkZSBhbiBOUEpTT2JqZWN0LgotICAgIEFTU0VSVCghanNPYmplY3QtPmluaGVyaXRzPEpT
TlBPYmplY3Q+KHZtKSk7Ci0KLSAgICBOUEpTT2JqZWN0KiBucEpTT2JqZWN0ID0gdG9OUEpTT2Jq
ZWN0KGNyZWF0ZU5QT2JqZWN0KDAsIG5wQ2xhc3MoKSkpOwotICAgIG5wSlNPYmplY3QtPmluaXRp
YWxpemUodm0sIG9iamVjdE1hcCwganNPYmplY3QpOwotCi0gICAgcmV0dXJuIG5wSlNPYmplY3Q7
Ci19Ci0KLU5QSlNPYmplY3Q6Ok5QSlNPYmplY3QoKQotICAgIDogbV9vYmplY3RNYXAoMCkKLXsK
LX0KLQotTlBKU09iamVjdDo6fk5QSlNPYmplY3QoKQotewotICAgIG1fb2JqZWN0TWFwLT5ucEpT
T2JqZWN0RGVzdHJveWVkKHRoaXMpOwotfQotCi1ib29sIE5QSlNPYmplY3Q6OmlzTlBKU09iamVj
dChOUE9iamVjdCogbnBPYmplY3QpCi17Ci0gICAgcmV0dXJuIG5wT2JqZWN0LT5fY2xhc3MgPT0g
bnBDbGFzcygpOwotfQotCi12b2lkIE5QSlNPYmplY3Q6OmluaXRpYWxpemUoVk0mIHZtLCBOUFJ1
bnRpbWVPYmplY3RNYXAqIG9iamVjdE1hcCwgSlNPYmplY3QqIGpzT2JqZWN0KQotewotICAgIEFT
U0VSVCghbV9vYmplY3RNYXApOwotICAgIEFTU0VSVCghbV9qc09iamVjdCk7Ci0KLSAgICBtX29i
amVjdE1hcCA9IG9iamVjdE1hcDsKLSAgICBtX2pzT2JqZWN0LnNldCh2bSwganNPYmplY3QpOwot
fQotCi1zdGF0aWMgSWRlbnRpZmllciBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXJSZXAqIGlkZW50aWZpZXJS
ZXApCi17Ci0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBBU1NF
UlQoaWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSk7Ci0KLSAgICBjb25zdCBjaGFyKiBzdHJpbmcg
PSBpZGVudGlmaWVyUmVwLT5zdHJpbmcoKTsKLSAgICBpbnQgbGVuZ3RoID0gc3RybGVuKHN0cmlu
Zyk7Ci0KLSAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgU3RyaW5nOjpmcm9t
VVRGOFdpdGhMYXRpbjFGYWxsYmFjayhzdHJpbmcsIGxlbmd0aCkpOwotfQotCi1ib29sIE5QSlNP
YmplY3Q6Omhhc01ldGhvZChOUElkZW50aWZpZXIgbWV0aG9kTmFtZSkKLXsKLSAgICBJZGVudGlm
aWVyUmVwKiBpZGVudGlmaWVyUmVwID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KG1ldGhv
ZE5hbWUpOwotCi0gICAgaWYgKCFpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9
IG1fb2JqZWN0TWFwLT5nbG9iYWxPYmplY3QoKTsKLSAgICBpZiAoIWxleGljYWxHbG9iYWxPYmpl
Y3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxP
YmplY3QtPnZtKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBtX2pzT2Jq
ZWN0LT5nZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVw
KGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXJSZXApKTsgICAgCi0gICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKLQotICAgIHJldHVybiB2YWx1ZS5pc0NhbGxhYmxlKHZtKTsKLX0KLQot
Ym9vbCBOUEpTT2JqZWN0OjppbnZva2UoTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUsIGNvbnN0IE5Q
VmFyaWFudCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICBJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyUmVwID0gc3RhdGljX2Nhc3Q8
SWRlbnRpZmllclJlcCo+KG1ldGhvZE5hbWUpOwotICAgIAotICAgIGlmICghaWRlbnRpZmllclJl
cC0+aXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gbV9vYmplY3RNYXAtPmdsb2JhbE9iamVjdCgp
OwotICAgIGlmICghbGV4aWNhbEdsb2JhbE9iamVjdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGxleGljYWxHbG9iYWxPYmplY3QpOwotCi0gICAg
SlNWYWx1ZSBmdW5jdGlvbiA9IG1fanNPYmplY3QtPmdldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBp
ZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmll
clJlcCkpOwotICAgIHJldHVybiBpbnZva2UobGV4aWNhbEdsb2JhbE9iamVjdCwgZnVuY3Rpb24s
IGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwgcmVzdWx0KTsKLX0KLQotYm9vbCBOUEpTT2JqZWN0
OjppbnZva2VEZWZhdWx0KGNvbnN0IE5QVmFyaWFudCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1
bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCA9IG1fb2JqZWN0TWFwLT5nbG9iYWxPYmplY3QoKTsKLSAgICBpZiAo
IWxleGljYWxHbG9iYWxPYmplY3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEpTTG9j
a0hvbGRlciBsb2NrKGxleGljYWxHbG9iYWxPYmplY3QpOwotCi0gICAgSlNWYWx1ZSBmdW5jdGlv
biA9IG1fanNPYmplY3QuZ2V0KCk7Ci0gICAgcmV0dXJuIGludm9rZShsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBmdW5jdGlvbiwgYXJndW1lbnRzLCBhcmd1bWVudENvdW50LCByZXN1bHQpOwotfQotCi1i
b29sIE5QSlNPYmplY3Q6Omhhc1Byb3BlcnR5KE5QSWRlbnRpZmllciBpZGVudGlmaWVyKQotewot
ICAgIElkZW50aWZpZXJSZXAqIGlkZW50aWZpZXJSZXAgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVy
UmVwKj4oaWRlbnRpZmllcik7Ci0gICAgCi0gICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QgPSBtX29iamVjdE1hcC0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgaWYgKCFsZXhpY2Fs
R2xvYmFsT2JqZWN0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgVk0mIHZtID0g
bGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0g
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgYm9vbCByZXN1
bHQ7Ci0gICAgaWYgKGlkZW50aWZpZXJSZXAtPmlzU3RyaW5nKCkpCi0gICAgICAgIHJlc3VsdCA9
IG1fanNPYmplY3QtPmhhc1Byb3BlcnR5KGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXJG
cm9tSWRlbnRpZmllclJlcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyUmVwKSk7Ci0g
ICAgZWxzZQotICAgICAgICByZXN1bHQgPSBtX2pzT2JqZWN0LT5oYXNQcm9wZXJ0eShsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaWRlbnRpZmllclJlcC0+bnVtYmVy
KCkpKTsKLQotICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotYm9vbCBOUEpTT2JqZWN0OjpnZXRQcm9wZXJ0eShOUElkZW50aWZpZXIgcHJvcGVydHlO
YW1lLCBOUFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVy
UmVwID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5TmFtZSk7Ci0gICAgCi0g
ICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBtX29iamVjdE1hcC0+Z2xv
YmFsT2JqZWN0KCk7Ci0gICAgaWYgKCFsZXhpY2FsR2xvYmFsT2JqZWN0KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAg
IEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7Ci0KLSAgICBKU1ZhbHVlIGpzUmVzdWx0OwotICAgIGlmIChpZGVudGlmaWVyUmVw
LT5pc1N0cmluZygpKQotICAgICAgICBqc1Jlc3VsdCA9IG1fanNPYmplY3QtPmdldChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAobGV4aWNhbEdsb2JhbE9i
amVjdCwgaWRlbnRpZmllclJlcCkpOwotICAgIGVsc2UKLSAgICAgICAganNSZXN1bHQgPSBtX2pz
T2JqZWN0LT5nZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGlk
ZW50aWZpZXJSZXAtPm51bWJlcigpKSk7Ci0gICAgCi0gICAgbV9vYmplY3RNYXAtPmNvbnZlcnRK
U1ZhbHVlVG9OUFZhcmlhbnQobGV4aWNhbEdsb2JhbE9iamVjdCwganNSZXN1bHQsICpyZXN1bHQp
OwotICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgTlBKU09iamVjdDo6c2V0UHJvcGVydHkoTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29u
c3QgTlBWYXJpYW50KiB2YWx1ZSkKLXsKLSAgICBJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyUmVw
ID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5TmFtZSk7Ci0gICAgCi0gICAg
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBtX29iamVjdE1hcC0+Z2xvYmFs
T2JqZWN0KCk7Ci0gICAgaWYgKCFsZXhpY2FsR2xvYmFsT2JqZWN0KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCi0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAg
ICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOwotCi0gICAgSlNWYWx1ZSBqc1ZhbHVlID0gbV9vYmplY3RNYXAtPmNvbnZlcnRO
UFZhcmlhbnRUb0pTVmFsdWUobV9vYmplY3RNYXAtPmdsb2JhbE9iamVjdCgpLCAqdmFsdWUpOwot
ICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKSB7Ci0gICAgICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KG1fanNPYmplY3QuZ2V0KCkpOwotICAgICAgICBtX2pzT2JqZWN0LT5tZXRob2RU
YWJsZSh2bSktPnB1dChtX2pzT2JqZWN0LmdldCgpLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVu
dGlmaWVyRnJvbUlkZW50aWZpZXJSZXAobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllclJl
cCksIGpzVmFsdWUsIHNsb3QpOwotICAgIH0gZWxzZQotICAgICAgICBtX2pzT2JqZWN0LT5tZXRo
b2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgobV9qc09iamVjdC5nZXQoKSwgbGV4aWNhbEdsb2JhbE9i
amVjdCwgaWRlbnRpZmllclJlcC0+bnVtYmVyKCksIGpzVmFsdWUsIGZhbHNlKTsKLSAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE5Q
SlNPYmplY3Q6OnJlbW92ZVByb3BlcnR5KE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCi17Ci0g
ICAgSWRlbnRpZmllclJlcCogaWRlbnRpZmllclJlcCA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJS
ZXAqPihwcm9wZXJ0eU5hbWUpOwotICAgIAotICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0ID0gbV9vYmplY3RNYXAtPmdsb2JhbE9iamVjdCgpOwotICAgIGlmICghbGV4aWNh
bEdsb2JhbE9iamVjdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVk0mIHZtID0gbGV4
aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgaWYgKGlkZW50aWZp
ZXJSZXAtPmlzU3RyaW5nKCkpIHsKLSAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gaWRl
bnRpZmllckZyb21JZGVudGlmaWVyUmVwKGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXJS
ZXApOwotICAgICAgICAKLSAgICAgICAgaWYgKCFtX2pzT2JqZWN0LT5oYXNQcm9wZXJ0eShsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyKSkgewotICAgICAgICAgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIEpTQ2VsbDo6ZGVsZXRlUHJvcGVydHkobV9qc09iamVjdC5nZXQoKSwgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgaWRlbnRpZmllcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFtX2pzT2Jq
ZWN0LT5oYXNQcm9wZXJ0eShsZXhpY2FsR2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oaWRlbnRpZmllclJlcC0+bnVtYmVyKCkpKSkgewotICAgICAgICAgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIG1fanNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KG1f
anNPYmplY3QuZ2V0KCksIGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXJSZXAtPm51bWJl
cigpKTsKLSAgICB9Ci0KLSAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIE5QSlNPYmplY3Q6OmVudW1lcmF0ZShOUElkZW50aWZpZXIqKiBpZGVu
dGlmaWVycywgdWludDMyX3QqIGlkZW50aWZpZXJDb3VudCkKLXsKLSAgICBKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IG1fb2JqZWN0TWFwLT5nbG9iYWxPYmplY3QoKTsKLSAg
ICBpZiAoIWxleGljYWxHbG9iYWxPYmplY3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxv
Y2sodm0pOwotCi0gICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyh2bSwgUHJvcGVy
dHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwotICAgIG1f
anNPYmplY3QtPmdldFByb3BlcnR5TmFtZXMobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7Ci0KLSAgICBOUElkZW50aWZp
ZXIqIG5hbWVJZGVudGlmaWVycyA9IG5wbk1lbU5ld0FycmF5PE5QSWRlbnRpZmllcj4ocHJvcGVy
dHlOYW1lcy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9wZXJ0eU5h
bWVzLnNpemUoKTsgKytpKQotICAgICAgICBuYW1lSWRlbnRpZmllcnNbaV0gPSBzdGF0aWNfY2Fz
dDxOUElkZW50aWZpZXI+KElkZW50aWZpZXJSZXA6OmdldChwcm9wZXJ0eU5hbWVzW2ldLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpKTsKLQotICAgICppZGVudGlmaWVycyA9IG5hbWVJZGVudGlmaWVy
czsKLSAgICAqaWRlbnRpZmllckNvdW50ID0gcHJvcGVydHlOYW1lcy5zaXplKCk7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBOUEpTT2JqZWN0Ojpjb25zdHJ1Y3QoY29uc3QgTlBWYXJp
YW50KiBhcmd1bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0
KQotewotICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gbV9vYmplY3RN
YXAtPmdsb2JhbE9iamVjdCgpOwotICAgIGlmICghbGV4aWNhbEdsb2JhbE9iamVjdCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0o
KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOwotCi0gICAgYXV0byBjb25zdHJ1Y3REYXRhID0gZ2V0Q29uc3RydWN0
RGF0YSh2bSwgbV9qc09iamVjdC5nZXQoKSk7Ci0gICAgaWYgKGNvbnN0cnVjdERhdGEudHlwZSA9
PSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
Q29udmVydCB0aGUgcGFzc2VkIGluIGFyZ3VtZW50cy4KLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBhcmd1bWVudExpc3Q7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGFyZ3VtZW50Q291
bnQ7ICsraSkKLSAgICAgICAgYXJndW1lbnRMaXN0LmFwcGVuZChtX29iamVjdE1hcC0+Y29udmVy
dE5QVmFyaWFudFRvSlNWYWx1ZShtX29iamVjdE1hcC0+Z2xvYmFsT2JqZWN0KCksIGFyZ3VtZW50
c1tpXSkpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFhcmd1bWVudExpc3QuaGFzT3ZlcmZsb3dlZCgp
KTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU0M6OmNvbnN0cnVjdChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBtX2pzT2JqZWN0LmdldCgpLCBjb25zdHJ1Y3REYXRhLCBhcmd1bWVudExpc3QpOwotICAg
IAotICAgIC8vIENvbnZlcnQgYW5kIHJldHVybiB0aGUgbmV3IG9iamVjdC4KLSAgICBtX29iamVj
dE1hcC0+Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1
ZSwgKnJlc3VsdCk7Ci0gICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIE5QSlNPYmplY3Q6Omludm9rZShKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNWYWx1ZSBmdW5jdGlvbiwgY29uc3QgTlBWYXJpYW50KiBhcmd1bWVu
dHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KQotewotICAgIFZN
JiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgYXV0byBjYWxsRGF0YSA9IGdldENhbGxEYXRhKHZt
LCBmdW5jdGlvbik7Ci0gICAgaWYgKGNhbGxEYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5v
bmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIENvbnZlcnQgdGhlIHBhc3NlZCBp
biBhcmd1bWVudHMuCi0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRMaXN0OwotICAg
IGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpCi0gICAgICAgIGFy
Z3VtZW50TGlzdC5hcHBlbmQobV9vYmplY3RNYXAtPmNvbnZlcnROUFZhcmlhbnRUb0pTVmFsdWUo
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnRzW2ldKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
IWFyZ3VtZW50TGlzdC5oYXNPdmVyZmxvd2VkKCkpOwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
Qzo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwgY2FsbERhdGEsIG1fanNPYmpl
Y3QuZ2V0KCksIGFyZ3VtZW50TGlzdCk7Ci0KLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKSB7Ci0gICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBv
ZiB0aGUgZnVuY3Rpb24gY2FsbC4KLSAgICBtX29iamVjdE1hcC0+Y29udmVydEpTVmFsdWVUb05Q
VmFyaWFudChsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgKnJlc3VsdCk7Ci0KLSAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLU5QQ2xhc3MqIE5QSlNPYmplY3Q6Om5wQ2xhc3MoKQotewotICAgIHN0YXRpYyBO
UENsYXNzIG5wQ2xhc3MgPSB7Ci0gICAgICAgIE5QX0NMQVNTX1NUUlVDVF9WRVJTSU9OLAotICAg
ICAgICBOUF9BbGxvY2F0ZSwKLSAgICAgICAgTlBfRGVhbGxvY2F0ZSwKLSAgICAgICAgMCwKLSAg
ICAgICAgTlBfSGFzTWV0aG9kLAotICAgICAgICBOUF9JbnZva2UsCi0gICAgICAgIE5QX0ludm9r
ZURlZmF1bHQsCi0gICAgICAgIE5QX0hhc1Byb3BlcnR5LAotICAgICAgICBOUF9HZXRQcm9wZXJ0
eSwKLSAgICAgICAgTlBfU2V0UHJvcGVydHksCi0gICAgICAgIE5QX1JlbW92ZVByb3BlcnR5LAot
ICAgICAgICBOUF9FbnVtZXJhdGUsCi0gICAgICAgIE5QX0NvbnN0cnVjdAotICAgIH07Ci0KLSAg
ICByZXR1cm4gJm5wQ2xhc3M7Ci19Ci0gICAgCi1OUE9iamVjdCogTlBKU09iamVjdDo6TlBfQWxs
b2NhdGUoTlBQIG5wcCwgTlBDbGFzcyopCi17Ci0gICAgQVNTRVJUX1VOVVNFRChucHAsICFucHAp
OwotCi0gICAgcmV0dXJuIG5ldyBOUEpTT2JqZWN0OwotfQotCi12b2lkIE5QSlNPYmplY3Q6Ok5Q
X0RlYWxsb2NhdGUoTlBPYmplY3QqIG5wT2JqZWN0KQotewotICAgIE5QSlNPYmplY3QqIG5wSlNP
YmplY3QgPSB0b05QSlNPYmplY3QobnBPYmplY3QpOwotICAgIGRlbGV0ZSBucEpTT2JqZWN0Owot
fQotCi1ib29sIE5QSlNPYmplY3Q6Ok5QX0hhc01ldGhvZChOUE9iamVjdCogbnBPYmplY3QsIE5Q
SWRlbnRpZmllciBtZXRob2ROYW1lKQotewotICAgIHJldHVybiB0b05QSlNPYmplY3QobnBPYmpl
Y3QpLT5oYXNNZXRob2QobWV0aG9kTmFtZSk7Ci19Ci0gICAgCi1ib29sIE5QSlNPYmplY3Q6Ok5Q
X0ludm9rZShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBtZXRob2ROYW1lLCBjb25z
dCBOUFZhcmlhbnQqIGFyZ3VtZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIHRvTlBKU09iamVjdChucE9iamVjdCktPmludm9rZSht
ZXRob2ROYW1lLCBhcmd1bWVudHMsIGFyZ3VtZW50Q291bnQsIHJlc3VsdCk7Ci19Ci0gICAgCi1i
b29sIE5QSlNPYmplY3Q6Ok5QX0ludm9rZURlZmF1bHQoTlBPYmplY3QqIG5wT2JqZWN0LCBjb25z
dCBOUFZhcmlhbnQqIGFyZ3VtZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIHRvTlBKU09iamVjdChucE9iamVjdCktPmludm9rZURl
ZmF1bHQoYXJndW1lbnRzLCBhcmd1bWVudENvdW50LCByZXN1bHQpOwotfQotICAgIAotYm9vbCBO
UEpTT2JqZWN0OjpOUF9IYXNQcm9wZXJ0eShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIHRvTlBKU09iamVjdChucE9iamVjdCktPmhh
c1Byb3BlcnR5KHByb3BlcnR5TmFtZSk7Ci19Ci0KLWJvb2wgTlBKU09iamVjdDo6TlBfR2V0UHJv
cGVydHkoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBOUFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gdG9OUEpTT2JqZWN0KG5wT2JqZWN0KS0+Z2V0
UHJvcGVydHkocHJvcGVydHlOYW1lLCByZXN1bHQpOwotfQotCi1ib29sIE5QSlNPYmplY3Q6Ok5Q
X1NldFByb3BlcnR5KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFt
ZSwgY29uc3QgTlBWYXJpYW50KiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9OUEpTT2JqZWN0KG5w
T2JqZWN0KS0+c2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSk7Ci19Ci0KLWJvb2wgTlBK
U09iamVjdDo6TlBfUmVtb3ZlUHJvcGVydHkoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZp
ZXIgcHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiB0b05QSlNPYmplY3QobnBPYmplY3QpLT5y
ZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwotfQotCi1ib29sIE5QSlNPYmplY3Q6Ok5QX0Vu
dW1lcmF0ZShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllcioqIGlkZW50aWZpZXJzLCB1
aW50MzJfdCogaWRlbnRpZmllckNvdW50KQotewotICAgIHJldHVybiB0b05QSlNPYmplY3QobnBP
YmplY3QpLT5lbnVtZXJhdGUoaWRlbnRpZmllcnMsIGlkZW50aWZpZXJDb3VudCk7Ci19Ci0KLWJv
b2wgTlBKU09iamVjdDo6TlBfQ29uc3RydWN0KE5QT2JqZWN0KiBucE9iamVjdCwgY29uc3QgTlBW
YXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVz
dWx0KQotewotICAgIHJldHVybiB0b05QSlNPYmplY3QobnBPYmplY3QpLT5jb25zdHJ1Y3QoYXJn
dW1lbnRzLCBhcmd1bWVudENvdW50LCByZXN1bHQpOwotfQotICAgIAotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3Qu
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3Qu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg1MzVkNWQ1NTQwMjVlOGI2MjdmYzc1
OWNjMDE3N2UwZWFiYjNkYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2Jq
ZWN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgTlBKU09iamVjdF9oCi0jZGVmaW5lIE5QSlNPYmplY3RfaAotCi0jaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdHJvbmcuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL25wcnVudGltZV9pbnRlcm5hbC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgVk07Ci1jbGFzcyBKU0dsb2Jh
bE9iamVjdDsKLWNsYXNzIEpTT2JqZWN0OwotCi19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1j
bGFzcyBOUFJ1bnRpbWVPYmplY3RNYXA7Ci0gICAgCi0vLyBOUEpTT2JqZWN0IGlzIGFuIE5QT2Jq
ZWN0IHRoYXQgd3JhcHMgYSBKU09iamVjdC4KLWNsYXNzIE5QSlNPYmplY3QgOiBwdWJsaWMgTlBP
YmplY3QgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5QSlNPYmplY3QpOwotcHVibGljOgot
ICAgIHN0YXRpYyBOUEpTT2JqZWN0KiBjcmVhdGUoSlNDOjpWTSYsIE5QUnVudGltZU9iamVjdE1h
cCosIEpTQzo6SlNPYmplY3QqKTsKLQotICAgIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9qc09iamVjdC5nZXQoKTsgfQotCi0gICAgc3RhdGljIGJvb2wgaXNOUEpT
T2JqZWN0KE5QT2JqZWN0Kik7Ci0KLSAgICBzdGF0aWMgTlBKU09iamVjdCogdG9OUEpTT2JqZWN0
KE5QT2JqZWN0KiBucE9iamVjdCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oaXNOUEpTT2JqZWN0KG5wT2JqZWN0KSk7Ci0gICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxOUEpTT2JqZWN0Kj4obnBPYmplY3QpOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBOUEpTT2JqZWN0KCk7Ci0gICAgfk5QSlNPYmplY3QoKTsKLQotICAgIHZvaWQgaW5p
dGlhbGl6ZShKU0M6OlZNJiwgTlBSdW50aW1lT2JqZWN0TWFwKiwgSlNDOjpKU09iamVjdCopOwot
Ci0gICAgYm9vbCBoYXNNZXRob2QoTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUpOwotICAgIGJvb2wg
aW52b2tlKE5QSWRlbnRpZmllciBtZXRob2ROYW1lLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3VtZW50
cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpOwotICAgIGJvb2wg
aW52b2tlRGVmYXVsdChjb25zdCBOUFZhcmlhbnQqIGFyZ3VtZW50cywgdWludDMyX3QgYXJndW1l
bnRDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpOwotICAgIGJvb2wgaGFzUHJvcGVydHkoTlBJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZSk7Ci0gICAgYm9vbCBnZXRQcm9wZXJ0eShOUElkZW50aWZpZXIg
cHJvcGVydHlOYW1lLCBOUFZhcmlhbnQqIHJlc3VsdCk7Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eShO
UElkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBOUFZhcmlhbnQqIHZhbHVlKTsKLSAgICBi
b29sIHJlbW92ZVByb3BlcnR5KE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpOwotICAgIGJvb2wg
ZW51bWVyYXRlKE5QSWRlbnRpZmllcioqIGlkZW50aWZpZXJzLCB1aW50MzJfdCogaWRlbnRpZmll
ckNvdW50KTsKLSAgICBib29sIGNvbnN0cnVjdChjb25zdCBOUFZhcmlhbnQqIGFyZ3VtZW50cywg
dWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpOwotCi0gICAgYm9vbCBp
bnZva2UoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbiwgY29uc3Qg
TlBWYXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCog
cmVzdWx0KTsKLQotICAgIHN0YXRpYyBOUENsYXNzKiBucENsYXNzKCk7Ci0gICAgc3RhdGljIE5Q
T2JqZWN0KiBOUF9BbGxvY2F0ZShOUFAsIE5QQ2xhc3MqKTsKLSAgICBzdGF0aWMgdm9pZCBOUF9E
ZWFsbG9jYXRlKE5QT2JqZWN0Kik7Ci0gICAgc3RhdGljIGJvb2wgTlBfSGFzTWV0aG9kKE5QT2Jq
ZWN0KiwgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUpOwotICAgIHN0YXRpYyBib29sIE5QX0ludm9r
ZShOUE9iamVjdCosIE5QSWRlbnRpZmllciBtZXRob2ROYW1lLCBjb25zdCBOUFZhcmlhbnQqIGFy
Z3VtZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpOwotICAg
IHN0YXRpYyBib29sIE5QX0ludm9rZURlZmF1bHQoTlBPYmplY3QqLCBjb25zdCBOUFZhcmlhbnQq
IGFyZ3VtZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpOwot
ICAgIHN0YXRpYyBib29sIE5QX0hhc1Byb3BlcnR5KE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyIHBy
b3BlcnR5TmFtZSk7Ci0gICAgc3RhdGljIGJvb2wgTlBfR2V0UHJvcGVydHkoTlBPYmplY3QqLCBO
UElkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBOUFZhcmlhbnQqIHJlc3VsdCk7Ci0gICAgc3RhdGlj
IGJvb2wgTlBfU2V0UHJvcGVydHkoTlBPYmplY3QqLCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1l
LCBjb25zdCBOUFZhcmlhbnQqIHZhbHVlKTsKLSAgICBzdGF0aWMgYm9vbCBOUF9SZW1vdmVQcm9w
ZXJ0eShOUE9iamVjdCosIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBi
b29sIE5QX0VudW1lcmF0ZShOUE9iamVjdCosIE5QSWRlbnRpZmllcioqIGlkZW50aWZpZXJzLCB1
aW50MzJfdCogaWRlbnRpZmllckNvdW50KTsKLSAgICBzdGF0aWMgYm9vbCBOUF9Db25zdHJ1Y3Qo
TlBPYmplY3QqLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3VtZW50cywgdWludDMyX3QgYXJndW1lbnRD
b3VudCwgTlBWYXJpYW50KiByZXN1bHQpOwotICAgIAotICAgIE5QUnVudGltZU9iamVjdE1hcCog
bV9vYmplY3RNYXA7Ci0gICAgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4gbV9qc09iamVjdDsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0KLSNlbmRpZiAvLyBOUEpTT2JqZWN0X2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVP
YmplY3RNYXAuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2M3MzEzMzEzODA3
ZGRmNmU5NDM2MjY5MDYyZDBhMzE1ZGMyMjE2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNj
YXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOTYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5QUnVu
dGltZU9iamVjdE1hcC5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNp
bmNsdWRlICJKU05QT2JqZWN0LmgiCi0jaW5jbHVkZSAiTlBKU09iamVjdC5oIgotI2luY2x1ZGUg
Ik5QUnVudGltZVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKLSNpbmNsdWRl
ICJXZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQ29tcGxldGlvbi5oPgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Vycm9yLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNM
b2NrLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU291cmNlQ29kZS5oPgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1N0cm9uZy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N0cm9u
Z0lubGluZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RPTVdyYXBwZXJXb3JsZC5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIu
aD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci11c2luZyBuYW1lc3BhY2UgSlNDOwotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLQotTlBS
dW50aW1lT2JqZWN0TWFwOjpOUFJ1bnRpbWVPYmplY3RNYXAoUGx1Z2luVmlldyogcGx1Z2luVmll
dykKLSAgICA6IG1fcGx1Z2luVmlldyhwbHVnaW5WaWV3KQotICAgICwgbV9maW5hbGl6YXRpb25U
aW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZOUFJ1bnRpbWVPYmplY3RNYXA6OmludmFsaWRh
dGVRdWV1ZWRPYmplY3RzKQotewotfQotCi1OUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3Rl
Y3Rvcjo6UGx1Z2luUHJvdGVjdG9yKE5QUnVudGltZU9iamVjdE1hcCogbnBSdW50aW1lT2JqZWN0
TWFwKQotewotICAgIC8vIElmIHdlJ3JlIGFscmVhZHkgaW4gdGhlIHBsdWctaW4gdmlldyBkZXN0
cnVjdG9yLCB3ZSBzaG91bGRuJ3QgdHJ5IHRvIGtlZXAgaXQgYWxpdmUuCi0gICAgaWYgKCFucFJ1
bnRpbWVPYmplY3RNYXAtPm1fcGx1Z2luVmlldy0+aXNCZWluZ0Rlc3Ryb3llZCgpKQotICAgICAg
ICBtX3BsdWdpblZpZXcgPSBucFJ1bnRpbWVPYmplY3RNYXAtPm1fcGx1Z2luVmlldzsKLX0KLQot
TlBSdW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3I6On5QbHVnaW5Qcm90ZWN0b3IoKQot
ewotfQotCi1OUE9iamVjdCogTlBSdW50aW1lT2JqZWN0TWFwOjpnZXRPckNyZWF0ZU5QT2JqZWN0
KFZNJiB2bSwgSlNPYmplY3QqIGpzT2JqZWN0KQotewotICAgIC8vIElmIHRoaXMgaXMgYSBKU05Q
T2JqZWN0LCB3ZSBjYW4ganVzdCBnZXQgaXRzIHVuZGVybHlpbmcgTlBPYmplY3QuCi0gICAgaWYg
KGpzT2JqZWN0LT5jbGFzc0luZm8odm0pID09IEpTTlBPYmplY3Q6OmluZm8oKSkgewotICAgICAg
ICBKU05QT2JqZWN0KiBqc05QT2JqZWN0ID0ganNDYXN0PEpTTlBPYmplY3QqPihqc09iamVjdCk7
Ci0gICAgICAgIE5QT2JqZWN0KiBucE9iamVjdCA9IGpzTlBPYmplY3QtPm5wT2JqZWN0KCk7Ci0g
ICAgICAgIAotICAgICAgICByZXRhaW5OUE9iamVjdChucE9iamVjdCk7Ci0gICAgICAgIHJldHVy
biBucE9iamVjdDsKLSAgICB9Ci0gICAgCi0gICAgLy8gRmlyc3QsIGNoZWNrIGlmIHdlIGFscmVh
ZHkga25vdyBhYm91dCB0aGlzIG9iamVjdC4KLSAgICBpZiAoTlBKU09iamVjdCogbnBKU09iamVj
dCA9IG1fbnBKU09iamVjdHMuZ2V0KGpzT2JqZWN0KSkgewotICAgICAgICByZXRhaW5OUE9iamVj
dChucEpTT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIG5wSlNPYmplY3Q7Ci0gICAgfQotCi0gICAg
TlBKU09iamVjdCogbnBKU09iamVjdCA9IE5QSlNPYmplY3Q6OmNyZWF0ZSh2bSwgdGhpcywganNP
YmplY3QpOwotICAgIG1fbnBKU09iamVjdHMuc2V0KGpzT2JqZWN0LCBucEpTT2JqZWN0KTsKLQot
ICAgIHJldHVybiBucEpTT2JqZWN0OwotfQotCi12b2lkIE5QUnVudGltZU9iamVjdE1hcDo6bnBK
U09iamVjdERlc3Ryb3llZChOUEpTT2JqZWN0KiBucEpTT2JqZWN0KQotewotICAgIC8vIFJlbW92
ZSB0aGUgb2JqZWN0IGZyb20gdGhlIG1hcC4KLSAgICBBU1NFUlQobV9ucEpTT2JqZWN0cy5jb250
YWlucyhucEpTT2JqZWN0LT5qc09iamVjdCgpKSk7Ci0gICAgbV9ucEpTT2JqZWN0cy5yZW1vdmUo
bnBKU09iamVjdC0+anNPYmplY3QoKSk7Ci19Ci0KLUpTT2JqZWN0KiBOUFJ1bnRpbWVPYmplY3RN
YXA6OmdldE9yQ3JlYXRlSlNPYmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTlBP
YmplY3QqIG5wT2JqZWN0KQotewotICAgIC8vIElmIHRoaXMgaXMgYW4gTlBKU09iamVjdCwgd2Ug
Y2FuIGp1c3QgZ2V0IHRoZSBKU09iamVjdCB0aGF0IGl0J3Mgd3JhcHBpbmcuCi0gICAgaWYgKE5Q
SlNPYmplY3Q6OmlzTlBKU09iamVjdChucE9iamVjdCkpCi0gICAgICAgIHJldHVybiBOUEpTT2Jq
ZWN0Ojp0b05QSlNPYmplY3QobnBPYmplY3QpLT5qc09iamVjdCgpOwotICAgIAotICAgIGlmIChK
U05QT2JqZWN0KiBqc05QT2JqZWN0ID0gbV9qc05QT2JqZWN0cy5nZXQobnBPYmplY3QpKQotICAg
ICAgICByZXR1cm4ganNOUE9iamVjdDsKLQotICAgIEpTTlBPYmplY3QqIGpzTlBPYmplY3QgPSBK
U05QT2JqZWN0OjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCB0aGlzLCBucE9iamVjdCk7Ci0gICAgd2Vh
a0FkZChtX2pzTlBPYmplY3RzLCBucE9iamVjdCwgSlNDOjpXZWFrPEpTTlBPYmplY3Q+KGpzTlBP
YmplY3QsIHRoaXMsIG5wT2JqZWN0KSk7Ci0gICAgcmV0dXJuIGpzTlBPYmplY3Q7Ci19Ci0KLUpT
VmFsdWUgTlBSdW50aW1lT2JqZWN0TWFwOjpjb252ZXJ0TlBWYXJpYW50VG9KU1ZhbHVlKEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTlBWYXJpYW50JiB2YXJpYW50KQot
ewotICAgIHN3aXRjaCAodmFyaWFudC50eXBlKSB7Ci0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX1Zv
aWQ6Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgY2FzZSBOUFZhcmlhbnRU
eXBlX051bGw6Ci0gICAgICAgIHJldHVybiBqc051bGwoKTsKLQotICAgIGNhc2UgTlBWYXJpYW50
VHlwZV9Cb29sOgotICAgICAgICByZXR1cm4ganNCb29sZWFuKHZhcmlhbnQudmFsdWUuYm9vbFZh
bHVlKTsKLQotICAgIGNhc2UgTlBWYXJpYW50VHlwZV9JbnQzMjoKLSAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKHZhcmlhbnQudmFsdWUuaW50VmFsdWUpOwotCi0gICAgY2FzZSBOUFZhcmlhbnRUeXBl
X0RvdWJsZToKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhcmlhbnQudmFsdWUuZG91YmxlVmFs
dWUpOwotCi0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX1N0cmluZzoKLSAgICAgICAgcmV0dXJuIGpz
U3RyaW5nKGdsb2JhbE9iamVjdC0+dm0oKSwgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxs
YmFjayh2YXJpYW50LnZhbHVlLnN0cmluZ1ZhbHVlLlVURjhDaGFyYWN0ZXJzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXJpYW50LnZhbHVlLnN0cmluZ1ZhbHVlLlVURjhMZW5ndGgpKTsKLSAgICBjYXNlIE5QVmFyaWFu
dFR5cGVfT2JqZWN0OgotICAgICAgICByZXR1cm4gZ2V0T3JDcmVhdGVKU09iamVjdChnbG9iYWxP
YmplY3QsIHZhcmlhbnQudmFsdWUub2JqZWN0VmFsdWUpOwotICAgIH0KLQotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi12b2lkIE5QUnVu
dGltZU9iamVjdE1hcDo6Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgTlBWYXJpYW50JiB2YXJpYW50KQot
ewotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgSlNMb2NrSG9s
ZGVyIGxvY2sobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0KLSAgICBWT0lEX1RPX05QVkFSSUFOVCh2
YXJpYW50KTsKLSAgICAKLSAgICBpZiAodmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgTlVMTF9U
T19OUFZBUklBTlQodmFyaWFudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBWT0lEX1RPX05QVkFSSUFOVCh2YXJpYW50
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkg
ewotICAgICAgICBCT09MRUFOX1RPX05QVkFSSUFOVCh2YWx1ZS50b0Jvb2xlYW4obGV4aWNhbEds
b2JhbE9iamVjdCksIHZhcmlhbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KHZhbHVlLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgRE9VQkxFX1RPX05QVkFSSUFOVCh2YWx1ZS50
b051bWJlcihsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdmFyaWFudCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBOUFN0cmluZyBu
cFN0cmluZyA9IGNyZWF0ZU5QU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGxleGljYWxHbG9iYWxPYmpl
Y3QpLT52YWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0KS51dGY4KCkpOwotICAgICAgICBTVFJJTkdO
X1RPX05QVkFSSUFOVChucFN0cmluZy5VVEY4Q2hhcmFjdGVycywgbnBTdHJpbmcuVVRGOExlbmd0
aCwgdmFyaWFudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAodmFsdWUuaXNP
YmplY3QoKSkgewotICAgICAgICBOUE9iamVjdCogbnBPYmplY3QgPSBnZXRPckNyZWF0ZU5QT2Jq
ZWN0KHZtLCBhc09iamVjdCh2YWx1ZSkpOwotICAgICAgICBPQkpFQ1RfVE9fTlBWQVJJQU5UKG5w
T2JqZWN0LCB2YXJpYW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotfQotCi1ib29sIE5QUnVudGltZU9iamVjdE1hcDo6ZXZhbHVhdGUoTlBP
YmplY3QqIG5wT2JqZWN0LCBjb25zdCBTdHJpbmcmIHNjcmlwdFN0cmluZywgTlBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgU3Ryb25nPEpTR2xvYmFsT2JqZWN0PiBnbG9iYWxPYmplY3QodGhpcy0+
Z2xvYmFsT2JqZWN0KCktPnZtKCksIHRoaXMtPmdsb2JhbE9iamVjdCgpKTsKLSAgICBpZiAoIWds
b2JhbE9iamVjdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNMb2NrSG9sZGVyIGxv
Y2soZ2xvYmFsT2JqZWN0LmdldCgpKTsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGdldE9yQ3Jl
YXRlSlNPYmplY3QoZ2xvYmFsT2JqZWN0LmdldCgpLCBucE9iamVjdCk7Ci0KLSAgICBKU1ZhbHVl
IHJlc3VsdFZhbHVlID0gSlNDOjpldmFsdWF0ZShnbG9iYWxPYmplY3QuZ2V0KCksIG1ha2VTb3Vy
Y2Uoc2NyaXB0U3RyaW5nLCB7IH0pLCB0aGlzVmFsdWUpOwotCi0gICAgY29udmVydEpTVmFsdWVU
b05QVmFyaWFudChnbG9iYWxPYmplY3QuZ2V0KCksIHJlc3VsdFZhbHVlLCAqcmVzdWx0KTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6OmludmFsaWRhdGUo
KQotewotICAgIC8vIERlYWxsb2NhdGUgYWxsIHRoZSBvYmplY3Qgd3JhcHBlcnMgc28gd2Ugd29u
J3QgbGVhayBhbnkgSmF2YVNjcmlwdCBvYmplY3RzLgotICAgIGZvciAoYXV0byYgbnBKU09iamVj
dCA6IGNvcHlUb1ZlY3RvcihtX25wSlNPYmplY3RzLnZhbHVlcygpKSkKLSAgICAgICAgZGVhbGxv
Y2F0ZU5QT2JqZWN0KG5wSlNPYmplY3QpOwotICAgIAotICAgIC8vIFdlIHNob3VsZG4ndCBoYXZl
IGFueSBOUEpTT2JqZWN0cyBsZWZ0IG5vdy4KLSAgICBBU1NFUlQobV9ucEpTT2JqZWN0cy5pc0Vt
cHR5KCkpOwotCi0gICAgVmVjdG9yPE5QT2JqZWN0Kj4gb2JqZWN0czsKLQotICAgIGZvciAoSGFz
aE1hcDxOUE9iamVjdCosIEpTQzo6V2VhazxKU05QT2JqZWN0Pj46Oml0ZXJhdG9yIHB0ciA9IG1f
anNOUE9iamVjdHMuYmVnaW4oKSwgZW5kID0gbV9qc05QT2JqZWN0cy5lbmQoKTsgcHRyICE9IGVu
ZDsgKytwdHIpIHsKLSAgICAgICAgSlNOUE9iamVjdCoganNOUE9iamVjdCA9IHB0ci0+dmFsdWUu
Z2V0KCk7Ci0gICAgICAgIGlmICghanNOUE9iamVjdCkgLy8gU2tpcCB6b21iaWVzLgotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIG9iamVjdHMuYXBwZW5kKGpzTlBPYmplY3QtPmxlYWtO
UE9iamVjdCgpKTsKLSAgICB9Ci0KLSAgICBtX2pzTlBPYmplY3RzLmNsZWFyKCk7Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlbGVh
c2VOUE9iamVjdChvYmplY3RzW2ldKTsKLSAgICAKLSAgICAvLyBEZWFsIHdpdGggYW55IG9iamVj
dHMgdGhhdCB3ZXJlIHNjaGVkdWxlZCBmb3IgZGVsYXllZCBkZXN0cnVjdGlvbgotICAgIGlmICht
X25wT2JqZWN0c1RvRmluYWxpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgQVNT
RVJUKG1fZmluYWxpemF0aW9uVGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgbV9maW5hbGl6YXRpb25U
aW1lci5zdG9wKCk7Ci0gICAgaW52YWxpZGF0ZVF1ZXVlZE9iamVjdHMoKTsKLX0KLQotSlNHbG9i
YWxPYmplY3QqIE5QUnVudGltZU9iamVjdE1hcDo6Z2xvYmFsT2JqZWN0KCkgY29uc3QKLXsKLSAg
ICBGcmFtZSogZnJhbWUgPSBtX3BsdWdpblZpZXctPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9i
amVjdChwbHVnaW5Xb3JsZCgpKTsKLX0KLQotc3RhdGljIFN0cmluZyYgZ2xvYmFsRXhjZXB0aW9u
U3RyaW5nKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBleGNlcHRpb25T
dHJpbmc7Ci0gICAgcmV0dXJuIGV4Y2VwdGlvblN0cmluZzsKLX0KLQotdm9pZCBOUFJ1bnRpbWVP
YmplY3RNYXA6OnNldEdsb2JhbEV4Y2VwdGlvbihjb25zdCBTdHJpbmcmIGV4Y2VwdGlvblN0cmlu
ZykKLXsKLSAgICBnbG9iYWxFeGNlcHRpb25TdHJpbmcoKSA9IGV4Y2VwdGlvblN0cmluZzsKLX0K
LSAgICAKLXZvaWQgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVj
U3RhdGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QpCi17Ci0gICAgVk0mIHZt
ID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2so
dm0pOwotICAgICAgICB0aHJvd0V4Y2VwdGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwg
Y3JlYXRlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkp
KTsKLSAgICB9Ci0gICAgCi0gICAgZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkgPSBTdHJpbmcoKTsK
LX0KLQotdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6OmludmFsaWRhdGVRdWV1ZWRPYmplY3RzKCkK
LXsKLSAgICBBU1NFUlQobV9ucE9iamVjdHNUb0ZpbmFsaXplLnNpemUoKSk7Ci0gICAgLy8gV2Ug
ZGVsaWJlcmF0ZWx5IHJlLXJlcXVlc3QgbV9ucE9iamVjdHNUb0ZpbmFsaXplLnNpemUoKSBhcyBj
dXN0b20gZGVhbGxvYwotICAgIC8vIGZ1bmN0aW9ucyBtYXkgZXhlY3V0ZSBKUyBhbmQgc28gZ2V0
IG1vcmUgb2JqZWN0cyBhZGRlZCB0byB0aGUgZGVhbGxvYyBxdWV1ZQotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9ucE9iamVjdHNUb0ZpbmFsaXplLnNpemUoKTsgKytpKQotICAgICAgICBk
ZWFsbG9jYXRlTlBPYmplY3QobV9ucE9iamVjdHNUb0ZpbmFsaXplW2ldKTsKLSAgICBtX25wT2Jq
ZWN0c1RvRmluYWxpemUuY2xlYXIoKTsKLX0KLQotdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6OmFk
ZFRvSW52YWxpZGF0aW9uUXVldWUoTlBPYmplY3QqIG5wT2JqZWN0KQotewotICAgIGlmICh0cnlT
YWZlUmVsZWFzZU5QT2JqZWN0KG5wT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICht
X25wT2JqZWN0c1RvRmluYWxpemUuaXNFbXB0eSgpKQotICAgICAgICBtX2ZpbmFsaXphdGlvblRp
bWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotICAgIEFTU0VSVChtX2ZpbmFsaXphdGlvblRpbWVyLmlz
QWN0aXZlKCkpOwotICAgIG1fbnBPYmplY3RzVG9GaW5hbGl6ZS5hcHBlbmQobnBPYmplY3QpOwot
fQotCi12b2lkIE5QUnVudGltZU9iamVjdE1hcDo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCi17Ci0gICAgSlNOUE9iamVjdCogb2JqZWN0
ID0gc3RhdGljX2Nhc3Q8SlNOUE9iamVjdCo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7Ci0gICAg
d2Vha1JlbW92ZShtX2pzTlBPYmplY3RzLCBzdGF0aWNfY2FzdDxOUE9iamVjdCo+KGNvbnRleHQp
LCBvYmplY3QpOwotICAgIGFkZFRvSW52YWxpZGF0aW9uUXVldWUob2JqZWN0LT5sZWFrTlBPYmpl
Y3QoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjZDc0OWEzYjhmN2E4OTY5MjI0MTExMTUzYmZiZjI0MGRiOWNl
ZjU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE5Q
SlNPYmplY3RXcmFwcGVyTWFwX2gKLSNkZWZpbmUgTlBKU09iamVjdFdyYXBwZXJNYXBfaAotCi0j
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9XZWFrLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvV2Vha0lubGluZXMuaD4KLSNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8
d3RmL1J1bkxvb3AuaD4KLQotc3RydWN0IE5QT2JqZWN0OwotdHlwZWRlZiBzdHJ1Y3QgX05QVmFy
aWFudCBOUFZhcmlhbnQ7Ci0KLW5hbWVzcGFjZSBKU0MgewotICAgIGNsYXNzIENhbGxGcmFtZTsK
LSAgICBjbGFzcyBWTTsKLSAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKLSAgICBjbGFzcyBKU09i
amVjdDsKLSAgICBjbGFzcyBKU1ZhbHVlOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xh
c3MgSlNOUE9iamVjdDsKLWNsYXNzIE5QSlNPYmplY3Q7Ci1jbGFzcyBQbHVnaW5WaWV3OwotCi0v
LyBBIHBlciBwbHVnLWluIG1hcCBvZiBOUE9iamVjdHMgdGhhdCB3cmFwIEphdmFTY3JpcHQgb2Jq
ZWN0cy4KLWNsYXNzIE5QUnVudGltZU9iamVjdE1hcCA6IHByaXZhdGUgSlNDOjpXZWFrSGFuZGxl
T3duZXIgewotcHVibGljOgotICAgIGV4cGxpY2l0IE5QUnVudGltZU9iamVjdE1hcChQbHVnaW5W
aWV3Kik7Ci0KLSAgICBjbGFzcyBQbHVnaW5Qcm90ZWN0b3IgewotICAgIHB1YmxpYzoKLSAgICAg
ICAgZXhwbGljaXQgUGx1Z2luUHJvdGVjdG9yKE5QUnVudGltZU9iamVjdE1hcCogbnBSdW50aW1l
T2JqZWN0TWFwKTsKLSAgICAgICAgflBsdWdpblByb3RlY3RvcigpOwotICAgICAgICAKLSAgICBw
cml2YXRlOgotICAgICAgICBSZWZQdHI8UGx1Z2luVmlldz4gbV9wbHVnaW5WaWV3OwotICAgIH07
Ci0KLSAgICAvLyBSZXR1cm5zIGFuIE5QT2JqZWN0IHRoYXQgd3JhcHMgdGhlIGdpdmVuIEpTT2Jq
ZWN0IG9iamVjdC4gSWYgdGhlcmUgaXMgYWxyZWFkeSBhbiBOUE9iamVjdCB0aGF0IHdyYXBzIHRo
aXMgSlNPYmplY3QsIGl0IHdpbGwKLSAgICAvLyByZXRhaW4gaXQgYW5kIHJldHVybiBpdC4KLSAg
ICBOUE9iamVjdCogZ2V0T3JDcmVhdGVOUE9iamVjdChKU0M6OlZNJiwgSlNDOjpKU09iamVjdCop
OwotICAgIHZvaWQgbnBKU09iamVjdERlc3Ryb3llZChOUEpTT2JqZWN0Kik7Ci0KLSAgICAvLyBS
ZXR1cm5zIGEgSlNPYmplY3Qgb2JqZWN0IHRoYXQgd3JhcHMgdGhlIGdpdmVuIE5QT2JqZWN0Lgot
ICAgIEpTQzo6SlNPYmplY3QqIGdldE9yQ3JlYXRlSlNPYmplY3QoSlNDOjpKU0dsb2JhbE9iamVj
dCosIE5QT2JqZWN0Kik7Ci0gICAgdm9pZCBqc05QT2JqZWN0RGVzdHJveWVkKEpTTlBPYmplY3Qq
KTsKLQotICAgIHZvaWQgY29udmVydEpTVmFsdWVUb05QVmFyaWFudChKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpKU1ZhbHVlLCBOUFZhcmlhbnQmKTsKLSAgICBKU0M6OkpTVmFsdWUgY29udmVy
dE5QVmFyaWFudFRvSlNWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgTlBWYXJpYW50
Jik7Ci0KLSAgICBib29sIGV2YWx1YXRlKE5QT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBzY3JpcHRT
dHJpbmcsIE5QVmFyaWFudCogcmVzdWx0KTsKLQotICAgIC8vIENhbGxlZCB3aGVuIHRoZSBwbHVn
LWluIGlzIGRlc3Ryb3llZC4gV2lsbCBpbnZhbGlkYXRlIGFsbCB0aGUgTlBPYmplY3RzLgotICAg
IHZvaWQgaW52YWxpZGF0ZSgpOwotCi0gICAgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgdm9pZCBzZXRHbG9iYWxFeGNlcHRpb24oY29uc3Qg
U3RyaW5nJiBleGNlcHRpb25TdHJpbmcpOwotICAgIHN0YXRpYyB2b2lkIG1vdmVHbG9iYWxFeGNl
cHRpb25Ub0V4ZWNTdGF0ZShKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0KLXByaXZhdGU6Ci0gICAg
Ly8gV2Vha0hhbmRsZU93bmVyCi0gICAgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+LCB2b2lkKiBjb250ZXh0KSBvdmVycmlkZTsKLSAgICB2b2lkIGFkZFRvSW52YWxpZGF0
aW9uUXVldWUoTlBPYmplY3QqKTsKLSAgICB2b2lkIGludmFsaWRhdGVRdWV1ZWRPYmplY3RzKCk7
Ci0KLSAgICBQbHVnaW5WaWV3KiBtX3BsdWdpblZpZXc7Ci0gICAgSGFzaE1hcDxKU0M6OkpTT2Jq
ZWN0KiwgTlBKU09iamVjdCo+IG1fbnBKU09iamVjdHM7Ci0gICAgSGFzaE1hcDxOUE9iamVjdCos
IEpTQzo6V2VhazxKU05QT2JqZWN0Pj4gbV9qc05QT2JqZWN0czsKLSAgICBWZWN0b3I8TlBPYmpl
Y3QqPiBtX25wT2JqZWN0c1RvRmluYWxpemU7Ci0gICAgUnVuTG9vcDo6VGltZXI8TlBSdW50aW1l
T2JqZWN0TWFwPiBtX2ZpbmFsaXphdGlvblRpbWVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2VuZGlmIC8v
IE5QSlNPYmplY3RXcmFwcGVyTWFwX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZVV0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVVdGlsaXRpZXMuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODdhODVlNzk4Mzg2YTU0MjkyNTBlNjZhODQ1
OTYwY2U1ZDhlYTI1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZVV0
aWxpdGllcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOUFJ1bnRpbWVVdGlsaXRpZXMuaCIKLQot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9p
ZCogbnBuTWVtQWxsb2ModWludDMyX3Qgc2l6ZSkKLXsKLSAgICAvLyBXZSBjb3VsZCB1c2UgZmFz
dE1hbGxvYyBoZXJlLCBidXQgdGhlcmUgbWlnaHQgYmUgcGx1Zy1pbnMgdGhhdCBtaXggTlBOX01l
bUFsbG9jL05QTl9NZW1GcmVlIHdpdGggbWFsbG9jIGFuZCBmcmVlLAotICAgIC8vIHNvIGhhdmlu
ZyB0aGVtIGJlIGVxdWl2YWxlbnQgc2VlbXMgbGlrZSBhIGdvb2QgaWRlYS4KLSAgICByZXR1cm4g
bWFsbG9jKHNpemUpOwotfQotCi12b2lkIG5wbk1lbUZyZWUodm9pZCogcHRyKQotewotICAgIC8v
IFdlIGNvdWxkIHVzZSBmYXN0RnJlZSBoZXJlLCBidXQgdGhlcmUgbWlnaHQgYmUgcGx1Zy1pbnMg
dGhhdCBtaXggTlBOX01lbUFsbG9jL05QTl9NZW1GcmVlIHdpdGggbWFsbG9jIGFuZCBmcmVlLAot
ICAgIC8vIHNvIGhhdmluZyB0aGVtIGJlIGVxdWl2YWxlbnQgc2VlbXMgbGlrZSBhIGdvb2QgaWRl
YS4KLSAgICBmcmVlKHB0cik7Ci19Ci0KLU5QU3RyaW5nIGNyZWF0ZU5QU3RyaW5nKGNvbnN0IENT
dHJpbmcmIHN0cmluZykKLXsKLSAgICBjaGFyKiB1dGY4Q2hhcmFjdGVycyA9IG5wbk1lbU5ld0Fy
cmF5PGNoYXI+KHN0cmluZy5sZW5ndGgoKSk7Ci0gICAgbWVtY3B5KHV0ZjhDaGFyYWN0ZXJzLCBz
dHJpbmcuZGF0YSgpLCBzdHJpbmcubGVuZ3RoKCkpOwotCi0gICAgTlBTdHJpbmcgbnBTdHJpbmc7
Ci0gICAgbnBTdHJpbmcuVVRGOENoYXJhY3RlcnMgPSB1dGY4Q2hhcmFjdGVyczsKLSAgICBucFN0
cmluZy5VVEY4TGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotCi0gICAgcmV0dXJuIG5wU3RyaW5n
OwotfQotCi1OUE9iamVjdCogY3JlYXRlTlBPYmplY3QoTlBQIG5wcCwgTlBDbGFzcyogbnBDbGFz
cykKLXsKLSAgICBBU1NFUlQobnBDbGFzcyk7Ci0gICAgCi0gICAgTlBPYmplY3QqIG5wT2JqZWN0
OwotICAgIGlmIChucENsYXNzLT5hbGxvY2F0ZSkKLSAgICAgICAgbnBPYmplY3QgPSBucENsYXNz
LT5hbGxvY2F0ZShucHAsIG5wQ2xhc3MpOwotICAgIGVsc2UKLSAgICAgICAgbnBPYmplY3QgPSBu
cG5NZW1OZXc8TlBPYmplY3Q+KCk7Ci0KLSAgICBucE9iamVjdC0+X2NsYXNzID0gbnBDbGFzczsK
LSAgICBucE9iamVjdC0+cmVmZXJlbmNlQ291bnQgPSAxOwotICAgIAotICAgIHJldHVybiBucE9i
amVjdDsKLX0KLQotdm9pZCBkZWFsbG9jYXRlTlBPYmplY3QoTlBPYmplY3QqIG5wT2JqZWN0KQot
ewotICAgIEFTU0VSVChucE9iamVjdCk7Ci0gICAgaWYgKCFucE9iamVjdCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG5wT2JqZWN0LT5fY2xhc3MtPmRlYWxsb2NhdGUpCi0gICAgICAgIG5w
T2JqZWN0LT5fY2xhc3MtPmRlYWxsb2NhdGUobnBPYmplY3QpOwotICAgIGVsc2UKLSAgICAgICAg
bnBuTWVtRnJlZShucE9iamVjdCk7Ci19Ci0KLXZvaWQgcmV0YWluTlBPYmplY3QoTlBPYmplY3Qq
IG5wT2JqZWN0KQotewotICAgIEFTU0VSVChucE9iamVjdCk7Ci0gICAgaWYgKCFucE9iamVjdCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbnBPYmplY3QtPnJlZmVyZW5jZUNvdW50Kys7Ci19Ci0K
LWJvb2wgdHJ5U2FmZVJlbGVhc2VOUE9iamVjdChOUE9iamVjdCogbnBPYmplY3QpCi17Ci0gICAg
QVNTRVJUKG5wT2JqZWN0KTsKLSAgICBpZiAoIW5wT2JqZWN0KQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAKLSAgICBBU1NFUlQobnBPYmplY3QtPnJlZmVyZW5jZUNvdW50ID49IDEpOwotCi0g
ICAgbnBPYmplY3QtPnJlZmVyZW5jZUNvdW50LS07Ci0gICAgaWYgKG5wT2JqZWN0LT5yZWZlcmVu
Y2VDb3VudCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKG5wT2JqZWN0LT5fY2xhc3Mt
PmRlYWxsb2NhdGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWFsbG9jYXRlTlBPYmpl
Y3QobnBPYmplY3QpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIHJlbGVhc2VOUE9iamVj
dChOUE9iamVjdCogbnBPYmplY3QpCi17Ci0gICAgQVNTRVJUKG5wT2JqZWN0KTsKLSAgICBpZiAo
IW5wT2JqZWN0KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQVNTRVJUKG5wT2JqZWN0LT5y
ZWZlcmVuY2VDb3VudCA+PSAxKTsKLSAgICBucE9iamVjdC0+cmVmZXJlbmNlQ291bnQtLTsKLSAg
ICBpZiAoIW5wT2JqZWN0LT5yZWZlcmVuY2VDb3VudCkKLSAgICAgICAgZGVhbGxvY2F0ZU5QT2Jq
ZWN0KG5wT2JqZWN0KTsKLX0KLQotdm9pZCByZWxlYXNlTlBWYXJpYW50VmFsdWUoTlBWYXJpYW50
KiB2YXJpYW50KQotewotICAgIEFTU0VSVCh2YXJpYW50KTsKLSAgICAKLSAgICBzd2l0Y2ggKHZh
cmlhbnQtPnR5cGUpIHsKLSAgICBjYXNlIE5QVmFyaWFudFR5cGVfVm9pZDoKLSAgICBjYXNlIE5Q
VmFyaWFudFR5cGVfTnVsbDoKLSAgICBjYXNlIE5QVmFyaWFudFR5cGVfQm9vbDoKLSAgICBjYXNl
IE5QVmFyaWFudFR5cGVfSW50MzI6Ci0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX0RvdWJsZToKLSAg
ICAgICAgLy8gTm90aGluZyB0byBkby4KLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNh
c2UgTlBWYXJpYW50VHlwZV9TdHJpbmc6Ci0gICAgICAgIG5wbk1lbUZyZWUoY29uc3RfY2FzdDxO
UFVURjgqPih2YXJpYW50LT52YWx1ZS5zdHJpbmdWYWx1ZS5VVEY4Q2hhcmFjdGVycykpOwotICAg
ICAgICB2YXJpYW50LT52YWx1ZS5zdHJpbmdWYWx1ZS5VVEY4Q2hhcmFjdGVycyA9IDA7Ci0gICAg
ICAgIHZhcmlhbnQtPnZhbHVlLnN0cmluZ1ZhbHVlLlVURjhMZW5ndGggPSAwOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIE5QVmFyaWFudFR5cGVfT2JqZWN0OgotICAgICAgICByZWxlYXNlTlBP
YmplY3QodmFyaWFudC0+dmFsdWUub2JqZWN0VmFsdWUpOwotICAgICAgICB2YXJpYW50LT52YWx1
ZS5vYmplY3RWYWx1ZSA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHZhcmlhbnQt
PnR5cGUgPSBOUFZhcmlhbnRUeXBlX1ZvaWQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAot
Ci0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVVdGlsaXRpZXMu
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZVV0
aWxpdGllcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Nzc1ZDYyNjE5MTBjMmZk
OGRkOGI4MzllNDgzYzU0YWUwODYwOTQ1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L05QUnVudGltZVV0aWxpdGllcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgTlBSdW50aW1lVXRpbGl0aWVzX2gKLSNkZWZpbmUgTlBSdW50aW1l
VXRpbGl0aWVzX2gKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVk
ZSA8V2ViQ29yZS9ucHJ1bnRpbWVfaW50ZXJuYWwuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgotCi1zdHJ1Y3QgTlBDbGFzczsKLXN0cnVjdCBOUE9iamVjdDsKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLXZvaWQqIG5wbk1lbUFsbG9jKHVpbnQzMl90KTsKLXZvaWQgbnBuTWVtRnJlZSh2b2lk
Kik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIG5wbk1lbU5ldygpCi17Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PFQqPihucG5NZW1BbGxvYyhzaXplb2YoVCkpKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gVCogbnBuTWVtTmV3QXJyYXkoc2l6ZV90IGNvdW50KQotewotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxUKj4obnBuTWVtQWxsb2Moc2l6ZW9mKFQpICogY291bnQpKTsKLX0KLQot
TlBTdHJpbmcgY3JlYXRlTlBTdHJpbmcoY29uc3QgQ1N0cmluZyYpOwotCi1OUE9iamVjdCogY3Jl
YXRlTlBPYmplY3QoTlBQLCBOUENsYXNzKik7Ci12b2lkIGRlYWxsb2NhdGVOUE9iamVjdChOUE9i
amVjdCopOwotCi12b2lkIHJldGFpbk5QT2JqZWN0KE5QT2JqZWN0Kik7Ci12b2lkIHJlbGVhc2VO
UE9iamVjdChOUE9iamVjdCopOwotICAgIAotLy8gVGhpcyBmdW5jdGlvbiBkZWNyZW1lbnRzIHRo
ZSByZWZjb3VudCBvZiB0aGUgc3BlY2lmaWVkIG9iamVjdC4gSWYgdGhlCi0vLyByZWZjb3VudCBy
ZWFjaGVzIDAgaXQgd2lsbCBhdHRlbXB0IHRvIGRlc3Ryb3kgdGhlIG9iamVjdC4gSWYgdGhlIG9i
amVjdCBoYXMKLS8vIGEgY3VzdG9tIGRlYWxsb2NhdGUgZnVuY3Rpb24gaXQgd2lsbCBmYWlsIGFu
ZCByZXR1cm4gZmFsc2UsIHNvIGl0IHdpbGwgYmUKLS8vIHVwIHRvIHRoZSBjYWxsZXIgdG8gY2Fs
bCBkZWFsbG9jYXRlTlBPYmplY3QuCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW1wbGVt
ZW50IHRoZSBkZWxheWVkIGZpbmFsaXphdGlvbiBvZiBOUE9iamVjdHMKLS8vIHJlbGVhc2VkIGR1
cmluZyBHQy4KLWJvb2wgdHJ5U2FmZVJlbGVhc2VOUE9iamVjdChOUE9iamVjdCopOwotCi12b2lk
IHJlbGVhc2VOUFZhcmlhbnRWYWx1ZShOUFZhcmlhbnQqKTsKLQotfQotCi0jZW5kaWYgLy8gRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNlbmRpZiAvLyBOUFJ1bnRpbWVVdGlsaXRpZXNf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TmV0c2NhcGVCcm93c2VyRnVuY3MuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvTmV0c2NhcGVCcm93c2VyRnVuY3MuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAzZGM5MjhkYzU3YTk3ZDAyYzkyODQ1MzMxMWNmMzFjYmYyYjg1YzM0Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlQnJvd3NlckZ1bmNzLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDEwNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIk5ldHNjYXBlQnJvd3NlckZ1bmNzLmgiCi0KLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIk5QUnVudGltZVV0aWxpdGllcy5o
IgotI2luY2x1ZGUgIk5ldHNjYXBlUGx1Z2luLmgiCi0jaW5jbHVkZSAiUGx1Z2luQ29udHJvbGxl
ci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvSFRUUEhlYWRlck1hcC5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvSFRUUEhlYWRlck5hbWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JZGVudGlmaWVyUmVwLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
UHJvdGVjdGlvblNwYWNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KLSNp
bmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLSNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVy
c2lvbi5oPgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSA8d3RmL01hY2hTZW5kUmln
aHQuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oWDExKQotI2luY2x1ZGUgPFdlYkNvcmUvUGxh
dGZvcm1EaXNwbGF5WDExLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKLQotLy8gSGVscGVyIGNsYXNzIGZvciBkZWxheWluZyBkZXN0cnVj
dGlvbiBvZiBhIHBsdWctaW4uCi1jbGFzcyBQbHVnaW5EZXN0cnVjdGlvblByb3RlY3RvciB7Ci1w
dWJsaWM6Ci0gICAgZXhwbGljaXQgUGx1Z2luRGVzdHJ1Y3Rpb25Qcm90ZWN0b3IoTmV0c2NhcGVQ
bHVnaW4qIHBsdWdpbikKLSAgICB7Ci0gICAgICAgIGlmIChwbHVnaW4pCi0gICAgICAgICAgICBt
X3Byb3RlY3RvciA9IG1ha2VVbmlxdWU8UGx1Z2luQ29udHJvbGxlcjo6UGx1Z2luRGVzdHJ1Y3Rp
b25Qcm90ZWN0b3I+KHN0YXRpY19jYXN0PFBsdWdpbio+KHBsdWdpbiktPmNvbnRyb2xsZXIoKSk7
Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luQ29udHJv
bGxlcjo6UGx1Z2luRGVzdHJ1Y3Rpb25Qcm90ZWN0b3I+IG1fcHJvdGVjdG9yOwotfTsKLQotc3Rh
dGljIGJvb2wgc3RhcnRzV2l0aEJsYW5rTGluZShjb25zdCBjaGFyKiBieXRlcywgdW5zaWduZWQg
bGVuZ3RoKQotewotICAgIHJldHVybiBsZW5ndGggPiAwICYmIGJ5dGVzWzBdID09ICdcbic7Ci19
Ci0KLXN0YXRpYyBpbnQgbG9jYXRpb25BZnRlckZpcnN0QmxhbmtMaW5lKGNvbnN0IGNoYXIqIGJ5
dGVzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aCAtIDQ7IGkrKykgewotICAgICAgICAvLyBTdXBwb3J0IGZvciBBY3JvYmF0LiBJdCBzZW5k
cyAiXG5cbiIuCi0gICAgICAgIGlmIChieXRlc1tpXSA9PSAnXG4nICYmIGJ5dGVzW2kgKyAxXSA9
PSAnXG4nKQotICAgICAgICAgICAgcmV0dXJuIGkgKyAyOwotICAgICAgICAKLSAgICAgICAgLy8g
UmV0dXJucyB0aGUgcG9zaXRpb24gYWZ0ZXIgMiBDUkxGJ3Mgb3IgMSBDUkxGIGlmIGl0IGlzIHRo
ZSBmaXJzdCBsaW5lLgotICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsg
MV0gPT0gJ1xuJykgewotICAgICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAgaWYgKGkgPT0g
MikKLSAgICAgICAgICAgICAgICByZXR1cm4gaTsKLQotICAgICAgICAgICAgaWYgKGJ5dGVzW2ld
ID09ICdcbicpIHsKLSAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBEaXJlY3Rvci4gSXQg
c2VuZHMgIlxyXG5cbiIgKDM4ODAzODcpLgotICAgICAgICAgICAgICAgIHJldHVybiBpICsgMTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicgJiYgYnl0
ZXNbaSArIDFdID09ICdcbicpIHsKLSAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBGbGFz
aC4gSXQgc2VuZHMgIlxyXG5cclxuIiAoMzc1ODExMykuCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGkgKyAyOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0x
OwotfQotCi1zdGF0aWMgY29uc3QgY2hhciogZmluZEVuZE9mTGluZShjb25zdCBjaGFyKiBieXRl
cywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIC8vIEFjY29yZGluZyB0byB0aGUgSFRUUCBzcGVj
aWZpY2F0aW9uIEVPTCBpcyBkZWZpbmVkIGFzCi0gICAgLy8gYSBDUkxGIHBhaXIuIFVuZm9ydHVu
YXRlbHksIHNvbWUgc2VydmVycyB3aWxsIHVzZSBMRgotICAgIC8vIGluc3RlYWQuIFdvcnNlIHll
dCwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNlIGEgY29tYmluYXRpb24KLSAgICAvLyBvZiBib3RoIChl
LmcuIDxoZWFkZXI+Q1JMRkxGPGJvZHk+KSwgc28gZmluZEVPTCBuZWVkcwotICAgIC8vIHRvIGJl
IG1vcmUgZm9yZ2l2aW5nLiBJdCB3aWxsIG5vdyBhY2NlcHQgQ1JMRiwgTEYgb3IKLSAgICAvLyBD
Ui4KLSAgICAvLwotICAgIC8vIEl0IHJldHVybnMgMCBpZiBFT0xGIGlzIG5vdCBmb3VuZCBvciBp
dCB3aWxsIHJldHVybgotICAgIC8vIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgdGVybWluYXRpbmcg
Y2hhcmFjdGVyLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewot
ICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xuJykKLSAgICAgICAgICAgIHJldHVybiBieXRlcyAr
IGk7Ci0gICAgICAgIGlmIChieXRlc1tpXSA9PSAnXHInKSB7Ci0gICAgICAgICAgICAvLyBDaGVj
ayB0byBzZWUgaWYgc3Bhbm5pbmcgYnVmZmVyIGJvdW5kcwotICAgICAgICAgICAgLy8gKENSTEYg
aXMgYWNyb3NzIHJlYWRzKS4gSWYgc28sIHdhaXQgZm9yCi0gICAgICAgICAgICAvLyBuZXh0IHJl
YWQuCi0gICAgICAgICAgICBpZiAoaSArIDEgPT0gbGVuZ3RoKQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgICAgICByZXR1cm4gYnl0ZXMgKyBpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgY2FwaXRhbGl6ZVJGQzgyMkhlYWRl
ckZpZWxkTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgYm9vbCBjYXBpdGFsaXplQ2hh
cmFjdGVyID0gdHJ1ZTsKLSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgIHJlc3VsdC5hcHBl
bmQoY2FwaXRhbGl6ZUNoYXJhY3RlciA/IHRvQVNDSUlVcHBlcihuYW1lW2ldKSA6IHRvQVNDSUlM
b3dlcihuYW1lW2ldKSk7Ci0gICAgICAgIGlmIChuYW1lW2ldID09ICctJykKLSAgICAgICAgICAg
IGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBj
YXBpdGFsaXplQ2hhcmFjdGVyID0gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQudG9T
dHJpbmcoKTsKLX0KLQotc3RhdGljIEhUVFBIZWFkZXJNYXAgcGFyc2VSRkM4MjJIZWFkZXJGaWVs
ZHMoY29uc3QgY2hhciogYnl0ZXMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBTdHJpbmcgbGFz
dEhlYWRlcktleTsKLSAgICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxkczsKLQotICAgIC8vIExv
b3Agb3ZlciBsaW5lcyB1bnRpbCB3ZSdyZSBwYXN0IHRoZSBoZWFkZXIsIG9yIHdlIGNhbid0IGZp
bmQgYW55IG1vcmUgZW5kLW9mLWxpbmVzCi0gICAgd2hpbGUgKGNvbnN0IGNoYXIqIGVuZE9mTGlu
ZSA9IGZpbmRFbmRPZkxpbmUoYnl0ZXMsIGxlbmd0aCkpIHsKLSAgICAgICAgY29uc3QgY2hhciog
bGluZSA9IGJ5dGVzOwotICAgICAgICBpbnQgbGluZUxlbmd0aCA9IGVuZE9mTGluZSAtIGJ5dGVz
OwotCi0gICAgICAgIC8vIE1vdmUgYnl0ZXMgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgdGVy
bWluYXRvciBhcyByZXR1cm5lZCBieSBmaW5kRW5kT2ZMaW5lLgotICAgICAgICBieXRlcyA9IGVu
ZE9mTGluZSArIDE7Ci0gICAgICAgIGlmICgoKmVuZE9mTGluZSA9PSAnXHInKSAmJiAoKmJ5dGVz
ID09ICdcbicpKQotICAgICAgICAgICAgYnl0ZXMrKzsgLy8gU2FmZSBzaW5jZSBmaW5kRW5kT2ZM
aW5lIHdvbid0IHJldHVybiBhIHNwYW5uaW5nIENSTEYuCi0KLSAgICAgICAgbGVuZ3RoIC09IChi
eXRlcyAtIGxpbmUpOwotICAgICAgICBpZiAoIWxpbmVMZW5ndGgpIHsKLSAgICAgICAgICAgIC8v
IEJsYW5rIGxpbmU7IHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGhlYWRlcgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKmxpbmUgPT0gJyAnIHx8ICpsaW5lID09
ICdcdCcpIHsKLSAgICAgICAgICAgIC8vIENvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVh
ZGVyCi0gICAgICAgICAgICBpZiAobGFzdEhlYWRlcktleS5pc051bGwoKSkgewotICAgICAgICAg
ICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0gCi0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIC8vIE1lcmdlIHRoZSBjb250aW51YXRpb24gb2YgdGhlIHByZXZpb3VzIGhlYWRlcgot
ICAgICAgICAgICAgU3RyaW5nIGN1cnJlbnRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEhl
YWRlcktleSk7Ci0gICAgICAgICAgICBTdHJpbmcgbmV3VmFsdWUobGluZSwgbGluZUxlbmd0aCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGhlYWRlckZpZWxkcy5zZXQobGFzdEhlYWRlcktl
eSwgY3VycmVudFZhbHVlICsgbmV3VmFsdWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgLy8gQnJhbmQgbmV3IGhlYWRlcgotICAgICAgICAgICAgY29uc3QgY2hhciogY29sb24gPSBs
aW5lOwotICAgICAgICAgICAgd2hpbGUgKCpjb2xvbiAhPSAnOicgJiYgY29sb24gIT0gZW5kT2ZM
aW5lKQotICAgICAgICAgICAgICAgIGNvbG9uKys7Ci0KLSAgICAgICAgICAgIGlmIChjb2xvbiA9
PSBlbmRPZkxpbmUpIHsKLSAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgaGVhZGVyOyBpZ25v
cmUgaXQgYW5kIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGxhc3RIZWFkZXJLZXkgPSBjYXBpdGFsaXplUkZDODIySGVhZGVy
RmllbGROYW1lKFN0cmluZyhsaW5lLCBjb2xvbiAtIGxpbmUpKTsKLSAgICAgICAgICAgIFN0cmlu
ZyB2YWx1ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChjb2xvbisrOyBjb2xvbiAh
PSBlbmRPZkxpbmU7IGNvbG9uKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoKmNvbG9uICE9ICcg
JyAmJiAqY29sb24gIT0gJ1x0JykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoY29sb24gPT0gZW5kT2ZMaW5lKQotICAgICAgICAgICAg
ICAgIHZhbHVlID0gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICB2YWx1ZSA9IFN0cmluZyhjb2xvbiwgZW5kT2ZMaW5lIC0gY29sb24pOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBTdHJpbmcgb2xkVmFsdWUgPSBoZWFkZXJGaWVsZHMuZ2V0KGxhc3RI
ZWFkZXJLZXkpOwotICAgICAgICAgICAgaWYgKCFvbGRWYWx1ZS5pc051bGwoKSkKLSAgICAgICAg
ICAgICAgICB2YWx1ZSA9IG9sZFZhbHVlICsgIiwgIiArIHZhbHVlOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBoZWFkZXJGaWVsZHMuc2V0KGxhc3RIZWFkZXJLZXksIHZhbHVlKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBoZWFkZXJGaWVsZHM7Ci19Ci0gICAgCi1zdGF0aWMg
TlBFcnJvciBwYXJzZVBvc3RCdWZmZXIoYm9vbCBpc0ZpbGUsIGNvbnN0IGNoYXIgKmJ1ZmZlciwg
dWludDMyX3QgbGVuZ3RoLCBib29sIHBhcnNlSGVhZGVycywgSFRUUEhlYWRlck1hcCYgaGVhZGVy
RmllbGRzLCBWZWN0b3I8dWludDhfdD4mIGJvZHlEYXRhKQotewotICAgIFJlZlB0cjxTaGFyZWRC
dWZmZXI+IGZpbGVDb250ZW50czsKLSAgICBjb25zdCBjaGFyKiBwb3N0QnVmZmVyID0gMDsKLSAg
ICB1aW50MzJfdCBwb3N0QnVmZmVyU2l6ZSA9IDA7Ci0KLSAgICBpZiAoaXNGaWxlKSB7Ci0gICAg
ICAgIGZpbGVDb250ZW50cyA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0aENvbnRlbnRzT2ZGaWxl
KFN0cmluZzo6ZnJvbVVURjgoYnVmZmVyKSk7Ci0gICAgICAgIGlmICghZmlsZUNvbnRlbnRzKQot
ICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwotCi0gICAgICAgIHBvc3RC
dWZmZXIgPSBmaWxlQ29udGVudHMtPmRhdGFBc0NoYXJQdHIoKTsKLSAgICAgICAgcG9zdEJ1ZmZl
clNpemUgPSBmaWxlQ29udGVudHMtPnNpemUoKTsKLQotICAgICAgICAvLyBGSVhNRTogVGhlIE5Q
QVBJIHNwZWMgc3RhdGVzIHRoYXQgdGhlIGZpbGUgc2hvdWxkIGJlIGRlbGV0ZWQgaGVyZS4KLSAg
ICB9IGVsc2UgewotICAgICAgICBwb3N0QnVmZmVyID0gYnVmZmVyOwotICAgICAgICBwb3N0QnVm
ZmVyU2l6ZSA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICBpZiAocGFyc2VIZWFkZXJzKSB7Ci0gICAg
ICAgIGlmIChzdGFydHNXaXRoQmxhbmtMaW5lKHBvc3RCdWZmZXIsIHBvc3RCdWZmZXJTaXplKSkg
ewotICAgICAgICAgICAgcG9zdEJ1ZmZlcisrOwotICAgICAgICAgICAgcG9zdEJ1ZmZlclNpemUt
LTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGludCBsb2NhdGlvbiA9IGxvY2F0aW9u
QWZ0ZXJGaXJzdEJsYW5rTGluZShwb3N0QnVmZmVyLCBwb3N0QnVmZmVyU2l6ZSk7Ci0gICAgICAg
ICAgICBpZiAobG9jYXRpb24gIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYmxh
bmsgbGluZSBpcyBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgYnVmZmVyLCBldmVyeXRo
aW5nIGJlZm9yZSBpcyB0aGUgaGVhZGVyCi0gICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzID0g
cGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMocG9zdEJ1ZmZlciwgbG9jYXRpb24pOwotICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGRhdGFMZW5ndGggPSBwb3N0QnVmZmVyU2l6ZSAtIGxvY2F0aW9uOwot
Ci0gICAgICAgICAgICAgICAgLy8gU29tZXRpbWVzIHBsdWdpbnMgbGlrZSB0byBzZXQgQ29udGVu
dC1MZW5ndGggdGhlbXNlbHZlcyB3aGVuIHRoZXkgcG9zdCwKLSAgICAgICAgICAgICAgICAvLyBi
dXQgV2ViRm91bmRhdGlvbiBkb2VzIG5vdCBsaWtlIHRoYXQuIFNvIHdlIHdpbGwgcmVtb3ZlIHRo
ZSBoZWFkZXIKLSAgICAgICAgICAgICAgICAvLyBhbmQgaW5zdGVhZCB0cnVuY2F0ZSB0aGUgZGF0
YSB0byB0aGUgcmVxdWVzdGVkIGxlbmd0aC4KLSAgICAgICAgICAgICAgICBTdHJpbmcgY29udGVu
dExlbmd0aCA9IGhlYWRlckZpZWxkcy5nZXQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMZW5ndGgp
OwotCi0gICAgICAgICAgICAgICAgaWYgKCFjb250ZW50TGVuZ3RoLmlzTnVsbCgpKQotICAgICAg
ICAgICAgICAgICAgICBkYXRhTGVuZ3RoID0gc3RkOjptaW4ocGFyc2VJbnRlZ2VyQWxsb3dpbmdU
cmFpbGluZ0p1bms8dW5zaWduZWQ+KGNvbnRlbnRMZW5ndGgpLnZhbHVlX29yKDApLCBkYXRhTGVu
Z3RoKTsKLSAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMucmVtb3ZlKEhUVFBIZWFkZXJOYW1l
OjpDb250ZW50TGVuZ3RoKTsKLQotICAgICAgICAgICAgICAgIHBvc3RCdWZmZXIgKz0gbG9jYXRp
b247Ci0gICAgICAgICAgICAgICAgcG9zdEJ1ZmZlclNpemUgPSBkYXRhTGVuZ3RoOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgQVNTRVJUKGJvZHlEYXRhLmlzRW1wdHko
KSk7Ci0gICAgYm9keURhdGEuYXBwZW5kKHBvc3RCdWZmZXIsIHBvc3RCdWZmZXJTaXplKTsKLQot
ICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLX0KLQotc3RhdGljIFN0cmluZyBtYWtlVVJMU3Ry
aW5nKGNvbnN0IGNoYXIqIHVybCkKLXsKLSAgICBTdHJpbmcgdXJsU3RyaW5nKHVybCk7Ci0gICAg
Ci0gICAgLy8gU3RyaXAgcmV0dXJuIGNoYXJhY3RlcnMuCi0gICAgdXJsU3RyaW5nLnJlcGxhY2VX
aXRoTGl0ZXJhbCgnXHInLCAiIik7Ci0gICAgdXJsU3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgn
XG4nLCAiIik7Ci0KLSAgICByZXR1cm4gdXJsU3RyaW5nOwotfQotCi1zdGF0aWMgTlBFcnJvciBO
UE5fR2V0VVJMKE5QUCBucHAsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0KQot
ewotICAgIGlmICghdXJsKQotICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAg
ICAKLSAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpm
cm9tTlBQKG5wcCk7Ci0gICAgcGx1Z2luLT5sb2FkVVJMKCJHRVQiLCBtYWtlVVJMU3RyaW5nKHVy
bCksIHRhcmdldCwgSFRUUEhlYWRlck1hcCgpLCBWZWN0b3I8dWludDhfdD4oKSwgZmFsc2UsIDAp
OwotICAgIAotICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotfQotCi1zdGF0aWMgTlBF
cnJvciBOUE5fUG9zdFVSTChOUFAgbnBwLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRh
cmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlKQotewotICAg
IEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOwotICAgIFZlY3Rvcjx1aW50OF90PiBwb3N0RGF0
YTsKLSAgICAKLSAgICAvLyBOUE5fUG9zdFVSTCBvbmx5IGFsbG93cyBoZWFkZXJzIGlmIHRoZSBw
b3N0IGJ1ZmZlciBwb2ludHMgdG8gYSBmaWxlLgotICAgIGJvb2wgcGFyc2VIZWFkZXJzID0gZmls
ZTsKLQotICAgIE5QRXJyb3IgZXJyb3IgPSBwYXJzZVBvc3RCdWZmZXIoZmlsZSwgYnVmLCBsZW4s
IHBhcnNlSGVhZGVycywgaGVhZGVyRmllbGRzLCBwb3N0RGF0YSk7Ci0gICAgaWYgKGVycm9yICE9
IE5QRVJSX05PX0VSUk9SKQotICAgICAgICByZXR1cm4gZXJyb3I7Ci0KLSAgICBSZWZQdHI8TmV0
c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0gICAg
cGx1Z2luLT5sb2FkVVJMKCJQT1NUIiwgbWFrZVVSTFN0cmluZyh1cmwpLCB0YXJnZXQsIFdURk1v
dmUoaGVhZGVyRmllbGRzKSwgcG9zdERhdGEsIGZhbHNlLCAwKTsKLSAgICByZXR1cm4gTlBFUlJf
Tk9fRVJST1I7Ci19Ci0KLXN0YXRpYyBOUEVycm9yIE5QTl9SZXF1ZXN0UmVhZChOUFN0cmVhbSos
IE5QQnl0ZVJhbmdlKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBOUEVS
Ul9HRU5FUklDX0VSUk9SOwotfQotCi1zdGF0aWMgTlBFcnJvciBOUE5fTmV3U3RyZWFtKE5QUCwg
TlBNSU1FVHlwZSwgY29uc3QgY2hhciosIE5QU3RyZWFtKiopCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLX0KLSAgICAKLXN0YXRpYyBp
bnQzMl90IE5QTl9Xcml0ZShOUFAsIE5QU3RyZWFtKiwgaW50MzJfdCwgdm9pZCopCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsgICAgCi0gICAgcmV0dXJuIC0xOwotfQotICAgIAotc3RhdGljIE5Q
RXJyb3IgTlBOX0Rlc3Ryb3lTdHJlYW0oTlBQIG5wcCwgTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFz
b24gcmVhc29uKQotewotICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0c2Nh
cGVQbHVnaW46OmZyb21OUFAobnBwKTsKLSAgICAKLSAgICByZXR1cm4gcGx1Z2luLT5kZXN0cm95
U3RyZWFtKHN0cmVhbSwgcmVhc29uKTsKLX0KLQotc3RhdGljIHZvaWQgTlBOX1N0YXR1cyhOUFAg
bnBwLCBjb25zdCBjaGFyKiBtZXNzYWdlKQotewotICAgIFN0cmluZyBzdGF0dXNiYXJUZXh0Owot
ICAgIGlmICghbWVzc2FnZSkKLSAgICAgICAgc3RhdHVzYmFyVGV4dCA9IGVtcHR5U3RyaW5nKCk7
Ci0gICAgZWxzZQotICAgICAgICBzdGF0dXNiYXJUZXh0ID0gU3RyaW5nOjpmcm9tVVRGOFdpdGhM
YXRpbjFGYWxsYmFjayhtZXNzYWdlLCBzdHJsZW4obWVzc2FnZSkpOwotCi0gICAgUmVmUHRyPE5l
dHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotICAg
IHBsdWdpbi0+c2V0U3RhdHVzYmFyVGV4dChzdGF0dXNiYXJUZXh0KTsKLX0KLSAgICAKLXN0YXRp
YyBjb25zdCBjaGFyKiBOUE5fVXNlckFnZW50KE5QUCBucHApCi17Ci0gICAgcmV0dXJuIE5ldHNj
YXBlUGx1Z2luOjp1c2VyQWdlbnQobnBwKTsKLX0KLQotc3RhdGljIHZvaWQqIE5QTl9NZW1BbGxv
Yyh1aW50MzJfdCBzaXplKQotewotICAgIHJldHVybiBucG5NZW1BbGxvYyhzaXplKTsKLX0KLQot
c3RhdGljIHZvaWQgTlBOX01lbUZyZWUodm9pZCogcHRyKQotewotICAgIG5wbk1lbUZyZWUocHRy
KTsKLX0KLQotc3RhdGljIHVpbnQzMl90IE5QTl9NZW1GbHVzaCh1aW50MzJfdCkKLXsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgTlBOX1JlbG9hZFBsdWdpbnMoTlBCb29sKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXN0YXRpYyBKUklFbnYqIE5QTl9HZXRKYXZhRW52
KHZvaWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3Rh
dGljIGpyZWYgTlBOX0dldEphdmFQZWVyKE5QUCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgTlBFcnJvciBOUE5fR2V0VVJMTm90aWZ5KE5QUCBu
cHAsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRh
KQotewotICAgIGlmICghdXJsKQotICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsK
LQotICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZy
b21OUFAobnBwKTsKLSAgICBwbHVnaW4tPmxvYWRVUkwoIkdFVCIsIG1ha2VVUkxTdHJpbmcodXJs
KSwgdGFyZ2V0LCBIVFRQSGVhZGVyTWFwKCksIFZlY3Rvcjx1aW50OF90PigpLCB0cnVlLCBub3Rp
ZnlEYXRhKTsKLSAgICAKLSAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLXN0YXRpYyBO
UEVycm9yIE5QTl9Qb3N0VVJMTm90aWZ5KE5QUCBucHAsIGNvbnN0IGNoYXIqIHVybCwgY29uc3Qg
Y2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUs
IHZvaWQqIG5vdGlmeURhdGEpCi17Ci0gICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7Ci0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IHBvc3REYXRhOwotICAgIE5QRXJyb3IgZXJyb3IgPSBwYXJzZVBv
c3RCdWZmZXIoZmlsZSwgYnVmLCBsZW4sIHRydWUsIGhlYWRlckZpZWxkcywgcG9zdERhdGEpOwot
ICAgIGlmIChlcnJvciAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgcmV0dXJuIGVycm9yOwot
Ci0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJv
bU5QUChucHApOwotICAgIHBsdWdpbi0+bG9hZFVSTCgiUE9TVCIsIG1ha2VVUkxTdHJpbmcodXJs
KSwgdGFyZ2V0LCBoZWFkZXJGaWVsZHMsIHBvc3REYXRhLCB0cnVlLCBub3RpZnlEYXRhKTsKLSAg
ICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLS8vIFdo
ZXRoZXIgdGhlIGJyb3dzZXIgc3VwcG9ydHMgY29tcG9zaXRpbmcgb2YgQ29yZSBBbmltYXRpb24g
cGx1Zy1pbnMuCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgV0tOVlN1cHBvcnRzQ29tcG9zaXRpbmdD
b3JlQW5pbWF0aW9uUGx1Z2luc0Jvb2wgPSA3NDY1NjsKLQotLy8gV2hldGhlciB0aGUgYnJvd3Nl
ciBleHBlY3RzIGEgbm9uLXJldGFpbmVkIENvcmUgQW5pbWF0aW9uIGxheWVyLgotc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFdLTlZFeHBlY3RzTm9ucmV0YWluZWRMYXllciA9IDc0NjU3OwotCi0vLyA3
NDY1OCBhbmQgNzQ2NTkgYXJlIG5vIGxvbmdlciBpbXBsZW1lbnRlZC4KLQotI2VuZGlmCi0KLXN0
YXRpYyBOUEVycm9yIE5QTl9HZXRWYWx1ZShOUFAgbnBwLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwg
dm9pZCAqdmFsdWUpCi17Ci0gICAgc3dpdGNoIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFyaWFi
bGUpKSB7Ci0gICAgICAgIGNhc2UgTlBOVldpbmRvd05QT2JqZWN0OiB7Ci0gICAgICAgICAgICBS
ZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5w
cCk7Ci0gICAgICAgICAgICBQbHVnaW5EZXN0cnVjdGlvblByb3RlY3RvciBwcm90ZWN0b3IocGx1
Z2luLmdldCgpKTsKLQotICAgICAgICAgICAgTlBPYmplY3QqIHdpbmRvd05QT2JqZWN0ID0gcGx1
Z2luLT53aW5kb3dTY3JpcHROUE9iamVjdCgpOwotICAgICAgICAgICAgaWYgKCF3aW5kb3dOUE9i
amVjdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLQotICAg
ICAgICAgICAgKihOUE9iamVjdCoqKXZhbHVlID0gd2luZG93TlBPYmplY3Q7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmpl
Y3Q6IHsKLSAgICAgICAgICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0c2Nh
cGVQbHVnaW46OmZyb21OUFAobnBwKTsKLSAgICAgICAgICAgIFBsdWdpbkRlc3RydWN0aW9uUHJv
dGVjdG9yIHByb3RlY3RvcihwbHVnaW4uZ2V0KCkpOwotCi0gICAgICAgICAgICBOUE9iamVjdCog
cGx1Z2luRWxlbWVudE5QT2JqZWN0ID0gcGx1Z2luLT5wbHVnaW5FbGVtZW50TlBPYmplY3QoKTsK
LSAgICAgICAgICAgICooTlBPYmplY3QqKil2YWx1ZSA9IHBsdWdpbkVsZW1lbnROUE9iamVjdDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgTlBOVnByaXZhdGVN
b2RlQm9vbDogewotICAgICAgICAgICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBO
ZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotCi0gICAgICAgICAgICAqKE5QQm9vbCopdmFs
dWUgPSBwbHVnaW4tPmlzUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIE5QTlZtdXRlQXVkaW9Cb29sOiB7Ci0gICAg
ICAgICAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpm
cm9tTlBQKG5wcCk7Ci0gICAgICAgICAgICAqKE5QQm9vbCopdmFsdWUgPSBwbHVnaW4tPmlzTXV0
ZWQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci0gICAgICAgIGNhc2UgTlBOVnN1cHBvcnRzQ29yZUdyYXBoaWNzQm9vbDoKLSAgICAgICAgICAg
IC8vIEFsd2F5cyBjbGFpbSB0byBzdXBwb3J0IHRoZSBDb3JlIEdyYXBoaWNzIGRyYXdpbmcgbW9k
ZWwuCi0gICAgICAgICAgICAqKE5QQm9vbCopdmFsdWUgPSB0cnVlOwotICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgY2FzZSBXS05WU3VwcG9ydHNDb21wb3NpdGluZ0NvcmVBbmltYXRpb25Q
bHVnaW5zQm9vbDoKLSAgICAgICAgY2FzZSBOUE5Wc3VwcG9ydHNDb3JlQW5pbWF0aW9uQm9vbDog
ewotICAgICAgICAgICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBs
dWdpbjo6ZnJvbU5QUChucHApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAqKE5QQm9vbCop
dmFsdWUgPSBwbHVnaW4tPmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgTlBOVmNvbnRlbnRzU2NhbGVG
YWN0b3I6IHsKLSAgICAgICAgICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0
c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsKLQotICAgICAgICAgICAgKihkb3VibGUqKXZhbHVl
ID0gcGx1Z2luLT5jb250ZW50c1NjYWxlRmFjdG9yKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIE5QTlZzdXBwb3J0c0NvY29hQm9vbDoKLSAgICAgICAgICAg
IC8vIEFsd2F5cyBjbGFpbSB0byBzdXBwb3J0IHRoZSBDb2NvYSBldmVudCBtb2RlbC4KLSAgICAg
ICAgICAgICooTlBCb29sKil2YWx1ZSA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICBjYXNlIE5QTlZzdXBwb3J0c1VwZGF0ZWRDb2NvYVRleHRJbnB1dEJvb2w6IHsKLSAgICAg
ICAgICAgIC8vIFRoZSBwbHVnLWluIGlzIGFza2luZyB3aGV0aGVyIHdlIHN1cHBvcnQgdGhlIHVw
ZGF0ZWQgQ29jb2EgdGV4dCBpbnB1dCBtb2RlbC4KLSAgICAgICAgICAgIC8vIElmIHdlIGhhdmVu
J3QgeWV0IGRlbGl2ZXJlZCBhIGtleSBkb3duIGV2ZW50IHRvIHRoZSBwbHVnLWluLCB3ZSBjYW4g
b3B0IGludG8gdGhlIHVwZGF0ZWQKLSAgICAgICAgICAgIC8vIG1vZGVsIGFuZCBzYXkgdGhhdCB3
ZSBzdXBwb3J0IGl0LiBPdGhlcndpc2UsIHdlJ2xsIGp1c3QgZmFsbCBiYWNrIGFuZCBzYXkgdGhh
dCB3ZSBkb24ndCBzdXBwb3J0IGl0LgotICAgICAgICAgICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2lu
PiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotCi0gICAgICAgICAgICBi
b29sIHN1cHBvcnRzVXBkYXRlZFRleHRJbnB1dCA9ICFwbHVnaW4tPmhhc0hhbmRsZWRBS2V5RG93
bkV2ZW50KCk7Ci0gICAgICAgICAgICBpZiAoc3VwcG9ydHNVcGRhdGVkVGV4dElucHV0KQotICAg
ICAgICAgICAgICAgIHBsdWdpbi0+c2V0UGx1Z2luV2FudHNMZWdhY3lDb2NvYVRleHRJbnB1dChm
YWxzZSk7Ci0KLSAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PE5QQm9vbCo+KHZhbHVlKSA9
IHN1cHBvcnRzVXBkYXRlZFRleHRJbnB1dDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0KLSAgICAgICAgY2FzZSBXS05WQ0FMYXllclJlbmRlclNlcnZlclBvcnQ6IHsKLSAgICAgICAg
ICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21O
UFAobnBwKTsKLQotICAgICAgICAgICAgKihtYWNoX3BvcnRfdCopdmFsdWUgPSBwbHVnaW4tPmNv
bXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydCgpLnNlbmRSaWdodCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIFdLTlZFeHBlY3RzTm9ucmV0YWluZWRMYXll
cjogewotICAgICAgICAgICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2Fw
ZVBsdWdpbjo6ZnJvbU5QUChucHApOwotCi0gICAgICAgICAgICAvLyBBc2tpbmcgZm9yIHRoaXMg
d2lsbCBtYWtlIHVzIGV4cGVjdCBhIG5vbi1yZXRhaW5lZCBsYXllciBmcm9tIHRoZSBwbHVnLWlu
LgotICAgICAgICAgICAgcGx1Z2luLT5zZXRQbHVnaW5SZXR1cm5zTm9ucmV0YWluZWRMYXllcih0
cnVlKTsKLSAgICAgICAgICAgICooTlBCb29sKil2YWx1ZSA9IHRydWU7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotI2VsaWYgUExBVEZPUk0oWDExKQotICAgICAgICBjYXNlIE5QTlZ4
RGlzcGxheTogewotICAgICAgICAgICAgaWYgKCFucHApCi0gICAgICAgICAgICAgICAgcmV0dXJu
IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgICAgICBhdXRvJiBkaXNwbGF5ID0gUGxhdGZv
cm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCk7Ci0gICAgICAgICAgICBpZiAoZGlzcGxheS50eXBl
KCkgIT0gUGxhdGZvcm1EaXNwbGF5OjpUeXBlOjpYMTEpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxEaXNw
bGF5Kio+KHZhbHVlKSA9IGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgxMT4oZGlzcGxheSkubmF0
aXZlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIE5QTlZT
dXBwb3J0c1hFbWJlZEJvb2w6Ci0gICAgICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFs
dWUpID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkudHlwZSgpID09IFBsYXRmb3Jt
RGlzcGxheTo6VHlwZTo6WDExOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTlBO
VlN1cHBvcnRzV2luZG93bGVzczoKLSAgICAgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2
YWx1ZSkgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICBjYXNlIE5QTlZUb29s
a2l0OiB7Ci0gICAgICAgICAgIC8vIEd0ayBiYXNlZCBwbHVnaW5zIG5lZWQgdG8gYmUgYXNzdXJl
ZCBhYm91dCB0aGUgdG9vbGtpdCB2ZXJzaW9uLgotICAgICAgICAgICBjb25zdCB1aW50MzJfdCBl
eHBlY3RlZEd0a1Rvb2xLaXRWZXJzaW9uID0gMjsKLSAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nh
c3Q8dWludDMyX3QqPih2YWx1ZSkgPSBleHBlY3RlZEd0a1Rvb2xLaXRWZXJzaW9uOwotICAgICAg
ICAgICBicmVhazsKLSAgICAgICB9Ci0KLSAgICAgICAvLyBUT0RPOiBpbXBsZW1lbnQgTlBOVm5l
dHNjYXBlV2luZG93IG9uY2Ugd2Ugd2FudCB0byBzdXBwb3J0IHdpbmRvd2VkIHBsdWdpbnMuCi0j
ZW5kaWYKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICB9Ci0KLSAgICByZXR1
cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLXN0YXRpYyBOUEVycm9yIE5QTl9TZXRWYWx1ZShOUFAg
bnBwLCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqdmFsdWUpCi17Ci0gICAgc3dpdGNoICh2
YXJpYWJsZSkgewotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICBjYXNlIE5QUFZwbHVnaW5E
cmF3aW5nTW9kZWw6IHsKLSAgICAgICAgICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2lu
ID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgTlBEcmF3aW5nTW9kZWwgZHJhd2luZ01vZGVsID0gc3RhdGljX2Nhc3Q8TlBEcmF3aW5nTW9k
ZWw+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih2YWx1ZSkpOwotICAgICAgICAgICAgcmV0
dXJuIHBsdWdpbi0+c2V0RHJhd2luZ01vZGVsKGRyYXdpbmdNb2RlbCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBjYXNlIE5QUFZwbHVnaW5FdmVudE1vZGVsOiB7Ci0gICAgICAgICAgICBSZWZQdHI8
TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIE5QRXZlbnRNb2RlbCBldmVudE1vZGVsID0gc3RhdGlj
X2Nhc3Q8TlBFdmVudE1vZGVsPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odmFsdWUpKTsK
LSAgICAgICAgICAgIHJldHVybiBwbHVnaW4tPnNldEV2ZW50TW9kZWwoZXZlbnRNb2RlbCk7Ci0g
ICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIGNhc2UgTlBQVnBsdWdpbldpbmRvd0Jvb2w6IHsK
LSAgICAgICAgICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVn
aW46OmZyb21OUFAobnBwKTsKLSAgICAgICAgICAgIHBsdWdpbi0+c2V0SXNXaW5kb3dlZCh2YWx1
ZSk7Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIH0KLQotICAg
ICAgICBjYXNlIE5QUFZwbHVnaW5UcmFuc3BhcmVudEJvb2w6IHsKLSAgICAgICAgICAgIFJlZlB0
cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsK
LSAgICAgICAgICAgIHBsdWdpbi0+c2V0SXNUcmFuc3BhcmVudCh2YWx1ZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIE5QUFZw
bHVnaW5Jc1BsYXlpbmdBdWRpbzogewotICAgICAgICAgICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2lu
PiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotICAgICAgICAgICAgcGx1
Z2luLT5zZXRJc1BsYXlpbmdBdWRpbyh2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJf
Tk9fRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwot
ICAgIH0KLX0KLQotc3RhdGljIHZvaWQgTlBOX0ludmFsaWRhdGVSZWN0KE5QUCBucHAsIE5QUmVj
dCogaW52YWxpZFJlY3QpCi17Ci0jaWYgUExVR0lOX0FSQ0hJVEVDVFVSRShVTklYKQotICAgIC8v
IE5TUGx1Z2luV3JhcHBlciwgYSBwbHVnaW4gd3JhcHBlciBiaW5hcnkgdGhhdCBhbGxvd3MgcnVu
bmluZyAzMi1iaXQgcGx1Z2lucwotICAgIC8vIG9uIDY0LWJpdCBhcmNoaXRlY3R1cmVzIHR5cGlj
YWxseSB1c2VkIGluIFgxMSwgd2lsbCBzb21ldGltZXMgZ2l2ZSB1cyBhIG51bGwgTlBQIGhlcmUu
Ci0gICAgaWYgKCFucHApCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgotICAgIFJlZlB0cjxOZXRz
Y2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsKLSAgICBw
bHVnaW4tPmludmFsaWRhdGUoaW52YWxpZFJlY3QpOwotfQotCi1zdGF0aWMgdm9pZCBOUE5fSW52
YWxpZGF0ZVJlZ2lvbihOUFAgbnBwLCBOUFJlZ2lvbikKLXsKLSAgICAvLyBGSVhNRTogV2UgY291
bGQgYXQgbGVhc3QgZmlndXJlIG91dCB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIG9mIHRoZSBpbnZh
bGlkIHJlZ2lvbi4KLSAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBl
UGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0gICAgcGx1Z2luLT5pbnZhbGlkYXRlKDApOwotfQotCi1z
dGF0aWMgdm9pZCBOUE5fRm9yY2VSZWRyYXcoTlBQKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXN0YXRpYyBOUElkZW50aWZpZXIgTlBOX0dldFN0cmluZ0lkZW50aWZpZXIoY29uc3Qg
TlBVVEY4ICpuYW1lKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXI+KElk
ZW50aWZpZXJSZXA6OmdldChuYW1lKSk7Ci19Ci0gICAgCi1zdGF0aWMgdm9pZCBOUE5fR2V0U3Ry
aW5nSWRlbnRpZmllcnMoY29uc3QgTlBVVEY4ICoqbmFtZXMsIGludDMyX3QgbmFtZUNvdW50LCBO
UElkZW50aWZpZXIgKmlkZW50aWZpZXJzKQotewotICAgIEFTU0VSVChuYW1lcyk7Ci0gICAgQVNT
RVJUKGlkZW50aWZpZXJzKTsKLQotICAgIGlmICghbmFtZXMgfHwgIWlkZW50aWZpZXJzKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBuYW1lQ291bnQ7ICsr
aSkKLSAgICAgICAgaWRlbnRpZmllcnNbaV0gPSBOUE5fR2V0U3RyaW5nSWRlbnRpZmllcihuYW1l
c1tpXSk7Ci19Ci0KLXN0YXRpYyBOUElkZW50aWZpZXIgTlBOX0dldEludElkZW50aWZpZXIoaW50
MzJfdCBpbnRpZCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyPihJZGVu
dGlmaWVyUmVwOjpnZXQoaW50aWQpKTsKLX0KLQotc3RhdGljIGJvb2wgTlBOX0lkZW50aWZpZXJJ
c1N0cmluZyhOUElkZW50aWZpZXIgaWRlbnRpZmllcikKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8SWRlbnRpZmllclJlcCo+KGlkZW50aWZpZXIpLT5pc1N0cmluZygpOwotfQotCi1zdGF0aWMg
TlBVVEY4ICpOUE5fVVRGOEZyb21JZGVudGlmaWVyKE5QSWRlbnRpZmllciBpZGVudGlmaWVyKQot
ewotICAgIGNvbnN0IGNoYXIqIHN0cmluZyA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihp
ZGVudGlmaWVyKS0+c3RyaW5nKCk7Ci0gICAgaWYgKCFzdHJpbmcpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgdWludDMyX3Qgc3RyaW5nTGVuZ3RoID0gc3RybGVuKHN0cmluZyk7Ci0gICAgY2hh
ciogdXRmOFN0cmluZyA9IG5wbk1lbU5ld0FycmF5PGNoYXI+KHN0cmluZ0xlbmd0aCArIDEpOwot
ICAgIG1lbWNweSh1dGY4U3RyaW5nLCBzdHJpbmcsIHN0cmluZ0xlbmd0aCk7Ci0gICAgdXRmOFN0
cmluZ1tzdHJpbmdMZW5ndGhdID0gJ1wwJzsKLSAgICAKLSAgICByZXR1cm4gdXRmOFN0cmluZzsK
LX0KLQotc3RhdGljIGludDMyX3QgTlBOX0ludEZyb21JZGVudGlmaWVyKE5QSWRlbnRpZmllciBp
ZGVudGlmaWVyKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4oaWRl
bnRpZmllciktPm51bWJlcigpOwotfQotCi1zdGF0aWMgTlBPYmplY3QqIE5QTl9DcmVhdGVPYmpl
Y3QoTlBQIG5wcCwgTlBDbGFzcyAqbnBDbGFzcykKLXsKLSAgICByZXR1cm4gY3JlYXRlTlBPYmpl
Y3QobnBwLCBucENsYXNzKTsKLX0KLQotc3RhdGljIE5QT2JqZWN0ICpOUE5fUmV0YWluT2JqZWN0
KE5QT2JqZWN0ICpucE9iamVjdCkKLXsKLSAgICByZXRhaW5OUE9iamVjdChucE9iamVjdCk7Ci0g
ICAgcmV0dXJuIG5wT2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCBOUE5fUmVsZWFzZU9iamVjdChO
UE9iamVjdCAqbnBPYmplY3QpCi17Ci0gICAgcmVsZWFzZU5QT2JqZWN0KG5wT2JqZWN0KTsKLX0K
LQotc3RhdGljIGJvb2wgTlBOX0ludm9rZShOUFAgbnBwLCBOUE9iamVjdCAqbnBPYmplY3QsIE5Q
SWRlbnRpZmllciBtZXRob2ROYW1lLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3VtZW50cywgdWludDMy
X3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgUmVmUHRyPE5ldHNj
YXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotICAgIFBs
dWdpbkRlc3RydWN0aW9uUHJvdGVjdG9yIHByb3RlY3RvcihwbHVnaW4uZ2V0KCkpOwotCi0gICAg
aWYgKG5wT2JqZWN0LT5fY2xhc3MtPmludm9rZSkKLSAgICAgICAgcmV0dXJuIG5wT2JqZWN0LT5f
Y2xhc3MtPmludm9rZShucE9iamVjdCwgbWV0aG9kTmFtZSwgYXJndW1lbnRzLCBhcmd1bWVudENv
dW50LCByZXN1bHQpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBOUE5f
SW52b2tlRGVmYXVsdChOUFAgbnBwLCBOUE9iamVjdCAqbnBPYmplY3QsIGNvbnN0IE5QVmFyaWFu
dCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpm
cm9tTlBQKG5wcCk7Ci0gICAgUGx1Z2luRGVzdHJ1Y3Rpb25Qcm90ZWN0b3IgcHJvdGVjdG9yKHBs
dWdpbi5nZXQoKSk7Ci0KLSAgICBpZiAobnBPYmplY3QtPl9jbGFzcy0+aW52b2tlRGVmYXVsdCkK
LSAgICAgICAgcmV0dXJuIG5wT2JqZWN0LT5fY2xhc3MtPmludm9rZURlZmF1bHQobnBPYmplY3Qs
IGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwgcmVzdWx0KTsKLQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotc3RhdGljIGJvb2wgTlBOX0V2YWx1YXRlKE5QUCBucHAsIE5QT2JqZWN0ICpucE9iamVj
dCwgTlBTdHJpbmcgKnNjcmlwdCwgTlBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgUmVmUHRyPE5l
dHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotICAg
IFBsdWdpbkRlc3RydWN0aW9uUHJvdGVjdG9yIHByb3RlY3RvcihwbHVnaW4uZ2V0KCkpOwotICAg
IAotICAgIFN0cmluZyBzY3JpcHRTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZh
bGxiYWNrKHNjcmlwdC0+VVRGOENoYXJhY3RlcnMsIHNjcmlwdC0+VVRGOExlbmd0aCk7Ci0gICAg
Ci0gICAgcmV0dXJuIHBsdWdpbi0+ZXZhbHVhdGUobnBPYmplY3QsIHNjcmlwdFN0cmluZywgcmVz
dWx0KTsKLX0KLQotc3RhdGljIGJvb2wgTlBOX0dldFByb3BlcnR5KE5QUCBucHAsIE5QT2JqZWN0
KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgTlBWYXJpYW50KiByZXN1bHQp
Ci17Ci0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6
ZnJvbU5QUChucHApOwotICAgIFBsdWdpbkRlc3RydWN0aW9uUHJvdGVjdG9yIHByb3RlY3Rvcihw
bHVnaW4uZ2V0KCkpOwotICAgIAotICAgIGlmIChucE9iamVjdC0+X2NsYXNzLT5nZXRQcm9wZXJ0
eSkKLSAgICAgICAgcmV0dXJuIG5wT2JqZWN0LT5fY2xhc3MtPmdldFByb3BlcnR5KG5wT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIHJlc3VsdCk7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1z
dGF0aWMgYm9vbCBOUE5fU2V0UHJvcGVydHkoTlBQIG5wcCwgTlBPYmplY3QqIG5wT2JqZWN0LCBO
UElkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBOUFZhcmlhbnQqIHZhbHVlKQotewotICAg
IFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAo
bnBwKTsKLSAgICBQbHVnaW5EZXN0cnVjdGlvblByb3RlY3RvciBwcm90ZWN0b3IocGx1Z2luLmdl
dCgpKTsKLSAgICAKLSAgICBpZiAobnBPYmplY3QtPl9jbGFzcy0+c2V0UHJvcGVydHkpCi0gICAg
ICAgIHJldHVybiBucE9iamVjdC0+X2NsYXNzLT5zZXRQcm9wZXJ0eShucE9iamVjdCwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIE5Q
Tl9SZW1vdmVQcm9wZXJ0eShOUFAgbnBwLCBOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBO
ZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotICAgIFBsdWdpbkRlc3RydWN0aW9uUHJvdGVj
dG9yIHByb3RlY3RvcihwbHVnaW4uZ2V0KCkpOwotICAgIAotICAgIGlmIChucE9iamVjdC0+X2Ns
YXNzLT5yZW1vdmVQcm9wZXJ0eSkKLSAgICAgICAgcmV0dXJuIG5wT2JqZWN0LT5fY2xhc3MtPnJl
bW92ZVByb3BlcnR5KG5wT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1zdGF0aWMgYm9vbCBOUE5fSGFzUHJvcGVydHkoTlBQIG5wcCwgTlBPYmplY3QqIG5w
T2JqZWN0LCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lKQotewotICAgIFJlZlB0cjxOZXRzY2Fw
ZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsKLSAgICBQbHVn
aW5EZXN0cnVjdGlvblByb3RlY3RvciBwcm90ZWN0b3IocGx1Z2luLmdldCgpKTsKLSAgICAKLSAg
ICBpZiAobnBPYmplY3QtPl9jbGFzcy0+aGFzUHJvcGVydHkpCi0gICAgICAgIHJldHVybiBucE9i
amVjdC0+X2NsYXNzLT5oYXNQcm9wZXJ0eShucE9iamVjdCwgcHJvcGVydHlOYW1lKTsKLQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wgTlBOX0hhc01ldGhvZChOUFAgbnBwLCBO
UE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBtZXRob2ROYW1lKQotewotICAgIFJlZlB0
cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsK
LSAgICBQbHVnaW5EZXN0cnVjdGlvblByb3RlY3RvciBwcm90ZWN0b3IocGx1Z2luLmdldCgpKTsK
LSAgICAKLSAgICBpZiAobnBPYmplY3QtPl9jbGFzcy0+aGFzTWV0aG9kKQotICAgICAgICByZXR1
cm4gbnBPYmplY3QtPl9jbGFzcy0+aGFzTWV0aG9kKG5wT2JqZWN0LCBtZXRob2ROYW1lKTsKLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgTlBOX1JlbGVhc2VWYXJpYW50VmFs
dWUoTlBWYXJpYW50KiB2YXJpYW50KQotewotICAgIHJlbGVhc2VOUFZhcmlhbnRWYWx1ZSh2YXJp
YW50KTsKLX0KLQotc3RhdGljIHZvaWQgTlBOX1NldEV4Y2VwdGlvbihOUE9iamVjdCosIGNvbnN0
IE5QVVRGOCogbWVzc2FnZSkKLXsKLSAgICBOZXRzY2FwZVBsdWdpbjo6c2V0RXhjZXB0aW9uKG1l
c3NhZ2UpOwotfQotCi1zdGF0aWMgdm9pZCBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAg
bnBwLCBOUEJvb2wgZW5hYmxlZCkKLXsKLSAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdp
biA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0gICAgcGx1Z2luLT5wdXNoUG9wdXBz
RW5hYmxlZFN0YXRlKGVuYWJsZWQpOwotfQotICAgIAotc3RhdGljIHZvaWQgTlBOX1BvcFBvcHVw
c0VuYWJsZWRTdGF0ZShOUFAgbnBwKQotewotICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1
Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsKLSAgICBwbHVnaW4tPnBvcFBvcHVw
c0VuYWJsZWRTdGF0ZSgpOwotfQotICAgIAotc3RhdGljIGJvb2wgTlBOX0VudW1lcmF0ZShOUFAg
bnBwLCBOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllcioqIGlkZW50aWZpZXJzLCB1aW50
MzJfdCogaWRlbnRpZmllckNvdW50KQotewotICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1
Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsKLSAgICBQbHVnaW5EZXN0cnVjdGlv
blByb3RlY3RvciBwcm90ZWN0b3IocGx1Z2luLmdldCgpKTsKLSAgICAKLSAgICBpZiAoTlBfQ0xB
U1NfU1RSVUNUX1ZFUlNJT05fSEFTX0VOVU0obnBPYmplY3QtPl9jbGFzcykgJiYgbnBPYmplY3Qt
Pl9jbGFzcy0+ZW51bWVyYXRlKQotICAgICAgICByZXR1cm4gbnBPYmplY3QtPl9jbGFzcy0+ZW51
bWVyYXRlKG5wT2JqZWN0LCBpZGVudGlmaWVycywgaWRlbnRpZmllckNvdW50KTsKLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgTlBOX1BsdWdpblRocmVhZEFzeW5jQ2FsbChO
UFAgbnBwLCB2b2lkICgqZnVuY3Rpb24pKHZvaWQqKSwgdm9pZCogdXNlckRhdGEpCi17Ci0gICAg
UmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChu
cHApOwotCi0gICAgcGx1Z2luLT5wbHVnaW5UaHJlYWRBc3luY0NhbGwoZnVuY3Rpb24sIHVzZXJE
YXRhKTsKLX0KLQotc3RhdGljIGJvb2wgTlBOX0NvbnN0cnVjdChOUFAgbnBwLCBOUE9iamVjdCog
bnBPYmplY3QsIGNvbnN0IE5QVmFyaWFudCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENv
dW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBs
dWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0gICAgUGx1Z2luRGVzdHJ1Y3Rp
b25Qcm90ZWN0b3IgcHJvdGVjdG9yKHBsdWdpbi5nZXQoKSk7Ci0gICAgCi0gICAgaWYgKE5QX0NM
QVNTX1NUUlVDVF9WRVJTSU9OX0hBU19DVE9SKG5wT2JqZWN0LT5fY2xhc3MpICYmIG5wT2JqZWN0
LT5fY2xhc3MtPmNvbnN0cnVjdCkKLSAgICAgICAgcmV0dXJuIG5wT2JqZWN0LT5fY2xhc3MtPmNv
bnN0cnVjdChucE9iamVjdCwgYXJndW1lbnRzLCBhcmd1bWVudENvdW50LCByZXN1bHQpOwotCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgTlBFcnJvciBjb3B5Q1N0cmluZyhjb25zdCBD
U3RyaW5nJiBzdHJpbmcsIGNoYXIqKiB2YWx1ZSwgdWludDMyX3QqIGxlbikKLXsKLSAgICBBU1NF
UlQoIXN0cmluZy5pc051bGwoKSk7Ci0gICAgQVNTRVJUKHZhbHVlKTsKLSAgICBBU1NFUlQobGVu
KTsKLQotICAgICp2YWx1ZSA9IG5wbk1lbU5ld0FycmF5PGNoYXI+KHN0cmluZy5sZW5ndGgoKSk7
Ci0gICAgaWYgKCEqdmFsdWUpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwot
Ci0gICAgbWVtY3B5KCp2YWx1ZSwgc3RyaW5nLmRhdGEoKSwgc3RyaW5nLmxlbmd0aCgpKTsKLSAg
ICAqbGVuID0gc3RyaW5nLmxlbmd0aCgpOwotICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLX0K
LQotc3RhdGljIE5QRXJyb3IgTlBOX0dldFZhbHVlRm9yVVJMKE5QUCBucHAsIE5QTlVSTFZhcmlh
YmxlIHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1cmwsIGNoYXIqKiB2YWx1ZSwgdWludDMyX3QqIGxl
bikKLXsKLSAgICBpZiAoIXZhbHVlIHx8ICFsZW4pCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5F
UklDX0VSUk9SOwotICAgIAotICAgIHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICAgICAgY2FzZSBO
UE5VUkxWQ29va2llOiB7Ci0gICAgICAgICAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdp
biA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0gICAgICAgICAgICBQbHVnaW5EZXN0
cnVjdGlvblByb3RlY3RvciBwcm90ZWN0b3IocGx1Z2luLmdldCgpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgU3RyaW5nIGNvb2tpZXMgPSBwbHVnaW4tPmNvb2tpZXNGb3JVUkwobWFrZVVS
TFN0cmluZyh1cmwpKTsKLSAgICAgICAgICAgIGlmIChjb29raWVzLmlzTnVsbCgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAgICAgICAgICByZXR1
cm4gY29weUNTdHJpbmcoY29va2llcy51dGY4KCksIHZhbHVlLCBsZW4pOwotICAgICAgICB9Ci0K
LSAgICAgICAgY2FzZSBOUE5VUkxWUHJveHk6IHsKLSAgICAgICAgICAgIFJlZlB0cjxOZXRzY2Fw
ZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsKLSAgICAgICAg
ICAgIFBsdWdpbkRlc3RydWN0aW9uUHJvdGVjdG9yIHByb3RlY3RvcihwbHVnaW4uZ2V0KCkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJpbmcgcHJveGllcyA9IHBsdWdpbi0+cHJveGll
c0ZvclVSTChtYWtlVVJMU3RyaW5nKHVybCkpOwotICAgICAgICAgICAgaWYgKHByb3hpZXMuaXNO
dWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAg
ICAgICAgICAgIHJldHVybiBjb3B5Q1N0cmluZyhwcm94aWVzLnV0ZjgoKSwgdmFsdWUsIGxlbik7
Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICB9Ci19Ci0K
LXN0YXRpYyBOUEVycm9yIE5QTl9TZXRWYWx1ZUZvclVSTChOUFAgbnBwLCBOUE5VUkxWYXJpYWJs
ZSB2YXJpYWJsZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB2YWx1ZSwgdWludDMyX3Qg
bGVuKQotewotICAgIHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICAgICAgY2FzZSBOUE5VUkxWQ29v
a2llOiB7Ci0gICAgICAgICAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNj
YXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0gICAgICAgICAgICBQbHVnaW5EZXN0cnVjdGlvblBy
b3RlY3RvciBwcm90ZWN0b3IocGx1Z2luLmdldCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgcGx1Z2luLT5zZXRDb29raWVzRm9yVVJMKG1ha2VVUkxTdHJpbmcodXJsKSwgU3RyaW5nKHZh
bHVlLCBsZW4pKTsKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAg
fQotCi0gICAgICAgIGNhc2UgTlBOVVJMVlByb3h5OgotICAgICAgICAgICAgLy8gQ2FuJ3Qgc2V0
IHRoZSBwcm94eSBmb3IgYSBVUkwuCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19F
UlJPUjsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgIH0KLX0KLQotc3Rh
dGljIGJvb2wgaW5pdGlhbGl6ZVByb3RlY3Rpb25TcGFjZShjb25zdCBjaGFyKiBwcm90b2NvbCwg
Y29uc3QgY2hhciogaG9zdCwgaW50IHBvcnQsIGNvbnN0IGNoYXIqIHNjaGVtZSwgY29uc3QgY2hh
ciogcmVhbG0sIFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlKQotewotICAgIFByb3Rl
Y3Rpb25TcGFjZVNlcnZlclR5cGUgc2VydmVyVHlwZTsKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UocHJvdG9jb2wsICJodHRwIikpCi0gICAgICAgIHNlcnZlclR5cGUgPSBQ
cm90ZWN0aW9uU3BhY2VTZXJ2ZXJIVFRQOwotICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKHByb3RvY29sLCAiaHR0cHMiKSkKLSAgICAgICAgc2VydmVyVHlwZSA9IFBy
b3RlY3Rpb25TcGFjZVNlcnZlckhUVFBTOwotICAgIGVsc2UgewotICAgICAgICAvLyBXZSBvbmx5
IGNhcmUgYWJvdXQgaHR0cCBhbmQgaHR0cHMuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZSBhdXRoZW50aWNhdGlv
blNjaGVtZSA9IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lRGVmYXVsdDsKLSAg
ICBpZiAoc2VydmVyVHlwZSA9PSBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJIVFRQKSB7Ci0gICAgICAg
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzY2hlbWUsICJiYXNpYyIpKQotICAg
ICAgICAgICAgYXV0aGVudGljYXRpb25TY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNh
dGlvblNjaGVtZUhUVFBCYXNpYzsKLSAgICAgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2Uoc2NoZW1lLCAiZGlnZXN0IikpCi0gICAgICAgICAgICBhdXRoZW50aWNhdGlv
blNjaGVtZSA9IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERpZ2VzdDsK
LSAgICB9Ci0KLSAgICBwcm90ZWN0aW9uU3BhY2UgPSBQcm90ZWN0aW9uU3BhY2UoaG9zdCwgcG9y
dCwgc2VydmVyVHlwZSwgcmVhbG0sIGF1dGhlbnRpY2F0aW9uU2NoZW1lKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotc3RhdGljIE5QRXJyb3IgTlBOX0dldEF1dGhlbnRpY2F0aW9uSW5mbyhOUFAg
bnBwLCBjb25zdCBjaGFyKiBwcm90b2NvbCwgY29uc3QgY2hhciogaG9zdCwgaW50MzJfdCBwb3J0
LCBjb25zdCBjaGFyKiBzY2hlbWUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiByZWFsbSwgY2hhcioqIHVzZXJuYW1lLCB1aW50MzJfdCogdXNl
cm5hbWVMZW5ndGgsIGNoYXIqKiBwYXNzd29yZCwgdWludDMyX3QqIHBhc3N3b3JkTGVuZ3RoKQot
ewotICAgIGlmICghcHJvdG9jb2wgfHwgIWhvc3QgfHwgIXNjaGVtZSB8fCAhcmVhbG0gfHwgIXVz
ZXJuYW1lIHx8ICF1c2VybmFtZUxlbmd0aCB8fCAhcGFzc3dvcmQgfHwgIXBhc3N3b3JkTGVuZ3Ro
KQotICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLQotICAgIFByb3RlY3Rpb25T
cGFjZSBwcm90ZWN0aW9uU3BhY2U7Ci0gICAgaWYgKCFpbml0aWFsaXplUHJvdGVjdGlvblNwYWNl
KHByb3RvY29sLCBob3N0LCBwb3J0LCBzY2hlbWUsIHJlYWxtLCBwcm90ZWN0aW9uU3BhY2UpKQot
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLQotICAgIFJlZlB0cjxOZXRzY2Fw
ZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsKLSAgICBTdHJp
bmcgdXNlcm5hbWVTdHJpbmc7Ci0gICAgU3RyaW5nIHBhc3N3b3JkU3RyaW5nOwotICAgIGlmICgh
cGx1Z2luLT5nZXRBdXRoZW50aWNhdGlvbkluZm8ocHJvdGVjdGlvblNwYWNlLCB1c2VybmFtZVN0
cmluZywgcGFzc3dvcmRTdHJpbmcpKQotICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJP
UjsKLQotICAgIE5QRXJyb3IgcmVzdWx0ID0gY29weUNTdHJpbmcodXNlcm5hbWVTdHJpbmcudXRm
OCgpLCB1c2VybmFtZSwgdXNlcm5hbWVMZW5ndGgpOwotICAgIGlmIChyZXN1bHQgIT0gTlBFUlJf
Tk9fRVJST1IpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICByZXN1bHQgPSBjb3B5Q1N0
cmluZyhwYXNzd29yZFN0cmluZy51dGY4KCksIHBhc3N3b3JkLCBwYXNzd29yZExlbmd0aCk7Ci0g
ICAgaWYgKHJlc3VsdCAhPSBOUEVSUl9OT19FUlJPUikgewotICAgICAgICBucG5NZW1GcmVlKCp1
c2VybmFtZSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5Q
RVJSX05PX0VSUk9SOwotfQotCi1zdGF0aWMgdWludDMyX3QgTlBOX1NjaGVkdWxlVGltZXIoTlBQ
IG5wcCwgdWludDMyX3QgaW50ZXJ2YWwsIE5QQm9vbCByZXBlYXQsIHZvaWQgKCp0aW1lckZ1bmMp
KE5QUCBucHAsIHVpbnQzMl90IHRpbWVySUQpKQotewotICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdp
bj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsKLQotICAgIHJldHVybiBw
bHVnaW4tPnNjaGVkdWxlVGltZXIoaW50ZXJ2YWwsIHJlcGVhdCwgdGltZXJGdW5jKTsKLX0KLQot
c3RhdGljIHZvaWQgTlBOX1Vuc2NoZWR1bGVUaW1lcihOUFAgbnBwLCB1aW50MzJfdCB0aW1lcklE
KQotewotICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46
OmZyb21OUFAobnBwKTsKLQotICAgIHBsdWdpbi0+dW5zY2hlZHVsZVRpbWVyKHRpbWVySUQpOwot
fQotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi1zdGF0aWMgTlBFcnJvciBOUE5fUG9wVXBDb250ZXh0
TWVudShOUFAgbnBwLCBOUE1lbnUqIG1lbnUpCi17Ci0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2lu
PiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotCi0gICAgcmV0dXJuIHBs
dWdpbi0+cG9wVXBDb250ZXh0TWVudShtZW51KTsKLX0KLQotc3RhdGljIE5QQm9vbCBOUE5fQ29u
dmVydFBvaW50KE5QUCBucHAsIGRvdWJsZSBzb3VyY2VYLCBkb3VibGUgc291cmNlWSwgTlBDb29y
ZGluYXRlU3BhY2Ugc291cmNlU3BhY2UsIGRvdWJsZSogZGVzdFgsIGRvdWJsZSogZGVzdFksIE5Q
Q29vcmRpbmF0ZVNwYWNlIGRlc3RTcGFjZSkKLXsKLSAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+
IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0KLSAgICBkb3VibGUgZGVz
dGluYXRpb25YOwotICAgIGRvdWJsZSBkZXN0aW5hdGlvblk7Ci0KLSAgICBib29sIHJldHVyblZh
bHVlID0gcGx1Z2luLT5jb252ZXJ0UG9pbnQoc291cmNlWCwgc291cmNlWSwgc291cmNlU3BhY2Us
IGRlc3RpbmF0aW9uWCwgZGVzdGluYXRpb25ZLCBkZXN0U3BhY2UpOwotCi0gICAgaWYgKGRlc3RY
KQotICAgICAgICAqZGVzdFggPSBkZXN0aW5hdGlvblg7Ci0gICAgaWYgKGRlc3RZKQotICAgICAg
ICAqZGVzdFkgPSBkZXN0aW5hdGlvblk7Ci0KLSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci19Ci0j
ZW5kaWYKLQotc3RhdGljIHZvaWQgTlBOX1VSTFJlZGlyZWN0UmVzcG9uc2UoTlBQIG5wcCwgdm9p
ZCogbm90aWZ5RGF0YSwgTlBCb29sIGFsbG93KQotewotICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdp
bj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsKLQotICAgIHBsdWdpbi0+
dXJsUmVkaXJlY3RSZXNwb25zZShub3RpZnlEYXRhLCBhbGxvdyk7Ci19Ci0KLXN0YXRpYyB2b2lk
IGluaXRpYWxpemVCcm93c2VyRnVuY3MoTlBOZXRzY2FwZUZ1bmNzICZuZXRzY2FwZUZ1bmNzKQot
ewotICAgIG5ldHNjYXBlRnVuY3Muc2l6ZSA9IHNpemVvZihOUE5ldHNjYXBlRnVuY3MpOwotICAg
IG5ldHNjYXBlRnVuY3MudmVyc2lvbiA9IChOUF9WRVJTSU9OX01BSk9SIDw8IDgpIHwgTlBfVkVS
U0lPTl9NSU5PUjsKLSAgICAKLSAgICBuZXRzY2FwZUZ1bmNzLmdldHVybCA9IE5QTl9HZXRVUkw7
Ci0gICAgbmV0c2NhcGVGdW5jcy5wb3N0dXJsID0gTlBOX1Bvc3RVUkw7Ci0gICAgbmV0c2NhcGVG
dW5jcy5yZXF1ZXN0cmVhZCA9IE5QTl9SZXF1ZXN0UmVhZDsKLSAgICBuZXRzY2FwZUZ1bmNzLm5l
d3N0cmVhbSA9IE5QTl9OZXdTdHJlYW07Ci0gICAgbmV0c2NhcGVGdW5jcy53cml0ZSA9IE5QTl9X
cml0ZTsKLSAgICBuZXRzY2FwZUZ1bmNzLmRlc3Ryb3lzdHJlYW0gPSBOUE5fRGVzdHJveVN0cmVh
bTsKLSAgICBuZXRzY2FwZUZ1bmNzLnN0YXR1cyA9IE5QTl9TdGF0dXM7Ci0gICAgbmV0c2NhcGVG
dW5jcy51YWdlbnQgPSBOUE5fVXNlckFnZW50OwotICAgIG5ldHNjYXBlRnVuY3MubWVtYWxsb2Mg
PSBOUE5fTWVtQWxsb2M7Ci0gICAgbmV0c2NhcGVGdW5jcy5tZW1mcmVlID0gTlBOX01lbUZyZWU7
Ci0gICAgbmV0c2NhcGVGdW5jcy5tZW1mbHVzaCA9IE5QTl9NZW1GbHVzaDsKLSAgICBuZXRzY2Fw
ZUZ1bmNzLnJlbG9hZHBsdWdpbnMgPSBOUE5fUmVsb2FkUGx1Z2luczsKLSAgICBuZXRzY2FwZUZ1
bmNzLmdldEphdmFFbnYgPSBOUE5fR2V0SmF2YUVudjsKLSAgICBuZXRzY2FwZUZ1bmNzLmdldEph
dmFQZWVyID0gTlBOX0dldEphdmFQZWVyOwotICAgIG5ldHNjYXBlRnVuY3MuZ2V0dXJsbm90aWZ5
ID0gTlBOX0dldFVSTE5vdGlmeTsKLSAgICBuZXRzY2FwZUZ1bmNzLnBvc3R1cmxub3RpZnkgPSBO
UE5fUG9zdFVSTE5vdGlmeTsKLSAgICBuZXRzY2FwZUZ1bmNzLmdldHZhbHVlID0gTlBOX0dldFZh
bHVlOwotICAgIG5ldHNjYXBlRnVuY3Muc2V0dmFsdWUgPSBOUE5fU2V0VmFsdWU7Ci0gICAgbmV0
c2NhcGVGdW5jcy5pbnZhbGlkYXRlcmVjdCA9IE5QTl9JbnZhbGlkYXRlUmVjdDsKLSAgICBuZXRz
Y2FwZUZ1bmNzLmludmFsaWRhdGVyZWdpb24gPSBOUE5fSW52YWxpZGF0ZVJlZ2lvbjsKLSAgICBu
ZXRzY2FwZUZ1bmNzLmZvcmNlcmVkcmF3ID0gTlBOX0ZvcmNlUmVkcmF3OwotICAgIAotICAgIG5l
dHNjYXBlRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllciA9IE5QTl9HZXRTdHJpbmdJZGVudGlmaWVy
OwotICAgIG5ldHNjYXBlRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllcnMgPSBOUE5fR2V0U3RyaW5n
SWRlbnRpZmllcnM7Ci0gICAgbmV0c2NhcGVGdW5jcy5nZXRpbnRpZGVudGlmaWVyID0gTlBOX0dl
dEludElkZW50aWZpZXI7Ci0gICAgbmV0c2NhcGVGdW5jcy5pZGVudGlmaWVyaXNzdHJpbmcgPSBO
UE5fSWRlbnRpZmllcklzU3RyaW5nOwotICAgIG5ldHNjYXBlRnVuY3MudXRmOGZyb21pZGVudGlm
aWVyID0gTlBOX1VURjhGcm9tSWRlbnRpZmllcjsKLSAgICBuZXRzY2FwZUZ1bmNzLmludGZyb21p
ZGVudGlmaWVyID0gTlBOX0ludEZyb21JZGVudGlmaWVyOwotICAgIG5ldHNjYXBlRnVuY3MuY3Jl
YXRlb2JqZWN0ID0gTlBOX0NyZWF0ZU9iamVjdDsKLSAgICBuZXRzY2FwZUZ1bmNzLnJldGFpbm9i
amVjdCA9IE5QTl9SZXRhaW5PYmplY3Q7Ci0gICAgbmV0c2NhcGVGdW5jcy5yZWxlYXNlb2JqZWN0
ID0gTlBOX1JlbGVhc2VPYmplY3Q7Ci0gICAgbmV0c2NhcGVGdW5jcy5pbnZva2UgPSBOUE5fSW52
b2tlOwotICAgIG5ldHNjYXBlRnVuY3MuaW52b2tlRGVmYXVsdCA9IE5QTl9JbnZva2VEZWZhdWx0
OwotICAgIG5ldHNjYXBlRnVuY3MuZXZhbHVhdGUgPSBOUE5fRXZhbHVhdGU7Ci0gICAgbmV0c2Nh
cGVGdW5jcy5nZXRwcm9wZXJ0eSA9IE5QTl9HZXRQcm9wZXJ0eTsKLSAgICBuZXRzY2FwZUZ1bmNz
LnNldHByb3BlcnR5ID0gTlBOX1NldFByb3BlcnR5OwotICAgIG5ldHNjYXBlRnVuY3MucmVtb3Zl
cHJvcGVydHkgPSBOUE5fUmVtb3ZlUHJvcGVydHk7Ci0gICAgbmV0c2NhcGVGdW5jcy5oYXNwcm9w
ZXJ0eSA9IE5QTl9IYXNQcm9wZXJ0eTsKLSAgICBuZXRzY2FwZUZ1bmNzLmhhc21ldGhvZCA9IE5Q
Tl9IYXNNZXRob2Q7Ci0gICAgbmV0c2NhcGVGdW5jcy5yZWxlYXNldmFyaWFudHZhbHVlID0gTlBO
X1JlbGVhc2VWYXJpYW50VmFsdWU7Ci0gICAgbmV0c2NhcGVGdW5jcy5zZXRleGNlcHRpb24gPSBO
UE5fU2V0RXhjZXB0aW9uOwotICAgIG5ldHNjYXBlRnVuY3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0
ZSA9IE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlOwotICAgIG5ldHNjYXBlRnVuY3MucG9wcG9w
dXBzZW5hYmxlZHN0YXRlID0gTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZTsKLSAgICBuZXRzY2Fw
ZUZ1bmNzLmVudW1lcmF0ZSA9IE5QTl9FbnVtZXJhdGU7Ci0gICAgbmV0c2NhcGVGdW5jcy5wbHVn
aW50aHJlYWRhc3luY2NhbGwgPSBOUE5fUGx1Z2luVGhyZWFkQXN5bmNDYWxsOwotICAgIG5ldHNj
YXBlRnVuY3MuY29uc3RydWN0ID0gTlBOX0NvbnN0cnVjdDsKLSAgICBuZXRzY2FwZUZ1bmNzLmdl
dHZhbHVlZm9ydXJsID0gTlBOX0dldFZhbHVlRm9yVVJMOwotICAgIG5ldHNjYXBlRnVuY3Muc2V0
dmFsdWVmb3J1cmwgPSBOUE5fU2V0VmFsdWVGb3JVUkw7Ci0gICAgbmV0c2NhcGVGdW5jcy5nZXRh
dXRoZW50aWNhdGlvbmluZm8gPSBOUE5fR2V0QXV0aGVudGljYXRpb25JbmZvOwotICAgIG5ldHNj
YXBlRnVuY3Muc2NoZWR1bGV0aW1lciA9IE5QTl9TY2hlZHVsZVRpbWVyOwotICAgIG5ldHNjYXBl
RnVuY3MudW5zY2hlZHVsZXRpbWVyID0gTlBOX1Vuc2NoZWR1bGVUaW1lcjsKLSNpZiBQTEFURk9S
TShDT0NPQSkKLSAgICBuZXRzY2FwZUZ1bmNzLnBvcHVwY29udGV4dG1lbnUgPSBOUE5fUG9wVXBD
b250ZXh0TWVudTsKLSAgICBuZXRzY2FwZUZ1bmNzLmNvbnZlcnRwb2ludCA9IE5QTl9Db252ZXJ0
UG9pbnQ7Ci0jZWxzZQotICAgIG5ldHNjYXBlRnVuY3MucG9wdXBjb250ZXh0bWVudSA9IDA7Ci0g
ICAgbmV0c2NhcGVGdW5jcy5jb252ZXJ0cG9pbnQgPSAwOwotI2VuZGlmCi0gICAgbmV0c2NhcGVG
dW5jcy51cmxyZWRpcmVjdHJlc3BvbnNlID0gTlBOX1VSTFJlZGlyZWN0UmVzcG9uc2U7Ci19Ci0g
ICAgCi1OUE5ldHNjYXBlRnVuY3MqIG5ldHNjYXBlQnJvd3NlckZ1bmNzKCkKLXsKLSAgICBzdGF0
aWMgTlBOZXRzY2FwZUZ1bmNzIG5ldHNjYXBlRnVuY3M7Ci0gICAgc3RhdGljIGJvb2wgaW5pdGlh
bGl6ZWQgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIGlu
aXRpYWxpemVCcm93c2VyRnVuY3MobmV0c2NhcGVGdW5jcyk7Ci0gICAgICAgIGluaXRpYWxpemVk
ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gJm5ldHNjYXBlRnVuY3M7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
ZXRzY2FwZUJyb3dzZXJGdW5jcy5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvTmV0c2NhcGVCcm93c2VyRnVuY3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDdkNDIxZmIzZDM3OGRmNDE0MWFjZjAwMmVmZTcxNzVlYTU3MTJiYy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZUJyb3dzZXJGdW5jcy5oCisrKyAvZGV2L251
bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTmV0c2NhcGVCcm93c2Vy
RnVuY3NfaAotI2RlZmluZSBOZXRzY2FwZUJyb3dzZXJGdW5jc19oCi0KLSNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgPFdlYkNvcmUvbnBmdW5jdGlvbnMuaD4KLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLSNpZiBQTFVHSU5fQVJDSElURUNUVVJFKE1BQykKLS8vIFRo
ZSBDb3JlIEFuaW1hdGlvbiByZW5kZXIgc2VydmVyIHBvcnQuCi1zdGF0aWMgY29uc3QgdW5zaWdu
ZWQgV0tOVkNBTGF5ZXJSZW5kZXJTZXJ2ZXJQb3J0ID0gNzE4Nzk7Ci0jZW5kaWYKLQotTlBOZXRz
Y2FwZUZ1bmNzKiBuZXRzY2FwZUJyb3dzZXJGdW5jcygpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jZW5kaWYgLy8g
TmV0c2NhcGVCcm93c2VyRnVuY3NfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiOTdhODUyOGJlZmIwYzYyZGU2MzUxMjFjYjJhYmEwYzY1MWU1
MzI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDExNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJOZXRzY2FwZVBsdWdpbi5oIgotCi0jaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJOUFJ1bnRpbWVPYmplY3RNYXAuaCIKLSNpbmNs
dWRlICJOUFJ1bnRpbWVVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJOZXRzY2FwZVBsdWdpblN0cmVh
bS5oIgotI2luY2x1ZGUgIlBsdWdpbkNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJTaGFyZWFibGVC
aXRtYXAuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdC5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9IVFRQSGVhZGVy
TWFwLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9T
aGFyZWRCdWZmZXIuaD4KLSNpbmNsdWRlIDx1dGlsaXR5PgotI2luY2x1ZGUgPHd0Zi9VUkwuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBQTFVHSU5fQVJDSElURUNUVVJF
KFVOSVgpCi0jaW5jbHVkZSAiTmV0c2NhcGVQbHVnaW5Vbml4LmgiCi0jZW5kaWYKLQotI2lmIFBM
QVRGT1JNKENPQ09BKQotI2luY2x1ZGUgIkxheWVySG9zdGluZ0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJMYXllclRyZWVDb250ZXh0LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotLy8gVGhlIHBsdWctaW4gdGhhdCB3ZSdyZSBjdXJyZW50
bHkgY2FsbGluZyBOUFBfTmV3IGZvci4KLXN0YXRpYyBOZXRzY2FwZVBsdWdpbiogY3VycmVudE5Q
UE5ld1BsdWdpbjsKLQotUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBOZXRzY2FwZVBsdWdpbjo6Y3Jl
YXRlKFJlZlB0cjxOZXRzY2FwZVBsdWdpbk1vZHVsZT4mJiBwbHVnaW5Nb2R1bGUpCi17Ci0gICAg
aWYgKCFwbHVnaW5Nb2R1bGUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgTmV0c2NhcGVQbHVnaW4ocGx1Z2luTW9kdWxlLnJlbGVhc2VOb25OdWxs
KCkpKTsKLX0KLSAgICAKLU5ldHNjYXBlUGx1Z2luOjpOZXRzY2FwZVBsdWdpbihSZWY8TmV0c2Nh
cGVQbHVnaW5Nb2R1bGU+JiYgcGx1Z2luTW9kdWxlKQotICAgIDogUGx1Z2luKE5ldHNjYXBlUGx1
Z2luVHlwZSkKLSAgICAsIG1fbmV4dFJlcXVlc3RJRCgwKQotICAgICwgbV9wbHVnaW5Nb2R1bGUo
V1RGTW92ZShwbHVnaW5Nb2R1bGUpKQotICAgICwgbV9ucFdpbmRvdygpCi0gICAgLCBtX2lzU3Rh
cnRlZChmYWxzZSkKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICAsIG1faXNXaW5kb3dlZChmYWxz
ZSkKLSNlbHNlCi0gICAgLCBtX2lzV2luZG93ZWQodHJ1ZSkKLSNlbmRpZgotICAgICwgbV9pc1Ry
YW5zcGFyZW50KGZhbHNlKQotICAgICwgbV9pbk5QUE5ldyhmYWxzZSkKLSAgICAsIG1fc2hvdWxk
VXNlTWFudWFsTG9hZGVyKGZhbHNlKQotICAgICwgbV9oYXNDYWxsZWRTZXRXaW5kb3coZmFsc2Up
Ci0gICAgLCBtX2lzVmlzaWJsZShmYWxzZSkKLSAgICAsIG1fbmV4dFRpbWVySUQoMCkKLSNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICAsIG1fZHJhd2luZ01vZGVsKHN0YXRpY19jYXN0PE5QRHJhd2lu
Z01vZGVsPigtMSkpCi0gICAgLCBtX2V2ZW50TW9kZWwoc3RhdGljX2Nhc3Q8TlBFdmVudE1vZGVs
PigtMSkpCi0gICAgLCBtX3BsdWdpblJldHVybnNOb25yZXRhaW5lZExheWVyKCFtX3BsdWdpbk1v
ZHVsZS0+cGx1Z2luUXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtzOjpSZXR1cm5zUmV0YWlu
ZWRDb3JlQW5pbWF0aW9uTGF5ZXIpKQotICAgICwgbV9sYXllckhvc3RpbmdNb2RlKExheWVySG9z
dGluZ01vZGU6OkluUHJvY2VzcykKLSAgICAsIG1fY3VycmVudE1vdXNlRXZlbnQoMCkKLSAgICAs
IG1fcGx1Z2luSGFzRm9jdXMoZmFsc2UpCi0gICAgLCBtX3dpbmRvd0hhc0ZvY3VzKGZhbHNlKQot
ICAgICwgbV9wbHVnaW5XYW50c0xlZ2FjeUNvY29hVGV4dElucHV0KHRydWUpCi0gICAgLCBtX2lz
Q29tcGxleFRleHRJbnB1dEVuYWJsZWQoZmFsc2UpCi0gICAgLCBtX2hhc0hhbmRsZWRBS2V5RG93
bkV2ZW50KGZhbHNlKQotICAgICwgbV9pZ25vcmVOZXh0S2V5VXBFdmVudENvdW50ZXIoMCkKLSNl
bmRpZgotewotICAgIG1fbnBwLm5kYXRhID0gdGhpczsKLSAgICBtX25wcC5wZGF0YSA9IDA7Ci0g
ICAgCi0gICAgbV9wbHVnaW5Nb2R1bGUtPmluY3JlbWVudExvYWRDb3VudCgpOwotfQotCi1OZXRz
Y2FwZVBsdWdpbjo6fk5ldHNjYXBlUGx1Z2luKCkKLXsKLSAgICBBU1NFUlQoIW1faXNTdGFydGVk
KTsKLSAgICBBU1NFUlQobV90aW1lcnMuaXNFbXB0eSgpKTsKLQotICAgIG1fcGx1Z2luTW9kdWxl
LT5kZWNyZW1lbnRMb2FkQ291bnQoKTsKLX0KLQotUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBOZXRz
Y2FwZVBsdWdpbjo6ZnJvbU5QUChOUFAgbnBwKQotewotICAgIGlmICghbnBwKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxOZXRzY2FwZVBsdWdpbio+
KG5wcC0+bmRhdGEpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjppbnZhbGlkYXRlKGNvbnN0
IE5QUmVjdCogaW52YWxpZFJlY3QpCi17Ci0gICAgSW50UmVjdCByZWN0OwotICAgIAotICAgIGlm
ICghaW52YWxpZFJlY3QpCi0gICAgICAgIHJlY3QgPSBJbnRSZWN0KDAsIDAsIG1fcGx1Z2luU2l6
ZS53aWR0aCgpLCBtX3BsdWdpblNpemUuaGVpZ2h0KCkpOwotICAgIGVsc2UKLSAgICAgICAgcmVj
dCA9IEludFJlY3QoaW52YWxpZFJlY3QtPmxlZnQsIGludmFsaWRSZWN0LT50b3AsIGludmFsaWRS
ZWN0LT5yaWdodCAtIGludmFsaWRSZWN0LT5sZWZ0LCBpbnZhbGlkUmVjdC0+Ym90dG9tIC0gaW52
YWxpZFJlY3QtPnRvcCk7Ci0gICAgCi0gICAgaWYgKHBsYXRmb3JtSW52YWxpZGF0ZShyZWN0KSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgY29udHJvbGxlcigpLT5pbnZhbGlkYXRlKHJlY3QpOwot
fQotCi1jb25zdCBjaGFyKiBOZXRzY2FwZVBsdWdpbjo6dXNlckFnZW50KE5QUCBucHApCi17Ci0g
ICAgaWYgKG5wcCkKLSAgICAgICAgcmV0dXJuIGZyb21OUFAobnBwKS0+dXNlckFnZW50KCk7Ci0K
LSAgICBpZiAoY3VycmVudE5QUE5ld1BsdWdpbikKLSAgICAgICAgcmV0dXJuIGN1cnJlbnROUFBO
ZXdQbHVnaW4tPnVzZXJBZ2VudCgpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWNvbnN0IGNoYXIq
IE5ldHNjYXBlUGx1Z2luOjp1c2VyQWdlbnQoKQotewotICAgIGlmIChtX3VzZXJBZ2VudC5pc051
bGwoKSkgewotICAgICAgICBTdHJpbmcgdXNlckFnZW50ID0gY29udHJvbGxlcigpLT51c2VyQWdl
bnQoKTsKLSAgICAgICAgQVNTRVJUKCF1c2VyQWdlbnQuaXNOdWxsKCkpOwotCi0jaWYgUExVR0lO
X0FSQ0hJVEVDVFVSRShNQUMpCi0gICAgICAgIGlmIChxdWlya3MoKS5jb250YWlucyhQbHVnaW5R
dWlya3M6OkFwcGVuZFZlcnNpb24zVXNlckFnZW50KSkKLSAgICAgICAgICAgIHVzZXJBZ2VudC5h
cHBlbmQoIiBWZXJzaW9uLzMuMi4xIik7Ci0jZW5kaWYKLQotICAgICAgICBtX3VzZXJBZ2VudCA9
IHVzZXJBZ2VudC51dGY4KCk7Ci0gICAgfQotICAgIHJldHVybiBtX3VzZXJBZ2VudC5kYXRhKCk7
Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OmxvYWRVUkwoY29uc3QgU3RyaW5nJiBtZXRob2Qs
IGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgSFRU
UEhlYWRlck1hcCYgaGVhZGVyRmllbGRzLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGh0dHBCb2R5
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlbmROb3RpZmljYXRpb24sIHZv
aWQqIG5vdGlmaWNhdGlvbkRhdGEpCi17Ci0gICAgdWludDY0X3QgcmVxdWVzdElEID0gKyttX25l
eHRSZXF1ZXN0SUQ7Ci0gICAgCi0gICAgY29udHJvbGxlcigpLT5sb2FkVVJMKHJlcXVlc3RJRCwg
bWV0aG9kLCB1cmxTdHJpbmcsIHRhcmdldCwgaGVhZGVyRmllbGRzLCBodHRwQm9keSwgYWxsb3dQ
b3B1cHMoKSk7Ci0KLSAgICBpZiAodGFyZ2V0LmlzTnVsbCgpKSB7Ci0gICAgICAgIC8vIFRoZSBi
cm93c2VyIGlzIGdvaW5nIHRvIHNlbmQgdGhlIGRhdGEgaW4gYSBzdHJlYW0sIGNyZWF0ZSBhIHBs
dWctaW4gc3RyZWFtLgotICAgICAgICBhdXRvIHBsdWdpblN0cmVhbSA9IE5ldHNjYXBlUGx1Z2lu
U3RyZWFtOjpjcmVhdGUoKnRoaXMsIHJlcXVlc3RJRCwgdXJsU3RyaW5nLCBzZW5kTm90aWZpY2F0
aW9uLCBub3RpZmljYXRpb25EYXRhKTsKLSAgICAgICAgQVNTRVJUKCFtX3N0cmVhbXMuY29udGFp
bnMocmVxdWVzdElEKSk7Ci0KLSAgICAgICAgbV9zdHJlYW1zLnNldChyZXF1ZXN0SUQsIFdURk1v
dmUocGx1Z2luU3RyZWFtKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoc2Vu
ZE5vdGlmaWNhdGlvbikgewotICAgICAgICAvLyBFdmVudHVhbGx5IHdlIGFyZSBnb2luZyB0byBn
ZXQgYSBmcmFtZURpZEZpbmlzaExvYWRpbmcgb3IgZnJhbWVEaWRGYWlsIGNhbGwgZm9yIHRoaXMg
cmVxdWVzdC4KLSAgICAgICAgLy8gS2VlcCB0cmFjayBvZiB0aGUgbm90aWZpY2F0aW9uIGRhdGEg
c28gd2UgY2FuIGNhbGwgTlBQX1VSTE5vdGlmeS4KLSAgICAgICAgQVNTRVJUKCFtX3BlbmRpbmdV
UkxOb3RpZmljYXRpb25zLmNvbnRhaW5zKHJlcXVlc3RJRCkpOwotICAgICAgICBtX3BlbmRpbmdV
UkxOb3RpZmljYXRpb25zLnNldChyZXF1ZXN0SUQsIHN0ZDo6bWFrZV9wYWlyKHVybFN0cmluZywg
bm90aWZpY2F0aW9uRGF0YSkpOwotICAgIH0KLX0KLQotTlBFcnJvciBOZXRzY2FwZVBsdWdpbjo6
ZGVzdHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCi17Ci0gICAg
TmV0c2NhcGVQbHVnaW5TdHJlYW0qIHBsdWdpblN0cmVhbSA9IDA7Ci0KLSAgICBmb3IgKFN0cmVh
bXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdHJlYW1zLmJlZ2luKCksIGVuZCA9IG1fc3Ry
ZWFtcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+dmFsdWUtPm5w
U3RyZWFtKCkgPT0gc3RyZWFtKSB7Ci0gICAgICAgICAgICBwbHVnaW5TdHJlYW0gPSBpdC0+dmFs
dWUuZ2V0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
ICghcGx1Z2luU3RyZWFtKQotICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9JTlNUQU5DRV9F
UlJPUjsKLQotICAgIHJldHVybiBwbHVnaW5TdHJlYW0tPmRlc3Ryb3kocmVhc29uKTsKLX0KLQot
dm9pZCBOZXRzY2FwZVBsdWdpbjo6c2V0SXNXaW5kb3dlZChib29sIGlzV2luZG93ZWQpCi17Ci0g
ICAgLy8gT25jZSB0aGUgcGx1Z2luIGhhcyBzdGFydGVkLCBpdCdzIHRvbyBsYXRlIHRvIGNoYW5n
ZSB3aGV0aGVyIHRoZSBwbHVnaW4gaXMgd2luZG93ZWQgb3Igbm90LgotICAgIC8vIChUaGlzIGlz
IHRydWUgaW4gRmlyZWZveCBhbmQgQ2hyb21lLCB0b28uKSBEaXNhbGxvdyBzZXR0aW5nIG1faXNX
aW5kb3dlZCBpbiB0aGF0IGNhc2UgdG8KLSAgICAvLyBrZWVwIG91ciBpbnRlcm5hbCBzdGF0ZSBj
b25zaXN0ZW50LgotICAgIGlmIChtX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9pc1dpbmRvd2VkID0gaXNXaW5kb3dlZDsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6c2V0
SXNUcmFuc3BhcmVudChib29sIGlzVHJhbnNwYXJlbnQpCi17Ci0gICAgbV9pc1RyYW5zcGFyZW50
ID0gaXNUcmFuc3BhcmVudDsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6c2V0U3RhdHVzYmFy
VGV4dChjb25zdCBTdHJpbmcmIHN0YXR1c2JhclRleHQpCi17Ci0gICAgY29udHJvbGxlcigpLT5z
ZXRTdGF0dXNiYXJUZXh0KHN0YXR1c2JhclRleHQpOwotfQotCi1zdGF0aWMgdm9pZCAoKnNldEV4
Y2VwdGlvbkZ1bmN0aW9uKShjb25zdCBTdHJpbmcmKTsKLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6
c2V0U2V0RXhjZXB0aW9uRnVuY3Rpb24odm9pZCAoKmZ1bmN0aW9uKShjb25zdCBTdHJpbmcmKSkK
LXsKLSAgICBBU1NFUlQoIXNldEV4Y2VwdGlvbkZ1bmN0aW9uIHx8IHNldEV4Y2VwdGlvbkZ1bmN0
aW9uID09IGZ1bmN0aW9uKTsKLSAgICBzZXRFeGNlcHRpb25GdW5jdGlvbiA9IGZ1bmN0aW9uOwot
fQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpzZXRFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBleGNl
cHRpb25TdHJpbmcpCi17Ci0gICAgQVNTRVJUKHNldEV4Y2VwdGlvbkZ1bmN0aW9uKTsKLSAgICBz
ZXRFeGNlcHRpb25GdW5jdGlvbihleGNlcHRpb25TdHJpbmcpOwotfQotCi1ib29sIE5ldHNjYXBl
UGx1Z2luOjpldmFsdWF0ZShOUE9iamVjdCogbnBPYmplY3QsIGNvbnN0IFN0cmluZyYgc2NyaXB0
U3RyaW5nLCBOUFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gY29udHJvbGxlcigpLT5l
dmFsdWF0ZShucE9iamVjdCwgc2NyaXB0U3RyaW5nLCByZXN1bHQsIGFsbG93UG9wdXBzKCkpOwot
fQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjppc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQoKQotewot
ICAgIHJldHVybiBjb250cm9sbGVyKCktPmlzUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOwotfQot
Ci1ib29sIE5ldHNjYXBlUGx1Z2luOjppc011dGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29u
dHJvbGxlcigpLT5pc011dGVkKCk7Ci19Ci0KLU5QT2JqZWN0KiBOZXRzY2FwZVBsdWdpbjo6d2lu
ZG93U2NyaXB0TlBPYmplY3QoKQotewotICAgIHJldHVybiBjb250cm9sbGVyKCktPndpbmRvd1Nj
cmlwdE5QT2JqZWN0KCk7Ci19Ci0KLU5QT2JqZWN0KiBOZXRzY2FwZVBsdWdpbjo6cGx1Z2luRWxl
bWVudE5QT2JqZWN0KCkKLXsKLSAgICByZXR1cm4gY29udHJvbGxlcigpLT5wbHVnaW5FbGVtZW50
TlBPYmplY3QoKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6Y2FuY2VsU3RyZWFtTG9hZChO
ZXRzY2FwZVBsdWdpblN0cmVhbSogcGx1Z2luU3RyZWFtKQotewotICAgIGlmIChwbHVnaW5TdHJl
YW0gPT0gbV9tYW51YWxTdHJlYW0pIHsKLSAgICAgICAgY29udHJvbGxlcigpLT5jYW5jZWxNYW51
YWxTdHJlYW1Mb2FkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBBc2sgdGhl
IHBsdWctaW4gY29udHJvbGxlciB0byBjYW5jZWwgdGhpcyBzdHJlYW0gbG9hZC4KLSAgICBjb250
cm9sbGVyKCktPmNhbmNlbFN0cmVhbUxvYWQocGx1Z2luU3RyZWFtLT5zdHJlYW1JRCgpKTsKLX0K
LQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6cmVtb3ZlUGx1Z2luU3RyZWFtKE5ldHNjYXBlUGx1Z2lu
U3RyZWFtKiBwbHVnaW5TdHJlYW0pCi17Ci0gICAgaWYgKHBsdWdpblN0cmVhbSA9PSBtX21hbnVh
bFN0cmVhbSkgewotICAgICAgICBtX21hbnVhbFN0cmVhbSA9IG51bGxwdHI7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV9zdHJlYW1zLmdldChwbHVnaW5TdHJlYW0tPnN0
cmVhbUlEKCkpID09IHBsdWdpblN0cmVhbSk7Ci0gICAgbV9zdHJlYW1zLnJlbW92ZShwbHVnaW5T
dHJlYW0tPnN0cmVhbUlEKCkpOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjppc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdFbmFibGVkKCkKLXsKLSAgICByZXR1cm4gY29udHJvbGxlcigpLT5pc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46
OnB1c2hQb3B1cHNFbmFibGVkU3RhdGUoYm9vbCBzdGF0ZSkKLXsKLSAgICBtX3BvcHVwRW5hYmxl
ZFN0YXRlcy5hcHBlbmQoc3RhdGUpOwotfQotIAotdm9pZCBOZXRzY2FwZVBsdWdpbjo6cG9wUG9w
dXBzRW5hYmxlZFN0YXRlKCkKLXsKLSAgICBBU1NFUlQoIW1fcG9wdXBFbmFibGVkU3RhdGVzLmlz
RW1wdHkoKSk7Ci0KLSAgICBtX3BvcHVwRW5hYmxlZFN0YXRlcy5yZW1vdmVMYXN0KCk7Ci19Ci0K
LXZvaWQgTmV0c2NhcGVQbHVnaW46OnBsdWdpblRocmVhZEFzeW5jQ2FsbCh2b2lkICgqZnVuY3Rp
b24pKHZvaWQqKSwgdm9pZCogdXNlckRhdGEpCi17Ci0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3Bh
dGNoKFtwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgZnVuY3Rpb24sIHVzZXJEYXRhXSB7
Ci0gICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+bV9pc1N0YXJ0ZWQpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgZnVuY3Rpb24odXNlckRhdGEpOwotICAgIH0pOwotfQotCi1OZXRz
Y2FwZVBsdWdpbjo6VGltZXI6OlRpbWVyKE5ldHNjYXBlUGx1Z2luKiBuZXRzY2FwZVBsdWdpbiwg
dW5zaWduZWQgdGltZXJJRCwgdW5zaWduZWQgaW50ZXJ2YWwsIGJvb2wgcmVwZWF0LCBUaW1lckZ1
bmMgdGltZXJGdW5jKQotICAgIDogbV9uZXRzY2FwZVBsdWdpbihuZXRzY2FwZVBsdWdpbikKLSAg
ICAsIG1fdGltZXJJRCh0aW1lcklEKQotICAgICwgbV9pbnRlcnZhbChpbnRlcnZhbCkKLSAgICAs
IG1fcmVwZWF0KHJlcGVhdCkKLSAgICAsIG1fdGltZXJGdW5jKHRpbWVyRnVuYykKLSAgICAsIG1f
dGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVGltZXI6OnRpbWVyRmlyZWQpCi17Ci19Ci0K
LU5ldHNjYXBlUGx1Z2luOjpUaW1lcjo6flRpbWVyKCkKLXsKLX0KLQotdm9pZCBOZXRzY2FwZVBs
dWdpbjo6VGltZXI6OnN0YXJ0KCkKLXsKLSAgICBTZWNvbmRzIHRpbWVJbnRlcnZhbCA9IDFfbXMg
KiBtX2ludGVydmFsOwotCi0gICAgaWYgKG1fcmVwZWF0KQotICAgICAgICBtX3RpbWVyLnN0YXJ0
UmVwZWF0aW5nKHRpbWVJbnRlcnZhbCk7Ci0gICAgZWxzZQotICAgICAgICBtX3RpbWVyLnN0YXJ0
T25lU2hvdCh0aW1lSW50ZXJ2YWwpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpUaW1lcjo6
c3RvcCgpCi17Ci0gICAgbV90aW1lci5zdG9wKCk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46
OlRpbWVyOjp0aW1lckZpcmVkKCkKLXsKLSAgICBtX3RpbWVyRnVuYygmbV9uZXRzY2FwZVBsdWdp
bi0+bV9ucHAsIG1fdGltZXJJRCk7Ci0KLSAgICBpZiAoIW1fcmVwZWF0KQotICAgICAgICBtX25l
dHNjYXBlUGx1Z2luLT51bnNjaGVkdWxlVGltZXIobV90aW1lcklEKTsKLX0KLQotdWludDMyX3Qg
TmV0c2NhcGVQbHVnaW46OnNjaGVkdWxlVGltZXIodW5zaWduZWQgaW50ZXJ2YWwsIGJvb2wgcmVw
ZWF0LCB2b2lkICgqdGltZXJGdW5jKShOUFAsIHVuc2lnbmVkIHRpbWVySUQpKQotewotICAgIGlm
ICghdGltZXJGdW5jKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIEZJWE1FOiBIYW5kbGUg
d3JhcHBpbmcgYXJvdW5kLgotICAgIHVuc2lnbmVkIHRpbWVySUQgPSArK21fbmV4dFRpbWVySUQ7
Ci0KLSAgICBhdXRvIHRpbWVyID0gbWFrZVVuaXF1ZTxUaW1lcj4odGhpcywgdGltZXJJRCwgaW50
ZXJ2YWwsIHJlcGVhdCwgdGltZXJGdW5jKTsKLSAgICAKLSAgICAvLyBGSVhNRTogQmFzZWQgb24g
dGhlIHBsdWctaW4gdmlzaWJpbGl0eSwgZmlndXJlIG91dCBpZiB3ZSBzaG91bGQgdGhyb3R0bGUg
dGhlIHRpbWVyLCBvciBpZiB3ZSBzaG91bGQgc3RhcnQgaXQgYXQgYWxsLgotICAgIHRpbWVyLT5z
dGFydCgpOwotICAgIG1fdGltZXJzLnNldCh0aW1lcklELCBXVEZNb3ZlKHRpbWVyKSk7Ci0KLSAg
ICByZXR1cm4gdGltZXJJRDsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6dW5zY2hlZHVsZVRp
bWVyKHVuc2lnbmVkIHRpbWVySUQpCi17Ci0gICAgaWYgKGF1dG8gdGltZXIgPSBtX3RpbWVycy50
YWtlKHRpbWVySUQpKQotICAgICAgICB0aW1lci0+c3RvcCgpOwotfQotCi1kb3VibGUgTmV0c2Nh
cGVQbHVnaW46OmNvbnRlbnRzU2NhbGVGYWN0b3IoKQotewotICAgIHJldHVybiBjb250cm9sbGVy
KCktPmNvbnRlbnRzU2NhbGVGYWN0b3IoKTsKLX0KLQotU3RyaW5nIE5ldHNjYXBlUGx1Z2luOjpw
cm94aWVzRm9yVVJMKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQotewotICAgIHJldHVybiBjb250
cm9sbGVyKCktPnByb3hpZXNGb3JVUkwodXJsU3RyaW5nKTsKLX0KLSAgICAKLVN0cmluZyBOZXRz
Y2FwZVBsdWdpbjo6Y29va2llc0ZvclVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKLXsKLSAg
ICByZXR1cm4gY29udHJvbGxlcigpLT5jb29raWVzRm9yVVJMKHVybFN0cmluZyk7Ci19Ci0KLXZv
aWQgTmV0c2NhcGVQbHVnaW46OnNldENvb2tpZXNGb3JVUkwoY29uc3QgU3RyaW5nJiB1cmxTdHJp
bmcsIGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKQotewotICAgIGNvbnRyb2xsZXIoKS0+c2V0
Q29va2llc0ZvclVSTCh1cmxTdHJpbmcsIGNvb2tpZVN0cmluZyk7Ci19Ci0KLWJvb2wgTmV0c2Nh
cGVQbHVnaW46OmdldEF1dGhlbnRpY2F0aW9uSW5mbyhjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHBy
b3RlY3Rpb25TcGFjZSwgU3RyaW5nJiB1c2VybmFtZSwgU3RyaW5nJiBwYXNzd29yZCkKLXsKLSAg
ICByZXR1cm4gY29udHJvbGxlcigpLT5nZXRBdXRoZW50aWNhdGlvbkluZm8ocHJvdGVjdGlvblNw
YWNlLCB1c2VybmFtZSwgcGFzc3dvcmQpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpyZWdp
c3RlclJlZGlyZWN0KE5ldHNjYXBlUGx1Z2luU3RyZWFtKiBzdHJlYW0sIGNvbnN0IFVSTCYgcmVx
dWVzdFVSTCwgaW50IHJlZGlyZWN0UmVzcG9uc2VTdGF0dXMsIHZvaWQqIG5vdGlmaWNhdGlvbkRh
dGEpCi17Ci0gICAgLy8gTlBQX1VSTFJlZGlyZWN0Tm90aWZ5IG1heSBzeW5jaHJvbm91c2x5IHJl
cXVlc3QgdGhpcyBzdHJlYW0gYmFjayBvdXQsIHNvIHNldCBpdCBmaXJzdAotICAgIG1fcmVkaXJl
Y3RzLnNldChub3RpZmljYXRpb25EYXRhLCBzdGQ6Om1ha2VfcGFpcihzdHJlYW0sIHJlcXVlc3RV
Ukwuc3RyaW5nKCkpKTsKLSAgICBpZiAoIU5QUF9VUkxSZWRpcmVjdE5vdGlmeShyZXF1ZXN0VVJM
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHJlZGlyZWN0UmVzcG9uc2VTdGF0dXMsIG5vdGlmaWNh
dGlvbkRhdGEpKSB7Ci0gICAgICAgIG1fcmVkaXJlY3RzLnRha2Uobm90aWZpY2F0aW9uRGF0YSk7
Ci0gICAgICAgIGNvbnRyb2xsZXIoKS0+Y29udGludWVTdHJlYW1Mb2FkKHN0cmVhbS0+c3RyZWFt
SUQoKSk7Ci0gICAgfQotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjp1cmxSZWRpcmVjdFJlc3Bv
bnNlKHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgYWxsb3cpCi17Ci0gICAgaWYgKCFtX3JlZGlyZWN0
cy5jb250YWlucyhub3RpZnlEYXRhKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZWRp
cmVjdCA9IG1fcmVkaXJlY3RzLnRha2Uobm90aWZ5RGF0YSk7Ci0gICAgaWYgKCFyZWRpcmVjdC5m
aXJzdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luU3RyZWFt
PiBzdHJlYW0gPSByZWRpcmVjdC5maXJzdDsKLSAgICBpZiAoIWFsbG93KSB7Ci0gICAgICAgIGNv
bnRyb2xsZXIoKS0+Y2FuY2VsU3RyZWFtTG9hZChzdHJlYW0tPnN0cmVhbUlEKCkpOwotICAgICAg
ICBzdHJlYW0tPnN0b3AoTlBSRVNfVVNFUl9CUkVBSyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
c3RyZWFtLT5zZXRVUkwocmVkaXJlY3Quc2Vjb25kKTsKLSAgICAgICAgY29udHJvbGxlcigpLT5j
b250aW51ZVN0cmVhbUxvYWQoc3RyZWFtLT5zdHJlYW1JRCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQg
TmV0c2NhcGVQbHVnaW46OnNldElzUGxheWluZ0F1ZGlvKGJvb2wgaXNQbGF5aW5nQXVkaW8pCi17
Ci0gICAgY29udHJvbGxlcigpLT5zZXRQbHVnaW5Jc1BsYXlpbmdBdWRpbyhpc1BsYXlpbmdBdWRp
byk7Ci19Ci0KLU5QRXJyb3IgTmV0c2NhcGVQbHVnaW46Ok5QUF9OZXcoTlBNSU1FVHlwZSBwbHVn
aW5UeXBlLCB1aW50MTZfdCBtb2RlLCBpbnQxNl90IGFyZ2MsIGNoYXIqIGFyZ25bXSwgY2hhciog
YXJndltdLCBOUFNhdmVkRGF0YSogc2F2ZWREYXRhKQotewotICAgIHJldHVybiBtX3BsdWdpbk1v
ZHVsZS0+cGx1Z2luRnVuY3MoKS5uZXdwKHBsdWdpblR5cGUsICZtX25wcCwgbW9kZSwgYXJnYywg
YXJnbiwgYXJndiwgc2F2ZWREYXRhKTsKLX0KLSAgICAKLU5QRXJyb3IgTmV0c2NhcGVQbHVnaW46
Ok5QUF9EZXN0cm95KE5QU2F2ZWREYXRhKiogc2F2ZWREYXRhKQotewotICAgIHJldHVybiBtX3Bs
dWdpbk1vZHVsZS0+cGx1Z2luRnVuY3MoKS5kZXN0cm95KCZtX25wcCwgc2F2ZWREYXRhKTsKLX0K
LQotTlBFcnJvciBOZXRzY2FwZVBsdWdpbjo6TlBQX1NldFdpbmRvdyhOUFdpbmRvdyogbnBXaW5k
b3cpCi17Ci0gICAgcmV0dXJuIG1fcGx1Z2luTW9kdWxlLT5wbHVnaW5GdW5jcygpLnNldHdpbmRv
dygmbV9ucHAsIG5wV2luZG93KTsKLX0KLQotTlBFcnJvciBOZXRzY2FwZVBsdWdpbjo6TlBQX05l
d1N0cmVhbShOUE1JTUVUeXBlIG1pbWVUeXBlLCBOUFN0cmVhbSogc3RyZWFtLCBOUEJvb2wgc2Vl
a2FibGUsIHVpbnQxNl90KiBzdHJlYW1UeXBlKQotewotICAgIHJldHVybiBtX3BsdWdpbk1vZHVs
ZS0+cGx1Z2luRnVuY3MoKS5uZXdzdHJlYW0oJm1fbnBwLCBtaW1lVHlwZSwgc3RyZWFtLCBzZWVr
YWJsZSwgc3RyZWFtVHlwZSk7Ci19Ci0KLU5QRXJyb3IgTmV0c2NhcGVQbHVnaW46Ok5QUF9EZXN0
cm95U3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKLXsKLSAgICByZXR1
cm4gbV9wbHVnaW5Nb2R1bGUtPnBsdWdpbkZ1bmNzKCkuZGVzdHJveXN0cmVhbSgmbV9ucHAsIHN0
cmVhbSwgcmVhc29uKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6TlBQX1N0cmVhbUFzRmls
ZShOUFN0cmVhbSogc3RyZWFtLCBjb25zdCBjaGFyKiBmaWxlbmFtZSkKLXsKLSAgICByZXR1cm4g
bV9wbHVnaW5Nb2R1bGUtPnBsdWdpbkZ1bmNzKCkuYXNmaWxlKCZtX25wcCwgc3RyZWFtLCBmaWxl
bmFtZSk7Ci19Ci0KLWludDMyX3QgTmV0c2NhcGVQbHVnaW46Ok5QUF9Xcml0ZVJlYWR5KE5QU3Ry
ZWFtKiBzdHJlYW0pCi17Ci0gICAgcmV0dXJuIG1fcGx1Z2luTW9kdWxlLT5wbHVnaW5GdW5jcygp
LndyaXRlcmVhZHkoJm1fbnBwLCBzdHJlYW0pOwotfQotCi1pbnQzMl90IE5ldHNjYXBlUGx1Z2lu
OjpOUFBfV3JpdGUoTlBTdHJlYW0qIHN0cmVhbSwgaW50MzJfdCBvZmZzZXQsIGludDMyX3QgbGVu
LCB2b2lkKiBidWZmZXIpCi17Ci0gICAgcmV0dXJuIG1fcGx1Z2luTW9kdWxlLT5wbHVnaW5GdW5j
cygpLndyaXRlKCZtX25wcCwgc3RyZWFtLCBvZmZzZXQsIGxlbiwgYnVmZmVyKTsKLX0KLQotaW50
MTZfdCBOZXRzY2FwZVBsdWdpbjo6TlBQX0hhbmRsZUV2ZW50KHZvaWQqIGV2ZW50KQotewotICAg
IHJldHVybiBtX3BsdWdpbk1vZHVsZS0+cGx1Z2luRnVuY3MoKS5ldmVudCgmbV9ucHAsIGV2ZW50
KTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6TlBQX1VSTE5vdGlmeShjb25zdCBjaGFyKiB1
cmwsIE5QUmVhc29uIHJlYXNvbiwgdm9pZCogbm90aWZ5RGF0YSkKLXsKLSAgICBtX3BsdWdpbk1v
ZHVsZS0+cGx1Z2luRnVuY3MoKS51cmxub3RpZnkoJm1fbnBwLCB1cmwsIHJlYXNvbiwgbm90aWZ5
RGF0YSk7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46Ok5QUF9VUkxSZWRpcmVjdE5vdGlmeShj
b25zdCBjaGFyKiB1cmwsIGludDMyX3Qgc3RhdHVzLCB2b2lkKiBub3RpZnlEYXRhKQotewotICAg
IGlmICghbV9wbHVnaW5Nb2R1bGUtPnBsdWdpbkZ1bmNzKCkudXJscmVkaXJlY3Rub3RpZnkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fcGx1Z2luTW9kdWxlLT5wbHVnaW5GdW5jcygp
LnVybHJlZGlyZWN0bm90aWZ5KCZtX25wcCwgdXJsLCBzdGF0dXMsIG5vdGlmeURhdGEpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1OUEVycm9yIE5ldHNjYXBlUGx1Z2luOjpOUFBfR2V0VmFsdWUo
TlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnZhbHVlKQotewotICAgIGlmICghbV9wbHVnaW5N
b2R1bGUtPnBsdWdpbkZ1bmNzKCkuZ2V0dmFsdWUpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5F
UklDX0VSUk9SOwotCi0gICAgcmV0dXJuIG1fcGx1Z2luTW9kdWxlLT5wbHVnaW5GdW5jcygpLmdl
dHZhbHVlKCZtX25wcCwgdmFyaWFibGUsIHZhbHVlKTsKLX0KLQotTlBFcnJvciBOZXRzY2FwZVBs
dWdpbjo6TlBQX1NldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkICp2YWx1ZSkKLXsK
LSAgICBpZiAoIW1fcGx1Z2luTW9kdWxlLT5wbHVnaW5GdW5jcygpLnNldHZhbHVlKQotICAgICAg
ICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLQotICAgIHJldHVybiBtX3BsdWdpbk1vZHVs
ZS0+cGx1Z2luRnVuY3MoKS5zZXR2YWx1ZSgmbV9ucHAsIHZhcmlhYmxlLCB2YWx1ZSk7Ci19Ci0K
LXZvaWQgTmV0c2NhcGVQbHVnaW46OmNhbGxTZXRXaW5kb3coKQotewotICAgIGlmICh3YW50c1Bs
dWdpblJlbGF0aXZlTlBXaW5kb3dDb29yZGluYXRlcygpKSB7Ci0gICAgICAgIG1fbnBXaW5kb3cu
eCA9IDA7Ci0gICAgICAgIG1fbnBXaW5kb3cueSA9IDA7Ci0gICAgICAgIG1fbnBXaW5kb3cuY2xp
cFJlY3QudG9wID0gbV9jbGlwUmVjdC55KCk7Ci0gICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3Qu
bGVmdCA9IG1fY2xpcFJlY3QueCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEludFBvaW50IHBs
dWdpbkxvY2F0aW9uSW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gY29udmVydFRvUm9vdFZpZXcoSW50
UG9pbnQoKSk7Ci0gICAgICAgIEludFBvaW50IGNsaXBSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVz
ID0gY29udmVydFRvUm9vdFZpZXcobV9jbGlwUmVjdC5sb2NhdGlvbigpKTsKLQotICAgICAgICBt
X25wV2luZG93LnggPSBwbHVnaW5Mb2NhdGlvbkluUm9vdFZpZXdDb29yZGluYXRlcy54KCk7Ci0g
ICAgICAgIG1fbnBXaW5kb3cueSA9IHBsdWdpbkxvY2F0aW9uSW5Sb290Vmlld0Nvb3JkaW5hdGVz
LnkoKTsKLSAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSBjbGlwUmVjdEluUm9vdFZp
ZXdDb29yZGluYXRlcy55KCk7Ci0gICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IGNs
aXBSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLngoKTsKLSAgICB9Ci0KLSAgICBtX25wV2luZG93
LndpZHRoID0gbV9wbHVnaW5TaXplLndpZHRoKCk7Ci0gICAgbV9ucFdpbmRvdy5oZWlnaHQgPSBt
X3BsdWdpblNpemUuaGVpZ2h0KCk7Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IG1f
bnBXaW5kb3cuY2xpcFJlY3QubGVmdCArIG1fY2xpcFJlY3Qud2lkdGgoKTsKLSAgICBtX25wV2lu
ZG93LmNsaXBSZWN0LmJvdHRvbSA9IG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wICsgbV9jbGlwUmVj
dC5oZWlnaHQoKTsKLQotICAgIE5QUF9TZXRXaW5kb3coJm1fbnBXaW5kb3cpOwotICAgIG1faGFz
Q2FsbGVkU2V0V2luZG93ID0gdHJ1ZTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6Y2FsbFNl
dFdpbmRvd0ludmlzaWJsZSgpCi17Ci0gICAgTlBXaW5kb3cgaW52aXNpYmxlV2luZG93ID0gbV9u
cFdpbmRvdzsKLSAgICAKLSAgICBpbnZpc2libGVXaW5kb3cud2luZG93ID0gMDsKLSAgICBpbnZp
c2libGVXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKLSAgICBpbnZpc2libGVXaW5kb3cuY2xpcFJl
Y3QubGVmdCA9IDA7Ci0gICAgaW52aXNpYmxlV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IDA7Ci0g
ICAgaW52aXNpYmxlV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gMDsKLSAgICAKLSAgICBOUFBfU2V0
V2luZG93KCZpbnZpc2libGVXaW5kb3cpOwotICAgIG1faGFzQ2FsbGVkU2V0V2luZG93ID0gdHJ1
ZTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6c2hvdWxkTG9hZFNyY1VSTCgpCi17Ci0jaWYg
UExBVEZPUk0oWDExKQotICAgIC8vIEZsYXNoIGNyYXNoZXMgd2hlbiBOUFBfR2V0VmFsdWUgaXMg
Y2FsbGVkIGZvciBOUFBWcGx1Z2luQ2FuY2VsU3JjU3RyZWFtIGluIHdpbmRvd2VkIG1vZGUuCi0g
ICAgaWYgKG1faXNXaW5kb3dlZCAmJiBtX3BsdWdpbk1vZHVsZS0+cGx1Z2luUXVpcmtzKCkuY29u
dGFpbnMoUGx1Z2luUXVpcmtzOjpEb05vdENhbmNlbFNyY1N0cmVhbUluV2luZG93ZWRNb2RlKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLQotICAgIC8vIENoZWNrIGlmIHdlIHNob3Vs
ZCBjYW5jZWwgdGhlIGxvYWQKLSAgICBOUEJvb2wgY2FuY2VsU3JjU3RyZWFtID0gZmFsc2U7Ci0K
LSAgICBpZiAoTlBQX0dldFZhbHVlKE5QUFZwbHVnaW5DYW5jZWxTcmNTdHJlYW0sICZjYW5jZWxT
cmNTdHJlYW0pICE9IE5QRVJSX05PX0VSUk9SKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IHJldHVybiAhY2FuY2VsU3JjU3RyZWFtOwotfQotCi1OZXRzY2FwZVBsdWdpblN0cmVhbSogTmV0
c2NhcGVQbHVnaW46OnN0cmVhbUZyb21JRCh1aW50NjRfdCBzdHJlYW1JRCkKLXsKLSAgICByZXR1
cm4gbV9zdHJlYW1zLmdldChzdHJlYW1JRCk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OnN0
b3BBbGxTdHJlYW1zKCkKLXsKLSAgICBmb3IgKGF1dG8mIHN0cmVhbSA6IGNvcHlUb1ZlY3Rvciht
X3N0cmVhbXMudmFsdWVzKCkpKQotICAgICAgICBzdHJlYW0tPnN0b3AoTlBSRVNfVVNFUl9CUkVB
Syk7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46OmFsbG93UG9wdXBzKCkgY29uc3QKLXsKLSAg
ICBpZiAobV9wbHVnaW5Nb2R1bGUtPnBsdWdpbkZ1bmNzKCkudmVyc2lvbiA+PSBOUFZFUlNfSEFT
X1BPUFVQU19FTkFCTEVEX1NUQVRFKSB7Ci0gICAgICAgIGlmICghbV9wb3B1cEVuYWJsZWRTdGF0
ZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIG1fcG9wdXBFbmFibGVkU3RhdGVzLmxh
c3QoKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgZXZlbnQg
aXMgYSB1c2VyIGdlc3R1cmUuCi0gICAgLy8gUmVhbGx5IG9sZCB2ZXJzaW9ucyBvZiBGbGFzaCBy
ZXF1aXJlZCB0aGlzIGZvciBwb3B1cHMgdG8gd29yaywgYnV0IGFsbCBuZXdlciB2ZXJzaW9ucwot
ICAgIC8vIHN1cHBvcnQgTlBOX1B1c2hQb3B1cEVuYWJsZWRTdGF0ZS9OUE5fUG9wUG9wdXBFbmFi
bGVkU3RhdGUuCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jaWYgUExVR0lOX0FSQ0hJVEVDVFVS
RShNQUMpCi1zdGF0aWMgYm9vbCBpc1RyYW5zcGFyZW50U2lsdmVybGlnaHRCYWNrZ3JvdW5kVmFs
dWUoY29uc3QgU3RyaW5nJiBsb3dlcmNhc2VCYWNrZ3JvdW5kVmFsdWUpCi17Ci0gICAgLy8gVGhp
cyBjaGVja3MgaWYgdGhlIGJhY2tncm91bmQgY29sb3IgdmFsdWUgaXMgdHJhbnNwYXJlbnQsIGFj
Y29yZGluZyB0bwotICAgIC8vIHRoZSBmb3JtYXQgZG9jdW1lbnRlZCBhdCBodHRwOi8vbXNkbi5t
aWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvY2M4MzgxNDgoVlMuOTUpLmFzcHgKLSAgICBpZiAo
bG93ZXJjYXNlQmFja2dyb3VuZFZhbHVlLnN0YXJ0c1dpdGgoJyMnKSkgewotICAgICAgICBpZiAo
bG93ZXJjYXNlQmFja2dyb3VuZFZhbHVlLmxlbmd0aCgpID09IDUgJiYgbG93ZXJjYXNlQmFja2dy
b3VuZFZhbHVlWzFdICE9ICdmJykgewotICAgICAgICAgICAgLy8gQW4gOC1iaXQgUkdCIHZhbHVl
IHdpdGggYWxwaGEgdHJhbnNwYXJlbmN5LCBpbiB0aGUgZm9ybSAjQVJHQi4KLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvd2VyY2FzZUJhY2tncm91
bmRWYWx1ZS5sZW5ndGgoKSA9PSA5ICYmICEobG93ZXJjYXNlQmFja2dyb3VuZFZhbHVlWzFdID09
ICdmJyAmJiBsb3dlcmNhc2VCYWNrZ3JvdW5kVmFsdWVbMl0gPT0gJ2YnKSkgewotICAgICAgICAg
ICAgLy8gQSAxNi1iaXQgUkdCIHZhbHVlIHdpdGggYWxwaGEgdHJhbnNwYXJlbmN5LCBpbiB0aGUg
Zm9ybSAjQUFSUkdHQkIuCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAobG93ZXJjYXNlQmFja2dyb3VuZFZhbHVlLnN0YXJ0c1dpdGgoInNjIyIpKSB7
Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IGNvbXBvbmVudHMgPSBsb3dlcmNhc2VCYWNrZ3JvdW5k
VmFsdWUuc3Vic3RyaW5nKDMpLnNwbGl0KCcsJyk7Ci0KLSAgICAgICAgLy8gQW4gU2NSR0IgdmFs
dWUgd2l0aCBhbHBoYSB0cmFuc3BhcmVuY3ksIGluIHRoZSBmb3JtIHNjI0EsUixHLEIuCi0gICAg
ICAgIGlmIChjb21wb25lbnRzLnNpemUoKSA9PSA0KSB7Ci0gICAgICAgICAgICBpZiAoY29tcG9u
ZW50c1swXS50b0RvdWJsZSgpIDwgMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAobG93ZXJjYXNlQmFja2dyb3VuZFZhbHVlID09ICJ0cmFu
c3BhcmVudCIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gVGhpcyBpcyBhbiBvcGFx
dWUgY29sb3IuCi0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCi0KLWJvb2wgTmV0c2NhcGVQ
bHVnaW46OmluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYgcGFyYW1ldGVycykKLXsKLSAgICB1
aW50MTZfdCBtb2RlID0gcGFyYW1ldGVycy5pc0Z1bGxGcmFtZVBsdWdpbiA/IE5QX0ZVTEwgOiBO
UF9FTUJFRDsKLSAgICAKLSAgICBtX3Nob3VsZFVzZU1hbnVhbExvYWRlciA9IHBhcmFtZXRlcnMu
c2hvdWxkVXNlTWFudWFsTG9hZGVyOwotCi0gICAgQ1N0cmluZyBtaW1lVHlwZUNTdHJpbmcgPSBw
YXJhbWV0ZXJzLm1pbWVUeXBlLnV0ZjgoKTsKLQotICAgIEFTU0VSVChwYXJhbWV0ZXJzLm5hbWVz
LnNpemUoKSA9PSBwYXJhbWV0ZXJzLnZhbHVlcy5zaXplKCkpOwotCi0gICAgVmVjdG9yPENTdHJp
bmc+IHBhcmFtTmFtZXM7Ci0gICAgVmVjdG9yPENTdHJpbmc+IHBhcmFtVmFsdWVzOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5uYW1lcy5zaXplKCk7ICsraSkgewotICAg
ICAgICBTdHJpbmcgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlcnMubmFtZXNbaV07Ci0KLSNpZiBQ
TFVHSU5fQVJDSElURUNUVVJFKE1BQykKLSAgICAgICAgaWYgKG1fcGx1Z2luTW9kdWxlLT5wbHVn
aW5RdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya3M6OldhbnRzTG93ZXJjYXNlUGFyYW1ldGVy
TmFtZXMpKQotICAgICAgICAgICAgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlck5hbWUuY29udmVy
dFRvQVNDSUlMb3dlcmNhc2UoKTsKLSNlbmRpZgotCi0gICAgICAgIHBhcmFtTmFtZXMuYXBwZW5k
KHBhcmFtZXRlck5hbWUudXRmOCgpKTsKLSAgICAgICAgcGFyYW1WYWx1ZXMuYXBwZW5kKHBhcmFt
ZXRlcnMudmFsdWVzW2ldLnV0ZjgoKSk7Ci0gICAgfQotCi0jaWYgUExBVEZPUk0oWDExKQotICAg
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJhbWV0ZXJzLm1pbWVUeXBlLCAi
YXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giKSkgewotICAgICAgICBzaXplX3Qgd21vZGVJ
bmRleCA9IHBhcmFtZXRlcnMubmFtZXMuZmluZCgid21vZGUiKTsKLSAgICAgICAgaWYgKHdtb2Rl
SW5kZXggIT0gbm90Rm91bmQpIHsKLSAgICAgICAgICAgIC8vIFRyYW5zcGFyZW50IHdpbmRvdyBt
b2RlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgWDExIGJhY2tlbmQuCi0gICAgICAgICAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFyYW1ldGVycy52YWx1ZXNbd21vZGVJbmRleF0s
ICJ0cmFuc3BhcmVudCIpCi0gICAgICAgICAgICAgICAgfHwgKG1fcGx1Z2luTW9kdWxlLT5wbHVn
aW5RdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya3M6OkZvcmNlRmxhc2hXaW5kb3dsZXNzTW9k
ZSkgJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFyYW1ldGVycy52YWx1ZXNbd21v
ZGVJbmRleF0sICJ3aW5kb3ciKSkpCi0gICAgICAgICAgICAgICAgcGFyYW1WYWx1ZXNbd21vZGVJ
bmRleF0gPSAib3BhcXVlIjsKLSAgICAgICAgfSBlbHNlIGlmIChtX3BsdWdpbk1vZHVsZS0+cGx1
Z2luUXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtzOjpGb3JjZUZsYXNoV2luZG93bGVzc01v
ZGUpKSB7Ci0gICAgICAgICAgICBwYXJhbU5hbWVzLmFwcGVuZCgid21vZGUiKTsKLSAgICAgICAg
ICAgIHBhcmFtVmFsdWVzLmFwcGVuZCgib3BhcXVlIik7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5k
aWYKLQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJhbWV0ZXJzLm1p
bWVUeXBlLCAiYXBwbGljYXRpb24veC13ZWJraXQtdGVzdC1uZXRzY2FwZSIpKSB7Ci0gICAgICAg
IHBhcmFtTmFtZXMuYXBwZW5kKCJ3aW5kb3dlZFBsdWdpbiIpOwotICAgICAgICBwYXJhbVZhbHVl
cy5hcHBlbmQoImZhbHNlIik7Ci0gICAgfQotCi0gICAgLy8gVGhlIHN0cmluZ3MgdGhhdCB0aGVz
ZSBwb2ludGVycyBwb2ludCB0byBhcmUga2VwdCBhbGl2ZSBieSBwYXJhbU5hbWVzIGFuZCBwYXJh
bVZhbHVlcy4KLSAgICBWZWN0b3I8Y29uc3QgY2hhcio+IG5hbWVzOwotICAgIFZlY3Rvcjxjb25z
dCBjaGFyKj4gdmFsdWVzOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1OYW1lcy5z
aXplKCk7ICsraSkgewotICAgICAgICBuYW1lcy5hcHBlbmQocGFyYW1OYW1lc1tpXS5kYXRhKCkp
OwotICAgICAgICB2YWx1ZXMuYXBwZW5kKHBhcmFtVmFsdWVzW2ldLmRhdGEoKSk7Ci0gICAgfQot
Ci0jaWYgUExVR0lOX0FSQ0hJVEVDVFVSRShNQUMpCi0gICAgaWYgKG1fcGx1Z2luTW9kdWxlLT5w
bHVnaW5RdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya3M6Ok1ha2VPcGFxdWVVbmxlc3NUcmFu
c3BhcmVudFNpbHZlcmxpZ2h0QmFja2dyb3VuZEF0dHJpYnV0ZUV4aXN0cykpIHsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLm5hbWVzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFyYW1ldGVycy5u
YW1lc1tpXSwgImJhY2tncm91bmQiKSkgewotICAgICAgICAgICAgICAgIHNldElzVHJhbnNwYXJl
bnQoaXNUcmFuc3BhcmVudFNpbHZlcmxpZ2h0QmFja2dyb3VuZFZhbHVlKHBhcmFtZXRlcnMudmFs
dWVzW2ldLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fbGF5ZXJIb3N0aW5n
TW9kZSA9IHBhcmFtZXRlcnMubGF5ZXJIb3N0aW5nTW9kZTsKLSNlbmRpZgotCi0gICAgcGxhdGZv
cm1QcmVJbml0aWFsaXplKCk7Ci0KLSAgICBOZXRzY2FwZVBsdWdpbiogcHJldmlvdXNOUFBOZXdQ
bHVnaW4gPSBjdXJyZW50TlBQTmV3UGx1Z2luOwotICAgIAotICAgIG1faW5OUFBOZXcgPSB0cnVl
OwotICAgIGN1cnJlbnROUFBOZXdQbHVnaW4gPSB0aGlzOwotCi0gICAgTlBFcnJvciBlcnJvciA9
IE5QUF9OZXcoY29uc3RfY2FzdDxjaGFyKj4obWltZVR5cGVDU3RyaW5nLmRhdGEoKSksIG1vZGUs
IG5hbWVzLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PGNo
YXIqKj4obmFtZXMuZGF0YSgpKSwgY29uc3RfY2FzdDxjaGFyKio+KHZhbHVlcy5kYXRhKCkpLCAw
KTsKLQotICAgIG1faW5OUFBOZXcgPSBmYWxzZTsKLSAgICBjdXJyZW50TlBQTmV3UGx1Z2luID0g
cHJldmlvdXNOUFBOZXdQbHVnaW47Ci0KLSAgICBpZiAoZXJyb3IgIT0gTlBFUlJfTk9fRVJST1Ip
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1faXNTdGFydGVkID0gdHJ1ZTsKLQotICAg
IC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBjb3JyZWN0IGluIGFsbCBjYXNlcy4KLSAgICBtX25wV2lu
ZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKLQotICAgIGlmICghcGxhdGZvcm1Qb3N0
SW5pdGlhbGl6ZSgpKSB7Ci0gICAgICAgIGRlc3Ryb3koKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIC8vIExvYWQgdGhlIHNyYyBVUkwgaWYgbmVlZGVkLgotICAgIGlmICgh
cGFyYW1ldGVycy5zaG91bGRVc2VNYW51YWxMb2FkZXIgJiYgIXBhcmFtZXRlcnMudXJsLmlzRW1w
dHkoKSAmJiBzaG91bGRMb2FkU3JjVVJMKCkpCi0gICAgICAgIGxvYWRVUkwoIkdFVCIsIHBhcmFt
ZXRlcnMudXJsLnN0cmluZygpLCBTdHJpbmcoKSwgSFRUUEhlYWRlck1hcCgpLCBWZWN0b3I8dWlu
dDhfdD4oKSwgZmFsc2UsIDApOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotICAgIAotdm9p
ZCBOZXRzY2FwZVBsdWdpbjo6ZGVzdHJveSgpCi17Ci0gICAgQVNTRVJUKG1faXNTdGFydGVkKTsK
LQotICAgIC8vIFN0b3AgYWxsIHN0cmVhbXMuCi0gICAgc3RvcEFsbFN0cmVhbXMoKTsKLQotI2lm
ICFQTFVHSU5fQVJDSElURUNUVVJFKE1BQykgJiYgIVBMVUdJTl9BUkNISVRFQ1RVUkUoVU5JWCkK
LSAgICBtX25wV2luZG93LndpbmRvdyA9IDA7Ci0gICAgY2FsbFNldFdpbmRvdygpOwotI2VuZGlm
Ci0KLSAgICBOUFBfRGVzdHJveSgwKTsKLQotICAgIG1faXNTdGFydGVkID0gZmFsc2U7Ci0KLSAg
ICBwbGF0Zm9ybURlc3Ryb3koKTsKLQotICAgIG1fdGltZXJzLmNsZWFyKCk7Ci19Ci0gICAgCi12
b2lkIE5ldHNjYXBlUGx1Z2luOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwotICAgIAot
ICAgIHBsYXRmb3JtUGFpbnQoY29udGV4dCwgZGlydHlSZWN0KTsKLX0KLQotUmVmUHRyPFNoYXJl
YWJsZUJpdG1hcD4gTmV0c2NhcGVQbHVnaW46OnNuYXBzaG90KCkKLXsKLSAgICBpZiAoIXN1cHBv
cnRzU25hcHNob3R0aW5nKCkgfHwgbV9wbHVnaW5TaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwotCi0gICAgSW50U2l6ZSBi
YWNraW5nU3RvcmVTaXplID0gbV9wbHVnaW5TaXplOwotICAgIGJhY2tpbmdTdG9yZVNpemUuc2Nh
bGUoY29udGVudHNTY2FsZUZhY3RvcigpKTsKLQotICAgIGF1dG8gYml0bWFwID0gU2hhcmVhYmxl
Qml0bWFwOjpjcmVhdGVTaGFyZWFibGUoYmFja2luZ1N0b3JlU2l6ZSwgeyB9KTsKLSAgICBhdXRv
IGNvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwotICAgIGlmICghY29u
dGV4dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHJlYWxseSBjYWxsIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IgaW5zdGVhZCBvZiBzY2FsZSwgYnV0
IHRoYXQgZW5kcyB1cCBjYWxsaW5nIGludG8gV0tTSQotICAgIC8vIHdoaWNoIHdlIGN1cnJlbnRs
eSBkb24ndCBoYXZlIGluaXRpYXRlZCBpbiB0aGUgcGx1Zy1pbiBwcm9jZXNzLgotICAgIGNvbnRl
eHQtPnNjYWxlKGNvbnRlbnRzU2NhbGVGYWN0b3IoKSk7Ci0KLSAgICBwbGF0Zm9ybVBhaW50KCpj
b250ZXh0LCBJbnRSZWN0KEludFBvaW50KCksIG1fcGx1Z2luU2l6ZSksIHRydWUpOwotCi0gICAg
cmV0dXJuIGJpdG1hcDsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6aXNUcmFuc3BhcmVudCgp
Ci17Ci0gICAgcmV0dXJuIG1faXNUcmFuc3BhcmVudDsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdp
bjo6d2FudHNXaGVlbEV2ZW50cygpCi17Ci0gICAgcmV0dXJuIG1fcGx1Z2luTW9kdWxlLT5wbHVn
aW5RdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya3M6OldhbnRzV2hlZWxFdmVudHMpOwotfQot
Ci12b2lkIE5ldHNjYXBlUGx1Z2luOjpnZW9tZXRyeURpZENoYW5nZShjb25zdCBJbnRTaXplJiBw
bHVnaW5TaXplLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKQotewotICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7
Ci0KLSAgICBpZiAocGx1Z2luU2l6ZSA9PSBtX3BsdWdpblNpemUgJiYgbV9jbGlwUmVjdCA9PSBj
bGlwUmVjdCAmJiBtX3BsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0gPT0gcGx1Z2luVG9Sb290Vmll
d1RyYW5zZm9ybSkgewotICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgYm9vbCBzaG91bGRDYWxsU2V0V2luZG93ID0gdHJ1ZTsKLQotICAgIC8v
IElmIHRoZSBwbHVnLWluIGRvZXNuJ3Qgd2FudCB3aW5kb3cgcmVsYXRpdmUgY29vcmRpbmF0ZXMs
IHdlIGRvbid0IG5lZWQgdG8gY2FsbCBzZXRXaW5kb3cgdW5sZXNzIGl0cyBzaXplIG9yIGNsaXAg
cmVjdCBjaGFuZ2VzLgotICAgIGlmIChtX2hhc0NhbGxlZFNldFdpbmRvdyAmJiB3YW50c1BsdWdp
blJlbGF0aXZlTlBXaW5kb3dDb29yZGluYXRlcygpICYmIG1fcGx1Z2luU2l6ZSA9PSBwbHVnaW5T
aXplICYmIG1fY2xpcFJlY3QgPT0gY2xpcFJlY3QpCi0gICAgICAgIHNob3VsZENhbGxTZXRXaW5k
b3cgPSBmYWxzZTsKLQotICAgIG1fcGx1Z2luU2l6ZSA9IHBsdWdpblNpemU7Ci0gICAgbV9jbGlw
UmVjdCA9IGNsaXBSZWN0OwotICAgIG1fcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybSA9IHBsdWdp
blRvUm9vdFZpZXdUcmFuc2Zvcm07Ci0KLSNpZiBQTFVHSU5fQVJDSElURUNUVVJFKFVOSVgpCi0g
ICAgSW50UG9pbnQgZnJhbWVSZWN0TG9jYXRpb25JbldpbmRvd0Nvb3JkaW5hdGVzID0gbV9wbHVn
aW5Ub1Jvb3RWaWV3VHJhbnNmb3JtLm1hcFBvaW50KEludFBvaW50KCkpOwotICAgIG1fZnJhbWVS
ZWN0SW5XaW5kb3dDb29yZGluYXRlcyA9IEludFJlY3QoZnJhbWVSZWN0TG9jYXRpb25JbldpbmRv
d0Nvb3JkaW5hdGVzLCBtX3BsdWdpblNpemUpOwotI2VuZGlmCi0KLSAgICBwbGF0Zm9ybUdlb21l
dHJ5RGlkQ2hhbmdlKCk7Ci0KLSAgICBpZiAoIXNob3VsZENhbGxTZXRXaW5kb3cpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGNhbGxTZXRXaW5kb3coKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdp
bjo6dmlzaWJpbGl0eURpZENoYW5nZShib29sIGlzVmlzaWJsZSkKLXsKLSAgICBBU1NFUlQobV9p
c1N0YXJ0ZWQpOwotCi0gICAgaWYgKG1faXNWaXNpYmxlID09IGlzVmlzaWJsZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9pc1Zpc2libGUgPSBpc1Zpc2libGU7Ci0gICAgcGxhdGZvcm1WaXNp
YmlsaXR5RGlkQ2hhbmdlKCk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OmZyYW1lRGlkRmlu
aXNoTG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpCi17Ci0gICAgQVNTRVJUKG1faXNTdGFydGVk
KTsKLSAgICAKLSAgICBhdXRvIG5vdGlmaWNhdGlvbiA9IG1fcGVuZGluZ1VSTE5vdGlmaWNhdGlv
bnMudGFrZShyZXF1ZXN0SUQpOwotICAgIGlmIChub3RpZmljYXRpb24uZmlyc3QuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBOUFBfVVJMTm90aWZ5KG5vdGlmaWNhdGlvbi5maXJz
dC51dGY4KCkuZGF0YSgpLCBOUFJFU19ET05FLCBub3RpZmljYXRpb24uc2Vjb25kKTsKLX0KLQot
dm9pZCBOZXRzY2FwZVBsdWdpbjo6ZnJhbWVEaWRGYWlsKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9v
bCB3YXNDYW5jZWxsZWQpCi17Ci0gICAgQVNTRVJUKG1faXNTdGFydGVkKTsKLSAgICAKLSAgICBh
dXRvIG5vdGlmaWNhdGlvbiA9IG1fcGVuZGluZ1VSTE5vdGlmaWNhdGlvbnMudGFrZShyZXF1ZXN0
SUQpOwotICAgIGlmIChub3RpZmljYXRpb24uZmlyc3QuaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBOUFBfVVJMTm90aWZ5KG5vdGlmaWNhdGlvbi5maXJzdC51dGY4KCkuZGF0
YSgpLCB3YXNDYW5jZWxsZWQgPyBOUFJFU19VU0VSX0JSRUFLIDogTlBSRVNfTkVUV09SS19FUlIs
IG5vdGlmaWNhdGlvbi5zZWNvbmQpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpkaWRFdmFs
dWF0ZUphdmFTY3JpcHQodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBTdHJpbmcmIHJlc3VsdCkK
LXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwotICAgIAotICAgIGlmIChOZXRzY2FwZVBsdWdp
blN0cmVhbSogcGx1Z2luU3RyZWFtID0gc3RyZWFtRnJvbUlEKHJlcXVlc3RJRCkpCi0gICAgICAg
IHBsdWdpblN0cmVhbS0+c2VuZEphdmFTY3JpcHRTdHJlYW0ocmVzdWx0KTsKLX0KLQotdm9pZCBO
ZXRzY2FwZVBsdWdpbjo6c3RyZWFtV2lsbFNlbmRSZXF1ZXN0KHVpbnQ2NF90IHN0cmVhbUlELCBj
b25zdCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IFVSTCYgcmVkaXJlY3RSZXNwb25zZVVSTCwgaW50
IHJlZGlyZWN0UmVzcG9uc2VTdGF0dXMpCi17Ci0gICAgQVNTRVJUKG1faXNTdGFydGVkKTsKLQot
ICAgIGlmIChOZXRzY2FwZVBsdWdpblN0cmVhbSogcGx1Z2luU3RyZWFtID0gc3RyZWFtRnJvbUlE
KHN0cmVhbUlEKSkKLSAgICAgICAgcGx1Z2luU3RyZWFtLT53aWxsU2VuZFJlcXVlc3QocmVxdWVz
dFVSTCwgcmVkaXJlY3RSZXNwb25zZVVSTCwgcmVkaXJlY3RSZXNwb25zZVN0YXR1cyk7Ci19Ci0K
LXZvaWQgTmV0c2NhcGVQbHVnaW46OnN0cmVhbURpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBz
dHJlYW1JRCwgY29uc3QgVVJMJiByZXNwb25zZVVSTCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBs
YXN0TW9kaWZpZWRUaW1lLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhl
YWRlcnMsIGNvbnN0IFN0cmluZyYgLyogc3VnZ2VzdGVkRmlsZU5hbWUgKi8pCi17Ci0gICAgQVNT
RVJUKG1faXNTdGFydGVkKTsKLSAgICAKLSAgICBpZiAoTmV0c2NhcGVQbHVnaW5TdHJlYW0qIHBs
dWdpblN0cmVhbSA9IHN0cmVhbUZyb21JRChzdHJlYW1JRCkpCi0gICAgICAgIHBsdWdpblN0cmVh
bS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNlVVJMLCBzdHJlYW1MZW5ndGgsIGxhc3RNb2Rp
ZmllZFRpbWUsIG1pbWVUeXBlLCBoZWFkZXJzKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6
c3RyZWFtRGlkUmVjZWl2ZURhdGEodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IHVpbnQ4X3QqIGJ5
dGVzLCBpbnQgbGVuZ3RoKQotewotICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7Ci0gICAgCi0gICAg
aWYgKE5ldHNjYXBlUGx1Z2luU3RyZWFtKiBwbHVnaW5TdHJlYW0gPSBzdHJlYW1Gcm9tSUQoc3Ry
ZWFtSUQpKQotICAgICAgICBwbHVnaW5TdHJlYW0tPmRpZFJlY2VpdmVEYXRhKGJ5dGVzLCBsZW5n
dGgpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHVp
bnQ2NF90IHN0cmVhbUlEKQotewotICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7Ci0gICAgCi0gICAg
aWYgKE5ldHNjYXBlUGx1Z2luU3RyZWFtKiBwbHVnaW5TdHJlYW0gPSBzdHJlYW1Gcm9tSUQoc3Ry
ZWFtSUQpKQotICAgICAgICBwbHVnaW5TdHJlYW0tPmRpZEZpbmlzaExvYWRpbmcoKTsKLX0KLQot
dm9pZCBOZXRzY2FwZVBsdWdpbjo6c3RyZWFtRGlkRmFpbCh1aW50NjRfdCBzdHJlYW1JRCwgYm9v
bCB3YXNDYW5jZWxsZWQpCi17Ci0gICAgQVNTRVJUKG1faXNTdGFydGVkKTsKLSAgICAKLSAgICBp
ZiAoTmV0c2NhcGVQbHVnaW5TdHJlYW0qIHBsdWdpblN0cmVhbSA9IHN0cmVhbUZyb21JRChzdHJl
YW1JRCkpCi0gICAgICAgIHBsdWdpblN0cmVhbS0+ZGlkRmFpbCh3YXNDYW5jZWxsZWQpOwotfQot
Ci12b2lkIE5ldHNjYXBlUGx1Z2luOjptYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UoY29u
c3QgVVJMJiByZXNwb25zZVVSTCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0
TW9kaWZpZWRUaW1lLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMs
IGNvbnN0IFN0cmluZyYgLyogc3VnZ2VzdGVkRmlsZU5hbWUgKi8pCi17Ci0gICAgQVNTRVJUKG1f
aXNTdGFydGVkKTsKLSAgICBBU1NFUlQobV9zaG91bGRVc2VNYW51YWxMb2FkZXIpOwotICAgIEFT
U0VSVCghbV9tYW51YWxTdHJlYW0pOwotICAgIAotICAgIG1fbWFudWFsU3RyZWFtID0gTmV0c2Nh
cGVQbHVnaW5TdHJlYW06OmNyZWF0ZSgqdGhpcywgMCwgcmVzcG9uc2VVUkwuc3RyaW5nKCksIGZh
bHNlLCAwKTsKLSAgICBtX21hbnVhbFN0cmVhbS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNl
VVJMLCBzdHJlYW1MZW5ndGgsIGxhc3RNb2RpZmllZFRpbWUsIG1pbWVUeXBlLCBoZWFkZXJzKTsK
LX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6bWFudWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEoY29u
c3QgdWludDhfdCogYnl0ZXMsIGludCBsZW5ndGgpCi17Ci0gICAgQVNTRVJUKG1faXNTdGFydGVk
KTsKLSAgICBBU1NFUlQobV9zaG91bGRVc2VNYW51YWxMb2FkZXIpOwotICAgIEFTU0VSVChtX21h
bnVhbFN0cmVhbSk7Ci0KLSAgICBtX21hbnVhbFN0cmVhbS0+ZGlkUmVjZWl2ZURhdGEoYnl0ZXMs
IGxlbmd0aCk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46Om1hbnVhbFN0cmVhbURpZEZpbmlz
aExvYWRpbmcoKQotewotICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7Ci0gICAgQVNTRVJUKG1fc2hv
dWxkVXNlTWFudWFsTG9hZGVyKTsKLSAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOwotCi0gICAg
bV9tYW51YWxTdHJlYW0tPmRpZEZpbmlzaExvYWRpbmcoKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBs
dWdpbjo6bWFudWFsU3RyZWFtRGlkRmFpbChib29sIHdhc0NhbmNlbGxlZCkKLXsKLSAgICBBU1NF
UlQobV9pc1N0YXJ0ZWQpOwotICAgIEFTU0VSVChtX3Nob3VsZFVzZU1hbnVhbExvYWRlcik7Ci0K
LSAgICBpZiAoIW1fbWFudWFsU3RyZWFtKQotICAgICAgICByZXR1cm47Ci0gICAgbV9tYW51YWxT
dHJlYW0tPmRpZEZhaWwod2FzQ2FuY2VsbGVkKTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6
aGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQotewotICAg
IEFTU0VSVChtX2lzU3RhcnRlZCk7Ci0gICAgCi0gICAgcmV0dXJuIHBsYXRmb3JtSGFuZGxlTW91
c2VFdmVudChtb3VzZUV2ZW50KTsKLX0KLSAgICAKLWJvb2wgTmV0c2NhcGVQbHVnaW46OmhhbmRs
ZVdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKLXsKLSAgICBBU1NF
UlQobV9pc1N0YXJ0ZWQpOwotCi0gICAgcmV0dXJuIHBsYXRmb3JtSGFuZGxlV2hlZWxFdmVudCh3
aGVlbEV2ZW50KTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6aGFuZGxlTW91c2VFbnRlckV2
ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCi17Ci0gICAgQVNTRVJUKG1faXNT
dGFydGVkKTsKLQotICAgIHJldHVybiBwbGF0Zm9ybUhhbmRsZU1vdXNlRW50ZXJFdmVudChtb3Vz
ZUV2ZW50KTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6aGFuZGxlTW91c2VMZWF2ZUV2ZW50
KGNvbnN0IFdlYk1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCi17Ci0gICAgQVNTRVJUKG1faXNTdGFy
dGVkKTsKLQotICAgIHJldHVybiBwbGF0Zm9ybUhhbmRsZU1vdXNlTGVhdmVFdmVudChtb3VzZUV2
ZW50KTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6aGFuZGxlQ29udGV4dE1lbnVFdmVudChj
b25zdCBXZWJNb3VzZUV2ZW50JikKLXsKLSAgICAvLyBXZSBkb24ndCBrbm93IGlmIHRoZSBwbHVn
LWluIGhhcyBoYW5kbGVkIG1vdXNlZG93biBldmVudCBieSBkaXNwbGF5aW5nIGEgY29udGV4dCBt
ZW51LCBzbyB3ZSBuZXZlciB3YW50IFdlYktpdCB0byBzaG93IGEgZGVmYXVsdCBvbmUuCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46OmhhbmRsZUtleWJvYXJkRXZl
bnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCkKLXsKLSAgICBBU1NFUlQo
bV9pc1N0YXJ0ZWQpOwotCi0gICAgcmV0dXJuIHBsYXRmb3JtSGFuZGxlS2V5Ym9hcmRFdmVudChr
ZXlib2FyZEV2ZW50KTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6aGFuZGxlRWRpdGluZ0Nv
bW1hbmQoY29uc3QgU3RyaW5nJiAvKiBjb21tYW5kTmFtZSAqLywgY29uc3QgU3RyaW5nJiAvKiBh
cmd1bWVudCAqLykKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVn
aW46OmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYgLyogY29tbWFuZE5hbWUg
Ki8pCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjpzaG91
bGRBbGxvd1NjcmlwdGluZygpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTmV0c2Nh
cGVQbHVnaW46OnNob3VsZEFsbG93TmF2aWdhdGlvbkZyb21EcmFncygpCi17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjpoYW5kbGVzUGFnZVNjYWxlRmFjdG9y
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46
OnNldEZvY3VzKGJvb2wgaGFzRm9jdXMpCi17Ci0gICAgQVNTRVJUKG1faXNTdGFydGVkKTsKLQot
ICAgIHBsYXRmb3JtU2V0Rm9jdXMoaGFzRm9jdXMpOwotfQotCi1OUE9iamVjdCogTmV0c2NhcGVQ
bHVnaW46OnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpCi17Ci0gICAgQVNTRVJUKG1faXNTdGFy
dGVkKTsKLSAgICBOUE9iamVjdCogc2NyaXB0YWJsZU5QT2JqZWN0ID0gMDsKLSAgICAKLSAgICBp
ZiAoTlBQX0dldFZhbHVlKE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QsICZzY3JpcHRhYmxl
TlBPYmplY3QpICE9IE5QRVJSX05PX0VSUk9SKQotICAgICAgICByZXR1cm4gMDsKLQotI2lmIFBM
VUdJTl9BUkNISVRFQ1RVUkUoTUFDKQotICAgIGlmIChtX3BsdWdpbk1vZHVsZS0+cGx1Z2luUXVp
cmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtzOjpSZXR1cm5zTm9uUmV0YWluZWRTY3JpcHRhYmxl
TlBPYmplY3QpKQotICAgICAgICByZXRhaW5OUE9iamVjdChzY3JpcHRhYmxlTlBPYmplY3QpOyAg
ICAgICAgCi0jZW5kaWYgICAgCi0KLSAgICByZXR1cm4gc2NyaXB0YWJsZU5QT2JqZWN0OwotfQot
ICAgIAotdW5zaWduZWQgTmV0c2NhcGVQbHVnaW46OmNvdW50RmluZE1hdGNoZXMoY29uc3QgU3Ry
aW5nJiwgV2ViQ29yZTo6RmluZE9wdGlvbnMsIHVuc2lnbmVkKQotewotICAgIHJldHVybiAwOwot
fQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIFdlYkNv
cmU6OkZpbmRPcHRpb25zLCB1bnNpZ25lZCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgTmV0c2NhcGVQbHVnaW46OmNvbnRlbnRzU2NhbGVGYWN0b3JDaGFuZ2VkKGZsb2F0IHNjYWxl
RmFjdG9yKQotewotICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7Ci0KLSNpZiBQTFVHSU5fQVJDSElU
RUNUVVJFKE1BQykKLSAgICBkb3VibGUgY29udGVudHNTY2FsZUZhY3RvciA9IHNjYWxlRmFjdG9y
OwotICAgIE5QUF9TZXRWYWx1ZShOUE5WY29udGVudHNTY2FsZUZhY3RvciwgJmNvbnRlbnRzU2Nh
bGVGYWN0b3IpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2NhbGVGYWN0b3IpOwotI2VuZGlm
Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OnN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZChi
b29sIHN0b3JhZ2VCbG9ja2luZ0VuYWJsZWQpCi17Ci0gICAgaWYgKG1fc3RvcmFnZUJsb2NraW5n
U3RhdGUgIT0gc3RvcmFnZUJsb2NraW5nRW5hYmxlZCkgewotICAgICAgICBtX3N0b3JhZ2VCbG9j
a2luZ1N0YXRlID0gc3RvcmFnZUJsb2NraW5nRW5hYmxlZDsKLSAgICAgICAgdXBkYXRlTlBOUHJp
dmF0ZU1vZGUoKTsKLSAgICB9Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OnByaXZhdGVCcm93
c2luZ1N0YXRlQ2hhbmdlZChib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQpCi17Ci0gICAgaWYg
KG1fcHJpdmF0ZUJyb3dzaW5nU3RhdGUgIT0gcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkgewotICAg
ICAgICBtX3ByaXZhdGVCcm93c2luZ1N0YXRlID0gcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZDsKLSAg
ICAgICAgdXBkYXRlTlBOUHJpdmF0ZU1vZGUoKTsKLSAgICB9Ci19Ci0KLXZvaWQgTmV0c2NhcGVQ
bHVnaW46OnVwZGF0ZU5QTlByaXZhdGVNb2RlKCkKLXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQp
OwotCi0gICAgLy8gRnJvbSBodHRwczovL3dpa2kubW96aWxsYS5vcmcvUGx1Z2luczpQcml2YXRl
TW9kZQotICAgIC8vICAgV2hlbiB0aGUgYnJvd3NlciB0dXJucyBwcml2YXRlIG1vZGUgb24gb3Ig
b2ZmIGl0IHdpbGwgY2FsbCBOUFBfU2V0VmFsdWUgZm9yICJOUE5WcHJpdmF0ZU1vZGVCb29sIiAK
LSAgICAvLyAgIChhc3NpZ25lZCBlbnVtIHZhbHVlIDE4KSB3aXRoIGEgcG9pbnRlciB0byBhbiBO
UEJvb2wgdmFsdWUgb24gYWxsIGFwcGxpY2FibGUgaW5zdGFuY2VzLgotICAgIC8vICAgUGx1Z2lu
cyBzaG91bGQgY2hlY2sgdGhlIGJvb2xlYW4gdmFsdWUgcG9pbnRlZCB0bywgbm90IHRoZSBwb2lu
dGVyIGl0c2VsZi4gCi0gICAgLy8gICBUaGUgdmFsdWUgd2lsbCBiZSB0cnVlIHdoZW4gcHJpdmF0
ZSBtb2RlIGlzIG9uLgotICAgIE5QQm9vbCB2YWx1ZSA9IG1fcHJpdmF0ZUJyb3dzaW5nU3RhdGUg
fHwgbV9zdG9yYWdlQmxvY2tpbmdTdGF0ZTsKLSAgICBOUFBfU2V0VmFsdWUoTlBOVnByaXZhdGVN
b2RlQm9vbCwgJnZhbHVlKTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6Z2V0Rm9ybVZhbHVl
KFN0cmluZyYgZm9ybVZhbHVlKQotewotICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7Ci0KLSAgICBj
aGFyKiBmb3JtVmFsdWVTdHJpbmcgPSAwOwotICAgIGlmIChOUFBfR2V0VmFsdWUoTlBQVmZvcm1W
YWx1ZSwgJmZvcm1WYWx1ZVN0cmluZykgIT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGZvcm1WYWx1ZSA9IFN0cmluZzo6ZnJvbVVURjgoZm9ybVZhbHVlU3Ry
aW5nKTsKLQotICAgIC8vIFRoZSBwbHVnLWluIGFsbG9jYXRlcyB0aGUgZm9ybSB2YWx1ZSBzdHJp
bmcgd2l0aCBOUE5fTWVtQWxsb2Mgc28gaXQgbmVlZHMgdG8gYmUgZnJlZWQgd2l0aCBOUE5fTWVt
RnJlZS4KLSAgICBucG5NZW1GcmVlKGZvcm1WYWx1ZVN0cmluZyk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46OmhhbmRsZVNjcm9sbChTY3JvbGxEaXJlY3Rpb24s
IFNjcm9sbEdyYW51bGFyaXR5KQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotU2Nyb2xsYmFy
KiBOZXRzY2FwZVBsdWdpbjo6aG9yaXpvbnRhbFNjcm9sbGJhcigpCi17Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLVNjcm9sbGJhciogTmV0c2NhcGVQbHVnaW46OnZlcnRpY2FsU2Nyb2xsYmFyKCkKLXsK
LSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6c3VwcG9ydHNTbmFwc2hv
dHRpbmcoKSBjb25zdAotewotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHJldHVybiBtX3BsdWdp
bk1vZHVsZS0+cGx1Z2luUXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtzOjpTdXBwb3J0c1Nu
YXBzaG90dGluZyk7Ci0jZW5kaWYKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVJlZlB0cjxXZWJD
b3JlOjpTaGFyZWRCdWZmZXI+IE5ldHNjYXBlUGx1Z2luOjpsaXZlUmVzb3VyY2VEYXRhKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotSW50UG9pbnQgTmV0c2NhcGVQbHVnaW46
OmNvbnZlcnRUb1Jvb3RWaWV3KGNvbnN0IEludFBvaW50JiBwb2ludEluUGx1Z2luQ29vcmRpbmF0
ZXMpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybS5tYXBQ
b2ludChwb2ludEluUGx1Z2luQ29vcmRpbmF0ZXMpOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2lu
Ojpjb252ZXJ0RnJvbVJvb3RWaWV3KGNvbnN0IEludFBvaW50JiBwb2ludEluUm9vdFZpZXdDb29y
ZGluYXRlcywgSW50UG9pbnQmIHBvaW50SW5QbHVnaW5Db29yZGluYXRlcykKLXsKLSAgICBpZiAo
YXV0byBpbnZlcnNlID0gbV9wbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtLmludmVyc2UoKSkgewot
ICAgICAgICBwb2ludEluUGx1Z2luQ29vcmRpbmF0ZXMgPSBpbnZlcnNlLnZhbHVlKCkubWFwUG9p
bnQocG9pbnRJblJvb3RWaWV3Q29vcmRpbmF0ZXMpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjptdXRlZFN0
YXRlQ2hhbmdlZChib29sIG11dGVkKQotewotICAgIE5QQm9vbCB2YWx1ZSA9IG11dGVkOwotICAg
IE5QUF9TZXRWYWx1ZShOUE5WbXV0ZUF1ZGlvQm9vbCwgJnZhbHVlKTsKLX0KLQotI2lmICFQTEFU
Rk9STShDT0NPQSkKLSAgICAKLXZvaWQgTmV0c2NhcGVQbHVnaW46OndpbmRvd0ZvY3VzQ2hhbmdl
ZChib29sKQotewotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjp3aW5kb3dWaXNpYmlsaXR5Q2hh
bmdlZChib29sKQotewotfQotCi0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNl
bmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmggYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTgyYjY2NTJmYTUwMWQ2ZTc3ZGMyNDI5MDZi
NDFkZWEyYjA1ZGMzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1
Z2luLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1
ZGUgIk5ldHNjYXBlUGx1Z2luTW9kdWxlLmgiCi0jaW5jbHVkZSAiUGx1Z2luLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9BZmZpbmVUcmFuc2Zvcm0uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
TGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KLSNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotbmFtZXNwYWNlIFdU
RiB7Ci1jbGFzcyBNYWNoU2VuZFJpZ2h0OwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFz
cyBFbGVtZW50OwotY2xhc3MgSFRUUEhlYWRlck1hcDsKLWNsYXNzIFByb3RlY3Rpb25TcGFjZTsK
LWNsYXNzIFNoYXJlZEJ1ZmZlcjsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIE5l
dHNjYXBlUGx1Z2luU3RyZWFtOwotY2xhc3MgTmV0c2NhcGVQbHVnaW5Vbml4OwotCi1jbGFzcyBO
ZXRzY2FwZVBsdWdpbiA6IHB1YmxpYyBQbHVnaW4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWZQ
dHI8TmV0c2NhcGVQbHVnaW4+IGNyZWF0ZShSZWZQdHI8TmV0c2NhcGVQbHVnaW5Nb2R1bGU+JiYp
OwotICAgIHZpcnR1YWwgfk5ldHNjYXBlUGx1Z2luKCk7Ci0KLSAgICBzdGF0aWMgUmVmUHRyPE5l
dHNjYXBlUGx1Z2luPiBmcm9tTlBQKE5QUCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBO
UEVycm9yIHNldERyYXdpbmdNb2RlbChOUERyYXdpbmdNb2RlbCk7Ci0gICAgTlBFcnJvciBzZXRF
dmVudE1vZGVsKE5QRXZlbnRNb2RlbCk7Ci0gICAgTlBCb29sIGNvbnZlcnRQb2ludChkb3VibGUg
c291cmNlWCwgZG91YmxlIHNvdXJjZVksIE5QQ29vcmRpbmF0ZVNwYWNlIHNvdXJjZVNwYWNlLCBk
b3VibGUmIGRlc3RYLCBkb3VibGUmIGRlc3RZLCBOUENvb3JkaW5hdGVTcGFjZSBkZXN0U3BhY2Up
OwotICAgIE5QRXJyb3IgcG9wVXBDb250ZXh0TWVudShOUE1lbnUqKTsKLQotICAgIHZvaWQgc2V0
UGx1Z2luUmV0dXJuc05vbnJldGFpbmVkTGF5ZXIoYm9vbCBwbHVnaW5SZXR1cm5zTm9ucmV0YWlu
ZWRMYXllcikgeyBtX3BsdWdpblJldHVybnNOb25yZXRhaW5lZExheWVyID0gcGx1Z2luUmV0dXJu
c05vbnJldGFpbmVkTGF5ZXI7IH0KLSAgICB2b2lkIHNldFBsdWdpbldhbnRzTGVnYWN5Q29jb2FU
ZXh0SW5wdXQoYm9vbCBwbHVnaW5XYW50c0xlZ2FjeUNvY29hVGV4dElucHV0KSB7IG1fcGx1Z2lu
V2FudHNMZWdhY3lDb2NvYVRleHRJbnB1dCA9IHBsdWdpbldhbnRzTGVnYWN5Q29jb2FUZXh0SW5w
dXQ7IH0KLQotICAgIGJvb2wgaGFzSGFuZGxlZEFLZXlEb3duRXZlbnQoKSBjb25zdCB7IHJldHVy
biBtX2hhc0hhbmRsZWRBS2V5RG93bkV2ZW50OyB9Ci0KLSAgICBjb25zdCBXVEY6Ok1hY2hTZW5k
UmlnaHQmIGNvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydCgpOwotCi0gICAgLy8gQ29tcHV0ZXMg
YW4gYWZmaW5lIHRyYW5zZm9ybSBmcm9tIHRoZSBnaXZlbiBjb29yZGluYXRlIHNwYWNlIHRvIHRo
ZSBzY3JlZW4gY29vcmRpbmF0ZSBzcGFjZS4KLSAgICBib29sIGdldFNjcmVlblRyYW5zZm9ybShO
UENvb3JkaW5hdGVTcGFjZSBzb3VyY2VTcGFjZSwgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJik7
Ci0jZW5kaWYKLQotI2lmIFBMVUdJTl9BUkNISVRFQ1RVUkUoVU5JWCkKLSAgICBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBmcmFtZVJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1
cm4gbV9mcmFtZVJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzOyB9Ci0jZW5kaWYKLSAgICBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJlY3Q7IH0K
LSAgICBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9wbHVn
aW5TaXplOyB9Ci0KLSAgICBQbHVnaW5RdWlya3MgcXVpcmtzKCkgY29uc3QgeyByZXR1cm4gbV9w
bHVnaW5Nb2R1bGUtPnBsdWdpblF1aXJrcygpOyB9Ci0KLSAgICB2b2lkIGludmFsaWRhdGUoY29u
c3QgTlBSZWN0Kik7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHVzZXJBZ2VudChOUFApOwotICAg
IHZvaWQgbG9hZFVSTChjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgU3RyaW5nJiB1cmxTdHJp
bmcsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJiBo
ZWFkZXJGaWVsZHMsCi0gICAgICAgICAgICAgICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaHR0
cEJvZHksIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZpY2F0aW9uRGF0YSk7Ci0g
ICAgTlBFcnJvciBkZXN0cm95U3RyZWFtKE5QU3RyZWFtKiwgTlBSZWFzb24pOwotICAgIHZvaWQg
c2V0SXNXaW5kb3dlZChib29sKTsKLSAgICB2b2lkIHNldElzVHJhbnNwYXJlbnQoYm9vbCk7Ci0g
ICAgdm9pZCBzZXRTdGF0dXNiYXJUZXh0KGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyB2b2lk
IHNldEV4Y2VwdGlvbihjb25zdCBTdHJpbmcmKTsKLSAgICBib29sIGV2YWx1YXRlKE5QT2JqZWN0
KiwgY29uc3QgU3RyaW5nJnNjcmlwdFN0cmluZywgTlBWYXJpYW50KiByZXN1bHQpOwotICAgIGJv
b2wgaXNQcml2YXRlQnJvd3NpbmdFbmFibGVkKCk7Ci0gICAgYm9vbCBpc011dGVkKCkgY29uc3Q7
Ci0gICAgYm9vbCBpc1dpbmRvd2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc1dpbmRvd2VkOyB9Ci0g
ICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBtX2lzVmlzaWJsZTsgfQotCi0gICAg
c3RhdGljIHZvaWQgc2V0U2V0RXhjZXB0aW9uRnVuY3Rpb24odm9pZCAoKikoY29uc3QgU3RyaW5n
JikpOwotCi0gICAgLy8gVGhlc2UgcmV0dXJuIHJldGFpbmVkIG9iamVjdHMuCi0gICAgTlBPYmpl
Y3QqIHdpbmRvd1NjcmlwdE5QT2JqZWN0KCk7Ci0gICAgTlBPYmplY3QqIHBsdWdpbkVsZW1lbnRO
UE9iamVjdCgpOwotCi0gICAgdm9pZCBjYW5jZWxTdHJlYW1Mb2FkKE5ldHNjYXBlUGx1Z2luU3Ry
ZWFtKik7Ci0gICAgdm9pZCByZW1vdmVQbHVnaW5TdHJlYW0oTmV0c2NhcGVQbHVnaW5TdHJlYW0q
KTsKLQotICAgIGJvb2wgaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpOwotCi0gICAg
dm9pZCBwdXNoUG9wdXBzRW5hYmxlZFN0YXRlKGJvb2wgZW5hYmxlZCk7Ci0gICAgdm9pZCBwb3BQ
b3B1cHNFbmFibGVkU3RhdGUoKTsKLQotICAgIHZvaWQgcGx1Z2luVGhyZWFkQXN5bmNDYWxsKHZv
aWQgKCpmdW5jdGlvbikodm9pZCopLCB2b2lkKiB1c2VyRGF0YSk7Ci0KLSAgICB1bnNpZ25lZCBz
Y2hlZHVsZVRpbWVyKHVuc2lnbmVkIGludGVydmFsLCBib29sIHJlcGVhdCwgdm9pZCAoKnRpbWVy
RnVuYykoTlBQLCB1bnNpZ25lZCB0aW1lcklEKSk7Ci0gICAgdm9pZCB1bnNjaGVkdWxlVGltZXIo
dW5zaWduZWQgdGltZXJJRCk7Ci0KLSAgICBkb3VibGUgY29udGVudHNTY2FsZUZhY3RvcigpOwot
ICAgIFN0cmluZyBwcm94aWVzRm9yVVJMKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKLSAgICBT
dHJpbmcgY29va2llc0ZvclVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7Ci0gICAgdm9pZCBz
ZXRDb29raWVzRm9yVVJMKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNv
b2tpZVN0cmluZyk7Ci0gICAgYm9vbCBnZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgV2ViQ29y
ZTo6UHJvdGVjdGlvblNwYWNlJiwgU3RyaW5nJiB1c2VybmFtZSwgU3RyaW5nJiBwYXNzd29yZCk7
Ci0KLSAgICB2b2lkIHNldElzUGxheWluZ0F1ZGlvKGJvb2wpOwotCi0gICAgdm9pZCByZWdpc3Rl
clJlZGlyZWN0KE5ldHNjYXBlUGx1Z2luU3RyZWFtKiwgY29uc3QgVVJMJiByZXF1ZXN0VVJMLCBp
bnQgcmVkaXJlY3RSZXNwb25zZVN0YXR1cywgdm9pZCogbm90aWZpY2F0aW9uRGF0YSk7Ci0gICAg
dm9pZCB1cmxSZWRpcmVjdFJlc3BvbnNlKHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgYWxsb3cpOwot
Ci0gICAgLy8gTWVtYmVyIGZ1bmN0aW9ucyBmb3IgY2FsbGluZyBpbnRvIHRoZSBwbHVnLWluLgot
ICAgIE5QRXJyb3IgTlBQX05ldyhOUE1JTUVUeXBlIHBsdWdpblR5cGUsIHVpbnQxNl90IG1vZGUs
IGludDE2X3QgYXJnYywgY2hhciogYXJnbltdLCBjaGFyKiBhcmd2W10sIE5QU2F2ZWREYXRhKik7
Ci0gICAgTlBFcnJvciBOUFBfRGVzdHJveShOUFNhdmVkRGF0YSoqKTsKLSAgICBOUEVycm9yIE5Q
UF9TZXRXaW5kb3coTlBXaW5kb3cqKTsKLSAgICBOUEVycm9yIE5QUF9OZXdTdHJlYW0oTlBNSU1F
VHlwZSwgTlBTdHJlYW0qLCBOUEJvb2wgc2Vla2FibGUsIHVpbnQxNl90KiBzdHlwZSk7Ci0gICAg
TlBFcnJvciBOUFBfRGVzdHJveVN0cmVhbShOUFN0cmVhbSosIE5QUmVhc29uKTsKLSAgICB2b2lk
IE5QUF9TdHJlYW1Bc0ZpbGUoTlBTdHJlYW0qLCBjb25zdCBjaGFyKiBmaWxlbmFtZSk7Ci0gICAg
aW50MzJfdCBOUFBfV3JpdGVSZWFkeShOUFN0cmVhbSopOwotICAgIGludDMyX3QgTlBQX1dyaXRl
KE5QU3RyZWFtKiwgaW50MzJfdCBvZmZzZXQsIGludDMyX3QgbGVuLCB2b2lkKiBidWZmZXIpOwot
ICAgIGludDE2X3QgTlBQX0hhbmRsZUV2ZW50KHZvaWQqIGV2ZW50KTsKLSAgICB2b2lkIE5QUF9V
UkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBOUFJlYXNvbiwgdm9pZCogbm90aWZ5RGF0YSk7Ci0g
ICAgYm9vbCBOUFBfVVJMUmVkaXJlY3ROb3RpZnkoY29uc3QgY2hhciogdXJsLCBpbnQzMl90IHN0
YXR1cywgdm9pZCogbm90aWZ5RGF0YSk7Ci0gICAgTlBFcnJvciBOUFBfR2V0VmFsdWUoTlBQVmFy
aWFibGUsIHZvaWQgKnZhbHVlKTsKLSAgICBOUEVycm9yIE5QUF9TZXRWYWx1ZShOUE5WYXJpYWJs
ZSwgdm9pZCAqdmFsdWUpOwotCi0gICAgLy8gQ29udmVydCB0aGUgZ2l2ZW4gcG9pbnQgZnJvbSBw
bHVnLWluIGNvb3JkaW5hdGVzIHRvIHJvb3QgdmlldyBjb29yZGluYXRlcy4KLSAgICBXZWJDb3Jl
OjpJbnRQb2ludCBjb252ZXJ0VG9Sb290Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNv
bnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE5ldHNjYXBlUGx1Z2luKFJl
ZjxOZXRzY2FwZVBsdWdpbk1vZHVsZT4mJik7Ci0KLSAgICB2b2lkIGNhbGxTZXRXaW5kb3coKTsK
LSAgICB2b2lkIGNhbGxTZXRXaW5kb3dJbnZpc2libGUoKTsKLSAgICBib29sIHNob3VsZExvYWRT
cmNVUkwoKTsKLSAgICBOZXRzY2FwZVBsdWdpblN0cmVhbSogc3RyZWFtRnJvbUlEKHVpbnQ2NF90
IHN0cmVhbUlEKTsKLSAgICB2b2lkIHN0b3BBbGxTdHJlYW1zKCk7Ci0gICAgYm9vbCBhbGxvd1Bv
cHVwcygpIGNvbnN0OwotCi0gICAgY29uc3QgY2hhciogdXNlckFnZW50KCk7Ci0KLSAgICB2b2lk
IHBsYXRmb3JtUHJlSW5pdGlhbGl6ZSgpOwotICAgIGJvb2wgcGxhdGZvcm1Qb3N0SW5pdGlhbGl6
ZSgpOwotICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7Ci0gICAgYm9vbCBwbGF0Zm9ybUludmFs
aWRhdGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZvaWQgcGxhdGZvcm1HZW9tZXRy
eURpZENoYW5nZSgpOwotICAgIHZvaWQgcGxhdGZvcm1WaXNpYmlsaXR5RGlkQ2hhbmdlKCk7Ci0g
ICAgdm9pZCBwbGF0Zm9ybVBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCwgYm9vbCBpc1NuYXBzaG90ID0gZmFsc2UpOwotCi0g
ICAgYm9vbCBwbGF0Zm9ybUhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwot
ICAgIGJvb2wgcGxhdGZvcm1IYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmKTsK
LSAgICBib29sIHBsYXRmb3JtSGFuZGxlTW91c2VFbnRlckV2ZW50KGNvbnN0IFdlYk1vdXNlRXZl
bnQmKTsKLSAgICBib29sIHBsYXRmb3JtSGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNvbnN0IFdlYk1v
dXNlRXZlbnQmKTsKLSAgICBib29sIHBsYXRmb3JtSGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBX
ZWJLZXlib2FyZEV2ZW50Jik7Ci0gICAgdm9pZCBwbGF0Zm9ybVNldEZvY3VzKGJvb2wpOwotCi0g
ICAgc3RhdGljIGJvb2wgd2FudHNQbHVnaW5SZWxhdGl2ZU5QV2luZG93Q29vcmRpbmF0ZXMoKTsK
LQotICAgIC8vIFBsdWdpbgotICAgIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXN0cm95KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwYWludChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJl
Y3QpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IHNuYXBzaG90KCkgb3Zl
cnJpZGU7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgUGxhdGZvcm1MYXllciogcGx1Z2luTGF5
ZXIoKSBvdmVycmlkZTsKLSNlbmRpZgotICAgIGJvb2wgaXNUcmFuc3BhcmVudCgpIG92ZXJyaWRl
OwotICAgIGJvb2wgd2FudHNXaGVlbEV2ZW50cygpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2VvbWV0
cnlEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgY2xpcFJlY3QsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYg
cGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2aXNpYmlsaXR5
RGlkQ2hhbmdlKGJvb2wgaXNWaXNpYmxlKSBvdmVycmlkZTsKLSAgICB2b2lkIGZyYW1lRGlkRmlu
aXNoTG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpIG92ZXJyaWRlOwotICAgIHZvaWQgZnJhbWVE
aWRGYWlsKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCB3YXNDYW5jZWxsZWQpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3Qg
U3RyaW5nJiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RyZWFtV2lsbFNlbmRSZXF1ZXN0
KHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IFVSTCYgcmVz
cG9uc2VVUkwsIGludCByZXNwb25zZVN0YXR1cykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJlYW1E
aWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IFVSTCYgcmVzcG9uc2VV
UkwsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGNvbnN0IFN0cmluZyYgaGVhZGVycywgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxl
TmFtZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJlYW1EaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBz
dHJlYW1JRCwgY29uc3QgdWludDhfdCogYnl0ZXMsIGludCBsZW5ndGgpIG92ZXJyaWRlOwotICAg
IHZvaWQgc3RyZWFtRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCBzdHJlYW1JRCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0cmVhbUlELCBib29sIHdhc0NhbmNl
bGxlZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2Uo
Y29uc3QgVVJMJiByZXNwb25zZVVSTCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxhc3RNb2Rp
ZmllZFRpbWUsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgaGVhZGVycywg
Y29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlTmFtZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtYW51
YWxTdHJlYW1EaWRSZWNlaXZlRGF0YShjb25zdCB1aW50OF90KiBieXRlcywgaW50IGxlbmd0aCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBtYW51YWxTdHJlYW1EaWRGaW5pc2hMb2FkaW5nKCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBtYW51YWxTdHJlYW1EaWRGYWlsKGJvb2wgd2FzQ2FuY2VsbGVkKSBvdmVy
cmlkZTsKLSAgICAKLSAgICBib29sIGhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVu
dCYpIG92ZXJyaWRlOwotICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2
ZW50Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYW5kbGVNb3VzZUVudGVyRXZlbnQoY29uc3QgV2Vi
TW91c2VFdmVudCYpIG92ZXJyaWRlOwotICAgIGJvb2wgaGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNv
bnN0IFdlYk1vdXNlRXZlbnQmKSBvdmVycmlkZTsKLSAgICBib29sIGhhbmRsZUNvbnRleHRNZW51
RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpIG92ZXJyaWRlOwotICAgIGJvb2wgaGFuZGxlS2V5
Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
ZXRGb2N1cyhib29sKSBvdmVycmlkZTsKLQotICAgIGJvb2wgaGFuZGxlRWRpdGluZ0NvbW1hbmQo
Y29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkgb3ZlcnJp
ZGU7Ci0gICAgYm9vbCBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmKSBvdmVy
cmlkZTsKLQotICAgIGJvb2wgc2hvdWxkQWxsb3dTY3JpcHRpbmcoKSBvdmVycmlkZTsKLSAgICBi
b29sIHNob3VsZEFsbG93TmF2aWdhdGlvbkZyb21EcmFncygpIG92ZXJyaWRlOwotICAgIAotICAg
IGJvb2wgaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgTlBP
YmplY3QqIHBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpIG92ZXJyaWRlOwotICAgIAotICAgIHVu
c2lnbmVkIGNvdW50RmluZE1hdGNoZXMoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6RmluZE9wdGlv
bnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpIG92ZXJyaWRlOwotICAgIGJvb2wgZmluZFN0cmlu
Zyhjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hD
b3VudCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHdpbmRvd0ZvY3VzQ2hhbmdlZChib29sKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHdpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwot
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgdm9pZCB3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdl
ZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMpIG92
ZXJyaWRlOwotCi0gICAgdWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIo
KSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHNlbmRDb21wbGV4VGV4dElucHV0KGNvbnN0IFN0
cmluZyYgdGV4dElucHV0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldExheWVySG9zdGluZ01vZGUo
TGF5ZXJIb3N0aW5nTW9kZSkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHBsdWdpbkZvY3VzT3JXaW5k
b3dGb2N1c0NoYW5nZWQoKTsKLSAgICB2b2lkIHNldENvbXBsZXhUZXh0SW5wdXRFbmFibGVkKGJv
b2wpOwotCi0gICAgdm9pZCB1cGRhdGVQbHVnaW5MYXllcigpOwotI2VuZGlmCi0KLSAgICB2b2lk
IGNvbnRlbnRzU2NhbGVGYWN0b3JDaGFuZ2VkKGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHN0
b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZChib29sKSBvdmVycmlkZTsKLSAgICB2b2lkIHByaXZh
dGVCcm93c2luZ1N0YXRlQ2hhbmdlZChib29sKSBvdmVycmlkZTsKLSAgICBib29sIGdldEZvcm1W
YWx1ZShTdHJpbmcmIGZvcm1WYWx1ZSkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYW5kbGVTY3JvbGwo
V2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uLCBXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eSkgb3Zl
cnJpZGU7Ci0gICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgb3Zl
cnJpZGU7Ci0gICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIG92ZXJy
aWRlOwotCi0gICAgYm9vbCBzdXBwb3J0c1NuYXBzaG90dGluZygpIGNvbnN0IG92ZXJyaWRlOwot
Ci0gICAgLy8gQ29udmVydCB0aGUgZ2l2ZW4gcG9pbnQgZnJvbSByb290IHZpZXcgY29vcmRpbmF0
ZXMgdG8gcGx1Zy1pbiBjb29yZGluYXRlcy4gUmV0dXJucyBmYWxzZSBpZiB0aGUgcG9pbnQgY2Fu
J3QgYmUKLSAgICAvLyBjb252ZXJ0ZWQgKGlmIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggaXNu
J3QgaW52ZXJ0aWJsZSkuCi0gICAgYm9vbCBjb252ZXJ0RnJvbVJvb3RWaWV3KGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBwb2ludEluUm9vdFZpZXdDb29yZGluYXRlcywgV2ViQ29yZTo6SW50UG9p
bnQmIHBvaW50SW5QbHVnaW5Db29yZGluYXRlcyk7Ci0KLSAgICBSZWZQdHI8V2ViQ29yZTo6U2hh
cmVkQnVmZmVyPiBsaXZlUmVzb3VyY2VEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBib29s
IHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50Jikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIFN0cmluZyBnZXRTZWxlY3Rp
b25TdHJpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQotICAgIFN0cmlu
ZyBnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2ludChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KLSAgICBib29sIGV4aXN0aW5nU2Vs
ZWN0aW9uQ29udGFpbnNQb2ludChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZvaWQgbXV0ZWRTdGF0ZUNoYW5nZWQoYm9v
bCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHVwZGF0ZU5QTlByaXZhdGVNb2RlKCk7Ci0KLSAgICB1
aW50NjRfdCBtX25leHRSZXF1ZXN0SUQ7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8dWludDY0X3Qs
IHN0ZDo6cGFpcjxTdHJpbmcsIHZvaWQqPj4gUGVuZGluZ1VSTE5vdGlmeU1hcDsKLSAgICBQZW5k
aW5nVVJMTm90aWZ5TWFwIG1fcGVuZGluZ1VSTE5vdGlmaWNhdGlvbnM7Ci0KLSAgICB0eXBlZGVm
IEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxOZXRzY2FwZVBsdWdpblN0cmVhbT4+IFN0cmVhbXNN
YXA7Ci0gICAgU3RyZWFtc01hcCBtX3N0cmVhbXM7Ci0gICAgSGFzaE1hcDx2b2lkKiwgc3RkOjpw
YWlyPFJlZlB0cjxOZXRzY2FwZVBsdWdpblN0cmVhbT4sIFN0cmluZz4+IG1fcmVkaXJlY3RzOwot
Ci0gICAgUmVmPE5ldHNjYXBlUGx1Z2luTW9kdWxlPiBtX3BsdWdpbk1vZHVsZTsKLSAgICBOUFBf
dCBtX25wcDsKLSAgICBOUFdpbmRvdyBtX25wV2luZG93OwotCi0gICAgV2ViQ29yZTo6SW50U2l6
ZSBtX3BsdWdpblNpemU7Ci0KLSAgICAvLyBUaGUgY2xpcCByZWN0IGluIHBsdWctaW4gY29vcmRp
bmF0ZXMuCi0gICAgV2ViQ29yZTo6SW50UmVjdCBtX2NsaXBSZWN0OwotCi0gICAgLy8gQSB0cmFu
c2Zvcm0gdGhhdCBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IGZyb20gcm9vdCB2aWV3IGNvb3JkaW5h
dGVzIHRvIHBsdWctaW4gY29vcmRpbmF0ZXMuCi0gICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3Jt
IG1fcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybTsKLQotI2lmIFBMVUdJTl9BUkNISVRFQ1RVUkUo
VU5JWCkKLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fZnJhbWVSZWN0SW5XaW5kb3dDb29yZGluYXRl
czsKLSNlbmRpZgotCi0gICAgQ1N0cmluZyBtX3VzZXJBZ2VudDsKLQotICAgIGJvb2wgbV9pc1N0
YXJ0ZWQ7Ci0gICAgYm9vbCBtX2lzV2luZG93ZWQ7Ci0gICAgYm9vbCBtX2lzVHJhbnNwYXJlbnQ7
Ci0gICAgYm9vbCBtX2luTlBQTmV3OwotICAgIGJvb2wgbV9zaG91bGRVc2VNYW51YWxMb2FkZXI7
Ci0gICAgYm9vbCBtX2hhc0NhbGxlZFNldFdpbmRvdzsKLSAgICBib29sIG1faXNWaXNpYmxlOwot
Ci0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luU3RyZWFtPiBtX21hbnVhbFN0cmVhbTsKLSAgICBW
ZWN0b3I8Ym9vbCwgOD4gbV9wb3B1cEVuYWJsZWRTdGF0ZXM7Ci0KLSAgICBjbGFzcyBUaW1lciB7
Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShUaW1lcik7Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgdm9pZCAoKlRp
bWVyRnVuYykoTlBQLCB1aW50MzJfdCB0aW1lcklEKTsKLQotICAgICAgICBUaW1lcihOZXRzY2Fw
ZVBsdWdpbiosIHVuc2lnbmVkIHRpbWVySUQsIHVuc2lnbmVkIGludGVydmFsLCBib29sIHJlcGVh
dCwgVGltZXJGdW5jKTsKLSAgICAgICAgflRpbWVyKCk7Ci0KLSAgICAgICAgdm9pZCBzdGFydCgp
OwotICAgICAgICB2b2lkIHN0b3AoKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgdGlt
ZXJGaXJlZCgpOwotCi0gICAgICAgIC8vIFRoaXMgaXMgYSB3ZWFrIHBvaW50ZXIgc2luY2UgVGlt
ZXIgb2JqZWN0cyBhcmUgZGVzdHJveWVkIGJlZm9yZSB0aGUgTmV0c2NhcGVQbHVnaW4gb2JqZWN0
IGl0c2VsZiBpcyBkZXN0cm95ZWQuCi0gICAgICAgIE5ldHNjYXBlUGx1Z2luKiBtX25ldHNjYXBl
UGx1Z2luOwotCi0gICAgICAgIHVuc2lnbmVkIG1fdGltZXJJRDsKLSAgICAgICAgdW5zaWduZWQg
bV9pbnRlcnZhbDsKLSAgICAgICAgYm9vbCBtX3JlcGVhdDsKLSAgICAgICAgVGltZXJGdW5jIG1f
dGltZXJGdW5jOwotCi0gICAgICAgIFJ1bkxvb3A6OlRpbWVyPFRpbWVyPiBtX3RpbWVyOwotICAg
IH07Ci0gICAgdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8VGltZXI+
PiBUaW1lck1hcDsKLSAgICBUaW1lck1hcCBtX3RpbWVyczsKLSAgICB1bnNpZ25lZCBtX25leHRU
aW1lcklEOwotCi0gICAgYm9vbCBtX3ByaXZhdGVCcm93c2luZ1N0YXRlIHsgZmFsc2UgfTsKLSAg
ICBib29sIG1fc3RvcmFnZUJsb2NraW5nU3RhdGUgeyBmYWxzZSB9OwotCi0jaWYgUExVR0lOX0FS
Q0hJVEVDVFVSRShNQUMpCi0gICAgTlBEcmF3aW5nTW9kZWwgbV9kcmF3aW5nTW9kZWw7Ci0gICAg
TlBFdmVudE1vZGVsIG1fZXZlbnRNb2RlbDsKLQotICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVy
PiBtX3BsdWdpbkxheWVyOwotICAgIGJvb2wgbV9wbHVnaW5SZXR1cm5zTm9ucmV0YWluZWRMYXll
cjsKLSAgICBMYXllckhvc3RpbmdNb2RlIG1fbGF5ZXJIb3N0aW5nTW9kZTsKLQotICAgIE5QQ29j
b2FFdmVudCogbV9jdXJyZW50TW91c2VFdmVudDsKLQotICAgIGJvb2wgbV9wbHVnaW5IYXNGb2N1
czsKLSAgICBib29sIG1fd2luZG93SGFzRm9jdXM7Ci0KLSAgICAvLyBXaGV0aGVyIHRoZSBwbHVn
LWluIHdhbnRzIHRvIHVzZSB0aGUgbGVnYWN5IENvY29hIHRleHQgaW5wdXQgaGFuZGxpbmcgdGhh
dAotICAgIC8vIGV4aXN0ZWQgaW4gV2ViS2l0MSwgb3IgdGhlIHVwZGF0ZWQgQ29jb2EgdGV4dCBp
bnB1dCBoYW5kbGluZyBzcGVjaWZpZWQgb24KLSAgICAvLyBodHRwczovL3dpa2kubW96aWxsYS5v
cmcvTlBBUEk6Q29jb2FFdmVudE1vZGVsI1RleHRfSW5wdXQKLSAgICBib29sIG1fcGx1Z2luV2Fu
dHNMZWdhY3lDb2NvYVRleHRJbnB1dDsKLQotICAgIC8vIFdoZXRoZXIgY29tcGxleCB0ZXh0IGlu
cHV0IGlzIGVuYWJsZWQuCi0gICAgYm9vbCBtX2lzQ29tcGxleFRleHRJbnB1dEVuYWJsZWQ7Ci0K
LSAgICAvLyBXaGV0aGVyIHRoZSBwbHVnLWluIGhhcyBoYW5kbGVkIGEga2V5ZG93biBldmVudC4g
VGhpcyBpcyB1c2VkIHRvIGRldGVybWluZQotICAgIC8vIGlmIHdlIGNhbiB0ZWxsIHRoZSBwbHVn
LWluIHRoYXQgd2Ugc3VwcG9ydCB0aGUgdXBkYXRlZCBDb2NvYSB0ZXh0IGlucHV0IHNwZWNpZmlj
YXRpb24uCi0gICAgYm9vbCBtX2hhc0hhbmRsZWRBS2V5RG93bkV2ZW50OwotCi0gICAgLy8gVGhl
IG51bWJlciBvZiBOUENvY29hRXZlbnRLZXlVcCBldmVudHMgdGhhdCBzaG91bGQgYmUgaWdub3Jl
ZC4KLSAgICB1bnNpZ25lZCBtX2lnbm9yZU5leHRLZXlVcEV2ZW50Q291bnRlcjsKLQotICAgIFdl
YkNvcmU6OkludFJlY3QgbV93aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXM7Ci0gICAgV2Vi
Q29yZTo6SW50UmVjdCBtX3ZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXM7Ci0jZWxpZiBQTFVH
SU5fQVJDSElURUNUVVJFKFVOSVgpCi0gICAgc3RkOjp1bmlxdWVfcHRyPE5ldHNjYXBlUGx1Z2lu
VW5peD4gbV9pbXBsOwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19QTFVHSU4oTmV0c2NhcGVQbHVnaW4sIGlzTmV0c2NhcGVQbHVn
aW4oKSkKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVn
aW5TdHJlYW0uY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TmV0c2NhcGVQbHVnaW5TdHJlYW0uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm
MjcxN2ViMTYzNmM5MDE4YWY1MDYzOTNjZTk0NjVjZjcwZWRjNThiLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luU3RyZWFtLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDM3NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIk5ldHNjYXBlUGx1Z2luU3RyZWFtLmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLQotI2luY2x1ZGUgIk5ldHNjYXBlUGx1Z2luLmgiCi0jaW5jbHVkZSA8dXRpbGl0eT4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLU5ldHNjYXBlUGx1Z2luU3RyZWFtOjpOZXRzY2FwZVBsdWdpblN0
cmVhbShSZWY8TmV0c2NhcGVQbHVnaW4+JiYgcGx1Z2luLCB1aW50NjRfdCBzdHJlYW1JRCwgY29u
c3QgU3RyaW5nJiByZXF1ZXN0VVJMU3RyaW5nLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQq
IG5vdGlmaWNhdGlvbkRhdGEpCi0gICAgOiBtX3BsdWdpbihXVEZNb3ZlKHBsdWdpbikpCi0gICAg
LCBtX3N0cmVhbUlEKHN0cmVhbUlEKQotICAgICwgbV9yZXF1ZXN0VVJMU3RyaW5nKHJlcXVlc3RV
UkxTdHJpbmcpCi0gICAgLCBtX3NlbmROb3RpZmljYXRpb24oc2VuZE5vdGlmaWNhdGlvbikKLSAg
ICAsIG1fbm90aWZpY2F0aW9uRGF0YShub3RpZmljYXRpb25EYXRhKQotICAgICwgbV9ucFN0cmVh
bSgpCi0gICAgLCBtX3RyYW5zZmVyTW9kZShOUF9OT1JNQUwpCi0gICAgLCBtX29mZnNldCgwKQot
ICAgICwgbV9maWxlSGFuZGxlKEZpbGVTeXN0ZW06OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUp
Ci0gICAgLCBtX2lzU3RhcnRlZChmYWxzZSkKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgICwgbV91
cmxOb3RpZnlIYXNCZWVuQ2FsbGVkKGZhbHNlKQotI2VuZGlmICAgIAotICAgICwgbV9kZWxpdmVy
eURhdGFUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZOZXRzY2FwZVBsdWdpblN0cmVhbTo6
ZGVsaXZlckRhdGFUb1BsdWdpbikKLSAgICAsIG1fc3RvcFN0cmVhbVdoZW5Eb25lRGVsaXZlcmlu
ZyhmYWxzZSkKLXsKLX0KLQotTmV0c2NhcGVQbHVnaW5TdHJlYW06On5OZXRzY2FwZVBsdWdpblN0
cmVhbSgpCi17Ci0gICAgQVNTRVJUKCFtX2lzU3RhcnRlZCk7Ci0gICAgQVNTRVJUKCFtX3NlbmRO
b3RpZmljYXRpb24gfHwgbV91cmxOb3RpZnlIYXNCZWVuQ2FsbGVkKTsKLSAgICBBU1NFUlQobV9m
aWxlSGFuZGxlID09IEZpbGVTeXN0ZW06OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpOwotfQot
Ci12b2lkIE5ldHNjYXBlUGx1Z2luU3RyZWFtOjp3aWxsU2VuZFJlcXVlc3QoY29uc3QgVVJMJiBy
ZXF1ZXN0VVJMLCBjb25zdCBVUkwmIHJlZGlyZWN0UmVzcG9uc2VVUkwsIGludCByZWRpcmVjdFJl
c3BvbnNlU3RhdHVzKQotewotICAgIFJlZjxOZXRzY2FwZVBsdWdpblN0cmVhbT4gcHJvdGVjdCgq
dGhpcyk7Ci0KLSAgICBpZiAocmVkaXJlY3RSZXNwb25zZVN0YXR1cyA+PSAzMDAgJiYgcmVkaXJl
Y3RSZXNwb25zZVN0YXR1cyA8IDQwMCkKLSAgICAgICAgbV9wbHVnaW4tPnJlZ2lzdGVyUmVkaXJl
Y3QodGhpcywgcmVxdWVzdFVSTCwgcmVkaXJlY3RSZXNwb25zZVN0YXR1cywgbV9ub3RpZmljYXRp
b25EYXRhKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpblN0cmVhbTo6ZGlkUmVjZWl2ZVJlc3Bv
bnNlKGNvbnN0IFVSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwgdWludDMy
X3QgbGFzdE1vZGlmaWVkVGltZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5n
JiBoZWFkZXJzKQotewotICAgIC8vIFN0YXJ0aW5nIHRoZSBzdHJlYW0gY291bGQgY2F1c2UgdGhl
IHBsdWctaW4gc3RyZWFtIHRvIGdvIGF3YXkgc28gd2Uga2VlcCBhIHJlZmVyZW5jZSB0byBpdCBo
ZXJlLgotICAgIFJlZjxOZXRzY2FwZVBsdWdpblN0cmVhbT4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAg
ICBzdGFydChyZXNwb25zZVVSTC5zdHJpbmcoKSwgc3RyZWFtTGVuZ3RoLCBsYXN0TW9kaWZpZWRU
aW1lLCBtaW1lVHlwZSwgaGVhZGVycyk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5TdHJlYW06
OmRpZFJlY2VpdmVEYXRhKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBpbnQgbGVuZ3RoKQotewotICAg
IC8vIERlbGl2ZXJpbmcgdGhlIGRhdGEgY291bGQgY2F1c2UgdGhlIHBsdWctaW4gc3RyZWFtIHRv
IGdvIGF3YXkgc28gd2Uga2VlcCBhIHJlZmVyZW5jZSB0byBpdCBoZXJlLgotICAgIFJlZjxOZXRz
Y2FwZVBsdWdpblN0cmVhbT4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBkZWxpdmVyRGF0YShieXRl
cywgbGVuZ3RoKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpblN0cmVhbTo6ZGlkRmluaXNoTG9h
ZGluZygpCi17Ci0gICAgLy8gU3RvcHBpbmcgdGhlIHN0cmVhbSBjb3VsZCBjYXVzZSB0aGUgcGx1
Zy1pbiBzdHJlYW0gdG8gZ28gYXdheSBzbyB3ZSBrZWVwIGEgcmVmZXJlbmNlIHRvIGl0IGhlcmUu
Ci0gICAgUmVmPE5ldHNjYXBlUGx1Z2luU3RyZWFtPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIHN0
b3AoTlBSRVNfRE9ORSk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5TdHJlYW06OmRpZEZhaWwo
Ym9vbCB3YXNDYW5jZWxsZWQpCi17Ci0gICAgLy8gU3RvcHBpbmcgdGhlIHN0cmVhbSBjb3VsZCBj
YXVzZSB0aGUgcGx1Zy1pbiBzdHJlYW0gdG8gZ28gYXdheSBzbyB3ZSBrZWVwIGEgcmVmZXJlbmNl
IHRvIGl0IGhlcmUuCi0gICAgUmVmPE5ldHNjYXBlUGx1Z2luU3RyZWFtPiBwcm90ZWN0KCp0aGlz
KTsKLQotICAgIHN0b3Aod2FzQ2FuY2VsbGVkID8gTlBSRVNfVVNFUl9CUkVBSyA6IE5QUkVTX05F
VFdPUktfRVJSKTsKLX0KLSAgICAKLXZvaWQgTmV0c2NhcGVQbHVnaW5TdHJlYW06OnNlbmRKYXZh
U2NyaXB0U3RyZWFtKGNvbnN0IFN0cmluZyYgcmVzdWx0KQotewotICAgIC8vIHN0YXJ0aW5nIHRo
ZSBzdHJlYW0gb3IgZGVsaXZlcmluZyB0aGUgZGF0YSB0byBpdCBtaWdodCBjYXVzZSB0aGUgcGx1
Zy1pbiBzdHJlYW0gdG8gZ28gYXdheSwgc28gd2Uga2VlcAotICAgIC8vIGEgcmVmZXJlbmNlIHRv
IGl0IGhlcmUuCi0gICAgUmVmPE5ldHNjYXBlUGx1Z2luU3RyZWFtPiBwcm90ZWN0KCp0aGlzKTsK
LQotICAgIENTdHJpbmcgcmVzdWx0Q1N0cmluZyA9IHJlc3VsdC51dGY4KCk7Ci0gICAgaWYgKHJl
c3VsdENTdHJpbmcuaXNOdWxsKCkpIHsKLSAgICAgICAgLy8gVGhlcmUgd2FzIGFuIGVycm9yIGV2
YWx1YXRpbmcgdGhlIEphdmFTY3JpcHQsIGNhbGwgTlBQX1VSTE5vdGlmeSBpZiBuZWVkZWQgYW5k
IHRoZW4gZGVzdHJveSB0aGUgc3RyZWFtLgotICAgICAgICBub3RpZnlBbmREZXN0cm95U3RyZWFt
KE5QUkVTX05FVFdPUktfRVJSKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
c3RhcnQobV9yZXF1ZXN0VVJMU3RyaW5nLCByZXN1bHRDU3RyaW5nLmxlbmd0aCgpLCAwLCAidGV4
dC9wbGFpbiIsICIiKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGVsaXZlckRhdGEocmVzdWx0
Q1N0cmluZy5kYXRhQXNVSW50OFB0cigpLCByZXN1bHRDU3RyaW5nLmxlbmd0aCgpKTsKLSAgICBz
dG9wKE5QUkVTX0RPTkUpOwotfQotCi1OUEVycm9yIE5ldHNjYXBlUGx1Z2luU3RyZWFtOjpkZXN0
cm95KE5QUmVhc29uIHJlYXNvbikKLXsKLSAgICAvLyBJdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8g
Y2FsbCBOUE5fRGVzdHJveVN0cmVhbSBvbiBhIHN0cmVhbSB0aGF0IGhhc24ndCBiZWVuIHN0YXJ0
ZWQgeWV0LgotICAgIGlmICghbV9pc1N0YXJ0ZWQpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5F
UklDX0VSUk9SOwotCi0gICAgLy8gSXQgaXNuJ3QgcmVhbGx5IHZhbGlkIGZvciBhIHBsdWctaW4g
dG8gY2FsbCBOUE5fRGVzdHJveVN0cmVhbSB3aXRoIE5QUkVTX0RPTkUuCi0gICAgLy8gKEF0IGxl
YXN0IG5vdCBmb3IgYnJvd3NlciBpbml0aWF0ZWQgc3RyZWFtcywgYW5kIHdlIGRvbid0IHN1cHBv
cnQgcGx1Zy1pbiBpbml0aWF0ZWQgc3RyZWFtcykuCi0gICAgaWYgKHJlYXNvbiA9PSBOUFJFU19E
T05FKQotICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKLQotICAgIGNhbmNlbCgp
OwotICAgIHN0b3AocmVhc29uKTsKLSAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLXN0
YXRpYyBib29sIGlzU3VwcG9ydGVkVHJhbnNmZXJNb2RlKHVpbnQxNl90IHRyYW5zZmVyTW9kZSkK
LXsKLSAgICBzd2l0Y2ggKHRyYW5zZmVyTW9kZSkgewotICAgIGNhc2UgTlBfQVNGSUxFT05MWToK
LSAgICBjYXNlIE5QX0FTRklMRToKLSAgICBjYXNlIE5QX05PUk1BTDoKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgLy8gRklYTUU6IFdlIGRvbid0IHN1cHBvcnQgc2Vla2FibGUgc3RyZWFtcy4K
LSAgICBjYXNlIE5QX1NFRUs6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0gICAgCi1ib29sIE5l
dHNjYXBlUGx1Z2luU3RyZWFtOjpzdGFydChjb25zdCBTdHJpbmcmIHJlc3BvbnNlVVJMU3RyaW5n
LCB1aW50MzJfdCBzdHJlYW1MZW5ndGgsIHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgaGVhZGVycykKLXsKLSAgICBtX3Jlc3Bv
bnNlVVJMID0gcmVzcG9uc2VVUkxTdHJpbmcudXRmOCgpOwotICAgIG1fbWltZVR5cGUgPSBtaW1l
VHlwZS51dGY4KCk7Ci0gICAgbV9oZWFkZXJzID0gaGVhZGVycy51dGY4KCk7Ci0KLSAgICBtX25w
U3RyZWFtLm5kYXRhID0gdGhpczsKLSAgICBtX25wU3RyZWFtLnVybCA9IG1fcmVzcG9uc2VVUkwu
ZGF0YSgpOwotICAgIG1fbnBTdHJlYW0uZW5kID0gc3RyZWFtTGVuZ3RoOwotICAgIG1fbnBTdHJl
YW0ubGFzdG1vZGlmaWVkID0gbGFzdE1vZGlmaWVkVGltZTsKLSAgICBtX25wU3RyZWFtLm5vdGlm
eURhdGEgPSBtX25vdGlmaWNhdGlvbkRhdGE7Ci0gICAgbV9ucFN0cmVhbS5oZWFkZXJzID0gbV9o
ZWFkZXJzLmxlbmd0aCgpID09IDAgPyAwIDogbV9oZWFkZXJzLmRhdGEoKTsKLQotICAgIE5QRXJy
b3IgZXJyb3IgPSBtX3BsdWdpbi0+TlBQX05ld1N0cmVhbShjb25zdF9jYXN0PGNoYXIqPihtX21p
bWVUeXBlLmRhdGEoKSksICZtX25wU3RyZWFtLCBmYWxzZSwgJm1fdHJhbnNmZXJNb2RlKTsKLSAg
ICBpZiAoZXJyb3IgIT0gTlBFUlJfTk9fRVJST1IpIHsKLSAgICAgICAgLy8gV2UgZmFpbGVkIHRv
IHN0YXJ0IHRoZSBzdHJlYW0sIGNhbmNlbCB0aGUgbG9hZCBhbmQgZGVzdHJveSBpdC4KLSAgICAg
ICAgY2FuY2VsKCk7Ci0gICAgICAgIG5vdGlmeUFuZERlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09S
S19FUlIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gV2Ugc3VjY2Vz
c2Z1bGx5IHN0YXJ0ZWQgdGhlIHN0cmVhbS4KLSAgICBtX2lzU3RhcnRlZCA9IHRydWU7Ci0KLSAg
ICBpZiAoIWlzU3VwcG9ydGVkVHJhbnNmZXJNb2RlKG1fdHJhbnNmZXJNb2RlKSkgewotICAgICAg
ICAvLyBDYW5jZWwgdGhlIGxvYWQgYW5kIHN0b3AgdGhlIHN0cmVhbS4KLSAgICAgICAgY2FuY2Vs
KCk7Ci0gICAgICAgIHN0b3AoTlBSRVNfTkVUV09SS19FUlIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5T
dHJlYW06OmRlbGl2ZXJEYXRhKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBpbnQgbGVuZ3RoKQotewot
ICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7Ci0KLSAgICBpZiAobV90cmFuc2Zlck1vZGUgIT0gTlBf
QVNGSUxFT05MWSkgewotICAgICAgICBpZiAoIW1fZGVsaXZlcnlEYXRhKQotICAgICAgICAgICAg
bV9kZWxpdmVyeURhdGEgPSBtYWtlVW5pcXVlPFZlY3Rvcjx1aW50OF90Pj4oKTsKLQotICAgICAg
ICBtX2RlbGl2ZXJ5RGF0YS0+cmVzZXJ2ZUNhcGFjaXR5KG1fZGVsaXZlcnlEYXRhLT5zaXplKCkg
KyBsZW5ndGgpOwotICAgICAgICBtX2RlbGl2ZXJ5RGF0YS0+YXBwZW5kKGJ5dGVzLCBsZW5ndGgp
OwotICAgICAgICAKLSAgICAgICAgZGVsaXZlckRhdGFUb1BsdWdpbigpOwotICAgIH0KLQotICAg
IGlmIChtX3RyYW5zZmVyTW9kZSA9PSBOUF9BU0ZJTEUgfHwgbV90cmFuc2Zlck1vZGUgPT0gTlBf
QVNGSUxFT05MWSkKLSAgICAgICAgZGVsaXZlckRhdGFUb0ZpbGUoYnl0ZXMsIGxlbmd0aCk7Ci19
Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5TdHJlYW06OmRlbGl2ZXJEYXRhVG9QbHVnaW4oKQotewot
ICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7Ci0KLSAgICBpbnQzMl90IG51bUJ5dGVzVG9EZWxpdmVy
ID0gbV9kZWxpdmVyeURhdGEtPnNpemUoKTsKLSAgICBpbnQzMl90IG51bUJ5dGVzRGVsaXZlcmVk
ID0gMDsKLQotICAgIHdoaWxlIChudW1CeXRlc0RlbGl2ZXJlZCA8IG51bUJ5dGVzVG9EZWxpdmVy
KSB7Ci0gICAgICAgIGludDMyX3QgbnVtQnl0ZXNQbHVnaW5DYW5IYW5kbGUgPSBtX3BsdWdpbi0+
TlBQX1dyaXRlUmVhZHkoJm1fbnBTdHJlYW0pOwotICAgICAgICAKLSAgICAgICAgLy8gTlBQX1dy
aXRlUmVhZHkgY291bGQgY2FsbCBOUE5fRGVzdHJveVN0cmVhbSBhbmQgZGVzdHJveSB0aGUgc3Ry
ZWFtLgotICAgICAgICBpZiAoIW1faXNTdGFydGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIGlmIChudW1CeXRlc1BsdWdpbkNhbkhhbmRsZSA8PSAwKSB7Ci0gICAgICAgICAgICAv
LyBUaGUgcGx1Zy1pbiBjYW4ndCBoYW5kbGUgbW9yZSBkYXRhLCB3ZSdsbCBzZW5kIHRoZSByZXN0
IGxhdGVyCi0gICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YVRpbWVyLnN0YXJ0T25lU2hvdCgwX3Mp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGaWd1cmUgb3V0
IGhvdyBtdWNoIGRhdGEgdG8gc2VuZCB0byB0aGUgcGx1Zy1pbi4KLSAgICAgICAgaW50MzJfdCBk
YXRhTGVuZ3RoID0gc3RkOjptaW4obnVtQnl0ZXNQbHVnaW5DYW5IYW5kbGUsIG51bUJ5dGVzVG9E
ZWxpdmVyIC0gbnVtQnl0ZXNEZWxpdmVyZWQpOwotICAgICAgICB1aW50OF90KiBkYXRhID0gbV9k
ZWxpdmVyeURhdGEtPmRhdGEoKSArIG51bUJ5dGVzRGVsaXZlcmVkOwotCi0gICAgICAgIGludDMy
X3QgbnVtQnl0ZXNXcml0dGVuID0gbV9wbHVnaW4tPk5QUF9Xcml0ZSgmbV9ucFN0cmVhbSwgbV9v
ZmZzZXQsIGRhdGFMZW5ndGgsIGRhdGEpOwotICAgICAgICBpZiAobnVtQnl0ZXNXcml0dGVuIDwg
MCkgewotICAgICAgICAgICAgY2FuY2VsKCk7Ci0gICAgICAgICAgICBzdG9wKE5QUkVTX05FVFdP
UktfRVJSKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5Q
UF9Xcml0ZSBjb3VsZCBjYWxsIE5QTl9EZXN0cm95U3RyZWFtIGFuZCBkZXN0cm95IHRoZSBzdHJl
YW0uCi0gICAgICAgIGlmICghbV9pc1N0YXJ0ZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgbnVtQnl0ZXNXcml0dGVuID0gc3RkOjptaW4obnVtQnl0ZXNXcml0dGVuLCBkYXRhTGVu
Z3RoKTsKLSAgICAgICAgbV9vZmZzZXQgKz0gbnVtQnl0ZXNXcml0dGVuOwotICAgICAgICBudW1C
eXRlc0RlbGl2ZXJlZCArPSBudW1CeXRlc1dyaXR0ZW47Ci0gICAgfQotCi0gICAgLy8gV2UgZGlk
bid0IHdyaXRlIGFueXRoaW5nLgotICAgIGlmICghbnVtQnl0ZXNEZWxpdmVyZWQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChudW1CeXRlc0RlbGl2ZXJlZCA8IG51bUJ5dGVzVG9EZWxpdmVy
KSB7Ci0gICAgICAgIC8vIFJlbW92ZSB0aGUgYnl0ZXMgdGhhdCB3ZSBhY3R1YWxseSBkZWxpdmVy
ZWQuCi0gICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZW1vdmUoMCwgbnVtQnl0ZXNEZWxpdmVyZWQp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fZGVsaXZlcnlEYXRhLT5jbGVhcigpOwotCi0gICAg
ICAgIGlmIChtX3N0b3BTdHJlYW1XaGVuRG9uZURlbGl2ZXJpbmcpCi0gICAgICAgICAgICBzdG9w
KE5QUkVTX0RPTkUpOwotICAgIH0KLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpblN0cmVhbTo6ZGVs
aXZlckRhdGFUb0ZpbGUoY29uc3QgdWludDhfdCogYnl0ZXMsIGludCBsZW5ndGgpCi17Ci0gICAg
aWYgKG1fZmlsZUhhbmRsZSA9PSBGaWxlU3lzdGVtOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxl
ICYmIG1fZmlsZVBhdGguaXNOdWxsKCkpIHsKLSAgICAgICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5
IGZpbGUuCi0gICAgICAgIG1fZmlsZVBhdGggPSBGaWxlU3lzdGVtOjpvcGVuVGVtcG9yYXJ5Rmls
ZSgiV2ViS2l0UGx1Z2luU3RyZWFtIiwgbV9maWxlSGFuZGxlKTsKLQotICAgICAgICAvLyBXZSBm
YWlsZWQgdG8gb3BlbiB0aGUgZmlsZSwgc3RvcCB0aGUgc3RyZWFtLgotICAgICAgICBpZiAobV9m
aWxlSGFuZGxlID09IEZpbGVTeXN0ZW06OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpIHsKLSAg
ICAgICAgICAgIHN0b3AoTlBSRVNfTkVUV09SS19FUlIpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGludCBieXRlQ291bnQgPSBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShtX2ZpbGVIYW5kbGUs
IGJ5dGVzLCBsZW5ndGgpOwotICAgIGlmIChieXRlQ291bnQgIT0gbGVuZ3RoKSB7Ci0gICAgICAg
IC8vIFRoaXMgaGFwcGVucyBvbmx5IHJhcmVseSwgd2hlbiB3ZSBhcmUgb3V0IG9mIGRpc2sgc3Bh
Y2Ugb3IgaGF2ZSBhIGRpc2sgSS9PIGVycm9yLgotICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZp
bGUobV9maWxlSGFuZGxlKTsKLQotICAgICAgICBzdG9wKE5QUkVTX05FVFdPUktfRVJSKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5TdHJlYW06OnN0b3AoTlBSZWFzb24gcmVhc29u
KQotewotICAgIC8vIFRoZSBzdHJlYW0gd2FzIHN0b3BwZWQgYmVmb3JlIGl0IGdvdCBhIGNoYW5j
ZSB0byBzdGFydC4gVGhpcyBjYW4gaGFwcGVuIGlmIGEgc3RyZWFtIGlzIGNhbmNlbGxlZCBieQot
ICAgIC8vIFdlYktpdCBiZWZvcmUgaXQgcmVjZWl2ZWQgYSByZXNwb25zZS4KLSAgICBpZiAoIW1f
aXNTdGFydGVkKSB7Ci0gICAgICAgIEFTU0VSVChyZWFzb24gIT0gTlBSRVNfRE9ORSk7Ci0gICAg
ICAgIG5vdGlmeUFuZERlc3Ryb3lTdHJlYW0ocmVhc29uKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChyZWFzb24gPT0gTlBSRVNfRE9ORSAmJiBtX2RlbGl2ZXJ5RGF0YSAmJiAh
bV9kZWxpdmVyeURhdGEtPmlzRW1wdHkoKSkgewotICAgICAgICAvLyBUaGVyZSBpcyBzdGlsbCBk
YXRhIGxlZnQgdGhhdCB0aGUgcGx1Zy1pbiBoYXNuJ3QgYmVlbiBhYmxlIHRvIGNvbnN1bWUgeWV0
LgotICAgICAgICBBU1NFUlQobV9kZWxpdmVyeURhdGFUaW1lci5pc0FjdGl2ZSgpKTsKLSAgICAg
ICAgCi0gICAgICAgIC8vIFNldCBtX3N0b3BTdHJlYW1XaGVuRG9uZURlbGl2ZXJpbmcgdG8gdHJ1
ZSBzbyB0aGF0IHRoZSBuZXh0IHRpbWUgdGhlIGRlbGl2ZXJ5IHRpbWVyIGZpcmVzCi0gICAgICAg
IC8vIGFuZCBjYWxscyBkZWxpdmVyRGF0YVRvUGx1Z2luIHRoZSBzdHJlYW0gd2lsbCBiZSBjbG9z
ZWQgaWYgYWxsIHRoZSByZW1haW5pbmcgZGF0YSB3YXMKLSAgICAgICAgLy8gc3VjY2Vzc2Z1bGx5
IGRlbGl2ZXJlZC4KLSAgICAgICAgbV9zdG9wU3RyZWFtV2hlbkRvbmVEZWxpdmVyaW5nID0gdHJ1
ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fZGVsaXZlcnlEYXRhID0gbnVsbHB0
cjsKLSAgICBtX2RlbGl2ZXJ5RGF0YVRpbWVyLnN0b3AoKTsKLQotICAgIGlmIChtX3RyYW5zZmVy
TW9kZSA9PSBOUF9BU0ZJTEUgfHwgbV90cmFuc2Zlck1vZGUgPT0gTlBfQVNGSUxFT05MWSkgewot
ICAgICAgICBpZiAocmVhc29uID09IE5QUkVTX0RPTkUpIHsKLSAgICAgICAgICAgIC8vIEVuc3Vy
ZSB0aGF0IHRoZSBmaWxlIGlzIGNyZWF0ZWQuCi0gICAgICAgICAgICBkZWxpdmVyRGF0YVRvRmls
ZSgwLCAwKTsKLSAgICAgICAgICAgIGlmIChtX2ZpbGVIYW5kbGUgIT0gRmlsZVN5c3RlbTo6aW52
YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkKLSAgICAgICAgICAgICAgICBGaWxlU3lzdGVtOjpjbG9z
ZUZpbGUobV9maWxlSGFuZGxlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKCFt
X2ZpbGVQYXRoLmlzTnVsbCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9wbHVnaW4t
Pk5QUF9TdHJlYW1Bc0ZpbGUoJm1fbnBTdHJlYW0sIG1fZmlsZVBhdGgudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBKdXN0IGNsb3NlIHRoZSBmaWxlLgot
ICAgICAgICAgICAgaWYgKG1fZmlsZUhhbmRsZSAhPSBGaWxlU3lzdGVtOjppbnZhbGlkUGxhdGZv
cm1GaWxlSGFuZGxlKQotICAgICAgICAgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShtX2Zp
bGVIYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRGVsZXRlIHRoZSBmaWxlIGFmdGVy
IGNhbGxpbmcgTlBQX1N0cmVhbUFzRmlsZSgpLCBpbnN0ZWFkIG9mIGluIHRoZSBkZXN0cnVjdG9y
LiAgSXQgc2hvdWxkIGJlIE9LCi0gICAgICAgIC8vIHRvIGRlbGV0ZSB0aGUgZmlsZSBoZXJlIC0t
IE5QUF9TdHJlYW1Bc0ZpbGUoKSBpcyBhbHdheXMgY2FsbGVkIGltbWVkaWF0ZWx5IGJlZm9yZSBO
UFBfRGVzdHJveVN0cmVhbSgpCi0gICAgICAgIC8vICh0aGUgc3RyZWFtIGRlc3RydWN0aW9uIGZ1
bmN0aW9uKSwgc28gdGhlcmUgY2FuIGJlIG5vIGV4cGVjdGF0aW9uIHRoYXQgYSBwbHVnaW4gd2ls
bCByZWFkIHRoZSBzdHJlYW0KLSAgICAgICAgLy8gZmlsZSBhc3luY2hyb25vdXNseSBhZnRlciBO
UFBfU3RyZWFtQXNGaWxlKCkgaXMgY2FsbGVkLgotICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVG
aWxlKG1fZmlsZVBhdGgpOwotICAgICAgICBtX2ZpbGVQYXRoID0gU3RyaW5nKCk7Ci0KLSAgICAg
ICAgLy8gTlBQX1N0cmVhbUFzRmlsZSBjb3VsZCBjYWxsIE5QTl9EZXN0cm95U3RyZWFtIGFuZCBk
ZXN0cm95IHRoZSBzdHJlYW0uCi0gICAgICAgIGlmICghbV9pc1N0YXJ0ZWQpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU2V0IG1faXNTdGFydGVkIHRvIGZhbHNlIGJlZm9y
ZSBjYWxsaW5nIE5QUF9EZXN0cm95U3RyZWFtIGluIGNhc2UgTlBQX0Rlc3Ryb3lTdHJlYW0gY2Fs
bHMgTlBOX0Rlc3Ryb3lTdHJlYW0uCi0gICAgbV9pc1N0YXJ0ZWQgPSBmYWxzZTsKLQotICAgIG1f
cGx1Z2luLT5OUFBfRGVzdHJveVN0cmVhbSgmbV9ucFN0cmVhbSwgcmVhc29uKTsKLQotICAgIG5v
dGlmeUFuZERlc3Ryb3lTdHJlYW0ocmVhc29uKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpblN0
cmVhbTo6c2V0VVJMKGNvbnN0IFN0cmluZyYgbmV3VVJMU3RyaW5nKQotewotICAgIG1fcmVxdWVz
dFVSTFN0cmluZyA9IG5ld1VSTFN0cmluZzsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpblN0cmVh
bTo6Y2FuY2VsKCkKLXsKLSAgICBtX3BsdWdpbi0+Y2FuY2VsU3RyZWFtTG9hZCh0aGlzKTsKLX0K
LQotdm9pZCBOZXRzY2FwZVBsdWdpblN0cmVhbTo6bm90aWZ5QW5kRGVzdHJveVN0cmVhbShOUFJl
YXNvbiByZWFzb24pCi17Ci0gICAgQVNTRVJUKCFtX2lzU3RhcnRlZCk7Ci0gICAgQVNTRVJUKCFt
X2RlbGl2ZXJ5RGF0YVRpbWVyLmlzQWN0aXZlKCkpOwotICAgIEFTU0VSVCghbV91cmxOb3RpZnlI
YXNCZWVuQ2FsbGVkKTsKLSAgICAKLSAgICBpZiAobV9zZW5kTm90aWZpY2F0aW9uKSB7Ci0gICAg
ICAgIG1fcGx1Z2luLT5OUFBfVVJMTm90aWZ5KG1fcmVxdWVzdFVSTFN0cmluZy51dGY4KCkuZGF0
YSgpLCByZWFzb24sIG1fbm90aWZpY2F0aW9uRGF0YSk7Ci0gICAgCi0jaWYgQVNTRVJUX0VOQUJM
RUQKLSAgICAgICAgbV91cmxOb3RpZnlIYXNCZWVuQ2FsbGVkID0gdHJ1ZTsKLSNlbmRpZiAgICAK
LSAgICB9Ci0KLSAgICBtX3BsdWdpbi0+cmVtb3ZlUGx1Z2luU3RyZWFtKHRoaXMpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvTmV0c2NhcGVQbHVnaW5TdHJlYW0uaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luU3RyZWFtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDliMDcwOTk4ODQ3MjA0MzFhM2IxM2U0MDFlZTQ4ODgzOGJhNjI5ZTQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5TdHJlYW0uaAorKysgL2Rl
di9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgPFdlYkNvcmUvbnBydW50
aW1lX2ludGVybmFsLmg+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9GaWxlU3lz
dGVtLmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNs
YXNzIE5ldHNjYXBlUGx1Z2luOwotCi1jbGFzcyBOZXRzY2FwZVBsdWdpblN0cmVhbSA6IHB1Ymxp
YyBSZWZDb3VudGVkPE5ldHNjYXBlUGx1Z2luU3RyZWFtPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxOZXRzY2FwZVBsdWdpblN0cmVhbT4gY3JlYXRlKFJlZjxOZXRzY2FwZVBsdWdpbj4mJiBw
bHVnaW4sIHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBTdHJpbmcmIHJlcXVlc3RVUkxTdHJpbmcs
IGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZpY2F0aW9uRGF0YSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHNjYXBlUGx1Z2luU3RyZWFtKFdURk1vdmUo
cGx1Z2luKSwgc3RyZWFtSUQsIHJlcXVlc3RVUkxTdHJpbmcsIHNlbmROb3RpZmljYXRpb24sIG5v
dGlmaWNhdGlvbkRhdGEpKTsKLSAgICB9Ci0gICAgfk5ldHNjYXBlUGx1Z2luU3RyZWFtKCk7Ci0K
LSAgICB1aW50NjRfdCBzdHJlYW1JRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyZWFtSUQ7IH0KLSAg
ICBjb25zdCBOUFN0cmVhbSogbnBTdHJlYW0oKSBjb25zdCB7IHJldHVybiAmbV9ucFN0cmVhbTsg
fQotCi0gICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QoY29uc3QgVVJMJiByZXF1ZXN0VVJMLCBjb25z
dCBVUkwmIHJlZGlyZWN0UmVzcG9uc2VVUkwsIGludCByZWRpcmVjdFJlc3BvbnNlU3RhdHVzKTsK
LSAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBVUkwmIHJlc3BvbnNlVVJMLCB1aW50
MzJfdCBzdHJlYW1MZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
bGFzdE1vZGlmaWVkVGltZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBo
ZWFkZXJzKTsKLSAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBp
bnQgbGVuZ3RoKTsKLSAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoKTsKLSAgICB2b2lkIGRpZEZh
aWwoYm9vbCB3YXNDYW5jZWxsZWQpOwotCi0gICAgdm9pZCBzZW5kSmF2YVNjcmlwdFN0cmVhbShj
b25zdCBTdHJpbmcmIHJlc3VsdCk7Ci0KLSAgICB2b2lkIHN0b3AoTlBSZWFzb24pOwotICAgIE5Q
RXJyb3IgZGVzdHJveShOUFJlYXNvbik7Ci0gICAgdm9pZCBzZXRVUkwoY29uc3QgU3RyaW5nJiBu
ZXdVUkxTdHJpbmcpOwotCi1wcml2YXRlOgotICAgIE5ldHNjYXBlUGx1Z2luU3RyZWFtKFJlZjxO
ZXRzY2FwZVBsdWdpbj4mJiwgdWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IFN0cmluZyYgcmVxdWVz
dFVSTFN0cmluZywgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZmljYXRpb25EYXRh
KTsKLQotICAgIGJvb2wgc3RhcnQoY29uc3QgU3RyaW5nJiByZXNwb25zZVVSTFN0cmluZywgdWlu
dDMyX3Qgc3RyZWFtTGVuZ3RoLCAKLSAgICAgICAgICAgICAgIHVpbnQzMl90IGxhc3RNb2RpZmll
ZFRpbWUsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgaGVhZGVycyk7Ci0K
LSAgICB2b2lkIGNhbmNlbCgpOwotICAgIHZvaWQgbm90aWZ5QW5kRGVzdHJveVN0cmVhbShOUFJl
YXNvbik7Ci0KLSAgICB2b2lkIGRlbGl2ZXJEYXRhKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBpbnQg
bGVuZ3RoKTsKLSAgICB2b2lkIGRlbGl2ZXJEYXRhVG9QbHVnaW4oKTsKLSAgICB2b2lkIGRlbGl2
ZXJEYXRhVG9GaWxlKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBpbnQgbGVuZ3RoKTsKLQotICAgIFJl
ZjxOZXRzY2FwZVBsdWdpbj4gbV9wbHVnaW47Ci0gICAgdWludDY0X3QgbV9zdHJlYW1JRDsKLQot
ICAgIFN0cmluZyBtX3JlcXVlc3RVUkxTdHJpbmc7Ci0gICAgYm9vbCBtX3NlbmROb3RpZmljYXRp
b247Ci0gICAgdm9pZCogbV9ub3RpZmljYXRpb25EYXRhOwotCi0gICAgTlBTdHJlYW0gbV9ucFN0
cmVhbTsKLSAgICB1aW50MTZfdCBtX3RyYW5zZmVyTW9kZTsKLSAgICBpbnQzMl90IG1fb2Zmc2V0
OwotCi0gICAgU3RyaW5nIG1fZmlsZVBhdGg7Ci0gICAgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxl
SGFuZGxlIG1fZmlsZUhhbmRsZTsKLSAgICAKLSAgICAvLyBXaGV0aGVyIE5QUF9OZXdTdHJlYW0g
aGFzIHN1Y2Nlc3NmdWxseSBiZWVuIGNhbGxlZC4KLSAgICBib29sIG1faXNTdGFydGVkOwotCi0j
aWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIG1fdXJsTm90aWZ5SGFzQmVlbkNhbGxlZDsKLSNl
bmRpZgotCi0gICAgQ1N0cmluZyBtX3Jlc3BvbnNlVVJMOwotICAgIENTdHJpbmcgbV9taW1lVHlw
ZTsKLSAgICBDU3RyaW5nIG1faGVhZGVyczsKLQotICAgIFJ1bkxvb3A6OlRpbWVyPE5ldHNjYXBl
UGx1Z2luU3RyZWFtPiBtX2RlbGl2ZXJ5RGF0YVRpbWVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxW
ZWN0b3I8dWludDhfdD4+IG1fZGVsaXZlcnlEYXRhOwotICAgIGJvb2wgbV9zdG9wU3RyZWFtV2hl
bkRvbmVEZWxpdmVyaW5nOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAv
LyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL21hYy9OZXRzY2FwZVBsdWdpbk1hYy5tbSBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL21hYy9OZXRzY2FwZVBsdWdp
bk1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBkOWExNWEzNjIyNzFmZjU5
NTY0NDVjNjgwMDliMjBlOTE0ZjRmNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9t
YWMvTmV0c2NhcGVQbHVnaW5NYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSw3NzYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJOZXRzY2FwZVBs
dWdpbi5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbXBvcnQgIkxh
eWVyVHJlZUNvbnRleHQuaCIKLSNpbXBvcnQgIk5ldHNjYXBlQnJvd3NlckZ1bmNzLmgiCi0jaW1w
b3J0ICJQbHVnaW5Db250cm9sbGVyLmgiCi0jaW1wb3J0ICJXZWJLZXlib2FyZEV2ZW50LmgiCi0j
aW1wb3J0ICJXZWJNb3VzZUV2ZW50LmgiCi0jaW1wb3J0ICJXZWJXaGVlbEV2ZW50LmgiCi0jaW1w
b3J0IDxDYXJib24vQ2FyYm9uLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5o
PgotI2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2ltcG9ydCA8b2JqYy9ydW50
aW1lLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL21hYy9ISVRvb2xib3hTUEkuaD4KLSNpbXBvcnQgPHBh
bC9zcGkvbWFjL05TTWVudVNQSS5oPgotI2ltcG9ydCA8d3RmL01hY2hTZW5kUmlnaHQuaD4KLSNp
bXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nVmll
dy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1O
UEVycm9yIE5ldHNjYXBlUGx1Z2luOjpzZXREcmF3aW5nTW9kZWwoTlBEcmF3aW5nTW9kZWwgZHJh
d2luZ01vZGVsKQotewotICAgIC8vIFRoZSBkcmF3aW5nIG1vZGVsIGNhbiBvbmx5IGJlIHNldCBm
cm9tIE5QUF9OZXcuCi0gICAgaWYgKCFtX2luTlBQTmV3KQotICAgICAgICByZXR1cm4gTlBFUlJf
R0VORVJJQ19FUlJPUjsKLQotICAgIHN3aXRjaCAoZHJhd2luZ01vZGVsKSB7Ci0gICAgICAgIGNh
c2UgTlBEcmF3aW5nTW9kZWxDb3JlR3JhcGhpY3M6Ci0gICAgICAgIGNhc2UgTlBEcmF3aW5nTW9k
ZWxDb3JlQW5pbWF0aW9uOgotICAgICAgICAgICAgbV9kcmF3aW5nTW9kZWwgPSBkcmF3aW5nTW9k
ZWw7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
cmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5QRVJSX05P
X0VSUk9SOwotfQotICAgIAotTlBFcnJvciBOZXRzY2FwZVBsdWdpbjo6c2V0RXZlbnRNb2RlbChO
UEV2ZW50TW9kZWwgZXZlbnRNb2RlbCkKLXsKLSAgICAvLyBUaGUgZXZlbnQgbW9kZWwgY2FuIG9u
bHkgYmUgc2V0IGZyb20gTlBQX05ldy4KLSAgICBpZiAoIW1faW5OUFBOZXcpCi0gICAgICAgIHJl
dHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAgc3dpdGNoIChldmVudE1vZGVsKSB7Ci0g
ICAgICAgIGNhc2UgTlBFdmVudE1vZGVsQ29jb2E6Ci0gICAgICAgICAgICBtX2V2ZW50TW9kZWwg
PSBldmVudE1vZGVsOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgIH0KLSAgICAKLSAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46OmdldFNjcmVl
blRyYW5zZm9ybShOUENvb3JkaW5hdGVTcGFjZSBzb3VyY2VTcGFjZSwgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0pCi17Ci0gICAgQVNTRVJUKHRyYW5zZm9ybS5pc0lkZW50aXR5KCkpOwotCi0g
ICAgc3dpdGNoIChzb3VyY2VTcGFjZSkgewotICAgICAgICBjYXNlIE5QQ29vcmRpbmF0ZVNwYWNl
UGx1Z2luOiB7Ci0gICAgICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKG1fd2luZG93RnJhbWVJ
blNjcmVlbkNvb3JkaW5hdGVzLngoKSwgbV93aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMu
eSgpKTsKLSAgICAgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUobV92aWV3RnJhbWVJbldpbmRv
d0Nvb3JkaW5hdGVzLngoKSwgbV92aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzLmhlaWdodCgp
ICsgbV92aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzLnkoKSk7Ci0gICAgICAgICAgICB0cmFu
c2Zvcm0uZmxpcFkoKTsKLSAgICAgICAgICAgIHRyYW5zZm9ybSAqPSBtX3BsdWdpblRvUm9vdFZp
ZXdUcmFuc2Zvcm07Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGNhc2UgTlBDb29yZGluYXRlU3BhY2VXaW5kb3c6IHsKLSAgICAgICAgICAgIHRyYW5zZm9y
bS50cmFuc2xhdGUobV93aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMueCgpLCBtX3dpbmRv
d0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcy55KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIE5QQ29vcmRpbmF0ZVNwYWNlRmxpcHBlZFdpbmRv
dzogewotICAgICAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShtX3dpbmRvd0ZyYW1lSW5TY3Jl
ZW5Db29yZGluYXRlcy54KCksIG1fd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLmhlaWdo
dCgpICsgbV93aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMueSgpKTsKLSAgICAgICAgICAg
IHRyYW5zZm9ybS5mbGlwWSgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LQotICAgICAgICBjYXNlIE5QQ29vcmRpbmF0ZVNwYWNlU2NyZWVuOiB7Ci0gICAgICAgICAgICAv
LyBOb3RoaW5nIHRvIGRvLgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBjYXNlIE5QQ29vcmRpbmF0ZVNwYWNlRmxpcHBlZFNjcmVlbjogewotICAgICAgICAg
ICAgZG91YmxlIHNjcmVlbkhlaWdodCA9IFsoTlNTY3JlZW4gKilbW05TU2NyZWVuIHNjcmVlbnNd
IG9iamVjdEF0SW5kZXg6MF0gZnJhbWVdLnNpemUuaGVpZ2h0OwotICAgICAgICAgICAgdHJhbnNm
b3JtLnRyYW5zbGF0ZSgwLCBzY3JlZW5IZWlnaHQpOwotICAgICAgICAgICAgdHJhbnNmb3JtLmZs
aXBZKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1OUEJvb2wgTmV0
c2NhcGVQbHVnaW46OmNvbnZlcnRQb2ludChkb3VibGUgc291cmNlWCwgZG91YmxlIHNvdXJjZVks
IE5QQ29vcmRpbmF0ZVNwYWNlIHNvdXJjZVNwYWNlLCBkb3VibGUmIGRlc3RYLCBkb3VibGUmIGRl
c3RZLCBOUENvb3JkaW5hdGVTcGFjZSBkZXN0U3BhY2UpCi17Ci0gICAgQWZmaW5lVHJhbnNmb3Jt
IHNvdXJjZVRyYW5zZm9ybTsKLSAgICBpZiAoIWdldFNjcmVlblRyYW5zZm9ybShzb3VyY2VTcGFj
ZSwgc291cmNlVHJhbnNmb3JtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQWZmaW5l
VHJhbnNmb3JtIGRlc3RUcmFuc2Zvcm07Ci0gICAgaWYgKCFnZXRTY3JlZW5UcmFuc2Zvcm0oZGVz
dFNwYWNlLCBkZXN0VHJhbnNmb3JtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KGF1dG8gaW52ZXJzZSA9IGRlc3RUcmFuc2Zvcm0uaW52ZXJzZSgpKSB7Ci0gICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBpbnZlcnNlLnZhbHVlKCkgKiBzb3VyY2VUcmFuc2Zvcm07
Ci0KLSAgICAgICAgRmxvYXRQb2ludCBkZXN0aW5hdGlvblBvaW50ID0gdHJhbnNmb3JtLm1hcFBv
aW50KEZsb2F0UG9pbnQoc291cmNlWCwgc291cmNlWSkpOwotCi0gICAgICAgIGRlc3RYID0gZGVz
dGluYXRpb25Qb2ludC54KCk7Ci0gICAgICAgIGRlc3RZID0gZGVzdGluYXRpb25Qb2ludC55KCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLU5Q
RXJyb3IgTmV0c2NhcGVQbHVnaW46OnBvcFVwQ29udGV4dE1lbnUoTlBNZW51KiBucE1lbnUpCi17
Ci0gICAgaWYgKCFtX2N1cnJlbnRNb3VzZUV2ZW50KQotICAgICAgICByZXR1cm4gTlBFUlJfR0VO
RVJJQ19FUlJPUjsKLQotICAgIGRvdWJsZSBzY3JlZW5YLCBzY3JlZW5ZOwotICAgIGlmICghY29u
dmVydFBvaW50KG1fY3VycmVudE1vdXNlRXZlbnQtPmRhdGEubW91c2UucGx1Z2luWCwgbV9jdXJy
ZW50TW91c2VFdmVudC0+ZGF0YS5tb3VzZS5wbHVnaW5ZLCBOUENvb3JkaW5hdGVTcGFjZVBsdWdp
biwgc2NyZWVuWCwgc2NyZWVuWSwgTlBDb29yZGluYXRlU3BhY2VTY3JlZW4pKQotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIF9OU1BvcFVwQ2FyYm9uTWVudTMoKF9fYnJpZGdl
IE5TTWVudSAqKW5wTWVudSwgbmlsLCBuaWwsIE5TTWFrZVBvaW50KHNjcmVlblgsIHNjcmVlblkp
LCAtMSwgbmlsLCAwLCBuaWwsIE5TUG9wVXBNZW51VHlwZUNvbnRleHQsIG5pbCk7Ci0gICAgcmV0
dXJuIE5QRVJSX05PX0VSUk9SOwotfQotCi1jb25zdCBNYWNoU2VuZFJpZ2h0JiBOZXRzY2FwZVBs
dWdpbjo6Y29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0KCkKLXsKLSNpZiBIQVZFKE9VVF9PRl9Q
Uk9DRVNTX0xBWUVSX0hPU1RJTkcpCi0gICAgaWYgKG1fbGF5ZXJIb3N0aW5nTW9kZSA9PSBMYXll
ckhvc3RpbmdNb2RlOjpPdXRPZlByb2Nlc3MpIHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPE1hY2hTZW5kUmlnaHQ+IHNlbmRSaWdodDsKLQotICAgICAgICByZXR1cm4gc2VuZFJpZ2h0
OwotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuIGNvbnRyb2xsZXIoKS0+Y29tcG9zaXRpbmdS
ZW5kZXJTZXJ2ZXJQb3J0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIE5TRXhjZXB0aW9uX3JlbGVhc2Uo
aWQsIFNFTCkKLXsKLSAgICAvLyBEbyBub3RoaW5nLgotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2lu
OjpwbGF0Zm9ybVByZUluaXRpYWxpemUoKQotewotICAgIGlmIChtX3BsdWdpbk1vZHVsZS0+cGx1
Z2luUXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtzOjpMZWFrQWxsVGhyb3duTlNFeGNlcHRp
b25zKSkgewotICAgICAgICAvLyBQYXRjaCAtW05TRXhjZXB0aW9uIHJlbGVhc2VdIHRvIG5vdCBy
ZWxlYXNlIHRoZSBvYmplY3QuCi0gICAgICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZTsK
LSAgICAgICAgZGlzcGF0Y2hfb25jZSgmb25jZSwgXnsKLSAgICAgICAgICAgIGF1dG8gZXhjZXB0
aW9uQ2xhc3MgPSBbTlNFeGNlcHRpb24gY2xhc3NdOwotICAgICAgICAgICAgYXV0byByZWxlYXNl
U2VsZWN0b3IgPSBzZWxfcmVnaXN0ZXJOYW1lKCJyZWxlYXNlIik7Ci0gICAgICAgICAgICBhdXRv
IGV4Y2VwdGlvblJlbGVhc2VNZXRob2QgPSBjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChleGNlcHRp
b25DbGFzcywgcmVsZWFzZVNlbGVjdG9yKTsKLSAgICAgICAgICAgIGNsYXNzX3JlcGxhY2VNZXRo
b2QoZXhjZXB0aW9uQ2xhc3MsIHJlbGVhc2VTZWxlY3RvciwgcmVpbnRlcnByZXRfY2FzdDxJTVA+
KE5TRXhjZXB0aW9uX3JlbGVhc2UpLCBtZXRob2RfZ2V0VHlwZUVuY29kaW5nKGV4Y2VwdGlvblJl
bGVhc2VNZXRob2QpKTsKLSAgICAgICAgfSk7Ci0gICAgfQotfQotCi1ib29sIE5ldHNjYXBlUGx1
Z2luOjpwbGF0Zm9ybVBvc3RJbml0aWFsaXplKCkKLXsKLSAgICBpZiAobV9kcmF3aW5nTW9kZWwg
PT0gc3RhdGljX2Nhc3Q8TlBEcmF3aW5nTW9kZWw+KC0xKSkKLSAgICAgICAgbV9kcmF3aW5nTW9k
ZWwgPSBOUERyYXdpbmdNb2RlbENvcmVHcmFwaGljczsKLSAgICAKLSAgICBpZiAobV9ldmVudE1v
ZGVsID09IHN0YXRpY19jYXN0PE5QRXZlbnRNb2RlbD4oLTEpKQotICAgICAgICBtX2V2ZW50TW9k
ZWwgPSBOUEV2ZW50TW9kZWxDb2NvYTsKLQotICAgIHVwZGF0ZVBsdWdpbkxheWVyKCk7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6cGxhdGZvcm1EZXN0cm95
KCkKLXsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6cGxhdGZvcm1JbnZhbGlkYXRlKGNvbnN0
IEludFJlY3QmKQotewotICAgIC8vIE5QTl9JbnZhbGlkYXRlUmVjdCBpcyBqdXN0IGEgbm8tb3Ag
aW4gdGhlIENvcmUgQW5pbWF0aW9uIGRyYXdpbmcgbW9kZWwuCi0gICAgaWYgKG1fZHJhd2luZ01v
ZGVsID09IE5QRHJhd2luZ01vZGVsQ29yZUFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OnBsYXRmb3Jt
R2VvbWV0cnlEaWRDaGFuZ2UoKQotewotICAgIHN3aXRjaCAobV9ldmVudE1vZGVsKSB7Ci0gICAg
Y2FzZSBOUEV2ZW50TW9kZWxDb2NvYToKLSAgICAgICAgLy8gTm90aGluZyB0byBkbwotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OnBsYXRmb3JtVmlzaWJpbGl0eURpZENoYW5n
ZSgpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLiA8aHR0cDovL3dlYmtpdC5vcmcv
Yi80NDM2OD4uCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotc3RhdGljIGlubGluZSBOUENv
Y29hRXZlbnQgaW5pdGlhbGl6ZUV2ZW50KE5QQ29jb2FFdmVudFR5cGUgdHlwZSkKLXsKLSAgICBO
UENvY29hRXZlbnQgZXZlbnQ7Ci0gICAgCi0gICAgZXZlbnQudHlwZSA9IHR5cGU7Ci0gICAgZXZl
bnQudmVyc2lvbiA9IDA7Ci0gICAgCi0gICAgcmV0dXJuIGV2ZW50OwotfQotCi12b2lkIE5ldHNj
YXBlUGx1Z2luOjpwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
SW50UmVjdCYgZGlydHlSZWN0LCBib29sIGlzU25hcHNob3QpCi17Ci0gICAgQ0dDb250ZXh0UmVm
IHBsYXRmb3JtQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBzd2l0
Y2ggKG1fZXZlbnRNb2RlbCkgewotICAgICAgICBjYXNlIE5QRXZlbnRNb2RlbENvY29hOiB7Ci0g
ICAgICAgICAgICAvLyBEb24ndCBzZW5kIGRyYXcgZXZlbnRzIHdoZW4gd2UncmUgdXNpbmcgdGhl
IENvcmUgQW5pbWF0aW9uIGRyYXdpbmcgbW9kZWwuCi0gICAgICAgICAgICBpZiAoIWlzU25hcHNo
b3QgJiYgbV9kcmF3aW5nTW9kZWwgPT0gTlBEcmF3aW5nTW9kZWxDb3JlQW5pbWF0aW9uKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgTlBDb2NvYUV2ZW50IGV2ZW50ID0g
aW5pdGlhbGl6ZUV2ZW50KE5QQ29jb2FFdmVudERyYXdSZWN0KTsKLQotICAgICAgICAgICAgZXZl
bnQuZGF0YS5kcmF3LmNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQ7Ci0gICAgICAgICAgICBldmVu
dC5kYXRhLmRyYXcueCA9IGRpcnR5UmVjdC54KCk7Ci0gICAgICAgICAgICBldmVudC5kYXRhLmRy
YXcueSA9IGRpcnR5UmVjdC55KCk7Ci0gICAgICAgICAgICBldmVudC5kYXRhLmRyYXcud2lkdGgg
PSBkaXJ0eVJlY3Qud2lkdGgoKTsKLSAgICAgICAgICAgIGV2ZW50LmRhdGEuZHJhdy5oZWlnaHQg
PSBkaXJ0eVJlY3QuaGVpZ2h0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE5QUF9IYW5k
bGVFdmVudCgmZXZlbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQot
Ci1zdGF0aWMgdWludDMyX3QgbW9kaWZpZXJGbGFncyhjb25zdCBXZWJFdmVudCYgZXZlbnQpCi17
Ci0gICAgdWludDMyX3QgbW9kaWZpZXJzID0gMDsKLQotICAgIGlmIChldmVudC5zaGlmdEtleSgp
KQotICAgICAgICBtb2RpZmllcnMgfD0gTlNFdmVudE1vZGlmaWVyRmxhZ1NoaWZ0OwotICAgIGlm
IChldmVudC5jb250cm9sS2V5KCkpCi0gICAgICAgIG1vZGlmaWVycyB8PSBOU0V2ZW50TW9kaWZp
ZXJGbGFnQ29udHJvbDsKLSAgICBpZiAoZXZlbnQuYWx0S2V5KCkpCi0gICAgICAgIG1vZGlmaWVy
cyB8PSBOU0V2ZW50TW9kaWZpZXJGbGFnT3B0aW9uOwotICAgIGlmIChldmVudC5tZXRhS2V5KCkp
Ci0gICAgICAgIG1vZGlmaWVycyB8PSBOU0V2ZW50TW9kaWZpZXJGbGFnQ29tbWFuZDsKLSAgICAK
LSAgICByZXR1cm4gbW9kaWZpZXJzOwotfQotICAgIAotc3RhdGljIGludDMyX3QgYnV0dG9uTnVt
YmVyKFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbiBidXR0b24pCi17Ci0gICAgc3dpdGNoIChidXR0b24p
IHsKLSAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uOgotICAgIGNhc2UgV2ViTW91c2VF
dmVudDo6TGVmdEJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBXZWJNb3VzZUV2
ZW50OjpSaWdodEJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY2FzZSBXZWJNb3VzZUV2
ZW50OjpNaWRkbGVCdXR0b246Ci0gICAgICAgIHJldHVybiAyOwotICAgIH0KLQotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAtMTsKLX0KLQotc3RhdGljIHZvaWQgZmlsbElu
Q29jb2FFdmVudEZyb21Nb3VzZUV2ZW50KE5QQ29jb2FFdmVudCYgZXZlbnQsIGNvbnN0IFdlYk1v
dXNlRXZlbnQmIG1vdXNlRXZlbnQsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBldmVudFBvc2l0
aW9uSW5QbHVnaW5Db29yZGluYXRlcykKLXsKLSAgICBldmVudC5kYXRhLm1vdXNlLm1vZGlmaWVy
RmxhZ3MgPSBtb2RpZmllckZsYWdzKG1vdXNlRXZlbnQpOwotICAgIGV2ZW50LmRhdGEubW91c2Uu
cGx1Z2luWCA9IGV2ZW50UG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzLngoKTsKLSAgICBldmVu
dC5kYXRhLm1vdXNlLnBsdWdpblkgPSBldmVudFBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRlcy55
KCk7Ci0gICAgZXZlbnQuZGF0YS5tb3VzZS5idXR0b25OdW1iZXIgPSBidXR0b25OdW1iZXIobW91
c2VFdmVudC5idXR0b24oKSk7Ci0gICAgZXZlbnQuZGF0YS5tb3VzZS5jbGlja0NvdW50ID0gbW91
c2VFdmVudC5jbGlja0NvdW50KCk7Ci0gICAgZXZlbnQuZGF0YS5tb3VzZS5kZWx0YVggPSBtb3Vz
ZUV2ZW50LmRlbHRhWCgpOwotICAgIGV2ZW50LmRhdGEubW91c2UuZGVsdGFZID0gbW91c2VFdmVu
dC5kZWx0YVkoKTsKLSAgICBldmVudC5kYXRhLm1vdXNlLmRlbHRhWiA9IG1vdXNlRXZlbnQuZGVs
dGFaKCk7Ci19Ci0gICAgCi1zdGF0aWMgTlBDb2NvYUV2ZW50IGluaXRpYWxpemVNb3VzZUV2ZW50
KGNvbnN0IFdlYk1vdXNlRXZlbnQmIG1vdXNlRXZlbnQsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JiBldmVudFBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRlcykKLXsKLSAgICBOUENvY29hRXZlbnRU
eXBlIGV2ZW50VHlwZTsKLQotICAgIHN3aXRjaCAobW91c2VFdmVudC50eXBlKCkpIHsKLSAgICBj
YXNlIFdlYkV2ZW50OjpNb3VzZURvd246Ci0gICAgICAgIGV2ZW50VHlwZSA9IE5QQ29jb2FFdmVu
dE1vdXNlRG93bjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJFdmVudDo6TW91c2VVcDoK
LSAgICAgICAgZXZlbnRUeXBlID0gTlBDb2NvYUV2ZW50TW91c2VVcDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBXZWJFdmVudDo6TW91c2VNb3ZlOgotICAgICAgICBpZiAobW91c2VFdmVudC5i
dXR0b24oKSA9PSBXZWJNb3VzZUV2ZW50OjpOb0J1dHRvbikKLSAgICAgICAgICAgIGV2ZW50VHlw
ZSA9IE5QQ29jb2FFdmVudE1vdXNlTW92ZWQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV2
ZW50VHlwZSA9IE5QQ29jb2FFdmVudE1vdXNlRHJhZ2dlZDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBO
UENvY29hRXZlbnQoKTsKLSAgICB9Ci0KLSAgICBOUENvY29hRXZlbnQgZXZlbnQgPSBpbml0aWFs
aXplRXZlbnQoZXZlbnRUeXBlKTsKLSAgICBmaWxsSW5Db2NvYUV2ZW50RnJvbU1vdXNlRXZlbnQo
ZXZlbnQsIG1vdXNlRXZlbnQsIGV2ZW50UG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzKTsKLSAg
ICByZXR1cm4gZXZlbnQ7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46OnBsYXRmb3JtSGFuZGxl
TW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQotewotICAgIEludFBv
aW50IGV2ZW50UG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzOwotICAgIGlmICghY29udmVydEZy
b21Sb290Vmlldyhtb3VzZUV2ZW50LnBvc2l0aW9uKCksIGV2ZW50UG9zaXRpb25JblBsdWdpbkNv
b3JkaW5hdGVzKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBzd2l0Y2ggKG1fZXZlbnRN
b2RlbCkgewotICAgICAgICBjYXNlIE5QRXZlbnRNb2RlbENvY29hOiB7Ci0gICAgICAgICAgICBO
UENvY29hRXZlbnQgZXZlbnQgPSBpbml0aWFsaXplTW91c2VFdmVudChtb3VzZUV2ZW50LCBldmVu
dFBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRlcyk7Ci0KLSAgICAgICAgICAgIE5QQ29jb2FFdmVu
dCogcHJldmlvdXNNb3VzZUV2ZW50ID0gbV9jdXJyZW50TW91c2VFdmVudDsKLSAgICAgICAgICAg
IG1fY3VycmVudE1vdXNlRXZlbnQgPSAmZXZlbnQ7Ci0KLSAgICAgICAgICAgIC8vIFByb3RlY3Qg
YWdhaW5zdCBOUFBfSGFuZGxlRXZlbnQgY2F1c2luZyB0aGUgcGx1Zy1pbiB0byBiZSBkZXN0cm95
ZWQsIHNpbmNlIHdlCi0gICAgICAgICAgICAvLyBhY2Nlc3MgbV9jdXJyZW50TW91c2VFdmVudCBh
ZnRlcndhcmRzLgotICAgICAgICAgICAgUmVmPE5ldHNjYXBlUGx1Z2luPiBwcm90ZWN0KCp0aGlz
KTsKLQotICAgICAgICAgICAgTlBQX0hhbmRsZUV2ZW50KCZldmVudCk7Ci0KLSAgICAgICAgICAg
IG1fY3VycmVudE1vdXNlRXZlbnQgPSBwcmV2aW91c01vdXNlRXZlbnQ7Ci0KLSAgICAgICAgICAg
IC8vIFNvbWUgcGx1Zy1pbnMgcmV0dXJuIGZhbHNlIGV2ZW4gaWYgdGhlIG1vdXNlIGV2ZW50IGhh
cyBiZWVuIGhhbmRsZWQuCi0gICAgICAgICAgICAvLyBUaGlzIGxlYWRzIHRvIGJ1Z3Mgc3VjaCBh
cyA8cmRhcjovL3Byb2JsZW0vOTE2NzYxMT4uIFdvcmsgYXJvdW5kIHRoaXMKLSAgICAgICAgICAg
IC8vIGJ5IGFsd2F5cyByZXR1cm5pbmcgdHJ1ZS4KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBOZXRzY2FwZVBs
dWdpbjo6cGxhdGZvcm1IYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmIHdoZWVs
RXZlbnQpCi17Ci0gICAgc3dpdGNoIChtX2V2ZW50TW9kZWwpIHsKLSAgICAgICAgY2FzZSBOUEV2
ZW50TW9kZWxDb2NvYTogewotICAgICAgICAgICAgSW50UG9pbnQgZXZlbnRQb3NpdGlvbkluUGx1
Z2luQ29vcmRpbmF0ZXM7Ci0gICAgICAgICAgICBpZiAoIWNvbnZlcnRGcm9tUm9vdFZpZXcod2hl
ZWxFdmVudC5wb3NpdGlvbigpLCBldmVudFBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRlcykpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgIE5QQ29jb2FFdmVudCBl
dmVudCA9IGluaXRpYWxpemVFdmVudChOUENvY29hRXZlbnRTY3JvbGxXaGVlbCk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGV2ZW50LmRhdGEubW91c2UubW9kaWZpZXJGbGFncyA9IG1vZGlm
aWVyRmxhZ3Mod2hlZWxFdmVudCk7Ci0gICAgICAgICAgICBldmVudC5kYXRhLm1vdXNlLnBsdWdp
blggPSBldmVudFBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRlcy54KCk7Ci0gICAgICAgICAgICBl
dmVudC5kYXRhLm1vdXNlLnBsdWdpblkgPSBldmVudFBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRl
cy55KCk7Ci0gICAgICAgICAgICBldmVudC5kYXRhLm1vdXNlLmJ1dHRvbk51bWJlciA9IDA7Ci0g
ICAgICAgICAgICBldmVudC5kYXRhLm1vdXNlLmNsaWNrQ291bnQgPSAwOwotICAgICAgICAgICAg
ZXZlbnQuZGF0YS5tb3VzZS5kZWx0YVggPSB3aGVlbEV2ZW50LmRlbHRhKCkud2lkdGgoKTsKLSAg
ICAgICAgICAgIGV2ZW50LmRhdGEubW91c2UuZGVsdGFZID0gd2hlZWxFdmVudC5kZWx0YSgpLmhl
aWdodCgpOwotICAgICAgICAgICAgZXZlbnQuZGF0YS5tb3VzZS5kZWx0YVogPSAwOwotICAgICAg
ICAgICAgcmV0dXJuIE5QUF9IYW5kbGVFdmVudCgmZXZlbnQpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6cGxhdGZvcm1IYW5k
bGVNb3VzZUVudGVyRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCkKLXsKLSAg
ICBzd2l0Y2ggKG1fZXZlbnRNb2RlbCkgewotICAgICAgICBjYXNlIE5QRXZlbnRNb2RlbENvY29h
OiB7Ci0gICAgICAgICAgICBOUENvY29hRXZlbnQgZXZlbnQgPSBpbml0aWFsaXplRXZlbnQoTlBD
b2NvYUV2ZW50TW91c2VFbnRlcmVkKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZmlsbElu
Q29jb2FFdmVudEZyb21Nb3VzZUV2ZW50KGV2ZW50LCBtb3VzZUV2ZW50LCBJbnRQb2ludCgpKTsK
LSAgICAgICAgICAgIHJldHVybiBOUFBfSGFuZGxlRXZlbnQoJmV2ZW50KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46OnBsYXRm
b3JtSGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIG1vdXNlRXZlbnQp
Ci17Ci0gICAgc3dpdGNoIChtX2V2ZW50TW9kZWwpIHsKLSAgICAgICAgY2FzZSBOUEV2ZW50TW9k
ZWxDb2NvYTogewotICAgICAgICAgICAgTlBDb2NvYUV2ZW50IGV2ZW50ID0gaW5pdGlhbGl6ZUV2
ZW50KE5QQ29jb2FFdmVudE1vdXNlRXhpdGVkKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
ZmlsbEluQ29jb2FFdmVudEZyb21Nb3VzZUV2ZW50KGV2ZW50LCBtb3VzZUV2ZW50LCBJbnRQb2lu
dCgpKTsKLSAgICAgICAgICAgIHJldHVybiBOUFBfSGFuZGxlRXZlbnQoJmV2ZW50KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBtb2Rp
ZmllckZsYWdzKGNvbnN0IFdlYktleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQpCi17Ci0gICAg
dW5zaWduZWQgbW9kaWZpZXJGbGFncyA9IDA7Ci0KLSAgICBpZiAoa2V5Ym9hcmRFdmVudC5jYXBz
TG9ja0tleSgpKQotICAgICAgICBtb2RpZmllckZsYWdzIHw9IE5TRXZlbnRNb2RpZmllckZsYWdD
YXBzTG9jazsKLSAgICBpZiAoa2V5Ym9hcmRFdmVudC5zaGlmdEtleSgpKQotICAgICAgICBtb2Rp
ZmllckZsYWdzIHw9IE5TRXZlbnRNb2RpZmllckZsYWdTaGlmdDsKLSAgICBpZiAoa2V5Ym9hcmRF
dmVudC5jb250cm9sS2V5KCkpCi0gICAgICAgIG1vZGlmaWVyRmxhZ3MgfD0gTlNFdmVudE1vZGlm
aWVyRmxhZ0NvbnRyb2w7Ci0gICAgaWYgKGtleWJvYXJkRXZlbnQuYWx0S2V5KCkpCi0gICAgICAg
IG1vZGlmaWVyRmxhZ3MgfD0gTlNFdmVudE1vZGlmaWVyRmxhZ09wdGlvbjsKLSAgICBpZiAoa2V5
Ym9hcmRFdmVudC5tZXRhS2V5KCkpCi0gICAgICAgIG1vZGlmaWVyRmxhZ3MgfD0gTlNFdmVudE1v
ZGlmaWVyRmxhZ0NvbW1hbmQ7Ci0KLSAgICByZXR1cm4gbW9kaWZpZXJGbGFnczsKLX0KLQotc3Rh
dGljIGJvb2wgaXNGbGFnc0NoYW5nZWRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBrZXli
b2FyZEV2ZW50KQotewotICAgIHN3aXRjaCAoa2V5Ym9hcmRFdmVudC5uYXRpdmVWaXJ0dWFsS2V5
Q29kZSgpKSB7Ci0gICAgY2FzZSA1NDogLy8gUmlnaHQgQ29tbWFuZAotICAgIGNhc2UgNTU6IC8v
IExlZnQgQ29tbWFuZAotCi0gICAgY2FzZSA1NzogLy8gQ2Fwc2xvY2sKLQotICAgIGNhc2UgNTY6
IC8vIExlZnQgU2hpZnQKLSAgICBjYXNlIDYwOiAvLyBSaWdodCBTaGlmdAotCi0gICAgY2FzZSA1
ODogLy8gTGVmdCBBbHQKLSAgICBjYXNlIDYxOiAvLyBSaWdodCBBbHQKLSAgICAgICAgICAgIAot
ICAgIGNhc2UgNTk6IC8vIExlZnQgQ3RybAotICAgIGNhc2UgNjI6IC8vIFJpZ2h0IEN0cmwKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0
aWMgTlBOU1N0cmluZyAqY29udmVydFRvTlBOTlN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykK
LXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlBOU1N0cmluZyo+KHN0YXRpY19jYXN0PE5TU3Ry
aW5nKj4oc3RyaW5nKSk7Ci19Ci0KLXN0YXRpYyBOUENvY29hRXZlbnQgaW5pdGlhbGl6ZUtleWJv
YXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCkKLXsKLSAgICBO
UENvY29hRXZlbnRUeXBlIGV2ZW50VHlwZTsKLQotICAgIGlmIChpc0ZsYWdzQ2hhbmdlZEV2ZW50
KGtleWJvYXJkRXZlbnQpKQotICAgICAgICBldmVudFR5cGUgPSBOUENvY29hRXZlbnRGbGFnc0No
YW5nZWQ7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN3aXRjaCAoa2V5Ym9hcmRFdmVudC50eXBlKCkp
IHsKLSAgICAgICAgICAgIGNhc2UgV2ViRXZlbnQ6OktleURvd246Ci0gICAgICAgICAgICAgICAg
ZXZlbnRUeXBlID0gTlBDb2NvYUV2ZW50S2V5RG93bjsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgV2ViRXZlbnQ6OktleVVwOgotICAgICAgICAgICAgICAgIGV2ZW50
VHlwZSA9IE5QQ29jb2FFdmVudEtleVVwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gTlBDb2NvYUV2ZW50KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBOUENvY29hRXZlbnQgZXZlbnQgPSBpbml0aWFsaXplRXZlbnQoZXZlbnRUeXBlKTsKLSAg
ICBldmVudC5kYXRhLmtleS5tb2RpZmllckZsYWdzID0gbW9kaWZpZXJGbGFncyhrZXlib2FyZEV2
ZW50KTsKLSAgICBldmVudC5kYXRhLmtleS5jaGFyYWN0ZXJzID0gY29udmVydFRvTlBOTlN0cmlu
ZyhrZXlib2FyZEV2ZW50LnRleHQoKSk7Ci0gICAgZXZlbnQuZGF0YS5rZXkuY2hhcmFjdGVyc0ln
bm9yaW5nTW9kaWZpZXJzID0gY29udmVydFRvTlBOTlN0cmluZyhrZXlib2FyZEV2ZW50LnVubW9k
aWZpZWRUZXh0KCkpOwotICAgIGV2ZW50LmRhdGEua2V5LmlzQVJlcGVhdCA9IGtleWJvYXJkRXZl
bnQuaXNBdXRvUmVwZWF0KCk7Ci0gICAgZXZlbnQuZGF0YS5rZXkua2V5Q29kZSA9IGtleWJvYXJk
RXZlbnQubmF0aXZlVmlydHVhbEtleUNvZGUoKTsKLQotICAgIHJldHVybiBldmVudDsKLX0KLQot
Ym9vbCBOZXRzY2FwZVBsdWdpbjo6cGxhdGZvcm1IYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdl
YktleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQpCi17Ci0gICAgYm9vbCBoYW5kbGVkID0gZmFs
c2U7Ci0KLSAgICBzd2l0Y2ggKG1fZXZlbnRNb2RlbCkgewotICAgIGNhc2UgTlBFdmVudE1vZGVs
Q29jb2E6IHsKLSAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQudHlwZSgpID09IFdlYkV2ZW50OjpL
ZXlEb3duKSB7Ci0gICAgICAgICAgICBtX2hhc0hhbmRsZWRBS2V5RG93bkV2ZW50ID0gdHJ1ZTsK
LQotICAgICAgICAgICAgaWYgKCFtX3BsdWdpbldhbnRzTGVnYWN5Q29jb2FUZXh0SW5wdXQgJiYg
bV9pc0NvbXBsZXhUZXh0SW5wdXRFbmFibGVkICYmICFrZXlib2FyZEV2ZW50LmlzQXV0b1JlcGVh
dCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2hlbiBjb21wbGV4IHRleHQgaXMgZW5hYmxlZCBp
biB0aGUgbmV3IG1vZGVsLCB0aGUgcGx1Zy1pbiBzaG91bGQgbmV2ZXIKLSAgICAgICAgICAgICAg
ICAvLyByZWNlaXZlIGFueSBrZXkgZG93biBvciBrZXkgdXAgZXZlbnRzIHVudGlsIHRoZSBjb21w
b3NpdGlvbiBpcyBjb21wbGV0ZS4KLSAgICAgICAgICAgICAgICBtX2lnbm9yZU5leHRLZXlVcEV2
ZW50Q291bnRlcisrOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgaWYgKGtleWJvYXJkRXZlbnQudHlwZSgpID09IFdlYkV2ZW50OjpL
ZXlVcCAmJiBtX2lnbm9yZU5leHRLZXlVcEV2ZW50Q291bnRlcikgewotICAgICAgICAgICAgbV9p
Z25vcmVOZXh0S2V5VXBFdmVudENvdW50ZXItLTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgTlBDb2NvYUV2ZW50IGV2ZW50ID0gaW5pdGlhbGl6ZUtleWJv
YXJkRXZlbnQoa2V5Ym9hcmRFdmVudCk7Ci0gICAgICAgIGludDE2X3QgcmV0dXJuVmFsdWUgPSBO
UFBfSGFuZGxlRXZlbnQoJmV2ZW50KTsKLSAgICAgICAgaGFuZGxlZCA9IHJldHVyblZhbHVlOwot
Ci0gICAgICAgIGlmICghbV9wbHVnaW5XYW50c0xlZ2FjeUNvY29hVGV4dElucHV0KSB7Ci0gICAg
ICAgICAgICBpZiAoZXZlbnQudHlwZSA9PSBOUENvY29hRXZlbnRLZXlEb3duICYmIHJldHVyblZh
bHVlID09IGtOUEV2ZW50U3RhcnRJTUUpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWtleWJvYXJk
RXZlbnQuaXNBdXRvUmVwZWF0KCkpCi0gICAgICAgICAgICAgICAgICAgIG1faWdub3JlTmV4dEtl
eVVwRXZlbnRDb3VudGVyKys7Ci0gICAgICAgICAgICAgICAgc2V0Q29tcGxleFRleHRJbnB1dEVu
YWJsZWQodHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICB9Ci0KLSAgICAvLyBNb3N0IHBsdWctaW5zIHNpbXBseSByZXR1cm4gdHJ1ZSBmb3IgYWxsIGtl
eWJvYXJkIGV2ZW50cywgZXZlbiB0aG9zZSB0aGF0IGFyZW4ndCBoYW5kbGVkLgotICAgIC8vIFRo
aXMgbGVhZHMgdG8gYnVncyBzdWNoIGFzIDxyZGFyOi8vcHJvYmxlbS84NzQwOTI2Pi4gV2Ugd29y
ayBhcm91bmQgdGhpcyBieSByZXR1cm5pbmcgZmFsc2UKLSAgICAvLyBpZiB0aGUga2V5Ym9hcmQg
ZXZlbnQgaGFzIHRoZSBjb21tYW5kIG1vZGlmaWVyIHByZXNzZWQuCi0gICAgLy8gSG93ZXZlciwg
Zm9yIGNvbW1hbmQtQSAodGhlIHNob3J0Y3VydCBmb3IgJ1NlbGVjdCBBbGwnIHdlIHdpbGwgYWx3
YXlzIHJldHVybiB0cnVlLCBzaW5jZSB3ZSBkb24ndAotICAgIC8vIHdhbnQgdGhlIGVudGlyZSBw
YWdlIHRvIGJlIHNlbGVjdGVkIGlmIHRoZSBmb2N1cyBpcyBpbiBhIHBsdWctaW4gdGV4dCBmaWVs
ZCAoc2VlIDxyZGFyOi8vcHJvYmxlbS85MzA5OTAzPikuCi0gICAgaWYgKGtleWJvYXJkRXZlbnQu
bWV0YUtleSgpKSB7Ci0gICAgICAgIGlmIChrZXlib2FyZEV2ZW50LnRleHQoKSA9PSAiYSIpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGhhbmRsZWQ7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OnBsYXRmb3Jt
U2V0Rm9jdXMoYm9vbCBoYXNGb2N1cykKLXsKLSAgICBtX3BsdWdpbkhhc0ZvY3VzID0gaGFzRm9j
dXM7Ci0gICAgcGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZCgpOwotCi0gICAgc3dpdGNo
IChtX2V2ZW50TW9kZWwpIHsKLSAgICAgICAgY2FzZSBOUEV2ZW50TW9kZWxDb2NvYTogewotICAg
ICAgICAgICAgTlBDb2NvYUV2ZW50IGV2ZW50ID0gaW5pdGlhbGl6ZUV2ZW50KE5QQ29jb2FFdmVu
dEZvY3VzQ2hhbmdlZCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGV2ZW50LmRhdGEuZm9j
dXMuaGFzRm9jdXMgPSBoYXNGb2N1czsKLSAgICAgICAgICAgIE5QUF9IYW5kbGVFdmVudCgmZXZl
bnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi1ib29sIE5ldHNj
YXBlUGx1Z2luOjp3YW50c1BsdWdpblJlbGF0aXZlTlBXaW5kb3dDb29yZGluYXRlcygpCi17Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OndpbmRvd0ZvY3VzQ2hh
bmdlZChib29sIGhhc0ZvY3VzKQotewotICAgIG1fd2luZG93SGFzRm9jdXMgPSBoYXNGb2N1czsK
LSAgICBwbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkKCk7Ci0KLSAgICBzd2l0Y2ggKG1f
ZXZlbnRNb2RlbCkgewotICAgICAgICBjYXNlIE5QRXZlbnRNb2RlbENvY29hOiB7Ci0gICAgICAg
ICAgICBOUENvY29hRXZlbnQgZXZlbnQgPSBpbml0aWFsaXplRXZlbnQoTlBDb2NvYUV2ZW50V2lu
ZG93Rm9jdXNDaGFuZ2VkKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZXZlbnQuZGF0YS5m
b2N1cy5oYXNGb2N1cyA9IGhhc0ZvY3VzOwotICAgICAgICAgICAgTlBQX0hhbmRsZUV2ZW50KCZl
dmVudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgTmV0
c2NhcGVQbHVnaW46OndpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IEludFJlY3QmIHdp
bmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgSW50UmVjdCYgdmlld0ZyYW1lSW5X
aW5kb3dDb29yZGluYXRlcykKLXsKLSAgICBtX3dpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRl
cyA9IHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlczsKLSAgICBtX3ZpZXdGcmFtZUluV2lu
ZG93Q29vcmRpbmF0ZXMgPSB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzOwotCi0gICAgc3dp
dGNoIChtX2V2ZW50TW9kZWwpIHsKLSAgICAgICAgY2FzZSBOUEV2ZW50TW9kZWxDb2NvYToKLSAg
ICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQot
ICAgIAotdm9pZCBOZXRzY2FwZVBsdWdpbjo6d2luZG93VmlzaWJpbGl0eUNoYW5nZWQoYm9vbCB2
aXNpYmxlKQotewotICAgIGlmICh2aXNpYmxlKQotICAgICAgICBjYWxsU2V0V2luZG93KCk7Ci0g
ICAgZWxzZQotICAgICAgICBjYWxsU2V0V2luZG93SW52aXNpYmxlKCk7Ci19Ci0KLXVpbnQ2NF90
IE5ldHNjYXBlUGx1Z2luOjpwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcigpIGNvbnN0
Ci17Ci0gICAgLy8gSnVzdCByZXR1cm4gYSBkdW1teSB2YWx1ZTsgdGhpcyBpcyBvbmx5IGNhbGxl
ZCBmb3IgaW4tcHJvY2VzcyBwbHVnLWlucywgd2hpY2ggd2UgZG9uJ3Qgc3VwcG9ydCBvbiBNYWMu
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ2NF90PihyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4odGhpcykpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpzZW5kQ29tcGxleFRleHRJ
bnB1dChjb25zdCBTdHJpbmcmIHRleHRJbnB1dCkKLXsKLSAgICBpZiAoIW1fcGx1Z2luV2FudHNM
ZWdhY3lDb2NvYVRleHRJbnB1dCkgewotICAgICAgICAvLyBJbiB0aGUgdXBkYXRlZCBDb2NvYSB0
ZXh0IGlucHV0IHNwZWMsIHRleHQgaW5wdXQgaXMgZGlzYWJsZWQgd2hlbiB0aGUgdGV4dCBpbnB1
dCBzdHJpbmcgaGFzIGJlZW4gc2VudAotICAgICAgICAvLyBieSB0aGUgVUkgcHJvY2Vzcy4gU2lu
Y2UgdGhlIFVJIHByb2Nlc3MgaGFzIGFsc28gdXBkYXRlZCBpdHMgc3RhdGUsIHdlIGNhbiBqdXN0
IHJlc2V0IHRoZSB2YXJpYWJsZSBoZXJlCi0gICAgICAgIC8vIGluc3RlYWQgb2YgY2FsbGluZyBz
ZXRDb21wbGV4VGV4dElucHV0RW5hYmxlZC4KLSAgICAgICAgbV9pc0NvbXBsZXhUZXh0SW5wdXRF
bmFibGVkID0gZmFsc2U7Ci0KLSAgICAgICAgLy8gVGhlIFVJIHByb2Nlc3MgY2FuIGFsc28gZGlz
YWJsZSB0ZXh0IGlucHV0IGJ5IHNlbmRpbmcgYW4gZW1wdHkgaW5wdXQgc3RyaW5nLiBJbiB0aGlz
IGNhc2UsIHdlIGRvbid0IHdhbnQKLSAgICAgICAgLy8gdG8gc2VuZCBpdCB0byB0aGUgcGx1Zy1p
bi4KLSAgICAgICAgaWYgKHRleHRJbnB1dC5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBzd2l0Y2ggKG1fZXZlbnRNb2RlbCkgewotICAgIGNhc2UgTlBFdmVudE1v
ZGVsQ29jb2E6IHsKLSAgICAgICAgTlBDb2NvYUV2ZW50IGV2ZW50ID0gaW5pdGlhbGl6ZUV2ZW50
KE5QQ29jb2FFdmVudFRleHRJbnB1dCk7Ci0gICAgICAgIGV2ZW50LmRhdGEudGV4dC50ZXh0ID0g
Y29udmVydFRvTlBOTlN0cmluZyh0ZXh0SW5wdXQpOwotICAgICAgICBOUFBfSGFuZGxlRXZlbnQo
JmV2ZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6c2V0
TGF5ZXJIb3N0aW5nTW9kZShMYXllckhvc3RpbmdNb2RlIGxheWVySG9zdGluZ01vZGUpCi17Ci0g
ICAgbV9sYXllckhvc3RpbmdNb2RlID0gbGF5ZXJIb3N0aW5nTW9kZTsKLQotICAgIC8vIFRlbGwg
dGhlIHBsdWctaW4gYWJvdXQgdGhlIG5ldyBjb21wb3NpdGluZyByZW5kZXIgc2VydmVyIHBvcnQu
IElmIGl0IHJldHVybnMgT0sgd2UnbGwgYXNrIGl0IGFnYWluIGZvciBhIG5ldyBsYXllci4KLSAg
ICBtYWNoX3BvcnRfdCBwb3J0ID0gTmV0c2NhcGVQbHVnaW46OmNvbXBvc2l0aW5nUmVuZGVyU2Vy
dmVyUG9ydCgpLnNlbmRSaWdodCgpOwotICAgIGlmIChOUFBfU2V0VmFsdWUoc3RhdGljX2Nhc3Q8
TlBOVmFyaWFibGU+KFdLTlZDQUxheWVyUmVuZGVyU2VydmVyUG9ydCksICZwb3J0KSAhPSBOUEVS
Ul9OT19FUlJPUikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wbHVnaW5MYXllciA9IG51bGxw
dHI7Ci0gICAgdXBkYXRlUGx1Z2luTGF5ZXIoKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6
cGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZCgpCi17Ci0gICAgYm9vbCBwbHVnaW5IYXNG
b2N1c0FuZFdpbmRvd0hhc0ZvY3VzID0gbV9wbHVnaW5IYXNGb2N1cyAmJiBtX3dpbmRvd0hhc0Zv
Y3VzOwotCi0gICAgY29udHJvbGxlcigpLT5wbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2Vk
KHBsdWdpbkhhc0ZvY3VzQW5kV2luZG93SGFzRm9jdXMpOwotCi0gICAgLy8gSW4gdGhlIHVwZGF0
ZWQgQ29jb2EgdGV4dCBpbnB1dCBzcGVjLCB0aGUgcGx1Zy1pbiB3aWxsIGVuYWJsZSBjb21wbGV4
IHRleHQgaW5wdXQKLSAgICAvLyBieSByZXR1cm5pbmcga05QRXZlbnRTdGFydElNRSBmcm9tIGl0
J3MgTlBDb2NvYUV2ZW50S2V5RG93biBoYW5kbGVyLgotICAgIGlmICghbV9wbHVnaW5XYW50c0xl
Z2FjeUNvY29hVGV4dElucHV0KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJbiB0aGUgb2xk
IG1vZGVsLCBpZiB0aGUgcGx1Zy1pbiBpcyBmb2N1c2VkLCBlbmFibGUgY29tcGxleCB0ZXh0IGlu
cHV0LgotICAgIHNldENvbXBsZXhUZXh0SW5wdXRFbmFibGVkKHBsdWdpbkhhc0ZvY3VzQW5kV2lu
ZG93SGFzRm9jdXMpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpzZXRDb21wbGV4VGV4dElu
cHV0RW5hYmxlZChib29sIGNvbXBsZXhUZXh0SW5wdXRFbmFibGVkKQotewotICAgIGlmIChtX2lz
Q29tcGxleFRleHRJbnB1dEVuYWJsZWQgPT0gY29tcGxleFRleHRJbnB1dEVuYWJsZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1faXNDb21wbGV4VGV4dElucHV0RW5hYmxlZCA9IGNvbXBsZXhU
ZXh0SW5wdXRFbmFibGVkOwotCi0gICAgUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlIGNvbXBs
ZXhUZXh0SW5wdXRTdGF0ZSA9IFBsdWdpbkNvbXBsZXhUZXh0SW5wdXREaXNhYmxlZDsKLSAgICBp
ZiAobV9pc0NvbXBsZXhUZXh0SW5wdXRFbmFibGVkKQotICAgICAgICBjb21wbGV4VGV4dElucHV0
U3RhdGUgPSBtX3BsdWdpbldhbnRzTGVnYWN5Q29jb2FUZXh0SW5wdXQgPyBQbHVnaW5Db21wbGV4
VGV4dElucHV0RW5hYmxlZExlZ2FjeSA6IFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRFbmFibGVkOwot
Ci0gICAgY29udHJvbGxlcigpLT5zZXRDb21wbGV4VGV4dElucHV0U3RhdGUoY29tcGxleFRleHRJ
bnB1dFN0YXRlKTsKLX0KLQotUGxhdGZvcm1MYXllciogTmV0c2NhcGVQbHVnaW46OnBsdWdpbkxh
eWVyKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGxhdGZvcm1MYXllcio+KG1fcGx1Z2lu
TGF5ZXIuZ2V0KCkpOwotfQotCi1zdGF0aWMgdm9pZCBtYWtlQ0dMUHJlc2VudExheWVyT3BhcXVl
KENBTGF5ZXIgKnBsdWdpblJvb3RMYXllcikKLXsKLSAgICAvLyBXZSBsb29rIGZvciBhIGxheWVy
IHRoYXQncyB0aGUgb25seSBzdWJsYXllciBvZiB0aGUgcm9vdCBsYXllciB0aGF0IGlzIGFuIGlu
c3RhbmNlCi0gICAgLy8gb2YgdGhlIENHTFByZXNlbnRMYXllciBjbGFzcyB3aGljaCBpbiB0dXJu
IGlzIGEgc3ViY2xhc3Mgb2YgQ0FPcGVuR0xMYXllciBhbmQgbWFrZQotICAgIC8vIGl0IG9wYXF1
ZSBpZiBhbGwgdGhlc2UgY29uZGl0aW9ucyBob2xkLgotCi0gICAgTlNBcnJheSAqc3VibGF5ZXJz
ID0gW3BsdWdpblJvb3RMYXllciBzdWJsYXllcnNdOwotICAgIGlmIChbc3VibGF5ZXJzIGNvdW50
XSAhPSAxKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDbGFzcyBjZ2xQcmVzZW50TGF5ZXJDbGFz
cyA9IE5TQ2xhc3NGcm9tU3RyaW5nKEAiQ0dMUHJlc2VudExheWVyIik7Ci0gICAgQUxMT1dfREVQ
UkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBpZiAoIVtjZ2xQcmVzZW50TGF5ZXJDbGFz
cyBpc1N1YmNsYXNzT2ZDbGFzczpbQ0FPcGVuR0xMYXllciBjbGFzc11dKQotICAgICAgICByZXR1
cm47Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0KLSAgICBDQUxheWVy
ICpsYXllciA9IFtzdWJsYXllcnMgb2JqZWN0QXRJbmRleDowXTsKLSAgICBpZiAoIVtsYXllciBp
c0tpbmRPZkNsYXNzOmNnbFByZXNlbnRMYXllckNsYXNzXSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgW2xheWVyIHNldE9wYXF1ZTpZRVNdOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjp1cGRh
dGVQbHVnaW5MYXllcigpCi17Ci0gICAgaWYgKG1fZHJhd2luZ01vZGVsICE9IE5QRHJhd2luZ01v
ZGVsQ29yZUFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdm9pZCogdmFsdWUgPSAw
OwotCi0gICAgLy8gR2V0IHRoZSBDb3JlIEFuaW1hdGlvbiBsYXllci4KLSAgICBpZiAoTlBQX0dl
dFZhbHVlKE5QUFZwbHVnaW5Db3JlQW5pbWF0aW9uTGF5ZXIsICZ2YWx1ZSkgIT0gTlBFUlJfTk9f
RVJST1IpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVCghbV9wbHVnaW5MYXllcik7Ci0KLSAgICAvLyBUaGUgb3JpZ2luYWwg
Q29yZSBBbmltYXRpb24gZHJhd2luZyBtb2RlbCByZXF1aXJlZCB0aGF0IHBsdWctaW5zIHBhc3Mg
YSByZXRhaW5lZCBsYXllcgotICAgIC8vIHRvIHRoZSBicm93c2VyLCB3aGljaCB0aGUgYnJvd3Nl
ciB3b3VsZCB0aGVuIGFkb3B0LiBIb3dldmVyLCB0aGUgZmluYWwgc3BlYyBjaGFuZ2VkIHRoaXMK
LSAgICAvLyAoU2VlIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9OUEFQSTpDb3JlQW5pbWF0aW9u
RHJhd2luZ01vZGVsIGZvciBtb3JlIGluZm9ybWF0aW9uKQotICAgIC8vIGFmdGVyIGEgdmVyc2lv
biBvZiBXZWJLaXQxIHdpdGggdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGhhZCBzaGlwcGVk
LCBidXQgdGhhdCBub3cgbWVhbnMKLSAgICAvLyB0aGF0IGFueSBwbHVnLWlucyB0aGF0IGV4cGVj
dCB0aGUgV2ViS2l0MSBiZWhhdmlvciB3b3VsZCBsZWFrIHRoZSBDQUxheWVyLgotICAgIC8vIEZv
ciBwbHVnLWlucyB0aGF0IHdlIGtub3cgcmV0dXJuIHJldGFpbmVkIGxheWVycywgd2UgaGF2ZSB0
aGUgUmV0dXJuc1JldGFpbmVkQ29yZUFuaW1hdGlvbkxheWVyCi0gICAgLy8gcGx1Zy1pbiBxdWly
ay4gUGx1Zy1pbnMgY2FuIGFsc28gY2hlY2sgZm9yIHdoZXRoZXIgdGhlIGJyb3dzZXIgZXhwZWN0
cyBhIG5vbi1yZXRhaW5lZCBsYXllciB0bwotICAgIC8vIGJlIHJldHVybmVkIGJ5IHVzaW5nIE5Q
Tl9HZXRWYWx1ZSBhbmQgcGFzcyB0aGUgV0tOVkV4cGVjdHNOb25yZXRhaW5lZExheWVyIHBhcmFt
ZXRlci4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTgy
ODIgZGVzY3JpYmVzIHRoZSBidWcgd2hlcmUgV2ViS2l0IGV4cGVjdHMgcmV0YWluZWQgbGF5ZXJz
LgotICAgIGlmIChtX3BsdWdpblJldHVybnNOb25yZXRhaW5lZExheWVyKQotICAgICAgICBtX3Bs
dWdpbkxheWVyID0gKF9fYnJpZGdlIENBTGF5ZXIgKil2YWx1ZTsKLSAgICBlbHNlCi0gICAgICAg
IG1fcGx1Z2luTGF5ZXIgPSBhZG9wdE5TKChfX2JyaWRnZSBDQUxheWVyICopdmFsdWUpOwotCi0g
ICAgaWYgKG1fcGx1Z2luTW9kdWxlLT5wbHVnaW5RdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWly
a3M6Ok1ha2VPcGFxdWVVbmxlc3NUcmFuc3BhcmVudFNpbHZlcmxpZ2h0QmFja2dyb3VuZEF0dHJp
YnV0ZUV4aXN0cykgJiYKLSAgICAgICAgIW1faXNUcmFuc3BhcmVudCkKLSAgICAgICAgbWFrZUNH
TFByZXNlbnRMYXllck9wYXF1ZShtX3BsdWdpbkxheWVyLmdldCgpKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL21hYy9Q
bHVnaW5Qcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNj
YXBlL21hYy9QbHVnaW5Qcm94eU1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NzJlODFjMDk2ODg1ZTQ0ZmQ3YzIxYjA5NTVhODIxNTUyOTJhNTliYi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9tYWMvUGx1Z2luUHJveHlNYWMubW0KKysrIC9kZXYvbnVsbApAQCAt
MSw5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIlBsdWdpblByb3h5LmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQot
I2ltcG9ydCAiUGx1Z2luQ29udHJvbGxlci5oIgotI2ltcG9ydCAiUGx1Z2luQ29udHJvbGxlclBy
b3h5TWVzc2FnZXMuaCIKLSNpbXBvcnQgIlBsdWdpblByb2Nlc3NDb25uZWN0aW9uLmgiCi0jaW1w
b3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUNB
TGF5ZXJFeHRyYXMuaD4KLQotc3RhdGljIGNvbnN0ZXhwciBkb3VibGUgZmFkZUluRHVyYXRpb24g
PSAwLjU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgdm9pZCBtYWtlUmVuZGVyTGF5
ZXIoQ0FMYXllciAqcGx1Z2luTGF5ZXIsIHVpbnQzMl90IGxheWVySG9zdGluZ0NvbnRleHRJRCkK
LXsKLSAgICBDQUxheWVyICpyZW5kZXJMYXllciA9IFtDQUxheWVyIF93ZWJfcmVuZGVyTGF5ZXJX
aXRoQ29udGV4dElEOmxheWVySG9zdGluZ0NvbnRleHRJRF07Ci0gICAgW3JlbmRlckxheWVyIHNl
dEZyYW1lOltwbHVnaW5MYXllciBib3VuZHNdXTsKLSAgICBbcmVuZGVyTGF5ZXIgc2V0QXV0b3Jl
c2l6aW5nTWFzazprQ0FMYXllcldpZHRoU2l6YWJsZSB8IGtDQUxheWVySGVpZ2h0U2l6YWJsZV07
Ci0gICAgW3BsdWdpbkxheWVyIHNldFN1YmxheWVyczpAW3JlbmRlckxheWVyXV07Ci19Ci0KLVBs
YXRmb3JtTGF5ZXIqIFBsdWdpblByb3h5OjpwbHVnaW5MYXllcigpCi17Ci0gICAgaWYgKCFtX3Bs
dWdpbkxheWVyICYmIG1fcmVtb3RlTGF5ZXJDbGllbnRJRCkgewotICAgICAgICAvLyBDcmVhdGUg
YSBsYXllciB3aXRoIGZsaXBwZWQgZ2VvbWV0cnkgYW5kIGFkZCB0aGUgcmVhbCBwbHVnLWluIGxh
eWVyIGFzIGEgc3VibGF5ZXIKLSAgICAgICAgLy8gc28gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIHdp
bGwgbWF0Y2ggdGhlIGV2ZW50IGNvb3JkaW5hdGUgc3lzdGVtLgotICAgICAgICBtX3BsdWdpbkxh
eWVyID0gYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgW21fcGx1Z2lu
TGF5ZXIgc2V0R2VvbWV0cnlGbGlwcGVkOllFU107Ci0gICAgICAgIG1ha2VSZW5kZXJMYXllciht
X3BsdWdpbkxheWVyLmdldCgpLCBtX3JlbW90ZUxheWVyQ2xpZW50SUQpOwotICAgIH0KLQotICAg
IHJldHVybiBtX3BsdWdpbkxheWVyLmdldCgpOwotfQotCi1ib29sIFBsdWdpblByb3h5OjpuZWVk
c0JhY2tpbmdTdG9yZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFtX3JlbW90ZUxheWVyQ2xpZW50
SUQ7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OnBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5n
ZWQoYm9vbCBwbHVnaW5IYXNGb2N1c0FuZFdpbmRvd0hhc0ZvY3VzKQotewotICAgIGNvbnRyb2xs
ZXIoKS0+cGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZChwbHVnaW5IYXNGb2N1c0FuZFdp
bmRvd0hhc0ZvY3VzKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm94eTo6c2V0Q29tcGxleFRleHRJbnB1
dFN0YXRlKHVpbnQ2NF90IGNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkKLXsKLSAgICBjb250cm9sbGVy
KCktPnNldENvbXBsZXhUZXh0SW5wdXRTdGF0ZShzdGF0aWNfY2FzdDxQbHVnaW5Db21wbGV4VGV4
dElucHV0U3RhdGU+KGNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkpOwotfQotCi12b2lkIFBsdWdpblBy
b3h5OjpzZXRMYXllckhvc3RpbmdNb2RlKExheWVySG9zdGluZ01vZGUgbGF5ZXJIb3N0aW5nTW9k
ZSkKLXsKLSAgICBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1
Z2luQ29udHJvbGxlclByb3h5OjpTZXRMYXllckhvc3RpbmdNb2RlKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihsYXllckhvc3RpbmdNb2RlKSksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0KLXZvaWQg
UGx1Z2luUHJveHk6OnNldExheWVySG9zdGluZ0NvbnRleHRJRCh1aW50MzJfdCBsYXllckhvc3Rp
bmdDb250ZXh0SUQpCi17Ci0gICAgQVNTRVJUKG1fcGx1Z2luTGF5ZXIuZ2V0KCkpOwotCi0gICAg
bV9yZW1vdGVMYXllckNsaWVudElEID0gbGF5ZXJIb3N0aW5nQ29udGV4dElEOwotICAgIG1ha2VS
ZW5kZXJMYXllcihtX3BsdWdpbkxheWVyLmdldCgpLCBtX3JlbW90ZUxheWVyQ2xpZW50SUQpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luQ29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1
Z2luQ29udHJvbGxlci5oCmluZGV4IDNiN2FmZWRhNTc2ZWIyZmJjNjU3OGU0NGU1MGFjZGVkMzgx
NTVlZTkuLmY4ZWQyNzNmZjgzNTA2ODdiMTQ0MTk3Yzk1ZjNkYmEzN2U1OWM0ZWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbkNvbnRyb2xsZXIuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Db250cm9sbGVyLmgK
QEAgLTI4LDEwICsyOCw2IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3
dGYvV2Vha1B0ci5oPgogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiUGx1Z2luQ29t
cGxleFRleHRJbnB1dFN0YXRlLmgiCi0jZW5kaWYKLQogc3RydWN0IE5QT2JqZWN0OwogdHlwZWRl
ZiBzdHJ1Y3QgX05QVmFyaWFudCBOUFZhcmlhbnQ7CiB0eXBlZGVmIHZvaWQqIE5QSWRlbnRpZmll
cjsKQEAgLTc1LDIzICs3MSw2IEBAIHB1YmxpYzoKICAgICAvLyBDYW5jZWxzIHRoZSBsb2FkIG9m
IHRoZSBtYW51YWwgc3RyZWFtLgogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxNYW51YWxTdHJlYW1M
b2FkKCkgPSAwOwogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgLy8gR2V0
IHRoZSBOUE9iamVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSB3aW5kb3cgSmF2YVNjcmlwdCBv
YmplY3QuIFJldHVybnMgYSByZXRhaW5lZCBvYmplY3QuCi0gICAgdmlydHVhbCBOUE9iamVjdCog
d2luZG93U2NyaXB0TlBPYmplY3QoKSA9IDA7Ci0KLSAgICAvLyBHZXQgdGhlIE5QT2JqZWN0IHRo
YXQgY29ycmVzcG9uZHMgdG8gdGhlIHBsdWctaW4ncyBlbGVtZW50LiBSZXR1cm5zIGEgcmV0YWlu
ZWQgb2JqZWN0LgotICAgIHZpcnR1YWwgTlBPYmplY3QqIHBsdWdpbkVsZW1lbnROUE9iamVjdCgp
ID0gMDsKLQotICAgIC8vIEV2YWx1YXRlcyB0aGUgZ2l2ZW4gc2NyaXB0IHN0cmluZyBpbiB0aGUg
Y29udGV4dCBvZiB0aGUgZ2l2ZW4gTlBPYmplY3QuCi0gICAgdmlydHVhbCBib29sIGV2YWx1YXRl
KE5QT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBzY3JpcHRTdHJpbmcsIE5QVmFyaWFudCogcmVzdWx0
LCBib29sIGFsbG93UG9wdXBzKSA9IDA7Ci0KLSAgICAvLyBDYWxsZWQgYnkgdGhlIE5ldHNjYXBl
IHBsdWctaW4gd2hlbiBpdCBzdGFydHMgb3Igc3RvcHMgcGxheWluZyBhdWRpby4KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0UGx1Z2luSXNQbGF5aW5nQXVkaW8oYm9vbCkgPSAwOwotCi0gICAgLy8gUmV0
dXJucyB3aGV0aGVyIHRoZSBwbHVnaW4gc2hvdWxkIGJlIG11dGVkLgotICAgIHZpcnR1YWwgYm9v
bCBpc011dGVkKCkgY29uc3QgPSAwOwotI2VuZGlmCi0KICAgICAvLyBTZXQgdGhlIHN0YXR1c2Jh
ciB0ZXh0LgogICAgIHZpcnR1YWwgdm9pZCBzZXRTdGF0dXNiYXJUZXh0KGNvbnN0IFN0cmluZyYp
ID0gMDsKIApAQCAtMTA1LDkgKzg0LDYgQEAgcHVibGljOgogICAgIC8vIFRlbGxzIHRoZSBjb250
cm9sbGVyIHRoYXQgdGhlIHBsdWctaW4gZm9jdXMgb3Igd2luZG93IGZvY3VzIGRpZCBjaGFuZ2Uu
CiAgICAgdmlydHVhbCB2b2lkIHBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQoYm9vbCkg
PSAwOwogCi0gICAgLy8gVGVsbHMgdGhlIGNvbnRyb2xsZXIgdGhhdCBjb21wbGV4IHRleHQgaW5w
dXQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBmb3IgdGhlIHBsdWctaW4uCi0gICAgdmlydHVhbCB2
b2lkIHNldENvbXBsZXhUZXh0SW5wdXRTdGF0ZShQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUp
ID0gMDsKLQogICAgIC8vIFJldHVybnMgdGhlIG1hY2ggcG9ydCBvZiB0aGUgY29tcG9zaXRpbmcg
cmVuZGVyIHNlcnZlci4KICAgICB2aXJ0dWFsIGNvbnN0IFdURjo6TWFjaFNlbmRSaWdodCYgY29t
cG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0KCkgPSAwOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlv
bi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjODkxZTlkYmU3YjQyYTlhNjQx
NzFkNmQ5ZGNjNGNmOTY3ZWI1NGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rp
b24uaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiTlBP
YmplY3RNZXNzYWdlUmVjZWl2ZXJNZXNzYWdlcy5oIgotI2luY2x1ZGUgIk5QUmVtb3RlT2JqZWN0
TWFwLmgiCi0jaW5jbHVkZSAiTlBSdW50aW1lT2JqZWN0TWFwLmgiCi0jaW5jbHVkZSAiUGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJveHkuaCIKLSNp
bmNsdWRlICJXZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZXMu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHd0Zi9G
aWxlU3lzdGVtLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1QbHVnaW5Qcm9jZXNzQ29ubmVj
dGlvbjo6UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24oUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5h
Z2VyKiBwbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIsIHVpbnQ2NF90IHBsdWdpblByb2Nl
c3NUb2tlbiwgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVy
LCBib29sIHN1cHBvcnRzQXN5bmNocm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRpb24pCi0gICAgOiBt
X3BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcihwbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1h
bmFnZXIpCi0gICAgLCBtX3BsdWdpblByb2Nlc3NUb2tlbihwbHVnaW5Qcm9jZXNzVG9rZW4pCi0g
ICAgLCBtX3N1cHBvcnRzQXN5bmNocm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRpb24oc3VwcG9ydHNB
c3luY2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbikKLXsKLSAgICBtX2Nvbm5lY3Rpb24gPSBJ
UEM6OkNvbm5lY3Rpb246OmNyZWF0ZUNsaWVudENvbm5lY3Rpb24oY29ubmVjdGlvbklkZW50aWZp
ZXIsICp0aGlzKTsKLQotICAgIG1fbnBSZW1vdGVPYmplY3RNYXAgPSBOUFJlbW90ZU9iamVjdE1h
cDo6Y3JlYXRlKG1fY29ubmVjdGlvbi5nZXQoKSk7Ci0KLSAgICBtX2Nvbm5lY3Rpb24tPm9wZW4o
KTsKLX0KLQotUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246On5QbHVnaW5Qcm9jZXNzQ29ubmVjdGlv
bigpCi17Ci0gICAgQVNTRVJUKCFtX2Nvbm5lY3Rpb24pOwotICAgIEFTU0VSVCghbV9ucFJlbW90
ZU9iamVjdE1hcCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246OmFkZFBsdWdp
blByb3h5KFBsdWdpblByb3h5KiBwbHVnaW4pCi17Ci0gICAgQVNTRVJUKCFtX3BsdWdpbnMuY29u
dGFpbnMocGx1Z2luLT5wbHVnaW5JbnN0YW5jZUlEKCkpKTsKLSAgICBtX3BsdWdpbnMuc2V0KHBs
dWdpbi0+cGx1Z2luSW5zdGFuY2VJRCgpLCBwbHVnaW4pOwotfQotCi12b2lkIFBsdWdpblByb2Nl
c3NDb25uZWN0aW9uOjpyZW1vdmVQbHVnaW5Qcm94eShQbHVnaW5Qcm94eSogcGx1Z2luKQotewot
ICAgIEFTU0VSVChtX3BsdWdpbnMuY29udGFpbnMocGx1Z2luLT5wbHVnaW5JbnN0YW5jZUlEKCkp
KTsKLSAgICBtX3BsdWdpbnMucmVtb3ZlKHBsdWdpbi0+cGx1Z2luSW5zdGFuY2VJRCgpKTsKLQot
ICAgIC8vIEludmFsaWRhdGUgYWxsIG9iamVjdHMgcmVsYXRlZCB0byB0aGlzIHBsdWctaW4uCi0g
ICAgbV9ucFJlbW90ZU9iamVjdE1hcC0+cGx1Z2luRGVzdHJveWVkKHBsdWdpbik7Ci0KLSAgICBp
ZiAoIW1fcGx1Z2lucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbnBSZW1v
dGVPYmplY3RNYXAgPSBudWxscHRyOwotCi0gICAgLy8gV2UgaGF2ZSBubyBtb3JlIHBsdWctaW5z
LCBpbnZhbGlkYXRlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBwbHVnLWluIHByb2Nlc3MuCi0gICAg
QVNTRVJUKG1fY29ubmVjdGlvbik7Ci0gICAgbV9jb25uZWN0aW9uLT5pbnZhbGlkYXRlKCk7Ci0g
ICAgbV9jb25uZWN0aW9uID0gbnVsbHB0cjsKLQotICAgIC8vIFRoaXMgd2lsbCBjYXVzZSB1cyB0
byBiZSBkZWxldGVkLgotICAgIG1fcGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLT5yZW1v
dmVQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbih0aGlzKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBJUEM6OkRlY29kZXImIGRlY29kZXIpCi17Ci0gICAgQVNTRVJUKGRlY29kZXIuZGVzdGluYXRp
b25JRCgpKTsKLQotICAgIFBsdWdpblByb3h5KiBwbHVnaW5Qcm94eSA9IG1fcGx1Z2lucy5nZXQo
ZGVjb2Rlci5kZXN0aW5hdGlvbklEKCkpOwotICAgIGlmICghcGx1Z2luUHJveHkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHBsdWdpblByb3h5LT5kaWRSZWNlaXZlUGx1Z2luUHJveHlNZXNzYWdl
KGNvbm5lY3Rpb24sIGRlY29kZXIpOwotfQotCi1ib29sIFBsdWdpblByb2Nlc3NDb25uZWN0aW9u
OjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6
OkRlY29kZXImIGRlY29kZXIsIFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIp
Ci17Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpO
UE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKQotICAgICAgICBy
ZXR1cm4gbV9ucFJlbW90ZU9iamVjdE1hcC0+ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKGNvbm5lY3Rp
b24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Ci0KLSAgICB1aW50NjRfdCBkZXN0aW5hdGlvbklE
ID0gZGVjb2Rlci5kZXN0aW5hdGlvbklEKCk7Ci0KLSAgICBpZiAoIWRlc3RpbmF0aW9uSUQpCi0g
ICAgICAgIHJldHVybiBkaWRSZWNlaXZlU3luY1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWVzc2Fn
ZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwotCi0gICAgUGx1Z2luUHJveHkq
IHBsdWdpblByb3h5ID0gbV9wbHVnaW5zLmdldChkZXN0aW5hdGlvbklEKTsKLSAgICBpZiAoIXBs
dWdpblByb3h5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcGx1Z2luUHJv
eHktPmRpZFJlY2VpdmVTeW5jUGx1Z2luUHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIs
IHJlcGx5RW5jb2Rlcik7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZENs
b3NlKElQQzo6Q29ubmVjdGlvbiYpCi17Ci0gICAgLy8gVGhlIHBsdWctaW4gcHJvY2VzcyBtdXN0
IGhhdmUgY3Jhc2hlZC4KLSAgICBmb3IgKEhhc2hNYXA8dWludDY0X3QsIFBsdWdpblByb3h5Kj46
OmNvbnN0X2l0ZXJhdG9yOjpWYWx1ZXMgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKS52YWx1ZXMoKSwg
ZW5kID0gbV9wbHVnaW5zLmVuZCgpLnZhbHVlcygpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgUGx1Z2luUHJveHkqIHBsdWdpblByb3h5ID0gKCppdCk7Ci0KLSAgICAgICAgcGx1Z2luUHJv
eHktPnBsdWdpblByb2Nlc3NDcmFzaGVkKCk7Ci0gICAgfQotfQotCi12b2lkIFBsdWdpblByb2Nl
c3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwg
SVBDOjpNZXNzYWdlTmFtZSkKLXsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjo6
c2V0RXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXhjZXB0aW9uU3RyaW5nLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgTlBSdW50aW1lT2JqZWN0
TWFwOjpzZXRHbG9iYWxFeGNlcHRpb24oZXhjZXB0aW9uU3RyaW5nKTsKLSAgICBjb21wbGV0aW9u
SGFuZGxlcigpOwotfQotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAxOTQ3Y2VkZjM3ZmRmOTdlODZhNmMxNjUzYzEyZDk4ODU3ODI3
NzdjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5Q
cm9jZXNzQ29ubmVjdGlvbl9oCi0jZGVmaW5lIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uX2gKLQot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiQ29ubmVjdGlvbi5o
IgotI2luY2x1ZGUgIlBsdWdpbi5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3MuaCIKLSNpbmNs
dWRlICJQbHVnaW5Qcm9jZXNzQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBOUFJlbW90ZU9iamVjdE1hcDsKLWNs
YXNzIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcjsKLWNsYXNzIFBsdWdpblByb3h5Owot
ICAgIAotY2xhc3MgUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbj4sIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50IHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPFBsdWdpblByb2Nlc3NDb25uZWN0aW9uPiBjcmVhdGUoUGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyKiBwbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIs
IHVpbnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbiwgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVy
IGNvbm5lY3Rpb25JZGVudGlmaWVyLCBib29sIHN1cHBvcnRzQXN5bmNocm9ub3VzUGx1Z2luSW5p
dGlhbGl6YXRpb24pCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQbHVnaW5Q
cm9jZXNzQ29ubmVjdGlvbihwbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIsIHBsdWdpblBy
b2Nlc3NUb2tlbiwgY29ubmVjdGlvbklkZW50aWZpZXIsIHN1cHBvcnRzQXN5bmNocm9ub3VzUGx1
Z2luSW5pdGlhbGl6YXRpb24pKTsKLSAgICB9Ci0gICAgflBsdWdpblByb2Nlc3NDb25uZWN0aW9u
KCk7Ci0KLSAgICB1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4oKSBjb25zdCB7IHJldHVybiBt
X3BsdWdpblByb2Nlc3NUb2tlbjsgfQotCi0gICAgSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9Ci0KLSAgICB2b2lkIGFkZFBs
dWdpblByb3h5KFBsdWdpblByb3h5Kik7Ci0gICAgdm9pZCByZW1vdmVQbHVnaW5Qcm94eShQbHVn
aW5Qcm94eSopOwotCi0gICAgTlBSZW1vdGVPYmplY3RNYXAqIG5wUmVtb3RlT2JqZWN0TWFwKCkg
Y29uc3QgeyByZXR1cm4gbV9ucFJlbW90ZU9iamVjdE1hcC5nZXQoKTsgfQotCi0gICAgYm9vbCBz
dXBwb3J0c0FzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9zdXBwb3J0c0FzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uOyB9Ci0gICAgCi1wcml2
YXRlOgotICAgIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKFBsdWdpblByb2Nlc3NDb25uZWN0aW9u
TWFuYWdlciosIHVpbnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbiwgSVBDOjpDb25uZWN0aW9uOjpJ
ZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyLCBib29sIHN1cHBvcnRzQXN5bmNocm9ub3Vz
SW5pdGlhbGl6YXRpb24pOwotCi0gICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKLSAgICB2
b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92
ZXJyaWRlOwotICAgIGJvb2wgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IElQQzo6RGVjb2RlciYsIFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+Jikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZFJl
Y2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VOYW1lKSBv
dmVycmlkZTsKLQotICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMuCi0gICAgYm9vbCBkaWRSZWNlaXZl
U3luY1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6
OkRlY29kZXImLCBVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYpOwotICAgIHZvaWQgc2V0RXhjZXB0
aW9uKGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0KLSAgICBQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIqIG1fcGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25N
YW5hZ2VyOwotICAgIHVpbnQ2NF90IG1fcGx1Z2luUHJvY2Vzc1Rva2VuOwotCi0gICAgLy8gVGhl
IGNvbm5lY3Rpb24gZnJvbSB0aGUgd2ViIHByb2Nlc3MgdG8gdGhlIHBsdWctaW4gcHJvY2Vzcy4K
LSAgICBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247Ci0KLSAgICAvLyBUaGUg
cGx1Zy1pbnMuIFdlIHVzZSBhIHdlYWsgcmVmZXJlbmNlIHRvIHRoZSBwbHVnLWluIHByb3hpZXMg
YmVjYXVzZSB0aGUgcGx1Zy1pbiB2aWV3IGhvbGRzIHRoZSBzdHJvbmcgcmVmZXJlbmNlLgotICAg
IEhhc2hNYXA8dWludDY0X3QsIFBsdWdpblByb3h5Kj4gbV9wbHVnaW5zOwotCi0gICAgUmVmUHRy
PE5QUmVtb3RlT2JqZWN0TWFwPiBtX25wUmVtb3RlT2JqZWN0TWFwOwotICAgIAotICAgIGJvb2wg
bV9zdXBwb3J0c0FzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
LQotI2VuZGlmIC8vIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uLm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Nv
bm5lY3Rpb24ubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YmQ5
ZTgwNmI5NjYwZjVkM2RiMDk1NTc2NmViODI0Njk3M2MzZmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVsbApAQCAt
MSwzMCArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotbWVzc2FnZXMgLT4gUGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb24gTGVnYWN5UmVjZWl2ZXIgewotICAgICMgU2V0IGEgZ2xvYmFsIEphdmFTY3Jp
cHQgZXhjZXB0aW9uLgotICAgIFNldEV4Y2VwdGlvbihTdHJpbmcgZXhjZXB0aW9uU3RyaW5nKSAt
PiAoKSBTeW5jaHJvbm91cwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1h
bmFnZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjMyODRjNjg3YWMzMTM3
Y2Y5YTdhOTRhYTMyZmFlMTMyZGY2ZjYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblBy
b2Nlc3NDb25uZWN0aW9uTWFuYWdlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdp
blByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCi0KLSNpbmNsdWRlICJEZWNvZGVyLmgiCi0jaW5jbHVkZSAiRW5jb2Rlci5oIgotI2lu
Y2x1ZGUgIlBsdWdpblByb2Nlc3NDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb25NYW5hZ2VyTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRD
b2RlcnMuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1By
b3h5TWVzc2FnZXMuaCIKLQotI2lmIE9TKERBUldJTikgJiYgIVVTRShVTklYX0RPTUFJTl9TT0NL
RVRTKQotI2luY2x1ZGUgIk1hY2hQb3J0LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLVJlZjxQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXI+IFBsdWdpblByb2Nlc3NDb25u
ZWN0aW9uTWFuYWdlcjo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQbHVn
aW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIpOwotfQotCi1QbHVnaW5Qcm9jZXNzQ29ubmVjdGlv
bk1hbmFnZXI6OlBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcigpCi0gICAgOiBtX3F1ZXVl
KFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LlBsdWdpblByb2Nlc3NDb25uZWN0
aW9uTWFuYWdlciIpKQotewotfQotCi1QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXI6On5Q
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIoKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotfQotCi12b2lkIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcjo6aW5pdGlhbGl6
ZUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uKQotewotICAgIGNvbm5lY3Rp
b24tPmFkZFdvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UGx1Z2luUHJvY2Vzc0Nv
bm5lY3Rpb25NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcXVldWUuZ2V0KCksIHRo
aXMpOwotfQotCi1QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbiogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rp
b25NYW5hZ2VyOjpnZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbih1aW50NjRfdCBwbHVnaW5Qcm9j
ZXNzVG9rZW4pCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BsdWdpblByb2Nlc3ND
b25uZWN0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9wbHVnaW5Qcm9jZXNzQ29u
bmVjdGlvbnNbaV0tPnBsdWdpblByb2Nlc3NUb2tlbigpID09IHBsdWdpblByb2Nlc3NUb2tlbikK
LSAgICAgICAgICAgIHJldHVybiBtX3BsdWdpblByb2Nlc3NDb25uZWN0aW9uc1tpXS5nZXQoKTsK
LSAgICB9Ci0KLSAgICBJUEM6OkF0dGFjaG1lbnQgZW5jb2RlZENvbm5lY3Rpb25JZGVudGlmaWVy
OwotICAgIGJvb2wgc3VwcG9ydHNBc3luY2hyb25vdXNJbml0aWFsaXphdGlvbjsKLSAgICBpZiAo
IVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRT
eW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9u
KHBsdWdpblByb2Nlc3NUb2tlbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldFBsdWdpblBy
b2Nlc3NDb25uZWN0aW9uOjpSZXBseShlbmNvZGVkQ29ubmVjdGlvbklkZW50aWZpZXIsIHN1cHBv
cnRzQXN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb24pLCAwKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSNpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykKLSAgICBJUEM6OkNvbm5lY3Rpb246
OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIgPSBlbmNvZGVkQ29ubmVjdGlvbklkZW50
aWZpZXIucmVsZWFzZUZpbGVEZXNjcmlwdG9yKCk7Ci0jZWxpZiBPUyhEQVJXSU4pCi0gICAgSVBD
OjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKGVuY29kZWRDb25u
ZWN0aW9uSWRlbnRpZmllci5wb3J0KCkpOwotI2VsaWYgT1MoV0lORE9XUykKLSAgICBJUEM6OkNv
bm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIgPSBlbmNvZGVkQ29ubmVj
dGlvbklkZW50aWZpZXIuaGFuZGxlKCk7Ci0jZW5kaWYKLSAgICBpZiAoIUlQQzo6Q29ubmVjdGlv
bjo6aWRlbnRpZmllcklzVmFsaWQoY29ubmVjdGlvbklkZW50aWZpZXIpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24gPSBQbHVnaW5Q
cm9jZXNzQ29ubmVjdGlvbjo6Y3JlYXRlKHRoaXMsIHBsdWdpblByb2Nlc3NUb2tlbiwgY29ubmVj
dGlvbklkZW50aWZpZXIsIHN1cHBvcnRzQXN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb24pOwotICAg
IG1fcGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25zLmFwcGVuZChwbHVnaW5Qcm9jZXNzQ29ubmVjdGlv
bi5jb3B5UmVmKCkpOwotCi0gICAgewotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV90b2tlbnNB
bmRDb25uZWN0aW9uc0xvY2sgfTsKLSAgICAgICAgQVNTRVJUKCFtX3Rva2Vuc0FuZENvbm5lY3Rp
b25zLmNvbnRhaW5zKHBsdWdpblByb2Nlc3NUb2tlbikpOwotCi0gICAgICAgIG1fdG9rZW5zQW5k
Q29ubmVjdGlvbnMuc2V0KHBsdWdpblByb2Nlc3NUb2tlbiwgcGx1Z2luUHJvY2Vzc0Nvbm5lY3Rp
b24tPmNvbm5lY3Rpb24oKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBsdWdpblByb2Nlc3NDb25u
ZWN0aW9uLnB0cigpOwotfQotCi12b2lkIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcjo6
cmVtb3ZlUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24oUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24qIHBs
dWdpblByb2Nlc3NDb25uZWN0aW9uKQotewotICAgIHNpemVfdCB2ZWN0b3JJbmRleCA9IG1fcGx1
Z2luUHJvY2Vzc0Nvbm5lY3Rpb25zLmZpbmQocGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24pOwotICAg
IEFTU0VSVCh2ZWN0b3JJbmRleCAhPSBub3RGb3VuZCk7Ci0KLSAgICB7Ci0gICAgICAgIExvY2tl
ciBsb2NrZXIgeyBtX3Rva2Vuc0FuZENvbm5lY3Rpb25zTG9jayB9OwotICAgICAgICBBU1NFUlQo
bV90b2tlbnNBbmRDb25uZWN0aW9ucy5jb250YWlucyhwbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi0+
cGx1Z2luUHJvY2Vzc1Rva2VuKCkpKTsKLSAgICAgICAgCi0gICAgICAgIG1fdG9rZW5zQW5kQ29u
bmVjdGlvbnMucmVtb3ZlKHBsdWdpblByb2Nlc3NDb25uZWN0aW9uLT5wbHVnaW5Qcm9jZXNzVG9r
ZW4oKSk7Ci0gICAgfQotCi0gICAgbV9wbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbnMucmVtb3ZlKHZl
Y3RvckluZGV4KTsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXI6OnBs
dWdpblByb2Nlc3NDcmFzaGVkKHVpbnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbikKLXsKLSAgICBM
b2NrZXIgbG9ja2VyIHsgbV90b2tlbnNBbmRDb25uZWN0aW9uc0xvY2sgfTsKLSAgICBJUEM6OkNv
bm5lY3Rpb24qIGNvbm5lY3Rpb24gPSBtX3Rva2Vuc0FuZENvbm5lY3Rpb25zLmdldChwbHVnaW5Q
cm9jZXNzVG9rZW4pOwotCi0gICAgLy8gSXQncyBPSyBmb3IgY29ubmVjdGlvbiB0byBiZSBudWxs
IGhlcmU7IGl0IHdpbGwgaGFwcGVuIGlmIHRoaXMgd2ViIHByb2Nlc3MgZG9lc24ndCBrbm93Ci0g
ICAgLy8gYW55dGhpbmcgYWJvdXQgdGhlIHBsdWctaW4gcHJvY2Vzcy4KLSAgICBpZiAoIWNvbm5l
Y3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbm5lY3Rpb24tPnBvc3RDb25uZWN0aW9u
RGlkQ2xvc2VPbkNvbm5lY3Rpb25Xb3JrUXVldWUoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9u
TWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb25NYW5hZ2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1NDZk
ZjExMGIwNTI0NzQ4OTYwNTYwNjZiODI0ZTg0MWY5MGEzM2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1h
bmFnZXJfaAotI2RlZmluZSBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXJfaAotCi0jaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzLmgi
Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLS8vIE1hbmFnZXMgcGx1Zy1pbiBwcm9jZXNzIGNvbm5l
Y3Rpb25zIGZvciB0aGUgZ2l2ZW4gd2ViIHByb2Nlc3MuCi0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci1jbGFzcyBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjsKLSAgICAgICAgCi1jbGFzcyBQbHVnaW5Q
cm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIgOiBwdWJsaWMgSVBDOjpDb25uZWN0aW9uOjpXb3JrUXVl
dWVNZXNzYWdlUmVjZWl2ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8UGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb25NYW5hZ2VyPiBjcmVhdGUoKTsKLSAgICB+UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rp
b25NYW5hZ2VyKCk7Ci0KLSAgICB2b2lkIGluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVj
dGlvbiopOwotCi0gICAgUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24qIGdldFBsdWdpblByb2Nlc3ND
b25uZWN0aW9uKHVpbnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbik7Ci0gICAgdm9pZCByZW1vdmVQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbihQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbiopOwotCi1wcml2
YXRlOgotICAgIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcigpOwotCi0gICAgLy8gSVBD
OjpDb25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIuCi0gICAgdm9pZCBkaWRSZWNl
aXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKLQot
ICAgIHZvaWQgcGx1Z2luUHJvY2Vzc0NyYXNoZWQodWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2Vu
KTsKLQotICAgIFJlZjxXb3JrUXVldWU+IG1fcXVldWU7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPFBs
dWdpblByb2Nlc3NDb25uZWN0aW9uPj4gbV9wbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbnM7Ci0KLSAg
ICBMb2NrIG1fdG9rZW5zQW5kQ29ubmVjdGlvbnNMb2NrOwotICAgIEhhc2hNYXA8dWludDY0X3Qs
IFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+PiBtX3Rva2Vuc0FuZENvbm5lY3Rpb25zIFdURl9HVUFS
REVEX0JZX0xPQ0sobV90b2tlbnNBbmRDb25uZWN0aW9uc0xvY2spOwotfTsKLQotfQotCi0jZW5k
aWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNlbmRpZiAvLyBQbHVnaW5Qcm9j
ZXNzQ29ubmVjdGlvbk1hbmFnZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLm1lc3NhZ2VzLmluIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25N
YW5hZ2VyLm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDA2NzZk
N2RmYTEzODFkZWJlYWU3N2FjM2VkNTNhYzQ0NDZlN2UxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxs
CkBAIC0xLDI5ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0Ogot
IyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi1tZXNzYWdlcyAtPiBQbHVnaW5Q
cm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIgewotICAgIFBsdWdpblByb2Nlc3NDcmFzaGVkKHVpbnQ2
NF90IHBsdWdpblByb2Nlc3NUb2tlbikKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDljZWQ3ZGEwNzUwMmY2MmJhYzZhZjY3OWUxNjEwZDRlNjU5ZTA3ZmYuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzQ3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1
Z2luUHJveHkuaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVk
ZSAiRGF0YVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIk5QUmVtb3RlT2JqZWN0TWFwLmgiCi0jaW5j
bHVkZSAiTlBSdW50aW1lVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiTlBWYXJpYW50RGF0YS5oIgot
I2luY2x1ZGUgIlBsdWdpbkNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJQbHVnaW5Db250cm9sbGVy
UHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIlBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5oIgot
I2luY2x1ZGUgIlBsdWdpblByb2Nlc3NDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJv
Y2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLmgiCi0jaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCi0j
aW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiV2ViS2V5Ym9hcmRF
dmVudC5oIgotI2luY2x1ZGUgIldlYk1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNz
LmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oIgotI2luY2x1ZGUg
IldlYldoZWVsRXZlbnQuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVBsdWdp
bkluc3RhbmNlSUQoKQotewotICAgIHN0YXRpYyB1aW50NjRfdCB1bmlxdWVQbHVnaW5JbnN0YW5j
ZUlEOwotICAgIHJldHVybiArK3VuaXF1ZVBsdWdpbkluc3RhbmNlSUQ7Ci19Ci0KLVJlZjxQbHVn
aW5Qcm94eT4gUGx1Z2luUHJveHk6OmNyZWF0ZSh1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4p
Ci17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGx1Z2luUHJveHkocGx1Z2luUHJvY2Vzc1Rv
a2VuKSk7Ci19Ci0KLVBsdWdpblByb3h5OjpQbHVnaW5Qcm94eSh1aW50NjRfdCBwbHVnaW5Qcm9j
ZXNzVG9rZW4pCi0gICAgOiBQbHVnaW4oUGx1Z2luUHJveHlUeXBlKQotICAgICwgbV9wbHVnaW5Q
cm9jZXNzVG9rZW4ocGx1Z2luUHJvY2Vzc1Rva2VuKQotICAgICwgbV9wbHVnaW5JbnN0YW5jZUlE
KGdlbmVyYXRlUGx1Z2luSW5zdGFuY2VJRCgpKQotewotfQotCi1QbHVnaW5Qcm94eTo6flBsdWdp
blByb3h5KCkKLXsKLX0KLQotdm9pZCBQbHVnaW5Qcm94eTo6cGx1Z2luUHJvY2Vzc0NyYXNoZWQo
KQotewotICAgIGNvbnRyb2xsZXIoKS0+cGx1Z2luUHJvY2Vzc0NyYXNoZWQoKTsKLX0KLQotYm9v
bCBQbHVnaW5Qcm94eTo6aW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQot
ewotICAgIEFTU0VSVCghbV9jb25uZWN0aW9uKTsKLSAgICBtX2Nvbm5lY3Rpb24gPSBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5wbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIoKS5nZXRQbHVn
aW5Qcm9jZXNzQ29ubmVjdGlvbihtX3BsdWdpblByb2Nlc3NUb2tlbik7Ci0gICAgCi0gICAgaWYg
KCFtX2Nvbm5lY3Rpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBBZGQg
dGhlIHBsdWctaW4gcHJveHkgYmVmb3JlIGNyZWF0aW5nIHRoZSBwbHVnLWluOyBpdCBuZWVkcyB0
byBiZSBpbiB0aGUgbWFwIGJlY2F1c2UgQ3JlYXRlUGx1Z2luCi0gICAgLy8gY2FuIGNhbGwgYmFj
ayBvdXQgdG8gdGhlIHBsdWctaW4gcHJveHkuCi0gICAgbV9jb25uZWN0aW9uLT5hZGRQbHVnaW5Q
cm94eSh0aGlzKTsKLQotICAgIC8vIEFzayB0aGUgcGx1Zy1pbiBwcm9jZXNzIHRvIGNyZWF0ZSBh
IHBsdWctaW4uCi0gICAgbV9wZW5kaW5nUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzID0gbWFrZVVu
aXF1ZTxQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnM+KCk7Ci0KLSAgICBtX3BlbmRpbmdQbHVnaW5D
cmVhdGlvblBhcmFtZXRlcnMtPnBsdWdpbkluc3RhbmNlSUQgPSBtX3BsdWdpbkluc3RhbmNlSUQ7
Ci0gICAgbV9wZW5kaW5nUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLT53aW5kb3dOUE9iamVjdElE
ID0gd2luZG93TlBPYmplY3RJRCgpOwotICAgIG1fcGVuZGluZ1BsdWdpbkNyZWF0aW9uUGFyYW1l
dGVycy0+cGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7Ci0gICAgbV9wZW5kaW5nUGx1Z2luQ3JlYXRp
b25QYXJhbWV0ZXJzLT51c2VyQWdlbnQgPSBjb250cm9sbGVyKCktPnVzZXJBZ2VudCgpOwotICAg
IG1fcGVuZGluZ1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy0+Y29udGVudHNTY2FsZUZhY3RvciA9
IGNvbnRlbnRzU2NhbGVGYWN0b3IoKTsKLSAgICBtX3BlbmRpbmdQbHVnaW5DcmVhdGlvblBhcmFt
ZXRlcnMtPmlzUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCA9IGNvbnRyb2xsZXIoKS0+aXNQcml2YXRl
QnJvd3NpbmdFbmFibGVkKCk7Ci0gICAgbV9wZW5kaW5nUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJz
LT5pc011dGVkID0gY29udHJvbGxlcigpLT5pc011dGVkKCk7Ci0gICAgbV9wZW5kaW5nUGx1Z2lu
Q3JlYXRpb25QYXJhbWV0ZXJzLT5hcnRpZmljaWFsUGx1Z2luSW5pdGlhbGl6YXRpb25EZWxheUVu
YWJsZWQgPSBjb250cm9sbGVyKCktPmFydGlmaWNpYWxQbHVnaW5Jbml0aWFsaXphdGlvbkRlbGF5
RW5hYmxlZCgpOwotICAgIG1fcGVuZGluZ1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy0+aXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCA9IGNvbnRyb2xsZXIoKS0+aXNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nRW5hYmxlZCgpOwotCi0gICAgaWYgKCFjYW5Jbml0aWFsaXplQXN5bmNocm9ub3Vz
bHkoKSkKLSAgICAgICAgcmV0dXJuIGluaXRpYWxpemVTeW5jaHJvbm91c2x5KCk7Ci0KLSAgICAv
LyBSZW1lbWJlciB0aGF0IHdlIHRyaWVkIHRvIGNyZWF0ZSB0aGlzIHBsdWctaW4gYXN5bmNocm9u
b3VzbHkgaW4gY2FzZSB3ZSBuZWVkIHRvIGNyZWF0ZSBpdCBzeW5jaHJvbm91c2x5IGxhdGVyLgot
ICAgIG1fd2FpdGluZ09uQXN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb24gPSB0cnVlOwotICAgIFBs
dWdpbkNyZWF0aW9uUGFyYW1ldGVycyBjcmVhdGlvblBhcmFtZXRlcnMoKm1fcGVuZGluZ1BsdWdp
bkNyZWF0aW9uUGFyYW1ldGVycy5nZXQoKSk7Ci0gICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3NDb25uZWN0aW9uOjpDcmVhdGVQbHVnaW5Bc3lu
Y2hyb25vdXNseShjcmVhdGlvblBhcmFtZXRlcnMpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFBsdWdpblByb3h5OjpjYW5Jbml0aWFsaXplQXN5bmNo
cm9ub3VzbHkoKSBjb25zdAotewotICAgIHJldHVybiBjb250cm9sbGVyKCktPmFzeW5jaHJvbm91
c1BsdWdpbkluaXRpYWxpemF0aW9uRW5hYmxlZCgpICYmIChtX2Nvbm5lY3Rpb24tPnN1cHBvcnRz
QXN5bmNocm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRpb24oKSB8fCBjb250cm9sbGVyKCktPmFzeW5j
aHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uRW5hYmxlZEZvckFsbFBsdWdpbnMoKSk7Ci19Ci0K
LWJvb2wgUGx1Z2luUHJveHk6OmluaXRpYWxpemVTeW5jaHJvbm91c2x5KCkKLXsKLSAgICBBU1NF
UlQobV9wZW5kaW5nUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzKTsKLQotICAgIG1fcGVuZGluZ1Bs
dWdpbkNyZWF0aW9uUGFyYW1ldGVycy0+YXN5bmNocm9ub3VzQ3JlYXRpb25JbmNvbXBsZXRlID0g
bV93YWl0aW5nT25Bc3luY2hyb25vdXNJbml0aWFsaXphdGlvbjsKLSAgICBib29sIHJlc3VsdCA9
IGZhbHNlOwotICAgIGJvb2wgd2FudHNXaGVlbEV2ZW50cyA9IGZhbHNlOwotICAgIHVpbnQzMl90
IHJlbW90ZUxheWVyQ2xpZW50SUQgPSAwOwotICAgIAotICAgIFBsdWdpbkNyZWF0aW9uUGFyYW1l
dGVycyBwYXJhbWV0ZXJzKCptX3BlbmRpbmdQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMuZ2V0KCkp
OwotCi0gICAgaWYgKCFtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlByb2Nlc3NDb25uZWN0aW9uOjpDcmVhdGVQbHVnaW4ocGFyYW1ldGVycyksIE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luOjpSZXBseShyZXN1bHQsIHdh
bnRzV2hlZWxFdmVudHMsIHJlbW90ZUxheWVyQ2xpZW50SUQpLCAwKSB8fCAhcmVzdWx0KQotICAg
ICAgICBkaWRGYWlsVG9DcmVhdGVQbHVnaW5JbnRlcm5hbCgpOwotICAgIGVsc2UKLSAgICAgICAg
ZGlkQ3JlYXRlUGx1Z2luSW50ZXJuYWwod2FudHNXaGVlbEV2ZW50cywgcmVtb3RlTGF5ZXJDbGll
bnRJRCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBQbHVnaW5Qcm94eTo6
ZGlkQ3JlYXRlUGx1Z2luKGJvb2wgd2FudHNXaGVlbEV2ZW50cywgdWludDMyX3QgcmVtb3RlTGF5
ZXJDbGllbnRJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQotewotICAgIC8vIFdlIG1pZ2h0IGhhdmUgdHJpZWQgdG8gY3JlYXRlIHRoZSBwbHVnLWluIHN5
Y2hyb25vdXNseSB3aGlsZSB3YWl0aW5nIG9uIHRoZSBhc3luY2hyb25vdXMgcmVwbHksCi0gICAg
Ly8gaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQgaWdub3JlIHRoaXMgbWVzc2FnZS4KLSAgICBpZiAo
IW1fd2FpdGluZ09uQXN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb24pCi0gICAgICAgIHJldHVybiBj
b21wbGV0aW9uSGFuZGxlcigpOwotCi0gICAgZGlkQ3JlYXRlUGx1Z2luSW50ZXJuYWwod2FudHNX
aGVlbEV2ZW50cywgcmVtb3RlTGF5ZXJDbGllbnRJRCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKLX0KLQotdm9pZCBQbHVnaW5Qcm94eTo6ZGlkRmFpbFRvQ3JlYXRlUGx1Z2luKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICAvLyBXZSBtaWdo
dCBoYXZlIHRyaWVkIHRvIGNyZWF0ZSB0aGUgcGx1Zy1pbiBzeWNocm9ub3VzbHkgd2hpbGUgd2Fp
dGluZyBvbiB0aGUgYXN5bmNocm9ub3VzIHJlcGx5LAotICAgIC8vIGluIHdoaWNoIGNhc2Ugd2Ug
c2hvdWxkIGlnbm9yZSB0aGlzIG1lc3NhZ2UuCi0gICAgaWYgKCFtX3dhaXRpbmdPbkFzeW5jaHJv
bm91c0luaXRpYWxpemF0aW9uKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoKTsK
LQotICAgIGRpZEZhaWxUb0NyZWF0ZVBsdWdpbkludGVybmFsKCk7Ci0gICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm94eTo6ZGlkQ3JlYXRlUGx1Z2luSW50ZXJuYWwo
Ym9vbCB3YW50c1doZWVsRXZlbnRzLCB1aW50MzJfdCByZW1vdGVMYXllckNsaWVudElEKQotewot
ICAgIG1fd2FudHNXaGVlbEV2ZW50cyA9IHdhbnRzV2hlZWxFdmVudHM7Ci0gICAgbV9yZW1vdGVM
YXllckNsaWVudElEID0gcmVtb3RlTGF5ZXJDbGllbnRJRDsKLSAgICBtX2lzU3RhcnRlZCA9IHRy
dWU7Ci0gICAgY29udHJvbGxlcigpLT5kaWRJbml0aWFsaXplUGx1Z2luKCk7Ci0KLSAgICAvLyBX
aGV0aGVyIHN5bmNocm9ub3VzbHkgb3IgYXN5bmNocm9ub3VzbHksIHRoaXMgcGx1Zy1pbiB3YXMg
Y3JlYXRlZCBhbmQgd2Ugc2hvdWxkbid0IG5lZWQgdG8gcmVtZW1iZXIKLSAgICAvLyBhbnl0aGlu
ZyBhYm91dCBob3cuCi0gICAgbV9wZW5kaW5nUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzID0gbnVs
bHB0cjsKLSAgICBtX3dhaXRpbmdPbkFzeW5jaHJvbm91c0luaXRpYWxpemF0aW9uID0gZmFsc2U7
Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OmRpZEZhaWxUb0NyZWF0ZVBsdWdpbkludGVybmFsKCkK
LXsKLSAgICAvLyBDYWxsaW5nIG91dCB0byB0aGUgY29ubmVjdGlvbiBhbmQgdGhlIGNvbnRyb2xs
ZXIgY291bGQgcG90ZW50aWFsbHkgY2F1c2UgdGhlIHBsdWctaW4gcHJveHkgdG8gZ28gYXdheSwg
c28gcHJvdGVjdCBpdCBoZXJlLgotICAgIFJlZjxQbHVnaW5Qcm94eT4gcHJvdGVjdCgqdGhpcyk7
Ci0KLSAgICBtX2Nvbm5lY3Rpb24tPnJlbW92ZVBsdWdpblByb3h5KHRoaXMpOwotICAgIGNvbnRy
b2xsZXIoKS0+ZGlkRmFpbFRvSW5pdGlhbGl6ZVBsdWdpbigpOwotCi0gICAgLy8gV2hldGhlciBz
eW5jaHJvbm91c2x5IG9yIGFzeW5jaHJvbm91c2x5LCB0aGlzIHBsdWctaW4gZmFpbGVkIHRvIGNy
ZWF0ZSBhbmQgd2Ugc2hvdWxkbid0IG5lZWQgdG8gcmVtZW1iZXIKLSAgICAvLyBhbnl0aGluZyBh
Ym91dCBob3cuCi0gICAgbV9wZW5kaW5nUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzID0gbnVsbHB0
cjsKLSAgICBtX3dhaXRpbmdPbkFzeW5jaHJvbm91c0luaXRpYWxpemF0aW9uID0gZmFsc2U7Ci19
Ci0KLXZvaWQgUGx1Z2luUHJveHk6OmRlc3Ryb3koKQotewotICAgIG1faXNTdGFydGVkID0gZmFs
c2U7Ci0KLSAgICBpZiAoIW1fY29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
QWx0aG91Z2ggdGhpcyBtZXNzYWdlIGlzIHNlbnQgc3luY2hyb25vdXNseSwgdGhlIFBsdWdpbiBw
cm9jZXNzIHJlcGxpZXMgaW1tZWRpYXRlbHkgKGJlZm9yZSBwZXJmb3JtaW5nIGFueSB0YXNrcykg
c28gdGhpcyBpcyBvbmx5IHdhaXRpbmcgZm9yCi0gICAgLy8gY29uZmlybWF0aW9uIHRoYXQgdGhl
IFBsdWdpbiBwcm9jZXNzIHJlY2VpdmVkIHRoZSBEZXN0cm95UGx1Z2luIG1lc3NhZ2UuCi0gICAg
bV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
Q29ubmVjdGlvbjo6RGVzdHJveVBsdWdpbihtX3BsdWdpbkluc3RhbmNlSUQsIG1fd2FpdGluZ09u
QXN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb24pLCBNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rp
b246OkRlc3Ryb3lQbHVnaW46OlJlcGx5KCksIDAsIDFfcyk7Ci0gICAgbV9jb25uZWN0aW9uLT5y
ZW1vdmVQbHVnaW5Qcm94eSh0aGlzKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm94eTo6cGFpbnQoR3Jh
cGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkK
LXsKLSAgICBpZiAoIW5lZWRzQmFja2luZ1N0b3JlKCkgfHwgIW1fYmFja2luZ1N0b3JlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fcGx1Z2luQmFja2luZ1N0b3JlQ29udGFpbnNWYWxp
ZERhdGEpIHsKLSAgICAgICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1l
c3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OlBhaW50RW50aXJlUGx1Z2luKCksIE1lc3Nh
Z2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OlBhaW50RW50aXJlUGx1Z2luOjpSZXBseSgpLCBt
X3BsdWdpbkluc3RhbmNlSUQpOwotICAgIAotICAgICAgICAvLyBCbGl0IHRoZSBwbHVnLWluIGJh
Y2tpbmcgc3RvcmUgaW50byBvdXIgb3duIGJhY2tpbmcgc3RvcmUuCi0gICAgICAgIGF1dG8gZ3Jh
cGhpY3NDb250ZXh0ID0gbV9iYWNraW5nU3RvcmUtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwot
ICAgICAgICBpZiAoZ3JhcGhpY3NDb250ZXh0KSB7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQtPmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoY29udGVudHNTY2FsZUZhY3RvcigpKTsKLSAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9w
ZXJhdG9yOjpDb3B5KTsKLQotICAgICAgICAgICAgbV9wbHVnaW5CYWNraW5nU3RvcmUtPnBhaW50
KCpncmFwaGljc0NvbnRleHQsIGNvbnRlbnRzU2NhbGVGYWN0b3IoKSwgSW50UG9pbnQoKSwgcGx1
Z2luQm91bmRzKCkpOwotCi0gICAgICAgICAgICBtX3BsdWdpbkJhY2tpbmdTdG9yZUNvbnRhaW5z
VmFsaWREYXRhID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fYmFja2luZ1N0b3Jl
LT5wYWludChncmFwaGljc0NvbnRleHQsIGNvbnRlbnRzU2NhbGVGYWN0b3IoKSwgZGlydHlSZWN0
LmxvY2F0aW9uKCksIGRpcnR5UmVjdCk7Ci0KLSAgICBpZiAobV93YWl0aW5nRm9yUGFpbnRJblJl
c3BvbnNlVG9VcGRhdGUpIHsKLSAgICAgICAgbV93YWl0aW5nRm9yUGFpbnRJblJlc3BvbnNlVG9V
cGRhdGUgPSBmYWxzZTsKLSAgICAgICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6RGlkVXBkYXRlKCksIG1fcGx1Z2luSW5z
dGFuY2VJRCk7Ci0gICAgfQotfQotCi1ib29sIFBsdWdpblByb3h5OjpzdXBwb3J0c1NuYXBzaG90
dGluZygpIGNvbnN0Ci17Ci0gICAgaWYgKG1fd2FpdGluZ09uQXN5bmNocm9ub3VzSW5pdGlhbGl6
YXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgaXNTdXBwb3J0ZWQgPSBm
YWxzZTsKLSAgICBpZiAobV9jb25uZWN0aW9uICYmICFtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24o
KS0+c2VuZFN5bmMoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6U3VwcG9ydHNTbmFw
c2hvdHRpbmcoKSwgTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6U3VwcG9ydHNTbmFw
c2hvdHRpbmc6OlJlcGx5KGlzU3VwcG9ydGVkKSwgbV9wbHVnaW5JbnN0YW5jZUlEKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGlzU3VwcG9ydGVkOwotfQotCi1SZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBQbHVnaW5Qcm94eTo6c25hcHNob3QoKQotewotICAgIFNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlIHNuYXBzaG90U3RvcmVIYW5kbGU7Ci0gICAgbV9jb25uZWN0aW9uLT5j
b25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OlNu
YXBzaG90KCksIE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OlNuYXBzaG90OjpSZXBs
eShzbmFwc2hvdFN0b3JlSGFuZGxlKSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLQotICAgIGlmIChz
bmFwc2hvdFN0b3JlSGFuZGxlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIHJldHVybiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShzbmFwc2hvdFN0b3JlSGFuZGxlKTsK
LX0KLQotYm9vbCBQbHVnaW5Qcm94eTo6aXNUcmFuc3BhcmVudCgpCi17Ci0gICAgLy8gVGhpcyBz
aG91bGQgbmV2ZXIgYmUgY2FsbGVkIGZyb20gdGhlIHdlYiBwcm9jZXNzLgotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBQbHVnaW5Qcm94eTo6
d2FudHNXaGVlbEV2ZW50cygpCi17Ci0gICAgcmV0dXJuIG1fd2FudHNXaGVlbEV2ZW50czsKLX0K
LQotdm9pZCBQbHVnaW5Qcm94eTo6Z2VvbWV0cnlEaWRDaGFuZ2UoKQotewotICAgIEFTU0VSVCht
X2lzU3RhcnRlZCk7Ci0KLSAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBwbHVnaW5CYWNraW5n
U3RvcmVIYW5kbGU7Ci0KLSAgICBpZiAodXBkYXRlQmFja2luZ1N0b3JlKCkpIHsKLSAgICAgICAg
Ly8gQ3JlYXRlIGEgbmV3IHBsdWctaW4gYmFja2luZyBzdG9yZS4KLSAgICAgICAgbV9wbHVnaW5C
YWNraW5nU3RvcmUgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShtX2JhY2tpbmdT
dG9yZS0+c2l6ZSgpLCB7IH0pOwotICAgICAgICBpZiAoIW1fcGx1Z2luQmFja2luZ1N0b3JlKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIENyZWF0ZSBhIGhhbmRsZSB0byB0aGUg
cGx1Zy1pbiBiYWNraW5nIHN0b3JlIHNvIHdlIGNhbiBzZW5kIGl0IG92ZXIuCi0gICAgICAgIGlm
ICghbV9wbHVnaW5CYWNraW5nU3RvcmUtPmNyZWF0ZUhhbmRsZShwbHVnaW5CYWNraW5nU3RvcmVI
YW5kbGUpKSB7Ci0gICAgICAgICAgICBtX3BsdWdpbkJhY2tpbmdTdG9yZSA9IG51bGxwdHI7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBtX3BsdWdpbkJhY2tpbmdT
dG9yZUNvbnRhaW5zVmFsaWREYXRhID0gZmFsc2U7Ci0gICAgfQotCi0gICAgbV9jb25uZWN0aW9u
LT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6R2Vv
bWV0cnlEaWRDaGFuZ2UobV9wbHVnaW5TaXplLCBtX2NsaXBSZWN0LCBtX3BsdWdpblRvUm9vdFZp
ZXdUcmFuc2Zvcm0sIGNvbnRlbnRzU2NhbGVGYWN0b3IoKSwgcGx1Z2luQmFja2luZ1N0b3JlSGFu
ZGxlKSwgbV9wbHVnaW5JbnN0YW5jZUlELCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2Fn
ZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6Omdl
b21ldHJ5RGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIGNvbnN0IEludFJlY3Qm
IGNsaXBSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zv
cm0pCi17Ci0gICAgaWYgKHBsdWdpblNpemUgPT0gbV9wbHVnaW5TaXplICYmIG1fY2xpcFJlY3Qg
PT0gY2xpcFJlY3QgJiYgbV9wbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtID09IHBsdWdpblRvUm9v
dFZpZXdUcmFuc2Zvcm0pIHsKLSAgICAgICAgLy8gTm90aGluZyB0byBkby4KLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAKLSAgICBtX3BsdWdpblNpemUgPSBwbHVnaW5TaXplOwotICAgIG1f
Y2xpcFJlY3QgPSBjbGlwUmVjdDsKLSAgICBtX3BsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0gPSBw
bHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtOwotCi0gICAgZ2VvbWV0cnlEaWRDaGFuZ2UoKTsKLX0K
LQotdm9pZCBQbHVnaW5Qcm94eTo6dmlzaWJpbGl0eURpZENoYW5nZShib29sIGlzVmlzaWJsZSkK
LXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OlZpc2liaWxpdHlEaWRD
aGFuZ2UoaXNWaXNpYmxlKSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLX0KLQotdm9pZCBQbHVnaW5Q
cm94eTo6ZnJhbWVEaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCkKLXsKLSAgICBt
X2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxl
clByb3h5OjpGcmFtZURpZEZpbmlzaExvYWRpbmcocmVxdWVzdElEKSwgbV9wbHVnaW5JbnN0YW5j
ZUlEKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm94eTo6ZnJhbWVEaWRGYWlsKHVpbnQ2NF90IHJlcXVl
c3RJRCwgYm9vbCB3YXNDYW5jZWxsZWQpCi17Ci0gICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6RnJhbWVEaWRGYWlsKHJl
cXVlc3RJRCwgd2FzQ2FuY2VsbGVkKSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLX0KLQotdm9pZCBQ
bHVnaW5Qcm94eTo6ZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90IHJlcXVlc3RJRCwgY29u
c3QgV1RGOjpTdHJpbmcmIHJlc3VsdCkKLXsKLSAgICBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpEaWRFdmFsdWF0ZUphdmFT
Y3JpcHQocmVxdWVzdElELCByZXN1bHQpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwotfQotCi12b2lk
IFBsdWdpblByb3h5OjpzdHJlYW1XaWxsU2VuZFJlcXVlc3QodWludDY0X3Qgc3RyZWFtSUQsIGNv
bnN0IFVSTCYgcmVxdWVzdFVSTCwgY29uc3QgVVJMJiByZXNwb25zZVVSTCwgaW50IHJlc3BvbnNl
U3RhdHVzKQotewotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpQbHVnaW5Db250cm9sbGVyUHJveHk6OlN0cmVhbVdpbGxTZW5kUmVxdWVzdChzdHJlYW1JRCwg
cmVxdWVzdFVSTC5zdHJpbmcoKSwgcmVzcG9uc2VVUkwuc3RyaW5nKCksIHJlc3BvbnNlU3RhdHVz
KSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm94eTo6c3RyZWFtRGlk
UmVjZWl2ZVJlc3BvbnNlKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBVUkwmIHJlc3BvbnNlVVJM
LCB1aW50MzJfdCBzdHJlYW1MZW5ndGgsIHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0
IFdURjo6U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgV1RGOjpTdHJpbmcmIGhlYWRlcnMsIGNvbnN0
IFN0cmluZyYgLyogc3VnZ2VzdGVkRmlsZU5hbWUgKi8pCi17Ci0gICAgbV9jb25uZWN0aW9uLT5j
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6U3RyZWFt
RGlkUmVjZWl2ZVJlc3BvbnNlKHN0cmVhbUlELCByZXNwb25zZVVSTC5zdHJpbmcoKSwgc3RyZWFt
TGVuZ3RoLCBsYXN0TW9kaWZpZWRUaW1lLCBtaW1lVHlwZSwgaGVhZGVycyksIG1fcGx1Z2luSW5z
dGFuY2VJRCk7Ci19Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ci12b2lkIFBsdWdpblByb3h5OjpzdHJlYW1EaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBzdHJlYW1J
RCwgY29uc3QgdWludDhfdCogYnl0ZXMsIGludCBsZW5ndGgpCi17Ci0gICAgbV9jb25uZWN0aW9u
LT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6U3Ry
ZWFtRGlkUmVjZWl2ZURhdGEoc3RyZWFtSUQsIElQQzo6RGF0YVJlZmVyZW5jZShieXRlcywgbGVu
Z3RoKSksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OnN0cmVh
bURpZEZpbmlzaExvYWRpbmcodWludDY0X3Qgc3RyZWFtSUQpCi17Ci0gICAgbV9jb25uZWN0aW9u
LT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6U3Ry
ZWFtRGlkRmluaXNoTG9hZGluZyhzdHJlYW1JRCksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0K
LXZvaWQgUGx1Z2luUHJveHk6OnN0cmVhbURpZEZhaWwodWludDY0X3Qgc3RyZWFtSUQsIGJvb2wg
d2FzQ2FuY2VsbGVkKQotewotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OlN0cmVhbURpZEZhaWwoc3RyZWFtSUQsIHdh
c0NhbmNlbGxlZCksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6
Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVSZXNwb25zZShjb25zdCBVUkwmIHJlc3BvbnNlVVJMLCB1
aW50MzJfdCBzdHJlYW1MZW5ndGgsICB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBX
VEY6OlN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFdURjo6U3RyaW5nJiBoZWFkZXJzLCBjb25zdCBT
dHJpbmcmIC8qIHN1Z2dlc3RlZEZpbGVOYW1lICovKQotewotICAgIG1fY29ubmVjdGlvbi0+Y29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6Ok1hbnVhbFN0
cmVhbURpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZVVSTC5zdHJpbmcoKSwgc3RyZWFtTGVuZ3Ro
LCBsYXN0TW9kaWZpZWRUaW1lLCBtaW1lVHlwZSwgaGVhZGVycyksIG1fcGx1Z2luSW5zdGFuY2VJ
RCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKGNv
bnN0IHVpbnQ4X3QqIGJ5dGVzLCBpbnQgbGVuZ3RoKQotewotICAgIG1fY29ubmVjdGlvbi0+Y29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6Ok1hbnVhbFN0
cmVhbURpZFJlY2VpdmVEYXRhKElQQzo6RGF0YVJlZmVyZW5jZShieXRlcywgbGVuZ3RoKSksIG1f
cGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6Om1hbnVhbFN0cmVhbURp
ZEZpbmlzaExvYWRpbmcoKQotewotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6Ok1hbnVhbFN0cmVhbURpZEZpbmlzaExv
YWRpbmcoKSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm94eTo6bWFu
dWFsU3RyZWFtRGlkRmFpbChib29sIHdhc0NhbmNlbGxlZCkKLXsKLSAgICBtX2Nvbm5lY3Rpb24t
PmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpNYW51
YWxTdHJlYW1EaWRGYWlsKHdhc0NhbmNlbGxlZCksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0K
LWJvb2wgUGx1Z2luUHJveHk6OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYg
bW91c2VFdmVudCkKLXsKLSAgICBpZiAobV93YWl0aW5nT25Bc3luY2hyb25vdXNJbml0aWFsaXph
dGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9jb25uZWN0aW9uLT5jb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6SGFuZGxlTW91c2VF
dmVudChtb3VzZUV2ZW50KSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBQbHVnaW5Qcm94eTo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2
ZW50JiB3aGVlbEV2ZW50KQotewotICAgIGlmIChtX3dhaXRpbmdPbkFzeW5jaHJvbm91c0luaXRp
YWxpemF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIGhhbmRsZWQgPSBm
YWxzZTsKLSAgICBpZiAoIW1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNz
YWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpIYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQp
LCBNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpIYW5kbGVXaGVlbEV2ZW50OjpSZXBs
eShoYW5kbGVkKSwgbV9wbHVnaW5JbnN0YW5jZUlEKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmV0dXJuIGhhbmRsZWQ7Ci19Ci0KLWJvb2wgUGx1Z2luUHJveHk6OmhhbmRsZU1vdXNl
RW50ZXJFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUVudGVyRXZlbnQpCi17Ci0gICAg
aWYgKG1fd2FpdGluZ09uQXN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb24pCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwotICAgIGlmICghbV9jb25uZWN0
aW9uLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJv
eHk6OkhhbmRsZU1vdXNlRW50ZXJFdmVudChtb3VzZUVudGVyRXZlbnQpLCBNZXNzYWdlczo6UGx1
Z2luQ29udHJvbGxlclByb3h5OjpIYW5kbGVNb3VzZUVudGVyRXZlbnQ6OlJlcGx5KGhhbmRsZWQp
LCBtX3BsdWdpbkluc3RhbmNlSUQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAg
cmV0dXJuIGhhbmRsZWQ7Ci19Ci0KLWJvb2wgUGx1Z2luUHJveHk6OmhhbmRsZU1vdXNlTGVhdmVF
dmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUxlYXZlRXZlbnQpCi17Ci0gICAgaWYgKG1f
d2FpdGluZ09uQXN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb24pCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwotICAgIGlmICghbV9jb25uZWN0aW9uLT5j
b25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6Okhh
bmRsZU1vdXNlTGVhdmVFdmVudChtb3VzZUxlYXZlRXZlbnQpLCBNZXNzYWdlczo6UGx1Z2luQ29u
dHJvbGxlclByb3h5OjpIYW5kbGVNb3VzZUxlYXZlRXZlbnQ6OlJlcGx5KGhhbmRsZWQpLCBtX3Bs
dWdpbkluc3RhbmNlSUQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJu
IGhhbmRsZWQ7Ci19Ci0KLWJvb2wgUGx1Z2luUHJveHk6OmhhbmRsZUNvbnRleHRNZW51RXZlbnQo
Y29uc3QgV2ViTW91c2VFdmVudCYpCi17Ci0gICAgLy8gV2UgZG9uJ3Qga25vdyBpZiB0aGUgcGx1
Zy1pbiBoYXMgaGFuZGxlZCBtb3VzZWRvd24gZXZlbnQgYnkgZGlzcGxheWluZyBhIGNvbnRleHQg
bWVudSwgc28gd2UgbmV2ZXIgd2FudCBXZWJLaXQgdG8gc2hvdyBhIGRlZmF1bHQgb25lLgotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFBsdWdpblByb3h5OjpoYW5kbGVLZXlib2FyZEV2ZW50
KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQpCi17Ci0gICAgaWYgKG1fd2Fp
dGluZ09uQXN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwotICAgIGlmICghbV9jb25uZWN0aW9uLT5jb25u
ZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OkhhbmRs
ZUtleWJvYXJkRXZlbnQoa2V5Ym9hcmRFdmVudCksIE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVy
UHJveHk6OkhhbmRsZUtleWJvYXJkRXZlbnQ6OlJlcGx5KGhhbmRsZWQpLCBtX3BsdWdpbkluc3Rh
bmNlSUQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIGhhbmRsZWQ7
Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OnNldEZvY3VzKGJvb2wgaGFzRm9jdXMpCi17Ci0gICAg
bV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xs
ZXJQcm94eTo6U2V0Rm9jdXMoaGFzRm9jdXMpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwotfQotCi1i
b29sIFBsdWdpblByb3h5OjpoYW5kbGVFZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1h
bmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KQotewotICAgIGlmIChtX3dhaXRpbmdPbkFz
eW5jaHJvbm91c0luaXRpYWxpemF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBi
b29sIGhhbmRsZWQgPSBmYWxzZTsKLSAgICBpZiAoIW1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpIYW5kbGVFZGl0aW5n
Q29tbWFuZChjb21tYW5kTmFtZSwgYXJndW1lbnQpLCBNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxl
clByb3h5OjpIYW5kbGVFZGl0aW5nQ29tbWFuZDo6UmVwbHkoaGFuZGxlZCksIG1fcGx1Z2luSW5z
dGFuY2VJRCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXR1cm4gaGFuZGxl
ZDsKLX0KLSAgICAKLWJvb2wgUGx1Z2luUHJveHk6OmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNv
bnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCi17Ci0gICAgaWYgKG1fd2FpdGluZ09uQXN5bmNocm9u
b3VzSW5pdGlhbGl6YXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgZW5h
YmxlZCA9IGZhbHNlOwotICAgIGlmICghbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmRT
eW5jKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OklzRWRpdGluZ0NvbW1hbmRFbmFi
bGVkKGNvbW1hbmROYW1lKSwgTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6SXNFZGl0
aW5nQ29tbWFuZEVuYWJsZWQ6OlJlcGx5KGVuYWJsZWQpLCBtX3BsdWdpbkluc3RhbmNlSUQpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIGVuYWJsZWQ7Ci19Ci0gICAg
Ci1ib29sIFBsdWdpblByb3h5OjpoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkgY29uc3QKLXsKLSAg
ICBpZiAobV93YWl0aW5nT25Bc3luY2hyb25vdXNJbml0aWFsaXphdGlvbikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0gICAgaWYgKCFtX2Nvbm5l
Y3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQ
cm94eTo6SGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpLCBNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxl
clByb3h5OjpIYW5kbGVzUGFnZVNjYWxlRmFjdG9yOjpSZXBseShoYW5kbGVkKSwgbV9wbHVnaW5J
bnN0YW5jZUlEKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiBoYW5k
bGVkOwotfQotCi1ib29sIFBsdWdpblByb3h5OjpyZXF1aXJlc1VuaWZpZWRTY2FsZUZhY3Rvcigp
IGNvbnN0Ci17Ci0gICAgaWYgKG1fd2FpdGluZ09uQXN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb24p
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgcmVxdWlyZWQgPSBmYWxzZTsKLSAg
ICBpZiAoIW1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6UGx1
Z2luQ29udHJvbGxlclByb3h5OjpSZXF1aXJlc1VuaWZpZWRTY2FsZUZhY3RvcigpLCBNZXNzYWdl
czo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpSZXF1aXJlc1VuaWZpZWRTY2FsZUZhY3Rvcjo6UmVw
bHkocmVxdWlyZWQpLCBtX3BsdWdpbkluc3RhbmNlSUQpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCi0gICAgcmV0dXJuIHJlcXVpcmVkOwotfQotCi1OUE9iamVjdCogUGx1Z2luUHJveHk6
OnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpCi17Ci0gICAgLy8gU2VuZGluZyB0aGUgc3luY2hy
b25vdXMgTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6R2V0UGx1Z2luU2NyaXB0YWJs
ZU5QT2JqZWN0IG1lc3NhZ2UgY2FuIGNhdXNlIHVzIHRvIGRpc3BhdGNoIGFuCi0gICAgLy8gaW5j
b21pbmcgc3luY2hyb25vdXMgbWVzc2FnZSB0aGF0IGVuZHMgdXAgZGVzdHJveWluZyB0aGUgUGx1
Z2luUHJveHkgb2JqZWN0LgotICAgIFBsdWdpbkNvbnRyb2xsZXI6OlBsdWdpbkRlc3RydWN0aW9u
UHJvdGVjdG9yIHByb3RlY3Rvcihjb250cm9sbGVyKCkpOwotCi0gICAgdWludDY0X3QgcGx1Z2lu
U2NyaXB0YWJsZU5QT2JqZWN0SUQgPSAwOwotICAgIAotICAgIGlmICghbV9jb25uZWN0aW9uLT5j
b25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6Okdl
dFBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpLCBNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclBy
b3h5OjpHZXRQbHVnaW5TY3JpcHRhYmxlTlBPYmplY3Q6OlJlcGx5KHBsdWdpblNjcmlwdGFibGVO
UE9iamVjdElEKSwgbV9wbHVnaW5JbnN0YW5jZUlEKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBpZiAoIXBsdWdpblNjcmlwdGFibGVOUE9iamVjdElEKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIHJldHVybiBtX2Nvbm5lY3Rpb24tPm5wUmVtb3RlT2JqZWN0TWFwKCktPmNyZWF0ZU5QT2Jq
ZWN0UHJveHkocGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0SUQsIHRoaXMpOwotfQotCi12b2lkIFBs
dWdpblByb3h5Ojp3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCBoYXNGb2N1cykKLXsKLSAgICBtX2Nv
bm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclBy
b3h5OjpXaW5kb3dGb2N1c0NoYW5nZWQoaGFzRm9jdXMpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwot
fQotCi12b2lkIFBsdWdpblByb3h5Ojp3aW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChib29sIGlzVmlz
aWJsZSkKLXsKLSAgICBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
UGx1Z2luQ29udHJvbGxlclByb3h5OjpXaW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChpc1Zpc2libGUp
LCBtX3BsdWdpbkluc3RhbmNlSUQpOwotfQotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi12b2lkIFBs
dWdpblByb3h5Ojp3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMpCi17Ci0gICAgbV9jb25uZWN0aW9uLT5j
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6V2luZG93
QW5kVmlld0ZyYW1lc0NoYW5nZWQod2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCB2aWV3
RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLX0KLXVpbnQ2
NF90IFBsdWdpblByb3h5OjpwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcGx1Z2luSW5zdGFuY2VJRDsKLX0KLQotdm9pZCBQbHVnaW5Qcm94
eTo6c2VuZENvbXBsZXhUZXh0SW5wdXQoY29uc3QgU3RyaW5nJiB0ZXh0SW5wdXQpCi17Ci0gICAg
bV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xs
ZXJQcm94eTo6U2VuZENvbXBsZXhUZXh0SW5wdXQodGV4dElucHV0KSwgbV9wbHVnaW5JbnN0YW5j
ZUlEKTsKLX0KLSNlbmRpZgotCi12b2lkIFBsdWdpblByb3h5Ojpjb250ZW50c1NjYWxlRmFjdG9y
Q2hhbmdlZChmbG9hdCkKLXsKLSAgICBnZW9tZXRyeURpZENoYW5nZSgpOwotfQotCi12b2lkIFBs
dWdpblByb3h5OjpzdG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5nZWQoYm9vbCBpc1N0b3JhZ2VCbG9j
a2luZ0VuYWJsZWQpCi17Ci0gICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6U3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2Vk
KGlzU3RvcmFnZUJsb2NraW5nRW5hYmxlZCksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0KLXZv
aWQgUGx1Z2luUHJveHk6OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZChib29sIGlzUHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZCkKLXsKLSAgICBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpQcml2YXRlQnJvd3NpbmdTdGF0ZUNo
YW5nZWQoaXNQcml2YXRlQnJvd3NpbmdFbmFibGVkKSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLX0K
LQotdm9pZCBQbHVnaW5Qcm94eTo6bXV0ZWRTdGF0ZUNoYW5nZWQoYm9vbCBpc011dGVkKQotewot
ICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Db250
cm9sbGVyUHJveHk6Ok11dGVkU3RhdGVDaGFuZ2VkKGlzTXV0ZWQpLCBtX3BsdWdpbkluc3RhbmNl
SUQpOwotfQotCi1ib29sIFBsdWdpblByb3h5OjpnZXRGb3JtVmFsdWUoU3RyaW5nJiBmb3JtVmFs
dWUpCi17Ci0gICAgYm9vbCByZXR1cm5WYWx1ZTsKLSAgICBpZiAoIW1fY29ubmVjdGlvbi0+Y29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpHZXRG
b3JtVmFsdWUoKSwgTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6R2V0Rm9ybVZhbHVl
OjpSZXBseShyZXR1cm5WYWx1ZSwgZm9ybVZhbHVlKSwgbV9wbHVnaW5JbnN0YW5jZUlEKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHJldHVyblZhbHVlOwotfQotCi1ib29s
IFBsdWdpblByb3h5OjpoYW5kbGVTY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxh
cml0eSkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVNjcm9sbGJhciogUGx1Z2luUHJveHk6
Omhvcml6b250YWxTY3JvbGxiYXIoKQotewotICAgIHJldHVybiAwOwotfQotCi1TY3JvbGxiYXIq
IFBsdWdpblByb3h5Ojp2ZXJ0aWNhbFNjcm9sbGJhcigpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LXZvaWQgUGx1Z2luUHJveHk6OmxvYWRVUkwodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IFN0cmluZyYgdGFyZ2V0
LCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJGaWVsZHMsIGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYgaHR0cEJvZHksIGJvb2wgYWxsb3dQb3B1cHMpCi17Ci0gICAgY29udHJvbGxlcigpLT5sb2Fk
VVJMKHJlcXVlc3RJRCwgbWV0aG9kLCB1cmxTdHJpbmcsIHRhcmdldCwgaGVhZGVyRmllbGRzLCBo
dHRwQm9keSwgYWxsb3dQb3B1cHMpOwotfQotCi12b2lkIFBsdWdpblByb3h5Ojpwcm94aWVzRm9y
VVJMKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmlu
Zyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoY29udHJv
bGxlcigpLT5wcm94aWVzRm9yVVJMKHVybFN0cmluZykpOwotfQotCi12b2lkIFBsdWdpblByb3h5
Ojpjb29raWVzRm9yVVJMKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFN0cmluZyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgY29tcGxldGlvbkhh
bmRsZXIoY29udHJvbGxlcigpLT5jb29raWVzRm9yVVJMKHVybFN0cmluZykpOwotfQotCi12b2lk
IFBsdWdpblByb3h5OjpzZXRDb29raWVzRm9yVVJMKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBj
b25zdCBTdHJpbmcmIGNvb2tpZVN0cmluZykKLXsKLSAgICBjb250cm9sbGVyKCktPnNldENvb2tp
ZXNGb3JVUkwodXJsU3RyaW5nLCBjb29raWVTdHJpbmcpOwotfQotCi12b2lkIFBsdWdpblByb3h5
OjpnZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9u
U3BhY2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCByZXR1cm5WYWx1ZSwgU3RyaW5nIHVz
ZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIFN0
cmluZyB1c2VybmFtZTsKLSAgICBTdHJpbmcgcGFzc3dvcmQ7Ci0gICAgYm9vbCByZXR1cm5WYWx1
ZSA9IGNvbnRyb2xsZXIoKS0+Z2V0QXV0aGVudGljYXRpb25JbmZvKHByb3RlY3Rpb25TcGFjZSwg
dXNlcm5hbWUsIHBhc3N3b3JkKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSwg
dXNlcm5hbWUsIHBhc3N3b3JkKTsKLX0KLQotZmxvYXQgUGx1Z2luUHJveHk6OmNvbnRlbnRzU2Nh
bGVGYWN0b3IoKQotewotICAgIHJldHVybiBjb250cm9sbGVyKCktPmNvbnRlbnRzU2NhbGVGYWN0
b3IoKTsKLX0KLQotYm9vbCBQbHVnaW5Qcm94eTo6dXBkYXRlQmFja2luZ1N0b3JlKCkKLXsKLSAg
ICBpZiAobV9wbHVnaW5TaXplLmlzRW1wdHkoKSB8fCAhbmVlZHNCYWNraW5nU3RvcmUoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplID0gbV9w
bHVnaW5TaXplOwotICAgIGJhY2tpbmdTdG9yZVNpemUuc2NhbGUoY29udGVudHNTY2FsZUZhY3Rv
cigpKTsKLQotICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgewotICAgICAgICBpZiAobV9iYWNraW5n
U3RvcmUtPnNpemUoKSA9PSBiYWNraW5nU3RvcmVTaXplKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7IC8vIEdpdmUgbWFsbG9jIGEg
Y2hhbmNlIHRvIHJlY3ljbGUgb3VyIGJhY2tpbmcgc3RvcmUuCi0gICAgfQotCi0gICAgbV9iYWNr
aW5nU3RvcmUgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShiYWNraW5nU3RvcmVTaXplLCB7IH0p
OwotICAgIHJldHVybiAhIW1fYmFja2luZ1N0b3JlOwotfQotCi11aW50NjRfdCBQbHVnaW5Qcm94
eTo6d2luZG93TlBPYmplY3RJRCgpCi17Ci0gICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE5QT2Jq
ZWN0ID0gY29udHJvbGxlcigpLT53aW5kb3dTY3JpcHROUE9iamVjdCgpOwotICAgIGlmICghd2lu
ZG93U2NyaXB0TlBPYmplY3QpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgdWludDY0X3Qgd2lu
ZG93TlBPYmplY3RJRCA9IG1fY29ubmVjdGlvbi0+bnBSZW1vdGVPYmplY3RNYXAoKS0+cmVnaXN0
ZXJOUE9iamVjdCh3aW5kb3dTY3JpcHROUE9iamVjdCwgdGhpcyk7Ci0gICAgcmVsZWFzZU5QT2Jq
ZWN0KHdpbmRvd1NjcmlwdE5QT2JqZWN0KTsKLQotICAgIHJldHVybiB3aW5kb3dOUE9iamVjdElE
OwotfQotCi1JbnRSZWN0IFBsdWdpblByb3h5OjpwbHVnaW5Cb3VuZHMoKQotewotICAgIHJldHVy
biBJbnRSZWN0KEludFBvaW50KCksIG1fcGx1Z2luU2l6ZSk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJv
eHk6OmdldFBsdWdpbkVsZW1lbnROUE9iamVjdChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2
NF90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBOUE9iamVjdCogcGx1Z2luRWxlbWVu
dE5QT2JqZWN0ID0gY29udHJvbGxlcigpLT5wbHVnaW5FbGVtZW50TlBPYmplY3QoKTsKLSAgICBp
ZiAoIXBsdWdpbkVsZW1lbnROUE9iamVjdCkKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5k
bGVyKDApOwotCi0gICAgdWludDY0X3QgcGx1Z2luRWxlbWVudE5QT2JqZWN0SUQgPSBtX2Nvbm5l
Y3Rpb24tPm5wUmVtb3RlT2JqZWN0TWFwKCktPnJlZ2lzdGVyTlBPYmplY3QocGx1Z2luRWxlbWVu
dE5QT2JqZWN0LCB0aGlzKTsKLSAgICByZWxlYXNlTlBPYmplY3QocGx1Z2luRWxlbWVudE5QT2Jq
ZWN0KTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihwbHVnaW5FbGVtZW50TlBPYmplY3RJRCk7Ci19
Ci0KLXZvaWQgUGx1Z2luUHJveHk6OmV2YWx1YXRlKGNvbnN0IE5QVmFyaWFudERhdGEmIG5wT2Jq
ZWN0QXNWYXJpYW50RGF0YSwgY29uc3QgU3RyaW5nJiBzY3JpcHRTdHJpbmcsIGJvb2wgYWxsb3dQ
b3B1cHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCByZXR1cm5WYWx1ZSwgTlBWYXJpYW50
RGF0YSYmIHJlc3VsdERhdGEpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIFBsdWdpbkNv
bnRyb2xsZXI6OlBsdWdpbkRlc3RydWN0aW9uUHJvdGVjdG9yIHByb3RlY3Rvcihjb250cm9sbGVy
KCkpOwotCi0gICAgTlBWYXJpYW50IG5wT2JqZWN0QXNWYXJpYW50ID0gbV9jb25uZWN0aW9uLT5u
cFJlbW90ZU9iamVjdE1hcCgpLT5ucFZhcmlhbnREYXRhVG9OUFZhcmlhbnQobnBPYmplY3RBc1Zh
cmlhbnREYXRhLCB0aGlzKTsKLSAgICBpZiAoIU5QVkFSSUFOVF9JU19PQkpFQ1QobnBPYmplY3RB
c1ZhcmlhbnQpIHx8ICEoTlBWQVJJQU5UX1RPX09CSkVDVChucE9iamVjdEFzVmFyaWFudCkpKQot
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UsIHsgfSk7Ci0KLSAgICBOUFZh
cmlhbnQgcmVzdWx0OwotICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBjb250cm9sbGVyKCktPmV2YWx1
YXRlKE5QVkFSSUFOVF9UT19PQkpFQ1QobnBPYmplY3RBc1ZhcmlhbnQpLCBzY3JpcHRTdHJpbmcs
ICZyZXN1bHQsIGFsbG93UG9wdXBzKTsKLSAgICBpZiAoIXJldHVyblZhbHVlKQotICAgICAgICBy
ZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UsIHsgfSk7Ci0KLSAgICAvLyBDb252ZXJ0IHRo
ZSBOUFZhcmlhbnQgdG8gYW4gTlBWYXJpYW50RGF0YS4KLSAgICBOUFZhcmlhbnREYXRhIHJlc3Vs
dERhdGEgPSBtX2Nvbm5lY3Rpb24tPm5wUmVtb3RlT2JqZWN0TWFwKCktPm5wVmFyaWFudFRvTlBW
YXJpYW50RGF0YShyZXN1bHQsIHRoaXMpOwotICAgIAotICAgIC8vIEFuZCByZWxlYXNlIHRoZSBy
ZXN1bHQuCi0gICAgcmVsZWFzZU5QVmFyaWFudFZhbHVlKCZyZXN1bHQpOwotICAgIHJlbGVhc2VO
UFZhcmlhbnRWYWx1ZSgmbnBPYmplY3RBc1ZhcmlhbnQpOwotICAgIAotICAgIGNvbXBsZXRpb25I
YW5kbGVyKHJldHVyblZhbHVlLCBXVEZNb3ZlKHJlc3VsdERhdGEpKTsKLX0KLQotdm9pZCBQbHVn
aW5Qcm94eTo6c2V0UGx1Z2luSXNQbGF5aW5nQXVkaW8oYm9vbCBwbHVnaW5Jc1BsYXlpbmdBdWRp
bykKLXsKLSAgICBjb250cm9sbGVyKCktPnNldFBsdWdpbklzUGxheWluZ0F1ZGlvKHBsdWdpbklz
UGxheWluZ0F1ZGlvKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm94eTo6Y29udGludWVTdHJlYW1Mb2Fk
KHVpbnQ2NF90IHN0cmVhbUlEKQotewotICAgIGNvbnRyb2xsZXIoKS0+Y29udGludWVTdHJlYW1M
b2FkKHN0cmVhbUlEKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm94eTo6Y2FuY2VsU3RyZWFtTG9hZCh1
aW50NjRfdCBzdHJlYW1JRCkKLXsKLSAgICBjb250cm9sbGVyKCktPmNhbmNlbFN0cmVhbUxvYWQo
c3RyZWFtSUQpOwotfQotCi12b2lkIFBsdWdpblByb3h5OjpjYW5jZWxNYW51YWxTdHJlYW1Mb2Fk
KCkKLXsKLSAgICBjb250cm9sbGVyKCktPmNhbmNlbE1hbnVhbFN0cmVhbUxvYWQoKTsKLX0KLQot
dm9pZCBQbHVnaW5Qcm94eTo6c2V0U3RhdHVzYmFyVGV4dChjb25zdCBTdHJpbmcmIHN0YXR1c2Jh
clRleHQpCi17Ci0gICAgY29udHJvbGxlcigpLT5zZXRTdGF0dXNiYXJUZXh0KHN0YXR1c2JhclRl
eHQpOwotfQotCi0jaWYgUExBVEZPUk0oWDExKQotdm9pZCBQbHVnaW5Qcm94eTo6Y3JlYXRlUGx1
Z2luQ29udGFpbmVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDY0X3Qgd2luZG93SUQpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGNvbXBsZXRpb25IYW5kbGVyKGNvbnRyb2xsZXIo
KS0+Y3JlYXRlUGx1Z2luQ29udGFpbmVyKCkpOwotfQotCi12b2lkIFBsdWdpblByb3h5Ojp3aW5k
b3dlZFBsdWdpbkdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZyYW1l
UmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QsIHVpbnQ2NF90IHdpbmRvd0lE
KQotewotICAgIGNvbnRyb2xsZXIoKS0+d2luZG93ZWRQbHVnaW5HZW9tZXRyeURpZENoYW5nZShm
cmFtZVJlY3QsIGNsaXBSZWN0LCB3aW5kb3dJRCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6Ondp
bmRvd2VkUGx1Z2luVmlzaWJpbGl0eURpZENoYW5nZShib29sIGlzVmlzaWJsZSwgdWludDY0X3Qg
d2luZG93SUQpCi17Ci0gICAgY29udHJvbGxlcigpLT53aW5kb3dlZFBsdWdpblZpc2liaWxpdHlE
aWRDaGFuZ2UoaXNWaXNpYmxlLCB3aW5kb3dJRCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBQbHVnaW5Q
cm94eTo6dXBkYXRlKGNvbnN0IEludFJlY3QmIHBhaW50ZWRSZWN0KQotewotICAgIGlmIChwYWlu
dGVkUmVjdCA9PSBwbHVnaW5Cb3VuZHMoKSkKLSAgICAgICAgbV9wbHVnaW5CYWNraW5nU3RvcmVD
b250YWluc1ZhbGlkRGF0YSA9IHRydWU7Ci0KLSAgICBpZiAobV9iYWNraW5nU3RvcmUpIHsKLSAg
ICAgICAgLy8gQmxpdCB0aGUgcGx1Zy1pbiBiYWNraW5nIHN0b3JlIGludG8gb3VyIG93biBiYWNr
aW5nIHN0b3JlLgotICAgICAgICBhdXRvIGdyYXBoaWNzQ29udGV4dCA9IG1fYmFja2luZ1N0b3Jl
LT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKLSAgICAgICAgaWYgKGdyYXBoaWNzQ29udGV4dCkg
ewotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hcHBseURldmljZVNjYWxlRmFjdG9yKGNv
bnRlbnRzU2NhbGVGYWN0b3IoKSk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldENv
bXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6Q29weSk7Ci0gICAgICAgICAgICBt
X3BsdWdpbkJhY2tpbmdTdG9yZS0+cGFpbnQoKmdyYXBoaWNzQ29udGV4dCwgY29udGVudHNTY2Fs
ZUZhY3RvcigpLCBwYWludGVkUmVjdC5sb2NhdGlvbigpLCBwYWludGVkUmVjdCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLyBBc2sgdGhlIGNvbnRyb2xsZXIgdG8gaW52YWxpZGF0ZSB0aGUg
cmVjdCBmb3IgdXMuCi0gICAgbV93YWl0aW5nRm9yUGFpbnRJblJlc3BvbnNlVG9VcGRhdGUgPSB0
cnVlOwotICAgIGNvbnRyb2xsZXIoKS0+aW52YWxpZGF0ZShwYWludGVkUmVjdCk7Ci19Ci0KLUlu
dFBvaW50IFBsdWdpblByb3h5Ojpjb252ZXJ0VG9Sb290Vmlldyhjb25zdCBJbnRQb2ludCYgcG9p
bnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybS5tYXBQ
b2ludChwb2ludCk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IFBsdWdpblBy
b3h5OjpsaXZlUmVzb3VyY2VEYXRhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94
eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjFiMzllYWI3ZGFlMDgxNjhkZDNh
NzM4ZmVkMmIwZGMwNzE0NGIwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmgK
KysrIC9kZXYvbnVsbApAQCAtMSwyMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJD
b25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiUGx1Z2luLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vz
cy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQWZmaW5lVHJhbnNmb3JtLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9JbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgotI2lu
Y2x1ZGUgPG1lbW9yeT4KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLU9CSkNfQ0xBU1MgQ0FMYXllcjsKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0gICAgY2xhc3MgSFRUUEhlYWRlck1hcDsKLSAgICBjbGFzcyBQcm90ZWN0aW9uU3BhY2U7
Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBTaGFyZWFibGVCaXRtYXA7Ci1jbGFz
cyBOUFZhcmlhbnREYXRhOwotY2xhc3MgUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb247Ci0KLXN0cnVj
dCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnM7Ci0KLWNsYXNzIFBsdWdpblByb3h5IDogcHVibGlj
IFBsdWdpbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxQbHVnaW5Qcm94eT4gY3JlYXRlKHVp
bnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbik7Ci0gICAgflBsdWdpblByb3h5KCk7Ci0KLSAgICB1
aW50NjRfdCBwbHVnaW5JbnN0YW5jZUlEKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5JbnN0YW5j
ZUlEOyB9Ci0gICAgdm9pZCBwbHVnaW5Qcm9jZXNzQ3Jhc2hlZCgpOwotCi0gICAgdm9pZCBkaWRS
ZWNlaXZlUGx1Z2luUHJveHlNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYp
OwotICAgIGJvb2wgZGlkUmVjZWl2ZVN5bmNQbHVnaW5Qcm94eU1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJiwgVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mKTsKLQotcHJpdmF0
ZToKLSAgICBleHBsaWNpdCBQbHVnaW5Qcm94eSh1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4p
OwotCi0gICAgLy8gUGx1Z2luCi0gICAgYm9vbCBpbml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMm
KSBvdmVycmlkZTsKLSAgICBib29sIGluaXRpYWxpemVTeW5jaHJvbm91c2x5KCk7Ci0KLSAgICB2
b2lkIGRlc3Ryb3koKSBvdmVycmlkZTsKLSAgICB2b2lkIHBhaW50KFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJpZGU7Ci0g
ICAgYm9vbCBzdXBwb3J0c1NuYXBzaG90dGluZygpIGNvbnN0IG92ZXJyaWRlOwotICAgIFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IHNuYXBzaG90KCkgb3ZlcnJpZGU7Ci0jaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgUGxhdGZvcm1MYXllciogcGx1Z2luTGF5ZXIoKSBvdmVycmlkZTsKLSNlbmRpZgot
ICAgIGJvb2wgaXNUcmFuc3BhcmVudCgpIG92ZXJyaWRlOwotICAgIGJvb2wgd2FudHNXaGVlbEV2
ZW50cygpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3Qs
IGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9y
bSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wgaXNWaXNpYmxl
KSBvdmVycmlkZTsKLSAgICB2b2lkIGZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCByZXF1
ZXN0SUQpIG92ZXJyaWRlOwotICAgIHZvaWQgZnJhbWVEaWRGYWlsKHVpbnQ2NF90IHJlcXVlc3RJ
RCwgYm9vbCB3YXNDYW5jZWxsZWQpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkRXZhbHVhdGVKYXZh
U2NyaXB0KHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgU3RyaW5nJiByZXN1bHQpIG92ZXJyaWRl
OwotICAgIHZvaWQgc3RyZWFtV2lsbFNlbmRSZXF1ZXN0KHVpbnQ2NF90IHN0cmVhbUlELCBjb25z
dCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IFVSTCYgcmVzcG9uc2VVUkwsIGludCByZXNwb25zZVN0
YXR1cykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UodWludDY0
X3Qgc3RyZWFtSUQsIGNvbnN0IFVSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVhbUxlbmd0
aCwgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29u
c3QgU3RyaW5nJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVOYW1lKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHN0cmVhbURpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IHN0cmVhbUlELCBj
b25zdCB1aW50OF90KiBieXRlcywgaW50IGxlbmd0aCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJl
YW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlEKSBvdmVycmlkZTsKLSAgICB2b2lk
IHN0cmVhbURpZEZhaWwodWludDY0X3Qgc3RyZWFtSUQsIGJvb2wgd2FzQ2FuY2VsbGVkKSBvdmVy
cmlkZTsKLSAgICB2b2lkIG1hbnVhbFN0cmVhbURpZFJlY2VpdmVSZXNwb25zZShjb25zdCBVUkwm
IHJlc3BvbnNlVVJMLCB1aW50MzJfdCBzdHJlYW1MZW5ndGgsIHVpbnQzMl90IGxhc3RNb2RpZmll
ZFRpbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgV1RGOjpTdHJpbmcmIGhl
YWRlcnMsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZU5hbWUpIG92ZXJyaWRlOwotICAgIHZv
aWQgbWFudWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEoY29uc3QgdWludDhfdCogYnl0ZXMsIGludCBs
ZW5ndGgpIG92ZXJyaWRlOwotICAgIHZvaWQgbWFudWFsU3RyZWFtRGlkRmluaXNoTG9hZGluZygp
IG92ZXJyaWRlOwotICAgIHZvaWQgbWFudWFsU3RyZWFtRGlkRmFpbChib29sIHdhc0NhbmNlbGxl
ZCkgb3ZlcnJpZGU7Ci0gICAgCi0gICAgYm9vbCBoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1v
dXNlRXZlbnQmKSBvdmVycmlkZTsKLSAgICBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgV2Vi
V2hlZWxFdmVudCYpIG92ZXJyaWRlOwotICAgIGJvb2wgaGFuZGxlTW91c2VFbnRlckV2ZW50KGNv
bnN0IFdlYk1vdXNlRXZlbnQmKSBvdmVycmlkZTsKLSAgICBib29sIGhhbmRsZU1vdXNlTGVhdmVF
dmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYW5kbGVDb250
ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKSBvdmVycmlkZTsKLSAgICBib29sIGhh
bmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgc2V0Rm9jdXMoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYW5kbGVFZGl0aW5nQ29t
bWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KSBv
dmVycmlkZTsKLSAgICBib29sIGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYg
Y29tbWFuZE5hbWUpIG92ZXJyaWRlOwotICAgIGJvb2wgc2hvdWxkQWxsb3dTY3JpcHRpbmcoKSBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgYm9vbCBzaG91bGRBbGxvd05hdmlnYXRpb25G
cm9tRHJhZ3MoKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIAotICAgIGJvb2wgaGFu
ZGxlc1BhZ2VTY2FsZUZhY3RvcigpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgcmVxdWlyZXNV
bmlmaWVkU2NhbGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKLSAgICAKLSAgICBOUE9iamVjdCog
cGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0KCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHdpbmRvd0Zv
Y3VzQ2hhbmdlZChib29sKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbmRvd1Zpc2liaWxpdHlDaGFu
Z2VkKGJvb2wpIG92ZXJyaWRlOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgdm9pZCB3aW5k
b3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFt
ZUluU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFtZUlu
V2luZG93Q29vcmRpbmF0ZXMpIG92ZXJyaWRlOwotICAgIHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhU
ZXh0SW5wdXRJZGVudGlmaWVyKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZW5kQ29tcGxl
eFRleHRJbnB1dChjb25zdCBTdHJpbmcmIHRleHRJbnB1dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
ZXRMYXllckhvc3RpbmdNb2RlKExheWVySG9zdGluZ01vZGUpIG92ZXJyaWRlOwotI2VuZGlmCi0K
LSAgICB2b2lkIGNvbnRlbnRzU2NhbGVGYWN0b3JDaGFuZ2VkKGZsb2F0KSBvdmVycmlkZTsKLSAg
ICB2b2lkIHN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZChib29sKSBvdmVycmlkZTsKLSAgICB2
b2lkIHByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZChib29sKSBvdmVycmlkZTsKLSAgICB2b2lk
IG11dGVkU3RhdGVDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwotICAgIGJvb2wgZ2V0Rm9ybVZhbHVl
KFN0cmluZyYgZm9ybVZhbHVlKSBvdmVycmlkZTsKLSAgICBib29sIGhhbmRsZVNjcm9sbChXZWJD
b3JlOjpTY3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5KSBvdmVycmlk
ZTsKLSAgICBXZWJDb3JlOjpTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBvdmVycmlk
ZTsKLSAgICBXZWJDb3JlOjpTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgb3ZlcnJpZGU7
Ci0KLSAgICB1bnNpZ25lZCBjb3VudEZpbmRNYXRjaGVzKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6
OkZpbmRPcHRpb25zLCB1bnNpZ25lZCkgb3ZlcnJpZGUgIHsgcmV0dXJuIDA7IH0KLSAgICBib29s
IGZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6RmluZE9wdGlvbnMsIHVuc2lnbmVk
KSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgV2ViQ29yZTo6SW50UG9pbnQgY29u
dmVydFRvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdCBvdmVycmlkZTsK
LQotICAgIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGxpdmVSZXNvdXJjZURhdGEoKSBj
b25zdCBvdmVycmlkZTsKLSAgICBib29sIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlv
bihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
LQotICAgIFN0cmluZyBnZXRTZWxlY3Rpb25TdHJpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBTdHJpbmcoKTsgfQotICAgIFN0cmluZyBnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2ludChjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7
IH0KLSAgICBib29sIGV4aXN0aW5nU2VsZWN0aW9uQ29udGFpbnNQb2ludChjb25zdCBXZWJDb3Jl
OjpGbG9hdFBvaW50JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIGZs
b2F0IGNvbnRlbnRzU2NhbGVGYWN0b3IoKTsKLSAgICBib29sIG5lZWRzQmFja2luZ1N0b3JlKCkg
Y29uc3Q7Ci0gICAgYm9vbCB1cGRhdGVCYWNraW5nU3RvcmUoKTsKLSAgICB1aW50NjRfdCB3aW5k
b3dOUE9iamVjdElEKCk7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBwbHVnaW5Cb3VuZHMoKTsKLQot
ICAgIHZvaWQgZ2VvbWV0cnlEaWRDaGFuZ2UoKTsKLQotICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMu
Ci0gICAgdm9pZCBsb2FkVVJMKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgU3RyaW5nJiBtZXRo
b2QsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3Qg
V2ViQ29yZTo6SFRUUEhlYWRlck1hcCYgaGVhZGVyRmllbGRzLCBjb25zdCBWZWN0b3I8dWludDhf
dD4mIGh0dHBCb2R5LCBib29sIGFsbG93UG9wdXBzKTsKLSAgICB2b2lkIHVwZGF0ZShjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBwYWludGVkUmVjdCk7Ci0gICAgdm9pZCBwcm94aWVzRm9yVVJMKGNv
bnN0IFN0cmluZyYgdXJsU3RyaW5nLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyk+JiYp
OwotICAgIHZvaWQgY29va2llc0ZvclVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChTdHJpbmcpPiYmKTsKLSAgICB2b2lkIHNldENvb2tpZXNGb3JVUkwo
Y29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKTsKLSAg
ICB2b2lkIGdldEF1dGhlbnRpY2F0aW9uSW5mbyhjb25zdCBXZWJDb3JlOjpQcm90ZWN0aW9uU3Bh
Y2UmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgcmV0dXJuVmFsdWUsIFN0cmluZyB1c2Vy
bmFtZSwgU3RyaW5nIHBhc3N3b3JkKT4mJik7Ci0gICAgdm9pZCBnZXRQbHVnaW5FbGVtZW50TlBP
YmplY3QoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50NjRfdCk+JiYpOwotICAgIHZvaWQgZXZh
bHVhdGUoY29uc3QgTlBWYXJpYW50RGF0YSYgbnBPYmplY3RBc1ZhcmlhbnREYXRhLCBjb25zdCBT
dHJpbmcmIHNjcmlwdFN0cmluZywgYm9vbCBhbGxvd1BvcHVwcywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sIHJldHVyblZhbHVlLCBOUFZhcmlhbnREYXRhJiYgcmVzdWx0RGF0YSk+JiYpOwot
ICAgIHZvaWQgc2V0UGx1Z2luSXNQbGF5aW5nQXVkaW8oYm9vbCk7Ci0gICAgdm9pZCBjb250aW51
ZVN0cmVhbUxvYWQodWludDY0X3Qgc3RyZWFtSUQpOwotICAgIHZvaWQgY2FuY2VsU3RyZWFtTG9h
ZCh1aW50NjRfdCBzdHJlYW1JRCk7Ci0gICAgdm9pZCBjYW5jZWxNYW51YWxTdHJlYW1Mb2FkKCk7
Ci0gICAgdm9pZCBzZXRTdGF0dXNiYXJUZXh0KGNvbnN0IFN0cmluZyYgc3RhdHVzYmFyVGV4dCk7
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgdm9pZCBwbHVnaW5Gb2N1c09yV2luZG93Rm9jdXND
aGFuZ2VkKGJvb2wpOwotICAgIHZvaWQgc2V0Q29tcGxleFRleHRJbnB1dFN0YXRlKHVpbnQ2NF90
KTsKLSAgICB2b2lkIHNldExheWVySG9zdGluZ0NvbnRleHRJRCh1aW50MzJfdCk7Ci0jZW5kaWYK
LSNpZiBQTEFURk9STShYMTEpCi0gICAgdm9pZCBjcmVhdGVQbHVnaW5Db250YWluZXIoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCh1aW50NjRfdCB3aW5kb3dJRCk+JiYpOwotICAgIHZvaWQgd2luZG93
ZWRQbHVnaW5HZW9tZXRyeURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmcmFtZVJl
Y3QsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0LCB1aW50NjRfdCB3aW5kb3dJRCk7
Ci0gICAgdm9pZCB3aW5kb3dlZFBsdWdpblZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCBpc1Zpc2li
bGUsIHVpbnQ2NF90IHdpbmRvd0lEKTsKLSNlbmRpZgotCi0gICAgYm9vbCBjYW5Jbml0aWFsaXpl
QXN5bmNocm9ub3VzbHkoKSBjb25zdDsKLQotICAgIHZvaWQgZGlkQ3JlYXRlUGx1Z2luKGJvb2wg
d2FudHNXaGVlbEV2ZW50cywgdWludDMyX3QgcmVtb3RlTGF5ZXJDbGllbnRJRCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIGRpZEZhaWxUb0NyZWF0ZVBsdWdpbihDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotCi0gICAgdm9pZCBkaWRDcmVhdGVQbHVnaW5JbnRl
cm5hbChib29sIHdhbnRzV2hlZWxFdmVudHMsIHVpbnQzMl90IHJlbW90ZUxheWVyQ2xpZW50SUQp
OwotICAgIHZvaWQgZGlkRmFpbFRvQ3JlYXRlUGx1Z2luSW50ZXJuYWwoKTsKLQotICAgIHVpbnQ2
NF90IG1fcGx1Z2luUHJvY2Vzc1Rva2VuIHsgMCB9OwotCi0gICAgUmVmUHRyPFBsdWdpblByb2Nl
c3NDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247Ci0gICAgdWludDY0X3QgbV9wbHVnaW5JbnN0YW5j
ZUlEIHsgMCB9OwotCi0gICAgV2ViQ29yZTo6SW50U2l6ZSBtX3BsdWdpblNpemU7Ci0KLSAgICAv
LyBUaGUgY2xpcCByZWN0IGluIHBsdWctaW4gY29vcmRpbmF0ZXMuCi0gICAgV2ViQ29yZTo6SW50
UmVjdCBtX2NsaXBSZWN0OwotCi0gICAgLy8gQSB0cmFuc2Zvcm0gdGhhdCBjYW4gYmUgdXNlZCB0
byBjb252ZXJ0IGZyb20gcm9vdCB2aWV3IGNvb3JkaW5hdGVzIHRvIHBsdWctaW4gY29vcmRpbmF0
ZXMuCi0gICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIG1fcGx1Z2luVG9Sb290Vmlld1RyYW5z
Zm9ybTsKLQotICAgIC8vIFRoaXMgaXMgdGhlIGJhY2tpbmcgc3RvcmUgdGhhdCB3ZSBwYWludCB3
aGVuIHdlJ3JlIHRvbGQgdG8gcGFpbnQuCi0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbV9i
YWNraW5nU3RvcmU7Ci0KLSAgICAvLyBUaGlzIGlzIHRoZSBzaGFyZWQgbWVtb3J5IGJhY2tpbmcg
c3RvcmUgdGhhdCB0aGUgcGx1Zy1pbiBwYWludHMgaW50by4gV2hlbiB0aGUgcGx1Zy1pbiB0ZWxs
cyB1cwotICAgIC8vIHRoYXQgaXQncyBwYWludGVkIHNvbWV0aGluZyBpbiBpdCwgd2UnbGwgYmxp
dCBmcm9tIGl0IHRvIG91ciBvd24gYmFja2luZyBzdG9yZS4KLSAgICBSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBtX3BsdWdpbkJhY2tpbmdTdG9yZTsKLSAgICAKLSAgICAvLyBXaGV0aGVyIGFsbCBv
ZiB0aGUgcGx1Zy1pbiBiYWNraW5nIHN0b3JlIGNvbnRhaW5zIHZhbGlkIGRhdGEuCi0gICAgYm9v
bCBtX3BsdWdpbkJhY2tpbmdTdG9yZUNvbnRhaW5zVmFsaWREYXRhIHsgZmFsc2UgfTsKLQotICAg
IGJvb2wgbV9pc1N0YXJ0ZWQgeyBmYWxzZSB9OwotCi0gICAgLy8gV2hldGhlciB3ZSdyZSBjYWxs
ZWQgaW52YWxpZGF0ZSBpbiByZXNwb25zZSB0byBhbiB1cGRhdGUgY2FsbCwgYW5kIGFyZSBub3cg
d2FpdGluZyBmb3IgYSBwYWludCBjYWxsLgotICAgIGJvb2wgbV93YWl0aW5nRm9yUGFpbnRJblJl
c3BvbnNlVG9VcGRhdGUgeyBmYWxzZSB9OwotCi0gICAgLy8gV2hldGhlciB3ZSBzaG91bGQgc2Vu
ZCB3aGVlbCBldmVudHMgdG8gdGhpcyBwbHVnLWluIG9yIG5vdC4KLSAgICBib29sIG1fd2FudHNX
aGVlbEV2ZW50cyB7IGZhbHNlIH07Ci0KLSAgICAvLyBUaGUgY2xpZW50IElEIGZvciB0aGUgQ0Eg
bGF5ZXIgaW4gdGhlIHBsdWctaW4gcHJvY2Vzcy4gV2lsbCBiZSAwIGlmIHRoZSBwbHVnLWluIGlz
IG5vdCBhIENBIHBsdWctaW4uCi0gICAgdWludDMyX3QgbV9yZW1vdGVMYXllckNsaWVudElEIHsg
MCB9OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycz4gbV9w
ZW5kaW5nUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzOwotICAgIGJvb2wgbV93YWl0aW5nT25Bc3lu
Y2hyb25vdXNJbml0aWFsaXphdGlvbiB7IGZhbHNlIH07Ci0KLSNpZiBQTEFURk9STShDT0NPQSkK
LSAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9wbHVnaW5MYXllcjsKLSNlbmRpZgotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUExVR0lOKFBsdWdp
blByb3h5LCBpc1BsdWdpblByb3h5KCkpCi0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5Qcm94eS5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NzRjN2EyOTk2MDA5ZDMzZTA0ZDkxYmU1MTI4ZWMxNmRkNDA3Nzk0Yy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5Qcm94eS5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDk0ICsw
LDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
IyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi1tZXNzYWdlcyAtPiBQbHVnaW5Qcm94eSBMZWdhY3lS
ZWNlaXZlciB7Ci0gICAgIyBBc2tzIHRoZSB3ZWIgcHJvY2VzcyB0byBsb2FkIGEgVVJMLgotICAg
IExvYWRVUkwodWludDY0X3QgcmVxdWVzdElELCBTdHJpbmcgbWV0aG9kLCBTdHJpbmcgdXJsU3Ry
aW5nLCBTdHJpbmcgdGFyZ2V0LCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxkcywg
VmVjdG9yPHVpbnQ4X3Q+IGh0dHBCb2R5LCBib29sIGFsbG93UG9wdXBzKTsKLQotICAgICMgQ2Fs
bGVkIHdoZW4gdGhlIHBsdWctaW4gaGFzIHBhaW50ZWQgaW50byBpdHMgYmFja2luZyBzdG9yZS4g
VGhlIHBhaW50ZWQgcmVjdCBpcyBpbiBwbHVnLWluIGNvb3JkaW5hdGVzLgotICAgIFVwZGF0ZShX
ZWJDb3JlOjpJbnRSZWN0IHBhaW50ZWRSZWN0KQotCi0gICAgIyBSZXR1cm5zIGEgUEFDIHN0eWxl
IHN0cmluZyB3aXRoIHByb3hpZXMgZm9yIHRoZSBnaXZlbiBVUkwuCi0gICAgUHJveGllc0ZvclVS
TChTdHJpbmcgdXJsU3RyaW5nKSAtPiAoU3RyaW5nIHByb3hpZXNTdHJpbmcpIFN5bmNocm9ub3Vz
Ci0KLSAgICAjIFJldHVybnMgdGhlIGNvb2tpZXMgZm9yIHRoZSBnaXZlbiBVUkwuCi0gICAgQ29v
a2llc0ZvclVSTChTdHJpbmcgdXJsU3RyaW5nKSAtPiAoU3RyaW5nIGNvb2tpZVN0cmluZykgU3lu
Y2hyb25vdXMKLQotICAgICMgU2V0cyB0aGUgY29va2llcyBmb3IgdGhlIGdpdmVuIFVSTC4KLSAg
ICBTZXRDb29raWVzRm9yVVJMKFN0cmluZyB1cmxTdHJpbmcsIFN0cmluZyBjb29raWVTdHJpbmcp
Ci0KLSAgICAjIEdldHMgdGhlIGF1dGhlbnRpY2F0aW9uIGluZm8gZm9yIHRoZSBnaXZlbiBwcm90
ZWN0aW9uIHNwYWNlLgotICAgIEdldEF1dGhlbnRpY2F0aW9uSW5mbyhXZWJDb3JlOjpQcm90ZWN0
aW9uU3BhY2UgcHJvdGVjdGlvblNwYWNlKSAtPiAoYm9vbCByZXR1cm5WYWx1ZSwgU3RyaW5nIHVz
ZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQpIFN5bmNocm9ub3VzCi0KLSAgICAjIEdldHMgYSByZWZl
cmVuY2UgdG8gdGhlIHBsdWctaW4gZWxlbWVudCBOUE9iamVjdC4KLSAgICBHZXRQbHVnaW5FbGVt
ZW50TlBPYmplY3QoKSAtPiAodWludDY0X3QgcGx1Z2luRWxlbWVudE5QT2JqZWN0SUQpIFN5bmNo
cm9ub3VzCi0KLSAgICAjIEV2YWx1YXRlcyB0aGUgZ2l2ZW4gSmF2YVNjcmlwdCBzdHJpbmcuCi0g
ICAgRXZhbHVhdGUoV2ViS2l0OjpOUFZhcmlhbnREYXRhIG5wT2JqZWN0QXNWYXJpYW50RGF0YSwg
U3RyaW5nIHNjcmlwdFN0cmluZywgYm9vbCBhbGxvd1BvcHVwcykgLT4gKGJvb2wgcmV0dXJuVmFs
dWUsIFdlYktpdDo6TlBWYXJpYW50RGF0YSByZXN1bHREYXRhKSBTeW5jaHJvbm91cwotCi0gICAg
IyBDYW5jZWxzIHRoZSBnaXZlbiBzdHJlYW0gbG9hZC4KLSAgICBDYW5jZWxTdHJlYW1Mb2FkKHVp
bnQ2NF90IHN0cmVhbUlEKQotCi0gICAgIyBDb250aW51ZXMgdGhlIGdpdmVuIHN0cmVhbSBsb2Fk
LgotICAgIENvbnRpbnVlU3RyZWFtTG9hZCh1aW50NjRfdCBzdHJlYW1JRCkKLQotICAgICMgQ2Fu
Y2VsIHRoZSBtYW51YWwgc3RyZWFtIGxvYWQuCi0gICAgQ2FuY2VsTWFudWFsU3RyZWFtTG9hZCgp
Ci0KLSAgICAjIFNldCB0aGUgc3RhdHVzIGJhciB0ZXh0LgotICAgIFNldFN0YXR1c2JhclRleHQo
U3RyaW5nIHN0YXR1c2JhclRleHQpCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICAjIENhbGxl
ZCB3aGVuIHRoZSBwbHVnLWluJ3MgZm9jdXMgb3IgaXRzIGNvbnRhaW5pbmcgd2luZG93IGZvY3Vz
IGNoYW5nZXMuCi0gICAgUGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZChib29sIHBsdWdp
bkhhc0ZvY3VzQW5kV2luZG93SGFzRm9jdXMpCi0KLSAgICAjIENoYW5nZSB3aGV0aGVyIGNvbXBs
ZXggdGV4dCBpbnB1dCBpcyBlbmFibGVkIGZvciB0aGlzIHBsdWctaW4uCi0gICAgU2V0Q29tcGxl
eFRleHRJbnB1dFN0YXRlKHVpbnQ2NF90IGNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkKLQotICAgICMg
VXBkYXRlIHRoZSBsYXllciBob3N0aW5nIGNvbnRleHQgSUQuIENhbGxlZCB3aGVuZXZlciB0aGUg
bGF5ZXIgaG9zdGluZyBzdGF0ZSBjaGFuZ2VzLgotICAgIFNldExheWVySG9zdGluZ0NvbnRleHRJ
RCh1aW50MzJfdCBsYXllckhvc3RpbmdDb250ZXh0SUQpCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JN
KFgxMSkKLSAgICAjIENyZWF0ZSB0aGUgcGx1Z2luIGNvbnRhaW5lciBmb3Igd2luZG93ZWQgcGx1
Z2lucwotICAgIENyZWF0ZVBsdWdpbkNvbnRhaW5lcigpIC0+ICh1aW50NjRfdCB3aW5kb3dJRCkg
U3luY2hyb25vdXMKLQotICAgICMgVXBkYXRlIGdlb21ldHJ5IG9mIHdpbmRvd2VkIHBsdWdpbiB3
aWRnZXQKLSAgICBXaW5kb3dlZFBsdWdpbkdlb21ldHJ5RGlkQ2hhbmdlKFdlYkNvcmU6OkludFJl
Y3QgZnJhbWVSZWN0LCBXZWJDb3JlOjpJbnRSZWN0IGNsaXBSZWN0LCB1aW50NjRfdCB3aW5kb3dJ
RCkKLQotICAgICMgVXBkYXRlIHZpc2liaWxpdHkgb2Ygd2luZG93ZWQgcGx1Z2luIHdpZGdldAot
ICAgIFdpbmRvd2VkUGx1Z2luVmlzaWJpbGl0eURpZENoYW5nZShib29sIGlzVmlzaWJsZSwgdWlu
dDY0X3Qgd2luZG93SUQpCi0jZW5kaWYKLQotICAgICMgVGVsbHMgdGhlIFdlYlByb2Nlc3MgdGhh
dCB0aGUgcGx1Zy1pbiB3YXMgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIGFzeW5jaHJvbm91c2x5
Ci0gICAgRGlkQ3JlYXRlUGx1Z2luKGJvb2wgd2FudHNXaGVlbEV2ZW50cywgdWludDMyX3QgcmVt
b3RlTGF5ZXJDbGllbnRJRCkgLT4gKCkgU3luY2hyb25vdXMKLSAgICAKLSAgICAjIFRlbGxzIHRo
ZSBXZWJQcm9jZXNzIHRoYXQgdGhlIHBsdWctaW4gZmFpbGVkIHRvIGluaXRpYWxpemUuCi0gICAg
RGlkRmFpbFRvQ3JlYXRlUGx1Z2luKCkgLT4gKCkgU3luY2hyb25vdXMKLQotICAgICMgVGVsbHMg
dGhlIFdlYlByb2Nlc3MgdGhhdCB0aGUgcGx1Zy1pbiBoYXMgc3RhcnRlZCBvciBzdG9wcGVkIHBs
YXlpbmcgYXVkaW8uCi0gICAgU2V0UGx1Z2luSXNQbGF5aW5nQXVkaW8oYm9vbCBwbHVnaW5Jc1Bs
YXlpbmdBdWRpbykKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IGQzYWFkNmVhMjYxNjhhMjFiODNkNTMwZTdhYjZk
ZDQ3YTI2N2YyMWEuLmQ1NGYyN2YwNzA5MTQ3ZTllZGVjMDZkZTU4YzFlOGNjMTIzMWE2NzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBA
IC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGx1Z2luVmll
dy5oIgogCi0jaW5jbHVkZSAiTlBSdW50aW1lVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiUGx1Z2lu
LmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmgiCkBAIC0yNjAsMTAgKzI1OSw2IEBAIHZvaWQgUGx1Z2luVmlldzo6U3RyZWFt
OjpkaWRGaW5pc2hMb2FkaW5nKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKikKICAgICAvLyBD
YWxsaW5nIHN0cmVhbURpZEZpbmlzaExvYWRpbmcgY291bGQgY2F1c2UgdXMgdG8gYmUgZGVsZXRl
ZCwgc28gd2UgaG9sZCBvbiB0byBhIHJlZmVyZW5jZSBoZXJlLgogICAgIFJlZjxTdHJlYW0+IHBy
b3RlY3QoKnRoaXMpOwogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgLy8g
UHJvdGVjdCB0aGUgcGx1Zy1pbiB3aGlsZSB3ZSdyZSBjYWxsaW5nIGludG8gaXQuCi0gICAgTlBS
dW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcGx1Z2luUHJvdGVjdG9yKCZtX3BsdWdp
blZpZXctPm1fbnBSdW50aW1lT2JqZWN0TWFwKTsKLSNlbmRpZgogICAgIG1fcGx1Z2luVmlldy0+
bV9wbHVnaW4tPnN0cmVhbURpZEZpbmlzaExvYWRpbmcobV9zdHJlYW1JRCk7CiAKICAgICBtX3Bs
dWdpblZpZXctPnJlbW92ZVN0cmVhbSh0aGlzKTsKQEAgLTMzNSwxMSArMzMwLDYgQEAgdm9pZCBQ
bHVnaW5WaWV3OjpkZXN0cm95UGx1Z2luQW5kUmVzZXQoKQogI2VuZGlmCiAgICAgfQogCi0jaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgLy8gSW52YWxpZGF0ZSB0aGUgb2JqZWN0
IG1hcC4KLSAgICBtX25wUnVudGltZU9iamVjdE1hcC5pbnZhbGlkYXRlKCk7Ci0jZW5kaWYKLQog
ICAgIGNhbmNlbEFsbFN0cmVhbXMoKTsKIH0KIApAQCAtNTg5LDEyICs1NzksNiBAQCB2b2lkIFBs
dWdpblZpZXc6OmluaXRpYWxpemVQbHVnaW4oKQogdm9pZCBQbHVnaW5WaWV3OjpkaWRGYWlsVG9J
bml0aWFsaXplUGx1Z2luKCkKIHsKICAgICBtX3BsdWdpbiA9IG51bGxwdHI7Ci0KLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBTdHJpbmcgZnJhbWVVUkxTdHJpbmcgPSBmcmFt
ZSgpLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpLT5yZXNwb25zZVVSTCgpLnN0cmluZygpOwot
ICAgIFN0cmluZyBwYWdlVVJMU3RyaW5nID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJh
bWUoKS5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpLT5yZXNwb25zZVVSTCgpLnN0cmluZygpOwot
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGYWlsVG9Jbml0
aWFsaXplUGx1Z2luKG1fcGFyYW1ldGVycy5taW1lVHlwZSwgZnJhbWVVUkxTdHJpbmcsIHBhZ2VV
UkxTdHJpbmcpKTsKLSNlbmRpZgogfQogCiB2b2lkIFBsdWdpblZpZXc6OmRpZEluaXRpYWxpemVQ
bHVnaW4oKQpAQCAtNjYwLDE5ICs2NDQsOCBAQCBKU09iamVjdCogUGx1Z2luVmlldzo6c2NyaXB0
T2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgaWYgKCFtX2lzSW5pdGlh
bGl6ZWQgfHwgIW1fcGx1Z2luKQogICAgICAgICByZXR1cm4gMDsKIAotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotICAgIE5QT2JqZWN0KiBzY3JpcHRhYmxlTlBPYmplY3QgPSBtX3Bs
dWdpbi0+cGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0KCk7Ci0gICAgaWYgKCFzY3JpcHRhYmxlTlBP
YmplY3QpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gbV9u
cFJ1bnRpbWVPYmplY3RNYXAuZ2V0T3JDcmVhdGVKU09iamVjdChnbG9iYWxPYmplY3QsIHNjcmlw
dGFibGVOUE9iamVjdCk7Ci0gICAgcmVsZWFzZU5QT2JqZWN0KHNjcmlwdGFibGVOUE9iamVjdCk7
Ci0KLSAgICByZXR1cm4ganNPYmplY3Q7Ci0jZWxzZQogICAgIFVOVVNFRF9QQVJBTShnbG9iYWxP
YmplY3QpOwogICAgIHJldHVybiAwOwotI2VuZGlmCiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6c3Rv
cmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKCkKQEAgLTEzMTksMTMgKzEyOTIsNiBAQCB2b2lkIFBs
dWdpblZpZXc6Om1lZGlhQ2FuU3RhcnQoV2ViQ29yZTo6RG9jdW1lbnQmKQogCiB2b2lkIFBsdWdp
blZpZXc6OnBhZ2VNdXRlZFN0YXRlRGlkQ2hhbmdlKCkKIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKLSAgICAvLyBUaGUgcGx1Zy1pbiBjYW4gYmUgbnVsbCBoZXJlIGlmIGl0IGZh
aWxlZCB0byBpbml0aWFsaXplLgotICAgIGlmICghbV9pc0luaXRpYWxpemVkIHx8ICFtX3BsdWdp
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wbHVnaW4tPm11dGVkU3RhdGVDaGFuZ2VkKGlz
TXV0ZWQoKSk7Ci0jZW5kaWYKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlKGNvbnN0
IEludFJlY3QmIGRpcnR5UmVjdCkKQEAgLTEzOTUsNjggKzEzNjEsNiBAQCB2b2lkIFBsdWdpblZp
ZXc6OmNhbmNlbE1hbnVhbFN0cmVhbUxvYWQoKQogICAgICAgICBkb2N1bWVudExvYWRlci0+Y2Fu
Y2VsTWFpblJlc291cmNlTG9hZChmcmFtZSgpLT5sb2FkZXIoKS5jYW5jZWxsZWRFcnJvcihtX3Bh
cmFtZXRlcnMudXJsKSk7CiB9CiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLU5Q
T2JqZWN0KiBQbHVnaW5WaWV3Ojp3aW5kb3dTY3JpcHROUE9iamVjdCgpCi17Ci0gICAgaWYgKCFm
cmFtZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghZnJhbWUoKS0+c2Ny
aXB0KCkuY2FuRXhlY3V0ZVNjcmlwdHMoTm90QWJvdXRUb0V4ZWN1dGVTY3JpcHQpKSB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBJbnZlc3RpZ2F0ZSBpZiBvdGhlciBicm93c2VycyBhbGxvdyBwbHVnLWlu
cyB0byBhY2Nlc3MgSmF2YVNjcmlwdCBvYmplY3RzIGV2ZW4gaWYgSmF2YVNjcmlwdCBpcyBkaXNh
YmxlZC4KLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fbnBS
dW50aW1lT2JqZWN0TWFwLmdldE9yQ3JlYXRlTlBPYmplY3QocGx1Z2luV29ybGQoKS52bSgpLCBm
cmFtZSgpLT53aW5kb3dQcm94eSgpLmpzV2luZG93UHJveHkocGx1Z2luV29ybGQoKSktPndpbmRv
dygpKTsKLX0KLQotTlBPYmplY3QqIFBsdWdpblZpZXc6OnBsdWdpbkVsZW1lbnROUE9iamVjdCgp
Ci17Ci0gICAgaWYgKCFmcmFtZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghZnJh
bWUoKS0+c2NyaXB0KCkuY2FuRXhlY3V0ZVNjcmlwdHMoTm90QWJvdXRUb0V4ZWN1dGVTY3JpcHQp
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbnZlc3RpZ2F0ZSBpZiBvdGhlciBicm93c2VycyBhbGxv
dyBwbHVnLWlucyB0byBhY2Nlc3MgSmF2YVNjcmlwdCBvYmplY3RzIGV2ZW4gaWYgSmF2YVNjcmlw
dCBpcyBkaXNhYmxlZC4KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgSlNPYmplY3Qq
IG9iamVjdCA9IGZyYW1lKCktPnNjcmlwdCgpLmpzT2JqZWN0Rm9yUGx1Z2luRWxlbWVudChtX3Bs
dWdpbkVsZW1lbnQuZ2V0KCkpOwotICAgIEFTU0VSVChvYmplY3QpOwotCi0gICAgcmV0dXJuIG1f
bnBSdW50aW1lT2JqZWN0TWFwLmdldE9yQ3JlYXRlTlBPYmplY3QocGx1Z2luV29ybGQoKS52bSgp
LCBvYmplY3QpOwotfQotCi1ib29sIFBsdWdpblZpZXc6OmV2YWx1YXRlKE5QT2JqZWN0KiBucE9i
amVjdCwgY29uc3QgU3RyaW5nJiBzY3JpcHRTdHJpbmcsIE5QVmFyaWFudCogcmVzdWx0LCBib29s
IGFsbG93UG9wdXBzKQotewotICAgIC8vIEZJWE1FOiBJcyB0aGlzIGNoZWNrIG5lY2Vzc2FyeT8K
LSAgICBpZiAoIW1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBDYWxsaW5nIGV2YWx1YXRlIHdpbGwgcnVuIEphdmFTY3Jp
cHQgdGhhdCBjYW4gcG90ZW50aWFsbHkgcmVtb3ZlIHRoZSBwbHVnLWluIGVsZW1lbnQsIHNvIHdl
IG5lZWQgdG8KLSAgICAvLyBwcm90ZWN0IHRoZSBwbHVnLWluIHZpZXcgZnJvbSBkZXN0cnVjdGlv
bi4KLSAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBwbHVnaW5Qcm90ZWN0
b3IoJm1fbnBSdW50aW1lT2JqZWN0TWFwKTsKLQotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdl
c3R1cmVJbmRpY2F0b3IoYWxsb3dQb3B1cHMgPyBzdGQ6Om9wdGlvbmFsPFByb2Nlc3NpbmdVc2Vy
R2VzdHVyZVN0YXRlPihQcm9jZXNzaW5nVXNlckdlc3R1cmUpIDogc3RkOjpudWxsb3B0KTsKLSAg
ICByZXR1cm4gbV9ucFJ1bnRpbWVPYmplY3RNYXAuZXZhbHVhdGUobnBPYmplY3QsIHNjcmlwdFN0
cmluZywgcmVzdWx0KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRQbHVnaW5Jc1BsYXlpbmdB
dWRpbyhib29sIHBsdWdpbklzUGxheWluZ0F1ZGlvKQotewotICAgIGlmIChtX3BsdWdpbklzUGxh
eWluZ0F1ZGlvID09IHBsdWdpbklzUGxheWluZ0F1ZGlvKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3BsdWdpbklzUGxheWluZ0F1ZGlvID0gcGx1Z2luSXNQbGF5aW5nQXVkaW87Ci0gICAgbV9w
bHVnaW5FbGVtZW50LT5kb2N1bWVudCgpLnVwZGF0ZUlzUGxheWluZ01lZGlhKCk7Ci19Ci0KLWJv
b2wgUGx1Z2luVmlldzo6aXNNdXRlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFmcmFtZSgpIHx8ICFm
cmFtZSgpLT5wYWdlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBmcmFt
ZSgpLT5wYWdlKCktPmlzQXVkaW9NdXRlZCgpOwotfQotI2VuZGlmCi0KIHZvaWQgUGx1Z2luVmll
dzo6c2V0U3RhdHVzYmFyVGV4dChjb25zdCBTdHJpbmcmIHN0YXR1c2JhclRleHQpCiB7CiAgICAg
aWYgKCFmcmFtZSgpKQpAQCAtMTQ5OSwxMiArMTQwMyw2IEBAIHZvaWQgUGx1Z2luVmlldzo6cGx1
Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZChib29sIHBsdWdpbkhhc0ZvY3VzQW5kV2luZG93
SGFzCiAgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpQbHVn
aW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkKG1fcGx1Z2luLT5wbHVnaW5Db21wbGV4VGV4dElu
cHV0SWRlbnRpZmllcigpLCBwbHVnaW5IYXNGb2N1c0FuZFdpbmRvd0hhc0ZvY3VzKSk7CiB9CiAK
LXZvaWQgUGx1Z2luVmlldzo6c2V0Q29tcGxleFRleHRJbnB1dFN0YXRlKFBsdWdpbkNvbXBsZXhU
ZXh0SW5wdXRTdGF0ZSBwbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUpCi17Ci0gICAgaWYgKG1f
d2ViUGFnZSkKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OlNldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZShtX3BsdWdpbi0+cGx1Z2luQ29tcGxleFRl
eHRJbnB1dElkZW50aWZpZXIoKSwgcGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKSk7Ci19Ci0K
IGNvbnN0IE1hY2hTZW5kUmlnaHQmIFBsdWdpblZpZXc6OmNvbXBvc2l0aW5nUmVuZGVyU2VydmVy
UG9ydCgpCiB7CiAgICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmNvbXBvc2l0aW5n
UmVuZGVyU2VydmVyUG9ydCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luVmlldy5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luVmlldy5oCmluZGV4IDVhYmM0ODZlMGM1OTEwYWRlOGI4YzZmYzhkOGY5MGE5Zjk2ZWI1
OGUuLjIxMjZlYjhlZGI1NTkzODZiMzQyMjVlYjJiZDViZmNkNjgwMjNmMjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmgKQEAgLTI2LDcgKzI2LDYg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgotI2luY2x1
ZGUgIk5QUnVudGltZU9iamVjdE1hcC5oIgogI2luY2x1ZGUgIlBsdWdpbi5oIgogI2luY2x1ZGUg
IlBsdWdpbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgpAQCAtMTk2LDE5ICsx
OTUsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNhbmNlbFN0cmVhbUxvYWQodWludDY0X3Qgc3Ry
ZWFtSUQpIG92ZXJyaWRlOwogICAgIHZvaWQgY29udGludWVTdHJlYW1Mb2FkKHVpbnQ2NF90IHN0
cmVhbUlEKSBvdmVycmlkZTsKICAgICB2b2lkIGNhbmNlbE1hbnVhbFN0cmVhbUxvYWQoKSBvdmVy
cmlkZTsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBOUE9iamVjdCogd2lu
ZG93U2NyaXB0TlBPYmplY3QoKSBvdmVycmlkZTsKLSAgICBOUE9iamVjdCogcGx1Z2luRWxlbWVu
dE5QT2JqZWN0KCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBldmFsdWF0ZShOUE9iamVjdCosIGNvbnN0
IFN0cmluZyYgc2NyaXB0U3RyaW5nLCBOUFZhcmlhbnQqIHJlc3VsdCwgYm9vbCBhbGxvd1BvcHVw
cykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRQbHVnaW5Jc1BsYXlpbmdBdWRpbyhib29sKSBvdmVy
cmlkZTsKLSAgICBib29sIGlzTXV0ZWQoKSBjb25zdCBvdmVycmlkZTsKLSNlbmRpZgogICAgIHZv
aWQgc2V0U3RhdHVzYmFyVGV4dChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKICAgICBib29sIGlz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKSBvdmVycmlkZTsKICAgICB2b2lkIHBsdWdp
blByb2Nlc3NDcmFzaGVkKCkgb3ZlcnJpZGU7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9p
ZCBwbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wgcGx1Z2luSGFzRm9jdXNBbmRX
aW5kb3dIYXNGb2N1cykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRDb21wbGV4VGV4dElucHV0U3Rh
dGUoUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKSBvdmVycmlkZTsKICAgICBjb25zdCBXVEY6
Ok1hY2hTZW5kUmlnaHQmIGNvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydCgpIG92ZXJyaWRlOwog
I2VuZGlmCiAgICAgZmxvYXQgY29udGVudHNTY2FsZUZhY3RvcigpIG92ZXJyaWRlOwpAQCAtMjU0
LDExICsyNDUsNiBAQCBwcml2YXRlOgogICAgIC8vIFN0cmVhbXMgdGhhdCB0aGUgcGx1Zy1pbiBo
YXMgcmVxdWVzdGVkIHRvIGxvYWQuIAogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxTdHJl
YW0+PiBtX3N0cmVhbXM7CiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAv
LyBBIG1hcCBvZiBhbGwgcmVsYXRlZCBOUE9iamVjdHMgZm9yIHRoaXMgcGx1Zy1pbiB2aWV3Lgot
ICAgIE5QUnVudGltZU9iamVjdE1hcCBtX25wUnVudGltZU9iamVjdE1hcCB7IHRoaXMgfTsKLSNl
bmRpZgotCiAgICAgLy8gVGhlIG1hbnVhbCBzdHJlYW0gc3RhdGUuIFRoaXMgaXMgdXNlZCBzbyB3
ZSBjYW4gZGVsaXZlciBhIG1hbnVhbCBzdHJlYW0gdG8gYSBwbHVnLWluCiAgICAgLy8gd2hlbiBp
dCBpcyBpbml0aWFsaXplZC4KICAgICBlbnVtIGNsYXNzIE1hbnVhbFN0cmVhbVN0YXRlIHsgSW5p
dGlhbCwgSGFzUmVjZWl2ZWRSZXNwb25zZSwgRmluaXNoZWQsIEZhaWxlZCB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luSW5mb1Byb3ZpZGVy
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpbkluZm9Qcm92
aWRlci5jcHAKaW5kZXggNzE1YjJlYTkxMmJiNzZiMzY3YjQ0YzAwYjBiMTMyMzQzZTA4YjY2YS4u
ZTkxNTM0MjY3ODRiOGE1NWZjZWNkZGRmZjM3YjljMjE4MzJiNzY5OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luSW5mb1Byb3ZpZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5JbmZvUHJvdmlk
ZXIuY3BwCkBAIC02NywyMyArNjcsMTEgQEAgV2ViUGx1Z2luSW5mb1Byb3ZpZGVyOjp+V2ViUGx1
Z2luSW5mb1Byb3ZpZGVyKCkKIAogdm9pZCBXZWJQbHVnaW5JbmZvUHJvdmlkZXI6OnJlZnJlc2hQ
bHVnaW5zKCkKIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBtX2NhY2hl
ZFBsdWdpbnMuY2xlYXIoKTsKLSAgICBtX3BsdWdpbkNhY2hlSXNQb3B1bGF0ZWQgPSBmYWxzZTsK
LSAgICBtX3Nob3VsZFJlZnJlc2hQbHVnaW5zID0gdHJ1ZTsKLSNlbmRpZgogfQogCiBWZWN0b3I8
UGx1Z2luSW5mbz4gV2ViUGx1Z2luSW5mb1Byb3ZpZGVyOjpwbHVnaW5JbmZvKFBhZ2UmIHBhZ2Us
IHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFN1cHBvcnRlZFBsdWdpbklkZW50aWZpZXI+PiYgc3VwcG9y
dGVkUGx1Z2luSWRlbnRpZmllcnMpCiB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0gICAgcG9wdWxhdGVQbHVnaW5DYWNoZShwYWdlKTsKLQotICAgIGlmIChtX2NhY2hlZFN1cHBv
cnRlZFBsdWdpbklkZW50aWZpZXJzKQotICAgICAgICBzdXBwb3J0ZWRQbHVnaW5JZGVudGlmaWVy
cyA9ICptX2NhY2hlZFN1cHBvcnRlZFBsdWdpbklkZW50aWZpZXJzOwotCi0gICAgcmV0dXJuIHBh
Z2UubWFpbkZyYW1lKCkuYXJlUGx1Z2luc0VuYWJsZWQoKSA/IG1fY2FjaGVkUGx1Z2lucyA6IG1f
Y2FjaGVkQXBwbGljYXRpb25QbHVnaW5zOwotI2VsaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCisj
aWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwogICAgIFVO
VVNFRF9QQVJBTShzdXBwb3J0ZWRQbHVnaW5JZGVudGlmaWVycyk7CiAgICAgcmV0dXJuIHsgUERG
UGx1Z2luOjpwbHVnaW5JbmZvKCkgfTsKQEAgLTkxLDcgKzc5LDcgQEAgVmVjdG9yPFBsdWdpbklu
Zm8+IFdlYlBsdWdpbkluZm9Qcm92aWRlcjo6cGx1Z2luSW5mbyhQYWdlJiBwYWdlLCBzdGQ6Om9w
dGlvbmFsPFYKICAgICBVTlVTRURfUEFSQU0ocGFnZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN1cHBv
cnRlZFBsdWdpbklkZW50aWZpZXJzKTsKICAgICByZXR1cm4geyB9OwotI2VuZGlmIC8vIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQorI2VuZGlmIC8vIEVOQUJMRShQREZLSVRfUExVR0lOKQog
fQogCiBWZWN0b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4gV2ViUGx1Z2luSW5mb1Byb3ZpZGVyOjp3
ZWJWaXNpYmxlUGx1Z2luSW5mbyhQYWdlJiBwYWdlLCBjb25zdCBVUkwmIHVybCkKQEAgLTEyMSwy
NyArMTA5LDQgQEAgVmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+IFdlYlBsdWdpbkluZm9Qcm92
aWRlcjo6d2ViVmlzaWJsZVBsdWdpbkluZm8oUGFnZSYgcGEKICAgICByZXR1cm4gcGx1Z2luczsK
IH0KIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotdm9pZCBXZWJQbHVnaW5JbmZv
UHJvdmlkZXI6OnBvcHVsYXRlUGx1Z2luQ2FjaGUoY29uc3QgV2ViQ29yZTo6UGFnZSYpCi17Ci0g
ICAgaWYgKCFtX3BsdWdpbkNhY2hlSXNQb3B1bGF0ZWQpIHsKLSNpZiBQTEFURk9STShDT0NPQSkK
LSAgICAgICAgLy8gQXBwbGljYXRpb24gcGx1Z2lucyBhcmUgbm90IGFmZmVjdGVkIGJ5IGVuYWJs
ZVBsdWdpbnMgc2V0dGluZywgc28gd2UgYWx3YXlzIG5lZWQgdG8gc2NhbiBwbHVnaW5zIHRvIGdl
dCB0aGVtLgotICAgICAgICBib29sIHNob3VsZFNjYW5QbHVnaW5zID0gdHJ1ZTsKLSNlbHNlCi0g
ICAgICAgIGJvb2wgc2hvdWxkU2NhblBsdWdpbnMgPSBwYWdlLm1haW5GcmFtZSgpLmFyZVBsdWdp
bnNFbmFibGVkKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKHNob3VsZFNjYW5QbHVnaW5zKSB7Ci0g
ICAgICAgICAgICBIYW5nRGV0ZWN0aW9uRGlzYWJsZXIgaGFuZ0RldGVjdGlvbkRpc2FibGVyOwot
ICAgICAgICAgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRQbHVnaW5z
KG1fc2hvdWxkUmVmcmVzaFBsdWdpbnMpLAotICAgICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzUHJveHk6OkdldFBsdWdpbnM6OlJlcGx5KG1fY2FjaGVkUGx1Z2lucywgbV9jYWNoZWRB
cHBsaWNhdGlvblBsdWdpbnMsIG1fY2FjaGVkU3VwcG9ydGVkUGx1Z2luSWRlbnRpZmllcnMpLCAw
KSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBtX3Nob3Vs
ZFJlZnJlc2hQbHVnaW5zID0gZmFsc2U7Ci0gICAgICAgIG1fcGx1Z2luQ2FjaGVJc1BvcHVsYXRl
ZCA9IHRydWU7Ci0gICAgfQotfQotI2VuZGlmCi0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpbkluZm9Qcm92aWRlci5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luSW5mb1Byb3ZpZGVyLmgKaW5kZXggOTcw
NjY2ZWFjMDBkYTA4OGFkYmRkZDJkYTBkMGJjM2VkOTJlZGU2OC4uMjBiYjg3ZmY1MDZhOWE0MzZh
ZWQ1NTBlOWRlOGE2NGQ4MWI5ZTM4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1BsdWdpbnMvV2ViUGx1Z2luSW5mb1Byb3ZpZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luSW5mb1Byb3ZpZGVyLmgKQEAgLTQzLDE4ICs0Myw2
IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+IHBsdWdpbkluZm8o
V2ViQ29yZTo6UGFnZSYsIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6OlN1cHBvcnRlZFBs
dWdpbklkZW50aWZpZXI+PiYpIGZpbmFsOwogICAgIFZlY3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZv
PiB3ZWJWaXNpYmxlUGx1Z2luSW5mbyhXZWJDb3JlOjpQYWdlJiwgY29uc3QgVVJMJikgZmluYWw7
CiAgICAgdm9pZCByZWZyZXNoUGx1Z2lucygpIG92ZXJyaWRlOwotCi0jaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCi0gICAgdm9pZCBwb3B1bGF0ZVBsdWdpbkNhY2hlKGNvbnN0IFdlYkNv
cmU6OlBhZ2UmKTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0g
ICAgYm9vbCBtX3BsdWdpbkNhY2hlSXNQb3B1bGF0ZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9z
aG91bGRSZWZyZXNoUGx1Z2lucyB7IGZhbHNlIH07Ci0gICAgVmVjdG9yPFdlYkNvcmU6OlBsdWdp
bkluZm8+IG1fY2FjaGVkUGx1Z2luczsKLSAgICBWZWN0b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4g
bV9jYWNoZWRBcHBsaWNhdGlvblBsdWdpbnM7Ci0gICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8V2Vi
Q29yZTo6U3VwcG9ydGVkUGx1Z2luSWRlbnRpZmllcj4+IG1fY2FjaGVkU3VwcG9ydGVkUGx1Z2lu
SWRlbnRpZmllcnM7Ci0jZW5kaWYKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXgg
ZTM3OTZiYWI2NGJhNGVlMjA1NjYyMjNkNzk4M2RjYTRmZjA5NThkNi4uMGM4ZGE2NjU3NzBiZDQ3
M2FlYWFiYWIzZjE2YWY2MDE2MGIyNzUwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKQEAgLTY5
MywyMyArNjkzLDggQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnNob3VsZFVuYXZhaWxhYmxlUGx1
Z2luTWVzc2FnZUJlQnV0dG9uKFJlbmRlckVtYmVkZGVkT2JqZWMKICAgICAKIHZvaWQgV2ViQ2hy
b21lQ2xpZW50Ojp1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQoRWxlbWVudCYgZWxlbWVu
dCwgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uIHBsdWdp
blVuYXZhaWxhYmlsaXR5UmVhc29uKSBjb25zdAogewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotICAgIEFTU0VSVChlbGVtZW50Lmhhc1RhZ05hbWUob2JqZWN0VGFnKSB8fCBlbGVt
ZW50Lmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShhcHBsZXRUYWcp
KTsKLSAgICBBU1NFUlQocGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24gPT0gUmVuZGVyRW1iZWRk
ZWRPYmplY3Q6OlBsdWdpbk1pc3NpbmcgfHwgcGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24gPT0g
UmVuZGVyRW1iZWRkZWRPYmplY3Q6Okluc2VjdXJlUGx1Z2luVmVyc2lvbiB8fCBwbHVnaW5VbmF2
YWlsYWJpbGl0eVJlYXNvbik7Ci0KLSAgICBhdXRvJiBwbHVnaW5FbGVtZW50ID0gZG93bmNhc3Q8
SFRNTFBsdWdJbkltYWdlRWxlbWVudD4oZWxlbWVudCk7Ci0KLSAgICBTdHJpbmcgZnJhbWVVUkxT
dHJpbmcgPSBwbHVnaW5FbGVtZW50LmRvY3VtZW50KCkuZnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1l
bnRMb2FkZXIoKS0+cmVzcG9uc2VVUkwoKS5zdHJpbmcoKTsKLSAgICBTdHJpbmcgcGFnZVVSTFN0
cmluZyA9IG1fcGFnZS5tYWluRnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKS0+cmVz
cG9uc2VVUkwoKS5zdHJpbmcoKTsKLSAgICBTdHJpbmcgcGx1Z2luVVJMU3RyaW5nID0gcGx1Z2lu
RWxlbWVudC5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHBsdWdpbkVsZW1lbnQudXJsKCkpLnN0cmlu
ZygpOwotICAgIFVSTCBwbHVnaW5zcGFnZUF0dHJpYnV0ZVVSTCA9IHBsdWdpbkVsZW1lbnQuZG9j
dW1lbnQoKS5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMocGx1
Z2luRWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHBsdWdpbnNwYWdlQXR0
cikpKTsKLSAgICBpZiAoIXBsdWdpbnNwYWdlQXR0cmlidXRlVVJMLnByb3RvY29sSXNJbkhUVFBG
YW1pbHkoKSkKLSAgICAgICAgcGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkwgPSBVUkwoKTsKLSAgICBt
X3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpVbmF2YWlsYWJsZVBsdWdpbkJ1dHRv
bkNsaWNrZWQocGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24sIHBsdWdpbkVsZW1lbnQuc2Vydmlj
ZVR5cGUoKSwgcGx1Z2luVVJMU3RyaW5nLCBwbHVnaW5zcGFnZUF0dHJpYnV0ZVVSTC5zdHJpbmco
KSwgZnJhbWVVUkxTdHJpbmcsIHBhZ2VVUkxTdHJpbmcpKTsKLSNlbHNlCiAgICAgVU5VU0VEX1BB
UkFNKGVsZW1lbnQpOwogICAgIFVOVVNFRF9QQVJBTShwbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNv
bik7Ci0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiB9CiAKIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0
JiBoaXRUZXN0UmVzdWx0LCB1bnNpZ25lZCBtb2RpZmllckZsYWdzLCBjb25zdCBTdHJpbmcmIHRv
b2xUaXAsIFRleHREaXJlY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCmlu
ZGV4IDZlYzE4OTFjMjVlNmU4ZDllZTYyMjNiZjY4ZWI5MTgyMmMxMTA5ZWMuLmEyYmVlNmNkODJj
NmYzNjkxMjkwMzVhMWNhY2VkNGUxODRhZjg5Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0
ZWdpZXMuY3BwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bi5oIgogI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmgiCi0jaW5jbHVk
ZSAiUGx1Z2luSW5mb1N0b3JlLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyQ29weS5oIgogI2lu
Y2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYkVycm9ycy5oIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA0N2Rh
MWY4NTQzNzAxZTYxMmFmZTNhZjgxYTBjNjI3YWM0MGFhOWQ5Li4wODkyZWQ1NTJjOTBjMTcyNDZl
MmQ2MWZkMDIwNmI5MDhhZWM2ZDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcApAQCAtNDksMTMgKzQ5LDEwIEBACiAjaW5jbHVkZSAiTWVkaWFLZXlT
eXN0ZW1QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuaCIKICNpbmNsdWRlICJNZWRpYVBsYXliYWNr
U3RhdGUuaCIKICNpbmNsdWRlICJNZWRpYVJlY29yZGVyUHJvdmlkZXIuaCIKLSNpbmNsdWRlICJO
ZXRzY2FwZVBsdWdpbi5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNs
dWRlICJOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuaCIKICNpbmNsdWRlICJQ
YWdlQmFubmVyLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMuaCIKLSNpbmNs
dWRlICJQbHVnaW5Qcm94eS5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKICNpbmNsdWRlICJQ
cmludEluZm8uaCIKICNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCIKQEAg
LTExNTcsNTMgKzExNTQsMTEgQEAgdm9pZCBXZWJQYWdlOjppbml0aWFsaXplSW5qZWN0ZWRCdW5k
bGVGdWxsU2NyZWVuQ2xpZW50KFdLQnVuZGxlUGFnZUZ1bGxTY3JlZW5DbGkKICNpZiBFTkFCTEUo
UERGS0lUX1BMVUdJTikKIFJlZlB0cjxQbHVnaW4+IFdlYlBhZ2U6OmNyZWF0ZVBsdWdpbihXZWJG
cmFtZSogZnJhbWUsIEhUTUxQbHVnSW5FbGVtZW50KiBwbHVnaW5FbGVtZW50LCBjb25zdCBQbHVn
aW46OlBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIFN0cmluZyYgbmV3TUlNRVR5cGUpCiB7Ci0gICAg
U3RyaW5nIGZyYW1lVVJMU3RyaW5nID0gZnJhbWUtPmNvcmVGcmFtZSgpLT5sb2FkZXIoKS5kb2N1
bWVudExvYWRlcigpLT5yZXNwb25zZVVSTCgpLnN0cmluZygpOwotICAgIFN0cmluZyBwYWdlVVJM
U3RyaW5nID0gbV9wYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpLT5y
ZXNwb25zZVVSTCgpLnN0cmluZygpOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0gICAgYm9vbCBhbGxvd09ubHlBcHBsaWNhdGlvblBsdWdpbnMgPSAhZnJhbWUtPmNvcmVGcmFt
ZSgpLT5hcmVQbHVnaW5zRW5hYmxlZCgpOwotI2VuZGlmCi0KLSAgICB1aW50NjRfdCBwbHVnaW5Q
cm9jZXNzVG9rZW4geyAwIH07Ci0gICAgdWludDMyX3QgcGx1Z2luTG9hZFBvbGljeSB7IDAgfTsK
LSAgICBTdHJpbmcgdW5hdmFpbGFiaWxpdHlEZXNjcmlwdGlvbjsKLSAgICBib29sIGlzVW5zdXBw
b3J0ZWQgeyBmYWxzZSB9OwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGlm
ICghc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RmluZFBsdWdpbihwYXJhbWV0ZXJz
Lm1pbWVUeXBlLCBwYXJhbWV0ZXJzLnVybC5zdHJpbmcoKSwgZnJhbWVVUkxTdHJpbmcsIHBhZ2VV
UkxTdHJpbmcsIGFsbG93T25seUFwcGxpY2F0aW9uUGx1Z2lucyksIE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkZpbmRQbHVnaW46OlJlcGx5KHBsdWdpblByb2Nlc3NUb2tlbiwgbmV3TUlNRVR5cGUs
IHBsdWdpbkxvYWRQb2xpY3ksIHVuYXZhaWxhYmlsaXR5RGVzY3JpcHRpb24sIGlzVW5zdXBwb3J0
ZWQpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0jZW5kaWYKLQotICAgIFBsdWdpbk1vZHVs
ZUxvYWRQb2xpY3kgbG9hZFBvbGljeSA9IHN0YXRpY19jYXN0PFBsdWdpbk1vZHVsZUxvYWRQb2xp
Y3k+KHBsdWdpbkxvYWRQb2xpY3kpOwotICAgIGJvb2wgaXNCbG9ja2VkUGx1Z2luID0gKGxvYWRQ
b2xpY3kgPT0gUGx1Z2luTW9kdWxlQmxvY2tlZEZvclNlY3VyaXR5KSB8fCAobG9hZFBvbGljeSA9
PSBQbHVnaW5Nb2R1bGVCbG9ja2VkRm9yQ29tcGF0aWJpbGl0eSk7Ci0KLSAgICBpZiAoaXNVbnN1
cHBvcnRlZCB8fCBpc0Jsb2NrZWRQbHVnaW4gfHwgIXBsdWdpblByb2Nlc3NUb2tlbikgewotI2lm
IEVOQUJMRShQREZLSVRfUExVR0lOKQotICAgICAgICBpZiAoc2hvdWxkVXNlUERGUGx1Z2luKHBh
cmFtZXRlcnMubWltZVR5cGUsIHBhcmFtZXRlcnMudXJsLnBhdGgoKSkpCi0gICAgICAgICAgICBy
ZXR1cm4gUERGUGx1Z2luOjpjcmVhdGUoKmZyYW1lLCBwbHVnaW5FbGVtZW50KTsKLSNlbmRpZgot
ICAgIH0KLQotICAgIGlmIChpc1Vuc3VwcG9ydGVkKSB7Ci0gICAgICAgIHBsdWdpbkVsZW1lbnQt
PnNldFJlcGxhY2VtZW50KFJlbmRlckVtYmVkZGVkT2JqZWN0OjpVbnN1cHBvcnRlZFBsdWdpbiwg
dW5hdmFpbGFiaWxpdHlEZXNjcmlwdGlvbik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IH0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGlmIChpc0Jsb2NrZWRQ
bHVnaW4pIHsKLSAgICAgICAgYm9vbCBpc1JlcGxhY2VtZW50T2JzY3VyZWQgPSBwbHVnaW5FbGVt
ZW50LT5zZXRSZXBsYWNlbWVudChSZW5kZXJFbWJlZGRlZE9iamVjdDo6SW5zZWN1cmVQbHVnaW5W
ZXJzaW9uLCB1bmF2YWlsYWJpbGl0eURlc2NyaXB0aW9uKTsKLSAgICAgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpEaWRCbG9ja0luc2VjdXJlUGx1Z2luVmVyc2lvbihwYXJhbWV0ZXJz
Lm1pbWVUeXBlLCBwYXJhbWV0ZXJzLnVybC5zdHJpbmcoKSwgZnJhbWVVUkxTdHJpbmcsIHBhZ2VV
UkxTdHJpbmcsIGlzUmVwbGFjZW1lbnRPYnNjdXJlZCkpOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICBpZiAoIXBsdWdpblByb2Nlc3NUb2tlbikKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICByZXR1cm4gUGx1Z2luUHJveHk6OmNyZWF0ZShwbHVnaW5Qcm9jZXNz
VG9rZW4pOwotI2Vsc2UKKyAgICBpZiAoc2hvdWxkVXNlUERGUGx1Z2luKHBhcmFtZXRlcnMubWlt
ZVR5cGUsIHBhcmFtZXRlcnMudXJsLnBhdGgoKSkpCisgICAgICAgIHJldHVybiBQREZQbHVnaW46
OmNyZWF0ZSgqZnJhbWUsIHBsdWdpbkVsZW1lbnQpOwogICAgIHJldHVybiBudWxscHRyOwotI2Vu
ZGlmCiB9Ci0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisjZW5kaWYgLy8g
RU5BQkxFKFBERktJVF9QTFVHSU4pCiAKICNpZiBFTkFCTEUoV0VCR0wpICYmICFQTEFURk9STShN
QUMpCiBXZWJDb3JlOjpXZWJHTExvYWRQb2xpY3kgV2ViUGFnZTo6d2ViR0xQb2xpY3lGb3JVUkwo
V2ViRnJhbWUqLCBjb25zdCBVUkwmKQpAQCAtNTc4NywyNCArNTc0Miw4IEBAIEZyYW1lVmlldyog
V2ViUGFnZTo6bWFpbkZyYW1lVmlldygpIGNvbnN0CiAKIGJvb2wgV2ViUGFnZTo6Y2FuUGx1Z2lu
SGFuZGxlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0jaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgdWludDMyX3QgcGx1Z2luTG9hZFBvbGlj
eTsKLSAgICBib29sIGFsbG93T25seUFwcGxpY2F0aW9uUGx1Z2lucyA9ICFtX21haW5GcmFtZS0+
Y29yZUZyYW1lKCktPmFyZVBsdWdpbnNFbmFibGVkKCk7Ci0KLSAgICB1aW50NjRfdCBwbHVnaW5Q
cm9jZXNzVG9rZW47Ci0gICAgU3RyaW5nIG5ld01JTUVUeXBlOwotICAgIFN0cmluZyB1bmF2YWls
YWJpbGl0eURlc2NyaXB0aW9uOwotICAgIGJvb2wgaXNVbnN1cHBvcnRlZCA9IGZhbHNlOwotICAg
IGlmICghc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RmluZFBsdWdpbihyZXNwb25z
ZS5taW1lVHlwZSgpLCByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgcmVzcG9uc2UudXJsKCkuc3Ry
aW5nKCksIHJlc3BvbnNlLnVybCgpLnN0cmluZygpLCBhbGxvd09ubHlBcHBsaWNhdGlvblBsdWdp
bnMpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpGaW5kUGx1Z2luOjpSZXBseShwbHVnaW5Qcm9j
ZXNzVG9rZW4sIG5ld01JTUVUeXBlLCBwbHVnaW5Mb2FkUG9saWN5LCB1bmF2YWlsYWJpbGl0eURl
c2NyaXB0aW9uLCBpc1Vuc3VwcG9ydGVkKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IEFTU0VSVCghaXNVbnN1cHBvcnRlZCk7Ci0gICAgYm9vbCBpc0Jsb2NrZWRQbHVnaW4gPSAocGx1
Z2luTG9hZFBvbGljeSA9PSBQbHVnaW5Nb2R1bGVCbG9ja2VkRm9yU2VjdXJpdHkpIHx8IChwbHVn
aW5Mb2FkUG9saWN5ID09IFBsdWdpbk1vZHVsZUJsb2NrZWRGb3JDb21wYXRpYmlsaXR5KTsKLSAg
ICByZXR1cm4gIWlzVW5zdXBwb3J0ZWQgJiYgIWlzQmxvY2tlZFBsdWdpbiAmJiBwbHVnaW5Qcm9j
ZXNzVG9rZW47Ci0jZWxzZQogICAgIFVOVVNFRF9QQVJBTShyZXNwb25zZSk7CiAgICAgcmV0dXJu
IGZhbHNlOwotI2VuZGlmCiB9CiAKIGJvb2wgV2ViUGFnZTo6c2hvdWxkVXNlQ3VzdG9tQ29udGVu
dFByb3ZpZGVyRm9yUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXggYjQ4MDJlY2I5MzcwMjNl
MGUzM2EyNDM1ZThhYWYwZmMxMjViMDU5OC4uZDg2MjllODcyOTE0ZjA3ODFjNmM0MTJjNzI1NDlh
MjhiYmFlNzBkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nl
c3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcApAQCAt
NDMsNyArNDMsNiBAQAogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaCIK
ICNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc0Fzc2VydGlvbi5oIgogI2luY2x1ZGUgIlJlbW90ZUF1
ZGlvSGFyZHdhcmVMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlJlbW90ZUF1ZGlvU2Vzc2lvbi5oIgpA
QCAtMjgyLDkgKzI4MSw2IEBAIFdlYlByb2Nlc3M6OldlYlByb2Nlc3MoKQogICAgICwgbV9jb29r
aWVKYXIoV2ViQ29va2llSmFyOjpjcmVhdGUoKSkKICAgICAsIG1fcmVwb3J0aW5nRW5kcG9pbnRz
Q2FjaGUoUmVwb3J0aW5nRW5kcG9pbnRzQ2FjaGU6OmNyZWF0ZSgpKQogICAgICwgbV9kbnNQcmVm
ZXRjaEh5c3RlcmVyaXMoW3RoaXNdKFBBTDo6SHlzdGVyZXNpc1N0YXRlIHN0YXRlKSB7IGlmIChz
dGF0ZSA9PSBQQUw6Okh5c3RlcmVzaXNTdGF0ZTo6U3RvcHBlZCkgbV9kbnNQcmVmZXRjaGVkSG9z
dHMuY2xlYXIoKTsgfSkKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAsIG1f
cGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyKFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFu
YWdlcjo6Y3JlYXRlKCkpCi0jZW5kaWYKICAgICAsIG1fbm9uVmlzaWJsZVByb2Nlc3NHcmFwaGlj
c0NsZWFudXBUaW1lcigqdGhpcywgJldlYlByb2Nlc3M6Om5vblZpc2libGVQcm9jZXNzR3JhcGhp
Y3NDbGVhbnVwVGltZXJGaXJlZCkKICNpZiBFTkFCTEUoTk9OX1ZJU0lCTEVfV0VCUFJPQ0VTU19N
RU1PUllfQ0xFQU5VUF9USU1FUikKICAgICAsIG1fbm9uVmlzaWJsZVByb2Nlc3NNZW1vcnlDbGVh
bnVwVGltZXIoKnRoaXMsICZXZWJQcm9jZXNzOjpub25WaXNpYmxlUHJvY2Vzc01lbW9yeUNsZWFu
dXBUaW1lckZpcmVkKQpAQCAtMzc0LDEwICszNzAsNiBAQCB2b2lkIFdlYlByb2Nlc3M6OmluaXRp
YWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbikKIAogICAgIG1fd2Vi
SW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci0+aW5pdGlhbGl6ZUNvbm5lY3Rpb24oY29ubmVj
dGlvbik7CiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBtX3BsdWdpblBy
b2Nlc3NDb25uZWN0aW9uTWFuYWdlci0+aW5pdGlhbGl6ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7
Ci0jZW5kaWYKLQogICAgIGZvciAoYXV0byYgc3VwcGxlbWVudCA6IG1fc3VwcGxlbWVudHMudmFs
dWVzKCkpCiAgICAgICAgIHN1cHBsZW1lbnQtPmluaXRpYWxpemVDb25uZWN0aW9uKGNvbm5lY3Rp
b24pOwogCkBAIC03NTEsMTMgKzc0Myw2IEBAIHZvaWQgV2ViUHJvY2Vzczo6ZnVsbEtleWJvYXJk
QWNjZXNzTW9kZUNoYW5nZWQoYm9vbCBmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGVkKQogICAgIG1f
ZnVsbEtleWJvYXJkQWNjZXNzRW5hYmxlZCA9IGZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZWQ7CiB9
CiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLVBsdWdpblByb2Nlc3NDb25uZWN0
aW9uTWFuYWdlciYgV2ViUHJvY2Vzczo6cGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyKCkK
LXsKLSAgICByZXR1cm4gKm1fcGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyOwotfQotI2Vu
ZGlmCi0KIHZvaWQgV2ViUHJvY2Vzczo6c2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9k
ZWwpCiB7CiAgICAgaWYgKG1faGFzU2V0Q2FjaGVNb2RlbCAmJiAoY2FjaGVNb2RlbCA9PSBtX2Nh
Y2hlTW9kZWwpKQpAQCAtOTkwLDkgKzk3NSw2IEBAIHZvaWQgV2ViUHJvY2Vzczo6aXNKSVRFbmFi
bGVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAK
IHZvaWQgV2ViUHJvY2Vzczo6cmVmcmVzaFBsdWdpbnMoKQogewotI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQotICAgIFdlYlBsdWdpbkluZm9Qcm92aWRlcjo6c2luZ2xldG9uKCkucmVm
cmVzaChmYWxzZSk7Ci0jZW5kaWYKIH0KIAogdm9pZCBXZWJQcm9jZXNzOjpnYXJiYWdlQ29sbGVj
dEphdmFTY3JpcHRPYmplY3RzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCmlu
ZGV4IDFlODRlOGRmZjMzOWNkZWEyMzIwMjQxY2JhNjU2YTNhNmYyYzc4Y2UuLjIzNTM0MjUyNmVm
N2E3NjEwY2IyNzIzMjBiNGQ2Mzg2NGRlZTA2NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlByb2Nlc3MuaApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkF1eGlsaWFyeVByb2Nlc3Mu
aCIKICNpbmNsdWRlICJDYWNoZU1vZGVsLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllclR5cGVzLmgi
Ci0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLmgiCiAjaW5jbHVkZSAi
U2FuZGJveEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSWRlbnRpZmllci5oIgog
I2luY2x1ZGUgIlRleHRDaGVja2VyU3RhdGUuaCIKQEAgLTIzOSwxMCArMjM4LDYgQEAgcHVibGlj
OgogICAgIAogICAgIGNvbnN0IFRleHRDaGVja2VyU3RhdGUmIHRleHRDaGVja2VyU3RhdGUoKSBj
b25zdCB7IHJldHVybiBtX3RleHRDaGVja2VyU3RhdGU7IH0KICAgICB2b2lkIHNldFRleHRDaGVj
a2VyU3RhdGUoY29uc3QgVGV4dENoZWNrZXJTdGF0ZSYpOwotICAgIAotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotICAgIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlciYgcGx1
Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyKCk7Ci0jZW5kaWYKIAogICAgIEV2ZW50RGlzcGF0
Y2hlciYgZXZlbnREaXNwYXRjaGVyKCkgeyByZXR1cm4gbV9ldmVudERpc3BhdGNoZXIuZ2V0KCk7
IH0KIApAQCAtNjkwLDEwICs2ODUsNiBAQCBwcml2YXRlOgogCiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk+IG1fYXV0b21hdGlvblNlc3Npb25Qcm94eTsKIAot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIFJlZlB0cjxQbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbk1hbmFnZXI+IG1fcGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyOwotI2Vu
ZGlmCi0KICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKICAgICBib29sIG1faGFzSW1hZ2VT
ZXJ2aWNlcyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hhc1NlbGVjdGlvblNlcnZpY2VzIHsgZmFs
c2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvUGxhdGZvcm1NYWMuY21ha2Ug
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IGI1M2U2MjJkYzZm
MzM3Y2M3NDM4NmY2NjZhY2NlMzcyNzRkZmZmYjAuLjMwMGIwMGI0NTE0ZDM1NjkyMTEzZTdmMjIx
NmFiZjEwMWY2MmY0ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvUGxhdGZvcm1N
YWMuY21ha2UKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAt
NzUsMjkgKzc1LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0TGVnYWN5X1NPVVJDRVMKICAgICBtYWMv
UGFuZWxzL1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubQogICAgIG1hYy9QYW5lbHMvV2ViUGFuZWxB
dXRoZW50aWNhdGlvbkhhbmRsZXIubQogCi0gICAgbWFjL1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBl
UGx1Z2luVmlldy5tbQotICAgIG1hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5k
bGVyLm1tCi0gICAgbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXJDb2Nv
YS5tbQotICAgIG1hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5tbQotICAgIG1h
Yy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tCi0gICAgbWFjL1BsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5WaWV3Lm1tCiAgICAgbWFjL1BsdWdpbnMvV2ViUGx1Z2luUGFja2FnZS5t
bQotICAgIG1hYy9QbHVnaW5zL1dlYlBsdWdpblJlcXVlc3QubQotICAgIG1hYy9QbHVnaW5zL25w
YXBpLm1tCi0KLSAgICBtYWMvUGx1Z2lucy9Ib3N0ZWQvSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJl
YW0ubW0KLSAgICBtYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5t
bQotICAgIG1hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbQotICAg
IG1hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0KLSAgICBt
YWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQotICAgIG1hYy9QbHVnaW5zL0hvc3Rl
ZC9Qcm94eVJ1bnRpbWVPYmplY3QubW0KLSAgICBtYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVk
TmV0c2NhcGVQbHVnaW5WaWV3Lm1tCi0gICAgbWFjL1BsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdp
bkFnZW50LmRlZnMKLSAgICBtYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luQWdlbnRSZXBs
eS5kZWZzCi0gICAgbWFjL1BsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkNsaWVudC5kZWZzCi0g
ICAgbWFjL1BsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkhvc3QuZGVmcwotICAgIG1hYy9QbHVn
aW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5Ib3N0VHlwZXMuZGVmcwotICAgIG1hYy9QbHVnaW5zL0hv
c3RlZC9XZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLm0KIAogICAgIG1hYy9TdG9yYWdlL1dl
YkRhdGFiYXNlTWFuYWdlci5tbQogICAgIG1hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlckNs
aWVudC5tbQpAQCAtNDQ1LDMxICs0MjMsMTUgQEAgc2V0KFdlYktpdExlZ2FjeV9MRUdBQ1lfRk9S
V0FSRElOR19IRUFERVJTX0ZJTEVTCiAKICAgICBtYWMvUGx1Z2lucy9XZWJQbHVnaW5WaWV3RmFj
dG9yeVByaXZhdGUuaAogICAgIG1hYy9QbHVnaW5zL1dlYkJhc2VQbHVnaW5QYWNrYWdlLmgKLSAg
ICBtYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcuaAotICAgIG1hYy9QbHVnaW5zL1dl
Yk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2EuaAotICAgIG1hYy9QbHVnaW5zL1dlYk5l
dHNjYXBlUGx1Z2luU3RyZWFtLmgKLSAgICBtYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVn
aW5WaWV3LmgKICAgICBtYWMvUGx1Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLmgKLSAgICBtYWMv
UGx1Z2lucy9Ib3N0ZWQvV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlci5oCi0gICAgbWFjL1Bs
dWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5LmgKLSAgICBtYWMvUGx1Z2lucy9I
b3N0ZWQvUHJveHlSdW50aW1lT2JqZWN0LmgKLSAgICBtYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJ
bnN0YW5jZS5oCi0gICAgbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFn
ZXIuaAotICAgIG1hYy9QbHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5Ib3N0VHlwZXMuaAotICAg
IG1hYy9QbHVnaW5zL0hvc3RlZC9XZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcuaAotICAgIG1h
Yy9QbHVnaW5zL0hvc3RlZC9Ib3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbS5oCi0gICAgbWFjL1Bs
dWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5oCiAgICAgbWFjL1BsdWdp
bnMvV2ViUGx1Z2luQ29udGFpbmVyQ2hlY2suaAogICAgIG1hYy9QbHVnaW5zL1dlYlBsdWdpbkNv
bnRhaW5lci5oCiAgICAgbWFjL1BsdWdpbnMvV2ViUGx1Z2luUGFja2FnZVByaXZhdGUuaAogICAg
IG1hYy9QbHVnaW5zL1dlYlBsdWdpblBhY2thZ2UuaAotICAgIG1hYy9QbHVnaW5zL1dlYlBsdWdp
blJlcXVlc3QuaAotICAgIG1hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVy
LmgKICAgICBtYWMvUGx1Z2lucy9XZWJQbHVnaW5Db250YWluZXJQcml2YXRlLmgKICAgICBtYWMv
UGx1Z2lucy9XZWJKYXZhUGx1Z0luLmgKICAgICBtYWMvUGx1Z2lucy9XZWJQbHVnaW5WaWV3RmFj
dG9yeS5oCiAgICAgbWFjL1BsdWdpbnMvV2ViUGx1Z2luRGF0YWJhc2UuaAotICAgIG1hYy9QbHVn
aW5zL1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5oCiAgICAgbWFjL1BsdWdpbnMvV2ViUGx1Z2lu
LmgKIAogICAgIG1hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlclByaXZhdGUuaApAQCAtNjIx
LDcgKzU4Myw2IEBAIHNldChDOTlfRklMRVMKICAgICBtYWMvTWlzYy9XZWJOU1ZpZXdFeHRyYXMu
bQogICAgIG1hYy9NaXNjL1dlYk5TV2luZG93RXh0cmFzLm0KIAotICAgIG1hYy9QbHVnaW5zL1dl
YlBsdWdpblJlcXVlc3QubQogICAgIG1hYy9QbHVnaW5zL1dlYlBsdWdpbnNQcml2YXRlLm0KIAog
ICAgIG1hYy9QbHVnaW5zL0hvc3RlZC9XZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLm0KQEAg
LTY1Myw0NiArNjE0LDYgQEAgZm9yZWFjaCAoX2ZpbGUgJHtXZWJLaXRMZWdhY3lfTEVHQUNZX0ZP
UldBUkRJTkdfSEVBREVSU19GSUxFU30pCiAgICAgZW5kaWYgKCkKIGVuZGZvcmVhY2ggKCkKIAot
aWYgKE5PVCBFWElTVFMgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV2ViS2l0
TGVnYWN5L1dlYktpdFBsdWdpbkhvc3RUeXBlcy5oKQotICAgIGZpbGUoQ09QWQotICAgICAgICBt
YWMvUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luQWdlbnQuZGVmcwotICAgICAgICBtYWMvUGx1
Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luQWdlbnRSZXBseS5kZWZzCi0gICAgICAgIG1hYy9QbHVn
aW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5DbGllbnQuZGVmcwotICAgICAgICBtYWMvUGx1Z2lucy9I
b3N0ZWQvV2ViS2l0UGx1Z2luSG9zdC5kZWZzCi0gICAgICAgIERFU1RJTkFUSU9OICR7V2ViS2l0
TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9KQotICAgIGZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtX
ZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV2ViS2l0TGVnYWN5KQotICAgIGZpbGUo
Q09QWQotICAgICAgICBtYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luSG9zdFR5cGVzLmRl
ZnMKLSAgICAgICAgbWFjL1BsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkhvc3RUeXBlcy5oCi0g
ICAgICAgIERFU1RJTkFUSU9OICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L1dl
YktpdExlZ2FjeSkKLWVuZGlmICgpCi0KLWFkZF9jdXN0b21fY29tbWFuZCgKLSAgICBPVVRQVVQK
LSAgICAgICAgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV2ViS2l0UGx1Z2lu
QWdlbnRSZXBseVNlcnZlci5jCi0gICAgICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNF
U19ESVJ9L1dlYktpdFBsdWdpbkFnZW50UmVwbHlVc2VyLmMKLSAgICAgICAgJHtXZWJLaXRMZWdh
Y3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV2ViS2l0UGx1Z2luQWdlbnRTZXJ2ZXIuYwotICAgICAg
ICAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9XZWJLaXRQbHVnaW5BZ2VudFVz
ZXIuYwotICAgICAgICAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9XZWJLaXRQ
bHVnaW5Ib3N0U2VydmVyLmMKLSAgICAgICAgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VT
X0RJUn0vV2ViS2l0UGx1Z2luSG9zdFVzZXIuYwotICAgIERFUEVORFMgbWFjL1BsdWdpbnMvSG9z
dGVkL1dlYktpdFBsdWdpbkFnZW50LmRlZnMgbWFjL1BsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdp
bkhvc3QuZGVmcwotICAgIFdPUktJTkdfRElSRUNUT1JZICR7V2ViS2l0TGVnYWN5X0RFUklWRURf
U09VUkNFU19ESVJ9Ci0gICAgQ09NTUFORCBtaWcgLUkuLiBXZWJLaXRQbHVnaW5BZ2VudC5kZWZz
IFdlYktpdFBsdWdpbkFnZW50UmVwbHkuZGVmcyBXZWJLaXRQbHVnaW5Ib3N0LmRlZnMKLSAgICBW
RVJCQVRJTSkKLWFkZF9jdXN0b21fY29tbWFuZCgKLSAgICBPVVRQVVQKLSAgICAgICAgJHtXZWJL
aXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV2ViS2l0UGx1Z2luQ2xpZW50U2VydmVyLmMK
LSAgICAgICAgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV2ViS2l0UGx1Z2lu
Q2xpZW50VXNlci5jCi0gICAgREVQRU5EUyBtYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2lu
Q2xpZW50LmRlZnMKLSAgICBXT1JLSU5HX0RJUkVDVE9SWSAke1dlYktpdExlZ2FjeV9ERVJJVkVE
X1NPVVJDRVNfRElSfQotICAgIENPTU1BTkQgbWlnIC1JLi4gLXNoZWFkZXIgV2ViS2l0UGx1Z2lu
Q2xpZW50U2VydmVyLmggV2ViS2l0UGx1Z2luQ2xpZW50LmRlZnMKLSAgICBWRVJCQVRJTSkKLWxp
c3QoQVBQRU5EIFdlYktpdExlZ2FjeV9TT1VSQ0VTCi0gICAgJHtXZWJLaXRMZWdhY3lfREVSSVZF
RF9TT1VSQ0VTX0RJUn0vV2ViS2l0UGx1Z2luQWdlbnRVc2VyLmMKLSAgICAke1dlYktpdExlZ2Fj
eV9ERVJJVkVEX1NPVVJDRVNfRElSfS9XZWJLaXRQbHVnaW5DbGllbnRTZXJ2ZXIuYwotICAgICR7
V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L1dlYktpdFBsdWdpbkhvc3RVc2VyLmMK
LSkKLQogYWRkX2N1c3RvbV9jb21tYW5kKAogICAgIE9VVFBVVCAke1dlYktpdExlZ2FjeV9ERVJJ
VkVEX1NPVVJDRVNfRElSfS9XZWJWaWV3UHJlZmVyZW5jZXNDaGFuZ2VkR2VuZXJhdGVkLm1tICR7
V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L1dlYlByZWZlcmVuY2VzSW50ZXJuYWxG
ZWF0dXJlcy5tbSAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9XZWJQcmVmZXJl
bmNlc0V4cGVyaW1lbnRhbEZlYXR1cmVzLm1tICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNF
U19ESVJ9L1dlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaAogICAgIERFUEVORFMgJHtXZWJLaXRf
V0VCX1BSRUZFUkVOQ0VTX1RFTVBMQVRFU30gJHtXZWJLaXRfV0VCX1BSRUZFUkVOQ0VTfSBXVEZf
Q29weVByZWZlcmVuY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1dlYktpdExl
Z2FjeS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdExlZ2FjeS9XZWJL
aXRMZWdhY3kueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmZTNiZTBhNzkzNjY4N2Nj
OTQyZTZjNWMxOTAzNmU0MjAzZGVlZTEzLi5kZGM1ZWJiYmY1ZGFjMzg1Zjg3ZTZmMzBjOGY4MDg5
ZWQ0ZWZmY2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1dlYktpdExlZ2FjeS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvV2ViS2l0
TGVnYWN5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ0LDEyICs0NCw2IEBACiAJCTE0
RDgyNTMwMEFGOTU1MDkwMDA0RjA1NyAvKiBXZWJDaHJvbWVDbGllbnQubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQ4MjUyRTBBRjk1NTA5MDAwNEYw
NTcgLyogV2ViQ2hyb21lQ2xpZW50Lm1tICovOyB9OwogCQkxQTA4RkVFMDFENTkzNzZFMDA4QkE4
Q0IgLyogV2ViUGx1Z2luSW5mb1Byb3ZpZGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwOEZFREUxRDU5Mzc2RTAwOEJBOENCIC8qIFdlYlBsdWdp
bkluZm9Qcm92aWRlci5tbSAqLzsgfTsKIAkJMUEwOEZFRTExRDU5Mzc2RTAwOEJBOENCIC8qIFdl
YlBsdWdpbkluZm9Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUEwOEZFREYxRDU5Mzc2RTAwOEJBOENCIC8qIFdlYlBsdWdpbkluZm9Qcm92
aWRlci5oICovOyB9OwotCQkxQTJEQkU5RjBGMjUxRTNBMDAzNkY4QTYgLyogUHJveHlJbnN0YW5j
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyREJF
OUQwRjI1MUUzQTAwMzZGOEE2IC8qIFByb3h5SW5zdGFuY2UuaCAqLzsgfTsKLQkJMUEyREJFQTAw
RjI1MUUzQTAwMzZGOEE2IC8qIFByb3h5SW5zdGFuY2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTJEQkU5RTBGMjUxRTNBMDAzNkY4QTYgLyogUHJv
eHlJbnN0YW5jZS5tbSAqLzsgfTsKLQkJMUE0REY1MjIwRUM4Qzc0RDAwNkJENEI0IC8qIFdlYk5l
dHNjYXBlUGx1Z2luVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUE0REY1MjAwRUM4Qzc0RDAwNkJENEI0IC8qIFdlYk5ldHNjYXBlUGx1Z2luVmll
dy5oICovOyB9OwotCQkxQTRERjUyMzBFQzhDNzREMDA2QkQ0QjQgLyogV2ViTmV0c2NhcGVQbHVn
aW5WaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUE0REY1MjEwRUM4Qzc0RDAwNkJENEI0IC8qIFdlYk5ldHNjYXBlUGx1Z2luVmlldy5tbSAqLzsg
c2V0dGluZ3MgPSB7Q09NUElMRVJfRkxBR1MgPSAiLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9u
cyI7IH07IH07Ci0JCTFBNERGNUU0MEVDOEQxMDQwMDZCRDRCNCAvKiBXZWJCYXNlTmV0c2NhcGVQ
bHVnaW5WaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQTRERjVFMjBFQzhEMTA0MDA2QkQ0QjQgLyogV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5o
ICovOyB9OwotCQkxQTRERjVFNTBFQzhEMTA0MDA2QkQ0QjQgLyogV2ViQmFzZU5ldHNjYXBlUGx1
Z2luVmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBNERGNUUzMEVDOEQxMDQwMDZCRDRCNCAvKiBXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1t
ICovOyB9OwogCQkxQTU5MUQ0NTFBMkU5MUJCMDAwOTA3QzQgLyogV2ViU3RvcmFnZU5hbWVzcGFj
ZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBNTkxRDQzMUEyRTkxQkIwMDA5MDdDNCAvKiBXZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlk
ZXIuY3BwICovOyB9OwogCQkxQTU5MUQ0NjFBMkU5MUJCMDAwOTA3QzQgLyogV2ViU3RvcmFnZU5h
bWVzcGFjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTU5MUQ0NDFBMkU5MUJCMDAwOTA3QzQgLyogV2ViU3RvcmFnZU5hbWVzcGFjZVBy
b3ZpZGVyLmggKi87IH07CiAJCTFBNjA1MTkxMTc1MDJBNUQwMEJDNjJGNSAvKiBCaW5hcnlQcm9w
ZXJ0eUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUE2MDUxOEQxNzUwMkE1RDAwQkM2MkY1IC8qIEJpbmFyeVByb3BlcnR5TGlzdC5jcHAgKi87
IH07CkBAIC03MSwzOSArNjUsMTcgQEAKIAkJMUE2QjMxM0IxQTUxRjNBOTAwNDIyOTc1IC8qIFN0
b3JhZ2VUcmFja2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBNkIzMTJFMUE1MUYzQTkwMDQyMjk3NSAvKiBTdG9yYWdlVHJhY2tlci5jcHAgKi87
IH07CiAJCTFBNkIzMTNDMUE1MUYzQTkwMDQyMjk3NSAvKiBTdG9yYWdlVHJhY2tlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE2QjMxMkYxQTUxRjNB
OTAwNDIyOTc1IC8qIFN0b3JhZ2VUcmFja2VyLmggKi87IH07CiAJCTFBNkIzMTNEMUE1MUYzQTkw
MDQyMjk3NSAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE2QjMxMzAxQTUxRjNBOTAwNDIyOTc1IC8qIFN0b3Jh
Z2VUcmFja2VyQ2xpZW50LmggKi87IH07Ci0JCTFBNzRBMjhFMEY0Rjc1NDAwMDgyRTIyOCAvKiBX
ZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc0QTI4QzBGNEY3NTQwMDA4MkUyMjggLyogV2ViVGV4dElu
cHV0V2luZG93Q29udHJvbGxlci5oICovOyB9OwotCQkxQTc0QTI4RjBGNEY3NTQwMDA4MkUyMjgg
LyogV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NEEyOEQwRjRGNzU0MDAwODJFMjI4IC8qIFdlYlRl
eHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIubSAqLzsgfTsKLQkJMUE3N0IwMkUwRUU3NzMwNTAwQzhB
MUY5IC8qIFdlYlBsdWdpblJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBNzdCMDJDMEVFNzczMDUwMEM4QTFGOSAvKiBXZWJQbHVnaW5SZXF1
ZXN0LmggKi87IH07Ci0JCTFBNzdCMDJGMEVFNzczMDUwMEM4QTFGOSAvKiBXZWJQbHVnaW5SZXF1
ZXN0Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc3
QjAyRDBFRTc3MzA1MDBDOEExRjkgLyogV2ViUGx1Z2luUmVxdWVzdC5tICovOyB9OwogCQkxQTg2
Q0NENDFBRDQ4QTYyMDA3NEJBODkgLyogV2ViQXBwbGljYXRpb25DYWNoZUludGVybmFsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTg2Q0NEMzFBRDQ4
QTYyMDA3NEJBODkgLyogV2ViQXBwbGljYXRpb25DYWNoZUludGVybmFsLmggKi87IH07Ci0JCTFB
OERFRDUwMEVFODhCOEEwMEYyNTAyMiAvKiBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE4REVENEUwRUU4
OEI4QTAwRjI1MDIyIC8qIEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtLmggKi87IH07Ci0JCTFB
OERFRDUxMEVFODhCOEEwMEYyNTAyMiAvKiBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOERFRDRGMEVF
ODhCOEEwMEYyNTAyMiAvKiBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbS5tbSAqLzsgfTsKIAkJ
MUE5MTE5RjYxREIwNDcwQTAwODdEMUZEIC8qIEJhY2tGb3J3YXJkTGlzdC5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTExOUY0MURCMDQ3MEEwMDg3
RDFGRCAvKiBCYWNrRm9yd2FyZExpc3QubW0gKi87IH07CiAJCTFBOTExOUY3MURCMDQ3MEEwMDg3
RDFGRCAvKiBCYWNrRm9yd2FyZExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBOTExOUY1MURCMDQ3MEEwMDg3RDFGRCAvKiBCYWNrRm9yd2FyZExp
c3QuaCAqLzsgfTsKIAkJMUFBODNGODMxQTVDNEFFNDAwMDI2RUM2IC8qIFdlYkRhdGFiYXNlUHJv
dmlkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUFBODNGODExQTVDNEFFNDAwMDI2RUM2IC8qIFdlYkRhdGFiYXNlUHJvdmlkZXIuY3BwICovOyB9
OwogCQkxQUE4M0Y4NDFBNUM0QUU0MDAwMjZFQzYgLyogV2ViRGF0YWJhc2VQcm92aWRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBODNGODIxQTVD
NEFFNDAwMDI2RUM2IC8qIFdlYkRhdGFiYXNlUHJvdmlkZXIuaCAqLzsgfTsKIAkJMUFBODc5QjYx
MUNCRTlCRjAwM0M2NjRGIC8qIFdlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBODc5QjQxMUNCRTlCRjAwM0M2NjRG
IC8qIFdlYlBsYXRmb3JtU3RyYXRlZ2llcy5oICovOyB9OwogCQkxQUE4NzlCNzExQ0JFOUJGMDAz
QzY2NEYgLyogV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBODc5QjUxMUNCRTlCRjAwM0M2NjRGIC8qIFdlYlBs
YXRmb3JtU3RyYXRlZ2llcy5tbSAqLzsgfTsKLQkJMUFBRjVDRUEwRURERTFGRTAwOEQ4ODNEIC8q
IE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUY1Q0U0MEVEREUxRkUwMDhEODgzRCAvKiBOZXRzY2FwZVBs
dWdpbkhvc3RNYW5hZ2VyLmggKi87IH07Ci0JCTFBQUY1Q0VCMEVEREUxRkUwMDhEODgzRCAvKiBO
ZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUFBRjVDRTUwRURERTFGRTAwOEQ4ODNEIC8qIE5ldHNjYXBlUGx1
Z2luSG9zdE1hbmFnZXIubW0gKi87IH07Ci0JCTFBQUY1Q0VDMEVEREUxRkUwMDhEODgzRCAvKiBO
ZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUFBRjVDRTYwRURERTFGRTAwOEQ4ODNEIC8qIE5ldHNjYXBlUGx1Z2lu
SG9zdFByb3h5LmggKi87IH07Ci0JCTFBQUY1Q0VEMEVEREUxRkUwMDhEODgzRCAvKiBOZXRzY2Fw
ZVBsdWdpbkhvc3RQcm94eS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBQUY1Q0U3MEVEREUxRkUwMDhEODgzRCAvKiBOZXRzY2FwZVBsdWdpbkhvc3RQ
cm94eS5tbSAqLzsgfTsKLQkJMUFBRjVDRUUwRURERTFGRTAwOEQ4ODNEIC8qIE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUFBRjVDRTgwRURERTFGRTAwOEQ4ODNEIC8qIE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eS5oICovOyB9OwotCQkxQUFGNUNFRjBFRERFMUZFMDA4RDg4M0QgLyogTmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUFBRjVDRTkwRURERTFGRTAwOEQ4ODNEIC8qIE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eS5tbSAqLzsgfTsKLQkJMUFBRjVDRjEwRURERTU4NjAwOEQ4ODNEIC8qIFdlYktp
dFBsdWdpbkhvc3QuZGVmcyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBQUY1ODhEMEVEQ0NFQTMwMDhEODgzRCAvKiBXZWJLaXRQbHVnaW5Ib3N0LmRlZnMg
Ki87IH07Ci0JCTFBQUY1RDAwMEVEREU2MDQwMDhEODgzRCAvKiBXZWJLaXRQbHVnaW5DbGllbnQu
ZGVmcyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUY1
ODhDMEVEQ0NFQTMwMDhEODgzRCAvKiBXZWJLaXRQbHVnaW5DbGllbnQuZGVmcyAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChTZXJ2ZXIsICk7IH07IH07Ci0JCTFBQUY1RDA5MEVEREU3MUQw
MDhEODgzRCAvKiBXZWJLaXRQbHVnaW5Ib3N0VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUY1RDA4MEVEREU3MUQwMDhEODgzRCAvKiBXZWJL
aXRQbHVnaW5Ib3N0VHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkxQUFGNUQwRjBFRERFN0E3MDA4RDg4M0QgLyogV2ViS2l0UGx1Z2luQWdl
bnQuZGVmcyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
QUY1ODhBMEVEQ0NFQTMwMDhEODgzRCAvKiBXZWJLaXRQbHVnaW5BZ2VudC5kZWZzICovOyB9Owot
CQkxQUFGNUZCRjBFREUzQTkyMDA4RDg4M0QgLyogV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUFGNUZC
RDBFREUzQTkyMDA4RDg4M0QgLyogV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3LmggKi87IH07
Ci0JCTFBQUY1RkMwMEVERTNBOTIwMDhEODgzRCAvKiBXZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZp
ZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUFG
NUZCRTBFREUzQTkyMDA4RDg4M0QgLyogV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Lm1tICov
OyB9OwogCQkxQUIxRjc2RTFEMUIyNjBCMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9y
Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QUIxRjc2QzFEMUIyNjBCMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yQ2xpZW50Lmgg
Ki87IH07CiAJCTFBQjFGNzZGMUQxQjI2MEIwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0
b3JDbGllbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQUIxRjc2RDFEMUIyNjBCMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yQ2xpZW50
Lm1tICovOyB9OwogCQkxQUM3MTc2RTFBMjY1NjhBMDAyRTMxMTUgLyogV2ViVmlzaXRlZExpbmtT
dG9yZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
QzcxNzZDMUEyNjU2OEEwMDJFMzExNSAvKiBXZWJWaXNpdGVkTGlua1N0b3JlLm1tICovOyB9Owog
CQkxQUM3MTc2RjFBMjY1NjhBMDAyRTMxMTUgLyogV2ViVmlzaXRlZExpbmtTdG9yZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFDNzE3NkQxQTI2NTY4
QTAwMkUzMTE1IC8qIFdlYlZpc2l0ZWRMaW5rU3RvcmUuaCAqLzsgfTsKLQkJMUFFQTY2RDQwREM2
QjFGRjAwM0QxMkJGIC8qIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUVBNjZEMjBEQzZCMUZGMDAz
RDEyQkYgLyogV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXIuaCAqLzsgfTsKLQkJMUFFQTY2
RDUwREM2QjFGRjAwM0QxMkJGIC8qIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFFQTY2RDMwREM2
QjFGRjAwM0QxMkJGIC8qIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyLm1tICovOyB9Owot
CQkxQUVBNkE1MDBEQzhDRTJGMDAzRDEyQkYgLyogV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRs
ZXJDb2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUFFQTZBNEUwREM4Q0UyRjAwM0QxMkJGIC8qIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVy
Q29jb2EuaCAqLzsgfTsKLQkJMUFFQTZBNTEwREM4Q0UyRjAwM0QxMkJGIC8qIFdlYk5ldHNjYXBl
UGx1Z2luRXZlbnRIYW5kbGVyQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQUVBNkE0RjBEQzhDRTJGMDAzRDEyQkYgLyogV2ViTmV0c2NhcGVQ
bHVnaW5FdmVudEhhbmRsZXJDb2NvYS5tbSAqLzsgfTsKIAkJMUMwRDQwODcwQUMxQzhGNDAwMDlD
MTEzIC8qIFdlYktpdFZlcnNpb25DaGVja3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDMEQ0MDg1MEFDMUM4RjQwMDA5QzExMyAvKiBXZWJLaXRWZXJz
aW9uQ2hlY2tzLmggKi87IH07CiAJCTFDNjhGNjZGMDk1QjVGQzEwMEMyOTg0RSAvKiBXZWJOb2Rl
SGlnaGxpZ2h0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQzY4RjY2MzA5NUI1RkMxMDBDMjk4NEUgLyogV2ViTm9kZUhpZ2hsaWdodC5oICovOyB9Owog
CQkxQzY4RjY3MDA5NUI1RkMxMDBDMjk4NEUgLyogV2ViTm9kZUhpZ2hsaWdodC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDNjhGNjY0MDk1QjVGQzEw
MEMyOTg0RSAvKiBXZWJOb2RlSGlnaGxpZ2h0Lm1tICovOyB9OwpAQCAtMTU4LDExICsxMzAsNiBA
QAogCQk1MUZEQzREMzBCMEFGNUMxMDBGODRFQjMgLyogV2ViSGlzdG9yeUl0ZW1Qcml2YXRlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZEQzREMjBC
MEFGNUMxMDBGODRFQjMgLyogV2ViSGlzdG9yeUl0ZW1Qcml2YXRlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTI0MUFERjUwQjFCQzQ4QTAwNDAx
MkJEIC8qIFdlYkNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MjQxQURGMzBCMUJDNDhBMDA0MDEyQkQgLyogV2ViQ2FjaGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MjQxQURGNjBCMUJDNDhB
MDA0MDEyQkQgLyogV2ViQ2FjaGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MjQxQURGNDBCMUJDNDhBMDA0MDEyQkQgLyogV2ViQ2FjaGUubW0gKi87
IH07Ci0JCTUzNUUwOENDMjI1NDYzQjIwMERGMDBDQSAvKiBXZWJLaXRQbHVnaW5BZ2VudC5kZWZz
IGluIENvcHkgTWlnIEZpbGVzIGludG8gUHJpdmF0ZSBGcmFtZXdvcmsgSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUFGNTg4QTBFRENDRUEzMDA4RDg4M0QgLyog
V2ViS2l0UGx1Z2luQWdlbnQuZGVmcyAqLzsgfTsKLQkJNTM1RTA4Q0QyMjU0NjNCMjAwREYwMENB
IC8qIFdlYktpdFBsdWdpbkFnZW50UmVwbHkuZGVmcyBpbiBDb3B5IE1pZyBGaWxlcyBpbnRvIFBy
aXZhdGUgRnJhbWV3b3JrIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUFBRjU4OEIwRURDQ0VBMzAwOEQ4ODNEIC8qIFdlYktpdFBsdWdpbkFnZW50UmVwbHkuZGVm
cyAqLzsgfTsKLQkJNTM1RTA4Q0UyMjU0NjNCMjAwREYwMENBIC8qIFdlYktpdFBsdWdpbkNsaWVu
dC5kZWZzIGluIENvcHkgTWlnIEZpbGVzIGludG8gUHJpdmF0ZSBGcmFtZXdvcmsgSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUFGNTg4QzBFRENDRUEzMDA4RDg4
M0QgLyogV2ViS2l0UGx1Z2luQ2xpZW50LmRlZnMgKi87IH07Ci0JCTUzNUUwOENGMjI1NDYzQjIw
MERGMDBDQSAvKiBXZWJLaXRQbHVnaW5Ib3N0LmRlZnMgaW4gQ29weSBNaWcgRmlsZXMgaW50byBQ
cml2YXRlIEZyYW1ld29yayBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBQUY1ODhEMEVEQ0NFQTMwMDhEODgzRCAvKiBXZWJLaXRQbHVnaW5Ib3N0LmRlZnMgKi87
IH07Ci0JCTUzNUUwOEQwMjI1NDYzQjIwMERGMDBDQSAvKiBXZWJLaXRQbHVnaW5Ib3N0VHlwZXMu
ZGVmcyBpbiBDb3B5IE1pZyBGaWxlcyBpbnRvIFByaXZhdGUgRnJhbWV3b3JrIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBRjU4OEUwRURDQ0VBMzAwOEQ4ODNE
IC8qIFdlYktpdFBsdWdpbkhvc3RUeXBlcy5kZWZzICovOyB9OwogCQk1OThBRDkxQTEyMDFDRUM5
MDBBQkFFNEUgLyogV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5OEFEOTE5MTIwMUNFQzkwMEFCQUU0RSAv
KiBXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudC5oICovOyB9OwogCQk1OThBRDkxRTEyMDFDRUNG
MDBBQkFFNEUgLyogV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnQubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OThBRDkxRDEyMDFDRUNGMDBBQkFFNEUg
LyogV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnQubW0gKi87IH07CiAJCTU5OEFEOTIwMTIwMUNG
MDcwMEFCQUU0RSAvKiBXZWJEZXZpY2VPcmllbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTk4QUQ5MUYxMjAxQ0YwNzAwQUJBRTRFIC8qIFdl
YkRldmljZU9yaWVudGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTI2NCw5ICsyMzEsNyBAQAogCQk5Mzk4MTAyNzA4MjRCRjAxMDA4REYw
MzggLyogV2ViU3RyaW5nVHJ1bmNhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNTk2NjhDODAyQUQyOTIzMDE4NjM1Q0EgLyogV2ViU3RyaW5nVHJ1
bmNhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOTM5ODEwMjkwODI0QkYwMTAwOERGMDM4IC8qIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY4Q0ExNUI1MDI5
QTM5RDkwMTAwMDEyMiAvKiBXZWJBdXRoZW50aWNhdGlvblBhbmVsLmggKi87IH07CiAJCTkzOTgx
MDJBMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJQYW5lbEF1dGhlbnRpY2F0aW9uSGFuZGxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMxNTRFRjEwM0E0
MTI3MDAwODYzNUNFIC8qIFdlYlBhbmVsQXV0aGVudGljYXRpb25IYW5kbGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJOTM5ODEwMkIwODI0QkYw
MTAwOERGMDM4IC8qIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNUE2NzJCOTAyNjM4NjZFMDEwMDAxMDIgLyog
V2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0uaCAqLzsgfTsKIAkJOTM5ODEwMkUwODI0QkYwMTAwOERG
MDM4IC8qIFdlYkJhc2VQbHVnaW5QYWNrYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4M0U0QUY0NjAzNjY1MjE1MDAwMEU1MDYgLyogV2ViQmFzZVBs
dWdpblBhY2thZ2UuaCAqLzsgfTsKLQkJOTM5ODEwMzEwODI0QkYwMTAwOERGMDM4IC8qIFdlYk5l
dHNjYXBlUGx1Z2luUGFja2FnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjVGNzE3MUUwMjg4NDkzQzAxODYzNUNBIC8qIFdlYk5ldHNjYXBlUGx1Z2lu
UGFja2FnZS5oICovOyB9OwogCQk5Mzk4MTAzNTA4MjRCRjAxMDA4REYwMzggLyogV2ViUGx1Z2lu
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDhERkY4
NDAzNjVGRTZBMDBDQTJBQ0EgLyogV2ViUGx1Z2luLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTM5ODEwMzYwODI0QkYwMTAwOERGMDM4IC8qIFdl
YlBsdWdpbkNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODQ4REZGODUwMzY1RkU2QTAwQ0EyQUNBIC8qIFdlYlBsdWdpbkNvbnRhaW5lci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzOTgx
MDM3MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJQbHVnaW5Db250cm9sbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDY3Mjc1QzAzNjcxNTg1MDBDQTJB
Q0EgLyogV2ViUGx1Z2luQ29udHJvbGxlci5oICovOyB9OwpAQCAtMzQ4LDEwICszMTMsNyBAQAog
CQk5Mzk4MTBDQzA4MjRCRjAxMDA4REYwMzggLyogV2ViU3RyaW5nVHJ1bmNhdG9yLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU5NjY4QzkwMkFEMjky
MzAxODYzNUNBIC8qIFdlYlN0cmluZ1RydW5jYXRvci5tbSAqLzsgfTsKIAkJOTM5ODEwQ0YwODI0
QkYwMTAwOERGMDM4IC8qIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwubSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY4Q0ExNUI2MDI5QTM5RDkwMTAwMDEyMiAv
KiBXZWJBdXRoZW50aWNhdGlvblBhbmVsLm0gKi87IH07CiAJCTkzOTgxMEQwMDgyNEJGMDEwMDhE
RjAzOCAvKiBXZWJQYW5lbEF1dGhlbnRpY2F0aW9uSGFuZGxlci5tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMxNTRFRjIwM0E0MTI3MDAwODYzNUNFIC8q
IFdlYlBhbmVsQXV0aGVudGljYXRpb25IYW5kbGVyLm0gKi87IH07Ci0JCTkzOTgxMEQxMDgyNEJG
MDEwMDhERjAzOCAvKiBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1QTY3MkJBMDI2Mzg2NkUwMTAwMDEwMiAv
KiBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbSAqLzsgfTsKLQkJOTM5ODEwRDYwODI0QkYwMTAw
OERGMDM4IC8qIFdlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1RjcxNzFGMDI4ODQ5M0MwMTg2MzVDQSAvKiBX
ZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UubW0gKi87IH07CiAJCTkzOTgxMERDMDgyNEJGMDEwMDhE
RjAzOCAvKiBXZWJQbHVnaW5QYWNrYWdlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODNFNEFGNEMwMzY2NTk0NDAwMDBFNTA2IC8qIFdlYlBsdWdpblBh
Y2thZ2UubW0gKi87IH07Ci0JCTkzOTgxMEREMDgyNEJGMDEwMDhERjAzOCAvKiBucGFwaS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1RjcxNzIzMDI4
ODQ5M0MwMTg2MzVDQSAvKiBucGFwaS5tbSAqLzsgfTsKIAkJOTM5ODEwRTQwODI0QkYwMTAwOERG
MDM4IC8qIFdlYkphdmFTY3JpcHRUZXh0SW5wdXRQYW5lbC5tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM0NUQ0RUIwMzY1QzVCMjAwODYzNUNFIC8qIFdl
YkphdmFTY3JpcHRUZXh0SW5wdXRQYW5lbC5tICovOyB9OwogCQk5Mzk4MTBGMDA4MjRCRjAxMDA4
REYwMzggLyogV2ViRGVmYXVsdFBvbGljeURlbGVnYXRlLm0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTUyRkFFMDAzM0ZDNTA0MDBDQTJBQ0QgLyogV2Vi
RGVmYXVsdFBvbGljeURlbGVnYXRlLm0gKi87IH07CiAJCTkzOTgxMEYxMDgyNEJGMDEwMDhERjAz
OCAvKiBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzOTQ0NjA2QzAyMEY1MEVEMEVDQTE3NjcgLyogV2ViRHlu
YW1pY1Njcm9sbEJhcnNWaWV3Lm1tICovOyB9OwpAQCAtNjg3LDggKzY0OSw2IEBACiAJCUUxM0U3
ODJDMUU1QTczNjUwMDE4NDlEMSAvKiBXZWJDcmVhdGVGcmFnbWVudEludGVybmFsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTNFNzgyQjFFNUE3MzY1
MDAxODQ5RDEgLyogV2ViQ3JlYXRlRnJhZ21lbnRJbnRlcm5hbC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUxNTMxQkQ4MjE4N0I5NTQwMDJFM0Y4
MSAvKiBOU1VSTERvd25sb2FkU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMTUzMUJENzIxODdCOEYyMDAyRTNGODEgLyogTlNVUkxEb3dubG9hZFNQ
SS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUx
NTY2MzE5MEZCNjFDMUYwMEMxOTlDQSAvKiBXZWJEb3dubG9hZC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTY2MzE4MEZCNjFDMUYwMEMxOTlDQSAv
KiBXZWJEb3dubG9hZC5tbSAqLzsgfTsKLQkJRTE2OTgzNjIxMTM0NkQxQjAwODk0MTE1IC8qIFBy
b3h5UnVudGltZU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTE2OTgzNjExMTM0NkQxQjAwODk0MTE1IC8qIFByb3h5UnVudGltZU9iamVjdC5o
ICovOyB9OwotCQlFMTY5ODM2QzExMzQ2RDU2MDA4OTQxMTUgLyogUHJveHlSdW50aW1lT2JqZWN0
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE2OTgz
NkIxMTM0NkQ1NjAwODk0MTE1IC8qIFByb3h5UnVudGltZU9iamVjdC5tbSAqLzsgfTsKIAkJRTRB
RUY5N0MxQzBERjRCQzAwQjAxNzI3IC8qIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBRUY5N0ExQzBERjRC
QzAwQjAxNzI3IC8qIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oICovOyB9OwogCQlFRDVCOTUy
NDExMUI3MjVBMDA0NzIyOTggLyogV2ViTG9jYWxpemFibGVTdHJpbmdzLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUQ1Qjk1MjMxMTFCNzI1QTAwNDcy
Mjk4IC8qIFdlYkxvY2FsaXphYmxlU3RyaW5ncy5tbSAqLzsgfTsKIAkJRUQ3RjZEOEIwOTgwNjgz
NTAwQzIzNUVEIC8qIFdlYk5TRGF0YUV4dHJhc1ByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVEN0Y2RDhBMDk4MDY4MzUwMEMyMzVFRCAvKiBX
ZWJOU0RhdGFFeHRyYXNQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTczMSwxMSArNjkxLDYgQEAKIAkJCWRzdFBhdGggPSBQcml2YXRl
SGVhZGVyczsKIAkJCWRzdFN1YmZvbGRlclNwZWMgPSAxOwogCQkJZmlsZXMgPSAoCi0JCQkJNTM1
RTA4Q0MyMjU0NjNCMjAwREYwMENBIC8qIFdlYktpdFBsdWdpbkFnZW50LmRlZnMgaW4gQ29weSBN
aWcgRmlsZXMgaW50byBQcml2YXRlIEZyYW1ld29yayBIZWFkZXJzICovLAotCQkJCTUzNUUwOENE
MjI1NDYzQjIwMERGMDBDQSAvKiBXZWJLaXRQbHVnaW5BZ2VudFJlcGx5LmRlZnMgaW4gQ29weSBN
aWcgRmlsZXMgaW50byBQcml2YXRlIEZyYW1ld29yayBIZWFkZXJzICovLAotCQkJCTUzNUUwOENF
MjI1NDYzQjIwMERGMDBDQSAvKiBXZWJLaXRQbHVnaW5DbGllbnQuZGVmcyBpbiBDb3B5IE1pZyBG
aWxlcyBpbnRvIFByaXZhdGUgRnJhbWV3b3JrIEhlYWRlcnMgKi8sCi0JCQkJNTM1RTA4Q0YyMjU0
NjNCMjAwREYwMENBIC8qIFdlYktpdFBsdWdpbkhvc3QuZGVmcyBpbiBDb3B5IE1pZyBGaWxlcyBp
bnRvIFByaXZhdGUgRnJhbWV3b3JrIEhlYWRlcnMgKi8sCi0JCQkJNTM1RTA4RDAyMjU0NjNCMjAw
REYwMENBIC8qIFdlYktpdFBsdWdpbkhvc3RUeXBlcy5kZWZzIGluIENvcHkgTWlnIEZpbGVzIGlu
dG8gUHJpdmF0ZSBGcmFtZXdvcmsgSGVhZGVycyAqLywKIAkJCSk7CiAJCQluYW1lID0gIkNvcHkg
TWlnIEZpbGVzIGludG8gUHJpdmF0ZSBGcmFtZXdvcmsgSGVhZGVycyI7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTc1NSwxMiArNzEwLDYgQEAKIAkJMTRE
ODI1MkUwQUY5NTUwOTAwMDRGMDU3IC8qIFdlYkNocm9tZUNsaWVudC5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNocm9tZUNsaWVudC5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEwOEZFREUxRDU5Mzc2RTAwOEJBOENCIC8qIFdlYlBsdWdp
bkluZm9Qcm92aWRlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFdlYlBsdWdpbkluZm9Qcm92aWRlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUEwOEZFREYxRDU5Mzc2RTAwOEJBOENCIC8qIFdlYlBsdWdpbkluZm9Qcm92aWRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbHVnaW5JbmZvUHJvdmlkZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEyREJFOUQwRjI1MUUzQTAwMzZGOEE2IC8qIFBy
b3h5SW5zdGFuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJveHlJbnN0
YW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTJEQkU5RTBGMjUxRTNBMDAz
NkY4QTYgLyogUHJveHlJbnN0YW5jZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFByb3h5SW5zdGFuY2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTFBNERGNTIwMEVDOEM3NEQwMDZCRDRCNCAvKiBXZWJOZXRzY2FwZVBsdWdpblZpZXcuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBNERGNTIxMEVDOEM3NEQwMDZCRDRCNCAvKiBX
ZWJOZXRzY2FwZVBsdWdpblZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXZWJOZXRzY2FwZVBsdWdpblZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTFBNERGNUUyMEVDOEQxMDQwMDZCRDRCNCAvKiBXZWJCYXNlTmV0c2NhcGVQbHVnaW5W
aWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkJhc2VOZXRzY2FwZVBs
dWdpblZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE0REY1RTMwRUM4RDEw
NDAwNkJENEI0IC8qIFdlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTU5MUQ0MzFBMkU5MUJCMDAwOTA3QzQgLyog
V2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFdlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHA7IHBhdGggPSAuLi8u
Li9TdG9yYWdlL1dlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFBNTkxRDQ0MUEyRTkxQkIwMDA5MDdDNCAvKiBXZWJTdG9yYWdlTmFt
ZXNwYWNlUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViU3Rv
cmFnZU5hbWVzcGFjZVByb3ZpZGVyLmg7IHBhdGggPSAuLi8uLi9TdG9yYWdlL1dlYlN0b3JhZ2VO
YW1lc3BhY2VQcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTYwNTE4
RDE3NTAyQTVEMDBCQzYyRjUgLyogQmluYXJ5UHJvcGVydHlMaXN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpbmFyeVByb3BlcnR5TGlzdC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODIsNDEgKzczMSwxNyBAQAogCQkxQTZCMzEyRTFBNTFG
M0E5MDA0MjI5NzUgLyogU3RvcmFnZVRyYWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gU3RvcmFnZVRyYWNrZXIuY3BwOyBwYXRoID0gU3RvcmFnZS9TdG9yYWdl
VHJhY2tlci5jcHA7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJMUE2QjMxMkYxQTUx
RjNBOTAwNDIyOTc1IC8qIFN0b3JhZ2VUcmFja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFN0b3JhZ2VUcmFja2VyLmg7IHBhdGggPSBTdG9yYWdlL1N0b3JhZ2VUcmFja2Vy
Lmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJMUE2QjMxMzAxQTUxRjNBOTAwNDIy
OTc1IC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFN0b3JhZ2VUcmFja2VyQ2xpZW50Lmg7IHBhdGggPSBTdG9yYWdlL1N0b3JhZ2VUcmFj
a2VyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKLQkJMUE3NEEyOEMwRjRG
NzU0MDAwODJFMjI4IC8qIFdlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTc0QTI4RDBGNEY3NTQwMDA4MkUyMjggLyog
V2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgZmlsZUVuY29kaW5nID0g
NDsgcGF0aCA9IFdlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIubTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMUE3N0IwMkMwRUU3NzMwNTAwQzhBMUY5IC8qIFdlYlBsdWdpblJlcXVl
c3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGx1Z2luUmVxdWVzdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTc3QjAyRDBFRTc3MzA1MDBDOEExRjkg
LyogV2ViUGx1Z2luUmVxdWVzdC5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGgg
PSBXZWJQbHVnaW5SZXF1ZXN0Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBODZD
Q0QzMUFENDhBNjIwMDc0QkE4OSAvKiBXZWJBcHBsaWNhdGlvbkNhY2hlSW50ZXJuYWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQXBwbGljYXRpb25DYWNoZUludGVybmFs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBOERFRDRFMEVFODhCOEEwMEYyNTAy
MiAvKiBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkxQThERUQ0RjBFRTg4QjhBMDBGMjUwMjIgLyogSG9zdGVkTmV0c2NhcGVQ
bHVnaW5TdHJlYW0ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBI
b3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUE5MTE5RjQxREIwNDcwQTAwODdEMUZEIC8qIEJhY2tGb3J3YXJkTGlzdC5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEJhY2tGb3J3YXJkTGlzdC5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE5MTE5RjUxREIwNDcwQTAwODdEMUZEIC8qIEJh
Y2tGb3J3YXJkTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYWNrRm9y
d2FyZExpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBODNGODExQTVDNEFF
NDAwMDI2RUM2IC8qIFdlYkRhdGFiYXNlUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gV2ViRGF0YWJhc2VQcm92aWRlci5jcHA7IHBhdGggPSAuLi8uLi9T
dG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQUE4M0Y4MjFBNUM0QUU0MDAwMjZFQzYgLyogV2ViRGF0YWJhc2VQcm92aWRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJEYXRhYmFzZVByb3ZpZGVyLmg7IHBh
dGggPSAuLi8uLi9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUFBODc5QjQxMUNCRTlCRjAwM0M2NjRGIC8qIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBODc5QjUxMUNCRTlC
RjAwM0M2NjRGIC8qIFdlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBRjU4OEEwRURDQ0VBMzAwOEQ4ODNEIC8qIFdlYktpdFBs
dWdpbkFnZW50LmRlZnMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLm1pZzsgcGF0aCA9IFdlYktpdFBs
dWdpbkFnZW50LmRlZnM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQUY1ODhCMEVE
Q0NFQTMwMDhEODgzRCAvKiBXZWJLaXRQbHVnaW5BZ2VudFJlcGx5LmRlZnMgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLm1pZzsgcGF0aCA9IFdlYktpdFBsdWdpbkFnZW50UmVwbHkuZGVmczsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBRjU4OEMwRURDQ0VBMzAwOEQ4ODNEIC8qIFdlYktp
dFBsdWdpbkNsaWVudC5kZWZzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5taWc7IHBhdGggPSBXZWJL
aXRQbHVnaW5DbGllbnQuZGVmczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBRjU4
OEQwRURDQ0VBMzAwOEQ4ODNEIC8qIFdlYktpdFBsdWdpbkhvc3QuZGVmcyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUubWlnOyBwYXRoID0gV2ViS2l0UGx1Z2luSG9zdC5kZWZzOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkxQUFGNTg4RTBFRENDRUEzMDA4RDg4M0QgLyogV2ViS2l0UGx1Z2lu
SG9zdFR5cGVzLmRlZnMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLm1pZzsgcGF0aCA9IFdlYktpdFBs
dWdpbkhvc3RUeXBlcy5kZWZzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUFGNUNF
NDBFRERFMUZFMDA4RDg4M0QgLyogTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQUY1Q0U1MEVEREUxRkUwMDhEODgzRCAvKiBO
ZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMUFBRjVDRTYwRURERTFGRTAwOEQ4ODNEIC8qIE5ldHNjYXBlUGx1Z2lu
SG9zdFByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHNjYXBlUGx1
Z2luSG9zdFByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQUY1Q0U3MEVE
REUxRkUwMDhEODgzRCAvKiBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUFGNUNFODBFRERFMUZFMDA4RDg4M0QgLyog
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkxQUFGNUNFOTBFRERFMUZFMDA4RDg4M0QgLyogTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkxQUFGNUQwODBFRERFNzFEMDA4RDg4M0QgLyogV2ViS2l0UGx1Z2luSG9zdFR5cGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdFBsdWdpbkhvc3RUeXBlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUFGNUZCRDBFREUzQTkyMDA4RDg4M0QgLyog
V2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkxQUFGNUZCRTBFREUzQTkyMDA4RDg4M0QgLyogV2ViSG9zdGVkTmV0c2NhcGVQ
bHVnaW5WaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2Vi
SG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQUIxRjc2QzFEMUIyNjBCMDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yQ2xpZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBheW1lbnRDb29yZGluYXRv
ckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUIxRjc2RDFEMUIyNjBC
MDA3QzlCRDEgLyogV2ViUGF5bWVudENvb3JkaW5hdG9yQ2xpZW50Lm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUGF5bWVudENvb3JkaW5hdG9yQ2xpZW50Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUM3MTc2QzFBMjY1NjhBMDAyRTMxMTUg
LyogV2ViVmlzaXRlZExpbmtTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFdlYlZpc2l0ZWRMaW5rU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFBQzcxNzZEMUEyNjU2OEEwMDJFMzExNSAvKiBXZWJWaXNpdGVkTGlua1N0b3JlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpc2l0ZWRMaW5rU3RvcmUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFFQTY2RDIwREM2QjFGRjAwM0QxMkJGIC8q
IFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTFBRUE2NkQzMERDNkIxRkYwMDNEMTJCRiAvKiBXZWJOZXRzY2FwZVBs
dWdpbkV2ZW50SGFuZGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkxQUVBNkE0RTBEQzhDRTJGMDAzRDEyQkYgLyogV2ViTmV0c2NhcGVQbHVnaW5F
dmVudEhhbmRsZXJDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJO
ZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTFBRUE2QTRGMERDOENFMkYwMDNEMTJCRiAvKiBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50
SGFuZGxlckNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUMwRDQwODUwQUMxQzhGNDAwMDlDMTEzIC8qIFdlYktpdFZlcnNpb25DaGVj
a3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0VmVyc2lvbkNoZWNr
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzY4RjY2MzA5NUI1RkMxMDBDMjk4
NEUgLyogV2ViTm9kZUhpZ2hsaWdodC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYk5vZGVIaWdobGlnaHQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IHdyYXBzTGluZXMgPSAwOyB9OwogCQkx
QzY4RjY2NDA5NUI1RkMxMDBDMjk4NEUgLyogV2ViTm9kZUhpZ2hsaWdodC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IHBhdGggPSBXZWJOb2RlSGln
aGxpZ2h0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJz
ID0gMDsgfTsKQEAgLTE1NDEsOCArMTQ2Niw2IEBACiAJCUUxM0U3ODJCMUU1QTczNjUwMDE4NDlE
MSAvKiBXZWJDcmVhdGVGcmFnbWVudEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9
IDQ7IHBhdGggPSBXZWJDcmVhdGVGcmFnbWVudEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUUxNTMxQkQ3MjE4N0I4RjIwMDJFM0Y4MSAvKiBOU1VSTERvd25sb2FkU1BJ
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5TVVJMRG93bmxvYWRTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTE1NjYzMTgwRkI2MUMxRjAwQzE5OUNBIC8qIFdlYkRvd25sb2FkLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViRG93bmxvYWQubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxNjk4MzYxMTEzNDZEMUIwMDg5NDExNSAvKiBQ
cm94eVJ1bnRpbWVPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJv
eHlSdW50aW1lT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxNjk4MzZC
MTEzNDZENTYwMDg5NDExNSAvKiBQcm94eVJ1bnRpbWVPYmplY3QubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQcm94eVJ1bnRpbWVPYmplY3QubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QUVGOTc5MUMwREY0QkMwMEIwMTcyNyAvKiBXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxp
Y2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IGZpbGVFbmNvZGluZyA9IDQ7IG5h
bWUgPSBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwOyBwYXRoID0gV2ViQ29yZVN1cHBvcnQv
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9
OwogCQlFNEFFRjk3QTFDMERGNEJDMDBCMDE3MjcgLyogV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlci5oOyBwYXRoID0gV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg7
IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJRUQyMUI5ODEwNTI4RjdBQTAwMzI5OUFD
IC8qIFdlYkRvY3VtZW50SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJEb2N1bWVudEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwpAQCAtMTU3MCwxOSArMTQ5
MywxNCBAQAogCQlGNTlFQUUzRTAyNTNDN0VFMDE4NjM1Q0EgLyogV2ViQ29yZVN0YXRpc3RpY3Mu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJD
b3JlU3RhdGlzdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVz
ZXNUYWJzID0gMDsgfTsKIAkJRjU5RUFFNDEwMjUzQzhERTAxODYzNUNBIC8qIFdlYkNvcmVTdGF0
aXN0aWNzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXZWJDb3JlU3RhdGlzdGljcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1QTU1REM3MDJCQUEyRTgwMTg2MzVD
QyAvKiBXZWJIVE1MUmVwcmVzZW50YXRpb25Qcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSFRNTFJlcHJlc2VudGF0aW9uUHJpdmF0
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKLQkJRjVBNjcyQjkwMjYzODY2RTAxMDAwMTAyIC8qIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFt
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
TmV0c2NhcGVQbHVnaW5TdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGgg
PSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1QTY3MkJBMDI2Mzg2NkUwMTAwMDEwMiAvKiBXZWJO
ZXRzY2FwZVBsdWdpblN0cmVhbS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBmaWxlRW5jb2RpbmcgPSA0OyBp
bmRlbnRXaWR0aCA9IDQ7IHBhdGggPSBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1QUVC
QjNEMDI0QTUyNzYwMUMxQTUyNiAvKiBXZWJQcmVmZXJlbmNlcy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBm
aWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IHBhdGggPSBXZWJQcmVmZXJlbmNlcy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
CiAJCUY1QjY3MTMwMDIzRURGODkwMUMxQTUyNSAvKiB1cmxfaWNvbi50aWZmICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2UudGlmZjsgcGF0aCA9
IHVybF9pY29uLnRpZmY7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1QjkyQjgyMDIy
MzE5MUQwMUMxQTUyNSAvKiBXZWJIaXN0b3J5UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJIaXN0b3J5UHJpdmF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjVD
MjgzNzMwMjg0Njc2RDAxODYzNUNBIC8qIFdlYktpdFByZWZpeC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYktpdFByZWZpeC5oOyBwYXRoID0g
bWFjL1dlYktpdFByZWZpeC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDQ7
IHVzZXNUYWJzID0gMDsgfTsKIAkJRjVFMEE3NkUwMkI4RkVFNDAxQzFBNTI1IC8qIFdlYlVSTHNX
aXRoVGl0bGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYlVSTHNXaXRoVGl0bGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNUUwQTc2RjAyQjhGRUU0MDFDMUE1MjUgLyog
V2ViVVJMc1dpdGhUaXRsZXMubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5vYmpjOyBwYXRoID0gV2ViVVJMc1dpdGhUaXRsZXMubTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1RjcxNzFFMDI4ODQ5M0Mw
MTg2MzVDQSAvKiBXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
Ci0JCUY1RjcxNzFGMDI4ODQ5M0MwMTg2MzVDQSAvKiBXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2Uu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBwYXRo
ID0gV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjVGNzE3MjAwMjg4NDkzQzAxODYzNUNB
IC8qIFdlYlBsdWdpbkRhdGFiYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViUGx1Z2luRGF0YWJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1RjcxNzIxMDI4ODQ5M0Mw
MTg2MzVDQSAvKiBXZWJQbHVnaW5EYXRhYmFzZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBmaWxlRW5jb2Rp
bmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IHBhdGggPSBXZWJQbHVnaW5EYXRhYmFzZS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1
RjcxNzIzMDI4ODQ5M0MwMTg2MzVDQSAvKiBucGFwaS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBmaWxlRW5j
b2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IHBhdGggPSBucGFwaS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1RjczMkQyMDJG
RjRENEYwMUE4MDE4MCAvKiBXZWJLaXQuZXhwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuZXhwb3J0
czsgbmFtZSA9IFdlYktpdC5leHA7IHBhdGggPSBtYWMvV2ViS2l0LmV4cDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA0OyB1c2VzVGFicyA9IDA7IH07CiAJCUY3MzhDOUU5MDNG
QUQzREYwMzIxRkJFMCAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgcGF0
aCA9IEphdmFTY3JpcHRDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RT
X0RJUjsgfTsKIAkJRjczOEM5RUEwM0ZBRDNERjAzMjFGQkUwIC8qIFdlYkNvcmUuZnJhbWV3b3Jr
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBl
ci5mcmFtZXdvcms7IHBhdGggPSBXZWJDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxU
X1BST0RVQ1RTX0RJUjsgfTsKQEAgLTE2ODIsNDYgKzE2MDAsNiBAQAogCQkJdGFiV2lkdGggPSA0
OwogCQkJdXNlc1RhYnMgPSAwOwogCQl9OwotCQkxQTFGOTE0MzBFQ0JCMTZGMDA2MzUxREEgLyog
SG9zdGVkICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkx
QThERUQ0RTBFRTg4QjhBMDBGMjUwMjIgLyogSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0uaCAq
LywKLQkJCQkxQThERUQ0RjBFRTg4QjhBMDBGMjUwMjIgLyogSG9zdGVkTmV0c2NhcGVQbHVnaW5T
dHJlYW0ubW0gKi8sCi0JCQkJMUFBRjVDRTQwRURERTFGRTAwOEQ4ODNEIC8qIE5ldHNjYXBlUGx1
Z2luSG9zdE1hbmFnZXIuaCAqLywKLQkJCQkxQUFGNUNFNTBFRERFMUZFMDA4RDg4M0QgLyogTmV0
c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbSAqLywKLQkJCQkxQUFGNUNFNjBFRERFMUZFMDA4RDg4
M0QgLyogTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkuaCAqLywKLQkJCQkxQUFGNUNFNzBFRERFMUZF
MDA4RDg4M0QgLyogTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0gKi8sCi0JCQkJMUFBRjVDRTgw
RURERTFGRTAwOEQ4ODNEIC8qIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5oICovLAotCQkJ
CTFBQUY1Q0U5MEVEREUxRkUwMDhEODgzRCAvKiBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHku
bW0gKi8sCi0JCQkJMUEyREJFOUQwRjI1MUUzQTAwMzZGOEE2IC8qIFByb3h5SW5zdGFuY2UuaCAq
LywKLQkJCQkxQTJEQkU5RTBGMjUxRTNBMDAzNkY4QTYgLyogUHJveHlJbnN0YW5jZS5tbSAqLywK
LQkJCQlFMTY5ODM2MTExMzQ2RDFCMDA4OTQxMTUgLyogUHJveHlSdW50aW1lT2JqZWN0LmggKi8s
Ci0JCQkJRTE2OTgzNkIxMTM0NkQ1NjAwODk0MTE1IC8qIFByb3h5UnVudGltZU9iamVjdC5tbSAq
LywKLQkJCQkxQUFGNUZCRDBFREUzQTkyMDA4RDg4M0QgLyogV2ViSG9zdGVkTmV0c2NhcGVQbHVn
aW5WaWV3LmggKi8sCi0JCQkJMUFBRjVGQkUwRURFM0E5MjAwOEQ4ODNEIC8qIFdlYkhvc3RlZE5l
dHNjYXBlUGx1Z2luVmlldy5tbSAqLywKLQkJCQkxQUFGNTg4QTBFRENDRUEzMDA4RDg4M0QgLyog
V2ViS2l0UGx1Z2luQWdlbnQuZGVmcyAqLywKLQkJCQkxQUFGNTg4QjBFRENDRUEzMDA4RDg4M0Qg
LyogV2ViS2l0UGx1Z2luQWdlbnRSZXBseS5kZWZzICovLAotCQkJCTFBQUY1ODhDMEVEQ0NFQTMw
MDhEODgzRCAvKiBXZWJLaXRQbHVnaW5DbGllbnQuZGVmcyAqLywKLQkJCQkxQUFGNTg4RDBFREND
RUEzMDA4RDg4M0QgLyogV2ViS2l0UGx1Z2luSG9zdC5kZWZzICovLAotCQkJCTFBQUY1ODhFMEVE
Q0NFQTMwMDhEODgzRCAvKiBXZWJLaXRQbHVnaW5Ib3N0VHlwZXMuZGVmcyAqLywKLQkJCQkxQUFG
NUQwODBFRERFNzFEMDA4RDg4M0QgLyogV2ViS2l0UGx1Z2luSG9zdFR5cGVzLmggKi8sCi0JCQkJ
MUE3NEEyOEMwRjRGNzU0MDAwODJFMjI4IC8qIFdlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIu
aCAqLywKLQkJCQkxQTc0QTI4RDBGNEY3NTQwMDA4MkUyMjggLyogV2ViVGV4dElucHV0V2luZG93
Q29udHJvbGxlci5tICovLAotCQkJKTsKLQkJCXBhdGggPSBIb3N0ZWQ7Ci0JCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwotCQl9OwotCQkxQTlDNzgwMzBFQkJDNDU1MDA4NTk5RDQgLyogRXZlbnRz
ICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkxQUVBNjZE
MjBEQzZCMUZGMDAzRDEyQkYgLyogV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXIuaCAqLywK
LQkJCQkxQUVBNjZEMzBEQzZCMUZGMDAzRDEyQkYgLyogV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhh
bmRsZXIubW0gKi8sCi0JCQkJMUFFQTZBNEUwREM4Q0UyRjAwM0QxMkJGIC8qIFdlYk5ldHNjYXBl
UGx1Z2luRXZlbnRIYW5kbGVyQ29jb2EuaCAqLywKLQkJCQkxQUVBNkE0RjBEQzhDRTJGMDAzRDEy
QkYgLyogV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYS5tbSAqLywKLQkJCSk7Ci0J
CQluYW1lID0gRXZlbnRzOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJMUM2
OEY2M0YwOTVCNUY5QzAwQzI5ODRFIC8qIFdlYkluc3BlY3RvciAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMDE4LDI2ICsxODk2LDYgQEAKIAkJCXBhdGgg
PSAidW5pZmllZC1zb3VyY2VzIjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0J
CTg0OERGRjQxMDM2NUY2RkIwMENBMkFDQSAvKiBOZXRzY2FwZSBQbHVnLWlucyAqLyA9IHsKLQkJ
CWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMUE5Qzc4MDMwRUJCQzQ1NTAw
ODU5OUQ0IC8qIEV2ZW50cyAqLywKLQkJCQkxQTFGOTE0MzBFQ0JCMTZGMDA2MzUxREEgLyogSG9z
dGVkICovLAotCQkJCUY1RjcxNzIzMDI4ODQ5M0MwMTg2MzVDQSAvKiBucGFwaS5tbSAqLywKLQkJ
CQkxQTRERjVFMjBFQzhEMTA0MDA2QkQ0QjQgLyogV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5o
ICovLAotCQkJCTFBNERGNUUzMEVDOEQxMDQwMDZCRDRCNCAvKiBXZWJCYXNlTmV0c2NhcGVQbHVn
aW5WaWV3Lm1tICovLAotCQkJCUY1RjcxNzFFMDI4ODQ5M0MwMTg2MzVDQSAvKiBXZWJOZXRzY2Fw
ZVBsdWdpblBhY2thZ2UuaCAqLywKLQkJCQlGNUY3MTcxRjAyODg0OTNDMDE4NjM1Q0EgLyogV2Vi
TmV0c2NhcGVQbHVnaW5QYWNrYWdlLm1tICovLAotCQkJCUY1QTY3MkI5MDI2Mzg2NkUwMTAwMDEw
MiAvKiBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5oICovLAotCQkJCUY1QTY3MkJBMDI2Mzg2NkUw
MTAwMDEwMiAvKiBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbSAqLywKLQkJCQkxQTRERjUyMDBF
QzhDNzREMDA2QkQ0QjQgLyogV2ViTmV0c2NhcGVQbHVnaW5WaWV3LmggKi8sCi0JCQkJMUE0REY1
MjEwRUM4Qzc0RDAwNkJENEI0IC8qIFdlYk5ldHNjYXBlUGx1Z2luVmlldy5tbSAqLywKLQkJCQkx
QTc3QjAyQzBFRTc3MzA1MDBDOEExRjkgLyogV2ViUGx1Z2luUmVxdWVzdC5oICovLAotCQkJCTFB
NzdCMDJEMEVFNzczMDUwMEM4QTFGOSAvKiBXZWJQbHVnaW5SZXF1ZXN0Lm0gKi8sCi0JCQkpOwot
CQkJbmFtZSA9ICJOZXRzY2FwZSBQbHVnLWlucyI7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwotCQl9OwogCQk4NDhERkY0MzAzNjVGNzE1MDBDQTJBQ0EgLyogV2ViS2l0IFBsdWctaW5zICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTI3MTQsNyArMjU3
Miw2IEBACiAJCUY1RUJDNDUyMDIxMzRCQjYwMUNBMTUyMCAvKiBQbHVnaW5zICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk4NDhERkY0MTAzNjVGNkZCMDBD
QTJBQ0EgLyogTmV0c2NhcGUgUGx1Zy1pbnMgKi8sCiAJCQkJODQ4REZGNDMwMzY1RjcxNTAwQ0Ey
QUNBIC8qIFdlYktpdCBQbHVnLWlucyAqLywKIAkJCQk4M0U0QUY0NjAzNjY1MjE1MDAwMEU1MDYg
LyogV2ViQmFzZVBsdWdpblBhY2thZ2UuaCAqLywKIAkJCQk4M0U0QUY0NzAzNjY1MjE1MDAwMEU1
MDYgLyogV2ViQmFzZVBsdWdpblBhY2thZ2UubW0gKi8sCkBAIC0yOTYwLDExICsyODE3LDcgQEAK
IAkJCQk5M0Q0Mzc5ODFENTdBQkVGMDBBQjg1RUEgLyogRE9NWFBhdGhSZXN1bHRJbnRlcm5hbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTNENDM3OTkxRDU3QUJFRjAwQUI4NUVBIC8qIEV4Y2VwdGlv
bkhhbmRsZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTYwNTE5NDE3NTAyQTVEMDBCQzYyRjUg
LyogSGlzdG9yeVByb3BlcnR5TGlzdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUE4REVENTAwRUU4
OEI4QTAwRjI1MDIyIC8qIEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MzY0MDA2RjIzOTk2RTgxMDAxRTE4NUUgLyogSW5Qcm9jZXNzSURCU2VydmVyLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkxQUFGNUNFQTBFRERFMUZFMDA4RDg4M0QgLyogTmV0c2NhcGVQ
bHVnaW5Ib3N0TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUFBRjVDRUMwRURERTFGRTAw
OEQ4ODNEIC8qIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5LmggaW4gSGVhZGVycyAqLywKLQkJCQkx
QUFGNUNFRTBFRERFMUZFMDA4RDg4M0QgLyogTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1Q0E0NkU3ODIxRjE0NTFEMDBDRTg2QjQgLyogTmV0d29ya1N0
b3JhZ2VTZXNzaW9uTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTUzMUJEODIxODdCOTU0MDAy
RTNGODEgLyogTlNVUkxEb3dubG9hZFNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNENDM3OUIx
RDU3QUJFRjAwQUI4NUVBIC8qIE9iakNFdmVudExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKQEAg
LTI5NzMsOCArMjgyNiw2IEBACiAJCQkJNUNFNDRGNEEyMDZENzBFQTAwM0VGRDAxIC8qIFBpbmdI
YW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUExMEMxRDVGMTgyMDMwMEUwMDM2ODgzQSAvKiBQ
b3B1cE1lbnVJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDMDFDQjg1MTczNDM1QzkwMEM1RDgw
NyAvKiBQb3B1cE1lbnVNYWMuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBMkRCRTlGMEYyNTFFM0Ew
MDM2RjhBNiAvKiBQcm94eUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKLQkJCQlFMTY5ODM2MjEx
MzQ2RDFCMDA4OTQxMTUgLyogUHJveHlSdW50aW1lT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBMTBDMUQ2MjE4MjAzMDBFMDAzNjg4M0EgLyogU2VhcmNoUG9wdXBNZW51SU9TLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3QzAxQ0I4NzE3MzQzNUM5MDBDNUQ4MDcgLyogU2VhcmNoUG9wdXBNZW51
TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTZCMzEzMjFBNTFGM0E5MDA0MjI5NzUgLyogU3Rv
cmFnZUFyZWFJbXBsLmggaW4gSGVhZGVycyAqLywKQEAgLTI5OTcsNyArMjg0OCw2IEBACiAJCQkJ
OTM5ODEwMTEwODI0QkYwMTAwOERGMDM4IC8qIFdlYkJhY2tGb3J3YXJkTGlzdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTFDNzE0RkIwQjIwRjc5RjAwRTVFMzNDIC8qIFdlYkJhY2tGb3J3YXJkTGlz
dEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkyMkYyMTlDQzA4RDIzNjczMDAzMEUwNzgg
LyogV2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUE0REY1
RTQwRUM4RDEwNDAwNkJENEI0IC8qIFdlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzOTgxMDJFMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJCYXNlUGx1Z2luUGFj
a2FnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDYwMTM1RTUyNjlGQUQzMTAwN0E4QTk1IC8qIFdl
YkJyb2FkY2FzdENoYW5uZWxSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI0MUFERjUw
QjFCQzQ4QTAwNDAxMkJEIC8qIFdlYkNhY2hlLmggaW4gSGVhZGVycyAqLywKQEAgLTMwODEsNyAr
MjkzMSw2IEBACiAJCQkJOTM5ODEwNjMwODI0QkYwMTAwOERGMDM4IC8qIFdlYkhpc3RvcnlJdGVt
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRkRDNEQzMEIwQUY1QzEwMEY4NEVCMyAv
KiBXZWJIaXN0b3J5SXRlbVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDE0MDgy
NEJGMDEwMDhERjAzOCAvKiBXZWJIaXN0b3J5UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MUFBRjVGQkYwRURFM0E5MjAwOEQ4ODNEIC8qIFdlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwNTUwODI0QkYwMTAwOERGMDM4IC8qIFdlYkhUTUxS
ZXByZXNlbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwNTYwODI0QkYwMTAwOERG
MDM4IC8qIFdlYkhUTUxSZXByZXNlbnRhdGlvblByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzOTgxMDU3MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJIVE1MVmlldy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zMTAyLDcgKzI5NTEsNiBAQAogCQkJCUNEOEJGQ0U4MTU1MzEyMjQwMDVBRkIyNSAvKiBX
ZWJLaXRGdWxsU2NyZWVuTGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDFEMDgy
NEJGMDEwMDhERjAzOCAvKiBXZWJLaXRMb2dnaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4
MTAxRTA4MjRCRjAxMDA4REYwMzggLyogV2ViS2l0TlNTdHJpbmdFeHRyYXMuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTFBQUY1RDA5MEVEREU3MUQwMDhEODgzRCAvKiBXZWJLaXRQbHVnaW5Ib3N0VHlw
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDQ3MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJL
aXRQcmVmaXguaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDFGMDgyNEJGMDEwMDhERjAzOCAv
KiBXZWJLaXRTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTAyMDA4MjRCRjAx
MDA4REYwMzggLyogV2ViS2l0U3RhdGlzdGljc1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAt
MzExNCwxMSArMjk2Miw2IEBACiAJCQkJMDcyRTVGNDUxQUJGODg3NTAwMDNCMTY0IC8qIFdlYk1l
ZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUExMEMxRDcyMTgy
MDMwMEUwMDM2ODgzQSAvKiBXZWJNSU1FVHlwZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTg1RjYyNjEwNzEyQjgwMDA3QUEzOTMgLyogV2ViTmF2aWdhdGlvbkRhdGEuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTFBRUE2NkQ0MERDNkIxRkYwMDNEMTJCRiAvKiBXZWJOZXRzY2FwZVBsdWdp
bkV2ZW50SGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUFFQTZBNTAwREM4Q0UyRjAwM0Qx
MkJGIC8qIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2EuaCBpbiBIZWFkZXJzICov
LAotCQkJCTkzOTgxMDMxMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJOZXRzY2FwZVBsdWdpblBhY2th
Z2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTkzOTgxMDJCMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJO
ZXRzY2FwZVBsdWdpblN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUE0REY1MjIwRUM4Qzc0
RDAwNkJENEI0IC8qIFdlYk5ldHNjYXBlUGx1Z2luVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUM2OEY2NkYwOTVCNUZDMTAwQzI5ODRFIC8qIFdlYk5vZGVIaWdobGlnaHQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1Njg3QkRBMTM1Qjc5MUEwMDc0Q0JDQiAvKiBXZWJOb2RlSGlnaGxpZ2h0ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFDNjhGNjcxMDk1QjVGQzEwMEMyOTg0RSAvKiBXZWJOb2Rl
SGlnaGxpZ2h0Vmlldy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTYyLDcgKzMwMDUsNiBAQAogCQkJ
CTFBMDhGRUUxMUQ1OTM3NkUwMDhCQThDQiAvKiBXZWJQbHVnaW5JbmZvUHJvdmlkZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzOTgxMDM5MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJQbHVnaW5QYWNr
YWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTdBMTFCMTE4MERDODQ4MDBFNTQ5OEMgLyogV2Vi
UGx1Z2luUGFja2FnZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBNzdCMDJFMEVFNzcz
MDUwMEM4QTFGOSAvKiBXZWJQbHVnaW5SZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4
MTAzQTA4MjRCRjAxMDA4REYwMzggLyogV2ViUGx1Z2luVmlld0ZhY3RvcnkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzOTgxMEFDMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJQbHVnaW5WaWV3RmFjdG9y
eVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDcyMDgyNEJGMDEwMDhERjAzOCAv
KiBXZWJQb2xpY3lEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTk3LDcgKzMwMzksNiBA
QAogCQkJCTkzOTgxMDI3MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJTdHJpbmdUcnVuY2F0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCUMxMUVCRjQyMjE0MTlDQ0UwMEQ2NTlFNyAvKiBXZWJTd2l0Y2hp
bmdHUFVDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNkEyREVBMEZEMkQwODQwMEQzMTJE
QiAvKiBXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTFB
NzRBMjhFMEY0Rjc1NDAwMDgyRTIyOCAvKiBXZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGODM0QUFENzBFNjRCMUM3MDBFMjczN0MgLyogV2ViVGV4dEl0
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA3NTA4MjRCRjAxMDA4REYwMzggLyog
V2ViVUlEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwODMwODI0QkYwMTAwOERG
MDM4IC8qIFdlYlVJRGVsZWdhdGVQcml2YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTM1NDIsMTYg
KzMzODMsOSBAQAogCQkJCTFBNjA1MTkxMTc1MDJBNUQwMEJDNjJGNSAvKiBCaW5hcnlQcm9wZXJ0
eUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjgyOTU4RDQxMzI3MDdEMDAwMEQwRTc5IC8q
IENvcnJlY3Rpb25QYW5lbC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBNjA1MTkzMTc1MDJBNUQw
MEJDNjJGNSAvKiBIaXN0b3J5UHJvcGVydHlMaXN0Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMUE4
REVENTEwRUU4OEI4QTAwRjI1MDIyIC8qIEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTM2NDAwNkUyMzk5NkU4MTAwMUUxODVFIC8qIEluUHJvY2Vzc0lE
QlNlcnZlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxQUFGNUNFQjBFRERFMUZFMDA4RDg4M0Qg
LyogTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbSBpbiBTb3VyY2VzICovLAotCQkJCTFBQUY1
Q0VEMEVEREUxRkUwMDhEODgzRCAvKiBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbSBpbiBTb3Vy
Y2VzICovLAotCQkJCTFBQUY1Q0VGMEVEREUxRkUwMDhEODgzRCAvKiBOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHkubW0gaW4gU291cmNlcyAqLywKLQkJCQk5Mzk4MTBERDA4MjRCRjAxMDA4REYw
MzggLyogbnBhcGkubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTBDMUQ2MDE4MjAzMDBFMDAzNjg4
M0EgLyogUG9wdXBNZW51SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM0MENEMjEyMkQ4RjlD
MDAwRTlEQUQ1IC8qIFBvcHVwTWVudU1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTFBMkRCRUEw
MEYyNTFFM0EwMDM2RjhBNiAvKiBQcm94eUluc3RhbmNlLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJ
RTE2OTgzNkMxMTM0NkQ1NjAwODk0MTE1IC8qIFByb3h5UnVudGltZU9iamVjdC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUExMEMxRDYxMTgyMDMwMEUwMDM2ODgzQSAvKiBTZWFyY2hQb3B1cE1lbnVJ
T1MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM0MENEMjIyMkQ4RjlDMzAwRTlEQUQ1IC8qIFNl
YXJjaFBvcHVwTWVudU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBNkIzMTMxMUE1MUYzQTkw
MDQyMjk3NSAvKiBTdG9yYWdlQXJlYUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zNTg5LDcg
KzM0MjMsNiBAQAogCQkJCUNFREExMkRCMTUyQ0JFNjgwMEQ5RTA4RCAvKiBXZWJBbHRlcm5hdGl2
ZVRleHRDbGllbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTExRDA4MjRCRjAxMDA4REYw
MzggLyogV2ViQXJjaGl2ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMENGMDgyNEJGMDEw
MDhERjAzOCAvKiBXZWJBdXRoZW50aWNhdGlvblBhbmVsLm0gaW4gU291cmNlcyAqLywKLQkJCQkx
QTRERjVFNTBFQzhEMTA0MDA2QkQ0QjQgLyogV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTUyNDFBREY2MEIxQkM0OEEwMDQwMTJCRCAvKiBXZWJDYWNoZS5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTE0RDgyNTMwMEFGOTU1MDkwMDA0RjA1NyAvKiBXZWJDaHJv
bWVDbGllbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTBDMUQ2NTE4MjAzMDBFMDAzNjg4M0Eg
LyogV2ViQ2hyb21lQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0zNjMxLDcgKzM0NjQs
NiBAQAogCQkJCUExMEMxRDM3MTgyMDJGQzUwMDM2ODgzQSAvKiBXZWJHZW9sb2NhdGlvblByb3Zp
ZGVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODExMTMwODI0QkYwMTAwOERGMDM4IC8q
IFdlYkhpc3RvcnkubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTBCRDA4MjRCRjAxMDA4REYw
MzggLyogV2ViSGlzdG9yeUl0ZW0ubW0gaW4gU291cmNlcyAqLywKLQkJCQkxQUFGNUZDMDBFREUz
QTkyMDA4RDg4M0QgLyogV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Lm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTM5ODEwRjMwODI0QkYwMTAwOERGMDM4IC8qIFdlYkhUTUxSZXByZXNlbnRhdGlv
bi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMEMxMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJJ
Y29uRGF0YWJhc2UubW0gaW4gU291cmNlcyAqLywKIAkJCQlBNTYwOTQ2NzE0RDhBRDI2MDA3OTlB
OEEgLyogV2ViSW5kaWNhdGVMYXllci5tbSBpbiBTb3VyY2VzICovLApAQCAtMzY0Niw5ICszNDc4
LDYgQEAKIAkJCQk5Mzk4MTBDMzA4MjRCRjAxMDA4REYwMzggLyogV2ViS2l0TG9nZ2luZy5tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUNGMThGNDEyNkJCNzFCNzAwNEIxNzIyIC8qIFdlYktpdExvZ0lu
aXRpYWxpemF0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwQzQwODI0QkYwMTAwOERG
MDM4IC8qIFdlYktpdE5TU3RyaW5nRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMUFBRjVE
MEYwRURERTdBNzAwOEQ4ODNEIC8qIFdlYktpdFBsdWdpbkFnZW50LmRlZnMgaW4gU291cmNlcyAq
LywKLQkJCQkxQUFGNUQwMDBFRERFNjA0MDA4RDg4M0QgLyogV2ViS2l0UGx1Z2luQ2xpZW50LmRl
ZnMgaW4gU291cmNlcyAqLywKLQkJCQkxQUFGNUNGMTBFRERFNTg2MDA4RDg4M0QgLyogV2ViS2l0
UGx1Z2luSG9zdC5kZWZzIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwQzUwODI0QkYwMTAwOERG
MDM4IC8qIFdlYktpdFN0YXRpc3RpY3MubSBpbiBTb3VyY2VzICovLAogCQkJCTUxMjBDODJDMUU1
NENFOEEwMDI1QjI1MCAvKiBXZWJLaXRWZXJzaW9uQ2hlY2tzLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRUQ1Qjk1MjQxMTFCNzI1QTAwNDcyMjk4IC8qIFdlYkxvY2FsaXphYmxlU3RyaW5ncy5tbSBp
biBTb3VyY2VzICovLApAQCAtMzY1NywxMSArMzQ4Niw2IEBACiAJCQkJMDcyRTVGNDYxQUJGODg3
NTAwMDNCMTY0IC8qIFdlYk1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIubW0gaW4gU291cmNlcyAq
LywKIAkJCQlBMTBDMUQ3MzE4MjAzMDBFMDAzNjg4M0EgLyogV2ViTUlNRVR5cGVSZWdpc3RyeS5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGNjI4MTA3MTJCOTcwMDdBQTM5MyAvKiBXZWJOYXZp
Z2F0aW9uRGF0YS5tbSBpbiBTb3VyY2VzICovLAotCQkJCTFBRUE2NkQ1MERDNkIxRkYwMDNEMTJC
RiAvKiBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlci5tbSBpbiBTb3VyY2VzICovLAotCQkJ
CTFBRUE2QTUxMERDOENFMkYwMDNEMTJCRiAvKiBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxl
ckNvY29hLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJOTM5ODEwRDYwODI0QkYwMTAwOERGMDM4IC8q
IFdlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5tbSBpbiBTb3VyY2VzICovLAotCQkJCTkzOTgxMEQx
MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbSBpbiBTb3VyY2Vz
ICovLAotCQkJCTFBNERGNTIzMEVDOEM3NEQwMDZCRDRCNCAvKiBXZWJOZXRzY2FwZVBsdWdpblZp
ZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQzY4RjY3MDA5NUI1RkMxMDBDMjk4NEUgLyogV2Vi
Tm9kZUhpZ2hsaWdodC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE1Njg3QkRCMTM1Qjc5MUEwMDc0
Q0JDQiAvKiBXZWJOb2RlSGlnaGxpZ2h0ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQzY4RjY3
MjA5NUI1RkMxMDBDMjk4NEUgLyogV2ViTm9kZUhpZ2hsaWdodFZpZXcubW0gaW4gU291cmNlcyAq
LywKQEAgLTM2OTIsNyArMzUxNiw2IEBACiAJCQkJMUFBODc5QjcxMUNCRTlCRjAwM0M2NjRGIC8q
IFdlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBMDhGRUUwMUQ1
OTM3NkUwMDhCQThDQiAvKiBXZWJQbHVnaW5JbmZvUHJvdmlkZXIubW0gaW4gU291cmNlcyAqLywK
IAkJCQk5Mzk4MTBEQzA4MjRCRjAxMDA4REYwMzggLyogV2ViUGx1Z2luUGFja2FnZS5tbSBpbiBT
b3VyY2VzICovLAotCQkJCTFBNzdCMDJGMEVFNzczMDUwMEM4QTFGOSAvKiBXZWJQbHVnaW5SZXF1
ZXN0Lm0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTEwODA4MjRCRjAxMDA4REYwMzggLyogV2Vi
UG9saWN5RGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTBGODA4MjRCRjAxMDA4
REYwMzggLyogV2ViUHJlZmVyZW5jZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQk3QzAyM0EyNDI1
MUJBNDNFMDBCQTdCQjYgLyogV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLm1tIGluIFNvdXJj
ZXMgKi8sCkBAIC0zNzA5LDcgKzM1MzIsNiBAQAogCQkJCTkzOTgxMENDMDgyNEJGMDEwMDhERjAz
OCAvKiBXZWJTdHJpbmdUcnVuY2F0b3IubW0gaW4gU291cmNlcyAqLywKIAkJCQlDMTFFQkY0MTIx
NDE5Q0NFMDBENjU5RTcgLyogV2ViU3dpdGNoaW5nR1BVQ2xpZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzNkEyREU4MEZEMkQwODAwMEQzMTJEQiAvKiBXZWJUZXh0Q29tcGxldGlvbkNvbnRy
b2xsZXIubW0gaW4gU291cmNlcyAqLywKLQkJCQkxQTc0QTI4RjBGNEY3NTQwMDA4MkUyMjggLyog
V2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlci5tIGluIFNvdXJjZXMgKi8sCiAJCQkJRjgzNEFB
RDgwRTY0QjFDNzAwRTI3MzdDIC8qIFdlYlRleHRJdGVyYXRvci5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUExMEMxRDNFMTgyMDJGQzUwMDM2ODgzQSAvKiBXZWJVSUtpdFN1cHBvcnQubW0gaW4gU291
cmNlcyAqLywKIAkJCQk5Mzk4MTBCRTA4MjRCRjAxMDA4REYwMzggLyogV2ViVVJMc1dpdGhUaXRs
ZXMubSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
UGx1Z2lucy9Ib3N0ZWQvSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0uaCBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL0hvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MjAwZWNkOTE5MjY4YzM0MDdkOTE5YzA2
NjcxOGM5MzI0NjE0ZGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvSG9zdGVkTmV0c2Nh
cGVQbHVnaW5TdHJlYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZiBVU0UoUExVR0lOX0hP
U1RfUFJPQ0VTUykKLQotI2lmbmRlZiBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbV9oCi0jZGVm
aW5lIEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtX2gKLQotI2luY2x1ZGUgPFdlYkNvcmUvTmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuaD4KLSNpbmNsdWRlIDxXZWJLaXRMZWdhY3kvbnBhcGku
aD4KLSNpbmNsdWRlIDx3dGYvUmVmLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgRnJhbWVMb2FkZXI7Ci0gICAgY2xhc3MgTmV0c2Nh
cGVQbHVnSW5TdHJlYW1Mb2FkZXI7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk7Ci0KLWNsYXNzIEhvc3RlZE5ldHNjYXBlUGx1Z2lu
U3RyZWFtIDogcHVibGljIFJlZkNvdW50ZWQ8SG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0+Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHByaXZhdGUgV2ViQ29yZTo6TmV0c2Nh
cGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8SG9z
dGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0+IGNyZWF0ZShOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHkqIGluc3RhbmNlLCB1aW50MzJfdCBzdHJlYW1JRCwgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSG9zdGVkTmV0c2NhcGVQbHVnaW5T
dHJlYW0oaW5zdGFuY2UsIHN0cmVhbUlELCByZXF1ZXN0KSk7Ci0gICAgfQotICAgIHN0YXRpYyBS
ZWY8SG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0+IGNyZWF0ZShOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHkqIGluc3RhbmNlLCBXZWJDb3JlOjpGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBIb3N0ZWROZXRzY2FwZVBsdWdpblN0
cmVhbShpbnN0YW5jZSwgZnJhbWVMb2FkZXIpKTsKLSAgICB9Ci0KLSAgICB+SG9zdGVkTmV0c2Nh
cGVQbHVnaW5TdHJlYW0oKTsKLQotICAgIHVpbnQzMl90IHN0cmVhbUlEKCkgY29uc3QgeyByZXR1
cm4gbV9zdHJlYW1JRDsgfQotCi0gICAgdm9pZCBzdGFydFN0cmVhbVdpdGhSZXNwb25zZShOU1VS
TFJlc3BvbnNlICpyZXNwb25zZSk7Ci0KLSAgICAvLyBGSVhNRTogQ2FuIHRoZXNlIGJlIG1hZGUg
cHJpdmF0ZT8KLSAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyKiwgY29uc3QgdWludDhfdCogYnl0ZXMsIGludCBsZW5ndGgpIG92ZXJyaWRl
OwotICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZyhXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVh
bUxvYWRlciopIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkRmFpbChXZWJDb3JlOjpOZXRzY2FwZVBs
dWdJblN0cmVhbUxvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBvdmVycmlk
ZTsKLQotICAgIHZvaWQgc3RhcnQoKTsKLSAgICB2b2lkIHN0b3AoKTsKLQotICAgIHZvaWQgY2Fu
Y2VsTG9hZChOUFJlYXNvbiByZWFzb24pOwotCi0gICAgc3RhdGljIE5QUmVhc29uIHJlYXNvbkZv
ckVycm9yKE5TRXJyb3IqIGVycm9yKTsKLQotcHJpdmF0ZToKLSAgICBOU0Vycm9yICplcnJvckZv
clJlYXNvbihOUFJlYXNvbikgY29uc3Q7Ci0gICAgdm9pZCBjYW5jZWxMb2FkKE5TRXJyb3IgKik7
Ci0KLSAgICBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbShOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHkqLCB1aW50MzJfdCBzdHJlYW1JRCwgTlNVUkxSZXF1ZXN0ICopOwotICAgIEhvc3RlZE5l
dHNjYXBlUGx1Z2luU3RyZWFtKE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSosIFdlYkNvcmU6
OkZyYW1lTG9hZGVyKik7Ci0gICAgCi0gICAgdm9pZCBzdGFydFN0cmVhbShOU1VSTCAqLCBsb25n
IGxvbmcgZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBOU0RhdGUgKmxhc3RNb2RpZmllZERhdGUsIE5T
U3RyaW5nICptaW1lVHlwZSwgTlNEYXRhICpoZWFkZXJzKTsKLQotICAgIE5TRXJyb3IgKnBsdWdp
bkNhbmNlbGxlZENvbm5lY3Rpb25FcnJvcigpIGNvbnN0OwotCi0gICAgLy8gTmV0c2NhcGVQbHVn
SW5TdHJlYW1Mb2FkZXJDbGllbnQgbWV0aG9kcy4KLSAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdChX
ZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNl
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmKT4mJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoV2ViQ29yZTo6TmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikgb3Zl
cnJpZGU7Ci0gICAgYm9vbCB3YW50c0FsbFN0cmVhbXMoKSBjb25zdCBvdmVycmlkZTsKLSAgICAK
LSAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5PiBtX2luc3RhbmNlOwotICAg
IHVpbnQzMl90IG1fc3RyZWFtSUQ7Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZVVSTFJlcXVlc3Q+
IG1fcmVxdWVzdDsKLQotICAgIFJldGFpblB0cjxOU1VSTD4gbV9yZXF1ZXN0VVJMOwotICAgIFJl
dGFpblB0cjxOU1VSTD4gbV9yZXNwb25zZVVSTDsKLSAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IG1f
bWltZVR5cGU7Ci0KLSAgICBXZWJDb3JlOjpGcmFtZUxvYWRlciogbV9mcmFtZUxvYWRlcjsKLSAg
ICBSZWZQdHI8V2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IG1fbG9hZGVyOwot
fTsKLQotfQotCi0jZW5kaWYgLy8gSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW1faAotI2VuZGlm
IC8vIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0gYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9Ib3N0ZWROZXRzY2FwZVBsdWdp
blN0cmVhbS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVmYjlhZGFmNzE4MzA0
YWNlNjA0NTlkOGY2ZWYyYjQxZDliMjI0Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9I
b3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDI4NyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZiBV
U0UoUExVR0lOX0hPU1RfUFJPQ0VTUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0K
LSNpbXBvcnQgIkhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtLmgiCi0KLSNpbXBvcnQgIk5ldHNj
YXBlUGx1Z2luSG9zdFByb3h5LmgiCi0jaW1wb3J0ICJOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHkuaCIKLSNpbXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkhvc3RlZE5l
dHNjYXBlUGx1Z2luVmlldy5oIgotI2ltcG9ydCAiV2ViS2l0RXJyb3JzUHJpdmF0ZS5oIgotI2lt
cG9ydCAiV2ViS2l0UGx1Z2luSG9zdC5oIgotI2ltcG9ydCAiV2ViTlNVUkxFeHRyYXMuaCIKLSNp
bXBvcnQgIldlYk5TVVJMUmVxdWVzdEV4dHJhcy5oIgotI2ltcG9ydCAiV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyLmgiCi0jaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50Lmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL0RvY3VtZW50TG9hZGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtU3RyYXRl
Z2llcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9TZWN1cml0eVBvbGljeS5oPgotI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVVJMUmVzcG9u
c2UuaD4KLSNpbXBvcnQgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+Ci0jaW1wb3J0IDx3dGYv
Q29tcGxldGlvbkhhbmRsZXIuaD4KLSNpbXBvcnQgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1E
RUZJTkVfREVCVUdfT05MWV9HTE9CQUwoV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXIsIGhvc3Rl
ZE5ldHNjYXBlUGx1Z2luU3RyZWFtQ291bnRlciwgKCJIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVh
bSIpKTsKLQotSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW06Okhvc3RlZE5ldHNjYXBlUGx1Z2lu
U3RyZWFtKE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSogaW5zdGFuY2UsIHVpbnQzMl90IHN0
cmVhbUlELCBOU1VSTFJlcXVlc3QgKnJlcXVlc3QpCi0gICAgOiBtX2luc3RhbmNlKGluc3RhbmNl
KQotICAgICwgbV9zdHJlYW1JRChzdHJlYW1JRCkKLSAgICAsIG1fcmVxdWVzdChhZG9wdE5TKFty
ZXF1ZXN0IG11dGFibGVDb3B5XSkpCi0gICAgLCBtX3JlcXVlc3RVUkwoW3JlcXVlc3QgVVJMXSkK
LSAgICAsIG1fZnJhbWVMb2FkZXIoMCkKLXsKLSAgICBTdHJpbmcgcmVmZXJyZXIgPSBTZWN1cml0
eVBvbGljeTo6Z2VuZXJhdGVSZWZlcnJlckhlYWRlcihjb3JlKFtpbnN0YW5jZS0+cGx1Z2luVmll
dygpIHdlYkZyYW1lXSktPmRvY3VtZW50KCktPnJlZmVycmVyUG9saWN5KCksIFtyZXF1ZXN0IFVS
TF0sIGNvcmUoW2luc3RhbmNlLT5wbHVnaW5WaWV3KCkgd2ViRnJhbWVdKS0+bG9hZGVyKCkub3V0
Z29pbmdSZWZlcnJlcigpKTsKLSAgICBpZiAocmVmZXJyZXIuaXNFbXB0eSgpKQotICAgICAgICBb
bV9yZXF1ZXN0LmdldCgpIF93ZWJfc2V0SFRUUFJlZmVycmVyOm5pbF07Ci0gICAgZWxzZQotICAg
ICAgICBbbV9yZXF1ZXN0LmdldCgpIF93ZWJfc2V0SFRUUFJlZmVycmVyOnJlZmVycmVyXTsKLQot
I2lmbmRlZiBOREVCVUcKLSAgICBob3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbUNvdW50ZXIuaW5j
cmVtZW50KCk7Ci0jZW5kaWYKLX0KLQotSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW06Okhvc3Rl
ZE5ldHNjYXBlUGx1Z2luU3RyZWFtKE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSogaW5zdGFu
Y2UsIFdlYkNvcmU6OkZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlcikKLSAgICA6IG1faW5zdGFuY2Uo
aW5zdGFuY2UpCi0gICAgLCBtX3N0cmVhbUlEKDEpCi0gICAgLCBtX2ZyYW1lTG9hZGVyKGZyYW1l
TG9hZGVyKQotewotI2lmbmRlZiBOREVCVUcKLSAgICBob3N0ZWROZXRzY2FwZVBsdWdpblN0cmVh
bUNvdW50ZXIuaW5jcmVtZW50KCk7Ci0jZW5kaWYKLX0KLQotSG9zdGVkTmV0c2NhcGVQbHVnaW5T
dHJlYW06On5Ib3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbSgpCi17Ci0jaWZuZGVmIE5ERUJVRwot
ICAgIGhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtQ291bnRlci5kZWNyZW1lbnQoKTsKLSNlbmRp
ZgotfQotCi12b2lkIEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtOjpzdGFydFN0cmVhbVdpdGhS
ZXNwb25zZShOU1VSTFJlc3BvbnNlICpyZXNwb25zZSkKLXsKLSAgICBkaWRSZWNlaXZlUmVzcG9u
c2UoMCwgcmVzcG9uc2UpOwotfQotICAgIAotdm9pZCBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVh
bTo6c3RhcnRTdHJlYW0oTlNVUkwgKnJlc3BvbnNlVVJMLCBsb25nIGxvbmcgZXhwZWN0ZWRDb250
ZW50TGVuZ3RoLCBOU0RhdGUgKmxhc3RNb2RpZmllZERhdGUsIE5TU3RyaW5nICptaW1lVHlwZSwg
TlNEYXRhICpoZWFkZXJzKQotewotICAgIG1fcmVzcG9uc2VVUkwgPSByZXNwb25zZVVSTDsKLSAg
ICBtX21pbWVUeXBlID0gbWltZVR5cGU7Ci0KLSAgICBjaGFyKiBtaW1lVHlwZVVURjggPSBjb25z
dF9jYXN0PGNoYXIqPihbbWltZVR5cGUgVVRGOFN0cmluZ10pOwotICAgIGludCBtaW1lVHlwZVVU
RjhMZW5ndGggPSBtaW1lVHlwZVVURjggPyBzdHJsZW4gKG1pbWVUeXBlVVRGOCkgKyAxIDogMDsK
LSAgICAKLSAgICBjb25zdCBjaGFyICp1cmwgPSBbcmVzcG9uc2VVUkwgX3dlYl9VUkxDU3RyaW5n
XTsKLSAgICBpbnQgdXJsTGVuZ3RoID0gdXJsID8gc3RybGVuKHVybCkgKyAxIDogMDsKLSAgICAK
LSAgICBfV0tQSFN0YXJ0U3RyZWFtKG1faW5zdGFuY2UtPmhvc3RQcm94eSgpLT5wb3J0KCksCi0g
ICAgICAgICAgICAgICAgICAgICBtX2luc3RhbmNlLT5wbHVnaW5JRCgpLAotICAgICAgICAgICAg
ICAgICAgICAgbV9zdHJlYW1JRCwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8Y2hh
cio+KHVybCksIHVybExlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkQ29udGVu
dExlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgIFtsYXN0TW9kaWZpZWREYXRlIHRpbWVJbnRl
cnZhbFNpbmNlMTk3MF0sCi0gICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZVVURjgsIG1pbWVU
eXBlVVRGOExlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8Y2hhcio+KHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KFtoZWFkZXJzIGJ5dGVzXSkpLCBbaGVhZGVycyBs
ZW5ndGhdKTsKLX0KLSAgICAgICAgICAgICAgICAgICAgIAotdm9pZCBIb3N0ZWROZXRzY2FwZVBs
dWdpblN0cmVhbTo6ZGlkUmVjZWl2ZURhdGEoV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXIqLCBjb25zdCB1aW50OF90KiBieXRlcywgaW50IGxlbmd0aCkKLXsKLSAgICBfV0tQSFN0
cmVhbURpZFJlY2VpdmVEYXRhKG1faW5zdGFuY2UtPmhvc3RQcm94eSgpLT5wb3J0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc3RhbmNlLT5wbHVnaW5JRCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHJlYW1JRCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0X2Nhc3Q8Y2hhcio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KGJ5dGVzKSksIGxlbmd0aCk7Ci19Ci0gICAgCi12b2lkIEhvc3RlZE5ldHNjYXBlUGx1Z2luU3Ry
ZWFtOjpkaWRGaW5pc2hMb2FkaW5nKFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
KikKLXsKLSAgICBfV0tQSFN0cmVhbURpZEZpbmlzaExvYWRpbmcobV9pbnN0YW5jZS0+aG9zdFBy
b3h5KCktPnBvcnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnN0YW5j
ZS0+cGx1Z2luSUQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHJlYW1J
RCk7Ci0gICAgbV9pbnN0YW5jZS0+ZGlzY29ubmVjdFN0cmVhbSh0aGlzKTsKLX0KLQotdm9pZCBI
b3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbTo6d2lsbFNlbmRSZXF1ZXN0KE5ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyKiwgUmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiYpPiYmIGNhbGxiYWNrKQotewotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90aWZ5IHRoZSBw
bHVnLWluIHdpdGggTlBQX1VSTFJlZGlyZWN0Tm90aWZ5IGhlcmUuCi0gICAgY2FsbGJhY2soV1RG
TW92ZShyZXF1ZXN0KSk7Ci19Ci0KLXZvaWQgSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW06OmRp
ZFJlY2VpdmVSZXNwb25zZShOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIE5TVVJMUmVzcG9uc2UgKnIgPSByZXNwb25z
ZS5uc1VSTFJlc3BvbnNlKCk7Ci0gICAgCi0gICAgTlNNdXRhYmxlRGF0YSAqdGhlSGVhZGVycyA9
IG5pbDsKLSAgICBsb25nIGxvbmcgZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gW3IgZXhwZWN0ZWRD
b250ZW50TGVuZ3RoXTsKLSAgICAKLSAgICBpZiAoW3IgaXNLaW5kT2ZDbGFzczpbTlNIVFRQVVJM
UmVzcG9uc2UgY2xhc3NdXSkgewotICAgICAgICBOU0hUVFBVUkxSZXNwb25zZSAqaHR0cFJlc3Bv
bnNlID0gKE5TSFRUUFVSTFJlc3BvbnNlICopcjsKLSAgICAgICAgdGhlSGVhZGVycyA9IFtOU011
dGFibGVEYXRhIGRhdGFXaXRoQ2FwYWNpdHk6MTAyNF07Ci0gICAgICAgIAotICAgICAgICAvLyBG
SVhNRTogaXQgd291bGQgYmUgbmljZSB0byBiZSBhYmxlIHRvIGdldCB0aGUgcmF3IEhUVFAgaGVh
ZGVyIGJsb2NrLgotICAgICAgICAvLyBUaGlzIGluY2x1ZGVzIHRoZSBIVFRQIHZlcnNpb24sIHRo
ZSByZWFsIHN0YXR1cyB0ZXh0LAotICAgICAgICAvLyBhbGwgaGVhZGVycyBpbiB0aGVpciBvcmln
aW5hbCBvcmRlciBhbmQgaW5jbHVkaW5nIGR1cGxpY2F0ZXMsCi0gICAgICAgIC8vIGFuZCBhbGwg
b3JpZ2luYWwgYnl0ZXMgdmVyYmF0aW0sIHJhdGhlciB0aGFuIHNlbnQgdGhyb3VnaCBVbmljb2Rl
IHRyYW5zbGF0aW9uLgotICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5IE5TSFRUUFVSTFJlc3BvbnNl
IGRvZXNuJ3QgcHJvdmlkZSBhY2Nlc3MgYXQgdGhhdCBsb3cgYSBsZXZlbC4KLSAgICAgICAgCi0g
ICAgICAgIFt0aGVIZWFkZXJzIGFwcGVuZEJ5dGVzOiJIVFRQICIgbGVuZ3RoOjVdOwotICAgICAg
ICBjaGFyIHN0YXR1c1N0clsxMF07Ci0gICAgICAgIGxvbmcgc3RhdHVzQ29kZSA9IFtodHRwUmVz
cG9uc2Ugc3RhdHVzQ29kZV07Ci0gICAgICAgIHNucHJpbnRmKHN0YXR1c1N0ciwgc2l6ZW9mKHN0
YXR1c1N0ciksICIlbGQiLCBzdGF0dXNDb2RlKTsKLSAgICAgICAgW3RoZUhlYWRlcnMgYXBwZW5k
Qnl0ZXM6c3RhdHVzU3RyIGxlbmd0aDpzdHJsZW4oc3RhdHVzU3RyKV07Ci0gICAgICAgIFt0aGVI
ZWFkZXJzIGFwcGVuZEJ5dGVzOiIgT0tcbiIgbGVuZ3RoOjRdOwotICAgICAgICAKLSAgICAgICAg
Ly8gSEFDSzogcGFzcyB0aGUgaGVhZGVycyB0aHJvdWdoIGFzIFVURi04LgotICAgICAgICAvLyBU
aGlzIGlzIG5vdCB0aGUgaW50ZW5kZWQgYmVoYXZpb3I7IHdlJ3JlIHN1cHBvc2VkIHRvIHBhc3Mg
b3JpZ2luYWwgYnl0ZXMgdmVyYmF0aW0uCi0gICAgICAgIC8vIEJ1dCB3ZSBkb24ndCBoYXZlIHRo
ZSBvcmlnaW5hbCBieXRlcywgd2UgaGF2ZSBOU1N0cmluZ3MgYnVpbHQgYnkgdGhlIFVSTCBsb2Fk
aW5nIHN5c3RlbS4KLSAgICAgICAgLy8gSXQgaG9wZWZ1bGx5IHNob3VsZG4ndCBtYXR0ZXIsIHNp
bmNlIFJGQzI2MTYvUkZDODIyIHJlcXVpcmUgQVNDSUktb25seSBoZWFkZXJzLAotICAgICAgICAv
LyBidXQgc3VyZWx5IHNvbWVvbmUgb3V0IHRoZXJlIGlzIHVzaW5nIG5vbi1BU0NJSSBjaGFyYWN0
ZXJzLCBhbmQgaG9wZWZ1bGx5IFVURi04IGlzIGFkZXF1YXRlIGhlcmUuCi0gICAgICAgIC8vIEl0
IHNlZW1zIGJldHRlciB0aGFuIE5TQVNDSUlTdHJpbmdFbmNvZGluZywgd2hpY2ggd2lsbCBsb3Nl
IGluZm9ybWF0aW9uIGlmIG5vbi1BU0NJSSBpcyB1c2VkLgotICAgICAgICAKLSAgICAgICAgTlNE
aWN0aW9uYXJ5ICpoZWFkZXJEaWN0ID0gW2h0dHBSZXNwb25zZSBhbGxIZWFkZXJGaWVsZHNdOwot
ICAgICAgICBOU0FycmF5ICprZXlzID0gW1toZWFkZXJEaWN0IGFsbEtleXNdIHNvcnRlZEFycmF5
VXNpbmdTZWxlY3RvcjpAc2VsZWN0b3IoY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTopXTsKLSAgICAg
ICAgTlNFbnVtZXJhdG9yICppID0gW2tleXMgb2JqZWN0RW51bWVyYXRvcl07Ci0gICAgICAgIE5T
U3RyaW5nICprOwotICAgICAgICB3aGlsZSAoKGsgPSBbaSBuZXh0T2JqZWN0XSkgIT0gbmlsKSB7
Ci0gICAgICAgICAgICBOU1N0cmluZyAqdiA9IFtoZWFkZXJEaWN0IG9iamVjdEZvcktleTprXTsK
LSAgICAgICAgICAgIFt0aGVIZWFkZXJzIGFwcGVuZERhdGE6W2sgZGF0YVVzaW5nRW5jb2Rpbmc6
TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsKLSAgICAgICAgICAgIFt0aGVIZWFkZXJzIGFwcGVuZEJ5
dGVzOiI6ICIgbGVuZ3RoOjJdOwotICAgICAgICAgICAgW3RoZUhlYWRlcnMgYXBwZW5kRGF0YTpb
diBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dOwotICAgICAgICAgICAg
W3RoZUhlYWRlcnMgYXBwZW5kQnl0ZXM6IlxuIiBsZW5ndGg6MV07Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIC8vIElmIHRoZSBjb250ZW50IGlzIGVuY29kZWQgKG1vc3QgbGlrZWx5IGNv
bXByZXNzZWQpLCB0aGVuIGRvbid0IHNlbmQgaXRzIGxlbmd0aCB0byB0aGUgcGx1Z2luLAotICAg
ICAgICAvLyB3aGljaCBpcyBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGRlY29kZWQgbGVuZ3RoLCBu
b3QgeWV0IGtub3duIGF0IHRoZSBtb21lbnQuCi0gICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80
NDcwNTk5PiB0cmFja3MgYSByZXF1ZXN0IGZvciAtW05TVVJMUmVzcG9uc2UgZXhwZWN0ZWRDb250
ZW50TGVuZ3RoXSB0byBpbmNvcnBvcmF0ZSB0aGlzIGxvZ2ljLgotICAgICAgICBOU1N0cmluZyAq
Y29udGVudEVuY29kaW5nID0gKE5TU3RyaW5nICopW1soTlNIVFRQVVJMUmVzcG9uc2UgKilyIGFs
bEhlYWRlckZpZWxkc10gb2JqZWN0Rm9yS2V5OkAiQ29udGVudC1FbmNvZGluZyJdOwotICAgICAg
ICBpZiAoY29udGVudEVuY29kaW5nICYmICFbY29udGVudEVuY29kaW5nIGlzRXF1YWxUb1N0cmlu
ZzpAImlkZW50aXR5Il0pCi0gICAgICAgICAgICBleHBlY3RlZENvbnRlbnRMZW5ndGggPSAtMTsK
LQotICAgICAgICBbdGhlSGVhZGVycyBhcHBlbmRCeXRlczoiXDAiIGxlbmd0aDoxXTsKLSAgICB9
Ci0gICAgCi0gICAgc3RhcnRTdHJlYW0oW3IgVVJMXSwgZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBb
ciBfbGFzdE1vZGlmaWVkRGF0ZV0sIFtyIE1JTUVUeXBlXSwgdGhlSGVhZGVycyk7Ci19Ci0KLU5Q
UmVhc29uIEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtOjpyZWFzb25Gb3JFcnJvcihOU0Vycm9y
ICplcnJvcikKLXsKLSAgICBpZiAoIWVycm9yKQotICAgICAgICByZXR1cm4gTlBSRVNfRE9ORTsK
LQotICAgIGlmIChbW2Vycm9yIGRvbWFpbl0gaXNFcXVhbFRvU3RyaW5nOk5TVVJMRXJyb3JEb21h
aW5dICYmIFtlcnJvciBjb2RlXSA9PSBOU1VSTEVycm9yQ2FuY2VsbGVkKQotICAgICAgICByZXR1
cm4gTlBSRVNfVVNFUl9CUkVBSzsKLQotICAgIHJldHVybiBOUFJFU19ORVRXT1JLX0VSUjsKLX0K
LQotdm9pZCBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbTo6ZGlkRmFpbChXZWJDb3JlOjpOZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVy
cm9yKQotewotICAgIGlmIChOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gbV9p
bnN0YW5jZS0+aG9zdFByb3h5KCkpCi0gICAgICAgIF9XS1BIU3RyZWFtRGlkRmFpbChob3N0UHJv
eHktPnBvcnQoKSwgbV9pbnN0YW5jZS0+cGx1Z2luSUQoKSwgbV9zdHJlYW1JRCwgcmVhc29uRm9y
RXJyb3IoZXJyb3IpKTsKLSAgICBtX2luc3RhbmNlLT5kaXNjb25uZWN0U3RyZWFtKHRoaXMpOwot
fQotCi1ib29sIEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtOjp3YW50c0FsbFN0cmVhbXMoKSBj
b25zdAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci12b2lkIEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtOjpzdGFydCgpCi17Ci0gICAgQVNTRVJU
KG1fcmVxdWVzdCk7Ci0gICAgQVNTRVJUKCFtX2ZyYW1lTG9hZGVyKTsKLSAgICBBU1NFUlQoIW1f
bG9hZGVyKTsKLQotICAgIHdlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpLnNjaGVkdWxlUGx1Z2lu
U3RyZWFtTG9hZCgqY29yZShbbV9pbnN0YW5jZS0+cGx1Z2luVmlldygpIHdlYkZyYW1lXSksICp0
aGlzLCBtX3JlcXVlc3QuZ2V0KCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMg
fV0gKFJlZlB0cjxXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4mJiBsb2FkZXIp
IHsKLSAgICAgICAgbV9sb2FkZXIgPSBXVEZNb3ZlKGxvYWRlcik7Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW06OnN0b3AoKQotewotICAgIEFTU0VSVCghbV9m
cmFtZUxvYWRlcik7Ci0gICAgCi0gICAgaWYgKCFtX2xvYWRlci0+aXNEb25lKCkpCi0gICAgICAg
IG1fbG9hZGVyLT5jYW5jZWwobV9sb2FkZXItPmNhbmNlbGxlZEVycm9yKCkpOwotfQotICAgIAot
dm9pZCBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbTo6Y2FuY2VsTG9hZChOUFJlYXNvbiByZWFz
b24pCi17Ci0gICAgY2FuY2VsTG9hZChlcnJvckZvclJlYXNvbihyZWFzb24pKTsKLX0KLQotdm9p
ZCBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbTo6Y2FuY2VsTG9hZChOU0Vycm9yICplcnJvcikK
LXsKLSAgICBpZiAobV9mcmFtZUxvYWRlcikgewotICAgICAgICBBU1NFUlQoIW1fbG9hZGVyKTsK
LSAgICAgICAgCi0gICAgICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IG1fZnJh
bWVMb2FkZXItPmFjdGl2ZURvY3VtZW50TG9hZGVyKCk7Ci0gICAgICAgIGlmIChkb2N1bWVudExv
YWRlciAmJiBkb2N1bWVudExvYWRlci0+aXNMb2FkaW5nTWFpblJlc291cmNlKCkpCi0gICAgICAg
ICAgICBkb2N1bWVudExvYWRlci0+Y2FuY2VsTWFpblJlc291cmNlTG9hZChlcnJvcik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fbG9hZGVyLT5pc0RvbmUoKSkgewotICAg
ICAgICAvLyBDYW5jZWxsaW5nIHRoZSBsb2FkIHdpbGwgZGlzY29ubmVjdCB0aGUgc3RyZWFtIHNv
IHRoZXJlJ3Mgbm8gbmVlZCB0byBkbyBpdCBleHBsaWNpdGx5LgotICAgICAgICBtX2xvYWRlci0+
Y2FuY2VsKGVycm9yKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9pbnN0YW5jZS0+ZGlzY29ubmVj
dFN0cmVhbSh0aGlzKTsKLX0KLQotTlNFcnJvciAqSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW06
OnBsdWdpbkNhbmNlbGxlZENvbm5lY3Rpb25FcnJvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFk
b3B0TlMoW1tOU0Vycm9yIGFsbG9jXSBfaW5pdFdpdGhQbHVnaW5FcnJvckNvZGU6V2ViS2l0RXJy
b3JQbHVnSW5DYW5jZWxsZWRDb25uZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGVudFVSTDptX3Jlc3BvbnNlVVJMID8gbV9yZXNwb25zZVVSTC5n
ZXQoKSA6IG1fcmVxdWVzdFVSTC5nZXQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBsdWdpblBhZ2VVUkw6bmlsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGx1Z2luTmFtZTpbW21faW5zdGFuY2UtPnBsdWdpblZpZXcoKSBwbHVn
aW5QYWNrYWdlXSBwbHVnaW5JbmZvXS5uYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBNSU1FVHlwZTptX21pbWVUeXBlLmdldCgpXSkuYXV0b3JlbGVhc2Uo
KTsKLX0KLQotTlNFcnJvciAqSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW06OmVycm9yRm9yUmVh
c29uKE5QUmVhc29uIHJlYXNvbikgY29uc3QKLXsKLSAgICBpZiAocmVhc29uID09IE5QUkVTX0RP
TkUpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBpZiAocmVhc29uID09IE5QUkVTX1VTRVJf
QlJFQUspCi0gICAgICAgIHJldHVybiBbTlNFcnJvciBfd2ViS2l0RXJyb3JXaXRoRG9tYWluOk5T
VVJMRXJyb3JEb21haW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvZGU6TlNVUkxFcnJvckNhbmNlbGxlZCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVUkw6bV9yZXNwb25zZVVSTCA/IG1fcmVzcG9uc2VVUkwuZ2V0KCkgOiBt
X3JlcXVlc3RVUkwuZ2V0KCldOwotCi0gICAgcmV0dXJuIHBsdWdpbkNhbmNlbGxlZENvbm5lY3Rp
b25FcnJvcigpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShQ
TFVHSU5fSE9TVF9QUk9DRVNTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQ
bHVnaW5Ib3N0TWFuYWdlci5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0
ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4ZjQ0NDk4YjdiMDg2MjYzZGZmZmYwZDlkYzUxNGVlMjcwNjllMTlhLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2lmIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKQotCi0jaWZuZGVmIE5ldHNj
YXBlUGx1Z2luSG9zdE1hbmFnZXJfaAotI2RlZmluZSBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2Vy
X2gKLQotI2ltcG9ydCA8d3RmL0hhc2hNYXAuaD4KLSNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KLSNp
bXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1AY2xhc3MgV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3OwotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotY2xhc3MgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OwotY2xhc3MgTmV0
c2NhcGVQbHVnaW5Ib3N0UHJveHk7Ci0KLWNsYXNzIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIg
ewotcHVibGljOgotICAgIHN0YXRpYyBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyJiBzaW5nbGV0
b24oKTsKLSAgICAKLSAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5PiBpbnN0
YW50aWF0ZVBsdWdpbihjb25zdCBTdHJpbmcmIHBsdWdpblBhdGgsIGNwdV90eXBlX3QgcGx1Z2lu
QXJjaGl0ZWN0dXJlLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIFdlYkhvc3RlZE5l
dHNjYXBlUGx1Z2luVmlldyAqLCBOU1N0cmluZyAqbWltZVR5cGUsIE5TQXJyYXkgKmF0dHJpYnV0
ZUtleXMsIE5TQXJyYXkgKmF0dHJpYnV0ZVZhbHVlcywgTlNTdHJpbmcgKnVzZXJBZ2VudCwgTlNV
UkwgKnNvdXJjZVVSTCwgYm9vbCBmdWxsRnJhbWUsIGJvb2wgaXNQcml2YXRlQnJvd3NpbmdFbmFi
bGVkLCBib29sIGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsIGJvb2wgaG9zdExheWVy
c0luV2luZG93U2VydmVyKTsKLQotICAgIHZvaWQgcGx1Z2luSG9zdERpZWQoTmV0c2NhcGVQbHVn
aW5Ib3N0UHJveHkqKTsKLQotICAgIHZvaWQgY3JlYXRlUHJvcGVydHlMaXN0RmlsZShjb25zdCBT
dHJpbmcmIHBsdWdpblBhdGgsIGNwdV90eXBlX3QgcGx1Z2luQXJjaGl0ZWN0dXJlLCBjb25zdCBT
dHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpOwotICAgIAotICAgIHZvaWQgZGlkQ3JlYXRlV2luZG93
KCk7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPE5ldHNjYXBl
UGx1Z2luSG9zdE1hbmFnZXI+OwotICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0Rm9y
UGx1Z2luKGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCwgY3B1X3R5cGVfdCBwbHVnaW5BcmNoaXRl
Y3R1cmUsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllcik7Ci0KLSAgICBOZXRzY2FwZVBs
dWdpbkhvc3RNYW5hZ2VyKCk7Ci0gICAgfk5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIoKTsKLSAg
ICAKLSAgICBib29sIHNwYXduUGx1Z2luSG9zdChjb25zdCBTdHJpbmcmIHBsdWdpblBhdGgsIGNw
dV90eXBlX3QgcGx1Z2luQXJjaGl0ZWN0dXJlLCBtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCBtYWNo
X3BvcnRfdCYgcGx1Z2luSG9zdFBvcnQsIFByb2Nlc3NTZXJpYWxOdW1iZXImIHBsdWdpbkhvc3RQ
U04pOwotICAgIAotICAgIGJvb2wgaW5pdGlhbGl6ZVZlbmRvclBvcnQoKTsKLSAgICAKLSAgICBt
YWNoX3BvcnRfdCBtX3BsdWdpblZlbmRvclBvcnQgeyBNQUNIX1BPUlRfTlVMTCB9OwotICAgIAot
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZWFsbHkgYmUgYSBIYXNoTWFwIG9mIFJldGFpblB0
cnMsIGJ1dCB0aGF0IGRvZXNuJ3Qgd29yayByaWdodCBub3cuCi0gICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqPiBQbHVnaW5Ib3N0TWFwOwotICAgIFBs
dWdpbkhvc3RNYXAgbV9wbHVnaW5Ib3N0czsKLX07Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKLQotI2VuZGlmIC8vIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXJfaAotI2VuZGlmIC8vIFVT
RShQTFVHSU5fSE9TVF9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbSBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIu
bW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYjZkODE5ZjlkOTc3OGFhNWE2MjFi
ODBlYTMwYjEzODVkZTU2ZGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQ
bHVnaW5Ib3N0TWFuYWdlci5tbQorKysgL2Rldi9udWxsCkBAIC0xLDMyOSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmIFVTRShQ
TFVHSU5fSE9TVF9QUk9DRVNTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2lt
cG9ydCAiTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5oIgotCi0jaW1wb3J0ICJOZXRzY2FwZVBs
dWdpbkhvc3RQcm94eS5oIgotI2ltcG9ydCAiTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lmgi
Ci0jaW1wb3J0ICJXZWJMb2NhbGl6YWJsZVN0cmluZ3NJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2Vi
TmV0c2NhcGVQbHVnaW5QYWNrYWdlLmgiCi0jaW1wb3J0IDxtYWNoL21hY2hfcG9ydC5oPgotI2lt
cG9ydCA8cGFsL3NwaS9jZi9DRkxvY2FsZVNQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9R
dWFydHpDb3JlU1BJLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NvY29hL1NlcnZlcnNTUEkuaD4KLSNp
bXBvcnQgPHNwYXduLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3Rm
L01hY2hTZW5kUmlnaHQuaD4KLSNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2ltcG9y
dCA8d3RmL1JldGFpblB0ci5oPgotI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi1leHRl
cm4gIkMiIHsKLSNpbXBvcnQgIldlYktpdFBsdWdpbkFnZW50LmgiCi0jaW1wb3J0ICJXZWJLaXRQ
bHVnaW5Ib3N0LmgiCi19Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlciYgTmV0c2NhcGVQbHVnaW5Ib3N0
TWFuYWdlcjo6c2luZ2xldG9uKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TmV0c2Nh
cGVQbHVnaW5Ib3N0TWFuYWdlcj4gcGx1Z2luSG9zdE1hbmFnZXI7Ci0gICAgcmV0dXJuIHBsdWdp
bkhvc3RNYW5hZ2VyOwotfQotCi1zdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBwbHVnaW5Ib3N0QXBw
TmFtZSA9IEAiV2ViS2l0UGx1Z2luSG9zdC5hcHAiOwotCi1OZXRzY2FwZVBsdWdpbkhvc3RNYW5h
Z2VyOjpOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyKCkKLSAgICA6IG1fcGx1Z2luVmVuZG9yUG9y
dChNQUNIX1BPUlRfTlVMTCkKLXsKLX0KLSAKLU5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6On5O
ZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyKCkKLXsKLX0KLQotTmV0c2NhcGVQbHVnaW5Ib3N0UHJv
eHkqIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6Omhvc3RGb3JQbHVnaW4oY29uc3QgV1RGOjpT
dHJpbmcmIHBsdWdpblBhdGgsIGNwdV90eXBlX3QgcGx1Z2luQXJjaGl0ZWN0dXJlLCBjb25zdCBT
dHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpCi17Ci0gICAgUGx1Z2luSG9zdE1hcDo6QWRkUmVzdWx0
IHJlc3VsdCA9IG1fcGx1Z2luSG9zdHMuYWRkKHBsdWdpblBhdGgsIG51bGxwdHIpOwotICAgIAot
ICAgIC8vIFRoZSBwYWNrYWdlIHdhcyBhbHJlYWR5IGluIHRoZSBtYXAsIGp1c3QgcmV0dXJuIGl0
LgotICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlOwotICAgICAgICAKLSAgICBtYWNoX3BvcnRfdCBjbGllbnRQb3J0ID0gTUFD
SF9QT1JUX05VTEw7Ci0gICAgaWYgKG1hY2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigp
LCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgJmNsaWVudFBvcnQpICE9IEtFUk5fU1VDQ0VTUykg
ewotICAgICAgICBtX3BsdWdpbkhvc3RzLnJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOwotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgCi0gICAgbWFjaF9wb3J0X3QgcGx1Z2luSG9z
dFBvcnQgPSBNQUNIX1BPUlRfTlVMTDsKLSAgICBQcm9jZXNzU2VyaWFsTnVtYmVyIHBsdWdpbkhv
c3RQU047Ci0gICAgaWYgKCFzcGF3blBsdWdpbkhvc3QocGx1Z2luUGF0aCwgcGx1Z2luQXJjaGl0
ZWN0dXJlLCBjbGllbnRQb3J0LCBwbHVnaW5Ib3N0UG9ydCwgcGx1Z2luSG9zdFBTTikpIHsKLSAg
ICAgICAgbWFjaF9wb3J0X21vZF9yZWZzKG1hY2hfdGFza19zZWxmKCksIGNsaWVudFBvcnQsIE1B
Q0hfUE9SVF9SSUdIVF9SRUNFSVZFLCAtMSk7Ci0gICAgICAgIG1fcGx1Z2luSG9zdHMucmVtb3Zl
KHJlc3VsdC5pdGVyYXRvcik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICAK
LSAgICAvLyBTaW5jZSBGbGFzaCBOUE9iamVjdHMgYWRkIG1ldGhvZHMgZHluYW1pY2FsbHksIHdl
IGRvbid0IHdhbnQgdG8gY2FjaGUgd2hlbiBhIHByb3BlcnR5L21ldGhvZCBkb2Vzbid0IGV4aXN0
Ci0gICAgLy8gb24gYW4gb2JqZWN0IGJlY2F1c2UgaXQgY291bGQgYmUgYWRkZWQgbGF0ZXIuCi0g
ICAgYm9vbCBzaG91bGRDYWNoZU1pc3NpbmdQcm9wZXJ0aWVzQW5kTWV0aG9kcyA9IGJ1bmRsZUlk
ZW50aWZpZXIgIT0gImNvbS5tYWNyb21lZGlhLkZsYXNoIFBsYXllci5wbHVnaW4iOwotICAgIAot
ICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBuZXcgTmV0c2NhcGVQbHVn
aW5Ib3N0UHJveHkoY2xpZW50UG9ydCwgcGx1Z2luSG9zdFBvcnQsIHBsdWdpbkhvc3RQU04sIHNo
b3VsZENhY2hlTWlzc2luZ1Byb3BlcnRpZXNBbmRNZXRob2RzKTsKLSAgICAKLSAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gaG9zdFByb3h5OwotICAgIAotICAgIHJldHVybiBob3N0UHJveHk7
Ci19Ci0KLXN0YXRpYyBOU1N0cmluZyAqcHJlZmVycmVkQnVuZGxlTG9jYWxpemF0aW9uTmFtZSgp
Ci17Ci0gICAgLy8gRklYTUU6IEFueSB1c2Ugb2YgdGhpcyBmdW5jdGlvbiB0byBwYXNzIGxvY2Fs
aXphdGlvbnMgdG8gYW5vdGhlcgotICAgIC8vIHByb2Nlc3MgaXMgbGlrZWx5IG5vdCBjb21wbGV0
ZWx5IHJpZ2h0LCBzaW5jZSBpdCBvbmx5IGNvbnNpZGVycwotICAgIC8vIG9uZSBsb2NhbGl6YXRp
b24uCi0gICAgTlNBcnJheSAqcHJlZmVycmVkTG9jYWxpemF0aW9ucyA9IFtbTlNCdW5kbGUgbWFp
bkJ1bmRsZV0gcHJlZmVycmVkTG9jYWxpemF0aW9uc107Ci0gICAgaWYgKCFwcmVmZXJyZWRMb2Nh
bGl6YXRpb25zIHx8ICFbcHJlZmVycmVkTG9jYWxpemF0aW9ucyBjb3VudF0pCi0gICAgICAgIHJl
dHVybiBAImVuX1VTIjsKLQotICAgIE5TU3RyaW5nICpsYW5ndWFnZSA9IFtwcmVmZXJyZWRMb2Nh
bGl6YXRpb25zIG9iamVjdEF0SW5kZXg6MF07Ci0KLSAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9i
bGVtLzE4MDgzODgwPiBSZXBsYWNlIHVzZSBvZiBTY3JpcHQgTWFuYWdlcgotICAgIC8vIHRvIGNh
bm9uaWNhbGl6ZSBsb2NhbGVzIHdpdGggYSBjdXN0b20gV2ViLXNwZWNpZmljIHRhYmxlCi0gICAg
TGFuZ0NvZGUgbGFuZ3VhZ2VDb2RlOwotICAgIFJlZ2lvbkNvZGUgcmVnaW9uQ29kZTsKLQotICAg
IEJvb2xlYW4gc3VjY2VzcyA9IENGTG9jYWxlR2V0TGFuZ3VhZ2VSZWdpb25FbmNvZGluZ0Zvckxv
Y2FsZUlkZW50aWZpZXIoKF9fYnJpZGdlIENGU3RyaW5nUmVmKWxhbmd1YWdlLCAmbGFuZ3VhZ2VD
b2RlLCAmcmVnaW9uQ29kZSwgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgaWYgKCFzdWNjZXNzKQot
ICAgICAgICByZXR1cm4gQCJlbl9VUyI7Ci0KLSAgICByZXR1cm4gYWRvcHRDRihDRkxvY2FsZUNy
ZWF0ZUNhbm9uaWNhbExvY2FsZUlkZW50aWZpZXJGcm9tU2NyaXB0TWFuYWdlckNvZGVzKDAsIGxh
bmd1YWdlQ29kZSwgcmVnaW9uQ29kZSkpLmJyaWRnaW5nQXV0b3JlbGVhc2UoKTsKLX0KLQotYm9v
bCBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpzcGF3blBsdWdpbkhvc3QoY29uc3QgU3RyaW5n
JiBwbHVnaW5QYXRoLCBjcHVfdHlwZV90IHBsdWdpbkFyY2hpdGVjdHVyZSwgbWFjaF9wb3J0X3Qg
Y2xpZW50UG9ydCwgbWFjaF9wb3J0X3QmIHBsdWdpbkhvc3RQb3J0LCBQcm9jZXNzU2VyaWFsTnVt
YmVyJiBwbHVnaW5Ib3N0UFNOKQotewotICAgIGlmIChtX3BsdWdpblZlbmRvclBvcnQgPT0gTUFD
SF9QT1JUX05VTEwpIHsKLSAgICAgICAgaWYgKCFpbml0aWFsaXplVmVuZG9yUG9ydCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghQ0FSZW5kZXJTZXJ2ZXJT
dGFydCgpKQotICAgICAgICByZXR1cm4gTUFDSF9QT1JUX05VTEw7Ci0KLSAgICBtYWNoX3BvcnRf
dCByZW5kZXJTZXJ2ZXJQb3J0ID0gQ0FSZW5kZXJTZXJ2ZXJHZXRQb3J0KCk7Ci0gICAgaWYgKCFN
QUNIX1BPUlRfVkFMSUQocmVuZGVyU2VydmVyUG9ydCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIE5TU3RyaW5nICpwbHVnaW5Ib3N0QXBwUGF0aCA9IFtbTlNCdW5kbGUgYnVuZGxlRm9y
Q2xhc3M6W1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSBjbGFzc11dIHBhdGhGb3JBdXhpbGlhcnlF
eGVjdXRhYmxlOnBsdWdpbkhvc3RBcHBOYW1lXTsKLSAgICBOU1N0cmluZyAqcGx1Z2luSG9zdEFw
cEV4ZWN1dGFibGVQYXRoID0gW1tOU0J1bmRsZSBidW5kbGVXaXRoUGF0aDpwbHVnaW5Ib3N0QXBw
UGF0aF0gZXhlY3V0YWJsZVBhdGhdOwotCi0gICAgTlNEaWN0aW9uYXJ5ICpsYXVuY2hQcm9wZXJ0
aWVzID0gQHsKLSAgICAgICAgQCJwbHVnaW5Ib3N0UGF0aCI6IHBsdWdpbkhvc3RBcHBFeGVjdXRh
YmxlUGF0aCwKLSAgICAgICAgQCJjcHVUeXBlIjogQChwbHVnaW5BcmNoaXRlY3R1cmUpLAotICAg
ICAgICBAImxvY2FsaXphdGlvbiI6IHByZWZlcnJlZEJ1bmRsZUxvY2FsaXphdGlvbk5hbWUoKSwK
LSAgICB9OwotICAgIE5TRGF0YSAqZGF0YSA9IFtOU1Byb3BlcnR5TGlzdFNlcmlhbGl6YXRpb24g
ZGF0YVdpdGhQcm9wZXJ0eUxpc3Q6bGF1bmNoUHJvcGVydGllcyBmb3JtYXQ6TlNQcm9wZXJ0eUxp
c3RCaW5hcnlGb3JtYXRfdjFfMCBvcHRpb25zOjAgZXJyb3I6bnVsbHB0cl07Ci0gICAgQVNTRVJU
KGRhdGEpOwotCi0gICAga2Vybl9yZXR1cm5fdCBrciA9IF9XS1BBU3Bhd25QbHVnaW5Ib3N0KG1f
cGx1Z2luVmVuZG9yUG9ydCwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oY29uc3RfY2FzdDx2
b2lkKj4oW2RhdGEgYnl0ZXNdKSksIFtkYXRhIGxlbmd0aF0sICZwbHVnaW5Ib3N0UG9ydCk7Ci0K
LSAgICBpZiAoa3IgPT0gTUFDSF9TRU5EX0lOVkFMSURfREVTVCkgewotICAgICAgICAvLyBUaGUg
cGx1Zy1pbiB2ZW5kb3IgcG9ydCBoYXMgZ29uZSBhd2F5IGZvciBzb21lIHJlYXNvbi4gVHJ5IHRv
IHJlaW5pdGlhbGl6ZSBpdC4KLSAgICAgICAgbV9wbHVnaW5WZW5kb3JQb3J0ID0gTUFDSF9QT1JU
X05VTEw7Ci0gICAgICAgIGlmICghaW5pdGlhbGl6ZVZlbmRvclBvcnQoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEFuZCBzcGF3biB0aGUgcGx1Zy1p
biBob3N0IGFnYWluLgotICAgICAgICBrciA9IF9XS1BBU3Bhd25QbHVnaW5Ib3N0KG1fcGx1Z2lu
VmVuZG9yUG9ydCwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oY29uc3RfY2FzdDx2b2lkKj4o
W2RhdGEgYnl0ZXNdKSksIFtkYXRhIGxlbmd0aF0sICZwbHVnaW5Ib3N0UG9ydCk7Ci0gICAgfQot
Ci0gICAgaWYgKGtyICE9IEtFUk5fU1VDQ0VTUykgewotICAgICAgICAvLyBGSVhNRTogQ2hlY2sg
Zm9yIGludmFsaWQgZGVzdCBhbmQgdHJ5IHRvIHJlLXNwYXduIHRoZSBwbHVnLWluIGFnZW50Lgot
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzcGF3biBwbHVnLWluIGhvc3QsIGVycm9yICV4
Iiwga3IpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIE5TU3RyaW5n
ICp2aXNpYmxlTmFtZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OlVJX1NUUklOR19JTlRF
Uk5BTCgiJUAgKCVAIEludGVybmV0IHBsdWctaW4pIiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZpc2libGUgbmFtZSBv
ZiB0aGUgcGx1Zy1pbiBob3N0IHByb2Nlc3MuIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgcGx1
Zy1pbiBuYW1lICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBhcHBs
aWNhdGlvbiBuYW1lLiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbWyhOU1N0cmlu
ZyopcGx1Z2luUGF0aCBsYXN0UGF0aENvbXBvbmVudF0gc3RyaW5nQnlEZWxldGluZ1BhdGhFeHRl
bnNpb25dLCBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHByb2Nlc3NOYW1lXV07Ci0gICAg
Ci0gICAgYXV0byBob3N0UHJvcGVydGllcyA9IEB7Ci0gICAgICAgIEAidmlzaWJsZU5hbWUiOiB2
aXNpYmxlTmFtZSwKLSAgICAgICAgQCJidW5kbGVQYXRoIjogKE5TU3RyaW5nICopcGx1Z2luUGF0
aCwKLSAgICB9OwotICAgIGRhdGEgPSBbTlNQcm9wZXJ0eUxpc3RTZXJpYWxpemF0aW9uIGRhdGFX
aXRoUHJvcGVydHlMaXN0Omhvc3RQcm9wZXJ0aWVzIGZvcm1hdDpOU1Byb3BlcnR5TGlzdEJpbmFy
eUZvcm1hdF92MV8wIG9wdGlvbnM6MCBlcnJvcjpOVUxMXTsKLSAgICBBU1NFUlQoZGF0YSk7Ci0K
LSAgICBQcm9jZXNzU2VyaWFsTnVtYmVyIHBzbjsKLQotICAgIEFMTE9XX0RFUFJFQ0FURURfREVD
TEFSQVRJT05TX0JFR0lOCi0gICAgR2V0Q3VycmVudFByb2Nlc3MoJnBzbik7Ci0gICAgQUxMT1df
REVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0KLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElE
KGNsaWVudFBvcnQpKTsKLSAgICBrciA9IF9XS1BIQ2hlY2tJbldpdGhQbHVnaW5Ib3N0KHBsdWdp
bkhvc3RQb3J0LCBzdGF0aWNfY2FzdDx1aW50OF90Kj4oY29uc3RfY2FzdDx2b2lkKj4oW2RhdGEg
Ynl0ZXNdKSksIFtkYXRhIGxlbmd0aF0sIGNsaWVudFBvcnQsIHBzbi5oaWdoTG9uZ09mUFNOLCBw
c24ubG93TG9uZ09mUFNOLCByZW5kZXJTZXJ2ZXJQb3J0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJnBsdWdpbkhvc3RQU04uaGlnaExvbmdPZlBTTiwgJnBsdWdpbkhvc3RQ
U04ubG93TG9uZ09mUFNOKTsKLSAgICAKLSAgICBpZiAoa3IgIT0gS0VSTl9TVUNDRVNTKSB7Ci0g
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNoZWNrIGluIHdpdGggcGx1Zy1pbiBob3N0LCBl
cnJvciAleCIsIGtyKTsKLSAgICAgICAgZGVhbGxvY2F0ZVNlbmRSaWdodFNhZmVseShwbHVnaW5I
b3N0UG9ydCk7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OmluaXRpYWxpemVWZW5k
b3JQb3J0KCkKLXsKLSAgICBBU1NFUlQobV9wbHVnaW5WZW5kb3JQb3J0ID09IE1BQ0hfUE9SVF9O
VUxMKTsKLQotICAgIC8vIEdldCB0aGUgcGx1Zy1pbiBhZ2VudCBwb3J0LgotICAgIG1hY2hfcG9y
dF90IHBsdWdpbkFnZW50UG9ydCA9IE1BQ0hfUE9SVF9OVUxMOwotICAgIGlmIChib290c3RyYXBf
bG9va191cChib290c3RyYXBfcG9ydCwgImNvbS5hcHBsZS5XZWJLaXQuUGx1Z2luQWdlbnQiLCAm
cGx1Z2luQWdlbnRQb3J0KSAhPSBLRVJOX1NVQ0NFU1MpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gbG9vayB1cCB0aGUgcGx1Zy1pbiBhZ2VudCBwb3J0Iik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgTlNEYXRhICphcHBOYW1lRGF0YSA9IFtbW05TUHJv
Y2Vzc0luZm8gcHJvY2Vzc0luZm9dIHByb2Nlc3NOYW1lXSBkYXRhVXNpbmdFbmNvZGluZzpOU1VU
RjhTdHJpbmdFbmNvZGluZ107Ci0gICAgCi0gICAgLy8gVGVsbCB0aGUgcGx1Zy1pbiBhZ2VudCB0
aGF0IHdlIGV4aXN0LgotICAgIGlmIChfV0tQQUNoZWNrSW5BcHBsaWNhdGlvbihwbHVnaW5BZ2Vu
dFBvcnQsIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihjb25zdF9jYXN0PHZvaWQqPihbYXBwTmFtZURh
dGEgYnl0ZXNdKSksIFthcHBOYW1lRGF0YSBsZW5ndGhdLCAmbV9wbHVnaW5WZW5kb3JQb3J0KSAh
PSBLRVJOX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBT
aG91bGQgd2UgYWRkIGEgbm90aWZpY2F0aW9uIGZvciB3aGVuIHRoZSB2ZW5kb3IgcG9ydCBkaWVz
PwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSG9zdE1h
bmFnZXI6OnBsdWdpbkhvc3REaWVkKE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBwbHVnaW5Ib3N0
KQotewotICAgIFBsdWdpbkhvc3RNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luSG9zdHMuZW5k
KCk7Ci0KLSAgICAvLyBUaGlzIGhhcyBPKG4pIGNvbXBsZXhpdHkgYnV0IHRoZSBudW1iZXIgb2Yg
YWN0aXZlIHBsdWctaW4gaG9zdHMgaXMgdmVyeSBzbWFsbCBzbyBpdCBzaG91bGRuJ3QgbWF0dGVy
LgotICAgIGZvciAoUGx1Z2luSG9zdE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BsdWdpbkhvc3RzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnZhbHVlID09IHBsdWdp
bkhvc3QpIHsKLSAgICAgICAgICAgIG1fcGx1Z2luSG9zdHMucmVtb3ZlKGl0KTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotUmVmUHRyPE5ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eT4gTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6aW5zdGFudGlhdGVQbHVn
aW4oY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoLCBjcHVfdHlwZV90IHBsdWdpbkFyY2hpdGVjdHVy
ZSwgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBXZWJIb3N0ZWROZXRzY2FwZVBsdWdp
blZpZXcgKnBsdWdpblZpZXcsIE5TU3RyaW5nICptaW1lVHlwZSwgTlNBcnJheSAqYXR0cmlidXRl
S2V5cywgTlNBcnJheSAqYXR0cmlidXRlVmFsdWVzLCBOU1N0cmluZyAqdXNlckFnZW50LCBOU1VS
TCAqc291cmNlVVJMLCBib29sIGZ1bGxGcmFtZSwgYm9vbCBpc1ByaXZhdGVCcm93c2luZ0VuYWJs
ZWQsIGJvb2wgaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwgYm9vbCBob3N0TGF5ZXJz
SW5XaW5kb3dTZXJ2ZXIpCi17Ci0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94
eSA9IGhvc3RGb3JQbHVnaW4ocGx1Z2luUGF0aCwgcGx1Z2luQXJjaGl0ZWN0dXJlLCBidW5kbGVJ
ZGVudGlmaWVyKTsKLSAgICBpZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gcHJvcGVydGllcyA9IGFkb3B0
TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7Ci0gICAgCi0gICAgaWYgKG1p
bWVUeXBlKQotICAgICAgICBbcHJvcGVydGllcy5nZXQoKSBzZXRPYmplY3Q6bWltZVR5cGUgZm9y
S2V5OkAibWltZVR5cGUiXTsKLQotICAgIEFTU0VSVF9BUkcodXNlckFnZW50LCB1c2VyQWdlbnQp
OwotICAgIFtwcm9wZXJ0aWVzLmdldCgpIHNldE9iamVjdDp1c2VyQWdlbnQgZm9yS2V5OkAidXNl
ckFnZW50Il07Ci0gICAgCi0gICAgQVNTRVJUX0FSRyhhdHRyaWJ1dGVLZXlzLCBhdHRyaWJ1dGVL
ZXlzKTsKLSAgICBbcHJvcGVydGllcy5nZXQoKSBzZXRPYmplY3Q6YXR0cmlidXRlS2V5cyBmb3JL
ZXk6QCJhdHRyaWJ1dGVLZXlzIl07Ci0gICAgCi0gICAgQVNTRVJUX0FSRyhhdHRyaWJ1dGVWYWx1
ZXMsIGF0dHJpYnV0ZVZhbHVlcyk7Ci0gICAgW3Byb3BlcnRpZXMuZ2V0KCkgc2V0T2JqZWN0OmF0
dHJpYnV0ZVZhbHVlcyBmb3JLZXk6QCJhdHRyaWJ1dGVWYWx1ZXMiXTsKLQotICAgIGlmIChzb3Vy
Y2VVUkwpCi0gICAgICAgIFtwcm9wZXJ0aWVzLmdldCgpIHNldE9iamVjdDpbc291cmNlVVJMIGFi
c29sdXRlU3RyaW5nXSBmb3JLZXk6QCJzb3VyY2VVUkwiXTsKLSAgICAKLSAgICBbcHJvcGVydGll
cy5nZXQoKSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOmZ1bGxGcmFtZV0gZm9y
S2V5OkAiZnVsbEZyYW1lIl07Ci0gICAgW3Byb3BlcnRpZXMuZ2V0KCkgc2V0T2JqZWN0OltOU051
bWJlciBudW1iZXJXaXRoQm9vbDppc1ByaXZhdGVCcm93c2luZ0VuYWJsZWRdIGZvcktleTpAInBy
aXZhdGVCcm93c2luZ0VuYWJsZWQiXTsKLSAgICBbcHJvcGVydGllcy5nZXQoKSBzZXRPYmplY3Q6
W05TTnVtYmVyIG51bWJlcldpdGhCb29sOmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWRd
IGZvcktleTpAImFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkIl07Ci0gICAgW3Byb3BlcnRp
ZXMuZ2V0KCkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpob3N0TGF5ZXJzSW5X
aW5kb3dTZXJ2ZXJdIGZvcktleTpAImhvc3RMYXllcnNJbldpbmRvd1NlcnZlciJdOwotCi0gICAg
TlNEYXRhICpkYXRhID0gW05TUHJvcGVydHlMaXN0U2VyaWFsaXphdGlvbiBkYXRhV2l0aFByb3Bl
cnR5TGlzdDpwcm9wZXJ0aWVzLmdldCgpIGZvcm1hdDpOU1Byb3BlcnR5TGlzdEJpbmFyeUZvcm1h
dF92MV8wIG9wdGlvbnM6MCBlcnJvcjpudWxscHRyXTsKLSAgICBBU1NFUlQoZGF0YSk7Ci0gICAg
Ci0gICAgYXV0byBpbnN0YW5jZSA9IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y3JlYXRl
KGhvc3RQcm94eSwgcGx1Z2luVmlldywgZnVsbEZyYW1lKTsKLSAgICB1aW50MzJfdCByZXF1ZXN0
SUQgPSBpbnN0YW5jZS0+bmV4dFJlcXVlc3RJRCgpOwotICAgIGtlcm5fcmV0dXJuX3Qga3IgPSBf
V0tQSEluc3RhbnRpYXRlUGx1Z2luKGhvc3RQcm94eS0+cG9ydCgpLCByZXF1ZXN0SUQsIHN0YXRp
Y19jYXN0PHVpbnQ4X3QqPihjb25zdF9jYXN0PHZvaWQqPihbZGF0YSBieXRlc10pKSwgW2RhdGEg
bGVuZ3RoXSwgaW5zdGFuY2UtPnBsdWdpbklEKCkpOwotICAgIGlmIChrciA9PSBNQUNIX1NFTkRf
SU5WQUxJRF9ERVNUKSB7Ci0gICAgICAgIC8vIEludmFsaWRhdGUgdGhlIGluc3RhbmNlLgotICAg
ICAgICBpbnN0YW5jZS0+aW52YWxpZGF0ZSgpOwotICAgICAgICAKLSAgICAgICAgLy8gVGhlIHBs
dWctaW4gaG9zdCBtdXN0IGhhdmUgZGllZCwgYnV0IHdlIGhhdmVuJ3QgcmVjZWl2ZWQgdGhlIGRl
YXRoIG5vdGlmaWNhdGlvbiB5ZXQuCi0gICAgICAgIHBsdWdpbkhvc3REaWVkKGhvc3RQcm94eSk7
Ci0KLSAgICAgICAgLy8gVHJ5IHRvIHNwYXduIGl0IGFnYWluLgotICAgICAgICBob3N0UHJveHkg
PSBob3N0Rm9yUGx1Z2luKHBsdWdpblBhdGgsIHBsdWdpbkFyY2hpdGVjdHVyZSwgYnVuZGxlSWRl
bnRpZmllcik7Ci0gICAgICAgIAotICAgICAgICAvLyBDcmVhdGUgYSBuZXcgaW5zdGFuY2UuCi0g
ICAgICAgIGluc3RhbmNlID0gTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpjcmVhdGUoaG9z
dFByb3h5LCBwbHVnaW5WaWV3LCBmdWxsRnJhbWUpOwotICAgICAgICByZXF1ZXN0SUQgPSBpbnN0
YW5jZS0+bmV4dFJlcXVlc3RJRCgpOwotICAgICAgICBfV0tQSEluc3RhbnRpYXRlUGx1Z2luKGhv
c3RQcm94eS0+cG9ydCgpLCByZXF1ZXN0SUQsIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihjb25zdF9j
YXN0PHZvaWQqPihbZGF0YSBieXRlc10pKSwgW2RhdGEgbGVuZ3RoXSwgaW5zdGFuY2UtPnBsdWdp
bklEKCkpOwotICAgIH0KLQotICAgIGF1dG8gcmVwbHkgPSBpbnN0YW5jZS0+d2FpdEZvclJlcGx5
PE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6SW5zdGFudGlhdGVQbHVnaW5SZXBseT4ocmVx
dWVzdElEKTsKLSAgICBpZiAoIXJlcGx5IHx8IHJlcGx5LT5tX3Jlc3VsdENvZGUgIT0gS0VSTl9T
VUNDRVNTKSB7Ci0gICAgICAgIGluc3RhbmNlLT5jbGVhbnVwKCk7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLSAgICAKLSAgICBpbnN0YW5jZS0+c2V0UmVuZGVyQ29udGV4dElEKHJl
cGx5LT5tX3JlbmRlckNvbnRleHRJRCk7Ci0gICAgaW5zdGFuY2UtPnNldFJlbmRlcmVyVHlwZShy
ZXBseS0+bV9yZW5kZXJlclR5cGUpOwotCi0gICAgcmV0dXJuIFdURk1vdmUoaW5zdGFuY2UpOwot
fQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OmNyZWF0ZVByb3BlcnR5TGlzdEZp
bGUoY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoLCBjcHVfdHlwZV90IHBsdWdpbkFyY2hpdGVjdHVy
ZSwgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKQotewotICAgIE5ldHNjYXBlUGx1Z2lu
SG9zdFByb3h5KiBob3N0UHJveHkgPSBob3N0Rm9yUGx1Z2luKHBsdWdpblBhdGgsIHBsdWdpbkFy
Y2hpdGVjdHVyZSwgYnVuZGxlSWRlbnRpZmllcik7Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIF9XS1BIQ3JlYXRlUGx1Z2luTUlNRVR5cGVzUHJlZmVyZW5jZXMo
aG9zdFByb3h5LT5wb3J0KCkpOwotfQotICAgIAotdm9pZCBOZXRzY2FwZVBsdWdpbkhvc3RNYW5h
Z2VyOjpkaWRDcmVhdGVXaW5kb3coKQotewotICAgIC8vIFNlZSBpZiBhbnkgb2Ygb3VyIGhvc3Rz
IGFyZSBpbiBmdWxsLXNjcmVlbiBtb2RlLgotICAgIFBsdWdpbkhvc3RNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1fcGx1Z2luSG9zdHMuZW5kKCk7Ci0gICAgZm9yIChQbHVnaW5Ib3N0TWFwOjppdGVyYXRv
ciBpdCA9IG1fcGx1Z2luSG9zdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBpdC0+dmFsdWU7Ci0gICAgICAg
IAotICAgICAgICBpZiAoIWhvc3RQcm94eS0+aXNNZW51QmFyVmlzaWJsZSgpKSB7Ci0gICAgICAg
ICAgICAvLyBNYWtlIG91cnNlbHZlcyB0aGUgZnJvbnQgcHJvY2Vzcy4KLSAgICAgICAgICAgIFBy
b2Nlc3NTZXJpYWxOdW1iZXIgcHNuOwotICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfQkVHSU4KLSAgICAgICAgICAgIEdldEN1cnJlbnRQcm9jZXNzKCZwc24pOwotICAg
ICAgICAgICAgU2V0RnJvbnRQcm9jZXNzKCZwc24pOwotICAgICAgICAgICAgQUxMT1dfREVQUkVD
QVRFRF9ERUNMQVJBVElPTlNfRU5ECi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKFBMVUdJTl9I
T1NUX1BST0NFU1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0
UHJveHkuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBl
UGx1Z2luSG9zdFByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkMGJhNmZk
NTBhMTQ2NjRmNGU3YmMxYzU1ZWI3N2RjOWY5ODQ5MmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9I
b3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgVVNFKFBMVUdJTl9IT1NUX1BST0NFU1MpCi0KLSNpbmNsdWRlIDxk
aXNwYXRjaC9kaXNwYXRjaC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgotCi1AY2xhc3MgV2ViUGxhY2Vob2xkZXJNb2RhbFdpbmRvdzsKLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0gICAgCi1jbGFzcyBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk7Ci0KLWNsYXNzIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5IHsKLXB1YmxpYzoKLSAgICBOZXRz
Y2FwZVBsdWdpbkhvc3RQcm94eShtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCBtYWNoX3BvcnRfdCBw
bHVnaW5Ib3N0UG9ydCwgY29uc3QgUHJvY2Vzc1NlcmlhbE51bWJlciYgcGx1Z2luSG9zdFBTTiwg
Ym9vbCBzaG91bGRDYWNoZU1pc3NpbmdQcm9wZXJ0aWVzQW5kTWV0aG9kcyk7Ci0gICAgCi0gICAg
bWFjaF9wb3J0X3QgcG9ydCgpIGNvbnN0IHsgQVNTRVJUKGZhc3RNYWxsb2NTaXplKHRoaXMpKTsg
cmV0dXJuIG1fcGx1Z2luSG9zdFBvcnQ7IH0KLSAgICBtYWNoX3BvcnRfdCBjbGllbnRQb3J0KCkg
Y29uc3QgeyBBU1NFUlQoZmFzdE1hbGxvY1NpemUodGhpcykpOyByZXR1cm4gbV9jbGllbnRQb3J0
OyB9Ci0KLSAgICB2b2lkIGFkZFBsdWdpbkluc3RhbmNlKE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eSopOwotICAgIHZvaWQgcmVtb3ZlUGx1Z2luSW5zdGFuY2UoTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5Kik7Ci0KLSAgICBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIHBsdWdpbklu
c3RhbmNlKHVpbnQzMl90IHBsdWdpbklEKTsKLQotICAgIGJvb2wgaXNNZW51QmFyVmlzaWJsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbWVudUJhcklzVmlzaWJsZTsgfQotICAgIHZvaWQgc2V0TWVudUJh
clZpc2libGUoYm9vbCk7Ci0KLSAgICBib29sIGlzRnVsbHNjcmVlbldpbmRvd1Nob3dpbmcoKSBj
b25zdCB7IHJldHVybiBtX2Z1bGxzY3JlZW5XaW5kb3dJc1Nob3dpbmc7IH0KLSAgICB2b2lkIHNl
dEZ1bGxzY3JlZW5XaW5kb3dJc1Nob3dpbmcoYm9vbCk7Ci0KLSAgICB2b2lkIHNldE1vZGFsKGJv
b2wpOwotCi0gICAgdm9pZCBhcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpOwotICAgIAotICAg
IGJvb2wgcHJvY2Vzc1JlcXVlc3RzKCk7Ci0gICAgc3RhdGljIGJvb2wgaXNQcm9jZXNzaW5nUmVx
dWVzdHMoKSB7IHJldHVybiBzX3Byb2Nlc3NpbmdSZXF1ZXN0czsgfQotICAgIAotICAgIGJvb2wg
c2hvdWxkQ2FjaGVNaXNzaW5nUHJvcGVydGllc0FuZE1ldGhvZHMoKSBjb25zdCB7IHJldHVybiBt
X3Nob3VsZENhY2hlTWlzc2luZ1Byb3BlcnRpZXNBbmRNZXRob2RzOyB9Ci0KLSAgICBzdGF0aWMg
dm9pZCBtYWtlQ3VycmVudFByb2Nlc3NGcm9udFByb2Nlc3MoKTsKLSAgICB2b2lkIG1ha2VQbHVn
aW5Ib3N0UHJvY2Vzc0Zyb250UHJvY2VzcygpIGNvbnN0OwotICAgIGJvb2wgaXNQbHVnaW5Ib3N0
UHJvY2Vzc0Zyb250UHJvY2VzcygpIGNvbnN0OwotCi1wcml2YXRlOgotCi0gICAgfk5ldHNjYXBl
UGx1Z2luSG9zdFByb3h5KCk7Ci0gICAgdm9pZCBwbHVnaW5Ib3N0RGllZCgpOwotCi0gICAgdm9p
ZCBiZWdpbk1vZGFsKCk7Ci0gICAgdm9pZCBlbmRNb2RhbCgpOwotCi0gICAgdm9pZCBkaWRFbnRl
ckZ1bGxzY3JlZW4oKSBjb25zdDsKLSAgICB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKCkgY29uc3Q7
Ci0KLSAgICBzdGF0aWMgdm9pZCBkZWFkTmFtZU5vdGlmaWNhdGlvbkNhbGxiYWNrKENGTWFjaFBv
cnRSZWYsIHZvaWQgKm1zZywgQ0ZJbmRleCBzaXplLCB2b2lkICppbmZvKTsKLQotICAgIHR5cGVk
ZWYgSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRyPE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eT4+
IFBsdWdpbkluc3RhbmNlTWFwOwotICAgIFBsdWdpbkluc3RhbmNlTWFwIG1faW5zdGFuY2VzOwot
ICAgIAotICAgIG1hY2hfcG9ydF90IG1fY2xpZW50UG9ydCB7IE1BQ0hfUE9SVF9OVUxMIH07Ci0g
ICAgbWFjaF9wb3J0X3QgbV9wb3J0U2V0IHsgTUFDSF9QT1JUX05VTEwgfTsKLSAgICAKLSAgICBS
ZXRhaW5QdHI8Q0ZSdW5Mb29wU291cmNlUmVmPiBtX2NsaWVudFBvcnRTb3VyY2U7Ci0gICAgbWFj
aF9wb3J0X3QgbV9wbHVnaW5Ib3N0UG9ydCB7IE1BQ0hfUE9SVF9OVUxMIH07Ci0gICAgUmV0YWlu
UHRyPENGTWFjaFBvcnRSZWY+IG1fZGVhZE5hbWVOb3RpZmljYXRpb25Qb3J0OwotICAgIAotICAg
IFJldGFpblB0cjxpZD4gbV9hY3RpdmF0aW9uT2JzZXJ2ZXI7Ci0gICAgUmV0YWluUHRyPFdlYlBs
YWNlaG9sZGVyTW9kYWxXaW5kb3c+IG1fcGxhY2Vob2xkZXJXaW5kb3c7Ci0gICAgdW5zaWduZWQg
bV9pc01vZGFsOwotICAgIGJvb2wgbV9tZW51QmFySXNWaXNpYmxlOwotICAgIGJvb2wgbV9mdWxs
c2NyZWVuV2luZG93SXNTaG93aW5nOwotICAgIGNvbnN0IFByb2Nlc3NTZXJpYWxOdW1iZXIgbV9w
bHVnaW5Ib3N0UFNOOwotCi0gICAgc3RhdGljIHVuc2lnbmVkIHNfcHJvY2Vzc2luZ1JlcXVlc3Rz
OwotCi0gICAgYm9vbCBtX3Nob3VsZENhY2hlTWlzc2luZ1Byb3BlcnRpZXNBbmRNZXRob2RzOwot
fTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKFBMVUdJTl9I
T1NUX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5z
L0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA0ZjZmYWQ5MWQ1MmFmZTU0MDk4ODIzZjgyN2VlOTQ2MDU1MGY1
MTc0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5
Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsMTE5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmIFVTRShQTFVHSU5fSE9TVF9QUk9D
RVNTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2ltcG9ydCAiTmV0c2NhcGVQ
bHVnaW5Ib3N0UHJveHkuaCIKLQotI2ltcG9ydCA8bWFjaC9tYWNoLmg+Ci0jaW1wb3J0IDx3dGYv
U3RkTGliRXh0cmFzLmg+Ci0KLSNpbXBvcnQgIkhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtLmgi
Ci0jaW1wb3J0ICJOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLmgiCi0jaW1wb3J0ICJOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHkuaCIKLSNpbXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIKLSNp
bXBvcnQgIldlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5oIgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSWRlbnRpZmllcklubGluZXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ29tbW9uVk0uaD4K
LSNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSWRlbnRpZmllclJl
cC5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3JpcHRDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxwYWwv
c3BpL21hYy9ISVNlcnZpY2VzU1BJLmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
LQotZXh0ZXJuICJDIiB7Ci0jaW1wb3J0ICJXZWJLaXRQbHVnaW5Ib3N0LmgiCi0jaW1wb3J0ICJX
ZWJLaXRQbHVnaW5DbGllbnRTZXJ2ZXIuaCIKLX0KLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLXVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1AaW50ZXJmYWNlIFdlYlBsYWNlaG9sZGVyTW9kYWxX
aW5kb3cgOiBOU1dpbmRvdyAKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYlBsYWNlaG9sZGVy
TW9kYWxXaW5kb3cKLS8vIFByZXZlbnQgTlNBcHAgZnJvbSBjYWxsaW5nIHJlcXVlc3RVc2VyQXR0
ZW50aW9uOiB3aGVuIHRoZSB3aW5kb3cgaXMgc2hvd24gCi0vLyBtb2RhbGx5LCBldmVuIGlmIHRo
ZSBhcHAgaXMgaW5hY3RpdmUuIFNlZSA2ODIzMDQ5LgotLSAoQk9PTClfd2FudHNVc2VyQXR0ZW50
aW9uCi17Ci0gICAgcmV0dXJuIE5POyAgIAotfQotQGVuZAotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgUGx1Z2luRGVzdHJveURlZmVycmVyIHsKLXB1YmxpYzoKLSAgICBQbHVnaW5EZXN0
cm95RGVmZXJyZXIoTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBwcm94eSkKLSAgICAgICAg
OiBtX3Byb3h5KHByb3h5KQotICAgIHsKLSAgICAgICAgbV9wcm94eS0+d2lsbENhbGxQbHVnaW5G
dW5jdGlvbigpOwotICAgIH0KLSAgICAKLSAgICB+UGx1Z2luRGVzdHJveURlZmVycmVyKCkKLSAg
ICB7Ci0gICAgICAgIGJvb2wgc3RvcHBlZDsKLSAgICAgICAgbV9wcm94eS0+ZGlkQ2FsbFBsdWdp
bkZ1bmN0aW9uKHN0b3BwZWQpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8TmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5PiBtX3Byb3h5OwotfTsKLQotdHlwZWRlZiBIYXNoTWFwPG1h
Y2hfcG9ydF90LCBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSo+IFBsdWdpblByb3h5TWFwOwotc3Rh
dGljIFBsdWdpblByb3h5TWFwJiBwbHVnaW5Qcm94eU1hcCgpCi17Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFBsdWdpblByb3h5TWFwPiBwbHVnaW5Qcm94eU1hcDsKLSAgICByZXR1cm4gcGx1
Z2luUHJveHlNYXA7Ci19Ci0KLXVuc2lnbmVkIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5OjpzX3By
b2Nlc3NpbmdSZXF1ZXN0czsKLQotTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHk6Ok5ldHNjYXBlUGx1
Z2luSG9zdFByb3h5KG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIG1hY2hfcG9ydF90IHBsdWdpbkhv
c3RQb3J0LCBjb25zdCBQcm9jZXNzU2VyaWFsTnVtYmVyJiBwbHVnaW5Ib3N0UFNOLCBib29sIHNo
b3VsZENhY2hlTWlzc2luZ1Byb3BlcnRpZXNBbmRNZXRob2RzKQotICAgIDogbV9jbGllbnRQb3J0
KGNsaWVudFBvcnQpCi0gICAgLCBtX3BsdWdpbkhvc3RQb3J0KHBsdWdpbkhvc3RQb3J0KQotICAg
ICwgbV9pc01vZGFsKGZhbHNlKQotICAgICwgbV9tZW51QmFySXNWaXNpYmxlKHRydWUpCi0gICAg
LCBtX2Z1bGxzY3JlZW5XaW5kb3dJc1Nob3dpbmcoZmFsc2UpCi0gICAgLCBtX3BsdWdpbkhvc3RQ
U04ocGx1Z2luSG9zdFBTTikKLSAgICAsIG1fc2hvdWxkQ2FjaGVNaXNzaW5nUHJvcGVydGllc0Fu
ZE1ldGhvZHMoc2hvdWxkQ2FjaGVNaXNzaW5nUHJvcGVydGllc0FuZE1ldGhvZHMpCi17Ci0gICAg
QVNTRVJUKE1BQ0hfUE9SVF9WQUxJRChtX2NsaWVudFBvcnQpKTsKLSAgICBBU1NFUlQoTUFDSF9Q
T1JUX1ZBTElEKG1fcGx1Z2luSG9zdFBvcnQpKTsKLQotICAgIHBsdWdpblByb3h5TWFwKCkuYWRk
KG1fY2xpZW50UG9ydCwgdGhpcyk7Ci0gICAgCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCB1c2Ug
bGliZGlzcGF0Y2ggZm9yIHRoaXMuCi0gICAgQ0ZNYWNoUG9ydENvbnRleHQgY29udGV4dCA9IHsg
MCwgdGhpcywgMCwgMCwgMCB9OwotICAgIG1fZGVhZE5hbWVOb3RpZmljYXRpb25Qb3J0ID0gYWRv
cHRDRihDRk1hY2hQb3J0Q3JlYXRlKDAsIGRlYWROYW1lTm90aWZpY2F0aW9uQ2FsbGJhY2ssICZj
b250ZXh0LCAwKSk7Ci0KLSAgICBtYWNoX3BvcnRfdCBwcmV2aW91cyA9IE1BQ0hfUE9SVF9OVUxM
OwotICAgIGF1dG8ga3IgPSBtYWNoX3BvcnRfcmVxdWVzdF9ub3RpZmljYXRpb24obWFjaF90YXNr
X3NlbGYoKSwgcGx1Z2luSG9zdFBvcnQsIE1BQ0hfTk9USUZZX0RFQURfTkFNRSwgMCwKLSAgICAg
ICAgQ0ZNYWNoUG9ydEdldFBvcnQobV9kZWFkTmFtZU5vdGlmaWNhdGlvblBvcnQuZ2V0KCkpLCBN
QUNIX01TR19UWVBFX01BS0VfU0VORF9PTkNFLCAmcHJldmlvdXMpOwotICAgIEFTU0VSVChwcmV2
aW91cyA9PSBNQUNIX1BPUlRfTlVMTCk7Ci0gICAgQVNTRVJUKGtyID09IEtFUk5fU1VDQ0VTUyk7
Ci0gICAgaWYgKGtyICE9IEtFUk5fU1VDQ0VTUykgewotICAgICAgICAvLyBJZiBtYWNoX3BvcnRf
cmVxdWVzdF9ub3RpZmljYXRpb24gZmFpbHMsICdwcmV2aW91cycgd2lsbCBiZSB1bmluaXRpYWxp
emVkLgotICAgICAgICBMT0dfRVJST1IoIm1hY2hfcG9ydF9yZXF1ZXN0X25vdGlmaWNhdGlvbiBm
YWlsZWQ6ICgleCkgJXMiLCBrciwgbWFjaF9lcnJvcl9zdHJpbmcoa3IpKTsKLSAgICAgICAgcHJl
dmlvdXMgPSBNQUNIX1BPUlRfTlVMTDsKLSAgICB9Ci0KLSAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29w
U291cmNlUmVmPiBkZWF0aFBvcnRTb3VyY2UgPSBhZG9wdENGKENGTWFjaFBvcnRDcmVhdGVSdW5M
b29wU291cmNlKDAsIG1fZGVhZE5hbWVOb3RpZmljYXRpb25Qb3J0LmdldCgpLCAwKSk7Ci0gICAg
Ci0gICAgQ0ZSdW5Mb29wQWRkU291cmNlKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgZGVhdGhQb3J0
U291cmNlLmdldCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwotICAgIAotICAgIG1fY2xpZW50
UG9ydFNvdXJjZSA9IGFkb3B0Q0YoTVNIQ3JlYXRlTUlHU2VydmVyU291cmNlKG51bGxwdHIsIDAs
IHJlaW50ZXJwcmV0X2Nhc3Q8bWlnX3N1YnN5c3RlbV90Pihjb25zdF9jYXN0PHN0cnVjdCBXS1dl
YktpdFBsdWdpbkNsaWVudF9zdWJzeXN0ZW0qPigmV0tXZWJLaXRQbHVnaW5DbGllbnRfc3Vic3lz
dGVtKSksIGtNU0hEb05vdENyZWF0ZVNlbmRSaWdodE9wdGlvbiwgbV9jbGllbnRQb3J0LCBudWxs
cHRyKSk7Ci0gICAgQ0ZSdW5Mb29wQWRkU291cmNlKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgbV9j
bGllbnRQb3J0U291cmNlLmdldCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwotICAgIENGUnVu
TG9vcEFkZFNvdXJjZShDRlJ1bkxvb3BHZXRDdXJyZW50KCksIG1fY2xpZW50UG9ydFNvdXJjZS5n
ZXQoKSwgKENGU3RyaW5nUmVmKU5TRXZlbnRUcmFja2luZ1J1bkxvb3BNb2RlKTsKLX0KLQotTmV0
c2NhcGVQbHVnaW5Ib3N0UHJveHk6On5OZXRzY2FwZVBsdWdpbkhvc3RQcm94eSgpCi17Ci0gICAg
cGx1Z2luUHJveHlNYXAoKS5yZW1vdmUobV9jbGllbnRQb3J0KTsKLQotICAgIGlmIChtX3BvcnRT
ZXQpIHsKLSAgICAgICAgbWFjaF9wb3J0X2V4dHJhY3RfbWVtYmVyKG1hY2hfdGFza19zZWxmKCks
IG1fY2xpZW50UG9ydCwgbV9wb3J0U2V0KTsKLSAgICAgICAgbWFjaF9wb3J0X2V4dHJhY3RfbWVt
YmVyKG1hY2hfdGFza19zZWxmKCksIENGTWFjaFBvcnRHZXRQb3J0KG1fZGVhZE5hbWVOb3RpZmlj
YXRpb25Qb3J0LmdldCgpKSwgbV9wb3J0U2V0KTsKLSAgICAgICAgbWFjaF9wb3J0X21vZF9yZWZz
KG1hY2hfdGFza19zZWxmKCksIG1fcG9ydFNldCwgTUFDSF9QT1JUX1JJR0hUX1BPUlRfU0VULCAt
MSk7Ci0gICAgICAgIG1fcG9ydFNldCA9IE1BQ0hfUE9SVF9OVUxMOwotICAgIH0KLSAgICAKLSAg
ICBBU1NFUlQobV9jbGllbnRQb3J0U291cmNlKTsKLSAgICBDRlJ1bkxvb3BTb3VyY2VJbnZhbGlk
YXRlKG1fY2xpZW50UG9ydFNvdXJjZS5nZXQoKSk7Ci0gICAgbV9jbGllbnRQb3J0U291cmNlID0g
MDsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eTo6cGx1Z2luSG9zdERpZWQoKQot
ewotICAgIFBsdWdpbkluc3RhbmNlTWFwIGluc3RhbmNlczsgICAgCi0gICAgbV9pbnN0YW5jZXMu
c3dhcChpbnN0YW5jZXMpOwotICAKLSAgICBQbHVnaW5JbnN0YW5jZU1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gaW5zdGFuY2VzLmVuZCgpOwotICAgIGZvciAoUGx1Z2luSW5zdGFuY2VNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gaW5zdGFuY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgaXQtPnZhbHVlLT5wbHVnaW5Ib3N0RGllZCgpOwotICAgIAotICAgIE5ldHNjYXBlUGx1
Z2luSG9zdE1hbmFnZXI6OnNpbmdsZXRvbigpLnBsdWdpbkhvc3REaWVkKHRoaXMpOwotICAgIAot
ICAgIC8vIFRoZSBwbHVnLWluIGNyYXNoZWQgd2hpbGUgaXRzIG1lbnUgYmFyIHdhcyBoaWRkZW4u
IE1ha2Ugc3VyZSB0byBzaG93IGl0LgotICAgIGlmICghbV9tZW51QmFySXNWaXNpYmxlKQotICAg
ICAgICBzZXRNZW51QmFyVmlzaWJsZSh0cnVlKTsKLQotICAgIC8vIFRoZSBwbHVnLWluIGNyYXNo
ZWQgd2hpbGUgaXQgaGFkIGEgbW9kYWwgZGlhbG9nIHVwLgotICAgIGlmIChtX2lzTW9kYWwpCi0g
ICAgICAgIGVuZE1vZGFsKCk7Ci0gICAgCi0gICAgZGVsZXRlIHRoaXM7Ci19Ci0gICAgCi12b2lk
IE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5OjphZGRQbHVnaW5JbnN0YW5jZShOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHkqIGluc3RhbmNlKQotewotICAgIEFTU0VSVCghbV9pbnN0YW5jZXMuY29u
dGFpbnMoaW5zdGFuY2UtPnBsdWdpbklEKCkpKTsKLSAgICAKLSAgICBtX2luc3RhbmNlcy5zZXQo
aW5zdGFuY2UtPnBsdWdpbklEKCksIGluc3RhbmNlKTsKLX0KLSAgICAKLXZvaWQgTmV0c2NhcGVQ
bHVnaW5Ib3N0UHJveHk6OnJlbW92ZVBsdWdpbkluc3RhbmNlKE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eSogaW5zdGFuY2UpCi17Ci0gICAgQVNTRVJUKG1faW5zdGFuY2VzLmdldChpbnN0YW5j
ZS0+cGx1Z2luSUQoKSkgPT0gaW5zdGFuY2UpOwotCi0gICAgbV9pbnN0YW5jZXMucmVtb3ZlKGlu
c3RhbmNlLT5wbHVnaW5JRCgpKTsKLX0KLQotTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBO
ZXRzY2FwZVBsdWdpbkhvc3RQcm94eTo6cGx1Z2luSW5zdGFuY2UodWludDMyX3QgcGx1Z2luSUQp
Ci17Ci0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiByZXN1bHQgPSBtX2luc3RhbmNl
cy5nZXQocGx1Z2luSUQpOwotICAgIEFTU0VSVCghcmVzdWx0IHx8IHJlc3VsdC0+aG9zdFByb3h5
KCkgPT0gdGhpcyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdp
bkhvc3RQcm94eTo6ZGVhZE5hbWVOb3RpZmljYXRpb25DYWxsYmFjayhDRk1hY2hQb3J0UmVmIHBv
cnQsIHZvaWQgKm1zZywgQ0ZJbmRleCBzaXplLCB2b2lkICppbmZvKQotewotICAgIEFTU0VSVCht
c2cpOwotICAgIEFTU0VSVChzdGF0aWNfY2FzdDxtYWNoX21zZ19oZWFkZXJfdCo+KG1zZyktPm1z
Z2hfaWQgPT0gTUFDSF9OT1RJRllfREVBRF9OQU1FKTsKLSAgICAKLSAgICBzdGF0aWNfY2FzdDxO
ZXRzY2FwZVBsdWdpbkhvc3RQcm94eSo+KGluZm8pLT5wbHVnaW5Ib3N0RGllZCgpOwotfQotCi12
b2lkIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5OjpzZXRNZW51QmFyVmlzaWJsZShib29sIHZpc2li
bGUpCi17Ci0gICAgbV9tZW51QmFySXNWaXNpYmxlID0gdmlzaWJsZTsKLQotICAgIFtOU01lbnUg
c2V0TWVudUJhclZpc2libGU6dmlzaWJsZV07Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5Ib3N0
UHJveHk6OmRpZEVudGVyRnVsbHNjcmVlbigpIGNvbnN0Ci17Ci0gICAgbWFrZVBsdWdpbkhvc3RQ
cm9jZXNzRnJvbnRQcm9jZXNzKCk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHk6
OmRpZEV4aXRGdWxsc2NyZWVuKCkgY29uc3QKLXsKLSAgICAvLyBJZiB0aGUgcGx1Zy1pbiBob3N0
IGlzIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIHRoZW4gd2Ugc2hvdWxkIGJyaW5nIG91cnNlbHZl
cyB0byB0aGUgZnJvbnQgd2hlbiBpdCBleGl0cyBmdWxsLXNjcmVlbiBtb2RlLgotICAgIGlmIChp
c1BsdWdpbkhvc3RQcm9jZXNzRnJvbnRQcm9jZXNzKCkpCi0gICAgICAgIG1ha2VDdXJyZW50UHJv
Y2Vzc0Zyb250UHJvY2VzcygpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5Ojpz
ZXRGdWxsc2NyZWVuV2luZG93SXNTaG93aW5nKGJvb2wgaXNTaG93aW5nKQotewotICAgIGlmICht
X2Z1bGxzY3JlZW5XaW5kb3dJc1Nob3dpbmcgPT0gaXNTaG93aW5nKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2Z1bGxzY3JlZW5XaW5kb3dJc1Nob3dpbmcgPSBpc1Nob3dpbmc7Ci0gICAgaWYg
KG1fZnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZykKLSAgICAgICAgZGlkRW50ZXJGdWxsc2NyZWVu
KCk7Ci0gICAgZWxzZQotICAgICAgICBkaWRFeGl0RnVsbHNjcmVlbigpOwotCi19Ci0KLXZvaWQg
TmV0c2NhcGVQbHVnaW5Ib3N0UHJveHk6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCkKLXsK
LSAgICBtYWtlUGx1Z2luSG9zdFByb2Nlc3NGcm9udFByb2Nlc3MoKTsKLX0KLQotdm9pZCBOZXRz
Y2FwZVBsdWdpbkhvc3RQcm94eTo6YmVnaW5Nb2RhbCgpCi17Ci0gICAgQVNTRVJUKCFtX3BsYWNl
aG9sZGVyV2luZG93KTsKLSAgICBBU1NFUlQoIW1fYWN0aXZhdGlvbk9ic2VydmVyKTsKLSAgICAK
LSAgICBtX3BsYWNlaG9sZGVyV2luZG93ID0gYWRvcHROUyhbW1dlYlBsYWNlaG9sZGVyTW9kYWxX
aW5kb3cgYWxsb2NdIGluaXRXaXRoQ29udGVudFJlY3Q6TlNNYWtlUmVjdCgwLCAwLCAxLCAxKSBz
dHlsZU1hc2s6TlNXaW5kb3dTdHlsZU1hc2tCb3JkZXJsZXNzIGJhY2tpbmc6TlNCYWNraW5nU3Rv
cmVCdWZmZXJlZCBkZWZlcjpZRVNdKTsKLQotICAgIG1fYWN0aXZhdGlvbk9ic2VydmVyID0gW1tO
U05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlckZvck5hbWU6TlNB
cHBsaWNhdGlvbldpbGxCZWNvbWVBY3RpdmVOb3RpZmljYXRpb24gb2JqZWN0Ok5TQXBwIHF1ZXVl
Om5pbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVzaW5nQmxvY2s6XihOU05vdGlmaWNhdGlvbiAqKXsgYXBw
bGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKTsgfV07Ci0gICAgCi0gICAgLy8gV2UgbmVlZCB0byBi
ZSBhYmxlIHRvIGdldCB0aGUgc2V0TW9kYWwoZmFsc2UpIGNhbGwgZnJvbSB0aGUgcGx1Zy1pbiBo
b3N0LgotICAgIENGUnVuTG9vcEFkZFNvdXJjZShDRlJ1bkxvb3BHZXRDdXJyZW50KCksIG1fY2xp
ZW50UG9ydFNvdXJjZS5nZXQoKSwgKENGU3RyaW5nUmVmKU5TTW9kYWxQYW5lbFJ1bkxvb3BNb2Rl
KTsKLSAgICAKLSAgICBbTlNBcHAgcnVuTW9kYWxGb3JXaW5kb3c6bV9wbGFjZWhvbGRlcldpbmRv
dy5nZXQoKV07Ci0gICAgCi0gICAgW21fcGxhY2Vob2xkZXJXaW5kb3cuZ2V0KCkgb3JkZXJPdXQ6
bmlsXTsKLSAgICBtX3BsYWNlaG9sZGVyV2luZG93ID0gMDsKLX0KLSAgICAKLXZvaWQgTmV0c2Nh
cGVQbHVnaW5Ib3N0UHJveHk6OmVuZE1vZGFsKCkKLXsKLSAgICBBU1NFUlQobV9wbGFjZWhvbGRl
cldpbmRvdyk7Ci0gICAgQVNTRVJUKG1fYWN0aXZhdGlvbk9ic2VydmVyKTsKLSAgICAKLSAgICBb
W05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fYWN0
aXZhdGlvbk9ic2VydmVyLmdldCgpXTsKLSAgICBtX2FjdGl2YXRpb25PYnNlcnZlciA9IG5pbDsK
LSAgICAKLSAgICBDRlJ1bkxvb3BSZW1vdmVTb3VyY2UoQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBt
X2NsaWVudFBvcnRTb3VyY2UuZ2V0KCksIChDRlN0cmluZ1JlZilOU01vZGFsUGFuZWxSdW5Mb29w
TW9kZSk7Ci0gICAgCi0gICAgW05TQXBwIHN0b3BNb2RhbF07Ci0KLSAgICBtYWtlQ3VycmVudFBy
b2Nlc3NGcm9udFByb2Nlc3MoKTsKLX0KLQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5
OjpzZXRNb2RhbChib29sIG1vZGFsKQotewotICAgIGlmIChtb2RhbCA9PSBtX2lzTW9kYWwpIAot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9pc01vZGFsID0gbW9kYWw7Ci0gICAgCi0gICAg
aWYgKG1faXNNb2RhbCkKLSAgICAgICAgYmVnaW5Nb2RhbCgpOwotICAgIGVsc2UKLSAgICAgICAg
ZW5kTW9kYWwoKTsKLX0KLSAgICAKLWJvb2wgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHk6OnByb2Nl
c3NSZXF1ZXN0cygpCi17Ci0gICAgc19wcm9jZXNzaW5nUmVxdWVzdHMrKzsKLQotICAgIGlmICgh
bV9wb3J0U2V0KSB7Ci0gICAgICAgIGF1dG8ga3IgPSBtYWNoX3BvcnRfYWxsb2NhdGUobWFjaF90
YXNrX3NlbGYoKSwgTUFDSF9QT1JUX1JJR0hUX1BPUlRfU0VULCAmbV9wb3J0U2V0KTsKLSAgICAg
ICAgaWYgKGtyICE9IEtFUk5fU1VDQ0VTUykgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3Vs
ZCBub3QgYWxsb2NhdGUgbWFjaCBwb3J0LCBlcnJvciAleDogJXMiLCBrciwgbWFjaF9lcnJvcl9z
dHJpbmcoa3IpKTsKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbWFj
aF9wb3J0X2luc2VydF9tZW1iZXIobWFjaF90YXNrX3NlbGYoKSwgbV9jbGllbnRQb3J0LCBtX3Bv
cnRTZXQpOwotICAgICAgICBtYWNoX3BvcnRfaW5zZXJ0X21lbWJlcihtYWNoX3Rhc2tfc2VsZigp
LCBDRk1hY2hQb3J0R2V0UG9ydChtX2RlYWROYW1lTm90aWZpY2F0aW9uUG9ydC5nZXQoKSksIG1f
cG9ydFNldCk7Ci0gICAgfQotICAgIAotICAgIGNoYXIgYnVmZmVyWzQwOTZdOwotICAgIAotICAg
IG1hY2hfbXNnX2hlYWRlcl90KiBtc2cgPSByZWludGVycHJldF9jYXN0PG1hY2hfbXNnX2hlYWRl
cl90Kj4oYnVmZmVyKTsKLSAgICAKLSAgICBrZXJuX3JldHVybl90IGtyID0gbWFjaF9tc2cobXNn
LCBNQUNIX1JDVl9NU0csIDAsIHNpemVvZihidWZmZXIpLCBtX3BvcnRTZXQsIDAsIE1BQ0hfUE9S
VF9OVUxMKTsKLSAgICAKLSAgICBpZiAoa3IgIT0gS0VSTl9TVUNDRVNTKSB7Ci0gICAgICAgIExP
R19FUlJPUigiQ291bGQgbm90IHJlY2VpdmUgbWFjaCBtZXNzYWdlLCBlcnJvciAleDogJXMiLCBr
ciwgbWFjaF9lcnJvcl9zdHJpbmcoa3IpKTsKLSAgICAgICAgc19wcm9jZXNzaW5nUmVxdWVzdHMt
LTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBpZiAobXNnLT5tc2do
X2xvY2FsX3BvcnQgPT0gbV9jbGllbnRQb3J0KSB7Ci0gICAgICAgIF9fUmVwbHlVbmlvbl9fV0tX
ZWJLaXRQbHVnaW5DbGllbnRfc3Vic3lzdGVtIHJlcGx5OwotICAgICAgICBtYWNoX21zZ19oZWFk
ZXJfdCogcmVwbHlIZWFkZXIgPSByZWludGVycHJldF9jYXN0PG1hY2hfbXNnX2hlYWRlcl90Kj4o
JnJlcGx5KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChXZWJLaXRQbHVnaW5DbGllbnRfc2VydmVy
KG1zZywgcmVwbHlIZWFkZXIpICYmIE1BQ0hfUE9SVF9WQUxJRChyZXBseUhlYWRlci0+bXNnaF9y
ZW1vdGVfcG9ydCkpIHsKLSAgICAgICAgICAgIGtyID0gbWFjaF9tc2cocmVwbHlIZWFkZXIsIE1B
Q0hfU0VORF9NU0csIHJlcGx5SGVhZGVyLT5tc2doX3NpemUsIDAsIE1BQ0hfUE9SVF9OVUxMLCAw
LCBNQUNIX1BPUlRfTlVMTCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChrciAhPSBL
RVJOX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBzZW5k
IG1hY2ggbWVzc2FnZSwgZXJyb3IgJXg6ICVzIiwga3IsIG1hY2hfZXJyb3Jfc3RyaW5nKGtyKSk7
Ci0gICAgICAgICAgICAgICAgc19wcm9jZXNzaW5nUmVxdWVzdHMtLTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIHNfcHJvY2Vzc2luZ1JlcXVlc3RzLS07Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICAKLSAgICBpZiAobXNnLT5tc2doX2xvY2FsX3BvcnQgPT0gQ0ZNYWNoUG9ydEdldFBvcnQo
bV9kZWFkTmFtZU5vdGlmaWNhdGlvblBvcnQuZ2V0KCkpKSB7Ci0gICAgICAgIEFTU0VSVChtc2ct
Pm1zZ2hfaWQgPT0gTUFDSF9OT1RJRllfREVBRF9OQU1FKTsKLSAgICAgICAgcGx1Z2luSG9zdERp
ZWQoKTsKLSAgICAgICAgc19wcm9jZXNzaW5nUmVxdWVzdHMtLTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBzX3Byb2Nl
c3NpbmdSZXF1ZXN0cy0tOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBOZXRzY2FwZVBs
dWdpbkhvc3RQcm94eTo6bWFrZUN1cnJlbnRQcm9jZXNzRnJvbnRQcm9jZXNzKCkKLXsKLSAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIFByb2Nlc3NTZXJpYWxOdW1i
ZXIgcHNuOwotICAgIEdldEN1cnJlbnRQcm9jZXNzKCZwc24pOwotICAgIFNldEZyb250UHJvY2Vz
cygmcHNuKTsKLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLX0KLQotdm9p
ZCBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eTo6bWFrZVBsdWdpbkhvc3RQcm9jZXNzRnJvbnRQcm9j
ZXNzKCkgY29uc3QKLXsKLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgot
ICAgIFNldEZyb250UHJvY2VzcygmbV9wbHVnaW5Ib3N0UFNOKTsKLSAgICBBTExPV19ERVBSRUNB
VEVEX0RFQ0xBUkFUSU9OU19FTkQKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eTo6
aXNQbHVnaW5Ib3N0UHJvY2Vzc0Zyb250UHJvY2VzcygpIGNvbnN0Ci17Ci0gICAgQUxMT1dfREVQ
UkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBQcm9jZXNzU2VyaWFsTnVtYmVyIGZyb250
UHJvY2VzczsKLSAgICBHZXRGcm9udFByb2Nlc3MoJmZyb250UHJvY2Vzcyk7Ci0KLSAgICBCb29s
ZWFuIGlzU2FtZVByb2Nlc3MgPSAwOwotICAgIFNhbWVQcm9jZXNzKCZmcm9udFByb2Nlc3MsICZt
X3BsdWdpbkhvc3RQU04sICZpc1NhbWVQcm9jZXNzKTsKLSAgICBBTExPV19ERVBSRUNBVEVEX0RF
Q0xBUkFUSU9OU19FTkQKLQotICAgIHJldHVybiBpc1NhbWVQcm9jZXNzOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQotLy8gSGVscGVyIGNs
YXNzIGZvciBkZWFsbG9jYXRpbmcgZGF0YQotY2xhc3MgRGF0YURlYWxsb2NhdG9yIHsKLXB1Ymxp
YzoKLSAgICBEYXRhRGVhbGxvY2F0b3IoZGF0YV90IGRhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVy
X3QgZGF0YUxlbmd0aCkKLSAgICAgICAgOiBtX2RhdGEocmVpbnRlcnByZXRfY2FzdDx2bV9hZGRy
ZXNzX3Q+KGRhdGEpKQotICAgICAgICAsIG1fZGF0YUxlbmd0aChkYXRhTGVuZ3RoKQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgfkRhdGFEZWFsbG9jYXRvcigpCi0gICAgewotICAgICAgICBpZiAo
IW1fZGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIHZtX2RlYWxs
b2NhdGUobWFjaF90YXNrX3NlbGYoKSwgbV9kYXRhLCBtX2RhdGFMZW5ndGgpOwotICAgIH0KLSAg
ICAKLXByaXZhdGU6Ci0gICAgdm1fYWRkcmVzc190IG1fZGF0YTsKLSAgICB2bV9zaXplX3QgbV9k
YXRhTGVuZ3RoOwotfTsKLQotLy8gTWlHIGNhbGxiYWNrcwota2Vybl9yZXR1cm5fdCBXS1BDU3Rh
dHVzVGV4dChtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJfdCBwbHVnaW5JRCwgZGF0YV90
IHRleHQsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgdGV4dENudCkKLXsKLSAgICBBU1NFUlQoTUFD
SF9QT1JUX1ZBTElEKGNsaWVudFBvcnQpKTsKLQotICAgIERhdGFEZWFsbG9jYXRvciBkZWFsbG9j
YXRvcih0ZXh0LCB0ZXh0Q250KTsKLSAgICAKLSAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSog
aG9zdFByb3h5ID0gcGx1Z2luUHJveHlNYXAoKS5nZXQoY2xpZW50UG9ydCk7Ci0gICAgaWYgKCFo
b3N0UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAgTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZVByb3h5ID0gaG9zdFByb3h5LT5wbHVnaW5J
bnN0YW5jZShwbHVnaW5JRCk7Ci0gICAgaWYgKCFpbnN0YW5jZVByb3h5KQotICAgICAgICByZXR1
cm4gS0VSTl9GQUlMVVJFOwotICAgIAotICAgIGluc3RhbmNlUHJveHktPnN0YXR1cyh0ZXh0KTsK
LSAgICByZXR1cm4gS0VSTl9TVUNDRVNTOwotfQotCi1rZXJuX3JldHVybl90IFdLUENMb2FkVVJM
KG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQzMl90IHBsdWdpbklELCBkYXRhX3QgdXJsLCBt
YWNoX21zZ190eXBlX251bWJlcl90IHVybExlbmd0aCwgZGF0YV90IHRhcmdldCwgbWFjaF9tc2df
dHlwZV9udW1iZXJfdCB0YXJnZXRMZW5ndGgsIAotICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhX3QgcG9zdERhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgcG9zdERhdGFMZW5ndGgsIHVp
bnQzMl90IGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCogb3V0UmVz
dWx0LCB1aW50MzJfdCogb3V0U3RyZWFtSUQpCi17Ci0gICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJ
RChjbGllbnRQb3J0KSk7Ci0KLSAgICBEYXRhRGVhbGxvY2F0b3IgdXJsRGVhbGxvY2F0b3IodXJs
LCB1cmxMZW5ndGgpOwotICAgIERhdGFEZWFsbG9jYXRvciB0YXJnZXREZWFsbG9jYXRvcih0YXJn
ZXQsIHRhcmdldExlbmd0aCk7Ci0gICAgRGF0YURlYWxsb2NhdG9yIHBvc3REYXRhRGVhbGxvY2F0
b3IocG9zdERhdGEsIHBvc3REYXRhTGVuZ3RoKTsKLQotICAgIE5ldHNjYXBlUGx1Z2luSG9zdFBy
b3h5KiBob3N0UHJveHkgPSBwbHVnaW5Qcm94eU1hcCgpLmdldChjbGllbnRQb3J0KTsKLSAgICBp
ZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIGluc3RhbmNlUHJveHkgPSBob3N0UHJveHktPnBs
dWdpbkluc3RhbmNlKHBsdWdpbklEKTsKLSAgICBpZiAoIWluc3RhbmNlUHJveHkpCi0gICAgICAg
IHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0KLSAgICB1aW50MzJfdCBzdHJlYW1JRCA9IDA7Ci0gICAg
TlBFcnJvciByZXN1bHQgPSBpbnN0YW5jZVByb3h5LT5sb2FkVVJMKHVybCwgdGFyZ2V0LCBwb3N0
RGF0YSwgcG9zdERhdGFMZW5ndGgsIHN0YXRpY19jYXN0PExvYWRVUkxGbGFncz4oZmxhZ3MpLCBz
dHJlYW1JRCk7Ci0gICAgCi0gICAgKm91dFJlc3VsdCA9IHJlc3VsdDsKLSAgICAqb3V0U3RyZWFt
SUQgPSBzdHJlYW1JRDsKLSAgICByZXR1cm4gS0VSTl9TVUNDRVNTOwotfQotCi1rZXJuX3JldHVy
bl90IFdLUENDYW5jZWxMb2FkVVJMKG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQzMl90IHBs
dWdpbklELCB1aW50MzJfdCBzdHJlYW1JRCwgaW50MTZfdCByZWFzb24pCi17Ci0gICAgQVNTRVJU
KE1BQ0hfUE9SVF9WQUxJRChjbGllbnRQb3J0KSk7Ci0KLSAgICBOZXRzY2FwZVBsdWdpbkhvc3RQ
cm94eSogaG9zdFByb3h5ID0gcGx1Z2luUHJveHlNYXAoKS5nZXQoY2xpZW50UG9ydCk7Ci0gICAg
aWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZVByb3h5ID0gaG9zdFByb3h5LT5w
bHVnaW5JbnN0YW5jZShwbHVnaW5JRCk7Ci0gICAgaWYgKCFpbnN0YW5jZVByb3h5KQotICAgICAg
ICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAgIAotICAgIGlmICghaW5zdGFuY2VQcm94eS0+Y2Fu
Y2VsU3RyZWFtTG9hZChzdHJlYW1JRCwgcmVhc29uKSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJ
TFVSRTsKLSAgICAKLSAgICByZXR1cm4gS0VSTl9TVUNDRVNTOwotfQotCi1rZXJuX3JldHVybl90
IFdLUENJbnZhbGlkYXRlUmVjdChtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJfdCBwbHVn
aW5JRCwgZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpCi17
Ci0gICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJRChjbGllbnRQb3J0KSk7Ci0KLSAgICBOZXRzY2Fw
ZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gcGx1Z2luUHJveHlNYXAoKS5nZXQoY2xpZW50
UG9ydCk7Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7
Ci0KLSAgICBpZiAoIWhvc3RQcm94eS0+aXNQcm9jZXNzaW5nUmVxdWVzdHMoKSkgewotICAgICAg
ICBpZiAoTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZVByb3h5ID0gaG9zdFBy
b3h5LT5wbHVnaW5JbnN0YW5jZShwbHVnaW5JRCkpCi0gICAgICAgICAgICBpbnN0YW5jZVByb3h5
LT5pbnZhbGlkYXRlUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgcmV0dXJuIEtF
Uk5fU1VDQ0VTUzsKLSAgICB9Ci0KLSAgICAvLyBEZWZlciB0aGUgd29yawotICAgIENGUnVuTG9v
cFBlcmZvcm1CbG9jayhDRlJ1bkxvb3BHZXRNYWluKCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSwg
XnsKLSAgICAgICAgaWYgKE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBwbHVn
aW5Qcm94eU1hcCgpLmdldChjbGllbnRQb3J0KSkgewotICAgICAgICAgICAgaWYgKE5ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eSogaW5zdGFuY2VQcm94eSA9IGhvc3RQcm94eS0+cGx1Z2luSW5z
dGFuY2UocGx1Z2luSUQpKQotICAgICAgICAgICAgICAgIGluc3RhbmNlUHJveHktPmludmFsaWRh
dGVSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICB9Ci0gICAgfSk7Ci0KLSAgICBy
ZXR1cm4gS0VSTl9TVUNDRVNTOwotfQotCi1rZXJuX3JldHVybl90IFdLUENHZXRTY3JpcHRhYmxl
TlBPYmplY3RSZXBseShtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJfdCBwbHVnaW5JRCwg
dWludDMyX3QgcmVxdWVzdElELCB1aW50MzJfdCBvYmplY3RJRCkKLXsKLSAgICBBU1NFUlQoTUFD
SF9QT1JUX1ZBTElEKGNsaWVudFBvcnQpKTsKLQotICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5
KiBob3N0UHJveHkgPSBwbHVnaW5Qcm94eU1hcCgpLmdldChjbGllbnRQb3J0KTsKLSAgICBpZiAo
IWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIGluc3RhbmNlUHJveHkgPSBob3N0UHJveHktPnBsdWdp
bkluc3RhbmNlKHBsdWdpbklEKTsKLSAgICBpZiAoIWluc3RhbmNlUHJveHkpCi0gICAgICAgIHJl
dHVybiBLRVJOX0ZBSUxVUkU7Ci0KLSAgICBpbnN0YW5jZVByb3h5LT5zZXRDdXJyZW50UmVwbHko
cmVxdWVzdElELCBtYWtlVW5pcXVlPE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6R2V0U2Ny
aXB0YWJsZU5QT2JqZWN0UmVwbHk+KG9iamVjdElEKSk7Ci0gICAgcmV0dXJuIEtFUk5fU1VDQ0VT
UzsKLX0KLQota2Vybl9yZXR1cm5fdCBXS1BDQm9vbGVhblJlcGx5KG1hY2hfcG9ydF90IGNsaWVu
dFBvcnQsIHVpbnQzMl90IHBsdWdpbklELCB1aW50MzJfdCByZXF1ZXN0SUQsIGJvb2xlYW5fdCBy
ZXN1bHQpCi17Ci0gICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJRChjbGllbnRQb3J0KSk7Ci0KLSAg
ICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gcGx1Z2luUHJveHlNYXAoKS5n
ZXQoY2xpZW50UG9ydCk7Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJO
X0ZBSUxVUkU7Ci0gICAgCi0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5j
ZVByb3h5ID0gaG9zdFByb3h5LT5wbHVnaW5JbnN0YW5jZShwbHVnaW5JRCk7Ci0gICAgaWYgKCFp
bnN0YW5jZVByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAgIAotICAgIGlu
c3RhbmNlUHJveHktPnNldEN1cnJlbnRSZXBseShyZXF1ZXN0SUQsIG1ha2VVbmlxdWU8TmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5OjpCb29sZWFuUmVwbHk+KHJlc3VsdCkpOwotICAgIHJldHVy
biBLRVJOX1NVQ0NFU1M7Ci19Ci0KLWtlcm5fcmV0dXJuX3QgV0tQQ0Jvb2xlYW5BbmREYXRhUmVw
bHkobWFjaF9wb3J0X3QgY2xpZW50UG9ydCwgdWludDMyX3QgcGx1Z2luSUQsIHVpbnQzMl90IHJl
cXVlc3RJRCwgYm9vbGVhbl90IHJldHVyblZhbHVlLCBkYXRhX3QgcmVzdWx0RGF0YSwgbWFjaF9t
c2dfdHlwZV9udW1iZXJfdCByZXN1bHRMZW5ndGgpCi17Ci0gICAgQVNTRVJUKE1BQ0hfUE9SVF9W
QUxJRChjbGllbnRQb3J0KSk7Ci0KLSAgICBEYXRhRGVhbGxvY2F0b3IgZGVhbGxvY2F0b3IocmVz
dWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLQotICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBo
b3N0UHJveHkgPSBwbHVnaW5Qcm94eU1hcCgpLmdldChjbGllbnRQb3J0KTsKLSAgICBpZiAoIWhv
c3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHkqIGluc3RhbmNlUHJveHkgPSBob3N0UHJveHktPnBsdWdpbklu
c3RhbmNlKHBsdWdpbklEKTsKLSAgICBpZiAoIWluc3RhbmNlUHJveHkpCi0gICAgICAgIHJldHVy
biBLRVJOX0ZBSUxVUkU7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiByZXN1bHQgPSBhZG9w
dENGKENGRGF0YUNyZWF0ZSgwLCByZWludGVycHJldF9jYXN0PFVJbnQ4Kj4ocmVzdWx0RGF0YSks
IHJlc3VsdExlbmd0aCkpOwotICAgIGluc3RhbmNlUHJveHktPnNldEN1cnJlbnRSZXBseShyZXF1
ZXN0SUQsIG1ha2VVbmlxdWU8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpCb29sZWFuQW5k
RGF0YVJlcGx5PihyZXR1cm5WYWx1ZSwgcmVzdWx0KSk7Ci0gICAgCi0gICAgcmV0dXJuIEtFUk5f
U1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1cm5fdCBXS1BDSW5zdGFudGlhdGVQbHVnaW5SZXBseSht
YWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJfdCBwbHVnaW5JRCwgdWludDMyX3QgcmVxdWVz
dElELCBrZXJuX3JldHVybl90IHJlc3VsdCwgdWludDMyX3QgcmVuZGVyQ29udGV4dElELCB1aW50
MzJfdCByZW5kZXJlclR5cGUpCi17Ci0gICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJRChjbGllbnRQ
b3J0KSk7Ci0KLSAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gcGx1Z2lu
UHJveHlNYXAoKS5nZXQoY2xpZW50UG9ydCk7Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAg
IHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5KiBpbnN0YW5jZVByb3h5ID0gaG9zdFByb3h5LT5wbHVnaW5JbnN0YW5jZShwbHVnaW5JRCk7
Ci0gICAgaWYgKCFpbnN0YW5jZVByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwot
Ci0gICAgaW5zdGFuY2VQcm94eS0+c2V0Q3VycmVudFJlcGx5KHJlcXVlc3RJRCwgbWFrZVVuaXF1
ZTxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Okluc3RhbnRpYXRlUGx1Z2luUmVwbHk+KHJl
c3VsdCwgcmVuZGVyQ29udGV4dElELCBzdGF0aWNfY2FzdDxSZW5kZXJlclR5cGU+KHJlbmRlcmVy
VHlwZSkpKTsKLSAgICByZXR1cm4gS0VSTl9TVUNDRVNTOwotfQotCi1rZXJuX3JldHVybl90IFdL
UENHZXRXaW5kb3dOUE9iamVjdChtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJfdCBwbHVn
aW5JRCwgdWludDMyX3QqIG91dE9iamVjdElEKQotewotICAgIEFTU0VSVChNQUNIX1BPUlRfVkFM
SUQoY2xpZW50UG9ydCkpOwotCi0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94
eSA9IHBsdWdpblByb3h5TWFwKCkuZ2V0KGNsaWVudFBvcnQpOwotICAgIGlmICghaG9zdFByb3h5
KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAgIAotICAgIE5ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eSogaW5zdGFuY2VQcm94eSA9IGhvc3RQcm94eS0+cGx1Z2luSW5zdGFuY2Uo
cGx1Z2luSUQpOwotICAgIGlmICghaW5zdGFuY2VQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5f
RkFJTFVSRTsKLQotICAgIHVpbnQzMl90IG9iamVjdElEOwotICAgIGlmICghaW5zdGFuY2VQcm94
eS0+Z2V0V2luZG93TlBPYmplY3Qob2JqZWN0SUQpKQotICAgICAgICByZXR1cm4gS0VSTl9GQUlM
VVJFOwotICAgIAotICAgICpvdXRPYmplY3RJRCA9IG9iamVjdElEOyAgICAKLSAgICByZXR1cm4g
S0VSTl9TVUNDRVNTOwotfQotCi1rZXJuX3JldHVybl90IFdLUENHZXRQbHVnaW5FbGVtZW50TlBP
YmplY3QobWFjaF9wb3J0X3QgY2xpZW50UG9ydCwgdWludDMyX3QgcGx1Z2luSUQsIHVpbnQzMl90
KiBvdXRPYmplY3RJRCkKLXsKLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKGNsaWVudFBvcnQp
KTsKLQotICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBwbHVnaW5Qcm94
eU1hcCgpLmdldChjbGllbnRQb3J0KTsKLSAgICBpZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0
dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkq
IGluc3RhbmNlUHJveHkgPSBob3N0UHJveHktPnBsdWdpbkluc3RhbmNlKHBsdWdpbklEKTsKLSAg
ICBpZiAoIWluc3RhbmNlUHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAg
Ci0gICAgdWludDMyX3Qgb2JqZWN0SUQ7Ci0gICAgaWYgKCFpbnN0YW5jZVByb3h5LT5nZXRQbHVn
aW5FbGVtZW50TlBPYmplY3Qob2JqZWN0SUQpKQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJF
OwotICAgIAotICAgICpvdXRPYmplY3RJRCA9IG9iamVjdElEOyAgICAKLSAgICByZXR1cm4gS0VS
Tl9TVUNDRVNTOwotfQotCi1rZXJuX3JldHVybl90IFdLUENGb3JnZXRCcm93c2VyT2JqZWN0KG1h
Y2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQzMl90IHBsdWdpbklELCB1aW50MzJfdCBvYmplY3RJ
RCkKLXsKLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKGNsaWVudFBvcnQpKTsKLQotICAgIE5l
dHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBwbHVnaW5Qcm94eU1hcCgpLmdldChj
bGllbnRQb3J0KTsKLSAgICBpZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJ
TFVSRTsKLSAgICAKLSAgICBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIGluc3RhbmNlUHJv
eHkgPSBob3N0UHJveHktPnBsdWdpbkluc3RhbmNlKHBsdWdpbklEKTsKLSAgICBpZiAoIWluc3Rh
bmNlUHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0KLSAgICByZXR1cm4gaW5z
dGFuY2VQcm94eS0+Zm9yZ2V0QnJvd3Nlck9iamVjdElEKG9iamVjdElEKSA/IEtFUk5fU1VDQ0VT
UyA6IEtFUk5fRkFJTFVSRTsKLX0KLQota2Vybl9yZXR1cm5fdCBXS1BDRXZhbHVhdGUobWFjaF9w
b3J0X3QgY2xpZW50UG9ydCwgdWludDMyX3QgcGx1Z2luSUQsIHVpbnQzMl90IHJlcXVlc3RJRCwg
dWludDMyX3Qgb2JqZWN0SUQsIGRhdGFfdCBzY3JpcHREYXRhLCBtYWNoX21zZ190eXBlX251bWJl
cl90IHNjcmlwdExlbmd0aCwgYm9vbGVhbl90IGFsbG93UG9wdXBzKQotewotICAgIEFTU0VSVChN
QUNIX1BPUlRfVkFMSUQoY2xpZW50UG9ydCkpOwotCi0gICAgRGF0YURlYWxsb2NhdG9yIGRlYWxs
b2NhdG9yKHNjcmlwdERhdGEsIHNjcmlwdExlbmd0aCk7Ci0KLSAgICBOZXRzY2FwZVBsdWdpbkhv
c3RQcm94eSogaG9zdFByb3h5ID0gcGx1Z2luUHJveHlNYXAoKS5nZXQoY2xpZW50UG9ydCk7Ci0g
ICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0g
ICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZVByb3h5ID0gaG9zdFByb3h5
LT5wbHVnaW5JbnN0YW5jZShwbHVnaW5JRCk7Ci0gICAgaWYgKCFpbnN0YW5jZVByb3h5KQotICAg
ICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAgUGx1Z2luRGVzdHJveURlZmVycmVyIGRl
ZmVycmVyKGluc3RhbmNlUHJveHkpOwotICAgIAotICAgIFN0cmluZyBzY3JpcHQgPSBzY3JpcHRM
ZW5ndGggPyBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHNjcmlwdERhdGEsIHNj
cmlwdExlbmd0aCkgOiBlbXB0eVN0cmluZygpOwotICAgIAotICAgIGRhdGFfdCByZXN1bHREYXRh
ID0gMDsKLSAgICBtYWNoX21zZ190eXBlX251bWJlcl90IHJlc3VsdExlbmd0aCA9IDA7Ci0gICAg
Ym9vbGVhbl90IHJldHVyblZhbHVlID0gaW5zdGFuY2VQcm94eS0+ZXZhbHVhdGUob2JqZWN0SUQs
IHNjcmlwdCwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoLCBhbGxvd1BvcHVwcyk7Ci0KLSAgICBo
b3N0UHJveHkgPSBpbnN0YW5jZVByb3h5LT5ob3N0UHJveHkoKTsKLSAgICBpZiAoIWhvc3RQcm94
eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLQotICAgIF9XS1BIQm9vbGVhbkFuZERh
dGFSZXBseShob3N0UHJveHktPnBvcnQoKSwgaW5zdGFuY2VQcm94eS0+cGx1Z2luSUQoKSwgcmVx
dWVzdElELCByZXR1cm5WYWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLSAgICBpZiAo
cmVzdWx0RGF0YSkKLSAgICAgICAgbWlnX2RlYWxsb2NhdGUocmVpbnRlcnByZXRfY2FzdDx2bV9h
ZGRyZXNzX3Q+KHJlc3VsdERhdGEpLCByZXN1bHRMZW5ndGgpOwotICAgICAgICAKLSAgICByZXR1
cm4gS0VSTl9TVUNDRVNTOwotfQotCi1rZXJuX3JldHVybl90IFdLUENHZXRTdHJpbmdJZGVudGlm
aWVyKG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIGRhdGFfdCBuYW1lLCBtYWNoX21zZ190eXBlX251
bWJlcl90IG5hbWVDbnQsIHVpbnQ2NF90KiBpZGVudGlmaWVyKQotewotICAgIEFTU0VSVChNQUNI
X1BPUlRfVkFMSUQoY2xpZW50UG9ydCkpOwotCi0gICAgRGF0YURlYWxsb2NhdG9yIGRlYWxsb2Nh
dG9yKG5hbWUsIG5hbWVDbnQpOwotCi0gICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCppZGVudGlm
aWVyKSA9PSBzaXplb2YoSWRlbnRpZmllclJlcCopLCBpZGVudGlmaWVyX3NpemVzKTsKLSAgICAK
LSAgICAqaWRlbnRpZmllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KElkZW50aWZpZXJS
ZXA6OmdldChuYW1lKSk7Ci0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1
cm5fdCBXS1BDR2V0SW50SWRlbnRpZmllcihtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCBpbnQzMl90
IHZhbHVlLCB1aW50NjRfdCogaWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZB
TElEKGNsaWVudFBvcnQpKTsKLQotICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZigqaWRlbnRpZmll
cikgPT0gc2l6ZW9mKE5QSWRlbnRpZmllciksIGlkZW50aWZpZXJfc2l6ZXMpOwotICAgIAotICAg
ICppZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4oSWRlbnRpZmllclJlcDo6
Z2V0KHZhbHVlKSk7Ci0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQotc3RhdGljIElkZW50
aWZpZXIgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKElkZW50aWZpZXJSZXAqIGlkZW50aWZp
ZXIpCi17Ci0gICAgQVNTRVJUKElkZW50aWZpZXJSZXA6OmlzVmFsaWQoaWRlbnRpZmllcikpOwot
ICAgIEFTU0VSVChpZGVudGlmaWVyLT5pc1N0cmluZygpKTsKLSAgCi0gICAgY29uc3QgY2hhciog
c3RyID0gaWRlbnRpZmllci0+c3RyaW5nKCk7ICAgIAotICAgIHJldHVybiBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGNvbW1vblZNKCksIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2so
c3RyLCBzdHJsZW4oc3RyKSkpOwotfQotCi1rZXJuX3JldHVybl90IFdLUENJbnZva2UobWFjaF9w
b3J0X3QgY2xpZW50UG9ydCwgdWludDMyX3QgcGx1Z2luSUQsIHVpbnQzMl90IHJlcXVlc3RJRCwg
dWludDMyX3Qgb2JqZWN0SUQsIHVpbnQ2NF90IHNlcnZlcklkZW50aWZpZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YV90IGFyZ3VtZW50c0RhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVy
X3QgYXJndW1lbnRzTGVuZ3RoKSAKLXsKLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKGNsaWVu
dFBvcnQpKTsKLQotICAgIERhdGFEZWFsbG9jYXRvciBkZWFsbG9jYXRvcihhcmd1bWVudHNEYXRh
LCBhcmd1bWVudHNMZW5ndGgpOwotCi0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQ
cm94eSA9IHBsdWdpblByb3h5TWFwKCkuZ2V0KGNsaWVudFBvcnQpOwotICAgIGlmICghaG9zdFBy
b3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAgIAotICAgIE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eSogaW5zdGFuY2VQcm94eSA9IGhvc3RQcm94eS0+cGx1Z2luSW5zdGFu
Y2UocGx1Z2luSUQpOwotICAgIGlmICghaW5zdGFuY2VQcm94eSkKLSAgICAgICAgcmV0dXJuIEtF
Uk5fRkFJTFVSRTsKLQotICAgIFBsdWdpbkRlc3Ryb3lEZWZlcnJlciBkZWZlcnJlcihpbnN0YW5j
ZVByb3h5KTsKLSAgICAKLSAgICBJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyID0gcmVpbnRlcnBy
ZXRfY2FzdDxJZGVudGlmaWVyUmVwKj4oc2VydmVySWRlbnRpZmllcik7Ci0gICAgaWYgKCFJZGVu
dGlmaWVyUmVwOjppc1ZhbGlkKGlkZW50aWZpZXIpKQotICAgICAgICByZXR1cm4gS0VSTl9GQUlM
VVJFOwotCi0gICAgSWRlbnRpZmllciBtZXRob2ROYW1lSWRlbnRpZmllciA9IGlkZW50aWZpZXJG
cm9tSWRlbnRpZmllclJlcChpZGVudGlmaWVyKTsKLQotICAgIGRhdGFfdCByZXN1bHREYXRhID0g
MDsKLSAgICBtYWNoX21zZ190eXBlX251bWJlcl90IHJlc3VsdExlbmd0aCA9IDA7Ci0gICAgYm9v
bGVhbl90IHJldHVyblZhbHVlID0gaW5zdGFuY2VQcm94eS0+aW52b2tlKG9iamVjdElELCBtZXRo
b2ROYW1lSWRlbnRpZmllciwgYXJndW1lbnRzRGF0YSwgYXJndW1lbnRzTGVuZ3RoLCByZXN1bHRE
YXRhLCByZXN1bHRMZW5ndGgpOwotCi0gICAgaG9zdFByb3h5ID0gaW5zdGFuY2VQcm94eS0+aG9z
dFByb3h5KCk7Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxV
UkU7Ci0KLSAgICBfV0tQSEJvb2xlYW5BbmREYXRhUmVwbHkoaG9zdFByb3h5LT5wb3J0KCksIGlu
c3RhbmNlUHJveHktPnBsdWdpbklEKCksIHJlcXVlc3RJRCwgcmV0dXJuVmFsdWUsIHJlc3VsdERh
dGEsIHJlc3VsdExlbmd0aCk7Ci0gICAgaWYgKHJlc3VsdERhdGEpCi0gICAgICAgIG1pZ19kZWFs
bG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190PihyZXN1bHREYXRhKSwgcmVzdWx0
TGVuZ3RoKTsKLSAgICAKLSAgICByZXR1cm4gS0VSTl9TVUNDRVNTOwotfQotCi1rZXJuX3JldHVy
bl90IFdLUENJbnZva2VEZWZhdWx0KG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQzMl90IHBs
dWdpbklELCB1aW50MzJfdCByZXF1ZXN0SUQsIHVpbnQzMl90IG9iamVjdElELAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgYXJndW1lbnRzRGF0YSwgbWFjaF9tc2dfdHlw
ZV9udW1iZXJfdCBhcmd1bWVudHNMZW5ndGgpCi17Ci0gICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJ
RChjbGllbnRQb3J0KSk7Ci0KLSAgICBEYXRhRGVhbGxvY2F0b3IgZGVhbGxvY2F0b3IoYXJndW1l
bnRzRGF0YSwgYXJndW1lbnRzTGVuZ3RoKTsKLQotICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5
KiBob3N0UHJveHkgPSBwbHVnaW5Qcm94eU1hcCgpLmdldChjbGllbnRQb3J0KTsKLSAgICBpZiAo
IWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIGluc3RhbmNlUHJveHkgPSBob3N0UHJveHktPnBsdWdp
bkluc3RhbmNlKHBsdWdpbklEKTsKLSAgICBpZiAoIWluc3RhbmNlUHJveHkpCi0gICAgICAgIHJl
dHVybiBLRVJOX0ZBSUxVUkU7Ci0KLSAgICBQbHVnaW5EZXN0cm95RGVmZXJyZXIgZGVmZXJyZXIo
aW5zdGFuY2VQcm94eSk7Ci0KLSAgICBkYXRhX3QgcmVzdWx0RGF0YSA9IDA7Ci0gICAgbWFjaF9t
c2dfdHlwZV9udW1iZXJfdCByZXN1bHRMZW5ndGggPSAwOwotICAgIGJvb2xlYW5fdCByZXR1cm5W
YWx1ZSA9IGluc3RhbmNlUHJveHktPmludm9rZURlZmF1bHQob2JqZWN0SUQsIGFyZ3VtZW50c0Rh
dGEsIGFyZ3VtZW50c0xlbmd0aCwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLQotICAgIGhv
c3RQcm94eSA9IGluc3RhbmNlUHJveHktPmhvc3RQcm94eSgpOwotICAgIGlmICghaG9zdFByb3h5
KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAgX1dLUEhCb29sZWFuQW5kRGF0
YVJlcGx5KGhvc3RQcm94eS0+cG9ydCgpLCBpbnN0YW5jZVByb3h5LT5wbHVnaW5JRCgpLCByZXF1
ZXN0SUQsIHJldHVyblZhbHVlLCByZXN1bHREYXRhLCByZXN1bHRMZW5ndGgpOwotICAgIGlmIChy
ZXN1bHREYXRhKQotICAgICAgICBtaWdfZGVhbGxvY2F0ZShyZWludGVycHJldF9jYXN0PHZtX2Fk
ZHJlc3NfdD4ocmVzdWx0RGF0YSksIHJlc3VsdExlbmd0aCk7Ci0gICAgCi0gICAgcmV0dXJuIEtF
Uk5fU1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1cm5fdCBXS1BDQ29uc3RydWN0KG1hY2hfcG9ydF90
IGNsaWVudFBvcnQsIHVpbnQzMl90IHBsdWdpbklELCB1aW50MzJfdCBvYmplY3RJRCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgYXJndW1lbnRzRGF0YSwgbWFjaF9tc2dfdHlw
ZV9udW1iZXJfdCBhcmd1bWVudHNMZW5ndGgsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2xlYW5fdCogcmV0dXJuVmFsdWUsIGRhdGFfdCogcmVzdWx0RGF0YSwgbWFjaF9tc2dfdHlw
ZV9udW1iZXJfdCogcmVzdWx0TGVuZ3RoKQotewotICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQo
Y2xpZW50UG9ydCkpOwotCi0gICAgRGF0YURlYWxsb2NhdG9yIGRlYWxsb2NhdG9yKGFyZ3VtZW50
c0RhdGEsIGFyZ3VtZW50c0xlbmd0aCk7Ci0KLSAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSog
aG9zdFByb3h5ID0gcGx1Z2luUHJveHlNYXAoKS5nZXQoY2xpZW50UG9ydCk7Ci0gICAgaWYgKCFo
b3N0UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAgTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZVByb3h5ID0gaG9zdFByb3h5LT5wbHVnaW5J
bnN0YW5jZShwbHVnaW5JRCk7Ci0gICAgaWYgKCFpbnN0YW5jZVByb3h5KQotICAgICAgICByZXR1
cm4gS0VSTl9GQUlMVVJFOwotCi0gICAgUGx1Z2luRGVzdHJveURlZmVycmVyIGRlZmVycmVyKGlu
c3RhbmNlUHJveHkpOwotCi0gICAgKnJldHVyblZhbHVlID0gaW5zdGFuY2VQcm94eS0+Y29uc3Ry
dWN0KG9iamVjdElELCBhcmd1bWVudHNEYXRhLCBhcmd1bWVudHNMZW5ndGgsICpyZXN1bHREYXRh
LCAqcmVzdWx0TGVuZ3RoKTsKLSAgICAKLSAgICByZXR1cm4gS0VSTl9TVUNDRVNTOwotfQotCi1r
ZXJuX3JldHVybl90IFdLUENHZXRQcm9wZXJ0eShtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50
MzJfdCBwbHVnaW5JRCwgdWludDMyX3QgcmVxdWVzdElELCB1aW50MzJfdCBvYmplY3RJRCwgdWlu
dDY0X3Qgc2VydmVySWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKGNs
aWVudFBvcnQpKTsKLQotICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBw
bHVnaW5Qcm94eU1hcCgpLmdldChjbGllbnRQb3J0KTsKLSAgICBpZiAoIWhvc3RQcm94eSkKLSAg
ICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHkqIGluc3RhbmNlUHJveHkgPSBob3N0UHJveHktPnBsdWdpbkluc3RhbmNlKHBsdWdp
bklEKTsKLSAgICBpZiAoIWluc3RhbmNlUHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxV
UkU7Ci0KLSAgICBJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2FzdDxJ
ZGVudGlmaWVyUmVwKj4oc2VydmVySWRlbnRpZmllcik7Ci0gICAgaWYgKCFJZGVudGlmaWVyUmVw
Ojppc1ZhbGlkKGlkZW50aWZpZXIpKQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAg
IAotICAgIFBsdWdpbkRlc3Ryb3lEZWZlcnJlciBkZWZlcnJlcihpbnN0YW5jZVByb3h5KTsKLQot
ICAgIGRhdGFfdCByZXN1bHREYXRhID0gMDsKLSAgICBtYWNoX21zZ190eXBlX251bWJlcl90IHJl
c3VsdExlbmd0aCA9IDA7Ci0gICAgYm9vbGVhbl90IHJldHVyblZhbHVlOwotICAgIAotICAgIGlm
IChpZGVudGlmaWVyLT5pc1N0cmluZygpKSB7Ci0gICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlO
YW1lSWRlbnRpZmllciA9IGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChpZGVudGlmaWVyKTsg
ICAgICAgIAotICAgICAgICByZXR1cm5WYWx1ZSA9IGluc3RhbmNlUHJveHktPmdldFByb3BlcnR5
KG9iamVjdElELCBwcm9wZXJ0eU5hbWVJZGVudGlmaWVyLCByZXN1bHREYXRhLCByZXN1bHRMZW5n
dGgpOwotICAgIH0gZWxzZSAKLSAgICAgICAgcmV0dXJuVmFsdWUgPSBpbnN0YW5jZVByb3h5LT5z
ZXRQcm9wZXJ0eShvYmplY3RJRCwgaWRlbnRpZmllci0+bnVtYmVyKCksIHJlc3VsdERhdGEsIHJl
c3VsdExlbmd0aCk7Ci0KLSAgICBob3N0UHJveHkgPSBpbnN0YW5jZVByb3h5LT5ob3N0UHJveHko
KTsKLSAgICBpZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLQot
ICAgIF9XS1BIQm9vbGVhbkFuZERhdGFSZXBseShob3N0UHJveHktPnBvcnQoKSwgaW5zdGFuY2VQ
cm94eS0+cGx1Z2luSUQoKSwgcmVxdWVzdElELCByZXR1cm5WYWx1ZSwgcmVzdWx0RGF0YSwgcmVz
dWx0TGVuZ3RoKTsKLSAgICBpZiAocmVzdWx0RGF0YSkKLSAgICAgICAgbWlnX2RlYWxsb2NhdGUo
cmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KHJlc3VsdERhdGEpLCByZXN1bHRMZW5ndGgp
OwotICAgIAotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci19Ci0KLWtlcm5fcmV0dXJuX3QgV0tQ
Q1NldFByb3BlcnR5KG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQzMl90IHBsdWdpbklELCB1
aW50MzJfdCByZXF1ZXN0SUQsIHVpbnQzMl90IG9iamVjdElELCB1aW50NjRfdCBzZXJ2ZXJJZGVu
dGlmaWVyLCBkYXRhX3QgdmFsdWVEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90IHZhbHVlTGVu
Z3RoKQotewotICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQoY2xpZW50UG9ydCkpOwotCi0gICAg
RGF0YURlYWxsb2NhdG9yIGRlYWxsb2NhdG9yKHZhbHVlRGF0YSwgdmFsdWVMZW5ndGgpOwotCi0g
ICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IHBsdWdpblByb3h5TWFwKCku
Z2V0KGNsaWVudFBvcnQpOwotICAgIGlmICghaG9zdFByb3h5KQotICAgICAgICByZXR1cm4gS0VS
Tl9GQUlMVVJFOwotICAgIAotICAgIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSogaW5zdGFu
Y2VQcm94eSA9IGhvc3RQcm94eS0+cGx1Z2luSW5zdGFuY2UocGx1Z2luSUQpOwotICAgIGlmICgh
aW5zdGFuY2VQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLQotICAgIFBsdWdp
bkRlc3Ryb3lEZWZlcnJlciBkZWZlcnJlcihpbnN0YW5jZVByb3h5KTsKLQotICAgIElkZW50aWZp
ZXJSZXAqIGlkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PElkZW50aWZpZXJSZXAqPihzZXJ2
ZXJJZGVudGlmaWVyKTsKLSAgICBpZiAoIUlkZW50aWZpZXJSZXA6OmlzVmFsaWQoaWRlbnRpZmll
cikpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0KLSAgICBib29sIHJlc3VsdDsKLSAg
ICBpZiAoaWRlbnRpZmllci0+aXNTdHJpbmcoKSkgewotICAgICAgICBJZGVudGlmaWVyIHByb3Bl
cnR5TmFtZUlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAoaWRlbnRpZmll
cik7ICAgICAgICAKLSAgICAgICAgcmVzdWx0ID0gaW5zdGFuY2VQcm94eS0+c2V0UHJvcGVydHko
b2JqZWN0SUQsIHByb3BlcnR5TmFtZUlkZW50aWZpZXIsIHZhbHVlRGF0YSwgdmFsdWVMZW5ndGgp
OwotICAgIH0gZWxzZSAKLSAgICAgICAgcmVzdWx0ID0gaW5zdGFuY2VQcm94eS0+c2V0UHJvcGVy
dHkob2JqZWN0SUQsIGlkZW50aWZpZXItPm51bWJlcigpLCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3Ro
KTsKLQotICAgIGhvc3RQcm94eSA9IGluc3RhbmNlUHJveHktPmhvc3RQcm94eSgpOwotICAgIGlm
ICghaG9zdFByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAgX1dLUEhC
b29sZWFuUmVwbHkoaG9zdFByb3h5LT5wb3J0KCksIGluc3RhbmNlUHJveHktPnBsdWdpbklEKCks
IHJlcXVlc3RJRCwgcmVzdWx0KTsKLQotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci19Ci0KLWtl
cm5fcmV0dXJuX3QgV0tQQ1JlbW92ZVByb3BlcnR5KG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVp
bnQzMl90IHBsdWdpbklELCB1aW50MzJfdCByZXF1ZXN0SUQsIHVpbnQzMl90IG9iamVjdElELCB1
aW50NjRfdCBzZXJ2ZXJJZGVudGlmaWVyKQotewotICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQo
Y2xpZW50UG9ydCkpOwotCi0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9
IHBsdWdpblByb3h5TWFwKCkuZ2V0KGNsaWVudFBvcnQpOwotICAgIGlmICghaG9zdFByb3h5KQot
ICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAgIAotICAgIE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eSogaW5zdGFuY2VQcm94eSA9IGhvc3RQcm94eS0+cGx1Z2luSW5zdGFuY2UocGx1
Z2luSUQpOwotICAgIGlmICghaW5zdGFuY2VQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJ
TFVSRTsKLSAgICAKLSAgICBQbHVnaW5EZXN0cm95RGVmZXJyZXIgZGVmZXJyZXIoaW5zdGFuY2VQ
cm94eSk7Ci0KLSAgICBJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2Fz
dDxJZGVudGlmaWVyUmVwKj4oc2VydmVySWRlbnRpZmllcik7Ci0gICAgaWYgKCFJZGVudGlmaWVy
UmVwOjppc1ZhbGlkKGlkZW50aWZpZXIpKQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwot
Ci0gICAgYm9vbCByZXN1bHQ7Ci0gICAgaWYgKGlkZW50aWZpZXItPmlzU3RyaW5nKCkpIHsKLSAg
ICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWVJZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21J
ZGVudGlmaWVyUmVwKGlkZW50aWZpZXIpOyAgICAgICAgCi0gICAgICAgIHJlc3VsdCA9IGluc3Rh
bmNlUHJveHktPnJlbW92ZVByb3BlcnR5KG9iamVjdElELCBwcm9wZXJ0eU5hbWVJZGVudGlmaWVy
KTsKLSAgICB9IGVsc2UgCi0gICAgICAgIHJlc3VsdCA9IGluc3RhbmNlUHJveHktPnJlbW92ZVBy
b3BlcnR5KG9iamVjdElELCBpZGVudGlmaWVyLT5udW1iZXIoKSk7Ci0KLSAgICBob3N0UHJveHkg
PSBpbnN0YW5jZVByb3h5LT5ob3N0UHJveHkoKTsKLSAgICBpZiAoIWhvc3RQcm94eSkKLSAgICAg
ICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLQotICAgIF9XS1BIQm9vbGVhblJlcGx5KGhvc3RQcm94
eS0+cG9ydCgpLCBpbnN0YW5jZVByb3h5LT5wbHVnaW5JRCgpLCByZXF1ZXN0SUQsIHJlc3VsdCk7
Ci0KLSAgICByZXR1cm4gS0VSTl9TVUNDRVNTOwotfQotCi1rZXJuX3JldHVybl90IFdLUENIYXNQ
cm9wZXJ0eShtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJfdCBwbHVnaW5JRCwgdWludDMy
X3QgcmVxdWVzdElELCB1aW50MzJfdCBvYmplY3RJRCwgdWludDY0X3Qgc2VydmVySWRlbnRpZmll
cikKLXsKLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKGNsaWVudFBvcnQpKTsKLQotICAgIE5l
dHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBwbHVnaW5Qcm94eU1hcCgpLmdldChj
bGllbnRQb3J0KTsKLSAgICBpZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJ
TFVSRTsKLSAgICAKLSAgICBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIGluc3RhbmNlUHJv
eHkgPSBob3N0UHJveHktPnBsdWdpbkluc3RhbmNlKHBsdWdpbklEKTsKLSAgICBpZiAoIWluc3Rh
bmNlUHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAgUGx1Z2lu
RGVzdHJveURlZmVycmVyIGRlZmVycmVyKGluc3RhbmNlUHJveHkpOwotCi0gICAgSWRlbnRpZmll
clJlcCogaWRlbnRpZmllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SWRlbnRpZmllclJlcCo+KHNlcnZl
cklkZW50aWZpZXIpOwotICAgIGlmICghSWRlbnRpZmllclJlcDo6aXNWYWxpZChpZGVudGlmaWVy
KSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBib29sZWFuX3QgcmV0
dXJuVmFsdWU7Ci0gICAgaWYgKGlkZW50aWZpZXItPmlzU3RyaW5nKCkpIHsKLSAgICAgICAgSWRl
bnRpZmllciBwcm9wZXJ0eU5hbWVJZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21JZGVudGlmaWVy
UmVwKGlkZW50aWZpZXIpOyAgICAgICAgCi0gICAgICAgIHJldHVyblZhbHVlID0gaW5zdGFuY2VQ
cm94eS0+aGFzUHJvcGVydHkob2JqZWN0SUQsIHByb3BlcnR5TmFtZUlkZW50aWZpZXIpOwotICAg
IH0gZWxzZSAKLSAgICAgICAgcmV0dXJuVmFsdWUgPSBpbnN0YW5jZVByb3h5LT5oYXNQcm9wZXJ0
eShvYmplY3RJRCwgaWRlbnRpZmllci0+bnVtYmVyKCkpOwotCi0gICAgaG9zdFByb3h5ID0gaW5z
dGFuY2VQcm94eS0+aG9zdFByb3h5KCk7Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJl
dHVybiBLRVJOX0ZBSUxVUkU7Ci0KLSAgICBfV0tQSEJvb2xlYW5SZXBseShob3N0UHJveHktPnBv
cnQoKSwgaW5zdGFuY2VQcm94eS0+cGx1Z2luSUQoKSwgcmVxdWVzdElELCByZXR1cm5WYWx1ZSk7
Ci0gICAgCi0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1cm5fdCBXS1BD
SGFzTWV0aG9kKG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQzMl90IHBsdWdpbklELCB1aW50
MzJfdCByZXF1ZXN0SUQsIHVpbnQzMl90IG9iamVjdElELCB1aW50NjRfdCBzZXJ2ZXJJZGVudGlm
aWVyKQotewotICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQoY2xpZW50UG9ydCkpOwotCi0gICAg
TmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IHBsdWdpblByb3h5TWFwKCkuZ2V0
KGNsaWVudFBvcnQpOwotICAgIGlmICghaG9zdFByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9G
QUlMVVJFOwotICAgIAotICAgIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSogaW5zdGFuY2VQ
cm94eSA9IGhvc3RQcm94eS0+cGx1Z2luSW5zdGFuY2UocGx1Z2luSUQpOwotICAgIGlmICghaW5z
dGFuY2VQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBQbHVn
aW5EZXN0cm95RGVmZXJyZXIgZGVmZXJyZXIoaW5zdGFuY2VQcm94eSk7Ci0KLSAgICBJZGVudGlm
aWVyUmVwKiBpZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2FzdDxJZGVudGlmaWVyUmVwKj4oc2Vy
dmVySWRlbnRpZmllcik7Ci0gICAgaWYgKCFJZGVudGlmaWVyUmVwOjppc1ZhbGlkKGlkZW50aWZp
ZXIpKQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAgIAotICAgIElkZW50aWZpZXIg
bWV0aG9kTmFtZUlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAoaWRlbnRp
Zmllcik7ICAgICAgICAKLSAgICBib29sZWFuX3QgcmV0dXJuVmFsdWUgPSBpbnN0YW5jZVByb3h5
LT5oYXNNZXRob2Qob2JqZWN0SUQsIG1ldGhvZE5hbWVJZGVudGlmaWVyKTsKLQotICAgIGhvc3RQ
cm94eSA9IGluc3RhbmNlUHJveHktPmhvc3RQcm94eSgpOwotICAgIGlmICghaG9zdFByb3h5KQot
ICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAgX1dLUEhCb29sZWFuUmVwbHkoaG9z
dFByb3h5LT5wb3J0KCksIGluc3RhbmNlUHJveHktPnBsdWdpbklEKCksIHJlcXVlc3RJRCwgcmV0
dXJuVmFsdWUpOwotCi0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1cm5f
dCBXS1BDSWRlbnRpZmllckluZm8obWFjaF9wb3J0X3QgY2xpZW50UG9ydCwgdWludDY0X3Qgc2Vy
dmVySWRlbnRpZmllciwgZGF0YV90KiBpbmZvRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCog
aW5mb0xlbmd0aCkKLXsKLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKGNsaWVudFBvcnQpKTsK
LQotICAgIElkZW50aWZpZXJSZXAqIGlkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PElkZW50
aWZpZXJSZXAqPihzZXJ2ZXJJZGVudGlmaWVyKTsKLSAgICBpZiAoIUlkZW50aWZpZXJSZXA6Omlz
VmFsaWQoaWRlbnRpZmllcikpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0g
ICAgaWQgaW5mbzsKLSAgICBpZiAoaWRlbnRpZmllci0+aXNTdHJpbmcoKSkgewotICAgICAgICBj
b25zdCBjaGFyKiBzdHIgPSBpZGVudGlmaWVyLT5zdHJpbmcoKTsKLSAgICAgICAgaW5mbyA9IFtO
U0RhdGEgZGF0YVdpdGhCeXRlc05vQ29weToodm9pZCopc3RyIGxlbmd0aDpzdHJsZW4oc3RyKSBm
cmVlV2hlbkRvbmU6Tk9dOwotICAgIH0gZWxzZSAKLSAgICAgICAgaW5mbyA9IEAoaWRlbnRpZmll
ci0+bnVtYmVyKCkpOwotCi0gICAgTlNEYXRhICpkYXRhID0gW05TUHJvcGVydHlMaXN0U2VyaWFs
aXphdGlvbiBkYXRhV2l0aFByb3BlcnR5TGlzdDppbmZvIGZvcm1hdDpOU1Byb3BlcnR5TGlzdEJp
bmFyeUZvcm1hdF92MV8wIG9wdGlvbnM6MCBlcnJvcjpudWxscHRyXTsKLSAgICBBU1NFUlQoZGF0
YSk7Ci0gICAgCi0gICAgKmluZm9MZW5ndGggPSBkYXRhLmxlbmd0aDsKLSAgICBtaWdfYWxsb2Nh
dGUocmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3QqPihpbmZvRGF0YSksICppbmZvTGVuZ3Ro
KTsKLSAgICAKLSAgICBtZW1jcHkoKmluZm9EYXRhLCBkYXRhLmJ5dGVzLCAqaW5mb0xlbmd0aCk7
Ci0gICAgCi0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1cm5fdCBXS1BD
RW51bWVyYXRlKG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQzMl90IHBsdWdpbklELCB1aW50
MzJfdCByZXF1ZXN0SUQsIHVpbnQzMl90IG9iamVjdElEKQotewotICAgIEFTU0VSVChNQUNIX1BP
UlRfVkFMSUQoY2xpZW50UG9ydCkpOwotCi0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhv
c3RQcm94eSA9IHBsdWdpblByb3h5TWFwKCkuZ2V0KGNsaWVudFBvcnQpOwotICAgIGlmICghaG9z
dFByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAgIAotICAgIE5ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eSogaW5zdGFuY2VQcm94eSA9IGhvc3RQcm94eS0+cGx1Z2luSW5z
dGFuY2UocGx1Z2luSUQpOwotICAgIGlmICghaW5zdGFuY2VQcm94eSkKLSAgICAgICAgcmV0dXJu
IEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBkYXRhX3QgcmVzdWx0RGF0YSA9IDA7Ci0gICAgbWFj
aF9tc2dfdHlwZV9udW1iZXJfdCByZXN1bHRMZW5ndGggPSAwOwotICAgIGJvb2xlYW5fdCByZXR1
cm5WYWx1ZSA9IGluc3RhbmNlUHJveHktPmVudW1lcmF0ZShvYmplY3RJRCwgcmVzdWx0RGF0YSwg
cmVzdWx0TGVuZ3RoKTsKLQotICAgIGhvc3RQcm94eSA9IGluc3RhbmNlUHJveHktPmhvc3RQcm94
eSgpOwotICAgIGlmICghaG9zdFByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwot
Ci0gICAgX1dLUEhCb29sZWFuQW5kRGF0YVJlcGx5KGhvc3RQcm94eS0+cG9ydCgpLCBpbnN0YW5j
ZVByb3h5LT5wbHVnaW5JRCgpLCByZXF1ZXN0SUQsIHJldHVyblZhbHVlLCByZXN1bHREYXRhLCBy
ZXN1bHRMZW5ndGgpOwotICAgIAotICAgIGlmIChyZXN1bHREYXRhKQotICAgICAgICBtaWdfZGVh
bGxvY2F0ZShyZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdD4ocmVzdWx0RGF0YSksIHJlc3Vs
dExlbmd0aCk7Ci0gICAgCi0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1
cm5fdCBXS1BDU2V0TWVudUJhclZpc2libGUobWFjaF9wb3J0X3QgY2xpZW50UG9ydCwgYm9vbGVh
bl90IG1lbnVCYXJWaXNpYmxlKQotewotICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQoY2xpZW50
UG9ydCkpOwotCi0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IHBsdWdp
blByb3h5TWFwKCkuZ2V0KGNsaWVudFBvcnQpOwotICAgIGlmICghaG9zdFByb3h5KQotICAgICAg
ICByZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAgaG9zdFByb3h5LT5zZXRNZW51QmFyVmlzaWJs
ZShtZW51QmFyVmlzaWJsZSk7Ci0KLSAgICByZXR1cm4gS0VSTl9TVUNDRVNTOwotfQotCi1rZXJu
X3JldHVybl90IFdLUENTZXRGdWxsc2NyZWVuV2luZG93SXNTaG93aW5nKG1hY2hfcG9ydF90IGNs
aWVudFBvcnQsIGJvb2xlYW5fdCBmdWxsc2NyZWVuV2luZG93SXNTaG93aW5nKQotewotICAgIEFT
U0VSVChNQUNIX1BPUlRfVkFMSUQoY2xpZW50UG9ydCkpOwotCi0gICAgTmV0c2NhcGVQbHVnaW5I
b3N0UHJveHkqIGhvc3RQcm94eSA9IHBsdWdpblByb3h5TWFwKCkuZ2V0KGNsaWVudFBvcnQpOwot
ICAgIGlmICghaG9zdFByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAg
aG9zdFByb3h5LT5zZXRGdWxsc2NyZWVuV2luZG93SXNTaG93aW5nKGZ1bGxzY3JlZW5XaW5kb3dJ
c1Nob3dpbmcpOwotCi0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1cm5f
dCBXS1BDU2V0TW9kYWwobWFjaF9wb3J0X3QgY2xpZW50UG9ydCwgYm9vbGVhbl90IG1vZGFsKQot
ewotICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQoY2xpZW50UG9ydCkpOwotCi0gICAgTmV0c2Nh
cGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IHBsdWdpblByb3h5TWFwKCkuZ2V0KGNsaWVu
dFBvcnQpOwotICAgIGlmICghaG9zdFByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJF
OwotCi0gICAgaWYgKCFob3N0UHJveHktPmlzUHJvY2Vzc2luZ1JlcXVlc3RzKCkpIHsKLSAgICAg
ICAgaG9zdFByb3h5LT5zZXRNb2RhbChtb2RhbCk7Ci0gICAgICAgIHJldHVybiBLRVJOX1NVQ0NF
U1M7Ci0gICAgfQotCi0gICAgLy8gRGVmZXIgdGhlIHdvcmsKLSAgICBDRlJ1bkxvb3BQZXJmb3Jt
QmxvY2soQ0ZSdW5Mb29wR2V0TWFpbigpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUsIF57Ci0gICAg
ICAgIGlmIChOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gcGx1Z2luUHJveHlN
YXAoKS5nZXQoY2xpZW50UG9ydCkpCi0gICAgICAgICAgICBob3N0UHJveHktPnNldE1vZGFsKG1v
ZGFsKTsKLSAgICB9KTsKLQotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci19Ci0KLWtlcm5fcmV0
dXJuX3QgV0tQQ0dldENvb2tpZXMobWFjaF9wb3J0X3QgY2xpZW50UG9ydCwgdWludDMyX3QgcGx1
Z2luSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCB1cmxEYXRhLCBtYWNo
X21zZ190eXBlX251bWJlcl90IHVybExlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbGVhbl90KiByZXR1cm5WYWx1ZSwgZGF0YV90KiBjb29raWVzRGF0YSwgbWFjaF9tc2df
dHlwZV9udW1iZXJfdCogY29va2llc0xlbmd0aCkKLXsKLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZB
TElEKGNsaWVudFBvcnQpKTsKLQotICAgICpjb29raWVzRGF0YSA9IG51bGxwdHI7Ci0gICAgKmNv
b2tpZXNMZW5ndGggPSAwOwotICAgIAotICAgIERhdGFEZWFsbG9jYXRvciBkZWFsbG9jYXRvcih1
cmxEYXRhLCB1cmxMZW5ndGgpOwotICAgIAotICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBo
b3N0UHJveHkgPSBwbHVnaW5Qcm94eU1hcCgpLmdldChjbGllbnRQb3J0KTsKLSAgICBpZiAoIWhv
c3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHkqIGluc3RhbmNlUHJveHkgPSBob3N0UHJveHktPnBsdWdpbklu
c3RhbmNlKHBsdWdpbklEKTsKLSAgICBpZiAoIWluc3RhbmNlUHJveHkpCi0gICAgICAgIHJldHVy
biBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAgKnJldHVyblZhbHVlID0gaW5zdGFuY2VQcm94eS0+
Z2V0Q29va2llcyh1cmxEYXRhLCB1cmxMZW5ndGgsICpjb29raWVzRGF0YSwgKmNvb2tpZXNMZW5n
dGgpOwotICAgIAotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci19Ci0KLWtlcm5fcmV0dXJuX3Qg
V0tQQ0dldFByb3h5KG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQzMl90IHBsdWdpbklELAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90IHVybERhdGEsIG1hY2hfbXNnX3R5cGVf
bnVtYmVyX3QgdXJsTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbl90
KiByZXR1cm5WYWx1ZSwgZGF0YV90KiBwcm94eURhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3Qq
IHByb3h5TGVuZ3RoKQotewotICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQoY2xpZW50UG9ydCkp
OwotCi0gICAgKnByb3h5RGF0YSA9IG51bGxwdHI7Ci0gICAgKnByb3h5TGVuZ3RoID0gMDsKLSAg
ICAKLSAgICBEYXRhRGVhbGxvY2F0b3IgZGVhbGxvY2F0b3IodXJsRGF0YSwgdXJsTGVuZ3RoKTsK
LSAgICAKLSAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gcGx1Z2luUHJv
eHlNYXAoKS5nZXQoY2xpZW50UG9ydCk7Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJl
dHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
KiBpbnN0YW5jZVByb3h5ID0gaG9zdFByb3h5LT5wbHVnaW5JbnN0YW5jZShwbHVnaW5JRCk7Ci0g
ICAgaWYgKCFpbnN0YW5jZVByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAg
IAotICAgICpyZXR1cm5WYWx1ZSA9IGluc3RhbmNlUHJveHktPmdldFByb3h5KHVybERhdGEsIHVy
bExlbmd0aCwgKnByb3h5RGF0YSwgKnByb3h5TGVuZ3RoKTsKLSAgICAKLSAgICByZXR1cm4gS0VS
Tl9TVUNDRVNTOwotfQotCi1rZXJuX3JldHVybl90IFdLUENTZXRDb29raWVzKG1hY2hfcG9ydF90
IGNsaWVudFBvcnQsIHVpbnQzMl90IHBsdWdpbklELAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhX3QgdXJsRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCB1cmxMZW5ndGgsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCBjb29raWVzRGF0YSwgbWFjaF9tc2df
dHlwZV9udW1iZXJfdCBjb29raWVzTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sZWFuX3QqIHJldHVyblZhbHVlKQotewotICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQo
Y2xpZW50UG9ydCkpOwotCi0gICAgRGF0YURlYWxsb2NhdG9yIHVybERlYWxsb2NhdG9yKHVybERh
dGEsIHVybExlbmd0aCk7Ci0gICAgRGF0YURlYWxsb2NhdG9yIGNvb2tpZXNEZWFsbG9jYXRvcihj
b29raWVzRGF0YSwgY29va2llc0xlbmd0aCk7Ci0gCi0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJv
eHkqIGhvc3RQcm94eSA9IHBsdWdpblByb3h5TWFwKCkuZ2V0KGNsaWVudFBvcnQpOwotICAgIGlm
ICghaG9zdFByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAgIAotICAgIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSogaW5zdGFuY2VQcm94eSA9IGhvc3RQcm94eS0+cGx1
Z2luSW5zdGFuY2UocGx1Z2luSUQpOwotICAgIGlmICghaW5zdGFuY2VQcm94eSkKLSAgICAgICAg
cmV0dXJuIEtFUk5fRkFJTFVSRTsKLQotICAgICpyZXR1cm5WYWx1ZSA9IGluc3RhbmNlUHJveHkt
PnNldENvb2tpZXModXJsRGF0YSwgdXJsTGVuZ3RoLCBjb29raWVzRGF0YSwgY29va2llc0xlbmd0
aCk7Ci0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1cm5fdCBXS1BDR2V0
QXV0aGVudGljYXRpb25JbmZvKG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQzMl90IHBsdWdp
bklELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCBwcm90
b2NvbERhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgcHJvdG9jb2xMZW5ndGgsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90IGhvc3REYXRhLCBtYWNoX21z
Z190eXBlX251bWJlcl90IGhvc3RMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDMyX3QgcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhX3Qgc2NoZW1lRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCBzY2hl
bWVMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90
IHJlYWxtRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCByZWFsbUxlbmd0aCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuX3QqIHJldHVyblZhbHVlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCogdXNlcm5hbWVE
YXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90ICp1c2VybmFtZUxlbmd0aCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QqIHBhc3N3b3JkRGF0YSwgbWFjaF9t
c2dfdHlwZV9udW1iZXJfdCAqcGFzc3dvcmRMZW5ndGgpCi17Ci0gICAgQVNTRVJUKE1BQ0hfUE9S
VF9WQUxJRChjbGllbnRQb3J0KSk7Ci0KLSAgICBEYXRhRGVhbGxvY2F0b3IgcHJvdG9jb2xEZWFs
bG9jYXRvcihwcm90b2NvbERhdGEsIHByb3RvY29sTGVuZ3RoKTsKLSAgICBEYXRhRGVhbGxvY2F0
b3IgaG9zdERlYWxsb2NhdG9yKGhvc3REYXRhLCBob3N0TGVuZ3RoKTsKLSAgICBEYXRhRGVhbGxv
Y2F0b3Igc2NoZW1lRGVhbGxvY2F0b3Ioc2NoZW1lRGF0YSwgc2NoZW1lTGVuZ3RoKTsKLSAgICBE
YXRhRGVhbGxvY2F0b3IgcmVhbG1EZWFsbG9jYXRvcihyZWFsbURhdGEsIHJlYWxtTGVuZ3RoKTsK
LQotICAgICp1c2VybmFtZURhdGEgPSBudWxscHRyOwotICAgICp1c2VybmFtZUxlbmd0aCA9IDA7
Ci0gICAgKnBhc3N3b3JkRGF0YSA9IG51bGxwdHI7Ci0gICAgKnBhc3N3b3JkTGVuZ3RoID0gMDsK
LSAgICAKLSAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gcGx1Z2luUHJv
eHlNYXAoKS5nZXQoY2xpZW50UG9ydCk7Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJl
dHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
KiBpbnN0YW5jZVByb3h5ID0gaG9zdFByb3h5LT5wbHVnaW5JbnN0YW5jZShwbHVnaW5JRCk7Ci0g
ICAgaWYgKCFpbnN0YW5jZVByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAg
IAotICAgICpyZXR1cm5WYWx1ZSA9IGluc3RhbmNlUHJveHktPmdldEF1dGhlbnRpY2F0aW9uSW5m
byhwcm90b2NvbERhdGEsIGhvc3REYXRhLCBwb3J0LCBzY2hlbWVEYXRhLCByZWFsbURhdGEsICp1
c2VybmFtZURhdGEsICp1c2VybmFtZUxlbmd0aCwgKnBhc3N3b3JkRGF0YSwgKnBhc3N3b3JkTGVu
Z3RoKTsKLSAgICAKLSAgICByZXR1cm4gS0VSTl9TVUNDRVNTOwotfQotCi1rZXJuX3JldHVybl90
IFdLUENDb252ZXJ0UG9pbnQobWFjaF9wb3J0X3QgY2xpZW50UG9ydCwgdWludDMyX3QgcGx1Z2lu
SUQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBzb3VyY2VYLCBkb3Vi
bGUgc291cmNlWSwgdWludDMyX3Qgc291cmNlU3BhY2UsIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90IGRlc3RTcGFjZSwgYm9vbGVhbl90ICpyZXR1cm5WYWx1ZSwgZG91
YmxlICpkZXN0WCwgZG91YmxlICpkZXN0WSkKLXsKLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElE
KGNsaWVudFBvcnQpKTsKLQotICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkg
PSBwbHVnaW5Qcm94eU1hcCgpLmdldChjbGllbnRQb3J0KTsKLSAgICBpZiAoIWhvc3RQcm94eSkK
LSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHkqIGluc3RhbmNlUHJveHkgPSBob3N0UHJveHktPnBsdWdpbkluc3RhbmNlKHBs
dWdpbklEKTsKLSAgICBpZiAoIWluc3RhbmNlUHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZB
SUxVUkU7Ci0KLSAgICAqcmV0dXJuVmFsdWUgPSBpbnN0YW5jZVByb3h5LT5jb252ZXJ0UG9pbnQo
c291cmNlWCwgc291cmNlWSwgc3RhdGljX2Nhc3Q8TlBDb29yZGluYXRlU3BhY2U+KHNvdXJjZVNw
YWNlKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpk
ZXN0WCwgKmRlc3RZLCBzdGF0aWNfY2FzdDxOUENvb3JkaW5hdGVTcGFjZT4oZGVzdFNwYWNlKSk7
Ci0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1cm5fdCBXS1BDTGF5ZXJI
b3N0aW5nTW9kZUNoYW5nZWQobWFjaF9wb3J0X3QgY2xpZW50UG9ydCwgdWludDMyX3QgcGx1Z2lu
SUQsIGJvb2xlYW5fdCBob3N0c0xheWVyc0luV2luZG93U2VydmVyLCB1aW50MzJfdCByZW5kZXJD
b250ZXh0SUQpCi17Ci0gICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJRChjbGllbnRQb3J0KSk7Ci0K
LSAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gcGx1Z2luUHJveHlNYXAo
KS5nZXQoY2xpZW50UG9ydCk7Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBL
RVJOX0ZBSUxVUkU7Ci0KLSAgICBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIGluc3RhbmNl
UHJveHkgPSBob3N0UHJveHktPnBsdWdpbkluc3RhbmNlKHBsdWdpbklEKTsKLSAgICBpZiAoIWlu
c3RhbmNlUHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0KLSAgICBpbnN0YW5j
ZVByb3h5LT5sYXllckhvc3RpbmdNb2RlQ2hhbmdlZChob3N0c0xheWVyc0luV2luZG93U2VydmVy
LCByZW5kZXJDb250ZXh0SUQpOwotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci19Ci0KLQota2Vy
bl9yZXR1cm5fdCBXS1BDU2V0RXhjZXB0aW9uKG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIGRhdGFf
dCBtZXNzYWdlLCBtYWNoX21zZ190eXBlX251bWJlcl90IG1lc3NhZ2VDbnQpCi17Ci0gICAgQVNT
RVJUKE1BQ0hfUE9SVF9WQUxJRChjbGllbnRQb3J0KSk7Ci0KLSAgICBEYXRhRGVhbGxvY2F0b3Ig
ZGVhbGxvY2F0b3IobWVzc2FnZSwgbWVzc2FnZUNudCk7Ci0KLSAgICBOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6OnNldEdsb2JhbEV4Y2VwdGlvbihTdHJpbmc6OmZyb21VVEY4V2l0aExhdGlu
MUZhbGxiYWNrKG1lc3NhZ2UsIG1lc3NhZ2VDbnQpKTsKLQotICAgIHJldHVybiBLRVJOX1NVQ0NF
U1M7Ci19Ci0KLSNlbmRpZiAvLyBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykgJiYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9Q
bHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkuaCBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTA1ZWQyMTNhNWNmYzJkMjhhYjIyYTcx
YzA5MDNmMWIyZTRlMGNkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzY4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
IFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKQotCi0jaWZuZGVmIE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eV9oCi0jZGVmaW5lIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eV9oCi0KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JZGVudGlmaWVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVk0uaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdHJvbmcuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1RpbWVyLmg+Ci0jaW5jbHVkZSA8V2ViS2l0TGVnYWN5L25wYXBpLmg+Ci0jaW5jbHVk
ZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlICJXZWJLaXRQbHVnaW5I
b3N0VHlwZXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0gICAgbmFtZXNwYWNlIEJpbmRpbmdzIHsK
LSAgICAgICAgY2xhc3MgSW5zdGFuY2U7Ci0gICAgICAgIGNsYXNzIFJvb3RPYmplY3Q7Ci0gICAg
fQotICAgIGNsYXNzIEFyZ0xpc3Q7Ci19Ci1AY2xhc3MgV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5W
aWV3OwotQGNsYXNzIFdlYkZyYW1lOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgSG9z
dGVkTmV0c2NhcGVQbHVnaW5TdHJlYW07Ci1jbGFzcyBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eTsK
LWNsYXNzIFBsdWdpblJlcXVlc3Q7Ci1jbGFzcyBQcm94eUluc3RhbmNlOwotICAgIAotY2xhc3Mg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5IDogcHVibGljIFJlZkNvdW50ZWQ8TmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk+IGNyZWF0ZShOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSosIFdlYkhv
c3RlZE5ldHNjYXBlUGx1Z2luVmlldyAqLCBib29sIGZ1bGxGcmFtZVBsdWdpbik7Ci0gICAgfk5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSgpOwotICAgIAotICAgIHVpbnQzMl90IHBsdWdpbklE
KCkgY29uc3QgCi0gICAgewotICAgICAgICBBU1NFUlQobV9wbHVnaW5JRCk7Ci0gICAgICAgIAot
ICAgICAgICByZXR1cm4gbV9wbHVnaW5JRDsKLSAgICB9Ci0gICAgdWludDMyX3QgcmVuZGVyQ29u
dGV4dElEKCkgY29uc3QgeyBBU1NFUlQoZmFzdE1hbGxvY1NpemUodGhpcykpOyByZXR1cm4gbV9y
ZW5kZXJDb250ZXh0SUQ7IH0KLSAgICB2b2lkIHNldFJlbmRlckNvbnRleHRJRCh1aW50MzJfdCBy
ZW5kZXJDb250ZXh0SUQpIHsgbV9yZW5kZXJDb250ZXh0SUQgPSByZW5kZXJDb250ZXh0SUQ7IH0K
LSAgICAKLSAgICBSZW5kZXJlclR5cGUgcmVuZGVyZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9y
ZW5kZXJlclR5cGU7IH0KLSAgICB2b2lkIHNldFJlbmRlcmVyVHlwZShSZW5kZXJlclR5cGUgcmVu
ZGVyZXJUeXBlKSB7IG1fcmVuZGVyZXJUeXBlID0gcmVuZGVyZXJUeXBlOyB9Ci0gICAgCi0gICAg
V2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3ICpwbHVnaW5WaWV3KCkgY29uc3QgeyBBU1NFUlQo
ZmFzdE1hbGxvY1NpemUodGhpcykpOyByZXR1cm4gbV9wbHVnaW5WaWV3OyB9Ci0gICAgTmV0c2Nh
cGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSgpIGNvbnN0IHsgQVNTRVJUKGZhc3RNYWxsb2NT
aXplKHRoaXMpKTsgcmV0dXJuIG1fcGx1Z2luSG9zdFByb3h5OyB9Ci0gICAgCi0gICAgYm9vbCBj
YW5jZWxTdHJlYW1Mb2FkKHVpbnQzMl90IHN0cmVhbUlELCBOUFJlYXNvbik7Ci0gICAgdm9pZCBk
aXNjb25uZWN0U3RyZWFtKEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtKik7Ci0gICAgCi0gICAg
dm9pZCBzZXRNYW51YWxTdHJlYW0oUmVmPEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtPiYmKTsK
LSAgICBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbSogbWFudWFsU3RyZWFtKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYW51YWxTdHJlYW0uZ2V0KCk7IH0KLSAgICAKLSAgICB2b2lkIHBsdWdpbkhvc3RE
aWVkKCk7Ci0gICAgCi0gICAgdm9pZCByZXNpemUoTlNSZWN0IHNpemUsIE5TUmVjdCBjbGlwUmVj
dCk7Ci0gICAgdm9pZCBkZXN0cm95KCk7Ci0gICAgdm9pZCBmb2N1c0NoYW5nZWQoYm9vbCBoYXNG
b2N1cyk7Ci0gICAgdm9pZCB3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCBoYXNGb2N1cyk7Ci0gICAg
dm9pZCB3aW5kb3dGcmFtZUNoYW5nZWQoTlNSZWN0IGZyYW1lKTsKLQotICAgIHZvaWQgc2V0U2hv
dWxkSG9zdExheWVyc0luV2luZG93U2VydmVyKGJvb2wpOwotICAgIHZvaWQgbGF5ZXJIb3N0aW5n
TW9kZUNoYW5nZWQoYm9vbCBob3N0c0xheWVyc0luV2luZG93U2VydmVyLCB1aW50MzJfdCByZW5k
ZXJDb250ZXh0SUQpOwotICAgIAotICAgIHZvaWQgbW91c2VFdmVudChOU1ZpZXcgKnBsdWdpblZp
ZXcsIE5TRXZlbnQgKiwgTlBDb2NvYUV2ZW50VHlwZSk7Ci0gICAgdm9pZCBrZXlFdmVudChOU1Zp
ZXcgKnBsdWdpblZpZXcsIE5TRXZlbnQgKiwgTlBDb2NvYUV2ZW50VHlwZSk7Ci0gICAgdm9pZCBp
bnNlcnRUZXh0KE5TU3RyaW5nICopOwotICAgIGJvb2wgd2hlZWxFdmVudChOU1ZpZXcgKnBsdWdp
blZpZXcsIE5TRXZlbnQgKik7Ci0gICAgdm9pZCBzeW50aGV0aWNLZXlEb3duV2l0aENvbW1hbmRN
b2RpZmllcihpbnQga2V5Q29kZSwgY2hhciBjaGFyYWN0ZXIpOwotICAgIHZvaWQgZmxhZ3NDaGFu
Z2VkKE5TRXZlbnQgKik7Ci0gICAgdm9pZCBwcmludChDR0NvbnRleHRSZWYsIHVuc2lnbmVkIHdp
ZHRoLCB1bnNpZ25lZCBoZWlnaHQpOwotICAgIHZvaWQgc25hcHNob3QoQ0dDb250ZXh0UmVmLCB1
bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKLSAgICAKLSAgICB2b2lkIHN0YXJ0VGlt
ZXJzKGJvb2wgdGhyb3R0bGVUaW1lcnMpOwotICAgIHZvaWQgc3RvcFRpbWVycygpOwotICAgIAot
ICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgd2lkdGgs
IGRvdWJsZSBoZWlnaHQpOwotICAgIAotICAgIC8vIE5QUnVudGltZQotICAgIGJvb2wgZ2V0V2lu
ZG93TlBPYmplY3QodWludDMyX3QmIG9iamVjdElEKTsKLSAgICBib29sIGdldFBsdWdpbkVsZW1l
bnROUE9iamVjdCh1aW50MzJfdCYgb2JqZWN0SUQpOwotICAgIGJvb2wgZm9yZ2V0QnJvd3Nlck9i
amVjdElEKHVpbnQzMl90IG9iamVjdElEKTsgLy8gV2lsbCBmYWlsIGlmIHRoZSBJRCBpcyBiZWlu
ZyBzZW50IHRvIHBsdWctaW4gcmlnaHQgbm93IChpLmUuLCByZXRhaW4vcmVsZWFzZSBjYWxscyBh
cmVuJ3QgYmFsYW5jZWQpLgotCi0gICAgYm9vbCBldmFsdWF0ZSh1aW50MzJfdCBvYmplY3RJRCwg
Y29uc3QgV1RGOjpTdHJpbmcmIHNjcmlwdCwgZGF0YV90JiByZXN1bHREYXRhLCBtYWNoX21zZ190
eXBlX251bWJlcl90JiByZXN1bHRMZW5ndGgsIGJvb2wgYWxsb3dQb3B1cHMpOwotICAgIGJvb2wg
aW52b2tlKHVpbnQzMl90IG9iamVjdElELCBjb25zdCBKU0M6OklkZW50aWZpZXImIG1ldGhvZE5h
bWUsIGRhdGFfdCBhcmd1bWVudHNEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90IGFyZ3VtZW50
c0xlbmd0aCwgZGF0YV90JiByZXN1bHREYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90JiByZXN1
bHRMZW5ndGgpOwotICAgIGJvb2wgaW52b2tlRGVmYXVsdCh1aW50MzJfdCBvYmplY3RJRCwgZGF0
YV90IGFyZ3VtZW50c0RhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgYXJndW1lbnRzTGVuZ3Ro
LCBkYXRhX3QmIHJlc3VsdERhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QmIHJlc3VsdExlbmd0
aCk7Ci0gICAgYm9vbCBjb25zdHJ1Y3QodWludDMyX3Qgb2JqZWN0SUQsIGRhdGFfdCBhcmd1bWVu
dHNEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90IGFyZ3VtZW50c0xlbmd0aCwgZGF0YV90JiBy
ZXN1bHREYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90JiByZXN1bHRMZW5ndGgpOwotICAgIGJv
b2wgZW51bWVyYXRlKHVpbnQzMl90IG9iamVjdElELCBkYXRhX3QmIHJlc3VsdERhdGEsIG1hY2hf
bXNnX3R5cGVfbnVtYmVyX3QmIHJlc3VsdExlbmd0aCk7Ci0gICAgCi0gICAgYm9vbCBnZXRQcm9w
ZXJ0eSh1aW50MzJfdCBvYmplY3RJRCwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGRhdGFfdCAmcmVzdWx0RGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCYgcmVzdWx0TGVu
Z3RoKTsKLSAgICBib29sIGdldFByb3BlcnR5KHVpbnQzMl90IG9iamVjdElELCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIGRhdGFfdCAmcmVzdWx0RGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCYg
cmVzdWx0TGVuZ3RoKTsgICAgCi0gICAgYm9vbCBzZXRQcm9wZXJ0eSh1aW50MzJfdCBvYmplY3RJ
RCwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGRhdGFfdCB2YWx1ZURhdGEs
IG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgdmFsdWVMZW5ndGgpOwotICAgIGJvb2wgc2V0UHJvcGVy
dHkodWludDMyX3Qgb2JqZWN0SUQsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgZGF0YV90IHZhbHVl
RGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCB2YWx1ZUxlbmd0aCk7Ci0gICAgYm9vbCByZW1v
dmVQcm9wZXJ0eSh1aW50MzJfdCBvYmplY3RJRCwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUpOwotICAgIGJvb2wgcmVtb3ZlUHJvcGVydHkodWludDMyX3Qgb2JqZWN0SUQsIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSk7Ci0gICAgYm9vbCBoYXNQcm9wZXJ0eSh1aW50MzJfdCBvYmpl
Y3RJRCwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwotICAgIGJvb2wgaGFz
UHJvcGVydHkodWludDMyX3Qgb2JqZWN0SUQsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7Ci0gICAg
Ym9vbCBoYXNNZXRob2QodWludDMyX3Qgb2JqZWN0SUQsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYg
bWV0aG9kTmFtZSk7Ci0gICAgCi0gICAgdm9pZCBzdGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSk7
Ci0gICAgTlBFcnJvciBsb2FkVVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0
LCBjb25zdCBjaGFyKiBwb3N0RGF0YSwgdWludDMyX3QgcG9zdERhdGFMZW5ndGgsIExvYWRVUkxG
bGFncywgdWludDMyX3QmIHJlcXVlc3RJRCk7Ci0KLSAgICBib29sIGdldENvb2tpZXMoZGF0YV90
IHVybERhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgdXJsTGVuZ3RoLCBkYXRhX3QmIGNvb2tp
ZXNEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90JiBjb29raWVzTGVuZ3RoKTsKLSAgICBib29s
IHNldENvb2tpZXMoZGF0YV90IHVybERhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgdXJsTGVu
Z3RoLCBkYXRhX3QgY29va2llc0RhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgY29va2llc0xl
bmd0aCk7Ci0gICAgICAgICAgICAgCi0gICAgYm9vbCBnZXRQcm94eShkYXRhX3QgdXJsRGF0YSwg
bWFjaF9tc2dfdHlwZV9udW1iZXJfdCB1cmxMZW5ndGgsIGRhdGFfdCYgcHJveHlEYXRhLCBtYWNo
X21zZ190eXBlX251bWJlcl90JiBwcm94eUxlbmd0aCk7Ci0gICAgYm9vbCBnZXRBdXRoZW50aWNh
dGlvbkluZm8oZGF0YV90IHByb3RvY29sRGF0YSwgZGF0YV90IGhvc3REYXRhLCB1aW50MzJfdCBw
b3J0LCBkYXRhX3Qgc2NoZW1lRGF0YSwgZGF0YV90IHJlYWxtRGF0YSwgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YV90JiB1c2VybmFtZURhdGEsIG1hY2hfbXNnX3R5cGVfbnVt
YmVyX3QmIHVzZXJuYW1lTGVuZ3RoLCBkYXRhX3QmIHBhc3N3b3JkRGF0YSwgbWFjaF9tc2dfdHlw
ZV9udW1iZXJfdCYgcGFzc3dvcmRMZW5ndGgpOwotICAgIGJvb2wgY29udmVydFBvaW50KGRvdWJs
ZSBzb3VyY2VYLCBkb3VibGUgc291cmNlWSwgTlBDb29yZGluYXRlU3BhY2Ugc291cmNlU3BhY2Us
IAotICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSYgZGVzdFgsIGRvdWJsZSYgZGVzdFksIE5Q
Q29vcmRpbmF0ZVNwYWNlIGRlc3RTcGFjZSk7Ci0KLSAgICBSZWZQdHI8SlNDOjpCaW5kaW5nczo6
SW5zdGFuY2U+IGNyZWF0ZUJpbmRpbmdzSW5zdGFuY2UoUmVmPEpTQzo6QmluZGluZ3M6OlJvb3RP
YmplY3Q+JiYpOwotICAgIFJldGFpblB0cjxOU0RhdGE+IG1hcnNoYWxWYWx1ZXMoSlNDOjpKU0ds
b2JhbE9iamVjdCosIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncyk7Ci0gICAgdm9pZCBtYXJzaGFs
VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6SlNWYWx1ZSwgZGF0YV90JiByZXN1bHRE
YXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90JiByZXN1bHRMZW5ndGgpOwotICAgIEpTQzo6SlNW
YWx1ZSBkZW1hcnNoYWxWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgY2hhciogdmFs
dWVEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90IHZhbHVlTGVuZ3RoKTsKLQotICAgIC8vIE5v
LW9wIGlmIHRoZSB2YWx1ZSBkb2VzIG5vdCBjb250YWluIGEgbG9jYWwgb2JqZWN0LgotICAgIHZv
aWQgcmV0YWluTG9jYWxPYmplY3QoSlNDOjpKU1ZhbHVlKTsKLSAgICB2b2lkIHJlbGVhc2VMb2Nh
bE9iamVjdChKU0M6OkpTVmFsdWUpOwotCi0gICAgdm9pZCBhZGRJbnN0YW5jZShQcm94eUluc3Rh
bmNlKik7Ci0gICAgdm9pZCByZW1vdmVJbnN0YW5jZShQcm94eUluc3RhbmNlKik7Ci0gICAgCi0g
ICAgdm9pZCBjbGVhbnVwKCk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlKCk7Ci0gICAgCi0gICAgdm9p
ZCB3aWxsQ2FsbFBsdWdpbkZ1bmN0aW9uKCk7Ci0gICAgdm9pZCBkaWRDYWxsUGx1Z2luRnVuY3Rp
b24oYm9vbCYgc3RvcHBlZCk7Ci0gICAgYm9vbCBzaG91bGRTdG9wKCk7Ci0gICAgCi0gICAgdWlu
dDMyX3QgbmV4dFJlcXVlc3RJRCgpOwotCi0gICAgdm9pZCBkaWREcmF3KCk7Ci0gICAgdm9pZCBw
cml2YXRlQnJvd3NpbmdNb2RlRGlkQ2hhbmdlKGJvb2wgaXNQcml2YXRlQnJvd3NpbmdFbmFibGVk
KTsKLSAgICAKLSAgICBzdGF0aWMgdm9pZCBzZXRHbG9iYWxFeGNlcHRpb24oY29uc3QgV1RGOjpT
dHJpbmcmKTsKLSAgICBzdGF0aWMgdm9pZCBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUo
SlNDOjpKU0dsb2JhbE9iamVjdCopOwotCi0gICAgLy8gUmVwbHkgc3RydWN0cwotICAgIHN0cnVj
dCBSZXBseSB7Ci0gICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKLSAgICAg
ICAgZW51bSBUeXBlIHsKLSAgICAgICAgICAgIEluc3RhbnRpYXRlUGx1Z2luLAotICAgICAgICAg
ICAgR2V0U2NyaXB0YWJsZU5QT2JqZWN0LAotICAgICAgICAgICAgQm9vbGVhbkFuZERhdGEsCi0g
ICAgICAgICAgICBCb29sZWFuCi0gICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICBSZXBseShU
eXBlIHR5cGUpIAotICAgICAgICAgICAgOiBtX3R5cGUodHlwZSkKLSAgICAgICAgewotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICB2aXJ0dWFsIH5SZXBseSgpIHsgfQotICAgIAotICAgICAg
ICBUeXBlIG1fdHlwZTsKLSAgICB9OwotCi0gICAgc3RydWN0IEluc3RhbnRpYXRlUGx1Z2luUmVw
bHkgOiBwdWJsaWMgUmVwbHkgewotICAgICAgICBzdGF0aWMgY29uc3QgaW50IFJlcGx5VHlwZSA9
IEluc3RhbnRpYXRlUGx1Z2luOwotICAgICAgICAKLSAgICAgICAgSW5zdGFudGlhdGVQbHVnaW5S
ZXBseShrZXJuX3JldHVybl90IHJlc3VsdENvZGUsIHVpbnQzMl90IHJlbmRlckNvbnRleHRJRCwg
UmVuZGVyZXJUeXBlIHJlbmRlcmVyVHlwZSkKLSAgICAgICAgICAgIDogUmVwbHkoSW5zdGFudGlh
dGVQbHVnaW4pCi0gICAgICAgICAgICAsIG1fcmVzdWx0Q29kZShyZXN1bHRDb2RlKQotICAgICAg
ICAgICAgLCBtX3JlbmRlckNvbnRleHRJRChyZW5kZXJDb250ZXh0SUQpCi0gICAgICAgICAgICAs
IG1fcmVuZGVyZXJUeXBlKHJlbmRlcmVyVHlwZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgIAotICAgICAgICBrZXJuX3JldHVybl90IG1fcmVzdWx0Q29kZTsKLSAgICAg
ICAgdWludDMyX3QgbV9yZW5kZXJDb250ZXh0SUQ7Ci0gICAgICAgIFJlbmRlcmVyVHlwZSBtX3Jl
bmRlcmVyVHlwZTsKLSAgICB9OwotCi0gICAgc3RydWN0IEdldFNjcmlwdGFibGVOUE9iamVjdFJl
cGx5IDogcHVibGljIFJlcGx5IHsKLSAgICAgICAgc3RhdGljIGNvbnN0IFJlcGx5OjpUeXBlIFJl
cGx5VHlwZSA9IEdldFNjcmlwdGFibGVOUE9iamVjdDsKLSAgICAgICAgCi0gICAgICAgIEdldFNj
cmlwdGFibGVOUE9iamVjdFJlcGx5KHVpbnQzMl90IG9iamVjdElEKQotICAgICAgICAgICAgOiBS
ZXBseShSZXBseVR5cGUpCi0gICAgICAgICAgICAsIG1fb2JqZWN0SUQob2JqZWN0SUQpCi0gICAg
ICAgIHsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIHVpbnQzMl90IG1fb2JqZWN0
SUQ7Ci0gICAgfTsKLSAgICAKLSAgICBzdHJ1Y3QgQm9vbGVhblJlcGx5IDogcHVibGljIFJlcGx5
IHsKLSAgICAgICAgc3RhdGljIGNvbnN0IFJlcGx5OjpUeXBlIFJlcGx5VHlwZSA9IEJvb2xlYW47
Ci0gICAgICAgIAotICAgICAgICBCb29sZWFuUmVwbHkoYm9vbGVhbl90IHJlc3VsdCkKLSAgICAg
ICAgICAgIDogUmVwbHkoUmVwbHlUeXBlKQotICAgICAgICAgICAgLCBtX3Jlc3VsdChyZXN1bHQp
Ci0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYm9vbGVhbl90IG1fcmVz
dWx0OwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgQm9vbGVhbkFuZERhdGFSZXBseSA6IHB1YmxpYyBS
ZXBseSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBSZXBseTo6VHlwZSBSZXBseVR5cGUgPSBCb29s
ZWFuQW5kRGF0YTsKLSAgICAgICAgCi0gICAgICAgIEJvb2xlYW5BbmREYXRhUmVwbHkoYm9vbGVh
bl90IHJldHVyblZhbHVlLCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiByZXN1bHQpCi0gICAgICAgICAg
ICA6IFJlcGx5KFJlcGx5VHlwZSkKLSAgICAgICAgICAgICwgbV9yZXR1cm5WYWx1ZShyZXR1cm5W
YWx1ZSkKLSAgICAgICAgICAgICwgbV9yZXN1bHQocmVzdWx0KQotICAgICAgICB7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGJvb2xlYW5fdCBtX3JldHVyblZhbHVlOwotICAgICAgICBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBtX3Jlc3VsdDsKLSAgICB9OwotICAgIAotICAgIHZvaWQgc2V0
Q3VycmVudFJlcGx5KHVpbnQzMl90IHJlcXVlc3RJRCwgc3RkOjp1bmlxdWVfcHRyPFJlcGx5PiBy
ZXBseSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9yZXBsaWVzLmNvbnRhaW5zKHJlcXVlc3RJ
RCkpOwotICAgICAgICBtX3JlcGxpZXMuYWRkKHJlcXVlc3RJRCwgV1RGTW92ZShyZXBseSkpOwot
ICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8VD4gd2FpdEZvclJlcGx5KHVpbnQzMl90IHJlcXVlc3RJRCkKLSAgICB7Ci0gICAgICAgIFJl
ZjxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk+IHByb3RlY3QoKnRoaXMpOyAvLyBQbHVnLWlu
IGhvc3QgbWF5IGNyYXNoIHdoaWxlIHdlIGFyZSB3YWl0aW5nIGZvciByZXBseSwgcmVsZWFzaW5n
IGFsbCBpbnN0YW5jZXMgdG8gdGhlIGluc3RhbmNlIHByb3h5LgotCi0gICAgICAgIHdpbGxDYWxs
UGx1Z2luRnVuY3Rpb24oKTsKLSAgICAgICAgbV93YWl0aW5nRm9yUmVwbHkgPSB0cnVlOwotCi0g
ICAgICAgIGF1dG8gcmVwbHkgPSBwcm9jZXNzUmVxdWVzdHNBbmRXYWl0Rm9yUmVwbHkocmVxdWVz
dElEKTsKLSAgICAgICAgaWYgKHJlcGx5KQotICAgICAgICAgICAgQVNTRVJUKHJlcGx5LT5tX3R5
cGUgPT0gVDo6UmVwbHlUeXBlKTsKLSAgICAgICAgCi0gICAgICAgIG1fd2FpdGluZ0ZvclJlcGx5
ID0gZmFsc2U7Ci0KLSAgICAgICAgYm9vbCBzdG9wcGVkID0gZmFsc2U7Ci0gICAgICAgIGRpZENh
bGxQbHVnaW5GdW5jdGlvbihzdG9wcGVkKTsKLSAgICAgICAgaWYgKHN0b3BwZWQpIHsKLSAgICAg
ICAgICAgIC8vIFRoZSBpbnN0YW5jZSBwcm94eSBtYXkgaGF2ZSBiZWVuIGRlbGV0ZWQgZnJvbSBk
aWRDYWxsUGx1Z2luRnVuY3Rpb24oKSwgc28gYSBudWxsIHJlcGx5IG5lZWRzIHRvIGJlIHJldHVy
bmVkLgotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFQ+KHN0YXRpY19jYXN0PFQqPihyZXBseS5yZWxlYXNlKCkp
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCB3ZWJGcmFtZURpZEZpbmlzaExvYWRXaXRoUmVhc29u
KFdlYkZyYW1lKiwgTlBSZWFzb24pOwotCi1wcml2YXRlOgotICAgIE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eShOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSosIFdlYkhvc3RlZE5ldHNjYXBlUGx1
Z2luVmlldyosIGJvb2wgZnVsbEZyYW1lUGx1Z2luKTsKLQotICAgIE5QRXJyb3IgbG9hZFJlcXVl
c3QoTlNVUkxSZXF1ZXN0KiwgY29uc3QgY2hhciogY1RhcmdldCwgYm9vbCBjdXJyZW50RXZlbnRJ
c1VzZXJHZXN0dXJlLCB1aW50MzJfdCYgc3RyZWFtSUQpOwotICAgIAotICAgIGNsYXNzIFBsdWdp
blJlcXVlc3Q7Ci0gICAgdm9pZCBwZXJmb3JtUmVxdWVzdChQbHVnaW5SZXF1ZXN0Kik7Ci0gICAg
dm9pZCBldmFsdWF0ZUphdmFTY3JpcHQoUGx1Z2luUmVxdWVzdCopOwotICAgIAotICAgIHZvaWQg
c3RvcEFsbFN0cmVhbXMoKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVwbHk+IHByb2Nlc3NSZXF1
ZXN0c0FuZFdhaXRGb3JSZXBseSh1aW50MzJfdCByZXF1ZXN0SUQpOwotICAgIAotICAgIE5ldHNj
YXBlUGx1Z2luSG9zdFByb3h5KiBtX3BsdWdpbkhvc3RQcm94eTsKLSAgICBXZWJIb3N0ZWROZXRz
Y2FwZVBsdWdpblZpZXcgKm1fcGx1Z2luVmlldzsKLQotICAgIHZvaWQgcmVxdWVzdFRpbWVyRmly
ZWQoKTsKLSAgICBXZWJDb3JlOjpUaW1lciBtX3JlcXVlc3RUaW1lcjsKLSAgICBEZXF1ZTxSZWZQ
dHI8UGx1Z2luUmVxdWVzdD4+IG1fcGx1Z2luUmVxdWVzdHM7Ci0gICAgCi0gICAgSGFzaE1hcDx1
aW50MzJfdCwgUmVmUHRyPEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtPj4gbV9zdHJlYW1zOwot
Ci0gICAgdWludDMyX3QgbV9jdXJyZW50VVJMUmVxdWVzdElEOwotICAgIAotICAgIHVpbnQzMl90
IG1fcGx1Z2luSUQ7Ci0gICAgdWludDMyX3QgbV9yZW5kZXJDb250ZXh0SUQ7Ci0gICAgUmVuZGVy
ZXJUeXBlIG1fcmVuZGVyZXJUeXBlOwotICAgIAotICAgIGJvb2wgbV93YWl0aW5nRm9yUmVwbHk7
Ci0gICAgSGFzaE1hcDx1aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPFJlcGx5Pj4gbV9yZXBsaWVz
OwotICAgIAotICAgIC8vIE5QUnVudGltZQotCi0gICAgdm9pZCBhZGRWYWx1ZVRvQXJyYXkoTlNN
dXRhYmxlQXJyYXkgKiwgSlNDOjpKU0dsb2JhbE9iamVjdCogZXhlYywgSlNDOjpKU1ZhbHVlIHZh
bHVlKTsKLSAgICAKLSAgICBib29sIGRlbWFyc2hhbFZhbHVlRnJvbUFycmF5KEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBOU0FycmF5ICphcnJheSwgTlNVSW50ZWdlciYgaW5kZXgsIEpTQzo6SlNWYWx1
ZSYgcmVzdWx0KTsKLSAgICB2b2lkIGRlbWFyc2hhbFZhbHVlcyhKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgZGF0YV90IHZhbHVlc0RhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgdmFsdWVzTGVuZ3Ro
LCBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyQmFzZSYgcmVzdWx0KTsKLQotICAgIGNsYXNzIExv
Y2FsT2JqZWN0TWFwIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTG9jYWxPYmplY3RN
YXApOwotICAgIHB1YmxpYzoKLSAgICAgICAgTG9jYWxPYmplY3RNYXAoKTsKLSAgICAgICAgfkxv
Y2FsT2JqZWN0TWFwKCk7Ci0gICAgICAgIHVpbnQzMl90IGlkRm9yT2JqZWN0KEpTQzo6Vk0mLCBK
U0M6OkpTT2JqZWN0Kik7Ci0gICAgICAgIHZvaWQgcmV0YWluKEpTQzo6SlNPYmplY3QqKTsKLSAg
ICAgICAgdm9pZCByZWxlYXNlKEpTQzo6SlNPYmplY3QqKTsKLSAgICAgICAgdm9pZCBjbGVhcigp
OwotICAgICAgICBib29sIGZvcmdldCh1aW50MzJfdCk7Ci0gICAgICAgIGJvb2wgY29udGFpbnMo
dWludDMyX3QpIGNvbnN0OwotICAgICAgICBKU0M6OkpTT2JqZWN0KiBnZXQodWludDMyX3QpIGNv
bnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgSGFzaE1hcDx1aW50MzJfdCwgSlNDOjpTdHJv
bmc8SlNDOjpKU09iamVjdD4+IG1faWRUb0pTT2JqZWN0TWFwOwotICAgICAgICAvLyBUaGUgcGFp
ciBjb25zaXN0cyBvZiBvYmplY3QgSUQgYW5kIGEgcmVmZXJlbmNlIGNvdW50LiBPbmUgcmVmZXJl
bmNlIGJlbG9uZ3MgdG8gcmVtb3RlIHBsdWctaW4sCi0gICAgICAgIC8vIGFuZCB0aGUgcHJveHkg
d2lsbCBhZGQgdHJhbnNpZW50IHJlZmVyZW5jZXMgZm9yIGFyZ3VtZW50cyB0aGF0IGFyZSBiZWlu
ZyBzZW50IG91dC4KLSAgICAgICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0Kiwgc3RkOjpwYWlyPHVp
bnQzMl90LCB1aW50MzJfdD4+IG1fanNPYmplY3RUb0lETWFwOwotICAgICAgICB1aW50MzJfdCBt
X29iamVjdElEQ291bnRlcjsKLSAgICB9OwotCi0gICAgTG9jYWxPYmplY3RNYXAgbV9sb2NhbE9i
amVjdHM7Ci0KLSAgICB0eXBlZGVmIEhhc2hTZXQ8UHJveHlJbnN0YW5jZSo+IFByb3h5SW5zdGFu
Y2VTZXQ7Ci0gICAgUHJveHlJbnN0YW5jZVNldCBtX2luc3RhbmNlczsKLQotICAgIHVuc2lnbmVk
IG1fcGx1Z2luRnVuY3Rpb25DYWxsRGVwdGg7Ci0gICAgYm9vbCBtX3Nob3VsZFN0b3BTb29uOwot
ICAgIHVpbnQzMl90IG1fY3VycmVudFJlcXVlc3RJRDsKLQotICAgIC8vIEFsbCBOUFJ1bnRpbWUg
ZnVuY3Rpb25zIHdpbGwgcmV0dXJuIGZhbHNlIHdoZW4gZGVzdHJveWluZyBhIHBsdWctaW4uIFRo
aXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlcmUgbWF5IGJlIHVuaGFuZGxlZCBtZXNzYWdlcyB3
YWl0aW5nLAotICAgIC8vIGFuZCBzcGlubmluZyBpbiBwcm9jZXNzUmVxdWVzdHMoKSB3aWxsIHVu
ZXhwZWN0ZWRseSBleGVjdXRlIHRoZW0gZnJvbSBpbnNpZGUgZGVzdHJveSgpLiBUaGF0J3Mgbm90
IGEgZ29vZCB0aW1lIHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IEphdmFTY3JpcHQsCi0gICAgLy8gc2lu
Y2UgYm90aCBsb2FkaW5nIGFuZCByZW5kZXJpbmcgZGF0YSBzdHJ1Y3R1cmVzIG1heSBiZSBpbiBp
bmNvbnNpc3RlbnQgc3RhdGUuCi0gICAgLy8gVGhpcyBzdXBwcmVzc2VzIGNhbGxzIGZyb20gYWxs
IHBsdWctaW5zLCBldmVuIHRob3NlIGluIGRpZmZlcmVudCBwYWdlcywgc2luY2UgSlMgbWlnaHQg
YWZmZWN0IHRoZSBmcmFtZSB3aXRoIHBsdWctaW4gdGhhdCdzIGJlaW5nIHN0b3BwZWQuCi0gICAg
Ly8KLSAgICAvLyBGSVhNRTogUGx1Zy1pbnMgY2FuIGV4ZWN1dGUgYXJiaXRyYXJ5IEpTIGZyb20g
ZGVzdHJveSgpIGluIHNhbWUgcHJvY2VzcyBjYXNlLCBhbmQgb3RoZXIgYnJvd3NlcnMgYWxzbyBz
dXBwb3J0IHRoYXQuCi0gICAgLy8gQSBiZXR0ZXIgZml4IG1heSBiZSB0byBtYWtlIHN1cmUgdGhh
dCB1bnJlbGF0ZWQgbWVzc2FnZXMgYXJlIHBvc3Rwb25lZCB1bnRpbCBhZnRlciBkZXN0cm95KCkg
cmV0dXJucy4KLSAgICAvLyBBbm90aGVyIHBvc3NpYmxlIGZpeCBtYXkgYmUgdG8gc2VuZCBkZXN0
cm95IG1lc3NhZ2UgYXQgYSB0aW1lIHdoZW4gaW50ZXJuYWwgc3RydWN0dXJlcyBhcmUgY29uc2lz
dGVudC4KLSAgICAvLwotICAgIC8vIEZJWE1FOiBXZSBsYWNrIHNpbWlsYXIgbWVzc2FnZSBzdXBw
cmVzc2lvbiBpbiBvdGhlciBjYXNlcyAtIHJlc2l6ZSgpIGlzIGFsc28gdHJpZ2dlcmVkIGJ5IGxh
eW91dCwgc28gZXhlY3V0aW5nIGFyYml0cmFyeSBKUyBpcyBhbHNvIHByb2JsZW1hdGljLgotICAg
IHN0YXRpYyBib29sIG1faW5EZXN0cm95OwotCi0gICAgYm9vbCBtX3BsdWdpbklzV2FpdGluZ0Zv
ckRyYXc7Ci0gICAgCi0gICAgUmVmUHRyPEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtPiBtX21h
bnVhbFN0cmVhbTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJGcmFtZSosIFJlZlB0cjxQbHVn
aW5SZXF1ZXN0Pj4gRnJhbWVMb2FkTWFwOwotICAgIEZyYW1lTG9hZE1hcCBtX3BlbmRpbmdGcmFt
ZUxvYWRzOwotfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5X2gKLSNlbmRpZiAvLyBVU0UoUExVR0lOX0hPU1RfUFJP
Q0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVk
L05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYjJhMjQ4NGVlYWY4NmY0NmFiMTVkMGRkMDlmYmNjYjhhYjI4
ODQzMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHkubW0KKysrIC9kZXYvbnVsbApAQCAtMSwxNjkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWYgVVNFKFBMVUdJTl9IT1NU
X1BST0NFU1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW1wb3J0ICJOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHkuaCIKLQotI2ltcG9ydCAiSG9zdGVkTmV0c2NhcGVQbHVn
aW5TdHJlYW0uaCIKLSNpbXBvcnQgIk5ldHNjYXBlUGx1Z2luSG9zdFByb3h5LmgiCi0jaW1wb3J0
ICJQcm94eUluc3RhbmNlLmgiCi0jaW1wb3J0ICJQcm94eVJ1bnRpbWVPYmplY3QuaCIKLSNpbXBv
cnQgIldlYkRhdGFTb3VyY2VJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5o
IgotI2ltcG9ydCAiV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3LmgiCi0jaW1wb3J0ICJXZWJL
aXROU1N0cmluZ0V4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNEYXRhRXh0cmFzLmgiCi0jaW1wb3J0
ICJXZWJOU1VSTEV4dHJhcy5oIgotI2ltcG9ydCAiV2ViUGx1Z2luUmVxdWVzdC5oIgotI2ltcG9y
dCAiV2ViVUlEZWxlZ2F0ZS5oIgotI2ltcG9ydCAiV2ViVUlEZWxlZ2F0ZVByaXZhdGUuaCIKLSNp
bXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQ2F0Y2hT
Y29wZS5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQ29tcGxldGlvbi5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvRXJyb3IuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTR2xvYmFs
T2JqZWN0SW5saW5lcy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNMb2NrLmg+Ci0jaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvU291cmNlQ29kZS5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvU3Ryb25nSW5s
aW5lcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9Db29raWVKYXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
RG9jdW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvRnJhbWUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvRnJhbWVUcmVlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
UHJveHlTZXJ2ZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2NyaXB0Q29udHJvbGxlci5oPgotI2lt
cG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgotI2ltcG9ydCA8V2ViQ29yZS9Vc2VyR2Vz
dHVyZUluZGljYXRvci5oPgotI2ltcG9ydCA8V2ViQ29yZS9ucHJ1bnRpbWVfaW1wbC5oPgotI2lt
cG9ydCA8V2ViQ29yZS9ydW50aW1lX29iamVjdC5oPgotI2ltcG9ydCA8bWFjaC9tYWNoLmg+Ci0j
aW1wb3J0IDx1dGlsaXR5PgotI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW1wb3J0
IDx3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmg+Ci0jaW1wb3J0IDx3dGYvVVJMLmg+Ci0jaW1w
b3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLWV4dGVybiAiQyIgewotI2ltcG9ydCAiV2ViS2l0
UGx1Z2luQ2xpZW50U2VydmVyLmgiCi0jaW1wb3J0ICJXZWJLaXRQbHVnaW5Ib3N0LmgiCi19Ci0K
LXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci11c2luZyBuYW1lc3BhY2UgSlNDOjpCaW5kaW5nczsKLXVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpQbHVnaW5SZXF1ZXN0IDogcHVibGljIFJlZkNvdW50
ZWQ8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpQbHVnaW5SZXF1ZXN0PiB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxQbHVnaW5SZXF1ZXN0PiBjcmVhdGUodWludDMyX3QgcmVxdWVzdElE
LCBOU1VSTFJlcXVlc3QqIHJlcXVlc3QsIE5TU3RyaW5nKiBmcmFtZU5hbWUsIGJvb2wgYWxsb3dQ
b3B1cHMpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQbHVnaW5SZXF1ZXN0
KHJlcXVlc3RJRCwgcmVxdWVzdCwgZnJhbWVOYW1lLCBhbGxvd1BvcHVwcykpOwotICAgIH0KLQot
ICAgIHVpbnQzMl90IHJlcXVlc3RJRCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdElEOyB9Ci0g
ICAgTlNVUkxSZXF1ZXN0KiByZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0LmdldCgp
OyB9Ci0gICAgTlNTdHJpbmcqIGZyYW1lTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVOYW1l
LmdldCgpOyB9Ci0gICAgYm9vbCBhbGxvd1BvcHVwcygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dQ
b3B1cHM7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgUGx1Z2luUmVxdWVzdCh1aW50MzJfdCByZXF1
ZXN0SUQsIE5TVVJMUmVxdWVzdCogcmVxdWVzdCwgTlNTdHJpbmcqIGZyYW1lTmFtZSwgYm9vbCBh
bGxvd1BvcHVwcykKLSAgICAgICAgOiBtX3JlcXVlc3RJRChyZXF1ZXN0SUQpCi0gICAgICAgICwg
bV9yZXF1ZXN0KHJlcXVlc3QpCi0gICAgICAgICwgbV9mcmFtZU5hbWUoZnJhbWVOYW1lKQotICAg
ICAgICAsIG1fYWxsb3dQb3B1cHMoYWxsb3dQb3B1cHMpCi0gICAgewotICAgIH0KLSAgICAKLSAg
ICB1aW50MzJfdCBtX3JlcXVlc3RJRDsKLSAgICBSZXRhaW5QdHI8TlNVUkxSZXF1ZXN0PiBtX3Jl
cXVlc3Q7Ci0gICAgUmV0YWluUHRyPE5TU3RyaW5nPiBtX2ZyYW1lTmFtZTsKLSAgICBib29sIG1f
YWxsb3dQb3B1cHM7Ci19OwotCi1OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2Jq
ZWN0TWFwOjpMb2NhbE9iamVjdE1hcCgpCi0gICAgOiBtX29iamVjdElEQ291bnRlcigwKQotewot
fQotCi1OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjp+TG9jYWxP
YmplY3RNYXAoKQotewotfQotCi1pbmxpbmUgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk6OkxvY2FsT2JqZWN0TWFwOjpjb250YWlucyh1aW50MzJfdCBvYmplY3RJRCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9pZFRvSlNPYmplY3RNYXAuY29udGFpbnMob2JqZWN0SUQpOwotfQotCi1p
bmxpbmUgSlNDOjpKU09iamVjdCogTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9i
amVjdE1hcDo6Z2V0KHVpbnQzMl90IG9iamVjdElEKSBjb25zdAotewotICAgIGlmIChvYmplY3RJ
RCA9PSBIYXNoVHJhaXRzPHVpbnQzMl90Pjo6ZW1wdHlWYWx1ZSgpIHx8IEhhc2hUcmFpdHM8dWlu
dDMyX3Q+Ojppc0RlbGV0ZWRWYWx1ZShvYmplY3RJRCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgcmV0dXJuIG1faWRUb0pTT2JqZWN0TWFwLmdldChvYmplY3RJRCkuZ2V0KCk7Ci19
Ci0KLXVpbnQzMl90IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6
OmlkRm9yT2JqZWN0KFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKLXsKLSAgICAvLyBUaGlzIG1l
dGhvZCBjcmVhdGVzIG9iamVjdHMgd2l0aCByZWZjb3VudCBvZiAxLCBidXQgZG9lc24ndCBpbmNy
ZWFzZSByZWZjb3VudCB3aGVuIHJldHVybmluZwotICAgIC8vIGZvdW5kIG9iamVjdHMuIFRoaXMg
ZXh0cmEgY291bnQgYWNjb3VudHMgZm9yIHRoZSBtYWluICJyZWZlcmVuY2UiIGtlcHQgYnkgcGx1
Z2luIHByb2Nlc3MuCi0KLSAgICAvLyBUbyBhdm9pZCBleGNlc3NpdmUgSVBDLCBwbHVnaW4gcHJv
Y2VzcyBkb2Vzbid0IHNlbmQgZWFjaCBOUE9iamVjdCByZWxlYXNlL3JldGFpbiBjYWxsIHRvCi0g
ICAgLy8gU2FmYXJpLiBJdCBvbmx5IHNlbmRzIG9uZSB3aGVuIHRoZSBsYXN0IHJlZmVyZW5jZSBp
cyByZW1vdmVkLCBhbmQgaXQgY2FuIGRlc3Ryb3kgdGhlIHByb3h5Ci0gICAgLy8gTlBPYmplY3Qu
Ci0KLSAgICAvLyBIb3dldmVyLCB0aGUgYnJvd3NlciBtYXkgYmUgc2VuZGluZyB0aGUgc2FtZSBv
YmplY3Qgb3V0IHRvIHBsdWctaW4gYXMgYSBmdW5jdGlvbiBjYWxsCi0gICAgLy8gYXJndW1lbnQg
YXQgdGhlIHNhbWUgdGltZSAtIG5laXRoZXIgc2lkZSBjYW4ga25vdyB3aGF0IHRoZSBvdGhlciBv
bmUgaXMgZG9pbmcuIFNvLAotICAgIC8vIGlzIHRvIG1ha2UgUENGb3JnZXRCcm93c2VyT2JqZWN0
IGNhbGwgcmV0dXJuIGEgYm9vbGVhbiByZXN1bHQsIG1ha2luZyBpdCBwb3NzaWJsZSBmb3IgCi0g
ICAgLy8gdGhlIGJyb3dzZXIgdG8gbWFrZSBwbHVnaW4gaG9zdCBrZWVwIHRoZSBwcm94eSB3aXRo
IHplcm8gcmVmY291bnQgZm9yIGEgbGl0dGxlIGxvbmdlci4KLQotICAgIHVpbnQzMl90IG9iamVj
dElEID0gMDsKLSAgICAKLSAgICBIYXNoTWFwPEpTQzo6SlNPYmplY3QqLCBzdGQ6OnBhaXI8dWlu
dDMyX3QsIHVpbnQzMl90Pj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2pzT2JqZWN0VG9JRE1hcC5maW5k
KG9iamVjdCk7Ci0gICAgaWYgKGl0ZXIgIT0gbV9qc09iamVjdFRvSURNYXAuZW5kKCkpCi0gICAg
ICAgIHJldHVybiBpdGVyLT52YWx1ZS5maXJzdDsKLSAgICAKLSAgICBkbyB7Ci0gICAgICAgIG9i
amVjdElEID0gKyttX29iamVjdElEQ291bnRlcjsKLSAgICB9IHdoaWxlICghbV9vYmplY3RJRENv
dW50ZXIgfHwgbV9vYmplY3RJRENvdW50ZXIgPT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KC0xKSB8
fCBtX2lkVG9KU09iamVjdE1hcC5jb250YWlucyhvYmplY3RJRCkpOwotCi0gICAgbV9pZFRvSlNP
YmplY3RNYXAuc2V0KG9iamVjdElELCBTdHJvbmc8SlNPYmplY3Q+KHZtLCBvYmplY3QpKTsKLSAg
ICBtX2pzT2JqZWN0VG9JRE1hcC5zZXQob2JqZWN0LCBzdGQ6Om1ha2VfcGFpcihvYmplY3RJRCwg
MSkpOwotCi0gICAgcmV0dXJuIG9iamVjdElEOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OnJldGFpbihKU0M6OkpTT2JqZWN0KiBvYmplY3Qp
Ci17Ci0gICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0Kiwgc3RkOjpwYWlyPHVpbnQzMl90LCB1aW50
MzJfdD4+OjppdGVyYXRvciBpdGVyID0gbV9qc09iamVjdFRvSURNYXAuZmluZChvYmplY3QpOwot
ICAgIEFTU0VSVChpdGVyICE9IG1fanNPYmplY3RUb0lETWFwLmVuZCgpKTsKLQotICAgIGl0ZXIt
PnZhbHVlLnNlY29uZCA9IGl0ZXItPnZhbHVlLnNlY29uZCArIDE7Ci19Ci0KLXZvaWQgTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6cmVsZWFzZShKU0M6OkpTT2Jq
ZWN0KiBvYmplY3QpCi17Ci0gICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0Kiwgc3RkOjpwYWlyPHVp
bnQzMl90LCB1aW50MzJfdD4+OjppdGVyYXRvciBpdGVyID0gbV9qc09iamVjdFRvSURNYXAuZmlu
ZChvYmplY3QpOwotICAgIEFTU0VSVChpdGVyICE9IG1fanNPYmplY3RUb0lETWFwLmVuZCgpKTsK
LQotICAgIEFTU0VSVChpdGVyLT52YWx1ZS5zZWNvbmQgPiAwKTsKLSAgICBpdGVyLT52YWx1ZS5z
ZWNvbmQgPSBpdGVyLT52YWx1ZS5zZWNvbmQgLSAxOwotICAgIGlmICghaXRlci0+dmFsdWUuc2Vj
b25kKSB7Ci0gICAgICAgIG1faWRUb0pTT2JqZWN0TWFwLnJlbW92ZShpdGVyLT52YWx1ZS5maXJz
dCk7Ci0gICAgICAgIG1fanNPYmplY3RUb0lETWFwLnJlbW92ZShpdGVyKTsKLSAgICB9Ci19Ci0K
LXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6Y2xlYXIo
KQotewotICAgIG1faWRUb0pTT2JqZWN0TWFwLmNsZWFyKCk7Ci0gICAgbV9qc09iamVjdFRvSURN
YXAuY2xlYXIoKTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2Fs
T2JqZWN0TWFwOjpmb3JnZXQodWludDMyX3Qgb2JqZWN0SUQpCi17Ci0gICAgaWYgKG9iamVjdElE
ID09IEhhc2hUcmFpdHM8dWludDMyX3Q+OjplbXB0eVZhbHVlKCkgfHwgSGFzaFRyYWl0czx1aW50
MzJfdD46OmlzRGVsZXRlZFZhbHVlKG9iamVjdElEKSkgewotICAgICAgICBMT0dfRVJST1IoIk5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OmZvcmdldDogbG9jYWwg
b2JqZWN0IGlkICV1IGlzIG5vdCB2YWxpZC4iLCBvYmplY3RJRCk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIEhhc2hNYXA8dWludDMyX3QsIEpTQzo6U3Ryb25nPEpTQzo6SlNP
YmplY3Q+Pjo6aXRlcmF0b3IgaXRlciA9IG1faWRUb0pTT2JqZWN0TWFwLmZpbmQob2JqZWN0SUQp
OwotICAgIGlmIChpdGVyID09IG1faWRUb0pTT2JqZWN0TWFwLmVuZCgpKSB7Ci0gICAgICAgIExP
R19FUlJPUigiTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6Zm9y
Z2V0OiBsb2NhbCBvYmplY3QgJXUgZG9lc24ndCBleGlzdC4iLCBvYmplY3RJRCk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEhhc2hNYXA8SlNDOjpKU09iamVjdCosIHN0ZDo6
cGFpcjx1aW50MzJfdCwgdWludDMyX3Q+Pjo6aXRlcmF0b3Igckl0ZXIgPSBtX2pzT2JqZWN0VG9J
RE1hcC5maW5kKGl0ZXItPnZhbHVlLmdldCgpKTsKLQotICAgIC8vIElmIHRoZSBvYmplY3QgaXMg
YmVpbmcgc2VudCB0byBwbHVnLWluIHJpZ2h0IG5vdywgdGhlbiBpdCdzIG5vdCB0aGUgdGltZSB0
byBmb3JnZXQuCi0gICAgaWYgKHJJdGVyLT52YWx1ZS5zZWNvbmQgIT0gMSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgbV9qc09iamVjdFRvSURNYXAucmVtb3ZlKHJJdGVyKTsKLSAgICBt
X2lkVG9KU09iamVjdE1hcC5yZW1vdmUoaXRlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0
YXRpYyB1aW50MzJfdCBwbHVnaW5JRENvdW50ZXI7Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5OjptX2luRGVzdHJveTsKLQotREVGSU5FX0RFQlVHX09OTFlfR0xPQkFMKFdURjo6
UmVmQ291bnRlZExlYWtDb3VudGVyLCBuZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHlDb3VudGVy
LCAoIk5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSIpKTsKLQotTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkoTmV0c2NhcGVQbHVnaW5Ib3N0
UHJveHkqIHBsdWdpbkhvc3RQcm94eSwgV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3ICpwbHVn
aW5WaWV3LCBib29sIGZ1bGxGcmFtZVBsdWdpbikKLSAgICA6IG1fcGx1Z2luSG9zdFByb3h5KHBs
dWdpbkhvc3RQcm94eSkKLSAgICAsIG1fcGx1Z2luVmlldyhwbHVnaW5WaWV3KQotICAgICwgbV9y
ZXF1ZXN0VGltZXIoKnRoaXMsICZOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJlcXVlc3RU
aW1lckZpcmVkKQotICAgICwgbV9jdXJyZW50VVJMUmVxdWVzdElEKDApCi0gICAgLCBtX3JlbmRl
ckNvbnRleHRJRCgwKQotICAgICwgbV9yZW5kZXJlclR5cGUoVXNlU29mdHdhcmVSZW5kZXJlcikK
LSAgICAsIG1fd2FpdGluZ0ZvclJlcGx5KGZhbHNlKQotICAgICwgbV9wbHVnaW5GdW5jdGlvbkNh
bGxEZXB0aCgwKQotICAgICwgbV9zaG91bGRTdG9wU29vbihmYWxzZSkKLSAgICAsIG1fY3VycmVu
dFJlcXVlc3RJRCgwKQotICAgICwgbV9wbHVnaW5Jc1dhaXRpbmdGb3JEcmF3KGZhbHNlKQotewot
ICAgIEFTU0VSVChtX3BsdWdpblZpZXcpOwotICAgIAotICAgIGlmIChmdWxsRnJhbWVQbHVnaW4p
IHsKLSAgICAgICAgLy8gRm9yIGZ1bGwgZnJhbWUgcGx1Zy1pbnMsIHRoZSBmaXJzdCByZXF1ZXN0
SUQgd2lsbCBhbHdheXMgYmUgdGhlIG9uZSBmb3IgdGhlIGFscmVhZHkKLSAgICAgICAgLy8gb3Bl
biBzdHJlYW0uCi0gICAgICAgICsrbV9jdXJyZW50VVJMUmVxdWVzdElEOwotICAgIH0KLSAgICAK
LSAgICAvLyBBc3NpZ24gYSBwbHVnLWluIElELgotICAgIGRvIHsKLSAgICAgICAgbV9wbHVnaW5J
RCA9ICsrcGx1Z2luSURDb3VudGVyOwotICAgIH0gd2hpbGUgKHBsdWdpbkhvc3RQcm94eS0+cGx1
Z2luSW5zdGFuY2UobV9wbHVnaW5JRCkgfHwgIW1fcGx1Z2luSUQpOwotCi0jaWZuZGVmIE5ERUJV
RwotICAgIG5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eUNvdW50ZXIuaW5jcmVtZW50KCk7Ci0j
ZW5kaWYKLX0KLQotUmVmPE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eT4gTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5OjpjcmVhdGUoTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIHBsdWdpbkhv
c3RQcm94eSwgV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3ICpwbHVnaW5WaWV3LCBib29sIGZ1
bGxGcmFtZVBsdWdpbikKLXsKLSAgICBhdXRvIHByb3h5ID0gYWRvcHRSZWYoKm5ldyBOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHkocGx1Z2luSG9zdFByb3h5LCBwbHVnaW5WaWV3LCBmdWxsRnJh
bWVQbHVnaW4pKTsKLSAgICBwbHVnaW5Ib3N0UHJveHktPmFkZFBsdWdpbkluc3RhbmNlKHByb3h5
LnB0cigpKTsKLSAgICByZXR1cm4gcHJveHk7Ci19Ci0KLU5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6fk5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSgpCi17Ci0gICAgQVNTRVJUKCFtX3Bs
dWdpbkhvc3RQcm94eSk7Ci0gICAgCi0gICAgbV9wbHVnaW5JRCA9IDA7Ci0KLSNpZm5kZWYgTkRF
QlVHCi0gICAgbmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Q291bnRlci5kZWNyZW1lbnQoKTsK
LSNlbmRpZgotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6cmVzaXplKE5T
UmVjdCBzaXplLCBOU1JlY3QgY2xpcFJlY3QpCi17Ci0gICAgdWludDMyX3QgcmVxdWVzdElEID0g
MDsKLSAgICAKLSAgICByZXF1ZXN0SUQgPSBuZXh0UmVxdWVzdElEKCk7Ci0KLSAgICBfV0tQSFJl
c2l6ZVBsdWdpbkluc3RhbmNlKG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0KCksIG1fcGx1Z2luSUQs
IHJlcXVlc3RJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUub3JpZ2luLngs
IHNpemUub3JpZ2luLnksIHNpemUuc2l6ZS53aWR0aCwgc2l6ZS5zaXplLmhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBSZWN0Lm9yaWdpbi54LCBjbGlwUmVjdC5vcmln
aW4ueSwgY2xpcFJlY3Quc2l6ZS53aWR0aCwgY2xpcFJlY3Quc2l6ZS5oZWlnaHQpOwotICAgIAot
ICAgIHdhaXRGb3JSZXBseTxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkJvb2xlYW5SZXBs
eT4ocmVxdWVzdElEKTsKLX0KLQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6
c2V0U2hvdWxkSG9zdExheWVyc0luV2luZG93U2VydmVyKGJvb2wgc2hvdWxkSG9zdExheWVyc0lu
V2luZG93U2VydmVyKQotewotICAgIF9XS1BIUGx1Z2luU2hvdWxkSG9zdExheWVyc0luV2luZG93
U2VydmVyQ2hhbmdlZChtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdpbklELCBzaG91
bGRIb3N0TGF5ZXJzSW5XaW5kb3dTZXJ2ZXIpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6bGF5ZXJIb3N0aW5nTW9kZUNoYW5nZWQoYm9vbCBob3N0c0xheWVyc0luV2lu
ZG93U2VydmVyLCB1aW50MzJfdCByZW5kZXJDb250ZXh0SUQpCi17Ci0gICAgc2V0UmVuZGVyQ29u
dGV4dElEKHJlbmRlckNvbnRleHRJRCk7Ci0KLSAgICBbbV9wbHVnaW5WaWV3IHNldEhvc3RzTGF5
ZXJzSW5XaW5kb3dTZXJ2ZXI6aG9zdHNMYXllcnNJbldpbmRvd1NlcnZlcl07Ci19Ci0KLXZvaWQg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzdG9wQWxsU3RyZWFtcygpCi17Ci0gICAgZm9y
IChhdXRvJiBzdHJlYW0gOiBjb3B5VG9WZWN0b3IobV9zdHJlYW1zLnZhbHVlcygpKSkKLSAgICAg
ICAgc3RyZWFtLT5zdG9wKCk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
OjpjbGVhbnVwKCkKLXsKLSAgICBzdG9wQWxsU3RyZWFtcygpOwotICAgIAotICAgIG1fcmVxdWVz
dFRpbWVyLnN0b3AoKTsKLSAgICAKLSAgICAvLyBDbGVhciB0aGUgb2JqZWN0IG1hcCwgdGhpcyB3
aWxsIGNhdXNlIGFueSBvdXRzdGFuZGluZyBKUyBvYmplY3RzIHRoYXQgdGhlIHBsdWctaW4gaGFk
IGEgcmVmZXJlbmNlIHRvIAotICAgIC8vIHRvIGdvIGF3YXkgd2hlbiB0aGUgbmV4dCBnYXJiYWdl
IGNvbGxlY3Rpb24gdGFrZXMgcGxhY2UuCi0gICAgbV9sb2NhbE9iamVjdHMuY2xlYXIoKTsKLSAg
ICAKLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSkp
Ci0gICAgICAgIGZyYW1lLT5zY3JpcHQoKS5jbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbigo
X19icmlkZ2Ugdm9pZCopbV9wbHVnaW5WaWV3KTsKLSAgICAKLSAgICBQcm94eUluc3RhbmNlU2V0
IGluc3RhbmNlczsKLSAgICBpbnN0YW5jZXMuc3dhcChtX2luc3RhbmNlcyk7Ci0gICAgCi0gICAg
Ly8gSW52YWxpZGF0ZSBhbGwgcHJveHkgaW5zdGFuY2VzLgotICAgIFByb3h5SW5zdGFuY2VTZXQ6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGluc3RhbmNlcy5lbmQoKTsKLSAgICBmb3IgKFByb3h5SW5z
dGFuY2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaW5zdGFuY2VzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgKCppdCktPmludmFsaWRhdGUoKTsKLSAgICAKLSAgICBtX3BsdWdp
blZpZXcgPSBuaWw7Ci0gICAgbV9tYW51YWxTdHJlYW0gPSBudWxscHRyOwotfQotCi12b2lkIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52YWxpZGF0ZSgpCi17Ci0gICAgLy8gSWYgdGhl
IHBsdWctaW4gaG9zdCBoYXMgZGllZCwgdGhlIHByb3h5IHdpbGwgYmUgbnVsbC4KLSAgICBpZiAo
IW1fcGx1Z2luSG9zdFByb3h5KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9wbHVnaW5I
b3N0UHJveHktPnJlbW92ZVBsdWdpbkluc3RhbmNlKHRoaXMpOwotICAgIG1fcGx1Z2luSG9zdFBy
b3h5ID0gbnVsbHB0cjsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmRl
c3Ryb3koKQotewotICAgIHVpbnQzMl90IHJlcXVlc3RJRCA9IG5leHRSZXF1ZXN0SUQoKTsKLQot
ICAgIEFTU0VSVCghbV9pbkRlc3Ryb3kpOwotICAgIG1faW5EZXN0cm95ID0gdHJ1ZTsKLSAgICAK
LSAgICBGcmFtZUxvYWRNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZW5k
KCk7Ci0gICAgZm9yIChGcmFtZUxvYWRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nRnJhbWVM
b2Fkcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIFsoaXQtPmtleSkgX3NldElu
dGVybmFsTG9hZERlbGVnYXRlOm5pbF07Ci0KLSAgICBfV0tQSERlc3Ryb3lQbHVnaW5JbnN0YW5j
ZShtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdpbklELCByZXF1ZXN0SUQpOwotIAot
ICAgIC8vIElmIHRoZSBwbHVnLWluIGhvc3QgY3Jhc2hlcyB3aGlsZSB3ZSdyZSB3YWl0aW5nIGZv
ciBhIHJlcGx5LCB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIGluc3RhbmNlIHByb3h5Ci0gICAg
Ly8gd2lsbCBnbyBhd2F5LiBQcmV2ZW50IHRoaXMgYnkgcHJvdGVjdGluZyBpdCBoZXJlLgotICAg
IFJlZjxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk+IHByb3RlY3QoKnRoaXMpOwotICAgIAot
ICAgIC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIHJlcGx5IGhlcmUgLSB3ZSBqdXN0IHdhbnQg
dG8gYmxvY2sgdW50aWwgdGhlIHBsdWctaW4gaW5zdGFuY2UgaGFzIGJlZW4gdG9ybiBkb3duLgot
ICAgIHdhaXRGb3JSZXBseTxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkJvb2xlYW5SZXBs
eT4ocmVxdWVzdElEKTsKLQotICAgIG1faW5EZXN0cm95ID0gZmFsc2U7Ci0gICAgCi0gICAgY2xl
YW51cCgpOwotICAgIGludmFsaWRhdGUoKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHk6OnNldE1hbnVhbFN0cmVhbShSZWY8SG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0+
JiYgbWFudWFsU3RyZWFtKQotewotICAgIEFTU0VSVCghbV9tYW51YWxTdHJlYW0pOwotICAgIAot
ICAgIG1fbWFudWFsU3RyZWFtID0gV1RGTW92ZShtYW51YWxTdHJlYW0pOwotfQotCi1ib29sIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y2FuY2VsU3RyZWFtTG9hZCh1aW50MzJfdCBzdHJl
YW1JRCwgTlBSZWFzb24gcmVhc29uKSAKLXsKLSAgICBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVh
bSogc3RyZWFtOwotICAgIAotICAgIGlmIChtX21hbnVhbFN0cmVhbSAmJiBzdHJlYW1JRCA9PSAx
KQotICAgICAgICBzdHJlYW0gPSBtX21hbnVhbFN0cmVhbS5nZXQoKTsKLSAgICBlbHNlCi0gICAg
ICAgIHN0cmVhbSA9IG1fc3RyZWFtcy5nZXQoc3RyZWFtSUQpOwotICAgIAotICAgIGlmICghc3Ry
ZWFtKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgc3RyZWFtLT5jYW5jZWxMb2Fk
KHJlYXNvbik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5OjpkaXNjb25uZWN0U3RyZWFtKEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtKiBz
dHJlYW0pCi17Ci0gICAgaWYgKHN0cmVhbSA9PSBtX21hbnVhbFN0cmVhbSkgewotICAgICAgICBt
X21hbnVhbFN0cmVhbSA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBB
U1NFUlQobV9zdHJlYW1zLmdldChzdHJlYW0tPnN0cmVhbUlEKCkpID09IHN0cmVhbSk7Ci0gICAg
bV9zdHJlYW1zLnJlbW92ZShzdHJlYW0tPnN0cmVhbUlEKCkpOwotfQotICAgIAotdm9pZCBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnBsdWdpbkhvc3REaWVkKCkKLXsKLSAgICBtX3BsdWdp
bkhvc3RQcm94eSA9IG51bGxwdHI7Ci0KLSAgICBbbV9wbHVnaW5WaWV3IHBsdWdpbkhvc3REaWVk
XTsKLQotICAgIGNsZWFudXAoKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk6OmZvY3VzQ2hhbmdlZChib29sIGhhc0ZvY3VzKQotewotICAgIF9XS1BIUGx1Z2luSW5zdGFu
Y2VGb2N1c0NoYW5nZWQobV9wbHVnaW5Ib3N0UHJveHktPnBvcnQoKSwgbV9wbHVnaW5JRCwgaGFz
Rm9jdXMpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6d2luZG93Rm9j
dXNDaGFuZ2VkKGJvb2wgaGFzRm9jdXMpCi17Ci0gICAgX1dLUEhQbHVnaW5JbnN0YW5jZVdpbmRv
d0ZvY3VzQ2hhbmdlZChtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdpbklELCBoYXNG
b2N1cyk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojp3aW5kb3dGcmFt
ZUNoYW5nZWQoTlNSZWN0IGZyYW1lKQotewotICAgIF9XS1BIUGx1Z2luSW5zdGFuY2VXaW5kb3dG
cmFtZUNoYW5nZWQobV9wbHVnaW5Ib3N0UHJveHktPnBvcnQoKSwgbV9wbHVnaW5JRCwgZnJhbWUu
b3JpZ2luLngsIGZyYW1lLm9yaWdpbi55LCBmcmFtZS5zaXplLndpZHRoLCBmcmFtZS5zaXplLmhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTWF4WShb
W1tOU1NjcmVlbiBzY3JlZW5zXSBvYmplY3RBdEluZGV4OjBdIGZyYW1lXSkpOwotfQotICAgIAot
dm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnN0YXJ0VGltZXJzKGJvb2wgdGhyb3R0
bGVUaW1lcnMpCi17Ci0gICAgX1dLUEhQbHVnaW5JbnN0YW5jZVN0YXJ0VGltZXJzKG1fcGx1Z2lu
SG9zdFByb3h5LT5wb3J0KCksIG1fcGx1Z2luSUQsIHRocm90dGxlVGltZXJzKTsKLX0KLSAgICAK
LXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojptb3VzZUV2ZW50KE5TVmlldyAqcGx1
Z2luVmlldywgTlNFdmVudCAqZXZlbnQsIE5QQ29jb2FFdmVudFR5cGUgdHlwZSkKLXsKLSAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIE5TUG9pbnQgc2NyZWVuUG9p
bnQgPSBbW2V2ZW50IHdpbmRvd10gY29udmVydEJhc2VUb1NjcmVlbjpbZXZlbnQgbG9jYXRpb25J
bldpbmRvd11dOwotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotICAgIE5T
UG9pbnQgcGx1Z2luUG9pbnQgPSBbcGx1Z2luVmlldyBjb252ZXJ0UG9pbnQ6W2V2ZW50IGxvY2F0
aW9uSW5XaW5kb3ddIGZyb21WaWV3Om5pbF07Ci0gICAgCi0gICAgaW50IGNsaWNrQ291bnQ7Ci0g
ICAgaWYgKHR5cGUgPT0gTlBDb2NvYUV2ZW50TW91c2VFbnRlcmVkIHx8IHR5cGUgPT0gTlBDb2Nv
YUV2ZW50TW91c2VFeGl0ZWQpCi0gICAgICAgIGNsaWNrQ291bnQgPSAwOwotICAgIGVsc2UKLSAg
ICAgICAgY2xpY2tDb3VudCA9IFtldmVudCBjbGlja0NvdW50XTsKLSAgICAKLQotICAgIF9XS1BI
UGx1Z2luSW5zdGFuY2VNb3VzZUV2ZW50KG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0KCksIG1fcGx1
Z2luSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2V2ZW50IHRpbWVzdGFt
cF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgW2V2ZW50IG1vZGlm
aWVyRmxhZ3NdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpblBvaW50
LngsIHBsdWdpblBvaW50LnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Ny
ZWVuUG9pbnQueCwgc2NyZWVuUG9pbnQueSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOU01heFkoW1tbTlNTY3JlZW4gc2NyZWVuc10gb2JqZWN0QXRJbmRleDowXSBmcmFtZV0p
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtldmVudCBidXR0b25OdW1iZXJd
LCBjbGlja0NvdW50LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXZlbnQg
ZGVsdGFYXSwgW2V2ZW50IGRlbHRhWV0sIFtldmVudCBkZWx0YVpdKTsKLX0KLSAgICAKLXZvaWQg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjprZXlFdmVudChOU1ZpZXcgKnBsdWdpblZpZXcs
IE5TRXZlbnQgKmV2ZW50LCBOUENvY29hRXZlbnRUeXBlIHR5cGUpCi17Ci0gICAgTlNEYXRhICpj
aGFyYWN0ZXJzRGF0YSA9IFtbZXZlbnQgY2hhcmFjdGVyc10gZGF0YVVzaW5nRW5jb2Rpbmc6TlNV
VEY4U3RyaW5nRW5jb2RpbmddOwotICAgIE5TRGF0YSAqY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZp
ZXJzRGF0YSA9IFtbZXZlbnQgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzXSBkYXRhVXNpbmdF
bmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107Ci0gICAgCi0gICAgX1dLUEhQbHVnaW5JbnN0
YW5jZUtleWJvYXJkRXZlbnQobV9wbHVnaW5Ib3N0UHJveHktPnBvcnQoKSwgbV9wbHVnaW5JRCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXZlbnQgdGltZXN0YW1wXSwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgW2V2ZW50IG1vZGlm
aWVyRmxhZ3NdLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9j
YXN0PGNoYXIqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihbY2hhcmFjdGVyc0RhdGEg
Ynl0ZXNdKSksIFtjaGFyYWN0ZXJzRGF0YSBsZW5ndGhdLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PGNoYXIqPihyZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPihbY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzRGF0YSBieXRlc10pKSwgW2NoYXJh
Y3RlcnNJZ25vcmluZ01vZGlmaWVyc0RhdGEgbGVuZ3RoXSwgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgW2V2ZW50IGlzQVJlcGVhdF0sIFtldmVudCBrZXlDb2RlXSwga2V5
Q2hhckZvckV2ZW50KGV2ZW50KSk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpzeW50aGV0aWNLZXlEb3duV2l0aENvbW1hbmRNb2RpZmllcihpbnQga2V5Q29kZSwgY2hh
ciBjaGFyYWN0ZXIpCi17Ci0gICAgTlNEYXRhICpjaGFyYWN0ZXJzRGF0YSA9IFtOU0RhdGEgZGF0
YVdpdGhCeXRlczomY2hhcmFjdGVyIGxlbmd0aDoxXTsKLQotICAgIF9XS1BIUGx1Z2luSW5zdGFu
Y2VLZXlib2FyZEV2ZW50KG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0KCksIG1fcGx1Z2luSUQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW05TRGF0ZSB0aW1lSW50ZXJ2YWxT
aW5jZVJlZmVyZW5jZURhdGVdLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOUENvY29hRXZlbnRLZXlEb3duLCBOU0V2ZW50TW9kaWZpZXJGbGFnQ29tbWFuZCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PGNoYXIqPihyZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPihbY2hhcmFjdGVyc0RhdGEgYnl0ZXNdKSksIFtjaGFyYWN0
ZXJzRGF0YSBsZW5ndGhdLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdF9jYXN0PGNoYXIqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihbY2hhcmFjdGVy
c0RhdGEgYnl0ZXNdKSksIFtjaGFyYWN0ZXJzRGF0YSBsZW5ndGhdLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwga2V5Q29kZSwgY2hhcmFjdGVyKTsKLX0KLQot
dm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmZsYWdzQ2hhbmdlZChOU0V2ZW50ICpl
dmVudCkKLXsKLSAgICBfV0tQSFBsdWdpbkluc3RhbmNlS2V5Ym9hcmRFdmVudChtX3BsdWdpbkhv
c3RQcm94eS0+cG9ydCgpLCBtX3BsdWdpbklELCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbZXZlbnQgdGltZXN0YW1wXSwgTlBDb2NvYUV2ZW50RmxhZ3NDaGFuZ2VkLCAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXZlbnQgbW9kaWZpZXJGbGFn
c10sIDAsIDAsIDAsIDAsIGZhbHNlLCBbZXZlbnQga2V5Q29kZV0sIDApOwotfQotCi12b2lkIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW5zZXJ0VGV4dChOU1N0cmluZyAqdGV4dCkKLXsK
LSAgICBOU0RhdGEgKnRleHREYXRhID0gW3RleHQgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3Ry
aW5nRW5jb2RpbmddOwotICAgIAotICAgIF9XS1BIUGx1Z2luSW5zdGFuY2VJbnNlcnRUZXh0KG1f
cGx1Z2luSG9zdFByb3h5LT5wb3J0KCksIG1fcGx1Z2luSUQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3RfY2FzdDxjaGFyKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4oW3RleHREYXRhIGJ5dGVzXSkpLCBbdGV4dERhdGEgbGVuZ3RoXSk7Ci19Ci0KLWJvb2wg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojp3aGVlbEV2ZW50KE5TVmlldyAqcGx1Z2luVmll
dywgTlNFdmVudCAqZXZlbnQpCi17Ci0gICAgTlNQb2ludCBwbHVnaW5Qb2ludCA9IFtwbHVnaW5W
aWV3IGNvbnZlcnRQb2ludDpbZXZlbnQgbG9jYXRpb25JbldpbmRvd10gZnJvbVZpZXc6bmlsXTsK
LQotICAgIHVpbnQzMl90IHJlcXVlc3RJRCA9IG5leHRSZXF1ZXN0SUQoKTsKLSAgICBfV0tQSFBs
dWdpbkluc3RhbmNlV2hlZWxFdmVudChtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdp
bklELCByZXF1ZXN0SUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2V2ZW50
IHRpbWVzdGFtcF0sIFtldmVudCBtb2RpZmllckZsYWdzXSwgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGx1Z2luUG9pbnQueCwgcGx1Z2luUG9pbnQueSwgW2V2ZW50IGJ1dHRv
bk51bWJlcl0sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtldmVudCBkZWx0
YVhdLCBbZXZlbnQgZGVsdGFZXSwgW2V2ZW50IGRlbHRhWl0pOwotICAgIAotICAgIGF1dG8gcmVw
bHkgPSB3YWl0Rm9yUmVwbHk8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpCb29sZWFuUmVw
bHk+KHJlcXVlc3RJRCk7Ci0gICAgcmV0dXJuIHJlcGx5ICYmIHJlcGx5LT5tX3Jlc3VsdDsKLX0K
LQotdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnByaW50KENHQ29udGV4dFJlZiBj
b250ZXh0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQotewotICAgIHVpbnQzMl90
IHJlcXVlc3RJRCA9IG5leHRSZXF1ZXN0SUQoKTsKLSAgICBfV0tQSFBsdWdpbkluc3RhbmNlUHJp
bnQobV9wbHVnaW5Ib3N0UHJveHktPnBvcnQoKSwgbV9wbHVnaW5JRCwgcmVxdWVzdElELCB3aWR0
aCwgaGVpZ2h0KTsKLSAgICAKLSAgICBhdXRvIHJlcGx5ID0gd2FpdEZvclJlcGx5PE5ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eTo6Qm9vbGVhbkFuZERhdGFSZXBseT4ocmVxdWVzdElEKTsKLSAg
ICBpZiAoIXJlcGx5IHx8ICFyZXBseS0+bV9yZXR1cm5WYWx1ZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyPiBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENH
RGF0YVByb3ZpZGVyQ3JlYXRlV2l0aENGRGF0YShyZXBseS0+bV9yZXN1bHQuZ2V0KCkpKTsKLSAg
ICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9y
U3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdl
ID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKHdpZHRoLCBoZWlnaHQsIDgsIDMyLCB3aWR0aCAqIDQs
IGNvbG9yU3BhY2UuZ2V0KCksIGtDR0ltYWdlQWxwaGFGaXJzdCwgZGF0YVByb3ZpZGVyLmdldCgp
LCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotCi0gICAgLy8gRmxpcCB0
aGUgY29udGV4dCBhbmQgZHJhdyB0aGUgaW1hZ2UuCi0gICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShj
b250ZXh0KTsKLSAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgMC4wLCBoZWlnaHQp
OwotICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEuMCwgLTEuMCk7Ci0gICAgCi0gICAg
Q0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIENHUmVjdE1ha2UoMCwgMCwgd2lkdGgsIGhlaWdo
dCksIGltYWdlLmdldCgpKTsKLQotICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7
Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzbmFwc2hvdChDR0NvbnRl
eHRSZWYgY29udGV4dCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKLXsKLSAgICB1
aW50MzJfdCByZXF1ZXN0SUQgPSBuZXh0UmVxdWVzdElEKCk7Ci0gICAgX1dLUEhQbHVnaW5JbnN0
YW5jZVNuYXBzaG90KG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0KCksIG1fcGx1Z2luSUQsIHJlcXVl
c3RJRCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgCi0gICAgYXV0byByZXBseSA9IHdhaXRGb3JSZXBs
eTxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkJvb2xlYW5BbmREYXRhUmVwbHk+KHJlcXVl
c3RJRCk7Ci0gICAgaWYgKCFyZXBseSB8fCAhcmVwbHktPm1fcmV0dXJuVmFsdWUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlcj4gZGF0YVByb3ZpZGVyID0g
YWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhDRkRhdGEocmVwbHktPm1fcmVzdWx0Lmdl
dCgpKSk7Ci0gICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZSA9IGFkb3B0
Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwotICAgIFJldGFpblB0cjxDR0ltYWdl
UmVmPiBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZSh3aWR0aCwgaGVpZ2h0LCA4LCAzMiwg
d2lkdGggKiA0LCBjb2xvclNwYWNlLmdldCgpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZp
cnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZh
bHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0KLSAgICBDR0NvbnRleHREcmF3SW1h
Z2UoY29udGV4dCwgQ0dSZWN0TWFrZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KSwgaW1hZ2UuZ2V0KCkp
OwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c3RvcFRpbWVycygpCi17
Ci0gICAgX1dLUEhQbHVnaW5JbnN0YW5jZVN0b3BUaW1lcnMobV9wbHVnaW5Ib3N0UHJveHktPnBv
cnQoKSwgbV9wbHVnaW5JRCk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
OjpzdGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IHN0YXR1cyA9IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZygwLCBtZXNzYWdl
ID8gbWVzc2FnZSA6ICIiLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpKTsKLSAgICBpZiAoIXN0YXR1
cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViVmlldyAqd3YgPSBbbV9wbHVnaW5WaWV3IHdl
YlZpZXddOwotICAgIFtbd3YgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d3Ygc2V0U3Rh
dHVzVGV4dDooX19icmlkZ2UgTlNTdHJpbmcgKilzdGF0dXMuZ2V0KCldOwotfQotCi1OUEVycm9y
IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6bG9hZFVSTChjb25zdCBjaGFyKiB1cmwsIGNv
bnN0IGNoYXIqIHRhcmdldCwgY29uc3QgY2hhciogcG9zdERhdGEsIHVpbnQzMl90IHBvc3RMZW4s
IExvYWRVUkxGbGFncyBmbGFncywgdWludDMyX3QmIHN0cmVhbUlEKQotewotICAgIGlmICghdXJs
KQotICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKLSAKLSAgICBOU011dGFibGVV
UkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW21fcGx1Z2luVmlldyByZXF1ZXN0V2l0aFVSTENTdHJpbmc6
dXJsXTsKLQotICAgIGlmIChmbGFncyAmIElzUG9zdCkgewotICAgICAgICBOU0RhdGEgKmh0dHBC
b2R5ID0gbmlsOwotCi0gICAgICAgIGlmIChmbGFncyAmIFBvc3REYXRhSXNGaWxlKSB7Ci0gICAg
ICAgICAgICAvLyBJZiB3ZSdyZSBwb3N0aW5nIGEgZmlsZSwgYnVmIGlzIGVpdGhlciBhIGZpbGUg
VVJMIG9yIGEgcGF0aCB0byB0aGUgZmlsZS4KLSAgICAgICAgICAgIGlmICghcG9zdERhdGEpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07Ci0gICAgICAgICAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGJ1ZlN0cmluZyA9IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVhdGVX
aXRoQ1N0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwb3N0RGF0YSwga0NGU3RyaW5nRW5jb2Rp
bmdXaW5kb3dzTGF0aW4xKSk7Ci0gICAgICAgICAgICBpZiAoIWJ1ZlN0cmluZykKLSAgICAgICAg
ICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgTlNVUkwgKmZpbGVVUkwgPSBbTlNVUkwgX3dlYl9VUkxXaXRoRGF0YUFzU3RyaW5nOihf
X2JyaWRnZSBOU1N0cmluZyAqKWJ1ZlN0cmluZy5nZXQoKV07Ci0gICAgICAgICAgICBOU1N0cmlu
ZyAqcGF0aDsKLSAgICAgICAgICAgIGlmIChbZmlsZVVSTCBpc0ZpbGVVUkxdKQotICAgICAgICAg
ICAgICAgIHBhdGggPSBbZmlsZVVSTCBwYXRoXTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBwYXRoID0gKF9fYnJpZGdlIE5TU3RyaW5nICopYnVmU3RyaW5nLmdldCgpOwotICAg
ICAgICAgICAgaHR0cEJvZHkgPSBbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZkZpbGU6cGF0aF07
Ci0gICAgICAgICAgICBpZiAoIWh0dHBCb2R5KQotICAgICAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9GSUxFX05PVF9GT1VORDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBodHRwQm9keSA9
IFtOU0RhdGEgZGF0YVdpdGhCeXRlczpwb3N0RGF0YSBsZW5ndGg6cG9zdExlbl07Ci0KLSAgICAg
ICAgaWYgKCFbaHR0cEJvZHkgbGVuZ3RoXSkKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9JTlZB
TElEX1BBUkFNOwotCi0gICAgICAgIFtyZXF1ZXN0IHNldEhUVFBNZXRob2Q6QCJQT1NUIl07Ci0g
ICAgICAgIAotICAgICAgICBpZiAoZmxhZ3MgJiBBbGxvd0hlYWRlcnNJblBvc3REYXRhKSB7Ci0g
ICAgICAgICAgICBpZiAoW2h0dHBCb2R5IF93ZWJfc3RhcnRzV2l0aEJsYW5rTGluZV0pCi0gICAg
ICAgICAgICAgICAgaHR0cEJvZHkgPSBbaHR0cEJvZHkgc3ViZGF0YVdpdGhSYW5nZTpOU01ha2VS
YW5nZSgxLCBbaHR0cEJvZHkgbGVuZ3RoXSAtIDEpXTsKLSAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgIE5TSW50ZWdlciBsb2NhdGlvbiA9IFtodHRwQm9keSBfd2ViX2xvY2F0aW9u
QWZ0ZXJGaXJzdEJsYW5rTGluZV07Ci0gICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IE5T
Tm90Rm91bmQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJsYW5rIGxpbmUgaXMg
c29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2YgcG9zdERhdGEsIGV2ZXJ5dGhpbmcgYmVmb3JlIGlz
IHRoZSBoZWFkZXIuCi0gICAgICAgICAgICAgICAgICAgIE5TRGF0YSAqaGVhZGVyRGF0YSA9IFto
dHRwQm9keSBzdWJkYXRhV2l0aFJhbmdlOk5TTWFrZVJhbmdlKDAsIGxvY2F0aW9uKV07Ci0gICAg
ICAgICAgICAgICAgICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmhlYWRlciA9IFtoZWFkZXJEYXRh
IF93ZWJraXRfcGFyc2VSRkM4MjJIZWFkZXJGaWVsZHNdOwotICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBkYXRhTGVuZ3RoID0gW2h0dHBCb2R5IGxlbmd0aF0gLSBsb2NhdGlvbjsKLQotICAg
ICAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgcGx1Z2lucyBsaWtlIHRvIHNldCBDb250ZW50
LUxlbmd0aCB0aGVtc2VsdmVzIHdoZW4gdGhleSBwb3N0LAotICAgICAgICAgICAgICAgICAgICAv
LyBidXQgQ0ZOZXR3b3JrIGRvZXMgbm90IGxpa2UgdGhhdC4gU28gd2Ugd2lsbCByZW1vdmUgdGhl
IGhlYWRlcgotICAgICAgICAgICAgICAgICAgICAvLyBhbmQgaW5zdGVhZCB0cnVuY2F0ZSB0aGUg
ZGF0YSB0byB0aGUgcmVxdWVzdGVkIGxlbmd0aC4KLSAgICAgICAgICAgICAgICAgICAgTlNTdHJp
bmcgKmNvbnRlbnRMZW5ndGggPSBbaGVhZGVyIG9iamVjdEZvcktleTpAIkNvbnRlbnQtTGVuZ3Ro
Il07Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRMZW5ndGgpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTGVuZ3RoID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFtjb250ZW50TGVuZ3RoIGludFZhbHVlXSksIGRhdGFMZW5ndGgpOwotICAgICAgICAgICAgICAg
ICAgICBbaGVhZGVyIHJlbW92ZU9iamVjdEZvcktleTpAIkNvbnRlbnQtTGVuZ3RoIl07Ci0KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKFtoZWFkZXIgY291bnRdID4gMCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFtyZXF1ZXN0IHNldEFsbEhUVFBIZWFkZXJGaWVsZHM6aGVhZGVyXTsKLQotICAg
ICAgICAgICAgICAgICAgICAvLyBFdmVyeXRoaW5nIGFmdGVyIHRoZSBibGFuayBsaW5lIGlzIHRo
ZSBhY3R1YWwgY29udGVudCBvZiB0aGUgUE9TVC4KLSAgICAgICAgICAgICAgICAgICAgaHR0cEJv
ZHkgPSBbaHR0cEJvZHkgc3ViZGF0YVdpdGhSYW5nZTpOU01ha2VSYW5nZShsb2NhdGlvbiwgZGF0
YUxlbmd0aCldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICghW2h0dHBCb2R5IGxlbmd0aF0pCi0gICAgICAgICAgICByZXR1cm4gTlBF
UlJfSU5WQUxJRF9QQVJBTTsKLQotICAgICAgICAvLyBQbHVnLWlucyBleHBlY3QgdG8gcmVjZWl2
ZSB1bmNhY2hlZCBkYXRhIHdoZW4gZG9pbmcgYSBQT1NUICgzMzQ3MTM0KS4KLSAgICAgICAgW3Jl
cXVlc3Qgc2V0Q2FjaGVQb2xpY3k6TlNVUkxSZXF1ZXN0UmVsb2FkSWdub3JpbmdDYWNoZURhdGFd
OwotICAgICAgICBbcmVxdWVzdCBzZXRIVFRQQm9keTpodHRwQm9keV07Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiBsb2FkUmVxdWVzdChyZXF1ZXN0LCB0YXJnZXQsIGZsYWdzICYgQWxsb3dQb3B1
cHMsIHN0cmVhbUlEKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnBl
cmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3QqIHBsdWdpblJlcXVlc3QpCi17Ci0gICAgLy8gTG9h
ZGluZyB0aGUgcmVxdWVzdCBjYW4gY2F1c2UgdGhlIGluc3RhbmNlIHByb3h5IHRvIGdvIGF3YXks
IHNvIHByb3RlY3QgaXQuCi0gICAgUmVmPE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eT4gcHJv
dGVjdCgqdGhpcyk7Ci0KLSAgICBBU1NFUlQobV9wbHVnaW5WaWV3KTsKLSAgICAKLSAgICBOU1VS
TFJlcXVlc3QgKnJlcXVlc3QgPSBwbHVnaW5SZXF1ZXN0LT5yZXF1ZXN0KCk7Ci0gICAgTlNTdHJp
bmcgKmZyYW1lTmFtZSA9IHBsdWdpblJlcXVlc3QtPmZyYW1lTmFtZSgpOwotICAgIFdlYkZyYW1l
ICpmcmFtZSA9IG5pbDsKLSAgICAKLSAgICBOU1VSTCAqVVJMID0gW3JlcXVlc3QgVVJMXTsKLSAg
ICBOU1N0cmluZyAqSlNTdHJpbmcgPSBbVVJMIF93ZWJraXRfc2NyaXB0SWZKYXZhU2NyaXB0VVJM
XTsKLSAgICAKLSAgICBBU1NFUlQoZnJhbWVOYW1lIHx8IEpTU3RyaW5nKTsKLSAgICBpZiAoZnJh
bWVOYW1lKSB7Ci0gICAgICAgIC8vIEZJWE1FIC0gbmVlZCB0byBnZXQgcmlkIG9mIHRoaXMgd2lu
ZG93IGNyZWF0aW9uIHdoaWNoCi0gICAgICAgIC8vIGJ5cGFzc2VzIG5vcm1hbCB0YXJnZXRlZCBs
aW5rIGhhbmRsaW5nCi0gICAgICAgIGZyYW1lID0ga2l0KGNvcmUoW21fcGx1Z2luVmlldyB3ZWJG
cmFtZV0pLT5sb2FkZXIoKS5maW5kRnJhbWVGb3JOYXZpZ2F0aW9uKGZyYW1lTmFtZSkpOwotICAg
ICAgICBpZiAoIWZyYW1lKSB7Ci0gICAgICAgICAgICBXZWJWaWV3ICpjdXJyZW50V2ViVmlldyA9
IFttX3BsdWdpblZpZXcgd2ViVmlld107Ci0gICAgICAgICAgICBXZWJWaWV3ICpuZXdXZWJWaWV3
ID0gW1tjdXJyZW50V2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzpjdXJyZW50
V2ViVmlldyBjcmVhdGVXZWJWaWV3V2l0aFJlcXVlc3Q6bmlsIHdpbmRvd0ZlYXR1cmVzOkB7IH1d
OwotCi0gICAgICAgICAgICBpZiAoIW5ld1dlYlZpZXcpIHsKLSAgICAgICAgICAgICAgICBfV0tQ
SExvYWRVUkxOb3RpZnkobV9wbHVnaW5Ib3N0UHJveHktPnBvcnQoKSwgbV9wbHVnaW5JRCwgcGx1
Z2luUmVxdWVzdC0+cmVxdWVzdElEKCksIE5QRVJSX0dFTkVSSUNfRVJST1IpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
ZnJhbWUgPSBbbmV3V2ViVmlldyBtYWluRnJhbWVdOwotICAgICAgICAgICAgY29yZShmcmFtZSkt
PnRyZWUoKS5zZXROYW1lKGZyYW1lTmFtZSk7Ci0gICAgICAgICAgICBbW25ld1dlYlZpZXcgX1VJ
RGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXdTaG93Om5ld1dlYlZpZXddOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKEpTU3RyaW5nKSB7Ci0gICAgICAgIEFTU0VSVCghZnJhbWUgfHwgW21f
cGx1Z2luVmlldyB3ZWJGcmFtZV0gPT0gZnJhbWUpOwotICAgICAgICBldmFsdWF0ZUphdmFTY3Jp
cHQocGx1Z2luUmVxdWVzdCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgW2ZyYW1lIGxvYWRSZXF1
ZXN0OnJlcXVlc3RdOwotCi0gICAgICAgIC8vIENoZWNrIGlmIGFub3RoZXIgcGx1Zy1pbiB2aWV3
IG9yIGV2ZW4gdGhpcyB2aWV3IGlzIHdhaXRpbmcgZm9yIHRoZSBmcmFtZSB0byBsb2FkLgotICAg
ICAgICAvLyBJZiBpdCBpcywgdGVsbCBpdCB0aGF0IHRoZSBsb2FkIHdhcyBjYW5jZWxsZWQgYmVj
YXVzZSBpdCB3aWxsIGJlIGFueXdheS4KLSAgICAgICAgV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5W
aWV3ICp2aWV3ID0gW2ZyYW1lIF9pbnRlcm5hbExvYWREZWxlZ2F0ZV07Ci0gICAgICAgIGlmICh2
aWV3ICE9IG5pbCkgewotICAgICAgICAgICAgQVNTRVJUKFt2aWV3IGlzS2luZE9mQ2xhc3M6W1dl
Ykhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldyBjbGFzc11dKTsKLSAgICAgICAgICAgIFt2aWV3IHdl
YkZyYW1lOmZyYW1lIGRpZEZpbmlzaExvYWRXaXRoUmVhc29uOk5QUkVTX1VTRVJfQlJFQUtdOwot
ICAgICAgICB9Ci0gICAgICAgIG1fcGVuZGluZ0ZyYW1lTG9hZHMuc2V0KGZyYW1lLCBwbHVnaW5S
ZXF1ZXN0KTsKLSAgICAgICAgW2ZyYW1lIF9zZXRJbnRlcm5hbExvYWREZWxlZ2F0ZTptX3BsdWdp
blZpZXddOwotICAgIH0KLQotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6
d2ViRnJhbWVEaWRGaW5pc2hMb2FkV2l0aFJlYXNvbihXZWJGcmFtZSogd2ViRnJhbWUsIE5QUmVh
c29uIHJlYXNvbikKLXsKLSAgICBGcmFtZUxvYWRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5n
RnJhbWVMb2Fkcy5maW5kKHdlYkZyYW1lKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9wZW5kaW5nRnJh
bWVMb2Fkcy5lbmQoKSk7Ci0gICAgICAgIAotICAgIFBsdWdpblJlcXVlc3QqIHBsdWdpblJlcXVl
c3QgPSBpdC0+dmFsdWUuZ2V0KCk7Ci0gICAgX1dLUEhMb2FkVVJMTm90aWZ5KG1fcGx1Z2luSG9z
dFByb3h5LT5wb3J0KCksIG1fcGx1Z2luSUQsIHBsdWdpblJlcXVlc3QtPnJlcXVlc3RJRCgpLCBy
ZWFzb24pOwotIAotICAgIG1fcGVuZGluZ0ZyYW1lTG9hZHMucmVtb3ZlKGl0KTsKLQotICAgIFt3
ZWJGcmFtZSBfc2V0SW50ZXJuYWxMb2FkRGVsZWdhdGU6bmlsXTsKLX0KLQotdm9pZCBOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHk6OmV2YWx1YXRlSmF2YVNjcmlwdChQbHVnaW5SZXF1ZXN0KiBw
bHVnaW5SZXF1ZXN0KQotewotICAgIE5TVVJMICpVUkwgPSBbcGx1Z2luUmVxdWVzdC0+cmVxdWVz
dCgpIFVSTF07Ci0gICAgTlNTdHJpbmcgKkpTU3RyaW5nID0gW1VSTCBfd2Via2l0X3NjcmlwdElm
SmF2YVNjcmlwdFVSTF07Ci0gICAgQVNTRVJUKEpTU3RyaW5nKTsKLQotICAgIFJlZjxOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHk+IHByb3RlY3QoKnRoaXMpOyAvLyBFeGVjdXRpbmcgYXJiaXRy
YXJ5IEphdmFTY3JpcHQgY2FuIGRlc3Ryb3kgdGhlIHByb3h5LgotCi0gICAgTlNTdHJpbmcgKnJl
c3VsdCA9IFtbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSBfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdEZyb21TdHJpbmc6SlNTdHJpbmcgZm9yY2VVc2VyR2VzdHVyZTpwbHVnaW5SZXF1ZXN0LT5h
bGxvd1BvcHVwcygpXTsKLSAgICAKLSAgICAvLyBEb24ndCBjb250aW51ZSBpZiBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZyBjYXVzZWQgdGhlIHBsdWctaW4gdG8gc3RvcC4K
LSAgICBpZiAoIW1fcGx1Z2luSG9zdFByb3h5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
cGx1Z2luUmVxdWVzdC0+ZnJhbWVOYW1lKCkgIT0gbmlsKQotICAgICAgICByZXR1cm47Ci0gICAg
ICAgIAotICAgIGlmIChbcmVzdWx0IGxlbmd0aF0gPiAwKSB7Ci0gICAgICAgIC8vIERvbid0IGNh
bGwgTlBQX05ld1N0cmVhbSBhbmQgb3RoZXIgc3RyZWFtIG1ldGhvZHMgaWYgdGhlcmUgaXMgbm8g
SlMgcmVzdWx0IHRvIGRlbGl2ZXIuIFRoaXMgaXMgd2hhdCBNb3ppbGxhIGRvZXMuCi0gICAgICAg
IE5TRGF0YSAqSlNEYXRhID0gW3Jlc3VsdCBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdF
bmNvZGluZ107Ci0gICAgICAgIAotICAgICAgICBhdXRvIHN0cmVhbSA9IEhvc3RlZE5ldHNjYXBl
UGx1Z2luU3RyZWFtOjpjcmVhdGUodGhpcywgcGx1Z2luUmVxdWVzdC0+cmVxdWVzdElEKCksIHBs
dWdpblJlcXVlc3QtPnJlcXVlc3QoKSk7Ci0gICAgICAgIG1fc3RyZWFtcy5hZGQoc3RyZWFtLT5z
dHJlYW1JRCgpLCBzdHJlYW0uY29weVJlZigpKTsKLSAgICAgICAgCi0gICAgICAgIFJldGFpblB0
cjxOU1VSTFJlc3BvbnNlPiByZXNwb25zZSA9IGFkb3B0TlMoW1tOU1VSTFJlc3BvbnNlIGFsbG9j
XSBpbml0V2l0aFVSTDpVUkwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOkAidGV4dC9w
bGFpbiIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOltKU0RhdGEgbGVuZ3RoXQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dEVuY29kaW5nTmFtZTpuaWxdKTsKLSAgICAgICAgc3RyZWFtLT5zdGFydFN0
cmVhbVdpdGhSZXNwb25zZShyZXNwb25zZS5nZXQoKSk7Ci0gICAgICAgIHN0cmVhbS0+ZGlkUmVj
ZWl2ZURhdGEoMCwgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KFtKU0RhdGEgYnl0ZXNdKSwg
W0pTRGF0YSBsZW5ndGhdKTsKLSAgICAgICAgc3RyZWFtLT5kaWRGaW5pc2hMb2FkaW5nKDApOwot
ICAgIH0KLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJlcXVlc3RUaW1l
ckZpcmVkKCkKLXsKLSAgICBBU1NFUlQoIW1fcGx1Z2luUmVxdWVzdHMuaXNFbXB0eSgpKTsKLSAg
ICBBU1NFUlQobV9wbHVnaW5WaWV3KTsKLSAgICAKLSAgICBSZWZQdHI8UGx1Z2luUmVxdWVzdD4g
cmVxdWVzdCA9IG1fcGx1Z2luUmVxdWVzdHMuZmlyc3QoKTsKLSAgICBtX3BsdWdpblJlcXVlc3Rz
LnJlbW92ZUZpcnN0KCk7Ci0gICAgCi0gICAgaWYgKCFtX3BsdWdpblJlcXVlc3RzLmlzRW1wdHko
KSkKLSAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci0gICAgCi0gICAg
cGVyZm9ybVJlcXVlc3QocmVxdWVzdC5nZXQoKSk7Ci19Ci0gICAgCi1OUEVycm9yIE5ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eTo6bG9hZFJlcXVlc3QoTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0LCBj
b25zdCBjaGFyKiBjVGFyZ2V0LCBib29sIGFsbG93UG9wdXBzLCB1aW50MzJfdCYgcmVxdWVzdElE
KQotewotICAgIE5TVVJMICpVUkwgPSBbcmVxdWVzdCBVUkxdOwotCi0gICAgaWYgKCFVUkwpIAot
ICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9VUkw7Ci0KLSAgICAvLyBEb24ndCBhbGxvdyBy
ZXF1ZXN0cyB0byBiZSBsb2FkZWQgd2hlbiB0aGUgZG9jdW1lbnQgbG9hZGVyIGlzIHN0b3BwaW5n
IGFsbCBsb2FkZXJzLgotICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IFtbbV9w
bHVnaW5WaWV3IGRhdGFTb3VyY2VdIF9kb2N1bWVudExvYWRlcl07Ci0gICAgaWYgKCFkb2N1bWVu
dExvYWRlciB8fCBkb2N1bWVudExvYWRlci0+aXNTdG9wcGluZygpKQotICAgICAgICByZXR1cm4g
TlBFUlJfR0VORVJJQ19FUlJPUjsKLQotICAgIE5TU3RyaW5nICp0YXJnZXQgPSBuaWw7Ci0gICAg
aWYgKGNUYXJnZXQpIHsKLSAgICAgICAgLy8gRmluZCB0aGUgZnJhbWUgZ2l2ZW4gdGhlIHRhcmdl
dCBzdHJpbmcuCi0gICAgICAgIHRhcmdldCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ1N0cmluZzpj
VGFyZ2V0IGVuY29kaW5nOk5TSVNPTGF0aW4xU3RyaW5nRW5jb2RpbmddOwotICAgIH0KLSAgICBX
ZWJGcmFtZSAqZnJhbWUgPSBbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXTsKLQotICAgIC8vIGRvbid0
IGxldCBhIHBsdWdpbiBzdGFydCBhbnkgbG9hZHMgaWYgaXQgaXMgbm8gbG9uZ2VyIHBhcnQgb2Yg
YSBkb2N1bWVudCB0aGF0IGlzIGJlaW5nIAotICAgIC8vIGRpc3BsYXllZCB1bmxlc3MgdGhlIGxv
YWRzIGFyZSBpbiB0aGUgc2FtZSBmcmFtZSBhcyB0aGUgcGx1Z2luLgotICAgIGlmIChkb2N1bWVu
dExvYWRlciAhPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKS0+bG9hZGVyKCkuYWN0aXZl
RG9jdW1lbnRMb2FkZXIoKSAmJgotICAgICAgICAoIWNUYXJnZXQgfHwgW2ZyYW1lIGZpbmRGcmFt
ZU5hbWVkOnRhcmdldF0gIT0gZnJhbWUpKSB7Ci0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklD
X0VSUk9SOyAKLSAgICB9Ci0gICAgCi0gICAgTlNTdHJpbmcgKkpTU3RyaW5nID0gW1VSTCBfd2Vi
a2l0X3NjcmlwdElmSmF2YVNjcmlwdFVSTF07Ci0gICAgaWYgKEpTU3RyaW5nICE9IG5pbCkgewot
ICAgICAgICBpZiAoIVtbW21fcGx1Z2luVmlldyB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gaXNKYXZh
U2NyaXB0RW5hYmxlZF0pIHsKLSAgICAgICAgICAgIC8vIFJldHVybiBOUEVSUl9HRU5FUklDX0VS
Uk9SIGlmIEpTIGlzIGRpc2FibGVkLiBUaGlzIGlzIHdoYXQgTW96aWxsYSBkb2VzLgotICAgICAg
ICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgICBpZiAoIWNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pLT5kb2N1bWVudCgp
LT5zZWN1cml0eU9yaWdpbigpLmNhbkRpc3BsYXkoVVJMKSkKLSAgICAgICAgICAgIHJldHVybiBO
UEVSUl9HRU5FUklDX0VSUk9SOwotICAgIH0KLSAgICAKLSAgICAvLyBGSVhNRTogSGFuZGxlIHdy
YXBhcm91bmQKLSAgICByZXF1ZXN0SUQgPSArK21fY3VycmVudFVSTFJlcXVlc3RJRDsKLSAgICAg
ICAgCi0gICAgaWYgKGNUYXJnZXQgfHwgSlNTdHJpbmcpIHsKLSAgICAgICAgLy8gTWFrZSB3aGVu
IHRhcmdldGluZyBhIGZyYW1lIG9yIGV2YWx1YXRpbmcgYSBKUyBzdHJpbmcsIHBlcmZvcm0gdGhl
IHJlcXVlc3QgYWZ0ZXIgYSBkZWxheSBiZWNhdXNlIHdlIGRvbid0Ci0gICAgICAgIC8vIHdhbnQg
dG8gcG90ZW50aWFsbHkga2lsbCB0aGUgcGx1Zy1pbiBpbnNpZGUgb2YgaXRzIFVSTCByZXF1ZXN0
LgotICAgICAgICAKLSAgICAgICAgaWYgKEpTU3RyaW5nICYmIHRhcmdldCAmJiBbZnJhbWUgZmlu
ZEZyYW1lTmFtZWQ6dGFyZ2V0XSAhPSBmcmFtZSkgewotICAgICAgICAgICAgLy8gRm9yIHNlY3Vy
aXR5IHJlYXNvbnMsIG9ubHkgYWxsb3cgSlMgcmVxdWVzdHMgdG8gYmUgbWFkZSBvbiB0aGUgZnJh
bWUgdGhhdCBjb250YWlucyB0aGUgcGx1Zy1pbi4KLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9J
TlZBTElEX1BBUkFNOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBwbHVnaW5SZXF1ZXN0ID0g
UGx1Z2luUmVxdWVzdDo6Y3JlYXRlKHJlcXVlc3RJRCwgcmVxdWVzdCwgdGFyZ2V0LCBhbGxvd1Bv
cHVwcyk7Ci0gICAgICAgIG1fcGx1Z2luUmVxdWVzdHMuYXBwZW5kKFdURk1vdmUocGx1Z2luUmVx
dWVzdCkpOwotICAgICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBhdXRvIHN0cmVhbSA9IEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFt
OjpjcmVhdGUodGhpcywgcmVxdWVzdElELCByZXF1ZXN0KTsKLQotICAgICAgICBBU1NFUlQoIW1f
c3RyZWFtcy5jb250YWlucyhyZXF1ZXN0SUQpKTsKLSAgICAgICAgbV9zdHJlYW1zLmFkZChyZXF1
ZXN0SUQsIHN0cmVhbS5jb3B5UmVmKCkpOwotICAgICAgICBzdHJlYW0tPnN0YXJ0KCk7Ci0gICAg
fQotICAgIAotICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLX0KLQotc3RkOjp1bmlxdWVfcHRy
PE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6UmVwbHk+IE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6cHJvY2Vzc1JlcXVlc3RzQW5kV2FpdEZvclJlcGx5KHVpbnQzMl90IHJlcXVlc3RJ
RCkKLXsKLSAgICBBU1NFUlQobV9wbHVnaW5Ib3N0UHJveHkpOwotCi0gICAgc3RkOjp1bmlxdWVf
cHRyPFJlcGx5PiByZXBseTsKLQotICAgIHdoaWxlICghKHJlcGx5ID0gbV9yZXBsaWVzLnRha2Uo
cmVxdWVzdElEKSkpIHsKLSAgICAgICAgaWYgKCFtX3BsdWdpbkhvc3RQcm94eS0+cHJvY2Vzc1Jl
cXVlc3RzKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICAvLyBUaGUg
aG9zdCBwcm94eSBjYW4gYmUgZGVzdHJveWVkIHdoaWxlIGV4ZWN1dGluZyBhIG5lc3RlZCBwcm9j
ZXNzUmVxdWVzdHMoKSBjYWxsLCBpbiB3aGljaCBjYXNlIGl0J3Mgbm9ybWFsCi0gICAgICAgIC8v
IHRvIGdldCBhIHN1Y2Nlc3MgcmVzdWx0LCBidXQgYmUgdW5hYmxlIHRvIGtlZXAgbG9vcGluZy4K
LSAgICAgICAgaWYgKCFtX3BsdWdpbkhvc3RQcm94eSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KLQotICAgIHJldHVybiByZXBseTsKLX0KLQotLy8gTlBSdW50aW1lIHN1cHBv
cnQKLWJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRXaW5kb3dOUE9iamVjdCh1
aW50MzJfdCYgb2JqZWN0SUQpCi17Ci0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5W
aWV3IHdlYkZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIGlmICghZnJhbWUtPnNjcmlwdCgpLmNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFib3V0
VG9FeGVjdXRlU2NyaXB0KSkKLSAgICAgICAgb2JqZWN0SUQgPSAwOwotICAgIGVsc2UKLSAgICAg
ICAgb2JqZWN0SUQgPSBtX2xvY2FsT2JqZWN0cy5pZEZvck9iamVjdChwbHVnaW5Xb3JsZCgpLnZt
KCksIGZyYW1lLT53aW5kb3dQcm94eSgpLmpzV2luZG93UHJveHkocGx1Z2luV29ybGQoKSktPndp
bmRvdygpKTsKLSAgICAgICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5OjpnZXRQbHVnaW5FbGVtZW50TlBPYmplY3QodWludDMyX3QmIG9i
amVjdElEKQotewotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFt
ZV0pOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBp
ZiAoSlNPYmplY3QqIG9iamVjdCA9IGZyYW1lLT5zY3JpcHQoKS5qc09iamVjdEZvclBsdWdpbkVs
ZW1lbnQoW21fcGx1Z2luVmlldyBlbGVtZW50XSkpCi0gICAgICAgIG9iamVjdElEID0gbV9sb2Nh
bE9iamVjdHMuaWRGb3JPYmplY3QocGx1Z2luV29ybGQoKS52bSgpLCBvYmplY3QpOwotICAgIGVs
c2UKLSAgICAgICAgb2JqZWN0SUQgPSAwOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Zm9yZ2V0QnJvd3Nlck9iamVjdElEKHVp
bnQzMl90IG9iamVjdElEKQotewotICAgIHJldHVybiBtX2xvY2FsT2JqZWN0cy5mb3JnZXQob2Jq
ZWN0SUQpOwotfQotIAotYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmV2YWx1YXRl
KHVpbnQzMl90IG9iamVjdElELCBjb25zdCBTdHJpbmcmIHNjcmlwdCwgZGF0YV90JiByZXN1bHRE
YXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90JiByZXN1bHRMZW5ndGgsIGJvb2wgYWxsb3dQb3B1
cHMpCi17Ci0gICAgcmVzdWx0RGF0YSA9IG51bGxwdHI7Ci0gICAgcmVzdWx0TGVuZ3RoID0gMDsK
LQotICAgIGlmIChtX2luRGVzdHJveSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KCFtX2xvY2FsT2JqZWN0cy5jb250YWlucyhvYmplY3RJRCkpIHsKLSAgICAgICAgTE9HX0VSUk9S
KCJOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmV2YWx1YXRlOiBsb2NhbCBvYmplY3QgJXUg
ZG9lc24ndCBleGlzdC4iLCBvYmplY3RJRCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKLSAg
ICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWTSYgdm0gPSBwbHVn
aW5Xb3JsZCgpLnZtKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQotICAgIFN0cm9uZzxKU0dsb2JhbE9iamVj
dD4gZ2xvYmFsT2JqZWN0KHZtLCBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldv
cmxkKCkpKTsKLQotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoYWxs
b3dQb3B1cHMgPyBzdGQ6Om9wdGlvbmFsPFByb2Nlc3NpbmdVc2VyR2VzdHVyZVN0YXRlPihQcm9j
ZXNzaW5nVXNlckdlc3R1cmUpIDogc3RkOjpudWxsb3B0KTsKLSAgICAKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IEpTQzo6ZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LmdldCgpLCBKU0M6Om1ha2VTb3VyY2Uo
c2NyaXB0LCB7IH0pKTsKLSAgICAKLSAgICBtYXJzaGFsVmFsdWUoZ2xvYmFsT2JqZWN0LmdldCgp
LCByZXN1bHQsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7Ci0gICAgc2NvcGUuY2xlYXJFeGNl
cHRpb24oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHk6Omludm9rZSh1aW50MzJfdCBvYmplY3RJRCwgY29uc3QgSWRlbnRpZmllciYgbWV0
aG9kTmFtZSwgZGF0YV90IGFyZ3VtZW50c0RhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgYXJn
dW1lbnRzTGVuZ3RoLCBkYXRhX3QmIHJlc3VsdERhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3Qm
IHJlc3VsdExlbmd0aCkKLXsKLSAgICByZXN1bHREYXRhID0gbnVsbHB0cjsKLSAgICByZXN1bHRM
ZW5ndGggPSAwOwotICAgIAotICAgIGlmIChtX2luRGVzdHJveSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIAotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBtX2xvY2FsT2JqZWN0cy5nZXQob2Jq
ZWN0SUQpOwotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIExPR19FUlJPUigiTmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2U6IGxvY2FsIG9iamVjdCAldSBkb2Vzbid0IGV4aXN0
LiIsIG9iamVjdElEKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBG
cmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKLSAgICBpZiAoIWZy
YW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgp
LnZtKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKLQotICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0ID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKTsKLSAg
ICBKU1ZhbHVlIGZ1bmN0aW9uID0gb2JqZWN0LT5nZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgbWV0
aG9kTmFtZSk7Ci0gICAgYXV0byBjYWxsRGF0YSA9IGdldENhbGxEYXRhKHZtLCBmdW5jdGlvbik7
Ci0gICAgaWYgKGNhbGxEYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xpc3Q7Ci0gICAg
ZGVtYXJzaGFsVmFsdWVzKGxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50c0RhdGEsIGFyZ3Vt
ZW50c0xlbmd0aCwgYXJnTGlzdCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWFyZ0xpc3QuaGFzT3Zl
cmZsb3dlZCgpKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsKGxleGljYWxHbG9iYWxPYmpl
Y3QsIGZ1bmN0aW9uLCBjYWxsRGF0YSwgb2JqZWN0LCBhcmdMaXN0KTsKLSAgICAgICAgCi0gICAg
bWFyc2hhbFZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCByZXN1bHREYXRhLCByZXN1
bHRMZW5ndGgpOwotICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2VEZWZhdWx0KHVp
bnQzMl90IG9iamVjdElELCBkYXRhX3QgYXJndW1lbnRzRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1i
ZXJfdCBhcmd1bWVudHNMZW5ndGgsIGRhdGFfdCYgcmVzdWx0RGF0YSwgbWFjaF9tc2dfdHlwZV9u
dW1iZXJfdCYgcmVzdWx0TGVuZ3RoKQotewotICAgIGlmIChtX2luRGVzdHJveSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgSlNPYmplY3QqIG9iamVjdCA9IG1fbG9jYWxPYmplY3RzLmdl
dChvYmplY3RJRCk7Ci0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omludm9rZURlZmF1bHQ6IGxvY2FsIG9iamVjdCAldSBk
b2Vzbid0IGV4aXN0LiIsIG9iamVjdElEKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICAKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsK
LSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWTSYgdm0gPSBw
bHVnaW5Xb3JsZCgpLnZtKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQotICAgIEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0ID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5X
b3JsZCgpKTsKLSAgICBhdXRvIGNhbGxEYXRhID0gZ2V0Q2FsbERhdGEodm0sIG9iamVjdCk7Ci0g
ICAgaWYgKGNhbGxEYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xpc3Q7Ci0gICAgZGVt
YXJzaGFsVmFsdWVzKGxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50c0RhdGEsIGFyZ3VtZW50
c0xlbmd0aCwgYXJnTGlzdCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWFyZ0xpc3QuaGFzT3ZlcmZs
b3dlZCgpKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsKGxleGljYWxHbG9iYWxPYmplY3Qs
IG9iamVjdCwgY2FsbERhdGEsIG9iamVjdCwgYXJnTGlzdCk7Ci0gICAgCi0gICAgbWFyc2hhbFZh
bHVlKGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCByZXN1bHREYXRhLCByZXN1bHRMZW5ndGgp
OwotICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpjb25zdHJ1Y3QodWludDMyX3Qgb2JqZWN0
SUQsIGRhdGFfdCBhcmd1bWVudHNEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90IGFyZ3VtZW50
c0xlbmd0aCwgZGF0YV90JiByZXN1bHREYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90JiByZXN1
bHRMZW5ndGgpCi17Ci0gICAgaWYgKG1faW5EZXN0cm95KQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBKU09iamVjdCogb2JqZWN0ID0gbV9sb2NhbE9iamVjdHMuZ2V0KG9iamVjdElEKTsK
LSAgICBpZiAoIW9iamVjdCkgewotICAgICAgICBMT0dfRVJST1IoIk5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6Y29uc3RydWN0OiBsb2NhbCBvYmplY3QgJXUgZG9lc24ndCBleGlzdC4iLCBv
YmplY3RJRCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgRnJhbWUq
IGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgp
OwotICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSk7Ci0KLSAgICBh
dXRvIGNvbnN0cnVjdERhdGEgPSBnZXRDb25zdHJ1Y3REYXRhKHZtLCBvYmplY3QpOwotICAgIGlm
IChjb25zdHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xpc3Q7Ci0gICAgZGVt
YXJzaGFsVmFsdWVzKGxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50c0RhdGEsIGFyZ3VtZW50
c0xlbmd0aCwgYXJnTGlzdCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWFyZ0xpc3QuaGFzT3ZlcmZs
b3dlZCgpKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU0M6OmNvbnN0cnVjdChsZXhpY2FsR2xv
YmFsT2JqZWN0LCBvYmplY3QsIGNvbnN0cnVjdERhdGEsIGFyZ0xpc3QpOwotICAgIAotICAgIG1h
cnNoYWxWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0
TGVuZ3RoKTsKLSAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0UHJvcGVydHkodWludDMy
X3Qgb2JqZWN0SUQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgZGF0YV90JiByZXN1
bHREYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90JiByZXN1bHRMZW5ndGgpCi17Ci0gICAgaWYg
KG1faW5EZXN0cm95KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBKU09iamVjdCogb2Jq
ZWN0ID0gbV9sb2NhbE9iamVjdHMuZ2V0KG9iamVjdElEKTsKLSAgICBpZiAoIW9iamVjdCkgewot
ICAgICAgICBMT0dfRVJST1IoIk5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0UHJvcGVy
dHk6IGxvY2FsIG9iamVjdCAldSBkb2Vzbid0IGV4aXN0LiIsIG9iamVjdElEKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3Bs
dWdpblZpZXcgd2ViRnJhbWVdKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7Ci0gICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0pOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQot
ICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZnJhbWUtPnNjcmlwdCgp
Lmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0
LT5nZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKLSAgICAKLSAgICBtYXJz
aGFsVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIHJlc3VsdERhdGEsIHJlc3VsdExl
bmd0aCk7Ci0gICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LSAgICAKLWJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRQcm9wZXJ0eSh1aW50
MzJfdCBvYmplY3RJRCwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBkYXRhX3QmIHJlc3VsdERhdGEs
IG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QmIHJlc3VsdExlbmd0aCkKLXsKLSAgICBKU09iamVjdCog
b2JqZWN0ID0gbV9sb2NhbE9iamVjdHMuZ2V0KG9iamVjdElEKTsKLSAgICBpZiAoIW9iamVjdCkg
ewotICAgICAgICBMT0dfRVJST1IoIk5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0UHJv
cGVydHk6IGxvY2FsIG9iamVjdCAldSBkb2Vzbid0IGV4aXN0LiIsIG9iamVjdElEKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtt
X3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7Ci0gICAgSlNMb2NrSG9s
ZGVyIGxvY2sodm0pOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsK
LQotICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZnJhbWUtPnNjcmlw
dCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gb2Jq
ZWN0LT5nZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKLSAgICAKLSAgICBt
YXJzaGFsVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIHJlc3VsdERhdGEsIHJlc3Vs
dExlbmd0aCk7Ci0gICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnNldFByb3BlcnR5KHVpbnQz
Ml90IG9iamVjdElELCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGRhdGFfdCB2YWx1
ZURhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgdmFsdWVMZW5ndGgpCi17Ci0gICAgaWYgKG1f
aW5EZXN0cm95KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBKU09iamVjdCogb2JqZWN0
ID0gbV9sb2NhbE9iamVjdHMuZ2V0KG9iamVjdElEKTsKLSAgICBpZiAoIW9iamVjdCkgewotICAg
ICAgICBMT0dfRVJST1IoIk5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c2V0UHJvcGVydHk6
IGxvY2FsIG9iamVjdCAldSBkb2Vzbid0IGV4aXN0LiIsIG9iamVjdElEKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdp
blZpZXcgd2ViRnJhbWVdKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxv
Y2sodm0pOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQotICAg
IEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZnJhbWUtPnNjcmlwdCgpLmds
b2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBkZW1hcnNo
YWxWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3RoKTsKLSAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QpOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUo
dm0pLT5wdXQob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzbG90KTsKLSAgICAKLSAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c2V0UHJvcGVydHko
dWludDMyX3Qgb2JqZWN0SUQsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgZGF0YV90IHZhbHVlRGF0
YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCB2YWx1ZUxlbmd0aCkKLXsKLSAgICBpZiAobV9pbkRl
c3Ryb3kpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBt
X2xvY2FsT2JqZWN0cy5nZXQob2JqZWN0SUQpOwotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAg
IExPR19FUlJPUigiTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRQcm9wZXJ0eTogbG9j
YWwgb2JqZWN0ICV1IGRvZXNuJ3QgZXhpc3QuIiwgb2JqZWN0SUQpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIAotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmll
dyB3ZWJGcmFtZV0pOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayh2
bSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFs
T2JqZWN0KHBsdWdpbldvcmxkKCkpOwotICAgIAotICAgIEpTVmFsdWUgdmFsdWUgPSBkZW1hcnNo
YWxWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3RoKTsKLSAg
ICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGZhbHNlKTsKLSAgICAKLSAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6cmVtb3ZlUHJvcGVydHkodWludDMyX3Qgb2JqZWN0SUQsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKLXsKLSAgICBpZiAobV9pbkRlc3Ryb3kpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBtX2xvY2FsT2JqZWN0
cy5nZXQob2JqZWN0SUQpOwotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIExPR19FUlJPUigi
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZW1vdmVQcm9wZXJ0eTogbG9jYWwgb2JqZWN0
ICV1IGRvZXNuJ3QgZXhpc3QuIiwgb2JqZWN0SUQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIAotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFt
ZV0pOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZNJiB2
bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBs
dWdpbldvcmxkKCkpOwotICAgIGlmICghb2JqZWN0LT5oYXNQcm9wZXJ0eShsZXhpY2FsR2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBKU0NlbGw6OmRlbGV0ZVByb3Bl
cnR5KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKLSAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwotICAgIHJldHVybiB0cnVlOwotfQotICAgIAotYm9vbCBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJlbW92ZVByb3BlcnR5KHVpbnQzMl90IG9iamVjdElE
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaWYgKG1faW5EZXN0cm95KQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBKU09iamVjdCogb2JqZWN0ID0gbV9sb2NhbE9iamVjdHMu
Z2V0KG9iamVjdElEKTsKLSAgICBpZiAoIW9iamVjdCkgewotICAgICAgICBMT0dfRVJST1IoIk5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6cmVtb3ZlUHJvcGVydHk6IGxvY2FsIG9iamVjdCAl
dSBkb2Vzbid0IGV4aXN0LiIsIG9iamVjdElEKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICAKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVd
KTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWTSYgdm0g
PSBwbHVnaW5Xb3JsZCgpLnZtKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQotICAgIEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVn
aW5Xb3JsZCgpKTsKLSAgICBpZiAoIW9iamVjdC0+aGFzUHJvcGVydHkobGV4aWNhbEdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lKSkgewotICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIG9iamVjdC0+bWV0aG9kVGFi
bGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWUpOwotICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpoYXNQcm9wZXJ0
eSh1aW50MzJfdCBvYmplY3RJRCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQotewot
ICAgIGlmIChtX2luRGVzdHJveSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNPYmpl
Y3QqIG9iamVjdCA9IG1fbG9jYWxPYmplY3RzLmdldChvYmplY3RJRCk7Ci0gICAgaWYgKCFvYmpl
Y3QpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omhh
c1Byb3BlcnR5OiBsb2NhbCBvYmplY3QgJXUgZG9lc24ndCBleGlzdC4iLCBvYmplY3RJRCk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0gY29y
ZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOwotICAgIEpTTG9j
a0hvbGRlciBsb2NrKHZtKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGZyYW1lLT5z
Y3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSk7Ci0gICAgYm9vbCByZXN1bHQgPSBv
YmplY3QtPmhhc1Byb3BlcnR5KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7Ci0g
ICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJv
b2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpoYXNQcm9wZXJ0eSh1aW50MzJfdCBvYmpl
Y3RJRCwgdW5zaWduZWQgcHJvcGVydHlOYW1lKQotewotICAgIGlmIChtX2luRGVzdHJveSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNPYmplY3QqIG9iamVjdCA9IG1fbG9jYWxPYmpl
Y3RzLmdldChvYmplY3RJRCk7Ci0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgTE9HX0VSUk9S
KCJOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omhhc1Byb3BlcnR5OiBsb2NhbCBvYmplY3Qg
JXUgZG9lc24ndCBleGlzdC4iLCBvYmplY3RJRCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1l
XSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVk0mIHZt
ID0gcGx1Z2luV29ybGQoKS52bSgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0KLSAgICBKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1
Z2luV29ybGQoKSk7Ci0gICAgYm9vbCByZXN1bHQgPSBvYmplY3QtPmhhc1Byb3BlcnR5KGxleGlj
YWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7Ci0gICAgc2NvcGUuY2xlYXJFeGNlcHRpb24o
KTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0gICAgCi1ib29sIE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6aGFzTWV0aG9kKHVpbnQzMl90IG9iamVjdElELCBjb25zdCBJZGVudGlmaWVy
JiBtZXRob2ROYW1lKQotewotICAgIGlmIChtX2luRGVzdHJveSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgSlNPYmplY3QqIG9iamVjdCA9IG1fbG9jYWxPYmplY3RzLmdldChvYmplY3RJ
RCk7Ci0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6Omhhc01ldGhvZDogbG9jYWwgb2JqZWN0ICV1IGRvZXNuJ3QgZXhpc3Qu
Iiwgb2JqZWN0SUQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgRnJhbWUq
IGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgp
OwotICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSk7Ci0gICAgSlNW
YWx1ZSBmdW5jID0gb2JqZWN0LT5nZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgbWV0aG9kTmFtZSk7
Ci0gICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gIWZ1bmMuaXNVbmRlZmlu
ZWQoKTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmVudW1lcmF0ZSh1
aW50MzJfdCBvYmplY3RJRCwgZGF0YV90JiByZXN1bHREYXRhLCBtYWNoX21zZ190eXBlX251bWJl
cl90JiByZXN1bHRMZW5ndGgpCi17Ci0gICAgaWYgKG1faW5EZXN0cm95KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBKU09iamVjdCogb2JqZWN0ID0gbV9sb2NhbE9iamVjdHMuZ2V0KG9i
amVjdElEKTsKLSAgICBpZiAoIW9iamVjdCkgewotICAgICAgICBMT0dfRVJST1IoIk5ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eTo6ZW51bWVyYXRlOiBsb2NhbCBvYmplY3QgJXUgZG9lc24ndCBl
eGlzdC4iLCBvYmplY3RJRCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0g
ICAgRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7Ci0gICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVk0mIHZtID0gcGx1Z2luV29y
bGQoKS52bSgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSk7
Ci0gCi0gICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlOYW1l
TW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwotICAgIG9iamVjdC0+
Z2V0UHJvcGVydHlOYW1lcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBEb250
RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKTsKLQotICAgIFJldGFpblB0cjxOU011dGFibGVB
cnJheT4gYXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydHlOYW1lcy5zaXplKCk7IGkrKykgewot
ICAgICAgICB1aW50NjRfdCBtZXRob2ROYW1lID0gcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4o
X05QTl9HZXRTdHJpbmdJZGVudGlmaWVyKHByb3BlcnR5TmFtZXNbaV0uc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSkpOwotCi0gICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6W05TTnVtYmVyIG51
bWJlcldpdGhMb25nTG9uZzptZXRob2ROYW1lXV07Ci0gICAgfQotCi0gICAgTlNEYXRhICpkYXRh
ID0gW05TUHJvcGVydHlMaXN0U2VyaWFsaXphdGlvbiBkYXRhV2l0aFByb3BlcnR5TGlzdDphcnJh
eS5nZXQoKSBmb3JtYXQ6TlNQcm9wZXJ0eUxpc3RCaW5hcnlGb3JtYXRfdjFfMCBvcHRpb25zOjAg
ZXJyb3I6bnVsbHB0cl07Ci0gICAgQVNTRVJUKGRhdGEpOwotCi0gICAgcmVzdWx0TGVuZ3RoID0g
W2RhdGEgbGVuZ3RoXTsKLSAgICBtaWdfYWxsb2NhdGUocmVpbnRlcnByZXRfY2FzdDx2bV9hZGRy
ZXNzX3QqPigmcmVzdWx0RGF0YSksIHJlc3VsdExlbmd0aCk7Ci0KLSAgICBtZW1jcHkocmVzdWx0
RGF0YSwgW2RhdGEgYnl0ZXNdLCByZXN1bHRMZW5ndGgpOwotCi0gICAgc2NvcGUuY2xlYXJFeGNl
cHRpb24oKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBnZXRPYmplY3RJ
RChOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIHBsdWdpbkluc3RhbmNlUHJveHksIEpTT2Jq
ZWN0KiBvYmplY3QsIHVpbnQ2NF90JiBvYmplY3RJRCkKLXsKLSAgICBKU0M6OlZNJiB2bSA9IG9i
amVjdC0+dm0oKTsKLSAgICBpZiAob2JqZWN0LT5jbGFzc0luZm8odm0pICE9IFByb3h5UnVudGlt
ZU9iamVjdDo6aW5mbygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQcm94eVJ1bnRp
bWVPYmplY3QqIHJ1bnRpbWVPYmplY3QgPSBzdGF0aWNfY2FzdDxQcm94eVJ1bnRpbWVPYmplY3Qq
PihvYmplY3QpOwotICAgIFByb3h5SW5zdGFuY2UqIGluc3RhbmNlID0gcnVudGltZU9iamVjdC0+
Z2V0SW50ZXJuYWxQcm94eUluc3RhbmNlKCk7Ci0gICAgaWYgKCFpbnN0YW5jZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGluc3RhbmNlLT5pbnN0YW5jZVByb3h5KCkgIT0gcGx1
Z2luSW5zdGFuY2VQcm94eSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb2JqZWN0SUQg
PSBpbnN0YW5jZS0+b2JqZWN0SUQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAgICAKLXZvaWQg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjphZGRWYWx1ZVRvQXJyYXkoTlNNdXRhYmxlQXJy
YXkgKmFycmF5LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2
YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEpT
TG9ja0hvbGRlciBsb2NrKHZtKTsKLQotICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAg
ICAgIFthcnJheSBhZGRPYmplY3Q6QChTdHJpbmdWYWx1ZVR5cGUpXTsKLSAgICAgICAgW2FycmF5
IGFkZE9iamVjdDphc1N0cmluZyh2YWx1ZSktPnZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QpXTsK
LSAgICB9IGVsc2UgaWYgKHZhbHVlLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgW2FycmF5IGFkZE9i
amVjdDpAKERvdWJsZVZhbHVlVHlwZSldOwotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OkAodmFs
dWUudG9OdW1iZXIobGV4aWNhbEdsb2JhbE9iamVjdCkpXTsKLSAgICB9IGVsc2UgaWYgKHZhbHVl
LmlzQm9vbGVhbigpKSB7Ci0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6QChCb29sVmFsdWVUeXBl
KV07Ci0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOnZh
bHVlLnRvQm9vbGVhbihsZXhpY2FsR2xvYmFsT2JqZWN0KV1dOwotICAgIH0gZWxzZSBpZiAodmFs
dWUuaXNOdWxsKCkpCi0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6QChOdWxsVmFsdWVUeXBlKV07
Ci0gICAgZWxzZSBpZiAodmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gYXNPYmplY3QodmFsdWUpOwotICAgICAgICB1aW50NjRfdCBvYmplY3RJRDsKLSAgICAg
ICAgaWYgKGdldE9iamVjdElEKHRoaXMsIG9iamVjdCwgb2JqZWN0SUQpKSB7Ci0gICAgICAgICAg
ICBbYXJyYXkgYWRkT2JqZWN0OkAoTlBPYmplY3RWYWx1ZVR5cGUpXTsKLSAgICAgICAgICAgIFth
cnJheSBhZGRPYmplY3Q6QChvYmplY3RJRCldOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgW2FycmF5IGFkZE9iamVjdDpAKEpTT2JqZWN0VmFsdWVUeXBlKV07Ci0gICAgICAgICAgICBb
YXJyYXkgYWRkT2JqZWN0OkAobV9sb2NhbE9iamVjdHMuaWRGb3JPYmplY3Qodm0sIG9iamVjdCkp
XTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OkAoVm9p
ZFZhbHVlVHlwZSldOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6bWFy
c2hhbFZhbHVlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBkYXRhX3QmIHJlc3VsdERhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QmIHJlc3VsdExl
bmd0aCkKLXsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGFycmF5ID0gYWRvcHROUyhb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0gICAgCi0gICAgYWRkVmFsdWVUb0FycmF5
KGFycmF5LmdldCgpLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0KLSAgICBOU0RhdGEg
KmRhdGEgPSBbTlNQcm9wZXJ0eUxpc3RTZXJpYWxpemF0aW9uIGRhdGFXaXRoUHJvcGVydHlMaXN0
OmFycmF5LmdldCgpIGZvcm1hdDpOU1Byb3BlcnR5TGlzdEJpbmFyeUZvcm1hdF92MV8wIG9wdGlv
bnM6MCBlcnJvcjpudWxscHRyXTsKLSAgICBBU1NFUlQoZGF0YSk7Ci0gICAgCi0gICAgcmVzdWx0
TGVuZ3RoID0gZGF0YS5sZW5ndGg7Ci0gICAgbWlnX2FsbG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8
dm1fYWRkcmVzc190Kj4oJnJlc3VsdERhdGEpLCByZXN1bHRMZW5ndGgpOwotICAgIAotICAgIG1l
bWNweShyZXN1bHREYXRhLCBkYXRhLmJ5dGVzLCByZXN1bHRMZW5ndGgpOwotfQotCi1SZXRhaW5Q
dHI8TlNEYXRhPiBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Om1hcnNoYWxWYWx1ZXMoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCi17
Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBhcnJheSA9IGFkb3B0TlMoW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdF0pOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFy
Z3Muc2l6ZSgpOyBpKyspCi0gICAgICAgIGFkZFZhbHVlVG9BcnJheShhcnJheS5nZXQoKSwgbGV4
aWNhbEdsb2JhbE9iamVjdCwgYXJncy5hdChpKSk7Ci0KLSAgICBOU0RhdGEgKmRhdGEgPSBbTlNQ
cm9wZXJ0eUxpc3RTZXJpYWxpemF0aW9uIGRhdGFXaXRoUHJvcGVydHlMaXN0OmFycmF5LmdldCgp
IGZvcm1hdDpOU1Byb3BlcnR5TGlzdEJpbmFyeUZvcm1hdF92MV8wIG9wdGlvbnM6MCBlcnJvcjpu
dWxscHRyXTsKLSAgICBBU1NFUlQoZGF0YSk7Ci0KLSAgICByZXR1cm4gZGF0YTsKLX0gICAgCi0K
LWJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpkZW1hcnNoYWxWYWx1ZUZyb21BcnJh
eShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgTlNBcnJheSAqYXJyYXksIE5T
VUludGVnZXImIGluZGV4LCBKU1ZhbHVlJiByZXN1bHQpCi17Ci0gICAgaWYgKGluZGV4ID09IFth
cnJheSBjb3VudF0pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgIAot
ICAgIGludCB0eXBlID0gW1thcnJheSBvYmplY3RBdEluZGV4OmluZGV4KytdIGludFZhbHVlXTsK
LSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBWb2lkVmFsdWVUeXBlOgotICAgICAg
ICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBjYXNlIE51bGxWYWx1ZVR5cGU6Ci0gICAgICAgICAgICByZXN1bHQgPSBqc051bGwo
KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjYXNlIEJvb2xWYWx1ZVR5cGU6
Ci0gICAgICAgICAgICByZXN1bHQgPSBqc0Jvb2xlYW4oW1thcnJheSBvYmplY3RBdEluZGV4Omlu
ZGV4KytdIGJvb2xWYWx1ZV0pOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNh
c2UgRG91YmxlVmFsdWVUeXBlOgotICAgICAgICAgICAgcmVzdWx0ID0ganNOdW1iZXIoW1thcnJh
eSBvYmplY3RBdEluZGV4OmluZGV4KytdIGRvdWJsZVZhbHVlXSk7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBTdHJpbmdWYWx1ZVR5cGU6IHsKLSAgICAgICAgICAgIE5T
U3RyaW5nICpzdHJpbmcgPSBbYXJyYXkgb2JqZWN0QXRJbmRleDppbmRleCsrXTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgcmVzdWx0ID0ganNTdHJpbmcobGV4aWNhbEdsb2JhbE9iamVjdC0+
dm0oKSwgU3RyaW5nKHN0cmluZykpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBKU09iamVjdFZhbHVlVHlwZTogewotICAgICAgICAgICAgdWludDMy
X3Qgb2JqZWN0SUQgPSBbW2FycmF5IG9iamVjdEF0SW5kZXg6aW5kZXgrK10gaW50VmFsdWVdOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICByZXN1bHQgPSBtX2xvY2FsT2JqZWN0cy5nZXQob2Jq
ZWN0SUQpOwotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIE5QT2JqZWN0VmFsdWVUeXBlOiB7Ci0gICAg
ICAgICAgICB1aW50MzJfdCBvYmplY3RJRCA9IFtbYXJyYXkgb2JqZWN0QXRJbmRleDppbmRleCsr
XSBpbnRWYWx1ZV07Ci0KLSAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2lu
VmlldyB3ZWJGcmFtZV0pOwotICAgICAgICAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghZnJhbWUtPnNj
cmlwdCgpLmNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGF1dG8gcm9vdE9iamVjdCA9
IGZyYW1lLT5zY3JpcHQoKS5jcmVhdGVSb290T2JqZWN0KChfX2JyaWRnZSB2b2lkKiltX3BsdWdp
blZpZXcpOwotICAgICAgICAgICAgcmVzdWx0ID0gUHJveHlJbnN0YW5jZTo6Y3JlYXRlKFdURk1v
dmUocm9vdE9iamVjdCksIHRoaXMsIG9iamVjdElEKS0+Y3JlYXRlUnVudGltZU9iamVjdChsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLUpTVmFsdWUgTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjpkZW1hcnNoYWxWYWx1ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgY29uc3QgY2hhciogdmFsdWVEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90IHZh
bHVlTGVuZ3RoKQotewotICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGEgPSBhZG9wdE5TKFtbTlNE
YXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzTm9Db3B5Oih2b2lkKil2YWx1ZURhdGEgbGVuZ3RoOnZh
bHVlTGVuZ3RoIGZyZWVXaGVuRG9uZTpOT10pOwotCi0gICAgTlNBcnJheSAqYXJyYXkgPSBbTlNQ
cm9wZXJ0eUxpc3RTZXJpYWxpemF0aW9uIHByb3BlcnR5TGlzdFdpdGhEYXRhOmRhdGEuZ2V0KCkg
b3B0aW9uczpOU1Byb3BlcnR5TGlzdEltbXV0YWJsZSBmb3JtYXQ6bnVsbHB0ciBlcnJvcjpudWxs
cHRyXTsKLQotICAgIE5TVUludGVnZXIgcG9zaXRpb24gPSAwOwotICAgIEpTVmFsdWUgdmFsdWU7
Ci0gICAgYm9vbCByZXN1bHQgPSBkZW1hcnNoYWxWYWx1ZUZyb21BcnJheShsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcnJheSwgcG9zaXRpb24sIHZhbHVlKTsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc3Vs
dCwgcmVzdWx0KTsKLQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OmRlbWFyc2hhbFZhbHVlcyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgZGF0YV90IHZhbHVlc0RhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgdmFs
dWVzTGVuZ3RoLCBNYXJrZWRBcmd1bWVudEJ1ZmZlckJhc2UmIHJlc3VsdCkKLXsKLSAgICBSZXRh
aW5QdHI8TlNEYXRhPiBkYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRl
c05vQ29weTp2YWx1ZXNEYXRhIGxlbmd0aDp2YWx1ZXNMZW5ndGggZnJlZVdoZW5Eb25lOk5PXSk7
Ci0KLSAgICBOU0FycmF5ICphcnJheSA9IFtOU1Byb3BlcnR5TGlzdFNlcmlhbGl6YXRpb24gcHJv
cGVydHlMaXN0V2l0aERhdGE6ZGF0YS5nZXQoKSBvcHRpb25zOk5TUHJvcGVydHlMaXN0SW1tdXRh
YmxlIGZvcm1hdDpudWxscHRyIGVycm9yOm51bGxwdHJdOwotCi0gICAgTlNVSW50ZWdlciBwb3Np
dGlvbiA9IDA7Ci0gICAgSlNWYWx1ZSB2YWx1ZTsKLSAgICB3aGlsZSAoZGVtYXJzaGFsVmFsdWVG
cm9tQXJyYXkobGV4aWNhbEdsb2JhbE9iamVjdCwgYXJyYXksIHBvc2l0aW9uLCB2YWx1ZSkpCi0g
ICAgICAgIHJlc3VsdC5hcHBlbmQodmFsdWUpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6cmV0YWluTG9jYWxPYmplY3QoSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAg
IGlmICghdmFsdWUuaXNPYmplY3QoKSB8fCB2YWx1ZS5pbmhlcml0czxQcm94eVJ1bnRpbWVPYmpl
Y3Q+KHZhbHVlLmdldE9iamVjdCgpLT52bSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9s
b2NhbE9iamVjdHMucmV0YWluKGFzT2JqZWN0KHZhbHVlKSk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5OjpyZWxlYXNlTG9jYWxPYmplY3QoSlNDOjpKU1ZhbHVlIHZhbHVl
KQotewotICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSB8fCB2YWx1ZS5pbmhlcml0czxQcm94eVJ1
bnRpbWVPYmplY3Q+KHZhbHVlLmdldE9iamVjdCgpLT52bSgpKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9sb2NhbE9iamVjdHMucmVsZWFzZShhc09iamVjdCh2YWx1ZSkpOwotfQotCi1SZWZQ
dHI8SW5zdGFuY2U+IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y3JlYXRlQmluZGluZ3NJ
bnN0YW5jZShSZWY8Um9vdE9iamVjdD4mJiByb290T2JqZWN0KQotewotICAgIHVpbnQzMl90IHJl
cXVlc3RJRCA9IG5leHRSZXF1ZXN0SUQoKTsKLSAgICAKLSAgICBpZiAoX1dLUEhHZXRTY3JpcHRh
YmxlTlBPYmplY3QobV9wbHVnaW5Ib3N0UHJveHktPnBvcnQoKSwgbV9wbHVnaW5JRCwgcmVxdWVz
dElEKSAhPSBLRVJOX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0
byByZXBseSA9IHdhaXRGb3JSZXBseTxHZXRTY3JpcHRhYmxlTlBPYmplY3RSZXBseT4ocmVxdWVz
dElEKTsKLSAgICBpZiAoIXJlcGx5KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlm
ICghcmVwbHktPm1fb2JqZWN0SUQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8g
U2luY2UgdGhlIHJlcGx5IHdhcyBub24tbnVsbCwgInRoaXMiIGlzIHN0aWxsIGEgdmFsaWQgcG9p
bnRlci4KLSAgICByZXR1cm4gUHJveHlJbnN0YW5jZTo6Y3JlYXRlKFdURk1vdmUocm9vdE9iamVj
dCksIHRoaXMsIHJlcGx5LT5tX29iamVjdElEKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6OmFkZEluc3RhbmNlKFByb3h5SW5zdGFuY2UqIGluc3RhbmNlKQotewotICAg
IEFTU0VSVCghbV9pbnN0YW5jZXMuY29udGFpbnMoaW5zdGFuY2UpKTsKLSAgICAKLSAgICBtX2lu
c3RhbmNlcy5hZGQoaW5zdGFuY2UpOwotfQotICAgIAotdm9pZCBOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHk6OnJlbW92ZUluc3RhbmNlKFByb3h5SW5zdGFuY2UqIGluc3RhbmNlKQotewotICAg
IEFTU0VSVChtX2luc3RhbmNlcy5jb250YWlucyhpbnN0YW5jZSkpOwotICAgIAotICAgIG1faW5z
dGFuY2VzLnJlbW92ZShpbnN0YW5jZSk7Ci19Ci0gCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6d2lsbENhbGxQbHVnaW5GdW5jdGlvbigpCi17Ci0gICAgbV9wbHVnaW5GdW5jdGlv
bkNhbGxEZXB0aCsrOwotfQotICAgIAotdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OmRpZENhbGxQbHVnaW5GdW5jdGlvbihib29sJiBzdG9wcGVkKQotewotICAgIEFTU0VSVChtX3Bs
dWdpbkZ1bmN0aW9uQ2FsbERlcHRoID4gMCk7Ci0gICAgbV9wbHVnaW5GdW5jdGlvbkNhbGxEZXB0
aC0tOwotICAgIAotICAgIC8vIElmIC1zdG9wIHdhcyBjYWxsZWQgd2hpbGUgd2Ugd2VyZSBjYWxs
aW5nIGludG8gYSBwbHVnLWluIGZ1bmN0aW9uLCBhbmQgd2UncmUgbm8gbG9uZ2VyCi0gICAgLy8g
aW5zaWRlIGEgcGx1Zy1pbiBmdW5jdGlvbiwgc3RvcCBub3cuCi0gICAgaWYgKCFtX3BsdWdpbkZ1
bmN0aW9uQ2FsbERlcHRoICYmIG1fc2hvdWxkU3RvcFNvb24pIHsKLSAgICAgICAgbV9zaG91bGRT
dG9wU29vbiA9IGZhbHNlOwotICAgICAgICBbbV9wbHVnaW5WaWV3IHN0b3BdOwotICAgICAgICBz
dG9wcGVkID0gdHJ1ZTsKLSAgICB9Ci19Ci0gICAgCi1ib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6c2hvdWxkU3RvcCgpCi17Ci0gICAgaWYgKG1fcGx1Z2luRnVuY3Rpb25DYWxsRGVw
dGgpIHsKLSAgICAgICAgbV9zaG91bGRTdG9wU29vbiA9IHRydWU7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXVpbnQzMl90IE5ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6bmV4dFJlcXVlc3RJRCgpCi17Ci0gICAgdWludDMyX3Qg
cmVxdWVzdElEID0gKyttX2N1cnJlbnRSZXF1ZXN0SUQ7Ci0gICAgCi0gICAgLy8gV2UgZG9uJ3Qg
d2FudCB0byByZXR1cm4gdGhlIEhhc2hNYXAgZW1wdHkvZGVsZXRlZCAic3BlY2lhbCBrZXlzIgot
ICAgIGlmIChyZXF1ZXN0SUQgPT0gMCB8fCByZXF1ZXN0SUQgPT0gc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KC0xKSkKLSAgICAgICAgcmV0dXJuIG5leHRSZXF1ZXN0SUQoKTsKLSAgICAKLSAgICByZXR1
cm4gcmVxdWVzdElEOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52
YWxpZGF0ZVJlY3QoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWln
aHQpCi17Ci0gICAgQVNTRVJUKG1fcGx1Z2luVmlldyk7Ci0gICAgCi0gICAgbV9wbHVnaW5Jc1dh
aXRpbmdGb3JEcmF3ID0gdHJ1ZTsKLSAgICBbbV9wbHVnaW5WaWV3IGludmFsaWRhdGVQbHVnaW5D
b250ZW50UmVjdDpOU01ha2VSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpXTsKLX0KLQotdm9pZCBO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmRpZERyYXcoKQotewotICAgIGlmICghbV9wbHVn
aW5Jc1dhaXRpbmdGb3JEcmF3KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9wbHVnaW5J
c1dhaXRpbmdGb3JEcmF3ID0gZmFsc2U7Ci0gICAgX1dLUEhQbHVnaW5JbnN0YW5jZURpZERyYXco
bV9wbHVnaW5Ib3N0UHJveHktPnBvcnQoKSwgbV9wbHVnaW5JRCk7Ci19Ci0gICAgCi1ib29sIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0Q29va2llcyhkYXRhX3QgdXJsRGF0YSwgbWFj
aF9tc2dfdHlwZV9udW1iZXJfdCB1cmxMZW5ndGgsIGRhdGFfdCYgY29va2llc0RhdGEsIG1hY2hf
bXNnX3R5cGVfbnVtYmVyX3QmIGNvb2tpZXNMZW5ndGgpCi17Ci0gICAgQVNTRVJUKG1fcGx1Z2lu
Vmlldyk7Ci0gICAgCi0gICAgTlNVUkwgKnVybCA9IFttX3BsdWdpblZpZXcgVVJMV2l0aENTdHJp
bmc6dXJsRGF0YV07Ci0gICAgaWYgKCF1cmwpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSkpIHsK
LSAgICAgICAgYXV0byogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICAgICAgaWYg
KCFkb2N1bWVudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAg
IGF1dG8qIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpOwotICAgICAgICBpZiAoIXBhZ2UpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IHBh
Z2UtPmNvb2tpZUphcigpLmNvb2tpZXMoKmRvY3VtZW50LCB1cmwpOwotICAgICAgICBXVEY6OkNT
dHJpbmcgY29va2llU3RyaW5nVVRGOCA9IGNvb2tpZVN0cmluZy51dGY4KCk7Ci0gICAgICAgIGlm
IChjb29raWVTdHJpbmdVVEY4LmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAKLSAgICAgICAgY29va2llc0xlbmd0aCA9IGNvb2tpZVN0cmluZ1VURjgubGVuZ3Ro
KCk7Ci0gICAgICAgIG1pZ19hbGxvY2F0ZShyZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdCo+
KCZjb29raWVzRGF0YSksIGNvb2tpZXNMZW5ndGgpOwotICAgICAgICBtZW1jcHkoY29va2llc0Rh
dGEsIGNvb2tpZVN0cmluZ1VURjguZGF0YSgpLCBjb29raWVzTGVuZ3RoKTsKLSAgICAgICAgCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLSAgICAK
LWJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRDb29raWVzKGRhdGFfdCB1cmxE
YXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90IHVybExlbmd0aCwgZGF0YV90IGNvb2tpZXNEYXRh
LCBtYWNoX21zZ190eXBlX251bWJlcl90IGNvb2tpZXNMZW5ndGgpCi17Ci0gICAgQVNTRVJUKG1f
cGx1Z2luVmlldyk7Ci0gICAgCi0gICAgTlNVUkwgKnVybCA9IFttX3BsdWdpblZpZXcgVVJMV2l0
aENTdHJpbmc6dXJsRGF0YV07Ci0gICAgaWYgKCF1cmwpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKSkg
ewotICAgICAgICBTdHJpbmcgY29va2llU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChjb29raWVz
RGF0YSwgY29va2llc0xlbmd0aCk7Ci0gICAgICAgIGlmICghY29va2llU3RyaW5nKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGF1dG8qIGRvY3VtZW50ID0gZnJhbWUtPmRv
Y3VtZW50KCk7Ci0gICAgICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgYXV0byogcGFnZSA9IGRvY3VtZW50LT5wYWdlKCk7Ci0gICAgICAgIGlm
ICghcGFnZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIHBh
Z2UtPmNvb2tpZUphcigpLnNldENvb2tpZXMoKmRvY3VtZW50LCB1cmwsIGNvb2tpZVN0cmluZyk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmdldFByb3h5KGRhdGFfdCB1cmxEYXRh
LCBtYWNoX21zZ190eXBlX251bWJlcl90IHVybExlbmd0aCwgZGF0YV90JiBwcm94eURhdGEsIG1h
Y2hfbXNnX3R5cGVfbnVtYmVyX3QmIHByb3h5TGVuZ3RoKQotewotICAgIEFTU0VSVChtX3BsdWdp
blZpZXcpOwotICAgIAotICAgIE5TVVJMICp1cmwgPSBbbV9wbHVnaW5WaWV3IFVSTFdpdGhDU3Ry
aW5nOnVybERhdGFdOwotICAgIGlmICghdXJsKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBWZWN0b3I8UHJveHlTZXJ2ZXI+IHByb3h5U2VydmVycyA9IHByb3h5U2VydmVyc0ZvclVSTCh1
cmwpOwotICAgIFdURjo6Q1N0cmluZyBwcm94eVN0cmluZ1VURjggPSB0b1N0cmluZyhwcm94eVNl
cnZlcnMpLnV0ZjgoKTsKLQotICAgIHByb3h5TGVuZ3RoID0gcHJveHlTdHJpbmdVVEY4Lmxlbmd0
aCgpOwotICAgIG1pZ19hbGxvY2F0ZShyZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdCo+KCZw
cm94eURhdGEpLCBwcm94eUxlbmd0aCk7Ci0gICAgbWVtY3B5KHByb3h5RGF0YSwgcHJveHlTdHJp
bmdVVEY4LmRhdGEoKSwgcHJveHlMZW5ndGgpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQot
ICAgIAotYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmdldEF1dGhlbnRpY2F0aW9u
SW5mbyhkYXRhX3QgcHJvdG9jb2xEYXRhLCBkYXRhX3QgaG9zdERhdGEsIHVpbnQzMl90IHBvcnQs
IGRhdGFfdCBzY2hlbWVEYXRhLCBkYXRhX3QgcmVhbG1EYXRhLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90JiB1c2VybmFtZURh
dGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QmIHVzZXJuYW1lTGVuZ3RoLCBkYXRhX3QmIHBhc3N3
b3JkRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCYgcGFzc3dvcmRMZW5ndGgpCi17Ci0gICAg
V1RGOjpDU3RyaW5nIHVzZXJuYW1lOwotICAgIFdURjo6Q1N0cmluZyBwYXNzd29yZDsKLSAgICAK
LSAgICBpZiAoIVdlYktpdDo6Z2V0QXV0aGVudGljYXRpb25JbmZvKHByb3RvY29sRGF0YSwgaG9z
dERhdGEsIHBvcnQsIHNjaGVtZURhdGEsIHJlYWxtRGF0YSwgdXNlcm5hbWUsIHBhc3N3b3JkKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHVzZXJuYW1lTGVuZ3RoID0gdXNlcm5h
bWUubGVuZ3RoKCk7Ci0gICAgbWlnX2FsbG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVz
c190Kj4oJnVzZXJuYW1lRGF0YSksIHVzZXJuYW1lTGVuZ3RoKTsKLSAgICBtZW1jcHkodXNlcm5h
bWVEYXRhLCB1c2VybmFtZS5kYXRhKCksIHVzZXJuYW1lTGVuZ3RoKTsKLSAgICAKLSAgICBwYXNz
d29yZExlbmd0aCA9IHBhc3N3b3JkLmxlbmd0aCgpOwotICAgIG1pZ19hbGxvY2F0ZShyZWludGVy
cHJldF9jYXN0PHZtX2FkZHJlc3NfdCo+KCZwYXNzd29yZERhdGEpLCBwYXNzd29yZExlbmd0aCk7
Ci0gICAgbWVtY3B5KHBhc3N3b3JkRGF0YSwgcGFzc3dvcmQuZGF0YSgpLCBwYXNzd29yZExlbmd0
aCk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5Ojpjb252ZXJ0UG9pbnQoZG91YmxlIHNvdXJjZVgsIGRvdWJsZSBzb3VyY2VZLCBO
UENvb3JkaW5hdGVTcGFjZSBzb3VyY2VTcGFjZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSYgZGVzdFgsIGRvdWJsZSYgZGVzdFksIE5QQ29v
cmRpbmF0ZVNwYWNlIGRlc3RTcGFjZSkKLXsKLSAgICBBU1NFUlQobV9wbHVnaW5WaWV3KTsKLQot
ICAgIHJldHVybiBbbV9wbHVnaW5WaWV3IGNvbnZlcnRGcm9tWDpzb3VyY2VYIGFuZFk6c291cmNl
WSBzcGFjZTpzb3VyY2VTcGFjZSB0b1g6JmRlc3RYIGFuZFk6JmRlc3RZIHNwYWNlOmRlc3RTcGFj
ZV07Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpwcml2YXRlQnJvd3Np
bmdNb2RlRGlkQ2hhbmdlKGJvb2wgaXNQcml2YXRlQnJvd3NpbmdFbmFibGVkKQotewotICAgIF9X
S1BIUGx1Z2luSW5zdGFuY2VQcml2YXRlQnJvd3NpbmdNb2RlRGlkQ2hhbmdlKG1fcGx1Z2luSG9z
dFByb3h5LT5wb3J0KCksIG1fcGx1Z2luSUQsIGlzUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk7Ci19
Ci0KLXN0YXRpYyBTdHJpbmcmIGdsb2JhbEV4Y2VwdGlvblN0cmluZygpCi17Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZXhjZXB0aW9uU3RyaW5nOwotICAgIHJldHVybiBleGNl
cHRpb25TdHJpbmc7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRH
bG9iYWxFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBleGNlcHRpb24pCi17Ci0gICAgZ2xvYmFsRXhj
ZXB0aW9uU3RyaW5nKCkgPSBleGNlcHRpb247Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5Ojptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QpCi17Ci0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAg
ICBpZiAoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgICAgICB0aHJvd0V4
Y2VwdGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkpKTsKLSAgICB9Ci0KLSAgICBnbG9i
YWxFeGNlcHRpb25TdHJpbmcoKSA9IFN0cmluZygpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKLQotI2VuZGlmIC8vIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKSAmJiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdp
bnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdp
bnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OTRkOWYwZGQyMzZhNWM2M2NlOTVmMDJjOTEwNWUyMThhZWUyMGM1Yy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9Q
bHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaWYgVVNFKFBMVUdJTl9IT1NUX1BST0NFU1MpCi0KLSNpZm5kZWYgUHJveHlJbnN0YW5jZV9o
Ci0jZGVmaW5lIFByb3h5SW5zdGFuY2VfaAotCi0jaW1wb3J0ICJOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHkuaCIKLSNpbXBvcnQgIldlYktpdFBsdWdpbkhvc3RUeXBlcy5oIgotI2ltcG9ydCA8
V2ViQ29yZS9CcmlkZ2VKU0MuaD4KLSNpbXBvcnQgPFdlYkNvcmUvcnVudGltZV9yb290Lmg+Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBQcm94eUNsYXNzOwotICAgIAotY2xhc3MgUHJv
eHlJbnN0YW5jZSA6IHB1YmxpYyBKU0M6OkJpbmRpbmdzOjpJbnN0YW5jZSB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxQcm94eUluc3RhbmNlPiBjcmVhdGUoUmVmPEpTQzo6QmluZGluZ3M6OlJv
b3RPYmplY3Q+JiYgcm9vdE9iamVjdCwgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0
YW5jZVByb3h5LCB1aW50MzJfdCBvYmplY3RJRCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFByb3h5SW5zdGFuY2UoV1RGTW92ZShyb290T2JqZWN0KSwgaW5zdGFuY2VQcm94
eSwgb2JqZWN0SUQpKTsKLSAgICB9Ci0gICAgflByb3h5SW5zdGFuY2UoKTsKLQotICAgIEpTQzo6
QmluZGluZ3M6Ok1ldGhvZCogbWV0aG9kTmFtZWQoSlNDOjpQcm9wZXJ0eU5hbWUpOwotICAgIEpT
Qzo6QmluZGluZ3M6OkZpZWxkKiBmaWVsZE5hbWVkKEpTQzo6UHJvcGVydHlOYW1lKTsKLQotICAg
IEpTQzo6SlNWYWx1ZSBmaWVsZFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6
OkJpbmRpbmdzOjpGaWVsZCopIGNvbnN0OwotICAgIGJvb2wgc2V0RmllbGRWYWx1ZShKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgY29uc3QgSlNDOjpCaW5kaW5nczo6RmllbGQqLCBKU0M6OkpTVmFsdWUp
IGNvbnN0OwotICAgIAotCi0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5j
ZVByb3h5KCkgeyByZXR1cm4gbV9pbnN0YW5jZVByb3h5OyB9Ci0KLSAgICB2b2lkIGludmFsaWRh
dGUoKTsKLSAgICAKLSAgICB1aW50MzJfdCBvYmplY3RJRCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Jq
ZWN0SUQ7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgUHJveHlJbnN0YW5jZShSZWY8SlNDOjpCaW5k
aW5nczo6Um9vdE9iamVjdD4mJiwgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiwgdWludDMy
X3Qgb2JqZWN0SUQpOwotCi0gICAgdmlydHVhbCBKU0M6OkJpbmRpbmdzOjpSdW50aW1lT2JqZWN0
KiBuZXdSdW50aW1lT2JqZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLQotICAgIHZpcnR1YWwg
SlNDOjpCaW5kaW5nczo6Q2xhc3MqIGdldENsYXNzKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIEpT
Qzo6SlNWYWx1ZSBnZXRNZXRob2QoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlO
YW1lKTsKLSAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSBpbnZva2VNZXRob2QoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKiwgSlNDOjpSdW50aW1lTWV0aG9kKik7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnZva2VEZWZhdWx0TWV0aG9kKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBKU0M6OkpTVmFsdWUgaW52b2tlRGVmYXVsdE1ldGhvZChKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpDYWxsRnJhbWUqKTsKLQotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvbnN0cnVj
dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlIGludm9rZUNvbnN0cnVjdChKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsK
LQotICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlIGRlZmF1bHRWYWx1ZShKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKLSAgICB2aXJ0dWFsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZU9mKEpTQzo6SlNHbG9iYWxPYmplY3QqKSBjb25zdDsKLSAgICAKLSAg
ICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpQcm9wZXJ0eU5hbWVBcnJheSYpOwotCi0gICAgSlNDOjpKU1ZhbHVlIHN0cmluZ1ZhbHVlKEpT
Qzo6SlNHbG9iYWxPYmplY3QqKSBjb25zdDsKLSAgICBKU0M6OkpTVmFsdWUgbnVtYmVyVmFsdWUo
SlNDOjpKU0dsb2JhbE9iamVjdCopIGNvbnN0OwotICAgIEpTQzo6SlNWYWx1ZSBib29sZWFuVmFs
dWUoKSBjb25zdDsKLSAgICAKLSAgICBKU0M6OkpTVmFsdWUgaW52b2tlKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkNhbGxGcmFtZSosIEludm9rZVR5cGUsIHVpbnQ2NF90IGlkZW50aWZpZXIs
IGNvbnN0IEpTQzo6QXJnTGlzdCYpOwotICAgIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxUPiB3YWl0Rm9yUmVwbHkodWludDMyX3QgcmVxdWVzdElEKSBj
b25zdAotICAgIHsKLSAgICAgICAgYXV0byByZXBseSA9IG1faW5zdGFuY2VQcm94eS0+d2FpdEZv
clJlcGx5PFQ+KHJlcXVlc3RJRCk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB0aGUgaW5zdGFu
Y2UgcHJveHkgd2FzIGludmFsaWRhdGVkLCBqdXN0IHJldHVybiBhIG51bGwgcmVwbHkuCi0gICAg
ICAgIGlmICghbV9pbnN0YW5jZVByb3h5KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgICAgIAotICAgICAgICByZXR1cm4gcmVwbHk7Ci0gICAgfQotCi0gICAgTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5KiBtX2luc3RhbmNlUHJveHk7Ci0gICAgdWludDMyX3QgbV9vYmplY3RJ
RDsKLSAgICBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgc3RkOjp1bmlxdWVfcHRyPEpTQzo6
QmluZGluZ3M6OkZpZWxkPj4gbV9maWVsZHM7Ci0gICAgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1w
bD4sIHN0ZDo6dW5pcXVlX3B0cjxKU0M6OkJpbmRpbmdzOjpNZXRob2Q+PiBtX21ldGhvZHM7Ci19
OwotICAgIAotfQotCi0jZW5kaWYgLy8gUHJveHlJbnN0YW5jZV9oCi0jZW5kaWYgLy8gVVNFKFBM
VUdJTl9IT1NUX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9Q
bHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
UGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMjk1ZGRiZTI4YmIwN2VlYzlhMjQ1NGQwYTAwZmUyZjY3Y2MzN2I1Ni4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCisrKyAvZGV2L251bGwKQEAgLTEs
NDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWYgVVNFKFBMVUdJTl9IT1NUX1BST0NFU1MpICYmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQotCi0jaW1wb3J0ICJQcm94eUluc3RhbmNlLmgiCi0KLSNpbXBvcnQgIk5ldHNj
YXBlUGx1Z2luSG9zdFByb3h5LmgiCi0jaW1wb3J0ICJQcm94eVJ1bnRpbWVPYmplY3QuaCIKLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0Vycm9yLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9G
dW5jdGlvblByb3RvdHlwZS5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNHbG9iYWxPYmpl
Y3RJbmxpbmVzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9Qcm9wZXJ0eU5hbWVBcnJheS5o
PgotI2ltcG9ydCA8V2ViQ29yZS9Db21tb25WTS5oPgotI2ltcG9ydCA8V2ViQ29yZS9JZGVudGlm
aWVyUmVwLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0pTRE9NV2luZG93Lmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL25wcnVudGltZV9pbXBsLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL3J1bnRpbWVfbWV0aG9kLmg+
Ci0jaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotZXh0ZXJuICJDIiB7Ci0jaW1wb3J0
ICJXZWJLaXRQbHVnaW5Ib3N0LmgiCi19Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci11c2luZyBu
YW1lc3BhY2UgSlNDOjpCaW5kaW5nczsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgUHJveHlDbGFzcyA6IHB1YmxpYyBKU0M6OkJpbmRpbmdz
OjpDbGFzcyB7Ci1wcml2YXRlOgotICAgIHZpcnR1YWwgTWV0aG9kKiBtZXRob2ROYW1lZChQcm9w
ZXJ0eU5hbWUsIEluc3RhbmNlKikgY29uc3Q7Ci0gICAgdmlydHVhbCBGaWVsZCogZmllbGROYW1l
ZChQcm9wZXJ0eU5hbWUsIEluc3RhbmNlKikgY29uc3Q7Ci19OwotCi1NZXRob2QqIFByb3h5Q2xh
c3M6Om1ldGhvZE5hbWVkKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEluc3RhbmNlKiBpbnN0
YW5jZSkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHJveHlJbnN0YW5jZSo+KGlu
c3RhbmNlKS0+bWV0aG9kTmFtZWQocHJvcGVydHlOYW1lKTsKLX0KLQotRmllbGQqIFByb3h5Q2xh
c3M6OmZpZWxkTmFtZWQoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSW5zdGFuY2UqIGluc3Rh
bmNlKSBjb25zdAotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxQcm94eUluc3RhbmNlKj4oaW5z
dGFuY2UpLT5maWVsZE5hbWVkKHByb3BlcnR5TmFtZSk7Ci19Ci0KLXN0YXRpYyBQcm94eUNsYXNz
KiBwcm94eUNsYXNzKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UHJveHlDbGFzcz4g
cHJveHlDbGFzczsKLSAgICByZXR1cm4gJnByb3h5Q2xhc3MuZ2V0KCk7Ci19Ci0gICAgCi1jbGFz
cyBQcm94eUZpZWxkIDogcHVibGljIEpTQzo6QmluZGluZ3M6OkZpZWxkIHsKLXB1YmxpYzoKLSAg
ICBQcm94eUZpZWxkKHVpbnQ2NF90IHNlcnZlcklkZW50aWZpZXIpCi0gICAgICAgIDogbV9zZXJ2
ZXJJZGVudGlmaWVyKHNlcnZlcklkZW50aWZpZXIpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB1
aW50NjRfdCBzZXJ2ZXJJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9zZXJ2ZXJJZGVudGlm
aWVyOyB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBKU1ZhbHVlIHZhbHVlRnJvbUluc3RhbmNl
KEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdGFuY2UqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgc2V0VmFsdWVUb0luc3RhbmNlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdGFuY2UqLCBK
U1ZhbHVlKSBjb25zdDsKLSAgICAKLSAgICB1aW50NjRfdCBtX3NlcnZlcklkZW50aWZpZXI7Ci19
OwotCi1KU1ZhbHVlIFByb3h5RmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBJbnN0YW5jZSogaW5zdGFuY2UpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFByb3h5SW5zdGFuY2UqPihpbnN0YW5jZSkt
PmZpZWxkVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpcyk7Ci19Ci0gICAgCi1ib29sIFBy
b3h5RmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgY29uc3QgSW5zdGFuY2UqIGluc3RhbmNlLCBKU1ZhbHVlIHZhbHVlKSBjb25zdAot
ewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBQcm94eUluc3RhbmNlKj4oaW5zdGFuY2Up
LT5zZXRGaWVsZFZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXMsIHZhbHVlKTsKLX0KLQot
Y2xhc3MgUHJveHlNZXRob2QgOiBwdWJsaWMgSlNDOjpCaW5kaW5nczo6TWV0aG9kIHsKLXB1Ymxp
YzoKLSAgICBQcm94eU1ldGhvZCh1aW50NjRfdCBzZXJ2ZXJJZGVudGlmaWVyKQotICAgICAgICA6
IG1fc2VydmVySWRlbnRpZmllcihzZXJ2ZXJJZGVudGlmaWVyKQotICAgIHsKLSAgICB9Ci0KLSAg
ICB1aW50NjRfdCBzZXJ2ZXJJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9zZXJ2ZXJJZGVu
dGlmaWVyOyB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBpbnQgbnVtUGFyYW1ldGVycygpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIHVpbnQ2NF90IG1fc2VydmVySWRlbnRpZmllcjsKLX07
Ci0KLVByb3h5SW5zdGFuY2U6OlByb3h5SW5zdGFuY2UoUmVmPFJvb3RPYmplY3Q+JiYgcm9vdE9i
amVjdCwgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZVByb3h5LCB1aW50MzJf
dCBvYmplY3RJRCkKLSAgICA6IEluc3RhbmNlKFdURk1vdmUocm9vdE9iamVjdCkpCi0gICAgLCBt
X2luc3RhbmNlUHJveHkoaW5zdGFuY2VQcm94eSkKLSAgICAsIG1fb2JqZWN0SUQob2JqZWN0SUQp
Ci17Ci0gICAgbV9pbnN0YW5jZVByb3h5LT5hZGRJbnN0YW5jZSh0aGlzKTsKLX0KLQotUHJveHlJ
bnN0YW5jZTo6flByb3h5SW5zdGFuY2UoKQotewotICAgIGlmICghbV9pbnN0YW5jZVByb3h5KQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9pbnN0YW5jZVByb3h5LT5yZW1vdmVJbnN0YW5j
ZSh0aGlzKTsKLQotICAgIGludmFsaWRhdGUoKTsKLX0KLSAgICAKLVJ1bnRpbWVPYmplY3QqIFBy
b3h5SW5zdGFuY2U6Om5ld1J1bnRpbWVPYmplY3QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QpCi17Ci0gICAgLy8gRklYTUU6IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNl
cyB0aGUgcHJvdG90eXBlIG9mZiBvZiB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdC4KLSAgICByZXR1
cm4gUHJveHlSdW50aW1lT2JqZWN0OjpjcmVhdGUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSwg
V2ViQ29yZTo6ZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZTxQcm94eVJ1bnRpbWVPYmplY3Q+KGxl
eGljYWxHbG9iYWxPYmplY3QpLCAqdGhpcyk7Ci19Ci0KLUpTQzo6QmluZGluZ3M6OkNsYXNzKiBQ
cm94eUluc3RhbmNlOjpnZXRDbGFzcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHByb3h5Q2xhc3Mo
KTsKLX0KLQotSlNWYWx1ZSBQcm94eUluc3RhbmNlOjppbnZva2UoSlNDOjpKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW52b2tl
VHlwZSB0eXBlLCB1aW50NjRfdCBpZGVudGlmaWVyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQotewot
ICAgIGlmICghbV9pbnN0YW5jZVByb3h5KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LQotICAgIFJldGFpblB0cjxOU0RhdGE+IGFyZ3VtZW50cyhtX2luc3RhbmNlUHJveHktPm1hcnNo
YWxWYWx1ZXMobGV4aWNhbEdsb2JhbE9iamVjdCwgYXJncykpOwotCi0gICAgdWludDMyX3QgcmVx
dWVzdElEID0gbV9pbnN0YW5jZVByb3h5LT5uZXh0UmVxdWVzdElEKCk7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYXJncy5zaXplKCk7IGkrKykKLSAgICAgICAgbV9pbnN0YW5jZVBy
b3h5LT5yZXRhaW5Mb2NhbE9iamVjdChhcmdzLmF0KGkpKTsKLQotICAgIGlmIChfV0tQSE5QT2Jq
ZWN0SW52b2tlKG1faW5zdGFuY2VQcm94eS0+aG9zdFByb3h5KCktPnBvcnQoKSwgbV9pbnN0YW5j
ZVByb3h5LT5wbHVnaW5JRCgpLCByZXF1ZXN0SUQsIG1fb2JqZWN0SUQsIHR5cGUsIGlkZW50aWZp
ZXIsIHN0YXRpY19jYXN0PGNoYXIqPihjb25zdF9jYXN0PHZvaWQqPihbYXJndW1lbnRzLmdldCgp
IGJ5dGVzXSkpLCBbYXJndW1lbnRzLmdldCgpIGxlbmd0aF0pICE9IEtFUk5fU1VDQ0VTUykgewot
ICAgICAgICBpZiAobV9pbnN0YW5jZVByb3h5KSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYXJncy5zaXplKCk7IGkrKykKLSAgICAgICAgICAgICAgICBtX2luc3RhbmNl
UHJveHktPnJlbGVhc2VMb2NhbE9iamVjdChhcmdzLmF0KGkpKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgCi0gICAgYXV0byByZXBseSA9IHdh
aXRGb3JSZXBseTxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkJvb2xlYW5BbmREYXRhUmVw
bHk+KHJlcXVlc3RJRCk7Ci0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojptb3ZlR2xv
YmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0KLSAgICBpZiAo
bV9pbnN0YW5jZVByb3h5KSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdz
LnNpemUoKTsgaSsrKQotICAgICAgICAgICAgbV9pbnN0YW5jZVByb3h5LT5yZWxlYXNlTG9jYWxP
YmplY3QoYXJncy5hdChpKSk7Ci0gICAgfQotCi0gICAgaWYgKCFyZXBseSB8fCAhcmVwbHktPm1f
cmV0dXJuVmFsdWUpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIAotICAgIHJl
dHVybiBtX2luc3RhbmNlUHJveHktPmRlbWFyc2hhbFZhbHVlKGxleGljYWxHbG9iYWxPYmplY3Qs
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnN0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KENGRGF0
YUdldEJ5dGVQdHIocmVwbHktPm1fcmVzdWx0LmdldCgpKSkpLCBDRkRhdGFHZXRMZW5ndGgocmVw
bHktPm1fcmVzdWx0LmdldCgpKSk7Ci19Ci0KLWNsYXNzIFByb3h5UnVudGltZU1ldGhvZCBmaW5h
bCA6IHB1YmxpYyBSdW50aW1lTWV0aG9kIHsKLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlID0gUnVu
dGltZU1ldGhvZDsKLQotICAgIHN0YXRpYyBQcm94eVJ1bnRpbWVNZXRob2QqIGNyZWF0ZShKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kKiBtZXRob2QpCi0gICAg
ewotICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgICAgIC8vIEZJWE1F
OiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlIHVzZXMgdGhlIHByb3RvdHlwZSBvZmYgb2YgdGhl
IHdyb25nIGdsb2JhbCBvYmplY3QKLSAgICAgICAgLy8gbGV4aWNhbEdsb2JhbE9iamVjdC12bSgp
IGlzIGFsc28gbGlrZWx5IHdyb25nLgotICAgICAgICBTdHJ1Y3R1cmUqIGRvbVN0cnVjdHVyZSA9
IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8UHJveHlSdW50aW1lTWV0aG9kPihsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKLSAgICAgICAgUHJveHlSdW50aW1lTWV0aG9kKiBydW50aW1lTWV0aG9kID0g
bmV3IChhbGxvY2F0ZUNlbGw8UHJveHlSdW50aW1lTWV0aG9kPih2bS5oZWFwKSkgUHJveHlSdW50
aW1lTWV0aG9kKHZtLCBkb21TdHJ1Y3R1cmUsIG1ldGhvZCk7Ci0gICAgICAgIHJ1bnRpbWVNZXRo
b2QtPmZpbmlzaENyZWF0aW9uKHZtLCBuYW1lKTsKLSAgICAgICAgcmV0dXJuIHJ1bnRpbWVNZXRo
b2Q7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhJbnRlcm5hbEZ1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAm
c19pbmZvKTsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0KLXByaXZhdGU6Ci0gICAgUHJv
eHlSdW50aW1lTWV0aG9kKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJpbmRpbmdzOjpN
ZXRob2QqIG1ldGhvZCkKLSAgICAgICAgOiBSdW50aW1lTWV0aG9kKHZtLCBzdHJ1Y3R1cmUsIG1l
dGhvZCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0sIGNv
bnN0IFN0cmluZyYgbmFtZSkKLSAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
LCBuYW1lKTsKLSAgICAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKLSAgICB9Ci19
OwotCi1jb25zdCBDbGFzc0luZm8gUHJveHlSdW50aW1lTWV0aG9kOjpzX2luZm8gPSB7ICJQcm94
eVJ1bnRpbWVNZXRob2QiLCAmUnVudGltZU1ldGhvZDo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKFByb3h5UnVudGltZU1ldGhvZCkgfTsKLQotSlNWYWx1ZSBQ
cm94eUluc3RhbmNlOjpnZXRNZXRob2QoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICBNZXRob2QqIG1ldGhv
ZCA9IGdldENsYXNzKCktPm1ldGhvZE5hbWVkKHByb3BlcnR5TmFtZSwgdGhpcyk7Ci0gICAgcmV0
dXJuIFByb3h5UnVudGltZU1ldGhvZDo6Y3JlYXRlKGxleGljYWxHbG9iYWxPYmplY3QsIGxleGlj
YWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCksIG1ldGhvZCk7Ci19Ci0K
LUpTVmFsdWUgUHJveHlJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0M6OlJ1bnRpbWVN
ZXRob2QqIHJ1bnRpbWVNZXRob2QpCi17Ci0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAg
ICBpZiAoIWFzT2JqZWN0KHJ1bnRpbWVNZXRob2QpLT5pbmhlcml0czxQcm94eVJ1bnRpbWVNZXRo
b2Q+KHZtKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHNjb3BlLCAiQXR0ZW1wdCB0byBpbnZva2Ugbm9uLXBsdWctaW4gbWV0aG9kIG9uIHBsdWct
aW4gb2JqZWN0LiJfcyk7Ci0KLSAgICBQcm94eU1ldGhvZCogbWV0aG9kID0gc3RhdGljX2Nhc3Q8
UHJveHlNZXRob2QqPihydW50aW1lTWV0aG9kLT5tZXRob2QoKSk7Ci0gICAgQVNTRVJUKG1ldGhv
ZCk7Ci0KLSAgICByZXR1cm4gaW52b2tlKGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwg
SW52b2tlLCBtZXRob2QtPnNlcnZlcklkZW50aWZpZXIoKSwgQXJnTGlzdChjYWxsRnJhbWUpKTsK
LX0KLQotYm9vbCBQcm94eUluc3RhbmNlOjpzdXBwb3J0c0ludm9rZURlZmF1bHRNZXRob2QoKSBj
b25zdAotewotICAgIGlmICghbV9pbnN0YW5jZVByb3h5KQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCi0gICAgdWludDMyX3QgcmVxdWVzdElEID0gbV9pbnN0YW5jZVByb3h5LT5uZXh0UmVx
dWVzdElEKCk7Ci0gICAgCi0gICAgaWYgKF9XS1BITlBPYmplY3RIYXNJbnZva2VEZWZhdWx0TWV0
aG9kKG1faW5zdGFuY2VQcm94eS0+aG9zdFByb3h5KCktPnBvcnQoKSwgbV9pbnN0YW5jZVByb3h5
LT5wbHVnaW5JRCgpLCByZXF1ZXN0SUQsIG1fb2JqZWN0SUQpICE9IEtFUk5fU1VDQ0VTUykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGF1dG8gcmVwbHkgPSB3YWl0Rm9yUmVwbHk8
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpCb29sZWFuUmVwbHk+KHJlcXVlc3RJRCk7Ci0g
ICAgcmV0dXJuIHJlcGx5ICYmIHJlcGx5LT5tX3Jlc3VsdDsKLX0KLQotSlNWYWx1ZSBQcm94eUlu
c3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9kKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICByZXR1cm4gaW52b2tlKGxleGlj
YWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgSW52b2tlRGVmYXVsdCwgMCwgQXJnTGlzdChjYWxs
RnJhbWUpKTsKLX0KLQotYm9vbCBQcm94eUluc3RhbmNlOjpzdXBwb3J0c0NvbnN0cnVjdCgpIGNv
bnN0Ci17Ci0gICAgaWYgKCFtX2luc3RhbmNlUHJveHkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKLSAgICB1aW50MzJfdCByZXF1ZXN0SUQgPSBtX2luc3RhbmNlUHJveHktPm5leHRSZXF1
ZXN0SUQoKTsKLSAgICAKLSAgICBpZiAoX1dLUEhOUE9iamVjdEhhc0NvbnN0cnVjdE1ldGhvZCht
X2luc3RhbmNlUHJveHktPmhvc3RQcm94eSgpLT5wb3J0KCksIG1faW5zdGFuY2VQcm94eS0+cGx1
Z2luSUQoKSwgcmVxdWVzdElELCBtX29iamVjdElEKSAhPSBLRVJOX1NVQ0NFU1MpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBhdXRvIHJlcGx5ID0gd2FpdEZvclJlcGx5PE5ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Qm9vbGVhblJlcGx5PihyZXF1ZXN0SUQpOwotICAgIHJl
dHVybiByZXBseSAmJiByZXBseS0+bV9yZXN1bHQ7Ci19Ci0gICAgCi1KU1ZhbHVlIFByb3h5SW5z
dGFuY2U6Omludm9rZUNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCi17Ci0gICAgcmV0
dXJuIGludm9rZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIENvbnN0cnVjdCwgMCwg
YXJncyk7Ci19Ci0KLUpTVmFsdWUgUHJveHlJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQp
IGNvbnN0Ci17Ci0gICAgaWYgKGhpbnQgPT0gUHJlZmVyU3RyaW5nKQotICAgICAgICByZXR1cm4g
c3RyaW5nVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgaWYgKGhpbnQgPT0gUHJlZmVy
TnVtYmVyKQotICAgICAgICByZXR1cm4gbnVtYmVyVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCk7
Ci0gICAgcmV0dXJuIHZhbHVlT2YobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci19Ci0KLUpTVmFsdWUg
UHJveHlJbnN0YW5jZTo6c3RyaW5nVmFsdWUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBzb21ldGhpbmcgc2Vuc2li
bGUuCi0gICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7
Ci19Ci0KLUpTVmFsdWUgUHJveHlJbnN0YW5jZTo6bnVtYmVyVmFsdWUoSlNHbG9iYWxPYmplY3Qq
KSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgc29tZXRoaW5nIHNlbnNpYmxlLgot
ICAgIHJldHVybiBqc051bWJlcigwKTsKLX0KLQotSlNWYWx1ZSBQcm94eUluc3RhbmNlOjpib29s
ZWFuVmFsdWUoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgc29tZXRoaW5nIHNl
bnNpYmxlLgotICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOwotfQotCi1KU1ZhbHVlIFByb3h5
SW5zdGFuY2U6OnZhbHVlT2YoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHN0cmluZ1ZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QpOwotfQot
Ci12b2lkIFByb3h5SW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBuYW1lQXJyYXkpCi17Ci0gICAg
aWYgKCFtX2luc3RhbmNlUHJveHkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB1aW50MzJf
dCByZXF1ZXN0SUQgPSBtX2luc3RhbmNlUHJveHktPm5leHRSZXF1ZXN0SUQoKTsKLSAgICAKLSAg
ICBpZiAoX1dLUEhOUE9iamVjdEVudW1lcmF0ZShtX2luc3RhbmNlUHJveHktPmhvc3RQcm94eSgp
LT5wb3J0KCksIG1faW5zdGFuY2VQcm94eS0+cGx1Z2luSUQoKSwgcmVxdWVzdElELCBtX29iamVj
dElEKSAhPSBLRVJOX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBhdXRvIHJl
cGx5ID0gd2FpdEZvclJlcGx5PE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Qm9vbGVhbkFu
ZERhdGFSZXBseT4ocmVxdWVzdElEKTsKLSAgICBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAg
ICBpZiAoIXJlcGx5IHx8ICFyZXBseS0+bV9yZXR1cm5WYWx1ZSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIE5TQXJyYXkgKmFycmF5ID0gW05TUHJvcGVydHlMaXN0U2VyaWFsaXphdGlvbiBw
cm9wZXJ0eUxpc3RXaXRoRGF0YTooX19icmlkZ2UgTlNEYXRhICopcmVwbHktPm1fcmVzdWx0Lmdl
dCgpIG9wdGlvbnM6TlNQcm9wZXJ0eUxpc3RJbW11dGFibGUgZm9ybWF0Om51bGxwdHIgZXJyb3I6
bnVsbHB0cl07Ci0gICAgCi0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsK
LSAgICBmb3IgKE5TTnVtYmVyICpudW1iZXIgaW4gYXJyYXkpIHsKLSAgICAgICAgSWRlbnRpZmll
clJlcCogaWRlbnRpZmllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SWRlbnRpZmllclJlcCo+KFtudW1i
ZXIgbG9uZ0xvbmdWYWx1ZV0pOwotICAgICAgICBpZiAoIUlkZW50aWZpZXJSZXA6OmlzVmFsaWQo
aWRlbnRpZmllcikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoaWRlbnRp
Zmllci0+aXNTdHJpbmcoKSkgewotICAgICAgICAgICAgY29uc3QgY2hhciogc3RyID0gaWRlbnRp
Zmllci0+c3RyaW5nKCk7Ci0gICAgICAgICAgICBuYW1lQXJyYXkuYWRkKElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soc3RyLCBzdHJs
ZW4oc3RyKSkpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuYW1lQXJyYXkuYWRkKElk
ZW50aWZpZXI6OmZyb20odm0sIGlkZW50aWZpZXItPm51bWJlcigpKSk7Ci0gICAgfQotfQotCi1N
ZXRob2QqIFByb3h5SW5zdGFuY2U6Om1ldGhvZE5hbWVkKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpCi17Ci0gICAgU3RyaW5nIG5hbWUocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Ci0gICAg
aWYgKG5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKCFt
X2luc3RhbmNlUHJveHkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIC8vIElm
IHdlIGFscmVhZHkgaGF2ZSBhbiBlbnRyeSBpbiB0aGUgbWFwLCB1c2UgaXQuCi0gICAgYXV0byBl
eGlzdGluZ01hcEVudHJ5ID0gbV9tZXRob2RzLmZpbmQobmFtZS5pbXBsKCkpOwotICAgIGlmIChl
eGlzdGluZ01hcEVudHJ5ICE9IG1fbWV0aG9kcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGV4aXN0
aW5nTWFwRW50cnktPnZhbHVlLmdldCgpOwotICAgIAotICAgIHVpbnQ2NF90IG1ldGhvZE5hbWUg
PSByZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIobmFt
ZS5hc2NpaSgpLmRhdGEoKSkpOwotICAgIHVpbnQzMl90IHJlcXVlc3RJRCA9IG1faW5zdGFuY2VQ
cm94eS0+bmV4dFJlcXVlc3RJRCgpOwotICAgIAotICAgIGlmIChfV0tQSE5QT2JqZWN0SGFzTWV0
aG9kKG1faW5zdGFuY2VQcm94eS0+aG9zdFByb3h5KCktPnBvcnQoKSwgbV9pbnN0YW5jZVByb3h5
LT5wbHVnaW5JRCgpLCByZXF1ZXN0SUQsIG1fb2JqZWN0SUQsIG1ldGhvZE5hbWUpICE9IEtFUk5f
U1VDQ0VTUykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgYXV0byByZXBseSA9
IHdhaXRGb3JSZXBseTxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkJvb2xlYW5SZXBseT4o
cmVxdWVzdElEKTsKLSAgICBpZiAoIXJlcGx5KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIGlmICghcmVwbHktPm1fcmVzdWx0ICYmICFtX2luc3RhbmNlUHJveHktPmhvc3RQcm94eSgp
LT5zaG91bGRDYWNoZU1pc3NpbmdQcm9wZXJ0aWVzQW5kTWV0aG9kcygpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIC8vIEFkZCBhIG5ldyBlbnRyeSB0byB0aGUgbWFwIHVubGVzcyBh
biBlbnRyeSB3YXMgYWRkZWQgd2hpbGUgd2Ugd2VyZSBpbiB3YWl0Rm9yUmVwbHkuCi0gICAgYXV0
byBtYXBBZGRSZXN1bHQgPSBtX21ldGhvZHMuYWRkKG5hbWUuaW1wbCgpLCBudWxscHRyKTsKLSAg
ICBpZiAobWFwQWRkUmVzdWx0LmlzTmV3RW50cnkgJiYgcmVwbHktPm1fcmVzdWx0KQotICAgICAg
ICBtYXBBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbWFrZVVuaXF1ZTxQcm94eU1ldGhvZD4o
bWV0aG9kTmFtZSk7Ci0KLSAgICByZXR1cm4gbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5n
ZXQoKTsKLX0KLQotRmllbGQqIFByb3h5SW5zdGFuY2U6OmZpZWxkTmFtZWQoUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkKLXsKLSAgICBTdHJpbmcgbmFtZShwcm9wZXJ0eU5hbWUucHVibGljTmFt
ZSgpKTsKLSAgICBpZiAobmFtZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBpZiAoIW1faW5zdGFuY2VQcm94eSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
Ci0gICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGFuIGVudHJ5IGluIHRoZSBtYXAsIHVzZSBpdC4K
LSAgICBhdXRvIGV4aXN0aW5nTWFwRW50cnkgPSBtX2ZpZWxkcy5maW5kKG5hbWUuaW1wbCgpKTsK
LSAgICBpZiAoZXhpc3RpbmdNYXBFbnRyeSAhPSBtX2ZpZWxkcy5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIGV4aXN0aW5nTWFwRW50cnktPnZhbHVlLmdldCgpOwotICAgIAotICAgIHVpbnQ2NF90IGlk
ZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihfTlBOX0dldFN0cmluZ0lkZW50
aWZpZXIobmFtZS5hc2NpaSgpLmRhdGEoKSkpOwotICAgIHVpbnQzMl90IHJlcXVlc3RJRCA9IG1f
aW5zdGFuY2VQcm94eS0+bmV4dFJlcXVlc3RJRCgpOwotICAgIAotICAgIGlmIChfV0tQSE5QT2Jq
ZWN0SGFzUHJvcGVydHkobV9pbnN0YW5jZVByb3h5LT5ob3N0UHJveHkoKS0+cG9ydCgpLCBtX2lu
c3RhbmNlUHJveHktPnBsdWdpbklEKCksIHJlcXVlc3RJRCwgbV9vYmplY3RJRCwgaWRlbnRpZmll
cikgIT0gS0VSTl9TVUNDRVNTKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBh
dXRvIHJlcGx5ID0gd2FpdEZvclJlcGx5PE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Qm9v
bGVhblJlcGx5PihyZXF1ZXN0SUQpOwotICAgIGlmICghcmVwbHkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIAotICAgIGlmICghcmVwbHktPm1fcmVzdWx0ICYmICFtX2luc3RhbmNlUHJv
eHktPmhvc3RQcm94eSgpLT5zaG91bGRDYWNoZU1pc3NpbmdQcm9wZXJ0aWVzQW5kTWV0aG9kcygp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICAvLyBBZGQgYSBuZXcgZW50cnkg
dG8gdGhlIG1hcCB1bmxlc3MgYW4gZW50cnkgd2FzIGFkZGVkIHdoaWxlIHdlIHdlcmUgaW4gd2Fp
dEZvclJlcGx5LgotICAgIGF1dG8gbWFwQWRkUmVzdWx0ID0gbV9maWVsZHMuYWRkKG5hbWUuaW1w
bCgpLCBudWxscHRyKTsKLSAgICBpZiAobWFwQWRkUmVzdWx0LmlzTmV3RW50cnkgJiYgcmVwbHkt
Pm1fcmVzdWx0KQotICAgICAgICBtYXBBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbWFrZVVu
aXF1ZTxQcm94eUZpZWxkPihpZGVudGlmaWVyKTsKLSAgICByZXR1cm4gbWFwQWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLX0KLQotSlNDOjpKU1ZhbHVlIFByb3h5SW5zdGFuY2U6OmZp
ZWxkVmFsdWUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IEZpZWxk
KiBmaWVsZCkgY29uc3QKLXsKLSAgICBpZiAoIW1faW5zdGFuY2VQcm94eSkKLSAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgCi0gICAgdWludDY0X3Qgc2VydmVySWRlbnRpZmllciA9
IHN0YXRpY19jYXN0PGNvbnN0IFByb3h5RmllbGQqPihmaWVsZCktPnNlcnZlcklkZW50aWZpZXIo
KTsKLSAgICB1aW50MzJfdCByZXF1ZXN0SUQgPSBtX2luc3RhbmNlUHJveHktPm5leHRSZXF1ZXN0
SUQoKTsKLSAgICAKLSAgICBpZiAoX1dLUEhOUE9iamVjdEdldFByb3BlcnR5KG1faW5zdGFuY2VQ
cm94eS0+aG9zdFByb3h5KCktPnBvcnQoKSwgbV9pbnN0YW5jZVByb3h5LT5wbHVnaW5JRCgpLCBy
ZXF1ZXN0SUQsIG1fb2JqZWN0SUQsIHNlcnZlcklkZW50aWZpZXIpICE9IEtFUk5fU1VDQ0VTUykK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgCi0gICAgYXV0byByZXBseSA9IHdh
aXRGb3JSZXBseTxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkJvb2xlYW5BbmREYXRhUmVw
bHk+KHJlcXVlc3RJRCk7Ci0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojptb3ZlR2xv
YmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgaWYgKCFy
ZXBseSB8fCAhcmVwbHktPm1fcmV0dXJuVmFsdWUpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIAotICAgIHJldHVybiBtX2luc3RhbmNlUHJveHktPmRlbWFyc2hhbFZhbHVlKGxl
eGljYWxHbG9iYWxPYmplY3QsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnN0X2Nhc3Q8dW5z
aWduZWQgY2hhcio+KENGRGF0YUdldEJ5dGVQdHIocmVwbHktPm1fcmVzdWx0LmdldCgpKSkpLCBD
RkRhdGFHZXRMZW5ndGgocmVwbHktPm1fcmVzdWx0LmdldCgpKSk7Ci19Ci0gICAgCi1ib29sIFBy
b3h5SW5zdGFuY2U6OnNldEZpZWxkVmFsdWUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIGNvbnN0IEZpZWxkKiBmaWVsZCwgSlNWYWx1ZSB2YWx1ZSkgY29uc3QKLXsKLSAgICBp
ZiAoIW1faW5zdGFuY2VQcm94eSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHVp
bnQ2NF90IHNlcnZlcklkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBQcm94eUZpZWxkKj4o
ZmllbGQpLT5zZXJ2ZXJJZGVudGlmaWVyKCk7Ci0gICAgdWludDMyX3QgcmVxdWVzdElEID0gbV9p
bnN0YW5jZVByb3h5LT5uZXh0UmVxdWVzdElEKCk7Ci0gICAgCi0gICAgZGF0YV90IHZhbHVlRGF0
YTsKLSAgICBtYWNoX21zZ190eXBlX251bWJlcl90IHZhbHVlTGVuZ3RoOwotCi0gICAgbV9pbnN0
YW5jZVByb3h5LT5tYXJzaGFsVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIHZhbHVl
RGF0YSwgdmFsdWVMZW5ndGgpOwotICAgIG1faW5zdGFuY2VQcm94eS0+cmV0YWluTG9jYWxPYmpl
Y3QodmFsdWUpOwotICAgIGtlcm5fcmV0dXJuX3Qga3IgPSBfV0tQSE5QT2JqZWN0U2V0UHJvcGVy
dHkobV9pbnN0YW5jZVByb3h5LT5ob3N0UHJveHkoKS0+cG9ydCgpLCBtX2luc3RhbmNlUHJveHkt
PnBsdWdpbklEKCksIHJlcXVlc3RJRCwgbV9vYmplY3RJRCwgc2VydmVySWRlbnRpZmllciwgdmFs
dWVEYXRhLCB2YWx1ZUxlbmd0aCk7Ci0gICAgbWlnX2RlYWxsb2NhdGUocmVpbnRlcnByZXRfY2Fz
dDx2bV9hZGRyZXNzX3Q+KHZhbHVlRGF0YSksIHZhbHVlTGVuZ3RoKTsKLSAgICBpZiAobV9pbnN0
YW5jZVByb3h5KQotICAgICAgICBtX2luc3RhbmNlUHJveHktPnJlbGVhc2VMb2NhbE9iamVjdCh2
YWx1ZSk7Ci0gICAgaWYgKGtyICE9IEtFUk5fU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAotICAgIHdhaXRGb3JSZXBseTxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkJv
b2xlYW5SZXBseT4ocmVxdWVzdElEKTsKLSAgICBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQcm94eUluc3RhbmNlOjppbnZhbGlkYXRlKCkKLXsK
LSAgICBBU1NFUlQobV9pbnN0YW5jZVByb3h5KTsKLSAgICAKLSAgICBpZiAoTmV0c2NhcGVQbHVn
aW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IG1faW5zdGFuY2VQcm94eS0+aG9zdFByb3h5KCkpCi0g
ICAgICAgIF9XS1BITlBPYmplY3RSZWxlYXNlKGhvc3RQcm94eS0+cG9ydCgpLCBtX2luc3RhbmNl
UHJveHktPnBsdWdpbklEKCksIG1fb2JqZWN0SUQpOwotICAgIG1faW5zdGFuY2VQcm94eSA9IG51
bGxwdHI7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKFBMVUdJ
Tl9IT1NUX1BST0NFU1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlSdW50aW1lT2Jq
ZWN0LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eVJ1bnRp
bWVPYmplY3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRjYzg1OTViZDQ1NzA5
NDIzYTYxYTZjZDFlNjQ3NzIyOThjZWJhMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9Q
cm94eVJ1bnRpbWVPYmplY3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmIFVTRShQTFVHSU5f
SE9TVF9QUk9DRVNTKQotCi0jaWZuZGVmIFByb3h5UnVudGltZU9iamVjdF9oCi0jZGVmaW5lIFBy
b3h5UnVudGltZU9iamVjdF9oCi0KLSNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NQmluZGluZy5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvcnVudGltZV9vYmplY3QuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIFByb3h5SW5zdGFuY2U7Ci0KLWNsYXNzIFByb3h5UnVudGltZU9iamVjdCBmaW5h
bCA6IHB1YmxpYyBKU0M6OkJpbmRpbmdzOjpSdW50aW1lT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB1
c2luZyBCYXNlID0gSlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdDsKLQotICAgIHN0YXRpYyBQ
cm94eVJ1bnRpbWVPYmplY3QqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgUmVmPFByb3h5SW5zdGFuY2U+JiYgaW5zdGFuY2UpCi0gICAgewotICAgICAgICBQ
cm94eVJ1bnRpbWVPYmplY3QqIG9iamVjdCA9IG5ldyAoSlNDOjphbGxvY2F0ZUNlbGw8UHJveHlS
dW50aW1lT2JqZWN0Pih2bS5oZWFwKSkgUHJveHlSdW50aW1lT2JqZWN0KHZtLCBzdHJ1Y3R1cmUs
IFdURk1vdmUoaW5zdGFuY2UpKTsKLSAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSk7
Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotCi0gICAgUHJveHlJbnN0YW5jZSogZ2V0
SW50ZXJuYWxQcm94eUluc3RhbmNlKCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAg
IH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLQotcHJpdmF0ZToKLSAgICBQcm94eVJ1bnRpbWVPYmpl
Y3QoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwgUmVmPFByb3h5SW5zdGFuY2U+JiYpOwotICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotfTsKLQotfQotCi0jZW5kaWYKLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJv
eHlSdW50aW1lT2JqZWN0Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0
ZWQvUHJveHlSdW50aW1lT2JqZWN0Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl
Y2FlOTkwZTQ4MGIyMGVkNTU4YWJjZmE0Y2NmNmE1ZmJiOGI4NTIzLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1Bs
dWdpbnMvSG9zdGVkL1Byb3h5UnVudGltZU9iamVjdC5tbQorKysgL2Rldi9udWxsCkBAIC0xLDU3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2lmIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKQotCi0jaW1wb3J0ICJQcm94eVJ1bnRpbWVPYmpl
Y3QuaCIKLQotI2ltcG9ydCAiUHJveHlJbnN0YW5jZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvT2JqZWN0UHJvdG90eXBlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1jb25zdCBDbGFzc0luZm8gUHJveHlSdW50aW1lT2JqZWN0OjpzX2luZm8g
PSB7ICJQcm94eVJ1bnRpbWVPYmplY3QiLCAmUnVudGltZU9iamVjdDo6c19pbmZvLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFByb3h5UnVudGltZU9iamVjdCkgfTsKLQot
UHJveHlSdW50aW1lT2JqZWN0OjpQcm94eVJ1bnRpbWVPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUmVmPFByb3h5SW5zdGFuY2U+JiYgaW5zdGFuY2UpCi0gICAgOiBSdW50aW1l
T2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoaW5zdGFuY2UpKQotewotfQotCi12b2lkIFBy
b3h5UnVudGltZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQotewotICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKLSAgICBBU1NFUlQoaW5oZXJpdHModm0sICZzX2luZm8pKTsKLX0K
LQotUHJveHlJbnN0YW5jZSogUHJveHlSdW50aW1lT2JqZWN0OjpnZXRJbnRlcm5hbFByb3h5SW5z
dGFuY2UoKSBjb25zdAotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxQcm94eUluc3RhbmNlKj4o
Z2V0SW50ZXJuYWxJbnN0YW5jZSgpKTsKLX0KLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYkhvc3RlZE5ldHNjYXBlUGx1
Z2luVmlldy5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViSG9z
dGVkTmV0c2NhcGVQbHVnaW5WaWV3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2
MGMxZTVhNGU1M2U3NGUxODQwYmY2YzVjY2UzZTRmYmUzNjg5NWIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1
Z2lucy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3LmgKKysrIC9kZXYvbnVsbApA
QCAtMSw2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2lmIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKQotCi0jaW1wb3J0ICJXZWJC
YXNlTmV0c2NhcGVQbHVnaW5WaWV3LmgiCi0jaW1wb3J0IDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotY2xhc3MgSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW07Ci1jbGFzcyBO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk7Ci1jbGFzcyBTb2Z0d2FyZUNBUmVuZGVyZXI7Ci19
Ci0KLUBpbnRlcmZhY2UgV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3IDogV2ViQmFzZU5ldHNj
YXBlUGx1Z2luVmlldzxXZWJQbHVnaW5NYW51YWxMb2FkZXI+Ci17Ci0gICAgUmV0YWluUHRyPE5T
QXJyYXk+IF9hdHRyaWJ1dGVLZXlzOwotICAgIFJldGFpblB0cjxOU0FycmF5PiBfYXR0cmlidXRl
VmFsdWVzOwotICAgIAotICAgIFJldGFpblB0cjxDQUxheWVyPiBfcGx1Z2luTGF5ZXI7Ci0gICAg
Qk9PTCBfaG9zdHNMYXllcnNJbldpbmRvd1NlcnZlcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
S2l0OjpTb2Z0d2FyZUNBUmVuZGVyZXI+IF9zb2Z0d2FyZVJlbmRlcmVyOwotICAgIAotICAgIE5T
U2l6ZSBfcHJldmlvdXNTaXplOwotICAgIFJlZlB0cjxXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eT4gX3Byb3h5OwotfQotCi0tIChpZClpbml0V2l0aEZyYW1lOihOU1JlY3Qpcgot
ICAgICAgcGx1Z2luUGFja2FnZTooV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlICopdGhlUGx1Z2lu
UGFja2FnZQotICAgICAgICAgICAgICAgIFVSTDooTlNVUkwgKilVUkwKLSAgICAgICAgICAgIGJh
c2VVUkw6KE5TVVJMICopYmFzZVVSTAotICAgICAgICAgICBNSU1FVHlwZTooTlNTdHJpbmcgKilN
SU1FCi0gICAgICBhdHRyaWJ1dGVLZXlzOihOU0FycmF5ICopa2V5cwotICAgIGF0dHJpYnV0ZVZh
bHVlczooTlNBcnJheSAqKXZhbHVlcwotICAgICAgIGxvYWRNYW51YWxseTooQk9PTClsb2FkTWFu
dWFsbHkKLSAgICAgICAgICAgIGVsZW1lbnQ6KFJlZlB0cjxXZWJDb3JlOjpIVE1MUGx1Z0luRWxl
bWVudD4mJillbGVtZW50OwotCi0tICh2b2lkKXBsdWdpbkhvc3REaWVkOwotLSAoQ0FMYXllciAq
KXBsdWdpbkxheWVyOwotLSAoQk9PTClnZXRGb3JtVmFsdWU6KE5TU3RyaW5nICoqKXZhbHVlOwot
LSAodm9pZCl3ZWJGcmFtZTooV2ViRnJhbWUgKil3ZWJGcmFtZSBkaWRGaW5pc2hMb2FkV2l0aFJl
YXNvbjooTlBSZWFzb24pcmVhc29uOwotLSAodm9pZClzZXRIb3N0c0xheWVyc0luV2luZG93U2Vy
dmVyOihib29sKWhvc3RzTGF5ZXJzSW5XaW5kb3dTZXJ2ZXI7Ci0KLUBlbmQKLQotI2VuZGlmIC8v
IFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcubW0gYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJIb3N0ZWROZXRzY2FwZVBs
dWdpblZpZXcubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YzI3N2I1ZjQzZDE1
MWJkYTQxNWJlYzliNTlkNWYzY2NmYzA4NWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQv
V2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsNTYxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaWYgVVNFKFBMVUdJTl9IT1NUX1BST0NFU1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQotCi0jaW1wb3J0ICJXZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcuaCIKLQotI2ltcG9y
dCAiSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0uaCIKLSNpbXBvcnQgIk5ldHNjYXBlUGx1Z2lu
SG9zdE1hbmFnZXIuaCIKLSNpbXBvcnQgIk5ldHNjYXBlUGx1Z2luSG9zdFByb3h5LmgiCi0jaW1w
b3J0ICJOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkuaCIKLSNpbXBvcnQgIldlYkZyYW1lSW50
ZXJuYWwuaCIKLSNpbXBvcnQgIldlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaCIKLSNpbXBv
cnQgIldlYlVJRGVsZWdhdGUuaCIKLSNpbXBvcnQgIldlYlZpZXcuaCIKLSNpbXBvcnQgIldlYlZp
ZXdJbnRlcm5hbC5oIgotCi0jaW1wb3J0IDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5o
PgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgotI2ltcG9y
dCA8V2ViQ29yZS9CcmlkZ2VKU0MuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZp
ZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTFBsdWdJbkVsZW1lbnQuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvUmVuZGVyRW1iZWRkZWRPYmplY3QuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VF
cnJvci5oPgotI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlQ0FMYXllckV4dHJhcy5oPgotI2ltcG9y
dCA8V2ViQ29yZS9XZWJDb3JlSklUT3BlcmF0aW9ucy5oPgotI2ltcG9ydCA8V2ViQ29yZS9ydW50
aW1lX3Jvb3QuaD4KLSNpbXBvcnQgPHBhbC9zcGkvY29jb2EvUXVhcnR6Q29yZVNQSS5oPgotI2lt
cG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW1w
b3J0IDx3dGYvUnVuTG9vcC5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotICAgIAotY2xhc3MgU29mdHdh
cmVDQVJlbmRlcmVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICBleHBsaWNpdCBTb2Z0d2FyZUNBUmVuZGVyZXIodWludDMyX3QgY29udGV4dElEKQotICAgICAg
ICA6IG1fY29udGV4dCB7IFtDQUNvbnRleHQgbG9jYWxDb250ZXh0XSB9Ci0gICAgICAgICwgbV9y
ZW5kZXJDb250ZXh0IHsgQ0FSZW5kZXJDR05ldygwKSB9Ci0gICAgewotICAgICAgICBbbV9jb250
ZXh0IHNldExheWVyOltDQUxheWVyIF93ZWJfcmVuZGVyTGF5ZXJXaXRoQ29udGV4dElEOmNvbnRl
eHRJRF1dOwotICAgIH0KLQotICAgIH5Tb2Z0d2FyZUNBUmVuZGVyZXIoKQotICAgIHsKLSAgICAg
ICAgQ0FSZW5kZXJDR0Rlc3Ryb3kobV9yZW5kZXJDb250ZXh0KTsKLSAgICB9Ci0KLSAgICB2b2lk
IHJlbmRlcihDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dSZWN0IHJlY3QpCi0gICAgewotICAgICAg
ICBDQVJlbmRlclVwZGF0ZSogdXBkYXRlID0gQ0FSZW5kZXJVcGRhdGVCZWdpbihudWxscHRyLCAw
LCBDQUN1cnJlbnRNZWRpYVRpbWUoKSwgbnVsbHB0ciwgMCwgJnJlY3QpOwotICAgICAgICBDQVJl
bmRlclVwZGF0ZUFkZENvbnRleHQodXBkYXRlLCBbbV9jb250ZXh0IHJlbmRlckNvbnRleHRdKTsK
LSAgICAgICAgQ0FSZW5kZXJVcGRhdGVBZGRSZWN0KHVwZGF0ZSwgJnJlY3QpOwotICAgICAgICBD
QVJlbmRlckNHUmVuZGVyKG1fcmVuZGVyQ29udGV4dCwgdXBkYXRlLCBjb250ZXh0KTsKLSAgICAg
ICAgQ0FSZW5kZXJVcGRhdGVGaW5pc2godXBkYXRlKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
UmV0YWluUHRyPENBQ29udGV4dD4gbV9jb250ZXh0OwotICAgIENBUmVuZGVyQ0dDb250ZXh0KiBt
X3JlbmRlckNvbnRleHQ7Ci19OwotCi19Ci0KLWV4dGVybiAiQyIgewotI2ltcG9ydCAiV2ViS2l0
UGx1Z2luQ2xpZW50U2VydmVyLmgiCi0jaW1wb3J0ICJXZWJLaXRQbHVnaW5Ib3N0LmgiCi19Ci0K
LSNpZiBIQVZFKE9VVF9PRl9QUk9DRVNTX0xBWUVSX0hPU1RJTkcpCi1AaW50ZXJmYWNlIE5TV2lu
ZG93IChEZXRhaWxzKQotLSAoQk9PTClfaG9zdHNMYXllcnNJbldpbmRvd1NlcnZlcjsKLUBlbmQK
LSNlbmRpZgotCi1AaW1wbGVtZW50YXRpb24gV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Ci0K
LSsgKHZvaWQpaW5pdGlhbGl6ZQotewotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIEpT
Qzo6aW5pdGlhbGl6ZSgpOwotICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKLSAgICBX
ZWJDb3JlOjpwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKTsKLSNlbmRpZgotICAgIHNlbmRVc2VyQ2hh
bmdlTm90aWZpY2F0aW9ucygpOwotfQotCi0tIChpZClpbml0V2l0aEZyYW1lOihOU1JlY3QpZnJh
bWUKLSAgICAgIHBsdWdpblBhY2thZ2U6KFdlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSAqKXBsdWdp
blBhY2thZ2UKLSAgICAgICAgICAgICAgICBVUkw6KE5TVVJMICopVVJMCi0gICAgICAgICAgICBi
YXNlVVJMOihOU1VSTCAqKWJhc2VVUkwKLSAgICAgICAgICAgTUlNRVR5cGU6KE5TU3RyaW5nICop
TUlNRQotICAgICAgYXR0cmlidXRlS2V5czooTlNBcnJheSAqKWtleXMKLSAgICBhdHRyaWJ1dGVW
YWx1ZXM6KE5TQXJyYXkgKil2YWx1ZXMKLSAgICAgICBsb2FkTWFudWFsbHk6KEJPT0wpbG9hZE1h
bnVhbGx5Ci0gICAgICAgICAgICBlbGVtZW50OihSZWZQdHI8V2ViQ29yZTo6SFRNTFBsdWdJbkVs
ZW1lbnQ+JiYpZWxlbWVudAotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFt
ZSBwbHVnaW5QYWNrYWdlOnBsdWdpblBhY2thZ2UgVVJMOlVSTCBiYXNlVVJMOmJhc2VVUkwgTUlN
RVR5cGU6TUlNRSBhdHRyaWJ1dGVLZXlzOmtleXMgYXR0cmlidXRlVmFsdWVzOnZhbHVlcyBsb2Fk
TWFudWFsbHk6bG9hZE1hbnVhbGx5IGVsZW1lbnQ6V1RGTW92ZShlbGVtZW50KV07Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIHJldHVybiBzZWxmOwotfSAg
ICAKLQotLSAodm9pZCloYW5kbGVNb3VzZU1vdmVkOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBp
ZiAoX2lzU3RhcnRlZCAmJiBfcHJveHkpCi0gICAgICAgIF9wcm94eS0+bW91c2VFdmVudChzZWxm
LCBldmVudCwgTlBDb2NvYUV2ZW50TW91c2VNb3ZlZCk7Ci19Ci0KLS0gKHZvaWQpc2V0QXR0cmli
dXRlS2V5czooTlNBcnJheSAqKWtleXMgYW5kVmFsdWVzOihOU0FycmF5ICopdmFsdWVzCi17Ci0g
ICAgQVNTRVJUKCFfYXR0cmlidXRlS2V5cyk7Ci0gICAgQVNTRVJUKCFfYXR0cmlidXRlVmFsdWVz
KTsKLSAgICAKLSAgICBfYXR0cmlidXRlS2V5cyA9IGFkb3B0TlMoW2tleXMgY29weV0pOwotICAg
IF9hdHRyaWJ1dGVWYWx1ZXMgPSBhZG9wdE5TKFt2YWx1ZXMgY29weV0pOwotfQotCi0tIChCT09M
KXdpbmRvd0hvc3RzTGF5ZXJzSW5XaW5kb3dTZXJ2ZXIKLXsKLSNpZiBIQVZFKE9VVF9PRl9QUk9D
RVNTX0xBWUVSX0hPU1RJTkcpCi0gICAgcmV0dXJuIFtbW3NlbGYgd2ViVmlld10gd2luZG93XSBf
aG9zdHNMYXllcnNJbldpbmRvd1NlcnZlcl07Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNl
bmRpZgotfQotCi0tIChCT09MKWNyZWF0ZVBsdWdpbgotewotICAgIEFTU0VSVCghX3Byb3h5KTsK
LQotICAgIE5TU3RyaW5nICp1c2VyQWdlbnQgPSBbW3NlbGYgd2ViVmlld10gdXNlckFnZW50Rm9y
VVJMOl9iYXNlVVJMLmdldCgpXTsKLSAgICBCT09MIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFi
bGVkID0gZmFsc2U7Ci0gICAgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQgPSBbW1tzZWxm
IHdlYlZpZXddIHByZWZlcmVuY2VzXSBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZF07Ci0g
ICAgX2hvc3RzTGF5ZXJzSW5XaW5kb3dTZXJ2ZXIgPSBbc2VsZiB3aW5kb3dIb3N0c0xheWVyc0lu
V2luZG93U2VydmVyXTsKLQotICAgIF9wcm94eSA9IE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6
OnNpbmdsZXRvbigpLmluc3RhbnRpYXRlUGx1Z2luKFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwYXRo
XSwgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkhvc3RBcmNoaXRlY3R1cmVdLCBbX3BsdWdp
blBhY2thZ2UuZ2V0KCkgYnVuZGxlSWRlbnRpZmllcl0sIHNlbGYsIF9NSU1FVHlwZS5nZXQoKSwg
X2F0dHJpYnV0ZUtleXMuZ2V0KCksIF9hdHRyaWJ1dGVWYWx1ZXMuZ2V0KCksIHVzZXJBZ2VudCwg
X3NvdXJjZVVSTC5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW9kZSA9PSBOUF9GVUxMLCBfaXNQcml2YXRl
QnJvd3NpbmdFbmFibGVkLCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwgX2hvc3RzTGF5
ZXJzSW5XaW5kb3dTZXJ2ZXIpOwotICAgIGlmICghX3Byb3h5KSAKLSAgICAgICAgcmV0dXJuIE5P
OwotCi0gICAgaWYgKF9wcm94eS0+cmVuZGVyZXJUeXBlKCkgPT0gVXNlU29mdHdhcmVSZW5kZXJl
cikKLSAgICAgICAgX3NvZnR3YXJlUmVuZGVyZXIgPSBtYWtlVW5pcXVlPFNvZnR3YXJlQ0FSZW5k
ZXJlcj4oX3Byb3h5LT5yZW5kZXJDb250ZXh0SUQoKSk7Ci0gICAgZWxzZQotICAgICAgICBbc2Vs
ZiBjcmVhdGVQbHVnaW5MYXllcl07Ci0gICAgCi0gICAgLy8gVXBkYXRlIHRoZSB3aW5kb3cgZnJh
bWUuCi0gICAgX3Byb3h5LT53aW5kb3dGcmFtZUNoYW5nZWQoW1tzZWxmIHdpbmRvd10gZnJhbWVd
KTsKLSAgICAKLSAgICByZXR1cm4gWUVTOwotfQotCi0tICh2b2lkKWNyZWF0ZVBsdWdpbkxheWVy
Ci17Ci0gICAgQk9PTCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCA9IGZhbHNlOwotICAg
IGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkID0gW1tbc2VsZiB3ZWJWaWV3XSBwcmVmZXJl
bmNlc10gYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWRdOwotCi0gICAgX3BsdWdpbkxheWVy
ID0gW0NBTGF5ZXIgX3dlYl9yZW5kZXJMYXllcldpdGhDb250ZXh0SUQ6X3Byb3h5LT5yZW5kZXJD
b250ZXh0SUQoKV07Ci0KLSAgICBpZiAoYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQgJiYg
X3Byb3h5LT5yZW5kZXJlclR5cGUoKSA9PSBVc2VBY2NlbGVyYXRlZENvbXBvc2l0aW5nKSB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIFdlYkhvc3Rl
ZE5ldHNjYXBlUGx1Z2luVmlldyBhbmQgV2ViTmV0c2NhcGVQbHVnaW5WaWV3LgotICAgICAgICAv
LyBTaW5jZSB0aGlzIGxheWVyIGlzbid0IGdvaW5nIHRvIGJlIGluc2VydGVkIGludG8gYSB2aWV3
LCB3ZSBuZWVkIHRvIGNyZWF0ZSBhbm90aGVyIGxheWVyIGFuZCBmbGlwIGl0cyBnZW9tZXRyeQot
ICAgICAgICAvLyBpbiBvcmRlciB0byBnZXQgdGhlIGNvb3JkaW5hdGUgc3lzdGVtIHJpZ2h0Lgot
ICAgICAgICBSZXRhaW5QdHI8Q0FMYXllcj4gcmVhbFBsdWdpbkxheWVyID0gV1RGTW92ZShfcGx1
Z2luTGF5ZXIpOwotCi0gICAgICAgIF9wbHVnaW5MYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFs
bG9jXSBpbml0XSk7Ci0gICAgICAgIF9wbHVnaW5MYXllci5nZXQoKS5ib3VuZHMgPSByZWFsUGx1
Z2luTGF5ZXIuZ2V0KCkuYm91bmRzOwotICAgICAgICBfcGx1Z2luTGF5ZXIuZ2V0KCkuZ2VvbWV0
cnlGbGlwcGVkID0gWUVTOwotCi0gICAgICAgIHJlYWxQbHVnaW5MYXllci5nZXQoKS5hdXRvcmVz
aXppbmdNYXNrID0ga0NBTGF5ZXJXaWR0aFNpemFibGUgfCBrQ0FMYXllckhlaWdodFNpemFibGU7
Ci0gICAgICAgIFtfcGx1Z2luTGF5ZXIuZ2V0KCkgYWRkU3VibGF5ZXI6cmVhbFBsdWdpbkxheWVy
LmdldCgpXTsKLQotICAgICAgICAvLyBFYWdlcmx5IGVudGVyIGNvbXBvc2l0aW5nIG1vZGUsIHNp
bmNlIHdlIGtub3cgd2UnbGwgbmVlZCBpdC4gVGhpcyBhdm9pZHMgZmlyaW5nIHNldE5lZWRzU3R5
bGVSZWNhbGMoKQotICAgICAgICAvLyBmb3IgaWZyYW1lcyB0aGF0IGNvbnRhaW4gY29tcG9zaXRl
ZCBwbHVnaW5zIGF0IGJhZCB0aW1lcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM5MDMzCi0gICAgICAgIGNvcmUoW3NlbGYgd2ViRnJhbWVdKS0+dmlldygpLT5lbnRl
ckNvbXBvc2l0aW5nTW9kZSgpOwotICAgICAgICBbc2VsZiBlbGVtZW50XS0+aW52YWxpZGF0ZVN0
eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwotICAgIH0gZWxzZQotICAgICAgICBzZWxmLndhbnRz
TGF5ZXIgPSBZRVM7Ci19Ci0KLS0gKHZvaWQpc2V0SG9zdHNMYXllcnNJbldpbmRvd1NlcnZlcjoo
Ym9vbClob3N0c0xheWVyc0luV2luZG93U2VydmVyCi17Ci0gICAgaWYgKF9wcm94eS0+cmVuZGVy
ZXJUeXBlKCkgPT0gVXNlU29mdHdhcmVSZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
UmV0YWluUHRyPENBTGF5ZXI+IGN1cnJlbnRTdXBlcmxheWVyID0gW19wbHVnaW5MYXllciBzdXBl
cmxheWVyXTsKLQotICAgIF9ob3N0c0xheWVyc0luV2luZG93U2VydmVyID0gaG9zdHNMYXllcnNJ
bldpbmRvd1NlcnZlcjsKLQotICAgIFtzZWxmIGNyZWF0ZVBsdWdpbkxheWVyXTsKLSAgICBbc2Vs
ZiBzZXRMYXllcjpjdXJyZW50U3VwZXJsYXllci5nZXQoKV07Ci19Ci0KLS8vIEZJWE1FOiBUaGlz
IG1ldGhvZCBpcyBhbiBpZGVhbCBjYW5kaWRhdGUgdG8gbW92ZSB1cCB0byB0aGUgYmFzZSBjbGFz
cwotLSAoQ0FMYXllciAqKXBsdWdpbkxheWVyCi17Ci0gICAgcmV0dXJuIF9wbHVnaW5MYXllci5n
ZXQoKTsKLX0KLQotLSAoQk9PTClnZXRGb3JtVmFsdWU6KE5TU3RyaW5nICoqKXZhbHVlCi17Ci0g
ICAgLy8gRklYTUU6IFdlIGNhbm5vdCBpbXBsZW1lbnQgdGhpcyBtZXRob2QgZm9yIG5vdyBiZWNh
dXNlIE5QUF9HZXRWYWx1ZQotICAgIC8vIGlzIG5vdCBjdXJyZW50bHkgZXhwb3NlZCBieSB0aGUg
cGx1Z2luIGhvc3QuIE9uY2Ugd2UgaGF2ZSBhbiBJUEMgcm91dGluZQotICAgIC8vIHdoaWNoIGFs
bG93cyB1cyB0byBpbnZva2UgTlBQX0dldFZhbHVlLCB3ZSBjb3VsZCBpbXBsZW1lbnQgdGhpcyBt
ZXRob2QuCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0tICh2b2lkKXNldExheWVyOihDQUxheWVy
ICopbmV3TGF5ZXIKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHRoZSBzYW1lIGlt
cGxlbWVudGF0aW9uIGFzIFdlYk5ldHNjYXBlUGx1Z2luVmlldyAoYW5kIG1vdmUgdG8gdGhlIGJh
c2UgY2xhc3MpLgotICAgIFtzdXBlciBzZXRMYXllcjpuZXdMYXllcl07Ci0gICAgCi0gICAgaWYg
KF9wbHVnaW5MYXllcikKLSAgICAgICAgW25ld0xheWVyIGFkZFN1YmxheWVyOl9wbHVnaW5MYXll
ci5nZXQoKV07Ci19Ci0KLS0gKHZvaWQpcHJpdmF0ZUJyb3dzaW5nTW9kZURpZENoYW5nZQotewot
ICAgIGlmIChfcHJveHkpCi0gICAgICAgIF9wcm94eS0+cHJpdmF0ZUJyb3dzaW5nTW9kZURpZENo
YW5nZShfaXNQcml2YXRlQnJvd3NpbmdFbmFibGVkKTsKLX0KLQotLSAodm9pZClsb2FkU3RyZWFt
Ci17Ci19Ci0KLS0gKHZvaWQpdXBkYXRlQW5kU2V0V2luZG93Ci17Ci0gICAgaWYgKCFfcHJveHkp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBUaGUgYmFzZSBjb29yZGluYXRlcyBvZiBh
IHdpbmRvdyBhbmQgaXQncyBjb250ZW50VmlldyBoYXBwZW4gdG8gYmUgdGhlIGVxdWFsIGF0IGEg
dXNlclNwYWNlU2NhbGVGYWN0b3IKLSAgICAvLyBvZiAxLiBGb3Igbm9uLTEuMCBzY2FsZSBmYWN0
b3JzIHRoaXMgYXNzdW1wdGlvbiBpcyBmYWxzZS4KLSAgICBOU1ZpZXcgKndpbmRvd0NvbnRlbnRW
aWV3ID0gW1tzZWxmIHdpbmRvd10gY29udGVudFZpZXddOwotICAgIE5TUmVjdCBib3VuZHNJbldp
bmRvdyA9IFtzZWxmIGNvbnZlcnRSZWN0OltzZWxmIGJvdW5kc10gdG9WaWV3OndpbmRvd0NvbnRl
bnRWaWV3XTsKLQotICAgIE5TUmVjdCB2aXNpYmxlUmVjdEluV2luZG93OwotICAgIAotICAgIC8v
IENvcmUgQW5pbWF0aW9uIHBsdWctaW5zIG5lZWQgdG8gYmUgdXBkYXRlZCAod2l0aCBhIDAsMCww
LDAgY2xpcFJlY3QpIHdoZW4KLSAgICAvLyBtb3ZlZCB0byBhIGJhY2tncm91bmQgdGFiLiBXZSBk
b24ndCBkbyB0aGlzIGZvciBDb3JlIEdyYXBoaWNzIHBsdWctaW5zIGFzCi0gICAgLy8gb2xkZXIg
dmVyc2lvbnMgb2YgRmxhc2ggaGF2ZSBoaXN0b3JpY2FsIFdlYktpdC1zcGVjaWZpYyBjb2RlIHRo
YXQgaXNuJ3QKLSAgICAvLyBjb21wYXRpYmxlIHdpdGggdGhpcyBiZWhhdmlvci4gICAgCi0gICAg
Qk9PTCBzaG91bGRDbGlwT3V0UGx1Z2luID0gX3BsdWdpbkxheWVyICYmIFtzZWxmIHNob3VsZENs
aXBPdXRQbHVnaW5dOwotICAgIGlmICghc2hvdWxkQ2xpcE91dFBsdWdpbikKLSAgICAgICAgdmlz
aWJsZVJlY3RJbldpbmRvdyA9IFtzZWxmIGFjdHVhbFZpc2libGVSZWN0SW5XaW5kb3ddOwotICAg
IGVsc2UKLSAgICAgICAgdmlzaWJsZVJlY3RJbldpbmRvdyA9IE5TWmVyb1JlY3Q7Ci0gICAgCi0g
ICAgLy8gRmxpcCBZIHRvIGNvbnZlcnQgTlNXaW5kb3cgY29vcmRpbmF0ZXMgdG8gdG9wLWxlZnQt
YmFzZWQgd2luZG93IGNvb3JkaW5hdGVzLgotICAgIGZsb2F0IGJvcmRlclZpZXdIZWlnaHQgPSBb
W3NlbGYgY3VycmVudFdpbmRvd10gZnJhbWVdLnNpemUuaGVpZ2h0OwotICAgIGJvdW5kc0luV2lu
ZG93Lm9yaWdpbi55ID0gYm9yZGVyVmlld0hlaWdodCAtIE5TTWF4WShib3VuZHNJbldpbmRvdyk7
Ci0gICAgICAgIAotICAgIGlmICghc2hvdWxkQ2xpcE91dFBsdWdpbikKLSAgICAgICAgdmlzaWJs
ZVJlY3RJbldpbmRvdy5vcmlnaW4ueSA9IGJvcmRlclZpZXdIZWlnaHQgLSBOU01heFkodmlzaWJs
ZVJlY3RJbldpbmRvdyk7Ci0KLSAgICBfcHJldmlvdXNTaXplID0gYm91bmRzSW5XaW5kb3cuc2l6
ZTsKLSAgICAKLSAgICBfcHJveHktPnJlc2l6ZShib3VuZHNJbldpbmRvdywgdmlzaWJsZVJlY3RJ
bldpbmRvdyk7Ci0KLSAgICBib29sIHNob3VsZEhvc3RMYXllcnNJbldpbmRvd1NlcnZlciA9IFtz
ZWxmIHdpbmRvd0hvc3RzTGF5ZXJzSW5XaW5kb3dTZXJ2ZXJdOwotICAgIGlmIChfaG9zdHNMYXll
cnNJbldpbmRvd1NlcnZlciAhPSBzaG91bGRIb3N0TGF5ZXJzSW5XaW5kb3dTZXJ2ZXIpCi0gICAg
ICAgIF9wcm94eS0+c2V0U2hvdWxkSG9zdExheWVyc0luV2luZG93U2VydmVyKHNob3VsZEhvc3RM
YXllcnNJbldpbmRvd1NlcnZlcik7Ci19Ci0KLS0gKHZvaWQpd2luZG93Rm9jdXNDaGFuZ2VkOihC
T09MKWhhc0ZvY3VzCi17Ci0gICAgaWYgKF9wcm94eSkKLSAgICAgICAgX3Byb3h5LT53aW5kb3dG
b2N1c0NoYW5nZWQoaGFzRm9jdXMpOwotfQotCi0tIChCT09MKXNob3VsZFN0b3AKLXsKLSAgICBp
ZiAoIV9wcm94eSkKLSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICAKLSAgICByZXR1cm4gX3Byb3h5
LT5zaG91bGRTdG9wKCk7Ci19Ci0KLS0gKHZvaWQpZGVzdHJveVBsdWdpbgotewotICAgIGlmIChf
cHJveHkpIHsKLSAgICAgICAgX3NvZnR3YXJlUmVuZGVyZXIgPSBudWxscHRyOwotICAgICAgICBf
cHJveHktPmRlc3Ryb3koKTsKLSAgICAgICAgX3Byb3h5ID0gbnVsbHB0cjsKLSAgICB9Ci0gICAg
Ci0gICAgX3BsdWdpbkxheWVyID0gMDsKLX0KLQotLSAodm9pZClzdGFydFRpbWVycwotewotICAg
IGlmIChfcHJveHkpCi0gICAgICAgIF9wcm94eS0+c3RhcnRUaW1lcnMoX2lzQ29tcGxldGVseU9i
c2N1cmVkKTsKLX0KLQotLSAodm9pZClzdG9wVGltZXJzCi17Ci0gICAgaWYgKF9wcm94eSkKLSAg
ICAgICAgX3Byb3h5LT5zdG9wVGltZXJzKCk7Ci19Ci0KLS0gKHZvaWQpZm9jdXNDaGFuZ2VkCi17
Ci0gICAgaWYgKF9wcm94eSkKLSAgICAgICAgX3Byb3h5LT5mb2N1c0NoYW5nZWQoX2hhc0ZvY3Vz
KTsKLX0KLQotLSAodm9pZCl3aW5kb3dGcmFtZURpZENoYW5nZTooTlNOb3RpZmljYXRpb24gKilu
b3RpZmljYXRpb24gCi17Ci0gICAgaWYgKF9wcm94eSAmJiBbc2VsZiB3aW5kb3ddKQotICAgICAg
ICBfcHJveHktPndpbmRvd0ZyYW1lQ2hhbmdlZChbW3NlbGYgd2luZG93XSBmcmFtZV0pOwotfQot
Ci0tICh2b2lkKWFkZFdpbmRvd09ic2VydmVycwotewotICAgIFtzdXBlciBhZGRXaW5kb3dPYnNl
cnZlcnNdOwotICAgIAotICAgIEFTU0VSVChbc2VsZiB3aW5kb3ddKTsKLSAgICAKLSAgICBOU1dp
bmRvdyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKLSAgICAKLSAgICBOU05vdGlmaWNhdGlvbkNl
bnRlciAqbm90aWZpY2F0aW9uQ2VudGVyID0gW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRD
ZW50ZXJdOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3Rv
cjpAc2VsZWN0b3Iod2luZG93RnJhbWVEaWRDaGFuZ2U6KSAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuYW1lOk5TV2luZG93RGlkTW92ZU5vdGlmaWNhdGlvbiBvYmplY3Q6d2luZG93
XTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNl
bGVjdG9yKHdpbmRvd0ZyYW1lRGlkQ2hhbmdlOikKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuYW1lOk5TV2luZG93RGlkUmVzaXplTm90aWZpY2F0aW9uIG9iamVjdDp3aW5kb3ddOyAg
ICAKLQotICAgIGlmIChfcHJveHkpCi0gICAgICAgIF9wcm94eS0+d2luZG93RnJhbWVDaGFuZ2Vk
KFt3aW5kb3cgZnJhbWVdKTsKLSAgICBbc2VsZiB1cGRhdGVBbmRTZXRXaW5kb3ddOwotfQotCi0t
ICh2b2lkKXJlbW92ZVdpbmRvd09ic2VydmVycwotewotICAgIFtzdXBlciByZW1vdmVXaW5kb3dP
YnNlcnZlcnNdOwotICAgIAotICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyICpub3RpZmljYXRpb25D
ZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl07Ci0gICAgW25vdGlm
aWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNXaW5kb3dEaWRNb3ZlTm90
aWZpY2F0aW9uIG9iamVjdDpuaWxdOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2Jz
ZXJ2ZXI6c2VsZiBuYW1lOk5TV2luZG93RGlkUmVzaXplTm90aWZpY2F0aW9uIG9iamVjdDpuaWxd
OwotfQotCi0tICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgaWYgKF9p
c1N0YXJ0ZWQgJiYgX3Byb3h5KQotICAgICAgICBfcHJveHktPm1vdXNlRXZlbnQoc2VsZiwgZXZl
bnQsIE5QQ29jb2FFdmVudE1vdXNlRG93bik7Ci19Ci0KLS0gKHZvaWQpbW91c2VVcDooTlNFdmVu
dCAqKWV2ZW50Ci17Ci0gICAgaWYgKF9pc1N0YXJ0ZWQgJiYgX3Byb3h5KQotICAgICAgICBfcHJv
eHktPm1vdXNlRXZlbnQoc2VsZiwgZXZlbnQsIE5QQ29jb2FFdmVudE1vdXNlVXApOwotfQotCi0t
ICh2b2lkKW1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgaWYgKF9pc1N0YXJ0
ZWQgJiYgX3Byb3h5KQotICAgICAgICBfcHJveHktPm1vdXNlRXZlbnQoc2VsZiwgZXZlbnQsIE5Q
Q29jb2FFdmVudE1vdXNlRHJhZ2dlZCk7Ci19Ci0KLS0gKHZvaWQpaGFuZGxlTW91c2VFbnRlcmVk
OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICAvLyBTZXQgY3Vyc29yIHRvIGFycm93LiBQbHVnaW5z
IG9mdGVuIGhhbmRsZSBjdXJzb3IgaW50ZXJuYWxseSwgYnV0IHRob3NlIHRoYXQgZG9uJ3Qgd2ls
bCBqdXN0IGdldCB0aGlzIGRlZmF1bHQgb25lLgotICAgIFtbTlNDdXJzb3IgYXJyb3dDdXJzb3Jd
IHNldF07Ci0KLSAgICBpZiAoX2lzU3RhcnRlZCAmJiBfcHJveHkpCi0gICAgICAgIF9wcm94eS0+
bW91c2VFdmVudChzZWxmLCBldmVudCwgTlBDb2NvYUV2ZW50TW91c2VFbnRlcmVkKTsKLX0KLQot
LSAodm9pZCloYW5kbGVNb3VzZUV4aXRlZDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgaWYgKF9p
c1N0YXJ0ZWQgJiYgX3Byb3h5KQotICAgICAgICBfcHJveHktPm1vdXNlRXZlbnQoc2VsZiwgZXZl
bnQsIE5QQ29jb2FFdmVudE1vdXNlRXhpdGVkKTsKLQotICAgIC8vIFNldCBjdXJzb3IgYmFjayB0
byBhcnJvdyBjdXJzb3IuICBCZWNhdXNlIE5TQ3Vyc29yIGRvZXNuJ3Qga25vdyBhYm91dCBjaGFu
Z2VzIHRoYXQgdGhlIHBsdWdpbiBtYWRlLCB3ZSBjb3VsZCBnZXQgY29uZnVzZWQgYWJvdXQgd2hh
dCB3ZSB0aGluayB0aGUKLSAgICAvLyBjdXJyZW50IGN1cnNvciBpcyBvdGhlcndpc2UuICBUaGVy
ZWZvcmUgd2UgaGF2ZSBubyBjaG9pY2UgYnV0IHRvIHVuY29uZGl0aW9uYWxseSByZXNldCB0aGUg
Y3Vyc29yIHdoZW4gdGhlIG1vdXNlIGV4aXRzIHRoZSBwbHVnaW4uCi0gICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGJlIGpvYiBvZiBwbHVnaW4gaG9zdCwgc2VlIDxyZGFyOi8vcHJvYmxlbS83NjU0
NDM0Pi4KLSAgICBbW05TQ3Vyc29yIGFycm93Q3Vyc29yXSBzZXRdOwotfQotCi0tICh2b2lkKXNj
cm9sbFdoZWVsOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBib29sIHByb2Nlc3NlZEV2ZW50ID0g
ZmFsc2U7Ci0gICAgCi0gICAgaWYgKF9pc1N0YXJ0ZWQgJiYgX3Byb3h5KQotICAgICAgICBwcm9j
ZXNzZWRFdmVudCA9IF9wcm94eS0+d2hlZWxFdmVudChzZWxmLCBldmVudCk7Ci0gICAgCi0gICAg
aWYgKCFwcm9jZXNzZWRFdmVudCkKLSAgICAgICAgW3N1cGVyIHNjcm9sbFdoZWVsOmV2ZW50XTsK
LX0KLQotLSAoTlNUZXh0SW5wdXRDb250ZXh0ICopaW5wdXRDb250ZXh0Ci17Ci0gICAgcmV0dXJu
IFtbV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlciBzaGFyZWRUZXh0SW5wdXRXaW5kb3dDb250
cm9sbGVyXSBpbnB1dENvbnRleHRdOwotfQotCi0tICh2b2lkKWtleURvd246KE5TRXZlbnQgKill
dmVudAotewotICAgIGlmICghX2lzU3RhcnRlZCB8fCAhX3Byb3h5KQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgTlNTdHJpbmcgKnN0cmluZyA9IG5pbDsKLSAgICBpZiAoW1tXZWJUZXh0SW5w
dXRXaW5kb3dDb250cm9sbGVyIHNoYXJlZFRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXJdIGludGVy
cHJldEtleUV2ZW50OmV2ZW50IHN0cmluZzomc3RyaW5nXSkgewotICAgICAgICBpZiAoc3RyaW5n
KQotICAgICAgICAgICAgX3Byb3h5LT5pbnNlcnRUZXh0KHN0cmluZyk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgCi0gICAgX3Byb3h5LT5rZXlFdmVudChzZWxmLCBldmVudCwgTlBDb2Nv
YUV2ZW50S2V5RG93bik7Ci19Ci0KLS0gKHZvaWQpa2V5VXA6KE5TRXZlbnQgKilldmVudAotewot
ICAgIGlmIChfaXNTdGFydGVkICYmIF9wcm94eSkKLSAgICAgICAgX3Byb3h5LT5rZXlFdmVudChz
ZWxmLCBldmVudCwgTlBDb2NvYUV2ZW50S2V5VXApOwotfQotCi0tICh2b2lkKWZsYWdzQ2hhbmdl
ZDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgaWYgKF9pc1N0YXJ0ZWQgJiYgX3Byb3h5KQotICAg
ICAgICBfcHJveHktPmZsYWdzQ2hhbmdlZChldmVudCk7Ci19Ci0KLS0gKHZvaWQpc2VuZE1vZGlm
aWVyRXZlbnRXaXRoS2V5Q29kZTooaW50KWtleUNvZGUgY2hhcmFjdGVyOihjaGFyKWNoYXJhY3Rl
cgotewotICAgIGlmIChfaXNTdGFydGVkICYmIF9wcm94eSkKLSAgICAgICAgX3Byb3h5LT5zeW50
aGV0aWNLZXlEb3duV2l0aENvbW1hbmRNb2RpZmllcihrZXlDb2RlLCBjaGFyYWN0ZXIpOwotfQot
Ci0tICh2b2lkKXBsdWdpbkhvc3REaWVkCi17Ci0gICAgaWYgKGlzPFJlbmRlckVtYmVkZGVkT2Jq
ZWN0PihfZWxlbWVudC0+cmVuZGVyZXIoKSkpCi0gICAgICAgIGRvd25jYXN0PFJlbmRlckVtYmVk
ZGVkT2JqZWN0PigqX2VsZW1lbnQtPnJlbmRlcmVyKCkpLnNldFBsdWdpblVuYXZhaWxhYmlsaXR5
UmVhc29uKFJlbmRlckVtYmVkZGVkT2JqZWN0OjpQbHVnaW5DcmFzaGVkKTsKLQotICAgIF9wbHVn
aW5MYXllciA9IG5pbDsKLSAgICBfcHJveHkgPSBudWxscHRyOwotICAgIAotICAgIC8vIE5vIG5l
ZWQgZm9yIHVzIHRvIGJlIGxheWVyIGJhY2tlZCBhbnltb3JlCi0gICAgc2VsZi53YW50c0xheWVy
ID0gTk87Ci0gICAgCi0gICAgW3NlbGYgaW52YWxpZGF0ZVBsdWdpbkNvbnRlbnRSZWN0OltzZWxm
IGJvdW5kc11dOwotfQotCi0tICh2b2lkKWRyYXdSZWN0OihOU1JlY3QpcmVjdAotewotICAgIGlm
IChfY2FjaGVkU25hcHNob3QpIHsKLSAgICAgICAgTlNSZWN0IHNvdXJjZVJlY3QgPSB7IE5TWmVy
b1BvaW50LCBbX2NhY2hlZFNuYXBzaG90LmdldCgpIHNpemVdIH07Ci0gICAgICAgIFtfY2FjaGVk
U25hcHNob3QuZ2V0KCkgZHJhd0luUmVjdDpbc2VsZiBib3VuZHNdIGZyb21SZWN0OnNvdXJjZVJl
Y3Qgb3BlcmF0aW9uOk5TQ29tcG9zaXRpbmdPcGVyYXRpb25Tb3VyY2VPdmVyIGZyYWN0aW9uOjFd
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKF9wcm94eSkgewotICAgICAgICBp
ZiAoX3NvZnR3YXJlUmVuZGVyZXIpIHsKLSAgICAgICAgICAgIGlmIChbTlNHcmFwaGljc0NvbnRl
eHQgY3VycmVudENvbnRleHREcmF3aW5nVG9TY3JlZW5dKSB7Ci0gICAgICAgICAgICAgICAgX3Nv
ZnR3YXJlUmVuZGVyZXItPnJlbmRlcihbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
XSBDR0NvbnRleHRdLCBOU1JlY3RUb0NHUmVjdChyZWN0KSk7Ci0gICAgICAgICAgICAgICAgX3By
b3h5LT5kaWREcmF3KCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBfcHJv
eHktPnByaW50KFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIENHQ29udGV4dF0s
IFtzZWxmIGJvdW5kc10uc2l6ZS53aWR0aCwgW3NlbGYgYm91bmRzXS5zaXplLmhlaWdodCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoX3NuYXBzaG90dGluZyAmJiBbc2VsZiBzdXBwb3J0c1NuYXBzaG90
dGluZ10pIHsKLSAgICAgICAgICAgIF9wcm94eS0+c25hcHNob3QoW1tOU0dyYXBoaWNzQ29udGV4
dCBjdXJyZW50Q29udGV4dF0gQ0dDb250ZXh0XSwgW3NlbGYgYm91bmRzXS5zaXplLndpZHRoLCBb
c2VsZiBib3VuZHNdLnNpemUuaGVpZ2h0KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybjsK
LSAgICB9Ci19Ci0KLS0gKFJlZlB0cjxKU0M6OkJpbmRpbmdzOjpJbnN0YW5jZT4pY3JlYXRlUGx1
Z2luQmluZGluZ3NJbnN0YW5jZTooUmVmPEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+JiYpcm9v
dE9iamVjdAotewotICAgIGlmICghX3Byb3h5KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAKLSAgICByZXR1cm4gX3Byb3h5LT5jcmVhdGVCaW5kaW5nc0luc3RhbmNlKFdURk1vdmUocm9v
dE9iamVjdCkpOwotfQotCi0tICh2b2lkKXBsdWdpblZpZXc6KE5TVmlldyAqKXBsdWdpblZpZXcg
cmVjZWl2ZWRSZXNwb25zZTooTlNVUkxSZXNwb25zZSAqKXJlc3BvbnNlCi17Ci0gICAgQVNTRVJU
KF9sb2FkTWFudWFsbHkpOwotICAgIGlmICghX3Byb3h5KQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgQVNTRVJUKCFfcHJveHktPm1hbnVhbFN0cmVhbSgpKTsKLQotICAgIF9wcm94eS0+c2V0
TWFudWFsU3RyZWFtKEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtOjpjcmVhdGUoX3Byb3h5Lmdl
dCgpLCAmY29yZShbc2VsZiB3ZWJGcmFtZV0pLT5sb2FkZXIoKSkpOwotICAgIF9wcm94eS0+bWFu
dWFsU3RyZWFtKCktPnN0YXJ0U3RyZWFtV2l0aFJlc3BvbnNlKHJlc3BvbnNlKTsKLX0KLQotLSAo
dm9pZClwbHVnaW5WaWV3OihOU1ZpZXcgKilwbHVnaW5WaWV3IHJlY2VpdmVkRGF0YTooTlNEYXRh
ICopZGF0YQotewotICAgIEFTU0VSVChfbG9hZE1hbnVhbGx5KTsKLSAgICBpZiAoIV9wcm94eSkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVh
bSogbWFudWFsU3RyZWFtID0gX3Byb3h5LT5tYW51YWxTdHJlYW0oKSkKLSAgICAgICAgbWFudWFs
U3RyZWFtLT5kaWRSZWNlaXZlRGF0YSgwLCBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oW2Rh
dGEgYnl0ZXNdKSwgW2RhdGEgbGVuZ3RoXSk7Ci19Ci0KLS0gKHZvaWQpcGx1Z2luVmlldzooTlNW
aWV3ICopcGx1Z2luVmlldyByZWNlaXZlZEVycm9yOihOU0Vycm9yICopZXJyb3IKLXsKLSAgICBB
U1NFUlQoX2xvYWRNYW51YWxseSk7Ci0gICAgaWYgKCFfcHJveHkpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBpZiAoSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0qIG1hbnVhbFN0cmVhbSA9
IF9wcm94eS0+bWFudWFsU3RyZWFtKCkpCi0gICAgICAgIG1hbnVhbFN0cmVhbS0+ZGlkRmFpbCgw
LCBlcnJvcik7Ci19Ci0KLS0gKHZvaWQpcGx1Z2luVmlld0ZpbmlzaGVkTG9hZGluZzooTlNWaWV3
ICopcGx1Z2luVmlldwotewotICAgIEFTU0VSVChfbG9hZE1hbnVhbGx5KTsKLSAgICBpZiAoIV9w
cm94eSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChIb3N0ZWROZXRzY2FwZVBsdWdp
blN0cmVhbSogbWFudWFsU3RyZWFtID0gX3Byb3h5LT5tYW51YWxTdHJlYW0oKSkKLSAgICAgICAg
bWFudWFsU3RyZWFtLT5kaWRGaW5pc2hMb2FkaW5nKDApOwotfQotCi0tICh2b2lkKXdlYkZyYW1l
OihXZWJGcmFtZSAqKXdlYkZyYW1lIGRpZEZpbmlzaExvYWRXaXRoUmVhc29uOihOUFJlYXNvbily
ZWFzb24KLXsKLSAgICBpZiAoX2lzU3RhcnRlZCAmJiBfcHJveHkpCi0gICAgICAgIF9wcm94eS0+
d2ViRnJhbWVEaWRGaW5pc2hMb2FkV2l0aFJlYXNvbih3ZWJGcmFtZSwgcmVhc29uKTsKLX0KLQot
LSAodm9pZCl3ZWJGcmFtZTooV2ViRnJhbWUgKil3ZWJGcmFtZSBkaWRGaW5pc2hMb2FkV2l0aEVy
cm9yOihOU0Vycm9yICopZXJyb3IKLXsKLSAgICBOUFJlYXNvbiByZWFzb24gPSBOUFJFU19ET05F
OwotICAgIGlmIChlcnJvcikKLSAgICAgICAgcmVhc29uID0gSG9zdGVkTmV0c2NhcGVQbHVnaW5T
dHJlYW06OnJlYXNvbkZvckVycm9yKGVycm9yKTsKLSAgICBbc2VsZiB3ZWJGcmFtZTp3ZWJGcmFt
ZSBkaWRGaW5pc2hMb2FkV2l0aFJlYXNvbjpyZWFzb25dOwotfQotCi1AZW5kCi0KLSNlbmRpZiAv
LyBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJL
aXRQbHVnaW5BZ2VudC5kZWZzIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0
ZWQvV2ViS2l0UGx1Z2luQWdlbnQuZGVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MTMwY2Y2MWYyNGU2M2U1OGFjOWU0OTIyOTM1YzAxMjg5ZDM0NTk1MC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9Q
bHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5BZ2VudC5kZWZzCisrKyAvZGV2L251bGwKQEAgLTEs
NDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
IAotI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9XZWJLaXRQbHVnaW5Ib3N0VHlwZXMuZGVmcz4KLQot
c3Vic3lzdGVtIFdlYktpdFBsdWdpbkFnZW50IDEwMDsKLQotc2VydmVycHJlZml4IFdLUEE7Ci11
c2VycHJlZml4IF9XS1BBOwotCi1yb3V0aW5lIENoZWNrSW5BcHBsaWNhdGlvbihzZXJ2ZXJQb3J0
IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZlckF1ZGl0VG9r
ZW4gdG9rZW4gOmF1ZGl0X3Rva2VuX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBs
aWNhdGlvbk5hbWUgOmFwcGxpY2F0aW9uX25hbWVfdDsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dCBwbHVnaW5WZW5kb3JQb3J0IDptYWNoX3BvcnRfbWFrZV9zZW5kX3QpOwotCi1yb3V0
aW5lIFNwYXduUGx1Z2luSG9zdChwbHVnaW5WZW5kb3JQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNyZXBseXBvcnQgX3JlcGx5UG9ydCA6bWFjaF9wb3J0X21ha2Vf
c2VuZF9vbmNlX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zIDpwbGlzdF9ieXRl
c190OwotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IHBsdWdpbkhvc3RQb3J0OiBtYWNoX3Bv
cnRfbW92ZV9zZW5kX3QpOwotCi1yb3V0aW5lIENoZWNrSW5QbHVnaW5Ib3N0KHNlcnZlclBvcnQg
Om1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5Ib3N0UG9ydCA6
bWFjaF9wb3J0X21vdmVfc2VuZF90OwotICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2ZXJB
dWRpdFRva2VuIHRva2VuIDphdWRpdF90b2tlbl90KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkFnZW50UmVwbHkuZGVmcyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkFnZW50
UmVwbHkuZGVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU1NTViM2MyOTViYjM3
YWEwZTJhOWVjZTU4NTc1ZDYwZDY2Y2I1Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9X
ZWJLaXRQbHVnaW5BZ2VudFJlcGx5LmRlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0gCi0jaW5jbHVk
ZSA8V2ViS2l0TGVnYWN5L1dlYktpdFBsdWdpbkhvc3RUeXBlcy5kZWZzPgotCi1zdWJzeXN0ZW0g
V2ViS2l0UGx1Z2luQWdlbnRSZXBseSAyMDA7Ci0KLXNlcnZlcnByZWZpeCBXS1BBOwotdXNlcnBy
ZWZpeCBfV0tQQTsKLQotc2tpcDsgLy8gQ2hlY2tJbkFwcGxpY2F0aW9uCi0KLXNpbXBsZXJvdXRp
bmUgU3Bhd25QbHVnaW5Ib3N0UmVwbHkoX3JlcGx5UG9ydCA6bWFjaF9wb3J0X21vdmVfc2VuZF9v
bmNlX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHBsdWdpbkhvc3RQ
b3J0OiBtYWNoX3BvcnRfbW92ZV9zZW5kX3QpOwotCi1za2lwOyAvLyBDaGVja0luUGx1Z2luSG9z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2Vi
S2l0UGx1Z2luQ2xpZW50LmRlZnMgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hv
c3RlZC9XZWJLaXRQbHVnaW5DbGllbnQuZGVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMjZmNGEwYzk0ZTM5NDA3NDMzZWE2OGIyMmZmODY4YTMxM2I4MzMzZi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9QbHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5DbGllbnQuZGVmcworKysgL2Rldi9udWxsCkBA
IC0xLDIzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlIDxXZWJLaXRMZWdhY3kvV2ViS2l0UGx1Z2luSG9zdFR5cGVzLmRlZnM+
Ci0KLS8vIEZJWE1FOiBDb21lIHVwIHdpdGggYSBiZXR0ZXIgbmFtZS4KLXN1YnN5c3RlbSBXZWJL
aXRQbHVnaW5DbGllbnQgMzAwOwotCi1zZXJ2ZXJwcmVmaXggV0s7Ci11c2VycHJlZml4IF9XSzsK
LQotc2ltcGxlcm91dGluZSBQQ1N0YXR1c1RleHQoY2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHQgOmRhdGFfdCk7Ci0KLXJvdXRpbmUgUENMb2FkVVJMKGNsaWVudFBv
cnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJf
dDsKLSAgICAgICAgICAgICAgICAgICAgICB1cmwgOmRhdGFfdDsKLSAgICAgICAgICAgICAgICAg
ICAgICB0YXJnZXQgOmRhdGFfdDsKLSAgICAgICAgICAgICAgICAgICAgICBwb3N0RGF0YSA6ZGF0
YV90OwotICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOiB1aW50MzJfdDsKLSAgICAgICAgICAg
ICAgICAgICAgICBvdXQgcmVzdWx0Q29kZSA6dWludDE2X3Q7Ci0gICAgICAgICAgICAgICAgICAg
ICAgb3V0IHJlcXVlc3RJRCA6dWludDMyX3QpOwotCi1zaW1wbGVyb3V0aW5lIFBDQ2FuY2VsTG9h
ZFVSTChjbGllbnRQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFt
SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbiA6aW50MTZf
dCk7Ci0KLXNpbXBsZXJvdXRpbmUgUENJbnZhbGlkYXRlUmVjdChjbGllbnRQb3J0IDptYWNoX3Bv
cnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90Owot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4IDpkb3VibGU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHkgOmRvdWJsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lk
dGggOmRvdWJsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0IDpkb3VibGUp
OwotCi1yb3V0aW5lIFBDR2V0Q29va2llcyhjbGllbnRQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAg
ICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAg
IHVybCA6ZGF0YV90OwotICAgICAgICAgICAgICAgICAgICAgb3V0IHJldHVyblZhbHVlIDpib29s
ZWFuX3Q7Ci0gICAgICAgICAgICAgICAgICAgICBvdXQgY29va2llcyA6ZGF0YV90LCBkZWFsbG9j
KTsKLQotcm91dGluZSBQQ1NldENvb2tpZXMoY2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAg
ICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAg
ICB1cmwgOmRhdGFfdDsKLSAgICAgICAgICAgICAgICAgICAgIGNvb2tpZXMgOmRhdGFfdDsKLSAg
ICAgICAgICAgICAgICAgICAgIG91dCByZXR1cm5WYWx1ZSA6Ym9vbGVhbl90KTsKLQotcm91dGlu
ZSBQQ0dldFByb3h5KGNsaWVudFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAg
IHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICB1cmwgOmRhdGFfdDsKLSAg
ICAgICAgICAgICAgICAgICBvdXQgcmV0dXJuVmFsdWUgOmJvb2xlYW5fdDsKLSAgICAgICAgICAg
ICAgICAgICBvdXQgcHJveHkgOmRhdGFfdCwgZGVhbGxvYyk7Ci0KLXJvdXRpbmUgUENHZXRBdXRo
ZW50aWNhdGlvbkluZm8oY2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvdG9jb2wgOmRhdGFfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaG9zdCA6ZGF0YV90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0
IDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1lIDpkYXRh
X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxtIDpkYXRhX3Q7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCByZXR1cm5WYWx1ZSA6Ym9vbGVhbl90Owot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgdXNlcm5hbWUgOmRhdGFfdCwgZGVh
bGxvYzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IHBhc3N3b3JkIDpkYXRh
X3QsIGRlYWxsb2MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLXJvdXRpbmUg
UENDb252ZXJ0UG9pbnQoY2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAg
ICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgc291cmNl
WCA6ZG91YmxlOwotICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VZIDpkb3VibGU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgIHNvdXJjZVNwYWNlIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFNwYWNlIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgb3V0
IHJldHVyblZhbHVlIDpib29sZWFuX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgIG91dCBkZXN0
WCA6ZG91YmxlOwotICAgICAgICAgICAgICAgICAgICAgICBvdXQgZGVzdFkgOmRvdWJsZSk7Ci0K
LS8vIE5QUnVudGltZQotCi1yb3V0aW5lIFBDR2V0U3RyaW5nSWRlbnRpZmllcihjbGllbnRQb3J0
IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIDpkYXRhX3Q7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IGlkZW50aWZpZXIgOnVpbnQ2NF90KTsK
LQotcm91dGluZSBQQ0dldEludElkZW50aWZpZXIoY2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgOmludDMyX3Q7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IGlkZW50aWZpZXI6IHVpbnQ2NF90KTsKLQotcm91dGluZSBQQ0dldFdpbmRv
d05QT2JqZWN0KGNsaWVudFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAg
ICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIG91dCBv
YmplY3RJRCA6dWludDMyX3QpOwotcm91dGluZSBQQ0dldFBsdWdpbkVsZW1lbnROUE9iamVjdChj
bGllbnRQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91
dCBvYmplY3RJRCA6dWludDMyX3QpOwotICAgICAgICAgICAgICAgICAgICAgIAotcm91dGluZSBQ
Q0ZvcmdldEJyb3dzZXJPYmplY3QoY2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgIG9i
amVjdElEIDp1aW50MzJfdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgCi1zaW1wbGVyb3V0aW5l
IFBDRXZhbHVhdGUoY2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAg
ICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElE
IDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0SUQgOnVpbnQzMl90Owot
ICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQgOmRhdGFfdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgYWxsb3dQb3B1cHMgOmJvb2xlYW5fdCk7Ci0KLXNpbXBsZXJvdXRpbmUgUENJbnZva2Uo
Y2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6
dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SUQgOnVpbnQzMl90OwotICAg
ICAgICAgICAgICAgICAgICAgb2JqZWN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAg
ICAgbWV0aG9kTmFtZUlkZW50aWZpZXIgOnVpbnQ2NF90OwotICAgICAgICAgICAgICAgICAgICAg
YXJndW1lbnRzIDpkYXRhX3QpOwotCi1zaW1wbGVyb3V0aW5lIFBDSW52b2tlRGVmYXVsdChjbGll
bnRQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsK
LSAgICAgICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICBvYmpl
Y3RJRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICBhcmd1bWVudHMgOmRhdGFfdCk7Ci0KLXJv
dXRpbmUgUENDb25zdHJ1Y3QoY2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAg
ICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICBvYmplY3RJRCA6dWlu
dDMyX3Q7Ci0gICAgICAgICAgICAgICAgICBhcmd1bWVudHMgOmRhdGFfdDsKLSAgICAgICAgICAg
ICAgICAgIG91dCByZXR1cm5WYWx1ZSA6Ym9vbGVhbl90OwotICAgICAgICAgICAgICAgICAgb3V0
IHJlc3VsdCA6ZGF0YV90LCBkZWFsbG9jKTsKLQotc2ltcGxlcm91dGluZSBQQ0dldFByb3BlcnR5
KGNsaWVudFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBs
dWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SUQg
OnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdElEIDp1aW50MzJf
dDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVJZGVudGlmaWVyIDp1
aW50NjRfdCk7Ci0KLXNpbXBsZXJvdXRpbmUgUENTZXRQcm9wZXJ0eShjbGllbnRQb3J0IDptYWNo
X3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAg
ICAgICAgICAgICAgICByZXF1ZXN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICBv
YmplY3RJRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZUlkZW50
aWZpZXIgOnVpbnQ2NF90OwotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA6ZGF0YV90KTsKLQot
c2ltcGxlcm91dGluZSBQQ1JlbW92ZVByb3BlcnR5KGNsaWVudFBvcnQgOm1hY2hfcG9ydF90Owot
ICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAg
ICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgIG9i
amVjdElEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lSWRl
bnRpZmllciA6dWludDY0X3QpOwotCi1zaW1wbGVyb3V0aW5lIFBDSGFzUHJvcGVydHkoY2xpZW50
UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQg
OnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMy
X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0SUQgOnVpbnQzMl90OwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZUlkZW50aWZpZXIgOnVpbnQ2NF90
KTsKLQotc2ltcGxlcm91dGluZSBQQ0hhc01ldGhvZChjbGllbnRQb3J0IDptYWNoX3BvcnRfdDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBvYmplY3RJRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBtZXRob2ROYW1lSWRlbnRpZmllciA6dWludDY0X3QpOwotCi1yb3V0aW5lIFBDSWRlbnRpZmll
ckluZm8oY2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgIGlk
ZW50aWZpZXIgOnVpbnQ2NF90OwotICAgICAgICAgICAgICAgICAgICAgICBvdXQgaW5mbyA6ZGF0
YV90LCBkZWFsbG9jKTsKLQotc2ltcGxlcm91dGluZSBQQ0VudW1lcmF0ZShjbGllbnRQb3J0IDpt
YWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90
OwotICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SUQgOnVpbnQzMl90OwotICAgICAg
ICAgICAgICAgICAgICAgICAgICBvYmplY3RJRCA6dWludDMyX3QpOwotCi0vLyBNaXNjCi0KLXNp
bXBsZXJvdXRpbmUgUENTZXRNZW51QmFyVmlzaWJsZShjbGllbnRQb3J0IDptYWNoX3BvcnRfdDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZSA6Ym9vbGVhbl90KTsKLQot
c2ltcGxlcm91dGluZSBQQ1NldE1vZGFsKGNsaWVudFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAg
ICAgICAgICAgICAgICAgICBtb2RhbCA6Ym9vbGVhbl90KTsKLQotLy8gV2FzIFBDQ2hlY2tJZkFs
bG93ZWRUb0xvYWRVUkwuCi1za2lwOwotCi0vLyBXYXMgUENDYW5jZWxDaGVja0lmQWxsb3dlZFRv
TG9hZFVSTC4KLXNraXA7Ci0KLS8vIFdhcyBQQ1Jlc29sdmVVUkwuCi1za2lwOwotCi0vLyBSZXBs
aWVzCi1zaW1wbGVyb3V0aW5lIFBDSW5zdGFudGlhdGVQbHVnaW5SZXBseShjbGllbnRQb3J0IDpt
YWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5J
RCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVz
dElEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQgOmtlcm5fcmV0dXJuX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVuZGVyQ29udGV4dElEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZW5kZXJlclR5cGUgOnVpbnQzMl90KTsKLQotc2ltcGxlcm91dGluZSBQQ0dldFNj
cmlwdGFibGVOUE9iamVjdFJlcGx5KGNsaWVudFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMyX3Q7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdElEIDp1aW50
MzJfdCk7Ci0KLXNpbXBsZXJvdXRpbmUgUENCb29sZWFuUmVwbHkoY2xpZW50UG9ydCA6bWFjaF9w
b3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElEIDp1aW50MzJfdDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IDpib29sZWFuX3QpOwotCi1zaW1wbGVyb3V0
aW5lIFBDQm9vbGVhbkFuZERhdGFSZXBseShjbGllbnRQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMyX3Q7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA6Ym9vbGVhbl90Owot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IDpkYXRhX3QpOyAgCi0K
LS8vIE5ldyBSb3V0aW5lcyAobXVzdCBiZSBhZGRlZCBhdCB0aGUgYm90dG9tIG9mIHRoZSBmaWxl
KQotCi1zaW1wbGVyb3V0aW5lIFBDU2V0RnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZyhjbGllbnRQ
b3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlzU2hvd2luZyA6Ym9vbGVhbl90KTsKLQotc2ltcGxlcm91dGluZSBQQ1NldEV4Y2Vw
dGlvbihjbGllbnRQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWVzc2FnZSA6ZGF0YV90KTsKLQotc2ltcGxlcm91dGluZSBQQ0xheWVySG9zdGluZ01vZGVD
aGFuZ2VkKGNsaWVudFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBob3N0c0xheWVyc0luV2luZG93U2VydmVyIDpib29sZWFuX3Q7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyQ29udGV4dElE
IDp1aW50MzJfdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5z
L0hvc3RlZC9XZWJLaXRQbHVnaW5Ib3N0LmRlZnMgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9Q
bHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5Ib3N0LmRlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGU0OTg0NzY0OTk0YjE2ZjY3ODgyNGZmNGFlY2ZmZTcxMTljM2RjNjkuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luSG9zdC5kZWZzCisrKyAvZGV2L251
bGwKQEAgLTEsMjU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9XZWJLaXRQbHVnaW5Ib3N0VHlwZXMu
ZGVmcz4KLQotc3Vic3lzdGVtIFdlYktpdFBsdWdpbkhvc3QgMzAwOwotCi1zZXJ2ZXJwcmVmaXgg
V0s7Ci11c2VycHJlZml4IF9XSzsKLQotcm91dGluZSBQSENoZWNrSW5XaXRoUGx1Z2luSG9zdChw
bHVnaW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTZXJ2ZXJBdWRpdFRva2VuIHRva2VuIDphdWRpdF90b2tlbl90OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3B0aW9ucyA6cGxpc3RfYnl0ZXNfdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNsaWVudFBvcnQgOm1hY2hfcG9ydF9tYWtlX3NlbmRfdDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNsaWVudFBTTkhpZ2ggOnVpbnQzMl90OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2xpZW50UFNOTG93IDp1aW50MzJfdDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlbmRlclBvcnQgOm1hY2hfcG9ydF9jb3B5X3NlbmRfdDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCBwbHVnaW5Ib3N0UFNOSGlnaCA6dWludDMy
X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgcGx1Z2luSG9zdFBTTkxvdyA6
dWludDMyX3QpOwotCi1zaW1wbGVyb3V0aW5lIFBISW5zdGFudGlhdGVQbHVnaW4ocGx1Z2luSG9z
dFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1
ZXN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25z
IDpwbGlzdF9ieXRlc190OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5J
RCA6dWludDMyX3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLXNpbXBsZXJv
dXRpbmUgUEhSZXNpemVQbHVnaW5JbnN0YW5jZShwbHVnaW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SUQgOnVpbnQzMl90Owot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpblggOmRvdWJsZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5ZIDpkb3VibGU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luV2lkdGggOmRvdWJsZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5IZWlnaHQgOmRvdWJsZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwWCA6ZG91YmxlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBZIDpkb3VibGU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcFdpZHRoIDpkb3VibGU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcEhlaWdodCA6ZG91YmxlKTsKLQotc2lt
cGxlcm91dGluZSBQSFBsdWdpbkluc3RhbmNlRm9jdXNDaGFuZ2VkKHBsdWdpbkhvc3RQb3J0IDpt
YWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1
Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoYXNGb2N1cyA6Ym9vbGVhbl90KTsKLXNpbXBsZXJvdXRpbmUgUEhQbHVnaW5JbnN0YW5jZVdp
bmRvd0ZvY3VzQ2hhbmdlZChwbHVnaW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzRm9jdXMgOmJvb2xlYW5fdCk7
Ci1zaW1wbGVyb3V0aW5lIFBIUGx1Z2luSW5zdGFuY2VXaW5kb3dGcmFtZUNoYW5nZWQocGx1Z2lu
SG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHggOmRvdWJsZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA6ZG91YmxlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA6ZG91YmxlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgOmRvdWJsZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2NyZWVuWSA6ZG91
YmxlKTsKLQotc2ltcGxlcm91dGluZSBQSFBsdWdpbkluc3RhbmNlTW91c2VFdmVudChwbHVnaW5I
b3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aW1lc3RhbXAgOmRvdWJsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV2ZW50VHlwZSA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtb2RpZmllckZsYWdzIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBsdWdpblggOmRvdWJsZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBsdWdpblkgOmRvdWJsZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNjcmVlblggOmRvdWJsZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNjcmVlblkgOmRvdWJsZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1heFNjcmVlblkgOmRvdWJsZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbk51bWJlciA6aW50MzJfdDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrQ291bnQgOmludDMyX3Q7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YVggOmRvdWJsZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhWSA6ZG91YmxlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFaOiBkb3VibGUpOwotCi1zaW1w
bGVyb3V0aW5lIFBIUGx1Z2luSW5zdGFuY2VLZXlib2FyZEV2ZW50KHBsdWdpbkhvc3RQb3J0IDpt
YWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBs
dWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRpbWVzdGFtcCA6ZG91YmxlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXZlbnRUeXBlIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1vZGlmaWVyRmxhZ3MgOnVpbnQzMl90OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycyA6ZGF0YV90OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZp
ZXJzIDpkYXRhX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
c0FSZXBlYXQgOmJvb2xlYW5fdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGtleUNvZGUgOnVpbnQxNl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAga2V5Q2hhciA6dWludDhfdCk7Ci0KLXNpbXBsZXJvdXRpbmUgUEhQbHVnaW5J
bnN0YW5jZVdoZWVsRXZlbnQocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMyX3Q7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcCA6ZG91
YmxlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllckZs
YWdzIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGx1Z2luWCA6ZG91YmxlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwbHVnaW5ZIDpkb3VibGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJ1dHRvbk51bWJlciA6aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVsdGFYIDpkb3VibGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlbHRhWSA6ZG91YmxlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWx0YVo6IGRvdWJsZSk7Ci0KLXNpbXBsZXJvdXRpbmUgUEhQbHVnaW5J
bnN0YW5jZUluc2VydFRleHQocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgOmRhdGFfdCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi1zaW1wbGVyb3V0aW5lIFBIUGx1
Z2luSW5zdGFuY2VTdGFydFRpbWVycyhwbHVnaW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90Owot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm90dGxlVGltZXJzIDpi
b29sZWFuX3QpOwotc2ltcGxlcm91dGluZSBQSFBsdWdpbkluc3RhbmNlU3RvcFRpbWVycyhwbHVn
aW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwbHVnaW5JRCA6dWludDMyX3QpOwotCi1zaW1wbGVyb3V0aW5lIFBIUGx1Z2luSW5z
dGFuY2VQcmludChwbHVnaW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2lkdGggOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVpZ2h0IDp1aW50MzJfdCk7Ci0KLXNpbXBsZXJvdXRpbmUgUEhE
ZXN0cm95UGx1Z2luSW5zdGFuY2UocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElEIDp1aW50MzJfdCk7Ci0KLS8v
IFdhcyBQSENoZWNrSWZBbGxvd2VkVG9Mb2FkVVJMUmVzdWx0Lgotc2tpcDsKLQotLy8gU3RyZWFt
cwotc2ltcGxlcm91dGluZSBQSFN0YXJ0U3RyZWFtKHBsdWdpbkhvc3RQb3J0IDptYWNoX3BvcnRf
dDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJlYW1JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3BvbnNlVVJMIDpkYXRhX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
IGV4cGVjdGVkQ29udGVudExlbmd0aCA6aW50NjRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGFzdE1vZGlmaWVkVGltZUludGVydmFsIDpkb3VibGU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgIG1pbWVUeXBlIDpkYXRhX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRl
cnMgOmRhdGFfdCk7Ci0KLXNpbXBsZXJvdXRpbmUgUEhTdHJlYW1EaWRSZWNlaXZlRGF0YShwbHVn
aW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RyZWFtSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhIDpkYXRhX3QpOwotCi1zaW1wbGVyb3V0aW5lIFBIU3RyZWFtRGlkRmluaXNoTG9hZGlu
ZyhwbHVnaW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cmVhbUlEIDp1aW50MzJfdCk7Ci0KLXNpbXBsZXJvdXRpbmUgUEhTdHJl
YW1EaWRGYWlsKHBsdWdpbkhvc3RQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RyZWFtSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNv
biA6aW50MTZfdCk7Ci0KLXNpbXBsZXJvdXRpbmUgUEhMb2FkVVJMTm90aWZ5KHBsdWdpbkhvc3RQ
b3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6
dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElEIDp1aW50MzJf
dDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24gOmludDE2X3QpOwotCi0vLyBO
UFJ1bnRpbWUKLQotc2ltcGxlcm91dGluZSBQSEdldFNjcmlwdGFibGVOUE9iamVjdChwbHVnaW5I
b3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVxdWVzdElEIDp1aW50MzJfdCk7Ci0KLXNpbXBsZXJvdXRpbmUgUEhOUE9iamVjdEhh
c1Byb3BlcnR5KHBsdWdpbkhvc3RQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVxdWVzdElEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvYmplY3RJRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlOYW1lIDp1aW50NjRfdCk7Ci0KLXNpbXBsZXJvdXRpbmUgUEhO
UE9iamVjdEhhc01ldGhvZChwbHVnaW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVxdWVzdElEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb2JqZWN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtZXRob2ROYW1lIDp1aW50NjRfdCk7Ci0KLXNpbXBsZXJvdXRpbmUgUEhOUE9i
amVjdEludm9rZShwbHVnaW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVxdWVzdElEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2JqZWN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2VU
eXBlIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSA6
dWludDY0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyA6ZGF0YV90
KTsKLQotc2ltcGxlcm91dGluZSBQSE5QT2JqZWN0SGFzSW52b2tlRGVmYXVsdE1ldGhvZChwbHVn
aW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0SUQgOnVpbnQzMl90KTsKLQot
c2ltcGxlcm91dGluZSBQSE5QT2JqZWN0SGFzQ29uc3RydWN0TWV0aG9kKHBsdWdpbkhvc3RQb3J0
IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXF1ZXN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvYmplY3RJRCA6dWludDMyX3QpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCi1zaW1wbGVyb3V0aW5lIFBITlBPYmplY3RHZXRQcm9wZXJ0eShwbHVn
aW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlcXVlc3RJRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2JqZWN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5TmFtZSA6dWludDY0X3QpOwotCi1zaW1wbGVyb3V0aW5lIFBITlBPYmplY3RTZXRQcm9w
ZXJ0eShwbHVnaW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb2JqZWN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5TmFtZSA6dWludDY0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgOmRhdGFfdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCi1zaW1wbGVyb3V0aW5lIFBITlBPYmplY3RSZWxlYXNlKHBsdWdpbkhvc3RQb3J0IDptYWNo
X3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJf
dDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdElEIDp1aW50MzJfdCk7Ci0K
LXNpbXBsZXJvdXRpbmUgUEhOUE9iamVjdEVudW1lcmF0ZShwbHVnaW5Ib3N0UG9ydCA6bWFjaF9w
b3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQz
Ml90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMy
X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0SUQgOnVpbnQzMl90
KTsKLQotLy8gUmVwbGllcwotCi1zaW1wbGVyb3V0aW5lIFBIQm9vbGVhblJlcGx5KGNsaWVudFBv
cnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6
dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMy
X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA6Ym9vbGVhbl90KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAotc2ltcGxlcm91dGluZSBQSEJvb2xlYW5BbmREYXRh
UmVwbHkocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVxdWVzdElEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVyblZhbHVlIDpib29sZWFuX3Q7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgOmRhdGFfdCk7Ci0KLS8vIE5ldyBSb3V0aW5lcyAo
bXVzdCBiZSBhZGRlZCBhdCB0aGUgYm90dG9tIG9mIHRoZSBmaWxlKQotCi1zaW1wbGVyb3V0aW5l
IFBIUGx1Z2luSW5zdGFuY2VEaWREcmF3KHBsdWdpbkhvc3RQb3J0IDptYWNoX3BvcnRfdDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90KTsK
LXNpbXBsZXJvdXRpbmUgUEhQbHVnaW5JbnN0YW5jZVByaXZhdGVCcm93c2luZ01vZGVEaWRDaGFu
Z2UocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByaXZhdGVCcm93c2luZ0VuYWJsZWQgOmJvb2xlYW5fdCk7Ci0KLXNpbXBsZXJvdXRpbmUgUEhQ
bHVnaW5JbnN0YW5jZVNuYXBzaG90KHBsdWdpbkhvc3RQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMyX3Q7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA6dWludDMyX3Q7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgOnVpbnQzMl90KTsKLQotcm91dGlu
ZSBQSENyZWF0ZVBsdWdpbk1JTUVUeXBlc1ByZWZlcmVuY2VzKHBsdWdpbkhvc3RQb3J0IDptYWNo
X3BvcnRfdCk7Ci0KLXNpbXBsZXJvdXRpbmUgUEhQbHVnaW5TaG91bGRIb3N0TGF5ZXJzSW5XaW5k
b3dTZXJ2ZXJDaGFuZ2VkKHBsdWdpbkhvc3RQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklE
IDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNob3VsZEhvc3RMYXllcnNJbldpbmRvd1NlcnZlciA6Ym9vbGVhbl90
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1dl
YktpdFBsdWdpbkhvc3RUeXBlcy5kZWZzIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lu
cy9Ib3N0ZWQvV2ViS2l0UGx1Z2luSG9zdFR5cGVzLmRlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGUzYjU5YTJlNGNkZDdhODE1MDM4YmNlZjE1ZDZiODMzNTkzOWY0YWUuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luSG9zdFR5cGVzLmRlZnMKKysrIC9k
ZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlIDxtYWNoL3N0ZF90eXBlcy5kZWZzPgotI2luY2x1ZGUg
PG1hY2gvbWFjaF90eXBlcy5kZWZzPgotCi1pbXBvcnQgPFdlYktpdExlZ2FjeS9XZWJLaXRQbHVn
aW5Ib3N0VHlwZXMuaD47Ci0KLXR5cGUgcGxpc3RfYnl0ZXNfdCA9IF5hcnJheSBbXSBvZiB1aW50
OF90OwotdHlwZSBhcHBsaWNhdGlvbl9uYW1lX3QgPSBeYXJyYXkgW10gb2YgdWludDhfdDsKLXR5
cGUgZGF0YV90ID0gXmFycmF5IFtdIG9mIGNoYXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5Ib3N0VHlwZXMuaCBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkhvc3RUeXBlcy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTcxMDU0MWNmOWZmNWEwM2UxNjg2YTcz
NzRhOTRhYzAzNDlkMjNhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdp
bkhvc3RUeXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFdlYktpdFBsdWdpbkhv
c3RUeXBlc19oCi0jZGVmaW5lIFdlYktpdFBsdWdpbkhvc3RUeXBlc19oCi0KLSNpbmNsdWRlIDxz
dGRpbnQuaD4KLQotdHlwZWRlZiB1aW50OF90KiBwbGlzdF9ieXRlc190OwotdHlwZWRlZiB1aW50
OF90KiBhcHBsaWNhdGlvbl9uYW1lX3Q7Ci0KLXR5cGVkZWYgY2hhciogZGF0YV90OwotCi0jaWZu
ZGVmIF9fTWlnVHlwZUNoZWNrCi0jZGVmaW5lIF9fTWlnVHlwZUNoZWNrIDEKLSNlbmRpZgotCi1l
bnVtIExvYWRVUkxGbGFncyB7Ci0gICAgSXNQb3N0ID0gMSA8PCAwLAotICAgIFBvc3REYXRhSXNG
aWxlID0gMSA8PCAxLCAKLSAgICBBbGxvd0hlYWRlcnNJblBvc3REYXRhID0gMSA8PCAyLAotICAg
IEFsbG93UG9wdXBzID0gMSA8PCAzLAotfTsKLSAKLWVudW0gSW52b2tlVHlwZSB7Ci0gICAgSW52
b2tlLAotICAgIEludm9rZURlZmF1bHQsCi0gICAgQ29uc3RydWN0Ci19OwotCi1lbnVtIFZhbHVl
VHlwZSB7Ci0gICAgVm9pZFZhbHVlVHlwZSwKLSAgICBOdWxsVmFsdWVUeXBlLAotICAgIEJvb2xW
YWx1ZVR5cGUsCi0gICAgRG91YmxlVmFsdWVUeXBlLAotICAgIFN0cmluZ1ZhbHVlVHlwZSwKLSAg
ICBKU09iamVjdFZhbHVlVHlwZSwKLSAgICBOUE9iamVjdFZhbHVlVHlwZQotfTsKLQotZW51bSBS
ZW5kZXJlclR5cGUgewotICAgIFVzZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcsCi0gICAgVXNlU29m
dHdhcmVSZW5kZXJlciwKLSAgICBVc2VMYXllckJhY2tlZFZpZXcKLX07Ci0KLSNlbmRpZiAvLyBX
ZWJLaXRQbHVnaW5Ib3N0VHlwZXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvUGx1Z2lucy9Ib3N0ZWQvV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlci5oIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViVGV4dElucHV0V2luZG93Q29udHJv
bGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjAzNmVlMmIwNGUyZjhiOWEz
MmY5NmU5ZWRjMjdiNWM3NzM4MmFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYlRl
eHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmIFVTRShQ
TFVHSU5fSE9TVF9QUk9DRVNTKQotCi0jaWZuZGVmIFdlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xs
ZXJfaAotI2RlZmluZSBXZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyX2gKLQotQGNsYXNzIFdl
YlRleHRJbnB1dFBhbmVsOwotCi1AaW50ZXJmYWNlIFdlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xs
ZXIgOiBOU09iamVjdCB7Ci0gICAgV2ViVGV4dElucHV0UGFuZWwgKl9wYW5lbDsKLX0KLQotKyAo
V2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlciAqKXNoYXJlZFRleHRJbnB1dFdpbmRvd0NvbnRy
b2xsZXI7Ci0KLS0gKE5TVGV4dElucHV0Q29udGV4dCAqKWlucHV0Q29udGV4dDsKLS0gKEJPT0wp
aW50ZXJwcmV0S2V5RXZlbnQ6KE5TRXZlbnQgKilldmVudCBzdHJpbmc6KE5TU3RyaW5nICoqKXN0
cmluZzsKLQotQGVuZAotCi0jZW5kaWYgLy8gV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlcl9o
Ci0KLSNlbmRpZiAvLyBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYlRleHRJbnB1dFdpbmRvd0NvbnRy
b2xsZXIubSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYlRleHRJ
bnB1dFdpbmRvd0NvbnRyb2xsZXIubQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA0
OTJmMTBlZGZhN2U1MmE4MDFhNTY5MmY1MTJhZTAwNzAzODhhMC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVn
aW5zL0hvc3RlZC9XZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLm0KKysrIC9kZXYvbnVsbApA
QCAtMSwxOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWYgVVNFKFBMVUdJTl9IT1NUX1BST0NFU1MpCi0KLSNpbXBvcnQgIldlYlRleHRJ
bnB1dFdpbmRvd0NvbnRyb2xsZXIuaCIKLQotI2ltcG9ydCA8cGFsL3N5c3RlbS9tYWMvV2ViUGFu
ZWwuaD4KLQotQGludGVyZmFjZSBXZWJUZXh0SW5wdXRWaWV3IDogTlNUZXh0VmlldyB7Ci19Ci1A
ZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJUZXh0SW5wdXRWaWV3Ci0KLS0gKE5TQXJyYXkgKil2
YWxpZEF0dHJpYnV0ZXNGb3JNYXJrZWRUZXh0Ci17Ci0gICAgLy8gTGV0IFRTTSBrbm93IHRoYXQg
YSBib3R0b20gaW5wdXQgd2luZG93IHdvdWxkIGJlIGNyZWF0ZWQgZm9yIG1hcmtlZCB0ZXh0Lgot
ICAgIE5TQXJyYXkgKnJlZ3VsYXJBdHRyaWJ1dGVzID0gW3N1cGVyIHZhbGlkQXR0cmlidXRlc0Zv
ck1hcmtlZFRleHRdOwotICAgIE5TTXV0YWJsZUFycmF5ICpmbG9hdGluZ1dpbmRvd0F0dHJpYnV0
ZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQXJyYXk6cmVndWxhckF0dHJpYnV0ZXNdOwot
ICAgIFtmbG9hdGluZ1dpbmRvd0F0dHJpYnV0ZXMgYWRkT2JqZWN0OkAiX19OU1VzZXNGbG9hdGlu
Z0lucHV0V2luZG93Il07Ci0gICAgcmV0dXJuIGZsb2F0aW5nV2luZG93QXR0cmlidXRlczsKLX0K
LQotQGVuZAotCi1AaW50ZXJmYWNlIFdlYlRleHRJbnB1dFBhbmVsIDogV2ViUGFuZWwgewotICAg
IE5TVGV4dFZpZXcgKl9pbnB1dFRleHRWaWV3OwotfQotCi0tIChOU1RleHRJbnB1dENvbnRleHQg
KilfaW5wdXRDb250ZXh0OwotLSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KE5TRXZlbnQgKill
dmVudCBzdHJpbmc6KE5TU3RyaW5nICoqKXN0cmluZzsKLQotQGVuZAotCi0jZGVmaW5lIGlucHV0
V2luZG93SGVpZ2h0IDIwCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJUZXh0SW5wdXRQYW5lbAotCi0t
ICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50
ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOwotICAgIAotICAgIFtfaW5wdXRUZXh0VmlldyByZWxl
YXNlXTsKLSAgICAKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKGlkKWluaXQKLXsKLSAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICAKLSAgICAvLyBTZXQgdGhlIGZyYW1lIHNpemUuCi0gICAgTlNSZWN0IHZpc2libGVG
cmFtZSA9IFtbTlNTY3JlZW4gbWFpblNjcmVlbl0gdmlzaWJsZUZyYW1lXTsKLSAgICBOU1JlY3Qg
ZnJhbWUgPSBOU01ha2VSZWN0KHZpc2libGVGcmFtZS5vcmlnaW4ueCwgdmlzaWJsZUZyYW1lLm9y
aWdpbi55LCB2aXNpYmxlRnJhbWUuc2l6ZS53aWR0aCwgaW5wdXRXaW5kb3dIZWlnaHQpOwotICAg
ICAKLSAgICBbc2VsZiBzZXRGcmFtZTpmcmFtZSBkaXNwbGF5Ok5PXTsKLSAgICAgICAgCi0gICAg
X2lucHV0VGV4dFZpZXcgPSBbW1dlYlRleHRJbnB1dFZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
W3NlbGYuY29udGVudFZpZXcgZnJhbWVdXTsKLSAgICBfaW5wdXRUZXh0Vmlldy5hdXRvcmVzaXpp
bmdNYXNrID0gTlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZSB8IE5TVmll
d01heFhNYXJnaW4gfCBOU1ZpZXdNaW5YTWFyZ2luIHwgTlNWaWV3TWF4WU1hcmdpbiB8IE5TVmll
d01pbllNYXJnaW47Ci0gICAgICAgIAotICAgIE5TU2Nyb2xsVmlldyogc2Nyb2xsVmlldyA9IFtb
TlNTY3JvbGxWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOltzZWxmLmNvbnRlbnRWaWV3IGZyYW1l
XV07Ci0gICAgc2Nyb2xsVmlldy5kb2N1bWVudFZpZXcgPSBfaW5wdXRUZXh0VmlldzsKLSAgICBz
ZWxmLmNvbnRlbnRWaWV3ID0gc2Nyb2xsVmlldzsKLSAgICBbc2Nyb2xsVmlldyByZWxlYXNlXTsK
LSAgICAgICAgCi0gICAgW3NlbGYgc2V0RmxvYXRpbmdQYW5lbDpZRVNdOwotICAgIAotICAgIFtb
TlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3I6QHNlbGVj
dG9yKF9rZXlib2FyZElucHV0U291cmNlQ2hhbmdlZDopCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTpOU1RleHRJbnB1dENvbnRleHRLZXlib2Fy
ZFNlbGVjdGlvbkRpZENoYW5nZU5vdGlmaWNhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Q6bmlsXTsKLQotICAgIHJldHVybiBzZWxmOwot
fQotCi0tICh2b2lkKV9rZXlib2FyZElucHV0U291cmNlQ2hhbmdlZDooTlNOb3RpZmljYXRpb24g
Kilub3RpZmljYXRpb24KLXsKLSAgICBbX2lucHV0VGV4dFZpZXcgc2V0U3RyaW5nOkAiIl07Ci0g
ICAgW3NlbGYgb3JkZXJPdXQ6bmlsXTsKLX0KLQotLSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6
KE5TRXZlbnQgKilldmVudCBzdHJpbmc6KE5TU3RyaW5nICoqKXN0cmluZwotewotICAgIEFMTE9X
X0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgQk9PTCBoYWRNYXJrZWRUZXh0ID0g
W19pbnB1dFRleHRWaWV3IGhhc01hcmtlZFRleHRdOwotICAgIEFMTE9XX0RFUFJFQ0FURURfREVD
TEFSQVRJT05TX0VORAotCi0gICAgKnN0cmluZyA9IG5pbDsKLQotICAgIC8vIExldCBUU00ga25v
dyB0aGF0IGEgYm90dG9tIGlucHV0IHdpbmRvdyB3b3VsZCBiZSBjcmVhdGVkIGZvciBtYXJrZWQg
dGV4dC4KLSAgICAvLyBGSVhNRTogQ2FuIGJlIHJlbW92ZWQgb25jZSB3ZSBjYW4gcmVseSBvbiBf
X05TVXNlc0Zsb2F0aW5nSW5wdXRXaW5kb3cgKG9yIGEgYmV0dGVyIEFQSSkgYmVpbmcgYXZhaWxh
YmxlIGV2ZXJ5d2hlcmUuCi0gICAgSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJjYXN0LXF1YWwiKQot
ICAgIEV2ZW50UmVmIGNhcmJvbkV2ZW50ID0gKEV2ZW50UmVmKVtldmVudCBldmVudFJlZl07Ci0g
ICAgSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIGlmIChjYXJib25FdmVudCkgewotICAgICAgICBC
b29sZWFuIGlnbm9yZVBBSCA9IHRydWU7Ci0gICAgICAgIFNldEV2ZW50UGFyYW1ldGVyKGNhcmJv
bkV2ZW50LCAnaVBBSCcsIHR5cGVCb29sZWFuLCBzaXplb2YoaWdub3JlUEFIKSwgJmlnbm9yZVBB
SCk7Ci0gICAgfQotCi0gICAgaWYgKCFbW19pbnB1dFRleHRWaWV3IGlucHV0Q29udGV4dF0gaGFu
ZGxlRXZlbnQ6ZXZlbnRdKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgCi0gICAgQUxMT1dfREVQ
UkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBpZiAoW19pbnB1dFRleHRWaWV3IGhhc01h
cmtlZFRleHRdKSB7Ci0gICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAot
ICAgICAgICAvLyBEb24ndCBzaG93IHRoZSBpbnB1dCBtZXRob2Qgd2luZG93IGZvciBkZWFkIGtl
eXMKLSAgICAgICAgaWYgKFtbZXZlbnQgY2hhcmFjdGVyc10gbGVuZ3RoXSA+IDApCi0gICAgICAg
ICAgICBbc2VsZiBvcmRlckZyb250Om5pbF07Ci0KLSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICB9
Ci0gICAgCi0gICAgaWYgKGhhZE1hcmtlZFRleHQpIHsKLSAgICAgICAgW3NlbGYgb3JkZXJPdXQ6
bmlsXTsKLQotICAgICAgICBOU1N0cmluZyAqdGV4dCA9IFtbX2lucHV0VGV4dFZpZXcgdGV4dFN0
b3JhZ2VdIHN0cmluZ107Ci0gICAgICAgIGlmIChbdGV4dCBsZW5ndGhdID4gMCkKLSAgICAgICAg
ICAgICpzdHJpbmcgPSBbW3RleHQgY29weV0gYXV0b3JlbGVhc2VdOwotICAgIH0KLSAgICAgICAg
ICAgIAotICAgIFtfaW5wdXRUZXh0VmlldyBzZXRTdHJpbmc6QCIiXTsKLSAgICByZXR1cm4gaGFk
TWFya2VkVGV4dDsKLX0KLQotLSAoTlNUZXh0SW5wdXRDb250ZXh0ICopX2lucHV0Q29udGV4dAot
ewotICAgIHJldHVybiBbX2lucHV0VGV4dFZpZXcgaW5wdXRDb250ZXh0XTsKLX0KLQotQGVuZAot
Ci1AaW1wbGVtZW50YXRpb24gV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlcgotCi0rIChXZWJU
ZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyICopc2hhcmVkVGV4dElucHV0V2luZG93Q29udHJvbGxl
cgotewotICAgIHN0YXRpYyBXZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyICp0ZXh0SW5wdXRX
aW5kb3dDb250cm9sbGVyOwotICAgIGlmICghdGV4dElucHV0V2luZG93Q29udHJvbGxlcikKLSAg
ICAgICAgdGV4dElucHV0V2luZG93Q29udHJvbGxlciA9IFtbV2ViVGV4dElucHV0V2luZG93Q29u
dHJvbGxlciBhbGxvY10gaW5pdF07Ci0gICAgCi0gICAgcmV0dXJuIHRleHRJbnB1dFdpbmRvd0Nv
bnRyb2xsZXI7Ci19Ci0KLS0gKGlkKWluaXQKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwot
ICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBfcGFuZWwgPSBb
W1dlYlRleHRJbnB1dFBhbmVsIGFsbG9jXSBpbml0XTsKLSAgICAKLSAgICByZXR1cm4gc2VsZjsK
LX0KLSAgICAgICAgCi0tIChOU1RleHRJbnB1dENvbnRleHQgKilpbnB1dENvbnRleHQKLXsKLSAg
ICByZXR1cm4gW19wYW5lbCBfaW5wdXRDb250ZXh0XTsKLX0KLQotLSAoQk9PTClpbnRlcnByZXRL
ZXlFdmVudDooTlNFdmVudCAqKWV2ZW50IHN0cmluZzooTlNTdHJpbmcgKiopc3RyaW5nCi17Ci0g
ICAgcmV0dXJuIFtfcGFuZWwgX2ludGVycHJldEtleUV2ZW50OmV2ZW50IHN0cmluZzpzdHJpbmdd
OwotfQotCi1AZW5kCi0KLSNlbmRpZiAvLyBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykKLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQ
bHVnaW5WaWV3LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRz
Y2FwZVBsdWdpblZpZXcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVhOTYxZTM3
N2VlOGZlMmQwMzU4ODJhYzQ1MDE5YzY1OWFkZjZlYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dl
YkJhc2VOZXRzY2FwZVBsdWdpblZpZXcuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAot
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4K
LQotI2ltcG9ydCAiV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLmgiCi0jaW1wb3J0IDx3dGYvRm9y
d2FyZC5oPgotI2ltcG9ydCA8d3RmL05ha2VkUHRyLmg+Ci0jaW1wb3J0IDx3dGYvUmVmUHRyLmg+
Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBjbGFzcyBET01FbGVtZW50OwotQGNsYXNz
IFdlYkRhdGFTb3VyY2U7Ci1AY2xhc3MgV2ViRnJhbWU7Ci1AY2xhc3MgV2ViVmlldzsKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEhUTUxQbHVnSW5FbGVtZW50OwotfQotCi1AaW50
ZXJmYWNlIFdlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgOiBOU1ZpZXcKLXsKLSAgICBSZXRhaW5Q
dHI8V2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlPiBfcGx1Z2luUGFja2FnZTsKLSAgICAKLSAgICBX
ZWJGcmFtZSAqX3dlYkZyYW1lOwotICAgIAotICAgIGludCBfbW9kZTsKLSAgICAKLSAgICBCT09M
IF90cmllZEFuZEZhaWxlZFRvQ3JlYXRlUGx1Z2luOwotICAgIEJPT0wgX2xvYWRNYW51YWxseTsK
LSAgICBCT09MIF9zaG91bGRGaXJlVGltZXJzOwotICAgIEJPT0wgX2lzU3RhcnRlZDsKLSAgICBC
T09MIF9oYXNGb2N1czsKLSAgICBCT09MIF9pc0NvbXBsZXRlbHlPYnNjdXJlZDsKLSAgICBCT09M
IF9pc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQ7Ci0gICAgQk9PTCBfc25hcHNob3R0aW5nOwotICAg
IAotICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudD4gX2VsZW1lbnQ7Ci0gICAg
UmV0YWluUHRyPE5TU3RyaW5nPiBfTUlNRVR5cGU7Ci0gICAgUmV0YWluUHRyPE5TVVJMPiBfYmFz
ZVVSTDsKLSAgICBSZXRhaW5QdHI8TlNVUkw+IF9zb3VyY2VVUkw7Ci0gICAgUmV0YWluUHRyPE5T
SW1hZ2U+IF9jYWNoZWRTbmFwc2hvdDsKLSAgICAKLSAgICBOU1RyYWNraW5nUmVjdFRhZyBfdHJh
Y2tpbmdUYWc7Ci19Ci0KLS0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClyCi0gICAgICBwbHVn
aW5QYWNrYWdlOihXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UgKil0aGVQbHVnaW5QYWNrYWdlCi0g
ICAgICAgICAgICAgICAgVVJMOihOU1VSTCAqKVVSTAotICAgICAgICAgICAgYmFzZVVSTDooTlNV
UkwgKiliYXNlVVJMCi0gICAgICAgICAgIE1JTUVUeXBlOihOU1N0cmluZyAqKU1JTUUKLSAgICAg
IGF0dHJpYnV0ZUtleXM6KE5TQXJyYXkgKilrZXlzCi0gICAgYXR0cmlidXRlVmFsdWVzOihOU0Fy
cmF5ICopdmFsdWVzCi0gICAgICAgbG9hZE1hbnVhbGx5OihCT09MKWxvYWRNYW51YWxseQotICAg
ICAgICAgICAgZWxlbWVudDooUmVmUHRyPFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50PiYmKWVs
ZW1lbnQ7Ci0KLS0gKFdlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSAqKXBsdWdpblBhY2thZ2U7Ci0K
LS0gKE5TVVJMICopVVJMV2l0aENTdHJpbmc6KGNvbnN0IGNoYXIgKilVUkxDU3RyaW5nOwotLSAo
TlNNdXRhYmxlVVJMUmVxdWVzdCAqKXJlcXVlc3RXaXRoVVJMQ1N0cmluZzooY29uc3QgY2hhciAq
KVVSTENTdHJpbmc7Ci0KLS8vIFN1YmNsYXNzZXMgbXVzdCBvdmVycmlkZSB0aGVzZS4KLS8vIFRo
ZSAiaGFuZGxlIiBwcmVmaXggaXMgbmVlZGVkIHRvIGF2b2lkIG92ZXJyaWRpbmcgTlNWaWV3IG1l
dGhvZHMuCi0tICh2b2lkKWhhbmRsZU1vdXNlTW92ZWQ6KE5TRXZlbnQgKilldmVudDsKLS0gKHZv
aWQpaGFuZGxlTW91c2VFbnRlcmVkOihOU0V2ZW50ICopZXZlbnQ7Ci0tICh2b2lkKWhhbmRsZU1v
dXNlRXhpdGVkOihOU0V2ZW50ICopZXZlbnQ7Ci0tICh2b2lkKXNldEF0dHJpYnV0ZUtleXM6KE5T
QXJyYXkgKilrZXlzIGFuZFZhbHVlczooTlNBcnJheSAqKXZhbHVlczsKLS0gKHZvaWQpZm9jdXND
aGFuZ2VkOwotLSAodm9pZCl1cGRhdGVBbmRTZXRXaW5kb3c7Ci0KLS0gKFdlYkZyYW1lICopd2Vi
RnJhbWU7Ci0tIChXZWJEYXRhU291cmNlICopZGF0YVNvdXJjZTsKLS0gKFdlYlZpZXcgKil3ZWJW
aWV3OwotLSAoTlNXaW5kb3cgKiljdXJyZW50V2luZG93OwotLSAoTmFrZWRQdHI8V2ViQ29yZTo6
SFRNTFBsdWdJbkVsZW1lbnQ+KWVsZW1lbnQ7Ci0KLS0gKHZvaWQpcmVtb3ZlVHJhY2tpbmdSZWN0
OwotLSAodm9pZClyZXNldFRyYWNraW5nUmVjdDsKLQotLSAodm9pZClzdG9wVGltZXJzOwotLSAo
dm9pZClzdGFydFRpbWVyczsKLS0gKHZvaWQpcmVzdGFydFRpbWVyczsKLQotLSAodm9pZClzdGFy
dDsKLS0gKHZvaWQpc3RvcDsKLQotLSAodm9pZClhZGRXaW5kb3dPYnNlcnZlcnM7Ci0tICh2b2lk
KXJlbW92ZVdpbmRvd09ic2VydmVyczsKLS0gKEJPT0wpc2hvdWxkQ2xpcE91dFBsdWdpbjsKLQot
LSAoQk9PTClzdXBwb3J0c1NuYXBzaG90dGluZzsKLS0gKHZvaWQpY2FjaGVTbmFwc2hvdDsKLS0g
KHZvaWQpY2xlYXJDYWNoZWRTbmFwc2hvdDsKLQotLSAoQk9PTCljb252ZXJ0RnJvbVg6KGRvdWJs
ZSlzb3VyY2VYIGFuZFk6KGRvdWJsZSlzb3VyY2VZIHNwYWNlOihOUENvb3JkaW5hdGVTcGFjZSlz
b3VyY2VTcGFjZQotICAgICAgICAgICAgICAgICB0b1g6KGRvdWJsZSAqKWRlc3RYIGFuZFk6KGRv
dWJsZSAqKWRlc3RZIHNwYWNlOihOUENvb3JkaW5hdGVTcGFjZSlkZXN0U3BhY2U7Ci0KLS0gKHZv
aWQpaW52YWxpZGF0ZVBsdWdpbkNvbnRlbnRSZWN0OihOU1JlY3QpcmVjdDsKLQotLSAoTlNSZWN0
KWFjdHVhbFZpc2libGVSZWN0SW5XaW5kb3c7IC8vIHRha2VzIHRyYW5zZm9ybXMgaW50byBhY2Nv
dW50LgotCi0tIChDQUxheWVyICopcGx1Z2luTGF5ZXI7Ci0KLS0gKEJPT0wpZ2V0Rm9ybVZhbHVl
OihOU1N0cmluZyAqKil2YWx1ZTsKLQotQGVuZAotCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotYm9v
bCBnZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgY2hhciogcHJvdG9jb2xTdHIsIGNvbnN0IGNo
YXIqIGhvc3RTdHIsIGludDMyX3QgcG9ydCwgY29uc3QgY2hhciogc2NoZW1lU3RyLCBjb25zdCBj
aGFyKiByZWFsbVN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFdURjo6Q1N0cmluZyYg
dXNlcm5hbWUsIFdURjo6Q1N0cmluZyYgcGFzc3dvcmQpOwotdm9pZCBzZW5kVXNlckNoYW5nZU5v
dGlmaWNhdGlvbnMoKTsKLX0gCi0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0gYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYjg0YjIzNDRkMThiNTI1MGJlMGNkMmVmZWQ2
YmEyYzNkMDllNjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5W
aWV3Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsOTAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0KLSNpbXBvcnQgIldlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcuaCIKLQot
I2ltcG9ydCAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uTWFwLmgiCi0jaW1wb3J0ICJXZWJGcmFtZUlu
dGVybmFsLmgiCi0jaW1wb3J0ICJXZWJLaXRMb2dnaW5nLmgiCi0jaW1wb3J0ICJXZWJLaXROU1N0
cmluZ0V4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNVUkxFeHRyYXMuaCIKLSNpbXBvcnQgIldlYk5T
VVJMUmVxdWVzdEV4dHJhcy5oIgotI2ltcG9ydCAiV2ViVmlldy5oIgotI2ltcG9ydCAiV2ViVmll
d0ludGVybmFsLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5n
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uTWFjLmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL0JpdG1hcEltYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0NyZWRlbnRpYWwuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvQ3JlZGVudGlhbFN0b3JhZ2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRG9jdW1l
bnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9GcmFt
ZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9I
VE1MUGx1Z0luRWxlbWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Np
b24uaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9Qcm90ZWN0
aW9uU3BhY2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyRW1iZWRkZWRPYmplY3QuaD4KLSNp
bXBvcnQgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgotI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eU9y
aWdpbi5oPgotI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlSklUT3BlcmF0aW9ucy5oPgotI2ltcG9y
dCA8V2ViS2l0TGVnYWN5L0RPTVByaXZhdGUuaD4KLSNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdy
YXBoaWNzU1BJLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL01h
aW5UaHJlYWQuaD4KLSNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLSNkZWZpbmUgTG9naW5XaW5kb3dEaWRTd2l0Y2hGcm9tVXNlck5vdGlmaWNh
dGlvbiAgICBAIldlYkxvZ2luV2luZG93RGlkU3dpdGNoRnJvbVVzZXJOb3RpZmljYXRpb24iCi0j
ZGVmaW5lIExvZ2luV2luZG93RGlkU3dpdGNoVG9Vc2VyTm90aWZpY2F0aW9uICAgICAgQCJXZWJM
b2dpbldpbmRvd0RpZFN3aXRjaFRvVXNlck5vdGlmaWNhdGlvbiIKLQotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci0KLUBpbXBsZW1lbnRhdGlvbiBXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Ci0K
LSsgKHZvaWQpaW5pdGlhbGl6ZQotewotICAgIEpTQzo6aW5pdGlhbGl6ZSgpOwotICAgIFdURjo6
aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKLSAgICBXZWJDb3JlOjpwb3B1bGF0ZUpJVE9wZXJhdGlv
bnMoKTsKLSAgICBXZWJLaXQ6OnNlbmRVc2VyQ2hhbmdlTm90aWZpY2F0aW9ucygpOwotfQotCi0t
IChpZClpbml0V2l0aEZyYW1lOihOU1JlY3QpZnJhbWUKLSAgICAgIHBsdWdpblBhY2thZ2U6KFdl
Yk5ldHNjYXBlUGx1Z2luUGFja2FnZSAqKXBsdWdpblBhY2thZ2UKLSAgICAgICAgICAgICAgICBV
Ukw6KE5TVVJMICopVVJMCi0gICAgICAgICAgICBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwKLSAg
ICAgICAgICAgTUlNRVR5cGU6KE5TU3RyaW5nICopTUlNRQotICAgICAgYXR0cmlidXRlS2V5czoo
TlNBcnJheSAqKWtleXMKLSAgICBhdHRyaWJ1dGVWYWx1ZXM6KE5TQXJyYXkgKil2YWx1ZXMKLSAg
ICAgICBsb2FkTWFudWFsbHk6KEJPT0wpbG9hZE1hbnVhbGx5Ci0gICAgICAgICAgICBlbGVtZW50
OihSZWZQdHI8V2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQ+JiYpZWxlbWVudAotewotICAgIHNl
bGYgPSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV07Ci0gICAgaWYgKCFzZWxmKQotICAgICAg
ICByZXR1cm4gbmlsOwotICAgIAotICAgIF9wbHVnaW5QYWNrYWdlID0gcGx1Z2luUGFja2FnZTsK
LSAgICBfZWxlbWVudCA9IFdURk1vdmUoZWxlbWVudCk7Ci0gICAgX3NvdXJjZVVSTCA9IGFkb3B0
TlMoW1VSTCBjb3B5XSk7Ci0gICAgX2Jhc2VVUkwgPSBhZG9wdE5TKFtiYXNlVVJMIGNvcHldKTsK
LSAgICBfTUlNRVR5cGUgPSBhZG9wdE5TKFtNSU1FIGNvcHldKTsKLQotICAgIFtzZWxmIHNldEF0
dHJpYnV0ZUtleXM6a2V5cyBhbmRWYWx1ZXM6dmFsdWVzXTsKLQotICAgIGlmIChsb2FkTWFudWFs
bHkpCi0gICAgICAgIF9tb2RlID0gTlBfRlVMTDsKLSAgICBlbHNlCi0gICAgICAgIF9tb2RlID0g
TlBfRU1CRUQ7Ci0gICAgCi0gICAgX2xvYWRNYW51YWxseSA9IGxvYWRNYW51YWxseTsKLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgQVNTRVJUKCFfaXNTdGFy
dGVkKTsKLQotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoV2ViTmV0c2NhcGVQbHVnaW5Q
YWNrYWdlICopcGx1Z2luUGFja2FnZQotewotICAgIHJldHVybiBfcGx1Z2luUGFja2FnZS5nZXQo
KTsKLX0KLSAgICAKLS0gKEJPT0wpaXNGbGlwcGVkCi17Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQot
LSAoTlNVUkwgKilVUkxXaXRoQ1N0cmluZzooY29uc3QgY2hhciAqKWNTdHJpbmcKLXsKLSAgICBp
ZiAoIWNTdHJpbmcpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgTlNTdHJpbmcgKnN0
cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ1N0cmluZzpjU3RyaW5nIGVuY29kaW5nOk5TSVNP
TGF0aW4xU3RyaW5nRW5jb2RpbmddOwotICAgIHN0cmluZyA9IFtzdHJpbmcgc3RyaW5nQnlSZXBs
YWNpbmdPY2N1cnJlbmNlc09mU3RyaW5nOkAiXHIiIHdpdGhTdHJpbmc6QCIiXTsKLSAgICBzdHJp
bmcgPSBbc3RyaW5nIHN0cmluZ0J5UmVwbGFjaW5nT2NjdXJyZW5jZXNPZlN0cmluZzpAIlxuIiB3
aXRoU3RyaW5nOkAiIl07Ci0gICAgcmV0dXJuIFtOU1VSTCBfd2ViX1VSTFdpdGhEYXRhQXNTdHJp
bmc6c3RyaW5nIHJlbGF0aXZlVG9VUkw6X2Jhc2VVUkwuZ2V0KCldOwotfQotCi0tIChOU011dGFi
bGVVUkxSZXF1ZXN0ICopcmVxdWVzdFdpdGhVUkxDU3RyaW5nOihjb25zdCBjaGFyICopVVJMQ1N0
cmluZwotewotICAgIE5TVVJMICpVUkwgPSBbc2VsZiBVUkxXaXRoQ1N0cmluZzpVUkxDU3RyaW5n
XTsKLSAgICBpZiAoIVVSTCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBOU011dGFi
bGVVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW05TTXV0YWJsZVVSTFJlcXVlc3QgcmVxdWVzdFdpdGhV
Ukw6VVJMXTsKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIHdlYkZyYW1lXSk7Ci0gICAg
aWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBbcmVxdWVzdCBfd2ViX3NldEhU
VFBSZWZlcnJlcjpmcmFtZS0+bG9hZGVyKCkub3V0Z29pbmdSZWZlcnJlcigpXTsKLSAgICByZXR1
cm4gcmVxdWVzdDsKLX0KLQotLy8gTWV0aG9kcyB0aGF0IHN1YmNsYXNzZXMgbXVzdCBvdmVycmlk
ZQotLSAodm9pZClzZXRBdHRyaWJ1dGVLZXlzOihOU0FycmF5ICopa2V5cyBhbmRWYWx1ZXM6KE5T
QXJyYXkgKil2YWx1ZXMKLXsKLSAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIG92ZXJyaWRkZW4gYnkg
c3ViY2xhc3Nlcy4KLX0KLQotLSAodm9pZCloYW5kbGVNb3VzZU1vdmVkOihOU0V2ZW50ICopZXZl
bnQKLXsKLSAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4K
LX0KLQotLSAodm9pZCloYW5kbGVNb3VzZUVudGVyZWQ6KE5TRXZlbnQgKilldmVudAotewotICAg
IC8vIFRoaXMgbmVlZHMgdG8gYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgotfQotCi0tICh2
b2lkKWhhbmRsZU1vdXNlRXhpdGVkOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICAvLyBUaGlzIG5l
ZWRzIHRvIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KLX0KLQotLSAodm9pZClmb2N1c0No
YW5nZWQKLXsKLSAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nl
cy4KLX0KLQotLSAodm9pZCl3aW5kb3dGb2N1c0NoYW5nZWQ6KEJPT0wpaGFzRm9jdXMKLXsKLSAg
ICAvLyBUaGlzIG5lZWRzIHRvIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KLX0KLQotLSAo
Qk9PTCljcmVhdGVQbHVnaW4KLXsKLSAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIG92ZXJyaWRkZW4g
Ynkgc3ViY2xhc3Nlcy4KLSAgICByZXR1cm4gTk87Ci19Ci0KLS0gKHZvaWQpbG9hZFN0cmVhbQot
ewotICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgotfQot
Ci0tIChCT09MKXNob3VsZFN0b3AKLXsKLSAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIG92ZXJyaWRk
ZW4gYnkgc3ViY2xhc3Nlcy4KLSAgICByZXR1cm4gWUVTOwotfQotCi0tICh2b2lkKWRlc3Ryb3lQ
bHVnaW4KLXsKLSAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nl
cy4KLX0KLQotLSAodm9pZCl1cGRhdGVBbmRTZXRXaW5kb3cKLXsKLSAgICAvLyBUaGlzIG5lZWRz
IHRvIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KLX0KLQotLSAodm9pZClzZW5kTW9kaWZp
ZXJFdmVudFdpdGhLZXlDb2RlOihpbnQpa2V5Q29kZSBjaGFyYWN0ZXI6KGNoYXIpY2hhcmFjdGVy
Ci17Ci0gICAgLy8gVGhpcyBuZWVkcyB0byBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCi19
Ci0KLS0gKHZvaWQpcHJpdmF0ZUJyb3dzaW5nTW9kZURpZENoYW5nZQotewotfQotCi0tICh2b2lk
KXJlbW92ZVRyYWNraW5nUmVjdAotewotICAgIGlmIChfdHJhY2tpbmdUYWcpIHsKLSAgICAgICAg
W3NlbGYgcmVtb3ZlVHJhY2tpbmdSZWN0Ol90cmFja2luZ1RhZ107Ci0gICAgICAgIF90cmFja2lu
Z1RhZyA9IDA7Ci0gICAgICAgIAotICAgICAgICAvLyBEbyB0aGUgZm9sbG93aW5nIGFmdGVyIHNl
dHRpbmcgdHJhY2tpbmdUYWcgdG8gMCBzbyB3ZSBkb24ndCByZS1lbnRlci4KLSAgICAgICAgCi0g
ICAgICAgIC8vIEJhbGFuY2UgdGhlIHJldGFpbiBpbiByZXNldFRyYWNraW5nUmVjdC4gVXNlIGF1
dG9yZWxlYXNlIGluIGNhc2Ugd2UgaG9sZCAKLSAgICAgICAgLy8gdGhlIGxhc3QgcmVmZXJlbmNl
IHRvIHRoZSB3aW5kb3cgZHVyaW5nIHRlYXItZG93biwgdG8gYXZvaWQgY3Jhc2hpbmcgQXBwS2l0
LiAKLSAgICAgICAgW1tzZWxmIHdpbmRvd10gYXV0b3JlbGVhc2VdOwotICAgIH0KLX0KLQotLSAo
dm9pZClyZXNldFRyYWNraW5nUmVjdAotewotICAgIFtzZWxmIHJlbW92ZVRyYWNraW5nUmVjdF07
Ci0gICAgaWYgKF9pc1N0YXJ0ZWQpIHsKLSAgICAgICAgLy8gUmV0YWluIHRoZSB3aW5kb3cgc28g
dGhhdCByZW1vdmVUcmFja2luZ1JlY3QgY2FuIHdvcmsgYWZ0ZXIgdGhlIHdpbmRvdyBpcyBjbG9z
ZWQuCi0gICAgICAgIFtbc2VsZiB3aW5kb3ddIHJldGFpbl07Ci0gICAgICAgIF90cmFja2luZ1Rh
ZyA9IFtzZWxmIGFkZFRyYWNraW5nUmVjdDpbc2VsZiBib3VuZHNdIG93bmVyOnNlbGYgdXNlckRh
dGE6bmlsIGFzc3VtZUluc2lkZTpOT107Ci0gICAgfQotfQotCi0tICh2b2lkKXN0b3BUaW1lcnMK
LXsKLSAgICBfc2hvdWxkRmlyZVRpbWVycyA9IE5POwotfQotCi0tICh2b2lkKXN0YXJ0VGltZXJz
Ci17Ci0gICAgX3Nob3VsZEZpcmVUaW1lcnMgPSBZRVM7Ci19Ci0KLS0gKHZvaWQpcmVzdGFydFRp
bWVycwotewotICAgIFtzZWxmIHN0b3BUaW1lcnNdOwotICAgIAotICAgIGlmICghX2lzU3RhcnRl
ZCB8fCBbW3NlbGYgd2luZG93XSBpc01pbmlhdHVyaXplZF0pCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBbc2VsZiBzdGFydFRpbWVyc107Ci19Ci0KLS0gKE5TUmVjdClfd2luZG93Q2xpcFJl
Y3QKLXsKLSAgICBhdXRvKiByZW5kZXJlciA9IF9lbGVtZW50LT5yZW5kZXJlcigpOwotICAgIGlm
ICghaXM8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KHJlbmRlcmVyKSkKLSAgICAgICAgcmV0dXJuIE5T
WmVyb1JlY3Q7Ci0gICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckVtYmVkZGVkT2JqZWN0PigqcmVu
ZGVyZXIpLndpbmRvd0NsaXBSZWN0KCk7Ci19Ci0KLS0gKE5TUmVjdCl2aXNpYmxlUmVjdAotewot
ICAgIC8vIFdlYkNvcmUgbWF5IGltcG9zZSBhbiBhZGRpdGlvbmFsIGNsaXAgKHZpYSBDU1Mgb3Zl
cmZsb3cgb3IgY2xpcCBwcm9wZXJ0aWVzKS4gIEZldGNoCi0gICAgLy8gdGhhdCBjbGlwIG5vdy4g
ICAgCi0gICAgcmV0dXJuIE5TSW50ZXJzZWN0aW9uUmVjdChbc2VsZiBjb252ZXJ0UmVjdDpbc2Vs
ZiBfd2luZG93Q2xpcFJlY3RdIGZyb21WaWV3Om5pbF0sIFtzdXBlciB2aXNpYmxlUmVjdF0pOwot
fQotCi0tIChCT09MKWFjY2VwdHNGaXJzdFJlc3BvbmRlcgotewotICAgIHJldHVybiBZRVM7Ci19
Ci0KLS0gKHZvaWQpc2VuZEFjdGl2YXRlRXZlbnQ6KEJPT0wpYWN0aXZhdGUKLXsKLSAgICBpZiAo
IV9pc1N0YXJ0ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBbc2VsZiB3aW5kb3dGb2N1
c0NoYW5nZWQ6YWN0aXZhdGVdOwotfQotCi0tICh2b2lkKXNldEhhc0ZvY3VzOihCT09MKWZsYWcK
LXsKLSAgICBpZiAoIV9pc1N0YXJ0ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAo
X2hhc0ZvY3VzID09IGZsYWcpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBfaGFzRm9jdXMg
PSBmbGFnOwotICAgIAotICAgIFtzZWxmIGZvY3VzQ2hhbmdlZF07Ci19Ci0KLS0gKHZvaWQpYWRk
V2luZG93T2JzZXJ2ZXJzCi17Ci0gICAgQVNTRVJUKFtzZWxmIHdpbmRvd10pOwotICAgIAotICAg
IE5TV2luZG93ICp0aGVXaW5kb3cgPSBbc2VsZiB3aW5kb3ddOwotICAgIAotICAgIE5TTm90aWZp
Y2F0aW9uQ2VudGVyICpub3RpZmljYXRpb25DZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIg
ZGVmYXVsdENlbnRlcl07Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxm
IHNlbGVjdG9yOkBzZWxlY3Rvcih3aW5kb3dXaWxsQ2xvc2U6KSAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuYW1lOk5TV2luZG93V2lsbENsb3NlTm90aWZpY2F0aW9uIG9iamVjdDp0
aGVXaW5kb3ddOyAKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2Vs
ZWN0b3I6QHNlbGVjdG9yKHdpbmRvd0JlY2FtZUtleTopCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZTpOU1dpbmRvd0RpZEJlY29tZUtleU5vdGlmaWNhdGlvbiBvYmplY3Q6dGhl
V2luZG93XTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0
b3I6QHNlbGVjdG9yKHdpbmRvd1Jlc2lnbmVkS2V5OikKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuYW1lOk5TV2luZG93RGlkUmVzaWduS2V5Tm90aWZpY2F0aW9uIG9iamVjdDp0aGVX
aW5kb3ddOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3Rv
cjpAc2VsZWN0b3Iod2luZG93RGlkTWluaWF0dXJpemU6KQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5hbWU6TlNXaW5kb3dEaWRNaW5pYXR1cml6ZU5vdGlmaWNhdGlvbiBvYmplY3Q6
dGhlV2luZG93XTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2Vs
ZWN0b3I6QHNlbGVjdG9yKHdpbmRvd0RpZERlbWluaWF0dXJpemU6KQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWU6TlNXaW5kb3dEaWREZW1pbmlhdHVyaXplTm90aWZpY2F0aW9u
IG9iamVjdDp0aGVXaW5kb3ddOwotICAgIAotICAgIFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2Jz
ZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IobG9naW5XaW5kb3dEaWRTd2l0Y2hGcm9tVXNl
cjopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTpMb2dpbldpbmRvd0RpZFN3
aXRjaEZyb21Vc2VyTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwotICAgIFtub3RpZmljYXRpb25D
ZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IobG9naW5XaW5kb3dEaWRT
d2l0Y2hUb1VzZXI6KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6TG9naW5X
aW5kb3dEaWRTd2l0Y2hUb1VzZXJOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07Ci19Ci0KLS0gKHZv
aWQpcmVtb3ZlV2luZG93T2JzZXJ2ZXJzCi17Ci0gICAgTlNOb3RpZmljYXRpb25DZW50ZXIgKm5v
dGlmaWNhdGlvbkNlbnRlciA9IFtOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsK
LSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpOU1dpbmRv
d1dpbGxDbG9zZU5vdGlmaWNhdGlvbiAgICAgICAgb2JqZWN0Om5pbF07IAotICAgIFtub3RpZmlj
YXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TV2luZG93RGlkQmVjb21lS2V5
Tm90aWZpY2F0aW9uICAgICBvYmplY3Q6bmlsXTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJl
bW92ZU9ic2VydmVyOnNlbGYgbmFtZTpOU1dpbmRvd0RpZFJlc2lnbktleU5vdGlmaWNhdGlvbiAg
ICAgb2JqZWN0Om5pbF07Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpz
ZWxmIG5hbWU6TlNXaW5kb3dEaWRNaW5pYXR1cml6ZU5vdGlmaWNhdGlvbiAgIG9iamVjdDpuaWxd
OwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TV2lu
ZG93RGlkRGVtaW5pYXR1cml6ZU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKLSAgICBbbm90aWZp
Y2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpMb2dpbldpbmRvd0RpZFN3aXRj
aEZyb21Vc2VyTm90aWZpY2F0aW9uICAgb2JqZWN0Om5pbF07Ci0gICAgW25vdGlmaWNhdGlvbkNl
bnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6TG9naW5XaW5kb3dEaWRTd2l0Y2hUb1VzZXJO
b3RpZmljYXRpb24gICAgIG9iamVjdDpuaWxdOwotfQotCi0tICh2b2lkKXN0YXJ0Ci17Ci0gICAg
QVNTRVJUKFtzZWxmIGN1cnJlbnRXaW5kb3ddKTsKLSAgICAKLSAgICBpZiAoX2lzU3RhcnRlZCkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChfdHJpZWRBbmRGYWlsZWRUb0NyZWF0ZVBs
dWdpbikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEFTU0VSVChbc2VsZiB3ZWJWaWV3XSk7
Ci0gICAgCi0gICAgaWYgKCFbW1tzZWxmIHdlYlZpZXddIHByZWZlcmVuY2VzXSBhcmVQbHVnSW5z
RW5hYmxlZF0pCi0gICAgICAgIHJldHVybjsKLSAgIAotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUo
W3NlbGYgd2ViRnJhbWVdKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAg
UGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgYm9vbCB3YXNEZWZlcnJpbmcgPSBwYWdlLT5kZWZlcnNMb2FkaW5nKCk7
Ci0gICAgaWYgKCF3YXNEZWZlcnJpbmcpCi0gICAgICAgIHBhZ2UtPnNldERlZmVyc0xvYWRpbmco
dHJ1ZSk7Ci0KLSAgICBCT09MIHJlc3VsdCA9IFtzZWxmIGNyZWF0ZVBsdWdpbl07Ci0gICAgCi0g
ICAgaWYgKCF3YXNEZWZlcnJpbmcpCi0gICAgICAgIHBhZ2UtPnNldERlZmVyc0xvYWRpbmcoZmFs
c2UpOwotCi0gICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgX3RyaWVkQW5kRmFpbGVkVG9DcmVh
dGVQbHVnaW4gPSBZRVM7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgX2lzU3Rh
cnRlZCA9IFlFUzsKLQotICAgIFtbc2VsZiB3ZWJWaWV3XSBhZGRQbHVnaW5JbnN0YW5jZVZpZXc6
c2VsZl07Ci0KLSAgICBpZiAoW3NlbGYgY3VycmVudFdpbmRvd10pCi0gICAgICAgIFtzZWxmIHVw
ZGF0ZUFuZFNldFdpbmRvd107Ci0KLSAgICBpZiAoW3NlbGYgd2luZG93XSkgewotICAgICAgICBb
c2VsZiBhZGRXaW5kb3dPYnNlcnZlcnNdOwotICAgICAgICBpZiAoW1tzZWxmIHdpbmRvd10gaXNL
ZXlXaW5kb3ddKSB7Ci0gICAgICAgICAgICBbc2VsZiBzZW5kQWN0aXZhdGVFdmVudDpZRVNdOwot
ICAgICAgICB9Ci0gICAgICAgIFtzZWxmIHJlc3RhcnRUaW1lcnNdOwotICAgIH0KLSAgICAKLSAg
ICBbc2VsZiByZXNldFRyYWNraW5nUmVjdF07Ci0gICAgCi0gICAgW3NlbGYgbG9hZFN0cmVhbV07
Ci19Ci0KLS0gKHZvaWQpc3RvcAotewotICAgIGlmICghW3NlbGYgc2hvdWxkU3RvcF0pCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBbc2VsZiByZW1vdmVUcmFja2luZ1JlY3RdOwotICAgIAot
ICAgIGlmICghX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX2lzU3RhcnRlZCA9
IE5POwotICAgIAotICAgIFtbc2VsZiB3ZWJWaWV3XSByZW1vdmVQbHVnaW5JbnN0YW5jZVZpZXc6
c2VsZl07Ci0gICAgCi0gICAgLy8gU3RvcCB0aGUgdGltZXJzCi0gICAgW3NlbGYgc3RvcFRpbWVy
c107Ci0gICAgCi0gICAgLy8gU3RvcCBub3RpZmljYXRpb25zIGFuZCBjYWxsYmFja3MuCi0gICAg
W3NlbGYgcmVtb3ZlV2luZG93T2JzZXJ2ZXJzXTsKLSAgICAKLSAgICBbc2VsZiBkZXN0cm95UGx1
Z2luXTsKLX0KLQotLSAoQk9PTClzaG91bGRDbGlwT3V0UGx1Z2luCi17Ci0gICAgTlNXaW5kb3cg
KndpbmRvdyA9IFtzZWxmIHdpbmRvd107Ci0gICAgcmV0dXJuICF3aW5kb3cgfHwgW3dpbmRvdyBp
c01pbmlhdHVyaXplZF0gfHwgW05TQXBwIGlzSGlkZGVuXSB8fCAhW3NlbGYgaXNEZXNjZW5kYW50
T2Y6W1tzZWxmIHdpbmRvd10gY29udGVudFZpZXddXSB8fCBbc2VsZiBpc0hpZGRlbk9ySGFzSGlk
ZGVuQW5jZXN0b3JdOwotfQotCi0tIChCT09MKXN1cHBvcnRzU25hcHNob3R0aW5nCi17Ci0gICAg
cmV0dXJuIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBzdXBwb3J0c1NuYXBzaG90dGluZ107Ci19Ci0K
LS0gKHZvaWQpY2FjaGVTbmFwc2hvdAotewotICAgIE5TU2l6ZSBib3VuZHNTaXplID0gW3NlbGYg
Ym91bmRzXS5zaXplOwotICAgIGlmICghYm91bmRzU2l6ZS5oZWlnaHQgfHwgIWJvdW5kc1NpemUu
d2lkdGgpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gc25hcHNob3QgPSBhZG9wdE5TKFtb
TlNJbWFnZSBhbGxvY10gaW5pdFdpdGhTaXplOmJvdW5kc1NpemVdKTsKLSAgICAgICAgCi0gICAg
X3NuYXBzaG90dGluZyA9IFlFUzsKLSAgICBbc25hcHNob3QgbG9ja0ZvY3VzXTsKLSAgICBbc2Vs
ZiBkcmF3UmVjdDpbc2VsZiBib3VuZHNdXTsKLSAgICBbc25hcHNob3QgdW5sb2NrRm9jdXNdOwot
ICAgIF9zbmFwc2hvdHRpbmcgPSBOTzsKLSAgICAKLSAgICBfY2FjaGVkU25hcHNob3QgPSBXVEZN
b3ZlKHNuYXBzaG90KTsKLX0KLQotLSAodm9pZCljbGVhckNhY2hlZFNuYXBzaG90Ci17Ci0gICAg
X2NhY2hlZFNuYXBzaG90LmNsZWFyKCk7Ci19Ci0KLS0gKHZvaWQpdmlld1dpbGxNb3ZlVG9XaW5k
b3c6KE5TV2luZG93ICopbmV3V2luZG93Ci17Ci0gICAgLy8gV2UgbXVzdCByZW1vdmUgdGhlIHRy
YWNraW5nIHJlY3QgYmVmb3JlIHdlIG1vdmUgdG8gdGhlIG5ldyB3aW5kb3cuCi0gICAgLy8gT25j
ZSB3ZSBtb3ZlIHRvIHRoZSBuZXcgd2luZG93LCBpdCB3aWxsIGJlIHRvbyBsYXRlLgotICAgIFtz
ZWxmIHJlbW92ZVRyYWNraW5nUmVjdF07Ci0gICAgW3NlbGYgcmVtb3ZlV2luZG93T2JzZXJ2ZXJz
XTsKLSAgICAKLSAgICAvLyBXb3JrYXJvdW5kIGZvcjogPHJkYXI6Ly9wcm9ibGVtLzM4MjI4NzE+
IHJlc2lnbkZpcnN0UmVzcG9uZGVyIGlzIG5vdCBzZW50IHRvIGZpcnN0IHJlc3BvbmRlciB2aWV3
IHdoZW4gaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSB3aW5kb3cKLSAgICBbc2VsZiBzZXRIYXNGb2N1
czpOT107Ci0gICAgCi0gICAgaWYgKCFuZXdXaW5kb3cpIHsKLSAgICAgICAgaWYgKFtbc2VsZiB3
ZWJWaWV3XSBob3N0V2luZG93XSkgewotICAgICAgICAgICAgLy8gVmlldyB3aWxsIGJlIG1vdmVk
IG91dCBvZiB0aGUgYWN0dWFsIHdpbmRvdyBidXQgaXQgc3RpbGwgaGFzIGEgaG9zdCB3aW5kb3cu
Ci0gICAgICAgICAgICBbc2VsZiBzdG9wVGltZXJzXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIC8vIFZpZXcgd2lsbCBoYXZlIG5vIGFzc29jaWF0ZWQgd2luZG93cy4KLSAgICAgICAg
ICAgIFtzZWxmIHN0b3BdOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBTdG9wIG9ic2Vy
dmluZyBXZWJQcmVmZXJlbmNlc0NoYW5nZWRJbnRlcm5hbE5vdGlmaWNhdGlvbiAtLSB3ZSBvbmx5
IG5lZWQgdG8gb2JzZXJ2ZSB0aGlzIHdoZW4gaW5zdGFsbGVkIGluIHRoZSB2aWV3IGhpZXJhcmNo
eS4KLSAgICAgICAgICAgIC8vIFdoZW4gbm90IGluIHRoZSB2aWV3IGhpZXJhcmNoeSwgLXZpZXdX
aWxsTW92ZVRvV2luZG93OiBhbmQgLXZpZXdEaWRNb3ZlVG9XaW5kb3cgd2lsbCBzdGFydC9zdG9w
IHRoZSBwbHVnaW4gYXMgbmVlZGVkLgotICAgICAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRl
ciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6V2ViUHJlZmVyZW5jZXND
aGFuZ2VkSW50ZXJuYWxOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLS0gKHZvaWQpdmlld1dpbGxNb3ZlVG9TdXBlcnZpZXc6KE5TVmlldyAqKW5ld1N1cGVy
dmlldwotewotICAgIGlmICghbmV3U3VwZXJ2aWV3KSB7Ci0gICAgICAgIC8vIFN0b3AgdGhlIHBs
dWctaW4gd2hlbiBpdCBpcyByZW1vdmVkIGZyb20gaXRzIHN1cGVydmlldy4gIEl0IGlzIG5vdCBz
dWZmaWNpZW50IHRvIGRvIHRoaXMgaW4gLXZpZXdXaWxsTW92ZVRvV2luZG93Om5pbCwgYmVjYXVz
ZQotICAgICAgICAvLyB0aGUgV2ViVmlldyBtaWdodCBzdGlsbCBoYXMgYSBob3N0V2luZG93IGF0
IHRoYXQgcG9pbnQsIHdoaWNoIHByZXZlbnRzIHRoZSBwbHVnLWluIGZyb20gYmVpbmcgZGVzdHJv
eWVkLgotICAgICAgICAvLyBUaGVyZSBpcyBubyBuZWVkIHRvIHN0YXJ0IHRoZSBwbHVnLWluIHdo
ZW4gbW92aW5nIGludG8gYSBzdXBlcnZpZXcuICAtdmlld0RpZE1vdmVUb1dpbmRvdyB0YWtlcyBj
YXJlIG9mIHRoYXQuCi0gICAgICAgIFtzZWxmIHN0b3BdOwotICAgICAgICAKLSAgICAgICAgLy8g
U3RvcCBvYnNlcnZpbmcgV2ViUHJlZmVyZW5jZXNDaGFuZ2VkSW50ZXJuYWxOb3RpZmljYXRpb24g
LS0gd2Ugb25seSBuZWVkIHRvIG9ic2VydmUgdGhpcyB3aGVuIGluc3RhbGxlZCBpbiB0aGUgdmll
dyBoaWVyYXJjaHkuCi0gICAgICAgIC8vIFdoZW4gbm90IGluIHRoZSB2aWV3IGhpZXJhcmNoeSwg
LXZpZXdXaWxsTW92ZVRvV2luZG93OiBhbmQgLXZpZXdEaWRNb3ZlVG9XaW5kb3cgd2lsbCBzdGFy
dC9zdG9wIHRoZSBwbHVnaW4gYXMgbmVlZGVkLgotICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2Vu
dGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpXZWJQcmVmZXJlbmNl
c0NoYW5nZWRJbnRlcm5hbE5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKLSAgICB9Ci19Ci0KLS0g
KHZvaWQpdmlld0RpZE1vdmVUb1dpbmRvdwotewotICAgIFtzZWxmIHJlc2V0VHJhY2tpbmdSZWN0
XTsKLSAgICAKLSAgICBpZiAoW3NlbGYgd2luZG93XSkgewotICAgICAgICAvLyBXaGlsZSBpbiB0
aGUgdmlldyBoaWVyYXJjaHksIG9ic2VydmUgV2ViUHJlZmVyZW5jZXNDaGFuZ2VkSW50ZXJuYWxO
b3RpZmljYXRpb24gc28gdGhhdCB3ZSBjYW4gc3RhcnQvc3RvcCBkZXBlbmRpbmcKLSAgICAgICAg
Ly8gb24gd2hldGhlciBwbHVnaW5zIGFyZSBlbmFibGVkLgotICAgICAgICBbW05TTm90aWZpY2F0
aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcjpAc2VsZWN0b3IocHJl
ZmVyZW5jZXNIYXZlQ2hhbmdlZDopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWU6V2ViUHJlZmVyZW5jZXNDaGFuZ2VkSW50ZXJuYWxOb3Rp
ZmljYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9iamVjdDpuaWxdOwotCi0gICAgICAgIF9pc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQgPSBb
W1tzZWxmIHdlYlZpZXddIHByZWZlcmVuY2VzXSBwcml2YXRlQnJvd3NpbmdFbmFibGVkXTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIFZpZXcgbW92ZWQgdG8gYW4gYWN0dWFsIHdpbmRvdy4gU3RhcnQg
aXQgaWYgbm90IGFscmVhZHkgc3RhcnRlZC4KLSAgICAgICAgW3NlbGYgc3RhcnRdOwotCi0gICAg
ICAgIC8vIFN0YXJ0aW5nIHRoZSBwbHVnLWluIGNhbiByZXN1bHQgaW4gaXQgcmVtb3ZpbmcgaXRz
ZWxmIGZyb20gdGhlIHdpbmRvdyBzbyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlJ3JlIHN0aWxs
IGluCi0gICAgICAgIC8vIHBsYWNlIGJlZm9yZSBkb2luZyBhbnl0aGluZyB0aGF0IHJlcXVpcmVz
IGEgd2luZG93LgotICAgICAgICBpZiAoW3NlbGYgd2luZG93XSkgewotICAgICAgICAgICAgW3Nl
bGYgcmVzdGFydFRpbWVyc107Ci0gICAgICAgICAgICBbc2VsZiBhZGRXaW5kb3dPYnNlcnZlcnNd
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChbW3NlbGYgd2ViVmlld10gaG9zdFdpbmRvd10p
IHsKLSAgICAgICAgLy8gVmlldyBtb3ZlZCBvdXQgb2YgYW4gYWN0dWFsIHdpbmRvdywgYnV0IHN0
aWxsIGhhcyBhIGhvc3Qgd2luZG93LgotICAgICAgICAvLyBDYWxsIHNldFdpbmRvdyB0byBleHBs
aWNpdGx5ICJjbGlwIG91dCIgdGhlIHBsdWctaW4gZnJvbSBzaWdodC4KLSAgICAgICAgLy8gRklY
TUU6IEl0IHdvdWxkIGJlIG5pY2UgdG8gZG8gdGhpcyB3aGVyZSB3ZSBjYWxsIHN0b3BOdWxsRXZl
bnRzIGluIHZpZXdXaWxsTW92ZVRvV2luZG93LgotICAgICAgICBbc2VsZiB1cGRhdGVBbmRTZXRX
aW5kb3ddOwotICAgIH0KLX0KLQotLSAodm9pZCl2aWV3V2lsbE1vdmVUb0hvc3RXaW5kb3c6KE5T
V2luZG93ICopaG9zdFdpbmRvdwotewotICAgIGlmICghaG9zdFdpbmRvdyAmJiAhW3NlbGYgd2lu
ZG93XSkgewotICAgICAgICAvLyBWaWV3IHdpbGwgaGF2ZSBubyBhc3NvY2lhdGVkIHdpbmRvd3Mu
Ci0gICAgICAgIFtzZWxmIHN0b3BdOwotICAgICAgICAKLSAgICAgICAgLy8gUmVtb3ZlIFdlYlBy
ZWZlcmVuY2VzQ2hhbmdlZEludGVybmFsTm90aWZpY2F0aW9uIG9ic2VydmVyIC0tIHdlIHdpbGwg
b2JzZXJ2ZSBvbmNlIGFnYWluIHdoZW4gd2UgbW92ZSBiYWNrIGludG8gdGhlIHdpbmRvdwotICAg
ICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVy
OnNlbGYgbmFtZTpXZWJQcmVmZXJlbmNlc0NoYW5nZWRJbnRlcm5hbE5vdGlmaWNhdGlvbiBvYmpl
Y3Q6bmlsXTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpdmlld0RpZE1vdmVUb0hvc3RXaW5kb3cKLXsK
LSAgICBpZiAoW1tzZWxmIHdlYlZpZXddIGhvc3RXaW5kb3ddKSB7Ci0gICAgICAgIC8vIFZpZXcg
bm93IGhhcyBhbiBhc3NvY2lhdGVkIHdpbmRvdy4gU3RhcnQgaXQgaWYgbm90IGFscmVhZHkgc3Rh
cnRlZC4KLSAgICAgICAgW3NlbGYgc3RhcnRdOwotICAgIH0KLX0KLQotLy8gTUFSSzogTk9USUZJ
Q0FUSU9OUwotCi0tICh2b2lkKXdpbmRvd1dpbGxDbG9zZTooTlNOb3RpZmljYXRpb24gKilub3Rp
ZmljYXRpb24gCi17Ci0gICAgW3NlbGYgc3RvcF07IAotfSAKLQotLSAodm9pZCl3aW5kb3dCZWNh
bWVLZXk6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgW3NlbGYgc2VuZEFj
dGl2YXRlRXZlbnQ6WUVTXTsKLSAgICBbc2VsZiBpbnZhbGlkYXRlUGx1Z2luQ29udGVudFJlY3Q6
W3NlbGYgYm91bmRzXV07Ci0gICAgW3NlbGYgcmVzdGFydFRpbWVyc107Ci19Ci0KLS0gKHZvaWQp
d2luZG93UmVzaWduZWRLZXk6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAg
W3NlbGYgc2VuZEFjdGl2YXRlRXZlbnQ6Tk9dOwotICAgIFtzZWxmIGludmFsaWRhdGVQbHVnaW5D
b250ZW50UmVjdDpbc2VsZiBib3VuZHNdXTsKLSAgICBbc2VsZiByZXN0YXJ0VGltZXJzXTsKLX0K
LQotLSAodm9pZCl3aW5kb3dEaWRNaW5pYXR1cml6ZTooTlNOb3RpZmljYXRpb24gKilub3RpZmlj
YXRpb24KLXsKLSAgICBbc2VsZiBzdG9wVGltZXJzXTsKLX0KLQotLSAodm9pZCl3aW5kb3dEaWRE
ZW1pbmlhdHVyaXplOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIFtzZWxm
IHJlc3RhcnRUaW1lcnNdOwotfQotCi0tICh2b2lkKWxvZ2luV2luZG93RGlkU3dpdGNoRnJvbVVz
ZXI6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgW3NlbGYgc3RvcFRpbWVy
c107Ci19Ci0KLS0odm9pZClsb2dpbldpbmRvd0RpZFN3aXRjaFRvVXNlcjooTlNOb3RpZmljYXRp
b24gKilub3RpZmljYXRpb24KLXsKLSAgICBbc2VsZiByZXN0YXJ0VGltZXJzXTsKLX0KLQotLSAo
dm9pZClwcmVmZXJlbmNlc0hhdmVDaGFuZ2VkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlv
bgotewotICAgIFdlYlByZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9IFtbc2VsZiB3ZWJWaWV3XSBw
cmVmZXJlbmNlc107Ci0KLSAgICBpZiAoW25vdGlmaWNhdGlvbiBvYmplY3RdICE9IHByZWZlcmVu
Y2VzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQk9PTCBhcmVQbHVnSW5zRW5hYmxlZCA9
IFtwcmVmZXJlbmNlcyBhcmVQbHVnSW5zRW5hYmxlZF07Ci0gICAgaWYgKF9pc1N0YXJ0ZWQgIT0g
YXJlUGx1Z0luc0VuYWJsZWQpIHsKLSAgICAgICAgaWYgKGFyZVBsdWdJbnNFbmFibGVkKSB7Ci0g
ICAgICAgICAgICBpZiAoW3NlbGYgY3VycmVudFdpbmRvd10pIHsKLSAgICAgICAgICAgICAgICBb
c2VsZiBzdGFydF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBbc2VsZiBzdG9wXTsKLSAgICAgICAgICAgIFtzZWxmIGludmFsaWRhdGVQbHVnaW5Db250ZW50
UmVjdDpbc2VsZiBib3VuZHNdXTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBCT09MIGlz
UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCA9IFtwcmVmZXJlbmNlcyBwcml2YXRlQnJvd3NpbmdFbmFi
bGVkXTsKLSAgICBpZiAoaXNQcml2YXRlQnJvd3NpbmdFbmFibGVkICE9IF9pc1ByaXZhdGVCcm93
c2luZ0VuYWJsZWQpIHsKLSAgICAgICAgX2lzUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCA9IGlzUHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZDsKLSAgICAgICAgW3NlbGYgcHJpdmF0ZUJyb3dzaW5nTW9kZURp
ZENoYW5nZV07Ci0gICAgfQotfQotCi1BTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19C
RUdJTgotLSAodm9pZClyZW5ld0dTdGF0ZQotQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElP
TlNfRU5ECi17Ci0gICAgW3N1cGVyIHJlbmV3R1N0YXRlXTsKLSAgICAKLSAgICAvLyAtcmVuZXdH
U3RhdGUgaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSB2aWV3J3MgZ2VvbWV0cnkgY2hhbmdlcy4gIEl0
J3MgYSBsaXR0bGUgaGFja3kgdG8gb3ZlcnJpZGUgdGhpcyBtZXRob2QsIGJ1dAotICAgIC8vIG11
Y2ggc2FmZXIgdGhhbiB3YWxraW5nIHVwIHRoZSB2aWV3IGhpZXJhcmNoeSBhbmQgb2JzZXJ2aW5n
IGZyYW1lL2JvdW5kcyBjaGFuZ2VkIG5vdGlmaWNhdGlvbnMsIHNpbmNlIHlvdSBkb24ndAotICAg
IC8vIGhhdmUgdG8gdHJhY2sgc3Vic2VxdWVudCBjaGFuZ2VzIHRvIHRoZSB2aWV3IGhpZXJhcmNo
eSBhbmQgYWRkL3JlbW92ZSBub3RpZmljYXRpb24gb2JzZXJ2ZXJzLgotICAgIC8vIE5TT3BlbkdM
VmlldyB1c2VzIHRoZSBleGFjdCBzYW1lIHRlY2huaXF1ZSB0byByZXNoYXBlIGl0cyBPcGVuR0wg
c3VyZmFjZS4KLSAgICAKLSAgICAvLyBBbGwgb2YgdGhlIHdvcmsgdGhpcyBtZXRob2QgZG9lcyBt
YXkgc2FmZWx5IGJlIHNraXBwZWQgaWYgdGhlIHZpZXcgaXMgbm90IGluIGEgd2luZG93LiAgV2hl
biB0aGUgdmlldwotICAgIC8vIGlzIG1vdmVkIGJhY2sgaW50byBhIHdpbmRvdywgZXZlcnl0aGlu
ZyBzaG91bGQgYmUgc2V0IHVwIGNvcnJlY3RseS4KLSAgICBpZiAoIVtzZWxmIHdpbmRvd10pCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBbc2VsZiB1cGRhdGVBbmRTZXRXaW5kb3ddOwotICAg
IAotICAgIFtzZWxmIHJlc2V0VHJhY2tpbmdSZWN0XTsKLSAgICAKLSAgICAvLyBDaGVjayB0byBz
ZWUgaWYgdGhlIHBsdWdpbiB2aWV3IGlzIGNvbXBsZXRlbHkgb2JzY3VyZWQgKHNjcm9sbGVkIG91
dCBvZiB2aWV3LCBmb3IgZXhhbXBsZSkuCi0gICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMs
IHdlIHNlbmQgbnVsbCBldmVudHMgYXQgYSBsb3dlciByYXRlIHRvIHBsdWdpbnMgd2hpY2ggYXJl
IG9ic2N1cmVkLgotICAgIEJPT0wgb2xkSXNPYnNjdXJlZCA9IF9pc0NvbXBsZXRlbHlPYnNjdXJl
ZDsKLSAgICBfaXNDb21wbGV0ZWx5T2JzY3VyZWQgPSBOU0lzRW1wdHlSZWN0KFtzZWxmIHZpc2li
bGVSZWN0XSk7Ci0gICAgaWYgKF9pc0NvbXBsZXRlbHlPYnNjdXJlZCAhPSBvbGRJc09ic2N1cmVk
KQotICAgICAgICBbc2VsZiByZXN0YXJ0VGltZXJzXTsKLX0KLQotLSAoQk9PTCliZWNvbWVGaXJz
dFJlc3BvbmRlcgotewotICAgIFtzZWxmIHNldEhhc0ZvY3VzOllFU107Ci0gICAgcmV0dXJuIFlF
UzsKLX0KLQotLSAoQk9PTClyZXNpZ25GaXJzdFJlc3BvbmRlcgotewotICAgIFtzZWxmIHNldEhh
c0ZvY3VzOk5PXTsgICAgCi0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAoV2ViRGF0YVNvdXJjZSAq
KWRhdGFTb3VyY2UKLXsKLSAgICByZXR1cm4gW1tzZWxmIHdlYkZyYW1lXSBfZGF0YVNvdXJjZV07
Ci19Ci0KLS0gKFdlYkZyYW1lICopd2ViRnJhbWUKLXsKLSAgICByZXR1cm4ga2l0KF9lbGVtZW50
LT5kb2N1bWVudCgpLmZyYW1lKCkpOwotfQotCi0tIChXZWJWaWV3ICopd2ViVmlldwotewotICAg
IHJldHVybiBbW3NlbGYgd2ViRnJhbWVdIHdlYlZpZXddOwotfQotCi0tIChOU1dpbmRvdyAqKWN1
cnJlbnRXaW5kb3cKLXsKLSAgICByZXR1cm4gW3NlbGYgd2luZG93XSA/IFtzZWxmIHdpbmRvd10g
OiBbW3NlbGYgd2ViVmlld10gaG9zdFdpbmRvd107Ci19Ci0KLS0gKE5ha2VkUHRyPFdlYkNvcmU6
OkhUTUxQbHVnSW5FbGVtZW50PillbGVtZW50Ci17Ci0gICAgcmV0dXJuIF9lbGVtZW50LmdldCgp
OwotfQotCi0tICh2b2lkKWN1dDooaWQpc2VuZGVyCi17Ci0gICAgW3NlbGYgc2VuZE1vZGlmaWVy
RXZlbnRXaXRoS2V5Q29kZTo3IGNoYXJhY3RlcjoneCddOwotfQotCi0tICh2b2lkKWNvcHk6KGlk
KXNlbmRlcgotewotICAgIFtzZWxmIHNlbmRNb2RpZmllckV2ZW50V2l0aEtleUNvZGU6OCBjaGFy
YWN0ZXI6J2MnXTsKLX0KLQotLSAodm9pZClwYXN0ZTooaWQpc2VuZGVyCi17Ci0gICAgW3NlbGYg
c2VuZE1vZGlmaWVyRXZlbnRXaXRoS2V5Q29kZTo5IGNoYXJhY3RlcjondiddOwotfQotCi0tICh2
b2lkKXNlbGVjdEFsbDooaWQpc2VuZGVyCi17Ci0gICAgW3NlbGYgc2VuZE1vZGlmaWVyRXZlbnRX
aXRoS2V5Q29kZTowIGNoYXJhY3RlcjonYSddOwotfQotCi0vLyBBcHBLaXQgZG9lc24ndCBjYWxs
IG1vdXNlRG93biBvciBtb3VzZVVwIG9uIHJpZ2h0LWNsaWNrLiBTaW11bGF0ZSBjb250cm9sLWNs
aWNrCi0vLyBtb3VzZURvd24gYW5kIG1vdXNlVXAgc28gcGx1Zy1pbnMgZ2V0IHRoZSByaWdodC1j
bGljayBldmVudCBhcyB0aGV5IGRvIGluIENhcmJvbiAoMzEyNTc0MykuCi0tICh2b2lkKXJpZ2h0
TW91c2VEb3duOihOU0V2ZW50ICopdGhlRXZlbnQKLXsKLSAgICBbc2VsZiBtb3VzZURvd246dGhl
RXZlbnRdOwotfQotCi0tICh2b2lkKXJpZ2h0TW91c2VVcDooTlNFdmVudCAqKXRoZUV2ZW50Ci17
Ci0gICAgW3NlbGYgbW91c2VVcDp0aGVFdmVudF07Ci19Ci0KLQotLSAoQk9PTCljb252ZXJ0RnJv
bVg6KGRvdWJsZSlzb3VyY2VYIGFuZFk6KGRvdWJsZSlzb3VyY2VZIHNwYWNlOihOUENvb3JkaW5h
dGVTcGFjZSlzb3VyY2VTcGFjZQotICAgICAgICAgICAgICAgICB0b1g6KGRvdWJsZSAqKWRlc3RY
IGFuZFk6KGRvdWJsZSAqKWRlc3RZIHNwYWNlOihOUENvb3JkaW5hdGVTcGFjZSlkZXN0U3BhY2UK
LXsKLSAgICAvLyBOb3RoaW5nIHRvIGRvCi0gICAgaWYgKHNvdXJjZVNwYWNlID09IGRlc3RTcGFj
ZSkgewotICAgICAgICBpZiAoZGVzdFgpCi0gICAgICAgICAgICAqZGVzdFggPSBzb3VyY2VYOwot
ICAgICAgICBpZiAoZGVzdFkpCi0gICAgICAgICAgICAqZGVzdFkgPSBzb3VyY2VZOwotICAgICAg
ICByZXR1cm4gWUVTOwotICAgIH0KLSAgICAKLSAgICBOU1BvaW50IHNvdXJjZVBvaW50ID0gTlNN
YWtlUG9pbnQoc291cmNlWCwgc291cmNlWSk7Ci0gICAgCi0gICAgTlNQb2ludCBzb3VyY2VQb2lu
dEluU2NyZWVuU3BhY2U7Ci0gICAgCi0gICAgLy8gRmlyc3QgY29udmVydCB0byBzY3JlZW4gc3Bh
Y2UKLSAgICBzd2l0Y2ggKHNvdXJjZVNwYWNlKSB7Ci0gICAgICAgIGNhc2UgTlBDb29yZGluYXRl
U3BhY2VQbHVnaW46Ci0gICAgICAgICAgICBzb3VyY2VQb2ludEluU2NyZWVuU3BhY2UgPSBbc2Vs
ZiBjb252ZXJ0UG9pbnQ6c291cmNlUG9pbnQgdG9WaWV3Om5pbF07Ci0gICAgICAgICAgICBBTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgICAgICAgICAgc291cmNlUG9pbnRJ
blNjcmVlblNwYWNlID0gW1tzZWxmIGN1cnJlbnRXaW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46
c291cmNlUG9pbnRJblNjcmVlblNwYWNlXTsKLSAgICAgICAgICAgIEFMTE9XX0RFUFJFQ0FURURf
REVDTEFSQVRJT05TX0VORAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBOUENvb3JkaW5hdGVTcGFjZVdpbmRvdzoKLSAgICAgICAgICAgIEFMTE9XX0RFUFJF
Q0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgICAgICAgICBzb3VyY2VQb2ludEluU2NyZWVu
U3BhY2UgPSBbW3NlbGYgY3VycmVudFdpbmRvd10gY29udmVydEJhc2VUb1NjcmVlbjpzb3VyY2VQ
b2ludF07Ci0gICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTlBDb29yZGluYXRl
U3BhY2VGbGlwcGVkV2luZG93OgotICAgICAgICAgICAgc291cmNlUG9pbnQueSA9IFtbc2VsZiBj
dXJyZW50V2luZG93XSBmcmFtZV0uc2l6ZS5oZWlnaHQgLSBzb3VyY2VQb2ludC55OwotICAgICAg
ICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICAgICAgICAgIHNv
dXJjZVBvaW50SW5TY3JlZW5TcGFjZSA9IFtbc2VsZiBjdXJyZW50V2luZG93XSBjb252ZXJ0QmFz
ZVRvU2NyZWVuOnNvdXJjZVBvaW50XTsKLSAgICAgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVD
TEFSQVRJT05TX0VORAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBOUENvb3JkaW5hdGVTcGFjZVNjcmVlbjoKLSAgICAgICAgICAgIHNvdXJjZVBvaW50SW5T
Y3JlZW5TcGFjZSA9IHNvdXJjZVBvaW50OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBOUENvb3JkaW5hdGVTcGFjZUZsaXBwZWRTY3JlZW46Ci0gICAgICAg
ICAgICBzb3VyY2VQb2ludC55ID0gWyhOU1NjcmVlbiAqKVtbTlNTY3JlZW4gc2NyZWVuc10gb2Jq
ZWN0QXRJbmRleDowXSBmcmFtZV0uc2l6ZS5oZWlnaHQgLSBzb3VyY2VQb2ludC55OwotICAgICAg
ICAgICAgc291cmNlUG9pbnRJblNjcmVlblNwYWNlID0gc291cmNlUG9pbnQ7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAg
ICB9Ci0gICAgCi0gICAgTlNQb2ludCBkZXN0UG9pbnQ7Ci0gICAgCi0gICAgLy8gVGhlbiBjb252
ZXJ0IGJhY2sgdG8gdGhlIGRlc3RpbmF0aW9uIHNwYWNlCi0gICAgc3dpdGNoIChkZXN0U3BhY2Up
IHsKLSAgICAgICAgY2FzZSBOUENvb3JkaW5hdGVTcGFjZVBsdWdpbjoKLSAgICAgICAgICAgIEFM
TE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgICAgICAgICBkZXN0UG9pbnQg
PSBbW3NlbGYgY3VycmVudFdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTpzb3VyY2VQb2ludElu
U2NyZWVuU3BhY2VdOwotICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNf
RU5ECi0gICAgICAgICAgICBkZXN0UG9pbnQgPSBbc2VsZiBjb252ZXJ0UG9pbnQ6ZGVzdFBvaW50
IGZyb21WaWV3Om5pbF07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIE5QQ29vcmRpbmF0ZVNwYWNlV2luZG93OgotICAgICAgICAgICAgQUxMT1dfREVQUkVD
QVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICAgICAgICAgIGRlc3RQb2ludCA9IFtbc2VsZiBj
dXJyZW50V2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOnNvdXJjZVBvaW50SW5TY3JlZW5TcGFj
ZV07Ci0gICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTlBDb29yZGluYXRlU3Bh
Y2VGbGlwcGVkV2luZG93OgotICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElP
TlNfQkVHSU4KLSAgICAgICAgICAgIGRlc3RQb2ludCA9IFtbc2VsZiBjdXJyZW50V2luZG93XSBj
b252ZXJ0U2NyZWVuVG9CYXNlOnNvdXJjZVBvaW50SW5TY3JlZW5TcGFjZV07Ci0gICAgICAgICAg
ICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLSAgICAgICAgICAgIGRlc3RQb2lu
dC55ID0gW1tzZWxmIGN1cnJlbnRXaW5kb3ddIGZyYW1lXS5zaXplLmhlaWdodCAtIGRlc3RQb2lu
dC55OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBOUENv
b3JkaW5hdGVTcGFjZVNjcmVlbjoKLSAgICAgICAgICAgIGRlc3RQb2ludCA9IHNvdXJjZVBvaW50
SW5TY3JlZW5TcGFjZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgTlBDb29yZGluYXRlU3BhY2VGbGlwcGVkU2NyZWVuOgotICAgICAgICAgICAgZGVzdFBv
aW50ID0gc291cmNlUG9pbnRJblNjcmVlblNwYWNlOwotICAgICAgICAgICAgZGVzdFBvaW50Lnkg
PSBbKE5TU2NyZWVuICopW1tOU1NjcmVlbiBzY3JlZW5zXSBvYmplY3RBdEluZGV4OjBdIGZyYW1l
XS5zaXplLmhlaWdodCAtIGRlc3RQb2ludC55OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9
Ci0gICAgCi0gICAgaWYgKGRlc3RYKQotICAgICAgICAqZGVzdFggPSBkZXN0UG9pbnQueDsKLSAg
ICBpZiAoZGVzdFkpCi0gICAgICAgICpkZXN0WSA9IGRlc3RQb2ludC55OwotICAgIAotICAgIHJl
dHVybiBUUlVFOwotfQotCi0KLS0gKHZvaWQpaW52YWxpZGF0ZVBsdWdpbkNvbnRlbnRSZWN0OihO
U1JlY3QpcmVjdAotewotICAgIGF1dG8qIHJlbmRlcmVyID0gX2VsZW1lbnQtPnJlbmRlcmVyKCk7
Ci0gICAgaWYgKCFpczxSZW5kZXJFbWJlZGRlZE9iamVjdD4ocmVuZGVyZXIpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgYXV0byYgb2JqZWN0ID0gZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRPYmplY3Q+
KCpyZW5kZXJlcik7Ci0gICAgSW50UmVjdCBjb250ZW50UmVjdChyZWN0KTsKLSAgICBjb250ZW50
UmVjdC5tb3ZlKG9iamVjdC5ib3JkZXJMZWZ0KCkgKyBvYmplY3QucGFkZGluZ0xlZnQoKSwgb2Jq
ZWN0LmJvcmRlclRvcCgpICsgb2JqZWN0LnBhZGRpbmdUb3AoKSk7Ci0gICAgb2JqZWN0LnJlcGFp
bnRSZWN0YW5nbGUoY29udGVudFJlY3QpOwotfQotCi0tIChOU1JlY3QpYWN0dWFsVmlzaWJsZVJl
Y3RJbldpbmRvdwotewotICAgIGF1dG8qIHJlbmRlcmVyID0gX2VsZW1lbnQtPnJlbmRlcmVyKCk7
Ci0gICAgaWYgKCFpczxSZW5kZXJFbWJlZGRlZE9iamVjdD4ocmVuZGVyZXIpKQotICAgICAgICBy
ZXR1cm4gTlNaZXJvUmVjdDsKLSAgICBhdXRvJiBvYmplY3QgPSBkb3duY2FzdDxSZW5kZXJFbWJl
ZGRlZE9iamVjdD4oKnJlbmRlcmVyKTsKLSAgICBhdXRvIHdpZGdldFJlY3QgPSBvYmplY3Qudmll
dygpLmZyYW1lVmlldygpLmNvbnRlbnRzVG9XaW5kb3cob2JqZWN0LnBpeGVsU25hcHBlZEFic29s
dXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpKTsKLSAgICByZXR1cm4gaW50ZXJzZWN0aW9uKG9iamVj
dC53aW5kb3dDbGlwUmVjdCgpLCB3aWRnZXRSZWN0KTsKLX0KLQotLSAoQ0FMYXllciAqKXBsdWdp
bkxheWVyCi17Ci0gICAgLy8gVGhpcyBuZWVkcyB0byBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNz
ZXMuCi0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoQk9PTClnZXRGb3JtVmFsdWU6KE5TU3RyaW5n
ICoqKXZhbHVlCi17Ci0gICAgLy8gVGhpcyBuZWVkcyB0byBiZSBvdmVycmlkZGVuIGJ5IHN1YmNs
YXNzZXMuCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1AZW5kCi0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1ib29sIGdldEF1dGhlbnRpY2F0aW9uSW5mbyhjb25zdCBjaGFyKiBwcm90b2NvbFN0ciwg
Y29uc3QgY2hhciogaG9zdFN0ciwgaW50MzJfdCBwb3J0LCBjb25zdCBjaGFyKiBzY2hlbWVTdHIs
IGNvbnN0IGNoYXIqIHJlYWxtU3RyLCBDU3RyaW5nJiB1c2VybmFtZSwgQ1N0cmluZyYgcGFzc3dv
cmQpCi17Ci0gICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm90b2NvbFN0
ciwgImh0dHAiKSAmJiAhZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocHJvdG9jb2xTdHIs
ICJodHRwcyIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBOU1N0cmluZyAqaG9zdCA9
IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpob3N0U3RyXTsKLSAgICBpZiAoIWhvc3RT
dHIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBOU1N0cmluZyAqcHJvdG9jb2wg
PSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6cHJvdG9jb2xTdHJdOwotICAgIGlmICgh
cHJvdG9jb2wpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBOU1N0cmluZyAqcmVh
bG0gPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6cmVhbG1TdHJdOwotICAgIGlmICgh
cmVhbG0pCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgIAotICAgIE5T
U3RyaW5nICphdXRoZW50aWNhdGlvbk1ldGhvZCA9IE5TVVJMQXV0aGVudGljYXRpb25NZXRob2RE
ZWZhdWx0OwotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm90b2NvbFN0
ciwgImh0dHAiKSkgewotICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
c2NoZW1lU3RyLCAiYmFzaWMiKSkKLSAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uTWV0aG9kID0g
TlNVUkxBdXRoZW50aWNhdGlvbk1ldGhvZEhUVFBCYXNpYzsKLSAgICAgICAgZWxzZSBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc2NoZW1lU3RyLCAiZGlnZXN0IikpCi0gICAgICAg
ICAgICBhdXRoZW50aWNhdGlvbk1ldGhvZCA9IE5TVVJMQXV0aGVudGljYXRpb25NZXRob2RIVFRQ
RGlnZXN0OwotICAgIH0KLSAgICAKLSAgICBSZXRhaW5QdHI8TlNVUkxQcm90ZWN0aW9uU3BhY2U+
IHByb3RlY3Rpb25TcGFjZSA9IGFkb3B0TlMoW1tOU1VSTFByb3RlY3Rpb25TcGFjZSBhbGxvY10g
aW5pdFdpdGhIb3N0Omhvc3QgcG9ydDpwb3J0IHByb3RvY29sOnByb3RvY29sIHJlYWxtOnJlYWxt
IGF1dGhlbnRpY2F0aW9uTWV0aG9kOmF1dGhlbnRpY2F0aW9uTWV0aG9kXSk7Ci0gICAgCi0gICAg
TlNVUkxDcmVkZW50aWFsICpjcmVkZW50aWFsID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uTWFwOjpk
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFsU3RvcmFnZSgpLmdldChlbXB0eVN0cmlu
ZygpLCBQcm90ZWN0aW9uU3BhY2UocHJvdGVjdGlvblNwYWNlLmdldCgpKSkubnNDcmVkZW50aWFs
KCk7Ci0gICAgaWYgKCFjcmVkZW50aWFsKQotICAgICAgICBjcmVkZW50aWFsID0gW1tOU1VSTENy
ZWRlbnRpYWxTdG9yYWdlIHNoYXJlZENyZWRlbnRpYWxTdG9yYWdlXSBkZWZhdWx0Q3JlZGVudGlh
bEZvclByb3RlY3Rpb25TcGFjZTpwcm90ZWN0aW9uU3BhY2UuZ2V0KCldOwotICAgIGlmICghY3Jl
ZGVudGlhbCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAKLSAgICBpZiAoIVtjcmVkZW50aWFs
IGhhc1Bhc3N3b3JkXSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHVzZXJuYW1l
ID0gW1tjcmVkZW50aWFsIHVzZXJdIFVURjhTdHJpbmddOwotICAgIHBhc3N3b3JkID0gW1tjcmVk
ZW50aWFsIHBhc3N3b3JkXSBVVEY4U3RyaW5nXTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBzZW5kVXNlckNoYW5nZU5vdGlmaWNhdGlvbnMoKQotewotICAgIGF1dG8gY29uc29s
ZUNvbm5lY3Rpb25DaGFuZ2VOb3RpZnlQcm9jID0gW10oQ0dTTm90aWZpY2F0aW9uVHlwZSB0eXBl
LCBDR1NOb3RpZmljYXRpb25EYXRhLCBDR1NCeXRlQ291bnQsIENHU05vdGlmaWNhdGlvbkFyZykg
ewotICAgICAgICBOU1N0cmluZyAqbm90aWZpY2F0aW9uTmFtZSA9IG5pbDsKLSAgICAgICAgaWYg
KHR5cGUgPT0ga0NHU2Vzc2lvbkNvbnNvbGVDb25uZWN0KQotICAgICAgICAgICAgbm90aWZpY2F0
aW9uTmFtZSA9IExvZ2luV2luZG93RGlkU3dpdGNoVG9Vc2VyTm90aWZpY2F0aW9uOwotICAgICAg
ICBlbHNlIGlmICh0eXBlID09IGtDR1Nlc3Npb25Db25zb2xlRGlzY29ubmVjdCkKLSAgICAgICAg
ICAgIG5vdGlmaWNhdGlvbk5hbWUgPSBMb2dpbldpbmRvd0RpZFN3aXRjaEZyb21Vc2VyTm90aWZp
Y2F0aW9uOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBwb3N0Tm90aWZp
Y2F0aW9uTmFtZTpub3RpZmljYXRpb25OYW1lIG9iamVjdDpuaWxdOwotICAgIH07Ci0KLSAgICBD
R1NSZWdpc3Rlck5vdGlmeVByb2MoY29uc29sZUNvbm5lY3Rpb25DaGFuZ2VOb3RpZnlQcm9jLCBr
Q0dTZXNzaW9uQ29uc29sZUNvbm5lY3QsIG51bGxwdHIpOwotICAgIENHU1JlZ2lzdGVyTm90aWZ5
UHJvYyhjb25zb2xlQ29ubmVjdGlvbkNoYW5nZU5vdGlmeVByb2MsIGtDR1Nlc3Npb25Db25zb2xl
RGlzY29ubmVjdCwgbnVsbHB0cik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYkJhc2VQbHVnaW5QYWNrYWdlLmggYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYkJhc2VQbHVnaW5QYWNrYWdlLmgKaW5kZXggMmY0
N2ViZTA1NGU4YjAyNTc0ZGQxZjY3OTVlZWY1MjBkZTcwNmFlZi4uNWJkM2ZjNTMxMzVmYWQxYjBm
NmMxYWVkNjQ1NGZlNDkyNTI4ZmQwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvUGx1Z2lucy9XZWJCYXNlUGx1Z2luUGFja2FnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1BsdWdpbnMvV2ViQmFzZVBsdWdpblBhY2thZ2UuaApAQCAtMjksMTEgKzI5LDcgQEAK
ICNpbXBvcnQgPFdlYkNvcmUvUGx1Z2luRGF0YS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5o
PgogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0jaW1wb3J0IDxXZWJLaXRMZWdh
Y3kvbnBmdW5jdGlvbnMuaD4KLSNlbHNlCiB0eXBlZGVmIHZvaWQgKCpCUF9DcmVhdGVQbHVnaW5N
SU1FVHlwZXNQcmVmZXJlbmNlc0Z1bmNQdHIpKHZvaWQpOwotI2VuZGlmCiAKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQogI2ltcG9ydCA8V2ViQ29yZS9XQUtBcHBLaXRTdHVicy5oPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJCYXNlUGx1Z2luUGFja2Fn
ZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViQmFzZVBsdWdpblBhY2th
Z2UubW0KaW5kZXggZDcyNzkxZTk4MWRiNWIzNDE5NDRlYzU4MjJmMThjNjU5N2U3ZTU1MC4uOWRm
NGM0OTQ1OGUzOWNhZmVlZGFkNjFkZGU1MmU2ODVjY2UwMGYxZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJCYXNlUGx1Z2luUGFja2FnZS5tbQorKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYkJhc2VQbHVnaW5QYWNrYWdlLm1tCkBA
IC0zMCw3ICszMCw2IEBACiAKICNpbXBvcnQgIldlYktpdExvZ2dpbmcuaCIKICNpbXBvcnQgIldl
YktpdE5TU3RyaW5nRXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2Uu
aCIKICNpbXBvcnQgIldlYlBsdWdpblBhY2thZ2UuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luaXRpYWxpemVUaHJlYWRpbmcuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUpJVE9wZXJh
dGlvbnMuaD4KQEAgLTY3LDE3ICs2Niw3IEBACiAKICsgKFdlYkJhc2VQbHVnaW5QYWNrYWdlICop
cGx1Z2luV2l0aFBhdGg6KE5TU3RyaW5nICopcGx1Z2luUGF0aAogewotICAgIFJldGFpblB0cjxX
ZWJCYXNlUGx1Z2luUGFja2FnZT4gcGx1Z2luUGFja2FnZSA9IGFkb3B0TlMoW1tXZWJQbHVnaW5Q
YWNrYWdlIGFsbG9jXSBpbml0V2l0aFBhdGg6cGx1Z2luUGF0aF0pOwotCi0gICAgaWYgKCFwbHVn
aW5QYWNrYWdlKSB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIHBs
dWdpblBhY2thZ2UgPSBhZG9wdE5TKFtbV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlIGFsbG9jXSBp
bml0V2l0aFBhdGg6cGx1Z2luUGF0aF0pOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIG5pbDsKLSNl
bmRpZgotICAgIH0KLQotICAgIHJldHVybiBwbHVnaW5QYWNrYWdlLmF1dG9yZWxlYXNlKCk7Cisg
ICAgcmV0dXJuIGFkb3B0TlMoW1tXZWJQbHVnaW5QYWNrYWdlIGFsbG9jXSBpbml0V2l0aFBhdGg6
cGx1Z2luUGF0aF0pLmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKGlkKWluaXRXaXRoUGF0aDooTlNT
dHJpbmcgKilwbHVnaW5QYXRoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9Q
bHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YjQxYmNmYWE5ZGQ2NzhjMDA4YjhhNjFlYWEzM2JlYmU3
NWNjMDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxl
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRI
YW5kbGVyX2gKLSNkZWZpbmUgV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXJfaAotCi0jaW1w
b3J0ICJXZWJOZXRzY2FwZVBsdWdpblZpZXcuaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotCi1AY2xhc3MgTlNFdmVudDsKLUBjbGFzcyBXZWJOZXRzY2FwZVBsdWdpblZpZXc7
Ci0KLWNsYXNzIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyPiBjcmVh
dGUoV2ViTmV0c2NhcGVQbHVnaW5WaWV3ICopOwotICAgIHZpcnR1YWwgfldlYk5ldHNjYXBlUGx1
Z2luRXZlbnRIYW5kbGVyKCkgeyB9Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KENH
Q29udGV4dFJlZiwgY29uc3QgTlNSZWN0JikgPSAwOwotICAgIAotICAgIHZpcnR1YWwgdm9pZCBt
b3VzZURvd24oTlNFdmVudCAqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlRHJhZ2dlZChO
U0V2ZW50ICopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VFbnRlcmVkKE5TRXZlbnQgKikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBtb3VzZUV4aXRlZChOU0V2ZW50ICopID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgbW91c2VNb3ZlZChOU0V2ZW50ICopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
bW91c2VVcChOU0V2ZW50ICopID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsV2hlZWwoTlNF
dmVudCAqKSA9IDA7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGtleURvd24oTlNFdmVudCAqKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGtleVVwKE5TRXZlbnQgKikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBmbGFnc0NoYW5nZWQoTlNFdmVudCAqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bnRo
ZXRpY0tleURvd25XaXRoQ29tbWFuZE1vZGlmaWVyKGludCBrZXlDb2RlLCBjaGFyIGNoYXJhY3Rl
cikgPSAwOwotICAgIAotICAgIHZpcnR1YWwgdm9pZCBmb2N1c0NoYW5nZWQoYm9vbCBoYXNGb2N1
cykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCBoYXNGb2N1
cykgPSAwOwotICAgIAotICAgIHZpcnR1YWwgdm9pZCBzdGFydFRpbWVycyhib29sIHRocm90dGxl
VGltZXJzKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFRpbWVycygpIHsgfQotICAgIAotICAg
IC8vIFJldHVybnMgdGhlIHBsYXRmb3JtIHNwZWNpZmljIHdpbmRvdyB1c2VkIGluIE5QUF9TZXRX
aW5kb3cKLSAgICB2aXJ0dWFsIHZvaWQqIHBsYXRmb3JtV2luZG93KE5TV2luZG93ICopID0gMDsK
LSAgICAKLSAgICBib29sIGN1cnJlbnRFdmVudElzVXNlckdlc3R1cmUoKSBjb25zdCB7IHJldHVy
biBtX2N1cnJlbnRFdmVudElzVXNlckdlc3R1cmU7IH0KLQotcHJvdGVjdGVkOgotICAgIGV4cGxp
Y2l0IFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyKFdlYk5ldHNjYXBlUGx1Z2luVmlldyAq
cGx1Z2luVmlldykKLSAgICAgICAgOiBtX3BsdWdpblZpZXcocGx1Z2luVmlldykKLSAgICAgICAg
LCBtX2N1cnJlbnRFdmVudElzVXNlckdlc3R1cmUoZmFsc2UpCi0gICAgewotICAgIH0KLSAgICAK
LSAgICBXZWJOZXRzY2FwZVBsdWdpblZpZXcgKm1fcGx1Z2luVmlldzsKLSAgICBib29sIG1fY3Vy
cmVudEV2ZW50SXNVc2VyR2VzdHVyZTsKLX07Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKLQotI2VuZGlmIC8vIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyX2gK
LQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNj
YXBlUGx1Z2luRXZlbnRIYW5kbGVyLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lu
cy9XZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlci5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOGVjMWJmNzllZTMyYTJhYzFiYmNmN2EyMWU3M2U3ZTFlMDFkYjFkMy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyLm1tCisrKyAvZGV2
L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbXBvcnQg
IldlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyLmgiCi0KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0jaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpblZpZXcuaCIKLSNpbXBvcnQgIldlYk5l
dHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2EuaCIKLQotc3RkOjp1bmlxdWVfcHRyPFdlYk5l
dHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyPiBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlcjo6
Y3JlYXRlKFdlYk5ldHNjYXBlUGx1Z2luVmlldyAqcGx1Z2luVmlldykKLXsKLSAgICBzd2l0Y2gg
KFtwbHVnaW5WaWV3IGV2ZW50TW9kZWxdKSB7Ci0gICAgY2FzZSBOUEV2ZW50TW9kZWxDb2NvYToK
LSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8V2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXJD
b2NvYT4ocGx1Z2luVmlldyk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLX0KLQotI2VuZGlmIC8vIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hLmggYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVy
Q29jb2EuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJkOWM1ZDU4MjFmODVmNjVl
YmM4Zjc3N2VjNjU1MjI5ZDVlODlmNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBl
UGx1Z2luRXZlbnRIYW5kbGVyQ29jb2EuaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaWZuZGVmIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRI
YW5kbGVyQ29jb2FfaAotI2RlZmluZSBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29h
X2gKLQotI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9ucGFwaS5oPgotI2luY2x1ZGUgIldlYk5ldHNj
YXBlUGx1Z2luRXZlbnRIYW5kbGVyLmgiCi0KLWNsYXNzIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRI
YW5kbGVyQ29jb2EgOiBwdWJsaWMgV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXIgewotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFdlYk5ldHNjYXBlUGx1Z2lu
RXZlbnRIYW5kbGVyQ29jb2EoV2ViTmV0c2NhcGVQbHVnaW5WaWV3Kik7IAotCi0gICAgdmlydHVh
bCB2b2lkIGRyYXdSZWN0KENHQ29udGV4dFJlZiwgY29uc3QgTlNSZWN0Jik7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgbW91c2VEb3duKE5TRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VEcmFn
Z2VkKE5TRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VFbnRlcmVkKE5TRXZlbnQqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgbW91c2VFeGl0ZWQoTlNFdmVudCopOwotICAgIHZpcnR1YWwgdm9p
ZCBtb3VzZU1vdmVkKE5TRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VVcChOU0V2ZW50
Kik7Ci0gICAgdmlydHVhbCBib29sIHNjcm9sbFdoZWVsKE5TRXZlbnQqKTsKLSAgICAKLSAgICB2
aXJ0dWFsIHZvaWQga2V5RG93bihOU0V2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIGtleVVwKE5T
RXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZmxhZ3NDaGFuZ2VkKE5TRXZlbnQqKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc3ludGhldGljS2V5RG93bldpdGhDb21tYW5kTW9kaWZpZXIoaW50IGtleUNv
ZGUsIGNoYXIgY2hhcmFjdGVyKTsKLQotICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dGb2N1c0NoYW5n
ZWQoYm9vbCBoYXNGb2N1cyk7ICAgIAotICAgIHZpcnR1YWwgdm9pZCBmb2N1c0NoYW5nZWQoYm9v
bCBoYXNGb2N1cyk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQqIHBsYXRmb3JtV2luZG93KE5TV2luZG93
Kik7Ci0gICAgCi1wcml2YXRlOgotICAgIGJvb2wgc2VuZE1vdXNlRXZlbnQoTlNFdmVudCosIE5Q
Q29jb2FFdmVudFR5cGUpOwotICAgIGJvb2wgc2VuZEtleUV2ZW50KE5TRXZlbnQqLCBOUENvY29h
RXZlbnRUeXBlKTsKLSAgICBib29sIHNlbmRFdmVudChOUENvY29hRXZlbnQqKTsKLX07Ci0KLSNl
bmRpZiAvL1dlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2FfaAotCi0jZW5kaWYgLy8g
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYS5tbSBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhh
bmRsZXJDb2NvYS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU3YjBlNWJiMGI0
ZmMyNDY3ZjgyZDY3MDM5ZTdiZjI5YjViYzgzNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5l
dHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2EubW0KKysrIC9kZXYvbnVsbApAQCAtMSwyMjUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2ltcG9ydCAiV2ViTmV0c2Nh
cGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYS5oIgotCi0jaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdp
blZpZXcuaCIKLSNpbXBvcnQgPHBhbC9zcGkvbWFjL0hJVG9vbGJveFNQSS5oPgotI2ltcG9ydCA8
cGFsL3NwaS9tYWMvTlNFdmVudFNQSS5oPgotI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgotCi1XZWJO
ZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hOjpXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFu
ZGxlckNvY29hKFdlYk5ldHNjYXBlUGx1Z2luVmlldyogcGx1Z2luVmlldykKLSAgICA6IFdlYk5l
dHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyKHBsdWdpblZpZXcpCi17Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgdm9pZCBpbml0aWFsaXplRXZlbnQoTlBDb2NvYUV2ZW50KiBldmVudCwgTlBDb2NvYUV2ZW50
VHlwZSB0eXBlKQotewotICAgIGV2ZW50LT50eXBlID0gdHlwZTsKLSAgICBldmVudC0+dmVyc2lv
biA9IDA7Ci19Ci0KLXZvaWQgV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYTo6ZHJh
d1JlY3QoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IE5TUmVjdCYgcmVjdCkKLXsKLSAgICBO
UENvY29hRXZlbnQgZXZlbnQ7Ci0gICAgCi0gICAgaW5pdGlhbGl6ZUV2ZW50KCZldmVudCwgTlBD
b2NvYUV2ZW50RHJhd1JlY3QpOwotICAgIGV2ZW50LmRhdGEuZHJhdy5jb250ZXh0ID0gY29udGV4
dDsKLSAgICBldmVudC5kYXRhLmRyYXcueCA9IHJlY3Qub3JpZ2luLng7Ci0gICAgZXZlbnQuZGF0
YS5kcmF3LnkgPSByZWN0Lm9yaWdpbi55OwotICAgIGV2ZW50LmRhdGEuZHJhdy53aWR0aCA9IHJl
Y3Quc2l6ZS53aWR0aDsKLSAgICBldmVudC5kYXRhLmRyYXcuaGVpZ2h0ID0gcmVjdC5zaXplLmhl
aWdodDsKLSAgICAKLSAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBwcm90ZWN0KGNvbnRleHQp
OwotICAgIAotICAgIHNlbmRFdmVudCgmZXZlbnQpOwotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1
Z2luRXZlbnRIYW5kbGVyQ29jb2E6Om1vdXNlRG93bihOU0V2ZW50ICpldmVudCkKLXsKLSAgICBz
ZW5kTW91c2VFdmVudChldmVudCwgTlBDb2NvYUV2ZW50TW91c2VEb3duKTsKLX0KLQotdm9pZCBX
ZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hOjptb3VzZURyYWdnZWQoTlNFdmVudCAq
ZXZlbnQpCi17Ci0gICAgc2VuZE1vdXNlRXZlbnQoZXZlbnQsIE5QQ29jb2FFdmVudE1vdXNlRHJh
Z2dlZCk7Ci19Ci0KLXZvaWQgV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYTo6bW91
c2VFbnRlcmVkKE5TRXZlbnQgKmV2ZW50KQotewotICAgIHNlbmRNb3VzZUV2ZW50KGV2ZW50LCBO
UENvY29hRXZlbnRNb3VzZUVudGVyZWQpOwotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luRXZl
bnRIYW5kbGVyQ29jb2E6Om1vdXNlRXhpdGVkKE5TRXZlbnQgKmV2ZW50KQotewotICAgIHNlbmRN
b3VzZUV2ZW50KGV2ZW50LCBOUENvY29hRXZlbnRNb3VzZUV4aXRlZCk7Ci19Ci0KLXZvaWQgV2Vi
TmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYTo6bW91c2VNb3ZlZChOU0V2ZW50ICpldmVu
dCkKLXsKLSAgICBzZW5kTW91c2VFdmVudChldmVudCwgTlBDb2NvYUV2ZW50TW91c2VNb3ZlZCk7
Ci19Ci0KLXZvaWQgV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYTo6bW91c2VVcChO
U0V2ZW50ICpldmVudCkKLXsKLSAgICBzZW5kTW91c2VFdmVudChldmVudCwgTlBDb2NvYUV2ZW50
TW91c2VVcCk7Ci19Ci0KLWJvb2wgV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYTo6
c2Nyb2xsV2hlZWwoTlNFdmVudCogZXZlbnQpCi17Ci0gICAgcmV0dXJuIHNlbmRNb3VzZUV2ZW50
KGV2ZW50LCBOUENvY29hRXZlbnRTY3JvbGxXaGVlbCk7Ci19Ci0KLWJvb2wgV2ViTmV0c2NhcGVQ
bHVnaW5FdmVudEhhbmRsZXJDb2NvYTo6c2VuZE1vdXNlRXZlbnQoTlNFdmVudCAqbnNFdmVudCwg
TlBDb2NvYUV2ZW50VHlwZSB0eXBlKQotewotICAgIE5QQ29jb2FFdmVudCBldmVudDsKLSAgICAK
LSAgICBOU1BvaW50IHBvaW50ID0gW21fcGx1Z2luVmlldyBjb252ZXJ0UG9pbnQ6W25zRXZlbnQg
bG9jYXRpb25JbldpbmRvd10gZnJvbVZpZXc6bmlsXTsKLSAgICAKLSAgICBpbnQgY2xpY2tDb3Vu
dDsKLSAgICBpZiAodHlwZSA9PSBOUENvY29hRXZlbnRNb3VzZUVudGVyZWQgfHwgdHlwZSA9PSBO
UENvY29hRXZlbnRNb3VzZUV4aXRlZCB8fCB0eXBlID09IE5QQ29jb2FFdmVudFNjcm9sbFdoZWVs
KQotICAgICAgICBjbGlja0NvdW50ID0gMDsKLSAgICBlbHNlCi0gICAgICAgIGNsaWNrQ291bnQg
PSBbbnNFdmVudCBjbGlja0NvdW50XTsKLSAgICAKLSAgICBpbml0aWFsaXplRXZlbnQoJmV2ZW50
LCB0eXBlKTsKLSAgICBldmVudC5kYXRhLm1vdXNlLm1vZGlmaWVyRmxhZ3MgPSBbbnNFdmVudCBt
b2RpZmllckZsYWdzXTsKLSAgICBldmVudC5kYXRhLm1vdXNlLmJ1dHRvbk51bWJlciA9IFtuc0V2
ZW50IGJ1dHRvbk51bWJlcl07Ci0gICAgZXZlbnQuZGF0YS5tb3VzZS5jbGlja0NvdW50ID0gY2xp
Y2tDb3VudDsKLSAgICBldmVudC5kYXRhLm1vdXNlLnBsdWdpblggPSBwb2ludC54OwotICAgIGV2
ZW50LmRhdGEubW91c2UucGx1Z2luWSA9IHBvaW50Lnk7Ci0gICAgZXZlbnQuZGF0YS5tb3VzZS5k
ZWx0YVggPSBbbnNFdmVudCBkZWx0YVhdOwotICAgIGV2ZW50LmRhdGEubW91c2UuZGVsdGFZID0g
W25zRXZlbnQgZGVsdGFZXTsKLSAgICBldmVudC5kYXRhLm1vdXNlLmRlbHRhWiA9IFtuc0V2ZW50
IGRlbHRhWl07Ci0gICAgCi0gICAgcmV0dXJuIHNlbmRFdmVudCgmZXZlbnQpOwotfQotCi12b2lk
IFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2E6OmtleURvd24oTlNFdmVudCAqZXZl
bnQpCi17Ci0gICAgYm9vbCByZXR2YWwgPSBzZW5kS2V5RXZlbnQoZXZlbnQsIE5QQ29jb2FFdmVu
dEtleURvd24pOwotICAgIFVOVVNFRF9QQVJBTShyZXR2YWwpOwotfQotCi12b2lkIFdlYk5ldHNj
YXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2E6OmtleVVwKE5TRXZlbnQgKmV2ZW50KQotewotICAg
IHNlbmRLZXlFdmVudChldmVudCwgTlBDb2NvYUV2ZW50S2V5VXApOwotfQotCi12b2lkIFdlYk5l
dHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2E6OmZsYWdzQ2hhbmdlZChOU0V2ZW50ICpuc0V2
ZW50KQotewotICAgIE5QQ29jb2FFdmVudCBldmVudDsKLSAgICAgICAgCi0gICAgaW5pdGlhbGl6
ZUV2ZW50KCZldmVudCwgTlBDb2NvYUV2ZW50RmxhZ3NDaGFuZ2VkKTsKLSAgICBldmVudC5kYXRh
LmtleS5tb2RpZmllckZsYWdzID0gW25zRXZlbnQgbW9kaWZpZXJGbGFnc107Ci0gICAgZXZlbnQu
ZGF0YS5rZXkua2V5Q29kZSA9IFtuc0V2ZW50IGtleUNvZGVdOwotICAgIGV2ZW50LmRhdGEua2V5
LmlzQVJlcGVhdCA9IGZhbHNlOwotICAgIGV2ZW50LmRhdGEua2V5LmNoYXJhY3RlcnMgPSAwOwot
ICAgIGV2ZW50LmRhdGEua2V5LmNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycyA9IDA7Ci0gICAg
Ci0gICAgc2VuZEV2ZW50KCZldmVudCk7Ci19Ci0KLXZvaWQgV2ViTmV0c2NhcGVQbHVnaW5FdmVu
dEhhbmRsZXJDb2NvYTo6c3ludGhldGljS2V5RG93bldpdGhDb21tYW5kTW9kaWZpZXIoaW50IGtl
eUNvZGUsIGNoYXIgY2hhcmFjdGVyKQotewotICAgIGNoYXIgbnVsbFRlcm1pbmF0ZWRTdHJpbmdb
XSA9IHsgY2hhcmFjdGVyLCAnXDAnIH07Ci0gICAgCi0gICAgUmV0YWluUHRyPE5TU3RyaW5nPiBj
aGFyYWN0ZXJzID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aFVURjhTdHJpbmc6
bnVsbFRlcm1pbmF0ZWRTdHJpbmddKTsKLSAgICAKLSAgICBOUENvY29hRXZlbnQgZXZlbnQ7Ci0g
ICAgaW5pdGlhbGl6ZUV2ZW50KCZldmVudCwgTlBDb2NvYUV2ZW50S2V5RG93bik7Ci0gICAgZXZl
bnQuZGF0YS5rZXkubW9kaWZpZXJGbGFncyA9IE5TRXZlbnRNb2RpZmllckZsYWdDb21tYW5kOwot
ICAgIGV2ZW50LmRhdGEua2V5LmtleUNvZGUgPSBrZXlDb2RlOwotICAgIGV2ZW50LmRhdGEua2V5
LmlzQVJlcGVhdCA9IGZhbHNlOwotICAgIGV2ZW50LmRhdGEua2V5LmNoYXJhY3RlcnMgPSAoTlBO
U1N0cmluZyAqKWNoYXJhY3RlcnMuZ2V0KCk7Ci0gICAgZXZlbnQuZGF0YS5rZXkuY2hhcmFjdGVy
c0lnbm9yaW5nTW9kaWZpZXJzID0gKE5QTlNTdHJpbmcgKiljaGFyYWN0ZXJzLmdldCgpOwotCi0g
ICAgc2VuZEV2ZW50KCZldmVudCk7Ci19Ci0KLWJvb2wgV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhh
bmRsZXJDb2NvYTo6c2VuZEtleUV2ZW50KE5TRXZlbnQqIG5zRXZlbnQsIE5QQ29jb2FFdmVudFR5
cGUgdHlwZSkKLXsKLSAgICBOUENvY29hRXZlbnQgZXZlbnQ7Ci0KLSAgICBpbml0aWFsaXplRXZl
bnQoJmV2ZW50LCB0eXBlKTsKLSAgICBldmVudC5kYXRhLmtleS5tb2RpZmllckZsYWdzID0gW25z
RXZlbnQgbW9kaWZpZXJGbGFnc107Ci0gICAgZXZlbnQuZGF0YS5rZXkua2V5Q29kZSA9IFtuc0V2
ZW50IGtleUNvZGVdOwotICAgIGV2ZW50LmRhdGEua2V5LmlzQVJlcGVhdCA9IFtuc0V2ZW50IGlz
QVJlcGVhdF07Ci0gICAgZXZlbnQuZGF0YS5rZXkuY2hhcmFjdGVycyA9IChOUE5TU3RyaW5nICop
W25zRXZlbnQgY2hhcmFjdGVyc107Ci0gICAgZXZlbnQuZGF0YS5rZXkuY2hhcmFjdGVyc0lnbm9y
aW5nTW9kaWZpZXJzID0gKE5QTlNTdHJpbmcgKilbbnNFdmVudCBjaGFyYWN0ZXJzSWdub3JpbmdN
b2RpZmllcnNdOwotICAgICAKLSAgICByZXR1cm4gc2VuZEV2ZW50KCZldmVudCk7Ci19Ci0KLXZv
aWQgV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYTo6d2luZG93Rm9jdXNDaGFuZ2Vk
KGJvb2wgaGFzRm9jdXMpCi17Ci0gICAgTlBDb2NvYUV2ZW50IGV2ZW50OwotICAgIAotICAgIGlu
aXRpYWxpemVFdmVudCgmZXZlbnQsIE5QQ29jb2FFdmVudFdpbmRvd0ZvY3VzQ2hhbmdlZCk7Ci0g
ICAgZXZlbnQuZGF0YS5mb2N1cy5oYXNGb2N1cyA9IGhhc0ZvY3VzOwotICAgIAotICAgIHNlbmRF
dmVudCgmZXZlbnQpOwotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29j
b2E6OmZvY3VzQ2hhbmdlZChib29sIGhhc0ZvY3VzKQotewotICAgIE5QQ29jb2FFdmVudCBldmVu
dDsKLQotICAgIGluaXRpYWxpemVFdmVudCgmZXZlbnQsIE5QQ29jb2FFdmVudEZvY3VzQ2hhbmdl
ZCk7Ci0gICAgZXZlbnQuZGF0YS5mb2N1cy5oYXNGb2N1cyA9IGhhc0ZvY3VzOwotICAgIAotICAg
IHNlbmRFdmVudCgmZXZlbnQpOwotfQotCi12b2lkKiBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFu
ZGxlckNvY29hOjpwbGF0Zm9ybVdpbmRvdyhOU1dpbmRvdyAqd2luZG93KQotewotICAgIHJldHVy
biAoX19icmlkZ2Ugdm9pZCopd2luZG93OwotfQotCi1ib29sIFdlYk5ldHNjYXBlUGx1Z2luRXZl
bnRIYW5kbGVyQ29jb2E6OnNlbmRFdmVudChOUENvY29hRXZlbnQqIGV2ZW50KQotewotICAgIHN3
aXRjaCAoZXZlbnQtPnR5cGUpIHsKLSAgICAgICAgY2FzZSBOUENvY29hRXZlbnRNb3VzZURvd246
Ci0gICAgICAgIGNhc2UgTlBDb2NvYUV2ZW50TW91c2VVcDoKLSAgICAgICAgY2FzZSBOUENvY29h
RXZlbnRNb3VzZURyYWdnZWQ6Ci0gICAgICAgIGNhc2UgTlBDb2NvYUV2ZW50S2V5RG93bjoKLSAg
ICAgICAgY2FzZSBOUENvY29hRXZlbnRLZXlVcDoKLSAgICAgICAgY2FzZSBOUENvY29hRXZlbnRG
bGFnc0NoYW5nZWQ6Ci0gICAgICAgIGNhc2UgTlBDb2NvYUV2ZW50U2Nyb2xsV2hlZWw6Ci0gICAg
ICAgICAgICBtX2N1cnJlbnRFdmVudElzVXNlckdlc3R1cmUgPSB0cnVlOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBtX2N1cnJlbnRFdmVudElzVXNl
ckdlc3R1cmUgPSBmYWxzZTsKLSAgICB9Ci0gICAgICAgICAgICAKLSAgICBib29sIHJlc3VsdCA9
IFttX3BsdWdpblZpZXcgc2VuZEV2ZW50OmV2ZW50IGlzRHJhd1JlY3Q6ZXZlbnQtPnR5cGUgPT0g
TlBDb2NvYUV2ZW50RHJhd1JlY3RdOwotICAgIAotICAgIG1fY3VycmVudEV2ZW50SXNVc2VyR2Vz
dHVyZSA9IGZhbHNlOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBkM2YzYzljZmE2ODUwNWY0ZjhkODUyZmY5MWFmNDk5NDNiMGE3ZDE2Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAot
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKLSNpbXBvcnQgIldlYkJhc2VQbHVnaW5QYWNrYWdlLmgiCi0KLQotQGludGVyZmFjZSBXZWJO
ZXRzY2FwZVBsdWdpblBhY2thZ2UgOiBXZWJCYXNlUGx1Z2luUGFja2FnZQotewotICAgIE5QUGx1
Z2luRnVuY3MgcGx1Z2luRnVuY3M7Ci0gICAgTlBOZXRzY2FwZUZ1bmNzIGJyb3dzZXJGdW5jczsK
LSAgICAKLSAgICB1aW50MTZfdCBwbHVnaW5TaXplOwotICAgIHVpbnQxNl90IHBsdWdpblZlcnNp
b247Ci0gICAgCi0gICAgUmVzRmlsZVJlZk51bSByZXNvdXJjZVJlZjsKLSAgICAKLSAgICBOUFBf
U2h1dGRvd25Qcm9jUHRyIE5QX1NodXRkb3duOwotCi0gICAgQk9PTCBpc0xvYWRlZDsKLSAgICBC
T09MIG5lZWRzVW5sb2FkOwotICAgIHVuc2lnbmVkIGludCBpbnN0YW5jZUNvdW50OwotICAgICAK
LSNpZiBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykKLSAgICBjcHVfdHlwZV90IHBsdWdpbkhvc3RB
cmNoaXRlY3R1cmU7Ci0jZW5kaWYKLX0KLQotLy8gTmV0c2NhcGUgcGx1Zy1pbiBwYWNrYWdlcyBt
dXN0IGJlIGV4cGxpY2l0bHkgb3BlbmVkIGFuZCBjbG9zZWQgYnkgZWFjaCBwbHVnLWluIGluc3Rh
bmNlLgotLy8gVGhpcyBpcyB0byBwcm90ZWN0IE5ldHNjYXBlIHBsdWctaW5zIGZyb20gYmVpbmcg
dW5sb2FkZWQgd2hpbGUgdGhleSBhcmUgaW4gdXNlLgotLSAodm9pZClvcGVuOwotLSAodm9pZClj
bG9zZTsKLQotLSAoTlBQbHVnaW5GdW5jcyAqKXBsdWdpbkZ1bmNzOwotLSAoTlBOZXRzY2FwZUZ1
bmNzICopYnJvd3NlckZ1bmNzOwotCi0tIChCT09MKXN1cHBvcnRzU25hcHNob3R0aW5nOwotCi0j
aWYgVVNFKFBMVUdJTl9IT1NUX1BST0NFU1MpCi0tIChjcHVfdHlwZV90KXBsdWdpbkhvc3RBcmNo
aXRlY3R1cmU7Ci0jZW5kaWYKLQotQGVuZAotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5tbSBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm1tCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTFmY2Y2N2QyY2RjZjQ1NWQ2MzRmOGE1ZWE0
ODQ3ZjdmYjhmYWRhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNr
YWdlLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMzY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotI2ltcG9ydCAiV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLmgi
Ci0KLSNpbXBvcnQgIldlYktpdExvZ2dpbmcuaCIKLSNpbXBvcnQgIldlYktpdE5TU3RyaW5nRXh0
cmFzLmgiCi0jaW1wb3J0ICJXZWJOU0ZpbGVNYW5hZ2VyRXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJO
U09iamVjdEV4dHJhcy5oIgotI2ltcG9ydCA8V2ViQ29yZS9ucHJ1bnRpbWVfaW1wbC5oPgotI2lt
cG9ydCA8d3RmL1JldGFpblB0ci5oPgotCi0jaWYgVVNFKFBMVUdJTl9IT1NUX1BST0NFU1MpCi0j
aW1wb3J0ICJOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7Ci0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLUBpbnRlcmZhY2Ug
V2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlIChJbnRlcm5hbCkKLS0gKHZvaWQpX3VubG9hZFdpdGhT
aHV0ZG93bjooQk9PTClzaHV0ZG93bjsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYk5ldHNj
YXBlUGx1Z2luUGFja2FnZQotCi0tIChSZXNGaWxlUmVmTnVtKW9wZW5SZXNvdXJjZUZpbGUKLXsK
LUFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgcmV0dXJuIENGQnVuZGxl
T3BlbkJ1bmRsZVJlc291cmNlTWFwKGNmQnVuZGxlLmdldCgpKTsKLUFMTE9XX0RFUFJFQ0FURURf
REVDTEFSQVRJT05TX0VORAotfQotCi0tICh2b2lkKWNsb3NlUmVzb3VyY2VGaWxlOihSZXNGaWxl
UmVmTnVtKXJlc1JlZgotewotQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAg
ICBDRkJ1bmRsZUNsb3NlQnVuZGxlUmVzb3VyY2VNYXAoY2ZCdW5kbGUuZ2V0KCksIHJlc1JlZik7
Ci1BTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLX0KLQotLSAoQk9PTClfaW5pdFdp
dGhQYXRoOihOU1N0cmluZyAqKXBsdWdpblBhdGgKLXsKLSAgICByZXNvdXJjZVJlZiA9IC0xOwot
ICAgIAotICAgIE9TVHlwZSB0eXBlID0gMDsKLQotICAgIGlmICghY2ZCdW5kbGUpCi0gICAgICAg
IHJldHVybiBOTzsKLQotICAgIENGQnVuZGxlR2V0UGFja2FnZUluZm8oY2ZCdW5kbGUuZ2V0KCks
ICZ0eXBlLCBOVUxMKTsKLSAgICAKLSAgICBpZiAodHlwZSAhPSBGT1VSX0NIQVJfQ09ERSgnQlJQ
TCcpKQotICAgICAgICByZXR1cm4gTk87Ci0KLSNpZiBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykK
LSAgICBhdXRvIGFyY2hzID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlFeGVjdXRhYmxlQXJjaGl0ZWN0
dXJlcyhjZkJ1bmRsZS5nZXQoKSkpOwotICAgIGlmIChbKF9fYnJpZGdlIE5TQXJyYXkgKilhcmNo
cy5nZXQoKSBjb250YWluc09iamVjdDpAKE5TQnVuZGxlRXhlY3V0YWJsZUFyY2hpdGVjdHVyZVg4
Nl82NCldKQotICAgICAgICBwbHVnaW5Ib3N0QXJjaGl0ZWN0dXJlID0gQ1BVX1RZUEVfWDg2XzY0
OwotICAgIGVsc2UgaWYgKFsoX19icmlkZ2UgTlNBcnJheSAqKWFyY2hzLmdldCgpIGNvbnRhaW5z
T2JqZWN0OkAoTlNCdW5kbGVFeGVjdXRhYmxlQXJjaGl0ZWN0dXJlSTM4NildKQotICAgICAgICBw
bHVnaW5Ib3N0QXJjaGl0ZWN0dXJlID0gQ1BVX1RZUEVfWDg2OwotICAgIGVsc2UKLSAgICAgICAg
cmV0dXJuIE5POwotI2Vsc2UKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGV4ZWN1dGFibGVVUkwg
PSBhZG9wdENGKENGQnVuZGxlQ29weUV4ZWN1dGFibGVVUkwoY2ZCdW5kbGUuZ2V0KCkpKTsKLSAg
ICBpZiAoIWV4ZWN1dGFibGVVUkwpCi0gICAgICAgIHJldHVybiBOTzsKLSAgICBOU0ZpbGVIYW5k
bGUgKmV4ZWN1dGFibGVGaWxlID0gW05TRmlsZUhhbmRsZSBmaWxlSGFuZGxlRm9yUmVhZGluZ0F0
UGF0aDpbKE5TVVJMICopZXhlY3V0YWJsZVVSTC5nZXQoKSBwYXRoXV07Ci0gICAgTlNEYXRhICpk
YXRhID0gW2V4ZWN1dGFibGVGaWxlIHJlYWREYXRhT2ZMZW5ndGg6NTEyXTsKLSAgICBbZXhlY3V0
YWJsZUZpbGUgY2xvc2VGaWxlXTsKLQotICAgICBpZiAoIVtzZWxmIGlzTmF0aXZlTGlicmFyeURh
dGE6ZGF0YV0pCi0gICAgICAgICByZXR1cm4gTk87Ci0jZW5kaWYKLQotICAgIGlmICghW3NlbGYg
Z2V0UGx1Z2luSW5mb0Zyb21QTGlzdHNdKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgCi0gICAg
cmV0dXJuIFlFUzsKLX0KLQotLSAoaWQpaW5pdFdpdGhQYXRoOihOU1N0cmluZyAqKXBsdWdpblBh
dGgKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoUGF0aDpwbHVnaW5QYXRoXSkp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgLy8gSW5pdGlhbGl6aW5nIGEgcGx1Z2lu
IHBhY2thZ2UgY2FuIGNhdXNlIGl0IHRvIGJlIGxvYWRlZC4gIElmIHRoZXJlIHdhcyBhbiBlcnJv
ciBpbml0aWFsaXppbmcgdGhlIHBsdWdpbiBwYWNrYWdlLAotICAgIC8vIGVuc3VyZSB0aGF0IGl0
IGlzIHVubG9hZGVkIGJlZm9yZSBkZWFsbG9jYXRpbmcgaXQgKFdlYkJhc2VQbHVnaW5QYWNrYWdl
IHJlcXVpcmVzICYgYXNzZXJ0cyB0aGlzKS4KLSAgICBpZiAoIVtzZWxmIF9pbml0V2l0aFBhdGg6
cGx1Z2luUGF0aF0pIHsKLSAgICAgICAgW3NlbGYgX3VubG9hZFdpdGhTaHV0ZG93bjpZRVNdOwot
ICAgICAgICBbc2VsZiByZWxlYXNlXTsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0gICAg
ICAgIAotICAgIHJldHVybiBzZWxmOwotfQotCi0jaWYgVVNFKFBMVUdJTl9IT1NUX1BST0NFU1Mp
Ci0KLS0gKGNwdV90eXBlX3QpcGx1Z2luSG9zdEFyY2hpdGVjdHVyZQotewotICAgIHJldHVybiBw
bHVnaW5Ib3N0QXJjaGl0ZWN0dXJlOwotfQotCi0tICh2b2lkKWNyZWF0ZVByb3BlcnR5TGlzdEZp
bGUKLXsKLSAgICBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpzaW5nbGV0b24oKS5jcmVhdGVQ
cm9wZXJ0eUxpc3RGaWxlKHBhdGgsIHBsdWdpbkhvc3RBcmNoaXRlY3R1cmUsIFtzZWxmIGJ1bmRs
ZUlkZW50aWZpZXJdKTsKLX0KLQotI2VuZGlmCi0KLS0gKHZvaWQpdW5sb2FkCi17Ci0gICAgW3Nl
bGYgX3VubG9hZFdpdGhTaHV0ZG93bjpZRVNdOwotfQotCi0tIChCT09MKV90cnlMb2FkCi17Ci0g
ICAgTlBfR2V0RW50cnlQb2ludHNGdW5jUHRyIE5QX0dldEVudHJ5UG9pbnRzID0gTlVMTDsKLSAg
ICBOUF9Jbml0aWFsaXplRnVuY1B0ciBOUF9Jbml0aWFsaXplID0gTlVMTDsKLSAgICBOUEVycm9y
IG5wRXJyOwotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIENGQWJzb2x1dGVUaW1lIHN0YXJ0ID0g
Q0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7Ci0gICAgQ0ZBYnNvbHV0ZVRpbWUgY3VycmVudFRp
bWU7Ci0gICAgQ0ZBYnNvbHV0ZVRpbWUgZHVyYXRpb247Ci0jZW5kaWYKLSAgICBMT0coUGx1Z2lu
cywgIiVmIExvYWQgdGltaW5nIHN0YXJ0ZWQgZm9yOiAlQCIsIHN0YXJ0LCAoTlNTdHJpbmcgKilb
c2VsZiBwbHVnaW5JbmZvXS5uYW1lKTsKLQotICAgIGlmIChpc0xvYWRlZCkKLSAgICAgICAgcmV0
dXJuIFlFUzsKLSAgICAKLSAgICBpZiAoIUNGQnVuZGxlTG9hZEV4ZWN1dGFibGUoY2ZCdW5kbGUu
Z2V0KCkpKQotICAgICAgICByZXR1cm4gTk87Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgIGN1cnJl
bnRUaW1lID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7Ci0gICAgZHVyYXRpb24gPSBjdXJy
ZW50VGltZSAtIHN0YXJ0OwotI2VuZGlmCi0gICAgTE9HKFBsdWdpbnMsICIlZiBDRkJ1bmRsZUxv
YWRFeGVjdXRhYmxlIHRvb2sgJWYgc2Vjb25kcyIsIGN1cnJlbnRUaW1lLCBkdXJhdGlvbik7Ci0g
ICAgaXNMb2FkZWQgPSBZRVM7Ci0KLSAgICBOUF9Jbml0aWFsaXplID0gKE5QX0luaXRpYWxpemVG
dW5jUHRyKUNGQnVuZGxlR2V0RnVuY3Rpb25Qb2ludGVyRm9yTmFtZShjZkJ1bmRsZS5nZXQoKSwg
Q0ZTVFIoIk5QX0luaXRpYWxpemUiKSk7Ci0gICAgTlBfR2V0RW50cnlQb2ludHMgPSAoTlBfR2V0
RW50cnlQb2ludHNGdW5jUHRyKUNGQnVuZGxlR2V0RnVuY3Rpb25Qb2ludGVyRm9yTmFtZShjZkJ1
bmRsZS5nZXQoKSwgQ0ZTVFIoIk5QX0dldEVudHJ5UG9pbnRzIikpOwotICAgIE5QX1NodXRkb3du
ID0gKE5QUF9TaHV0ZG93blByb2NQdHIpQ0ZCdW5kbGVHZXRGdW5jdGlvblBvaW50ZXJGb3JOYW1l
KGNmQnVuZGxlLmdldCgpLCBDRlNUUigiTlBfU2h1dGRvd24iKSk7Ci0gICAgaWYgKCFOUF9Jbml0
aWFsaXplIHx8ICFOUF9HZXRFbnRyeVBvaW50cyB8fCAhTlBfU2h1dGRvd24pCi0gICAgICAgIHJl
dHVybiBOTzsKLQotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAg
Ly8gUGx1Z2lucyAoYXQgbGVhc3QgUVQpIHJlcXVpcmUgdGhhdCB5b3UgY2FsbCBVc2VSZXNGaWxl
IG9uIHRoZSByZXNvdXJjZSBmaWxlIGJlZm9yZSBsb2FkaW5nIGl0LgotICAgIHJlc291cmNlUmVm
ID0gW3NlbGYgb3BlblJlc291cmNlRmlsZV07Ci0gICAgaWYgKHJlc291cmNlUmVmICE9IC0xKSB7
Ci0gICAgICAgIFVzZVJlc0ZpbGUocmVzb3VyY2VSZWYpOwotICAgIH0KLSAgICBBTExPV19ERVBS
RUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLQotICAgIGJyb3dzZXJGdW5jcy52ZXJzaW9uID0gTlBf
VkVSU0lPTl9NSU5PUjsKLSAgICBicm93c2VyRnVuY3Muc2l6ZSA9IHNpemVvZihOUE5ldHNjYXBl
RnVuY3MpOwotICAgIGJyb3dzZXJGdW5jcy5nZXR1cmwgPSBOUE5fR2V0VVJMOwotICAgIGJyb3dz
ZXJGdW5jcy5wb3N0dXJsID0gTlBOX1Bvc3RVUkw7Ci0gICAgYnJvd3NlckZ1bmNzLnJlcXVlc3Ry
ZWFkID0gTlBOX1JlcXVlc3RSZWFkOwotICAgIGJyb3dzZXJGdW5jcy5uZXdzdHJlYW0gPSBOUE5f
TmV3U3RyZWFtOwotICAgIGJyb3dzZXJGdW5jcy53cml0ZSA9IE5QTl9Xcml0ZTsKLSAgICBicm93
c2VyRnVuY3MuZGVzdHJveXN0cmVhbSA9IE5QTl9EZXN0cm95U3RyZWFtOwotICAgIGJyb3dzZXJG
dW5jcy5zdGF0dXMgPSBOUE5fU3RhdHVzOwotICAgIGJyb3dzZXJGdW5jcy51YWdlbnQgPSBOUE5f
VXNlckFnZW50OwotICAgIGJyb3dzZXJGdW5jcy5tZW1hbGxvYyA9IE5QTl9NZW1BbGxvYzsKLSAg
ICBicm93c2VyRnVuY3MubWVtZnJlZSA9IE5QTl9NZW1GcmVlOwotICAgIGJyb3dzZXJGdW5jcy5t
ZW1mbHVzaCA9IE5QTl9NZW1GbHVzaDsKLSAgICBicm93c2VyRnVuY3MucmVsb2FkcGx1Z2lucyA9
IE5QTl9SZWxvYWRQbHVnaW5zOwotICAgIGJyb3dzZXJGdW5jcy5nZXR1cmxub3RpZnkgPSBOUE5f
R2V0VVJMTm90aWZ5OwotICAgIGJyb3dzZXJGdW5jcy5wb3N0dXJsbm90aWZ5ID0gTlBOX1Bvc3RV
UkxOb3RpZnk7Ci0gICAgYnJvd3NlckZ1bmNzLmdldHZhbHVlID0gTlBOX0dldFZhbHVlOwotICAg
IGJyb3dzZXJGdW5jcy5zZXR2YWx1ZSA9IE5QTl9TZXRWYWx1ZTsKLSAgICBicm93c2VyRnVuY3Mu
aW52YWxpZGF0ZXJlY3QgPSBOUE5fSW52YWxpZGF0ZVJlY3Q7Ci0gICAgYnJvd3NlckZ1bmNzLmlu
dmFsaWRhdGVyZWdpb24gPSBOUE5fSW52YWxpZGF0ZVJlZ2lvbjsKLSAgICBicm93c2VyRnVuY3Mu
Zm9yY2VyZWRyYXcgPSBOUE5fRm9yY2VSZWRyYXc7Ci0gICAgYnJvd3NlckZ1bmNzLmdldEphdmFF
bnYgPSBOUE5fR2V0SmF2YUVudjsKLSAgICBicm93c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5f
R2V0SmF2YVBlZXI7Ci0gICAgYnJvd3NlckZ1bmNzLnB1c2hwb3B1cHNlbmFibGVkc3RhdGUgPSBO
UE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZTsKLSAgICBicm93c2VyRnVuY3MucG9wcG9wdXBzZW5h
YmxlZHN0YXRlID0gTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZTsKLSAgICBicm93c2VyRnVuY3Mu
cGx1Z2ludGhyZWFkYXN5bmNjYWxsID0gTlBOX1BsdWdpblRocmVhZEFzeW5jQ2FsbDsKLSAgICBi
cm93c2VyRnVuY3MuZ2V0dmFsdWVmb3J1cmwgPSBOUE5fR2V0VmFsdWVGb3JVUkw7Ci0gICAgYnJv
d3NlckZ1bmNzLnNldHZhbHVlZm9ydXJsID0gTlBOX1NldFZhbHVlRm9yVVJMOwotICAgIGJyb3dz
ZXJGdW5jcy5nZXRhdXRoZW50aWNhdGlvbmluZm8gPSBOUE5fR2V0QXV0aGVudGljYXRpb25JbmZv
OwotICAgIGJyb3dzZXJGdW5jcy5zY2hlZHVsZXRpbWVyID0gTlBOX1NjaGVkdWxlVGltZXI7Ci0g
ICAgYnJvd3NlckZ1bmNzLnVuc2NoZWR1bGV0aW1lciA9IE5QTl9VbnNjaGVkdWxlVGltZXI7Ci0g
ICAgYnJvd3NlckZ1bmNzLnBvcHVwY29udGV4dG1lbnUgPSBOUE5fUG9wVXBDb250ZXh0TWVudTsK
LSAgICBicm93c2VyRnVuY3MuY29udmVydHBvaW50ID0gTlBOX0NvbnZlcnRQb2ludDsKLQotICAg
IGJyb3dzZXJGdW5jcy5yZWxlYXNldmFyaWFudHZhbHVlID0gX05QTl9SZWxlYXNlVmFyaWFudFZh
bHVlOwotICAgIGJyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVyID0gX05QTl9HZXRTdHJp
bmdJZGVudGlmaWVyOwotICAgIGJyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVycyA9IF9O
UE5fR2V0U3RyaW5nSWRlbnRpZmllcnM7Ci0gICAgYnJvd3NlckZ1bmNzLmdldGludGlkZW50aWZp
ZXIgPSBfTlBOX0dldEludElkZW50aWZpZXI7Ci0gICAgYnJvd3NlckZ1bmNzLmlkZW50aWZpZXJp
c3N0cmluZyA9IF9OUE5fSWRlbnRpZmllcklzU3RyaW5nOwotICAgIGJyb3dzZXJGdW5jcy51dGY4
ZnJvbWlkZW50aWZpZXIgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcjsKLSAgICBicm93c2VyRnVu
Y3MuaW50ZnJvbWlkZW50aWZpZXIgPSBfTlBOX0ludEZyb21JZGVudGlmaWVyOwotICAgIGJyb3dz
ZXJGdW5jcy5jcmVhdGVvYmplY3QgPSBfTlBOX0NyZWF0ZU9iamVjdDsKLSAgICBicm93c2VyRnVu
Y3MucmV0YWlub2JqZWN0ID0gX05QTl9SZXRhaW5PYmplY3Q7Ci0gICAgYnJvd3NlckZ1bmNzLnJl
bGVhc2VvYmplY3QgPSBfTlBOX1JlbGVhc2VPYmplY3Q7Ci0gICAgYnJvd3NlckZ1bmNzLmhhc21l
dGhvZCA9IF9OUE5fSGFzTWV0aG9kOwotICAgIGJyb3dzZXJGdW5jcy5pbnZva2UgPSBfTlBOX0lu
dm9rZTsKLSAgICBicm93c2VyRnVuY3MuaW52b2tlRGVmYXVsdCA9IF9OUE5fSW52b2tlRGVmYXVs
dDsKLSAgICBicm93c2VyRnVuY3MuZXZhbHVhdGUgPSBfTlBOX0V2YWx1YXRlOwotICAgIGJyb3dz
ZXJGdW5jcy5oYXNwcm9wZXJ0eSA9IF9OUE5fSGFzUHJvcGVydHk7Ci0gICAgYnJvd3NlckZ1bmNz
LmdldHByb3BlcnR5ID0gX05QTl9HZXRQcm9wZXJ0eTsKLSAgICBicm93c2VyRnVuY3Muc2V0cHJv
cGVydHkgPSBfTlBOX1NldFByb3BlcnR5OwotICAgIGJyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0
eSA9IF9OUE5fUmVtb3ZlUHJvcGVydHk7Ci0gICAgYnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9
IF9OUE5fU2V0RXhjZXB0aW9uOwotICAgIGJyb3dzZXJGdW5jcy5lbnVtZXJhdGUgPSBfTlBOX0Vu
dW1lcmF0ZTsKLSAgICBicm93c2VyRnVuY3MuY29uc3RydWN0ID0gX05QTl9Db25zdHJ1Y3Q7Ci0K
LSNpZiAhTE9HX0RJU0FCTEVECi0gICAgQ0ZBYnNvbHV0ZVRpbWUgaW5pdGlhbGl6ZVN0YXJ0ID0g
Q0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7Ci0jZW5kaWYKLSAgICBMT0coUGx1Z2lucywgIiVm
IE5QX0luaXRpYWxpemUgdGltaW5nIHN0YXJ0ZWQiLCBpbml0aWFsaXplU3RhcnQpOwotICAgIG5w
RXJyID0gTlBfSW5pdGlhbGl6ZSgmYnJvd3NlckZ1bmNzKTsKLSAgICBpZiAobnBFcnIgIT0gTlBF
UlJfTk9fRVJST1IpCi0gICAgICAgIHJldHVybiBOTzsKLSNpZiAhTE9HX0RJU0FCTEVECi0gICAg
Y3VycmVudFRpbWUgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKTsKLSAgICBkdXJhdGlvbiA9
IGN1cnJlbnRUaW1lIC0gaW5pdGlhbGl6ZVN0YXJ0OwotI2VuZGlmCi0gICAgTE9HKFBsdWdpbnMs
ICIlZiBOUF9Jbml0aWFsaXplIHRvb2sgJWYgc2Vjb25kcyIsIGN1cnJlbnRUaW1lLCBkdXJhdGlv
bik7Ci0KLSAgICBwbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKE5QUGx1Z2luRnVuY3MpOwotCi0g
ICAgbnBFcnIgPSBOUF9HZXRFbnRyeVBvaW50cygmcGx1Z2luRnVuY3MpOwotICAgIGlmIChucEVy
ciAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgcmV0dXJuIE5POwotCi0gICAgcGx1Z2luU2l6
ZSA9IHBsdWdpbkZ1bmNzLnNpemU7Ci0gICAgcGx1Z2luVmVyc2lvbiA9IHBsdWdpbkZ1bmNzLnZl
cnNpb247Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgY3VycmVudFRpbWUgPSBDRkFic29sdXRl
VGltZUdldEN1cnJlbnQoKTsKLSAgICBkdXJhdGlvbiA9IGN1cnJlbnRUaW1lIC0gc3RhcnQ7Ci0j
ZW5kaWYKLSAgICBMT0coUGx1Z2lucywgIiVmIFRvdGFsIGxvYWQgdGltZTogJWYgc2Vjb25kcyIs
IGN1cnJlbnRUaW1lLCBkdXJhdGlvbik7Ci0KLSAgICByZXR1cm4gWUVTOwotfQotCi0tIChCT09M
KWxvYWQKLXsgICAgCi0gICAgaWYgKFtzZWxmIF90cnlMb2FkXSkKLSAgICAgICAgcmV0dXJuIFtz
dXBlciBsb2FkXTsKLQotICAgIFtzZWxmIF91bmxvYWRXaXRoU2h1dGRvd246Tk9dOwotICAgIHJl
dHVybiBOTzsKLX0KLQotLSAoTlBQbHVnaW5GdW5jcyAqKXBsdWdpbkZ1bmNzCi17Ci0gICAgcmV0
dXJuICZwbHVnaW5GdW5jczsKLX0KLQotLSAoTlBOZXRzY2FwZUZ1bmNzICopYnJvd3NlckZ1bmNz
Ci17Ci0gICAgcmV0dXJuICZicm93c2VyRnVuY3M7Ci19Ci0KLS0gKHZvaWQpd2FzUmVtb3ZlZEZy
b21QbHVnaW5EYXRhYmFzZTooV2ViUGx1Z2luRGF0YWJhc2UgKilkYXRhYmFzZQotewotICAgIFtz
dXBlciB3YXNSZW1vdmVkRnJvbVBsdWdpbkRhdGFiYXNlOmRhdGFiYXNlXTsKLSAgICAKLSAgICAv
LyBVbmxvYWQgd2hlbiByZW1vdmVkIGZyb20gZmluYWwgcGx1Zy1pbiBkYXRhYmFzZQotICAgIGlm
IChbcGx1Z2luRGF0YWJhc2VzIGNvdW50XSA9PSAwKQotICAgICAgICBbc2VsZiBfdW5sb2FkV2l0
aFNodXRkb3duOllFU107Ci19Ci0KLS0gKHZvaWQpb3BlbgotewotICAgIGluc3RhbmNlQ291bnQr
KzsKLSAgICAKLSAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYWxsIGluc3RhbmNlcyBjbG9z
ZSBhIHBsdWctaW4gcGFja2FnZSwgYnV0IGFub3RoZXIKLSAgICAvLyBpbnN0YW5jZSBvcGVucyB0
aGUgcGFja2FnZSBiZWZvcmUgaXQgaXMgdW5sb2FkZWQgKHdoaWNoIG9ubHkgaGFwcGVucyB3aGVu
Ci0gICAgLy8gdGhlIHBsdWctaW4gZGF0YWJhc2UgaXMgcmVmcmVzaGVkKQotICAgIG5lZWRzVW5s
b2FkID0gTk87Ci0gICAgCi0gICAgaWYgKCFpc0xvYWRlZCkgewotICAgICAgICAvLyBTaG91bGQg
bG9hZCB3aGVuIHRoZSBmaXJzdCBpbnN0YW5jZSBvcGVucyB0aGUgcGx1Zy1pbiBwYWNrYWdlCi0g
ICAgICAgIEFTU0VSVChpbnN0YW5jZUNvdW50ID09IDEpOwotICAgICAgICBbc2VsZiBsb2FkXTsK
LSAgICB9Ci19Ci0KLS0gKHZvaWQpY2xvc2UKLXsKLSAgICBBU1NFUlQoaW5zdGFuY2VDb3VudCA+
IDApOwotICAgIGluc3RhbmNlQ291bnQtLTsKLSAgICBpZiAoaW5zdGFuY2VDb3VudCA9PSAwICYm
IG5lZWRzVW5sb2FkKQotICAgICAgICBbc2VsZiBfdW5sb2FkV2l0aFNodXRkb3duOllFU107Ci19
Ci0KLQotLSAoQk9PTClzdXBwb3J0c1NuYXBzaG90dGluZwotewotICAgIGlmIChbc2VsZiBidW5k
bGVJZGVudGlmaWVyXSAhPSAiY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyLnBsdWdpbiIpCi0g
ICAgICAgIHJldHVybiBZRVM7Ci0gICAgCi0gICAgLy8gRmxhc2ggaGFzIGEgYm9ndXMgSW5mby5w
bGlzdCBlbnRyeSBmb3IgQ0ZCdW5kbGVWZXJzaW9uU3RyaW5nLCBzbyB1c2UgQ0ZCdW5kbGVTaG9y
dFZlcnNpb25TdHJpbmcuCi0gICAgTlNTdHJpbmcgKnZlcnNpb25TdHJpbmcgPSAoTlNTdHJpbmcg
KilDRkRpY3Rpb25hcnlHZXRWYWx1ZShDRkJ1bmRsZUdldEluZm9EaWN0aW9uYXJ5KGNmQnVuZGxl
LmdldCgpKSwgQ0ZTVFIoIkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nIikpOwotICAgIAotICAg
IGlmICghW3ZlcnNpb25TdHJpbmcgaGFzUHJlZml4OkAiMTAuMSJdKQotICAgICAgICByZXR1cm4g
WUVTOwotICAgIAotICAgIC8vIFNvbWUgcHJlcmVsZWFzZSB2ZXJzaW9ucyBvZiBGbGFzaCAxMC4x
IGNyYXNoIHdoZW4gc2VudCBhIGRyYXdSZWN0IGV2ZW50IHVzaW5nIHRoZSBDQSBkcmF3aW5nIG1v
ZGVsOiA8cmRhcjovL3Byb2JsZW0vNzczOTkyMj4KLSAgICByZXR1cm4gQ0ZTdHJpbmdDb21wYXJl
KChDRlN0cmluZ1JlZil2ZXJzaW9uU3RyaW5nLCBDRlNUUigiMTAuMS41My42MCIpLCBrQ0ZDb21w
YXJlTnVtZXJpY2FsbHkpICE9IGtDRkNvbXBhcmVMZXNzVGhhbjsKLX0KLQotQGVuZAotCi1AaW1w
bGVtZW50YXRpb24gV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlIChJbnRlcm5hbCkKLQotLSAodm9p
ZClfdW5sb2FkV2l0aFNodXRkb3duOihCT09MKXNodXRkb3duCi17Ci0gICAgaWYgKCFpc0xvYWRl
ZCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIExPRyhQbHVnaW5zLCAiVW5sb2FkaW5nICVA
Li4uIiwgKE5TU3RyaW5nICopcGx1Z2luSW5mby5uYW1lKTsKLQotICAgIC8vIENhbm5vdCB1bmxv
YWQgYSBwbHVnLWluIHBhY2thZ2Ugd2hpbGUgYW4gaW5zdGFuY2UgaXMgc3RpbGwgdXNpbmcgaXQK
LSAgICBpZiAoaW5zdGFuY2VDb3VudCA+IDApIHsKLSAgICAgICAgbmVlZHNVbmxvYWQgPSBZRVM7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoc2h1dGRvd24gJiYgTlBfU2h1dGRv
d24pCi0gICAgICAgIE5QX1NodXRkb3duKCk7Ci0KLSAgICBpZiAocmVzb3VyY2VSZWYgIT0gLTEp
Ci0gICAgICAgIFtzZWxmIGNsb3NlUmVzb3VyY2VGaWxlOnJlc291cmNlUmVmXTsKLQotICAgIExP
RyhQbHVnaW5zLCAiUGx1Z2luIFVubG9hZGVkIik7Ci0gICAgaXNMb2FkZWQgPSBOTzsKLX0KLQot
QGVuZAotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5z
L1dlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVn
aW5zL1dlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDE5MzkwYjVjMDJhNzVmNzlmOTY2ZjgxYTQxYTJkNzA1NjU3OGYwODUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSNpbXBvcnQgPEZvdW5kYXRp
b24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJDb3JlL1RpbWVyLmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmg+Ci0jaW1wb3J0IDxXZWJLaXRMZWdh
Y3kvbnBmdW5jdGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9SZWYuaD4KLSNpbXBvcnQgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0jaW1wb3J0IDx3dGYvUmVmUHRyLmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRy
Lmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpbXBvcnQgIldlYk5ldHNjYXBl
UGx1Z2luVmlldy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgRnJhbWVMb2Fk
ZXI7Ci0gICAgY2xhc3MgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI7Ci19Ci0KLUBjbGFzcyBX
ZWJOZXRzY2FwZVBsdWdpblZpZXc7Ci1AY2xhc3MgTlNVUkxSZXNwb25zZTsKLQotY2xhc3MgV2Vi
TmV0c2NhcGVQbHVnaW5TdHJlYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJOZXRzY2FwZVBsdWdp
blN0cmVhbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHJpdmF0ZSBXZWJDb3Jl
OjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudAotewotcHVibGljOgotICAgIHN0YXRp
YyBSZWY8V2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0+IGNyZWF0ZShOU1VSTFJlcXVlc3QgKnJlcXVl
c3QsIE5QUCBwbHVnaW4sIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYk5ldHNjYXBlUGx1Z2luU3Ry
ZWFtKHJlcXVlc3QsIHBsdWdpbiwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSkpOwotICAg
IH0KLSAgICBzdGF0aWMgUmVmPFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtPiBjcmVhdGUoV2ViQ29y
ZTo6RnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0oZnJhbWVMb2FkZXIpKTsKLSAgICB9Ci0g
ICAgdmlydHVhbCB+V2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0oKTsKLQotICAgIE5QUCBwbHVnaW4o
KSBjb25zdCB7IHJldHVybiBtX3BsdWdpbjsgfQotICAgIHZvaWQgc2V0UGx1Z2luKE5QUCk7Ci0g
ICAgCi0gICAgc3RhdGljIE5QUCBvd25lckZvclN0cmVhbShOUFN0cmVhbSAqKTsKLQotICAgIHN0
YXRpYyBOUFJlYXNvbiByZWFzb25Gb3JFcnJvcihOU0Vycm9yICopOwotICAgIE5TRXJyb3IgKmVy
cm9yRm9yUmVhc29uKE5QUmVhc29uKSBjb25zdDsKLQotICAgIHZvaWQgY2FuY2VsTG9hZEFuZERl
c3Ryb3lTdHJlYW1XaXRoRXJyb3IoTlNFcnJvciAqKTsKLQotICAgIHZvaWQgc2V0UmVxdWVzdFVS
TChjb25zdCBVUkwmIHJlcXVlc3RVUkwpIHsgbV9yZXF1ZXN0VVJMID0gcmVxdWVzdFVSTDsgfQot
Ci0gICAgdm9pZCBzdGFydCgpOwotICAgIHZvaWQgc3RvcCgpOwotICAgIAotICAgIHZvaWQgc3Rh
cnRTdHJlYW1XaXRoUmVzcG9uc2UoTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UpOwotICAgIAotICAg
IHZvaWQgZGVzdHJveVN0cmVhbVdpdGhFcnJvcihOU0Vycm9yICopOwotCi0gICAgLy8gRklYTUU6
IENhbiB0aGVzZSBiZSBtYWRlIHByaXZhdGU/Ci0gICAgdm9pZCBkaWRSZWNlaXZlRGF0YShXZWJD
b3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBp
bnQgbGVuZ3RoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoV2ViQ29yZTo6
TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICB2
b2lkIGRlc3Ryb3lTdHJlYW0oKTsKLSAgICB2b2lkIGNhbmNlbExvYWRXaXRoRXJyb3IoTlNFcnJv
ciAqKTsKLSAgICB2b2lkIGRlc3Ryb3lTdHJlYW1XaXRoUmVhc29uKE5QUmVhc29uKTsKLSAgICB2
b2lkIGRlbGl2ZXJEYXRhVG9GaWxlKE5TRGF0YSAqZGF0YSk7Ci0gICAgdm9pZCBkZWxpdmVyRGF0
YSgpOwotCi0gICAgdm9pZCBzdGFydFN0cmVhbShOU1VSTCAqLCBsb25nIGxvbmcgZXhwZWN0ZWRD
b250ZW50TGVuZ3RoLCBOU0RhdGUgKmxhc3RNb2RpZmllZERhdGUsIGNvbnN0IFdURjo6U3RyaW5n
JiBtaW1lVHlwZSwgTlNEYXRhICpoZWFkZXJzKTsKLSAgICAKLSAgICBOU0Vycm9yICpwbHVnaW5D
YW5jZWxsZWRDb25uZWN0aW9uRXJyb3IoKSBjb25zdDsKLQotICAgIC8vIE5ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyQ2xpZW50IG1ldGhvZHMuCi0gICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QoV2Vi
Q29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJik+JiYpIG92
ZXJyaWRlOwotICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNvcmU6Ok5ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpIG92ZXJy
aWRlOwotICAgIHZvaWQgZGlkRmFpbChXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRl
ciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBvdmVycmlkZTsKLSAgICBib29sIHdh
bnRzQWxsU3RyZWFtcygpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgUmV0YWluUHRyPE5TTXV0YWJs
ZURhdGE+IG1fZGVsaXZlcnlEYXRhOwotICAgIFVSTCBtX3JlcXVlc3RVUkw7Ci0gICAgUmV0YWlu
UHRyPE5TVVJMPiBtX3Jlc3BvbnNlVVJMOwotICAgIENTdHJpbmcgbV9taW1lVHlwZTsKLQotICAg
IE5QUCBtX3BsdWdpbjsKLSAgICB1aW50MTZfdCBtX3RyYW5zZmVyTW9kZTsKLSAgICBpbnQzMl90
IG1fb2Zmc2V0OwotICAgIE5QU3RyZWFtIG1fc3RyZWFtOwotICAgIFJldGFpblB0cjxOU1N0cmlu
Zz4gbV9wYXRoOwotICAgIGludCBtX2ZpbGVEZXNjcmlwdG9yOwotICAgIEJPT0wgbV9zZW5kTm90
aWZpY2F0aW9uOwotICAgIHZvaWQgKm1fbm90aWZ5RGF0YTsKLSAgICBjaGFyICptX2hlYWRlcnM7
Ci0gICAgUmV0YWluUHRyPFdlYk5ldHNjYXBlUGx1Z2luVmlldz4gbV9wbHVnaW5WaWV3OwotICAg
IE5QUmVhc29uIG1fcmVhc29uOwotICAgIGJvb2wgbV9pc1Rlcm1pbmF0ZWQ7Ci0gICAgYm9vbCBt
X25ld1N0cmVhbVN1Y2Nlc3NmdWw7Ci0gICAgCi0gICAgV2ViQ29yZTo6RnJhbWVMb2FkZXIqIG1f
ZnJhbWVMb2FkZXI7Ci0gICAgUmVmUHRyPFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyPiBtX2xvYWRlcjsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlVVJMUmVxdWVzdD4gbV9yZXF1
ZXN0OwotICAgIE5QUGx1Z2luRnVuY3MgKm1fcGx1Z2luRnVuY3M7Ci0KLSAgICBXZWJDb3JlOjpU
aW1lciBtX2RlbGl2ZXJEYXRhVGltZXI7Ci0gICAgCi0gICAgV2ViTmV0c2NhcGVQbHVnaW5TdHJl
YW0oV2ViQ29yZTo6RnJhbWVMb2FkZXIqKTsKLSAgICBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbShO
U1VSTFJlcXVlc3QgKiwgTlBQLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURh
dGEpOwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9Q
bHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOWE0YzI1MTdlODRjOTY3ZThmN2ZkMzk4ZjZjNWJkY2E3NzMwMTA3NS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tCisrKyAvZGV2L251
bGwKQEAgLTEsNjMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0g
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQotI2ltcG9ydCAiV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0uaCIKLQotI2ltcG9ydCAiV2ViRnJh
bWVJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViS2l0RXJyb3JzUHJpdmF0ZS5oIgotI2ltcG9ydCAi
V2ViS2l0TG9nZ2luZy5oIgotI2ltcG9ydCAiV2ViTlNPYmplY3RFeHRyYXMuaCIKLSNpbXBvcnQg
IldlYk5TVVJMRXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJOU1VSTFJlcXVlc3RFeHRyYXMuaCIKLSNp
bXBvcnQgIldlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5oIgotI2ltcG9ydCAiV2ViTmV0c2NhcGVQ
bHVnaW5WaWV3LmgiCi0jaW1wb3J0ICJXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKLSNpbXBv
cnQgPEZvdW5kYXRpb24vTlNVUkxSZXNwb25zZS5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SlNMb2NrLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0NvbW1vblZNLmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L0RvY3VtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL0pTRE9NV2luZG93QmFzZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9Mb2FkZXJT
dHJhdGVneS5oPgotI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVN0cmF0ZWdpZXMuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlQ
b2xpY3kuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVVSTFJlc3BvbnNlLmg+Ci0jaW1wb3J0
IDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgotI2ltcG9ydCA8d3RmL0NvbXBsZXRpb25IYW5k
bGVyLmg+Ci0jaW1wb3J0IDx3dGYvSGFzaE1hcC5oPgotI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+Ci0jaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwotCi0jZGVmaW5lIFdFQl9SRUFTT05fTk9ORSAtMQotCi1jbGFzcyBQbHVnaW5TdG9w
RGVmZXJyZXIgewotcHVibGljOgotICAgIFBsdWdpblN0b3BEZWZlcnJlcihXZWJOZXRzY2FwZVBs
dWdpblZpZXcqIHBsdWdpblZpZXcpCi0gICAgICAgIDogbV9wbHVnaW5WaWV3KHBsdWdpblZpZXcp
Ci0gICAgewotICAgICAgICBBU1NFUlQobV9wbHVnaW5WaWV3KTsKLSAgICAgICAgCi0gICAgICAg
IFttX3BsdWdpblZpZXcuZ2V0KCkgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07Ci0gICAgfQotICAg
IAotICAgIH5QbHVnaW5TdG9wRGVmZXJyZXIoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcGx1
Z2luVmlldyk7Ci0gICAgICAgIFttX3BsdWdpblZpZXcuZ2V0KCkgZGlkQ2FsbFBsdWdJbkZ1bmN0
aW9uXTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIFJldGFpblB0cjxXZWJOZXRzY2FwZVBs
dWdpblZpZXc+IG1fcGx1Z2luVmlldzsKLX07Ci0KLXR5cGVkZWYgSGFzaE1hcDxOUFN0cmVhbSos
IE5QUD4gU3RyZWFtTWFwOwotc3RhdGljIFN0cmVhbU1hcCYgc3RyZWFtcygpCi17Ci0gICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFN0cmVhbU1hcD4gc3RhdGljU3RyZWFtczsKLSAgICByZXR1cm4g
c3RhdGljU3RyZWFtczsKLX0KLQotTlBQIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpvd25lckZv
clN0cmVhbShOUFN0cmVhbSAqc3RyZWFtKQotewotICAgIHJldHVybiBzdHJlYW1zKCkuZ2V0KHN0
cmVhbSk7Ci19Ci0KLU5QUmVhc29uIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpyZWFzb25Gb3JF
cnJvcihOU0Vycm9yICplcnJvcikKLXsKLSAgICBpZiAoIWVycm9yKQotICAgICAgICByZXR1cm4g
TlBSRVNfRE9ORTsKLQotICAgIGlmIChbW2Vycm9yIGRvbWFpbl0gaXNFcXVhbFRvU3RyaW5nOk5T
VVJMRXJyb3JEb21haW5dICYmIFtlcnJvciBjb2RlXSA9PSBOU1VSTEVycm9yQ2FuY2VsbGVkKQot
ICAgICAgICByZXR1cm4gTlBSRVNfVVNFUl9CUkVBSzsKLQotICAgIHJldHVybiBOUFJFU19ORVRX
T1JLX0VSUjsKLX0KLQotTlNFcnJvciAqV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OnBsdWdpbkNh
bmNlbGxlZENvbm5lY3Rpb25FcnJvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFkb3B0TlMoW1tO
U0Vycm9yIGFsbG9jXSBfaW5pdFdpdGhQbHVnaW5FcnJvckNvZGU6V2ViS2l0RXJyb3JQbHVnSW5D
YW5jZWxsZWRDb25uZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGVudFVSTDptX3Jlc3BvbnNlVVJMID8gbV9yZXNwb25zZVVSTC5nZXQoKSA6IChO
U1VSTCAqKW1fcmVxdWVzdFVSTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBsdWdpblBhZ2VVUkw6bmlsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGx1Z2luTmFtZTpbW21fcGx1Z2luVmlldy5nZXQoKSBwbHVnaW5QYWNrYWdlXSBw
bHVnaW5JbmZvXS5uYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBNSU1FVHlwZTooTlNTdHJpbmcgKilTdHJpbmc6OmZyb21VVEY4KG1fbWltZVR5cGUuZGF0
YSgpLCBtX21pbWVUeXBlLmxlbmd0aCgpKV0pLmF1dG9yZWxlYXNlKCk7Ci19Ci0KLU5TRXJyb3Ig
KldlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjplcnJvckZvclJlYXNvbihOUFJlYXNvbiByZWFzb24p
IGNvbnN0Ci17Ci0gICAgaWYgKHJlYXNvbiA9PSBOUFJFU19ET05FKQotICAgICAgICByZXR1cm4g
bmlsOwotCi0gICAgaWYgKHJlYXNvbiA9PSBOUFJFU19VU0VSX0JSRUFLKQotICAgICAgICByZXR1
cm4gW05TRXJyb3IgX3dlYktpdEVycm9yV2l0aERvbWFpbjpOU1VSTEVycm9yRG9tYWluCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOk5TVVJMRXJyb3JDYW5j
ZWxsZWQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMOm1f
cmVzcG9uc2VVUkwgPyBtX3Jlc3BvbnNlVVJMLmdldCgpIDogKE5TVVJMICopbV9yZXF1ZXN0VVJM
XTsKLQotICAgIHJldHVybiBwbHVnaW5DYW5jZWxsZWRDb25uZWN0aW9uRXJyb3IoKTsKLX0KLQot
V2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OldlYk5ldHNjYXBlUGx1Z2luU3RyZWFtKEZyYW1lTG9h
ZGVyKiBmcmFtZUxvYWRlcikKLSAgICA6IG1fcGx1Z2luKDApCi0gICAgLCBtX3RyYW5zZmVyTW9k
ZSgwKQotICAgICwgbV9vZmZzZXQoMCkKLSAgICAsIG1fZmlsZURlc2NyaXB0b3IoLTEpCi0gICAg
LCBtX3NlbmROb3RpZmljYXRpb24oZmFsc2UpCi0gICAgLCBtX25vdGlmeURhdGEoMCkKLSAgICAs
IG1faGVhZGVycygwKQotICAgICwgbV9yZWFzb24oTlBSRVNfQkFTRSkKLSAgICAsIG1faXNUZXJt
aW5hdGVkKGZhbHNlKQotICAgICwgbV9uZXdTdHJlYW1TdWNjZXNzZnVsKGZhbHNlKQotICAgICwg
bV9mcmFtZUxvYWRlcihmcmFtZUxvYWRlcikKLSAgICAsIG1fcGx1Z2luRnVuY3MoMCkKLSAgICAs
IG1fZGVsaXZlckRhdGFUaW1lcigqdGhpcywgJldlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpkZWxp
dmVyRGF0YSkKLXsKLSAgICBtZW1zZXQoJm1fc3RyZWFtLCAwLCBzaXplb2YoTlBTdHJlYW0pKTsK
LX0KLQotV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OldlYk5ldHNjYXBlUGx1Z2luU3RyZWFtKE5T
VVJMUmVxdWVzdCAqcmVxdWVzdCwgTlBQIHBsdWdpbiwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2
b2lkKiBub3RpZnlEYXRhKQotICAgIDogbV9yZXF1ZXN0VVJMKFtyZXF1ZXN0IFVSTF0pCi0gICAg
LCBtX3BsdWdpbigwKQotICAgICwgbV90cmFuc2Zlck1vZGUoMCkKLSAgICAsIG1fb2Zmc2V0KDAp
Ci0gICAgLCBtX2ZpbGVEZXNjcmlwdG9yKC0xKQotICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKHNl
bmROb3RpZmljYXRpb24pCi0gICAgLCBtX25vdGlmeURhdGEobm90aWZ5RGF0YSkKLSAgICAsIG1f
aGVhZGVycygwKQotICAgICwgbV9yZWFzb24oTlBSRVNfQkFTRSkKLSAgICAsIG1faXNUZXJtaW5h
dGVkKGZhbHNlKQotICAgICwgbV9uZXdTdHJlYW1TdWNjZXNzZnVsKGZhbHNlKQotICAgICwgbV9m
cmFtZUxvYWRlcigwKQotICAgICwgbV9yZXF1ZXN0KGFkb3B0TlMoW3JlcXVlc3QgbXV0YWJsZUNv
cHldKSkKLSAgICAsIG1fcGx1Z2luRnVuY3MoMCkKLSAgICAsIG1fZGVsaXZlckRhdGFUaW1lcigq
dGhpcywgJldlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpkZWxpdmVyRGF0YSkKLXsKLSAgICBtZW1z
ZXQoJm1fc3RyZWFtLCAwLCBzaXplb2YoTlBTdHJlYW0pKTsKLQotICAgIFdlYk5ldHNjYXBlUGx1
Z2luVmlldyAqdmlldyA9IChXZWJOZXRzY2FwZVBsdWdpblZpZXcgKilwbHVnaW4tPm5kYXRhOwot
ICAgIAotICAgIC8vIFRoaXMgY2hlY2sgaGFzIGFscmVhZHkgYmVlbiBkb25lIGJ5IHRoZSBwbHVn
LWluIHZpZXcuCi0gICAgQVNTRVJUKGNvcmUoW3ZpZXcgd2ViRnJhbWVdKS0+ZG9jdW1lbnQoKS0+
c2VjdXJpdHlPcmlnaW4oKS5jYW5EaXNwbGF5KFtyZXF1ZXN0IFVSTF0pKTsKLSAgICAKLSAgICBB
U1NFUlQoW3JlcXVlc3QgVVJMXSk7Ci0gICAgQVNTRVJUKHBsdWdpbik7Ci0gICAgCi0gICAgc2V0
UGx1Z2luKHBsdWdpbik7Ci0gICAgCi0gICAgc3RyZWFtcygpLmFkZCgmbV9zdHJlYW0sIHBsdWdp
bik7Ci0gICAgCi0gICAgU3RyaW5nIHJlZmVycmVyID0gU2VjdXJpdHlQb2xpY3k6OmdlbmVyYXRl
UmVmZXJyZXJIZWFkZXIoY29yZShbdmlldyB3ZWJGcmFtZV0pLT5kb2N1bWVudCgpLT5yZWZlcnJl
clBvbGljeSgpLCBbcmVxdWVzdCBVUkxdLCBjb3JlKFt2aWV3IHdlYkZyYW1lXSktPmxvYWRlcigp
Lm91dGdvaW5nUmVmZXJyZXIoKSk7Ci0gICAgaWYgKHJlZmVycmVyLmlzRW1wdHkoKSkKLSAgICAg
ICAgW21fcmVxdWVzdC5nZXQoKSBfd2ViX3NldEhUVFBSZWZlcnJlcjpuaWxdOwotICAgIGVsc2UK
LSAgICAgICAgW21fcmVxdWVzdC5nZXQoKSBfd2ViX3NldEhUVFBSZWZlcnJlcjpyZWZlcnJlcl07
Ci19Ci0KLVdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjp+V2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0o
KQotewotICAgIEFTU0VSVCghbV9wbHVnaW4pOwotICAgIEFTU0VSVChtX2lzVGVybWluYXRlZCk7
Ci0gICAgQVNTRVJUKCFtX3N0cmVhbS5uZGF0YSk7Ci0gICAgCi0gICAgLy8gVGhlIHN0cmVhbSBm
aWxlIHNob3VsZCBoYXZlIGJlZW4gZGVsZXRlZCwgYW5kIHRoZSBwYXRoIGZyZWVkLCBpbiAtX2Rl
c3Ryb3lTdHJlYW0KLSAgICBBU1NFUlQoIW1fcGF0aCk7Ci0gICAgQVNTRVJUKG1fZmlsZURlc2Ny
aXB0b3IgPT0gLTEpOwotICAgIAotICAgIGZyZWUoKHZvaWQgKiltX3N0cmVhbS51cmwpOwotICAg
IGZyZWUobV9oZWFkZXJzKTsKLSAgICAKLSAgICBzdHJlYW1zKCkucmVtb3ZlKCZtX3N0cmVhbSk7
Ci19Ci0KLXZvaWQgV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OnNldFBsdWdpbihOUFAgcGx1Z2lu
KQotewotICAgIGlmIChwbHVnaW4pIHsKLSAgICAgICAgbV9wbHVnaW4gPSBwbHVnaW47Ci0gICAg
ICAgIG1fcGx1Z2luVmlldyA9IHN0YXRpY19jYXN0PFdlYk5ldHNjYXBlUGx1Z2luVmlldyAqPiht
X3BsdWdpbi0+bmRhdGEpOwotCi0gICAgICAgIFdlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSAqcGx1
Z2luUGFja2FnZSA9IFttX3BsdWdpblZpZXcuZ2V0KCkgcGx1Z2luUGFja2FnZV07Ci0gICAgICAg
IAotICAgICAgICBtX3BsdWdpbkZ1bmNzID0gW3BsdWdpblBhY2thZ2UgcGx1Z2luRnVuY3NdOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIFdlYk5ldHNjYXBlUGx1Z2luVmlldyAqdmlldyA9IG1fcGx1
Z2luVmlldy5nZXQoKTsKLSAgICAgICAgbV9wbHVnaW4gPSAwOwotICAgICAgICBtX3BsdWdpbkZ1
bmNzID0gMDsKLSAgICAgICAgCi0gICAgICAgIFt2aWV3IGRpc2Nvbm5lY3RTdHJlYW06dGhpc107
Ci0gICAgICAgIG1fcGx1Z2luVmlldyA9IDA7Ci0gICAgfSAgICAgICAgCi19Ci0KLXZvaWQgV2Vi
TmV0c2NhcGVQbHVnaW5TdHJlYW06OnN0YXJ0U3RyZWFtKE5TVVJMICp1cmwsIGxvbmcgbG9uZyBl
eHBlY3RlZENvbnRlbnRMZW5ndGgsIE5TRGF0ZSAqbGFzdE1vZGlmaWVkRGF0ZSwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgTlNEYXRhICpoZWFkZXJzKQotewotICAgIEFTU0VSVCghbV9pc1Rlcm1p
bmF0ZWQpOwotICAgIAotICAgIG1fcmVzcG9uc2VVUkwgPSB1cmw7Ci0gICAgbV9taW1lVHlwZSA9
IG1pbWVUeXBlLnV0ZjgoKTsKLSAgICAKLSAgICBmcmVlKCh2b2lkICopbV9zdHJlYW0udXJsKTsK
LSAgICBtX3N0cmVhbS51cmwgPSBzdHJkdXAoW21fcmVzcG9uc2VVUkwuZ2V0KCkgX3dlYl9VUkxD
U3RyaW5nXSk7Ci0KLSAgICBtX3N0cmVhbS5uZGF0YSA9IHRoaXM7Ci0gICAgbV9zdHJlYW0uZW5k
ID0gZXhwZWN0ZWRDb250ZW50TGVuZ3RoID4gMCA/ICh1aW50MzJfdClleHBlY3RlZENvbnRlbnRM
ZW5ndGggOiAwOwotICAgIG1fc3RyZWFtLmxhc3Rtb2RpZmllZCA9ICh1aW50MzJfdClbbGFzdE1v
ZGlmaWVkRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZTE5NzBdOwotICAgIG1fc3RyZWFtLm5vdGlmeURh
dGEgPSBtX25vdGlmeURhdGE7Ci0KLSAgICBpZiAoaGVhZGVycykgewotICAgICAgICB1bnNpZ25l
ZCBsZW4gPSBbaGVhZGVycyBsZW5ndGhdOwotICAgICAgICBtX2hlYWRlcnMgPSAoY2hhciopIG1h
bGxvYyhsZW4gKyAxKTsKLSAgICAgICAgW2hlYWRlcnMgZ2V0Qnl0ZXM6bV9oZWFkZXJzIGxlbmd0
aDpsZW5dOwotICAgICAgICBtX2hlYWRlcnNbbGVuXSA9IDA7Ci0gICAgICAgIG1fc3RyZWFtLmhl
YWRlcnMgPSBtX2hlYWRlcnM7Ci0gICAgfQotICAgIAotICAgIG1fdHJhbnNmZXJNb2RlID0gTlBf
Tk9STUFMOwotICAgIG1fb2Zmc2V0ID0gMDsKLSAgICBtX3JlYXNvbiA9IFdFQl9SRUFTT05fTk9O
RTsKLSAgICAvLyBGSVhNRTogSWYgV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0gY2FsbGVkIG91ciBp
bml0aWFsaXplciB3ZSB3b3VsZG4ndCBoYXZlIHRvIGRvIHRoaXMgaGVyZS4KLSAgICBtX2ZpbGVE
ZXNjcmlwdG9yID0gLTE7Ci0KLSAgICAvLyBGSVhNRTogTmVlZCBhIHdheSB0byBjaGVjayBpZiBz
dHJlYW0gaXMgc2Vla2FibGUKLQotICAgIE5QRXJyb3IgbnBFcnI7Ci0gICAgewotICAgICAgICBQ
bHVnaW5TdG9wRGVmZXJyZXIgZGVmZXJyZXIobV9wbHVnaW5WaWV3LmdldCgpKTsKLSAgICAgICAg
bnBFcnIgPSBtX3BsdWdpbkZ1bmNzLT5uZXdzdHJlYW0obV9wbHVnaW4sIG1fbWltZVR5cGUubXV0
YWJsZURhdGEoKSwgJm1fc3RyZWFtLCBOTywgJm1fdHJhbnNmZXJNb2RlKTsKLSAgICB9Ci0KLSAg
ICBMT0coUGx1Z2lucywgIk5QUF9OZXdTdHJlYW0gVVJMPSVAIE1JTUU9JXMgZXJyb3I9JWQiLCBt
X3Jlc3BvbnNlVVJMLmdldCgpLCBtX21pbWVUeXBlLmRhdGEoKSwgbnBFcnIpOwotCi0gICAgaWYg
KG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKSB7Ci0gICAgICAgIExPR19FUlJPUigiTlBQX05ld1N0
cmVhbSBmYWlsZWQgd2l0aCBlcnJvcjogJWQgcmVzcG9uc2VVUkw6ICVAIiwgbnBFcnIsIG1fcmVz
cG9uc2VVUkwuZ2V0KCkpOwotICAgICAgICAvLyBDYWxsaW5nIGNhbmNlbExvYWRXaXRoRXJyb3I6
IGNhbmNlbHMgdGhlIGxvYWQsIGJ1dCBkb2Vzbid0IGNhbGwgTlBQX0Rlc3Ryb3lTdHJlYW0uCi0g
ICAgICAgIGNhbmNlbExvYWRXaXRoRXJyb3IocGx1Z2luQ2FuY2VsbGVkQ29ubmVjdGlvbkVycm9y
KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9uZXdTdHJlYW1TdWNjZXNzZnVs
ID0gdHJ1ZTsKLQotICAgIHN3aXRjaCAobV90cmFuc2Zlck1vZGUpIHsKLSAgICAgICAgY2FzZSBO
UF9OT1JNQUw6Ci0gICAgICAgICAgICBMT0coUGx1Z2lucywgIlN0cmVhbSB0eXBlOiBOUF9OT1JN
QUwiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5QX0FTRklMRU9OTFk6Ci0g
ICAgICAgICAgICBMT0coUGx1Z2lucywgIlN0cmVhbSB0eXBlOiBOUF9BU0ZJTEVPTkxZIik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOUF9BU0ZJTEU6Ci0gICAgICAgICAgICBM
T0coUGx1Z2lucywgIlN0cmVhbSB0eXBlOiBOUF9BU0ZJTEUiKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIE5QX1NFRUs6Ci0gICAgICAgICAgICBMT0dfRVJST1IoIlN0cmVhbSB0
eXBlOiBOUF9TRUVLIG5vdCB5ZXQgc3VwcG9ydGVkIik7Ci0gICAgICAgICAgICBjYW5jZWxMb2Fk
QW5kRGVzdHJveVN0cmVhbVdpdGhFcnJvcihwbHVnaW5DYW5jZWxsZWRDb25uZWN0aW9uRXJyb3Io
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIExP
R19FUlJPUigidW5rbm93biBzdHJlYW0gdHlwZSIpOwotICAgIH0KLX0KLQotdm9pZCBXZWJOZXRz
Y2FwZVBsdWdpblN0cmVhbTo6c3RhcnQoKQotewotICAgIEFTU0VSVChtX3JlcXVlc3QpOwotICAg
IEFTU0VSVCghbV9mcmFtZUxvYWRlcik7Ci0gICAgQVNTRVJUKCFtX2xvYWRlcik7Ci0KLSAgICB3
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoKmNvcmUo
W21fcGx1Z2luVmlldy5nZXQoKSB3ZWJGcmFtZV0pLCAqdGhpcywgbV9yZXF1ZXN0LmdldCgpLCBb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH1dIChSZWZQdHI8V2ViQ29yZTo6TmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+JiYgbG9hZGVyKSB7Ci0gICAgICAgIG1fbG9hZGVyID0g
V1RGTW92ZShsb2FkZXIpOwotICAgIH0pOwotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luU3Ry
ZWFtOjpzdG9wKCkKLXsKLSAgICBBU1NFUlQoIW1fZnJhbWVMb2FkZXIpOwotICAgIAotICAgIGlm
ICghbV9sb2FkZXItPmlzRG9uZSgpKQotICAgICAgICBjYW5jZWxMb2FkQW5kRGVzdHJveVN0cmVh
bVdpdGhFcnJvcihtX2xvYWRlci0+Y2FuY2VsbGVkRXJyb3IoKSk7Ci19Ci0KLXZvaWQgV2ViTmV0
c2NhcGVQbHVnaW5TdHJlYW06OndpbGxTZW5kUmVxdWVzdChOZXRzY2FwZVBsdWdJblN0cmVhbUxv
YWRlciosIFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmKT4mJiBj
YWxsYmFjaykKLXsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdGlmeSB0aGUgcGx1Zy1pbiB3
aXRoIE5QUF9VUkxSZWRpcmVjdE5vdGlmeSBoZXJlLgotICAgIGNhbGxiYWNrKFdURk1vdmUocmVx
dWVzdCkpOwotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpkaWRSZWNlaXZlUmVz
cG9uc2UoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKLXsKLSAgICBOU1VSTFJlc3BvbnNlICpyID0gcmVzcG9uc2UubnNVUkxSZXNw
b25zZSgpOwotICAgIAotICAgIE5TTXV0YWJsZURhdGEgKnRoZUhlYWRlcnMgPSBuaWw7Ci0gICAg
bG9uZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0aCA9IFtyIGV4cGVjdGVkQ29udGVudExlbmd0
aF07Ci0gICAgCi0gICAgaWYgKFtyIGlzS2luZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNlIGNs
YXNzXV0pIHsKLSAgICAgICAgTlNIVFRQVVJMUmVzcG9uc2UgKmh0dHBSZXNwb25zZSA9IChOU0hU
VFBVUkxSZXNwb25zZSAqKXI7Ci0gICAgICAgIHRoZUhlYWRlcnMgPSBbTlNNdXRhYmxlRGF0YSBk
YXRhV2l0aENhcGFjaXR5OjEwMjRdOwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IGl0IHdv
dWxkIGJlIG5pY2UgdG8gYmUgYWJsZSB0byBnZXQgdGhlIHJhdyBIVFRQIGhlYWRlciBibG9jay4K
LSAgICAgICAgLy8gVGhpcyBpbmNsdWRlcyB0aGUgSFRUUCB2ZXJzaW9uLCB0aGUgcmVhbCBzdGF0
dXMgdGV4dCwKLSAgICAgICAgLy8gYWxsIGhlYWRlcnMgaW4gdGhlaXIgb3JpZ2luYWwgb3JkZXIg
YW5kIGluY2x1ZGluZyBkdXBsaWNhdGVzLAotICAgICAgICAvLyBhbmQgYWxsIG9yaWdpbmFsIGJ5
dGVzIHZlcmJhdGltLCByYXRoZXIgdGhhbiBzZW50IHRocm91Z2ggVW5pY29kZSB0cmFuc2xhdGlv
bi4KLSAgICAgICAgLy8gVW5mb3J0dW5hdGVseSBOU0hUVFBVUkxSZXNwb25zZSBkb2Vzbid0IHBy
b3ZpZGUgYWNjZXNzIGF0IHRoYXQgbG93IGEgbGV2ZWwuCi0gICAgICAgIAotICAgICAgICBbdGhl
SGVhZGVycyBhcHBlbmRCeXRlczoiSFRUUCAiIGxlbmd0aDo1XTsKLSAgICAgICAgY2hhciBzdGF0
dXNTdHJbMTBdOwotICAgICAgICBsb25nIHN0YXR1c0NvZGUgPSBbaHR0cFJlc3BvbnNlIHN0YXR1
c0NvZGVdOwotICAgICAgICBzbnByaW50ZihzdGF0dXNTdHIsIHNpemVvZihzdGF0dXNTdHIpLCAi
JWxkIiwgc3RhdHVzQ29kZSk7Ci0gICAgICAgIFt0aGVIZWFkZXJzIGFwcGVuZEJ5dGVzOnN0YXR1
c1N0ciBsZW5ndGg6c3RybGVuKHN0YXR1c1N0cildOwotICAgICAgICBbdGhlSGVhZGVycyBhcHBl
bmRCeXRlczoiIE9LXG4iIGxlbmd0aDo0XTsKLSAgICAgICAgCi0gICAgICAgIC8vIEhBQ0s6IHBh
c3MgdGhlIGhlYWRlcnMgdGhyb3VnaCBhcyBVVEYtOC4KLSAgICAgICAgLy8gVGhpcyBpcyBub3Qg
dGhlIGludGVuZGVkIGJlaGF2aW9yOyB3ZSdyZSBzdXBwb3NlZCB0byBwYXNzIG9yaWdpbmFsIGJ5
dGVzIHZlcmJhdGltLgotICAgICAgICAvLyBCdXQgd2UgZG9uJ3QgaGF2ZSB0aGUgb3JpZ2luYWwg
Ynl0ZXMsIHdlIGhhdmUgTlNTdHJpbmdzIGJ1aWx0IGJ5IHRoZSBVUkwgbG9hZGluZyBzeXN0ZW0u
Ci0gICAgICAgIC8vIEl0IGhvcGVmdWxseSBzaG91bGRuJ3QgbWF0dGVyLCBzaW5jZSBSRkMyNjE2
L1JGQzgyMiByZXF1aXJlIEFTQ0lJLW9ubHkgaGVhZGVycywKLSAgICAgICAgLy8gYnV0IHN1cmVs
eSBzb21lb25lIG91dCB0aGVyZSBpcyB1c2luZyBub24tQVNDSUkgY2hhcmFjdGVycywgYW5kIGhv
cGVmdWxseSBVVEYtOCBpcyBhZGVxdWF0ZSBoZXJlLgotICAgICAgICAvLyBJdCBzZWVtcyBiZXR0
ZXIgdGhhbiBOU0FTQ0lJU3RyaW5nRW5jb2RpbmcsIHdoaWNoIHdpbGwgbG9zZSBpbmZvcm1hdGlv
biBpZiBub24tQVNDSUkgaXMgdXNlZC4KLSAgICAgICAgCi0gICAgICAgIE5TRGljdGlvbmFyeSAq
aGVhZGVyRGljdCA9IFtodHRwUmVzcG9uc2UgYWxsSGVhZGVyRmllbGRzXTsKLSAgICAgICAgTlNB
cnJheSAqa2V5cyA9IFtbaGVhZGVyRGljdCBhbGxLZXlzXSBzb3J0ZWRBcnJheVVzaW5nU2VsZWN0
b3I6QHNlbGVjdG9yKGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6KV07Ci0gICAgICAgIE5TRW51bWVy
YXRvciAqaSA9IFtrZXlzIG9iamVjdEVudW1lcmF0b3JdOwotICAgICAgICBOU1N0cmluZyAqazsK
LSAgICAgICAgd2hpbGUgKChrID0gW2kgbmV4dE9iamVjdF0pICE9IG5pbCkgewotICAgICAgICAg
ICAgTlNTdHJpbmcgKnYgPSBbaGVhZGVyRGljdCBvYmplY3RGb3JLZXk6a107Ci0gICAgICAgICAg
ICBbdGhlSGVhZGVycyBhcHBlbmREYXRhOltrIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmlu
Z0VuY29kaW5nXV07Ci0gICAgICAgICAgICBbdGhlSGVhZGVycyBhcHBlbmRCeXRlczoiOiAiIGxl
bmd0aDoyXTsKLSAgICAgICAgICAgIFt0aGVIZWFkZXJzIGFwcGVuZERhdGE6W3YgZGF0YVVzaW5n
RW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsKLSAgICAgICAgICAgIFt0aGVIZWFkZXJz
IGFwcGVuZEJ5dGVzOiJcbiIgbGVuZ3RoOjFdOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICAvLyBJZiB0aGUgY29udGVudCBpcyBlbmNvZGVkIChtb3N0IGxpa2VseSBjb21wcmVzc2VkKSwg
dGhlbiBkb24ndCBzZW5kIGl0cyBsZW5ndGggdG8gdGhlIHBsdWdpbiwKLSAgICAgICAgLy8gd2hp
Y2ggaXMgb25seSBpbnRlcmVzdGVkIGluIHRoZSBkZWNvZGVkIGxlbmd0aCwgbm90IHlldCBrbm93
biBhdCB0aGUgbW9tZW50LgotICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNDQ3MDU5OT4gdHJh
Y2tzIGEgcmVxdWVzdCBmb3IgLVtOU1VSTFJlc3BvbnNlIGV4cGVjdGVkQ29udGVudExlbmd0aF0g
dG8gaW5jb3Jwb3JhdGUgdGhpcyBsb2dpYy4KLSAgICAgICAgTlNTdHJpbmcgKmNvbnRlbnRFbmNv
ZGluZyA9IChOU1N0cmluZyAqKVtbKE5TSFRUUFVSTFJlc3BvbnNlICopciBhbGxIZWFkZXJGaWVs
ZHNdIG9iamVjdEZvcktleTpAIkNvbnRlbnQtRW5jb2RpbmciXTsKLSAgICAgICAgaWYgKGNvbnRl
bnRFbmNvZGluZyAmJiAhW2NvbnRlbnRFbmNvZGluZyBpc0VxdWFsVG9TdHJpbmc6QCJpZGVudGl0
eSJdKQotICAgICAgICAgICAgZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gLTE7Ci0gICAgICAgIAot
ICAgICAgICAvLyBzdGFydFN0cmVhbVJlc3BvbnNlVVJMOi4uLiB3aWxsIG51bGwtdGVybWluYXRl
LgotICAgIH0KLSAgICAKLSAgICBzdGFydFN0cmVhbShbciBVUkxdLCBleHBlY3RlZENvbnRlbnRM
ZW5ndGgsIFtyIF9sYXN0TW9kaWZpZWREYXRlXSwgcmVzcG9uc2UubWltZVR5cGUoKSwgdGhlSGVh
ZGVycyk7Ci19Ci0KLXZvaWQgV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OnN0YXJ0U3RyZWFtV2l0
aFJlc3BvbnNlKE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlKQotewotICAgIGRpZFJlY2VpdmVSZXNw
b25zZSgwLCByZXNwb25zZSk7Ci19Ci0KLWJvb2wgV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06Ondh
bnRzQWxsU3RyZWFtcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BsdWdpbkZ1bmNzLT5nZXR2YWx1
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHZvaWQgKnZhbHVlID0gMDsKLSAg
ICBOUEVycm9yIGVycm9yOwotICAgIHsKLSAgICAgICAgUGx1Z2luU3RvcERlZmVycmVyIGRlZmVy
cmVyKG1fcGx1Z2luVmlldy5nZXQoKSk7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwotICAgICAgICBlcnJvciA9IG1fcGx1Z2luRnVu
Y3MtPmdldHZhbHVlKG1fcGx1Z2luLCBOUFBWcGx1Z2luV2FudHNBbGxOZXR3b3JrU3RyZWFtcywg
JnZhbHVlKTsKLSAgICB9Ci0gICAgaWYgKGVycm9yICE9IE5QRVJSX05PX0VSUk9SKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIHZhbHVlOwotfQotCi12b2lkIFdlYk5l
dHNjYXBlUGx1Z2luU3RyZWFtOjpkZXN0cm95U3RyZWFtKCkKLXsKLSAgICBpZiAobV9pc1Rlcm1p
bmF0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZjxXZWJOZXRzY2FwZVBsdWdpblN0cmVh
bT4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBBU1NFUlQobV9yZWFzb24gIT0gV0VCX1JFQVNPTl9O
T05FKTsKLSAgICBBU1NFUlQoW21fZGVsaXZlcnlEYXRhLmdldCgpIGxlbmd0aF0gPT0gMCk7Ci0g
ICAgCi0gICAgbV9kZWxpdmVyRGF0YVRpbWVyLnN0b3AoKTsKLQotICAgIGlmIChtX3N0cmVhbS5u
ZGF0YSkgewotICAgICAgICBpZiAobV9yZWFzb24gPT0gTlBSRVNfRE9ORSAmJiAobV90cmFuc2Zl
ck1vZGUgPT0gTlBfQVNGSUxFIHx8IG1fdHJhbnNmZXJNb2RlID09IE5QX0FTRklMRU9OTFkpKSB7
Ci0gICAgICAgICAgICBBU1NFUlQobV9maWxlRGVzY3JpcHRvciA9PSAtMSk7Ci0gICAgICAgICAg
ICBBU1NFUlQobV9wYXRoKTsKLQotICAgICAgICAgICAgUGx1Z2luU3RvcERlZmVycmVyIGRlZmVy
cmVyKG1fcGx1Z2luVmlldy5nZXQoKSk7Ci0gICAgICAgICAgICBtX3BsdWdpbkZ1bmNzLT5hc2Zp
bGUobV9wbHVnaW4sICZtX3N0cmVhbSwgW21fcGF0aC5nZXQoKSBmaWxlU3lzdGVtUmVwcmVzZW50
YXRpb25dKTsKLSAgICAgICAgICAgIExPRyhQbHVnaW5zLCAiTlBQX1N0cmVhbUFzRmlsZSByZXNw
b25zZVVSTD0lQCBwYXRoPSVzIiwgbV9yZXNwb25zZVVSTC5nZXQoKSwgbV9wYXRoLmdldCgpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX3BhdGgpIHsKLSAgICAgICAgICAgIC8vIERlbGV0
ZSB0aGUgZmlsZSBhZnRlciBjYWxsaW5nIE5QUF9TdHJlYW1Bc0ZpbGUoKSwgaW5zdGVhZCBvZiBp
biAtZGVhbGxvYy8tZmluYWxpemUuICBJdCBzaG91bGQgYmUgT0sKLSAgICAgICAgICAgIC8vIHRv
IGRlbGV0ZSB0aGUgZmlsZSBoZXJlIC0tIE5QUF9TdHJlYW1Bc0ZpbGUoKSBpcyBhbHdheXMgY2Fs
bGVkIGltbWVkaWF0ZWx5IGJlZm9yZSBOUFBfRGVzdHJveVN0cmVhbSgpCi0gICAgICAgICAgICAv
LyAodGhlIHN0cmVhbSBkZXN0cnVjdGlvbiBmdW5jdGlvbiksIHNvIHRoZXJlIGNhbiBiZSBubyBl
eHBlY3RhdGlvbiB0aGF0IGEgcGx1Z2luIHdpbGwgcmVhZCB0aGUgc3RyZWFtCi0gICAgICAgICAg
ICAvLyBmaWxlIGFzeW5jaHJvbm91c2x5IGFmdGVyIE5QUF9TdHJlYW1Bc0ZpbGUoKSBpcyBjYWxs
ZWQuCi0gICAgICAgICAgICB1bmxpbmsoW21fcGF0aC5nZXQoKSBmaWxlU3lzdGVtUmVwcmVzZW50
YXRpb25dKTsKLSAgICAgICAgICAgIG1fcGF0aCA9IDA7Ci0KLSAgICAgICAgICAgIGlmIChtX2lz
VGVybWluYXRlZCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAobV9maWxlRGVzY3JpcHRvciAhPSAtMSkgewotICAgICAgICAgICAgLy8gVGhlIGZpbGUg
bWF5IHN0aWxsIGJlIG9wZW4gaWYgd2UgYXJlIGRlc3Ryb3lpbmcgdGhlIHN0cmVhbSBiZWZvcmUg
aXQgY29tcGxldGVkIGxvYWRpbmcuCi0gICAgICAgICAgICBjbG9zZShtX2ZpbGVEZXNjcmlwdG9y
KTsKLSAgICAgICAgICAgIG1fZmlsZURlc2NyaXB0b3IgPSAtMTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChtX25ld1N0cmVhbVN1Y2Nlc3NmdWwpIHsKLSAgICAgICAgICAgIFBsdWdpblN0b3BE
ZWZlcnJlciBkZWZlcnJlcihtX3BsdWdpblZpZXcuZ2V0KCkpOwotI2lmICFMT0dfRElTQUJMRUQK
LSAgICAgICAgICAgIE5QRXJyb3IgbnBFcnIgPSAKLSNlbmRpZgotICAgICAgICAgICAgbV9wbHVn
aW5GdW5jcy0+ZGVzdHJveXN0cmVhbShtX3BsdWdpbiwgJm1fc3RyZWFtLCBtX3JlYXNvbik7Ci0g
ICAgICAgICAgICBMT0coUGx1Z2lucywgIk5QUF9EZXN0cm95U3RyZWFtIHJlc3BvbnNlVVJMPSVA
IGVycm9yPSVkIiwgbV9yZXNwb25zZVVSTC5nZXQoKSwgbnBFcnIpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZnJlZShtX2hlYWRlcnMpOwotICAgICAgICBtX2hlYWRlcnMgPSBOVUxMOwotICAgICAg
ICBtX3N0cmVhbS5oZWFkZXJzID0gTlVMTDsKLQotICAgICAgICBtX3N0cmVhbS5uZGF0YSA9IDA7
Ci0KLSAgICAgICAgaWYgKG1faXNUZXJtaW5hdGVkKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChtX3NlbmROb3RpZmljYXRpb24pIHsKLSAgICAgICAgLy8gTlBQX1VSTE5v
dGlmeSBleHBlY3RzIHRoZSByZXF1ZXN0IFVSTCwgbm90IHRoZSByZXNwb25zZSBVUkwuCi0gICAg
ICAgIFBsdWdpblN0b3BEZWZlcnJlciBkZWZlcnJlcihtX3BsdWdpblZpZXcuZ2V0KCkpOwotICAg
ICAgICBtX3BsdWdpbkZ1bmNzLT51cmxub3RpZnkobV9wbHVnaW4sIG1fcmVxdWVzdFVSTC5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBtX3JlYXNvbiwgbV9ub3RpZnlEYXRhKTsKLSAgICAgICAgTE9H
KFBsdWdpbnMsICJOUFBfVVJMTm90aWZ5IHJlcXVlc3RVUkw9JUAgcmVhc29uPSVkIiwgKE5TVVJM
ICopbV9yZXF1ZXN0VVJMLCBtX3JlYXNvbik7Ci0gICAgfQotCi0gICAgbV9pc1Rlcm1pbmF0ZWQg
PSB0cnVlOwotCi0gICAgc2V0UGx1Z2luKDApOwotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2lu
U3RyZWFtOjpkZXN0cm95U3RyZWFtV2l0aFJlYXNvbihOUFJlYXNvbiByZWFzb24pCi17Ci0gICAg
bV9yZWFzb24gPSByZWFzb247Ci0gICAgaWYgKG1fcmVhc29uICE9IE5QUkVTX0RPTkUpIHsKLSAg
ICAgICAgLy8gU3RvcCBhbnkgcGVuZGluZyBkYXRhIGZyb20gYmVpbmcgc3RyZWFtZWQuCi0gICAg
ICAgIFttX2RlbGl2ZXJ5RGF0YS5nZXQoKSBzZXRMZW5ndGg6MF07Ci0gICAgfSBlbHNlIGlmIChb
bV9kZWxpdmVyeURhdGEuZ2V0KCkgbGVuZ3RoXSA+IDApIHsKLSAgICAgICAgLy8gVGhlcmUgaXMg
bW9yZSBkYXRhIHRvIGJlIHN0cmVhbWVkLCBkb24ndCBkZXN0cm95IHRoZSBzdHJlYW0gbm93Lgot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmPFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFt
PiBwcm90ZWN0KCp0aGlzKTsKLSAgICBkZXN0cm95U3RyZWFtKCk7Ci0gICAgQVNTRVJUKCFtX3N0
cmVhbS5uZGF0YSk7Ci19Ci0KLXZvaWQgV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OmNhbmNlbExv
YWRXaXRoRXJyb3IoTlNFcnJvciAqZXJyb3IpCi17Ci0gICAgaWYgKG1fZnJhbWVMb2FkZXIpIHsK
LSAgICAgICAgQVNTRVJUKCFtX2xvYWRlcik7Ci0gICAgICAgIGF1dG8gZG9jdW1lbnRMb2FkZXIg
PSBtX2ZyYW1lTG9hZGVyLT5hY3RpdmVEb2N1bWVudExvYWRlcigpOwotICAgICAgICBpZiAoZG9j
dW1lbnRMb2FkZXIgJiYgZG9jdW1lbnRMb2FkZXItPmlzTG9hZGluZ01haW5SZXNvdXJjZSgpKQot
ICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXItPmNhbmNlbE1haW5SZXNvdXJjZUxvYWQoZXJyb3Ip
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghbV9sb2FkZXItPmlzRG9uZSgpKQot
ICAgICAgICBtX2xvYWRlci0+Y2FuY2VsKGVycm9yKTsKLX0KLQotdm9pZCBXZWJOZXRzY2FwZVBs
dWdpblN0cmVhbTo6ZGVzdHJveVN0cmVhbVdpdGhFcnJvcihOU0Vycm9yICplcnJvcikKLXsKLSAg
ICBkZXN0cm95U3RyZWFtV2l0aFJlYXNvbihyZWFzb25Gb3JFcnJvcihlcnJvcikpOwotfQotCi12
b2lkIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpkaWRGYWlsKFdlYkNvcmU6Ok5ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgZXJyb3IpCi17
Ci0gICAgZGVzdHJveVN0cmVhbVdpdGhFcnJvcihlcnJvcik7Ci19Ci0KLXZvaWQgV2ViTmV0c2Nh
cGVQbHVnaW5TdHJlYW06OmNhbmNlbExvYWRBbmREZXN0cm95U3RyZWFtV2l0aEVycm9yKE5TRXJy
b3IgKmVycm9yKQotewotICAgIFJlZjxXZWJOZXRzY2FwZVBsdWdpblN0cmVhbT4gcHJvdGVjdCgq
dGhpcyk7Ci0gICAgY2FuY2VsTG9hZFdpdGhFcnJvcihlcnJvcik7Ci0gICAgZGVzdHJveVN0cmVh
bVdpdGhFcnJvcihlcnJvcik7Ci0gICAgc2V0UGx1Z2luKDApOwotfSAgICAKLQotdm9pZCBXZWJO
ZXRzY2FwZVBsdWdpblN0cmVhbTo6ZGVsaXZlckRhdGEoKQotewotICAgIGlmICghbV9zdHJlYW0u
bmRhdGEgfHwgW21fZGVsaXZlcnlEYXRhLmdldCgpIGxlbmd0aF0gPT0gMCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgUmVmPFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtPiBwcm90ZWN0KCp0aGlzKTsK
LQotICAgIGludDMyX3QgdG90YWxCeXRlcyA9IFttX2RlbGl2ZXJ5RGF0YS5nZXQoKSBsZW5ndGhd
OwotICAgIGludDMyX3QgdG90YWxCeXRlc0RlbGl2ZXJlZCA9IDA7Ci0KLSAgICB3aGlsZSAodG90
YWxCeXRlc0RlbGl2ZXJlZCA8IHRvdGFsQnl0ZXMpIHsKLSAgICAgICAgUGx1Z2luU3RvcERlZmVy
cmVyIGRlZmVycmVyKG1fcGx1Z2luVmlldy5nZXQoKSk7Ci0gICAgICAgIGludDMyX3QgZGVsaXZl
cnlCeXRlcyA9IG1fcGx1Z2luRnVuY3MtPndyaXRlcmVhZHkobV9wbHVnaW4sICZtX3N0cmVhbSk7
Ci0gICAgICAgIExPRyhQbHVnaW5zLCAiTlBQX1dyaXRlUmVhZHkgcmVzcG9uc2VVUkw9JUAgYnl0
ZXM9JWQiLCBtX3Jlc3BvbnNlVVJMLmdldCgpLCBkZWxpdmVyeUJ5dGVzKTsKLQotICAgICAgICBp
ZiAobV9pc1Rlcm1pbmF0ZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKGRl
bGl2ZXJ5Qnl0ZXMgPD0gMCkgewotICAgICAgICAgICAgLy8gUGx1Zy1pbiBjYW4ndCByZWNlaXZl
IGFueW1vcmUgZGF0YSByaWdodCBub3cuIFNlbmQgaXQgbGF0ZXIuCi0gICAgICAgICAgICBpZiAo
IW1fZGVsaXZlckRhdGFUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICAgICAgICAgIG1fZGVsaXZl
ckRhdGFUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IHN0ZDo6bWluKGRlbGl2ZXJ5
Qnl0ZXMsIHRvdGFsQnl0ZXMgLSB0b3RhbEJ5dGVzRGVsaXZlcmVkKTsKLSAgICAgICAgICAgIE5T
RGF0YSAqc3ViZGF0YSA9IFttX2RlbGl2ZXJ5RGF0YS5nZXQoKSBzdWJkYXRhV2l0aFJhbmdlOk5T
TWFrZVJhbmdlKHRvdGFsQnl0ZXNEZWxpdmVyZWQsIGRlbGl2ZXJ5Qnl0ZXMpXTsKLSAgICAgICAg
ICAgIFBsdWdpblN0b3BEZWZlcnJlciBkZWZlcnJlcihtX3BsdWdpblZpZXcuZ2V0KCkpOwotICAg
ICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1fcGx1Z2luRnVuY3MtPndyaXRlKG1fcGx1Z2luLCAm
bV9zdHJlYW0sIG1fb2Zmc2V0LCBbc3ViZGF0YSBsZW5ndGhdLCBjb25zdF9jYXN0PHZvaWQqPihb
c3ViZGF0YSBieXRlc10pKTsKLSAgICAgICAgICAgIGlmIChkZWxpdmVyeUJ5dGVzIDwgMCkgewot
ICAgICAgICAgICAgICAgIC8vIE5ldHNjYXBlIGRvY3VtZW50YXRpb24gc2F5cyB0aGF0IGEgbmVn
YXRpdmUgcmVzdWx0IGZyb20gTlBQX1dyaXRlIG1lYW5zIGNhbmNlbCB0aGUgbG9hZC4KLSAgICAg
ICAgICAgICAgICBjYW5jZWxMb2FkQW5kRGVzdHJveVN0cmVhbVdpdGhFcnJvcihwbHVnaW5DYW5j
ZWxsZWRDb25uZWN0aW9uRXJyb3IoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IHN0ZDo6bWluPGludDMyX3Q+KGRl
bGl2ZXJ5Qnl0ZXMsIFtzdWJkYXRhIGxlbmd0aF0pOwotICAgICAgICAgICAgbV9vZmZzZXQgKz0g
ZGVsaXZlcnlCeXRlczsKLSAgICAgICAgICAgIHRvdGFsQnl0ZXNEZWxpdmVyZWQgKz0gZGVsaXZl
cnlCeXRlczsKLSAgICAgICAgICAgIExPRyhQbHVnaW5zLCAiTlBQX1dyaXRlIHJlc3BvbnNlVVJM
PSVAIGJ5dGVzPSVkIHRvdGFsLWRlbGl2ZXJlZD0lZC8lZCIsIG1fcmVzcG9uc2VVUkwuZ2V0KCks
IGRlbGl2ZXJ5Qnl0ZXMsIG1fb2Zmc2V0LCBtX3N0cmVhbS5lbmQpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKHRvdGFsQnl0ZXNEZWxpdmVyZWQgPiAwKSB7Ci0gICAgICAgIGlmICh0b3Rh
bEJ5dGVzRGVsaXZlcmVkIDwgdG90YWxCeXRlcykgewotICAgICAgICAgICAgYXV0byBuZXdEZWxp
dmVyeURhdGEgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0
eTp0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZF0pOwotICAgICAgICAgICAgW25ld0Rl
bGl2ZXJ5RGF0YSBhcHBlbmRCeXRlczpzdGF0aWNfY2FzdDxjaGFyKj4oY29uc3RfY2FzdDx2b2lk
Kj4oW21fZGVsaXZlcnlEYXRhLmdldCgpIGJ5dGVzXSkpICsgdG90YWxCeXRlc0RlbGl2ZXJlZCBs
ZW5ndGg6dG90YWxCeXRlcyAtIHRvdGFsQnl0ZXNEZWxpdmVyZWRdOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YSA9IFdURk1vdmUobmV3RGVsaXZlcnlEYXRhKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFttX2RlbGl2ZXJ5RGF0YS5nZXQoKSBzZXRMZW5n
dGg6MF07Ci0gICAgICAgICAgICBpZiAobV9yZWFzb24gIT0gV0VCX1JFQVNPTl9OT05FKSAKLSAg
ICAgICAgICAgICAgICBkZXN0cm95U3RyZWFtKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZv
aWQgV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OmRlbGl2ZXJEYXRhVG9GaWxlKE5TRGF0YSAqZGF0
YSkKLXsKLSAgICBpZiAobV9maWxlRGVzY3JpcHRvciA9PSAtMSAmJiAhbV9wYXRoKSB7Ci0gICAg
ICAgIE5TU3RyaW5nICp0ZW1wb3JhcnlGaWxlTWFzayA9IFtOU1RlbXBvcmFyeURpcmVjdG9yeSgp
IHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIldlYktpdFBsdWdJblN0cmVhbVhYWFhY
WCJdOwotICAgICAgICBjaGFyICp0ZW1wb3JhcnlGaWxlTmFtZSA9IHN0cmR1cChbdGVtcG9yYXJ5
RmlsZU1hc2sgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uXSk7Ci0gICAgICAgIG1fZmlsZURlc2Ny
aXB0b3IgPSBta3N0ZW1wKHRlbXBvcmFyeUZpbGVOYW1lKTsKLSAgICAgICAgaWYgKG1fZmlsZURl
c2NyaXB0b3IgPT0gLTEpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiQ2FuJ3QgY3JlYXRlIGEg
dGVtcG9yYXJ5IGZpbGUuIik7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIG5ldHdvcmsg
ZXJyb3IsIGJ1dCB0aGUgb25seSBlcnJvciBjb2RlcyBhcmUgIm5ldHdvcmsgZXJyb3IiIGFuZCAi
dXNlciBicmVhayIuCi0gICAgICAgICAgICBkZXN0cm95U3RyZWFtV2l0aFJlYXNvbihOUFJFU19O
RVRXT1JLX0VSUik7Ci0gICAgICAgICAgICBmcmVlKHRlbXBvcmFyeUZpbGVOYW1lKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1fcGF0aCA9IFtOU1N0cmluZyBz
dHJpbmdXaXRoVVRGOFN0cmluZzp0ZW1wb3JhcnlGaWxlTmFtZV07Ci0gICAgICAgIGZyZWUodGVt
cG9yYXJ5RmlsZU5hbWUpOwotICAgIH0KLQotICAgIGludCBkYXRhTGVuZ3RoID0gW2RhdGEgbGVu
Z3RoXTsKLSAgICBpZiAoIWRhdGFMZW5ndGgpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCBi
eXRlQ291bnQgPSB3cml0ZShtX2ZpbGVEZXNjcmlwdG9yLCBbZGF0YSBieXRlc10sIGRhdGFMZW5n
dGgpOwotICAgIGlmIChieXRlQ291bnQgIT0gZGF0YUxlbmd0aCkgewotICAgICAgICAvLyBUaGlz
IGhhcHBlbnMgb25seSByYXJlbHksIHdoZW4gd2UgYXJlIG91dCBvZiBkaXNrIHNwYWNlIG9yIGhh
dmUgYSBkaXNrIEkvTyBlcnJvci4KLSAgICAgICAgTE9HX0VSUk9SKCJlcnJvciB3cml0aW5nIHRv
IHRlbXBvcmFyeSBmaWxlLCBlcnJubyAlZCIsIGVycm5vKTsKLSAgICAgICAgY2xvc2UobV9maWxl
RGVzY3JpcHRvcik7Ci0gICAgICAgIG1fZmlsZURlc2NyaXB0b3IgPSAtMTsKLQotICAgICAgICAv
LyBUaGlzIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IsIGJ1dCB0aGUgb25seSBlcnJvciBjb2RlcyBh
cmUgIm5ldHdvcmsgZXJyb3IiIGFuZCAidXNlciBicmVhayIuCi0gICAgICAgIGRlc3Ryb3lTdHJl
YW1XaXRoUmVhc29uKE5QUkVTX05FVFdPUktfRVJSKTsKLSAgICAgICAgbV9wYXRoID0gMDsKLSAg
ICB9Ci19Ci0KLXZvaWQgV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OmRpZEZpbmlzaExvYWRpbmco
TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqKQotewotICAgIGlmICghbV9zdHJlYW0ubmRhdGEp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAobV90cmFuc2Zlck1vZGUgPT0gTlBfQVNG
SUxFIHx8IG1fdHJhbnNmZXJNb2RlID09IE5QX0FTRklMRU9OTFkpIHsKLSAgICAgICAgLy8gRmFr
ZSB0aGUgZGVsaXZlcnkgb2YgYW4gZW1wdHkgZGF0YSB0byBlbnN1cmUgdGhhdCB0aGUgZmlsZSBo
YXMgYmVlbiBjcmVhdGVkCi0gICAgICAgIGRlbGl2ZXJEYXRhVG9GaWxlKFtOU0RhdGEgZGF0YV0p
OwotICAgICAgICBpZiAobV9maWxlRGVzY3JpcHRvciAhPSAtMSkKLSAgICAgICAgICAgIGNsb3Nl
KG1fZmlsZURlc2NyaXB0b3IpOwotICAgICAgICBtX2ZpbGVEZXNjcmlwdG9yID0gLTE7Ci0gICAg
fQotICAgIAotICAgIGRlc3Ryb3lTdHJlYW1XaXRoUmVhc29uKE5QUkVTX0RPTkUpOwotfQotCi12
b2lkIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpkaWRSZWNlaXZlRGF0YShOZXRzY2FwZVBsdWdJ
blN0cmVhbUxvYWRlciosIGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBpbnQgbGVuZ3RoKQotewotICAg
IGF1dG8gZGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXNOb0NvcHk6
KHZvaWQqKWJ5dGVzIGxlbmd0aDpsZW5ndGggZnJlZVdoZW5Eb25lOk5PXSk7Ci0KLSAgICBBU1NF
UlQoW2RhdGEgbGVuZ3RoXSA+IDApOwotICAgIAotICAgIGlmIChtX3RyYW5zZmVyTW9kZSAhPSBO
UF9BU0ZJTEVPTkxZKSB7Ci0gICAgICAgIGlmICghbV9kZWxpdmVyeURhdGEpCi0gICAgICAgICAg
ICBtX2RlbGl2ZXJ5RGF0YSA9IGFkb3B0TlMoW1tOU011dGFibGVEYXRhIGFsbG9jXSBpbml0V2l0
aENhcGFjaXR5OltkYXRhIGxlbmd0aF1dKTsKLSAgICAgICAgW21fZGVsaXZlcnlEYXRhLmdldCgp
IGFwcGVuZERhdGE6ZGF0YS5nZXQoKV07Ci0gICAgICAgIGRlbGl2ZXJEYXRhKCk7Ci0gICAgfQot
ICAgIGlmIChtX3RyYW5zZmVyTW9kZSA9PSBOUF9BU0ZJTEUgfHwgbV90cmFuc2Zlck1vZGUgPT0g
TlBfQVNGSUxFT05MWSkKLSAgICAgICAgZGVsaXZlckRhdGFUb0ZpbGUoZGF0YS5nZXQoKSk7Ci19
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9X
ZWJOZXRzY2FwZVBsdWdpblZpZXcuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMv
V2ViTmV0c2NhcGVQbHVnaW5WaWV3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNh
YjkxNDJhOTM1NDE5MGY4NTc2ZmI5YjE0OGVlMGQ5NTE2ZTA1YTAuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1
Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2ltcG9ydCAiV2ViQmFzZU5l
dHNjYXBlUGx1Z2luVmlldy5oIgotI2ltcG9ydCA8V2ViS2l0TGVnYWN5L25wZnVuY3Rpb25zLmg+
Ci0jaW1wb3J0IDxXZWJLaXRMZWdhY3kvbnBhcGkuaD4KLSNpbXBvcnQgPHd0Zi9IYXNoTWFwLmg+
Ci0jaW1wb3J0IDx3dGYvSGFzaFNldC5oPgotCi1AY2xhc3MgV2ViTmV0c2NhcGVQbHVnaW5QYWNr
YWdlOwotCi1jbGFzcyBQbHVnaW5UaW1lcjsKLWNsYXNzIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFt
OwotY2xhc3MgV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXI7Ci0KLXR5cGVkZWYgdW5pb24g
UGx1Z2luUG9ydCB7Ci0gICAgTlBfQ0dDb250ZXh0IGNnUG9ydDsKLX0gUGx1Z2luUG9ydDsKLQot
Ly8gQmVjYXVzZSB0aGUgQWRvYmUgNy54IEFjcm9iYXQgcGx1Zy1pbiBoYXMgYSBoYXJkIGNvZGVk
IGNoZWNrIGZvciBhIHZpZXcgbmFtZWQgCi0vLyAiV2ViTmV0c2NhcGVQbHVnaW5Eb2N1bWVudFZp
ZXciLCB0aGlzIGNsYXNzIG11c3QgcmV0YWluIHRoZSBvbGQgbmFtZSBpbiBvcmRlciAKLS8vIGZv
ciB0aGUgcGx1Zy1pbiB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIChyZGFyOi8vcHJvYmxlbS80Njk5
NDU1KQotI2RlZmluZSBXZWJOZXRzY2FwZVBsdWdpblZpZXcgV2ViTmV0c2NhcGVQbHVnaW5Eb2N1
bWVudFZpZXcKLQotQGludGVyZmFjZSBXZWJOZXRzY2FwZVBsdWdpblZpZXcgOiBXZWJCYXNlTmV0
c2NhcGVQbHVnaW5WaWV3PFdlYlBsdWdpbk1hbnVhbExvYWRlcj4KLXsKLUBwYWNrYWdlCi0gICAg
UmVmUHRyPFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtPiBfbWFudWFsU3RyZWFtOwotICAgIFJldGFp
blB0cjxDQUxheWVyPiBfcGx1Z2luTGF5ZXI7Ci0gICAgdW5zaWduZWQgX2RhdGFMZW5ndGhSZWNl
aXZlZDsKLSAgICBSZXRhaW5QdHI8TlNFcnJvcj4gX2Vycm9yOwotCi0gICAgTlBPYmplY3QqIF9l
bGVtZW50TlBPYmplY3Q7Ci0KLSAgICB1bnNpZ25lZCBhcmdzQ291bnQ7Ci0gICAgY2hhciAqKmNB
dHRyaWJ1dGVzOwotICAgIGNoYXIgKipjVmFsdWVzOwotICAgICAgICAKLSAgICBOUFAgcGx1Z2lu
OwotICAgIE5QV2luZG93IHdpbmRvdzsKLSAgICBOUFdpbmRvdyBsYXN0U2V0V2luZG93OwotICAg
IFBsdWdpblBvcnQgblBvcnQ7Ci0gICAgUGx1Z2luUG9ydCBsYXN0U2V0UG9ydDsKLSAgICBOUERy
YXdpbmdNb2RlbCBkcmF3aW5nTW9kZWw7Ci0gICAgTlBFdmVudE1vZGVsIGV2ZW50TW9kZWw7Ci0K
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXI+IF9ldmVu
dEhhbmRsZXI7Ci0gICAgCi0gICAgQk9PTCBpblNldFdpbmRvdzsKLSAgICBCT09MIHNob3VsZFN0
b3BTb29uOwotCi0gICAgdWludDMyX3QgY3VycmVudFRpbWVySUQ7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPEhhc2hNYXA8dWludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5UaW1lcj4+PiB0aW1l
cnM7Ci0KLSAgICB1bnNpZ25lZCBwbHVnaW5GdW5jdGlvbkNhbGxEZXB0aDsKLSAgICAKLSAgICBp
bnQzMl90IHNwZWNpZmllZEhlaWdodDsKLSAgICBpbnQzMl90IHNwZWNpZmllZFdpZHRoOwotICAg
ICAgICAgICAgCi0gICAgSGFzaFNldDxSZWZQdHI8V2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0+PiBz
dHJlYW1zOwotICAgIFJldGFpblB0cjxOU01hcFRhYmxlPiBfcGVuZGluZ0ZyYW1lTG9hZHM7Ci0g
ICAgCi0gICAgQk9PTCBfaXNGbGFzaDsKLSAgICBCT09MIF9pc1NpbHZlcmxpZ2h0OwotfQotCi0r
IChXZWJOZXRzY2FwZVBsdWdpblZpZXcgKiljdXJyZW50UGx1Z2luVmlldzsKLQotCi0tIChpZClp
bml0V2l0aEZyYW1lOihOU1JlY3QpcgotICAgICAgcGx1Z2luUGFja2FnZTooV2ViTmV0c2NhcGVQ
bHVnaW5QYWNrYWdlICopdGhlUGx1Z2luUGFja2FnZQotICAgICAgICAgICAgICAgIFVSTDooTlNV
UkwgKilVUkwKLSAgICAgICAgICAgIGJhc2VVUkw6KE5TVVJMICopYmFzZVVSTAotICAgICAgICAg
ICBNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FCi0gICAgICBhdHRyaWJ1dGVLZXlzOihOU0FycmF5
ICopa2V5cwotICAgIGF0dHJpYnV0ZVZhbHVlczooTlNBcnJheSAqKXZhbHVlcwotICAgICAgIGxv
YWRNYW51YWxseTooQk9PTClsb2FkTWFudWFsbHkKLSAgICAgICAgICAgIGVsZW1lbnQ6KFJlZlB0
cjxXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudD4mJillbGVtZW50OwotCi0KLS0gKE5QUClwbHVn
aW47Ci0KLS0gKHZvaWQpZGlzY29ubmVjdFN0cmVhbTooV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0q
KXN0cmVhbTsKLQotLy8gUmV0dXJucyB0aGUgTlBPYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBw
bHVnaW4gaW50ZXJmYWNlLgotLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSBy
ZXRhaW5lZC4KLS0gKE5QT2JqZWN0ICopY3JlYXRlUGx1Z2luU2NyaXB0YWJsZU9iamVjdDsKLQot
Ly8gUmV0dXJucyB0aGUgZm9ybSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHBsdWdpbiBpbnN0
YW5jZS4KLS0gKEJPT0wpZ2V0Rm9ybVZhbHVlOihOU1N0cmluZyAqKil2YWx1ZTsKLQotLy8gLXdp
bGxDYWxsUGx1Z0luRnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYW55IG9m
IHRoZSBOUFBfKiBmdW5jdGlvbnMgZm9yIHRoaXMgdmlldydzIHBsdWdpbi4KLS8vIFRoaXMgaXMg
bmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IHBsdWctaW5zIGFyZSBub3QgZGVzdHJveWVkIHdoaWxl
IFdlYktpdCBjYWxscyBpbnRvIHRoZW0uICBTb21lIHBsdWctaW5zIChGbGFzaAotLy8gYXQgbGVh
c3QpIGFyZSB3cml0dGVuIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCBub3RoaW5nIHRoZXkgZG8g
aW4gdGhlaXIgcGx1Zy1pbiBmdW5jdGlvbnMgY2FuIGNhdXNlIE5QUF9EZXN0cm95KCkKLS8vIHRv
IGJlIGNhbGxlZC4gIFVuZm9ydHVuYXRlbHksIHRoaXMgaXMgbm90IHRydWUsIGVzcGVjaWFsbHkg
aWYgdGhlIHBsdWctaW4gdXNlcyBOUE5fSW52b2tlKCkgdG8gZXhlY3V0ZSBhCi0vLyBkb2N1bWVu
dC53cml0ZSgpLCB3aGljaCBjbGVhcnMgdGhlIGRvY3VtZW50IGFuZCBkZXN0cm95cyB0aGUgcGx1
Zy1pbi4KLS8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNDQ4MDczNz4uCi0tICh2b2lkKXdpbGxDYWxs
UGx1Z0luRnVuY3Rpb247Ci0KLS8vIC1kaWRDYWxsUGx1Z0luRnVuY3Rpb24gc2hvdWxkIGJlIGNh
bGxlZCBhZnRlciByZXR1cm5pbmcgZnJvbSBhIHBsdWctaW4gZnVuY3Rpb24uICBJdCBzaG91bGQg
YmUgY2FsbGVkIGV4YWN0bHkKLS8vIG9uY2UgZm9yIGV2ZXJ5IGNhbGwgdG8gLXdpbGxDYWxsUGx1
Z0luRnVuY3Rpb24uCi0vLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzQ0ODA3Mzc+LgotLSAodm9pZClk
aWRDYWxsUGx1Z0luRnVuY3Rpb247Ci0KLS0gKHZvaWQpaGFuZGxlTW91c2VNb3ZlZDooTlNFdmVu
dCAqKWV2ZW50OwotLSAodm9pZCloYW5kbGVNb3VzZUVudGVyZWQ6KE5TRXZlbnQgKilldmVudDsK
LS0gKHZvaWQpaGFuZGxlTW91c2VFeGl0ZWQ6KE5TRXZlbnQgKilldmVudDsKLQotQGVuZAotCi1A
aW50ZXJmYWNlIFdlYk5ldHNjYXBlUGx1Z2luVmlldyAoV2ViSW50ZXJuYWwpCi0tIChCT09MKXNl
bmRFdmVudDoodm9pZCopZXZlbnQgaXNEcmF3UmVjdDooQk9PTClldmVudElzRHJhd1JlY3Q7Ci0t
IChOUEV2ZW50TW9kZWwpZXZlbnRNb2RlbDsKLS0gKENBTGF5ZXIgKilwbHVnaW5MYXllcjsKLS0g
KE5QRXJyb3IpbG9hZFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QgaW5UYXJnZXQ6KE5T
U3RyaW5nICopdGFyZ2V0IHdpdGhOb3RpZnlEYXRhOih2b2lkICopbm90aWZ5RGF0YSBzZW5kTm90
aWZpY2F0aW9uOihCT09MKXNlbmROb3RpZmljYXRpb247Ci0tIChOUEVycm9yKWdldFVSTE5vdGlm
eTooY29uc3QgY2hhciAqKVVSTCB0YXJnZXQ6KGNvbnN0IGNoYXIgKil0YXJnZXQgbm90aWZ5RGF0
YToodm9pZCAqKW5vdGlmeURhdGE7Ci0tIChOUEVycm9yKWdldFVSTDooY29uc3QgY2hhciAqKVVS
TCB0YXJnZXQ6KGNvbnN0IGNoYXIgKil0YXJnZXQ7Ci0tIChOUEVycm9yKXBvc3RVUkxOb3RpZnk6
KGNvbnN0IGNoYXIgKilVUkwgdGFyZ2V0Oihjb25zdCBjaGFyICopdGFyZ2V0IGxlbjooVUludDMy
KWxlbiBidWY6KGNvbnN0IGNoYXIgKilidWYgZmlsZTooTlBCb29sKWZpbGUgbm90aWZ5RGF0YToo
dm9pZCAqKW5vdGlmeURhdGE7Ci0tIChOUEVycm9yKXBvc3RVUkw6KGNvbnN0IGNoYXIgKilVUkwg
dGFyZ2V0Oihjb25zdCBjaGFyICopdGFyZ2V0IGxlbjooVUludDMyKWxlbiBidWY6KGNvbnN0IGNo
YXIgKilidWYgZmlsZTooTlBCb29sKWZpbGU7Ci0tIChOUEVycm9yKW5ld1N0cmVhbTooTlBNSU1F
VHlwZSl0eXBlIHRhcmdldDooY29uc3QgY2hhciAqKXRhcmdldCBzdHJlYW06KE5QU3RyZWFtKiop
c3RyZWFtOwotLSAoTlBFcnJvcil3cml0ZTooTlBTdHJlYW0qKXN0cmVhbSBsZW46KFNJbnQzMils
ZW4gYnVmZmVyOih2b2lkICopYnVmZmVyOwotLSAoTlBFcnJvcilkZXN0cm95U3RyZWFtOihOUFN0
cmVhbSopc3RyZWFtIHJlYXNvbjooTlBSZWFzb24pcmVhc29uOwotLSAodm9pZClzdGF0dXM6KGNv
bnN0IGNoYXIgKiltZXNzYWdlOwotLSAoY29uc3QgY2hhciAqKXVzZXJBZ2VudDsKLS0gKHZvaWQp
aW52YWxpZGF0ZVJlY3Q6KE5QUmVjdCAqKWludmFsaWRSZWN0OwotLSAodm9pZClpbnZhbGlkYXRl
UmVnaW9uOihOUFJlZ2lvbilpbnZhbGlkYXRlUmVnaW9uOwotLSAodm9pZClmb3JjZVJlZHJhdzsK
LS0gKE5QRXJyb3IpZ2V0VmFyaWFibGU6KE5QTlZhcmlhYmxlKXZhcmlhYmxlIHZhbHVlOih2b2lk
ICopdmFsdWU7Ci0tIChOUEVycm9yKXNldFZhcmlhYmxlOihOUFBWYXJpYWJsZSl2YXJpYWJsZSB2
YWx1ZToodm9pZCAqKXZhbHVlOwotLSAodWludDMyX3Qpc2NoZWR1bGVUaW1lcldpdGhJbnRlcnZh
bDoodWludDMyX3QpaW50ZXJ2YWwgcmVwZWF0OihOUEJvb2wpcmVwZWF0IHRpbWVyRnVuYzoodm9p
ZCAoKikoTlBQIG5wcCwgdWludDMyX3QgdGltZXJJRCkpdGltZXJGdW5jOwotLSAodm9pZCl1bnNj
aGVkdWxlVGltZXI6KHVpbnQzMl90KXRpbWVySUQ7Ci0tIChOUEVycm9yKXBvcFVwQ29udGV4dE1l
bnU6KE5QTWVudSAqKW1lbnU7Ci0tIChOUEVycm9yKWdldFZhcmlhYmxlOihOUE5VUkxWYXJpYWJs
ZSl2YXJpYWJsZSBmb3JVUkw6KGNvbnN0IGNoYXIqKXVybCB2YWx1ZTooY2hhcioqKXZhbHVlIGxl
bmd0aDoodWludDMyX3QqKWxlbmd0aDsKLS0gKE5QRXJyb3Ipc2V0VmFyaWFibGU6KE5QTlVSTFZh
cmlhYmxlKXZhcmlhYmxlIGZvclVSTDooY29uc3QgY2hhciopdXJsIHZhbHVlOihjb25zdCBjaGFy
Kil2YWx1ZSBsZW5ndGg6KHVpbnQzMl90KWxlbmd0aDsKLS0gKE5QRXJyb3IpZ2V0QXV0aGVudGlj
YXRpb25JbmZvV2l0aFByb3RvY29sOihjb25zdCBjaGFyKikgcHJvdG9jb2wgaG9zdDooY29uc3Qg
Y2hhciopaG9zdCBwb3J0OihpbnQzMl90KXBvcnQgc2NoZW1lOihjb25zdCBjaGFyKilzY2hlbWUg
cmVhbG06KGNvbnN0IGNoYXIqKXJlYWxtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1c2VybmFtZTooY2hhcioqKXVzZXJuYW1lIHVzZXJuYW1lTGVuZ3RoOih1aW50MzJfdCop
dXNlcm5hbWVMZW5ndGggCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNz
d29yZDooY2hhcioqKXBhc3N3b3JkIHBhc3N3b3JkTGVuZ3RoOih1aW50MzJfdCopcGFzc3dvcmRM
ZW5ndGg7Ci1AZW5kCi0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhOGEyZWU4MTcxYTJkYjhkODJjOGJiMDVhOTlkZDAwNDE2OWVhZWQ0Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCisrKyAvZGV2L251
bGwKQEAgLTEsMTg3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
Ci0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0j
aW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpblZpZXcuaCIKLQotI2ltcG9ydCAiV2ViRGF0YVNvdXJj
ZUludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJEZWZhdWx0VUlEZWxlZ2F0ZS5oIgotI2ltcG9ydCAi
V2ViRnJhbWVJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViRnJhbWVWaWV3LmgiCi0jaW1wb3J0ICJX
ZWJLaXRFcnJvcnNQcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJLaXRMb2dnaW5nLmgiCi0jaW1wb3J0
ICJXZWJLaXROU1N0cmluZ0V4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNEYXRhRXh0cmFzLmgiCi0j
aW1wb3J0ICJXZWJOU0RpY3Rpb25hcnlFeHRyYXMuaCIKLSNpbXBvcnQgIldlYk5TT2JqZWN0RXh0
cmFzLmgiCi0jaW1wb3J0ICJXZWJOU1VSTEV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNVUkxSZXF1
ZXN0RXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJOU1ZpZXdFeHRyYXMuaCIKLSNpbXBvcnQgIldlYk5l
dHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyLmgiCi0jaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpblBh
Y2thZ2UuaCIKLSNpbXBvcnQgIldlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLmgiCi0jaW1wb3J0ICJX
ZWJQbHVnaW5SZXF1ZXN0LmgiCi0jaW1wb3J0ICJXZWJQcmVmZXJlbmNlcy5oIgotI2ltcG9ydCAi
V2ViVUlEZWxlZ2F0ZVByaXZhdGUuaCIKLSNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgotI2lt
cG9ydCA8Q2FyYm9uL0NhcmJvbi5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5pdGlhbGl6
ZVRocmVhZGluZy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNMb2NrLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL0NvbW1vblZNLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0Nvb2tpZUphci5oPgotI2lt
cG9ydCA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9FbGVtZW50
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9h
ZGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVHJlZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9G
cmFtZVZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTFBsdWdJbkVsZW1lbnQuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvTlBfanNvYmplY3QuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgotI2lt
cG9ydCA8V2ViQ29yZS9Qcm94eVNlcnZlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3JpcHRDb250
cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL1VzZXJHZXN0dXJlSW5kaWNhdG9yLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVK
SVRPcGVyYXRpb25zLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVVUkxSZXNwb25zZS5oPgot
I2ltcG9ydCA8V2ViQ29yZS9ucHJ1bnRpbWVfaW1wbC5oPgotI2ltcG9ydCA8V2ViQ29yZS9ydW50
aW1lX3Jvb3QuaD4KLSNpbXBvcnQgPFdlYktpdExlZ2FjeS9ET01Qcml2YXRlLmg+Ci0jaW1wb3J0
IDxXZWJLaXRMZWdhY3kvV2ViVUlEZWxlZ2F0ZS5oPgotI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+
Ci0jaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2ltcG9ydCA8d3RmL0Fz
c2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW1wb3J0IDx3dGYvUnVu
TG9vcC5oPgotI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLSNkZWZpbmUgTG9naW5XaW5kb3dEaWRTd2l0Y2hGcm9tVXNlck5vdGlmaWNh
dGlvbiAgICBAIldlYkxvZ2luV2luZG93RGlkU3dpdGNoRnJvbVVzZXJOb3RpZmljYXRpb24iCi0j
ZGVmaW5lIExvZ2luV2luZG93RGlkU3dpdGNoVG9Vc2VyTm90aWZpY2F0aW9uICAgICAgQCJXZWJM
b2dpbldpbmRvd0RpZFN3aXRjaFRvVXNlck5vdGlmaWNhdGlvbiIKLSNkZWZpbmUgV0tOVlN1cHBv
cnRzQ29tcG9zaXRpbmdDb3JlQW5pbWF0aW9uUGx1Z2luc0Jvb2wgNzQ2NTYgIC8qIFRSVUUgaWYg
dGhlIGJyb3dzZXIgc3VwcG9ydHMgaGFyZHdhcmUgY29tcG9zaXRpbmcgb2YgQ29yZSBBbmltYXRp
b24gcGx1Zy1pbnMgICovCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKLQotQGludGVyZmFjZSBXZWJOZXRzY2FwZVBsdWdpblZpZXcgKEludGVybmFs
KQotLSAoTlBFcnJvcilfY3JlYXRlUGx1Z2luOwotLSAodm9pZClfZGVzdHJveVBsdWdpbjsKLS0g
KHZvaWQpX3JlZGVsaXZlclN0cmVhbTsKLS0gKEJPT0wpX3Nob3VsZENhbmNlbFNyY1N0cmVhbTsK
LUBlbmQKLQotc3RhdGljIFdlYk5ldHNjYXBlUGx1Z2luVmlldyAqY3VycmVudFBsdWdpblZpZXcg
PSBuaWw7Ci0KLXR5cGVkZWYgc3RydWN0IE9wYXF1ZVBvcnRTdGF0ZSogUG9ydFN0YXRlOwotCi1z
dGF0aWMgY29uc3QgU2Vjb25kcyB0aHJvdHRsZWRUaW1lckludGVydmFsIHsgMjUwX21zIH07Ci0K
LWNsYXNzIFBsdWdpblRpbWVyIDogcHVibGljIFRpbWVyQmFzZSB7Ci1wdWJsaWM6Ci0gICAgdHlw
ZWRlZiB2b2lkICgqVGltZXJGdW5jKShOUFAgbnBwLCB1aW50MzJfdCB0aW1lcklEKTsKLSAgICAK
LSAgICBQbHVnaW5UaW1lcihOUFAgbnBwLCB1aW50MzJfdCB0aW1lcklELCB1aW50MzJfdCBpbnRl
cnZhbCwgTlBCb29sIHJlcGVhdCwgVGltZXJGdW5jIHRpbWVyRnVuYykKLSAgICAgICAgOiBtX25w
cChucHApCi0gICAgICAgICwgbV90aW1lcklEKHRpbWVySUQpCi0gICAgICAgICwgbV9pbnRlcnZh
bChpbnRlcnZhbCkKLSAgICAgICAgLCBtX3JlcGVhdChyZXBlYXQpCi0gICAgICAgICwgbV90aW1l
ckZ1bmModGltZXJGdW5jKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzdGFydChib29s
IHRocm90dGxlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFpc0FjdGl2ZSgpKTsKLQotICAgICAg
ICBTZWNvbmRzIHRpbWVJbnRlcnZhbCA9IDFfbXMgKiBtX2ludGVydmFsOwotICAgICAgICAKLSAg
ICAgICAgaWYgKHRocm90dGxlKQotICAgICAgICAgICAgdGltZUludGVydmFsID0gc3RkOjptYXgo
dGltZUludGVydmFsLCB0aHJvdHRsZWRUaW1lckludGVydmFsKTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChtX3JlcGVhdCkKLSAgICAgICAgICAgIHN0YXJ0UmVwZWF0aW5nKFNlY29uZHMgeyB0aW1l
SW50ZXJ2YWwgfSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YXJ0T25lU2hvdCh0aW1l
SW50ZXJ2YWwpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgZmlyZWQoKSAK
LSAgICB7Ci0gICAgICAgIG1fdGltZXJGdW5jKG1fbnBwLCBtX3RpbWVySUQpOwotICAgICAgICBp
ZiAoIW1fcmVwZWF0KQotICAgICAgICAgICAgZGVsZXRlIHRoaXM7Ci0gICAgfQotICAgIAotICAg
IE5QUCBtX25wcDsKLSAgICB1aW50MzJfdCBtX3RpbWVySUQ7Ci0gICAgdWludDMyX3QgbV9pbnRl
cnZhbDsKLSAgICBOUEJvb2wgbV9yZXBlYXQ7Ci0gICAgVGltZXJGdW5jIG1fdGltZXJGdW5jOwot
fTsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIENHQ29udGV4dFJlZiBjb250ZXh0OwotfSBQb3J0
U3RhdGVfQ0c7Ci0KLUBjbGFzcyBOU1RleHRJbnB1dENvbnRleHQ7Ci1AaW50ZXJmYWNlIE5TUmVz
cG9uZGVyIChBcHBLaXREZXRhaWxzKQotLSAoTlNUZXh0SW5wdXRDb250ZXh0ICopaW5wdXRDb250
ZXh0OwotQGVuZAotCi1AaW50ZXJmYWNlIFdlYk5ldHNjYXBlUGx1Z2luVmlldyAoRm9yd2FyZERl
Y2xhcmF0aW9ucykKLS0gKHZvaWQpc2V0V2luZG93SWZOZWNlc3Nhcnk7Ci0tIChOUEVycm9yKWxv
YWRSZXF1ZXN0OihOU011dGFibGVVUkxSZXF1ZXN0ICopcmVxdWVzdCBpblRhcmdldDooY29uc3Qg
Y2hhciAqKWNUYXJnZXQgd2l0aE5vdGlmeURhdGE6KHZvaWQgKilub3RpZnlEYXRhIHNlbmROb3Rp
ZmljYXRpb246KEJPT0wpc2VuZE5vdGlmaWNhdGlvbjsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9u
IFdlYk5ldHNjYXBlUGx1Z2luVmlldwotCi0rICh2b2lkKWluaXRpYWxpemUKLXsKLSAgICBKU0M6
OmluaXRpYWxpemUoKTsKLSAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7Ci0gICAgV2Vi
Q29yZTo6cG9wdWxhdGVKSVRPcGVyYXRpb25zKCk7Ci0gICAgc2VuZFVzZXJDaGFuZ2VOb3RpZmlj
YXRpb25zKCk7Ci19Ci0KLS8vIE1BUks6IEVWRU5UUwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0
TlBSZWN0KGNvbnN0IE5TUmVjdCYgbnIsIE5QUmVjdCYgbnByKQotewotICAgIG5wci50b3AgPSBz
dGF0aWNfY2FzdDx1aW50MTZfdD4obnIub3JpZ2luLnkpOwotICAgIG5wci5sZWZ0ID0gc3RhdGlj
X2Nhc3Q8dWludDE2X3Q+KG5yLm9yaWdpbi54KTsKLSAgICBucHIuYm90dG9tID0gc3RhdGljX2Nh
c3Q8dWludDE2X3Q+KE5TTWF4WShucikpOwotICAgIG5wci5yaWdodCA9IHN0YXRpY19jYXN0PHVp
bnQxNl90PihOU01heFgobnIpKTsKLX0KLQotLSAoUG9ydFN0YXRlKXNhdmVBbmRTZXROZXdQb3J0
U3RhdGVGb3JVcGRhdGU6KEJPT0wpZm9yVXBkYXRlCi17Ci0gICAgQVNTRVJUKFtzZWxmIGN1cnJl
bnRXaW5kb3ddICE9IG5pbCk7Ci0gICAgCi0gICAgLy8gVGhlIGJhc2UgY29vcmRpbmF0ZXMgb2Yg
YSB3aW5kb3cgYW5kIGl0J3MgY29udGVudFZpZXcgaGFwcGVuIHRvIGJlIHRoZSBlcXVhbCBhdCBh
IHVzZXJTcGFjZVNjYWxlRmFjdG9yCi0gICAgLy8gb2YgMS4gRm9yIG5vbi0xLjAgc2NhbGUgZmFj
dG9ycyB0aGlzIGFzc3VtcHRpb24gaXMgZmFsc2UuCi0gICAgTlNWaWV3ICp3aW5kb3dDb250ZW50
VmlldyA9IFtbc2VsZiB3aW5kb3ddIGNvbnRlbnRWaWV3XTsKLSAgICBOU1JlY3QgYm91bmRzSW5X
aW5kb3cgPSBbc2VsZiBjb252ZXJ0UmVjdDpbc2VsZiBib3VuZHNdIHRvVmlldzp3aW5kb3dDb250
ZW50Vmlld107Ci0gICAgTlNSZWN0IHZpc2libGVSZWN0SW5XaW5kb3cgPSBbc2VsZiBhY3R1YWxW
aXNpYmxlUmVjdEluV2luZG93XTsKLSAgICAKLSAgICAvLyBGbGlwIFkgdG8gY29udmVydCAtW05T
V2luZG93IGNvbnRlbnRWaWV3XSBjb29yZGluYXRlcyB0byB0b3AtbGVmdC1iYXNlZCB3aW5kb3cg
Y29vcmRpbmF0ZXMuCi0gICAgZmxvYXQgYm9yZGVyVmlld0hlaWdodCA9IFtbc2VsZiBjdXJyZW50
V2luZG93XSBmcmFtZV0uc2l6ZS5oZWlnaHQ7Ci0gICAgYm91bmRzSW5XaW5kb3cub3JpZ2luLnkg
PSBib3JkZXJWaWV3SGVpZ2h0IC0gTlNNYXhZKGJvdW5kc0luV2luZG93KTsKLSAgICB2aXNpYmxl
UmVjdEluV2luZG93Lm9yaWdpbi55ID0gYm9yZGVyVmlld0hlaWdodCAtIE5TTWF4WSh2aXNpYmxl
UmVjdEluV2luZG93KTsKLSAgICAKLSAgICB3aW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRv
dzsKLSAgICB3aW5kb3cueCA9IChpbnQzMl90KWJvdW5kc0luV2luZG93Lm9yaWdpbi54OyAKLSAg
ICB3aW5kb3cueSA9IChpbnQzMl90KWJvdW5kc0luV2luZG93Lm9yaWdpbi55OwotICAgIHdpbmRv
dy53aWR0aCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihOU1dpZHRoKGJvdW5kc0luV2luZG93KSk7
Ci0gICAgd2luZG93LmhlaWdodCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihOU0hlaWdodChib3Vu
ZHNJbldpbmRvdykpOwotICAgIAotICAgIC8vICJDbGlwLW91dCIgdGhlIHBsdWctaW4gd2hlbjoK
LSAgICAvLyAxKSBpdCdzIG5vdCByZWFsbHkgaW4gYSB3aW5kb3cgb3Igb2ZmLXNjcmVlbiBvciBo
YXMgbm8gaGVpZ2h0IG9yIHdpZHRoLgotICAgIC8vIDIpIHdpbmRvdy54IGlzIGEgImJpZyBuZWdh
dGl2ZSBudW1iZXIiIHdoaWNoIGlzIGhvdyBXZWJDb3JlIGV4cHJlc3NlcyBvZmYtc2NyZWVuIHdp
ZGdldHMuCi0gICAgLy8gMykgdGhlIHdpbmRvdyBpcyBtaW5pYXR1cml6ZWQgb3IgdGhlIGFwcCBp
cyBoaWRkZW4KLSAgICAvLyA0KSB3ZSdyZSBpbnNpZGUgb2Ygdmlld1dpbGxNb3ZlVG9XaW5kb3c6
IHdpdGggYSBuaWwgd2luZG93LiBJbiB0aGlzIGNhc2UsIHN1cGVydmlld3MgbWF5IGFscmVhZHkg
aGF2ZSBuaWwgCi0gICAgLy8gc3VwZXJ2aWV3cyBhbmQgbmlsIHdpbmRvd3MgYW5kIHJlc3VsdHMg
ZnJvbSBjb252ZXJ0UmVjdDp0b1ZpZXc6IGFyZSBpbmNvcnJlY3QuCi0gICAgaWYgKHdpbmRvdy53
aWR0aCA8PSAwIHx8IHdpbmRvdy5oZWlnaHQgPD0gMCB8fCB3aW5kb3cueCA8IC0xMDAwMDAgfHwg
W3NlbGYgc2hvdWxkQ2xpcE91dFBsdWdpbl0pIHsKLQotICAgICAgICAvLyBUaGUgZm9sbG93aW5n
IGNvZGUgdHJpZXMgdG8gZ2l2ZSBwbHVnLWlucyB0aGUgc2FtZSBzaXplIHRoZXkgd2lsbCBldmVu
dHVhbGx5IGhhdmUuCi0gICAgICAgIC8vIFRoZSBzcGVjaWZpZWRXaWR0aCBhbmQgc3BlY2lmaWVk
SGVpZ2h0IHZhcmlhYmxlcyBhcmUgdXNlZCB0byBwcmVkaWN0IHRoZSBzaXplIHRoYXQKLSAgICAg
ICAgLy8gV2ViQ29yZSB3aWxsIGV2ZW50dWFsbHkgcmVzaXplIHVzIHRvLgotCi0gICAgICAgIC8v
IFRoZSBRdWlja1RpbWUgcGx1Zy1pbiBoYXMgcHJvYmxlbXMgaWYgeW91IGdpdmUgaXQgYSB3aWR0
aCBvciBoZWlnaHQgb2YgMC4KLSAgICAgICAgLy8gU2luY2Ugb3RoZXIgcGx1Zy1pbnMgYWxzbyBt
aWdodCBoYXZlIHRoZSBzYW1lIHNvcnQgb2YgdHJvdWJsZSwgd2UgbWFrZSBzdXJlCi0gICAgICAg
IC8vIHRvIGFsd2F5cyBnaXZlIHBsdWctaW5zIGEgc2l6ZSBvdGhlciB0aGFuIDAsMC4KLQotICAg
ICAgICBpZiAod2luZG93LndpZHRoIDw9IDApCi0gICAgICAgICAgICB3aW5kb3cud2lkdGggPSBz
cGVjaWZpZWRXaWR0aCA+IDAgPyBzcGVjaWZpZWRXaWR0aCA6IDEwMDsKLSAgICAgICAgaWYgKHdp
bmRvdy5oZWlnaHQgPD0gMCkKLSAgICAgICAgICAgIHdpbmRvdy5oZWlnaHQgPSBzcGVjaWZpZWRI
ZWlnaHQgPiAwID8gc3BlY2lmaWVkSGVpZ2h0IDogMTAwOwotCi0gICAgICAgIHdpbmRvdy5jbGlw
UmVjdC5ib3R0b20gPSB3aW5kb3cuY2xpcFJlY3QudG9wOwotICAgICAgICB3aW5kb3cuY2xpcFJl
Y3QubGVmdCA9IHdpbmRvdy5jbGlwUmVjdC5yaWdodDsKLSAgICAgICAgCi0gICAgICAgIC8vIENv
cmUgQW5pbWF0aW9uIHBsdWctaW5zIG5lZWQgdG8gYmUgdXBkYXRlZCAod2l0aCBhIDAsMCwwLDAg
Y2xpcFJlY3QpIHdoZW4KLSAgICAgICAgLy8gbW92ZWQgdG8gYSBiYWNrZ3JvdW5kIHRhYi4gV2Ug
ZG9uJ3QgZG8gdGhpcyBmb3IgQ29yZSBHcmFwaGljcyBwbHVnLWlucyBhcwotICAgICAgICAvLyBv
bGRlciB2ZXJzaW9ucyBvZiBGbGFzaCBoYXZlIGhpc3RvcmljYWwgV2ViS2l0LXNwZWNpZmljIGNv
ZGUgdGhhdCBpc24ndAotICAgICAgICAvLyBjb21wYXRpYmxlIHdpdGggdGhpcyBiZWhhdmlvci4K
LSAgICAgICAgaWYgKGRyYXdpbmdNb2RlbCA9PSBOUERyYXdpbmdNb2RlbENvcmVBbmltYXRpb24p
Ci0gICAgICAgICAgICBnZXROUFJlY3QoTlNaZXJvUmVjdCwgd2luZG93LmNsaXBSZWN0KTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBnZXROUFJlY3QodmlzaWJsZVJlY3RJbldpbmRvdywgd2luZG93
LmNsaXBSZWN0KTsKLSAgICB9Ci0gICAgCi0gICAgLy8gU2F2ZSB0aGUgcG9ydCBzdGF0ZSwgc2V0
IHVwIHRoZSBwb3J0IGZvciBlbnRyeSBpbnRvIHRoZSBwbHVnaW4KLSAgICBQb3J0U3RhdGUgcG9y
dFN0YXRlOwotICAgIHN3aXRjaCAoZHJhd2luZ01vZGVsKSB7Ci0gICAgICAgIGNhc2UgTlBEcmF3
aW5nTW9kZWxDb3JlR3JhcGhpY3M6IHsgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghW3Nl
bGYgY2FuRHJhd10pIHsKLSAgICAgICAgICAgICAgICBwb3J0U3RhdGUgPSBOVUxMOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBBU1NFUlQoW05TVmlldyBmb2N1c1ZpZXddID09IHNlbGYpOwotCi0gICAgICAgICAgICBDR0Nv
bnRleHRSZWYgY29udGV4dCA9IFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIENH
Q29udGV4dF07Ci0KLSAgICAgICAgICAgIFBvcnRTdGF0ZV9DRyAqY2dQb3J0U3RhdGUgPSAoUG9y
dFN0YXRlX0NHICopbWFsbG9jKHNpemVvZihQb3J0U3RhdGVfQ0cpKTsKLSAgICAgICAgICAgIHBv
cnRTdGF0ZSA9IChQb3J0U3RhdGUpY2dQb3J0U3RhdGU7Ci0gICAgICAgICAgICBjZ1BvcnRTdGF0
ZS0+Y29udGV4dCA9IGNvbnRleHQ7Ci0KLSAgICAgICAgICAgIC8vIFNhdmUgY3VycmVudCBncmFw
aGljcyBjb250ZXh0J3Mgc3RhdGU7IHdpbGwgYmUgcmVzdG9yZWQgYnkgLXJlc3RvcmVQb3J0U3Rh
dGU6Ci0gICAgICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwotCi0gICAgICAg
ICAgICAvLyBDbGlwIHRvIHRoZSBkaXJ0eSByZWdpb24gaWYgZHJhd2luZyB0byBhIHdpbmRvdy4g
V2hlbiBkcmF3aW5nIHRvIGFub3RoZXIgYml0bWFwIGNvbnRleHQsIGRvIG5vdCBjbGlwLgotICAg
ICAgICAgICAgaWYgKFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gPT0gW1tzZWxm
IGN1cnJlbnRXaW5kb3ddIGdyYXBoaWNzQ29udGV4dF0pIHsKLSAgICAgICAgICAgICAgICAvLyBH
ZXQgbGlzdCBvZiBkaXJ0eSByZWN0cyBmcm9tIHRoZSBvcGFxdWUgYW5jZXN0b3IgLS0gV2ViS2l0
IGRvZXMgc29tZSB0cmlja3Mgd2l0aCBpbnZhbGlkYXRpb24gYW5kCi0gICAgICAgICAgICAgICAg
Ly8gZGlzcGxheSB0byBlbmFibGUgei1vcmRlcmluZyBmb3IgTlNWaWV3czsgYSBzaWRlLWVmZmVj
dCBvZiB0aGlzIGlzIHRoYXQgb25seSB0aGUgV2ViSFRNTFZpZXcKLSAgICAgICAgICAgICAgICAv
LyBrbm93cyBhYm91dCB0aGUgdHJ1ZSBzZXQgb2YgZGlydHkgcmVjdHMuCi0gICAgICAgICAgICAg
ICAgTlNWaWV3ICpvcGFxdWVBbmNlc3RvciA9IFtzZWxmIG9wYXF1ZUFuY2VzdG9yXTsKLSAgICAg
ICAgICAgICAgICBjb25zdCBOU1JlY3QgKmRpcnR5UmVjdHM7Ci0gICAgICAgICAgICAgICAgTlNJ
bnRlZ2VyIGNvdW50OwotICAgICAgICAgICAgICAgIFtvcGFxdWVBbmNlc3RvciBnZXRSZWN0c0Jl
aW5nRHJhd246JmRpcnR5UmVjdHMgY291bnQ6JmNvdW50XTsKLSAgICAgICAgICAgICAgICBWZWN0
b3I8Q0dSZWN0LCAxNj4gY29udmVydGVkRGlydHlSZWN0czsKLSAgICAgICAgICAgICAgICBjb252
ZXJ0ZWREaXJ0eVJlY3RzLmdyb3coY291bnQpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDxOU1JlY3QmPihjb252ZXJ0ZWREaXJ0eVJlY3RzW2ldKSA9IFtzZWxmIGNvbnZlcnRSZWN0OmRp
cnR5UmVjdHNbaV0gZnJvbVZpZXc6b3BhcXVlQW5jZXN0b3JdOwotICAgICAgICAgICAgICAgIENH
Q29udGV4dENsaXBUb1JlY3RzKGNvbnRleHQsIGNvbnZlcnRlZERpcnR5UmVjdHMuZGF0YSgpLCBj
b3VudCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgICAgCi0gICAgICAgIGNhc2UgTlBEcmF3aW5nTW9kZWxDb3JlQW5pbWF0aW9uOgotICAg
ICAgICAgICAgLy8gSnVzdCBzZXQgdGhlIHBvcnQgc3RhdGUgdG8gYSBkdW1teSB2YWx1ZS4KLSAg
ICAgICAgICAgIHBvcnRTdGF0ZSA9IChQb3J0U3RhdGUpMTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgcG9ydFN0YXRlID0gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gcG9ydFN0YXRlOwotfQotCi0tIChQb3J0U3RhdGUpc2F2
ZUFuZFNldE5ld1BvcnRTdGF0ZQotewotICAgIHJldHVybiBbc2VsZiBzYXZlQW5kU2V0TmV3UG9y
dFN0YXRlRm9yVXBkYXRlOk5PXTsKLX0KLQotLSAodm9pZClyZXN0b3JlUG9ydFN0YXRlOihQb3J0
U3RhdGUpcG9ydFN0YXRlCi17Ci0gICAgQVNTRVJUKFtzZWxmIGN1cnJlbnRXaW5kb3ddKTsKLSAg
ICBBU1NFUlQocG9ydFN0YXRlKTsKLSAgICAKLSAgICBzd2l0Y2ggKGRyYXdpbmdNb2RlbCkgewot
ICAgICAgICBjYXNlIE5QRHJhd2luZ01vZGVsQ29yZUdyYXBoaWNzOiB7Ci0gICAgICAgICAgICBB
U1NFUlQoW05TVmlldyBmb2N1c1ZpZXddID09IHNlbGYpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9ICgoUG9ydFN0YXRlX0NHICopcG9ydFN0YXRlKS0+
Y29udGV4dDsKLSAgICAgICAgICAgIEFTU0VSVCghblBvcnQuY2dQb3J0LmNvbnRleHQgfHwgKGNv
bnRleHQgPT0gblBvcnQuY2dQb3J0LmNvbnRleHQpKTsKLSAgICAgICAgICAgIENHQ29udGV4dFJl
c3RvcmVHU3RhdGUoY29udGV4dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgY2FzZSBOUERyYXdpbmdNb2RlbENvcmVBbmltYXRpb246Ci0gICAgICAg
ICAgICBBU1NFUlQocG9ydFN0YXRlID09IChQb3J0U3RhdGUpMSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi0tIChCT09MKXNlbmRFdmVudDoodm9pZCop
ZXZlbnQgaXNEcmF3UmVjdDooQk9PTClldmVudElzRHJhd1JlY3QKLXsKLSAgICBpZiAoIVtzZWxm
IHdpbmRvd10pCi0gICAgICAgIHJldHVybiBOTzsKLSAgICBBU1NFUlQoZXZlbnQpOwotICAgICAg
IAotICAgIGlmICghX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuIE5POwotCi0gICAgQVNTRVJU
KFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPmV2ZW50KTsKLSAgICAKLSAgICAv
LyBNYWtlIHN1cmUgd2UgZG9uJ3QgY2FsbCBOUFBfSGFuZGxlRXZlbnQgd2hpbGUgd2UncmUgaW5z
aWRlIE5QUF9TZXRXaW5kb3cuCi0gICAgLy8gV2UgcHJvYmFibHkgZG9uJ3Qgd2FudCBtb3JlIGdl
bmVyYWwgcmVlbnRyYW5jeSBwcm90ZWN0aW9uOyB3ZSBhcmUgcmVhbGx5Ci0gICAgLy8gcHJvdGVj
dGluZyBvbmx5IGFnYWluc3QgdGhpcyBvbmUgY2FzZSwgd2hpY2ggYWN0dWFsbHkgY29tZXMgdXAg
d2hlbgotICAgIC8vIHlvdSBmaXJzdCBpbnN0YWxsIHRoZSBTVkcgdmlld2VyIHBsdWctaW4uCi0g
ICAgaWYgKGluU2V0V2luZG93KQotICAgICAgICByZXR1cm4gTk87Ci0KLSAgICBGcmFtZSogZnJh
bWUgPSBjb3JlKFtzZWxmIHdlYkZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0
dXJuIE5POwotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkK
LSAgICAgICAgcmV0dXJuIE5POwotCi0gICAgLy8gQ2FuIG9ubHkgc2VuZCBkcmF3UmVjdCAodXBk
YXRlRXZ0KSB0byBDb3JlR3JhcGhpY3MgcGx1Z2lucyB3aGVuIGFjdHVhbGx5IGRyYXdpbmcKLSAg
ICBBU1NFUlQoKGRyYXdpbmdNb2RlbCAhPSBOUERyYXdpbmdNb2RlbENvcmVHcmFwaGljcykgfHwg
IWV2ZW50SXNEcmF3UmVjdCB8fCBbTlNWaWV3IGZvY3VzVmlld10gPT0gc2VsZik7Ci0gICAgCi0g
ICAgUG9ydFN0YXRlIHBvcnRTdGF0ZSA9IE5VTEw7Ci0gICAgCi0gICAgaWYgKGRyYXdpbmdNb2Rl
bCAhPSBOUERyYXdpbmdNb2RlbENvcmVBbmltYXRpb24gJiYgZXZlbnRJc0RyYXdSZWN0KSB7Ci0g
ICAgICAgIC8vIEluIENvcmVHcmFwaGljcyBtb2RlLCB0aGUgcG9ydCBzdGF0ZSBvbmx5IG5lZWRz
IHRvIGJlIHNhdmVkL3NldCB3aGVuIHJlZHJhd2luZyB0aGUgcGx1Zy1pbiB2aWV3LgotICAgICAg
ICAvLyBUaGUgcGx1Zy1pbiBpcyBub3QgYWxsb3dlZCB0byBkcmF3IGF0IGFueSBvdGhlciB0aW1l
LgotICAgICAgICBwb3J0U3RhdGUgPSBbc2VsZiBzYXZlQW5kU2V0TmV3UG9ydFN0YXRlRm9yVXBk
YXRlOmV2ZW50SXNEcmF3UmVjdF07Ci0gICAgICAgIC8vIFdlIG1heSBoYXZlIGNoYW5nZWQgdGhl
IHdpbmRvdywgc28gaW5mb3JtIHRoZSBwbHVnLWluLgotICAgICAgICBbc2VsZiBzZXRXaW5kb3dJ
Zk5lY2Vzc2FyeV07Ci0gICAgfQotCi0gICAgLy8gVGVtcG9yYXJpbHkgcmV0YWluIHNlbGYgaW4g
Y2FzZSB0aGUgcGx1Zy1pbiB2aWV3IGlzIHJlbGVhc2VkIHdoaWxlIHNlbmRpbmcgYW4gZXZlbnQu
IAotICAgIGF1dG8gc3Ryb25nU2VsZiA9IHJldGFpblB0cihzZWxmKTsKLQotICAgIEJPT0wgYWNj
ZXB0ZWRFdmVudDsKLSAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKLSAgICAvLyBT
ZXQgdGhlIHBsdWdpbkFsbG93UG9wdXAgZmxhZy4KLSAgICBBU1NFUlQoX2V2ZW50SGFuZGxlcik7
Ci0gICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhj
b21tb25WTSgpKTsKLSAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRv
cihfZXZlbnRIYW5kbGVyLT5jdXJyZW50RXZlbnRJc1VzZXJHZXN0dXJlKCkgPyBzdGQ6Om9wdGlv
bmFsPFByb2Nlc3NpbmdVc2VyR2VzdHVyZVN0YXRlPihQcm9jZXNzaW5nVXNlckdlc3R1cmUpIDog
c3RkOjpudWxsb3B0KTsKLSAgICAgICAgYWNjZXB0ZWRFdmVudCA9IFtfcGx1Z2luUGFja2FnZS5n
ZXQoKSBwbHVnaW5GdW5jc10tPmV2ZW50KHBsdWdpbiwgZXZlbnQpOwotICAgIH0KLSAgICBbc2Vs
ZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwotCi0gICAgaWYgKHBvcnRTdGF0ZSkgewotICAgICAg
ICBpZiAoW3NlbGYgY3VycmVudFdpbmRvd10pCi0gICAgICAgICAgICBbc2VsZiByZXN0b3JlUG9y
dFN0YXRlOnBvcnRTdGF0ZV07Ci0gICAgICAgIGlmIChwb3J0U3RhdGUgIT0gKFBvcnRTdGF0ZSkx
KQotICAgICAgICAgICAgZnJlZShwb3J0U3RhdGUpOwotICAgIH0KLQotICAgIHJldHVybiBhY2Nl
cHRlZEV2ZW50OwotfQotCi0tICh2b2lkKXdpbmRvd0ZvY3VzQ2hhbmdlZDooQk9PTCloYXNGb2N1
cwotewotICAgIF9ldmVudEhhbmRsZXItPndpbmRvd0ZvY3VzQ2hhbmdlZChoYXNGb2N1cyk7Ci19
Ci0KLS0gKHZvaWQpc2VuZERyYXdSZWN0RXZlbnQ6KE5TUmVjdClyZWN0Ci17Ci0gICAgQVNTRVJU
KF9ldmVudEhhbmRsZXIpOwotICAgIAotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gW1tOU0dy
YXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gQ0dDb250ZXh0XTsKLSAgICBfZXZlbnRIYW5k
bGVyLT5kcmF3UmVjdChjb250ZXh0LCByZWN0KTsKLX0KLQotLSAodm9pZClzdG9wVGltZXJzCi17
Ci0gICAgW3N1cGVyIHN0b3BUaW1lcnNdOwotICAgIAotICAgIGlmIChfZXZlbnRIYW5kbGVyKQot
ICAgICAgICBfZXZlbnRIYW5kbGVyLT5zdG9wVGltZXJzKCk7Ci0gICAgCi0gICAgaWYgKCF0aW1l
cnMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoYXV0byYgaXQ6IHRpbWVycy0+dmFsdWVz
KCkpCi0gICAgICAgIGl0LT5zdG9wKCk7Ci19Ci0KLS0gKHZvaWQpc3RhcnRUaW1lcnMKLXsKLSAg
ICBbc3VwZXIgc3RhcnRUaW1lcnNdOwotICAgIAotICAgIC8vIElmIHRoZSBwbHVnaW4gaXMgY29t
cGxldGVseSBvYnNjdXJlZCAoc2Nyb2xsZWQgb3V0IG9mIHZpZXcsIGZvciBleGFtcGxlKSwgdGhl
biB3ZSB3aWxsCi0gICAgLy8gc2VuZCBudWxsIGV2ZW50cyBhdCBhIHJlZHVjZWQgcmF0ZS4KLSAg
ICBfZXZlbnRIYW5kbGVyLT5zdGFydFRpbWVycyhfaXNDb21wbGV0ZWx5T2JzY3VyZWQpOwotICAg
IAotICAgIGlmICghdGltZXJzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgZm9yIChhdXRv
JiBpdDogdGltZXJzLT52YWx1ZXMoKSkgewotICAgICAgICBBU1NFUlQoIWl0LT5pc0FjdGl2ZSgp
KTsKLSAgICAgICAgaXQtPnN0YXJ0KF9pc0NvbXBsZXRlbHlPYnNjdXJlZCk7Ci0gICAgfSAgICAK
LX0KLQotLSAodm9pZClmb2N1c0NoYW5nZWQKLXsKLSAgICAvLyBXZSBuZWVkIHRvIG51bGwgY2hl
Y2sgdGhlIGV2ZW50IGhhbmRsZXIgaGVyZSBiZWNhdXNlCi0gICAgLy8gdGhlIHBsdWctaW4gdmll
dyBjYW4gcmVzaWduIGZvY3VzIGFmdGVyIGl0J3MgYmVlbiBzdG9wcGVkCi0gICAgLy8gYW5kIHRo
ZSBldmVudCBoYW5kbGVyIGhhcyBiZWVuIGRlbGV0ZWQuCi0gICAgaWYgKF9ldmVudEhhbmRsZXIp
Ci0gICAgICAgIF9ldmVudEhhbmRsZXItPmZvY3VzQ2hhbmdlZChfaGFzRm9jdXMpOwotfQotCi0t
ICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKXRoZUV2ZW50Ci17Ci0gICAgaWYgKCFfaXNTdGFy
dGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBfZXZlbnRIYW5kbGVyLT5tb3VzZURvd24odGhl
RXZlbnQpOwotfQotCi0tICh2b2lkKW1vdXNlVXA6KE5TRXZlbnQgKil0aGVFdmVudAotewotICAg
IGlmICghX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX2V2ZW50SGFuZGxlci0+
bW91c2VVcCh0aGVFdmVudCk7Ci19Ci0KLS0gKHZvaWQpaGFuZGxlTW91c2VFbnRlcmVkOihOU0V2
ZW50ICopdGhlRXZlbnQKLXsKLSAgICBpZiAoIV9pc1N0YXJ0ZWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIFNldCBjdXJzb3IgdG8gYXJyb3cuIFBsdWdpbnMgb2Z0ZW4gaGFuZGxlIGN1cnNv
ciBpbnRlcm5hbGx5LCBidXQgdGhvc2UgdGhhdCBkb24ndCB3aWxsIGp1c3QgZ2V0IHRoaXMgZGVm
YXVsdCBvbmUuCi0gICAgW1tOU0N1cnNvciBhcnJvd0N1cnNvcl0gc2V0XTsKLQotICAgIF9ldmVu
dEhhbmRsZXItPm1vdXNlRW50ZXJlZCh0aGVFdmVudCk7Ci19Ci0KLS0gKHZvaWQpaGFuZGxlTW91
c2VFeGl0ZWQ6KE5TRXZlbnQgKil0aGVFdmVudAotewotICAgIGlmICghX2lzU3RhcnRlZCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgX2V2ZW50SGFuZGxlci0+bW91c2VFeGl0ZWQodGhlRXZlbnQp
OwotICAgIAotICAgIC8vIFNldCBjdXJzb3IgYmFjayB0byBhcnJvdyBjdXJzb3IuICBCZWNhdXNl
IE5TQ3Vyc29yIGRvZXNuJ3Qga25vdyBhYm91dCBjaGFuZ2VzIHRoYXQgdGhlIHBsdWdpbiBtYWRl
LCB3ZSBjb3VsZCBnZXQgY29uZnVzZWQgYWJvdXQgd2hhdCB3ZSB0aGluayB0aGUKLSAgICAvLyBj
dXJyZW50IGN1cnNvciBpcyBvdGhlcndpc2UuICBUaGVyZWZvcmUgd2UgaGF2ZSBubyBjaG9pY2Ug
YnV0IHRvIHVuY29uZGl0aW9uYWxseSByZXNldCB0aGUgY3Vyc29yIHdoZW4gdGhlIG1vdXNlIGV4
aXRzIHRoZSBwbHVnaW4uCi0gICAgW1tOU0N1cnNvciBhcnJvd0N1cnNvcl0gc2V0XTsKLX0KLQot
LSAodm9pZCloYW5kbGVNb3VzZU1vdmVkOihOU0V2ZW50ICopdGhlRXZlbnQKLXsKLSAgICBpZiAo
IV9pc1N0YXJ0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9ldmVudEhhbmRsZXItPm1vdXNl
TW92ZWQodGhlRXZlbnQpOwotfQotICAgIAotLSAodm9pZCltb3VzZURyYWdnZWQ6KE5TRXZlbnQg
Kil0aGVFdmVudAotewotICAgIGlmICghX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgX2V2ZW50SGFuZGxlci0+bW91c2VEcmFnZ2VkKHRoZUV2ZW50KTsKLX0KLQotLSAodm9pZClz
Y3JvbGxXaGVlbDooTlNFdmVudCAqKXRoZUV2ZW50Ci17Ci0gICAgaWYgKCFfaXNTdGFydGVkKSB7
Ci0gICAgICAgIFtzdXBlciBzY3JvbGxXaGVlbDp0aGVFdmVudF07Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoIV9ldmVudEhhbmRsZXItPnNjcm9sbFdoZWVsKHRoZUV2ZW50KSkK
LSAgICAgICAgW3N1cGVyIHNjcm9sbFdoZWVsOnRoZUV2ZW50XTsKLX0KLQotLSAodm9pZClrZXlV
cDooTlNFdmVudCAqKXRoZUV2ZW50Ci17Ci0gICAgaWYgKCFfaXNTdGFydGVkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBfZXZlbnRIYW5kbGVyLT5rZXlVcCh0aGVFdmVudCk7Ci19Ci0KLS0gKHZv
aWQpa2V5RG93bjooTlNFdmVudCAqKXRoZUV2ZW50Ci17Ci0gICAgaWYgKCFfaXNTdGFydGVkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBfZXZlbnRIYW5kbGVyLT5rZXlEb3duKHRoZUV2ZW50KTsK
LX0KLQotLSAodm9pZClmbGFnc0NoYW5nZWQ6KE5TRXZlbnQgKil0aGVFdmVudAotewotICAgIGlm
ICghX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX2V2ZW50SGFuZGxlci0+Zmxh
Z3NDaGFuZ2VkKHRoZUV2ZW50KTsKLX0KLQotLSAodm9pZClzZW5kTW9kaWZpZXJFdmVudFdpdGhL
ZXlDb2RlOihpbnQpa2V5Q29kZSBjaGFyYWN0ZXI6KGNoYXIpY2hhcmFjdGVyCi17Ci0gICAgaWYg
KCFfaXNTdGFydGVkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgX2V2ZW50SGFuZGxlci0+
c3ludGhldGljS2V5RG93bldpdGhDb21tYW5kTW9kaWZpZXIoa2V5Q29kZSwgY2hhcmFjdGVyKTsK
LX0KLQotLSAodm9pZClwcml2YXRlQnJvd3NpbmdNb2RlRGlkQ2hhbmdlCi17Ci0gICAgaWYgKCFf
aXNTdGFydGVkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgTlBCb29sIHZhbHVlID0gX2lz
UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZDsKLQotICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rp
b25dOwotICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoY29tbW9uVk0oKSk7Ci0gICAgICAgIGlmIChbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2lu
RnVuY3NdLT5zZXR2YWx1ZSkKLSAgICAgICAgICAgIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVn
aW5GdW5jc10tPnNldHZhbHVlKHBsdWdpbiwgTlBOVnByaXZhdGVNb2RlQm9vbCwgJnZhbHVlKTsK
LSAgICB9Ci0gICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKLX0KLQotLy8gTUFSSzog
V0VCX05FVFNDQVBFX1BMVUdJTgotCi0tIChCT09MKWlzTmV3V2luZG93RXF1YWxUb09sZFdpbmRv
dwotewotICAgIGlmICh3aW5kb3cueCAhPSBsYXN0U2V0V2luZG93LngpCi0gICAgICAgIHJldHVy
biBOTzsKLSAgICBpZiAod2luZG93LnkgIT0gbGFzdFNldFdpbmRvdy55KQotICAgICAgICByZXR1
cm4gTk87Ci0gICAgaWYgKHdpbmRvdy53aWR0aCAhPSBsYXN0U2V0V2luZG93LndpZHRoKQotICAg
ICAgICByZXR1cm4gTk87Ci0gICAgaWYgKHdpbmRvdy5oZWlnaHQgIT0gbGFzdFNldFdpbmRvdy5o
ZWlnaHQpCi0gICAgICAgIHJldHVybiBOTzsKLSAgICBpZiAod2luZG93LmNsaXBSZWN0LnRvcCAh
PSBsYXN0U2V0V2luZG93LmNsaXBSZWN0LnRvcCkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIGlm
ICh3aW5kb3cuY2xpcFJlY3QubGVmdCAhPSBsYXN0U2V0V2luZG93LmNsaXBSZWN0LmxlZnQpCi0g
ICAgICAgIHJldHVybiBOTzsKLSAgICBpZiAod2luZG93LmNsaXBSZWN0LmJvdHRvbSAgIT0gbGFz
dFNldFdpbmRvdy5jbGlwUmVjdC5ib3R0b20pCi0gICAgICAgIHJldHVybiBOTzsKLSAgICBpZiAo
d2luZG93LmNsaXBSZWN0LnJpZ2h0ICE9IGxhc3RTZXRXaW5kb3cuY2xpcFJlY3QucmlnaHQpCi0g
ICAgICAgIHJldHVybiBOTzsKLSAgICBpZiAod2luZG93LnR5cGUgIT0gbGFzdFNldFdpbmRvdy50
eXBlKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgCi0gICAgc3dpdGNoIChkcmF3aW5nTW9kZWwp
IHsKLSAgICAgICAgY2FzZSBOUERyYXdpbmdNb2RlbENvcmVHcmFwaGljczoKLSAgICAgICAgICAg
IGlmIChuUG9ydC5jZ1BvcnQud2luZG93ICE9IGxhc3RTZXRQb3J0LmNnUG9ydC53aW5kb3cpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIE5POwotICAgICAgICAgICAgaWYgKG5Qb3J0LmNnUG9ydC5j
b250ZXh0ICE9IGxhc3RTZXRQb3J0LmNnUG9ydC5jb250ZXh0KQotICAgICAgICAgICAgICAgIHJl
dHVybiBOTzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICBj
YXNlIE5QRHJhd2luZ01vZGVsQ29yZUFuaW1hdGlvbjoKLSAgICAgICAgICBpZiAod2luZG93Lndp
bmRvdyAhPSBsYXN0U2V0V2luZG93LndpbmRvdykKLSAgICAgICAgICAgICAgcmV0dXJuIE5POwot
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gWUVT
OwotfQotCi0tICh2b2lkKXVwZGF0ZUFuZFNldFdpbmRvdwotewotICAgIC8vIEEgcGx1Zy1pbiBj
YW4gb25seSB1cGRhdGUgaWYgaXQncyAoMSkgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQgKDIpIGlzbid0
IHN0b3BwZWQKLSAgICAvLyBhbmQgKDMpIGlzIGFibGUgdG8gZHJhdyBvbi1zY3JlZW4uIFRvIG1l
ZXQgY29uZGl0aW9uICgzKSB0aGUgcGx1Zy1pbiBtdXN0IG5vdAotICAgIC8vIGJlIGhpZGRlbiBh
bmQgYmUgYXR0YWNoZWQgdG8gYSB3aW5kb3cuIFRoZXJlIGFyZSB0d28gZXhjZXB0aW9ucyB0byB0
aGlzIHJ1bGU6Ci0gICAgLy8KLSAgICAvLyBFeGNlcHRpb24gMTogUXVpY2tEcmF3IHBsdWctaW5z
IG11c3QgYmUgbWFudWFsbHkgdG9sZCB3aGVuIHRvIHN0b3Agd3JpdGluZwotICAgIC8vIGJpdHMg
dG8gdGhlIHdpbmRvdyBiYWNraW5nIHN0b3JlLCB0aHVzIHRvIGRvIHNvIHJlcXVpcmVzIGEgbmV3
IGNhbGwgdG8KLSAgICAvLyBOUFBfU2V0V2luZG93KCkgd2l0aCBhbiBlbXB0eSBOUFdpbmRvdyBz
dHJ1Y3QuCi0gICAgLy8KLSAgICAvLyBFeGNlcHRpb24gMjogQ29yZUdyYXBoaWNzIHBsdWctaW5z
IGV4cGVjdCB0byBoYXZlIHRoZWlyIGRyYXdhYmxlIGFyZWEgdXBkYXRlZAotICAgIC8vIHdoZW4g
dGhleSBhcmUgbW92ZWQgdG8gYSBiYWNrZ3JvdW5kIHRhYiwgdmlhIGEgTlBQX1NldFdpbmRvdyBj
YWxsLiBUaGlzIGlzCi0gICAgLy8gYWNjb21wbGlzaGVkIGJ5IGFsbG93aW5nIC1zYXZlQW5kU2V0
TmV3UG9ydFN0YXRlRm9yVXBkYXRlIHRvICJjbGlwLW91dCIgdGhlIHdpbmRvdydzCi0gICAgLy8g
Y2xpcFJlY3QuIEZsYXNoIGlzIGN1cmVudGx5IGFuIGV4Y2VwdGlvbiB0byB0aGlzLiBTZWUgNjQ1
MzczOC4KLSAgICAvLwotICAgIAotICAgIGlmICghX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIGlmICghW3NlbGYgY2FuRHJhd10pCi0gICAgICAgIHJldHVybjsKLQotICAg
IEJPT0wgZGlkTG9ja0ZvY3VzID0gW05TVmlldyBmb2N1c1ZpZXddICE9IHNlbGYgJiYgW3NlbGYg
bG9ja0ZvY3VzSWZDYW5EcmF3XTsKLQotICAgIFBvcnRTdGF0ZSBwb3J0U3RhdGUgPSBbc2VsZiBz
YXZlQW5kU2V0TmV3UG9ydFN0YXRlXTsKLSAgICBpZiAocG9ydFN0YXRlKSB7Ci0gICAgICAgIFtz
ZWxmIHNldFdpbmRvd0lmTmVjZXNzYXJ5XTsKLSAgICAgICAgW3NlbGYgcmVzdG9yZVBvcnRTdGF0
ZTpwb3J0U3RhdGVdOwotICAgICAgICBpZiAocG9ydFN0YXRlICE9IChQb3J0U3RhdGUpMSkKLSAg
ICAgICAgICAgIGZyZWUocG9ydFN0YXRlKTsKLSAgICB9IGVsc2UgaWYgKGRyYXdpbmdNb2RlbCA9
PSBOUERyYXdpbmdNb2RlbENvcmVHcmFwaGljcykKLSAgICAgICAgW3NlbGYgc2V0V2luZG93SWZO
ZWNlc3NhcnldOyAgICAgICAgCi0KLSAgICBpZiAoZGlkTG9ja0ZvY3VzKQotICAgICAgICBbc2Vs
ZiB1bmxvY2tGb2N1c107Ci19Ci0KLS0gKHZvaWQpc2V0V2luZG93SWZOZWNlc3NhcnkKLXsKLSAg
ICBpZiAoIV9pc1N0YXJ0ZWQpIAotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKCFbc2Vs
ZiBpc05ld1dpbmRvd0VxdWFsVG9PbGRXaW5kb3ddKSB7ICAgICAgICAKLSAgICAgICAgLy8gTWFr
ZSBzdXJlIHdlIGRvbid0IGNhbGwgTlBQX0hhbmRsZUV2ZW50IHdoaWxlIHdlJ3JlIGluc2lkZSBO
UFBfU2V0V2luZG93LgotICAgICAgICAvLyBXZSBwcm9iYWJseSBkb24ndCB3YW50IG1vcmUgZ2Vu
ZXJhbCByZWVudHJhbmN5IHByb3RlY3Rpb247IHdlIGFyZSByZWFsbHkKLSAgICAgICAgLy8gcHJv
dGVjdGluZyBvbmx5IGFnYWluc3QgdGhpcyBvbmUgY2FzZSwgd2hpY2ggYWN0dWFsbHkgY29tZXMg
dXAgd2hlbgotICAgICAgICAvLyB5b3UgZmlyc3QgaW5zdGFsbCB0aGUgU1ZHIHZpZXdlciBwbHVn
LWluLgotICAgICAgICBOUEVycm9yIG5wRXJyOwotICAgICAgICAKLSAgICAgICAgQk9PTCB3YXNJ
blNldFdpbmRvdyA9IGluU2V0V2luZG93OwotICAgICAgICBpblNldFdpbmRvdyA9IFlFUzsgICAg
ICAgIAotICAgICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKLSAgICAgICAgewot
ICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9u
Vk0oKSk7Ci0gICAgICAgICAgICBucEVyciA9IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5G
dW5jc10tPnNldHdpbmRvdyhwbHVnaW4sICZ3aW5kb3cpOwotICAgICAgICB9Ci0gICAgICAgIFtz
ZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07Ci0gICAgICAgIGluU2V0V2luZG93ID0gd2FzSW5T
ZXRXaW5kb3c7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIHN3aXRjaCAoZHJhd2luZ01vZGVs
KSB7Ci0gICAgICAgICAgICBjYXNlIE5QRHJhd2luZ01vZGVsQ29yZUdyYXBoaWNzOgotICAgICAg
ICAgICAgICAgIExPRyhQbHVnaW5zLCAiTlBQX1NldFdpbmRvdyAoQ29yZUdyYXBoaWNzKTogJWQs
IHdpbmRvdz0lcCwgY29udGV4dD0lcCwgd2luZG93Lng6JWQgd2luZG93Lnk6JWQgd2luZG93Lndp
ZHRoOiVkIHdpbmRvdy5oZWlnaHQ6JWQgd2luZG93LmNsaXBSZWN0IHNpemU6JWR4JWQiLAotICAg
ICAgICAgICAgICAgIG5wRXJyLCBuUG9ydC5jZ1BvcnQud2luZG93LCBuUG9ydC5jZ1BvcnQuY29u
dGV4dCwgKGludCl3aW5kb3cueCwgKGludCl3aW5kb3cueSwgKGludCl3aW5kb3cud2lkdGgsIChp
bnQpd2luZG93LmhlaWdodCwgCi0gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jbGlwUmVjdC5y
aWdodCAtIHdpbmRvdy5jbGlwUmVjdC5sZWZ0LCB3aW5kb3cuY2xpcFJlY3QuYm90dG9tIC0gd2lu
ZG93LmNsaXBSZWN0LnRvcCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2Fz
ZSBOUERyYXdpbmdNb2RlbENvcmVBbmltYXRpb246Ci0gICAgICAgICAgICAgICAgTE9HKFBsdWdp
bnMsICJOUFBfU2V0V2luZG93IChDb3JlQW5pbWF0aW9uKTogJWQsIHdpbmRvdz0lcCB3aW5kb3cu
eDolZCB3aW5kb3cueTolZCB3aW5kb3cud2lkdGg6JWQgd2luZG93LmhlaWdodDolZCIsCi0gICAg
ICAgICAgICAgICAgbnBFcnIsIHdpbmRvdy53aW5kb3csIG5Qb3J0LmNnUG9ydC5jb250ZXh0LCAo
aW50KXdpbmRvdy54LCAoaW50KXdpbmRvdy55LCAoaW50KXdpbmRvdy53aWR0aCwgKGludCl3aW5k
b3cuaGVpZ2h0KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSNlbmRpZiAvKiAhZGVmaW5lZChOREVCVUcpICovCi0gICAgICAgIAotICAg
ICAgICBsYXN0U2V0V2luZG93ID0gd2luZG93OwotICAgICAgICBsYXN0U2V0UG9ydCA9IG5Qb3J0
OwotICAgIH0KLX0KLQotKyAodm9pZClzZXRDdXJyZW50UGx1Z2luVmlldzooV2ViTmV0c2NhcGVQ
bHVnaW5WaWV3ICopdmlldwotewotICAgIGN1cnJlbnRQbHVnaW5WaWV3ID0gdmlldzsKLX0KLQot
KyAoV2ViTmV0c2NhcGVQbHVnaW5WaWV3ICopY3VycmVudFBsdWdpblZpZXcKLXsKLSAgICByZXR1
cm4gY3VycmVudFBsdWdpblZpZXc7Ci19Ci0KLS0gKEJPT0wpY3JlYXRlUGx1Z2luCi17Ci0gICAg
Ly8gT3BlbiB0aGUgcGx1Zy1pbiBwYWNrYWdlIHNvIGl0IHJlbWFpbnMgbG9hZGVkIHdoaWxlIG91
ciBwbHVnaW4gdXNlcyBpdAotICAgIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBvcGVuXTsKLSAgICAK
LSAgICAvLyBJbml0aWFsaXplIGRyYXdpbmdNb2RlbCB0byBhbiBpbnZhbGlkIHZhbHVlIHNvIHRo
YXQgd2UgY2FuIGRldGVjdCB3aGVuIHRoZSBwbHVnaW4gZG9lcyBub3Qgc3BlY2lmeSBhIGRyYXdp
bmdNb2RlbAotICAgIGRyYXdpbmdNb2RlbCA9IChOUERyYXdpbmdNb2RlbCktMTsKLSAgICAKLSAg
ICAvLyBJbml0aWFsaXplIGV2ZW50TW9kZWwgdG8gYW4gaW52YWxpZCB2YWx1ZSBzbyB0aGF0IHdl
IGNhbiBkZXRlY3Qgd2hlbiB0aGUgcGx1Z2luIGRvZXMgbm90IHNwZWNpZnkgYW4gZXZlbnQgbW9k
ZWwuCi0gICAgZXZlbnRNb2RlbCA9IChOUEV2ZW50TW9kZWwpLTE7Ci0gICAgCi0gICAgTlBFcnJv
ciBucEVyciA9IFtzZWxmIF9jcmVhdGVQbHVnaW5dOwotICAgIGlmIChucEVyciAhPSBOUEVSUl9O
T19FUlJPUikgewotICAgICAgICBMT0dfRVJST1IoIk5QUF9OZXcgZmFpbGVkIHdpdGggZXJyb3I6
ICVkIiwgbnBFcnIpOwotICAgICAgICBbc2VsZiBfZGVzdHJveVBsdWdpbl07Ci0gICAgICAgIFtf
cGx1Z2luUGFja2FnZS5nZXQoKSBjbG9zZV07Ci0gICAgICAgIHJldHVybiBOTzsKLSAgICB9Ci0g
ICAgCi0gICAgaWYgKGRyYXdpbmdNb2RlbCA9PSAoTlBEcmF3aW5nTW9kZWwpLTEpCi0gICAgICAg
IGRyYXdpbmdNb2RlbCA9IE5QRHJhd2luZ01vZGVsQ29yZUdyYXBoaWNzOwotCi0gICAgaWYgKGV2
ZW50TW9kZWwgPT0gKE5QRXZlbnRNb2RlbCktMSkKLSAgICAgICAgZXZlbnRNb2RlbCA9IE5QRXZl
bnRNb2RlbENvY29hOwotCi0gICAgaWYgKGRyYXdpbmdNb2RlbCA9PSBOUERyYXdpbmdNb2RlbENv
cmVBbmltYXRpb24pIHsKLSAgICAgICAgdm9pZCAqdmFsdWUgPSAwOwotICAgICAgICBpZiAoW19w
bHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+Z2V0dmFsdWUocGx1Z2luLCBOUFBWcGx1
Z2luQ29yZUFuaW1hdGlvbkxheWVyLCAmdmFsdWUpID09IE5QRVJSX05PX0VSUk9SICYmIHZhbHVl
KSB7Ci0KLSAgICAgICAgICAgIC8vIFRoZSBwbHVnLWluIGdpdmVzIHVzIGEgcmV0YWluZWQgbGF5
ZXIuCi0gICAgICAgICAgICBfcGx1Z2luTGF5ZXIgPSBhZG9wdE5TKChDQUxheWVyICopdmFsdWUp
OwotCi0gICAgICAgICAgICBCT09MIGFjY2xlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQgPSBmYWxz
ZTsKLSAgICAgICAgICAgIGFjY2xlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQgPSBbW1tzZWxmIHdl
YlZpZXddIHByZWZlcmVuY2VzXSBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZF07Ci0gICAg
ICAgICAgICBpZiAoYWNjbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCkgewotICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIFdlYkhvc3RlZE5l
dHNjYXBlUGx1Z2luVmlldyBhbmQgV2ViTmV0c2NhcGVQbHVnaW5WaWV3LgotICAgICAgICAgICAg
ICAgIC8vIFNpbmNlIHRoaXMgbGF5ZXIgaXNuJ3QgZ29pbmcgdG8gYmUgaW5zZXJ0ZWQgaW50byBh
IHZpZXcsIHdlIG5lZWQgdG8gY3JlYXRlIGFub3RoZXIgbGF5ZXIgYW5kIGZsaXAgaXRzIGdlb21l
dHJ5Ci0gICAgICAgICAgICAgICAgLy8gaW4gb3JkZXIgdG8gZ2V0IHRoZSBjb29yZGluYXRlIHN5
c3RlbSByaWdodC4KLSAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0FMYXllcj4gcmVhbFBsdWdp
bkxheWVyID0gV1RGTW92ZShfcGx1Z2luTGF5ZXIpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIF9wbHVnaW5MYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSk7
Ci0gICAgICAgICAgICAgICAgX3BsdWdpbkxheWVyLmdldCgpLmJvdW5kcyA9IHJlYWxQbHVnaW5M
YXllci5nZXQoKS5ib3VuZHM7Ci0gICAgICAgICAgICAgICAgX3BsdWdpbkxheWVyLmdldCgpLmdl
b21ldHJ5RmxpcHBlZCA9IFlFUzsKLQotICAgICAgICAgICAgICAgIHJlYWxQbHVnaW5MYXllci5n
ZXQoKS5hdXRvcmVzaXppbmdNYXNrID0ga0NBTGF5ZXJXaWR0aFNpemFibGUgfCBrQ0FMYXllckhl
aWdodFNpemFibGU7Ci0gICAgICAgICAgICAgICAgW19wbHVnaW5MYXllci5nZXQoKSBhZGRTdWJs
YXllcjpyZWFsUGx1Z2luTGF5ZXIuZ2V0KCldOwotCi0gICAgICAgICAgICAgICAgLy8gRWFnZXJs
eSBlbnRlciBjb21wb3NpdGluZyBtb2RlLCBzaW5jZSB3ZSBrbm93IHdlJ2xsIG5lZWQgaXQuIFRo
aXMgYXZvaWRzIGZpcmluZyBpbnZhbGlkYXRlU3R5bGUoKQotICAgICAgICAgICAgICAgIC8vIGZv
ciBpZnJhbWVzIHRoYXQgY29udGFpbiBjb21wb3NpdGVkIHBsdWdpbnMgYXQgYmFkIHRpbWVzLiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkwMzMKLSAgICAgICAgICAg
ICAgICBjb3JlKFtzZWxmIHdlYkZyYW1lXSktPnZpZXcoKS0+ZW50ZXJDb21wb3NpdGluZ01vZGUo
KTsKLSAgICAgICAgICAgICAgICBbc2VsZiBlbGVtZW50XS0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5
ZXJDb21wb3NpdGlvbigpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgW3Nl
bGYgc2V0V2FudHNMYXllcjpZRVNdOwotCi0gICAgICAgICAgICBMT0coUGx1Z2lucywgIiVAIGlz
IHVzaW5nIENvcmUgQW5pbWF0aW9uIGRyYXdpbmcgbW9kZWwgd2l0aCBsYXllciAlQCIsIF9wbHVn
aW5QYWNrYWdlLmdldCgpLCBfcGx1Z2luTGF5ZXIuZ2V0KCkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgQVNTRVJUKF9wbHVnaW5MYXllcik7Ci0gICAgfQotICAgIAotICAgIC8vIENyZWF0ZSB0aGUg
ZXZlbnQgaGFuZGxlcgotICAgIF9ldmVudEhhbmRsZXIgPSBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50
SGFuZGxlcjo6Y3JlYXRlKHNlbGYpOwotCi0gICAgcmV0dXJuIFlFUzsKLX0KLQotLy8gRklYTUU6
IFRoaXMgbWV0aG9kIGlzIGFuIGlkZWFsIGNhbmRpZGF0ZSB0byBtb3ZlIHVwIHRvIHRoZSBiYXNl
IGNsYXNzCi0tIChDQUxheWVyICopcGx1Z2luTGF5ZXIKLXsKLSAgICByZXR1cm4gX3BsdWdpbkxh
eWVyLmdldCgpOwotfQotCi0tICh2b2lkKXNldExheWVyOihDQUxheWVyICopbmV3TGF5ZXIKLXsK
LSAgICBbc3VwZXIgc2V0TGF5ZXI6bmV3TGF5ZXJdOwotCi0gICAgaWYgKG5ld0xheWVyICYmIF9w
bHVnaW5MYXllcikgewotICAgICAgICBfcGx1Z2luTGF5ZXIuZ2V0KCkuZnJhbWUgPSBbbmV3TGF5
ZXIgZnJhbWVdOwotICAgICAgICBfcGx1Z2luTGF5ZXIuZ2V0KCkuYXV0b3Jlc2l6aW5nTWFzayA9
IGtDQUxheWVyV2lkdGhTaXphYmxlIHwga0NBTGF5ZXJIZWlnaHRTaXphYmxlOwotICAgICAgICBb
bmV3TGF5ZXIgYWRkU3VibGF5ZXI6X3BsdWdpbkxheWVyLmdldCgpXTsKLSAgICB9Ci19Ci0KLS0g
KHZvaWQpbG9hZFN0cmVhbQotewotICAgIGlmIChbc2VsZiBfc2hvdWxkQ2FuY2VsU3JjU3RyZWFt
XSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChfbG9hZE1hbnVhbGx5KSB7Ci0gICAg
ICAgIFtzZWxmIF9yZWRlbGl2ZXJTdHJlYW1dOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IAotICAgIC8vIElmIHRoZSBPQkpFQ1QvRU1CRUQgdGFnIGhhcyBubyBTUkMsIHRoZSBVUkwgaXMg
cGFzc2VkIHRvIHVzIGFzICIiLgotICAgIC8vIENoZWNrIGZvciB0aGlzIGFuZCBkb24ndCBzdGFy
dCBhIGxvYWQgaW4gdGhpcyBjYXNlLgotICAgIGlmIChfc291cmNlVVJMICYmICFbX3NvdXJjZVVS
TC5nZXQoKSBfd2ViX2lzRW1wdHldKSB7Ci0gICAgICAgIE5TTXV0YWJsZVVSTFJlcXVlc3QgKnJl
cXVlc3QgPSBbTlNNdXRhYmxlVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpfc291cmNlVVJMLmdl
dCgpXTsKLSAgICAgICAgW3JlcXVlc3QgX3dlYl9zZXRIVFRQUmVmZXJyZXI6Y29yZShbc2VsZiB3
ZWJGcmFtZV0pLT5sb2FkZXIoKS5vdXRnb2luZ1JlZmVycmVyKCldOwotICAgICAgICBbc2VsZiBs
b2FkUmVxdWVzdDpyZXF1ZXN0IGluVGFyZ2V0Om5pbCB3aXRoTm90aWZ5RGF0YTpuaWwgc2VuZE5v
dGlmaWNhdGlvbjpOT107Ci0gICAgfSAKLX0KLQotLSAoQk9PTClzaG91bGRTdG9wCi17Ci0gICAg
Ly8gSWYgd2UncmUgYWxyZWFkeSBjYWxsaW5nIGEgcGx1Zy1pbiBmdW5jdGlvbiwgZG8gbm90IGNh
bGwgTlBQX0Rlc3Ryb3koKS4gIFRoZSBwbHVnLWluIGZ1bmN0aW9uIHdlIGFyZSBjYWxsaW5nCi0g
ICAgLy8gbWF5IGFzc3VtZSB0aGF0IGl0cyBpbnN0YW5jZS0+cGRhdGEsIG9yIG90aGVyIG1lbW9y
eSBmcmVlZCBieSBOUFBfRGVzdHJveSgpLCBpcyB2YWxpZCBhbmQgdW5jaGFuZ2VkIHVudGlsIHNh
aWQKLSAgICAvLyBwbHVnaW4tZnVuY3Rpb24gcmV0dXJucy4KLSAgICAvLyBTZWUgPHJkYXI6Ly9w
cm9ibGVtLzQ0ODA3Mzc+LgotICAgIGlmIChwbHVnaW5GdW5jdGlvbkNhbGxEZXB0aCA+IDApIHsK
LSAgICAgICAgc2hvdWxkU3RvcFNvb24gPSBZRVM7Ci0gICAgICAgIHJldHVybiBOTzsKLSAgICB9
Ci0KLSAgICByZXR1cm4gWUVTOwotfQotCi0tICh2b2lkKWRlc3Ryb3lQbHVnaW4KLXsKLSAgICAv
LyBUbyBzdG9wIGFjdGl2ZSBzdHJlYW1zIGl0J3MgbmVjZXNzYXJ5IHRvIGludm9rZSBzdG9wKCkg
b24gYSBjb3B5IAotICAgIC8vIG9mIHN0cmVhbXMuIFRoaXMgaXMgYmVjYXVzZSBjYWxsaW5nIFdl
Yk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpzdG9wKCkgYWxzbyBoYXMgdGhlIHNpZGUgZWZmZWN0Ci0g
ICAgLy8gb2YgcmVtb3ZpbmcgYSBzdHJlYW0gZnJvbSB0aGlzIGhhc2ggc2V0LgotICAgIGZvciAo
YXV0byYgc3RyZWFtIDogY29weVRvVmVjdG9yKHN0cmVhbXMpKQotICAgICAgICBzdHJlYW0tPnN0
b3AoKTsKLQotICAgIGZvciAoV2ViRnJhbWUgKmZyYW1lIGluIFtfcGVuZGluZ0ZyYW1lTG9hZHMg
a2V5RW51bWVyYXRvcl0pCi0gICAgICAgIFtmcmFtZSBfc2V0SW50ZXJuYWxMb2FkRGVsZWdhdGU6
bmlsXTsKLSAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFy
Z2V0OnNlbGZdOwotCi0gICAgLy8gU2V0dGluZyB0aGUgd2luZG93IHR5cGUgdG8gMCBlbnN1cmVz
IHRoYXQgTlBQX1NldFdpbmRvdyB3aWxsIGJlIGNhbGxlZCBpZiB0aGUgcGx1Zy1pbiBpcyByZXN0
YXJ0ZWQuCi0gICAgbGFzdFNldFdpbmRvdy50eXBlID0gKE5QV2luZG93VHlwZSkwOwotICAgIAot
ICAgIF9wbHVnaW5MYXllciA9IG5pbDsKLSAgICAKLSAgICBbc2VsZiBfZGVzdHJveVBsdWdpbl07
Ci0gICAgW19wbHVnaW5QYWNrYWdlLmdldCgpIGNsb3NlXTsKLSAgICAKLSAgICBfZXZlbnRIYW5k
bGVyID0gbnVsbHB0cjsKLX0KLQotLSAoTlBFdmVudE1vZGVsKWV2ZW50TW9kZWwKLXsKLSAgICBy
ZXR1cm4gZXZlbnRNb2RlbDsKLX0KLQotLSAoTlBQKXBsdWdpbgotewotICAgIHJldHVybiBwbHVn
aW47Ci19Ci0KLS0gKHZvaWQpc2V0QXR0cmlidXRlS2V5czooTlNBcnJheSAqKWtleXMgYW5kVmFs
dWVzOihOU0FycmF5ICopdmFsdWVzCi17Ci0gICAgQVNTRVJUKFtrZXlzIGNvdW50XSA9PSBbdmFs
dWVzIGNvdW50XSk7Ci0gICAgCi0gICAgLy8gQ29udmVydCB0aGUgYXR0cmlidXRlcyB0byAyIEMg
c3RyaW5nIGFycmF5cy4KLSAgICAvLyBUaGVzZSBhcnJheXMgYXJlIHBhc3NlZCB0byBOUFBfTmV3
LCBidXQgdGhlIHN0cmluZ3MgbmVlZCB0byBiZQotICAgIC8vIG1vZGlmaWFibGUgYW5kIGxpdmUg
dGhlIGVudGlyZSBsaWZlIG9mIHRoZSBwbHVnaW4uCi0KLSAgICAvLyBUaGUgSmF2YSBwbHVnLWlu
IHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSB0aGUgYmFzZSBVUkwKLSAgICBpZiAo
W19NSU1FVHlwZS5nZXQoKSBpc0VxdWFsVG9TdHJpbmc6QCJhcHBsaWNhdGlvbi94LWphdmEtYXBw
bGV0Il0pIHsKLSAgICAgICAgY0F0dHJpYnV0ZXMgPSAoY2hhciAqKiltYWxsb2MoKFtrZXlzIGNv
dW50XSArIDEpICogc2l6ZW9mKGNoYXIgKikpOwotICAgICAgICBjVmFsdWVzID0gKGNoYXIgKiop
bWFsbG9jKChbdmFsdWVzIGNvdW50XSArIDEpICogc2l6ZW9mKGNoYXIgKikpOwotICAgICAgICBj
QXR0cmlidXRlc1swXSA9IHN0cmR1cCgiRE9DQkFTRSIpOwotICAgICAgICBjVmFsdWVzWzBdID0g
c3RyZHVwKFtfYmFzZVVSTC5nZXQoKSBfd2ViX1VSTENTdHJpbmddKTsKLSAgICAgICAgYXJnc0Nv
dW50Kys7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY0F0dHJpYnV0ZXMgPSAoY2hhciAqKiltYWxs
b2MoW2tleXMgY291bnRdICogc2l6ZW9mKGNoYXIgKikpOwotICAgICAgICBjVmFsdWVzID0gKGNo
YXIgKiopbWFsbG9jKFt2YWx1ZXMgY291bnRdICogc2l6ZW9mKGNoYXIgKikpOwotICAgIH0KLQot
ICAgIEJPT0wgaXNXTVAgPSBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgYnVuZGxlSWRlbnRpZmllcl0g
PT0gImNvbS5taWNyb3NvZnQuV01QLmRlZmF1bHRwbHVnaW4iOwotICAgIAotICAgIHVuc2lnbmVk
IGk7Ci0gICAgdW5zaWduZWQgY291bnQgPSBba2V5cyBjb3VudF07Ci0gICAgZm9yIChpID0gMDsg
aSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgTlNTdHJpbmcgKmtleSA9IFtrZXlzIG9iamVjdEF0
SW5kZXg6aV07Ci0gICAgICAgIE5TU3RyaW5nICp2YWx1ZSA9IFt2YWx1ZXMgb2JqZWN0QXRJbmRl
eDppXTsKLSAgICAgICAgaWYgKFtrZXkgX3dlYmtpdF9pc0Nhc2VJbnNlbnNpdGl2ZUVxdWFsVG9T
dHJpbmc6QCJoZWlnaHQiXSkgewotICAgICAgICAgICAgc3BlY2lmaWVkSGVpZ2h0ID0gW3ZhbHVl
IGludFZhbHVlXTsKLSAgICAgICAgfSBlbHNlIGlmIChba2V5IF93ZWJraXRfaXNDYXNlSW5zZW5z
aXRpdmVFcXVhbFRvU3RyaW5nOkAid2lkdGgiXSkgewotICAgICAgICAgICAgc3BlY2lmaWVkV2lk
dGggPSBbdmFsdWUgaW50VmFsdWVdOwotICAgICAgICB9Ci0gICAgICAgIC8vIEF2b2lkIFdpbmRv
dyBNZWRpYSBQbGF5ZXIgY3Jhc2ggd2hlbiB0aGVzZSBhdHRyaWJ1dGVzIGFyZSBwcmVzZW50Lgot
ICAgICAgICBpZiAoaXNXTVAgJiYgKFtrZXkgX3dlYmtpdF9pc0Nhc2VJbnNlbnNpdGl2ZUVxdWFs
VG9TdHJpbmc6QCJTQU1JU3R5bGUiXSB8fCBba2V5IF93ZWJraXRfaXNDYXNlSW5zZW5zaXRpdmVF
cXVhbFRvU3RyaW5nOkAiU0FNSUxhbmciXSkpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0gICAgICAgIGNBdHRyaWJ1dGVzW2FyZ3NDb3VudF0gPSBzdHJkdXAoW2tleSBVVEY4
U3RyaW5nXSk7Ci0gICAgICAgIGNWYWx1ZXNbYXJnc0NvdW50XSA9IHN0cmR1cChbdmFsdWUgVVRG
OFN0cmluZ10pOwotICAgICAgICBMT0coUGx1Z2lucywgIiVAID0gJUAiLCBrZXksIHZhbHVlKTsK
LSAgICAgICAgYXJnc0NvdW50Kys7Ci0gICAgfQotfQotCi0vLyBNQVJLOiBOU1ZJRVcKLQotLSAo
aWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lCi0gICAgICBwbHVnaW5QYWNrYWdlOihXZWJO
ZXRzY2FwZVBsdWdpblBhY2thZ2UgKilwbHVnaW5QYWNrYWdlCi0gICAgICAgICAgICAgICAgVVJM
OihOU1VSTCAqKVVSTAotICAgICAgICAgICAgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMCi0gICAg
ICAgICAgIE1JTUVUeXBlOihOU1N0cmluZyAqKU1JTUUKLSAgICAgIGF0dHJpYnV0ZUtleXM6KE5T
QXJyYXkgKilrZXlzCi0gICAgYXR0cmlidXRlVmFsdWVzOihOU0FycmF5ICopdmFsdWVzCi0gICAg
ICAgbG9hZE1hbnVhbGx5OihCT09MKWxvYWRNYW51YWxseQotICAgICAgICAgICAgZWxlbWVudDoo
UmVmUHRyPFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50PiYmKWVsZW1lbnQKLXsKLSAgICBzZWxm
ID0gW3N1cGVyIGluaXRXaXRoRnJhbWU6ZnJhbWUgcGx1Z2luUGFja2FnZTpwbHVnaW5QYWNrYWdl
IFVSTDpVUkwgYmFzZVVSTDpiYXNlVVJMIE1JTUVUeXBlOk1JTUUgYXR0cmlidXRlS2V5czprZXlz
IGF0dHJpYnV0ZVZhbHVlczp2YWx1ZXMgbG9hZE1hbnVhbGx5OmxvYWRNYW51YWxseSBlbGVtZW50
OldURk1vdmUoZWxlbWVudCldOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgIF9wZW5kaW5nRnJhbWVMb2FkcyA9IGFkb3B0TlMoW1tOU01hcFRhYmxlIGFsbG9jXSBp
bml0V2l0aEtleU9wdGlvbnM6TlNQb2ludGVyRnVuY3Rpb25zU3Ryb25nTWVtb3J5IHZhbHVlT3B0
aW9uczpOU1BvaW50ZXJGdW5jdGlvbnNTdHJvbmdNZW1vcnkgY2FwYWNpdHk6MF0pOwotCi0gICAg
Ly8gbG9hZCB0aGUgcGx1Zy1pbiBpZiBpdCBpcyBub3QgYWxyZWFkeSBsb2FkZWQKLSAgICBpZiAo
IVtwbHVnaW5QYWNrYWdlIGxvYWRdKSB7Ci0gICAgICAgIFtzZWxmIHJlbGVhc2VdOwotICAgICAg
ICByZXR1cm4gbmlsOwotICAgIH0KLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpZClpbml0
V2l0aEZyYW1lOihOU1JlY3QpZnJhbWUKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gbmlsOwotfQotCi0tICh2b2lkKWZpbmkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYXJnc0NvdW50OyBpKyspIHsKLSAgICAgICAgZnJlZShjQXR0cmlidXRlc1tpXSk7
Ci0gICAgICAgIGZyZWUoY1ZhbHVlc1tpXSk7Ci0gICAgfQotICAgIGZyZWUoY0F0dHJpYnV0ZXMp
OwotICAgIGZyZWUoY1ZhbHVlcyk7Ci0gICAgCi0gICAgQVNTRVJUKCFfZXZlbnRIYW5kbGVyKTsK
LX0KLQotLSAodm9pZClkaXNjb25uZWN0U3RyZWFtOihXZWJOZXRzY2FwZVBsdWdpblN0cmVhbSop
c3RyZWFtCi17Ci0gICAgc3RyZWFtcy5yZW1vdmUoc3RyZWFtKTsKLX0KLQotLSAodm9pZClkZWFs
bG9jCi17Ci0gICAgQVNTRVJUKCFfaXNTdGFydGVkKTsKLSAgICBBU1NFUlQoIXBsdWdpbik7Ci0K
LSAgICBbc2VsZiBmaW5pXTsKLQotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClk
cmF3UmVjdDooTlNSZWN0KXJlY3QKLXsKLSAgICBpZiAoX2NhY2hlZFNuYXBzaG90KSB7Ci0gICAg
ICAgIE5TUmVjdCBzb3VyY2VSZWN0ID0geyBOU1plcm9Qb2ludCwgW19jYWNoZWRTbmFwc2hvdC5n
ZXQoKSBzaXplXSB9OwotICAgICAgICBbX2NhY2hlZFNuYXBzaG90LmdldCgpIGRyYXdJblJlY3Q6
W3NlbGYgYm91bmRzXSBmcm9tUmVjdDpzb3VyY2VSZWN0IG9wZXJhdGlvbjpOU0NvbXBvc2l0ZVNv
dXJjZU92ZXIgZnJhY3Rpb246MV07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAg
aWYgKGRyYXdpbmdNb2RlbCA9PSBOUERyYXdpbmdNb2RlbENvcmVBbmltYXRpb24gJiYgKCFfc25h
cHNob3R0aW5nIHx8ICFbc2VsZiBzdXBwb3J0c1NuYXBzaG90dGluZ10pKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoIV9pc1N0YXJ0ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBp
ZiAoW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0RHJhd2luZ1RvU2NyZWVuXSB8fCBf
aXNGbGFzaCkKLSAgICAgICAgW3NlbGYgc2VuZERyYXdSZWN0RXZlbnQ6cmVjdF07Ci19Ci0KLS0g
KE5QT2JqZWN0ICopY3JlYXRlUGx1Z2luU2NyaXB0YWJsZU9iamVjdAotewotICAgIGlmICghW19w
bHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+Z2V0dmFsdWUgfHwgIV9pc1N0YXJ0ZWQp
Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAKLSAgICBOUE9iamVjdCAqdmFsdWUgPSBO
VUxMOwotICAgIE5QRXJyb3IgZXJyb3I7Ci0gICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlv
bl07Ci0gICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhjb21tb25WTSgpKTsKLSAgICAgICAgZXJyb3IgPSBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1
Z2luRnVuY3NdLT5nZXR2YWx1ZShwbHVnaW4sIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3Qs
ICZ2YWx1ZSk7Ci0gICAgfQotICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07Ci0gICAg
aWYgKGVycm9yICE9IE5QRVJSX05PX0VSUk9SKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAK
LSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLS0gKEJPT0wpZ2V0Rm9ybVZhbHVlOihOU1N0cmluZyAq
Kil2YWx1ZQotewotICAgIGlmICghW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+
Z2V0dmFsdWUgfHwgIV9pc1N0YXJ0ZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBQ
bHVnaW5zIHdpbGwgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgYnVmZmVyIGJ5IHVzaW5nIE5QTl9N
ZW1BbGxvYygpLgotICAgIGNoYXIqIGJ1ZmZlciA9IE5VTEw7Ci0gICAgTlBFcnJvciBlcnJvcjsK
LSAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKLSAgICB7Ci0gICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwotICAgICAgICBl
cnJvciA9IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPmdldHZhbHVlKHBsdWdp
biwgTlBQVmZvcm1WYWx1ZSwgJmJ1ZmZlcik7Ci0gICAgfQotICAgIFtzZWxmIGRpZENhbGxQbHVn
SW5GdW5jdGlvbl07Ci0gICAgaWYgKGVycm9yICE9IE5QRVJSX05PX0VSUk9SIHx8ICFidWZmZXIp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAqdmFsdWUgPSBbW05TU3RyaW5nIGFsbG9jXSBp
bml0V2l0aFVURjhTdHJpbmc6YnVmZmVyXTsKLSAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgYnJv
d3NlckZ1bmNzXS0+bWVtZnJlZShidWZmZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi0tICh2
b2lkKXdpbGxDYWxsUGx1Z0luRnVuY3Rpb24KLXsKLSAgICBBU1NFUlQocGx1Z2luKTsKLQotICAg
IC8vIENvdWxkIHRyeSB0byBwcmV2ZW50IGluZmluaXRlIHJlY3Vyc2lvbiBoZXJlLCBidXQgaXQn
cyBwcm9iYWJseSBub3Qgd29ydGggdGhlIGVmZm9ydC4KLSAgICBwbHVnaW5GdW5jdGlvbkNhbGxE
ZXB0aCsrOwotfQotCi0tICh2b2lkKWRpZENhbGxQbHVnSW5GdW5jdGlvbgotewotICAgIEFTU0VS
VChwbHVnaW5GdW5jdGlvbkNhbGxEZXB0aCA+IDApOwotICAgIHBsdWdpbkZ1bmN0aW9uQ2FsbERl
cHRoLS07Ci0gICAgCi0gICAgLy8gSWYgLXN0b3Agd2FzIGNhbGxlZCB3aGlsZSB3ZSB3ZXJlIGNh
bGxpbmcgaW50byBhIHBsdWctaW4gZnVuY3Rpb24sIGFuZCB3ZSdyZSBubyBsb25nZXIKLSAgICAv
LyBpbnNpZGUgYSBwbHVnLWluIGZ1bmN0aW9uLCBzdG9wIG5vdy4KLSAgICBpZiAocGx1Z2luRnVu
Y3Rpb25DYWxsRGVwdGggPT0gMCAmJiBzaG91bGRTdG9wU29vbikgewotICAgICAgICBzaG91bGRT
dG9wU29vbiA9IE5POwotICAgICAgICBbc2VsZiBzdG9wXTsKLSAgICB9Ci19Ci0KLS0odm9pZClw
bHVnaW5WaWV3OihOU1ZpZXcgKilwbHVnaW5WaWV3IHJlY2VpdmVkUmVzcG9uc2U6KE5TVVJMUmVz
cG9uc2UgKilyZXNwb25zZQotewotICAgIEFTU0VSVChfbG9hZE1hbnVhbGx5KTsKLSAgICBBU1NF
UlQoIV9tYW51YWxTdHJlYW0pOwotCi0gICAgX21hbnVhbFN0cmVhbSA9IFdlYk5ldHNjYXBlUGx1
Z2luU3RyZWFtOjpjcmVhdGUoJmNvcmUoW3NlbGYgd2ViRnJhbWVdKS0+bG9hZGVyKCkpOwotfQot
Ci0tICh2b2lkKXBsdWdpblZpZXc6KE5TVmlldyAqKXBsdWdpblZpZXcgcmVjZWl2ZWREYXRhOihO
U0RhdGEgKilkYXRhCi17Ci0gICAgQVNTRVJUKF9sb2FkTWFudWFsbHkpOwotICAgIEFTU0VSVChf
bWFudWFsU3RyZWFtKTsKLSAgICAKLSAgICBfZGF0YUxlbmd0aFJlY2VpdmVkICs9IFtkYXRhIGxl
bmd0aF07Ci0gICAgCi0gICAgaWYgKCFfaXNTdGFydGVkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIV9tYW51YWxTdHJlYW0tPnBsdWdpbigpKSB7Ci0gICAgICAgIC8vIENoZWNrIGlmIHRo
ZSBsb2FkIHNob3VsZCBiZSBjYW5jZWxsZWQKLSAgICAgICAgaWYgKFtzZWxmIF9zaG91bGRDYW5j
ZWxTcmNTdHJlYW1dKSB7Ci0gICAgICAgICAgICBOU1VSTFJlc3BvbnNlICpyZXNwb25zZSA9IFtb
c2VsZiBkYXRhU291cmNlXSByZXNwb25zZV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF1
dG8gZXJyb3IgPSBhZG9wdE5TKFtbTlNFcnJvciBhbGxvY10gX2luaXRXaXRoUGx1Z2luRXJyb3JD
b2RlOldlYktpdEVycm9yUGx1Z0luV2lsbEhhbmRsZUxvYWQKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRVUkw6W3Jlc3Bv
bnNlIFVSTF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBsdWdpblBhZ2VVUkw6bmlsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5OYW1lOm5pbCAvLyBGSVhNRTog
R2V0IHRoaXMgZnJvbSBzb21ld2hlcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6W3Jlc3BvbnNlIE1JTUVUeXBl
XV0pOwotICAgICAgICAgICAgW1tzZWxmIGRhdGFTb3VyY2VdIF9kb2N1bWVudExvYWRlcl0tPmNh
bmNlbE1haW5SZXNvdXJjZUxvYWQoZXJyb3IuZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBfbWFudWFsU3RyZWFtLT5zZXRSZXF1ZXN0VVJM
KFtbW3NlbGYgZGF0YVNvdXJjZV0gcmVxdWVzdF0gVVJMXSk7Ci0gICAgICAgIF9tYW51YWxTdHJl
YW0tPnNldFBsdWdpbihbc2VsZiBwbHVnaW5dKTsKLSAgICAgICAgQVNTRVJUKF9tYW51YWxTdHJl
YW0tPnBsdWdpbigpKTsKLSAgICAgICAgCi0gICAgICAgIF9tYW51YWxTdHJlYW0tPnN0YXJ0U3Ry
ZWFtV2l0aFJlc3BvbnNlKFtbc2VsZiBkYXRhU291cmNlXSByZXNwb25zZV0pOwotICAgIH0KLQot
ICAgIGlmIChfbWFudWFsU3RyZWFtLT5wbHVnaW4oKSkKLSAgICAgICAgX21hbnVhbFN0cmVhbS0+
ZGlkUmVjZWl2ZURhdGEoMCwgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KFtkYXRhIGJ5dGVz
XSksIFtkYXRhIGxlbmd0aF0pOwotfQotCi0tICh2b2lkKXBsdWdpblZpZXc6KE5TVmlldyAqKXBs
dWdpblZpZXcgcmVjZWl2ZWRFcnJvcjooTlNFcnJvciAqKWVycm9yCi17Ci0gICAgQVNTRVJUKF9s
b2FkTWFudWFsbHkpOwotCi0gICAgX2Vycm9yID0gZXJyb3I7Ci0gICAgCi0gICAgaWYgKCFfaXNT
dGFydGVkKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBfbWFudWFsU3RyZWFtLT5k
ZXN0cm95U3RyZWFtV2l0aEVycm9yKGVycm9yKTsKLX0KLQotLSAodm9pZClwbHVnaW5WaWV3Rmlu
aXNoZWRMb2FkaW5nOihOU1ZpZXcgKilwbHVnaW5WaWV3IAotewotICAgIEFTU0VSVChfbG9hZE1h
bnVhbGx5KTsKLSAgICBBU1NFUlQoX21hbnVhbFN0cmVhbSk7Ci0gICAgCi0gICAgaWYgKF9pc1N0
YXJ0ZWQpCi0gICAgICAgIF9tYW51YWxTdHJlYW0tPmRpZEZpbmlzaExvYWRpbmcoMCk7Ci19Ci0K
LS0gKE5TVGV4dElucHV0Q29udGV4dCAqKWlucHV0Q29udGV4dAotewotICAgIHJldHVybiBuaWw7
Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYk5ldHNjYXBlUGx1Z2luVmlldyAoV2Vi
TlBQQ2FsbGJhY2tzKQotCi0tICh2b2lkKWV2YWx1YXRlSmF2YVNjcmlwdFBsdWdpblJlcXVlc3Q6
KFdlYlBsdWdpblJlcXVlc3QgKilKU1BsdWdpblJlcXVlc3QKLXsKLSAgICAvLyBGSVhNRTogSXMg
dGhpcyBpc1N0YXJ0ZWQgY2hlY2sgbmVlZGVkIGhlcmU/IGV2YWx1YXRlSmF2YVNjcmlwdFBsdWdp
blJlcXVlc3Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQKLSAgICAvLyBpZiB3ZSBhcmUgc3RvcHBlZCBz
aW5jZSB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgYWZ0ZXIgYSBkZWxheSBhbmQgd2UgY2FsbCAKLSAg
ICAvLyBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQgaW5zaWRlIG9mIHN0
b3AuCi0gICAgaWYgKCFfaXNTdGFydGVkKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Ci0gICAgTlNVUkwgKlVSTCA9IFtbSlNQbHVnaW5SZXF1ZXN0IHJlcXVlc3RdIFVSTF07Ci0gICAg
TlNTdHJpbmcgKkpTU3RyaW5nID0gW1VSTCBfd2Via2l0X3NjcmlwdElmSmF2YVNjcmlwdFVSTF07
Ci0gICAgQVNTRVJUKEpTU3RyaW5nKTsKLSAgICAKLSAgICBOU1N0cmluZyAqcmVzdWx0ID0gW1tz
ZWxmIHdlYkZyYW1lXSBfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6SlNT
dHJpbmcgZm9yY2VVc2VyR2VzdHVyZTpbSlNQbHVnaW5SZXF1ZXN0IGlzQ3VycmVudEV2ZW50VXNl
ckdlc3R1cmVdXTsKLSAgICAKLSAgICAvLyBEb24ndCBjb250aW51ZSBpZiBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZyBjYXVzZWQgdGhlIHBsdWctaW4gdG8gc3RvcC4KLSAg
ICBpZiAoIV9pc1N0YXJ0ZWQpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAgICAgCi0g
ICAgaWYgKFtKU1BsdWdpblJlcXVlc3QgZnJhbWVOYW1lXSAhPSBuaWwpIHsKLSAgICAgICAgLy8g
RklYTUU6IElmIHRoZSByZXN1bHQgaXMgYSBzdHJpbmcsIHdlIHByb2JhYmx5IHdhbnQgdG8gcHV0
IHRoYXQgc3RyaW5nIGludG8gdGhlIGZyYW1lLgotICAgICAgICBpZiAoW0pTUGx1Z2luUmVxdWVz
dCBzZW5kTm90aWZpY2F0aW9uXSkgewotICAgICAgICAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5G
dW5jdGlvbl07Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7Ci0gICAgICAgICAgICAgICAgW19w
bHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+dXJsbm90aWZ5KHBsdWdpbiwgW1VSTCBf
d2ViX1VSTENTdHJpbmddLCBOUFJFU19ET05FLCBbSlNQbHVnaW5SZXF1ZXN0IG5vdGlmeURhdGFd
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlv
bl07Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFtyZXN1bHQgbGVuZ3RoXSA+IDApIHsKLSAg
ICAgICAgLy8gRG9uJ3QgY2FsbCBOUFBfTmV3U3RyZWFtIGFuZCBvdGhlciBzdHJlYW0gbWV0aG9k
cyBpZiB0aGVyZSBpcyBubyBKUyByZXN1bHQgdG8gZGVsaXZlci4gVGhpcyBpcyB3aGF0IE1vemls
bGEgZG9lcy4KLSAgICAgICAgTlNEYXRhICpKU0RhdGEgPSBbcmVzdWx0IGRhdGFVc2luZ0VuY29k
aW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKLSAgICAgICAgCi0gICAgICAgIGF1dG8gc3RyZWFt
ID0gV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OmNyZWF0ZShbTlNVUkxSZXF1ZXN0IHJlcXVlc3RX
aXRoVVJMOlVSTF0sIHBsdWdpbiwgW0pTUGx1Z2luUmVxdWVzdCBzZW5kTm90aWZpY2F0aW9uXSwg
W0pTUGx1Z2luUmVxdWVzdCBub3RpZnlEYXRhXSk7Ci0gICAgICAgIAotICAgICAgICBSZXRhaW5Q
dHI8TlNVUkxSZXNwb25zZT4gcmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNVUkxSZXNwb25zZSBhbGxv
Y10gaW5pdFdpdGhVUkw6VVJMIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpAInRleHQv
cGxhaW4iIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4cGVjdGVkQ29udGVudExlbmd0aDpbSlNEYXRhIGxlbmd0aF0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHRFbmNvZGluZ05hbWU6bmlsXSk7Ci0gICAgICAgIAotICAgICAgICBzdHJl
YW0tPnN0YXJ0U3RyZWFtV2l0aFJlc3BvbnNlKHJlc3BvbnNlLmdldCgpKTsKLSAgICAgICAgc3Ry
ZWFtLT5kaWRSZWNlaXZlRGF0YSgwLCBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oW0pTRGF0
YSBieXRlc10pLCBbSlNEYXRhIGxlbmd0aF0pOwotICAgICAgICBzdHJlYW0tPmRpZEZpbmlzaExv
YWRpbmcoMCk7Ci0gICAgfQotfQotCi0tICh2b2lkKXdlYkZyYW1lOihXZWJGcmFtZSAqKXdlYkZy
YW1lIGRpZEZpbmlzaExvYWRXaXRoUmVhc29uOihOUFJlYXNvbilyZWFzb24KLXsKLSAgICBBU1NF
UlQoX2lzU3RhcnRlZCk7Ci0gICAgCi0gICAgV2ViUGx1Z2luUmVxdWVzdCAqcGx1Z2luUmVxdWVz
dCA9IFtfcGVuZGluZ0ZyYW1lTG9hZHMgb2JqZWN0Rm9yS2V5OndlYkZyYW1lXTsKLSAgICBBU1NF
UlQocGx1Z2luUmVxdWVzdCAhPSBuaWwpOwotICAgIEFTU0VSVChbcGx1Z2luUmVxdWVzdCBzZW5k
Tm90aWZpY2F0aW9uXSk7Ci0gICAgICAgIAotICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rp
b25dOwotICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoY29tbW9uVk0oKSk7Ci0gICAgICAgIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5j
c10tPnVybG5vdGlmeShwbHVnaW4sIFtbW3BsdWdpblJlcXVlc3QgcmVxdWVzdF0gVVJMXSBfd2Vi
X1VSTENTdHJpbmddLCByZWFzb24sIFtwbHVnaW5SZXF1ZXN0IG5vdGlmeURhdGFdKTsKLSAgICB9
Ci0gICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKLSAgICAKLSAgICBbX3BlbmRpbmdG
cmFtZUxvYWRzIHJlbW92ZU9iamVjdEZvcktleTp3ZWJGcmFtZV07Ci0gICAgW3dlYkZyYW1lIF9z
ZXRJbnRlcm5hbExvYWREZWxlZ2F0ZTpuaWxdOwotfQotCi0tICh2b2lkKXdlYkZyYW1lOihXZWJG
cmFtZSAqKXdlYkZyYW1lIGRpZEZpbmlzaExvYWRXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgot
ewotICAgIE5QUmVhc29uIHJlYXNvbiA9IE5QUkVTX0RPTkU7Ci0gICAgaWYgKGVycm9yICE9IG5p
bCkKLSAgICAgICAgcmVhc29uID0gV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OnJlYXNvbkZvckVy
cm9yKGVycm9yKTsKLSAgICBbc2VsZiB3ZWJGcmFtZTp3ZWJGcmFtZSBkaWRGaW5pc2hMb2FkV2l0
aFJlYXNvbjpyZWFzb25dOwotfQotCi0tICh2b2lkKWxvYWRQbHVnaW5SZXF1ZXN0OihXZWJQbHVn
aW5SZXF1ZXN0ICopcGx1Z2luUmVxdWVzdAotewotICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9
IFtwbHVnaW5SZXF1ZXN0IHJlcXVlc3RdOwotICAgIE5TU3RyaW5nICpmcmFtZU5hbWUgPSBbcGx1
Z2luUmVxdWVzdCBmcmFtZU5hbWVdOwotICAgIFdlYkZyYW1lICpmcmFtZSA9IG5pbDsKLSAgICAK
LSAgICBOU1VSTCAqVVJMID0gW3JlcXVlc3QgVVJMXTsKLSAgICBOU1N0cmluZyAqSlNTdHJpbmcg
PSBbVVJMIF93ZWJraXRfc2NyaXB0SWZKYXZhU2NyaXB0VVJMXTsKLSAgICAKLSAgICBBU1NFUlQo
ZnJhbWVOYW1lIHx8IEpTU3RyaW5nKTsKLSAgICAKLSAgICBpZiAoZnJhbWVOYW1lKSB7Ci0gICAg
ICAgIC8vIEZJWE1FIC0gbmVlZCB0byBnZXQgcmlkIG9mIHRoaXMgd2luZG93IGNyZWF0aW9uIHdo
aWNoCi0gICAgICAgIC8vIGJ5cGFzc2VzIG5vcm1hbCB0YXJnZXRlZCBsaW5rIGhhbmRsaW5nCi0g
ICAgICAgIGZyYW1lID0ga2l0KGNvcmUoW3NlbGYgd2ViRnJhbWVdKS0+bG9hZGVyKCkuZmluZEZy
YW1lRm9yTmF2aWdhdGlvbihmcmFtZU5hbWUpKTsKLSAgICAgICAgaWYgKGZyYW1lID09IG5pbCkg
ewotICAgICAgICAgICAgV2ViVmlldyAqY3VycmVudFdlYlZpZXcgPSBbc2VsZiB3ZWJWaWV3XTsK
LSAgICAgICAgICAgIGF1dG8gZmVhdHVyZXMgPSBhZG9wdE5TKFtbTlNEaWN0aW9uYXJ5IGFsbG9j
XSBpbml0XSk7Ci0gICAgICAgICAgICBXZWJWaWV3ICpuZXdXZWJWaWV3ID0gW1tjdXJyZW50V2Vi
VmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzpjdXJyZW50V2ViVmlldwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVX
ZWJWaWV3V2l0aFJlcXVlc3Q6bmlsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dGZWF0dXJlczpmZWF0dXJlcy5n
ZXQoKV07Ci0KLSAgICAgICAgICAgIGlmICghbmV3V2ViVmlldykgewotICAgICAgICAgICAgICAg
IGlmIChbcGx1Z2luUmVxdWVzdCBzZW5kTm90aWZpY2F0aW9uXSkgewotICAgICAgICAgICAgICAg
ICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoY29tbW9uVk0oKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBbX3BsdWdpblBh
Y2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT51cmxub3RpZnkocGx1Z2luLCBbW1twbHVnaW5SZXF1
ZXN0IHJlcXVlc3RdIFVSTF0gX3dlYl9VUkxDU3RyaW5nXSwgTlBFUlJfR0VORVJJQ19FUlJPUiwg
W3BsdWdpblJlcXVlc3Qgbm90aWZ5RGF0YV0pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgZnJhbWUgPSBbbmV3V2ViVmlldyBtYWluRnJhbWVdOwotICAgICAg
ICAgICAgY29yZShmcmFtZSktPnRyZWUoKS5zZXROYW1lKGZyYW1lTmFtZSk7Ci0gICAgICAgICAg
ICBbW25ld1dlYlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXdTaG93Om5ld1dlYlZp
ZXddOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKEpTU3RyaW5nKSB7Ci0gICAgICAgIEFT
U0VSVChmcmFtZSA9PSBuaWwgfHwgW3NlbGYgd2ViRnJhbWVdID09IGZyYW1lKTsKLSAgICAgICAg
W3NlbGYgZXZhbHVhdGVKYXZhU2NyaXB0UGx1Z2luUmVxdWVzdDpwbHVnaW5SZXF1ZXN0XTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBbZnJhbWUgbG9hZFJlcXVlc3Q6cmVxdWVzdF07Ci0gICAgICAg
IGlmIChbcGx1Z2luUmVxdWVzdCBzZW5kTm90aWZpY2F0aW9uXSkgewotICAgICAgICAgICAgLy8g
Q2hlY2sgaWYgYW5vdGhlciBwbHVnLWluIHZpZXcgb3IgZXZlbiB0aGlzIHZpZXcgaXMgd2FpdGlu
ZyBmb3IgdGhlIGZyYW1lIHRvIGxvYWQuCi0gICAgICAgICAgICAvLyBJZiBpdCBpcywgdGVsbCBp
dCB0aGF0IHRoZSBsb2FkIHdhcyBjYW5jZWxsZWQgYmVjYXVzZSBpdCB3aWxsIGJlIGFueXdheS4K
LSAgICAgICAgICAgIFdlYk5ldHNjYXBlUGx1Z2luVmlldyAqdmlldyA9IFtmcmFtZSBfaW50ZXJu
YWxMb2FkRGVsZWdhdGVdOwotICAgICAgICAgICAgaWYgKHZpZXcgIT0gbmlsKSB7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKFt2aWV3IGlzS2luZE9mQ2xhc3M6W1dlYk5ldHNjYXBlUGx1Z2luVmll
dyBjbGFzc11dKTsKLSAgICAgICAgICAgICAgICBbdmlldyB3ZWJGcmFtZTpmcmFtZSBkaWRGaW5p
c2hMb2FkV2l0aFJlYXNvbjpOUFJFU19VU0VSX0JSRUFLXTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIFtfcGVuZGluZ0ZyYW1lTG9hZHMgc2V0T2JqZWN0OnBsdWdpblJlcXVlc3QgZm9yS2V5
OmZyYW1lXTsKLSAgICAgICAgICAgIFtmcmFtZSBfc2V0SW50ZXJuYWxMb2FkRGVsZWdhdGU6c2Vs
Zl07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS0gKE5QRXJyb3IpbG9hZFJlcXVlc3Q6KE5TTXV0
YWJsZVVSTFJlcXVlc3QgKilyZXF1ZXN0IGluVGFyZ2V0Oihjb25zdCBjaGFyICopY1RhcmdldCB3
aXRoTm90aWZ5RGF0YToodm9pZCAqKW5vdGlmeURhdGEgc2VuZE5vdGlmaWNhdGlvbjooQk9PTClz
ZW5kTm90aWZpY2F0aW9uCi17Ci0gICAgTlNVUkwgKlVSTCA9IFtyZXF1ZXN0IFVSTF07Ci0KLSAg
ICBpZiAoIVVSTCkgCi0gICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1VSTDsKLQotICAgIC8v
IERvbid0IGFsbG93IHJlcXVlc3RzIHRvIGJlIGxvYWRlZCB3aGVuIHRoZSBkb2N1bWVudCBsb2Fk
ZXIgaXMgc3RvcHBpbmcgYWxsIGxvYWRlcnMuCi0gICAgaWYgKFtbc2VsZiBkYXRhU291cmNlXSBf
ZG9jdW1lbnRMb2FkZXJdLT5pc1N0b3BwaW5nKCkpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5F
UklDX0VSUk9SOwotICAgIAotICAgIE5TU3RyaW5nICp0YXJnZXQgPSBuaWw7Ci0gICAgaWYgKGNU
YXJnZXQpIHsKLSAgICAgICAgLy8gRmluZCB0aGUgZnJhbWUgZ2l2ZW4gdGhlIHRhcmdldCBzdHJp
bmcuCi0gICAgICAgIHRhcmdldCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ1N0cmluZzpjVGFyZ2V0
IGVuY29kaW5nOk5TSVNPTGF0aW4xU3RyaW5nRW5jb2RpbmddOwotICAgIH0KLSAgICBXZWJGcmFt
ZSAqZnJhbWUgPSBbc2VsZiB3ZWJGcmFtZV07Ci0KLSAgICAvLyBkb24ndCBsZXQgYSBwbHVnaW4g
c3RhcnQgYW55IGxvYWRzIGlmIGl0IGlzIG5vIGxvbmdlciBwYXJ0IG9mIGEgZG9jdW1lbnQgdGhh
dCBpcyBiZWluZyAKLSAgICAvLyBkaXNwbGF5ZWQgdW5sZXNzIHRoZSBsb2FkcyBhcmUgaW4gdGhl
IHNhbWUgZnJhbWUgYXMgdGhlIHBsdWdpbi4KLSAgICBpZiAoW1tzZWxmIGRhdGFTb3VyY2VdIF9k
b2N1bWVudExvYWRlcl0gIT0gY29yZShbc2VsZiB3ZWJGcmFtZV0pLT5sb2FkZXIoKS5hY3RpdmVE
b2N1bWVudExvYWRlcigpICYmCi0gICAgICAgICghY1RhcmdldCB8fCBbZnJhbWUgZmluZEZyYW1l
TmFtZWQ6dGFyZ2V0XSAhPSBmcmFtZSkpIHsKLSAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNf
RVJST1I7IAotICAgIH0KLSAgICAKLSAgICBOU1N0cmluZyAqSlNTdHJpbmcgPSBbVVJMIF93ZWJr
aXRfc2NyaXB0SWZKYXZhU2NyaXB0VVJMXTsKLSAgICBpZiAoSlNTdHJpbmcgIT0gbmlsKSB7Ci0g
ICAgICAgIGlmICghW1tbc2VsZiB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gaXNKYXZhU2NyaXB0RW5h
YmxlZF0pIHsKLSAgICAgICAgICAgIC8vIFJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SIGlmIEpT
IGlzIGRpc2FibGVkLiBUaGlzIGlzIHdoYXQgTW96aWxsYSBkb2VzLgotICAgICAgICAgICAgcmV0
dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgIH0gZWxzZSBpZiAoY1RhcmdldCA9PSBO
VUxMICYmIF9tb2RlID09IE5QX0ZVTEwpIHsKLSAgICAgICAgICAgIC8vIERvbid0IGFsbG93IGEg
SmF2YVNjcmlwdCByZXF1ZXN0IGZyb20gYSBzdGFuZGFsb25lIHBsdWctaW4gdGhhdCBpcyBzZWxm
LXRhcmdldHRlZAotICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGlzIGNhbiBjYXVzZSB0aGUgdXNl
ciB0byBiZSByZWRpcmVjdGVkIHRvIGEgYmxhbmsgcGFnZSAoMzQyNDAzOSkuCi0gICAgICAgICAg
ICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmICghY29yZShbc2VsZiB3ZWJGcmFtZV0pLT5kb2N1bWVudCgpLT5zZWN1cml0eU9y
aWdpbigpLmNhbkRpc3BsYXkoVVJMKSkKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklD
X0VSUk9SOwotICAgIH0KLSAgICAgICAgCi0gICAgaWYgKGNUYXJnZXQgfHwgSlNTdHJpbmcpIHsK
LSAgICAgICAgLy8gTWFrZSB3aGVuIHRhcmdldGluZyBhIGZyYW1lIG9yIGV2YWx1YXRpbmcgYSBK
UyBzdHJpbmcsIHBlcmZvcm0gdGhlIHJlcXVlc3QgYWZ0ZXIgYSBkZWxheSBiZWNhdXNlIHdlIGRv
bid0Ci0gICAgICAgIC8vIHdhbnQgdG8gcG90ZW50aWFsbHkga2lsbCB0aGUgcGx1Zy1pbiBpbnNp
ZGUgb2YgaXRzIFVSTCByZXF1ZXN0LgotICAgICAgICAKLSAgICAgICAgaWYgKEpTU3RyaW5nICYm
IHRhcmdldCAmJiBbZnJhbWUgZmluZEZyYW1lTmFtZWQ6dGFyZ2V0XSAhPSBmcmFtZSkgewotICAg
ICAgICAgICAgLy8gRm9yIHNlY3VyaXR5IHJlYXNvbnMsIG9ubHkgYWxsb3cgSlMgcmVxdWVzdHMg
dG8gYmUgbWFkZSBvbiB0aGUgZnJhbWUgdGhhdCBjb250YWlucyB0aGUgcGx1Zy1pbi4KLSAgICAg
ICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBib29sIGN1cnJlbnRFdmVudElzVXNlckdlc3R1cmUgPSBmYWxzZTsKLSAgICAgICAg
aWYgKF9ldmVudEhhbmRsZXIpCi0gICAgICAgICAgICBjdXJyZW50RXZlbnRJc1VzZXJHZXN0dXJl
ID0gX2V2ZW50SGFuZGxlci0+Y3VycmVudEV2ZW50SXNVc2VyR2VzdHVyZSgpOwotICAgICAgICAK
LSAgICAgICAgYXV0byBwbHVnaW5SZXF1ZXN0ID0gYWRvcHROUyhbW1dlYlBsdWdpblJlcXVlc3Qg
YWxsb2NdIGluaXRXaXRoUmVxdWVzdDpyZXF1ZXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lTmFt
ZTp0YXJnZXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlEYXRhOm5vdGlmeURhdGEgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VuZE5vdGlmaWNhdGlvbjpzZW5kTm90aWZpY2F0aW9uCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRTdGFydEZyb21Vc2Vy
R2VzdHVyZTpjdXJyZW50RXZlbnRJc1VzZXJHZXN0dXJlXSk7Ci0gICAgICAgIFtzZWxmIHBlcmZv
cm1TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFBsdWdpblJlcXVlc3Q6KSB3aXRoT2JqZWN0OnBsdWdp
blJlcXVlc3QuZ2V0KCkgYWZ0ZXJEZWxheTowXTsKLSAgICB9IGVsc2UgewotICAgICAgICBhdXRv
IHN0cmVhbSA9IFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpjcmVhdGUocmVxdWVzdCwgcGx1Z2lu
LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhKTsKLQotICAgICAgICBzdHJlYW1zLmFkZChz
dHJlYW0uY29weVJlZigpKTsKLSAgICAgICAgc3RyZWFtLT5zdGFydCgpOwotICAgIH0KLSAgICAK
LSAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLS0oTlBFcnJvcilnZXRVUkxOb3RpZnk6
KGNvbnN0IGNoYXIgKilVUkxDU3RyaW5nIHRhcmdldDooY29uc3QgY2hhciAqKWNUYXJnZXQgbm90
aWZ5RGF0YToodm9pZCAqKW5vdGlmeURhdGEKLXsKLSAgICBMT0coUGx1Z2lucywgIk5QTl9HZXRV
UkxOb3RpZnk6ICVzIHRhcmdldDogJXMiLCBVUkxDU3RyaW5nLCBjVGFyZ2V0KTsKLQotICAgIE5T
TXV0YWJsZVVSTFJlcXVlc3QgKnJlcXVlc3QgPSBbc2VsZiByZXF1ZXN0V2l0aFVSTENTdHJpbmc6
VVJMQ1N0cmluZ107Ci0gICAgcmV0dXJuIFtzZWxmIGxvYWRSZXF1ZXN0OnJlcXVlc3QgaW5UYXJn
ZXQ6Y1RhcmdldCB3aXRoTm90aWZ5RGF0YTpub3RpZnlEYXRhIHNlbmROb3RpZmljYXRpb246WUVT
XTsKLX0KLQotLShOUEVycm9yKWdldFVSTDooY29uc3QgY2hhciAqKVVSTENTdHJpbmcgdGFyZ2V0
Oihjb25zdCBjaGFyICopY1RhcmdldAotewotICAgIExPRyhQbHVnaW5zLCAiTlBOX0dldFVSTDog
JXMgdGFyZ2V0OiAlcyIsIFVSTENTdHJpbmcsIGNUYXJnZXQpOwotCi0gICAgTlNNdXRhYmxlVVJM
UmVxdWVzdCAqcmVxdWVzdCA9IFtzZWxmIHJlcXVlc3RXaXRoVVJMQ1N0cmluZzpVUkxDU3RyaW5n
XTsKLSAgICByZXR1cm4gW3NlbGYgbG9hZFJlcXVlc3Q6cmVxdWVzdCBpblRhcmdldDpjVGFyZ2V0
IHdpdGhOb3RpZnlEYXRhOk5VTEwgc2VuZE5vdGlmaWNhdGlvbjpOT107Ci19Ci0KLS0gKE5QRXJy
b3IpX3Bvc3RVUkw6KGNvbnN0IGNoYXIgKilVUkxDU3RyaW5nCi0gICAgICAgICAgICAgdGFyZ2V0
Oihjb25zdCBjaGFyICopdGFyZ2V0Ci0gICAgICAgICAgICAgICAgbGVuOihVSW50MzIpbGVuCi0g
ICAgICAgICAgICAgICAgYnVmOihjb25zdCBjaGFyICopYnVmCi0gICAgICAgICAgICAgICBmaWxl
OihOUEJvb2wpZmlsZQotICAgICAgICAgbm90aWZ5RGF0YToodm9pZCAqKW5vdGlmeURhdGEKLSAg
IHNlbmROb3RpZmljYXRpb246KEJPT0wpc2VuZE5vdGlmaWNhdGlvbgotICAgICAgIGFsbG93SGVh
ZGVyczooQk9PTClhbGxvd0hlYWRlcnMKLXsKLSAgICBpZiAoIVVSTENTdHJpbmcgfHwgIWxlbiB8
fCAhYnVmKSB7Ci0gICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOwotICAgIH0KLSAg
ICAKLSAgICBOU0RhdGEgKnBvc3REYXRhID0gbmlsOwotCi0gICAgaWYgKGZpbGUpIHsKLSAgICAg
ICAgLy8gSWYgd2UncmUgcG9zdGluZyBhIGZpbGUsIGJ1ZiBpcyBlaXRoZXIgYSBmaWxlIFVSTCBv
ciBhIHBhdGggdG8gdGhlIGZpbGUuCi0gICAgICAgIGF1dG8gYnVmU3RyaW5nID0gYWRvcHRDRihD
RlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGJ1Ziwga0NGU3Ry
aW5nRW5jb2RpbmdXaW5kb3dzTGF0aW4xKSk7Ci0gICAgICAgIGlmICghYnVmU3RyaW5nKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKLSAgICAgICAgfQotICAgICAg
ICBOU1VSTCAqZmlsZVVSTCA9IFtOU1VSTCBfd2ViX1VSTFdpdGhEYXRhQXNTdHJpbmc6KF9fYnJp
ZGdlIE5TU3RyaW5nICopYnVmU3RyaW5nLmdldCgpXTsKLSAgICAgICAgTlNTdHJpbmcgKnBhdGg7
Ci0gICAgICAgIGlmIChbZmlsZVVSTCBpc0ZpbGVVUkxdKSB7Ci0gICAgICAgICAgICBwYXRoID0g
W2ZpbGVVUkwgcGF0aF07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwYXRoID0gKF9f
YnJpZGdlIE5TU3RyaW5nICopYnVmU3RyaW5nLmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIHBv
c3REYXRhID0gW05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZGaWxlOnBhdGhdOwotICAgICAgICBp
ZiAoIXBvc3REYXRhKSB7Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBwb3N0RGF0YSA9IFtOU0RhdGEgZGF0
YVdpdGhCeXRlczpidWYgbGVuZ3RoOmxlbl07Ci0gICAgfQotCi0gICAgaWYgKFtwb3N0RGF0YSBs
ZW5ndGhdID09IDApIHsKLSAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07Ci0gICAg
fQotCi0gICAgTlNNdXRhYmxlVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtzZWxmIHJlcXVlc3RXaXRo
VVJMQ1N0cmluZzpVUkxDU3RyaW5nXTsKLSAgICBbcmVxdWVzdCBzZXRIVFRQTWV0aG9kOkAiUE9T
VCJdOwotICAgIAotICAgIGlmIChhbGxvd0hlYWRlcnMpIHsKLSAgICAgICAgaWYgKFtwb3N0RGF0
YSBfd2ViX3N0YXJ0c1dpdGhCbGFua0xpbmVdKSB7Ci0gICAgICAgICAgICBwb3N0RGF0YSA9IFtw
b3N0RGF0YSBzdWJkYXRhV2l0aFJhbmdlOk5TTWFrZVJhbmdlKDEsIFtwb3N0RGF0YSBsZW5ndGhd
IC0gMSldOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTlNJbnRlZ2VyIGxvY2F0aW9u
ID0gW3Bvc3REYXRhIF93ZWJfbG9jYXRpb25BZnRlckZpcnN0QmxhbmtMaW5lXTsKLSAgICAgICAg
ICAgIGlmIChsb2NhdGlvbiAhPSBOU05vdEZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYg
dGhlIGJsYW5rIGxpbmUgaXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2YgcG9zdERhdGEsIGV2
ZXJ5dGhpbmcgYmVmb3JlIGlzIHRoZSBoZWFkZXIuCi0gICAgICAgICAgICAgICAgTlNEYXRhICpo
ZWFkZXJEYXRhID0gW3Bvc3REYXRhIHN1YmRhdGFXaXRoUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgbG9j
YXRpb24pXTsKLSAgICAgICAgICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpoZWFkZXIgPSBb
aGVhZGVyRGF0YSBfd2Via2l0X3BhcnNlUkZDODIySGVhZGVyRmllbGRzXTsKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBkYXRhTGVuZ3RoID0gW3Bvc3REYXRhIGxlbmd0aF0gLSBsb2NhdGlvbjsK
LQotICAgICAgICAgICAgICAgIC8vIFNvbWV0aW1lcyBwbHVnaW5zIGxpa2UgdG8gc2V0IENvbnRl
bnQtTGVuZ3RoIHRoZW1zZWx2ZXMgd2hlbiB0aGV5IHBvc3QsCi0gICAgICAgICAgICAgICAgLy8g
YnV0IFdlYkZvdW5kYXRpb24gZG9lcyBub3QgbGlrZSB0aGF0LiBTbyB3ZSB3aWxsIHJlbW92ZSB0
aGUgaGVhZGVyCi0gICAgICAgICAgICAgICAgLy8gYW5kIGluc3RlYWQgdHJ1bmNhdGUgdGhlIGRh
dGEgdG8gdGhlIHJlcXVlc3RlZCBsZW5ndGguCi0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKmNv
bnRlbnRMZW5ndGggPSBbaGVhZGVyIG9iamVjdEZvcktleTpAIkNvbnRlbnQtTGVuZ3RoIl07Ci0K
LSAgICAgICAgICAgICAgICBpZiAoY29udGVudExlbmd0aCAhPSBuaWwpCi0gICAgICAgICAgICAg
ICAgICAgIGRhdGFMZW5ndGggPSBzdGQ6Om1pbjx1bnNpZ25lZD4oW2NvbnRlbnRMZW5ndGggaW50
VmFsdWVdLCBkYXRhTGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBbaGVhZGVyIHJlbW92ZU9iamVj
dEZvcktleTpAIkNvbnRlbnQtTGVuZ3RoIl07Ci0KLSAgICAgICAgICAgICAgICBpZiAoW2hlYWRl
ciBjb3VudF0gPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFtyZXF1ZXN0IHNldEFsbEhUVFBI
ZWFkZXJGaWVsZHM6aGVhZGVyXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Ly8gRXZlcnl0aGluZyBhZnRlciB0aGUgYmxhbmsgbGluZSBpcyB0aGUgYWN0dWFsIGNvbnRlbnQg
b2YgdGhlIFBPU1QuCi0gICAgICAgICAgICAgICAgcG9zdERhdGEgPSBbcG9zdERhdGEgc3ViZGF0
YVdpdGhSYW5nZTpOU01ha2VSYW5nZShsb2NhdGlvbiwgZGF0YUxlbmd0aCldOwotCi0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFtwb3N0RGF0YSBsZW5ndGhdID09IDApIHsK
LSAgICAgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgLy8gUGx1Zy1pbnMgZXhwZWN0IHRvIHJlY2VpdmUgdW5jYWNoZWQgZGF0YSB3aGVu
IGRvaW5nIGEgUE9TVCAoMzM0NzEzNCkuCi0gICAgW3JlcXVlc3Qgc2V0Q2FjaGVQb2xpY3k6TlNV
UkxSZXF1ZXN0UmVsb2FkSWdub3JpbmdDYWNoZURhdGFdOwotICAgIFtyZXF1ZXN0IHNldEhUVFBC
b2R5OnBvc3REYXRhXTsKLSAgICAKLSAgICByZXR1cm4gW3NlbGYgbG9hZFJlcXVlc3Q6cmVxdWVz
dCBpblRhcmdldDp0YXJnZXQgd2l0aE5vdGlmeURhdGE6bm90aWZ5RGF0YSBzZW5kTm90aWZpY2F0
aW9uOnNlbmROb3RpZmljYXRpb25dOwotfQotCi0tIChOUEVycm9yKXBvc3RVUkxOb3RpZnk6KGNv
bnN0IGNoYXIgKilVUkxDU3RyaW5nCi0gICAgICAgICAgICAgICAgICB0YXJnZXQ6KGNvbnN0IGNo
YXIgKil0YXJnZXQKLSAgICAgICAgICAgICAgICAgICAgIGxlbjooVUludDMyKWxlbgotICAgICAg
ICAgICAgICAgICAgICAgYnVmOihjb25zdCBjaGFyICopYnVmCi0gICAgICAgICAgICAgICAgICAg
IGZpbGU6KE5QQm9vbClmaWxlCi0gICAgICAgICAgICAgIG5vdGlmeURhdGE6KHZvaWQgKilub3Rp
ZnlEYXRhCi17Ci0gICAgTE9HKFBsdWdpbnMsICJOUE5fUG9zdFVSTE5vdGlmeTogJXMiLCBVUkxD
U3RyaW5nKTsKLSAgICByZXR1cm4gW3NlbGYgX3Bvc3RVUkw6VVJMQ1N0cmluZyB0YXJnZXQ6dGFy
Z2V0IGxlbjpsZW4gYnVmOmJ1ZiBmaWxlOmZpbGUgbm90aWZ5RGF0YTpub3RpZnlEYXRhIHNlbmRO
b3RpZmljYXRpb246WUVTIGFsbG93SGVhZGVyczpZRVNdOwotfQotCi0tKE5QRXJyb3IpcG9zdFVS
TDooY29uc3QgY2hhciAqKVVSTENTdHJpbmcKLSAgICAgICAgICAgdGFyZ2V0Oihjb25zdCBjaGFy
ICopdGFyZ2V0Ci0gICAgICAgICAgICAgIGxlbjooVUludDMyKWxlbgotICAgICAgICAgICAgICBi
dWY6KGNvbnN0IGNoYXIgKilidWYKLSAgICAgICAgICAgICBmaWxlOihOUEJvb2wpZmlsZQotewot
ICAgIExPRyhQbHVnaW5zLCAiTlBOX1Bvc3RVUkw6ICVzIiwgVVJMQ1N0cmluZyk7ICAgICAgICAK
LSAgICAvLyBBcyBkb2N1bWVudGVkLCBvbmx5IGFsbG93IGhlYWRlcnMgdG8gYmUgc3BlY2lmaWVk
IHZpYSBOUFBfUG9zdFVSTCB3aGVuIHVzaW5nIGEgZmlsZS4KLSAgICByZXR1cm4gW3NlbGYgX3Bv
c3RVUkw6VVJMQ1N0cmluZyB0YXJnZXQ6dGFyZ2V0IGxlbjpsZW4gYnVmOmJ1ZiBmaWxlOmZpbGUg
bm90aWZ5RGF0YTpOVUxMIHNlbmROb3RpZmljYXRpb246Tk8gYWxsb3dIZWFkZXJzOmZpbGVdOwot
fQotCi0tKE5QRXJyb3IpbmV3U3RyZWFtOihOUE1JTUVUeXBlKXR5cGUgdGFyZ2V0Oihjb25zdCBj
aGFyICopdGFyZ2V0IHN0cmVhbTooTlBTdHJlYW0qKilzdHJlYW0KLXsKLSAgICBMT0coUGx1Z2lu
cywgIk5QTl9OZXdTdHJlYW0iKTsKLSAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLX0K
LQotLShOUEVycm9yKXdyaXRlOihOUFN0cmVhbSopc3RyZWFtIGxlbjooU0ludDMyKWxlbiBidWZm
ZXI6KHZvaWQgKilidWZmZXIKLXsKLSAgICBMT0coUGx1Z2lucywgIk5QTl9Xcml0ZSIpOwotICAg
IHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotfQotCi0tKE5QRXJyb3IpZGVzdHJveVN0cmVh
bTooTlBTdHJlYW0qKXN0cmVhbSByZWFzb246KE5QUmVhc29uKXJlYXNvbgotewotICAgIExPRyhQ
bHVnaW5zLCAiTlBOX0Rlc3Ryb3lTdHJlYW0iKTsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGRvZXMg
YSBzYW5pdHkgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlIE5QU3RyZWFtIHByb3ZpZGVkIGFjdHVh
bGx5Ci0gICAgLy8gYmVsb25ncyB0byB0aGUgcGx1Zy1pbiB0aGF0IHByb3ZpZGVkIGl0LCB3aGlj
aCBmaXhlcyBhIGNyYXNoIGluIHRoZSBEaXZYIAotICAgIC8vIHBsdWctaW46IDxyZGFyOi8vcHJv
YmxlbS81MDkzODYyPiB8IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
MjAzCi0gICAgaWYgKCFzdHJlYW0gfHwgV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06Om93bmVyRm9y
U3RyZWFtKHN0cmVhbSkgIT0gcGx1Z2luKSB7Ci0gICAgICAgIExPRyhQbHVnaW5zLCAiSW52YWxp
ZCBOUFN0cmVhbSBwYXNzZWQgdG8gTlBOX0Rlc3Ryb3lTdHJlYW06ICVwIiwgc3RyZWFtKTsKLSAg
ICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfSU5TVEFOQ0VfRVJST1I7Ci0gICAgfQotICAgIAot
ICAgIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtKiBicm93c2VyU3RyZWFtID0gc3RhdGljX2Nhc3Q8
V2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0qPihzdHJlYW0tPm5kYXRhKTsKLSAgICBicm93c2VyU3Ry
ZWFtLT5jYW5jZWxMb2FkQW5kRGVzdHJveVN0cmVhbVdpdGhFcnJvcihicm93c2VyU3RyZWFtLT5l
cnJvckZvclJlYXNvbihyZWFzb24pKTsKLSAgICAKLSAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7
Ci19Ci0KLS0gKGNvbnN0IGNoYXIgKil1c2VyQWdlbnQKLXsKLSAgICBOU1N0cmluZyAqdXNlckFn
ZW50ID0gW1tzZWxmIHdlYlZpZXddIHVzZXJBZ2VudEZvclVSTDpfYmFzZVVSTC5nZXQoKV07Ci0g
ICAgCi0gICAgaWYgKF9pc1NpbHZlcmxpZ2h0KSB7Ci0gICAgICAgIC8vIFNpbHZlcmxpZ2h0IGhh
cyBhIHdvcmthcm91bmQgZm9yIGEgbGVhayBpbiBTYWZhcmkgMi4gVGhpcyB3b3JrYXJvdW5kIGlz
IAotICAgICAgICAvLyBhcHBsaWVkIHdoZW4gdGhlIHVzZXIgYWdlbnQgZG9lcyBub3QgY29udGFp
biAiVmVyc2lvbi8zIiBzbyB3ZSBhcHBlbmQgaXQKLSAgICAgICAgLy8gYXQgdGhlIGVuZCBvZiB0
aGUgdXNlciBhZ2VudC4KLSAgICAgICAgdXNlckFnZW50ID0gW3VzZXJBZ2VudCBzdHJpbmdCeUFw
cGVuZGluZ1N0cmluZzpAIiBWZXJzaW9uLzMuMi4xIl07Ci0gICAgfSAgICAgICAgCi0gICAgICAg
IAotICAgIHJldHVybiBbdXNlckFnZW50IFVURjhTdHJpbmddOwotfQotCi0tKHZvaWQpc3RhdHVz
Oihjb25zdCBjaGFyICopbWVzc2FnZQoteyAgICAKLSAgICBhdXRvIHN0YXR1cyA9IGFkb3B0Q0Yo
Q0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZyhOVUxMLCBtZXNzYWdlID8gbWVzc2FnZSA6ICIiLCBr
Q0ZTdHJpbmdFbmNvZGluZ1VURjgpKTsKLSAgICBpZiAoIXN0YXR1cykgewotICAgICAgICBMT0df
RVJST1IoIk5QTl9TdGF0dXM6IHRoZSBtZXNzYWdlIHdhcyBub3QgdmFsaWQgVVRGLTgiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBMT0coUGx1Z2lucywgIk5QTl9TdGF0dXM6
ICVAIiwgc3RhdHVzLmdldCgpKTsKLSAgICBXZWJWaWV3ICp3diA9IFtzZWxmIHdlYlZpZXddOwot
ICAgIFtbd3YgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d3Ygc2V0U3RhdHVzVGV4dDoo
X19icmlkZ2UgTlNTdHJpbmcgKilzdGF0dXMuZ2V0KCldOwotfQotCi0tKHZvaWQpaW52YWxpZGF0
ZVJlY3Q6KE5QUmVjdCAqKWludmFsaWRSZWN0Ci17Ci0gICAgTE9HKFBsdWdpbnMsICJOUE5fSW52
YWxpZGF0ZVJlY3QiKTsKLSAgICBbc2VsZiBpbnZhbGlkYXRlUGx1Z2luQ29udGVudFJlY3Q6TlNN
YWtlUmVjdChpbnZhbGlkUmVjdC0+bGVmdCwgaW52YWxpZFJlY3QtPnRvcCwKLSAgICAgICAgKGZs
b2F0KWludmFsaWRSZWN0LT5yaWdodCAtIGludmFsaWRSZWN0LT5sZWZ0LCAoZmxvYXQpaW52YWxp
ZFJlY3QtPmJvdHRvbSAtIGludmFsaWRSZWN0LT50b3ApXTsKLX0KLQotLSAodm9pZClpbnZhbGlk
YXRlUmVnaW9uOihOUFJlZ2lvbilpbnZhbGlkUmVnaW9uCi17Ci0gICAgTE9HKFBsdWdpbnMsICJO
UE5fSW52YWxpZGF0ZVJlZ2lvbiIpOwotICAgIE5TUmVjdCBpbnZhbGlkUmVjdCA9IE5TWmVyb1Jl
Y3Q7Ci0gICAgc3dpdGNoIChkcmF3aW5nTW9kZWwpIHsKLSAgICAgICAgY2FzZSBOUERyYXdpbmdN
b2RlbENvcmVHcmFwaGljczoKLSAgICAgICAgewotICAgICAgICAgICAgQ0dSZWN0IGNnUmVjdCA9
IENHUGF0aEdldEJvdW5kaW5nQm94KChOUENHUmVnaW9uKWludmFsaWRSZWdpb24pOwotICAgICAg
ICAgICAgaW52YWxpZFJlY3QgPSAqKE5TUmVjdCopJmNnUmVjdDsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIFtzZWxmIGludmFsaWRh
dGVQbHVnaW5Db250ZW50UmVjdDppbnZhbGlkUmVjdF07Ci19Ci0KLS0odm9pZClmb3JjZVJlZHJh
dwotewotICAgIExPRyhQbHVnaW5zLCAiZm9yY2VSZWRyYXciKTsKLSAgICBbc2VsZiBpbnZhbGlk
YXRlUGx1Z2luQ29udGVudFJlY3Q6W3NlbGYgYm91bmRzXV07Ci0gICAgW1tzZWxmIHdpbmRvd10g
ZGlzcGxheUlmTmVlZGVkXTsKLX0KLQotLSAoTlBFcnJvcilnZXRWYXJpYWJsZTooTlBOVmFyaWFi
bGUpdmFyaWFibGUgdmFsdWU6KHZvaWQgKil2YWx1ZQotewotICAgIHN3aXRjaCAoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHZhcmlhYmxlKSkgewotICAgICAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVj
dDoKLSAgICAgICAgewotICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiB3ZWJG
cmFtZV0pOwotICAgICAgICAgICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IGZyYW1l
ID8gZnJhbWUtPnNjcmlwdCgpLndpbmRvd1NjcmlwdE5QT2JqZWN0KCkgOiAwOwotCi0gICAgICAg
ICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2Ny
aWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW5zL25wcnVu
dGltZS5odG1sI2Jyb3dzZXJhY2Nlc3M+Ci0gICAgICAgICAgICBpZiAod2luZG93U2NyaXB0T2Jq
ZWN0KQotICAgICAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVj
dCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHZvaWQgKip2ID0gKHZvaWQgKiopdmFsdWU7
Ci0gICAgICAgICAgICAqdiA9IHdpbmRvd1NjcmlwdE9iamVjdDsKLQotICAgICAgICAgICAgcmV0
dXJuIE5QRVJSX05PX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBOUE5WUGx1Z2lu
RWxlbWVudE5QT2JqZWN0OgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIV9lbGVtZW50TlBP
YmplY3QpIHsKLSAgICAgICAgICAgICAgICBpZiAoIV9lbGVtZW50KQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLQotICAgICAgICAgICAgICAgIEZyYW1l
KiBmcmFtZSA9IGNvcmUoc2VsZi53ZWJGcmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFmcmFt
ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAg
ICAgICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBmcmFtZS0+c2NyaXB0KCkuanNP
YmplY3RGb3JQbHVnaW5FbGVtZW50KF9lbGVtZW50LmdldCgpKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIW9iamVjdCkKLSAgICAgICAgICAgICAgICAgICAgX2VsZW1lbnROUE9iamVjdCA9IF9OUE5f
Q3JlYXRlTm9TY3JpcHRPYmplY3QoKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIF9lbGVtZW50TlBPYmplY3QgPSBfTlBOX0NyZWF0ZVNjcmlwdE9iamVjdCgwLCBv
YmplY3QsIGZyYW1lLT5zY3JpcHQoKS5iaW5kaW5nUm9vdE9iamVjdCgpKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFp
bmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMv
cGx1Z2lucy9ucHJ1bnRpbWUuaHRtbCNicm93c2VyYWNjZXNzPgotICAgICAgICAgICAgaWYgKF9l
bGVtZW50TlBPYmplY3QpCi0gICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3QoX2VsZW1l
bnROUE9iamVjdCk7Ci0KLSAgICAgICAgICAgICoodm9pZCAqKil2YWx1ZSA9IF9lbGVtZW50TlBP
YmplY3Q7Ci0KLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgY2FzZSBOUE5WcGx1Z2luRHJhd2luZ01vZGVsOgotICAgICAgICB7
Ci0gICAgICAgICAgICAqKE5QRHJhd2luZ01vZGVsICopdmFsdWUgPSBkcmF3aW5nTW9kZWw7Ci0g
ICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBj
YXNlIE5QTlZzdXBwb3J0c0NvcmVHcmFwaGljc0Jvb2w6Ci0gICAgICAgIHsKLSAgICAgICAgICAg
ICooTlBCb29sICopdmFsdWUgPSBUUlVFOwotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VS
Uk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBOUE5Wc3VwcG9ydHNPcGVuR0xCb29sOgot
ICAgICAgICB7Ci0gICAgICAgICAgICAqKE5QQm9vbCAqKXZhbHVlID0gRkFMU0U7Ci0gICAgICAg
ICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGNhc2UgTlBOVnN1cHBvcnRzQ29yZUFuaW1hdGlvbkJvb2w6Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgICooTlBCb29sICopdmFsdWUgPSBUUlVFOwotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05P
X0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBOUE5Wc3VwcG9ydHNDb2NvYUJvb2w6
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICooTlBCb29sICopdmFsdWUgPSBUUlVFOwotICAgICAg
ICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBO
UE5WcHJpdmF0ZU1vZGVCb29sOgotICAgICAgICB7Ci0gICAgICAgICAgICAqKE5QQm9vbCAqKXZh
bHVlID0gX2lzUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZDsKLSAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9OT19FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgV0tOVlN1cHBvcnRzQ29tcG9z
aXRpbmdDb3JlQW5pbWF0aW9uUGx1Z2luc0Jvb2w6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICoo
TlBCb29sICopdmFsdWUgPSBbW1tzZWxmIHdlYlZpZXddIHByZWZlcmVuY2VzXSBhY2NlbGVyYXRl
ZENvbXBvc2l0aW5nRW5hYmxlZF07Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7
Ci0gICAgICAgIH0KLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci19Ci0KLS0gKE5QRXJyb3Ipc2V0
VmFyaWFibGU6KE5QUFZhcmlhYmxlKXZhcmlhYmxlIHZhbHVlOih2b2lkICopdmFsdWUKLXsKLSAg
ICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgICAgIGNhc2UgTlBQVnBsdWdpbkRyYXdpbmdNb2Rl
bDoKLSAgICAgICAgewotICAgICAgICAgICAgLy8gQ2FuIG9ubHkgc2V0IGRyYXdpbmcgbW9kZWwg
aW5zaWRlIE5QUF9OZXcoKQotICAgICAgICAgICAgaWYgKHNlbGYgIT0gW1tzZWxmIGNsYXNzXSBj
dXJyZW50UGx1Z2luVmlld10pCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNf
RVJST1I7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIENoZWNrIGZvciB2YWxpZCwgc3Vw
cG9ydGVkIGRyYXdpbmcgbW9kZWwKLSAgICAgICAgICAgIE5QRHJhd2luZ01vZGVsIG5ld0RyYXdp
bmdNb2RlbCA9IChOUERyYXdpbmdNb2RlbCkodWludHB0cl90KXZhbHVlOwotICAgICAgICAgICAg
c3dpdGNoIChuZXdEcmF3aW5nTW9kZWwpIHsKLSAgICAgICAgICAgICAgICAvLyBTdXBwb3J0ZWQg
ZHJhd2luZyBtb2RlbHM6Ci0gICAgICAgICAgICAgICAgY2FzZSBOUERyYXdpbmdNb2RlbENvcmVH
cmFwaGljczoKLSAgICAgICAgICAgICAgICBjYXNlIE5QRHJhd2luZ01vZGVsQ29yZUFuaW1hdGlv
bjoKLSAgICAgICAgICAgICAgICAgICAgZHJhd2luZ01vZGVsID0gbmV3RHJhd2luZ01vZGVsOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgICAgICAg
ICAgICAgIAotCi0gICAgICAgICAgICAgICAgLy8gVW5zdXBwb3J0ZWQgKG9yIHVua25vd24pIGRy
YXdpbmcgbW9kZWxzOgotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
ICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luICVAIHVzZXMgdW5zdXBwb3J0ZWQgZHJhd2luZyBtb2Rl
bDogJWQiLCBfZXZlbnRIYW5kbGVyLmdldCgpLCBkcmF3aW5nTW9kZWwpOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgY2FzZSBOUFBWcGx1Z2luRXZlbnRNb2RlbDoKLSAgICAg
ICAgewotICAgICAgICAgICAgLy8gQ2FuIG9ubHkgc2V0IGV2ZW50IG1vZGVsIGluc2lkZSBOUFBf
TmV3KCkKLSAgICAgICAgICAgIGlmIChzZWxmICE9IFtbc2VsZiBjbGFzc10gY3VycmVudFBsdWdp
blZpZXddKQotICAgICAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBDaGVjayBmb3IgdmFsaWQsIHN1cHBvcnRlZCBldmVu
dCBtb2RlbAotICAgICAgICAgICAgTlBFdmVudE1vZGVsIG5ld0V2ZW50TW9kZWwgPSAoTlBFdmVu
dE1vZGVsKSh1aW50cHRyX3QpdmFsdWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5ld0V2ZW50TW9k
ZWwpIHsKLSAgICAgICAgICAgICAgICAvLyBTdXBwb3J0ZWQgZXZlbnQgbW9kZWxzOgotICAgICAg
ICAgICAgICAgIGNhc2UgTlBFdmVudE1vZGVsQ29jb2E6Ci0gICAgICAgICAgICAgICAgICAgIGV2
ZW50TW9kZWwgPSBuZXdFdmVudE1vZGVsOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlBF
UlJfTk9fRVJST1I7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAv
LyBVbnN1cHBvcnRlZCAob3IgdW5rbm93bikgZXZlbnQgbW9kZWxzOgotICAgICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luICVAIHVz
ZXMgdW5zdXBwb3J0ZWQgZXZlbnQgbW9kZWw6ICVkIiwgX2V2ZW50SGFuZGxlci5nZXQoKSwgZXZl
bnRNb2RlbCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9S
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgIH0KLX0KLQot
LSAodWludDMyX3Qpc2NoZWR1bGVUaW1lcldpdGhJbnRlcnZhbDoodWludDMyX3QpaW50ZXJ2YWwg
cmVwZWF0OihOUEJvb2wpcmVwZWF0IHRpbWVyRnVuYzoodm9pZCAoKikoTlBQIG5wcCwgdWludDMy
X3QgdGltZXJJRCkpdGltZXJGdW5jCi17Ci0gICAgaWYgKCF0aW1lckZ1bmMpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIAotICAgIGlmICghdGltZXJzKQotICAgICAgICB0aW1lcnMgPSBtYWtlVW5p
cXVlPEhhc2hNYXA8dWludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5UaW1lcj4+PigpOwot
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBsdWdpblRpbWVyPiogc2xvdCA9IG51bGxwdHI7Ci0gICAg
dWludDMyX3QgdGltZXJJRDsKLSAgICBkbwotICAgICAgICB0aW1lcklEID0gKytjdXJyZW50VGlt
ZXJJRDsKLSAgICB3aGlsZSAoIXRpbWVycy0+aXNWYWxpZEtleSh0aW1lcklEKSB8fCAqKHNsb3Qg
PSAmdGltZXJzLT5hZGQodGltZXJJRCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlKSk7Ci0KLSAg
ICBhdXRvIHRpbWVyID0gbWFrZVVuaXF1ZTxQbHVnaW5UaW1lcj4ocGx1Z2luLCB0aW1lcklELCBp
bnRlcnZhbCwgcmVwZWF0LCB0aW1lckZ1bmMpOwotCi0gICAgaWYgKF9zaG91bGRGaXJlVGltZXJz
KQotICAgICAgICB0aW1lci0+c3RhcnQoX2lzQ29tcGxldGVseU9ic2N1cmVkKTsKLSAgICAKLSAg
ICAqc2xvdCA9IFdURk1vdmUodGltZXIpOwotCi0gICAgcmV0dXJuIHRpbWVySUQ7Ci19Ci0KLS0g
KHZvaWQpdW5zY2hlZHVsZVRpbWVyOih1aW50MzJfdCl0aW1lcklECi17Ci0gICAgaWYgKCF0aW1l
cnMpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB0aW1lcnMtPnJlbW92ZSh0aW1lcklEKTsK
LX0KLQotLSAoTlBFcnJvcilwb3BVcENvbnRleHRNZW51OihOUE1lbnUgKiltZW51Ci17Ci0gICAg
TlNFdmVudCAqY3VycmVudEV2ZW50ID0gW05TQXBwIGN1cnJlbnRFdmVudF07Ci0gICAgCi0gICAg
Ly8gTlBOX1BvcFVwQ29udGV4dE1lbnUgbXVzdCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIHBs
dWctaW4ncyBOUFBfSGFuZGxlRXZlbnQuCi0gICAgaWYgKCFjdXJyZW50RXZlbnQpCi0gICAgICAg
IHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgIAotICAgIFtOU01lbnUgcG9wVXBDb250
ZXh0TWVudTooX19icmlkZ2UgTlNNZW51ICopbWVudSB3aXRoRXZlbnQ6Y3VycmVudEV2ZW50IGZv
clZpZXc6c2VsZl07Ci0gICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotfQotCi0tIChOUEVycm9y
KWdldFZhcmlhYmxlOihOUE5VUkxWYXJpYWJsZSl2YXJpYWJsZSBmb3JVUkw6KGNvbnN0IGNoYXIq
KXVybCB2YWx1ZTooY2hhcioqKXZhbHVlIGxlbmd0aDoodWludDMyX3QqKWxlbmd0aAotewotICAg
IHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICAgICAgY2FzZSBOUE5VUkxWQ29va2llOiB7Ci0gICAg
ICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBOU1VSTCAqVVJMID0gW3NlbGYgVVJMV2l0aENTdHJpbmc6dXJsXTsKLSAg
ICAgICAgICAgIGlmICghVVJMKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiB3ZWJGcmFtZV0pKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLSAg
ICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBhdXRvKiBwYWdlID0gZG9jdW1lbnQt
PnBhZ2UoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXBhZ2UpCi0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgICAgICAgICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IHBhZ2UtPmNv
b2tpZUphcigpLmNvb2tpZXMoKmRvY3VtZW50LCBVUkwpOwotICAgICAgICAgICAgICAgIENTdHJp
bmcgY29va2llU3RyaW5nVVRGOCA9IGNvb2tpZVN0cmluZy51dGY4KCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGNvb2tpZVN0cmluZ1VURjguaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAgICAgICAgICAgICAgKnZhbHVlID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KE5QTl9NZW1BbGxvYyhjb29raWVTdHJpbmdVVEY4Lmxlbmd0aCgpKSk7
Ci0gICAgICAgICAgICAgICAgbWVtY3B5KCp2YWx1ZSwgY29va2llU3RyaW5nVVRGOC5kYXRhKCks
IGNvb2tpZVN0cmluZ1VURjgubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGlmIChsZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgICpsZW5ndGggPSBjb29raWVT
dHJpbmdVVEY4Lmxlbmd0aCgpOwotICAgICAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJP
UjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgTlBOVVJMVlByb3h5OiB7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBOU1VSTCAqVVJMID0gW3Nl
bGYgVVJMV2l0aENTdHJpbmc6dXJsXTsKLSAgICAgICAgICAgIGlmICghVVJMKQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBWZWN0b3I8UHJveHlTZXJ2ZXI+IHByb3h5U2Vy
dmVycyA9IHByb3h5U2VydmVyc0ZvclVSTChVUkwpOwotICAgICAgICAgICAgQ1N0cmluZyBwcm94
aWVzVVRGOCA9IHRvU3RyaW5nKHByb3h5U2VydmVycykudXRmOCgpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxjaGFyKj4oTlBOX01lbUFsbG9jKHByb3hp
ZXNVVEY4Lmxlbmd0aCgpKSk7Ci0gICAgICAgICAgICBtZW1jcHkoKnZhbHVlLCBwcm94aWVzVVRG
OC5kYXRhKCksIHByb3hpZXNVVEY4Lmxlbmd0aCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICBpZiAobGVuZ3RoKQotICAgICAgICAgICAgICAgKmxlbmd0aCA9IHByb3hpZXNVVEY4Lmxlbmd0
aCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci19Ci0KLS0g
KE5QRXJyb3Ipc2V0VmFyaWFibGU6KE5QTlVSTFZhcmlhYmxlKXZhcmlhYmxlIGZvclVSTDooY29u
c3QgY2hhciopdXJsIHZhbHVlOihjb25zdCBjaGFyKil2YWx1ZSBsZW5ndGg6KHVpbnQzMl90KWxl
bmd0aAotewotICAgIHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICAgICAgY2FzZSBOUE5VUkxWQ29v
a2llOiB7Ci0gICAgICAgICAgICBOU1VSTCAqVVJMID0gW3NlbGYgVVJMV2l0aENTdHJpbmc6dXJs
XTsKLSAgICAgICAgICAgIGlmICghVVJMKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBTdHJpbmcgY29va2llU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRG
OCh2YWx1ZSwgbGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICghY29va2llU3RyaW5nKQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoRnJhbWUqIGZy
YW1lID0gY29yZShbc2VsZiB3ZWJGcmFtZV0pKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8q
IGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGF1dG8qIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
cGFnZS0+Y29va2llSmFyKCkuc2V0Q29va2llcygqZG9jdW1lbnQsIFVSTCwgY29va2llU3RyaW5n
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VS
Uk9SOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIE5QTlVSTFZQcm94eToKLSAgICAgICAgICAgIC8vIENhbid0
IHNldCB0aGUgcHJveHkgZm9yIGEgVVJMLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotfQotCi0tIChOUEVycm9yKWdldEF1dGhlbnRp
Y2F0aW9uSW5mb1dpdGhQcm90b2NvbDooY29uc3QgY2hhciopcHJvdG9jb2xTdHIgaG9zdDooY29u
c3QgY2hhciopaG9zdFN0ciBwb3J0OihpbnQzMl90KXBvcnQgc2NoZW1lOihjb25zdCBjaGFyKilz
Y2hlbWVTdHIgcmVhbG06KGNvbnN0IGNoYXIqKXJlYWxtU3RyCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1c2VybmFtZTooY2hhcioqKXVzZXJuYW1lU3RyIHVzZXJuYW1lTGVu
Z3RoOih1aW50MzJfdCopdXNlcm5hbWVMZW5ndGggCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXNzd29yZDooY2hhcioqKXBhc3N3b3JkU3RyIHBhc3N3b3JkTGVuZ3RoOih1
aW50MzJfdCopcGFzc3dvcmRMZW5ndGgKLXsKLSAgICBpZiAoIXByb3RvY29sU3RyIHx8ICFob3N0
U3RyIHx8ICFzY2hlbWVTdHIgfHwgIXJlYWxtU3RyIHx8ICF1c2VybmFtZVN0ciB8fCAhdXNlcm5h
bWVMZW5ndGggfHwgIXBhc3N3b3JkU3RyIHx8ICFwYXNzd29yZExlbmd0aCkKLSAgICAgICAgcmV0
dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gIAotICAgIENTdHJpbmcgdXNlcm5hbWU7Ci0gICAg
Q1N0cmluZyBwYXNzd29yZDsKLSAgICBpZiAoIWdldEF1dGhlbnRpY2F0aW9uSW5mbyhwcm90b2Nv
bFN0ciwgaG9zdFN0ciwgcG9ydCwgc2NoZW1lU3RyLCByZWFsbVN0ciwgdXNlcm5hbWUsIHBhc3N3
b3JkKSkKLSAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgCi0gICAgKnVz
ZXJuYW1lTGVuZ3RoID0gdXNlcm5hbWUubGVuZ3RoKCk7Ci0gICAgKnVzZXJuYW1lU3RyID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KE5QTl9NZW1BbGxvYyh1c2VybmFtZS5sZW5ndGgoKSkpOwotICAgIG1l
bWNweSgqdXNlcm5hbWVTdHIsIHVzZXJuYW1lLmRhdGEoKSwgdXNlcm5hbWUubGVuZ3RoKCkpOwot
ICAgIAotICAgICpwYXNzd29yZExlbmd0aCA9IHBhc3N3b3JkLmxlbmd0aCgpOwotICAgICpwYXNz
d29yZFN0ciA9IHN0YXRpY19jYXN0PGNoYXIqPihOUE5fTWVtQWxsb2MocGFzc3dvcmQubGVuZ3Ro
KCkpKTsKLSAgICBtZW1jcHkoKnBhc3N3b3JkU3RyLCBwYXNzd29yZC5kYXRhKCksIHBhc3N3b3Jk
Lmxlbmd0aCgpKTsKLSAgICAKLSAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLUBlbmQK
LQotQGltcGxlbWVudGF0aW9uIFdlYk5ldHNjYXBlUGx1Z2luVmlldyAoSW50ZXJuYWwpCi0KLS0g
KEJPT0wpX3Nob3VsZENhbmNlbFNyY1N0cmVhbQotewotICAgIEFTU0VSVChfaXNTdGFydGVkKTsK
LSAgICAKLSAgICAvLyBDaGVjayBpZiB3ZSBzaG91bGQgY2FuY2VsIHRoZSBsb2FkCi0gICAgTlBC
b29sIGNhbmNlbFNyY1N0cmVhbSA9IDA7Ci0gICAgaWYgKFtfcGx1Z2luUGFja2FnZS5nZXQoKSBw
bHVnaW5GdW5jc10tPmdldHZhbHVlICYmCi0gICAgICAgIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBw
bHVnaW5GdW5jc10tPmdldHZhbHVlKHBsdWdpbiwgTlBQVnBsdWdpbkNhbmNlbFNyY1N0cmVhbSwg
JmNhbmNlbFNyY1N0cmVhbSkgPT0gTlBFUlJfTk9fRVJST1IgJiYgY2FuY2VsU3JjU3RyZWFtKQot
ICAgICAgICByZXR1cm4gWUVTOwotICAgIAotICAgIHJldHVybiBOTzsKLX0KLQotLSAoTlBFcnJv
cilfY3JlYXRlUGx1Z2luCi17Ci0gICAgcGx1Z2luID0gKE5QUCljYWxsb2MoMSwgc2l6ZW9mKE5Q
UF90KSk7Ci0gICAgcGx1Z2luLT5uZGF0YSA9IHNlbGY7Ci0KLSAgICBBU1NFUlQoW19wbHVnaW5Q
YWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+bmV3cCk7Ci0KLSAgICAvLyBOUE5fTmV3KCksIHdo
aWNoIGNyZWF0ZXMgdGhlIHBsdWctaW4gaW5zdGFuY2UsIHNob3VsZCBuZXZlciBiZSBjYWxsZWQg
d2hpbGUgY2FsbGluZyBhIHBsdWctaW4gZnVuY3Rpb24gZm9yIHRoYXQgaW5zdGFuY2UuCi0gICAg
QVNTRVJUKHBsdWdpbkZ1bmN0aW9uQ2FsbERlcHRoID09IDApOwotCi0gICAgX2lzRmxhc2ggPSBb
X3BsdWdpblBhY2thZ2UuZ2V0KCkgYnVuZGxlSWRlbnRpZmllcl0gPT0gImNvbS5tYWNyb21lZGlh
LkZsYXNoIFBsYXllci5wbHVnaW4iOwotICAgIF9pc1NpbHZlcmxpZ2h0ID0gW19wbHVnaW5QYWNr
YWdlLmdldCgpIGJ1bmRsZUlkZW50aWZpZXJdID09ICJjb20ubWljcm9zb2Z0LlNpbHZlcmxpZ2h0
UGx1Z2luIjsKLQotICAgIFtbc2VsZiBjbGFzc10gc2V0Q3VycmVudFBsdWdpblZpZXc6c2VsZl07
Ci0gICAgTlBFcnJvciBucEVyciA9IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10t
Pm5ld3AoY29uc3RfY2FzdDxjaGFyKj4oW19NSU1FVHlwZS5nZXQoKSBjU3RyaW5nXSksIHBsdWdp
biwgX21vZGUsIGFyZ3NDb3VudCwgY0F0dHJpYnV0ZXMsIGNWYWx1ZXMsIE5VTEwpOwotICAgIFtb
c2VsZiBjbGFzc10gc2V0Q3VycmVudFBsdWdpblZpZXc6bmlsXTsKLSAgICBMT0coUGx1Z2lucywg
Ik5QUF9OZXc6ICVkIiwgbnBFcnIpOwotICAgIHJldHVybiBucEVycjsKLX0KLQotLSAodm9pZClf
ZGVzdHJveVBsdWdpbgotewotICAgIE5QRXJyb3IgbnBFcnI7Ci0gICAgbnBFcnIgPSAhW19wbHVn
aW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+ZGVzdHJveShwbHVnaW4sIE5VTEwpOwotICAg
IExPRyhQbHVnaW5zLCAiTlBQX0Rlc3Ryb3k6ICVkIiwgbnBFcnIpOwotCi0gICAgaWYgKF9lbGVt
ZW50TlBPYmplY3QpCi0gICAgICAgIF9OUE5fUmVsZWFzZU9iamVjdChfZWxlbWVudE5QT2JqZWN0
KTsKLQotICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIHdlYkZyYW1lXSkpCi0gICAg
ICAgIGZyYW1lLT5zY3JpcHQoKS5jbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbihzZWxmKTsK
LSAgICAgICAgCi0gICAgZnJlZShwbHVnaW4pOwotICAgIHBsdWdpbiA9IE5VTEw7Ci19Ci0KLS0g
KHZvaWQpX3JlZGVsaXZlclN0cmVhbQotewotICAgIGlmIChbc2VsZiBkYXRhU291cmNlXSAmJiBf
aXNTdGFydGVkKSB7Ci0gICAgICAgIC8vIERlbGl2ZXIgd2hhdCBoYXMgbm90IGJlZW4gcGFzc2Vk
IHRvIHRoZSBwbHVnLWluIHVwIHRvIHRoaXMgcG9pbnQuCi0gICAgICAgIGlmIChfZGF0YUxlbmd0
aFJlY2VpdmVkID4gMCkgewotICAgICAgICAgICAgTlNEYXRhICpkYXRhID0gW1tbc2VsZiBkYXRh
U291cmNlXSBkYXRhXSBzdWJkYXRhV2l0aFJhbmdlOk5TTWFrZVJhbmdlKDAsIF9kYXRhTGVuZ3Ro
UmVjZWl2ZWQpXTsKLSAgICAgICAgICAgIF9kYXRhTGVuZ3RoUmVjZWl2ZWQgPSAwOwotICAgICAg
ICAgICAgW3NlbGYgcGx1Z2luVmlldzpzZWxmIHJlY2VpdmVkRGF0YTpkYXRhXTsKLSAgICAgICAg
ICAgIGlmICghW1tzZWxmIGRhdGFTb3VyY2VdIGlzTG9hZGluZ10pIHsKLSAgICAgICAgICAgICAg
ICBpZiAoX2Vycm9yKQotICAgICAgICAgICAgICAgICAgICBbc2VsZiBwbHVnaW5WaWV3OnNlbGYg
cmVjZWl2ZWRFcnJvcjpfZXJyb3IuZ2V0KCldOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgW3NlbGYgcGx1Z2luVmlld0ZpbmlzaGVkTG9hZGluZzpzZWxmXTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotQGVuZAotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxl
ci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxl
ci5tbQppbmRleCA5NDhhZjMyMTkxZDBhOWFhNWMxZDY2YTE3NzU4MGYyMzA2OTcyZmNiLi5mNzAy
NWZhNDc4YzFmNzE1ODlkNTY2YTRlNzYwMTEzY2YzYmRiOGIzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW0KKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLm1tCkBAIC0z
ODMsMTEgKzM4Myw2IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVBdWRpb1Nlc3Npb24oKQogICAg
ICAgICBpZiAoX3N0YXJ0ZWQpCiAgICAgICAgICAgICBbc2VsZiBzdG9wT25lUGx1Z2luOnZpZXdd
OwogICAgICAgICBbc2VsZiBkZXN0cm95T25lUGx1Z2luOnZpZXddOwotCi0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIGlmIChhdXRvKiBmcmFtZSA9IGNvcmUoW3NlbGYg
d2ViRnJhbWVdKSkKLSAgICAgICAgICAgIGZyYW1lLT5zY3JpcHQoKS5jbGVhbnVwU2NyaXB0T2Jq
ZWN0c0ZvclBsdWdpbihzZWxmKTsKLSNlbmRpZgogICAgICAgICAKICAgICAgICAgW3BsdWdpblZp
ZXdzKCkgcmVtb3ZlT2JqZWN0OnZpZXddOwogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQpAQCAt
NDMxLDEyICs0MjYsNyBAQCBzdGF0aWMgdm9pZCBjYW5jZWxPdXRzdGFuZGluZ0NoZWNrKGNvbnN0
IHZvaWQgKml0ZW0sIHZvaWQgKmNvbnRleHQpCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2aWV3
c0NvdW50OyBpKyspIHsKICAgICAgICAgaWQgYVZpZXcgPSBbX3ZpZXdzIG9iamVjdEF0SW5kZXg6
aV07CiAgICAgICAgIFtzZWxmIGRlc3Ryb3lPbmVQbHVnaW46YVZpZXddOwotICAgICAgICAKLSNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgaWYgKGF1dG8qIGZyYW1lID0g
Y29yZShbc2VsZiB3ZWJGcmFtZV0pKQotICAgICAgICAgICAgZnJhbWUtPnNjcmlwdCgpLmNsZWFu
dXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHNlbGYpOwotI2VuZGlmCi0gICAgICAgIAorCiAgICAg
ICAgIFtwbHVnaW5WaWV3cygpIHJlbW92ZU9iamVjdDphVmlld107CiAjaWYgIVBMQVRGT1JNKElP
U19GQU1JTFkpCiAgICAgICAgIFtbX2RvY3VtZW50VmlldyBfd2ViVmlld10gcmVtb3ZlUGx1Z2lu
SW5zdGFuY2VWaWV3OmFWaWV3XTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1BsdWdpbnMvV2ViUGx1Z2luRGF0YWJhc2UubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9Q
bHVnaW5zL1dlYlBsdWdpbkRhdGFiYXNlLm1tCmluZGV4IDAxYzNkZmI4NDA3NDY5OWMwMjU0MDVk
ODg0N2FjZGZlNjNlMmM2ODUuLjc5M2RmMDlmZTVhNDUwZDM2MTcxMzcyNjM3Zjk5MmQ0ZGNhMjFk
MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViUGx1Z2lu
RGF0YWJhc2UubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJQbHVn
aW5EYXRhYmFzZS5tbQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaW1wb3J0ICJXZWJQbHVnaW5EYXRh
YmFzZS5oIgogCi0jaW1wb3J0ICJXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3LmgiCiAjaW1wb3J0
ICJXZWJCYXNlUGx1Z2luUGFja2FnZS5oIgogI2ltcG9ydCAiV2ViRGF0YVNvdXJjZVByaXZhdGUu
aCIKICNpbXBvcnQgIldlYkZyYW1lLmgiCkBAIC0zNyw3ICszNiw2IEBACiAjaW1wb3J0ICJXZWJI
VE1MVmlld0ludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJLaXRMb2dnaW5nLmgiCiAjaW1wb3J0ICJX
ZWJOU0ZpbGVNYW5hZ2VyRXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpblBhY2th
Z2UuaCIKICNpbXBvcnQgIldlYlBsdWdpbkNvbnRyb2xsZXIuaCIKICNpbXBvcnQgIldlYlBsdWdp
blBhY2thZ2UuaCIKICNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgpAQCAtMTEzLDEzICsxMTEs
NiBAQCBzdHJ1Y3QgUGx1Z2luUGFja2FnZUNhbmRpZGF0ZXMgewogICAgICAgICAgICAgY2hlY2tD
YW5kaWRhdGUoJndlYlBsdWdpbiwgJnBsdWdpbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgICAgIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAg
ICAgICBpZihbcGx1Z2luIGlzS2luZE9mQ2xhc3M6W1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSBj
bGFzc11dKSB7Ci0gICAgICAgICAgICBjaGVja0NhbmRpZGF0ZSgmbmV0c2NhcGVQbHVnaW4sICZw
bHVnaW4pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIApAQCAtMzU0LDEyICszNDUsOCBAQCBz
dGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+JiBhZGRpdGlvbmFsV2ViUGx1Z0luUGF0aHMoKQogICAg
IE5TVmlldyA8V2ViRG9jdW1lbnRWaWV3PiAqZG9jdW1lbnRWaWV3ID0gW1t3ZWJGcmFtZSBmcmFt
ZVZpZXddIGRvY3VtZW50Vmlld107IAogICAgIGlmIChbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xh
c3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pIHsKICAgICAgICAgZm9yIChOU1ZpZXcgKnN1YnZpZXcg
aW4gW2RvY3VtZW50VmlldyBzdWJ2aWV3c10pIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLSAgICAgICAgICAgIGlmIChbc3VidmlldyBpc0tpbmRPZkNsYXNzOltXZWJCYXNlTmV0
c2NhcGVQbHVnaW5WaWV3IGNsYXNzXV0gfHwgW1dlYlBsdWdpbkNvbnRyb2xsZXIgaXNQbHVnSW5W
aWV3OnN1YnZpZXddKQotI2Vsc2UKICAgICAgICAgICAgIGlmIChbV2ViUGx1Z2luQ29udHJvbGxl
ciBpc1BsdWdJblZpZXc6c3Vidmlld10pCi0jZW5kaWYKLSAgICAgICAgICAgICAgICBbcGx1Z2lu
SW5zdGFuY2VWaWV3cyByZW1vdmVPYmplY3Q6c3Vidmlld107IAorICAgICAgICAgICAgICAgIFtw
bHVnaW5JbnN0YW5jZVZpZXdzIHJlbW92ZU9iamVjdDpzdWJ2aWV3XTsKICAgICAgICAgfQogICAg
IH0KIH0KQEAgLTM3MCwxMiArMzU3LDYgQEAgc3RhdGljIFJldGFpblB0cjxOU0FycmF5PiYgYWRk
aXRpb25hbFdlYlBsdWdJblBhdGhzKCkKICAgICBOU0FycmF5ICpwbGkgPSBbcGx1Z2luSW5zdGFu
Y2VWaWV3cyBhbGxPYmplY3RzXTsKICAgICBOU0VudW1lcmF0b3IgKmVudW1lcmF0b3IgPSBbcGxp
IG9iamVjdEVudW1lcmF0b3JdOwogICAgIHdoaWxlICgodmlldyA9IFtlbnVtZXJhdG9yIG5leHRP
YmplY3RdKSAhPSBuaWwpIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAg
ICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgY2xh
c3NdXSkgewotICAgICAgICAgICAgQVNTRVJUKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3Ioc3RvcCldKTsKLSAgICAgICAgICAgIFt2aWV3IHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0
b3Ioc3RvcCldOwotICAgICAgICB9IGVsc2UKLSNlbmRpZgogICAgICAgICBpZiAoW1dlYlBsdWdp
bkNvbnRyb2xsZXIgaXNQbHVnSW5WaWV3OnZpZXddKSB7CiAgICAgICAgICAgICBBU1NFUlQoW1t2
aWV3IHN1cGVydmlld10gaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSk7CiAgICAg
ICAgICAgICBBU1NFUlQoW1t2aWV3IHN1cGVydmlld10gcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3RvcihfZGVzdHJveUFsbFdlYlBsdWdpbnMpXSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9QbHVnaW5zL1dlYlBsdWdpblJlcXVlc3QuaCBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1BsdWdpbnMvV2ViUGx1Z2luUmVxdWVzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiYjA3Yzg1Y2RkMTAyMGE0NGM0ZjhlMWY5MDNjZDA0OWMwM2QwMGE5Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1BsdWdpbnMvV2ViUGx1Z2luUmVxdWVzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLUBpbnRlcmZhY2UgV2Vi
UGx1Z2luUmVxdWVzdCA6IE5TT2JqZWN0Ci17Ci0gICAgTlNVUkxSZXF1ZXN0ICpfcmVxdWVzdDsK
LSAgICBOU1N0cmluZyAqX2ZyYW1lTmFtZTsKLSAgICB2b2lkICpfbm90aWZ5RGF0YTsKLSAgICBC
T09MIF9kaWRTdGFydEZyb21Vc2VyR2VzdHVyZTsKLSAgICBCT09MIF9zZW5kTm90aWZpY2F0aW9u
OwotfQotCi0tIChpZClpbml0V2l0aFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QgZnJh
bWVOYW1lOihOU1N0cmluZyAqKWZyYW1lTmFtZSBub3RpZnlEYXRhOih2b2lkICopbm90aWZ5RGF0
YSBzZW5kTm90aWZpY2F0aW9uOihCT09MKXNlbmROb3RpZmljYXRpb24gZGlkU3RhcnRGcm9tVXNl
ckdlc3R1cmU6KEJPT0wpY3VycmVudEV2ZW50SXNVc2VyR2VzdHVyZTsKLQotLSAoTlNVUkxSZXF1
ZXN0ICopcmVxdWVzdDsKLS0gKE5TU3RyaW5nICopZnJhbWVOYW1lOwotLSAodm9pZCAqKW5vdGlm
eURhdGE7Ci0tIChCT09MKWlzQ3VycmVudEV2ZW50VXNlckdlc3R1cmU7Ci0tIChCT09MKXNlbmRO
b3RpZmljYXRpb247Ci0KLUBlbmQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJQbHVn
aW5SZXF1ZXN0Lm0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYlBsdWdpblJl
cXVlc3QubQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk0OGIzYTRjOTVkOTI4MGE2
YWY3MjViZjY0NGM3ZGUwNTdmOTY3My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYlBsdWdpblJl
cXVlc3QubQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDUsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQotCi0jaW1wb3J0ICJXZWJQbHVnaW5SZXF1ZXN0LmgiCi0KLUBpbXBsZW1l
bnRhdGlvbiBXZWJQbHVnaW5SZXF1ZXN0Ci0KLS0gKGlkKWluaXRXaXRoUmVxdWVzdDooTlNVUkxS
ZXF1ZXN0ICopcmVxdWVzdCBmcmFtZU5hbWU6KE5TU3RyaW5nICopZnJhbWVOYW1lIG5vdGlmeURh
dGE6KHZvaWQgKilub3RpZnlEYXRhIHNlbmROb3RpZmljYXRpb246KEJPT0wpc2VuZE5vdGlmaWNh
dGlvbiBkaWRTdGFydEZyb21Vc2VyR2VzdHVyZTooQk9PTCljdXJyZW50RXZlbnRJc1VzZXJHZXN0
dXJlCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0gICAgX2RpZFN0YXJ0RnJvbVVzZXJHZXN0dXJlID0gY3VycmVudEV2ZW50
SXNVc2VyR2VzdHVyZTsKLSAgICBfcmVxdWVzdCA9IFtyZXF1ZXN0IHJldGFpbl07Ci0gICAgX2Zy
YW1lTmFtZSA9IFtmcmFtZU5hbWUgcmV0YWluXTsKLSAgICBfbm90aWZ5RGF0YSA9IG5vdGlmeURh
dGE7Ci0gICAgX3NlbmROb3RpZmljYXRpb24gPSBzZW5kTm90aWZpY2F0aW9uOwotICAgIHJldHVy
biBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX3JlcXVlc3QgcmVsZWFzZV07
Ci0gICAgW19mcmFtZU5hbWUgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0t
IChOU1VSTFJlcXVlc3QgKilyZXF1ZXN0Ci17Ci0gICAgcmV0dXJuIF9yZXF1ZXN0OwotfQotCi0t
IChOU1N0cmluZyAqKWZyYW1lTmFtZQotewotICAgIHJldHVybiBfZnJhbWVOYW1lOwotfQotCi0t
IChCT09MKWlzQ3VycmVudEV2ZW50VXNlckdlc3R1cmUKLXsKLSAgICByZXR1cm4gX2RpZFN0YXJ0
RnJvbVVzZXJHZXN0dXJlOwotfQotCi0tIChCT09MKXNlbmROb3RpZmljYXRpb24KLXsKLSAgICBy
ZXR1cm4gX3NlbmROb3RpZmljYXRpb247Ci19Ci0KLS0gKHZvaWQgKilub3RpZnlEYXRhCi17Ci0g
ICAgcmV0dXJuIF9ub3RpZnlEYXRhOwotfQotCi1AZW5kCi0KLSNlbmRpZiAvLyBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1Bs
dWdpbnMvbnBhcGkubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL25wYXBpLm1t
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGM5Y2I3ZDExMjVkZmYyNDliYWViYzkx
ZDdjOWE4Nzg0ODE1ZjU0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvbnBhcGkubW0KKysrIC9kZXYv
bnVsbApAQCAtMSwyMjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0g
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotI2ltcG9y
dCA8V2ViS2l0TGVnYWN5L25wYXBpLmg+Ci0KLSNpbXBvcnQgIldlYk5ldHNjYXBlUGx1Z2luVmll
dy5oIgotI2ltcG9ydCAiV2ViS2l0TG9nZ2luZy5oIgotI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVdlYk5ldHNjYXBlUGx1Z2luVmlldyAqcGx1
Z2luVmlld0Zvckluc3RhbmNlKE5QUCBpbnN0YW5jZSk7Ci0KLS8vIGdlbmVyYWwgcGx1Zy1pbiB0
byBicm93c2VyIGZ1bmN0aW9ucwotCi12b2lkKiBOUE5fTWVtQWxsb2ModWludDMyX3Qgc2l6ZSkK
LXsKLSAgICByZXR1cm4gbWFsbG9jKHNpemUpOwotfQotCi12b2lkIE5QTl9NZW1GcmVlKHZvaWQq
IHB0cikKLXsKLSAgICBmcmVlKHB0cik7Ci19Ci0KLXVpbnQzMl90IE5QTl9NZW1GbHVzaCh1aW50
MzJfdCBzaXplKQotewotICAgIExPRyhQbHVnaW5zLCAiTlBOX01lbUZsdXNoIik7Ci0gICAgcmV0
dXJuIHNpemU7Ci19Ci0KLXZvaWQgTlBOX1JlbG9hZFBsdWdpbnMoTlBCb29sIHJlbG9hZFBhZ2Vz
KQotewotICAgIExPRyhQbHVnaW5zLCAiTlBOX1JlbG9hZFBsdWdpbnMiKTsKLX0KLQotTlBFcnJv
ciBOUE5fUmVxdWVzdFJlYWQoTlBTdHJlYW0qIHN0cmVhbSwgTlBCeXRlUmFuZ2UqIHJhbmdlTGlz
dCkKLXsKLSAgICBMT0coUGx1Z2lucywgIk5QTl9SZXF1ZXN0UmVhZCIpOwotICAgIHJldHVybiBO
UEVSUl9HRU5FUklDX0VSUk9SOwotfQotCi0vLyBpbnN0YW5jZS1zcGVjaWZpYyBmdW5jdGlvbnMK
LS8vIFRoZSBwbHVnaW4gdmlldyBpcyBhbHdheXMgdGhlIG5kYXRhIG9mIHRoZSBpbnN0YW5jZS4g
U29tZXRpbWVzLCBwbHVnLWlucyB3aWxsIGNhbGwgYW4gaW5zdGFuY2Utc3BlY2lmaWMgZnVuY3Rp
b24KLS8vIHdpdGggYSBOVUxMIGluc3RhbmNlLiBUbyB3b3JrYXJvdW5kIHRoaXMsIGNhbGwgdGhl
IGxhc3QgcGx1Zy1pbiB2aWV3IHRoYXQgbWFkZSBhIGNhbGwgdG8gYSBwbHVnLWluLgotLy8gQ3Vy
cmVudGx5LCB0aGUgY3VycmVudCBwbHVnLWluIHZpZXcgaXMgb25seSBzZXQgYmVmb3JlIE5QUF9O
ZXcgaW4gW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBzdGFydF0uCi0vLyBUaGlzIHNwZWNpZmljYWxs
eSB3b3JrcyBhcm91bmQgRmxhc2ggYW5kIFNob2Nrd2F2ZS4gV2hlbiB3ZSBjYWxsIE5QUF9OZXcs
IHRoZXkgY2FsbCBOUE5fVXNlckFnZW50IHdpdGggYSBOVUxMIGluc3RhbmNlLgotV2ViTmV0c2Nh
cGVQbHVnaW5WaWV3ICpwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoTlBQIGluc3RhbmNlKQotewotICAg
IGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS0+bmRhdGEpCi0gICAgICAgIHJldHVybiAoX19icmlk
Z2UgV2ViTmV0c2NhcGVQbHVnaW5WaWV3ICopaW5zdGFuY2UtPm5kYXRhOwotICAgIGVsc2UKLSAg
ICAgICAgcmV0dXJuIFtXZWJOZXRzY2FwZVBsdWdpblZpZXcgY3VycmVudFBsdWdpblZpZXddOwot
fQotCi1OUEVycm9yIE5QTl9HZXRVUkxOb3RpZnkoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBV
UkwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSkKLXsKLSAgICByZXR1cm4g
W3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgZ2V0VVJMTm90aWZ5OlVSTCB0YXJnZXQ6
dGFyZ2V0IG5vdGlmeURhdGE6bm90aWZ5RGF0YV07Ci19Ci0KLU5QRXJyb3IgTlBOX0dldFVSTChO
UFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciogdGFyZ2V0KQotewotICAg
IHJldHVybiBbcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKSBnZXRVUkw6VVJMIHRhcmdl
dDp0YXJnZXRdOwotfQotCi1OUEVycm9yIE5QTl9Qb3N0VVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwg
Y29uc3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3Qg
Y2hhciogYnVmLCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKLXsKLSAgICByZXR1cm4g
W3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgcG9zdFVSTE5vdGlmeTpVUkwgdGFyZ2V0
OnRhcmdldCBsZW46bGVuIGJ1ZjpidWYgZmlsZTpmaWxlIG5vdGlmeURhdGE6bm90aWZ5RGF0YV07
Ci19Ci0KLU5QRXJyb3IgTlBOX1Bvc3RVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkws
IGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9v
bCBmaWxlKQotewotICAgIHJldHVybiBbcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKSBw
b3N0VVJMOlVSTCB0YXJnZXQ6dGFyZ2V0IGxlbjpsZW4gYnVmOmJ1ZiBmaWxlOmZpbGVdOwotfQot
Ci1OUEVycm9yIE5QTl9OZXdTdHJlYW0oTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5cGUsIGNv
bnN0IGNoYXIqIHRhcmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pCi17Ci0gICAgcmV0dXJuIFtwbHVn
aW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpIG5ld1N0cmVhbTp0eXBlIHRhcmdldDp0YXJnZXQg
c3RyZWFtOnN0cmVhbV07Ci19Ci0KLWludDMyX3QgTlBOX1dyaXRlKE5QUCBpbnN0YW5jZSwgTlBT
dHJlYW0qIHN0cmVhbSwgaW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZlcikKLXsKLSAgICByZXR1cm4g
W3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgd3JpdGU6c3RyZWFtIGxlbjpsZW4gYnVm
ZmVyOmJ1ZmZlcl07Ci19Ci0KLU5QRXJyb3IgTlBOX0Rlc3Ryb3lTdHJlYW0oTlBQIGluc3RhbmNl
LCBOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCi17Ci0gICAgcmV0dXJuIFtwbHVn
aW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpIGRlc3Ryb3lTdHJlYW06c3RyZWFtIHJlYXNvbjpy
ZWFzb25dOwotfQotCi1jb25zdCBjaGFyKiBOUE5fVXNlckFnZW50KE5QUCBpbnN0YW5jZSkKLXsK
LSAgICByZXR1cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgdXNlckFnZW50XTsK
LX0KLQotdm9pZCBOUE5fU3RhdHVzKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogbWVzc2FnZSkK
LXsKLSAgICBbcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKSBzdGF0dXM6bWVzc2FnZV07
Ci19Ci0KLXZvaWQgTlBOX0ludmFsaWRhdGVSZWN0KE5QUCBpbnN0YW5jZSwgTlBSZWN0ICppbnZh
bGlkUmVjdCkKLXsKLSAgICBbcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKSBpbnZhbGlk
YXRlUmVjdDppbnZhbGlkUmVjdF07Ci19Ci0KLXZvaWQgTlBOX0ludmFsaWRhdGVSZWdpb24oTlBQ
IGluc3RhbmNlLCBOUFJlZ2lvbiBpbnZhbGlkUmVnaW9uKQotewotICAgIFtwbHVnaW5WaWV3Rm9y
SW5zdGFuY2UoaW5zdGFuY2UpIGludmFsaWRhdGVSZWdpb246aW52YWxpZFJlZ2lvbl07Ci19Ci0K
LXZvaWQgTlBOX0ZvcmNlUmVkcmF3KE5QUCBpbnN0YW5jZSkKLXsKLSAgICBbcGx1Z2luVmlld0Zv
ckluc3RhbmNlKGluc3RhbmNlKSBmb3JjZVJlZHJhd107Ci19Ci0KLU5QRXJyb3IgTlBOX0dldFZh
bHVlKE5QUCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnZhbHVlKQotewot
ICAgIHJldHVybiBbcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKSBnZXRWYXJpYWJsZTp2
YXJpYWJsZSB2YWx1ZTp2YWx1ZV07Ci19Ci0KLU5QRXJyb3IgTlBOX1NldFZhbHVlKE5QUCBpbnN0
YW5jZSwgTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnZhbHVlKQotewotICAgIHJldHVybiBb
cGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKSBzZXRWYXJpYWJsZTp2YXJpYWJsZSB2YWx1
ZTp2YWx1ZV07Ci19Ci0KLS8vIFVuc3VwcG9ydGVkIGZ1bmN0aW9ucwotCi12b2lkKiBOUE5fR2V0
SmF2YUVudih2b2lkKQotewotICAgIExPRyhQbHVnaW5zLCAiTlBOX0dldEphdmFFbnYiKTsKLSAg
ICByZXR1cm4gTlVMTDsKLX0KLQotdm9pZCogTlBOX0dldEphdmFQZWVyKE5QUCBpbnN0YW5jZSkK
LXsKLSAgICBMT0coUGx1Z2lucywgIk5QTl9HZXRKYXZhUGVlciIpOwotICAgIHJldHVybiBOVUxM
OwotfQotCi12b2lkIE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSwgTlBC
b29sIGVuYWJsZWQpCi17Ci19Ci0KLXZvaWQgTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAg
aW5zdGFuY2UpCi17Ci19Ci0KLXZvaWQgTlBOX1BsdWdpblRocmVhZEFzeW5jQ2FsbChOUFAgaW5z
dGFuY2UsIHZvaWQgKCpmdW5jKSAodm9pZCAqKSwgdm9pZCAqdXNlckRhdGEpCi17Ci0gICAgV2Vi
TmV0c2NhcGVQbHVnaW5WaWV3ICpwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0Zvckluc3RhbmNlKGlu
c3RhbmNlKTsKLQotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcGx1Z2luVmlldyA9IHJl
dGFpblB0cihwbHVnaW5WaWV3KSwgdXNlckRhdGEsIGZ1bmNdIHsKLSAgICAgICAgaWYgKCFwbHVn
aW5WaWV3IHx8ICFwbHVnaW5WaWV3LT5wbHVnaW4pIHsKLSAgICAgICAgICAgIC8vIFRoZSBwbHVn
LWluIGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkLgotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZnVuYyh1c2VyRGF0YSk7Ci0gICAgfSk7Ci19Ci0KLXVpbnQzMl90
IE5QTl9TY2hlZHVsZVRpbWVyKE5QUCBpbnN0YW5jZSwgdWludDMyX3QgaW50ZXJ2YWwsIE5QQm9v
bCByZXBlYXQsIHZvaWQgKCp0aW1lckZ1bmMpKE5QUCBucHAsIHVpbnQzMl90IHRpbWVySUQpKQot
ewotICAgIHJldHVybiBbcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKSBzY2hlZHVsZVRp
bWVyV2l0aEludGVydmFsOmludGVydmFsIHJlcGVhdDpyZXBlYXQgdGltZXJGdW5jOnRpbWVyRnVu
Y107Ci19Ci0KLXZvaWQgTlBOX1Vuc2NoZWR1bGVUaW1lcihOUFAgaW5zdGFuY2UsIHVpbnQzMl90
IHRpbWVySUQpCi17Ci0gICAgW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgdW5zY2hl
ZHVsZVRpbWVyOnRpbWVySURdOwotfQotCi1OUEVycm9yIE5QTl9Qb3BVcENvbnRleHRNZW51KE5Q
UCBpbnN0YW5jZSwgTlBNZW51ICptZW51KQotewotICAgIHJldHVybiBbcGx1Z2luVmlld0Zvcklu
c3RhbmNlKGluc3RhbmNlKSBwb3BVcENvbnRleHRNZW51Om1lbnVdOwotfQotCi1OUEVycm9yIE5Q
Tl9HZXRWYWx1ZUZvclVSTChOUFAgaW5zdGFuY2UsIE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBj
b25zdCBjaGFyKiB1cmwsIGNoYXIqKiB2YWx1ZSwgdWludDMyX3QqIGxlbikKLXsKLSAgICByZXR1
cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgZ2V0VmFyaWFibGU6dmFyaWFibGUg
Zm9yVVJMOnVybCB2YWx1ZTp2YWx1ZSBsZW5ndGg6bGVuXTsKLX0KLQotTlBFcnJvciBOUE5fU2V0
VmFsdWVGb3JVUkwoTlBQIGluc3RhbmNlLCBOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwgY29uc3Qg
Y2hhciogdXJsLCBjb25zdCBjaGFyKiB2YWx1ZSwgdWludDMyX3QgbGVuKQotewotICAgIHJldHVy
biBbcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKSBzZXRWYXJpYWJsZTp2YXJpYWJsZSBm
b3JVUkw6dXJsIHZhbHVlOnZhbHVlIGxlbmd0aDpsZW5dOwotfQotCi1OUEVycm9yIE5QTl9HZXRB
dXRoZW50aWNhdGlvbkluZm8oTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBwcm90b2NvbCwgY29u
c3QgY2hhciogaG9zdCwgaW50MzJfdCBwb3J0LCBjb25zdCBjaGFyKiBzY2hlbWUsIGNvbnN0IGNo
YXIgKnJlYWxtLCBjaGFyKiogdXNlcm5hbWUsIHVpbnQzMl90KiB1bGVuLCBjaGFyKiogcGFzc3dv
cmQsIHVpbnQzMl90KiBwbGVuKQotewotICAgIHJldHVybiBbcGx1Z2luVmlld0Zvckluc3RhbmNl
KGluc3RhbmNlKSBnZXRBdXRoZW50aWNhdGlvbkluZm9XaXRoUHJvdG9jb2w6cHJvdG9jb2wgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaG9zdDpob3N0IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ6cG9ydAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzY2hlbWU6c2NoZW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbTpyZWFsbQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdXNlcm5hbWU6dXNlcm5hbWUgdXNlcm5hbWVMZW5ndGg6dWxlbgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFzc3dvcmQ6cGFzc3dvcmQgcGFzc3dvcmRMZW5ndGg6cGxlbl07Ci19Ci0KLU5QQm9vbCBO
UE5fQ29udmVydFBvaW50KE5QUCBpbnN0YW5jZSwgZG91YmxlIHNvdXJjZVgsIGRvdWJsZSBzb3Vy
Y2VZLCBOUENvb3JkaW5hdGVTcGFjZSBzb3VyY2VTcGFjZSwgZG91YmxlICpkZXN0WCwgZG91Ymxl
ICpkZXN0WSwgTlBDb29yZGluYXRlU3BhY2UgZGVzdFNwYWNlKQotewotICAgIHJldHVybiBbcGx1
Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKSBjb252ZXJ0RnJvbVg6c291cmNlWCBhbmRZOnNv
dXJjZVkgc3BhY2U6c291cmNlU3BhY2UgdG9YOmRlc3RYIGFuZFk6ZGVzdFkgc3BhY2U6ZGVzdFNw
YWNlXTsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KaW5kZXggMTY5M2Q4NzVmZTAwODU0
ZjkyZDViYTMxNmQ1ZjczMTFkODdkOGFiMi4uYTE3NTFiMDI5ODRmNzdlN2E3YzZkNTViNTk0ZmZi
ODgwMDA5OGZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQpAQCAtOTMsMTAgKzkzLDYgQEAKICNpbXBv
cnQgPHd0Zi9WZWN0b3IuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi0jaWYg
VVNFKFBMVUdJTl9IT1NUX1BST0NFU1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQot
I2ltcG9ydCAiTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5oIgotI2VuZGlmCi0KICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoR0VPTE9DQVRJT04pCiAjaW1wb3J0IDxXZWJDb3Jl
L0dlb2xvY2F0aW9uLmg+CiAjZW5kaWYKQEAgLTI3MywxNyArMjY5LDEwIEBAIFBhZ2UqIFdlYkNo
cm9tZUNsaWVudDo6Y3JlYXRlV2luZG93KEZyYW1lJiBmcmFtZSwgY29uc3QgV2luZG93RmVhdHVy
ZXMmIGZlYXR1cmVzCiAgICAgICAgICAgICBbZGljdEZlYXR1cmVzIHNldE9iamVjdDpAKCpmZWF0
dXJlcy5oZWlnaHQpIGZvcktleTpAImhlaWdodCJdOwogICAgICAgICAKICAgICAgICAgbmV3V2Vi
VmlldyA9IENhbGxVSURlbGVnYXRlKG1fd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6Y3JlYXRl
V2ViVmlld1dpdGhSZXF1ZXN0OndpbmRvd0ZlYXR1cmVzOiksIG5pbCwgZGljdEZlYXR1cmVzLmdl
dCgpKTsKLSAgICB9IGVsc2UgaWYgKGZlYXR1cmVzLmRpYWxvZyAmJiBbZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OmNyZWF0ZVdlYlZpZXdNb2RhbERpYWxvZ1dp
dGhSZXF1ZXN0OildKSB7CisgICAgfSBlbHNlIGlmIChmZWF0dXJlcy5kaWFsb2cgJiYgW2RlbGVn
YXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpjcmVhdGVXZWJWaWV3TW9k
YWxEaWFsb2dXaXRoUmVxdWVzdDopXSkKICAgICAgICAgbmV3V2ViVmlldyA9IENhbGxVSURlbGVn
YXRlKG1fd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6Y3JlYXRlV2ViVmlld01vZGFsRGlhbG9n
V2l0aFJlcXVlc3Q6KSwgbmlsKTsKLSAgICB9IGVsc2UgeworICAgIGVsc2UKICAgICAgICAgbmV3
V2ViVmlldyA9IENhbGxVSURlbGVnYXRlKG1fd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6Y3Jl
YXRlV2ViVmlld1dpdGhSZXF1ZXN0OiksIG5pbCk7Ci0gICAgfQotCi0jaWYgVVNFKFBMVUdJTl9I
T1NUX1BST0NFU1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGlmIChuZXdX
ZWJWaWV3KQotICAgICAgICBXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OnNpbmds
ZXRvbigpLmRpZENyZWF0ZVdpbmRvdygpOwotI2VuZGlmCi0gICAgCiAgICAgcmV0dXJuIGNvcmUo
bmV3V2ViVmlldyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KaW5kZXggMzU2YTM2
YTI3OTVmMzgzYmJiNGNlZmQxODMxNzhjN2I4MTg1OGRmNi4uYWM5YzFlZjhiNzg0MTUwMmZlOWM4
ZjkxMGZkNWI4ZmMyZjhmNTc1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KQEAgLTU4
LDggKzU4LDYgQEAKICNpbXBvcnQgIldlYktpdFZlcnNpb25DaGVja3MuaCIKICNpbXBvcnQgIldl
Yk5TVVJMRXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJOYXZpZ2F0aW9uRGF0YS5oIgotI2ltcG9ydCAi
V2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLmgiCi0jaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpblZp
ZXcuaCIKICNpbXBvcnQgIldlYlBhbmVsQXV0aGVudGljYXRpb25IYW5kbGVyLmgiCiAjaW1wb3J0
ICJXZWJQbHVnaW5Db250cm9sbGVyLmgiCiAjaW1wb3J0ICJXZWJQbHVnaW5QYWNrYWdlLmgiCkBA
IC0xMzUsMTEgKzEzMyw2IEBACiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNp
bXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi0jaWYgVVNFKFBMVUdJTl9IT1NUX1BST0NF
U1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotI2ltcG9ydCAiTmV0c2NhcGVQbHVn
aW5Ib3N0TWFuYWdlci5oIgotI2ltcG9ydCAiV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Lmgi
Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW1wb3J0IDxXZWJDb3JlL0hU
TUxQbHVnSW5JbWFnZUVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvV0FLQ2xpcFZpZXcuaD4K
QEAgLTg0MCwxMiArODMzLDYgQEAgV2ViQ29yZTo6RnJhbWUqIFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpkaXNwYXRjaENyZWF0ZVBhZ2UoY29uc3QgV2ViQ29yZTo6TmF2aWdhdGkKICAgICBXZWJWaWV3
ICpuZXdXZWJWaWV3ID0gW1tjdXJyZW50V2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2Vi
VmlldzpjdXJyZW50V2ViVmlldyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNyZWF0ZVdlYlZpZXdXaXRoUmVxdWVzdDpuaWwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dGZWF0dXJl
czpmZWF0dXJlcy5nZXQoKV07Ci0gICAgCi0jaWYgVVNFKFBMVUdJTl9IT1NUX1BST0NFU1MpICYm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGlmIChuZXdXZWJWaWV3KQotICAgICAg
ICBXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OnNpbmdsZXRvbigpLmRpZENyZWF0
ZVdpbmRvdygpOwotI2VuZGlmCi0gICAgICAgIAogICAgIHJldHVybiBjb3JlKFtuZXdXZWJWaWV3
IG1haW5GcmFtZV0pOwogfQogCkBAIC0xNzc5LDgzICsxNzY2LDYgQEAgcHVibGljOgogfTsKICNl
bmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCi0KLWNsYXNzIE5ldHNjYXBlUGx1Z2luV2lkZ2V0IDogcHVibGljIFBsdWdpbldpZGdl
dCB7Ci1wdWJsaWM6Ci0gICAgTmV0c2NhcGVQbHVnaW5XaWRnZXQoV2ViQmFzZU5ldHNjYXBlUGx1
Z2luVmlldyAqdmlldykKLSAgICAgICAgOiBQbHVnaW5XaWRnZXQodmlldykKLSAgICB7Ci0gICAg
fQotCi0gICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBbKFdlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgKilwbGF0Zm9y
bVdpZGdldCgpIHBsdWdpbkxheWVyXTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0Rm9y
bVZhbHVlKFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICBOU1N0cmluZyogbnNWYWx1ZSA9
IDA7Ci0gICAgICAgIGlmIChbKFdlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgKilwbGF0Zm9ybVdp
ZGdldCgpIGdldEZvcm1WYWx1ZTombnNWYWx1ZV0pIHsKLSAgICAgICAgICAgIGlmICghbnNWYWx1
ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB2YWx1ZSA9IFN0
cmluZyhhZG9wdE5TKG5zVmFsdWUpLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlRXZlbnQoV2ViQ29yZTo6RXZlbnQmIGV2ZW50KQotICAgIHsKLSAgICAgICAgYXV0
byogZnJhbWUgPSBXZWJDb3JlOjpGcmFtZTo6ZnJhbWVGb3JXaWRnZXQoKnRoaXMpOwotICAgICAg
ICBpZiAoIWZyYW1lKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgTlNF
dmVudCogY3VycmVudE5TRXZlbnQgPSBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkuY3VycmVudE5TRXZl
bnQoKTsKLSAgICAgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBXZWJDb3JlOjpldmVudE5hbWVzKCku
bW91c2Vtb3ZlRXZlbnQpCi0gICAgICAgICAgICBbKFdlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcg
KilwbGF0Zm9ybVdpZGdldCgpIGhhbmRsZU1vdXNlTW92ZWQ6Y3VycmVudE5TRXZlbnRdOwotICAg
ICAgICBlbHNlIGlmIChldmVudC50eXBlKCkgPT0gV2ViQ29yZTo6ZXZlbnROYW1lcygpLm1vdXNl
b3ZlckV2ZW50KQotICAgICAgICAgICAgWyhXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3ICopcGxh
dGZvcm1XaWRnZXQoKSBoYW5kbGVNb3VzZUVudGVyZWQ6Y3VycmVudE5TRXZlbnRdOwotICAgICAg
ICBlbHNlIGlmIChldmVudC50eXBlKCkgPT0gV2ViQ29yZTo6ZXZlbnROYW1lcygpLm1vdXNlb3V0
RXZlbnQpCi0gICAgICAgICAgICBbKFdlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgKilwbGF0Zm9y
bVdpZGdldCgpIGhhbmRsZU1vdXNlRXhpdGVkOmN1cnJlbnROU0V2ZW50XTsKLSAgICAgICAgZWxz
ZSBpZiAoZXZlbnQudHlwZSgpID09IFdlYkNvcmU6OmV2ZW50TmFtZXMoKS5jb250ZXh0bWVudUV2
ZW50KQotICAgICAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsgLy8gV2UgZG9uJ3Qg
a25vdyBpZiB0aGUgcGx1Zy1pbiBoYXMgaGFuZGxlZCBtb3VzZWRvd24gZXZlbnQgYnkgZGlzcGxh
eWluZyBhIGNvbnRleHQgbWVudSwgc28gd2UgbmV2ZXIgd2FudCBXZWJLaXQgdG8gc2hvdyBhIGRl
ZmF1bHQgb25lLgotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBjbGlwUmVjdENoYW5nZWQoKQot
ICAgIHsKLSAgICAgICAgLy8gQ2hhbmdpbmcgdGhlIGNsaXAgcmVjdCBkb2Vzbid0IGFmZmVjdCB0
aGUgdmlldyBoaWVyYXJjaHksIHNvIHRoZSBwbHVnaW4gbXVzdCBiZSB0b2xkIGFib3V0IHRoZSBj
aGFuZ2UgZGlyZWN0bHkuCi0gICAgICAgIFsoV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyAqKXBs
YXRmb3JtV2lkZ2V0KCkgdXBkYXRlQW5kU2V0V2luZG93XTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgdmlydHVhbCB2b2lkIG5vdGlmeVdpZGdldChXZWJDb3JlOjpXaWRnZXROb3RpZmljYXRpb24g
bm90aWZpY2F0aW9uKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChub3RpZmljYXRpb24pIHsKLSAg
ICAgICAgY2FzZSBXZWJDb3JlOjpXaWxsUGFpbnRGbGF0dGVuZWQ6IHsKLSAgICAgICAgICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgICAgICAgICAgWyhXZWJCYXNlTmV0c2NhcGVQ
bHVnaW5WaWV3ICopcGxhdGZvcm1XaWRnZXQoKSBjYWNoZVNuYXBzaG90XTsKLSAgICAgICAgICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6RGlkUGFpbnRGbGF0dGVuZWQ6IHsKLSAgICAgICAgICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgICAgICAgICAgWyhXZWJCYXNlTmV0c2Nh
cGVQbHVnaW5WaWV3ICopcGxhdGZvcm1XaWRnZXQoKSBjbGVhckNhY2hlZFNuYXBzaG90XTsKLSAg
ICAgICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19OwotCi0jaWYgVVNFKFBMVUdJTl9IT1NUX1BS
T0NFU1MpCi0jZGVmaW5lIE5FVFNDQVBFX1BMVUdJTl9WSUVXIFdlYkhvc3RlZE5ldHNjYXBlUGx1
Z2luVmlldwotI2Vsc2UKLSNkZWZpbmUgTkVUU0NBUEVfUExVR0lOX1ZJRVcgV2ViTmV0c2NhcGVQ
bHVnaW5WaWV3Ci0jZW5kaWYKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQotCiBzdGF0aWMgYm9vbCBzaG91bGRCbG9ja1BsdWdpbihXZWJCYXNlUGx1Z2luUGFja2FnZSAq
cGx1Z2luUGFja2FnZSkKIHsKICNpZiBQTEFURk9STShNQUMpCkBAIC0xOTM4LDIyICsxODQ4LDYg
QEAgUmVmUHRyPFdlYkNvcmU6OldpZGdldD4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBs
dWdpbihjb25zdCBXZWJDb3JlOjpJbnRTaXoKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IGlmIChbcGx1Z2luUGFja2FnZSBpc0tpbmRPZkNsYXNzOltXZWJQbHVnaW5QYWNrYWdlIGNsYXNz
XV0pCiAgICAgICAgICAgICAgICAgdmlldyA9IHBsdWdpblZpZXcobV93ZWJGcmFtZS5nZXQoKSwg
KFdlYlBsdWdpblBhY2thZ2UgKilwbHVnaW5QYWNrYWdlLCBhdHRyaWJ1dGVLZXlzLmdldCgpLCBj
cmVhdGVOU0FycmF5KHBhcmFtVmFsdWVzKS5nZXQoKSwgYmFzZVVSTCwga2l0KCZlbGVtZW50KSwg
bG9hZE1hbnVhbGx5KTsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAg
ICAgIGVsc2UgaWYgKFtwbHVnaW5QYWNrYWdlIGlzS2luZE9mQ2xhc3M6W1dlYk5ldHNjYXBlUGx1
Z2luUGFja2FnZSBjbGFzc11dICYmIFt3ZWJWaWV3LnByZWZlcmVuY2VzIF9ib29sVmFsdWVGb3JL
ZXk6QCJXZWJLaXROUEFQSVBsdWdJbnNFbmFibGVkRm9yVGVzdGluZ0luV2ViS2l0TGVnYWN5Il0p
IHsKLSAgICAgICAgICAgICAgICBhdXRvIHBsdWdpblZpZXcgPSBhZG9wdE5TKFtbTkVUU0NBUEVf
UExVR0lOX1ZJRVcgYWxsb2NdCi0gICAgICAgICAgICAgICAgICAgIGluaXRXaXRoRnJhbWU6TlNN
YWtlUmVjdCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpCi0gICAgICAgICAgICAg
ICAgICAgIHBsdWdpblBhY2thZ2U6KFdlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSAqKXBsdWdpblBh
Y2thZ2UKLSAgICAgICAgICAgICAgICAgICAgVVJMOnBsdWdpblVSTAotICAgICAgICAgICAgICAg
ICAgICBiYXNlVVJMOmJhc2VVUkwKLSAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6TUlNRVR5
cGUKLSAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlS2V5czphdHRyaWJ1dGVLZXlzLmdldCgp
Ci0gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlczpjcmVhdGVOU0FycmF5KHBhcmFt
VmFsdWVzKS5nZXQoKQotICAgICAgICAgICAgICAgICAgICBsb2FkTWFudWFsbHk6bG9hZE1hbnVh
bGx5Ci0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6JmVsZW1lbnRdKTsKLQotICAgICAgICAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTmV0c2NhcGVQbHVnaW5XaWRnZXQocGx1Z2luVmll
dy5nZXQoKSkpOwotICAgICAgICAgICAgfQotI2VuZGlmCiAgICAgICAgIH0KICAgICB9IGVsc2UK
ICAgICAgICAgZXJyb3JDb2RlID0gV2ViS2l0RXJyb3JDYW5ub3RGaW5kUGx1Z0luOwpAQCAtMTk5
OCwxMSArMTg5Miw2IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnJlZGlyZWN0RGF0YVRv
UGx1Z2luKFdlYkNvcmU6OldpZGdldCYgcGx1Z2luV2lkZ2V0KQogCiAgICAgTlNWaWV3ICpwbHVn
aW5WaWV3ID0gcGx1Z2luV2lkZ2V0LnBsYXRmb3JtV2lkZ2V0KCk7CiAKLSNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLSAgICBpZiAoW3BsdWdpblZpZXcgaXNLaW5kT2ZDbGFzczpbTkVU
U0NBUEVfUExVR0lOX1ZJRVcgY2xhc3NdXSkKLSAgICAgICAgW3JlcHJlc2VudGF0aW9uIF9yZWRp
cmVjdERhdGFUb01hbnVhbExvYWRlcjooTkVUU0NBUEVfUExVR0lOX1ZJRVcgKilwbHVnaW5WaWV3
IGZvclBsdWdpblZpZXc6cGx1Z2luVmlld107Ci0gICAgZWxzZQotI2VuZGlmCiAgICAgewogICAg
ICAgICBXZWJIVE1MVmlldyAqZG9jdW1lbnRWaWV3ID0gKFdlYkhUTUxWaWV3ICopW1ttX3dlYkZy
YW1lLmdldCgpIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKICAgICAgICAgQVNTRVJUKFtkb2N1
bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCBmOTA3NzExM2I3ZjFhYmZj
MjMyYjM2MTA2NjY0MTEwZGYzYmQzYzljLi42M2Q3ODE5OTRmYWJmNDY1YmU4ZTU1MGVhOGNmOGI2
Yzc4MmIzMjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUu
bW0KQEAgLTExMzMsMjggKzExMzMsNiBAQCBzdGF0aWMgV2ViRnJhbWVMb2FkVHlwZSB0b1dlYkZy
YW1lTG9hZFR5cGUoV2ViQ29yZTo6RnJhbWVMb2FkVHlwZSBmcmFtZUxvYWRUeXBlKQogICAgIHJl
dHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+cGVuZGlu
Z1VubG9hZEV2ZW50TGlzdGVuZXJzKCk7CiB9CiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLS0gKHZvaWQpX3JlY3Vyc2l2ZV9yZXN1bWVOdWxsRXZlbnRzRm9yQWxsTmV0c2NhcGVQ
bHVnaW5zCi17Ci0gICAgYXV0byBjb3JlRnJhbWUgPSBjb3JlKHNlbGYpOwotICAgIGZvciAoYXV0
byogZnJhbWUgPSBjb3JlRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVy
c2VOZXh0KGNvcmVGcmFtZSkpIHsKLSAgICAgICAgTlNWaWV3IDxXZWJEb2N1bWVudFZpZXc+ICpk
b2N1bWVudFZpZXcgPSBbW2tpdChmcmFtZSkgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOwotICAg
ICAgICBpZiAoW2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11d
KQotICAgICAgICAgICAgWyhXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldyBfcmVzdW1lTnVsbEV2
ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2luc107Ci0gICAgfQotfQotCi0tICh2b2lkKV9yZWN1cnNp
dmVfcGF1c2VOdWxsRXZlbnRzRm9yQWxsTmV0c2NhcGVQbHVnaW5zCi17Ci0gICAgYXV0byBjb3Jl
RnJhbWUgPSBjb3JlKHNlbGYpOwotICAgIGZvciAoYXV0byogZnJhbWUgPSBjb3JlRnJhbWU7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KGNvcmVGcmFtZSkpIHsKLSAg
ICAgICAgTlNWaWV3IDxXZWJEb2N1bWVudFZpZXc+ICpkb2N1bWVudFZpZXcgPSBbW2tpdChmcmFt
ZSkgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOwotICAgICAgICBpZiAoW2RvY3VtZW50VmlldyBp
c0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQotICAgICAgICAgICAgWyhXZWJIVE1M
VmlldyAqKWRvY3VtZW50VmlldyBfcGF1c2VOdWxsRXZlbnRzRm9yQWxsTmV0c2NhcGVQbHVnaW5z
XTsKLSAgICB9Ci19Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKIC0gKHZv
aWQpc2V0VGltZW91dHNQYXVzZWQ6KEJPT0wpZmxhZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViRnJhbWVQcml2YXRlLmgKaW5kZXggMGNkZDI4ZWZlMjk4Y2Q3NGM1
MWQwNWM3NjlhMzNhNDkxYThhNmIyYS4uNzI2ZjA3OTFmNjA4NjYwNGU2NTZiNDM3MTkwZjM4Yjkw
ZjE4OGRkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJG
cmFtZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZy
YW1lUHJpdmF0ZS5oCkBAIC0yOSwxMiArMjksNiBAQAogI2ltcG9ydCA8V2ViS2l0TGVnYWN5L1dl
YkZyYW1lLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KIAotI2lmICFUQVJH
RVRfT1NfSVBIT05FCi0jaWYgIWRlZmluZWQoRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkpCi0j
ZGVmaW5lIEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJIDAKLSNlbmRpZgotI2VuZGlmCi0KICNp
ZiBUQVJHRVRfT1NfSVBIT05FCiAjaW1wb3J0IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgogI2ltcG9y
dCA8V2ViS2l0TGVnYWN5L1dBS0FwcEtpdFN0dWJzLmg+CkBAIC0yMTEsMTMgKzIwNSw2IEBAIHR5
cGVkZWYgZW51bSB7CiAKIC0gKHVuc2lnbmVkKV9wZW5kaW5nRnJhbWVVbmxvYWRFdmVudENvdW50
OwogCi0jaWYgIVRBUkdFVF9PU19JUEhPTkUKLSNpZiBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQ
SQotLSAodm9pZClfcmVjdXJzaXZlX3Jlc3VtZU51bGxFdmVudHNGb3JBbGxOZXRzY2FwZVBsdWdp
bnM7Ci0tICh2b2lkKV9yZWN1cnNpdmVfcGF1c2VOdWxsRXZlbnRzRm9yQWxsTmV0c2NhcGVQbHVn
aW5zOwotI2VuZGlmCi0jZW5kaWYKLQogLSAoTlNTdHJpbmcgKilfc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdEZyb21TdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHdpdGhHbG9iYWxPYmplY3Q6
KEpTT2JqZWN0UmVmKWdsb2JhbE9iamVjdCBpblNjcmlwdFdvcmxkOihXZWJTY3JpcHRXb3JsZCAq
KXdvcmxkOwogLSAoSlNHbG9iYWxDb250ZXh0UmVmKV9nbG9iYWxDb250ZXh0Rm9yU2NyaXB0V29y
bGQ6KFdlYlNjcmlwdFdvcmxkICopd29ybGQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCmluZGV4IGMxNzY1Y2ZiNGU2NjVjOGVhNzg3NWM3YWNk
NDVlNDllMWE1MzE4MjYuLjgzOGU0MTMzODFhODA3NWEzZDYyNDU5NDU1MjY3YTViYmI1NWE5OTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcu
bW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQpA
QCAtNjEsNyArNjEsNiBAQAogI2ltcG9ydCAiV2ViTlNQcmludE9wZXJhdGlvbkV4dHJhcy5oIgog
I2ltcG9ydCAiV2ViTlNVUkxFeHRyYXMuaCIKICNpbXBvcnQgIldlYk5TVmlld0V4dHJhcy5oIgot
I2ltcG9ydCAiV2ViTmV0c2NhcGVQbHVnaW5WaWV3LmgiCiAjaW1wb3J0ICJXZWJOb2RlSGlnaGxp
Z2h0LmgiCiAjaW1wb3J0ICJXZWJQbHVnaW5Db250cm9sbGVyLmgiCiAjaW1wb3J0ICJXZWJQcmVm
ZXJlbmNlcy5oIgpAQCAtNjk1LDEyICs2OTQsNiBAQCBzdGF0aWMgYm9vbCBuZWVkc0N1cnNvclJl
Y3RzU3VwcG9ydEF0UG9pbnQoTlNXaW5kb3cqIHdpbmRvdywgTlNQb2ludCBwb2ludCkKICAgICBp
ZiAoW3ZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgLy8gTmVp
dGhlciBkbyBOUEFQSSBwbHVnLWlucy4KLSAgICBpZiAoW3ZpZXcgaXNLaW5kT2ZDbGFzczpbV2Vi
QmFzZU5ldHNjYXBlUGx1Z2luVmlldyBjbGFzc11dKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0j
ZW5kaWYKLQogICAgIC8vIE5vbi1XZWIgY29udGVudCwgV2ViUERGVmlldywgYW5kIFdlYktpdCBw
bHVnLWlucyB1c2Ugbm9ybWFsIGN1cnNvciBoYW5kbGluZy4KICAgICByZXR1cm4gdHJ1ZTsKIH0K
QEAgLTg0OSw5ICs4NDIsNiBAQCBzdGF0aWMgdm9pZCBoYXJkd2FyZUtleWJvYXJkQXZhaWxhYmls
aXR5Q2hhbmdlZENhbGxiYWNrKENGTm90aWZpY2F0aW9uQ2VudGVyUmVmLAogLSAodm9pZClfd2Vi
X3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZUFuZEFkanVzdFZpZXdTaXplOwogLSAodm9pZClfd2Vi
X2NsZWFyUHJpbnRpbmdNb2RlUmVjdXJzaXZlOwogI2VuZGlmCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0tICh2b2lkKV93ZWJfbWFrZVBsdWdpblN1YnZpZXdzUGVyZm9ybVNlbGVj
dG9yOihTRUwpc2VsZWN0b3Igd2l0aE9iamVjdDooaWQpb2JqZWN0OwotI2VuZGlmCiBAZW5kCiAK
ICNpZiBQTEFURk9STShNQUMpCkBAIC0xNDIzLDIxICsxNDEzLDYgQEAgQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfRU5ECiAKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotLSAodm9pZClfd2ViX21ha2VQbHVnaW5TdWJ2aWV3
c1BlcmZvcm1TZWxlY3RvcjooU0VMKXNlbGVjdG9yIHdpdGhPYmplY3Q6KGlkKW9iamVjdAotewot
ICAgIC8vIENvcHkgc3Vidmlld3MgYmVjYXVzZSBbc2VsZiBzdWJ2aWV3c10gcmV0dXJucyB0aGUg
dmlldydzIG11dGFibGUgaW50ZXJuYWwgYXJyYXksCi0gICAgLy8gYW5kIHdlIG11c3QgYXZvaWQg
bXV0YXRpbmcgdGhlIGFycmF5IHdoaWxlIGVudW1lcmF0aW5nIGl0LgotICAgIGF1dG8gc3Vidmll
d3NDb3B5ID0gYWRvcHROUyhbc2VsZi5zdWJ2aWV3cyBjb3B5XSk7Ci0gICAgZm9yIChOU1ZpZXcg
KnZpZXcgaW4gc3Vidmlld3NDb3B5LmdldCgpKSB7Ci0gICAgICAgIGlmIChbdmlldyBpc0tpbmRP
ZkNsYXNzOltXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3IGNsYXNzXV0pCi0gICAgICAgICAgICBb
dmlldyBwZXJmb3JtU2VsZWN0b3I6c2VsZWN0b3Igd2l0aE9iamVjdDpvYmplY3RdOwotICAgIH0K
LX0KLQotI2VuZGlmCi0KIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3IChXZWJQ
cml2YXRlKQpAQCAtMjM2NSwyMCArMjM0MCw2IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJ
T05TX0VORAogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpIAotCi0tICh2b2lkKV9wYXVzZU51bGxFdmVudHNGb3JBbGxOZXRzY2FwZVBs
dWdpbnMgCi17Ci0gICAgW3NlbGYgX3dlYl9tYWtlUGx1Z2luU3Vidmlld3NQZXJmb3JtU2VsZWN0
b3I6QHNlbGVjdG9yKHN0b3BUaW1lcnMpIHdpdGhPYmplY3Q6bmlsXTsKLX0KLQotLSAodm9pZClf
cmVzdW1lTnVsbEV2ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2lucwotewotICAgIFtzZWxmIF93ZWJf
bWFrZVBsdWdpblN1YnZpZXdzUGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihyZXN0YXJ0VGltZXJz
KSB3aXRoT2JqZWN0Om5pbF07Ci19Ci0KLSNlbmRpZiAKLQogLSAoQk9PTClfaXNVc2luZ0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcKIHsKICAgICByZXR1cm4gX3ByaXZhdGUtPmxheWVySG9zdGluZ1Zp
ZXcgIT0gbmlsOwpAQCAtMzI1MCwxNiArMzIxMSwxMCBAQCBJR05PUkVfV0FSTklOR1NfRU5ECiAK
IC0gKHZvaWQpdmlld1dpbGxNb3ZlVG9Ib3N0V2luZG93OihOU1dpbmRvdyAqKWhvc3RXaW5kb3cK
IHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBbc2VsZiBfd2ViX21ha2VQ
bHVnaW5TdWJ2aWV3c1BlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3Iodmlld1dpbGxNb3ZlVG9Ib3N0
V2luZG93Oikgd2l0aE9iamVjdDpob3N0V2luZG93XTsKLSNlbmRpZgogfQogCiAtICh2b2lkKXZp
ZXdEaWRNb3ZlVG9Ib3N0V2luZG93CiB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0gICAgW3NlbGYgX3dlYl9tYWtlUGx1Z2luU3Vidmlld3NQZXJmb3JtU2VsZWN0b3I6QHNlbGVj
dG9yKHZpZXdEaWRNb3ZlVG9Ib3N0V2luZG93KSB3aXRoT2JqZWN0Om5pbF07Ci0jZW5kaWYKIH0K
IAogLSAodm9pZClhZGRTdWJ2aWV3OihOU1ZpZXcgKil2aWV3CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3UHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlld1ByaXZhdGUuaAppbmRleCBiNzU4NjJm
YTA1NGUwZWM3MmVhZDVlNGYxNGZkZTZkZGNlODAwYmM0Li5lNjg2NDk4ZWM2OGQzNTk3MTMyYTA3
NWI4ZGZkY2M5MGE5Y2IzMzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkhUTUxWaWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViSFRNTFZpZXdQcml2YXRlLmgKQEAgLTI4LDEyICsyOCw2IEBACiAKICNpbXBv
cnQgPFdlYktpdExlZ2FjeS9XZWJIVE1MVmlldy5oPgogCi0jaWYgIVRBUkdFVF9PU19JUEhPTkUK
LSNpZiAhZGVmaW5lZChFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQSSkKLSNkZWZpbmUgRU5BQkxF
X05FVFNDQVBFX1BMVUdJTl9BUEkgMAotI2VuZGlmCi0jZW5kaWYKLQogQGNsYXNzIERPTURvY3Vt
ZW50RnJhZ21lbnQ7CiBAY2xhc3MgRE9NTm9kZTsKIEBjbGFzcyBET01SYW5nZTsKQEAgLTExMywx
MSArMTA3LDYgQEAgZXh0ZXJuIGNvbnN0IGZsb2F0IF9XZWJIVE1MVmlld1ByaW50aW5nTWF4aW11
bVNocmlua0ZhY3RvcjsKIAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEVOQUJMRV9ORVRTQ0FQRV9Q
TFVHSU5fQVBJKSAmJiBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQSQotLSAodm9pZClfcmVzdW1l
TnVsbEV2ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2luczsKLS0gKHZvaWQpX3BhdXNlTnVsbEV2ZW50
c0ZvckFsbE5ldHNjYXBlUGx1Z2luczsKLSNlbmRpZgotCiAtIChCT09MKV9pc1VzaW5nQWNjZWxl
cmF0ZWRDb21wb3NpdGluZzsKIC0gKE5TVmlldyAqKV9jb21wb3NpdGluZ0xheWVyc0hvc3RpbmdW
aWV3OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXgg
MDAyYTIzY2I2YmQ4OTE4YmVkOThhODUxYzQ2MzZmZmIyMWM5ZmRjOC4uYWJhMTA0MTNjZDg3ODli
N2RhMzNhYzk2M2NiODBlMzEwMjJlMzg2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQpAQCAtNDMsNyArNDMsNiBAQAogI2ltcG9ydCAiV2ViQXBwbGljYXRp
b25DYWNoZUludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJBcmNoaXZlLmgiCiAjaW1wb3J0ICJXZWJC
YWNrRm9yd2FyZExpc3RJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViQmFzZU5ldHNjYXBlUGx1Z2lu
Vmlldy5oIgogI2ltcG9ydCAiV2ViQnJvYWRjYXN0Q2hhbm5lbFJlZ2lzdHJ5LmgiCiAjaW1wb3J0
ICJXZWJDYWNoZS5oIgogI2ltcG9ydCAiV2ViQ2hyb21lQ2xpZW50LmgiCg==
</data>
<flag name="commit-queue"
          id="467342"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442769</attachid>
            <date>2021-10-28 17:59:35 -0700</date>
            <delta_ts>2021-10-28 21:20:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232462-20211028175933.patch</filename>
            <type>text/plain</type>
            <size>1655786</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1MDEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDZhOTAxZjkxMDVjZjhiN2E0Y2RhNzk2
YzYxM2E4MzE1NDk4ODVmNzIuLjZhNzMzMDQzM2I3NzIxMzMxZjFjMWE0NDExNzFkYWVlYTJiZjA2
NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMTAtMjggIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgY29kZSBpbnNpZGUgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzI0NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJdCBpcyBub3QgdXNlZCBhbnl3aGVyZSBzaW5jZSBodHRwczovL3Ry
YWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjg1MDAzL3dlYmtpdAorCisgICAgICAgICogd3RmL1Bs
YXRmb3JtRW5hYmxlLmg6CisgICAgICAgICogd3RmL1BsYXRmb3JtRW5hYmxlQ29jb2EuaDoKKwog
MjAyMS0xMC0yOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIERpc2FibGUgTkVUU0NBUEVfUExVR0lOX0FQSSBhdCBidWlsZCB0aW1lIG9uIG1h
Y09TIGFuZCBXaW5kb3dzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDc2OGUwN2E0MDMxYTYzYmM2YjkxZmU4MjU5
OWY5NDE2OWNlYTI1YS4uYjRlNzcxZjAzYTQ3OWI4MTQ2OTQ4YTMzZGY4ZmZiMzUyMjYwZGI4ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDIxLTEwLTI4ICBBbGV4IENocmlzdGVuc2Vu
ICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIGNvZGUgaW5zaWRl
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNDYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMu
dHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENvbnRyb2xsZXI6OlNjcmlwdENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1NjcmlwdE5QT2JqZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgICogYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRy
b2xsZXI6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KToKKyAgICAgICAgKiBicmlkZ2Uv
TlBfanNvYmplY3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9OUF9qc29iamVjdC5o
OiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9jL0NSdW50aW1lT2JqZWN0LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBicmlkZ2UvYy9DUnVudGltZU9iamVjdC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGJyaWRnZS9jL2NfY2xhc3MuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9jL2Nf
Y2xhc3MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBicmlkZ2UvYy9jX2luc3RhbmNlLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBicmlkZ2UvYy9jX2luc3RhbmNlLmg6IFJlbW92ZWQuCisgICAgICAg
ICogYnJpZGdlL2MvY19ydW50aW1lLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBicmlkZ2UvYy9j
X3J1bnRpbWUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBicmlkZ2UvYy9jX3V0aWxpdHkuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9jL2NfdXRpbGl0eS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGJyaWRnZS9ucHJ1bnRpbWUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9ucHJ1
bnRpbWVfaW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9ucHJ1bnRpbWVfaW50ZXJu
YWwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBicmlkZ2UvbnBydW50aW1lX3ByaXYuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcDoKKyAgICAgICAgKiBwYWdl
L0ZyYW1lLmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL25wYXBpLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGx1Z2lucy9ucGZ1bmN0aW9ucy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsdWdpbnMvbnBy
dW50aW1lLmg6IFJlbW92ZWQuCisgICAgICAgICogcGx1Z2lucy9ucHR5cGVzLmg6IFJlbW92ZWQu
CisKIDIwMjEtMTAtMjggIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4K
IAogICAgICAgICBUaGUgc3BhY2UgZ2x5cGggaW4gdGhlIEZpbGljdWRpIGZvbnQgaXMgbm90IHN1
YnN0aXR1dGVkIGJ5IHNoYXBpbmcgaW4gdGhlIGNvbXBsZXggdGV4dCBjb2RlcGF0aCwgdGhlcmVi
eSBicmVha2luZyB0aGUgdmlzdWFsIGVmZmVjdCBvZiB0aGUgZm9udApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAxZThj
NGE2YzRiNmY5OWFmMjVjOWRjMjk1ZmRjZThjZWM0MmRiOTA2Li4zZDFmODlmZjZhOWU0MzcxZGYz
ODBlMTJjYzljYzA5OWIwYjJhZTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2NyBAQAorMjAyMS0x
MC0yOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAg
ICAgIFJlbW92ZSBjb2RlIGluc2lkZSBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjQ2MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ29uZmlndXJhdGlv
bnMvUGx1Z2luU2VydmljZS54Y2NvbmZpZzoKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9XZWJL
aXQueGNjb25maWc6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlLmNwcDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6cmVtb3ZlRGF0YVJlY29yZHMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNob3VsZFJlbW92ZURhdGFSZWNvcmRzIGNvbnN0KToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjptb25pdG9yZWREYXRhVHlwZXMpOgorICAgICAgICAqIFBsYXRmb3Jt
TWFjLmNtYWtlOgorICAgICAgICAqIFBsdWdpblByb2Nlc3MvRW50cnlQb2ludC9Db2NvYS9YUENT
ZXJ2aWNlL1BsdWdpblNlcnZpY2UuSW5mby5wbGlzdDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVn
aW5Qcm9jZXNzL0VudHJ5UG9pbnQvQ29jb2EvWFBDU2VydmljZS9QbHVnaW5TZXJ2aWNlRW50cnlQ
b2ludC5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xs
ZXJQcm94eS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250
cm9sbGVyUHJveHkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNv
bnRyb2xsZXJQcm94eS5tZXNzYWdlcy5pbjogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5Qcm9j
ZXNzL1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogUGx1
Z2luUHJvY2Vzcy9QbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBQbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFBs
dWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5oOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpblBy
b2Nlc3MvUGx1Z2luUHJvY2Vzcy5tZXNzYWdlcy5pbjogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVn
aW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBQ
bHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICog
UGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbjogUmVtb3ZlZC4K
KyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Db250cm9sbGVyUHJveHlNYWMubW06
IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc01hYy5t
bTogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9jZXNzU2hp
bS5oOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpblByb2Nlc3MvbWFjL1BsdWdpblByb2Nlc3NT
aGltLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpblByb2Nlc3MvbWFjL2NvbS5hcHBsZS5X
ZWJLaXQucGx1Z2luLWNvbW1vbi5zYi5pbjogUmVtb3ZlZC4KKyAgICAgICAgKiBSZXNvdXJjZXMv
UGx1Z0luU2FuZGJveFByb2ZpbGVzL2NuLm1pY3JvZG9uZS5jbWIuc2FmYXJpLnNiOiBSZW1vdmVk
LgorICAgICAgICAqIFJlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmFwcGxlLkJv
Y29tU3VibWl0Q3RybC5zYjogUmVtb3ZlZC4KKyAgICAgICAgKiBSZXNvdXJjZXMvUGx1Z0luU2Fu
ZGJveFByb2ZpbGVzL2NvbS5hcHBsZS5OUFNhZmVJbnB1dC5zYjogUmVtb3ZlZC4KKyAgICAgICAg
KiBSZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5hcHBsZS5OUFNhZmVTdWJtaXQu
c2I6IFJlbW92ZWQuCisgICAgICAgICogUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9j
b20uYXBwbGUuUXVpY2tUaW1lIFBsdWdpbi5wbHVnaW4uc2I6IFJlbW92ZWQuCisgICAgICAgICog
UmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uYXBwbGUuYXBwc3RvcmUuQ29kZVJl
ZGVlbWVyTmV0c2NhcGVQbHVnaW4uc2I6IFJlbW92ZWQuCisgICAgICAgICogUmVzb3VyY2VzL1Bs
dWdJblNhbmRib3hQcm9maWxlcy9jb20uYXBwbGUuaXN0LmRzLmFwcGxlY29ubmVjdC53ZWJwbHVn
aW4uc2I6IFJlbW92ZWQuCisgICAgICAgICogUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxl
cy9jb20uY2ZjYS5ucFNlY0VkaXRDdGwuTUFDLkJPQy5wbHVnaW4uc2I6IFJlbW92ZWQuCisgICAg
ICAgICogUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uY2lzY28ud2ViZXgucGx1
Z2luLmdwYzY0LnNiOiBSZW1vdmVkLgorICAgICAgICAqIFJlc291cmNlcy9QbHVnSW5TYW5kYm94
UHJvZmlsZXMvY29tLmNtYmNoaW5hLkNNQlNlY3VyaXR5LnNiOiBSZW1vdmVkLgorICAgICAgICAq
IFJlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmZ0c2FmZS5OUEFQSS1Db3JlLVNh
ZmUtU29mdEtleWJhb3JkLnBsdWdpbi5yZmMxMDM0aWRlbnRpZmllci5zYjogUmVtb3ZlZC4KKyAg
ICAgICAgKiBSZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5nb29nbGUuZ29vZ2xl
dGFsa2Jyb3dzZXJwbHVnaW4uc2I6IFJlbW92ZWQuCisgICAgICAgICogUmVzb3VyY2VzL1BsdWdJ
blNhbmRib3hQcm9maWxlcy9jb20uZ29vZ2xlLm8xZGJyb3dzZXJwbHVnaW4uc2I6IFJlbW92ZWQu
CisgICAgICAgICogUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20ubWFjcm9tZWRp
YS5GbGFzaCBQbGF5ZXIgRVNSLnBsdWdpbi5zYjogUmVtb3ZlZC4KKyAgICAgICAgKiBSZXNvdXJj
ZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5tYWNyb21lZGlhLkZsYXNoIFBsYXllci5wbHVn
aW4uc2I6IFJlbW92ZWQuCisgICAgICAgICogUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxl
cy9jb20ubWljcm9zb2Z0LlNpbHZlcmxpZ2h0UGx1Z2luLnNiOiBSZW1vdmVkLgorICAgICAgICAq
IFJlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLm9yYWNsZS5qYXZhLkphdmFBcHBs
ZXRQbHVnaW4uc2I6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL0FQSS9jL1dLUGx1Z2luSW5m
b3JtYXRpb24uY3BwOgorICAgICAgICAoV0tQbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZUlkZW50aWZp
ZXJLZXkpOgorICAgICAgICAoV0tQbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZVZlcnNpb25LZXkpOgor
ICAgICAgICAoV0tQbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZVNob3J0VmVyc2lvbktleSk6CisgICAg
ICAgIChXS1BsdWdpbkluZm9ybWF0aW9uUGF0aEtleSk6CisgICAgICAgIChXS1BsdWdpbkluZm9y
bWF0aW9uRGlzcGxheU5hbWVLZXkpOgorICAgICAgICAoV0tQbHVnaW5JbmZvcm1hdGlvbkRlZmF1
bHRMb2FkUG9saWN5S2V5KToKKyAgICAgICAgKFdLUGx1Z2luSW5mb3JtYXRpb25VcGRhdGVQYXN0
TGFzdEJsb2NrZWRWZXJzaW9uSXNLbm93bkF2YWlsYWJsZUtleSk6CisgICAgICAgIChXS1BsdWdp
bkluZm9ybWF0aW9uSGFzU2FuZGJveFByb2ZpbGVLZXkpOgorICAgICAgICAoV0tQbHVnaW5JbmZv
cm1hdGlvbkZyYW1lVVJMS2V5KToKKyAgICAgICAgKFdLUGx1Z2luSW5mb3JtYXRpb25NSU1FVHlw
ZUtleSk6CisgICAgICAgIChXS1BsdWdpbkluZm9ybWF0aW9uUGFnZVVSTEtleSk6CisgICAgICAg
IChXS1BsdWdpbkluZm9ybWF0aW9uUGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkxLZXkpOgorICAgICAg
ICAoV0tQbHVnaW5JbmZvcm1hdGlvblBsdWdpblVSTEtleSk6CisgICAgICAgIChXS1BsdWdJbklu
Zm9ybWF0aW9uUmVwbGFjZW1lbnRPYnNjdXJlZEtleSk6CisgICAgICAgICogU2hhcmVkL1BsdWdp
bnMvTlBJZGVudGlmaWVyRGF0YS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL1BsdWdp
bnMvTlBJZGVudGlmaWVyRGF0YS5oOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9QbHVnaW5z
L05QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQv
UGx1Z2lucy9OUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5oOiBSZW1vdmVkLgorICAgICAgICAqIFNo
YXJlZC9QbHVnaW5zL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLm1lc3NhZ2VzLmluOiBSZW1vdmVk
LgorICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL05QT2JqZWN0UHJveHkuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL05QT2JqZWN0UHJveHkuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBTaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogU2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBTaGFyZWQvUGx1Z2lucy9OUFZhcmlhbnREYXRhLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBTaGFyZWQvUGx1Z2lucy9OUFZhcmlhbnREYXRhLmg6IFJlbW92ZWQuCisgICAgICAgICogU2hh
cmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5Nb2R1bGUuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luTW9kdWxlLmg6
IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvUGx1Z2luSW5mb3Jt
YXRpb24uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL1Bs
dWdpbkluZm9ybWF0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL1BsdWdpbnMvTmV0
c2NhcGUvbWFjL05ldHNjYXBlUGx1Z2luTW9kdWxlTWFjLm1tOiBSZW1vdmVkLgorICAgICAgICAq
IFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL21hYy9QbHVnaW5JbmZvcm1hdGlvbk1hYy5tbTogUmVt
b3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9QbHVnaW5Nb2R1bGVJbmZvLmg6IFJlbW92
ZWQuCisgICAgICAgICogU2hhcmVkL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9QbHVnaW5Q
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL1Bs
dWdpbnMvUGx1Z2luUXVpcmtzLmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL1BsdWdpbnMv
bWFjL1BsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFNo
YXJlZC9QbHVnaW5zL21hYy9QbHVnaW5TYW5kYm94UHJvZmlsZS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIFNoYXJlZC9QbHVnaW5zL21hYy9QbHVnaW5TYW5kYm94UHJvZmlsZS5tbTogUmVtb3ZlZC4K
KyAgICAgICAgKiBTaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAg
ICAqIFNoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGE6Om93bmVyUHJvY2Vzcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhOjppc29sYXRlZENvcHkgY29uc3QpOgorICAg
ICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YS5oOgorICAgICAgICAqIFNoYXJl
ZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUuaDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJ
TG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uQ2xp
ZW50Lmg6CisgICAgICAgIChBUEk6Ok5hdmlnYXRpb25DbGllbnQ6OmNvbnRlbnRSdWxlTGlzdE5v
dGlmaWNhdGlvbik6CisgICAgICAgIChBUEk6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZEZhaWxUb0lu
aXRpYWxpemVQbHVnSW4pOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpOYXZpZ2F0aW9uQ2xpZW50
OjpkaWRCbG9ja0luc2VjdXJlUGx1Z2luVmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChBUEk6
Ok5hdmlnYXRpb25DbGllbnQ6OmRlY2lkZVBvbGljeUZvclBsdWdpbkxvYWQpOiBEZWxldGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVUlDbGllbnQuaDoKKyAgICAgICAgKEFQSTo6VUlD
bGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6
OnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oOgorICAgICAgICAoV2ViS2l0Ojp0b1dLUGx1Z2luTG9h
ZFBvbGljeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OnRvV0tQbHVnaW5Mb2FkQ2xpZW50
UG9saWN5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6dG9QbHVnaW5Nb2R1bGVMb2FkUG9s
aWN5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6dG9QbHVnaW5Mb2FkQ2xpZW50UG9saWN5
KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcDoKKyAg
ICAgICAgKFdLQ29udGV4dFNldEFkZGl0aW9uYWxQbHVnaW5zRGlyZWN0b3J5KToKKyAgICAgICAg
KFdLQ29udGV4dFJlZnJlc2hQbHVnSW5zKToKKyAgICAgICAgKFdLQ29udGV4dEFkZFN1cHBvcnRl
ZFBsdWdpbik6CisgICAgICAgIChXS0NvbnRleHRDbGVhclN1cHBvcnRlZFBsdWdpbnMpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgorICAgICAgICAoV0tQYWdlU2V0UGFn
ZVVJQ2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHA6
CisgICAgICAgIChXS1ByZWZlcmVuY2VzU2V0UGx1Z2luU2FuZGJveFByb2ZpbGVzRW5hYmxlZEZv
ckFsbFBsdWdpbnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9tYWMvV0tDb250ZXh0UHJp
dmF0ZU1hYy5tbToKKyAgICAgICAgKFdLQ29udGV4dENvcHlQbHVnSW5JbmZvRm9yQnVuZGxlSWRl
bnRpZmllcik6CisgICAgICAgIChXS0NvbnRleHRHZXRJbmZvRm9ySW5zdGFsbGVkUGx1Z0lucyk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1tOgorICAgICAg
ICAoLVtXS1ByZWZlcmVuY2VzIF9zZXRFeHBlcmltZW50YWxQbHVnSW5TYW5kYm94UHJvZmlsZXNF
bmFibGVkOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5t
bToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfcGx1Z2luUHJvY2Vzc0NvdW50XSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhUmVjb3JkSW50ZXJuYWwuaDoK
KyAgICAgICAgKFdlYktpdDo6dG9XZWJzaXRlRGF0YVR5cGUpOgorICAgICAgICAoV2ViS2l0Ojp0
b1dLV2Vic2l0ZURhdGFUeXBlcyk6CisgICAgICAgICogVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nl
c3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkF1eGlsaWFyeVByb2Nlc3NQcm94eTo6Z2V0
TGF1bmNoT3B0aW9ucyk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbToKKyAgICAgICAgKFdlYktp
dDo6dG9XS1BsdWdJblVuYXZhaWxhYmlsaXR5UmVhc29uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tl
ZCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29j
b2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3Vw
cHJlc3Npb25TdGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmg6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpwbHVnaW5Db21wbGV4VGV4dElucHV0U3Rh
dGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1w
bC5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRpc2FibGVDb21wbGV4VGV4dElu
cHV0SWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aGFuZGxlUGx1
Z2luQ29tcGxleFRleHRJbnB1dEtleURvd24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6dHJ5SGFuZGxlUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6dHJ5UG9zdFByb2Nlc3NQbHVnaW5Db21wbGV4VGV4dElucHV0S2V5
RG93bik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRQbHVnaW5Db21wbGV4VGV4
dElucHV0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0
UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlQW5kSWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9MYXVuY2hlci9tYWMvUHJvY2Vzc0xhdW5jaGVyTWFjLm1tOgorICAgICAgICAoV2Vi
S2l0OjpzZXJ2aWNlTmFtZSk6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5oOiBSZW1vdmVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NNYW5hZ2VyLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzTWFuYWdlci5o
OiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94
eS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vz
c1Byb3h5Lmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJv
Y2Vzc1Byb3h5Lm1lc3NhZ2VzLmluOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9QbHVn
aW5zL21hYy9QbHVnaW5JbmZvU3RvcmVNYWMubW06IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL1BsdWdpbnMvbWFjL1BsdWdpblByb2Nlc3NNYW5hZ2VyTWFjLm1tOiBSZW1vdmVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL21hYy9QbHVnaW5Qcm9jZXNzUHJveHlNYWMubW06IFJl
bW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y2FuU2hvd01JTUVUeXBlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpmaW5kUGx1Z2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5Ojp1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZEZhaWxUb0luaXRpYWxpemVQbHVnaW4pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZEJsb2NrSW5zZWN1cmVQ
bHVnaW5WZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2VuZE1lbW9yeVByZXNzdXJlRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6YWRkU3VwcG9ydGVkUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OmNsZWFyU3VwcG9ydGVkUGx1Z2lucyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjpzZXRBZGRpdGlvbmFsUGx1Z2luc0RpcmVjdG9yeSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWZyZXNoUGx1Z2lucyk6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94
eTo6Z2V0UGx1Z2lucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94
eTo6Z2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRl
RGF0YVJlY29yZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhUmVjb3JkOjp0b3BQ
cml2YXRlbHlDb250cm9sbGVkRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFS
ZWNvcmQ6Omlzb2xhdGVkQ29weSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
UmVjb3JkOjphZGRQbHVnaW5EYXRhSG9zdE5hbWUpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVJlY29yZC5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6cGx1Z2lucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBh
Z2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRQbHVnaW5D
b21wbGV4VGV4dElucHV0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMv
UGFnZUNsaWVudEltcGxNYWMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJ
bXBsTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2V0UGx1Z2luQ29t
cGxleFRleHRJbnB1dFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dl
YlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRQbHVn
aW5Db21wbGV4VGV4dElucHV0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIFdlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9KU05QTWV0aG9kLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5oOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oOiBSZW1vdmVkLgorICAgICAgICAq
IFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5oOiBSZW1vdmVk
LgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RN
YXAuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
UFJ1bnRpbWVPYmplY3RNYXAuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvTlBSdW50aW1lVXRpbGl0aWVzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lVXRpbGl0aWVzLmg6IFJlbW92ZWQu
CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlQnJvd3NlckZ1
bmNzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TmV0c2NhcGVCcm93c2VyRnVuY3MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFdl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5oOiBSZW1vdmVkLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpblN0cmVhbS5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNj
YXBlUGx1Z2luU3RyZWFtLmg6IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5z
L05ldHNjYXBlL21hYy9OZXRzY2FwZVBsdWdpbk1hYy5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvbWFjL1BsdWdpblByb3h5TWFjLm1tOiBSZW1vdmVk
LgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Db250cm9sbGVyLmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rp
b24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW46IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5o
OiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29u
bmVjdGlvbk1hbmFnZXIubWVzc2FnZXMuaW46IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblByb3h5LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luUHJveHkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luUHJveHkubWVzc2FnZXMuaW46IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3
OjpTdHJlYW06OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3
OjpkZXN0cm95UGx1Z2luQW5kUmVzZXQpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojpk
aWRGYWlsVG9Jbml0aWFsaXplUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6
c2NyaXB0T2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6cGFnZU11dGVkU3Rh
dGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojp3aW5kb3dTY3JpcHRO
UE9iamVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OnBsdWdpbkVs
ZW1lbnROUE9iamVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OmV2
YWx1YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6c2V0UGx1Z2lu
SXNQbGF5aW5nQXVkaW8pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojpp
c011dGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6c2V0
Q29tcGxleFRleHRJbnB1dFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luVmlldy5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9XZWJQbHVn
aW5JbmZvUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5JbmZvUHJvdmlk
ZXI6OnJlZnJlc2hQbHVnaW5zKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luSW5mb1Byb3Zp
ZGVyOjpwbHVnaW5JbmZvKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luSW5mb1Byb3ZpZGVy
Ojpwb3B1bGF0ZVBsdWdpbkNhY2hlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1Bs
dWdpbnMvV2ViUGx1Z2luSW5mb1Byb3ZpZGVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJv
bWVDbGllbnQ6OnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZCBjb25zdCk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6Y3JlYXRlUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y2Fu
UGx1Z2luSGFuZGxlUmVzcG9uc2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OldlYlByb2Nlc3MpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFsaXplQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3M6OnJlZnJlc2hQbHVnaW5zKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzczo6cGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuaDoKKwogMjAyMS0xMC0yOCAgU2lodWkgTGl1ICA8c2lo
dWlfbGl1QGFwcGxlLmNvbT4KIAogICAgICAgICBSZWxlYXNlIEZpbGVTeXN0ZW1TdG9yYWdlSGFu
ZGxlIHdoZW4gaXQgaXMgbm90IGluIHVzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwppbmRleCBjNzZiMDUw
NGZkMmQzNDIwMjhmYTI4ZjM5ZDBlNzhmOWMyZDg1YTRhLi4xODAwYTk1NDMxN2QwYTFhNDhiYThi
NTBlNDgxOTJkNjliYjYyZGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDIxLTEwLTI4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmVtb3ZlIGNvZGUgaW5zaWRlIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNDYy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0
Zm9ybU1hYy5jbWFrZToKKyAgICAgICAgKiBXZWJLaXRMZWdhY3kueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKwogMjAyMS0xMC0yMiAgSWFuIEFuZGVyc29uICA8aWFuYUBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRkIGEgbW9kdWxlIG1hcCBmaWxlIGZvciBQcml2YXRlRnJhbWV3b3Jrcy9XZWJL
aXRMZWdhY3kKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCAyMWVhMTMwNjkwNDYxM2I0
NGFhNTgzYmRjNGU1MjJhMzY0YTNjMjQ0Li42ZTE5MzVkMzZjZDZiZTY2Yzk5MDZhNmZhNTljZjI0
ODUwNzJkNTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAK
KzIwMjEtMTAtMjggIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZW1vdmUgY29kZSBpbnNpZGUgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI0NjIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsdWdp
bnMvSG9zdGVkL0hvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtLmg6IFJlbW92ZWQuCisgICAgICAg
ICogUGx1Z2lucy9Ib3N0ZWQvSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW06IFJlbW92ZWQu
CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5oOiBS
ZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFn
ZXIubW06IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5I
b3N0UHJveHkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBs
dWdpbkhvc3RQcm94eS5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL0hv
c3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW06IFJlbW92ZWQuCisgICAgICAgICog
UGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdp
bnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW06IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9I
b3N0ZWQvUHJveHlSdW50aW1lT2JqZWN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9I
b3N0ZWQvUHJveHlSdW50aW1lT2JqZWN0Lm1tOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMv
SG9zdGVkL1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5oOiBSZW1vdmVkLgorICAgICAgICAq
IFBsdWdpbnMvSG9zdGVkL1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbTogUmVtb3ZlZC4K
KyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5BZ2VudC5kZWZzOiBSZW1vdmVk
LgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkFnZW50UmVwbHkuZGVmczog
UmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5DbGllbnQuZGVm
czogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5Ib3N0LmRl
ZnM6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luSG9zdFR5
cGVzLmRlZnM6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2lu
SG9zdFR5cGVzLmg6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvV2ViVGV4dElu
cHV0V2luZG93Q29udHJvbGxlci5oOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVk
L1dlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIubTogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVn
aW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVn
aW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW06IFJlbW92ZWQuCisgICAgICAgICogUGx1
Z2lucy9XZWJCYXNlUGx1Z2luUGFja2FnZS5oOgorICAgICAgICAqIFBsdWdpbnMvV2ViQmFzZVBs
dWdpblBhY2thZ2UubW06CisgICAgICAgICgrW1dlYkJhc2VQbHVnaW5QYWNrYWdlIHBsdWdpbldp
dGhQYXRoOl0pOgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRs
ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luRXZlbnRI
YW5kbGVyLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5F
dmVudEhhbmRsZXJDb2NvYS5oOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2Nh
cGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYS5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5z
L1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMv
V2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMv
V2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL1dl
Yk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5WaWV3Lmg6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9XZWJOZXRz
Y2FwZVBsdWdpblZpZXcubW06IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9XZWJQbHVnaW5D
b250cm9sbGVyLm1tOgorICAgICAgICAoLVtXZWJQbHVnaW5Db250cm9sbGVyIGRlc3Ryb3lQbHVn
aW46XSk6CisgICAgICAgICgtW1dlYlBsdWdpbkNvbnRyb2xsZXIgZGVzdHJveUFsbFBsdWdpbnNd
KToKKyAgICAgICAgKiBQbHVnaW5zL1dlYlBsdWdpbkRhdGFiYXNlLm1tOgorICAgICAgICAoUGx1
Z2luUGFja2FnZUNhbmRpZGF0ZXM6OnVwZGF0ZSk6CisgICAgICAgICgtW1dlYlBsdWdpbkRhdGFi
YXNlIHJlbW92ZVBsdWdpbkluc3RhbmNlVmlld3NGb3I6XSk6CisgICAgICAgICgtW1dlYlBsdWdp
bkRhdGFiYXNlIGRlc3Ryb3lBbGxQbHVnaW5JbnN0YW5jZVZpZXdzXSk6CisgICAgICAgICogUGx1
Z2lucy9XZWJQbHVnaW5SZXF1ZXN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9XZWJQ
bHVnaW5SZXF1ZXN0Lm06IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9ucGFwaS5tbTogUmVt
b3ZlZC4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06CisgICAg
ICAgIChXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVdpbmRvdyk6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW06CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNs
aWVudDo6ZGlzcGF0Y2hDcmVhdGVQYWdlKToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpjcmVhdGVQbHVnaW4pOgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnJlZGlyZWN0
RGF0YVRvUGx1Z2luKToKKyAgICAgICAgKE5ldHNjYXBlUGx1Z2luV2lkZ2V0OjpOZXRzY2FwZVBs
dWdpbldpZGdldCk6IERlbGV0ZWQuCisgICAgICAgIChOZXRzY2FwZVBsdWdpbldpZGdldDo6cGxh
dGZvcm1MYXllciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChOZXRzY2FwZVBsdWdpbldpZGdl
dDo6Z2V0Rm9ybVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKE5ldHNjYXBlUGx1Z2luV2lkZ2V0
OjpoYW5kbGVFdmVudCk6IERlbGV0ZWQuCisgICAgICAgIChOZXRzY2FwZVBsdWdpbldpZGdldDo6
Y2xpcFJlY3RDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKE5ldHNjYXBlUGx1Z2luV2lkZ2V0
Ojpub3RpZnlXaWRnZXQpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06
CisgICAgICAgICgtW1dlYkZyYW1lIF9yZWN1cnNpdmVfcmVzdW1lTnVsbEV2ZW50c0ZvckFsbE5l
dHNjYXBlUGx1Z2luc10pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVjdXJzaXZl
X3BhdXNlTnVsbEV2ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2luc10pOiBEZWxldGVkLgorICAgICAg
ICAqIFdlYlZpZXcvV2ViRnJhbWVQcml2YXRlLmg6CisgICAgICAgICogV2ViVmlldy9XZWJIVE1M
Vmlldy5tbToKKyAgICAgICAgKG5lZWRzQ3Vyc29yUmVjdHNTdXBwb3J0QXRQb2ludCk6CisgICAg
ICAgICgtW1dlYkhUTUxWaWV3IHZpZXdXaWxsTW92ZVRvSG9zdFdpbmRvdzpdKToKKyAgICAgICAg
KC1bV2ViSFRNTFZpZXcgdmlld0RpZE1vdmVUb0hvc3RXaW5kb3ddKToKKyAgICAgICAgKC1bV2Vi
SFRNTFZpZXcgX3dlYl9tYWtlUGx1Z2luU3Vidmlld3NQZXJmb3JtU2VsZWN0b3I6d2l0aE9iamVj
dDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3BhdXNlTnVsbEV2ZW50c0Zv
ckFsbE5ldHNjYXBlUGx1Z2luc10pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBf
cmVzdW1lTnVsbEV2ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2luc10pOiBEZWxldGVkLgorICAgICAg
ICAqIFdlYlZpZXcvV2ViSFRNTFZpZXdQcml2YXRlLmg6CisgICAgICAgICogV2ViVmlldy9XZWJW
aWV3Lm1tOgorCiAyMDIxLTEwLTI4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgRGlzYWJsZSBORVRTQ0FQRV9QTFVHSU5fQVBJIGF0IGJ1aWxk
IHRpbWUgb24gbWFjT1MgYW5kIFdpbmRvd3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtRW5hYmxlLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCmluZGV4IDY2
MmE4ZGE4YmFjYjRjZDQ5ZWZlM2ZmYThjZDE2MTMxOTc2NDJlNTEuLjdjYTRjYTExNjhkNTk4YTA3
OWZiMjdiNjBlYzFiZWNmZjQ3OWExNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtRW5hYmxlLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGUuaApAQCAtMzg3
LDEwICszODcsNiBAQAogI2RlZmluZSBFTkFCTEVfTU9VU0VfRk9SQ0VfRVZFTlRTIDEKICNlbmRp
ZgogCi0jaWYgIWRlZmluZWQoRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkpCi0jZGVmaW5lIEVO
QUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJIDAKLSNlbmRpZgotCiAjaWYgIWRlZmluZWQoRU5BQkxF
X05FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKICNkZWZpbmUgRU5BQkxFX05FVFNDQVBF
X1BMVUdJTl9NRVRBREFUQV9DQUNIRSAwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtRW5hYmxlQ29jb2EuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxl
Q29jb2EuaAppbmRleCBkMWRiMjIyMWIyNmE2ZWNmN2Q4YmI4YzkwMDk4NWU5YTE3NzYzOTA1Li42
YWIwM2E3YmFiMmQ3ZTE2YjJjMzM4NmQ3OWI3NDBjNmM0YjEzYjcwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZUNvY29hLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxh
dGZvcm1FbmFibGVDb2NvYS5oCkBAIC00MTgsMTAgKzQxOCw2IEBACiAjZGVmaW5lIEVOQUJMRV9O
QVZJR0FUT1JfU1RBTkRBTE9ORSAxCiAjZW5kaWYKIAotI2lmICFkZWZpbmVkKEVOQUJMRV9ORVRT
Q0FQRV9QTFVHSU5fQVBJKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKQotI2RlZmluZSBFTkFCTEVf
TkVUU0NBUEVfUExVR0lOX0FQSSAwCi0jZW5kaWYKLQogI2lmICFkZWZpbmVkKEVOQUJMRV9ORVRX
T1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKICNkZWZpbmUgRU5BQkxFX05FVFdP
UktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OIDEKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21h
a2UKaW5kZXggNzFhNmViYmU5MzhiZWE3Yzk2MGViYWJjNGFlNzY2NmY1OGVlNDQ5Zi4uMmFlZWY0
M2FlOTQ0ZGE1MDZjNmUwYzM2NWRmODY5YTRkYTg5YjM3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBA
IC0zMzAsMTYgKzMzMCwxMCBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJT
CiAKICAgICBicmlkZ2UvQnJpZGdlLmgKICAgICBicmlkZ2UvSWRlbnRpZmllclJlcC5oCi0gICAg
YnJpZGdlL05QX2pzb2JqZWN0LmgKLSAgICBicmlkZ2UvbnBydW50aW1lX2ltcGwuaAotICAgIGJy
aWRnZS9ucHJ1bnRpbWVfaW50ZXJuYWwuaAogICAgIGJyaWRnZS9ydW50aW1lX21ldGhvZC5oCiAg
ICAgYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmgKICAgICBicmlkZ2UvcnVudGltZV9yb290LmgKIAot
ICAgIGJyaWRnZS9jL2NfaW5zdGFuY2UuaAotICAgIGJyaWRnZS9jL2NfdXRpbGl0eS5oCi0KICAg
ICBicmlkZ2UvanNjL0JyaWRnZUpTQy5oCiAKICAgICBjb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5l
ZEZpbHRlcnNBbHBoYWJldC5oCkBAIC0xNTg1LDEwICsxNTc5LDYgQEAgc2V0KFdlYkNvcmVfUFJJ
VkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsdWdpbnMvUGx1Z2luRGF0YS5oCiAgICAgcGx1
Z2lucy9QbHVnaW5JbmZvUHJvdmlkZXIuaAogICAgIHBsdWdpbnMvUGx1Z2luVmlld0Jhc2UuaAot
ICAgIHBsdWdpbnMvbnBhcGkuaAotICAgIHBsdWdpbnMvbnBmdW5jdGlvbnMuaAotICAgIHBsdWdp
bnMvbnBydW50aW1lLmgKLSAgICBwbHVnaW5zL25wdHlwZXMuaAogCiAgICAgcmVuZGVyaW5nL0Jy
ZWFrTGluZXMuaAogICAgIHJlbmRlcmluZy9DbGlwUmVjdC5oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGVm
Mjc5NjgxNmQ1NTJjMWJjMTM1NzA0MThjMTVlMzQzMDcxNjQzODYuLjY2ODE4NWM5ODU5OWQwNTIz
ZjlkNzQ3MDk5MDE2NzlkOTg3YjlhYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC01OTYsMTQgKzU5Niw3
IEBAIGJpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKIGJpbmRpbmdz
L2pzL1dvcmtlck1vZHVsZVNjcmlwdExvYWRlci5jcHAKIGJpbmRpbmdzL2pzL1dpbmRvd1Byb3h5
LmNwcAogYnJpZGdlL0lkZW50aWZpZXJSZXAuY3BwCi1icmlkZ2UvTlBfanNvYmplY3QuY3BwCi1i
cmlkZ2UvYy9DUnVudGltZU9iamVjdC5jcHAKLWJyaWRnZS9jL2NfY2xhc3MuY3BwCi1icmlkZ2Uv
Yy9jX2luc3RhbmNlLmNwcAotYnJpZGdlL2MvY19ydW50aW1lLmNwcAotYnJpZGdlL2MvY191dGls
aXR5LmNwcAogYnJpZGdlL2pzYy9CcmlkZ2VKU0MuY3BwCi1icmlkZ2UvbnBydW50aW1lLmNwcAog
YnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCiBicmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCiBicmlk
Z2UvcnVudGltZV9vYmplY3QuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggODE5NTI5N2VhNmU1YmFmOTIyNTg3ZTZlNjc2YThk
MmMxMjNjOGQyOC4uNjUzNGNkZTZmNjI5ZDQyODA1M2I2ODgxNTA1YjY5MmE3OTk0MjliMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtNDc1LDcgKzQ3NSw2IEBACiAJCTFBMEQ1NzQxMEE1Qzc4NjcwMDdFREQ0QyAvKiBKU092ZXJm
bG93RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBMEQ1NzNGMEE1Qzc4NjcwMDdFREQ0QyAvKiBKU092ZXJmbG93RXZlbnQuaCAqLzsgfTsKIAkJ
MUExNDE0QjUxM0EwRjA1MDAwMTk5OTZDIC8qIFdlYktpdEZvbnRGYW1pbHlOYW1lcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTE0MTRCMzEzQTBG
MDUwMDAxOTk5NkMgLyogV2ViS2l0Rm9udEZhbWlseU5hbWVzLmNwcCAqLzsgfTsKIAkJMUExNDE0
QjYxM0EwRjA1MDAwMTk5OTZDIC8qIFdlYktpdEZvbnRGYW1pbHlOYW1lcy5oIGluIENvcHkgR2Vu
ZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUExNDE0
QjQxM0EwRjA1MDAwMTk5OTZDIC8qIFdlYktpdEZvbnRGYW1pbHlOYW1lcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07Ci0JCTFBMjE5QjNCMERDQTg3QUIwMDQwRTNBMCAv
KiBucGZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUEyMTlCM0EwRENBODdBQjAwNDBFM0EwIC8qIG5wZnVuY3Rpb25zLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUEyMjQ2NEEwQ0M5OERE
QjAwQzA1MjQwIC8qIFNRTGl0ZURhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTIyNDY0NDBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlRGF0
YWJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxQTIyNDY0QzBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlU3RhdGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTIyNDY0NjBDQzk4RERCMDBD
MDUyNDAgLyogU1FMaXRlU3RhdGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUEyMjQ2NEUwQ0M5OEREQjAwQzA1MjQwIC8qIFNRTGl0ZVRy
YW5zYWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQTIyNDY0ODBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlVHJhbnNhY3Rpb24uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDkyLDE0ICs0OTEs
NiBAQAogCQkxQTRBMkRGMDBBMUI4NTJBMDBDODA3RjggLyogSlNIVE1MQW5jaG9yRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE0QTJERUMw
QTFCODUyQTAwQzgwN0Y4IC8qIEpTSFRNTEFuY2hvckVsZW1lbnQuaCAqLzsgfTsKIAkJMUE0QTk1
NEUwQjRFRENDQjAwMkQ4QzNDIC8qIFNoYXJlZEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE0QTk1NEMwQjRFRENDQjAwMkQ4QzNDIC8qIFNo
YXJlZEJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTFBNERBNDIyMUNERDNBODMwMEY0NDczQyAvKiBMaW5rSWNvbkNvbGxlY3Rvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE0REE0MjAxQ0RE
M0E4MzAwRjQ0NzNDIC8qIExpbmtJY29uQ29sbGVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMUE1NjlDRjgwRDdFMkI4MjAwN0MzOTgzIC8q
IGNfY2xhc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBNTY5Q0M3MEQ3RTJCODIwMDdDMzk4MyAvKiBjX2NsYXNzLmggKi87IH07Ci0JCTFBNTY5Q0ZB
MEQ3RTJCODIwMDdDMzk4MyAvKiBjX2luc3RhbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNDOTBEN0UyQjgyMDA3QzM5ODMgLyogY19pbnN0
YW5jZS5oICovOyB9OwotCQkxQTU2OUNGQzBEN0UyQjgyMDA3QzM5ODMgLyogY19ydW50aW1lLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNDQjBE
N0UyQjgyMDA3QzM5ODMgLyogY19ydW50aW1lLmggKi87IH07Ci0JCTFBNTY5Q0ZFMEQ3RTJCODIw
MDdDMzk4MyAvKiBjX3V0aWxpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBNTY5Q0NEMEQ3RTJCODIwMDdDMzk4MyAvKiBjX3V0aWxpdHkuaCAqLzsg
fTsKLQkJMUE1NjlEMEIwRDdFMkI4MjAwN0MzOTgzIC8qIE5QX2pzb2JqZWN0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNEQjBEN0UyQjgyMDA3
QzM5ODMgLyogTlBfanNvYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQkxQTU2OUQwRjBEN0UyQjgyMDA3QzM5ODMgLyogbnBydW50aW1lX2lt
cGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNTY5
Q0RGMEQ3RTJCODIwMDdDMzk4MyAvKiBucHJ1bnRpbWVfaW1wbC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTFBNTY5RDEwMEQ3RTJCODIwMDdDMzk4
MyAvKiBucHJ1bnRpbWVfaW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBNTY5Q0UwMEQ3RTJCODIwMDdDMzk4MyAvKiBucHJ1bnRpbWVfaW50
ZXJuYWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQkxQTU2OUQxMTBEN0UyQjgyMDA3QzM5ODMgLyogbnBydW50aW1lX3ByaXYuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNTY5Q0UxMEQ3RTJCODIwMDdD
Mzk4MyAvKiBucHJ1bnRpbWVfcHJpdi5oICovOyB9OwogCQkxQTU2OUQxMjBEN0UyQjgyMDA3QzM5
ODMgLyogb2JqY19jbGFzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUE1NjlDRTMwRDdFMkI4MjAwN0MzOTgzIC8qIG9iamNfY2xhc3MuaCAqLzsgfTsK
IAkJMUE1NjlEMTMwRDdFMkI4MjAwN0MzOTgzIC8qIG9iamNfY2xhc3MubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNFNDBEN0UyQjgyMDA3QzM5
ODMgLyogb2JqY19jbGFzcy5tbSAqLzsgfTsKIAkJMUE1NjlEMTQwRDdFMkI4MjAwN0MzOTgzIC8q
IG9iamNfaGVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQTU2OUNFNTBEN0UyQjgyMDA3QzM5ODMgLyogb2JqY19oZWFkZXIuaCAqLzsgfTsKQEAg
LTU1MCw5ICs1NDEsNiBAQAogCQkxQThGNkJDMTBEQjU1Q0RDMDAxREI3OTQgLyogQXBwbGljYXRp
b25DYWNoZVJlc291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQThGNkJCNjBEQjU1Q0RDMDAxREI3OTQgLyogQXBwbGljYXRpb25DYWNoZVJlc291
cmNlLmggKi87IH07CiAJCTFBOEY2QkMzMERCNTVDREMwMDFEQjc5NCAvKiBET01BcHBsaWNhdGlv
bkNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QThGNkJCODBEQjU1Q0RDMDAxREI3OTQgLyogRE9NQXBwbGljYXRpb25DYWNoZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTFBOEY2QkM2MERCNTVDREMwMDFEQjc5
NCAvKiBBcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOEY2QkJCMERCNTVDREMwMDFEQjc5NCAvKiBB
cHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuaCAqLzsgfTsKLQkJMUE5MjdGRDIxNDE2QTE1
QjAwM0E4M0M4IC8qIG5wYXBpLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQTkyN0ZDRjE0MTZBMTVCMDAzQTgzQzggLyogbnBhcGkuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxQTkyN0ZEMzE0MTZBMTVC
MDAzQTgzQzggLyogbnBydW50aW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQTkyN0ZEMDE0MTZBMTVCMDAzQTgzQzggLyogbnBydW50aW1lLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMUE5MjdGRDQx
NDE2QTE1QjAwM0E4M0M4IC8qIG5wdHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTI3RkQxMTQxNkExNUIwMDNBODNDOCAvKiBucHR5cGVzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUFBQURE
QTQxNERCNDA5RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUFEREEyMTREQjQwOUYwMEFGNjRCMyAvKiBT
Y3JvbGxpbmdUcmVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMUFBQURERTQxNERDOEM4RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVOb2RlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUFBRERFMjE0
REM4QzhGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQUIzM0RBNTEyNTUxRTMyMDAyNDQ1N0Eg
LyogSU9LaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUFCMzNEQTQxMjU1MUUzMjAwMjQ0NTdBIC8qIElPS2l0LmZyYW1ld29yayAq
LzsgfTsKQEAgLTUxMTksNyArNTEwNyw2IEBACiAJCUUxNUEzNkQ5MTEwNDU3MjcwMEI3QjYzOSAv
KiBYTUxOU05hbWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxNUEzNkQ4MTEwNDU3MjcwMEI3QjYzOSAvKiBYTUxOU05hbWVzLmNwcCAqLzsgfTsK
IAkJRTE1RkY3RDUxOEM5NTUzODAwRkU0Qzg3IC8qIEtleXByZXNzQ29tbWFuZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1RkY3RDQxOEM5NTUzODAw
RkU0Qzg3IC8qIEtleXByZXNzQ29tbWFuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUUxNjRGQUEzMTgzMTVCRjQwMERCNEU2MSAvKiBDcnlwdG9L
ZXlSU0EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
NjRGQUEyMTgzMTVCRjQwMERCNEU2MSAvKiBDcnlwdG9LZXlSU0EuaCAqLzsgfTsKLQkJRTE2OTgw
M0QxMTMzNTQyRDAwODk0MTE1IC8qIENSdW50aW1lT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTY5ODAzQzExMzM1NDJEMDA4OTQxMTUgLyog
Q1J1bnRpbWVPYmplY3QuaCAqLzsgfTsKIAkJRTE2OTgyNTUxMTM0NjI5RDAwODk0MTE1IC8qIE9i
akNSdW50aW1lT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMTY5ODI1NDExMzQ2MjlEMDA4OTQxMTUgLyogT2JqQ1J1bnRpbWVPYmplY3QuaCAq
LzsgfTsKIAkJRTE2OTgyNjAxMTM0NjM2QTAwODk0MTE1IC8qIE9iakNSdW50aW1lT2JqZWN0Lm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE2OTgyNUYx
MTM0NjM2QTAwODk0MTE1IC8qIE9iakNSdW50aW1lT2JqZWN0Lm1tICovOyB9OwogCQlFMTZBODRG
QTE0Qzg1Q0NDMDAyOTc3REYgLyogQ1NTQm9yZGVySW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNkE4NEY4MTRDODVDQ0MwMDI5NzdERiAvKiBD
U1NCb3JkZXJJbWFnZS5oICovOyB9OwpAQCAtNjY5NSw3ICs2NjgyLDYgQEAKIAkJMUEwRDU3M0Yw
QTVDNzg2NzAwN0VERDRDIC8qIEpTT3ZlcmZsb3dFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNPdmVyZmxvd0V2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFBMTQxNEIzMTNBMEYwNTAwMDE5OTk2QyAvKiBXZWJLaXRGb250RmFtaWx5TmFtZXMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViS2l0Rm9udEZhbWlseU5hbWVzLmNwcDsgcGF0aCA9
IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvV2ViS2l0Rm9udEZhbWlseU5hbWVzLmNwcDsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMUExNDE0QjQxM0EwRjA1MDAwMTk5OTZD
IC8qIFdlYktpdEZvbnRGYW1pbHlOYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJLaXRGb250RmFt
aWx5TmFtZXMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvV2ViS2l0Rm9udEZhbWls
eU5hbWVzLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTFBMjE5QjNB
MERDQTg3QUIwMDQwRTNBMCAvKiBucGZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBucGZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
QTIyNDY0MzBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlRGF0YWJhc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1FMaXRlRGF0YWJhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQTIyNDY0NDBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlRGF0
YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1FMaXRlRGF0YWJhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEyMjQ2NDUwQ0M5OEREQjAwQzA1MjQw
IC8qIFNRTGl0ZVN0YXRlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTUUxpdGVTdGF0ZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NjczNSwyMCArNjcyMSw2IEBACiAJCTFBNEE5NTUxMEI0RURDRkYwMDJEOEMzQyAvKiBTaGFyZWRC
dWZmZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBT
aGFyZWRCdWZmZXJDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE0REE0
MUYxQ0REM0E4MzAwRjQ0NzNDIC8qIExpbmtJY29uQ29sbGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExpbmtJY29uQ29sbGVjdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE0REE0MjAxQ0REM0E4MzAwRjQ0NzNDIC8qIExpbmtJY29u
Q29sbGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpbmtJY29uQ29s
bGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBNTY5Q0M2MEQ3RTJCODIw
MDdDMzk4MyAvKiBjX2NsYXNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IGNfY2xhc3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTU2OUNDNzBE
N0UyQjgyMDA3QzM5ODMgLyogY19jbGFzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBjX2NsYXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBNTY5Q0M4MEQ3
RTJCODIwMDdDMzk4MyAvKiBjX2luc3RhbmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IGNfaW5zdGFuY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkxQTU2OUNDOTBEN0UyQjgyMDA3QzM5ODMgLyogY19pbnN0YW5jZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBjX2luc3RhbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTFBNTY5Q0NBMEQ3RTJCODIwMDdDMzk4MyAvKiBjX3J1bnRpbWUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gY19ydW50aW1lLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMUE1NjlDQ0IwRDdFMkI4MjAwN0MzOTgzIC8qIGNfcnVudGltZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjX3J1bnRpbWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE1NjlDQ0MwRDdFMkI4MjAwN0MzOTgzIC8qIGNfdXRpbGl0
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBjX3V0aWxpdHkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTU2OUNDRDBEN0UyQjgyMDA3QzM5ODMg
LyogY191dGlsaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNfdXRpbGl0
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTU2OUNEQTBEN0UyQjgyMDA3QzM5
ODMgLyogTlBfanNvYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTlBfanNvYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTU2OUNE
QjBEN0UyQjgyMDA3QzM5ODMgLyogTlBfanNvYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTlBfanNvYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MUE1NjlDREQwRDdFMkI4MjAwN0MzOTgzIC8qIG5wcnVudGltZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBucHJ1bnRpbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkxQTU2OUNERjBEN0UyQjgyMDA3QzM5ODMgLyogbnBydW50aW1lX2ltcGwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbnBydW50aW1lX2ltcGwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE1NjlDRTAwRDdFMkI4MjAwN0MzOTgzIC8qIG5wcnVu
dGltZV9pbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBucHJ1bnRp
bWVfaW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE1NjlDRTEwRDdF
MkI4MjAwN0MzOTgzIC8qIG5wcnVudGltZV9wcml2LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IG5wcnVudGltZV9wcml2Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFBNTY5Q0UzMEQ3RTJCODIwMDdDMzk4MyAvKiBvYmpjX2NsYXNzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IG9iamNfY2xhc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUE1NjlDRTQwRDdFMkI4MjAwN0MzOTgzIC8qIG9iamNfY2xhc3MubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBvYmpjX2NsYXNzLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQTU2OUNFNTBEN0UyQjgyMDA3QzM5ODMgLyogb2JqY19oZWFk
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gb2JqY19oZWFkZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY4NTIsOSArNjgyNCw2IEBACiAJCTFBOEY2QkI5
MERCNTVDREMwMDFEQjc5NCAvKiBET01BcHBsaWNhdGlvbkNhY2hlLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBET01BcHBsaWNhdGlvbkNhY2hlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUE4RjZCQkEwREI1NUNEQzAwMURCNzk0IC8qIEFwcGxpY2F0aW9uQ2FjaGVNYW5p
ZmVzdFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcHBs
aWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQThGNkJCQjBEQjU1Q0RDMDAxREI3OTQgLyogQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0
UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFwcGxpY2F0aW9uQ2Fj
aGVNYW5pZmVzdFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTkyN0ZD
RjE0MTZBMTVCMDAzQTgzQzggLyogbnBhcGkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gbnBhcGkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE5MjdGRDAxNDE2
QTE1QjAwM0E4M0M4IC8qIG5wcnVudGltZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBucHJ1bnRpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE5MjdGRDEx
NDE2QTE1QjAwM0E4M0M4IC8qIG5wdHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gbnB0eXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUFBRERBMTE0
REI0MDlGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTY3JvbGxpbmdUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUFBQUREQTIxNERCNDA5RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsaW5nVHJlZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQUFBRERFMTE0REM4QzhGMDBBRjY0QjMgLyogU2Nyb2xsaW5n
VHJlZU5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xs
aW5nVHJlZU5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYyMzUsOCAr
MTYyMDQsNiBAQAogCQlFMTY0QTJFQjE5MUFFNjM1MDAxMDczN0QgLyogQmxvYkRhdGFGaWxlUmVm
ZXJlbmNlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQmxv
YkRhdGFGaWxlUmVmZXJlbmNlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MTY0RkFBMjE4MzE1QkY0MDBEQjRFNjEgLyogQ3J5cHRvS2V5UlNBLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENyeXB0b0tleVJTQS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMTY0RkFBNDE4MzE1RTFBMDBEQjRFNjEgLyogQ3J5cHRvS2V5UlNBTWFjLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENyeXB0b0tleVJTQU1hYy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxNjk4MDNDMTEzMzU0MkQwMDg5NDExNSAv
KiBDUnVudGltZU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDUnVu
dGltZU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMTY5ODA0ODExMzM2
NDQ3MDA4OTQxMTUgLyogQ1J1bnRpbWVPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ1J1bnRpbWVPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMTY5ODI1NDExMzQ2MjlEMDA4OTQxMTUgLyogT2JqQ1J1bnRpbWVPYmplY3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqQ1J1bnRpbWVPYmplY3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE2OTgyNUYxMTM0NjM2QTAwODk0MTE1IC8qIE9i
akNSdW50aW1lT2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gT2JqQ1J1bnRpbWVPYmplY3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUx
NkE4NEY3MTRDODVDQ0MwMDI5NzdERiAvKiBDU1NCb3JkZXJJbWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NCb3JkZXJJbWFnZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xODY1MywxOCArMTg2MjAsMTEgQEAKIAkJMUE1NjlDQzQwRDdF
MkI2MDAwN0MzOTgzIC8qIGJyaWRnZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCi0JCQkJMUE1NjlDQzUwRDdFMkI4MjAwN0MzOTgzIC8qIGMgKi8sCi0JCQkJNTlC
NTk3NzExMTA4NjU1NjAwNzE1OUU4IC8qIGpzYyAqLywKIAkJCQkxQTU2OUNFMjBEN0UyQjgyMDA3
QzM5ODMgLyogb2JqYyAqLywKIAkJCQk1OTlFNzU4RjExMDU1QTFGMDBEOTA0RkEgLyogQnJpZGdl
LmggKi8sCiAJCQkJMUE3MUQ1NzkwRjMzODE5MDAwRjlDRTRFIC8qIElkZW50aWZpZXJSZXAuY3Bw
ICovLAogCQkJCTFBNzFENTdBMEYzMzgxOTAwMEY5Q0U0RSAvKiBJZGVudGlmaWVyUmVwLmggKi8s
Ci0JCQkJMUE1NjlDREEwRDdFMkI4MjAwN0MzOTgzIC8qIE5QX2pzb2JqZWN0LmNwcCAqLywKLQkJ
CQkxQTU2OUNEQjBEN0UyQjgyMDA3QzM5ODMgLyogTlBfanNvYmplY3QuaCAqLywKLQkJCQkxQTU2
OUNERDBEN0UyQjgyMDA3QzM5ODMgLyogbnBydW50aW1lLmNwcCAqLywKLQkJCQkxQTU2OUNERjBE
N0UyQjgyMDA3QzM5ODMgLyogbnBydW50aW1lX2ltcGwuaCAqLywKLQkJCQkxQTU2OUNFMDBEN0Uy
QjgyMDA3QzM5ODMgLyogbnBydW50aW1lX2ludGVybmFsLmggKi8sCi0JCQkJMUE1NjlDRTEwRDdF
MkI4MjAwN0MzOTgzIC8qIG5wcnVudGltZV9wcml2LmggKi8sCisJCQkJNTlCNTk3NzExMTA4NjU1
NjAwNzE1OUU4IC8qIGpzYyAqLywKIAkJCQkxQTU2OUNFRjBEN0UyQjgyMDA3QzM5ODMgLyogcnVu
dGltZV9hcnJheS5jcHAgKi8sCiAJCQkJMUE1NjlDRjAwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRp
bWVfYXJyYXkuaCAqLywKIAkJCQkxQTU2OUNGMTBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9t
ZXRob2QuY3BwICovLApAQCAtMTg2NzcsMjMgKzE4NjM3LDYgQEAKIAkJCXBhdGggPSBicmlkZ2U7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQkxQTU2OUNDNTBEN0UyQjgyMDA3
QzM5ODMgLyogYyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0J
CQkJMUE1NjlDQzYwRDdFMkI4MjAwN0MzOTgzIC8qIGNfY2xhc3MuY3BwICovLAotCQkJCTFBNTY5
Q0M3MEQ3RTJCODIwMDdDMzk4MyAvKiBjX2NsYXNzLmggKi8sCi0JCQkJMUE1NjlDQzgwRDdFMkI4
MjAwN0MzOTgzIC8qIGNfaW5zdGFuY2UuY3BwICovLAotCQkJCTFBNTY5Q0M5MEQ3RTJCODIwMDdD
Mzk4MyAvKiBjX2luc3RhbmNlLmggKi8sCi0JCQkJMUE1NjlDQ0EwRDdFMkI4MjAwN0MzOTgzIC8q
IGNfcnVudGltZS5jcHAgKi8sCi0JCQkJMUE1NjlDQ0IwRDdFMkI4MjAwN0MzOTgzIC8qIGNfcnVu
dGltZS5oICovLAotCQkJCTFBNTY5Q0NDMEQ3RTJCODIwMDdDMzk4MyAvKiBjX3V0aWxpdHkuY3Bw
ICovLAotCQkJCTFBNTY5Q0NEMEQ3RTJCODIwMDdDMzk4MyAvKiBjX3V0aWxpdHkuaCAqLywKLQkJ
CQlFMTY5ODA0ODExMzM2NDQ3MDA4OTQxMTUgLyogQ1J1bnRpbWVPYmplY3QuY3BwICovLAotCQkJ
CUUxNjk4MDNDMTEzMzU0MkQwMDg5NDExNSAvKiBDUnVudGltZU9iamVjdC5oICovLAotCQkJKTsK
LQkJCXBhdGggPSBjOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJMUE1NjlD
RTIwRDdFMkI4MjAwN0MzOTgzIC8qIG9iamMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKApAQCAtMjIxMDksMTAgKzIyMDUyLDYgQEAKIAkJCQlBOUM2RTRFRDBENzQ1
RTM4MDA2NDQyRTkgLyogRE9NUGx1Z2luQXJyYXkuY3BwICovLAogCQkJCUE5QzZFNEVFMEQ3NDVF
MzgwMDY0NDJFOSAvKiBET01QbHVnaW5BcnJheS5oICovLAogCQkJCUE5QzZFNjYxMEQ3NDY3MUUw
MDY0NDJFOSAvKiBET01QbHVnaW5BcnJheS5pZGwgKi8sCi0JCQkJMUE5MjdGQ0YxNDE2QTE1QjAw
M0E4M0M4IC8qIG5wYXBpLmggKi8sCi0JCQkJMUEyMTlCM0EwRENBODdBQjAwNDBFM0EwIC8qIG5w
ZnVuY3Rpb25zLmggKi8sCi0JCQkJMUE5MjdGRDAxNDE2QTE1QjAwM0E4M0M4IC8qIG5wcnVudGlt
ZS5oICovLAotCQkJCTFBOTI3RkQxMTQxNkExNUIwMDNBODNDOCAvKiBucHR5cGVzLmggKi8sCiAJ
CQkJQTlDNkU0RjEwRDc0NUU0ODAwNjQ0MkU5IC8qIFBsdWdpbkRhdGEuY3BwICovLAogCQkJCUE5
QzZFNEYyMEQ3NDVFNDgwMDY0NDJFOSAvKiBQbHVnaW5EYXRhLmggKi8sCiAJCQkJMUEwOEZFREEx
RDU5MkI4QjAwOEJBOENCIC8qIFBsdWdpbkluZm9Qcm92aWRlci5jcHAgKi8sCkBAIC0zMTk1Miwx
MCArMzE4OTEsNiBAQAogCQkJCTdBNDUwMzMwMThEQjcxNzIwMDM3N0IzNCAvKiBCdWZmZXJlZExp
bmVSZWFkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERkE0ODhGMURCNTQxRDAwMDM2MkI5OSAv
KiBCdWZmZXJTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREIwMTI1MUYxMkQwMDNF
RjI2OSAvKiBCdXR0b25JbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBNTY5Q0Y4MEQ3
RTJCODIwMDdDMzk4MyAvKiBjX2NsYXNzLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTU2OUNGQTBE
N0UyQjgyMDA3QzM5ODMgLyogY19pbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUE1NjlD
RkMwRDdFMkI4MjAwN0MzOTgzIC8qIGNfcnVudGltZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUE1
NjlDRkUwRDdFMkI4MjAwN0MzOTgzIC8qIGNfdXRpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MDdDMDQ2QzQxRTQyNTA4QjAwNzIwMUU3IC8qIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNjM1M0UxRTYxRjkxNzQzMTAwQTM0MjA4IC8qIENhY2hlZEFwcGxp
Y2F0aW9uTWFuaWZlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQjE2QzFBMDk3OUMzQkQwMDQ2
Nzc0MSAvKiBDYWNoZWRDU1NTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKQEAgLTMyMjEwLDcg
KzMyMTQ1LDYgQEAKIAkJCQk0MUFCRTY3QjFEMDU4MERCMDA2RDg2MkQgLyogQ3Jvc3NPcmlnaW5Q
cmVmbGlnaHRDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUM0MTVEQTBGNjU1RDZGMDA5
MkQyRkIgLyogQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNkIxRjQ4MTEyMjk4QTM3RTAwREU4QjgyIC8qIENyb3NzU2l0ZU5hdmlnYXRpb25EYXRh
VHJhbnNmZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUUxNjk4MDNEMTEzMzU0MkQwMDg5NDExNSAv
KiBDUnVudGltZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc1Q0EyOEIxMzAzNjVGODAw
RTk5QUQ5IC8qIENyeXB0by5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0M5QUNBOTgxRjNDQ0RBRDAw
RjNBQTA5IC8qIENyeXB0b0Flc0tleUFsZ29yaXRobS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE3
MkFGNkUxODBGMjRDNjAwRkJBREI5IC8qIENyeXB0b0FsZ29yaXRobS5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zNDYzNSwxNCArMzQ1NjksNiBAQAogCQkJCTk4RUIxRjk1MTMxM0ZFMDUwMEQwRTFFQSAv
KiBOb3RJbXBsZW1lbnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE2RkQyNUYyNDBGQTRFNTAw
NjY2MUQ4IC8qIE5vd1BsYXlpbmdJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTc4RUYxNzI0
MTI2MDg0MDAxOTNDNzQgLyogTm93UGxheWluZ01hbmFnZXIuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTFBNTY5RDBCMEQ3RTJCODIwMDdDMzk4MyAvKiBOUF9qc29iamVjdC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMUE5MjdGRDIxNDE2QTE1QjAwM0E4M0M4IC8qIG5wYXBpLmggaW4gSGVhZGVycyAqLywK
LQkJCQkxQTIxOUIzQjBEQ0E4N0FCMDA0MEUzQTAgLyogbnBmdW5jdGlvbnMuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTFBOTI3RkQzMTQxNkExNUIwMDNBODNDOCAvKiBucHJ1bnRpbWUuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTFBNTY5RDBGMEQ3RTJCODIwMDdDMzk4MyAvKiBucHJ1bnRpbWVfaW1wbC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMUE1NjlEMTAwRDdFMkI4MjAwN0MzOTgzIC8qIG5wcnVudGlt
ZV9pbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUE1NjlEMTEwRDdFMkI4MjAwN0MzOTgz
IC8qIG5wcnVudGltZV9wcml2LmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTkyN0ZENDE0MTZBMTVC
MDAzQTgzQzggLyogbnB0eXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1MDBGMzIxM0ZERTNC
RTAwOTlFQzI0IC8qIE5TU2Nyb2xsZXJJbXBEZXRhaWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQky
REEzOTdFNTI2NUM3Mzc1MDA0NjhGMzMgLyogTnVsbEdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRjU1QjNEQzgxMjUxRjEyRDAwM0VGMjY5IC8qIE51bWJlcklucHV0VHlwZS5o
IGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENv
bnRyb2xsZXIuY3BwCmluZGV4IGE0M2FlZTA0OGY0YmM4NTA0ODY4OWVjZjE3MTA4Y2JkODUxOWI2
YmEuLjAxYzE0MTkwNWI5ODgxMTkzNGRmYWEzYTE3ZTE4NGI0ZmI0OTg3OTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC00Myw3ICs0
Myw2IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1vZHVsZUZldGNoRmFpbHVy
ZUtpbmQuaCIKICNpbmNsdWRlICJNb2R1bGVGZXRjaFBhcmFtZXRlcnMuaCIKLSNpbmNsdWRlICJO
UF9qc29iamVjdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlQ29uc29sZUNs
aWVudC5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgpAQCAtNTksNyArNTgsNiBAQAogI2luY2x1
ZGUgIlVzZXJHZXN0dXJlSW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpJVE9wZXJhdGlv
bnMuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCi0jaW5jbHVkZSAibnBydW50
aW1lX2ltcGwuaCIKICNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9EZWJ1Z2dlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXAuaD4KQEAg
LTk3LDkgKzk1LDYgQEAgU2NyaXB0Q29udHJvbGxlcjo6U2NyaXB0Q29udHJvbGxlcihGcmFtZSYg
ZnJhbWUpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQogICAgICwgbV9zb3VyY2VVUkwoMCkKICAgICAs
IG1fcGF1c2VkKGZhbHNlKQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICwg
bV93aW5kb3dTY3JpcHROUE9iamVjdCgwKQotI2VuZGlmCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAg
ICAgLCBtX3dpbmRvd1NjcmlwdE9iamVjdCgwKQogI2VuZGlmCkBAIC00NzEsMjkgKzQ2Niw2IEBA
IHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y29sbGVjdElzb2xhdGVkQ29udGV4dHMoVmVjdG9yPHN0
ZDo6cGFpcjxKU0M6OkpTR2xvYmFsT2JqCiAgICAgfQogfQogCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi1OUE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2NyaXB0TlBP
YmplY3QoKQotewotICAgIGlmICghbV93aW5kb3dTY3JpcHROUE9iamVjdCkgewotICAgICAgICBK
U0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKLSAgICAgICAgaWYgKGNhbkV4ZWN1dGVTY3Jp
cHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkgewotICAgICAgICAgICAgLy8gSmF2YVNjcmlw
dCBpcyBlbmFibGVkLCBzbyB0aGVyZSBpcyBhIEphdmFTY3JpcHQgd2luZG93IG9iamVjdC4KLSAg
ICAgICAgICAgIC8vIFJldHVybiBhbiBOUE9iamVjdCBib3VuZCB0byB0aGUgd2luZG93IG9iamVj
dC4KLSAgICAgICAgICAgIGF1dG8qIHdpbmRvdyA9IGpzV2luZG93UHJveHkocGx1Z2luV29ybGQo
KSkud2luZG93KCk7Ci0gICAgICAgICAgICBBU1NFUlQod2luZG93KTsKLSAgICAgICAgICAgIEJp
bmRpbmdzOjpSb290T2JqZWN0KiByb290ID0gYmluZGluZ1Jvb3RPYmplY3QoKTsKLSAgICAgICAg
ICAgIG1fd2luZG93U2NyaXB0TlBPYmplY3QgPSBfTlBOX0NyZWF0ZVNjcmlwdE9iamVjdCgwLCB3
aW5kb3csIHJvb3QpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gSmF2YVNjcmlw
dCBpcyBub3QgZW5hYmxlZCwgc28gd2UgY2Fubm90IGJpbmQgdGhlIE5QT2JqZWN0IHRvIHRoZSBK
YXZhU2NyaXB0IHdpbmRvdyBvYmplY3QuCi0gICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSBjcmVh
dGUgYW4gTlBPYmplY3Qgb2YgYSBkaWZmZXJlbnQgY2xhc3MsIG9uZSB3aGljaCBpcyBub3QgYm91
bmQgdG8gYSBKYXZhU2NyaXB0IG9iamVjdC4KLSAgICAgICAgICAgIG1fd2luZG93U2NyaXB0TlBP
YmplY3QgPSBfTlBOX0NyZWF0ZU5vU2NyaXB0T2JqZWN0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gbV93aW5kb3dTY3JpcHROUE9iamVjdDsKLX0KLSNlbmRpZgotCiAjaWYgIVBM
QVRGT1JNKENPQ09BKQogUmVmUHRyPEpTQzo6QmluZGluZ3M6Okluc3RhbmNlPiBTY3JpcHRDb250
cm9sbGVyOjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldpZGdldChXaWRnZXQqIHdpZGdldCkKIHsK
QEAgLTU1NywxNiArNTI5LDYgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9i
amVjdHMoKQogICAgICAgICBtX2JpbmRpbmdSb290T2JqZWN0LT5pbnZhbGlkYXRlKCk7CiAgICAg
ICAgIG1fYmluZGluZ1Jvb3RPYmplY3QgPSBudWxscHRyOwogICAgIH0KLQotI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGlmIChtX3dpbmRvd1NjcmlwdE5QT2JqZWN0KSB7Ci0g
ICAgICAgIC8vIENhbGwgX05QTl9EZWFsbG9jYXRlT2JqZWN0KCkgaW5zdGVhZCBvZiBfTlBOX1Jl
bGVhc2VPYmplY3QoKSBzbyB0aGF0IHdlIGRvbid0IGxlYWsgaWYgYSBwbHVnaW4gZmFpbHMgdG8g
cmVsZWFzZSB0aGUgd2luZG93Ci0gICAgICAgIC8vIHNjcmlwdCBvYmplY3QgcHJvcGVybHkuCi0g
ICAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGNhdXNlIGFueSBwcm9ibGVtcyBmb3IgcGx1Z2lucyBz
aW5jZSB0aGV5IHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiBzdG9wcGVkIGFuZCBkZXN0cm95ZWQg
YXQgdGhpcyBwb2ludC4KLSAgICAgICAgX05QTl9EZWFsbG9jYXRlT2JqZWN0KG1fd2luZG93U2Ny
aXB0TlBPYmplY3QpOwotICAgICAgICBtX3dpbmRvd1NjcmlwdE5QT2JqZWN0ID0gbnVsbHB0cjsK
LSAgICB9Ci0jZW5kaWYKIH0KIAogSlNDOjpKU1ZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV4ZWN1
dGVTY3JpcHRJZ25vcmluZ0V4Y2VwdGlvbihjb25zdCBTdHJpbmcmIHNjcmlwdCwgYm9vbCBmb3Jj
ZVVzZXJHZXN0dXJlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJv
bGxlci5oCmluZGV4IGRhZjllYWQyMWNkODNjY2YwNTMxZWFmYTYxMzdmZjA3MTg4ZjY3MWYuLjAx
MWViZTcyNWZjN2QyYjZhOTg1NzYxOTZjMTc5NjVjMTE0ZjlkMDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgKQEAgLTE2NSwxMCArMTY1LDYgQEAg
cHVibGljOgogI2VuZGlmCiAKICAgICBXRUJDT1JFX0VYUE9SVCBKU0M6OkpTT2JqZWN0KiBqc09i
amVjdEZvclBsdWdpbkVsZW1lbnQoSFRNTFBsdWdJbkVsZW1lbnQqKTsKLSAgICAKLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBXRUJDT1JFX0VYUE9SVCBOUE9iamVjdCogd2lu
ZG93U2NyaXB0TlBPYmplY3QoKTsKLSNlbmRpZgogCiAgICAgdm9pZCBpbml0U2NyaXB0Rm9yV2lu
ZG93UHJveHkoSlNXaW5kb3dQcm94eSYpOwogCkBAIC0yMDAsOSArMTk2LDYgQEAgcHJpdmF0ZToK
ICAgICAvLyBUaGlzIGVuc3VyZXMgdGhleSBhcmUgc3RpbGwgYXZhaWxhYmxlIHdoZW4gdGhlIHBh
Z2UgaXMgcmVzdG9yZWQuCiAgICAgUmVmUHRyPEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+IG1f
Y2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3Q7CiAgICAgUm9vdE9iamVjdE1hcCBtX3Jvb3RPYmpl
Y3RzOwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIE5QT2JqZWN0KiBtX3dp
bmRvd1NjcmlwdE5QT2JqZWN0OwotI2VuZGlmCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgUmV0
YWluUHRyPFdlYlNjcmlwdE9iamVjdD4gbV93aW5kb3dTY3JpcHRPYmplY3Q7CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tCmlu
ZGV4IDZmMmMwOWIyNGE5ZjE3MGIxNTVkOGYxODJhNjJiMGJhMjMyODgwNjkuLmM2OTNhZjQ3ZmYy
NmU4ODUzMTIwODFlNzNhMDU2YTk4MGJkOGFiMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQpAQCAtNDQsMTIgKzQ0LDYgQEAKICNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dEludGVybmFsLmg+CiAjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9KU0xvY2suaD4KIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQot
I2ltcG9ydCAiY19pbnN0YW5jZS5oIgotI2ltcG9ydCAiTlBfanNvYmplY3QuaCIKLSNpbXBvcnQg
Im5wcnVudGltZV9pbXBsLmgiCi0jZW5kaWYKLQogQGludGVyZmFjZSBOU09iamVjdCAoV2ViUGx1
Z2luKQogLSAoaWQpb2JqZWN0Rm9yV2ViU2NyaXB0OwogLSAoTlBPYmplY3QgKiljcmVhdGVQbHVn
aW5TY3JpcHRhYmxlT2JqZWN0OwpAQCAtNzcsMjEgKzcxLDYgQEAgUmVmUHRyPEpTQzo6QmluZGlu
Z3M6Okluc3RhbmNlPiBTY3JpcHRDb250cm9sbGVyOjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldp
ZGdldCgKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gSlNDOjpC
aW5kaW5nczo6T2JqY0luc3RhbmNlOjpjcmVhdGUob2JqZWN0Rm9yV2ViU2NyaXB0LCBXVEZNb3Zl
KHJvb3RPYmplY3QpKTsKICAgICB9Ci0KLSAgICBpZiAoW3dpZGdldFZpZXcgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3RvcihjcmVhdGVQbHVnaW5TY3JpcHRhYmxlT2JqZWN0KV0pIHsKLSNpZiAh
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotI2Vs
c2UKLSAgICAgICAgTlBPYmplY3QqIG5wT2JqZWN0ID0gW3dpZGdldFZpZXcgY3JlYXRlUGx1Z2lu
U2NyaXB0YWJsZU9iamVjdF07Ci0gICAgICAgIGlmICghbnBPYmplY3QpCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgYXV0byBpbnN0YW5jZSA9IEpTQzo6QmluZGluZ3M6OkNJ
bnN0YW5jZTo6Y3JlYXRlKG5wT2JqZWN0LCBXVEZNb3ZlKHJvb3RPYmplY3QpKTsKLSAgICAgICAg
Ly8gLWNyZWF0ZVBsdWdpblNjcmlwdGFibGVPYmplY3QgcmV0dXJucyBhIHJldGFpbmVkIE5QT2Jq
ZWN0LiAgVGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byByZWxlYXNlIGl0LgotICAgICAgICBfTlBO
X1JlbGVhc2VPYmplY3QobnBPYmplY3QpOwotICAgICAgICByZXR1cm4gV1RGTW92ZShpbnN0YW5j
ZSk7Ci0jZW5kaWYKLSAgICB9Ci0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9OUF9qc29iamVjdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNk
YzZkNmI5YzI1N2Y0ZjViNzQ2NTEyYWZlZWM5NWMyMjJlMTA0YzkuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pz
b2JqZWN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU1NyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA0LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiTlBfanNv
YmplY3QuaCIKLQotI2luY2x1ZGUgIklkZW50aWZpZXJSZXAuaCIKLSNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKLSNpbmNsdWRlICJjX2luc3RhbmNlLmgiCi0jaW5jbHVkZSAiY191dGlsaXR5Lmgi
Ci0jaW5jbHVkZSAibnBydW50aW1lX3ByaXYuaCIKLSNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9DYXRjaFNjb3BlLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvQ29tcGxldGlvbi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Vycm9yLmg+
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU0xvY2suaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Qcm9wZXJ0
eU5hbWVBcnJheS5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1NvdXJjZUNvZGUuaD4KLSNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGRlZmF1bHQpCi0jaW5jbHVkZSAi
bnBydW50aW1lX2ltcGwuaCIKLSNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcG9wCi0KLW5hbWVzcGFj
ZSBKU0MgewotdXNpbmcgbmFtZXNwYWNlIEJpbmRpbmdzOwotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLWNsYXNzIE9iamVjdE1hcCB7Ci1wdWJsaWM6Ci0gICAgTlBPYmplY3QqIGdldChSb290
T2JqZWN0KiByb290T2JqZWN0LCBKU09iamVjdCoganNPYmplY3QpCi0gICAgewotICAgICAgICBy
ZXR1cm4gbV9tYXAuZ2V0KHJvb3RPYmplY3QpLmdldChqc09iamVjdCk7Ci0gICAgfQotCi0gICAg
dm9pZCBhZGQoUm9vdE9iamVjdCogcm9vdE9iamVjdCwgSlNPYmplY3QqIGpzT2JqZWN0LCBOUE9i
amVjdCogbnBPYmplY3QpCi0gICAgewotICAgICAgICBIYXNoTWFwPFJvb3RPYmplY3QqLCBKU1Rv
TlBPYmplY3RNYXA+OjppdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZChyb290T2JqZWN0KTsKLSAg
ICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpIHsKLSAgICAgICAgICAgIHJvb3RPYmplY3Qt
PmFkZEludmFsaWRhdGlvbkNhbGxiYWNrKCZtX2ludmFsaWRhdGlvbkNhbGxiYWNrKTsKLSAgICAg
ICAgICAgIGl0ZXIgPSBtX21hcC5hZGQocm9vdE9iamVjdCwgSlNUb05QT2JqZWN0TWFwKCkpLml0
ZXJhdG9yOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlLmZpbmQoanNP
YmplY3QpID09IGl0ZXItPnZhbHVlLmVuZCgpKTsKLSAgICAgICAgaXRlci0+dmFsdWUuYWRkKGpz
T2JqZWN0LCBucE9iamVjdCk7Ci0gICAgfQotCi0gICAgdm9pZCByZW1vdmUoUm9vdE9iamVjdCog
cm9vdE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX21hcC5jb250YWlucyhyb290T2Jq
ZWN0KSk7Ci0gICAgICAgIG1fbWFwLnJlbW92ZShyb290T2JqZWN0KTsKLSAgICB9Ci0KLSAgICB2
b2lkIHJlbW92ZShSb290T2JqZWN0KiByb290T2JqZWN0LCBKU09iamVjdCoganNPYmplY3QpCi0g
ICAgewotICAgICAgICBIYXNoTWFwPFJvb3RPYmplY3QqLCBKU1RvTlBPYmplY3RNYXA+OjppdGVy
YXRvciBpdGVyID0gbV9tYXAuZmluZChyb290T2JqZWN0KTsKLSAgICAgICAgQVNTRVJUKGl0ZXIg
IT0gbV9tYXAuZW5kKCkpOwotICAgICAgICBBU1NFUlQoaXRlci0+dmFsdWUuZmluZChqc09iamVj
dCkgIT0gaXRlci0+dmFsdWUuZW5kKCkpOwotCi0gICAgICAgIGl0ZXItPnZhbHVlLnJlbW92ZShq
c09iamVjdCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0cnVjdCBSb290T2JqZWN0SW52YWxp
ZGF0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgUm9vdE9iamVjdDo6SW52YWxpZGF0aW9uQ2FsbGJhY2sg
ewotICAgICAgICB2b2lkIG9wZXJhdG9yKCkoUm9vdE9iamVjdCopIG92ZXJyaWRlOwotICAgIH07
Ci0gICAgUm9vdE9iamVjdEludmFsaWRhdGlvbkNhbGxiYWNrIG1faW52YWxpZGF0aW9uQ2FsbGJh
Y2s7Ci0KLSAgICAvLyBKU09iamVjdHMgYXJlIHByb3RlY3RlZCBieSBSb290T2JqZWN0LgotICAg
IHR5cGVkZWYgSGFzaE1hcDxKU09iamVjdCosIE5QT2JqZWN0Kj4gSlNUb05QT2JqZWN0TWFwOwot
ICAgIEhhc2hNYXA8Um9vdE9iamVjdCosIEpTVG9OUE9iamVjdE1hcD4gbV9tYXA7Ci19OwotCi0K
LXN0YXRpYyBPYmplY3RNYXAmIG9iamVjdE1hcCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPE9iamVjdE1hcD4gbWFwOwotICAgIHJldHVybiBtYXA7Ci19Ci0KLXZvaWQgT2JqZWN0TWFw
OjpSb290T2JqZWN0SW52YWxpZGF0aW9uQ2FsbGJhY2s6Om9wZXJhdG9yKCkoUm9vdE9iamVjdCog
cm9vdE9iamVjdCkKLXsKLSAgICBvYmplY3RNYXAoKS5yZW1vdmUocm9vdE9iamVjdCk7Ci19Ci0K
LXN0YXRpYyB2b2lkIGdldExpc3RGcm9tVmFyaWFudEFyZ3MoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIGNvbnN0IE5QVmFyaWFudCogYXJncywgdW5zaWduZWQgYXJnQ291bnQs
IFJvb3RPYmplY3QqIHJvb3RPYmplY3QsIE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhTGlzdCkKLXsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJnQ291bnQ7ICsraSkKLSAgICAgICAgYUxp
c3QuYXBwZW5kKGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsICZh
cmdzW2ldLCByb290T2JqZWN0KSk7Ci19Ci0KLXN0YXRpYyBOUE9iamVjdCoganNBbGxvY2F0ZShO
UFAsIE5QQ2xhc3MqKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUE9iamVjdCo+KG1hbGxv
YyhzaXplb2YoSmF2YVNjcmlwdE9iamVjdCkpKTsKLX0KLQotc3RhdGljIHZvaWQganNEZWFsbG9j
YXRlKE5QT2JqZWN0KiBucE9iaikKLXsKLSAgICBKYXZhU2NyaXB0T2JqZWN0KiBvYmogPSByZWlu
dGVycHJldF9jYXN0PEphdmFTY3JpcHRPYmplY3QqPihucE9iaik7Ci0KLSAgICBpZiAob2JqLT5y
b290T2JqZWN0ICYmIG9iai0+cm9vdE9iamVjdC0+aXNWYWxpZCgpKSB7Ci0gICAgICAgIG9iamVj
dE1hcCgpLnJlbW92ZShvYmotPnJvb3RPYmplY3QsIG9iai0+aW1wKTsKLSAgICAgICAgb2JqLT5y
b290T2JqZWN0LT5nY1VucHJvdGVjdChvYmotPmltcCk7Ci0gICAgfQotCi0gICAgaWYgKG9iai0+
cm9vdE9iamVjdCkKLSAgICAgICAgb2JqLT5yb290T2JqZWN0LT5kZXJlZigpOwotCi0gICAgZnJl
ZShvYmopOwotfQotCi1zdGF0aWMgTlBDbGFzcyBqYXZhc2NyaXB0Q2xhc3MgPSB7IDEsIGpzQWxs
b2NhdGUsIGpzRGVhbGxvY2F0ZSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9Owotc3Rh
dGljIE5QQ2xhc3Mgbm9TY3JpcHRDbGFzcyA9IHsgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCB9OwotCi1leHRlcm4gIkMiIHsKLU5QQ2xhc3MqIE5QU2NyaXB0T2JqZWN0Q2xh
c3MgPSAmamF2YXNjcmlwdENsYXNzOwotc3RhdGljIE5QQ2xhc3MqIE5QTm9TY3JpcHRPYmplY3RD
bGFzcyA9ICZub1NjcmlwdENsYXNzOwotCi1OUE9iamVjdCogX05QTl9DcmVhdGVTY3JpcHRPYmpl
Y3QoTlBQIG5wcCwgSlNPYmplY3QqIGltcCwgUmVmUHRyPFJvb3RPYmplY3Q+JiYgcm9vdE9iamVj
dCkKLXsKLSAgICBpZiAoTlBPYmplY3QqIG9iamVjdCA9IG9iamVjdE1hcCgpLmdldChyb290T2Jq
ZWN0LmdldCgpLCBpbXApKQotICAgICAgICByZXR1cm4gX05QTl9SZXRhaW5PYmplY3Qob2JqZWN0
KTsKLQotICAgIEphdmFTY3JpcHRPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNj
cmlwdE9iamVjdCo+KF9OUE5fQ3JlYXRlT2JqZWN0KG5wcCwgTlBTY3JpcHRPYmplY3RDbGFzcykp
OwotCi0gICAgb2JqLT5yb290T2JqZWN0ID0gcm9vdE9iamVjdC5sZWFrUmVmKCk7Ci0KLSAgICBp
ZiAob2JqLT5yb290T2JqZWN0KSB7Ci0gICAgICAgIG9iai0+cm9vdE9iamVjdC0+Z2NQcm90ZWN0
KGltcCk7Ci0gICAgICAgIG9iamVjdE1hcCgpLmFkZChvYmotPnJvb3RPYmplY3QsIGltcCwgcmVp
bnRlcnByZXRfY2FzdDxOUE9iamVjdCo+KG9iaikpOwotICAgIH0KLQotICAgIG9iai0+aW1wID0g
aW1wOwotCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TlBPYmplY3QqPihvYmopOwotfQot
Ci1OUE9iamVjdCogX05QTl9DcmVhdGVOb1NjcmlwdE9iamVjdCh2b2lkKQotewotICAgIHJldHVy
biBfTlBOX0NyZWF0ZU9iamVjdCgwLCBOUE5vU2NyaXB0T2JqZWN0Q2xhc3MpOwotfQotCi1ib29s
IF9OUE5fSW52b2tlRGVmYXVsdChOUFAsIE5QT2JqZWN0KiBvLCBjb25zdCBOUFZhcmlhbnQqIGFy
Z3MsIHVpbnQzMl90IGFyZ0NvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoby0+
X2NsYXNzID09IE5QU2NyaXB0T2JqZWN0Q2xhc3MpIHsKLSAgICAgICAgSmF2YVNjcmlwdE9iamVj
dCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4obyk7IAotICAgICAg
ICAKLSAgICAgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7Ci0gICAgICAgIAotICAgICAg
ICAvLyBMb29rdXAgdGhlIGZ1bmN0aW9uIG9iamVjdC4KLSAgICAgICAgUm9vdE9iamVjdCogcm9v
dE9iamVjdCA9IG9iai0+cm9vdE9iamVjdDsKLSAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFy
b290T2JqZWN0LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IAotICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgp
OwotICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgICAgIEpTTG9ja0hv
bGRlciBsb2NrKHZtKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUo
dm0pOwotCi0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZ2xv
YmFsT2JqZWN0OwotICAgICAgICAKLSAgICAgICAgLy8gQ2FsbCB0aGUgZnVuY3Rpb24gb2JqZWN0
LgotICAgICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gb2JqLT5pbXA7Ci0gICAgICAgIGF1dG8gY2Fs
bERhdGEgPSBnZXRDYWxsRGF0YSh2bSwgZnVuY3Rpb24pOwotICAgICAgICBpZiAoY2FsbERhdGEu
dHlwZSA9PSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgCi0gICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xpc3Q7Ci0gICAgICAg
IGdldExpc3RGcm9tVmFyaWFudEFyZ3MobGV4aWNhbEdsb2JhbE9iamVjdCwgYXJncywgYXJnQ291
bnQsIHJvb3RPYmplY3QsIGFyZ0xpc3QpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghYXJnTGlz
dC5oYXNPdmVyZmxvd2VkKCkpOwotICAgICAgICBKU1ZhbHVlIHJlc3VsdFYgPSBKU0M6OmNhbGwo
bGV4aWNhbEdsb2JhbE9iamVjdCwgZnVuY3Rpb24sIGNhbGxEYXRhLCBmdW5jdGlvbiwgYXJnTGlz
dCk7Ci0KLSAgICAgICAgLy8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGZ1
bmN0aW9uIGNhbGwuCi0gICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGxleGljYWxHbG9i
YWxPYmplY3QsIHJlc3VsdFYsIHJlc3VsdCk7Ci0gICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOyAgICAgICAgCi0gICAgfQotCi0gICAgaWYgKG8tPl9j
bGFzcy0+aW52b2tlRGVmYXVsdCkKLSAgICAgICAgcmV0dXJuIG8tPl9jbGFzcy0+aW52b2tlRGVm
YXVsdChvLCBhcmdzLCBhcmdDb3VudCwgcmVzdWx0KTsgICAgCi0gICAgVk9JRF9UT19OUFZBUklB
TlQoKnJlc3VsdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgX05QTl9JbnZva2UoTlBQ
IG5wcCwgTlBPYmplY3QqIG8sIE5QSWRlbnRpZmllciBtZXRob2ROYW1lLCBjb25zdCBOUFZhcmlh
bnQqIGFyZ3MsIHVpbnQzMl90IGFyZ0NvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBp
ZiAoby0+X2NsYXNzID09IE5QU2NyaXB0T2JqZWN0Q2xhc3MpIHsKLSAgICAgICAgSmF2YVNjcmlw
dE9iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4obyk7IAot
Ci0gICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4o
bWV0aG9kTmFtZSk7Ci0gICAgICAgIGlmICghaS0+aXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICAvLyBTcGVjaWFsIGNhc2UgdGhlICJldmFsIiBtZXRob2Qu
Ci0gICAgICAgIGlmIChtZXRob2ROYW1lID09IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcigiZXZh
bCIpKSB7Ci0gICAgICAgICAgICBpZiAoYXJnQ291bnQgIT0gMSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoYXJnc1swXS50eXBlICE9IE5QVmFyaWFudFR5
cGVfU3RyaW5nKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJl
dHVybiBfTlBOX0V2YWx1YXRlKG5wcCwgbywgY29uc3RfY2FzdDxOUFN0cmluZyo+KCZhcmdzWzBd
LnZhbHVlLnN0cmluZ1ZhbHVlKSwgcmVzdWx0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIExv
b2sgdXAgdGhlIGZ1bmN0aW9uIG9iamVjdC4KLSAgICAgICAgUm9vdE9iamVjdCogcm9vdE9iamVj
dCA9IG9iai0+cm9vdE9iamVjdDsKLSAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2Jq
ZWN0LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYXV0
byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7
Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQotICAgICAg
ICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdDsKLSAg
ICAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iai0+aW1wLT5nZXQobGV4aWNhbEdsb2JhbE9iamVj
dCwgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgaS0+c3Ry
aW5nKCkpKTsKLSAgICAgICAgYXV0byBjYWxsRGF0YSA9IGdldENhbGxEYXRhKHZtLCBmdW5jdGlv
bik7Ci0gICAgICAgIGlmIChjYWxsRGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOb25lKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIENhbGwgdGhlIGZ1bmN0aW9u
IG9iamVjdC4KLSAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnTGlzdDsKLSAgICAgICAg
Z2V0TGlzdEZyb21WYXJpYW50QXJncyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmdzLCBhcmdDb3Vu
dCwgcm9vdE9iamVjdCwgYXJnTGlzdCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFhcmdMaXN0
Lmhhc092ZXJmbG93ZWQoKSk7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ViA9IEpTQzo6Y2FsbChs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwgY2FsbERhdGEsIG9iai0+aW1wLCBhcmdMaXN0
KTsKLQotICAgICAgICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgZnVu
Y3Rpb24gY2FsbC4KLSAgICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQobGV4aWNhbEdsb2Jh
bE9iamVjdCwgcmVzdWx0ViwgcmVzdWx0KTsKLSAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24o
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG8tPl9jbGFzcy0+aW52
b2tlKQotICAgICAgICByZXR1cm4gby0+X2NsYXNzLT5pbnZva2UobywgbWV0aG9kTmFtZSwgYXJn
cywgYXJnQ291bnQsIHJlc3VsdCk7Ci0gICAgCi0gICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3Vs
dCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgX05QTl9FdmFsdWF0ZShOUFAsIE5QT2Jq
ZWN0KiBvLCBOUFN0cmluZyogcywgTlBWYXJpYW50KiB2YXJpYW50KQotewotICAgIGlmIChvLT5f
Y2xhc3MgPT0gTlBTY3JpcHRPYmplY3RDbGFzcykgewotICAgICAgICBKYXZhU2NyaXB0T2JqZWN0
KiBvYmogPSByZWludGVycHJldF9jYXN0PEphdmFTY3JpcHRPYmplY3QqPihvKTsgCi0KLSAgICAg
ICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9vdE9iamVjdDsKLSAgICAgICAgaWYg
KCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9i
YWxPYmplY3QoKTsKLSAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgICAg
ICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKLQotICAgICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCA9IGdsb2JhbE9iamVjdDsKLSAgICAgICAgU3RyaW5nIHNjcmlwdFN0cmluZyA9IGNvbnZl
cnROUFN0cmluZ1RvVVRGMTYocyk7Ci0gICAgICAgIAotICAgICAgICBKU1ZhbHVlIHJldHVyblZh
bHVlID0gSlNDOjpldmFsdWF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6Om1ha2VTb3VyY2Uo
c2NyaXB0U3RyaW5nLCB7IH0pLCBKU0M6OkpTVmFsdWUoKSk7Ci0KLSAgICAgICAgY29udmVydFZh
bHVlVG9OUFZhcmlhbnQobGV4aWNhbEdsb2JhbE9iamVjdCwgcmV0dXJuVmFsdWUsIHZhcmlhbnQp
OwotICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBWT0lEX1RPX05QVkFSSUFOVCgqdmFyaWFudCk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1ib29sIF9OUE5fR2V0UHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgTlBJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZSwgTlBWYXJpYW50KiB2YXJpYW50KQotewotICAgIGlmIChvLT5f
Y2xhc3MgPT0gTlBTY3JpcHRPYmplY3RDbGFzcykgewotICAgICAgICBKYXZhU2NyaXB0T2JqZWN0
KiBvYmogPSByZWludGVycHJldF9jYXN0PEphdmFTY3JpcHRPYmplY3QqPihvKTsgCi0KLSAgICAg
ICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9vdE9iamVjdDsKLSAgICAgICAgaWYg
KCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9i
YWxPYmplY3QoKTsKLSAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgICAg
ICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKLQotICAgICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCA9IGdsb2JhbE9iamVjdDsKLSAgICAgICAgSWRlbnRpZmllclJlcCogaSA9IHN0YXRpY19j
YXN0PElkZW50aWZpZXJSZXAqPihwcm9wZXJ0eU5hbWUpOwotICAgICAgICAKLSAgICAgICAgSlNW
YWx1ZSByZXN1bHQ7Ci0gICAgICAgIGlmIChpLT5pc1N0cmluZygpKQotICAgICAgICAgICAgcmVz
dWx0ID0gb2JqLT5pbXAtPmdldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyRnJvbU5Q
SWRlbnRpZmllcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBpLT5zdHJpbmcoKSkpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICByZXN1bHQgPSBvYmotPmltcC0+Z2V0KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PHVpbnQzMl90PihpLT5udW1iZXIoKSkpOwotCi0gICAgICAgIGNvbnZl
cnRWYWx1ZVRvTlBWYXJpYW50KGxleGljYWxHbG9iYWxPYmplY3QsIHJlc3VsdCwgdmFyaWFudCk7
Ci0gICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIGlmIChvLT5fY2xhc3MtPmhhc1Byb3BlcnR5ICYmIG8tPl9jbGFzcy0+Z2V0
UHJvcGVydHkpIHsKLSAgICAgICAgaWYgKG8tPl9jbGFzcy0+aGFzUHJvcGVydHkobywgcHJvcGVy
dHlOYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBvLT5fY2xhc3MtPmdldFByb3BlcnR5KG8sIHBy
b3BlcnR5TmFtZSwgdmFyaWFudCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBWT0lEX1RPX05QVkFSSUFOVCgqdmFyaWFudCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIF9OUE5fU2V0UHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgTlBJZGVudGlmaWVyIHByb3Bl
cnR5TmFtZSwgY29uc3QgTlBWYXJpYW50KiB2YXJpYW50KQotewotICAgIGlmIChvLT5fY2xhc3Mg
PT0gTlBTY3JpcHRPYmplY3RDbGFzcykgewotICAgICAgICBKYXZhU2NyaXB0T2JqZWN0KiBvYmog
PSByZWludGVycHJldF9jYXN0PEphdmFTY3JpcHRPYmplY3QqPihvKTsgCi0KLSAgICAgICAgUm9v
dE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9vdE9iamVjdDsKLSAgICAgICAgaWYgKCFyb290
T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKTsKLSAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKLQotICAgICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9
IGdsb2JhbE9iamVjdDsKLSAgICAgICAgSWRlbnRpZmllclJlcCogaSA9IHN0YXRpY19jYXN0PElk
ZW50aWZpZXJSZXAqPihwcm9wZXJ0eU5hbWUpOwotCi0gICAgICAgIGlmIChpLT5pc1N0cmluZygp
KSB7Ci0gICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmotPmltcCk7Ci0gICAgICAg
ICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUodm0pLT5wdXQob2JqLT5pbXAsIGxleGljYWxHbG9i
YWxPYmplY3QsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGxleGljYWxHbG9iYWxPYmplY3Qs
IGktPnN0cmluZygpKSwgY29udmVydE5QVmFyaWFudFRvVmFsdWUobGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFyaWFudCwgcm9vdE9iamVjdCksIHNsb3QpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIG9iai0+aW1wLT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgob2JqLT5pbXAsIGxleGlj
YWxHbG9iYWxPYmplY3QsIGktPm51bWJlcigpLCBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YXJpYW50LCByb290T2JqZWN0KSwgZmFsc2UpOwotICAgICAgICBz
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBpZiAoby0+X2NsYXNzLT5zZXRQcm9wZXJ0eSkKLSAgICAgICAgcmV0dXJuIG8tPl9jbGFzcy0+
c2V0UHJvcGVydHkobywgcHJvcGVydHlOYW1lLCB2YXJpYW50KTsKLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBfTlBOX1JlbW92ZVByb3BlcnR5KE5QUCwgTlBPYmplY3QqIG8sIE5QSWRl
bnRpZmllciBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaWYgKG8tPl9jbGFzcyA9PSBOUFNjcmlwdE9i
amVjdENsYXNzKSB7Ci0gICAgICAgIEphdmFTY3JpcHRPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8SmF2YVNjcmlwdE9iamVjdCo+KG8pOyAKLQotICAgICAgICBSb290T2JqZWN0KiByb290
T2JqZWN0ID0gb2JqLT5yb290T2JqZWN0OwotICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJv
b3RPYmplY3QtPmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOwotICAgICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0g
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0
OwotCi0gICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVw
Kj4ocHJvcGVydHlOYW1lKTsKLSAgICAgICAgaWYgKGktPmlzU3RyaW5nKCkpIHsKLSAgICAgICAg
ICAgIGlmICghb2JqLT5pbXAtPmhhc1Byb3BlcnR5KGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50
aWZpZXJGcm9tTlBJZGVudGlmaWVyKGxleGljYWxHbG9iYWxPYmplY3QsIGktPnN0cmluZygpKSkp
IHsKLSAgICAgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGlmICghb2JqLT5pbXAtPmhhc1Byb3BlcnR5KGxleGljYWxHbG9iYWxPYmplY3QsIHN0
YXRpY19jYXN0PHVpbnQzMl90PihpLT5udW1iZXIoKSkpKSB7Ci0gICAgICAgICAgICAgICAgc2Nv
cGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaS0+aXNTdHJpbmcoKSkKLSAgICAg
ICAgICAgIEpTQ2VsbDo6ZGVsZXRlUHJvcGVydHkob2JqLT5pbXAsIGxleGljYWxHbG9iYWxPYmpl
Y3QsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGxleGljYWxHbG9iYWxPYmplY3QsIGktPnN0
cmluZygpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9iai0+aW1wLT5tZXRob2RUYWJs
ZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleChvYmotPmltcCwgbGV4aWNhbEdsb2JhbE9iamVj
dCwgaS0+bnVtYmVyKCkpOwotCi0gICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgX05Q
Tl9IYXNQcm9wZXJ0eShOUFAsIE5QT2JqZWN0KiBvLCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1l
KQotewotICAgIGlmIChvLT5fY2xhc3MgPT0gTlBTY3JpcHRPYmplY3RDbGFzcykgewotICAgICAg
ICBKYXZhU2NyaXB0T2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEphdmFTY3JpcHRPYmpl
Y3QqPihvKTsgCi0KLSAgICAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9vdE9i
amVjdDsKLSAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYXV0byBnbG9iYWxPYmplY3Qg
PSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQotICAgICAgICBKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdDsKLSAgICAgICAgSWRlbnRpZmll
clJlcCogaSA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihwcm9wZXJ0eU5hbWUpOwotICAg
ICAgICBpZiAoaS0+aXNTdHJpbmcoKSkgewotICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBvYmot
PmltcC0+aGFzUHJvcGVydHkobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllckZyb21OUElk
ZW50aWZpZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgaS0+c3RyaW5nKCkpKTsKLSAgICAgICAgICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
ICAgICB9Ci0KLSAgICAgICAgYm9vbCByZXN1bHQgPSBvYmotPmltcC0+aGFzUHJvcGVydHkobGV4
aWNhbEdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGktPm51bWJlcigpKSk7Ci0g
ICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfQotCi0gICAgaWYgKG8tPl9jbGFzcy0+aGFzUHJvcGVydHkpCi0gICAgICAgIHJldHVybiBv
LT5fY2xhc3MtPmhhc1Byb3BlcnR5KG8sIHByb3BlcnR5TmFtZSk7Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgX05QTl9IYXNNZXRob2QoTlBQLCBOUE9iamVjdCogbywgTlBJZGVudGlm
aWVyIG1ldGhvZE5hbWUpCi17Ci0gICAgaWYgKG8tPl9jbGFzcyA9PSBOUFNjcmlwdE9iamVjdENs
YXNzKSB7Ci0gICAgICAgIEphdmFTY3JpcHRPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
SmF2YVNjcmlwdE9iamVjdCo+KG8pOyAKLQotICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3Rh
dGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KG1ldGhvZE5hbWUpOwotICAgICAgICBpZiAoIWktPmlz
U3RyaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgUm9vdE9iamVj
dCogcm9vdE9iamVjdCA9IG9iai0+cm9vdE9iamVjdDsKLSAgICAgICAgaWYgKCFyb290T2JqZWN0
IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsK
LSAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKLQotICAgICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGdsb2Jh
bE9iamVjdDsKLSAgICAgICAgSlNWYWx1ZSBmdW5jID0gb2JqLT5pbXAtPmdldChsZXhpY2FsR2xv
YmFsT2JqZWN0LCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCBpLT5zdHJpbmcoKSkpOwotICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgICAg
ICByZXR1cm4gIWZ1bmMuaXNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG8tPl9j
bGFzcy0+aGFzTWV0aG9kKQotICAgICAgICByZXR1cm4gby0+X2NsYXNzLT5oYXNNZXRob2Qobywg
bWV0aG9kTmFtZSk7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIF9OUE5fU2V0
RXhjZXB0aW9uKE5QT2JqZWN0KiwgY29uc3QgTlBVVEY4KiBtZXNzYWdlKQotewotICAgIC8vIEln
bm9yaW5nIHRoZSBOUE9iamVjdCBwYXJhbSBpcyBjb25zaXN0ZW50IHdpdGggdGhlIE1vemlsbGEg
aW1wbGVtZW50YXRpb24uCi0gICAgU3RyaW5nIGV4Y2VwdGlvbihtZXNzYWdlKTsKLSAgICBDSW5z
dGFuY2U6OnNldEdsb2JhbEV4Y2VwdGlvbihleGNlcHRpb24pOwotfQotCi1ib29sIF9OUE5fRW51
bWVyYXRlKE5QUCwgTlBPYmplY3QqIG8sIE5QSWRlbnRpZmllcioqIGlkZW50aWZpZXIsIHVpbnQz
Ml90KiBjb3VudCkKLXsKLSAgICBpZiAoby0+X2NsYXNzID09IE5QU2NyaXB0T2JqZWN0Q2xhc3Mp
IHsKLSAgICAgICAgSmF2YVNjcmlwdE9iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxKYXZh
U2NyaXB0T2JqZWN0Kj4obyk7IAotICAgICAgICAKLSAgICAgICAgUm9vdE9iamVjdCogcm9vdE9i
amVjdCA9IG9iai0+cm9vdE9iamVjdDsKLSAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290
T2JqZWN0LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAot
ICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOwot
ICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrKHZtKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OwotCi0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFs
T2JqZWN0OwotICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKHZtLCBQcm9w
ZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7Ci0KLSAg
ICAgICAgb2JqLT5pbXAtPmdldFByb3BlcnR5TmFtZXMobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7Ci0gICAgICAgIHVu
c2lnbmVkIHNpemUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocHJvcGVydHlOYW1lcy5zaXplKCkp
OwotICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmVhbGx5IGNhbGwgTlBOX01lbUFsbG9j
IGJ1dCB0aGF0J3MgaW4gV2ViS2l0Ci0gICAgICAgIE5QSWRlbnRpZmllciogaWRlbnRpZmllcnMg
PSBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXIqPihtYWxsb2Moc2l6ZW9mKE5QSWRlbnRpZmllcikg
KiBzaXplKSk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6
ZTsgKytpKQotICAgICAgICAgICAgaWRlbnRpZmllcnNbaV0gPSBfTlBOX0dldFN0cmluZ0lkZW50
aWZpZXIocHJvcGVydHlOYW1lc1tpXS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgICAg
ICAqaWRlbnRpZmllciA9IGlkZW50aWZpZXJzOwotICAgICAgICAqY291bnQgPSBzaXplOwotCi0g
ICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICAKLSAgICBpZiAoTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT05fSEFTX0VOVU0oby0+X2Ns
YXNzKSAmJiBvLT5fY2xhc3MtPmVudW1lcmF0ZSkKLSAgICAgICAgcmV0dXJuIG8tPl9jbGFzcy0+
ZW51bWVyYXRlKG8sIGlkZW50aWZpZXIsIGNvdW50KTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWJvb2wgX05QTl9Db25zdHJ1Y3QoTlBQLCBOUE9iamVjdCogbywgY29uc3QgTlBWYXJp
YW50KiBhcmdzLCB1aW50MzJfdCBhcmdDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
aWYgKG8tPl9jbGFzcyA9PSBOUFNjcmlwdE9iamVjdENsYXNzKSB7Ci0gICAgICAgIEphdmFTY3Jp
cHRPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlwdE9iamVjdCo+KG8pOwot
ICAgICAgICAKLSAgICAgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7Ci0gICAgICAgIAot
ICAgICAgICAvLyBMb29rdXAgdGhlIGNvbnN0cnVjdG9yIG9iamVjdC4KLSAgICAgICAgUm9vdE9i
amVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9vdE9iamVjdDsKLSAgICAgICAgaWYgKCFyb290T2Jq
ZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3Qo
KTsKLSAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgICAgICBKU0xvY2tI
b2xkZXIgbG9jayh2bSk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKLQotICAgICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGds
b2JhbE9iamVjdDsKLSAgICAgICAgCi0gICAgICAgIC8vIENhbGwgdGhlIGNvbnN0cnVjdG9yIG9i
amVjdC4KLSAgICAgICAgSlNWYWx1ZSBjb25zdHJ1Y3RvciA9IG9iai0+aW1wOwotICAgICAgICBh
dXRvIGNvbnN0cnVjdERhdGEgPSBnZXRDb25zdHJ1Y3REYXRhKHZtLCBjb25zdHJ1Y3Rvcik7Ci0g
ICAgICAgIGlmIChjb25zdHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmdMaXN0OwotICAgICAgICBnZXRMaXN0RnJvbVZhcmlhbnRBcmdzKGxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3MsIGFyZ0NvdW50LCByb290T2JqZWN0LCBhcmdMaXN0KTsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIWFyZ0xpc3QuaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICAgICAgSlNW
YWx1ZSByZXN1bHRWID0gSlNDOjpjb25zdHJ1Y3QobGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3Ry
dWN0b3IsIGNvbnN0cnVjdERhdGEsIGFyZ0xpc3QpOwotICAgICAgICAKLSAgICAgICAgLy8gQ29u
dmVydCBhbmQgcmV0dXJuIHRoZSByZXN1bHQuCi0gICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJp
YW50KGxleGljYWxHbG9iYWxPYmplY3QsIHJlc3VsdFYsIHJlc3VsdCk7Ci0gICAgICAgIHNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAg
ICBpZiAoTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT05fSEFTX0NUT1Ioby0+X2NsYXNzKSAmJiBvLT5f
Y2xhc3MtPmNvbnN0cnVjdCkKLSAgICAgICAgcmV0dXJuIG8tPl9jbGFzcy0+Y29uc3RydWN0KG8s
IGFyZ3MsIGFyZ0NvdW50LCByZXN1bHQpOwotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
fSAvLyBleHRlcm4gIkMiCi0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
TlBfanNvYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmYxNmRlYjUwM2UzYzY5MDU0YWJiMzA1NmJlMWRl
ZWY4OWY0ZmMxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5oCisrKyAvZGV2L251bGwKQEAgLTEs
NTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2lmbmRlZiBOUF9KU09CSkVDVF9ICi0jZGVmaW5lIE5QX0pTT0JKRUNUX0gKLQot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAibnBydW50aW1lX2lu
dGVybmFsLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci1j
bGFzcyBKU09iamVjdDsKLW5hbWVzcGFjZSBCaW5kaW5ncyB7Ci1jbGFzcyBSb290T2JqZWN0Owot
fQotfQotCi1zdHJ1Y3QgSmF2YVNjcmlwdE9iamVjdAotewotICAgIE5QT2JqZWN0IG9iamVjdDsK
LSAgICBKU0M6OkpTT2JqZWN0KiBpbXA7Ci0gICAgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCog
cm9vdE9iamVjdDsKLX07Ci0KLWV4dGVybiAiQyIgewotZXh0ZXJuIE5QQ2xhc3MqIE5QU2NyaXB0
T2JqZWN0Q2xhc3M7Ci0KLVdFQkNPUkVfRVhQT1JUIE5QT2JqZWN0KiBfTlBOX0NyZWF0ZVNjcmlw
dE9iamVjdChOUFAsIEpTQzo6SlNPYmplY3QqLCBSZWZQdHI8SlNDOjpCaW5kaW5nczo6Um9vdE9i
amVjdD4mJik7Ci1XRUJDT1JFX0VYUE9SVCBOUE9iamVjdCogX05QTl9DcmVhdGVOb1NjcmlwdE9i
amVjdCh2b2lkKTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL0NSdW50aW1lT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL0NSdW50aW1lT2JqZWN0LmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI0ZmE1YWRlNTUwZjNlYmNhMmIyYWNlMDg1NjZj
ODJlMjdlNzBmNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9DUnVudGltZU9iamVjdC5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDUnVudGltZU9iamVjdC5o
IgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKLSNpbmNsdWRlICJjX2luc3RhbmNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvT2JqZWN0UHJvdG90eXBlLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotbmFtZXNwYWNlIEJpbmRp
bmdzIHsKLQotY29uc3QgQ2xhc3NJbmZvIENSdW50aW1lT2JqZWN0OjpzX2luZm8gPSB7ICJDUnVu
dGltZU9iamVjdCIsICZSdW50aW1lT2JqZWN0OjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoQ1J1bnRpbWVPYmplY3QpIH07Ci0KLUNSdW50aW1lT2JqZWN0OjpD
UnVudGltZU9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWZQdHI8Q0luc3Rh
bmNlPiYmIGluc3RhbmNlKQotICAgIDogUnVudGltZU9iamVjdCh2bSwgc3RydWN0dXJlLCBXVEZN
b3ZlKGluc3RhbmNlKSkKLXsKLX0KLQotdm9pZCBDUnVudGltZU9iamVjdDo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOwotfQotCi1DSW5zdGFuY2UqIENSdW50aW1lT2JqZWN0Ojpn
ZXRJbnRlcm5hbENJbnN0YW5jZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENJ
bnN0YW5jZSo+KGdldEludGVybmFsSW5zdGFuY2UoKSk7Ci19Ci0KLX0KLX0KLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9DUnVudGltZU9iamVjdC5oIGIvU291
cmNlL1dlYkNvcmUvYnJpZGdlL2MvQ1J1bnRpbWVPYmplY3QuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMTEyMjdlY2RiZjk0ZmM2OWEwN2VjN2VhZGQ4OWQwMDAxMWRmZjBkZi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvYy9DUnVudGltZU9iamVjdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IENSdW50aW1lT2JqZWN0X2gKLSNkZWZpbmUgQ1J1bnRpbWVPYmplY3RfaAotCi0jaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNs
dWRlICJydW50aW1lX29iamVjdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3Mg
SlNET01HbG9iYWxPYmplY3Q7Ci19Ci0KLW5hbWVzcGFjZSBKU0MgewotbmFtZXNwYWNlIEJpbmRp
bmdzIHsKLQotY2xhc3MgQ0luc3RhbmNlOwotCi1jbGFzcyBDUnVudGltZU9iamVjdCBmaW5hbCA6
IHB1YmxpYyBSdW50aW1lT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlID0gUnVudGlt
ZU9iamVjdDsKLQotICAgIHN0YXRpYyBDUnVudGltZU9iamVjdCogY3JlYXRlKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZlB0cjxDSW5zdGFuY2U+JiYgaW5zdGFuY2UpCi0gICAgewot
ICAgICAgICBDUnVudGltZU9iamVjdCogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8Q1J1bnRpbWVPYmplY3Q+KHZtLmhlYXApKSBDUnVudGltZU9iamVjdCh2bSwgc3RydWN0dXJl
LCBXVEZNb3ZlKGluc3RhbmNlKSk7Ci0gICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0p
OwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLQotICAgIENJbnN0YW5jZSogZ2V0SW50
ZXJuYWxDSW5zdGFuY2UoKSBjb25zdDsKLQotICAgIERFQ0xBUkVfSU5GTzsKLQotICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBD
UnVudGltZU9iamVjdChWTSYsIFN0cnVjdHVyZSosIFJlZlB0cjxDSW5zdGFuY2U+JiYpOwotICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLX07Ci0KLX0KLX0KLQotI2VuZGlmCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfY2xhc3MuY3BwIGIvU291cmNl
L1dlYkNvcmUvYnJpZGdlL2MvY19jbGFzcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGFhNTZlMmZkZTg1NTc3YWNmOWMwNDc0Yzg5ODc3ZjRlMGQ1YzUxMDEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdl
L2MvY19jbGFzcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJj
X2NsYXNzLmgiCi0KLSNpbmNsdWRlICJjX2luc3RhbmNlLmgiCi0jaW5jbHVkZSAiY19ydW50aW1l
LmgiCi0jaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JZGVudGlmaWVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSlNWYWx1ZUlubGlu
ZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEJpbmRpbmdzIHsKLQotQ0NsYXNz
OjpDQ2xhc3MoTlBDbGFzcyogYUNsYXNzKQotewotICAgIG1faXNhID0gYUNsYXNzOwotfQotCi1D
Q2xhc3M6On5DQ2xhc3MoKQotewotICAgIG1fbWV0aG9kcy5jbGVhcigpOwotICAgIG1fZmllbGRz
LmNsZWFyKCk7Ci19Ci0KLXR5cGVkZWYgSGFzaE1hcDxOUENsYXNzKiwgQ0NsYXNzKj4gQ2xhc3Nl
c0J5SXNBTWFwOwotc3RhdGljIENsYXNzZXNCeUlzQU1hcCogY2xhc3Nlc0J5SXNBID0gMDsKLQot
Q0NsYXNzKiBDQ2xhc3M6OmNsYXNzRm9ySXNBKE5QQ2xhc3MqIGlzYSkKLXsKLSAgICBpZiAoIWNs
YXNzZXNCeUlzQSkKLSAgICAgICAgY2xhc3Nlc0J5SXNBID0gbmV3IENsYXNzZXNCeUlzQU1hcDsK
LQotICAgIENDbGFzcyogYUNsYXNzID0gY2xhc3Nlc0J5SXNBLT5nZXQoaXNhKTsKLSAgICBpZiAo
IWFDbGFzcykgewotICAgICAgICBhQ2xhc3MgPSBuZXcgQ0NsYXNzKGlzYSk7Ci0gICAgICAgIGNs
YXNzZXNCeUlzQS0+c2V0KGlzYSwgYUNsYXNzKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYUNsYXNz
OwotfQotCi1NZXRob2QqIENDbGFzczo6bWV0aG9kTmFtZWQoUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgSW5zdGFuY2UqIGluc3RhbmNlKSBjb25zdAotewotICAgIFN0cmluZyBuYW1lKHByb3Bl
cnR5TmFtZS5wdWJsaWNOYW1lKCkpOwotICAgIGlmIChuYW1lLmlzTnVsbCgpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBpZiAoTWV0aG9kKiBtZXRob2QgPSBtX21ldGhvZHMu
Z2V0KG5hbWUuaW1wbCgpKSkKLSAgICAgICAgcmV0dXJuIG1ldGhvZDsKLQotICAgIE5QSWRlbnRp
ZmllciBpZGVudCA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcihuYW1lLmFzY2lpKCkuZGF0YSgp
KTsKLSAgICBjb25zdCBDSW5zdGFuY2UqIGluc3QgPSBzdGF0aWNfY2FzdDxjb25zdCBDSW5zdGFu
Y2UqPihpbnN0YW5jZSk7Ci0gICAgTlBPYmplY3QqIG9iaiA9IGluc3QtPmdldE9iamVjdCgpOwot
ICAgIGlmIChtX2lzYS0+aGFzTWV0aG9kICYmIG1faXNhLT5oYXNNZXRob2Qob2JqLCBpZGVudCkp
IHsKLSAgICAgICAgYXV0byBtZXRob2QgPSBtYWtlVW5pcXVlPENNZXRob2Q+KGlkZW50KTsKLSAg
ICAgICAgQ01ldGhvZCogcmV0ID0gbWV0aG9kLmdldCgpOwotICAgICAgICBtX21ldGhvZHMuc2V0
KG5hbWUuaW1wbCgpLCBXVEZNb3ZlKG1ldGhvZCkpOwotICAgICAgICByZXR1cm4gcmV0OwotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotRmllbGQqIENDbGFzczo6ZmllbGRO
YW1lZChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBJbnN0YW5jZSogaW5zdGFuY2UpIGNvbnN0
Ci17Ci0gICAgU3RyaW5nIG5hbWUocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Ci0gICAgaWYg
KG5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIGlmIChG
aWVsZCogZmllbGQgPSBtX2ZpZWxkcy5nZXQobmFtZS5pbXBsKCkpKQotICAgICAgICByZXR1cm4g
ZmllbGQ7Ci0KLSAgICBOUElkZW50aWZpZXIgaWRlbnQgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZp
ZXIobmFtZS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgY29uc3QgQ0luc3RhbmNlKiBpbnN0ID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgQ0luc3RhbmNlKj4oaW5zdGFuY2UpOwotICAgIE5QT2JqZWN0KiBvYmog
PSBpbnN0LT5nZXRPYmplY3QoKTsKLSAgICBpZiAobV9pc2EtPmhhc1Byb3BlcnR5ICYmIG1faXNh
LT5oYXNQcm9wZXJ0eShvYmosIGlkZW50KSkgewotICAgICAgICBhdXRvIGZpZWxkID0gbWFrZVVu
aXF1ZTxDRmllbGQ+KGlkZW50KTsKLSAgICAgICAgQ0ZpZWxkKiByZXQgPSBmaWVsZC5nZXQoKTsK
LSAgICAgICAgbV9maWVsZHMuc2V0KG5hbWUuaW1wbCgpLCBXVEZNb3ZlKGZpZWxkKSk7Ci0gICAg
ICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLX0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCaW5kaW5ncwotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2NsYXNzLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2NsYXNzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGQ0YjZiMGVlNmVhMzJkYTc0OTNhNmE1Y2U2NGI4N2U1OWIwNTMwMDAuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
YnJpZGdlL2MvY19jbGFzcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBCSU5ESU5H
U19DX0NMQVNTX0hfCi0jZGVmaW5lIEJJTkRJTkdTX0NfQ0xBU1NfSF8KLQotI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiQnJpZGdlSlNDLmgiCi0jaW5jbHVkZSAi
bnBydW50aW1lX2ludGVybmFsLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLQotbmFtZXNw
YWNlIEpTQyB7Ci1uYW1lc3BhY2UgQmluZGluZ3MgewotCi1jbGFzcyBDQ2xhc3MgOiBwdWJsaWMg
Q2xhc3MgewotcHJvdGVjdGVkOgotICAgIENDbGFzcyhOUENsYXNzKik7IC8vIFVzZSBjbGFzc0Zv
cklzQSB0byBjcmVhdGUgYSBDQ2xhc3MuCi0gICAgCi1wdWJsaWM6Ci0gICAgc3RhdGljIENDbGFz
cyogY2xhc3NGb3JJc0EoTlBDbGFzcyopOwotICAgIHZpcnR1YWwgfkNDbGFzcygpOwotCi0gICAg
TWV0aG9kKiBtZXRob2ROYW1lZChQcm9wZXJ0eU5hbWUsIEluc3RhbmNlKikgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgRmllbGQqIGZpZWxkTmFtZWQoUHJvcGVydHlOYW1lLCBJbnN0YW5jZSopIGNvbnN0
IG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIE5QQ2xhc3MqIG1faXNhOwotICAgIG11dGFibGUg
SGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIHN0ZDo6dW5pcXVlX3B0cjxNZXRob2Q+PiBtX21l
dGhvZHM7Ci0gICAgbXV0YWJsZSBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgc3RkOjp1bmlx
dWVfcHRyPEZpZWxkPj4gbV9maWVsZHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBCaW5kaW5ncwot
fSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3Rh
bmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTc2ZTE5ODU2MTJhYzU5OGYxZjhmOTZlZjNhYzVjMjU2
ZmRkY2JkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
Mzg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLQotI2luY2x1ZGUgImNfaW5zdGFuY2UuaCIKLQotI2luY2x1ZGUgIkNSdW50aW1lT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiSWRlbnRpZmllclJlcC5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgotI2luY2x1ZGUgImNfY2xhc3MuaCIKLSNpbmNsdWRlICJjX3J1bnRpbWUuaCIKLSNpbmNs
dWRlICJjX3V0aWxpdHkuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI2luY2x1ZGUg
InJ1bnRpbWVfbWV0aG9kLmgiCi0jaW5jbHVkZSAicnVudGltZV9yb290LmgiCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvQXJnTGlzdC5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NhbGxG
cmFtZS5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Vycm9yLmg+Ci0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0xvY2suaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Qcm9wZXJ0eU5hbWVBcnJheS5o
PgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBKU0MgewotbmFt
ZXNwYWNlIEJpbmRpbmdzIHsKLQotc3RhdGljIFN0cmluZyYgZ2xvYmFsRXhjZXB0aW9uU3RyaW5n
KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBleGNlcHRpb25TdHI7Ci0g
ICAgcmV0dXJuIGV4Y2VwdGlvblN0cjsKLX0KLQotdm9pZCBDSW5zdGFuY2U6OnNldEdsb2JhbEV4
Y2VwdGlvbihTdHJpbmcgZXhjZXB0aW9uKQotewotICAgIGdsb2JhbEV4Y2VwdGlvblN0cmluZygp
ID0gZXhjZXB0aW9uOwotfQotCi12b2lkIENJbnN0YW5jZTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRv
RXhlY1N0YXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KQotewotICAgIGlm
IChnbG9iYWxFeGNlcHRpb25TdHJpbmcoKS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgewotICAgICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgICAg
ICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICAgICAgdGhyb3dFeGNlcHRpb24obGV4aWNhbEdsb2JhbE9iamVj
dCwgc2NvcGUsIGNyZWF0ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbEV4Y2VwdGlv
blN0cmluZygpKSk7Ci0gICAgfQotCi0gICAgZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkgPSBTdHJp
bmcoKTsKLX0KLQotQ0luc3RhbmNlOjpDSW5zdGFuY2UoTlBPYmplY3QqIG8sIFJlZlB0cjxSb290
T2JqZWN0PiYmIHJvb3RPYmplY3QpCi0gICAgOiBJbnN0YW5jZShXVEZNb3ZlKHJvb3RPYmplY3Qp
KQotewotICAgIF9vYmplY3QgPSBfTlBOX1JldGFpbk9iamVjdChvKTsKLSAgICBfY2xhc3MgPSAw
OwotfQotCi1DSW5zdGFuY2U6On5DSW5zdGFuY2UoKQotewotICAgIF9OUE5fUmVsZWFzZU9iamVj
dChfb2JqZWN0KTsKLX0KLQotUnVudGltZU9iamVjdCogQ0luc3RhbmNlOjpuZXdSdW50aW1lT2Jq
ZWN0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KQotewotICAgIC8vIEZJWE1F
OiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlIHVzZXMgdGhlIHByb3RvdHlwZSBvZmYgb2YgdGhl
IHdyb25nIGdsb2JhbCBvYmplY3QuCi0gICAgcmV0dXJuIENSdW50aW1lT2JqZWN0OjpjcmVhdGUo
bGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSwgV2ViQ29yZTo6ZGVwcmVjYXRlZEdldERPTVN0cnVj
dHVyZTxDUnVudGltZU9iamVjdD4obGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXMpOwotfQotCi1D
bGFzcyAqQ0luc3RhbmNlOjpnZXRDbGFzcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFfY2xhc3MpCi0g
ICAgICAgIF9jbGFzcyA9IENDbGFzczo6Y2xhc3NGb3JJc0EoX29iamVjdC0+X2NsYXNzKTsKLSAg
ICByZXR1cm4gX2NsYXNzOwotfQotCi1ib29sIENJbnN0YW5jZTo6c3VwcG9ydHNJbnZva2VEZWZh
dWx0TWV0aG9kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gX29iamVjdC0+X2NsYXNzLT5pbnZva2VE
ZWZhdWx0OwotfQotCi1jbGFzcyBDUnVudGltZU1ldGhvZCBmaW5hbCA6IHB1YmxpYyBSdW50aW1l
TWV0aG9kIHsKLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlID0gUnVudGltZU1ldGhvZDsKLQotICAg
IHN0YXRpYyBDUnVudGltZU1ldGhvZCogY3JlYXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5h
bWUsIEJpbmRpbmdzOjpNZXRob2QqIG1ldGhvZCkKLSAgICB7Ci0gICAgICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKLSAgICAgICAgLy8gRklYTUU6IGRlcHJlY2F0ZWRHZXRET01TdHJ1
Y3R1cmUgdXNlcyB0aGUgcHJvdG90eXBlIG9mZiBvZiB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdAot
ICAgICAgICAvLyBXZSBuZWVkIHRvIHBhc3MgaW4gdGhlIHJpZ2h0IGdsb2JhbCBvYmplY3QgZm9y
ICJpIi4KLSAgICAgICAgU3RydWN0dXJlKiBkb21TdHJ1Y3R1cmUgPSBXZWJDb3JlOjpkZXByZWNh
dGVkR2V0RE9NU3RydWN0dXJlPENSdW50aW1lTWV0aG9kPihsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
LSAgICAgICAgQ1J1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxDUnVudGltZU1ldGhvZD4odm0uaGVhcCkpIENSdW50aW1lTWV0aG9kKHZtLCBk
b21TdHJ1Y3R1cmUsIG1ldGhvZCk7Ci0gICAgICAgIHJ1bnRpbWVNZXRob2QtPmZpbmlzaENyZWF0
aW9uKHZtLCBuYW1lKTsKLSAgICAgICAgcmV0dXJuIHJ1bnRpbWVNZXRob2Q7Ci0gICAgfQotCi0g
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhJbnRlcm5hbEZ1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0K
LQotICAgIERFQ0xBUkVfSU5GTzsKLQotcHJpdmF0ZToKLSAgICBDUnVudGltZU1ldGhvZChWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCaW5kaW5nczo6TWV0aG9kKiBtZXRob2QpCi0gICAg
ICAgIDogUnVudGltZU1ldGhvZCh2bSwgc3RydWN0dXJlLCBtZXRob2QpCi0gICAgewotICAgIH0K
LQotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi0g
ICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgbmFtZSk7Ci0gICAgICAgIEFT
U0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0gICAgfQotfTsKLQotY29uc3QgQ2xhc3NJbmZv
IENSdW50aW1lTWV0aG9kOjpzX2luZm8gPSB7ICJDUnVudGltZU1ldGhvZCIsICZSdW50aW1lTWV0
aG9kOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoQ1J1bnRp
bWVNZXRob2QpIH07Ci0KLUpTVmFsdWUgQ0luc3RhbmNlOjpnZXRNZXRob2QoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0g
ICAgTWV0aG9kKiBtZXRob2QgPSBnZXRDbGFzcygpLT5tZXRob2ROYW1lZChwcm9wZXJ0eU5hbWUs
IHRoaXMpOwotICAgIHJldHVybiBDUnVudGltZU1ldGhvZDo6Y3JlYXRlKGxleGljYWxHbG9iYWxP
YmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCksIG1l
dGhvZCk7Ci19Ci0KLUpTVmFsdWUgQ0luc3RhbmNlOjppbnZva2VNZXRob2QoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBSdW50aW1lTWV0
aG9kKiBydW50aW1lTWV0aG9kKQotewotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qt
PnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAg
aWYgKCFhc09iamVjdChydW50aW1lTWV0aG9kKS0+aW5oZXJpdHM8Q1J1bnRpbWVNZXRob2Q+KHZt
KSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNj
b3BlLCAiQXR0ZW1wdCB0byBpbnZva2Ugbm9uLXBsdWctaW4gbWV0aG9kIG9uIHBsdWctaW4gb2Jq
ZWN0LiJfcyk7Ci0KLSAgICBDTWV0aG9kKiBtZXRob2QgPSBzdGF0aWNfY2FzdDxDTWV0aG9kKj4o
cnVudGltZU1ldGhvZC0+bWV0aG9kKCkpOwotICAgIEFTU0VSVChtZXRob2QpOwotCi0gICAgTlBJ
ZGVudGlmaWVyIGlkZW50ID0gbWV0aG9kLT5pZGVudGlmaWVyKCk7Ci0gICAgaWYgKCFfb2JqZWN0
LT5fY2xhc3MtPmhhc01ldGhvZChfb2JqZWN0LCBpZGVudCkpCi0gICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotCi0gICAgdW5zaWduZWQgY291bnQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKTsKLSAgICBWZWN0b3I8TlBWYXJpYW50LCA4PiBjQXJncyhjb3VudCk7Ci0KLSAgICB1bnNp
Z25lZCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICBjb252ZXJ0
VmFsdWVUb05QVmFyaWFudChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KGkpLCAmY0FyZ3NbaV0pOwotCi0gICAgLy8gSW52b2tlIHRoZSAnQycgbWV0aG9k
LgotICAgIGJvb2wgcmV0dmFsID0gdHJ1ZTsKLSAgICBOUFZhcmlhbnQgcmVzdWx0VmFyaWFudDsK
LSAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHRWYXJpYW50KTsKLQotICAgIHsKLSAgICAgICAg
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGxleGljYWxHbG9iYWxPYmplY3QpOwot
ICAgICAgICBBU1NFUlQoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwotICAgICAg
ICByZXR2YWwgPSBfb2JqZWN0LT5fY2xhc3MtPmludm9rZShfb2JqZWN0LCBpZGVudCwgY0FyZ3Mu
ZGF0YSgpLCBjb3VudCwgJnJlc3VsdFZhcmlhbnQpOwotICAgICAgICBtb3ZlR2xvYmFsRXhjZXB0
aW9uVG9FeGVjU3RhdGUobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgfQotCi0gICAgaWYgKCFy
ZXR2YWwpCi0gICAgICAgIHRocm93RXhjZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3Bl
LCBjcmVhdGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCAiRXJyb3IgY2FsbGluZyBtZXRob2Qg
b24gTlBPYmplY3QuIl9zKSk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAg
ICAgICAgX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlKCZjQXJnc1tpXSk7Ci0KLSAgICBKU1ZhbHVl
IHJlc3VsdFZhbHVlID0gY29udmVydE5QVmFyaWFudFRvVmFsdWUobGV4aWNhbEdsb2JhbE9iamVj
dCwgJnJlc3VsdFZhcmlhbnQsIG1fcm9vdE9iamVjdC5nZXQoKSk7Ci0gICAgX05QTl9SZWxlYXNl
VmFyaWFudFZhbHVlKCZyZXN1bHRWYXJpYW50KTsKLSAgICByZXR1cm4gcmVzdWx0VmFsdWU7Ci19
Ci0KLQotSlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2QoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIFZN
JiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKCFfb2JqZWN0LT5fY2xhc3MtPmludm9rZURl
ZmF1bHQpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgdW5zaWduZWQgY291
bnQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsKLSAgICBWZWN0b3I8TlBWYXJpYW50LCA4
PiBjQXJncyhjb3VudCk7Ci0KLSAgICB1bnNpZ25lZCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQotICAgICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChsZXhpY2FsR2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLCAmY0FyZ3NbaV0pOwotCi0g
ICAgLy8gSW52b2tlIHRoZSAnQycgbWV0aG9kLgotICAgIGJvb2wgcmV0dmFsID0gdHJ1ZTsKLSAg
ICBOUFZhcmlhbnQgcmVzdWx0VmFyaWFudDsKLSAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHRW
YXJpYW50KTsKLSAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICAgICAgQVNTRVJUKGdsb2JhbEV4Y2VwdGlvblN0
cmluZygpLmlzTnVsbCgpKTsKLSAgICAgICAgcmV0dmFsID0gX29iamVjdC0+X2NsYXNzLT5pbnZv
a2VEZWZhdWx0KF9vYmplY3QsIGNBcmdzLmRhdGEoKSwgY291bnQsICZyZXN1bHRWYXJpYW50KTsK
LSAgICAgICAgbW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGxleGljYWxHbG9iYWxPYmpl
Y3QpOwotICAgIH0KLQotICAgIGlmICghcmV0dmFsKQotICAgICAgICB0aHJvd0V4Y2VwdGlvbihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgIkVycm9yIGNhbGxpbmcgbWV0aG9kIG9uIE5QT2JqZWN0LiJfcykpOwotCi0gICAgZm9yIChp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSgm
Y0FyZ3NbaV0pOwotCi0gICAgSlNWYWx1ZSByZXN1bHRWYWx1ZSA9IGNvbnZlcnROUFZhcmlhbnRU
b1ZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsICZyZXN1bHRWYXJpYW50LCBtX3Jvb3RPYmplY3Qu
Z2V0KCkpOwotICAgIF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSgmcmVzdWx0VmFyaWFudCk7Ci0g
ICAgcmV0dXJuIHJlc3VsdFZhbHVlOwotfQotCi1ib29sIENJbnN0YW5jZTo6c3VwcG9ydHNDb25z
dHJ1Y3QoKSBjb25zdAotewotICAgIHJldHVybiBfb2JqZWN0LT5fY2xhc3MtPmNvbnN0cnVjdDsK
LX0KLQotSlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZUNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwgY29uc3QgQXJnTGlzdCYgYXJncykKLXsK
LSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmICghX29iamVjdC0+X2NsYXNzLT5j
b25zdHJ1Y3QpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgdW5zaWduZWQg
Y291bnQgPSBhcmdzLnNpemUoKTsKLSAgICBWZWN0b3I8TlBWYXJpYW50LCA4PiBjQXJncyhjb3Vu
dCk7Ci0KLSAgICB1bnNpZ25lZCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQot
ICAgICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmdz
LmF0KGkpLCAmY0FyZ3NbaV0pOwotCi0gICAgLy8gSW52b2tlIHRoZSAnQycgbWV0aG9kLgotICAg
IGJvb2wgcmV0dmFsID0gdHJ1ZTsKLSAgICBOUFZhcmlhbnQgcmVzdWx0VmFyaWFudDsKLSAgICBW
T0lEX1RPX05QVkFSSUFOVChyZXN1bHRWYXJpYW50KTsKLSAgICB7Ci0gICAgICAgIEpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICAgICAg
QVNTRVJUKGdsb2JhbEV4Y2VwdGlvblN0cmluZygpLmlzTnVsbCgpKTsKLSAgICAgICAgcmV0dmFs
ID0gX29iamVjdC0+X2NsYXNzLT5jb25zdHJ1Y3QoX29iamVjdCwgY0FyZ3MuZGF0YSgpLCBjb3Vu
dCwgJnJlc3VsdFZhcmlhbnQpOwotICAgICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3Rh
dGUobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgfQotCi0gICAgaWYgKCFyZXR2YWwpCi0gICAg
ICAgIHRocm93RXhjZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCAiRXJyb3IgY2FsbGluZyBtZXRob2Qgb24gTlBPYmplY3Qu
Il9zKSk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgX05QTl9S
ZWxlYXNlVmFyaWFudFZhbHVlKCZjQXJnc1tpXSk7Ci0KLSAgICBKU1ZhbHVlIHJlc3VsdFZhbHVl
ID0gY29udmVydE5QVmFyaWFudFRvVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgJnJlc3VsdFZh
cmlhbnQsIG1fcm9vdE9iamVjdC5nZXQoKSk7Ci0gICAgX05QTl9SZWxlYXNlVmFyaWFudFZhbHVl
KCZyZXN1bHRWYXJpYW50KTsKLSAgICByZXR1cm4gcmVzdWx0VmFsdWU7Ci19Ci0KLUpTVmFsdWUg
Q0luc3RhbmNlOjpkZWZhdWx0VmFsdWUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgaGludCkgY29uc3QKLXsKLSAgICBpZiAoaGludCA9
PSBQcmVmZXJTdHJpbmcpCi0gICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKLSAgICBpZiAoaGludCA9PSBQcmVmZXJOdW1iZXIpCi0gICAgICAgIHJldHVybiBu
dW1iZXJWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gdmFsdWVPZihsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKLX0KLQotSlNWYWx1ZSBDSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KSBjb25zdAotewotICAgIEpTVmFsdWUg
dmFsdWU7Ci0gICAgaWYgKHRvSlNQcmltaXRpdmUobGV4aWNhbEdsb2JhbE9iamVjdCwgInRvU3Ry
aW5nIiwgdmFsdWUpKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0KLSAgICAvLyBGYWxsYmFjayB0
byBkZWZhdWx0IGltcGxlbWVudGF0aW9uLgotICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmco
bGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSwgIk5QT2JqZWN0Il9zKTsKLX0KLQotSlNWYWx1ZSBD
SW5zdGFuY2U6Om51bWJlclZhbHVlKEpTR2xvYmFsT2JqZWN0KikgY29uc3QKLXsKLSAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHNvbWV0aGluZyBzZW5zaWJsZS4KLSAgICByZXR1cm4ganNOdW1iZXIo
MCk7Ci19Ci0KLUpTVmFsdWUgQ0luc3RhbmNlOjpib29sZWFuVmFsdWUoKSBjb25zdAotewotICAg
IC8vIEFzIHBlciBFQ01BIDkuMi4KLSAgICByZXR1cm4ganNCb29sZWFuKGdldE9iamVjdCgpKTsK
LX0KLQotSlNWYWx1ZSBDSW5zdGFuY2U6OnZhbHVlT2YoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSB2YWx1ZTsKLSAgICBpZiAodG9KU1By
aW1pdGl2ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAidmFsdWVPZiIsIHZhbHVlKSkKLSAgICAgICAg
cmV0dXJuIHZhbHVlOwotCi0gICAgLy8gRmFsbGJhY2sgdG8gZGVmYXVsdCBpbXBsZW1lbnRhdGlv
bi4KLSAgICByZXR1cm4gc3RyaW5nVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci19Ci0KLWJv
b2wgQ0luc3RhbmNlOjp0b0pTUHJpbWl0aXZlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lLCBKU1ZhbHVlJiByZXN1bHRWYWx1ZSkgY29uc3QKLXsK
LSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIE5QSWRlbnRpZmllciBpZGVudCA9IF9O
UE5fR2V0U3RyaW5nSWRlbnRpZmllcihuYW1lKTsKLSAgICBpZiAoIV9vYmplY3QtPl9jbGFzcy0+
aGFzTWV0aG9kKF9vYmplY3QsIGlkZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Ly8gSW52b2tlIHRoZSAnQycgbWV0aG9kLgotICAgIGJvb2wgcmV0dmFsID0gdHJ1ZTsKLSAgICBO
UFZhcmlhbnQgcmVzdWx0VmFyaWFudDsKLSAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHRWYXJp
YW50KTsKLQotICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgICAgICBBU1NFUlQoZ2xvYmFsRXhjZXB0aW9uU3Ry
aW5nKCkuaXNOdWxsKCkpOwotICAgICAgICByZXR2YWwgPSBfb2JqZWN0LT5fY2xhc3MtPmludm9r
ZShfb2JqZWN0LCBpZGVudCwgMCwgMCwgJnJlc3VsdFZhcmlhbnQpOwotICAgICAgICBtb3ZlR2xv
YmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgfQotCi0g
ICAgaWYgKCFyZXR2YWwpCi0gICAgICAgIHRocm93RXhjZXB0aW9uKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHNjb3BlLCBjcmVhdGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCAiRXJyb3IgY2FsbGlu
ZyBtZXRob2Qgb24gTlBPYmplY3QuIl9zKSk7Ci0KLSAgICByZXN1bHRWYWx1ZSA9IGNvbnZlcnRO
UFZhcmlhbnRUb1ZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsICZyZXN1bHRWYXJpYW50LCBtX3Jv
b3RPYmplY3QuZ2V0KCkpOwotICAgIF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSgmcmVzdWx0VmFy
aWFudCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ0luc3RhbmNlOjpnZXRQcm9wZXJ0
eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVB
cnJheSYgbmFtZUFycmF5KQotewotICAgIGlmICghTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT05fSEFT
X0VOVU0oX29iamVjdC0+X2NsYXNzKSB8fCAhX29iamVjdC0+X2NsYXNzLT5lbnVtZXJhdGUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHVpbnQzMl90IGNvdW50OwotICAgIE5QSWRlbnRpZmllciog
aWRlbnRpZmllcnM7Ci0KLSAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICAgICAgQVNTRVJUKGdsb2JhbEV4Y2Vw
dGlvblN0cmluZygpLmlzTnVsbCgpKTsKLSAgICAgICAgYm9vbCBvayA9IF9vYmplY3QtPl9jbGFz
cy0+ZW51bWVyYXRlKF9vYmplY3QsICZpZGVudGlmaWVycywgJmNvdW50KTsKLSAgICAgICAgbW92
ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgICAg
ICBpZiAoIW9rKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFZNJiB2bSA9IGxl
eGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNv
dW50OyBpKyspIHsKLSAgICAgICAgSWRlbnRpZmllclJlcCogaWRlbnRpZmllciA9IHN0YXRpY19j
YXN0PElkZW50aWZpZXJSZXAqPihpZGVudGlmaWVyc1tpXSk7Ci0KLSAgICAgICAgaWYgKGlkZW50
aWZpZXItPmlzU3RyaW5nKCkpCi0gICAgICAgICAgICBuYW1lQXJyYXkuYWRkKGlkZW50aWZpZXJG
cm9tTlBJZGVudGlmaWVyKGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXItPnN0cmluZygp
KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5hbWVBcnJheS5hZGQoSWRlbnRpZmllcjo6
ZnJvbSh2bSwgaWRlbnRpZmllci0+bnVtYmVyKCkpKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgcmVhbGx5IGNhbGwgTlBOX01lbUZyZWUgYnV0IHRoYXQncyBpbiBXZWJLaXQK
LSAgICBmcmVlKGlkZW50aWZpZXJzKTsKLX0KLQotfQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9j
X2luc3RhbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyZGQ3Zjk4Yzg1MzkzNzI5NjI5YmQ3MjgyYWQ0MDQ3
MDQxNmMzMDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5oCisrKyAvZGV2L251bGwKQEAgLTEs
OTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIEJJTkRJTkdTX0NfSU5TVEFOQ0VfSF8KLSNkZWZpbmUgQklORElOR1NfQ19JTlNU
QU5DRV9IXwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJC
cmlkZ2VKU0MuaCIKLSNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgTlBPYmplY3QgTlBPYmplY3Q7Ci0KLW5h
bWVzcGFjZSBKU0MgewotCi1uYW1lc3BhY2UgQmluZGluZ3MgewotCi1jbGFzcyBDQ2xhc3M7Ci0K
LWNsYXNzIENJbnN0YW5jZSA6IHB1YmxpYyBJbnN0YW5jZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxDSW5zdGFuY2U+IGNyZWF0ZShOUE9iamVjdCogb2JqZWN0LCBSZWZQdHI8Um9vdE9iamVj
dD4mJiByb290T2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ0lu
c3RhbmNlKG9iamVjdCwgV1RGTW92ZShyb290T2JqZWN0KSkpOwotICAgIH0KLQotICAgIHN0YXRp
YyB2b2lkIHNldEdsb2JhbEV4Y2VwdGlvbihTdHJpbmcpOwotICAgIHN0YXRpYyB2b2lkIG1vdmVH
bG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShKU0dsb2JhbE9iamVjdCopOwotCi0gICAgdmlydHVh
bCB+Q0luc3RhbmNlKCk7Ci0KLSAgICBDbGFzcyAqZ2V0Q2xhc3MoKSBjb25zdCBvdmVycmlkZTsK
LQotICAgIEpTVmFsdWUgdmFsdWVPZihKU0dsb2JhbE9iamVjdCopIGNvbnN0IG92ZXJyaWRlOwot
ICAgIEpTVmFsdWUgZGVmYXVsdFZhbHVlKEpTR2xvYmFsT2JqZWN0KiwgUHJlZmVycmVkUHJpbWl0
aXZlVHlwZSkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBKU1ZhbHVlIGdldE1ldGhvZChKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZSkgb3ZlcnJpZGU7Ci0gICAgSlNWYWx1ZSBpbnZva2VNZXRo
b2QoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBSdW50aW1lTWV0aG9kKikgb3ZlcnJpZGU7
Ci0gICAgYm9vbCBzdXBwb3J0c0ludm9rZURlZmF1bHRNZXRob2QoKSBjb25zdCBvdmVycmlkZTsK
LSAgICBKU1ZhbHVlIGludm9rZURlZmF1bHRNZXRob2QoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJh
bWUqKSBvdmVycmlkZTsKLQotICAgIGJvb2wgc3VwcG9ydHNDb25zdHJ1Y3QoKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBKU1ZhbHVlIGludm9rZUNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCosIENhbGxG
cmFtZSosIGNvbnN0IEFyZ0xpc3QmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZ2V0UHJvcGVydHlO
YW1lcyhKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5Jikgb3ZlcnJpZGU7Ci0KLSAg
ICBKU1ZhbHVlIHN0cmluZ1ZhbHVlKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7Ci0gICAgSlNWYWx1
ZSBudW1iZXJWYWx1ZShKU0dsb2JhbE9iamVjdCopIGNvbnN0OwotICAgIEpTVmFsdWUgYm9vbGVh
blZhbHVlKCkgY29uc3Q7Ci0KLSAgICBOUE9iamVjdCAqZ2V0T2JqZWN0KCkgY29uc3QgeyByZXR1
cm4gX29iamVjdDsgfQotCi1wcml2YXRlOgotICAgIENJbnN0YW5jZShOUE9iamVjdCosIFJlZlB0
cjxSb290T2JqZWN0PiYmKTsKLQotICAgIFJ1bnRpbWVPYmplY3QqIG5ld1J1bnRpbWVPYmplY3Qo
SlNHbG9iYWxPYmplY3QqKSBvdmVycmlkZTsKLSAgICBib29sIHRvSlNQcmltaXRpdmUoSlNHbG9i
YWxPYmplY3QqLCBjb25zdCBjaGFyKiwgSlNWYWx1ZSYpIGNvbnN0OwotCi0KLSAgICBtdXRhYmxl
IENDbGFzcyAqX2NsYXNzOwotICAgIE5QT2JqZWN0ICpfb2JqZWN0OwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgQmluZGluZ3MKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvYy9jX3J1bnRpbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19ydW50
aW1lLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc1MmZlMjIxNWQ0MTc1NmYy
ZTVjNDYxODk0ZWI1ZTZkZTlkMTQwNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX3J1bnRpbWUuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJjX3J1bnRpbWUuaCIKLQotI2luY2x1ZGUgImNf
aW5zdGFuY2UuaCIKLSNpbmNsdWRlICJjX3V0aWxpdHkuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVf
aW1wbC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTT2JqZWN0Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotbmFtZXNwYWNlIEJp
bmRpbmdzIHsKLQotSlNWYWx1ZSBDRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBJbnN0YW5jZSogaW5zdCkgY29uc3QKLXsK
LSAgICBjb25zdCBDSW5zdGFuY2UqIGluc3RhbmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ0luc3Rh
bmNlKj4oaW5zdCk7Ci0gICAgTlBPYmplY3QqIG9iaiA9IGluc3RhbmNlLT5nZXRPYmplY3QoKTsK
LSAgICBpZiAob2JqLT5fY2xhc3MtPmdldFByb3BlcnR5KSB7Ci0gICAgICAgIE5QVmFyaWFudCBw
cm9wZXJ0eTsKLSAgICAgICAgVk9JRF9UT19OUFZBUklBTlQocHJvcGVydHkpOwotCi0gICAgICAg
IGJvb2wgcmVzdWx0OwotICAgICAgICB7Ci0gICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICByZXN1bHQg
PSBvYmotPl9jbGFzcy0+Z2V0UHJvcGVydHkob2JqLCBfZmllbGRJZGVudGlmaWVyLCAmcHJvcGVy
dHkpOwotICAgICAgICAgICAgQ0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3Rh
dGUobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlc3VsdCkg
ewotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAmcHJvcGVydHksIGluc3RhbmNlLT5yb290T2JqZWN0KCkpOwot
ICAgICAgICAgICAgX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlKCZwcm9wZXJ0eSk7Ci0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotfQotCi1ib29sIENGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBJbnN0YW5jZSAqaW5zdCwgSlNWYWx1ZSBh
VmFsdWUpIGNvbnN0Ci17Ci0gICAgY29uc3QgQ0luc3RhbmNlKiBpbnN0YW5jZSA9IHN0YXRpY19j
YXN0PGNvbnN0IENJbnN0YW5jZSo+KGluc3QpOwotICAgIE5QT2JqZWN0KiBvYmogPSBpbnN0YW5j
ZS0+Z2V0T2JqZWN0KCk7Ci0gICAgaWYgKG9iai0+X2NsYXNzLT5zZXRQcm9wZXJ0eSkgewotICAg
ICAgICBOUFZhcmlhbnQgdmFyaWFudDsKLSAgICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQo
bGV4aWNhbEdsb2JhbE9iamVjdCwgYVZhbHVlLCAmdmFyaWFudCk7Ci0KLSAgICAgICAgYm9vbCBy
ZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgewotICAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgICAgICAgICAgcmVzdWx0
ID0gb2JqLT5fY2xhc3MtPnNldFByb3BlcnR5KG9iaiwgX2ZpZWxkSWRlbnRpZmllciwgJnZhcmlh
bnQpOwotICAgICAgICAgICAgQ0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3Rh
dGUobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBfTlBOX1JlbGVh
c2VWYXJpYW50VmFsdWUoJnZhcmlhbnQpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gfQotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX3J1bnRp
bWUuaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfcnVudGltZS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA3NzkwODRkZGVhMjNhNmJkZTFlYTIxYjlmYmZhZGMzY2U5Zjg1MDNm
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9jL2NfcnVudGltZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2lmbmRlZiBCSU5ESU5HU19DX1JVTlRJTUVfSF8KLSNkZWZpbmUgQklORElOR1NfQ19SVU5USU1F
X0hfCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIkJyaWRn
ZUpTQy5oIgotI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgotCi1uYW1lc3BhY2UgSlND
IHsKLW5hbWVzcGFjZSBCaW5kaW5ncyB7Ci0KLWNsYXNzIENGaWVsZCA6IHB1YmxpYyBGaWVsZCB7
Ci1wdWJsaWM6Ci0gICAgQ0ZpZWxkKE5QSWRlbnRpZmllciBpZGVudCkgOiBfZmllbGRJZGVudGlm
aWVyKGlkZW50KSB7IH0KLQotICAgIEpTVmFsdWUgdmFsdWVGcm9tSW5zdGFuY2UoSlNHbG9iYWxP
YmplY3QqLCBjb25zdCBJbnN0YW5jZSopIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgc2V0VmFs
dWVUb0luc3RhbmNlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdGFuY2UqLCBKU1ZhbHVlKSBj
b25zdCBvdmVycmlkZTsKLQotICAgIE5QSWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyBy
ZXR1cm4gX2ZpZWxkSWRlbnRpZmllcjsgfQotCi1wcml2YXRlOgotICAgIE5QSWRlbnRpZmllciBf
ZmllbGRJZGVudGlmaWVyOwotfTsKLQotCi1jbGFzcyBDTWV0aG9kIDogcHVibGljIE1ldGhvZCB7
Ci1wdWJsaWM6Ci0gICAgQ01ldGhvZChOUElkZW50aWZpZXIgaWRlbnQpIDogX21ldGhvZElkZW50
aWZpZXIoaWRlbnQpIHsgfQotCi0gICAgTlBJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7
IHJldHVybiBfbWV0aG9kSWRlbnRpZmllcjsgfQotICAgIGludCBudW1QYXJhbWV0ZXJzKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQotCi1wcml2YXRlOgotICAgIE5QSWRlbnRpZmllciBf
bWV0aG9kSWRlbnRpZmllcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxpdHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBkNzkxYjgyNTI2NGI5ZmE3MDYwNTQxZjMwNWVlYjBiYzM2NTc4MDMwLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBA
bnlwb3AuY29tKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0K
LSNpbmNsdWRlICJjX3V0aWxpdHkuaCIKLQotI2luY2x1ZGUgIkNSdW50aW1lT2JqZWN0LmgiCi0j
aW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVk
ZSAiSlNET01XaW5kb3cuaCIKLSNpbmNsdWRlICJOUF9qc29iamVjdC5oIgotI2luY2x1ZGUgImNf
aW5zdGFuY2UuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI2luY2x1ZGUgIm5wcnVu
dGltZV9wcml2LmgiCi0jaW5jbHVkZSAicnVudGltZV9vYmplY3QuaCIKLSNpbmNsdWRlICJydW50
aW1lX3Jvb3QuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdC5oPgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQmluZGluZ3MgewotCi1zdGF0aWMgU3RyaW5nIGNvbnZlcnRVVEY4VG9VVEYx
NldpdGhMYXRpbjFGYWxsYmFjayhjb25zdCBOUFVURjgqIFVURjhDaGFycywgaW50IFVURjhMZW5n
dGgpCi17Ci0gICAgQVNTRVJUKFVURjhDaGFycyB8fCBVVEY4TGVuZ3RoID09IDApOwotICAgIAot
ICAgIGlmIChVVEY4TGVuZ3RoID09IC0xKQotICAgICAgICBVVEY4TGVuZ3RoID0gc3RhdGljX2Nh
c3Q8aW50PihzdHJsZW4oVVRGOENoYXJzKSk7Ci0KLSAgICBTdHJpbmcgcmVzdWx0ID0gU3RyaW5n
Ojpmcm9tVVRGOChVVEY4Q2hhcnMsIFVURjhMZW5ndGgpOwotICAgIAotICAgIC8vIElmIHdlIGdv
dCBiYWNrIGEgbnVsbCBzdHJpbmcgaW5kaWNhdGluZyBhbiB1bnN1Y2Nlc3NmdWwgY29udmVyc2lv
biwgZmFsbCBiYWNrIHRvIGxhdGluIDEuCi0gICAgLy8gU29tZSBwbHVnaW5zIHJldHVybiBpbnZh
bGlkIFVURi04IGluIE5QVmFyaWFudFR5cGVfU3RyaW5nLCBzZWUgPGh0dHA6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUxNjM+Ci0gICAgLy8gVGhlcmUgaXMgbm8gImJhZCBkYXRh
IiBmb3IgbGF0aW4xLiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoZSBwbHVnaW4gd2FzIHJlYWxseSBz
ZW5kaW5nIHRleHQgaW4gdGhpcyBlbmNvZGluZywKLSAgICAvLyBidXQgaXQgc2hvdWxkIGhhdmUg
dXNlZCBVVEYtOCwgYW5kIG5vdyB3ZSBhcmUgc2ltcGx5IGF2b2lkaW5nIGEgY3Jhc2guCi0gICAg
aWYgKHJlc3VsdC5pc051bGwoKSkKLSAgICAgICAgcmVzdWx0ID0gU3RyaW5nKFVURjhDaGFycywg
VVRGOExlbmd0aCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gVmFyaWFudCB2
YWx1ZSBtdXN0IGJlIHJlbGVhc2VkIHdpdGggTlBSZWxlYXNlVmFyaWFudFZhbHVlKCkKLXZvaWQg
Y29udmVydFZhbHVlVG9OUFZhcmlhbnQoSlNHbG9iYWxPYmplY3QqIGV4ZWMsIEpTVmFsdWUgdmFs
dWUsIE5QVmFyaWFudCogcmVzdWx0KQotewotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgCi0gICAgVk9JRF9UT19OUFZBUklBTlQoKnJl
c3VsdCk7Ci0KLSAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBTdHJpbmcgdXN0
cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgICAgICBDU3RyaW5nIGNzdHJpbmcg
PSB1c3RyaW5nLnV0ZjgoKTsKLSAgICAgICAgTlBTdHJpbmcgc3RyaW5nID0geyAoY29uc3QgTlBV
VEY4Kiljc3RyaW5nLmRhdGEoKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNzdHJpbmcubGVuZ3Ro
KCkpIH07Ci0gICAgICAgIE5QTl9Jbml0aWFsaXplVmFyaWFudFdpdGhTdHJpbmdDb3B5KHJlc3Vs
dCwgJnN0cmluZyk7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZS5pc051bWJlcigpKSB7Ci0gICAgICAg
IERPVUJMRV9UT19OUFZBUklBTlQodmFsdWUudG9OdW1iZXIoZXhlYyksICpyZXN1bHQpOwotICAg
IH0gZWxzZSBpZiAodmFsdWUuaXNCb29sZWFuKCkpIHsKLSAgICAgICAgQk9PTEVBTl9UT19OUFZB
UklBTlQodmFsdWUudG9Cb29sZWFuKGV4ZWMpLCAqcmVzdWx0KTsKLSAgICB9IGVsc2UgaWYgKHZh
bHVlLmlzTnVsbCgpKSB7Ci0gICAgICAgIE5VTExfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOwotICAg
IH0gZWxzZSBpZiAodmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICBKU09iamVjdCogb2JqZWN0
ID0gYXNPYmplY3QodmFsdWUpOwotICAgICAgICBpZiAob2JqZWN0LT5jbGFzc0luZm8odm0pID09
IENSdW50aW1lT2JqZWN0OjppbmZvKCkpIHsKLSAgICAgICAgICAgIENSdW50aW1lT2JqZWN0KiBy
dW50aW1lT2JqZWN0ID0gc3RhdGljX2Nhc3Q8Q1J1bnRpbWVPYmplY3QqPihvYmplY3QpOwotICAg
ICAgICAgICAgQ0luc3RhbmNlKiBpbnN0YW5jZSA9IHJ1bnRpbWVPYmplY3QtPmdldEludGVybmFs
Q0luc3RhbmNlKCk7Ci0gICAgICAgICAgICBpZiAoaW5zdGFuY2UpIHsKLSAgICAgICAgICAgICAg
ICBOUE9iamVjdCogb2JqID0gaW5zdGFuY2UtPmdldE9iamVjdCgpOwotICAgICAgICAgICAgICAg
IF9OUE5fUmV0YWluT2JqZWN0KG9iaik7Ci0gICAgICAgICAgICAgICAgT0JKRUNUX1RPX05QVkFS
SUFOVChvYmosICpyZXN1bHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHZtLmRlcHJlY2F0ZWRWTUVu
dHJ5R2xvYmFsT2JqZWN0KGV4ZWMpOwotCi0gICAgICAgICAgICBSb290T2JqZWN0KiByb290T2Jq
ZWN0ID0gZmluZFJvb3RPYmplY3QoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgICAgIGlmIChyb290
T2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgTlBPYmplY3QqIG5wT2JqZWN0ID0gX05QTl9DcmVh
dGVTY3JpcHRPYmplY3QoMCwgb2JqZWN0LCByb290T2JqZWN0KTsKLSAgICAgICAgICAgICAgICBP
QkpFQ1RfVE9fTlBWQVJJQU5UKG5wT2JqZWN0LCAqcmVzdWx0KTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLX0KLQotSlNWYWx1ZSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShKU0ds
b2JhbE9iamVjdCogZXhlYywgY29uc3QgTlBWYXJpYW50KiB2YXJpYW50LCBSb290T2JqZWN0KiBy
b290T2JqZWN0KQotewotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIAotICAgIE5Q
VmFyaWFudFR5cGUgdHlwZSA9IHZhcmlhbnQtPnR5cGU7Ci0KLSAgICBpZiAodHlwZSA9PSBOUFZh
cmlhbnRUeXBlX0Jvb2wpCi0gICAgICAgIHJldHVybiBqc0Jvb2xlYW4oTlBWQVJJQU5UX1RPX0JP
T0xFQU4oKnZhcmlhbnQpKTsKLSAgICBpZiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX051bGwpCi0g
ICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICBpZiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX1Zv
aWQpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGlmICh0eXBlID09IE5QVmFy
aWFudFR5cGVfSW50MzIpCi0gICAgICAgIHJldHVybiBqc051bWJlcihOUFZBUklBTlRfVE9fSU5U
MzIoKnZhcmlhbnQpKTsKLSAgICBpZiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX0RvdWJsZSkKLSAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKE5QVkFSSUFOVF9UT19ET1VCTEUoKnZhcmlhbnQpKTsKLSAg
ICBpZiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX1N0cmluZykKLSAgICAgICAgcmV0dXJuIGpzU3Ry
aW5nV2l0aENhY2hlKGV4ZWMtPnZtKCksIGNvbnZlcnROUFN0cmluZ1RvVVRGMTYoJnZhcmlhbnQt
PnZhbHVlLnN0cmluZ1ZhbHVlKSk7Ci0gICAgaWYgKHR5cGUgPT0gTlBWYXJpYW50VHlwZV9PYmpl
Y3QpIHsKLSAgICAgICAgTlBPYmplY3QqIG9iaiA9IHZhcmlhbnQtPnZhbHVlLm9iamVjdFZhbHVl
OwotICAgICAgICAKLSAgICAgICAgaWYgKG9iai0+X2NsYXNzID09IE5QU2NyaXB0T2JqZWN0Q2xh
c3MpCi0gICAgICAgICAgICAvLyBHZXQgSlNPYmplY3QgZnJvbSBOUF9KYXZhU2NyaXB0T2JqZWN0
LgotICAgICAgICAgICAgcmV0dXJuICgoSmF2YVNjcmlwdE9iamVjdCopb2JqKS0+aW1wOwotCi0g
ICAgICAgIC8vIFdyYXAgTlBPYmplY3QgaW4gYSBDSW5zdGFuY2UuCi0gICAgICAgIHJldHVybiBD
SW5zdGFuY2U6OmNyZWF0ZShvYmosIHJvb3RPYmplY3QpLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4
ZWMpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotU3RyaW5n
IGNvbnZlcnROUFN0cmluZ1RvVVRGMTYoY29uc3QgTlBTdHJpbmcqIHN0cmluZykKLXsKLSAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhzdHJpbmctPlVURjhDaGFy
YWN0ZXJzLCBzdHJpbmctPlVURjhMZW5ndGgpOwotfQotCi1JZGVudGlmaWVyIGlkZW50aWZpZXJG
cm9tTlBJZGVudGlmaWVyKEpTR2xvYmFsT2JqZWN0KiBleGVjLCBjb25zdCBOUFVURjgqIG5hbWUp
Ci17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgY29udmVydFVURjhUb1VURjE2V2l0aExhdGluMUZhbGxiYWNrKG5hbWUsIC0x
KSk7Ci19Ci0KLX0gfQotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxpdHkuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiZjlhMzc0MTRjNmIyYTI5NTJmYmM4OGYxMDhjYmZhMTZjYzQ2MDI0Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9j
L2NfdXRpbGl0eS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDX1VUSUxJVFlfSF8K
LSNkZWZpbmUgQ19VVElMSVRZX0hfCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
LQotI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NKU1ZhbHVlLmg+
Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENh
bGxGcmFtZTsKLWNsYXNzIElkZW50aWZpZXI7Ci0KLW5hbWVzcGFjZSBCaW5kaW5ncyB7Ci0KLWNs
YXNzIFJvb3RPYmplY3Q7Ci0gICAgCi10eXBlZGVmIHVpbnQxNl90IE5QVVRGMTY7Ci0KLVN0cmlu
ZyBjb252ZXJ0TlBTdHJpbmdUb1VURjE2KGNvbnN0IE5QU3RyaW5nICopOwotdm9pZCBjb252ZXJ0
VmFsdWVUb05QVmFyaWFudChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUsIE5QVmFyaWFudCogcmVz
dWx0KTsKLUpTVmFsdWUgY29udmVydE5QVmFyaWFudFRvVmFsdWUoSlNHbG9iYWxPYmplY3QqLCBj
b25zdCBOUFZhcmlhbnQqLCBSb290T2JqZWN0Kik7Ci1JZGVudGlmaWVyIGlkZW50aWZpZXJGcm9t
TlBJZGVudGlmaWVyKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgTlBVVEY4KiBuYW1lKTsKLQotfSB9
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvbnBydW50aW1lLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9ucHJ1bnRpbWUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAz
OGIwMjlmYjNlMzAwMmE5OThiZGRlMzg4MTYzNTI4YmIxYjYwYjc0Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ucHJ1
bnRpbWUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiSWRlbnRp
ZmllclJlcC5oIgotI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgotI2luY2x1ZGUgIm5w
cnVudGltZV9wcml2LmgiCi0KLSNpbmNsdWRlICJjX3V0aWxpdHkuaCIKLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JZGVudGlmaWVyLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQot
I3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGRlZmF1bHQpCi0jaW5jbHVkZSAibnBydW50aW1l
X2ltcGwuaCIKLSNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcG9wCi0KLXVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwotCi1OUElkZW50aWZpZXIgX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyKGNvbnN0IE5Q
VVRGOCogbmFtZSkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyPihJZGVu
dGlmaWVyUmVwOjpnZXQobmFtZSkpOwotfQotCi12b2lkIF9OUE5fR2V0U3RyaW5nSWRlbnRpZmll
cnMoY29uc3QgTlBVVEY4KiogbmFtZXMsIGludDMyX3QgbmFtZUNvdW50LCBOUElkZW50aWZpZXIq
IGlkZW50aWZpZXJzKQotewotICAgIEFTU0VSVChuYW1lcyk7Ci0gICAgQVNTRVJUKGlkZW50aWZp
ZXJzKTsKLSAgICAKLSAgICBpZiAobmFtZXMgJiYgaWRlbnRpZmllcnMpIHsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBuYW1lQ291bnQ7IGkrKykKLSAgICAgICAgICAgIGlkZW50aWZpZXJz
W2ldID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyKG5hbWVzW2ldKTsKLSAgICB9Ci19Ci0KLU5Q
SWRlbnRpZmllciBfTlBOX0dldEludElkZW50aWZpZXIoaW50MzJfdCBpbnRpZCkKLXsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyPihJZGVudGlmaWVyUmVwOjpnZXQoaW50aWQp
KTsKLX0KLQotYm9vbCBfTlBOX0lkZW50aWZpZXJJc1N0cmluZyhOUElkZW50aWZpZXIgaWRlbnRp
ZmllcikKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KGlkZW50aWZp
ZXIpLT5pc1N0cmluZygpOwotfQotCi1OUFVURjggKl9OUE5fVVRGOEZyb21JZGVudGlmaWVyKE5Q
SWRlbnRpZmllciBpZGVudGlmaWVyKQotewotICAgIGNvbnN0IGNoYXIqIHN0cmluZyA9IHN0YXRp
Y19jYXN0PElkZW50aWZpZXJSZXAqPihpZGVudGlmaWVyKS0+c3RyaW5nKCk7Ci0gICAgaWYgKCFz
dHJpbmcpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIHJldHVybiBzdHJkdXAoc3RyaW5n
KTsKLX0KLQotaW50MzJfdCBfTlBOX0ludEZyb21JZGVudGlmaWVyKE5QSWRlbnRpZmllciBpZGVu
dGlmaWVyKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4oaWRlbnRp
ZmllciktPm51bWJlcigpOwotfQotCi12b2lkIE5QTl9Jbml0aWFsaXplVmFyaWFudFdpdGhTdHJp
bmdDb3B5KE5QVmFyaWFudCogdmFyaWFudCwgY29uc3QgTlBTdHJpbmcqIHZhbHVlKQotewotICAg
IHZhcmlhbnQtPnR5cGUgPSBOUFZhcmlhbnRUeXBlX1N0cmluZzsKLSAgICB2YXJpYW50LT52YWx1
ZS5zdHJpbmdWYWx1ZS5VVEY4TGVuZ3RoID0gdmFsdWUtPlVURjhMZW5ndGg7Ci0gICAgLy8gU3dp
dGNoaW5nIHRvIGZhc3RNYWxsb2Mgd291bGQgYmUgYmV0dGVyIHRvIGF2b2lkIGxlbmd0aCBjaGVj
ayBidXQgdGhpcyBpcyBub3QgZGVzaXJhYmxlCi0gICAgLy8gYXMgTlBOX01lbUFsbG9jIGlzIHVz
aW5nIG1hbGxvYyBhbmQgdGhlcmUgbWlnaHQgYmUgcGx1Z2lucyB0aGF0IG1peCBOUE5fTWVtQWxs
b2MgYW5kIG1hbGxvYyB0b28uCi0gICAgdmFyaWFudC0+dmFsdWUuc3RyaW5nVmFsdWUuVVRGOENo
YXJhY3RlcnMgPSAoTlBVVEY4KiltYWxsb2Moc2l6ZW9mKE5QVVRGOCkgKiB2YWx1ZS0+VVRGOExl
bmd0aCk7Ci0gICAgaWYgKHZhbHVlLT5VVEY4TGVuZ3RoICYmICF2YXJpYW50LT52YWx1ZS5zdHJp
bmdWYWx1ZS5VVEY4Q2hhcmFjdGVycykKLSAgICAgICAgQ1JBU0goKTsKLSAgICBtZW1jcHkoKHZv
aWQqKXZhcmlhbnQtPnZhbHVlLnN0cmluZ1ZhbHVlLlVURjhDaGFyYWN0ZXJzLCB2YWx1ZS0+VVRG
OENoYXJhY3RlcnMsIHNpemVvZihOUFVURjgpICogdmFsdWUtPlVURjhMZW5ndGgpOwotfQotCi12
b2lkIF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZShOUFZhcmlhbnQqIHZhcmlhbnQpCi17Ci0gICAg
QVNTRVJUKHZhcmlhbnQpOwotCi0gICAgaWYgKHZhcmlhbnQtPnR5cGUgPT0gTlBWYXJpYW50VHlw
ZV9PYmplY3QpIHsKLSAgICAgICAgX05QTl9SZWxlYXNlT2JqZWN0KHZhcmlhbnQtPnZhbHVlLm9i
amVjdFZhbHVlKTsKLSAgICAgICAgdmFyaWFudC0+dmFsdWUub2JqZWN0VmFsdWUgPSAwOwotICAg
IH0gZWxzZSBpZiAodmFyaWFudC0+dHlwZSA9PSBOUFZhcmlhbnRUeXBlX1N0cmluZykgewotICAg
ICAgICBmcmVlKCh2b2lkKil2YXJpYW50LT52YWx1ZS5zdHJpbmdWYWx1ZS5VVEY4Q2hhcmFjdGVy
cyk7Ci0gICAgICAgIHZhcmlhbnQtPnZhbHVlLnN0cmluZ1ZhbHVlLlVURjhDaGFyYWN0ZXJzID0g
MDsKLSAgICAgICAgdmFyaWFudC0+dmFsdWUuc3RyaW5nVmFsdWUuVVRGOExlbmd0aCA9IDA7Ci0g
ICAgfQotCi0gICAgdmFyaWFudC0+dHlwZSA9IE5QVmFyaWFudFR5cGVfVm9pZDsKLX0KLQotTlBP
YmplY3QgKl9OUE5fQ3JlYXRlT2JqZWN0KE5QUCBucHAsIE5QQ2xhc3MqIGFDbGFzcykKLXsKLSAg
ICBBU1NFUlQoYUNsYXNzKTsKLQotICAgIGlmIChhQ2xhc3MpIHsKLSAgICAgICAgTlBPYmplY3Qq
IG9iajsKLSAgICAgICAgaWYgKGFDbGFzcy0+YWxsb2NhdGUgIT0gTlVMTCkKLSAgICAgICAgICAg
IG9iaiA9IGFDbGFzcy0+YWxsb2NhdGUobnBwLCBhQ2xhc3MpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBvYmogPSAoTlBPYmplY3QqKW1hbGxvYyhzaXplb2YoTlBPYmplY3QpKTsKLSAgICAg
ICAgaWYgKCFvYmopCi0gICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICBvYmotPl9jbGFzcyA9
IGFDbGFzczsKLSAgICAgICAgb2JqLT5yZWZlcmVuY2VDb3VudCA9IDE7Ci0KLSAgICAgICAgcmV0
dXJuIG9iajsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotTlBPYmplY3QqIF9OUE5fUmV0
YWluT2JqZWN0KE5QT2JqZWN0KiBvYmopCi17Ci0gICAgQVNTRVJUKG9iaik7Ci0KLSAgICBpZiAo
b2JqKQotICAgICAgICBvYmotPnJlZmVyZW5jZUNvdW50Kys7Ci0KLSAgICByZXR1cm4gb2JqOwot
fQotCi12b2lkIF9OUE5fUmVsZWFzZU9iamVjdChOUE9iamVjdCogb2JqKQotewotICAgIEFTU0VS
VChvYmopOwotICAgIEFTU0VSVChvYmotPnJlZmVyZW5jZUNvdW50ID49IDEpOwotCi0gICAgaWYg
KG9iaiAmJiBvYmotPnJlZmVyZW5jZUNvdW50ID49IDEpIHsKLSAgICAgICAgaWYgKC0tb2JqLT5y
ZWZlcmVuY2VDb3VudCA9PSAwKQotICAgICAgICAgICAgX05QTl9EZWFsbG9jYXRlT2JqZWN0KG9i
aik7Ci0gICAgfQotfQotCi12b2lkIF9OUE5fRGVhbGxvY2F0ZU9iamVjdChOUE9iamVjdCAqb2Jq
KQotewotICAgIEFTU0VSVChvYmopOwotCi0gICAgaWYgKG9iaikgewotICAgICAgICBpZiAob2Jq
LT5fY2xhc3MtPmRlYWxsb2NhdGUpCi0gICAgICAgICAgICBvYmotPl9jbGFzcy0+ZGVhbGxvY2F0
ZShvYmopOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmcmVlKG9iaik7Ci0gICAgfQotfQot
Ci0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvbnBydW50aW1lX2ltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9ucHJ1bnRpbWVfaW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjE4MDQy
Y2NjMmZhNTkyY2JmZTIyNDBmMTg3OTJmODViMmYzMWE3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWVf
aW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBfTlBfUlVOVElNRV9JTVBMX0hf
Ci0jZGVmaW5lIF9OUF9SVU5USU1FX0lNUExfSF8KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotCi0jaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCi0KLSNpZmRlZiBfX2Nw
bHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotZXh0ZXJuIHZvaWQgX05QTl9SZWxlYXNl
VmFyaWFudFZhbHVlKE5QVmFyaWFudCopOwotZXh0ZXJuIE5QSWRlbnRpZmllciBfTlBOX0dldFN0
cmluZ0lkZW50aWZpZXIoY29uc3QgTlBVVEY4Kik7Ci1leHRlcm4gdm9pZCBfTlBOX0dldFN0cmlu
Z0lkZW50aWZpZXJzKGNvbnN0IE5QVVRGOCoqIG5hbWVzLCBpbnQzMl90IG5hbWVDb3VudCwgTlBJ
ZGVudGlmaWVyKiBpZGVudGlmaWVycyk7Ci1leHRlcm4gTlBJZGVudGlmaWVyIF9OUE5fR2V0SW50
SWRlbnRpZmllcihpbnQzMl90KTsKLWV4dGVybiBib29sIF9OUE5fSWRlbnRpZmllcklzU3RyaW5n
KE5QSWRlbnRpZmllcik7Ci1leHRlcm4gTlBVVEY4KiBfTlBOX1VURjhGcm9tSWRlbnRpZmllcihO
UElkZW50aWZpZXIpOwotZXh0ZXJuIGludDMyX3QgX05QTl9JbnRGcm9tSWRlbnRpZmllcihOUElk
ZW50aWZpZXIpOyAgICAKLWV4dGVybiBOUE9iamVjdCogX05QTl9DcmVhdGVPYmplY3QoTlBQLCBO
UENsYXNzKik7Ci1leHRlcm4gTlBPYmplY3QqIF9OUE5fUmV0YWluT2JqZWN0KE5QT2JqZWN0Kik7
Ci1leHRlcm4gdm9pZCBfTlBOX1JlbGVhc2VPYmplY3QoTlBPYmplY3QqKTsKLWV4dGVybiB2b2lk
IF9OUE5fRGVhbGxvY2F0ZU9iamVjdChOUE9iamVjdCopOwotZXh0ZXJuIGJvb2wgX05QTl9JbnZv
a2UoTlBQLCBOUE9iamVjdCosIE5QSWRlbnRpZmllciBtZXRob2ROYW1lLCBjb25zdCBOUFZhcmlh
bnQqIGFyZ3MsIHVpbnQzMl90IGFyZ0NvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCk7Ci1leHRlcm4g
Ym9vbCBfTlBOX0ludm9rZURlZmF1bHQoTlBQLCBOUE9iamVjdCosIGNvbnN0IE5QVmFyaWFudCog
YXJncywgdWludDMyX3QgYXJnQ291bnQsIE5QVmFyaWFudCogcmVzdWx0KTsKLWV4dGVybiBib29s
IF9OUE5fRXZhbHVhdGUoTlBQLCBOUE9iamVjdCosIE5QU3RyaW5nKiwgTlBWYXJpYW50KiByZXN1
bHQpOwotZXh0ZXJuIGJvb2wgX05QTl9HZXRQcm9wZXJ0eShOUFAsIE5QT2JqZWN0KiwgTlBJZGVu
dGlmaWVyLCBOUFZhcmlhbnQqIHJlc3VsdCk7Ci1leHRlcm4gYm9vbCBfTlBOX1NldFByb3BlcnR5
KE5QUCwgTlBPYmplY3QqLCBOUElkZW50aWZpZXIsIGNvbnN0IE5QVmFyaWFudCopOwotZXh0ZXJu
IGJvb2wgX05QTl9SZW1vdmVQcm9wZXJ0eShOUFAsIE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyKTsK
LWV4dGVybiBib29sIF9OUE5fSGFzUHJvcGVydHkoTlBQLCBOUE9iamVjdCosIE5QSWRlbnRpZmll
cik7Ci1leHRlcm4gYm9vbCBfTlBOX0hhc01ldGhvZChOUFAsIE5QT2JqZWN0KiwgTlBJZGVudGlm
aWVyKTsKLWV4dGVybiB2b2lkIF9OUE5fU2V0RXhjZXB0aW9uKE5QT2JqZWN0KiwgY29uc3QgTlBV
VEY4Kik7Ci1leHRlcm4gYm9vbCBfTlBOX0VudW1lcmF0ZShOUFAsIE5QT2JqZWN0KiwgTlBJZGVu
dGlmaWVyKiosIHVpbnQzMl90KiBjb3VudCk7Ci1leHRlcm4gYm9vbCBfTlBOX0NvbnN0cnVjdChO
UFAsIE5QT2JqZWN0KiwgY29uc3QgTlBWYXJpYW50KiBhcmdzLCB1aW50MzJfdCBhcmdDb3VudCwg
TlBWYXJpYW50ICpyZXN1bHQpOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0gIC8qIGVuZCBleHRl
cm4gIkMiICovCi0jZW5kaWYKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWVf
aW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWVfaW50ZXJuYWwuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk4ZjlkZGYxMDgwMmNjMjBmODRiNDljMmFh
OTM0MGJhODY1YjlhMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvbnBydW50aW1lX2ludGVybmFsLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggQ29s
bGFib3JhIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZl
LCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKgotICoKLSAqIFRoaXMgaXMgYSBpbnRlcm5h
bCBpbmNsdWRlIGhlYWRlciBmb3IgbnBhcGkuaAotICoKLSAqIFNvbWUgb2YgdGhlICNkZWZpbmVz
IHdoaWNoIGFyZSBpbiBYMTEgaGVhZGVycyBjb25mbGljdCB3aXRoIHR5cGUgYW5kIGVudW0KLSAq
IG5hbWVzIGluIEphdmFTY3JpcHRDb3JlIGFuZCBXZWJDb3JlCi0gKiBUaGlzIGhlYWRlciAjdW5k
ZWZzIHRob3NlIGRlZmluZXMgdG8gZml4IHRoZSBjb25mbGljdHMKLSAqIElmIHlvdSBuZWVkIHRv
IGluY2x1ZGUgbnBhcGkuaCBvciBucHJ1bnRpbWUuaCB3aGVuIGJ1aWxkaW5nIG9uIFgxMSwKLSAq
IGluY2x1ZGUgdGhpcyBmaWxlIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBucGFwaS5oIG9yIG5wcnVu
dGltZS5oCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJucGFwaS5oIgotI2luY2x1
ZGUgIm5wZnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAibnBydW50aW1lLmgiCi0KLSNpZiBkZWZpbmVk
KE1PWl9YMTEpCi0gICAgI2luY2x1ZGUgPFgxMS9YcmVzb3VyY2UuaD4KLQotICAgICN1bmRlZiBB
bHdheXMKLSAgICAjdW5kZWYgTm9uZQotICAgICN1bmRlZiBBYm92ZQotICAgICN1bmRlZiBCZWxv
dwotICAgICN1bmRlZiBBdXRvCi0gICAgI3VuZGVmIENvbXBsZXgKLSAgICAjdW5kZWYgU3RhdHVz
Ci0gICAgI3VuZGVmIEN1cnNvclNoYXBlCi0gICAgI3VuZGVmIEZvY3VzSW4KLSAgICAjdW5kZWYg
Rm9jdXNPdXQKLSAgICAjdW5kZWYgS2V5UHJlc3MKLSAgICAjdW5kZWYgS2V5UmVsZWFzZQotICAg
ICN1bmRlZiBVbnNvcnRlZAotICAgICN1bmRlZiBCb29sCi0gICAgI3VuZGVmIEZvbnRDaGFuZ2UK
LSAgICAjdW5kZWYgR3JheVNjYWxlCi0gICAgI3VuZGVmIE5vcm1hbFN0YXRlCi0gICAgI3VuZGVm
IFRydWUKLSAgICAjdW5kZWYgRmFsc2UKLSAgICAjdW5kZWYgU3VjY2VzcwotICAgICN1bmRlZiBF
eHBvc2UKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL25wcnVudGlt
ZV9wcml2LmggYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvbnBydW50aW1lX3ByaXYuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlkYzBhMTdkYzRkNTllMDQ5Y2I5ZTBkYzViMTYwZTE0
NGM2ZDI1NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9icmlkZ2UvbnBydW50aW1lX3ByaXYuaAorKysgL2Rldi9udWxsCkBAIC0x
LDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpZm5kZWYgTlBfUlVOVElNRV9QUklWX0hfCi0jZGVmaW5lIE5QX1JVTlRJTUVf
UFJJVl9IXwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJu
cHJ1bnRpbWVfaW50ZXJuYWwuaCIKLQotLyoKLSAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRo
U3RyaW5nQ29weSgpIHdpbGwgY29weSBzdHJpbmcgZGF0YS4gIFRoZSBzdHJpbmcgZGF0YQotICAg
IHdpbGwgYmUgZGVhbGxvY2F0ZWQgYnkgY2FsbHMgdG8gTlBSZWxlYXNlVmFyaWFudFZhbHVlKCku
Ci0qLwotdm9pZCBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRoU3RyaW5nQ29weShOUFZhcmlhbnQq
LCBjb25zdCBOUFN0cmluZyopOwotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0lu
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcApp
bmRleCA5NjUxZDg0ZWEwMmI1Zjk3ZjI2Yjc3NGUwZjM2ODVkZTI5ODc0NzlhLi5kNTc5MDZmMWU3
YmUxYWYzOTU4YjNjZjE0ZmU2YjhhNGVhZDlmYTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxQbHVnSW5FbGVtZW50LmNwcApAQCAtNTAsMTAgKzUwLDYgQEAKICNpbmNsdWRlICJXaWRnZXQu
aCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCi0jaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCi0jaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKLSNlbmRpZgotCiAj
aWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQu
aCIKICNpbmNsdWRlICJZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuaCIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5j
cHAKaW5kZXggN2U4YWMwNTI0MGE1ZTEwM2M4NTRjMGM0NTczZGRiMmM1YjdkN2EyYS4uODJhNzYz
ZjgyNzYwMTgxZjQ2YmI4ZjM0MWZlNzgxOGUzNmMxNjVkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAK
QEAgLTEwMiw3ICsxMDIsNiBAQAogI2luY2x1ZGUgIlVzZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9y
LmgiCiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCi0jaW5j
bHVkZSAibnBydW50aW1lX2ltcGwuaCIKICNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
UmVndWxhckV4cHJlc3Npb24uaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
bnBhcGkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbnBhcGkuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYjMzYjRlOTQ2NWY5NmU5NDFhMjY3YzM4Yjc1ODBjZDUyYzYxNmJiNC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL25wYXBpLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NjkgKzAsMCBAQAotLyog
LSotIE1vZGU6IEM7IHRhYi13aWR0aDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2lj
LW9mZnNldDogMiAtKi0gKi8KLS8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKLSAq
IFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQotICoKLSAqIFRoZSBjb250ZW50cyBv
ZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVy
c2lvbgotICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBl
eGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi0gKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4g
YSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8K
LSAqCi0gKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli
dXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAotICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO
RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCi0gKiBmb3IgdGhl
IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVy
IHRoZQotICogTGljZW5zZS4KLSAqCi0gKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBtb3ppbGxhLm9y
ZyBjb2RlLgotICoKLSAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29k
ZSBpcwotICogTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCi0gKiBQb3J0aW9u
cyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAxOTk4
Ci0gKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
Q29udHJpYnV0b3Iocyk6Ci0gKgotICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRo
aXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKLSAqIGVpdGhlciB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBv
cgotICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBv
ciBsYXRlciAodGhlICJMR1BMIiksCi0gKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9m
IHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAotICogb2YgdGhvc2Ug
YWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBm
aWxlIG9ubHkKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQ
TCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KLSAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhp
cyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCi0gKiBkZWNp
c2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdp
dGggdGhlIG5vdGljZQotICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQ
TCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKLSAqIHRoZSBwcm92aXNpb25zIGFi
b3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIK
LSAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwu
Ci0gKgotICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KLQotI2lmbmRlZiBucGFw
aV9oXwotI2RlZmluZSBucGFwaV9oXwotCi0jaWYgZGVmaW5lZChfX09TMl9fKQotI3ByYWdtYSBw
YWNrKDEpCi0jZW5kaWYKLQotI2luY2x1ZGUgIm5wdHlwZXMuaCIKLQotI2lmIGRlZmluZWQoX19P
UzJfXykgfHwgZGVmaW5lZChPUzIpCi0jaWZuZGVmIFhQX09TMgotI2RlZmluZSBYUF9PUzIgMQot
I2VuZGlmCi0jZW5kaWYKLQotI2lmZGVmIElOQ0xVREVfSkFWQQotI2luY2x1ZGUgImpyaS5oIiAg
ICAgICAgICAgICAgICAvKiBKYXZhIFJ1bnRpbWUgSW50ZXJmYWNlICovCi0jZWxzZQotI2RlZmlu
ZSBqcmVmICAgIHZvaWQgKgotI2RlZmluZSBKUklFbnYgIHZvaWQKLSNlbmRpZgotCi0jaWZkZWYg
X1dJTjMyCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2lmbmRlZiBYUF9XSU4KLSNkZWZpbmUgWFBf
V0lOIDEKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfQ0NfXykgJiYgIWRl
ZmluZWQoWFBfVU5JWCkKLSNpZm5kZWYgWFBfTUFDT1NYCi0jZGVmaW5lIFhQX01BQ09TWCAxCi0j
ZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChYUF9NQUNPU1gpICYmIGRlZmluZWQoX19MUDY0
X18pCi0jZGVmaW5lIE5QX05PX1FVSUNLRFJBVwotI2RlZmluZSBOUF9OT19DQVJCT04KLSNlbmRp
ZgotCi0jaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVH
cmFwaGljcy5oPgotI2luY2x1ZGUgPE9wZW5HTC9PcGVuR0wuaD4KLSNpZm5kZWYgTlBfTk9fQ0FS
Qk9OCi0jaW5jbHVkZSA8Q2FyYm9uL0NhcmJvbi5oPgotI2VuZGlmCi0jZW5kaWYKLQotI2lmIGRl
ZmluZWQoWFBfVU5JWCkKLSNpbmNsdWRlIDxzdGRpby5oPgotI2lmIGRlZmluZWQoTU9aX1gxMSkK
LSNpbmNsdWRlIDxYMTEvWGxpYi5oPgotI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgotI2VuZGlmCi0j
ZW5kaWYKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgUGx1
Z2luIFZlcnNpb24gQ29uc3RhbnRzICAgICAgICAgICAgICAgICAgICAgICovCi0vKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLwotCi0jZGVmaW5lIE5QX1ZFUlNJT05fTUFKT1IgMAotI2RlZmluZSBOUF9WRVJTSU9O
X01JTk9SIDI2Ci0KLQotLyogVGhlIE9TLzIgdmVyc2lvbiBvZiBOZXRzY2FwZSB1c2VzIFJDX0RB
VEEgdG8gZGVmaW5lIHRoZQotICAgbWltZSB0eXBlcywgZmlsZSBleHRlbnNpb25zLCBldGMgdGhh
dCBhcmUgcmVxdWlyZWQuCi0gICBVc2UgYSB2ZXJ0aWNhbCBiYXIgdG8gc2VwYXJhdGUgdHlwZXMs
IGVuZCB0eXBlcyB3aXRoIFwwLgotICAgRmlsZVZlcnNpb24gYW5kIFByb2R1Y3RWZXJzaW9uIGFy
ZSAzMmJpdCBpbnRzLCBhbGwgb3RoZXIKLSAgIGVudHJpZXMgYXJlIHN0cmluZ3MgdGhhdCBNVVNU
IGJlIHRlcm1pbmF0ZWQgd2l0aCBhIFwwLgotCi1BTiBFWEFNUExFOgotCi1SQ0RBVEEgTlBfSU5G
T19Qcm9kdWN0VmVyc2lvbiB7IDEsMCwwLDEsfQotCi1SQ0RBVEEgTlBfSU5GT19NSU1FVHlwZSAg
ICB7ICJ2aWRlby94LXZpZGVvfCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2aWRl
by94LWZsaWNrXDAiIH0KLVJDREFUQSBOUF9JTkZPX0ZpbGVFeHRlbnRzIHsgImF2aXwiLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZmxjXDAiIH0KLVJDREFUQSBOUF9JTkZPX0ZpbGVP
cGVuTmFtZXsgIk1NT1MyIHZpZGVvIHBsYXllcigqLmF2aSl8IiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIk1NT1MyIEZsYy9GbGkgcGxheWVyKCouZmxjKVwwIiB9Ci0KLVJDREFUQSBO
UF9JTkZPX0ZpbGVWZXJzaW9uICAgICAgIHsgMSwwLDAsMSB9Ci1SQ0RBVEEgTlBfSU5GT19Db21w
YW55TmFtZSAgICAgICB7ICJOZXRzY2FwZSBDb21tdW5pY2F0aW9uc1wwIiB9Ci1SQ0RBVEEgTlBf
SU5GT19GaWxlRGVzY3JpcHRpb24gICB7ICJOUEFWSTMyIEV4dGVuc2lvbiBETExcMCIKLVJDREFU
QSBOUF9JTkZPX0ludGVybmFsTmFtZSAgICAgIHsgIk5QQVZJMzJcMCIgKQotUkNEQVRBIE5QX0lO
Rk9fTGVnYWxDb3B5cmlnaHQgICAgeyAiQ29weXJpZ2h0IE5ldHNjYXBlIENvbW11bmljYXRpb25z
IFwyNTEgMTk5NlwwIgotUkNEQVRBIE5QX0lORk9fT3JpZ2luYWxGaWxlbmFtZSAgeyAiTlZBUEkz
Mi5ETEwiIH0KLVJDREFUQSBOUF9JTkZPX1Byb2R1Y3ROYW1lICAgICAgIHsgIk5QQVZJMzIgRHlu
YW1pYyBMaW5rIExpYnJhcnlcMCIgfQotKi8KLS8qIFJDX0RBVEEgdHlwZXMgZm9yIHZlcnNpb24g
aW5mbyAtIHJlcXVpcmVkICovCi0jZGVmaW5lIE5QX0lORk9fUHJvZHVjdFZlcnNpb24gICAgICAx
Ci0jZGVmaW5lIE5QX0lORk9fTUlNRVR5cGUgICAgICAgICAgICAyCi0jZGVmaW5lIE5QX0lORk9f
RmlsZU9wZW5OYW1lICAgICAgICAzCi0jZGVmaW5lIE5QX0lORk9fRmlsZUV4dGVudHMgICAgICAg
ICA0Ci0vKiBSQ19EQVRBIHR5cGVzIGZvciB2ZXJzaW9uIGluZm8gLSB1c2VkIGlmIGZvdW5kICov
Ci0jZGVmaW5lIE5QX0lORk9fRmlsZURlc2NyaXB0aW9uICAgICA1Ci0jZGVmaW5lIE5QX0lORk9f
UHJvZHVjdE5hbWUgICAgICAgICA2Ci0vKiBSQ19EQVRBIHR5cGVzIGZvciB2ZXJzaW9uIGluZm8g
LSBvcHRpb25hbCAqLwotI2RlZmluZSBOUF9JTkZPX0NvbXBhbnlOYW1lICAgICAgICAgNwotI2Rl
ZmluZSBOUF9JTkZPX0ZpbGVWZXJzaW9uICAgICAgICAgOAotI2RlZmluZSBOUF9JTkZPX0ludGVy
bmFsTmFtZSAgICAgICAgOQotI2RlZmluZSBOUF9JTkZPX0xlZ2FsQ29weXJpZ2h0ICAgICAgMTAK
LSNkZWZpbmUgTlBfSU5GT19PcmlnaW5hbEZpbGVuYW1lICAgIDExCi0KLSNpZm5kZWYgUkNfSU5W
T0tFRAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogICAgICAgICAgICAgICAgICAgICAgIERlZmlu
aXRpb24gb2YgQmFzaWMgVHlwZXMgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCi0KLSNpZm5kZWYgRkFMU0UKLSNkZWZpbmUgRkFMU0UgKDApCi0jZW5kaWYKLSNpZm5k
ZWYgVFJVRQotI2RlZmluZSBUUlVFICgxKQotI2VuZGlmCi0jaWZuZGVmIE5VTEwKLSNkZWZpbmUg
TlVMTCAoMEwpCi0jZW5kaWYKLQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIE5QQm9vbDsKLXR5cGVk
ZWYgaW50MTZfdCAgICAgICBOUEVycm9yOwotdHlwZWRlZiBpbnQxNl90ICAgICAgIE5QUmVhc29u
OwotdHlwZWRlZiBjaGFyKiAgICAgICAgIE5QTUlNRVR5cGU7Ci0KLS8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Ci0vKiAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMgICAg
ICAgICAgICAgICAgICAgICAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmICFkZWZpbmVkKF9f
TFA2NF9fKQotI2lmIGRlZmluZWQoWFBfTUFDT1NYKQotI3ByYWdtYSBvcHRpb25zIGFsaWduPW1h
YzY4awotI2VuZGlmCi0jZW5kaWYgLyogX19MUDY0X18gKi8KLQotLyoKLSAqICBOUFAgaXMgYSBw
bHVnLWluJ3Mgb3BhcXVlIGluc3RhbmNlIGhhbmRsZQotICovCi10eXBlZGVmIHN0cnVjdCBfTlBQ
Ci17Ci0gIHZvaWQqIHBkYXRhOyAgICAgIC8qIHBsdWctaW4gcHJpdmF0ZSBkYXRhICovCi0gIHZv
aWQqIG5kYXRhOyAgICAgIC8qIG5ldHNjYXBlIHByaXZhdGUgZGF0YSAqLwotfSBOUFBfdDsKLQot
dHlwZWRlZiBOUFBfdCogIE5QUDsKLQotdHlwZWRlZiBzdHJ1Y3QgX05QU3RyZWFtCi17Ci0gIHZv
aWQqICAgIHBkYXRhOyAvKiBwbHVnLWluIHByaXZhdGUgZGF0YSAqLwotICB2b2lkKiAgICBuZGF0
YTsgLyogbmV0c2NhcGUgcHJpdmF0ZSBkYXRhICovCi0gIGNvbnN0ICAgIGNoYXIqIHVybDsKLSAg
dWludDMyX3QgZW5kOwotICB1aW50MzJfdCBsYXN0bW9kaWZpZWQ7Ci0gIHZvaWQqICAgIG5vdGlm
eURhdGE7Ci0gIGNvbnN0ICAgIGNoYXIqIGhlYWRlcnM7IC8qIFJlc3BvbnNlIGhlYWRlcnMgZnJv
bSBob3N0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBFeGlzdHMgb25seSBmb3IgPj0g
TlBWRVJTX0hBU19SRVNQT05TRV9IRUFERVJTLgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
KiBVc2VkIGZvciBIVFRQIG9ubHk7IE5VTEwgZm9yIG5vbi1IVFRQLgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKiBBdmFpbGFibGUgZnJvbSBOUFBfTmV3U3RyZWFtIG9ud2FyZHMuCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAqIFBsdWdpbiBzaG91bGQgY29weSB0aGlzIGRhdGEgYmVm
b3JlIHN0b3JpbmcgaXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluY2x1ZGVzIEhU
VFAgc3RhdHVzIGxpbmUgYW5kIGFsbCBoZWFkZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKiBwcmVmZXJhYmx5IHZlcmJhdGltIGFzIHJlY2VpdmVkIGZyb20gc2VydmVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKiBoZWFkZXJzIGZvcm1hdHRlZCBhcyBpbiBIVFRQICgiSGVh
ZGVyOiBWYWx1ZSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhbmQgbmV3bGluZXMg
KFxuLCBOT1QgXHJcbikgc2VwYXJhdGluZyBsaW5lcy4KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICogVGVybWluYXRlZCBieSBcblwwIChOT1QgXG5cblwwKS4gKi8KLX0gTlBTdHJlYW07Ci0K
LXR5cGVkZWYgc3RydWN0IF9OUEJ5dGVSYW5nZQotewotICBpbnQzMl90ICBvZmZzZXQ7IC8qIG5l
Z2F0aXZlIG9mZnNldCBtZWFucyBmcm9tIHRoZSBlbmQgKi8KLSAgdWludDMyX3QgbGVuZ3RoOwot
ICBzdHJ1Y3QgX05QQnl0ZVJhbmdlKiBuZXh0OwotfSBOUEJ5dGVSYW5nZTsKLQotdHlwZWRlZiBz
dHJ1Y3QgX05QU2F2ZWREYXRhCi17Ci0gIGludDMyX3QgbGVuOwotICB2b2lkKiAgIGJ1ZjsKLX0g
TlBTYXZlZERhdGE7Ci0KLXR5cGVkZWYgc3RydWN0IF9OUFJlY3QKLXsKLSAgdWludDE2X3QgdG9w
OwotICB1aW50MTZfdCBsZWZ0OwotICB1aW50MTZfdCBib3R0b207Ci0gIHVpbnQxNl90IHJpZ2h0
OwotfSBOUFJlY3Q7Ci0KLXR5cGVkZWYgc3RydWN0IF9OUFNpemUKLXsKLSAgaW50MzJfdCB3aWR0
aDsKLSAgaW50MzJfdCBoZWlnaHQ7Ci19IE5QU2l6ZTsKLQotdHlwZWRlZiBlbnVtIHsKLSAgTlBG
b2N1c05leHQgPSAwLAotICBOUEZvY3VzUHJldmlvdXMgPSAxCi19IE5QRm9jdXNEaXJlY3Rpb247
Ci0KLS8qIFJldHVybiB2YWx1ZXMgZm9yIE5QUF9IYW5kbGVFdmVudCAqLwotI2RlZmluZSBrTlBF
dmVudE5vdEhhbmRsZWQgMAotI2RlZmluZSBrTlBFdmVudEhhbmRsZWQgMQotLyogRXhhY3QgbWVh
bmluZyBtdXN0IGJlIHNwZWMnZCBpbiBldmVudCBtb2RlbC4gKi8KLSNkZWZpbmUga05QRXZlbnRT
dGFydElNRSAyCi0KLSNpZiBkZWZpbmVkKFhQX1VOSVgpCi0vKgotICogVW5peCBzcGVjaWZpYyBz
dHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucwotICovCi0KLS8qCi0gKiBDYWxsYmFjayBTdHJ1Y3R1
cmVzLgotICoKLSAqIFRoZXNlIGFyZSB1c2VkIHRvIHBhc3MgYWRkaXRpb25hbCBwbGF0Zm9ybSBz
cGVjaWZpYyBpbmZvcm1hdGlvbi4KLSAqLwotZW51bSB7Ci0gIE5QX1NFVFdJTkRPVyA9IDEsCi0g
IE5QX1BSSU5UCi19OwotCi10eXBlZGVmIHN0cnVjdAotewotICBpbnQzMl90IHR5cGU7Ci19IE5Q
QW55Q2FsbGJhY2tTdHJ1Y3Q7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGludDMyX3QgICAgICB0
eXBlOwotI2lmIGRlZmluZWQoTU9aX1gxMSkKLSAgRGlzcGxheSogICAgIGRpc3BsYXk7Ci0gIFZp
c3VhbCogICAgICB2aXN1YWw7Ci0gIENvbG9ybWFwICAgICBjb2xvcm1hcDsKLSAgdW5zaWduZWQg
aW50IGRlcHRoOwotI2VuZGlmCi19IE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3Q7Ci0KLXR5cGVk
ZWYgc3RydWN0Ci17Ci0gIGludDMyX3QgdHlwZTsKLSAgRklMRSogZnA7Ci19IE5QUHJpbnRDYWxs
YmFja1N0cnVjdDsKLQotI2VuZGlmIC8qIFhQX1VOSVggKi8KLQotI2lmIGRlZmluZWQoWFBfTUFD
T1NYKQotdHlwZWRlZiBlbnVtIHsKLSNpZm5kZWYgTlBfTk9fUVVJQ0tEUkFXCi0gIE5QRHJhd2lu
Z01vZGVsUXVpY2tEcmF3ID0gMCwKLSNlbmRpZgotICBOUERyYXdpbmdNb2RlbENvcmVHcmFwaGlj
cyA9IDEsCi0gIE5QRHJhd2luZ01vZGVsT3BlbkdMID0gMiwgLy8gTm90ZTogVGhpcyBpcyBub3Qg
c3VwcG9ydGVkLgotICBOUERyYXdpbmdNb2RlbENvcmVBbmltYXRpb24gPSAzCi19IE5QRHJhd2lu
Z01vZGVsOwotCi10eXBlZGVmIGVudW0gewotI2lmbmRlZiBOUF9OT19DQVJCT04KLSAgTlBFdmVu
dE1vZGVsQ2FyYm9uID0gMCwKLSNlbmRpZgotICBOUEV2ZW50TW9kZWxDb2NvYSA9IDEKLX0gTlBF
dmVudE1vZGVsOwotI2VuZGlmCi0KLS8qCi0gKiAgIFRoZSBmb2xsb3dpbmcgbWFza3MgYXJlIGFw
cGxpZWQgb24gY2VydGFpbiBwbGF0Zm9ybXMgdG8gTlBOViBhbmQKLSAqICAgTlBQViBzZWxlY3Rv
cnMgdGhhdCBwYXNzIGFyb3VuZCBwb2ludGVycyB0byBDT00gaW50ZXJmYWNlcy4gTmV3ZXIKLSAq
ICAgY29tcGlsZXJzIG9uIHNvbWUgcGxhdGZvcm1zIG1heSBnZW5lcmF0ZSB2dGFibGVzIHRoYXQg
YXJlIG5vdAotICogICBjb21wYXRpYmxlIHdpdGggb2xkZXIgY29tcGlsZXJzLiBUbyBwcmV2ZW50
IG9sZGVyIHBsdWdpbnMgZnJvbQotICogICBub3QgdW5kZXJzdGFuZGluZyBhIG5ldyBicm93c2Vy
J3MgQUJJLCB0aGVzZSBtYXNrcyBjaGFuZ2UgdGhlCi0gKiAgIHZhbHVlcyBvZiB0aG9zZSBzZWxl
Y3RvcnMgb24gdGhvc2UgcGxhdGZvcm1zLiBUbyByZW1haW4gYmFja3dhcmRzCi0gKiAgIGNvbXBh
dGlibGUgd2l0aCBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIGJyb3dzZXIsIHBsdWdpbnMgY2Fu
Ci0gKiAgIHVzZSB0aGVzZSBtYXNrcyB0byBkeW5hbWljYWxseSBkZXRlcm1pbmUgYW5kIHVzZSB0
aGUgY29ycmVjdCBDKysKLSAqICAgQUJJIHRoYXQgdGhlIGJyb3dzZXIgaXMgZXhwZWN0aW5nLiBU
aGlzIGRvZXMgbm90IGFwcGx5IHRvIFdpbmRvd3MKLSAqICAgYXMgTWljcm9zb2Z0J3MgQ09NIEFC
SSB3aWxsIGxpa2VseSBub3QgY2hhbmdlLgotICovCi0KLSNkZWZpbmUgTlBfQUJJX0dDQzNfTUFT
SyAgMHgxMDAwMDAwMAotLyoKLSAqICAgZ2NjIDMueCBnZW5lcmF0ZWQgdnRhYmxlcyBvbiBVTklY
IGFuZCBPU1ggYXJlIGluY29tcGF0aWJsZSB3aXRoCi0gKiAgIHByZXZpb3VzIGNvbXBpbGVycy4K
LSAqLwotI2lmIChkZWZpbmVkKFhQX1VOSVgpICYmIGRlZmluZWQoX19HTlVDX18pICYmIChfX0dO
VUNfXyA+PSAzKSkKLSNkZWZpbmUgX05QX0FCSV9NSVhJTl9GT1JfR0NDMyBOUF9BQklfR0NDM19N
QVNLCi0jZWxzZQotI2RlZmluZSBfTlBfQUJJX01JWElOX0ZPUl9HQ0MzIDAKLSNlbmRpZgotCi0j
aWYgZGVmaW5lZChYUF9NQUNPU1gpCi0jZGVmaW5lIE5QX0FCSV9NQUNIT19NQVNLIDB4MDEwMDAw
MDAKLSNkZWZpbmUgX05QX0FCSV9NSVhJTl9GT1JfTUFDSE8gTlBfQUJJX01BQ0hPX01BU0sKLSNl
bHNlCi0jZGVmaW5lIF9OUF9BQklfTUlYSU5fRk9SX01BQ0hPIDAKLSNlbmRpZgotCi0jZGVmaW5l
IE5QX0FCSV9NQVNLIChfTlBfQUJJX01JWElOX0ZPUl9HQ0MzIHwgX05QX0FCSV9NSVhJTl9GT1Jf
TUFDSE8pCi0KLS8qCi0gKiBMaXN0IG9mIHZhcmlhYmxlIG5hbWVzIGZvciB3aGljaCBOUFBfR2V0
VmFsdWUgc2hhbGwgYmUgaW1wbGVtZW50ZWQKLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgTlBQVnBs
dWdpbk5hbWVTdHJpbmcgPSAxLAotICBOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmcsCi0gIE5Q
UFZwbHVnaW5XaW5kb3dCb29sLAotICBOUFBWcGx1Z2luVHJhbnNwYXJlbnRCb29sLAotICBOUFBW
amF2YUNsYXNzLCAgICAgICAgICAgICAgICAvKiBOb3QgaW1wbGVtZW50ZWQgaW4gV2ViS2l0ICov
Ci0gIE5QUFZwbHVnaW5XaW5kb3dTaXplLCAgICAgICAgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBX
ZWJLaXQgKi8KLSAgTlBQVnBsdWdpblRpbWVySW50ZXJ2YWwsICAgICAgLyogTm90IGltcGxlbWVu
dGVkIGluIFdlYktpdCAqLwotICBOUFBWcGx1Z2luU2NyaXB0YWJsZUluc3RhbmNlID0gKDEwIHwg
TlBfQUJJX01BU0spLCAvKiBOb3QgaW1wbGVtZW50ZWQgaW4gV2ViS2l0ICovCi0gIE5QUFZwbHVn
aW5TY3JpcHRhYmxlSUlEID0gMTEsIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBXZWJLaXQgKi8KLSAg
TlBQVmphdmFzY3JpcHRQdXNoQ2FsbGVyQm9vbCA9IDEyLCAgLyogTm90IGltcGxlbWVudGVkIGlu
IFdlYktpdCAqLwotICBOUFBWcGx1Z2luS2VlcExpYnJhcnlJbk1lbW9yeSA9IDEzLCAvKiBOb3Qg
aW1wbGVtZW50ZWQgaW4gV2ViS2l0ICovCi0gIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCAgICAgICAg
ID0gMTQsIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBXZWJLaXQgKi8KLQotICAvKiBHZXQgdGhlIE5Q
T2JqZWN0IGZvciBzY3JpcHRpbmcgdGhlIHBsdWdpbi4gSW50cm9kdWNlZCBpbiBOUEFQSSBtaW5v
ciB2ZXJzaW9uIDE0LgotICAgKi8KLSAgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCAgPSAx
NSwKLQotICAvKiBHZXQgdGhlIHBsdWdpbiB2YWx1ZSAoYXMgXDAtdGVybWluYXRlZCBVVEYtOCBz
dHJpbmcgZGF0YSkgZm9yCi0gICAqIGZvcm0gc3VibWlzc2lvbiBpZiB0aGUgcGx1Z2luIGlzIHBh
cnQgb2YgYSBmb3JtLiBVc2UKLSAgICogTlBOX01lbUFsbG9jKCkgdG8gYWxsb2NhdGUgbWVtb3J5
IGZvciB0aGUgc3RyaW5nIGRhdGEuIEludHJvZHVjZWQKLSAgICogaW4gTlBBUEkgbWlub3IgdmVy
c2lvbiAxNS4KLSAgICovCi0gIE5QUFZmb3JtVmFsdWUgPSAxNiwgICAgLyogTm90IGltcGxlbWVu
dGVkIGluIFdlYktpdCAqLwotCi0gIE5QUFZwbHVnaW5VcmxSZXF1ZXN0c0Rpc3BsYXllZEJvb2wg
PSAxNywgLyogTm90IGltcGxlbWVudGVkIGluIFdlYktpdCAqLwotCi0gIC8qIENoZWNrcyBpZiB0
aGUgcGx1Z2luIGlzIGludGVyZXN0ZWQgaW4gcmVjZWl2aW5nIHRoZSBodHRwIGJvZHkgb2YKLSAg
ICogYWxsIGh0dHAgcmVxdWVzdHMgKGluY2x1ZGluZyBmYWlsZWQgb25lcywgaHR0cCBzdGF0dXMg
IT0gMjAwKS4KLSAgICovCi0gIE5QUFZwbHVnaW5XYW50c0FsbE5ldHdvcmtTdHJlYW1zID0gMTgs
Ci0KLSAgLyogQnJvd3NlcnMgY2FuIHJldHJpZXZlIGEgbmF0aXZlIEFUSyBhY2Nlc3NpYmlsaXR5
IHBsdWcgSUQgdmlhIHRoaXMgdmFyaWFibGUuICovCi0gIE5QUFZwbHVnaW5OYXRpdmVBY2Nlc3Np
YmxlQXRrUGx1Z0lkID0gMTksCi0KLSAgLyogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgcGx1Zy1pbiB3
b3VsZCBsaWtlIHRoZSBicm93c2VyIHRvIGxvYWQgdGhlICJzcmMiIGF0dHJpYnV0ZS4gKi8KLSAg
TlBQVnBsdWdpbkNhbmNlbFNyY1N0cmVhbSA9IDIwCi0KLSNpZiBkZWZpbmVkKFhQX01BQ09TWCkK
LSAgLyogVXNlZCBmb3IgbmVnb3RpYXRpbmcgZHJhd2luZyBtb2RlbHMgKi8KLSAgLCBOUFBWcGx1
Z2luRHJhd2luZ01vZGVsID0gMTAwMAotICAvKiBVc2VkIGZvciBuZWdvdGlhdGluZyBldmVudCBt
b2RlbHMgKi8KLSAgLCBOUFBWcGx1Z2luRXZlbnRNb2RlbCA9IDEwMDEKLSAgLyogSW4gdGhlIE5Q
RHJhd2luZ01vZGVsQ29yZUFuaW1hdGlvbiBkcmF3aW5nIG1vZGVsLCB0aGUgYnJvd3NlciBhc2tz
IHRoZSBwbHVnLWluIGZvciBhIENvcmUgQW5pbWF0aW9uIGxheWVyLiAqLwotICAsIE5QUFZwbHVn
aW5Db3JlQW5pbWF0aW9uTGF5ZXIgPSAxMDAzCi0jZW5kaWYKLQotICAvKiBVc2VkIGZvciBmaWd1
cmluZyBvdXQgd2hldGhlciBhIHBsdWctaW4gaXMgcGxheWluZyBhdWRpby4gKi8KLSAgLCBOUFBW
cGx1Z2luSXNQbGF5aW5nQXVkaW8gPSA0MDAwCi0KLX0gTlBQVmFyaWFibGU7Ci0KLS8qCi0gKiBM
aXN0IG9mIHZhcmlhYmxlIG5hbWVzIGZvciB3aGljaCBOUE5fR2V0VmFsdWUgc2hvdWxkIGJlIGlt
cGxlbWVudGVkLgotICovCi10eXBlZGVmIGVudW0gewotICBOUE5WeERpc3BsYXkgPSAxLAotICBO
UE5WeHRBcHBDb250ZXh0LAotICBOUE5WbmV0c2NhcGVXaW5kb3csCi0gIE5QTlZqYXZhc2NyaXB0
RW5hYmxlZEJvb2wsCi0gIE5QTlZhc2RFbmFibGVkQm9vbCwKLSAgTlBOVmlzT2ZmbGluZUJvb2ws
Ci0KLSAgTlBOVnNlcnZpY2VNYW5hZ2VyID0gKDEwIHwgTlBfQUJJX01BU0spLCAgLyogTm90IGlt
cGxlbWVudGVkIGluIFdlYktpdCAqLwotICBOUE5WRE9NRWxlbWVudCAgICAgPSAoMTEgfCBOUF9B
QklfTUFTSyksICAvKiBOb3QgaW1wbGVtZW50ZWQgaW4gV2ViS2l0ICovCi0gIE5QTlZET01XaW5k
b3cgICAgICA9ICgxMiB8IE5QX0FCSV9NQVNLKSwgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBXZWJL
aXQgKi8KLSAgTlBOVlRvb2xraXQgICAgICAgID0gKDEzIHwgTlBfQUJJX01BU0spLCAgLyogTm90
IGltcGxlbWVudGVkIGluIFdlYktpdCAqLwotICBOUE5WU3VwcG9ydHNYRW1iZWRCb29sID0gMTQs
ICAgICAgICAgICAgICAvKiBOb3QgaW1wbGVtZW50ZWQgaW4gV2ViS2l0ICovCi0KLSAgLyogR2V0
IHRoZSBOUE9iamVjdCB3cmFwcGVyIGZvciB0aGUgYnJvd3NlciB3aW5kb3cuICovCi0gIE5QTlZX
aW5kb3dOUE9iamVjdCA9IDE1LAotCi0gIC8qIEdldCB0aGUgTlBPYmplY3Qgd3JhcHBlciBmb3Ig
dGhlIHBsdWdpbnMgRE9NIGVsZW1lbnQuICovCi0gIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Qg
PSAxNiwKLQotICBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzID0gMTcsCi0KLSAgTlBOVnByaXZhdGVN
b2RlQm9vbCA9IDE4LAotCi0gIE5QTlZzdXBwb3J0c0FkdmFuY2VkS2V5SGFuZGxpbmcgPSAyMQot
Ci0jaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0gIC8qIFVzZWQgZm9yIG5lZ290aWF0aW5nIGRyYXdp
bmcgbW9kZWxzICovCi0gICwgTlBOVnBsdWdpbkRyYXdpbmdNb2RlbCA9IDEwMDAKLSAgLCBOUE5W
Y29udGVudHNTY2FsZUZhY3RvciA9IDEwMDEKLSNpZm5kZWYgTlBfTk9fUVVJQ0tEUkFXCi0gICwg
TlBOVnN1cHBvcnRzUXVpY2tEcmF3Qm9vbCA9IDIwMDAKLSNlbmRpZgotICAsIE5QTlZzdXBwb3J0
c0NvcmVHcmFwaGljc0Jvb2wgPSAyMDAxCi0gICwgTlBOVnN1cHBvcnRzT3BlbkdMQm9vbCA9IDIw
MDIKLSAgLCBOUE5Wc3VwcG9ydHNDb3JlQW5pbWF0aW9uQm9vbCA9IDIwMDMKLSNpZm5kZWYgTlBf
Tk9fQ0FSQk9OCi0gICwgTlBOVnN1cHBvcnRzQ2FyYm9uQm9vbCA9IDMwMDAgLyogVFJVRSBpZiB0
aGUgYnJvd3NlciBzdXBwb3J0cyB0aGUgQ2FyYm9uIGV2ZW50IG1vZGVsICovCi0jZW5kaWYKLSAg
LCBOUE5Wc3VwcG9ydHNDb2NvYUJvb2wgPSAzMDAxIC8qIFRSVUUgaWYgdGhlIGJyb3dzZXIgc3Vw
cG9ydHMgdGhlIENvY29hIGV2ZW50IG1vZGVsICovCi0gICwgTlBOVnN1cHBvcnRzVXBkYXRlZENv
Y29hVGV4dElucHV0Qm9vbCA9IDMwMDIgLyogVFJVRSBpZiB0aGUgYnJvd3NlciBzdXBwb3J0cyB0
aGUgdXBkYXRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENvY29hIHRleHQgaW5wdXQgc3BlY2lmaWNhdGlvbi4gKi8KLSAgLCBOUE5Wc3VwcG9y
dHNDb21wb3NpdGluZ0NvcmVBbmltYXRpb25QbHVnaW5zQm9vbCA9IDc0NjU2IC8qIFRSVUUgaWYg
dGhlIGJyb3dzZXIgc3VwcG9ydHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBIG1vZGVsIGNvbXBvc2l0aW5nICovCi0jZW5k
aWYgLyogWFBfTUFDT1NYICovCi0KLSAgLCBOUE5WbXV0ZUF1ZGlvQm9vbCA9IDQwMDAKLQotfSBO
UE5WYXJpYWJsZTsKLQotdHlwZWRlZiBlbnVtIHsKLSAgTlBOVVJMVkNvb2tpZSA9IDUwMSwKLSAg
TlBOVVJMVlByb3h5Ci19IE5QTlVSTFZhcmlhYmxlOwotCi0vKgotICogVGhlIHR5cGUgb2YgVG9v
bGtpdCB0aGUgd2lkZ2V0cyB1c2UKLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgTlBOVkd0azEyID0g
MSwKLSAgTlBOVkd0azIKLX0gTlBOVG9vbGtpdFR5cGU7Ci0KLS8qCi0gKiBUaGUgdHlwZSBvZiBh
IE5QV2luZG93IC0gaXQgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIHRoZSBkYXRhIHN0cnVjdHVyZQot
ICogcmV0dXJuZWQgaW4gdGhlIHdpbmRvdyBmaWVsZC4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAg
TlBXaW5kb3dUeXBlV2luZG93ID0gMSwKLSAgTlBXaW5kb3dUeXBlRHJhd2FibGUKLX0gTlBXaW5k
b3dUeXBlOwotCi10eXBlZGVmIHN0cnVjdCBfTlBXaW5kb3cKLXsKLSAgdm9pZCogd2luZG93OyAg
LyogUGxhdGZvcm0gc3BlY2lmaWMgd2luZG93IGhhbmRsZSAqLwotICAgICAgICAgICAgICAgICAv
KiBPUy8yOiB4IC0gUG9zaXRpb24gb2YgYm90dG9tIGxlZnQgY29ybmVyICovCi0gICAgICAgICAg
ICAgICAgIC8qIE9TLzI6IHkgLSByZWxhdGl2ZSB0byB2aXNpYmxlIG5ldHNjYXBlIHdpbmRvdyAq
LwotICBpbnQzMl90ICB4OyAgICAgIC8qIFBvc2l0aW9uIG9mIHRvcCBsZWZ0IGNvcm5lciByZWxh
dGl2ZSAqLwotICBpbnQzMl90ICB5OyAgICAgIC8qIHRvIGEgbmV0c2NhcGUgcGFnZS4gKi8KLSAg
dWludDMyX3Qgd2lkdGg7ICAvKiBNYXhpbXVtIHdpbmRvdyBzaXplICovCi0gIHVpbnQzMl90IGhl
aWdodDsKLSAgTlBSZWN0ICAgY2xpcFJlY3Q7IC8qIENsaXBwaW5nIHJlY3RhbmdsZSBpbiBwb3J0
IGNvb3JkaW5hdGVzICovCi0jaWYgZGVmaW5lZChYUF9VTklYKQotICB2b2lkICogd3NfaW5mbzsg
LyogUGxhdGZvcm0tZGVwZW5kZW50IGFkZGl0b25hbCBkYXRhICovCi0jZW5kaWYgLyogWFBfVU5J
WCAqLwotICBOUFdpbmRvd1R5cGUgdHlwZTsgLyogSXMgdGhpcyBhIHdpbmRvdyBvciBhIGRyYXdh
YmxlPyAqLwotfSBOUFdpbmRvdzsKLQotdHlwZWRlZiBzdHJ1Y3QgX05QRnVsbFByaW50Ci17Ci0g
IE5QQm9vbCBwbHVnaW5QcmludGVkOy8qIFNldCBUUlVFIGlmIHBsdWdpbiBoYW5kbGVkIGZ1bGxz
Y3JlZW4gcHJpbnRpbmcgKi8KLSAgTlBCb29sIHByaW50T25lOyAgICAgLyogVFJVRSBpZiBwbHVn
aW4gc2hvdWxkIHByaW50IG9uZSBjb3B5IHRvIGRlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJpbnRlciAqLwotICB2b2lkKiBwbGF0Zm9ybVByaW50OyAvKiBQbGF0Zm9ybS1zcGVj
aWZpYyBwcmludGluZyBpbmZvICovCi19IE5QRnVsbFByaW50OwotCi10eXBlZGVmIHN0cnVjdCBf
TlBFbWJlZFByaW50Ci17Ci0gIE5QV2luZG93IHdpbmRvdzsKLSAgdm9pZCogcGxhdGZvcm1Qcmlu
dDsgLyogUGxhdGZvcm0tc3BlY2lmaWMgcHJpbnRpbmcgaW5mbyAqLwotfSBOUEVtYmVkUHJpbnQ7
Ci0KLXR5cGVkZWYgc3RydWN0IF9OUFByaW50Ci17Ci0gIHVpbnQxNl90IG1vZGU7ICAgICAgICAg
ICAgICAgLyogTlBfRlVMTCBvciBOUF9FTUJFRCAqLwotICB1bmlvbgotICB7Ci0gICAgTlBGdWxs
UHJpbnQgZnVsbFByaW50OyAgIC8qIGlmIG1vZGUgaXMgTlBfRlVMTCAqLwotICAgIE5QRW1iZWRQ
cmludCBlbWJlZFByaW50OyAvKiBpZiBtb2RlIGlzIE5QX0VNQkVEICovCi0gIH0gcHJpbnQ7Ci19
IE5QUHJpbnQ7Ci0KLSNpZiBkZWZpbmVkKFhQX01BQ09TWCkKLSNpZm5kZWYgTlBfTk9fQ0FSQk9O
Ci10eXBlZGVmIEV2ZW50UmVjb3JkIE5QRXZlbnQ7Ci0jZWxzZQotdHlwZWRlZiB2b2lkKiAgTlBF
dmVudDsKLSNlbmRpZgotI2VsaWYgZGVmaW5lZChYUF9XSU4pCi10eXBlZGVmIHN0cnVjdCBfTlBF
dmVudAotewotICB1aW50MTZfdCBldmVudDsKLSAgdWludHB0cl90IHdQYXJhbTsKLSAgdWludHB0
cl90IGxQYXJhbTsKLX0gTlBFdmVudDsKLSNlbGlmIGRlZmluZWQoWFBfT1MyKQotdHlwZWRlZiBz
dHJ1Y3QgX05QRXZlbnQKLXsKLSAgdWludDMyX3QgZXZlbnQ7Ci0gIHVpbnQzMl90IHdQYXJhbTsK
LSAgdWludDMyX3QgbFBhcmFtOwotfSBOUEV2ZW50OwotI2VsaWYgZGVmaW5lZChYUF9VTklYKSAm
JiBkZWZpbmVkKE1PWl9YMTEpCi10eXBlZGVmIFhFdmVudCBOUEV2ZW50OwotI2Vsc2UKLXR5cGVk
ZWYgdm9pZCogIE5QRXZlbnQ7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoWFBfTUFDT1NYKQotdHlw
ZWRlZiB2b2lkKiBOUFJlZ2lvbjsKLSNpZm5kZWYgTlBfTk9fUVVJQ0tEUkFXCi10eXBlZGVmIFJn
bkhhbmRsZSBOUFFEUmVnaW9uOwotI2VuZGlmCi10eXBlZGVmIENHUGF0aFJlZiBOUENHUmVnaW9u
OwotI2VsaWYgZGVmaW5lZChYUF9XSU4pCi10eXBlZGVmIEhSR04gTlBSZWdpb247Ci0jZWxpZiBk
ZWZpbmVkKFhQX1VOSVgpICYmIGRlZmluZWQoTU9aX1gxMSkKLXR5cGVkZWYgUmVnaW9uIE5QUmVn
aW9uOwotI2Vsc2UKLXR5cGVkZWYgdm9pZCAqTlBSZWdpb247Ci0jZW5kaWYKLQotdHlwZWRlZiBz
dHJ1Y3QgX05QTlNTdHJpbmcgTlBOU1N0cmluZzsKLXR5cGVkZWYgc3RydWN0IF9OUE5TV2luZG93
IE5QTlNXaW5kb3c7Ci10eXBlZGVmIHN0cnVjdCBfTlBOU01lbnUgICBOUE5TTWVudTsKLQotI2lm
IGRlZmluZWQoWFBfTUFDT1NYKQotdHlwZWRlZiBOUE5TTWVudSBOUE1lbnU7Ci0jZWxzZQotdHlw
ZWRlZiB2b2lkICpOUE1lbnU7Ci0jZW5kaWYKLQotdHlwZWRlZiBlbnVtIHsKLSAgTlBDb29yZGlu
YXRlU3BhY2VQbHVnaW4gPSAxLAotICBOUENvb3JkaW5hdGVTcGFjZVdpbmRvdywKLSAgTlBDb29y
ZGluYXRlU3BhY2VGbGlwcGVkV2luZG93LAotICBOUENvb3JkaW5hdGVTcGFjZVNjcmVlbiwKLSAg
TlBDb29yZGluYXRlU3BhY2VGbGlwcGVkU2NyZWVuCi19IE5QQ29vcmRpbmF0ZVNwYWNlOwotCi0j
aWYgZGVmaW5lZChYUF9NQUNPU1gpCi0KLSNpZm5kZWYgTlBfTk9fUVVJQ0tEUkFXCi10eXBlZGVm
IHN0cnVjdCBOUF9Qb3J0Ci17Ci0gIENHcmFmUHRyIHBvcnQ7Ci0gIGludDMyX3QgcG9ydHg7IC8q
IHBvc2l0aW9uIGluc2lkZSB0aGUgdG9wbW9zdCB3aW5kb3cgKi8KLSAgaW50MzJfdCBwb3J0eTsK
LX0gTlBfUG9ydDsKLSNlbmRpZiAvKiBOUF9OT19RVUlDS0RSQVcgKi8KLQotLyoKLSAqIE5QX0NH
Q29udGV4dCBpcyB0aGUgdHlwZSBvZiB0aGUgTlBXaW5kb3cncyAnd2luZG93JyB3aGVuIHRoZSBw
bHVnaW4gc3BlY2lmaWVzIE5QRHJhd2luZ01vZGVsQ29yZUdyYXBoaWNzCi0gKiBhcyBpdHMgZHJh
d2luZyBtb2RlbC4KLSAqLwotCi10eXBlZGVmIHN0cnVjdCBOUF9DR0NvbnRleHQKLXsKLSAgQ0dD
b250ZXh0UmVmIGNvbnRleHQ7Ci0jaWZkZWYgTlBfTk9fQ0FSQk9OCi0gIE5QTlNXaW5kb3cgKndp
bmRvdzsKLSNlbHNlCi0gIHZvaWQgKndpbmRvdzsgLyogQSBXaW5kb3dSZWYgb3IgTlVMTCBmb3Ig
dGhlIENvY29hIGV2ZW50IG1vZGVsLiAqLwotI2VuZGlmCi19IE5QX0NHQ29udGV4dDsKLQotdHlw
ZWRlZiBlbnVtIHsKLSAgTlBDb2NvYUV2ZW50RHJhd1JlY3QgPSAxLAotICBOUENvY29hRXZlbnRN
b3VzZURvd24sCi0gIE5QQ29jb2FFdmVudE1vdXNlVXAsCi0gIE5QQ29jb2FFdmVudE1vdXNlTW92
ZWQsCi0gIE5QQ29jb2FFdmVudE1vdXNlRW50ZXJlZCwKLSAgTlBDb2NvYUV2ZW50TW91c2VFeGl0
ZWQsCi0gIE5QQ29jb2FFdmVudE1vdXNlRHJhZ2dlZCwKLSAgTlBDb2NvYUV2ZW50S2V5RG93biwK
LSAgTlBDb2NvYUV2ZW50S2V5VXAsCi0gIE5QQ29jb2FFdmVudEZsYWdzQ2hhbmdlZCwKLSAgTlBD
b2NvYUV2ZW50Rm9jdXNDaGFuZ2VkLAotICBOUENvY29hRXZlbnRXaW5kb3dGb2N1c0NoYW5nZWQs
Ci0gIE5QQ29jb2FFdmVudFNjcm9sbFdoZWVsLAotICBOUENvY29hRXZlbnRUZXh0SW5wdXQKLX0g
TlBDb2NvYUV2ZW50VHlwZTsKLQotdHlwZWRlZiBzdHJ1Y3QgX05QQ29jb2FFdmVudCB7Ci0gIE5Q
Q29jb2FFdmVudFR5cGUgdHlwZTsKLSAgdWludDMyX3QgdmVyc2lvbjsKLSAgdW5pb24gewotICAg
IHN0cnVjdCB7Ci0gICAgICB1aW50MzJfdCBtb2RpZmllckZsYWdzOwotICAgICAgZG91YmxlICAg
cGx1Z2luWDsKLSAgICAgIGRvdWJsZSAgIHBsdWdpblk7Ci0gICAgICBpbnQzMl90ICBidXR0b25O
dW1iZXI7Ci0gICAgICBpbnQzMl90ICBjbGlja0NvdW50OwotICAgICAgZG91YmxlICAgZGVsdGFY
OwotICAgICAgZG91YmxlICAgZGVsdGFZOwotICAgICAgZG91YmxlICAgZGVsdGFaOwotICAgIH0g
bW91c2U7Ci0gICAgc3RydWN0IHsKLSAgICAgIHVpbnQzMl90ICAgIG1vZGlmaWVyRmxhZ3M7Ci0g
ICAgICBOUE5TU3RyaW5nICpjaGFyYWN0ZXJzOwotICAgICAgTlBOU1N0cmluZyAqY2hhcmFjdGVy
c0lnbm9yaW5nTW9kaWZpZXJzOwotICAgICAgTlBCb29sICAgICAgaXNBUmVwZWF0OwotICAgICAg
dWludDE2X3QgICAga2V5Q29kZTsKLSAgICB9IGtleTsKLSAgICBzdHJ1Y3QgewotICAgICAgQ0dD
b250ZXh0UmVmIGNvbnRleHQ7Ci0gICAgICBkb3VibGUgeDsKLSAgICAgIGRvdWJsZSB5OwotICAg
ICAgZG91YmxlIHdpZHRoOwotICAgICAgZG91YmxlIGhlaWdodDsKLSAgICB9IGRyYXc7Ci0gICAg
c3RydWN0IHsKLSAgICAgIE5QQm9vbCBoYXNGb2N1czsKLSAgICB9IGZvY3VzOwotICAgIHN0cnVj
dCB7Ci0gICAgICBOUE5TU3RyaW5nICp0ZXh0OwotICAgIH0gdGV4dDsKLSAgfSBkYXRhOwotfSBO
UENvY29hRXZlbnQ7Ci0KLSNpZm5kZWYgTlBfTk9fQ0FSQk9OCi0vKiBOb24tc3RhbmRhcmQgZXZl
bnQgdHlwZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIEhhbmRsZUV2ZW50ICovCi1lbnVtIE5QRXZl
bnRUeXBlIHsKLSAgTlBFdmVudFR5cGVfR2V0Rm9jdXNFdmVudCA9IChvc0V2dCArIDE2KSwKLSAg
TlBFdmVudFR5cGVfTG9zZUZvY3VzRXZlbnQsCi0gIE5QRXZlbnRUeXBlX0FkanVzdEN1cnNvckV2
ZW50LAotICBOUEV2ZW50VHlwZV9NZW51Q29tbWFuZEV2ZW50LAotICBOUEV2ZW50VHlwZV9DbGlw
cGluZ0NoYW5nZWRFdmVudCwKLSAgTlBFdmVudFR5cGVfU2Nyb2xsaW5nQmVnaW5zRXZlbnQgPSAx
MDAwLAotICBOUEV2ZW50VHlwZV9TY3JvbGxpbmdFbmRzRXZlbnQKLX07Ci0jZW5kaWYgLyogTlBf
Tk9fQ0FSQk9OICovCi0KLSNlbmRpZiAvKiBYUF9NQUNPU1ggKi8KLQotLyoKLSAqIFZhbHVlcyBm
b3IgbW9kZSBwYXNzZWQgdG8gTlBQX05ldzoKLSAqLwotI2RlZmluZSBOUF9FTUJFRCAxCi0jZGVm
aW5lIE5QX0ZVTEwgIDIKLQotLyoKLSAqIFZhbHVlcyBmb3Igc3RyZWFtIHR5cGUgcGFzc2VkIHRv
IE5QUF9OZXdTdHJlYW06Ci0gKi8KLSNkZWZpbmUgTlBfTk9STUFMICAgICAxCi0jZGVmaW5lIE5Q
X1NFRUsgICAgICAgMgotI2RlZmluZSBOUF9BU0ZJTEUgICAgIDMKLSNkZWZpbmUgTlBfQVNGSUxF
T05MWSA0Ci0KLSNkZWZpbmUgTlBfTUFYUkVBRFkgKCgodW5zaWduZWQpKH4wKTw8MSk+PjEpCi0K
LS8qCi0gKiBGbGFncyBmb3IgTlBQX0NsZWFyU2l0ZURhdGEuCi0gKi8KLSNkZWZpbmUgTlBfQ0xF
QVJfQUxMICAgMAotI2RlZmluZSBOUF9DTEVBUl9DQUNIRSAoMSA8PCAwKQotCi0jaWYgIWRlZmlu
ZWQoX19MUDY0X18pCi0jaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0jcHJhZ21hIG9wdGlvbnMgYWxp
Z249cmVzZXQKLSNlbmRpZgotI2VuZGlmIC8qIF9fTFA2NF9fICovCi0KLS8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovCi0vKiAgICAgICBFcnJvciBhbmQgUmVhc29uIENvZGUgZGVmaW5pdGlvbnMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyoKLSAqIFZhbHVl
cyBvZiB0eXBlIE5QRXJyb3I6Ci0gKi8KLSNkZWZpbmUgTlBFUlJfQkFTRSAgICAgICAgICAgICAg
ICAgICAgICAgICAwCi0jZGVmaW5lIE5QRVJSX05PX0VSUk9SICAgICAgICAgICAgICAgICAgICAo
TlBFUlJfQkFTRSArIDApCi0jZGVmaW5lIE5QRVJSX0dFTkVSSUNfRVJST1IgICAgICAgICAgICAg
ICAoTlBFUlJfQkFTRSArIDEpCi0jZGVmaW5lIE5QRVJSX0lOVkFMSURfSU5TVEFOQ0VfRVJST1Ig
ICAgICAoTlBFUlJfQkFTRSArIDIpCi0jZGVmaW5lIE5QRVJSX0lOVkFMSURfRlVOQ1RBQkxFX0VS
Uk9SICAgICAoTlBFUlJfQkFTRSArIDMpCi0jZGVmaW5lIE5QRVJSX01PRFVMRV9MT0FEX0ZBSUxF
RF9FUlJPUiAgICAoTlBFUlJfQkFTRSArIDQpCi0jZGVmaW5lIE5QRVJSX09VVF9PRl9NRU1PUllf
RVJST1IgICAgICAgICAoTlBFUlJfQkFTRSArIDUpCi0jZGVmaW5lIE5QRVJSX0lOVkFMSURfUExV
R0lOX0VSUk9SICAgICAgICAoTlBFUlJfQkFTRSArIDYpCi0jZGVmaW5lIE5QRVJSX0lOVkFMSURf
UExVR0lOX0RJUl9FUlJPUiAgICAoTlBFUlJfQkFTRSArIDcpCi0jZGVmaW5lIE5QRVJSX0lOQ09N
UEFUSUJMRV9WRVJTSU9OX0VSUk9SICAoTlBFUlJfQkFTRSArIDgpCi0jZGVmaW5lIE5QRVJSX0lO
VkFMSURfUEFSQU0gICAgICAgICAgICAgICAoTlBFUlJfQkFTRSArIDkpCi0jZGVmaW5lIE5QRVJS
X0lOVkFMSURfVVJMICAgICAgICAgICAgICAgICAoTlBFUlJfQkFTRSArIDEwKQotI2RlZmluZSBO
UEVSUl9GSUxFX05PVF9GT1VORCAgICAgICAgICAgICAgKE5QRVJSX0JBU0UgKyAxMSkKLSNkZWZp
bmUgTlBFUlJfTk9fREFUQSAgICAgICAgICAgICAgICAgICAgIChOUEVSUl9CQVNFICsgMTIpCi0j
ZGVmaW5lIE5QRVJSX1NUUkVBTV9OT1RfU0VFS0FCTEUgICAgICAgICAoTlBFUlJfQkFTRSArIDEz
KQotCi0vKgotICogVmFsdWVzIG9mIHR5cGUgTlBSZWFzb246Ci0gKi8KLSNkZWZpbmUgTlBSRVNf
QkFTRSAgICAgICAgICAwCi0jZGVmaW5lIE5QUkVTX0RPTkUgICAgICAgICAoTlBSRVNfQkFTRSAr
IDApCi0jZGVmaW5lIE5QUkVTX05FVFdPUktfRVJSICAoTlBSRVNfQkFTRSArIDEpCi0jZGVmaW5l
IE5QUkVTX1VTRVJfQlJFQUsgICAoTlBSRVNfQkFTRSArIDIpCi0KLS8qCi0gKiBEb24ndCB1c2Ug
dGhlc2Ugb2Jzb2xldGUgZXJyb3IgY29kZXMgYW55IG1vcmUuCi0gKi8KLSNkZWZpbmUgTlBfTk9F
UlIgIE5QX05PRVJSX2lzX29ic29sZXRlX3VzZV9OUEVSUl9OT19FUlJPUgotI2RlZmluZSBOUF9F
SU5WQUwgTlBfRUlOVkFMX2lzX29ic29sZXRlX3VzZV9OUEVSUl9HRU5FUklDX0VSUk9SCi0jZGVm
aW5lIE5QX0VBQk9SVCBOUF9FQUJPUlRfaXNfb2Jzb2xldGVfdXNlX05QUkVTX1VTRVJfQlJFQUsK
LQotLyoKLSAqIFZlcnNpb24gZmVhdHVyZSBpbmZvcm1hdGlvbgotICovCi0jZGVmaW5lIE5QVkVS
U19IQVNfU1RSRUFNT1VUUFVUICAgICAgICAgICAgIDgKLSNkZWZpbmUgTlBWRVJTX0hBU19OT1RJ
RklDQVRJT04gICAgICAgICAgICAgOQotI2RlZmluZSBOUFZFUlNfSEFTX0xJVkVDT05ORUNUICAg
ICAgICAgICAgICA5Ci0jZGVmaW5lIE5QVkVSU19XSU4xNl9IQVNfTElWRUNPTk5FQ1QgICAgICAg
IDkKLSNkZWZpbmUgTlBWRVJTXzY4S19IQVNfTElWRUNPTk5FQ1QgICAgICAgICAgMTEKLSNkZWZp
bmUgTlBWRVJTX0hBU19XSU5ET1dMRVNTICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgTlBWRVJT
X0hBU19YUENPTk5FQ1RfU0NSSVBUSU5HICAgICAgMTMgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBX
ZWJLaXQgKi8KLSNkZWZpbmUgTlBWRVJTX0hBU19OUFJVTlRJTUVfU0NSSVBUSU5HICAgICAgMTQK
LSNkZWZpbmUgTlBWRVJTX0hBU19GT1JNX1ZBTFVFUyAgICAgICAgICAgICAgMTUgIC8qIE5vdCBp
bXBsZW1lbnRlZCBpbiBXZWJLaXQ7IHNlZSBidWcgMTMwNjEgKi8KLSNkZWZpbmUgTlBWRVJTX0hB
U19QT1BVUFNfRU5BQkxFRF9TVEFURSAgICAgMTYgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBXZWJL
aXQgKi8KLSNkZWZpbmUgTlBWRVJTX0hBU19SRVNQT05TRV9IRUFERVJTICAgICAgICAgMTcKLSNk
ZWZpbmUgTlBWRVJTX0hBU19OUE9CSkVDVF9FTlVNICAgICAgICAgICAgMTgKLSNkZWZpbmUgTlBW
RVJTX0hBU19QTFVHSU5fVEhSRUFEX0FTWU5DX0NBTEwgMTkKLSNkZWZpbmUgTlBWRVJTX0hBU19B
TExfTkVUV09SS19TVFJFQU1TICAgICAgMjAKLSNkZWZpbmUgTlBWRVJTX0hBU19VUkxfQU5EX0FV
VEhfSU5GTyAgICAgICAgMjEKLSNkZWZpbmUgTlBWRVJTX0hBU19QUklWQVRFX01PREUgICAgICAg
ICAgICAgMjIKLSNkZWZpbmUgTlBWRVJTX01BQ09TWF9IQVNfRVZFTlRfTU9ERUxTICAgICAgMjMK
LSNkZWZpbmUgTlBWRVJTX0hBU19DQU5DRUxfU1JDX1NUUkVBTSAgICAgICAgMjQKLSNkZWZpbmUg
TlBWRVJTX0hBU19BRFZBTkNFRF9LRVlfSEFORExJTkcgICAgMjUKLSNkZWZpbmUgTlBWRVJTX0hB
U19VUkxfUkVESVJFQ1RfSEFORExJTkcgICAgMjYKLSNkZWZpbmUgTlBWRVJTX0hBU19DTEVBUl9T
SVRFX0RBVEEgICAgICAgICAgMjcKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qICAgICAgICAgICAg
ICAgICAgICAgICAgRnVuY3Rpb24gUHJvdG90eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgZGVmaW5lZChfX09TMl9fKQotI2RlZmluZSBO
UF9MT0FERFMgX1N5c3RlbQotI2Vsc2UKLSNkZWZpbmUgTlBfTE9BRERTCi0jZW5kaWYKLQotI2lm
ZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0vKiBOUFBfKiBmdW5jdGlv
bnMgYXJlIHByb3ZpZGVkIGJ5IHRoZSBwbHVnaW4gYW5kIGNhbGxlZCBieSB0aGUgbmF2aWdhdG9y
LiAqLwotCi0jaWYgZGVmaW5lZChYUF9VTklYKQotY29uc3QgY2hhciogTlBQX0dldE1JTUVEZXNj
cmlwdGlvbih2b2lkKTsKLSNlbmRpZgotCi1OUEVycm9yIE5QX0xPQUREUyBOUFBfSW5pdGlhbGl6
ZSh2b2lkKTsKLXZvaWQgICAgTlBfTE9BRERTIE5QUF9TaHV0ZG93bih2b2lkKTsKLU5QRXJyb3Ig
TlBfTE9BRERTIE5QUF9OZXcoTlBNSU1FVHlwZSBwbHVnaW5UeXBlLCBOUFAgaW5zdGFuY2UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IG1vZGUsIGludDE2X3QgYXJnYywgY2hh
ciogYXJnbltdLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBhcmd2W10sIE5QU2F2
ZWREYXRhKiBzYXZlZCk7Ci1OUEVycm9yIE5QX0xPQUREUyBOUFBfRGVzdHJveShOUFAgaW5zdGFu
Y2UsIE5QU2F2ZWREYXRhKiogc2F2ZSk7Ci1OUEVycm9yIE5QX0xPQUREUyBOUFBfU2V0V2luZG93
KE5QUCBpbnN0YW5jZSwgTlBXaW5kb3cqIHdpbmRvdyk7Ci1OUEVycm9yIE5QX0xPQUREUyBOUFBf
TmV3U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOUFN0cmVhbSogc3RyZWFtLCBOUEJvb2wgc2Vla2FibGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90KiBzdHlwZSk7Ci1OUEVycm9yIE5Q
X0xPQUREUyBOUFBfRGVzdHJveVN0cmVhbShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUFJlYXNvbiByZWFzb24pOwot
aW50MzJfdCBOUF9MT0FERFMgTlBQX1dyaXRlUmVhZHkoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSog
c3RyZWFtKTsKLWludDMyX3QgTlBfTE9BRERTIE5QUF9Xcml0ZShOUFAgaW5zdGFuY2UsIE5QU3Ry
ZWFtKiBzdHJlYW0sIGludDMyX3Qgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludDMyX3QgbGVuLCB2b2lkKiBidWZmZXIpOwotdm9pZCAgICBOUF9MT0FERFMgTlBQX1N0cmVh
bUFzRmlsZShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZuYW1lKTsKLXZvaWQgICAgTlBfTE9BRERT
IE5QUF9QcmludChOUFAgaW5zdGFuY2UsIE5QUHJpbnQqIHBsYXRmb3JtUHJpbnQpOwotaW50MTZf
dCBOUF9MT0FERFMgTlBQX0hhbmRsZUV2ZW50KE5QUCBpbnN0YW5jZSwgdm9pZCogZXZlbnQpOwot
dm9pZCAgICBOUF9MT0FERFMgTlBQX1VSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIq
IHVybCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlBSZWFzb24gcmVhc29uLCB2
b2lkKiBub3RpZnlEYXRhKTsKLWpyZWYgICAgTlBfTE9BRERTIE5QUF9HZXRKYXZhQ2xhc3Modm9p
ZCk7Ci1OUEVycm9yIE5QX0xPQUREUyBOUFBfR2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUFBWYXJp
YWJsZSB2YXJpYWJsZSwgdm9pZCAqdmFsdWUpOwotTlBFcnJvciBOUF9MT0FERFMgTlBQX1NldFZh
bHVlKE5QUCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnZhbHVlKTsKLU5Q
Qm9vbCAgTlBfTE9BRERTIE5QUF9Hb3RGb2N1cyhOUFAgaW5zdGFuY2UsIE5QRm9jdXNEaXJlY3Rp
b24gZGlyZWN0aW9uKTsKLXZvaWQgICAgTlBfTE9BRERTIE5QUF9Mb3N0Rm9jdXMoTlBQIGluc3Rh
bmNlKTsKLXZvaWQgICAgTlBfTE9BRERTIE5QUF9VUkxSZWRpcmVjdE5vdGlmeShOUFAgaW5zdGFu
Y2UsIGNvbnN0IGNoYXIqIHVybCwgaW50MzJfdCBzdGF0dXMsIHZvaWQqIG5vdGlmeURhdGEpOwot
TlBFcnJvciBOUF9MT0FERFMgTlBQX0NsZWFyU2l0ZURhdGEoY29uc3QgY2hhciogc2l0ZSwgdWlu
dDY0X3QgZmxhZ3MsIHVpbnQ2NF90IG1heEFnZSk7Ci1jaGFyKiogIE5QX0xPQUREUyBOUFBfR2V0
U2l0ZXNXaXRoRGF0YSh2b2lkKTsKLQotLyogTlBOXyogZnVuY3Rpb25zIGFyZSBwcm92aWRlZCBi
eSB0aGUgbmF2aWdhdG9yIGFuZCBjYWxsZWQgYnkgdGhlIHBsdWdpbi4gKi8KLXZvaWQgICAgICAg
IE5QX0xPQUREUyBOUE5fVmVyc2lvbihpbnQqIHBsdWdpbl9tYWpvciwgaW50KiBwbHVnaW5fbWlu
b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBuZXRzY2FwZV9tYWpv
ciwgaW50KiBuZXRzY2FwZV9taW5vcik7Ci1OUEVycm9yICAgICBOUF9MT0FERFMgTlBOX0dldFVS
TE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0
YSk7Ci1OUEVycm9yICAgICBOUF9MT0FERFMgTlBOX0dldFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0
IGNoYXIqIHVybCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IHRhcmdldCk7Ci1OUEVycm9yICAgICBOUF9MT0FERFMgTlBOX1Bvc3RVUkxOb3RpZnkoTlBQIGlu
c3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBub3RpZnlEYXRh
KTsKLU5QRXJyb3IgICAgIE5QX0xPQUREUyBOUE5fUG9zdFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0
IGNoYXIqIHVybCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiB0YXJnZXQsIHVpbnQzMl90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlKTsKLU5QRXJyb3IgICAgIE5QX0xPQUREUyBO
UE5fUmVxdWVzdFJlYWQoTlBTdHJlYW0qIHN0cmVhbSwgTlBCeXRlUmFuZ2UqIHJhbmdlTGlzdCk7
Ci1OUEVycm9yICAgICBOUF9MT0FERFMgTlBOX05ld1N0cmVhbShOUFAgaW5zdGFuY2UsIE5QTUlN
RVR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIHRhcmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pOwotaW50MzJfdCAgICAgTlBfTE9BRERTIE5Q
Tl9Xcml0ZShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyX3QgbGVuLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBidWZmZXIpOwotTlBFcnJvciAgICAg
TlBfTE9BRERTIE5QTl9EZXN0cm95U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVh
bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUFJlYXNvbiByZWFz
b24pOwotdm9pZCAgICAgICAgTlBfTE9BRERTIE5QTl9TdGF0dXMoTlBQIGluc3RhbmNlLCBjb25z
dCBjaGFyKiBtZXNzYWdlKTsKLWNvbnN0IGNoYXIqIE5QX0xPQUREUyBOUE5fVXNlckFnZW50KE5Q
UCBpbnN0YW5jZSk7Ci12b2lkKiAgICAgICBOUF9MT0FERFMgTlBOX01lbUFsbG9jKHVpbnQzMl90
IHNpemUpOwotdm9pZCAgICAgICAgTlBfTE9BRERTIE5QTl9NZW1GcmVlKHZvaWQqIHB0cik7Ci11
aW50MzJfdCAgICBOUF9MT0FERFMgTlBOX01lbUZsdXNoKHVpbnQzMl90IHNpemUpOwotdm9pZCAg
ICAgICAgTlBfTE9BRERTIE5QTl9SZWxvYWRQbHVnaW5zKE5QQm9vbCByZWxvYWRQYWdlcyk7Ci1K
UklFbnYqICAgICBOUF9MT0FERFMgTlBOX0dldEphdmFFbnYodm9pZCk7Ci1qcmVmICAgICAgICBO
UF9MT0FERFMgTlBOX0dldEphdmFQZWVyKE5QUCBpbnN0YW5jZSk7Ci1OUEVycm9yICAgICBOUF9M
T0FERFMgTlBOX0dldFZhbHVlKE5QUCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnZhbHVlKTsKLU5QRXJyb3Ig
ICAgIE5QX0xPQUREUyBOUE5fU2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJp
YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdmFsdWUpOwot
dm9pZCAgICAgICAgTlBfTE9BRERTIE5QTl9JbnZhbGlkYXRlUmVjdChOUFAgaW5zdGFuY2UsIE5Q
UmVjdCAqaW52YWxpZFJlY3QpOwotdm9pZCAgICAgICAgTlBfTE9BRERTIE5QTl9JbnZhbGlkYXRl
UmVnaW9uKE5QUCBpbnN0YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOUFJlZ2lvbiBpbnZhbGlkUmVnaW9uKTsKLXZvaWQgICAgICAgIE5QX0xPQUREUyBO
UE5fRm9yY2VSZWRyYXcoTlBQIGluc3RhbmNlKTsKLXZvaWQgICAgICAgIE5QX0xPQUREUyBOUE5f
UHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5zdGFuY2UsIE5QQm9vbCBlbmFibGVkKTsKLXZv
aWQgICAgICAgIE5QX0xPQUREUyBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5j
ZSk7Ci12b2lkICAgICAgICBOUF9MT0FERFMgTlBOX1BsdWdpblRocmVhZEFzeW5jQ2FsbChOUFAg
aW5zdGFuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkICgqZnVuYykgKHZvaWQgKiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSk7Ci1OUEVycm9yICAgICBOUF9MT0FERFMg
TlBOX0dldFZhbHVlRm9yVVJMKE5QUCBpbnN0YW5jZSwgTlBOVVJMVmFyaWFibGUgdmFyaWFibGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnVy
bCwgY2hhciAqKnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50MzJfdCAqbGVuKTsKLU5QRXJyb3IgICAgIE5QX0xPQUREUyBOUE5fU2V0VmFsdWVGb3JV
UkwoTlBQIGluc3RhbmNlLCBOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdXJsLCBjb25zdCBjaGFyICp2
YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
bGVuKTsKLU5QRXJyb3IgICAgIE5QX0xPQUREUyBOUE5fR2V0QXV0aGVudGljYXRpb25JbmZvKE5Q
UCBpbnN0YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKnByb3RvY29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdCwgaW50MzJfdCBwb3J0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2No
ZW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqcmVhbG0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICoqdXNlcm5hbWUsIHVpbnQzMl90ICp1bGVuLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKnBhc3N3b3JkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnBsZW4p
OwotdWludDMyX3QgICAgTlBfTE9BRERTIE5QTl9TY2hlZHVsZVRpbWVyKE5QUCBpbnN0YW5jZSwg
dWludDMyX3QgaW50ZXJ2YWwsIE5QQm9vbCByZXBlYXQsIHZvaWQgKCp0aW1lckZ1bmMpKE5QUCBu
cHAsIHVpbnQzMl90IHRpbWVySUQpKTsKLXZvaWQgICAgICAgIE5QX0xPQUREUyBOUE5fVW5zY2hl
ZHVsZVRpbWVyKE5QUCBpbnN0YW5jZSwgdWludDMyX3QgdGltZXJJRCk7Ci1OUEVycm9yICAgICBO
UF9MT0FERFMgTlBOX1BvcFVwQ29udGV4dE1lbnUoTlBQIGluc3RhbmNlLCBOUE1lbnUqIG1lbnUp
OwotTlBCb29sICAgICAgTlBfTE9BRERTIE5QTl9Db252ZXJ0UG9pbnQoTlBQIGluc3RhbmNlLCBk
b3VibGUgc291cmNlWCwgZG91YmxlIHNvdXJjZVksIE5QQ29vcmRpbmF0ZVNwYWNlIHNvdXJjZVNw
YWNlLCBkb3VibGUgKmRlc3RYLCBkb3VibGUgKmRlc3RZLCBOUENvb3JkaW5hdGVTcGFjZSBkZXN0
U3BhY2UpOwotTlBCb29sICAgICAgTlBfTE9BRERTIE5QTl9IYW5kbGVFdmVudChOUFAgaW5zdGFu
Y2UsIHZvaWQgKmV2ZW50LCBOUEJvb2wgaGFuZGxlZCk7Ci1OUEJvb2wgICAgICBOUF9MT0FERFMg
TlBOX1VuZm9jdXNJbnN0YW5jZShOUFAgaW5zdGFuY2UsIE5QRm9jdXNEaXJlY3Rpb24gZGlyZWN0
aW9uKTsKLXZvaWQgICAgICAgIE5QX0xPQUREUyBOUE5fVVJMUmVkaXJlY3RSZXNwb25zZShOUFAg
aW5zdGFuY2UsIHZvaWQqIG5vdGlmeURhdGEsIE5QQm9vbCBhbGxvdyk7Ci0KLSNpZmRlZiBfX2Nw
bHVzcGx1cwotfSAgLyogZW5kIGV4dGVybiAiQyIgKi8KLSNlbmRpZgotCi0jZW5kaWYgLyogUkNf
SU5WT0tFRCAqLwotI2lmIGRlZmluZWQoX19PUzJfXykKLSNwcmFnbWEgcGFjaygpCi0jZW5kaWYK
LQotI2VuZGlmIC8qIG5wYXBpX2hfICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL25wZnVuY3Rpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL25wZnVuY3Rpb25zLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NWY3NmIwZGY1OTJmY2M1NjdhYmYzNWQ1
ZGU1ZTQ2Yzc4MmMyZDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ucGZ1bmN0aW9ucy5oCisrKyAvZGV2L251bGwK
QEAgLTEsMjI5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0jaWZuZGVmIE5QRlVOQ1RJT05TX0gKLSNkZWZpbmUgTlBGVU5DVElPTlNfSAotCi0K
LSNpbmNsdWRlICJucHJ1bnRpbWUuaCIKLSNpbmNsdWRlICJucGFwaS5oIgotCi0jaWZkZWYgX19j
cGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFhQX1dJTikKLSNk
ZWZpbmUgRVhQT1JURURfQ0FMTEJBQ0soX3R5cGUsIF9uYW1lKSBfdHlwZSAoX19zdGRjYWxsICog
X25hbWUpCi0jZWxzZQotI2RlZmluZSBFWFBPUlRFRF9DQUxMQkFDSyhfdHlwZSwgX25hbWUpIF90
eXBlICgqIF9uYW1lKQotI2VuZGlmCi0KLXR5cGVkZWYgTlBFcnJvciAoKk5QTl9HZXRVUkxOb3Rp
ZnlQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciogd2lu
ZG93LCB2b2lkKiBub3RpZnlEYXRhKTsKLXR5cGVkZWYgTlBFcnJvciAoKk5QTl9Qb3N0VVJMTm90
aWZ5UHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHdp
bmRvdywgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBu
b3RpZnlEYXRhKTsKLXR5cGVkZWYgTlBFcnJvciAoKk5QTl9SZXF1ZXN0UmVhZFByb2NQdHIpKE5Q
U3RyZWFtKiBzdHJlYW0sIE5QQnl0ZVJhbmdlKiByYW5nZUxpc3QpOwotdHlwZWRlZiBOUEVycm9y
ICgqTlBOX05ld1N0cmVhbVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBj
b25zdCBjaGFyKiB3aW5kb3csIE5QU3RyZWFtKiogc3RyZWFtKTsKLXR5cGVkZWYgaW50MzJfdCAo
Kk5QTl9Xcml0ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzJf
dCBsZW4sIHZvaWQqIGJ1ZmZlcik7Ci10eXBlZGVmIE5QRXJyb3IgKCpOUE5fRGVzdHJveVN0cmVh
bVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29u
KTsKLXR5cGVkZWYgdm9pZCAoKk5QTl9TdGF0dXNQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0
IGNoYXIqIG1lc3NhZ2UpOwotdHlwZWRlZiBjb25zdCBjaGFyKigqTlBOX1VzZXJBZ2VudFByb2NQ
dHIpKE5QUCBpbnN0YW5jZSk7Ci10eXBlZGVmIHZvaWQqICgqTlBOX01lbUFsbG9jUHJvY1B0ciko
dWludDMyX3Qgc2l6ZSk7Ci10eXBlZGVmIHZvaWQgKCpOUE5fTWVtRnJlZVByb2NQdHIpKHZvaWQq
IHB0cik7Ci10eXBlZGVmIHVpbnQzMl90ICgqTlBOX01lbUZsdXNoUHJvY1B0cikodWludDMyX3Qg
c2l6ZSk7Ci10eXBlZGVmIHZvaWQgKCpOUE5fUmVsb2FkUGx1Z2luc1Byb2NQdHIpKE5QQm9vbCBy
ZWxvYWRQYWdlcyk7Ci10eXBlZGVmIE5QRXJyb3IgKCpOUE5fR2V0VmFsdWVQcm9jUHRyKShOUFAg
aW5zdGFuY2UsIE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkICpyZXRfdmFsdWUpOwotdHlwZWRl
ZiBOUEVycm9yICgqTlBOX1NldFZhbHVlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJs
ZSB2YXJpYWJsZSwgdm9pZCAqdmFsdWUpOwotdHlwZWRlZiB2b2lkICgqTlBOX0ludmFsaWRhdGVS
ZWN0UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFJlY3QgKnJlY3QpOwotdHlwZWRlZiB2b2lkICgq
TlBOX0ludmFsaWRhdGVSZWdpb25Qcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUmVnaW9uIHJlZ2lv
bik7Ci10eXBlZGVmIHZvaWQgKCpOUE5fRm9yY2VSZWRyYXdQcm9jUHRyKShOUFAgaW5zdGFuY2Up
OwotdHlwZWRlZiBOUEVycm9yICgqTlBOX0dldFVSTFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29u
c3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB3aW5kb3cpOwotdHlwZWRlZiBOUEVycm9yICgqTlBO
X1Bvc3RVUkxQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hh
ciogd2luZG93LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpOwot
dHlwZWRlZiB2b2lkKiAoKk5QTl9HZXRKYXZhRW52UHJvY1B0cikodm9pZCk7Ci10eXBlZGVmIHZv
aWQqICgqTlBOX0dldEphdmFQZWVyUHJvY1B0cikoTlBQIGluc3RhbmNlKTsKLXR5cGVkZWYgdm9p
ZCAgKCpOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBC
b29sIGVuYWJsZWQpOwotdHlwZWRlZiB2b2lkICAoKk5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGVQ
cm9jUHRyKShOUFAgaW5zdGFuY2UpOwotdHlwZWRlZiB2b2lkICgqTlBOX1BsdWdpblRocmVhZEFz
eW5jQ2FsbFByb2NQdHIpKE5QUCBucHAsIHZvaWQgKCpmdW5jKSh2b2lkICopLCB2b2lkICp1c2Vy
RGF0YSk7Ci10eXBlZGVmIE5QRXJyb3IgKCpOUE5fR2V0VmFsdWVGb3JVUkxQcm9jUHRyKShOUFAg
bnBwLCBOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwgY29uc3QgY2hhciogdXJsLCBjaGFyKiogdmFs
dWUsIHVpbnQzMl90KiBsZW4pOwotdHlwZWRlZiBOUEVycm9yICgqTlBOX1NldFZhbHVlRm9yVVJM
UHJvY1B0cikoTlBQIG5wcCwgTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIqIHVy
bCwgY29uc3QgY2hhciogdmFsdWUsIHVpbnQzMl90IGxlbik7Ci10eXBlZGVmIE5QRXJyb3IgKCpO
UE5fR2V0QXV0aGVudGljYXRpb25JbmZvUHJvY1B0cikoTlBQIG5wcCwgY29uc3QgY2hhciogcHJv
dG9jb2wsIGNvbnN0IGNoYXIqIGhvc3QsIGludDMyX3QgcG9ydCwgY29uc3QgY2hhciogc2NoZW1l
LCBjb25zdCBjaGFyICpyZWFsbSwgY2hhcioqIHVzZXJuYW1lLCB1aW50MzJfdCogdWxlbiwgY2hh
cioqIHBhc3N3b3JkLCB1aW50MzJfdCogcGxlbik7Ci0KLXR5cGVkZWYgdWludDMyX3QgKCpOUE5f
U2NoZWR1bGVUaW1lclByb2NQdHIpKE5QUCBucHAsIHVpbnQzMl90IGludGVydmFsLCBOUEJvb2wg
cmVwZWF0LCB2b2lkICgqdGltZXJGdW5jKShOUFAgbnBwLCB1aW50MzJfdCB0aW1lcklEKSk7Ci10
eXBlZGVmIHZvaWQgKCpOUE5fVW5zY2hlZHVsZVRpbWVyUHJvY1B0cikoTlBQIG5wcCwgdWludDMy
X3QgdGltZXJJRCk7Ci10eXBlZGVmIE5QRXJyb3IgKCpOUE5fUG9wVXBDb250ZXh0TWVudVByb2NQ
dHIpKE5QUCBpbnN0YW5jZSwgTlBNZW51KiBtZW51KTsKLXR5cGVkZWYgTlBCb29sICgqTlBOX0Nv
bnZlcnRQb2ludFByb2NQdHIpKE5QUCBucHAsIGRvdWJsZSBzb3VyY2VYLCBkb3VibGUgc291cmNl
WSwgTlBDb29yZGluYXRlU3BhY2Ugc291cmNlU3BhY2UsIGRvdWJsZSAqZGVzdFgsIGRvdWJsZSAq
ZGVzdFksIE5QQ29vcmRpbmF0ZVNwYWNlIGRlc3RTcGFjZSk7Ci10eXBlZGVmIE5QQm9vbCAoKk5Q
Tl9IYW5kbGVFdmVudFB0cikoTlBQIGluc3RhbmNlLCB2b2lkICpldmVudCwgTlBCb29sIGhhbmRs
ZWQpOwotdHlwZWRlZiBOUEJvb2wgKCpOUE5fVW5mb2N1c0luc3RhbmNlUHRyKShOUFAgaW5zdGFu
Y2UsIE5QRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKTsKLXR5cGVkZWYgdm9pZCAoKk5QTl9VUkxS
ZWRpcmVjdFJlc3BvbnNlUHRyKShOUFAgaW5zdGFuY2UsIHZvaWQqIG5vdGlmeURhdGEsIE5QQm9v
bCBhbGxvdyk7Ci0KLXR5cGVkZWYgdm9pZCAoKk5QTl9SZWxlYXNlVmFyaWFudFZhbHVlUHJvY1B0
cikgKE5QVmFyaWFudCAqdmFyaWFudCk7Ci0KLXR5cGVkZWYgTlBJZGVudGlmaWVyICgqTlBOX0dl
dFN0cmluZ0lkZW50aWZpZXJQcm9jUHRyKSAoY29uc3QgTlBVVEY4ICpuYW1lKTsKLXR5cGVkZWYg
dm9pZCAoKk5QTl9HZXRTdHJpbmdJZGVudGlmaWVyc1Byb2NQdHIpIChjb25zdCBOUFVURjggKipu
YW1lcywgaW50MzJfdCBuYW1lQ291bnQsIE5QSWRlbnRpZmllciAqaWRlbnRpZmllcnMpOwotdHlw
ZWRlZiBOUElkZW50aWZpZXIgKCpOUE5fR2V0SW50SWRlbnRpZmllclByb2NQdHIpIChpbnQzMl90
IGludGlkKTsKLXR5cGVkZWYgaW50MzJfdCAoKk5QTl9JbnRGcm9tSWRlbnRpZmllclByb2NQdHIp
IChOUElkZW50aWZpZXIgaWRlbnRpZmllcik7Ci10eXBlZGVmIGJvb2wgKCpOUE5fSWRlbnRpZmll
cklzU3RyaW5nUHJvY1B0cikgKE5QSWRlbnRpZmllciBpZGVudGlmaWVyKTsKLXR5cGVkZWYgTlBV
VEY4ICooKk5QTl9VVEY4RnJvbUlkZW50aWZpZXJQcm9jUHRyKSAoTlBJZGVudGlmaWVyIGlkZW50
aWZpZXIpOwotCi10eXBlZGVmIE5QT2JqZWN0KiAoKk5QTl9DcmVhdGVPYmplY3RQcm9jUHRyKSAo
TlBQLCBOUENsYXNzICphQ2xhc3MpOwotdHlwZWRlZiBOUE9iamVjdCogKCpOUE5fUmV0YWluT2Jq
ZWN0UHJvY1B0cikgKE5QT2JqZWN0ICpvYmopOwotdHlwZWRlZiB2b2lkICgqTlBOX1JlbGVhc2VP
YmplY3RQcm9jUHRyKSAoTlBPYmplY3QgKm9iaik7Ci10eXBlZGVmIGJvb2wgKCpOUE5fSW52b2tl
UHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIE5QSWRlbnRpZmllciBtZXRob2ROYW1l
LCBjb25zdCBOUFZhcmlhbnQgKmFyZ3MsIHVuc2lnbmVkIGFyZ0NvdW50LCBOUFZhcmlhbnQgKnJl
c3VsdCk7Ci10eXBlZGVmIGJvb2wgKCpOUE5fSW52b2tlRGVmYXVsdFByb2NQdHIpIChOUFAgbnBw
LCBOUE9iamVjdCAqb2JqLCBjb25zdCBOUFZhcmlhbnQgKmFyZ3MsIHVuc2lnbmVkIGFyZ0NvdW50
LCBOUFZhcmlhbnQgKnJlc3VsdCk7Ci10eXBlZGVmIGJvb2wgKCpOUE5fRXZhbHVhdGVQcm9jUHRy
KSAoTlBQIG5wcCwgTlBPYmplY3QgKm9iaiwgTlBTdHJpbmcgKnNjcmlwdCwgTlBWYXJpYW50ICpy
ZXN1bHQpOwotdHlwZWRlZiBib29sICgqTlBOX0dldFByb3BlcnR5UHJvY1B0cikgKE5QUCBucHAs
IE5QT2JqZWN0ICpvYmosIE5QSWRlbnRpZmllciAgcHJvcGVydHlOYW1lLCBOUFZhcmlhbnQgKnJl
c3VsdCk7Ci10eXBlZGVmIGJvb2wgKCpOUE5fU2V0UHJvcGVydHlQcm9jUHRyKSAoTlBQIG5wcCwg
TlBPYmplY3QgKm9iaiwgTlBJZGVudGlmaWVyICBwcm9wZXJ0eU5hbWUsIGNvbnN0IE5QVmFyaWFu
dCAqdmFsdWUpOwotdHlwZWRlZiBib29sICgqTlBOX0hhc1Byb3BlcnR5UHJvY1B0cikgKE5QUCwg
TlBPYmplY3QgKm5wb2JqLCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lKTsKLXR5cGVkZWYgYm9v
bCAoKk5QTl9IYXNNZXRob2RQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm5wb2JqLCBOUElk
ZW50aWZpZXIgbWV0aG9kTmFtZSk7Ci10eXBlZGVmIGJvb2wgKCpOUE5fUmVtb3ZlUHJvcGVydHlQ
cm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm9iaiwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFt
ZSk7Ci10eXBlZGVmIHZvaWQgKCpOUE5fU2V0RXhjZXB0aW9uUHJvY1B0cikgKE5QT2JqZWN0ICpv
YmosIGNvbnN0IE5QVVRGOCAqbWVzc2FnZSk7Ci10eXBlZGVmIGJvb2wgKCpOUE5fRW51bWVyYXRl
UHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpucG9iaiwgTlBJZGVudGlmaWVyICoqaWRlbnRp
ZmllciwgdWludDMyX3QgKmNvdW50KTsKLXR5cGVkZWYgYm9vbCAoKk5QTl9Db25zdHJ1Y3RQcm9j
UHRyKShOUFAgbnBwLCBOUE9iamVjdCogb2JqLCBjb25zdCBOUFZhcmlhbnQgKmFyZ3MsIHVpbnQz
Ml90IGFyZ0NvdW50LCBOUFZhcmlhbnQgKnJlc3VsdCk7ICAgIAotCi10eXBlZGVmIE5QRXJyb3Ig
KCpOUFBfTmV3UHJvY1B0cikoTlBNSU1FVHlwZSBwbHVnaW5UeXBlLCBOUFAgaW5zdGFuY2UsIHVp
bnQxNl90IG1vZGUsIGludDE2X3QgYXJnYywgY2hhciogYXJnbltdLCBjaGFyKiBhcmd2W10sIE5Q
U2F2ZWREYXRhKiBzYXZlZCk7Ci10eXBlZGVmIE5QRXJyb3IgKCpOUFBfRGVzdHJveVByb2NQdHIp
KE5QUCBpbnN0YW5jZSwgTlBTYXZlZERhdGEqKiBzYXZlKTsKLXR5cGVkZWYgTlBFcnJvciAoKk5Q
UF9TZXRXaW5kb3dQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QV2luZG93KiB3aW5kb3cpOwotdHlw
ZWRlZiBOUEVycm9yICgqTlBQX05ld1N0cmVhbVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBNSU1F
VHlwZSB0eXBlLCBOUFN0cmVhbSogc3RyZWFtLCBOUEJvb2wgc2Vla2FibGUsIHVpbnQxNl90KiBz
dHlwZSk7Ci10eXBlZGVmIE5QRXJyb3IgKCpOUFBfRGVzdHJveVN0cmVhbVByb2NQdHIpKE5QUCBp
bnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKTsKLXR5cGVkZWYgdm9p
ZCAoKk5QUF9TdHJlYW1Bc0ZpbGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJl
YW0sIGNvbnN0IGNoYXIqIGZuYW1lKTsKLXR5cGVkZWYgaW50MzJfdCAoKk5QUF9Xcml0ZVJlYWR5
UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtKTsKLXR5cGVkZWYgaW50MzJf
dCAoKk5QUF9Xcml0ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50
MzJfdCBvZmZzZXQsIGludDMyX3QgbGVuLCB2b2lkKiBidWZmZXIpOwotdHlwZWRlZiB2b2lkICgq
TlBQX1ByaW50UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFByaW50KiBwbGF0Zm9ybVByaW50KTsK
LXR5cGVkZWYgaW50MTZfdCAoKk5QUF9IYW5kbGVFdmVudFByb2NQdHIpKE5QUCBpbnN0YW5jZSwg
dm9pZCogZXZlbnQpOwotdHlwZWRlZiB2b2lkICgqTlBQX1VSTE5vdGlmeVByb2NQdHIpKE5QUCBp
bnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBOUFJlYXNvbiByZWFzb24sIHZvaWQqIG5vdGlmeURh
dGEpOwotdHlwZWRlZiBOUEVycm9yICgqTlBQX0dldFZhbHVlUHJvY1B0cikoTlBQIGluc3RhbmNl
LCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqcmV0X3ZhbHVlKTsKLXR5cGVkZWYgTlBFcnJv
ciAoKk5QUF9TZXRWYWx1ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFi
bGUsIHZvaWQgKnZhbHVlKTsKLXR5cGVkZWYgTlBCb29sICgqTlBQX0dvdEZvY3VzUHRyKShOUFAg
aW5zdGFuY2UsIE5QRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKTsKLXR5cGVkZWYgdm9pZCAoKk5Q
UF9Mb3N0Rm9jdXNQdHIpKE5QUCBpbnN0YW5jZSk7Ci10eXBlZGVmIHZvaWQgKCpOUFBfVVJMUmVk
aXJlY3ROb3RpZnlQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBpbnQzMl90IHN0
YXR1cywgdm9pZCogbm90aWZ5RGF0YSk7Ci10eXBlZGVmIE5QRXJyb3IgKCpOUFBfQ2xlYXJTaXRl
RGF0YVB0cikoY29uc3QgY2hhciogc2l0ZSwgdWludDY0X3QgZmxhZ3MsIHVpbnQ2NF90IG1heEFn
ZSk7Ci10eXBlZGVmIGNoYXIqKiAoKk5QUF9HZXRTaXRlc1dpdGhEYXRhUHRyKSh2b2lkKTsKLQot
dHlwZWRlZiB2b2lkICooKk5QUF9HZXRKYXZhQ2xhc3NQcm9jUHRyKSh2b2lkKTsKLXR5cGVkZWYg
dm9pZCogSlJJR2xvYmFsUmVmOyAvL25vdCB1c2luZyB0aGlzIHJpZ2h0IG5vdwotCi10eXBlZGVm
IHN0cnVjdCBfTlBOZXRzY2FwZUZ1bmNzIHsKLSAgICB1aW50MTZfdCBzaXplOwotICAgIHVpbnQx
Nl90IHZlcnNpb247Ci0gICAgCi0gICAgTlBOX0dldFVSTFByb2NQdHIgZ2V0dXJsOwotICAgIE5Q
Tl9Qb3N0VVJMUHJvY1B0ciBwb3N0dXJsOwotICAgIE5QTl9SZXF1ZXN0UmVhZFByb2NQdHIgcmVx
dWVzdHJlYWQ7Ci0gICAgTlBOX05ld1N0cmVhbVByb2NQdHIgbmV3c3RyZWFtOwotICAgIE5QTl9X
cml0ZVByb2NQdHIgd3JpdGU7Ci0gICAgTlBOX0Rlc3Ryb3lTdHJlYW1Qcm9jUHRyIGRlc3Ryb3lz
dHJlYW07Ci0gICAgTlBOX1N0YXR1c1Byb2NQdHIgc3RhdHVzOwotICAgIE5QTl9Vc2VyQWdlbnRQ
cm9jUHRyIHVhZ2VudDsKLSAgICBOUE5fTWVtQWxsb2NQcm9jUHRyIG1lbWFsbG9jOwotICAgIE5Q
Tl9NZW1GcmVlUHJvY1B0ciBtZW1mcmVlOwotICAgIE5QTl9NZW1GbHVzaFByb2NQdHIgbWVtZmx1
c2g7Ci0gICAgTlBOX1JlbG9hZFBsdWdpbnNQcm9jUHRyIHJlbG9hZHBsdWdpbnM7Ci0gICAgTlBO
X0dldEphdmFFbnZQcm9jUHRyIGdldEphdmFFbnY7Ci0gICAgTlBOX0dldEphdmFQZWVyUHJvY1B0
ciBnZXRKYXZhUGVlcjsKLSAgICBOUE5fR2V0VVJMTm90aWZ5UHJvY1B0ciBnZXR1cmxub3RpZnk7
Ci0gICAgTlBOX1Bvc3RVUkxOb3RpZnlQcm9jUHRyIHBvc3R1cmxub3RpZnk7Ci0gICAgTlBOX0dl
dFZhbHVlUHJvY1B0ciBnZXR2YWx1ZTsKLSAgICBOUE5fU2V0VmFsdWVQcm9jUHRyIHNldHZhbHVl
OwotICAgIE5QTl9JbnZhbGlkYXRlUmVjdFByb2NQdHIgaW52YWxpZGF0ZXJlY3Q7Ci0gICAgTlBO
X0ludmFsaWRhdGVSZWdpb25Qcm9jUHRyIGludmFsaWRhdGVyZWdpb247Ci0gICAgTlBOX0ZvcmNl
UmVkcmF3UHJvY1B0ciBmb3JjZXJlZHJhdzsKLSAgICAKLSAgICBOUE5fR2V0U3RyaW5nSWRlbnRp
ZmllclByb2NQdHIgZ2V0c3RyaW5naWRlbnRpZmllcjsKLSAgICBOUE5fR2V0U3RyaW5nSWRlbnRp
ZmllcnNQcm9jUHRyIGdldHN0cmluZ2lkZW50aWZpZXJzOwotICAgIE5QTl9HZXRJbnRJZGVudGlm
aWVyUHJvY1B0ciBnZXRpbnRpZGVudGlmaWVyOwotICAgIE5QTl9JZGVudGlmaWVySXNTdHJpbmdQ
cm9jUHRyIGlkZW50aWZpZXJpc3N0cmluZzsKLSAgICBOUE5fVVRGOEZyb21JZGVudGlmaWVyUHJv
Y1B0ciB1dGY4ZnJvbWlkZW50aWZpZXI7Ci0gICAgTlBOX0ludEZyb21JZGVudGlmaWVyUHJvY1B0
ciBpbnRmcm9taWRlbnRpZmllcjsKLSAgICBOUE5fQ3JlYXRlT2JqZWN0UHJvY1B0ciBjcmVhdGVv
YmplY3Q7Ci0gICAgTlBOX1JldGFpbk9iamVjdFByb2NQdHIgcmV0YWlub2JqZWN0OwotICAgIE5Q
Tl9SZWxlYXNlT2JqZWN0UHJvY1B0ciByZWxlYXNlb2JqZWN0OwotICAgIE5QTl9JbnZva2VQcm9j
UHRyIGludm9rZTsKLSAgICBOUE5fSW52b2tlRGVmYXVsdFByb2NQdHIgaW52b2tlRGVmYXVsdDsK
LSAgICBOUE5fRXZhbHVhdGVQcm9jUHRyIGV2YWx1YXRlOwotICAgIE5QTl9HZXRQcm9wZXJ0eVBy
b2NQdHIgZ2V0cHJvcGVydHk7Ci0gICAgTlBOX1NldFByb3BlcnR5UHJvY1B0ciBzZXRwcm9wZXJ0
eTsKLSAgICBOUE5fUmVtb3ZlUHJvcGVydHlQcm9jUHRyIHJlbW92ZXByb3BlcnR5OwotICAgIE5Q
Tl9IYXNQcm9wZXJ0eVByb2NQdHIgaGFzcHJvcGVydHk7Ci0gICAgTlBOX0hhc01ldGhvZFByb2NQ
dHIgaGFzbWV0aG9kOwotICAgIE5QTl9SZWxlYXNlVmFyaWFudFZhbHVlUHJvY1B0ciByZWxlYXNl
dmFyaWFudHZhbHVlOwotICAgIE5QTl9TZXRFeGNlcHRpb25Qcm9jUHRyIHNldGV4Y2VwdGlvbjsK
LSAgICBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIgcHVzaHBvcHVwc2VuYWJsZWRz
dGF0ZTsKLSAgICBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0ciBwb3Bwb3B1cHNlbmFi
bGVkc3RhdGU7Ci0gICAgTlBOX0VudW1lcmF0ZVByb2NQdHIgZW51bWVyYXRlOwotICAgIE5QTl9Q
bHVnaW5UaHJlYWRBc3luY0NhbGxQcm9jUHRyIHBsdWdpbnRocmVhZGFzeW5jY2FsbDsKLSAgICBO
UE5fQ29uc3RydWN0UHJvY1B0ciBjb25zdHJ1Y3Q7Ci0gICAgTlBOX0dldFZhbHVlRm9yVVJMUHJv
Y1B0ciBnZXR2YWx1ZWZvcnVybDsKLSAgICBOUE5fU2V0VmFsdWVGb3JVUkxQcm9jUHRyIHNldHZh
bHVlZm9ydXJsOwotICAgIE5QTl9HZXRBdXRoZW50aWNhdGlvbkluZm9Qcm9jUHRyIGdldGF1dGhl
bnRpY2F0aW9uaW5mbzsKLSAgICBOUE5fU2NoZWR1bGVUaW1lclByb2NQdHIgc2NoZWR1bGV0aW1l
cjsKLSAgICBOUE5fVW5zY2hlZHVsZVRpbWVyUHJvY1B0ciB1bnNjaGVkdWxldGltZXI7Ci0gICAg
TlBOX1BvcFVwQ29udGV4dE1lbnVQcm9jUHRyIHBvcHVwY29udGV4dG1lbnU7Ci0gICAgTlBOX0Nv
bnZlcnRQb2ludFByb2NQdHIgY29udmVydHBvaW50OwotICAgIE5QTl9IYW5kbGVFdmVudFB0ciBo
YW5kbGVldmVudDsKLSAgICBOUE5fVW5mb2N1c0luc3RhbmNlUHRyIHVuZm9jdXNpbnN0YW5jZTsK
LSAgICBOUE5fVVJMUmVkaXJlY3RSZXNwb25zZVB0ciB1cmxyZWRpcmVjdHJlc3BvbnNlOwotfSBO
UE5ldHNjYXBlRnVuY3M7Ci0KLXR5cGVkZWYgc3RydWN0IF9OUFBsdWdpbkZ1bmNzIHsKLSAgICB1
aW50MTZfdCBzaXplOwotICAgIHVpbnQxNl90IHZlcnNpb247Ci0gICAgTlBQX05ld1Byb2NQdHIg
bmV3cDsKLSAgICBOUFBfRGVzdHJveVByb2NQdHIgZGVzdHJveTsKLSAgICBOUFBfU2V0V2luZG93
UHJvY1B0ciBzZXR3aW5kb3c7Ci0gICAgTlBQX05ld1N0cmVhbVByb2NQdHIgbmV3c3RyZWFtOwot
ICAgIE5QUF9EZXN0cm95U3RyZWFtUHJvY1B0ciBkZXN0cm95c3RyZWFtOwotICAgIE5QUF9TdHJl
YW1Bc0ZpbGVQcm9jUHRyIGFzZmlsZTsKLSAgICBOUFBfV3JpdGVSZWFkeVByb2NQdHIgd3JpdGVy
ZWFkeTsKLSAgICBOUFBfV3JpdGVQcm9jUHRyIHdyaXRlOwotICAgIE5QUF9QcmludFByb2NQdHIg
cHJpbnQ7Ci0gICAgTlBQX0hhbmRsZUV2ZW50UHJvY1B0ciBldmVudDsKLSAgICBOUFBfVVJMTm90
aWZ5UHJvY1B0ciB1cmxub3RpZnk7Ci0gICAgSlJJR2xvYmFsUmVmIGphdmFDbGFzczsKLSAgICBO
UFBfR2V0VmFsdWVQcm9jUHRyIGdldHZhbHVlOwotICAgIE5QUF9TZXRWYWx1ZVByb2NQdHIgc2V0
dmFsdWU7Ci0gICAgTlBQX0dvdEZvY3VzUHRyIGdvdGZvY3VzOwotICAgIE5QUF9Mb3N0Rm9jdXNQ
dHIgbG9zdGZvY3VzOwotICAgIE5QUF9VUkxSZWRpcmVjdE5vdGlmeVB0ciB1cmxyZWRpcmVjdG5v
dGlmeTsKLSAgICBOUFBfQ2xlYXJTaXRlRGF0YVB0ciBjbGVhcnNpdGVkYXRhOwotICAgIE5QUF9H
ZXRTaXRlc1dpdGhEYXRhUHRyIGdldHNpdGVzd2l0aGRhdGE7Ci19IE5QUGx1Z2luRnVuY3M7Ci0K
LXR5cGVkZWYgRVhQT1JURURfQ0FMTEJBQ0soTlBFcnJvciwgTlBfR2V0RW50cnlQb2ludHNGdW5j
UHRyKShOUFBsdWdpbkZ1bmNzKik7Ci10eXBlZGVmIEVYUE9SVEVEX0NBTExCQUNLKHZvaWQsIE5Q
UF9TaHV0ZG93blByb2NQdHIpKHZvaWQpOyAgICAKLQotI2lmIGRlZmluZWQoWFBfTUFDT1NYKQot
dHlwZWRlZiB2b2lkICgqQlBfQ3JlYXRlUGx1Z2luTUlNRVR5cGVzUHJlZmVyZW5jZXNGdW5jUHRy
KSh2b2lkKTsKLXR5cGVkZWYgTlBFcnJvciAoKk1haW5GdW5jUHRyKShOUE5ldHNjYXBlRnVuY3Mq
LCBOUFBsdWdpbkZ1bmNzKiwgTlBQX1NodXRkb3duUHJvY1B0ciopOwotI2VuZGlmCi0KLSNpZiBk
ZWZpbmVkKFhQX1VOSVgpCi10eXBlZGVmIEVYUE9SVEVEX0NBTExCQUNLKE5QRXJyb3IsIE5QX0lu
aXRpYWxpemVGdW5jUHRyKShOUE5ldHNjYXBlRnVuY3MqLCBOUFBsdWdpbkZ1bmNzKik7Ci10eXBl
ZGVmIEVYUE9SVEVEX0NBTExCQUNLKGNvbnN0IGNoYXIqLCBOUF9HZXRNSU1FRGVzY3JpcHRpb25G
dW5jUHRyKSh2b2lkKTsKLSNlbHNlCi10eXBlZGVmIEVYUE9SVEVEX0NBTExCQUNLKE5QRXJyb3Is
IE5QX0luaXRpYWxpemVGdW5jUHRyKShOUE5ldHNjYXBlRnVuY3MqKTsKLSNlbmRpZgotCi0jaWZk
ZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvbnBydW50aW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL25wcnVu
dGltZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGVjNmM2YmExZjgyYzBkNmZm
YWI4ZTE3NDZkZWI5ZDYwZDI1ZDQyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbnBydW50aW1lLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwzOTMgKzAsMCBAQAotLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogNDsgaW5k
ZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogNCAtKi0gKi8KLS8qCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMDQsIEFwcGxlIEluYy4gYW5kIFRoZSBNb3ppbGxhIEZvdW5kYXRpb24uIAot
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKiAKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9m
IEFwcGxlIEluYy4gKCJBcHBsZSIpIG9yIFRoZSBNb3ppbGxhCi0gKiBGb3VuZGF0aW9uICgiTW96
aWxsYSIpIG5vciB0aGUgbmFtZXMgb2YgdGhlaXIgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCi0g
KiB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dAotICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFLCBNT1pJTExBIEFORCBUSEVJUiBD
T05UUklCVVRPUlMgIkFTCi0gKiBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLSAqIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQotICogUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSwgTU9aSUxM
QSBPUgotICogVEhFSVIgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLSAqIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi0gKiBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICoKLSAqLwotI2lmbmRlZiBfTlBfUlVOVElNRV9IXwotI2RlZmluZSBfTlBfUlVOVElNRV9IXwot
Ci0jaW5jbHVkZSAibnBhcGkuaCIKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsK
LSNlbmRpZgotCi0vKgotICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gZmFjaWxpdGF0ZSBiaW5kaW5n
IGNvZGUgd3JpdHRlbiBpbiBDIHRvIHNjcmlwdAotICAgIG9iamVjdHMuICBUaGUgQVBJIGluIHRo
aXMgaGVhZGVyIGRvZXMgbm90IGFzc3VtZSB0aGUgcHJlc2VuY2Ugb2YgYQotICAgIHVzZXIgYWdl
bnQuICBUaGF0IGlzLCBpdCBjYW4gYmUgdXNlZCB0byBiaW5kIEMgY29kZSB0byBzY3JpcHRpbmcK
LSAgICBlbnZpcm9ubWVudHMgb3V0c2lkZSBvZiB0aGUgY29udGV4dCBvZiBhIHVzZXIgYWdlbnQu
Ci0gICAgCi0gICAgSG93ZXZlciwgdGhlIG5vcm1hbCB1c2Ugb2YgdGhlIHRoaXMgQVBJIGlzIGlu
IHRoZSBjb250ZXh0IG9mIGEKLSAgICBzY3JpcHRpbmcgZW52aXJvbm1lbnQgcnVubmluZyBpbiBh
IGJyb3dzZXIgb3Igb3RoZXIgdXNlciBhZ2VudC4KLSAgICBJbiBwYXJ0aWN1bGFyIGl0IGlzIHVz
ZWQgdG8gc3VwcG9ydCB0aGUgZXh0ZW5kZWQgTmV0c2NhcGUKLSAgICBzY3JpcHQtYWJpbGl0eSBB
UEkgZm9yIHBsdWdpbnMgKE5QLVNBUCkuICBOUC1TQVAgaXMgYW4gZXh0ZW5zaW9uCi0gICAgb2Yg
dGhlIE5ldHNjYXBlIHBsdWdpbiBBUEkuICBBcyBzdWNoIHdlIGhhdmUgYWRvcHRlZCB0aGUgdXNl
IG9mCi0gICAgdGhlICJOUCIgcHJlZml4IGZvciB0aGlzIEFQSS4KLQotICAgIFRoZSBmb2xsb3dp
bmcgTlB7TnxQfVZhcmlhYmxlcyB3ZXJlIGFkZGVkIHRvIHRoZSBOZXRzY2FwZSBwbHVnaW4KLSAg
ICBBUEkgKGluIG5wYXBpLmgpOgotCi0gICAgTlBOVldpbmRvd05QT2JqZWN0Ci0gICAgTlBOVlBs
dWdpbkVsZW1lbnROUE9iamVjdAotICAgIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QKLQot
ICAgIFRoZXNlIHZhcmlhYmxlcyBhcmUgZXhwb3NlZCB0aHJvdWdoIE5QTl9HZXRWYWx1ZSgpIGFu
ZAotICAgIE5QUF9HZXRWYWx1ZSgpIChyZXNwZWN0aXZlbHkpIGFuZCBhcmUgdXNlZCB0byBlc3Rh
Ymxpc2ggdGhlCi0gICAgaW5pdGlhbCBiaW5kaW5nIGJldHdlZW4gdGhlIHVzZXIgYWdlbnQgYW5k
IG5hdGl2ZSBjb2RlLiAgVGhlIERPTQotICAgIG9iamVjdHMgaW4gdGhlIHVzZXIgYWdlbnQgY2Fu
IGJlIGV4YW1pbmVkIGFuZCBtYW5pcHVsYXRlZCB1c2luZwotICAgIHRoZSBOUE5fIGZ1bmN0aW9u
cyB0aGF0IG9wZXJhdGUgb24gTlBPYmplY3RzIGRlc2NyaWJlZCBpbiB0aGlzCi0gICAgaGVhZGVy
LgotCi0gICAgVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB0aGUgYXNzdW1wdGlvbnMgYWJvdXQgdGhl
IHNjcmlwdGluZwotICAgIGxhbmd1YWdlIHVzZWQgYnkgdGhlIHNjcmlwdGluZyBlbnZpcm9ubWVu
dCBoYXZlIGJlZW4gbWluaW1pemVkLgotKi8KLQotI2RlZmluZSBOUF9CRUdJTl9NQUNSTyAgZG8g
ewotI2RlZmluZSBOUF9FTkRfTUFDUk8gICAgfSB3aGlsZSAoMCkKLQotLyoKLSAgICBPYmplY3Rz
IChub24tcHJpbWl0aXZlIGRhdGEpIHBhc3NlZCBiZXR3ZWVuICdDJyBhbmQgc2NyaXB0IGlzCi0g
ICAgYWx3YXlzIHdyYXBwZWQgaW4gYW4gTlBPYmplY3QuICBUaGUgJ2ludGVyZmFjZScgb2YgYW4g
TlBPYmplY3QgaXMKLSAgICBkZXNjcmliZWQgYnkgYW4gTlBDbGFzcy4KLSovCi10eXBlZGVmIHN0
cnVjdCBOUE9iamVjdCBOUE9iamVjdDsKLXR5cGVkZWYgc3RydWN0IE5QQ2xhc3MgTlBDbGFzczsK
LQotdHlwZWRlZiBjaGFyIE5QVVRGODsKLXR5cGVkZWYgc3RydWN0IF9OUFN0cmluZyB7Ci0gICAg
Y29uc3QgTlBVVEY4ICpVVEY4Q2hhcmFjdGVyczsKLSAgICB1aW50MzJfdCBVVEY4TGVuZ3RoOwot
fSBOUFN0cmluZzsKLQotdHlwZWRlZiBlbnVtIHsKLSAgICBOUFZhcmlhbnRUeXBlX1ZvaWQsCi0g
ICAgTlBWYXJpYW50VHlwZV9OdWxsLAotICAgIE5QVmFyaWFudFR5cGVfQm9vbCwKLSAgICBOUFZh
cmlhbnRUeXBlX0ludDMyLAotICAgIE5QVmFyaWFudFR5cGVfRG91YmxlLAotICAgIE5QVmFyaWFu
dFR5cGVfU3RyaW5nLAotICAgIE5QVmFyaWFudFR5cGVfT2JqZWN0Ci19IE5QVmFyaWFudFR5cGU7
Ci0KLXR5cGVkZWYgc3RydWN0IF9OUFZhcmlhbnQgewotICAgIE5QVmFyaWFudFR5cGUgdHlwZTsK
LSAgICB1bmlvbiB7Ci0gICAgICAgIGJvb2wgYm9vbFZhbHVlOwotICAgICAgICBpbnQzMl90IGlu
dFZhbHVlOwotICAgICAgICBkb3VibGUgZG91YmxlVmFsdWU7Ci0gICAgICAgIE5QU3RyaW5nIHN0
cmluZ1ZhbHVlOwotICAgICAgICBOUE9iamVjdCAqb2JqZWN0VmFsdWU7Ci0gICAgfSB2YWx1ZTsK
LX0gTlBWYXJpYW50OwotCi0vKgotICAgIE5QTl9SZWxlYXNlVmFyaWFudFZhbHVlIGlzIGNhbGxl
ZCBvbiBhbGwgJ291dCcgcGFyYW1ldGVycwotICAgIHJlZmVyZW5jZXMuICBTcGVjaWZpY2FsbHkg
aXQgaXMgdG8gYmUgY2FsbGVkIG9uIHZhcmlhbnRzIHRoYXQgb3duCi0gICAgdGhlaXIgdmFsdWUs
IGFzIGlzIHRoZSBjYXNlIHdpdGggYWxsIG5vbi1jb25zdCBOUFZhcmlhbnQqCi0gICAgYXJndW1l
bnRzIGFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvIGFueSBtZXRob2RzIChleGNlcHQgdGhpcyBv
bmUpCi0gICAgaW4gdGhpcyBBUEkuCi0KLSAgICBBZnRlciBjYWxsaW5nIE5QTl9SZWxlYXNlVmFy
aWFudFZhbHVlLCB0aGUgdHlwZSBvZiB0aGUgdmFyaWFudAotICAgIHdpbGwgYmUgTlBWYXJpYW50
VHlwZV9Wb2lkLgotKi8KLXZvaWQgTlBOX1JlbGVhc2VWYXJpYW50VmFsdWUoTlBWYXJpYW50ICp2
YXJpYW50KTsKLQotI2RlZmluZSBOUFZBUklBTlRfSVNfVk9JRChfdikgICAgKChfdikudHlwZSA9
PSBOUFZhcmlhbnRUeXBlX1ZvaWQpCi0jZGVmaW5lIE5QVkFSSUFOVF9JU19OVUxMKF92KSAgICAo
KF92KS50eXBlID09IE5QVmFyaWFudFR5cGVfTnVsbCkKLSNkZWZpbmUgTlBWQVJJQU5UX0lTX0JP
T0xFQU4oX3YpICgoX3YpLnR5cGUgPT0gTlBWYXJpYW50VHlwZV9Cb29sKQotI2RlZmluZSBOUFZB
UklBTlRfSVNfSU5UMzIoX3YpICAgKChfdikudHlwZSA9PSBOUFZhcmlhbnRUeXBlX0ludDMyKQot
I2RlZmluZSBOUFZBUklBTlRfSVNfRE9VQkxFKF92KSAgKChfdikudHlwZSA9PSBOUFZhcmlhbnRU
eXBlX0RvdWJsZSkKLSNkZWZpbmUgTlBWQVJJQU5UX0lTX1NUUklORyhfdikgICgoX3YpLnR5cGUg
PT0gTlBWYXJpYW50VHlwZV9TdHJpbmcpCi0jZGVmaW5lIE5QVkFSSUFOVF9JU19PQkpFQ1QoX3Yp
ICAoKF92KS50eXBlID09IE5QVmFyaWFudFR5cGVfT2JqZWN0KQotCi0jZGVmaW5lIE5QVkFSSUFO
VF9UT19CT09MRUFOKF92KSAoKF92KS52YWx1ZS5ib29sVmFsdWUpCi0jZGVmaW5lIE5QVkFSSUFO
VF9UT19JTlQzMihfdikgICAoKF92KS52YWx1ZS5pbnRWYWx1ZSkKLSNkZWZpbmUgTlBWQVJJQU5U
X1RPX0RPVUJMRShfdikgICgoX3YpLnZhbHVlLmRvdWJsZVZhbHVlKQotI2RlZmluZSBOUFZBUklB
TlRfVE9fU1RSSU5HKF92KSAgKChfdikudmFsdWUuc3RyaW5nVmFsdWUpCi0jZGVmaW5lIE5QVkFS
SUFOVF9UT19PQkpFQ1QoX3YpICAoKF92KS52YWx1ZS5vYmplY3RWYWx1ZSkKLQotI2RlZmluZSBW
T0lEX1RPX05QVkFSSUFOVChfdikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotTlBfQkVHSU5fTUFDUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChfdikudHlwZSA9IE5Q
VmFyaWFudFR5cGVfVm9pZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIChfdikudmFsdWUub2JqZWN0VmFsdWUgPSBOVUxMOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotTlBfRU5EX01BQ1JPCi0KLSNkZWZpbmUgTlVM
TF9UT19OUFZBUklBTlQoX3YpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLU5QX0JFR0lOX01BQ1JPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoX3YpLnR5cGUgPSBOUFZh
cmlhbnRUeXBlX051bGw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAoX3YpLnZhbHVlLm9iamVjdFZhbHVlID0gTlVMTDsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLU5QX0VORF9NQUNSTwotCi0jZGVmaW5lIEJPT0xF
QU5fVE9fTlBWQVJJQU5UKF92YWwsIF92KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi1OUF9CRUdJTl9NQUNSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKF92KS50eXBlID0gTlBWYXJp
YW50VHlwZV9Cb29sOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgKF92KS52YWx1ZS5ib29sVmFsdWUgPSAhIShfdmFsKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi1OUF9FTkRfTUFDUk8KLQotI2RlZmluZSBJTlQzMl9U
T19OUFZBUklBTlQoX3ZhbCwgX3YpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotTlBfQkVHSU5fTUFDUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChfdikudHlwZSA9IE5QVmFyaWFu
dFR5cGVfSW50MzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIChfdikudmFsdWUuaW50VmFsdWUgPSBfdmFsOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotTlBfRU5EX01BQ1JPCi0KLSNkZWZpbmUgRE9VQkxFX1RP
X05QVkFSSUFOVChfdmFsLCBfdikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLU5QX0JFR0lOX01BQ1JPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoX3YpLnR5cGUgPSBOUFZhcmlhbnRU
eXBlX0RvdWJsZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAoX3YpLnZhbHVlLmRvdWJsZVZhbHVlID0gX3ZhbDsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLU5QX0VORF9NQUNSTwotCi0jZGVmaW5lIFNUUklOR1pfVE9f
TlBWQVJJQU5UKF92YWwsIF92KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi1OUF9CRUdJTl9NQUNSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKF92KS50eXBlID0gTlBWYXJpYW50VHlw
ZV9TdHJpbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
TlBTdHJpbmcgc3RyID0geyBfdmFsLCB1aW50MzJfdChzdHJsZW4oX3ZhbCkpIH07ICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgKF92KS52YWx1ZS5zdHJpbmdWYWx1ZSA9IHN0cjsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1OUF9FTkRfTUFDUk8K
LQotI2RlZmluZSBTVFJJTkdOX1RPX05QVkFSSUFOVChfdmFsLCBfbGVuLCBfdikgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotTlBfQkVHSU5fTUFDUk8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChf
dikudHlwZSA9IE5QVmFyaWFudFR5cGVfU3RyaW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIE5QU3RyaW5nIHN0ciA9IHsgX3ZhbCwgdWludDMyX3QoX2xl
bikgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChfdikudmFsdWUu
c3RyaW5nVmFsdWUgPSBzdHI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotTlBfRU5EX01BQ1JPCi0KLSNkZWZpbmUgT0JKRUNUX1RPX05QVkFSSUFOVChfdmFs
LCBfdikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLU5QX0JFR0lO
X01BQ1JPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAoX3YpLnR5cGUgPSBOUFZhcmlhbnRUeXBlX09iamVjdDsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoX3YpLnZhbHVlLm9i
amVjdFZhbHVlID0gX3ZhbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLU5QX0VORF9NQUNSTwotCi0KLS8qCi0gIFR5cGUgbWFwcGluZ3MgKEphdmFTY3JpcHQg
dHlwZXMgaGF2ZSBiZWVuIHVzZWQgZm9yIGlsbHVzdHJhdGlvbgotICAgIHB1cnBvc2VzKToKLQot
ICBKYXZhU2NyaXB0ICAgICAgIHRvICAgICAgICAgICAgIEMgKE5QVmFyaWFudCB3aXRoIHR5cGU6
KQotICB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgIE5QVmFyaWFudFR5cGVfVm9pZAot
ICBudWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5QVmFyaWFudFR5cGVfTnVsbAotICBC
b29sZWFuICAgICAgICAgICAgICAgICAgICAgICAgIE5QVmFyaWFudFR5cGVfQm9vbAotICBOdW1i
ZXIgICAgICAgICAgICAgICAgICAgICAgICAgIE5QVmFyaWFudFR5cGVfRG91YmxlIG9yIE5QVmFy
aWFudFR5cGVfSW50MzIKLSAgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICBOUFZhcmlh
bnRUeXBlX1N0cmluZwotICBPYmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgIE5QVmFyaWFu
dFR5cGVfT2JqZWN0Ci0KLSAgQyAoTlBWYXJpYW50IHdpdGggdHlwZTopICAgdG8gICBKYXZhU2Ny
aXB0Ci0gIE5QVmFyaWFudFR5cGVfVm9pZCAgICAgICAgICAgICAgdW5kZWZpbmVkCi0gIE5QVmFy
aWFudFR5cGVfTnVsbCAgICAgICAgICAgICAgbnVsbAotICBOUFZhcmlhbnRUeXBlX0Jvb2wgICAg
ICAgICAgICAgIEJvb2xlYW4KLSAgTlBWYXJpYW50VHlwZV9JbnQzMiAgICAgICAgICAgICBOdW1i
ZXIKLSAgTlBWYXJpYW50VHlwZV9Eb3VibGUgICAgICAgICAgICBOdW1iZXIKLSAgTlBWYXJpYW50
VHlwZV9TdHJpbmcgICAgICAgICAgICBTdHJpbmcKLSAgTlBWYXJpYW50VHlwZV9PYmplY3QgICAg
ICAgICAgICBPYmplY3QKLSovCi0KLXR5cGVkZWYgdm9pZCAqTlBJZGVudGlmaWVyOwotCi0vKgot
ICAgIE5QT2JqZWN0cyBoYXZlIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMuICBNZXRob2RzIGFuZCBw
cm9wZXJ0aWVzIGFyZQotICAgIGlkZW50aWZpZWQgd2l0aCBOUElkZW50aWZpZXJzLiAgVGhlc2Ug
aWRlbnRpZmllcnMgbWF5IGJlIHJlZmxlY3RlZAotICAgIGluIHNjcmlwdC4gIE5QSWRlbnRpZmll
cnMgY2FuIGJlIGVpdGhlciBzdHJpbmdzIG9yIGludGVnZXJzLCBJT1csCi0gICAgbWV0aG9kcyBh
bmQgcHJvcGVydGllcyBjYW4gYmUgaWRlbnRpZmllZCBieSBlaXRoZXIgc3RyaW5ncyBvcgotICAg
IGludGVnZXJzIChpLmUuIGZvb1siYmFyIl0gdnMgZm9vWzFdKS4gTlBJZGVudGlmaWVycyBjYW4g
YmUKLSAgICBjb21wYXJlZCB1c2luZyA9PS4gIEluIGNhc2Ugb2YgYW55IGVycm9ycywgdGhlIHJl
cXVlc3RlZAotICAgIE5QSWRlbnRpZmllcihzKSB3aWxsIGJlIE5VTEwuIE5QSWRlbnRpZmllciBs
aWZldGltZSBpcyBjb250cm9sbGVkCi0gICAgYnkgdGhlIGJyb3dzZXIuIFBsdWdpbnMgZG8gbm90
IG5lZWQgdG8gd29ycnkgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQKLSAgICB3aXRoIHJlZ2FyZHMg
dG8gTlBJZGVudGlmaWVycy4KLSovCi1OUElkZW50aWZpZXIgTlBOX0dldFN0cmluZ0lkZW50aWZp
ZXIoY29uc3QgTlBVVEY4ICpuYW1lKTsKLXZvaWQgTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzKGNv
bnN0IE5QVVRGOCAqKm5hbWVzLCBpbnQzMl90IG5hbWVDb3VudCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5QSWRlbnRpZmllciAqaWRlbnRpZmllcnMpOwotTlBJZGVudGlmaWVyIE5Q
Tl9HZXRJbnRJZGVudGlmaWVyKGludDMyX3QgaW50aWQpOwotYm9vbCBOUE5fSWRlbnRpZmllcklz
U3RyaW5nKE5QSWRlbnRpZmllciBpZGVudGlmaWVyKTsKLQotLyoKLSAgICBUaGUgTlBVVEY4IHJl
dHVybmVkIGZyb20gTlBOX1VURjhGcm9tSWRlbnRpZmllciBTSE9VTEQgYmUgZnJlZWQuCi0qLwot
TlBVVEY4ICpOUE5fVVRGOEZyb21JZGVudGlmaWVyKE5QSWRlbnRpZmllciBpZGVudGlmaWVyKTsK
LQotLyoKLSAgICBHZXQgdGhlIGludGVnZXIgcmVwcmVzZW50ZWQgYnkgaWRlbnRpZmllci4gSWYg
aWRlbnRpZmllciBpcyBub3QgYW4KLSAgICBpbnRlZ2VyIGlkZW50aWZpZXIsIHRoZSBiZWhhdmlv
dXIgaXMgdW5kZWZpbmVkLgotKi8KLWludDMyX3QgTlBOX0ludEZyb21JZGVudGlmaWVyKE5QSWRl
bnRpZmllciBpZGVudGlmaWVyKTsKLQotLyoKLSAgICBOUE9iamVjdCBiZWhhdmlvciBpcyBpbXBs
ZW1lbnRlZCB1c2luZyB0aGUgZm9sbG93aW5nIHNldCBvZgotICAgIGNhbGxiYWNrIGZ1bmN0aW9u
cy4KLQotICAgIFRoZSBOUFZhcmlhbnQgKnJlc3VsdCBhcmd1bWVudCBvZiB0aGVzZSBmdW5jdGlv
bnMgKHdoZXJlCi0gICAgYXBwbGljYWJsZSkgc2hvdWxkIGJlIHJlbGVhc2VkIHVzaW5nIE5QTl9S
ZWxlYXNlVmFyaWFudFZhbHVlKCkuCi0qLwotdHlwZWRlZiBOUE9iamVjdCAqKCpOUEFsbG9jYXRl
RnVuY3Rpb25QdHIpKE5QUCBucHAsIE5QQ2xhc3MgKmFDbGFzcyk7Ci10eXBlZGVmIHZvaWQgKCpO
UERlYWxsb2NhdGVGdW5jdGlvblB0cikoTlBPYmplY3QgKm5wb2JqKTsKLXR5cGVkZWYgdm9pZCAo
Kk5QSW52YWxpZGF0ZUZ1bmN0aW9uUHRyKShOUE9iamVjdCAqbnBvYmopOwotdHlwZWRlZiBib29s
ICgqTlBIYXNNZXRob2RGdW5jdGlvblB0cikoTlBPYmplY3QgKm5wb2JqLCBOUElkZW50aWZpZXIg
bmFtZSk7Ci10eXBlZGVmIGJvb2wgKCpOUEludm9rZUZ1bmN0aW9uUHRyKShOUE9iamVjdCAqbnBv
YmosIE5QSWRlbnRpZmllciBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgTlBWYXJpYW50ICphcmdzLCB1aW50MzJfdCBhcmdDb3VudCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5QVmFyaWFudCAqcmVzdWx0KTsKLXR5cGVkZWYgYm9v
bCAoKk5QSW52b2tlRGVmYXVsdEZ1bmN0aW9uUHRyKShOUE9iamVjdCAqbnBvYmosCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTlBWYXJpYW50ICphcmdz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFy
Z0NvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5QVmFy
aWFudCAqcmVzdWx0KTsKLXR5cGVkZWYgYm9vbCAoKk5QSGFzUHJvcGVydHlGdW5jdGlvblB0ciko
TlBPYmplY3QgKm5wb2JqLCBOUElkZW50aWZpZXIgbmFtZSk7Ci10eXBlZGVmIGJvb2wgKCpOUEdl
dFByb3BlcnR5RnVuY3Rpb25QdHIpKE5QT2JqZWN0ICpucG9iaiwgTlBJZGVudGlmaWVyIG5hbWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5QVmFyaWFudCAqcmVz
dWx0KTsKLXR5cGVkZWYgYm9vbCAoKk5QU2V0UHJvcGVydHlGdW5jdGlvblB0cikoTlBPYmplY3Qg
Km5wb2JqLCBOUElkZW50aWZpZXIgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgTlBWYXJpYW50ICp2YWx1ZSk7Ci10eXBlZGVmIGJvb2wgKCpOUFJl
bW92ZVByb3BlcnR5RnVuY3Rpb25QdHIpKE5QT2JqZWN0ICpucG9iaiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlBJZGVudGlmaWVyIG5hbWUpOwotdHlwZWRl
ZiBib29sICgqTlBFbnVtZXJhdGlvbkZ1bmN0aW9uUHRyKShOUE9iamVjdCAqbnBvYmosIE5QSWRl
bnRpZmllciAqKnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50MzJfdCAqY291bnQpOwotdHlwZWRlZiBib29sICgqTlBDb25zdHJ1Y3RGdW5jdGlvblB0
cikoTlBPYmplY3QgKm5wb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgTlBWYXJpYW50ICphcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3QgYXJnQ291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOUFZhcmlhbnQgKnJlc3VsdCk7Ci0KLS8qCi0gICAgTlBPYmplY3RzIHJldHVy
bmVkIGJ5IGNyZWF0ZSwgcmV0YWluLCBpbnZva2UsIGFuZCBnZXRQcm9wZXJ0eSBwYXNzCi0gICAg
YSByZWZlcmVuY2UgY291bnQgdG8gdGhlIGNhbGxlci4gIFRoYXQgaXMsIHRoZSBjYWxsZWUgYWRk
cyBhCi0gICAgcmVmZXJlbmNlIGNvdW50IHdoaWNoIHBhc3NlcyB0byB0aGUgY2FsbGVyLiAgSXQg
aXMgdGhlIGNhbGxlcidzCi0gICAgcmVzcG9uc2liaWxpdHkgdG8gcmVsZWFzZSB0aGUgcmV0dXJu
ZWQgb2JqZWN0LgotCi0gICAgTlBJbnZva2VGdW5jdGlvblB0ciBmdW5jdGlvbiBtYXkgcmV0dXJu
IDAgdG8gaW5kaWNhdGUgYSB2b2lkCi0gICAgcmVzdWx0LgotCi0gICAgTlBJbnZhbGlkYXRlRnVu
Y3Rpb25QdHIgaXMgY2FsbGVkIGJ5IHRoZSBzY3JpcHRpbmcgZW52aXJvbm1lbnQKLSAgICB3aGVu
IHRoZSBuYXRpdmUgY29kZSBpcyBzaHV0ZG93bi4gIEFueSBhdHRlbXB0IHRvIG1lc3NhZ2UgYQot
ICAgIE5QT2JqZWN0IGluc3RhbmNlIGFmdGVyIHRoZSBpbnZhbGlkYXRlIGNhbGxiYWNrIGhhcyBi
ZWVuCi0gICAgY2FsbGVkIHdpbGwgcmVzdWx0IGluIHVuZGVmaW5lZCBiZWhhdmlvciwgZXZlbiBp
ZiB0aGUgbmF0aXZlIGNvZGUKLSAgICBpcyBzdGlsbCByZXRhaW5pbmcgdGhvc2UgTlBPYmplY3Qg
aW5zdGFuY2VzLiAgKFRoZSBydW50aW1lCi0gICAgd2lsbCB0eXBpY2FsbHkgcmV0dXJuIGltbWVk
aWF0ZWx5LCB3aXRoIDAgb3IgTlVMTCwgZnJvbSBhbiBhdHRlbXB0Ci0gICAgdG8gZGlzcGF0Y2gg
dG8gYSBOUE9iamVjdCwgYnV0IHRoaXMgYmVoYXZpb3Igc2hvdWxkIG5vdCBiZQotICAgIGRlcGVu
ZGVkIHVwb24uKQotCi0gICAgVGhlIE5QRW51bWVyYXRpb25GdW5jdGlvblB0ciBmdW5jdGlvbiBt
YXkgcGFzcyBhbiBhcnJheSBvZgotICAgIE5QSWRlbnRpZmllcnMgYmFjayB0byB0aGUgY2FsbGVy
LiBUaGUgY2FsbGVlIGFsbG9jcyB0aGUgbWVtb3J5IG9mCi0gICAgdGhlIGFycmF5IHVzaW5nIE5Q
Tl9NZW1BbGxvYygpLCBhbmQgaXQncyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkKLSAgICB0
byByZWxlYXNlIGl0IHVzaW5nIE5QTl9NZW1GcmVlKCkuCi0qLwotc3RydWN0IE5QQ2xhc3MKLXsK
LSAgICB1aW50MzJfdCBzdHJ1Y3RWZXJzaW9uOwotICAgIE5QQWxsb2NhdGVGdW5jdGlvblB0ciBh
bGxvY2F0ZTsKLSAgICBOUERlYWxsb2NhdGVGdW5jdGlvblB0ciBkZWFsbG9jYXRlOwotICAgIE5Q
SW52YWxpZGF0ZUZ1bmN0aW9uUHRyIGludmFsaWRhdGU7Ci0gICAgTlBIYXNNZXRob2RGdW5jdGlv
blB0ciBoYXNNZXRob2Q7Ci0gICAgTlBJbnZva2VGdW5jdGlvblB0ciBpbnZva2U7Ci0gICAgTlBJ
bnZva2VEZWZhdWx0RnVuY3Rpb25QdHIgaW52b2tlRGVmYXVsdDsKLSAgICBOUEhhc1Byb3BlcnR5
RnVuY3Rpb25QdHIgaGFzUHJvcGVydHk7Ci0gICAgTlBHZXRQcm9wZXJ0eUZ1bmN0aW9uUHRyIGdl
dFByb3BlcnR5OwotICAgIE5QU2V0UHJvcGVydHlGdW5jdGlvblB0ciBzZXRQcm9wZXJ0eTsKLSAg
ICBOUFJlbW92ZVByb3BlcnR5RnVuY3Rpb25QdHIgcmVtb3ZlUHJvcGVydHk7Ci0gICAgTlBFbnVt
ZXJhdGlvbkZ1bmN0aW9uUHRyIGVudW1lcmF0ZTsKLSAgICBOUENvbnN0cnVjdEZ1bmN0aW9uUHRy
IGNvbnN0cnVjdDsKLX07Ci0KLSNkZWZpbmUgTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT04gICAgICAz
Ci0KLSNkZWZpbmUgTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT05fRU5VTSAyCi0jZGVmaW5lIE5QX0NM
QVNTX1NUUlVDVF9WRVJTSU9OX0NUT1IgMwotCi0jZGVmaW5lIE5QX0NMQVNTX1NUUlVDVF9WRVJT
SU9OX0hBU19FTlVNKG5wY2xhc3MpICAgXAotICAgICAgICAoKG5wY2xhc3MpLT5zdHJ1Y3RWZXJz
aW9uID49IE5QX0NMQVNTX1NUUlVDVF9WRVJTSU9OX0VOVU0pCi0KLSNkZWZpbmUgTlBfQ0xBU1Nf
U1RSVUNUX1ZFUlNJT05fSEFTX0NUT1IobnBjbGFzcykgICBcCi0gICAgICAgICgobnBjbGFzcykt
PnN0cnVjdFZlcnNpb24gPj0gTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT05fQ1RPUikKLQotc3RydWN0
IE5QT2JqZWN0IHsKLSAgICBOUENsYXNzICpfY2xhc3M7Ci0gICAgdWludDMyX3QgcmVmZXJlbmNl
Q291bnQ7Ci0gICAgLyoKLSAgICAgKiBBZGRpdGlvbmFsIHNwYWNlIG1heSBiZSBhbGxvY2F0ZWQg
aGVyZSBieSB0eXBlcyBvZiBOUE9iamVjdHMKLSAgICAgKi8KLX07Ci0KLS8qCi0gICAgSWYgdGhl
IGNsYXNzIGhhcyBhbiBhbGxvY2F0ZSBmdW5jdGlvbiwgTlBOX0NyZWF0ZU9iamVjdCBpbnZva2Vz
Ci0gICAgdGhhdCBmdW5jdGlvbiwgb3RoZXJ3aXNlIGEgTlBPYmplY3QgaXMgYWxsb2NhdGVkIGFu
ZAotICAgIHJldHVybmVkLiBUaGlzIG1ldGhvZCB3aWxsIGluaXRpYWxpemUgdGhlIHJlZmVyZW5j
ZUNvdW50IG1lbWJlciBvZgotICAgIHRoZSBOUE9iamVjdCB0byAxLgotKi8KLU5QT2JqZWN0ICpO
UE5fQ3JlYXRlT2JqZWN0KE5QUCBucHAsIE5QQ2xhc3MgKmFDbGFzcyk7Ci0KLS8qCi0gICAgSW5j
cmVtZW50IHRoZSBOUE9iamVjdCdzIHJlZmVyZW5jZSBjb3VudC4KLSovCi1OUE9iamVjdCAqTlBO
X1JldGFpbk9iamVjdChOUE9iamVjdCAqbnBvYmopOwotCi0vKgotICAgIERlY3JlbWVudGVkIHRo
ZSBOUE9iamVjdCdzIHJlZmVyZW5jZSBjb3VudC4gIElmIHRoZSByZWZlcmVuY2UKLSAgICBjb3Vu
dCBnb2VzIHRvIHplcm8sIHRoZSBjbGFzcydzIGRlc3Ryb3kgZnVuY3Rpb24gaXMgaW52b2tlIGlm
Ci0gICAgc3BlY2lmaWVkLCBvdGhlcndpc2UgdGhlIG9iamVjdCBpcyBmcmVlZCBkaXJlY3RseS4K
LSovCi12b2lkIE5QTl9SZWxlYXNlT2JqZWN0KE5QT2JqZWN0ICpucG9iaik7Ci0KLS8qCi0gICAg
RnVuY3Rpb25zIHRvIGFjY2VzcyBzY3JpcHQgb2JqZWN0cyByZXByZXNlbnRlZCBieSBOUE9iamVj
dC4KLQotICAgIENhbGxzIHRvIHNjcmlwdCBvYmplY3RzIGFyZSBzeW5jaHJvbm91cy4gIElmIGEg
ZnVuY3Rpb24gcmV0dXJucyBhCi0gICAgdmFsdWUsIGl0IHdpbGwgYmUgc3VwcGxpZWQgdmlhIHRo
ZSByZXN1bHQgTlBWYXJpYW50Ci0gICAgYXJndW1lbnQuIFN1Y2Nlc3NmdWwgY2FsbHMgd2lsbCBy
ZXR1cm4gdHJ1ZSwgZmFsc2Ugd2lsbCBiZQotICAgIHJldHVybmVkIGluIGNhc2Ugb2YgYW4gZXJy
b3IuCi0gICAgCi0gICAgQ2FsbHMgbWFkZSBmcm9tIHBsdWdpbiBjb2RlIHRvIHNjcmlwdCBtdXN0
IGJlIG1hZGUgZnJvbSB0aGUgdGhyZWFkCi0gICAgb24gd2hpY2ggdGhlIHBsdWdpbiB3YXMgaW5p
dGlhbGl6ZWQuCi0qLwotCi1ib29sIE5QTl9JbnZva2UoTlBQIG5wcCwgTlBPYmplY3QgKm5wb2Jq
LCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSwKLSAgICAgICAgICAgICAgICBjb25zdCBOUFZhcmlh
bnQgKmFyZ3MsIHVpbnQzMl90IGFyZ0NvdW50LCBOUFZhcmlhbnQgKnJlc3VsdCk7Ci1ib29sIE5Q
Tl9JbnZva2VEZWZhdWx0KE5QUCBucHAsIE5QT2JqZWN0ICpucG9iaiwgY29uc3QgTlBWYXJpYW50
ICphcmdzLAotICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhcmdDb3VudCwgTlBWYXJp
YW50ICpyZXN1bHQpOwotYm9vbCBOUE5fRXZhbHVhdGUoTlBQIG5wcCwgTlBPYmplY3QgKm5wb2Jq
LCBOUFN0cmluZyAqc2NyaXB0LAotICAgICAgICAgICAgICAgICAgTlBWYXJpYW50ICpyZXN1bHQp
OwotYm9vbCBOUE5fR2V0UHJvcGVydHkoTlBQIG5wcCwgTlBPYmplY3QgKm5wb2JqLCBOUElkZW50
aWZpZXIgcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAgTlBWYXJpYW50ICpyZXN1
bHQpOwotYm9vbCBOUE5fU2V0UHJvcGVydHkoTlBQIG5wcCwgTlBPYmplY3QgKm5wb2JqLCBOUElk
ZW50aWZpZXIgcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgTlBWYXJp
YW50ICp2YWx1ZSk7Ci1ib29sIE5QTl9SZW1vdmVQcm9wZXJ0eShOUFAgbnBwLCBOUE9iamVjdCAq
bnBvYmosIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpOwotYm9vbCBOUE5fSGFzUHJvcGVydHko
TlBQIG5wcCwgTlBPYmplY3QgKm5wb2JqLCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lKTsKLWJv
b2wgTlBOX0hhc01ldGhvZChOUFAgbnBwLCBOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciBt
ZXRob2ROYW1lKTsKLWJvb2wgTlBOX0VudW1lcmF0ZShOUFAgbnBwLCBOUE9iamVjdCAqbnBvYmos
IE5QSWRlbnRpZmllciAqKmlkZW50aWZpZXIsCi0gICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
KmNvdW50KTsKLWJvb2wgTlBOX0NvbnN0cnVjdChOUFAgbnBwLCBOUE9iamVjdCAqbnBvYmosIGNv
bnN0IE5QVmFyaWFudCAqYXJncywKLSAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhcmdDb3Vu
dCwgTlBWYXJpYW50ICpyZXN1bHQpOwotCi0vKgotICAgIE5QTl9TZXRFeGNlcHRpb24gbWF5IGJl
IGNhbGxlZCB0byB0cmlnZ2VyIGEgc2NyaXB0IGV4Y2VwdGlvbiB1cG9uCi0gICAgcmV0dXJuIGZy
b20gZW50cnkgcG9pbnRzIGludG8gTlBPYmplY3RzLiAgVHlwaWNhbCB1c2FnZToKLQotICAgIE5Q
Tl9TZXRFeGNlcHRpb24gKG5wb2JqLCBtZXNzYWdlKTsKLSovCi12b2lkIE5QTl9TZXRFeGNlcHRp
b24oTlBPYmplY3QgKm5wb2JqLCBjb25zdCBOUFVURjggKm1lc3NhZ2UpOwotCi0jaWZkZWYgX19j
cGx1c3BsdXMKLX0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvbnB0eXBlcy5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ucHR5cGVzLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMDEyODg4NWNjMzQ2NzQ1YmRiYTg3Zjg3MTY3
NGRjZmM1ZTIzMWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ucHR5cGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
MjEgKzAsMCBAQAotLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9k
ZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8KLS8qICoqKioqIEJFR0lOIExJQ0VOU0Ug
QkxPQ0sgKioqKioKLSAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQotICoKLSAq
IFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVi
bGljIExpY2Vuc2UgVmVyc2lvbgotICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3Qg
dXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi0gKiB0aGUgTGljZW5zZS4g
WW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiBodHRwOi8vd3d3Lm1v
emlsbGEub3JnL01QTC8KLSAqCi0gKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGlj
ZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAotICogV0lUSE9VVCBXQVJS
QU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNl
bnNlCi0gKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxp
bWl0YXRpb25zIHVuZGVyIHRoZQotICogTGljZW5zZS4KLSAqCi0gKiBUaGUgT3JpZ2luYWwgQ29k
ZSBpcyBtb3ppbGxhLm9yZyBjb2RlLgotICoKLSAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0
aGUgT3JpZ2luYWwgQ29kZSBpcwotICogbW96aWxsYS5vcmcuCi0gKiBQb3J0aW9ucyBjcmVhdGVk
IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDA0Ci0gKiB0aGUg
SW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogQ29udHJpYnV0
b3Iocyk6Ci0gKiAgIEpvaG5ueSBTdGVuYmFjayA8anN0QG1vemlsbGEub3JnPiAoT3JpZ2luYWwg
YXV0aG9yKQotICoKLSAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUg
bWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCi0gKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKLSAqIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIg
KHRoZSAiTEdQTCIpLAotICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BM
IG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKLSAqIG9mIHRob3NlIGFib3ZlLiBJ
ZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5
Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBu
b3QgdG8gYWxsb3cgb3RoZXJzIHRvCi0gKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgotICogZGVjaXNpb24gYnkg
ZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBu
b3RpY2UKLSAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhl
IExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCi0gKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSBy
ZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCi0gKiB0aGUg
dGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgotICoKLSAq
ICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCi0KLSNpZm5kZWYgbnB0eXBlc19oXwot
I2RlZmluZSBucHR5cGVzX2hfCi0KLS8qCi0gKiBIZWFkZXIgZmlsZSBmb3IgZW5zdXJpbmcgdGhh
dCBDOTkgdHlwZXMgKFt1XWludDMyX3QsIFt1XWludDY0X3QgYW5kIGJvb2wpIGFuZAotICogdHJ1
ZS9mYWxzZSBtYWNyb3MgYXJlIGF2YWlsYWJsZS4KLSAqLwotCi0jaWYgZGVmaW5lZChXSU4zMikg
fHwgZGVmaW5lZChPUzIpCi0gIC8qCi0gICAqIFdpbjMyIGFuZCBPUy8yIGRvbid0IGtub3cgQzk5
LCBzbyBkZWZpbmUgW3VdaW50XzE2LzMyLzY0IGhlcmUuIFRoZSBib29sCi0gICAqIGlzIHByZWRl
ZmluZWQgdGhvLCBib3RoIGluIEMgYW5kIEMrKy4KLSAgICovCi0gIHR5cGVkZWYgc2hvcnQgaW50
MTZfdDsKLSAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsKLSAgdHlwZWRlZiBpbnQg
aW50MzJfdDsKLSAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDMyX3Q7Ci0gIHR5cGVkZWYgbG9u
ZyBsb25nIGludDY0X3Q7Ci0gIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnQ2NF90Owot
I2VsaWYgZGVmaW5lZChfQUlYKSB8fCBkZWZpbmVkKF9fc3VuKSB8fCBkZWZpbmVkKF9fb3NmX18p
IHx8IGRlZmluZWQoSVJJWCkgfHwgZGVmaW5lZChIUFVYKQotICAvKgotICAgKiBBSVggYW5kIFN1
bk9TIHNoaXAgYSBpbnR0eXBlcy5oIGhlYWRlciB0aGF0IGRlZmluZXMgW3VdaW50MzJfdCwKLSAg
ICogYnV0IG5vdCBib29sIGZvciBDLgotICAgKi8KLSAgI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0K
LSAgI2lmbmRlZiBfX2NwbHVzcGx1cwotICAgIHR5cGVkZWYgaW50IGJvb2w7Ci0gICAgI2RlZmlu
ZSB0cnVlICAgMQotICAgICNkZWZpbmUgZmFsc2UgIDAKLSAgI2VuZGlmCi0jZWxpZiBkZWZpbmVk
KGJzZGkpIHx8IGRlZmluZWQoRlJFRUJTRCkgfHwgZGVmaW5lZChPUEVOQlNEKQotICAvKgotICAg
KiBCU0QvT1MsIEZyZWVCU0QsIGFuZCBPcGVuQlNEIHNoaXAgc3lzL3R5cGVzLmggdGhhdCBkZWZp
bmUgaW50MzJfdCBhbmQgCi0gICAqIHVfaW50MzJfdC4KLSAgICovCi0gICNpbmNsdWRlIDxzeXMv
dHlwZXMuaD4KLQotICAvKgotICAgKiBCU0QvT1Mgc2hpcHMgbm8gaGVhZGVyIHRoYXQgZGVmaW5l
cyB1aW50MzJfdCwgbm9yIGJvb2wgKGZvciBDKQotICAgKi8KLSAgI2lmIGRlZmluZWQoYnNkaSkK
LSAgdHlwZWRlZiB1X2ludDMyX3QgdWludDMyX3Q7Ci0gIHR5cGVkZWYgdV9pbnQ2NF90IHVpbnQ2
NF90OwotCi0gICNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykKLSAgICB0eXBlZGVmIGludCBib29s
OwotICAgICNkZWZpbmUgdHJ1ZSAgIDEKLSAgICAjZGVmaW5lIGZhbHNlICAwCi0gICNlbmRpZgot
ICAjZWxzZQotICAvKgotICAgKiBGcmVlQlNEIGFuZCBPcGVuQlNEIGRlZmluZSB1aW50MzJfdCBh
bmQgYm9vbC4KLSAgICovCi0gICAgI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0gICAgI2luY2x1ZGUg
PHN0ZGJvb2wuaD4KLSAgI2VuZGlmCi0jZWxpZiBkZWZpbmVkKEJFT1MpCi0gICNpbmNsdWRlIDxp
bnR0eXBlcy5oPgotI2Vsc2UKLSAgLyoKLSAgICogRm9yIHRob3NlIHRoYXQgc2hpcCBhIHN0YW5k
YXJkIEM5OSBzdGRpbnQuaCBoZWFkZXIgZmlsZSwgaW5jbHVkZQotICAgKiBpdC4gQ2FuJ3QgZG8g
dGhlIHNhbWUgZm9yIHN0ZGJvb2wuaCB0aG8sIHNpbmNlIHNvbWUgc3lzdGVtcyBzaGlwCi0gICAq
IHdpdGggYSBzdGRib29sLmggZmlsZSB0aGF0IGRvZXNuJ3QgY29tcGlsZSEKLSAgICovCi0gICNp
bmNsdWRlIDxzdGRpbnQuaD4KLQotICAjaWZuZGVmIF9fY3BsdXNwbHVzCi0gICAgI2lmICFkZWZp
bmVkKF9fR05VQ19fKSB8fCAoX19HTlVDX18gPiAyIHx8IF9fR05VQ19NSU5PUl9fID4gOTUpCi0g
ICAgICAjaW5jbHVkZSA8c3RkYm9vbC5oPgotICAgICNlbHNlCi0gICAgICAvKgotICAgICAgICog
R0NDIDIuOTEgY2FuJ3QgZGVhbCB3aXRoIGEgdHlwZWRlZiBmb3IgYm9vbCwgYnV0IGEgI2RlZmlu
ZQotICAgICAgICogd29ya3MuCi0gICAgICAgKi8KLSAgICAgICNkZWZpbmUgYm9vbCBpbnQKLSAg
ICAgICNkZWZpbmUgdHJ1ZSAgIDEKLSAgICAgICNkZWZpbmUgZmFsc2UgIDAKLSAgICAjZW5kaWYK
LSAgI2VuZGlmCi0jZW5kaWYKLQotI2VuZGlmIC8qIG5wdHlwZXNfaF8gKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMu
dHh0CmluZGV4IDdlNmFhMjdkODVlNDdmZWVlMjViY2YyOTY2MDA3N2UyMjI5MTI1ZGQuLmRlMWQx
MzUxYjZkZWNjZWUyMTA5NzFhMjhhNjAwMzgyMjY0NWQxZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dApA
QCAtMTg1LDEwICsxODUsNiBAQCBzZXQoV2ViS2l0X01FU1NBR0VTX0lOX0ZJTEVTCiAgICAgTmV0
d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENQcm92aWRlcgogICAgIE5ldHdvcmtQcm9jZXNz
L3dlYnJ0Yy9SVENEYXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXJQcm94eQogCi0gICAgUGx1Z2luUHJv
Y2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkKLSAgICBQbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nl
c3MKLSAgICBQbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uCi0KICAgICBTaGFyZWQv
QXV4aWxpYXJ5UHJvY2VzcwogICAgIFNoYXJlZC9XZWJDb25uZWN0aW9uCiAKQEAgLTE5Niw4ICsx
OTIsNiBAQCBzZXQoV2ViS2l0X01FU1NBR0VTX0lOX0ZJTEVTCiAKICAgICBTaGFyZWQvTm90aWZp
Y2F0aW9ucy9Ob3RpZmljYXRpb25NYW5hZ2VyTWVzc2FnZUhhbmRsZXIKIAotICAgIFNoYXJlZC9Q
bHVnaW5zL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVyCi0KICAgICBVSVByb2Nlc3MvRHJhd2luZ0Fy
ZWFQcm94eQogCiAgICAgVUlQcm9jZXNzL01lZGlhL1JlbW90ZU1lZGlhU2Vzc2lvbkNvb3JkaW5h
dG9yUHJveHkKQEAgLTIyNCw4ICsyMTgsNiBAQCBzZXQoV2ViS2l0X01FU1NBR0VTX0lOX0ZJTEVT
CiAKICAgICBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5CiAKLSAgICBVSVBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkKLQogICAgIFVJUHJvY2Vzcy9Vc2VyQ29u
dGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eQogCiAgICAgVUlQcm9jZXNzL1hSL1Bs
YXRmb3JtWFJTeXN0ZW0KQEAgLTI3OSwxMCArMjcxLDYgQEAgc2V0KFdlYktpdF9NRVNTQUdFU19J
Tl9GSUxFUwogCiAgICAgV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1h
bmFnZXIKIAotICAgIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbgot
ICAgIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIKLSAg
ICBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkKLQogICAgIFdlYlByb2Nlc3MvU3BlZWNo
L1NwZWVjaFJlY29nbml0aW9uUmVhbHRpbWVNZWRpYVNvdXJjZU1hbmFnZXIKIAogICAgIFdlYlBy
b2Nlc3MvU3RvcmFnZS9XZWJTV0NsaWVudENvbm5lY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvQ29uZmlndXJhdGlvbnMvUGx1Z2luU2VydmljZS54Y2NvbmZpZyBiL1NvdXJjZS9XZWJL
aXQvQ29uZmlndXJhdGlvbnMvUGx1Z2luU2VydmljZS54Y2NvbmZpZwppbmRleCA0YjkyYTQwZmQ0
NDdlMDE2MjhiZDhlMTI3OTU2MTkwNjVmM2ZlYjIxLi5lYmQ4NDZmNjJkMjc2OGU0NWNiYTcyYmM5
MDU1ZmExMTI1NDU2MjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NvbmZpZ3VyYXRpb25z
L1BsdWdpblNlcnZpY2UueGNjb25maWcKKysrIGIvU291cmNlL1dlYktpdC9Db25maWd1cmF0aW9u
cy9QbHVnaW5TZXJ2aWNlLnhjY29uZmlnCkBAIC0zMSw3ICszMSw2IEBAIFdLX0FQUEtJVF9MREZM
QUdTID0gJChXS19BUFBLSVRfTERGTEFHU18kKFdLX1BMQVRGT1JNX05BTUUpKTsKIFdLX0FQUEtJ
VF9MREZMQUdTX21hY29zeCA9IC1mcmFtZXdvcmsgQXBwS2l0OwogCiBPVEhFUl9MREZMQUdTID0g
JChpbmhlcml0ZWQpICQoV0tfQVBQS0lUX0xERkxBR1MpICQoT1RIRVJfTERGTEFHU19QTEFURk9S
TSkgJChPVEhFUl9MREZMQUdTX1ZFUlNJT05FRF9GUkFNRVdPUktfUEFUSCkgJChXS19SRUxPQ0FU
QUJMRV9GUkFNRVdPUktTX0xERkxBR1MpOwotT1RIRVJfTERGTEFHU19QTEFURk9STVtzZGs9bWFj
b3N4Kl0gPSAkKEJVSUxUX1BST0RVQ1RTX0RJUikvUGx1Z2luUHJvY2Vzc1NoaW0uZHlsaWI7CiAK
IFdLX0xJQlJBUllfVkFMSURBVElPTl9DT0RFX1NJR05fRkxBR1Nbc2RrPW1hY29zeCpdID0gLS1l
bnRpdGxlbWVudHMgJChXS19QUk9DRVNTRURfWENFTlRfRklMRSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvQ29uZmlndXJhdGlvbnMvV2ViS2l0LnhjY29uZmlnIGIvU291cmNlL1dlYktp
dC9Db25maWd1cmF0aW9ucy9XZWJLaXQueGNjb25maWcKaW5kZXggZjM1NjMzYzdhNGRhZjg3NzY1
YTkzOWFiMWYxNGZmNTM2ZTc0YzE5Yy4uOWQ0ZDM3MzY2MjI1ZWFiN2Q5OWI1YzI3NmViZWVhNjdk
Njg2MDA3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Db25maWd1cmF0aW9ucy9XZWJLaXQu
eGNjb25maWcKKysrIGIvU291cmNlL1dlYktpdC9Db25maWd1cmF0aW9ucy9XZWJLaXQueGNjb25m
aWcKQEAgLTE3Myw3ICsxNzMsNyBAQCBTRUNUT1JERVJfRkxBR1NfUHJvZHVjdGlvbltzZGs9bWFj
b3N4Kl0gPSAtV2wsLW9yZGVyX2ZpbGUsbWFjL1dlYktpdDIub3JkZXI7CiBFWENMVURFRF9JT1Nf
UkVTT1VSQ0VfRklMRV9OQU1FUyA9IFJlc291cmNlcy9pb3MvKjsKIEVYQ0xVREVEX0lPU19SRVNP
VVJDRV9GSUxFX05BTUVTW3Nkaz1pcGhvbmUqXSA9IDsKIAotRVhDTFVERURfTUFDT1NfUExVR0lO
X0ZJTEVfTkFNRVNbc2RrPWlwaG9uZSpdID0gUGx1Z2luUHJvY2Vzc1NoaW0uZHlsaWIgU2VjSXRl
bVNoaW0uZHlsaWIgV2ViUHJvY2Vzc1NoaW0uZHlsaWIgKi5wZGYgUmVzb3VyY2VzL21hYy8qIGNv
bS5hcHBsZS5XZWJLaXQuTmV0d29ya1Byb2Nlc3Muc2IgY29tLmFwcGxlLldlYktpdC5HUFVQcm9j
ZXNzLnNiIGNvbS5hcHBsZS5XZWJLaXQuV2ViQXV0aG5Qcm9jZXNzLnNiIGNvbS5hcHBsZS5XZWJQ
cm9jZXNzLnNiIGNvbS5hcHBsZS5XZWJLaXQucGx1Z2luLWNvbW1vbi5zYiBQbHVnSW5TYW5kYm94
UHJvZmlsZXMvKi5zYjsKK0VYQ0xVREVEX01BQ09TX1BMVUdJTl9GSUxFX05BTUVTW3Nkaz1pcGhv
bmUqXSA9IFNlY0l0ZW1TaGltLmR5bGliIFdlYlByb2Nlc3NTaGltLmR5bGliICoucGRmIFJlc291
cmNlcy9tYWMvKiBjb20uYXBwbGUuV2ViS2l0Lk5ldHdvcmtQcm9jZXNzLnNiIGNvbS5hcHBsZS5X
ZWJLaXQuR1BVUHJvY2Vzcy5zYiBjb20uYXBwbGUuV2ViS2l0LldlYkF1dGhuUHJvY2Vzcy5zYiBj
b20uYXBwbGUuV2ViUHJvY2Vzcy5zYjsKIAogSU5TVEFMTEhEUlNfU0NSSVBUX1BIQVNFID0gWUVT
OwogQVBQTFlfUlVMRVNfSU5fQ09QWV9IRUFERVJTID0gJChXS19VU0VfTkVXX0JVSUxEX1NZU1RF
TSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3Vy
Y2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggMTRmMmE4Y2MwNmNjNThlZDdkMjdi
ZWFmYjI3ZDkyNTkxZWRmNTAwNS4uNWY1ZjQ3MzA5NjNkYjY5NTVlZTliNDA5MzEzZGNiMDQwZjNj
OTY4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBi
L1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMTQzLDcgKzE0Myw2IEBAIE1F
U1NBR0VfUkVDRUlWRVJTID0gXAogCU5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9SVENEYXRhQ2hhbm5l
bFJlbW90ZU1hbmFnZXJQcm94eSBcCiAJTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVN
YW5hZ2VyIFwKIAlOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlciBc
Ci0JU2hhcmVkL1BsdWdpbnMvTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIgXAogCVNoYXJlZC9BdXhp
bGlhcnlQcm9jZXNzIFwKIAlTaGFyZWQvQVBJL0NvY29hL1JlbW90ZU9iamVjdFJlZ2lzdHJ5IFwK
IAlTaGFyZWQvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkgXApAQCAtMTYwLDcg
KzE1OSw2IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogCVVJUHJvY2Vzcy9JbnNwZWN0b3IvV2Vi
SW5zcGVjdG9yVUlQcm94eSBcCiAJVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0
b3JVSVByb3h5IFwKIAlVSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJRXh0ZW5zaW9u
Q29udHJvbGxlclByb3h5IFwKLQlVSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkg
XAogCVVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5IFwKIAlVSVByb2Nlc3MvTmV0d29yay9OZXR3
b3JrUHJvY2Vzc1Byb3h5IFwKIAlVSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkgXApAQCAtMjEwLDkgKzIwOCw2IEBAIE1FU1NB
R0VfUkVDRUlWRVJTID0gXAogCVdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvciBcCiAJ
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUkgXAogCVdlYlByb2Nlc3Mv
TWVkaWFTZXNzaW9uL1JlbW90ZU1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yIFwKLQlXZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyIFwKLQlXZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luUHJveHkgXAotCVdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29u
bmVjdGlvbiBcCiAJV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwgXAogCVdlYlBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24gXAogCVdlYlByb2Nlc3MvTmV0
d29yay9XZWJTb2NrZXRTdHJlYW0gXApAQCAtMjQ4LDkgKzI0Myw2IEBAIE1FU1NBR0VfUkVDRUlW
RVJTID0gXAogCVdlYlByb2Nlc3MvV2ViUGFnZS9WaWV3VXBkYXRlRGlzcGF0Y2hlciBcCiAJV2Vi
UHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoblByb2Nlc3NDb25uZWN0aW9uIFwKIAlX
ZWJQcm9jZXNzL1hSL1BsYXRmb3JtWFJTeXN0ZW1Qcm94eSBcCi0JUGx1Z2luUHJvY2Vzcy9XZWJQ
cm9jZXNzQ29ubmVjdGlvbiBcCi0JUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkg
XAotCVBsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2VzcyBcCiAJR1BVUHJvY2Vzcy9HUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzIFwKIAlHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXIgXAogCUdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBc
CkBAIC0zMjUsNyArMzE3LDYgQEAgZW5kaWYKIAogU0FOREJPWF9QUk9GSUxFUyA9IFwKIAljb20u
YXBwbGUuV2ViUHJvY2Vzcy5zYiBcCi0JY29tLmFwcGxlLldlYktpdC5wbHVnaW4tY29tbW9uLnNi
IFwKIAljb20uYXBwbGUuV2ViS2l0Lk5ldHdvcmtQcm9jZXNzLnNiIFwKIAljb20uYXBwbGUuV2Vi
S2l0LkdQVVByb2Nlc3Muc2IgXAogCWNvbS5hcHBsZS5XZWJLaXQuV2ViQXV0aG5Qcm9jZXNzLnNi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
LmNwcAppbmRleCAyNjg1NTIwZjgyMWQ1NjY5NTNjYjQ3NGQ3YzdhZWI4YjkzNTg4YWQxLi4zNTVi
Yjg0ZmNiYTdkNmVhYmFhOTc1MjAyMjc2YmU5YWIzZTZmZmI3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKQEAgLTMwLDggKzMw
LDYgQEAKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5o
IgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJv
Y2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmgi
CiAjaW5jbHVkZSAiUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyUHJveHkuaCIKICNpbmNs
dWRlICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuY3BwCmluZGV4IDQ5M2U0M2FlMGI2YmJlODg3NWI5OWM2NmE1ODJmYWU2YjU0
NzYwY2QuLjIwMWQxYWZkZjczMmUyYmNmMGY1OGRhMzEwMDI0MDhiYjdhYWFhNmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCkBAIC0zMSw4ICszMSw2IEBA
CiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCiAjaW5j
bHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKLSNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzTWFuYWdlci5o
IgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBY2Nl
c3NTdGF0dXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJXZWJz
aXRlRGF0YVN0b3JlLmgiCkBAIC0xNjQsMTIgKzE2Miw2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpyZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQotICAgIG1fYWN0aXZlUGx1Z2luVG9rZW5zLmNsZWFyKCk7Ci0gICAgZm9yIChjb25zdCBh
dXRvJiBwbHVnaW4gOiBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkucGx1Z2luUHJv
Y2Vzc2VzKCkpCi0gICAgICAgIG1fYWN0aXZlUGx1Z2luVG9rZW5zLmFkZChwbHVnaW4tPnBsdWdp
blByb2Nlc3NUb2tlbigpKTsKLSNlbmRpZgotCiAgICAgYXV0byBkb21haW5zVG9EZWxldGVPclJl
c3RyaWN0V2Vic2l0ZURhdGFGb3IgPSByZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0ZU9yUmVzdHJp
Y3RXZWJzaXRlRGF0YUZvcigpOwogICAgIGlmIChkb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vi
c2l0ZURhdGFGb3IuaXNFbXB0eSgpKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CkBA
IC0zOTIsMTMgKzM4NCw2IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzaG91
bGRSZW1vdmVEYXRhUmVjb3JkcygpIGNvbnN0CiAgICAgaWYgKG1fZGF0YVJlY29yZHNCZWluZ1Jl
bW92ZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotICAgIGZvciAoY29uc3QgYXV0byYgcGx1Z2luIDogUGx1Z2luUHJvY2Vzc01hbmFn
ZXI6OnNpbmdsZXRvbigpLnBsdWdpblByb2Nlc3NlcygpKSB7Ci0gICAgICAgIGlmICghbV9hY3Rp
dmVQbHVnaW5Ub2tlbnMuY29udGFpbnMocGx1Z2luLT5wbHVnaW5Qcm9jZXNzVG9rZW4oKSkpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYKLQogICAgIHJldHVybiAhbV9s
YXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgfHwgTW9ub3RvbmljVGltZTo6bm93KCkgPj0g
KG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkICsgbV9wYXJhbWV0ZXJzLm1pbmltdW1U
aW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCkgfHwgcGFyYW1ldGVycygpLmlzUnVubmluZ1Rl
c3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAppbmRleCA5
YTk4M2FkYzc3MjE4OTljYTI3ZDYyYjk2NmExNGVhMmMzYWY5MTQ1Li4xYTNiMDhiZjczZTE0ZmM3
Y2UwYTY1N2RlNTgzZjlmMjJkNGFhODIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oCkBAIC0yNzIsOSArMjcyLDYgQEAgcHJpdmF0ZToKICAgICBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNz
aWZpZXI7CiAjZWxzZQogICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyIG1fcmVz
b3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLSAgICBIYXNoU2V0PHVpbnQ2NF90PiBtX2FjdGl2ZVBsdWdpblRva2Vu
czsKICNlbmRpZgogICAgIFBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJzOwogICAgIFdhbGxUaW1lIG1f
ZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
Y3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKaW5kZXggNTM5OTU0NTVmNzVmM2M1YmY0YmY5NjIzOGY2
M2YzZDcyMzc1ZjQxZi4uZGU3NjVkZTQ1MDcxZjQxZjNmYzRkNDY5NzA1MzgxNmUxODk5ZWJmYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKQEAg
LTY5LDkgKzY5LDYgQEAgY29uc3QgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4mIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bW9uaXRvcmVkRGF0YVQKICAgICAgICAgV2Vic2l0ZURh
dGFUeXBlOjpMb2NhbFN0b3JhZ2UsCiAgICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6TWVkaWFLZXlz
LAogICAgICAgICBXZWJzaXRlRGF0YVR5cGU6Ok9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlLAot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBXZWJzaXRlRGF0YVR5cGU6
OlBsdWdJbkRhdGEsCi0jZW5kaWYKICAgICAgICAgV2Vic2l0ZURhdGFUeXBlOjpTZWFyY2hGaWVs
ZFJlY2VudFNlYXJjaGVzLAogICAgICAgICBXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdl
LAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vRXh0cmFQcml2YXRlU3ltYm9sc0ZvclRBUEkuaCBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vRXh0cmFQcml2YXRlU3ltYm9sc0ZvclRBUEkuaAppbmRleCBmYjdhYzBiYzRjMWNjODkw
M2JhOTI1NGMxNDIzMWQzNjY5ZGQ0MjhmLi40NjIzMDMyZDM2MzYxMzQyYzNhNzBiYjI4OWNiMDMw
ZGZiMmNjZGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0V4dHJhUHJpdmF0
ZVN5bWJvbHNGb3JUQVBJLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9FeHRyYVByaXZh
dGVTeW1ib2xzRm9yVEFQSS5oCkBAIC0zMSw3ICszMSw2IEBAIGV4dGVybiAiQyIgewogCiAvLyBG
SVhNRTogUmVtb3ZlIHRoZXNlIGFmdGVyIDxyZGFyOi8vcHJvYmxlbS8zMDc3MjAzMz4gaXMgZml4
ZWQuCiB2b2lkIE5ldHdvcmtTZXJ2aWNlSW5pdGlhbGl6ZXIoKTsKLXZvaWQgUGx1Z2luU2Vydmlj
ZUluaXRpYWxpemVyKCk7CiB2b2lkIFdlYkNvbnRlbnRTZXJ2aWNlSW5pdGlhbGl6ZXIoKTsKIHZv
aWQgR1BVU2VydmljZUluaXRpYWxpemVyKCk7CiB2b2lkIFdlYkF1dGhuU2VydmljZUluaXRpYWxp
emVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlIGIvU291
cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCAwNjU0OWI4OTcwOGE0NDEyOTcwZDNh
MTllODQyNWU2Y2Y2YTFmNDkwLi4zMzI5YThmNTU5YzBjY2Y1NGM5NTdmZDAzMzA4NDAyODE3ZmU2
MGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTE4MSwxMSArMTgxLDYgQEAgc2V0KE5l
dHdvcmtQcm9jZXNzX1NPVVJDRVMKICAgICAke1hQQ1NlcnZpY2VfU09VUkNFU30KICkKIAotc2V0
KFBsdWdpblByb2Nlc3NfU09VUkNFUwotICAgIFBsdWdpblByb2Nlc3MvRW50cnlQb2ludC9Db2Nv
YS9YUENTZXJ2aWNlL1BsdWdpblNlcnZpY2VFbnRyeVBvaW50Lm1tCi0gICAgJHtYUENTZXJ2aWNl
X1NPVVJDRVN9Ci0pCi0KIHNldChHUFVQcm9jZXNzX1NPVVJDRVMKICAgICBHUFVQcm9jZXNzL0Vu
dHJ5UG9pbnQvQ29jb2EvWFBDU2VydmljZS9HUFVTZXJ2aWNlRW50cnlQb2ludC5tbQogICAgICR7
WFBDU2VydmljZV9TT1VSQ0VTfQpAQCAtMTk5LDEzICsxOTQsMTEgQEAgc2V0KFdlYkF1dGhuUHJv
Y2Vzc19TT1VSQ0VTCiAjIEZJWE1FOiBUaGVzZSBzaG91bGQgbm90IGhhdmUgRGV2ZWxvcG1lbnQg
aW4gcHJvZHVjdGlvbiBidWlsZHMuCiBzZXQoV2ViUHJvY2Vzc19PVVRQVVRfTkFNRSBjb20uYXBw
bGUuV2ViS2l0LldlYkNvbnRlbnQuRGV2ZWxvcG1lbnQpCiBzZXQoTmV0d29ya1Byb2Nlc3NfT1VU
UFVUX05BTUUgY29tLmFwcGxlLldlYktpdC5OZXR3b3JraW5nLkRldmVsb3BtZW50KQotc2V0KFBs
dWdpblByb2Nlc3NfT1VUUFVUX05BTUUgY29tLmFwcGxlLldlYktpdC5QbHVnaW4uNjQuRGV2ZWxv
cG1lbnQpCiBzZXQoR1BVUHJvY2Vzc19PVVRQVVRfTkFNRSBjb20uYXBwbGUuV2ViS2l0LkdQVS5E
ZXZlbG9wbWVudCkKIHNldChXZWJBdXRoblByb2Nlc3NfT1VUUFVUX05BTUUgY29tLmFwcGxlLldl
YktpdC5XZWJBdXRobi5EZXZlbG9wbWVudCkKIAogc2V0KFdlYlByb2Nlc3NfSU5DTFVERV9ESVJF
Q1RPUklFUyAke0NNQUtFX0JJTkFSWV9ESVJ9KQogc2V0KE5ldHdvcmtQcm9jZXNzX0lOQ0xVREVf
RElSRUNUT1JJRVMgJHtDTUFLRV9CSU5BUllfRElSfSkKLXNldChQbHVnaW5Qcm9jZXNzX0lOQ0xV
REVfRElSRUNUT1JJRVMgJHtDTUFLRV9CSU5BUllfRElSfSkKIAogYWRkX2RlZmluaXRpb25zKCIt
aW5jbHVkZSBXZWJLaXQyUHJlZml4LmgiKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Bs
dWdpblByb2Nlc3MvRW50cnlQb2ludC9Db2NvYS9YUENTZXJ2aWNlL1BsdWdpblNlcnZpY2UuSW5m
by5wbGlzdCBiL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9FbnRyeVBvaW50L0NvY29hL1hQ
Q1NlcnZpY2UvUGx1Z2luU2VydmljZS5JbmZvLnBsaXN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA2MmIwMmFjODNmMDFmYzUwZDEyZTNhNTMyZTA3YjUwZGVlY2U0MjdhLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUGx1
Z2luUHJvY2Vzcy9FbnRyeVBvaW50L0NvY29hL1hQQ1NlcnZpY2UvUGx1Z2luU2VydmljZS5JbmZv
LnBsaXN0CisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4w
IiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9E
VEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0
LTEuMC5kdGQiPgotPHBsaXN0IHZlcnNpb249IjEuMCI+Ci08ZGljdD4KLQk8a2V5PkNGQnVuZGxl
R2V0SW5mb1N0cmluZzwva2V5PgotCTxzdHJpbmc+JHtCVU5ETEVfVkVSU0lPTn0sIENvcHlyaWdo
dCAyMDAzLTIwMjEgQXBwbGUgSW5jLjwvc3RyaW5nPgotCTxrZXk+Q0ZCdW5kbGVEZXZlbG9wbWVu
dFJlZ2lvbjwva2V5PgotCTxzdHJpbmc+RW5nbGlzaDwvc3RyaW5nPgotCTxrZXk+Q0ZCdW5kbGVF
eGVjdXRhYmxlPC9rZXk+Ci0JPHN0cmluZz4ke0VYRUNVVEFCTEVfTkFNRX08L3N0cmluZz4KLQk8
a2V5PkNGQnVuZGxlSWRlbnRpZmllcjwva2V5PgotCTxzdHJpbmc+JHtQUk9EVUNUX0JVTkRMRV9J
REVOVElGSUVSfTwvc3RyaW5nPgotCTxrZXk+Q0ZCdW5kbGVJbmZvRGljdGlvbmFyeVZlcnNpb248
L2tleT4KLQk8c3RyaW5nPjYuMDwvc3RyaW5nPgotCTxrZXk+Q0ZCdW5kbGVOYW1lPC9rZXk+Ci0J
PHN0cmluZz4ke1BST0RVQ1RfTkFNRX08L3N0cmluZz4KLQk8a2V5PkNGQnVuZGxlUGFja2FnZVR5
cGU8L2tleT4KLQk8c3RyaW5nPlhQQyE8L3N0cmluZz4KLQk8a2V5PkNGQnVuZGxlU2hvcnRWZXJz
aW9uU3RyaW5nPC9rZXk+Ci0JPHN0cmluZz4ke1NIT1JUX1ZFUlNJT05fU1RSSU5HfTwvc3RyaW5n
PgotCTxrZXk+Q0ZCdW5kbGVTaWduYXR1cmU8L2tleT4KLQk8c3RyaW5nPj8/Pz88L3N0cmluZz4K
LQk8a2V5PkNGQnVuZGxlVmVyc2lvbjwva2V5PgotCTxzdHJpbmc+JHtCVU5ETEVfVkVSU0lPTn08
L3N0cmluZz4KLQk8a2V5PkxTRmlsZVF1YXJhbnRpbmVFbmFibGVkPC9rZXk+Ci0JPGZhbHNlLz4K
LQk8a2V5Pk5TUHJpbmNpcGFsQ2xhc3M8L2tleT4KLQk8c3RyaW5nPk5TQXBwbGljYXRpb248L3N0
cmluZz4KLQk8a2V5PkxTVUlFbGVtZW50PC9rZXk+Ci0JPHRydWUvPgotCTxrZXk+TlNTdXBwb3J0
c0F1dG9tYXRpY0dyYXBoaWNzU3dpdGNoaW5nPC9rZXk+Ci0JPHRydWUvPgotCTxrZXk+TlNTdXBw
b3J0c0FwcE5hcDwva2V5PgotCTx0cnVlLz4KLQk8a2V5PlhQQ1NlcnZpY2U8L2tleT4KLQk8ZGlj
dD4KLQkJPGtleT5TZXJ2aWNlVHlwZTwva2V5PgotCQk8c3RyaW5nPkFwcGxpY2F0aW9uPC9zdHJp
bmc+Ci0JCTxrZXk+UnVuTG9vcFR5cGU8L2tleT4KLQkJPHN0cmluZz5fTlNBcHBsaWNhdGlvbk1h
aW48L3N0cmluZz4KLQkJPGtleT5Kb2luRXhpc3RpbmdTZXNzaW9uPC9rZXk+Ci0JCTx0cnVlLz4K
LQkJPGtleT5fTXVsdGlwbGVJbnN0YW5jZXM8L2tleT4KLQkJPHRydWUvPgotCQk8a2V5Pl9BYmFu
ZG9uQ29hbGl0aW9uPC9rZXk+Ci0JCTx0cnVlLz4KLQkJPGtleT5fSGlnaEJpdHNBU0xSPC9rZXk+
Ci0JCTx0cnVlLz4KLQkJPGtleT5FbnZpcm9ubWVudFZhcmlhYmxlczwva2V5PgotCQk8ZGljdD4K
LQkJCTxrZXk+TlNTdHJpbmdEaXNhYmxlVGFnZ2VkPC9rZXk+Ci0JCQk8c3RyaW5nPllFUzwvc3Ry
aW5nPgotCQk8L2RpY3Q+Ci0JPC9kaWN0PgotPC9kaWN0PgotPC9wbGlzdD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9FbnRyeVBvaW50L0NvY29hL1hQQ1NlcnZpY2Uv
UGx1Z2luU2VydmljZUVudHJ5UG9pbnQubW0gYi9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3Mv
RW50cnlQb2ludC9Db2NvYS9YUENTZXJ2aWNlL1BsdWdpblNlcnZpY2VFbnRyeVBvaW50Lm1tCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDc0YzNlNDU0MGNiYTg4NzgzOWMxZGM3MTIy
Yzg5NGFiMTcwNzU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9FbnRyeVBvaW50L0NvY29hL1hQQ1NlcnZp
Y2UvUGx1Z2luU2VydmljZUVudHJ5UG9pbnQubW0KKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0KLSNpbXBvcnQgIkVudmlyb25t
ZW50VXRpbGl0aWVzLmgiCi0jaW1wb3J0ICJQbHVnaW5Qcm9jZXNzLmgiCi0jaW1wb3J0ICJXS0Jh
c2UuaCIKLSNpbXBvcnQgIlhQQ1NlcnZpY2VFbnRyeVBvaW50LmgiCi0jaW1wb3J0IDx3dGYvUnVu
TG9vcC5oPgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1jbGFzcyBQbHVnaW5TZXJ2aWNlSW5pdGlhbGl6ZXJEZWxlZ2F0ZSA6IHB1Ymxp
YyBYUENTZXJ2aWNlSW5pdGlhbGl6ZXJEZWxlZ2F0ZSB7Ci1wdWJsaWM6Ci0gICAgUGx1Z2luU2Vy
dmljZUluaXRpYWxpemVyRGVsZWdhdGUoT1NPYmplY3RQdHI8eHBjX2Nvbm5lY3Rpb25fdD4gY29u
bmVjdGlvbiwgeHBjX29iamVjdF90IGluaXRpYWxpemVyTWVzc2FnZSkKLSAgICAgICAgOiBYUENT
ZXJ2aWNlSW5pdGlhbGl6ZXJEZWxlZ2F0ZShXVEZNb3ZlKGNvbm5lY3Rpb24pLCBpbml0aWFsaXpl
ck1lc3NhZ2UpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBnZXRFeHRyYUluaXRp
YWxpemF0aW9uRGF0YShIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgZXh0cmFJbml0aWFsaXphdGlv
bkRhdGEpCi0gICAgewotICAgICAgICB4cGNfb2JqZWN0X3QgZXh0cmFEYXRhSW5pdGlhbGl6YXRp
b25EYXRhT2JqZWN0ID0geHBjX2RpY3Rpb25hcnlfZ2V0X3ZhbHVlKG1faW5pdGlhbGl6ZXJNZXNz
YWdlLCAiZXh0cmEtaW5pdGlhbGl6YXRpb24tZGF0YSIpOwotCi0gICAgICAgIFN0cmluZyBwbHVn
aW5QYXRoID0geHBjX2RpY3Rpb25hcnlfZ2V0X3N0cmluZyhleHRyYURhdGFJbml0aWFsaXphdGlv
bkRhdGFPYmplY3QsICJwbHVnaW4tcGF0aCIpOwotICAgICAgICBpZiAocGx1Z2luUGF0aC5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGV4dHJhSW5pdGlhbGl6
YXRpb25EYXRhLmFkZCgicGx1Z2luLXBhdGgiLCBwbHVnaW5QYXRoKTsKLQotICAgICAgICBTdHJp
bmcgZGlzYWJsZVNhbmRib3ggPSB4cGNfZGljdGlvbmFyeV9nZXRfc3RyaW5nKGV4dHJhRGF0YUlu
aXRpYWxpemF0aW9uRGF0YU9iamVjdCwgImRpc2FibGUtc2FuZGJveCIpOwotICAgICAgICBpZiAo
IWRpc2FibGVTYW5kYm94LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRp
b25EYXRhLmFkZCgiZGlzYWJsZS1zYW5kYm94IiwgZGlzYWJsZVNhbmRib3gpOwotCi0gICAgICAg
IFN0cmluZyBleHBlcmltZW50YWxTYW5kYm94UGx1Z0luID0geHBjX2RpY3Rpb25hcnlfZ2V0X3N0
cmluZyhleHRyYURhdGFJbml0aWFsaXphdGlvbkRhdGFPYmplY3QsICJleHBlcmltZW50YWwtc2Fu
ZGJveC1wbHVnaW4iKTsKLSAgICAgICAgaWYgKCFleHBlcmltZW50YWxTYW5kYm94UGx1Z0luLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25EYXRhLmFkZCgiZXhwZXJp
bWVudGFsLXNhbmRib3gtcGx1Z2luIl9zLCBleHBlcmltZW50YWxTYW5kYm94UGx1Z0luKTsKLQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQotCi1leHRlcm4gIkMiIFdLX0VYUE9SVCB2b2lkIFBMVUdJTl9TRVJWSUNFX0lO
SVRJQUxJWkVSKHhwY19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiwgeHBjX29iamVjdF90IGluaXRp
YWxpemVyTWVzc2FnZSwgeHBjX29iamVjdF90IHByaW9yaXR5Qm9vc3RNZXNzYWdlKTsKLQotdm9p
ZCBQTFVHSU5fU0VSVklDRV9JTklUSUFMSVpFUih4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24s
IHhwY19vYmplY3RfdCBpbml0aWFsaXplck1lc3NhZ2UsIHhwY19vYmplY3RfdCBwcmlvcml0eUJv
b3N0TWVzc2FnZSkKLXsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBXVEY6
OmluaXRpYWxpemVNYWluVGhyZWFkKCk7Ci0KLSAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9y
IHRlYXJkb3duIGZyb20gUGx1Z2luUHJvY2Vzc01haW4ubW0KLQotICAgIC8vIFJlbW92ZSB0aGUg
UGx1Z2luUHJvY2VzcyBzaGltIGZyb20gdGhlIERZTERfSU5TRVJUX0xJQlJBUklFUyBlbnZpcm9u
bWVudCB2YXJpYWJsZSBzbyBhbnkgcHJvY2Vzc2VzCi0gICAgLy8gc3Bhd25lZCBieSB0aGUgUGx1
Z2luUHJvY2VzcyBkb24ndCB0cnkgdG8gaW5zZXJ0IHRoZSBzaGltIGFuZCBjcmFzaC4KLSAgICBF
bnZpcm9ubWVudFV0aWxpdGllczo6cmVtb3ZlVmFsdWVzRW5kaW5nV2l0aCgiRFlMRF9JTlNFUlRf
TElCUkFSSUVTIiwgIi9QbHVnaW5Qcm9jZXNzU2hpbS5keWxpYiIpOwotICAgIFhQQ1NlcnZpY2VJ
bml0aWFsaXplcjxQbHVnaW5Qcm9jZXNzLCBQbHVnaW5TZXJ2aWNlSW5pdGlhbGl6ZXJEZWxlZ2F0
ZT4oY29ubmVjdGlvbiwgaW5pdGlhbGl6ZXJNZXNzYWdlLCBwcmlvcml0eUJvb3N0TWVzc2FnZSk7
Ci0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmQwNGQ5OWI3YzI3MTY3MWM4NzUyYjE4YTkyZTQy
MTU4NTZjOWUxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNjc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luQ29udHJvbGxlclByb3h5LmgiCi0KLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIk5QT2JqZWN0UHJveHkuaCIKLSNpbmNs
dWRlICJOUFJlbW90ZU9iamVjdE1hcC5oIgotI2luY2x1ZGUgIk5QUnVudGltZVV0aWxpdGllcy5o
IgotI2luY2x1ZGUgIk5QVmFyaWFudERhdGEuaCIKLSNpbmNsdWRlICJOZXRzY2FwZVBsdWdpbi5o
IgotI2luY2x1ZGUgIlBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5oIgotI2luY2x1ZGUgIlBsdWdp
blByb2Nlc3MuaCIKLSNpbmNsdWRlICJQbHVnaW5Qcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAi
U2hhcmVhYmxlQml0bWFwLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0j
aW5jbHVkZSAiV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzQ29u
bmVjdGlvbk1lc3NhZ2VzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL0hUVFBIZWFkZXJNYXAuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0lk
ZW50aWZpZXJSZXAuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5j
bHVkZSA8d3RmL1NldEZvclNjb3BlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJMYXllckhvc3RpbmdDb250ZXh0Lmgi
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
LQotUGx1Z2luQ29udHJvbGxlclByb3h5OjpQbHVnaW5Db250cm9sbGVyUHJveHkoV2ViUHJvY2Vz
c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyYg
Y3JlYXRpb25QYXJhbWV0ZXJzKQotICAgIDogbV9jb25uZWN0aW9uKGNvbm5lY3Rpb24pCi0gICAg
LCBtX3BsdWdpbkluc3RhbmNlSUQoY3JlYXRpb25QYXJhbWV0ZXJzLnBsdWdpbkluc3RhbmNlSUQp
Ci0gICAgLCBtX3VzZXJBZ2VudChjcmVhdGlvblBhcmFtZXRlcnMudXNlckFnZW50KQotICAgICwg
bV9pc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQoY3JlYXRpb25QYXJhbWV0ZXJzLmlzUHJpdmF0ZUJy
b3dzaW5nRW5hYmxlZCkKLSAgICAsIG1faXNNdXRlZChjcmVhdGlvblBhcmFtZXRlcnMuaXNNdXRl
ZCkKLSAgICAsIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZChjcmVhdGlvblBhcmFt
ZXRlcnMuaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCkKLSAgICAsIG1faXNJbml0aWFs
aXppbmcoZmFsc2UpCi0gICAgLCBtX2lzVmlzaWJsZShmYWxzZSkKLSAgICAsIG1faXNXaW5kb3dW
aXNpYmxlKGZhbHNlKQotICAgICwgbV9wYWludFRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywg
JlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6cGFpbnQpCi0gICAgLCBtX3BsdWdpbkRlc3RydWN0aW9u
UHJvdGVjdENvdW50KDApCi0gICAgLCBtX3BsdWdpbkRlc3Ryb3lUaW1lcihSdW5Mb29wOjptYWlu
KCksIHRoaXMsICZQbHVnaW5Db250cm9sbGVyUHJveHk6OmRlc3Ryb3kpCi0gICAgLCBtX3dhaXRp
bmdGb3JEaWRVcGRhdGUoZmFsc2UpCi0gICAgLCBtX3BsdWdpbkNhbmNlbGVkTWFudWFsU3RyZWFt
TG9hZChmYWxzZSkKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICAsIG1faXNDb21wbGV4VGV4dElu
cHV0RW5hYmxlZChmYWxzZSkKLSNlbmRpZgotICAgICwgbV9jb250ZW50c1NjYWxlRmFjdG9yKGNy
ZWF0aW9uUGFyYW1ldGVycy5jb250ZW50c1NjYWxlRmFjdG9yKQotICAgICwgbV93aW5kb3dOUE9i
amVjdCgwKQotICAgICwgbV9wbHVnaW5FbGVtZW50TlBPYmplY3QoMCkKLSAgICAsIG1fdmlzaWJs
aXR5QWN0aXZpdHkoIlBsdWdpbiBpcyB2aXNpYmxlLiIpCi17Ci19Ci0KLVBsdWdpbkNvbnRyb2xs
ZXJQcm94eTo6flBsdWdpbkNvbnRyb2xsZXJQcm94eSgpCi17Ci0gICAgQVNTRVJUKCFtX3BsdWdp
bik7Ci0KLSAgICBpZiAobV93aW5kb3dOUE9iamVjdCkKLSAgICAgICAgcmVsZWFzZU5QT2JqZWN0
KG1fd2luZG93TlBPYmplY3QpOwotCi0gICAgaWYgKG1fcGx1Z2luRWxlbWVudE5QT2JqZWN0KQot
ICAgICAgICByZWxlYXNlTlBPYmplY3QobV9wbHVnaW5FbGVtZW50TlBPYmplY3QpOwotfQotCi12
b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6c2V0SW5pdGlhbGl6YXRpb25SZXBseShNZXNzYWdl
czo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdpbjo6RGVsYXllZFJlcGx5JiYgcmVw
bHkpCi17Ci0gICAgQVNTRVJUKCFtX2luaXRpYWxpemF0aW9uUmVwbHkpOwotICAgIG1faW5pdGlh
bGl6YXRpb25SZXBseSA9IFdURk1vdmUocmVwbHkpOwotfQotCi1NZXNzYWdlczo6V2ViUHJvY2Vz
c0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdpbjo6RGVsYXllZFJlcGx5IFBsdWdpbkNvbnRyb2xsZXJQ
cm94eTo6dGFrZUluaXRpYWxpemF0aW9uUmVwbHkoKQotewotICAgIHJldHVybiBzdGQ6OmV4Y2hh
bmdlKG1faW5pdGlhbGl6YXRpb25SZXBseSwgbnVsbHB0cik7Ci19Ci0KLWJvb2wgUGx1Z2luQ29u
dHJvbGxlclByb3h5Ojppbml0aWFsaXplKGNvbnN0IFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyYg
Y3JlYXRpb25QYXJhbWV0ZXJzKQotewotICAgIEFTU0VSVCghbV9wbHVnaW4pOwotCi0gICAgQVNT
RVJUKCFtX2lzSW5pdGlhbGl6aW5nKTsKLSAgICBtX2lzSW5pdGlhbGl6aW5nID0gdHJ1ZTsgLy8g
Q2Fubm90IHVzZSBTZXRGb3JTY29wZSBoZXJlLCBiZWNhdXNlIHRoaXMgb2JqZWN0IGNhbiBiZSBk
ZWxldGVkIGJlZm9yZSB0aGUgZnVuY3Rpb24gcmV0dXJucy4KLQotICAgIG1fcGx1Z2luID0gTmV0
c2NhcGVQbHVnaW46OmNyZWF0ZShQbHVnaW5Qcm9jZXNzOjpzaW5nbGV0b24oKS5uZXRzY2FwZVBs
dWdpbk1vZHVsZSgpKTsKLSAgICBpZiAoIW1fcGx1Z2luKSB7Ci0gICAgICAgIC8vIFRoaXMgd2ls
bCBkZWxldGUgdGhlIHBsdWctaW4gY29udHJvbGxlciBwcm94eSBvYmplY3QuCi0gICAgICAgIG1f
Y29ubmVjdGlvbi0+cmVtb3ZlUGx1Z2luQ29udHJvbGxlclByb3h5KHRoaXMsIDApOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGNyZWF0aW9uUGFyYW1ldGVycy53aW5k
b3dOUE9iamVjdElEKQotICAgICAgICBtX3dpbmRvd05QT2JqZWN0ID0gbV9jb25uZWN0aW9uLT5u
cFJlbW90ZU9iamVjdE1hcCgpLT5jcmVhdGVOUE9iamVjdFByb3h5KGNyZWF0aW9uUGFyYW1ldGVy
cy53aW5kb3dOUE9iamVjdElELCBtX3BsdWdpbi5nZXQoKSk7Ci0KLSAgICBib29sIHJldHVyblZh
bHVlID0gbV9wbHVnaW4tPmluaXRpYWxpemUoKnRoaXMsIGNyZWF0aW9uUGFyYW1ldGVycy5wYXJh
bWV0ZXJzKTsKLQotICAgIGlmICghcmV0dXJuVmFsdWUpIHsKLSAgICAgICAgLy8gR2V0IHRoZSBw
bHVnLWluIHNvIHdlIGNhbiBwYXNzIGl0IHRvIHJlbW92ZVBsdWdpbkNvbnRyb2xsZXJQcm94eS4g
VGhlIHBvaW50ZXIgaXMgb25seQotICAgICAgICAvLyB1c2VkIGFzIGFuIGlkZW50aWZpZXIgc28g
aXQncyBPSyB0byBqdXN0IGdldCBhIHdlYWsgcmVmZXJlbmNlLgotICAgICAgICBQbHVnaW4qIHBs
dWdpbiA9IG1fcGx1Z2luLmdldCgpOwotICAgICAgICAKLSAgICAgICAgbV9wbHVnaW4gPSBudWxs
cHRyOwotCi0gICAgICAgIC8vIFRoaXMgd2lsbCBkZWxldGUgdGhlIHBsdWctaW4gY29udHJvbGxl
ciBwcm94eSBvYmplY3QuCi0gICAgICAgIG1fY29ubmVjdGlvbi0+cmVtb3ZlUGx1Z2luQ29udHJv
bGxlclByb3h5KHRoaXMsIHBsdWdpbik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBwbGF0Zm9ybUluaXRpYWxpemUoY3JlYXRpb25QYXJhbWV0ZXJzKTsKLQotICAgIG1faXNJ
bml0aWFsaXppbmcgPSBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQbHVnaW5D
b250cm9sbGVyUHJveHk6OmRlc3Ryb3koKQotewotICAgIEFTU0VSVChtX3BsdWdpbik7Ci0KLSAg
ICAvLyBGSVhNRTogQ29uc2lkZXIgcmVtb3ZpbmcgbV9wbHVnaW5EZXN0cnVjdGlvblByb3RlY3RD
b3VudCBhbmQgYWx3YXlzIHVzZSBpblNlbmRTeW5jIGhlcmUuCi0gICAgaWYgKG1fcGx1Z2luRGVz
dHJ1Y3Rpb25Qcm90ZWN0Q291bnQgfHwgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPmluU2Vu
ZFN5bmMoKSkgewotICAgICAgICAvLyBXZSBoYXZlIHBsdWctaW4gY29kZSBvbiB0aGUgc3RhY2sg
c28gd2UgY2FuJ3QgZGVzdHJveSBpdCByaWdodCBub3cuCi0gICAgICAgIC8vIERlc3Ryb3kgaXQg
bGF0ZXIuCi0gICAgICAgIG1fcGx1Z2luRGVzdHJveVRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gR2V0IHRoZSBwbHVnLWluIHNvIHdlIGNh
biBwYXNzIGl0IHRvIHJlbW92ZVBsdWdpbkNvbnRyb2xsZXJQcm94eS4gVGhlIHBvaW50ZXIgaXMg
b25seQotICAgIC8vIHVzZWQgYXMgYW4gaWRlbnRpZmllciBzbyBpdCdzIE9LIHRvIGp1c3QgZ2V0
IGEgd2VhayByZWZlcmVuY2UuCi0gICAgUGx1Z2luKiBwbHVnaW4gPSBtX3BsdWdpbi5nZXQoKTsK
LQotICAgIG1fcGx1Z2luLT5kZXN0cm95UGx1Z2luKCk7Ci0gICAgbV9wbHVnaW4gPSBudWxscHRy
OwotCi0gICAgcGxhdGZvcm1EZXN0cm95KCk7Ci0KLSAgICAvLyBUaGlzIHdpbGwgZGVsZXRlIHRo
ZSBwbHVnLWluIGNvbnRyb2xsZXIgcHJveHkgb2JqZWN0LgotICAgIG1fY29ubmVjdGlvbi0+cmVt
b3ZlUGx1Z2luQ29udHJvbGxlclByb3h5KHRoaXMsIHBsdWdpbik7Ci19Ci0KLWJvb2wgUGx1Z2lu
Q29udHJvbGxlclByb3h5Ojp3YW50c1doZWVsRXZlbnRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9wbHVnaW4tPndhbnRzV2hlZWxFdmVudHMoKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVy
UHJveHk6OnBhaW50KCkKLXsKLSAgICBBU1NFUlQoIW1fZGlydHlSZWN0LmlzRW1wdHkoKSk7Ci0g
ICAgbV9wYWludFRpbWVyLnN0b3AoKTsKLQotICAgIGlmICghbV9iYWNraW5nU3RvcmUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEludFJlY3QgZGlydHlSZWN0ID0gbV9kaXJ0eVJlY3Q7Ci0gICAg
bV9kaXJ0eVJlY3QgPSBJbnRSZWN0KCk7Ci0KLSAgICBBU1NFUlQobV9wbHVnaW4pOwotCi0gICAg
Ly8gQ3JlYXRlIGEgZ3JhcGhpY3MgY29udGV4dC4KLSAgICBhdXRvIGdyYXBoaWNzQ29udGV4dCA9
IG1fYmFja2luZ1N0b3JlLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKLSAgICBpZiAoIWdyYXBo
aWNzQ29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAg
Ly8gRklYTUU6IFdlIHNob3VsZCByZWFsbHkgY2FsbCBhcHBseURldmljZVNjYWxlRmFjdG9yIGlu
c3RlYWQgb2Ygc2NhbGUsIGJ1dCB0aGF0IGVuZHMgdXAgY2FsbGluZyBpbnRvIFdLU0kKLSAgICAv
LyB3aGljaCB3ZSBjdXJyZW50bHkgZG9uJ3QgaGF2ZSBpbml0aWF0ZWQgaW4gdGhlIHBsdWctaW4g
cHJvY2Vzcy4KLSAgICBncmFwaGljc0NvbnRleHQtPnNjYWxlKG1fY29udGVudHNTY2FsZUZhY3Rv
cik7Ci0jZW5kaWYKLQotICAgIGlmIChtX3BsdWdpbi0+aXNUcmFuc3BhcmVudCgpKQotICAgICAg
ICBncmFwaGljc0NvbnRleHQtPmNsZWFyUmVjdChkaXJ0eVJlY3QpOwotCi0gICAgbV9wbHVnaW4t
PnBhaW50KCpncmFwaGljc0NvbnRleHQsIGRpcnR5UmVjdCk7Ci0KLSAgICBtX2Nvbm5lY3Rpb24t
PmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1Z2luUHJveHk6OlVwZGF0ZShkaXJ0eVJl
Y3QpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94
eTo6c3RhcnRQYWludFRpbWVyKCkKLXsKLSAgICAvLyBDaGVjayBpZiB3ZSBzaG91bGQgc3RhcnQg
dGhlIHRpbWVyLgotICAgIAotICAgIGlmIChtX2RpcnR5UmVjdC5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBDaGVjayBjbGlwIHJlY3QuCi0gICAgCi0gICAgaWYg
KG1fcGFpbnRUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV93
YWl0aW5nRm9yRGlkVXBkYXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTdGFydCB0aGUg
dGltZXIuCi0gICAgbV9wYWludFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotCi0gICAgbV93YWl0
aW5nRm9yRGlkVXBkYXRlID0gdHJ1ZTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6
OmludmFsaWRhdGUoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBJbnRSZWN0IGRpcnR5UmVj
dCA9IHJlY3Q7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZGlydHkgcmVjdCBpcyBub3Qg
Z3JlYXRlciB0aGFuIHRoZSBwbHVnLWluIGl0c2VsZi4KLSAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0
KEludFJlY3QoSW50UG9pbnQoKSwgbV9wbHVnaW5TaXplKSk7Ci0gICAgbV9kaXJ0eVJlY3QudW5p
dGUoZGlydHlSZWN0KTsKLQotICAgIHN0YXJ0UGFpbnRUaW1lcigpOwotfQotCi1TdHJpbmcgUGx1
Z2luQ29udHJvbGxlclByb3h5Ojp1c2VyQWdlbnQoKQotewotICAgIHJldHVybiBtX3VzZXJBZ2Vu
dDsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OmxvYWRVUkwodWludDY0X3QgcmVx
dWVzdElELCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNv
bnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJGaWVsZHMsIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgaHR0cEJvZHksIGJvb2wgYWxsb3dQb3B1cHMpCi17Ci0gICAg
bV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpblByb3h5OjpM
b2FkVVJMKHJlcXVlc3RJRCwgbWV0aG9kLCB1cmxTdHJpbmcsIHRhcmdldCwgaGVhZGVyRmllbGRz
LCBodHRwQm9keSwgYWxsb3dQb3B1cHMpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwotfQotCi12b2lk
IFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6Y29udGludWVTdHJlYW1Mb2FkKHVpbnQ2NF90IHN0cmVh
bUlEKQotewotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQ
bHVnaW5Qcm94eTo6Q29udGludWVTdHJlYW1Mb2FkKHN0cmVhbUlEKSwgbV9wbHVnaW5JbnN0YW5j
ZUlEKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OmNhbmNlbFN0cmVhbUxvYWQo
dWludDY0X3Qgc3RyZWFtSUQpCi17Ci0gICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OlBsdWdpblByb3h5OjpDYW5jZWxTdHJlYW1Mb2FkKHN0cmVhbUlEKSwgbV9w
bHVnaW5JbnN0YW5jZUlEKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OmNhbmNl
bE1hbnVhbFN0cmVhbUxvYWQoKQotewotICAgIG1fcGx1Z2luQ2FuY2VsZWRNYW51YWxTdHJlYW1M
b2FkID0gdHJ1ZTsKLQotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpQbHVnaW5Qcm94eTo6Q2FuY2VsTWFudWFsU3RyZWFtTG9hZCgpLCBtX3BsdWdpbkluc3Rh
bmNlSUQpOwotfQotCi1OUE9iamVjdCogUGx1Z2luQ29udHJvbGxlclByb3h5Ojp3aW5kb3dTY3Jp
cHROUE9iamVjdCgpCi17Ci0gICAgaWYgKCFtX3dpbmRvd05QT2JqZWN0KQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIHJldGFpbk5QT2JqZWN0KG1fd2luZG93TlBPYmplY3QpOwotICAgIHJldHVy
biBtX3dpbmRvd05QT2JqZWN0OwotfQotCi1OUE9iamVjdCogUGx1Z2luQ29udHJvbGxlclByb3h5
OjpwbHVnaW5FbGVtZW50TlBPYmplY3QoKQotewotICAgIGlmICghbV9wbHVnaW5FbGVtZW50TlBP
YmplY3QpIHsKLSAgICAgICAgdWludDY0X3QgcGx1Z2luRWxlbWVudE5QT2JqZWN0SUQgPSAwOwot
Ci0gICAgICAgIGlmICghbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpQbHVnaW5Qcm94eTo6R2V0UGx1Z2luRWxlbWVudE5QT2JqZWN0KCksIE1lc3NhZ2VzOjpQ
bHVnaW5Qcm94eTo6R2V0UGx1Z2luRWxlbWVudE5QT2JqZWN0OjpSZXBseShwbHVnaW5FbGVtZW50
TlBPYmplY3RJRCksIG1fcGx1Z2luSW5zdGFuY2VJRCkpCi0gICAgICAgICAgICByZXR1cm4gMDsK
LQotICAgICAgICBpZiAoIXBsdWdpbkVsZW1lbnROUE9iamVjdElEKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICAgICAgbV9wbHVnaW5FbGVtZW50TlBPYmplY3QgPSBtX2Nvbm5lY3Rpb24t
Pm5wUmVtb3RlT2JqZWN0TWFwKCktPmNyZWF0ZU5QT2JqZWN0UHJveHkocGx1Z2luRWxlbWVudE5Q
T2JqZWN0SUQsIG1fcGx1Z2luLmdldCgpKTsKLSAgICAgICAgQVNTRVJUKG1fcGx1Z2luRWxlbWVu
dE5QT2JqZWN0KTsKLSAgICB9Ci0KLSAgICByZXRhaW5OUE9iamVjdChtX3BsdWdpbkVsZW1lbnRO
UE9iamVjdCk7Ci0gICAgcmV0dXJuIG1fcGx1Z2luRWxlbWVudE5QT2JqZWN0OwotfQotCi1ib29s
IFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6ZXZhbHVhdGUoTlBPYmplY3QqIG5wT2JqZWN0LCBjb25z
dCBTdHJpbmcmIHNjcmlwdFN0cmluZywgTlBWYXJpYW50KiByZXN1bHQsIGJvb2wgYWxsb3dQb3B1
cHMpCi17Ci0gICAgUGx1Z2luRGVzdHJ1Y3Rpb25Qcm90ZWN0b3IgcHJvdGVjdG9yKHRoaXMpOwot
Ci0gICAgTlBWYXJpYW50IG5wT2JqZWN0QXNOUFZhcmlhbnQ7Ci0gICAgT0JKRUNUX1RPX05QVkFS
SUFOVChucE9iamVjdCwgbnBPYmplY3RBc05QVmFyaWFudCk7Ci0KLSAgICAvLyBTZW5kIHRoZSBO
UE9iamVjdCBvdmVyIGFzIGFuIE5QVmFyaWFudERhdGEuCi0gICAgTlBWYXJpYW50RGF0YSBucE9i
amVjdEFzTlBWYXJpYW50RGF0YSA9IG1fY29ubmVjdGlvbi0+bnBSZW1vdGVPYmplY3RNYXAoKS0+
bnBWYXJpYW50VG9OUFZhcmlhbnREYXRhKG5wT2JqZWN0QXNOUFZhcmlhbnQsIG1fcGx1Z2luLmdl
dCgpKTsKLQotICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAgICBOUFZhcmlhbnREYXRh
IHJlc3VsdERhdGE7Ci0KLSAgICBpZiAoIW1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5k
U3luYyhNZXNzYWdlczo6UGx1Z2luUHJveHk6OkV2YWx1YXRlKG5wT2JqZWN0QXNOUFZhcmlhbnRE
YXRhLCBzY3JpcHRTdHJpbmcsIGFsbG93UG9wdXBzKSwgTWVzc2FnZXM6OlBsdWdpblByb3h5OjpF
dmFsdWF0ZTo6UmVwbHkocmV0dXJuVmFsdWUsIHJlc3VsdERhdGEpLCBtX3BsdWdpbkluc3RhbmNl
SUQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXJldHVyblZhbHVlKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAqcmVzdWx0ID0gbV9jb25uZWN0aW9uLT5ucFJlbW90
ZU9iamVjdE1hcCgpLT5ucFZhcmlhbnREYXRhVG9OUFZhcmlhbnQocmVzdWx0RGF0YSwgbV9wbHVn
aW4uZ2V0KCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQ
cm94eTo6c2V0UGx1Z2luSXNQbGF5aW5nQXVkaW8oYm9vbCBwbHVnaW5Jc1BsYXlpbmdBdWRpbykK
LXsKLSAgICBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1Z2lu
UHJveHk6OlNldFBsdWdpbklzUGxheWluZ0F1ZGlvKHBsdWdpbklzUGxheWluZ0F1ZGlvKSwgbV9w
bHVnaW5JbnN0YW5jZUlEKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnNldFN0
YXR1c2JhclRleHQoY29uc3QgU3RyaW5nJiBzdGF0dXNiYXJUZXh0KQotewotICAgIG1fY29ubmVj
dGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Qcm94eTo6U2V0U3RhdHVz
YmFyVGV4dChzdGF0dXNiYXJUZXh0KSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLX0KLQotYm9vbCBQ
bHVnaW5Db250cm9sbGVyUHJveHk6OmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKQot
ewotICAgIHJldHVybiBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQ7Ci19Ci0KLXZv
aWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpwbHVnaW5Qcm9jZXNzQ3Jhc2hlZCgpCi17Ci0gICAg
Ly8gVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGZyb20gaGVyZS4KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OmRpZEluaXRpYWxp
emVQbHVnaW4oKQotewotICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIHRoZSBw
bHVnaW4gaW4gdGhlIHdlYiBwcm9jZXNzLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQot
Ci12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6ZGlkRmFpbFRvSW5pdGlhbGl6ZVBsdWdpbigp
Ci17Ci0gICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gdGhlIHBsdWdpbiBpbiB0
aGUgd2ViIHByb2Nlc3MuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLWZsb2F0IFBs
dWdpbkNvbnRyb2xsZXJQcm94eTo6Y29udGVudHNTY2FsZUZhY3RvcigpCi17Ci0gICAgcmV0dXJu
IG1fY29udGVudHNTY2FsZUZhY3RvcjsKLX0KLQotU3RyaW5nIFBsdWdpbkNvbnRyb2xsZXJQcm94
eTo6cHJveGllc0ZvclVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKLXsKLSAgICBTdHJpbmcg
cHJveHlTdHJpbmc7Ci0KLSAgICBpZiAoIW1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5k
U3luYyhNZXNzYWdlczo6UGx1Z2luUHJveHk6OlByb3hpZXNGb3JVUkwodXJsU3RyaW5nKSwgTWVz
c2FnZXM6OlBsdWdpblByb3h5OjpQcm94aWVzRm9yVVJMOjpSZXBseShwcm94eVN0cmluZyksIG1f
cGx1Z2luSW5zdGFuY2VJRCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIHJldHVy
biBwcm94eVN0cmluZzsKLX0KLQotU3RyaW5nIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6Y29va2ll
c0ZvclVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKLXsKLSAgICBTdHJpbmcgY29va2llU3Ry
aW5nOwotCi0gICAgaWYgKCFtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVz
c2FnZXM6OlBsdWdpblByb3h5OjpDb29raWVzRm9yVVJMKHVybFN0cmluZyksIE1lc3NhZ2VzOjpQ
bHVnaW5Qcm94eTo6Q29va2llc0ZvclVSTDo6UmVwbHkoY29va2llU3RyaW5nKSwgbV9wbHVnaW5J
bnN0YW5jZUlEKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIGNvb2tp
ZVN0cmluZzsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnNldENvb2tpZXNGb3JV
UkwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKQot
ewotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Q
cm94eTo6U2V0Q29va2llc0ZvclVSTCh1cmxTdHJpbmcsIGNvb2tpZVN0cmluZyksIG1fcGx1Z2lu
SW5zdGFuY2VJRCk7Ci19Ci0KLWJvb2wgUGx1Z2luQ29udHJvbGxlclByb3h5Ojppc1ByaXZhdGVC
cm93c2luZ0VuYWJsZWQoKQotewotICAgIHJldHVybiBtX2lzUHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZDsKLX0KLQotYm9vbCBQbHVnaW5Db250cm9sbGVyUHJveHk6OmdldEF1dGhlbnRpY2F0aW9uSW5m
byhjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSwgU3RyaW5nJiB1c2VybmFt
ZSwgU3RyaW5nJiBwYXNzd29yZCkKLXsKLSAgICBib29sIHJldHVyblZhbHVlOwotICAgIGlmICgh
bV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Qcm94
eTo6R2V0QXV0aGVudGljYXRpb25JbmZvKHByb3RlY3Rpb25TcGFjZSksIE1lc3NhZ2VzOjpQbHVn
aW5Qcm94eTo6R2V0QXV0aGVudGljYXRpb25JbmZvOjpSZXBseShyZXR1cm5WYWx1ZSwgdXNlcm5h
bWUsIHBhc3N3b3JkKSwgbV9wbHVnaW5JbnN0YW5jZUlEKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIHJldHVyblZhbHVlOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQ
cm94eTo6cHJvdGVjdFBsdWdpbkZyb21EZXN0cnVjdGlvbigpCi17Ci0gICAgbV9wbHVnaW5EZXN0
cnVjdGlvblByb3RlY3RDb3VudCsrOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6
dW5wcm90ZWN0UGx1Z2luRnJvbURlc3RydWN0aW9uKCkKLXsKLSAgICBBU1NFUlQobV9wbHVnaW5E
ZXN0cnVjdGlvblByb3RlY3RDb3VudCk7Ci0KLSAgICBtX3BsdWdpbkRlc3RydWN0aW9uUHJvdGVj
dENvdW50LS07Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpmcmFtZURpZEZpbmlz
aExvYWRpbmcodWludDY0X3QgcmVxdWVzdElEKQotewotICAgIG1fcGx1Z2luLT5mcmFtZURpZEZp
bmlzaExvYWRpbmcocmVxdWVzdElEKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6
OmZyYW1lRGlkRmFpbCh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgd2FzQ2FuY2VsbGVkKQotewot
ICAgIG1fcGx1Z2luLT5mcmFtZURpZEZhaWwocmVxdWVzdElELCB3YXNDYW5jZWxsZWQpOwotfQot
Ci12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6Z2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgSW50
U2l6ZSYgcGx1Z2luU2l6ZSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybSwgZmxvYXQgY29udGVudHNTY2FsZUZh
Y3RvciwgY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGJhY2tpbmdTdG9yZUhhbmRsZSkK
LXsKLSAgICBBU1NFUlQobV9wbHVnaW4pOwotCi0gICAgbV9wbHVnaW5TaXplID0gcGx1Z2luU2l6
ZTsKLQotICAgIGlmIChjb250ZW50c1NjYWxlRmFjdG9yICE9IG1fY29udGVudHNTY2FsZUZhY3Rv
cikgewotICAgICAgICBtX2NvbnRlbnRzU2NhbGVGYWN0b3IgPSBjb250ZW50c1NjYWxlRmFjdG9y
OwotICAgICAgICBtX3BsdWdpbi0+Y29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQobV9jb250ZW50
c1NjYWxlRmFjdG9yKTsKLSAgICB9Ci0KLSAgICBwbGF0Zm9ybUdlb21ldHJ5RGlkQ2hhbmdlKCk7
Ci0KLSAgICBpZiAoIWJhY2tpbmdTdG9yZUhhbmRsZS5pc051bGwoKSkgewotICAgICAgICAvLyBD
cmVhdGUgYSBuZXcgYmFja2luZyBzdG9yZS4KLSAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBTaGFy
ZWFibGVCaXRtYXA6OmNyZWF0ZShiYWNraW5nU3RvcmVIYW5kbGUpOwotICAgIH0KLQotICAgIG1f
cGx1Z2luLT5nZW9tZXRyeURpZENoYW5nZShwbHVnaW5TaXplLCBjbGlwUmVjdCwgcGx1Z2luVG9S
b290Vmlld1RyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5Ojp2aXNp
YmlsaXR5RGlkQ2hhbmdlKGJvb2wgaXNWaXNpYmxlKQotewotICAgIG1faXNWaXNpYmxlID0gaXNW
aXNpYmxlOwotICAgIAotICAgIEFTU0VSVChtX3BsdWdpbik7Ci0gICAgbV9wbHVnaW4tPnZpc2li
aWxpdHlEaWRDaGFuZ2UoaXNWaXNpYmxlKTsKLQotICAgIHVwZGF0ZVZpc2liaWxpdHlBY3Rpdml0
eSgpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6d2luZG93Rm9jdXNDaGFuZ2Vk
KGJvb2wgaGFzRm9jdXMpCi17Ci0gICAgQVNTRVJUKG1fcGx1Z2luKTsKLSAgICBtX3BsdWdpbi0+
d2luZG93Rm9jdXNDaGFuZ2VkKGhhc0ZvY3VzKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVy
UHJveHk6OndpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKGJvb2wgaXNWaXNpYmxlKQotewotICAgIG1f
aXNXaW5kb3dWaXNpYmxlID0gaXNWaXNpYmxlOwotCi0gICAgQVNTRVJUKG1fcGx1Z2luKTsKLSAg
ICBtX3BsdWdpbi0+d2luZG93VmlzaWJpbGl0eUNoYW5nZWQoaXNWaXNpYmxlKTsKLQotICAgIHVw
ZGF0ZVZpc2liaWxpdHlBY3Rpdml0eSgpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94
eTo6dXBkYXRlVmlzaWJpbGl0eUFjdGl2aXR5KCkKLXsKLSAgICBpZiAobV9pc1Zpc2libGUgJiYg
bV9pc1dpbmRvd1Zpc2libGUpCi0gICAgICAgIG1fdmlzaWJsaXR5QWN0aXZpdHkuc3RhcnQoKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fdmlzaWJsaXR5QWN0aXZpdHkuc3RvcCgpOwotfQotCi12b2lk
IFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6ZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90IHJl
cXVlc3RJRCwgY29uc3QgU3RyaW5nJiByZXN1bHQpCi17Ci0gICAgbV9wbHVnaW4tPmRpZEV2YWx1
YXRlSmF2YVNjcmlwdChyZXF1ZXN0SUQsIHJlc3VsdCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJv
bGxlclByb3h5OjpzdHJlYW1XaWxsU2VuZFJlcXVlc3QodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0
IFN0cmluZyYgcmVxdWVzdFVSTFN0cmluZywgY29uc3QgU3RyaW5nJiByZWRpcmVjdFJlc3BvbnNl
VVJMU3RyaW5nLCB1aW50MzJfdCByZWRpcmVjdFJlc3BvbnNlU3RhdHVzQ29kZSkKLXsKLSAgICBt
X3BsdWdpbi0+c3RyZWFtV2lsbFNlbmRSZXF1ZXN0KHN0cmVhbUlELCBVUkwoeyB9LCByZXF1ZXN0
VVJMU3RyaW5nKSwgVVJMKHsgfSwgcmVkaXJlY3RSZXNwb25zZVVSTFN0cmluZyksIHJlZGlyZWN0
UmVzcG9uc2VTdGF0dXNDb2RlKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnN0
cmVhbURpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgU3RyaW5nJiBy
ZXNwb25zZVVSTFN0cmluZywgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9k
aWZpZWRUaW1lLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMp
Ci17Ci0gICAgbV9wbHVnaW4tPnN0cmVhbURpZFJlY2VpdmVSZXNwb25zZShzdHJlYW1JRCwgVVJM
KHsgfSwgcmVzcG9uc2VVUkxTdHJpbmcpLCBzdHJlYW1MZW5ndGgsIGxhc3RNb2RpZmllZFRpbWUs
IG1pbWVUeXBlLCBoZWFkZXJzLCBTdHJpbmcoKSk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxl
clByb3h5OjpzdHJlYW1EaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgSVBD
OjpEYXRhUmVmZXJlbmNlJiBkYXRhKQotewotICAgIG1fcGx1Z2luLT5zdHJlYW1EaWRSZWNlaXZl
RGF0YShzdHJlYW1JRCwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKLX0KLQotdm9pZCBQbHVn
aW5Db250cm9sbGVyUHJveHk6OnN0cmVhbURpZEZpbmlzaExvYWRpbmcodWludDY0X3Qgc3RyZWFt
SUQpCi17Ci0gICAgbV9wbHVnaW4tPnN0cmVhbURpZEZpbmlzaExvYWRpbmcoc3RyZWFtSUQpOwot
fQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6c3RyZWFtRGlkRmFpbCh1aW50NjRfdCBz
dHJlYW1JRCwgYm9vbCB3YXNDYW5jZWxsZWQpCi17Ci0gICAgbV9wbHVnaW4tPnN0cmVhbURpZEZh
aWwoc3RyZWFtSUQsIHdhc0NhbmNlbGxlZCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclBy
b3h5OjptYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgU3RyaW5nJiByZXNwb25z
ZVVSTFN0cmluZywgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRU
aW1lLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMpCi17Ci0g
ICAgaWYgKG1fcGx1Z2luQ2FuY2VsZWRNYW51YWxTdHJlYW1Mb2FkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3BsdWdpbi0+bWFudWFsU3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKFVSTCh7IH0s
IHJlc3BvbnNlVVJMU3RyaW5nKSwgc3RyZWFtTGVuZ3RoLCBsYXN0TW9kaWZpZWRUaW1lLCBtaW1l
VHlwZSwgaGVhZGVycywgU3RyaW5nKCkpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94
eTo6bWFudWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBk
YXRhKQotewotICAgIGlmIChtX3BsdWdpbkNhbmNlbGVkTWFudWFsU3RyZWFtTG9hZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9wbHVnaW4tPm1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKGRh
dGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5
OjptYW51YWxTdHJlYW1EaWRGaW5pc2hMb2FkaW5nKCkKLXsKLSAgICBpZiAobV9wbHVnaW5DYW5j
ZWxlZE1hbnVhbFN0cmVhbUxvYWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX3BsdWdp
bi0+bWFudWFsU3RyZWFtRGlkRmluaXNoTG9hZGluZygpOwotfQotCi12b2lkIFBsdWdpbkNvbnRy
b2xsZXJQcm94eTo6bWFudWFsU3RyZWFtRGlkRmFpbChib29sIHdhc0NhbmNlbGxlZCkKLXsKLSAg
ICBpZiAobV9wbHVnaW5DYW5jZWxlZE1hbnVhbFN0cmVhbUxvYWQpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBtX3BsdWdpbi0+bWFudWFsU3RyZWFtRGlkRmFpbCh3YXNDYW5jZWxsZWQpOwot
fQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6aGFuZGxlTW91c2VFdmVudChjb25zdCBX
ZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQotewotICAgIG1fcGx1Z2luLT5oYW5kbGVNb3VzZUV2
ZW50KG1vdXNlRXZlbnQpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6aGFuZGxl
V2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGNvbXBsZXRpb25I
YW5kbGVyKG1fcGx1Z2luLT5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpKTsKLX0KLQotdm9p
ZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OmhhbmRsZU1vdXNlRW50ZXJFdmVudChjb25zdCBXZWJN
b3VzZUV2ZW50JiBtb3VzZUVudGVyRXZlbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgY29tcGxldGlvbkhhbmRsZXIobV9wbHVnaW4t
PmhhbmRsZU1vdXNlRW50ZXJFdmVudChtb3VzZUVudGVyRXZlbnQpKTsKLX0KLQotdm9pZCBQbHVn
aW5Db250cm9sbGVyUHJveHk6OmhhbmRsZU1vdXNlTGVhdmVFdmVudChjb25zdCBXZWJNb3VzZUV2
ZW50JiBtb3VzZUxlYXZlRXZlbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCi17Ci0gICAgY29tcGxldGlvbkhhbmRsZXIobV9wbHVnaW4tPmhhbmRs
ZU1vdXNlTGVhdmVFdmVudChtb3VzZUxlYXZlRXZlbnQpKTsKLX0KLQotdm9pZCBQbHVnaW5Db250
cm9sbGVyUHJveHk6OmhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYg
a2V5Ym9hcmRFdmVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKLXsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihtX3BsdWdpbi0+aGFuZGxlS2V5Ym9h
cmRFdmVudChrZXlib2FyZEV2ZW50KSk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5
OjpoYW5kbGVFZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBT
dHJpbmcmIGFyZ3VtZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQotewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcGx1Z2luLT5oYW5kbGVFZGl0
aW5nQ29tbWFuZChjb21tYW5kTmFtZSwgYXJndW1lbnQpKTsKLX0KLSAgICAKLXZvaWQgUGx1Z2lu
Q29udHJvbGxlclByb3h5Ojppc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNv
bW1hbmROYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQotewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcGx1Z2luLT5pc0VkaXRpbmdDb21tYW5k
RW5hYmxlZChjb21tYW5kTmFtZSkpOwotfQotICAgIAotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJv
eHk6OmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihtX3BsdWdpbi0+
aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJv
eHk6OnJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgY29tcGxldGlvbkhhbmRsZXIobV9wbHVn
aW4tPnJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKCkpOwotfQotCi12b2lkIFBsdWdpbkNvbnRy
b2xsZXJQcm94eTo6cGFpbnRFbnRpcmVQbHVnaW4oQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmIChtX3BsdWdpblNpemUuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoKTsKLQotICAgIG1fZGlydHlSZWN0ID0g
SW50UmVjdChJbnRQb2ludCgpLCBtX3BsdWdpblNpemUpOwotICAgIHBhaW50KCk7Ci0gICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnN1cHBv
cnRzU25hcHNob3R0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCi17Ci0gICAgY29tcGxldGlvbkhhbmRsZXIobV9wbHVnaW4tPnN1cHBvcnRzU25h
cHNob3R0aW5nKCkpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6c25hcHNob3Qo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYmKT4gY29tcGxl
dGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKG1fcGx1Z2luKTsKLSAgICBSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBiaXRtYXAgPSBtX3BsdWdpbi0+c25hcHNob3QoKTsKLSAgICBpZiAoIWJpdG1h
cCkKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0KLSAgICBTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSBiYWNraW5nU3RvcmVIYW5kbGU7Ci0gICAgYml0bWFwLT5jcmVhdGVI
YW5kbGUoYmFja2luZ1N0b3JlSGFuZGxlKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3Zl
KGJhY2tpbmdTdG9yZUhhbmRsZSkpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6
c2V0Rm9jdXMoYm9vbCBoYXNGb2N1cykKLXsKLSAgICBtX3BsdWdpbi0+c2V0Rm9jdXMoaGFzRm9j
dXMpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6ZGlkVXBkYXRlKCkKLXsKLSAg
ICBtX3dhaXRpbmdGb3JEaWRVcGRhdGUgPSBmYWxzZTsKLSAgICBzdGFydFBhaW50VGltZXIoKTsK
LX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OmdldFBsdWdpblNjcmlwdGFibGVOUE9i
amVjdChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90KT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKLXsKLSAgICBOUE9iamVjdCogcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0ID0gbV9wbHVnaW4t
PnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpOwotICAgIGlmICghcGx1Z2luU2NyaXB0YWJsZU5Q
T2JqZWN0KQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoMCk7Ci0gICAgCi0gICAg
dWludDY0X3QgcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0SUQgPSBtX2Nvbm5lY3Rpb24tPm5wUmVt
b3RlT2JqZWN0TWFwKCktPnJlZ2lzdGVyTlBPYmplY3QocGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0
LCBtX3BsdWdpbi5nZXQoKSk7Ci0gICAgcmVsZWFzZU5QT2JqZWN0KHBsdWdpblNjcmlwdGFibGVO
UE9iamVjdCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIocGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0
SUQpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6c3RvcmFnZUJsb2NraW5nU3Rh
dGVDaGFuZ2VkKGJvb2wgaXNTdG9yYWdlQmxvY2tpbmdFbmFibGVkKQotewotICAgIGlmIChtX3N0
b3JhZ2VCbG9ja2luZ0VuYWJsZWQgIT0gaXNTdG9yYWdlQmxvY2tpbmdFbmFibGVkKSB7Ci0gICAg
ICAgIG1fc3RvcmFnZUJsb2NraW5nRW5hYmxlZCA9IGlzU3RvcmFnZUJsb2NraW5nRW5hYmxlZDsK
LSAgICAgICAgbV9wbHVnaW4tPnN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZChtX3N0b3JhZ2VC
bG9ja2luZ0VuYWJsZWQpOwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6
OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZChib29sIGlzUHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZCkKLXsKLSAgICBtX2lzUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCA9IGlzUHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZDsKLQotICAgIG1fcGx1Z2luLT5wcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoaXNQ
cml2YXRlQnJvd3NpbmdFbmFibGVkKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6
Om11dGVkU3RhdGVDaGFuZ2VkKGJvb2wgaXNNdXRlZCkKLXsKLSAgICBpZiAobV9pc011dGVkID09
IGlzTXV0ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX2lzTXV0ZWQgPSBpc011dGVk
OwotICAgIG1fcGx1Z2luLT5tdXRlZFN0YXRlQ2hhbmdlZChpc011dGVkKTsKLX0KLQotdm9pZCBQ
bHVnaW5Db250cm9sbGVyUHJveHk6OmdldEZvcm1WYWx1ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wsIFN0cmluZyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBTdHJpbmcgZm9y
bVZhbHVlOwotICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBtX3BsdWdpbi0+Z2V0Rm9ybVZhbHVlKGZv
cm1WYWx1ZSk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUsIFdURk1vdmUoZm9y
bVZhbHVlKSk7Ci19Ci0KLSNpZiBQTEFURk9STShYMTEpCi11aW50NjRfdCBQbHVnaW5Db250cm9s
bGVyUHJveHk6OmNyZWF0ZVBsdWdpbkNvbnRhaW5lcigpCi17Ci0gICAgdWludDY0X3Qgd2luZG93
SUQgPSAwOwotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdl
czo6UGx1Z2luUHJveHk6OkNyZWF0ZVBsdWdpbkNvbnRhaW5lcigpLCBNZXNzYWdlczo6UGx1Z2lu
UHJveHk6OkNyZWF0ZVBsdWdpbkNvbnRhaW5lcjo6UmVwbHkod2luZG93SUQpLCBtX3BsdWdpbklu
c3RhbmNlSUQpOwotICAgIHJldHVybiB3aW5kb3dJRDsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9s
bGVyUHJveHk6OndpbmRvd2VkUGx1Z2luR2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgSW50UmVjdCYg
ZnJhbWVSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgdWludDY0X3Qgd2luZG93SUQpCi17
Ci0gICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpblBy
b3h5OjpXaW5kb3dlZFBsdWdpbkdlb21ldHJ5RGlkQ2hhbmdlKGZyYW1lUmVjdCwgY2xpcFJlY3Qs
IHdpbmRvd0lEKSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9s
bGVyUHJveHk6OndpbmRvd2VkUGx1Z2luVmlzaWJpbGl0eURpZENoYW5nZShib29sIGlzVmlzaWJs
ZSwgdWludDY0X3Qgd2luZG93SUQpCi17Ci0gICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OlBsdWdpblByb3h5OjpXaW5kb3dlZFBsdWdpblZpc2liaWxpdHlEaWRD
aGFuZ2UoaXNWaXNpYmxlLCB3aW5kb3dJRCksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0jZW5k
aWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9QbHVn
aW5Db250cm9sbGVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9QbHVnaW5D
b250cm9sbGVyUHJveHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NmNWUxZjk3
Yjg3YTRiZDkyYTM2NmE0Y2M4OTAyNTE3MzQwMThiNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvUGx1Z2lu
Q29udHJvbGxlclByb3h5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKLQotI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgi
Ci0jaW5jbHVkZSAiUGx1Z2luLmgiCi0jaW5jbHVkZSAiUGx1Z2luQ29udHJvbGxlci5oIgotI2lu
Y2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NDb25uZWN0aW9u
TWVzc2FnZXNSZXBsaWVzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvVXNlckFjdGl2aXR5Lmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LWNsYXNzIExheWVySG9zdGluZ0NvbnRleHQ7Ci1jbGFzcyBTaGFyZWFibGVCaXRtYXA7Ci1jbGFz
cyBXZWJQcm9jZXNzQ29ubmVjdGlvbjsKLXN0cnVjdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnM7
Ci0KLWNsYXNzIFBsdWdpbkNvbnRyb2xsZXJQcm94eSA6IHB1YmxpYyBQbHVnaW5Db250cm9sbGVy
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShQbHVnaW5Db250cm9sbGVyUHJveHkpOwotCi1wdWJsaWM6Ci0gICAgUGx1Z2luQ29udHJvbGxl
clByb3h5KFdlYlByb2Nlc3NDb25uZWN0aW9uKiwgY29uc3QgUGx1Z2luQ3JlYXRpb25QYXJhbWV0
ZXJzJik7Ci0gICAgflBsdWdpbkNvbnRyb2xsZXJQcm94eSgpOwotCi0gICAgdWludDY0X3QgcGx1
Z2luSW5zdGFuY2VJRCgpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luSW5zdGFuY2VJRDsgfQotCi0g
ICAgYm9vbCBpbml0aWFsaXplKGNvbnN0IFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyYpOwotICAg
IHZvaWQgZGVzdHJveSgpOwotCi0gICAgdm9pZCBkaWRSZWNlaXZlUGx1Z2luQ29udHJvbGxlclBy
b3h5TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKLSAgICBib29sIGRp
ZFJlY2VpdmVTeW5jUGx1Z2luQ29udHJvbGxlclByb3h5TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImLCBVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYpOwotCi0gICAgYm9vbCB3
YW50c1doZWVsRXZlbnRzKCkgY29uc3Q7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICB1aW50
MzJfdCByZW1vdGVMYXllckNsaWVudElEKCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIFBsdWdpbkNv
bnRyb2xsZXIqIGFzUGx1Z2luQ29udHJvbGxlcigpIHsgcmV0dXJuIHRoaXM7IH0KLQotICAgIGJv
b2wgaXNJbml0aWFsaXppbmcoKSBjb25zdCB7IHJldHVybiBtX2lzSW5pdGlhbGl6aW5nOyB9Ci0g
ICAgCi0gICAgdm9pZCBzZXRJbml0aWFsaXphdGlvblJlcGx5KE1lc3NhZ2VzOjpXZWJQcm9jZXNz
Q29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luRGVsYXllZFJlcGx5JiYpOwotICAgIE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luRGVsYXllZFJlcGx5IHRha2VJbml0aWFs
aXphdGlvblJlcGx5KCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBzdGFydFBhaW50VGltZXIoKTsK
LSAgICB2b2lkIHBhaW50KCk7Ci0KLSAgICAvLyBQbHVnaW5Db250cm9sbGVyCi0gICAgdm9pZCBp
bnZhbGlkYXRlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKLSAgICBTdHJpbmcg
dXNlckFnZW50KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBsb2FkVVJMKHVpbnQ2NF90IHJlcXVlc3RJ
RCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHRhcmdldCwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYgaGVhZGVyRmllbGRz
LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGh0dHBCb2R5LCBib29sIGFsbG93UG9wdXBzKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGNvbnRpbnVlU3RyZWFtTG9hZCh1aW50NjRfdCBzdHJlYW1JRCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBjYW5jZWxTdHJlYW1Mb2FkKHVpbnQ2NF90IHN0cmVhbUlEKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGNhbmNlbE1hbnVhbFN0cmVhbUxvYWQoKSBvdmVycmlkZTsKLSAgICBO
UE9iamVjdCogd2luZG93U2NyaXB0TlBPYmplY3QoKSBvdmVycmlkZTsKLSAgICBOUE9iamVjdCog
cGx1Z2luRWxlbWVudE5QT2JqZWN0KCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBldmFsdWF0ZShOUE9i
amVjdCosIGNvbnN0IFN0cmluZyYgc2NyaXB0U3RyaW5nLCBOUFZhcmlhbnQqIHJlc3VsdCwgYm9v
bCBhbGxvd1BvcHVwcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRQbHVnaW5Jc1BsYXlpbmdBdWRp
byhib29sKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFN0YXR1c2JhclRleHQoY29uc3QgU3RyaW5n
Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBwbHVnaW5Qcm9jZXNzQ3Jhc2hlZCgpIG92ZXJyaWRlOwotICAg
IHZvaWQgZGlkSW5pdGlhbGl6ZVBsdWdpbigpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkRmFpbFRv
SW5pdGlhbGl6ZVBsdWdpbigpIG92ZXJyaWRlOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAg
dm9pZCBwbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwotICAg
IHZvaWQgc2V0Q29tcGxleFRleHRJbnB1dFN0YXRlKFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0
ZSkgb3ZlcnJpZGU7Ci0gICAgY29uc3QgV1RGOjpNYWNoU2VuZFJpZ2h0JiBjb21wb3NpdGluZ1Jl
bmRlclNlcnZlclBvcnQoKSBvdmVycmlkZTsKLSNlbmRpZgotCi0gICAgZmxvYXQgY29udGVudHNT
Y2FsZUZhY3RvcigpIG92ZXJyaWRlOwotICAgIFN0cmluZyBwcm94aWVzRm9yVVJMKGNvbnN0IFN0
cmluZyYpIG92ZXJyaWRlOwotICAgIFN0cmluZyBjb29raWVzRm9yVVJMKGNvbnN0IFN0cmluZyYp
IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Q29va2llc0ZvclVSTChjb25zdCBTdHJpbmcmIHVybFN0
cmluZywgY29uc3QgU3RyaW5nJiBjb29raWVTdHJpbmcpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNQ
cml2YXRlQnJvd3NpbmdFbmFibGVkKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc011dGVkKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc011dGVkOyB9Ci0gICAgYm9vbCBnZXRBdXRoZW50aWNh
dGlvbkluZm8oY29uc3QgV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlJiwgU3RyaW5nJiB1c2VybmFt
ZSwgU3RyaW5nJiBwYXNzd29yZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwcm90ZWN0UGx1Z2luRnJv
bURlc3RydWN0aW9uKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bnByb3RlY3RQbHVnaW5Gcm9tRGVz
dHJ1Y3Rpb24oKSBvdmVycmlkZTsKLSNpZiBQTEFURk9STShYMTEpCi0gICAgdWludDY0X3QgY3Jl
YXRlUGx1Z2luQ29udGFpbmVyKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aW5kb3dlZFBsdWdpbkdl
b21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZyYW1lUmVjdCwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QsIHVpbnQ2NF90IHdpbmRvd0lEKSBvdmVycmlkZTsK
LSAgICB2b2lkIHdpbmRvd2VkUGx1Z2luVmlzaWJpbGl0eURpZENoYW5nZShib29sIGlzVmlzaWJs
ZSwgdWludDY0X3Qgd2luZG93SUQpIG92ZXJyaWRlOwotI2VuZGlmCi0gICAgCi0gICAgLy8gTWVz
c2FnZSBoYW5kbGVycy4KLSAgICB2b2lkIGZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCBy
ZXF1ZXN0SUQpOwotICAgIHZvaWQgZnJhbWVEaWRGYWlsKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9v
bCB3YXNDYW5jZWxsZWQpOwotICAgIHZvaWQgZ2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3Qs
IGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9y
bSwgZmxvYXQgY29udGVudHNTY2FsZUZhY3RvciwgY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5k
bGUmIGJhY2tpbmdTdG9yZUhhbmRsZSk7Ci0gICAgdm9pZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKGJv
b2wgaXNWaXNpYmxlKTsKLSAgICB2b2lkIGRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCBy
ZXF1ZXN0SUQsIGNvbnN0IFN0cmluZyYgcmVzdWx0KTsKLSAgICB2b2lkIHN0cmVhbVdpbGxTZW5k
UmVxdWVzdCh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgU3RyaW5nJiByZXF1ZXN0VVJMU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHJlZGlyZWN0UmVzcG9uc2VVUkxTdHJpbmcsIHVpbnQzMl90IHJlZGly
ZWN0UmVzcG9uc2VTdGF0dXNDb2RlKTsKLSAgICB2b2lkIHN0cmVhbURpZFJlY2VpdmVSZXNwb25z
ZSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgU3RyaW5nJiByZXNwb25zZVVSTFN0cmluZywgdWlu
dDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMpOwotICAgIHZvaWQgc3RyZWFtRGlk
UmVjZWl2ZURhdGEodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYg
ZGF0YSk7Ci0gICAgdm9pZCBzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlE
KTsKLSAgICB2b2lkIHN0cmVhbURpZEZhaWwodWludDY0X3Qgc3RyZWFtSUQsIGJvb2wgd2FzQ2Fu
Y2VsbGVkKTsKLSAgICB2b2lkIG1hbnVhbFN0cmVhbURpZFJlY2VpdmVSZXNwb25zZShjb25zdCBT
dHJpbmcmIHJlc3BvbnNlVVJMU3RyaW5nLCB1aW50MzJfdCBzdHJlYW1MZW5ndGgsIHVpbnQzMl90
IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYg
aGVhZGVycyk7Ci0gICAgdm9pZCBtYW51YWxTdHJlYW1EaWRSZWNlaXZlRGF0YShjb25zdCBJUEM6
OkRhdGFSZWZlcmVuY2UmIGRhdGEpOwotICAgIHZvaWQgbWFudWFsU3RyZWFtRGlkRmluaXNoTG9h
ZGluZygpOwotICAgIHZvaWQgbWFudWFsU3RyZWFtRGlkRmFpbChib29sIHdhc0NhbmNlbGxlZCk7
Ci0gICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKLSAgICB2
b2lkIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCBoYW5kbGVkKT4mJik7Ci0gICAgdm9pZCBoYW5kbGVNb3VzZUVudGVyRXZl
bnQoY29uc3QgV2ViTW91c2VFdmVudCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBoYW5k
bGVkKT4mJik7Ci0gICAgdm9pZCBoYW5kbGVNb3VzZUxlYXZlRXZlbnQoY29uc3QgV2ViTW91c2VF
dmVudCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBoYW5kbGVkKT4mJik7Ci0gICAgdm9p
ZCBoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wgaGFuZGxlZCk+JiYpOwotICAgIHZvaWQgaGFuZGxlRWRpdGluZ0Nv
bW1hbmQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sIGhhbmRsZWQpPiYmKTsKLSAgICB2b2lkIGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNv
bnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwotICAgIHZvaWQg
aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsK
LSAgICB2b2lkIHJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYpOwotICAgIHZvaWQgcGFpbnRFbnRpcmVQbHVnaW4oQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHN1cHBvcnRzU25hcHNob3R0aW5nKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYpOwotICAgIHZvaWQgc25hcHNob3QoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYmKT4pOwotICAgIHZvaWQgc2V0Rm9jdXMo
Ym9vbCk7Ci0gICAgdm9pZCBkaWRVcGRhdGUoKTsKLSAgICB2b2lkIGdldFBsdWdpblNjcmlwdGFi
bGVOUE9iamVjdChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90IHBsdWdpblNjcmlwdGFi
bGVOUE9iamVjdElEKT4mJik7Ci0KLSAgICB2b2lkIHdpbmRvd0ZvY3VzQ2hhbmdlZChib29sKTsK
LSAgICB2b2lkIHdpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKGJvb2wpOwotICAgIHZvaWQgdXBkYXRl
VmlzaWJpbGl0eUFjdGl2aXR5KCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICB2b2lkIHdp
bmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0Zy
YW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1l
SW5XaW5kb3dDb29yZGluYXRlcyk7Ci0gICAgdm9pZCBzZW5kQ29tcGxleFRleHRJbnB1dChjb25z
dCBTdHJpbmcmIHRleHRJbnB1dCk7Ci0gICAgdm9pZCBzZXRMYXllckhvc3RpbmdNb2RlKHVpbnQz
Ml90KTsKLQotICAgIHZvaWQgdXBkYXRlTGF5ZXJIb3N0aW5nQ29udGV4dChMYXllckhvc3RpbmdN
b2RlKTsKLSNlbmRpZgotCi0gICAgdm9pZCBzdG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5nZWQoYm9v
bCk7Ci0gICAgdm9pZCBwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCk7Ci0gICAgdm9p
ZCBtdXRlZFN0YXRlQ2hhbmdlZChib29sKTsKLSAgICB2b2lkIGdldEZvcm1WYWx1ZShDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wgcmV0dXJuVmFsdWUsIFN0cmluZyYmIGZvcm1WYWx1ZSk+JiYp
OwotCi0gICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgUGx1Z2luQ3JlYXRpb25QYXJh
bWV0ZXJzJik7Ci0gICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKLSAgICB2b2lkIHBsYXRmb3Jt
R2VvbWV0cnlEaWRDaGFuZ2UoKTsKLQotICAgIFdlYlByb2Nlc3NDb25uZWN0aW9uKiBtX2Nvbm5l
Y3Rpb247Ci0gICAgdWludDY0X3QgbV9wbHVnaW5JbnN0YW5jZUlEOwotCi0gICAgU3RyaW5nIG1f
dXNlckFnZW50OwotICAgIGJvb2wgbV9zdG9yYWdlQmxvY2tpbmdFbmFibGVkOwotICAgIGJvb2wg
bV9pc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQ7Ci0gICAgYm9vbCBtX2lzTXV0ZWQ7Ci0gICAgYm9v
bCBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQ7Ci0gICAgYm9vbCBtX2lzSW5pdGlh
bGl6aW5nOwotICAgIGJvb2wgbV9pc1Zpc2libGU7Ci0gICAgYm9vbCBtX2lzV2luZG93VmlzaWJs
ZTsKLQotICAgIE1lc3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luRGVs
YXllZFJlcGx5IG1faW5pdGlhbGl6YXRpb25SZXBseTsKLQotICAgIFJlZlB0cjxQbHVnaW4+IG1f
cGx1Z2luOwotCi0gICAgV2ViQ29yZTo6SW50U2l6ZSBtX3BsdWdpblNpemU7Ci0KLSAgICAvLyBU
aGUgZGlydHkgcmVjdCBpbiBwbHVnLWluIGNvb3JkaW5hdGVzLgotICAgIFdlYkNvcmU6OkludFJl
Y3QgbV9kaXJ0eVJlY3Q7Ci0KLSAgICAvLyBUaGUgcGFpbnQgdGltZXIsIHVzZWQgZm9yIGNvYWxl
c2NpbmcgcGFpbnRpbmcuCi0gICAgUnVuTG9vcDo6VGltZXI8UGx1Z2luQ29udHJvbGxlclByb3h5
PiBtX3BhaW50VGltZXI7Ci0gICAgCi0gICAgLy8gQSBjb3VudGVyIHVzZWQgdG8gcHJldmVudCB0
aGUgcGx1Zy1pbiBmcm9tIGJlaW5nIGRlc3Ryb3llZC4KLSAgICB1bnNpZ25lZCBtX3BsdWdpbkRl
c3RydWN0aW9uUHJvdGVjdENvdW50OwotCi0gICAgLy8gQSB0aW1lciB0aGF0IHdlIHVzZSB0byBw
cmV2ZW50IGRlc3RydWN0aW9uIG9mIHRoZSBwbHVnLWluIHdoaWxlIHBsdWctaW4KLSAgICAvLyBj
b2RlIGlzIG9uIHRoZSBzdGFjay4KLSAgICBSdW5Mb29wOjpUaW1lcjxQbHVnaW5Db250cm9sbGVy
UHJveHk+IG1fcGx1Z2luRGVzdHJveVRpbWVyOwotCi0gICAgLy8gV2hldGhlciB3ZSdyZSB3YWl0
aW5nIGZvciB0aGUgcGx1Zy1pbiBwcm94eSBpbiB0aGUgd2ViIHByb2Nlc3MgdG8gZHJhdyB0aGUg
Y29udGVudHMgb2YgaXRzCi0gICAgLy8gYmFja2luZyBzdG9yZSBpbnRvIHRoZSB3ZWIgcHJvY2Vz
cyBiYWNraW5nIHN0b3JlLgotICAgIGJvb2wgbV93YWl0aW5nRm9yRGlkVXBkYXRlOwotCi0gICAg
Ly8gV2hldGhlciB0aGUgcGx1Zy1pbiBoYXMgY2FuY2VsZWQgdGhlIG1hbnVhbCBzdHJlYW0gbG9h
ZC4KLSAgICBib29sIG1fcGx1Z2luQ2FuY2VsZWRNYW51YWxTdHJlYW1Mb2FkOwotCi0jaWYgUExB
VEZPUk0oQ09DT0EpCi0gICAgLy8gV2hldGhlciBjb21wbGV4IHRleHQgaW5wdXQgaXMgZW5hYmxl
ZCBmb3IgdGhpcyBwbHVnLWluLgotICAgIGJvb2wgbV9pc0NvbXBsZXhUZXh0SW5wdXRFbmFibGVk
OwotCi0gICAgLy8gRm9yIENBIHBsdWctaW5zLCB0aGlzIGhvbGRzIHRoZSBpbmZvcm1hdGlvbiBu
ZWVkZWQgdG8gZXhwb3J0IHRoZSBsYXllciBoaWVyYXJjaHkgdG8gdGhlIFVJIHByb2Nlc3MuCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPExheWVySG9zdGluZ0NvbnRleHQ+IG1fbGF5ZXJIb3N0aW5nQ29u
dGV4dDsKLSNlbmRpZgotCi0gICAgLy8gVGhlIGNvbnRlbnRzIHNjYWxlIGZhY3RvciBvZiB0aGlz
IHBsdWctaW4uCi0gICAgZmxvYXQgbV9jb250ZW50c1NjYWxlRmFjdG9yOwotICAgIAotICAgIC8v
IFRoZSBiYWNraW5nIHN0b3JlIHRoYXQgdGhpcyBwbHVnLWluIGRyYXdzIGludG8uCi0gICAgUmVm
UHRyPFNoYXJlYWJsZUJpdG1hcD4gbV9iYWNraW5nU3RvcmU7Ci0KLSAgICAvLyBUaGUgd2luZG93
IE5QT2JqZWN0LgotICAgIE5QT2JqZWN0KiBtX3dpbmRvd05QT2JqZWN0OwotCi0gICAgLy8gVGhl
IHBsdWctaW4gZWxlbWVudCBOUE9iamVjdC4KLSAgICBOUE9iamVjdCogbV9wbHVnaW5FbGVtZW50
TlBPYmplY3Q7Ci0KLSAgICAvLyBIb2xkIGFuIGFjdGl2aXR5IHdoZW4gdGhlIHBsdWdpbiBpcyB2
aXNpYmxlIHRvIHByZXZlbnQgdGhyb3R0bGluZy4KLSAgICBVc2VyQWN0aXZpdHkgbV92aXNpYmxp
dHlBY3Rpdml0eTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsdWdp
blByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dC9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5tZXNzYWdlcy5pbgpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFhMTY4NmZjYTYwYTYwMGNjNTUyNGZjOTY1YmUxMmM3
NTc2NDY5ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5Lm1lc3NhZ2Vz
LmluCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi1t
ZXNzYWdlcyAtPiBQbHVnaW5Db250cm9sbGVyUHJveHkgTGVnYWN5UmVjZWl2ZXIgTm90UmVmQ291
bnRlZCB7Ci0gICAgIyBTZW50IHdoZW4gdGhlIHBsdWctaW4gZ2VvbWV0cnkgY2hhbmdlcy4KLSAg
ICBHZW9tZXRyeURpZENoYW5nZShXZWJDb3JlOjpJbnRTaXplIHBsdWdpblNpemUsIFdlYkNvcmU6
OkludFJlY3QgY2xpcFJlY3QsIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSBwbHVnaW5Ub1Jvb3RW
aWV3VHJhbnNmb3JtLCBmbG9hdCBzY2FsZUZhY3RvciwgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6
OkhhbmRsZSBiYWNraW5nU3RvcmVIYW5kbGUpCi0KLSAgICAjIFNlbnQgd2hlbiB0aGUgcGx1Zy1p
biB2aXNpYmlsaXR5IGNoYW5nZXMuCi0gICAgVmlzaWJpbGl0eURpZENoYW5nZShib29sIGlzVmlz
aWJsZSkKLQotICAgICMgU2VudCB3aGVuIGEgZnJhbWUgaGFzIGZpbmlzaGVkIGxvYWRpbmcuCi0g
ICAgRnJhbWVEaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCkKLQotICAgICMgU2Vu
dCB3aGVuIGEgZnJhbWUgZGZhaWxlZCB0byBsb2FkLgotICAgIEZyYW1lRGlkRmFpbCh1aW50NjRf
dCByZXF1ZXN0SUQsIGJvb2wgd2FzQ2FuY2VsbGVkKQotCi0gICAgIyBTZW50IHdoZW4gSmF2YVNj
cmlwdCB0aGF0IHRoZSBwbHVnLWluIGFza2VkIHRvIGJlIGV2YWx1YXRlZCBoYXMgYmVlbiBldmFs
dWF0ZWQuCi0gICAgRGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90IHJlcXVlc3RJRCwgU3Ry
aW5nIHJlc3VsdCkKLQotICAgICMgU2VudCB3aGVuIHRoZSBwbHVnLWluIHJlY2VpdmVzIHdpbGwg
c2VuZCBhIHJlcXVlc3QgZm9yIGEgc3RyZWFtLgotICAgIFN0cmVhbVdpbGxTZW5kUmVxdWVzdCh1
aW50NjRfdCBzdHJlYW1JRCwgU3RyaW5nIHJlcXVlc3RVUkxTdHJpbmcsIFN0cmluZyByZWRpcmVj
dFJlc3BvbnNlVVJMU3RyaW5nLCB1aW50MzJfdCByZWRpcmVjdFJlc3BvbnNlU3RhdHVzQ29kZSkK
LQotICAgICMgU2VudCB3aGVuIHRoZSBwbHVnLWluIHJlY2VpdmVzIGEgcmVzcG9uc2UgZm9yIGEg
c3RyZWFtLgotICAgIFN0cmVhbURpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBzdHJlYW1JRCwg
U3RyaW5nIHJlc3BvbnNlVVJMU3RyaW5nLCB1aW50MzJfdCBzdHJlYW1MZW5ndGgsIHVpbnQzMl90
IGxhc3RNb2RpZmllZFRpbWUsIFN0cmluZyBtaW1lVHlwZSwgU3RyaW5nIGhlYWRlcnMpCi0KLSAg
ICAjIFNlbnQgd2hlbiB0aGUgcGx1Zy1pbiByZWNlaXZlcyBkYXRhIGZvciBhIHN0cmVhbS4KLSAg
ICBTdHJlYW1EaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBzdHJlYW1JRCwgSVBDOjpEYXRhUmVmZXJl
bmNlIGRhdGEpCi0KLSAgICAjIFNlbnQgd2hlbiBhIHBsdWctaW4gc3RyZWFtIGhhcyBmaW5pc2hl
cyBsb2FkaW5nLgotICAgIFN0cmVhbURpZEZpbmlzaExvYWRpbmcodWludDY0X3Qgc3RyZWFtSUQp
Ci0KLSAgICAjIFNlbnQgd2hlbiBhIHBsdWctaW4gc3RyZWFtIGhhcyBmYWlsZWQgdG8gbG9hZC4K
LSAgICBTdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0cmVhbUlELCBib29sIHdhc0NhbmNlbGxlZCkK
LQotICAgICMgU2VudCB3aGVuIHRoZSBwbHVnLWluIHJlY2VpdmVzIGEgcmVzcG9uc2UgZm9yIHRo
ZSBtYW51YWwgc3RyZWFtLgotICAgIE1hbnVhbFN0cmVhbURpZFJlY2VpdmVSZXNwb25zZShTdHJp
bmcgcmVzcG9uc2VVUkxTdHJpbmcsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwgdWludDMyX3QgbGFz
dE1vZGlmaWVkVGltZSwgU3RyaW5nIG1pbWVUeXBlLCBTdHJpbmcgaGVhZGVycykKLQotICAgICMg
U2VudCB3aGVuIHRoZSBwbHVnLWluIHJlY2VpdmVzIGRhdGEgZm9yIHRoZSBtYW51YWwgc3RyZWFt
LgotICAgIE1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKElQQzo6RGF0YVJlZmVyZW5jZSBkYXRh
KQotCi0gICAgIyBTZW50IHdoZW4gdGhlIHBsdWctaW4gbWFudWFsIHN0cmVhbSBoYXMgZmluaXNo
ZXMgbG9hZGluZy4KLSAgICBNYW51YWxTdHJlYW1EaWRGaW5pc2hMb2FkaW5nKCkKLQotICAgICMg
U2VudCB3aGVuIHRoZSBwbHVnLWluIG1hbnVhbCBzdHJlYW0gaGFzIGZhaWxlZCB0byBsb2FkLgot
ICAgIE1hbnVhbFN0cmVhbURpZEZhaWwoYm9vbCB3YXNDYW5jZWxsZWQpCi0KLSAgICAjIFNlbnQg
d2hlbiBhIG1vdXNlIGV2ZW50ICh0aGF0IGlzbid0IGEgbW91c2UgZW50ZXIvbGVhdmUgZXZlbnQg
b3IgYSB3aGVlbCBldmVudCkgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICBIYW5kbGVNb3VzZUV2
ZW50KFdlYktpdDo6V2ViTW91c2VFdmVudCBtb3VzZUV2ZW50KQotICAgIAotICAgICMgU2VudCB3
aGVuIGEgbW91c2Ugd2hlZWwgZXZlbnQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICBIYW5kbGVX
aGVlbEV2ZW50KFdlYktpdDo6V2ViV2hlZWxFdmVudCB3aGVlbEV2ZW50KSAtPiAoYm9vbCBoYW5k
bGVkKSBTeW5jaHJvbm91cwotCi0gICAgIyBTZW50IHdoZW4gYSBtb3VzZSBlbnRlciBldmVudCBz
aG91bGQgYmUgcHJvY2Vzc2VkLgotICAgIEhhbmRsZU1vdXNlRW50ZXJFdmVudChXZWJLaXQ6Oldl
Yk1vdXNlRXZlbnQgbW91c2VFdmVudCkgLT4gKGJvb2wgaGFuZGxlZCkgU3luY2hyb25vdXMKLSAg
ICAKLSAgICAjIFNlbnQgd2hlbiBhIG1vdXNlIGxlYXZlIGV2ZW50IHNob3VsZCBiZSBwcm9jZXNz
ZWQuCi0gICAgSGFuZGxlTW91c2VMZWF2ZUV2ZW50KFdlYktpdDo6V2ViTW91c2VFdmVudCBtb3Vz
ZUV2ZW50KSAtPiAoYm9vbCBoYW5kbGVkKSBTeW5jaHJvbm91cwotCi0gICAgIyBTZW50IHdoZW4g
YSBrZXlib2FyZCBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICAgIEhhbmRsZUtleWJvYXJkRXZlbnQo
V2ViS2l0OjpXZWJLZXlib2FyZEV2ZW50IGtleWJvYXJkRXZlbnQpIC0+IChib29sIGhhbmRsZWQp
IFN5bmNocm9ub3VzCi0gICAgCi0gICAgIyBTZW50IHdoZW4gYW4gZWRpdGluZyBjb21tYW5kIHNo
b3VsZCBiZSBwcm9jZXNzZWQuCi0gICAgSGFuZGxlRWRpdGluZ0NvbW1hbmQoU3RyaW5nIGNvbW1h
bmROYW1lLCBTdHJpbmcgYXJndW1lbnQpIC0+IChib29sIGhhbmRsZWQpIFN5bmNocm9ub3VzCi0g
ICAgCi0gICAgIyBSZXR1cm4gd2hldGhlciBvciBub3QgYSBwbHVnaW4gd2FudHMgdG8gZW5hYmxl
IHRoZSBnaXZlbiBlZGl0aW5nIGNvbW1hbmQuCi0gICAgSXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQo
U3RyaW5nIGNvbW1hbmROYW1lKSAtPiAoYm9vbCBlbmFibGVkKSBTeW5jaHJvbm91cwotICAgIAot
ICAgICMgUmV0dXJuIHdoZXRoZXIgb3Igbm90IGEgcGx1Z2luIHdhbnRzIHRvIGhhbmRsZSBwYWdl
IHNjYWxlIGZhY3RvciBpdHNlbGYuCi0gICAgSGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpIC0+IChi
b29sIGVuYWJsZWQpIFN5bmNocm9ub3VzCi0KLSAgICAjIFJldHVybiB3aGV0aGVyIG9yIG5vdCBh
IHBsdWdpbiB3YW50cyBwYWdlIHNjYWxlLCBwYWdlIHpvb20sIGFuZCB0ZXh0IHpvb20gYWxsIHRv
IGFmZmVjdCBwYWdlIHNjYWxlLgotICAgIFJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKCkgLT4g
KGJvb2wgcmVxdWlyZWQpIFN5bmNocm9ub3VzCi0KLSAgICAjIFNlbnQgd2hlbiB0aGUgcGx1Zy1p
biBmb2N1cyBjaGFuZ2VzLgotICAgIFNldEZvY3VzKGJvb2wgaXNGb2N1c2VkKQotCi0gICAgIyBT
ZW50IHdoZW4gdGhlIHVwZGF0ZSByZXF1ZXN0ZWQgYnkgVXBkYXRlIGhhcyBiZWVuIHBhaW50ZWQu
Ci0gICAgRGlkVXBkYXRlKCkKLQotICAgICMgUGFpbnQgdGhlIGVudGlyZSBwbHVnLWluLgotICAg
IFBhaW50RW50aXJlUGx1Z2luKCkgLT4gKCkgU3luY2hyb25vdXMKLQotICAgICMgR2V0IGEgcmVm
ZXJlbmNlIHRvIHRoZSBwbHVnLWluJ3Mgc2NyaXB0YWJsZSBOUE9iamVjdC4KLSAgICBHZXRQbHVn
aW5TY3JpcHRhYmxlTlBPYmplY3QoKSAtPiAodWludDY0X3QgcGx1Z2luU2NyaXB0YWJsZU5QT2Jq
ZWN0SUQpIFN5bmNocm9ub3VzCi0KLSAgICAjIFNlbnQgd2hlbiB0aGUgY29udGFpbmluZyBOU1dp
bmRvdydzIGZvY3VzIGNoYW5nZXMKLSAgICBXaW5kb3dGb2N1c0NoYW5nZWQoYm9vbCBoYXNGb2N1
cykKLQotICAgICMgU2VudCB3aGVuIHRoZSBjb250YWluaW5nIE5TV2luZG93J3MgdmlzaWJpbGl0
eSBjaGFuZ2VzCi0gICAgV2luZG93VmlzaWJpbGl0eUNoYW5nZWQoYm9vbCBpc1Zpc2libGUpCi0K
LSNpZiBQTEFURk9STShDT0NPQSkKLSAgICAjIFNlbmQgdGhlIGNvbXBsZXggdGV4dCBpbnB1dCB0
byB0aGUgcGx1Zy1pbi4KLSAgICBTZW5kQ29tcGxleFRleHRJbnB1dChTdHJpbmcgdGV4dElucHV0
KQotCi0gICAgIyBTZW50IHdoZW4gdGhlIGNvbnRhaW5pbmcgTlNXaW5kb3cgb3IgTlNWaWV3IGZy
YW1lIGNoYW5nZXMKLSAgICBXaW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChXZWJDb3JlOjpJbnRS
ZWN0IHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgV2ViQ29yZTo6SW50UmVjdCB2aWV3
RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKQotCi0gICAgIyBTZW50IHdoZW4gdGhlIGNvbnRhaW5p
bmcgd2luZG93J3MgbGF5ZXIgaG9zdGluZyBtb2RlIGNoYW5nZXMKLSAgICBTZXRMYXllckhvc3Rp
bmdNb2RlKHVpbnQzMl90IGxheWVySG9zdGluZ01vZGUpCi0jZW5kaWYKLQotICAgICMgRG9lcyB0
aGUgcGx1Z2luIHN1cHBvcnQgc25hcHNob3R0aW5nPwotICAgIFN1cHBvcnRzU25hcHNob3R0aW5n
KCkgLT4gKGJvb2wgaXNTdXBwb3J0ZWQpIFN5bmNocm9ub3VzCi0KLSAgICAjIFJldHVybiBhIHNu
YXBzaG90IG9mIHRoZSBwbHVnaW4uCi0gICAgU25hcHNob3QoKSAtPiAoV2ViS2l0OjpTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSBiYWNraW5nU3RvcmVIYW5kbGUpIFN5bmNocm9ub3VzCi0KLSAgICAj
IFNlbnQgd2hlbiBzdG9yYWdlIGJsb2NraW5nIHBvbGljeSBjaGFuZ2VzCi0gICAgU3RvcmFnZUJs
b2NraW5nU3RhdGVDaGFuZ2VkKGJvb2wgc3RvcmFnZUJsb2NraW5nRW5hYmxlZCkKLQotICAgICMg
U2VudCB3aGVuIHByaXZhdGUgYnJvd3NpbmcgaXMgZW5hYmxlZCBvciBkaXNhYmxlZAotICAgIFBy
aXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZChib29sIGlzUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkK
LQotICAgICMgR2V0cyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW5nIHRoZSBmb3JtIHZhbHVlIG9m
IHRoZSBwbHVnLWluCi0gICAgR2V0Rm9ybVZhbHVlKCkgLT4gKGJvb2wgcmV0dXJuVmFsdWUsIFN0
cmluZyBmb3JtVmFsdWUpIFN5bmNocm9ub3VzCi0KLSAgICAjIFNlbnQgd2hlbiB0aGUgYnJvd3Nl
ciB3YW50cyB0byBtdXRlIG9yIHVubXV0ZSB0aGUgcGx1Z2luLgotICAgIE11dGVkU3RhdGVDaGFu
Z2VkKGJvb2wgbXV0ZWQpCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Q
bHVnaW5Qcm9jZXNzL1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1BsdWdpblByb2Nlc3MvUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZWMyN2VlZDc0OTQ5M2Q1YjBiYzkwNWQzNjkzNWQ4MmU3ZmQ2NjRk
OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1BsdWdpblByb2Nlc3MvUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0KLSNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCi0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1QbHVnaW5DcmVhdGlvblBhcmFtZXRlcnM6OlBsdWdpbkNyZWF0aW9u
UGFyYW1ldGVycygpCi0gICAgOiBwbHVnaW5JbnN0YW5jZUlEKDApCi0gICAgLCB3aW5kb3dOUE9i
amVjdElEKDApCi0gICAgLCBjb250ZW50c1NjYWxlRmFjdG9yKDEpCi0gICAgLCBpc1ByaXZhdGVC
cm93c2luZ0VuYWJsZWQoZmFsc2UpCi0gICAgLCBpc011dGVkKGZhbHNlKQotICAgICwgYXN5bmNo
cm9ub3VzQ3JlYXRpb25JbmNvbXBsZXRlKGZhbHNlKQotICAgICwgYXJ0aWZpY2lhbFBsdWdpbklu
aXRpYWxpemF0aW9uRGVsYXlFbmFibGVkKGZhbHNlKQotICAgICwgaXNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nRW5hYmxlZChmYWxzZSkKLXsKLX0KLQotdm9pZCBQbHVnaW5DcmVhdGlvblBhcmFtZXRl
cnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8
PCBwbHVnaW5JbnN0YW5jZUlEOwotICAgIGVuY29kZXIgPDwgd2luZG93TlBPYmplY3RJRDsKLSAg
ICBlbmNvZGVyIDw8IHBhcmFtZXRlcnM7Ci0gICAgZW5jb2RlciA8PCB1c2VyQWdlbnQ7Ci0gICAg
ZW5jb2RlciA8PCBjb250ZW50c1NjYWxlRmFjdG9yOwotICAgIGVuY29kZXIgPDwgaXNQcml2YXRl
QnJvd3NpbmdFbmFibGVkOwotICAgIGVuY29kZXIgPDwgaXNNdXRlZDsKLSAgICBlbmNvZGVyIDw8
IGFzeW5jaHJvbm91c0NyZWF0aW9uSW5jb21wbGV0ZTsKLSAgICBlbmNvZGVyIDw8IGFydGlmaWNp
YWxQbHVnaW5Jbml0aWFsaXphdGlvbkRlbGF5RW5hYmxlZDsKLSAgICBlbmNvZGVyIDw8IGlzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQ7Ci19Ci0KLWJvb2wgUGx1Z2luQ3JlYXRpb25QYXJh
bWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBQbHVnaW5DcmVhdGlvblBhcmFt
ZXRlcnMmIHJlc3VsdCkKLXsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5wbHVnaW5J
bnN0YW5jZUlEKSB8fCAhcmVzdWx0LnBsdWdpbkluc3RhbmNlSUQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LndpbmRvd05QT2JqZWN0SUQp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5wYXJhbWV0ZXJzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQudXNlckFnZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY29udGVudHNTY2FsZUZhY3RvcikpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlzUHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0LmlzTXV0ZWQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5hc3luY2hyb25vdXNDcmVhdGlvbkluY29tcGxl
dGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3VsdC5hcnRpZmljaWFsUGx1Z2luSW5pdGlhbGl6YXRpb25EZWxheUVuYWJsZWQpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGx1
Z2luUHJvY2Vzcy9QbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvUGx1
Z2luUHJvY2Vzcy9QbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZDI4ZjU2NzkyMThjNzdkZjAxMjE1MTlmNDk3MTVlZDMwOTBkYTM2OS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1BsdWdpblByb2Nlc3MvUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5DcmVhdGlvblBhcmFt
ZXRlcnNfaAotI2RlZmluZSBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnNfaAotCi0jaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJQbHVnaW4uaCIKLQotbmFtZXNwYWNl
IElQQyB7Ci1jbGFzcyBEZWNvZGVyOwotY2xhc3MgRW5jb2RlcjsKLX0KLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLXN0cnVjdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMgewotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycygp
OwotCi0gICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNvZGVyJikgY29uc3Q7Ci0gICAgc3RhdGljIFdB
Uk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShJUEM6OkRlY29kZXImLCBQbHVnaW5DcmVhdGlv
blBhcmFtZXRlcnMmKTsKLQotICAgIC8vIFRoZSB1bmlxdWUgSUQgb2YgdGhpcyBwbHVnLWluIGlu
c3RhbmNlLgotICAgIHVpbnQ2NF90IHBsdWdpbkluc3RhbmNlSUQ7Ci0KLSAgICAvLyBUaGUgSUQg
b2YgdGhlIHdpbmRvdyBOUE9iamVjdC4KLSAgICB1aW50NjRfdCB3aW5kb3dOUE9iamVjdElEOwot
Ci0gICAgLy8gVGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZSBwbHVnLWluLgotICAgIFBsdWdp
bjo6UGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotCi0gICAgLy8gVGhlIGJyb3dzZXIgdXNlciBhZ2Vu
dC4KLSAgICBTdHJpbmcgdXNlckFnZW50OwotCi0gICAgLy8gVGhlIGN1cnJlbnQgY29udGVudHMg
c2NhbGUgZmFjdG9yIHRoYXQgdGhpcyBwbHVnLWluIHNob3VsZCBoYXZlLgotICAgIGZsb2F0IGNv
bnRlbnRzU2NhbGVGYWN0b3I7Ci0KLSAgICAvLyBXaGV0aGVyIHByaXZhdGUgYnJvd3NpbmcgaXMg
ZW5hYmxlZCBhdCB0aGUgdGltZSBvZiBpbnN0YW50aWF0aW9uLgotICAgIGJvb2wgaXNQcml2YXRl
QnJvd3NpbmdFbmFibGVkOwotCi0gICAgLy8gV2hldGhlciB0aGUgcGx1Z2luIHNob3VsZCBiZSBt
dXRlZC4KLSAgICBib29sIGlzTXV0ZWQ7Ci0gICAgCi0gICAgLy8gSWYgcmVxdWVzdGluZyBzeW5j
aHJvbm91cyBpbml0aWFsaXphdGlvbiwgd2hldGhlciB0aGlzIHBsdWdpbiBoYWQgcHJldmlvdXNs
eSBiZWVuIHJlcXVlc3RlZCBhc3luY2hyb25vdXNseQotICAgIGJvb2wgYXN5bmNocm9ub3VzQ3Jl
YXRpb25JbmNvbXBsZXRlOwotCi0gICAgLy8gU2ltdWxhdGVkIGluaXRpYWxpemF0aW9uIGRlbGF5
IHRlc3QgYXN5bmNocm9ub3VzIHBsdWdpbiBpbml0aWFsaXphdGlvbgotICAgIGJvb2wgYXJ0aWZp
Y2lhbFBsdWdpbkluaXRpYWxpemF0aW9uRGVsYXlFbmFibGVkOwotCi0gICAgLy8gV2hldGhlciBh
Y2NlbGVyYXRlZCBjb21wb3NpdGluZyBpcyBlbmFibGVkLgotICAgIGJvb2wgaXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nRW5hYmxlZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNlbmRpZiAvLyBQbHVnaW5DcmVh
dGlvblBhcmFtZXRlcnNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNz
L1BsdWdpblByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1BsdWdpblBy
b2Nlc3MuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Mzk1YWU2MGEzNDgyMjJj
ODQ1NjBmZDk5NDBhMzZiMzBlZjRjNzAxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Qcm9jZXNz
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzcy5oIgotCi0jaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgot
I2luY2x1ZGUgIkF0dGFjaG1lbnQuaCIKLSNpbmNsdWRlICJBdXhpbGlhcnlQcm9jZXNzTWVzc2Fn
ZXMuaCIKLSNpbmNsdWRlICJOZXRzY2FwZVBsdWdpbi5oIgotI2luY2x1ZGUgIk5ldHNjYXBlUGx1
Z2luTW9kdWxlLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5o
IgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKLSNpbmNsdWRl
ICJQbHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NDb25u
ZWN0aW9uLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0j
aW5jbHVkZSA8d3RmL01lbW9yeVByZXNzdXJlSGFuZGxlci5oPgotI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+Ci0jaW5jbHVk
ZSA8d3RmL1J1bkxvb3AuaD4KLQotI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNsdWRlIDxjcnRfZXh0
ZXJucy5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotTk9fUkVUVVJOIHN0YXRpYyB2b2lkIGNhbGxFeGl0KElQQzo6Q29ubmVjdGlv
biopCi17Ci0gICAgX2V4aXQoRVhJVF9TVUNDRVNTKTsKLX0KLQotUGx1Z2luUHJvY2VzcyYgUGx1
Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UGx1
Z2luUHJvY2Vzcz4gcGx1Z2luUHJvY2VzczsKLSAgICByZXR1cm4gcGx1Z2luUHJvY2VzczsKLX0K
LQotUGx1Z2luUHJvY2Vzczo6UGx1Z2luUHJvY2VzcygpCi0gICAgOiBtX3N1cHBvcnRzQXN5bmNo
cm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRpb24oZmFsc2UpCi0gICAgLCBtX21pbmltdW1MaWZldGlt
ZVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlBsdWdpblByb2Nlc3M6Om1pbmltdW1MaWZl
dGltZVRpbWVyRmlyZWQpCi0gICAgLCBtX2Nvbm5lY3Rpb25BY3Rpdml0eSgiUGx1Z2luUHJvY2Vz
cyBjb25uZWN0aW9uIGFjdGl2aXR5LiIpCi17Ci0gICAgTmV0c2NhcGVQbHVnaW46OnNldFNldEV4
Y2VwdGlvbkZ1bmN0aW9uKFdlYlByb2Nlc3NDb25uZWN0aW9uOjpzZXRHbG9iYWxFeGNlcHRpb24p
OwotfQotCi1QbHVnaW5Qcm9jZXNzOjp+UGx1Z2luUHJvY2VzcygpCi17Ci19Ci0KLXZvaWQgUGx1
Z2luUHJvY2Vzczo6aW5pdGlhbGl6ZVByb2Nlc3MoY29uc3QgQXV4aWxpYXJ5UHJvY2Vzc0luaXRp
YWxpemF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKLXsKLSAgICBXVEY6OnNldFByb2Nlc3NQ
cml2aWxlZ2VzKGFsbFByaXZpbGVnZXMoKSk7Ci0gICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpwZXJtaXRQcm9jZXNzVG9Vc2VDb29raWVBUEkodHJ1ZSk7Ci0gICAgbV9wbHVnaW5Q
YXRoID0gcGFyYW1ldGVycy5leHRyYUluaXRpYWxpemF0aW9uRGF0YS5nZXQoInBsdWdpbi1wYXRo
Iik7Ci0gICAgcGxhdGZvcm1Jbml0aWFsaXplUHJvY2VzcyhwYXJhbWV0ZXJzKTsKLX0KLQotdm9p
ZCBQbHVnaW5Qcm9jZXNzOjppbml0aWFsaXplQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24qIGNv
bm5lY3Rpb24pCi17Ci0gICAgQXV4aWxpYXJ5UHJvY2Vzczo6aW5pdGlhbGl6ZUNvbm5lY3Rpb24o
Y29ubmVjdGlvbik7Ci0KLSAgICAvLyBXZSBjYWxsIF9leGl0KCkgZGlyZWN0bHkgZnJvbSB0aGUg
YmFja2dyb3VuZCBxdWV1ZSBpbiBjYXNlIHRoZSBtYWluIHRocmVhZCBpcyB1bnJlc3BvbnNpdmUK
LSAgICAvLyBhbmQgQXV4aWxpYXJ5UHJvY2Vzczo6ZGlkQ2xvc2UoKSBkb2VzIG5vdCBnZXQgY2Fs
bGVkLgotICAgIGNvbm5lY3Rpb24tPnNldERpZENsb3NlT25Db25uZWN0aW9uV29ya1F1ZXVlQ2Fs
bGJhY2soY2FsbEV4aXQpOwotfQotCi12b2lkIFBsdWdpblByb2Nlc3M6OnJlbW92ZVdlYlByb2Nl
c3NDb25uZWN0aW9uKFdlYlByb2Nlc3NDb25uZWN0aW9uKiB3ZWJQcm9jZXNzQ29ubmVjdGlvbikK
LXsKLSAgICBzaXplX3QgdmVjdG9ySW5kZXggPSBtX3dlYlByb2Nlc3NDb25uZWN0aW9ucy5maW5k
KHdlYlByb2Nlc3NDb25uZWN0aW9uKTsKLSAgICBBU1NFUlQodmVjdG9ySW5kZXggIT0gbm90Rm91
bmQpOwotCi0gICAgbV93ZWJQcm9jZXNzQ29ubmVjdGlvbnMucmVtb3ZlKHZlY3RvckluZGV4KTsK
LSAgICAKLSAgICBpZiAobV93ZWJQcm9jZXNzQ29ubmVjdGlvbnMuaXNFbXB0eSgpICYmIG1fcGx1
Z2luTW9kdWxlKSB7Ci0gICAgICAgIC8vIERlY3JlbWVudCB0aGUgbG9hZCBjb3VudC4gVGhpcyBp
cyBiYWxhbmNlZCBieSBhIGNhbGwgdG8gaW5jcmVtZW50TG9hZENvdW50IGluIGNyZWF0ZVdlYlBy
b2Nlc3NDb25uZWN0aW9uLgotICAgICAgICBtX3BsdWdpbk1vZHVsZS0+ZGVjcmVtZW50TG9hZENv
dW50KCk7Ci0gICAgfSAgICAgICAgCi0KLSAgICBlbmFibGVUZXJtaW5hdGlvbigpOwotfQotCi1O
ZXRzY2FwZVBsdWdpbk1vZHVsZSogUGx1Z2luUHJvY2Vzczo6bmV0c2NhcGVQbHVnaW5Nb2R1bGUo
KQotewotICAgIGlmICghbV9wbHVnaW5Nb2R1bGUpIHsKLSAgICAgICAgQVNTRVJUKCFtX3BsdWdp
blBhdGguaXNOdWxsKCkpOwotICAgICAgICBtX3BsdWdpbk1vZHVsZSA9IE5ldHNjYXBlUGx1Z2lu
TW9kdWxlOjpnZXRPckNyZWF0ZShtX3BsdWdpblBhdGgpOwotCi0jaWYgUExBVEZPUk0oTUFDKQot
ICAgICAgICBpZiAobV9wbHVnaW5Nb2R1bGUpIHsKLSAgICAgICAgICAgIGlmIChtX3BsdWdpbk1v
ZHVsZS0+cGx1Z2luUXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtzOjpQcm9nbmFtZVNob3Vs
ZEJlV2ViS2l0UGx1Z2luSG9zdCkpCi0gICAgICAgICAgICAgICAgKmNvbnN0X2Nhc3Q8Y29uc3Qg
Y2hhcioqPihfTlNHZXRQcm9nbmFtZSgpKSA9ICJXZWJLaXRQbHVnaW5Ib3N0IjsKLSAgICAgICAg
fQotI2VuZGlmCi0gICAgfQotCi0gICAgcmV0dXJuIG1fcGx1Z2luTW9kdWxlLmdldCgpOwotfQot
Ci1ib29sIFBsdWdpblByb2Nlc3M6OnNob3VsZFRlcm1pbmF0ZSgpCi17Ci0gICAgcmV0dXJuIG1f
d2ViUHJvY2Vzc0Nvbm5lY3Rpb25zLmlzRW1wdHkoKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNz
OjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVj
b2RlciYgZGVjb2RlcikKLXsKLSNpZiBPUyhMSU5VWCkKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdl
UmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSkgewotICAgICAgICBBdXhpbGlhcnlQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2Fn
ZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgot
Ci0gICAgZGlkUmVjZWl2ZVBsdWdpblByb2Nlc3NNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIp
OwotfQotCi12b2lkIFBsdWdpblByb2Nlc3M6OmluaXRpYWxpemVQbHVnaW5Qcm9jZXNzKFBsdWdp
blByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQotewotICAgIEFTU0VSVCgh
bV9wbHVnaW5Nb2R1bGUpOwotCi0gICAgYXV0byYgbWVtb3J5UHJlc3N1cmVIYW5kbGVyID0gTWVt
b3J5UHJlc3N1cmVIYW5kbGVyOjpzaW5nbGV0b24oKTsKLSAgICBtZW1vcnlQcmVzc3VyZUhhbmRs
ZXIuc2V0TG93TWVtb3J5SGFuZGxlcihbdGhpc10gKENyaXRpY2FsLCBTeW5jaHJvbm91cykgewot
ICAgICAgICBpZiAoc2hvdWxkVGVybWluYXRlKCkpCi0gICAgICAgICAgICB0ZXJtaW5hdGUoKTsK
LSAgICB9KTsKLSAgICBtZW1vcnlQcmVzc3VyZUhhbmRsZXIuaW5zdGFsbCgpOwotCi0gICAgbV9z
dXBwb3J0c0FzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uID0gcGFyYW1ldGVycy5zdXBw
b3J0c0FzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uOwotICAgIHNldE1pbmltdW1MaWZl
dGltZShwYXJhbWV0ZXJzLm1pbmltdW1MaWZldGltZSk7Ci0gICAgc2V0VGVybWluYXRpb25UaW1l
b3V0KHBhcmFtZXRlcnMudGVybWluYXRpb25UaW1lb3V0KTsKLQotICAgIHBsYXRmb3JtSW5pdGlh
bGl6ZVBsdWdpblByb2Nlc3MoV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci19Ci0KLXZvaWQgUGx1Z2lu
UHJvY2Vzczo6Y3JlYXRlV2ViUHJvY2Vzc0Nvbm5lY3Rpb24oKQotewotICAgIC8vIEZJWE1FOiBN
ZXJnZSB0aGlzIHdpdGggQXV4aWxpYXJ5UHJvY2Vzczo6Y3JlYXRlSVBDQ29ubmVjdGlvblBhaXIo
KS4KLQotICAgIGJvb2wgZGlkSGF2ZUFueVdlYlByb2Nlc3NDb25uZWN0aW9ucyA9ICFtX3dlYlBy
b2Nlc3NDb25uZWN0aW9ucy5pc0VtcHR5KCk7Ci0KLSNpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VU
UykKLSAgICBJUEM6OkNvbm5lY3Rpb246OlNvY2tldFBhaXIgc29ja2V0UGFpciA9IElQQzo6Q29u
bmVjdGlvbjo6Y3JlYXRlUGxhdGZvcm1Db25uZWN0aW9uKCk7Ci0KLSAgICBhdXRvIGNvbm5lY3Rp
b24gPSBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Y3JlYXRlKHNvY2tldFBhaXIuc2VydmVyKTsKLSAg
ICBtX3dlYlByb2Nlc3NDb25uZWN0aW9ucy5hcHBlbmQoV1RGTW92ZShjb25uZWN0aW9uKSk7Ci0K
LSAgICBJUEM6OkF0dGFjaG1lbnQgY2xpZW50U29ja2V0KHNvY2tldFBhaXIuY2xpZW50KTsKLSAg
ICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Qcm9jZXNz
UHJveHk6OkRpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9uKGNsaWVudFNvY2tldCwgbV9zdXBw
b3J0c0FzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uKSwgMCk7Ci0jZWxpZiBPUyhEQVJX
SU4pCi0gICAgLy8gQ3JlYXRlIHRoZSBsaXN0ZW5pbmcgcG9ydC4KLSAgICBtYWNoX3BvcnRfdCBs
aXN0ZW5pbmdQb3J0ID0gTUFDSF9QT1JUX05VTEw7Ci0gICAgYXV0byBrciA9IG1hY2hfcG9ydF9h
bGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgJmxpc3Rl
bmluZ1BvcnQpOwotICAgIGlmIChrciAhPSBLRVJOX1NVQ0NFU1MpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJDb3VsZCBub3QgYWxsb2NhdGUgbWFjaCBwb3J0LCBlcnJvciAleCIsIGtyKTsKLSAgICAg
ICAgQ1JBU0goKTsKLSAgICB9Ci0KLSAgICAvLyBDcmVhdGUgYSBsaXN0ZW5pbmcgY29ubmVjdGlv
bi4KLSAgICBhdXRvIGNvbm5lY3Rpb24gPSBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Y3JlYXRlKElQ
Qzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllcihsaXN0ZW5pbmdQb3J0KSk7Ci0KLSAgICBtX3dlYlBy
b2Nlc3NDb25uZWN0aW9ucy5hcHBlbmQoV1RGTW92ZShjb25uZWN0aW9uKSk7Ci0KLSAgICBJUEM6
OkF0dGFjaG1lbnQgY2xpZW50UG9ydChsaXN0ZW5pbmdQb3J0LCBNQUNIX01TR19UWVBFX01BS0Vf
U0VORCk7Ci0gICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1
Z2luUHJvY2Vzc1Byb3h5OjpEaWRDcmVhdGVXZWJQcm9jZXNzQ29ubmVjdGlvbihjbGllbnRQb3J0
LCBtX3N1cHBvcnRzQXN5bmNocm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRpb24pLCAwKTsKLSNlbHNl
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSNlbmRpZgotCi0gICAgaWYgKE5ldHNjYXBlUGx1Z2lu
TW9kdWxlKiBtb2R1bGUgPSBuZXRzY2FwZVBsdWdpbk1vZHVsZSgpKSB7Ci0gICAgICAgIGlmICgh
ZGlkSGF2ZUFueVdlYlByb2Nlc3NDb25uZWN0aW9ucykgewotICAgICAgICAgICAgLy8gSW5jcmVt
ZW50IHRoZSBsb2FkIGNvdW50LiBUaGlzIGlzIG1hdGNoZWQgYnkgYSBjYWxsIHRvIGRlY3JlbWVu
dExvYWRDb3VudCBpbiByZW1vdmVXZWJQcm9jZXNzQ29ubmVjdGlvbi4KLSAgICAgICAgICAgIC8v
IFdlIGRvIHRoaXMgc28gdGhhdCB0aGUgcGx1Zy1pbiBtb2R1bGUncyBOUF9TaHV0ZG93biB3b24n
dCBiZSBjYWxsZWQgdW50aWwgcmlnaHQgYmVmb3JlIGV4aXRpbmcuCi0gICAgICAgICAgICBtb2R1
bGUtPmluY3JlbWVudExvYWRDb3VudCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZGlzYWJs
ZVRlcm1pbmF0aW9uKCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzczo6Z2V0U2l0ZXNXaXRoRGF0
YSh1aW50NjRfdCBjYWxsYmFja0lEKQotewotICAgIFZlY3RvcjxTdHJpbmc+IHNpdGVzOwotICAg
IGlmIChOZXRzY2FwZVBsdWdpbk1vZHVsZSogbW9kdWxlID0gbmV0c2NhcGVQbHVnaW5Nb2R1bGUo
KSkKLSAgICAgICAgc2l0ZXMgPSBtb2R1bGUtPnNpdGVzV2l0aERhdGEoKTsKLQotICAgIHBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpblByb2Nlc3NQcm94eTo6
RGlkR2V0U2l0ZXNXaXRoRGF0YShzaXRlcywgY2FsbGJhY2tJRCksIDApOwotfQotCi12b2lkIFBs
dWdpblByb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIHVp
bnQ2NF90IGNhbGxiYWNrSUQpCi17Ci0gICAgaWYgKGF1dG8qIG1vZHVsZSA9IG5ldHNjYXBlUGx1
Z2luTW9kdWxlKCkpIHsKLSAgICAgICAgYXV0byBjdXJyZW50VGltZSA9IFdhbGxUaW1lOjpub3co
KTsKLQotICAgICAgICBpZiAoY3VycmVudFRpbWUgPiBtb2RpZmllZFNpbmNlKSB7Ci0gICAgICAg
ICAgICB1aW50NjRfdCBtYXhpbXVtQWdlID0gKGN1cnJlbnRUaW1lIC0gbW9kaWZpZWRTaW5jZSku
c2Vjb25kc0FzPHVpbnQ2NF90PigpOwotCi0gICAgICAgICAgICBtb2R1bGUtPmNsZWFyU2l0ZURh
dGEoU3RyaW5nKCksIE5QX0NMRUFSX0FMTCwgbWF4aW11bUFnZSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Q
cm9jZXNzUHJveHk6OkRpZERlbGV0ZVdlYnNpdGVEYXRhKGNhbGxiYWNrSUQpLCAwKTsKLX0KLQot
dm9pZCBQbHVnaW5Qcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvckhvc3ROYW1lcyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgaG9zdE5hbWVzLCB1aW50NjRfdCBjYWxsYmFja0lEKQotewotICAgIGlm
IChhdXRvKiBtb2R1bGUgPSBuZXRzY2FwZVBsdWdpbk1vZHVsZSgpKSB7Ci0gICAgICAgIGZvciAo
YXV0byYgaG9zdE5hbWUgOiBob3N0TmFtZXMpCi0gICAgICAgICAgICBtb2R1bGUtPmNsZWFyU2l0
ZURhdGEoaG9zdE5hbWUsIE5QX0NMRUFSX0FMTCwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRf
dD46Om1heCgpKTsKLSAgICB9Ci0KLSAgICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpQbHVnaW5Qcm9jZXNzUHJveHk6OkRpZERlbGV0ZVdlYnNpdGVEYXRhRm9ySG9z
dE5hbWVzKGNhbGxiYWNrSUQpLCAwKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzOjpzZXRNaW5p
bXVtTGlmZXRpbWUoU2Vjb25kcyBsaWZldGltZSkKLXsKLSAgICBpZiAobGlmZXRpbWUgPD0gMF9z
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgZGlzYWJsZVRlcm1pbmF0aW9uKCk7Ci0gICAg
Ci0gICAgbV9taW5pbXVtTGlmZXRpbWVUaW1lci5zdGFydE9uZVNob3QobGlmZXRpbWUpOwotfQot
Ci12b2lkIFBsdWdpblByb2Nlc3M6Om1pbmltdW1MaWZldGltZVRpbWVyRmlyZWQoKQotewotICAg
IGVuYWJsZVRlcm1pbmF0aW9uKCk7Ci19Ci0KLSNpZiAhUExBVEZPUk0oQ09DT0EpCi12b2lkIFBs
dWdpblByb2Nlc3M6OmluaXRpYWxpemVQcm9jZXNzTmFtZShjb25zdCBBdXhpbGlhcnlQcm9jZXNz
SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJikKLXsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzOjpp
bml0aWFsaXplU2FuZGJveChjb25zdCBBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJh
bWV0ZXJzJiwgU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycyYpCi17Ci19Ci0jZW5kaWYK
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1BsdWdp
blByb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Qcm9jZXNzLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmY2FiMTJlYjA3ZDgzZDQ4N2E3NzM0NGMz
ZDRkN2YzOTc2NzVmOTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MuaAorKysgL2Rl
di9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiQXV4aWxpYXJ5
UHJvY2Vzcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ291bnRlZFVzZXJBY3Rpdml0eS5oPgotI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0K
LSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgotI2Vu
ZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBOZXRzY2FwZVBsdWdpbk1vZHVsZTsK
LWNsYXNzIFdlYlByb2Nlc3NDb25uZWN0aW9uOwotc3RydWN0IFBsdWdpblByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnM7Ci0gICAgICAgIAotY2xhc3MgUGx1Z2luUHJvY2VzcyA6IHB1YmxpYyBBdXhp
bGlhcnlQcm9jZXNzCi17Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGx1Z2luUHJvY2Vzcyk7
Ci0gICAgZnJpZW5kIE5ldmVyRGVzdHJveWVkPFBsdWdpblByb2Nlc3M+OwotCi1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBsdWdpblByb2Nlc3MmIHNpbmdsZXRvbigpOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgV2ViQ29yZTo6QXV4aWxpYXJ5UHJvY2Vzc1R5cGUgcHJvY2Vzc1R5cGUgPSBXZWJDb3JlOjpB
dXhpbGlhcnlQcm9jZXNzVHlwZTo6UGx1Z2luOwotCi0gICAgdm9pZCByZW1vdmVXZWJQcm9jZXNz
Q29ubmVjdGlvbihXZWJQcm9jZXNzQ29ubmVjdGlvbiopOwotCi0gICAgTmV0c2NhcGVQbHVnaW5N
b2R1bGUqIG5ldHNjYXBlUGx1Z2luTW9kdWxlKCk7Ci0KLSAgICBjb25zdCBTdHJpbmcmIHBsdWdp
blBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpblBhdGg7IH0KLQotI2lmIFBMQVRGT1JNKENP
Q09BKQotICAgIHZvaWQgc2V0TW9kYWxXaW5kb3dJc1Nob3dpbmcoYm9vbCk7Ci0gICAgdm9pZCBz
ZXRGdWxsc2NyZWVuV2luZG93SXNTaG93aW5nKGJvb2wpOwotCi0gICAgY29uc3QgV1RGOjpNYWNo
U2VuZFJpZ2h0JiBjb21wb3NpdGluZ1JlbmRlclNlcnZlclBvcnQoKSBjb25zdCB7IHJldHVybiBt
X2NvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydDsgfQotCi0gICAgYm9vbCBsYXVuY2hQcm9jZXNz
KGNvbnN0IFN0cmluZyYgbGF1bmNoUGF0aCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50
cyk7Ci0gICAgYm9vbCBsYXVuY2hBcHBsaWNhdGlvbkF0VVJMKGNvbnN0IFN0cmluZyYgdXJsU3Ry
aW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRzKTsKLSAgICBib29sIG9wZW5VUkwo
Y29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGludDMyX3QmIHN0YXR1cywgU3RyaW5nJiBsYXVuY2hl
ZFVSTFN0cmluZyk7Ci0gICAgYm9vbCBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7
Ci0jZW5kaWYKLQotICAgIENvdW50ZWRVc2VyQWN0aXZpdHkmIGNvbm5lY3Rpb25BY3Rpdml0eSgp
IHsgcmV0dXJuIG1fY29ubmVjdGlvbkFjdGl2aXR5OyB9Ci0KLXByaXZhdGU6Ci0gICAgUGx1Z2lu
UHJvY2VzcygpOwotICAgIH5QbHVnaW5Qcm9jZXNzKCk7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0g
ICAgYm9vbCBzaG91bGRPdmVycmlkZVF1YXJhbnRpbmUoKSBmaW5hbDsKLSNlbmRpZgotCi0gICAg
Ly8gQXV4aWxpYXJ5UHJvY2VzcwotICAgIHZvaWQgaW5pdGlhbGl6ZVByb2Nlc3MoY29uc3QgQXV4
aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYpIG92ZXJyaWRlOwotICAgIHZv
aWQgaW5pdGlhbGl6ZVByb2Nlc3NOYW1lKGNvbnN0IEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXph
dGlvblBhcmFtZXRlcnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGluaXRpYWxpemVDb25uZWN0aW9u
KElQQzo6Q29ubmVjdGlvbiopIG92ZXJyaWRlOwotICAgIHZvaWQgaW5pdGlhbGl6ZVNhbmRib3go
Y29uc3QgQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYsIFNhbmRib3hJ
bml0aWFsaXphdGlvblBhcmFtZXRlcnMmKSBvdmVycmlkZTsKLSAgICBib29sIHNob3VsZFRlcm1p
bmF0ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplUHJvY2Vzcyhjb25z
dCBBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJik7Ci0KLSNpZiBVU0Uo
QVBQS0lUKQotICAgIHZvaWQgc3RvcFJ1bkxvb3AoKSBvdmVycmlkZTsKLSNlbmRpZgotCi0gICAg
Ly8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwotCi0gICAgLy8gTWVzc2Fn
ZSBoYW5kbGVycy4KLSAgICB2b2lkIGRpZFJlY2VpdmVQbHVnaW5Qcm9jZXNzTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKLSAgICB2b2lkIGluaXRpYWxpemVQbHVnaW5Q
cm9jZXNzKFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJik7Ci0gICAgdm9pZCBjcmVh
dGVXZWJQcm9jZXNzQ29ubmVjdGlvbigpOwotCi0gICAgdm9pZCBnZXRTaXRlc1dpdGhEYXRhKHVp
bnQ2NF90IGNhbGxiYWNrSUQpOwotICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGEoV2FsbFRpbWUg
bW9kaWZpZWRTaW5jZSwgdWludDY0X3QgY2FsbGJhY2tJRCk7Ci0gICAgdm9pZCBkZWxldGVXZWJz
aXRlRGF0YUZvckhvc3ROYW1lcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdE5hbWVzLCB1aW50
NjRfdCBjYWxsYmFja0lEKTsKLQotICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplUGx1Z2luUHJv
Y2VzcyhQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYpOwotICAgIAotICAgIHZvaWQg
c2V0TWluaW11bUxpZmV0aW1lKFNlY29uZHMpOwotICAgIHZvaWQgbWluaW11bUxpZmV0aW1lVGlt
ZXJGaXJlZCgpOwotICAgIC8vIE91ciB3ZWIgcHJvY2VzcyBjb25uZWN0aW9ucy4KLSAgICBWZWN0
b3I8UmVmUHRyPFdlYlByb2Nlc3NDb25uZWN0aW9uPj4gbV93ZWJQcm9jZXNzQ29ubmVjdGlvbnM7
Ci0KLSAgICAvLyBUaGUgcGx1Zy1pbiBwYXRoLgotICAgIFN0cmluZyBtX3BsdWdpblBhdGg7Ci0K
LSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBTdHJpbmcgbV9wbHVnaW5CdW5kbGVJZGVudGlmaWVy
OwotI2VuZGlmCi0KLSAgICAvLyBUaGUgcGx1Zy1pbiBtb2R1bGUuCi0gICAgUmVmUHRyPE5ldHNj
YXBlUGx1Z2luTW9kdWxlPiBtX3BsdWdpbk1vZHVsZTsKLSAgICAKLSAgICBib29sIG1fc3VwcG9y
dHNBc3luY2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbjsKLQotICAgIFJ1bkxvb3A6OlRpbWVy
PFBsdWdpblByb2Nlc3M+IG1fbWluaW11bUxpZmV0aW1lVGltZXI7Ci0KLSNpZiBQTEFURk9STShD
T0NPQSkKLSAgICAvLyBUaGUgTWFjaCBwb3J0IHVzZWQgZm9yIGFjY2VsZXJhdGVkIGNvbXBvc2l0
aW5nLgotICAgIFdURjo6TWFjaFNlbmRSaWdodCBtX2NvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9y
dDsKLQotICAgIFN0cmluZyBtX25zdXJsQ2FjaGVEaXJlY3Rvcnk7Ci0jZW5kaWYKLQotICAgIENv
dW50ZWRVc2VyQWN0aXZpdHkgbV9jb25uZWN0aW9uQWN0aXZpdHk7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MubWVzc2Fn
ZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5tZXNzYWdl
cy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY0NjgyNjA1MzcyMGNmNjExZTk2
NjI3NGQ4MjBmN2FjYmIwNGJlNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5tZXNz
YWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQot
Ci1tZXNzYWdlcyAtPiBQbHVnaW5Qcm9jZXNzIExlZ2FjeVJlY2VpdmVyIE5vdFJlZkNvdW50ZWQg
ewotICAgICMgSW5pdGlhbGl6ZXMgdGhlIHBsdWctaW4gcHJvY2Vzcy4KLSAgICBJbml0aWFsaXpl
UGx1Z2luUHJvY2VzcyhzdHJ1Y3QgV2ViS2l0OjpQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzIHByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMpCi0gICAgCi0gICAgIyBDcmVhdGVzIGEgd2Vi
IHByb2Nlc3MgY29ubmVjdGlvbi4gV2hlbiB0aGUgY29ubmVjdGlvbiBoYXMgYmVlbiBjcmVhdGVk
LAotICAgICMgVGhlIHBsdWctaW4gcHJvY2VzcyBzZW5kcyBiYWNrIGEgRGlkQ3JlYXRlV2ViUHJv
Y2Vzc0Nvbm5lY3Rpb24gbWVzc2FnZSB3aXRoCi0gICAgIyBhIGNvbm5lY3Rpb24gaWRlbnRpZmll
ci4KLSAgICBDcmVhdGVXZWJQcm9jZXNzQ29ubmVjdGlvbigpCi0KLSAgICAjIEFza3MgdGhlIHBs
dWctaW4gcHJvY2VzcyBmb3Igc2l0ZXMgd2l0aCBkYXRhLiBUaGUgcGx1Zy1pbiBwcm9jZXNzIHNl
bmRzIGJhY2sgYSAKLSAgICAjIERpZEdldFNpdGVzV2l0aERhdGEgbWVzc2FnZSB3aXRoIHRoZSBz
aXRlcy4KLSAgICBHZXRTaXRlc1dpdGhEYXRhKHVpbnQ2NF90IGNhbGxiYWNrSUQpCi0KLSAgICBE
ZWxldGVXZWJzaXRlRGF0YShXYWxsVGltZSBtb2RpZmllZFNpbmNlLCB1aW50NjRfdCBjYWxsYmFj
a0lEKQotICAgIERlbGV0ZVdlYnNpdGVEYXRhRm9ySG9zdE5hbWVzKFZlY3RvcjxTdHJpbmc+IGhv
c3ROYW1lcywgdWludDY0X3QgY2FsbGJhY2tJRCkKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAg
IFNldFFPUyhpbnQgbGF0ZW5jeVFPUywgaW50IHRocm91Z2hwdXRRT1MpCi0jZW5kaWYKLX0KLQot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvV2ViUHJvY2Vz
c0Nvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3ND
b25uZWN0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JmMzNmODIwMmIy
N2U0ZWY4Y2Y4NDdjZmI2MWQ2MGI0ZTdmZjk1OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvV2ViUHJvY2Vz
c0Nvbm5lY3Rpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc0Nvbm5lY3Rpb24u
aCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiQWN0aXZp
dHlBc3NlcnRpb24uaCIKLSNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIk5Q
T2JqZWN0TWVzc2FnZVJlY2VpdmVyTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJOUFJlbW90ZU9iamVj
dE1hcC5oIgotI2luY2x1ZGUgIlBsdWdpbkNvbnRyb2xsZXJQcm94eS5oIgotI2luY2x1ZGUgIlBs
dWdpbkNyZWF0aW9uUGFyYW1ldGVycy5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3MuaCIKLSNp
bmNsdWRlICJQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiUGx1
Z2luUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2Fn
ZXMuaCIKLSNpbmNsdWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4KLQotI2lmICFPUyhXSU5ET1dTKQot
I2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXN0YXRpYyBJUEM6OkNvbm5lY3Rpb24qIGN1cnJlbnRDb25u
ZWN0aW9uOwotCi1SZWY8V2ViUHJvY2Vzc0Nvbm5lY3Rpb24+IFdlYlByb2Nlc3NDb25uZWN0aW9u
OjpjcmVhdGUoSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVy
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlByb2Nlc3NDb25uZWN0aW9uKGNvbm5l
Y3Rpb25JZGVudGlmaWVyKSk7Ci19Ci0KLVdlYlByb2Nlc3NDb25uZWN0aW9uOjp+V2ViUHJvY2Vz
c0Nvbm5lY3Rpb24oKQotewotICAgIEFTU0VSVChtX3BsdWdpbkNvbnRyb2xsZXJzLmlzRW1wdHko
KSk7Ci0gICAgQVNTRVJUKCFtX25wUmVtb3RlT2JqZWN0TWFwKTsKLSAgICBBU1NFUlQoIW1fY29u
bmVjdGlvbik7Ci19Ci0gICAgCi1XZWJQcm9jZXNzQ29ubmVjdGlvbjo6V2ViUHJvY2Vzc0Nvbm5l
Y3Rpb24oSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKQot
ewotICAgIG1fY29ubmVjdGlvbiA9IElQQzo6Q29ubmVjdGlvbjo6Y3JlYXRlU2VydmVyQ29ubmVj
dGlvbihjb25uZWN0aW9uSWRlbnRpZmllciwgKnRoaXMpOwotICAgIG1fbnBSZW1vdGVPYmplY3RN
YXAgPSBOUFJlbW90ZU9iamVjdE1hcDo6Y3JlYXRlKG1fY29ubmVjdGlvbi5nZXQoKSk7Ci0KLSAg
ICAvLyBVc2UgdGhpcyBmbGFnIHRvIGZvcmNlIHN5bmNocm9ub3VzIG1lc3NhZ2VzIHRvIGJlIHRy
ZWF0ZWQgYXMgYXN5bmNocm9ub3VzIG1lc3NhZ2VzIGluIHRoZSBXZWJQcm9jZXNzLgotICAgIC8v
IE90aGVyd2lzZSwgdGhlIFdlYlByb2Nlc3Mgd291bGQgcHJvY2VzcyBpbmNvbWluZyBzeW5jaHJv
bm91cyBJUEMgd2hpbGUgd2FpdGluZyBmb3IgYSBzeW5jaHJvbm91cyBJUEMKLSAgICAvLyByZXBs
eSBmcm9tIHRoZSBQbHVnaW4gcHJvY2Vzcywgd2hpY2ggd291bGQgYmUgdW5zYWZlLgotICAgIG1f
Y29ubmVjdGlvbi0+c2V0T25seVNlbmRNZXNzYWdlc0FzRGlzcGF0Y2hXaGVuV2FpdGluZ0ZvclN5
bmNSZXBseVdoZW5Qcm9jZXNzaW5nU3VjaEFNZXNzYWdlKHRydWUpOwotICAgIG1fY29ubmVjdGlv
bi0+b3BlbigpOwotfQotCi12b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjphZGRQbHVnaW5Db250
cm9sbGVyUHJveHkoc3RkOjp1bmlxdWVfcHRyPFBsdWdpbkNvbnRyb2xsZXJQcm94eT4gcGx1Z2lu
Q29udHJvbGxlcikKLXsKLSAgICB1aW50NjRfdCBwbHVnaW5JbnN0YW5jZUlEID0gcGx1Z2luQ29u
dHJvbGxlci0+cGx1Z2luSW5zdGFuY2VJRCgpOwotCi0gICAgQVNTRVJUKCFtX3BsdWdpbkNvbnRy
b2xsZXJzLmNvbnRhaW5zKHBsdWdpbkluc3RhbmNlSUQpKTsKLSAgICBtX3BsdWdpbkNvbnRyb2xs
ZXJzLnNldChwbHVnaW5JbnN0YW5jZUlELCBXVEZNb3ZlKHBsdWdpbkNvbnRyb2xsZXIpKTsKLX0K
LQotdm9pZCBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6ZGVzdHJveVBsdWdpbkNvbnRyb2xsZXJQcm94
eShQbHVnaW5Db250cm9sbGVyUHJveHkqIHBsdWdpbkNvbnRyb2xsZXIpCi17Ci0gICAgLy8gVGhp
cyBtYXkgZW5kIHVwIGNhbGxpbmcgcmVtb3ZlUGx1Z2luQ29udHJvbGxlclByb3h5IHdoaWNoIGVu
ZHMgdXAgZGVsZXRpbmcKLSAgICAvLyB0aGUgV2ViUHJvY2Vzc0Nvbm5lY3Rpb24gb2JqZWN0IGlm
IHRoaXMgd2FzIHRoZSBsYXN0IG9iamVjdC4KLSAgICBwbHVnaW5Db250cm9sbGVyLT5kZXN0cm95
KCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OnJlbW92ZVBsdWdpbkNvbnRyb2xs
ZXJQcm94eShQbHVnaW5Db250cm9sbGVyUHJveHkqIHBsdWdpbkNvbnRyb2xsZXIsIFBsdWdpbiog
cGx1Z2luKQotewotICAgIHVuc2lnbmVkIHBsdWdpbkluc3RhbmNlSUQgPSBwbHVnaW5Db250cm9s
bGVyLT5wbHVnaW5JbnN0YW5jZUlEKCk7Ci0gICAgewotICAgICAgICBBU1NFUlQobV9wbHVnaW5D
b250cm9sbGVycy5jb250YWlucyhwbHVnaW5JbnN0YW5jZUlEKSk7Ci0KLSAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPFBsdWdpbkNvbnRyb2xsZXJQcm94eT4gcGx1Z2luQ29udHJvbGxlclVuaXF1ZVB0
ciA9IG1fcGx1Z2luQ29udHJvbGxlcnMudGFrZShwbHVnaW5JbnN0YW5jZUlEKTsKLSAgICAgICAg
QVNTRVJUKHBsdWdpbkNvbnRyb2xsZXJVbmlxdWVQdHIuZ2V0KCkgPT0gcGx1Z2luQ29udHJvbGxl
cik7Ci0gICAgfQotCi0gICAgLy8gSW52YWxpZGF0ZSBhbGwgb2JqZWN0cyByZWxhdGVkIHRvIHRo
aXMgcGx1Zy1pbi4KLSAgICBpZiAocGx1Z2luKQotICAgICAgICBtX25wUmVtb3RlT2JqZWN0TWFw
LT5wbHVnaW5EZXN0cm95ZWQocGx1Z2luKTsKLQotICAgIGlmICghbV9wbHVnaW5Db250cm9sbGVy
cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbnBSZW1vdGVPYmplY3RNYXAg
PSBudWxscHRyOwotCi0gICAgLy8gVGhlIGxhc3QgcGx1Zy1pbiB3ZW50IGF3YXksIGNsb3NlIHRo
aXMgY29ubmVjdGlvbi4KLSAgICBtX2Nvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKLSAgICBtX2Nv
bm5lY3Rpb24gPSBudWxscHRyOwotCi0gICAgLy8gVGhpcyB3aWxsIGNhdXNlIHVzIHRvIGJlIGRl
bGV0ZWQuICAgIAotICAgIFBsdWdpblByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZVdlYlByb2Nl
c3NDb25uZWN0aW9uKHRoaXMpOwotfQotCi12b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjpzZXRH
bG9iYWxFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBleGNlcHRpb25TdHJpbmcpCi17Ci0gICAgaWYg
KCFjdXJyZW50Q29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY3VycmVudENvbm5l
Y3Rpb24tPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjo6U2V0RXhj
ZXB0aW9uKGV4Y2VwdGlvblN0cmluZyksIE1lc3NhZ2VzOjpQbHVnaW5Qcm9jZXNzQ29ubmVjdGlv
bjo6U2V0RXhjZXB0aW9uOjpSZXBseSgpLCAwKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzQ29ubmVj
dGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6
OkRlY29kZXImIGRlY29kZXIpCi17Ci0gICAgU2V0Rm9yU2NvcGU8SVBDOjpDb25uZWN0aW9uKj4g
Y3VycmVudENvbm5lY3Rpb25DaGFuZ2UoY3VycmVudENvbm5lY3Rpb24sICZjb25uZWN0aW9uKTsK
LQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6V2Vi
UHJvY2Vzc0Nvbm5lY3Rpb246Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewotICAgICAgICBkaWRS
ZWNlaXZlV2ViUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFkZWNvZGVyLmRlc3RpbmF0aW9uSUQo
KSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIFBsdWdpbkNvbnRyb2xsZXJQcm94eSogcGx1Z2luQ29udHJvbGxlclByb3h5ID0g
bV9wbHVnaW5Db250cm9sbGVycy5nZXQoZGVjb2Rlci5kZXN0aW5hdGlvbklEKCkpOwotICAgIGlm
ICghcGx1Z2luQ29udHJvbGxlclByb3h5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBQbHVnaW5D
b250cm9sbGVyOjpQbHVnaW5EZXN0cnVjdGlvblByb3RlY3RvciBwcm90ZWN0b3IocGx1Z2luQ29u
dHJvbGxlclByb3h5LT5hc1BsdWdpbkNvbnRyb2xsZXIoKSk7Ci0gICAgcGx1Z2luQ29udHJvbGxl
clByb3h5LT5kaWRSZWNlaXZlUGx1Z2luQ29udHJvbGxlclByb3h5TWVzc2FnZShjb25uZWN0aW9u
LCBkZWNvZGVyKTsKLX0KLQotYm9vbCBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZVN5
bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNv
ZGVyLCBVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQotewotICAgIFNldEZv
clNjb3BlPElQQzo6Q29ubmVjdGlvbio+IGN1cnJlbnRDb25uZWN0aW9uQ2hhbmdlKGN1cnJlbnRD
b25uZWN0aW9uLCAmY29ubmVjdGlvbik7Ci0KLSAgICB1aW50NjRfdCBkZXN0aW5hdGlvbklEID0g
ZGVjb2Rlci5kZXN0aW5hdGlvbklEKCk7Ci0KLSAgICBpZiAoIWRlc3RpbmF0aW9uSUQpCi0gICAg
ICAgIHJldHVybiBkaWRSZWNlaXZlU3luY1dlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZShjb25u
ZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwotCi0gICAgaWYgKGRlY29kZXIubWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpKQotICAgICAgICByZXR1cm4gbV9ucFJlbW90ZU9iamVjdE1hcC0+
ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7
Ci0KLSAgICBQbHVnaW5Db250cm9sbGVyUHJveHkqIHBsdWdpbkNvbnRyb2xsZXJQcm94eSA9IG1f
cGx1Z2luQ29udHJvbGxlcnMuZ2V0KGRlY29kZXIuZGVzdGluYXRpb25JRCgpKTsKLSAgICBpZiAo
IXBsdWdpbkNvbnRyb2xsZXJQcm94eSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUGx1
Z2luQ29udHJvbGxlcjo6UGx1Z2luRGVzdHJ1Y3Rpb25Qcm90ZWN0b3IgcHJvdGVjdG9yKHBsdWdp
bkNvbnRyb2xsZXJQcm94eS0+YXNQbHVnaW5Db250cm9sbGVyKCkpOwotICAgIHJldHVybiBwbHVn
aW5Db250cm9sbGVyUHJveHktPmRpZFJlY2VpdmVTeW5jUGx1Z2luQ29udHJvbGxlclByb3h5TWVz
c2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwotfQotCi12b2lkIFdlYlBy
b2Nlc3NDb25uZWN0aW9uOjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQotewotICAgIC8vIFRo
ZSB3ZWIgcHJvY2VzcyBjcmFzaGVkLiBEZXN0cm95IGFsbCB0aGUgcGx1Zy1pbiBjb250cm9sbGVy
cy4gRGVzdHJveWluZyB0aGUgbGFzdCBwbHVnLWluIGNvbnRyb2xsZXIKLSAgICAvLyB3aWxsIGNh
dXNlIHRoZSB3ZWIgcHJvY2VzcyBjb25uZWN0aW9uIGl0c2VsZiB0byBiZSBkZXN0cm95ZWQuCi0g
ICAgVmVjdG9yPFBsdWdpbkNvbnRyb2xsZXJQcm94eSo+IHBsdWdpbkNvbnRyb2xsZXJzOwotICAg
IGZvciAoYXV0byBpdCA9IG1fcGx1Z2luQ29udHJvbGxlcnMudmFsdWVzKCkuYmVnaW4oKSwgZW5k
ID0gbV9wbHVnaW5Db250cm9sbGVycy52YWx1ZXMoKS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICBwbHVnaW5Db250cm9sbGVycy5hcHBlbmQoaXQtPmdldCgpKTsKLQotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcGx1Z2luQ29udHJvbGxlcnMuc2l6ZSgpOyArK2kpCi0gICAgICAg
IGRlc3Ryb3lQbHVnaW5Db250cm9sbGVyUHJveHkocGx1Z2luQ29udHJvbGxlcnNbaV0pOwotfQot
Ci12b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjpkZXN0cm95UGx1Z2luKHVpbnQ2NF90IHBsdWdp
bkluc3RhbmNlSUQsIGJvb2wgYXN5bmNocm9ub3VzQ3JlYXRpb25JbmNvbXBsZXRlLCBNZXNzYWdl
czo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkRlc3Ryb3lQbHVnaW46OkRlbGF5ZWRSZXBseSYmIHJl
cGx5KQotewotICAgIC8vIFdlIHJldHVybiBpbW1lZGlhdGVseSBmcm9tIHRoaXMgc3luY2hyb25v
dXMgSVBDLiBXZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgcGx1Z2luIGRlc3RydWN0aW9uIGlzIGp1
c3QgYWJvdXQgdG8gc3RhcnQgc28gYXVkaW8gcGxheWJhY2sKLSAgICAvLyB3aWxsIGZpbmlzaCBz
b29uIGFmdGVyIHJldHVybmluZy4gSG93ZXZlciB3ZSBkb24ndCB3YW50IHRvIHdhaXQgZm9yIGRl
c3RydWN0aW9uIHRvIGNvbXBsZXRlIGZ1bGx5IGFzIHRoYXQgbWF5IHRha2UgYSB3aGlsZS4KLSAg
ICByZXBseSgpOwotCi0gICAgLy8gRW5zdXJlIHdlIGRvbid0IGNsYW1wIGFueSB0aW1lcnMgZHVy
aW5nIGRlc3RydWN0aW9uCi0gICAgQWN0aXZpdHlBc3NlcnRpb24gYWN0aXZpdHlBc3NlcnRpb24o
UGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkuY29ubmVjdGlvbkFjdGl2aXR5KCkpOwotCi0gICAg
UGx1Z2luQ29udHJvbGxlclByb3h5KiBwbHVnaW5Db250cm9sbGVyUHJveHkgPSBtX3BsdWdpbkNv
bnRyb2xsZXJzLmdldChwbHVnaW5JbnN0YW5jZUlEKTsKLSAgICAKLSAgICAvLyBJZiB0aGVyZSBp
cyBubyBQbHVnaW5Db250cm9sbGVyUHJveHkgdGhlbiB0aGlzIHBsdWctaW4gZG9lc24ndCBleGlz
dCB5ZXQgYW5kIHdlIHByb2JhYmx5IGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXBsdWdp
bkNvbnRyb2xsZXJQcm94eSkgewotICAgICAgICAvLyBJZiB0aGUgcGx1Z2luIHdlJ3JlIHN1cHBv
c2VkIHRvIGRlc3Ryb3kgd2FzIHJlcXVlc3RlZCBhc3luY2hyb25vdXNseSBhbmQgZG9lc24ndCBl
eGlzdCB5ZXQsCi0gICAgICAgIC8vIHdlIG5lZWQgdG8gZmxhZyB0aGUgaW5zdGFuY2UgSUQgc28g
aXQgaXMgbm90IGNyZWF0ZWQgbGF0ZXIuCi0gICAgICAgIGlmIChhc3luY2hyb25vdXNDcmVhdGlv
bkluY29tcGxldGUpCi0gICAgICAgICAgICBtX2FzeW5jaHJvbm91c0luc3RhbmNlSURzVG9JZ25v
cmUuYWRkKHBsdWdpbkluc3RhbmNlSUQpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICAKLSAgICBkZXN0cm95UGx1Z2luQ29udHJvbGxlclByb3h5KHBsdWdpbkNvbnRyb2xs
ZXJQcm94eSk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZh
bGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VOYW1lKQotewotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQuCi19Ci0KLXZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0
ZVBsdWdpbkludGVybmFsKGNvbnN0IFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyYgY3JlYXRpb25Q
YXJhbWV0ZXJzLCBib29sJiByZXN1bHQsIGJvb2wmIHdhbnRzV2hlZWxFdmVudHMsIHVpbnQzMl90
JiByZW1vdGVMYXllckNsaWVudElEKQotewotICAgIGF1dG8gcGx1Z2luQ29udHJvbGxlclByb3h5
ID0gbWFrZVVuaXF1ZTxQbHVnaW5Db250cm9sbGVyUHJveHk+KHRoaXMsIGNyZWF0aW9uUGFyYW1l
dGVycyk7Ci0KLSAgICBQbHVnaW5Db250cm9sbGVyUHJveHkqIHBsdWdpbkNvbnRyb2xsZXJQcm94
eVB0ciA9IHBsdWdpbkNvbnRyb2xsZXJQcm94eS5nZXQoKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0
byBhZGQgdGhlIHByb3h5IHRvIHRoZSBtYXAgYmVmb3JlIGluaXRpYWxpemluZyBpdCwgc2luY2Ug
dGhlIHBsdWctaW4gbWlnaHQgY2FsbCBvdXQgdG8gdGhlIHdlYiBwcm9jZXNzIGZyb20gCi0gICAg
Ly8gaXRzIE5QUF9OZXcgZnVuY3Rpb24uIFRoaXMgd2lsbCBoYW5kIG92ZXIgb3duZXJzaGlwIG9m
IHRoZSBwcm94eSB0byB0aGUgd2ViIHByb2Nlc3MgY29ubmVjdGlvbi4KLSAgICBhZGRQbHVnaW5D
b250cm9sbGVyUHJveHkoV1RGTW92ZShwbHVnaW5Db250cm9sbGVyUHJveHkpKTsKLQotICAgIC8v
IE5vdyB0cnkgdG8gaW5pdGlhbGl6ZSB0aGUgcGx1Zy1pbi4KLSAgICByZXN1bHQgPSBwbHVnaW5D
b250cm9sbGVyUHJveHlQdHItPmluaXRpYWxpemUoY3JlYXRpb25QYXJhbWV0ZXJzKTsKLQotICAg
IGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm47Ci0KLSAgICB3YW50c1doZWVsRXZlbnRzID0g
cGx1Z2luQ29udHJvbGxlclByb3h5UHRyLT53YW50c1doZWVsRXZlbnRzKCk7Ci0jaWYgUExBVEZP
Uk0oQ09DT0EpCi0gICAgcmVtb3RlTGF5ZXJDbGllbnRJRCA9IHBsdWdpbkNvbnRyb2xsZXJQcm94
eVB0ci0+cmVtb3RlTGF5ZXJDbGllbnRJRCgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocmVt
b3RlTGF5ZXJDbGllbnRJRCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQcm9jZXNzQ29ubmVjdGlv
bjo6Y3JlYXRlUGx1Z2luKGNvbnN0IFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyYgY3JlYXRpb25Q
YXJhbWV0ZXJzLCBNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdpbjo6
RGVsYXllZFJlcGx5JiYgcmVwbHkpCi17Ci0gICAgLy8gRW5zdXJlIHdlIGRvbid0IGNsYW1wIGFu
eSB0aW1lcnMgZHVyaW5nIGluaXRpYWxpemF0aW9uCi0gICAgQWN0aXZpdHlBc3NlcnRpb24gYWN0
aXZpdHlBc3NlcnRpb24oUGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkuY29ubmVjdGlvbkFjdGl2
aXR5KCkpOwotCi0gICAgUGx1Z2luQ29udHJvbGxlclByb3h5KiBwbHVnaW5Db250cm9sbGVyUHJv
eHkgPSBtX3BsdWdpbkNvbnRyb2xsZXJzLmdldChjcmVhdGlvblBhcmFtZXRlcnMucGx1Z2luSW5z
dGFuY2VJRCk7Ci0KLSAgICAvLyBUaGUgY29udHJvbGxlciBwcm94eSBmb3IgdGhlIHBsdWctaW4g
d2UncmUgYmVpbmcgYXNrZWQgdG8gY3JlYXRlIHN5bmNocm9ub3VzbHkgbWlnaHQgYWxyZWFkeSBl
eGlzdCBpZiBpdCB3YXMgcmVxdWVzdGVkIGFzeW5jaHJvbm91c2x5IGJlZm9yZS4KLSAgICBpZiAo
cGx1Z2luQ29udHJvbGxlclByb3h5KSB7Ci0gICAgICAgIC8vIEl0IG1pZ2h0IHN0aWxsIGJlIGlu
IHRoZSBtaWRkbGUgb2YgaW5pdGlhbGl6YXRpb24gaW4gd2hpY2ggY2FzZSB3ZSBoYXZlIHRvIGxl
dCB0aGF0IGluaXRpYWxpemF0aW9uIGNvbXBsZXRlIGFuZCByZXNwb25kIHRvIHRoaXMgbWVzc2Fn
ZSBsYXRlci4KLSAgICAgICAgaWYgKHBsdWdpbkNvbnRyb2xsZXJQcm94eS0+aXNJbml0aWFsaXpp
bmcoKSkgewotICAgICAgICAgICAgcGx1Z2luQ29udHJvbGxlclByb3h5LT5zZXRJbml0aWFsaXph
dGlvblJlcGx5KFdURk1vdmUocmVwbHkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgLy8gSWYgaXRzIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRl
IHRoZW4gd2UgbmVlZCB0byByZXNwb25kIHRvIHRoaXMgbWVzc2FnZSB3aXRoIHRoZSBjb3JyZWN0
IGluZm9ybWF0aW9uIGFib3V0IGl0cyBjcmVhdGlvbi4KLSNpZiBQTEFURk9STShDT0NPQSkKLSAg
ICAgICAgcmVwbHkodHJ1ZSwgcGx1Z2luQ29udHJvbGxlclByb3h5LT53YW50c1doZWVsRXZlbnRz
KCksIHBsdWdpbkNvbnRyb2xsZXJQcm94eS0+cmVtb3RlTGF5ZXJDbGllbnRJRCgpKTsKLSNlbHNl
Ci0gICAgICAgIHJlcGx5KHRydWUsIHBsdWdpbkNvbnRyb2xsZXJQcm94eS0+d2FudHNXaGVlbEV2
ZW50cygpLCAwKTsKLSNlbmRpZgotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIC8v
IFRoZSBwbHVnaW4gd2UncmUgc3VwcG9zZWQgdG8gY3JlYXRlIG1pZ2h0IGhhdmUgYmVlbiByZXF1
ZXN0ZWQgYXN5bmNocm9ub3VzbHkgYmVmb3JlLgotICAgIC8vIEluIHRoYXQgY2FzZSB3ZSBuZWVk
IHRvIGNyZWF0ZSBpdCBzeW5jaHJvbm91c2x5IG5vdyBidXQgZmxhZyB0aGUgaW5zdGFuY2UgSUQg
c28gd2UgZG9uJ3QgcmVjcmVhdGUgaXQgYXN5bmNocm9ub3VzbHkgbGF0ZXIuCi0gICAgaWYgKGNy
ZWF0aW9uUGFyYW1ldGVycy5hc3luY2hyb25vdXNDcmVhdGlvbkluY29tcGxldGUpCi0gICAgICAg
IG1fYXN5bmNocm9ub3VzSW5zdGFuY2VJRHNUb0lnbm9yZS5hZGQoY3JlYXRpb25QYXJhbWV0ZXJz
LnBsdWdpbkluc3RhbmNlSUQpOwotICAgIAotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAg
Ym9vbCB3YW50c1doZWVsRXZlbnRzID0gZmFsc2U7Ci0gICAgdWludDMyX3QgcmVtb3RlTGF5ZXJD
bGllbnRJRCA9IDA7Ci0gICAgY3JlYXRlUGx1Z2luSW50ZXJuYWwoY3JlYXRpb25QYXJhbWV0ZXJz
LCByZXN1bHQsIHdhbnRzV2hlZWxFdmVudHMsIHJlbW90ZUxheWVyQ2xpZW50SUQpOwotICAgIAot
ICAgIHJlcGx5KHJlc3VsdCwgd2FudHNXaGVlbEV2ZW50cywgcmVtb3RlTGF5ZXJDbGllbnRJRCk7
Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0ZVBsdWdpbkFzeW5jaHJvbm91
c2x5KGNvbnN0IFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyYgY3JlYXRpb25QYXJhbWV0ZXJzKQot
ewotICAgIC8vIEluIHRoZSB0aW1lIHNpbmNlIHRoaXMgcGx1Z2luIHdhcyByZXF1ZXN0ZWQgYXN5
bmNocm9ub3VzbHkgd2UgbWlnaHQgaGF2ZSBjcmVhdGVkIGl0IHN5bmNocm9ub3VzbHkgb3IgZGVz
dHJveWVkIGl0LgotICAgIC8vIEluIGVpdGhlciBvZiB0aG9zZSBjYXNlcyB3ZSBuZWVkIHRvIGln
bm9yZSB0aGlzIGNyZWF0aW9uIHJlcXVlc3QuCi0gICAgaWYgKG1fYXN5bmNocm9ub3VzSW5zdGFu
Y2VJRHNUb0lnbm9yZS5jb250YWlucyhjcmVhdGlvblBhcmFtZXRlcnMucGx1Z2luSW5zdGFuY2VJ
RCkpIHsKLSAgICAgICAgbV9hc3luY2hyb25vdXNJbnN0YW5jZUlEc1RvSWdub3JlLnJlbW92ZShj
cmVhdGlvblBhcmFtZXRlcnMucGx1Z2luSW5zdGFuY2VJRCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgCi0gICAgLy8gVGhpcyB2ZXJzaW9uIG9mIENyZWF0ZVBsdWdpbiBpcyBvbmx5IHVz
ZWQgYnkgcGx1Zy1pbnMgdGhhdCBhcmUga25vd24gdG8gYmVoYXZlIHdoZW4gc3RhcnRlZCBhc3lu
Y2hyb25vdXNseS4KLSAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIGJvb2wgd2FudHNXaGVl
bEV2ZW50cyA9IGZhbHNlOwotICAgIHVpbnQzMl90IHJlbW90ZUxheWVyQ2xpZW50SUQgPSAwOwot
ICAgIAotICAgIGlmIChjcmVhdGlvblBhcmFtZXRlcnMuYXJ0aWZpY2lhbFBsdWdpbkluaXRpYWxp
emF0aW9uRGVsYXlFbmFibGVkKSB7Ci0gICAgICAgIFNlY29uZHMgYXJ0aWZpY2lhbFBsdWdpbklu
aXRpYWxpemF0aW9uRGVsYXkgeyA1X3MgfTsKLSAgICAgICAgc2xlZXAoYXJ0aWZpY2lhbFBsdWdp
bkluaXRpYWxpemF0aW9uRGVsYXkpOwotICAgIH0KLQotICAgIC8vIFNpbmNlIHBsdWctaW4gY3Jl
YXRpb24gY2FuIG9mdGVuIG1lc3NhZ2UgdG8gdGhlIFdlYlByb2Nlc3Mgc3luY2hyb25vdXNseSAo
d2l0aCBOUFBfRXZhbHVhdGUgZm9yIGV4YW1wbGUpCi0gICAgLy8gd2UgbmVlZCB0byBtYWtlIHN1
cmUgdGhhdCB0aGUgd2ViIHByb2Nlc3Mgd2lsbCBoYW5kbGUgdGhlIHBsdWctaW4gcHJvY2Vzcydz
IHN5bmNocm9ub3VzIG1lc3NhZ2VzLAotICAgIC8vIGV2ZW4gaWYgdGhlIHdlYiBwcm9jZXNzIGlz
IHdhaXRpbmcgb24gYSBzeW5jaHJvbm91cyByZXBseSBpdHNlbGYuCi0gICAgLy8gTm9ybWFsbHkg
dGhlIHBsdWctaW4gcHJvY2VzcyBkb2Vzbid0IGdpdmUgaXRzIHN5bmNocm9ub3VzIG1lc3NhZ2Vz
IHRoZSBzcGVjaWFsIGZsYWcgdG8gYWxsb3cgZm9yIHRoYXQuCi0gICAgLy8gV2UgY2FuIGZvcmNl
IGl0IHRvIGRvIHNvIGJ5IGluY3JlbWVudGluZyB0aGUgIkRpc3BhdGNoTWVzc2FnZU1hcmtlZERp
c3BhdGNoV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkiIGNvdW50LgotICAgIG1fY29ubmVjdGlvbi0+
aW5jcmVtZW50RGlzcGF0Y2hNZXNzYWdlTWFya2VkRGlzcGF0Y2hXaGVuV2FpdGluZ0ZvclN5bmNS
ZXBseUNvdW50KCk7Ci0KLSAgICAvLyBUaGUgY2FsbCB0byBjcmVhdGVQbHVnaW5JbnRlcm5hbCBj
YW4gcG90ZW50aWFsbHkgY2F1c2UgdGhlIHBsdWctaW4gdG8gYmUgZGVzdHJveWVkIGFuZAotICAg
IC8vIHRodXMgZnJlZSB0aGUgV2ViUHJvY2Vzc0Nvbm5lY3Rpb24gb2JqZWN0LiBQcm90ZWN0IGl0
LgotICAgIFJlZjxXZWJQcm9jZXNzQ29ubmVjdGlvbj4gcHJvdGVjdCgqdGhpcyk7Ci0gICAgY3Jl
YXRlUGx1Z2luSW50ZXJuYWwoY3JlYXRpb25QYXJhbWV0ZXJzLCByZXN1bHQsIHdhbnRzV2hlZWxF
dmVudHMsIHJlbW90ZUxheWVyQ2xpZW50SUQpOwotCi0gICAgaWYgKCFtX2Nvbm5lY3Rpb24pIHsK
LSAgICAgICAgLy8gY3JlYXRlUGx1Z2luSW50ZXJuYWwgY2F1c2VkIHRoZSBjb25uZWN0aW9uIHRv
IGdvIGF3YXkuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2Nvbm5lY3Rpb24tPmRl
Y3JlbWVudERpc3BhdGNoTWVzc2FnZU1hcmtlZERpc3BhdGNoV2hlbldhaXRpbmdGb3JTeW5jUmVw
bHlDb3VudCgpOwotCi0gICAgLy8gSWYgc29tZW9uZSBhc2tlZCBmb3IgdGhpcyBwbHVnLWluIHN5
bmNocm9ub3VzbHkgd2hpbGUgaXQgd2FzIGluIHRoZSBtaWRkbGUgb2YgYmVpbmcgY3JlYXRlZCB0
aGVuIHdlIG5lZWQgcGVyZm9ybSB0aGUKLSAgICAvLyBzeW5jaHJvbm91cyByZXBseSBpbnN0ZWFk
IG9mIHNlbmRpbmcgdGhlIGFzeW5jaHJvbm91cyByZXBseS4KLSAgICBQbHVnaW5Db250cm9sbGVy
UHJveHkqIHBsdWdpbkNvbnRyb2xsZXJQcm94eSA9IG1fcGx1Z2luQ29udHJvbGxlcnMuZ2V0KGNy
ZWF0aW9uUGFyYW1ldGVycy5wbHVnaW5JbnN0YW5jZUlEKTsKLSAgICBBU1NFUlQocGx1Z2luQ29u
dHJvbGxlclByb3h5KTsKLSAgICBpZiAoYXV0byBkZWxheWVkU3luY1JlcGx5ID0gcGx1Z2luQ29u
dHJvbGxlclByb3h5LT50YWtlSW5pdGlhbGl6YXRpb25SZXBseSgpKSB7Ci0gICAgICAgIGRlbGF5
ZWRTeW5jUmVwbHkocmVzdWx0LCB3YW50c1doZWVsRXZlbnRzLCByZW1vdGVMYXllckNsaWVudElE
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIE90aGVyd2lzZSwgc2VuZCB0aGUg
YXN5bmNocm9ub3VzIHJlc3VsdHMgbm93LgotICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIG1f
Y29ubmVjdGlvbi0+c2VuZFN5bmMoTWVzc2FnZXM6OlBsdWdpblByb3h5OjpEaWRGYWlsVG9DcmVh
dGVQbHVnaW4oKSwgTWVzc2FnZXM6OlBsdWdpblByb3h5OjpEaWRGYWlsVG9DcmVhdGVQbHVnaW46
OlJlcGx5KCksIGNyZWF0aW9uUGFyYW1ldGVycy5wbHVnaW5JbnN0YW5jZUlEKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIG1fY29ubmVjdGlvbi0+c2VuZFN5bmMoTWVzc2FnZXM6OlBs
dWdpblByb3h5OjpEaWRDcmVhdGVQbHVnaW4od2FudHNXaGVlbEV2ZW50cywgcmVtb3RlTGF5ZXJD
bGllbnRJRCksIE1lc3NhZ2VzOjpQbHVnaW5Qcm94eTo6RGlkQ3JlYXRlUGx1Z2luOjpSZXBseSgp
LCBjcmVhdGlvblBhcmFtZXRlcnMucGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0gICAgCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0
aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24u
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE3NjZmZDRhMTI1M2FkYTFkNWQyMjdm
MmE3OTc1YmJhMGJmNTRlZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24u
aAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiQ29ubmVj
dGlvbi5oIgotI2luY2x1ZGUgIlBsdWdpbi5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NDb25uZWN0
aW9uTWVzc2FnZXNSZXBsaWVzLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgTlBSZW1v
dGVPYmplY3RNYXA7Ci1jbGFzcyBQbHVnaW5Db250cm9sbGVyUHJveHk7Ci1zdHJ1Y3QgUGx1Z2lu
Q3JlYXRpb25QYXJhbWV0ZXJzOwotICAgIAotLy8gQSBjb25uZWN0aW9uIGZyb20gYSBwbHVnLWlu
IHByb2Nlc3MgdG8gYSB3ZWIgcHJvY2Vzcy4KLQotY2xhc3MgV2ViUHJvY2Vzc0Nvbm5lY3Rpb24g
OiBwdWJsaWMgUmVmQ291bnRlZDxXZWJQcm9jZXNzQ29ubmVjdGlvbj4sIElQQzo6Q29ubmVjdGlv
bjo6Q2xpZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlByb2Nlc3NDb25uZWN0aW9u
PiBjcmVhdGUoSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyKTsKLSAgICB2aXJ0dWFsIH5XZWJQ
cm9jZXNzQ29ubmVjdGlvbigpOwotCi0gICAgSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9Ci0gICAgTlBSZW1vdGVPYmplY3RN
YXAqIG5wUmVtb3RlT2JqZWN0TWFwKCkgY29uc3QgeyByZXR1cm4gbV9ucFJlbW90ZU9iamVjdE1h
cC5nZXQoKTsgfQotCi0gICAgdm9pZCByZW1vdmVQbHVnaW5Db250cm9sbGVyUHJveHkoUGx1Z2lu
Q29udHJvbGxlclByb3h5KiwgUGx1Z2luKik7Ci0KLSAgICBzdGF0aWMgdm9pZCBzZXRHbG9iYWxF
eGNlcHRpb24oY29uc3QgU3RyaW5nJik7Ci0gICAgCi1wcml2YXRlOgotICAgIFdlYlByb2Nlc3ND
b25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllcik7Ci0KLSAgICB2b2lkIGFkZFBs
dWdpbkNvbnRyb2xsZXJQcm94eShzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luQ29udHJvbGxlclByb3h5
Pik7Ci0KLSAgICB2b2lkIGRlc3Ryb3lQbHVnaW5Db250cm9sbGVyUHJveHkoUGx1Z2luQ29udHJv
bGxlclByb3h5Kik7Ci0KLSAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAotICAgIHZvaWQg
ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJp
ZGU7Ci0gICAgYm9vbCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpEZWNvZGVyJiwgVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mKSBvdmVycmlkZTsKLSAgICB2b2lk
IGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkUmVjZWl2
ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6TWVzc2FnZU5hbWUpIG92ZXJy
aWRlOwotCi0gICAgLy8gTWVzc2FnZSBoYW5kbGVycy4KLSAgICB2b2lkIGRpZFJlY2VpdmVXZWJQ
cm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7
Ci0gICAgYm9vbCBkaWRSZWNlaXZlU3luY1dlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYpOwot
ICAgIHZvaWQgY3JlYXRlUGx1Z2luKGNvbnN0IFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyYsIE1l
c3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luRGVsYXllZFJlcGx5JiYp
OwotICAgIHZvaWQgY3JlYXRlUGx1Z2luQXN5bmNocm9ub3VzbHkoY29uc3QgUGx1Z2luQ3JlYXRp
b25QYXJhbWV0ZXJzJik7Ci0gICAgdm9pZCBkZXN0cm95UGx1Z2luKHVpbnQ2NF90IHBsdWdpbklu
c3RhbmNlSUQsIGJvb2wgYXN5bmNocm9ub3VzQ3JlYXRpb25JbmNvbXBsZXRlLCBNZXNzYWdlczo6
V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkRlc3Ryb3lQbHVnaW5EZWxheWVkUmVwbHkmJik7Ci0gICAg
Ci0gICAgdm9pZCBjcmVhdGVQbHVnaW5JbnRlcm5hbChjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFt
ZXRlcnMmLCBib29sJiByZXN1bHQsIGJvb2wmIHdhbnRzV2hlZWxFdmVudHMsIHVpbnQzMl90JiBy
ZW1vdGVMYXllckNsaWVudElEKTsKLQotICAgIFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+IG1fY29u
bmVjdGlvbjsKLQotICAgIEhhc2hNYXA8dWludDY0X3QsIHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5D
b250cm9sbGVyUHJveHk+PiBtX3BsdWdpbkNvbnRyb2xsZXJzOwotICAgIFJlZlB0cjxOUFJlbW90
ZU9iamVjdE1hcD4gbV9ucFJlbW90ZU9iamVjdE1hcDsKLSAgICBIYXNoU2V0PHVpbnQ2NF90PiBt
X2FzeW5jaHJvbm91c0luc3RhbmNlSURzVG9JZ25vcmU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9u
Lm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWFlMWM3NWYxMWQ4
YzU2ZjdmZjI3YTQ3YzI5NDk2NmMxODQ2MTVmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNz
Q29ubmVjdGlvbi5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLSMg
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
IwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKLSMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQotCi1tZXNzYWdlcyAtPiBXZWJQcm9jZXNzQ29ubmVjdGlvbiBMZWdhY3lS
ZWNlaXZlciB7Ci0gICAgIyBDcmVhdGVzIGEgcGx1Zy1pbiBpbnN0YW5jZSB1c2luZyB0aGUgZ2l2
ZW4gY3JlYXRpb24gcGFyYW1ldGVycy4KLSAgICBDcmVhdGVQbHVnaW4oc3RydWN0IFdlYktpdDo6
UGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzIHBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycykgLT4gKGJv
b2wgY3JlYXRpb25SZXN1bHQsIGJvb2wgd2FudHNXaGVlbEV2ZW50cywgdWludDMyX3QgcmVtb3Rl
TGF5ZXJDbGllbnRJRCkgU3luY2hyb25vdXMKLQotICAgICMgQ3JlYXRlcyBhIHBsdWctaW4gaW5z
dGFuY2UgYXN5bmNocm9ub3VzbHkgdXNpbmcgdGhlIGdpdmVuIGNyZWF0aW9uIHBhcmFtZXRlcnMu
Ci0gICAgQ3JlYXRlUGx1Z2luQXN5bmNocm9ub3VzbHkoc3RydWN0IFdlYktpdDo6UGx1Z2luQ3Jl
YXRpb25QYXJhbWV0ZXJzIHBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycykKLQotICAgICMgRGVzdHJv
eXMgdGhlIHBsdWctaW4gaW5zdGFuY2Ugd2l0aCB0aGUgZ2l2ZW4gaW5zdGFuY2UgSUQuCi0gICAg
RGVzdHJveVBsdWdpbih1aW50NjRfdCBwbHVnaW5JbnN0YW5jZUlELCBib29sIGFzeW5jaHJvbm91
c0NyZWF0aW9uSW5jb21wbGV0ZSkgLT4gKCkgU3luY2hyb25vdXMKLX0KLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpbkNvbnRyb2xsZXJQ
cm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luQ29udHJv
bGxlclByb3h5TWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTZjZDI3NjY5
ZDM1MzkzOWJmMjRhNzk2MWM1MzkzYjIyMmE3NzAzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1
Z2luQ29udHJvbGxlclByb3h5TWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlBsdWdpbkNvbnRyb2xs
ZXJQcm94eS5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbXBvcnQg
IkxheWVySG9zdGluZ0NvbnRleHQuaCIKLSNpbXBvcnQgIkxheWVyVHJlZUNvbnRleHQuaCIKLSNp
bXBvcnQgIlBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5oIgotI2ltcG9ydCAiUGx1Z2luUHJvY2Vz
cy5oIgotI2ltcG9ydCAiUGx1Z2luUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIKLSNpbXBvcnQgIlBs
dWdpblByb3h5TWVzc2FnZXMuaCIKLSNpbXBvcnQgIldlYlByb2Nlc3NDb25uZWN0aW9uLmgiCi0j
aW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhp
Y3NDb250ZXh0Q0cuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXZvaWQgUGx1Z2luQ29udHJv
bGxlclByb3h5OjpwbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wgcGx1Z2luSGFz
Rm9jdXNBbmRXaW5kb3dIYXNGb2N1cykKLXsKLSAgICBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6UGx1Z2luUHJveHk6OlBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0No
YW5nZWQocGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1cyksIG1fcGx1Z2luSW5zdGFuY2VJ
RCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpzZXRDb21wbGV4VGV4dElucHV0
U3RhdGUoUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlIHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRT
dGF0ZSkKLXsKLSAgICBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
UGx1Z2luUHJveHk6OlNldENvbXBsZXhUZXh0SW5wdXRTdGF0ZShwbHVnaW5Db21wbGV4VGV4dElu
cHV0U3RhdGUpLCBtX3BsdWdpbkluc3RhbmNlSUQsIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hN
ZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKLX0KLQotY29uc3QgTWFjaFNlbmRS
aWdodCYgUGx1Z2luQ29udHJvbGxlclByb3h5Ojpjb21wb3NpdGluZ1JlbmRlclNlcnZlclBvcnQo
KQotewotICAgIHJldHVybiBQbHVnaW5Qcm9jZXNzOjpzaW5nbGV0b24oKS5jb21wb3NpdGluZ1Jl
bmRlclNlcnZlclBvcnQoKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnBsYXRm
b3JtSW5pdGlhbGl6ZShjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmIGNyZWF0aW9uUGFy
YW1ldGVycykKLXsKLSAgICBBU1NFUlQoIW1fbGF5ZXJIb3N0aW5nQ29udGV4dCk7Ci0gICAgdXBk
YXRlTGF5ZXJIb3N0aW5nQ29udGV4dChjcmVhdGlvblBhcmFtZXRlcnMucGFyYW1ldGVycy5sYXll
ckhvc3RpbmdNb2RlKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnBsYXRmb3Jt
RGVzdHJveSgpCi17Ci0gICAgaWYgKCFtX2xheWVySG9zdGluZ0NvbnRleHQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+aW52YWxpZGF0ZSgpOwotICAgIG1f
bGF5ZXJIb3N0aW5nQ29udGV4dCA9IG51bGxwdHI7Ci19Ci0KLXVpbnQzMl90IFBsdWdpbkNvbnRy
b2xsZXJQcm94eTo6cmVtb3RlTGF5ZXJDbGllbnRJRCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2xh
eWVySG9zdGluZ0NvbnRleHQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fbGF5
ZXJIb3N0aW5nQ29udGV4dC0+Y29udGV4dElEKCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxl
clByb3h5OjpwbGF0Zm9ybUdlb21ldHJ5RGlkQ2hhbmdlKCkKLXsKLSAgICBDQUxheWVyICpwbHVn
aW5MYXllciA9IG1fcGx1Z2luLT5wbHVnaW5MYXllcigpOwotCi0gICAgLy8gV2UgZG9uJ3Qgd2Fu
dCB0byBhbmltYXRlIHRvIHRoZSBuZXcgc2l6ZSBzbyB3ZSBkaXNhYmxlIGFjdGlvbnMgZm9yIHRo
aXMgdHJhbnNhY3Rpb24uCi0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5z
YWN0aW9uIHNldFZhbHVlOkBZRVMgZm9yS2V5OmtDQVRyYW5zYWN0aW9uRGlzYWJsZUFjdGlvbnNd
OwotICAgIFtwbHVnaW5MYXllciBzZXRGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIG1fcGx1Z2luU2l6
ZS53aWR0aCgpLCBtX3BsdWdpblNpemUuaGVpZ2h0KCkpXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBj
b21taXRdOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6d2luZG93QW5kVmlld0Zy
YW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNv
b3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3Jk
aW5hdGVzKQotewotICAgIG1fcGx1Z2luLT53aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZCh3aW5k
b3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMp
OwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6c2VuZENvbXBsZXhUZXh0SW5wdXQo
Y29uc3QgU3RyaW5nJiB0ZXh0SW5wdXQpCi17Ci0gICAgbV9wbHVnaW4tPnNlbmRDb21wbGV4VGV4
dElucHV0KHRleHRJbnB1dCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpzZXRM
YXllckhvc3RpbmdNb2RlKHVpbnQzMl90IG9wYXF1ZUxheWVySG9zdGluZ01vZGUpCi17Ci0gICAg
TGF5ZXJIb3N0aW5nTW9kZSBsYXllckhvc3RpbmdNb2RlID0gc3RhdGljX2Nhc3Q8TGF5ZXJIb3N0
aW5nTW9kZT4ob3BhcXVlTGF5ZXJIb3N0aW5nTW9kZSk7Ci0KLSAgICBtX3BsdWdpbi0+c2V0TGF5
ZXJIb3N0aW5nTW9kZShsYXllckhvc3RpbmdNb2RlKTsKLSAgICB1cGRhdGVMYXllckhvc3RpbmdD
b250ZXh0KGxheWVySG9zdGluZ01vZGUpOwotCi0gICAgaWYgKG1fbGF5ZXJIb3N0aW5nQ29udGV4
dCkKLSAgICAgICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBs
dWdpblByb3h5OjpTZXRMYXllckhvc3RpbmdDb250ZXh0SUQobV9sYXllckhvc3RpbmdDb250ZXh0
LT5jb250ZXh0SUQoKSksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29u
dHJvbGxlclByb3h5Ojp1cGRhdGVMYXllckhvc3RpbmdDb250ZXh0KExheWVySG9zdGluZ01vZGUg
bGF5ZXJIb3N0aW5nTW9kZSkKLXsKLSAgICBDQUxheWVyICpwbGF0Zm9ybUxheWVyID0gbV9wbHVn
aW4tPnBsdWdpbkxheWVyKCk7Ci0gICAgaWYgKCFwbGF0Zm9ybUxheWVyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9sYXllckhvc3RpbmdDb250ZXh0KSB7Ci0gICAgICAgIGlmIChtX2xh
eWVySG9zdGluZ0NvbnRleHQtPmxheWVySG9zdGluZ01vZGUoKSA9PSBsYXllckhvc3RpbmdNb2Rl
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+
aW52YWxpZGF0ZSgpOwotICAgIH0KLQotICAgIHN3aXRjaCAobGF5ZXJIb3N0aW5nTW9kZSkgewot
ICAgICAgICBjYXNlIExheWVySG9zdGluZ01vZGU6OkluUHJvY2VzczoKLSAgICAgICAgICAgIG1f
bGF5ZXJIb3N0aW5nQ29udGV4dCA9IExheWVySG9zdGluZ0NvbnRleHQ6OmNyZWF0ZUZvclBvcnQo
UGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkuY29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0KCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0jaWYgSEFWRShPVVRfT0ZfUFJPQ0VTU19MQVlFUl9IT1NU
SU5HKQotICAgICAgICBjYXNlIExheWVySG9zdGluZ01vZGU6Ok91dE9mUHJvY2VzczoKLSAgICAg
ICAgICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dCA9IExheWVySG9zdGluZ0NvbnRleHQ6OmNyZWF0
ZUZvckV4dGVybmFsUGx1Z2luSG9zdGluZ1Byb2Nlc3MoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
I2VuZGlmCi0gICAgfQotCi0gICAgbV9sYXllckhvc3RpbmdDb250ZXh0LT5zZXRDb2xvclNwYWNl
KFdlYkNvcmU6OnNSR0JDb2xvclNwYWNlUmVmKCkpOwotICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4
dC0+c2V0Q29sb3JNYXRjaFVudGFnZ2VkQ29udGVudCh0cnVlKTsKLQotICAgIG1fbGF5ZXJIb3N0
aW5nQ29udGV4dC0+c2V0Um9vdExheWVyKHBsYXRmb3JtTGF5ZXIpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9jZXNzTWFj
Lm1tIGIvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9jZXNzTWFjLm1t
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzM2MmM4MWM2OTExMDhjZGFmNzdiMmU3
OWFhNzA5N2JjYTJkNGQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc01hYy5t
bQorKysgL2Rldi9udWxsCkBAIC0xLDUxMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBv
cnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUGx1Z2luUHJvY2Vzcy5oIgotCi0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbXBvcnQgIkFyZ3VtZW50Q29kZXJzLmgiCi0jaW1wb3J0
ICJOZXRzY2FwZVBsdWdpbi5oIgotI2ltcG9ydCAiUGx1Z2luSW5mb1N0b3JlLmgiCi0jaW1wb3J0
ICJQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0jaW1wb3J0ICJQbHVnaW5Qcm9j
ZXNzUHJveHlNZXNzYWdlcy5oIgotI2ltcG9ydCAiUGx1Z2luUHJvY2Vzc1NoaW0uaCIKLSNpbXBv
cnQgIlBsdWdpblNhbmRib3hQcm9maWxlLmgiCi0jaW1wb3J0ICJTYW5kYm94SW5pdGlhbGl6YXRp
b25QYXJhbWV0ZXJzLmgiCi0jaW1wb3J0ICJTYW5kYm94VXRpbGl0aWVzLmgiCi0jaW1wb3J0IDxD
b3JlQXVkaW8vQXVkaW9IYXJkd2FyZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJp
bmdzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaD4KLSNpbXBv
cnQgPGRsZmNuLmg+Ci0jaW1wb3J0IDxtYWNoLW8vZHlsZC5oPgotI2ltcG9ydCA8bWFjaC1vL2dl
dHNlY3QuaD4KLSNpbXBvcnQgPG1hY2gvbWFjaF92bS5oPgotI2ltcG9ydCA8bWFjaC92bV9zdGF0
aXN0aWNzLmg+Ci0jaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KLSNpbXBvcnQgPHBhbC9zcGkvY2Yv
Q0ZOZXR3b3JrU1BJLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgot
I2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9MYXVuY2hTZXJ2aWNlc1NQSS5oPgotI2ltcG9ydCA8cGFs
L3NwaS9tYWMvSElUb29sYm94U1BJLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL21hYy9OU0FwcGxpY2F0
aW9uU1BJLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL21hYy9OU1dpbmRvd1NQSS5oPgotI2ltcG9ydCA8
c3lzZXhpdHMuaD4KLSNpbXBvcnQgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KLSNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgotCi1jb25zdCBD
RlN0cmluZ1JlZiBrTFNQbHVnSW5CdW5kbGVJZGVudGlmaWVyS2V5ID0gQ0ZTVFIoIkxTUGx1Z0lu
QnVuZGxlSWRlbnRpZmllcktleSIpOwotCi0vLyBUaGVzZSB2YWx1ZXMgd2VyZSBjaG9zZW4gdG8g
bWF0Y2ggZGVmYXVsdCBOU1VSTENhY2hlIHNpemVzIGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGlu
Zy4KLWNvbnN0IE5TVUludGVnZXIgcGx1Z2luTWVtb3J5Q2FjaGVTaXplID0gNTEyMDAwOwotY29u
c3QgTlNVSW50ZWdlciBwbHVnaW5EaXNrQ2FjaGVTaXplID0gMjAwMDAwMDA7Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1jbGFzcyBGdWxsc2NyZWVuV2luZG93VHJhY2tlciB7Ci0gICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRnVsbHNjcmVlbldpbmRvd1RyYWNrZXIpOwotCi1wdWJsaWM6Ci0gICAg
RnVsbHNjcmVlbldpbmRvd1RyYWNrZXIoKSB7IH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB2b2lkIHdpbmRvd1Nob3duKFQgd2luZG93KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB2b2lkIHdpbmRvd0hpZGRlbihUIHdpbmRvdyk7Ci0KLXByaXZhdGU6Ci0gICAgSGFzaFNldDxD
R1dpbmRvd0lEPiBtX3dpbmRvd3M7Ci19OwotCi1zdGF0aWMgYm9vbCByZWN0Q292ZXJzQW55U2Ny
ZWVuKE5TUmVjdCByZWN0KQotewotICAgIGZvciAoTlNTY3JlZW4gKnNjcmVlbiBpbiBbTlNTY3Jl
ZW4gc2NyZWVuc10pIHsKLSAgICAgICAgaWYgKE5TQ29udGFpbnNSZWN0KHJlY3QsIFtzY3JlZW4g
ZnJhbWVdKSkKLSAgICAgICAgICAgIHJldHVybiBZRVM7Ci0gICAgfQotICAgIHJldHVybiBOTzsK
LX0KLQotc3RhdGljIGJvb2wgd2luZG93Q292ZXJzQW55U2NyZWVuKE5TV2luZG93ICp3aW5kb3cp
Ci17Ci0gICAgcmV0dXJuIHJlY3RDb3ZlcnNBbnlTY3JlZW4od2luZG93LmZyYW1lKTsKLX0KLQot
c3RhdGljIENHV2luZG93SUQgY2dXaW5kb3dJRChOU1dpbmRvdyAqd2luZG93KQotewotICAgIHJl
dHVybiB3aW5kb3cud2luZG93TnVtYmVyOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9p
ZCBGdWxsc2NyZWVuV2luZG93VHJhY2tlcjo6d2luZG93U2hvd24oVCB3aW5kb3cpCi17Ci0gICAg
Q0dXaW5kb3dJRCB3aW5kb3dJRCA9IGNnV2luZG93SUQod2luZG93KTsKLSAgICBpZiAoIXdpbmRv
d0lEKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB0aGlzIHdpbmRvdyBpcyBhbHJlYWR5
IHZpc2libGUgdGhlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGRvLgotICAgIGlmIChtX3dpbmRvd3Mu
Y29udGFpbnMod2luZG93SUQpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gSWYgdGhl
IHdpbmRvdyBpcyBub3QgZnVsbC1zY3JlZW4gdGhlbiB3ZSdyZSBub3QgaW50ZXJlc3RlZCBpbiBp
dC4KLSAgICBpZiAoIXdpbmRvd0NvdmVyc0FueVNjcmVlbih3aW5kb3cpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBib29sIHdpbmRvd1NldFdhc0VtcHR5ID0gbV93aW5kb3dzLmlzRW1wdHkoKTsK
LQotICAgIG1fd2luZG93cy5hZGQod2luZG93SUQpOwotICAgIAotICAgIC8vIElmIHRoaXMgaXMg
dGhlIGZpcnN0IGZ1bGwgc2NyZWVuIHdpbmRvdyB0byBiZSBzaG93biwgbm90aWZ5IHRoZSBVSSBw
cm9jZXNzLgotICAgIGlmICh3aW5kb3dTZXRXYXNFbXB0eSkKLSAgICAgICAgUGx1Z2luUHJvY2Vz
czo6c2luZ2xldG9uKCkuc2V0RnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZyh0cnVlKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgRnVsbHNjcmVlbldpbmRvd1RyYWNrZXI6OndpbmRv
d0hpZGRlbihUIHdpbmRvdykKLXsKLSAgICBDR1dpbmRvd0lEIHdpbmRvd0lEID0gY2dXaW5kb3dJ
RCh3aW5kb3cpOwotICAgIGlmICghd2luZG93SUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IElmIHRoaXMgaXMgbm90IGEgd2luZG93IHRoYXQgd2UncmUgdHJhY2tpbmcgdGhlbiB0aGVyZSBp
cyBub3RoaW5nIHRvIGRvLgotICAgIGlmICghbV93aW5kb3dzLnJlbW92ZSh3aW5kb3dJRCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHRoaXMgd2FzIHRoZSBsYXN0IGZ1bGwgc2NyZWVu
IHdpbmRvdyB0aGF0IHdhcyB2aXNpYmxlLCBub3RpZnkgdGhlIFVJIHByb2Nlc3MuCi0gICAgaWYg
KG1fd2luZG93cy5pc0VtcHR5KCkpCi0gICAgICAgIFBsdWdpblByb2Nlc3M6OnNpbmdsZXRvbigp
LnNldEZ1bGxzY3JlZW5XaW5kb3dJc1Nob3dpbmcoZmFsc2UpOwotfQotCi1zdGF0aWMgRnVsbHNj
cmVlbldpbmRvd1RyYWNrZXImIGZ1bGxzY3JlZW5XaW5kb3dUcmFja2VyKCkKLXsKLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8RnVsbHNjcmVlbldpbmRvd1RyYWNrZXI+IGZ1bGxzY3JlZW5XaW5k
b3dUcmFja2VyOwotICAgIHJldHVybiBmdWxsc2NyZWVuV2luZG93VHJhY2tlcjsKLX0KLQotc3Rh
dGljIHZvaWQgc2V0TW9kYWwoYm9vbCBtb2RhbFdpbmRvd0lzU2hvd2luZykKLXsKLSAgICBQbHVn
aW5Qcm9jZXNzOjpzaW5nbGV0b24oKS5zZXRNb2RhbFdpbmRvd0lzU2hvd2luZyhtb2RhbFdpbmRv
d0lzU2hvd2luZyk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBtb2RhbENvdW50OwotCi1zdGF0aWMg
dm9pZCBiZWdpbk1vZGFsKCkKLXsKLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19C
RUdJTgotICAgIC8vIE1ha2Ugc3VyZSB0byBtYWtlIG91cnNlbHZlcyB0aGUgZnJvbnQgcHJvY2Vz
cwotICAgIFByb2Nlc3NTZXJpYWxOdW1iZXIgcHNuOwotICAgIEdldEN1cnJlbnRQcm9jZXNzKCZw
c24pOwotICAgIFNldEZyb250UHJvY2VzcygmcHNuKTsKLSAgICBBTExPV19ERVBSRUNBVEVEX0RF
Q0xBUkFUSU9OU19FTkQKLQotICAgIGlmICghbW9kYWxDb3VudCsrKQotICAgICAgICBzZXRNb2Rh
bCh0cnVlKTsKLX0KLQotc3RhdGljIHZvaWQgZW5kTW9kYWwoKQotewotICAgIGlmICghLS1tb2Rh
bENvdW50KQotICAgICAgICBzZXRNb2RhbChmYWxzZSk7Ci19Ci0KLXN0YXRpYyBJTVAgTlNBcHBs
aWNhdGlvbl9SdW5Nb2RhbEZvcldpbmRvdzsKLQotc3RhdGljIE5TSW50ZWdlciByZXBsYWNlZFJ1
bk1vZGFsRm9yV2luZG93KGlkIHNlbGYsIFNFTCBfY21kLCBOU1dpbmRvdyogd2luZG93KQotewot
ICAgIGJlZ2luTW9kYWwoKTsKLSAgICBOU0ludGVnZXIgcmVzdWx0ID0gKChOU0ludGVnZXIgKCop
KGlkLCBTRUwsIE5TV2luZG93ICopKU5TQXBwbGljYXRpb25fUnVuTW9kYWxGb3JXaW5kb3cpKHNl
bGYsIF9jbWQsIHdpbmRvdyk7Ci0gICAgZW5kTW9kYWwoKTsKLQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXN0YXRpYyBib29sIG9sZFBsdWdpblByb2Nlc3NOYW1lU2hvdWxkRXF1YWxOZXdQbHVn
aW5Qcm9jZXNzTmFtZUZvckFkb2JlUmVhZGVyOwotCi1zdGF0aWMgYm9vbCBpc0Fkb2JlQWNyb2Jh
dEFkZHJlc3MoY29uc3Qgdm9pZCogYWRkcmVzcykKLXsKLSAgICBEbF9pbmZvIGltYWdlSW5mbzsK
LSAgICBpZiAoIWRsYWRkcihhZGRyZXNzLCAmaW1hZ2VJbmZvKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgY29uc3QgY2hhciogcGF0aFN1ZmZpeCA9ICIvQ29udGVudHMvRnJhbWV3b3Jr
cy9BY3JvYmF0LmZyYW1ld29yay9BY3JvYmF0IjsKLQotICAgIGludCBwYXRoU3VmZml4TGVuZ3Ro
ID0gc3RybGVuKHBhdGhTdWZmaXgpOwotICAgIGludCBpbWFnZUZpbGVQYXRoTGVuZ3RoID0gc3Ry
bGVuKGltYWdlSW5mby5kbGlfZm5hbWUpOwotCi0gICAgaWYgKGltYWdlRmlsZVBhdGhMZW5ndGgg
PCBwYXRoU3VmZml4TGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc3Ry
Y21wKGltYWdlSW5mby5kbGlfZm5hbWUgKyAoaW1hZ2VGaWxlUGF0aExlbmd0aCAtIHBhdGhTdWZm
aXhMZW5ndGgpLCBwYXRoU3VmZml4KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIHN0cmluZ0NvbXBhcmUoQ0ZTdHJpbmdSZWYgYSwg
Q0ZTdHJpbmdSZWYgYiwgQ0ZTdHJpbmdDb21wYXJlRmxhZ3Mgb3B0aW9ucywgdm9pZCogcmV0dXJu
QWRkcmVzcywgQ0ZDb21wYXJpc29uUmVzdWx0JiByZXN1bHQpCi17Ci0gICAgaWYgKHB0aHJlYWRf
bWFpbl9ucCgpICE9IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghb2xkUGx1
Z2luUHJvY2Vzc05hbWVTaG91bGRFcXVhbE5ld1BsdWdpblByb2Nlc3NOYW1lRm9yQWRvYmVSZWFk
ZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChvcHRpb25zICE9IGtDRkNvbXBh
cmVDYXNlSW5zZW5zaXRpdmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IGNo
YXIqIGFDU3RyaW5nID0gQ0ZTdHJpbmdHZXRDU3RyaW5nUHRyKGEsIGtDRlN0cmluZ0VuY29kaW5n
QVNDSUkpOwotICAgIGlmICghYUNTdHJpbmcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGNvbnN0IGNoYXIqIGJDU3RyaW5nID0gQ0ZTdHJpbmdHZXRDU3RyaW5nUHRyKGIsIGtDRlN0cmlu
Z0VuY29kaW5nQVNDSUkpOwotICAgIGlmICghYkNTdHJpbmcpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChzdHJjbXAoYUNTdHJpbmcsICJjb20uYXBwbGUuV2ViS2l0LlBsdWdpblBy
b2Nlc3MiKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHN0cmNtcChiQ1N0cmlu
ZywgImNvbS5hcHBsZS5XZWJLaXQuUGx1Z2luLjY0IikpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIC8vIENoZWNrIGlmIHRoZSBMSFMgc3RyaW5nIGNvbWVzIGZyb20gdGhlIEFjcm9iYXQg
ZnJhbWV3b3JrLgotICAgIGlmICghaXNBZG9iZUFjcm9iYXRBZGRyZXNzKGEpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBDaGVjayBpZiB0aGUgcmV0dXJuIGFkcmVzcyBpcyBwYXJ0
IG9mIHRoZSBBY3JvYmF0IGZyYW1ld29yayBhcyB3ZWxsLgotICAgIGlmICghaXNBZG9iZUFjcm9i
YXRBZGRyZXNzKHJldHVybkFkZHJlc3MpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXN1bHQgPSBrQ0ZDb21wYXJlRXF1YWxUbzsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZVNoaW0oKQotewotICAgIC8vIEluaXRpYWxpemUgdGhlIHNoaW0gZm9y
IDMyLWJpdCBvbmx5LgotICAgIGNvbnN0IFBsdWdpblByb2Nlc3NTaGltQ2FsbGJhY2tzIGNhbGxi
YWNrcyA9IHsKLSAgICAgICAgc3RyaW5nQ29tcGFyZSwKLSAgICB9OwotCi0gICAgUGx1Z2luUHJv
Y2Vzc1NoaW1Jbml0aWFsaXplRnVuYyBpbml0RnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2lu
UHJvY2Vzc1NoaW1Jbml0aWFsaXplRnVuYz4oZGxzeW0oUlRMRF9ERUZBVUxULCAiV2ViS2l0UGx1
Z2luUHJvY2Vzc1NoaW1Jbml0aWFsaXplIikpOwotICAgIGluaXRGdW5jKGNhbGxiYWNrcyk7Ci19
Ci0KLXN0YXRpYyB2b2lkICgqTlNDb25jcmV0ZVRhc2tfbGF1bmNoKShOU1Rhc2sgKiwgU0VMKTsK
LQotc3RhdGljIHZvaWQgcmVwbGFjZWROU0NvbmNyZXRlVGFza19sYXVuY2goTlNUYXNrICpzZWxm
LCBTRUwgX2NtZCkKLXsKLSAgICBTdHJpbmcgbGF1bmNoUGF0aCA9IHNlbGYubGF1bmNoUGF0aDsK
LQotICAgIGlmIChQbHVnaW5Qcm9jZXNzOjpzaW5nbGV0b24oKS5sYXVuY2hQcm9jZXNzKGxhdW5j
aFBhdGgsIG1ha2VWZWN0b3I8U3RyaW5nPihzZWxmLmFyZ3VtZW50cykpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBOU0NvbmNyZXRlVGFza19sYXVuY2goc2VsZiwgX2NtZCk7Ci19Ci0KLXN0YXRp
YyBOU1J1bm5pbmdBcHBsaWNhdGlvbiAqKCpOU1dvcmtzcGFjZV9sYXVuY2hBcHBsaWNhdGlvbkF0
VVJMX29wdGlvbnNfY29uZmlndXJhdGlvbl9lcnJvcikoTlNXb3Jrc3BhY2UgKiwgU0VMLCBOU1VS
TCAqLCBOU1dvcmtzcGFjZUxhdW5jaE9wdGlvbnMsIE5TRGljdGlvbmFyeSAqLCBOU0Vycm9yICoq
KTsKLQotc3RhdGljIE5TUnVubmluZ0FwcGxpY2F0aW9uICpyZXBsYWNlZE5TV29ya3NwYWNlX2xh
dW5jaEFwcGxpY2F0aW9uQXRVUkxfb3B0aW9uc19jb25maWd1cmF0aW9uX2Vycm9yKE5TV29ya3Nw
YWNlICpzZWxmLCBTRUwgX2NtZCwgTlNVUkwgKnVybCwgTlNXb3Jrc3BhY2VMYXVuY2hPcHRpb25z
IG9wdGlvbnMsIE5TRGljdGlvbmFyeSAqY29uZmlndXJhdGlvbiwgTlNFcnJvciAqKmVycm9yKQot
ewotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgYXV0byBhcmd1
bWVudHMgPSBtYWtlVmVjdG9yPFN0cmluZz4oW2NvbmZpZ3VyYXRpb24gb2JqZWN0Rm9yS2V5Ok5T
V29ya3NwYWNlTGF1bmNoQ29uZmlndXJhdGlvbkFyZ3VtZW50c10pOwotICAgIEFMTE9XX0RFUFJF
Q0FURURfREVDTEFSQVRJT05TX0VORAotCi0gICAgaWYgKFBsdWdpblByb2Nlc3M6OnNpbmdsZXRv
bigpLmxhdW5jaEFwcGxpY2F0aW9uQXRVUkwoVVJMKHVybCkuc3RyaW5nKCksIGFyZ3VtZW50cykp
IHsKLSAgICAgICAgaWYgKGVycm9yKQotICAgICAgICAgICAgKmVycm9yID0gbmlsOwotICAgICAg
ICByZXR1cm4gbmlsOwotICAgIH0KLQotICAgIHJldHVybiBOU1dvcmtzcGFjZV9sYXVuY2hBcHBs
aWNhdGlvbkF0VVJMX29wdGlvbnNfY29uZmlndXJhdGlvbl9lcnJvcihzZWxmLCBfY21kLCB1cmws
IG9wdGlvbnMsIGNvbmZpZ3VyYXRpb24sIGVycm9yKTsKLX0KLQotc3RhdGljIEJPT0wgKCpOU1dv
cmtzcGFjZV9vcGVuRmlsZSkoTlNXb3Jrc3BhY2UgKiwgU0VMLCBOU1N0cmluZyAqKTsKLQotc3Rh
dGljIEJPT0wgcmVwbGFjZWROU1dvcmtzcGFjZV9vcGVuRmlsZShOU1dvcmtzcGFjZSAqc2VsZiwg
U0VMIF9jbWQsIE5TU3RyaW5nICpmdWxsUGF0aCkKLXsKLSAgICBpZiAoUGx1Z2luUHJvY2Vzczo6
c2luZ2xldG9uKCkub3BlbkZpbGUoZnVsbFBhdGgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIHJldHVybiBOU1dvcmtzcGFjZV9vcGVuRmlsZShzZWxmLCBfY21kLCBmdWxsUGF0aCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIGluaXRpYWxpemVDb2NvYU92ZXJyaWRlcygpCi17Ci0gICAgLy8gT3Zl
cnJpZGUgLVtOU0NvbmNyZXRlVGFzayBsYXVuY2g6XQotICAgIE1ldGhvZCBsYXVuY2hNZXRob2Qg
PSBjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChvYmpjX2dldENsYXNzKCJOU0NvbmNyZXRlVGFzayIp
LCBAc2VsZWN0b3IobGF1bmNoKSk7Ci0gICAgTlNDb25jcmV0ZVRhc2tfbGF1bmNoID0gcmVpbnRl
cnByZXRfY2FzdDx2b2lkICgqKShOU1Rhc2sgKiwgU0VMKT4obWV0aG9kX3NldEltcGxlbWVudGF0
aW9uKGxhdW5jaE1ldGhvZCwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KHJlcGxhY2VkTlNDb25jcmV0
ZVRhc2tfbGF1bmNoKSkpOwotCi0gICAgLy8gT3ZlcnJpZGUgLVtOU1dvcmtzcGFjZSBsYXVuY2hB
cHBsaWNhdGlvbkF0VVJMOm9wdGlvbnM6Y29uZmlndXJhdGlvbjplcnJvcjpdCi0gICAgLy8gRklY
TUU6IEFyZSB0aGVzZSBkZXByZWNhdGlvbiBhbGxvd2FuY2VzIG5lY2Vzc2FyeT8KLSAgICBNZXRo
b2QgbGF1bmNoQXBwbGljYXRpb25BdFVSTE9wdGlvbnNDb25maWd1cmF0aW9uRXJyb3JNZXRob2Qg
PSBjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChvYmpjX2dldENsYXNzKCJOU1dvcmtzcGFjZSIpLCBA
c2VsZWN0b3IobGF1bmNoQXBwbGljYXRpb25BdFVSTDpvcHRpb25zOmNvbmZpZ3VyYXRpb246ZXJy
b3I6KSk7Ci0gICAgTlNXb3Jrc3BhY2VfbGF1bmNoQXBwbGljYXRpb25BdFVSTF9vcHRpb25zX2Nv
bmZpZ3VyYXRpb25fZXJyb3IgPSByZWludGVycHJldF9jYXN0PE5TUnVubmluZ0FwcGxpY2F0aW9u
ICooKikoTlNXb3Jrc3BhY2UgKiwgU0VMLCBOU1VSTCAqLCBOU1dvcmtzcGFjZUxhdW5jaE9wdGlv
bnMsIE5TRGljdGlvbmFyeSAqLCBOU0Vycm9yICoqKT4obWV0aG9kX3NldEltcGxlbWVudGF0aW9u
KGxhdW5jaEFwcGxpY2F0aW9uQXRVUkxPcHRpb25zQ29uZmlndXJhdGlvbkVycm9yTWV0aG9kLCBy
ZWludGVycHJldF9jYXN0PElNUD4ocmVwbGFjZWROU1dvcmtzcGFjZV9sYXVuY2hBcHBsaWNhdGlv
bkF0VVJMX29wdGlvbnNfY29uZmlndXJhdGlvbl9lcnJvcikpKTsKLQotICAgIC8vIE92ZXJyaWRl
IC1bTlNXb3Jrc3BhY2Ugb3BlbkZpbGU6XQotICAgIE1ldGhvZCBvcGVuRmlsZU1ldGhvZCA9IGNs
YXNzX2dldEluc3RhbmNlTWV0aG9kKG9iamNfZ2V0Q2xhc3MoIk5TV29ya3NwYWNlIiksIEBzZWxl
Y3RvcihvcGVuRmlsZTopKTsKLSAgICBOU1dvcmtzcGFjZV9vcGVuRmlsZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Qk9PTCAoKikoTlNXb3Jrc3BhY2UgKiwgU0VMLCBOU1N0cmluZyAqKT4obWV0aG9kX3Nl
dEltcGxlbWVudGF0aW9uKG9wZW5GaWxlTWV0aG9kLCByZWludGVycHJldF9jYXN0PElNUD4ocmVw
bGFjZWROU1dvcmtzcGFjZV9vcGVuRmlsZSkpKTsKLQotICAgIC8vIE92ZXJyaWRlIC1bTlNBcHBs
aWNhdGlvbiBydW5Nb2RhbEZvcldpbmRvdzpdCi0gICAgTWV0aG9kIHJ1bk1vZGFsRm9yV2luZG93
TWV0aG9kID0gY2xhc3NfZ2V0SW5zdGFuY2VNZXRob2Qob2JqY19nZXRDbGFzcygiTlNBcHBsaWNh
dGlvbiIpLCBAc2VsZWN0b3IocnVuTW9kYWxGb3JXaW5kb3c6KSk7Ci0gICAgTlNBcHBsaWNhdGlv
bl9SdW5Nb2RhbEZvcldpbmRvdyA9IG1ldGhvZF9zZXRJbXBsZW1lbnRhdGlvbihydW5Nb2RhbEZv
cldpbmRvd01ldGhvZCwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KHJlcGxhY2VkUnVuTW9kYWxGb3JX
aW5kb3cpKTsKLQotICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyICpkZWZhdWx0Q2VudGVyID0gW05T
Tm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdOwotCi0gICAgLy8gVHJhY2sgd2hlbiBh
bnkgQ29jb2Egd2luZG93IGlzIGFib3V0IHRvIGJlIGJlIHNob3duLgotICAgIFtkZWZhdWx0Q2Vu
dGVyIGFkZE9ic2VydmVyRm9yTmFtZTpOU1dpbmRvd1dpbGxPcmRlck9uU2NyZWVuTm90aWZpY2F0
aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Om5pbAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZTpuaWwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVzaW5nQmxvY2s6XihOU05vdGlmaWNhdGlvbiAqbm90aWZpY2F0aW9uKSB7IGZ1bGxzY3Jl
ZW5XaW5kb3dUcmFja2VyKCkud2luZG93U2hvd24oW25vdGlmaWNhdGlvbiBvYmplY3RdKTsgfV07
Ci0gICAgLy8gVHJhY2sgd2hlbiBhbnkgQ29jb2Egd2luZG93IGlzIGFib3V0IHRvIGJlIGhpZGRl
bi4KLSAgICBbZGVmYXVsdENlbnRlciBhZGRPYnNlcnZlckZvck5hbWU6TlNXaW5kb3dXaWxsT3Jk
ZXJPZmZTY3JlZW5Ob3RpZmljYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
YmplY3Q6bmlsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlOm5pbAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmdCbG9jazpeKE5TTm90aWZpY2F0aW9uICpub3Rp
ZmljYXRpb24pIHsgZnVsbHNjcmVlbldpbmRvd1RyYWNrZXIoKS53aW5kb3dIaWRkZW4oW25vdGlm
aWNhdGlvbiBvYmplY3RdKTsgfV07Ci0KLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzOjpzZXRNb2Rh
bFdpbmRvd0lzU2hvd2luZyhib29sIG1vZGFsV2luZG93SXNTaG93aW5nKQotewotICAgIHBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpblByb2Nlc3NQcm94eTo6
U2V0TW9kYWxXaW5kb3dJc1Nob3dpbmcobW9kYWxXaW5kb3dJc1Nob3dpbmcpLCAwKTsKLX0KLQot
dm9pZCBQbHVnaW5Qcm9jZXNzOjpzZXRGdWxsc2NyZWVuV2luZG93SXNTaG93aW5nKGJvb2wgZnVs
bHNjcmVlbldpbmRvd0lzU2hvd2luZykKLXsKLSAgICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Qcm9jZXNzUHJveHk6OlNldEZ1bGxzY3JlZW5XaW5kb3dJ
c1Nob3dpbmcoZnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZyksIDApOwotfQotCi1ib29sIFBsdWdp
blByb2Nlc3M6OmxhdW5jaFByb2Nlc3MoY29uc3QgU3RyaW5nJiBsYXVuY2hQYXRoLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRzKQotewotICAgIGJvb2wgcmVzdWx0OwotICAgIGlmICgh
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OlBsdWdpblByb2Nl
c3NQcm94eTo6TGF1bmNoUHJvY2VzcyhsYXVuY2hQYXRoLCBhcmd1bWVudHMpLCBNZXNzYWdlczo6
UGx1Z2luUHJvY2Vzc1Byb3h5OjpMYXVuY2hQcm9jZXNzOjpSZXBseShyZXN1bHQpLCAwKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBQbHVn
aW5Qcm9jZXNzOjpsYXVuY2hBcHBsaWNhdGlvbkF0VVJMKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5n
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRzKQotewotICAgIGJvb2wgcmVzdWx0ID0g
ZmFsc2U7Ci0gICAgaWYgKCFwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNz
YWdlczo6UGx1Z2luUHJvY2Vzc1Byb3h5OjpMYXVuY2hBcHBsaWNhdGlvbkF0VVJMKHVybFN0cmlu
ZywgYXJndW1lbnRzKSwgTWVzc2FnZXM6OlBsdWdpblByb2Nlc3NQcm94eTo6TGF1bmNoUHJvY2Vz
czo6UmVwbHkocmVzdWx0KSwgMCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLWJvb2wgUGx1Z2luUHJvY2Vzczo6b3BlblVSTChjb25zdCBTdHJpbmcm
IHVybFN0cmluZywgaW50MzJfdCYgc3RhdHVzLCBTdHJpbmcmIGxhdW5jaGVkVVJMU3RyaW5nKQot
ewotICAgIGJvb2wgcmVzdWx0OwotICAgIGlmICghcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZFN5bmMoTWVzc2FnZXM6OlBsdWdpblByb2Nlc3NQcm94eTo6T3BlblVSTCh1cmxTdHJpbmcp
LCBNZXNzYWdlczo6UGx1Z2luUHJvY2Vzc1Byb3h5OjpPcGVuVVJMOjpSZXBseShyZXN1bHQsIHN0
YXR1cywgbGF1bmNoZWRVUkxTdHJpbmcpLCAwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBQbHVnaW5Qcm9jZXNzOjpvcGVuRmlsZShjb25z
dCBTdHJpbmcmIGZ1bGxQYXRoKQotewotICAgIGJvb2wgcmVzdWx0OwotICAgIGlmICghcGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OlBsdWdpblByb2Nlc3NQcm94
eTo6T3BlbkZpbGUoZnVsbFBhdGgpLCBNZXNzYWdlczo6UGx1Z2luUHJvY2Vzc1Byb3h5OjpPcGVu
RmlsZTo6UmVwbHkocmVzdWx0KSwgMCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXpl
UGx1Z2luUHJvY2VzcyhQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVy
cykKLXsKLSAgICBtX2NvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydCA9IFdURk1vdmUocGFyYW1l
dGVycy5hY2NlbGVyYXRlZENvbXBvc2l0aW5nUG9ydCk7Ci0KLSAgICBbTlNVUkxDYWNoZSBzZXRT
aGFyZWRVUkxDYWNoZTphZG9wdE5TKFtbTlNVUkxDYWNoZSBhbGxvY10KLSAgICAgICAgaW5pdFdp
dGhNZW1vcnlDYXBhY2l0eTpwbHVnaW5NZW1vcnlDYWNoZVNpemUKLSAgICAgICAgZGlza0NhcGFj
aXR5OnBsdWdpbkRpc2tDYWNoZVNpemUKLSAgICAgICAgZGlza1BhdGg6bV9uc3VybENhY2hlRGly
ZWN0b3J5XSkuZ2V0KCldOwotCi0gICAgLy8gRGlzYWJsZSBEYXJrIE1vZGUgaW4gdGhlIHBsdWdp
biBwcm9jZXNzIHRvIGF2b2lkIHJlbmRlcmluZyBpc3N1ZXMuCi0gICAgW05TQXBwIHNldEFwcGVh
cmFuY2U6W05TQXBwZWFyYW5jZSBhcHBlYXJhbmNlTmFtZWQ6TlNBcHBlYXJhbmNlTmFtZUFxdWFd
XTsKLQotI2lmIEhBVkUoQVBQX1NTTykgfHwgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgW05T
VVJMU2Vzc2lvbiBfZGlzYWJsZUFwcFNTT107Ci0jZW5kaWYKLX0KLQotdm9pZCBQbHVnaW5Qcm9j
ZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVQcm9jZXNzKGNvbnN0IEF1eGlsaWFyeVByb2Nlc3NJbml0
aWFsaXphdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCi17Ci0gICAgaW5pdGlhbGl6ZVNoaW0o
KTsKLQotICAgIGluaXRpYWxpemVDb2NvYU92ZXJyaWRlcygpOwotCi0gICAgYm9vbCBleHBlcmlt
ZW50YWxQbHVnSW5TYW5kYm94UHJvZmlsZXNFbmFibGVkID0gcGFyYW1ldGVycy5leHRyYUluaXRp
YWxpemF0aW9uRGF0YS5nZXQoImV4cGVyaW1lbnRhbC1zYW5kYm94LXBsdWdpbiIpID09ICIxIjsK
LSAgICBXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNl
dEV4cGVyaW1lbnRhbFBsdWdJblNhbmRib3hQcm9maWxlc0VuYWJsZWQoZXhwZXJpbWVudGFsUGx1
Z0luU2FuZGJveFByb2ZpbGVzRW5hYmxlZCk7Ci0KLSAgICAvLyBGSVhNRTogSXQgd291bGQgYmUg
YmV0dGVyIHRvIHByb3h5IFNldEN1cnNvciBjYWxscyBvdmVyIHRvIHRoZSBVSSBwcm9jZXNzIGlu
c3RlYWQgb2YKLSAgICAvLyBhbGxvd2luZyBwbHVnLWlucyB0byBjaGFuZ2UgdGhlIG1vdXNlIGN1
cnNvciBhdCBhbnkgdGltZS4KLSAgICAvLyBGSVhNRTogU2V0c0N1cnNvckluQmFja2dyb3VuZCBj
b25uZWN0aW9uIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2Yga0NHU1NldHNDdXJz
b3JJbkJhY2tncm91bmRUYWdCaXQgd2luZG93IHRhZyBiaXQuCi0gICAgLy8gPHJkYXI6Ly9wcm9i
bGVtLzc3NTI0MjI+IGFza3MgZm9yIGFuIEFQSSB0byBzZXQgY3Vyc29yIGZyb20gYmFja2dyb3Vu
ZCBwcm9jZXNzZXMuCi0gICAgQ0dTQ29ubmVjdGlvbklEIGNpZCA9IENHU01haW5Db25uZWN0aW9u
SUQoKTsKLSAgICBDR1NTZXRDb25uZWN0aW9uUHJvcGVydHkoY2lkLCBjaWQsIENGU1RSKCJTZXRz
Q3Vyc29ySW5CYWNrZ3JvdW5kIiksIChDRlR5cGVSZWYpa0NGQm9vbGVhblRydWUpOwotCi0gICAg
UmV0YWluUHRyPENGVVJMUmVmPiBwbHVnaW5VUkwgPSBhZG9wdENGKENGVVJMQ3JlYXRlV2l0aEZp
bGVTeXN0ZW1QYXRoKDAsIG1fcGx1Z2luUGF0aC5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBrQ0ZV
UkxQT1NJWFBhdGhTdHlsZSwgZmFsc2UpKTsKLSAgICBpZiAoIXBsdWdpblVSTCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgUmV0YWluUHRyPENGQnVuZGxlUmVmPiBwbHVnaW5CdW5kbGUgPSBhZG9w
dENGKENGQnVuZGxlQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIHBsdWdpblVSTC5nZXQoKSkp
OwotICAgIGlmICghcGx1Z2luQnVuZGxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BsdWdp
bkJ1bmRsZUlkZW50aWZpZXIgPSBDRkJ1bmRsZUdldElkZW50aWZpZXIocGx1Z2luQnVuZGxlLmdl
dCgpKTsKLQotICAgIGlmIChtX3BsdWdpbkJ1bmRsZUlkZW50aWZpZXIgPT0gImNvbS5hZG9iZS5h
Y3JvYmF0LnBkZnZpZXdlck5QQVBJIikKLSAgICAgICAgb2xkUGx1Z2luUHJvY2Vzc05hbWVTaG91
bGRFcXVhbE5ld1BsdWdpblByb2Nlc3NOYW1lRm9yQWRvYmVSZWFkZXIgPSB0cnVlOwotCi0gICAg
Ly8gRklYTUU6IFdvcmthcm91bmQgZm9yIEphdmEgbm90IGxpa2luZyBpdHMgcGx1Z2luIHByb2Nl
c3MgdG8gYmUgc3VwcHJlc3NlZCAtIDxyZGFyOi8vcHJvYmxlbS8xNDI2Nzg0Mz4KLSAgICBpZiAo
bV9wbHVnaW5CdW5kbGVJZGVudGlmaWVyID09ICJjb20ub3JhY2xlLmphdmEuSmF2YUFwcGxldFBs
dWdpbiIpCi0gICAgICAgIChuZXcgVXNlckFjdGl2aXR5KCJjb20ub3JhY2xlLmphdmEuSmF2YUFw
cGxldFBsdWdpbiIpKS0+c3RhcnQoKTsKLSAgICAKLSAgICBpZiAoIXBsdWdpbkhhc1NhbmRib3hQ
cm9maWxlKG1fcGx1Z2luQnVuZGxlSWRlbnRpZmllcikpIHsKLSAgICAgICAgLy8gQWxsb3cgQXBw
bGUgRXZlbnRzIGZyb20gQ2l0cml4IHBsdWdpbi4gVGhpcyBjYW4gYmUgcmVtb3ZlZCB3aGVuIDxy
ZGFyOi8vcHJvYmxlbS8xNDAxMjgyMz4gaXMgZml4ZWQuCi0gICAgICAgIHNldGVudigiX19BUFBM
RUVWRU5UU1NFUlZJQ0VOQU1FIiwgImNvbS5hcHBsZS5jb3Jlc2VydmljZXMuYXBwbGVldmVudHMi
LCAxKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzczo6aW5pdGlhbGl6ZVByb2Nlc3NO
YW1lKGNvbnN0IEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmIHBhcmFt
ZXRlcnMpCi17Ci0gICAgTlNTdHJpbmcgKmFwcGxpY2F0aW9uTmFtZSA9IFtOU1N0cmluZyBzdHJp
bmdXaXRoRm9ybWF0OldFQl9VSV9OU1NUUklORyhAIiVAICglQCBJbnRlcm5ldCBwbHVnLWluKSIs
ICJ2aXNpYmxlIG5hbWUgb2YgdGhlIHBsdWctaW4gaG9zdCBwcm9jZXNzLiBUaGUgZmlyc3QgYXJn
dW1lbnQgaXMgdGhlIHBsdWctaW4gbmFtZSBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUg
YXBwbGljYXRpb24gbmFtZS4iKSwgW1soTlNTdHJpbmcgKiltX3BsdWdpblBhdGggbGFzdFBhdGhD
b21wb25lbnRdIHN0cmluZ0J5RGVsZXRpbmdQYXRoRXh0ZW5zaW9uXSwgKE5TU3RyaW5nICopcGFy
YW1ldGVycy51aVByb2Nlc3NOYW1lXTsKLSAgICBfTFNTZXRBcHBsaWNhdGlvbkluZm9ybWF0aW9u
SXRlbShrTFNEZWZhdWx0U2Vzc2lvbklELCBfTFNHZXRDdXJyZW50QXBwbGljYXRpb25BU04oKSwg
X2tMU0Rpc3BsYXlOYW1lS2V5LCAoQ0ZTdHJpbmdSZWYpYXBwbGljYXRpb25OYW1lLCBudWxscHRy
KTsKLSAgICBpZiAoIW1fcGx1Z2luQnVuZGxlSWRlbnRpZmllci5pc0VtcHR5KCkpCi0gICAgICAg
IF9MU1NldEFwcGxpY2F0aW9uSW5mb3JtYXRpb25JdGVtKGtMU0RlZmF1bHRTZXNzaW9uSUQsIF9M
U0dldEN1cnJlbnRBcHBsaWNhdGlvbkFTTigpLCBrTFNQbHVnSW5CdW5kbGVJZGVudGlmaWVyS2V5
LCBtX3BsdWdpbkJ1bmRsZUlkZW50aWZpZXIuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgbnVsbHB0
cik7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzczo6aW5pdGlhbGl6ZVNhbmRib3goY29uc3QgQXV4
aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycywgU2FuZGJv
eEluaXRpYWxpemF0aW9uUGFyYW1ldGVycyYgc2FuZGJveFBhcmFtZXRlcnMpCi17Ci0gICAgLy8g
UGx1Z2luUHJvY2VzcyBtYXkgYWxyZWFkeSBiZSBzYW5kYm94ZWQgaWYgaXRzIHBhcmVudCBwcm9j
ZXNzIHdhcyBzYW5kYm94ZWQsIGFuZCBsYXVuY2hlZCBhIGNoaWxkIHByb2Nlc3MgaW5zdGVhZCBv
ZiBhbiBYUEMgc2VydmljZS4KLSAgICAvLyBUaGlzIGlzIGdlbmVyYWxseSBub3QgZXhwZWN0ZWQs
IGhvd2V2ZXIgd2UgY3VycmVudGx5IGFsd2F5cyBzcGF3biBhIGNoaWxkIHByb2Nlc3MgdG8gY3Jl
YXRlIGEgTUlNRSB0eXBlIHByZWZlcmVuY2VzIGZpbGUuCi0gICAgaWYgKGN1cnJlbnRQcm9jZXNz
SXNTYW5kYm94ZWQoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghcGFyYW1ldGVycy5jb25u
ZWN0aW9uSWRlbnRpZmllci54cGNDb25uZWN0aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGNoYXIgY2FjaGVEaXJlY3RvcnlbUEFUSF9NQVhdOwotICAgIGlmICghY29uZnN0cihf
Q1NfREFSV0lOX1VTRVJfQ0FDSEVfRElSLCBjYWNoZURpcmVjdG9yeSwgc2l6ZW9mKGNhY2hlRGly
ZWN0b3J5KSkpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJQbHVnaW5Qcm9jZXNzOiBjb3VsZG4n
dCByZXRyaWV2ZSBzeXN0ZW0gY2FjaGUgZGlyZWN0b3J5IHBhdGg6ICVkXG4iLCBlcnJubyk7Ci0g
ICAgICAgIGV4aXQoRVhfT1NFUlIpOwotICAgIH0KLQotICAgIG1fbnN1cmxDYWNoZURpcmVjdG9y
eSA9IFtbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHN0cmluZ1dpdGhGaWxlU3lzdGVt
UmVwcmVzZW50YXRpb246Y2FjaGVEaXJlY3RvcnkgbGVuZ3RoOnN0cmxlbihjYWNoZURpcmVjdG9y
eSldIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpbW05TQnVuZGxlIG1haW5CdW5kbGVd
IGJ1bmRsZUlkZW50aWZpZXJdXTsKLSAgICBpZiAoIVtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFu
YWdlcl0gY3JlYXRlRGlyZWN0b3J5QXRVUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDptX25zdXJs
Q2FjaGVEaXJlY3RvcnkgaXNEaXJlY3Rvcnk6WUVTXSB3aXRoSW50ZXJtZWRpYXRlRGlyZWN0b3Jp
ZXM6WUVTIGF0dHJpYnV0ZXM6bmlsIGVycm9yOm5pbF0pIHsKLSAgICAgICAgV1RGTG9nQWx3YXlz
KCJQbHVnaW5Qcm9jZXNzOiBjb3VsZG4ndCBjcmVhdGUgTlNVUkwgY2FjaGUgZGlyZWN0b3J5ICcl
cydcbiIsIGNhY2hlRGlyZWN0b3J5KTsKLSAgICAgICAgZXhpdChFWF9PU0VSUik7Ci0gICAgfQot
Ci0gICAgYm9vbCBwYXJlbnRJc1NhbmRib3hlZCA9IHBhcmFtZXRlcnMuY29ubmVjdGlvbklkZW50
aWZpZXIueHBjQ29ubmVjdGlvbiAmJiBjb25uZWN0ZWRQcm9jZXNzSXNTYW5kYm94ZWQocGFyYW1l
dGVycy5jb25uZWN0aW9uSWRlbnRpZmllci54cGNDb25uZWN0aW9uLmdldCgpKTsKLQotICAgIGlm
IChwYXJhbWV0ZXJzLmV4dHJhSW5pdGlhbGl6YXRpb25EYXRhLmdldCgiZGlzYWJsZS1zYW5kYm94
IikgPT0gIjEiKSB7Ci0gICAgICAgIGlmIChwYXJlbnRJc1NhbmRib3hlZCkgewotICAgICAgICAg
ICAgV1RGTG9nQWx3YXlzKCJTYW5kYm94ZWQgcHJvY2Vzc2VzIG1heSBub3QgZGlzYWJsZSBwbHVn
LWluIHNhbmRib3gsIHRlcm1pbmF0aW5nICVzLiIsIHBhcmFtZXRlcnMuY2xpZW50SWRlbnRpZmll
ci51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGV4aXQoRVhfT1NFUlIpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTdHJpbmcgc2FuZGJveFByb2ZpbGUgPSBw
bHVnaW5TYW5kYm94UHJvZmlsZShtX3BsdWdpbkJ1bmRsZUlkZW50aWZpZXIpOwotICAgIGlmIChz
YW5kYm94UHJvZmlsZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKHBhcmVudElzU2FuZGJveGVk
KSB7Ci0gICAgICAgICAgICBXVEZMb2dBbHdheXMoIlNhbmRib3hlZCBwcm9jZXNzZXMgbWF5IG9u
bHkgdXNlIHNhbmRib3hlZCBwbHVnLWlucywgdGVybWluYXRpbmcgJXMuIiwgcGFyYW1ldGVycy5j
bGllbnRJZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgZXhpdChFWF9PU0VS
Uik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNhbmRib3hQYXJh
bWV0ZXJzLnNldFNhbmRib3hQcm9maWxlKHNhbmRib3hQcm9maWxlKTsKLQotICAgIGNoYXIgdGVt
cG9yYXJ5RGlyZWN0b3J5W1BBVEhfTUFYXTsKLSAgICBpZiAoIWNvbmZzdHIoX0NTX0RBUldJTl9V
U0VSX1RFTVBfRElSLCB0ZW1wb3JhcnlEaXJlY3RvcnksIHNpemVvZih0ZW1wb3JhcnlEaXJlY3Rv
cnkpKSkgewotICAgICAgICBXVEZMb2dBbHdheXMoIlBsdWdpblByb2Nlc3M6IGNvdWxkbid0IHJl
dHJpZXZlIHN5c3RlbSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHBhdGg6ICVkXG4iLCBlcnJubyk7Ci0g
ICAgICAgIGV4aXQoRVhfT1NFUlIpOwotICAgIH0KLQotICAgIGlmIChzdHJsY3B5KHRlbXBvcmFy
eURpcmVjdG9yeSwgW1tbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHN0cmluZ1dpdGhG
aWxlU3lzdGVtUmVwcmVzZW50YXRpb246dGVtcG9yYXJ5RGlyZWN0b3J5IGxlbmd0aDpzdHJsZW4o
dGVtcG9yYXJ5RGlyZWN0b3J5KV0gc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiV2Vi
S2l0UGx1Z2luLVhYWFhYWCJdIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbl0sIHNpemVvZih0ZW1w
b3JhcnlEaXJlY3RvcnkpKSA+PSBzaXplb2YodGVtcG9yYXJ5RGlyZWN0b3J5KQotICAgICAgICB8
fCAhbWtkdGVtcCh0ZW1wb3JhcnlEaXJlY3RvcnkpKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygi
UGx1Z2luUHJvY2VzczogY291bGRuJ3QgY3JlYXRlIHByaXZhdGUgdGVtcG9yYXJ5IGRpcmVjdG9y
eSAnJXMnXG4iLCB0ZW1wb3JhcnlEaXJlY3RvcnkpOwotICAgICAgICBleGl0KEVYX09TRVJSKTsK
LSAgICB9Ci0KLSAgICBzYW5kYm94UGFyYW1ldGVycy5zZXRVc2VyRGlyZWN0b3J5U3VmZml4KFtb
W1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBzdHJpbmdXaXRoRmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uOnRlbXBvcmFyeURpcmVjdG9yeSBsZW5ndGg6c3RybGVuKHRlbXBvcmFyeURpcmVj
dG9yeSldIGxhc3RQYXRoQ29tcG9uZW50XSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb25dKTsKLQot
ICAgIHNhbmRib3hQYXJhbWV0ZXJzLmFkZFBhdGhQYXJhbWV0ZXIoIlBMVUdJTl9QQVRIIiwgbV9w
bHVnaW5QYXRoKTsKLSAgICBzYW5kYm94UGFyYW1ldGVycy5hZGRQYXRoUGFyYW1ldGVyKCJOU1VS
TF9DQUNIRV9ESVIiLCBtX25zdXJsQ2FjaGVEaXJlY3RvcnkpOwotCi0gICAgW1tOU1VzZXJEZWZh
dWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gcmVnaXN0ZXJEZWZhdWx0czpAeyBAIk5TVXNlUmVt
b3RlU2F2ZVBhbmVsIiA6IEBZRVMgfV07Ci0KLSAgICBBdXhpbGlhcnlQcm9jZXNzOjppbml0aWFs
aXplU2FuZGJveChwYXJhbWV0ZXJzLCBzYW5kYm94UGFyYW1ldGVycyk7Ci19Ci0KLWJvb2wgUGx1
Z2luUHJvY2Vzczo6c2hvdWxkT3ZlcnJpZGVRdWFyYW50aW5lKCkKLXsKLSAgICByZXR1cm4gbV9w
bHVnaW5CdW5kbGVJZGVudGlmaWVyICE9ICJjb20uY2lzY28ud2ViZXgucGx1Z2luLmdwYzY0IjsK
LX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzOjpzdG9wUnVuTG9vcCgpCi17Ci0gICAgQXV4aWxpYXJ5
UHJvY2Vzczo6c3RvcE5TQXBwUnVuTG9vcCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9jZXNzU2hpbS5oIGIvU291cmNl
L1dlYktpdC9QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9jZXNzU2hpbS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwM2IwYmY2Yzk4MWJmOGQ4MThlNDJiNGIxNjgyZjRkMmI3Y2E5
ZTVjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc1NoaW0uaAorKysgL2Rldi9u
dWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotQGNsYXNz
IE5TV2luZG93OwotCi0jaW5jbHVkZSA8Q2FyYm9uL0NhcmJvbi5oPgotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotc3RydWN0IFBsdWdpblByb2Nlc3NTaGltQ2FsbGJhY2tzIHsKLSAgICBib29sICgq
c3RyaW5nQ29tcGFyZSkoQ0ZTdHJpbmdSZWYgYSwgQ0ZTdHJpbmdSZWYgYiwgQ0ZTdHJpbmdDb21w
YXJlRmxhZ3Mgb3B0aW9ucywgdm9pZCogcmV0dXJuQWRkcmVzcywgQ0ZDb21wYXJpc29uUmVzdWx0
JiByZXN1bHQpOwotfTsKLQotdHlwZWRlZiB2b2lkICgqUGx1Z2luUHJvY2Vzc1NoaW1Jbml0aWFs
aXplRnVuYykoY29uc3QgUGx1Z2luUHJvY2Vzc1NoaW1DYWxsYmFja3MmKTsKLQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9jZXNzU2hpbS5t
bSBiL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc1NoaW0ubW0K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ODQ3MWU4OGFhZTQ1MmU5MGRjYmY2MjQ0
NzI4YTUwOGEzM2QyY2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9jZXNzU2hpbS5t
bQorKysgL2Rldi9udWxsCkBAIC0xLDI3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYg
IVBMQVRGT1JNKElPU19GQU1JTFkpCi0KLSNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgotI2ltcG9y
dCAiUGx1Z2luUHJvY2Vzc1NoaW0uaCIKLQotI2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5oPgotI2lt
cG9ydCA8Q2FyYm9uL0NhcmJvbi5oPgotI2ltcG9ydCA8V2ViQ29yZS9EeW5hbWljTGlua2VySW50
ZXJwb3NpbmcuaD4KLSNpbXBvcnQgPG1hY2gvbWFjaF92bS5oPgotI2ltcG9ydCA8b2JqYy9tZXNz
YWdlLmg+Ci0jaW1wb3J0IDxzdGRpby5oPgotI2ltcG9ydCA8c3lzL2lwYy5oPgotI2ltcG9ydCA8
c3lzL21tYW4uaD4KLSNpbXBvcnQgPHN5cy9zaG0uaD4KLSNpbXBvcnQgPHd0Zi9Db21waWxlci5o
PgotI2ltcG9ydCA8d3RmL3NwaS9kYXJ3aW4vU2FuZGJveFNQSS5oPgotCi0jaWYgQ1BVKEFSTTY0
RSkKLSNpbXBvcnQgPHB0cmF1dGguaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
ZXh0ZXJuICJDIiB2b2lkIFdlYktpdFBsdWdpblByb2Nlc3NTaGltSW5pdGlhbGl6ZShjb25zdCBQ
bHVnaW5Qcm9jZXNzU2hpbUNhbGxiYWNrcyYgY2FsbGJhY2tzKTsKLQotc3RhdGljIFBsdWdpblBy
b2Nlc3NTaGltQ2FsbGJhY2tzIHBsdWdpblByb2Nlc3NTaGltQ2FsbGJhY2tzOwotCi0vLyBTaW1w
bGUgRmFrZSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5LiBUaGlzIHJlcGxhY2VtZW50IEFQSSBpbXBs
ZW1lbnRzCi0vLyB1c2FibGUgc3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBmb3IgdXNlIHdpdGhpbiBh
IHNpbmdsZSBwcm9jZXNzLiBUaGUgbWVtb3J5Ci0vLyBpcyBub3Qgc2hhcmVkIG91dHNpZGUgb2Yg
dGhlIHNjb3BlIG9mIHRoZSBwcm9jZXNzLgotc3RydWN0IEZha2VTaGFyZWRNZW1vcnlEZXNjcmlw
dG9yIHsKLSAgICBGYWtlU2hhcmVkTWVtb3J5RGVzY3JpcHRvciogbmV4dDsKLSAgICBpbnQgcmVm
ZXJlbmNlQ291bnQ7Ci0gICAga2V5X3Qga2V5OwotICAgIHNpemVfdCByZXF1ZXN0ZWRTaXplOwot
ICAgIHNpemVfdCBtbWFwZWRTaXplOwotICAgIGludCBzaGFyZWRNZW1vcnlGbGFnczsKLSAgICBp
bnQgc2hhcmVkTWVtb3J5SWRlbnRpZmllcjsKLSAgICB2b2lkKiBtbWFwZWRBZGRyZXNzOwotfTsK
LQotc3RhdGljIEZha2VTaGFyZWRNZW1vcnlEZXNjcmlwdG9yKiBzaG1EZXNjcmlwdG9yTGlzdCA9
IDA7Ci1zdGF0aWMgaW50IGZha2VTaGFyZWRNZW1vcnlJZGVudGlmaWVyID0gMDsKLQotc3RhdGlj
IEZha2VTaGFyZWRNZW1vcnlEZXNjcmlwdG9yKiBmaW5kQnlTaGFyZWRNZW1vcnlJZGVudGlmaWVy
KGludCBzaGFyZWRNZW1vcnlJZGVudGlmaWVyKQotewotICAgIEZha2VTaGFyZWRNZW1vcnlEZXNj
cmlwdG9yKiBkZXNjcmlwdG9yUHRyID0gc2htRGVzY3JpcHRvckxpc3Q7Ci0KLSAgICB3aGlsZSAo
ZGVzY3JpcHRvclB0cikgewotICAgICAgICBpZiAoZGVzY3JpcHRvclB0ci0+c2hhcmVkTWVtb3J5
SWRlbnRpZmllciA9PSBzaGFyZWRNZW1vcnlJZGVudGlmaWVyKQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlc2NyaXB0b3JQdHIgPSBkZXNjcmlwdG9yUHRyLT5uZXh0OwotICAgIH0KLSAg
ICByZXR1cm4gZGVzY3JpcHRvclB0cjsKLX0KLQotc3RhdGljIEZha2VTaGFyZWRNZW1vcnlEZXNj
cmlwdG9yKiBmaW5kQnlTaGFyZWRNZW1vcnlBZGRyZXNzKGNvbnN0IHZvaWQqIG1tYXBlZEFkZHJl
c3MpCi17Ci0gICAgRmFrZVNoYXJlZE1lbW9yeURlc2NyaXB0b3IqIGRlc2NyaXB0b3JQdHIgPSBz
aG1EZXNjcmlwdG9yTGlzdDsKLQotICAgIHdoaWxlIChkZXNjcmlwdG9yUHRyKSB7Ci0gICAgICAg
IGlmIChkZXNjcmlwdG9yUHRyLT5tbWFwZWRBZGRyZXNzID09IG1tYXBlZEFkZHJlc3MpCi0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBkZXNjcmlwdG9yUHRyID0gZGVzY3JpcHRvclB0ci0+
bmV4dDsKLSAgICB9Ci0gICAgcmV0dXJuIGRlc2NyaXB0b3JQdHI7Ci19Ci0KLXN0YXRpYyBCb29s
ZWFuIHNoaW1fZGlzYWJsZWQodm9pZCkKLXsKLSAgICBzdGF0aWMgQm9vbGVhbiBpc0Zha2VTSE1E
aXNhYmxlZDsKLQotICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZTsKLSAgICBkaXNwYXRj
aF9vbmNlKCZvbmNlLCBeKCkgewotICAgICAgICBCb29sZWFuIGtleUV4aXN0c0FuZEhhc1ZhbGlk
Rm9ybWF0ID0gZmFsc2U7Ci0gICAgICAgIEJvb2xlYW4gcHJlZlZhbHVlID0gQ0ZQcmVmZXJlbmNl
c0dldEFwcEJvb2xlYW5WYWx1ZShDRlNUUigiV2ViS2l0RGlzYWJsZUZha2VTWVNWU0hNIiksIGtD
RlByZWZlcmVuY2VzQ3VycmVudEFwcGxpY2F0aW9uLCAma2V5RXhpc3RzQW5kSGFzVmFsaWRGb3Jt
YXQpOwotCi0gICAgICAgIGlmIChrZXlFeGlzdHNBbmRIYXNWYWxpZEZvcm1hdCAmJiBwcmVmVmFs
dWUpCi0gICAgICAgICAgICBpc0Zha2VTSE1EaXNhYmxlZCA9IHRydWU7Ci0gICAgICAgIGVsc2Ug
aWYgKHNhbmRib3hfY2hlY2soZ2V0cGlkKCksIE5VTEwsIFNBTkRCT1hfRklMVEVSX05PTkUpID09
IDEpCi0gICAgICAgICAgICBpc0Zha2VTSE1EaXNhYmxlZCA9IGZhbHNlOyAgLy8gU2FuZGJveGVk
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGlzRmFrZVNITURpc2FibGVkID0gdHJ1ZTsgICAv
LyBOb3QgU2FuZGJveGVkCi0KLSAgICB9KTsKLQotICAgIHJldHVybiBpc0Zha2VTSE1EaXNhYmxl
ZDsKLX0KLQotc3RhdGljIGludCBzaGltX3NobWR0KGNvbnN0IHZvaWQqIHNoYXJlZEFkZHJlc3Mp
Ci17Ci0gICAgaWYgKHNoaW1fZGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHNobWR0KHNoYXJl
ZEFkZHJlc3MpOwotCi0gICAgRmFrZVNoYXJlZE1lbW9yeURlc2NyaXB0b3IqIGRlc2NyaXB0b3JQ
dHIgPSBmaW5kQnlTaGFyZWRNZW1vcnlBZGRyZXNzKHNoYXJlZEFkZHJlc3MpOwotICAgIGlmICgh
ZGVzY3JpcHRvclB0cikgewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJu
IC0xOwotICAgIH0KLQotICAgIGRlc2NyaXB0b3JQdHItPnJlZmVyZW5jZUNvdW50LS07Ci0gICAg
aWYgKCFkZXNjcmlwdG9yUHRyLT5yZWZlcmVuY2VDb3VudCkgewotICAgICAgICBtdW5tYXAoZGVz
Y3JpcHRvclB0ci0+bW1hcGVkQWRkcmVzcywgZGVzY3JpcHRvclB0ci0+bW1hcGVkU2l6ZSk7Ci0g
ICAgICAgIGRlc2NyaXB0b3JQdHItPm1tYXBlZEFkZHJlc3MgPSAwOwotICAgIH0KLQotICAgIHJl
dHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCogc2hpbV9zaG1hdChpbnQgc2hhcmVkTWVtb3J5SWRl
bnRpZmllciwgY29uc3Qgdm9pZCogcmVxdWVzdGVkU2hhcmVkQWRkcmVzcywgaW50IHNobWZsZykK
LXsKLSAgICBpZiAoc2hpbV9kaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gc2htYXQoc2hhcmVk
TWVtb3J5SWRlbnRpZmllciwgcmVxdWVzdGVkU2hhcmVkQWRkcmVzcywgc2htZmxnKTsKLQotICAg
IEZha2VTaGFyZWRNZW1vcnlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yUHRyID0gZmluZEJ5U2hhcmVk
TWVtb3J5SWRlbnRpZmllcihzaGFyZWRNZW1vcnlJZGVudGlmaWVyKTsKLSAgICB2b2lkKiBtYXBw
ZWRBZGRyZXNzID0gKHZvaWQqKS0xOwotCi0gICAgaWYgKCFkZXNjcmlwdG9yUHRyKSB7Ci0gICAg
ICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gbWFwcGVkQWRkcmVzczsKLSAgICB9
Ci0KLSAgICBpZiAoZGVzY3JpcHRvclB0ci0+bW1hcGVkQWRkcmVzcykgewotICAgICAgICBpZiAo
IXJlcXVlc3RlZFNoYXJlZEFkZHJlc3MgfHwgcmVxdWVzdGVkU2hhcmVkQWRkcmVzcyA9PSBkZXNj
cmlwdG9yUHRyLT5tbWFwZWRBZGRyZXNzKSB7Ci0gICAgICAgICAgICBtYXBwZWRBZGRyZXNzID0g
ZGVzY3JpcHRvclB0ci0+bW1hcGVkQWRkcmVzczsKLSAgICAgICAgICAgIGRlc2NyaXB0b3JQdHIt
PnJlZmVyZW5jZUNvdW50Kys7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBkZXNj
cmlwdG9yUHRyLT5tbWFwZWRTaXplID0gKGRlc2NyaXB0b3JQdHItPnJlcXVlc3RlZFNpemUgKyBQ
QUdFX1NJWkUpICYgfihQQUdFX1NJWkUgLSAxKTsKLSAgICAgICAgbWFwcGVkQWRkcmVzcyA9IGRl
c2NyaXB0b3JQdHItPm1tYXBlZEFkZHJlc3MgPSBtbWFwKGNvbnN0X2Nhc3Q8dm9pZCo+KHJlcXVl
c3RlZFNoYXJlZEFkZHJlc3MpLAotICAgICAgICAgICAgZGVzY3JpcHRvclB0ci0+bW1hcGVkU2l6
ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX0FOT04gfCBNQVBfUFJJVkFURSwgLTEsIDAp
OwotICAgICAgICBkZXNjcmlwdG9yUHRyLT5yZWZlcmVuY2VDb3VudCsrOwotICAgIH0KLQotICAg
IHJldHVybiBtYXBwZWRBZGRyZXNzOwotfQotCi1zdGF0aWMgaW50IHNoaW1fc2htZ2V0KGtleV90
IGtleSwgc2l6ZV90IHJlcXVlc3RlZFNpemVPZlNoYXJlZE1lbW9yeSwgaW50IHNoYXJlZE1lbW9y
eUZsYWdzKQotewotICAgIGlmIChzaGltX2Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBzaG1n
ZXQoa2V5LCByZXF1ZXN0ZWRTaXplT2ZTaGFyZWRNZW1vcnksIHNoYXJlZE1lbW9yeUZsYWdzKTsK
LQotICAgIEZha2VTaGFyZWRNZW1vcnlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yUHRyID0gc2htRGVz
Y3JpcHRvckxpc3Q7Ci0KLSAgICB3aGlsZSAoZGVzY3JpcHRvclB0cikgewotICAgICAgICAvLyBB
cmUgd2UgbG9va2luZyBmb3Igc29tZXRoaW5nIHdlJ3ZlIGFscmVhZHkgY3JlYXRlZD8KLSAgICAg
ICAgaWYgKGRlc2NyaXB0b3JQdHItPmtleSA9PSBrZXkKLSAgICAgICAgICAgICYmIGRlc2NyaXB0
b3JQdHItPnJlcXVlc3RlZFNpemUgPT0gcmVxdWVzdGVkU2l6ZU9mU2hhcmVkTWVtb3J5Ci0gICAg
ICAgICAgICAmJiAhKChkZXNjcmlwdG9yUHRyLT5zaGFyZWRNZW1vcnlGbGFncyBeIHNoYXJlZE1l
bW9yeUZsYWdzKSAmIDA3NzcpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlc2NyaXB0
b3JQdHIgPSBkZXNjcmlwdG9yUHRyLT5uZXh0OwotICAgIH0KLQotICAgIGlmICghZGVzY3JpcHRv
clB0cikgewotICAgICAgICBkZXNjcmlwdG9yUHRyID0gKEZha2VTaGFyZWRNZW1vcnlEZXNjcmlw
dG9yKiltYWxsb2Moc2l6ZW9mKEZha2VTaGFyZWRNZW1vcnlEZXNjcmlwdG9yKSk7Ci0gICAgICAg
IGlmICghZGVzY3JpcHRvclB0cikgewotICAgICAgICAgICAgZXJybm8gPSBFTk9NRU07Ci0gICAg
ICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzY3JpcHRvclB0ci0+a2V5
ID0ga2V5OwotICAgICAgICBkZXNjcmlwdG9yUHRyLT5yZXF1ZXN0ZWRTaXplID0gcmVxdWVzdGVk
U2l6ZU9mU2hhcmVkTWVtb3J5OwotICAgICAgICBkZXNjcmlwdG9yUHRyLT5zaGFyZWRNZW1vcnlG
bGFncyA9IHNoYXJlZE1lbW9yeUZsYWdzOwotICAgICAgICBkZXNjcmlwdG9yUHRyLT5zaGFyZWRN
ZW1vcnlJZGVudGlmaWVyID0gKytmYWtlU2hhcmVkTWVtb3J5SWRlbnRpZmllcjsKLSAgICAgICAg
ZGVzY3JpcHRvclB0ci0+cmVmZXJlbmNlQ291bnQgPSAwOwotICAgICAgICBkZXNjcmlwdG9yUHRy
LT5tbWFwZWRBZGRyZXNzID0gMDsKLSAgICAgICAgZGVzY3JpcHRvclB0ci0+bW1hcGVkU2l6ZSA9
IDA7Ci0gICAgICAgIGRlc2NyaXB0b3JQdHItPm5leHQgPSBzaG1EZXNjcmlwdG9yTGlzdDsKLSAg
ICAgICAgc2htRGVzY3JpcHRvckxpc3QgPSBkZXNjcmlwdG9yUHRyOwotICAgIH0KLSAgICByZXR1
cm4gZGVzY3JpcHRvclB0ci0+c2hhcmVkTWVtb3J5SWRlbnRpZmllcjsKLX0KLQotc3RhdGljIGlu
dCBzaGltX3NobWN0bChpbnQgc2hhcmVkTWVtb3J5SWRlbnRpZmllciwgaW50IGNtZCwgc3RydWN0
IHNobWlkX2RzKiBvdXRwdXREZXNjcmlwdG9yKQotewotICAgIGlmIChzaGltX2Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybiBzaG1jdGwoc2hhcmVkTWVtb3J5SWRlbnRpZmllciwgY21kLCBvdXRw
dXREZXNjcmlwdG9yKTsKLQotICAgIEZha2VTaGFyZWRNZW1vcnlEZXNjcmlwdG9yKiBkZXNjcmlw
dG9yUHRyID0gZmluZEJ5U2hhcmVkTWVtb3J5SWRlbnRpZmllcihzaGFyZWRNZW1vcnlJZGVudGlm
aWVyKTsKLQotICAgIGlmICghZGVzY3JpcHRvclB0cikgewotICAgICAgICBlcnJubyA9IEVJTlZB
TDsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHN3aXRjaCAoY21kKSB7Ci0gICAg
Y2FzZSBJUENfU0VUOgotICAgIGNhc2UgSVBDX1JNSUQ6Ci0gICAgICAgIGVycm5vID0gRVBFUk07
Ci0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGNhc2UgSVBDX1NUQVQ6Ci0gICAgICAgIG91dHB1
dERlc2NyaXB0b3ItPnNobV9wZXJtLmN1aWQgPSBvdXRwdXREZXNjcmlwdG9yLT5zaG1fcGVybS51
aWQgPSBnZXR1aWQoKTsKLSAgICAgICAgb3V0cHV0RGVzY3JpcHRvci0+c2htX3Blcm0uY2dpZCA9
IG91dHB1dERlc2NyaXB0b3ItPnNobV9wZXJtLmdpZCA9IGdldGdpZCgpOwotICAgICAgICBvdXRw
dXREZXNjcmlwdG9yLT5zaG1fcGVybS5tb2RlID0gZGVzY3JpcHRvclB0ci0+c2hhcmVkTWVtb3J5
RmxhZ3MgJiAwNzc3OwotCi0gICAgICAgIG91dHB1dERlc2NyaXB0b3ItPnNobV9zZWdzeiA9IGRl
c2NyaXB0b3JQdHItPnJlcXVlc3RlZFNpemU7Ci0KLSAgICAgICAgb3V0cHV0RGVzY3JpcHRvci0+
c2htX2NwaWQgPSBvdXRwdXREZXNjcmlwdG9yLT5zaG1fbHBpZCA9IGdldHBpZCgpOwotCi0gICAg
ICAgIG91dHB1dERlc2NyaXB0b3ItPnNobV9uYXR0Y2ggPSBkZXNjcmlwdG9yUHRyLT5yZWZlcmVu
Y2VDb3VudDsKLQotICAgICAgICBvdXRwdXREZXNjcmlwdG9yLT5zaG1fY3RpbWUgPSBvdXRwdXRE
ZXNjcmlwdG9yLT5zaG1fYXRpbWUgPSBvdXRwdXREZXNjcmlwdG9yLT5zaG1fZHRpbWUgPSB0aW1l
KDApOwotCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGVycm5vID0gRUlOVkFMOwot
ICAgIHJldHVybiAtMTsKLX0KLQotRFlMRF9JTlRFUlBPU0Uoc2hpbV9zaG1hdCwgc2htYXQpOwot
RFlMRF9JTlRFUlBPU0Uoc2hpbV9zaG1kdCwgc2htZHQpOwotRFlMRF9JTlRFUlBPU0Uoc2hpbV9z
aG1nZXQsIHNobWdldCk7Ci1EWUxEX0lOVEVSUE9TRShzaGltX3NobWN0bCwgc2htY3RsKTsKLQot
c3RhdGljIENGQ29tcGFyaXNvblJlc3VsdCBzaGltQ0ZTdHJpbmdDb21wYXJlKENGU3RyaW5nUmVm
IGEsIENGU3RyaW5nUmVmIGIsIENGU3RyaW5nQ29tcGFyZUZsYWdzIG9wdGlvbnMpCi17Ci0gICAg
aWYgKHBsdWdpblByb2Nlc3NTaGltQ2FsbGJhY2tzLnN0cmluZ0NvbXBhcmUpIHsKLSAgICAgICAg
Q0ZDb21wYXJpc29uUmVzdWx0IHJlc3VsdDsKLSAgICAgICAgLy8gRklYTUUgKHNlZSByZGFyOi8v
NzI4OTcyOTEpOiBXb3JrIGFyb3VuZCBhIENsYW5nIGJ1ZyB3aGVyZSBfX2J1aWx0aW5fcmV0dXJu
X2FkZHJlc3MoKQotICAgICAgICAvLyBzb21ldGltZXMgZ2l2ZXMgdXMgYSBzaWduZWQgcG9pbnRl
ciwgYW5kIHNvbWV0aW1lcyBkb2VzIG5vdC4KLSAgICAgICAgdm9pZCogcmV0dXJuQWRkcmVzcyA9
IF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKTsKLSNpZiBDUFUoQVJNNjRFKQotICAgICAgICBy
ZXR1cm5BZGRyZXNzID0gcHRyYXV0aF9zdHJpcChyZXR1cm5BZGRyZXNzLCBwdHJhdXRoX2tleV9w
cm9jZXNzX2RlcGVuZGVudF9jb2RlKTsKLSNlbmRpZgotICAgICAgICBpZiAocGx1Z2luUHJvY2Vz
c1NoaW1DYWxsYmFja3Muc3RyaW5nQ29tcGFyZShhLCBiLCBvcHRpb25zLCByZXR1cm5BZGRyZXNz
LCByZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICByZXR1
cm4gQ0ZTdHJpbmdDb21wYXJlKGEsIGIsIG9wdGlvbnMpOwotfQotCi1EWUxEX0lOVEVSUE9TRShz
aGltQ0ZTdHJpbmdDb21wYXJlLCBDRlN0cmluZ0NvbXBhcmUpOwotCi0KLV9fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCi12b2lkIFdlYktpdFBsdWdpblByb2Nlc3NTaGltSW5p
dGlhbGl6ZShjb25zdCBQbHVnaW5Qcm9jZXNzU2hpbUNhbGxiYWNrcyYgY2FsbGJhY2tzKQotewot
ICAgIHBsdWdpblByb2Nlc3NTaGltQ2FsbGJhY2tzID0gY2FsbGJhY2tzOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vICFQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL21hYy9jb20uYXBwbGUuV2ViS2l0LnBs
dWdpbi1jb21tb24uc2IuaW4gYi9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvbWFjL2NvbS5h
cHBsZS5XZWJLaXQucGx1Z2luLWNvbW1vbi5zYi5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYzIwMTVlYWYwNWY3MDJkODdkN2EwNWU0YzU3NTgyMmU5MGM3MWZmOS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsdWdp
blByb2Nlc3MvbWFjL2NvbS5hcHBsZS5XZWJLaXQucGx1Z2luLWNvbW1vbi5zYi5pbgorKysgL2Rl
di9udWxsCkBAIC0xLDUyMCArMCwwIEBACi07IENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLTsKLTsgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci07IG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
OyBhcmUgbWV0OgotOyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotOyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi07IDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLTsgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLTsKLTsgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotOyBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLTsgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotOyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLTsgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotOyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotOyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLTsgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLTsg
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLTsgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotOyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KLSh2ZXJzaW9uIDEpCi0oZGVueSBkZWZhdWx0ICh3aXRoIHBhcnRpYWwtc3lt
Ym9saWNhdGlvbikpCi0oYWxsb3cgc3lzdGVtLWF1ZGl0IGZpbGUtcmVhZC1tZXRhZGF0YSkKLQot
KGltcG9ydCAic3lzdGVtLnNiIikKLQotI2luY2x1ZGUgIlNoYXJlZC9TYW5kYm94L3ByZWZlcmVu
Y2VzLnNiIgotCi07OzsgcHJvY2Vzcy1pbmZvKiBkZWZhdWx0cyB0byBhbGxvdzsgZGVueSBpdCBh
bmQgdGhlbiBhbGxvdyBvcGVyYXRpb25zIHdlIGFjdHVhbGx5IG5lZWQuCi0oZGVueSBwcm9jZXNz
LWluZm8qKQotKGFsbG93IHByb2Nlc3MtaW5mby1waWRpbmZvKQotKGFsbG93IHByb2Nlc3MtaW5m
by1zZXRjb250cm9sICh0YXJnZXQgc2VsZikpCi0KLShkZW55IHN5c2N0bCopCi0oYWxsb3cgc3lz
Y3RsLXJlYWQKLSAgICAoc3lzY3RsLW5hbWUKLSAgICAgICAgImh3LmF2YWlsY3B1IgotICAgICAg
ICAiaHcubmNwdSIKLSAgICAgICAgImh3Lm1vZGVsIgotICAgICAgICAia2Vybi5tZW1vcnlzdGF0
dXNfbGV2ZWwiCi0gICAgICAgICJ2bS5mb290cHJpbnRfc3VzcGVuZCIpKQotCi0oZGVueSBpb2tp
dC1nZXQtcHJvcGVydGllcykKLShhbGxvdyBpb2tpdC1nZXQtcHJvcGVydGllcwotICAgIChpb2tp
dC1wcm9wZXJ0eS1yZWdleCAjIl5BQVBMLChEaXNwbGF5UGlwZXxPcGVuQ0xkaXNhYmxlZHxJT0dy
YXBoaWNzX0xFUih8X1JlZ1RhZ18xfF9SZWdUYWdfMHxfQnVzeV8yKXxhbGlhcy1wb2xpY3l8Ym9v
dC1kaXNwbGF5fGRpc3BsYXktYWxpYXN8bXV4LXN3aXRjaC1zdGF0ZXxuZHJ2LWRldnxwcmltYXJ5
LWRpc3BsYXl8c2xvdC1uYW1lKSIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJBR0NJbmZvIikKLSAg
ICAoaW9raXQtcHJvcGVydHktcmVnZXggIyJeQVRZLChjYml0c3xmYl8obGluZWJ5dGVzfG9mZnNl
dHxzaXplKXxpbnRyZXYpIikKLSAgICAoaW9raXQtcHJvcGVydHktcmVnZXggIyJeQWNjZWwoQ2Fw
c3xOYXRpdmVETUFSb3dCeXRlQWxpZ25tZW50KSIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJBY3R1
YXRpb25TdXBwb3J0ZWQiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiQWxsb3dEaXNwbGF5U2xlZXAi
KQotICAgIChpb2tpdC1wcm9wZXJ0eSAiQWx3YXlzTmVlZHNWZWxvY2l0eUNhbGN1bGF0ZWQiKQot
ICAgIChpb2tpdC1wcm9wZXJ0eSAiQXBwbGUoRGlzcGxheVR5cGV8R1ZBS2V5RG9lc05vdEV4aXN0
fEludGVsTUVWQUJ1bmRsZU5hbWV8U2Vuc2UpIikKLSAgICAoaW9raXQtcHJvcGVydHkgIkNGQnVu
ZGxlSWRlbnRpZmllciIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJDRkJ1bmRsZUlkZW50aWZpZXJL
ZXJuZWwiKSA7OyA8cmRhcjovL3Byb2JsZW0vNTQzNDc1MDM+Ci0gICAgKGlva2l0LXByb3BlcnR5
LXJlZ2V4ICMiXkRpc3BsYXkoUGFyYW1ldGVySGFuZGxlclVzZXNDaGFyUHRyfFByb2R1Y3RJRHxS
b3V0aW5nfFNlcmlhbE51bWJlcnxWZW5kb3JJRCkiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiRGV2
ZWxvcG1lbnQiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiRGV2aWNlRXFJRCIpCi0gICAgKGlva2l0
LXByb3BlcnR5ICJEcml2ZXIgaXMgUmVhZHkiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiRW5hYmxl
TFBWUCIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJFbmRpYW5uZXNzIikKLSAgICAoaW9raXQtcHJv
cGVydHkgIkZhbWlseSBJRCIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJGb3JjZVN1cHBvcnRlZCIp
Ci0gICAgKGlva2l0LXByb3BlcnR5ICJHUFVDb25maWd1cmF0aW9uVmFyaWFibGUiKQotICAgIChp
b2tpdC1wcm9wZXJ0eSAiR3B1RGVidWdQb2xpY3kiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiSElE
UG9pbnRlckFjY2VsZXJhdGlvblR5cGUiKQotICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdleCAjIl5J
T0FWKC4qKShEZXxFbiljb2RlJCIpCi0gICAgKGlva2l0LXByb3BlcnR5LXJlZ2V4ICMiXklPQWNj
ZWwoRGlzcGxheVBpcGVDYXBhYmlsaXRpZXN8SW5kZXh8UmV2aXNpb258VHlwZXMpIikKLSAgICAo
aW9raXQtcHJvcGVydHktcmVnZXggIyJeSU9BdWRpb0NvbnRyb2woQ2hhbm5lbElEfElEfFN1YlR5
cGV8VXNhZ2UpIikKLSAgICAoaW9raXQtcHJvcGVydHkgIklPQXVkaW9Db250cm9sVmFsdWUiKQot
ICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdleCAjIl5JT0F1ZGlvRGV2aWNlKENhbkJlRGVmYXVsdHN8
VHJhbnNwb3J0VHlwZSkiKQotICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdleCAjIl5JT0F1ZGlvRW5n
aW5lKENoYW5uZWxOYW1lc3xDbGllbnREZXNjcmlwdGlvbnxDb3JlQXVkaW9QbHVnSW58KHxEZXZp
Y2UpRGVzY3JpcHRpb258Rmxhdm9yfEdsb2JhbFVuaXF1ZUlEfE91dHB1dENoYW5uZWxMYXlvdXR8
U2FtcGxlT2Zmc2V0fFN0YXRlKSIpCi0gICAgKGlva2l0LXByb3BlcnR5LXJlZ2V4ICMiXklPQXVk
aW9FbmdpbmVDbG9jayhEb21haW58SXNTdGFibGUpIikKLSAgICAoaW9raXQtcHJvcGVydHkgIklP
QXVkaW9FbmdpbmVEaXNhYmxlQ2xvY2tCb3VuZHNDaGVjayIpCi0gICAgKGlva2l0LXByb3BlcnR5
LXJlZ2V4ICMiXklPQXVkaW9FbmdpbmUoSW5wdXR8T3V0cHV0KVNhbXBsZShMYXRlbmN5fE9mZnNl
dCkiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiSU9BdWRpb0VuZ2luZUlzSGlkZGVuIikKLSAgICAo
aW9raXQtcHJvcGVydHktcmVnZXggIyJeSU9BdWRpb0VuZ2luZU51bShBY3RpdmVVc2VyQ2xpZW50
c3xTYW1wbGVGcmFtZXNQZXJCdWZmZXIpIikKLSAgICAoaW9raXQtcHJvcGVydHkgIklPQXVkaW9T
YW1wbGVSYXRlIikKLSAgICAoaW9raXQtcHJvcGVydHkgIklPQXVkaW9TdHJlYW1TYW1wbGVGb3Jt
YXRCeXRlT3JkZXIiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiSU9CYWNrbGlnaHRIYW5kbGVySUQi
KQotICAgIChpb2tpdC1wcm9wZXJ0eSAiSU9DbGFzc05hbWVPdmVycmlkZSIpCi0gICAgKGlva2l0
LXByb3BlcnR5ICJJT0NGUGx1Z0luVHlwZXMiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiSU9DbGFz
cyIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJJT0NvbnNvbGVVc2VycyIpCi0gICAgKGlva2l0LXBy
b3BlcnR5ICJJT0RWREJ1bmRsZU5hbWUiKQotICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdleCAjIl5J
T0Rpc3BsYXkoQXR0cmlidXRlc3xDYXBhYmlsaXR5U3RyaW5nfENvbm5lY3RGbGFnc3xDb250cm9s
bGVySUR8RURJRHxGaXJtd2FyZUxldmVsfE1DQ1NWZXJzaW9ufFBhcmFtZXRlcnN8UHJlZnNLZXl8
VGVjaG5vbG9neVR5cGV8VXNhZ2VUaW1lKSIpCi0gICAgKGlva2l0LXByb3BlcnR5LXJlZ2V4ICMi
XklPRkIoQ0xVVERlZmVyfENvbmZpZ3xDdXJyZW50UGl4ZWxDbG9ja3xDdXJyZW50UGl4ZWxDb3Vu
dHxDdXJzb3JJbmZvfERlcGVuZGVudElEfERlcGVuZGVudEluZGV4fERldGFpbGVkVGltaW5nc3xH
YW1tYUNvdW50fEdhbW1hSGVhZGVyU2l6ZXxHYW1tYVdpZHRofEkyQ0ludGVyZmFjZUlEc3xJMkNJ
bnRlcmZhY2VJbmZvfEludGVncmF0ZWR8TWVtb3J5U2l6ZXxOZWVkc1JlZnJlc2h8UHJvYmVPcHRp
b25zfFNjYWxlckluZm98VGltaW5nUmFuZ2V8VHJhbnNmb3JtfFVJU2NhbGV8V2FpdEN1cnNvckZy
YW1lc3xXYWl0Q3Vyc29yUGVyaW9kKSIpCi0gICAgKGlva2l0LXByb3BlcnR5LXJlZ2V4ICMiXklP
RkJDdXJyZW50UGl4ZWxDb3VudChSZWFsKSIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJJT0ZyYW1l
YnVmZmVyT3BlbkdMSW5kZXgiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiSU9HZW5lcmFsSW50ZXJl
c3QiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiSU9HTEJ1bmRsZU5hbWUiKQotICAgIChpb2tpdC1w
cm9wZXJ0eS1yZWdleCAjIl5JT0dWQShCR1JBRW5jfENvZGVjfEVuY29kZXJSZXN0cmljdGVkfFNj
YWxlcnxWVENhcGFiaWxpdGllcykiKQotICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdleCAiXklPR1ZB
W0EtWl0rKERlfEVuKWNvZGUiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiSU9HVkFIMjY0RW5jb2Rl
Q2FwYWJpbGl0aWVzIikgOzsgPHJkYXI6Ly9wcm9ibGVtLzQ5NDk4MDQwPgotICAgIChpb2tpdC1w
cm9wZXJ0eSAiSU9JMkNUcmFuc2FjdGlvblR5cGVzIikKLSAgICAoaW9raXQtcHJvcGVydHkgIklP
S2l0RGVidWciKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiSU9NQUNBZGRyZXNzIikgOzsgRm9yIHNv
bWUgRmxhc2ggcGxheWVycwotICAgIChpb2tpdC1wcm9wZXJ0eSAiSU9NYXRjaENhdGVnb3J5IikK
LSAgICAoaW9raXQtcHJvcGVydHktcmVnZXggIyJeSU9OYW1lKE1hdGNofE1hdGNoZWQpIikKLSAg
ICAoaW9raXQtcHJvcGVydHkgIklPT0NEQnVuZGxlTmFtZSIpCi0gICAgKGlva2l0LXByb3BlcnR5
LXJlZ2V4ICMiXklPUENJKChDbGFzc3xQcmltYXJ5fFByb3BlcnR5fClNYXRjaHxFeHByZXNzKENh
cGFiaWxpdGllc3xMaW5rKFN0YXR1c3xDYXBhYmlsaXRpZXMpKXxNU0lNb2RlfFJlc291cmNlZHxU
dW5uZWxsZWQpIikKLSAgICAoaW9raXQtcHJvcGVydHkgIklPUE1TdHJpY3RUcmVlT3JkZXIiKQot
ICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdleCAjIl5JT1BsYXRmb3JtKFNlcmlhbE51bWJlcnxVVUlE
KSIpIDs7IERpdHRvCi0gICAgKGlva2l0LXByb3BlcnR5ICJJT1Bvd2VyTWFuYWdlbWVudCIpCi0g
ICAgKGlva2l0LXByb3BlcnR5ICJJT1Byb2JlU2NvcmUiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAi
SU9Qcm9wZXJ0eU1hdGNoIikKLSAgICAoaW9raXQtcHJvcGVydHkgIklPUHJvdmlkZXJDbGFzcyIp
Ci0gICAgKGlva2l0LXByb3BlcnR5LXJlZ2V4ICMiXklPUmVwb3J0KEx1cmVzfExlZ2VuZCh8UHVi
bGljKSkiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiSU9TY3JlZW5SZXN0b3JlU3RhdGUiKQotICAg
IChpb2tpdC1wcm9wZXJ0eSAiSU9Tb3VyY2VWZXJzaW9uIikKLSAgICAoaW9raXQtcHJvcGVydHkg
IklPVkFCdW5kbGVOYW1lIikKLSAgICAoaW9raXQtcHJvcGVydHkgIklPVkFSZW5kZXJlcklEIikK
LSAgICAoaW9raXQtcHJvcGVydHkgIklPVkFSZW5kZXJlclN1YklEIikKLSAgICAoaW9raXQtcHJv
cGVydHktcmVnZXggIyJeSW50ZXJuYWxTdGF0aXN0aWNzKHxBY2NtKSIpCi0gICAgKGlva2l0LXBy
b3BlcnR5LXJlZ2V4ICMiXk1UKCBCdWlsdC1JbnxISUREZXZpY2UpIikKLSAgICAoaW9raXQtcHJv
cGVydHkgIk1haW50YWluUG93ZXJJblVJTG9jayIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJNYXgg
UGFja2V0IFNpemUiKQotICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdleCAjIl5NZXRhbFBsdWdpbihO
YW1lfENsYXNzTmFtZSkiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiTWV0YWxTdGF0aXN0aWNzTmFt
ZSIpCi0gICAgKGlva2l0LXByb3BlcnR5LXJlZ2V4ICMiXk11bHRpdG91Y2ggKElEfFNlcmlhbCBO
dW1iZXJ8U3ViZGV2aWNlIElEKSIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJOVkRBLG1tLXZlcnNp
b24iKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiTlZEQSxOVlByZXNlbnRtZW50LXZlcnNpb24iKQot
ICAgIChpb2tpdC1wcm9wZXJ0eSAiTlZEQSxFbmFibGUtQTJSMTBHMTBCMTBGb3JtYXQiKQotICAg
IChpb2tpdC1wcm9wZXJ0eSAiTlhTeXN0ZW1JbmZvIikKLSAgICAoaW9raXQtcHJvcGVydHkgIk5v
QXV0b1JvdXRlIikKLSAgICAoaW9raXQtcHJvcGVydHktcmVnZXggIyJeUGVyZm9ybWFuY2VTdGF0
aXN0aWNzKHxBY2N1bSkiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiUHJvdG9jb2wgQ2hhcmFjdGVy
aXN0aWNzIikKLSAgICAoaW9raXQtcHJvcGVydHkgIlNhZmVFamVjdFJlcXVlc3RlZCIpCi0gICAg
KGlva2l0LXByb3BlcnR5LXJlZ2V4ICMiXlNlbnNvciAoQ29sdW1uc3xSZWdpb24gKERlc2NyaXB0
b3J8UGFyYW0pfFJvd3N8U3VyZmFjZSAoRGVzY3JpcHRvcnxIZWlnaHR8V2lkdGgpKSIpCi0gICAg
KGlva2l0LXByb3BlcnR5ICJTdXBwb3J0QXVkaW9BVVVDIikKLSAgICAoaW9raXQtcHJvcGVydHkg
IlN1cmZhY2VMaXN0IikKLSAgICAoaW9raXQtcHJvcGVydHkgIlRpbWVTdGFtcEZpbHRlcmluZyIp
Ci0gICAgKGlva2l0LXByb3BlcnR5ICJUcmFuc3BvcnQiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAi
VlJBTSx0b3RhbE1CIikKLSAgICAoaW9raXQtcHJvcGVydHkgIldBTlRTX0ZSQU1FU19JR05PUkVE
IikKLSAgICAoaW9raXQtcHJvcGVydHkgImJvYXJkLWlkIikKLSAgICAoaW9raXQtcHJvcGVydHkt
cmVnZXggIyJeYXVkaW8tKGNvZGVjLWluZm98ZGV2aWNlLShtdmFsdWV8bnZhbHVlKSkiKQotICAg
IChpb2tpdC1wcm9wZXJ0eSAiYXYtc2lnbmFsLXR5cGUiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAi
YmNkVmVyc2lvbiIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJib290LWdhbW1hLXJlc3RvcmVkIikK
LSAgICAoaW9raXQtcHJvcGVydHkgImJ1aWx0LWluIikKLSAgICAoaW9raXQtcHJvcGVydHkgImNh
aWxfcHJvcGVydGllcyIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJjb25uZWN0b3ItdHlwZSIpCi0g
ICAgKGlva2l0LXByb3BlcnR5ICJkZXZpY2UtY29sb3JzIikKLSAgICAoaW9raXQtcHJvcGVydHkg
ImRwbSIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJncmFwaGljLW9wdGlvbnMiKQotICAgIChpb2tp
dC1wcm9wZXJ0eSAiaWRQcm9kdWN0IikKLSAgICAoaW9raXQtcHJvcGVydHkgImlkVmVuZG9yIikK
LSAgICAoaW9raXQtcHJvcGVydHkgImlvZmJfdmVyc2lvbiIpCi0gICAgKGlva2l0LXByb3BlcnR5
LXJlZ2V4ICMiXnBhcnNlci0ob3B0aW9uc3x0eXBlKSIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJw
b3J0LW51bWJlciIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJzdGFydHVwLXRpbWluZyIpCi0gICAg
KGlva2l0LXByb3BlcnR5ICJ0b3VjaC1zaXplLWlkIikKLSkKLQotKGRlbnkgbWFjaC1sb29rdXAg
KHhwYy1zZXJ2aWNlLW5hbWUtcHJlZml4ICIiKSkKLShhbGxvdyBtYWNoLWxvb2t1cAotICAgICh4
cGMtc2VydmljZS1uYW1lICJjb20uYXBwbGUuVmlld0JyaWRnZUF1eGlsaWFyeSIpCi0gICAgKHhw
Yy1zZXJ2aWNlLW5hbWUgImNvbS5hcHBsZS5hY2Nlc3NpYmlsaXR5Lm1lZGlhYWNjZXNzaWJpbGl0
eWQiKQotICAgICh4cGMtc2VydmljZS1uYW1lICJjb20uYXBwbGUuYXBwa2l0LnhwYy5vcGVuQW5k
U2F2ZVBhbmVsU2VydmljZSIpCi0gICAgKHhwYy1zZXJ2aWNlLW5hbWUgImNvbS5hcHBsZS5hcHBz
dG9yZS5QbHVnaW5YUENTZXJ2aWNlIikgOyA8cmRhcjovL3Byb2JsZW0vMzU5NDA5NDg+Ci0gICAg
KHhwYy1zZXJ2aWNlLW5hbWUgImNvbS5hcHBsZS5hdWRpby5TYW5kYm94SGVscGVyIikKLSAgICAo
eHBjLXNlcnZpY2UtbmFtZSAiY29tLmFwcGxlLmNvcmVtZWRpYS52aWRlb2RlY29kZXIiKQotICAg
ICh4cGMtc2VydmljZS1uYW1lICJjb20uYXBwbGUuY29yZW1lZGlhLnZpZGVvZW5jb2RlciIpCi0g
ICAgKHhwYy1zZXJ2aWNlLW5hbWUtcmVnZXggIyJcLmFwcGxlLWV4dGVuc2lvbi1zZXJ2aWNlJCIp
Ci0gICAgKHhwYy1zZXJ2aWNlLW5hbWUgImNvbS5hcHBsZS5oaXNlcnZpY2VzLXhwY3NlcnZpY2Ui
KQotKQotCi0jaWYgUExBVEZPUk0oTUFDKQotOzsgPHJkYXI6Ly9wcm9ibGVtLzQ3MjY4MTY2Pgot
KGFsbG93IG1hY2gtbG9va3VwICh4cGMtc2VydmljZS1uYW1lICJjb20uYXBwbGUuTVRMQ29tcGls
ZXJTZXJ2aWNlIikpCi0jZW5kaWYKLQotOzsgVXRpbGl0eSBmdW5jdGlvbnMKLShkZWZpbmUgKGhv
bWUtbGl0ZXJhbCBob21lLXJlbGF0aXZlLWxpdGVyYWwpCi0gICAgKGxpdGVyYWwgKHN0cmluZy1h
cHBlbmQgKHBhcmFtICJIT01FX0RJUiIpIGhvbWUtcmVsYXRpdmUtbGl0ZXJhbCkpKQotCi0oZGVm
aW5lIChob21lLWxpYnJhcnktcmVnZXggaG9tZS1saWJyYXJ5LXJlbGF0aXZlLXJlZ2V4KQotICAg
IChyZWdleCAoc3RyaW5nLWFwcGVuZCAiXiIgKHJlZ2V4LXF1b3RlIChwYXJhbSAiSE9NRV9MSUJS
QVJZX0RJUiIpKSBob21lLWxpYnJhcnktcmVsYXRpdmUtcmVnZXgpKSkKLQotKGRlZmluZSAoaG9t
ZS1saWJyYXJ5LXN1YnBhdGggaG9tZS1saWJyYXJ5LXJlbGF0aXZlLXN1YnBhdGgpCi0gICAgKHN1
YnBhdGggKHN0cmluZy1hcHBlbmQgKHBhcmFtICJIT01FX0xJQlJBUllfRElSIikgaG9tZS1saWJy
YXJ5LXJlbGF0aXZlLXN1YnBhdGgpKSkKLQotKGRlZmluZSAoaG9tZS1saWJyYXJ5LWxpdGVyYWwg
aG9tZS1saWJyYXJ5LXJlbGF0aXZlLWxpdGVyYWwpCi0gICAgKGxpdGVyYWwgKHN0cmluZy1hcHBl
bmQgKHBhcmFtICJIT01FX0xJQlJBUllfRElSIikgaG9tZS1saWJyYXJ5LXJlbGF0aXZlLWxpdGVy
YWwpKSkKLQotKGRlZmluZSAoaG9tZS1saWJyYXJ5LXByZWZlcmVuY2VzLXJlZ2V4IGhvbWUtbGli
cmFyeS1wcmVmZXJlbmNlcy1yZWxhdGl2ZS1yZWdleCkKLSAgICAocmVnZXggKHN0cmluZy1hcHBl
bmQgIl4iIChyZWdleC1xdW90ZSAocGFyYW0gIkhPTUVfTElCUkFSWV9QUkVGRVJFTkNFU19ESVIi
KSkgaG9tZS1saWJyYXJ5LXByZWZlcmVuY2VzLXJlbGF0aXZlLXJlZ2V4KSkpCi0KLShkZWZpbmUg
KGhvbWUtbGlicmFyeS1wcmVmZXJlbmNlcy1zdWJwYXRoIGhvbWUtbGlicmFyeS1wcmVmZXJlbmNl
cy1yZWxhdGl2ZS1zdWJwYXRoKQotICAgIChzdWJwYXRoIChzdHJpbmctYXBwZW5kIChwYXJhbSAi
SE9NRV9MSUJSQVJZX1BSRUZFUkVOQ0VTX0RJUiIpIGhvbWUtbGlicmFyeS1wcmVmZXJlbmNlcy1y
ZWxhdGl2ZS1zdWJwYXRoKSkpCi0KLShkZWZpbmUgKGhvbWUtbGlicmFyeS1wcmVmZXJlbmNlcy1s
aXRlcmFsIGhvbWUtbGlicmFyeS1wcmVmZXJlbmNlcy1yZWxhdGl2ZS1saXRlcmFsKQotICAgIChs
aXRlcmFsIChzdHJpbmctYXBwZW5kIChwYXJhbSAiSE9NRV9MSUJSQVJZX1BSRUZFUkVOQ0VTX0RJ
UiIpIGhvbWUtbGlicmFyeS1wcmVmZXJlbmNlcy1yZWxhdGl2ZS1saXRlcmFsKSkpCi0KLShkZWZp
bmUgKHNoYXJlZC1wcmVmZXJlbmNlcy1yZWFkLXdyaXRlIC4gZG9tYWlucykKLSAgKGZvci1lYWNo
IChsYW1iZGEgKGRvbWFpbikKLSAgICAgICAgICAgICAgKGJlZ2luCi0gICAgICAgICAgICAgICAg
KGlmIChkZWZpbmVkPyBgdXNlci1wcmVmZXJlbmNlLXdyaXRlKQotICAgICAgICAgICAgICAgICAg
ICAoYWxsb3cgdXNlci1wcmVmZXJlbmNlLXJlYWQgdXNlci1wcmVmZXJlbmNlLXdyaXRlIChwcmVm
ZXJlbmNlLWRvbWFpbiBkb21haW4pKSkKLSAgICAgICAgICAgICAgICA7IChUZW1wb3JhcnkpIGJh
Y2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBub24tQ0ZQcmVmZXJlbmNlcyByZWFkZXJzIC8gd3Jp
dGVycy4KLSAgICAgICAgICAgICAgICAoYWxsb3cgZmlsZS1yZWFkKiBmaWxlLXdyaXRlKgotICAg
ICAgICAgICAgICAgICAgICAgICAobGl0ZXJhbCAoc3RyaW5nLWFwcGVuZCAiL0xpYnJhcnkvUHJl
ZmVyZW5jZXMvIiBkb21haW4gIi5wbGlzdCIpKQotICAgICAgICAgICAgICAgICAgICAgICAoaG9t
ZS1saWJyYXJ5LXByZWZlcmVuY2VzLWxpdGVyYWwgKHN0cmluZy1hcHBlbmQgIi8iIGRvbWFpbiAi
LnBsaXN0IikpCi0gICAgICAgICAgICAgICAgICAgICAgIChob21lLWxpYnJhcnktcHJlZmVyZW5j
ZXMtcmVnZXggKHN0cmluZy1hcHBlbmQgIyIvQnlIb3N0LyIgKHJlZ2V4LXF1b3RlIGRvbWFpbikg
IyJcLi4qXC5wbGlzdCQiKSkpKSkKLSAgICAgICAgICAgIGRvbWFpbnMpKQotCi07OyBSZW1vdmUg
d2hlbiA8cmRhcjovL3Byb2JsZW0vMjk2NDYwOTQ+IGlzIGZpeGVkLgotKGRlZmluZSAoSEVYLXBh
dHRlcm4tbWF0Y2gtZ2VuZXJhdG9yIHBhdHRlcm4tZGVzY3JpcHRvcikKLSAgICAobGV0cmVjICgo
cGF0dGVybi1zdHJpbmcgIiIpKQotICAgICAgICAoZm9yLWVhY2ggIChsYW1iZGEgKHJlcGVhdC1j
b3VudCkKLSAgICAgICAgICAgIChpZiAoemVybz8gcmVwZWF0LWNvdW50KQotICAgICAgICAgICAg
ICAgIChzZXQhIHBhdHRlcm4tc3RyaW5nIChzdHJpbmctYXBwZW5kICBwYXR0ZXJuLXN0cmluZyAi
LSIpKQotICAgICAgICAgICAgICAgIChsZXQgYXBwZW5kZXIgKChjb3VudCByZXBlYXQtY291bnQp
KQotICAgICAgICAgICAgICAgICAgICAoaWYgKD4gY291bnQgMCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIChiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXQhIHBhdHRlcm4t
c3RyaW5nIChzdHJpbmctYXBwZW5kICBwYXR0ZXJuLXN0cmluZyAiWzAtOUEtRl0iKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoYXBwZW5kZXIgKC0gY291bnQgMSkpKSkpKSkKLSAgICAg
ICAgICAgIHBhdHRlcm4tZGVzY3JpcHRvcikKLSAgICBwYXR0ZXJuLXN0cmluZykpCi0KLTs7IHJl
dHVybiBhIHJlZ2V4IHBhdHRlcm4gbWF0Y2hpbmcgc3RyaW5nIGZvciA4LTQtNC00LTEyIFVVSURz
OgotKGRlZmluZSAodXVpZC1IRVgtcGF0dGVybi1tYXRjaC1zdHJpbmcpCi0gICAgKEhFWC1wYXR0
ZXJuLW1hdGNoLWdlbmVyYXRvciAnKDggMCA0IDAgNCAwIDQgMCAxMikpKQotCi07OyBnbG9iYWwg
dG8gaG9sZCB0aGUgY29tcHV0ZWQgVVVJRCBtYXRjaGluZyBwYXR0ZXJuLgotKGRlZmluZSAqdXVp
ZC1wYXR0ZXJuKiAiIikKLQotKGRlZmluZSAodXVpZC1yZWdleC1zdHJpbmcpCi0gICAgKGlmICh6
ZXJvPyAoc3RyaW5nLWxlbmd0aCAqdXVpZC1wYXR0ZXJuKikpCi0gICAgICAgIChzZXQhICp1dWlk
LXBhdHRlcm4qICh1dWlkLUhFWC1wYXR0ZXJuLW1hdGNoLXN0cmluZykpKQotICAgICp1dWlkLXBh
dHRlcm4qKQotCi0oZGVmaW5lIChhbGxvdy1yZWFkLXdyaXRlLWRpcmVjdG9yeS1hbmQtaXNzdWUt
cmVhZC13cml0ZS1leHRlbnNpb25zIHBhdGgpCi0gICAgKGlmIHBhdGgKLSAgICAgICAgKGJlZ2lu
Ci0gICAgICAgICAgICAoYWxsb3cgZmlsZS1yZWFkKiBmaWxlLXdyaXRlKiAoc3VicGF0aCBwYXRo
KSkKLSAgICAgICAgICAgIChhbGxvdyBmaWxlLWlzc3VlLWV4dGVuc2lvbiAocmVxdWlyZS1hbGwg
KGV4dGVuc2lvbi1jbGFzcyAiY29tLmFwcGxlLmFwcC1zYW5kYm94LnJlYWQiKSAoc3VicGF0aCBw
YXRoKSkpCi0gICAgICAgICAgICAoYWxsb3cgZmlsZS1pc3N1ZS1leHRlbnNpb24gKHJlcXVpcmUt
YWxsIChleHRlbnNpb24tY2xhc3MgImNvbS5hcHBsZS5hcHAtc2FuZGJveC5yZWFkLXdyaXRlIikg
KHN1YnBhdGggcGF0aCkpKSkpKQotCi07OyBXZWJLaXQyIHNhbmRib3ggbGF1bmNoZXIgbmVlZHMg
dG8gZGVmaW5lIGFuIF9PU19WRVJTSU9OIHBhcmFtZXRlcgotOzsgVGhpcyBwYXJhbWV0ZXIgaXMg
dGhlIG1ham9yIE9TIFZlcnNpb24gbnVtYmVyLgotKGlmIChub3QgKGRlZmluZWQ/ICdvcy12ZXJz
aW9uKSkKLSAgICAoZGVmaW5lIG9zLXZlcnNpb24gKHBhcmFtICJfT1NfVkVSU0lPTiIpKSkKLQot
KHN5c3RlbS1ncmFwaGljcykKLQotOzsgUmVhZC1vbmx5IHByZWZlcmVuY2VzCi0oc2hhcmVkLXBy
ZWZlcmVuY2VzLXJlYWQKLSAgICAiLkdsb2JhbFByZWZlcmVuY2VzIgotICAgICJjb20uYXBwbGUu
QVRTIgotICAgICJjb20uYXBwbGUuQWNjZXNzaWJpbGl0eSIKLSAgICAiY29tLmFwcGxlLkJsdWV0
b290aCIKLSAgICAiY29tLmFwcGxlLkNvcmVHcmFwaGljcyIKLSAgICAiY29tLmFwcGxlLkhJVG9v
bGJveCIKLSAgICAiY29tLmFwcGxlLlF1aWNrVGltZSIKLSAgICAiY29tLmFwcGxlLmRyaXZlci5B
cHBsZUJsdWV0b290aE11bHRpdG91Y2gubW91c2UiCi0gICAgImNvbS5hcHBsZS5kcml2ZXIuQXBw
bGVCbHVldG9vdGhNdWx0aXRvdWNoLnRyYWNrcGFkIgotICAgICJjb20uYXBwbGUuZHJpdmVyLkFw
cGxlSElETW91c2UiCi0gICAgImNvbS5hcHBsZS5pbnB1dG1ldGhvZGtpdCIKLSAgICAiY29tLmFw
cGxlLmlXb3JrLlBhZ2VzIgotICAgICJjb20uYXBwbGUuTGF1bmNoU2VydmljZXMiCi0gICAgImNv
bS5hcHBsZS5NdWx0aXRvdWNoU3VwcG9ydCIKLSAgICAiY29tLmFwcGxlLnNlY3VyaXR5IgotICAg
ICJjb20uYXBwbGUuc2VjdXJpdHkucmV2b2NhdGlvbiIKLSAgICAiY29tLmFwcGxlLnNlY3VyaXR5
X2NvbW1vbiIKLSAgICAiY29tLmFwcGxlLnNwZWVjaC52b2ljZS5wcmVmcyIKLSAgICAiY29tLmFw
cGxlLnNwZWVjaC5zeW50aGVzaXMuZ2VuZXJhbC5wcmVmcyIKLSAgICAiY29tLmFwcGxlLnNwZWVj
aC5yZWNvZ25pdGlvbi5BcHBsZVNwZWVjaFJlY29nbml0aW9uLnByZWZzIgotICAgICJjb20uYXBw
bGUuc3lzdGVtc291bmQiCi0gICAgImNvbS5hcHBsZS51bml2ZXJzYWxhY2Nlc3MiCi0gICAgImNv
bS5hcHBsZS5XZWJGb3VuZGF0aW9uIgotICAgICJjb20uYXBwbGUuV2ViS2l0LlBsdWdpblByb2Nl
c3MiCi0gICAgInBicyIKLSAgICAiY29tLmFwcGxlLlNlcnZpY2VzTWVudS5TZXJ2aWNlcyIpCi0K
LTs7IFJlYWQtb25seSBkYXRhCi0oYWxsb3cgZmlsZS1yZWFkKgotICAgIChsaXRlcmFsICIvIikK
LSAgICAobGl0ZXJhbCAiL3ByaXZhdGUvZXRjL2hvc3RzIikKLSAgICAobGl0ZXJhbCAiL3ByaXZh
dGUvZXRjL3Byb3RvY29scyIpCi0gICAgKGxpdGVyYWwgIi9wcml2YXRlL2V0Yy9zZXJ2aWNlcyIp
Ci0gICAgKGxpdGVyYWwgIi9wcml2YXRlL2V0Yy9yZXNvbHYuY29uZiIpCi0gICAgKGxpdGVyYWwg
Ii9wcml2YXRlL3Zhci9ydW4vcmVzb2x2LmNvbmYiKQotCi0gICAgKHN1YnBhdGggIi9MaWJyYXJ5
L0ZyYW1ld29ya3MiKQotICAgIChzdWJwYXRoICIvTGlicmFyeS9NYW5hZ2VkIFByZWZlcmVuY2Vz
IikKLSAgICAoc3VicGF0aCAiL3ByaXZhdGUvdmFyL2RiL21kcyIpCi0KLSAgICAocmVnZXggIyJe
L0xpYnJhcnkvUHJlZmVyZW5jZXMvY29tXC5hcHBsZVwuc2VjdXJpdHkiKQotICAgIChob21lLWxp
dGVyYWwgIi8uQ0ZVc2VyVGV4dEVuY29kaW5nIikKLSAgICAoaG9tZS1saWJyYXJ5LXN1YnBhdGgg
Ii9BdWRpbyIpCi0gICAgKGhvbWUtbGlicmFyeS1zdWJwYXRoICIvQ29sb3JQaWNrZXJzIikKLSAg
ICAoaG9tZS1saWJyYXJ5LXN1YnBhdGggIi9Db2xvclN5bmMiKQotICAgIChzdWJwYXRoICIvTGli
cmFyeS9Db21wb25lbnRzIikKLSAgICAoaG9tZS1saWJyYXJ5LXN1YnBhdGggIi9Db21wb25lbnRz
IikKLSAgICAoc3VicGF0aCAiL0xpYnJhcnkvQ29udGV4dHVhbCBNZW51IEl0ZW1zIikKLSAgICAo
c3VicGF0aCAiL0xpYnJhcnkvSW5wdXQgTWV0aG9kcyIpCi0gICAgKGhvbWUtbGlicmFyeS1zdWJw
YXRoICIvSW5wdXQgTWV0aG9kcyIpCi0gICAgKHN1YnBhdGggIi9MaWJyYXJ5L0lucHV0TWFuYWdl
cnMiKQotICAgIChob21lLWxpYnJhcnktc3VicGF0aCAiL0lucHV0TWFuYWdlcnMiKQotICAgICho
b21lLWxpYnJhcnktc3VicGF0aCAiL0tleUJpbmRpbmdzIikKLSAgICAoc3VicGF0aCAiL0xpYnJh
cnkvS2V5Ym9hcmQgTGF5b3V0cyIpCi0gICAgKGhvbWUtbGlicmFyeS1zdWJwYXRoICIvS2V5Ym9h
cmQgTGF5b3V0cyIpCi0gICAgKHN1YnBhdGggIi9MaWJyYXJ5L0ZvbnRzIikKLSAgICAoaG9tZS1s
aWJyYXJ5LXN1YnBhdGggIi9Gb250cyIpCi0gICAgKHN1YnBhdGggIi9MaWJyYXJ5L1NwZWxsaW5n
IikKLSAgICAoaG9tZS1saWJyYXJ5LXN1YnBhdGggIi9TcGVsbGluZyIpCi0gICAgKHN1YnBhdGgg
Ii9MaWJyYXJ5L1BERiBTZXJ2aWNlcyIpCi0gICAgKGhvbWUtbGlicmFyeS1zdWJwYXRoICIvUERG
IFNlcnZpY2VzIikKLSAgICAoaG9tZS1saWJyYXJ5LXByZWZlcmVuY2VzLWxpdGVyYWwgIi9RdWlj
a1RpbWUgUHJlZmVyZW5jZXMiKQotCi0gICAgKGhvbWUtbGlicmFyeS1saXRlcmFsICIvQ2FjaGVz
L2NvbS5hcHBsZS5jb3JlYXVkaW8uY29tcG9uZW50cy5wbGlzdCIpCi0KLSAgICAoc3VicGF0aCAi
L0xpYnJhcnkvQXVkaW8vU291bmRzIikKLSAgICAoc3VicGF0aCAiL0xpYnJhcnkvQXVkaW8vUGx1
Zy1JbnMvQ29tcG9uZW50cyIpCi0gICAgKGhvbWUtbGlicmFyeS1zdWJwYXRoICIvQXVkaW8vUGx1
Zy1JbnMvQ29tcG9uZW50cyIpCi0gICAgKHN1YnBhdGggIi9MaWJyYXJ5L0F1ZGlvL1BsdWctSW5z
L0hBTCIpCi0gICAgKHN1YnBhdGggIi9MaWJyYXJ5L0NvcmVNZWRpYUlPL1BsdWctSW5zL0RBTCIp
Ci0gICAgKHN1YnBhdGggIi9MaWJyYXJ5L1F1aWNrVGltZSIpCi0gICAgKGhvbWUtbGlicmFyeS1z
dWJwYXRoICIvUXVpY2tUaW1lIikKLSAgICAoc3VicGF0aCAiL0xpYnJhcnkvVmlkZW8vUGx1Zy1J
bnMiKQotICAgIChob21lLWxpYnJhcnktc3VicGF0aCAiL0NhY2hlcy9RdWlja1RpbWUiKQotCi0g
ICAgKGhvbWUtbGlicmFyeS1saXRlcmFsICIvQXBwbGljYXRpb24gU3VwcG9ydC9TeW5jU2Vydmlj
ZXMvTG9jYWwvQ2xpZW50c1dpdGhDaGFuZ2VzL2NvbS5hcHBsZS5LZXljaGFpbiIpCi0KLSAgICAo
c3VicGF0aCAiL0xpYnJhcnkvQ29sb3JTeW5jIikKLQotICAgIChob21lLWxpdGVyYWwgIi9MaWJy
YXJ5L1ByZWZlcmVuY2VzL2NvbS5hcHBsZS5sb29rdXAuc2hhcmVkLnBsaXN0IikpCi0KLTs7IFNl
Y3VyaXR5IGZyYW1ld29yawotKGFsbG93IG1hY2gtbG9va3VwIChnbG9iYWwtbmFtZSAiY29tLmFw
cGxlLm9jc3BkIikpCi0oYWxsb3cgZmlsZS1yZWFkKgotICAgICAgIChzdWJwYXRoICIvcHJpdmF0
ZS92YXIvZGIvbWRzIikKLSAgICAgICAobGl0ZXJhbCAiL3ByaXZhdGUvdmFyL2RiL0RldGFjaGVk
U2lnbmF0dXJlcyIpKQotKGFsbG93IGlwYy1wb3NpeC1zaG0tcmVhZCogaXBjLXBvc2l4LXNobS13
cml0ZS1kYXRhCi0gICAgICAgKGlwYy1wb3NpeC1uYW1lICJjb20uYXBwbGUuQXBwbGVEYXRhYmFz
ZUNoYW5nZWQiKSkKLQotOzsgUmVhZC13cml0ZSBwcmVmZXJlbmNlcyBhbmQgZGF0YQotKGFsbG93
IHN5c3RlbS1mc2N0bCAoZnNjdGwtY29tbWFuZCAoX0lPICJoIiA0NykpKQotCi07OyBJT0tpdCB1
c2VyIGNsaWVudHMKLShhbGxvdyBpb2tpdC1vcGVuCi0gICAgKGlva2l0LXVzZXItY2xpZW50LWNs
YXNzICJJT0F1ZGlvQ29udHJvbFVzZXJDbGllbnQiKQotICAgIChpb2tpdC11c2VyLWNsaWVudC1j
bGFzcyAiSU9BdWRpb0VuZ2luZVVzZXJDbGllbnQiKQotICAgIChpb2tpdC11c2VyLWNsaWVudC1j
bGFzcyAiSU9ISURQYXJhbVVzZXJDbGllbnQiKQotICAgIChpb2tpdC11c2VyLWNsaWVudC1jbGFz
cyAiUm9vdERvbWFpblVzZXJDbGllbnQiKSkKLQotOzsgVmFyaW91cyBzZXJ2aWNlcyByZXF1aXJl
ZCBieSBBcHBLaXQgYW5kIG90aGVyIGZyYW1ld29ya3MKLShhbGxvdyBtYWNoLWxvb2t1cAotICAg
IChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLmF1ZGlvLkF1ZGlvQ29tcG9uZW50UmVnaXN0cmFyIikK
LSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5hc3NlcnRpb25kLnByb2Nlc3Nhc3NlcnRpb25j
b25uZWN0aW9uIikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5Db3JlU2VydmljZXMuY29y
ZXNlcnZpY2VzZCIpCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuRGlza0FyYml0cmF0aW9u
LmRpc2thcmJpdHJhdGlvbmQiKQotICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLkZpbGVDb29y
ZGluYXRpb24iKQotICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLkZvbnRPYmplY3RzU2VydmVy
IikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5JbWFnZUNhcHR1cmVFeHRlbnNpb24yLnBy
ZXNlbmNlIikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5Qb3dlck1hbmFnZW1lbnQuY29u
dHJvbCIpCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuU2VjdXJpdHlTZXJ2ZXIiKQotICAg
IChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLlN5c3RlbUNvbmZpZ3VyYXRpb24uUFBQQ29udHJvbGxl
ciIpCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuU3lzdGVtQ29uZmlndXJhdGlvbi5jb25m
aWdkIikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5VTkNVc2VyTm90aWZpY2F0aW9uIikK
LSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5hbmFseXRpY3NkIikKLSAgICAoZ2xvYmFsLW5h
bWUgImNvbS5hcHBsZS5hdWRpby5hdWRpb2hhbGQiKQotICAgIChnbG9iYWwtbmFtZSAiY29tLmFw
cGxlLmF1ZGlvLmNvcmVhdWRpb2QiKQotICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLmNmbmV0
d29yay5BdXRoQnJva2VyQWdlbnQiKQotICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLmNtaW8u
VkRDQXNzaXN0YW50IikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5jb29raWVkIikgOzsg
RklYTUU6IDxyZGFyOi8vcHJvYmxlbS8xMDc5MDc2OD4gTGltaXQgYWNjZXNzIHRvIGNvb2tpZXMu
Ci0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuY29yZXNlcnZpY2VzLmxhdW5jaHNlcnZpY2Vz
ZCIpCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuZm9udHMiKQotICAgIChnbG9iYWwtbmFt
ZSAiY29tLmFwcGxlLmxzZC5tYXBkYiIpCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUub2Nz
cGQiKQotICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLnBhc3RlYm9hcmQuMSIpCi0gICAgKGds
b2JhbC1uYW1lICJjb20uYXBwbGUucGJzLmZldGNoX3NlcnZpY2VzIikKLSAgICAoZ2xvYmFsLW5h
bWUgImNvbS5hcHBsZS50Y2NkIikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS50Y2NkLnN5
c3RlbSIpCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUudHNtLnVpc2VydmVyIikKLSAgICAo
Z2xvYmFsLW5hbWUgImNvbS5hcHBsZS53aW5kb3dfcHJveGllcyIpCi0gICAgKGdsb2JhbC1uYW1l
ICJjb20uYXBwbGUud2luZG93c2VydmVyLmFjdGl2ZSIpCi0gICAgKGxvY2FsLW5hbWUgImNvbS5h
cHBsZS50c20ucG9ydG5hbWUiKQotICAgIChnbG9iYWwtbmFtZS1yZWdleCAjIl9PcGVuU3RlcCQi
KSkKLQotOzsgQ29uZmlndXJhdGlvbiBkaXJlY3RvcmllcwotKGFsbG93IGZpbGUtcmVhZCogKHN1
YnBhdGggKHBhcmFtICJQTFVHSU5fUEFUSCIpKSkKLShhbGxvdyBmaWxlLXJlYWQqIChzdWJwYXRo
IChwYXJhbSAiV0VCS0lUMl9GUkFNRVdPUktfRElSIikpKQotKGlmIChwb3NpdGl2ZT8gKHN0cmlu
Zy1sZW5ndGggKHBhcmFtICJEQVJXSU5fVVNFUl9DQUNIRV9ESVIiKSkpCi0gICAgKGFsbG93LXJl
YWQtd3JpdGUtZGlyZWN0b3J5LWFuZC1pc3N1ZS1yZWFkLXdyaXRlLWV4dGVuc2lvbnMgKHBhcmFt
ICJEQVJXSU5fVVNFUl9DQUNIRV9ESVIiKSkpCi0oaWYgKHBvc2l0aXZlPyAoc3RyaW5nLWxlbmd0
aCAocGFyYW0gIkRBUldJTl9VU0VSX1RFTVBfRElSIikpKQotICAgIChhbGxvdy1yZWFkLXdyaXRl
LWRpcmVjdG9yeS1hbmQtaXNzdWUtcmVhZC13cml0ZS1leHRlbnNpb25zIChwYXJhbSAiREFSV0lO
X1VTRVJfVEVNUF9ESVIiKSkpCi0oaWYgKHBvc2l0aXZlPyAoc3RyaW5nLWxlbmd0aCAocGFyYW0g
Ik5TVVJMX0NBQ0hFX0RJUiIpKSkKLSAgICAoYWxsb3ctcmVhZC13cml0ZS1kaXJlY3RvcnktYW5k
LWlzc3VlLXJlYWQtd3JpdGUtZXh0ZW5zaW9ucyAocGFyYW0gIk5TVVJMX0NBQ0hFX0RJUiIpKSkK
LQotOzsgQWxsb3cgdGhlIE9wZW5HTCBQcm9maWxlciB0byBhdHRhY2guCi0oaWYgKGRlZmluZWQ/
ICdtYWNoLXJlZ2lzdGVyKQotICAgIChhbGxvdyBtYWNoLXJlZ2lzdGVyIChnbG9iYWwtbmFtZS1y
ZWdleCAjIl5fb2dscHJvZl9hdHRhY2hfPFswLTldKz4kIikpKQotCi0oc3lzdGVtLW5ldHdvcmsp
Ci0KLShhbGxvdyBuZXR3b3JrLW91dGJvdW5kCi0gICAgOzsgTG9jYWwgbUROU1Jlc3BvbmRlciBm
b3IgRE5TLCBhcmJpdHJhcnkgb3V0Ym91bmQgVENQIGFuZCBVRFAKLSAgICAobGl0ZXJhbCAiL3By
aXZhdGUvdmFyL3J1bi9tRE5TUmVzcG9uZGVyIikKLSAgICAocmVtb3RlIHRjcCkKLSAgICAocmVt
b3RlIHVkcCkpCi0oYWxsb3cgbmV0d29yay1pbmJvdW5kCi0gICAgKGxvY2FsIHVkcCkpCi0KLTs7
IE9wZW4gYW5kIFNhdmUgcGFuZWxzCi0oZGVmaW5lICh3ZWJraXQtcG93ZXJib3gpCi0gICAgKGFs
bG93IGZpbGUtcmVhZCogKGxpdGVyYWwgIi9MaWJyYXJ5L1ByZWZlcmVuY2VzL2NvbS5hcHBsZS5W
aWV3QnJpZGdlLnBsaXN0IikpCi0gICAgKGFsbG93IGZpbGUtcmVhZCogZmlsZS13cml0ZSogKGV4
dGVuc2lvbiAiY29tLmFwcGxlLmFwcC1zYW5kYm94LnJlYWQtd3JpdGUiKSkKLSAgICAoYWxsb3cg
ZmlsZS1pc3N1ZS1leHRlbnNpb24KLSAgICAgICAgKHJlcXVpcmUtYWxsCi0gICAgICAgICAgICAo
ZXh0ZW5zaW9uLWNsYXNzICJjb20uYXBwbGUuYXBwLXNhbmRib3gucmVhZCIpCi0gICAgICAgICAg
ICAoZXh0ZW5zaW9uICJjb20uYXBwbGUuYXBwLXNhbmRib3gucmVhZC13cml0ZSIpKQotICAgICAg
ICAocmVxdWlyZS1hbGwKLSAgICAgICAgICAgIChleHRlbnNpb24tY2xhc3MgImNvbS5hcHBsZS5h
cHAtc2FuZGJveC5yZWFkLXdyaXRlIikKLSAgICAgICAgICAgIChleHRlbnNpb24gImNvbS5hcHBs
ZS5hcHAtc2FuZGJveC5yZWFkLXdyaXRlIikpKSkKLQotOzsgUHJpbnRpbmcKLShkZWZpbmUgKHdl
YmtpdC1wcmludGluZykKLSAgICAoaWYgKGRlZmluZWQ/ICdhdXRob3JpemF0aW9uLXJpZ2h0LW9i
dGFpbikKLSAgICAgICAgKGFsbG93IGF1dGhvcml6YXRpb24tcmlnaHQtb2J0YWluCi0gICAgICAg
ICAgICAgICAocmlnaHQtbmFtZSAic3lzdGVtLnByaW50Lm9wZXJhdG9yIikKLSAgICAgICAgICAg
ICAgIChyaWdodC1uYW1lICJzeXN0ZW0ucHJpbnRpbmdtYW5hZ2VyIikpKQotICAgIChpZiAoZGVm
aW5lZD8gJ21hY2gtcmVnaXN0ZXIpCi0gICAgICAgIChkZW55IG1hY2gtcmVnaXN0ZXIgKHdpdGgg
bm8tbG9nKQotICAgICAgICAgICAgICAgKGdsb2JhbC1uYW1lLXJlZ2V4ICMiXmNvbVwuYXBwbGVc
LklDQS1bMC05XSskIikpKQotICAgIChpZiAoZGVmaW5lZD8gJ21hY2gtdGFzay1uYW1lKQotICAg
ICAgICAoYWxsb3cgbWFjaC10YXNrLW5hbWUpKQotICAgIChhbGxvdyBuZXR3b3JrLW91dGJvdW5k
IChsaXRlcmFsICIvcHJpdmF0ZS92YXIvcnVuL2N1cHNkIikpCi0gICAgKGFsbG93IG1hY2gtbG9v
a3VwCi0gICAgICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLnByaW50dWl0b29sLmFnZW50IikK
LSAgICAgICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUucHJpbnR0b29sLmFnZW50IikKLSAgICAg
ICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUucHJpbnR0b29sLmRhZW1vbiIpKQotICAgIChhbGxv
dyBmaWxlLXJlYWQqCi0gICAgICAgIChzdWJwYXRoICIvTGlicmFyeS9QcmludGVycyIpCi0gICAg
ICAgIChob21lLWxpdGVyYWwgIi8uY3Vwcy9scG9wdGlvbnMiKQotICAgICAgICAoaG9tZS1saXRl
cmFsICIvLmN1cHMvY2xpZW50LmNvbmYiKQotICAgICAgICAobGl0ZXJhbCAiL3ByaXZhdGUvZXRj
L2N1cHMvY2xpZW50LmNvbmYiKQotICAgICAgICAobGl0ZXJhbCAiL3ByaXZhdGUvZXRjL2N1cHMv
bHBvcHRpb25zIikKLSAgICAgICAgKHN1YnBhdGggIi9wcml2YXRlL2V0Yy9jdXBzL3BwZCIpCi0g
ICAgICAgIChsaXRlcmFsICIvcHJpdmF0ZS92YXIvcnVuL2N1cHNkIikpCi0gICAgKHNoYXJlZC1w
cmVmZXJlbmNlcy1yZWFkICJvcmcuY3Vwcy5QcmludGluZ1ByZWZzIikpCi0KLTs7IFRleHQgU2Vy
dmljZXMgTWFuYWdlcgotKHdpdGgtZmlsdGVyIChpb2tpdC1yZWdpc3RyeS1lbnRyeS1jbGFzcyAi
SU9ISURFdmVudERyaXZlciIpCi0gICAgKGFsbG93IGlva2l0LXNldC1wcm9wZXJ0aWVzIChpb2tp
dC1wcm9wZXJ0eSAiQ2Fwc0xvY2tEZWxheU92ZXJyaWRlIikpKQotCi07OyBJbWFnZSBDYXB0dXJl
Ci0oZGVmaW5lICh3ZWJraXQtaW1hZ2VjYXB0dXJlKQotICAgIChhbGxvdyBhcHBsZWV2ZW50LXNl
bmQgKGFwcGxlZXZlbnQtZGVzdGluYXRpb24gImNvbS5hcHBsZS5pbWFnZWNhcHR1cmVleHRlbnNp
b24yIikpKQotCi07OyBDYW1lcmEKLShkZWZpbmUgKHdlYmtpdC1jYW1lcmEpCi0gICAgKHNoYXJl
ZC1wcmVmZXJlbmNlcy1yZWFkICJjb20uYXBwbGUuY29yZW1lZGlhIikKLSAgICAoYWxsb3cgbWFj
aC1sb29rdXAgKGV4dGVuc2lvbiAiY29tLmFwcGxlLmFwcC1zYW5kYm94Lm1hY2giKSkKLSAgICAo
YWxsb3cgbWFjaC1sb29rdXAKLSAgICAgICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuY21pby5B
cHBsZUNhbWVyYUFzc2lzdGFudCIpCi0gICAgICAgIDs7IEFwcGxlIERBTCBhc3Npc3RhbnRzCi0g
ICAgICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLmNtaW8uVkRDQXNzaXN0YW50IikKLSAgICAg
ICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuY21pby5BVkNBc3Npc3RhbnQiKQotICAgICAgICAo
Z2xvYmFsLW5hbWUgImNvbS5hcHBsZS5jbWlvLklJRENWaWRlb0Fzc2lzdGFudCIpCi0gICAgICAg
IDs7IFF1aWNrVGltZUlJRENEaWdpdGl6ZXIgYXNzaXN0YW50Ci0gICAgICAgIChnbG9iYWwtbmFt
ZSAiY29tLmFwcGxlLklJRENBc3Npc3RhbnQiKSkKLSAgICAoYWxsb3cgaW9raXQtb3BlbgotICAg
ICAgICA7OyBRdWlja1RpbWVVU0JWRENEaWdpdGl6ZXIKLSAgICAgICAgKGlva2l0LXVzZXItY2xp
ZW50LWNsYXNzICJJT1VTQkRldmljZVVzZXJDbGllbnRWMiIpCi0gICAgICAgIChpb2tpdC11c2Vy
LWNsaWVudC1jbGFzcyAiSU9VU0JJbnRlcmZhY2VVc2VyQ2xpZW50VjIiKSkKLSAgICAoYWxsb3cg
ZGV2aWNlLWNhbWVyYSkpCi0KLTs7IE1pY3JvcGhvbmUKLShkZWZpbmUgKHdlYmtpdC1taWNyb3Bo
b25lKQotICAgIChhbGxvdyBkZXZpY2UtbWljcm9waG9uZSkpCi0KLShhbGxvdyBpcGMtcG9zaXgt
c2htKgotICAgIChpcGMtcG9zaXgtbmFtZS1yZWdleCAjIl5BdWRpb0lPIikKLSAgICAoaXBjLXBv
c2l4LW5hbWUtcmVnZXggIyJeQ0ZQQlM6IikKLSAgICAoaXBjLXBvc2l4LW5hbWUtcmVnZXggIyJe
Y29tXC5hcHBsZVwuY3NcLiIpCi0gICAgKGlwYy1wb3NpeC1uYW1lLXJlZ2V4ICMiXmxzXC4iKSkK
LShhbGxvdyBpcGMtcG9zaXgtc2htLXJlYWQqCi0gICAgKGlwYy1wb3NpeC1uYW1lLXJlZ2V4ICMi
Xi90bXAvY29tXC5hcHBsZVwuY3NzZWVkXC4iKQotICAgIChpcGMtcG9zaXgtbmFtZSAiRk5ldHdv
cmsuZGVmYXVsdFN0b3JhZ2VTZXNzaW9uIikKLSAgICAoaXBjLXBvc2l4LW5hbWUgImFwcGxlLnNo
bS5ub3RpZmljYXRpb25fY2VudGVyIikpCi0KLTs7IFNpbGVudGx5IGJsb2NrIGFjY2VzcyB0byBz
b21lIHJlc291cmNlcwotKGRlbnkgZmlsZS1yZWFkKiBmaWxlLXdyaXRlKiAod2l0aCBuby1sb2cp
Ci0gICAgKHN1YnBhdGggIi9OZXR3b3JrL0xpYnJhcnkiKQotICAgIChzdWJwYXRoICIvTmV0d29y
ay9BcHBsaWNhdGlvbnMiKQotICAgIChob21lLWxpYnJhcnktcHJlZmVyZW5jZXMtcmVnZXggIyIv
Y29tXC5hcHBsZVwuaW50ZXJuZXRjb25maWcocHJpdik/XC5wbGlzdCIpCi0KLSAgICA7OyBGSVhN
RTogU2hvdWxkIGJlIHJlbW92ZWQgYWZ0ZXIgPHJkYXI6Ly9wcm9ibGVtLzEwNDYzODgxPiBpcyBm
aXhlZC4KLSAgICAoaG9tZS1saWJyYXJ5LXByZWZlcmVuY2VzLWxpdGVyYWwgIi9jb20uYXBwbGUu
TGF1bmNoU2VydmljZXMuUXVhcmFudGluZUV2ZW50c1YyIikKLSAgICAoaG9tZS1saWJyYXJ5LXBy
ZWZlcmVuY2VzLWxpdGVyYWwgIi9jb20uYXBwbGUuTGF1bmNoU2VydmljZXMuUXVhcmFudGluZUV2
ZW50c1YyLWpvdXJuYWwiKSkKLQotKGRlbnkgbWFjaC1sb29rdXAgKHdpdGggbm8tbG9nKQotICAg
IChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLkZTRXZlbnRzIikKLSAgICAoZ2xvYmFsLW5hbWUgImNv
bS5hcHBsZS5jb3Jlc2VydmljZXMuYXBwbGVldmVudHMiKQotICAgIChnbG9iYWwtbmFtZSAiY29t
LmFwcGxlLmRvY2suc2VydmVyIikKLSAgICAoZ2xvYmFsLW5hbWUtcmVnZXggIyJeY29tXC5hcHBs
ZVwuZGlzdHJpYnV0ZWRfbm90aWZpY2F0aW9ucyIpKQotCi07OyBUaGUgYmVsb3cgcnVsZXMgYXJl
IGluc2VydGVkIGF0IHRoZSBlbmQgb2Ygc2FuZGJveCBwcm9maWxlIGNvbXBpbGF0aW9uIGJ5IG92
ZXJyaWRpbmcgdGhlIGZpbmFsaXplci4KLTs7IFRoZSBpbml0aWFsIHZhbHVlIG9mICVmaW5hbGl6
ZSBtdXN0IGJlIHRoZSBsYXN0IGZ1bmN0aW9uIGNhbGxlZC4KLShsZXRyZWMKLSAgICgob3JpZ2lu
YWwtJWZpbmFsaXplICVmaW5hbGl6ZSkKLSAgICAod2Via2l0LSVmaW5hbGl6ZQotICAgICAgICAo
bGFtYmRhICgpCi0gICAgICAgICAgICAoaWYgKG5vdCAoZGVmaW5lZD8gJ2FsbG93LXN5bWxpbmtz
KSkKLSAgICAgICAgICAgICAgICAoaWYgKGRlZmluZWQ/ICd2bm9kZS10eXBlKQotICAgICAgICAg
ICAgICAgICAgICAoZGVueSBmaWxlLXdyaXRlLWNyZWF0ZQotICAgICAgICAgICAgICAgICAgICAg
ICAgKHZub2RlLXR5cGUgU1lNTElOSykpKSkKLSAgICAgICAgICAgIDs7IFJlc2VydmUgYSBuYW1l
c3BhY2UgZm9yIGFkZGl0aW9uYWwgcHJvdGVjdGVkIGV4dGVuZGVkIGF0dHJpYnV0ZXMuCi0gICAg
ICAgICAgICAoZGVueSBmaWxlLXJlYWQteGF0dHIgZmlsZS13cml0ZS14YXR0ciAoeGF0dHIgIyJe
Y29tXC5hcHBsZVwuc2VjdXJpdHlcLnByaXZhdGVcLiIpKQotICAgICAgICAgICAgOzsgRklYTUU6
IFNob3VsZCBiZSByZW1vdmVkIG9uY2UgPHJkYXI6Ly9wcm9ibGVtLzE2MzI5MDg3PiBpcyBmaXhl
ZC4KLSAgICAgICAgICAgIChpZiAoZGVmaW5lZD8gJ3hhdHRyLXJlZ2V4KQotICAgICAgICAgICAg
ICAgIChkZW55IGZpbGUtcmVhZC14YXR0ciBmaWxlLXdyaXRlLXhhdHRyICh4YXR0ci1yZWdleCAj
Il5jb21cLmFwcGxlXC5zZWN1cml0eVwucHJpdmF0ZVwuIikpCi0gICAgICAgICAgICAgICAgKGRl
bnkgZmlsZS1yZWFkLXhhdHRyIGZpbGUtd3JpdGUteGF0dHIgKHhhdHRyICMiXmNvbVwuYXBwbGVc
LnNlY3VyaXR5XC5wcml2YXRlXC4iKSkpCi0gICAgICAgICAgICAob3JpZ2luYWwtJWZpbmFsaXpl
KSkpKQotICAgKHNldCEgJWZpbmFsaXplIHdlYmtpdC0lZmluYWxpemUpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NuLm1pY3JvZG9u
ZS5jbWIuc2FmYXJpLnNiIGIvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFBy
b2ZpbGVzL2NuLm1pY3JvZG9uZS5jbWIuc2FmYXJpLnNiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhMGE3MWNmNzVlOGI4YTk4NzQ4MjU3ZWJjNGIzMTE2OTVlY2MxMzFkLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUmVz
b3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jbi5taWNyb2RvbmUuY21iLnNhZmFyaS5zYgor
KysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTsgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLTsKLTsgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci07IG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
OyBhcmUgbWV0OgotOyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotOyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi07IDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLTsgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLTsKLTsgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotOyBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLTsgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotOyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLTsgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotOyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotOyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLTsgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLTsg
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLTsgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotOyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNh
bmRib3hQcm9maWxlcy9jb20uYXBwbGUuQm9jb21TdWJtaXRDdHJsLnNiIGIvU291cmNlL1dlYktp
dC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5hcHBsZS5Cb2NvbVN1Ym1pdEN0
cmwuc2IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYTcxY2Y3NWU4YjhhOTg3NDgy
NTdlYmM0YjMxMTY5NWVjYzEzMWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVz
L2NvbS5hcHBsZS5Cb2NvbVN1Ym1pdEN0cmwuc2IKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCww
IEBACi07IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci07Ci07IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotOyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLTsgYXJlIG1ldDoKLTsgMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLTsg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotOyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotOyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi07ICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci07Ci07IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLTsgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi07IFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLTsg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi07IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLTsgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLTsgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi07IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi07IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi07IEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLTsgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmFwcGxlLk5Q
U2FmZUlucHV0LnNiIGIvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2Zp
bGVzL2NvbS5hcHBsZS5OUFNhZmVJbnB1dC5zYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNTE3YjJkODZmZTEwNzEyYmY4ZjZiOWE1ZTBiN2I0MGRjMjUzYWZlMS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNl
cy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmFwcGxlLk5QU2FmZUlucHV0LnNiCisrKyAvZGV2
L251bGwKQEAgLTEsMzIgKzAsMCBAQAotOyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotOwotOyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLTsgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi07IGFyZSBt
ZXQ6Ci07IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLTsgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLTsgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotOyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotOwotOyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi07IEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
OyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi07IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotOyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi07IENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi07IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotOyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotOyBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotOyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi07IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotKGFsbG93IG1hY2gtbG9va3VwCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuZG9j
ay5mdWxsc2NyZWVuIikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5pb2hpZGV2ZW50c3lz
dGVtIikpCi0KLShhbGxvdyBmaWxlLXJlYWQqCi0gICAgKGxpdGVyYWwgIi9MaWJyYXJ5L0ludGVy
bmV0IFBsdWctSW5zL2RhdGEuaW5pIikpCi0KLShhbGxvdyBpb2tpdC1nZXQtcHJvcGVydGllcwot
ICAgIChpb2tpdC1wcm9wZXJ0eSAibWFudWZhY3R1cmVyIikpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmFwcGxlLk5QU2FmZVN1
Ym1pdC5zYiBiL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9j
b20uYXBwbGUuTlBTYWZlU3VibWl0LnNiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
MGE3MWNmNzVlOGI4YTk4NzQ4MjU3ZWJjNGIzMTE2OTVlY2MxMzFkLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1Bs
dWdJblNhbmRib3hQcm9maWxlcy9jb20uYXBwbGUuTlBTYWZlU3VibWl0LnNiCisrKyAvZGV2L251
bGwKQEAgLTEsMjMgKzAsMCBAQAotOyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotOwotOyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLTsgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi07IGFyZSBtZXQ6
Ci07IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLTsgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLTsgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
OyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotOwotOyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi07IEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotOyBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi07IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotOyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi07IENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi07IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotOyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotOyBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotOyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi07IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2Zp
bGVzL2NvbS5hcHBsZS5RdWlja1RpbWUgUGx1Z2luLnBsdWdpbi5zYiBiL1NvdXJjZS9XZWJLaXQv
UmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uYXBwbGUuUXVpY2tUaW1lIFBsdWdp
bi5wbHVnaW4uc2IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MWNkNTRiYmNiODU5
YzhjMDMxYWFiOGVkNjZlNzYwZWQ2M2YwMTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFBy
b2ZpbGVzL2NvbS5hcHBsZS5RdWlja1RpbWUgUGx1Z2luLnBsdWdpbi5zYgkKKysrIC9kZXYvbnVs
bApAQCAtMSwzMSArMCwwIEBACi07IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi07Ci07IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotOyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLTsgYXJlIG1ldDoK
LTsgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLTsgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotOyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotOyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi07
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi07Ci07IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLTsgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi07IFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLTsgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi07IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLTsgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLTsgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi07IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi07IENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi07IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLTsgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci0od2Via2l0LXBvd2VyYm94KQotKHNoYXJlZC1wcmVmZXJlbmNlcy1yZWFkLXdyaXRlICJjb20u
YXBwbGUucXVpY2t0aW1lLnBsdWdpbi5wcmVmZXJlbmNlcyIpCi0KLShhbGxvdyBmaWxlLXJlYWQq
IGZpbGUtd3JpdGUqCi0gICAgKGhvbWUtbGlicmFyeS1zdWJwYXRoICIvQ2FjaGVzL1F1aWNrVGlt
ZSIpCi0gICAgKGhvbWUtbGlicmFyeS1wcmVmZXJlbmNlcy1saXRlcmFsICIvUXVpY2tUaW1lIFBy
ZWZlcmVuY2VzIikpCi0KLShhbGxvdyBuZXR3b3JrLWJpbmQgKGxvY2FsIGlwKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uYXBw
bGUuYXBwc3RvcmUuQ29kZVJlZGVlbWVyTmV0c2NhcGVQbHVnaW4uc2IgYi9Tb3VyY2UvV2ViS2l0
L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmFwcGxlLmFwcHN0b3JlLkNvZGVS
ZWRlZW1lck5ldHNjYXBlUGx1Z2luLnNiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
OGQyMDBjNTY1MmVkZTBhZTQ4Mzg0ZWVkOWVjOGZlMzJjNzU1ZGI3Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1Bs
dWdJblNhbmRib3hQcm9maWxlcy9jb20uYXBwbGUuYXBwc3RvcmUuQ29kZVJlZGVlbWVyTmV0c2Nh
cGVQbHVnaW4uc2IKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi07IENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi07Ci07IFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
OyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLTsgYXJlIG1ldDoKLTsgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLTsgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotOyAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotOyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi07ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi07Ci07IFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLTsgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi07IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLTsgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi07
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLTsgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLTsgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi07IElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi07IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi07IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLTsgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0od2Via2l0LWNhbWVyYSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uYXBwbGUuaXN0
LmRzLmFwcGxlY29ubmVjdC53ZWJwbHVnaW4uc2IgYi9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9Q
bHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmFwcGxlLmlzdC5kcy5hcHBsZWNvbm5lY3Qud2VicGx1
Z2luLnNiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2Y2ZmQ5NjlkZTZhZDUwMDJh
YWE3ODNjZjI4ZDRiMGI5MDY0OTc5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxl
cy9jb20uYXBwbGUuaXN0LmRzLmFwcGxlY29ubmVjdC53ZWJwbHVnaW4uc2IKKysrIC9kZXYvbnVs
bApAQCAtMSw2NSArMCwwIEBACi07IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi07Ci07IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotOyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLTsgYXJl
IG1ldDoKLTsgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLTsgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotOyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotOyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi07ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi07Ci07IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLTsgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci07IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLTsgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi07IEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLTsg
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLTsgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi07IElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi07IENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi07IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLTsgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0oYWxsb3cgbWFjaC1sb29rdXAKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5p
c3QuZHMuYXBwbGVjb25uZWN0Mi5zZXJ2aWNlLmFkbWluIikKLSAgICAoZ2xvYmFsLW5hbWUgImNv
bS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0Mi5zZXJ2aWNlLmFnZW50IikKLSAgICAoZ2xvYmFs
LW5hbWUgImNvbS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0Mi5zZXJ2aWNlLmtkY3R1bm5lbGNv
bnRyb2xsZXIiKQotICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLmlzdC5kcy5hcHBsZWNvbm5l
Y3QyLnNlcnZpY2UubWVudWV4dHJhIikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS53aWZp
LmFucXAiKQotICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLkdTU0NyZWQiKQotICAgIChnbG9i
YWwtbmFtZSAib3JnLmg1bC5rY20iKSkKLShhbGxvdyBtYWNoLWxvb2t1cAotICAgIChnbG9iYWwt
bmFtZS1yZWdleCAjIl5jb21cLmFwcGxlXC5pc3RcLmRzXC5hcHBsZWNvbm5lY3QyXC5zZXJ2aWNl
XC5jb21cLmFwcGxlXC5XZWJLaXRcLlBsdWdpblwuKDMyfDY0KShcLkRldmVsb3BtZW50KT9cW1sw
LTldK1xdJCIpCi0gICAgKGdsb2JhbC1uYW1lLXJlZ2V4ICMiXmNvbVwuYXBwbGVcLmlzdFwuZHNc
LmFwcGxlY29ubmVjdDJcLnNlcnZpY2VcLlBsdWdpblByb2Nlc3NcW1swLTldK1xdJCIpKQotCi0o
c2hhcmVkLXByZWZlcmVuY2VzLXJlYWQKLSAgICAiY29tLmFwcGxlLkdTUyIKLSAgICAiY29tLmFw
cGxlLmlzdC5kcy5hcHBsZWNvbm5lY3QyIgotICAgICJjb20uYXBwbGUuaXN0LmRzLmFwcGxlY29u
bmVjdDIuYWNjZXB0YW5jZVRlc3QiCi0gICAgImNvbS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0
Mi5wcm9kdWN0aW9uIgotICAgICJjb20uYXBwbGUuaXN0LmRzLmFwcGxlY29ubmVjdDIudWF0Igot
ICAgICJjb20uYXBwbGUuS2VyYmVyb3MiCi0gICAgImNvbS5hcHBsZS5uZXR3b3JrQ29ubmVjdCIK
LSAgICAiZWR1Lm1pdC5LZXJiZXJvcyIpCi0KLShhbGxvdyBmaWxlLXJlYWQqCi0gICAgKHN1YnBh
dGggIi9MaWJyYXJ5L0tlcmJlcm9zUGx1Z2lucy9HU1NBUEkiKQotICAgIChzdWJwYXRoICIvTGli
cmFyeS9LZXJiZXJvc1BsdWdpbnMvS2VyYmVyb3NGcmFtZXdvcmtQbHVnaW5zIikKLSAgICAobGl0
ZXJhbCAiL0xpYnJhcnkvUHJlZmVyZW5jZXMvZWR1Lm1pdC5LZXJiZXJvcyIpCi0gICAgKGxpdGVy
YWwgIi9MaWJyYXJ5L1ByZWZlcmVuY2VzL1N5c3RlbUNvbmZpZ3VyYXRpb24vcHJlZmVyZW5jZXMu
cGxpc3QiKQotICAgIChob21lLWxpYnJhcnktcHJlZmVyZW5jZXMtbGl0ZXJhbCAiL2VkdS5taXQu
S2VyYmVyb3MiKSkKLQotKGFsbG93IGZpbGUtcmVhZCoKLSAgICAobGl0ZXJhbCAiL3ByaXZhdGUv
ZXRjL3NlcnZpY2VzIikpCi0KLShpZiAoZGVmaW5lZD8gJ21hY2gtcmVnaXN0ZXIpCi0gICAgKGFs
bG93IG1hY2gtcmVnaXN0ZXIKLSAgICAgICAgKGdsb2JhbC1uYW1lLXJlZ2V4ICMiXmNvbVwuYXBw
bGVcLmlzdFwuZHNcLmFwcGxlY29ubmVjdDJcLnNlcnZpY2VcLmNvbVwuYXBwbGVcLldlYktpdFwu
UGx1Z2luXC4oMzJ8NjQpKFwuRGV2ZWxvcG1lbnQpP1xbWzAtOV0rXF0kIikKLSAgICAgICAgKGds
b2JhbC1uYW1lLXJlZ2V4ICMiXmNvbVwuYXBwbGVcLmlzdFwuZHNcLmFwcGxlY29ubmVjdDJcLnNl
cnZpY2VcLlBsdWdpblByb2Nlc3NcW1swLTldK1xdJCIpKSkKLQotKGFsbG93IHN5c3RlbS1zb2Nr
ZXQpCi0oYWxsb3cgbmV0d29yay1vdXRib3VuZAotICAgKHJlbW90ZSB1ZHAgIio6NDE2MCIgIio6
ODgiKSkKLShhbGxvdyBuZXR3b3JrLWluYm91bmQKLSAgIChsb2NhbCB1ZHApKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5jZmNh
Lm5wU2VjRWRpdEN0bC5NQUMuQk9DLnBsdWdpbi5zYiBiL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2Vz
L1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uY2ZjYS5ucFNlY0VkaXRDdGwuTUFDLkJPQy5wbHVn
aW4uc2IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1N2NhMGZmNDViMmFiODlmZTQ5
NjgzYjRlNWI5M2VjZjJlYWZmNWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVz
L2NvbS5jZmNhLm5wU2VjRWRpdEN0bC5NQUMuQk9DLnBsdWdpbi5zYgorKysgL2Rldi9udWxsCkBA
IC0xLDI1ICswLDAgQEAKLTsgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLTsKLTsgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci07IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotOyBhcmUgbWV0OgotOyAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotOyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi07IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLTsgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLTsKLTsgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotOyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLTsgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotOyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLTsgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotOyBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotOyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLTsgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLTsgQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LTsgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotOyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLShh
bGxvdyBmaWxlLXJlYWQqIGZpbGUtd3JpdGUqCi0gICAgKGxpdGVyYWwgIi9MaWJyYXJ5L0ludGVy
bmV0IFBsdWctSW5zL25wU2VjRWRpdEN0bC5NQUMuQk9DLnNpZyIpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5jaXNjby53ZWJl
eC5wbHVnaW4uZ3BjNjQuc2IgYi9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94
UHJvZmlsZXMvY29tLmNpc2NvLndlYmV4LnBsdWdpbi5ncGM2NC5zYgpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggY2E2Y2Y4MzU4ZmFjOGFkY2Y4ZGNiZGQzYTQ1NDk5MGE4NTA3MzlkNy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmNpc2NvLndlYmV4LnBsdWdp
bi5ncGM2NC5zYgorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLTsgQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLTsKLTsgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci07
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotOyBhcmUgbWV0OgotOyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotOyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi07IDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci07ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLTsgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLTsKLTsgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotOyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLTsgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotOyBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLTsg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotOyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotOyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLTsgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLTsgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLTsgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotOyBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLShkZWZpbmUgYWxsb3ctc3ltbGlua3MgI3QpCi0KLShk
ZWZpbmUgKGhvbWUtc3VicGF0aCBob21lLXJlbGF0aXZlLXN1YnBhdGgpCi0gICAgKHN1YnBhdGgg
KHN0cmluZy1hcHBlbmQgKHBhcmFtICJIT01FX0RJUiIpIGhvbWUtcmVsYXRpdmUtc3VicGF0aCkp
KQotKGRlZmluZSAoaG9tZS1saXRlcmFsIGhvbWUtcmVsYXRpdmUtbGl0ZXJhbCkKLSAgICAobGl0
ZXJhbCAoc3RyaW5nLWFwcGVuZCAocGFyYW0gIkhPTUVfRElSIikgaG9tZS1yZWxhdGl2ZS1saXRl
cmFsKSkpCi0KLShhbGxvdyBmaWxlLXJlYWQqIGZpbGUtd3JpdGUqCi0gICAgKGhvbWUtbGl0ZXJh
bCAiL0xpYnJhcnkvUHJlZmVyZW5jZXMvY29tLmNpc2NvLndlYmV4LmZ1enp5V2luZG93Q29uZmln
LnBsaXN0IikpCi0KLShhbGxvdyBmaWxlLXJlYWQqIGZpbGUtd3JpdGUqCi0gICAgKGhvbWUtbGl0
ZXJhbCAiL0xpYnJhcnkvUHJlZmVyZW5jZXMvY29tLndlYmV4Lm1lZXRpbmdtYW5hZ2VyLnBsaXN0
IikpCi0KLShhbGxvdyBmaWxlLXJlYWQqIGZpbGUtd3JpdGUqIGZpbGUtd3JpdGUtY3JlYXRlCi0g
ICAgKGhvbWUtc3VicGF0aCAiL0xpYnJhcnkvQXBwbGljYXRpb24gU3VwcG9ydC9XZWJFeCBGb2xk
ZXIiKSkKLQotOzsgRklYTUU6IFdlIHNob3VsZCB0aWd0aGVuIHRoZSBzYW5kYm94IHRvIHNvbWUg
dG1wIHN1YmZvbGRlcnMKLShhbGxvdyBmaWxlKgotICAgIChwcmVmaXggIi9wcml2YXRlL3RtcCIp
KQotCi0oYWxsb3cgZmlsZS1yZWFkLWRhdGEgZmlsZS13cml0ZS1kYXRhCi0gICAgKHBhdGggIi9k
ZXYvdHR5IikpCi0KLShhbGxvdyBwcm9jZXNzLWV4ZWMpCi0oYWxsb3cgcHJvY2Vzcy1mb3JrKQot
KGFsbG93IGRpc3RyaWJ1dGVkLW5vdGlmaWNhdGlvbi1wb3N0KQotCi0oYWxsb3cgbWFjaC1sb29r
dXAKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5QZXJmb3JtYW5jZUFuYWx5c2lzLmFuaW1h
dGlvbnBlcmZkIikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5kb2NrLmZ1bGxzY3JlZW4i
KQotICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLnF1aWNrbG9vay51aS5oZWxwZXIuYWN0aXZl
IikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5xdWlja2xvb2sudWkuaGVscGVyIikKLSAg
ICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5pbnB1dG1ldGhvZGtpdC5sYXVuY2hhZ2VudCIpCi0g
ICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuaW5wdXRtZXRob2RraXQubGF1bmNoZXIiKQotICAg
IChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLmlucHV0bWV0aG9ka2l0LmdldHhwY2VuZHBvaW50Iikp
Ci0KLShhbGxvdyBpb2tpdC1nZXQtcHJvcGVydGllcwotICAgIChpb2tpdC1wcm9wZXJ0eSAiUG93
ZXJDb250cm9sU3VwcG9ydGVkIikKLSAgICAoaW9raXQtcHJvcGVydHkgIlN1cHBvcnRUYXBUb1dh
a2UiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiUmVzZXRPbkxvY2tNcyIpCi0gICAgKGlva2l0LXBy
b3BlcnR5ICJSZXNldE9uVW5sb2NrTXMiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiU2hvdWxkUmVz
ZXRPbkJ1dHRvbiIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJXaXJlbGVzc0NoYXJnaW5nTm90aWZp
Y2F0aW9uU3VwcG9ydGVkIikKLSAgICAoaW9raXQtcHJvcGVydHkgIlN1cHBvcnRzU2lsZW50Q2xp
Y2siKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiTWluRGlnaXRpemVyUHJlc3N1cmVWYWx1ZSIpCi0g
ICAgKGlva2l0LXByb3BlcnR5ICJBY2N1cmF0ZU1heERpZ2l0aXplclByZXNzdXJlVmFsdWUiKQot
ICAgIChpb2tpdC1wcm9wZXJ0eSAiRXh0ZW5kZWRNYXhEaWdpdGl6ZXJQcmVzc3VyZVZhbHVlIikK
LSAgICAoaW9raXQtcHJvcGVydHkgIkFuaW1hdGlvblRocmVzaG9sZHMiKQotICAgIChpb2tpdC1w
cm9wZXJ0eSAiQWN0aXZhdGlvblRocmVzaG9sZHMiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAibXQt
ZGV2aWNlLWlkIikpCi0KLSh3ZWJraXQtcG93ZXJib3gpCi0od2Via2l0LXByaW50aW5nKQotKHdl
YmtpdC1jYW1lcmEpCi0od2Via2l0LW1pY3JvcGhvbmUpCi0KLShhbGxvdyBuZXR3b3JrLWJpbmQg
KGxvY2FsIGlwKSkKLQotKGFsbG93IG5ldHdvcmstb3V0Ym91bmQpCi0oYWxsb3cgbmV0d29yay1p
bmJvdW5kIChsb2NhbCBpcCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9Q
bHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmNtYmNoaW5hLkNNQlNlY3VyaXR5LnNiIGIvU291cmNl
L1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5jbWJjaGluYS5DTUJT
ZWN1cml0eS5zYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBlOWJmZDRjNTIyMDI4
Y2E1OTZhZjYzNmNmODBjNmY4ZTk4NmFkOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJv
ZmlsZXMvY29tLmNtYmNoaW5hLkNNQlNlY3VyaXR5LnNiCisrKyAvZGV2L251bGwKQEAgLTEsMjYg
KzAsMCBAQAotOyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotOwotOyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLTsgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi07IGFyZSBtZXQ6Ci07IDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci07ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLTsgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLTsgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotOyAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotOwotOyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi07IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotOyBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci07IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotOyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi07IENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi07IFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotOyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotOyBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotOyBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi07IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotKGFsbG93IG1h
Y2gtbG9va3VwCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuZG9jay5mdWxsc2NyZWVuIikK
LSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5pb2hpZGV2ZW50c3lzdGVtIikpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmZ0
c2FmZS5OUEFQSS1Db3JlLVNhZmUtU29mdEtleWJhb3JkLnBsdWdpbi5yZmMxMDM0aWRlbnRpZmll
ci5zYiBiL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20u
ZnRzYWZlLk5QQVBJLUNvcmUtU2FmZS1Tb2Z0S2V5YmFvcmQucGx1Z2luLnJmYzEwMzRpZGVudGlm
aWVyLnNiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGE3MWNmNzVlOGI4YTk4NzQ4
MjU3ZWJjNGIzMTE2OTVlY2MxMzFkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxl
cy9jb20uZnRzYWZlLk5QQVBJLUNvcmUtU2FmZS1Tb2Z0S2V5YmFvcmQucGx1Z2luLnJmYzEwMzRp
ZGVudGlmaWVyLnNiCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotOyBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotOwotOyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LTsgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi07IGFyZSBtZXQ6Ci07IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLTsgMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLTsgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotOyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotOwotOyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi07IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotOyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi07IFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
OyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi07IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi07IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotOyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotOyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotOyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi07IFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9SZXNv
dXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5nb29nbGUuZ29vZ2xldGFsa2Jyb3dzZXJw
bHVnaW4uc2IgYi9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMv
Y29tLmdvb2dsZS5nb29nbGV0YWxrYnJvd3NlcnBsdWdpbi5zYgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYmY0ZjBkZDc4YzllZTJlYTQ4MmJhNzdmNThlYjMxNDg5YjBkYjkyMS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmdvb2dsZS5nb29nbGV0YWxrYnJv
d3NlcnBsdWdpbi5zYgorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTsgQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLTsKLTsgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci07IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotOyBhcmUgbWV0OgotOyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotOyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi07IDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLTsgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLTsKLTsgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotOyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLTsgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotOyBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LTsgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotOyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotOyBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLTsgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLTsgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLTsgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotOyBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLShkZWZpbmUgKGhvbWUtc3VicGF0aCBob21lLXJl
bGF0aXZlLXN1YnBhdGgpCi0gICAgKHN1YnBhdGggKHN0cmluZy1hcHBlbmQgKHBhcmFtICJIT01F
X0RJUiIpIGhvbWUtcmVsYXRpdmUtc3VicGF0aCkpKQotCi0oYWxsb3cgZmlsZS1yZWFkKiBmaWxl
LXdyaXRlKgotICAgIChob21lLXN1YnBhdGggIi9MaWJyYXJ5L0FwcGxpY2F0aW9uIFN1cHBvcnQv
R29vZ2xlL0dvb2dsZSBUYWxrIFBsdWdpbiIpKQotCi0oYWxsb3cgZmlsZS1yZWFkKiBmaWxlLXdy
aXRlKgotICAgIChzdWJwYXRoICIvTGlicmFyeS9BcHBsaWNhdGlvbiBTdXBwb3J0L0dvb2dsZSIp
KQotCi0oYWxsb3cgam9iLWNyZWF0aW9uKQotKGFsbG93IHNpZ25hbCkKLShhbGxvdyBtYWNoLWxv
b2t1cCkKLQotKHdlYmtpdC1wb3dlcmJveCkKLSh3ZWJraXQtcHJpbnRpbmcpCi0od2Via2l0LWNh
bWVyYSkKLSh3ZWJraXQtbWljcm9waG9uZSkKLQotKGFsbG93IG5ldHdvcmstYmluZCAobG9jYWwg
aXApKQotCi0oYWxsb3cgbmV0d29yay1vdXRib3VuZCkKLShhbGxvdyBuZXR3b3JrLWluYm91bmQg
KGxvY2FsIGlwKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNh
bmRib3hQcm9maWxlcy9jb20uZ29vZ2xlLm8xZGJyb3dzZXJwbHVnaW4uc2IgYi9Tb3VyY2UvV2Vi
S2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmdvb2dsZS5vMWRicm93c2Vy
cGx1Z2luLnNiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2JiZDc0OTAyNzEwNTQy
NzVhZjk5MDYwYTA0YzhhYzM0OTJjNWYyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9m
aWxlcy9jb20uZ29vZ2xlLm8xZGJyb3dzZXJwbHVnaW4uc2IKKysrIC9kZXYvbnVsbApAQCAtMSw1
MCArMCwwIEBACi07IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi07Ci07IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotOyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLTsgYXJlIG1ldDoKLTsgMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLTsgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotOyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotOyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi07ICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi07Ci07IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLTsgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi07IFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLTsgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi07IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLTsgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLTsg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi07IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi07IENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi07IEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLTsgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0oZGVmaW5l
IChob21lLXN1YnBhdGggaG9tZS1yZWxhdGl2ZS1zdWJwYXRoKQotICAgIChzdWJwYXRoIChzdHJp
bmctYXBwZW5kIChwYXJhbSAiSE9NRV9ESVIiKSBob21lLXJlbGF0aXZlLXN1YnBhdGgpKSkKLQot
KGFsbG93IGZpbGUtcmVhZCogZmlsZS13cml0ZSoKLSAgICAoaG9tZS1zdWJwYXRoICIvTGlicmFy
eS9BcHBsaWNhdGlvbiBTdXBwb3J0L0dvb2dsZS9Hb29nbGUgVGFsayBQbHVnaW4iKSkKLQotKGFs
bG93IGZpbGUtcmVhZCogZmlsZS13cml0ZSoKLSAgICAoc3VicGF0aCAiL0xpYnJhcnkvQXBwbGlj
YXRpb24gU3VwcG9ydC9Hb29nbGUiKSkKLQotKGFsbG93IGZpbGUqCi0gICAgKHByZWZpeCAiL3By
aXZhdGUvdG1wIikpCi0KLShhbGxvdyBuZXR3b3JrLWJpbmQgKHByZWZpeCAiL3ByaXZhdGUvdG1w
IikpCi0KLShhbGxvdyBqb2ItY3JlYXRpb24pCi0oYWxsb3cgc2lnbmFsKQotKGFsbG93IG1hY2gt
bG9va3VwKQotCi0od2Via2l0LXBvd2VyYm94KQotKHdlYmtpdC1wcmludGluZykKLSh3ZWJraXQt
Y2FtZXJhKQotKHdlYmtpdC1taWNyb3Bob25lKQotCi0oYWxsb3cgbmV0d29yay1iaW5kIChsb2Nh
bCBpcCkpCi0KLShhbGxvdyBuZXR3b3JrLW91dGJvdW5kKQotKGFsbG93IG5ldHdvcmstaW5ib3Vu
ZCAobG9jYWwgaXApKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0lu
U2FuZGJveFByb2ZpbGVzL2NvbS5tYWNyb21lZGlhLkZsYXNoIFBsYXllciBFU1IucGx1Z2luLnNi
IGIvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5tYWNy
b21lZGlhLkZsYXNoIFBsYXllciBFU1IucGx1Z2luLnNiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiMWZhZjQ5NDY4MDQ3YjMxMjJjMGFmZDBjOTk4M2JmNzJkZjIzYjQ2Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUmVz
b3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIg
RVNSLnBsdWdpbi5zYgkKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi07IENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi07Ci07IFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotOyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLTsgYXJlIG1ldDoKLTsgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLTsgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotOyAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotOyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi07ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi07Ci07IFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLTsgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi07IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLTsgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci07IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLTsgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLTsgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi07IElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi07IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi07IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLTsgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0od2Via2l0LXBvd2VyYm94KQotKHdlYmtpdC1w
cmludGluZykKLSh3ZWJraXQtY2FtZXJhKQotKHdlYmtpdC1taWNyb3Bob25lKQotCi0oYWxsb3cg
aXBjLXBvc2l4LXNlbQotICAgIChpcGMtcG9zaXgtbmFtZSAiTWFjcm9tZWRpYVNlbWFwaG9yZURp
ZyIpCi0gICAgKGlwYy1wb3NpeC1uYW1lICI1OTkxODEzMCIpKQotCi0oYWxsb3cgZmlsZS1yZWFk
KgotICAgIChob21lLWxpdGVyYWwgIi9tbS5jZmciKQotICAgIChob21lLWxpdGVyYWwgIi9tbXMu
Y2ZnIikpCi0KLShkZW55IGZpbGUtcmVhZC14YXR0ciAod2l0aCBuby1sb2cpCi0gICAgKGhvbWUt
bGlicmFyeS1saXRlcmFsICIvQ2FjaGVzIikKLSAgICAoaG9tZS1saWJyYXJ5LXByZWZlcmVuY2Vz
LWxpdGVyYWwgIi8iKSkKLQotKGFsbG93IGZpbGUtcmVhZCogZmlsZS13cml0ZS1jcmVhdGUgZmls
ZS13cml0ZS1tb2RlIGZpbGUtd3JpdGUtb3duZXIKLSAgICAoaG9tZS1saWJyYXJ5LWxpdGVyYWwg
Ii9DYWNoZXMvQWRvYmUiKQotICAgIChob21lLWxpYnJhcnktcHJlZmVyZW5jZXMtbGl0ZXJhbCAi
L01hY3JvbWVkaWEiKSkKLQotKGFsbG93IGZpbGUtcmVhZCogZmlsZS13cml0ZSoKLSAgICAobGl0
ZXJhbCAiL0xpYnJhcnkvQXBwbGljYXRpb24gU3VwcG9ydC9NYWNyb21lZGlhL21tcy5jZmciKQot
ICAgIChob21lLWxpYnJhcnktbGl0ZXJhbCAiL0FwcGxpY2F0aW9uIFN1cHBvcnQvTWFjcm9tZWRp
YS9tbXMuY2ZnIikKLSAgICAoaG9tZS1saWJyYXJ5LXN1YnBhdGggIi9DYWNoZXMvQWRvYmUvRmxh
c2ggUGxheWVyIikKLSAgICAoaG9tZS1saWJyYXJ5LXByZWZlcmVuY2VzLXN1YnBhdGggIi9NYWNy
b21lZGlhL0ZsYXNoIFBsYXllciIpKQotCi0oYWxsb3cgZmlsZS1yZWFkKgotICAgIChsaXRlcmFs
ICIvTGlicmFyeS9QcmVmZXJlbmNlUGFuZXMvRmxhc2ggUGxheWVyLnByZWZQYW5lIikKLSAgICAo
aG9tZS1saWJyYXJ5LWxpdGVyYWwgIi9QcmVmZXJlbmNlUGFuZXMvRmxhc2ggUGxheWVyLnByZWZQ
YW5lIikKLSAgICAoaG9tZS1saWJyYXJ5LXJlZ2V4ICIvQXBwbGljYXRpb24gU3VwcG9ydC9NYWNy
b21lZGlhL3NzXC4oY2ZnfGNmbnxzZ24pJCIpKQotCi0oYWxsb3cgZmlsZS1yZWFkKiBmaWxlLXdy
aXRlKgotICAgIChtb3VudC1yZWxhdGl2ZS1yZWdleCAjIl4vXC5UZW1wb3JhcnlJdGVtcy8iKSkK
LQotKGRlbnkgZmlsZS1yZWFkKiAod2l0aCBuby1sb2cpCi0gICAgKGxpdGVyYWwgIi9MaWJyYXJ5
L0FwcGxpY2F0aW9uIFN1cHBvcnQvTWFjcm9tZWRpYS9GbGFzaEF1dGhvci5jZmciKQotICAgIChz
dWJwYXRoICIvTGlicmFyeS9BcHBsaWNhdGlvbiBTdXBwb3J0L01hY3JvbWVkaWEvRmxhc2hQbGF5
ZXJUcnVzdCIpKQotCi0oYWxsb3cgbmV0d29yay1iaW5kIChsb2NhbCBpcCkpCi0KLTs7OwotOzs7
IE5lZWRlZCBmb3IgQ2FtZXJhIGFjY2VzcwotOzs7Ci0oYWxsb3cgaW9raXQtZ2V0LXByb3BlcnRp
ZXMKLSAgICAoaW9raXQtcHJvcGVydHktcmVnZXggIyJeKEFjdGl2YXRpb258QW5pbWF0aW9uKVRo
cmVzaG9sZHMiKQotICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdleCAjIl4oKEFjY3VyYXRlfEV4dGVu
ZGVkKU1heHxNaW4pRGlnaXRpemVyUHJlc3N1cmVWYWx1ZSIpCi0gICAgKGlva2l0LXByb3BlcnR5
ICJJT1BDSVR1bm5lbENvbXBhdGlibGUiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiUG93ZXJDb250
cm9sU3VwcG9ydGVkIikKLSAgICAoaW9raXQtcHJvcGVydHkgIlJlbW92YWJsZSIpCi0gICAgKGlv
a2l0LXByb3BlcnR5ICJSZXNldE9uTG9ja01zIikKLSAgICAoaW9raXQtcHJvcGVydHkgIlJlc2V0
T25VbmxvY2tNcyIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJTaG91bGRSZXNldE9uQnV0dG9uIikK
LSAgICAoaW9raXQtcHJvcGVydHktcmVnZXggIyJeU3VwcG9ydChzU2lsZW50Q2xpY2t8VGFwVG9X
YWtlKSIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJXaXJlbGVzc0NoYXJnaW5nTm90aWZpY2F0aW9u
U3VwcG9ydGVkIikKLSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJ
blNhbmRib3hQcm9maWxlcy9jb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIucGx1Z2luLnNiIGIv
U291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5tYWNyb21l
ZGlhLkZsYXNoIFBsYXllci5wbHVnaW4uc2IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGMwYzJhMjM3NzEyYTYzMzdiZmM4ZDMyMTZhZTE2ZGFhMTA5MmJmZjIuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9SZXNvdXJjZXMv
UGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5tYWNyb21lZGlhLkZsYXNoIFBsYXllci5wbHVnaW4u
c2IJCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotOyBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotOwotOyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLTsgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi07IGFyZSBtZXQ6Ci07IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLTsgMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLTsg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotOyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotOwotOyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi07IEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotOyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi07IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotOyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi07IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi07IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotOyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotOyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotOyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi07IFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotKHdlYmtpdC1wb3dlcmJveCkKLSh3ZWJraXQtcHJpbnRpbmcpCi0o
d2Via2l0LWNhbWVyYSkKLSh3ZWJraXQtbWljcm9waG9uZSkKLQotKGFsbG93IGlwYy1wb3NpeC1z
ZW0KLSAgICAoaXBjLXBvc2l4LW5hbWUgIk1hY3JvbWVkaWFTZW1hcGhvcmVEaWciKQotICAgIChp
cGMtcG9zaXgtbmFtZSAiNTk5MTgxMzAiKSkKLQotKGFsbG93IGZpbGUtcmVhZCoKLSAgICAoaG9t
ZS1saXRlcmFsICIvbW0uY2ZnIikKLSAgICAoaG9tZS1saXRlcmFsICIvbW1zLmNmZyIpKQotCi0o
ZGVueSBmaWxlLXJlYWQteGF0dHIgKHdpdGggbm8tbG9nKQotICAgIChob21lLWxpYnJhcnktbGl0
ZXJhbCAiL0NhY2hlcyIpCi0gICAgKGhvbWUtbGlicmFyeS1wcmVmZXJlbmNlcy1saXRlcmFsICIv
IikpCi0KLShhbGxvdyBmaWxlLXJlYWQqIGZpbGUtd3JpdGUtY3JlYXRlIGZpbGUtd3JpdGUtbW9k
ZSBmaWxlLXdyaXRlLW93bmVyCi0gICAgKGhvbWUtbGlicmFyeS1saXRlcmFsICIvQ2FjaGVzL0Fk
b2JlIikKLSAgICAoaG9tZS1saWJyYXJ5LXByZWZlcmVuY2VzLWxpdGVyYWwgIi9NYWNyb21lZGlh
IikpCi0KLShhbGxvdyBmaWxlLXJlYWQqIGZpbGUtd3JpdGUqCi0gICAgKGxpdGVyYWwgIi9MaWJy
YXJ5L0FwcGxpY2F0aW9uIFN1cHBvcnQvTWFjcm9tZWRpYS9tbXMuY2ZnIikKLSAgICAoaG9tZS1s
aWJyYXJ5LWxpdGVyYWwgIi9BcHBsaWNhdGlvbiBTdXBwb3J0L01hY3JvbWVkaWEvbW1zLmNmZyIp
Ci0gICAgKGhvbWUtbGlicmFyeS1zdWJwYXRoICIvQ2FjaGVzL0Fkb2JlL0ZsYXNoIFBsYXllciIp
Ci0gICAgKGhvbWUtbGlicmFyeS1wcmVmZXJlbmNlcy1zdWJwYXRoICIvTWFjcm9tZWRpYS9GbGFz
aCBQbGF5ZXIiKSkKLQotKGFsbG93IGZpbGUtcmVhZCoKLSAgICAobGl0ZXJhbCAiL0xpYnJhcnkv
UHJlZmVyZW5jZVBhbmVzL0ZsYXNoIFBsYXllci5wcmVmUGFuZSIpCi0gICAgKGhvbWUtbGlicmFy
eS1saXRlcmFsICIvUHJlZmVyZW5jZVBhbmVzL0ZsYXNoIFBsYXllci5wcmVmUGFuZSIpCi0gICAg
KGhvbWUtbGlicmFyeS1yZWdleCAiL0FwcGxpY2F0aW9uIFN1cHBvcnQvTWFjcm9tZWRpYS9zc1wu
KGNmZ3xjZm58c2duKSQiKSkKLQotKGFsbG93IGZpbGUtcmVhZCogZmlsZS13cml0ZSoKLSAgICAo
bW91bnQtcmVsYXRpdmUtcmVnZXggIyJeL1wuVGVtcG9yYXJ5SXRlbXMvIikpCi0KLShkZW55IGZp
bGUtcmVhZCogKHdpdGggbm8tbG9nKQotICAgIChsaXRlcmFsICIvTGlicmFyeS9BcHBsaWNhdGlv
biBTdXBwb3J0L01hY3JvbWVkaWEvRmxhc2hBdXRob3IuY2ZnIikKLSAgICAoc3VicGF0aCAiL0xp
YnJhcnkvQXBwbGljYXRpb24gU3VwcG9ydC9NYWNyb21lZGlhL0ZsYXNoUGxheWVyVHJ1c3QiKSkK
LQotKGFsbG93IG5ldHdvcmstYmluZCAobG9jYWwgaXApKQotCi07OzsKLTs7OyBOZWVkZWQgZm9y
IENhbWVyYSBhY2Nlc3MKLTs7OwotKGFsbG93IGlva2l0LWdldC1wcm9wZXJ0aWVzCi0gICAgKGlv
a2l0LXByb3BlcnR5LXJlZ2V4ICMiXihBY3RpdmF0aW9ufEFuaW1hdGlvbilUaHJlc2hvbGRzIikK
LSAgICAoaW9raXQtcHJvcGVydHktcmVnZXggIyJeKChBY2N1cmF0ZXxFeHRlbmRlZClNYXh8TWlu
KURpZ2l0aXplclByZXNzdXJlVmFsdWUiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiSU9QQ0lUdW5u
ZWxDb21wYXRpYmxlIikKLSAgICAoaW9raXQtcHJvcGVydHkgIlBvd2VyQ29udHJvbFN1cHBvcnRl
ZCIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJSZW1vdmFibGUiKQotICAgIChpb2tpdC1wcm9wZXJ0
eSAiUmVzZXRPbkxvY2tNcyIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJSZXNldE9uVW5sb2NrTXMi
KQotICAgIChpb2tpdC1wcm9wZXJ0eSAiU2hvdWxkUmVzZXRPbkJ1dHRvbiIpCi0gICAgKGlva2l0
LXByb3BlcnR5LXJlZ2V4ICMiXlN1cHBvcnQoc1NpbGVudENsaWNrfFRhcFRvV2FrZSkiKQotICAg
IChpb2tpdC1wcm9wZXJ0eSAiV2lyZWxlc3NDaGFyZ2luZ05vdGlmaWNhdGlvblN1cHBvcnRlZCIp
Ci0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJv
ZmlsZXMvY29tLm1pY3Jvc29mdC5TaWx2ZXJsaWdodFBsdWdpbi5zYiBiL1NvdXJjZS9XZWJLaXQv
UmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20ubWljcm9zb2Z0LlNpbHZlcmxpZ2h0
UGx1Z2luLnNiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDk0YjdmODJkZGRmNjVl
MmQwZjdjMDk1ZjIwN2U2MjFiYjJiOGNkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9m
aWxlcy9jb20ubWljcm9zb2Z0LlNpbHZlcmxpZ2h0UGx1Z2luLnNiCisrKyAvZGV2L251bGwKQEAg
LTEsNTYgKzAsMCBAQAotOyBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotOwotOyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLTsgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi07IGFyZSBtZXQ6Ci07IDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLTsgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLTsgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotOyAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotOwotOyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi07IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotOyBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi07IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotOyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi07IENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci07IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotOyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotOyBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
OyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi07IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotKGFs
bG93IGlva2l0LW9wZW4KLSAgICAoaW9raXQtdXNlci1jbGllbnQtY2xhc3MgIklPSElETGliVXNl
ckNsaWVudCIpCi0gICAgKGlva2l0LXVzZXItY2xpZW50LWNsYXNzICJJT0JsdWV0b290aEhDSVVz
ZXJDbGllbnQiKSkKLQotKHNoYXJlZC1wcmVmZXJlbmNlcy1yZWFkCi0gICAgImNvbS5taWNyb3Nv
ZnQuUGxheVJlYWR5IgotICAgICJjb20ubWljcm9zb2Z0LmF1dG91cGRhdGUyIikKLShzaGFyZWQt
cHJlZmVyZW5jZXMtcmVhZC13cml0ZSAiY29tLm1pY3Jvc29mdC5zaWx2ZXJsaWdodCIpCi0KLShh
bGxvdyBmaWxlLXdyaXRlLWNyZWF0ZQotICAgIChob21lLWxpYnJhcnktbGl0ZXJhbCAiL0FwcGxp
Y2F0aW9uIFN1cHBvcnQvTWljcm9zb2Z0IikpCi0KLShhbGxvdyBmaWxlLXJlYWQqIGZpbGUtd3Jp
dGUqCi0gICAgOzsgU2lnaCwgbW9kZSA3NzcgaW4gL0xpYnJhcnkuCi0gICAgKHN1YnBhdGggIi9M
aWJyYXJ5L0FwcGxpY2F0aW9uIFN1cHBvcnQvTWljcm9zb2Z0L1BsYXlSZWFkeSIpCi0gICAgKGhv
bWUtbGlicmFyeS1zdWJwYXRoICIvQXBwbGljYXRpb24gU3VwcG9ydC9NaWNyb3NvZnQvUGxheVJl
YWR5IikKLSAgICAoaG9tZS1saWJyYXJ5LXN1YnBhdGggIi9BcHBsaWNhdGlvbiBTdXBwb3J0L01p
Y3Jvc29mdC9TaWx2ZXJsaWdodCIpCi0gICAgKGhvbWUtbGlicmFyeS1zdWJwYXRoICIvQ2FjaGVz
L1RlbXBvcmFyeUl0ZW1zIikpCi0KLShpZiAoZGVmaW5lZD8gJ3NlbWFwaG9yZS1vd25lcikKLSAg
ICAoYWxsb3cgaXBjLXBvc2l4LXNlbQotICAgICAgICAgKHNlbWFwaG9yZS1vd25lciBzYW1lLXNh
bmRib3gpKQotICAgIChhbGxvdyBpcGMtcG9zaXgtc2VtCi0gICAgICAgICAoaXBjLXBvc2l4LW5h
bWUgIkxDX011dGV4IikpKQotCi07OyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzEzNjM2MDc4Pgot
KGFsbG93IGlwYy1wb3NpeC1zaG0qCi0gICAgKGlwYy1wb3NpeC1uYW1lLXJlZ2V4ICMiXkNvcmVD
TFJfIikpCi0KLShhbGxvdyBuZXR3b3JrLWJpbmQgKGxvY2FsIGlwKSkKLQotKHdlYmtpdC1wb3dl
cmJveCkKLSh3ZWJraXQtcHJpbnRpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Jlc291
cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLm9yYWNsZS5qYXZhLkphdmFBcHBsZXRQbHVn
aW4uc2IgYi9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29t
Lm9yYWNsZS5qYXZhLkphdmFBcHBsZXRQbHVnaW4uc2IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDdlNjFlYmNmNWE4NmM2ODMzZDVjNTUzMzdmNzFhYzUwMmRkNzI2ZTcuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9SZXNv
dXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5vcmFjbGUuamF2YS5KYXZhQXBwbGV0UGx1
Z2luLnNiCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotOyBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotOwotOyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLTsgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi07IGFyZSBtZXQ6Ci07IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLTsgMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LTsgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotOyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotOwotOyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi07
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotOyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi07IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotOyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi07IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi07IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotOyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotOyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotOyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi07IFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotKHdlYmtpdC1wcmludGluZykKLQotKGFsbG93IHNpZ25hbCBu
ZXR3b3JrLWluYm91bmQpCi0oYWxsb3cgcHJvY2Vzcy1mb3JrKQotKGFsbG93IHByb2Nlc3MtZXhl
YwotICAgIChzdWJwYXRoICIvU3lzdGVtL0xpYnJhcnkvSmF2YS9KYXZhVmlydHVhbE1hY2hpbmVz
IikKLSAgICAoc3VicGF0aCAiL0xpYnJhcnkvSW50ZXJuZXQgUGx1Zy1JbnMvSmF2YUFwcGxldFBs
dWdpbi5wbHVnaW4iKSkKLQotKGFsbG93IG1hY2gtbG9va3VwCi0gICAgKGdsb2JhbC1uYW1lICJj
b20uYXBwbGUuY29yZXNlcnZpY2VzLmxhdW5jaHNlcnZpY2VzZCIpCi0gICAgKGdsb2JhbC1uYW1l
LXJlZ2V4ICMiXlBsYWNlSG9sZGVyU2VydmVyTmFtZS0iKSkKLQotKGFsbG93IGZpbGUtcmVhZCoK
LSAgICAobGl0ZXJhbCAiL2Rldi9mZCIpCi0gICAgKGxpdGVyYWwgIi91c3IvYmluIikKLSAgICAo
bGl0ZXJhbCAiL3ByaXZhdGUvZXRjL2hvc3RzIikKLSAgICAoc3VicGF0aCAiL0xpYnJhcnkvSmF2
YSIpCi0gICAgKHN1YnBhdGggIi9TeXN0ZW0vTGlicmFyeS9KYXZhIikpCi0KLShzaGFyZWQtcHJl
ZmVyZW5jZXMtcmVhZAotICAgICJjb20uYXBwbGUuamF2YS5KYXZhUHJlZmVyZW5jZXMiCi0gICAg
Im5ldC5qYXZhLm9wZW5qZGsuY21kIikKLQotKHNoYXJlZC1wcmVmZXJlbmNlcy1yZWFkLXdyaXRl
Ci0gICAgImNvbS5hcHBsZS5qYXZhLnV0aWwucHJlZnMiCi0gICAgImNvbS5vcmFjbGUuamF2YWRl
cGxveW1lbnQiKQotCi0oYWxsb3cgZmlsZS1yZWFkKiBmaWxlLXdyaXRlKgotICAgIChob21lLWxp
YnJhcnktc3VicGF0aCAiL1NhdmVkIEFwcGxpY2F0aW9uIFN0YXRlL25ldC5qYXZhLm9wZW5qZGsu
Y21kLnNhdmVkU3RhdGUiKQotICAgIChob21lLWxpYnJhcnktc3VicGF0aCAiL0FwcGxpY2F0aW9u
IFN1cHBvcnQvT3JhY2xlL0phdmEvRGVwbG95bWVudCIpCi0gICAgKGhvbWUtbGlicmFyeS1zdWJw
YXRoICIvQ2FjaGVzL0phdmEiKSkKLQotKGFsbG93IGZpbGUtd3JpdGUtY3JlYXRlCi0gICAgKGhv
bWUtbGlicmFyeS1saXRlcmFsICIvQXBwbGljYXRpb24gU3VwcG9ydC9PcmFjbGUiKQotICAgICho
b21lLWxpYnJhcnktbGl0ZXJhbCAiL0FwcGxpY2F0aW9uIFN1cHBvcnQvT3JhY2xlL0phdmEiKSkK
LQotKGFsbG93IGZpbGUtcmVhZCoKLSAgICAoc3VicGF0aCAiL0xpYnJhcnkvQXBwbGljYXRpb24g
U3VwcG9ydC9KYXZhL1B1YmxpY0ZpbGVzIikKLSAgICAoc3VicGF0aCAiL0xpYnJhcnkvQXBwbGlj
YXRpb24gU3VwcG9ydC9PcmFjbGUvSmF2YS9EZXBsb3ltZW50IikpCi0KLShhbGxvdyBuZXR3b3Jr
LWJpbmQgbmV0d29yay1vdXRib3VuZCAoc3VicGF0aCAocGFyYW0gIkRBUldJTl9VU0VSX1RFTVBf
RElSIikpKQotKGFsbG93IG5ldHdvcmstYmluZCAobG9jYWwgaXApKQotCi0oZGVueSBmaWxlLXdy
aXRlKiAod2l0aCBuby1sb2cpIChzdWJwYXRoICIvTGlicmFyeS9BcHBsaWNhdGlvbiBTdXBwb3J0
L09yYWNsZSIpKQotKGRlbnkgZmlsZS13cml0ZSogKHdpdGggbm8tbG9nKSAoc3VicGF0aCAocGFy
YW0gIldFQktJVDJfRlJBTUVXT1JLX0RJUiIpKSkKLQotKGRlbnkgam9iLWNyZWF0aW9uICh3aXRo
IG5vLWxvZykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9XS1BsdWdp
bkluZm9ybWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL1dLUGx1Z2luSW5m
b3JtYXRpb24uY3BwCmluZGV4IGQ1YjM0MWIxYzk2MTljODEzMWE3ZDdmYzM3ODMyYmFiOTFjOTky
MTIuLmM1ZTdmOTY3NzRmMDkzZmY4NzEwMmI1YTk1N2FiNjE1Nzk1ZjE4MGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL1dLUGx1Z2luSW5mb3JtYXRpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL1dLUGx1Z2luSW5mb3JtYXRpb24uY3BwCkBAIC0y
NywxNDUgKzI3LDc0IEBACiAjaW5jbHVkZSAiV0tQbHVnaW5JbmZvcm1hdGlvbi5oIgogCiAjaW5j
bHVkZSAiQVBJU3RyaW5nLmgiCi0jaW5jbHVkZSAiUGx1Z2luSW5mb3JtYXRpb24uaCIKICNpbmNs
dWRlICJXS1NoYXJlZEFQSUNhc3QuaCIKIAogV0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlv
bkJ1bmRsZUlkZW50aWZpZXJLZXkoKQogewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQotICAgIHN0YXRpYyBBUEk6OlN0cmluZyYga2V5ID0gQVBJOjpTdHJpbmc6OmNyZWF0ZShXZWJL
aXQ6OnBsdWdpbkluZm9ybWF0aW9uQnVuZGxlSWRlbnRpZmllcktleSgpKS5sZWFrUmVmKCk7Ci0g
ICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJmtleSk7Ci0jZWxzZQogICAgIHJldHVybiAwOwotI2Vu
ZGlmCiB9CiAKIFdLU3RyaW5nUmVmIFdLUGx1Z2luSW5mb3JtYXRpb25CdW5kbGVWZXJzaW9uS2V5
KCkKIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBzdGF0aWMgQVBJOjpT
dHJpbmcmIGtleSA9IEFQSTo6U3RyaW5nOjpjcmVhdGUoV2ViS2l0OjpwbHVnaW5JbmZvcm1hdGlv
bkJ1bmRsZVZlcnNpb25LZXkoKSkubGVha1JlZigpOwotICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJ
KCZrZXkpOwotI2Vsc2UKICAgICByZXR1cm4gMDsKLSNlbmRpZgogfQogCiBXS1N0cmluZ1JlZiBX
S1BsdWdpbkluZm9ybWF0aW9uQnVuZGxlU2hvcnRWZXJzaW9uS2V5KCkKIHsKLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBzdGF0aWMgQVBJOjpTdHJpbmcmIGtleSA9IEFQSTo6
U3RyaW5nOjpjcmVhdGUoV2ViS2l0OjpwbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZVNob3J0VmVyc2lv
bktleSgpKS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJmtleSk7Ci0jZWxz
ZQogICAgIHJldHVybiAwOwotI2VuZGlmCiB9CiAKIFdLU3RyaW5nUmVmIFdLUGx1Z2luSW5mb3Jt
YXRpb25QYXRoS2V5KCkKIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBz
dGF0aWMgQVBJOjpTdHJpbmcmIGtleSA9IEFQSTo6U3RyaW5nOjpjcmVhdGUoV2ViS2l0OjpwbHVn
aW5JbmZvcm1hdGlvblBhdGhLZXkoKSkubGVha1JlZigpOwotICAgIHJldHVybiBXZWJLaXQ6OnRv
QVBJKCZrZXkpOwotI2Vsc2UKICAgICByZXR1cm4gMDsKLSNlbmRpZgogfQogCiBXS1N0cmluZ1Jl
ZiBXS1BsdWdpbkluZm9ybWF0aW9uRGlzcGxheU5hbWVLZXkoKQogewotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotICAgIHN0YXRpYyBBUEk6OlN0cmluZyYga2V5ID0gQVBJOjpTdHJp
bmc6OmNyZWF0ZShXZWJLaXQ6OnBsdWdpbkluZm9ybWF0aW9uRGlzcGxheU5hbWVLZXkoKSkubGVh
a1JlZigpOwotICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZrZXkpOwotI2Vsc2UKICAgICByZXR1
cm4gMDsKLSNlbmRpZgogfQogCiBXS1N0cmluZ1JlZiBXS1BsdWdpbkluZm9ybWF0aW9uRGVmYXVs
dExvYWRQb2xpY3lLZXkoKQogewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAg
IHN0YXRpYyBBUEk6OlN0cmluZyYga2V5ID0gQVBJOjpTdHJpbmc6OmNyZWF0ZShXZWJLaXQ6OnBs
dWdpbkluZm9ybWF0aW9uRGVmYXVsdExvYWRQb2xpY3lLZXkoKSkubGVha1JlZigpOwotICAgIHJl
dHVybiBXZWJLaXQ6OnRvQVBJKCZrZXkpOwotI2Vsc2UKICAgICByZXR1cm4gMDsKLSNlbmRpZgog
fQogCiBXS1N0cmluZ1JlZiBXS1BsdWdpbkluZm9ybWF0aW9uVXBkYXRlUGFzdExhc3RCbG9ja2Vk
VmVyc2lvbklzS25vd25BdmFpbGFibGVLZXkoKQogewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotICAgIHN0YXRpYyBBUEk6OlN0cmluZyYga2V5ID0gQVBJOjpTdHJpbmc6OmNyZWF0
ZShXZWJLaXQ6OnBsdWdpbkluZm9ybWF0aW9uVXBkYXRlUGFzdExhc3RCbG9ja2VkVmVyc2lvbklz
S25vd25BdmFpbGFibGVLZXkoKSkubGVha1JlZigpOwotICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJ
KCZrZXkpOwotI2Vsc2UKICAgICByZXR1cm4gMDsKLSNlbmRpZgogfQogCiBXS1N0cmluZ1JlZiBX
S1BsdWdpbkluZm9ybWF0aW9uSGFzU2FuZGJveFByb2ZpbGVLZXkoKQogewotI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHN0YXRpYyBBUEk6OlN0cmluZyYga2V5ID0gQVBJOjpT
dHJpbmc6OmNyZWF0ZShXZWJLaXQ6OnBsdWdpbkluZm9ybWF0aW9uSGFzU2FuZGJveFByb2ZpbGVL
ZXkoKSkubGVha1JlZigpOwotICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZrZXkpOwotI2Vsc2UK
ICAgICByZXR1cm4gMDsKLSNlbmRpZgogfQogCiBXS1N0cmluZ1JlZiBXS1BsdWdpbkluZm9ybWF0
aW9uRnJhbWVVUkxLZXkoKQogewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAg
IHN0YXRpYyBBUEk6OlN0cmluZyYga2V5ID0gQVBJOjpTdHJpbmc6OmNyZWF0ZShXZWJLaXQ6OnBs
dWdpbkluZm9ybWF0aW9uRnJhbWVVUkxLZXkoKSkubGVha1JlZigpOwotICAgIHJldHVybiBXZWJL
aXQ6OnRvQVBJKCZrZXkpOwotI2Vsc2UKICAgICByZXR1cm4gMDsKLSNlbmRpZgogfQogCiBXS1N0
cmluZ1JlZiBXS1BsdWdpbkluZm9ybWF0aW9uTUlNRVR5cGVLZXkoKQogewotI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHN0YXRpYyBBUEk6OlN0cmluZyYga2V5ID0gQVBJOjpT
dHJpbmc6OmNyZWF0ZShXZWJLaXQ6OnBsdWdpbkluZm9ybWF0aW9uTUlNRVR5cGVLZXkoKSkubGVh
a1JlZigpOwotICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZrZXkpOwotI2Vsc2UKICAgICByZXR1
cm4gMDsKLSNlbmRpZgogfQogCiBXS1N0cmluZ1JlZiBXS1BsdWdpbkluZm9ybWF0aW9uUGFnZVVS
TEtleSgpCiB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgc3RhdGljIEFQ
STo6U3RyaW5nJiBrZXkgPSBBUEk6OlN0cmluZzo6Y3JlYXRlKFdlYktpdDo6cGx1Z2luSW5mb3Jt
YXRpb25QYWdlVVJMS2V5KCkpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgm
a2V5KTsKLSNlbHNlCiAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKIH0KIAogV0tTdHJpbmdSZWYgV0tQ
bHVnaW5JbmZvcm1hdGlvblBsdWdpbnNwYWdlQXR0cmlidXRlVVJMS2V5KCkKIHsKLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBzdGF0aWMgQVBJOjpTdHJpbmcmIGtleSA9IEFQ
STo6U3RyaW5nOjpjcmVhdGUoV2ViS2l0OjpwbHVnaW5JbmZvcm1hdGlvblBsdWdpbnNwYWdlQXR0
cmlidXRlVVJMS2V5KCkpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgma2V5
KTsKLSNlbHNlCiAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKIH0KIAogV0tTdHJpbmdSZWYgV0tQbHVn
aW5JbmZvcm1hdGlvblBsdWdpblVSTEtleSgpCiB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCi0gICAgc3RhdGljIEFQSTo6U3RyaW5nJiBrZXkgPSBBUEk6OlN0cmluZzo6Y3JlYXRl
KFdlYktpdDo6cGx1Z2luSW5mb3JtYXRpb25QbHVnaW5VUkxLZXkoKSkubGVha1JlZigpOwotICAg
IHJldHVybiBXZWJLaXQ6OnRvQVBJKCZrZXkpOwotI2Vsc2UKICAgICByZXR1cm4gMDsKLSNlbmRp
ZgogfQogCiBXS1N0cmluZ1JlZiBXS1BsdWdJbkluZm9ybWF0aW9uUmVwbGFjZW1lbnRPYnNjdXJl
ZEtleSgpCiB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgc3RhdGljIEFQ
STo6U3RyaW5nJiBrZXkgPSBBUEk6OlN0cmluZzo6Y3JlYXRlKFdlYktpdDo6cGx1Z0luSW5mb3Jt
YXRpb25SZXBsYWNlbWVudE9ic2N1cmVkS2V5KCkpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gV2Vi
S2l0Ojp0b0FQSSgma2V5KTsKLSNlbHNlCiAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvQ29jb2EvWFBD
U2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2ludC5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvRW50
cnlQb2ludFV0aWxpdGllcy9Db2NvYS9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBvaW50LmgK
aW5kZXggMGE4MTIxYWU3NTAwNTBiMzcwNzEzMjgxMjljMDc0Njc0YTM1OTVmMC4uZmY3YTQ0YzVi
YTM2ZmM5YmNmYmRjMzEyYjkzZDMzYmI5NWRhNjcyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9Db2NvYS9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VF
bnRyeVBvaW50LmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGll
cy9Db2NvYS9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBvaW50LmgKQEAgLTQwLDcgKzQwLDYg
QEAgZXh0ZXJuICJDIiBPU19OT1RIUk9XIHZvaWQgdm91Y2hlcl9yZXBsYWNlX2RlZmF1bHRfdm91
Y2hlcih2b2lkKTsKIAogI2RlZmluZSBXRUJDT05URU5UX1NFUlZJQ0VfSU5JVElBTElaRVIgV2Vi
Q29udGVudFNlcnZpY2VJbml0aWFsaXplcgogI2RlZmluZSBORVRXT1JLX1NFUlZJQ0VfSU5JVElB
TElaRVIgTmV0d29ya1NlcnZpY2VJbml0aWFsaXplcgotI2RlZmluZSBQTFVHSU5fU0VSVklDRV9J
TklUSUFMSVpFUiBQbHVnaW5TZXJ2aWNlSW5pdGlhbGl6ZXIKICNkZWZpbmUgR1BVX1NFUlZJQ0Vf
SU5JVElBTElaRVIgR1BVU2VydmljZUluaXRpYWxpemVyCiAjZGVmaW5lIFdFQkFVVEhOX1NFUlZJ
Q0VfSU5JVElBTElaRVIgV2ViQXV0aG5TZXJ2aWNlSW5pdGlhbGl6ZXIKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OUElkZW50aWZpZXJEYXRhLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTlBJZGVudGlmaWVyRGF0YS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGEyOWI4NGM0MTc0YTY1MThiYjU4ZWM2MzRhNmNiMTk2ODJkZjMz
ZDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OUElkZW50aWZpZXJEYXRhLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDk3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiTlBJZGVudGlmaWVyRGF0YS5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi0KLSNpbmNsdWRlICJEZWNvZGVyLmgiCi0jaW5jbHVkZSAiRW5jb2Rlci5oIgotI2luY2x1
ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvSWRlbnRpZmll
clJlcC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwot
Ci1OUElkZW50aWZpZXJEYXRhOjpOUElkZW50aWZpZXJEYXRhKCkKLSAgICA6IG1faXNTdHJpbmco
ZmFsc2UpCi0gICAgLCBtX251bWJlcigwKQotewotfQotCi0KLU5QSWRlbnRpZmllckRhdGEgTlBJ
ZGVudGlmaWVyRGF0YTo6ZnJvbU5QSWRlbnRpZmllcihOUElkZW50aWZpZXIgbnBJZGVudGlmaWVy
KQotewotICAgIE5QSWRlbnRpZmllckRhdGEgbnBJZGVudGlmaWVyRGF0YTsKLQotICAgIElkZW50
aWZpZXJSZXAqIGlkZW50aWZpZXJSZXAgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4obnBJ
ZGVudGlmaWVyKTsKLSAgICBucElkZW50aWZpZXJEYXRhLm1faXNTdHJpbmcgPSBpZGVudGlmaWVy
UmVwLT5pc1N0cmluZygpOwotCi0gICAgaWYgKG5wSWRlbnRpZmllckRhdGEubV9pc1N0cmluZykK
LSAgICAgICAgbnBJZGVudGlmaWVyRGF0YS5tX3N0cmluZyA9IGlkZW50aWZpZXJSZXAtPnN0cmlu
ZygpOwotICAgIGVsc2UKLSAgICAgICAgbnBJZGVudGlmaWVyRGF0YS5tX251bWJlciA9IGlkZW50
aWZpZXJSZXAtPm51bWJlcigpOwotCi0gICAgcmV0dXJuIG5wSWRlbnRpZmllckRhdGE7Ci19Ci0K
LU5QSWRlbnRpZmllciBOUElkZW50aWZpZXJEYXRhOjpjcmVhdGVOUElkZW50aWZpZXIoKSBjb25z
dAotewotICAgIGlmIChtX2lzU3RyaW5nKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlBJ
ZGVudGlmaWVyPihJZGVudGlmaWVyUmVwOjpnZXQobV9zdHJpbmcuZGF0YSgpKSk7Ci0gICAgCi0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PE5QSWRlbnRpZmllcj4oSWRlbnRpZmllclJlcDo6Z2V0KG1f
bnVtYmVyKSk7Ci19Ci0KLXZvaWQgTlBJZGVudGlmaWVyRGF0YTo6ZW5jb2RlKElQQzo6RW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1faXNTdHJpbmc7Ci0gICAgaWYg
KG1faXNTdHJpbmcpCi0gICAgICAgIGVuY29kZXIgPDwgbV9zdHJpbmc7Ci0gICAgZWxzZQotICAg
ICAgICBlbmNvZGVyIDw8IG1fbnVtYmVyOwotfQotCi1zdGQ6Om9wdGlvbmFsPE5QSWRlbnRpZmll
ckRhdGE+IE5QSWRlbnRpZmllckRhdGE6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIpCi17
Ci0gICAgTlBJZGVudGlmaWVyRGF0YSByZXN1bHQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQubV9pc1N0cmluZykpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAg
IAotICAgIGlmIChyZXN1bHQubV9pc1N0cmluZykgewotICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5tX3N0cmluZykpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0Lm1fbnVtYmVyKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
UGx1Z2lucy9OUElkZW50aWZpZXJEYXRhLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5z
L05QSWRlbnRpZmllckRhdGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRhYTI0
ZjExMDE2ZmExNmNlMTljZTU0MzgwYzRkNzk0NDRmYWY5Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL05Q
SWRlbnRpZmllckRhdGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0j
aW5jbHVkZSA8V2ViQ29yZS9ucHJ1bnRpbWVfaW50ZXJuYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJUEMgewotY2xhc3MgRGVjb2RlcjsKLWNsYXNzIEVu
Y29kZXI7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBOUElkZW50aWZpZXJEYXRh
IHsKLXB1YmxpYzoKLSAgICBOUElkZW50aWZpZXJEYXRhKCk7Ci0gICAgCi0gICAgc3RhdGljIE5Q
SWRlbnRpZmllckRhdGEgZnJvbU5QSWRlbnRpZmllcihOUElkZW50aWZpZXIpOwotICAgIE5QSWRl
bnRpZmllciBjcmVhdGVOUElkZW50aWZpZXIoKSBjb25zdDsKLQotICAgIHZvaWQgZW5jb2RlKElQ
Qzo6RW5jb2RlciYpIGNvbnN0OwotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPE5QSWRlbnRpZmll
ckRhdGE+IGRlY29kZShJUEM6OkRlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBib29sIG1faXNT
dHJpbmc7Ci0gICAgQ1N0cmluZyBtX3N0cmluZzsKLSAgICBpbnQgbV9udW1iZXI7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OUE9iamVjdE1l
c3NhZ2VSZWNlaXZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL05QT2JqZWN0
TWVzc2FnZVJlY2VpdmVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjlmOTA0
NTVlMjdmNmNmOWM0ZGE5OGRjMmVkODFlZmZjMWYxNmQwNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL05Q
T2JqZWN0TWVzc2FnZVJlY2VpdmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzMSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5QT2JqZWN0TWVz
c2FnZVJlY2VpdmVyLmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2lu
Y2x1ZGUgIk5QSWRlbnRpZmllckRhdGEuaCIKLSNpbmNsdWRlICJOUFJlbW90ZU9iamVjdE1hcC5o
IgotI2luY2x1ZGUgIk5QUnVudGltZVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIk5QVmFyaWFudERh
dGEuaCIKLSNpbmNsdWRlICJQbHVnaW4uaCIKLSNpbmNsdWRlICJQbHVnaW5Db250cm9sbGVyLmgi
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1OUE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6TlBPYmpl
Y3RNZXNzYWdlUmVjZWl2ZXIoTlBSZW1vdGVPYmplY3RNYXAqIG5wUmVtb3RlT2JqZWN0TWFwLCBQ
bHVnaW4qIHBsdWdpbiwgdWludDY0X3QgbnBPYmplY3RJRCwgTlBPYmplY3QqIG5wT2JqZWN0KQot
ICAgIDogbV9ucFJlbW90ZU9iamVjdE1hcChucFJlbW90ZU9iamVjdE1hcCkKLSAgICAsIG1fcGx1
Z2luKHBsdWdpbikKLSAgICAsIG1fbnBPYmplY3RJRChucE9iamVjdElEKQotICAgICwgbV9ucE9i
amVjdChucE9iamVjdCkKLXsKLSAgICByZXRhaW5OUE9iamVjdChtX25wT2JqZWN0KTsKLX0KLQot
TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6On5OUE9iamVjdE1lc3NhZ2VSZWNlaXZlcigpCi17Ci0g
ICAgbV9ucFJlbW90ZU9iamVjdE1hcC0+dW5yZWdpc3Rlck5QT2JqZWN0KG1fbnBPYmplY3RJRCk7
Ci0KLSAgICByZWxlYXNlTlBPYmplY3QobV9ucE9iamVjdCk7Ci19Ci0KLXZvaWQgTlBPYmplY3RN
ZXNzYWdlUmVjZWl2ZXI6OmRlYWxsb2NhdGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQotewotICAgIGRlbGV0ZSB0aGlzOwotICAgIGNvbXBsZXRpb25IYW5k
bGVyKCk7Ci19Ci0KLXZvaWQgTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6Omhhc01ldGhvZChjb25z
dCBOUElkZW50aWZpZXJEYXRhJiBtZXRob2ROYW1lRGF0YSwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAobV9wbHVnaW4tPmlzQmVp
bmdEZXN0cm95ZWQoKSB8fCAhbV9ucE9iamVjdC0+X2NsYXNzLT5oYXNNZXRob2QpCi0gICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxl
cihtX25wT2JqZWN0LT5fY2xhc3MtPmhhc01ldGhvZChtX25wT2JqZWN0LCBtZXRob2ROYW1lRGF0
YS5jcmVhdGVOUElkZW50aWZpZXIoKSkpOwotfQotCi12b2lkIE5QT2JqZWN0TWVzc2FnZVJlY2Vp
dmVyOjppbnZva2UoY29uc3QgTlBJZGVudGlmaWVyRGF0YSYgbWV0aG9kTmFtZURhdGEsIGNvbnN0
IFZlY3RvcjxOUFZhcmlhbnREYXRhPiYgYXJndW1lbnRzRGF0YSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sLCBOUFZhcmlhbnREYXRhJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAg
IGlmIChtX3BsdWdpbi0+aXNCZWluZ0Rlc3Ryb3llZCgpIHx8ICFtX25wT2JqZWN0LT5fY2xhc3Mt
Pmludm9rZSkKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlLCB7IH0pOwot
Ci0gICAgVmVjdG9yPE5QVmFyaWFudD4gYXJndW1lbnRzOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYXJndW1lbnRzRGF0YS5zaXplKCk7ICsraSkKLSAgICAgICAgYXJndW1lbnRzLmFwcGVu
ZChtX25wUmVtb3RlT2JqZWN0TWFwLT5ucFZhcmlhbnREYXRhVG9OUFZhcmlhbnQoYXJndW1lbnRz
RGF0YVtpXSwgbV9wbHVnaW4pKTsKLQotICAgIE5QVmFyaWFudCByZXN1bHQ7Ci0gICAgVk9JRF9U
T19OUFZBUklBTlQocmVzdWx0KTsKLQotICAgIFBsdWdpbkNvbnRyb2xsZXI6OlBsdWdpbkRlc3Ry
dWN0aW9uUHJvdGVjdG9yIHByb3RlY3RvcihtX3BsdWdpbi0+Y29udHJvbGxlcigpKTsKLQotICAg
IE5QVmFyaWFudERhdGEgcmVzdWx0RGF0YTsKLSAgICBib29sIHJldHVyblZhbHVlID0gbV9ucE9i
amVjdC0+X2NsYXNzLT5pbnZva2UobV9ucE9iamVjdCwgbWV0aG9kTmFtZURhdGEuY3JlYXRlTlBJ
ZGVudGlmaWVyKCksIGFyZ3VtZW50cy5kYXRhKCksIGFyZ3VtZW50cy5zaXplKCksICZyZXN1bHQp
OwotICAgIGlmIChyZXR1cm5WYWx1ZSkgewotICAgICAgICAvLyBDb252ZXJ0IHRoZSBOUFZhcmlh
bnQgdG8gYW4gTlBWYXJpYW50RGF0YS4KLSAgICAgICAgcmVzdWx0RGF0YSA9IG1fbnBSZW1vdGVP
YmplY3RNYXAtPm5wVmFyaWFudFRvTlBWYXJpYW50RGF0YShyZXN1bHQsIG1fcGx1Z2luKTsKLSAg
ICB9Ci0KLSAgICAvLyBSZWxlYXNlIGFsbCBhcmd1bWVudHMuCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhcmd1bWVudHNEYXRhLnNpemUoKTsgKytpKQotICAgICAgICByZWxlYXNlTlBWYXJp
YW50VmFsdWUoJmFyZ3VtZW50c1tpXSk7Ci0gICAgCi0gICAgLy8gQW5kIHJlbGVhc2UgdGhlIHJl
c3VsdC4KLSAgICByZWxlYXNlTlBWYXJpYW50VmFsdWUoJnJlc3VsdCk7Ci0gICAgY29tcGxldGlv
bkhhbmRsZXIocmV0dXJuVmFsdWUsIFdURk1vdmUocmVzdWx0RGF0YSkpOwotfQotCi12b2lkIE5Q
T2JqZWN0TWVzc2FnZVJlY2VpdmVyOjppbnZva2VEZWZhdWx0KGNvbnN0IFZlY3RvcjxOUFZhcmlh
bnREYXRhPiYgYXJndW1lbnRzRGF0YSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sLCBOUFZh
cmlhbnREYXRhJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmIChtX3BsdWdpbi0+
aXNCZWluZ0Rlc3Ryb3llZCgpIHx8ICFtX25wT2JqZWN0LT5fY2xhc3MtPmludm9rZURlZmF1bHQp
Ci0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSwgeyB9KTsKLQotICAgIFZl
Y3RvcjxOUFZhcmlhbnQ+IGFyZ3VtZW50czsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFy
Z3VtZW50c0RhdGEuc2l6ZSgpOyArK2kpCi0gICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9ucFJl
bW90ZU9iamVjdE1hcC0+bnBWYXJpYW50RGF0YVRvTlBWYXJpYW50KGFyZ3VtZW50c0RhdGFbaV0s
IG1fcGx1Z2luKSk7Ci0KLSAgICBOUFZhcmlhbnQgcmVzdWx0OwotICAgIFZPSURfVE9fTlBWQVJJ
QU5UKHJlc3VsdCk7Ci0KLSAgICBQbHVnaW5Db250cm9sbGVyOjpQbHVnaW5EZXN0cnVjdGlvblBy
b3RlY3RvciBwcm90ZWN0b3IobV9wbHVnaW4tPmNvbnRyb2xsZXIoKSk7Ci0KLSAgICBOUFZhcmlh
bnREYXRhIHJlc3VsdERhdGE7Ci0gICAgYm9vbCByZXR1cm5WYWx1ZSA9IG1fbnBPYmplY3QtPl9j
bGFzcy0+aW52b2tlRGVmYXVsdChtX25wT2JqZWN0LCBhcmd1bWVudHMuZGF0YSgpLCBhcmd1bWVu
dHMuc2l6ZSgpLCAmcmVzdWx0KTsKLSAgICBpZiAocmV0dXJuVmFsdWUpIHsKLSAgICAgICAgLy8g
Q29udmVydCB0aGUgTlBWYXJpYW50IHRvIGFuIE5QVmFyaWFudERhdGEuCi0gICAgICAgIHJlc3Vs
dERhdGEgPSBtX25wUmVtb3RlT2JqZWN0TWFwLT5ucFZhcmlhbnRUb05QVmFyaWFudERhdGEocmVz
dWx0LCBtX3BsdWdpbik7Ci0gICAgfQotCi0gICAgLy8gUmVsZWFzZSBhbGwgYXJndW1lbnRzLgot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRzRGF0YS5zaXplKCk7ICsraSkKLSAg
ICAgICAgcmVsZWFzZU5QVmFyaWFudFZhbHVlKCZhcmd1bWVudHNbaV0pOwotICAgIAotICAgIC8v
IEFuZCByZWxlYXNlIHRoZSByZXN1bHQuCi0gICAgcmVsZWFzZU5QVmFyaWFudFZhbHVlKCZyZXN1
bHQpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlLCBXVEZNb3ZlKHJlc3VsdERh
dGEpKTsKLX0KLQotdm9pZCBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6aGFzUHJvcGVydHkoY29u
c3QgTlBJZGVudGlmaWVyRGF0YSYgcHJvcGVydHlOYW1lRGF0YSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAobV9wbHVnaW4tPmlz
QmVpbmdEZXN0cm95ZWQoKSB8fCAhbV9ucE9iamVjdC0+X2NsYXNzLT5oYXNQcm9wZXJ0eSkKLSAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKLQotICAgIGNvbXBsZXRpb25I
YW5kbGVyKG1fbnBPYmplY3QtPl9jbGFzcy0+aGFzUHJvcGVydHkobV9ucE9iamVjdCwgcHJvcGVy
dHlOYW1lRGF0YS5jcmVhdGVOUElkZW50aWZpZXIoKSkpOwotfQotCi12b2lkIE5QT2JqZWN0TWVz
c2FnZVJlY2VpdmVyOjpnZXRQcm9wZXJ0eShjb25zdCBOUElkZW50aWZpZXJEYXRhJiBwcm9wZXJ0
eU5hbWVEYXRhLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wsIE5QVmFyaWFudERhdGEmJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKG1fcGx1Z2luLT5pc0JlaW5nRGVzdHJv
eWVkKCkgfHwgIW1fbnBPYmplY3QtPl9jbGFzcy0+Z2V0UHJvcGVydHkpCi0gICAgICAgIHJldHVy
biBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSwgeyB9KTsKLQotICAgIE5QVmFyaWFudCByZXN1bHQ7
Ci0gICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsKLQotICAgIFBsdWdpbkNvbnRyb2xsZXI6
OlBsdWdpbkRlc3RydWN0aW9uUHJvdGVjdG9yIHByb3RlY3RvcihtX3BsdWdpbi0+Y29udHJvbGxl
cigpKTsKLQotICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xhc3MtPmdldFBy
b3BlcnR5KG1fbnBPYmplY3QsIHByb3BlcnR5TmFtZURhdGEuY3JlYXRlTlBJZGVudGlmaWVyKCks
ICZyZXN1bHQpOwotICAgIGlmICghcmV0dXJuVmFsdWUpCi0gICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcihmYWxzZSwgeyB9KTsKLQotCi0gICAgTlBWYXJpYW50RGF0YSByZXN1bHREYXRh
ID0gbV9ucFJlbW90ZU9iamVjdE1hcC0+bnBWYXJpYW50VG9OUFZhcmlhbnREYXRhKHJlc3VsdCwg
bV9wbHVnaW4pOwotCi0gICAgcmVsZWFzZU5QVmFyaWFudFZhbHVlKCZyZXN1bHQpOwotICAgIGNv
bXBsZXRpb25IYW5kbGVyKHRydWUsIFdURk1vdmUocmVzdWx0RGF0YSkpOwotfQotCi12b2lkIE5Q
T2JqZWN0TWVzc2FnZVJlY2VpdmVyOjpzZXRQcm9wZXJ0eShjb25zdCBOUElkZW50aWZpZXJEYXRh
JiBwcm9wZXJ0eU5hbWVEYXRhLCBjb25zdCBOUFZhcmlhbnREYXRhJiBwcm9wZXJ0eVZhbHVlRGF0
YSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsK
LSAgICBpZiAobV9wbHVnaW4tPmlzQmVpbmdEZXN0cm95ZWQoKSB8fCAhbV9ucE9iamVjdC0+X2Ns
YXNzLT5zZXRQcm9wZXJ0eSkKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNl
KTsKLQotICAgIE5QVmFyaWFudCBwcm9wZXJ0eVZhbHVlID0gbV9ucFJlbW90ZU9iamVjdE1hcC0+
bnBWYXJpYW50RGF0YVRvTlBWYXJpYW50KHByb3BlcnR5VmFsdWVEYXRhLCBtX3BsdWdpbik7Ci0K
LSAgICBQbHVnaW5Db250cm9sbGVyOjpQbHVnaW5EZXN0cnVjdGlvblByb3RlY3RvciBwcm90ZWN0
b3IobV9wbHVnaW4tPmNvbnRyb2xsZXIoKSk7Ci0KLSAgICBib29sIHJldHVyblZhbHVlID0gbV9u
cE9iamVjdC0+X2NsYXNzLT5zZXRQcm9wZXJ0eShtX25wT2JqZWN0LCBwcm9wZXJ0eU5hbWVEYXRh
LmNyZWF0ZU5QSWRlbnRpZmllcigpLCAmcHJvcGVydHlWYWx1ZSk7Ci0KLSAgICByZWxlYXNlTlBW
YXJpYW50VmFsdWUoJnByb3BlcnR5VmFsdWUpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVy
blZhbHVlKTsKLX0KLQotdm9pZCBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6cmVtb3ZlUHJvcGVy
dHkoY29uc3QgTlBJZGVudGlmaWVyRGF0YSYgcHJvcGVydHlOYW1lRGF0YSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAobV9wbHVn
aW4tPmlzQmVpbmdEZXN0cm95ZWQoKSB8fCAhbV9ucE9iamVjdC0+X2NsYXNzLT5yZW1vdmVQcm9w
ZXJ0eSkKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKLQotICAgIGNv
bXBsZXRpb25IYW5kbGVyKG1fbnBPYmplY3QtPl9jbGFzcy0+cmVtb3ZlUHJvcGVydHkobV9ucE9i
amVjdCwgcHJvcGVydHlOYW1lRGF0YS5jcmVhdGVOUElkZW50aWZpZXIoKSkpOwotfQotCi12b2lk
IE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyOjplbnVtZXJhdGUoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sLCBWZWN0b3I8TlBJZGVudGlmaWVyRGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
Ci17Ci0gICAgaWYgKG1fcGx1Z2luLT5pc0JlaW5nRGVzdHJveWVkKCkgfHwgIU5QX0NMQVNTX1NU
UlVDVF9WRVJTSU9OX0hBU19FTlVNKG1fbnBPYmplY3QtPl9jbGFzcykgfHwgIW1fbnBPYmplY3Qt
Pl9jbGFzcy0+ZW51bWVyYXRlKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFs
c2UsIHsgfSk7Ci0KLSAgICBOUElkZW50aWZpZXIqIGlkZW50aWZpZXJzID0gMDsKLSAgICB1aW50
MzJfdCBpZGVudGlmaWVyQ291bnQgPSAwOwotCi0gICAgYm9vbCByZXR1cm5WYWx1ZSA9IG1fbnBP
YmplY3QtPl9jbGFzcy0+ZW51bWVyYXRlKG1fbnBPYmplY3QsICZpZGVudGlmaWVycywgJmlkZW50
aWZpZXJDb3VudCk7Ci0gICAgaWYgKCFyZXR1cm5WYWx1ZSkKLSAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb25IYW5kbGVyKGZhbHNlLCB7IH0pOwotCi0gICAgVmVjdG9yPFdlYktpdDo6TlBJZGVudGlm
aWVyRGF0YT4gaWRlbnRpZmllcnNEYXRhOwotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBp
ZGVudGlmaWVyQ291bnQ7ICsraSkKLSAgICAgICAgaWRlbnRpZmllcnNEYXRhLmFwcGVuZChOUElk
ZW50aWZpZXJEYXRhOjpmcm9tTlBJZGVudGlmaWVyKGlkZW50aWZpZXJzW2ldKSk7Ci0KLSAgICBu
cG5NZW1GcmVlKGlkZW50aWZpZXJzKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcih0cnVlLCBXVEZN
b3ZlKGlkZW50aWZpZXJzRGF0YSkpOwotfQotCi12b2lkIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVy
Ojpjb25zdHJ1Y3QoY29uc3QgVmVjdG9yPE5QVmFyaWFudERhdGE+JiBhcmd1bWVudHNEYXRhLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wsIE5QVmFyaWFudERhdGEmJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCi17Ci0gICAgaWYgKG1fcGx1Z2luLT5pc0JlaW5nRGVzdHJveWVkKCkgfHwgIU5Q
X0NMQVNTX1NUUlVDVF9WRVJTSU9OX0hBU19DVE9SKG1fbnBPYmplY3QtPl9jbGFzcykgfHwgIW1f
bnBPYmplY3QtPl9jbGFzcy0+Y29uc3RydWN0KQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIoZmFsc2UsIHsgfSk7Ci0KLSAgICBWZWN0b3I8TlBWYXJpYW50PiBhcmd1bWVudHM7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudHNEYXRhLnNpemUoKTsgKytpKQotICAg
ICAgICBhcmd1bWVudHMuYXBwZW5kKG1fbnBSZW1vdGVPYmplY3RNYXAtPm5wVmFyaWFudERhdGFU
b05QVmFyaWFudChhcmd1bWVudHNEYXRhW2ldLCBtX3BsdWdpbikpOwotCi0gICAgTlBWYXJpYW50
IHJlc3VsdDsKLSAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHQpOwotCi0gICAgUGx1Z2luQ29u
dHJvbGxlcjo6UGx1Z2luRGVzdHJ1Y3Rpb25Qcm90ZWN0b3IgcHJvdGVjdG9yKG1fcGx1Z2luLT5j
b250cm9sbGVyKCkpOwotCi0gICAgYm9vbCByZXR1cm5WYWx1ZSA9IG1fbnBPYmplY3QtPl9jbGFz
cy0+Y29uc3RydWN0KG1fbnBPYmplY3QsIGFyZ3VtZW50cy5kYXRhKCksIGFyZ3VtZW50cy5zaXpl
KCksICZyZXN1bHQpOwotICAgIE5QVmFyaWFudERhdGEgcmVzdWx0RGF0YTsKLSAgICBpZiAocmV0
dXJuVmFsdWUpCi0gICAgICAgIHJlc3VsdERhdGEgPSBtX25wUmVtb3RlT2JqZWN0TWFwLT5ucFZh
cmlhbnRUb05QVmFyaWFudERhdGEocmVzdWx0LCBtX3BsdWdpbik7Ci0KLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGFyZ3VtZW50c0RhdGEuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlbGVhc2VO
UFZhcmlhbnRWYWx1ZSgmYXJndW1lbnRzW2ldKTsKLSAgICAKLSAgICByZWxlYXNlTlBWYXJpYW50
VmFsdWUoJnJlc3VsdCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUsIFdURk1v
dmUocmVzdWx0RGF0YSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8v
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9QbHVnaW5zL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLmggYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9QbHVnaW5zL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGJmMjVlODBlYTdmNDIxNWRjM2E3NWJmYmM0MTM4NzRjYTE5ODNhYWQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvUGx1Z2lucy9OUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5oCisrKyAvZGV2L251
bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9ucHJ1bnRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIE5QSWRlbnRpZmllckRhdGE7Ci1jbGFzcyBO
UFJlbW90ZU9iamVjdE1hcDsKLWNsYXNzIE5QVmFyaWFudERhdGE7Ci1jbGFzcyBQbHVnaW47Ci0K
LWNsYXNzIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcik7
Ci0KLXB1YmxpYzoKLSAgICBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcihOUFJlbW90ZU9iamVjdE1h
cCosIFBsdWdpbiosIHVpbnQ2NF90IG5wT2JqZWN0SUQsIE5QT2JqZWN0Kik7Ci0gICAgfk5QT2Jq
ZWN0TWVzc2FnZVJlY2VpdmVyKCk7Ci0KLSAgICBib29sIGRpZFJlY2VpdmVTeW5jTlBPYmplY3RN
ZXNzYWdlUmVjZWl2ZXJNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIFVu
aXF1ZVJlZjxJUEM6OkVuY29kZXI+Jik7Ci0KLSAgICBQbHVnaW4qIHBsdWdpbigpIGNvbnN0IHsg
cmV0dXJuIG1fcGx1Z2luOyB9Ci0gICAgTlBPYmplY3QqIG5wT2JqZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9ucE9iamVjdDsgfQotICAgIAotcHJpdmF0ZToKLSAgICAvLyBNZXNzYWdlIGhhbmRsZXJz
LgotICAgIHZvaWQgZGVhbGxvY2F0ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAg
IHZvaWQgaGFzTWV0aG9kKGNvbnN0IE5QSWRlbnRpZmllckRhdGEmLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPiYmKTsKLSAgICB2b2lkIGludm9rZShjb25zdCBOUElkZW50aWZpZXJEYXRh
JiwgY29uc3QgVmVjdG9yPE5QVmFyaWFudERhdGE+JiBhcmd1bWVudHNEYXRhLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wsIE5QVmFyaWFudERhdGEmJik+JiYpOwotICAgIHZvaWQgaW52b2tl
RGVmYXVsdChjb25zdCBWZWN0b3I8TlBWYXJpYW50RGF0YT4mIGFyZ3VtZW50c0RhdGEsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCwgTlBWYXJpYW50RGF0YSYmKT4mJik7Ci0gICAgdm9pZCBo
YXNQcm9wZXJ0eShjb25zdCBOUElkZW50aWZpZXJEYXRhJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sKT4mJik7Ci0gICAgdm9pZCBnZXRQcm9wZXJ0eShjb25zdCBOUElkZW50aWZpZXJEYXRh
JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sLCBOUFZhcmlhbnREYXRhJiYpPiYmKTsKLSAg
ICB2b2lkIHNldFByb3BlcnR5KGNvbnN0IE5QSWRlbnRpZmllckRhdGEmLCBjb25zdCBOUFZhcmlh
bnREYXRhJiBwcm9wZXJ0eVZhbHVlRGF0YSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4m
Jik7Ci0gICAgdm9pZCByZW1vdmVQcm9wZXJ0eShjb25zdCBOUElkZW50aWZpZXJEYXRhJiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7Ci0gICAgdm9pZCBlbnVtZXJhdGUoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sLCBWZWN0b3I8TlBJZGVudGlmaWVyRGF0YT4mJik+JiYpOwot
ICAgIHZvaWQgY29uc3RydWN0KGNvbnN0IFZlY3RvcjxOUFZhcmlhbnREYXRhPiYgYXJndW1lbnRz
RGF0YSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sLCBOUFZhcmlhbnREYXRhJiYpPiYmKTsK
LQotICAgIE5QUmVtb3RlT2JqZWN0TWFwKiBtX25wUmVtb3RlT2JqZWN0TWFwOwotICAgIFBsdWdp
biogbV9wbHVnaW47Ci0gICAgdWludDY0X3QgbV9ucE9iamVjdElEOwotICAgIE5QT2JqZWN0KiBt
X25wT2JqZWN0OwotfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8g
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9QbHVnaW5zL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLm1lc3NhZ2VzLmluIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5tZXNzYWdlcy5p
bgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZmZjg4NGZiMjllZWZjYzkwYTI3YTlh
NTY3OTQ5OWZkZGZkMWQ4ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL05QT2JqZWN0TWVzc2FnZVJlY2Vp
dmVyLm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotIyBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCi0KLW1lc3NhZ2VzIC0+IE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyIExlZ2FjeVJlY2Vp
dmVyIE5vdFJlZkNvdW50ZWQgewotICAgIERlYWxsb2NhdGUoKSAtPiAoKSBTeW5jaHJvbm91cwot
ICAgIEhhc01ldGhvZChXZWJLaXQ6Ok5QSWRlbnRpZmllckRhdGEgbWV0aG9kTmFtZSkgLT4gKGJv
b2wgcmV0dXJuVmFsdWUpIFN5bmNocm9ub3VzCi0gICAgSW52b2tlKFdlYktpdDo6TlBJZGVudGlm
aWVyRGF0YSBtZXRob2ROYW1lLCBWZWN0b3I8V2ViS2l0OjpOUFZhcmlhbnREYXRhPiBhcmd1bWVu
dHNEYXRhKSAtPiAoYm9vbCByZXR1cm5WYWx1ZSwgV2ViS2l0OjpOUFZhcmlhbnREYXRhIHJlc3Vs
dERhdGEpIFN5bmNocm9ub3VzCi0gICAgSW52b2tlRGVmYXVsdChWZWN0b3I8V2ViS2l0OjpOUFZh
cmlhbnREYXRhPiBhcmd1bWVudHNEYXRhKSAtPiAoYm9vbCByZXR1cm5WYWx1ZSwgV2ViS2l0OjpO
UFZhcmlhbnREYXRhIHJlc3VsdERhdGEpIFN5bmNocm9ub3VzCi0gICAgSGFzUHJvcGVydHkoV2Vi
S2l0OjpOUElkZW50aWZpZXJEYXRhIHByb3BlcnR5TmFtZSkgLT4gKGJvb2wgcmV0dXJuVmFsdWUp
IFN5bmNocm9ub3VzCi0gICAgR2V0UHJvcGVydHkoV2ViS2l0OjpOUElkZW50aWZpZXJEYXRhIHBy
b3BlcnR5TmFtZSkgLT4gKGJvb2wgcmV0dXJuVmFsdWUsIFdlYktpdDo6TlBWYXJpYW50RGF0YSBy
ZXN1bHREYXRhKSBTeW5jaHJvbm91cwotICAgIFNldFByb3BlcnR5KFdlYktpdDo6TlBJZGVudGlm
aWVyRGF0YSBwcm9wZXJ0eU5hbWUsIFdlYktpdDo6TlBWYXJpYW50RGF0YSBwcm9wZXJ0eVZhbHVl
RGF0YSkgLT4gKGJvb2wgcmV0dXJuVmFsdWUpIFN5bmNocm9ub3VzCi0gICAgUmVtb3ZlUHJvcGVy
dHkoV2ViS2l0OjpOUElkZW50aWZpZXJEYXRhIHByb3BlcnR5TmFtZSkgLT4gKGJvb2wgcmV0dXJu
VmFsdWUpIFN5bmNocm9ub3VzCi0gICAgRW51bWVyYXRlKCkgLT4gKGJvb2wgcmV0dXJuVmFsdWUs
IFZlY3RvcjxXZWJLaXQ6Ok5QSWRlbnRpZmllckRhdGE+IGlkZW50aWZpZXJzRGF0YSkgU3luY2hy
b25vdXMKLSAgICBDb25zdHJ1Y3QoVmVjdG9yPFdlYktpdDo6TlBWYXJpYW50RGF0YT4gYXJndW1l
bnRzRGF0YSkgLT4gKGJvb2wgcmV0dXJuVmFsdWUsIFdlYktpdDo6TlBWYXJpYW50RGF0YSByZXN1
bHREYXRhKSBTeW5jaHJvbm91cwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1BsdWdpbnMvTlBPYmplY3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9QbHVnaW5zL05QT2JqZWN0UHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjZWVjNGRjM2ZlYzUwYTdjMWFkNzI0NjIyMjdiMTVmYjQyMzZmNTgyLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Bs
dWdpbnMvTlBPYmplY3RQcm94eS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNTcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOUE9iamVjdFByb3h5
LmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIkFyZ3Vt
ZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIk5QSWRlbnRp
ZmllckRhdGEuaCIKLSNpbmNsdWRlICJOUE9iamVjdE1lc3NhZ2VSZWNlaXZlck1lc3NhZ2VzLmgi
Ci0jaW5jbHVkZSAiTlBSZW1vdGVPYmplY3RNYXAuaCIKLSNpbmNsdWRlICJOUFJ1bnRpbWVVdGls
aXRpZXMuaCIKLSNpbmNsdWRlICJOUFZhcmlhbnREYXRhLmgiCi0jaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotTlBPYmplY3RQcm94eSogTlBPYmplY3RQcm94eTo6Y3JlYXRlKE5QUmVtb3RlT2JqZWN0TWFw
KiBucFJlbW90ZU9iamVjdE1hcCwgUGx1Z2luKiBwbHVnaW4sIHVpbnQ2NF90IG5wT2JqZWN0SUQp
Ci17Ci0gICAgTlBPYmplY3RQcm94eSogbnBPYmplY3RQcm94eSA9IHRvTlBPYmplY3RQcm94eShj
cmVhdGVOUE9iamVjdCgwLCBucENsYXNzKCkpKTsKLSAgICBucE9iamVjdFByb3h5LT5pbml0aWFs
aXplKG5wUmVtb3RlT2JqZWN0TWFwLCBwbHVnaW4sIG5wT2JqZWN0SUQpOwotCi0gICAgcmV0dXJu
IG5wT2JqZWN0UHJveHk7Ci19Ci0KLU5QT2JqZWN0UHJveHk6Ok5QT2JqZWN0UHJveHkoKQotICAg
IDogbV9ucFJlbW90ZU9iamVjdE1hcCgwKQotICAgICwgbV9wbHVnaW4oMCkKLSAgICAsIG1fbnBP
YmplY3RJRCgwKQotewotfQotCi1OUE9iamVjdFByb3h5Ojp+TlBPYmplY3RQcm94eSgpCi17Ci0g
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmICghbV9ucFJlbW90ZU9iamVj
dE1hcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9ucFJlbW90ZU9iamVjdE1hcC0+bnBPYmpl
Y3RQcm94eURlc3Ryb3llZCh0aGlzKTsKLSAgICBtX25wUmVtb3RlT2JqZWN0TWFwLT5jb25uZWN0
aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6RGVhbGxv
Y2F0ZSgpLCBNZXNzYWdlczo6TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6OkRlYWxsb2NhdGU6OlJl
cGx5KCksIG1fbnBPYmplY3RJRCk7Ci19Ci0KLWJvb2wgTlBPYmplY3RQcm94eTo6aXNOUE9iamVj
dFByb3h5KE5QT2JqZWN0KiBucE9iamVjdCkKLXsKLSAgICByZXR1cm4gbnBPYmplY3QtPl9jbGFz
cyA9PSBucENsYXNzKCk7Ci19Ci0KLXZvaWQgTlBPYmplY3RQcm94eTo6aW52YWxpZGF0ZSgpCi17
Ci0gICAgQVNTRVJUKG1fbnBSZW1vdGVPYmplY3RNYXApOwotICAgIEFTU0VSVChtX3BsdWdpbik7
Ci0KLSAgICBtX25wUmVtb3RlT2JqZWN0TWFwID0gMDsKLSAgICBtX3BsdWdpbiA9IDA7Ci19Ci0g
ICAgCi12b2lkIE5QT2JqZWN0UHJveHk6OmluaXRpYWxpemUoTlBSZW1vdGVPYmplY3RNYXAqIG5w
UmVtb3RlT2JqZWN0TWFwLCBQbHVnaW4qIHBsdWdpbiwgdWludDY0X3QgbnBPYmplY3RJRCkKLXsK
LSAgICBBU1NFUlQoIW1fbnBSZW1vdGVPYmplY3RNYXApOwotICAgIEFTU0VSVCghbV9wbHVnaW4p
OwotICAgIEFTU0VSVCghbV9ucE9iamVjdElEKTsKLQotICAgIEFTU0VSVChucFJlbW90ZU9iamVj
dE1hcCk7Ci0gICAgQVNTRVJUKHBsdWdpbik7Ci0gICAgQVNTRVJUKG5wT2JqZWN0SUQpOwotCi0g
ICAgbV9ucFJlbW90ZU9iamVjdE1hcCA9IG5wUmVtb3RlT2JqZWN0TWFwOwotICAgIG1fcGx1Z2lu
ID0gcGx1Z2luOwotICAgIG1fbnBPYmplY3RJRCA9IG5wT2JqZWN0SUQ7Ci19Ci0KLWJvb2wgTlBP
YmplY3RQcm94eTo6aGFzTWV0aG9kKE5QSWRlbnRpZmllciBtZXRob2ROYW1lKQotewotICAgIGlm
ICghbV9ucFJlbW90ZU9iamVjdE1hcCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAg
IE5QSWRlbnRpZmllckRhdGEgbWV0aG9kTmFtZURhdGEgPSBOUElkZW50aWZpZXJEYXRhOjpmcm9t
TlBJZGVudGlmaWVyKG1ldGhvZE5hbWUpOwotICAgIAotICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBm
YWxzZTsKLSAgICAKLSAgICBpZiAoIW1fbnBSZW1vdGVPYmplY3RNYXAtPmNvbm5lY3Rpb24oKS0+
c2VuZFN5bmMoTWVzc2FnZXM6Ok5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyOjpIYXNNZXRob2QobWV0
aG9kTmFtZURhdGEpLCBNZXNzYWdlczo6TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6Okhhc01ldGhv
ZDo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX25wT2JqZWN0SUQpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCi0gICAgcmV0dXJuIHJldHVyblZhbHVlOwotfQotCi1ib29sIE5QT2JqZWN0UHJv
eHk6Omludm9rZShOUElkZW50aWZpZXIgbWV0aG9kTmFtZSwgY29uc3QgTlBWYXJpYW50KiBhcmd1
bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KQotewotICAg
IGlmICghbV9ucFJlbW90ZU9iamVjdE1hcCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
TlBJZGVudGlmaWVyRGF0YSBtZXRob2ROYW1lRGF0YSA9IE5QSWRlbnRpZmllckRhdGE6OmZyb21O
UElkZW50aWZpZXIobWV0aG9kTmFtZSk7Ci0gICAgVmVjdG9yPE5QVmFyaWFudERhdGE+IGFyZ3Vt
ZW50c0RhdGE7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsr
aSkKLSAgICAgICAgYXJndW1lbnRzRGF0YS5hcHBlbmQobV9ucFJlbW90ZU9iamVjdE1hcC0+bnBW
YXJpYW50VG9OUFZhcmlhbnREYXRhKGFyZ3VtZW50c1tpXSwgbV9wbHVnaW4pKTsKLQotICAgIGJv
b2wgcmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAgICBOUFZhcmlhbnREYXRhIHJlc3VsdERhdGE7Ci0g
ICAgCi0gICAgaWYgKCFtX25wUmVtb3RlT2JqZWN0TWFwLT5jb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6SW52b2tlKG1ldGhvZE5hbWVEYXRh
LCBhcmd1bWVudHNEYXRhKSwgTWVzc2FnZXM6Ok5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyOjpJbnZv
a2U6OlJlcGx5KHJldHVyblZhbHVlLCByZXN1bHREYXRhKSwgbV9ucE9iamVjdElEKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmICghcmV0dXJuVmFsdWUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICAqcmVzdWx0ID0gbV9ucFJlbW90ZU9iamVjdE1hcC0+bnBW
YXJpYW50RGF0YVRvTlBWYXJpYW50KHJlc3VsdERhdGEsIG1fcGx1Z2luKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBOUE9iamVjdFByb3h5OjppbnZva2VEZWZhdWx0KGNvbnN0IE5QVmFy
aWFudCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICBpZiAoIW1fbnBSZW1vdGVPYmplY3RNYXApCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIFZlY3RvcjxOUFZhcmlhbnREYXRhPiBhcmd1bWVudHNEYXRhOwotICAgIGZvciAo
dWludDMyX3QgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpCi0gICAgICAgIGFyZ3VtZW50
c0RhdGEuYXBwZW5kKG1fbnBSZW1vdGVPYmplY3RNYXAtPm5wVmFyaWFudFRvTlBWYXJpYW50RGF0
YShhcmd1bWVudHNbaV0sIG1fcGx1Z2luKSk7Ci0KLSAgICBib29sIHJldHVyblZhbHVlID0gZmFs
c2U7Ci0gICAgTlBWYXJpYW50RGF0YSByZXN1bHREYXRhOwotICAgIAotICAgIGlmICghbV9ucFJl
bW90ZU9iamVjdE1hcC0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TlBPYmplY3RN
ZXNzYWdlUmVjZWl2ZXI6Okludm9rZURlZmF1bHQoYXJndW1lbnRzRGF0YSksIE1lc3NhZ2VzOjpO
UE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6SW52b2tlRGVmYXVsdDo6UmVwbHkocmV0dXJuVmFsdWUs
IHJlc3VsdERhdGEpLCBtX25wT2JqZWN0SUQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgaWYgKCFyZXR1cm5WYWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAg
ICpyZXN1bHQgPSBtX25wUmVtb3RlT2JqZWN0TWFwLT5ucFZhcmlhbnREYXRhVG9OUFZhcmlhbnQo
cmVzdWx0RGF0YSwgbV9wbHVnaW4pOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE5QT2Jq
ZWN0UHJveHk6Omhhc1Byb3BlcnR5KE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCi17Ci0gICAg
aWYgKCFtX25wUmVtb3RlT2JqZWN0TWFwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0g
ICAgTlBJZGVudGlmaWVyRGF0YSBwcm9wZXJ0eU5hbWVEYXRhID0gTlBJZGVudGlmaWVyRGF0YTo6
ZnJvbU5QSWRlbnRpZmllcihwcm9wZXJ0eU5hbWUpOwotCi0gICAgYm9vbCByZXR1cm5WYWx1ZSA9
IGZhbHNlOwotICAgIAotICAgIGlmICghbV9ucFJlbW90ZU9iamVjdE1hcC0+Y29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6Okhhc1Byb3BlcnR5
KHByb3BlcnR5TmFtZURhdGEpLCBNZXNzYWdlczo6TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6Okhh
c1Byb3BlcnR5OjpSZXBseShyZXR1cm5WYWx1ZSksIG1fbnBPYmplY3RJRCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLX0KLQotYm9vbCBOUE9iamVj
dFByb3h5OjpnZXRQcm9wZXJ0eShOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBOUFZhcmlhbnQq
IHJlc3VsdCkKLXsKLSAgICBpZiAoIW1fbnBSZW1vdGVPYmplY3RNYXApCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIE5QSWRlbnRpZmllckRhdGEgcHJvcGVydHlOYW1lRGF0YSA9IE5QSWRl
bnRpZmllckRhdGE6OmZyb21OUElkZW50aWZpZXIocHJvcGVydHlOYW1lKTsKLQotICAgIGJvb2wg
cmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAgICBOUFZhcmlhbnREYXRhIHJlc3VsdERhdGE7Ci0gICAg
Ci0gICAgaWYgKCFtX25wUmVtb3RlT2JqZWN0TWFwLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1l
c3NhZ2VzOjpOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6R2V0UHJvcGVydHkocHJvcGVydHlOYW1l
RGF0YSksIE1lc3NhZ2VzOjpOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6R2V0UHJvcGVydHk6OlJl
cGx5KHJldHVyblZhbHVlLCByZXN1bHREYXRhKSwgbV9ucE9iamVjdElEKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFyZXR1cm5WYWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgKnJlc3VsdCA9IG1fbnBSZW1vdGVPYmplY3RNYXAtPm5wVmFyaWFudERhdGFUb05Q
VmFyaWFudChyZXN1bHREYXRhLCBtX3BsdWdpbik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgTlBPYmplY3RQcm94eTo6c2V0UHJvcGVydHkoTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwg
Y29uc3QgTlBWYXJpYW50KiB2YWx1ZSkKLXsKLSAgICBpZiAoIW1fbnBSZW1vdGVPYmplY3RNYXAp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBOUElkZW50aWZpZXJEYXRhIHByb3Bl
cnR5TmFtZURhdGEgPSBOUElkZW50aWZpZXJEYXRhOjpmcm9tTlBJZGVudGlmaWVyKHByb3BlcnR5
TmFtZSk7Ci0gICAgTlBWYXJpYW50RGF0YSBwcm9wZXJ0eVZhbHVlRGF0YSA9IG1fbnBSZW1vdGVP
YmplY3RNYXAtPm5wVmFyaWFudFRvTlBWYXJpYW50RGF0YSgqdmFsdWUsIG1fcGx1Z2luKTsKLQot
ICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBmYWxzZTsKLQotICAgIGlmICghbV9ucFJlbW90ZU9iamVj
dE1hcC0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TlBPYmplY3RNZXNzYWdlUmVj
ZWl2ZXI6OlNldFByb3BlcnR5KHByb3BlcnR5TmFtZURhdGEsIHByb3BlcnR5VmFsdWVEYXRhKSwg
TWVzc2FnZXM6Ok5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyOjpTZXRQcm9wZXJ0eTo6UmVwbHkocmV0
dXJuVmFsdWUpLCBtX25wT2JqZWN0SUQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXR1cm4gcmV0dXJuVmFsdWU7Ci19Ci0KLWJvb2wgTlBPYmplY3RQcm94eTo6cmVtb3ZlUHJvcGVy
dHkoTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKLXsKLSAgICBpZiAoIW1fbnBSZW1vdGVPYmpl
Y3RNYXApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBOUElkZW50aWZpZXJEYXRh
IHByb3BlcnR5TmFtZURhdGEgPSBOUElkZW50aWZpZXJEYXRhOjpmcm9tTlBJZGVudGlmaWVyKHBy
b3BlcnR5TmFtZSk7Ci0KLSAgICBib29sIHJldHVyblZhbHVlID0gZmFsc2U7Ci0gICAgCi0gICAg
aWYgKCFtX25wUmVtb3RlT2JqZWN0TWFwLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6UmVtb3ZlUHJvcGVydHkocHJvcGVydHlOYW1lRGF0
YSksIE1lc3NhZ2VzOjpOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6UmVtb3ZlUHJvcGVydHk6OlJl
cGx5KHJldHVyblZhbHVlKSwgbV9ucE9iamVjdElEKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmV0dXJuIHJldHVyblZhbHVlOwotfQotCi1ib29sIE5QT2JqZWN0UHJveHk6OmVudW1l
cmF0ZShOUElkZW50aWZpZXIqKiBpZGVudGlmaWVycywgdWludDMyX3QqIGlkZW50aWZpZXJDb3Vu
dCkKLXsKLSAgICBpZiAoIW1fbnBSZW1vdGVPYmplY3RNYXApCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGJvb2wgcmV0dXJuVmFsdWU7Ci0gICAgVmVjdG9yPE5QSWRlbnRpZmllckRhdGE+
IGlkZW50aWZpZXJzRGF0YTsKLQotICAgIGlmICghbV9ucFJlbW90ZU9iamVjdE1hcC0+Y29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6OkVudW1l
cmF0ZSgpLCBNZXNzYWdlczo6TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6OkVudW1lcmF0ZTo6UmVw
bHkocmV0dXJuVmFsdWUsIGlkZW50aWZpZXJzRGF0YSksIG1fbnBPYmplY3RJRCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmICghcmV0dXJuVmFsdWUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIE5QSWRlbnRpZmllciogbmFtZUlkZW50aWZpZXJzID0gbnBuTWVtTmV3QXJy
YXk8TlBJZGVudGlmaWVyPihpZGVudGlmaWVyc0RhdGEuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGlkZW50aWZpZXJzRGF0YS5zaXplKCk7ICsraSkKLSAgICAgICAg
bmFtZUlkZW50aWZpZXJzW2ldID0gaWRlbnRpZmllcnNEYXRhW2ldLmNyZWF0ZU5QSWRlbnRpZmll
cigpOwotICAgIAotICAgICppZGVudGlmaWVycyA9IG5hbWVJZGVudGlmaWVyczsKLSAgICAqaWRl
bnRpZmllckNvdW50ID0gaWRlbnRpZmllcnNEYXRhLnNpemUoKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBOUE9iamVjdFByb3h5Ojpjb25zdHJ1Y3QoY29uc3QgTlBWYXJpYW50KiBhcmd1
bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KQotewotICAg
IGlmICghbV9ucFJlbW90ZU9iamVjdE1hcCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
VmVjdG9yPE5QVmFyaWFudERhdGE+IGFyZ3VtZW50c0RhdGE7Ci0gICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkKLSAgICAgICAgYXJndW1lbnRzRGF0YS5hcHBl
bmQobV9ucFJlbW90ZU9iamVjdE1hcC0+bnBWYXJpYW50VG9OUFZhcmlhbnREYXRhKGFyZ3VtZW50
c1tpXSwgbV9wbHVnaW4pKTsKLQotICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAgICBO
UFZhcmlhbnREYXRhIHJlc3VsdERhdGE7Ci0gICAgCi0gICAgaWYgKCFtX25wUmVtb3RlT2JqZWN0
TWFwLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOUE9iamVjdE1lc3NhZ2VSZWNl
aXZlcjo6Q29uc3RydWN0KGFyZ3VtZW50c0RhdGEpLCBNZXNzYWdlczo6TlBPYmplY3RNZXNzYWdl
UmVjZWl2ZXI6OkNvbnN0cnVjdDo6UmVwbHkocmV0dXJuVmFsdWUsIHJlc3VsdERhdGEpLCBtX25w
T2JqZWN0SUQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKCFyZXR1cm5W
YWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgICpyZXN1bHQgPSBtX25wUmVt
b3RlT2JqZWN0TWFwLT5ucFZhcmlhbnREYXRhVG9OUFZhcmlhbnQocmVzdWx0RGF0YSwgbV9wbHVn
aW4pOwotICAgIHJldHVybiB0cnVlOwotfQotCi1OUENsYXNzKiBOUE9iamVjdFByb3h5OjpucENs
YXNzKCkKLXsKLSAgICBzdGF0aWMgTlBDbGFzcyBucENsYXNzID0gewotICAgICAgICBOUF9DTEFT
U19TVFJVQ1RfVkVSU0lPTiwKLSAgICAgICAgTlBfQWxsb2NhdGUsCi0gICAgICAgIE5QX0RlYWxs
b2NhdGUsCi0gICAgICAgIDAsCi0gICAgICAgIE5QX0hhc01ldGhvZCwKLSAgICAgICAgTlBfSW52
b2tlLAotICAgICAgICBOUF9JbnZva2VEZWZhdWx0LAotICAgICAgICBOUF9IYXNQcm9wZXJ0eSwK
LSAgICAgICAgTlBfR2V0UHJvcGVydHksCi0gICAgICAgIE5QX1NldFByb3BlcnR5LAotICAgICAg
ICBOUF9SZW1vdmVQcm9wZXJ0eSwKLSAgICAgICAgTlBfRW51bWVyYXRlLAotICAgICAgICBOUF9D
b25zdHJ1Y3QKLSAgICB9OwotCi0gICAgcmV0dXJuICZucENsYXNzOwotfQotCi1OUE9iamVjdCog
TlBPYmplY3RQcm94eTo6TlBfQWxsb2NhdGUoTlBQIG5wcCwgTlBDbGFzcyopCi17Ci0gICAgQVNT
RVJUX1VOVVNFRChucHAsICFucHApOwotCi0gICAgcmV0dXJuIG5ldyBOUE9iamVjdFByb3h5Owot
fQotCi12b2lkIE5QT2JqZWN0UHJveHk6Ok5QX0RlYWxsb2NhdGUoTlBPYmplY3QqIG5wT2JqZWN0
KQotewotICAgIC8vIGh0dHA6Ly93ZWJraXQub3JnL2IvMTE4NTM1IC0gVGhlIEphdmEgTmV0c2Nh
cGUgUGx1Zy1pbiBoYXMgYSBiYWNrZ3JvdW5kIHRocmVhZCBkbyBzb21lIG9mIHRoZWlyIE5QUF9E
ZXN0cm95IHdvcmsuCi0gICAgLy8gVGhhdCBiYWNrZ3JvdW5kIHRocmVhZCBjYW4gY2FsbCBOUF9E
ZWFsbG9jYXRlLCBhbmQgdGhpcyBsZWFkcyB0byBhIFdlYlByb2Nlc3MgPC0+IFBsdWdpblByb2Nl
c3MgZGVhZGxvY2suCi0gICAgLy8gU2luY2UgTlBBUEkgYmVoYXZpb3Igb24gYSBiYWNrZ3JvdW5k
IHRocmVhZCBpcyB1bmRlZmluZWQsIGl0IGlzIG9rYXkgdG8gbGltaXQgdGhpcyB3b3JrYXJvdW5k
IHRvIHRoZSBvbmUgQVBJCi0gICAgLy8gdGhhdCBpcyBrbm93biB0byBiZSBtaXN1c2VkIGR1cmlu
ZyBwbHVnaW4gdGVhcmRvd24sIGFuZCB0byBub3QgYmUgY29uY2VybmVkIGFib3V0IGNoYW5nZSBp
biBiZWhhdmlvciBpZiB0aGlzCi0gICAgLy8gb2NjdXJlZCBhdCBhbnkgb3RoZXIgdGltZS4KLSAg
ICBlbnN1cmVPbk1haW5SdW5Mb29wKFtucE9iamVjdF0gewotICAgICAgICBkZWxldGUgdG9OUE9i
amVjdFByb3h5KG5wT2JqZWN0KTsKLSAgICB9KTsKLX0KLQotYm9vbCBOUE9iamVjdFByb3h5OjpO
UF9IYXNNZXRob2QoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSkK
LXsKLSAgICByZXR1cm4gdG9OUE9iamVjdFByb3h5KG5wT2JqZWN0KS0+aGFzTWV0aG9kKG1ldGhv
ZE5hbWUpOwotfQotCi1ib29sIE5QT2JqZWN0UHJveHk6Ok5QX0ludm9rZShOUE9iamVjdCogbnBP
YmplY3QsIE5QSWRlbnRpZmllciBtZXRob2ROYW1lLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3VtZW50
cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmV0
dXJuIHRvTlBPYmplY3RQcm94eShucE9iamVjdCktPmludm9rZShtZXRob2ROYW1lLCBhcmd1bWVu
dHMsIGFyZ3VtZW50Q291bnQsIHJlc3VsdCk7Ci19Ci0KLWJvb2wgTlBPYmplY3RQcm94eTo6TlBf
SW52b2tlRGVmYXVsdChOUE9iamVjdCogbnBPYmplY3QsIGNvbnN0IE5QVmFyaWFudCogYXJndW1l
bnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBy
ZXR1cm4gdG9OUE9iamVjdFByb3h5KG5wT2JqZWN0KS0+aW52b2tlRGVmYXVsdChhcmd1bWVudHMs
IGFyZ3VtZW50Q291bnQsIHJlc3VsdCk7Ci19Ci0KLWJvb2wgTlBPYmplY3RQcm94eTo6TlBfSGFz
UHJvcGVydHkoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lKQot
ewotICAgIHJldHVybiB0b05QT2JqZWN0UHJveHkobnBPYmplY3QpLT5oYXNQcm9wZXJ0eShwcm9w
ZXJ0eU5hbWUpOwotfQotCi1ib29sIE5QT2JqZWN0UHJveHk6Ok5QX0dldFByb3BlcnR5KE5QT2Jq
ZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgTlBWYXJpYW50KiByZXN1
bHQpCi17Ci0gICAgcmV0dXJuIHRvTlBPYmplY3RQcm94eShucE9iamVjdCktPmdldFByb3BlcnR5
KHByb3BlcnR5TmFtZSwgcmVzdWx0KTsKLX0KLQotYm9vbCBOUE9iamVjdFByb3h5OjpOUF9TZXRQ
cm9wZXJ0eShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNv
bnN0IE5QVmFyaWFudCogdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvTlBPYmplY3RQcm94eShucE9i
amVjdCktPnNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpOwotfQotCi1ib29sIE5QT2Jq
ZWN0UHJveHk6Ok5QX1JlbW92ZVByb3BlcnR5KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlm
aWVyIHByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gdG9OUE9iamVjdFByb3h5KG5wT2JqZWN0
KS0+cmVtb3ZlUHJvcGVydHkocHJvcGVydHlOYW1lKTsKLX0KLQotYm9vbCBOUE9iamVjdFByb3h5
OjpOUF9FbnVtZXJhdGUoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIqKiBpZGVudGlm
aWVycywgdWludDMyX3QqIGlkZW50aWZpZXJDb3VudCkKLXsKLSAgICByZXR1cm4gdG9OUE9iamVj
dFByb3h5KG5wT2JqZWN0KS0+ZW51bWVyYXRlKGlkZW50aWZpZXJzLCBpZGVudGlmaWVyQ291bnQp
OwotfQotCi1ib29sIE5QT2JqZWN0UHJveHk6Ok5QX0NvbnN0cnVjdChOUE9iamVjdCogbnBPYmpl
Y3QsIGNvbnN0IE5QVmFyaWFudCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBO
UFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gdG9OUE9iamVjdFByb3h5KG5wT2JqZWN0
KS0+Y29uc3RydWN0KGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwgcmVzdWx0KTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTlBPYmplY3RQcm94
eS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OUE9iamVjdFByb3h5LmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhZmFiMWUzNzVmNDU2MTY2YzI1ZDljZGE3MDdhODg4
Y2E2Zjc4OWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OUE9iamVjdFByb3h5LmgKKysrIC9kZXYvbnVs
bApAQCAtMSw5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSA8V2ViQ29yZS9ucHJ1bnRp
bWVfaW50ZXJuYWwuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLWNsYXNzIE5QUmVtb3RlT2JqZWN0TWFwOwotY2xhc3MgUGx1Z2luOwotCi1j
bGFzcyBOUE9iamVjdFByb3h5IDogcHVibGljIE5QT2JqZWN0IHsKLSAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShOUE9iamVjdFByb3h5KTsKLQotcHVibGljOgotICAgIHN0YXRpYyBOUE9iamVjdFBy
b3h5KiBjcmVhdGUoTlBSZW1vdGVPYmplY3RNYXAqLCBQbHVnaW4qLCB1aW50NjRfdCBucE9iamVj
dElEKTsKLQotICAgIHN0YXRpYyBib29sIGlzTlBPYmplY3RQcm94eShOUE9iamVjdCopOwotICAg
IAotICAgIHN0YXRpYyBOUE9iamVjdFByb3h5KiB0b05QT2JqZWN0UHJveHkoTlBPYmplY3QqIG5w
T2JqZWN0KQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihpc05QT2JqZWN0UHJveHkobnBPYmplY3QpKTsKLSAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PE5QT2JqZWN0UHJveHkqPihucE9iamVjdCk7Ci0gICAgfQotCi0gICAgUGx1Z2luKiBw
bHVnaW4oKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbjsgfQotICAgIHVpbnQ2NF90IG5wT2JqZWN0
SUQoKSBjb25zdCB7IHJldHVybiBtX25wT2JqZWN0SUQ7IH0KLQotICAgIHZvaWQgaW52YWxpZGF0
ZSgpOwotCi1wcml2YXRlOgotICAgIE5QT2JqZWN0UHJveHkoKTsKLSAgICB+TlBPYmplY3RQcm94
eSgpOwotCi0gICAgdm9pZCBpbml0aWFsaXplKE5QUmVtb3RlT2JqZWN0TWFwKiwgUGx1Z2luKiwg
dWludDY0X3QgbnBPYmplY3RJRCk7Ci0KLSAgICBib29sIGhhc01ldGhvZChOUElkZW50aWZpZXIg
bWV0aG9kTmFtZSk7Ci0gICAgYm9vbCBpbnZva2UoTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUsIGNv
bnN0IE5QVmFyaWFudCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlh
bnQqIHJlc3VsdCk7Ci0gICAgYm9vbCBpbnZva2VEZWZhdWx0KGNvbnN0IE5QVmFyaWFudCogYXJn
dW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCk7Ci0gICAg
Ym9vbCBoYXNQcm9wZXJ0eShOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lKTsKLSAgICBib29sIGdl
dFByb3BlcnR5KE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIE5QVmFyaWFudCogcmVzdWx0KTsK
LSAgICBib29sIHNldFByb3BlcnR5KE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IE5Q
VmFyaWFudCogdmFsdWUpOwotICAgIGJvb2wgcmVtb3ZlUHJvcGVydHkoTlBJZGVudGlmaWVyIHBy
b3BlcnR5TmFtZSk7Ci0gICAgYm9vbCBlbnVtZXJhdGUoTlBJZGVudGlmaWVyKiogaWRlbnRpZmll
cnMsIHVpbnQzMl90KiBpZGVudGlmaWVyQ291bnQpOwotICAgIGJvb2wgY29uc3RydWN0KGNvbnN0
IE5QVmFyaWFudCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQq
IHJlc3VsdCk7Ci0KLSAgICBzdGF0aWMgTlBDbGFzcyogbnBDbGFzcygpOwotICAgIHN0YXRpYyBO
UE9iamVjdCogTlBfQWxsb2NhdGUoTlBQLCBOUENsYXNzKik7Ci0gICAgc3RhdGljIHZvaWQgTlBf
RGVhbGxvY2F0ZShOUE9iamVjdCopOwotICAgIHN0YXRpYyBib29sIE5QX0hhc01ldGhvZChOUE9i
amVjdCosIE5QSWRlbnRpZmllciBtZXRob2ROYW1lKTsKLSAgICBzdGF0aWMgYm9vbCBOUF9JbnZv
a2UoTlBPYmplY3QqLCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSwgY29uc3QgTlBWYXJpYW50KiBh
cmd1bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KTsKLSAg
ICBzdGF0aWMgYm9vbCBOUF9JbnZva2VEZWZhdWx0KE5QT2JqZWN0KiwgY29uc3QgTlBWYXJpYW50
KiBhcmd1bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KTsK
LSAgICBzdGF0aWMgYm9vbCBOUF9IYXNQcm9wZXJ0eShOUE9iamVjdCosIE5QSWRlbnRpZmllciBw
cm9wZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBib29sIE5QX0dldFByb3BlcnR5KE5QT2JqZWN0Kiwg
TlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgTlBWYXJpYW50KiByZXN1bHQpOwotICAgIHN0YXRp
YyBib29sIE5QX1NldFByb3BlcnR5KE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFt
ZSwgY29uc3QgTlBWYXJpYW50KiB2YWx1ZSk7Ci0gICAgc3RhdGljIGJvb2wgTlBfUmVtb3ZlUHJv
cGVydHkoTlBPYmplY3QqLCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lKTsKLSAgICBzdGF0aWMg
Ym9vbCBOUF9FbnVtZXJhdGUoTlBPYmplY3QqLCBOUElkZW50aWZpZXIqKiBpZGVudGlmaWVycywg
dWludDMyX3QqIGlkZW50aWZpZXJDb3VudCk7Ci0gICAgc3RhdGljIGJvb2wgTlBfQ29uc3RydWN0
KE5QT2JqZWN0KiwgY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50
Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KTsKLQotICAgIE5QUmVtb3RlT2JqZWN0TWFwKiBtX25w
UmVtb3RlT2JqZWN0TWFwOwotICAgIFBsdWdpbiogbV9wbHVnaW47Ci0gICAgdWludDY0X3QgbV9u
cE9iamVjdElEOwotfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8g
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAyNzFlMTdmNThhYzYxYTNkYzRhOGY1ODZkN2JkNDJiZTQ4ODZmY2FmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjMxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTlBSZW1v
dGVPYmplY3RNYXAuaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5j
bHVkZSAiTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIuaCIKLSNpbmNsdWRlICJOUE9iamVjdFByb3h5
LmgiCi0jaW5jbHVkZSAiTlBSdW50aW1lVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiTlBWYXJpYW50
RGF0YS5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRl
TlBPYmplY3RJRCgpCi17Ci0gICAgc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlTlBPYmplY3RJRDsK
LSAgICByZXR1cm4gKytnZW5lcmF0ZU5QT2JqZWN0SUQ7Ci19Ci0KLVJlZjxOUFJlbW90ZU9iamVj
dE1hcD4gTlBSZW1vdGVPYmplY3RNYXA6OmNyZWF0ZShJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rp
b24pCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTlBSZW1vdGVPYmplY3RNYXAoY29ubmVj
dGlvbikpOwotfQotCi1OUFJlbW90ZU9iamVjdE1hcDo6TlBSZW1vdGVPYmplY3RNYXAoSVBDOjpD
b25uZWN0aW9uKiBjb25uZWN0aW9uKQotICAgIDogbV9jb25uZWN0aW9uKGNvbm5lY3Rpb24pCi17
Ci19Ci0KLU5QUmVtb3RlT2JqZWN0TWFwOjp+TlBSZW1vdGVPYmplY3RNYXAoKQotewotICAgIEFT
U0VSVChtX25wT2JqZWN0UHJveGllcy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChtX3JlZ2lzdGVy
ZWROUE9iamVjdHMuaXNFbXB0eSgpKTsKLX0KLQotTlBPYmplY3QqIE5QUmVtb3RlT2JqZWN0TWFw
OjpjcmVhdGVOUE9iamVjdFByb3h5KHVpbnQ2NF90IHJlbW90ZU9iamVjdElELCBQbHVnaW4qIHBs
dWdpbikKLXsKLSAgICBOUE9iamVjdFByb3h5KiBucE9iamVjdFByb3h5ID0gTlBPYmplY3RQcm94
eTo6Y3JlYXRlKHRoaXMsIHBsdWdpbiwgcmVtb3RlT2JqZWN0SUQpOwotCi0gICAgbV9ucE9iamVj
dFByb3hpZXMuYWRkKG5wT2JqZWN0UHJveHkpOwotCi0gICAgcmV0dXJuIG5wT2JqZWN0UHJveHk7
Ci19Ci0KLXZvaWQgTlBSZW1vdGVPYmplY3RNYXA6Om5wT2JqZWN0UHJveHlEZXN0cm95ZWQoTlBP
YmplY3QqIG5wT2JqZWN0KQotewotICAgIE5QT2JqZWN0UHJveHkqIG5wT2JqZWN0UHJveHkgPSBO
UE9iamVjdFByb3h5Ojp0b05QT2JqZWN0UHJveHkobnBPYmplY3QpOwotICAgIEFTU0VSVChtX25w
T2JqZWN0UHJveGllcy5jb250YWlucyhucE9iamVjdFByb3h5KSk7Ci0KLSAgICBtX25wT2JqZWN0
UHJveGllcy5yZW1vdmUobnBPYmplY3RQcm94eSk7Ci19Ci0KLXVpbnQ2NF90IE5QUmVtb3RlT2Jq
ZWN0TWFwOjpyZWdpc3Rlck5QT2JqZWN0KE5QT2JqZWN0KiBucE9iamVjdCwgUGx1Z2luKiBwbHVn
aW4pCi17Ci0gICAgdWludDY0X3QgbnBPYmplY3RJRCA9IGdlbmVyYXRlTlBPYmplY3RJRCgpOwot
ICAgIG1fcmVnaXN0ZXJlZE5QT2JqZWN0cy5zZXQobnBPYmplY3RJRCwgbWFrZVVuaXF1ZTxOUE9i
amVjdE1lc3NhZ2VSZWNlaXZlcj4odGhpcywgcGx1Z2luLCBucE9iamVjdElELCBucE9iamVjdCku
cmVsZWFzZSgpKTsKLQotICAgIHJldHVybiBucE9iamVjdElEOwotfQotCi12b2lkIE5QUmVtb3Rl
T2JqZWN0TWFwOjp1bnJlZ2lzdGVyTlBPYmplY3QodWludDY0X3QgbnBPYmplY3RJRCkKLXsKLSAg
ICBtX3JlZ2lzdGVyZWROUE9iamVjdHMucmVtb3ZlKG5wT2JqZWN0SUQpOwotfQotCi1zdGF0aWMg
dWludDY0X3QgcmVtb3RlTlBPYmplY3RJRChQbHVnaW4qIHBsdWdpbiwgTlBPYmplY3QqIG5wT2Jq
ZWN0KQotewotICAgIGlmICghTlBPYmplY3RQcm94eTo6aXNOUE9iamVjdFByb3h5KG5wT2JqZWN0
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBOUE9iamVjdFByb3h5KiBucE9iamVjdFByb3h5
ID0gTlBPYmplY3RQcm94eTo6dG9OUE9iamVjdFByb3h5KG5wT2JqZWN0KTsKLSAgICBpZiAobnBP
YmplY3RQcm94eS0+cGx1Z2luKCkgIT0gcGx1Z2luKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IHJldHVybiBucE9iamVjdFByb3h5LT5ucE9iamVjdElEKCk7Ci19Ci0KLU5QVmFyaWFudERhdGEg
TlBSZW1vdGVPYmplY3RNYXA6Om5wVmFyaWFudFRvTlBWYXJpYW50RGF0YShjb25zdCBOUFZhcmlh
bnQmIHZhcmlhbnQsIFBsdWdpbiogcGx1Z2luKQotewotICAgIHN3aXRjaCAodmFyaWFudC50eXBl
KSB7Ci0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX1ZvaWQ6Ci0gICAgICAgIHJldHVybiBOUFZhcmlh
bnREYXRhOjptYWtlVm9pZCgpOwotCi0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX051bGw6Ci0gICAg
ICAgIHJldHVybiBOUFZhcmlhbnREYXRhOjptYWtlTnVsbCgpOwotCi0gICAgY2FzZSBOUFZhcmlh
bnRUeXBlX0Jvb2w6Ci0gICAgICAgIHJldHVybiBOUFZhcmlhbnREYXRhOjptYWtlQm9vbCh2YXJp
YW50LnZhbHVlLmJvb2xWYWx1ZSk7Ci0KLSAgICBjYXNlIE5QVmFyaWFudFR5cGVfSW50MzI6Ci0g
ICAgICAgIHJldHVybiBOUFZhcmlhbnREYXRhOjptYWtlSW50MzIodmFyaWFudC52YWx1ZS5pbnRW
YWx1ZSk7Ci0KLSAgICBjYXNlIE5QVmFyaWFudFR5cGVfRG91YmxlOgotICAgICAgICByZXR1cm4g
TlBWYXJpYW50RGF0YTo6bWFrZURvdWJsZSh2YXJpYW50LnZhbHVlLmRvdWJsZVZhbHVlKTsKLQot
ICAgIGNhc2UgTlBWYXJpYW50VHlwZV9TdHJpbmc6Ci0gICAgICAgIHJldHVybiBOUFZhcmlhbnRE
YXRhOjptYWtlU3RyaW5nKHZhcmlhbnQudmFsdWUuc3RyaW5nVmFsdWUuVVRGOENoYXJhY3RlcnMs
IHZhcmlhbnQudmFsdWUuc3RyaW5nVmFsdWUuVVRGOExlbmd0aCk7Ci0KLSAgICBjYXNlIE5QVmFy
aWFudFR5cGVfT2JqZWN0OiB7Ci0gICAgICAgIE5QT2JqZWN0KiBucE9iamVjdCA9IHZhcmlhbnQu
dmFsdWUub2JqZWN0VmFsdWU7Ci0KLSAgICAgICAgaWYgKHVpbnQ2NF90IG5wT2JqZWN0SUQgPSBy
ZW1vdGVOUE9iamVjdElEKHBsdWdpbiwgbnBPYmplY3QpKSB7Ci0gICAgICAgICAgICAvLyBGSVhN
RTogVW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzLCB0aGlzIG1pZ2h0IGxlYWsgdGhlIE5QT2JqZWN0
UHJveHkgb2JqZWN0LiAKLSAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgaG93IHRvIGF2b2lkIHRo
YXQuCi0gICAgICAgICAgICByZXRhaW5OUE9iamVjdChucE9iamVjdCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gTlBWYXJpYW50RGF0YTo6bWFrZVJlbW90ZU5QT2JqZWN0SUQobnBPYmplY3RJRCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICB1aW50NjRfdCBucE9iamVjdElEID0gcmVnaXN0ZXJOUE9iamVj
dChucE9iamVjdCwgcGx1Z2luKTsKLSAgICAgICAgcmV0dXJuIE5QVmFyaWFudERhdGE6Om1ha2VM
b2NhbE5QT2JqZWN0SUQobnBPYmplY3RJRCk7Ci0gICAgfQotCi0gICAgfQotCi0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIE5QVmFyaWFudERhdGE6Om1ha2VWb2lkKCk7Ci19
Ci0KLU5QVmFyaWFudCBOUFJlbW90ZU9iamVjdE1hcDo6bnBWYXJpYW50RGF0YVRvTlBWYXJpYW50
KGNvbnN0IE5QVmFyaWFudERhdGEmIG5wVmFyaWFudERhdGEsIFBsdWdpbiogcGx1Z2luKQotewot
ICAgIE5QVmFyaWFudCBucFZhcmlhbnQ7Ci0KLSAgICBzd2l0Y2ggKG5wVmFyaWFudERhdGEudHlw
ZSgpKSB7Ci0gICAgY2FzZSBOUFZhcmlhbnREYXRhOjpWb2lkOgotICAgICAgICBWT0lEX1RPX05Q
VkFSSUFOVChucFZhcmlhbnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5QVmFyaWFudERh
dGE6Ok51bGw6Ci0gICAgICAgIE5VTExfVE9fTlBWQVJJQU5UKG5wVmFyaWFudCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgTlBWYXJpYW50RGF0YTo6Qm9vbDoKLSAgICAgICAgQk9PTEVBTl9U
T19OUFZBUklBTlQobnBWYXJpYW50RGF0YS5ib29sVmFsdWUoKSwgbnBWYXJpYW50KTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBOUFZhcmlhbnREYXRhOjpJbnQzMjoKLSAgICAgICAgSU5UMzJf
VE9fTlBWQVJJQU5UKG5wVmFyaWFudERhdGEuaW50MzJWYWx1ZSgpLCBucFZhcmlhbnQpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIE5QVmFyaWFudERhdGE6OkRvdWJsZToKLSAgICAgICAgRE9V
QkxFX1RPX05QVkFSSUFOVChucFZhcmlhbnREYXRhLmRvdWJsZVZhbHVlKCksIG5wVmFyaWFudCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlBWYXJpYW50RGF0YTo6U3RyaW5nOiB7Ci0gICAg
ICAgIE5QU3RyaW5nIG5wU3RyaW5nID0gY3JlYXRlTlBTdHJpbmcobnBWYXJpYW50RGF0YS5zdHJp
bmdWYWx1ZSgpKTsKLSAgICAgICAgU1RSSU5HTl9UT19OUFZBUklBTlQobnBTdHJpbmcuVVRGOENo
YXJhY3RlcnMsIG5wU3RyaW5nLlVURjhMZW5ndGgsIG5wVmFyaWFudCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIE5QVmFyaWFudERhdGE6OkxvY2FsTlBPYmplY3RJRDogewotICAg
ICAgICB1aW50NjRfdCBucE9iamVjdElEID0gbnBWYXJpYW50RGF0YS5sb2NhbE5QT2JqZWN0SURW
YWx1ZSgpOwotICAgICAgICBBU1NFUlQobnBPYmplY3RJRCk7Ci0KLSAgICAgICAgTlBPYmplY3RN
ZXNzYWdlUmVjZWl2ZXIqIG5wT2JqZWN0TWVzc2FnZVJlY2VpdmVyID0gbV9yZWdpc3RlcmVkTlBP
YmplY3RzLmdldChucE9iamVjdElEKTsKLSAgICAgICAgaWYgKCFucE9iamVjdE1lc3NhZ2VSZWNl
aXZlcikgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBW
T0lEX1RPX05QVkFSSUFOVChucFZhcmlhbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLQotICAgICAgICBOUE9iamVjdCogbnBPYmplY3QgPSBucE9iamVjdE1lc3NhZ2VSZWNlaXZl
ci0+bnBPYmplY3QoKTsKLSAgICAgICAgQVNTRVJUKG5wT2JqZWN0KTsKLQotICAgICAgICByZXRh
aW5OUE9iamVjdChucE9iamVjdCk7Ci0gICAgICAgIE9CSkVDVF9UT19OUFZBUklBTlQobnBPYmpl
Y3QsIG5wVmFyaWFudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIE5QVmFyaWFu
dERhdGE6OlJlbW90ZU5QT2JqZWN0SUQ6IHsKLSAgICAgICAgTlBPYmplY3QqIG5wT2JqZWN0UHJv
eHkgPSBjcmVhdGVOUE9iamVjdFByb3h5KG5wVmFyaWFudERhdGEucmVtb3RlTlBPYmplY3RJRFZh
bHVlKCksIHBsdWdpbik7Ci0gICAgICAgIE9CSkVDVF9UT19OUFZBUklBTlQobnBPYmplY3RQcm94
eSwgbnBWYXJpYW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVy
biBucFZhcmlhbnQ7Ci19Ci0KLXZvaWQgTlBSZW1vdGVPYmplY3RNYXA6OnBsdWdpbkRlc3Ryb3ll
ZChQbHVnaW4qIHBsdWdpbikKLXsKLSAgICAvLyBHYXRoZXIgYW5kIGRlbGV0ZSB0aGUgcmVjZWl2
ZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBsdWctaW4uCi0gICAgVmVjdG9yPE5QT2JqZWN0TWVz
c2FnZVJlY2VpdmVyKj4gcmVjZWl2ZXJzOwotICAgIGZvciAoYXV0byogcmVjZWl2ZXIgOiBtX3Jl
Z2lzdGVyZWROUE9iamVjdHMudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKHJlY2VpdmVyLT5wbHVn
aW4oKSA9PSBwbHVnaW4pCi0gICAgICAgICAgICByZWNlaXZlcnMuYXBwZW5kKHJlY2VpdmVyKTsK
LSAgICB9Ci0gICAgZm9yIChhdXRvKiByZWNlaXZlciA6IHJlY2VpdmVycykKLSAgICAgICAgZGVs
ZXRlIHJlY2VpdmVyOwotCi0gICAgLy8gSW52YWxpZGF0ZSBhbmQgcmVtb3ZlIGFsbCBwcm94aWVz
IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBsdWctaW4uCi0gICAgVmVjdG9yPE5QT2JqZWN0UHJveHkq
PiBwcm94aWVzOwotICAgIGZvciAoYXV0byogcHJveHkgOiBtX25wT2JqZWN0UHJveGllcykgewot
ICAgICAgICBpZiAocHJveHktPnBsdWdpbigpID09IHBsdWdpbikKLSAgICAgICAgICAgIHByb3hp
ZXMuYXBwZW5kKHByb3h5KTsKLSAgICB9Ci0gICAgZm9yIChhdXRvKiBwcm94eSA6IHByb3hpZXMp
IHsKLSAgICAgICAgcHJveHktPmludmFsaWRhdGUoKTsKLSAgICAgICAgQVNTRVJUKG1fbnBPYmpl
Y3RQcm94aWVzLmNvbnRhaW5zKHByb3h5KSk7Ci0gICAgICAgIG1fbnBPYmplY3RQcm94aWVzLnJl
bW92ZShwcm94eSk7Ci0gICAgfQotfQotCi1ib29sIE5QUmVtb3RlT2JqZWN0TWFwOjpkaWRSZWNl
aXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXIm
IGRlY29kZXIsIFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCi17Ci0gICAg
TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIqIG1lc3NhZ2VSZWNlaXZlciA9IG1fcmVnaXN0ZXJlZE5Q
T2JqZWN0cy5nZXQoZGVjb2Rlci5kZXN0aW5hdGlvbklEKCkpOwotICAgIGlmICghbWVzc2FnZVJl
Y2VpdmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbWVzc2FnZVJlY2Vp
dmVyLT5kaWRSZWNlaXZlU3luY05QT2JqZWN0TWVzc2FnZVJlY2VpdmVyTWVzc2FnZShjb25uZWN0
aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5oIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4NmNkMmYzODUzMGYyYWI0MzJlZTc0MmFkNWRmNTA5Yjc3MzRiYWM4Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAuaAorKysgL2Rldi9udWxsCkBAIC0x
LDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE5QUmVtb3RlT2JqZWN0TWFwX2gKLSNk
ZWZpbmUgTlBSZW1vdGVPYmplY3RNYXBfaAotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi0KLSNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9ucHJ1bnRp
bWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNs
YXNzIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyOwotY2xhc3MgTlBPYmplY3RQcm94eTsKLWNsYXNz
IE5QVmFyaWFudERhdGE7Ci1jbGFzcyBQbHVnaW47Ci0KLWNsYXNzIE5QUmVtb3RlT2JqZWN0TWFw
IDogcHVibGljIFJlZkNvdW50ZWQ8TlBSZW1vdGVPYmplY3RNYXA+IHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPE5QUmVtb3RlT2JqZWN0TWFwPiBjcmVhdGUoSVBDOjpDb25uZWN0aW9uKik7Ci0g
ICAgfk5QUmVtb3RlT2JqZWN0TWFwKCk7Ci0KLSAgICAvLyBDcmVhdGVzIGFuIE5QT2JqZWN0UHJv
eHkgd3JhcHBlciBmb3IgdGhlIHJlbW90ZSBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gcmVtb3RlIG9i
amVjdCBJRC4KLSAgICBOUE9iamVjdCogY3JlYXRlTlBPYmplY3RQcm94eSh1aW50NjRfdCByZW1v
dGVPYmplY3RJRCwgUGx1Z2luKik7Ci0gICAgdm9pZCBucE9iamVjdFByb3h5RGVzdHJveWVkKE5Q
T2JqZWN0Kik7Ci0KLSAgICAvLyBFeHBvc2UgdGhlIGdpdmVuIE5QT2JqZWN0IGFzIGEgcmVtb3Rl
IG9iamVjdC4gUmV0dXJucyB0aGUgb2JqZWN0SUQuCi0gICAgdWludDY0X3QgcmVnaXN0ZXJOUE9i
amVjdChOUE9iamVjdCosIFBsdWdpbiopOwotICAgIHZvaWQgdW5yZWdpc3Rlck5QT2JqZWN0KHVp
bnQ2NF90KTsKLQotICAgIE5QVmFyaWFudERhdGEgbnBWYXJpYW50VG9OUFZhcmlhbnREYXRhKGNv
bnN0IE5QVmFyaWFudCYsIFBsdWdpbiopOwotICAgIE5QVmFyaWFudCBucFZhcmlhbnREYXRhVG9O
UFZhcmlhbnQoY29uc3QgTlBWYXJpYW50RGF0YSYsIFBsdWdpbiopOwotCi0gICAgSVBDOjpDb25u
ZWN0aW9uKiBjb25uZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb25uZWN0aW9uOyB9Ci0KLSAg
ICB2b2lkIHBsdWdpbkRlc3Ryb3llZChQbHVnaW4qKTsKLQotICAgIGJvb2wgZGlkUmVjZWl2ZVN5
bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIFVuaXF1ZVJlZjxJUEM6
OkVuY29kZXI+Jik7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTlBSZW1vdGVPYmplY3RNYXAo
SVBDOjpDb25uZWN0aW9uKik7Ci0gICAgSVBDOjpDb25uZWN0aW9uKiBtX2Nvbm5lY3Rpb247Ci0K
LSAgICAvLyBBIG1hcCBvZiBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlciBjbGFzc2VzLCB3cmFwcGlu
ZyBvYmplY3RzIHRoYXQgd2UgZXhwb3J0IHRvIHRoZQotICAgIC8vIG90aGVyIGVuZCBvZiB0aGUg
Y29ubmVjdGlvbi4KLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBOUE9iamVjdE1lc3NhZ2VSZWNlaXZl
cio+IG1fcmVnaXN0ZXJlZE5QT2JqZWN0czsKLQotICAgIC8vIEEgc2V0IG9mIE5QT2JqZWN0UHJv
eHkgb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYXAuCi0gICAgSGFzaFNldDxOUE9iamVj
dFByb3h5Kj4gbV9ucE9iamVjdFByb3hpZXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jZW5kaWYgLy8gTlBS
ZW1vdGVPYmplY3RNYXBfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lu
cy9OUFZhcmlhbnREYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTlBWYXJp
YW50RGF0YS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkYjkyYmRjOTQwNjdh
MTJmZDY4NTJhNjE3OTZkMWVhYWEwMTA0OTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OUFZhcmlhbnRE
YXRhLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5QVmFyaWFudERhdGEuaCIKLQotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiRGVjb2Rlci5oIgotI2luY2x1ZGUg
IkVuY29kZXIuaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLU5QVmFyaWFudERhdGE6Ok5QVmFyaWFudERhdGEoKQotICAgIDogbV90
eXBlKE5QVmFyaWFudERhdGE6OlZvaWQpCi0gICAgLCBtX2Jvb2xWYWx1ZShmYWxzZSkKLSAgICAs
IG1faW50MzJWYWx1ZSgwKQotICAgICwgbV9kb3VibGVWYWx1ZSgwKQotICAgICwgbV9sb2NhbE5Q
T2JqZWN0SURWYWx1ZSgwKQotICAgICwgbV9yZW1vdGVOUE9iamVjdElEVmFsdWUoMCkKLXsKLX0K
LQotTlBWYXJpYW50RGF0YSBOUFZhcmlhbnREYXRhOjptYWtlVm9pZCgpCi17Ci0gICAgcmV0dXJu
IE5QVmFyaWFudERhdGEoKTsKLX0KLQotTlBWYXJpYW50RGF0YSBOUFZhcmlhbnREYXRhOjptYWtl
TnVsbCgpCi17Ci0gICAgTlBWYXJpYW50RGF0YSBucFZhcmlhbnREYXRhOwotICAgIAotICAgIG5w
VmFyaWFudERhdGEubV90eXBlID0gTlBWYXJpYW50RGF0YTo6TnVsbDsKLSAgICAKLSAgICByZXR1
cm4gbnBWYXJpYW50RGF0YTsKLX0KLSAgICAKLU5QVmFyaWFudERhdGEgTlBWYXJpYW50RGF0YTo6
bWFrZUJvb2woYm9vbCB2YWx1ZSkKLXsKLSAgICBOUFZhcmlhbnREYXRhIG5wVmFyaWFudERhdGE7
Ci0KLSAgICBucFZhcmlhbnREYXRhLm1fdHlwZSA9IE5QVmFyaWFudERhdGE6OkJvb2w7Ci0gICAg
bnBWYXJpYW50RGF0YS5tX2Jvb2xWYWx1ZSA9IHZhbHVlOwotCi0gICAgcmV0dXJuIG5wVmFyaWFu
dERhdGE7Ci19Ci0KLU5QVmFyaWFudERhdGEgTlBWYXJpYW50RGF0YTo6bWFrZUludDMyKGludDMy
X3QgdmFsdWUpCi17Ci0gICAgTlBWYXJpYW50RGF0YSBucFZhcmlhbnREYXRhOwotCi0gICAgbnBW
YXJpYW50RGF0YS5tX3R5cGUgPSBOUFZhcmlhbnREYXRhOjpJbnQzMjsKLSAgICBucFZhcmlhbnRE
YXRhLm1faW50MzJWYWx1ZSA9IHZhbHVlOwotCi0gICAgcmV0dXJuIG5wVmFyaWFudERhdGE7Ci19
ICAgIAotCi1OUFZhcmlhbnREYXRhIE5QVmFyaWFudERhdGE6Om1ha2VEb3VibGUoZG91YmxlIHZh
bHVlKQotewotICAgIE5QVmFyaWFudERhdGEgbnBWYXJpYW50RGF0YTsKLQotICAgIG5wVmFyaWFu
dERhdGEubV90eXBlID0gTlBWYXJpYW50RGF0YTo6RG91YmxlOwotICAgIG5wVmFyaWFudERhdGEu
bV9kb3VibGVWYWx1ZSA9IHZhbHVlOwotCi0gICAgcmV0dXJuIG5wVmFyaWFudERhdGE7Ci19Ci0K
LU5QVmFyaWFudERhdGEgTlBWYXJpYW50RGF0YTo6bWFrZVN0cmluZyhjb25zdCBjaGFyKiBzdHJp
bmcsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBOUFZhcmlhbnREYXRhIG5wVmFyaWFudERhdGE7
Ci0gICAgCi0gICAgbnBWYXJpYW50RGF0YS5tX3R5cGUgPSBOUFZhcmlhbnREYXRhOjpTdHJpbmc7
Ci0gICAgbnBWYXJpYW50RGF0YS5tX3N0cmluZ1ZhbHVlID0gQ1N0cmluZyhzdHJpbmcsIGxlbmd0
aCk7Ci0gICAgCi0gICAgcmV0dXJuIG5wVmFyaWFudERhdGE7Ci19Ci0KLU5QVmFyaWFudERhdGEg
TlBWYXJpYW50RGF0YTo6bWFrZUxvY2FsTlBPYmplY3RJRCh1aW50NjRfdCB2YWx1ZSkKLXsKLSAg
ICBOUFZhcmlhbnREYXRhIG5wVmFyaWFudERhdGE7Ci0KLSAgICBucFZhcmlhbnREYXRhLm1fdHlw
ZSA9IE5QVmFyaWFudERhdGE6OkxvY2FsTlBPYmplY3RJRDsKLSAgICBucFZhcmlhbnREYXRhLm1f
bG9jYWxOUE9iamVjdElEVmFsdWUgPSB2YWx1ZTsKLQotICAgIHJldHVybiBucFZhcmlhbnREYXRh
OwotfQotCi1OUFZhcmlhbnREYXRhIE5QVmFyaWFudERhdGE6Om1ha2VSZW1vdGVOUE9iamVjdElE
KHVpbnQ2NF90IHZhbHVlKQotewotICAgIE5QVmFyaWFudERhdGEgbnBWYXJpYW50RGF0YTsKLQot
ICAgIG5wVmFyaWFudERhdGEubV90eXBlID0gTlBWYXJpYW50RGF0YTo6UmVtb3RlTlBPYmplY3RJ
RDsKLSAgICBucFZhcmlhbnREYXRhLm1fcmVtb3RlTlBPYmplY3RJRFZhbHVlID0gdmFsdWU7Ci0K
LSAgICByZXR1cm4gbnBWYXJpYW50RGF0YTsKLX0KLQotdm9pZCBOUFZhcmlhbnREYXRhOjplbmNv
ZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV90eXBl
OwotCi0gICAgc3dpdGNoICh0eXBlKCkpIHsKLSAgICBjYXNlIE5QVmFyaWFudERhdGE6OlZvaWQ6
Ci0gICAgY2FzZSBOUFZhcmlhbnREYXRhOjpOdWxsOgotICAgICAgICBicmVhazsKLSAgICBjYXNl
IE5QVmFyaWFudERhdGE6OkJvb2w6Ci0gICAgICAgIGVuY29kZXIgPDwgYm9vbFZhbHVlKCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlBWYXJpYW50RGF0YTo6SW50MzI6Ci0gICAgICAgIGVu
Y29kZXIgPDwgaW50MzJWYWx1ZSgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5QVmFyaWFu
dERhdGE6OkRvdWJsZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3VibGVWYWx1ZSgpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIE5QVmFyaWFudERhdGE6OlN0cmluZzoKLSAgICAgICAgZW5jb2Rl
ciA8PCBzdHJpbmdWYWx1ZSgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5QVmFyaWFudERh
dGE6OkxvY2FsTlBPYmplY3RJRDoKLSAgICAgICAgZW5jb2RlciA8PCBsb2NhbE5QT2JqZWN0SURW
YWx1ZSgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5QVmFyaWFudERhdGE6OlJlbW90ZU5Q
T2JqZWN0SUQ6Ci0gICAgICAgIGVuY29kZXIgPDwgcmVtb3RlTlBPYmplY3RJRFZhbHVlKCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RkOjpvcHRpb25hbDxOUFZhcmlhbnREYXRhPiBO
UFZhcmlhbnREYXRhOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE5QVmFy
aWFudERhdGEgcmVzdWx0OwotICAgIHVpbnQzMl90IHR5cGU7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZSh0eXBlKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIC8vIFdlIHNw
ZWNpYWwtY2FzZSBMb2NhbE5QT2JqZWN0SUQgYW5kIFJlbW90ZU5QT2JqZWN0SUQgaGVyZSBzbyBh
IExvY2FsTlBPYmplY3RJRCBpcwotICAgIC8vIGRlY29kZWQgYXMgYSBSZW1vdGVOUE9iamVjdElE
IGFuZCB2aWNlIHZlcnNhLgotICAgIC8vIFRoaXMgaXMgZG9uZSBiZWNhdXNlIHRoZSB0eXBlIGlz
IGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIHRoZSBvdGhlciBjb25uZWN0aW9uLCBhbmQKLSAgICAv
LyB0aHVzIHdlIGhhdmUgdG8gYWRqdXN0IGl0IHRvIG1hdGNoIG91ciBvd24gcGVyc3BlY3RpdmUu
Ci0gICAgaWYgKHR5cGUgPT0gTlBWYXJpYW50RGF0YTo6TG9jYWxOUE9iamVjdElEKQotICAgICAg
ICB0eXBlID0gTlBWYXJpYW50RGF0YTo6UmVtb3RlTlBPYmplY3RJRDsKLSAgICBlbHNlIGlmICh0
eXBlID09IE5QVmFyaWFudERhdGE6OlJlbW90ZU5QT2JqZWN0SUQpCi0gICAgICAgIHR5cGUgPSBO
UFZhcmlhbnREYXRhOjpMb2NhbE5QT2JqZWN0SUQ7Ci0KLSAgICByZXN1bHQubV90eXBlID0gdHlw
ZTsKLQotICAgIHN3aXRjaCAocmVzdWx0Lm1fdHlwZSkgewotICAgIGNhc2UgTlBWYXJpYW50RGF0
YTo6Vm9pZDoKLSAgICBjYXNlIE5QVmFyaWFudERhdGE6Ok51bGw6Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgY2FzZSBOUFZhcmlhbnREYXRhOjpCb29sOgotICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5tX2Jvb2xWYWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIGNhc2UgTlBWYXJpYW50RGF0YTo6
SW50MzI6Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1faW50MzJWYWx1ZSkp
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIGNhc2UgTlBWYXJpYW50RGF0YTo6RG91YmxlOgotICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHJlc3VsdC5tX2RvdWJsZVZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgY2FzZSBOUFZhcmlhbnREYXRhOjpT
dHJpbmc6Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1fc3RyaW5nVmFsdWUp
KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICBjYXNlIE5QVmFyaWFudERhdGE6OkxvY2FsTlBPYmplY3RJRDoKLSAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQubV9sb2NhbE5QT2JqZWN0SURWYWx1ZSkpCi0gICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIGNh
c2UgTlBWYXJpYW50RGF0YTo6UmVtb3RlTlBPYmplY3RJRDoKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQubV9yZW1vdGVOUE9iamVjdElEVmFsdWUpKQotICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
IC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvUGx1Z2lucy9OUFZhcmlhbnREYXRhLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Q
bHVnaW5zL05QVmFyaWFudERhdGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU4
ZTJkNTA0YmFkOWI3NDZkNjM3NDI1NzkwNWNjZTM4ZmI3M2JmYy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5z
L05QVmFyaWFudERhdGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElQQyB7Ci1jbGFzcyBE
ZWNvZGVyOwotY2xhc3MgRW5jb2RlcjsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNz
IE5QVmFyaWFudERhdGEgewotcHVibGljOgotICAgIGVudW0gVHlwZSB7Ci0gICAgICAgIFZvaWQs
Ci0gICAgICAgIE51bGwsCi0gICAgICAgIEJvb2wsCi0gICAgICAgIEludDMyLAotICAgICAgICBE
b3VibGUsCi0gICAgICAgIFN0cmluZywKLSAgICAgICAgTG9jYWxOUE9iamVjdElELAotICAgICAg
ICBSZW1vdGVOUE9iamVjdElELAotICAgIH07Ci0gICAgTlBWYXJpYW50RGF0YSgpOwotCi0gICAg
c3RhdGljIE5QVmFyaWFudERhdGEgbWFrZVZvaWQoKTsKLSAgICBzdGF0aWMgTlBWYXJpYW50RGF0
YSBtYWtlTnVsbCgpOwotICAgIHN0YXRpYyBOUFZhcmlhbnREYXRhIG1ha2VCb29sKGJvb2wgdmFs
dWUpOwotICAgIHN0YXRpYyBOUFZhcmlhbnREYXRhIG1ha2VJbnQzMihpbnQzMl90IHZhbHVlKTsK
LSAgICBzdGF0aWMgTlBWYXJpYW50RGF0YSBtYWtlRG91YmxlKGRvdWJsZSB2YWx1ZSk7Ci0gICAg
c3RhdGljIE5QVmFyaWFudERhdGEgbWFrZVN0cmluZyhjb25zdCBjaGFyKiBzdHJpbmcsIHVuc2ln
bmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIE5QVmFyaWFudERhdGEgbWFrZUxvY2FsTlBPYmplY3RJ
RCh1aW50NjRfdCB2YWx1ZSk7Ci0gICAgc3RhdGljIE5QVmFyaWFudERhdGEgbWFrZVJlbW90ZU5Q
T2JqZWN0SUQodWludDY0X3QgdmFsdWUpOwotCi0gICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8VHlwZT4obV90eXBlKTsgfQotCi0gICAgYm9vbCBib29sVmFsdWUoKSBj
b25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKHR5cGUoKSA9PSBOUFZhcmlhbnREYXRhOjpCb29s
KTsKLSAgICAgICAgcmV0dXJuIG1fYm9vbFZhbHVlOwotICAgIH0KLQotICAgIGludDMyX3QgaW50
MzJWYWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQodHlwZSgpID09IE5QVmFyaWFu
dERhdGE6OkludDMyKTsKLSAgICAgICAgcmV0dXJuIG1faW50MzJWYWx1ZTsKLSAgICB9Ci0KLSAg
ICBkb3VibGUgZG91YmxlVmFsdWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKHR5cGUo
KSA9PSBOUFZhcmlhbnREYXRhOjpEb3VibGUpOwotICAgICAgICByZXR1cm4gbV9kb3VibGVWYWx1
ZTsKLSAgICB9Ci0KLSAgICBjb25zdCBDU3RyaW5nJiBzdHJpbmdWYWx1ZSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICBBU1NFUlQodHlwZSgpID09IE5QVmFyaWFudERhdGE6OlN0cmluZyk7Ci0gICAg
ICAgIHJldHVybiBtX3N0cmluZ1ZhbHVlOwotICAgIH0KLQotICAgIHVpbnQ2NF90IGxvY2FsTlBP
YmplY3RJRFZhbHVlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh0eXBlKCkgPT0gTlBW
YXJpYW50RGF0YTo6TG9jYWxOUE9iamVjdElEKTsKLSAgICAgICAgcmV0dXJuIG1fbG9jYWxOUE9i
amVjdElEVmFsdWU7Ci0gICAgfQotCi0gICAgdWludDY0X3QgcmVtb3RlTlBPYmplY3RJRFZhbHVl
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh0eXBlKCkgPT0gTlBWYXJpYW50RGF0YTo6
UmVtb3RlTlBPYmplY3RJRCk7Ci0gICAgICAgIHJldHVybiBtX3JlbW90ZU5QT2JqZWN0SURWYWx1
ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsKLSAgICBz
dGF0aWMgc3RkOjpvcHRpb25hbDxOUFZhcmlhbnREYXRhPiBkZWNvZGUoSVBDOjpEZWNvZGVyJik7
Ci0KLXByaXZhdGU6Ci0gICAgdWludDMyX3QgbV90eXBlOwotICAgIGJvb2wgbV9ib29sVmFsdWU7
Ci0gICAgaW50MzJfdCBtX2ludDMyVmFsdWU7Ci0gICAgZG91YmxlIG1fZG91YmxlVmFsdWU7Ci0g
ICAgQ1N0cmluZyBtX3N0cmluZ1ZhbHVlOwotICAgIHVpbnQ2NF90IG1fbG9jYWxOUE9iamVjdElE
VmFsdWU7Ci0gICAgdWludDY0X3QgbV9yZW1vdGVOUE9iamVjdElEVmFsdWU7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9OZXRz
Y2FwZVBsdWdpbk1vZHVsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL05ldHNj
YXBlL05ldHNjYXBlUGx1Z2luTW9kdWxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMjYxZDdhODk2OTMwNmE4OTI1YzRhYjM2ZTQ3OTQ3YjM5NmMxMjUyYy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Q
bHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luTW9kdWxlLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDI1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIk5ldHNjYXBlUGx1Z2luTW9kdWxlLmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLQotI2luY2x1ZGUgIk1vZHVsZS5oIgotI2luY2x1ZGUgIk5QUnVudGltZVV0aWxpdGll
cy5oIgotI2luY2x1ZGUgIk5ldHNjYXBlQnJvd3NlckZ1bmNzLmgiCi0jaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotc3RhdGljIFZlY3RvcjxOZXRzY2FwZVBsdWdpbk1vZHVsZSo+JiBpbml0
aWFsaXplZE5ldHNjYXBlUGx1Z2luTW9kdWxlcygpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFZlY3RvcjxOZXRzY2FwZVBsdWdpbk1vZHVsZSo+PiBpbml0aWFsaXplZE5ldHNjYXBlUGx1
Z2luTW9kdWxlczsKLSAgICByZXR1cm4gaW5pdGlhbGl6ZWROZXRzY2FwZVBsdWdpbk1vZHVsZXM7
Ci19Ci0KLU5ldHNjYXBlUGx1Z2luTW9kdWxlOjpOZXRzY2FwZVBsdWdpbk1vZHVsZShjb25zdCBT
dHJpbmcmIHBsdWdpblBhdGgpCi0gICAgOiBtX3BsdWdpblBhdGgocGx1Z2luUGF0aCkKLSAgICAs
IG1faXNJbml0aWFsaXplZChmYWxzZSkKLSAgICAsIG1fbG9hZENvdW50KDApCi0gICAgLCBtX3No
dXRkb3duUHJvY1B0cigwKQotICAgICwgbV9wbHVnaW5GdW5jcygpCi17Ci19Ci0KLU5ldHNjYXBl
UGx1Z2luTW9kdWxlOjp+TmV0c2NhcGVQbHVnaW5Nb2R1bGUoKQotewotICAgIEFTU0VSVChpbml0
aWFsaXplZE5ldHNjYXBlUGx1Z2luTW9kdWxlcygpLmZpbmQodGhpcykgPT0gbm90Rm91bmQpOwot
fQotCi1WZWN0b3I8U3RyaW5nPiBOZXRzY2FwZVBsdWdpbk1vZHVsZTo6c2l0ZXNXaXRoRGF0YSgp
Ci17Ci0gICAgVmVjdG9yPFN0cmluZz4gc2l0ZXM7Ci0KLSAgICBpbmNyZW1lbnRMb2FkQ291bnQo
KTsKLSAgICB0cnlHZXRTaXRlc1dpdGhEYXRhKHNpdGVzKTsKLSAgICBkZWNyZW1lbnRMb2FkQ291
bnQoKTsKLQotICAgIHJldHVybiBzaXRlczsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbk1vZHVs
ZTo6Y2xlYXJTaXRlRGF0YShjb25zdCBTdHJpbmcmIHNpdGUsIHVpbnQ2NF90IGZsYWdzLCB1aW50
NjRfdCBtYXhBZ2UpCi17Ci0gICAgaW5jcmVtZW50TG9hZENvdW50KCk7Ci0gICAgYm9vbCByZXN1
bHQgPSB0cnlDbGVhclNpdGVEYXRhKHNpdGUsIGZsYWdzLCBtYXhBZ2UpOwotICAgIGRlY3JlbWVu
dExvYWRDb3VudCgpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBOZXRzY2FwZVBs
dWdpbk1vZHVsZTo6dHJ5R2V0U2l0ZXNXaXRoRGF0YShWZWN0b3I8U3RyaW5nPiYgc2l0ZXMpCi17
Ci0gICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IC8vIENoZWNrIGlmIHRoZSBwbHVnLWluIHN1cHBvcnRzIE5QUF9HZXRTaXRlc1dpdGhEYXRhLgot
ICAgIGlmICghbV9wbHVnaW5GdW5jcy5nZXRzaXRlc3dpdGhkYXRhKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBjaGFyKiogc2l0ZUFycmF5ID0gbV9wbHVnaW5GdW5jcy5nZXRzaXRlc3dp
dGhkYXRhKCk7Ci0KLSAgICAvLyBUaGVyZSB3ZXJlIG5vIHNpdGVzIHdpdGggZGF0YS4KLSAgICBp
ZiAoIXNpdGVBcnJheSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBmb3IgKGludCBpID0g
MDsgc2l0ZUFycmF5W2ldOyArK2kpIHsKLSAgICAgICAgY2hhciogc2l0ZSA9IHNpdGVBcnJheVtp
XTsKLQotICAgICAgICBTdHJpbmcgc2l0ZVN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoc2l0ZSk7
Ci0gICAgICAgIGlmICghc2l0ZVN0cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgIHNpdGVzLmFw
cGVuZChzaXRlU3RyaW5nKTsKLQotICAgICAgICBucG5NZW1GcmVlKHNpdGUpOwotICAgIH0KLQot
ICAgIG5wbk1lbUZyZWUoc2l0ZUFycmF5KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBO
ZXRzY2FwZVBsdWdpbk1vZHVsZTo6dHJ5Q2xlYXJTaXRlRGF0YShjb25zdCBTdHJpbmcmIHNpdGUs
IHVpbnQ2NF90IGZsYWdzLCB1aW50NjRfdCBtYXhBZ2UpCi17Ci0gICAgaWYgKCFtX2lzSW5pdGlh
bGl6ZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIENoZWNrIGlmIHRoZSBwbHVn
LWluIHN1cHBvcnRzIE5QUF9DbGVhclNpdGVEYXRhLgotICAgIGlmICghbV9wbHVnaW5GdW5jcy5j
bGVhcnNpdGVkYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU3RyaW5nIHNpdGVT
dHJpbmc7Ci0gICAgaWYgKCFzaXRlLmlzTnVsbCgpKQotICAgICAgICBzaXRlU3RyaW5nID0gc2l0
ZS51dGY4KCk7Ci0KLSAgICByZXR1cm4gbV9wbHVnaW5GdW5jcy5jbGVhcnNpdGVkYXRhKHNpdGVT
dHJpbmcuZGF0YSgpLCBmbGFncywgbWF4QWdlKSA9PSBOUEVSUl9OT19FUlJPUjsKLX0KLQotdm9p
ZCBOZXRzY2FwZVBsdWdpbk1vZHVsZTo6c2h1dGRvd24oKQotewotICAgIEFTU0VSVChtX2lzSW5p
dGlhbGl6ZWQpOwotCi0gICAgbV9zaHV0ZG93blByb2NQdHIoKTsKLQotICAgIG1faXNJbml0aWFs
aXplZCA9IGZhbHNlOwotCi0gICAgc2l6ZV90IHBsdWdpbk1vZHVsZUluZGV4ID0gaW5pdGlhbGl6
ZWROZXRzY2FwZVBsdWdpbk1vZHVsZXMoKS5maW5kKHRoaXMpOwotICAgIEFTU0VSVChwbHVnaW5N
b2R1bGVJbmRleCAhPSBub3RGb3VuZCk7Ci0KLSAgICBpbml0aWFsaXplZE5ldHNjYXBlUGx1Z2lu
TW9kdWxlcygpLnJlbW92ZShwbHVnaW5Nb2R1bGVJbmRleCk7Ci19Ci0KLVJlZlB0cjxOZXRzY2Fw
ZVBsdWdpbk1vZHVsZT4gTmV0c2NhcGVQbHVnaW5Nb2R1bGU6OmdldE9yQ3JlYXRlKGNvbnN0IFN0
cmluZyYgcGx1Z2luUGF0aCkKLXsKLSAgICAvLyBGaXJzdCwgc2VlIGlmIHdlIGFscmVhZHkgaGF2
ZSBhIG1vZHVsZSB3aXRoIHRoaXMgcGx1Zy1pbiBwYXRoLgotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgaW5pdGlhbGl6ZWROZXRzY2FwZVBsdWdpbk1vZHVsZXMoKS5zaXplKCk7ICsraSkgewot
ICAgICAgICBOZXRzY2FwZVBsdWdpbk1vZHVsZSogcGx1Z2luTW9kdWxlID0gaW5pdGlhbGl6ZWRO
ZXRzY2FwZVBsdWdpbk1vZHVsZXMoKVtpXTsKLQotICAgICAgICBpZiAocGx1Z2luTW9kdWxlLT5t
X3BsdWdpblBhdGggPT0gcGx1Z2luUGF0aCkKLSAgICAgICAgICAgIHJldHVybiBwbHVnaW5Nb2R1
bGU7Ci0gICAgfQotCi0gICAgYXV0byBwbHVnaW5Nb2R1bGUoYWRvcHRSZWYoKm5ldyBOZXRzY2Fw
ZVBsdWdpbk1vZHVsZShwbHVnaW5QYXRoKSkpOwotICAgIAotICAgIC8vIFRyeSB0byBsb2FkIGFu
ZCBpbml0aWFsaXplIHRoZSBwbHVnLWluIG1vZHVsZS4KLSAgICBpZiAoIXBsdWdpbk1vZHVsZS0+
bG9hZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICByZXR1cm4gcGx1Z2lu
TW9kdWxlOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luTW9kdWxlOjppbmNyZW1lbnRMb2FkQ291
bnQoKQotewotICAgIGlmICghbV9sb2FkQ291bnQpIHsKLSAgICAgICAgLy8gTG9hZCB0aGUgcGx1
Zy1pbiBtb2R1bGUgaWYgbmVjZXNzYXJ5LgotICAgICAgICBsb2FkKCk7Ci0gICAgfQotICAgIAot
ICAgIG1fbG9hZENvdW50Kys7Ci19Ci0gICAgCi12b2lkIE5ldHNjYXBlUGx1Z2luTW9kdWxlOjpk
ZWNyZW1lbnRMb2FkQ291bnQoKQotewotICAgIEFTU0VSVChtX2xvYWRDb3VudCA+IDApOwotICAg
IG1fbG9hZENvdW50LS07Ci0gICAgCi0gICAgaWYgKCFtX2xvYWRDb3VudCAmJiBtX2lzSW5pdGlh
bGl6ZWQpIHsKLSAgICAgICAgc2h1dGRvd24oKTsKLSAgICAgICAgdW5sb2FkKCk7Ci0gICAgfQot
fQotCi1ib29sIE5ldHNjYXBlUGx1Z2luTW9kdWxlOjpsb2FkKCkKLXsKLSAgICBpZiAobV9pc0lu
aXRpYWxpemVkKSB7Ci0gICAgICAgIEFTU0VSVChpbml0aWFsaXplZE5ldHNjYXBlUGx1Z2luTW9k
dWxlcygpLmZpbmQodGhpcykgIT0gbm90Rm91bmQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAoIXRyeUxvYWQoKSkgewotICAgICAgICB1bmxvYWQoKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOwot
Ci0gICAgQVNTRVJUKGluaXRpYWxpemVkTmV0c2NhcGVQbHVnaW5Nb2R1bGVzKCkuZmluZCh0aGlz
KSA9PSBub3RGb3VuZCk7Ci0gICAgaW5pdGlhbGl6ZWROZXRzY2FwZVBsdWdpbk1vZHVsZXMoKS5h
cHBlbmQodGhpcyk7Ci0KLSAgICBkZXRlcm1pbmVRdWlya3MoKTsKLQotICAgIHJldHVybiB0cnVl
OwotfQotCi0jaWYgUExBVEZPUk0oR1RLKQotc3RhdGljIGJvb2wgbW9kdWxlTWl4ZXNHdGtTeW1i
b2xzKE1vZHVsZSogbW9kdWxlKQotewotICAgIHJldHVybiBtb2R1bGUtPmZ1bmN0aW9uUG9pbnRl
cjxncG9pbnRlcj4oImd0a19vYmplY3RfZ2V0X3R5cGUiKTsKLX0KLSNlbmRpZgotCi1ib29sIE5l
dHNjYXBlUGx1Z2luTW9kdWxlOjp0cnlMb2FkKCkKLXsKLSAgICBtX21vZHVsZSA9IG1ha2VVbmlx
dWU8TW9kdWxlPihtX3BsdWdpblBhdGgpOwotICAgIGlmICghbV9tb2R1bGUtPmxvYWQoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgUExBVEZPUk0oR1RLKQotICAgIGlmIChtb2R1bGVN
aXhlc0d0a1N5bWJvbHMobV9tb2R1bGUuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0j
ZW5kaWYKLQotICAgIE5QX0luaXRpYWxpemVGdW5jUHRyIGluaXRpYWxpemVGdW5jUHRyID0gbV9t
b2R1bGUtPmZ1bmN0aW9uUG9pbnRlcjxOUF9Jbml0aWFsaXplRnVuY1B0cj4oIk5QX0luaXRpYWxp
emUiKTsKLSAgICBpZiAoIWluaXRpYWxpemVGdW5jUHRyKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSNpZiAhUExVR0lOX0FSQ0hJVEVDVFVSRShVTklYKQotICAgIE5QX0dldEVudHJ5UG9pbnRz
RnVuY1B0ciBnZXRFbnRyeVBvaW50c0Z1bmNQdHIgPSBtX21vZHVsZS0+ZnVuY3Rpb25Qb2ludGVy
PE5QX0dldEVudHJ5UG9pbnRzRnVuY1B0cj4oIk5QX0dldEVudHJ5UG9pbnRzIik7Ci0gICAgaWYg
KCFnZXRFbnRyeVBvaW50c0Z1bmNQdHIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgot
Ci0gICAgbV9zaHV0ZG93blByb2NQdHIgPSBtX21vZHVsZS0+ZnVuY3Rpb25Qb2ludGVyPE5QUF9T
aHV0ZG93blByb2NQdHI+KCJOUF9TaHV0ZG93biIpOwotICAgIGlmICghbV9zaHV0ZG93blByb2NQ
dHIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fcGx1Z2luRnVuY3Muc2l6ZSA9IHNp
emVvZihOUFBsdWdpbkZ1bmNzKTsKLSAgICBtX3BsdWdpbkZ1bmNzLnZlcnNpb24gPSAoTlBfVkVS
U0lPTl9NQUpPUiA8PCA4KSB8IE5QX1ZFUlNJT05fTUlOT1I7Ci0KLSAgICAvLyBPbiBNYWMsIE5Q
X0luaXRpYWxpemUgbXVzdCBiZSBjYWxsZWQgZmlyc3QsIHRoZW4gTlBfR2V0RW50cnlQb2ludHMu
IE9uIFdpbmRvd3MsIHRoZSBvcmRlciBpcwotICAgIC8vIHJldmVyc2VkLiBGYWlsaW5nIHRvIGZv
bGxvdyB0aGlzIG9yZGVyIHJlc3VsdHMgaW4gY3Jhc2hlcyAoZS5nLiwgaW4gU2lsdmVybGlnaHQg
b24gTWFjIGFuZAotICAgIC8vIGluIEZsYXNoIGFuZCBRdWlja1RpbWUgb24gV2luZG93cykuCi0j
aWYgUExVR0lOX0FSQ0hJVEVDVFVSRShNQUMpCi0gICAgcmV0dXJuIGluaXRpYWxpemVGdW5jUHRy
KG5ldHNjYXBlQnJvd3NlckZ1bmNzKCkpID09IE5QRVJSX05PX0VSUk9SICYmIGdldEVudHJ5UG9p
bnRzRnVuY1B0cigmbV9wbHVnaW5GdW5jcykgPT0gTlBFUlJfTk9fRVJST1I7Ci0jZWxpZiBQTFVH
SU5fQVJDSElURUNUVVJFKFVOSVgpCi0gICAgaWYgKGluaXRpYWxpemVGdW5jUHRyKG5ldHNjYXBl
QnJvd3NlckZ1bmNzKCksICZtX3BsdWdpbkZ1bmNzKSAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBO
ZXRzY2FwZVBsdWdpbk1vZHVsZTo6dW5sb2FkKCkKLXsKLSAgICBBU1NFUlQoIW1faXNJbml0aWFs
aXplZCk7Ci0KLSAgICBtX21vZHVsZSA9IG51bGxwdHI7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luTW9k
dWxlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1
Z2luTW9kdWxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MmFkYTExMzc4NDQz
YTQ1NjY0MGQ4Yzk1YTQ0ODQ5YmMwNGY1MGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9O
ZXRzY2FwZVBsdWdpbk1vZHVsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIE5ldHNjYXBlUGx1Z2luTW9kdWxlX2gKLSNkZWZpbmUgTmV0c2Nh
cGVQbHVnaW5Nb2R1bGVfaAotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNp
bmNsdWRlICJNb2R1bGUuaCIKLSNpbmNsdWRlICJQbHVnaW5Nb2R1bGVJbmZvLmgiCi0jaW5jbHVk
ZSAiUGx1Z2luUXVpcmtzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9ucHJ1bnRpbWVfaW50ZXJuYWwu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1zdHJ1Y3QgTWltZUNsYXNzSW5mbzsKLX0K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0cnVjdCBSYXdQbHVnaW5NZXRhRGF0YTsKLQotY2xh
c3MgTmV0c2NhcGVQbHVnaW5Nb2R1bGUgOiBwdWJsaWMgUmVmQ291bnRlZDxOZXRzY2FwZVBsdWdp
bk1vZHVsZT4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8TmV0c2NhcGVQbHVnaW5Nb2R1
bGU+IGdldE9yQ3JlYXRlKGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCk7Ci0gICAgfk5ldHNjYXBl
UGx1Z2luTW9kdWxlKCk7Ci0KLSAgICBjb25zdCBOUFBsdWdpbkZ1bmNzJiBwbHVnaW5GdW5jcygp
IGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luRnVuY3M7IH0KLSAKLSAgICB2b2lkIGluY3JlbWVudExv
YWRDb3VudCgpOwotICAgIHZvaWQgZGVjcmVtZW50TG9hZENvdW50KCk7Ci0KLSAgICBzdGF0aWMg
Ym9vbCBnZXRQbHVnaW5JbmZvKGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCwgUGx1Z2luTW9kdWxl
SW5mbyYpOwotCi0gICAgY29uc3QgUGx1Z2luUXVpcmtzJiBwbHVnaW5RdWlya3MoKSBjb25zdCB7
IHJldHVybiBtX3BsdWdpblF1aXJrczsgfQotCi0gICAgLy8gUmV0dXJuIGEgbGlzdCBvZiBkb21h
aW5zIGZvciB3aGljaCB0aGUgcGx1Zy1pbiBoYXMgZGF0YSBzdG9yZWQuCi0gICAgVmVjdG9yPFN0
cmluZz4gc2l0ZXNXaXRoRGF0YSgpOwotCi0gICAgLy8gUmVxdWVzdCB0aGF0IHRoZSBwbHVnLWlu
IGNsZWFyIHRoZSBzaXRlIGRhdGEuCi0gICAgYm9vbCBjbGVhclNpdGVEYXRhKGNvbnN0IFN0cmlu
ZyYgc2l0ZSwgdWludDY0X3QgZmxhZ3MsIHVpbnQ2NF90IG1heEFnZSk7Ci0KLSAgICBNb2R1bGUq
IG1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9Ci0KLSNpZiBQTFVHSU5f
QVJDSElURUNUVVJFKFVOSVgpCi0gICAgc3RhdGljIGJvb2wgc2NhblBsdWdpbihjb25zdCBTdHJp
bmcmIHBsdWdpblBhdGgpOwotICAgIHN0YXRpYyB2b2lkIHBhcnNlTUlNRURlc2NyaXB0aW9uKGNv
bnN0IFN0cmluZyYgbWltZURlc2NyaXB0aW9uLCBWZWN0b3I8V2ViQ29yZTo6TWltZUNsYXNzSW5m
bz4mIHJlc3VsdCk7Ci0gICAgc3RhdGljIFN0cmluZyBidWlsZE1JTUVEZXNjcmlwdGlvbihjb25z
dCBWZWN0b3I8V2ViQ29yZTo6TWltZUNsYXNzSW5mbz4mKTsKLSNlbmRpZgotCi1wcml2YXRlOgot
ICAgIGV4cGxpY2l0IE5ldHNjYXBlUGx1Z2luTW9kdWxlKGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0
aCk7Ci0KLSAgICB2b2lkIGRldGVybWluZVF1aXJrcygpOwotCi0jaWYgUExVR0lOX0FSQ0hJVEVD
VFVSRShVTklYKQotICAgIGJvb2wgZ2V0UGx1Z2luSW5mb0ZvckxvYWRlZFBsdWdpbihSYXdQbHVn
aW5NZXRhRGF0YSYpOwotI2VuZGlmCi0KLSAgICBib29sIHRyeUdldFNpdGVzV2l0aERhdGEoVmVj
dG9yPFN0cmluZz4mKTsKLSAgICBib29sIHRyeUNsZWFyU2l0ZURhdGEoY29uc3QgU3RyaW5nJiBz
aXRlLCB1aW50NjRfdCBmbGFncywgdWludDY0X3QgbWF4QWdlKTsKLQotICAgIGJvb2wgdHJ5TG9h
ZCgpOwotICAgIGJvb2wgbG9hZCgpOwotICAgIHZvaWQgdW5sb2FkKCk7Ci0KLSAgICB2b2lkIHNo
dXRkb3duKCk7Ci0KLSAgICBTdHJpbmcgbV9wbHVnaW5QYXRoOwotICAgIGJvb2wgbV9pc0luaXRp
YWxpemVkOwotICAgIHVuc2lnbmVkIG1fbG9hZENvdW50OwotCi0gICAgUGx1Z2luUXVpcmtzIG1f
cGx1Z2luUXVpcmtzOwotCi0gICAgTlBQX1NodXRkb3duUHJvY1B0ciBtX3NodXRkb3duUHJvY1B0
cjsKLSAgICBOUFBsdWdpbkZ1bmNzIG1fcGx1Z2luRnVuY3M7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8TW9kdWxlPiBtX21vZHVsZTsKLX07Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQot
I2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jZW5kaWYgLy8gTmV0c2Nh
cGVQbHVnaW5Nb2R1bGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lu
cy9OZXRzY2FwZS9QbHVnaW5JbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Q
bHVnaW5zL05ldHNjYXBlL1BsdWdpbkluZm9ybWF0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNjY3NzM0YjRhM2E1OTkzNWJmMDhkOTQ1MmFiYmEwM2QwYzY5Nzk5MC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL1BsdWdpbkluZm9ybWF0aW9uLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDE3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlBsdWdpbkluZm9ybWF0aW9uLmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLQotI2luY2x1ZGUgIkFQSU51bWJlci5oIgotI2luY2x1ZGUgIkFQSVN0cmluZy5o
IgotI2luY2x1ZGUgIkFQSVVSTC5oIgotI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgotI2lu
Y2x1ZGUgIlBsdWdpbk1vZHVsZUluZm8uaCIKLSNpbmNsdWRlICJXS0FQSUNhc3QuaCIKLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVN0cmlu
ZyBwbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZUlkZW50aWZpZXJLZXkoKQotewotICAgIHJldHVybiAi
UGx1Z2luSW5mb3JtYXRpb25CdW5kbGVJZGVudGlmaWVyIl9zOwotfQotCi1TdHJpbmcgcGx1Z2lu
SW5mb3JtYXRpb25CdW5kbGVWZXJzaW9uS2V5KCkKLXsKLSAgICByZXR1cm4gIlBsdWdpbkluZm9y
bWF0aW9uQnVuZGxlVmVyc2lvbiJfczsKLX0KLQotU3RyaW5nIHBsdWdpbkluZm9ybWF0aW9uQnVu
ZGxlU2hvcnRWZXJzaW9uS2V5KCkKLXsKLSAgICByZXR1cm4gIlBsdWdpbkluZm9ybWF0aW9uQnVu
ZGxlU2hvcnRWZXJzaW9uIl9zOwotfQotCi1TdHJpbmcgcGx1Z2luSW5mb3JtYXRpb25QYXRoS2V5
KCkKLXsKLSAgICByZXR1cm4gIlBsdWdpbkluZm9ybWF0aW9uUGF0aCJfczsKLX0KLQotU3RyaW5n
IHBsdWdpbkluZm9ybWF0aW9uRGlzcGxheU5hbWVLZXkoKQotewotICAgIHJldHVybiAiUGx1Z2lu
SW5mb3JtYXRpb25EaXNwbGF5TmFtZSJfczsKLX0KLQotU3RyaW5nIHBsdWdpbkluZm9ybWF0aW9u
RGVmYXVsdExvYWRQb2xpY3lLZXkoKQotewotICAgIHJldHVybiAiUGx1Z2luSW5mb3JtYXRpb25E
ZWZhdWx0TG9hZFBvbGljeSJfczsKLX0KLQotU3RyaW5nIHBsdWdpbkluZm9ybWF0aW9uVXBkYXRl
UGFzdExhc3RCbG9ja2VkVmVyc2lvbklzS25vd25BdmFpbGFibGVLZXkoKQotewotICAgIHJldHVy
biAiUGx1Z2luSW5mb3JtYXRpb25VcGRhdGVQYXN0TGFzdEJsb2NrZWRWZXJzaW9uSXNLbm93bkF2
YWlsYWJsZSJfczsKLX0KLQotU3RyaW5nIHBsdWdpbkluZm9ybWF0aW9uSGFzU2FuZGJveFByb2Zp
bGVLZXkoKQotewotICAgIHJldHVybiAiUGx1Z2luSW5mb3JtYXRpb25IYXNTYW5kYm94UHJvZmls
ZSJfczsKLX0KLQotU3RyaW5nIHBsdWdpbkluZm9ybWF0aW9uRnJhbWVVUkxLZXkoKQotewotICAg
IHJldHVybiAiUGx1Z2luSW5mb3JtYXRpb25GcmFtZVVSTCJfczsKLX0KLQotU3RyaW5nIHBsdWdp
bkluZm9ybWF0aW9uTUlNRVR5cGVLZXkoKQotewotICAgIHJldHVybiAiUGx1Z2luSW5mb3JtYXRp
b25NSU1FVHlwZSJfczsKLX0KLQotU3RyaW5nIHBsdWdpbkluZm9ybWF0aW9uUGFnZVVSTEtleSgp
Ci17Ci0gICAgcmV0dXJuICJQbHVnaW5JbmZvcm1hdGlvblBhZ2VVUkwiX3M7Ci19Ci0KLVN0cmlu
ZyBwbHVnaW5JbmZvcm1hdGlvblBsdWdpbnNwYWdlQXR0cmlidXRlVVJMS2V5KCkKLXsKLSAgICBy
ZXR1cm4gIlBsdWdpbkluZm9ybWF0aW9uUGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkwiX3M7Ci19Ci0K
LVN0cmluZyBwbHVnaW5JbmZvcm1hdGlvblBsdWdpblVSTEtleSgpCi17Ci0gICAgcmV0dXJuICJQ
bHVnaW5JbmZvcm1hdGlvblBsdWdpblVSTCJfczsKLX0KLQotU3RyaW5nIHBsdWdJbkluZm9ybWF0
aW9uUmVwbGFjZW1lbnRPYnNjdXJlZEtleSgpCi17Ci0gICAgcmV0dXJuICJQbHVnSW5JbmZvcm1h
dGlvblJlcGxhY2VtZW50T2JzY3VyZWQiX3M7Ci19Ci0KLXZvaWQgZ2V0UGx1Z2luTW9kdWxlSW5m
b3JtYXRpb24oY29uc3QgUGx1Z2luTW9kdWxlSW5mbyYgcGx1Z2luLCBBUEk6OkRpY3Rpb25hcnk6
Ok1hcFR5cGUmIG1hcCkKLXsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBt
YXAuc2V0KHBsdWdpbkluZm9ybWF0aW9uUGF0aEtleSgpLCBBUEk6OlN0cmluZzo6Y3JlYXRlKHBs
dWdpbi5wYXRoKSk7Ci0gICAgbWFwLnNldChwbHVnaW5JbmZvcm1hdGlvbkRpc3BsYXlOYW1lS2V5
KCksIEFQSTo6U3RyaW5nOjpjcmVhdGUocGx1Z2luLmluZm8ubmFtZSkpOwotICAgIG1hcC5zZXQo
cGx1Z2luSW5mb3JtYXRpb25EZWZhdWx0TG9hZFBvbGljeUtleSgpLCBBUEk6OlVJbnQ2NDo6Y3Jl
YXRlKHRvV0tQbHVnaW5Mb2FkUG9saWN5KFBsdWdpbkluZm9TdG9yZTo6ZGVmYXVsdExvYWRQb2xp
Y3lGb3JQbHVnaW4ocGx1Z2luKSkpKTsKLQotICAgIGdldFBsYXRmb3JtUGx1Z2luTW9kdWxlSW5m
b3JtYXRpb24ocGx1Z2luLCBtYXApOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocGx1Z2luKTsK
LSAgICBVTlVTRURfUEFSQU0obWFwKTsKLSNlbmRpZgotfQotCi1SZWY8QVBJOjpEaWN0aW9uYXJ5
PiBjcmVhdGVQbHVnaW5JbmZvcm1hdGlvbkRpY3Rpb25hcnkoY29uc3QgUGx1Z2luTW9kdWxlSW5m
byYgcGx1Z2luKQotewotICAgIEFQSTo6RGljdGlvbmFyeTo6TWFwVHlwZSBtYXA7Ci0gICAgZ2V0
UGx1Z2luTW9kdWxlSW5mb3JtYXRpb24ocGx1Z2luLCBtYXApOwotCi0gICAgcmV0dXJuIEFQSTo6
RGljdGlvbmFyeTo6Y3JlYXRlKFdURk1vdmUobWFwKSk7Ci19Ci0KLVJlZjxBUEk6OkRpY3Rpb25h
cnk+IGNyZWF0ZVBsdWdpbkluZm9ybWF0aW9uRGljdGlvbmFyeShjb25zdCBQbHVnaW5Nb2R1bGVJ
bmZvJiBwbHVnaW4sIGNvbnN0IFN0cmluZyYgZnJhbWVVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIGNvbnN0IFN0cmluZyYgcGFnZVVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBwbHVn
aW5zcGFnZUF0dHJpYnV0ZVVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBwbHVnaW5VUkxTdHJpbmcs
IGJvb2wgcmVwbGFjZW1lbnRPYnNjdXJlZCkKLXsKLSAgICBBUEk6OkRpY3Rpb25hcnk6Ok1hcFR5
cGUgbWFwOwotICAgIGdldFBsdWdpbk1vZHVsZUluZm9ybWF0aW9uKHBsdWdpbiwgbWFwKTsKLQot
ICAgIGlmICghZnJhbWVVUkxTdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICBtYXAuc2V0KHBsdWdp
bkluZm9ybWF0aW9uRnJhbWVVUkxLZXkoKSwgQVBJOjpVUkw6OmNyZWF0ZShmcmFtZVVSTFN0cmlu
ZykpOwotICAgIGlmICghbWltZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICBtYXAuc2V0KHBsdWdp
bkluZm9ybWF0aW9uTUlNRVR5cGVLZXkoKSwgQVBJOjpTdHJpbmc6OmNyZWF0ZShtaW1lVHlwZSkp
OwotICAgIGlmICghcGFnZVVSTFN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIG1hcC5zZXQocGx1
Z2luSW5mb3JtYXRpb25QYWdlVVJMS2V5KCksIEFQSTo6VVJMOjpjcmVhdGUocGFnZVVSTFN0cmlu
ZykpOwotICAgIGlmICghcGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkxTdHJpbmcuaXNFbXB0eSgpKQot
ICAgICAgICBtYXAuc2V0KHBsdWdpbkluZm9ybWF0aW9uUGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkxL
ZXkoKSwgQVBJOjpVUkw6OmNyZWF0ZShwbHVnaW5zcGFnZUF0dHJpYnV0ZVVSTFN0cmluZykpOwot
ICAgIGlmICghcGx1Z2luVVJMU3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgbWFwLnNldChwbHVn
aW5JbmZvcm1hdGlvblBsdWdpblVSTEtleSgpLCBBUEk6OlVSTDo6Y3JlYXRlKHBsdWdpblVSTFN0
cmluZykpOwotICAgIG1hcC5zZXQocGx1Z0luSW5mb3JtYXRpb25SZXBsYWNlbWVudE9ic2N1cmVk
S2V5KCksIEFQSTo6Qm9vbGVhbjo6Y3JlYXRlKHJlcGxhY2VtZW50T2JzY3VyZWQpKTsKLQotICAg
IHJldHVybiBBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZShXVEZNb3ZlKG1hcCkpOwotfQotCi1SZWY8
QVBJOjpEaWN0aW9uYXJ5PiBjcmVhdGVQbHVnaW5JbmZvcm1hdGlvbkRpY3Rpb25hcnkoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBmcmFtZVVSTFN0cmluZywgY29uc3QgU3Ry
aW5nJiBwYWdlVVJMU3RyaW5nKQotewotICAgIEFQSTo6RGljdGlvbmFyeTo6TWFwVHlwZSBtYXA7
Ci0KLSAgICBpZiAoIWZyYW1lVVJMU3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgbWFwLnNldChw
bHVnaW5JbmZvcm1hdGlvbkZyYW1lVVJMS2V5KCksIEFQSTo6VVJMOjpjcmVhdGUoZnJhbWVVUkxT
dHJpbmcpKTsKLSAgICBpZiAoIW1pbWVUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgbWFwLnNldChw
bHVnaW5JbmZvcm1hdGlvbk1JTUVUeXBlS2V5KCksIEFQSTo6U3RyaW5nOjpjcmVhdGUobWltZVR5
cGUpKTsKLSAgICBpZiAoIXBhZ2VVUkxTdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICBtYXAuc2V0
KHBsdWdpbkluZm9ybWF0aW9uUGFnZVVSTEtleSgpLCBBUEk6OlVSTDo6Y3JlYXRlKHBhZ2VVUkxT
dHJpbmcpKTsKLQotICAgIHJldHVybiBBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZShXVEZNb3ZlKG1h
cCkpOwotfQotCi0jaWYgIVBMQVRGT1JNKENPQ09BKQotdm9pZCBnZXRQbGF0Zm9ybVBsdWdpbk1v
ZHVsZUluZm9ybWF0aW9uKGNvbnN0IFBsdWdpbk1vZHVsZUluZm8mLCBBUEk6OkRpY3Rpb25hcnk6
Ok1hcFR5cGUmKQotewotfQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL1BsdWdpbkluZm9ybWF0aW9uLmggYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL1BsdWdpbkluZm9ybWF0aW9uLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2OWU4NWEwYTRkMWMzMWI3NTA1ODkyNjAzODMwODEx
OTkxZTcyYTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9QbHVnaW5JbmZvcm1hdGlvbi5o
CisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUGx1
Z2luSW5mb3JtYXRpb25faAotI2RlZmluZSBQbHVnaW5JbmZvcm1hdGlvbl9oCi0KLSNpbmNsdWRl
ICJBUElEaWN0aW9uYXJ5LmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLXN0cnVjdCBQbHVnaW5Nb2R1bGVJbmZvOwotCi0vLyBQbHVnLWluIG1vZHVs
ZSBpbmZvcm1hdGlvbiBrZXlzCi1TdHJpbmcgcGx1Z2luSW5mb3JtYXRpb25CdW5kbGVJZGVudGlm
aWVyS2V5KCk7Ci1TdHJpbmcgcGx1Z2luSW5mb3JtYXRpb25CdW5kbGVWZXJzaW9uS2V5KCk7Ci1T
dHJpbmcgcGx1Z2luSW5mb3JtYXRpb25CdW5kbGVTaG9ydFZlcnNpb25LZXkoKTsKLVN0cmluZyBw
bHVnaW5JbmZvcm1hdGlvblBhdGhLZXkoKTsKLVN0cmluZyBwbHVnaW5JbmZvcm1hdGlvbkRpc3Bs
YXlOYW1lS2V5KCk7Ci1TdHJpbmcgcGx1Z2luSW5mb3JtYXRpb25EZWZhdWx0TG9hZFBvbGljeUtl
eSgpOwotU3RyaW5nIHBsdWdpbkluZm9ybWF0aW9uVXBkYXRlUGFzdExhc3RCbG9ja2VkVmVyc2lv
bklzS25vd25BdmFpbGFibGVLZXkoKTsKLVN0cmluZyBwbHVnaW5JbmZvcm1hdGlvbkhhc1NhbmRi
b3hQcm9maWxlS2V5KCk7Ci0KLS8vIFBsdWctaW4gbG9hZCBzcGVjaWZpYyBpbmZvcm1hdGlvbiBr
ZXlzCi1TdHJpbmcgcGx1Z2luSW5mb3JtYXRpb25GcmFtZVVSTEtleSgpOwotU3RyaW5nIHBsdWdp
bkluZm9ybWF0aW9uTUlNRVR5cGVLZXkoKTsKLVN0cmluZyBwbHVnaW5JbmZvcm1hdGlvblBhZ2VV
UkxLZXkoKTsKLVN0cmluZyBwbHVnaW5JbmZvcm1hdGlvblBsdWdpbnNwYWdlQXR0cmlidXRlVVJM
S2V5KCk7Ci1TdHJpbmcgcGx1Z2luSW5mb3JtYXRpb25QbHVnaW5VUkxLZXkoKTsKLVN0cmluZyBw
bHVnSW5JbmZvcm1hdGlvblJlcGxhY2VtZW50T2JzY3VyZWRLZXkoKTsKLQotUmVmPEFQSTo6RGlj
dGlvbmFyeT4gY3JlYXRlUGx1Z2luSW5mb3JtYXRpb25EaWN0aW9uYXJ5KGNvbnN0IFBsdWdpbk1v
ZHVsZUluZm8mKTsKLVJlZjxBUEk6OkRpY3Rpb25hcnk+IGNyZWF0ZVBsdWdpbkluZm9ybWF0aW9u
RGljdGlvbmFyeShjb25zdCBQbHVnaW5Nb2R1bGVJbmZvJiwgY29uc3QgU3RyaW5nJiBmcmFtZVVS
TFN0cmluZywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBwYWdlVVJMU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHBsdWdpbnNwYWdlQXR0cmlidXRlVVJMU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHBsdWdpblVSTFN0cmluZywgYm9vbCByZXBsYWNlbWVudE9ic2N1cmVkID0gZmFsc2Up
OwotUmVmPEFQSTo6RGljdGlvbmFyeT4gY3JlYXRlUGx1Z2luSW5mb3JtYXRpb25EaWN0aW9uYXJ5
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgZnJhbWVVUkxTdHJpbmcsIGNv
bnN0IFN0cmluZyYgcGFnZVVSTFN0cmluZyk7Ci0KLXZvaWQgZ2V0UGx1Z2luTW9kdWxlSW5mb3Jt
YXRpb24oY29uc3QgUGx1Z2luTW9kdWxlSW5mbyYsIEFQSTo6RGljdGlvbmFyeTo6TWFwVHlwZSYp
Owotdm9pZCBnZXRQbGF0Zm9ybVBsdWdpbk1vZHVsZUluZm9ybWF0aW9uKGNvbnN0IFBsdWdpbk1v
ZHVsZUluZm8mLCBBUEk6OkRpY3Rpb25hcnk6Ok1hcFR5cGUmKTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Ci0KLSNlbmRpZiAvLyBQbHVnaW5JbmZvcm1hdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL21hYy9OZXRzY2FwZVBsdWdpbk1vZHVs
ZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvbWFjL05ldHNj
YXBlUGx1Z2luTW9kdWxlTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzNh
MTdlYTk5Njk5Y2MyN2YxMDFjZDdlNzM1MGE2OTkyNjMzZDk5Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMv
TmV0c2NhcGUvbWFjL05ldHNjYXBlUGx1Z2luTW9kdWxlTWFjLm1tCisrKyAvZGV2L251bGwKQEAg
LTEsMjc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQg
Ik5ldHNjYXBlUGx1Z2luTW9kdWxlLmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKLQotI2ltcG9ydCAiUGx1Z2luUHJvY2Vzc1Byb3h5LmgiCi0jaW1wb3J0ICJQbHVnaW5TYW5k
Ym94UHJvZmlsZS5oIgotI2ltcG9ydCA8d3RmL0hhc2hTZXQuaD4KLSNpbXBvcnQgPHd0Zi9NYWlu
VGhyZWFkLmg+Ci0jaW1wb3J0IDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4KLSNpbXBvcnQgPHd0Zi9z
cGkvY2YvQ0ZCdW5kbGVTUEkuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ1RvSW50ZWdlckNv
bnZlcnNpb24uaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBib29sIGdldFBsdWdp
bkFyY2hpdGVjdHVyZShDRkJ1bmRsZVJlZiBidW5kbGUsIFBsdWdpbk1vZHVsZUluZm8mIHBsdWdp
bikKLXsKLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gcGx1Z2luQXJjaGl0ZWN0dXJlc0FycmF5
ID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlFeGVjdXRhYmxlQXJjaGl0ZWN0dXJlcyhidW5kbGUpKTsK
LSAgICBpZiAoIXBsdWdpbkFyY2hpdGVjdHVyZXNBcnJheSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgLy8gVHVybiB0aGUgYXJyYXkgaW50byBhIHNldC4KLSAgICBIYXNoU2V0PHVuc2ln
bmVkPiBhcmNoaXRlY3R1cmVzOwotICAgIGZvciAoQ0ZJbmRleCBpID0gMCwgbnVtUGx1Z2luQXJj
aGl0ZWN0dXJlcyA9IENGQXJyYXlHZXRDb3VudChwbHVnaW5BcmNoaXRlY3R1cmVzQXJyYXkuZ2V0
KCkpOyBpIDwgbnVtUGx1Z2luQXJjaGl0ZWN0dXJlczsgKytpKSB7Ci0gICAgICAgIENGTnVtYmVy
UmVmIG51bWJlciA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkFycmF5R2V0VmFsdWVBdElu
ZGV4KHBsdWdpbkFyY2hpdGVjdHVyZXNBcnJheS5nZXQoKSwgaSkpOwotICAgICAgICAKLSAgICAg
ICAgU0ludDMyIGFyY2hpdGVjdHVyZTsKLSAgICAgICAgaWYgKCFDRk51bWJlckdldFZhbHVlKG51
bWJlciwga0NGTnVtYmVyU0ludDMyVHlwZSwgJmFyY2hpdGVjdHVyZSkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgYXJjaGl0ZWN0dXJlcy5hZGQoYXJjaGl0ZWN0dXJlKTsKLSAgICB9
Ci0gICAgCi0jaWZkZWYgX194ODZfNjRfXwotICAgIC8vIFdlIG9ubHkgc3VwcG9ydCA2NC1iaXQg
SW50ZWwgcGx1Zy1pbnMgb24gNjQtYml0IEludGVsLgotICAgIGlmIChhcmNoaXRlY3R1cmVzLmNv
bnRhaW5zKGtDRkJ1bmRsZUV4ZWN1dGFibGVBcmNoaXRlY3R1cmVYODZfNjQpKSB7Ci0gICAgICAg
IHBsdWdpbi5wbHVnaW5BcmNoaXRlY3R1cmUgPSBDUFVfVFlQRV9YODZfNjQ7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0
aWMgYm9vbCBnZXRQbHVnaW5JbmZvRnJvbVByb3BlcnR5TGlzdHMoQ0ZCdW5kbGVSZWYgYnVuZGxl
LCBQbHVnaW5Nb2R1bGVJbmZvJiBwbHVnaW4pCi17Ci0gICAgUmV0YWluUHRyIG1pbWVUeXBlcyA9
IGR5bmFtaWNfY2ZfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGQnVuZGxlR2V0VmFsdWVGb3JJbmZv
RGljdGlvbmFyeUtleShidW5kbGUsIENGU1RSKCJXZWJQbHVnaW5NSU1FVHlwZXMiKSkpOwotICAg
IGlmICghbWltZVR5cGVzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBHZXQgdGhl
IHBsdWctaW4gbmFtZS4KLSAgICBhdXRvIHBsdWdpbk5hbWUgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZT
dHJpbmdSZWY+KENGQnVuZGxlR2V0VmFsdWVGb3JJbmZvRGljdGlvbmFyeUtleShidW5kbGUsIENG
U1RSKCJXZWJQbHVnaW5OYW1lIikpKTsKLSAgICBpZiAocGx1Z2luTmFtZSkKLSAgICAgICAgcGx1
Z2luLmluZm8ubmFtZSA9IHBsdWdpbk5hbWU7Ci0gICAgCi0gICAgLy8gR2V0IHRoZSBwbHVnLWlu
IGRlc2NyaXB0aW9uLgotICAgIGF1dG8gcGx1Z2luRGVzY3JpcHRpb24gPSBkeW5hbWljX2NmX2Nh
c3Q8Q0ZTdHJpbmdSZWY+KENGQnVuZGxlR2V0VmFsdWVGb3JJbmZvRGljdGlvbmFyeUtleShidW5k
bGUsIENGU1RSKCJXZWJQbHVnaW5EZXNjcmlwdGlvbiIpKSk7Ci0gICAgaWYgKHBsdWdpbkRlc2Ny
aXB0aW9uKQotICAgICAgICBwbHVnaW4uaW5mby5kZXNjID0gcGx1Z2luRGVzY3JpcHRpb247Ci0g
ICAgCi0gICAgLy8gR2V0IHRoZSBNSU1FIHR5cGUgbWFwcGluZyBkaWN0aW9uYXJ5LgotICAgIENG
SW5kZXggbnVtTWltZVR5cGVzID0gQ0ZEaWN0aW9uYXJ5R2V0Q291bnQobWltZVR5cGVzLmdldCgp
KTsgICAgICAgICAgCi0gICAgVmVjdG9yPENGVHlwZVJlZj4gbWltZVR5cGVzVmVjdG9yKG51bU1p
bWVUeXBlcyk7Ci0gICAgVmVjdG9yPENGVHlwZVJlZj4gbWltZVR5cGVJbmZvVmVjdG9yKG51bU1p
bWVUeXBlcyk7Ci0gICAgQ0ZEaWN0aW9uYXJ5R2V0S2V5c0FuZFZhbHVlcyhtaW1lVHlwZXMuZ2V0
KCksIG1pbWVUeXBlc1ZlY3Rvci5kYXRhKCksIG1pbWVUeXBlSW5mb1ZlY3Rvci5kYXRhKCkpOwot
ICAgIAotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IG51bU1pbWVUeXBlczsgKytpKSB7Ci0g
ICAgICAgIFdlYkNvcmU6Ok1pbWVDbGFzc0luZm8gbWltZUNsYXNzSW5mbzsKLSAgICAgICAgCi0g
ICAgICAgIC8vIElmIHRoaXMgTUlNRSB0eXBlIGlzIGludmFsaWQsIGlnbm9yZSBpdC4KLSAgICAg
ICAgYXV0byBtaW1lVHlwZSA9IGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4obWltZVR5cGVz
VmVjdG9yW2ldKTsKLSAgICAgICAgaWYgKCFtaW1lVHlwZSB8fCAhQ0ZTdHJpbmdHZXRMZW5ndGgo
bWltZVR5cGUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gSWYgdGhpcyBN
SU1FIHR5cGUgZG9lc24ndCBoYXZlIGEgdmFsaWQgaW5mbyBkaWN0aW9uYXJ5LCBpZ25vcmUgaXQu
Ci0gICAgICAgIGF1dG8gbWltZVR5cGVJbmZvID0gZHluYW1pY19jZl9jYXN0PENGRGljdGlvbmFy
eVJlZj4obWltZVR5cGVJbmZvVmVjdG9yW2ldKTsKLSAgICAgICAgaWYgKCFtaW1lVHlwZUluZm8p
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgc3Rv
cmluZyBkaXNhYmxlZCBNSU1FIHR5cGVzLgotICAgICAgICBhdXRvIGlzRW5hYmxlZCA9IENGRGlj
dGlvbmFyeUdldFZhbHVlKG1pbWVUeXBlSW5mbywgQ0ZTVFIoIldlYlBsdWdpblR5cGVFbmFibGVk
IikpOwotICAgICAgICBpZiAoaXNFbmFibGVkKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBudW1i
ZXIgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KGlzRW5hYmxlZCkpIHsKLSAgICAgICAg
ICAgICAgICBpbnQgdmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFDRk51bWJlckdldFZhbHVl
KG51bWJlciwga0NGTnVtYmVySW50VHlwZSwgJnZhbHVlKSB8fCAhdmFsdWUpCi0gICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpc0VuYWJsZWQgIT0g
a0NGQm9vbGVhblRydWUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBtaW1lQ2xhc3NJbmZvLnR5cGUgPSBTdHJpbmcobWltZVR5cGUpLmNvbnZlcnRUb0FT
Q0lJTG93ZXJjYXNlKCk7Ci0gICAgICAgIG1pbWVDbGFzc0luZm8uZGVzYyA9IGR5bmFtaWNfY2Zf
Y2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUobWltZVR5cGVJbmZvLCBDRlNU
UigiV2ViUGx1Z2luVHlwZURlc2NyaXB0aW9uIikpKTsKLQotICAgICAgICAvLyBOb3cgZ2V0IHRo
ZSBleHRlbnNpb25zIGZvciB0aGlzIE1JTUUgdHlwZS4KLSAgICAgICAgQ0ZJbmRleCBudW1FeHRl
bnNpb25zID0gMDsKLSAgICAgICAgYXV0byBleHRlbnNpb25zQXJyYXkgPSBkeW5hbWljX2NmX2Nh
c3Q8Q0ZBcnJheVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUobWltZVR5cGVJbmZvLCBDRlNUUigi
V2ViUGx1Z2luRXh0ZW5zaW9ucyIpKSk7Ci0gICAgICAgIGlmIChleHRlbnNpb25zQXJyYXkpCi0g
ICAgICAgICAgICBudW1FeHRlbnNpb25zID0gQ0ZBcnJheUdldENvdW50KGV4dGVuc2lvbnNBcnJh
eSk7Ci0KLSAgICAgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgbnVtRXh0ZW5zaW9uczsgKytp
KSB7Ci0gICAgICAgICAgICBhdXRvIGV4dGVuc2lvbiA9IGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmlu
Z1JlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChleHRlbnNpb25zQXJyYXksIGkpKTsKLSAgICAg
ICAgICAgIGlmICghZXh0ZW5zaW9uKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICAvLyBUaGUgRGl2WCBwbHVnLWluIGxpc3RzIG11bHRpcGxlIGV4dGVuc2lvbnMgaW4g
YSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIGluc3RlYWQgb2YgdXNpbmcKLSAgICAgICAgICAgIC8v
IG11bHRpcGxlIGFycmF5IGVsZW1lbnRzIGluIHRoZSBwcm9wZXJ0eSBsaXN0LiBXb3JrIGFyb3Vu
ZCB0aGlzIGhlcmUgYnkgc3BsaXR0aW5nIHRoZQotICAgICAgICAgICAgLy8gZXh0ZW5zaW9uIHN0
cmluZyBpbnRvIGNvbXBvbmVudHMuCi0gICAgICAgICAgICBmb3IgKGF1dG8mIGNvbXBvbmVudCA6
IFN0cmluZyhleHRlbnNpb24pLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkuc3BsaXQoJywnKSkK
LSAgICAgICAgICAgICAgICBtaW1lQ2xhc3NJbmZvLmV4dGVuc2lvbnMuYXBwZW5kKGNvbXBvbmVu
dCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBZGQgdGhpcyBNSU1FIHR5cGUuCi0gICAgICAg
IHBsdWdpbi5pbmZvLm1pbWVzLmFwcGVuZChtaW1lQ2xhc3NJbmZvKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsgICAgCi19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW5Nb2R1bGU6OmdldFBsdWdp
bkluZm8oY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoLCBQbHVnaW5Nb2R1bGVJbmZvJiBwbHVnaW4p
Ci17Ci0gICAgYXV0byBidW5kbGVVUkwgPSBhZG9wdENGKENGVVJMQ3JlYXRlV2l0aEZpbGVTeXN0
ZW1QYXRoKGtDRkFsbG9jYXRvckRlZmF1bHQsIHBsdWdpblBhdGguY3JlYXRlQ0ZTdHJpbmcoKS5n
ZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIGZhbHNlKSk7Ci0gICAgCi0gICAgLy8gVHJ5IHRv
IGluaXRpYWxpemUgdGhlIGJ1bmRsZS4KLSAgICBhdXRvIGJ1bmRsZSA9IGFkb3B0Q0YoX0NGQnVu
ZGxlQ3JlYXRlVW5pcXVlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGJ1bmRsZVVSTC5nZXQoKSkpOwot
ICAgIGlmICghYnVuZGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gQ2hl
Y2sgaWYgdGhpcyBidW5kbGUgaXMgYW4gTlBBUEkgcGx1Zy1pbi4KLSAgICBVSW50MzIgcGFja2Fn
ZVR5cGUgPSAwOwotICAgIENGQnVuZGxlR2V0UGFja2FnZUluZm8oYnVuZGxlLmdldCgpLCAmcGFj
a2FnZVR5cGUsIDApOwotICAgIGlmIChwYWNrYWdlVHlwZSAhPSBGT1VSX0NIQVJfQ09ERSgnQlJQ
TCcpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGUg
YXJjaGl0ZWN0dXJlIGlzIHZhbGlkLgotICAgIGlmICghZ2V0UGx1Z2luQXJjaGl0ZWN0dXJlKGJ1
bmRsZS5nZXQoKSwgcGx1Z2luKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcGx1Z2lu
LnBhdGggPSBwbHVnaW5QYXRoOwotICAgIHBsdWdpbi5idW5kbGVJZGVudGlmaWVyID0gQ0ZCdW5k
bGVHZXRJZGVudGlmaWVyKGJ1bmRsZS5nZXQoKSk7Ci0gICAgcGx1Z2luLnZlcnNpb25TdHJpbmcg
PSBkeW5hbWljX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGQnVuZGxlR2V0VmFsdWVGb3JJbmZvRGlj
dGlvbmFyeUtleShidW5kbGUuZ2V0KCksIGtDRkJ1bmRsZVZlcnNpb25LZXkpKTsKLSAgICBwbHVn
aW4uc2hvcnRWZXJzaW9uU3RyaW5nID0gZHluYW1pY19jZl9jYXN0PENGU3RyaW5nUmVmPihDRkJ1
bmRsZUdldFZhbHVlRm9ySW5mb0RpY3Rpb25hcnlLZXkoYnVuZGxlLmdldCgpLCBDRlNUUigiQ0ZC
dW5kbGVTaG9ydFZlcnNpb25TdHJpbmciKSkpOwotCi0gICAgaWYgKCFnZXRQbHVnaW5JbmZvRnJv
bVByb3BlcnR5TGlzdHMoYnVuZGxlLmdldCgpLCBwbHVnaW4pKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBwbHVnaW4uaGFzU2FuZGJveFByb2ZpbGUgPSBwbHVnaW5IYXNTYW5kYm94UHJv
ZmlsZShwbHVnaW4uYnVuZGxlSWRlbnRpZmllcik7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IGZpbGVuYW1lID0gYWRvcHRDRihDRlVSTENvcHlMYXN0UGF0aENvbXBvbmVudChidW5kbGVV
UkwuZ2V0KCkpKTsKLSAgICBwbHVnaW4uaW5mby5maWxlID0gZmlsZW5hbWUuZ2V0KCk7Ci0gICAg
Ci0gICAgaWYgKHBsdWdpbi5pbmZvLm5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHBsdWdpbi5pbmZv
Lm5hbWUgPSBwbHVnaW4uaW5mby5maWxlOwotICAgIGlmIChwbHVnaW4uaW5mby5kZXNjLmlzTnVs
bCgpKQotICAgICAgICBwbHVnaW4uaW5mby5kZXNjID0gcGx1Z2luLmluZm8uZmlsZTsKLQotICAg
IHBsdWdpbi5pbmZvLmlzQXBwbGljYXRpb25QbHVnaW4gPSBmYWxzZTsKLSAgICBwbHVnaW4uaW5m
by5jbGllbnRMb2FkUG9saWN5ID0gV2ViQ29yZTo6UGx1Z2luTG9hZENsaWVudFBvbGljeTo6VW5k
ZWZpbmVkOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBwbHVnaW4uaW5mby5idW5kbGVJZGVudGlm
aWVyID0gcGx1Z2luLmJ1bmRsZUlkZW50aWZpZXI7Ci0gICAgcGx1Z2luLmluZm8udmVyc2lvblN0
cmluZyA9IHBsdWdpbi52ZXJzaW9uU3RyaW5nOwotI2VuZGlmCi0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotLy8gRklYTUU6IFRoaXMgZG9lc24ndCBuZWVkIHRvIGJlIHBsYXRmb3JtLXNwZWNpZmlj
LgotY2xhc3MgUGx1Z2luVmVyc2lvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBsdWdpblZlcnNp
b24gcGFyc2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9uU3RyaW5nKTsKLQotICAgIGJvb2wgaXNMZXNz
VGhhbih1bnNpZ25lZCBjb21wb25lbnRBKSBjb25zdDsKLSAgICBib29sIGlzVmFsaWQoKSBjb25z
dCB7IHJldHVybiAhbV92ZXJzaW9uQ29tcG9uZW50cy5pc0VtcHR5KCk7IH0KLQotcHJpdmF0ZToK
LSAgICBQbHVnaW5WZXJzaW9uKCkKLSAgICB7Ci0gICAgfQotCi0gICAgVmVjdG9yPHVuc2lnbmVk
LCA0PiBtX3ZlcnNpb25Db21wb25lbnRzOwotfTsKLQotUGx1Z2luVmVyc2lvbiBQbHVnaW5WZXJz
aW9uOjpwYXJzZShjb25zdCBTdHJpbmcmIHZlcnNpb25TdHJpbmcpCi17Ci0gICAgUGx1Z2luVmVy
c2lvbiB2ZXJzaW9uOwotICAgIGZvciAoYXV0byBjb21wb25lbnQgOiBTdHJpbmdWaWV3IHsgdmVy
c2lvblN0cmluZyB9LnNwbGl0KCcuJykpIHsKLSAgICAgICAgYXV0byB2ZXJzaW9uQ29tcG9uZW50
ID0gcGFyc2VJbnRlZ2VyQWxsb3dpbmdUcmFpbGluZ0p1bms8dW5zaWduZWQ+KGNvbXBvbmVudCk7
Ci0gICAgICAgIGlmICghdmVyc2lvbkNvbXBvbmVudCkKLSAgICAgICAgICAgIHJldHVybiB7IH07
Ci0gICAgICAgIHZlcnNpb24ubV92ZXJzaW9uQ29tcG9uZW50cy5hcHBlbmQoKnZlcnNpb25Db21w
b25lbnQpOwotICAgIH0KLSAgICByZXR1cm4gdmVyc2lvbjsKLX0KLQotYm9vbCBQbHVnaW5WZXJz
aW9uOjppc0xlc3NUaGFuKHVuc2lnbmVkIGNvbXBvbmVudEEpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KGlzVmFsaWQoKSk7Ci0KLSAgICByZXR1cm4gbV92ZXJzaW9uQ29tcG9uZW50c1swXSA8IGNvbXBv
bmVudEE7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5Nb2R1bGU6OmRldGVybWluZVF1aXJrcygp
Ci17Ci0gICAgUGx1Z2luTW9kdWxlSW5mbyBwbHVnaW47Ci0gICAgaWYgKCFnZXRQbHVnaW5JbmZv
KG1fcGx1Z2luUGF0aCwgcGx1Z2luKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHBsdWdp
bi5idW5kbGVJZGVudGlmaWVyID09ICJjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIucGx1Z2lu
IikgewotICAgICAgICAvLyBGbGFzaCByZXF1aXJlcyB0aGF0IHRoZSByZXR1cm4gdmFsdWUgb2Yg
Z2V0cHJvZ25hbWUoKSBiZSAiV2ViS2l0UGx1Z2luSG9zdCIuCi0gICAgICAgIG1fcGx1Z2luUXVp
cmtzLmFkZChQbHVnaW5RdWlya3M6OlByb2duYW1lU2hvdWxkQmVXZWJLaXRQbHVnaW5Ib3N0KTsK
LQotICAgICAgICAvLyBGbGFzaCBzdXBwb3J0cyBzbmFwc2hvdHRpbmcuCi0gICAgICAgIG1fcGx1
Z2luUXVpcmtzLmFkZChQbHVnaW5RdWlya3M6OlN1cHBvcnRzU25hcHNob3R0aW5nKTsKLQotICAg
ICAgICAvLyBGbGFzaCByZXR1cm5zIGEgcmV0YWluZWQgQ29yZSBBbmltYXRpb24gbGF5ZXIuCi0g
ICAgICAgIG1fcGx1Z2luUXVpcmtzLmFkZChQbHVnaW5RdWlya3M6OlJldHVybnNSZXRhaW5lZENv
cmVBbmltYXRpb25MYXllcik7Ci0KLSAgICAgICAgLy8gRmxhc2ggaGFzIGEgYnVnIHdoZXJlIE5T
RXhjZXB0aW9ucyBjYW4gYmUgcmVsZWFzZWQgdG9vIGVhcmx5LgotICAgICAgICBtX3BsdWdpblF1
aXJrcy5hZGQoUGx1Z2luUXVpcmtzOjpMZWFrQWxsVGhyb3duTlNFeGNlcHRpb25zKTsKLSAgICB9
Ci0KLSAgICBpZiAocGx1Z2luLmJ1bmRsZUlkZW50aWZpZXIgPT0gImNvbS5taWNyb3NvZnQuU2ls
dmVybGlnaHRQbHVnaW4iKSB7Ci0gICAgICAgIC8vIFNpbHZlcmxpZ2h0IGRvZXNuJ3QgZXhwbGlj
aXRseSBvcHQgaW50byB0cmFuc3BhcmVuY3ksIHNvIHdlJ2xsIGRvIGl0IHdoZW5ldmVyCi0gICAg
ICAgIC8vIHRoZXJlJ3MgYSAnYmFja2dyb3VuZCcgYXR0cmlidXRlIHRoYXQncyBzZXQgdG8gYSB0
cmFuc3BhcmVudCBjb2xvci4KLSAgICAgICAgbV9wbHVnaW5RdWlya3MuYWRkKFBsdWdpblF1aXJr
czo6TWFrZU9wYXF1ZVVubGVzc1RyYW5zcGFyZW50U2lsdmVybGlnaHRCYWNrZ3JvdW5kQXR0cmli
dXRlRXhpc3RzKTsKLQotICAgICAgICAvLyBTaWx2ZXJsaWdodCBoYXMgYSB3b3JrYXJvdW5kIGZv
ciBhIGxlYWsgaW4gU2FmYXJpIDIuIFRoaXMgd29ya2Fyb3VuZCBpcwotICAgICAgICAvLyBhcHBs
aWVkIHdoZW4gdGhlIHVzZXIgYWdlbnQgZG9lcyBub3QgY29udGFpbiAiVmVyc2lvbi8zIiBzbyB3
ZSBhcHBlbmQgaXQKLSAgICAgICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgdXNlciBhZ2VudC4KLSAg
ICAgICAgbV9wbHVnaW5RdWlya3MuYWRkKFBsdWdpblF1aXJrczo6QXBwZW5kVmVyc2lvbjNVc2Vy
QWdlbnQpOwotCi0gICAgICAgIFBsdWdpblZlcnNpb24gcGx1Z2luVmVyc2lvbiA9IFBsdWdpblZl
cnNpb246OnBhcnNlKHBsdWdpbi52ZXJzaW9uU3RyaW5nKTsKLSAgICAgICAgaWYgKHBsdWdpblZl
cnNpb24uaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBpZiAocGx1Z2luVmVyc2lvbi5pc0xlc3NU
aGFuKDQpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVmVyc2lvbnMgb2YgU2lsdmVybGlnaHQgcHJp
b3IgdG8gNCBkb24ndCByZXRhaW4gdGhlIHNjcmlwdGFibGUgTlBPYmplY3QuCi0gICAgICAgICAg
ICAgICAgbV9wbHVnaW5RdWlya3MuYWRkKFBsdWdpblF1aXJrczo6UmV0dXJuc05vblJldGFpbmVk
U2NyaXB0YWJsZU5QT2JqZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChwbHVnaW4uYnVuZGxlSWRlbnRpZmllciA9PSAiY29tLmFwcGxlLmlzdC5kcy5hcHBs
ZWNvbm5lY3Qud2VicGx1Z2luIikgewotICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vODQ0MDkw
Mz46IEFwcGxlQ29ubmVjdCBoYXMgYSBidWcgd2hlcmUgaXQgZG9lcyBub3QKLSAgICAgICAgLy8g
dW5kZXJzdGFuZCB0aGUgcGFyYW1ldGVyIG5hbWVzIHNwZWNpZmllZCBpbiB0aGUgPG9iamVjdD4g
ZWxlbWVudCB0aGF0Ci0gICAgICAgIC8vIGVtYmVkcyBpdHMgcGx1Zy1pbi4gCi0gICAgICAgIG1f
cGx1Z2luUXVpcmtzLmFkZChQbHVnaW5RdWlya3M6OldhbnRzTG93ZXJjYXNlUGFyYW1ldGVyTmFt
ZXMpOwotICAgIH0KLQotICAgIGlmIChwbHVnaW4uYnVuZGxlSWRlbnRpZmllciA9PSAiY29tLmFk
b2JlLmFjcm9iYXQucGRmdmlld2VyTlBBUEkiIHx8IHBsdWdpbi5idW5kbGVJZGVudGlmaWVyID09
ICJjb20uYXBwbGUudGVzdG5ldHNjYXBlcGx1Z2luIikgewotICAgICAgICAvLyBUaGUgQWRvYmUg
UmVhZGVyIHBsdWctaW4gd2FudHMgd2hlZWwgZXZlbnRzLgotICAgICAgICBtX3BsdWdpblF1aXJr
cy5hZGQoUGx1Z2luUXVpcmtzOjpXYW50c1doZWVsRXZlbnRzKTsKLSAgICB9Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL21hYy9Q
bHVnaW5JbmZvcm1hdGlvbk1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTmV0
c2NhcGUvbWFjL1BsdWdpbkluZm9ybWF0aW9uTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA2NzlhNDM4YTkwOTg4YzdlOGI3YWZjMTcwZTgwODI3MWZlNjRiNjhmLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1BsdWdpbnMvTmV0c2NhcGUvbWFjL1BsdWdpbkluZm9ybWF0aW9uTWFjLm1tCisrKyAvZGV2
L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiUGx1Z2luSW5mb3JtYXRpb24uaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotCi0jaW1wb3J0ICJBUElOdW1iZXIuaCIKLSNpbXBvcnQgIkFQSVN0cmluZy5oIgot
I2ltcG9ydCAiUGx1Z2luTW9kdWxlSW5mby5oIgotI2ltcG9ydCAiU3RyaW5nVXRpbGl0aWVzLmgi
Ci0jaW1wb3J0IDxXZWJDb3JlL1BsdWdpbkJsb2NrbGlzdC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi12b2lkIGdldFBsYXRmb3JtUGx1Z2luTW9k
dWxlSW5mb3JtYXRpb24oY29uc3QgUGx1Z2luTW9kdWxlSW5mbyYgcGx1Z2luLCBBUEk6OkRpY3Rp
b25hcnk6Ok1hcFR5cGUmIG1hcCkKLXsKLSAgICBtYXAuc2V0KHBsdWdpbkluZm9ybWF0aW9uQnVu
ZGxlSWRlbnRpZmllcktleSgpLCBBUEk6OlN0cmluZzo6Y3JlYXRlKHBsdWdpbi5idW5kbGVJZGVu
dGlmaWVyKSk7Ci0gICAgbWFwLnNldChwbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZVZlcnNpb25LZXko
KSwgQVBJOjpTdHJpbmc6OmNyZWF0ZShwbHVnaW4udmVyc2lvblN0cmluZykpOwotICAgIG1hcC5z
ZXQocGx1Z2luSW5mb3JtYXRpb25CdW5kbGVTaG9ydFZlcnNpb25LZXkoKSwgQVBJOjpTdHJpbmc6
OmNyZWF0ZShwbHVnaW4uc2hvcnRWZXJzaW9uU3RyaW5nKSk7Ci0gICAgbWFwLnNldChwbHVnaW5J
bmZvcm1hdGlvblVwZGF0ZVBhc3RMYXN0QmxvY2tlZFZlcnNpb25Jc0tub3duQXZhaWxhYmxlS2V5
KCksIEFQSTo6Qm9vbGVhbjo6Y3JlYXRlKFdlYkNvcmU6OlBsdWdpbkJsb2NrbGlzdDo6aXNQbHVn
aW5VcGRhdGVBdmFpbGFibGUobnNTdHJpbmdGcm9tV2ViQ29yZVN0cmluZyhwbHVnaW4uYnVuZGxl
SWRlbnRpZmllcikpKSk7Ci0gICAgbWFwLnNldChwbHVnaW5JbmZvcm1hdGlvbkhhc1NhbmRib3hQ
cm9maWxlS2V5KCksIEFQSTo6Qm9vbGVhbjo6Y3JlYXRlKHBsdWdpbi5oYXNTYW5kYm94UHJvZmls
ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lu
cy9QbHVnaW5Nb2R1bGVJbmZvLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL1BsdWdp
bk1vZHVsZUluZm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIxNjNjOWM1Yjdk
MmJmNDQyY2Q5YmFkZmUzNmNiNjhmZWYwOWZmNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL1BsdWdpbk1v
ZHVsZUluZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luRGF0YS5oPgotCi0jaWYgUExB
VEZPUk0oQ09DT0EpCi0jaW5jbHVkZSA8bWFjaC9tYWNoaW5lLmg+Ci0jZW5kaWYKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLWVudW0gUGx1Z2luTW9kdWxlTG9hZFBvbGljeSB7Ci0gICAgLy8gVGhl
IHBsdWctaW4gbW9kdWxlIHNob3VsZCBiZSBsb2FkZWQgbm9ybWFsbHkuCi0gICAgUGx1Z2luTW9k
dWxlTG9hZE5vcm1hbGx5LAotCi0gICAgLy8gVGhlIHBsdWctaW4gbW9kdWxlIHNob3VsZCBiZSBs
b2FkZWQgbm9ybWFsbHkuIElmIHRoZSBwbHVnLWluIGhhcyBhIHNhbmRib3gsIGl0IHdpbGwgYmUg
ZGlzYWJsZWQuCi0gICAgUGx1Z2luTW9kdWxlTG9hZFVuc2FuZGJveGVkLAotCi0gICAgLy8gVGhl
IHBsdWctaW4gc2hvdWxkIGJlIGJsb2NrZWQgZnJvbSBiZWluZyBpbnN0YW50aWF0ZWQuCi0gICAg
Ly8gTm90ZSB0aGF0IHRoZSBwbHVnLWluIHdpbGwgc3RpbGwgYmUgc2VlbiBieSBlLmcuIG5hdmln
YXRvci5wbHVnaW5zCi0gICAgUGx1Z2luTW9kdWxlQmxvY2tlZEZvclNlY3VyaXR5LAotICAgIFBs
dWdpbk1vZHVsZUJsb2NrZWRGb3JDb21wYXRpYmlsaXR5LAotfTsKLQotc3RydWN0IFBsdWdpbk1v
ZHVsZUluZm8gewotICAgIFN0cmluZyBwYXRoOwotICAgIFdlYkNvcmU6OlBsdWdpbkluZm8gaW5m
bzsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGNwdV90eXBlX3QgcGx1Z2luQXJjaGl0ZWN0
dXJlOwotICAgIFN0cmluZyBidW5kbGVJZGVudGlmaWVyOwotICAgIFN0cmluZyB2ZXJzaW9uU3Ry
aW5nOwotICAgIFN0cmluZyBzaG9ydFZlcnNpb25TdHJpbmc7Ci0gICAgYm9vbCBoYXNTYW5kYm94
UHJvZmlsZTsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL1BsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLmgg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL1BsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxODdhYWZjMzczNDRhNjI4NzdiYTExYWRm
OWQ4ZGEzNWYyMDc5ZDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQXR0cmlidXRl
cy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJQbHVnaW5Nb2R1bGVJbmZvLmgiCi0jaW5jbHVkZSA8d3Rm
L0VudW1UcmFpdHMuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWVudW0gY2xhc3MgUGx1Z2lu
UHJvY2Vzc1NhbmRib3hQb2xpY3kgOiBib29sIHsKLSAgICBOb3JtYWwsCi0gICAgVW5zYW5kYm94
ZWQsCi19OwotCi1zdHJ1Y3QgUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMgewotICAgIFBsdWdpbk1v
ZHVsZUluZm8gbW9kdWxlSW5mbzsKLSAgICBQbHVnaW5Qcm9jZXNzU2FuZGJveFBvbGljeSBzYW5k
Ym94UG9saWN5OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL1BsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
Y3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg5ZTIyNmZmYzJh
YzQ3ZThhMjkxNTY1ZmVhMzAyMzAyZDhkMTk1YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL1BsdWdpblBy
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5Qcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJBcmd1bWVudENvZGVyc0NGLmgiCi0j
ZW5kaWYKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLVBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OlBsdWdpblByb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMoKQotICAgIDogc3VwcG9ydHNBc3luY2hyb25vdXNQbHVnaW5Jbml0
aWFsaXphdGlvbihmYWxzZSkKLXsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29k
ZXIgPDwgc3VwcG9ydHNBc3luY2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbjsKLSAgICBlbmNv
ZGVyIDw8IG1pbmltdW1MaWZldGltZTsKLSAgICBlbmNvZGVyIDw8IHRlcm1pbmF0aW9uVGltZW91
dDsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBlbmNvZGVyIDw8IGFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdQb3J0OwotICAgIGVuY29kZXIgPDwgbmV0d29ya0FUU0NvbnRleHQ7Ci0jZW5kaWYKLX0K
LQotYm9vbCBQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNv
ZGVyJiBkZWNvZGVyLCBQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiByZXN1bHQpCi17
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc3VwcG9ydHNBc3luY2hyb25vdXNQbHVn
aW5Jbml0aWFsaXphdGlvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5taW5pbXVtTGlmZXRpbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudGVybWluYXRpb25UaW1lb3V0KSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0LmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdQb3J0KSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm5ldHdvcmtBVFNDb250
ZXh0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9Q
bHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Q
bHVnaW5zL1BsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYmY4NDJmMGE1NGI5OWM1NDU4NWZkYjJlNzZmY2VkNjlhOWYwMjYyOS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9QbHVnaW5zL1BsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAorKysg
L2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJQbHVnaW5Q
cm9jZXNzQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+Ci0KLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBJUEMgewotY2xhc3MgRGVjb2RlcjsKLWNsYXNzIEVuY29kZXI7Ci19Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1zdHJ1Y3QgUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7
Ci0gICAgUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycygpOwotCi0gICAgdm9pZCBlbmNv
ZGUoSVBDOjpFbmNvZGVyJikgY29uc3Q7Ci0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBi
b29sIGRlY29kZShJUEM6OkRlY29kZXImLCBQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
Jik7Ci0KLSAgICBib29sIHN1cHBvcnRzQXN5bmNocm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRpb247
Ci0KLSAgICBTZWNvbmRzIG1pbmltdW1MaWZldGltZTsKLSAgICBTZWNvbmRzIHRlcm1pbmF0aW9u
VGltZW91dDsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIFdURjo6TWFjaFNlbmRSaWdodCBh
Y2NlbGVyYXRlZENvbXBvc2l0aW5nUG9ydDsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBuZXR3
b3JrQVRTQ29udGV4dDsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNl
bmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1BsdWdpbnMvUGx1Z2luUXVpcmtzLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9QbHVnaW5zL1BsdWdpblF1aXJrcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
YWU2ZjkxYjBkODBmOGIzMjgzZGUyOTFjOWI3ZTNhZmVlMWFjYTk3Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdp
bnMvUGx1Z2luUXVpcmtzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBQ
bHVnaW5RdWlya3MgewotcHVibGljOgotICAgIGVudW0gUGx1Z2luUXVpcmsgewotICAgICAgICAv
LyBNYWMgc3BlY2lmaWMgcXVpcmtzOgotI2lmIFBMVUdJTl9BUkNISVRFQ1RVUkUoTUFDKQotICAg
ICAgICAvLyBUaGUgcGx1Zy1pbiB3YW50cyB0aGUgY2FsbCB0byBnZXRwcm9nbmFtZSgpIHRvIHJl
dHVybiAiV2ViS2l0UGx1Z2luSG9zdCIuCi0gICAgICAgIC8vIEFkb2JlIEZsYXNoIFdpbGwgbm90
IGhhbmRsZSBrZXkgZG93biBldmVudHMgb3RoZXJ3aXNlLgotICAgICAgICBQcm9nbmFtZVNob3Vs
ZEJlV2ViS2l0UGx1Z2luSG9zdCwKLQotICAgICAgICAvLyBTdXBwb3J0cyByZWNlaXZpbmcgYSBw
YWludCBldmVudCwgZXZlbiB3aGVuIHVzaW5nIENvcmVBbmltYXRpb24gcmVuZGVyaW5nLgotICAg
ICAgICBTdXBwb3J0c1NuYXBzaG90dGluZywKLQotICAgICAgICAvLyBNYWtlIHRoZSBwbHVnLWlu
IG9wYXF1ZSB1bmxlc3MgaXQgaGFzIGEgImJhY2tncm91bmQiIGF0dHJpYnV0ZSBzZXQgdG8gYSB0
cmFuc3BhcmVudCBjb2xvcgotICAgICAgICAvLyBhY2NvcmRpbmcgdG8gaHR0cDovL21zZG4ubWlj
cm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2NjODM4MTQ4KFZTLjk1KS5hc3B4Ci0gICAgICAgIC8v
IEEgbm9uLWV4aXN0ZW50ICJiYWNrZ3JvdW5kIiBhdHRyaWJ1dGUgaXMgaW50ZXJwcmV0ZWQgYXMg
dGhlIG5hbWVkIGNvbG9yIFdoaXRlIHdoaWNoIGlzIG9wYXF1ZS4KLSAgICAgICAgLy8gTWljcm9z
b2Z0IFNpbHZlcmxpZ2h0IGRvZXNuJ3Qgb3B0IGludG8gdHJhbnNwYXJlbmN5IHVzaW5nIE5QTl9T
ZXRWYWx1ZSBhbmQKLSAgICAgICAgLy8gTlBQVnBsdWdpblRyYW5zcGFyZW50Qm9vbCwgc28gd2Un
bGwgYWx3YXlzIGZvcmNlIGl0IHVubGVzcyB0aGUgcGx1Zy1pbiBoYXMgYSAiYmFja2dyb3VuZCIK
LSAgICAgICAgLy8gYXR0cmlidXRlIHRoYXQgc3BlY2lmaWVzIGEgb3BhcXVlIGNvbG9yLgotICAg
ICAgICBNYWtlT3BhcXVlVW5sZXNzVHJhbnNwYXJlbnRTaWx2ZXJsaWdodEJhY2tncm91bmRBdHRy
aWJ1dGVFeGlzdHMsCi0KLSAgICAgICAgLy8gV2hldGhlciBjYWxsaW5nIE5QUF9HZXRWYWx1ZSB3
aXRoIE5QUFZwbHVnaW5Db3JlQW5pbWF0aW9uTGF5ZXIgcmV0dXJucyBhIHJldGFpbmVkIENvcmUg
QW5pbWF0aW9uCi0gICAgICAgIC8vIGxheWVyIG9yIG5vdC4gQWNjb3JkaW5nIHRvIHRoZSBOUEFQ
SSBzcGVjaWZpY2F0aW9ucywgcGx1Zy1pbiBzaG91bGRuJ3QgcmV0dXJuIGEgcmV0YWluZWQgbGF5
ZXIgYnV0Ci0gICAgICAgIC8vIFdlYktpdDEgZXhwZWN0cyBhIHJldGFpbmVkIHBsdWctaW4gbGF5
ZXIuIFdlIHVzZSB0aGlzIGZvciBGbGFzaCB0byBhdm9pZCBsZWFraW5nIE9wZW5HTCBsYXllcnMu
Ci0gICAgICAgIFJldHVybnNSZXRhaW5lZENvcmVBbmltYXRpb25MYXllciwKLQotICAgICAgICAv
LyBXaGV0aGVyIE5QUF9HZXRWYWx1ZSB3aXRoIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3Qg
cmV0dXJucyBhIG5vbi1yZXRhaW5lZCBOUE9iamVjdCBvciBub3QuCi0gICAgICAgIC8vIFZlcnNp
b25zIG9mIFNpbHZlcmxpZ2h0IHByaW9yIHRvIDQgbmV2ZXIgcmV0YWluZWQgdGhlIHJldHVybmVk
IE5QT2JqZWN0LgotICAgICAgICBSZXR1cm5zTm9uUmV0YWluZWRTY3JpcHRhYmxlTlBPYmplY3Qs
Ci0KLSAgICAgICAgLy8gV2hldGhlciB0aGUgcGx1Zy1pbiB3YW50cyBwYXJhbWV0ZXIgbmFtZXMg
dG8gYmUgbG93ZXJjYXNlLgotICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vODQ0MDkwMz46IEFw
cGxlQ29ubmVjdCBoYXMgYSBidWcgd2hlcmUgaXQgZG9lcyBub3QKLSAgICAgICAgLy8gdW5kZXJz
dGFuZCB0aGUgcGFyYW1ldGVyIG5hbWVzIHNwZWNpZmllZCBpbiB0aGUgPG9iamVjdD4gZWxlbWVu
dCB0aGF0Ci0gICAgICAgIC8vIGVtYmVkcyBpdHMgcGx1Zy1pbi4gCi0gICAgICAgIFdhbnRzTG93
ZXJjYXNlUGFyYW1ldGVyTmFtZXMsCi0KLSAgICAgICAgLy8gV2hldGhlciB0byBhcHBlbmQgVmVy
c2lvbi8zLjIuMSB0byB0aGUgdXNlci1hZ2VudCBwYXNzZWQgdG8gdGhlIHBsdWdpbgotICAgICAg
ICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSB0byBkaXNhYmxlIFNpbHZlcmxpZ2h0J3Mgd29ya2Fyb3Vu
ZCBmb3IgYSBTYWZhcmkgMiBsZWFrCi0gICAgICAgIC8vIHdoaWNoIGlzIGVuYWJsZWQgaWYgaXQg
ZG9lc24ndCBmaW5kIFZlcnNpb24vMyBpbiB0aGUgdXNlci1hZ2VudC4KLSAgICAgICAgQXBwZW5k
VmVyc2lvbjNVc2VyQWdlbnQsCi0KLSAgICAgICAgLy8gV2hldGhlciBhbGwgdGhyb3duIE5TRXhj
ZXB0aW9ucyBzaG91bGQgYmUgbGVha2VkLgotICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vMTMw
MDM0NzA+IEFkb2JlIEZsYXNoIGhhcyBhIGJ1ZyB3aGVyZSBleGNlcHRpb25zIGFyZSByZWxlYXNl
ZCB0b28gZWFybHkuCi0gICAgICAgIExlYWtBbGxUaHJvd25OU0V4Y2VwdGlvbnMsCi0KLSAgICAg
ICAgLy8gWDExIHNwZWNpZmljIHF1aXJrczoKLSNlbGlmIFBMQVRGT1JNKFgxMSkKLSAgICAgICAg
Ly8gRmxhc2ggYW5kIG5wd3JhcHBlciBhc2sgdGhlIGJyb3dzZXIgYWJvdXQgd2hpY2ggR1RLIHZl
cnNpb24gZG9lcyBpdCB1c2UKLSAgICAgICAgLy8gYW5kIHJlZnVzZSB0byBsb2FkIGFuZCB3b3Jr
IGlmIGl0IGlzIG5vdCBHVEsgMiBzbyB3ZSBuZWVkIHRvIGZha2UgaXQgaW4KLSAgICAgICAgLy8g
TlBOX0dldFZhbHVlIGV2ZW4gd2hlbiBpdCBpcyBhIGxpZS4KLSAgICAgICAgUmVxdWlyZXNHVEtU
b29sS2l0LAotCi0gICAgICAgIC8vIFNvbWUgdmVyc2lvbiAxMCByZWxlYXNlcyBvZiBGbGFzaCBy
dW4gdW5kZXIgbnNwbHVnaW53cmFwcGVyIHdpbGwgY29tcGxldGVseQotICAgICAgICAvLyBmcmVl
emUgd2hlbiBzZW5kaW5nIHJpZ2h0IGNsaWNrIGV2ZW50cyB0byB0aGVtIGluIHdpbmRvd2VkIG1v
ZGUuCi0gICAgICAgIElnbm9yZVJpZ2h0Q2xpY2tJbldpbmRvd2xlc3NNb2RlLAotCi0gICAgICAg
IC8vIFNvbWUgcG9ydHMgZG9uJ3Qgc3VwcG9ydCB3aW5kb3dlZCBwbHVnaW5zLgotICAgICAgICBG
b3JjZUZsYXNoV2luZG93bGVzc01vZGUsCi0KLSAgICAgICAgLy8gRmxhc2ggY3Jhc2hlcyB3aGVu
IE5QUF9HZXRWYWx1ZSBpcyBjYWxsZWQgZm9yIE5QUFZwbHVnaW5DYW5jZWxTcmNTdHJlYW0gaW4g
d2luZG93ZWQgbW9kZS4KLSAgICAgICAgRG9Ob3RDYW5jZWxTcmNTdHJlYW1JbldpbmRvd2VkTW9k
ZSwKLSNlbmRpZgotCi0gICAgICAgIC8vIFRoaXMgaXNuJ3QgcmVhbGx5IGEgcXVpcmsgYXMgbXVj
aCBhcyB0aGUgb3Bwb3NpdGUgb2YgYSBxdWlyay4gQnkgZGVmYXVsdCwgd2UgZG9uJ3Qgc2VuZCB3
aGVlbCBldmVudHMKLSAgICAgICAgLy8gdG8gcGx1Zy1pbnMgdW5sZXNzIHdlIGtub3cgdGhhdCB0
aGV5IGhhbmRsZSB0aGVtIGNvcnJlY3RseS4gQWRvYmUgUmVhZGVyIG9uIE1hYyBoYW5kbGVzIHdo
ZWVsIGV2ZW50cyBjb3JyZWN0bHkuCi0gICAgICAgIFdhbnRzV2hlZWxFdmVudHMsCi0KLSAgICAg
ICAgTnVtUGx1Z2luUXVpcmtzCi0gICAgfTsKLSAgICAKLSAgICBQbHVnaW5RdWlya3MoKQotICAg
ICAgICA6IG1fcXVpcmtzKDApCi0gICAgewotICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2Yo
bV9xdWlya3MpICogOCA+PSBOdW1QbHVnaW5RdWlya3MsIG5vdF9lbm91Z2hfcm9vbV9mb3JfcXVp
cmtzKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhZGQoUGx1Z2luUXVpcmsgcXVpcmspCi0gICAg
ewotICAgICAgICBBU1NFUlQocXVpcmsgPj0gMCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocXVpcmsgPCBOdW1QbHVnaW5RdWlya3MpOwotICAgICAg
ICAKLSAgICAgICAgbV9xdWlya3MgfD0gKDEgPDwgcXVpcmspOwotICAgIH0KLSAgICAKLSAgICBi
b29sIGNvbnRhaW5zKFBsdWdpblF1aXJrIHF1aXJrKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fcXVpcmtzICYgKDEgPDwgcXVpcmspOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB1aW50
MzJfdCBtX3F1aXJrczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9tYWMvUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0
YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL21hYy9QbHVnaW5Db21wbGV4VGV4
dElucHV0U3RhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJlZGQyYjA2NzMz
YTI4N2JmNTlmNGViYmRiMzA3NDlhOGEzOTJmMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL21hYy9QbHVn
aW5Db21wbGV4VGV4dElucHV0U3RhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZV9oCi0jZGVm
aW5lIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZV9oCi0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci1lbnVtIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSB7Ci0gICAgLy8gQ29tcGxleCB0ZXh0
IGlucHV0IGlzIGRpc2FibGVkLgotICAgIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXREaXNhYmxlZCwK
LQotICAgIC8vIENvbXBsZXggdGV4dCBpbnB1dCBpcyBlbmFibGVkIHVzaW5nIHRoZSB1cGRhdGVk
IENvY29hIGV2ZW50IG1vZGVsIHRleHQKLSAgICAvLyBpbnB1dCBoYW5kbGluZyBzcGVjaWZpY2F0
aW9uIGRlc2NyaWJlZCBhdCBodHRwczovL3dpa2kubW96aWxsYS5vcmcvTlBBUEk6Q29jb2FFdmVu
dE1vZGVsI1RleHRfSW5wdXQKLSAgICBQbHVnaW5Db21wbGV4VGV4dElucHV0RW5hYmxlZCwKLQot
ICAgIC8vIENvbXBsZXggdGV4dCBpbnB1dCBpcyBlbmFibGVkIHVzaW5nIHRoZSBsZWdhY3kgQ29j
b2EvQ2FyYm9uIGV2ZW50IG1vZGVsIHRleHQKLSAgICAvLyBpbnB1dCBoYW5kbGluZyB0aGF0IG1h
dGNoZXMgV2ViS2l0MS4KLSAgICBQbHVnaW5Db21wbGV4VGV4dElucHV0RW5hYmxlZExlZ2FjeQot
fTsKLQotc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRQbHVnaW5Db21wbGV4VGV4dElucHV0U3Rh
dGUodWludDY0X3QgdmFsdWUpCi17Ci0gICAgc3dpdGNoICh2YWx1ZSkgewotICAgIGNhc2UgUGx1
Z2luQ29tcGxleFRleHRJbnB1dERpc2FibGVkOgotICAgIGNhc2UgUGx1Z2luQ29tcGxleFRleHRJ
bnB1dEVuYWJsZWQ6Ci0gICAgY2FzZSBQbHVnaW5Db21wbGV4VGV4dElucHV0RW5hYmxlZExlZ2Fj
eToKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBsdWdpbkNvbXBsZXhUZXh0SW5w
dXRTdGF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL21hYy9Q
bHVnaW5TYW5kYm94UHJvZmlsZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9tYWMv
UGx1Z2luU2FuZGJveFByb2ZpbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGEy
NDZiNjI0OTczNDMwYzc2MjE1YzY4MmU4OTI5Y2UxYjdmY2I3My4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5z
L21hYy9QbHVnaW5TYW5kYm94UHJvZmlsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgUGx1Z2luU2FuZGJveFByb2ZpbGVfaAotI2RlZmluZSBQ
bHVnaW5TYW5kYm94UHJvZmlsZV9oCi0KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotU3RyaW5nIHBsdWdpblNhbmRib3hQcm9maWxlKGNvbnN0IFN0cmlu
ZyYgYnVuZGxlSWRlbnRpZmllcik7Ci1ib29sIHBsdWdpbkhhc1NhbmRib3hQcm9maWxlKGNvbnN0
IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllcik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0j
ZW5kaWYgLy8gUGx1Z2luU2FuZGJveFByb2ZpbGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvUGx1Z2lucy9tYWMvUGx1Z2luU2FuZGJveFByb2ZpbGUubW0gYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9QbHVnaW5zL21hYy9QbHVnaW5TYW5kYm94UHJvZmlsZS5tbQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMjcyNDM5YzlhM2NhMDU5NThhZGRmNjI3ZjNjNTg2NTU2MDlm
ZTk5Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL21hYy9QbHVnaW5TYW5kYm94UHJvZmlsZS5tbQorKysg
L2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcu
aCIKLSNpbXBvcnQgIlBsdWdpblNhbmRib3hQcm9maWxlLmgiCi0KLSNpbXBvcnQgIldLRm91bmRh
dGlvbi5oIgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotI2ltcG9ydCA8d3RmL3RleHQvU3Ry
aW5nQ29uY2F0ZW5hdGUuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIE5TU3RyaW5nICpwbHVnaW5TYW5kYm94UHJvZmlsZURp
cmVjdG9yeSgpCi17Ci0gICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JD
bGFzczpOU0NsYXNzRnJvbVN0cmluZyhAIldLV2ViVmlldyIpXTsKLSAgICByZXR1cm4gW1tidW5k
bGUgcmVzb3VyY2VQYXRoXSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJQbHVnSW5T
YW5kYm94UHJvZmlsZXMiXTsKLX0KLQotc3RhdGljIE5TU3RyaW5nICpwbHVnaW5TYW5kYm94UHJv
ZmlsZU5hbWUoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKQotewotICAgIC8vIEZvbGQg
YWxsIC8gY2hhcmFjdGVycyB0byA6IHRvIHByZXZlbnQgdGhlIHBsdWdpbiBidW5kbGUtaWQgZnJv
bSB0cnlpbmcgdG8gZXNjYXBlIHRoZSBwcm9maWxlIGRpcmVjdG9yeQotICAgIFN0cmluZyBzYW5p
dGl6ZWRCdW5kbGVJZGVudGlmaWVyID0gYnVuZGxlSWRlbnRpZmllcjsKLSAgICBzYW5pdGl6ZWRC
dW5kbGVJZGVudGlmaWVyLnJlcGxhY2UoJy8nLCAnOicpOwotCi0gICAgcmV0dXJuIFtOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAuc2IiLCAoTlNTdHJpbmcgKilzYW5pdGl6ZWRCdW5kbGVJ
ZGVudGlmaWVyXTsKLX0KLQotc3RhdGljIFN0cmluZyBwbHVnaW5TYW5kYm94Q29tbW9uUHJvZmls
ZSgpCi17Ci0gICAgTlNTdHJpbmcgKnByb2ZpbGVQYXRoID0gW3BsdWdpblNhbmRib3hQcm9maWxl
RGlyZWN0b3J5KCkgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiY29tLmFwcGxlLldl
YktpdC5wbHVnaW4tY29tbW9uLnNiIl07Ci0gICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRo
Q29udGVudHNPZkZpbGU6cHJvZmlsZVBhdGggZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rpbmcg
ZXJyb3I6TlVMTF07Ci19Ci0KLVN0cmluZyBwbHVnaW5TYW5kYm94UHJvZmlsZShjb25zdCBTdHJp
bmcmIGJ1bmRsZUlkZW50aWZpZXIpCi17Ci0gICAgaWYgKGJ1bmRsZUlkZW50aWZpZXIuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBOU1N0cmluZyAqcHJvZmlsZU5h
bWUgPSBwbHVnaW5TYW5kYm94UHJvZmlsZU5hbWUoYnVuZGxlSWRlbnRpZmllcik7Ci0KLSAgICBO
U1N0cmluZyAqcHJvZmlsZVBhdGggPSBbcGx1Z2luU2FuZGJveFByb2ZpbGVEaXJlY3RvcnkoKSBz
dHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6cHJvZmlsZU5hbWVdOwotICAgIE5TU3RyaW5n
ICpwcm9maWxlU3RyaW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTpwcm9m
aWxlUGF0aCBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpOVUxMXTsKLSAgICBp
ZiAoIXByb2ZpbGVTdHJpbmcpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIHJldHVy
biBtYWtlU3RyaW5nKHBsdWdpblNhbmRib3hDb21tb25Qcm9maWxlKCksIFN0cmluZyhwcm9maWxl
U3RyaW5nKSk7Ci19Ci0KLWJvb2wgcGx1Z2luSGFzU2FuZGJveFByb2ZpbGUoY29uc3QgU3RyaW5n
JiBidW5kbGVJZGVudGlmaWVyKQotewotICAgIGlmIChidW5kbGVJZGVudGlmaWVyLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTlNTdHJpbmcgKnByb2ZpbGVOYW1lID0g
cGx1Z2luU2FuZGJveFByb2ZpbGVOYW1lKGJ1bmRsZUlkZW50aWZpZXIpOwotICAgIE5TU3RyaW5n
ICpwcm9maWxlUGF0aCA9IFtwbHVnaW5TYW5kYm94UHJvZmlsZURpcmVjdG9yeSgpIHN0cmluZ0J5
QXBwZW5kaW5nUGF0aENvbXBvbmVudDpwcm9maWxlTmFtZV07Ci0KLSAgICByZXR1cm4gW1tOU0Zp
bGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnByb2ZpbGVQYXRoXTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggZjc2MTRjZDIwM2EzYTk1MGI4
MjYwNWRkZDk4Yzc2NjU4YTJmOTg2NS4uZGMwZGIzNmQ4MDJlYTEwOWRlM2Y3ZjQ5NzFjN2Q0NGQx
NjQwMjA3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaApAQCAtNDksMTAgKzQ5LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Jl
bmRlclRoZW1lSU9TLmg+CiAjZW5kaWYKIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQotI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luRGF0YS5oPgotI2VuZGlmCi0KICNpZiBQTEFURk9S
TShHVEspIHx8IFBMQVRGT1JNKFdQRSkKICNpbmNsdWRlIDx3dGYvTWVtb3J5UHJlc3N1cmVIYW5k
bGVyLmg+CiAjZW5kaWYKQEAgLTE3MywxMCArMTY5LDYgQEAgc3RydWN0IFdlYlByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMgewogICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPiBub3RpZmljYXRpb25Q
ZXJtaXNzaW9uczsKICNlbmRpZgogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0g
ICAgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPFN0cmluZywgV2ViQ29y
ZTo6UGx1Z2luTG9hZENsaWVudFBvbGljeT4+PiBwbHVnaW5Mb2FkQ2xpZW50UG9saWNpZXM7Ci0j
ZW5kaWYKLQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG5l
dHdvcmtBVFNDb250ZXh0OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YS5jcHAKaW5kZXggYWE3MzkwZDZhNGMzZTI4M2E2YzFjODZmOTFi
MWY3NjFiMDA0ZDRiOC4uZjM3MjkwMTM4YjRmYWZmMzIzNTNiMmFjZGFkZTgzNDAwZGE5Y2M4YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGEu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhLmNw
cApAQCAtNjUsOSArNjUsNiBAQCB2b2lkIFdlYnNpdGVEYXRhOjplbmNvZGUoSVBDOjpFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgZW50cmllczsKICAgICBlbmNvZGVy
IDw8IGhvc3ROYW1lc1dpdGhDb29raWVzOwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQotICAgIGVuY29kZXIgPDwgaG9zdE5hbWVzV2l0aFBsdWdpbkRhdGE7Ci0jZW5kaWYKICAgICBl
bmNvZGVyIDw8IGhvc3ROYW1lc1dpdGhIU1RTQ2FjaGU7CiAjaWYgRU5BQkxFKElOVEVMTElHRU5U
X1RSQUNLSU5HX1BSRVZFTlRJT04pCiAgICAgZW5jb2RlciA8PCByZWdpc3RyYWJsZURvbWFpbnNX
aXRoUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKQEAgLTgwLDEwICs3Nyw2IEBAIGJvb2wgV2Vic2l0
ZURhdGE6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIFdlYnNpdGVEYXRhJiByZXN1bHQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5o
b3N0TmFtZXNXaXRoQ29va2llcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5ob3N0
TmFtZXNXaXRoUGx1Z2luRGF0YSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgogICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lmhvc3ROYW1lc1dpdGhIU1RTQ2FjaGUpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAjaWYgRU5BQkxFKElOVEVMTElHRU5UX1RSQUNLSU5HX1BSRVZF
TlRJT04pCkBAIC0xMTgsMTAgKzExMSw2IEBAIFdlYnNpdGVEYXRhUHJvY2Vzc1R5cGUgV2Vic2l0
ZURhdGE6Om93bmVyUHJvY2VzcyhXZWJzaXRlRGF0YVR5cGUgZGF0YVR5cGUpCiAgICAgICAgIHJl
dHVybiBXZWJzaXRlRGF0YVByb2Nlc3NUeXBlOjpOZXR3b3JrOwogICAgIGNhc2UgV2Vic2l0ZURh
dGFUeXBlOjpTZWFyY2hGaWVsZFJlY2VudFNlYXJjaGVzOgogICAgICAgICByZXR1cm4gV2Vic2l0
ZURhdGFQcm9jZXNzVHlwZTo6VUk7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0g
ICAgY2FzZSBXZWJzaXRlRGF0YVR5cGU6OlBsdWdJbkRhdGE6Ci0gICAgICAgIHJldHVybiBXZWJz
aXRlRGF0YVByb2Nlc3NUeXBlOjpVSTsKLSNlbmRpZgogICAgIGNhc2UgV2Vic2l0ZURhdGFUeXBl
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOgogICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFQcm9j
ZXNzVHlwZTo6TmV0d29yazsKICAgICBjYXNlIFdlYnNpdGVEYXRhVHlwZTo6Q3JlZGVudGlhbHM6
CkBAIC0xNjEsOSArMTUwLDYgQEAgV2Vic2l0ZURhdGEgV2Vic2l0ZURhdGE6Omlzb2xhdGVkQ29w
eSgpIGNvbnN0CiAgICAgcmV0dXJuIFdlYnNpdGVEYXRhIHsKICAgICAgICAgY3Jvc3NUaHJlYWRD
b3B5KGVudHJpZXMpLAogICAgICAgICBjcm9zc1RocmVhZENvcHkoaG9zdE5hbWVzV2l0aENvb2tp
ZXMpLAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBjcm9zc1RocmVh
ZENvcHkoaG9zdE5hbWVzV2l0aFBsdWdpbkRhdGEpLAotI2VuZGlmCiAgICAgICAgIGNyb3NzVGhy
ZWFkQ29weShob3N0TmFtZXNXaXRoSFNUU0NhY2hlKSwKICNpZiBFTkFCTEUoSU5URUxMSUdFTlRf
VFJBQ0tJTkdfUFJFVkVOVElPTikKICAgICAgICAgY3Jvc3NUaHJlYWRDb3B5KHJlZ2lzdHJhYmxl
RG9tYWluc1dpdGhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhLmggYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YS5oCmluZGV4IDQ0NGIxYWUxMzE5MzkwYTcxMGY3
Yzc0NGM2NDkwNjljZDBlOTM0MGEuLmJiMjBiMjUxOTIzZjRmZWI5ZDc3YWFkNGZiMmNjNzFmOTQw
YWM0OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGEvV2Vic2l0ZURh
dGEuaApAQCAtNTksOSArNTksNiBAQCBzdHJ1Y3QgV2Vic2l0ZURhdGEgewogICAgIFZlY3RvcjxF
bnRyeT4gZW50cmllczsKICAgICBIYXNoU2V0PFN0cmluZz4gaG9zdE5hbWVzV2l0aENvb2tpZXM7
CiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBIYXNoU2V0PFN0cmluZz4g
aG9zdE5hbWVzV2l0aFBsdWdpbkRhdGE7Ci0jZW5kaWYKICAgICBIYXNoU2V0PFN0cmluZz4gaG9z
dE5hbWVzV2l0aEhTVFNDYWNoZTsKICNpZiBFTkFCTEUoSU5URUxMSUdFTlRfVFJBQ0tJTkdfUFJF
VkVOVElPTikKICAgICBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiByZWdpc3Ry
YWJsZURvbWFpbnNXaXRoUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhVHlwZS5oIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFUeXBlLmgKaW5kZXggMzVmNzI5OTQx
NmNiOWQ0ZmIwMmJmOTU2MzMxODI2YTE0YzhhN2Q2OC4uN2E5ZTUwMGZlMWIwOWUzODk1ZGQ3NDNl
MTY1Yzk4OTE4YmU3YThkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGFUeXBlLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGFUeXBlLmgKQEAgLTQxLDkgKzQxLDYgQEAgZW51bSBjbGFzcyBXZWJz
aXRlRGF0YVR5cGUgOiB1aW50MzJfdCB7CiAgICAgTWVkaWFLZXlzID0gMSA8PCA4LAogICAgIEhT
VFNDYWNoZSA9IDEgPDwgOSwKICAgICBTZWFyY2hGaWVsZFJlY2VudFNlYXJjaGVzID0gMSA8PCAx
MCwKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBQbHVnSW5EYXRhID0gMSA8
PCAxMSwKLSNlbmRpZgogICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSAxIDw8IDEyLAogICAg
IENyZWRlbnRpYWxzID0gMSA8PCAxMywKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkBAIC03
NSw5ICs3Miw2IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViS2l0OjpXZWJzaXRl
RGF0YVR5cGU+IHsKICAgICAgICAgV2ViS2l0OjpXZWJzaXRlRGF0YVR5cGU6Ok1lZGlhS2V5cywK
ICAgICAgICAgV2ViS2l0OjpXZWJzaXRlRGF0YVR5cGU6OkhTVFNDYWNoZSwKICAgICAgICAgV2Vi
S2l0OjpXZWJzaXRlRGF0YVR5cGU6OlNlYXJjaEZpZWxkUmVjZW50U2VhcmNoZXMsCi0jaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIFdlYktpdDo6V2Vic2l0ZURhdGFUeXBl
OjpQbHVnSW5EYXRhLAotI2VuZGlmCiAgICAgICAgIFdlYktpdDo6V2Vic2l0ZURhdGFUeXBlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLAogICAgICAgICBXZWJLaXQ6OldlYnNpdGVEYXRhVHlwZTo6
Q3JlZGVudGlhbHMsCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXgg
MTQyN2U3ZTNiYmNmMTFlOWVlMjFkOWJmODc4YmExYzQyYzczMTY0MC4uMGFjZmY1YzY4MDU0Nzhi
M2RhMjgwMzMwMjRmNThlNzY3YzNmMjE2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0xODEsMTEgKzE4MSw2
IEBAIFBsYXRmb3JtL0lQQy9TaGFyZWRGaWxlSGFuZGxlLmNwcCBAbm8tdW5pZnkKIFBsYXRmb3Jt
L0lQQy9TdHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmNwcCBAbm8tdW5pZnkKIFBsYXRmb3JtL0lQQy9T
dHJpbmdSZWZlcmVuY2UuY3BwIEBuby11bmlmeQogCi1QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRy
b2xsZXJQcm94eS5jcHAgQG5vLXVuaWZ5Ci1QbHVnaW5Qcm9jZXNzL1BsdWdpbkNyZWF0aW9uUGFy
YW1ldGVycy5jcHAgQG5vLXVuaWZ5Ci1QbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MuY3BwIEBu
by11bmlmeQotUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5jcHAgQG5vLXVuaWZ5
Ci0KIC8vIFRPRE86IFRoZSBmaWxlcyBoZXJlIG1hcmtlZCBAbm8tdW5pZnkgc2hvdWxkIGJlIHVu
aWZpZWQgb25jZSBHVEsncyBQbHVnaW5Qcm9jZXNzMiBpcyByZW1vdmVkLgogU2hhcmVkL0FjY2Vz
c2liaWxpdHlQcmVmZXJlbmNlcy5jcHAKIFNoYXJlZC9BY3Rpdml0eUFzc2VydGlvbi5jcHAgQG5v
LXVuaWZ5CkBAIC0yOTcsMTggKzI5Miw2IEBAIFNoYXJlZC9EYXRhYmFzZXMvSW5kZXhlZERCL1dl
YklEQlJlc3VsdC5jcHAKIAogU2hhcmVkL0dhbWVwYWQvR2FtZXBhZERhdGEuY3BwCiAKLS8vIFRP
RE86IFRoZXNlIGZpbGVzIHNob3VsZCBiZSB1bmlmaWVkIG9uY2UgR1RLJ3MgUGx1Z2luUHJvY2Vz
czIgaXMgcmVtb3ZlZC4KLVNoYXJlZC9QbHVnaW5zL05QSWRlbnRpZmllckRhdGEuY3BwIEBuby11
bmlmeQotU2hhcmVkL1BsdWdpbnMvTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIuY3BwIEBuby11bmlm
eQotU2hhcmVkL1BsdWdpbnMvTlBPYmplY3RQcm94eS5jcHAgQG5vLXVuaWZ5Ci1TaGFyZWQvUGx1
Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5jcHAgQG5vLXVuaWZ5Ci1TaGFyZWQvUGx1Z2lucy9OUFZh
cmlhbnREYXRhLmNwcCBAbm8tdW5pZnkKLVNoYXJlZC9QbHVnaW5zL1BsdWdpblByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuY3BwIEBuby11bmlmeQotCi0vLyBUT0RPOiBUaGVzZSBmaWxlcyBzaG91
bGQgYmUgdW5pZmllZCBvbmNlIEdUSydzIFBsdWdpblByb2Nlc3MyIGlzIHJlbW92ZWQuCi1TaGFy
ZWQvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbk1vZHVsZS5jcHAgIEBuby11bmlmeQot
U2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvUGx1Z2luSW5mb3JtYXRpb24uY3BwIEBuby11bmlmeQot
CiBTaGFyZWQvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGEuY3BwCiAKIFNoYXJlZC9YUi9YUkRldmlj
ZUluZm8uY3BwCkBAIC01MDEsMTAgKzQ4NCw2IEBAIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dl
Yk5vdGlmaWNhdGlvbk1hbmFnZXJNZXNzYWdlSGFuZGxlci5jcHAKIFVJUHJvY2Vzcy9Ob3RpZmlj
YXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eS5jcHAKIFVJUHJvY2Vzcy9Ob3RpZmlj
YXRpb25zL1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcAogCi1VSVByb2Nlc3MvUGx1Z2lucy9Q
bHVnaW5JbmZvU3RvcmUuY3BwCi1VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzTWFuYWdl
ci5jcHAKLVVJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5jcHAKLQogVUlQcm9j
ZXNzL1VzZXJDb250ZW50L1dlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyLmNwcAogVUlQcm9jZXNzL1Vz
ZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcAogCkBAIC02NzQsMjIg
KzY1Myw5IEBAIFdlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2Vy
LmNwcAogCiAvLyBUT0RPOiBUaGVzZSBmaWxlcyBzaG91bGQgYmUgdW5pZmllZCBvbmNlIEdUSydz
IFBsdWdpblByb2Nlc3MyIGlzIHJlbW92ZWQuCiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmNw
cCBAbm8tdW5pZnkKLVdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5j
cHAgQG5vLXVuaWZ5Ci1XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25N
YW5hZ2VyLmNwcCBAbm8tdW5pZnkKLVdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5jcHAg
QG5vLXVuaWZ5CiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgQG5vLXVuaWZ5CiBX
ZWJQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luSW5mb1Byb3ZpZGVyLmNwcCBAbm8tdW5pZnkKIAot
Ly8gVE9ETzogVGhlc2UgZmlsZXMgc2hvdWxkIGJlIHVuaWZpZWQgb25jZSBHVEsncyBQbHVnaW5Q
cm9jZXNzMiBpcyByZW1vdmVkLgotV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRo
b2QuY3BwIEBuby11bmlmeQotV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3Qu
Y3BwIEBuby11bmlmeQotV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3Bw
IEBuby11bmlmeQotV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1h
cC5jcHAgQG5vLXVuaWZ5Ci1XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lVXRp
bGl0aWVzLmNwcCBAbm8tdW5pZnkKLVdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2Fw
ZUJyb3dzZXJGdW5jcy5jcHAgQG5vLXVuaWZ5Ci1XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TmV0c2NhcGVQbHVnaW4uY3BwIEBuby11bmlmeQotV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L05ldHNjYXBlUGx1Z2luU3RyZWFtLmNwcCBAbm8tdW5pZnkKLQogV2ViUHJvY2Vzcy9TcGVlY2gv
U3BlZWNoUmVjb2duaXRpb25SZWFsdGltZU1lZGlhU291cmNlTWFuYWdlci5jcHAKIAogV2ViUHJv
Y2Vzcy9TdG9yYWdlL1dlYlNXQ2xpZW50Q29ubmVjdGlvbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4
dAppbmRleCA3M2RmOTVjODA4NTBmMTkxYjliNjk4MjQzY2EyMGNhNzQ2NTJjOTQ2Li4wY2JlMzdm
ZmE3MGZhN2NiNTZkZWYwOTgyZGJhMGUzZjRiZjk4ZDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0
CkBAIC0xMDksMTEgKzEwOSw2IEBAIFBsYXRmb3JtL21hYy9TdHJpbmdVdGlsaXRpZXMubW0KIAog
UGxhdGZvcm0vdW5peC9FbnZpcm9ubWVudFV0aWxpdGllcy5jcHAKIAotUGx1Z2luUHJvY2Vzcy9F
bnRyeVBvaW50L0NvY29hL1hQQ1NlcnZpY2UvUGx1Z2luU2VydmljZUVudHJ5UG9pbnQubW0gQG5v
LXVuaWZ5Ci0KLVBsdWdpblByb2Nlc3MvbWFjL1BsdWdpbkNvbnRyb2xsZXJQcm94eU1hYy5tbSBA
bm8tdW5pZnkKLVBsdWdpblByb2Nlc3MvbWFjL1BsdWdpblByb2Nlc3NNYWMubW0gQG5vLXVuaWZ5
Ci0KIFNoYXJlZC9BUEkvYy9jZi9XS0Vycm9yQ0YuY3BwCiBTaGFyZWQvQVBJL2MvY2YvV0tTdHJp
bmdDRi5tbQogU2hhcmVkL0FQSS9jL2NmL1dLVVJMQ0YubW0KQEAgLTI0MCwxMSArMjM1LDYgQEAg
U2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHAKIFNo
YXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVDdXJzb3IuY3BwCiBTaGFyZWQv
bWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuY3BwCiAKLVNoYXJlZC9QbHVn
aW5zL21hYy9QbHVnaW5TYW5kYm94UHJvZmlsZS5tbQotCi1TaGFyZWQvUGx1Z2lucy9OZXRzY2Fw
ZS9tYWMvTmV0c2NhcGVQbHVnaW5Nb2R1bGVNYWMubW0KLVNoYXJlZC9QbHVnaW5zL05ldHNjYXBl
L21hYy9QbHVnaW5JbmZvcm1hdGlvbk1hYy5tbQotCiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1Jl
bW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxh
eWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbi5tbQogU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1v
dGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIubW0KQEAgLTU1NywxMCArNTQ3LDYgQEAgVUlQcm9j
ZXNzL01lZGlhL2NvY29hL01lZGlhVXNhZ2VNYW5hZ2VyQ29jb2EubW0KIAogVUlQcm9jZXNzL05l
dHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNw
cAogCi1VSVByb2Nlc3MvUGx1Z2lucy9tYWMvUGx1Z2luSW5mb1N0b3JlTWFjLm1tCi1VSVByb2Nl
c3MvUGx1Z2lucy9tYWMvUGx1Z2luUHJvY2Vzc01hbmFnZXJNYWMubW0KLVVJUHJvY2Vzcy9QbHVn
aW5zL21hYy9QbHVnaW5Qcm9jZXNzUHJveHlNYWMubW0KLQogVUlQcm9jZXNzL1JlbW90ZUxheWVy
VHJlZS9jb2NvYS9SZW1vdGVMYXllclRyZWVMYXllcnMubW0KIAogVUlQcm9jZXNzL1JlbW90ZUxh
eWVyVHJlZS9tYWMvU2Nyb2xsZXJNYWMubW0KQEAgLTY2OSw5ICs2NTUsNiBAQCBXZWJQcm9jZXNz
L0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yVUlNYWMubW0KIAogV2ViUHJvY2Vzcy9NZWRpYUNh
Y2hlL1dlYk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIuY3BwCiAKLVdlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9tYWMvTmV0c2NhcGVQbHVnaW5NYWMubW0KLVdlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9tYWMvUGx1Z2luUHJveHlNYWMubW0KLQogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQ
bHVnaW4ubW0KIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luQW5ub3RhdGlvbi5tbQog
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uLm1tCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTG9hZGVyQ2xpZW50LmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTG9hZGVyQ2xpZW50LmgKaW5kZXggYzM2NGFl
ZjVkOTA2ODJlNzI0ZWIzNzMzZTk5OTdhYmJmZThiZDcwMy4uOWE3MzAxYjgwMWViYzAxOWJkOThi
NmZmNTgyYThlNzRlYTQwZjA4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUxvYWRlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9B
UElMb2FkZXJDbGllbnQuaApAQCAtMjYsNyArMjYsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJBUElEYXRhLmgiCi0jaW5jbHVkZSAiUGx1Z2luTW9kdWxlSW5mby5oIgogI2luY2x1ZGUg
IlNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxv
YWRlclR5cGVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9MYXlvdXRNaWxlc3RvbmUuaD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uQ2xpZW50Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkNsaWVudC5oCmluZGV4
IDFjOWZhM2YyMDZiMjk2YWU3ZmQ3ZWI3ZWJhY2NkM2UxNjU1ZTI1NGIuLjU2MjM0MDE0NTlkYTVm
ZTMwZjQ5MWE0MWZiMzQ3YTY3NTcyMDJjNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSU5hdmlnYXRpb25DbGllbnQuaApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1
ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24uaCIKICNpbmNsdWRlICJBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmgiCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25EZWNp
c2lvbkxpc3RlbmVyLmgiCi0jaW5jbHVkZSAiUGx1Z2luTW9kdWxlSW5mby5oIgogI2luY2x1ZGUg
IlByb2Nlc3NUZXJtaW5hdGlvblJlYXNvbi5oIgogI2luY2x1ZGUgIlNhbWVEb2N1bWVudE5hdmln
YXRpb25UeXBlLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgiCkBA
IC0xMzQsMTUgKzEzMyw2IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdmlydHVhbCB2b2lk
IGNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbihXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdURjo6
VVJMJiYsIFdlYkNvcmU6OkNvbnRlbnRSdWxlTGlzdFJlc3VsdHMmJikgeyB9OwotICAgIAotI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHZpcnR1YWwgYm9vbCBkaWRGYWlsVG9J
bml0aWFsaXplUGx1Z0luKFdlYktpdDo6V2ViUGFnZVByb3h5JiwgQVBJOjpEaWN0aW9uYXJ5Jikg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZGlkQmxvY2tJbnNlY3VyZVBsdWdp
blZlcnNpb24oV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBBUEk6OkRpY3Rpb25hcnkmKSB7IHJldHVy
biBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZWNpZGVQb2xpY3lGb3JQbHVnaW5Mb2FkKFdl
YktpdDo6V2ViUGFnZVByb3h5JiwgV2ViS2l0OjpQbHVnaW5Nb2R1bGVMb2FkUG9saWN5IGN1cnJl
bnRQbHVnaW5Mb2FkUG9saWN5LCBEaWN0aW9uYXJ5JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChX
ZWJLaXQ6OlBsdWdpbk1vZHVsZUxvYWRQb2xpY3ksIGNvbnN0IFdURjo6U3RyaW5nJik+JiYgY29t
cGxldGlvbkhhbmRsZXIpCi0gICAgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjdXJyZW50
UGx1Z2luTG9hZFBvbGljeSwgeyB9KTsKLSAgICB9Ci0jZW5kaWYKIAogI2lmIEVOQUJMRShXRUJH
TCkKICAgICB2aXJ0dWFsIHZvaWQgd2ViR0xMb2FkUG9saWN5KFdlYktpdDo6V2ViUGFnZVByb3h5
JiwgY29uc3QgV1RGOjpVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OldlYkdM
TG9hZFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0IHsgY29tcGxldGlvbkhhbmRs
ZXIoV2ViQ29yZTo6V2ViR0xMb2FkUG9saWN5OjpXZWJHTEFsbG93Q3JlYXRpb24pOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJVUlDbGllbnQuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElVSUNsaWVudC5oCmluZGV4IDU0OTEwMmViNWZlZWFi
MDA5YmY5NDc3NTMyZDRmOWQ1MDFlYThlNWIuLjY1OGNlYmMzYzI4NWFhNmQ4OTgyNjk5NTBiZWJk
ZmRjZmIxYzk3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElV
SUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElVSUNsaWVudC5o
CkBAIC05Nyw5ICs5Nyw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRTdGF0dXNU
ZXh0KFdlYktpdDo6V2ViUGFnZVByb3h5KiwgY29uc3QgV1RGOjpTdHJpbmcmKSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV2ViS2l0OjpXZWJQYWdlUHJveHkm
LCBjb25zdCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHREYXRhJiwgT3B0aW9uU2V0PFdlYktpdDo6
V2ViRXZlbnQ6Ok1vZGlmaWVyPiwgT2JqZWN0KikgeyB9Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCi0gICAgdmlydHVhbCB2b2lkIHVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tl
ZChXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdLUGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24sIERp
Y3Rpb25hcnkmKSB7IH0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAog
ICAgIHZpcnR1YWwgdm9pZCBkaWROb3RIYW5kbGVLZXlFdmVudChXZWJLaXQ6OldlYlBhZ2VQcm94
eSosIGNvbnN0IFdlYktpdDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBkaWROb3RIYW5kbGVXaGVlbEV2ZW50KFdlYktpdDo6V2ViUGFnZVByb3h5KiwgY29u
c3QgV2ViS2l0OjpOYXRpdmVXZWJXaGVlbEV2ZW50JikgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCmluZGV4IGQ4OTg3ZWI5YjdkZjYyYWE4MDg0NTVmNzVhZWMx
MzZjYzUzM2JlNWQuLjUxMmIyYmM2OTUyNGI3OTkwMTg1NjUyY2MxMzZjZDVhMzg0YTY2Y2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCkBAIC0yOSw3ICsyOSw2
IEBACiAKICNpbmNsdWRlICJDYWNoZU1vZGVsLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVI
aXRUZXN0UmVzdWx0TWVkaWFUeXBlLmgiCi0jaW5jbHVkZSAiUGx1Z2luTW9kdWxlSW5mby5oIgog
I2luY2x1ZGUgIlByb2Nlc3NUZXJtaW5hdGlvblJlYXNvbi5oIgogI2luY2x1ZGUgIldLQnVuZGxl
SGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIldLQ29udGV4dC5oIgpAQCAtNDE4LDc4ICs0MTcs
NiBAQCBpbmxpbmUgV0tTdG9yYWdlQmxvY2tpbmdQb2xpY3kgdG9BUEkoV2ViQ29yZTo6U3RvcmFn
ZUJsb2NraW5nUG9saWN5IHBvbGljeSkKICAgICByZXR1cm4ga1dLQWxsb3dBbGxTdG9yYWdlOwog
fQogCi1pbmxpbmUgV0tQbHVnaW5Mb2FkUG9saWN5IHRvV0tQbHVnaW5Mb2FkUG9saWN5KFBsdWdp
bk1vZHVsZUxvYWRQb2xpY3kgcGx1Z2luTW9kdWxlTG9hZFBvbGljeSkKLXsKLSAgICBzd2l0Y2gg
KHBsdWdpbk1vZHVsZUxvYWRQb2xpY3kpIHsKLSAgICBjYXNlIFBsdWdpbk1vZHVsZUxvYWROb3Jt
YWxseToKLSAgICAgICAgcmV0dXJuIGtXS1BsdWdpbkxvYWRQb2xpY3lMb2FkTm9ybWFsbHk7Ci0g
ICAgY2FzZSBQbHVnaW5Nb2R1bGVMb2FkVW5zYW5kYm94ZWQ6Ci0gICAgICAgIHJldHVybiBrV0tQ
bHVnaW5Mb2FkUG9saWN5TG9hZFVuc2FuZGJveGVkOwotICAgIGNhc2UgUGx1Z2luTW9kdWxlQmxv
Y2tlZEZvclNlY3VyaXR5OgotICAgICAgICByZXR1cm4ga1dLUGx1Z2luTG9hZFBvbGljeUJsb2Nr
ZWQ7Ci0gICAgY2FzZSBQbHVnaW5Nb2R1bGVCbG9ja2VkRm9yQ29tcGF0aWJpbGl0eToKLSAgICAg
ICAgcmV0dXJuIGtXS1BsdWdpbkxvYWRQb2xpY3lCbG9ja2VkRm9yQ29tcGF0aWJpbGl0eTsKLSAg
ICB9Ci0gICAgCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGtXS1BsdWdp
bkxvYWRQb2xpY3lCbG9ja2VkOwotfQotCi1pbmxpbmUgV0tQbHVnaW5Mb2FkQ2xpZW50UG9saWN5
IHRvV0tQbHVnaW5Mb2FkQ2xpZW50UG9saWN5KFdlYkNvcmU6OlBsdWdpbkxvYWRDbGllbnRQb2xp
Y3kgUGx1Z2luTG9hZENsaWVudFBvbGljeSkKLXsKLSAgICBzd2l0Y2ggKFBsdWdpbkxvYWRDbGll
bnRQb2xpY3kpIHsKLSAgICBjYXNlIFdlYkNvcmU6OlBsdWdpbkxvYWRDbGllbnRQb2xpY3k6OlVu
ZGVmaW5lZDoKLSAgICAgICAgcmV0dXJuIGtXS1BsdWdpbkxvYWRDbGllbnRQb2xpY3lVbmRlZmlu
ZWQ7Ci0gICAgY2FzZSBXZWJDb3JlOjpQbHVnaW5Mb2FkQ2xpZW50UG9saWN5OjpCbG9jazoKLSAg
ICAgICAgcmV0dXJuIGtXS1BsdWdpbkxvYWRDbGllbnRQb2xpY3lCbG9jazsKLSAgICBjYXNlIFdl
YkNvcmU6OlBsdWdpbkxvYWRDbGllbnRQb2xpY3k6OkFzazoKLSAgICAgICAgcmV0dXJuIGtXS1Bs
dWdpbkxvYWRDbGllbnRQb2xpY3lBc2s7Ci0gICAgY2FzZSBXZWJDb3JlOjpQbHVnaW5Mb2FkQ2xp
ZW50UG9saWN5OjpBbGxvdzoKLSAgICAgICAgcmV0dXJuIGtXS1BsdWdpbkxvYWRDbGllbnRQb2xp
Y3lBbGxvdzsKLSAgICBjYXNlIFdlYkNvcmU6OlBsdWdpbkxvYWRDbGllbnRQb2xpY3k6OkFsbG93
QWx3YXlzOgotICAgICAgICByZXR1cm4ga1dLUGx1Z2luTG9hZENsaWVudFBvbGljeUFsbG93QWx3
YXlzOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBrV0tQ
bHVnaW5Mb2FkQ2xpZW50UG9saWN5QmxvY2s7Ci19Ci0KLWlubGluZSBQbHVnaW5Nb2R1bGVMb2Fk
UG9saWN5IHRvUGx1Z2luTW9kdWxlTG9hZFBvbGljeShXS1BsdWdpbkxvYWRQb2xpY3kgcGx1Z2lu
TG9hZFBvbGljeSkKLXsKLSAgICBzd2l0Y2ggKHBsdWdpbkxvYWRQb2xpY3kpIHsKLSAgICBjYXNl
IGtXS1BsdWdpbkxvYWRQb2xpY3lMb2FkTm9ybWFsbHk6Ci0gICAgICAgIHJldHVybiBQbHVnaW5N
b2R1bGVMb2FkTm9ybWFsbHk7Ci0gICAgY2FzZSBrV0tQbHVnaW5Mb2FkUG9saWN5QmxvY2tlZDoK
LSAgICAgICAgcmV0dXJuIFBsdWdpbk1vZHVsZUJsb2NrZWRGb3JTZWN1cml0eTsKLSAgICBjYXNl
IGtXS1BsdWdpbkxvYWRQb2xpY3lCbG9ja2VkRm9yQ29tcGF0aWJpbGl0eToKLSAgICAgICAgcmV0
dXJuIFBsdWdpbk1vZHVsZUJsb2NrZWRGb3JDb21wYXRpYmlsaXR5OwotICAgIGNhc2Uga1dLUGx1
Z2luTG9hZFBvbGljeUxvYWRVbnNhbmRib3hlZDoKLSAgICAgICAgcmV0dXJuIFBsdWdpbk1vZHVs
ZUxvYWRVbnNhbmRib3hlZDsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIFBsdWdpbk1vZHVsZUJsb2NrZWRGb3JTZWN1cml0eTsKLX0KLQotaW5saW5l
IFdlYkNvcmU6OlBsdWdpbkxvYWRDbGllbnRQb2xpY3kgdG9QbHVnaW5Mb2FkQ2xpZW50UG9saWN5
KFdLUGx1Z2luTG9hZENsaWVudFBvbGljeSBwbHVnaW5Mb2FkQ2xpZW50UG9saWN5KQotewotICAg
IHN3aXRjaCAocGx1Z2luTG9hZENsaWVudFBvbGljeSkgewotICAgIGNhc2Uga1dLUGx1Z2luTG9h
ZENsaWVudFBvbGljeVVuZGVmaW5lZDoKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlBsdWdpbkxv
YWRDbGllbnRQb2xpY3k6OlVuZGVmaW5lZDsKLSAgICBjYXNlIGtXS1BsdWdpbkxvYWRDbGllbnRQ
b2xpY3lCbG9jazoKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlBsdWdpbkxvYWRDbGllbnRQb2xp
Y3k6OkJsb2NrOwotICAgIGNhc2Uga1dLUGx1Z2luTG9hZENsaWVudFBvbGljeUFzazoKLSAgICAg
ICAgcmV0dXJuIFdlYkNvcmU6OlBsdWdpbkxvYWRDbGllbnRQb2xpY3k6OkFzazsKLSAgICBjYXNl
IGtXS1BsdWdpbkxvYWRDbGllbnRQb2xpY3lBbGxvdzoKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6
OlBsdWdpbkxvYWRDbGllbnRQb2xpY3k6OkFsbG93OwotICAgIGNhc2Uga1dLUGx1Z2luTG9hZENs
aWVudFBvbGljeUFsbG93QWx3YXlzOgotICAgICAgICByZXR1cm4gV2ViQ29yZTo6UGx1Z2luTG9h
ZENsaWVudFBvbGljeTo6QWxsb3dBbHdheXM7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OlBsdWdpbkxvYWRDbGllbnRQb2xpY3k6OkJsb2Nr
OwotfQotCiBpbmxpbmUgV2ViQ29yZTo6V2ViR0xMb2FkUG9saWN5IHRvV2ViR0xMb2FkUG9saWN5
KFdLV2ViR0xMb2FkUG9saWN5IHdlYkdMTG9hZFBvbGljeSkKIHsKICAgICBzd2l0Y2ggKHdlYkdM
TG9hZFBvbGljeSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5j
cHAKaW5kZXggZjFlYmNiNTljZGM1MmIxNWQ5M2ViZmY5YmVkYjNkMTA1ZjJjYWQ0MS4uYzI5YWY4
MTdmZDhiMGVjYWIzYTc3OTZhMTIyZGI2NDJjZjA5MGY3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCkBAIC0zMzQsMjEgKzMzNCwxMyBAQCB2b2lkIFdL
Q29udGV4dFNldFNob3VsZFVzZUZvbnRTbW9vdGhpbmcoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYs
IGJvb2wgdXNlRm9udFNtbwogCiB2b2lkIFdLQ29udGV4dFNldEFkZGl0aW9uYWxQbHVnaW5zRGly
ZWN0b3J5KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBwbHVnaW5zRGlyZWN0
b3J5KQogewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIFdlYktpdDo6dG9J
bXBsKGNvbnRleHRSZWYpLT5zZXRBZGRpdGlvbmFsUGx1Z2luc0RpcmVjdG9yeShXZWJLaXQ6OnRv
SW1wbChwbHVnaW5zRGlyZWN0b3J5KS0+c3RyaW5nKCkpOwotI2Vsc2UKICAgICBVTlVTRURfUEFS
QU0oY29udGV4dFJlZik7CiAgICAgVU5VU0VEX1BBUkFNKHBsdWdpbnNEaXJlY3RvcnkpOwotI2Vu
ZGlmCiB9CiAKIHZvaWQgV0tDb250ZXh0UmVmcmVzaFBsdWdJbnMoV0tDb250ZXh0UmVmIGNvbnRl
eHQpCiB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgV2ViS2l0Ojp0b0lt
cGwoY29udGV4dCktPnJlZnJlc2hQbHVnaW5zKCk7Ci0jZWxzZQogICAgIFVOVVNFRF9QQVJBTShj
b250ZXh0KTsKLSNlbmRpZgogfQogCiB2b2lkIFdLQ29udGV4dFJlZ2lzdGVyVVJMU2NoZW1lQXNF
bXB0eURvY3VtZW50KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiB1cmxTY2hl
bWUpCkBAIC01NjEsMjYgKzU1MywxMCBAQCB2b2lkIFdLQ29udGV4dFRlcm1pbmF0ZVNlcnZpY2VX
b3JrZXJzKFdLQ29udGV4dFJlZiBjb250ZXh0KQogCiB2b2lkIFdLQ29udGV4dEFkZFN1cHBvcnRl
ZFBsdWdpbihXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tTdHJpbmdSZWYgZG9tYWluUmVmLCBX
S1N0cmluZ1JlZiBuYW1lUmVmLCBXS0FycmF5UmVmIG1pbWVUeXBlc1JlZiwgV0tBcnJheVJlZiBl
eHRlbnNpb25zUmVmKQogewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIEhh
c2hTZXQ8U3RyaW5nPiBtaW1lVHlwZXM7Ci0gICAgSGFzaFNldDxTdHJpbmc+IGV4dGVuc2lvbnM7
Ci0KLSAgICBzaXplX3QgY291bnQgPSBXS0FycmF5R2V0U2l6ZShtaW1lVHlwZXNSZWYpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgbWltZVR5cGVzLmFk
ZChXZWJLaXQ6OnRvV1RGU3RyaW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0
SXRlbUF0SW5kZXgobWltZVR5cGVzUmVmLCBpKSkpKTsKLSAgICBjb3VudCA9IFdLQXJyYXlHZXRT
aXplKGV4dGVuc2lvbnNSZWYpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkKLSAgICAgICAgZXh0ZW5zaW9ucy5hZGQoV2ViS2l0Ojp0b1dURlN0cmluZyhzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KGV4dGVuc2lvbnNSZWYsIGkpKSkp
OwotCi0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPmFkZFN1cHBvcnRlZFBsdWdpbihX
ZWJLaXQ6OnRvV1RGU3RyaW5nKGRvbWFpblJlZiksIFdlYktpdDo6dG9XVEZTdHJpbmcobmFtZVJl
ZiksIFdURk1vdmUobWltZVR5cGVzKSwgV1RGTW92ZShleHRlbnNpb25zKSk7Ci0jZW5kaWYKIH0K
IAogdm9pZCBXS0NvbnRleHRDbGVhclN1cHBvcnRlZFBsdWdpbnMoV0tDb250ZXh0UmVmIGNvbnRl
eHRSZWYpCiB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgV2ViS2l0Ojp0
b0ltcGwoY29udGV4dFJlZiktPmNsZWFyU3VwcG9ydGVkUGx1Z2lucygpOwotI2VuZGlmCiB9CiAK
IHZvaWQgV0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoV0tDb250
ZXh0UmVmIGNvbnRleHRSZWYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS1BhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNw
cAppbmRleCBhOGRhN2ZkNDg1YTQ3NjQ5OTY0NDdmNjI4MmE3OWYyMGE0ODc5MjFlLi42N2E3NjA1
ZmY1ZWE5ZGZlOWQxOWJlYTFiNTY0ZWIyYzFkMWU1NzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLUGFnZS5jcHAKQEAgLTY0LDcgKzY0LDYgQEAKICNpbmNsdWRlICJOYXZpZ2F0
aW9uQWN0aW9uRGF0YS5oIgogI2luY2x1ZGUgIk5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0
LmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudC5oIgotI2luY2x1ZGUgIlBsdWdpbkluZm9ybWF0aW9u
LmgiCiAjaW5jbHVkZSAiUHJpbnRJbmZvLmgiCiAjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdC5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgpAQCAtMTgwMSwzNyAr
MTgwMCw2IEBAIHZvaWQgV0tQYWdlU2V0UGFnZVVJQ2xpZW50KFdLUGFnZVJlZiBwYWdlUmVmLCBj
b25zdCBXS1BhZ2VVSUNsaWVudEJhc2UqIHdrQ2xpZW50CiAgICAgICAgICAgICBtX2NsaWVudC5t
b3VzZURpZE1vdmVPdmVyRWxlbWVudCh0b0FQSSgmcGFnZSksIHRvQVBJKGFwaUhpdFRlc3RSZXN1
bHQucHRyKCkpLCB0b0FQSShtb2RpZmllcnMpLCB0b0FQSSh1c2VyRGF0YSksIG1fY2xpZW50LmJh
c2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQotICAgICAgICB2b2lkIHVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZChXZWJQYWdl
UHJveHkmIHBhZ2UsIFdLUGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24gcGx1Z2luVW5hdmFpbGFi
aWxpdHlSZWFzb24sIEFQSTo6RGljdGlvbmFyeSYgcGx1Z2luSW5mb3JtYXRpb24pIGZpbmFsCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChwbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiA9PSBr
V0tQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvblBsdWdpbk1pc3NpbmcpIHsKLSAgICAgICAgICAg
ICAgICBpZiAobV9jbGllbnQubWlzc2luZ1BsdWdpbkJ1dHRvbkNsaWNrZWRfZGVwcmVjYXRlZEZv
clVzZVdpdGhWMCkKLSAgICAgICAgICAgICAgICAgICAgbV9jbGllbnQubWlzc2luZ1BsdWdpbkJ1
dHRvbkNsaWNrZWRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMCgKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRvQVBJKCZwYWdlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvQVBJKHBsdWdpbklu
Zm9ybWF0aW9uLmdldDxBUEk6OlN0cmluZz4ocGx1Z2luSW5mb3JtYXRpb25NSU1FVHlwZUtleSgp
KSksCi0gICAgICAgICAgICAgICAgICAgICAgICB0b0FQSShwbHVnaW5JbmZvcm1hdGlvbi5nZXQ8
QVBJOjpTdHJpbmc+KHBsdWdpbkluZm9ybWF0aW9uUGx1Z2luVVJMS2V5KCkpKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRvQVBJKHBsdWdpbkluZm9ybWF0aW9uLmdldDxBUEk6OlN0cmluZz4o
cGx1Z2luSW5mb3JtYXRpb25QbHVnaW5zcGFnZUF0dHJpYnV0ZVVSTEtleSgpKSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAobV9jbGllbnQudW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlj
a2VkX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjEpCi0gICAgICAgICAgICAgICAgbV9jbGllbnQudW5h
dmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjEoCi0gICAg
ICAgICAgICAgICAgICAgIHRvQVBJKCZwYWdlKSwKLSAgICAgICAgICAgICAgICAgICAgcGx1Z2lu
VW5hdmFpbGFiaWxpdHlSZWFzb24sCi0gICAgICAgICAgICAgICAgICAgIHRvQVBJKHBsdWdpbklu
Zm9ybWF0aW9uLmdldDxBUEk6OlN0cmluZz4ocGx1Z2luSW5mb3JtYXRpb25NSU1FVHlwZUtleSgp
KSksCi0gICAgICAgICAgICAgICAgICAgIHRvQVBJKHBsdWdpbkluZm9ybWF0aW9uLmdldDxBUEk6
OlN0cmluZz4ocGx1Z2luSW5mb3JtYXRpb25QbHVnaW5VUkxLZXkoKSkpLAotICAgICAgICAgICAg
ICAgICAgICB0b0FQSShwbHVnaW5JbmZvcm1hdGlvbi5nZXQ8QVBJOjpTdHJpbmc+KHBsdWdpbklu
Zm9ybWF0aW9uUGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkxLZXkoKSkpLAotICAgICAgICAgICAgICAg
ICAgICBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotCi0gICAgICAgICAgICBpZiAobV9jbGll
bnQudW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkKQotICAgICAgICAgICAgICAgIG1fY2xp
ZW50LnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZCgKLSAgICAgICAgICAgICAgICAgICAg
dG9BUEkoJnBhZ2UpLAotICAgICAgICAgICAgICAgICAgICBwbHVnaW5VbmF2YWlsYWJpbGl0eVJl
YXNvbiwKLSAgICAgICAgICAgICAgICAgICAgdG9BUEkoJnBsdWdpbkluZm9ybWF0aW9uKSwKLSAg
ICAgICAgICAgICAgICAgICAgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKLSAgICAgICAgfQot
I2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCiAgICAgICAgIHZvaWQgZGlk
Tm90SGFuZGxlS2V5RXZlbnQoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBOYXRpdmVXZWJLZXli
b2FyZEV2ZW50JiBldmVudCkgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2Ns
aWVudC5kaWROb3RIYW5kbGVLZXlFdmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAKaW5kZXggYmVkODMxNmYzNzU4ZjkzMzMwMTRjMmZiZTJm
MmQyNWMxODk1OWJjYS4uMjE5MDUwOTlmNjVkMzY5OTNjMWFjZjE2OGVlYjg0ZGQ5NTdlM2I5YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAK
QEAgLTI1LDcgKzI1LDYgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaW5jbHVkZSAiUGx1
Z2luUHJvY2Vzc01hbmFnZXIuaCIKICNpbmNsdWRlICJXS1ByZWZlcmVuY2VzUmVmLmgiCiAjaW5j
bHVkZSAiV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIK
QEAgLTEwNjcsOSArMTA2Niw2IEBAIGJvb2wgV0tQcmVmZXJlbmNlc0dldFBsdWdJblNuYXBzaG90
dGluZ0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIAogdm9pZCBXS1By
ZWZlcmVuY2VzU2V0UGx1Z2luU2FuZGJveFByb2ZpbGVzRW5hYmxlZEZvckFsbFBsdWdpbnMoV0tQ
cmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBlbmFibGVkKQogewotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKSAmJiBQTEFURk9STShNQUMpCi0gICAgV2ViS2l0OjpQbHVn
aW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuc2V0RXhwZXJpbWVudGFsUGx1Z0luU2FuZGJv
eFByb2ZpbGVzRW5hYmxlZChlbmFibGVkKTsKLSNlbmRpZgogICAgIHRvSW1wbChwcmVmZXJlbmNl
c1JlZiktPnNldEV4cGVyaW1lbnRhbFBsdWdJblNhbmRib3hQcm9maWxlc0VuYWJsZWQoZW5hYmxl
ZCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL21hYy9X
S0NvbnRleHRQcml2YXRlTWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvbWFj
L1dLQ29udGV4dFByaXZhdGVNYWMubW0KaW5kZXggMjNiNzI4MmM1ZTdkMjc2YjM5OWYzOGNjNjc5
ODU1MGNmNzkzNjIzMy4uNGIwZDE1NWJhOWY5MjM4ODY5MWRlMmI4MTM0Mzk4YmQ4MmNiZThiOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvbWFjL1dLQ29udGV4dFBy
aXZhdGVNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvbWFjL1dLQ29u
dGV4dFByaXZhdGVNYWMubW0KQEAgLTMwLDggKzMwLDYgQEAKICNpbXBvcnQgIkFQSURpY3Rpb25h
cnkuaCIKICNpbXBvcnQgIkFQSU51bWJlci5oIgogI2ltcG9ydCAiQVBJU3RyaW5nLmgiCi0jaW1w
b3J0ICJQbHVnaW5JbmZvU3RvcmUuaCIKLSNpbXBvcnQgIlBsdWdpbkluZm9ybWF0aW9uLmgiCiAj
aW1wb3J0ICJTdHJpbmdVdGlsaXRpZXMuaCIKICNpbXBvcnQgIldLQVBJQ2FzdC5oIgogI2ltcG9y
dCAiV0tQbHVnaW5JbmZvcm1hdGlvbi5oIgpAQCAtNTgsMzggKzU2LDExIEBAIHZvaWQgV0tDb250
ZXh0Q2xlYXJQbHVnaW5DbGllbnRQb2xpY2llcyhXS0NvbnRleHRSZWYpCiAKIFdLRGljdGlvbmFy
eVJlZiBXS0NvbnRleHRDb3B5UGx1Z0luSW5mb0ZvckJ1bmRsZUlkZW50aWZpZXIoV0tDb250ZXh0
UmVmIGNvbnRleHRSZWYsIFdLU3RyaW5nUmVmIHBsdWdJbkJ1bmRsZUlkZW50aWZpZXJSZWYpCiB7
Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgV2ViS2l0OjpQbHVnaW5Nb2R1
bGVJbmZvIHBsdWdpbiA9IFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5wbHVnaW5JbmZvU3Rv
cmUoKS5maW5kUGx1Z2luV2l0aEJ1bmRsZUlkZW50aWZpZXIoV2ViS2l0Ojp0b1dURlN0cmluZyhw
bHVnSW5CdW5kbGVJZGVudGlmaWVyUmVmKSk7Ci0gICAgaWYgKHBsdWdpbi5wYXRoLmlzTnVsbCgp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGF1dG8gZGljdGlvbmFyeSA9IGNyZWF0ZVBsdWdp
bkluZm9ybWF0aW9uRGljdGlvbmFyeShwbHVnaW4pOwotICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJ
KCZkaWN0aW9uYXJ5LmxlYWtSZWYoKSk7Ci0jZWxzZQogICAgIHJldHVybiAwOwotI2VuZGlmCiB9
CiAKIHZvaWQgV0tDb250ZXh0R2V0SW5mb0Zvckluc3RhbGxlZFBsdWdJbnMoV0tDb250ZXh0UmVm
IGNvbnRleHRSZWYsIFdLQ29udGV4dEdldEluZm9Gb3JJbnN0YWxsZWRQbHVnSW5zQmxvY2sgYmxv
Y2spCiB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgVmVjdG9yPFdlYktp
dDo6UGx1Z2luTW9kdWxlSW5mbz4gcGx1Z2lucyA9IFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYp
LT5wbHVnaW5JbmZvU3RvcmUoKS5wbHVnaW5zKCk7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPEFQSTo6
T2JqZWN0Pj4gcGx1Z2luSW5mb0RpY3Rpb25hcmllczsKLSAgICBwbHVnaW5JbmZvRGljdGlvbmFy
aWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGx1Z2lucy5zaXplKCkpOwotCi0gICAgZm9yIChj
b25zdCBhdXRvJiBwbHVnaW46IHBsdWdpbnMpCi0gICAgICAgIHBsdWdpbkluZm9EaWN0aW9uYXJp
ZXMudW5jaGVja2VkQXBwZW5kKGNyZWF0ZVBsdWdpbkluZm9ybWF0aW9uRGljdGlvbmFyeShwbHVn
aW4pKTsKLQotICAgIFJlZlB0cjxBUEk6OkFycmF5PiBhcnJheSA9IEFQSTo6QXJyYXk6OmNyZWF0
ZShXVEZNb3ZlKHBsdWdpbkluZm9EaWN0aW9uYXJpZXMpKTsKLQotICAgIFdlYktpdDo6dG9JbXBs
KGNvbnRleHRSZWYpLT5yZWYoKTsKLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2Jsb2Nr
ID0gbWFrZUJsb2NrUHRyKGJsb2NrKSwgYXJyYXkgPSBXVEZNb3ZlKGFycmF5KSwgY29udGV4dFJl
Zl0gewotICAgICAgICBibG9jayhXZWJLaXQ6OnRvQVBJKGFycmF5LmdldCgpKSwgMCk7Ci0gICAg
Ci0gICAgICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5kZXJlZigpOwotICAgIH0pOwot
I2VuZGlmCiB9CiAKIHZvaWQgV0tDb250ZXh0UmVzZXRIU1RTSG9zdHMoV0tDb250ZXh0UmVmKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5j
ZXMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5t
bQppbmRleCBkNjVlYWRiYzI3MWEzNWQ1YjUzYmZjNmJmMTU4YzY3MTJkYTA4ZDUzLi45YmNmN2Vk
YWYwNmMxOGI2ZDdkOWVmZTU3MDdjMGI5ZjVmNDRlNWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5tbQpAQCAtMjgsNyArMjgsNiBA
QAogCiAjaW1wb3J0ICJBUElBcnJheS5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAi
UGx1Z2luUHJvY2Vzc01hbmFnZXIuaCIKICNpbXBvcnQgIldLTlNBcnJheS5oIgogI2ltcG9ydCAi
V2ViUHJlZmVyZW5jZXMuaCIKICNpbXBvcnQgIl9XS0V4cGVyaW1lbnRhbEZlYXR1cmVJbnRlcm5h
bC5oIgpAQCAtMTEwNyw5ICsxMTA2LDYgQEAgc3RhdGljIFdlYkNvcmU6OkVkaXRhYmxlTGlua0Jl
aGF2aW9yIHRvRWRpdGFibGVMaW5rQmVoYXZpb3IoX1dLRWRpdGFibGVMaW5rQmVoYXYKIAogLSAo
dm9pZClfc2V0RXhwZXJpbWVudGFsUGx1Z0luU2FuZGJveFByb2ZpbGVzRW5hYmxlZDooQk9PTCll
bmFibGVkCiB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgV2ViS2l0OjpQ
bHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuc2V0RXhwZXJpbWVudGFsUGx1Z0luU2Fu
ZGJveFByb2ZpbGVzRW5hYmxlZChlbmFibGVkKTsKLSNlbmRpZgogICAgIF9wcmVmZXJlbmNlcy0+
c2V0RXhwZXJpbWVudGFsUGx1Z0luU2FuZGJveFByb2ZpbGVzRW5hYmxlZChlbmFibGVkKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vz
c1Bvb2wubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9v
bC5tbQppbmRleCA5NmI3MTFiYWQyNTgwMGE5ZmJiZDNkNWQwOTUzZGZiMmU0NmNmY2ExLi43MTM3
YmQ2YjRmZmJlZTMzNmUzMjVmMGIyYjhlNzRiNmNkYTQyNTU5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQpAQCAtMzEsNyArMzEs
NiBAQAogI2ltcG9ydCAiRG93bmxvYWRNYW5hZ2VyLmgiCiAjaW1wb3J0ICJMZWdhY3lEb3dubG9h
ZENsaWVudC5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiUGx1Z2luUHJvY2Vzc01h
bmFnZXIuaCIKICNpbXBvcnQgIlNhbmRib3hVdGlsaXRpZXMuaCIKICNpbXBvcnQgIlVJR2FtZXBh
ZFByb3ZpZGVyLmgiCiAjaW1wb3J0ICJXS0Rvd25sb2FkSW50ZXJuYWwuaCIKQEAgLTQ1NiwxMSAr
NDU1LDcgQEAgc3RhdGljIFJldGFpblB0cjxXS1Byb2Nlc3NQb29sPiYgc2hhcmVkUHJvY2Vzc1Bv
b2woKQogCiAtIChzaXplX3QpX3BsdWdpblByb2Nlc3NDb3VudAogewotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotICAgIHJldHVybiBXZWJLaXQ6OlBsdWdpblByb2Nlc3NNYW5hZ2Vy
OjpzaW5nbGV0b24oKS5wbHVnaW5Qcm9jZXNzZXMoKS5zaXplKCk7Ci0jZWxzZQogICAgIHJldHVy
biAwOwotI2VuZGlmCiB9CiAKIC0gKE5TVUludGVnZXIpX21heGltdW1TdXNwZW5kZWRQYWdlQ291
bnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNp
dGVEYXRhUmVjb3JkSW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYnNpdGVEYXRhUmVjb3JkSW50ZXJuYWwuaAppbmRleCBlMTc4MjZiZmJkZjA5YmI4ODVk
ZjE5MzhkYzk1ZDAwNWFlYTgyYmM4Li5kYmM1ZjNmN2ExZmY0ZmI3NDlhYWZkNzBlNTcwYmEwNDg1
NjhhY2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJzaXRlRGF0YVJlY29yZEludGVybmFsLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFSZWNvcmRJbnRlcm5hbC5oCkBAIC02NSwxMCArNjUsNiBA
QCBzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8V2Vic2l0ZURhdGFUeXBlPiB0b1dlYnNpdGVE
YXRhVHlwZShOU1N0cmluZyAqd2Vic2l0ZQogICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFUeXBl
OjpNZWRpYUtleXM7CiAgICAgaWYgKFt3ZWJzaXRlRGF0YVR5cGUgaXNFcXVhbFRvU3RyaW5nOl9X
S1dlYnNpdGVEYXRhVHlwZVNlYXJjaEZpZWxkUmVjZW50U2VhcmNoZXNdKQogICAgICAgICByZXR1
cm4gV2Vic2l0ZURhdGFUeXBlOjpTZWFyY2hGaWVsZFJlY2VudFNlYXJjaGVzOwotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGlmIChbd2Vic2l0ZURhdGFUeXBlIGlzRXF1YWxU
b1N0cmluZzpfV0tXZWJzaXRlRGF0YVR5cGVQbHVnSW5EYXRhXSkKLSAgICAgICAgcmV0dXJuIFdl
YnNpdGVEYXRhVHlwZTo6UGx1Z0luRGF0YTsKLSNlbmRpZgogICAgIGlmIChbd2Vic2l0ZURhdGFU
eXBlIGlzRXF1YWxUb1N0cmluZzpfV0tXZWJzaXRlRGF0YVR5cGVSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzXSkKICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhVHlwZTo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljczsKICAgICBpZiAoW3dlYnNpdGVEYXRhVHlwZSBpc0VxdWFsVG9TdHJpbmc6X1dLV2Vic2l0
ZURhdGFUeXBlQ3JlZGVudGlhbHNdKQpAQCAtMTI4LDEwICsxMjQsNiBAQCBzdGF0aWMgaW5saW5l
IFJldGFpblB0cjxOU1NldD4gdG9XS1dlYnNpdGVEYXRhVHlwZXMoT3B0aW9uU2V0PFdlYktpdDo6
V2Vic2l0ZURhdAogICAgICAgICBbd2tXZWJzaXRlRGF0YVR5cGVzIGFkZE9iamVjdDpfV0tXZWJz
aXRlRGF0YVR5cGVNZWRpYUtleXNdOwogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5z
KFdlYnNpdGVEYXRhVHlwZTo6U2VhcmNoRmllbGRSZWNlbnRTZWFyY2hlcykpCiAgICAgICAgIFt3
a1dlYnNpdGVEYXRhVHlwZXMgYWRkT2JqZWN0Ol9XS1dlYnNpdGVEYXRhVHlwZVNlYXJjaEZpZWxk
UmVjZW50U2VhcmNoZXNdOwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGlm
ICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UGx1Z0luRGF0YSkp
Ci0gICAgICAgIFt3a1dlYnNpdGVEYXRhVHlwZXMgYWRkT2JqZWN0Ol9XS1dlYnNpdGVEYXRhVHlw
ZVBsdWdJbkRhdGFdOwotI2VuZGlmCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMo
V2Vic2l0ZURhdGFUeXBlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSkKICAgICAgICAgW3drV2Vi
c2l0ZURhdGFUeXBlcyBhZGRPYmplY3Q6X1dLV2Vic2l0ZURhdGFUeXBlUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc107CiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFU
eXBlOjpDcmVkZW50aWFscykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
dXhpbGlhcnlQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxp
YXJ5UHJvY2Vzc1Byb3h5LmNwcAppbmRleCA4NWE4MmNiYjZmM2JkODI5M2RjNmM1OWE2NmIxZGU4
OTg5NGQ5YjNhLi5lNWE2YzM3Y2EzZmVkNDRhM2IxMjVhMGVjN2NiOTEyZjZlOGMyMTZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94eS5jcHAK
QEAgLTc1LDExICs3NSw2IEBAIHZvaWQgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hP
cHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYgbGF1CiAgICAgY2FzZSBQcm9j
ZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpXZWI6CiAgICAgICAgIHZhcm5hbWUgPSAiV0VCX1BS
T0NFU1NfQ01EX1BSRUZJWCI7CiAgICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQotICAgIGNhc2UgUHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlwZTo6UGx1Z2lu
OgotICAgICAgICB2YXJuYW1lID0gIlBMVUdJTl9QUk9DRVNTX0NNRF9QUkVGSVgiOwotICAgICAg
ICBicmVhazsKLSNlbmRpZgogICAgIGNhc2UgUHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlwZTo6
TmV0d29yazoKICAgICAgICAgdmFybmFtZSA9ICJORVRXT1JLX1BST0NFU1NfQ01EX1BSRUZJWCI7
CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvVUlEZWxlZ2F0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0
ZS5oCmluZGV4IDlmZGViMjNkYzI3ZGYwNDc0ZGM5YzNmMzZlZjI2YTM1YjczZTc1ZjAuLjVjYmNh
NzdhMTAwZjQwOGJhNTY1NDViZTliMDk5ZmJlODg4NDc2ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLmgKQEAgLTEyMyw5ICsxMjMsNiBAQCBwcml2YXRlOgog
ICAgICAgICB2b2lkIGRyYXdGb290ZXIoV2ViUGFnZVByb3h5JiwgV2ViRnJhbWVQcm94eSYsIFdl
YkNvcmU6OkZsb2F0UmVjdCYmKSBmaW5hbDsKIAogICAgICAgICB2b2lkIGRlY2lkZVBvbGljeUZv
ck5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0KFdlYlBhZ2VQcm94eSYsIEFQSTo6U2VjdXJp
dHlPcmlnaW4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgYWxsb3dlZCk+JiYpIGZpbmFs
OwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICB2b2lkIHVuYXZhaWxh
YmxlUGx1Z2luQnV0dG9uQ2xpY2tlZChXZWJQYWdlUHJveHkmLCBXS1BsdWdpblVuYXZhaWxhYmls
aXR5UmVhc29uLCBBUEk6OkRpY3Rpb25hcnkmKSBmaW5hbDsKLSNlbmRpZgogICAgICAgICB2b2lk
IG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KFdlYlBhZ2VQcm94eSYsIGNvbnN0IFdlYkhpdFRlc3RS
ZXN1bHREYXRhJiwgT3B0aW9uU2V0PFdlYkV2ZW50OjpNb2RpZmllcj4sIEFQSTo6T2JqZWN0Kik7
CiAgICAgICAgIHZvaWQgZGlkQ2xpY2tBdXRvRmlsbEJ1dHRvbihXZWJQYWdlUHJveHkmLCBBUEk6
Ok9iamVjdCopIGZpbmFsOwogICAgICAgICB2b2lkIHRvb2xiYXJzQXJlVmlzaWJsZShXZWJQYWdl
UHJveHkmLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmKSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tCmluZGV4IDA5YTM5NDBjMjljN2IxZDZhNDI3ODZm
ODQ4ZmU3NzhiZGE4NmY5ZTQuLmEwMDRhMTVkYjk3MTE5MjdlMjU4N2M2MWIxN2E3YzE5M2NiMGU4
ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUu
bW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbQpAQCAt
NzQ4LDM3ICs3NDgsNiBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojp1bmZvY3VzKFdlYlBh
Z2VQcm94eSopCiAgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3VuZm9j
dXNXZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKIH0KIAotI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotc3RhdGljIF9XS1BsdWdJblVuYXZhaWxhYmls
aXR5UmVhc29uIHRvV0tQbHVnSW5VbmF2YWlsYWJpbGl0eVJlYXNvbihXS1BsdWdpblVuYXZhaWxh
YmlsaXR5UmVhc29uIHJlYXNvbikKLXsKLSAgICBzd2l0Y2ggKHJlYXNvbikgewotICAgIGNhc2Ug
a1dLUGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb25QbHVnaW5NaXNzaW5nOgotICAgICAgICByZXR1
cm4gX1dLUGx1Z0luVW5hdmFpbGFiaWxpdHlSZWFzb25QbHVnaW5NaXNzaW5nOwotICAgIGNhc2Ug
a1dLUGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb25QbHVnaW5DcmFzaGVkOgotICAgICAgICByZXR1
cm4gX1dLUGx1Z0luVW5hdmFpbGFiaWxpdHlSZWFzb25QbHVnaW5DcmFzaGVkOwotICAgIGNhc2Ug
a1dLUGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb25JbnNlY3VyZVBsdWdpblZlcnNpb246Ci0gICAg
ICAgIHJldHVybiBfV0tQbHVnSW5VbmF2YWlsYWJpbGl0eVJlYXNvbkluc2VjdXJlUGx1Z2luVmVy
c2lvbjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIF9XS1Bs
dWdJblVuYXZhaWxhYmlsaXR5UmVhc29uUGx1Z2luTWlzc2luZzsKLX0KLSAgICAKLXZvaWQgVUlE
ZWxlZ2F0ZTo6VUlDbGllbnQ6OnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZChXZWJQYWdl
UHJveHkmLCBXS1BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uIHJlYXNvbiwgQVBJOjpEaWN0aW9u
YXJ5JiBwbHVnSW5JbmZvKQotewotICAgIGlmICghbV91aURlbGVnYXRlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1Vu
YXZhaWxhYmxlUGx1Z0luQnV0dG9uQ2xpY2tlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7Ci0gICAgaWYg
KCFkZWxlZ2F0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJp
dmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0
KCkgdW5hdmFpbGFibGVQbHVnSW5CdXR0b25DbGlja2VkV2l0aFJlYXNvbjp0b1dLUGx1Z0luVW5h
dmFpbGFiaWxpdHlSZWFzb24ocmVhc29uKSBwbHVnSW5JbmZvOndyYXBwZXIocGx1Z0luSW5mbyld
OwotfQotI2VuZGlmCi0gICAgCiBzdGF0aWMgX1dLUmVzb3VyY2VMaW1pdCB0b1dLUmVzb3VyY2VM
aW1pdChXS1Jlc291cmNlTGltaXQgbGltaXQpCiB7CiAgICAgc3dpdGNoIChsaW1pdCkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2Eu
bW0KaW5kZXggYjEyMTVmYzliMjI0MjRiZDg1MmUzY2NhNmNmMWZiZjYxMjFiZTY3OC4uMTFmMDUz
ZjFiNTM3ZWE2NGZjMjQxZTYwYTNkZTk3MDYxOWMwMWQ4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCkBAIC0zNSw3ICsz
NSw2IEBACiAjaW1wb3J0ICJOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgogI2lt
cG9ydCAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgogI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3NQ
cm94eS5oIgotI2ltcG9ydCAiUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCIKICNpbXBvcnQgIlByZWZl
cmVuY2VPYnNlcnZlci5oIgogI2ltcG9ydCAiU2FuZGJveFV0aWxpdGllcy5oIgogI2ltcG9ydCAi
VGV4dENoZWNrZXIuaCIKQEAgLTE4OSwxMyArMTg4LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKQogICAgICAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBkYXRhU3RvcmUubmV0d29ya1Byb2Nlc3NJZkV4aXN0cygpKQogICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoZW5hYmxlZCk7
CiAgICAgfSk7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBpZiAoIW1f
cHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlci52YWx1ZSgpKQotICAgICAg
ICBtX3BsdWdpblByb2Nlc3NNYW5hZ2VyUHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRUb2tlbiA9
IG51bGxwdHI7Ci0gICAgZWxzZSBpZiAoIW1fcGx1Z2luUHJvY2Vzc01hbmFnZXJQcm9jZXNzU3Vw
cHJlc3Npb25EaXNhYmxlZFRva2VuKQotICAgICAgICBtX3BsdWdpblByb2Nlc3NNYW5hZ2VyUHJv
Y2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRUb2tlbiA9IFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5n
bGV0b24oKS5wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZFRva2VuKCk7Ci0jZW5kaWYKIH0KIAog
TlNNdXRhYmxlRGljdGlvbmFyeSAqV2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZUJ1bmRsZVBhcmFtZXRl
cnMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0lt
cGwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgKaW5kZXgg
MWM1NzQ0NThlZjMwOGMxYTA1NTQxYmQ2YWRkMmJkYTUwNDAwZDI2MC4uYjc3ZDRjMDdjYjA3MzIw
MDk3NGJkMzBhMzRjNzdmODBlMjg5M2RlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9XZWJWaWV3SW1wbC5oCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgUExBVEZPUk0oTUFDKQog
CiAjaW5jbHVkZSAiUERGUGx1Z2luSWRlbnRpZmllci5oIgotI2luY2x1ZGUgIlBsdWdpbkNvbXBs
ZXhUZXh0SW5wdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1
ZGUgIldLTGF5b3V0TW9kZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRE9NUGFzdGVBY2Nlc3MuaD4K
QEAgLTM0MSwxMyArMzQwLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0U2VjdXJlSW5wdXRT
dGF0ZSgpOwogICAgIGJvb2wgaW5TZWN1cmVJbnB1dFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9p
blNlY3VyZUlucHV0U3RhdGU7IH0KICAgICB2b2lkIG5vdGlmeUlucHV0Q29udGV4dEFib3V0RGlz
Y2FyZGVkQ29tcG9zaXRpb24oKTsKLSAgICB2b2lkIHNldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRT
dGF0ZUFuZElkZW50aWZpZXIoUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlLCB1aW50NjRfdCBp
ZGVudGlmaWVyKTsKICAgICB2b2lkIGRpc2FibGVDb21wbGV4VGV4dElucHV0SWZOZWNlc3Nhcnko
KTsKICAgICBib29sIGhhbmRsZVBsdWdpbkNvbXBsZXhUZXh0SW5wdXRLZXlEb3duKE5TRXZlbnQg
Kik7CiAgICAgYm9vbCB0cnlIYW5kbGVQbHVnaW5Db21wbGV4VGV4dElucHV0S2V5RG93bihOU0V2
ZW50ICopOwogICAgIHZvaWQgcGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZChib29sIHBs
dWdpbkhhc0ZvY3VzQW5kV2luZG93SGFzRm9jdXMsIHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0
SW5wdXRJZGVudGlmaWVyKTsKICAgICBib29sIHRyeVBvc3RQcm9jZXNzUGx1Z2luQ29tcGxleFRl
eHRJbnB1dEtleURvd24oTlNFdmVudCAqKTsKLSAgICBQbHVnaW5Db21wbGV4VGV4dElucHV0U3Rh
dGUgcGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5D
b21wbGV4VGV4dElucHV0U3RhdGU7IH0KICAgICB1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElu
cHV0SWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luQ29tcGxleFRleHRJbnB1dElk
ZW50aWZpZXI7IH0KICAgICAKICAgICB2b2lkIGhhbmRsZUFjY2VwdGVkQWx0ZXJuYXRpdmVUZXh0
KGNvbnN0IFN0cmluZyYpOwpAQCAtNzE3LDggKzcxNCw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IHBvc3RGYWtlTW91c2VNb3ZlZEV2ZW50Rm9yRmxhZ3NDaGFuZ2VkRXZlbnQoTlNFdmVudCAqKTsK
IAotICAgIHZvaWQgc2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKFBsdWdpbkNvbXBsZXhU
ZXh0SW5wdXRTdGF0ZSk7Ci0KICAgICB2b2lkIHNlbmRUb29sVGlwTW91c2VFeGl0ZWQoKTsKICAg
ICB2b2lkIHNlbmRUb29sVGlwTW91c2VFbnRlcmVkKCk7CiAKQEAgLTc5Myw5ICs3ODgsNiBAQCBw
cml2YXRlOgogICAgIC8vIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBwbHVnLWluIHdlIHdhbnQgdG8g
c2VuZCBjb21wbGV4IHRleHQgaW5wdXQgdG8sIG9yIDAgaWYgdGhlcmUgaXMgbm9uZS4KICAgICB1
aW50NjRfdCBtX3BsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyIHsgMCB9OwogCi0gICAg
Ly8gVGhlIHN0YXRlIG9mIGNvbXBsZXggdGV4dCBpbnB1dCBmb3IgdGhlIHBsdWctaW4uCi0gICAg
UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlIG1fcGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRl
IHsgUGx1Z2luQ29tcGxleFRleHRJbnB1dERpc2FibGVkIH07Ci0KICNpZiBFTkFCTEUoRlVMTFND
UkVFTl9BUEkpCiAgICAgUmV0YWluUHRyPFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI+IG1f
ZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KaW5kZXggYmJkMjU5OWQ5ZWFmMzU0MzEyZWNhMWNm
YmExMzYyYzEzODM2OWE4NS4uMDlhZDM5OGJjYWI2ZDQyZjQwOGE3ZmI4ZjQ4NjI4ZjJjMTBiNDFi
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwu
bW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KQEAg
LTI3NTMsNzMgKzI3NTMsMTcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6bm90aWZ5SW5wdXRDb250ZXh0
QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbigpCiAgICAgW1ttX3ZpZXcgX3dlYl9zdXBlcklucHV0
Q29udGV4dF0gZGlzY2FyZE1hcmtlZFRleHRdOyAvLyBJbmZvcm0gdGhlIGlucHV0IG1ldGhvZCB0
aGF0IHdlIHdvbid0IGhhdmUgYW4gaW5saW5lIGlucHV0IGFyZWEgZGVzcGl0ZSBoYXZpbmcgYmVl
biBhc2tlZCB0by4KIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6c2V0UGx1Z2luQ29tcGxleFRleHRJ
bnB1dFN0YXRlKFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSBwbHVnaW5Db21wbGV4VGV4dElu
cHV0U3RhdGUpCi17Ci0gICAgbV9wbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUgPSBwbHVnaW5D
b21wbGV4VGV4dElucHV0U3RhdGU7Ci0KLSAgICBpZiAobV9wbHVnaW5Db21wbGV4VGV4dElucHV0
U3RhdGUgIT0gUGx1Z2luQ29tcGxleFRleHRJbnB1dERpc2FibGVkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBTZW5kIGJhY2sgYW4gZW1wdHkgc3RyaW5nIHRvIHRoZSBwbHVnLWluLiBUaGlz
IHdpbGwgZGlzYWJsZSB0ZXh0IGlucHV0LgotICAgIG1fcGFnZS0+c2VuZENvbXBsZXhUZXh0SW5w
dXRUb1BsdWdpbihtX3BsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBTdHJpbmcoKSk7
Ci19Ci0KLXZvaWQgV2ViVmlld0ltcGw6OnNldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZUFu
ZElkZW50aWZpZXIoUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlIHBsdWdpbkNvbXBsZXhUZXh0
SW5wdXRTdGF0ZSwgdWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIpCi17
Ci0gICAgaWYgKHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyICE9IG1fcGx1Z2luQ29t
cGxleFRleHRJbnB1dElkZW50aWZpZXIpIHsKLSAgICAgICAgLy8gV2UncmUgYXNrZWQgdG8gdXBk
YXRlIHRoZSBzdGF0ZSBmb3IgYSBwbHVnLWluIHRoYXQgZG9lc24ndCBoYXZlIGZvY3VzLgotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRl
KHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSk7Ci19Ci0KIHZvaWQgV2ViVmlld0ltcGw6OmRp
c2FibGVDb21wbGV4VGV4dElucHV0SWZOZWNlc3NhcnkoKQogewotICAgIGlmICghbV9wbHVnaW5D
b21wbGV4VGV4dElucHV0SWRlbnRpZmllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
cGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlICE9IFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRFbmFi
bGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDaGVjayBpZiB0aGUgdGV4dCBpbnB1dCB3
aW5kb3cgaGFzIGJlZW4gZGlzbWlzc2VkLgotICAgIGlmICghW1tXS1RleHRJbnB1dFdpbmRvd0Nv
bnRyb2xsZXIgc2hhcmVkVGV4dElucHV0V2luZG93Q29udHJvbGxlcl0gaGFzTWFya2VkVGV4dF0p
Ci0gICAgICAgIHNldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZShQbHVnaW5Db21wbGV4VGV4
dElucHV0RGlzYWJsZWQpOwogfQogCi1ib29sIFdlYlZpZXdJbXBsOjpoYW5kbGVQbHVnaW5Db21w
bGV4VGV4dElucHV0S2V5RG93bihOU0V2ZW50ICpldmVudCkKK2Jvb2wgV2ViVmlld0ltcGw6Omhh
bmRsZVBsdWdpbkNvbXBsZXhUZXh0SW5wdXRLZXlEb3duKE5TRXZlbnQgKikKIHsKLSAgICBBU1NF
UlQobV9wbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcik7Ci0gICAgQVNTRVJUKG1fcGx1
Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlICE9IFBsdWdpbkNvbXBsZXhUZXh0SW5wdXREaXNhYmxl
ZCk7Ci0KLSAgICBCT09MIHVzaW5nTGVnYWN5Q29jb2FUZXh0SW5wdXQgPSBtX3BsdWdpbkNvbXBs
ZXhUZXh0SW5wdXRTdGF0ZSA9PSBQbHVnaW5Db21wbGV4VGV4dElucHV0RW5hYmxlZExlZ2FjeTsK
LQotICAgIE5TU3RyaW5nICpzdHJpbmcgPSBuaWw7Ci0gICAgQk9PTCBkaWRIYW5kbGVFdmVudCA9
IFtbV0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyIHNoYXJlZFRleHRJbnB1dFdpbmRvd0NvbnRy
b2xsZXJdIGludGVycHJldEtleUV2ZW50OmV2ZW50IHVzaW5nTGVnYWN5Q29jb2FUZXh0SW5wdXQ6
dXNpbmdMZWdhY3lDb2NvYVRleHRJbnB1dCBzdHJpbmc6JnN0cmluZ107Ci0KLSAgICBpZiAoc3Ry
aW5nKSB7Ci0gICAgICAgIG1fcGFnZS0+c2VuZENvbXBsZXhUZXh0SW5wdXRUb1BsdWdpbihtX3Bs
dWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBzdHJpbmcpOwotCi0gICAgICAgIGlmICgh
dXNpbmdMZWdhY3lDb2NvYVRleHRJbnB1dCkKLSAgICAgICAgICAgIG1fcGx1Z2luQ29tcGxleFRl
eHRJbnB1dFN0YXRlID0gUGx1Z2luQ29tcGxleFRleHRJbnB1dERpc2FibGVkOwotICAgIH0KLQot
ICAgIHJldHVybiBkaWRIYW5kbGVFdmVudDsKKyAgICByZXR1cm4gTk87CiB9CiAKLWJvb2wgV2Vi
Vmlld0ltcGw6OnRyeUhhbmRsZVBsdWdpbkNvbXBsZXhUZXh0SW5wdXRLZXlEb3duKE5TRXZlbnQg
KmV2ZW50KQorYm9vbCBXZWJWaWV3SW1wbDo6dHJ5SGFuZGxlUGx1Z2luQ29tcGxleFRleHRJbnB1
dEtleURvd24oTlNFdmVudCAqKQogewotICAgIGlmICghbV9wbHVnaW5Db21wbGV4VGV4dElucHV0
SWRlbnRpZmllciB8fCBtX3BsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSA9PSBQbHVnaW5Db21w
bGV4VGV4dElucHV0RGlzYWJsZWQpCi0gICAgICAgIHJldHVybiBOTzsKLQotICAgIC8vIENoZWNr
IGlmIHRoZSB0ZXh0IGlucHV0IHdpbmRvdyBoYXMgYmVlbiBkaXNtaXNzZWQgYW5kIGxldCB0aGUg
cGx1Zy1pbiBwcm9jZXNzIGtub3cuCi0gICAgLy8gVGhpcyBpcyBvbmx5IHZhbGlkIHdpdGggdGhl
IHVwZGF0ZWQgQ29jb2EgdGV4dCBpbnB1dCBzcGVjLgotICAgIGRpc2FibGVDb21wbGV4VGV4dElu
cHV0SWZOZWNlc3NhcnkoKTsKLQotICAgIC8vIFRyeSBmZWVkaW5nIHRoZSBrZXlib2FyZCBldmVu
dCBkaXJlY3RseSB0byB0aGUgcGx1Zy1pbi4KLSAgICBpZiAobV9wbHVnaW5Db21wbGV4VGV4dElu
cHV0U3RhdGUgPT0gUGx1Z2luQ29tcGxleFRleHRJbnB1dEVuYWJsZWRMZWdhY3kpCi0gICAgICAg
IHJldHVybiBoYW5kbGVQbHVnaW5Db21wbGV4VGV4dElucHV0S2V5RG93bihldmVudCk7Ci0KICAg
ICByZXR1cm4gTk87CiB9CiAKQEAgLTI4NTIsMTYgKzI3OTYsOSBAQCB2b2lkIFdlYlZpZXdJbXBs
OjpwbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wgcGx1Z2luSGFzRm9jdXNBbmRX
aW5kb3dIYQogICAgIFtOU0FwcCB1cGRhdGVXaW5kb3dzXTsKIH0KIAotYm9vbCBXZWJWaWV3SW1w
bDo6dHJ5UG9zdFByb2Nlc3NQbHVnaW5Db21wbGV4VGV4dElucHV0S2V5RG93bihOU0V2ZW50ICpl
dmVudCkKK2Jvb2wgV2ViVmlld0ltcGw6OnRyeVBvc3RQcm9jZXNzUGx1Z2luQ29tcGxleFRleHRJ
bnB1dEtleURvd24oTlNFdmVudCAqKQogewotICAgIGlmICghbV9wbHVnaW5Db21wbGV4VGV4dElu
cHV0SWRlbnRpZmllciB8fCBtX3BsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSA9PSBQbHVnaW5D
b21wbGV4VGV4dElucHV0RGlzYWJsZWQpCi0gICAgICAgIHJldHVybiBOTzsKLQotICAgIC8vIElu
IHRoZSBsZWdhY3kgdGV4dCBpbnB1dCBtb2RlbCwgdGhlIGV2ZW50IGhhcyBhbHJlYWR5IGJlZW4g
c2VudCB0byB0aGUgaW5wdXQgbWV0aG9kLgotICAgIGlmIChtX3BsdWdpbkNvbXBsZXhUZXh0SW5w
dXRTdGF0ZSA9PSBQbHVnaW5Db21wbGV4VGV4dElucHV0RW5hYmxlZExlZ2FjeSkKLSAgICAgICAg
cmV0dXJuIE5POwotCi0gICAgcmV0dXJuIGhhbmRsZVBsdWdpbkNvbXBsZXhUZXh0SW5wdXRLZXlE
b3duKGV2ZW50KTsKKyAgICByZXR1cm4gTk87CiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OmhhbmRs
ZUFjY2VwdGVkQWx0ZXJuYXRpdmVUZXh0KGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRBbHRlcm5hdGl2
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NM
YXVuY2hlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5j
aGVyLmgKaW5kZXggZDMwZjZkNDliMDkyZjc5NDE3NTg1Njg1MjFhMDZhYTMwZDJiZGJlZC4uNzU2
NmM0ZTY0NzczOWJiYjFiMGYzMWEzNzU3N2I3NjJjNjhhMTRlZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmgKQEAgLTY5LDkgKzY5
LDYgQEAgcHVibGljOgogICAgIAogICAgIGVudW0gY2xhc3MgUHJvY2Vzc1R5cGUgewogICAgICAg
ICBXZWIsCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIFBsdWdpbiwK
LSNlbmRpZgogICAgICAgICBOZXR3b3JrLAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKICAgICAg
ICAgR1BVLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTGF1bmNoZXIvbWFj
L1Byb2Nlc3NMYXVuY2hlck1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0xhdW5jaGVy
L21hYy9Qcm9jZXNzTGF1bmNoZXJNYWMubW0KaW5kZXggZWMyNmQzNzQzYWFhMmQ2N2I1OTIwMmVk
OWE2YWMwNGE5YWEzYmI4Zi4uZTI4OGUzMDg0YjBkMTJkZDNkZDgzMWViNmYyNjNiNDRmN2FmZTk2
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTGF1bmNoZXIvbWFjL1Byb2Nl
c3NMYXVuY2hlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9MYXVuY2hlci9t
YWMvUHJvY2Vzc0xhdW5jaGVyTWFjLm1tCkBAIC02OCwxMCArNjgsNiBAQCBzdGF0aWMgY29uc3Qg
Y2hhciogc2VydmljZU5hbWUoY29uc3QgUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBs
YXVuY2hPcHRpbwogI2lmIEVOQUJMRShXRUJfQVVUSE4pCiAgICAgY2FzZSBQcm9jZXNzTGF1bmNo
ZXI6OlByb2Nlc3NUeXBlOjpXZWJBdXRobjoKICAgICAgICAgcmV0dXJuICJjb20uYXBwbGUuV2Vi
S2l0LldlYkF1dGhuIjsKLSNlbmRpZgotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQot
ICAgIGNhc2UgUHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlwZTo6UGx1Z2luOgotICAgICAgICBy
ZXR1cm4gImNvbS5hcHBsZS5XZWJLaXQuUGx1Z2luLjY0IjsKICNlbmRpZgogICAgIH0KIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAppbmRleCA5ZTdkZjE4NDFhZTlmNTk5MDg0Nzdj
ZGRhMWFkYzUxMDU4Njc5NmUwLi41ZTJlYzc1NTk5YzU2YWNhNTQ2YmFkMmE1YzYzZGVlMWEwYTY3
MzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCkBAIC01Niw3ICs1Niw2IEBA
CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1
ZGUgIlBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbW90ZUxheWVy
VHJlZU5vZGUuaCIKICNpbmNsdWRlICJXS0ZvdW5kYXRpb24uaCIKIApAQCAtNDIzLDcgKzQyMiw2
IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2aXJ0dWFsIHZvaWQgcGx1Z2lu
Rm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZCh1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0
SWRlbnRpZmllciwgYm9vbCBwbHVnaW5IYXNGb2N1c0FuZFdpbmRvd0hhc0ZvY3VzKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSh1aW50NjRfdCBw
bHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0
YXRlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6
QWx0ZXJuYXRpdmVUZXh0VHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0Jv
eE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0
cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2
ZVJlcGxhY2VtZW50U3RyaW5ncykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVj
dGlvblBhbmVsKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpID0g
MDsKICAgICB2aXJ0dWFsIFN0cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihXZWJDb3Jl
OjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KSA9IDA7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiZjBiZjRkNDE3OTg0Mjg5N2IzZjU4NzgyZDJlOTUwODI4
NDNjODcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMjU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIlBsdWdpbk1vZHVsZUluZm8uaCIKLSNpbmNsdWRl
IDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5
T3JpZ2luLmg+Ci0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNl
dC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvVVJMLmg+
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVBsdWdp
bkluZm9TdG9yZTo6UGx1Z2luSW5mb1N0b3JlKCkKLSAgICA6IG1fcGx1Z2luTGlzdElzVXBUb0Rh
dGUoZmFsc2UpCi17Ci19Ci0KLXZvaWQgUGx1Z2luSW5mb1N0b3JlOjpzZXRBZGRpdGlvbmFsUGx1
Z2luc0RpcmVjdG9yaWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKLXsKLSAg
ICBtX2FkZGl0aW9uYWxQbHVnaW5zRGlyZWN0b3JpZXMgPSBkaXJlY3RvcmllczsKLSAgICByZWZy
ZXNoKCk7Ci19Ci0KLXZvaWQgUGx1Z2luSW5mb1N0b3JlOjpyZWZyZXNoKCkKLXsKLSAgICBtX3Bs
dWdpbkxpc3RJc1VwVG9EYXRlID0gZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPgotc3RhdGljIHZvaWQgYWRkRnJvbVZlY3RvcihUJiBoYXNoU2V0LCBjb25zdCBV
JiB2ZWN0b3IpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIGhhc2hTZXQuYWRkKHZlY3RvcltpXSk7Ci19Ci0KLXZvaWQgUGx1Z2luSW5m
b1N0b3JlOjpsb2FkUGx1Z2luc0lmTmVjZXNzYXJ5KCkKLXsKLSAgICBpZiAobV9wbHVnaW5MaXN0
SXNVcFRvRGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiB1
bmlxdWVQbHVnaW5QYXRoczsKLQotICAgIC8vIEZpcnN0LCBsb2FkIHBsdWctaW5zIGZyb20gdGhl
IGFkZGl0aW9uYWwgcGx1Zy1pbnMgZGlyZWN0b3JpZXMgc3BlY2lmaWVkLgotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9hZGRpdGlvbmFsUGx1Z2luc0RpcmVjdG9yaWVzLnNpemUoKTsgKytp
KQotICAgICAgICBhZGRGcm9tVmVjdG9yKHVuaXF1ZVBsdWdpblBhdGhzLCBwbHVnaW5QYXRoc0lu
RGlyZWN0b3J5KG1fYWRkaXRpb25hbFBsdWdpbnNEaXJlY3Rvcmllc1tpXSkpOwotCi0gICAgLy8g
VGhlbiBsb2FkIHBsdWctaW5zIGZyb20gdGhlIHN0YW5kYXJkIHBsdWctaW5zIGRpcmVjdG9yaWVz
LgotICAgIFZlY3RvcjxTdHJpbmc+IGRpcmVjdG9yaWVzID0gcGx1Z2luc0RpcmVjdG9yaWVzKCk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkaXJlY3Rvcmllcy5zaXplKCk7ICsraSkKLSAg
ICAgICAgYWRkRnJvbVZlY3Rvcih1bmlxdWVQbHVnaW5QYXRocywgcGx1Z2luUGF0aHNJbkRpcmVj
dG9yeShkaXJlY3Rvcmllc1tpXSkpOwotCi0gICAgLy8gVGhlbiBsb2FkIHBsdWctaW5zIHRoYXQg
YXJlIG5vdCBpbiB0aGUgc3RhbmRhcmQgcGx1Zy1pbnMgZGlyZWN0b3JpZXMuCi0gICAgYWRkRnJv
bVZlY3Rvcih1bmlxdWVQbHVnaW5QYXRocywgaW5kaXZpZHVhbFBsdWdpblBhdGhzKCkpOwotCi0g
ICAgbV9wbHVnaW5zLmNsZWFyKCk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIHBsdWdpblBhdGgg
OiB1bmlxdWVQbHVnaW5QYXRocykKLSAgICAgICAgbG9hZFBsdWdpbihtX3BsdWdpbnMsIHBsdWdp
blBhdGgpOwotCi0gICAgbV9wbHVnaW5MaXN0SXNVcFRvRGF0ZSA9IHRydWU7Ci19Ci0KLXZvaWQg
UGx1Z2luSW5mb1N0b3JlOjpsb2FkUGx1Z2luKFZlY3RvcjxQbHVnaW5Nb2R1bGVJbmZvPiYgcGx1
Z2lucywgY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoKQotewotICAgIFBsdWdpbk1vZHVsZUluZm8g
cGx1Z2luOwotICAgIAotICAgIGlmICghZ2V0UGx1Z2luSW5mbyhwbHVnaW5QYXRoLCBwbHVnaW4p
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXNob3VsZFVzZVBsdWdpbihwbHVnaW5zLCBw
bHVnaW4pKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgcGx1Z2lucy5hcHBlbmQocGx1Z2lu
KTsKLX0KLQotVmVjdG9yPFBsdWdpbk1vZHVsZUluZm8+IFBsdWdpbkluZm9TdG9yZTo6cGx1Z2lu
cygpCi17Ci0gICAgbG9hZFBsdWdpbnNJZk5lY2Vzc2FyeSgpOwotICAgIHJldHVybiBtX3BsdWdp
bnM7Ci19Ci0KLVBsdWdpbk1vZHVsZUluZm8gUGx1Z2luSW5mb1N0b3JlOjpmaW5kUGx1Z2luRm9y
TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgUGx1Z2luRGF0YTo6QWxsb3dlZFBsdWdp
blR5cGVzIGFsbG93ZWRQbHVnaW5UeXBlcykgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1pbWVUeXBl
LmlzTnVsbCgpKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgcGx1Z2luIDogbV9wbHVnaW5zKSB7
Ci0gICAgICAgIGlmIChhbGxvd2VkUGx1Z2luVHlwZXMgPT0gUGx1Z2luRGF0YTo6T25seUFwcGxp
Y2F0aW9uUGx1Z2lucyAmJiAhcGx1Z2luLmluZm8uaXNBcHBsaWNhdGlvblBsdWdpbikKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZvciAoY29uc3QgYXV0byYgbWltZUNsYXNzSW5m
byA6IHBsdWdpbi5pbmZvLm1pbWVzKSB7Ci0gICAgICAgICAgICBpZiAobWltZUNsYXNzSW5mby50
eXBlID09IG1pbWVUeXBlKQotICAgICAgICAgICAgICAgIHJldHVybiBwbHVnaW47Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFBsdWdpbk1vZHVsZUluZm8oKTsKLX0KLQotUGx1
Z2luTW9kdWxlSW5mbyBQbHVnaW5JbmZvU3RvcmU6OmZpbmRQbHVnaW5Gb3JFeHRlbnNpb24oY29u
c3QgU3RyaW5nJiBleHRlbnNpb24sIFN0cmluZyYgbWltZVR5cGUsIFBsdWdpbkRhdGE6OkFsbG93
ZWRQbHVnaW5UeXBlcyBhbGxvd2VkUGx1Z2luVHlwZXMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFl
eHRlbnNpb24uaXNOdWxsKCkpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBwbHVnaW4gOiBtX3Bs
dWdpbnMpIHsKLSAgICAgICAgaWYgKGFsbG93ZWRQbHVnaW5UeXBlcyA9PSBQbHVnaW5EYXRhOjpP
bmx5QXBwbGljYXRpb25QbHVnaW5zICYmICFwbHVnaW4uaW5mby5pc0FwcGxpY2F0aW9uUGx1Z2lu
KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBtaW1l
Q2xhc3NJbmZvIDogcGx1Z2luLmluZm8ubWltZXMpIHsKLSAgICAgICAgICAgIGlmIChtaW1lQ2xh
c3NJbmZvLmV4dGVuc2lvbnMuY29udGFpbnMoZXh0ZW5zaW9uKSkgewotICAgICAgICAgICAgICAg
IC8vIFdlIGZvdW5kIGEgc3VwcG9ydGVkIGV4dGVuc2lvbiwgc2V0IHRoZSBjb3JyZWN0IE1JTUUg
dHlwZS4KLSAgICAgICAgICAgICAgICBtaW1lVHlwZSA9IG1pbWVDbGFzc0luZm8udHlwZTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gcGx1Z2luOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotICAgIAotICAgIHJldHVybiBQbHVnaW5Nb2R1bGVJbmZvKCk7Ci19Ci0KLXN0YXRpYyBT
dHJpbmcgcGF0aEV4dGVuc2lvbihjb25zdCBVUkwmIHVybCkKLXsKLSAgICBhdXRvIGZpbGVuYW1l
ID0gdXJsLmxhc3RQYXRoQ29tcG9uZW50KCk7Ci0gICAgaWYgKGZpbGVuYW1lLmVuZHNXaXRoKCcv
JykpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgc2l6ZV90IGxhc3REb3RQb3NpdGlvbiA9IGZp
bGVuYW1lLnJldmVyc2VGaW5kKCcuJyk7Ci0gICAgaWYgKGxhc3REb3RQb3NpdGlvbiA9PSBub3RG
b3VuZCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gZmlsZW5hbWUuc3Vic3RyaW5n
KGxhc3REb3RQb3NpdGlvbiArIDEpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7Ci19Ci0KLSNp
ZiAhUExBVEZPUk0oQ09DT0EpCi0KLVBsdWdpbk1vZHVsZUxvYWRQb2xpY3kgUGx1Z2luSW5mb1N0
b3JlOjpkZWZhdWx0TG9hZFBvbGljeUZvclBsdWdpbihjb25zdCBQbHVnaW5Nb2R1bGVJbmZvJikK
LXsKLSAgICByZXR1cm4gUGx1Z2luTW9kdWxlTG9hZE5vcm1hbGx5OwotfQotICAgIAotUGx1Z2lu
TW9kdWxlSW5mbyBQbHVnaW5JbmZvU3RvcmU6OmZpbmRQbHVnaW5XaXRoQnVuZGxlSWRlbnRpZmll
cihjb25zdCBTdHJpbmcmKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBQbHVnaW5Nb2R1bGVJbmZvKCk7Ci19Ci0KLSNlbmRpZgotCi1QbHVnaW5Nb2R1bGVJbmZvIFBs
dWdpbkluZm9TdG9yZTo6ZmluZFBsdWdpbihTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBVUkwmIHVy
bCwgUGx1Z2luRGF0YTo6QWxsb3dlZFBsdWdpblR5cGVzIGFsbG93ZWRQbHVnaW5UeXBlcykKLXsK
LSAgICBsb2FkUGx1Z2luc0lmTmVjZXNzYXJ5KCk7Ci0gICAgCi0gICAgLy8gRmlyc3QsIGNoZWNr
IGlmIHdlIGNhbiBnZXQgdGhlIHBsdWctaW4gYmFzZWQgb24gaXRzIE1JTUUgdHlwZS4KLSAgICBp
ZiAoIW1pbWVUeXBlLmlzTnVsbCgpKSB7Ci0gICAgICAgIFBsdWdpbk1vZHVsZUluZm8gcGx1Z2lu
ID0gZmluZFBsdWdpbkZvck1JTUVUeXBlKG1pbWVUeXBlLCBhbGxvd2VkUGx1Z2luVHlwZXMpOwot
ICAgICAgICBpZiAoIXBsdWdpbi5wYXRoLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIHBs
dWdpbjsKLSAgICB9Ci0KLSAgICAvLyBOZXh0LCBjaGVjayBpZiBhbnkgcGx1Zy1pbnMgY2xhaW0g
dG8gc3VwcG9ydCB0aGUgVVJMIGV4dGVuc2lvbi4KLSAgICBTdHJpbmcgZXh0ZW5zaW9uID0gcGF0
aEV4dGVuc2lvbih1cmwpOwotICAgIGlmICghZXh0ZW5zaW9uLmlzTnVsbCgpICYmIG1pbWVUeXBl
LmlzRW1wdHkoKSkgewotICAgICAgICBQbHVnaW5Nb2R1bGVJbmZvIHBsdWdpbiA9IGZpbmRQbHVn
aW5Gb3JFeHRlbnNpb24oZXh0ZW5zaW9uLCBtaW1lVHlwZSwgYWxsb3dlZFBsdWdpblR5cGVzKTsK
LSAgICAgICAgaWYgKCFwbHVnaW4ucGF0aC5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBw
bHVnaW47Ci0gICAgICAgIAotICAgICAgICAvLyBGaW5hbGx5LCB0cnkgdG8gZ2V0IHRoZSBNSU1F
IHR5cGUgZnJvbSB0aGUgZXh0ZW5zaW9uIGluIGEgcGxhdGZvcm0gc3BlY2lmaWMgbWFubmVyIGFu
ZCB1c2UgdGhhdC4KLSAgICAgICAgU3RyaW5nIGV4dGVuc2lvbk1pbWVUeXBlID0gTUlNRVR5cGVS
ZWdpc3RyeTo6bWltZVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKLSAgICAgICAgaWYgKCFl
eHRlbnNpb25NaW1lVHlwZS5pc051bGwoKSkgewotICAgICAgICAgICAgUGx1Z2luTW9kdWxlSW5m
byBwbHVnaW4gPSBmaW5kUGx1Z2luRm9yTUlNRVR5cGUoZXh0ZW5zaW9uTWltZVR5cGUsIGFsbG93
ZWRQbHVnaW5UeXBlcyk7Ci0gICAgICAgICAgICBpZiAoIXBsdWdpbi5wYXRoLmlzTnVsbCgpKSB7
Ci0gICAgICAgICAgICAgICAgbWltZVR5cGUgPSBleHRlbnNpb25NaW1lVHlwZTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gcGx1Z2luOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiBQbHVnaW5Nb2R1bGVJbmZvKCk7Ci19Ci0KLWJvb2wgUGx1Z2luSW5m
b1N0b3JlOjppc1N1cHBvcnRlZFBsdWdpbihjb25zdCBQbHVnaW5JbmZvU3RvcmU6OlN1cHBvcnRl
ZFBsdWdpbiYgcGx1Z2luLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBVUkwmIHBsdWdp
blVSTCkKLXsKLSAgICBpZiAoIW1pbWVUeXBlLmlzRW1wdHkoKSAmJiBwbHVnaW4ubWltZVR5cGVz
LmNvbnRhaW5zKG1pbWVUeXBlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgYXV0byBleHRl
bnNpb24gPSBwYXRoRXh0ZW5zaW9uKHBsdWdpblVSTCk7Ci0gICAgcmV0dXJuIGV4dGVuc2lvbi5p
c0VtcHR5KCkgPyBmYWxzZSA6IHBsdWdpbi5leHRlbnNpb25zLmNvbnRhaW5zKGV4dGVuc2lvbik7
Ci19Ci0KLWJvb2wgUGx1Z2luSW5mb1N0b3JlOjppc1N1cHBvcnRlZFBsdWdpbihjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBjb25zdCBVUkwmIHBsdWdpblVSTCwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
VVJMJiBwYWdlVVJMKQotewotICAgIC8vIFdlIGNoZWNrIG9ubHkgcGFnZVVSTCBmb3IgY29uc2lz
dGVuY3kgd2l0aCBXZWJQcm9jZXNzIHZpc2libGUgcGx1Z2lucy4KLSAgICBpZiAoIW1fc3VwcG9y
dGVkUGx1Z2lucykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gbV9zdXBwb3J0
ZWRQbHVnaW5zLT5maW5kTWF0Y2hpbmcoWyZdIChhdXRvJiYgcGx1Z2luKSB7Ci0gICAgICAgIHJl
dHVybiBwYWdlVVJMLmlzTWF0Y2hpbmdEb21haW4ocGx1Z2luLm1hdGNoaW5nRG9tYWluKSAmJiBp
c1N1cHBvcnRlZFBsdWdpbihwbHVnaW4sIG1pbWVUeXBlLCBwbHVnaW5VUkwpOwotICAgIH0pICE9
IG5vdEZvdW5kOwotfQotCi1zdGQ6Om9wdGlvbmFsPFZlY3RvcjxTdXBwb3J0ZWRQbHVnaW5JZGVu
dGlmaWVyPj4gUGx1Z2luSW5mb1N0b3JlOjpzdXBwb3J0ZWRQbHVnaW5JZGVudGlmaWVycygpCi17
Ci0gICAgaWYgKCFtX3N1cHBvcnRlZFBsdWdpbnMpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Ci0KLSAgICByZXR1cm4gV1RGOjptYXAoKm1fc3VwcG9ydGVkUGx1Z2lucywgW10gKGF1dG8m
JiBpdGVtKSB7Ci0gICAgICAgIHJldHVybiBTdXBwb3J0ZWRQbHVnaW5JZGVudGlmaWVyIHsgaXRl
bS5tYXRjaGluZ0RvbWFpbiwgaXRlbS5pZGVudGlmaWVyIH07Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
UGx1Z2luSW5mb1N0b3JlOjphZGRTdXBwb3J0ZWRQbHVnaW4oU3RyaW5nJiYgZG9tYWluTmFtZSwg
U3RyaW5nJiYgaWRlbnRpZmllciwgSGFzaFNldDxTdHJpbmc+JiYgbWltZVR5cGVzLCBIYXNoU2V0
PFN0cmluZz4gZXh0ZW5zaW9ucykKLXsKLSAgICBpZiAoIW1fc3VwcG9ydGVkUGx1Z2lucykKLSAg
ICAgICAgbV9zdXBwb3J0ZWRQbHVnaW5zID0gVmVjdG9yPFN1cHBvcnRlZFBsdWdpbj4geyB9Owot
Ci0gICAgbV9zdXBwb3J0ZWRQbHVnaW5zLT5hcHBlbmQoU3VwcG9ydGVkUGx1Z2luIHsgV1RGTW92
ZShkb21haW5OYW1lKSwgV1RGTW92ZShpZGVudGlmaWVyKSwgV1RGTW92ZShtaW1lVHlwZXMpLCBX
VEZNb3ZlKGV4dGVuc2lvbnMpIH0pOwotfQotCi1QbHVnaW5Nb2R1bGVJbmZvIFBsdWdpbkluZm9T
dG9yZTo6aW5mb0ZvclBsdWdpbldpdGhQYXRoKGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCkgY29u
c3QKLXsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHBsdWdpbiA6IG1fcGx1Z2lucykgewotICAgICAg
ICBpZiAocGx1Z2luLnBhdGggPT0gcGx1Z2luUGF0aCkKLSAgICAgICAgICAgIHJldHVybiBwbHVn
aW47Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFBsdWdp
bk1vZHVsZUluZm8oKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAzMDliODA1NmI1MjBmZGJhZmEyZTMyMzU1MGU4YmIzNmM1Y2VkOGVjLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJQbHVnaW5Nb2R1bGVJbmZvLmgiCi0KLSNp
bmNsdWRlIDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgUGx1Z2luSW5mb1N0b3JlOwotCi1jbGFzcyBQ
bHVnaW5JbmZvU3RvcmUgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBsdWdpbkluZm9TdG9y
ZSk7Ci0KLXB1YmxpYzoKLSAgICBQbHVnaW5JbmZvU3RvcmUoKTsKLQotICAgIHZvaWQgc2V0QWRk
aXRpb25hbFBsdWdpbnNEaXJlY3Rvcmllcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwotCi0gICAg
dm9pZCByZWZyZXNoKCk7Ci0gICAgVmVjdG9yPFBsdWdpbk1vZHVsZUluZm8+IHBsdWdpbnMoKTsK
LQotICAgIC8vIFJldHVybnMgdGhlIGluZm8gZm9yIGEgcGx1Zy1pbiB0aGF0IGNhbiBoYW5kbGUg
dGhlIGdpdmVuIE1JTUUgdHlwZS4KLSAgICAvLyBJZiB0aGUgTUlNRSB0eXBlIGlzIG51bGwsIHRo
ZSBmaWxlIGV4dGVuc2lvbiBvZiB0aGUgZ2l2ZW4gdXJsIHdpbGwgYmUgdXNlZCB0byBpbmZlciB0
aGUKLSAgICAvLyBwbHVnLWluIHR5cGUuIEluIHRoYXQgY2FzZSwgbWltZVR5cGUgd2lsbCBiZSBm
aWxsZWQgaW4gd2l0aCB0aGUgcmlnaHQgTUlNRSB0eXBlLgotICAgIFBsdWdpbk1vZHVsZUluZm8g
ZmluZFBsdWdpbihTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBVUkwmLCBXZWJDb3JlOjpQbHVnaW5E
YXRhOjpBbGxvd2VkUGx1Z2luVHlwZXMgPSBXZWJDb3JlOjpQbHVnaW5EYXRhOjpBbGxQbHVnaW5z
KTsKLQotICAgIC8vIFJldHVybnMgdGhlIGluZm8gZm9yIHRoZSBwbHVnLWluIHdpdGggdGhlIGdp
dmVuIGJ1bmRsZSBpZGVudGlmaWVyLgotICAgIFBsdWdpbk1vZHVsZUluZm8gZmluZFBsdWdpbldp
dGhCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllcik7Ci0KLSAg
ICAvLyBSZXR1cm5zIHRoZSBpbmZvIGZvciB0aGUgcGx1Zy1pbiB3aXRoIHRoZSBnaXZlbiBwYXRo
LgotICAgIFBsdWdpbk1vZHVsZUluZm8gaW5mb0ZvclBsdWdpbldpdGhQYXRoKGNvbnN0IFN0cmlu
ZyYgcGx1Z2luUGF0aCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgUGx1Z2luTW9kdWxlTG9hZFBvbGlj
eSBkZWZhdWx0TG9hZFBvbGljeUZvclBsdWdpbihjb25zdCBQbHVnaW5Nb2R1bGVJbmZvJik7Ci0K
LSAgICBib29sIGlzU3VwcG9ydGVkUGx1Z2luKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0
IFVSTCYgcGx1Z2luVVJMLCBjb25zdCBTdHJpbmcmIGZyYW1lVVJMU3RyaW5nLCBjb25zdCBVUkwm
IHBhZ2VVUkwpOwotICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6OlN1cHBvcnRlZFBs
dWdpbklkZW50aWZpZXI+PiBzdXBwb3J0ZWRQbHVnaW5JZGVudGlmaWVycygpOwotICAgIHZvaWQg
YWRkU3VwcG9ydGVkUGx1Z2luKFN0cmluZyYmIG1hdGNoaW5nRG9tYWluLCBTdHJpbmcmJiBpZGVu
dGlmaWVyLCBIYXNoU2V0PFN0cmluZz4mJiBtaW1lVHlwZXMsIEhhc2hTZXQ8U3RyaW5nPiBleHRl
bnNpb25zKTsKLSAgICB2b2lkIGNsZWFyU3VwcG9ydGVkUGx1Z2lucygpIHsgbV9zdXBwb3J0ZWRQ
bHVnaW5zID0gc3RkOjpudWxsb3B0OyB9Ci0KLXByaXZhdGU6Ci0gICAgUGx1Z2luTW9kdWxlSW5m
byBmaW5kUGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgV2ViQ29yZTo6
UGx1Z2luRGF0YTo6QWxsb3dlZFBsdWdpblR5cGVzKSBjb25zdDsKLSAgICBQbHVnaW5Nb2R1bGVJ
bmZvIGZpbmRQbHVnaW5Gb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24sIFN0cmlu
ZyYgbWltZVR5cGUsIFdlYkNvcmU6OlBsdWdpbkRhdGE6OkFsbG93ZWRQbHVnaW5UeXBlcykgY29u
c3Q7Ci0KLSAgICB2b2lkIGxvYWRQbHVnaW5zSWZOZWNlc3NhcnkoKTsKLSAgICBzdGF0aWMgdm9p
ZCBsb2FkUGx1Z2luKFZlY3RvcjxQbHVnaW5Nb2R1bGVJbmZvPiYgcGx1Z2lucywgY29uc3QgU3Ry
aW5nJiBwbHVnaW5QYXRoKTsKLSAgICAKLSAgICAvLyBQbGF0Zm9ybS1zcGVjaWZpYyBtZW1iZXIg
ZnVuY3Rpb25zOgotCi0gICAgLy8gUmV0dXJucyBwYXRocyB0byBkaXJlY3RvcmllcyB0aGF0IHNo
b3VsZCBiZSBzZWFyY2hlZCBmb3IgcGx1Zy1pbnMgKHZpYSBwbHVnaW5QYXRoc0luRGlyZWN0b3J5
KS4KLSAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gcGx1Z2luc0RpcmVjdG9yaWVzKCk7Ci0KLSAg
ICAvLyBSZXR1cm5zIHBhdGhzIHRvIGFsbCBwbHVnLWlucyBpbiB0aGUgc3BlY2lmaWVkIGRpcmVj
dG9yeS4KLSAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gcGx1Z2luUGF0aHNJbkRpcmVjdG9yeShj
b25zdCBTdHJpbmcmIGRpcmVjdG9yeSk7Ci0KLSAgICAvLyBSZXR1cm5zIHBhdGhzIHRvIGluZGl2
aWR1YWwgcGx1Zy1pbnMgdGhhdCB3b24ndCBiZSBmb3VuZCB2aWEgcGx1Z2luc0RpcmVjdG9yaWVz
L3BsdWdpblBhdGhzSW5EaXJlY3RvcnkuCi0gICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGluZGl2
aWR1YWxQbHVnaW5QYXRocygpOwotCi0gICAgLy8gTG9hZCBwbHVnLWluIGluZm8gZm9yIHRoZSBw
bHVnLWluIHdpdGggdGhlIHNwZWNpZmllZCBwYXRoLgotICAgIHN0YXRpYyBib29sIGdldFBsdWdp
bkluZm8oY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoLCBQbHVnaW5Nb2R1bGVJbmZvJik7Ci0KLSAg
ICAvLyBSZXR1cm4gd2hldGhlciB0aGlzIHBsdWctaW4gc2hvdWxkIGJlIHVzZWQgKGFkZGVkIHRv
IHRoZSBsaXN0IG9mIHBsdWctaW5zKSBvciBub3QuCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkVXNl
UGx1Z2luKFZlY3RvcjxQbHVnaW5Nb2R1bGVJbmZvPiYgYWxyZWFkeUxvYWRlZFBsdWdpbnMsIGNv
bnN0IFBsdWdpbk1vZHVsZUluZm8mKTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IG1fYWRkaXRpb25h
bFBsdWdpbnNEaXJlY3RvcmllczsKLSAgICBWZWN0b3I8UGx1Z2luTW9kdWxlSW5mbz4gbV9wbHVn
aW5zOwotICAgIGJvb2wgbV9wbHVnaW5MaXN0SXNVcFRvRGF0ZTsKLQotICAgIHN0cnVjdCBTdXBw
b3J0ZWRQbHVnaW4gewotICAgICAgICBTdHJpbmcgbWF0Y2hpbmdEb21haW47Ci0gICAgICAgIFN0
cmluZyBpZGVudGlmaWVyOwotICAgICAgICBIYXNoU2V0PFN0cmluZz4gbWltZVR5cGVzOwotICAg
ICAgICBIYXNoU2V0PFN0cmluZz4gZXh0ZW5zaW9uczsKLSAgICB9OwotICAgIHN0YXRpYyBib29s
IGlzU3VwcG9ydGVkUGx1Z2luKGNvbnN0IFN1cHBvcnRlZFBsdWdpbiYsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIGNvbnN0IFVSTCYgcGx1Z2luVVJMKTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8VmVj
dG9yPFN1cHBvcnRlZFBsdWdpbj4+IG1fc3VwcG9ydGVkUGx1Z2luczsKLX07Ci0gICAgCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9j
ZXNzTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblBy
b2Nlc3NNYW5hZ2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNkNWUzMzA2
MThmY2YzY2ZiNDgxNjY5YmUyMzZmMWQ2YWJlY2QyNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblByb2Nlc3NNYW5hZ2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJv
Y2Vzc01hbmFnZXIuaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5j
bHVkZSAiUGx1Z2luUHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5TWVz
c2FnZXMuaCIKLSNpbmNsdWRlICJXZWJzaXRlRGF0YUZldGNoT3B0aW9uLmgiCi0jaW5jbHVkZSA8
d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUGx1Z2luUHJvY2Vz
c01hbmFnZXImIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKQotewotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxQbHVnaW5Qcm9jZXNzTWFuYWdlcj4gcGx1Z2luUHJvY2Vzc01hbmFn
ZXI7Ci0gICAgcmV0dXJuIHBsdWdpblByb2Nlc3NNYW5hZ2VyOwotfQotCi1QbHVnaW5Qcm9jZXNz
TWFuYWdlcjo6UGx1Z2luUHJvY2Vzc01hbmFnZXIoKQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAg
IDogbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyKFt0aGlzXShSZWZD
b3VudGVyRXZlbnQgZXZlbnQpIHsgdXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWQoZXZl
bnQpOyB9KQotI2VuZGlmCi17Ci19Ci0KLXVpbnQ2NF90IFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpw
bHVnaW5Qcm9jZXNzVG9rZW4oY29uc3QgUGx1Z2luTW9kdWxlSW5mbyYgcGx1Z2luTW9kdWxlSW5m
bywgUGx1Z2luUHJvY2Vzc1NhbmRib3hQb2xpY3kgcGx1Z2luUHJvY2Vzc1NhbmRib3hQb2xpY3kp
Ci17Ci0gICAgLy8gU2VlIGlmIHdlIGtub3cgdGhpcyB0b2tlbiBhbHJlYWR5LgotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9wbHVnaW5Qcm9jZXNzVG9rZW5zLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGNvbnN0IFBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzID0gbV9wbHVn
aW5Qcm9jZXNzVG9rZW5zW2ldLmZpcnN0OwotCi0gICAgICAgIGlmIChhdHRyaWJ1dGVzLm1vZHVs
ZUluZm8ucGF0aCA9PSBwbHVnaW5Nb2R1bGVJbmZvLnBhdGgKLSAgICAgICAgICAgICYmIGF0dHJp
YnV0ZXMuc2FuZGJveFBvbGljeSA9PSBwbHVnaW5Qcm9jZXNzU2FuZGJveFBvbGljeSkKLSAgICAg
ICAgICAgIHJldHVybiBtX3BsdWdpblByb2Nlc3NUb2tlbnNbaV0uc2Vjb25kOwotICAgIH0KLQot
ICAgIHVpbnQ2NF90IHRva2VuOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGNyeXB0b2dy
YXBoaWNhbGx5UmFuZG9tVmFsdWVzKCZ0b2tlbiwgc2l6ZW9mKHRva2VuKSk7Ci0KLSAgICAgICAg
aWYgKG1fa25vd25Ub2tlbnMuaXNWYWxpZFZhbHVlKHRva2VuKSAmJiAhbV9rbm93blRva2Vucy5j
b250YWlucyh0b2tlbikpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBQbHVnaW5Q
cm9jZXNzQXR0cmlidXRlcyBhdHRyaWJ1dGVzOwotICAgIGF0dHJpYnV0ZXMubW9kdWxlSW5mbyA9
IHBsdWdpbk1vZHVsZUluZm87Ci0gICAgYXR0cmlidXRlcy5zYW5kYm94UG9saWN5ID0gcGx1Z2lu
UHJvY2Vzc1NhbmRib3hQb2xpY3k7Ci0KLSAgICBtX3BsdWdpblByb2Nlc3NUb2tlbnMuYXBwZW5k
KHN0ZDo6bWFrZV9wYWlyKFdURk1vdmUoYXR0cmlidXRlcyksIHRva2VuKSk7Ci0gICAgbV9rbm93
blRva2Vucy5hZGQodG9rZW4pOwotCi0gICAgcmV0dXJuIHRva2VuOwotfQotCi1ib29sIFBsdWdp
blByb2Nlc3NNYW5hZ2VyOjpnZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbih1aW50NjRfdCBwbHVn
aW5Qcm9jZXNzVG9rZW4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldFBsdWdpblByb2Nl
c3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBseSkKLXsKLSAgICBBU1NFUlQocGx1Z2lu
UHJvY2Vzc1Rva2VuKTsKLQotICAgIGF1dG8qIHBsdWdpblByb2Nlc3MgPSBnZXRPckNyZWF0ZVBs
dWdpblByb2Nlc3MocGx1Z2luUHJvY2Vzc1Rva2VuKTsKLSAgICBBU1NFUlQocGx1Z2luUHJvY2Vz
cyk7Ci0gICAgaWYgKCFwbHVnaW5Qcm9jZXNzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBwbHVnaW5Qcm9jZXNzLT5nZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbihXVEZNb3ZlKHJlcGx5
KSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnJl
bW92ZVBsdWdpblByb2Nlc3NQcm94eShQbHVnaW5Qcm9jZXNzUHJveHkqIHBsdWdpblByb2Nlc3NQ
cm94eSkKLXsKLSAgICBzaXplX3QgdmVjdG9ySW5kZXggPSBtX3BsdWdpblByb2Nlc3Nlcy5maW5k
KHBsdWdpblByb2Nlc3NQcm94eSk7Ci0gICAgQVNTRVJUKHZlY3RvckluZGV4ICE9IG5vdEZvdW5k
KTsKLQotICAgIG1fcGx1Z2luUHJvY2Vzc2VzLnJlbW92ZSh2ZWN0b3JJbmRleCk7Ci19Ci0KLXZv
aWQgUGx1Z2luUHJvY2Vzc01hbmFnZXI6OmZldGNoV2Vic2l0ZURhdGEoY29uc3QgUGx1Z2luTW9k
dWxlSW5mbyYgcGx1Z2luLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hP
cHRpb25zLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKFZlY3RvcjxTdHJpbmc+KT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKLXsKLSAgICBhdXRvIHRva2VuID0gcGx1Z2luUHJvY2Vzc1Rva2VuKHBsdWdpbiwg
UGx1Z2luUHJvY2Vzc1NhbmRib3hQb2xpY3k6Ok5vcm1hbCk7Ci0gICAgYXV0byBwbHVnaW5Qcm9j
ZXNzID0gZmV0Y2hPcHRpb25zLmNvbnRhaW5zKFdlYnNpdGVEYXRhRmV0Y2hPcHRpb246OkRvTm90
Q3JlYXRlUHJvY2Vzc2VzKSA/IGdldFBsdWdpblByb2Nlc3ModG9rZW4pIDogZ2V0T3JDcmVhdGVQ
bHVnaW5Qcm9jZXNzKHRva2VuKTsKLSAgICBpZiAoIXBsdWdpblByb2Nlc3MpIHsKLSAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBs
dWdpblByb2Nlc3MtPmZldGNoV2Vic2l0ZURhdGEoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotfQotCi12b2lkIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpkZWxldGVXZWJzaXRlRGF0YShjb25z
dCBQbHVnaW5Nb2R1bGVJbmZvJiBwbHVnaW4sIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIFdURjo6
RnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBQbHVnaW5Qcm9j
ZXNzUHJveHkqIHBsdWdpblByb2Nlc3MgPSBnZXRPckNyZWF0ZVBsdWdpblByb2Nlc3MocGx1Z2lu
UHJvY2Vzc1Rva2VuKHBsdWdpbiwgUGx1Z2luUHJvY2Vzc1NhbmRib3hQb2xpY3k6Ok5vcm1hbCkp
OwotICAgIHBsdWdpblByb2Nlc3MtPmRlbGV0ZVdlYnNpdGVEYXRhKG1vZGlmaWVkU2luY2UsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzTWFuYWdl
cjo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JIb3N0TmFtZXMoY29uc3QgUGx1Z2luTW9kdWxlSW5mbyYg
cGx1Z2luLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdE5hbWVzLFdURjo6RnVuY3Rpb248dm9p
ZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBQbHVnaW5Qcm9jZXNzUHJveHkqIHBs
dWdpblByb2Nlc3MgPSBnZXRPckNyZWF0ZVBsdWdpblByb2Nlc3MocGx1Z2luUHJvY2Vzc1Rva2Vu
KHBsdWdpbiwgUGx1Z2luUHJvY2Vzc1NhbmRib3hQb2xpY3k6Ok5vcm1hbCkpOwotICAgIHBsdWdp
blByb2Nlc3MtPmRlbGV0ZVdlYnNpdGVEYXRhRm9ySG9zdE5hbWVzKGhvc3ROYW1lcywgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCi1QbHVnaW5Qcm9jZXNzUHJveHkqIFBsdWdpblBy
b2Nlc3NNYW5hZ2VyOjpnZXRQbHVnaW5Qcm9jZXNzKHVpbnQ2NF90IHBsdWdpblByb2Nlc3NUb2tl
bikKLXsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHBsdWdpblByb2Nlc3MgOiBtX3BsdWdpblByb2Nl
c3NlcykgewotICAgICAgICBpZiAocGx1Z2luUHJvY2Vzcy0+cGx1Z2luUHJvY2Vzc1Rva2VuKCkg
PT0gcGx1Z2luUHJvY2Vzc1Rva2VuKQotICAgICAgICAgICAgcmV0dXJuIHBsdWdpblByb2Nlc3Mu
Z2V0KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLSNpZiBPUyhMSU5VWCkK
LXZvaWQgUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50KGJvb2wg
aXNDcml0aWNhbCkKLXsKLSAgICBmb3IgKGF1dG8mIHBsdWdpblByb2Nlc3MgOiBtX3BsdWdpblBy
b2Nlc3NlcykKLSAgICAgICAgcGx1Z2luUHJvY2Vzcy0+c2VuZE1lbW9yeVByZXNzdXJlRXZlbnQo
aXNDcml0aWNhbCk7Ci19Ci0jZW5kaWYKLQotUGx1Z2luUHJvY2Vzc1Byb3h5KiBQbHVnaW5Qcm9j
ZXNzTWFuYWdlcjo6Z2V0T3JDcmVhdGVQbHVnaW5Qcm9jZXNzKHVpbnQ2NF90IHBsdWdpblByb2Nl
c3NUb2tlbikKLXsKLSAgICBpZiAoYXV0byBleGlzdGluZ1Byb2Nlc3MgPSBnZXRQbHVnaW5Qcm9j
ZXNzKHBsdWdpblByb2Nlc3NUb2tlbikpCi0gICAgICAgIHJldHVybiBleGlzdGluZ1Byb2Nlc3M7
Ci0KLSAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZXNBbmRUb2tlbiA6IG1fcGx1Z2luUHJvY2Vzc1Rv
a2VucykgewotICAgICAgICBpZiAoYXR0cmlidXRlc0FuZFRva2VuLnNlY29uZCA9PSBwbHVnaW5Q
cm9jZXNzVG9rZW4pIHsKLSAgICAgICAgICAgIGF1dG8gcGx1Z2luUHJvY2VzcyA9IFBsdWdpblBy
b2Nlc3NQcm94eTo6Y3JlYXRlKHRoaXMsIGF0dHJpYnV0ZXNBbmRUb2tlbi5maXJzdCwgYXR0cmli
dXRlc0FuZFRva2VuLnNlY29uZCk7Ci0gICAgICAgICAgICBQbHVnaW5Qcm9jZXNzUHJveHkqIHBs
dWdpblByb2Nlc3NQdHIgPSBwbHVnaW5Qcm9jZXNzLnB0cigpOwotICAgICAgICAgICAgbV9wbHVn
aW5Qcm9jZXNzZXMuYXBwZW5kKFdURk1vdmUocGx1Z2luUHJvY2VzcykpOwotICAgICAgICAgICAg
cmV0dXJuIHBsdWdpblByb2Nlc3NQdHI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
bnVsbHB0cjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luUHJvY2Vzc01hbmFnZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMmUwZGJiMDAyZWIzZWYzMjgwNmMyZGFiYjUzMjg1NjQyMGZiY2Y1ZS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NNYW5hZ2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
MTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIlBsdWdpbk1vZHVsZUluZm8uaCIKLSNp
bmNsdWRlICJQbHVnaW5Qcm9jZXNzLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0F0dHJpYnV0
ZXMuaCIKLSNpbmNsdWRlICJQcm9jZXNzVGhyb3R0bGVyLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vz
c1Byb3h5TWVzc2FnZXNSZXBsaWVzLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3Bh
Y2UgSVBDIHsKLWNsYXNzIEVuY29kZXI7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFz
cyBQbHVnaW5JbmZvU3RvcmU7Ci1jbGFzcyBQbHVnaW5Qcm9jZXNzUHJveHk7Ci1jbGFzcyBXZWJQ
cm9jZXNzUHJveHk7Ci1lbnVtIGNsYXNzIFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24gOiB1aW50OF90
OwotCi1jbGFzcyBQbHVnaW5Qcm9jZXNzTWFuYWdlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoUGx1Z2luUHJvY2Vzc01hbmFnZXIpOwotICAgIGZyaWVuZCBOZXZlckRlc3Ryb3llZDxQbHVn
aW5Qcm9jZXNzTWFuYWdlcj47Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBsdWdpblByb2Nlc3NNYW5h
Z2VyJiBzaW5nbGV0b24oKTsKLQotICAgIHVpbnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbihjb25z
dCBQbHVnaW5Nb2R1bGVJbmZvJiwgUGx1Z2luUHJvY2Vzc1NhbmRib3hQb2xpY3kpOwotCi0gICAg
Ym9vbCBnZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbih1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9r
ZW4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9u
RGVsYXllZFJlcGx5JiYpOwotICAgIHZvaWQgcmVtb3ZlUGx1Z2luUHJvY2Vzc1Byb3h5KFBsdWdp
blByb2Nlc3NQcm94eSopOwotCi0gICAgdm9pZCBmZXRjaFdlYnNpdGVEYXRhKGNvbnN0IFBsdWdp
bk1vZHVsZUluZm8mLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4sIFdURjo6RnVu
Y3Rpb248dm9pZCAoVmVjdG9yPFN0cmluZz4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICB2
b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKGNvbnN0IFBsdWdpbk1vZHVsZUluZm8mLCBXYWxsVGltZSBt
b2RpZmllZFNpbmNlLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
OwotICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGFGb3JIb3N0TmFtZXMoY29uc3QgUGx1Z2luTW9k
dWxlSW5mbyYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBob3N0TmFtZXMsIFdURjo6RnVuY3Rpb248
dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7Ci0KLSNpZiBPUyhMSU5VWCkKLSAgICB2b2lk
IHNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50KGJvb2wgaXNDcml0aWNhbCk7Ci0jZW5kaWYKLQotI2lm
IFBMQVRGT1JNKENPQ09BKQotICAgIGlubGluZSBQcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZFRv
a2VuIHByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkVG9rZW4oKTsKLSAgICBpbmxpbmUgYm9vbCBw
cm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZCgpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRlUHJvY2Vz
c1N1cHByZXNzaW9uRGlzYWJsZWQoUmVmQ291bnRlckV2ZW50KTsKLSNlbmRpZgotCi0gICAgY29u
c3QgVmVjdG9yPFJlZlB0cjxQbHVnaW5Qcm9jZXNzUHJveHk+PiYgcGx1Z2luUHJvY2Vzc2VzKCkg
Y29uc3QgeyByZXR1cm4gbV9wbHVnaW5Qcm9jZXNzZXM7IH0KLQotI2lmIFBMQVRGT1JNKE1BQykK
LSAgICB2b2lkIHNldEV4cGVyaW1lbnRhbFBsdWdJblNhbmRib3hQcm9maWxlc0VuYWJsZWQoYm9v
bCk7Ci0gICAgYm9vbCBleHBlcmltZW50YWxQbHVnSW5TYW5kYm94UHJvZmlsZXNFbmFibGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9leHBlcmltZW50YWxQbHVnSW5TYW5kYm94UHJvZmlsZXNFbmFibGVk
OyB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBQbHVnaW5Qcm9jZXNzTWFuYWdlcigpOwotCi0g
ICAgUGx1Z2luUHJvY2Vzc1Byb3h5KiBnZXRQbHVnaW5Qcm9jZXNzKHVpbnQ2NF90IHBsdWdpblBy
b2Nlc3NUb2tlbik7Ci0gICAgUGx1Z2luUHJvY2Vzc1Byb3h5KiBnZXRPckNyZWF0ZVBsdWdpblBy
b2Nlc3ModWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2VuKTsKLQotICAgIFZlY3RvcjxzdGQ6OnBh
aXI8UGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMsIHVpbnQ2NF90Pj4gbV9wbHVnaW5Qcm9jZXNzVG9r
ZW5zOwotICAgIEhhc2hTZXQ8dWludDY0X3Q+IG1fa25vd25Ub2tlbnM7Ci0KLSAgICBWZWN0b3I8
UmVmUHRyPFBsdWdpblByb2Nlc3NQcm94eT4+IG1fcGx1Z2luUHJvY2Vzc2VzOwotCi0jaWYgUExB
VEZPUk0oQ09DT0EpCi0gICAgUHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRDb3VudGVyIG1fcHJv
Y2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlcjsKLSNlbmRpZgotI2lmIFBMQVRG
T1JNKE1BQykKLSAgICBib29sIG1fZXhwZXJpbWVudGFsUGx1Z0luU2FuZGJveFByb2ZpbGVzRW5h
YmxlZCB7IGZhbHNlIH07Ci0jZW5kaWYKLX07Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLWlubGlu
ZSBQcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZFRva2VuIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpw
cm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZFRva2VuKCkKLXsKLSAgICByZXR1cm4gbV9wcm9jZXNz
U3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLmNvdW50KCk7Ci19Ci0KLWlubGluZSBi
b29sIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpwcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291
bnRlci52YWx1ZSgpOwotfQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGM0MDM1MzgxYmI4YTE1M2ZkMDBhOGU0YzZjZjIwN2E0ODMxYmMw
ZmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMzA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzUHJveHkuaCIKLQotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiQXV4aWxpYXJ5UHJvY2Vzc01lc3NhZ2VzLmgi
Ci0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyTWVzc2FnZXMuaCIKLSNp
bmNsdWRlICJQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0jaW5jbHVkZSAiUGx1
Z2luUHJvY2Vzc01hbmFnZXIuaCIKLSNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzTWVzc2FnZXMuaCIK
LSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNz
UG9vbC5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgIldlYlByb2Nl
c3NQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgot
I2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLXN0YXRpYyBjb25zdCBTZWNvbmRzIG1pbmltdW1MaWZldGltZSB7
IDJfbWluIH07Ci1zdGF0aWMgY29uc3QgU2Vjb25kcyBzbmFwc2hvdHRpbmdNaW5pbXVtTGlmZXRp
bWUgeyAzMF9zIH07Ci0KLXN0YXRpYyBjb25zdCBTZWNvbmRzIHNodXRkb3duVGltZW91dCB7IDFf
bWluIH07Ci1zdGF0aWMgY29uc3QgU2Vjb25kcyBzbmFwc2hvdHRpbmdTaHV0ZG93blRpbWVvdXQg
eyAxNV9zIH07Ci0KLXN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVBsdWdpblByb2Nlc3NDYWxsYmFj
a0lEKCkKLXsKLSAgICBzdGF0aWMgdWludDY0X3QgY2FsbGJhY2tJRDsKLQotICAgIHJldHVybiAr
K2NhbGxiYWNrSUQ7Ci19Ci0KLVJlZjxQbHVnaW5Qcm9jZXNzUHJveHk+IFBsdWdpblByb2Nlc3NQ
cm94eTo6Y3JlYXRlKFBsdWdpblByb2Nlc3NNYW5hZ2VyKiBQbHVnaW5Qcm9jZXNzTWFuYWdlciwg
Y29uc3QgUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMmIHBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLCB1
aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4pCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
UGx1Z2luUHJvY2Vzc1Byb3h5KFBsdWdpblByb2Nlc3NNYW5hZ2VyLCBwbHVnaW5Qcm9jZXNzQXR0
cmlidXRlcywgcGx1Z2luUHJvY2Vzc1Rva2VuKSk7Ci19Ci0KLVBsdWdpblByb2Nlc3NQcm94eTo6
UGx1Z2luUHJvY2Vzc1Byb3h5KFBsdWdpblByb2Nlc3NNYW5hZ2VyKiBQbHVnaW5Qcm9jZXNzTWFu
YWdlciwgY29uc3QgUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMmIHBsdWdpblByb2Nlc3NBdHRyaWJ1
dGVzLCB1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4pCi0gICAgOiBtX3Rocm90dGxlcigqdGhp
cywgZmFsc2UpCi0gICAgLCBtX3BsdWdpblByb2Nlc3NNYW5hZ2VyKFBsdWdpblByb2Nlc3NNYW5h
Z2VyKQotICAgICwgbV9wbHVnaW5Qcm9jZXNzQXR0cmlidXRlcyhwbHVnaW5Qcm9jZXNzQXR0cmli
dXRlcykKLSAgICAsIG1fcGx1Z2luUHJvY2Vzc1Rva2VuKHBsdWdpblByb2Nlc3NUb2tlbikKLSAg
ICAsIG1fbnVtUGVuZGluZ0Nvbm5lY3Rpb25SZXF1ZXN0cygwKQotI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgICwgbV9tb2RhbFdpbmRvd0lzU2hvd2luZyhmYWxzZSkKLSAgICAsIG1fZnVsbHNjcmVl
bldpbmRvd0lzU2hvd2luZyhmYWxzZSkKLSAgICAsIG1fcHJlRnVsbHNjcmVlbkFwcFByZXNlbnRh
dGlvbk9wdGlvbnMoMCkKLSNlbmRpZgotewotICAgIGNvbm5lY3QoKTsKLX0KLQotUGx1Z2luUHJv
Y2Vzc1Byb3h5Ojp+UGx1Z2luUHJvY2Vzc1Byb3h5KCkKLXsKLSAgICBpZiAobV9jb25uZWN0aW9u
KQotICAgICAgICBtX2Nvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKLQotICAgIEFTU0VSVChtX3Bl
bmRpbmdGZXRjaFdlYnNpdGVEYXRhUmVxdWVzdHMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQobV9w
ZW5kaW5nRmV0Y2hXZWJzaXRlRGF0YUNhbGxiYWNrcy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVCht
X3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YVJlcXVlc3RzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJU
KG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhQ2FsbGJhY2tzLmlzRW1wdHkoKSk7Ci19Ci0KLXZv
aWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6
TGF1bmNoT3B0aW9ucyYgbGF1bmNoT3B0aW9ucykKLXsKLSAgICBwbGF0Zm9ybUdldExhdW5jaE9w
dGlvbnNXaXRoQXR0cmlidXRlcyhsYXVuY2hPcHRpb25zLCBtX3BsdWdpblByb2Nlc3NBdHRyaWJ1
dGVzKTsKLSAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMobGF1bmNo
T3B0aW9ucyk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5Ojpwcm9jZXNzV2lsbFNodXRE
b3duKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbikKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGNv
bm5lY3Rpb24sIHRoaXMtPmNvbm5lY3Rpb24oKSA9PSAmY29ubmVjdGlvbik7Ci19Ci0KLS8vIEFz
a3MgdGhlIHBsdWctaW4gcHJvY2VzcyB0byBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbiB0byBhIHdl
YiBwcm9jZXNzLiBUaGUgY29ubmVjdGlvbiBpZGVudGlmaWVyIHdpbGwgYmUgCi0vLyBlbmNvZGVk
IGluIHRoZSBnaXZlbiBhcmd1bWVudCBlbmNvZGVyIGFuZCBzZW50IGJhY2sgdG8gdGhlIGNvbm5l
Y3Rpb24gb2YgdGhlIGdpdmVuIHdlYiBwcm9jZXNzLgotdm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6
OmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6Okdl
dFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBseSkKLXsKLSAgICBt
X3BlbmRpbmdDb25uZWN0aW9uUmVwbGllcy5hcHBlbmQoV1RGTW92ZShyZXBseSkpOwotCi0gICAg
aWYgKHN0YXRlKCkgPT0gU3RhdGU6OkxhdW5jaGluZykgewotICAgICAgICBtX251bVBlbmRpbmdD
b25uZWN0aW9uUmVxdWVzdHMrKzsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAv
LyBBc2sgdGhlIHBsdWctaW4gcHJvY2VzcyB0byBjcmVhdGUgYSBjb25uZWN0aW9uLiBTaW5jZSB0
aGUgcGx1Zy1pbiBjYW4gYmUgd2FpdGluZyBmb3IgYSBzeW5jaHJvbm91cyByZXBseQotICAgIC8v
IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhpcyBtZXNzYWdlIGlzIGFsd2F5cyBwcm9jZXNz
ZWQsIGV2ZW4gd2hlbiB0aGUgcGx1Zy1pbiBpcyB3YWl0aW5nIGZvciBhIHN5bmNocm9udXMgcmVw
bHkuCi0gICAgbV9jb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Qcm9jZXNzOjpDcmVh
dGVXZWJQcm9jZXNzQ29ubmVjdGlvbigpLCAwLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVz
c2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vz
c1Byb3h5OjpmZXRjaFdlYnNpdGVEYXRhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKFZlY3RvcjxT
dHJpbmc+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICB1aW50NjRfdCBjYWxsYmFja0lE
ID0gZ2VuZXJhdGVQbHVnaW5Qcm9jZXNzQ2FsbGJhY2tJRCgpOwotICAgIG1fcGVuZGluZ0ZldGNo
V2Vic2l0ZURhdGFDYWxsYmFja3Muc2V0KGNhbGxiYWNrSUQsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLQotICAgIGlmIChzdGF0ZSgpID09IFN0YXRlOjpMYXVuY2hpbmcpIHsKLSAgICAg
ICAgbV9wZW5kaW5nRmV0Y2hXZWJzaXRlRGF0YVJlcXVlc3RzLmFwcGVuZChjYWxsYmFja0lEKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY29ubmVjdGlvbi0+c2VuZChNZXNzYWdl
czo6UGx1Z2luUHJvY2Vzczo6R2V0U2l0ZXNXaXRoRGF0YShjYWxsYmFja0lEKSwgMCk7Ci19Ci0K
LXZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjpkZWxldGVXZWJzaXRlRGF0YShXYWxsVGltZSBtb2Rp
ZmllZFNpbmNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQotewotICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBnZW5lcmF0ZVBsdWdpblByb2Nlc3NDYWxs
YmFja0lEKCk7Ci0gICAgbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFDYWxsYmFja3Muc2V0KGNh
bGxiYWNrSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGlmIChzdGF0ZSgp
ID09IFN0YXRlOjpMYXVuY2hpbmcpIHsKLSAgICAgICAgbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURh
dGFSZXF1ZXN0cy5hcHBlbmQoeyBtb2RpZmllZFNpbmNlLCBjYWxsYmFja0lEIH0pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpQbHVn
aW5Qcm9jZXNzOjpEZWxldGVXZWJzaXRlRGF0YShtb2RpZmllZFNpbmNlLCBjYWxsYmFja0lEKSwg
MCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjpkZWxldGVXZWJzaXRlRGF0YUZvckhv
c3ROYW1lcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdE5hbWVzLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIHVpbnQ2NF90IGNhbGxiYWNr
SUQgPSBnZW5lcmF0ZVBsdWdpblByb2Nlc3NDYWxsYmFja0lEKCk7Ci0gICAgbV9wZW5kaW5nRGVs
ZXRlV2Vic2l0ZURhdGFGb3JIb3N0TmFtZXNDYWxsYmFja3Muc2V0KGNhbGxiYWNrSUQsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGlmIChzdGF0ZSgpID09IFN0YXRlOjpMYXVu
Y2hpbmcpIHsKLSAgICAgICAgbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFGb3JIb3N0TmFtZXNS
ZXF1ZXN0cy5hcHBlbmQoeyBob3N0TmFtZXMsIGNhbGxiYWNrSUQgfSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBtX2Nvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OlBsdWdpblByb2Nl
c3M6OkRlbGV0ZVdlYnNpdGVEYXRhRm9ySG9zdE5hbWVzKGhvc3ROYW1lcywgY2FsbGJhY2tJRCks
IDApOwotfQotCi0jaWYgT1MoTElOVVgpCi12b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6c2VuZE1l
bW9yeVByZXNzdXJlRXZlbnQoYm9vbCBpc0NyaXRpY2FsKQotewotICAgIGlmIChzdGF0ZSgpID09
IFN0YXRlOjpMYXVuY2hpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29ubmVjdGlvbi0+
c2VuZChNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJl
RXZlbnQoaXNDcml0aWNhbCksIDApOwotfQotI2VuZGlmCi0KLXZvaWQgUGx1Z2luUHJvY2Vzc1By
b3h5OjpwbHVnaW5Qcm9jZXNzQ3Jhc2hlZE9yRmFpbGVkVG9MYXVuY2goKQotewotICAgIC8vIFRo
ZSBwbHVnLWluIHByb2Nlc3MgbXVzdCBoYXZlIGNyYXNoZWQgb3IgZXhpdGVkLCBzZW5kIGFueSBw
ZW5kaW5nIHN5bmMgcmVwbGllcyB3ZSBtaWdodCBoYXZlLgotICAgIHdoaWxlICghbV9wZW5kaW5n
Q29ubmVjdGlvblJlcGxpZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8gcmVwbHkgPSBtX3Bl
bmRpbmdDb25uZWN0aW9uUmVwbGllcy50YWtlRmlyc3QoKTsKLQotI2lmIFVTRShVTklYX0RPTUFJ
Tl9TT0NLRVRTKQotICAgICAgICByZXBseShJUEM6OkF0dGFjaG1lbnQoKSwgZmFsc2UpOwotI2Vs
aWYgT1MoREFSV0lOKQotICAgICAgICByZXBseShJUEM6OkF0dGFjaG1lbnQoMCwgTUFDSF9NU0df
VFlQRV9NT1ZFX1NFTkQpLCBmYWxzZSk7Ci0jZWxzZQotICAgICAgICBub3RJbXBsZW1lbnRlZCgp
OwotI2VuZGlmCi0gICAgfQotCi0gICAgbV9wZW5kaW5nRmV0Y2hXZWJzaXRlRGF0YVJlcXVlc3Rz
LmNsZWFyKCk7Ci0gICAgZm9yIChhdXRvJiYgY2FsbGJhY2sgOiBtX3BlbmRpbmdGZXRjaFdlYnNp
dGVEYXRhQ2FsbGJhY2tzLnZhbHVlcygpKQotICAgICAgICBjYWxsYmFjayh7IH0pOwotICAgIG1f
cGVuZGluZ0ZldGNoV2Vic2l0ZURhdGFDYWxsYmFja3MuY2xlYXIoKTsKLQotICAgIG1fcGVuZGlu
Z0RlbGV0ZVdlYnNpdGVEYXRhUmVxdWVzdHMuY2xlYXIoKTsKLSAgICBmb3IgKGF1dG8mJiBjYWxs
YmFjayA6IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhQ2FsbGJhY2tzLnZhbHVlcygpKQotICAg
ICAgICBjYWxsYmFjaygpOwotICAgIG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhUmVxdWVzdHMu
Y2xlYXIoKTsKLQotICAgIG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhRm9ySG9zdE5hbWVzUmVx
dWVzdHMuY2xlYXIoKTsKLSAgICBmb3IgKGF1dG8mJiBjYWxsYmFjayA6IG1fcGVuZGluZ0RlbGV0
ZVdlYnNpdGVEYXRhRm9ySG9zdE5hbWVzQ2FsbGJhY2tzLnZhbHVlcygpKQotICAgICAgICBjYWxs
YmFjaygpOwotICAgIG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhRm9ySG9zdE5hbWVzQ2FsbGJh
Y2tzLmNsZWFyKCk7Ci0KLSAgICAvLyBUZWxsIHRoZSBwbHVnLWluIHByb2Nlc3MgbWFuYWdlciB0
byBmb3JnZXQgYWJvdXQgdGhpcyBwbHVnLWluIHByb2Nlc3MgcHJveHkuIFRoaXMgbWF5IGNhdXNl
IHVzIHRvIGJlIGRlbGV0ZWQuCi0gICAgbV9wbHVnaW5Qcm9jZXNzTWFuYWdlci0+cmVtb3ZlUGx1
Z2luUHJvY2Vzc1Byb3h5KHRoaXMpOwotfQotCi12b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6ZGlk
Q2xvc2UoSVBDOjpDb25uZWN0aW9uJikKLXsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAo
bV9tb2RhbFdpbmRvd0lzU2hvd2luZykKLSAgICAgICAgZW5kTW9kYWwoKTsKLQotICAgIGlmICht
X2Z1bGxzY3JlZW5XaW5kb3dJc1Nob3dpbmcpCi0gICAgICAgIGV4aXRGdWxsc2NyZWVuKCk7Ci0j
ZW5kaWYKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxs
UHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNzZXMo
TWVzc2FnZXM6OlBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcjo6UGx1Z2luUHJvY2Vzc0Ny
YXNoZWQobV9wbHVnaW5Qcm9jZXNzVG9rZW4pKTsKLQotICAgIC8vIFRoaXMgd2lsbCBjYXVzZSB1
cyB0byBiZSBkZWxldGVkLgotICAgIHBsdWdpblByb2Nlc3NDcmFzaGVkT3JGYWlsZWRUb0xhdW5j
aCgpOwotfQotCi12b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZUludmFsaWRNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpNZXNzYWdlTmFtZSBtZXNzYWdl
TmFtZSkKLXsKLSAgICBsb2dJbnZhbGlkTWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlTmFtZSk7
Ci0gICAgdGVybWluYXRlKCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjpkaWRGaW5p
c2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVyKiwgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVy
IGNvbm5lY3Rpb25JZGVudGlmaWVyKQotewotICAgIEFTU0VSVCghbV9jb25uZWN0aW9uKTsKLQot
ICAgIGlmICghSVBDOjpDb25uZWN0aW9uOjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9uSWRl
bnRpZmllcikpIHsKLSAgICAgICAgcGx1Z2luUHJvY2Vzc0NyYXNoZWRPckZhaWxlZFRvTGF1bmNo
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2Nvbm5lY3Rpb24gPSBJUEM6OkNv
bm5lY3Rpb246OmNyZWF0ZVNlcnZlckNvbm5lY3Rpb24oY29ubmVjdGlvbklkZW50aWZpZXIsICp0
aGlzKTsKLQotICAgIG1fY29ubmVjdGlvbi0+b3BlbigpOwotICAgIAotICAgIFBsdWdpblByb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLSAgICBwYXJhbWV0ZXJzLm1pbmltdW1M
aWZldGltZSA9IG1pbmltdW1MaWZldGltZTsKLSAgICBwYXJhbWV0ZXJzLnRlcm1pbmF0aW9uVGlt
ZW91dCA9IHNodXRkb3duVGltZW91dDsKLQotICAgIHBsYXRmb3JtSW5pdGlhbGl6ZVBsdWdpblBy
b2Nlc3MocGFyYW1ldGVycyk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBwbHVnLWluIGhvc3Qg
cHJvY2Vzcy4KLSAgICBtX2Nvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OlBsdWdpblByb2Nlc3M6
OkluaXRpYWxpemVQbHVnaW5Qcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKLQotI2lmIFBMQVRGT1JN
KENPQ09BKQotICAgIG1fY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6UGx1Z2luUHJvY2Vzczo6
U2V0UU9TKHBsdWdpblByb2Nlc3NMYXRlbmN5UU9TKCksIHBsdWdpblByb2Nlc3NUaHJvdWdocHV0
UU9TKCkpLCAwKTsKLSNlbmRpZgotCi0gICAgZm9yIChhdXRvIGNhbGxiYWNrSUQgOiBtX3BlbmRp
bmdGZXRjaFdlYnNpdGVEYXRhUmVxdWVzdHMpCi0gICAgICAgIG1fY29ubmVjdGlvbi0+c2VuZChN
ZXNzYWdlczo6UGx1Z2luUHJvY2Vzczo6R2V0U2l0ZXNXaXRoRGF0YShjYWxsYmFja0lEKSwgMCk7
Ci0gICAgbV9wZW5kaW5nRmV0Y2hXZWJzaXRlRGF0YVJlcXVlc3RzLmNsZWFyKCk7Ci0KLSAgICBm
b3IgKGF1dG8mIHJlcXVlc3QgOiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YVJlcXVlc3RzKQot
ICAgICAgICBtX2Nvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OlBsdWdpblByb2Nlc3M6OkRlbGV0
ZVdlYnNpdGVEYXRhKHJlcXVlc3QubW9kaWZpZWRTaW5jZSwgcmVxdWVzdC5jYWxsYmFja0lEKSwg
MCk7Ci0gICAgbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFSZXF1ZXN0cy5jbGVhcigpOwotCi0g
ICAgZm9yIChhdXRvJiByZXF1ZXN0IDogbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFGb3JIb3N0
TmFtZXNSZXF1ZXN0cykKLSAgICAgICAgbV9jb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpQbHVn
aW5Qcm9jZXNzOjpEZWxldGVXZWJzaXRlRGF0YUZvckhvc3ROYW1lcyhyZXF1ZXN0Lmhvc3ROYW1l
cywgcmVxdWVzdC5jYWxsYmFja0lEKSwgMCk7Ci0gICAgbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURh
dGFGb3JIb3N0TmFtZXNSZXF1ZXN0cy5jbGVhcigpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fbnVtUGVuZGluZ0Nvbm5lY3Rpb25SZXF1ZXN0czsgKytpKQotICAgICAgICBtX2Nv
bm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OlBsdWdpblByb2Nlc3M6OkNyZWF0ZVdlYlByb2Nlc3ND
b25uZWN0aW9uKCksIDApOwotICAgIAotICAgIG1fbnVtUGVuZGluZ0Nvbm5lY3Rpb25SZXF1ZXN0
cyA9IDA7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAoIVBsdWdpblByb2Nlc3NNYW5h
Z2VyOjpzaW5nbGV0b24oKS5wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZCgpKQotICAgICAgICBz
ZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHRydWUpOwotI2VuZGlmCi19Ci0KLXZvaWQgUGx1
Z2luUHJvY2Vzc1Byb3h5OjpkaWRDcmVhdGVXZWJQcm9jZXNzQ29ubmVjdGlvbihjb25zdCBJUEM6
OkF0dGFjaG1lbnQmIGNvbm5lY3Rpb25JZGVudGlmaWVyLCBib29sIHN1cHBvcnRzQXN5bmNocm9u
b3VzUGx1Z2luSW5pdGlhbGl6YXRpb24pCi17Ci0gICAgQVNTRVJUKCFtX3BlbmRpbmdDb25uZWN0
aW9uUmVwbGllcy5pc0VtcHR5KCkpOwotCi0gICAgLy8gR3JhYiB0aGUgZmlyc3QgcGVuZGluZyBj
b25uZWN0aW9uIHJlcGx5LgotICAgIGF1dG8gcmVwbHkgPSBtX3BlbmRpbmdDb25uZWN0aW9uUmVw
bGllcy50YWtlRmlyc3QoKTsKLQotI2lmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQotICAgIHJl
cGx5KGNvbm5lY3Rpb25JZGVudGlmaWVyLCBzdXBwb3J0c0FzeW5jaHJvbm91c1BsdWdpbkluaXRp
YWxpemF0aW9uKTsKLSNlbGlmIE9TKERBUldJTikKLSAgICByZXBseShJUEM6OkF0dGFjaG1lbnQo
Y29ubmVjdGlvbklkZW50aWZpZXIucG9ydCgpLCBNQUNIX01TR19UWVBFX01PVkVfU0VORCksIHN1
cHBvcnRzQXN5bmNocm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRpb24pOwotI2Vsc2UKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotI2VuZGlmCi19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjpkaWRH
ZXRTaXRlc1dpdGhEYXRhKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzaXRlcywgdWludDY0X3QgY2Fs
bGJhY2tJRCkKLXsKLSAgICBhdXRvIGNhbGxiYWNrID0gbV9wZW5kaW5nRmV0Y2hXZWJzaXRlRGF0
YUNhbGxiYWNrcy50YWtlKGNhbGxiYWNrSUQpOwotICAgIGNhbGxiYWNrKHNpdGVzKTsKLX0KLQot
dm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6OmRpZERlbGV0ZVdlYnNpdGVEYXRhKHVpbnQ2NF90IGNh
bGxiYWNrSUQpCi17Ci0gICAgYXV0byBjYWxsYmFjayA9IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVE
YXRhQ2FsbGJhY2tzLnRha2UoY2FsbGJhY2tJRCk7Ci0gICAgY2FsbGJhY2soKTsKLX0KLQotdm9p
ZCBQbHVnaW5Qcm9jZXNzUHJveHk6OmRpZERlbGV0ZVdlYnNpdGVEYXRhRm9ySG9zdE5hbWVzKHVp
bnQ2NF90IGNhbGxiYWNrSUQpCi17Ci0gICAgYXV0byBjYWxsYmFjayA9IG1fcGVuZGluZ0RlbGV0
ZVdlYnNpdGVEYXRhRm9ySG9zdE5hbWVzQ2FsbGJhY2tzLnRha2UoY2FsbGJhY2tJRCk7Ci0gICAg
Y2FsbGJhY2soKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzYjRhMmFlZDE0MWJlYTgyNDI1ZGFhMjY1MDJhYmEyZWE3MmU5MzA3Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJBdXhpbGlhcnlQcm9jZXNzUHJveHkuaCIKLSNpbmNs
dWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiUGx1Z2luTW9kdWxlSW5mby5oIgotI2luY2x1
ZGUgIlBsdWdpblByb2Nlc3MuaCIKLSNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzQXR0cmlidXRlcy5o
IgotI2luY2x1ZGUgIlByb2Nlc3NMYXVuY2hlci5oIgotI2luY2x1ZGUgIlByb2Nlc3NUaHJvdHRs
ZXIuaCIKLSNpbmNsdWRlICJQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiV2Vi
UHJvY2Vzc1Byb3h5TWVzc2FnZXNSZXBsaWVzLmgiCi0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0K
LSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci1PQkpDX0NM
QVNTIE5TT2JqZWN0OwotT0JKQ19DTEFTUyBXS1BsYWNlaG9sZGVyTW9kYWxXaW5kb3c7Ci0jZW5k
aWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFBsdWdpblByb2Nlc3NNYW5hZ2VyOwot
Y2xhc3MgV2ViUHJvY2Vzc1Byb3h5Owotc3RydWN0IFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnM7Ci0KLSNpZiBQTFVHSU5fQVJDSElURUNUVVJFKFVOSVgpCi1zdHJ1Y3QgUmF3UGx1Z2lu
TWV0YURhdGEgewotICAgIFN0cmluZyBuYW1lOwotICAgIFN0cmluZyBkZXNjcmlwdGlvbjsKLSAg
ICBTdHJpbmcgbWltZURlc2NyaXB0aW9uOwotfTsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09D
T0EpCi1pbnQgcGx1Z2luUHJvY2Vzc0xhdGVuY3lRT1MoKTsKLWludCBwbHVnaW5Qcm9jZXNzVGhy
b3VnaHB1dFFPUygpOwotI2VuZGlmCi0KLWNsYXNzIFBsdWdpblByb2Nlc3NQcm94eSBmaW5hbCA6
IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzUHJveHksIHByaXZhdGUgUHJvY2Vzc1Rocm90dGxlckNs
aWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxQbHVnaW5Qcm9jZXNzUHJveHk+IGNyZWF0
ZShQbHVnaW5Qcm9jZXNzTWFuYWdlciosIGNvbnN0IFBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzJiwg
dWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2VuKTsKLSAgICB+UGx1Z2luUHJvY2Vzc1Byb3h5KCk7
Ci0KLSAgICBjb25zdCBQbHVnaW5Qcm9jZXNzQXR0cmlidXRlcyYgcGx1Z2luUHJvY2Vzc0F0dHJp
YnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpblByb2Nlc3NBdHRyaWJ1dGVzOyB9Ci0gICAg
dWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2VuKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5Qcm9j
ZXNzVG9rZW47IH0KLQotICAgIC8vIEFza3MgdGhlIHBsdWctaW4gcHJvY2VzcyB0byBjcmVhdGUg
YSBuZXcgY29ubmVjdGlvbiB0byBhIHdlYiBwcm9jZXNzLiBUaGUgY29ubmVjdGlvbiBpZGVudGlm
aWVyIHdpbGwgYmUKLSAgICAvLyBlbmNvZGVkIGluIHRoZSBnaXZlbiBhcmd1bWVudCBlbmNvZGVy
IGFuZCBzZW50IGJhY2sgdG8gdGhlIGNvbm5lY3Rpb24gb2YgdGhlIGdpdmVuIHdlYiBwcm9jZXNz
LgotICAgIHZvaWQgZ2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24oTWVzc2FnZXM6OldlYlByb2Nl
c3NQcm94eTo6R2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkmJik7Ci0KLSAg
ICB2b2lkIGZldGNoV2Vic2l0ZURhdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAoVmVjdG9yPFN0
cmluZz4pPiYmKTsKLSAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKFdhbGxUaW1lIG1vZGlmaWVk
U2luY2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKCk+JiYpOwotICAgIHZvaWQgZGVsZXRlV2Vi
c2l0ZURhdGFGb3JIb3N0TmFtZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3ROYW1lcywgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCAoKT4mJik7Ci0KLSNpZiBPUyhMSU5VWCkKLSAgICB2b2lkIHNl
bmRNZW1vcnlQcmVzc3VyZUV2ZW50KGJvb2wgaXNDcml0aWNhbCk7Ci0jZW5kaWYKLQotICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29ubmVjdGlvbjsgfQotCi0jaWYgUExVR0lO
X0FSQ0hJVEVDVFVSRShVTklYKQotICAgIHN0YXRpYyBib29sIHNjYW5QbHVnaW4oY29uc3QgU3Ry
aW5nJiBwbHVnaW5QYXRoLCBSYXdQbHVnaW5NZXRhRGF0YSYgcmVzdWx0KTsKLSNlbmRpZgotCi0g
ICAgUHJvY2Vzc1Rocm90dGxlciYgdGhyb3R0bGVyKCkgZmluYWwgeyByZXR1cm4gbV90aHJvdHRs
ZXI7IH0KLQotcHJpdmF0ZToKLSAgICBQbHVnaW5Qcm9jZXNzUHJveHkoUGx1Z2luUHJvY2Vzc01h
bmFnZXIqLCBjb25zdCBQbHVnaW5Qcm9jZXNzQXR0cmlidXRlcyYsIHVpbnQ2NF90IHBsdWdpblBy
b2Nlc3NUb2tlbik7Ci0KLSAgICAvLyBBdXhpbGlhcnlQcm9jZXNzUHJveHkKLSAgICBBU0NJSUxp
dGVyYWwgcHJvY2Vzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiUGx1Z2luIl9zOyB9Ci0K
LSAgICB2b2lkIGdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25z
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnNXaXRoQXR0cmli
dXRlcyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmLCBjb25zdCBQbHVnaW5Qcm9jZXNz
QXR0cmlidXRlcyYpOwotICAgIHZvaWQgcHJvY2Vzc1dpbGxTaHV0RG93bihJUEM6OkNvbm5lY3Rp
b24mKSBvdmVycmlkZTsKLQotICAgIHZvaWQgcGx1Z2luUHJvY2Vzc0NyYXNoZWRPckZhaWxlZFRv
TGF1bmNoKCk7Ci0KLSAgICAvLyBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50Ci0gICAgdm9pZCBzZW5k
UHJlcGFyZVRvU3VzcGVuZChJc1N1c3BlbnNpb25JbW1pbmVudCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbCB7IGNvbXBsZXRpb25IYW5kbGVyKCk7
IH0KLSAgICB2b2lkIHNlbmRQcm9jZXNzRGlkUmVzdW1lKCkgZmluYWwgeyB9Ci0gICAgQVNDSUlM
aXRlcmFsIGNsaWVudE5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiUGx1Z2luUHJvY2VzcyJf
czsgfQotCi0gICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKLSAgICB2b2lkIGRpZFJlY2Vp
dmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwotICAg
IGJvb2wgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2Rl
ciYsIFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRpZENs
b3NlKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkUmVjZWl2ZUludmFs
aWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6TWVzc2FnZU5hbWUpIG92ZXJyaWRlOwot
Ci0gICAgLy8gUHJvY2Vzc0xhdW5jaGVyOjpDbGllbnQKLSAgICB2b2lkIGRpZEZpbmlzaExhdW5j
aGluZyhQcm9jZXNzTGF1bmNoZXIqLCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIpIG92ZXJy
aWRlOwotCi0gICAgLy8gTWVzc2FnZSBoYW5kbGVycwotICAgIHZvaWQgZGlkQ3JlYXRlV2ViUHJv
Y2Vzc0Nvbm5lY3Rpb24oY29uc3QgSVBDOjpBdHRhY2htZW50JiwgYm9vbCBzdXBwb3J0c0FzeW5j
aHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uKTsKLSAgICB2b2lkIGRpZEdldFNpdGVzV2l0aERh
dGEoY29uc3QgVmVjdG9yPFN0cmluZz4mIHNpdGVzLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKLSAg
ICB2b2lkIGRpZERlbGV0ZVdlYnNpdGVEYXRhKHVpbnQ2NF90IGNhbGxiYWNrSUQpOwotICAgIHZv
aWQgZGlkRGVsZXRlV2Vic2l0ZURhdGFGb3JIb3N0TmFtZXModWludDY0X3QgY2FsbGJhY2tJRCk7
Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBib29sIGdldFBsdWdpblByb2Nlc3NTZXJpYWxO
dW1iZXIoUHJvY2Vzc1NlcmlhbE51bWJlciYpOwotICAgIHZvaWQgbWFrZVBsdWdpblByb2Nlc3NU
aGVGcm9udFByb2Nlc3MoKTsKLSAgICB2b2lkIG1ha2VVSVByb2Nlc3NUaGVGcm9udFByb2Nlc3Mo
KTsKLQotICAgIHZvaWQgc2V0RnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZyhib29sKTsKLSAgICB2
b2lkIGVudGVyRnVsbHNjcmVlbigpOwotICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKTsKLQotICAg
IHZvaWQgc2V0TW9kYWxXaW5kb3dJc1Nob3dpbmcoYm9vbCk7Ci0gICAgdm9pZCBiZWdpbk1vZGFs
KCk7Ci0gICAgdm9pZCBlbmRNb2RhbCgpOwotCi0gICAgdm9pZCBhcHBsaWNhdGlvbkRpZEJlY29t
ZUFjdGl2ZSgpOwotICAgIHZvaWQgbGF1bmNoUHJvY2Vzcyhjb25zdCBTdHJpbmcmIGxhdW5jaFBh
dGgsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhcmd1bWVudHMsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYpOwotICAgIHZvaWQgbGF1bmNoQXBwbGljYXRpb25BdFVSTChjb25zdCBTdHJp
bmcmIHVybFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJik7Ci0gICAgdm9pZCBvcGVuVVJMKGNvbnN0IFN0cmluZyYg
dXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgcmVzdWx0LCBpbnQzMl90IHN0YXR1cywg
U3RyaW5nIGxhdW5jaGVkVVJMU3RyaW5nKT4mJik7Ci0gICAgdm9pZCBvcGVuRmlsZShjb25zdCBT
dHJpbmcmIGZ1bGxQYXRoLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKLSNlbmRp
ZgotCi0gICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVQbHVnaW5Qcm9jZXNzKFBsdWdpblByb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpOwotCi0gICAgUHJvY2Vzc1Rocm90dGxl
ciBtX3Rocm90dGxlcjsKLQotICAgIC8vIFRoZSBwbHVnLWluIGhvc3QgcHJvY2VzcyBtYW5hZ2Vy
LgotICAgIFBsdWdpblByb2Nlc3NNYW5hZ2VyKiBtX3BsdWdpblByb2Nlc3NNYW5hZ2VyOwotCi0g
ICAgUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMgbV9wbHVnaW5Qcm9jZXNzQXR0cmlidXRlczsKLSAg
ICB1aW50NjRfdCBtX3BsdWdpblByb2Nlc3NUb2tlbjsKLQotICAgIC8vIFRoZSBjb25uZWN0aW9u
IHRvIHRoZSBwbHVnLWluIGhvc3QgcHJvY2Vzcy4KLSAgICBSZWZQdHI8SVBDOjpDb25uZWN0aW9u
PiBtX2Nvbm5lY3Rpb247Ci0KLSAgICBEZXF1ZTxNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpH
ZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseT4gbV9wZW5kaW5nQ29ubmVjdGlv
blJlcGxpZXM7Ci0KLSAgICBWZWN0b3I8dWludDY0X3Q+IG1fcGVuZGluZ0ZldGNoV2Vic2l0ZURh
dGFSZXF1ZXN0czsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
IChWZWN0b3I8U3RyaW5nPik+PiBtX3BlbmRpbmdGZXRjaFdlYnNpdGVEYXRhQ2FsbGJhY2tzOwot
Ci0gICAgc3RydWN0IERlbGV0ZVdlYnNpdGVEYXRhUmVxdWVzdCB7Ci0gICAgICAgIFdhbGxUaW1l
IG1vZGlmaWVkU2luY2U7Ci0gICAgICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQ7Ci0gICAgfTsKLSAg
ICBWZWN0b3I8RGVsZXRlV2Vic2l0ZURhdGFSZXF1ZXN0PiBtX3BlbmRpbmdEZWxldGVXZWJzaXRl
RGF0YVJlcXVlc3RzOwotICAgIEhhc2hNYXA8dWludDY0X3QsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQgKCk+PiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUNhbGxiYWNrczsKLQotICAgIHN0cnVj
dCBEZWxldGVXZWJzaXRlRGF0YUZvckhvc3ROYW1lc1JlcXVlc3QgewotICAgICAgICBWZWN0b3I8
U3RyaW5nPiBob3N0TmFtZXM7Ci0gICAgICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQ7Ci0gICAgfTsK
LSAgICBWZWN0b3I8RGVsZXRlV2Vic2l0ZURhdGFGb3JIb3N0TmFtZXNSZXF1ZXN0PiBtX3BlbmRp
bmdEZWxldGVXZWJzaXRlRGF0YUZvckhvc3ROYW1lc1JlcXVlc3RzOwotICAgIEhhc2hNYXA8dWlu
dDY0X3QsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKCk+PiBtX3BlbmRpbmdEZWxldGVXZWJzaXRl
RGF0YUZvckhvc3ROYW1lc0NhbGxiYWNrczsKLQotICAgIC8vIElmIGNyZWF0ZVBsdWdpbkNvbm5l
Y3Rpb24gaXMgY2FsbGVkIHdoaWxlIHRoZSBwcm9jZXNzIGlzIHN0aWxsIGxhdW5jaGluZyB3ZSds
bCBrZWVwIGNvdW50IG9mIGl0IGFuZCBzZW5kIGEgYnVuY2ggb2YgcmVxdWVzdHMKLSAgICAvLyB3
aGVuIHRoZSBwcm9jZXNzIGZpbmlzaGVzIGxhdW5jaGluZy4KLSAgICB1bnNpZ25lZCBtX251bVBl
bmRpbmdDb25uZWN0aW9uUmVxdWVzdHM7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBSZXRh
aW5QdHI8TlNPYmplY3Q+IG1fYWN0aXZhdGlvbk9ic2VydmVyOwotICAgIFJldGFpblB0cjxXS1Bs
YWNlaG9sZGVyTW9kYWxXaW5kb3c+IG1fcGxhY2Vob2xkZXJXaW5kb3c7Ci0gICAgYm9vbCBtX21v
ZGFsV2luZG93SXNTaG93aW5nOwotICAgIGJvb2wgbV9mdWxsc2NyZWVuV2luZG93SXNTaG93aW5n
OwotICAgIHVuc2lnbmVkIG1fcHJlRnVsbHNjcmVlbkFwcFByZXNlbnRhdGlvbk9wdGlvbnM7Ci0j
ZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyYWUwODNkMzcyNzljYTAwMDIxY2I1Y2ZhNWZkMmEyODMyMzIw
MmU0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmlu
CisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
Ci0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLW1lc3Nh
Z2VzIC0+IFBsdWdpblByb2Nlc3NQcm94eSB7Ci0gICAgRGlkQ3JlYXRlV2ViUHJvY2Vzc0Nvbm5l
Y3Rpb24oSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25JZGVudGlmaWVyLCBib29sIHN1cHBvcnRz
QXN5bmNocm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRpb24pCi0KLSAgICBEaWRHZXRTaXRlc1dpdGhE
YXRhKFZlY3RvcjxTdHJpbmc+IHNpdGVzLCB1aW50NjRfdCBjYWxsYmFja0lEKQotICAgIERpZERl
bGV0ZVdlYnNpdGVEYXRhKHVpbnQ2NF90IGNhbGxiYWNrSUQpCi0gICAgRGlkRGVsZXRlV2Vic2l0
ZURhdGFGb3JIb3N0TmFtZXModWludDY0X3QgY2FsbGJhY2tJRCkKLQotI2lmIFBMQVRGT1JNKENP
Q09BKQotICAgIFNldE1vZGFsV2luZG93SXNTaG93aW5nKGJvb2wgbW9kYWxXaW5kb3dJc1Nob3dp
bmcpCi0gICAgU2V0RnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZyhib29sIGZ1bGxzY3JlZW5XaW5k
b3dJc1Nob3dpbmcpCi0gICAgCi0gICAgIyBSZXR1cm5zIHRydWUgaWYgdGhlIFVJIHByb2Nlc3Mg
bGF1bmNoZWQgdGhlIHByb2Nlc3MuCi0gICAgTGF1bmNoUHJvY2VzcyhTdHJpbmcgbGF1bmNoUGF0
aCwgVmVjdG9yPFN0cmluZz4gYXJndW1lbnRzKSAtPiAoYm9vbCByZXN1bHQpIFN5bmNocm9ub3Vz
Ci0KLSAgICAjIFJldHVybnMgdHJ1ZSBpZiB0aGUgVUkgcHJvY2VzcyBsYXVuY2hlZCB0aGUgYXBw
bGljYXRpb24uCi0gICAgTGF1bmNoQXBwbGljYXRpb25BdFVSTChTdHJpbmcgdXJsLCBWZWN0b3I8
U3RyaW5nPiBhcmd1bWVudHMpIC0+IChib29sIHJlc3VsdCkgU3luY2hyb25vdXMKLQotICAgICMg
UmV0dXJucyB0cnVlIGlmIHRoZSBVSSBwcm9jZXNzIGRpZCBvcGVuIHRoZSBVUkwuCi0gICAgT3Bl
blVSTChTdHJpbmcgdXJsU3RyaW5nKSAtPiAoYm9vbCByZXN1bHQsIGludDMyX3Qgc3RhdHVzLCBT
dHJpbmcgbGF1bmNoZWRVUkxTdHJpbmcpIFN5bmNocm9ub3VzCi0gICAgCi0gICAgIyBSZXR1cm5z
IHRydWUgaWYgdGhlIFVJIHByb2Nlc3MgZGlkIG9wZW4gdGhlIGZpbGUuCi0gICAgT3BlbkZpbGUo
U3RyaW5nIGZ1bGxQYXRoKSAtPiAoYm9vbCByZXN1bHQpIFN5bmNocm9ub3VzCi0jZW5kaWYKLX0K
LQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QbHVnaW5zL21h
Yy9QbHVnaW5JbmZvU3RvcmVNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QbHVnaW5z
L21hYy9QbHVnaW5JbmZvU3RvcmVNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDI2ZjFiMjJmNDljYzY0NWY3ZjExOGY2MTE1NDA1Nzg1MWRhZjY3NmUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UGx1Z2lucy9tYWMvUGx1Z2luSW5mb1N0b3JlTWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMTM3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQg
IlBsdWdpbkluZm9TdG9yZS5oIgotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLQotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiTmV0c2NhcGVQ
bHVnaW5Nb2R1bGUuaCIKLSNpbXBvcnQgIlNhbmRib3hVdGlsaXRpZXMuaCIKLSNpbXBvcnQgPFdl
YkNvcmUvUGx1Z2luQmxvY2tsaXN0Lmg+Ci0jaW1wb3J0IDxwd2QuaD4KLSNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi9jb2NvYS9UeXBlQ2FzdHNDb2NvYS5oPgotI2ltcG9y
dCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVZlY3Rv
cjxTdHJpbmc+IFBsdWdpbkluZm9TdG9yZTo6cGx1Z2luc0RpcmVjdG9yaWVzKCkKLXsKLSAgICBW
ZWN0b3I8U3RyaW5nPiBwbHVnaW5zRGlyZWN0b3JpZXM7Ci0gICAgcGx1Z2luc0RpcmVjdG9yaWVz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMik7Ci0KLSAgICBBU0NJSUxpdGVyYWwgcGx1Z2luUGF0
aCB7ICIvTGlicmFyeS9JbnRlcm5ldCBQbHVnLUlucyJfcyB9OwotCi0gICAgaWYgKGF1dG8qIHB3
ID0gZ2V0cHd1aWQoZ2V0dWlkKCkpKQotICAgICAgICBwbHVnaW5zRGlyZWN0b3JpZXMudW5jaGVj
a2VkQXBwZW5kKG1ha2VTdHJpbmcocHctPnB3X2RpciwgcGx1Z2luUGF0aCkpOwotICAgIHBsdWdp
bnNEaXJlY3Rvcmllcy51bmNoZWNrZWRBcHBlbmQocGx1Z2luUGF0aCk7Ci0gICAgCi0gICAgcmV0
dXJuIHBsdWdpbnNEaXJlY3RvcmllczsKLX0KLSAgICAKLVZlY3RvcjxTdHJpbmc+IFBsdWdpbklu
Zm9TdG9yZTo6cGx1Z2luUGF0aHNJbkRpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSkK
LXsKLSAgICBhdXRvIGRpcmVjdG9yeU5TU3RyaW5nID0gYnJpZGdlX2Nhc3QoZGlyZWN0b3J5LmNy
ZWF0ZUNGU3RyaW5nKCkpOwotICAgIHJldHVybiBtYWtlVmVjdG9yKFtbTlNGaWxlTWFuYWdlciBk
ZWZhdWx0TWFuYWdlcl0gY29udGVudHNPZkRpcmVjdG9yeUF0UGF0aDpkaXJlY3RvcnlOU1N0cmlu
Zy5nZXQoKSBlcnJvcjpuaWxdLCBbJl0gKGlkIGZpbGVuYW1lKSAtPiBzdGQ6Om9wdGlvbmFsPFN0
cmluZz4gewotICAgICAgICByZXR1cm4gW2RpcmVjdG9yeU5TU3RyaW5nIHN0cmluZ0J5QXBwZW5k
aW5nUGF0aENvbXBvbmVudDpmaWxlbmFtZV07Ci0gICAgfSk7Ci19Ci0KLVZlY3RvcjxTdHJpbmc+
IFBsdWdpbkluZm9TdG9yZTo6aW5kaXZpZHVhbFBsdWdpblBhdGhzKCkKLXsKLSAgICByZXR1cm4g
VmVjdG9yPFN0cmluZz4oKTsKLX0KLQotYm9vbCBQbHVnaW5JbmZvU3RvcmU6OmdldFBsdWdpbklu
Zm8oY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoLCBQbHVnaW5Nb2R1bGVJbmZvJiBwbHVnaW4pCi17
Ci0gICAgcmV0dXJuIE5ldHNjYXBlUGx1Z2luTW9kdWxlOjpnZXRQbHVnaW5JbmZvKHBsdWdpblBh
dGgsIHBsdWdpbik7Ci19Ci0KLXN0YXRpYyBib29sIHNob3VsZEJsb2NrUGx1Z2luKGNvbnN0IFBs
dWdpbk1vZHVsZUluZm8mIHBsdWdpbikKLXsKLSAgICBQbHVnaW5Nb2R1bGVMb2FkUG9saWN5IGxv
YWRQb2xpY3kgPSBQbHVnaW5JbmZvU3RvcmU6OmRlZmF1bHRMb2FkUG9saWN5Rm9yUGx1Z2luKHBs
dWdpbik7Ci0gICAgcmV0dXJuIGxvYWRQb2xpY3kgPT0gUGx1Z2luTW9kdWxlQmxvY2tlZEZvclNl
Y3VyaXR5IHx8IGxvYWRQb2xpY3kgPT0gUGx1Z2luTW9kdWxlQmxvY2tlZEZvckNvbXBhdGliaWxp
dHk7Ci19Ci0KLWJvb2wgUGx1Z2luSW5mb1N0b3JlOjpzaG91bGRVc2VQbHVnaW4oVmVjdG9yPFBs
dWdpbk1vZHVsZUluZm8+JiBhbHJlYWR5TG9hZGVkUGx1Z2lucywgY29uc3QgUGx1Z2luTW9kdWxl
SW5mbyYgcGx1Z2luKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWxyZWFkeUxvYWRl
ZFBsdWdpbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgUGx1Z2luTW9kdWxlSW5mbyYg
bG9hZGVkUGx1Z2luID0gYWxyZWFkeUxvYWRlZFBsdWdpbnNbaV07Ci0KLSAgICAgICAgLy8gSWYg
YSBwbHVnLWluIHdpdGggdGhlIHNhbWUgYnVuZGxlIGlkZW50aWZpZXIgYWxyZWFkeSBleGlzdHMs
IHdlIGRvbid0IHdhbnQgdG8gbG9hZCBpdC4KLSAgICAgICAgLy8gSG93ZXZlciwgaWYgdGhlIGFs
cmVhZHkgZXhpc3RpbmcgcGx1Zy1pbiBpcyBibG9ja2VkIHdlIHdhbnQgdG8gcmVwbGFjZSBpdCB3
aXRoIHRoZSBuZXcgcGx1Zy1pbi4KLSAgICAgICAgaWYgKGxvYWRlZFBsdWdpbi5idW5kbGVJZGVu
dGlmaWVyID09IHBsdWdpbi5idW5kbGVJZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBpZiAoIXNo
b3VsZEJsb2NrUGx1Z2luKGxvYWRlZFBsdWdpbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgICAgICBhbHJlYWR5TG9hZGVkUGx1Z2lucy5yZW1vdmUoaSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChwbHVnaW4uYnVuZGxl
SWRlbnRpZmllciA9PSAiY29tLmFwcGxlLmphdmEuSmF2YUFwcGxldFBsdWdpbiIpIHsKLSAgICAg
ICAgTE9HKFBsdWdpbnMsICJJZ25vcmluZyBjb20uYXBwbGUuamF2YS5KYXZhQXBwbGV0UGx1Z2lu
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoY3VycmVudFByb2Nl
c3NJc1NhbmRib3hlZCgpICYmICFwbHVnaW4uaGFzU2FuZGJveFByb2ZpbGUpIHsKLSAgICAgICAg
TE9HKFBsdWdpbnMsICJJZ25vcmluZyB1bnNhbmRib3hlZCBwbHVnLWluICVzIiwgcGx1Z2luLmJ1
bmRsZUlkZW50aWZpZXIudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGx1Z2luTW9kdWxlTG9hZFBvbGljeSBQbHVn
aW5JbmZvU3RvcmU6OmRlZmF1bHRMb2FkUG9saWN5Rm9yUGx1Z2luKGNvbnN0IFBsdWdpbk1vZHVs
ZUluZm8mIHBsdWdpbikKLXsKLSAgICBzd2l0Y2ggKFBsdWdpbkJsb2NrbGlzdDo6bG9hZFBvbGlj
eUZvclBsdWdpblZlcnNpb24ocGx1Z2luLmJ1bmRsZUlkZW50aWZpZXIsIHBsdWdpbi52ZXJzaW9u
U3RyaW5nKSkgewotICAgIGNhc2UgUGx1Z2luQmxvY2tsaXN0OjpMb2FkUG9saWN5OjpMb2FkTm9y
bWFsbHk6Ci0gICAgICAgIHJldHVybiBQbHVnaW5Nb2R1bGVMb2FkTm9ybWFsbHk7Ci0gICAgY2Fz
ZSBQbHVnaW5CbG9ja2xpc3Q6OkxvYWRQb2xpY3k6OkJsb2NrZWRGb3JTZWN1cml0eToKLSAgICAg
ICAgcmV0dXJuIFBsdWdpbk1vZHVsZUJsb2NrZWRGb3JTZWN1cml0eTsKLSAgICBjYXNlIFBsdWdp
bkJsb2NrbGlzdDo6TG9hZFBvbGljeTo6QmxvY2tlZEZvckNvbXBhdGliaWxpdHk6Ci0gICAgICAg
IHJldHVybiBQbHVnaW5Nb2R1bGVCbG9ja2VkRm9yQ29tcGF0aWJpbGl0eTsKLSAgICB9Ci19Ci0K
LVBsdWdpbk1vZHVsZUluZm8gUGx1Z2luSW5mb1N0b3JlOjpmaW5kUGx1Z2luV2l0aEJ1bmRsZUlk
ZW50aWZpZXIoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKQotewotICAgIGxvYWRQbHVn
aW5zSWZOZWNlc3NhcnkoKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wbHVnaW5z
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX3BsdWdpbnNbaV0uYnVuZGxlSWRlbnRpZmll
ciA9PSBidW5kbGVJZGVudGlmaWVyKQotICAgICAgICAgICAgcmV0dXJuIG1fcGx1Z2luc1tpXTsK
LSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFBsdWdpbk1vZHVsZUluZm8oKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpICYmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1
Z2lucy9tYWMvUGx1Z2luUHJvY2Vzc01hbmFnZXJNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9QbHVnaW5zL21hYy9QbHVnaW5Qcm9jZXNzTWFuYWdlck1hYy5tbQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYjkwYTMxNDQ1ZTg1MWQzZjQxMzkzZTY3MzY0YTVlOWY4ZGQ0Mjlk
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9QbHVnaW5zL21hYy9QbHVnaW5Qcm9jZXNzTWFuYWdlck1hYy5tbQor
KysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25m
aWcuaCIKLSNpbXBvcnQgIlBsdWdpblByb2Nlc3NNYW5hZ2VyLmgiCi0KLSNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLQotI2ltcG9ydCAiUGx1Z2luUHJvY2Vzc1Byb3h5LmgiCi0jaW1w
b3J0IDxXZWJDb3JlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaD4KLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lv
bkRpc2FibGVkKFJlZkNvdW50ZXJFdmVudCBldmVudCkKLXsKLSAgICBzaXplX3QgZGlzYWJsZUNv
dW50ID0gbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCk7
Ci0KLSAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgemVyby9ub24temVybyBlZGdlIGNoYW5nZXM7
IGlnbm9yZSBjYXNlcyB3aGVyZSB0aGUgY291bnQgd2FzIHByZXZpb3VzbHkgbm9uLXplcm8sIGFu
ZCBzdGlsbCBpcy4KLSAgICBpZiAoZGlzYWJsZUNvdW50ID49IDIgfHwgKGRpc2FibGVDb3VudCA9
PSAxICYmIGV2ZW50ID09IFJlZkNvdW50ZXJFdmVudDo6RGVjcmVtZW50KSkKLSAgICAgICAgcmV0
dXJuOwotICAgIEFTU0VSVCgoZXZlbnQgPT0gUmVmQ291bnRlckV2ZW50OjpJbmNyZW1lbnQgJiYg
ZGlzYWJsZUNvdW50ID09IDEpCi0gICAgICAgIHx8IChldmVudCA9PSBSZWZDb3VudGVyRXZlbnQ6
OkRlY3JlbWVudCAmJiAhZGlzYWJsZUNvdW50KSk7Ci0KLSAgICBib29sIGVuYWJsZWQgPSAhZGlz
YWJsZUNvdW50OwotICAgIGZvciAoYXV0byYgcGx1Z2luUHJvY2VzcyA6IG1fcGx1Z2luUHJvY2Vz
c2VzKQotICAgICAgICBwbHVnaW5Qcm9jZXNzLT5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVk
KGVuYWJsZWQpOwotfQotCi12b2lkIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzZXRFeHBlcmltZW50
YWxQbHVnSW5TYW5kYm94UHJvZmlsZXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBtX2V4
cGVyaW1lbnRhbFBsdWdJblNhbmRib3hQcm9maWxlc0VuYWJsZWQgPSBlbmFibGVkOwotICAgIFdl
YkNvcmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0RXhwZXJp
bWVudGFsUGx1Z0luU2FuZGJveFByb2ZpbGVzRW5hYmxlZChlbmFibGVkKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BsdWdpbnMvbWFjL1BsdWdpblBy
b2Nlc3NQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BsdWdpbnMvbWFjL1Bs
dWdpblByb2Nlc3NQcm94eU1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM0
YmE2MDhiNDcyMmJmMGIyZTMyMzEwN2Q5Mjc0MGUwNzhjMjQxZS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QbHVn
aW5zL21hYy9QbHVnaW5Qcm9jZXNzUHJveHlNYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSwzNjAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJQ
bHVnaW5Qcm9jZXNzUHJveHkuaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQot
Ci0jaW1wb3J0ICJQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0jaW1wb3J0ICJQ
bHVnaW5Qcm9jZXNzTWFuYWdlci5oIgotI2ltcG9ydCAiUGx1Z2luUHJvY2Vzc01lc3NhZ2VzLmgi
Ci0jaW1wb3J0ICJTYW5kYm94VXRpbGl0aWVzLmgiCi0jaW1wb3J0IDxRdWFydHpDb3JlL0NBUmVt
b3RlTGF5ZXJTZXJ2ZXIuaD4KLSNpbXBvcnQgPGNydF9leHRlcm5zLmg+Ci0jaW1wb3J0IDxtYWNo
LW8vZHlsZC5oPgotI2ltcG9ydCA8cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4KLSNpbXBvcnQg
PHNwYXduLmg+Ci0jaW1wb3J0IDx3dGYvRmlsZVN5c3RlbS5oPgotI2ltcG9ydCA8d3RmL1Byb2Nl
c3NQcml2aWxlZ2UuaD4KLSNpbXBvcnQgPHd0Zi9VUkwuaD4KLSNpbXBvcnQgPHd0Zi9jb2NvYS9W
ZWN0b3JDb2NvYS5oPgotI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1AaW50ZXJmYWNl
IFdLUGxhY2Vob2xkZXJNb2RhbFdpbmRvdyA6IE5TV2luZG93IAotQGVuZAotCi1AaW1wbGVtZW50
YXRpb24gV0tQbGFjZWhvbGRlck1vZGFsV2luZG93Ci0KLS8vIFByZXZlbnQgTlNBcHAgZnJvbSBj
YWxsaW5nIHJlcXVlc3RVc2VyQXR0ZW50aW9uOiB3aGVuIHRoZSB3aW5kb3cgaXMgc2hvd24gCi0v
LyBtb2RhbGx5LCBldmVuIGlmIHRoZSBhcHAgaXMgaW5hY3RpdmUuIFNlZSA2ODIzMDQ5LgotLSAo
Qk9PTClfd2FudHNVc2VyQXR0ZW50aW9uCi17Ci0gICAgcmV0dXJuIE5POyAgIAotfQotCi1AZW5k
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotICAgIAotdm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6OnBs
YXRmb3JtR2V0TGF1bmNoT3B0aW9uc1dpdGhBdHRyaWJ1dGVzKFByb2Nlc3NMYXVuY2hlcjo6TGF1
bmNoT3B0aW9ucyYgbGF1bmNoT3B0aW9ucywgY29uc3QgUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMm
IHBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzKQotewotICAgIEFTU0VSVChwbHVnaW5Qcm9jZXNzQXR0
cmlidXRlcy5tb2R1bGVJbmZvLnBsdWdpbkFyY2hpdGVjdHVyZSA9PSBDUFVfVFlQRV9YODZfNjQp
OwotICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc1R5cGUgPSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nl
c3NUeXBlOjpQbHVnaW47Ci0KLSAgICBsYXVuY2hPcHRpb25zLmV4dHJhSW5pdGlhbGl6YXRpb25E
YXRhLmFkZCgicGx1Z2luLXBhdGgiLCBwbHVnaW5Qcm9jZXNzQXR0cmlidXRlcy5tb2R1bGVJbmZv
LnBhdGgpOwotCi0gICAgaWYgKFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5leHBl
cmltZW50YWxQbHVnSW5TYW5kYm94UHJvZmlsZXNFbmFibGVkKCkpCi0gICAgICAgIGxhdW5jaE9w
dGlvbnMuZXh0cmFJbml0aWFsaXphdGlvbkRhdGEuYWRkKCJleHBlcmltZW50YWwtc2FuZGJveC1w
bHVnaW4iLCAiMSIpOwotCi0gICAgaWYgKHBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLnNhbmRib3hQ
b2xpY3kgPT0gUGx1Z2luUHJvY2Vzc1NhbmRib3hQb2xpY3k6OlVuc2FuZGJveGVkKSB7Ci0gICAg
ICAgIGlmICghY3VycmVudFByb2Nlc3NJc1NhbmRib3hlZCgpKQotICAgICAgICAgICAgbGF1bmNo
T3B0aW9ucy5leHRyYUluaXRpYWxpemF0aW9uRGF0YS5hZGQoImRpc2FibGUtc2FuZGJveCIsICIx
Iik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiTWFpbiBwcm9jZXNz
IGlzIHNhbmRib3hlZCwgaWdub3JpbmcgcGx1Zy1pbiBzYW5kYm94IHBvbGljeSIpOwotICAgIH0K
LX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6OnBsYXRmb3JtSW5pdGlhbGl6ZVBsdWdpblBy
b2Nlc3MoUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKLXsKLSAg
ICAvLyBGb3Igbm93IG9ubHkgRmxhc2ggaXMga25vd24gdG8gYmVoYXZlIHdpdGggYXN5bmNocm9u
b3VzIHBsdWctaW4gaW5pdGlhbGl6YXRpb24uCi0gICAgcGFyYW1ldGVycy5zdXBwb3J0c0FzeW5j
aHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uID0gbV9wbHVnaW5Qcm9jZXNzQXR0cmlidXRlcy5t
b2R1bGVJbmZvLmJ1bmRsZUlkZW50aWZpZXIgPT0gImNvbS5tYWNyb21lZGlhLkZsYXNoIFBsYXll
ci5wbHVnaW4iOwotCi0gICAgcGFyYW1ldGVycy5hY2NlbGVyYXRlZENvbXBvc2l0aW5nUG9ydCA9
IE1hY2hTZW5kUmlnaHQ6OmNyZWF0ZShbQ0FSZW1vdGVMYXllclNlcnZlciBzaGFyZWRTZXJ2ZXJd
LnNlcnZlclBvcnQpOwotICAgIHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQgPSBhZG9wdENG
KF9DRk5ldHdvcmtDb3B5QVRTQ29udGV4dCgpKTsKLX0KLQotYm9vbCBQbHVnaW5Qcm9jZXNzUHJv
eHk6OmdldFBsdWdpblByb2Nlc3NTZXJpYWxOdW1iZXIoUHJvY2Vzc1NlcmlhbE51bWJlciYgcGx1
Z2luUHJvY2Vzc1NlcmlhbE51bWJlcikKLXsKLSAgICBwaWRfdCBwbHVnaW5Qcm9jZXNzUElEID0g
cHJvY2Vzc0lkZW50aWZpZXIoKTsKLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19C
RUdJTgotICAgIHJldHVybiBHZXRQcm9jZXNzRm9yUElEKHBsdWdpblByb2Nlc3NQSUQsICZwbHVn
aW5Qcm9jZXNzU2VyaWFsTnVtYmVyKSA9PSBub0VycjsKLSAgICBBTExPV19ERVBSRUNBVEVEX0RF
Q0xBUkFUSU9OU19FTkQKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6Om1ha2VQbHVnaW5Q
cm9jZXNzVGhlRnJvbnRQcm9jZXNzKCkKLXsKLSAgICBQcm9jZXNzU2VyaWFsTnVtYmVyIHBsdWdp
blByb2Nlc3NTZXJpYWxOdW1iZXI7Ci0gICAgaWYgKCFnZXRQbHVnaW5Qcm9jZXNzU2VyaWFsTnVt
YmVyKHBsdWdpblByb2Nlc3NTZXJpYWxOdW1iZXIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIFNldEZyb250UHJvY2Vzcygm
cGx1Z2luUHJvY2Vzc1NlcmlhbE51bWJlcik7Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJB
VElPTlNfRU5ECi19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjptYWtlVUlQcm9jZXNzVGhl
RnJvbnRQcm9jZXNzKCkKLXsKLSAgICBQcm9jZXNzU2VyaWFsTnVtYmVyIHByb2Nlc3NTZXJpYWxO
dW1iZXI7Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBHZXRD
dXJyZW50UHJvY2VzcygmcHJvY2Vzc1NlcmlhbE51bWJlcik7Ci0gICAgU2V0RnJvbnRQcm9jZXNz
KCZwcm9jZXNzU2VyaWFsTnVtYmVyKTsgICAgICAgICAgICAKLSAgICBBTExPV19ERVBSRUNBVEVE
X0RFQ0xBUkFUSU9OU19FTkQKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6OnNldEZ1bGxz
Y3JlZW5XaW5kb3dJc1Nob3dpbmcoYm9vbCBmdWxsc2NyZWVuV2luZG93SXNTaG93aW5nKQotewot
ICAgIGlmIChtX2Z1bGxzY3JlZW5XaW5kb3dJc1Nob3dpbmcgPT0gZnVsbHNjcmVlbldpbmRvd0lz
U2hvd2luZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9mdWxsc2NyZWVuV2luZG93SXNTaG93
aW5nID0gZnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZzsKLSAgICBpZiAobV9mdWxsc2NyZWVuV2lu
ZG93SXNTaG93aW5nKQotICAgICAgICBlbnRlckZ1bGxzY3JlZW4oKTsKLSAgICBlbHNlCi0gICAg
ICAgIGV4aXRGdWxsc2NyZWVuKCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjplbnRl
ckZ1bGxzY3JlZW4oKQotewotICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQ
cml2aWxlZ2U6OkNhbkNvbW11bmljYXRlV2l0aFdpbmRvd1NlcnZlcikpOwotICAgIC8vIEdldCB0
aGUgY3VycmVudCBwcmVzZW50YXRpb24gb3B0aW9ucy4KLSAgICBtX3ByZUZ1bGxzY3JlZW5BcHBQ
cmVzZW50YXRpb25PcHRpb25zID0gW05TQXBwIHByZXNlbnRhdGlvbk9wdGlvbnNdOwotCi0gICAg
Ly8gRmlndXJlIG91dCB3aGljaCBwcmVzZW50YXRpb24gb3B0aW9ucyB0byB1c2UuCi0gICAgdW5z
aWduZWQgcHJlc2VudGF0aW9uT3B0aW9ucyA9IG1fcHJlRnVsbHNjcmVlbkFwcFByZXNlbnRhdGlv
bk9wdGlvbnMgJiB+KE5TQXBwbGljYXRpb25QcmVzZW50YXRpb25BdXRvSGlkZURvY2sgfCBOU0Fw
cGxpY2F0aW9uUHJlc2VudGF0aW9uQXV0b0hpZGVNZW51QmFyKTsKLSAgICBwcmVzZW50YXRpb25P
cHRpb25zIHw9IE5TQXBwbGljYXRpb25QcmVzZW50YXRpb25IaWRlRG9jayB8IE5TQXBwbGljYXRp
b25QcmVzZW50YXRpb25IaWRlTWVudUJhcjsKLQotICAgIFtOU0FwcCBzZXRQcmVzZW50YXRpb25P
cHRpb25zOnByZXNlbnRhdGlvbk9wdGlvbnNdOwotICAgIG1ha2VQbHVnaW5Qcm9jZXNzVGhlRnJv
bnRQcm9jZXNzKCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjpleGl0RnVsbHNjcmVl
bigpCi17Ci0gICAgLy8gSWYgdGhlIHBsdWctaW4gaG9zdCBpcyB0aGUgY3VycmVudCBhcHBsaWNh
dGlvbiB0aGVuIHdlIHNob3VsZCBicmluZyBvdXJzZWx2ZXMgdG8gdGhlIGZyb250IHdoZW4gaXQg
ZXhpdHMgZnVsbC1zY3JlZW4gbW9kZS4KLSAgICBQcm9jZXNzU2VyaWFsTnVtYmVyIGZyb250UHJv
Y2Vzc1NlcmlhbE51bWJlcjsKLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJ
TgotICAgIEdldEZyb250UHJvY2VzcygmZnJvbnRQcm9jZXNzU2VyaWFsTnVtYmVyKTsKLSAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLQotICAgIC8vIFRoZSBVSSBwcm9jZXNz
IG11c3QgYmUgdGhlIGZyb250IHByb2Nlc3MgaW4gb3JkZXIgdG8gY2hhbmdlIHRoZSBwcmVzZW50
YXRpb24gbW9kZS4KLSAgICBtYWtlVUlQcm9jZXNzVGhlRnJvbnRQcm9jZXNzKCk7Ci0gICAgW05T
QXBwIHNldFByZXNlbnRhdGlvbk9wdGlvbnM6bV9wcmVGdWxsc2NyZWVuQXBwUHJlc2VudGF0aW9u
T3B0aW9uc107Ci0KLSAgICBQcm9jZXNzU2VyaWFsTnVtYmVyIHBsdWdpblByb2Nlc3NTZXJpYWxO
dW1iZXI7Ci0gICAgaWYgKCFnZXRQbHVnaW5Qcm9jZXNzU2VyaWFsTnVtYmVyKHBsdWdpblByb2Nl
c3NTZXJpYWxOdW1iZXIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB0aGUgcGx1Zy1p
biBwcm9jZXNzIHdhcyBub3QgdGhlIGZyb250IHByb2Nlc3MsIHN3aXRjaCBiYWNrIHRvIHRoZSBw
cmV2aW91cyBmcm9udCBwcm9jZXNzLgotICAgIC8vIChPdGhlcndpc2Ugd2UnbGwga2VlcCB0aGUg
VUkgcHJvY2VzcyBhcyB0aGUgZnJvbnQgcHJvY2VzcykuCi0gICAgQm9vbGVhbiBpc1BsdWdpblBy
b2Nlc3NGcm9udFByb2Nlc3M7Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVH
SU4KLSAgICBTYW1lUHJvY2VzcygmZnJvbnRQcm9jZXNzU2VyaWFsTnVtYmVyLCAmcGx1Z2luUHJv
Y2Vzc1NlcmlhbE51bWJlciwgJmlzUGx1Z2luUHJvY2Vzc0Zyb250UHJvY2Vzcyk7Ci0gICAgQUxM
T1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0gICAgaWYgKCFpc1BsdWdpblByb2Nlc3NG
cm9udFByb2Nlc3MpIHsKLSAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVH
SU4KLSAgICAgICAgU2V0RnJvbnRQcm9jZXNzKCZmcm9udFByb2Nlc3NTZXJpYWxOdW1iZXIpOwot
ICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLSAgICB9Ci19Ci0KLXZv
aWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjpzZXRNb2RhbFdpbmRvd0lzU2hvd2luZyhib29sIG1vZGFs
V2luZG93SXNTaG93aW5nKQotewotICAgIGlmIChtb2RhbFdpbmRvd0lzU2hvd2luZyA9PSBtX21v
ZGFsV2luZG93SXNTaG93aW5nKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9tb2RhbFdp
bmRvd0lzU2hvd2luZyA9IG1vZGFsV2luZG93SXNTaG93aW5nOwotICAgIAotICAgIGlmIChtX21v
ZGFsV2luZG93SXNTaG93aW5nKQotICAgICAgICBiZWdpbk1vZGFsKCk7Ci0gICAgZWxzZQotICAg
ICAgICBlbmRNb2RhbCgpOwotfQotCi12b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6YmVnaW5Nb2Rh
bCgpCi17Ci0gICAgQVNTRVJUKCFtX3BsYWNlaG9sZGVyV2luZG93KTsKLSAgICBBU1NFUlQoIW1f
YWN0aXZhdGlvbk9ic2VydmVyKTsKLSAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9j
ZXNzUHJpdmlsZWdlOjpDYW5Db21tdW5pY2F0ZVdpdGhXaW5kb3dTZXJ2ZXIpKTsKLQotICAgIG1f
cGxhY2Vob2xkZXJXaW5kb3cgPSBhZG9wdE5TKFtbV0tQbGFjZWhvbGRlck1vZGFsV2luZG93IGFs
bG9jXSBpbml0V2l0aENvbnRlbnRSZWN0Ok5TTWFrZVJlY3QoMCwgMCwgMSwgMSkgc3R5bGVNYXNr
Ok5TV2luZG93U3R5bGVNYXNrQm9yZGVybGVzcyBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVy
ZWQgZGVmZXI6WUVTXSk7Ci0gICAgW21fcGxhY2Vob2xkZXJXaW5kb3cgc2V0UmVsZWFzZWRXaGVu
Q2xvc2VkOk5PXTsKLSAgICAKLSAgICBtX2FjdGl2YXRpb25PYnNlcnZlciA9IFtbTlNOb3RpZmlj
YXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXJGb3JOYW1lOk5TQXBwbGljYXRp
b25XaWxsQmVjb21lQWN0aXZlTm90aWZpY2F0aW9uIG9iamVjdDpOU0FwcCBxdWV1ZTpuaWwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1c2luZ0Jsb2NrOl4oTlNOb3RpZmljYXRpb24gKil7IGFwcGxpY2F0aW9u
RGlkQmVjb21lQWN0aXZlKCk7IH1dOwotCi0gICAgLy8gVGhlIGNhbGwgdG8gLVtOU0FwcCBydW5N
b2RhbEZvcldpbmRvdzpdIGJlbG93IHdpbGwgcnVuIGEgbmVzdGVkIHJ1biBsb29wLCBhbmQgaWYg
dGhlIHBsdWctaW4gcHJvY2VzcwotICAgIC8vIGNyYXNoZXMgdGhlIFBsdWdpblByb2Nlc3NQcm94
eSBvYmplY3QgY2FuIGJlIGRlc3Ryb3llZC4gUHJvdGVjdCBhZ2FpbnN0IHRoaXMgaGVyZS4KLSAg
ICBSZWY8UGx1Z2luUHJvY2Vzc1Byb3h5PiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFtOU0FwcCBy
dW5Nb2RhbEZvcldpbmRvdzptX3BsYWNlaG9sZGVyV2luZG93LmdldCgpXTsKLSAgICAKLSAgICBb
bV9wbGFjZWhvbGRlcldpbmRvdyBvcmRlck91dDpuaWxdOwotICAgIG1fcGxhY2Vob2xkZXJXaW5k
b3cgPSBudWxscHRyOwotfQotCi12b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6ZW5kTW9kYWwoKQot
ewotICAgIEFTU0VSVChtX3BsYWNlaG9sZGVyV2luZG93KTsKLSAgICBBU1NFUlQobV9hY3RpdmF0
aW9uT2JzZXJ2ZXIpOwotICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2
aWxlZ2U6OkNhbkNvbW11bmljYXRlV2l0aFdpbmRvd1NlcnZlcikpOwotCi0gICAgW1tOU05vdGlm
aWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX2FjdGl2YXRpb25P
YnNlcnZlci5nZXQoKV07Ci0gICAgbV9hY3RpdmF0aW9uT2JzZXJ2ZXIgPSBudWxscHRyOwotICAg
IAotICAgIFtOU0FwcCBzdG9wTW9kYWxdOwotCi0gICAgbWFrZVVJUHJvY2Vzc1RoZUZyb250UHJv
Y2VzcygpOwotfQotICAgIAotdm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6OmFwcGxpY2F0aW9uRGlk
QmVjb21lQWN0aXZlKCkKLXsKLSAgICBtYWtlUGx1Z2luUHJvY2Vzc1RoZUZyb250UHJvY2Vzcygp
OwotfQotCi1zdGF0aWMgYm9vbCBpc0ZsYXNoVXBkYXRlcihjb25zdCBTdHJpbmcmIGxhdW5jaFBh
dGgsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhcmd1bWVudHMpCi17Ci0gICAgaWYgKGxhdW5jaFBh
dGggIT0gIi9BcHBsaWNhdGlvbnMvVXRpbGl0aWVzL0Fkb2JlIEZsYXNoIFBsYXllciBJbnN0YWxs
IE1hbmFnZXIuYXBwL0NvbnRlbnRzL01hY09TL0Fkb2JlIEZsYXNoIFBsYXllciBJbnN0YWxsIE1h
bmFnZXIiKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSAhPSAxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXJndW1lbnRzWzBdICE9
ICItdXBkYXRlIikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXN0YXRpYyBib29sIHNob3VsZExhdW5jaFByb2Nlc3MoY29uc3QgUGx1Z2luUHJvY2Vzc0F0
dHJpYnV0ZXMmIHBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLCBjb25zdCBTdHJpbmcmIGxhdW5jaFBh
dGgsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhcmd1bWVudHMpCi17Ci0gICAgaWYgKHBsdWdpblBy
b2Nlc3NBdHRyaWJ1dGVzLm1vZHVsZUluZm8uYnVuZGxlSWRlbnRpZmllciA9PSAiY29tLm1hY3Jv
bWVkaWEuRmxhc2ggUGxheWVyLnBsdWdpbiIpCi0gICAgICAgIHJldHVybiBpc0ZsYXNoVXBkYXRl
cihsYXVuY2hQYXRoLCBhcmd1bWVudHMpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IFBsdWdpblByb2Nlc3NQcm94eTo6bGF1bmNoUHJvY2Vzcyhjb25zdCBTdHJpbmcmIGxhdW5jaFBh
dGgsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhcmd1bWVudHMsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFzaG91bGRMYXVuY2hQ
cm9jZXNzKG1fcGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMsIGxhdW5jaFBhdGgsIGFyZ3VtZW50cykp
Ci0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Ci0KLSAgICBbTlNUYXNr
IGxhdW5jaGVkVGFza1dpdGhMYXVuY2hQYXRoOmxhdW5jaFBhdGggYXJndW1lbnRzOmNyZWF0ZU5T
QXJyYXkoYXJndW1lbnRzKS5nZXQoKV07Ci0gICAgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7Ci19
Ci0KLXN0YXRpYyBib29sIGlzSmF2YVVwZGF0ZXJVUkwoY29uc3QgUGx1Z2luUHJvY2Vzc0F0dHJp
YnV0ZXMmIHBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykK
LXsKLSAgICBOU1VSTCAqdXJsID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6dXJsU3RyaW5nXTsKLSAg
ICBpZiAoIVt1cmwgaXNGaWxlVVJMXSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTlNB
cnJheSAqamF2YVVwZGF0ZXJBcHBOYW1lcyA9IEBbQCJKYXZhIFVwZGF0ZXIuYXBwIiwgQCJKYXZh
VXBkYXRlci5hcHAiXTsKLQotICAgIGZvciAoTlNTdHJpbmcgKmphdmFVcGRhdGVyQXBwTmFtZSBp
biBqYXZhVXBkYXRlckFwcE5hbWVzKSB7Ci0gICAgICAgIE5TU3RyaW5nICpqYXZhVXBkYXRlclBh
dGggPSBbTlNTdHJpbmcgcGF0aFdpdGhDb21wb25lbnRzOkBbKE5TU3RyaW5nICopcGx1Z2luUHJv
Y2Vzc0F0dHJpYnV0ZXMubW9kdWxlSW5mby5wYXRoLCBAIkNvbnRlbnRzL1Jlc291cmNlcyIsIGph
dmFVcGRhdGVyQXBwTmFtZV1dOwotICAgICAgICBpZiAoW3VybC5wYXRoIGlzRXF1YWxUb1N0cmlu
ZzpqYXZhVXBkYXRlclBhdGhdKQotICAgICAgICAgICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gTk87Ci19Ci0KLXN0YXRpYyBib29sIHNob3VsZExhdW5jaEFwcGxpY2F0aW9uQXRV
UkwoY29uc3QgUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMmIHBsdWdpblByb2Nlc3NBdHRyaWJ1dGVz
LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKLXsKLSAgICBpZiAocGx1Z2luUHJvY2Vzc0F0dHJp
YnV0ZXMubW9kdWxlSW5mby5idW5kbGVJZGVudGlmaWVyID09ICJjb20ub3JhY2xlLmphdmEuSmF2
YUFwcGxldFBsdWdpbiIpCi0gICAgICAgIHJldHVybiBpc0phdmFVcGRhdGVyVVJMKHBsdWdpblBy
b2Nlc3NBdHRyaWJ1dGVzLCB1cmxTdHJpbmcpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6bGF1bmNoQXBwbGljYXRpb25BdFVSTChjb25zdCBTdHJp
bmcmIHVybFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIXNo
b3VsZExhdW5jaEFwcGxpY2F0aW9uQXRVUkwobV9wbHVnaW5Qcm9jZXNzQXR0cmlidXRlcywgdXJs
U3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKLQotQUxM
T1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBhdXRvIGNvbmZpZ3VyYXRpb24g
PSBAeyBOU1dvcmtzcGFjZUxhdW5jaENvbmZpZ3VyYXRpb25Bcmd1bWVudHM6IGNyZWF0ZU5TQXJy
YXkoYXJndW1lbnRzKS5nZXQoKSB9OwotICAgIFtbTlNXb3Jrc3BhY2Ugc2hhcmVkV29ya3NwYWNl
XSBsYXVuY2hBcHBsaWNhdGlvbkF0VVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOnVybFN0cmluZ10g
b3B0aW9uczpOU1dvcmtzcGFjZUxhdW5jaEFzeW5jIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlv
biBlcnJvcjpudWxscHRyXTsKLUFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotICAg
IGNvbXBsZXRpb25IYW5kbGVyKHRydWUpOwotfQotCi1zdGF0aWMgYm9vbCBpc1NpbHZlcmxpZ2h0
UHJlZmVyZW5jZXNVUkwoY29uc3QgUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMmIHBsdWdpblByb2Nl
c3NBdHRyaWJ1dGVzLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKLXsKLSAgICBOU1VSTCAqc2ls
dmVybGlnaHRQcmVmZXJlbmNlc1VSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGhDb21wb25lbnRz
OkBbKE5TU3RyaW5nICopcGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMubW9kdWxlSW5mby5wYXRoLCBA
IkNvbnRlbnRzL1Jlc291cmNlcy9TaWx2ZXJsaWdodCBQcmVmZXJlbmNlcy5hcHAiXV07Ci0KLSAg
ICByZXR1cm4gW1tOU1VSTCBVUkxXaXRoU3RyaW5nOnVybFN0cmluZ10gaXNFcXVhbDpzaWx2ZXJs
aWdodFByZWZlcmVuY2VzVVJMXTsKLX0KLQotc3RhdGljIGJvb2wgc2hvdWxkT3BlblVSTChjb25z
dCBQbHVnaW5Qcm9jZXNzQXR0cmlidXRlcyYgcGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMsIGNvbnN0
IFN0cmluZyYgdXJsU3RyaW5nKQotewotICAgIGlmIChwbHVnaW5Qcm9jZXNzQXR0cmlidXRlcy5t
b2R1bGVJbmZvLmJ1bmRsZUlkZW50aWZpZXIgPT0gImNvbS5taWNyb3NvZnQuU2lsdmVybGlnaHRQ
bHVnaW4iKQotICAgICAgICByZXR1cm4gaXNTaWx2ZXJsaWdodFByZWZlcmVuY2VzVVJMKHBsdWdp
blByb2Nlc3NBdHRyaWJ1dGVzLCB1cmxTdHJpbmcpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci12b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6b3BlblVSTChjb25zdCBTdHJpbmcmIHVybFN0cmlu
ZywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIHJlc3VsdCwgaW50MzJfdCBzdGF0dXMsIFN0
cmluZyBsYXVuY2hlZFVSTFN0cmluZyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYg
KCFzaG91bGRPcGVuVVJMKG1fcGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMsIHVybFN0cmluZykpCi0g
ICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSwgMCwgeyB9KTsKLQotICAgIENG
VVJMUmVmIGxhdW5jaGVkVVJMOwotICAgIHVpbnQzMl90IHN0YXR1cyA9IExTT3BlbkNGVVJMUmVm
KFVSTCh7IH0sIHVybFN0cmluZykuY3JlYXRlQ0ZVUkwoKS5nZXQoKSwgJmxhdW5jaGVkVVJMKTsK
LQotICAgIFN0cmluZyBsYXVuY2hlZFVSTFN0cmluZzsKLSAgICBpZiAobGF1bmNoZWRVUkwpIHsK
LSAgICAgICAgbGF1bmNoZWRVUkxTdHJpbmcgPSBVUkwobGF1bmNoZWRVUkwpLnN0cmluZygpOwot
ICAgICAgICBDRlJlbGVhc2UobGF1bmNoZWRVUkwpOwotICAgIH0KLSAgICBjb21wbGV0aW9uSGFu
ZGxlcih0cnVlLCBzdGF0dXMsIGxhdW5jaGVkVVJMU3RyaW5nKTsKLX0KLQotc3RhdGljIGJvb2wg
c2hvdWxkT3BlbkZpbGUoY29uc3QgUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMmIHBsdWdpblByb2Nl
c3NBdHRyaWJ1dGVzLCBjb25zdCBTdHJpbmcmIGZ1bGxQYXRoKQotewotICAgIGlmIChwbHVnaW5Q
cm9jZXNzQXR0cmlidXRlcy5tb2R1bGVJbmZvLmJ1bmRsZUlkZW50aWZpZXIgPT0gImNvbS5tYWNy
b21lZGlhLkZsYXNoIFBsYXllci5wbHVnaW4iKSB7Ci0gICAgICAgIGlmIChmdWxsUGF0aCA9PSAi
L0xpYnJhcnkvUHJlZmVyZW5jZVBhbmVzL0ZsYXNoIFBsYXllci5wcmVmUGFuZSIpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
UGx1Z2luUHJvY2Vzc1Byb3h5OjpvcGVuRmlsZShjb25zdCBTdHJpbmcmIGZ1bGxQYXRoLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlm
ICghc2hvdWxkT3BlbkZpbGUobV9wbHVnaW5Qcm9jZXNzQXR0cmlidXRlcywgZnVsbFBhdGgpKQot
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwotCi0gICAgQUxMT1dfREVQ
UkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBbW05TV29ya3NwYWNlIHNoYXJlZFdvcmtz
cGFjZV0gb3BlbkZpbGU6ZnVsbFBhdGhdOwotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJ
T05TX0VORAotICAgIGNvbXBsZXRpb25IYW5kbGVyKHRydWUpOwotfQotCi1pbnQgcGx1Z2luUHJv
Y2Vzc0xhdGVuY3lRT1MoKQotewotICAgIHN0YXRpYyBjb25zdCBpbnQgcW9zID0gW1tOU1VzZXJE
ZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gaW50ZWdlckZvcktleTpAIldlYktpdFBsdWdp
blByb2Nlc3NMYXRlbmN5UU9TIl07Ci0gICAgcmV0dXJuIHFvczsKLX0KLQotaW50IHBsdWdpblBy
b2Nlc3NUaHJvdWdocHV0UU9TKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgaW50IHFvcyA9IFtbTlNV
c2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGludGVnZXJGb3JLZXk6QCJXZWJLaXRQ
bHVnaW5Qcm9jZXNzVGhyb3VnaHB1dFFPUyJdOwotICAgIHJldHVybiBxb3M7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCAyMTBiMmY0ZGEy
ZDIxYWNkMDEwNzdlODIwOGZkYTRhMzQ4NzQzZjQxLi5jOTM2N2IwMGYxZGIwNzdiOGMyZGQyYzk5
YTcxZDU2NzRhOWFiZGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAKQEAgLTgxLDggKzgxLDYgQEAKICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVx
dWVzdC5oIgogI2luY2x1ZGUgIk5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5o
IgogI2luY2x1ZGUgIlBhZ2VDbGllbnQuaCIKLSNpbmNsdWRlICJQbHVnaW5JbmZvcm1hdGlvbi5o
IgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiUHJpbnRJbmZv
LmgiCiAjaW5jbHVkZSAiUHJvY2Vzc1Rocm90dGxlci5oIgogI2luY2x1ZGUgIlByb3Zpc2lvbmFs
UGFnZVByb3h5LmgiCkBAIC0xODkyLDEzICsxODkwLDYgQEAgYm9vbCBXZWJQYWdlUHJveHk6OmNh
blNob3dNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogICAgIGlmIChNSU1FVHlwZVJl
Z2lzdHJ5OjpjYW5TaG93TUlNRVR5cGUobWltZVR5cGUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIFN0cmluZyBuZXdNaW1lVHlw
ZSA9IG1pbWVUeXBlOwotICAgIFBsdWdpbk1vZHVsZUluZm8gcGx1Z2luID0gbV9wcm9jZXNzLT5w
cm9jZXNzUG9vbCgpLnBsdWdpbkluZm9TdG9yZSgpLmZpbmRQbHVnaW4obmV3TWltZVR5cGUsIFVS
TCgpKTsKLSAgICBpZiAoIXBsdWdpbi5wYXRoLmlzTnVsbCgpICYmIG1fcHJlZmVyZW5jZXMtPnBs
dWdpbnNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotI2VuZGlmIC8vIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLy8gT24gTWFj
LCB3ZSBjYW4gc2hvdyBQREZzLgogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1BERk9yUG9z
dFNjcmlwdE1JTUVUeXBlKG1pbWVUeXBlKSAmJiAhV2ViUHJvY2Vzc1Bvb2w6Om9taXRQREZTdXBw
b3J0KCkpCkBAIC0zMDA2LDY0ICsyOTk3LDYgQEAgV2ViUHJlZmVyZW5jZXNTdG9yZSBXZWJQYWdl
UHJveHk6OnByZWZlcmVuY2VzU3RvcmUoKSBjb25zdAogICAgIHJldHVybiBtX3ByZWZlcmVuY2Vz
LT5zdG9yZSgpOwogfQogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi12b2lkIFdl
YlBhZ2VQcm94eTo6ZmluZFBsdWdpbihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJp
bmcmIHVybFN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZVVSTFN0cmluZywgY29uc3QgU3RyaW5n
JiBwYWdlVVJMU3RyaW5nLCBib29sIGFsbG93T25seUFwcGxpY2F0aW9uUGx1Z2lucywgTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6RmluZFBsdWdpbjo6RGVsYXllZFJlcGx5JiYgcmVwbHkpCi17Ci0g
ICAgUGFnZUNsaWVudFByb3RlY3RvciBwcm90ZWN0b3IocGFnZUNsaWVudCgpKTsKLQotICAgIE1F
U1NBR0VfQ0hFQ0tfVVJMKG1fcHJvY2VzcywgdXJsU3RyaW5nKTsKLQotICAgIFVSTCBwbHVnaW5V
UkwgPSBVUkwgeyBVUkwoKSwgdXJsU3RyaW5nIH07Ci0gICAgU3RyaW5nIG5ld01pbWVUeXBlID0g
bWltZVR5cGUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKLQotICAgIFBsdWdpbkRhdGE6OkFs
bG93ZWRQbHVnaW5UeXBlcyBhbGxvd2VkUGx1Z2luVHlwZXMgPSBhbGxvd09ubHlBcHBsaWNhdGlv
blBsdWdpbnMgPyBQbHVnaW5EYXRhOjpPbmx5QXBwbGljYXRpb25QbHVnaW5zIDogUGx1Z2luRGF0
YTo6QWxsUGx1Z2luczsKLQotICAgIFVSTCBwYWdlVVJMID0gVVJMIHsgVVJMKCksIHBhZ2VVUkxT
dHJpbmcgfTsKLSAgICBpZiAoIW1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5wbHVnaW5JbmZvU3Rv
cmUoKS5pc1N1cHBvcnRlZFBsdWdpbihtaW1lVHlwZSwgcGx1Z2luVVJMLCBmcmFtZVVSTFN0cmlu
ZywgcGFnZVVSTCkpIHsKLSAgICAgICAgcmVwbHkoMCwgbmV3TWltZVR5cGUsIFBsdWdpbk1vZHVs
ZUxvYWROb3JtYWxseSwgeyB9LCB0cnVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IFBsdWdpbk1vZHVsZUluZm8gcGx1Z2luID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnBsdWdp
bkluZm9TdG9yZSgpLmZpbmRQbHVnaW4obmV3TWltZVR5cGUsIHBsdWdpblVSTCwgYWxsb3dlZFBs
dWdpblR5cGVzKTsKLSAgICBpZiAoIXBsdWdpbi5wYXRoKSB7Ci0gICAgICAgIHJlcGx5KDAsIG5l
d01pbWVUeXBlLCBQbHVnaW5Nb2R1bGVMb2FkTm9ybWFsbHksIHsgfSwgZmFsc2UpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgdWludDMyX3QgcGx1Z2luTG9hZFBvbGljeSA9IFBsdWdp
bkluZm9TdG9yZTo6ZGVmYXVsdExvYWRQb2xpY3lGb3JQbHVnaW4ocGx1Z2luKTsKLQotI2lmIFBM
QVRGT1JNKENPQ09BKQotICAgIGF1dG8gcGx1Z2luSW5mb3JtYXRpb24gPSBjcmVhdGVQbHVnaW5J
bmZvcm1hdGlvbkRpY3Rpb25hcnkocGx1Z2luLCBmcmFtZVVSTFN0cmluZywgU3RyaW5nKCksIHBh
Z2VVUkxTdHJpbmcsIFN0cmluZygpLCBTdHJpbmcoKSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gZmlu
ZFBsdWdpbkNvbXBsZXRpb24gPSBbcmVwbHkgPSBXVEZNb3ZlKHJlcGx5KSwgbmV3TWltZVR5cGUg
PSBXVEZNb3ZlKG5ld01pbWVUeXBlKSwgcGx1Z2luID0gV1RGTW92ZShwbHVnaW4pXSAodWludDMy
X3QgcGx1Z2luTG9hZFBvbGljeSwgY29uc3QgU3RyaW5nJiB1bmF2YWlsYWJpbGl0eURlc2NyaXB0
aW9uKSBtdXRhYmxlIHsKLSAgICAgICAgUGx1Z2luUHJvY2Vzc1NhbmRib3hQb2xpY3kgcGx1Z2lu
UHJvY2Vzc1NhbmRib3hQb2xpY3kgPSBQbHVnaW5Qcm9jZXNzU2FuZGJveFBvbGljeTo6Tm9ybWFs
OwotICAgICAgICBzd2l0Y2ggKHBsdWdpbkxvYWRQb2xpY3kpIHsKLSAgICAgICAgY2FzZSBQbHVn
aW5Nb2R1bGVMb2FkTm9ybWFsbHk6Ci0gICAgICAgICAgICBwbHVnaW5Qcm9jZXNzU2FuZGJveFBv
bGljeSA9IFBsdWdpblByb2Nlc3NTYW5kYm94UG9saWN5OjpOb3JtYWw7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBQbHVnaW5Nb2R1bGVMb2FkVW5zYW5kYm94ZWQ6Ci0gICAgICAg
ICAgICBwbHVnaW5Qcm9jZXNzU2FuZGJveFBvbGljeSA9IFBsdWdpblByb2Nlc3NTYW5kYm94UG9s
aWN5OjpVbnNhbmRib3hlZDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgUGx1
Z2luTW9kdWxlQmxvY2tlZEZvclNlY3VyaXR5OgotICAgICAgICBjYXNlIFBsdWdpbk1vZHVsZUJs
b2NrZWRGb3JDb21wYXRpYmlsaXR5OgotICAgICAgICAgICAgcmVwbHkoMCwgbmV3TWltZVR5cGUs
IHBsdWdpbkxvYWRQb2xpY3ksIHVuYXZhaWxhYmlsaXR5RGVzY3JpcHRpb24sIGZhbHNlKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHJlcGx5KFBsdWdpblByb2Nl
c3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5wbHVnaW5Qcm9jZXNzVG9rZW4ocGx1Z2luLCBwbHVnaW5Q
cm9jZXNzU2FuZGJveFBvbGljeSksIG5ld01pbWVUeXBlLCBwbHVnaW5Mb2FkUG9saWN5LCB1bmF2
YWlsYWJpbGl0eURlc2NyaXB0aW9uLCBmYWxzZSk7Ci0gICAgfTsKLQotI2lmIFBMQVRGT1JNKENP
Q09BKQotICAgIG1fbmF2aWdhdGlvbkNsaWVudC0+ZGVjaWRlUG9saWN5Rm9yUGx1Z2luTG9hZCgq
dGhpcywgc3RhdGljX2Nhc3Q8UGx1Z2luTW9kdWxlTG9hZFBvbGljeT4ocGx1Z2luTG9hZFBvbGlj
eSksIHBsdWdpbkluZm9ybWF0aW9uLmdldCgpLCBXVEZNb3ZlKGZpbmRQbHVnaW5Db21wbGV0aW9u
KSk7Ci0jZWxzZQotICAgIGZpbmRQbHVnaW5Db21wbGV0aW9uKHBsdWdpbkxvYWRQb2xpY3ksIHsg
fSk7Ci0jZW5kaWYKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQot
CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKIAogc3RhdGljIFRyYWNraW5nVHlwZSBtZXJnZVRy
YWNraW5nVHlwZXMoVHJhY2tpbmdUeXBlIGEsIFRyYWNraW5nVHlwZSBiKQpAQCAtNjAyNywzOSAr
NTk2MCw2IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudChXZWJI
aXRUZXN0UmVzdWx0RGF0YSYmIGhpdFRlc3RSZXN1bHRECiAgICAgc2V0VG9vbFRpcChoaXRUZXN0
UmVzdWx0RGF0YS50b29sVGlwVGV4dCk7CiB9CiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLXZvaWQgV2ViUGFnZVByb3h5Ojp1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQo
dWludDMyX3Qgb3BhcXVlUGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24sIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIGNvbnN0IFN0cmluZyYgcGx1Z2luVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIHBs
dWdpbnNwYWdlQXR0cmlidXRlVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lVVJMU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHBhZ2VVUkxTdHJpbmcpCi17Ci0gICAgTUVTU0FHRV9DSEVDS19VUkwo
bV9wcm9jZXNzLCBwbHVnaW5VUkxTdHJpbmcpOwotICAgIE1FU1NBR0VfQ0hFQ0tfVVJMKG1fcHJv
Y2VzcywgcGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkxTdHJpbmcpOwotICAgIE1FU1NBR0VfQ0hFQ0tf
VVJMKG1fcHJvY2VzcywgZnJhbWVVUkxTdHJpbmcpOwotICAgIE1FU1NBR0VfQ0hFQ0tfVVJMKG1f
cHJvY2VzcywgcGFnZVVSTFN0cmluZyk7Ci0KLSAgICBTdHJpbmcgbmV3TWltZVR5cGUgPSBtaW1l
VHlwZTsKLSAgICBQbHVnaW5Nb2R1bGVJbmZvIHBsdWdpbiA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bv
b2woKS5wbHVnaW5JbmZvU3RvcmUoKS5maW5kUGx1Z2luKG5ld01pbWVUeXBlLCBVUkwoVVJMKCks
IHBsdWdpblVSTFN0cmluZykpOwotICAgIGF1dG8gcGx1Z2luSW5mb3JtYXRpb24gPSBjcmVhdGVQ
bHVnaW5JbmZvcm1hdGlvbkRpY3Rpb25hcnkocGx1Z2luLCBmcmFtZVVSTFN0cmluZywgbWltZVR5
cGUsIHBhZ2VVUkxTdHJpbmcsIHBsdWdpbnNwYWdlQXR0cmlidXRlVVJMU3RyaW5nLCBwbHVnaW5V
UkxTdHJpbmcpOwotCi0gICAgV0tQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiBwbHVnaW5VbmF2
YWlsYWJpbGl0eVJlYXNvbiA9IGtXS1BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uUGx1Z2luTWlz
c2luZzsKLSAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFJlbmRlckVtYmVkZGVkT2JqZWN0OjpQbHVn
aW5VbmF2YWlsYWJpbGl0eVJlYXNvbj4ob3BhcXVlUGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24p
KSB7Ci0gICAgY2FzZSBSZW5kZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2luTWlzc2luZzoKLSAgICAg
ICAgcGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24gPSBrV0tQbHVnaW5VbmF2YWlsYWJpbGl0eVJl
YXNvblBsdWdpbk1pc3Npbmc7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVuZGVyRW1iZWRk
ZWRPYmplY3Q6Okluc2VjdXJlUGx1Z2luVmVyc2lvbjoKLSAgICAgICAgcGx1Z2luVW5hdmFpbGFi
aWxpdHlSZWFzb24gPSBrV0tQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbkluc2VjdXJlUGx1Z2lu
VmVyc2lvbjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZW5kZXJFbWJlZGRlZE9iamVjdDo6
UGx1Z2luQ3Jhc2hlZDoKLSAgICAgICAgcGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24gPSBrV0tQ
bHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvblBsdWdpbkNyYXNoZWQ7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBsdWdpbkJsb2NrZWRCeUNvbnRlbnRTZWN1
cml0eVBvbGljeToKLSAgICBjYXNlIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpVbnN1cHBvcnRlZFBs
dWdpbjoKLSAgICBjYXNlIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpQbHVnaW5Ub29TbWFsbDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgbV91aUNsaWVudC0+dW5h
dmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkKCp0aGlzLCBwbHVnaW5VbmF2YWlsYWJpbGl0eVJl
YXNvbiwgcGx1Z2luSW5mb3JtYXRpb24uZ2V0KCkpOwotfQotI2VuZGlmIC8vIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotCiAjaWYgRU5BQkxFKFdFQkdMKQogdm9pZCBXZWJQYWdlUHJveHk6
OndlYkdMUG9saWN5Rm9yVVJMKFVSTCYmIHVybCwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6V2Vi
R0xQb2xpY3lGb3JVUkw6OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQogewpAQCAtODg5NCwyMiArODc5
NCw2IEBAIENvbG9yIFdlYlBhZ2VQcm94eTo6cGxhdGZvcm1VbmRlclBhZ2VCYWNrZ3JvdW5kQ29s
b3IoKSBjb25zdAogCiAjZW5kaWYgLy8gIVBMQVRGT1JNKENPQ09BKQogCi0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmFpbFRvSW5pdGlhbGl6
ZVBsdWdpbihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGZyYW1lVVJMU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkxTdHJpbmcpCi17Ci0gICAgbV9uYXZpZ2F0aW9uQ2xp
ZW50LT5kaWRGYWlsVG9Jbml0aWFsaXplUGx1Z0luKCp0aGlzLCBjcmVhdGVQbHVnaW5JbmZvcm1h
dGlvbkRpY3Rpb25hcnkobWltZVR5cGUsIGZyYW1lVVJMU3RyaW5nLCBwYWdlVVJMU3RyaW5nKS5n
ZXQoKSk7Ci19Ci0KLXZvaWQgV2ViUGFnZVByb3h5OjpkaWRCbG9ja0luc2VjdXJlUGx1Z2luVmVy
c2lvbihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHBsdWdpblVSTFN0cmlu
ZywgY29uc3QgU3RyaW5nJiBmcmFtZVVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBwYWdlVVJMU3Ry
aW5nLCBib29sIHJlcGxhY2VtZW50T2JzY3VyZWQpCi17Ci0gICAgU3RyaW5nIG5ld01pbWVUeXBl
ID0gbWltZVR5cGU7Ci0gICAgUGx1Z2luTW9kdWxlSW5mbyBwbHVnaW4gPSBtX3Byb2Nlc3MtPnBy
b2Nlc3NQb29sKCkucGx1Z2luSW5mb1N0b3JlKCkuZmluZFBsdWdpbihuZXdNaW1lVHlwZSwgVVJM
KFVSTCgpLCBwbHVnaW5VUkxTdHJpbmcpKTsKLSAgICBhdXRvIHBsdWdpbkluZm9ybWF0aW9uID0g
Y3JlYXRlUGx1Z2luSW5mb3JtYXRpb25EaWN0aW9uYXJ5KHBsdWdpbiwgZnJhbWVVUkxTdHJpbmcs
IG1pbWVUeXBlLCBwYWdlVVJMU3RyaW5nLCBTdHJpbmcoKSwgU3RyaW5nKCksIHJlcGxhY2VtZW50
T2JzY3VyZWQpOwotCi0gICAgbV9uYXZpZ2F0aW9uQ2xpZW50LT5kaWRCbG9ja0luc2VjdXJlUGx1
Z2luVmVyc2lvbigqdGhpcywgcGx1Z2luSW5mb3JtYXRpb24uZ2V0KCkpOwotfQotI2VuZGlmIC8v
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCiBib29sIFdlYlBhZ2VQcm94eTo6d2lsbEhh
bmRsZUhvcml6b250YWxTY3JvbGxFdmVudHMoKSBjb25zdAogewogICAgIHJldHVybiAhbV9jYW5T
aG9ydENpcmN1aXRIb3Jpem9udGFsV2hlZWxFdmVudHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCmluZGV4IDk5MzM2Y2M3OWE1OWEwZjNkN2U0MDcxMDMwOTExNzFhYjg5MWM2
YmUuLmY3ZTVkZGE2OTUzODdkMWU3MTY5YzU3YzRjZDVjYTljOWE1OWY5MGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVkZSAi
UERGUGx1Z2luSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlBhZ2VMb2FkU3RhdGUuaCIKICNpbmNs
dWRlICJQYXN0ZWJvYXJkQWNjZXNzSW50ZW50LmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0F0
dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJQb2xpY3lEZWNpc2lvbi5oIgogI2luY2x1ZGUgIlByb2Nl
c3NUZXJtaW5hdGlvblJlYXNvbi5oIgogI2luY2x1ZGUgIlByb2Nlc3NUaHJvdHRsZXIuaCIKQEAg
LTIxMTQsOSArMjExMyw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRTdGF0dXNUZXh0KGNvbnN0
IFN0cmluZyYpOwogICAgIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV2ViSGl0VGVzdFJl
c3VsdERhdGEmJiwgdWludDMyX3QgbW9kaWZpZXJzLCBVc2VyRGF0YSYmKTsKIAotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHZvaWQgdW5hdmFpbGFibGVQbHVnaW5CdXR0b25D
bGlja2VkKHVpbnQzMl90IG9wYXF1ZVBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHBsdWdpblVSTFN0cmluZywgY29uc3QgU3Ry
aW5nJiBwbHVnaW5zUGFnZVVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZVVSTFN0cmluZywg
Y29uc3QgU3RyaW5nJiBwYWdlVVJMU3RyaW5nKTsKLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgdm9pZCB3ZWJHTFBvbGljeUZvclVS
TChVUkwmJiwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6V2ViR0xQb2xpY3lGb3JVUkxEZWxheWVk
UmVwbHkmJik7CiAgICAgdm9pZCByZXNvbHZlV2ViR0xQb2xpY3lGb3JVUkwoVVJMJiYsIE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlJlc29sdmVXZWJHTFBvbGljeUZvclVSTERlbGF5ZWRSZXBseSYm
KTsKQEAgLTIxNzUsMTAgKzIxNzEsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFnZUV4dGVuZGVk
QmFja2dyb3VuZENvbG9yRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7CiAgICAgdm9p
ZCBzYW1wbGVkUGFnZVRvcENvbG9yQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpDb2xvciYpOwogICAg
IFdlYkNvcmU6OkNvbG9yIHBsYXRmb3JtVW5kZXJQYWdlQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7
Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgdm9pZCBkaWRGYWlsVG9Jbml0
aWFsaXplUGx1Z2luKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgZnJhbWVV
UkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgcGFnZVVSTFN0cmluZyk7Ci0gICAgdm9pZCBkaWRCbG9j
a0luc2VjdXJlUGx1Z2luVmVyc2lvbihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJp
bmcmIHBsdWdpblVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZVVSTFN0cmluZywgY29uc3Qg
U3RyaW5nJiBwYWdlVVJMU3RyaW5nLCBib29sIHJlcGxhY2VtZW50T2JzY3VyZWQpOwotI2VuZGlm
IC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIHZvaWQgc2V0Q2FuU2hvcnRDaXJj
dWl0SG9yaXpvbnRhbFdoZWVsRXZlbnRzKGJvb2wgY2FuU2hvcnRDaXJjdWl0SG9yaXpvbnRhbFdo
ZWVsRXZlbnRzKSB7IG1fY2FuU2hvcnRDaXJjdWl0SG9yaXpvbnRhbFdoZWVsRXZlbnRzID0gY2Fu
U2hvcnRDaXJjdWl0SG9yaXpvbnRhbFdoZWVsRXZlbnRzOyB9CiAKICAgICBlbnVtIGNsYXNzIFBy
b2Nlc3NMYXVuY2hSZWFzb24gewpAQCAtMjMzMSw3ICsyMzIzLDYgQEAgcHJpdmF0ZToKIAogI2lm
IFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdl
ZCh1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgYm9vbCBwbHVnaW5I
YXNGb2N1c0FuZFdpbmRvd0hhc0ZvY3VzKTsKLSAgICB2b2lkIHNldFBsdWdpbkNvbXBsZXhUZXh0
SW5wdXRTdGF0ZSh1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgdWlu
dDY0X3QgY29tcGxleFRleHRJbnB1dFN0YXRlKTsKICNlbmRpZgogCiAjaWYgVVNFKEFVVE9NQVRJ
Q19URVhUX1JFUExBQ0VNRU5UKQpAQCAtMjQwOSwxMCArMjQwMCw2IEBAIHByaXZhdGU6CiAgICAg
V2ViQ29yZTo6VHJhY2tpbmdUeXBlIHRvdWNoRXZlbnRUcmFja2luZ1R5cGUoY29uc3QgV2ViVG91
Y2hFdmVudCYpIGNvbnN0OwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKLSAgICB2b2lkIGZpbmRQbHVnaW4oY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3Ry
aW5nJiB1cmxTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVVUkxTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcGFnZVVSTFN0cmluZywgYm9vbCBhbGxvd09ubHlBcHBsaWNhdGlvblBsdWdpbnMsIE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OkZpbmRQbHVnaW5EZWxheWVkUmVwbHkmJik7Ci0jZW5kaWYKLQog
I2lmIFVTRShRVUlDS19MT09LKQogICAgIHZvaWQgZGlkU3RhcnRMb2FkRm9yUXVpY2tMb29rRG9j
dW1lbnRJbk1haW5GcmFtZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIHV0
aSk7CiAgICAgdm9pZCBkaWRGaW5pc2hMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFt
ZShjb25zdCBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KaW5kZXggZjU3MDVhMDYxMTVhMjJl
OGUzMDc2YmM1Zjk1YmM5ZGMxYmU3YzQ2YS4uNTZlOGExZGNlODE4YzYzOTBjYTA2MjJlM2I0NGE1
YzFlZDEwZWYxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbgpAQCAtMzAsOSArMzAsNiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkg
ewogICAgIFJ1bkphdmFTY3JpcHRQcm9tcHQoV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1l
SUQsIHN0cnVjdCBXZWJLaXQ6OkZyYW1lSW5mb0RhdGEgZnJhbWVJbmZvLCBTdHJpbmcgbWVzc2Fn
ZSwgU3RyaW5nIGRlZmF1bHRWYWx1ZSkgLT4gKFN0cmluZyByZXN1bHQpIFN5bmNocm9ub3VzCiAg
ICAgTW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoc3RydWN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3Vs
dERhdGEgaGl0VGVzdFJlc3VsdERhdGEsIHVpbnQzMl90IG1vZGlmaWVycywgV2ViS2l0OjpVc2Vy
RGF0YSB1c2VyRGF0YSkKIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIFVu
YXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZCh1aW50MzJfdCBwbHVnaW5VbmF2YWlsYWJpbGl0
eVJlYXNvbiwgU3RyaW5nIG1pbWVUeXBlLCBTdHJpbmcgcGx1Z2luVVJMU3RyaW5nLCBTdHJpbmcg
cGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkxTdHJpbmcsIFN0cmluZyBmcmFtZVVSTFN0cmluZywgU3Ry
aW5nIHBhZ2VVUkxTdHJpbmcpCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIFdlYkdMUG9saWN5Rm9yVVJMKFVSTCB1cmwpIC0+IChl
bnVtOnVpbnQ4X3QgV2ViQ29yZTo6V2ViR0xMb2FkUG9saWN5IGxvYWRQb2xpY3kpIFN5bmNocm9u
b3VzCiAgICAgUmVzb2x2ZVdlYkdMUG9saWN5Rm9yVVJMKFVSTCB1cmwpIC0+IChlbnVtOnVpbnQ4
X3QgV2ViQ29yZTo6V2ViR0xMb2FkUG9saWN5IGxvYWRQb2xpY3kpIFN5bmNocm9ub3VzCkBAIC04
MSwxMCArNzgsNiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIFRoZW1lQ29sb3JD
aGFuZ2VkKFdlYkNvcmU6OkNvbG9yIHRoZW1lQ29sb3IpCiAgICAgUGFnZUV4dGVuZGVkQmFja2dy
b3VuZENvbG9yRGlkQ2hhbmdlKFdlYkNvcmU6OkNvbG9yIGJhY2tncm91bmRDb2xvcikKICAgICBT
YW1wbGVkUGFnZVRvcENvbG9yQ2hhbmdlZChXZWJDb3JlOjpDb2xvciBzYW1wbGVkUGFnZVRvcENv
bG9yKQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIERpZEZhaWxUb0luaXRp
YWxpemVQbHVnaW4oU3RyaW5nIG1pbWVUeXBlLCBTdHJpbmcgZnJhbWVVUkxTdHJpbmcsIFN0cmlu
ZyBwYWdlVVJMU3RyaW5nKQotICAgIERpZEJsb2NrSW5zZWN1cmVQbHVnaW5WZXJzaW9uKFN0cmlu
ZyBtaW1lVHlwZSwgU3RyaW5nIHBsdWdpblVSTFN0cmluZywgU3RyaW5nIGZyYW1lVVJMU3RyaW5n
LCBTdHJpbmcgcGFnZVVSTFN0cmluZywgYm9vbCByZXBsYWNlbWVudE9ic2N1cmVkKQotI2VuZGlm
IC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIFNldENhblNob3J0Q2lyY3VpdEhv
cml6b250YWxXaGVlbEV2ZW50cyhib29sIGNhblNob3J0Q2lyY3VpdEhvcml6b250YWxXaGVlbEV2
ZW50cykKIAogICAgIERpZENoYW5nZUNvbnRlbnRTaXplKFdlYkNvcmU6OkludFNpemUgbmV3U2l6
ZSkKQEAgLTMzNiw3ICszMjksNiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogCiAgICAg
IyBQbHVnLWluIGNvbXBsZXggdGV4dCBpbnB1dCBzdXBwb3J0IG1lc3NhZ2VzCiAgICAgUGx1Z2lu
Rm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZCh1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0
SWRlbnRpZmllciwgYm9vbCBwbHVnaW5IYXNGb2N1c0FuZFdpbmRvd0hhc0ZvY3VzKQotICAgIFNl
dFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSh1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElu
cHV0SWRlbnRpZmllciwgdWludDY0X3QgY29tcGxleFRleHRJbnB1dFN0YXRlKQogCiAgICAgIyBT
cGVlY2ggbWVzc2FnZXMKICAgICBHZXRJc1NwZWFraW5nKCkgLT4gKGJvb2wgaXNTcGVha2luZykg
U3luY2hyb25vdXMKQEAgLTQzNSwxMCArNDI3LDYgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5
IHsKICAgICBTaG93UERGQ29udGV4dE1lbnUoc3RydWN0IFdlYktpdDo6UERGQ29udGV4dE1lbnUg
Y29udGV4dE1lbnUsIFdlYktpdDo6UERGUGx1Z2luSWRlbnRpZmllciBpZGVudGlmaWVyKSAtPiAo
c3RkOjpvcHRpb25hbDxpbnQzMl90PiBzZWxlY3RlZEl0ZW0pIFN5bmNocm9ub3VzCiAjZW5kaWYK
IAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIEZpbmRQbHVnaW4oU3RyaW5n
IG1pbWVUeXBlLCBTdHJpbmcgdXJsU3RyaW5nLCBTdHJpbmcgZnJhbWVVUkxTdHJpbmcsIFN0cmlu
ZyBwYWdlVVJMU3RyaW5nLCBib29sIGFsbG93T25seUFwcGxpY2F0aW9uUGx1Z2lucykgLT4gKHVp
bnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbiwgU3RyaW5nIG5ld01JTUVUeXBlLCB1aW50MzJfdCBw
bHVnaW5Mb2FkUG9saWN5LCBTdHJpbmcgdW5hdmFpbGFiaWxpdHlEZXNjcmlwdGlvbiwgYm9vbCBp
c1Vuc3VwcG9ydGVkKSBTeW5jaHJvbm91cwotI2VuZGlmCi0KICAgICBEaWRVcGRhdGVBY3Rpdml0
eVN0YXRlKCkKIAogI2lmIEVOQUJMRShXRUJfQ1JZUFRPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IGI2NWUwODZkODhlYWNmZWJiMzQzM2Q3ZGQxMjY4
YTE5MWRjYmRkMGEuLjdhMDI2NmI4YTExYTRlMWM2MDVjYjAzMzg1MmM3YmQwMjE0M2M1M2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTUwLDcgKzUw
LDYgQEAKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0
d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIlBlckFjdGl2aXR5U3RhdGVDUFVVc2FnZVNh
bXBsZXIuaCIKLSNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzTWFuYWdlci5oIgogI2luY2x1ZGUgIlNh
bmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgogI2luY2x1ZGUgIlVJ
R2FtZXBhZC5oIgpAQCAtMzg3LDkgKzM4Niw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRN
ZW1vcnlQcmVzc3VyZUV2ZW50KGJvb2wgaXNDcml0aWNhbCkKICAgICBzZW5kVG9BbGxQcm9jZXNz
ZXMoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2
ZW50KGlzQ3JpdGljYWwpKTsKICAgICBmb3IgKGF1dG8gbmV0d29ya1Byb2Nlc3MgOiBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjphbGxOZXR3b3JrUHJvY2Vzc2VzKCkpCiAgICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJl
c3N1cmVFdmVudChpc0NyaXRpY2FsKSwgMCk7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi0gICAgUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLnNlbmRNZW1vcnlQcmVz
c3VyZUV2ZW50KGlzQ3JpdGljYWwpOwotI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMTI0OCwyMyAr
MTI0NCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmhhbmRsZU1lbW9yeVByZXNzdXJlV2Fybmlu
ZyhDcml0aWNhbCkKICAgICBBU1NFUlQoIW1fcHJld2FybWVkUHJvY2Vzcyk7CiB9CiAKLSNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEFkZGl0
aW9uYWxQbHVnaW5zRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5KQotewotICAgIFZl
Y3RvcjxTdHJpbmc+IGRpcmVjdG9yaWVzOwotICAgIGRpcmVjdG9yaWVzLmFwcGVuZChkaXJlY3Rv
cnkpOwotCi0gICAgbV9wbHVnaW5JbmZvU3RvcmUuc2V0QWRkaXRpb25hbFBsdWdpbnNEaXJlY3Rv
cmllcyhkaXJlY3Rvcmllcyk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZnJlc2hQbHVn
aW5zKCkKLXsKLSAgICBtX3BsdWdpbkluZm9TdG9yZS5yZWZyZXNoKCk7Ci0gICAgc2VuZFRvQWxs
UHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWZyZXNoUGx1Z2lucygpKTsKLX0KLQot
I2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCiBQcm9jZXNzSUQgV2ViUHJv
Y2Vzc1Bvb2w6OnByZXdhcm1lZFByb2Nlc3NJZGVudGlmaWVyKCkKIHsKICAgICByZXR1cm4gbV9w
cmV3YXJtZWRQcm9jZXNzID8gbV9wcmV3YXJtZWRQcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigp
IDogMDsKQEAgLTE2OTMsMjEgKzE2NzIsMTQgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0SmF2
YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQoYm9vbCBmbGFnKQogCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjphZGRTdXBwb3J0ZWRQbHVnaW4oU3RyaW5nJiYgbWF0Y2hpbmdEb21haW4s
IFN0cmluZyYmIG5hbWUsIEhhc2hTZXQ8U3RyaW5nPiYmIG1pbWVUeXBlcywgSGFzaFNldDxTdHJp
bmc+IGV4dGVuc2lvbnMpCiB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAg
bV9wbHVnaW5JbmZvU3RvcmUuYWRkU3VwcG9ydGVkUGx1Z2luKFdURk1vdmUobWF0Y2hpbmdEb21h
aW4pLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKG1pbWVUeXBlcyksIFdURk1vdmUoZXh0ZW5zaW9u
cykpOwotI2Vsc2UKICAgICBVTlVTRURfUEFSQU0obWF0Y2hpbmdEb21haW4pOwogICAgIFVOVVNF
RF9QQVJBTShuYW1lKTsKICAgICBVTlVTRURfUEFSQU0obWltZVR5cGVzKTsKICAgICBVTlVTRURf
UEFSQU0oZXh0ZW5zaW9ucyk7Ci0jZW5kaWYKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xl
YXJTdXBwb3J0ZWRQbHVnaW5zKCkKIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
LSAgICBtX3BsdWdpbkluZm9TdG9yZS5jbGVhclN1cHBvcnRlZFBsdWdpbnMoKTsKLSNlbmRpZgog
fQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRNZW1vcnlDYWNoZURpc2FibGVkKGJvb2wgZGlz
YWJsZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9v
bC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAppbmRleCBlNDg3
ZDc4M2EyYTFmNGJkNzNiYTMxNTg3MDYzMzQyZGJlYmEzNzI1Li44YWI5OTY1M2NmODc2NWRiZmQz
YmI4YTEwODc5YjU0Y2I1MWEwZGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUG9vbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQb29sLmgKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIK
ICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXJNYXAuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vz
c1Byb3h5LmgiCi0jaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCiAjaW5jbHVkZSAiUHJvY2Vz
c1Rocm90dGxlci5oIgogI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RvcmUuaCIKICNpbmNsdWRlICJX
ZWJDb250ZXh0Q2xpZW50LmgiCkBAIC0yMjksMTMgKzIyOCw2IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgaGFuZGxlTWVtb3J5UHJlc3N1cmVXYXJuaW5nKENyaXRpY2FsKTsKIAotI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHZvaWQgc2V0QWRkaXRpb25hbFBsdWdpbnNEaXJlY3Rv
cnkoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCByZWZyZXNoUGx1Z2lucygpOwotCi0gICAgUGx1
Z2luSW5mb1N0b3JlJiBwbHVnaW5JbmZvU3RvcmUoKSB7IHJldHVybiBtX3BsdWdpbkluZm9TdG9y
ZTsgfQotI2VuZGlmCi0KICNpZiBIQVZFKENWRElTUExBWUxJTkspCiAgICAgc3RkOjpvcHRpb25h
bDxXZWJDb3JlOjpGcmFtZXNQZXJTZWNvbmQ+IG5vbWluYWxGcmFtZXNQZXJTZWNvbmRGb3JEaXNw
bGF5KFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKTsKICAgICB2b2lkIHN0YXJ0RGlzcGxheUxp
bmsoSVBDOjpDb25uZWN0aW9uJiwgRGlzcGxheUxpbmtPYnNlcnZlcklELCBXZWJDb3JlOjpQbGF0
Zm9ybURpc3BsYXlJRCwgV2ViQ29yZTo6RnJhbWVzUGVyU2Vjb25kKTsKQEAgLTYzOSw5ICs2MzEs
NiBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPFdlYkF1dG9tYXRpb25TZXNzaW9uPiBtX2F1dG9t
YXRpb25TZXNzaW9uOwogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgUGx1
Z2luSW5mb1N0b3JlIG1fcGx1Z2luSW5mb1N0b3JlOwotI2VuZGlmCiAgICAgUmVmPFZpc2l0ZWRM
aW5rU3RvcmU+IG1fdmlzaXRlZExpbmtTdG9yZTsKICAgICBib29sIG1fdmlzaXRlZExpbmtzUG9w
dWxhdGVkIHsgZmFsc2UgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5jcHAKaW5kZXggNWM1OTY2ZWNjYjllOGEyY2EwMmMxYTI4OWUxYjgxODIwZDczZDkyYy4u
OTQ4MTc2MDhjODA4YTZiZTA5Y2VjNDRlYzBjYTA4OTU1ZjYwOTUzNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCkBAIC0zNCw4ICszNCw2IEBACiAjaW5j
bHVkZSAiRG93bmxvYWRQcm94eU1hcC5oIgogI2luY2x1ZGUgIkxvYWRQYXJhbWV0ZXJzLmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgotI2luY2x1
ZGUgIlBsdWdpblByb2Nlc3NNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiUHJvdmlzaW9uYWxQYWdlUHJv
eHkuaCIKICNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvblBlcm1pc3Npb25SZXF1ZXN0LmgiCiAj
aW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25SZW1vdGVSZWFsdGltZU1lZGlhU291cmNlTWFuYWdl
ci5oIgpAQCAtODAzLDQwICs4MDEsNiBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6dXBkYXRlQmFj
a0ZvcndhcmRJdGVtKGNvbnN0IEJhY2tGb3J3YXJkTGlzdEl0ZW1TdGF0ZSYgaXRlbQogICAgIH0K
IH0KIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotdm9pZCBXZWJQcm9jZXNzUHJv
eHk6OmdldFBsdWdpbnMoYm9vbCByZWZyZXNoLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rv
cjxQbHVnaW5JbmZvPiYmIHBsdWdpbnMsIFZlY3RvcjxQbHVnaW5JbmZvPiYmIGFwcGxpY2F0aW9u
UGx1Z2lucywgc3RkOjpvcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6U3VwcG9ydGVkUGx1Z2luSWRl
bnRpZmllcj4+JiYgc3VwcG9ydGVkUGx1Z2luSWRlbnRpZmllcnMpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQotewotICAgIGlmIChyZWZyZXNoKQotICAgICAgICBtX3Byb2Nlc3NQb29sLT5wbHVnaW5J
bmZvU3RvcmUoKS5yZWZyZXNoKCk7Ci0KLSAgICBhdXRvIHN1cHBvcnRlZFBsdWdpbklkZW50aWZp
ZXJzID0gbV9wcm9jZXNzUG9vbC0+cGx1Z2luSW5mb1N0b3JlKCkuc3VwcG9ydGVkUGx1Z2luSWRl
bnRpZmllcnMoKTsKLQotICAgIFZlY3RvcjxQbHVnaW5JbmZvPiBwbHVnaW5zOwotICAgIFZlY3Rv
cjxQbHVnaW5Nb2R1bGVJbmZvPiBwbHVnaW5Nb2R1bGVzID0gbV9wcm9jZXNzUG9vbC0+cGx1Z2lu
SW5mb1N0b3JlKCkucGx1Z2lucygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGx1Z2lu
TW9kdWxlcy5zaXplKCk7ICsraSkKLSAgICAgICAgcGx1Z2lucy5hcHBlbmQocGx1Z2luTW9kdWxl
c1tpXS5pbmZvKTsKLQotICAgIFZlY3RvcjxQbHVnaW5JbmZvPiBhcHBsaWNhdGlvblBsdWdpbnM7
Ci0jaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCi0gICAgLy8gQWRkIGJ1aWx0LWluIFBERiBsYXN0
LCBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgd2hlbiBhIHJlYWwgcGx1Zy1pbiBpcyBpbnN0YWxsZWQu
Ci0gICAgaWYgKCFtX3Byb2Nlc3NQb29sLT5vbWl0UERGU3VwcG9ydCgpKSB7Ci0gICAgICAgIHBs
dWdpbnMuYXBwZW5kKFBERlBsdWdpbjo6cGx1Z2luSW5mbygpKTsKLSAgICAgICAgYXBwbGljYXRp
b25QbHVnaW5zLmFwcGVuZChQREZQbHVnaW46OnBsdWdpbkluZm8oKSk7Ci0gICAgfQotI2VuZGlm
Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShwbHVnaW5zKSwgV1RGTW92ZShhcHBsaWNh
dGlvblBsdWdpbnMpLCBXVEZNb3ZlKHN1cHBvcnRlZFBsdWdpbklkZW50aWZpZXJzKSk7Ci19Ci0j
ZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLXZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpnZXRQbHVnaW5Qcm9jZXNzQ29u
bmVjdGlvbih1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNz
UHJveHk6OkdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBseSkK
LXsKLSAgICBNRVNTQUdFX0NIRUNLKEhhc2hTZXQ8dWludDY0X3Q+Ojppc1ZhbGlkVmFsdWUocGx1
Z2luUHJvY2Vzc1Rva2VuKSk7Ci0gICAgYm9vbCBzdWNjZXNzID0gUGx1Z2luUHJvY2Vzc01hbmFn
ZXI6OnNpbmdsZXRvbigpLmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKHBsdWdpblByb2Nlc3NU
b2tlbiwgV1RGTW92ZShyZXBseSkpOwotICAgIE1FU1NBR0VfQ0hFQ0soc3VjY2Vzcyk7Ci19Ci0j
ZW5kaWYKLQogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bihNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246
OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQogewogICAgIHdlYnNpdGVEYXRhU3RvcmUoKS5nZXROZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKnRoaXMsIFdURk1vdmUocmVwbHkpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKaW5kZXggMTM5NTE3YmRiMjRiNTRjNDhlZGZi
YmViMDEzZGU5MjlhNWYxNGVmNi4uMTk0MDA1ODc4MDY2YTMwOGQzMGJhNWM5MDliNTU4OTUzZDlh
NDY3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKQEAgLTMx
LDcgKzMxLDYgQEAKICNpbmNsdWRlICJEaXNwbGF5TGlua09ic2VydmVySUQuaCIKICNpbmNsdWRl
ICJNZXNzYWdlUmVjZWl2ZXJNYXAuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5Lmgi
Ci0jaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc0xhdW5jaGVy
LmgiCiAjaW5jbHVkZSAiUHJvY2Vzc1Rlcm1pbmF0aW9uUmVhc29uLmgiCiAjaW5jbHVkZSAiUHJv
Y2Vzc1Rocm90dGxlci5oIgpAQCAtNDcwLDE0ICs0NjksNiBAQCBwcml2YXRlOgogCiAgICAgYm9v
bCBoYXNQcm92aXNpb25hbFBhZ2VXaXRoSUQoV2ViUGFnZVByb3h5SWRlbnRpZmllcikgY29uc3Q7
CiAgICAgYm9vbCBpc0FsbG93ZWRUb1VwZGF0ZUJhY2tGb3J3YXJkSXRlbShXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtJikgY29uc3Q7Ci0KLSAgICAvLyBQbHVnaW5zCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0gICAgdm9pZCBnZXRQbHVnaW5zKGJvb2wgcmVmcmVzaCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4mJiBwbHVnaW5zLCBWZWN0
b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4mJiBhcHBsaWNhdGlvblBsdWdpbnMsIHN0ZDo6b3B0aW9u
YWw8VmVjdG9yPFdlYkNvcmU6OlN1cHBvcnRlZFBsdWdpbklkZW50aWZpZXI+PiYmKT4mJik7Ci0j
ZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0gICAgdm9pZCBnZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbih1aW50NjRf
dCBwbHVnaW5Qcm9jZXNzVG9rZW4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldFBsdWdp
blByb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwotI2VuZGlmCiAgICAgCiAgICAgdm9p
ZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6
R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4KaW5kZXgg
OWU5M2RhMTNmNjM1ZjU3ZGE5YWVhNjIxNjNmNWU2ZDJmZmI0ZTA2Zi4uYjI4OTVmOTRiNjI3NjU2
YWRiZGQxZmZhMWFkNmY0M2MyZGEwMjAwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgpAQCAtMzEsMTEgKzMxLDYgQEAgbWVz
c2FnZXMgLT4gV2ViUHJvY2Vzc1Byb3h5IExlZ2FjeVJlY2VpdmVyIHsKICAgICBFbmFibGVTdWRk
ZW5UZXJtaW5hdGlvbigpCiAgICAgRGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCkKIAotICAgICMg
UGx1Z2luIG1lc3NhZ2VzLgotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIEdl
dFBsdWdpbnMoYm9vbCByZWZyZXNoKSAtPiAoVmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+IHBs
dWdpbnMsIFZlY3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZvPiBhcHBsaWNhdGlvblBsdWdpbnMsIHN0
cnVjdCBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpTdXBwb3J0ZWRQbHVnaW5JZGVudGlm
aWVyPj4gc3VwcG9ydGVkUGx1Z2luSWRlbnRpZmllcnMpIFN5bmNocm9ub3VzCi0gICAgR2V0UGx1
Z2luUHJvY2Vzc0Nvbm5lY3Rpb24odWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2VuKSAtPiAoSVBD
OjpBdHRhY2htZW50IGNvbm5lY3Rpb25IYW5kbGUsIGJvb2wgc3VwcG9ydHNBc3luY2hyb25vdXNJ
bml0aWFsaXphdGlvbikgU3luY2hyb25vdXMKLSNlbmRpZgogICAgIEdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbigpIC0+IChzdHJ1Y3QgV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25J
bmZvIGNvbm5lY3Rpb25JbmZvKSBTeW5jaHJvbm91cwogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFSZWNvcmQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFSZWNvcmQuY3BwCmluZGV4IGU5M2M4ZmEyODI3ZTVhYzY4NWYxZWE1NWM5N2NhODEw
N2IzZjc5ZTguLjg1ZDIyZDJkYzUyYTMzYjJiZDEwZGM0MmZkMTE3Njg4YzZiMGIzMzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhUmVj
b3JkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRl
RGF0YVJlY29yZC5jcHAKQEAgLTkwLDE0ICs5MCw2IEBAIHZvaWQgV2Vic2l0ZURhdGFSZWNvcmQ6
OmFkZENvb2tpZUhvc3ROYW1lKGNvbnN0IFN0cmluZyYgaG9zdE5hbWUpCiAgICAgY29va2llSG9z
dE5hbWVzLmFkZChob3N0TmFtZSk7CiB9CiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKLXZvaWQgV2Vic2l0ZURhdGFSZWNvcmQ6OmFkZFBsdWdpbkRhdGFIb3N0TmFtZShjb25zdCBT
dHJpbmcmIGhvc3ROYW1lKQotewotICAgIHR5cGVzLmFkZChXZWJzaXRlRGF0YVR5cGU6OlBsdWdJ
bkRhdGEpOwotICAgIHBsdWdpbkRhdGFIb3N0TmFtZXMuYWRkKGhvc3ROYW1lKTsKLX0KLSNlbmRp
ZgotCiB2b2lkIFdlYnNpdGVEYXRhUmVjb3JkOjphZGRIU1RTQ2FjaGVIb3N0bmFtZShjb25zdCBT
dHJpbmcmIGhvc3ROYW1lKQogewogICAgIHR5cGVzLmFkZChXZWJzaXRlRGF0YVR5cGU6OkhTVFND
YWNoZSk7CkBAIC0xNjAsMTIgKzE1Miw2IEBAIFN0cmluZyBXZWJzaXRlRGF0YVJlY29yZDo6dG9w
UHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbigpCiAgICAgCiAgICAgaWYgKCFvcmlnaW5zLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21h
aW4ob3JpZ2lucy50YWtlQW55KCkuc2VjdXJpdHlPcmlnaW4oKS5nZXQoKS5ob3N0KCkpOwotICAg
IAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGlmICghcGx1Z2luRGF0YUhv
c3ROYW1lcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBXZWJDb3JlOjp0b3BQcml2YXRlbHlD
b250cm9sbGVkRG9tYWluKHBsdWdpbkRhdGFIb3N0TmFtZXMudGFrZUFueSgpKTsKLSNlbmRpZgot
ICAgIAogI2VuZGlmIC8vIEVOQUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCiAgICAgCiAgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7CkBAIC0xNzksOSArMTY1LDYgQEAgV2Vic2l0ZURhdGFSZWNvcmQg
V2Vic2l0ZURhdGFSZWNvcmQ6Omlzb2xhdGVkQ29weSgpIGNvbnN0CiAgICAgICAgIHNpemUsCiAg
ICAgICAgIGNyb3NzVGhyZWFkQ29weShvcmlnaW5zKSwKICAgICAgICAgY3Jvc3NUaHJlYWRDb3B5
KGNvb2tpZUhvc3ROYW1lcyksCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAg
ICAgIGNyb3NzVGhyZWFkQ29weShwbHVnaW5EYXRhSG9zdE5hbWVzKSwKLSNlbmRpZgogICAgICAg
ICBjcm9zc1RocmVhZENvcHkoSFNUU0NhY2hlSG9zdE5hbWVzKSwKICAgICAgICAgY3Jvc3NUaHJl
YWRDb3B5KGFsdGVybmF0aXZlU2VydmljZXNIb3N0TmFtZXMpLAogI2lmIEVOQUJMRShJTlRFTExJ
R0VOVF9UUkFDS0lOR19QUkVWRU5USU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFSZWNvcmQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhUmVjb3JkLmgKaW5kZXggOWQ4NmVhMDVhOWM4
MGUzMDUxYmEyZTI0OWJkODNiZjM2ZjFjNjU4MC4uMTFjYThlODAwMjZiYTg1Mjk3ZGUzMWUzZmQw
MTIxY2IxZmNkNWU0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGFSZWNvcmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVJlY29yZC5oCkBAIC00OSw5ICs0OSw2IEBAIHN0cnVjdCBX
ZWJzaXRlRGF0YVJlY29yZCB7CiAKICAgICB2b2lkIGFkZChXZWJzaXRlRGF0YVR5cGUsIGNvbnN0
IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYpOwogICAgIHZvaWQgYWRkQ29va2llSG9zdE5h
bWUoY29uc3QgU3RyaW5nJiBob3N0TmFtZSk7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi0gICAgdm9pZCBhZGRQbHVnaW5EYXRhSG9zdE5hbWUoY29uc3QgU3RyaW5nJiBob3N0TmFt
ZSk7Ci0jZW5kaWYKICAgICB2b2lkIGFkZEhTVFNDYWNoZUhvc3RuYW1lKGNvbnN0IFN0cmluZyYg
aG9zdE5hbWUpOwogICAgIHZvaWQgYWRkQWx0ZXJuYXRpdmVTZXJ2aWNlc0hvc3RuYW1lKGNvbnN0
IFN0cmluZyYgaG9zdE5hbWUpOwogI2lmIEVOQUJMRShJTlRFTExJR0VOVF9UUkFDS0lOR19QUkVW
RU5USU9OKQpAQCAtNzQsOSArNzEsNiBAQCBzdHJ1Y3QgV2Vic2l0ZURhdGFSZWNvcmQgewogCiAg
ICAgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7CiAgICAgSGFz
aFNldDxTdHJpbmc+IGNvb2tpZUhvc3ROYW1lczsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLSAgICBIYXNoU2V0PFN0cmluZz4gcGx1Z2luRGF0YUhvc3ROYW1lczsKLSNlbmRpZgog
ICAgIEhhc2hTZXQ8U3RyaW5nPiBIU1RTQ2FjaGVIb3N0TmFtZXM7CiAgICAgSGFzaFNldDxTdHJp
bmc+IGFsdGVybmF0aXZlU2VydmljZXNIb3N0TmFtZXM7CiAjaWYgRU5BQkxFKElOVEVMTElHRU5U
X1RSQUNLSU5HX1BSRVZFTlRJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IGZmZmNhMjI2NmZlNzAx
NWE2YzAzOWIyOTM3YWE2NDg4OTFiM2NkNDYuLjk2NzA1MTUzNDdhNTRjMDZhZDRlNzI0ZjBkZTY2
OWUxMjMyYmQwODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC03MCwxMCArNzAsNiBAQAogI2luY2x1
ZGUgPHd0Zi9zcGkvZGFyd2luL09TVmFyaWFudFNQSS5oPgogI2VuZGlmCiAKLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLSNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzTWFuYWdlci5oIgot
I2VuZGlmCi0KICNpZiBIQVZFKFNFQ19LRVlfUFJPWFkpCiAjaW5jbHVkZSAiU2VjS2V5UHJveHlT
dG9yZS5oIgogI2VuZGlmCkBAIC0zOTEsMjAgKzM4Nyw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6ZmV0Y2hEYXRhQW5kQXBwbHkoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVz
LCBPCiAgICAgICAgICAgICAgICAgcmVjb3JkLmFkZENvb2tpZUhvc3ROYW1lKGhvc3ROYW1lKTsK
ICAgICAgICAgICAgIH0KIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAg
ICAgICAgZm9yIChhdXRvJiBob3N0TmFtZSA6IHdlYnNpdGVEYXRhLmhvc3ROYW1lc1dpdGhQbHVn
aW5EYXRhKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBkaXNwbGF5TmFtZSA9IFdlYnNpdGVEYXRh
UmVjb3JkOjpkaXNwbGF5TmFtZUZvckhvc3ROYW1lKGhvc3ROYW1lKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIWRpc3BsYXlOYW1lKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICAgICAgICAgIGF1dG8mIHJlY29yZCA9IG1fd2Vic2l0ZURhdGFSZWNvcmRzLmFkZChkaXNw
bGF5TmFtZSwgV2Vic2l0ZURhdGFSZWNvcmQgeyB9KS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFyZWNvcmQuZGlzcGxheU5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHJl
Y29yZC5kaXNwbGF5TmFtZSA9IFdURk1vdmUoZGlzcGxheU5hbWUpOwotCi0gICAgICAgICAgICAg
ICAgcmVjb3JkLmFkZFBsdWdpbkRhdGFIb3N0TmFtZShob3N0TmFtZSk7Ci0gICAgICAgICAgICB9
Ci0jZW5kaWYKLQogICAgICAgICAgICAgZm9yIChhdXRvJiBob3N0TmFtZSA6IHdlYnNpdGVEYXRh
Lmhvc3ROYW1lc1dpdGhIU1RTQ2FjaGUpIHsKICAgICAgICAgICAgICAgICBhdXRvIGRpc3BsYXlO
YW1lID0gV2Vic2l0ZURhdGFSZWNvcmQ6OmRpc3BsYXlOYW1lRm9ySG9zdE5hbWUoaG9zdE5hbWUp
OwogICAgICAgICAgICAgICAgIGlmICghZGlzcGxheU5hbWUpCkBAIC01NDIsNTcgKzUyNCw2IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFdlYnNpdGVEYXRh
KFdURk1vdmUod2Vic2l0ZURhdGEpKTsKICAgICAgICAgfSk7CiAgICAgfQotCi0jaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRl
RGF0YVR5cGU6OlBsdWdJbkRhdGEpICYmIGlzUGVyc2lzdGVudCgpKSB7Ci0gICAgICAgIGNsYXNz
IFN0YXRlIHsKLSAgICAgICAgcHVibGljOgotICAgICAgICAgICAgc3RhdGljIHZvaWQgZmV0Y2hE
YXRhKFJlZjxDYWxsYmFja0FnZ3JlZ2F0b3I+JiYgY2FsbGJhY2tBZ2dyZWdhdG9yLCBWZWN0b3I8
UGx1Z2luTW9kdWxlSW5mbz4mJiBwbHVnaW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG5ldyBTdGF0ZShXVEZNb3ZlKGNhbGxiYWNrQWdncmVnYXRvciksIFdURk1vdmUocGx1Z2lu
cykpOwotICAgICAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICBTdGF0
ZShSZWY8Q2FsbGJhY2tBZ2dyZWdhdG9yPiYmIGNhbGxiYWNrQWdncmVnYXRvciwgVmVjdG9yPFBs
dWdpbk1vZHVsZUluZm8+JiYgcGx1Z2lucykKLSAgICAgICAgICAgICAgICA6IG1fY2FsbGJhY2tB
Z2dyZWdhdG9yKFdURk1vdmUoY2FsbGJhY2tBZ2dyZWdhdG9yKSkKLSAgICAgICAgICAgICAgICAs
IG1fcGx1Z2lucyhXVEZNb3ZlKHBsdWdpbnMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGZldGNoV2Vic2l0ZURhdGFGb3JOZXh0UGx1Z2luKCk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIH5TdGF0ZSgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KG1fcGx1Z2lucy5pc0VtcHR5KCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2b2lk
IGZldGNoV2Vic2l0ZURhdGFGb3JOZXh0UGx1Z2luKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBpZiAobV9wbHVnaW5zLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBX
ZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKLSAgICAgICAgICAgICAgICAgICAgd2Vic2l0ZURhdGEu
aG9zdE5hbWVzV2l0aFBsdWdpbkRhdGEgPSBXVEZNb3ZlKG1faG9zdE5hbWVzKTsKLQotICAgICAg
ICAgICAgICAgICAgICBtX2NhbGxiYWNrQWdncmVnYXRvci0+YWRkV2Vic2l0ZURhdGEoV1RGTW92
ZSh3ZWJzaXRlRGF0YSkpOwotCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgYXV0byBwbHVnaW4gPSBtX3BsdWdpbnMudGFrZUxhc3QoKTsKLSAgICAgICAgICAgICAg
ICBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuZmV0Y2hXZWJzaXRlRGF0YShwbHVn
aW4sIG1fY2FsbGJhY2tBZ2dyZWdhdG9yLT5mZXRjaE9wdGlvbnMoKSwgW3RoaXNdKFZlY3RvcjxT
dHJpbmc+IGhvc3ROYW1lcykgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGhvc3RO
YW1lIDogaG9zdE5hbWVzKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9ob3N0TmFtZXMuYWRk
KFdURk1vdmUoaG9zdE5hbWUpKTsKLSAgICAgICAgICAgICAgICAgICAgZmV0Y2hXZWJzaXRlRGF0
YUZvck5leHRQbHVnaW4oKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgUmVmPENhbGxiYWNrQWdncmVnYXRvcj4gbV9jYWxsYmFja0FnZ3JlZ2F0b3I7
Ci0gICAgICAgICAgICBWZWN0b3I8UGx1Z2luTW9kdWxlSW5mbz4gbV9wbHVnaW5zOwotICAgICAg
ICAgICAgSGFzaFNldDxTdHJpbmc+IG1faG9zdE5hbWVzOwotICAgICAgICB9OwotCi0gICAgICAg
IFN0YXRlOjpmZXRjaERhdGEoY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKSwgcGx1Z2lucygp
KTsKLSAgICB9Ci0jZW5kaWYKIH0KIAogI2lmIEVOQUJMRShJTlRFTExJR0VOVF9UUkFDS0lOR19Q
UkVWRU5USU9OKQpAQCAtNzYzLDUxICs2OTQsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJl
bW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQog
ICAgICAgICB9KTsKICAgICB9CiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAg
ICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UGx1Z0luRGF0YSkgJiYg
aXNQZXJzaXN0ZW50KCkpIHsKLSAgICAgICAgY2xhc3MgU3RhdGUgewotICAgICAgICBwdWJsaWM6
Ci0gICAgICAgICAgICBzdGF0aWMgdm9pZCBkZWxldGVEYXRhKFJlZjxSZW1vdmFsQ2FsbGJhY2tB
Z2dyZWdhdG9yPiYmIGNhbGxiYWNrQWdncmVnYXRvciwgVmVjdG9yPFBsdWdpbk1vZHVsZUluZm8+
JiYgcGx1Z2lucywgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBuZXcgU3RhdGUoV1RGTW92ZShjYWxsYmFja0FnZ3JlZ2F0b3IpLCBXVEZNb3Zl
KHBsdWdpbnMpLCBtb2RpZmllZFNpbmNlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICBwcml2
YXRlOgotICAgICAgICAgICAgU3RhdGUoUmVmPFJlbW92YWxDYWxsYmFja0FnZ3JlZ2F0b3I+JiYg
Y2FsbGJhY2tBZ2dyZWdhdG9yLCBWZWN0b3I8UGx1Z2luTW9kdWxlSW5mbz4mJiBwbHVnaW5zLCBX
YWxsVGltZSBtb2RpZmllZFNpbmNlKQotICAgICAgICAgICAgICAgIDogbV9jYWxsYmFja0FnZ3Jl
Z2F0b3IoV1RGTW92ZShjYWxsYmFja0FnZ3JlZ2F0b3IpKQotICAgICAgICAgICAgICAgICwgbV9w
bHVnaW5zKFdURk1vdmUocGx1Z2lucykpCi0gICAgICAgICAgICAgICAgLCBtX21vZGlmaWVkU2lu
Y2UobW9kaWZpZWRTaW5jZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkZWxldGVX
ZWJzaXRlRGF0YUZvck5leHRQbHVnaW4oKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
flN0YXRlKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9wbHVnaW5z
LmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZvaWQgZGVsZXRlV2Vi
c2l0ZURhdGFGb3JOZXh0UGx1Z2luKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBp
ZiAobV9wbHVnaW5zLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhp
czsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGF1dG8gcGx1Z2luID0gbV9wbHVnaW5zLnRha2VMYXN0KCk7Ci0gICAgICAg
ICAgICAgICAgUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLmRlbGV0ZVdlYnNpdGVE
YXRhKHBsdWdpbiwgbV9tb2RpZmllZFNpbmNlLCBbdGhpc10gewotICAgICAgICAgICAgICAgICAg
ICBkZWxldGVXZWJzaXRlRGF0YUZvck5leHRQbHVnaW4oKTsKLSAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgUmVmPFJlbW92YWxDYWxsYmFja0FnZ3JlZ2F0
b3I+IG1fY2FsbGJhY2tBZ2dyZWdhdG9yOwotICAgICAgICAgICAgVmVjdG9yPFBsdWdpbk1vZHVs
ZUluZm8+IG1fcGx1Z2luczsKLSAgICAgICAgICAgIFdhbGxUaW1lIG1fbW9kaWZpZWRTaW5jZTsK
LSAgICAgICAgfTsKLQotICAgICAgICBTdGF0ZTo6ZGVsZXRlRGF0YShjYWxsYmFja0FnZ3JlZ2F0
b3IuY29weVJlZigpLCBwbHVnaW5zKCksIG1vZGlmaWVkU2luY2UpOwotICAgIH0KLSNlbmRpZgot
CiAjaWYgRU5BQkxFKElOVEVMTElHRU5UX1RSQUNLSU5HX1BSRVZFTlRJT04pCiAgICAgaWYgKGRh
dGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3Mp
KSB7CiAgICAgICAgIGlmICghZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0ZVdlYnNpdGVE
YXRhKQpAQCAtOTQyLDU5ICs4MjgsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURh
dGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAg
ICAgICAgcmVtb3ZlTWVkaWFLZXlzKG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksIG9yaWdpbnMp
OwogICAgICAgICB9KTsKICAgICB9Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
LSAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UGx1Z0luRGF0YSkg
JiYgaXNQZXJzaXN0ZW50KCkpIHsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gaG9zdE5hbWVzOwot
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGRhdGFSZWNvcmQgOiBkYXRhUmVjb3JkcykgewotICAg
ICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBob3N0TmFtZSA6IGRhdGFSZWNvcmQucGx1Z2luRGF0
YUhvc3ROYW1lcykKLSAgICAgICAgICAgICAgICBob3N0TmFtZXMuYXBwZW5kKGhvc3ROYW1lKTsK
LSAgICAgICAgfQotCi0KLSAgICAgICAgY2xhc3MgU3RhdGUgewotICAgICAgICBwdWJsaWM6Ci0g
ICAgICAgICAgICBzdGF0aWMgdm9pZCBkZWxldGVEYXRhKFJlZjxSZW1vdmFsQ2FsbGJhY2tBZ2dy
ZWdhdG9yPiYmIGNhbGxiYWNrQWdncmVnYXRvciwgVmVjdG9yPFBsdWdpbk1vZHVsZUluZm8+JiYg
cGx1Z2lucywgVmVjdG9yPFN0cmluZz4mJiBob3N0TmFtZXMpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgbmV3IFN0YXRlKFdURk1vdmUoY2FsbGJhY2tBZ2dyZWdhdG9yKSwgV1RGTW92
ZShwbHVnaW5zKSwgV1RGTW92ZShob3N0TmFtZXMpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICBwcml2YXRlOgotICAgICAgICAgICAgU3RhdGUoUmVmPFJlbW92YWxDYWxsYmFja0FnZ3JlZ2F0
b3I+JiYgY2FsbGJhY2tBZ2dyZWdhdG9yLCBWZWN0b3I8UGx1Z2luTW9kdWxlSW5mbz4mJiBwbHVn
aW5zLCBWZWN0b3I8U3RyaW5nPiYmIGhvc3ROYW1lcykKLSAgICAgICAgICAgICAgICA6IG1fY2Fs
bGJhY2tBZ2dyZWdhdG9yKFdURk1vdmUoY2FsbGJhY2tBZ2dyZWdhdG9yKSkKLSAgICAgICAgICAg
ICAgICAsIG1fcGx1Z2lucyhXVEZNb3ZlKHBsdWdpbnMpKQotICAgICAgICAgICAgICAgICwgbV9o
b3N0TmFtZXMoV1RGTW92ZShob3N0TmFtZXMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGRlbGV0ZVdlYnNpdGVEYXRhRm9yTmV4dFBsdWdpbigpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICB+U3RhdGUoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEFTU0VS
VChtX3BsdWdpbnMuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdm9p
ZCBkZWxldGVXZWJzaXRlRGF0YUZvck5leHRQbHVnaW4oKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmIChtX3BsdWdpbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGRlbGV0ZSB0aGlzOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgYXV0byBwbHVnaW4gPSBtX3BsdWdpbnMudGFrZUxhc3Qo
KTsKLSAgICAgICAgICAgICAgICBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuZGVs
ZXRlV2Vic2l0ZURhdGFGb3JIb3N0TmFtZXMocGx1Z2luLCBtX2hvc3ROYW1lcywgW3RoaXNdIHsK
LSAgICAgICAgICAgICAgICAgICAgZGVsZXRlV2Vic2l0ZURhdGFGb3JOZXh0UGx1Z2luKCk7Ci0g
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJlZjxSZW1v
dmFsQ2FsbGJhY2tBZ2dyZWdhdG9yPiBtX2NhbGxiYWNrQWdncmVnYXRvcjsKLSAgICAgICAgICAg
IFZlY3RvcjxQbHVnaW5Nb2R1bGVJbmZvPiBtX3BsdWdpbnM7Ci0gICAgICAgICAgICBWZWN0b3I8
U3RyaW5nPiBtX2hvc3ROYW1lczsKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAoIWhvc3ROYW1l
cy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBTdGF0ZTo6ZGVsZXRlRGF0YShjYWxsYmFja0FnZ3Jl
Z2F0b3IuY29weVJlZigpLCBwbHVnaW5zKCksIFdURk1vdmUoaG9zdE5hbWVzKSk7Ci0gICAgfQot
I2VuZGlmCiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U2VydmljZVdvcmtlclRpbWVv
dXRGb3JUZXN0aW5nKFNlY29uZHMgc2Vjb25kcykKQEAgLTE2NjIsMjAgKzE0OTUsNiBAQCBIYXNo
U2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6OmVuc3VyZVByb2Nl
c3NQb29scygpIGNvbnN0CiAgICAgcmV0dXJuIHByb2Nlc3NQb29sczsKIH0KIAotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotVmVjdG9yPFBsdWdpbk1vZHVsZUluZm8+IFdlYnNpdGVE
YXRhU3RvcmU6OnBsdWdpbnMoKSBjb25zdAotewotICAgIFZlY3RvcjxQbHVnaW5Nb2R1bGVJbmZv
PiBwbHVnaW5zOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcGx1Z2luIDogcHJvY2Vzc1Bvb2wtPnBsdWdp
bkluZm9TdG9yZSgpLnBsdWdpbnMoKSkKLSAgICAgICAgICAgIHBsdWdpbnMuYXBwZW5kKHBsdWdp
bik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBsdWdpbnM7Ci19Ci0jZW5kaWYKLQogc3RhdGljIFN0
cmluZyBjb21wdXRlTWVkaWFLZXlGaWxlKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlEaXJlY3Rvcnkp
CiB7CiAgICAgcmV0dXJuIEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtZWRp
YUtleURpcmVjdG9yeSwgIlNlY3VyZVN0b3AucGxpc3QiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAppbmRleCA0MmVl
Njc2Y2NkYTRhYjE0YjVhNDI4OWVlMWE1NzFkMTJlZGM1ZmViLi4xNTA0NmJlNWI1ZTQwZmYxYjc4
NWVjNTRjYjRiNWU0MWMwYjVjNzBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC0xMDUsMTAgKzEwNSw2IEBA
IGVudW0gY2xhc3MgU3RvcmFnZUFjY2Vzc1N0YXR1cyA6IHVpbnQ4X3Q7CiBlbnVtIGNsYXNzIFN0
b3JhZ2VBY2Nlc3NQcm9tcHRTdGF0dXM7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQotc3RydWN0IFBsdWdpbk1vZHVsZUluZm87Ci0jZW5kaWYKLQogY2xhc3MgV2Vi
c2l0ZURhdGFTdG9yZSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6
OldlYnNpdGVEYXRhU3RvcmU+LCBwdWJsaWMgSWRlbnRpZmllZDxXZWJzaXRlRGF0YVN0b3JlPiwg
cHVibGljIENhbk1ha2VXZWFrUHRyPFdlYnNpdGVEYXRhU3RvcmU+ICB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxXZWJzaXRlRGF0YVN0b3JlPiBkZWZhdWx0RGF0YVN0b3JlKCk7CkBAIC0zOTks
MTAgKzM5NSw2IEBAIHByaXZhdGU6CiAgICAgLy8gV2lsbCBjcmVhdGUgYSB0ZW1wb3JhcnkgcHJv
Y2VzcyBwb29sIGlzIG5vbmUgZXhpc3RzIHlldC4KICAgICBIYXNoU2V0PFJlZlB0cjxXZWJQcm9j
ZXNzUG9vbD4+IGVuc3VyZVByb2Nlc3NQb29scygpIGNvbnN0OwogCi0jaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCi0gICAgVmVjdG9yPFBsdWdpbk1vZHVsZUluZm8+IHBsdWdpbnMoKSBj
b25zdDsKLSNlbmRpZgotCiAgICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bkRhdGE+IG1lZGlhS2V5T3JpZ2lucyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJl
Y3RvcnkpOwogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1l
ZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UpOwogICAgIHN0
YXRpYyB2b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VE
aXJlY3RvcnksIGNvbnN0IEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KaW5kZXgg
YjQ2M2M1NWViMTA5ZDRiNmQyYWRkMWU4ODQ4MTE1OGEzMGM3NWY1NC4uNDY3OWQ3YjA5ODFhYTdk
M2ZjZDliZGU5MGVkNmZmMmFjMjMyZWUxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCkBAIC03NjUsMTEgKzc2NSw2IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpwbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkKHVpbnQ2NF90LCBib29sKQog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzZXRQbHVnaW5D
b21wbGV4VGV4dElucHV0U3RhdGUodWludDY0X3QsIHVpbnQ2NF90KQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KIHZvaWQgV2ViUGFnZVByb3h5OjpleGVjdXRlU2F2ZWRDb21tYW5kQnlT
ZWxlY3Rvcihjb25zdCBTdHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oCmluZGV4IGQzN2MyOGZlYjFh
NTdlZGZiNGE4ZjRkODk4MzQyZDE5NmM3YTg4MDIuLjM4YTQzMDJhZjg4YTAxNTEzOWMyMmM4ODY4
MWU3OWY0NjczYTFkMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9Q
YWdlQ2xpZW50SW1wbE1hYy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdl
Q2xpZW50SW1wbE1hYy5oCkBAIC0xNzQsNyArMTc0LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFj
Y2Vzc2liaWxpdHlXZWJQcm9jZXNzVG9rZW5SZWNlaXZlZChjb25zdCBJUEM6OkRhdGFSZWZlcmVu
Y2UmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgcGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdl
ZCh1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgYm9vbCBwbHVnaW5I
YXNGb2N1c0FuZFdpbmRvd0hhc0ZvY3VzKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFBsdWdpbkNv
bXBsZXhUZXh0SW5wdXRTdGF0ZSh1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRp
ZmllciwgUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKSBvdmVycmlkZTsKIAogICAgIHZvaWQg
bWFrZUZpcnN0UmVzcG9uZGVyKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBhc3Npc3RpdmVUZWNobm9s
b2d5TWFrZUZpcnN0UmVzcG9uZGVyKCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0KaW5kZXggYWI3Mzk5NDg5OWM1NDdjZTE4
NGI5OTYxYWEyNTdjZTFiYTliZmNkNS4uZDQzM2E2ZGQyYjJmODRjNGQ5YjQxYjk4N2VkMzMxY2Nh
NTAxMDM5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGll
bnRJbXBsTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50
SW1wbE1hYy5tbQpAQCAtNjU5LDExICs2NTksNiBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpwbHVn
aW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SQog
ICAgIG1faW1wbC0+cGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZChwbHVnaW5IYXNGb2N1
c0FuZFdpbmRvd0hhc0ZvY3VzLCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcik7CiB9
CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OnNldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSh1
aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgUGx1Z2luQ29tcGxleFRl
eHRJbnB1dFN0YXRlIHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkKLXsKLSAgICBtX2ltcGwt
PnNldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZUFuZElkZW50aWZpZXIocGx1Z2luQ29tcGxl
eFRleHRJbnB1dFN0YXRlLCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcik7Ci19Ci0K
IHZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGNvbnN0IERp
Y3Rpb25hcnlQb3B1cEluZm8mIGRpY3Rpb25hcnlQb3B1cEluZm8pCiB7CiAgICAgbV9pbXBsLT5w
cmVwYXJlRm9yRGljdGlvbmFyeUxvb2t1cCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9XZWJQYWdlUHJveHlNYWMubW0KaW5kZXggOWMzMDg5ZmY3ZDY2YzkyMTIyMDEzMjlmYThm
YzEwY2ZiODU3NzBlNi4uNmQzMzM4NjllNGUwMDEyZDI3ZDNmZTg1ZDg1ZTUzYTRlZDk2OTYwYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCkBA
IC00MCw3ICs0MCw2IEBACiAjaW1wb3J0ICJQREZDb250ZXh0TWVudS5oIgogI2ltcG9ydCAiUGFn
ZUNsaWVudC5oIgogI2ltcG9ydCAiUGFnZUNsaWVudEltcGxNYWMuaCIKLSNpbXBvcnQgIlBsdWdp
bkNvbXBsZXhUZXh0SW5wdXRTdGF0ZS5oIgogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlSG9zdC5o
IgogI2ltcG9ydCAiU3RyaW5nVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXh0Q2hlY2tlci5oIgpA
QCAtMzY2LDEzICszNjUsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cGx1Z2luRm9jdXNPcldpbmRv
d0ZvY3VzQ2hhbmdlZCh1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucAogICAgIHBhZ2VDbGll
bnQoKS5wbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkKHBsdWdpbkNvbXBsZXhUZXh0SW5w
dXRJZGVudGlmaWVyLCBwbHVnaW5IYXNGb2N1c0FuZFdpbmRvd0hhc0ZvY3VzKTsKIH0KIAotdm9p
ZCBXZWJQYWdlUHJveHk6OnNldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSh1aW50NjRfdCBw
bHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgdWludDY0X3QgcGx1Z2luQ29tcGxleFRl
eHRJbnB1dFN0YXRlKQotewotICAgIE1FU1NBR0VfQ0hFQ0soaXNWYWxpZFBsdWdpbkNvbXBsZXhU
ZXh0SW5wdXRTdGF0ZShwbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUpKTsKLQotICAgIHBhZ2VD
bGllbnQoKS5zZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUocGx1Z2luQ29tcGxleFRleHRJ
bnB1dElkZW50aWZpZXIsIHN0YXRpY19jYXN0PFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZT4o
cGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKSk7Ci19Ci0KIHZvaWQgV2ViUGFnZVByb3h5Ojpl
eGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIE1F
U1NBR0VfQ0hFQ0soaXNWYWxpZEtleXByZXNzQ29tbWFuZE5hbWUoc2VsZWN0b3IpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDM4NmIw
OTVlMmQ0OTFjYjNjMDYyMGI0NjlkODllMjU1NTMyZjY3ZTIuLjRjOTBlNzExNDExOTVkM2U5NDhl
NzgzNmFjMmQ4YzBjNTI1ODJjNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTksNyArMTksNiBAQAogCQkJCTU3NDJBMkZBMjUzNTYx
OUQwMEI3QkExNCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCUJDQThENDY4MTVCQ0Uw
RDYwMDlEQzFGMSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTM3MkVCQjQ5MjAxN0U2
Q0YwMDA4NTA2NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAotCQkJCUJDODI4NDQ2MTZCNEZG
NjYwMEEyNzhGRSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCUJDODI4M0Q1MTZCNEMw
MUYwMEEyNzhGRSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTJEOUZCMjJDMjM3NTI0
NUMwMDQ5RjkzNiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJKTsKQEAgLTE3OCwxNiAr
MTc3LDYgQEAKIAkJMUEwMDJENDMxOTZCMzM3MDAwQjlBRDQ0IC8qIF9XS1Nlc3Npb25TdGF0ZUlu
dGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTAwMkQ0MjE5NkIzMzcwMDBCOUFENDQgLyogX1dLU2Vzc2lvblN0YXRlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJMUEwMDJENDQxOTZCMzM4OTAwQjlBRDQ0IC8qIF9XS1Nlc3Npb25TdGF0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwMDJEM0YxOTZCMzI5
NDAwQjlBRDQ0IC8qIF9XS1Nlc3Npb25TdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFBMDAyRDQ5MTk2QjM0NUQwMEI5QUQ0NCAvKiBTZXNz
aW9uU3RhdGVDb2RpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBMDAyRDQ3MTk2QjM0NUQwMEI5QUQ0NCAvKiBTZXNzaW9uU3RhdGVDb2RpbmcuaCAq
LzsgfTsKLQkJMUEwNDM5NzYxMjREMDM0ODAwRkZCRkI1IC8qIFBsdWdpblByb2Nlc3MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMDQzOTc0MTI0RDAz
NDgwMEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNzLmggKi87IH07Ci0JCTFBMDQzOTc3MTI0RDAzNDgw
MEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBMDQzOTc1MTI0RDAzNDgwMEZGQkZCNSAvKiBQbHVnaW5Qcm9j
ZXNzLmNwcCAqLzsgfTsKLQkJMUEwNDNBMDkxMjREMTFBOTAwRkZCRkI1IC8qIFdlYlByb2Nlc3ND
b25uZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQTA0M0EwNzEyNEQxMUE5MDBGRkJGQjUgLyogV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uaCAqLzsg
fTsKLQkJMUEwNDNBMEExMjREMTFBOTAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMDQzQTA4
MTI0RDExQTkwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbi5jcHAgKi87IH07Ci0JCTFB
MDQzQjVEMTI0RDVFOUQwMEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEw
NDNCNUIxMjRENUU5RDAwRkZCRkI1IC8qIFBsdWdpblByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi87IH07Ci0JCTFBMDQzQjVFMTI0RDVFOUQwMEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNz
UHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUEwNDNCNUMxMjRENUU5RDAwRkZCRkI1IC8qIFBsdWdpblByb2Nlc3NQcm94eU1lc3Nh
Z2VzLmggKi87IH07Ci0JCTFBMDQzQ0VCMTI0RkUzOEYwMEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNz
TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBMEVDNkJEMTI0QkJEOUIwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzTWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLzsgfTsKLQkJMUEwNDNEQzExMjRGRjg3NTAwRkZCRkI1IC8qIFBsdWdp
blByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTA0M0RCRjEyNEZGODc1MDBGRkJGQjUgLyogUGx1Z2luUHJveHkuaCAqLzsgfTsKLQkJMUEwNDNG
NjkxMjUxNEQ4QjAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMDQz
RjY3MTI1MTREOEIwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi87IH07Ci0JCTFBMDQzRjZBMTI1MTREOEIwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29u
bmVjdGlvbk1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTA0M0Y2ODEyNTE0RDhCMDBGRkJGQjUgLyogV2ViUHJvY2Vzc0Nvbm5lY3Rpb25N
ZXNzYWdlcy5oICovOyB9OwogCQkxQTA3RDJGODE5MTlCM0E5MDBFQ0RBMTYgLyogX19pbml0X18u
cHkgaW4gQ29weSBNZXNzYWdlIEdlbmVyYXRpb24gU2NyaXB0cyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkMwODU2RTE4N0NFMEE5MDA3ODBEODYgLyogX19pbml0X18ucHkg
Ki87IH07CiAJCTFBMDdEMkY5MTkxOUIzQTkwMEVDREExNiAvKiBtZXNzYWdlcy5weSBpbiBDb3B5
IE1lc3NhZ2UgR2VuZXJhdGlvbiBTY3JpcHRzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQzA4NTZGMTg3Q0UwQTkwMDc4MEQ4NiAvKiBtZXNzYWdlcy5weSAqLzsgfTsKIAkJ
MUEwN0QyRkExOTE5QjNBOTAwRUNEQTE2IC8qIG1vZGVsLnB5IGluIENvcHkgTWVzc2FnZSBHZW5l
cmF0aW9uIFNjcmlwdHMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDg1
NzAxODdDRTBBOTAwNzgwRDg2IC8qIG1vZGVsLnB5ICovOyB9OwpAQCAtMTk1LDE2ICsxODQsOSBA
QAogCQkxQTBDMjI1RTI0MzU3NUNEMDBFRDYxNEQgLyogUXVpY2tMb29rVGh1bWJuYWlsTG9hZGVy
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFFRTU3
MjQyNDA5RjE0MjAwMjAwNUQ2IC8qIFF1aWNrTG9va1RodW1ibmFpbExvYWRlci5tbSAqLzsgfTsK
IAkJMUEwQzIyN0UyNDUxMTMwQTAwRUQ2MTREIC8qIFF1aWNrTG9va1RodW1ibmFpbGluZ1NvZnRM
aW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTBD
MjI3QzI0NTExMzBBMDBFRDYxNEQgLyogUXVpY2tMb29rVGh1bWJuYWlsaW5nU29mdExpbmsuaCAq
LzsgfTsKIAkJMUEwQzIyN0YyNDUxMTMwQTAwRUQ2MTREIC8qIFF1aWNrTG9va1RodW1ibmFpbGlu
Z1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUEwQzIyN0QyNDUxMTMwQTAwRUQ2MTREIC8qIFF1aWNrTG9va1RodW1ibmFpbGluZ1NvZnRM
aW5rLm1tICovOyB9OwotCQkxQTBFQzYwMzEyNEE5RjJDMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vz
c01hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBMEVDNjAxMTI0QTlGMkMwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzTWFuYWdlci5oICovOyB9
OwotCQkxQTBFQzZDMDEyNEJCRDlCMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc01lc3NhZ2VzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTBFQzZCRTEy
NEJCRDlCMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc01lc3NhZ2VzLmggKi87IH07Ci0JCTFBMEVD
NzVFMTI0QkM3QjIwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzUHJveHkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMEVDNzVDMTI0QkM3QjIwMDdFRjRB
NSAvKiBQbHVnaW5Qcm9jZXNzUHJveHkuaCAqLzsgfTsKLQkJMUEwRUM5MDYxMjRDMEFCODAwN0VG
NEE1IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTBFQzkwNDEyNEMwQUI4MDA3RUY0QTUgLyogUGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb24uaCAqLzsgfTsKLQkJMUEwRUM5MEYxMjRDMEFGNTAwN0VGNEE1IC8q
IFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwRUM5MEQxMjRDMEFGNTAwN0VGNEE1IC8qIFBsdWdp
blByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5oICovOyB9OwogCQkxQTBGMjlFNDEyMEI0NDQyMDA1
M0QxQjkgLyogVmlzaXRlZExpbmtTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUEwRjI5RTIxMjBCNDQ0MjAwNTNEMUI5IC8qIFZpc2l0ZWRMaW5r
U3RvcmUuaCAqLzsgfTsKIAkJMUExNEY4RTIxRDc0QzgzNDAwNkNCRUM2IC8qIEZyYW1lSW5mb0Rh
dGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMTRG
OEUwMUQ3NEM4MzQwMDZDQkVDNiAvKiBGcmFtZUluZm9EYXRhLmggKi87IH07CiAJCTFBMTU4NDFB
MTg5MDQ0RjUwMDE3NjE2QyAvKiBXS1Byb2Nlc3NQb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTE1ODQxODE4OTA0NEY1MDAxNzYxNkMgLyogV0tQ
cm9jZXNzUG9vbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsg
fTsKLQkJMUExNzk3N0YxMzdFRTgyQzAwRjk3RDQ1IC8qIFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVy
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTE3
OTc3RDEzN0VFODJDMDBGOTdENDUgLyogUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCAqLzsg
fTsKLQkJMUExNzk3ODAxMzdFRTgyQzAwRjk3RDQ1IC8qIFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVy
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUExNzk3
N0UxMzdFRTgyQzAwRjk3RDQ1IC8qIFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5oICovOyB9Owog
CQkxQTFCMEVCNjE4QTQyNDk1MDAzODQ4MUEgLyogV0tOYXZpZ2F0aW9uUmVzcG9uc2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMUIwRUI0MThBNDI0
OTUwMDM4NDgxQSAvKiBXS05hdmlnYXRpb25SZXNwb25zZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJMUExQjBFQjgxOEE0MjRDRDAwMzg0ODFBIC8q
IFdLTmF2aWdhdGlvblJlc3BvbnNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMUIwRUI3MThBNDI0Q0QwMDM4NDgxQSAvKiBXS05hdmln
YXRpb25SZXNwb25zZUludGVybmFsLmggKi87IH07CiAJCTFBMURDMzQwMTk2MzQ2RDcwMEZGNzA1
OSAvKiBMZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNjA3RjM4MTk2MjcwMDIwMDlCODdEQSAvKiBMZWdhY3lT
ZXNzaW9uU3RhdGVDb2RpbmcuaCAqLzsgfTsKQEAgLTIxMiwyNCArMTk0LDExIEBACiAJCTFBMUVD
NjlFMTg3MjA5MjEwMEI5NTFGMCAvKiBJbXBvcnRhbmNlQXNzZXJ0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTFFQzY5RDE4NzIwOTIxMDBCOTUx
RjAgLyogSW1wb3J0YW5jZUFzc2VydGlvbi5oICovOyB9OwogCQkxQTFGRUMxQzE2MjdCNDU3MDA3
MDBGNkQgLyogV2ViQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTFGRUMxQTE2MjdCNDU2MDA3MDBGNkQg
LyogV2ViQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTFBMUZFQzFEMTYy
N0I0NTcwMDcwMEY2RCAvKiBXZWJDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMUZFQzFCMTYyN0I0NTcwMDcwMEY2RCAv
KiBXZWJDb25uZWN0aW9uTWVzc2FnZXMuaCAqLzsgfTsKLQkJMUEyMTYxQjAxMUYzNzY2NDAwOEFE
MEY1IC8qIE5QUnVudGltZU9iamVjdE1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUEyMTYxQUUxMUYzNzY2NDAwOEFEMEY1IC8qIE5QUnVudGltZU9i
amVjdE1hcC5oICovOyB9OwotCQkxQTIxNjJCMTExRjM4OTcxMDA4QUQwRjUgLyogTlBSdW50aW1l
VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQTIxNjJBRjExRjM4OTcxMDA4QUQwRjUgLyogTlBSdW50aW1lVXRpbGl0aWVzLmggKi87IH07
CiAJCTFBMjQ2NEYzMTg5MUU0NTEwMDIzNEM1QiAvKiBBUElMb2FkZXJDbGllbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMjQ2NEYyMTg5MUU0NTEw
MDIzNEM1QiAvKiBBUElMb2FkZXJDbGllbnQuaCAqLzsgfTsKIAkJMUEyNEI1RjMxMUY1MzFFODAw
QzM4MjY5IC8qIE1hY2hVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBMjRCNUYxMTFGNTMxRTgwMEMzODI2OSAvKiBNYWNoVXRpbGl0aWVz
LmggKi87IH07CiAJCTFBMjRCRUQ1MTIwODk0RDEwMEZCQjA1OSAvKiBTaGFyZWRNZW1vcnkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMjRCRUQzMTIw
ODk0RDEwMEZCQjA1OSAvKiBTaGFyZWRNZW1vcnkuaCAqLzsgfTsKIAkJMUEyNTZFMzgxOEExQTc4
ODAwNkZCOTIyIC8qIFdLTmF2aWdhdGlvbkFjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyNTZFMzYxOEExQTc4ODAwNkZCOTIyIC8qIFdLTmF2
aWdhdGlvbkFjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsg
fTsgfTsKIAkJMUEyNTZFM0ExOEExQTdERjAwNkZCOTIyIC8qIFdLTmF2aWdhdGlvbkFjdGlvbklu
dGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTI1NkUzOTE4QTFBN0RGMDA2RkI5MjIgLyogV0tOYXZpZ2F0aW9uQWN0aW9uSW50ZXJuYWwuaCAq
LzsgfTsKLQkJMUEyQkI2RDAxNDExN0I0RDAwMEYzNUQ0IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0
aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBMkJCNkNFMTQxMTdCNEQwMDBGMzVENCAvKiBQbHVnaW5Qcm9jZXNzQ29u
bmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07Ci0JCTFBMkJCNkQxMTQxMTdCNEQwMDBG
MzVENCAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTJCQjZDRjE0MTE3QjREMDAwRjM1RDQg
LyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oICovOyB9OwotCQkxQTJEODJBNTEy
N0Y0RUFCMDAxRUI5NjIgLyogTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMUZBMzVCMTI3QTQ1QkYwMDUwRTcw
OSAvKiBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5oICovOyB9OwotCQkxQTJEODJBNzEyN0Y0RUFC
MDAxRUI5NjIgLyogTlBPYmplY3RQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUExRkEyODMxMjdBMTNCQzAwNTBFNzA5IC8qIE5QT2JqZWN0UHJv
eHkuaCAqLzsgfTsKLQkJMUEyRDgyQTkxMjdGNEVBQjAwMUVCOTYyIC8qIE5QUmVtb3RlT2JqZWN0
TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTFG
QTI1MTEyN0EwRTRGMDA1MEU3MDkgLyogTlBSZW1vdGVPYmplY3RNYXAuaCAqLzsgfTsKLQkJMUEy
RDg0MzkxMjdGNjVENTAwMUVCOTYyIC8qIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyTWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBMkQ4NDM3MTI3RjY1RDUwMDFFQjk2MiAvKiBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlck1lc3Nh
Z2VSZWNlaXZlci5jcHAgKi87IH07Ci0JCTFBMkQ4NDNBMTI3RjY1RDUwMDFFQjk2MiAvKiBOUE9i
amVjdE1lc3NhZ2VSZWNlaXZlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTJEODQzODEyN0Y2NUQ1MDAxRUI5NjIgLyogTlBPYmplY3RN
ZXNzYWdlUmVjZWl2ZXJNZXNzYWdlcy5oICovOyB9OwotCQkxQTJEODQ4QjEyN0Y2QTQ5MDAxRUI5
NjIgLyogTlBJZGVudGlmaWVyRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUEyRDg0ODkxMjdGNkE0OTAwMUVCOTYyIC8qIE5QSWRlbnRpZmllckRh
dGEuaCAqLzsgfTsKLQkJMUEyRDg0QTMxMjdGNkFEMTAwMUVCOTYyIC8qIE5QVmFyaWFudERhdGEu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMkQ4NEEx
MTI3RjZBRDEwMDFFQjk2MiAvKiBOUFZhcmlhbnREYXRhLmggKi87IH07Ci0JCTFBMkQ5MEQyMTI4
MUM5NjYwMDFFQjk2MiAvKiBQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTJEOTBEMDEyODFDOTY2
MDAxRUI5NjIgLyogUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oICovOyB9OwotCQkx
QTJEOTFBNjEyODFENzM5MDAxRUI5NjIgLyogUGx1Z2luQ29udHJvbGxlclByb3h5TWFjLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyRDkxQTUxMjgx
RDczOTAwMUVCOTYyIC8qIFBsdWdpbkNvbnRyb2xsZXJQcm94eU1hYy5tbSAqLzsgfTsKIAkJMUEy
RDk1NkYxMjg0ODU2NDAwMUVCOTYyIC8qIEF1eGlsaWFyeVByb2Nlc3MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMkQ5NTZEMTI4NDg1NjQwMDFFQjk2
MiAvKiBBdXhpbGlhcnlQcm9jZXNzLmggKi87IH07CiAJCTFBMzAwNjZFMTExMEY0RjcwMDMxOTM3
QyAvKiBSZXNwb25zaXZlbmVzc1RpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQTMwMDY2QzExMTBGNEY3MDAzMTkzN0MgLyogUmVzcG9uc2l2ZW5l
c3NUaW1lci5oICovOyB9OwogCQkxQTMzNERFRDE2REU4Rjg4MDA2QThFMzggLyogU3RvcmFnZUFy
ZWFNYXBNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUEzMzRERUIxNkRFOEY4ODAwNkE4RTM4IC8qIFN0b3JhZ2VBcmVhTWFw
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKQEAgLTIzNyw3ICsyMDYsNiBAQAogCQkxQTNDODg4
MDE4QTVBQkFFMDBDNEM5NjIgLyogV0tQcmVmZXJlbmNlc0ludGVybmFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTNDODg3RjE4QTVBQkFFMDBDNEM5
NjIgLyogV0tQcmVmZXJlbmNlc0ludGVybmFsLmggKi87IH07CiAJCTFBM0NDMTY3MTg5MDZBQ0Yw
MDFFNkVEOCAvKiBXS1dlYlZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBM0NDMTY1MTg5MDZBQ0YwMDFFNkVEOCAvKiBXS1dlYlZpZXcuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJCTFBM0NDMTY5MTg5
MDdFQjAwMDFFNkVEOCAvKiBXS1Byb2Nlc3NQb29sSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBM0NDMTY4MTg5MDdFQjAwMDFFNkVEOCAv
KiBXS1Byb2Nlc3NQb29sSW50ZXJuYWwuaCAqLzsgfTsKLQkJMUEzRDYxMDIxM0E3Q0MyQTAwRjk1
RDRFIC8qIFBsdWdpbk1vZHVsZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBM0Q2MTAwMTNBN0NDMkEwMEY5NUQ0RSAvKiBQbHVnaW5Nb2R1bGVJ
bmZvLmggKi87IH07CiAJCTFBM0REMjA2MTI1RTVBMkYwMDQ1MTVFNiAvKiBBUElDbGllbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBM0REMjA1MTI1
RTVBMkYwMDQ1MTVFNiAvKiBBUElDbGllbnQuaCAqLzsgfTsKIAkJMUEzRTczNjExMUNDMjY1OTAw
N0JENTM5IC8qIFdlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEzRTczNUYxMUNDMjY1OTAwN0JENTM5IC8qIFdlYlBs
YXRmb3JtU3RyYXRlZ2llcy5oICovOyB9OwogCQkxQTNFRUQwRjE2MUE1MzU0MDBBRUI0RjUgLyog
TWVzc2FnZVJlY2VpdmVyTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQTNFRUQwRDE2MUE1MzUzMDBBRUI0RjUgLyogTWVzc2FnZVJlY2VpdmVyTWFw
LmggKi87IH07CkBAIC0yNTIsOCArMjIwLDYgQEAKIAkJMUE0ODMyRDExQTlCREMyRjAwOEI0REZF
IC8qIFdlYnNpdGVEYXRhUmVjb3JkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQTQ4MzJDRjFBOUJEODIxMDA4QjRERkUgLyogV2Vic2l0ZURhdGFSZWNv
cmQuaCAqLzsgfTsKIAkJMUE0ODMyRDcxQTlDREY5NjAwOEI0REZFIC8qIFdlYnNpdGVEYXRhLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTQ4MzJENTFB
OUNERjk2MDA4QjRERkUgLyogV2Vic2l0ZURhdGEuaCAqLzsgfTsKIAkJMUE0QTkzQjcxQUVCMDhF
QTAwMTUwRTlDIC8qIF9XS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE0QTkzQjYxQUVCMDhFQTAwMTUwRTlD
IC8qIF9XS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oICovOyB9OwotCQkxQTRBOUM1NjEyQjgx
NkNGMDA4RkU5ODQgLyogTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNEE5QzU0MTJCODE2Q0YwMDhGRTk4NCAvKiBO
ZXRzY2FwZVBsdWdpbk1vZHVsZS5oICovOyB9OwotCQkxQTRBOUYzMzEyQjg0NEUyMDA4RkU5ODQg
LyogUGx1Z2luUXVpcmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTRBOUYzMTEyQjg0NEUyMDA4RkU5ODQgLyogUGx1Z2luUXVpcmtzLmggKi87IH07
CiAJCTFBNEQ2NjQ4MThBMkQ5MUEwMEQ4MkUyMSAvKiBBUElVSUNsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE0RDY2NDcxOEEyRDkxQTAwRDgy
RTIxIC8qIEFQSVVJQ2xpZW50LmggKi87IH07CiAJCTFBNEQ2NjRDMThBMzAzMEUwMEQ4MkUyMSAv
KiBXS0ZyYW1lSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUE0RDY2NEExOEEzMDMwRTAwRDgyRTIxIC8qIFdLRnJhbWVJbmZvLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQkxQTUyQzBGODFBMzhDREM3
MDAxNjE2MEEgLyogV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTUyQzBGNjFBMzhDREM3MDAxNjE2MEEg
LyogV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmggKi87IH07CkBAIC0yODQsMTAgKzI1MCw2
IEBACiAJCTFBNkZBMjFFMUJEMDQzNUIwMEFBQTY1MCAvKiBXS0ZyYW1lSW5mb1ByaXZhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNkZBMjFEMUJE
MDQzNUIwMEFBQTY1MCAvKiBXS0ZyYW1lSW5mb1ByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQTZGQjdBRjExRTY0QjY4MDBEQjEzNzEg
LyogUGx1Z2luVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUE2RkI3QUQxMUU2NEI2ODAwREIxMzcxIC8qIFBsdWdpblZpZXcuaCAqLzsgfTsKIAkJ
MUE2RkI3RDMxMUU2NTFFMjAwREIxMzcxIC8qIFBsdWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE2RkI3RDExMUU2NTFFMjAwREIxMzcxIC8qIFBs
dWdpbi5oICovOyB9OwotCQkxQTZGQkEyQTExRTY4NjI3MDBEQjEzNzEgLyogTmV0c2NhcGVCcm93
c2VyRnVuY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBNkZCQTI4MTFFNjg2MjcwMERCMTM3MSAvKiBOZXRzY2FwZUJyb3dzZXJGdW5jcy5oICovOyB9
OwotCQkxQTZGQkQyODExRTY5QkMyMDBEQjEzNzEgLyogTmV0c2NhcGVQbHVnaW4uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNkZCRDI2MTFFNjlCQzIw
MERCMTM3MSAvKiBOZXRzY2FwZVBsdWdpbi5oICovOyB9OwotCQkxQTc4NjVCOTE2Q0FDNzE1MDBB
Q0U4M0EgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzg2NUI3
MTZDQUM3MTUwMEFDRTgzQSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXJNZXNzYWdl
UmVjZWl2ZXIuY3BwICovOyB9OwotCQkxQTc4NjVCQTE2Q0FDNzE1MDBBQ0U4M0EgLyogUGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzg2NUI4MTZDQUM3MTUwMEFDRTgzQSAvKiBQbHVn
aW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXJNZXNzYWdlcy5oICovOyB9OwogCQkxQTdDMERGNzFC
N0QxRjEwMDBBOUI4NDggLyogV0tXaW5kb3dGZWF0dXJlc1JlZi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3QzBERjUxQjdEMUYxMDAwQTlCODQ4IC8q
IFdLV2luZG93RmVhdHVyZXNSZWYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxQTdFMzc3NTE4RTRBMzNBMDAzRDBGRkYgLyogV0tTY3JpcHRNZXNz
YWdlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUE3RTM3NzQxOEU0QTMzQTAwM0QwRkZGIC8qIFdLU2NyaXB0TWVzc2FnZUhhbmRsZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJCTFBN0UzNzc5
MThFNEE0RkUwMDNEMEZGRiAvKiBXS1NjcmlwdE1lc3NhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBN0UzNzc3MThFNEE0RkUwMDNEMEZGRiAvKiBX
S1NjcmlwdE1lc3NhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7
IH07IH07CkBAIC0yOTgsMTIgKzI2MCw2IEBACiAJCTFBOEI2NkI0MUJDNDVCMDEwMDgyREY3NyAv
KiBXS0J1bmRsZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUE4QjY2QjIxQkM0NUIwMTAwODJERjc3IC8qIFdLQnVuZGxlTWFjLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUE4RTdEM0MxOEMxNTE0
OTAwNUE3MDJBIC8qIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOEU3RDNB
MThDMTUxNDkwMDVBNzAyQSAvKiBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlck1lc3NhZ2VSZWNl
aXZlci5jcHAgKi87IH07CiAJCTFBOEU3RDNEMThDMTUxNDkwMDVBNzAyQSAvKiBWaXNpdGVkTGlu
a1RhYmxlQ29udHJvbGxlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQThFN0QzQjE4QzE1MTQ5MDA1QTcwMkEgLyogVmlzaXRlZExpbmtU
YWJsZUNvbnRyb2xsZXJNZXNzYWdlcy5oICovOyB9OwotCQkxQThFRjRDQjEyNTI0MDM3MDBGNzA2
N0YgLyogUGx1Z2luQ29udHJvbGxlclByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQThFRjRDOTEyNTI0MDM3MDBGNzA2N0YgLyogUGx1Z2luQ29u
dHJvbGxlclByb3h5LmggKi87IH07Ci0JCTFBOEVGNENDMTI1MjQwMzcwMEY3MDY3RiAvKiBQbHVn
aW5Db250cm9sbGVyUHJveHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUE4RUY0Q0ExMjUyNDAzNzAwRjcwNjdGIC8qIFBsdWdpbkNvbnRyb2xsZXJQ
cm94eS5jcHAgKi87IH07Ci0JCTFBOEVGOTZFMTI1MkFGNkIwMEY3MDY3RiAvKiBQbHVnaW5Db250
cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUE4RUY5NkMxMjUyQUY2QjAwRjcwNjdGIC8qIFBsdWdpbkNv
bnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07Ci0JCTFBOEVGOTZGMTI1MkFG
NkIwMEY3MDY3RiAvKiBQbHVnaW5Db250cm9sbGVyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE4RUY5NkQxMjUyQUY2QjAwRjcw
NjdGIC8qIFBsdWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmggKi87IH07Ci0JCTFBOEVGQTcw
MTI1MkI4NDEwMEY3MDY3RiAvKiBQbHVnaW5Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQThFRkE2RTEyNTJCODQx
MDBGNzA2N0YgLyogUGx1Z2luUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwotCQkxQThF
RkE3MTEyNTJCODQxMDBGNzA2N0YgLyogUGx1Z2luUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE4RUZBNkYxMjUyQjg0MTAwRjcw
NjdGIC8qIFBsdWdpblByb3h5TWVzc2FnZXMuaCAqLzsgfTsKIAkJMUE5MEMxRUUxMjY0RkQ1MDAw
M0U0NEQ0IC8qIFdlYkZpbmRPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQTkwQzFFRDEyNjRGRDUwMDAzRTQ0RDQgLyogV2ViRmluZE9wdGlv
bnMuaCAqLzsgfTsKIAkJMUE5MEMxRjQxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkwQzFG
MjEyNjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCAqLzsgfTsKIAkJMUE5MkRDMTEx
MkY4QkE0NjAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTJEQzEwMTJGOEJBNDYwMDE3QUY2NSAvKiBM
YXllclRyZWVDb250ZXh0LmggKi87IH07CkBAIC0zMTIsMTggKzI2OCwxNSBAQAogCQkxQTlFMzI5
QjE4MjJFMUNDMDBGNUQwNEMgLyogV0tSZW1vdGVPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOUUzMjk5MTgyMkUxQ0MwMEY1RDA0QyAvKiBX
S1JlbW90ZU9iamVjdC5oICovOyB9OwogCQkxQTlFMzI5RjE4MjJGRUREMDBGNUQwNEMgLyogV0tS
ZW1vdGVPYmplY3RDb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUE5RTMyOUQxODIyRkVERDAwRjVEMDRDIC8qIFdLUmVtb3RlT2JqZWN0Q29kZXIu
aCAqLzsgfTsKIAkJMUE5RTMyQTExODIzMDE4OTAwRjVEMDRDIC8qIF9XS1JlbW90ZU9iamVjdFJl
Z2lzdHJ5SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBOUUzMkEwMTgyMzAxODkwMEY1RDA0QyAvKiBfV0tSZW1vdGVPYmplY3RSZWdpc3Ry
eUludGVybmFsLmggKi87IH07Ci0JCTFBOUZCQThEMTNGRjA0RTYwMERFRUQ2NyAvKiBQbHVnaW5D
b21wbGV4VGV4dElucHV0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBOUZCQThDMTNGRjA0RTYwMERFRUQ2NyAvKiBQbHVnaW5Db21wbGV4VGV4
dElucHV0U3RhdGUuaCAqLzsgfTsKIAkJMUFBMTMyMTIxOTFENTkyNDAwOUMxNDg5IC8qIFdLTmF2
aWdhdGlvblJlc3BvbnNlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUFBMTMyMTExOTFENTkyNDAwOUMxNDg5IC8qIFdLTmF2aWdhdGlvblJl
c3BvbnNlUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTFBQTIwRDUxMThBRDUwRTAwMDVEMUVENCAvKiBXS05hdmlnYXRpb25EZWxlZ2F0
ZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBQTIwRDUwMThBRDUwRTAwMDVEMUVENCAvKiBXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQUEy
RTU2NzE4RDc3NTA4MDAzODE0QkQgLyogV0tXZWJQcm9jZXNzQnVuZGxlUGFyYW1ldGVycy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBMkU1NjUxOEQ3
NzUwODAwMzgxNEJEIC8qIFdLV2ViUHJvY2Vzc0J1bmRsZVBhcmFtZXRlcnMuaCAqLzsgfTsKIAkJ
MUFBM0Q3NUMxNjUxQjQ0RjAwODcxM0QwIC8qIFJlbW90ZUxheWVyVHJlZUhvc3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTNENzVBMTY1MUI0NEYw
MDg3MTNEMCAvKiBSZW1vdGVMYXllclRyZWVIb3N0LmggKi87IH07CiAJCTFBQTQxN0NCMTJDMDBD
Q0EwMDJCRTY3QiAvKiBUZXh0Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUFBNDE3QzkxMkMwMENDQTAwMkJFNjdCIC8qIFRleHRDaGVja2Vy
LmggKi87IH07CiAJCTFBQTQxQUI1MTJDMDJFQzQwMDJCRTY3QiAvKiBFZGl0b3JTdGF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBNDFBQjQxMkMw
MkVDNDAwMkJFNjdCIC8qIEVkaXRvclN0YXRlLmggKi87IH07Ci0JCTFBQTQ3OTIzMTJBNTlGRDkw
MDgyMzZDMyAvKiBQbHVnaW5Qcm9jZXNzTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBNDc5MjIxMkE1OUZEOTAwODIzNkMzIC8qIFBsdWdpblBy
b2Nlc3NNYWMubW0gKi87IH07CiAJCTFBQTU2RjI5MTFFOTJCQzgwMDYxQjg4MiAvKiBQbHVnaW5D
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQUE1NkYyODExRTkyQkM4MDA2MUI4ODIgLyogUGx1Z2luQ29udHJvbGxlci5oICovOyB9Owog
CQkxQUE1NzVGQjE0OTZCNTI2MDBBNEVFMDYgLyogRXZlbnREaXNwYXRjaGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE1NzVGOTE0OTZCNTI2MDBB
NEVFMDYgLyogRXZlbnREaXNwYXRjaGVyLmggKi87IH07CiAJCTFBQTU3NjAyMTQ5NkI5NzkwMEE0
RUUwNiAvKiBFdmVudERpc3BhdGNoZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBNTc1RkYxNDk2QjdDMDAwQTRFRTA2
IC8qIEV2ZW50RGlzcGF0Y2hlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07Ci0JCTFBQTU4ODky
MTFFRTcwNDAwMDYxQjg4MiAvKiBOZXRzY2FwZVBsdWdpblN0cmVhbS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBNTg4OTAxMUVFNzA0MDAwNjFCODgy
IC8qIE5ldHNjYXBlUGx1Z2luU3RyZWFtLmggKi87IH07CiAJCTFBQTY1NEQxMUIxNEY3MTQwMEJG
MUQzRSAvKiBXS1dlYnNpdGVEYXRhUmVjb3JkUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBNjU0RDAxQjE0RjcxNDAwQkYxRDNFIC8qIFdL
V2Vic2l0ZURhdGFSZWNvcmRQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUFBODNGNkQxQTVCNjNGRjAwMDI2RUM2IC8qIFdlYkRhdGFi
YXNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBQTgzRjZCMUE1QjYzRkYwMDAyNkVDNiAvKiBXZWJEYXRhYmFzZVByb3ZpZGVyLmggKi87
IH07CiAJCTFBQUIwMzdBMTg1QTdDNkEwMEVERjUwMSAvKiBNZXNzYWdlU2VuZGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUFCMDM3ODE4NUE3QzZB
MDBFREY1MDEgLyogTWVzc2FnZVNlbmRlci5oICovOyB9OwpAQCAtMzc2LDkgKzMyOSw3IEBACiAJ
CTFBQzEzMzg1MTg1OTBDNDYwMEYzRUMwNSAvKiBSZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VS
ZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQUMxMzM4MzE4NTkwQzQ2MDBGM0VDMDUgLyogUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdl
UmVjZWl2ZXIuY3BwICovOyB9OwogCQkxQUMxMzM4NjE4NTkwQzQ2MDBGM0VDMDUgLyogUmVtb3Rl
T2JqZWN0UmVnaXN0cnlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUFDMTMzODQxODU5MEM0NjAwRjNFQzA1IC8qIFJlbW90ZU9iamVjdFJl
Z2lzdHJ5TWVzc2FnZXMuaCAqLzsgfTsKIAkJMUFDMTQxNTExOEFDNDdFRTAwNkM2MDJDIC8qIFdL
V2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQUMxNDE1MDE4QUM0N0VFMDA2QzYwMkMgLyogV0tXZWJWaWV3
Q29uZmlndXJhdGlvblByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQkxQUMyNUZDMjEyQTQ4RjYwMDBCRDI2NzEgLyogUGx1Z2luUHJvY2Vz
c1NoaW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QUMyNUY4QTEyQTQ4RTAzMDBCRDI2NzEgLyogUGx1Z2luUHJvY2Vzc1NoaW0ubW0gKi87IH07CiAJ
CTFBQzRDODI5MTZCODc2QTkwMDY5RENDRCAvKiBNZXNzYWdlRmxhZ3MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQzRDODI4MTZCODc2QTkwMDY5REND
RCAvKiBNZXNzYWdlRmxhZ3MuaCAqLzsgfTsKLQkJMUFDNUZGQzIxNzRCRkQxQjAwMDE0ODNEIC8q
IFBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQUM1RkZDMTE3NEJGRDFCMDAwMTQ4M0QgLyogUGx1Z2luUHJvY2Vz
c0F0dHJpYnV0ZXMuaCAqLzsgfTsKIAkJMUFDNzUzN0MxODNBOUZEQjAwNzJDQjE1IC8qIFBhZ2VM
b2FkU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBQzc1MzdBMTgzQTlGREIwMDcyQ0IxNSAvKiBQYWdlTG9hZFN0YXRlLmggKi87IH07CiAJCTFB
Qzc1MzgwMTgzQkU1MEYwMDcyQ0IxNSAvKiBEYXRhUmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUM3NTM3RTE4M0JFNTBGMDA3MkNCMTUg
LyogRGF0YVJlZmVyZW5jZS5oICovOyB9OwogCQkxQUM3NUExQjFCMzM2ODI3MDA1Njc0NUIgLyog
SGFuZ0RldGVjdGlvbkRpc2FibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQUM3NUExQTFCMzM2ODI3MDA1Njc0NUIgLyogSGFuZ0RldGVjdGlvbkRp
c2FibGVyLmggKi87IH07CkBAIC00MDQsMTIgKzM1NSw4IEBACiAJCTFBRTI4NjdBMUM3RjdCQTYw
MDY5QUM0RiAvKiBXS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUUyODY3OTFDN0Y3QkE2MDA2OUFDNEYgLyog
V0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTFBRTI4NjgwMUM3RjkyQzAwMDY5QUM0RiAvKiBfV0tXZWJz
aXRlRGF0YVNpemVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUFFMjg2N0YxQzdGOTJCRjAwNjlBQzRGIC8qIF9XS1dlYnNpdGVEYXRhU2l6
ZUludGVybmFsLmggKi87IH07CiAJCTFBRTI4Njg0MUM3RjkzODYwMDY5QUM0RiAvKiBBUElXZWJz
aXRlRGF0YVJlY29yZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUFFMjg2ODIxQzdGOTM4NjAwNjlBQzRGIC8qIEFQSVdlYnNpdGVEYXRhUmVjb3JkLmgg
Ki87IH07Ci0JCTFBRTQ5NzY4MTFGRjY1OEUwMDQ4QjQ2NCAvKiBOUEpTT2JqZWN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUU0OTc2NjExRkY2NThF
MDA0OEI0NjQgLyogTlBKU09iamVjdC5oICovOyB9OwotCQkxQUU0OTg3ODExRkY3RkFBMDA0OEI0
NjQgLyogSlNOUE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUFFNDk4NzYxMUZGN0ZBQTAwNDhCNDY0IC8qIEpTTlBPYmplY3QuaCAqLzsgfTsK
LQkJMUFFNDlBNDkxMUZGQThDRTAwNDhCNDY0IC8qIEpTTlBNZXRob2QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRTQ5QTQ3MTFGRkE4Q0UwMDQ4QjQ2
NCAvKiBKU05QTWV0aG9kLmggKi87IH07CiAJCTFBRTUyRjk4MTkyMDI2NzIwMEExRkEzNyAvKiBX
S0NvbnRleHRDb25maWd1cmF0aW9uUmVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQUU1MkY5NDE5MjAxRjZCMDBBMUZBMzcgLyogV0tDb250ZXh0Q29u
ZmlndXJhdGlvblJlZi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTFBRUU1NzI1MjQwOUYxNDIwMDIwMDVENiAvKiBRdWlja0xvb2tUaHVtYm5haWxM
b2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
RUU1NzIzMjQwOUYxNDIwMDIwMDVENiAvKiBRdWlja0xvb2tUaHVtYm5haWxMb2FkZXIuaCAqLzsg
fTsKLQkJMUFFRkNDMTIxMUQwMUY5NjAwODIxOUQzIC8qIFBsdWdpbkluZm9TdG9yZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFFRkNDMTAxMUQwMUY5
NjAwODIxOUQzIC8qIFBsdWdpbkluZm9TdG9yZS5oICovOyB9OwogCQkxQUVGRDI3OTExRDE2Qzgx
MDA4MjE5RDMgLyogQXJndW1lbnRDb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUFFRkQyNzgxMUQxNkM4MTAwODIxOUQzIC8qIEFyZ3VtZW50Q29k
ZXIuaCAqLzsgfTsKIAkJMUFFRkQyRjcxMUQxODA3QjAwODIxOUQzIC8qIEFyZ3VtZW50Q29kZXJz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUVGRDJG
NjExRDE4MDdCMDA4MjE5RDMgLyogQXJndW1lbnRDb2RlcnMuaCAqLzsgfTsKIAkJMUFGMDVEODcx
NDY4ODM0ODAwOEIxRTgxIC8qIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRjA1RDg1MTQ2
ODgzNDgwMDhCMUU4MSAvKiBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5LmggKi87
IH07CkBAIC03MTAsMTggKzY1Nyw3IEBACiAJCTJEODc4NjIwMUJEQjU3RjUwMEQwMkFCQiAvKiBf
V0tVc2VyU3R5bGVTaGVldEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDg3ODYxRjFCREI1N0Y1MDBEMDJBQkIgLyogX1dLVXNlclN0eWxl
U2hlZXRJbnRlcm5hbC5oICovOyB9OwogCQkyRDg3ODYyNDFCREI1OEZGMDBEMDJBQkIgLyogQVBJ
VXNlclN0eWxlU2hlZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJEODc4NjIyMUJEQjU4RkYwMEQwMkFCQiAvKiBBUElVc2VyU3R5bGVTaGVldC5oICov
OyB9OwogCQkyRDg5NDlGMTE4MjA0NEY2MDBFODk4QUEgLyogUGxhdGZvcm1DQUxheWVyUmVtb3Rl
VGlsZWRCYWNraW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRDg5NDlFRjE4MjA0NEY2MDBFODk4QUEgLyogUGxhdGZvcm1DQUxheWVyUmVtb3RlVGls
ZWRCYWNraW5nLmggKi87IH07Ci0JCTJEOTEzNDQxMjEyQ0Y5RjAwMDEyOEFGRCAvKiBKU05QTWV0
aG9kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
RTQ5QTQ4MTFGRkE4Q0UwMDQ4QjQ2NCAvKiBKU05QTWV0aG9kLmNwcCAqLzsgfTsKLQkJMkQ5MTM0
NDIyMTJDRjlGMDAwMTI4QUZEIC8qIEpTTlBPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFFNDk4NzcxMUZGN0ZBQTAwNDhCNDY0IC8qIEpT
TlBPYmplY3QuY3BwICovOyB9OwotCQkyRDkxMzQ0MzIxMkNGOUYwMDAxMjhBRkQgLyogTmV0c2Nh
cGVCcm93c2VyRnVuY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUE2RkJBMjkxMUU2ODYyNzAwREIxMzcxIC8qIE5ldHNjYXBlQnJvd3NlckZ1bmNz
LmNwcCAqLzsgfTsKLQkJMkQ5MTM0NDQyMTJDRjlGMDAwMTI4QUZEIC8qIE5ldHNjYXBlUGx1Z2lu
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNkZC
RDI3MTFFNjlCQzIwMERCMTM3MSAvKiBOZXRzY2FwZVBsdWdpbi5jcHAgKi87IH07Ci0JCTJEOTEz
NDQ1MjEyQ0Y5RjAwMDEyOEFGRCAvKiBOZXRzY2FwZVBsdWdpblN0cmVhbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE1ODg5MTExRUU3MDQwMDA2
MUI4ODIgLyogTmV0c2NhcGVQbHVnaW5TdHJlYW0uY3BwICovOyB9OwotCQkyRDkxMzQ0NjIxMkNG
OUYwMDAxMjhBRkQgLyogTlBKU09iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQUU0OTc2NzExRkY2NThFMDA0OEI0NjQgLyogTlBKU09iamVj
dC5jcHAgKi87IH07Ci0JCTJEOTEzNDQ3MjEyQ0Y5RjAwMDEyOEFGRCAvKiBOUFJ1bnRpbWVPYmpl
Y3RNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUEyMTYxQUYxMUYzNzY2NDAwOEFEMEY1IC8qIE5QUnVudGltZU9iamVjdE1hcC5jcHAgKi87IH07
Ci0JCTJEOTEzNDQ4MjEyQ0Y5RjAwMDEyOEFGRCAvKiBOUFJ1bnRpbWVVdGlsaXRpZXMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyMTYyQUUxMUYz
ODk3MTAwOEFEMEY1IC8qIE5QUnVudGltZVV0aWxpdGllcy5jcHAgKi87IH07CiAJCTJEOTEzNDQ5
MjEyQ0Y5RjAwMDEyOEFGRCAvKiBQbHVnaW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUE2RkI3RDAxMUU2NTFFMjAwREIxMzcxIC8qIFBsdWdpbi5j
cHAgKi87IH07Ci0JCTJEOTEzNDRBMjEyQ0Y5RjAwMDEyOEFGRCAvKiBQbHVnaW5Qcm9jZXNzQ29u
bmVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQTBFQzkwNTEyNEMwQUI4MDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24uY3Bw
ICovOyB9OwotCQkyRDkxMzQ0QjIxMkNGOUYwMDAxMjhBRkQgLyogUGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb25NYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBMEVDOTBFMTI0QzBBRjUwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlv
bk1hbmFnZXIuY3BwICovOyB9OwotCQkyRDkxMzQ0QzIxMkNGOUYwMDAxMjhBRkQgLyogUGx1Z2lu
UHJveHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUEwNDNEQzAxMjRGRjg3NTAwRkZCRkI1IC8qIFBsdWdpblByb3h5LmNwcCAqLzsgfTsKIAkJMkQ5
MTM0NEQyMTJDRjlGMDAwMTI4QUZEIC8qIFBsdWdpblZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE2RkI3QUMxMUU2NEI2ODAwREIxMzcxIC8q
IFBsdWdpblZpZXcuY3BwICovOyB9OwogCQkyRDkxMzQ0RTIxMkNGOUYwMDAxMjhBRkQgLyogV2Vi
UGx1Z2luSW5mb1Byb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBMDhGRUUyMUQ1OTNDRjEwMDhCQThDQiAvKiBXZWJQbHVnaW5JbmZvUHJv
dmlkZXIuY3BwICovOyB9OwogCQkyRDkyQTc3OTIxMkI2QTYxMDBGNDkzRkQgLyogTG9nZ2luZy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE3RjJG
NDEyNUJGOEQ0MDA4QUVCMUQgLyogTG9nZ2luZy5jcHAgKi87IH07CkBAIC03NDYsMTQgKzY4Miw2
IEBACiAJCTJEOTJBNzhEMjEyQjZBQjEwMEY0OTNGRCAvKiBXZWJQbGF0Zm9ybVRvdWNoUG9pbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzAzMzdE
REMxMjdBNTIxQzAwOEZGNEY0IC8qIFdlYlBsYXRmb3JtVG91Y2hQb2ludC5jcHAgKi87IH07CiAJ
CTJEOTJBNzhFMjEyQjZBQjEwMEY0OTNGRCAvKiBXZWJUb3VjaEV2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwMzM3REQ3MTI3QTUxQjYwMDhG
RjRGNCAvKiBXZWJUb3VjaEV2ZW50LmNwcCAqLzsgfTsKIAkJMkQ5MkE3OEYyMTJCNkFCMTAwRjQ5
M0ZEIC8qIFdlYldoZWVsRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzAzMzdERDAxMjdBMjk4MDAwOEZGNEY0IC8qIFdlYldoZWVsRXZlbnQu
Y3BwICovOyB9OwotCQkyRDkyQTc5MDIxMkI2QUQ0MDBGNDkzRkQgLyogTlBJZGVudGlmaWVyRGF0
YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTJE
ODQ4QTEyN0Y2QTQ5MDAxRUI5NjIgLyogTlBJZGVudGlmaWVyRGF0YS5jcHAgKi87IH07Ci0JCTJE
OTJBNzkxMjEyQjZBRDQwMEY0OTNGRCAvKiBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTFGQTM1QzEyN0E0
NUJGMDA1MEU3MDkgLyogTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwotCQkyRDky
QTc5MjIxMkI2QUQ0MDBGNDkzRkQgLyogTlBPYmplY3RQcm94eS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTFGQTI4NDEyN0ExM0JDMDA1MEU3MDkg
LyogTlBPYmplY3RQcm94eS5jcHAgKi87IH07Ci0JCTJEOTJBNzkzMjEyQjZBRDQwMEY0OTNGRCAv
KiBOUFJlbW90ZU9iamVjdE1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQTFGQTI1MjEyN0EwRTRGMDA1MEU3MDkgLyogTlBSZW1vdGVPYmplY3RN
YXAuY3BwICovOyB9OwotCQkyRDkyQTc5NDIxMkI2QUQ0MDBGNDkzRkQgLyogTlBWYXJpYW50RGF0
YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTJE
ODRBMjEyN0Y2QUQxMDAxRUI5NjIgLyogTlBWYXJpYW50RGF0YS5jcHAgKi87IH07Ci0JCTJEOTJB
Nzk1MjEyQjZBRDQwMEY0OTNGRCAvKiBQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMkQ5MEQx
MTI4MUM5NjYwMDFFQjk2MiAvKiBQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCAq
LzsgfTsKLQkJMkQ5MkE3OTYyMTJCNkFEQTAwRjQ5M0ZEIC8qIE5ldHNjYXBlUGx1Z2luTW9kdWxl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNEE5
QzUzMTJCODE2Q0YwMDhGRTk4NCAvKiBOZXRzY2FwZVBsdWdpbk1vZHVsZS5jcHAgKi87IH07Ci0J
CTJEOTJBNzk3MjEyQjZBREEwMEY0OTNGRCAvKiBQbHVnaW5JbmZvcm1hdGlvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNGOEM4RTE3M0FGNTJE
MDA3QjdGMzkgLyogUGx1Z2luSW5mb3JtYXRpb24uY3BwICovOyB9OwogCQkyRDkzMTE2OTIxMkY2
MUIyMDAwNDRCRkUgLyogV0tDb250ZW50Vmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTNEMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0NvbnRl
bnRWaWV3Lm1tICovOyB9OwogCQkyRDkzMTE2QTIxMkY2MUI1MDAwNDRCRkUgLyogV0tDb250ZW50
Vmlld0ludGVyYWN0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZDQjRFNkIxOEJCRjI2QTAwMEZDRkM5IC8qIFdLQ29udGVudFZpZXdJbnRlcmFj
dGlvbi5tbSAqLzsgfTsKIAkJMkQ5RUEzMEQxQTk2Q0I1OTAwMkQyODA3IC8qIFdLUGFnZUluamVj
dGVkQnVuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRDlFQTMwQzFBOTZDQjU5MDAyRDI4MDcgLyogV0tQYWdlSW5qZWN0ZWRCdW5kbGVD
bGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtODUzLDcgKzc4MSw2IEBACiAJCTM3MEYzNEE3MTgyOUNGRjMwMDkwMjdDOCAvKiBXS0Jyb3dz
aW5nQ29udGV4dEhpc3RvcnlEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzcwRjM0QTYxODI5Q0ZGMzAwOTAyN0M4IC8qIFdLQnJvd3NpbmdD
b250ZXh0SGlzdG9yeURlbGVnYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMzcxODNENTcxODJGNEU3MDAwODBDODExIC8qIFdLTlNVUkxFeHRy
YXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MTgz
RDU1MTgyRjRFNzAwMDgwQzgxMSAvKiBXS05TVVJMRXh0cmFzLmggKi87IH07CiAJCTM3MUExOTQy
MTgyNEQyOTMwMEYzMkE1RSAvKiBXS05TRGljdGlvbmFyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxQTE5NDAxODI0RDI5MzAwRjMyQTVFIC8qIFdL
TlNEaWN0aW9uYXJ5LmggKi87IH07Ci0JCTM3MUU2OTU5MUFFRDdBMEYwMDQ5NUU0OCAvKiBGb3Vu
ZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDM0RFNDY4MTVBOTE3NjMwMDhEMjZGQyAvKiBGb3VuZGF0aW9uLmZyYW1ld29y
ayAqLzsgfTsKIAkJMzcyQ0FGMEIxODMzRkQ5MTAwNDBBQzI3IC8qIFdLTlNFcnJvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcyQ0FGMDkxODMzRkQ5
MTAwNDBBQzI3IC8qIFdLTlNFcnJvci5oICovOyB9OwogCQkzNzJFQkIzRTIwMTdFNjQzMDAwODUw
NjQgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzNERTQ2ODE1QTkxNzYzMDA4RDI2RkMgLyogRm91bmRhdGlv
bi5mcmFtZXdvcmsgKi87IH07CiAJCTM3MkVCQjNGMjAxN0U2NDMwMDA4NTA2NCAvKiBXZWJLaXQu
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOERDMkVGNUIwNDg2QTY5NDAwOThCMjE2IC8qIFdlYktpdC5mcmFtZXdvcmsgKi87IH07CkBA
IC04OTUsNyArODIyLDYgQEAKIAkJMzdBNjRFNTcxOEYzOEY0NjAwRUIzMEYxIC8qIF9XS0Zvcm1J
bnB1dFNlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDM3QTY0RTU2MThGMzhGNDYwMEVCMzBGMSAvKiBfV0tGb3JtSW5wdXRTZXNzaW9uLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzdBNzA5QTcx
RTNFQTBGRDAwQ0E1OTY5IC8qIFdLRGF0YURldGVjdG9yVHlwZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3QTcwOUE2MUUzRUEwRkQwMENBNTk2OSAv
KiBXS0RhdGFEZXRlY3RvclR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVi
bGljLCApOyB9OyB9OwogCQkzN0E3MDlBOTFFM0VBNDBDMDBDQTU5NjkgLyogV0tEYXRhRGV0ZWN0
b3JUeXBlc0ludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzN0E3MDlBODFFM0VBNDBDMDBDQTU5NjkgLyogV0tEYXRhRGV0ZWN0b3JUeXBlc0lu
dGVybmFsLmggKi87IH07Ci0JCTM3QjBEMTg0MUMxRTQ5OUEwMEQ0MEQ2NCAvKiBQbHVnaW5Qcm9j
ZXNzU2hpbS5keWxpYiBpbiBDb3B5IFNoaW1zICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBQzI1RkIwMTJBNDhFQTcwMEJEMjY3MSAvKiBQbHVnaW5Qcm9jZXNzU2hpbS5keWxp
YiAqLzsgfTsKIAkJMzdCNTA0NTIxOUVFRjMxMzAwQ0UyQ0Y4IC8qIFdLRXJyb3JQcml2YXRlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0I1MDQ1MTE5
RUVGMzEzMDBDRTJDRjggLyogV0tFcnJvclByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzN0JFQzRERDE5NDhGQzZBMDA4QjQyODYgLyog
V2ViQ29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQUExQzc5QTEwMEU3RkM1MDA3OERFQkMgLyogV2ViQ29yZS5mcmFtZXdvcmsg
Ki87IH07CiAJCTM3QkVDNEUxMTk0OTE0ODYwMDhCNDI4NiAvKiBDb21wbGV0aW9uSGFuZGxlckNh
bGxDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzN0JFQzRERjE5NDkxNDg2MDA4QjQyODYgLyogQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tl
ci5oICovOyB9OwpAQCAtOTIwLDEyICs4NDYsNiBAQAogCQkzRkZEREI5NjFGNTc3RjQ4MDA1MEU1
OTMgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y5MTVDMEYxRjU2NERFRDAwMTgzQ0U5IC8q
IFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaCAqLzsgfTsKIAkJNDEwNDgyQ0UxRERE
MzI0RjAwRjAwNkQwIC8qIFJUQ05ldHdvcmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQxMDQ4MkNDMURERDJGQjUwMEYwMDZEMCAvKiBSVENOZXR3b3Jr
LmggKi87IH07CiAJCTQxMEYwRDRDMjcwMUVGRjkwMEY5NkRGQyAvKiBHUFVQcm9jZXNzQ29ubmVj
dGlvbkluaXRpYWxpemF0aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDEwRjBENEIyNzAxRUZFQTAwRjk2REZDIC8qIEdQVVByb2Nl
c3NDb25uZWN0aW9uSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzLmggKi87IH07Ci0JCTQxMTJFRERC
MjBFNDA3QTUwMEJFQTkyQSAvKiBjb20uYXBwbGUuQm9jb21TdWJtaXRDdHJsLnNiIGluIENvcHkg
UGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxMTJFREQ5MjBFNDA3NzUwMEJFQTkyQSAvKiBjb20uYXBwbGUuQm9jb21TdWJtaXRDdHJs
LnNiICovOyB9OwotCQk0MTEyRUREQzIwRTQwN0E1MDBCRUE5MkEgLyogY29tLmFwcGxlLk5QU2Fm
ZUlucHV0LnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMTJFREQ4MjBFNDA3NzUwMEJFQTkyQSAvKiBjb20uYXBw
bGUuTlBTYWZlSW5wdXQuc2IgKi87IH07Ci0JCTQxMTJFREREMjBFNDA3QTUwMEJFQTkyQSAvKiBj
b20uYXBwbGUuTlBTYWZlU3VibWl0LnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMTJFREQ3MjBFNDA3NzUwMEJF
QTkyQSAvKiBjb20uYXBwbGUuTlBTYWZlU3VibWl0LnNiICovOyB9OwotCQk0MTEyRURERTIwRTQw
N0E1MDBCRUE5MkEgLyogY29tLmNmY2EubnBTZWNFZGl0Q3RsLk1BQy5CT0MucGx1Z2luLnNiIGlu
IENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQxMTJFREQzMjBFNDA3NzQwMEJFQTkyQSAvKiBjb20uY2ZjYS5ucFNlY0VkaXRD
dGwuTUFDLkJPQy5wbHVnaW4uc2IgKi87IH07Ci0JCTQxMTJFRERGMjBFNDA3QTUwMEJFQTkyQSAv
KiBjb20uY21iY2hpbmEuQ01CU2VjdXJpdHkuc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJv
ZmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDExMkVERDUyMEU0MDc3
NDAwQkVBOTJBIC8qIGNvbS5jbWJjaGluYS5DTUJTZWN1cml0eS5zYiAqLzsgfTsKLQkJNDExMkVE
RTAyMEU0MDdBNTAwQkVBOTJBIC8qIGNvbS5mdHNhZmUuTlBBUEktQ29yZS1TYWZlLVNvZnRLZXli
YW9yZC5wbHVnaW4ucmZjMTAzNGlkZW50aWZpZXIuc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3gg
UHJvZmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDExMkVERDIyMEU0
MDc3MzAwQkVBOTJBIC8qIGNvbS5mdHNhZmUuTlBBUEktQ29yZS1TYWZlLVNvZnRLZXliYW9yZC5w
bHVnaW4ucmZjMTAzNGlkZW50aWZpZXIuc2IgKi87IH07CiAJCTQxMUE4RERCMjBEREQxQUMwMDYw
RDM0RiAvKiBXS01vY2tNZWRpYURldmljZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDExQThERDkyMEREQjYwNTAwNjBEMzRGIC8qIFdLTW9ja01lZGlh
RGV2aWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNDExQjIyNjQxRTM3MUJBNjAwNEY3MzYzIC8qIExpYldlYlJUQ05ldHdvcmsuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMUIyMjYyMUUzNzEyNDQw
MDRGNzM2MyAvKiBMaWJXZWJSVENOZXR3b3JrLmggKi87IH07CiAJCTQxMjg3RDRFMjI1RDFFQ0Iw
MDlBM0UyNiAvKiBXZWJTb2NrZXRUYXNrQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTI4N0Q0QjIyNUMwNUM0MDA5QTNFMjYgLyogV2ViU29j
a2V0VGFza0NvY29hLm1tICovOyB9OwpAQCAtOTM0LDExICs4NTQsNiBAQAogCQk0MTMwNzVCMDFE
RTg1RjU4MDAzOUVDNjkgLyogV2ViUlRDTW9uaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEzMDc1QTMxREU4NUVFNzAwMzlFQzY5IC8qIFdlYlJU
Q01vbml0b3IuaCAqLzsgfTsKIAkJNDEzMDc1QjIxREU4NUY1ODAwMzlFQzY5IC8qIExpYldlYlJU
Q1NvY2tldEZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxMzA3NUE2MURFODVFRTcwMDM5RUM2OSAvKiBMaWJXZWJSVENTb2NrZXRGYWN0b3J5
LmggKi87IH07CiAJCTQxMzA3NUI0MURFODVGNTgwMDM5RUM2OSAvKiBMaWJXZWJSVENQcm92aWRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEzMDc1
QTgxREU4NUVFNzAwMzlFQzY5IC8qIExpYldlYlJUQ1Byb3ZpZGVyLmggKi87IH07Ci0JCTQxM0ND
RDUwMjBERUJDNzQwMDY1QTIxQSAvKiBjb20uZ29vZ2xlLmdvb2dsZXRhbGticm93c2VycGx1Z2lu
LnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxM0NDRDRGMjBERUJDMkYwMDY1QTIxQSAvKiBjb20uZ29vZ2xlLmdv
b2dsZXRhbGticm93c2VycGx1Z2luLnNiICovOyB9OwotCQk0MTQzNzUxQzIwRUFFQTJEMDBGQUQw
NkMgLyogY24ubWljcm9kb25lLmNtYi5zYWZhcmkuc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3gg
UHJvZmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE0Mzc1MUIyMEVB
RUExRTAwRkFEMDZDIC8qIGNuLm1pY3JvZG9uZS5jbWIuc2FmYXJpLnNiICovOyB9OwotCQk0MTRE
RDM3OTIwQkY0M0Y1MDA2OTU5RkIgLyogY29tLmNpc2NvLndlYmV4LnBsdWdpbi5ncGM2NC5zYiBp
biBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE0REQzNzgy
MEJGNDNFQTAwNjk1OUZCIC8qIGNvbS5jaXNjby53ZWJleC5wbHVnaW4uZ3BjNjQuc2IgKi87IH07
Ci0JCTQxNEREMzdBMjBCRjQ5QTUwMDY5NTlGQiAvKiBjb20uY2lzY28ud2ViZXgucGx1Z2luLmdw
YzY0LnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQxNEREMzc4MjBCRjQzRUEwMDY5NTlGQiAvKiBjb20uY2lzY28u
d2ViZXgucGx1Z2luLmdwYzY0LnNiICovOyB9OwotCQk0MTU3RTRCMDIwRTJFQ0RGMDBBNkMwRDcg
LyogY29tLmdvb2dsZS5vMWRicm93c2VycGx1Z2luLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94
IFByb2ZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNTdFNEFGMjBF
MkVDOTgwMEE2QzBENyAvKiBjb20uZ29vZ2xlLm8xZGJyb3dzZXJwbHVnaW4uc2IgKi87IH07CiAJ
CTQxNzY5MDE0MjJGREQ0MUIwMEIxNTc2RCAvKiBOZXR3b3JrUlRDUHJvdmlkZXIubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTc2OTAxMzIyRkRENDFC
MDBCMTU3NkQgLyogTmV0d29ya1JUQ1Byb3ZpZGVyLm1tICovOyB9OwogCQk0MTc5MTVBRjIyNTZC
Qjc1MDBENkY5N0UgLyogV2ViU29ja2V0Q2hhbm5lbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE3OTE1QUQyMjU2QkI3NDAwRDZGOTdFIC8qIFdlYlNv
Y2tldENoYW5uZWwuaCAqLzsgfTsKIAkJNDE3OTE1QjEyMjU2QzBENjAwRDZGOTdFIC8qIFdlYlNv
Y2tldENoYW5uZWxNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MTc5MTVCMDIyNTZDMEQ2MDBENkY5N0UgLyogV2ViU29ja2V0Q2hhbm5lbE1h
bmFnZXIuaCAqLzsgfTsKQEAgLTEyOTksNyArMTIxNCw2IEBACiAJCTVDOUE5MTExMjI4RjY5Q0Mw
MDVDNUIxNyAvKiBYUENTZXJ2aWNlTWFpbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDODI4Mzk2MTZCNDdFQzQwMEEyNzhGRSAvKiBYUENTZXJ2aWNl
TWFpbi5tbSAqLzsgfTsKIAkJNUM5QTkxMTIyMjhGNjlDQzAwNUM1QjE3IC8qIFhQQ1NlcnZpY2VN
YWluLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4
MjgzOTYxNkI0N0VDNDAwQTI3OEZFIC8qIFhQQ1NlcnZpY2VNYWluLm1tICovOyB9OwogCQk1QzlB
OTExMzIyOEY2OUNEMDA1QzVCMTcgLyogWFBDU2VydmljZU1haW4ubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzgyODM5NjE2QjQ3RUM0MDBBMjc4RkUg
LyogWFBDU2VydmljZU1haW4ubW0gKi87IH07Ci0JCTVDOUE5MTE0MjI4RjY5Q0UwMDVDNUIxNyAv
KiBYUENTZXJ2aWNlTWFpbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDODI4Mzk2MTZCNDdFQzQwMEEyNzhGRSAvKiBYUENTZXJ2aWNlTWFpbi5tbSAq
LzsgfTsKIAkJNUM5RTU2ODMxREY3RjFCMzAwQzlFRTMzIC8qIFdLV2Vic2l0ZVBvbGljaWVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlFNTY4MTFE
RjdGMDU1MDBDOUVFMzMgLyogV0tXZWJzaXRlUG9saWNpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1Q0EyNkQ4MTIxN0FCRDVCMDBGOTdBMzUg
LyogV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1Q0EyNkQ4MDIxN0FCQkI2MDBGOTdBMzUgLyogV0tTYWZlQnJvd3Np
bmdXYXJuaW5nLmggKi87IH07CiAJCTVDQTI2RDgzMjE3QUQxQjgwMEY5N0EzNSAvKiBXS1NhZmVC
cm93c2luZ1dhcm5pbmcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1Q0EyNkQ3RjIxN0FCQkI2MDBGOTdBMzUgLyogV0tTYWZlQnJvd3NpbmdXYXJuaW5n
Lm1tICovOyB9OwpAQCAtMTMyOCw3ICsxMjQyLDYgQEAKIAkJNUNFOTEyMTAyMjkzQzI3NzAwNUJF
Qzc4IC8qIEF1eGlsaWFyeVByb2Nlc3NNYWluLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRTkxMjBGMjI5M0MyNUYwMDVCRUM3OCAvKiBBdXhpbGlh
cnlQcm9jZXNzTWFpbi5jcHAgKi87IH07CiAJCTVDRTkxMjExMjI5M0MyNzgwMDVCRUM3OCAvKiBB
dXhpbGlhcnlQcm9jZXNzTWFpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0U5MTIwRjIyOTNDMjVGMDA1QkVDNzggLyogQXV4aWxpYXJ5UHJvY2Vz
c01haW4uY3BwICovOyB9OwogCQk1Q0U5MTIxMjIyOTNDMjc4MDA1QkVDNzggLyogQXV4aWxpYXJ5
UHJvY2Vzc01haW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUNFOTEyMEYyMjkzQzI1RjAwNUJFQzc4IC8qIEF1eGlsaWFyeVByb2Nlc3NNYWluLmNw
cCAqLzsgfTsKLQkJNUNFOTEyMTMyMjkzQzI3OTAwNUJFQzc4IC8qIEF1eGlsaWFyeVByb2Nlc3NN
YWluLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
RTkxMjBGMjI5M0MyNUYwMDVCRUM3OCAvKiBBdXhpbGlhcnlQcm9jZXNzTWFpbi5jcHAgKi87IH07
CiAJCTVDRTkxMjE0MjI5M0MyODAwMDVCRUM3OCAvKiBXS01haW4uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRTkxMjBCMjI5M0MxRTAwMDVCRUM3OCAv
KiBXS01haW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk2MzEwOEY5NjFGOTY3MTlDMDBBMERCODQgLyogX1dLQXBwbGljYXRpb25NYW5pZmVzdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjMxMDhGOTQx
Rjk2NzE5QzAwQTBEQjg0IC8qIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3QuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2MzEwOEY5OTFGOTY3MUY3MDBB
MERCODQgLyogX1dLQXBwbGljYXRpb25NYW5pZmVzdEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MzEwOEY5ODFGOTY3MUY3MDBBMERCODQg
LyogX1dLQXBwbGljYXRpb25NYW5pZmVzdEludGVybmFsLmggKi87IH07CkBAIC0xMzU5LDcgKzEy
NzIsNiBAQAogCQk3QTNBQ0UxQjFFRUVGNzlCMDBBODY0QTQgLyogQVBJSW5qZWN0ZWRCdW5kbGVQ
YWdlTG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QTNBQ0UxQTFFRUVGNzhDMDBBODY0QTQgLyogQVBJSW5qZWN0ZWRCdW5kbGVQYWdl
TG9hZGVyQ2xpZW50LmggKi87IH07CiAJCTdBM0ZFQ0EyMjFGN0MwOTcwMEYyNjdDRCAvKiBTdG9y
YWdlQWNjZXNzU3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QTNGRUNBMTIxRjdDMDk3MDBGMjY3Q0QgLyogU3RvcmFnZUFjY2Vzc1N0YXR1cy5o
ICovOyB9OwogCQk3QTQxRTlGQjIxRjgxREFEMDBCODhDREIgLyogU2hvdWxkR3JhbmRmYXRoZXJT
dGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QTQxRTlGQTIxRjgxREFDMDBCODhDREIgLyogU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNz
LmggKi87IH07Ci0JCTdBNzcyQzhEMURERDRBMjUwMDBGMzRGMSAvKiBjb20uYXBwbGUuV2ViS2l0
LnBsdWdpbi1jb21tb24uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0ExNTA2NzIxREQ1NjI5ODAwMUY0QjU4IC8q
IGNvbS5hcHBsZS5XZWJLaXQucGx1Z2luLWNvbW1vbi5zYiAqLzsgfTsKIAkJN0E3OEZGMzIyMjQx
OTE5NjAwOTY0ODNFIC8qIFdLU3RvcmFnZUFjY2Vzc0FsZXJ0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTc4RkYyRTIyNDE5MTc1MDA5NjQ4M0UgLyog
V0tTdG9yYWdlQWNjZXNzQWxlcnQuaCAqLzsgfTsKIAkJN0E3OEZGMzMyMjQxOTE5QjAwOTY0ODNF
IC8qIFdLU3RvcmFnZUFjY2Vzc0FsZXJ0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0E3OEZGMkYyMjQxOTE3NjAwOTY0ODNFIC8qIFdLU3RvcmFnZUFj
Y2Vzc0FsZXJ0Lm1tICovOyB9OwogCQk3QTgyMUY0QzFFMkY2NzM5MDA2MDQ1NzcgLyogTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QTgyMUY0QjFFMkY2NjQ4MDA2MDQ1NzcgLyogTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmggKi87IH07CkBAIC0xMzk4LDcgKzEzMTAsNiBAQAog
CQk3QzM2MUQ3ODE5MjgwM0JEMDAzNkE1OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0MzNjFENzYxOTI4MDNCRDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJN0MzNjFENzkxOTI4MDNC
RDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMzYxRDc3MTkyODAz
QkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmggKi87
IH07CiAJCTdDM0EwNkE4MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50UnVsZUxpc3RTdG9y
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzQTA2
QTYxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmggKi87IH07Ci0J
CTdDM0Y4QzkxMTczQUY1MkQwMDdCN0YzOSAvKiBQbHVnaW5JbmZvcm1hdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzRjhDOEYxNzNBRjUyRDAw
N0I3RjM5IC8qIFBsdWdpbkluZm9ybWF0aW9uLmggKi87IH07CiAJCTdDNDY5NEM5MUE0QjRFQTEw
MEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0Njk0QzcxQTRCNEVBMDAw
QUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJ
CTdDNDY5NENBMUE0QjRFQTEwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHlNZXNzYWdlcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0Njk0Qzgx
QTRCNEVBMTAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eU1lc3NhZ2VzLmggKi87IH07CiAJ
CTdDNDY5NEQxMUE1MUUzNjgwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNDY5NENFMUE1MUUzNjgw
MEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHkuaCAqLzsgfTsKQEAgLTE0MjUsMTEgKzEzMzYs
NiBAQAogCQk3Q0IxMDBGMjFGQTM4NThFMDAxNzI5RUUgLyogV2ViUHJlZmVyZW5jZXNEZWZpbml0
aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NE
RTczQTMxRjlEQUI2NTAwMzkwMzEyIC8qIFdlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaCAqLzsg
fTsKIAkJN0NCMTAwRjMxRkEzODU4RTAwMTcyOUVFIC8qIFdlYlByZWZlcmVuY2VzS2V5cy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCMTAwRUYxRkEy
RDc0QjAwMTcyOUVFIC8qIFdlYlByZWZlcmVuY2VzS2V5cy5oICovOyB9OwogCQk3Q0IxMDBGNDFG
QTM4NTkyMDAxNzI5RUUgLyogV2ViUHJlZmVyZW5jZXNTdG9yZURlZmF1bHRzTWFwLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQjEwMEYwMUZBMkQ3
ODQwMDE3MjlFRSAvKiBXZWJQcmVmZXJlbmNlc1N0b3JlRGVmYXVsdHNNYXAuY3BwICovOyB9Owot
CQk3Q0IxNkZFRjE3MjRCQTIzMDA3QTBBOTUgLyogY29tLmFwcGxlLmlzdC5kcy5hcHBsZWNvbm5l
Y3Qud2VicGx1Z2luLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQjE2RkUyMTcyNEI5QjUwMDdBMEE5NSAvKiBj
b20uYXBwbGUuaXN0LmRzLmFwcGxlY29ubmVjdC53ZWJwbHVnaW4uc2IgKi87IH07Ci0JCTdDQjE2
RkYwMTcyNEJBMjQwMDdBMEE5NSAvKiBjb20uYXBwbGUuUXVpY2tUaW1lIFBsdWdpbi5wbHVnaW4u
c2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0NCMTZGRTMxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5hcHBsZS5RdWlj
a1RpbWUgUGx1Z2luLnBsdWdpbi5zYiAqLzsgfTsKLQkJN0NCMTZGRjIxNzI0QkEyODAwN0EwQTk1
IC8qIGNvbS5tYWNyb21lZGlhLkZsYXNoIFBsYXllci5wbHVnaW4uc2IgaW4gQ29weSBQbHVnLWlu
IFNhbmRib3ggUHJvZmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NC
MTZGRTUxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5tYWNyb21lZGlhLkZsYXNoIFBsYXllci5wbHVn
aW4uc2IgKi87IH07Ci0JCTdDQjE2RkYzMTcyNEJBMkYwMDdBMEE5NSAvKiBjb20ubWljcm9zb2Z0
LlNpbHZlcmxpZ2h0UGx1Z2luLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQjE2RkU2MTcyNEI5QjUwMDdBMEE5
NSAvKiBjb20ubWljcm9zb2Z0LlNpbHZlcmxpZ2h0UGx1Z2luLnNiICovOyB9OwotCQk3Q0IxNkZG
NDE3MjRCQTMwMDA3QTBBOTUgLyogY29tLm9yYWNsZS5qYXZhLkphdmFBcHBsZXRQbHVnaW4uc2Ig
aW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0NCMTZGRTcxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5vcmFjbGUuamF2YS5K
YXZhQXBwbGV0UGx1Z2luLnNiICovOyB9OwogCQk3Q0IzNjVBQTFEMzFEQjcwMDA3MTU4Q0EgLyog
X1dLVXNlckluaXRpYXRlZEFjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0NCMzY1QTgxRDMxREI3MDAwNzE1OENBIC8qIF9XS1VzZXJJbml0aWF0
ZWRBY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3Q0IzNjVBRDFEMzFEQzEwMDA3MTU4Q0EgLyogX1dLVXNlckluaXRpYXRlZEFjdGlvbklu
dGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
Q0IzNjVBQzFEMzFEQzEwMDA3MTU4Q0EgLyogX1dLVXNlckluaXRpYXRlZEFjdGlvbkludGVybmFs
LmggKi87IH07CiAJCTdDQjM2NUIxMUQzMUREMUUwMDcxNThDQSAvKiBBUElVc2VySW5pdGlhdGVk
QWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
Q0IzNjVBRjFEMzFERDFFMDA3MTU4Q0EgLyogQVBJVXNlckluaXRpYXRlZEFjdGlvbi5oICovOyB9
OwpAQCAtMTQ0MCw3ICsxMzQ2LDYgQEAKIAkJN0NENUVCQjkxNzQ2QTE1QjAwMEMxQzQ1IC8qIFdL
T2JqQ1R5cGVXcmFwcGVyUmVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3Q0Q1RUJCNzE3NDZBMTVCMDAwQzFDNDUgLyogV0tPYmpDVHlwZVdyYXBwZXJS
ZWYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
Q0Q1RUJCQjE3NDZBODNFMDAwQzFDNDUgLyogV0tCYXNlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0Q1RUJCQTE3NDZBODNFMDAwQzFDNDUgLyog
V0tCYXNlTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJN0NENUVCQkYxNzQ2QjA0QzAwMEMxQzQ1IC8qIFdLVHlwZVJlZldyYXBwZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRDVFQkJEMTc0NkIw
NEMwMDBDMUM0NSAvKiBXS1R5cGVSZWZXcmFwcGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJN0NENjIyNzgxNzM5RDg2MzAwNUJEN0ZGIC8qIFBs
dWdpblNhbmRib3hQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3Q0Q2MjI3NjE3MzlEODYzMDA1QkQ3RkYgLyogUGx1Z2luU2FuZGJveFByb2Zp
bGUuaCAqLzsgfTsKIAkJN0NFNEQyMDcxQTQ2Nzc2MTAwQzdGMTUyIC8qIEFQSUxlZ2FjeUNvbnRl
eHRIaXN0b3J5Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3Q0U0RDIwNjFBNDY3NzU3MDBDN0YxNTIgLyogQVBJTGVnYWN5Q29udGV4dEhpc3Rv
cnlDbGllbnQuaCAqLzsgfTsKIAkJN0NFNEQyMUIxQTQ5MTRBMzAwQzdGMTUyIC8qIFdlYlByb2Nl
c3NQb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
Q0U0RDIxODFBNDkxNEEzMDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bvb2wuaCAqLzsgfTsKIAkJN0NF
NEQyMjAxQTQ5MTRDQTAwQzdGMTUyIC8qIEFQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNEQyMUUxQTQ5
MTRDQTAwQzdGMTUyIC8qIEFQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oICovOyB9OwpAQCAt
MTYyNiw3ICsxNTMxLDYgQEAKIAkJOUJGNUVDNjQyNTQxMTQ1NjAwOTg0RTc3IC8qIEpTSVBDQmlu
ZGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
QkY1RUM2MzI1NDEwRTk5MDA5ODRFNzcgLyogSlNJUENCaW5kaW5nLmNwcCAqLzsgfTsKIAkJOUVD
NTMyQTMyNDQ3RkJBRDAwMjE1MjE2IC8qIEdlb2xvY2F0aW9uSWRlbnRpZmllci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUVDNTMyQTIyNDQ3RkJBRDAw
MjE1MjE2IC8qIEdlb2xvY2F0aW9uSWRlbnRpZmllci5oICovOyB9OwogCQk5RkI1RjM5NTE2OUU2
QTgwMDAyQzI1QkYgLyogV0tDb250ZXh0UHJpdmF0ZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUZCNUYzOTMxNjlFNkE4MDAwMkMyNUJGIC8qIFdL
Q29udGV4dFByaXZhdGVNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQlBMTAyQTcwODFFQzBFRUU5MDBEODFEODIgLyogY29tLm1hY3JvbWVkaWEu
Rmxhc2ggUGxheWVyIEVTUi5wbHVnaW4uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmls
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E1RTM5NDkxRDVCRDhBNzAw
QjRCN0NFIC8qIGNvbS5tYWNyb21lZGlhLkZsYXNoIFBsYXllciBFU1IucGx1Z2luLnNiICovOyB9
OwogCQlBMTA0NkVBMTIwNzkyNjMxMDBGMEM1RDggLyogV0tQREZWaWV3LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTA0NkU5RjIwNzkyNjMxMDBGMEM1
RDggLyogV0tQREZWaWV3LmggKi87IH07CiAJCUExMTVEQzcyMTkxRDgyREEwMERBODA3MiAvKiBf
V0tXZWJWaWV3UHJpbnRGb3JtYXR0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEExMTVEQzZFMTkxRDgyQUIwMERBODA3MiAvKiBfV0tXZWJWaWV3UHJp
bnRGb3JtYXR0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlBMTE4QTlGMzE5MDhCOEVBMDBGN0M5MkIgLyogX1dLTlNGaWxlTWFuYWdlckV4dHJh
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTExOEE5
RjExOTA4QjhFQTAwRjdDOTJCIC8qIF9XS05TRmlsZU1hbmFnZXJFeHRyYXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTgwNCw4ICsxNzA4LDYg
QEAKIAkJQkM4MTQ3QTkxMkY2NENEQTAwN0IyQzMyIC8qIEluamVjdGVkQnVuZGxlUGFnZVBvbGlj
eUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkM4MTQ3QTcxMkY2NENEQTAwN0IyQzMyIC8qIEluamVjdGVkQnVuZGxlUGFnZVBvbGljeUNsaWVu
dC5oICovOyB9OwogCQlCQzgxNDdENTEyRjY2RDMxMDA3QjJDMzIgLyogSW5qZWN0ZWRCdW5kbGVO
YXZpZ2F0aW9uQWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQzgxNDdEMzEyRjY2RDMxMDA3QjJDMzIgLyogSW5qZWN0ZWRCdW5kbGVOYXZpZ2F0
aW9uQWN0aW9uLmggKi87IH07CiAJCUJDODI4M0RBMTZCNERCOTMwMEEyNzhGRSAvKiBXZWJLaXQu
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOERDMkVGNUIwNDg2QTY5NDAwOThCMjE2IC8qIFdlYktpdC5mcmFtZXdvcmsgKi87IH07Ci0J
CUJDODI4NDREMTZCNTA4MUMwMEEyNzhGRSAvKiBQbHVnaW5TZXJ2aWNlRW50cnlQb2ludC5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODI4M0VGMTZC
NEY4RTIwMEEyNzhGRSAvKiBQbHVnaW5TZXJ2aWNlRW50cnlQb2ludC5tbSAqLzsgfTsKLQkJQkM4
Mjg0NEYxNkI1MDg5ODAwQTI3OEZFIC8qIFdlYktpdC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4REMyRUY1QjA0ODZBNjk0MDA5OEIy
MTYgLyogV2ViS2l0LmZyYW1ld29yayAqLzsgfTsKIAkJQkM4NDUyQTgxMTYyQzgwOTAwQ0FCOUI1
IC8qIERyYXdpbmdBcmVhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQzg0NTJBNjExNjJDODA5MDBDQUI5QjUgLyogRHJhd2luZ0FyZWEuaCAqLzsgfTsK
IAkJQkM4NTdGODUxMkI4MkQwQjAwRURFQjJFIC8qIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzg1N0Y4
MzEyQjgyRDBCMDBFREVCMkUgLyogV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuaCAqLzsgfTsK
IAkJQkM4NTdGQjUxMkI4MzBFNjAwRURFQjJFIC8qIEFQSU9wZW5QYW5lbFBhcmFtZXRlcnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODU3RkIzMTJC
ODMwRTYwMEVERUIyRSAvKiBBUElPcGVuUGFuZWxQYXJhbWV0ZXJzLmggKi87IH07CkBAIC0yMDE1
LDcgKzE5MTcsNiBAQAogCQlFMThFNjkwQzE2OUI1NjNGMDA5QjY2NzAgLyogU2VjSXRlbVNoaW1Q
cm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4
RTY5MEExNjlCNTYzRjAwOUI2NjcwIC8qIFNlY0l0ZW1TaGltUHJveHkuaCAqLzsgfTsKIAkJRTE4
RTY5MTcxNjlCNjY3QjAwOUI2NjcwIC8qIFNlY0l0ZW1TaGltUHJveHlNZXNzYWdlUmVjZWl2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4RTY5
MTMxNjlCNjY3QjAwOUI2NjcwIC8qIFNlY0l0ZW1TaGltUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3Bw
ICovOyB9OwogCQlFMThFNjkxODE2OUI2NjdCMDA5QjY2NzAgLyogU2VjSXRlbVNoaW1Qcm94eU1l
c3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MThFNjkxNDE2OUI2NjdCMDA5QjY2NzAgLyogU2VjSXRlbVNoaW1Qcm94eU1lc3NhZ2VzLmggKi87
IH07Ci0JCUUxOUJEQTg2MTkzNjY1RTMwMEI5N0Y1NyAvKiBjb20uYXBwbGUuYXBwc3RvcmUuQ29k
ZVJlZGVlbWVyTmV0c2NhcGVQbHVnaW4uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmls
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE5QkRBODQxOTM2NUY0QjAw
Qjk3RjU3IC8qIGNvbS5hcHBsZS5hcHBzdG9yZS5Db2RlUmVkZWVtZXJOZXRzY2FwZVBsdWdpbi5z
YiAqLzsgfTsKIAkJRTFBRUEyMkYxNDY4N0JEQjAwODA0NTY5IC8qIFdLRnVsbEtleWJvYXJkQWNj
ZXNzV2F0Y2hlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTFBRUEyMkQxNDY4N0JEQjAwODA0NTY5IC8qIFdLRnVsbEtleWJvYXJkQWNjZXNzV2F0Y2hl
ci5oICovOyB9OwogCQlFMUI3ODQ3MTE2M0YyNDY5MDAwN0I2OTIgLyogUmVtb3RlTmV0d29ya2lu
Z0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxQjc4NDcwMTYzRjI0NjkwMDA3QjY5MiAvKiBSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oICov
OyB9OwogCQlFMUNDMUI5MDEyRDdFQURGMDA2MjU4MzggLyogUHJpbnRJbmZvLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUNDMUI4RTEyRDdFQURGMDA2
MjU4MzggLyogUHJpbnRJbmZvLmggKi87IH07CkBAIC0yMTYzLDEzICsyMDY0LDYgQEAKIAkJCXJl
bW90ZUdsb2JhbElEU3RyaW5nID0gMzcyRUJCMzgyMDE3RTY0MzAwMDg1MDY0OwogCQkJcmVtb3Rl
SW5mbyA9IFdlYkNvbnRlbnQuRGV2ZWxvcG1lbnQ7CiAJCX07Ci0JCTM3NUUwNjJBMTkxRUE4RDQw
MDRFM0NBRiAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhDb250
YWluZXJJdGVtUHJveHk7Ci0JCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAy
QUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87Ci0JCQlwcm94eVR5cGUgPSAxOwotCQkJcmVtb3Rl
R2xvYmFsSURTdHJpbmcgPSA4REMyRUY0RjA0ODZBNjk0MDA5OEIyMTY7Ci0JCQlyZW1vdGVJbmZv
ID0gV2ViS2l0OwotCQl9OwogCQkzNzVFMDYzMDE5MUVBOTA0MDA0RTNDQUYgLyogUEJYQ29udGFp
bmVySXRlbVByb3h5ICovID0gewogCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OwogCQkJ
Y29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2Jq
ZWN0ICovOwpAQCAtMjE4NCwxMyArMjA3OCw2IEBACiAJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9
IDhEQzJFRjRGMDQ4NkE2OTQwMDk4QjIxNjsKIAkJCXJlbW90ZUluZm8gPSBXZWJLaXQ7CiAJCX07
Ci0JCTM3QjFEMDEzMUMxRTQyMTEwMEQ2N0ZFOSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8g
PSB7Ci0JCQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7Ci0JCQljb250YWluZXJQb3J0YWwg
PSAwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87Ci0JCQlwcm94
eVR5cGUgPSAxOwotCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSAxQUMyNUZBRjEyQTQ4RUE3MDBC
RDI2NzE7Ci0JCQlyZW1vdGVJbmZvID0gUGx1Z2luUHJvY2Vzc1NoaW07Ci0JCX07CiAJCTM3Rjc0
MDc4MTI3MjFGNzQwMDkzODY5QiAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJCQlp
c2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5
MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CkBAIC0yMjgyLDEzICsyMTY5
LDYgQEAKIAkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gQkM4MjgzQjAxNkI0QkY3NzAwQTI3OEZF
OwogCQkJcmVtb3RlSW5mbyA9IE5ldHdvcmtpbmc7CiAJCX07Ci0JCUJDODI4NDQ1MTZCNEZGNjYw
MEEyNzhGRSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhDb250
YWluZXJJdGVtUHJveHk7Ci0JCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAy
QUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87Ci0JCQlwcm94eVR5cGUgPSAxOwotCQkJcmVtb3Rl
R2xvYmFsSURTdHJpbmcgPSBCQzgyODQxRTE2QjRGREY2MDBBMjc4RkU7Ci0JCQlyZW1vdGVJbmZv
ID0gUGx1Z2luLjY0OwotCQl9OwogCQlCQ0E4RDQ2NzE1QkNFMEQ2MDA5REMxRjEgLyogUEJYQ29u
dGFpbmVySXRlbVByb3h5ICovID0gewogCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5Owog
CQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qg
b2JqZWN0ICovOwpAQCAtMjMyNCwxMyArMjIwNCw2IEBACiAJCQlyZW1vdGVHbG9iYWxJRFN0cmlu
ZyA9IDhEQzJFRjRGMDQ4NkE2OTQwMDk4QjIxNjsKIAkJCXJlbW90ZUluZm8gPSBXZWJLaXQ7CiAJ
CX07Ci0JCUUxQUMyRTJEMjBGN0I5ODgwMEIwODk3RCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkg
Ki8gPSB7Ci0JCQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7Ci0JCQljb250YWluZXJQb3J0
YWwgPSAwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87Ci0JCQlw
cm94eVR5cGUgPSAxOwotCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSBFMUFDMkUyNzIwRjdCOTRD
MDBCMDg5N0Q7Ci0JCQlyZW1vdGVJbmZvID0gIlVubG9jayBLZXljaGFpbiI7Ci0JCX07CiAJCUUx
QUMyRTMxMjBGN0I5OUIwMEIwODk3RCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSAwODY3
RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CkBAIC0yMzUyLDEzICsy
MjI1LDYgQEAKIAkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gRTFBQzJFMjcyMEY3Qjk0QzAwQjA4
OTdEOwogCQkJcmVtb3RlSW5mbyA9ICJVbmxvY2sgS2V5Y2hhaW4iOwogCQl9OwotCQlFMUFDMkUz
OTIwRjdCOUE3MDBCMDg5N0QgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewotCQkJaXNh
ID0gUEJYQ29udGFpbmVySXRlbVByb3h5OwotCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBG
RTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOwotCQkJcHJveHlUeXBlID0gMTsK
LQkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gRTFBQzJFMjcyMEY3Qjk0QzAwQjA4OTdEOwotCQkJ
cmVtb3RlSW5mbyA9ICJVbmxvY2sgS2V5Y2hhaW4iOwotCQl9OwogCQlFMUFDMkUzRDIwRjdCOUMw
MDBCMDg5N0QgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewogCQkJaXNhID0gUEJYQ29u
dGFpbmVySXRlbVByb3h5OwogCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMw
MkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOwpAQCAtMjQwMiwzOSArMjI2OCwxMCBAQAogCQkJ
ZHN0UGF0aCA9ICIiOwogCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDEwOwogCQkJZmlsZXMgPSAoCi0J
CQkJMzdCMEQxODQxQzFFNDk5QTAwRDQwRDY0IC8qIFBsdWdpblByb2Nlc3NTaGltLmR5bGliIGlu
IENvcHkgU2hpbXMgKi8sCiAJCQkpOwogCQkJbmFtZSA9ICJDb3B5IFNoaW1zIjsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwotCQk3Q0IxNkZFRTE3MjRC
QTA1MDA3QTBBOTUgLyogQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8gPSB7Ci0JCQlp
c2EgPSBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKLQkJCWRzdFBhdGggPSBQbHVnSW5TYW5kYm94UHJvZmlsZXM7Ci0JCQlkc3RTdWJmb2xk
ZXJTcGVjID0gNzsKLQkJCWZpbGVzID0gKAotCQkJCTQxNDM3NTFDMjBFQUVBMkQwMEZBRDA2QyAv
KiBjbi5taWNyb2RvbmUuY21iLnNhZmFyaS5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9m
aWxlcyAqLywKLQkJCQlFMTlCREE4NjE5MzY2NUUzMDBCOTdGNTcgLyogY29tLmFwcGxlLmFwcHN0
b3JlLkNvZGVSZWRlZW1lck5ldHNjYXBlUGx1Z2luLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94
IFByb2ZpbGVzICovLAotCQkJCTQxMTJFRERCMjBFNDA3QTUwMEJFQTkyQSAvKiBjb20uYXBwbGUu
Qm9jb21TdWJtaXRDdHJsLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovLAot
CQkJCTdDQjE2RkVGMTcyNEJBMjMwMDdBMEE5NSAvKiBjb20uYXBwbGUuaXN0LmRzLmFwcGxlY29u
bmVjdC53ZWJwbHVnaW4uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8sCi0J
CQkJNDExMkVEREMyMEU0MDdBNTAwQkVBOTJBIC8qIGNvbS5hcHBsZS5OUFNhZmVJbnB1dC5zYiBp
biBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLywKLQkJCQk0MTEyRURERDIwRTQwN0E1
MDBCRUE5MkEgLyogY29tLmFwcGxlLk5QU2FmZVN1Ym1pdC5zYiBpbiBDb3B5IFBsdWctaW4gU2Fu
ZGJveCBQcm9maWxlcyAqLywKLQkJCQk3Q0IxNkZGMDE3MjRCQTI0MDA3QTBBOTUgLyogY29tLmFw
cGxlLlF1aWNrVGltZSBQbHVnaW4ucGx1Z2luLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFBy
b2ZpbGVzICovLAotCQkJCTdBNzcyQzhEMURERDRBMjUwMDBGMzRGMSAvKiBjb20uYXBwbGUuV2Vi
S2l0LnBsdWdpbi1jb21tb24uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8s
Ci0JCQkJNDExMkVEREUyMEU0MDdBNTAwQkVBOTJBIC8qIGNvbS5jZmNhLm5wU2VjRWRpdEN0bC5N
QUMuQk9DLnBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLywKLQkJ
CQk0MTRERDM3QTIwQkY0OUE1MDA2OTU5RkIgLyogY29tLmNpc2NvLndlYmV4LnBsdWdpbi5ncGM2
NC5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLywKLQkJCQk0MTEyRURERjIw
RTQwN0E1MDBCRUE5MkEgLyogY29tLmNtYmNoaW5hLkNNQlNlY3VyaXR5LnNiIGluIENvcHkgUGx1
Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovLAotCQkJCTQxMTJFREUwMjBFNDA3QTUwMEJFQTkyQSAv
KiBjb20uZnRzYWZlLk5QQVBJLUNvcmUtU2FmZS1Tb2Z0S2V5YmFvcmQucGx1Z2luLnJmYzEwMzRp
ZGVudGlmaWVyLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovLAotCQkJCTQx
M0NDRDUwMjBERUJDNzQwMDY1QTIxQSAvKiBjb20uZ29vZ2xlLmdvb2dsZXRhbGticm93c2VycGx1
Z2luLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovLAotCQkJCTQxNTdFNEIw
MjBFMkVDREYwMEE2QzBENyAvKiBjb20uZ29vZ2xlLm8xZGJyb3dzZXJwbHVnaW4uc2IgaW4gQ29w
eSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8sCi0JCQkJQTEwMkE3MDgxRUMwRUVFOTAwRDgx
RDgyIC8qIGNvbS5tYWNyb21lZGlhLkZsYXNoIFBsYXllciBFU1IucGx1Z2luLnNiIGluIENvcHkg
UGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovLAotCQkJCTdDQjE2RkYyMTcyNEJBMjgwMDdBMEE5
NSAvKiBjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIucGx1Z2luLnNiIGluIENvcHkgUGx1Zy1p
biBTYW5kYm94IFByb2ZpbGVzICovLAotCQkJCTdDQjE2RkYzMTcyNEJBMkYwMDdBMEE5NSAvKiBj
b20ubWljcm9zb2Z0LlNpbHZlcmxpZ2h0UGx1Z2luLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94
IFByb2ZpbGVzICovLAotCQkJCTdDQjE2RkY0MTcyNEJBMzAwMDdBMEE5NSAvKiBjb20ub3JhY2xl
LmphdmEuSmF2YUFwcGxldFBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxl
cyAqLywKLQkJCSk7Ci0JCQluYW1lID0gIkNvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzIjsK
LQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwogCQlBMTU3
OTc2MzI1ODJCMUE1MDA1MjgyMzYgLyogQ29weSBQbHVnLWlucyAqLyA9IHsKIAkJCWlzYSA9IFBC
WENvcHlGaWxlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpA
QCAtMjY4MSwzNCArMjUxOCwxMSBAQAogCQkxQTAwMkQ0MjE5NkIzMzcwMDBCOUFENDQgLyogX1dL
U2Vzc2lvblN0YXRlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
X1dLU2Vzc2lvblN0YXRlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUEwMDJENDYxOTZCMzQ1RDAwQjlBRDQ0IC8qIFNlc3Npb25TdGF0ZUNvZGluZy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNlc3Npb25TdGF0ZUNvZGluZy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEwMDJENDcxOTZCMzQ1RDAwQjlBRDQ0IC8q
IFNlc3Npb25TdGF0ZUNvZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
ZXNzaW9uU3RhdGVDb2RpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEwNDM5
NzQxMjREMDM0ODAwRkZCRkI1IC8qIFBsdWdpblByb2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGx1Z2luUHJvY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkxQTA0Mzk3NTEyNEQwMzQ4MDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbHVnaW5Qcm9jZXNzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEwNDNBMDcxMjREMTFBOTAwRkZCRkI1IC8qIFdlYlBy
b2Nlc3NDb25uZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBy
b2Nlc3NDb25uZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMDQzQTA4
MTI0RDExQTkwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQcm9jZXNzQ29ubmVjdGlvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMDQzQjRDMTI0RDVFMzYwMEZGQkZCNSAvKiBQbHVn
aW5Qcm9jZXNzUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUGx1Z2lu
UHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkx
QTA0M0I1QjEyNEQ1RTlEMDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2Vp
dmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFBsdWdpblByb2Nl
c3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQy
L1BsdWdpblByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07Ci0JCTFBMDQzQjVDMTI0RDVFOUQwMEZGQkZCNSAvKiBQbHVnaW5Q
cm9jZXNzUHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQ
bHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlcy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9QbHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVD
VFNfRElSOyB9OwotCQkxQTA0M0RCRjEyNEZGODc1MDBGRkJGQjUgLyogUGx1Z2luUHJveHkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luUHJveHkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEwNDNEQzAxMjRGRjg3NTAwRkZCRkI1IC8qIFBsdWdpblBy
b3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsdWdpblByb3h5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEwNDNGNTkxMjUxNENGMzAwRkZC
RkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFdlYlByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkxQTA0M0Y2NzEyNTE0RDhCMDBGRkJGQjUgLyogV2ViUHJvY2Vzc0Nvbm5l
Y3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gV2ViUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0gRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5j
cHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTFBMDQzRjY4MTI1MTRE
OEIwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaDsgcGF0
aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5o
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkxQTA0RjYxNzFBNEEzQTdB
MDBBMjFCNkUgLyogV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQcm9jZXNzUHJveHlDb2NvYS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUEwOEZFRTIxRDU5M0NGMTAwOEJBOENCIC8qIFdlYlBsdWdpbklu
Zm9Qcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQ
bHVnaW5JbmZvUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTA4
RkVFMzFENTkzQ0YxMDA4QkE4Q0IgLyogV2ViUGx1Z2luSW5mb1Byb3ZpZGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsdWdpbkluZm9Qcm92aWRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQTBDMjI3QzI0NTExMzBBMDBFRDYxNEQgLyogUXVpY2tM
b29rVGh1bWJuYWlsaW5nU29mdExpbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVpY2tMb29rVGh1bWJu
YWlsaW5nU29mdExpbmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEwQzIyN0Qy
NDUxMTMwQTAwRUQ2MTREIC8qIFF1aWNrTG9va1RodW1ibmFpbGluZ1NvZnRMaW5rLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gUXVpY2tMb29rVGh1bWJuYWlsaW5nU29mdExpbmsubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMEVDNjAxMTI0QTlGMkMwMDdFRjRBNSAvKiBQbHVn
aW5Qcm9jZXNzTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVn
aW5Qcm9jZXNzTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTBFQzYw
MjEyNEE5RjJDMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc01hbmFnZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGx1Z2luUHJvY2Vzc01hbmFnZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTBFQzZCMTEyNEJCRDM2MDA3RUY0QTUgLyogUGx1
Z2luUHJvY2Vzcy5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQbHVnaW5Qcm9j
ZXNzLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTBFQzZCRDEy
NEJCRDlCMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXgg
PSAxOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFBsdWdp
blByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9QbHVnaW5Qcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BS
T0RVQ1RTX0RJUjsgfTsKLQkJMUEwRUM2QkUxMjRCQkQ5QjAwN0VGNEE1IC8qIFBsdWdpblByb2Nl
c3NNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQbHVnaW5Qcm9j
ZXNzTWVzc2FnZXMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJvY2Vz
c01lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTFBMEVD
NzVDMTI0QkM3QjIwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzUHJveHkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luUHJvY2Vzc1Byb3h5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTFBMEVDNzVEMTI0QkM3QjIwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNz
UHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGx1Z2luUHJv
Y2Vzc1Byb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEwRUM5MDQxMjRD
MEFCODAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdpblByb2Nlc3NDb25uZWN0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTFBMEVDOTA1MTI0QzBBQjgwMDdFRjRBNSAvKiBQbHVnaW5Qcm9j
ZXNzQ29ubmVjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTFBMEVDOTBEMTI0QzBBRjUwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFn
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb25NYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMEVDOTBFMTI0
QzBBRjUwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25N
YW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEwRjI5RTExMjBCNDQ0
MjAwNTNEMUI5IC8qIFZpc2l0ZWRMaW5rU3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVmlzaXRlZExpbmtTdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFBMEYyOUUyMTIwQjQ0NDIwMDUzRDFCOSAvKiBWaXNpdGVkTGlua1N0b3JlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpc2l0ZWRMaW5rU3RvcmUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUExNEY4REYxRDc0QzgzNDAwNkNCRUM2IC8qIEZy
YW1lSW5mb0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnJh
bWVJbmZvRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzE3LDggKzI1
MzEsNiBAQAogCQkxQTE1ODQxODE4OTA0NEY1MDAxNzYxNkMgLyogV0tQcm9jZXNzUG9vbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1Byb2Nlc3NQb29sLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMTc2MzU0MTZCMUQ1RDAwMEQ4OEZENiAvKiBTdG9yYWdl
TmFtZXNwYWNlSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
dG9yYWdlTmFtZXNwYWNlSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFB
MTc2MzU1MTZCMUQ1RDAwMEQ4OEZENiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlTmFtZXNwYWNlSW1wbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkxQTE3OTc3RDEzN0VFODJDMDBGOTdENDUgLyogUGx1Z2lu
Q3JlYXRpb25QYXJhbWV0ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTFBMTc5NzdFMTM3RUU4MkMwMEY5N0Q0NSAvKiBQbHVnaW5DcmVhdGlvblBhcmFtZXRl
cnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luQ3JlYXRpb25QYXJh
bWV0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMUIwRUIzMThBNDI0OTUw
MDM4NDgxQSAvKiBXS05hdmlnYXRpb25SZXNwb25zZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdLTmF2aWdhdGlvblJlc3BvbnNlLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQTFCMEVCNDE4QTQyNDk1MDAzODQ4MUEgLyogV0tOYXZpZ2F0aW9u
UmVzcG9uc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tOYXZpZ2F0aW9u
UmVzcG9uc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUExQjBFQjcxOEE0MjRD
RDAwMzg0ODFBIC8qIFdLTmF2aWdhdGlvblJlc3BvbnNlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0tOYXZpZ2F0aW9uUmVzcG9uc2VJbnRlcm5hbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjcyOCwxOSArMjU0MCw5IEBACiAJCTFBMUUwOTMy
MTg4NjFEMzgwMEQyREM0OSAvKiBXZWJQcm9ncmVzc1RyYWNrZXJDbGllbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUHJvZ3Jlc3NUcmFja2VyQ2xpZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMUVDNjlEMTg3MjA5MjEwMEI5NTFGMCAvKiBJbXBv
cnRhbmNlQXNzZXJ0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltcG9y
dGFuY2VBc3NlcnRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUExRUYxOTcx
QTFENUI0MjAwMjMyMDBBIC8qIEFQSURhdGFDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IEFQSURhdGFDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMUExRkEyNTExMjdBMEU0RjAwNTBFNzA5IC8qIE5QUmVtb3RlT2JqZWN0TWFwLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5QUmVtb3RlT2JqZWN0TWFwLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMUZBMjUyMTI3QTBFNEYwMDUwRTcwOSAvKiBO
UFJlbW90ZU9iamVjdE1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBOUFJlbW90ZU9iamVjdE1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFB
MUZBMjgzMTI3QTEzQkMwMDUwRTcwOSAvKiBOUE9iamVjdFByb3h5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5QT2JqZWN0UHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMUExRkEyODQxMjdBMTNCQzAwNTBFNzA5IC8qIE5QT2JqZWN0UHJveHkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTlBPYmplY3RQcm94eS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMUZBMzVCMTI3QTQ1QkYwMDUwRTcwOSAvKiBO
UE9iamVjdE1lc3NhZ2VSZWNlaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkxQTFGQTM1QzEyN0E0NUJGMDA1MEU3MDkgLyogTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTlBPYmplY3RNZXNzYWdlUmVj
ZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTFGRUMxOTE2MjdCM0VG
MDA3MDBGNkQgLyogV2ViQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJDb25uZWN0aW9u
Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTFGRUMxQTE2MjdC
NDU2MDA3MDBGNkQgLyogV2ViQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVy
LmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViQ29ubmVjdGlvbk1lc3NhZ2VS
ZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTFBMUZF
QzFCMTYyN0I0NTcwMDcwMEY2RCAvKiBXZWJDb25uZWN0aW9uTWVzc2FnZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQ29ubmVjdGlvbk1lc3NhZ2VzLmg7IHBhdGggPSBE
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYkNvbm5lY3Rpb25NZXNzYWdlcy5oOyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkxQTIxNjFBRTExRjM3NjY0MDA4QUQwRjUgLyog
TlBSdW50aW1lT2JqZWN0TWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5Q
UnVudGltZU9iamVjdE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTIxNjFB
RjExRjM3NjY0MDA4QUQwRjUgLyogTlBSdW50aW1lT2JqZWN0TWFwLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5QUnVudGltZU9iamVjdE1hcC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMjE2MkFFMTFGMzg5NzEwMDhBRDBGNSAvKiBOUFJ1bnRp
bWVVdGlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTlBS
dW50aW1lVXRpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEyMTYy
QUYxMUYzODk3MTAwOEFEMEY1IC8qIE5QUnVudGltZVV0aWxpdGllcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBOUFJ1bnRpbWVVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUEyMkYwRkYxMjg5RkNEOTAwODVFNzRGIC8qIFdLQnVuZGxlUGFnZU92
ZXJsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCdW5kbGVQYWdlT3Zl
cmxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTIyRjEwMDEyODlGQ0Q5MDA4
NUU3NEYgLyogV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXS0J1bmRsZVBhZ2VPdmVybGF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUEyNDY0RjIxODkxRTQ1MTAwMjM0QzVCIC8qIEFQSUxvYWRlckNsaWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElMb2FkZXJDbGllbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3NTEsMjIgKzI1NTMsNyBAQAogCQkxQTI1NkUz
NjE4QTFBNzg4MDA2RkI5MjIgLyogV0tOYXZpZ2F0aW9uQWN0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdLTmF2aWdhdGlvbkFjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQTI1NkUzOTE4QTFBN0RGMDA2RkI5MjIgLyogV0tOYXZpZ2F0aW9uQWN0
aW9uSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tOYXZpZ2F0
aW9uQWN0aW9uSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEyOEI4
Q0IxQzgwRUQ1OTAwNkZENzQzIC8qIFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vic2l0ZURhdGFGZXRjaE9wdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkxQTJCQjZDQzE0MTE3QTVGMDAwRjM1RDQgLyogUGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUGx1
Z2luUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTFBMkJCNkNFMTQxMTdCNEQwMDBGMzVENCAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlv
bk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJp
dmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVy
LmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJMUEyQkI2Q0YxNDEx
N0I0RDAwMEYzNUQ0IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdl
cy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlv
bk1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTFBMkQy
NTJBMTk0Njg4RkQwMDQ1MzdCMCAvKiBXS0Vycm9ySW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0tFcnJvckludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTFBMkQ4NDExMTI3RjY0RTgwMDFFQjk2MiAvKiBOUE9iamVjdE1lc3NhZ2VSZWNl
aXZlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOUE9iamVjdE1lc3NhZ2VS
ZWNlaXZlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEyRDg0
MzcxMjdGNjVENTAwMUVCOTYyIC8qIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyTWVzc2FnZVJlY2Vp
dmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5QT2JqZWN0TWVz
c2FnZVJlY2VpdmVyTWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dl
YktpdDIvTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkxQTJEODQzODEyN0Y2NUQ1MDAxRUI5NjIg
LyogTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXJNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlck1lc3NhZ2VzLmg7IHBhdGggPSBE
ZXJpdmVkU291cmNlcy9XZWJLaXQyL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVyTWVzc2FnZXMuaDsg
c291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJMUEyRDg0ODkxMjdGNkE0OTAw
MUVCOTYyIC8qIE5QSWRlbnRpZmllckRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTlBJZGVudGlmaWVyRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkx
QTJEODQ4QTEyN0Y2QTQ5MDAxRUI5NjIgLyogTlBJZGVudGlmaWVyRGF0YS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOUElkZW50aWZpZXJEYXRhLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEyRDg0QTExMjdGNkFEMTAwMUVCOTYyIC8qIE5QVmFy
aWFudERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTlBWYXJpYW50RGF0
YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTJEODRBMjEyN0Y2QUQxMDAxRUI5
NjIgLyogTlBWYXJpYW50RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBOUFZhcmlhbnREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEy
RDkwQkExMjgxQzkzMTAwMUVCOTYyIC8qIFBsdWdpblByb2Nlc3NQcm94eU1hYy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsdWdpblByb2Nlc3NQcm94eU1hYy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEyRDkwRDAxMjgxQzk2NjAwMUVCOTYy
IC8qIFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkxQTJEOTBEMTEyODFDOTY2MDAxRUI5NjIgLyogUGx1Z2lu
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEyRDkxQTUxMjgxRDczOTAwMUVCOTYyIC8qIFBsdWdpbkNv
bnRyb2xsZXJQcm94eU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFBsdWdpbkNvbnRyb2xsZXJQcm94eU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMUEyRDkyMjAxMjgxREMxQjAwMUVCOTYyIC8qIFBsdWdpblByb3h5TWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGx1Z2luUHJveHlNYWMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMkQ5NTZEMTI4NDg1NjQwMDFFQjk2MiAvKiBB
dXhpbGlhcnlQcm9jZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1eGls
aWFyeVByb2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEyRDk1NkUxMjg0
ODU2NDAwMUVCOTYyIC8qIEF1eGlsaWFyeVByb2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQXV4aWxpYXJ5UHJvY2Vzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFBMzAwNjZDMTExMEY0RjcwMDMxOTM3QyAvKiBSZXNwb25zaXZlbmVzc1Rp
bWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3BvbnNpdmVuZXNzVGlt
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3ODAsNyArMjU2Nyw2IEBACiAJ
CTFBM0NDMTY0MTg5MDZBQ0YwMDFFNkVEOCAvKiBXS1dlYlZpZXcubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYlZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFBM0NDMTY1MTg5MDZBQ0YwMDFFNkVEOCAvKiBXS1dlYlZpZXcuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJWaWV3Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFBM0NDMTY4MTg5MDdFQjAwMDFFNkVEOCAvKiBXS1Byb2Nlc3NQb29s
SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tQcm9jZXNzUG9v
bEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBM0Q2MTAwMTNBN0ND
MkEwMEY5NUQ0RSAvKiBQbHVnaW5Nb2R1bGVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBsdWdpbk1vZHVsZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUEzRDYxMDQxM0E3RjAzQTAwRjk1RDRFIC8qIEFyZ3VtZW50Q29kZXJzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFyZ3VtZW50Q29kZXJzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEzREQyMDUxMjVFNUEyRjAwNDUxNUU2IC8qIEFQSUNs
aWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElDbGllbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEzRTczNUYxMUNDMjY1OTAwN0JENTM5IC8qIFdl
YlBsYXRmb3JtU3RyYXRlZ2llcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4
MDMsMTAgKzI1ODksNiBAQAogCQkxQTQ4MzJENTFBOUNERjk2MDA4QjRERkUgLyogV2Vic2l0ZURh
dGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vic2l0ZURhdGEuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE0ODMyRDgxQTlEMUZEMjAwOEI0REZFIC8qIFdl
YnNpdGVEYXRhUmVjb3JkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdlYnNpdGVEYXRhUmVjb3JkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE0
QTkzQjYxQUVCMDhFQTAwMTUwRTlDIC8qIF9XS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJu
YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE0QTlDNTMxMkI4MTZDRjAwOEZF
OTg0IC8qIE5ldHNjYXBlUGx1Z2luTW9kdWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE5ldHNjYXBlUGx1Z2luTW9kdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMUE0QTlDNTQxMkI4MTZDRjAwOEZFOTg0IC8qIE5ldHNjYXBlUGx1Z2luTW9k
dWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHNjYXBlUGx1Z2luTW9k
dWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBNEE5Qzk5MTJCODIxQ0QwMDhG
RTk4NCAvKiBOZXRzY2FwZVBsdWdpbk1vZHVsZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IE5ldHNjYXBlUGx1Z2luTW9kdWxlTWFjLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkxQTRBOUYzMTEyQjg0NEUyMDA4RkU5ODQgLyogUGx1Z2luUXVp
cmtzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdpblF1aXJrcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTRENjY0NzE4QTJEOTFBMDBEODJFMjEgLyog
QVBJVUlDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJVUlDbGll
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE0RDY2NDkxOEEzMDMwRTAwRDgy
RTIxIC8qIFdLRnJhbWVJbmZvLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV0tGcmFtZUluZm8ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBNEQ2
NjRBMThBMzAzMEUwMEQ4MkUyMSAvKiBXS0ZyYW1lSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXS0ZyYW1lSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjg1OSwxNSArMjY0MSw4IEBACiAJCTFBNkZCN0FEMTFFNjRCNjgwMERCMTM3MSAvKiBQbHVn
aW5WaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdpblZpZXcuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE2RkI3RDAxMUU2NTFFMjAwREIxMzcxIC8q
IFBsdWdpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbHVnaW4u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTZGQjdEMTExRTY1MUUyMDBEQjEz
NzEgLyogUGx1Z2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdpbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTZGQkEyODExRTY4NjI3MDBEQjEzNzEg
LyogTmV0c2NhcGVCcm93c2VyRnVuY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTmV0c2NhcGVCcm93c2VyRnVuY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MUE2RkJBMjkxMUU2ODYyNzAwREIxMzcxIC8qIE5ldHNjYXBlQnJvd3NlckZ1bmNzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHNjYXBlQnJvd3NlckZ1bmNzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE2RkJEMjYxMUU2OUJDMjAwREIxMzcx
IC8qIE5ldHNjYXBlUGx1Z2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5l
dHNjYXBlUGx1Z2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBNkZCRDI3MTFF
NjlCQzIwMERCMTM3MSAvKiBOZXRzY2FwZVBsdWdpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBOZXRzY2FwZVBsdWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFBNzI4NDQ0MTk1OUVEMTAwMDA3QkNFNSAvKiBTZXNzaW9uU3RhdGVDb252ZXJz
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlc3Npb25TdGF0
ZUNvbnZlcnNpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTcyODQ0NTE5
NTlFRDEwMDAwN0JDRTUgLyogU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTZXNzaW9uU3RhdGVDb252ZXJzaW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTFBNzg2NUI2MTZDQUM2RkQwMEFDRTgzQSAvKiBQbHVnaW5Qcm9j
ZXNzQ29ubmVjdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb25NYW5hZ2VyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkx
QTc4NjVCNzE2Q0FDNzE1MDBBQ0U4M0EgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2Vy
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGgg
PSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlck1l
c3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0J
CTFBNzg2NUI4MTZDQUM3MTUwMEFDRTgzQSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFn
ZXJNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQbHVnaW5Qcm9j
ZXNzQ29ubmVjdGlvbk1hbmFnZXJNZXNzYWdlcy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXJNZXNzYWdlcy5oOyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkxQTdDMERGNDFCN0QxRjEwMDBBOUI4NDggLyog
V0tXaW5kb3dGZWF0dXJlc1JlZi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXS1dpbmRvd0ZlYXR1cmVzUmVmLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUE3QzBERjUxQjdEMUYxMDAwQTlCODQ4IC8qIFdLV2luZG93RmVhdHVyZXNSZWYuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXaW5kb3dGZWF0dXJlc1JlZi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTdFMzc3NDE4RTRBMzNBMDAzRDBGRkYgLyogV0tT
Y3JpcHRNZXNzYWdlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
S1NjcmlwdE1lc3NhZ2VIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
ODgzLDE0ICsyNjU4LDYgQEAKIAkJMUE4RTdEMzgxOEMxNTBCRjAwNUE3MDJBIC8qIFZpc2l0ZWRM
aW5rVGFibGVDb250cm9sbGVyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFZp
c2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQThFN0QzQTE4QzE1MTQ5MDA1QTcwMkEgLyogVmlzaXRlZExpbmtUYWJsZUNv
bnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBw
YXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlck1l
c3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJ
CTFBOEU3RDNCMThDMTUxNDkwMDVBNzAyQSAvKiBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlck1l
c3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFZpc2l0ZWRMaW5rVGFi
bGVDb250cm9sbGVyTWVzc2FnZXMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvVmlz
aXRlZExpbmtUYWJsZUNvbnRyb2xsZXJNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJP
RFVDVFNfRElSOyB9OwotCQkxQThFRjRDOTEyNTI0MDM3MDBGNzA2N0YgLyogUGx1Z2luQ29udHJv
bGxlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdpbkNvbnRy
b2xsZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQThFRjRDQTEyNTI0
MDM3MDBGNzA2N0YgLyogUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBOEVGOTQxMTI1MkFFODQwMEY3MDY3RiAvKiBQbHVnaW5D
b250cm9sbGVyUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUGx1Z2lu
Q29udHJvbGxlclByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkxQThFRjk2QzEyNTJBRjZCMDBGNzA2N0YgLyogUGx1Z2luQ29udHJvbGxlclByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFBsdWdp
bkNvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNl
cy9XZWJLaXQyL1BsdWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJj
ZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTFBOEVGOTZEMTI1MkFGNkIwMEY3MDY3
RiAvKiBQbHVnaW5Db250cm9sbGVyUHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBQbHVnaW5Db250cm9sbGVyUHJveHlNZXNzYWdlcy5oOyBwYXRoID0gRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Db250cm9sbGVyUHJveHlNZXNzYWdlcy5oOyBzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkxQThFRkE1QjEyNTJCN0NFMDBGNzA2
N0YgLyogUGx1Z2luUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUGx1
Z2luUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBOEVG
QTZFMTI1MkI4NDEwMEY3MDY3RiAvKiBQbHVnaW5Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQbHVnaW5Qcm94eU1lc3NhZ2VSZWNl
aXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJMUE4
RUZBNkYxMjUyQjg0MTAwRjcwNjdGIC8qIFBsdWdpblByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGx1Z2luUHJveHlNZXNzYWdlcy5oOyBwYXRoID0gRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm94eU1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSBC
VUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTFBOTBDMUVEMTI2NEZENTAwMDNFNDRENCAvKiBXZWJG
aW5kT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJGaW5kT3B0
aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTkwQzFGMjEyNjRGRDcxMDAz
RTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRmluZENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE5MEMx
RjMxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbmRDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTI5MDYsNyArMjY3Myw2IEBACiAJCTFBOUUzMjlEMTgyMkZFREQwMEY1
RDA0QyAvKiBXS1JlbW90ZU9iamVjdENvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdLUmVtb3RlT2JqZWN0Q29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUE5RTMyQTAxODIzMDE4OTAwRjVEMDRDIC8qIF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5SW50
ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLUmVtb3RlT2JqZWN0
UmVnaXN0cnlJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTlGMjgx
MDE5NThGNDc4MDA4Q0FDNzIgLyogV0tCYWNrRm9yd2FyZExpc3RQcml2YXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTlGQkE4QzEzRkYwNEU2MDBERUVENjcgLyogUGx1
Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQUExMzIxMTE5MUQ1OTI0MDA5QzE0ODkgLyogV0tOYXZpZ2F0aW9uUmVzcG9uc2VQ
cml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLTmF2aWdhdGlvblJl
c3BvbnNlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUExQzc5QTEw
MEU3RkM1MDA3OERFQkMgLyogV2ViQ29yZS5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgcGF0aCA9IFdl
YkNvcmUuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkx
QUExQzdERTEwMEU4NDZFMDA3OERFQkMgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFt
ZXdvcms7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CkBAIC0yOTIwLDE1ICsyNjg2LDEyIEBACiAJCTFBQTQxN0M5MTJD
MDBDQ0EwMDJCRTY3QiAvKiBUZXh0Q2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUZXh0Q2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUE0
MTdFRDEyQzAwRDg3MDAyQkU2N0IgLyogVGV4dENoZWNrZXJNYWMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0Q2hlY2tlck1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUFBNDFBQjQxMkMwMkVDNDAwMkJFNjdCIC8qIEVkaXRvclN0YXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVkaXRvclN0YXRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQTQ3OTIyMTJBNTlGRDkwMDgyMzZDMyAvKiBQbHVn
aW5Qcm9jZXNzTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
UGx1Z2luUHJvY2Vzc01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBNTZG
MjgxMUU5MkJDODAwNjFCODgyIC8qIFBsdWdpbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQUE1NzVGODE0OTZCNTI2MDBBNEVFMDYgLyogRXZlbnREaXNwYXRjaGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV2ZW50RGlzcGF0Y2hlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTU3NUY5MTQ5NkI1MjYwMEE0RUUw
NiAvKiBFdmVudERpc3BhdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXZlbnREaXNwYXRjaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTU3NUZE
MTQ5NkI2RjMwMEE0RUUwNiAvKiBFdmVudERpc3BhdGNoZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gRXZlbnREaXNwYXRjaGVyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQUE1NzVGRjE0OTZCN0MwMDBBNEVFMDYgLyogRXZlbnREaXNwYXRj
aGVyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEV2ZW50RGlzcGF0Y2hlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291
cmNlcy9XZWJLaXQyL0V2ZW50RGlzcGF0Y2hlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRy
ZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTFBQTU3NjAwMTQ5NkI3QzAwMEE0RUUwNiAv
KiBFdmVudERpc3BhdGNoZXJNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBFdmVudERpc3BhdGNoZXJNZXNzYWdlcy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9FdmVudERpc3BhdGNoZXJNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVD
VFNfRElSOyB9OwotCQkxQUE1ODg5MDExRUU3MDQwMDA2MUI4ODIgLyogTmV0c2NhcGVQbHVnaW5T
dHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0c2NhcGVQbHVnaW5T
dHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBNTg4OTExMUVFNzA0MDAw
NjFCODgyIC8qIE5ldHNjYXBlUGx1Z2luU3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE5ldHNjYXBlUGx1Z2luU3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUFBNjU0RDAxQjE0RjcxNDAwQkYxRDNFIC8qIFdLV2Vic2l0ZURhdGFS
ZWNvcmRQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0
ZURhdGFSZWNvcmRQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTgz
RjZBMUE1QjYzRkYwMDAyNkVDNiAvKiBXZWJEYXRhYmFzZVByb3ZpZGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkRhdGFiYXNlUHJvdmlkZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUE4M0Y2QjFBNUI2M0ZGMDAwMjZFQzYgLyogV2Vi
RGF0YWJhc2VQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJE
YXRhYmFzZVByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMDE2LDEx
ICsyNzc5LDcgQEAKIAkJMUFDMTMzODMxODU5MEM0NjAwRjNFQzA1IC8qIFJlbW90ZU9iamVjdFJl
Z2lzdHJ5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFJlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERl
cml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlUmVjZWl2ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkxQUMxMzM4NDE4NTkw
QzQ2MDBGM0VDMDUgLyogUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBSZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VzLmg7IHBh
dGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMu
aDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMUFDMTQxNTAxOEFDNDdF
RTAwNkM2MDJDIC8qIFdLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQzI1Rjg5MTJBNDhFMDMwMEJEMjY3MSAvKiBQ
bHVnaW5Qcm9jZXNzU2hpbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVn
aW5Qcm9jZXNzU2hpbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUMyNUY4QTEy
QTQ4RTAzMDBCRDI2NzEgLyogUGx1Z2luUHJvY2Vzc1NoaW0ubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbHVnaW5Qcm9jZXNzU2hpbS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMUFDMjVGQjAxMkE0OEVBNzAwQkQyNjcxIC8qIFBsdWdpblByb2Nl
c3NTaGltLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0g
UGx1Z2luUHJvY2Vzc1NoaW0uZHlsaWI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CiAJCTFBQzRDODI4MTZCODc2QTkwMDY5RENDRCAvKiBNZXNzYWdlRmxhZ3MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVzc2FnZUZsYWdzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTFBQzVGRkMxMTc0QkZEMUIwMDAxNDgzRCAvKiBQbHVnaW5Qcm9jZXNz
QXR0cmlidXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW5Qcm9j
ZXNzQXR0cmlidXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUM3NTM3OTE4
M0E5RkRBMDA3MkNCMTUgLyogUGFnZUxvYWRTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQYWdlTG9hZFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUFDNzUzN0ExODNBOUZEQjAwNzJDQjE1IC8qIFBhZ2VMb2FkU3RhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUxvYWRTdGF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQUM3NTM3RTE4M0JFNTBGMDA3MkNCMTUgLyogRGF0YVJlZmVy
ZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhUmVmZXJlbmNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMDY1LDIwICsyODI0LDEwIEBACiAJCTFB
RTI4NjdGMUM3RjkyQkYwMDY5QUM0RiAvKiBfV0tXZWJzaXRlRGF0YVNpemVJbnRlcm5hbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tXZWJzaXRlRGF0YVNpemVJbnRlcm5h
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUUyODY4MTFDN0Y5Mzg2MDA2OUFD
NEYgLyogQVBJV2Vic2l0ZURhdGFSZWNvcmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQVBJV2Vic2l0ZURhdGFSZWNvcmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQUUyODY4MjFDN0Y5Mzg2MDA2OUFDNEYgLyogQVBJV2Vic2l0ZURhdGFSZWNv
cmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJV2Vic2l0ZURhdGFSZWNv
cmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFFNDk3NjYxMUZGNjU4RTAwNDhC
NDY0IC8qIE5QSlNPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTlBK
U09iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUU0OTc2NzExRkY2NThF
MDA0OEI0NjQgLyogTlBKU09iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBOUEpTT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFF
NDk4NzYxMUZGN0ZBQTAwNDhCNDY0IC8qIEpTTlBPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNOUE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkxQUU0OTg3NzExRkY3RkFBMDA0OEI0NjQgLyogSlNOUE9iamVjdC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU05QT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMUFFNDlBNDcxMUZGQThDRTAwNDhCNDY0IC8qIEpTTlBNZXRob2QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNOUE1ldGhvZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkxQUU0OUE0ODExRkZBOENFMDA0OEI0NjQgLyogSlNOUE1ldGhv
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU05QTWV0aG9kLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFFNTJGOTMxOTIwMUY2QjAwQTFGQTM3
IC8qIFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFBRTUyRjk0MTkyMDFGNkIwMEExRkEzNyAvKiBXS0NvbnRleHRD
b25maWd1cmF0aW9uUmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQ29u
dGV4dENvbmZpZ3VyYXRpb25SZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFF
NUI3RjkxMUU3QUVEMjAwQkE2NzY3IC8qIE5ldHNjYXBlUGx1Z2luTWFjLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmV0c2NhcGVQbHVnaW5NYWMubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRUU1NzIzMjQwOUYxNDIwMDIwMDVENiAvKiBRdWlj
a0xvb2tUaHVtYm5haWxMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVpY2tMb29rVGh1bWJuYWls
TG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRUU1NzI0MjQwOUYxNDIw
MDIwMDVENiAvKiBRdWlja0xvb2tUaHVtYm5haWxMb2FkZXIubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFF1aWNrTG9va1RodW1ibmFpbExvYWRlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMUFFRkNDMTAxMUQwMUY5NjAwODIxOUQzIC8qIFBsdWdpbkluZm9TdG9yZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW5JbmZvU3RvcmUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFFRkNDMTExMUQwMUY5NjAwODIxOUQzIC8qIFBsdWdpbklu
Zm9TdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbHVnaW5J
bmZvU3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUVGQ0NCQzExRDAy
QzVFMDA4MjE5RDMgLyogUGx1Z2luSW5mb1N0b3JlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gUGx1Z2luSW5mb1N0b3JlTWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQUVGRDI3ODExRDE2QzgxMDA4MjE5RDMgLyogQXJndW1lbnRDb2Rl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcmd1bWVudENvZGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRUZEMkY2MTFEMTgwN0IwMDgyMTlEMyAvKiBB
cmd1bWVudENvZGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcmd1bWVu
dENvZGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUYwNUQ4NDE0Njg4MzQ4
MDA4QjFFODEgLyogVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdp
bmdBcmVhUHJveHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zODQyLDEyICsz
NTkxLDYgQEAKIAkJNDExMkI1NDcxRjlGRDNBQjAwRTY3OTg2IC8qIE5ldHdvcmtSVENSZXNvbHZl
ckNvY29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtS
VENSZXNvbHZlckNvY29hLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDExMkI1
NDgxRjlGRDNBQzAwRTY3ODc1IC8qIE5ldHdvcmtSVENSZXNvbHZlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrUlRDUmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDExMkI1NDgxRjlGRDNBQzAwRTY3OTg2IC8qIE5ldHdvcmtSVENSZXNv
bHZlckNvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtSVENS
ZXNvbHZlckNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxMTJFREQyMjBF
NDA3NzMwMEJFQTkyQSAvKiBjb20uZnRzYWZlLk5QQVBJLUNvcmUtU2FmZS1Tb2Z0S2V5YmFvcmQu
cGx1Z2luLnJmYzEwMzRpZGVudGlmaWVyLnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9ICJjb20u
ZnRzYWZlLk5QQVBJLUNvcmUtU2FmZS1Tb2Z0S2V5YmFvcmQucGx1Z2luLnJmYzEwMzRpZGVudGlm
aWVyLnNiIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDExMkVERDMyMEU0MDc3NDAw
QkVBOTJBIC8qIGNvbS5jZmNhLm5wU2VjRWRpdEN0bC5NQUMuQk9DLnBsdWdpbi5zYiAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBjb20uY2ZjYS5ucFNlY0VkaXRDdGwuTUFDLkJPQy5wbHVnaW4uc2I7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxMTJFREQ1MjBFNDA3NzQwMEJFQTkyQSAv
KiBjb20uY21iY2hpbmEuQ01CU2VjdXJpdHkuc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gY29t
LmNtYmNoaW5hLkNNQlNlY3VyaXR5LnNiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0
MTEyRURENzIwRTQwNzc1MDBCRUE5MkEgLyogY29tLmFwcGxlLk5QU2FmZVN1Ym1pdC5zYiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBjb20uYXBwbGUuTlBTYWZlU3VibWl0LnNiOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk0MTEyRUREODIwRTQwNzc1MDBCRUE5MkEgLyogY29tLmFwcGxl
Lk5QU2FmZUlucHV0LnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGNvbS5hcHBsZS5OUFNhZmVJ
bnB1dC5zYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDExMkVERDkyMEU0MDc3NTAw
QkVBOTJBIC8qIGNvbS5hcHBsZS5Cb2NvbVN1Ym1pdEN0cmwuc2IgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gY29tLmFwcGxlLkJvY29tU3VibWl0Q3RybC5zYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDExOERDMUIyMUU2RDExQTAwREUwNEM3IC8qIFdlYnNpdGVEYXRhU3RvcmVDbGll
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vic2l0ZURhdGFTdG9yZUNs
aWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTFBOEREOTIwRERCNjA1MDA2
MEQzNEYgLyogV0tNb2NrTWVkaWFEZXZpY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0tNb2NrTWVkaWFEZXZpY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDExQThEREEyMEREQjYwNTAwNjBEMzRGIC8qIFdLTW9ja01lZGlhRGV2aWNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLTW9ja01lZGlhRGV2aWNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM4NzgsMTYgKzM2MjEsMTIgQEAKIAkJNDEzNUZC
Q0YxRjRGQjdGMjAwNzRDNDdCIC8qIENhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTM1RkJEMDFGNEZCN0YyMDA3NEM0
N0IgLyogQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MTNDOEIxMzI1NTE2QkZBMDBFNjUwNTUgLyogTGliV2ViUlRDQ29kZWNzLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gTGliV2ViUlRDQ29kZWNzLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk0MTNDQ0Q0RjIwREVCQzJGMDA2NUEyMUEgLyogY29tLmdvb2dsZS5n
b29nbGV0YWxrYnJvd3NlcnBsdWdpbi5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBjb20uZ29v
Z2xlLmdvb2dsZXRhbGticm93c2VycGx1Z2luLnNiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk0MTQzNzUxQjIwRUFFQTFFMDBGQUQwNkMgLyogY24ubWljcm9kb25lLmNtYi5zYWZhcmku
c2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gY24ubWljcm9kb25lLmNtYi5zYWZhcmkuc2I7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxNEREMzc4MjBCRjQzRUEwMDY5NTlGQiAvKiBj
b20uY2lzY28ud2ViZXgucGx1Z2luLmdwYzY0LnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGNv
bS5jaXNjby53ZWJleC5wbHVnaW4uZ3BjNjQuc2I7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQxNTBBNUEwMjNFMDZDOTEwMDUxMjY0QSAvKiBHUFVQcm9jZXNzU2Vzc2lvblBhcmFtZXRl
cnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR1BVUHJvY2Vzc1Nlc3Npb25Q
YXJhbWV0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNTE4NTM1MjIyNzA0
RjUwMDU0MzBDNiAvKiBTZXJ2aWNlV29ya2VyRmV0Y2hUYXNrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNlcnZpY2VXb3JrZXJGZXRjaFRhc2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDE1MTg1MzYyMjI3MDRGNjAwNTQzMEM2IC8qIFNlcnZpY2VXb3JrZXJG
ZXRjaFRhc2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Vydmlj
ZVdvcmtlckZldGNoVGFzay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNTE4
NTM4MjIyNzBGNTMwMDU0MzBDNiAvKiBTZXJ2aWNlV29ya2VyRmV0Y2hUYXNrLm1lc3NhZ2VzLmlu
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNlcnZpY2VXb3JrZXJGZXRjaFRhc2subWVzc2FnZXMu
aW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNTFFNUMzMUZCQjkwQTkwMEU0N0Uy
RCAvKiBGb3JtRGF0YVJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGb3JtRGF0YVJlZmVyZW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTU3
ODUzMDIxMjc2QjZGMDBERDM4MDAgLyogY29weS13ZWJjb250ZW50LXJlc291cmNlcy10by1wcml2
YXRlLWhlYWRlcnMuc2ggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnNjcmlwdC5zaDsgcGF0aCA9ICJjb3B5LXdlYmNvbnRlbnQtcmVzb3VyY2Vz
LXRvLXByaXZhdGUtaGVhZGVycy5zaCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQx
NTdFNEFGMjBFMkVDOTgwMEE2QzBENyAvKiBjb20uZ29vZ2xlLm8xZGJyb3dzZXJwbHVnaW4uc2Ig
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gY29tLmdvb2dsZS5vMWRicm93c2VycGx1Z2luLnNiOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTU4NjQ5QTIzQkUwOTI0MDBBMEE2MUUgLyog
UlRDRW5jb2RlcklkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UlRDRW5jb2RlcklkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2
MDA4QjEyNURBODZCOTAwRTg5MkZFIC8qIFJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2VQcm94eS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlUHJveHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2MDA4QjIyNURBODk1QjAwRTg5MkZFIC8qIFJlbW90
ZVJlYWx0aW1lTWVkaWFTb3VyY2VQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVS
ZWFsdGltZU1lZGlhU291cmNlUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNDc4OSw3ICs0NTI4LDYgQEAKIAkJN0EzQUNFMUExRUVFRjc4QzAwQTg2NEE0IC8qIEFQSUlu
amVjdGVkQnVuZGxlUGFnZUxvYWRlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBUElJbmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0EzRkVDQTEyMUY3QzA5NzAwRjI2N0NEIC8qIFN0b3JhZ2VBY2Nl
c3NTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3RvcmFnZUFjY2Vz
c1N0YXR1cy5oOyBwYXRoID0gQ2xhc3NpZmllci9TdG9yYWdlQWNjZXNzU3RhdHVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBNDFFOUZBMjFGODFEQUMwMEI4OENEQiAvKiBTaG91
bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmg7IHBhdGggPSBDbGFzc2lmaWVyL1Nob3Vs
ZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3
QTVFMzk0OTFENUJEOEE3MDBCNEI3Q0UgLyogY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyIEVT
Ui5wbHVnaW4uc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gImNvbS5tYWNyb21lZGlhLkZsYXNo
IFBsYXllciBFU1IucGx1Z2luLnNiIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E3
OEZGMkUyMjQxOTE3NTAwOTY0ODNFIC8qIFdLU3RvcmFnZUFjY2Vzc0FsZXJ0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLU3RvcmFnZUFjY2Vzc0FsZXJ0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBNzhGRjJGMjI0MTkxNzYwMDk2NDgzRSAvKiBXS1N0b3Jh
Z2VBY2Nlc3NBbGVydC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFdLU3RvcmFnZUFjY2Vzc0FsZXJ0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QTgyMUY0OTFFMkY2NUREMDA2MDQ1NzcgLyogTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJv
eHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwOyBwYXRoID0gQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTQ4NDksNyArNDU4Nyw2IEBACiAJCTdDMDY1RjJBMUM4Q0Q5NUYwMEMyRDk1MCAvKiBXZWJV
c2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDMTM1QUE2MTczQjBCQ0EwMDU4NkFFMiAvKiBXS1BsdWdpbklu
Zm9ybWF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLUGx1
Z2luSW5mb3JtYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzEzNUFB
NzE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1hdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXS1BsdWdpbkluZm9ybWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTdDMTM1QUFBMTczQjBDRkYwMDU4NkFFMiAvKiBQbHVnaW5JbmZvcm1h
dGlvbk1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsdWdp
bkluZm9ybWF0aW9uTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzFCQTMz
QjFBNEEwRTYwMDA0M0UyNDkgLyogQVBJRGljdGlvbmFyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBUElEaWN0aW9uYXJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0MxQkEzM0MxQTRBMEU2MDAwNDNFMjQ5IC8qIEFQSURpY3Rpb25hcnkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJRGljdGlvbmFyeS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QzI0MTMwMDFBQUNGQTc1MDBBNThDMTUgLyogX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC00ODY1LDggKzQ2MDIsNiBAQAogCQk3QzM4NzQzMzE3MkY1NjE1MDAx
QkQ4OEEgLyogUGFnZUJhbm5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBQYWdlQmFubmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzQTA2
QTUxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzQTA2QTYxQUFCOTAzRTAwOUQ3NEJB
IC8qIEFQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTdDM0Y4QzhFMTczQUY1MkQwMDdCN0YzOSAvKiBQbHVnaW5JbmZvcm1hdGlvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbHVnaW5JbmZvcm1hdGlvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDM0Y4QzhGMTczQUY1MkQwMDdCN0Yz
OSAvKiBQbHVnaW5JbmZvcm1hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQbHVnaW5JbmZvcm1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzQ2
OTRDNzFBNEI0RUEwMDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYlBhc3RlYm9hcmRQ
cm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dl
YlBhc3RlYm9hcmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9Q
Uk9EVUNUU19ESVI7IH07CiAJCTdDNDY5NEM4MUE0QjRFQTEwMEFENTg0NSAvKiBXZWJQYXN0ZWJv
YXJkUHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJQ
YXN0ZWJvYXJkUHJveHlNZXNzYWdlcy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9X
ZWJQYXN0ZWJvYXJkUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNf
RElSOyB9OwogCQk3QzQ2OTRDQjFBNEI1MTBBMDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5
Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQYXN0
ZWJvYXJkUHJveHlDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ5MDks
MTIgKzQ2NDQsNiBAQAogCQk3Q0IxMDBFRTFGQTJENzRBMDAxNzI5RUUgLyogV2ViUHJlZmVyZW5j
ZXNLZXlzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYlByZWZlcmVuY2VzS2V5cy5jcHA7IHBh
dGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYlByZWZlcmVuY2VzS2V5cy5jcHA7IHNvdXJj
ZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTdDQjEwMEVGMUZBMkQ3NEIwMDE3MjlF
RSAvKiBXZWJQcmVmZXJlbmNlc0tleXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViUHJlZmVyZW5jZXNL
ZXlzLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYlByZWZlcmVuY2VzS2V5cy5o
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk3Q0IxMDBGMDFGQTJENzg0
MDAxNzI5RUUgLyogV2ViUHJlZmVyZW5jZXNTdG9yZURlZmF1bHRzTWFwLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFdlYlByZWZlcmVuY2VzU3RvcmVEZWZhdWx0c01hcC5jcHA7IHBhdGggPSBEZXJp
dmVkU291cmNlcy9XZWJLaXQyL1dlYlByZWZlcmVuY2VzU3RvcmVEZWZhdWx0c01hcC5jcHA7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTdDQjE2RkUyMTcyNEI5QjUwMDdB
MEE5NSAvKiBjb20uYXBwbGUuaXN0LmRzLmFwcGxlY29ubmVjdC53ZWJwbHVnaW4uc2IgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gY29tLmFwcGxlLmlzdC5kcy5hcHBsZWNvbm5lY3Qud2VicGx1Z2lu
LnNiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3Q0IxNkZFMzE3MjRCOUI1MDA3QTBB
OTUgLyogY29tLmFwcGxlLlF1aWNrVGltZSBQbHVnaW4ucGx1Z2luLnNiICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9ICJjb20uYXBwbGUuUXVpY2tUaW1lIFBsdWdpbi5wbHVnaW4uc2IiOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk3Q0IxNkZFNDE3MjRCOUI1MDA3QTBBOTUgLyogY29tLmFw
cGxlLldlYktpdC5wbHVnaW4tY29tbW9uLnNiLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9ICJj
b20uYXBwbGUuV2ViS2l0LnBsdWdpbi1jb21tb24uc2IuaW4iOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk3Q0IxNkZFNTE3MjRCOUI1MDA3QTBBOTUgLyogY29tLm1hY3JvbWVkaWEuRmxh
c2ggUGxheWVyLnBsdWdpbi5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSAiY29tLm1hY3JvbWVk
aWEuRmxhc2ggUGxheWVyLnBsdWdpbi5zYiI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTdDQjE2RkU2MTcyNEI5QjUwMDdBMEE5NSAvKiBjb20ubWljcm9zb2Z0LlNpbHZlcmxpZ2h0UGx1
Z2luLnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGNvbS5taWNyb3NvZnQuU2lsdmVybGlnaHRQ
bHVnaW4uc2I7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDQjE2RkU3MTcyNEI5QjUw
MDdBMEE5NSAvKiBjb20ub3JhY2xlLmphdmEuSmF2YUFwcGxldFBsdWdpbi5zYiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBjb20ub3JhY2xlLmphdmEuSmF2YUFwcGxldFBsdWdpbi5zYjsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NCMzY1QTgxRDMxREI3MDAwNzE1OENBIC8qIF9XS1Vz
ZXJJbml0aWF0ZWRBY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dL
VXNlckluaXRpYXRlZEFjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0Iz
NjVBOTFEMzFEQjcwMDA3MTU4Q0EgLyogX1dLVXNlckluaXRpYXRlZEFjdGlvbi5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS1VzZXJJbml0aWF0ZWRBY3Rpb24u
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQjM2NUFDMUQzMURDMTAwMDcxNThD
QSAvKiBfV0tVc2VySW5pdGlhdGVkQWN0aW9uSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gX1dLVXNlckluaXRpYXRlZEFjdGlvbkludGVybmFsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00OTMwLDggKzQ2NTksNiBAQAogCQk3Q0Q1RUJCQTE3NDZB
ODNFMDAwQzFDNDUgLyogV0tCYXNlTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdLQmFzZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0Q1RUJCQzE3
NDZCMDRDMDAwQzFDNDUgLyogV0tUeXBlUmVmV3JhcHBlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLVHlwZVJlZldyYXBwZXIubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDRDVFQkJEMTc0NkIwNEMwMDBDMUM0NSAvKiBXS1R5cGVSZWZXcmFw
cGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLVHlwZVJlZldyYXBwZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0NENjIyNzUxNzM5RDg2MzAwNUJEN0ZG
IC8qIFBsdWdpblNhbmRib3hQcm9maWxlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gUGx1Z2luU2FuZGJveFByb2ZpbGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTdDRDYyMjc2MTczOUQ4NjMwMDVCRDdGRiAvKiBQbHVnaW5TYW5kYm94UHJvZmls
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW5TYW5kYm94UHJvZmls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0RFNzNBMDFGOURBMzdCMDAzOTAz
MTIgLyogV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYlByZWZlcmVuY2VzRGVmYXVsdFZhbHVlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3Q0RFNzNBMjFGOURBNTk3MDAzOTAzMTIgLyogUHJlZmVyZW5jZXNU
ZW1wbGF0ZXMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBmb2xkZXI7IHBhdGggPSBQcmVmZXJlbmNlc1RlbXBsYXRlczsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0NERTczQTMxRjlEQUI2NTAwMzkwMzEyIC8qIFdlYlByZWZlcmVuY2VzRGVm
aW5pdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViUHJlZmVyZW5jZXNEZWZpbml0aW9ucy5oOyBw
YXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmg7
IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC01MjUzLDcgKzQ5ODAsNiBA
QAogCQk5QkY1RUM2MzI1NDEwRTk5MDA5ODRFNzcgLyogSlNJUENCaW5kaW5nLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTSVBDQmluZGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTlFQzUzMkEyMjQ0N0ZCQUQwMDIxNTIxNiAvKiBHZW9sb2NhdGlvbklkZW50aWZpZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gR2VvbG9jYXRpb25JZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTlGNTRGODhFMTY0ODhFODcwMDdERjgxQSAvKiBBdXhpbGlhcnlQcm9jZXNz
TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXV4aWxpYXJ5
UHJvY2Vzc01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOUY1NEY4OTQxNjQ4
QUUwRTAwN0RGODFBIC8qIFBsdWdpblByb2Nlc3NNYW5hZ2VyTWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGx1Z2luUHJvY2Vzc01hbmFnZXJNYWMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlGQjVGMzkyMTY5RTZBODAwMDJDMjVCRiAvKiBX
S0NvbnRleHRQcml2YXRlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBu
YW1lID0gV0tDb250ZXh0UHJpdmF0ZU1hYy5tbTsgcGF0aCA9IG1hYy9XS0NvbnRleHRQcml2YXRl
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5RkI1RjM5MzE2OUU2QTgwMDAy
QzI1QkYgLyogV0tDb250ZXh0UHJpdmF0ZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBXS0NvbnRleHRQcml2YXRlTWFjLmg7IHBhdGggPSBtYWMvV0tDb250ZXh0UHJpdmF0
ZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTA0NkU5RjIwNzkyNjMxMDBG
MEM1RDggLyogV0tQREZWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLUERGVmlldy5oOyBwYXRoID0g
aW9zL1dLUERGVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTYwMCw5ICs1
MzI2LDcgQEAKIAkJQkM4MjgzQTgxNkI0QkQ5MTAwQTI3OEZFIC8qIE5ldHdvcmtTZXJ2aWNlRW50
cnlQb2ludC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHdvcmtTZXJ2aWNlRW50cnlQb2lu
dC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4MjgzQUIxNkI0QkVBRDAwQTI3
OEZFIC8qIE5ldHdvcmtTZXJ2aWNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IE5ldHdvcmtTZXJ2
aWNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzgyODNCMTE2QjRC
Rjc3MDBBMjc4RkUgLyogY29tLmFwcGxlLldlYktpdC5OZXR3b3JraW5nLnhwYyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gIndyYXBwZXIueHBjLXNlcnZp
Y2UiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBjb20uYXBwbGUuV2ViS2l0Lk5ldHdvcmtp
bmcueHBjOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQlCQzgyODNFRjE2
QjRGOEUyMDBBMjc4RkUgLyogUGx1Z2luU2VydmljZUVudHJ5UG9pbnQubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBQbHVnaW5TZXJ2aWNlRW50cnlQb2ludC5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkM4MjgzRjQxNkI0RkM1MzAwQTI3OEZFIC8qIFBsdWdpblNlcnZpY2UueGNj
b25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnhjY29uZmlnOyBwYXRoID0gUGx1Z2luU2VydmljZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQkM4Mjg0MUYxNkI0RkRGNjAwQTI3OEZFIC8qIGNvbS5hcHBsZS5X
ZWJLaXQuUGx1Z2luLjY0LnhwYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNp
dEZpbGVUeXBlID0gIndyYXBwZXIueHBjLXNlcnZpY2UiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBh
dGggPSBjb20uYXBwbGUuV2ViS2l0LlBsdWdpbi42NC54cGM7IHNvdXJjZVRyZWUgPSBCVUlMVF9Q
Uk9EVUNUU19ESVI7IH07CiAJCUJDODQ1MkE1MTE2MkM4MDkwMENBQjlCNSAvKiBEcmF3aW5nQXJl
YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEcmF3aW5nQXJlYS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDODQ1MkE2MTE2MkM4MDkwMENBQjlC
NSAvKiBEcmF3aW5nQXJlYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEcmF3
aW5nQXJlYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzg1N0U4NTEyQjcxRUJC
MDBFREVCMkUgLyogV2ViUGFnZVByb3h5TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViUGFnZVByb3h5TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNTc0MSw3ICs1NDY1LDYgQEAKIAkJQkNGNjlGQTExMTc2RDAxNDAwNDcxQTUyIC8q
IEFQSU5hdmlnYXRpb25EYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEFQSU5hdmlnYXRpb25EYXRhLmNwcDsgcGF0aCA9IFVJUHJvY2Vzcy9BUEkvQVBJTmF2aWdh
dGlvbkRhdGEuY3BwOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCUJDRjY5RkE3MTE3
NkQxQ0IwMDQ3MUE1MiAvKiBXS05hdmlnYXRpb25EYXRhUmVmLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdLTmF2aWdhdGlvbkRhdGFSZWYuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkNGNjlGQTgxMTc2RDFDQjAwNDcxQTUyIC8qIFdLTmF2aWdhdGlvbkRhdGFS
ZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tOYXZpZ2F0aW9u
RGF0YVJlZi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDRkNBODk1MTZERTk2
Q0IwMDA3NDA2OSAvKiBQbHVnaW5TZXJ2aWNlLkluZm8ucGxpc3QgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0LnhtbDsgcGF0aCA9IFBs
dWdpblNlcnZpY2UuSW5mby5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNG
RDU0ODkxMzJEODI2ODAwNTVEODE2IC8qIFdLRXJyb3JDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXS0Vycm9yQ0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQ0ZENTQ4QTEzMkQ4MjY4MDA1NUQ4MTYgLyogV0tFcnJvckNGLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLRXJyb3JDRi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCRkE2MTc5RTEyRjBCOTlEMDAzM0UwQ0EgLyogV0tWaWV3UHJpdmF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1ZpZXdQcml2YXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MDg4LDcgKzU4MTEsNiBAQAogCQlFMThFNjk0NzE2OUI3
N0M4MDA5QjY2NzAgLyogU2VjSXRlbVNoaW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU2VjSXRlbVNoaW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMThFNjk0ODE2OUI3N0M4MDA5QjY2NzAgLyogU2VjSXRlbVNoaW0uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2VjSXRlbVNoaW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTE5NjdFMzcxNTBBQjVFMjAwQzczMTY5IC8qIGNvbS5hcHBsZS5XZWJQcm9jZXNz
LnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IGNvbS5hcHBsZS5XZWJQcm9jZXNzLnNiOyBwYXRo
ID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9jb20uYXBwbGUuV2ViUHJvY2Vzcy5zYjsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJRTE5QkRBODQxOTM2NUY0QjAwQjk3RjU3
IC8qIGNvbS5hcHBsZS5hcHBzdG9yZS5Db2RlUmVkZWVtZXJOZXRzY2FwZVBsdWdpbi5zYiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBjb20uYXBwbGUuYXBwc3RvcmUuQ29kZVJlZGVlbWVyTmV0c2Nh
cGVQbHVnaW4uc2I7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxOUJEQTg4MTkzNjg2
QTQwMEI5N0Y1NyAvKiBTYW5kYm94VXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNhbmRib3hVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTFBRUEyMkQxNDY4N0JEQjAwODA0NTY5IC8qIFdLRnVsbEtleWJvYXJkQWNjZXNzV2F0Y2hl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Z1bGxLZXlib2FyZEFjY2Vz
c1dhdGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFBRUEyMkUxNDY4N0JE
QjAwODA0NTY5IC8qIFdLRnVsbEtleWJvYXJkQWNjZXNzV2F0Y2hlci5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLRnVsbEtleWJvYXJkQWNjZXNzV2F0Y2hlci5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYyNTgsMTMgKzU5ODAsNiBAQAogLyog
RW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdvcmtz
QnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTFBQzI1RkFFMTJBNDhFQTcwMEJEMjY3MSAvKiBGcmFt
ZXdvcmtzICovID0gewotCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7Ci0JCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07CiAJCTJEOUZCMjFFMjM3NTIz
ODMwMDQ5RjkzNiAvKiBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1
aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtNjMzNSwxNSAr
NjA1MCw2IEBACiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07Ci0JCUJDODI4NDFDMTZCNEZERjYwMEEyNzhGRSAvKiBGcmFtZXdvcmtzICovID0g
ewotCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sg
PSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkJMzcxRTY5NTkxQUVEN0EwRjAwNDk1RTQ4
IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCi0JCQkJQkM4Mjg0NEYx
NkI1MDg5ODAwQTI3OEZFIC8qIFdlYktpdC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKLQkJ
CSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKIAkJ
QkNEQzMwOEQxNUZEQjk5QTAwNkI2Njk1IC8qIEZyYW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7
CkBAIC02MzcwLDEzICs2MDc2LDExIEBACiAJCQkJNUMxNTc5REEyNzE2NUIyRjAwRUQ1MjgwIC8q
IHdlYnB1c2hkICovLAogCQkJCTJEOUZCMjI4MjM3NTIzODMwMDQ5RjkzNiAvKiBjb20uYXBwbGUu
V2ViS2l0LkdQVS54cGMgKi8sCiAJCQkJQkM4MjgzQjExNkI0QkY3NzAwQTI3OEZFIC8qIGNvbS5h
cHBsZS5XZWJLaXQuTmV0d29ya2luZy54cGMgKi8sCi0JCQkJQkM4Mjg0MUYxNkI0RkRGNjAwQTI3
OEZFIC8qIGNvbS5hcHBsZS5XZWJLaXQuUGx1Z2luLjY0LnhwYyAqLywKIAkJCQk1NzQyQTJGNzI1
MzU2MTNGMDBCN0JBMTQgLyogY29tLmFwcGxlLldlYktpdC5XZWJBdXRobi54cGMgKi8sCiAJCQkJ
MzcyRUJCNDYyMDE3RTY0MzAwMDg1MDY0IC8qIGNvbS5hcHBsZS5XZWJLaXQuV2ViQ29udGVudC5E
ZXZlbG9wbWVudC54cGMgKi8sCiAJCQkJQkMzREU0NjYxNUE5MTc2MzAwOEQyNkZDIC8qIGNvbS5h
cHBsZS5XZWJLaXQuV2ViQ29udGVudC54cGMgKi8sCiAJCQkJQ0Q5NTQ5MzUyNjE1OTAwNDAwODM3
MkQ5IC8qIGxpYldlYktpdFN3aWZ0LmR5bGliICovLAogCQkJCUExNkU2NjAwMjU4MTkzMDgwMEVF
MTc0OSAvKiBNZWRpYUZvcm1hdFJlYWRlci5idW5kbGUgKi8sCi0JCQkJMUFDMjVGQjAxMkE0OEVB
NzAwQkQyNjcxIC8qIFBsdWdpblByb2Nlc3NTaGltLmR5bGliICovLAogCQkJCThEQzJFRjVCMDQ4
NkE2OTQwMDk4QjIxNiAvKiBXZWJLaXQuZnJhbWV3b3JrICovLAogCQkJKTsKIAkJCW5hbWUgPSBQ
cm9kdWN0czsKQEAgLTY1ODMsNyArNjI4Nyw2IEBACiAJCQkJQkMwMzJEQzMxMEY0MzgyNjAwNThD
MTVBIC8qIFVJUHJvY2VzcyAqLywKIAkJCQlCQzAzMkQ1QzEwRjQzNkQ1MDA1OEMxNUEgLyogV2Vi
UHJvY2VzcyAqLywKIAkJCQk1MTBDQzdEQTE2MTM4RTAxMDBEMDNFRDMgLyogTmV0d29ya1Byb2Nl
c3MgKi8sCi0JCQkJMUEwRUM2QjAxMjRCQkQzNjAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3MgKi8s
CiAJCQkJMkQ5RkIxRkYyMzc1MjA5RDAwNDlGOTM2IC8qIEdQVVByb2Nlc3MgKi8sCiAJCQkJNTc0
MkEyRkYyNTM1NzU4MDAwQjdCQTE0IC8qIFdlYkF1dGhuUHJvY2VzcyAqLywKIAkJCQlDMENFNzI5
RDEyNDdFNzFEMDBCQzBFQzQgLyogRGVyaXZlZCBTb3VyY2VzICovLApAQCAtNjYxMyw3ICs2MzE2
LDYgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMzcyODg3OTgy
MDAwQUEzNzAwRjRFRjVEIC8qIGlvcyAqLywKLQkJCQk3Q0IxNkZFMTE3MjRCOUI1MDA3QTBBOTUg
LyogUGx1Z0luU2FuZGJveFByb2ZpbGVzICovLAogCQkJCTZCRTk2OUJGMUU1NEQ0NTIwMDhCNzQ4
MyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzICovLAogCQkJCUE3OENDREQ1MTkzQUM5RTMwMDVF
Q0MyNSAvKiBTYW5kYm94UHJvZmlsZXMgKi8sCiAJCQkJNkQ4QTkxQTUxMUYwRUZEMTAwREQwMUZF
IC8qIGNvbS5hcHBsZS5XZWJQcm9jZXNzLnNiLmluICovLApAQCAtNjcwMCw0MCArNjQwMiw2IEBA
CiAJCQlwYXRoID0gWFI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQkxQTBF
QzZCMDEyNEJCRDM2MDA3RUY0QTUgLyogUGx1Z2luUHJvY2VzcyAqLyA9IHsKLQkJCWlzYSA9IFBC
WEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJQkM4MjgzODYxNkI0NUVGMjAwQTI3OEZFIC8q
IEVudHJ5UG9pbnQgKi8sCi0JCQkJMUEwRUM3RkQxMjRCRDQwMjAwN0VGNEE1IC8qIG1hYyAqLywK
LQkJCQkxQThFRjRDQTEyNTI0MDM3MDBGNzA2N0YgLyogUGx1Z2luQ29udHJvbGxlclByb3h5LmNw
cCAqLywKLQkJCQkxQThFRjRDOTEyNTI0MDM3MDBGNzA2N0YgLyogUGx1Z2luQ29udHJvbGxlclBy
b3h5LmggKi8sCi0JCQkJMUE4RUY5NDExMjUyQUU4NDAwRjcwNjdGIC8qIFBsdWdpbkNvbnRyb2xs
ZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKLQkJCQkxQTE3OTc3RDEzN0VFODJDMDBGOTdENDUgLyog
UGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCAqLywKLQkJCQkxQTE3OTc3RTEzN0VFODJDMDBG
OTdENDUgLyogUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmggKi8sCi0JCQkJMUEwNDM5NzUxMjRE
MDM0ODAwRkZCRkI1IC8qIFBsdWdpblByb2Nlc3MuY3BwICovLAotCQkJCTFBMDQzOTc0MTI0RDAz
NDgwMEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNzLmggKi8sCi0JCQkJMUEwRUM2QjExMjRCQkQzNjAw
N0VGNEE1IC8qIFBsdWdpblByb2Nlc3MubWVzc2FnZXMuaW4gKi8sCi0JCQkJMUEwNDNBMDgxMjRE
MTFBOTAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uLmNwcCAqLywKLQkJCQkxQTA0M0Ew
NzEyNEQxMUE5MDBGRkJGQjUgLyogV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uaCAqLywKLQkJCQkxQTA0
M0Y1OTEyNTE0Q0YzMDBGRkJGQjUgLyogV2ViUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4g
Ki8sCi0JCQkpOwotCQkJcGF0aCA9IFBsdWdpblByb2Nlc3M7Ci0JCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwotCQkJdGFiV2lkdGggPSA4OwotCQkJdXNlc1RhYnMgPSAwOwotCQl9OwotCQkxQTBF
QzdGRDEyNEJENDAyMDA3RUY0QTUgLyogbWFjICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0J
CQljaGlsZHJlbiA9ICgKLQkJCQk3Q0IxNkZFNDE3MjRCOUI1MDA3QTBBOTUgLyogY29tLmFwcGxl
LldlYktpdC5wbHVnaW4tY29tbW9uLnNiLmluICovLAotCQkJCTFBMkQ5MUE1MTI4MUQ3MzkwMDFF
Qjk2MiAvKiBQbHVnaW5Db250cm9sbGVyUHJveHlNYWMubW0gKi8sCi0JCQkJMUFBNDc5MjIxMkE1
OUZEOTAwODIzNkMzIC8qIFBsdWdpblByb2Nlc3NNYWMubW0gKi8sCi0JCQkJMUFDMjVGODkxMkE0
OEUwMzAwQkQyNjcxIC8qIFBsdWdpblByb2Nlc3NTaGltLmggKi8sCi0JCQkJMUFDMjVGOEExMkE0
OEUwMzAwQkQyNjcxIC8qIFBsdWdpblByb2Nlc3NTaGltLm1tICovLAotCQkJKTsKLQkJCXBhdGgg
PSBtYWM7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQkxQTQzRTgyNjE4OEYz
OEUyMDA5RTREMzAgLyogRGVwcmVjYXRlZCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCkBAIC02NzgwLDI3ICs2NDQ4LDYgQEAKIAkJCXBhdGggPSBDb2NvYTsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCTFBNEE5QzUyMTJCODE2Q0YwMDhGRTk4
NCAvKiBOZXRzY2FwZSAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAo
Ci0JCQkJMUE0QTlDOTgxMkI4MjFDMDAwOEZFOTg0IC8qIG1hYyAqLywKLQkJCQkxQTRBOUM1MzEy
QjgxNkNGMDA4RkU5ODQgLyogTmV0c2NhcGVQbHVnaW5Nb2R1bGUuY3BwICovLAotCQkJCTFBNEE5
QzU0MTJCODE2Q0YwMDhGRTk4NCAvKiBOZXRzY2FwZVBsdWdpbk1vZHVsZS5oICovLAotCQkJCTdD
M0Y4QzhFMTczQUY1MkQwMDdCN0YzOSAvKiBQbHVnaW5JbmZvcm1hdGlvbi5jcHAgKi8sCi0JCQkJ
N0MzRjhDOEYxNzNBRjUyRDAwN0I3RjM5IC8qIFBsdWdpbkluZm9ybWF0aW9uLmggKi8sCi0JCQkp
OwotCQkJcGF0aCA9IE5ldHNjYXBlOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsK
LQkJMUE0QTlDOTgxMkI4MjFDMDAwOEZFOTg0IC8qIG1hYyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdy
b3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMUE0QTlDOTkxMkI4MjFDRDAwOEZFOTg0IC8qIE5l
dHNjYXBlUGx1Z2luTW9kdWxlTWFjLm1tICovLAotCQkJCTdDMTM1QUFBMTczQjBDRkYwMDU4NkFF
MiAvKiBQbHVnaW5JbmZvcm1hdGlvbk1hYy5tbSAqLywKLQkJCSk7Ci0JCQlwYXRoID0gbWFjOwot
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJMUE0Rjk3NjkxMDBFN0I2NjAwNjM3
QTE4IC8qIENvbmZpZ3VyYXRpb25zICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKQEAgLTY4NTMsMjEgKzY1MDAsMTEgQEAKIAkJMUE2RkI3QUExMUU2NEI0OTAwREIx
MzcxIC8qIFBsdWdpbnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAotCQkJCTFBNkZCOTA4MTFFNjZGQjEwMERCMTM3MSAvKiBOZXRzY2FwZSAqLywKIAkJCQlFMTk5
ODc1QjE0MkJGOUNGMDBCQjJERTcgLyogUERGICovLAogCQkJCURGNzQyNzVDMjRGNDk1NTAwMEY4
QUJFOSAvKiBQREZQbHVnaW5JZGVudGlmaWVyLmggKi8sCiAJCQkJMUE2RkI3RDAxMUU2NTFFMjAw
REIxMzcxIC8qIFBsdWdpbi5jcHAgKi8sCiAJCQkJMUE2RkI3RDExMUU2NTFFMjAwREIxMzcxIC8q
IFBsdWdpbi5oICovLAogCQkJCTFBQTU2RjI4MTFFOTJCQzgwMDYxQjg4MiAvKiBQbHVnaW5Db250
cm9sbGVyLmggKi8sCi0JCQkJMUEwRUM5MDUxMjRDMEFCODAwN0VGNEE1IC8qIFBsdWdpblByb2Nl
c3NDb25uZWN0aW9uLmNwcCAqLywKLQkJCQkxQTBFQzkwNDEyNEMwQUI4MDA3RUY0QTUgLyogUGx1
Z2luUHJvY2Vzc0Nvbm5lY3Rpb24uaCAqLywKLQkJCQkxQTJCQjZDQzE0MTE3QTVGMDAwRjM1RDQg
LyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4gKi8sCi0JCQkJMUEwRUM5MEUx
MjRDMEFGNTAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5jcHAgKi8s
Ci0JCQkJMUEwRUM5MEQxMjRDMEFGNTAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9u
TWFuYWdlci5oICovLAotCQkJCTFBNzg2NUI2MTZDQUM2RkQwMEFDRTgzQSAvKiBQbHVnaW5Qcm9j
ZXNzQ29ubmVjdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4gKi8sCi0JCQkJMUEwNDNEQzAxMjRGRjg3
NTAwRkZCRkI1IC8qIFBsdWdpblByb3h5LmNwcCAqLywKLQkJCQkxQTA0M0RCRjEyNEZGODc1MDBG
RkJGQjUgLyogUGx1Z2luUHJveHkuaCAqLywKLQkJCQkxQThFRkE1QjEyNTJCN0NFMDBGNzA2N0Yg
LyogUGx1Z2luUHJveHkubWVzc2FnZXMuaW4gKi8sCiAJCQkJMUE2RkI3QUMxMUU2NEI2ODAwREIx
MzcxIC8qIFBsdWdpblZpZXcuY3BwICovLAogCQkJCTFBNkZCN0FEMTFFNjRCNjgwMERCMTM3MSAv
KiBQbHVnaW5WaWV3LmggKi8sCiAJCQkJMUEwOEZFRTIxRDU5M0NGMTAwOEJBOENCIC8qIFdlYlBs
dWdpbkluZm9Qcm92aWRlci5jcHAgKi8sCkBAIC02ODc2LDM5ICs2NTEzLDYgQEAKIAkJCXBhdGgg
PSBQbHVnaW5zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJMUE2RkI5MDgx
MUU2NkZCMTAwREIxMzcxIC8qIE5ldHNjYXBlICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0J
CQljaGlsZHJlbiA9ICgKLQkJCQkxQTZGQkEwMTExRTY4MTJCMDBEQjEzNzEgLyogbWFjICovLAot
CQkJCTFBRTQ5QTQ4MTFGRkE4Q0UwMDQ4QjQ2NCAvKiBKU05QTWV0aG9kLmNwcCAqLywKLQkJCQkx
QUU0OUE0NzExRkZBOENFMDA0OEI0NjQgLyogSlNOUE1ldGhvZC5oICovLAotCQkJCTFBRTQ5ODc3
MTFGRjdGQUEwMDQ4QjQ2NCAvKiBKU05QT2JqZWN0LmNwcCAqLywKLQkJCQkxQUU0OTg3NjExRkY3
RkFBMDA0OEI0NjQgLyogSlNOUE9iamVjdC5oICovLAotCQkJCTFBNkZCQTI5MTFFNjg2MjcwMERC
MTM3MSAvKiBOZXRzY2FwZUJyb3dzZXJGdW5jcy5jcHAgKi8sCi0JCQkJMUE2RkJBMjgxMUU2ODYy
NzAwREIxMzcxIC8qIE5ldHNjYXBlQnJvd3NlckZ1bmNzLmggKi8sCi0JCQkJMUE2RkJEMjcxMUU2
OUJDMjAwREIxMzcxIC8qIE5ldHNjYXBlUGx1Z2luLmNwcCAqLywKLQkJCQkxQTZGQkQyNjExRTY5
QkMyMDBEQjEzNzEgLyogTmV0c2NhcGVQbHVnaW4uaCAqLywKLQkJCQkxQUE1ODg5MTExRUU3MDQw
MDA2MUI4ODIgLyogTmV0c2NhcGVQbHVnaW5TdHJlYW0uY3BwICovLAotCQkJCTFBQTU4ODkwMTFF
RTcwNDAwMDYxQjg4MiAvKiBOZXRzY2FwZVBsdWdpblN0cmVhbS5oICovLAotCQkJCTFBRTQ5NzY3
MTFGRjY1OEUwMDQ4QjQ2NCAvKiBOUEpTT2JqZWN0LmNwcCAqLywKLQkJCQkxQUU0OTc2NjExRkY2
NThFMDA0OEI0NjQgLyogTlBKU09iamVjdC5oICovLAotCQkJCTFBMjE2MUFGMTFGMzc2NjQwMDhB
RDBGNSAvKiBOUFJ1bnRpbWVPYmplY3RNYXAuY3BwICovLAotCQkJCTFBMjE2MUFFMTFGMzc2NjQw
MDhBRDBGNSAvKiBOUFJ1bnRpbWVPYmplY3RNYXAuaCAqLywKLQkJCQkxQTIxNjJBRTExRjM4OTcx
MDA4QUQwRjUgLyogTlBSdW50aW1lVXRpbGl0aWVzLmNwcCAqLywKLQkJCQkxQTIxNjJBRjExRjM4
OTcxMDA4QUQwRjUgLyogTlBSdW50aW1lVXRpbGl0aWVzLmggKi8sCi0JCQkpOwotCQkJcGF0aCA9
IE5ldHNjYXBlOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJMUE2RkJBMDEx
MUU2ODEyQjAwREIxMzcxIC8qIG1hYyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hp
bGRyZW4gPSAoCi0JCQkJMUFFNUI3RjkxMUU3QUVEMjAwQkE2NzY3IC8qIE5ldHNjYXBlUGx1Z2lu
TWFjLm1tICovLAotCQkJCTFBMkQ5MjIwMTI4MURDMUIwMDFFQjk2MiAvKiBQbHVnaW5Qcm94eU1h
Yy5tbSAqLywKLQkJCSk7Ci0JCQlwYXRoID0gbWFjOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKLQkJfTsKIAkJMUE3RTgxNEUxMTUyRDIyNDAwMDM2OTVCIC8qIG1hYyAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC02OTIyLDE2ICs2NTI2LDYgQEAKIAkJ
CXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQkxQTlGQkE4
QjEzRkYwNEU2MDBERUVENjcgLyogbWFjICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQlj
aGlsZHJlbiA9ICgKLQkJCQkxQTlGQkE4QzEzRkYwNEU2MDBERUVENjcgLyogUGx1Z2luQ29tcGxl
eFRleHRJbnB1dFN0YXRlLmggKi8sCi0JCQkJN0NENjIyNzYxNzM5RDg2MzAwNUJEN0ZGIC8qIFBs
dWdpblNhbmRib3hQcm9maWxlLmggKi8sCi0JCQkJN0NENjIyNzUxNzM5RDg2MzAwNUJEN0ZGIC8q
IFBsdWdpblNhbmRib3hQcm9maWxlLm1tICovLAotCQkJKTsKLQkJCXBhdGggPSBtYWM7Ci0JCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQkxQUFDNERERTE2QjFDQkY2MDA5NDI1RTMg
LyogV2ViU3RvcmFnZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CkBAIC02OTY3LDcgKzY1NjEsNiBAQAogCQkJCTJEQTk0NDk2MTg4NEU0REEwMEVEODZEQiAvKiBp
b3MgKi8sCiAJCQkJQkMxMTFCNUExMTJGNjI4MjAwMzM3QkFCIC8qIG1hYyAqLywKIAkJCQk1MUFG
MUIzRDI3MUY0NkE2MDAxNTM4RTYgLyogTm90aWZpY2F0aW9ucyAqLywKLQkJCQkxQUFFMDU4QzEy
NzlEQ0Q0MDA4NTI0MTggLyogUGx1Z2lucyAqLywKIAkJCQkyRDJFMDQ3NjFGNUJFQzRGMDBCQjI1
RUQgLyogUmVtb3RlTGF5ZXJUcmVlICovLAogCQkJCUUzNjEyRkYwMjZGOTA4NjIwMDdCMTE3NSAv
KiBTYW5kYm94ICovLAogCQkJCTFBQkY0Mzc4MUEzNjgwMzUwMDNGQjBFNiAvKiBXZWJzaXRlRGF0
YSAqLywKQEAgLTcxNzcsMzEgKzY3NzAsNiBAQAogCQkJdGFiV2lkdGggPSA4OwogCQkJdXNlc1Rh
YnMgPSAwOwogCQl9OwotCQkxQUFFMDU4QzEyNzlEQ0Q0MDA4NTI0MTggLyogUGx1Z2lucyAqLyA9
IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMUE5RkJBOEIxM0ZG
MDRFNjAwREVFRDY3IC8qIG1hYyAqLywKLQkJCQkxQTRBOUM1MjEyQjgxNkNGMDA4RkU5ODQgLyog
TmV0c2NhcGUgKi8sCi0JCQkJMUEyRDg0OEExMjdGNkE0OTAwMUVCOTYyIC8qIE5QSWRlbnRpZmll
ckRhdGEuY3BwICovLAotCQkJCTFBMkQ4NDg5MTI3RjZBNDkwMDFFQjk2MiAvKiBOUElkZW50aWZp
ZXJEYXRhLmggKi8sCi0JCQkJMUExRkEzNUMxMjdBNDVCRjAwNTBFNzA5IC8qIE5QT2JqZWN0TWVz
c2FnZVJlY2VpdmVyLmNwcCAqLywKLQkJCQkxQTFGQTM1QjEyN0E0NUJGMDA1MEU3MDkgLyogTlBP
YmplY3RNZXNzYWdlUmVjZWl2ZXIuaCAqLywKLQkJCQkxQTJEODQxMTEyN0Y2NEU4MDAxRUI5NjIg
LyogTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIubWVzc2FnZXMuaW4gKi8sCi0JCQkJMUExRkEyODQx
MjdBMTNCQzAwNTBFNzA5IC8qIE5QT2JqZWN0UHJveHkuY3BwICovLAotCQkJCTFBMUZBMjgzMTI3
QTEzQkMwMDUwRTcwOSAvKiBOUE9iamVjdFByb3h5LmggKi8sCi0JCQkJMUExRkEyNTIxMjdBMEU0
RjAwNTBFNzA5IC8qIE5QUmVtb3RlT2JqZWN0TWFwLmNwcCAqLywKLQkJCQkxQTFGQTI1MTEyN0Ew
RTRGMDA1MEU3MDkgLyogTlBSZW1vdGVPYmplY3RNYXAuaCAqLywKLQkJCQkxQTJEODRBMjEyN0Y2
QUQxMDAxRUI5NjIgLyogTlBWYXJpYW50RGF0YS5jcHAgKi8sCi0JCQkJMUEyRDg0QTExMjdGNkFE
MTAwMUVCOTYyIC8qIE5QVmFyaWFudERhdGEuaCAqLywKLQkJCQkxQTNENjEwMDEzQTdDQzJBMDBG
OTVENEUgLyogUGx1Z2luTW9kdWxlSW5mby5oICovLAotCQkJCTFBQzVGRkMxMTc0QkZEMUIwMDAx
NDgzRCAvKiBQbHVnaW5Qcm9jZXNzQXR0cmlidXRlcy5oICovLAotCQkJCTFBMkQ5MEQxMTI4MUM5
NjYwMDFFQjk2MiAvKiBQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCAqLywKLQkJ
CQkxQTJEOTBEMDEyODFDOTY2MDAxRUI5NjIgLyogUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oICovLAotCQkJCTFBNEE5RjMxMTJCODQ0RTIwMDhGRTk4NCAvKiBQbHVnaW5RdWlya3Mu
aCAqLywKLQkJCSk7Ci0JCQlwYXRoID0gUGx1Z2luczsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7Ci0JCX07CiAJCTFBQUYwODlFMTkyNjgxQUMwMEI2MzkwQyAvKiBVc2VyQ29udGVudCAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC03NDcwLDMxICs3MDM4
LDYgQEAKIAkJCXBhdGggPSBJUEM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9Owot
CQkxQUVGQ0MwNTExRDAxRjM0MDA4MjE5RDMgLyogUGx1Z2lucyAqLyA9IHsKLQkJCWlzYSA9IFBC
WEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMUFFRkNDMEQxMUQwMUY0MTAwODIxOUQzIC8q
IG1hYyAqLywKLQkJCQkxQUVGQ0MxMTExRDAxRjk2MDA4MjE5RDMgLyogUGx1Z2luSW5mb1N0b3Jl
LmNwcCAqLywKLQkJCQkxQUVGQ0MxMDExRDAxRjk2MDA4MjE5RDMgLyogUGx1Z2luSW5mb1N0b3Jl
LmggKi8sCi0JCQkJMUEwRUM2MDIxMjRBOUYyQzAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NNYW5h
Z2VyLmNwcCAqLywKLQkJCQkxQTBFQzYwMTEyNEE5RjJDMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vz
c01hbmFnZXIuaCAqLywKLQkJCQkxQTBFQzc1RDEyNEJDN0IyMDA3RUY0QTUgLyogUGx1Z2luUHJv
Y2Vzc1Byb3h5LmNwcCAqLywKLQkJCQkxQTBFQzc1QzEyNEJDN0IyMDA3RUY0QTUgLyogUGx1Z2lu
UHJvY2Vzc1Byb3h5LmggKi8sCi0JCQkJMUEwNDNCNEMxMjRENUUzNjAwRkZCRkI1IC8qIFBsdWdp
blByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbiAqLywKLQkJCSk7Ci0JCQlwYXRoID0gUGx1Z2luczsK
LQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCTFBRUZDQzBEMTFEMDFGNDEwMDgy
MTlEMyAvKiBtYWMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAot
CQkJCTFBRUZDQ0JDMTFEMDJDNUUwMDgyMTlEMyAvKiBQbHVnaW5JbmZvU3RvcmVNYWMubW0gKi8s
Ci0JCQkJOUY1NEY4OTQxNjQ4QUUwRTAwN0RGODFBIC8qIFBsdWdpblByb2Nlc3NNYW5hZ2VyTWFj
Lm1tICovLAotCQkJCTFBMkQ5MEJBMTI4MUM5MzEwMDFFQjk2MiAvKiBQbHVnaW5Qcm9jZXNzUHJv
eHlNYWMubW0gKi8sCi0JCQkpOwotCQkJcGF0aCA9IG1hYzsKLQkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7Ci0JCX07CiAJCTFDMEExOTQzMUM4RkYxQTgwMEZFMEVCQiAvKiBBdXRvbWF0aW9uICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTk1OTksOSArOTE0
Miw5IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTVDQkI2RDRE
MjcxRjY3Q0MwMEZEMUE1RCAvKiBjb20uYXBwbGUud2Via2l0LndlYnB1c2hkLnBsaXN0ICovLAot
CQkJCTVDMTU3QTBCMjcxN0NBMUMwMEVENTI4MCAvKiBXZWJQdXNoRGFlbW9uTWFpbi5tbSAqLywK
IAkJCQk1MTJDRDY5RDI3MjMzOTNBMDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbi5oICovLAogCQkJ
CTUxMkNENjlFMjcyMzM5M0EwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uLm1tICovLAorCQkJCTVD
MTU3QTBCMjcxN0NBMUMwMEVENTI4MCAvKiBXZWJQdXNoRGFlbW9uTWFpbi5tbSAqLywKIAkJCSk7
CiAJCQlwYXRoID0gd2VicHVzaGQ7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtOTc3
MCwzMSArOTMxMyw2IEBACiAJCQlwYXRoID0gY29jb2E7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwogCQl9OwotCQk3Q0IxNkZFMTE3MjRCOUI1MDA3QTBBOTUgLyogUGx1Z0luU2FuZGJveFBy
b2ZpbGVzICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQk0
MTQzNzUxQjIwRUFFQTFFMDBGQUQwNkMgLyogY24ubWljcm9kb25lLmNtYi5zYWZhcmkuc2IgKi8s
Ci0JCQkJRTE5QkRBODQxOTM2NUY0QjAwQjk3RjU3IC8qIGNvbS5hcHBsZS5hcHBzdG9yZS5Db2Rl
UmVkZWVtZXJOZXRzY2FwZVBsdWdpbi5zYiAqLywKLQkJCQk0MTEyRUREOTIwRTQwNzc1MDBCRUE5
MkEgLyogY29tLmFwcGxlLkJvY29tU3VibWl0Q3RybC5zYiAqLywKLQkJCQk3Q0IxNkZFMjE3MjRC
OUI1MDA3QTBBOTUgLyogY29tLmFwcGxlLmlzdC5kcy5hcHBsZWNvbm5lY3Qud2VicGx1Z2luLnNi
ICovLAotCQkJCTQxMTJFREQ4MjBFNDA3NzUwMEJFQTkyQSAvKiBjb20uYXBwbGUuTlBTYWZlSW5w
dXQuc2IgKi8sCi0JCQkJNDExMkVERDcyMEU0MDc3NTAwQkVBOTJBIC8qIGNvbS5hcHBsZS5OUFNh
ZmVTdWJtaXQuc2IgKi8sCi0JCQkJN0NCMTZGRTMxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5hcHBs
ZS5RdWlja1RpbWUgUGx1Z2luLnBsdWdpbi5zYiAqLywKLQkJCQk0MTEyRUREMzIwRTQwNzc0MDBC
RUE5MkEgLyogY29tLmNmY2EubnBTZWNFZGl0Q3RsLk1BQy5CT0MucGx1Z2luLnNiICovLAotCQkJ
CTQxNEREMzc4MjBCRjQzRUEwMDY5NTlGQiAvKiBjb20uY2lzY28ud2ViZXgucGx1Z2luLmdwYzY0
LnNiICovLAotCQkJCTQxMTJFREQ1MjBFNDA3NzQwMEJFQTkyQSAvKiBjb20uY21iY2hpbmEuQ01C
U2VjdXJpdHkuc2IgKi8sCi0JCQkJNDExMkVERDIyMEU0MDc3MzAwQkVBOTJBIC8qIGNvbS5mdHNh
ZmUuTlBBUEktQ29yZS1TYWZlLVNvZnRLZXliYW9yZC5wbHVnaW4ucmZjMTAzNGlkZW50aWZpZXIu
c2IgKi8sCi0JCQkJNDEzQ0NENEYyMERFQkMyRjAwNjVBMjFBIC8qIGNvbS5nb29nbGUuZ29vZ2xl
dGFsa2Jyb3dzZXJwbHVnaW4uc2IgKi8sCi0JCQkJNDE1N0U0QUYyMEUyRUM5ODAwQTZDMEQ3IC8q
IGNvbS5nb29nbGUubzFkYnJvd3NlcnBsdWdpbi5zYiAqLywKLQkJCQk3QTVFMzk0OTFENUJEOEE3
MDBCNEI3Q0UgLyogY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyIEVTUi5wbHVnaW4uc2IgKi8s
Ci0JCQkJN0NCMTZGRTUxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5tYWNyb21lZGlhLkZsYXNoIFBs
YXllci5wbHVnaW4uc2IgKi8sCi0JCQkJN0NCMTZGRTYxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5t
aWNyb3NvZnQuU2lsdmVybGlnaHRQbHVnaW4uc2IgKi8sCi0JCQkJN0NCMTZGRTcxNzI0QjlCNTAw
N0EwQTk1IC8qIGNvbS5vcmFjbGUuamF2YS5KYXZhQXBwbGV0UGx1Z2luLnNiICovLAotCQkJKTsK
LQkJCW5hbWUgPSBQbHVnSW5TYW5kYm94UHJvZmlsZXM7Ci0JCQlwYXRoID0gUmVzb3VyY2VzL1Bs
dWdJblNhbmRib3hQcm9maWxlczsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07CiAJ
CTdFQzRGMEY4MThFNEE5MjIwMDgwNTZBRiAvKiBjb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0xMDQwMyw3ICs5OTIxLDYgQEAKIAkJCQk1MTBDQzdF
NzE2MTM4RTcyMDBEMDNFRDMgLyogTmV0d29yayAqLywKIAkJCQkzMUEyRUM0MDE0ODk5NzM3MDA4
MTBENzEgLyogTm90aWZpY2F0aW9ucyAqLywKIAkJCQlERjg0Q0VFMTI0OUFBMjAwMDA5MDk2RjYg
LyogUERGICovLAotCQkJCTFBRUZDQzA1MTFEMDFGMzQwMDgyMTlEMyAvKiBQbHVnaW5zICovLAog
CQkJCTJEMTU1MUE5MUY1QTlCNDIwMDA2RTNGRSAvKiBSZW1vdGVMYXllclRyZWUgKi8sCiAJCQkJ
MUFBRjA4OUUxOTI2ODFBQzAwQjYzOTBDIC8qIFVzZXJDb250ZW50ICovLAogCQkJCTU3NjA4Mjk0
MjAyQkQ4NDkwMDExNjY3OCAvKiBXZWJBdXRoZW50aWNhdGlvbiAqLywKQEAgLTExMTU3LDE0ICsx
MDY3NCw2IEBACiAJCQlwYXRoID0gRW50cnlQb2ludDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CiAJCX07Ci0JCUJDODI4Mzg2MTZCNDVFRjIwMEEyNzhGRSAvKiBFbnRyeVBvaW50ICovID0g
ewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlCQzgyODNFMjE2QjRG
OEUyMDBBMjc4RkUgLyogWFBDU2VydmljZSAqLywKLQkJCSk7Ci0JCQlwYXRoID0gRW50cnlQb2lu
dDsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07CiAJCUJDODI4M0ExMTZCNEJEOTEw
MEEyNzhGRSAvKiBYUENTZXJ2aWNlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKQEAgLTExMTg0LDI0ICsxMDY5Myw2IEBACiAJCQlwYXRoID0gTmV0d29ya1NlcnZp
Y2U7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQlCQzgyODNFMjE2QjRGOEUy
MDBBMjc4RkUgLyogWFBDU2VydmljZSAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hp
bGRyZW4gPSAoCi0JCQkJQkM4MjgzRTkxNkI0RjhFMjAwQTI3OEZFIC8qIFBsdWdpblNlcnZpY2Ug
Ki8sCi0JCQkJQkM4MjgzRUYxNkI0RjhFMjAwQTI3OEZFIC8qIFBsdWdpblNlcnZpY2VFbnRyeVBv
aW50Lm1tICovLAotCQkJKTsKLQkJCW5hbWUgPSBYUENTZXJ2aWNlOwotCQkJcGF0aCA9IENvY29h
L1hQQ1NlcnZpY2U7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQlCQzgyODNF
OTE2QjRGOEUyMDBBMjc4RkUgLyogUGx1Z2luU2VydmljZSAqLyA9IHsKLQkJCWlzYSA9IFBCWEdy
b3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJQkNGQ0E4OTUxNkRFOTZDQjAwMDc0MDY5IC8qIFBs
dWdpblNlcnZpY2UuSW5mby5wbGlzdCAqLywKLQkJCSk7Ci0JCQluYW1lID0gUGx1Z2luU2Vydmlj
ZTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07CiAJCUJDOEE1MDEzMTE3NjVGNDUw
MDc1NzU3MyAvKiBjcHAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KApAQCAtMTE1NDQsMjQgKzExMDM1LDEwIEBACiAJCQkJNTE0NTI3MDIyNzFGQkEzNjAwMDQ2N0I2
IC8qIE5vdGlmaWNhdGlvbk1hbmFnZXJNZXNzYWdlSGFuZGxlck1lc3NhZ2VSZWNlaXZlci5jcHAg
Ki8sCiAJCQkJNTE0NTI3MDEyNzFGQkEzNTAwMDQ2N0I2IC8qIE5vdGlmaWNhdGlvbk1hbmFnZXJN
ZXNzYWdlSGFuZGxlck1lc3NhZ2VzLmggKi8sCiAJCQkJNTE0NTI3MDAyNzFGQkEzNDAwMDQ2N0I2
IC8qIE5vdGlmaWNhdGlvbk1hbmFnZXJNZXNzYWdlSGFuZGxlck1lc3NhZ2VzUmVwbGllcy5oICov
LAotCQkJCTFBMkQ4NDM3MTI3RjY1RDUwMDFFQjk2MiAvKiBOUE9iamVjdE1lc3NhZ2VSZWNlaXZl
ck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCi0JCQkJMUEyRDg0MzgxMjdGNjVENTAwMUVCOTYyIC8q
IE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyTWVzc2FnZXMuaCAqLywKIAkJCQlDREEyOUEyNDFDQkVC
NjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAg
Ki8sCiAJCQkJQ0RBMjlBMjUxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFn
ZXJNZXNzYWdlcy5oICovLAogCQkJCUNEQTI5QTI2MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCUNEQTI5QTI3
MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5o
ICovLAotCQkJCTFBOEVGOTZDMTI1MkFGNkIwMEY3MDY3RiAvKiBQbHVnaW5Db250cm9sbGVyUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAotCQkJCTFBOEVGOTZEMTI1MkFGNkIwMEY3MDY3RiAv
KiBQbHVnaW5Db250cm9sbGVyUHJveHlNZXNzYWdlcy5oICovLAotCQkJCTFBNzg2NUI3MTZDQUM3
MTUwMEFDRTgzQSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwICovLAotCQkJCTFBNzg2NUI4MTZDQUM3MTUwMEFDRTgzQSAvKiBQbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbk1hbmFnZXJNZXNzYWdlcy5oICovLAotCQkJCTFBMkJCNkNFMTQxMTdCNEQwMDBG
MzVENCAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCi0J
CQkJMUEyQkI2Q0YxNDExN0I0RDAwMEYzNUQ0IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWVz
c2FnZXMuaCAqLywKLQkJCQkxQTBFQzZCRDEyNEJCRDlCMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vz
c01lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCi0JCQkJMUEwRUM2QkUxMjRCQkQ5QjAwN0VGNEE1IC8q
IFBsdWdpblByb2Nlc3NNZXNzYWdlcy5oICovLAotCQkJCTFBMDQzQjVCMTI0RDVFOUQwMEZGQkZC
NSAvKiBQbHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAotCQkJCTFBMDQz
QjVDMTI0RDVFOUQwMEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlcy5oICovLAot
CQkJCTFBOEVGQTZFMTI1MkI4NDEwMEY3MDY3RiAvKiBQbHVnaW5Qcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi8sCi0JCQkJMUE4RUZBNkYxMjUyQjg0MTAwRjcwNjdGIC8qIFBsdWdpblByb3h5TWVz
c2FnZXMuaCAqLywKIAkJCQlDRDIwQ0U3NzI1Q0QyQjlEMDA2OUI1NDIgLyogUmVtb3RlQXVkaW9I
YXJkd2FyZUxpc3RlbmVyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKIAkJCQlDRDIwQ0U3OTI1Q0Qy
QjlFMDA2OUI1NDIgLyogUmVtb3RlQXVkaW9IYXJkd2FyZUxpc3RlbmVyTWVzc2FnZXMuaCAqLywK
IAkJCQlDRDIwQ0U3ODI1Q0QyQjlEMDA2OUI1NDIgLyogUmVtb3RlQXVkaW9IYXJkd2FyZUxpc3Rl
bmVyTWVzc2FnZXNSZXBsaWVzLmggKi8sCkBAIC0xMTc1Niw4ICsxMTIzMyw2IEBACiAJCQkJN0NC
MTAwRUUxRkEyRDc0QTAwMTcyOUVFIC8qIFdlYlByZWZlcmVuY2VzS2V5cy5jcHAgKi8sCiAJCQkJ
N0NCMTAwRUYxRkEyRDc0QjAwMTcyOUVFIC8qIFdlYlByZWZlcmVuY2VzS2V5cy5oICovLAogCQkJ
CTdDQjEwMEYwMUZBMkQ3ODQwMDE3MjlFRSAvKiBXZWJQcmVmZXJlbmNlc1N0b3JlRGVmYXVsdHNN
YXAuY3BwICovLAotCQkJCTFBMDQzRjY3MTI1MTREOEIwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29u
bmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCi0JCQkJMUEwNDNGNjgxMjUxNEQ4QjAwRkZC
RkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCAqLywKIAkJCQlCQzMwNjZCQzEy
NUE0NDIxMDBFNzEyNzggLyogV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJ
QkMzMDY2QkQxMjVBNDQyMTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNZXNzYWdlcy5oICovLAogCQkJ
CTdDRTREMjI1MUE0OTE2QzIwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbE1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi8sCkBAIC0xMjExMiwxMyArMTE1ODcsNiBAQAogLyogRW5kIFBCWEdyb3VwIHNlY3Rp
b24gKi8KIAogLyogQmVnaW4gUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQkxQUMy
NUZBQzEyQTQ4RUE3MDBCRDI2NzEgLyogSGVhZGVycyAqLyA9IHsKLQkJCWlzYSA9IFBCWEhlYWRl
cnNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVz
ID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwot
CQl9OwogCQk1QzE1NzlEMTI3MTY1QjJGMDBFRDUyODAgLyogSGVhZGVycyAqLyA9IHsKIAkJCWlz
YSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0
NzsKQEAgLTEyNTIwLDggKzExOTg4LDYgQEAKIAkJCQkyRDREMkM4MTFERjYwQkYzMDAyRUIxMEMg
LyogSW50ZXJhY3Rpb25JbmZvcm1hdGlvblJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUEz
MUY2MEE0MjVDQzdEQjkwMEFGMTRGNCAvKiBJUENTZW1hcGhvcmUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTlCNDc5MDhGMjUzMTUxQ0MwMEVDMTFBQiAvKiBKU0lQQ0JpbmRpbmcuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTFBRTQ5QTQ5MTFGRkE4Q0UwMDQ4QjQ2NCAvKiBKU05QTWV0aG9kLmggaW4gSGVh
ZGVycyAqLywKLQkJCQkxQUU0OTg3ODExRkY3RkFBMDA0OEI0NjQgLyogSlNOUE9iamVjdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzE2NjNFNUIyNEFFQUEyRjAwQzZBM0IyIC8qIExhdW5jaFNlcnZp
Y2VzRGF0YWJhc2VYUENDb25zdGFudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTA5Mzc4MTRG
QjEyOEMwMDExMzhEOSAvKiBMYXllckhvc3RpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTkyREMxMTEyRjhCQTQ2MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0xMjU4OSwxMCArMTIwNTUsNiBAQAogCQkJCTFBQkMzREY2MTg5OUU0MzcwMDRG
MDYyNiAvKiBOYXZpZ2F0aW9uU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3QjgyNjQ0MjMw
NEYxNDAwMEI3MkVCMCAvKiBOZWFyRmllbGRTb2Z0TGluay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTdCODI2NDEyMzA0RUIzRTAwQjcyRUIwIC8qIE5lYXJGaWVsZFNQSS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMUE2RkJBMkExMUU2ODYyNzAwREIxMzcxIC8qIE5ldHNjYXBlQnJvd3NlckZ1bmNzLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkxQTZGQkQyODExRTY5QkMyMDBEQjEzNzEgLyogTmV0c2NhcGVQ
bHVnaW4uaCBpbiBIZWFkZXJzICovLAotCQkJCTFBNEE5QzU2MTJCODE2Q0YwMDhGRTk4NCAvKiBO
ZXRzY2FwZVBsdWdpbk1vZHVsZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUFBNTg4OTIxMUVFNzA0
MDAwNjFCODgyIC8qIE5ldHNjYXBlUGx1Z2luU3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MzVCQ0I5MjIwNjlDNDlDMDBDQ0NFMDIgLyogTmV0d29ya0FjdGl2aXR5VHJhY2tlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDZFRTI4NEQyNjlFMDUyNTAwREQ0OEFCIC8qIE5ldHdvcmtCcm9hZGNh
c3RDaGFubmVsUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NDM2RUNDMUEwRDA0MEIw
MEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGUuaCBpbiBIZWFkZXJzICovLApAQCAtMTI2NDUsMTUgKzEy
MTA3LDYgQEAKIAkJCQk1MTQ1MjcwNDI3MUZCQTQwMDAwNDY3QjYgLyogTm90aWZpY2F0aW9uTWFu
YWdlck1lc3NhZ2VIYW5kbGVyTWVzc2FnZXNSZXBsaWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MUEyRUM1NjE0ODk5QzA5MDA4MTBENzEgLyogTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTMxMzEyNjFGMTQ4RkY4MkMwMEJBMkEzOSAvKiBOb3RpZmlj
YXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBMkQ4
NDhCMTI3RjZBNDkwMDFFQjk2MiAvKiBOUElkZW50aWZpZXJEYXRhLmggaW4gSGVhZGVycyAqLywK
LQkJCQkxQUU0OTc2ODExRkY2NThFMDA0OEI0NjQgLyogTlBKU09iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMUEyRDgyQTUxMjdGNEVBQjAwMUVCOTYyIC8qIE5QT2JqZWN0TWVzc2FnZVJlY2Vp
dmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTJEODQzQTEyN0Y2NUQ1MDAxRUI5NjIgLyogTlBP
YmplY3RNZXNzYWdlUmVjZWl2ZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUEyRDgy
QTcxMjdGNEVBQjAwMUVCOTYyIC8qIE5QT2JqZWN0UHJveHkuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTFBMkQ4MkE5MTI3RjRFQUIwMDFFQjk2MiAvKiBOUFJlbW90ZU9iamVjdE1hcC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMUEyMTYxQjAxMUYzNzY2NDAwOEFEMEY1IC8qIE5QUnVudGltZU9iamVjdE1h
cC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUEyMTYyQjExMUYzODk3MTAwOEFEMEY1IC8qIE5QUnVu
dGltZVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUEyRDg0QTMxMjdGNkFEMTAwMUVC
OTYyIC8qIE5QVmFyaWFudERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDMjA5MzYwMjIzMThD
QjAwMDAyNkEzOSAvKiBOU0F0dHJpYnV0ZWRTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTFD
MjE4NDAyMjIzMzg3MjgwMEJBQzcwMCAvKiBOU0F0dHJpYnV0ZWRTdHJpbmdQcml2YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkzNzU0RDU0NTFCM0EyOUZEMDAzQTRDN0YgLyogTlNJbnZvY2F0aW9u
U1BJLmggaW4gSGVhZGVycyAqLywKQEAgLTEyNjg5LDI5ICsxMjE0Miw3IEBACiAJCQkJQ0RBMjlB
MjAxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQ0RBMjlBMkIxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTZGQjdEMzExRTY1
MUUyMDBEQjEzNzEgLyogUGx1Z2luLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTlGQkE4RDEzRkYw
NEU2MDBERUVENjcgLyogUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQUE1NkYyOTExRTkyQkM4MDA2MUI4ODIgLyogUGx1Z2luQ29udHJvbGxlci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMUE4RUY0Q0IxMjUyNDAzNzAwRjcwNjdGIC8qIFBsdWdpbkNvbnRy
b2xsZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUE4RUY5NkYxMjUyQUY2QjAwRjcwNjdG
IC8qIFBsdWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKLQkJCQkx
QTE3OTc4MDEzN0VFODJDMDBGOTdENDUgLyogUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmggaW4g
SGVhZGVycyAqLywKLQkJCQk3QzNGOEM5MTE3M0FGNTJEMDA3QjdGMzkgLyogUGx1Z2luSW5mb3Jt
YXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTFBRUZDQzEyMTFEMDFGOTYwMDgyMTlEMyAvKiBQ
bHVnaW5JbmZvU3RvcmUuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBM0Q2MTAyMTNBN0NDMkEwMEY5
NUQ0RSAvKiBQbHVnaW5Nb2R1bGVJbmZvLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTA0Mzk3NjEy
NEQwMzQ4MDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUFD
NUZGQzIxNzRCRkQxQjAwMDE0ODNEIC8qIFBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLmggaW4gSGVh
ZGVycyAqLywKLQkJCQkxQTBFQzkwNjEyNEMwQUI4MDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc0Nv
bm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTFBMEVDOTBGMTI0QzBBRjUwMDdFRjRBNSAv
KiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTFB
Nzg2NUJBMTZDQUM3MTUwMEFDRTgzQSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXJN
ZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUEyQkI2RDExNDExN0I0RDAwMEYzNUQ0IC8q
IFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTFB
MkQ5MEQyMTI4MUM5NjYwMDFFQjk2MiAvKiBQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTBFQzYwMzEyNEE5RjJDMDA3RUY0QTUgLyogUGx1Z2lu
UHJvY2Vzc01hbmFnZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBMEVDNkMwMTI0QkJEOUIwMDdF
RjRBNSAvKiBQbHVnaW5Qcm9jZXNzTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBMEVD
NzVFMTI0QkM3QjIwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzUHJveHkuaCBpbiBIZWFkZXJzICov
LAotCQkJCTFBMDQzQjVFMTI0RDVFOUQwMEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNzUHJveHlNZXNz
YWdlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUEwNDNEQzExMjRGRjg3NTAwRkZCRkI1IC8qIFBs
dWdpblByb3h5LmggaW4gSGVhZGVycyAqLywKLQkJCQkxQThFRkE3MTEyNTJCODQxMDBGNzA2N0Yg
LyogUGx1Z2luUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUE0QTlGMzMxMkI4
NDRFMjAwOEZFOTg0IC8qIFBsdWdpblF1aXJrcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0NENjIy
NzgxNzM5RDg2MzAwNUJEN0ZGIC8qIFBsdWdpblNhbmRib3hQcm9maWxlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQTZGQjdBRjExRTY0QjY4MDBEQjEzNzEgLyogUGx1Z2luVmlldy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDlFQ0E0MUMyM0ZDQTVEODAwMjMzNThEIC8qIFBvbGljeURlY2lzaW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1N0ZEMzE4MTIyQjM1MTVCMDA4RDBFOEIgLyogUG9wVXBTT0F1
dGhvcml6YXRpb25TZXNzaW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTEyODQzLDcgKzEyMjc0LDYg
QEAKIAkJCQk5M0FCOUI0RTI1NzU2N0UyMDA5OEIxMEUgLyogU3BlZWNoUmVjb2duaXRpb25SZW1v
dGVSZWFsdGltZU1lZGlhU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0FCOUI0RDI1NzU2
N0RDMDA5OEIxMEUgLyogU3BlZWNoUmVjb2duaXRpb25SZW1vdGVSZWFsdGltZU1lZGlhU291cmNl
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNENkI3NzIyNTRCQjUxOTAwNThERDNBIC8q
IFNwZWVjaFJlY29nbml0aW9uU2VydmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTJDRDY5QTI3
MjFGMEE5MDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNENkI3ODQyNTRDQ0QwRTAwNThERDNBIC8qIFNwZWVjaFJlY29nbml0aW9uU2VydmVy
TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRDZCNzg1MjU0Q0NENDMwMDU4REQzQSAv
KiBTcGVlY2hSZWNvZ25pdGlvblNlcnZlck1lc3NhZ2VzUmVwbGllcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJN0EzRkVDQTIyMUY3QzA5NzAwRjI2N0NEIC8qIFN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCBp
biBIZWFkZXJzICovLApAQCAtMTI5MzEsNyArMTIzNjEsNiBAQAogCQkJCTk5MEQzOUY1MjQzQkU2
NDgwMDE5OTM4OCAvKiBXZWJBdXRvbWF0aW9uRE9NV2luZG93T2JzZXJ2ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk5NTVBNkVDMUM3OTgwQzIwMEVCNkE5MyAvKiBXZWJBdXRvbWF0aW9uU2Vzc2lv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlDM0FFMkQxREFEQTZBRDAwQUY1QzE2IC8qIFdlYkF1
dG9tYXRpb25TZXNzaW9uTWFjcm9zLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTJDRDY5ODI3MjFF
RkM4MDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbkNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTFDMEExOTU4MUM5MDA2OEYwMEZFMEVCQiAvKiBXZWJBdXRvbWF0aW9uU2Vzc2lvbk1lc3Nh
Z2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzBBMTk0NzFDOEZGMUE4MDBGRTBFQkIgLyogV2Vi
QXV0b21hdGlvblNlc3Npb25Qcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUMwQTE5NTQxQzhG
RkRGQjAwRkUwRUJCIC8qIFdlYkF1dG9tYXRpb25TZXNzaW9uUHJveHlNZXNzYWdlcy5oIGluIEhl
YWRlcnMgKi8sCkBAIC0xMzA5OCw4ICsxMjUyNyw2IEBACiAJCQkJQkNENTk4QUMxMTJCN0ZERjAw
RUM4QzIzIC8qIFdlYlByZWZlcmVuY2VzU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUExQzUx
MkM5MTkwNjU2RTUwMDQ0ODkxNCAvKiBXZWJQcmV2aWV3TG9hZGVyQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzAzMkQ5NzEwRjQzN0FGMDA1OEMxNUEgLyogV2ViUHJvY2Vzcy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMUEwNDNBMDkxMjREMTFBOTAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25u
ZWN0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTA0M0Y2QTEyNTE0RDhCMDBGRkJGQjUgLyog
V2ViUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMzMDY4
MjQxMjVBNkI5NDAwRTcxMjc4IC8qIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQ2N0U0M0U4MjI0M0ZGN0QwMEIxMzkyNCAvKiBXZWJQcm9jZXNzRGF0
YVN0b3JlUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMzMDY2QkYxMjVBNDQyMTAw
RTcxMjc4IC8qIFdlYlByb2Nlc3NNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzExMCw2
ICsxMjUzNyw4IEBACiAJCQkJQkNFMEU0MjUxNjhCN0EyODAwNTdFNjZBIC8qIFdlYlByb2Nlc3NT
dXBwbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTFFMDkzNDE4ODYxRDM4MDBEMkRDNDkg
LyogV2ViUHJvZ3Jlc3NUcmFja2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJGNTg5
RDEyQTg4Mzg4MDA2Mjk1MzAgLyogV2ViUHJvdGVjdGlvblNwYWNlLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1MTJDRDY5ODI3MjFFRkM4MDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbkNvbm5lY3Rpb24u
aCBpbiBIZWFkZXJzICovLAorCQkJCTUxMkNENjlBMjcyMUYwQTkwMEY3RjhFQyAvKiBXZWJQdXNo
RGFlbW9uQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NjFDQ0NBNjIzMTQ4NUFBMDBC
NjU5QjkgLyogV2ViUmVtb3RlT2JqZWN0UmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
ODYwRTcxMjMwRjY3RkMwMDQ2MUFBRSAvKiBXZWJSZXNvdXJjZUludGVyY2VwdENvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxMEFGRkJBMTY1NDIwNDgwMDFCQTA1RSAvKiBXZWJSZXNv
dXJjZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzYxMCwyNCArMTMwMzksNiBAQAogLyog
RW5kIFBCWEhlYWRlcnNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYTmF0aXZl
VGFyZ2V0IHNlY3Rpb24gKi8KLQkJMUFDMjVGQUYxMkE0OEVBNzAwQkQyNjcxIC8qIFBsdWdpblBy
b2Nlc3NTaGltICovID0gewotCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwotCQkJYnVpbGRDb25m
aWd1cmF0aW9uTGlzdCA9IDFBQzI1RkJBMTJBNDhFQjYwMEJEMjY3MSAvKiBCdWlsZCBjb25maWd1
cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiUGx1Z2luUHJvY2Vzc1NoaW0iICovOwot
CQkJYnVpbGRQaGFzZXMgPSAoCi0JCQkJMUFDMjVGQUMxMkE0OEVBNzAwQkQyNjcxIC8qIEhlYWRl
cnMgKi8sCi0JCQkJMUFDMjVGQUQxMkE0OEVBNzAwQkQyNjcxIC8qIFNvdXJjZXMgKi8sCi0JCQkJ
MUFDMjVGQUUxMkE0OEVBNzAwQkQyNjcxIC8qIEZyYW1ld29ya3MgKi8sCi0JCQkpOwotCQkJYnVp
bGRSdWxlcyA9ICgKLQkJCSk7Ci0JCQlkZXBlbmRlbmNpZXMgPSAoCi0JCQkJRTFBQzJFMkUyMEY3
Qjk4ODAwQjA4OTdEIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCi0JCQkpOwotCQkJbmFtZSA9
IFBsdWdpblByb2Nlc3NTaGltOwotCQkJcHJvZHVjdE5hbWUgPSBQbHVnaW5Qcm9jZXNzU2hpbTsK
LQkJCXByb2R1Y3RSZWZlcmVuY2UgPSAxQUMyNUZCMDEyQTQ4RUE3MDBCRDI2NzEgLyogUGx1Z2lu
UHJvY2Vzc1NoaW0uZHlsaWIgKi87Ci0JCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVj
dC10eXBlLmxpYnJhcnkuZHluYW1pYyI7Ci0JCX07CiAJCTJEOUZCMjE2MjM3NTIzODMwMDQ5Rjkz
NiAvKiBHUFUgKi8gPSB7CiAJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CiAJCQlidWlsZENvbmZp
Z3VyYXRpb25MaXN0ID0gMkQ5RkIyMjQyMzc1MjM4MzAwNDlGOTM2IC8qIEJ1aWxkIGNvbmZpZ3Vy
YXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJHUFUiICovOwpAQCAtMTM3NDgsNyArMTMx
NTksNiBAQAogCQkJCTJFMTZCNkY0MjAxOUJDMjUwMDg5OTZENiAvKiBDb3B5IEFkZGl0aW9uYWwg
UmVzb3VyY2VzICovLAogCQkJCThEQzJFRjUyMDQ4NkE2OTQwMDk4QjIxNiAvKiBSZXNvdXJjZXMg
Ki8sCiAJCQkJMzcyNTg5NDMxQzFFNDk2ODAwQzkyQ0E5IC8qIENvcHkgU2hpbXMgKi8sCi0JCQkJ
N0NCMTZGRUUxNzI0QkEwNTAwN0EwQTk1IC8qIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVz
ICovLAogCQkJCTk5Q0EzODYyMjA3Mjg2REIwMEJBRDU3OCAvKiBDb3B5IFdlYkRyaXZlciBBdG9t
cyB0byBGcmFtZXdvcmsgUHJpdmF0ZSBIZWFkZXJzICovLAogCQkJCTM3RTUzMTAxMUIyMzkxMDkw
MDc0RjBERiAvKiBDb3B5IGlPUyBTYW5kYm94IFByb2ZpbGVzIGZvciBNYW51YWwgU2FuZGJveGlu
ZyAqLywKIAkJCQkxQTA3RDJGNzE5MTlCMzY1MDBFQ0RBMTYgLyogQ29weSBNZXNzYWdlIEdlbmVy
YXRpb24gU2NyaXB0cyAqLywKQEAgLTEzNzczLDcgKzEzMTgzLDYgQEAKIAkJCQlFMUFDMkUzRTIw
RjdCOUMwMDBCMDg5N0QgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQkzN0Y3NDA3OTEy
NzIxRjc0MDA5Mzg2OUIgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQkyRDExQkEwNTIx
MjZBNUFFMDA2Rjg4NzggLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKLQkJCQkzN0IxRDAxNDFD
MUU0MjExMDBENjdGRTkgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCSk7CiAJCQluYW1l
ID0gV2ViS2l0OwogCQkJcHJvZHVjdEluc3RhbGxQYXRoID0gIiQoSE9NRSkvTGlicmFyeS9GcmFt
ZXdvcmtzIjsKQEAgLTEzODQyLDI2ICsxMzI1MSw2IEBACiAJCQlwcm9kdWN0UmVmZXJlbmNlID0g
QkM4MjgzQjExNkI0QkY3NzAwQTI3OEZFIC8qIGNvbS5hcHBsZS5XZWJLaXQuTmV0d29ya2luZy54
cGMgKi87CiAJCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLnhwYy1zZXJ2
aWNlIjsKIAkJfTsKLQkJQkM4Mjg0MUUxNkI0RkRGNjAwQTI3OEZFIC8qIFBsdWdpbi42NCAqLyA9
IHsKLQkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3Qg
PSBCQzgyODQyQTE2QjRGREY3MDBBMjc4RkUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZv
ciBQQlhOYXRpdmVUYXJnZXQgIlBsdWdpbi42NCIgKi87Ci0JCQlidWlsZFBoYXNlcyA9ICgKLQkJ
CQlCQzgyODQxQjE2QjRGREY2MDBBMjc4RkUgLyogU291cmNlcyAqLywKLQkJCQlCQzgyODQxQzE2
QjRGREY2MDBBMjc4RkUgLyogRnJhbWV3b3JrcyAqLywKLQkJCQlCQzgyODQxRDE2QjRGREY2MDBB
Mjc4RkUgLyogUmVzb3VyY2VzICovLAotCQkJCTdBNzlFMkREMjEwN0YyREQwMEVGMzJBNCAvKiBQ
cm9jZXNzIFBsdWdpbiBlbnRpdGxlbWVudHMgKi8sCi0JCQkpOwotCQkJYnVpbGRSdWxlcyA9ICgK
LQkJCSk7Ci0JCQlkZXBlbmRlbmNpZXMgPSAoCi0JCQkJRTFBQzJFM0EyMEY3QjlBNzAwQjA4OTdE
IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCi0JCQkJMzc1RTA2MkIxOTFFQThENDAwNEUzQ0FG
IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCi0JCQkpOwotCQkJbmFtZSA9IFBsdWdpbi42NDsK
LQkJCXByb2R1Y3ROYW1lID0gUGx1Z2luLjY0OwotCQkJcHJvZHVjdFJlZmVyZW5jZSA9IEJDODI4
NDFGMTZCNEZERjYwMEEyNzhGRSAvKiBjb20uYXBwbGUuV2ViS2l0LlBsdWdpbi42NC54cGMgKi87
Ci0JCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLnhwYy1zZXJ2aWNlIjsK
LQkJfTsKIAkJQ0Q5NTQ5MzQyNjE1OTAwNDAwODM3MkQ5IC8qIFdlYktpdFN3aWZ0ICovID0gewog
CQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IENE
OTU0OTNCMjYxNTkwMDQwMDgzNzJEOSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBC
WE5hdGl2ZVRhcmdldCAiV2ViS2l0U3dpZnQiICovOwpAQCAtMTM5MzQsMTMgKzEzMzIzLDExIEBA
CiAJCQkJMkQ3REVCRDgyMTI2OUM2QjAwQjlGNzNDIC8qIEdlbmVyYXRlIFVuaWZpZWQgU291cmNl
cyAqLywKIAkJCQlDMENFNzI4NTEyNDdFNjY4MDBCQzBFQzQgLyogRGVyaXZlZCBTb3VyY2VzICov
LAogCQkJCUExNkU2NUZGMjU4MTkzMDgwMEVFMTc0OSAvKiBNZWRpYUZvcm1hdFJlYWRlciAqLywK
LQkJCQkxQUMyNUZBRjEyQTQ4RUE3MDBCRDI2NzEgLyogUGx1Z2luUHJvY2Vzc1NoaW0gKi8sCiAJ
CQkJQkMzREU0NjUxNUE5MTc2MzAwOEQyNkZDIC8qIFdlYkNvbnRlbnQgKi8sCiAJCQkJMzcyRUJC
MzgyMDE3RTY0MzAwMDg1MDY0IC8qIFdlYkNvbnRlbnQuRGV2ZWxvcG1lbnQgKi8sCiAJCQkJQkM4
MjgzQjAxNkI0QkY3NzAwQTI3OEZFIC8qIE5ldHdvcmtpbmcgKi8sCiAJCQkJMkQ5RkIyMTYyMzc1
MjM4MzAwNDlGOTM2IC8qIEdQVSAqLywKIAkJCQk1NzQyQTJFNTI1MzU2MTNGMDBCN0JBMTQgLyog
V2ViQXV0aG4gKi8sCi0JCQkJQkM4Mjg0MUUxNkI0RkRGNjAwQTI3OEZFIC8qIFBsdWdpbi42NCAq
LywKIAkJCQlBN0FBREExMDE5Mzk1Q0E5MDAzRUExQzcgLyogU2FuZGJveCBQcm9maWxlcyAqLywK
IAkJCQlFMUFDMkUyNzIwRjdCOTRDMDBCMDg5N0QgLyogVW5sb2NrIEtleWNoYWluICovLAogCQkJ
CTUzMjVCRENEMjFERkY0NzcwMEEwREVFMSAvKiBBcHBseSBDb25maWd1cmF0aW9uIHRvIFhDRmls
ZUxpc3RzICovLApAQCAtMTM5ODIsNyArMTMzNjksNiBAQAogCQkJCUUxN0FFMkMzMTZCOUM2M0Ew
MDFDNDJGMSAvKiBjb20uYXBwbGUuV2ViS2l0Lk5ldHdvcmtQcm9jZXNzLnNiIGluIFJlc291cmNl
cyAqLywKIAkJCQk1NzJFQkJDNDI1MzZBQjg0MDAwNTUyQjMgLyogY29tLmFwcGxlLldlYktpdC5X
ZWJBdXRoblByb2Nlc3Muc2IgaW4gUmVzb3VyY2VzICovLAogCQkJCUUxMUQzNUFFMTZCNjNEMUIw
MDZEMjNENyAvKiBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYiBpbiBSZXNvdXJjZXMgKi8sCi0JCQkJ
NDE0REQzNzkyMEJGNDNGNTAwNjk1OUZCIC8qIGNvbS5jaXNjby53ZWJleC5wbHVnaW4uZ3BjNjQu
c2IgaW4gUmVzb3VyY2VzICovLAogCQkJCTZCRTk2OUMxMUU1NEQ0NTIwMDhCNzQ4MyAvKiBjb3Jl
UHJlZGljdGlvbl9tb2RlbCBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJOERDMkVGNTMwNDg2QTY5NDAw
OThCMjE2IC8qIEluZm9QbGlzdC5zdHJpbmdzIGluIFJlc291cmNlcyAqLywKIAkJCQkzRkIwOEU0
MzFGNjBCMjQwMDA1RTUzMTIgLyogaU9TLnhjYXNzZXRzIGluIFJlc291cmNlcyAqLywKQEAgLTE0
MDA1LDEzICsxMzM5MSw2IEBACiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07Ci0JCUJDODI4NDFEMTZCNEZERjYwMEEyNzhGRSAvKiBSZXNvdXJj
ZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhSZXNvdXJjZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rp
b25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwogLyogRW5kIFBCWFJlc291cmNlc0J1
aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ug
c2VjdGlvbiAqLwpAQCAtMTQ0MzcsMjIgKzEzODE2LDYgQEAKIAkJCXNoZWxsUGF0aCA9IC9iaW4v
c2g7CiAJCQlzaGVsbFNjcmlwdCA9ICJpZiBbIFwiJHtBQ1RJT059XCIgPSBcImluc3RhbGxoZHJz
XCIgXSB8fCBbIFwiJHtBQ1RJT059XCIgPSBcImluc3RhbGxhcGlcIiBdOyB0aGVuXG4gICAgZXhp
dCAwO1xuZmlcblxuaWYgWyAtZiAuLi8uLi9Ub29scy9TY3JpcHRzL2NoZWNrLWZvci1pbmFwcHJv
cHJpYXRlLWZpbGVzLWluLWZyYW1ld29yayBdOyB0aGVuXG4gICAgLi4vLi4vVG9vbHMvU2NyaXB0
cy9jaGVjay1mb3ItaW5hcHByb3ByaWF0ZS1maWxlcy1pbi1mcmFtZXdvcmsgfHwgZXhpdCAkP1xu
ZmlcbiI7CiAJCX07Ci0JCTdBNzlFMkREMjEwN0YyREQwMEVGMzJBNCAvKiBQcm9jZXNzIFBsdWdp
biBlbnRpdGxlbWVudHMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7
Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwot
CQkJaW5wdXRQYXRocyA9ICgKLQkJCQkiJChTUkNST09UKS9TY3JpcHRzL3Byb2Nlc3MtZW50aXRs
ZW1lbnRzLnNoIiwKLQkJCSk7Ci0JCQluYW1lID0gIlByb2Nlc3MgUGx1Z2luIGVudGl0bGVtZW50
cyI7Ci0JCQlvdXRwdXRQYXRocyA9ICgKLQkJCQkiJChXS19QUk9DRVNTRURfWENFTlRfRklMRSki
LAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQkJ
c2hlbGxQYXRoID0gL2Jpbi9zaDsKLQkJCXNoZWxsU2NyaXB0ID0gIlNjcmlwdHMvcHJvY2Vzcy1l
bnRpdGxlbWVudHMuc2hcbiI7Ci0JCX07CiAJCTdBRkNCRDU0MjBCODkxMUQwMEY1NUM5QyAvKiBQ
cm9jZXNzIFdlYkNvbnRlbnQgZW50aXRsZW1lbnRzICovID0gewogCQkJaXNhID0gUEJYU2hlbGxT
Y3JpcHRCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTE0
NjQ4LDE0ICsxNDAxMSw2IEBACiAvKiBFbmQgUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlIHNlY3Rp
b24gKi8KIAogLyogQmVnaW4gUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQkxQUMy
NUZBRDEyQTQ4RUE3MDBCRDI2NzEgLyogU291cmNlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWFNvdXJj
ZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVz
ID0gKAotCQkJCTFBQzI1RkMyMTJBNDhGNjAwMEJEMjY3MSAvKiBQbHVnaW5Qcm9jZXNzU2hpbS5t
bSBpbiBTb3VyY2VzICovLAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwotCQl9OwogCQkyRDlGQjIxQjIzNzUyMzgzMDA0OUY5MzYgLyogU291cmNlcyAq
LyA9IHsKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKQEAgLTE0Njg3LDExICsxNDA0MiwxMSBAQAogCQkJaXNhID0gUEJYU291
cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmls
ZXMgPSAoCi0JCQkJNTEyQ0Q2QTAyNzIzMzkzQTAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb24ubW0g
aW4gU291cmNlcyAqLywKIAkJCQk1QzE1N0EwMTI3MTdCN0ZCMDBFRDUyODAgLyogQXJndW1lbnRD
b2RlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxNTc5RkYyNzE3QjZEMjAwRUQ1MjgwIC8q
IERhZW1vbkRlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxNTc5RkUyNzE3QjZDMTAw
RUQ1MjgwIC8qIERhZW1vbkVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxNTc5RkIy
NzE3QUY1MDAwRUQ1MjgwIC8qIERhZW1vblV0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTUxMkNENkEwMjcyMzM5M0EwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNUMxNTdBMEMyNzE3Q0ExRDAwRUQ1MjgwIC8qIFdlYlB1c2hEYWVtb25NYWluLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CkBAIC0xNDc1Niw4ICsxNDExMSw2IEBACiAJCQkJMjc0OUY2NDQyMTQ2NTYxQjAw
ODM4MEJGIC8qIEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkyNzQ5RjY0NTIxNDY1NjFFMDA4MzgwQkYgLyogSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5QkY1RUM2NDI1NDExNDU2MDA5ODRFNzcgLyogSlNJUENC
aW5kaW5nLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTJEOTEzNDQxMjEyQ0Y5RjAwMDEyOEFGRCAv
KiBKU05QTWV0aG9kLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTJEOTEzNDQyMjEyQ0Y5RjAwMDEy
OEFGRCAvKiBKU05QT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMxNEQzN0ZFMjRBQ0Uw
ODYwMDdGRjAxNCAvKiBMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlTWFuYWdlci5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUMxNzEwQ0Y3MjRBQTY0MzIwMEQ3QzExMiAvKiBMYXVuY2hTZXJ2aWNlc0RhdGFi
YXNlT2JzZXJ2ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkyOTg0RjU4ODE2NEJBMDk1MDA0QkMw
QzYgLyogTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtMTQ3NzUsMTAgKzE0MTI4LDYgQEAKIAkJCQkyRDkyQTc4MjIxMkI2QTcx
MDBGNDkzRkQgLyogTWVzc2FnZVNlbmRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDkyQTc3
QTIxMkI2QTYxMDBGNDkzRkQgLyogTW9kdWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU3Qjgy
NjQ1MjMwNEYxNDAwMEI3MkVCMCAvKiBOZWFyRmllbGRTb2Z0TGluay5tbSBpbiBTb3VyY2VzICov
LAotCQkJCTJEOTEzNDQzMjEyQ0Y5RjAwMDEyOEFGRCAvKiBOZXRzY2FwZUJyb3dzZXJGdW5jcy5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQkyRDkxMzQ0NDIxMkNGOUYwMDAxMjhBRkQgLyogTmV0c2Nh
cGVQbHVnaW4uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkQ5MkE3OTYyMTJCNkFEQTAwRjQ5M0ZE
IC8qIE5ldHNjYXBlUGx1Z2luTW9kdWxlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTJEOTEzNDQ1
MjEyQ0Y5RjAwMDEyOEFGRCAvKiBOZXRzY2FwZVBsdWdpblN0cmVhbS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlDMUMxQjMwRjI1NDBGNTBEMDBEOTEwMEIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3NNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUREOUYyODE2MzY3REEyMDAxNTc4
RTkgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTJGMDYwRTExNjU0MzE4NTAwRjMyODFCIC8qIE5ldHdvcmtDb250
ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MTQ3OTUsMzUgKzE0MTQ0LDkgQEAKIAkJCQk1QzBCMTc3ODFFN0M4ODBFMDBFOTEyM0MgLyogTmV0
d29ya1NvY2tldFN0cmVhbU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
MzA4NUREMjI2RTJGNThEMDAwRUM2QTcgLyogTmV0d29ya1N0b3JhZ2VNYW5hZ2VyTWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNDUyNzAzMjcxRkJBM0EwMDA0NjdCNiAv
KiBOb3RpZmljYXRpb25NYW5hZ2VyTWVzc2FnZUhhbmRsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJMkQ5MkE3OTAyMTJCNkFENDAwRjQ5M0ZEIC8qIE5QSWRlbnRpZmll
ckRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkQ5MTM0NDYyMTJDRjlGMDAwMTI4QUZEIC8q
IE5QSlNPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkQ5MkE3OTEyMTJCNkFENDAwRjQ5
M0ZEIC8qIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTFB
MkQ4NDM5MTI3RjY1RDUwMDFFQjk2MiAvKiBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlck1lc3NhZ2VS
ZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRDkyQTc5MjIxMkI2QUQ0MDBGNDkzRkQg
LyogTlBPYmplY3RQcm94eS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRDkyQTc5MzIxMkI2QUQ0
MDBGNDkzRkQgLyogTlBSZW1vdGVPYmplY3RNYXAuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkQ5
MTM0NDcyMTJDRjlGMDAwMTI4QUZEIC8qIE5QUnVudGltZU9iamVjdE1hcC5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQkyRDkxMzQ0ODIxMkNGOUYwMDAxMjhBRkQgLyogTlBSdW50aW1lVXRpbGl0aWVz
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTJEOTJBNzk0MjEyQjZBRDQwMEY0OTNGRCAvKiBOUFZh
cmlhbnREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQTI5QTI4MUNCRUI2N0EwMDkwMUND
RiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUNEQTI5QTJBMUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5MTM0NDky
MTJDRjlGMDAwMTI4QUZEIC8qIFBsdWdpbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxQThFRjRD
QzEyNTI0MDM3MDBGNzA2N0YgLyogUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTFBMkQ5MUE2MTI4MUQ3MzkwMDFFQjk2MiAvKiBQbHVnaW5Db250cm9sbGVyUHJv
eHlNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQkxQThFRjk2RTEyNTJBRjZCMDBGNzA2N0YgLyog
UGx1Z2luQ29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTFBMTc5NzdGMTM3RUU4MkMwMEY5N0Q0NSAvKiBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkQ5MkE3OTcyMTJCNkFEQTAwRjQ5M0ZEIC8qIFBsdWdp
bkluZm9ybWF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTFBMDQzOTc3MTI0RDAzNDgwMEZG
QkZCNSAvKiBQbHVnaW5Qcm9jZXNzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTJEOTEzNDRBMjEy
Q0Y5RjAwMDEyOEFGRCAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQkyRDkxMzQ0QjIxMkNGOUYwMDAxMjhBRkQgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rp
b25NYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTFBNzg2NUI5MTZDQUM3MTUwMEFDRTgz
QSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJMUEyQkI2RDAxNDExN0I0RDAwMEYzNUQ0IC8qIFBsdWdpblByb2Nl
c3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTJEOTJB
Nzk1MjEyQjZBRDQwMEY0OTNGRCAvKiBQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTFBQTQ3OTIzMTJBNTlGRDkwMDgyMzZDMyAvKiBQbHVnaW5Q
cm9jZXNzTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMUEwNDNDRUIxMjRGRTM4RjAwRkZCRkI1
IC8qIFBsdWdpblByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
MUEwNDNCNUQxMjRENUU5RDAwRkZCRkI1IC8qIFBsdWdpblByb2Nlc3NQcm94eU1lc3NhZ2VSZWNl
aXZlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRDkxMzQ0QzIxMkNGOUYwMDAxMjhBRkQgLyog
UGx1Z2luUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUE4RUZBNzAxMjUyQjg0MTAwRjcw
NjdGIC8qIFBsdWdpblByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CUJDODI4NDREMTZCNTA4MUMwMEEyNzhGRSAvKiBQbHVnaW5TZXJ2aWNlRW50cnlQb2ludC5tbSBp
biBTb3VyY2VzICovLAogCQkJCTJEOTEzNDREMjEyQ0Y5RjAwMDEyOEFGRCAvKiBQbHVnaW5WaWV3
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMxNUNCQjM3MjNGMzdFQ0IwMDMwMENDNyAvKiBQcmVm
ZXJlbmNlT2JzZXJ2ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkyRDU0QzMxQjIxMkY0REE2MDA0
OUMxNzQgLyogUHJvY2Vzc0xhdW5jaGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTUxMjEsOCAr
MTQ0NDQsNiBAQAogCQkJCTMxQjM2Mjk5MjE0MUY2RTgwMDdCRkE1MyAvKiBXZWJQcmVmZXJlbmNl
c0ludGVybmFsRGVidWdGZWF0dXJlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0IxMDBGMTFG
QTM4NThBMDAxNzI5RUUgLyogV2ViUHJlZmVyZW5jZXNLZXlzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdDQjEwMEY0MUZBMzg1OTIwMDE3MjlFRSAvKiBXZWJQcmVmZXJlbmNlc1N0b3JlRGVmYXVs
dHNNYXAuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUEwNDNBMEExMjREMTFBOTAwRkZCRkI1IC8q
IFdlYlByb2Nlc3NDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTFBMDQzRjY5MTI1
MTREOEIwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzMwNjZCRTEyNUE0NDIxMDBFNzEyNzggLyogV2ViUHJvY2Vz
c01lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0U0RDIyNzFBNDkxNkMy
MDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bvb2xNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkNFRTdBRDAxMjgxNzk4ODAwOTgyN0RBIC8qIFdlYlByb2Nlc3NQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE1MTg2LDE1ICsxNDUwNyw2IEBACiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Ci0J
CUJDODI4NDFCMTZCNEZERjYwMEEyNzhGRSAvKiBTb3VyY2VzICovID0gewotCQkJaXNhID0gUEJY
U291cmNlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJ
ZmlsZXMgPSAoCi0JCQkJNUNFOTEyMTMyMjkzQzI3OTAwNUJFQzc4IC8qIEF1eGlsaWFyeVByb2Nl
c3NNYWluLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTVDOUE5MTE0MjI4RjY5Q0UwMDVDNUIxNyAv
KiBYUENTZXJ2aWNlTWFpbi5tbSBpbiBTb3VyY2VzICovLAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwogCQlDRDk1NDkzMjI2MTU5MDA0MDA4
MzcyRDkgLyogU291cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwog
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTE1MjM2LDExICsxNDU0OCw2IEBA
CiAJCQl0YXJnZXQgPSAzNzJFQkIzODIwMTdFNjQzMDAwODUwNjQgLyogV2ViQ29udGVudC5EZXZl
bG9wbWVudCAqLzsKIAkJCXRhcmdldFByb3h5ID0gMzcyRUJCNDgyMDE3RTZDRjAwMDg1MDY0IC8q
IFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKIAkJfTsKLQkJMzc1RTA2MkIxOTFFQThENDAwNEUz
Q0FGIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7Ci0JCQlpc2EgPSBQQlhUYXJnZXREZXBl
bmRlbmN5OwotCQkJdGFyZ2V0ID0gOERDMkVGNEYwNDg2QTY5NDAwOThCMjE2IC8qIFdlYktpdCAq
LzsKLQkJCXRhcmdldFByb3h5ID0gMzc1RTA2MkExOTFFQThENDAwNEUzQ0FGIC8qIFBCWENvbnRh
aW5lckl0ZW1Qcm94eSAqLzsKLQkJfTsKIAkJMzc1RTA2MzExOTFFQTkwNDAwNEUzQ0FGIC8qIFBC
WFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CiAJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5Owog
CQkJdGFyZ2V0ID0gOERDMkVGNEYwNDg2QTY5NDAwOThCMjE2IC8qIFdlYktpdCAqLzsKQEAgLTE1
MjUxLDExICsxNDU1OCw2IEBACiAJCQl0YXJnZXQgPSA4REMyRUY0RjA0ODZBNjk0MDA5OEIyMTYg
LyogV2ViS2l0ICovOwogCQkJdGFyZ2V0UHJveHkgPSAzNzVFMDYzMjE5MUVBOTA5MDA0RTNDQUYg
LyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOwogCQl9OwotCQkzN0IxRDAxNDFDMUU0MjExMDBE
NjdGRTkgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKLQkJCWlzYSA9IFBCWFRhcmdldERl
cGVuZGVuY3k7Ci0JCQl0YXJnZXQgPSAxQUMyNUZBRjEyQTQ4RUE3MDBCRDI2NzEgLyogUGx1Z2lu
UHJvY2Vzc1NoaW0gKi87Ci0JCQl0YXJnZXRQcm94eSA9IDM3QjFEMDEzMUMxRTQyMTEwMEQ2N0ZF
OSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87Ci0JCX07CiAJCTM3Rjc0MDc5MTI3MjFGNzQw
MDkzODY5QiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0gewogCQkJaXNhID0gUEJYVGFyZ2V0
RGVwZW5kZW5jeTsKIAkJCXRhcmdldCA9IEMwQ0U3Mjg1MTI0N0U2NjgwMEJDMEVDNCAvKiBEZXJp
dmVkIFNvdXJjZXMgKi87CkBAIC0xNTMyMSwxMSArMTQ2MjMsNiBAQAogCQkJdGFyZ2V0ID0gQkM4
MjgzQjAxNkI0QkY3NzAwQTI3OEZFIC8qIE5ldHdvcmtpbmcgKi87CiAJCQl0YXJnZXRQcm94eSA9
IEJDODI4M0Q0MTZCNEMwMUYwMEEyNzhGRSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CiAJ
CX07Ci0JCUJDODI4NDQ2MTZCNEZGNjYwMEEyNzhGRSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICov
ID0gewotCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKLQkJCXRhcmdldCA9IEJDODI4NDFF
MTZCNEZERjYwMEEyNzhGRSAvKiBQbHVnaW4uNjQgKi87Ci0JCQl0YXJnZXRQcm94eSA9IEJDODI4
NDQ1MTZCNEZGNjYwMEEyNzhGRSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87Ci0JCX07CiAJ
CUJDQThENDY4MTVCQ0UwRDYwMDlEQzFGMSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0gewog
CQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKIAkJCXRhcmdldCA9IEJDM0RFNDY1MTVBOTE3
NjMwMDhEMjZGQyAvKiBXZWJDb250ZW50ICovOwpAQCAtMTUzNTEsMTEgKzE0NjQ4LDYgQEAKIAkJ
CXRhcmdldCA9IDhEQzJFRjRGMDQ4NkE2OTQwMDk4QjIxNiAvKiBXZWJLaXQgKi87CiAJCQl0YXJn
ZXRQcm94eSA9IERGRUUzNjk5MjZGQUQxMTIwMDdDNzhFMCAvKiBQQlhDb250YWluZXJJdGVtUHJv
eHkgKi87CiAJCX07Ci0JCUUxQUMyRTJFMjBGN0I5ODgwMEIwODk3RCAvKiBQQlhUYXJnZXREZXBl
bmRlbmN5ICovID0gewotCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKLQkJCXRhcmdldCA9
IEUxQUMyRTI3MjBGN0I5NEMwMEIwODk3RCAvKiBVbmxvY2sgS2V5Y2hhaW4gKi87Ci0JCQl0YXJn
ZXRQcm94eSA9IEUxQUMyRTJEMjBGN0I5ODgwMEIwODk3RCAvKiBQQlhDb250YWluZXJJdGVtUHJv
eHkgKi87Ci0JCX07CiAJCUUxQUMyRTMyMjBGN0I5OUIwMEIwODk3RCAvKiBQQlhUYXJnZXREZXBl
bmRlbmN5ICovID0gewogCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKIAkJCXRhcmdldCA9
IEUxQUMyRTI3MjBGN0I5NEMwMEIwODk3RCAvKiBVbmxvY2sgS2V5Y2hhaW4gKi87CkBAIC0xNTM3
MSwxMSArMTQ2NjMsNiBAQAogCQkJdGFyZ2V0ID0gRTFBQzJFMjcyMEY3Qjk0QzAwQjA4OTdEIC8q
IFVubG9jayBLZXljaGFpbiAqLzsKIAkJCXRhcmdldFByb3h5ID0gRTFBQzJFMzUyMEY3QjlBMTAw
QjA4OTdEIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKIAkJfTsKLQkJRTFBQzJFM0EyMEY3
QjlBNzAwQjA4OTdEIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7Ci0JCQlpc2EgPSBQQlhU
YXJnZXREZXBlbmRlbmN5OwotCQkJdGFyZ2V0ID0gRTFBQzJFMjcyMEY3Qjk0QzAwQjA4OTdEIC8q
IFVubG9jayBLZXljaGFpbiAqLzsKLQkJCXRhcmdldFByb3h5ID0gRTFBQzJFMzkyMEY3QjlBNzAw
QjA4OTdEIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKLQkJfTsKIAkJRTFBQzJFM0UyMEY3
QjlDMDAwQjA4OTdEIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CiAJCQlpc2EgPSBQQlhU
YXJnZXREZXBlbmRlbmN5OwogCQkJdGFyZ2V0ID0gRTFBQzJFMjcyMEY3Qjk0QzAwQjA4OTdEIC8q
IFVubG9jayBLZXljaGFpbiAqLzsKQEAgLTE1NDExLDMzICsxNDY5OCw2IEBACiAJCQl9OwogCQkJ
bmFtZSA9IFJlbGVhc2U7CiAJCX07Ci0JCTFBQzI1RkIxMTJBNDhFQTcwMEJEMjY3MSAvKiBEZWJ1
ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3Vy
YXRpb25SZWZlcmVuY2UgPSBBMUVERDJEQjE4ODRCOTY0MDBCQkZFOTggLyogUGx1Z2luUHJvY2Vz
c1NoaW0ueGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCU9USEVSX0xERkxB
R1MgPSAiJChPVEhFUl9MREZMQUdTKSI7Ci0JCQkJUFJPRFVDVF9OQU1FID0gUGx1Z2luUHJvY2Vz
c1NoaW07Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQkxQUMyNUZCMjEyQTQ4RUE3
MDBCRDI2NzEgLyogUmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9u
OwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBBMUVERDJEQjE4ODRCOTY0MDBCQkZF
OTggLyogUGx1Z2luUHJvY2Vzc1NoaW0ueGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0g
ewotCQkJCU9USEVSX0xERkxBR1MgPSAiJChPVEhFUl9MREZMQUdTKSI7Ci0JCQkJUFJPRFVDVF9O
QU1FID0gUGx1Z2luUHJvY2Vzc1NoaW07Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVhc2U7Ci0JCX07
Ci0JCTFBQzI1RkIzMTJBNDhFQTcwMEJEMjY3MSAvKiBQcm9kdWN0aW9uICovID0gewotCQkJaXNh
ID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9
IEExRUREMkRCMTg4NEI5NjQwMEJCRkU5OCAvKiBQbHVnaW5Qcm9jZXNzU2hpbS54Y2NvbmZpZyAq
LzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJT1RIRVJfTERGTEFHUyA9ICIkKE9USEVSX0xE
RkxBR1MpIjsKLQkJCQlQUk9EVUNUX05BTUUgPSBQbHVnaW5Qcm9jZXNzU2hpbTsKLQkJCX07Ci0J
CQluYW1lID0gUHJvZHVjdGlvbjsKLQkJfTsKIAkJMURFQjkxQUUwODczM0RBNTAwMTBFOUNEIC8q
IERlYnVnICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQliYXNlQ29u
ZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDQjg2RjRCMTE2QUFBQ0QwMENFMjBCNyAvKiBXZWJLaXQu
eGNjb25maWcgKi87CkBAIC0xNTc2NCwyNyArMTUwMjQsNiBAQAogCQkJfTsKIAkJCW5hbWUgPSBQ
cm9kdWN0aW9uOwogCQl9OwotCQlCQzgyODQyQjE2QjRGREY3MDBBMjc4RkUgLyogRGVidWcgKi8g
PSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9u
UmVmZXJlbmNlID0gQkM4MjgzRjQxNkI0RkM1MzAwQTI3OEZFIC8qIFBsdWdpblNlcnZpY2UueGNj
b25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCW5hbWUgPSBEZWJ1ZzsK
LQkJfTsKLQkJQkM4Mjg0MkMxNkI0RkRGNzAwQTI3OEZFIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlp
c2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNl
ID0gQkM4MjgzRjQxNkI0RkM1MzAwQTI3OEZFIC8qIFBsdWdpblNlcnZpY2UueGNjb25maWcgKi87
Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCW5hbWUgPSBSZWxlYXNlOwotCQl9Owot
CQlCQzgyODQyRDE2QjRGREY3MDBBMjc4RkUgLyogUHJvZHVjdGlvbiAqLyA9IHsKLQkJCWlzYSA9
IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBC
QzgyODNGNDE2QjRGQzUzMDBBMjc4RkUgLyogUGx1Z2luU2VydmljZS54Y2NvbmZpZyAqLzsKLQkJ
CWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9IFByb2R1Y3Rpb247Ci0JCX07CiAJ
CUMwQ0U3Mjg2MTI0N0U2NjgwMEJDMEVDNCAvKiBEZWJ1ZyAqLyA9IHsKIAkJCWlzYSA9IFhDQnVp
bGRDb25maWd1cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSA1REFENzNG
MTExNkZGOTBDMDBFRTUzOTYgLyogQmFzZVRhcmdldC54Y2NvbmZpZyAqLzsKQEAgLTE1ODk2LDE2
ICsxNTEzNSw2IEBACiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CiAJCQlk
ZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9uOwogCQl9OwotCQkxQUMyNUZCQTEy
QTQ4RUI2MDBCRDI2NzEgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVU
YXJnZXQgIlBsdWdpblByb2Nlc3NTaGltIiAqLyA9IHsKLQkJCWlzYSA9IFhDQ29uZmlndXJhdGlv
bkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAotCQkJCTFBQzI1RkIxMTJBNDhFQTcw
MEJEMjY3MSAvKiBEZWJ1ZyAqLywKLQkJCQkxQUMyNUZCMjEyQTQ4RUE3MDBCRDI2NzEgLyogUmVs
ZWFzZSAqLywKLQkJCQkxQUMyNUZCMzEyQTQ4RUE3MDBCRDI2NzEgLyogUHJvZHVjdGlvbiAqLywK
LQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7Ci0JCQlkZWZhdWx0
Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9uOwotCQl9OwogCQkxREVCOTFBRDA4NzMzREE1
MDAxMEU5Q0QgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQg
IldlYktpdCIgKi8gPSB7CiAJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwogCQkJYnVpbGRD
b25maWd1cmF0aW9ucyA9ICgKQEAgLTE2MDQ2LDE2ICsxNTI3NSw2IEBACiAJCQlkZWZhdWx0Q29u
ZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQ
cm9kdWN0aW9uOwogCQl9OwotCQlCQzgyODQyQTE2QjRGREY3MDBBMjc4RkUgLyogQnVpbGQgY29u
ZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIlBsdWdpbi42NCIgKi8gPSB7Ci0J
CQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgK
LQkJCQlCQzgyODQyQjE2QjRGREY3MDBBMjc4RkUgLyogRGVidWcgKi8sCi0JCQkJQkM4Mjg0MkMx
NkI0RkRGNzAwQTI3OEZFIC8qIFJlbGVhc2UgKi8sCi0JCQkJQkM4Mjg0MkQxNkI0RkRGNzAwQTI3
OEZFIC8qIFByb2R1Y3Rpb24gKi8sCi0JCQkpOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zp
c2libGUgPSAwOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUHJvZHVjdGlvbjsKLQkJ
fTsKIAkJQzBDRTcyODkxMjQ3RTY4NjAwQkMwRUM0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlz
dCBmb3IgUEJYQWdncmVnYXRlVGFyZ2V0ICJEZXJpdmVkIFNvdXJjZXMiICovID0gewogCQkJaXNh
ID0gWENDb25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0
aG9kLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBN
ZXRob2QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjRhOTZlMTc5NGNiOGQ5
MWVkMzlmMTVkM2Q0NWJmMDA5Njk0OGM3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L0pTTlBNZXRob2QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTTlBNZXRob2QuaCIKLQot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiSlNOUE9iamVjdC5o
IgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Vycm9yLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Jc29T
dWJzcGFjZVBlclZNLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9i
amVjdElubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdC5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvSlNIVE1MRWxlbWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSlNQbHVn
aW5FbGVtZW50RnVuY3Rpb25zLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNw
YWNlIEpTQzsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1TVEFUSUNfQVNTRVJUX0lTX1RS
SVZJQUxMWV9ERVNUUlVDVElCTEUoSlNOUE1ldGhvZCk7Ci0KLWNvbnN0IENsYXNzSW5mbyBKU05Q
TWV0aG9kOjpzX2luZm8gPSB7ICJOUE1ldGhvZCIsICZJbnRlcm5hbEZ1bmN0aW9uOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNOUE1ldGhvZCkgfTsKLQot
c3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY2FsbE1ldGhvZCk7Ci0KLUpTTlBNZXRo
b2Q6OkpTTlBNZXRob2QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIE5QSWRlbnRpZmllciBucElkZW50aWZpZXIpCi0gICAgOiBJbnRlcm5hbEZ1bmN0
aW9uKGdsb2JhbE9iamVjdC0+dm0oKSwgc3RydWN0dXJlLCBjYWxsTWV0aG9kLCBudWxscHRyKQot
ICAgICwgbV9ucElkZW50aWZpZXIobnBJZGVudGlmaWVyKQotewotfQotCi12b2lkIEpTTlBNZXRo
b2Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtLCAwLCBuYW1lKTsKLSAgICBBU1NFUlQoaW5oZXJpdHModm0s
IGluZm8oKSkpOwotfQotCi1Jc29TdWJzcGFjZSogSlNOUE1ldGhvZDo6c3Vic3BhY2VGb3JJbXBs
KFZNJiB2bSkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SXNvU3Vic3BhY2VQZXJWTT4g
cGVyVk0oW10gKFZNJiB2bSkgeyByZXR1cm4gSVNPX1NVQlNQQUNFX1BBUkFNRVRFUlModm0uY2Vs
bEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNOUE1ldGhvZCk7IH0pOwotICAgIHJldHVybiAmcGVyVk0u
Z2V0KCkuZm9yVk0odm0pOwotfQotCi1KU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbE1ldGhv
ZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkK
LXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgSlNOUE1ldGhvZCoganNOUE1ldGhvZCA9IGpz
Q2FzdDxKU05QTWV0aG9kKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKLQotICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKTsKLQotICAgIC8vIENoZWNrIGlmIHdl
J3JlIGNhbGxpbmcgYSBtZXRob2Qgb24gdGhlIHBsdWctaW4gc2NyaXB0IG9iamVjdC4KLSAgICBp
ZiAodGhpc1ZhbHVlLmluaGVyaXRzPEpTSFRNTEVsZW1lbnQ+KHZtKSkgewotICAgICAgICBKU0hU
TUxFbGVtZW50KiBlbGVtZW50ID0ganNDYXN0PEpTSFRNTEVsZW1lbnQqPihhc09iamVjdCh0aGlz
VmFsdWUpKTsKLQotICAgICAgICAvLyBUcnkgdG8gZ2V0IHRoZSBzY3JpcHQgb2JqZWN0IGZyb20g
dGhlIGVsZW1lbnQKLSAgICAgICAgaWYgKEpTT2JqZWN0KiBzY3JpcHRPYmplY3QgPSBwbHVnaW5T
Y3JpcHRPYmplY3QoZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSkKLSAgICAgICAgICAgIHRoaXNWYWx1
ZSA9IHNjcmlwdE9iamVjdDsKLSAgICB9Ci0KLSAgICBpZiAodGhpc1ZhbHVlLmluaGVyaXRzPEpT
TlBPYmplY3Q+KHZtKSkgewotICAgICAgICBKU05QT2JqZWN0KiBqc05QT2JqZWN0ID0ganNDYXN0
PEpTTlBPYmplY3QqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTlBPYmplY3QtPmNhbGxNZXRob2QoZ2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUsIGpzTlBNZXRob2QtPm5wSWRlbnRpZmllcigpKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0aG9k
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0aG9k
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3NjkwMjcxNjg4NTUwMWM3ZjUyNzk5
MDMwODdhZWU0ZThlNDRmYmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1l
dGhvZC5oCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBKU05QTWV0aG9kX2gKLSNkZWZpbmUgSlNOUE1ldGhvZF9oCi0KLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9u
UHJvdG90eXBlLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW50ZXJuYWxGdW5jdGlvbi5o
PgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTR2xvYmFsT2JqZWN0Lmg+Ci0KLXR5cGVkZWYg
dm9pZCogTlBJZGVudGlmaWVyOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotLy8gQSBKU09iamVj
dCB0aGF0IHdyYXBzIGFuIE5QTWV0aG9kLgotY2xhc3MgSlNOUE1ldGhvZCBmaW5hbCA6IHB1Ymxp
YyBKU0M6OkludGVybmFsRnVuY3Rpb24gewotcHVibGljOgotICAgIHVzaW5nIEJhc2UgPSBKU0M6
OkludGVybmFsRnVuY3Rpb247Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlND
OjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCi0gICAgewotICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZt
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlNOUE1ldGhvZCogY3JlYXRlKEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBOUElkZW50aWZpZXIgbnBJ
ZGVudCkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwot
ICAgICAgICBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlID0gY3JlYXRlU3RydWN0dXJlKGdsb2Jh
bE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9uUHJvdG90
eXBlKCkpOwotICAgICAgICBKU05QTWV0aG9kKiBtZXRob2QgPSBuZXcgKEpTQzo6YWxsb2NhdGVD
ZWxsPEpTTlBNZXRob2Q+KHZtLmhlYXApKSBKU05QTWV0aG9kKGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlLCBucElkZW50KTsKLSAgICAgICAgbWV0aG9kLT5maW5pc2hDcmVhdGlvbih2bSwgbmFtZSk7
Ci0gICAgICAgIHJldHVybiBtZXRob2Q7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotCi0g
ICAgTlBJZGVudGlmaWVyIG5wSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fbnBJZGVudGlm
aWVyOyB9Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJik7Ci0gICAgCi0gICAgSlNOUE1ldGhvZChKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqLCBOUElkZW50aWZpZXIpOwotICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpWTSYsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0KLSAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6SW50ZXJuYWxGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKLSAgICB9Ci0KLSAgICBOUElkZW50aWZpZXIgbV9ucElkZW50aWZpZXI7Ci19
OwotCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0KLSNlbmRpZiAvLyBKU05QTWV0aG9kX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkZjQ3MDA1NmIwZGNhMjgyMjc2ZDc5ZTM3NGVl
NDVmN2RmNGI0M2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTTlBPYmplY3QuaCIKLQotI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiSlNOUE1ldGhvZC5oIgotI2luY2x1ZGUg
Ik5QSlNPYmplY3QuaCIKLSNpbmNsdWRlICJOUFJ1bnRpbWVPYmplY3RNYXAuaCIKLSNpbmNsdWRl
ICJOUFJ1bnRpbWVVdGlsaXRpZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BdXhpbGlh
cnlCYXJyaWVySW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Vycm9yLmg+Ci0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSWRlbnRpZmllcklubGluZXMuaD4KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9Jc29TdWJzcGFjZVBlclZNLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9j
ay5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09iamVjdFByb3RvdHlwZS5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvQ29tbW9uVk0uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RPTVdpbmRvdy5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvSWRlbnRpZmllclJlcC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSlNE
T01XaW5kb3dCYXNlLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3Bh
Y2UgSlNDOwotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXN0YXRpYyBKU0NfREVDTEFSRV9D
VVNUT01fR0VUVEVSKHByb3BlcnR5R2V0dGVyKTsKLXN0YXRpYyBKU0NfREVDTEFSRV9DVVNUT01f
R0VUVEVSKG1ldGhvZEdldHRlcik7Ci0KLXN0YXRpYyBOUElkZW50aWZpZXIgbnBJZGVudGlmaWVy
RnJvbUlkZW50aWZpZXIoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICBTdHJpbmcg
bmFtZShwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKLSAgICAvLyBJZiB0aGUgcHJvcGVydHlO
YW1lIGlzIFN5bWJvbC4KLSAgICBpZiAobmFtZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PE5QSWRlbnRpZmllcj4oSWRlbnRpZmllclJl
cDo6Z2V0KG5hbWUudXRmOCgpLmRhdGEoKSkpOwotfQotCi1zdGF0aWMgSlNDOjpFeGNlcHRpb24q
IHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBUaHJvd1Njb3BlJiBzY29wZSkKLXsKLSAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24obGV4
aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsICJUcnlpbmcgdG8gYWNjZXNzIG9iamVjdCBmcm9tIGRlc3Ryb3llZCBwbHVnLWlu
LiIpKTsKLX0KLQotY29uc3QgQ2xhc3NJbmZvIEpTTlBPYmplY3Q6OnNfaW5mbyA9IHsgIk5QT2Jq
ZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU05QT2JqZWN0KSB9OwotCi1KU05QT2JqZWN0OjpKU05QT2JqZWN0KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBOUFJ1bnRpbWVPYmplY3RNYXAq
IG9iamVjdE1hcCwgTlBPYmplY3QqIG5wT2JqZWN0KQotICAgIDogSlNEZXN0cnVjdGlibGVPYmpl
Y3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX29iamVjdE1hcChvYmpl
Y3RNYXApCi0gICAgLCBtX25wT2JqZWN0KG5wT2JqZWN0KQotewotICAgIEFTU0VSVChnbG9iYWxP
YmplY3QgPT0gc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSk7Ci19Ci0KLXZvaWQgSlNOUE9iamVj
dDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OwotICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0KLSAgICAvLyBXZSBzaG91bGQg
bmV2ZXIgaGF2ZSBhbiBOUEpTT2JqZWN0IGluc2lkZSBhIEpTTlBPYmplY3QuCi0gICAgQVNTRVJU
KCFOUEpTT2JqZWN0Ojppc05QSlNPYmplY3QobV9ucE9iamVjdCkpOwotCi0gICAgcmV0YWluTlBP
YmplY3QobV9ucE9iamVjdCk7Ci19Ci0KLUpTTlBPYmplY3Q6On5KU05QT2JqZWN0KCkKLXsKLSAg
ICBpZiAobV9ucE9iamVjdCkKLSAgICAgICAgaW52YWxpZGF0ZSgpOwotfQotCi12b2lkIEpTTlBP
YmplY3Q6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIHN0YXRpY19jYXN0PEpTTlBPYmpl
Y3QqPihjZWxsKS0+SlNOUE9iamVjdDo6fkpTTlBPYmplY3QoKTsKLX0KLQotdm9pZCBKU05QT2Jq
ZWN0OjppbnZhbGlkYXRlKCkKLXsKLSAgICBBU1NFUlQobV9ucE9iamVjdCk7Ci0KLSAgICByZWxl
YXNlTlBPYmplY3QobV9ucE9iamVjdCk7Ci0gICAgbV9ucE9iamVjdCA9IDA7Ci19Ci0KLU5QT2Jq
ZWN0KiBKU05QT2JqZWN0OjpsZWFrTlBPYmplY3QoKQotewotICAgIEFTU0VSVChtX25wT2JqZWN0
KTsKLQotICAgIE5QT2JqZWN0KiBvYmplY3QgPSBtX25wT2JqZWN0OwotICAgIG1fbnBPYmplY3Qg
PSAwOwotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLUpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbE1l
dGhvZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIE5QSWRlbnRpZmllciBtZXRob2ROYW1lKQotewotICAgIFZNJiB2bSA9IGxleGljYWxH
bG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotCi0gICAgQVNTRVJUX1RISVNfR0NfT0JKRUNUX0lOSEVSSVRTKGluZm8oKSk7Ci0gICAg
aWYgKCFtX25wT2JqZWN0KQotICAgICAgICByZXR1cm4gdGhyb3dJbnZhbGlkQWNjZXNzRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUpOwotCi0gICAgLy8gSWYgdGhlIHByb3BlcnR5TmFt
ZSBpcyBzeW1ib2wuCi0gICAgaWYgKCFtZXRob2ROYW1lKQotICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLQotICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCk7Ci0gICAgVmVjdG9yPE5QVmFyaWFudCwgOD4gYXJndW1lbnRzKGFyZ3VtZW50Q291
bnQpOwotCi0gICAgLy8gQ29udmVydCBhbGwgYXJndW1lbnRzIHRvIE5QVmFyaWFudHMuCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpCi0gICAgICAgIG1fb2Jq
ZWN0TWFwLT5jb252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KGxleGljYWxHbG9iYWxPYmplY3QsIGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSksIGFyZ3VtZW50c1tpXSk7Ci0KLSAgICAvLyBD
YWxsaW5nIE5QQ2xhc3M6Omludm9rZSB3aWxsIGNhbGwgaW50byBwbHVnLWluIGNvZGUsIGFuZCB0
aGVyZSdzIG5vIHRlbGxpbmcgd2hhdCB0aGUgcGx1Zy1pbiBjYW4gZG8uCi0gICAgLy8gKGluY2x1
ZGluZyBkZXN0cm95aW5nIHRoZSBwbHVnLWluKS4gQmVjYXVzZSBvZiB0aGlzLCB3ZSBtYWtlIHN1
cmUgdG8ga2VlcCB0aGUgcGx1Zy1pbiBhbGl2ZSB1bnRpbCAKLSAgICAvLyB0aGUgY2FsbCBoYXMg
ZmluaXNoZWQuCi0gICAgTlBSdW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVj
dG9yKG1fb2JqZWN0TWFwKTsKLQotICAgIGJvb2wgcmV0dXJuVmFsdWU7Ci0gICAgTlBWYXJpYW50
IHJlc3VsdDsKLSAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHQpOwotICAgIAotICAgIHsKLSAg
ICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwotICAg
ICAgICByZXR1cm5WYWx1ZSA9IG1fbnBPYmplY3QtPl9jbGFzcy0+aW52b2tlKG1fbnBPYmplY3Qs
IG1ldGhvZE5hbWUsIGFyZ3VtZW50cy5kYXRhKCksIGFyZ3VtZW50Q291bnQsICZyZXN1bHQpOwot
ICAgICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0
ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICB9Ci0KLSAgICAvLyBSZWxlYXNlIGFsbCBhcmd1
bWVudHMuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpCi0g
ICAgICAgIHJlbGVhc2VOUFZhcmlhbnRWYWx1ZSgmYXJndW1lbnRzW2ldKTsKLQotICAgIGlmICgh
cmV0dXJuVmFsdWUpCi0gICAgICAgIHRocm93RXhjZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3Qs
IHNjb3BlLCBjcmVhdGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCAiRXJyb3IgY2FsbGluZyBt
ZXRob2Qgb24gTlBPYmplY3QuIikpOwotCi0gICAgSlNWYWx1ZSBwcm9wZXJ0eVZhbHVlID0gbV9v
YmplY3RNYXAtPmNvbnZlcnROUFZhcmlhbnRUb0pTVmFsdWUoZ2xvYmFsT2JqZWN0KCksIHJlc3Vs
dCk7Ci0gICAgcmVsZWFzZU5QVmFyaWFudFZhbHVlKCZyZXN1bHQpOwotICAgIHJldHVybiBwcm9w
ZXJ0eVZhbHVlOwotfQotCi1KU0M6OkpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbE9iamVjdChKU0M6
OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2Fs
bEZyYW1lKQotewotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgQVNTRVJUX1RISVNf
R0NfT0JKRUNUX0lOSEVSSVRTKGluZm8oKSk7Ci0gICAgaWYgKCFtX25wT2JqZWN0KQotICAgICAg
ICByZXR1cm4gdGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2Nv
cGUpOwotCi0gICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKTsKLSAgICBWZWN0b3I8TlBWYXJpYW50LCA4PiBhcmd1bWVudHMoYXJndW1lbnRDb3VudCk7
Ci0gICAgCi0gICAgLy8gQ29udmVydCBhbGwgYXJndW1lbnRzIHRvIE5QVmFyaWFudHMuCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpCi0gICAgICAgIG1fb2Jq
ZWN0TWFwLT5jb252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KGxleGljYWxHbG9iYWxPYmplY3QsIGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSksIGFyZ3VtZW50c1tpXSk7Ci0KLSAgICAvLyBD
YWxsaW5nIE5QQ2xhc3M6Omludm9rZURlZmF1bHQgd2lsbCBjYWxsIGludG8gcGx1Zy1pbiBjb2Rl
LCBhbmQgdGhlcmUncyBubyB0ZWxsaW5nIHdoYXQgdGhlIHBsdWctaW4gY2FuIGRvLgotICAgIC8v
IChpbmNsdWRpbmcgZGVzdHJveWluZyB0aGUgcGx1Zy1pbikuIEJlY2F1c2Ugb2YgdGhpcywgd2Ug
bWFrZSBzdXJlIHRvIGtlZXAgdGhlIHBsdWctaW4gYWxpdmUgdW50aWwgCi0gICAgLy8gdGhlIGNh
bGwgaGFzIGZpbmlzaGVkLgotICAgIE5QUnVudGltZU9iamVjdE1hcDo6UGx1Z2luUHJvdGVjdG9y
IHByb3RlY3RvcihtX29iamVjdE1hcCk7Ci0gICAgCi0gICAgYm9vbCByZXR1cm5WYWx1ZTsKLSAg
ICBOUFZhcmlhbnQgcmVzdWx0OwotICAgIFZPSURfVE9fTlBWQVJJQU5UKHJlc3VsdCk7Ci0KLSAg
ICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgp
KTsKLSAgICAgICAgcmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xhc3MtPmludm9rZURlZmF1
bHQobV9ucE9iamVjdCwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1lbnRDb3VudCwgJnJlc3VsdCk7
Ci0gICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0
YXRlKGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIH0KLQotICAgIC8vIFJlbGVhc2UgYWxsIGFy
Z3VtZW50czsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkK
LSAgICAgICAgcmVsZWFzZU5QVmFyaWFudFZhbHVlKCZhcmd1bWVudHNbaV0pOwotCi0gICAgaWYg
KCFyZXR1cm5WYWx1ZSkKLSAgICAgICAgdGhyb3dFeGNlcHRpb24obGV4aWNhbEdsb2JhbE9iamVj
dCwgc2NvcGUsIGNyZWF0ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsICJFcnJvciBjYWxsaW5n
IG1ldGhvZCBvbiBOUE9iamVjdC4iKSk7Ci0KLSAgICBKU1ZhbHVlIHByb3BlcnR5VmFsdWUgPSBt
X29iamVjdE1hcC0+Y29udmVydE5QVmFyaWFudFRvSlNWYWx1ZShnbG9iYWxPYmplY3QoKSwgcmVz
dWx0KTsKLSAgICByZWxlYXNlTlBWYXJpYW50VmFsdWUoJnJlc3VsdCk7Ci0gICAgcmV0dXJuIHBy
b3BlcnR5VmFsdWU7Ci19Ci0KLUpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbENvbnN0cnVjdG9yKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
LXsKLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIEFTU0VSVF9USElTX0dDX09CSkVD
VF9JTkhFUklUUyhpbmZvKCkpOwotICAgIGlmICghbV9ucE9iamVjdCkKLSAgICAgICAgcmV0dXJu
IHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlKTsKLQot
ICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7Ci0g
ICAgVmVjdG9yPE5QVmFyaWFudCwgOD4gYXJndW1lbnRzKGFyZ3VtZW50Q291bnQpOwotCi0gICAg
Ly8gQ29udmVydCBhbGwgYXJndW1lbnRzIHRvIE5QVmFyaWFudHMuCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpCi0gICAgICAgIG1fb2JqZWN0TWFwLT5jb252
ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoaSksIGFyZ3VtZW50c1tpXSk7Ci0KLSAgICAvLyBDYWxsaW5nIE5QQ2xh
c3M6OmNvbnN0cnVjdCB3aWxsIGNhbGwgaW50byBwbHVnLWluIGNvZGUsIGFuZCB0aGVyZSdzIG5v
IHRlbGxpbmcgd2hhdCB0aGUgcGx1Zy1pbiBjYW4gZG8uCi0gICAgLy8gKGluY2x1ZGluZyBkZXN0
cm95aW5nIHRoZSBwbHVnLWluKS4gQmVjYXVzZSBvZiB0aGlzLCB3ZSBtYWtlIHN1cmUgdG8ga2Vl
cCB0aGUgcGx1Zy1pbiBhbGl2ZSB1bnRpbCAKLSAgICAvLyB0aGUgY2FsbCBoYXMgZmluaXNoZWQu
Ci0gICAgTlBSdW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVjdG9yKG1fb2Jq
ZWN0TWFwKTsKLSAgICAKLSAgICBib29sIHJldHVyblZhbHVlOwotICAgIE5QVmFyaWFudCByZXN1
bHQ7Ci0gICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsKLSAgICAKLSAgICB7Ci0gICAgICAg
IEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKLSAgICAgICAg
cmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xhc3MtPmNvbnN0cnVjdChtX25wT2JqZWN0LCBh
cmd1bWVudHMuZGF0YSgpLCBhcmd1bWVudENvdW50LCAmcmVzdWx0KTsKLSAgICAgICAgTlBSdW50
aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUobGV4aWNhbEdsb2Jh
bE9iamVjdCk7Ci0gICAgfQotCi0gICAgaWYgKCFyZXR1cm5WYWx1ZSkKLSAgICAgICAgdGhyb3dF
eGNlcHRpb24obGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsICJFcnJvciBjYWxsaW5nIG1ldGhvZCBvbiBOUE9iamVjdC4iKSk7Ci0gICAg
Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IG1fb2JqZWN0TWFwLT5jb252ZXJ0TlBWYXJpYW50VG9KU1Zh
bHVlKGdsb2JhbE9iamVjdCgpLCByZXN1bHQpOwotICAgIHJlbGVhc2VOUFZhcmlhbnRWYWx1ZSgm
cmVzdWx0KTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXN0YXRpYyBKU0NfREVDTEFSRV9IT1NU
X0ZVTkNUSU9OKGNhbGxOUEpTT2JqZWN0KTsKLXN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNU
SU9OKGNvbnN0cnVjdFdpdGhDb25zdHJ1Y3Rvcik7Ci0KLUpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
TihjYWxsTlBKU09iamVjdCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKSkKLXsKLSAgICBKU09iamVjdCogb2JqZWN0ID0gY2FsbEZyYW1lLT5qc0Nh
bGxlZSgpOwotICAgIEFTU0VSVF9VTlVTRUQoZ2xvYmFsT2JqZWN0LCBvYmplY3QtPmluaGVyaXRz
PEpTTlBPYmplY3Q+KGdsb2JhbE9iamVjdC0+dm0oKSkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Nhc3Q8SlNOUE9iamVjdCo+KG9iamVjdCktPmNhbGxPYmplY3QoZ2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUpKTsKLX0KLQotQ2FsbERhdGEgSlNOUE9iamVjdDo6Z2V0Q2FsbERhdGEo
SlNDZWxsKiBjZWxsKQotewotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIEpTTlBPYmplY3Qq
IHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU05QT2JqZWN0Kj4oY2VsbCk7Ci0gICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGlmICh0aGlzT2Jq
ZWN0LT5tX25wT2JqZWN0ICYmIHRoaXNPYmplY3QtPm1fbnBPYmplY3QtPl9jbGFzcy0+aW52b2tl
RGVmYXVsdCkgewotICAgICAgICBjYWxsRGF0YS50eXBlID0gQ2FsbERhdGE6OlR5cGU6Ok5hdGl2
ZTsKLSAgICAgICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbE5QSlNPYmplY3Q7Ci0g
ICAgfQotICAgIHJldHVybiBjYWxsRGF0YTsKLX0KLQotSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KGNvbnN0cnVjdFdpdGhDb25zdHJ1Y3RvciwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lKSkKLXsKLSAgICBKU09iamVjdCogY29uc3RydWN0b3IgPSBj
YWxsRnJhbWUtPmpzQ2FsbGVlKCk7Ci0gICAgQVNTRVJUX1VOVVNFRChnbG9iYWxPYmplY3QsIGNv
bnN0cnVjdG9yLT5pbmhlcml0czxKU05QT2JqZWN0PihnbG9iYWxPYmplY3QtPnZtKCkpKTsKLQot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNDYXN0PEpTTlBPYmplY3QqPihjb25zdHJ1Y3Rv
ciktPmNhbGxDb25zdHJ1Y3RvcihnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSkpOwotfQotCi1DYWxs
RGF0YSBKU05QT2JqZWN0OjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCogY2VsbCkKLXsKLSAgICBD
YWxsRGF0YSBjb25zdHJ1Y3REYXRhOwotCi0gICAgSlNOUE9iamVjdCogdGhpc09iamVjdCA9IEpT
Qzo6anNDYXN0PEpTTlBPYmplY3QqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgaWYgKHRoaXNPYmplY3QtPm1fbnBPYmplY3Qg
JiYgdGhpc09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5jb25zdHJ1Y3QpIHsKLSAgICAgICAg
Y29uc3RydWN0RGF0YS50eXBlID0gQ2FsbERhdGE6OlR5cGU6Ok5hdGl2ZTsKLSAgICAgICAgY29u
c3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RXaXRoQ29uc3RydWN0b3I7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGNvbnN0cnVjdERhdGE7Ci19Ci0KLWJvb2wgSlNOUE9iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCi17Ci0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU05QT2JqZWN0KiB0
aGlzT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNOUE9iamVjdCo+KG9iamVjdCk7Ci0gICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGlmICghdGhpc09i
amVjdC0+bV9ucE9iamVjdCkgewotICAgICAgICB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgCi0gICAgTlBJZGVudGlmaWVyIG5wSWRlbnRpZmllciA9IG5wSWRlbnRpZmllckZyb21JZGVu
dGlmaWVyKHByb3BlcnR5TmFtZSk7Ci0gICAgLy8gSWYgdGhlIHByb3BlcnR5TmFtZSBpcyBzeW1i
b2wuCi0gICAgaWYgKCFucElkZW50aWZpZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IC8vIENhbGxpbmcgTlBDbGFzczo6aW52b2tlIHdpbGwgY2FsbCBpbnRvIHBsdWctaW4gY29kZSwg
YW5kIHRoZXJlJ3Mgbm8gdGVsbGluZyB3aGF0IHRoZSBwbHVnLWluIGNhbiBkby4KLSAgICAvLyAo
aW5jbHVkaW5nIGRlc3Ryb3lpbmcgdGhlIHBsdWctaW4pLiBCZWNhdXNlIG9mIHRoaXMsIHdlIG1h
a2Ugc3VyZSB0byBrZWVwIHRoZSBwbHVnLWluIGFsaXZlIHVudGlsIAotICAgIC8vIHRoZSBjYWxs
IGhhcyBmaW5pc2hlZC4KLSAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBw
cm90ZWN0b3IodGhpc09iamVjdC0+bV9vYmplY3RNYXApOwotCi0gICAgLy8gRmlyc3QsIGNoZWNr
IGlmIHRoZSBOUE9iamVjdCBoYXMgYSBwcm9wZXJ0eSB3aXRoIHRoaXMgbmFtZS4KLSAgICBpZiAo
dGhpc09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5oYXNQcm9wZXJ0eSAmJiB0aGlzT2JqZWN0
LT5tX25wT2JqZWN0LT5fY2xhc3MtPmhhc1Byb3BlcnR5KHRoaXNPYmplY3QtPm1fbnBPYmplY3Qs
IG5wSWRlbnRpZmllcikpIHsKLSAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUpLCBw
cm9wZXJ0eUdldHRlcik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIFNl
Y29uZCwgY2hlY2sgaWYgdGhlIE5QT2JqZWN0IGhhcyBhIG1ldGhvZCB3aXRoIHRoaXMgbmFtZS4K
LSAgICBpZiAodGhpc09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5oYXNNZXRob2QgJiYgdGhp
c09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5oYXNNZXRob2QodGhpc09iamVjdC0+bV9ucE9i
amVjdCwgbnBJZGVudGlmaWVyKSkgewotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0
LCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHksIG1ldGhvZEdldHRlcik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSlNOUE9iamVjdDo6cHV0KEpT
Q2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpCi17Ci0g
ICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU05QT2JqZWN0KiB0aGlzT2JqZWN0ID0g
SlNDOjpqc0Nhc3Q8SlNOUE9iamVjdCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBpZiAoIXRoaXNPYmplY3QtPm1fbnBPYmpl
Y3QpIHsKLSAgICAgICAgdGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgc2NvcGUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgTlBJZGVudGlm
aWVyIG5wSWRlbnRpZmllciA9IG5wSWRlbnRpZmllckZyb21JZGVudGlmaWVyKHByb3BlcnR5TmFt
ZSk7Ci0gICAgLy8gSWYgdGhlIHByb3BlcnR5TmFtZSBpcyBzeW1ib2wuCi0gICAgaWYgKCFucElk
ZW50aWZpZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAoIXRoaXNPYmpl
Y3QtPm1fbnBPYmplY3QtPl9jbGFzcy0+aGFzUHJvcGVydHkgfHwgIXRoaXNPYmplY3QtPm1fbnBP
YmplY3QtPl9jbGFzcy0+aGFzUHJvcGVydHkodGhpc09iamVjdC0+bV9ucE9iamVjdCwgbnBJZGVu
dGlmaWVyKSkgewotICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHRocm93IGFuIGV4Y2VwdGlv
biBoZXJlPwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCF0aGlzT2Jq
ZWN0LT5tX25wT2JqZWN0LT5fY2xhc3MtPnNldFByb3BlcnR5KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBOUFZhcmlhbnQgdmFyaWFudDsKLSAgICB0aGlzT2JqZWN0LT5tX29iamVjdE1h
cC0+Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwg
dmFyaWFudCk7Ci0KLSAgICAvLyBDYWxsaW5nIE5QQ2xhc3M6OnNldFByb3BlcnR5IHdpbGwgY2Fs
bCBpbnRvIHBsdWctaW4gY29kZSwgYW5kIHRoZXJlJ3Mgbm8gdGVsbGluZyB3aGF0IHRoZSBwbHVn
LWluIGNhbiBkby4KLSAgICAvLyAoaW5jbHVkaW5nIGRlc3Ryb3lpbmcgdGhlIHBsdWctaW4pLiBC
ZWNhdXNlIG9mIHRoaXMsIHdlIG1ha2Ugc3VyZSB0byBrZWVwIHRoZSBwbHVnLWluIGFsaXZlIHVu
dGlsIAotICAgIC8vIHRoZSBjYWxsIGhhcyBmaW5pc2hlZC4KLSAgICBOUFJ1bnRpbWVPYmplY3RN
YXA6OlBsdWdpblByb3RlY3RvciBwcm90ZWN0b3IodGhpc09iamVjdC0+bV9vYmplY3RNYXApOwot
Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKLSAgICAgICAgcmVzdWx0ID0gdGhpc09i
amVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5zZXRQcm9wZXJ0eSh0aGlzT2JqZWN0LT5tX25wT2Jq
ZWN0LCBucElkZW50aWZpZXIsICZ2YXJpYW50KTsKLQotICAgICAgICBOUFJ1bnRpbWVPYmplY3RN
YXA6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
LQotICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBzZXRQ
cm9wZXJ0eSByZXR1cm5zIGZhbHNlPwotICAgIH0KLQotICAgIHJlbGVhc2VOUFZhcmlhbnRWYWx1
ZSgmdmFyaWFudCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBKU05QT2JqZWN0Ojpk
ZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNs
b3QpCi17Ci0gICAgcmV0dXJuIGpzQ2FzdDxKU05QT2JqZWN0Kj4oY2VsbCktPmRlbGV0ZVByb3Bl
cnR5KGxleGljYWxHbG9iYWxPYmplY3QsIG5wSWRlbnRpZmllckZyb21JZGVudGlmaWVyKHByb3Bl
cnR5TmFtZSkpOwotfQotCi1ib29sIEpTTlBPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChK
U0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIGpzQ2FzdDxKU05QT2JqZWN0Kj4oY2VsbCkt
PmRlbGV0ZVByb3BlcnR5KGxleGljYWxHbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE5QSWRlbnRp
Zmllcj4oSWRlbnRpZmllclJlcDo6Z2V0KHByb3BlcnR5TmFtZSkpKTsKLX0KLQotYm9vbCBKU05Q
T2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKLXsKLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xv
YmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLQotICAgIEFTU0VSVF9USElTX0dDX09CSkVDVF9JTkhFUklUUyhpbmZvKCkpOwotCi0gICAg
Ly8gSWYgdGhlIHByb3BlcnR5TmFtZSBpcyBzeW1ib2wuCi0gICAgaWYgKCFwcm9wZXJ0eU5hbWUp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbV9ucE9iamVjdCkgewotICAgICAg
ICB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fbnBPYmplY3QtPl9jbGFz
cy0+cmVtb3ZlUHJvcGVydHkpIHsKLSAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSB0aHJvdyBh
biBleGNlcHRpb24gaGVyZT8KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8v
IENhbGxpbmcgTlBDbGFzczo6c2V0UHJvcGVydHkgd2lsbCBjYWxsIGludG8gcGx1Zy1pbiBjb2Rl
LCBhbmQgdGhlcmUncyBubyB0ZWxsaW5nIHdoYXQgdGhlIHBsdWctaW4gY2FuIGRvLgotICAgIC8v
IChpbmNsdWRpbmcgZGVzdHJveWluZyB0aGUgcGx1Zy1pbikuIEJlY2F1c2Ugb2YgdGhpcywgd2Ug
bWFrZSBzdXJlIHRvIGtlZXAgdGhlIHBsdWctaW4gYWxpdmUgdW50aWwgCi0gICAgLy8gdGhlIGNh
bGwgaGFzIGZpbmlzaGVkLgotICAgIE5QUnVudGltZU9iamVjdE1hcDo6UGx1Z2luUHJvdGVjdG9y
IHByb3RlY3RvcihtX29iamVjdE1hcCk7Ci0KLSAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKLQotICAgICAgICAvLyBGSVhNRTogU2hv
dWxkIHdlIHRocm93IGFuIGV4Y2VwdGlvbiBpZiByZW1vdmVQcm9wZXJ0eSByZXR1cm5zIGZhbHNl
PwotICAgICAgICBpZiAoIW1fbnBPYmplY3QtPl9jbGFzcy0+cmVtb3ZlUHJvcGVydHkobV9ucE9i
amVjdCwgcHJvcGVydHlOYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBOUFJ1bnRpbWVPYmplY3RNYXA6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBK
U05QT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lQXJyYXksIERvbnRFbnVtUHJvcGVydGllc01vZGUpCi17Ci0gICAgVk0mIHZtID0gbGV4aWNh
bEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0KLSAgICBKU05QT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTlBPYmplY3Qq
PihvYmplY3QpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKLSAgICBpZiAoIXRoaXNPYmplY3QtPm1fbnBPYmplY3QpIHsKLSAgICAgICAgdGhyb3dJ
bnZhbGlkQWNjZXNzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFOUF9DTEFTU19TVFJVQ1RfVkVSU0lPTl9IQVNfRU5V
TSh0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3MpIHx8ICF0aGlzT2JqZWN0LT5tX25wT2Jq
ZWN0LT5fY2xhc3MtPmVudW1lcmF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlBJZGVudGlm
aWVyKiBpZGVudGlmaWVycyA9IDA7Ci0gICAgdWludDMyX3QgaWRlbnRpZmllckNvdW50ID0gMDsK
LSAgICAKLSAgICAvLyBDYWxsaW5nIE5QQ2xhc3M6OmVudW1lcmF0ZSB3aWxsIGNhbGwgaW50byBw
bHVnLWluIGNvZGUsIGFuZCB0aGVyZSdzIG5vIHRlbGxpbmcgd2hhdCB0aGUgcGx1Zy1pbiBjYW4g
ZG8uCi0gICAgLy8gKGluY2x1ZGluZyBkZXN0cm95aW5nIHRoZSBwbHVnLWluKS4gQmVjYXVzZSBv
ZiB0aGlzLCB3ZSBtYWtlIHN1cmUgdG8ga2VlcCB0aGUgcGx1Zy1pbiBhbGl2ZSB1bnRpbCAKLSAg
ICAvLyB0aGUgY2FsbCBoYXMgZmluaXNoZWQuCi0gICAgTlBSdW50aW1lT2JqZWN0TWFwOjpQbHVn
aW5Qcm90ZWN0b3IgcHJvdGVjdG9yKHRoaXNPYmplY3QtPm1fb2JqZWN0TWFwKTsKLSAgICAKLSAg
ICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgp
KTsKLQotICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBl
bnVtZXJhdGUgcmV0dXJucyBmYWxzZT8KLSAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5tX25wT2Jq
ZWN0LT5fY2xhc3MtPmVudW1lcmF0ZSh0aGlzT2JqZWN0LT5tX25wT2JqZWN0LCAmaWRlbnRpZmll
cnMsICZpZGVudGlmaWVyQ291bnQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIE5Q
UnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGxleGljYWxH
bG9iYWxPYmplY3QpOwotICAgIH0KLQotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBpZGVu
dGlmaWVyQ291bnQ7ICsraSkgewotICAgICAgICBJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyUmVw
ID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KGlkZW50aWZpZXJzW2ldKTsKLSAgICAgICAg
Ci0gICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllcjsKLSAgICAgICAgaWYgKGlkZW50aWZpZXJS
ZXAtPmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIHN0cmluZyA9IGlkZW50
aWZpZXJSZXAtPnN0cmluZygpOwotICAgICAgICAgICAgaW50IGxlbmd0aCA9IHN0cmxlbihzdHJp
bmcpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhzdHJpbmcs
IGxlbmd0aCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGlkZW50aWZpZXIgPSBJZGVu
dGlmaWVyOjpmcm9tKHZtLCBpZGVudGlmaWVyUmVwLT5udW1iZXIoKSk7Ci0KLSAgICAgICAgcHJv
cGVydHlOYW1lQXJyYXkuYWRkKGlkZW50aWZpZXIpOwotICAgIH0KLQotICAgIG5wbk1lbUZyZWUo
aWRlbnRpZmllcnMpOwotfQotCi1KU0NfREVGSU5FX0NVU1RPTV9HRVRURVIocHJvcGVydHlHZXR0
ZXIsIChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSkKLXsKLSAgICBWTSYgdm0gPSBs
ZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgIEpTTlBPYmplY3QqIHRoaXNPYmogPSBqc0Nhc3Q8SlNOUE9iamVj
dCo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmosIEpTTlBPYmplY3Q6OmluZm8oKSk7Ci0gICAgCi0gICAgaWYgKCF0aGlz
T2JqLT5ucE9iamVjdCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93SW52
YWxpZEFjY2Vzc0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlKSk7Ci0KLSAgICBpZiAo
IXRoaXNPYmotPm5wT2JqZWN0KCktPl9jbGFzcy0+Z2V0UHJvcGVydHkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAgICBOUFZhcmlhbnQgcmVzdWx0
OwotICAgIFZPSURfVE9fTlBWQVJJQU5UKHJlc3VsdCk7Ci0KLSAgICAvLyBDYWxsaW5nIE5QQ2xh
c3M6OmdldFByb3BlcnR5IHdpbGwgY2FsbCBpbnRvIHBsdWctaW4gY29kZSwgYW5kIHRoZXJlJ3Mg
bm8gdGVsbGluZyB3aGF0IHRoZSBwbHVnLWluIGNhbiBkby4KLSAgICAvLyAoaW5jbHVkaW5nIGRl
c3Ryb3lpbmcgdGhlIHBsdWctaW4pLiBCZWNhdXNlIG9mIHRoaXMsIHdlIG1ha2Ugc3VyZSB0byBr
ZWVwIHRoZSBwbHVnLWluIGFsaXZlIHVudGlsIAotICAgIC8vIHRoZSBjYWxsIGhhcyBmaW5pc2hl
ZC4KLSAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBwcm90ZWN0b3IodGhp
c09iai0+b2JqZWN0TWFwKCkpOwotICAgIAotICAgIGJvb2wgcmV0dXJuVmFsdWU7Ci0gICAgewot
ICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7Ci0g
ICAgICAgIE5QSWRlbnRpZmllciBucElkZW50aWZpZXIgPSBucElkZW50aWZpZXJGcm9tSWRlbnRp
Zmllcihwcm9wZXJ0eU5hbWUpOwotICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHlOYW1lIGlzIHN5
bWJvbC4KLSAgICAgICAgaWYgKCFucElkZW50aWZpZXIpCi0gICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCi0gICAgICAgIHJldHVyblZhbHVlID0gdGhp
c09iai0+bnBPYmplY3QoKS0+X2NsYXNzLT5nZXRQcm9wZXJ0eSh0aGlzT2JqLT5ucE9iamVjdCgp
LCBucElkZW50aWZpZXIsICZyZXN1bHQpOwotICAgICAgICAKLSAgICAgICAgTlBSdW50aW1lT2Jq
ZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUobGV4aWNhbEdsb2JhbE9iamVj
dCk7Ci0gICAgfQotCi0gICAgaWYgKCFyZXR1cm5WYWx1ZSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQotICAgIEpTVmFsdWUgcHJvcGVydHlWYWx1ZSA9
IHRoaXNPYmotPm9iamVjdE1hcCgpLT5jb252ZXJ0TlBWYXJpYW50VG9KU1ZhbHVlKHRoaXNPYmot
Pmdsb2JhbE9iamVjdCgpLCByZXN1bHQpOwotICAgIHJlbGVhc2VOUFZhcmlhbnRWYWx1ZSgmcmVz
dWx0KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb3BlcnR5VmFsdWUpOwotfQotCi1K
U0NfREVGSU5FX0NVU1RPTV9HRVRURVIobWV0aG9kR2V0dGVyLCAoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkpCi17Ci0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0o
KTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU05Q
T2JqZWN0KiB0aGlzT2JqID0ganNDYXN0PEpTTlBPYmplY3QqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqLCBKU05QT2Jq
ZWN0OjppbmZvKCkpOwotICAgIAotICAgIGlmICghdGhpc09iai0+bnBPYmplY3QoKSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBzY29wZSkpOwotCi0gICAgTlBJZGVudGlmaWVyIG5wSWRlbnRpZmllciA9
IG5wSWRlbnRpZmllckZyb21JZGVudGlmaWVyKHByb3BlcnR5TmFtZSk7Ci0gICAgLy8gSWYgdGhl
IHByb3BlcnR5TmFtZSBpcyBzeW1ib2wuCi0gICAgaWYgKCFucElkZW50aWZpZXIpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgc2NvcGUpKTsKLQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNOUE1l
dGhvZDo6Y3JlYXRlKHRoaXNPYmotPmdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUucHVibGlj
TmFtZSgpLCBucElkZW50aWZpZXIpKTsKLX0KLQotSXNvU3Vic3BhY2UqIEpTTlBPYmplY3Q6OnN1
YnNwYWNlRm9ySW1wbChWTSYgdm0pCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPElzb1N1
YnNwYWNlUGVyVk0+IHBlclZNKFtdIChWTSYgdm0pIHsgcmV0dXJuIElTT19TVUJTUEFDRV9QQVJB
TUVURVJTKHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgSlNOUE9iamVj
dCk7IH0pOwotICAgIHJldHVybiAmcGVyVk0uZ2V0KCkuZm9yVk0odm0pOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNO
UE9iamVjdC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNO
UE9iamVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2M2OGQ4OWQ2NmNjNmMw
NWUwZjlmM2U1MWQzOTRiM2E5YzFmMzE4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L0pTTlBPYmplY3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIEpTTlBPYmplY3RfaAotI2RlZmluZSBKU05QT2JqZWN0X2gKLQotI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdC5oPgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09iamVjdFByb3RvdHlwZS5oPgotCi10eXBlZGVmIHZv
aWQqIE5QSWRlbnRpZmllcjsKLXN0cnVjdCBOUE9iamVjdDsKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIE5QUnVudGltZU9iamVjdE1hcDsKLSAgICAKLS8vIEpTTlBPYmplY3QgaXMgYSBK
U09iamVjdCB0aGF0IHdyYXBzIGFuIE5QT2JqZWN0LgotCi1jbGFzcyBKU05QT2JqZWN0IGZpbmFs
IDogcHVibGljIEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QgewotcHVibGljOgotICAgIHVzaW5n
IEJhc2UgPSBKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6T3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5h
bWVzIHwgSlNDOjpPdmVycmlkZXNHZXRDYWxsRGF0YSB8IEpTQzo6T3ZlcnJpZGVzUHV0IHwgSlND
OjpHZXRPd25Qcm9wZXJ0eVNsb3RNYXlCZVdyb25nQWJvdXREb250RW51bTsKLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwotICAgIH0KLQotICAgIHN0YXRpYyBKU05QT2Jq
ZWN0KiBjcmVhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBOUFJ1bnRpbWVP
YmplY3RNYXAqIG9iamVjdE1hcCwgTlBPYmplY3QqIG5wT2JqZWN0KQotICAgIHsKLSAgICAgICAg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3Qt
PnZtKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSk7Ci0g
ICAgICAgIEpTTlBPYmplY3QqIG9iamVjdCA9IG5ldyAoSlNDOjphbGxvY2F0ZUNlbGw8SlNOUE9i
amVjdD4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU05QT2JqZWN0KGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlLCBvYmplY3RNYXAsIG5wT2JqZWN0KTsKLSAgICAgICAgb2JqZWN0LT5maW5pc2hD
cmVhdGlvbihnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLQot
ICAgIH5KU05QT2JqZWN0KCk7Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLQot
ICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0gICAgLy8gVXNlZCB0byBpbnZhbGlkYXRlIGFuIE5Q
T2JqZWN0IGFzeW5jaHJvbm91c2x5LgotICAgIE5QT2JqZWN0KiBsZWFrTlBPYmplY3QoKTsKLQot
ICAgIEpTQzo6SlNWYWx1ZSBjYWxsTWV0aG9kKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNh
bGxGcmFtZSosIE5QSWRlbnRpZmllciBtZXRob2ROYW1lKTsKLSAgICBKU0M6OkpTVmFsdWUgY2Fs
bE9iamVjdChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKLSAgICBKU0M6
OkpTVmFsdWUgY2FsbENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxG
cmFtZSopOwotCi0gICAgREVDTEFSRV9JTkZPOwotCi0gICAgTlBPYmplY3QqIG5wT2JqZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9ucE9iamVjdDsgfQotICAgIE5QUnVudGltZU9iamVjdE1hcCogb2Jq
ZWN0TWFwKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RNYXA7IH0KLQotcHJpdmF0ZToKLSAgICBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mKTsKLSAgICAK
LSAgICBKU05QT2JqZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSosIE5Q
UnVudGltZU9iamVjdE1hcCosIE5QT2JqZWN0Kik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgCi0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgSlNDOjpDYWxsRGF0YSBnZXRDYWxsRGF0YShKU0M6OkpTQ2VsbCopOwotICAg
IHN0YXRpYyBKU0M6OkNhbGxEYXRhIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqKTsKLQot
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwot
ICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwot
Ci0gICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6RGVsZXRlUHJvcGVydHlTbG90Jik7
Ci0gICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7Ci0KLSAgICBib29sIGRl
bGV0ZVByb3BlcnR5KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBOUElkZW50aWZpZXIgcHJvcGVydHlO
YW1lKTsKLQotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVj
dCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpE
b250RW51bVByb3BlcnRpZXNNb2RlKTsKLQotICAgIE5QUnVudGltZU9iamVjdE1hcCogbV9vYmpl
Y3RNYXA7Ci0gICAgTlBPYmplY3QqIG1fbnBPYmplY3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jZW5kaWYg
Ly8gSlNOUE9iamVjdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxMjliNzU1MThiYmQxYTQ3MDBjOTMyNGJmYjRlMjFiZmYxYTllNDRjLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NDEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJOUEpTT2JqZWN0LmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQot
I2luY2x1ZGUgIkpTTlBPYmplY3QuaCIKLSNpbmNsdWRlICJOUFJ1bnRpbWVPYmplY3RNYXAuaCIK
LSNpbmNsdWRlICJOUFJ1bnRpbWVVdGlsaXRpZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9DYXRjaFNjb3BlLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ2VsbElubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU0xvY2suaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdC5o
PgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N0cm9uZ0lubGluZXMuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JZGVudGlmaWVyUmVwLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcg
bmFtZXNwYWNlIEpTQzsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1OUEpTT2JqZWN0KiBO
UEpTT2JqZWN0OjpjcmVhdGUoVk0mIHZtLCBOUFJ1bnRpbWVPYmplY3RNYXAqIG9iamVjdE1hcCwg
SlNPYmplY3QqIGpzT2JqZWN0KQotewotICAgIC8vIFdlIHNob3VsZCBuZXZlciBoYXZlIGEgSlNO
UE9iamVjdCBpbnNpZGUgYW4gTlBKU09iamVjdC4KLSAgICBBU1NFUlQoIWpzT2JqZWN0LT5pbmhl
cml0czxKU05QT2JqZWN0Pih2bSkpOwotCi0gICAgTlBKU09iamVjdCogbnBKU09iamVjdCA9IHRv
TlBKU09iamVjdChjcmVhdGVOUE9iamVjdCgwLCBucENsYXNzKCkpKTsKLSAgICBucEpTT2JqZWN0
LT5pbml0aWFsaXplKHZtLCBvYmplY3RNYXAsIGpzT2JqZWN0KTsKLQotICAgIHJldHVybiBucEpT
T2JqZWN0OwotfQotCi1OUEpTT2JqZWN0OjpOUEpTT2JqZWN0KCkKLSAgICA6IG1fb2JqZWN0TWFw
KDApCi17Ci19Ci0KLU5QSlNPYmplY3Q6On5OUEpTT2JqZWN0KCkKLXsKLSAgICBtX29iamVjdE1h
cC0+bnBKU09iamVjdERlc3Ryb3llZCh0aGlzKTsKLX0KLQotYm9vbCBOUEpTT2JqZWN0Ojppc05Q
SlNPYmplY3QoTlBPYmplY3QqIG5wT2JqZWN0KQotewotICAgIHJldHVybiBucE9iamVjdC0+X2Ns
YXNzID09IG5wQ2xhc3MoKTsKLX0KLQotdm9pZCBOUEpTT2JqZWN0Ojppbml0aWFsaXplKFZNJiB2
bSwgTlBSdW50aW1lT2JqZWN0TWFwKiBvYmplY3RNYXAsIEpTT2JqZWN0KiBqc09iamVjdCkKLXsK
LSAgICBBU1NFUlQoIW1fb2JqZWN0TWFwKTsKLSAgICBBU1NFUlQoIW1fanNPYmplY3QpOwotCi0g
ICAgbV9vYmplY3RNYXAgPSBvYmplY3RNYXA7Ci0gICAgbV9qc09iamVjdC5zZXQodm0sIGpzT2Jq
ZWN0KTsKLX0KLQotc3RhdGljIElkZW50aWZpZXIgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVw
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyUmVwKiBpZGVu
dGlmaWVyUmVwKQotewotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0g
ICAgQVNTRVJUKGlkZW50aWZpZXJSZXAtPmlzU3RyaW5nKCkpOwotCi0gICAgY29uc3QgY2hhciog
c3RyaW5nID0gaWRlbnRpZmllclJlcC0+c3RyaW5nKCk7Ci0gICAgaW50IGxlbmd0aCA9IHN0cmxl
bihzdHJpbmcpOwotCi0gICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFN0cmlu
Zzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soc3RyaW5nLCBsZW5ndGgpKTsKLX0KLQotYm9v
bCBOUEpTT2JqZWN0OjpoYXNNZXRob2QoTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUpCi17Ci0gICAg
SWRlbnRpZmllclJlcCogaWRlbnRpZmllclJlcCA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAq
PihtZXRob2ROYW1lKTsKLQotICAgIGlmICghaWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QgPSBtX29iamVjdE1hcC0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgaWYgKCFsZXhpY2FsR2xv
YmFsT2JqZWN0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWTSYgdm0gPSBsZXhpY2Fs
R2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0g
bV9qc09iamVjdC0+Z2V0KGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXJGcm9tSWRlbnRp
ZmllclJlcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyUmVwKSk7ICAgIAotICAgIHNj
b3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0KLSAgICByZXR1cm4gdmFsdWUuaXNDYWxsYWJsZSh2bSk7
Ci19Ci0KLWJvb2wgTlBKU09iamVjdDo6aW52b2tlKE5QSWRlbnRpZmllciBtZXRob2ROYW1lLCBj
b25zdCBOUFZhcmlhbnQqIGFyZ3VtZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgSWRlbnRpZmllclJlcCogaWRlbnRpZmllclJlcCA9IHN0YXRp
Y19jYXN0PElkZW50aWZpZXJSZXAqPihtZXRob2ROYW1lKTsKLSAgICAKLSAgICBpZiAoIWlkZW50
aWZpZXJSZXAtPmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IG1fb2JqZWN0TWFwLT5nbG9iYWxP
YmplY3QoKTsKLSAgICBpZiAoIWxleGljYWxHbG9iYWxPYmplY3QpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
LQotICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBtX2pzT2JqZWN0LT5nZXQobGV4aWNhbEdsb2JhbE9i
amVjdCwgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKGxleGljYWxHbG9iYWxPYmplY3QsIGlk
ZW50aWZpZXJSZXApKTsKLSAgICByZXR1cm4gaW52b2tlKGxleGljYWxHbG9iYWxPYmplY3QsIGZ1
bmN0aW9uLCBhcmd1bWVudHMsIGFyZ3VtZW50Q291bnQsIHJlc3VsdCk7Ci19Ci0KLWJvb2wgTlBK
U09iamVjdDo6aW52b2tlRGVmYXVsdChjb25zdCBOUFZhcmlhbnQqIGFyZ3VtZW50cywgdWludDMy
X3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBtX29iamVjdE1hcC0+Z2xvYmFsT2JqZWN0KCk7Ci0g
ICAgaWYgKCFsZXhpY2FsR2xvYmFsT2JqZWN0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBKU0xvY2tIb2xkZXIgbG9jayhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLQotICAgIEpTVmFsdWUg
ZnVuY3Rpb24gPSBtX2pzT2JqZWN0LmdldCgpOwotICAgIHJldHVybiBpbnZva2UobGV4aWNhbEds
b2JhbE9iamVjdCwgZnVuY3Rpb24sIGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwgcmVzdWx0KTsK
LX0KLQotYm9vbCBOUEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShOUElkZW50aWZpZXIgaWRlbnRpZmll
cikKLXsKLSAgICBJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyUmVwID0gc3RhdGljX2Nhc3Q8SWRl
bnRpZmllclJlcCo+KGlkZW50aWZpZXIpOwotICAgIAotICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0ID0gbV9vYmplY3RNYXAtPmdsb2JhbE9iamVjdCgpOwotICAgIGlmICgh
bGV4aWNhbEdsb2JhbE9iamVjdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIFZN
JiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2so
dm0pOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQotICAgIGJv
b2wgcmVzdWx0OwotICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKQotICAgICAgICBy
ZXN1bHQgPSBtX2pzT2JqZWN0LT5oYXNQcm9wZXJ0eShsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVu
dGlmaWVyRnJvbUlkZW50aWZpZXJSZXAobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllclJl
cCkpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gbV9qc09iamVjdC0+aGFzUHJvcGVydHko
bGV4aWNhbEdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGlkZW50aWZpZXJSZXAt
Pm51bWJlcigpKSk7Ci0KLSAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLWJvb2wgTlBKU09iamVjdDo6Z2V0UHJvcGVydHkoTlBJZGVudGlmaWVyIHBy
b3BlcnR5TmFtZSwgTlBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgSWRlbnRpZmllclJlcCogaWRl
bnRpZmllclJlcCA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihwcm9wZXJ0eU5hbWUpOwot
ICAgIAotICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gbV9vYmplY3RN
YXAtPmdsb2JhbE9iamVjdCgpOwotICAgIGlmICghbGV4aWNhbEdsb2JhbE9iamVjdCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0o
KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOwotCi0gICAgSlNWYWx1ZSBqc1Jlc3VsdDsKLSAgICBpZiAoaWRlbnRp
ZmllclJlcC0+aXNTdHJpbmcoKSkKLSAgICAgICAganNSZXN1bHQgPSBtX2pzT2JqZWN0LT5nZXQo
bGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKGxleGljYWxH
bG9iYWxPYmplY3QsIGlkZW50aWZpZXJSZXApKTsKLSAgICBlbHNlCi0gICAgICAgIGpzUmVzdWx0
ID0gbV9qc09iamVjdC0+Z2V0KGxleGljYWxHbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQz
Ml90PihpZGVudGlmaWVyUmVwLT5udW1iZXIoKSkpOwotICAgIAotICAgIG1fb2JqZWN0TWFwLT5j
b252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KGxleGljYWxHbG9iYWxPYmplY3QsIGpzUmVzdWx0LCAq
cmVzdWx0KTsKLSAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIE5QSlNPYmplY3Q6OnNldFByb3BlcnR5KE5QSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUsIGNvbnN0IE5QVmFyaWFudCogdmFsdWUpCi17Ci0gICAgSWRlbnRpZmllclJlcCogaWRlbnRp
ZmllclJlcCA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihwcm9wZXJ0eU5hbWUpOwotICAg
IAotICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gbV9vYmplY3RNYXAt
Pmdsb2JhbE9iamVjdCgpOwotICAgIGlmICghbGV4aWNhbEdsb2JhbE9iamVjdCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZt
KCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKHZtKTsKLQotICAgIEpTVmFsdWUganNWYWx1ZSA9IG1fb2JqZWN0TWFwLT5j
b252ZXJ0TlBWYXJpYW50VG9KU1ZhbHVlKG1fb2JqZWN0TWFwLT5nbG9iYWxPYmplY3QoKSwgKnZh
bHVlKTsKLSAgICBpZiAoaWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSkgewotICAgICAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdChtX2pzT2JqZWN0LmdldCgpKTsKLSAgICAgICAgbV9qc09iamVjdC0+
bWV0aG9kVGFibGUodm0pLT5wdXQobV9qc09iamVjdC5nZXQoKSwgbGV4aWNhbEdsb2JhbE9iamVj
dCwgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50
aWZpZXJSZXApLCBqc1ZhbHVlLCBzbG90KTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9qc09iamVj
dC0+bWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KG1fanNPYmplY3QuZ2V0KCksIGxleGljYWxH
bG9iYWxPYmplY3QsIGlkZW50aWZpZXJSZXAtPm51bWJlcigpLCBqc1ZhbHVlLCBmYWxzZSk7Ci0g
ICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBOUEpTT2JqZWN0OjpyZW1vdmVQcm9wZXJ0eShOUElkZW50aWZpZXIgcHJvcGVydHlOYW1l
KQotewotICAgIElkZW50aWZpZXJSZXAqIGlkZW50aWZpZXJSZXAgPSBzdGF0aWNfY2FzdDxJZGVu
dGlmaWVyUmVwKj4ocHJvcGVydHlOYW1lKTsKLSAgICAKLSAgICBKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCA9IG1fb2JqZWN0TWFwLT5nbG9iYWxPYmplY3QoKTsKLSAgICBpZiAo
IWxleGljYWxHbG9iYWxPYmplY3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZNJiB2
bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2sodm0p
OwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQotICAgIGlmIChp
ZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKSB7Ci0gICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmll
ciA9IGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVu
dGlmaWVyUmVwKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghbV9qc09iamVjdC0+aGFzUHJvcGVy
dHkobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllcikpIHsKLSAgICAgICAgICAgIHNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LQotICAgICAgICBKU0NlbGw6OmRlbGV0ZVByb3BlcnR5KG1fanNPYmplY3QuZ2V0KCksIGxleGlj
YWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICgh
bV9qc09iamVjdC0+aGFzUHJvcGVydHkobGV4aWNhbEdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGlkZW50aWZpZXJSZXAtPm51bWJlcigpKSkpIHsKLSAgICAgICAgICAgIHNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LQotICAgICAgICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJ
bmRleChtX2pzT2JqZWN0LmdldCgpLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyUmVw
LT5udW1iZXIoKSk7Ci0gICAgfQotCi0gICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBOUEpTT2JqZWN0OjplbnVtZXJhdGUoTlBJZGVudGlmaWVy
KiogaWRlbnRpZmllcnMsIHVpbnQzMl90KiBpZGVudGlmaWVyQ291bnQpCi17Ci0gICAgSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBtX29iamVjdE1hcC0+Z2xvYmFsT2JqZWN0
KCk7Ci0gICAgaWYgKCFsZXhpY2FsR2xvYmFsT2JqZWN0KQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEpTTG9ja0hv
bGRlciBsb2NrKHZtKTsKLQotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXModm0s
IFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsK
LSAgICBtX2pzT2JqZWN0LT5nZXRQcm9wZXJ0eU5hbWVzKGxleGljYWxHbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOwotCi0gICAgTlBJ
ZGVudGlmaWVyKiBuYW1lSWRlbnRpZmllcnMgPSBucG5NZW1OZXdBcnJheTxOUElkZW50aWZpZXI+
KHByb3BlcnR5TmFtZXMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJv
cGVydHlOYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgbmFtZUlkZW50aWZpZXJzW2ldID0gc3Rh
dGljX2Nhc3Q8TlBJZGVudGlmaWVyPihJZGVudGlmaWVyUmVwOjpnZXQocHJvcGVydHlOYW1lc1tp
XS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7Ci0KLSAgICAqaWRlbnRpZmllcnMgPSBuYW1lSWRl
bnRpZmllcnM7Ci0gICAgKmlkZW50aWZpZXJDb3VudCA9IHByb3BlcnR5TmFtZXMuc2l6ZSgpOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTlBKU09iamVjdDo6Y29uc3RydWN0KGNvbnN0
IE5QVmFyaWFudCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQq
IHJlc3VsdCkKLXsKLSAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IG1f
b2JqZWN0TWFwLT5nbG9iYWxPYmplY3QoKTsKLSAgICBpZiAoIWxleGljYWxHbG9iYWxPYmplY3Qp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmpl
Y3QtPnZtKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQotICAgIGF1dG8gY29uc3RydWN0RGF0YSA9IGdldENv
bnN0cnVjdERhdGEodm0sIG1fanNPYmplY3QuZ2V0KCkpOwotICAgIGlmIChjb25zdHJ1Y3REYXRh
LnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIC8vIENvbnZlcnQgdGhlIHBhc3NlZCBpbiBhcmd1bWVudHMuCi0gICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgYXJndW1lbnRMaXN0OwotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBhcmd1
bWVudENvdW50OyArK2kpCi0gICAgICAgIGFyZ3VtZW50TGlzdC5hcHBlbmQobV9vYmplY3RNYXAt
PmNvbnZlcnROUFZhcmlhbnRUb0pTVmFsdWUobV9vYmplY3RNYXAtPmdsb2JhbE9iamVjdCgpLCBh
cmd1bWVudHNbaV0pKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghYXJndW1lbnRMaXN0Lmhhc092ZXJm
bG93ZWQoKSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNDOjpjb25zdHJ1Y3QobGV4aWNhbEds
b2JhbE9iamVjdCwgbV9qc09iamVjdC5nZXQoKSwgY29uc3RydWN0RGF0YSwgYXJndW1lbnRMaXN0
KTsKLSAgICAKLSAgICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIG5ldyBvYmplY3QuCi0gICAg
bV9vYmplY3RNYXAtPmNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQobGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFsdWUsICpyZXN1bHQpOwotICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBOUEpTT2JqZWN0OjppbnZva2UoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWUgZnVuY3Rpb24sIGNvbnN0IE5QVmFyaWFudCog
YXJndW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQotICAgIGF1dG8gY2FsbERhdGEgPSBnZXRDYWxs
RGF0YSh2bSwgZnVuY3Rpb24pOwotICAgIGlmIChjYWxsRGF0YS50eXBlID09IENhbGxEYXRhOjpU
eXBlOjpOb25lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBDb252ZXJ0IHRoZSBw
YXNzZWQgaW4gYXJndW1lbnRzLgotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50TGlz
dDsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKQotICAg
ICAgICBhcmd1bWVudExpc3QuYXBwZW5kKG1fb2JqZWN0TWFwLT5jb252ZXJ0TlBWYXJpYW50VG9K
U1ZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50c1tpXSkpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKCFhcmd1bWVudExpc3QuaGFzT3ZlcmZsb3dlZCgpKTsKLQotICAgIEpTVmFsdWUgdmFs
dWUgPSBKU0M6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgZnVuY3Rpb24sIGNhbGxEYXRhLCBt
X2pzT2JqZWN0LmdldCgpLCBhcmd1bWVudExpc3QpOwotCi0gICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkgewotICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuCi0gICAgbV9vYmplY3RNYXAtPmNvbnZlcnRKU1Zh
bHVlVG9OUFZhcmlhbnQobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsICpyZXN1bHQpOwotCi0g
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewotICAgICAgICBzY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJl
dHVybiB0cnVlOwotfQotCi1OUENsYXNzKiBOUEpTT2JqZWN0OjpucENsYXNzKCkKLXsKLSAgICBz
dGF0aWMgTlBDbGFzcyBucENsYXNzID0gewotICAgICAgICBOUF9DTEFTU19TVFJVQ1RfVkVSU0lP
TiwKLSAgICAgICAgTlBfQWxsb2NhdGUsCi0gICAgICAgIE5QX0RlYWxsb2NhdGUsCi0gICAgICAg
IDAsCi0gICAgICAgIE5QX0hhc01ldGhvZCwKLSAgICAgICAgTlBfSW52b2tlLAotICAgICAgICBO
UF9JbnZva2VEZWZhdWx0LAotICAgICAgICBOUF9IYXNQcm9wZXJ0eSwKLSAgICAgICAgTlBfR2V0
UHJvcGVydHksCi0gICAgICAgIE5QX1NldFByb3BlcnR5LAotICAgICAgICBOUF9SZW1vdmVQcm9w
ZXJ0eSwKLSAgICAgICAgTlBfRW51bWVyYXRlLAotICAgICAgICBOUF9Db25zdHJ1Y3QKLSAgICB9
OwotCi0gICAgcmV0dXJuICZucENsYXNzOwotfQotICAgIAotTlBPYmplY3QqIE5QSlNPYmplY3Q6
Ok5QX0FsbG9jYXRlKE5QUCBucHAsIE5QQ2xhc3MqKQotewotICAgIEFTU0VSVF9VTlVTRUQobnBw
LCAhbnBwKTsKLQotICAgIHJldHVybiBuZXcgTlBKU09iamVjdDsKLX0KLQotdm9pZCBOUEpTT2Jq
ZWN0OjpOUF9EZWFsbG9jYXRlKE5QT2JqZWN0KiBucE9iamVjdCkKLXsKLSAgICBOUEpTT2JqZWN0
KiBucEpTT2JqZWN0ID0gdG9OUEpTT2JqZWN0KG5wT2JqZWN0KTsKLSAgICBkZWxldGUgbnBKU09i
amVjdDsKLX0KLQotYm9vbCBOUEpTT2JqZWN0OjpOUF9IYXNNZXRob2QoTlBPYmplY3QqIG5wT2Jq
ZWN0LCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSkKLXsKLSAgICByZXR1cm4gdG9OUEpTT2JqZWN0
KG5wT2JqZWN0KS0+aGFzTWV0aG9kKG1ldGhvZE5hbWUpOwotfQotICAgIAotYm9vbCBOUEpTT2Jq
ZWN0OjpOUF9JbnZva2UoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbWV0aG9kTmFt
ZSwgY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5Q
VmFyaWFudCogcmVzdWx0KQotewotICAgIHJldHVybiB0b05QSlNPYmplY3QobnBPYmplY3QpLT5p
bnZva2UobWV0aG9kTmFtZSwgYXJndW1lbnRzLCBhcmd1bWVudENvdW50LCByZXN1bHQpOwotfQot
ICAgIAotYm9vbCBOUEpTT2JqZWN0OjpOUF9JbnZva2VEZWZhdWx0KE5QT2JqZWN0KiBucE9iamVj
dCwgY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5Q
VmFyaWFudCogcmVzdWx0KQotewotICAgIHJldHVybiB0b05QSlNPYmplY3QobnBPYmplY3QpLT5p
bnZva2VEZWZhdWx0KGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwgcmVzdWx0KTsKLX0KLSAgICAK
LWJvb2wgTlBKU09iamVjdDo6TlBfSGFzUHJvcGVydHkoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElk
ZW50aWZpZXIgcHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiB0b05QSlNPYmplY3QobnBPYmpl
Y3QpLT5oYXNQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwotfQotCi1ib29sIE5QSlNPYmplY3Q6Ok5Q
X0dldFByb3BlcnR5KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFt
ZSwgTlBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIHRvTlBKU09iamVjdChucE9iamVj
dCktPmdldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgcmVzdWx0KTsKLX0KLQotYm9vbCBOUEpTT2Jq
ZWN0OjpOUF9TZXRQcm9wZXJ0eShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IE5QVmFyaWFudCogdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvTlBKU09i
amVjdChucE9iamVjdCktPnNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpOwotfQotCi1i
b29sIE5QSlNPYmplY3Q6Ok5QX1JlbW92ZVByb3BlcnR5KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJ
ZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gdG9OUEpTT2JqZWN0KG5wT2Jq
ZWN0KS0+cmVtb3ZlUHJvcGVydHkocHJvcGVydHlOYW1lKTsKLX0KLQotYm9vbCBOUEpTT2JqZWN0
OjpOUF9FbnVtZXJhdGUoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIqKiBpZGVudGlm
aWVycywgdWludDMyX3QqIGlkZW50aWZpZXJDb3VudCkKLXsKLSAgICByZXR1cm4gdG9OUEpTT2Jq
ZWN0KG5wT2JqZWN0KS0+ZW51bWVyYXRlKGlkZW50aWZpZXJzLCBpZGVudGlmaWVyQ291bnQpOwot
fQotCi1ib29sIE5QSlNPYmplY3Q6Ok5QX0NvbnN0cnVjdChOUE9iamVjdCogbnBPYmplY3QsIGNv
bnN0IE5QVmFyaWFudCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gdG9OUEpTT2JqZWN0KG5wT2JqZWN0KS0+Y29uc3Ry
dWN0KGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwgcmVzdWx0KTsKLX0KLSAgICAKLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpT
T2JqZWN0LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpT
T2JqZWN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NTM1ZDVkNTU0MDI1ZThi
NjI3ZmM3NTljYzAxNzdlMGVhYmIzZGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TlBKU09iamVjdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIE5QSlNPYmplY3RfaAotI2RlZmluZSBOUEpTT2JqZWN0X2gKLQotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Ryb25n
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9ucHJ1bnRpbWVfaW50ZXJuYWwuaD4KLSNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIFZNOwotY2xhc3Mg
SlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBKU09iamVjdDsKLQotfQotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotY2xhc3MgTlBSdW50aW1lT2JqZWN0TWFwOwotICAgIAotLy8gTlBKU09iamVjdCBpcyBh
biBOUE9iamVjdCB0aGF0IHdyYXBzIGEgSlNPYmplY3QuCi1jbGFzcyBOUEpTT2JqZWN0IDogcHVi
bGljIE5QT2JqZWN0IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShOUEpTT2JqZWN0KTsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgTlBKU09iamVjdCogY3JlYXRlKEpTQzo6Vk0mLCBOUFJ1bnRpbWVP
YmplY3RNYXAqLCBKU0M6OkpTT2JqZWN0Kik7Ci0KLSAgICBKU0M6OkpTT2JqZWN0KiBqc09iamVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fanNPYmplY3QuZ2V0KCk7IH0KLQotICAgIHN0YXRpYyBib29s
IGlzTlBKU09iamVjdChOUE9iamVjdCopOwotCi0gICAgc3RhdGljIE5QSlNPYmplY3QqIHRvTlBK
U09iamVjdChOUE9iamVjdCogbnBPYmplY3QpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlzTlBKU09iamVjdChucE9iamVjdCkpOwotICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlBKU09iamVjdCo+KG5wT2JqZWN0KTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgTlBKU09iamVjdCgpOwotICAgIH5OUEpTT2JqZWN0KCk7Ci0KLSAgICB2
b2lkIGluaXRpYWxpemUoSlNDOjpWTSYsIE5QUnVudGltZU9iamVjdE1hcCosIEpTQzo6SlNPYmpl
Y3QqKTsKLQotICAgIGJvb2wgaGFzTWV0aG9kKE5QSWRlbnRpZmllciBtZXRob2ROYW1lKTsKLSAg
ICBib29sIGludm9rZShOUElkZW50aWZpZXIgbWV0aG9kTmFtZSwgY29uc3QgTlBWYXJpYW50KiBh
cmd1bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KTsKLSAg
ICBib29sIGludm9rZURlZmF1bHQoY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90
IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KTsKLSAgICBib29sIGhhc1Byb3BlcnR5
KE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpOwotICAgIGJvb2wgZ2V0UHJvcGVydHkoTlBJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZSwgTlBWYXJpYW50KiByZXN1bHQpOwotICAgIGJvb2wgc2V0UHJv
cGVydHkoTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgTlBWYXJpYW50KiB2YWx1ZSk7
Ci0gICAgYm9vbCByZW1vdmVQcm9wZXJ0eShOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lKTsKLSAg
ICBib29sIGVudW1lcmF0ZShOUElkZW50aWZpZXIqKiBpZGVudGlmaWVycywgdWludDMyX3QqIGlk
ZW50aWZpZXJDb3VudCk7Ci0gICAgYm9vbCBjb25zdHJ1Y3QoY29uc3QgTlBWYXJpYW50KiBhcmd1
bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KTsKLQotICAg
IGJvb2wgaW52b2tlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUgZnVuY3Rpb24s
IGNvbnN0IE5QVmFyaWFudCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZh
cmlhbnQqIHJlc3VsdCk7Ci0KLSAgICBzdGF0aWMgTlBDbGFzcyogbnBDbGFzcygpOwotICAgIHN0
YXRpYyBOUE9iamVjdCogTlBfQWxsb2NhdGUoTlBQLCBOUENsYXNzKik7Ci0gICAgc3RhdGljIHZv
aWQgTlBfRGVhbGxvY2F0ZShOUE9iamVjdCopOwotICAgIHN0YXRpYyBib29sIE5QX0hhc01ldGhv
ZChOUE9iamVjdCosIE5QSWRlbnRpZmllciBtZXRob2ROYW1lKTsKLSAgICBzdGF0aWMgYm9vbCBO
UF9JbnZva2UoTlBPYmplY3QqLCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSwgY29uc3QgTlBWYXJp
YW50KiBhcmd1bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0
KTsKLSAgICBzdGF0aWMgYm9vbCBOUF9JbnZva2VEZWZhdWx0KE5QT2JqZWN0KiwgY29uc3QgTlBW
YXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVz
dWx0KTsKLSAgICBzdGF0aWMgYm9vbCBOUF9IYXNQcm9wZXJ0eShOUE9iamVjdCosIE5QSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBib29sIE5QX0dldFByb3BlcnR5KE5QT2Jq
ZWN0KiwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgTlBWYXJpYW50KiByZXN1bHQpOwotICAg
IHN0YXRpYyBib29sIE5QX1NldFByb3BlcnR5KE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyIHByb3Bl
cnR5TmFtZSwgY29uc3QgTlBWYXJpYW50KiB2YWx1ZSk7Ci0gICAgc3RhdGljIGJvb2wgTlBfUmVt
b3ZlUHJvcGVydHkoTlBPYmplY3QqLCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lKTsKLSAgICBz
dGF0aWMgYm9vbCBOUF9FbnVtZXJhdGUoTlBPYmplY3QqLCBOUElkZW50aWZpZXIqKiBpZGVudGlm
aWVycywgdWludDMyX3QqIGlkZW50aWZpZXJDb3VudCk7Ci0gICAgc3RhdGljIGJvb2wgTlBfQ29u
c3RydWN0KE5QT2JqZWN0KiwgY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90IGFy
Z3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KTsKLSAgICAKLSAgICBOUFJ1bnRpbWVPYmpl
Y3RNYXAqIG1fb2JqZWN0TWFwOwotICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IG1fanNP
YmplY3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jZW5kaWYgLy8gTlBKU09iamVjdF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmpl
Y3RNYXAuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBS
dW50aW1lT2JqZWN0TWFwLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdjNzMx
MzMxMzgwN2RkZjZlOTQzNjI2OTA2MmQwYTMxNWRjMjIxNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjk2
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJOUFJ1bnRpbWVPYmplY3RNYXAuaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQotCi0jaW5jbHVkZSAiSlNOUE9iamVjdC5oIgotI2luY2x1ZGUgIk5QSlNPYmplY3QuaCIKLSNp
bmNsdWRlICJOUFJ1bnRpbWVVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0j
aW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NvbXBsZXRp
b24uaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9FcnJvci5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTTG9jay5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1NvdXJjZUNvZGUuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdHJvbmcuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9TdHJvbmdJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9ET01XcmFwcGVyV29ybGQuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRDb250
cm9sbGVyLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwot
Ci0KLU5QUnVudGltZU9iamVjdE1hcDo6TlBSdW50aW1lT2JqZWN0TWFwKFBsdWdpblZpZXcqIHBs
dWdpblZpZXcpCi0gICAgOiBtX3BsdWdpblZpZXcocGx1Z2luVmlldykKLSAgICAsIG1fZmluYWxp
emF0aW9uVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmTlBSdW50aW1lT2JqZWN0TWFwOjpp
bnZhbGlkYXRlUXVldWVkT2JqZWN0cykKLXsKLX0KLQotTlBSdW50aW1lT2JqZWN0TWFwOjpQbHVn
aW5Qcm90ZWN0b3I6OlBsdWdpblByb3RlY3RvcihOUFJ1bnRpbWVPYmplY3RNYXAqIG5wUnVudGlt
ZU9iamVjdE1hcCkKLXsKLSAgICAvLyBJZiB3ZSdyZSBhbHJlYWR5IGluIHRoZSBwbHVnLWluIHZp
ZXcgZGVzdHJ1Y3Rvciwgd2Ugc2hvdWxkbid0IHRyeSB0byBrZWVwIGl0IGFsaXZlLgotICAgIGlm
ICghbnBSdW50aW1lT2JqZWN0TWFwLT5tX3BsdWdpblZpZXctPmlzQmVpbmdEZXN0cm95ZWQoKSkK
LSAgICAgICAgbV9wbHVnaW5WaWV3ID0gbnBSdW50aW1lT2JqZWN0TWFwLT5tX3BsdWdpblZpZXc7
Ci19Ci0KLU5QUnVudGltZU9iamVjdE1hcDo6UGx1Z2luUHJvdGVjdG9yOjp+UGx1Z2luUHJvdGVj
dG9yKCkKLXsKLX0KLQotTlBPYmplY3QqIE5QUnVudGltZU9iamVjdE1hcDo6Z2V0T3JDcmVhdGVO
UE9iamVjdChWTSYgdm0sIEpTT2JqZWN0KiBqc09iamVjdCkKLXsKLSAgICAvLyBJZiB0aGlzIGlz
IGEgSlNOUE9iamVjdCwgd2UgY2FuIGp1c3QgZ2V0IGl0cyB1bmRlcmx5aW5nIE5QT2JqZWN0Lgot
ICAgIGlmIChqc09iamVjdC0+Y2xhc3NJbmZvKHZtKSA9PSBKU05QT2JqZWN0OjppbmZvKCkpIHsK
LSAgICAgICAgSlNOUE9iamVjdCoganNOUE9iamVjdCA9IGpzQ2FzdDxKU05QT2JqZWN0Kj4oanNP
YmplY3QpOwotICAgICAgICBOUE9iamVjdCogbnBPYmplY3QgPSBqc05QT2JqZWN0LT5ucE9iamVj
dCgpOwotICAgICAgICAKLSAgICAgICAgcmV0YWluTlBPYmplY3QobnBPYmplY3QpOwotICAgICAg
ICByZXR1cm4gbnBPYmplY3Q7Ci0gICAgfQotICAgIAotICAgIC8vIEZpcnN0LCBjaGVjayBpZiB3
ZSBhbHJlYWR5IGtub3cgYWJvdXQgdGhpcyBvYmplY3QuCi0gICAgaWYgKE5QSlNPYmplY3QqIG5w
SlNPYmplY3QgPSBtX25wSlNPYmplY3RzLmdldChqc09iamVjdCkpIHsKLSAgICAgICAgcmV0YWlu
TlBPYmplY3QobnBKU09iamVjdCk7Ci0gICAgICAgIHJldHVybiBucEpTT2JqZWN0OwotICAgIH0K
LQotICAgIE5QSlNPYmplY3QqIG5wSlNPYmplY3QgPSBOUEpTT2JqZWN0OjpjcmVhdGUodm0sIHRo
aXMsIGpzT2JqZWN0KTsKLSAgICBtX25wSlNPYmplY3RzLnNldChqc09iamVjdCwgbnBKU09iamVj
dCk7Ci0KLSAgICByZXR1cm4gbnBKU09iamVjdDsKLX0KLQotdm9pZCBOUFJ1bnRpbWVPYmplY3RN
YXA6Om5wSlNPYmplY3REZXN0cm95ZWQoTlBKU09iamVjdCogbnBKU09iamVjdCkKLXsKLSAgICAv
LyBSZW1vdmUgdGhlIG9iamVjdCBmcm9tIHRoZSBtYXAuCi0gICAgQVNTRVJUKG1fbnBKU09iamVj
dHMuY29udGFpbnMobnBKU09iamVjdC0+anNPYmplY3QoKSkpOwotICAgIG1fbnBKU09iamVjdHMu
cmVtb3ZlKG5wSlNPYmplY3QtPmpzT2JqZWN0KCkpOwotfQotCi1KU09iamVjdCogTlBSdW50aW1l
T2JqZWN0TWFwOjpnZXRPckNyZWF0ZUpTT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIE5QT2JqZWN0KiBucE9iamVjdCkKLXsKLSAgICAvLyBJZiB0aGlzIGlzIGFuIE5QSlNPYmpl
Y3QsIHdlIGNhbiBqdXN0IGdldCB0aGUgSlNPYmplY3QgdGhhdCBpdCdzIHdyYXBwaW5nLgotICAg
IGlmIChOUEpTT2JqZWN0Ojppc05QSlNPYmplY3QobnBPYmplY3QpKQotICAgICAgICByZXR1cm4g
TlBKU09iamVjdDo6dG9OUEpTT2JqZWN0KG5wT2JqZWN0KS0+anNPYmplY3QoKTsKLSAgICAKLSAg
ICBpZiAoSlNOUE9iamVjdCoganNOUE9iamVjdCA9IG1fanNOUE9iamVjdHMuZ2V0KG5wT2JqZWN0
KSkKLSAgICAgICAgcmV0dXJuIGpzTlBPYmplY3Q7Ci0KLSAgICBKU05QT2JqZWN0KiBqc05QT2Jq
ZWN0ID0gSlNOUE9iamVjdDo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgdGhpcywgbnBPYmplY3QpOwot
ICAgIHdlYWtBZGQobV9qc05QT2JqZWN0cywgbnBPYmplY3QsIEpTQzo6V2VhazxKU05QT2JqZWN0
Pihqc05QT2JqZWN0LCB0aGlzLCBucE9iamVjdCkpOwotICAgIHJldHVybiBqc05QT2JqZWN0Owot
fQotCi1KU1ZhbHVlIE5QUnVudGltZU9iamVjdE1hcDo6Y29udmVydE5QVmFyaWFudFRvSlNWYWx1
ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IE5QVmFyaWFudCYgdmFy
aWFudCkKLXsKLSAgICBzd2l0Y2ggKHZhcmlhbnQudHlwZSkgewotICAgIGNhc2UgTlBWYXJpYW50
VHlwZV9Wb2lkOgotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIGNhc2UgTlBW
YXJpYW50VHlwZV9OdWxsOgotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0KLSAgICBjYXNlIE5Q
VmFyaWFudFR5cGVfQm9vbDoKLSAgICAgICAgcmV0dXJuIGpzQm9vbGVhbih2YXJpYW50LnZhbHVl
LmJvb2xWYWx1ZSk7Ci0KLSAgICBjYXNlIE5QVmFyaWFudFR5cGVfSW50MzI6Ci0gICAgICAgIHJl
dHVybiBqc051bWJlcih2YXJpYW50LnZhbHVlLmludFZhbHVlKTsKLQotICAgIGNhc2UgTlBWYXJp
YW50VHlwZV9Eb3VibGU6Ci0gICAgICAgIHJldHVybiBqc051bWJlcih2YXJpYW50LnZhbHVlLmRv
dWJsZVZhbHVlKTsKLQotICAgIGNhc2UgTlBWYXJpYW50VHlwZV9TdHJpbmc6Ci0gICAgICAgIHJl
dHVybiBqc1N0cmluZyhnbG9iYWxPYmplY3QtPnZtKCksIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0
aW4xRmFsbGJhY2sodmFyaWFudC52YWx1ZS5zdHJpbmdWYWx1ZS5VVEY4Q2hhcmFjdGVycywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyaWFudC52YWx1ZS5zdHJpbmdWYWx1ZS5VVEY4TGVuZ3RoKSk7Ci0gICAgY2FzZSBO
UFZhcmlhbnRUeXBlX09iamVjdDoKLSAgICAgICAgcmV0dXJuIGdldE9yQ3JlYXRlSlNPYmplY3Qo
Z2xvYmFsT2JqZWN0LCB2YXJpYW50LnZhbHVlLm9iamVjdFZhbHVlKTsKLSAgICB9Ci0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotdm9p
ZCBOUFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUsIE5QVmFyaWFudCYgdmFy
aWFudCkKLXsKLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEpT
TG9ja0hvbGRlciBsb2NrKGxleGljYWxHbG9iYWxPYmplY3QpOwotCi0gICAgVk9JRF9UT19OUFZB
UklBTlQodmFyaWFudCk7Ci0gICAgCi0gICAgaWYgKHZhbHVlLmlzTnVsbCgpKSB7Ci0gICAgICAg
IE5VTExfVE9fTlBWQVJJQU5UKHZhcmlhbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgVk9JRF9UT19OUFZBUklBTlQo
dmFyaWFudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAodmFsdWUuaXNCb29s
ZWFuKCkpIHsKLSAgICAgICAgQk9PTEVBTl9UT19OUFZBUklBTlQodmFsdWUudG9Cb29sZWFuKGxl
eGljYWxHbG9iYWxPYmplY3QpLCB2YXJpYW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmICh2YWx1ZS5pc051bWJlcigpKSB7Ci0gICAgICAgIERPVUJMRV9UT19OUFZBUklBTlQo
dmFsdWUudG9OdW1iZXIobGV4aWNhbEdsb2JhbE9iamVjdCksIHZhcmlhbnQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgTlBT
dHJpbmcgbnBTdHJpbmcgPSBjcmVhdGVOUFN0cmluZyh2YWx1ZS50b1N0cmluZyhsZXhpY2FsR2xv
YmFsT2JqZWN0KS0+dmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCkudXRmOCgpKTsKLSAgICAgICAg
U1RSSU5HTl9UT19OUFZBUklBTlQobnBTdHJpbmcuVVRGOENoYXJhY3RlcnMsIG5wU3RyaW5nLlVU
RjhMZW5ndGgsIHZhcmlhbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHZh
bHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgTlBPYmplY3QqIG5wT2JqZWN0ID0gZ2V0T3JDcmVh
dGVOUE9iamVjdCh2bSwgYXNPYmplY3QodmFsdWUpKTsKLSAgICAgICAgT0JKRUNUX1RPX05QVkFS
SUFOVChucE9iamVjdCwgdmFyaWFudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotYm9vbCBOUFJ1bnRpbWVPYmplY3RNYXA6OmV2YWx1
YXRlKE5QT2JqZWN0KiBucE9iamVjdCwgY29uc3QgU3RyaW5nJiBzY3JpcHRTdHJpbmcsIE5QVmFy
aWFudCogcmVzdWx0KQotewotICAgIFN0cm9uZzxKU0dsb2JhbE9iamVjdD4gZ2xvYmFsT2JqZWN0
KHRoaXMtPmdsb2JhbE9iamVjdCgpLT52bSgpLCB0aGlzLT5nbG9iYWxPYmplY3QoKSk7Ci0gICAg
aWYgKCFnbG9iYWxPYmplY3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEpTTG9ja0hv
bGRlciBsb2NrKGdsb2JhbE9iamVjdC5nZXQoKSk7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBn
ZXRPckNyZWF0ZUpTT2JqZWN0KGdsb2JhbE9iamVjdC5nZXQoKSwgbnBPYmplY3QpOwotCi0gICAg
SlNWYWx1ZSByZXN1bHRWYWx1ZSA9IEpTQzo6ZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LmdldCgpLCBt
YWtlU291cmNlKHNjcmlwdFN0cmluZywgeyB9KSwgdGhpc1ZhbHVlKTsKLQotICAgIGNvbnZlcnRK
U1ZhbHVlVG9OUFZhcmlhbnQoZ2xvYmFsT2JqZWN0LmdldCgpLCByZXN1bHRWYWx1ZSwgKnJlc3Vs
dCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTlBSdW50aW1lT2JqZWN0TWFwOjppbnZh
bGlkYXRlKCkKLXsKLSAgICAvLyBEZWFsbG9jYXRlIGFsbCB0aGUgb2JqZWN0IHdyYXBwZXJzIHNv
IHdlIHdvbid0IGxlYWsgYW55IEphdmFTY3JpcHQgb2JqZWN0cy4KLSAgICBmb3IgKGF1dG8mIG5w
SlNPYmplY3QgOiBjb3B5VG9WZWN0b3IobV9ucEpTT2JqZWN0cy52YWx1ZXMoKSkpCi0gICAgICAg
IGRlYWxsb2NhdGVOUE9iamVjdChucEpTT2JqZWN0KTsKLSAgICAKLSAgICAvLyBXZSBzaG91bGRu
J3QgaGF2ZSBhbnkgTlBKU09iamVjdHMgbGVmdCBub3cuCi0gICAgQVNTRVJUKG1fbnBKU09iamVj
dHMuaXNFbXB0eSgpKTsKLQotICAgIFZlY3RvcjxOUE9iamVjdCo+IG9iamVjdHM7Ci0KLSAgICBm
b3IgKEhhc2hNYXA8TlBPYmplY3QqLCBKU0M6OldlYWs8SlNOUE9iamVjdD4+OjppdGVyYXRvciBw
dHIgPSBtX2pzTlBPYmplY3RzLmJlZ2luKCksIGVuZCA9IG1fanNOUE9iamVjdHMuZW5kKCk7IHB0
ciAhPSBlbmQ7ICsrcHRyKSB7Ci0gICAgICAgIEpTTlBPYmplY3QqIGpzTlBPYmplY3QgPSBwdHIt
PnZhbHVlLmdldCgpOwotICAgICAgICBpZiAoIWpzTlBPYmplY3QpIC8vIFNraXAgem9tYmllcy4K
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBvYmplY3RzLmFwcGVuZChqc05QT2JqZWN0
LT5sZWFrTlBPYmplY3QoKSk7Ci0gICAgfQotCi0gICAgbV9qc05QT2JqZWN0cy5jbGVhcigpOwot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RzLnNpemUoKTsgKytpKQotICAgICAg
ICByZWxlYXNlTlBPYmplY3Qob2JqZWN0c1tpXSk7Ci0gICAgCi0gICAgLy8gRGVhbCB3aXRoIGFu
eSBvYmplY3RzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZm9yIGRlbGF5ZWQgZGVzdHJ1Y3Rpb24KLSAg
ICBpZiAobV9ucE9iamVjdHNUb0ZpbmFsaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIEFTU0VSVChtX2ZpbmFsaXphdGlvblRpbWVyLmlzQWN0aXZlKCkpOwotICAgIG1fZmluYWxp
emF0aW9uVGltZXIuc3RvcCgpOwotICAgIGludmFsaWRhdGVRdWV1ZWRPYmplY3RzKCk7Ci19Ci0K
LUpTR2xvYmFsT2JqZWN0KiBOUFJ1bnRpbWVPYmplY3RNYXA6Omdsb2JhbE9iamVjdCgpIGNvbnN0
Ci17Ci0gICAgRnJhbWUqIGZyYW1lID0gbV9wbHVnaW5WaWV3LT5mcmFtZSgpOwotICAgIGlmICgh
ZnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGZyYW1lLT5zY3JpcHQoKS5n
bG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcmIGdsb2JhbEV4
Y2VwdGlvblN0cmluZygpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZXhj
ZXB0aW9uU3RyaW5nOwotICAgIHJldHVybiBleGNlcHRpb25TdHJpbmc7Ci19Ci0KLXZvaWQgTlBS
dW50aW1lT2JqZWN0TWFwOjpzZXRHbG9iYWxFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBleGNlcHRp
b25TdHJpbmcpCi17Ci0gICAgZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkgPSBleGNlcHRpb25TdHJp
bmc7Ci19Ci0gICAgCi12b2lkIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlv
blRvRXhlY1N0YXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KQotewotICAg
IFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKGdsb2JhbEV4Y2VwdGlvblN0cmluZygp
LmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB7Ci0gICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrKHZtKTsKLSAgICAgICAgdGhyb3dFeGNlcHRpb24obGV4aWNhbEdsb2JhbE9iamVjdCwg
c2NvcGUsIGNyZWF0ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbEV4Y2VwdGlvblN0
cmluZygpKSk7Ci0gICAgfQotICAgIAotICAgIGdsb2JhbEV4Y2VwdGlvblN0cmluZygpID0gU3Ry
aW5nKCk7Ci19Ci0KLXZvaWQgTlBSdW50aW1lT2JqZWN0TWFwOjppbnZhbGlkYXRlUXVldWVkT2Jq
ZWN0cygpCi17Ci0gICAgQVNTRVJUKG1fbnBPYmplY3RzVG9GaW5hbGl6ZS5zaXplKCkpOwotICAg
IC8vIFdlIGRlbGliZXJhdGVseSByZS1yZXF1ZXN0IG1fbnBPYmplY3RzVG9GaW5hbGl6ZS5zaXpl
KCkgYXMgY3VzdG9tIGRlYWxsb2MKLSAgICAvLyBmdW5jdGlvbnMgbWF5IGV4ZWN1dGUgSlMgYW5k
IHNvIGdldCBtb3JlIG9iamVjdHMgYWRkZWQgdG8gdGhlIGRlYWxsb2MgcXVldWUKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fbnBPYmplY3RzVG9GaW5hbGl6ZS5zaXplKCk7ICsraSkKLSAg
ICAgICAgZGVhbGxvY2F0ZU5QT2JqZWN0KG1fbnBPYmplY3RzVG9GaW5hbGl6ZVtpXSk7Ci0gICAg
bV9ucE9iamVjdHNUb0ZpbmFsaXplLmNsZWFyKCk7Ci19Ci0KLXZvaWQgTlBSdW50aW1lT2JqZWN0
TWFwOjphZGRUb0ludmFsaWRhdGlvblF1ZXVlKE5QT2JqZWN0KiBucE9iamVjdCkKLXsKLSAgICBp
ZiAodHJ5U2FmZVJlbGVhc2VOUE9iamVjdChucE9iamVjdCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAobV9ucE9iamVjdHNUb0ZpbmFsaXplLmlzRW1wdHkoKSkKLSAgICAgICAgbV9maW5hbGl6
YXRpb25UaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLSAgICBBU1NFUlQobV9maW5hbGl6YXRpb25U
aW1lci5pc0FjdGl2ZSgpKTsKLSAgICBtX25wT2JqZWN0c1RvRmluYWxpemUuYXBwZW5kKG5wT2Jq
ZWN0KTsKLX0KLQotdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6OmZpbmFsaXplKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQotewotICAgIEpTTlBPYmplY3Qq
IG9iamVjdCA9IHN0YXRpY19jYXN0PEpTTlBPYmplY3QqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkp
OwotICAgIHdlYWtSZW1vdmUobV9qc05QT2JqZWN0cywgc3RhdGljX2Nhc3Q8TlBPYmplY3QqPihj
b250ZXh0KSwgb2JqZWN0KTsKLSAgICBhZGRUb0ludmFsaWRhdGlvblF1ZXVlKG9iamVjdC0+bGVh
a05QT2JqZWN0KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q3NDlhM2I4ZjdhODk2OTIyNDExMTE1M2JmYmYy
NDBkYjljZWY1OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmpl
Y3RNYXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBOUEpTT2JqZWN0V3JhcHBlck1hcF9oCi0jZGVmaW5lIE5QSlNPYmplY3RXcmFwcGVyTWFw
X2gKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvV2Vhay5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1dlYWtJbmxpbmVzLmg+
Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2lu
Y2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0KLXN0cnVjdCBOUE9iamVjdDsKLXR5cGVkZWYgc3RydWN0
IF9OUFZhcmlhbnQgTlBWYXJpYW50OwotCi1uYW1lc3BhY2UgSlNDIHsKLSAgICBjbGFzcyBDYWxs
RnJhbWU7Ci0gICAgY2xhc3MgVk07Ci0gICAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci0gICAgY2xh
c3MgSlNPYmplY3Q7Ci0gICAgY2xhc3MgSlNWYWx1ZTsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIEpTTlBPYmplY3Q7Ci1jbGFzcyBOUEpTT2JqZWN0OwotY2xhc3MgUGx1Z2luVmll
dzsKLQotLy8gQSBwZXIgcGx1Zy1pbiBtYXAgb2YgTlBPYmplY3RzIHRoYXQgd3JhcCBKYXZhU2Ny
aXB0IG9iamVjdHMuCi1jbGFzcyBOUFJ1bnRpbWVPYmplY3RNYXAgOiBwcml2YXRlIEpTQzo6V2Vh
a0hhbmRsZU93bmVyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBOUFJ1bnRpbWVPYmplY3RNYXAo
UGx1Z2luVmlldyopOwotCi0gICAgY2xhc3MgUGx1Z2luUHJvdGVjdG9yIHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIGV4cGxpY2l0IFBsdWdpblByb3RlY3RvcihOUFJ1bnRpbWVPYmplY3RNYXAqIG5w
UnVudGltZU9iamVjdE1hcCk7Ci0gICAgICAgIH5QbHVnaW5Qcm90ZWN0b3IoKTsKLSAgICAgICAg
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPFBsdWdpblZpZXc+IG1fcGx1Z2luVmlldzsK
LSAgICB9OwotCi0gICAgLy8gUmV0dXJucyBhbiBOUE9iamVjdCB0aGF0IHdyYXBzIHRoZSBnaXZl
biBKU09iamVjdCBvYmplY3QuIElmIHRoZXJlIGlzIGFscmVhZHkgYW4gTlBPYmplY3QgdGhhdCB3
cmFwcyB0aGlzIEpTT2JqZWN0LCBpdCB3aWxsCi0gICAgLy8gcmV0YWluIGl0IGFuZCByZXR1cm4g
aXQuCi0gICAgTlBPYmplY3QqIGdldE9yQ3JlYXRlTlBPYmplY3QoSlNDOjpWTSYsIEpTQzo6SlNP
YmplY3QqKTsKLSAgICB2b2lkIG5wSlNPYmplY3REZXN0cm95ZWQoTlBKU09iamVjdCopOwotCi0g
ICAgLy8gUmV0dXJucyBhIEpTT2JqZWN0IG9iamVjdCB0aGF0IHdyYXBzIHRoZSBnaXZlbiBOUE9i
amVjdC4KLSAgICBKU0M6OkpTT2JqZWN0KiBnZXRPckNyZWF0ZUpTT2JqZWN0KEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBOUE9iamVjdCopOwotICAgIHZvaWQganNOUE9iamVjdERlc3Ryb3llZChKU05Q
T2JqZWN0Kik7Ci0KLSAgICB2b2lkIGNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6SlNWYWx1ZSwgTlBWYXJpYW50Jik7Ci0gICAgSlNDOjpKU1ZhbHVl
IGNvbnZlcnROUFZhcmlhbnRUb0pTVmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IE5Q
VmFyaWFudCYpOwotCi0gICAgYm9vbCBldmFsdWF0ZShOUE9iamVjdCosIGNvbnN0IFN0cmluZyYg
c2NyaXB0U3RyaW5nLCBOUFZhcmlhbnQqIHJlc3VsdCk7Ci0KLSAgICAvLyBDYWxsZWQgd2hlbiB0
aGUgcGx1Zy1pbiBpcyBkZXN0cm95ZWQuIFdpbGwgaW52YWxpZGF0ZSBhbGwgdGhlIE5QT2JqZWN0
cy4KLSAgICB2b2lkIGludmFsaWRhdGUoKTsKLQotICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCgpIGNvbnN0OwotCi0gICAgc3RhdGljIHZvaWQgc2V0R2xvYmFsRXhjZXB0aW9u
KGNvbnN0IFN0cmluZyYgZXhjZXB0aW9uU3RyaW5nKTsKLSAgICBzdGF0aWMgdm9pZCBtb3ZlR2xv
YmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCopOwotCi1wcml2YXRl
OgotICAgIC8vIFdlYWtIYW5kbGVPd25lcgotICAgIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGRUb0lu
dmFsaWRhdGlvblF1ZXVlKE5QT2JqZWN0Kik7Ci0gICAgdm9pZCBpbnZhbGlkYXRlUXVldWVkT2Jq
ZWN0cygpOwotCi0gICAgUGx1Z2luVmlldyogbV9wbHVnaW5WaWV3OwotICAgIEhhc2hNYXA8SlND
OjpKU09iamVjdCosIE5QSlNPYmplY3QqPiBtX25wSlNPYmplY3RzOwotICAgIEhhc2hNYXA8TlBP
YmplY3QqLCBKU0M6OldlYWs8SlNOUE9iamVjdD4+IG1fanNOUE9iamVjdHM7Ci0gICAgVmVjdG9y
PE5QT2JqZWN0Kj4gbV9ucE9iamVjdHNUb0ZpbmFsaXplOwotICAgIFJ1bkxvb3A6OlRpbWVyPE5Q
UnVudGltZU9iamVjdE1hcD4gbV9maW5hbGl6YXRpb25UaW1lcjsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNl
bmRpZiAvLyBOUEpTT2JqZWN0V3JhcHBlck1hcF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVVdGlsaXRpZXMuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lVXRpbGl0aWVz
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg3YTg1ZTc5ODM4NmE1NDI5MjUw
ZTY2YTg0NTk2MGNlNWQ4ZWEyNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1
bnRpbWVVdGlsaXRpZXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTlBSdW50aW1lVXRpbGl0aWVz
LmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgPHN0cmlu
Zy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLXZvaWQqIG5wbk1lbUFsbG9jKHVpbnQzMl90IHNpemUpCi17Ci0gICAgLy8gV2UgY291bGQg
dXNlIGZhc3RNYWxsb2MgaGVyZSwgYnV0IHRoZXJlIG1pZ2h0IGJlIHBsdWctaW5zIHRoYXQgbWl4
IE5QTl9NZW1BbGxvYy9OUE5fTWVtRnJlZSB3aXRoIG1hbGxvYyBhbmQgZnJlZSwKLSAgICAvLyBz
byBoYXZpbmcgdGhlbSBiZSBlcXVpdmFsZW50IHNlZW1zIGxpa2UgYSBnb29kIGlkZWEuCi0gICAg
cmV0dXJuIG1hbGxvYyhzaXplKTsKLX0KLQotdm9pZCBucG5NZW1GcmVlKHZvaWQqIHB0cikKLXsK
LSAgICAvLyBXZSBjb3VsZCB1c2UgZmFzdEZyZWUgaGVyZSwgYnV0IHRoZXJlIG1pZ2h0IGJlIHBs
dWctaW5zIHRoYXQgbWl4IE5QTl9NZW1BbGxvYy9OUE5fTWVtRnJlZSB3aXRoIG1hbGxvYyBhbmQg
ZnJlZSwKLSAgICAvLyBzbyBoYXZpbmcgdGhlbSBiZSBlcXVpdmFsZW50IHNlZW1zIGxpa2UgYSBn
b29kIGlkZWEuCi0gICAgZnJlZShwdHIpOwotfQotCi1OUFN0cmluZyBjcmVhdGVOUFN0cmluZyhj
b25zdCBDU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgY2hhciogdXRmOENoYXJhY3RlcnMgPSBucG5N
ZW1OZXdBcnJheTxjaGFyPihzdHJpbmcubGVuZ3RoKCkpOwotICAgIG1lbWNweSh1dGY4Q2hhcmFj
dGVycywgc3RyaW5nLmRhdGEoKSwgc3RyaW5nLmxlbmd0aCgpKTsKLQotICAgIE5QU3RyaW5nIG5w
U3RyaW5nOwotICAgIG5wU3RyaW5nLlVURjhDaGFyYWN0ZXJzID0gdXRmOENoYXJhY3RlcnM7Ci0g
ICAgbnBTdHJpbmcuVVRGOExlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLQotICAgIHJldHVybiBu
cFN0cmluZzsKLX0KLQotTlBPYmplY3QqIGNyZWF0ZU5QT2JqZWN0KE5QUCBucHAsIE5QQ2xhc3Mq
IG5wQ2xhc3MpCi17Ci0gICAgQVNTRVJUKG5wQ2xhc3MpOwotICAgIAotICAgIE5QT2JqZWN0KiBu
cE9iamVjdDsKLSAgICBpZiAobnBDbGFzcy0+YWxsb2NhdGUpCi0gICAgICAgIG5wT2JqZWN0ID0g
bnBDbGFzcy0+YWxsb2NhdGUobnBwLCBucENsYXNzKTsKLSAgICBlbHNlCi0gICAgICAgIG5wT2Jq
ZWN0ID0gbnBuTWVtTmV3PE5QT2JqZWN0PigpOwotCi0gICAgbnBPYmplY3QtPl9jbGFzcyA9IG5w
Q2xhc3M7Ci0gICAgbnBPYmplY3QtPnJlZmVyZW5jZUNvdW50ID0gMTsKLSAgICAKLSAgICByZXR1
cm4gbnBPYmplY3Q7Ci19Ci0KLXZvaWQgZGVhbGxvY2F0ZU5QT2JqZWN0KE5QT2JqZWN0KiBucE9i
amVjdCkKLXsKLSAgICBBU1NFUlQobnBPYmplY3QpOwotICAgIGlmICghbnBPYmplY3QpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChucE9iamVjdC0+X2NsYXNzLT5kZWFsbG9jYXRlKQotICAg
ICAgICBucE9iamVjdC0+X2NsYXNzLT5kZWFsbG9jYXRlKG5wT2JqZWN0KTsKLSAgICBlbHNlCi0g
ICAgICAgIG5wbk1lbUZyZWUobnBPYmplY3QpOwotfQotCi12b2lkIHJldGFpbk5QT2JqZWN0KE5Q
T2JqZWN0KiBucE9iamVjdCkKLXsKLSAgICBBU1NFUlQobnBPYmplY3QpOwotICAgIGlmICghbnBP
YmplY3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIG5wT2JqZWN0LT5yZWZlcmVuY2VDb3VudCsr
OwotfQotCi1ib29sIHRyeVNhZmVSZWxlYXNlTlBPYmplY3QoTlBPYmplY3QqIG5wT2JqZWN0KQot
ewotICAgIEFTU0VSVChucE9iamVjdCk7Ci0gICAgaWYgKCFucE9iamVjdCkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgCi0gICAgQVNTRVJUKG5wT2JqZWN0LT5yZWZlcmVuY2VDb3VudCA+PSAx
KTsKLQotICAgIG5wT2JqZWN0LT5yZWZlcmVuY2VDb3VudC0tOwotICAgIGlmIChucE9iamVjdC0+
cmVmZXJlbmNlQ291bnQpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChucE9iamVjdC0+
X2NsYXNzLT5kZWFsbG9jYXRlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVhbGxvY2F0
ZU5QT2JqZWN0KG5wT2JqZWN0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCByZWxlYXNl
TlBPYmplY3QoTlBPYmplY3QqIG5wT2JqZWN0KQotewotICAgIEFTU0VSVChucE9iamVjdCk7Ci0g
ICAgaWYgKCFucE9iamVjdCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEFTU0VSVChucE9i
amVjdC0+cmVmZXJlbmNlQ291bnQgPj0gMSk7Ci0gICAgbnBPYmplY3QtPnJlZmVyZW5jZUNvdW50
LS07Ci0gICAgaWYgKCFucE9iamVjdC0+cmVmZXJlbmNlQ291bnQpCi0gICAgICAgIGRlYWxsb2Nh
dGVOUE9iamVjdChucE9iamVjdCk7Ci19Ci0KLXZvaWQgcmVsZWFzZU5QVmFyaWFudFZhbHVlKE5Q
VmFyaWFudCogdmFyaWFudCkKLXsKLSAgICBBU1NFUlQodmFyaWFudCk7Ci0gICAgCi0gICAgc3dp
dGNoICh2YXJpYW50LT50eXBlKSB7Ci0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX1ZvaWQ6Ci0gICAg
Y2FzZSBOUFZhcmlhbnRUeXBlX051bGw6Ci0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX0Jvb2w6Ci0g
ICAgY2FzZSBOUFZhcmlhbnRUeXBlX0ludDMyOgotICAgIGNhc2UgTlBWYXJpYW50VHlwZV9Eb3Vi
bGU6Ci0gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCi0gICAgICAgIGJyZWFrOwotICAgICAgICAK
LSAgICBjYXNlIE5QVmFyaWFudFR5cGVfU3RyaW5nOgotICAgICAgICBucG5NZW1GcmVlKGNvbnN0
X2Nhc3Q8TlBVVEY4Kj4odmFyaWFudC0+dmFsdWUuc3RyaW5nVmFsdWUuVVRGOENoYXJhY3RlcnMp
KTsKLSAgICAgICAgdmFyaWFudC0+dmFsdWUuc3RyaW5nVmFsdWUuVVRGOENoYXJhY3RlcnMgPSAw
OwotICAgICAgICB2YXJpYW50LT52YWx1ZS5zdHJpbmdWYWx1ZS5VVEY4TGVuZ3RoID0gMDsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX09iamVjdDoKLSAgICAgICAgcmVs
ZWFzZU5QT2JqZWN0KHZhcmlhbnQtPnZhbHVlLm9iamVjdFZhbHVlKTsKLSAgICAgICAgdmFyaWFu
dC0+dmFsdWUub2JqZWN0VmFsdWUgPSAwOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICB2
YXJpYW50LT50eXBlID0gTlBWYXJpYW50VHlwZV9Wb2lkOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lVXRp
bGl0aWVzLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1
bnRpbWVVdGlsaXRpZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc3NWQ2MjYx
OTEwYzJmZDhkZDhiODM5ZTQ4M2M1NGFlMDg2MDk0NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9OUFJ1bnRpbWVVdGlsaXRpZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE5QUnVudGltZVV0aWxpdGllc19oCi0jZGVmaW5lIE5Q
UnVudGltZVV0aWxpdGllc19oCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQot
I2luY2x1ZGUgPFdlYkNvcmUvbnBydW50aW1lX2ludGVybmFsLmg+Ci0jaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KLQotc3RydWN0IE5QQ2xhc3M7Ci1zdHJ1Y3QgTlBPYmplY3Q7Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi12b2lkKiBucG5NZW1BbGxvYyh1aW50MzJfdCk7Ci12b2lkIG5wbk1lbUZy
ZWUodm9pZCopOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBucG5NZW1OZXcoKQotewotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUKj4obnBuTWVtQWxsb2Moc2l6ZW9mKFQpKSk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IFQqIG5wbk1lbU5ld0FycmF5KHNpemVfdCBjb3VudCkKLXsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG5wbk1lbUFsbG9jKHNpemVvZihUKSAqIGNvdW50KSk7
Ci19Ci0KLU5QU3RyaW5nIGNyZWF0ZU5QU3RyaW5nKGNvbnN0IENTdHJpbmcmKTsKLQotTlBPYmpl
Y3QqIGNyZWF0ZU5QT2JqZWN0KE5QUCwgTlBDbGFzcyopOwotdm9pZCBkZWFsbG9jYXRlTlBPYmpl
Y3QoTlBPYmplY3QqKTsKLQotdm9pZCByZXRhaW5OUE9iamVjdChOUE9iamVjdCopOwotdm9pZCBy
ZWxlYXNlTlBPYmplY3QoTlBPYmplY3QqKTsKLSAgICAKLS8vIFRoaXMgZnVuY3Rpb24gZGVjcmVt
ZW50cyB0aGUgcmVmY291bnQgb2YgdGhlIHNwZWNpZmllZCBvYmplY3QuIElmIHRoZQotLy8gcmVm
Y291bnQgcmVhY2hlcyAwIGl0IHdpbGwgYXR0ZW1wdCB0byBkZXN0cm95IHRoZSBvYmplY3QuIElm
IHRoZSBvYmplY3QgaGFzCi0vLyBhIGN1c3RvbSBkZWFsbG9jYXRlIGZ1bmN0aW9uIGl0IHdpbGwg
ZmFpbCBhbmQgcmV0dXJuIGZhbHNlLCBzbyBpdCB3aWxsIGJlCi0vLyB1cCB0byB0aGUgY2FsbGVy
IHRvIGNhbGwgZGVhbGxvY2F0ZU5QT2JqZWN0LgotLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRv
IGltcGxlbWVudCB0aGUgZGVsYXllZCBmaW5hbGl6YXRpb24gb2YgTlBPYmplY3RzCi0vLyByZWxl
YXNlZCBkdXJpbmcgR0MuCi1ib29sIHRyeVNhZmVSZWxlYXNlTlBPYmplY3QoTlBPYmplY3QqKTsK
LQotdm9pZCByZWxlYXNlTlBWYXJpYW50VmFsdWUoTlBWYXJpYW50Kik7Ci0KLX0KLQotI2VuZGlm
IC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jZW5kaWYgLy8gTlBSdW50aW1lVXRp
bGl0aWVzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL05ldHNjYXBlQnJvd3NlckZ1bmNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlQnJvd3NlckZ1bmNzLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggM2RjOTI4ZGM1N2E5N2QwMmM5Mjg0NTMzMTFjZjMxY2JmMmI4NWMz
NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZUJyb3dzZXJGdW5jcy5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOZXRzY2FwZUJyb3dzZXJGdW5jcy5oIgotCi0j
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJOUFJ1bnRpbWVVdGls
aXRpZXMuaCIKLSNpbmNsdWRlICJOZXRzY2FwZVBsdWdpbi5oIgotI2luY2x1ZGUgIlBsdWdpbkNv
bnRyb2xsZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0hUVFBIZWFkZXJNYXAuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0hUVFBIZWFkZXJOYW1lcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSWRlbnRpZmll
clJlcC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1Byb3RlY3Rpb25TcGFjZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVy
Lmg+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1RvSW50ZWdl
ckNvbnZlcnNpb24uaD4KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgPHd0Zi9NYWNo
U2VuZFJpZ2h0Lmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFgxMSkKLSNpbmNsdWRlIDxXZWJD
b3JlL1BsYXRmb3JtRGlzcGxheVgxMS5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLS8vIEhlbHBlciBjbGFzcyBmb3IgZGVsYXlpbmcg
ZGVzdHJ1Y3Rpb24gb2YgYSBwbHVnLWluLgotY2xhc3MgUGx1Z2luRGVzdHJ1Y3Rpb25Qcm90ZWN0
b3IgewotcHVibGljOgotICAgIGV4cGxpY2l0IFBsdWdpbkRlc3RydWN0aW9uUHJvdGVjdG9yKE5l
dHNjYXBlUGx1Z2luKiBwbHVnaW4pCi0gICAgewotICAgICAgICBpZiAocGx1Z2luKQotICAgICAg
ICAgICAgbV9wcm90ZWN0b3IgPSBtYWtlVW5pcXVlPFBsdWdpbkNvbnRyb2xsZXI6OlBsdWdpbkRl
c3RydWN0aW9uUHJvdGVjdG9yPihzdGF0aWNfY2FzdDxQbHVnaW4qPihwbHVnaW4pLT5jb250cm9s
bGVyKCkpOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBsdWdp
bkNvbnRyb2xsZXI6OlBsdWdpbkRlc3RydWN0aW9uUHJvdGVjdG9yPiBtX3Byb3RlY3RvcjsKLX07
Ci0KLXN0YXRpYyBib29sIHN0YXJ0c1dpdGhCbGFua0xpbmUoY29uc3QgY2hhciogYnl0ZXMsIHVu
c2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gbGVuZ3RoID4gMCAmJiBieXRlc1swXSA9PSAn
XG4nOwotfQotCi1zdGF0aWMgaW50IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZShjb25zdCBj
aGFyKiBieXRlcywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGggLSA0OyBpKyspIHsKLSAgICAgICAgLy8gU3VwcG9ydCBmb3IgQWNyb2JhdC4g
SXQgc2VuZHMgIlxuXG4iLgotICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xuJyAmJiBieXRlc1tp
ICsgMV0gPT0gJ1xuJykKLSAgICAgICAgICAgIHJldHVybiBpICsgMjsKLSAgICAgICAgCi0gICAg
ICAgIC8vIFJldHVybnMgdGhlIHBvc2l0aW9uIGFmdGVyIDIgQ1JMRidzIG9yIDEgQ1JMRiBpZiBp
dCBpcyB0aGUgZmlyc3QgbGluZS4KLSAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicgJiYgYnl0
ZXNbaSArIDFdID09ICdcbicpIHsKLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGlm
IChpID09IDIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0KLSAgICAgICAgICAgIGlmIChi
eXRlc1tpXSA9PSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBmb3IgRGlyZWN0
b3IuIEl0IHNlbmRzICJcclxuXG4iICgzODgwMzg3KS4KLSAgICAgICAgICAgICAgICByZXR1cm4g
aSArIDE7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXHIn
ICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBm
b3IgRmxhc2guIEl0IHNlbmRzICJcclxuXHJcbiIgKDM3NTgxMTMpLgotICAgICAgICAgICAgICAg
IHJldHVybiBpICsgMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiAtMTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIqIGZpbmRFbmRPZkxpbmUoY29uc3QgY2hh
ciogYnl0ZXMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEhU
VFAgc3BlY2lmaWNhdGlvbiBFT0wgaXMgZGVmaW5lZCBhcwotICAgIC8vIGEgQ1JMRiBwYWlyLiBV
bmZvcnR1bmF0ZWx5LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgTEYKLSAgICAvLyBpbnN0ZWFkLiBX
b3JzZSB5ZXQsIHNvbWUgc2VydmVycyB3aWxsIHVzZSBhIGNvbWJpbmF0aW9uCi0gICAgLy8gb2Yg
Ym90aCAoZS5nLiA8aGVhZGVyPkNSTEZMRjxib2R5PiksIHNvIGZpbmRFT0wgbmVlZHMKLSAgICAv
LyB0byBiZSBtb3JlIGZvcmdpdmluZy4gSXQgd2lsbCBub3cgYWNjZXB0IENSTEYsIExGIG9yCi0g
ICAgLy8gQ1IuCi0gICAgLy8KLSAgICAvLyBJdCByZXR1cm5zIDAgaWYgRU9MRiBpcyBub3QgZm91
bmQgb3IgaXQgd2lsbCByZXR1cm4KLSAgICAvLyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IHRlcm1p
bmF0aW5nIGNoYXJhY3Rlci4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdcbicpCi0gICAgICAgICAgICByZXR1cm4g
Ynl0ZXMgKyBpOwotICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJykgewotICAgICAgICAgICAg
Ly8gQ2hlY2sgdG8gc2VlIGlmIHNwYW5uaW5nIGJ1ZmZlciBib3VuZHMKLSAgICAgICAgICAgIC8v
IChDUkxGIGlzIGFjcm9zcyByZWFkcykuIElmIHNvLCB3YWl0IGZvcgotICAgICAgICAgICAgLy8g
bmV4dCByZWFkLgotICAgICAgICAgICAgaWYgKGkgKyAxID09IGxlbmd0aCkKLSAgICAgICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgICAgcmV0dXJuIGJ5dGVzICsgaTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgU3RyaW5nIGNhcGl0YWxpemVSRkM4
MjJIZWFkZXJGaWVsZE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGJvb2wgY2FwaXRh
bGl6ZUNoYXJhY3RlciA9IHRydWU7Ci0gICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG5hbWUubGVuZ3RoKCk7IGkrKykgewotICAgICAgICByZXN1
bHQuYXBwZW5kKGNhcGl0YWxpemVDaGFyYWN0ZXIgPyB0b0FTQ0lJVXBwZXIobmFtZVtpXSkgOiB0
b0FTQ0lJTG93ZXIobmFtZVtpXSkpOwotICAgICAgICBpZiAobmFtZVtpXSA9PSAnLScpCi0gICAg
ICAgICAgICBjYXBpdGFsaXplQ2hhcmFjdGVyID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgY2FwaXRhbGl6ZUNoYXJhY3RlciA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gcmVz
dWx0LnRvU3RyaW5nKCk7Ci19Ci0KLXN0YXRpYyBIVFRQSGVhZGVyTWFwIHBhcnNlUkZDODIySGVh
ZGVyRmllbGRzKGNvbnN0IGNoYXIqIGJ5dGVzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgU3Ry
aW5nIGxhc3RIZWFkZXJLZXk7Ci0gICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7Ci0KLSAg
ICAvLyBMb29wIG92ZXIgbGluZXMgdW50aWwgd2UncmUgcGFzdCB0aGUgaGVhZGVyLCBvciB3ZSBj
YW4ndCBmaW5kIGFueSBtb3JlIGVuZC1vZi1saW5lcwotICAgIHdoaWxlIChjb25zdCBjaGFyKiBl
bmRPZkxpbmUgPSBmaW5kRW5kT2ZMaW5lKGJ5dGVzLCBsZW5ndGgpKSB7Ci0gICAgICAgIGNvbnN0
IGNoYXIqIGxpbmUgPSBieXRlczsKLSAgICAgICAgaW50IGxpbmVMZW5ndGggPSBlbmRPZkxpbmUg
LSBieXRlczsKLQotICAgICAgICAvLyBNb3ZlIGJ5dGVzIHRvIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIg
dGhlIHRlcm1pbmF0b3IgYXMgcmV0dXJuZWQgYnkgZmluZEVuZE9mTGluZS4KLSAgICAgICAgYnl0
ZXMgPSBlbmRPZkxpbmUgKyAxOwotICAgICAgICBpZiAoKCplbmRPZkxpbmUgPT0gJ1xyJykgJiYg
KCpieXRlcyA9PSAnXG4nKSkKLSAgICAgICAgICAgIGJ5dGVzKys7IC8vIFNhZmUgc2luY2UgZmlu
ZEVuZE9mTGluZSB3b24ndCByZXR1cm4gYSBzcGFubmluZyBDUkxGLgotCi0gICAgICAgIGxlbmd0
aCAtPSAoYnl0ZXMgLSBsaW5lKTsKLSAgICAgICAgaWYgKCFsaW5lTGVuZ3RoKSB7Ci0gICAgICAg
ICAgICAvLyBCbGFuayBsaW5lOyB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBoZWFkZXIKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCpsaW5lID09ICcgJyB8fCAq
bGluZSA9PSAnXHQnKSB7Ci0gICAgICAgICAgICAvLyBDb250aW51YXRpb24gb2YgdGhlIHByZXZp
b3VzIGhlYWRlcgotICAgICAgICAgICAgaWYgKGxhc3RIZWFkZXJLZXkuaXNOdWxsKCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgaGVhZGVyOyBpZ25vcmUgaXQgYW5kIGNvbnRpbnVl
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9IAotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAvLyBNZXJnZSB0aGUgY29udGludWF0aW9uIG9mIHRoZSBwcmV2aW91cyBo
ZWFkZXIKLSAgICAgICAgICAgIFN0cmluZyBjdXJyZW50VmFsdWUgPSBoZWFkZXJGaWVsZHMuZ2V0
KGxhc3RIZWFkZXJLZXkpOwotICAgICAgICAgICAgU3RyaW5nIG5ld1ZhbHVlKGxpbmUsIGxpbmVM
ZW5ndGgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBoZWFkZXJGaWVsZHMuc2V0KGxhc3RI
ZWFkZXJLZXksIGN1cnJlbnRWYWx1ZSArIG5ld1ZhbHVlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIEJyYW5kIG5ldyBoZWFkZXIKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNv
bG9uID0gbGluZTsKLSAgICAgICAgICAgIHdoaWxlICgqY29sb24gIT0gJzonICYmIGNvbG9uICE9
IGVuZE9mTGluZSkKLSAgICAgICAgICAgICAgICBjb2xvbisrOwotCi0gICAgICAgICAgICBpZiAo
Y29sb24gPT0gZW5kT2ZMaW5lKSB7Ci0gICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIGhlYWRl
cjsgaWdub3JlIGl0IGFuZCBjb250aW51ZQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBsYXN0SGVhZGVyS2V5ID0gY2FwaXRhbGl6ZVJGQzgy
MkhlYWRlckZpZWxkTmFtZShTdHJpbmcobGluZSwgY29sb24gLSBsaW5lKSk7Ci0gICAgICAgICAg
ICBTdHJpbmcgdmFsdWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAoY29sb24rKzsg
Y29sb24gIT0gZW5kT2ZMaW5lOyBjb2xvbisrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCpjb2xv
biAhPSAnICcgJiYgKmNvbG9uICE9ICdcdCcpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNvbG9uID09IGVuZE9mTGluZSkKLSAgICAg
ICAgICAgICAgICB2YWx1ZSA9IGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgdmFsdWUgPSBTdHJpbmcoY29sb24sIGVuZE9mTGluZSAtIGNvbG9uKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgU3RyaW5nIG9sZFZhbHVlID0gaGVhZGVyRmllbGRzLmdl
dChsYXN0SGVhZGVyS2V5KTsKLSAgICAgICAgICAgIGlmICghb2xkVmFsdWUuaXNOdWxsKCkpCi0g
ICAgICAgICAgICAgICAgdmFsdWUgPSBvbGRWYWx1ZSArICIsICIgKyB2YWx1ZTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0SGVhZGVyS2V5LCB2YWx1ZSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gaGVhZGVyRmllbGRzOwotfQotICAgIAot
c3RhdGljIE5QRXJyb3IgcGFyc2VQb3N0QnVmZmVyKGJvb2wgaXNGaWxlLCBjb25zdCBjaGFyICpi
dWZmZXIsIHVpbnQzMl90IGxlbmd0aCwgYm9vbCBwYXJzZUhlYWRlcnMsIEhUVFBIZWFkZXJNYXAm
IGhlYWRlckZpZWxkcywgVmVjdG9yPHVpbnQ4X3Q+JiBib2R5RGF0YSkKLXsKLSAgICBSZWZQdHI8
U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudHM7Ci0gICAgY29uc3QgY2hhciogcG9zdEJ1ZmZlciA9
IDA7Ci0gICAgdWludDMyX3QgcG9zdEJ1ZmZlclNpemUgPSAwOwotCi0gICAgaWYgKGlzRmlsZSkg
ewotICAgICAgICBmaWxlQ29udGVudHMgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZVdpdGhDb250ZW50
c09mRmlsZShTdHJpbmc6OmZyb21VVEY4KGJ1ZmZlcikpOwotICAgICAgICBpZiAoIWZpbGVDb250
ZW50cykKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgICAg
ICBwb3N0QnVmZmVyID0gZmlsZUNvbnRlbnRzLT5kYXRhQXNDaGFyUHRyKCk7Ci0gICAgICAgIHBv
c3RCdWZmZXJTaXplID0gZmlsZUNvbnRlbnRzLT5zaXplKCk7Ci0KLSAgICAgICAgLy8gRklYTUU6
IFRoZSBOUEFQSSBzcGVjIHN0YXRlcyB0aGF0IHRoZSBmaWxlIHNob3VsZCBiZSBkZWxldGVkIGhl
cmUuCi0gICAgfSBlbHNlIHsKLSAgICAgICAgcG9zdEJ1ZmZlciA9IGJ1ZmZlcjsKLSAgICAgICAg
cG9zdEJ1ZmZlclNpemUgPSBsZW5ndGg7Ci0gICAgfQotCi0gICAgaWYgKHBhcnNlSGVhZGVycykg
ewotICAgICAgICBpZiAoc3RhcnRzV2l0aEJsYW5rTGluZShwb3N0QnVmZmVyLCBwb3N0QnVmZmVy
U2l6ZSkpIHsKLSAgICAgICAgICAgIHBvc3RCdWZmZXIrKzsKLSAgICAgICAgICAgIHBvc3RCdWZm
ZXJTaXplLS07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnQgbG9jYXRpb24gPSBs
b2NhdGlvbkFmdGVyRmlyc3RCbGFua0xpbmUocG9zdEJ1ZmZlciwgcG9zdEJ1ZmZlclNpemUpOwot
ICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYg
dGhlIGJsYW5rIGxpbmUgaXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2YgdGhlIGJ1ZmZlciwg
ZXZlcnl0aGluZyBiZWZvcmUgaXMgdGhlIGhlYWRlcgotICAgICAgICAgICAgICAgIGhlYWRlckZp
ZWxkcyA9IHBhcnNlUkZDODIySGVhZGVyRmllbGRzKHBvc3RCdWZmZXIsIGxvY2F0aW9uKTsKLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBkYXRhTGVuZ3RoID0gcG9zdEJ1ZmZlclNpemUgLSBsb2Nh
dGlvbjsKLQotICAgICAgICAgICAgICAgIC8vIFNvbWV0aW1lcyBwbHVnaW5zIGxpa2UgdG8gc2V0
IENvbnRlbnQtTGVuZ3RoIHRoZW1zZWx2ZXMgd2hlbiB0aGV5IHBvc3QsCi0gICAgICAgICAgICAg
ICAgLy8gYnV0IFdlYkZvdW5kYXRpb24gZG9lcyBub3QgbGlrZSB0aGF0LiBTbyB3ZSB3aWxsIHJl
bW92ZSB0aGUgaGVhZGVyCi0gICAgICAgICAgICAgICAgLy8gYW5kIGluc3RlYWQgdHJ1bmNhdGUg
dGhlIGRhdGEgdG8gdGhlIHJlcXVlc3RlZCBsZW5ndGguCi0gICAgICAgICAgICAgICAgU3RyaW5n
IGNvbnRlbnRMZW5ndGggPSBoZWFkZXJGaWVsZHMuZ2V0KEhUVFBIZWFkZXJOYW1lOjpDb250ZW50
TGVuZ3RoKTsKLQotICAgICAgICAgICAgICAgIGlmICghY29udGVudExlbmd0aC5pc051bGwoKSkK
LSAgICAgICAgICAgICAgICAgICAgZGF0YUxlbmd0aCA9IHN0ZDo6bWluKHBhcnNlSW50ZWdlckFs
bG93aW5nVHJhaWxpbmdKdW5rPHVuc2lnbmVkPihjb250ZW50TGVuZ3RoKS52YWx1ZV9vcigwKSwg
ZGF0YUxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnJlbW92ZShIVFRQSGVh
ZGVyTmFtZTo6Q29udGVudExlbmd0aCk7Ci0KLSAgICAgICAgICAgICAgICBwb3N0QnVmZmVyICs9
IGxvY2F0aW9uOwotICAgICAgICAgICAgICAgIHBvc3RCdWZmZXJTaXplID0gZGF0YUxlbmd0aDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEFTU0VSVChib2R5RGF0YS5p
c0VtcHR5KCkpOwotICAgIGJvZHlEYXRhLmFwcGVuZChwb3N0QnVmZmVyLCBwb3N0QnVmZmVyU2l6
ZSk7Ci0KLSAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgbWFr
ZVVSTFN0cmluZyhjb25zdCBjaGFyKiB1cmwpCi17Ci0gICAgU3RyaW5nIHVybFN0cmluZyh1cmwp
OwotICAgIAotICAgIC8vIFN0cmlwIHJldHVybiBjaGFyYWN0ZXJzLgotICAgIHVybFN0cmluZy5y
ZXBsYWNlV2l0aExpdGVyYWwoJ1xyJywgIiIpOwotICAgIHVybFN0cmluZy5yZXBsYWNlV2l0aExp
dGVyYWwoJ1xuJywgIiIpOwotCi0gICAgcmV0dXJuIHVybFN0cmluZzsKLX0KLQotc3RhdGljIE5Q
RXJyb3IgTlBOX0dldFVSTChOUFAgbnBwLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRh
cmdldCkKLXsKLSAgICBpZiAoIXVybCkKLSAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJS
T1I7Ci0gICAgCi0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBs
dWdpbjo6ZnJvbU5QUChucHApOwotICAgIHBsdWdpbi0+bG9hZFVSTCgiR0VUIiwgbWFrZVVSTFN0
cmluZyh1cmwpLCB0YXJnZXQsIEhUVFBIZWFkZXJNYXAoKSwgVmVjdG9yPHVpbnQ4X3Q+KCksIGZh
bHNlLCAwKTsKLSAgICAKLSAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLX0KLQotc3Rh
dGljIE5QRXJyb3IgTlBOX1Bvc3RVUkwoTlBQIG5wcCwgY29uc3QgY2hhciogdXJsLCBjb25zdCBj
aGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSkK
LXsKLSAgICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxkczsKLSAgICBWZWN0b3I8dWludDhfdD4g
cG9zdERhdGE7Ci0gICAgCi0gICAgLy8gTlBOX1Bvc3RVUkwgb25seSBhbGxvd3MgaGVhZGVycyBp
ZiB0aGUgcG9zdCBidWZmZXIgcG9pbnRzIHRvIGEgZmlsZS4KLSAgICBib29sIHBhcnNlSGVhZGVy
cyA9IGZpbGU7Ci0KLSAgICBOUEVycm9yIGVycm9yID0gcGFyc2VQb3N0QnVmZmVyKGZpbGUsIGJ1
ZiwgbGVuLCBwYXJzZUhlYWRlcnMsIGhlYWRlckZpZWxkcywgcG9zdERhdGEpOwotICAgIGlmIChl
cnJvciAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgcmV0dXJuIGVycm9yOwotCi0gICAgUmVm
UHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHAp
OwotICAgIHBsdWdpbi0+bG9hZFVSTCgiUE9TVCIsIG1ha2VVUkxTdHJpbmcodXJsKSwgdGFyZ2V0
LCBXVEZNb3ZlKGhlYWRlckZpZWxkcyksIHBvc3REYXRhLCBmYWxzZSwgMCk7Ci0gICAgcmV0dXJu
IE5QRVJSX05PX0VSUk9SOwotfQotCi1zdGF0aWMgTlBFcnJvciBOUE5fUmVxdWVzdFJlYWQoTlBT
dHJlYW0qLCBOUEJ5dGVSYW5nZSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLX0KLQotc3RhdGljIE5QRXJyb3IgTlBOX05ld1N0cmVh
bShOUFAsIE5QTUlNRVR5cGUsIGNvbnN0IGNoYXIqLCBOUFN0cmVhbSoqKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci19Ci0gICAgCi1z
dGF0aWMgaW50MzJfdCBOUE5fV3JpdGUoTlBQLCBOUFN0cmVhbSosIGludDMyX3QsIHZvaWQqKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7ICAgIAotICAgIHJldHVybiAtMTsKLX0KLSAgICAKLXN0
YXRpYyBOUEVycm9yIE5QTl9EZXN0cm95U3RyZWFtKE5QUCBucHAsIE5QU3RyZWFtKiBzdHJlYW0s
IE5QUmVhc29uIHJlYXNvbikKLXsKLSAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9
IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0gICAgCi0gICAgcmV0dXJuIHBsdWdpbi0+
ZGVzdHJveVN0cmVhbShzdHJlYW0sIHJlYXNvbik7Ci19Ci0KLXN0YXRpYyB2b2lkIE5QTl9TdGF0
dXMoTlBQIG5wcCwgY29uc3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBTdHJpbmcgc3RhdHVzYmFy
VGV4dDsKLSAgICBpZiAoIW1lc3NhZ2UpCi0gICAgICAgIHN0YXR1c2JhclRleHQgPSBlbXB0eVN0
cmluZygpOwotICAgIGVsc2UKLSAgICAgICAgc3RhdHVzYmFyVGV4dCA9IFN0cmluZzo6ZnJvbVVU
RjhXaXRoTGF0aW4xRmFsbGJhY2sobWVzc2FnZSwgc3RybGVuKG1lc3NhZ2UpKTsKLQotICAgIFJl
ZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBw
KTsKLSAgICBwbHVnaW4tPnNldFN0YXR1c2JhclRleHQoc3RhdHVzYmFyVGV4dCk7Ci19Ci0gICAg
Ci1zdGF0aWMgY29uc3QgY2hhciogTlBOX1VzZXJBZ2VudChOUFAgbnBwKQotewotICAgIHJldHVy
biBOZXRzY2FwZVBsdWdpbjo6dXNlckFnZW50KG5wcCk7Ci19Ci0KLXN0YXRpYyB2b2lkKiBOUE5f
TWVtQWxsb2ModWludDMyX3Qgc2l6ZSkKLXsKLSAgICByZXR1cm4gbnBuTWVtQWxsb2Moc2l6ZSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIE5QTl9NZW1GcmVlKHZvaWQqIHB0cikKLXsKLSAgICBucG5NZW1G
cmVlKHB0cik7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdCBOUE5fTWVtRmx1c2godWludDMyX3QpCi17
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIE5QTl9SZWxvYWRQbHVnaW5zKE5QQm9v
bCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1zdGF0aWMgSlJJRW52KiBOUE5fR2V0
SmF2YUVudih2b2lkKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLXN0YXRpYyBqcmVmIE5QTl9HZXRKYXZhUGVlcihOUFApCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIE5QRXJyb3IgTlBOX0dldFVSTE5vdGlm
eShOUFAgbnBwLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90
aWZ5RGF0YSkKLXsKLSAgICBpZiAoIXVybCkKLSAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNf
RVJST1I7Ci0KLSAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1
Z2luOjpmcm9tTlBQKG5wcCk7Ci0gICAgcGx1Z2luLT5sb2FkVVJMKCJHRVQiLCBtYWtlVVJMU3Ry
aW5nKHVybCksIHRhcmdldCwgSFRUUEhlYWRlck1hcCgpLCBWZWN0b3I8dWludDhfdD4oKSwgdHJ1
ZSwgbm90aWZ5RGF0YSk7Ci0gICAgCi0gICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotfQotCi1z
dGF0aWMgTlBFcnJvciBOUE5fUG9zdFVSTE5vdGlmeShOUFAgbnBwLCBjb25zdCBjaGFyKiB1cmws
IGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9v
bCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKQotewotICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmll
bGRzOwotICAgIFZlY3Rvcjx1aW50OF90PiBwb3N0RGF0YTsKLSAgICBOUEVycm9yIGVycm9yID0g
cGFyc2VQb3N0QnVmZmVyKGZpbGUsIGJ1ZiwgbGVuLCB0cnVlLCBoZWFkZXJGaWVsZHMsIHBvc3RE
YXRhKTsKLSAgICBpZiAoZXJyb3IgIT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAgIHJldHVybiBl
cnJvcjsKLQotICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVn
aW46OmZyb21OUFAobnBwKTsKLSAgICBwbHVnaW4tPmxvYWRVUkwoIlBPU1QiLCBtYWtlVVJMU3Ry
aW5nKHVybCksIHRhcmdldCwgaGVhZGVyRmllbGRzLCBwb3N0RGF0YSwgdHJ1ZSwgbm90aWZ5RGF0
YSk7Ci0gICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotfQotCi0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci0vLyBXaGV0aGVyIHRoZSBicm93c2VyIHN1cHBvcnRzIGNvbXBvc2l0aW5nIG9mIENvcmUgQW5p
bWF0aW9uIHBsdWctaW5zLgotc3RhdGljIGNvbnN0IHVuc2lnbmVkIFdLTlZTdXBwb3J0c0NvbXBv
c2l0aW5nQ29yZUFuaW1hdGlvblBsdWdpbnNCb29sID0gNzQ2NTY7Ci0KLS8vIFdoZXRoZXIgdGhl
IGJyb3dzZXIgZXhwZWN0cyBhIG5vbi1yZXRhaW5lZCBDb3JlIEFuaW1hdGlvbiBsYXllci4KLXN0
YXRpYyBjb25zdCB1bnNpZ25lZCBXS05WRXhwZWN0c05vbnJldGFpbmVkTGF5ZXIgPSA3NDY1NzsK
LQotLy8gNzQ2NTggYW5kIDc0NjU5IGFyZSBubyBsb25nZXIgaW1wbGVtZW50ZWQuCi0KLSNlbmRp
ZgotCi1zdGF0aWMgTlBFcnJvciBOUE5fR2V0VmFsdWUoTlBQIG5wcCwgTlBOVmFyaWFibGUgdmFy
aWFibGUsIHZvaWQgKnZhbHVlKQotewotICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHZhcmlhYmxlKSkgewotICAgICAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogewotICAgICAg
ICAgICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJv
bU5QUChucHApOwotICAgICAgICAgICAgUGx1Z2luRGVzdHJ1Y3Rpb25Qcm90ZWN0b3IgcHJvdGVj
dG9yKHBsdWdpbi5nZXQoKSk7Ci0KLSAgICAgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dOUE9iamVj
dCA9IHBsdWdpbi0+d2luZG93U2NyaXB0TlBPYmplY3QoKTsKLSAgICAgICAgICAgIGlmICghd2lu
ZG93TlBPYmplY3QpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7
Ci0KLSAgICAgICAgICAgICooTlBPYmplY3QqKil2YWx1ZSA9IHdpbmRvd05QT2JqZWN0OwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBOUE5WUGx1Z2luRWxlbWVu
dE5QT2JqZWN0OiB7Ci0gICAgICAgICAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9
IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0gICAgICAgICAgICBQbHVnaW5EZXN0cnVj
dGlvblByb3RlY3RvciBwcm90ZWN0b3IocGx1Z2luLmdldCgpKTsKLQotICAgICAgICAgICAgTlBP
YmplY3QqIHBsdWdpbkVsZW1lbnROUE9iamVjdCA9IHBsdWdpbi0+cGx1Z2luRWxlbWVudE5QT2Jq
ZWN0KCk7Ci0gICAgICAgICAgICAqKE5QT2JqZWN0KiopdmFsdWUgPSBwbHVnaW5FbGVtZW50TlBP
YmplY3Q7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIE5QTlZw
cml2YXRlTW9kZUJvb2w6IHsKLSAgICAgICAgICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1
Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsKLQotICAgICAgICAgICAgKihOUEJv
b2wqKXZhbHVlID0gcGx1Z2luLT5pc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBOUE5WbXV0ZUF1ZGlvQm9vbDog
ewotICAgICAgICAgICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBs
dWdpbjo6ZnJvbU5QUChucHApOwotICAgICAgICAgICAgKihOUEJvb2wqKXZhbHVlID0gcGx1Z2lu
LT5pc011dGVkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotI2lmIFBMQVRGT1JN
KENPQ09BKQotICAgICAgICBjYXNlIE5QTlZzdXBwb3J0c0NvcmVHcmFwaGljc0Jvb2w6Ci0gICAg
ICAgICAgICAvLyBBbHdheXMgY2xhaW0gdG8gc3VwcG9ydCB0aGUgQ29yZSBHcmFwaGljcyBkcmF3
aW5nIG1vZGVsLgotICAgICAgICAgICAgKihOUEJvb2wqKXZhbHVlID0gdHJ1ZTsKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgV0tOVlN1cHBvcnRzQ29tcG9zaXRpbmdDb3JlQW5p
bWF0aW9uUGx1Z2luc0Jvb2w6Ci0gICAgICAgIGNhc2UgTlBOVnN1cHBvcnRzQ29yZUFuaW1hdGlv
bkJvb2w6IHsKLSAgICAgICAgICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0
c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgKihO
UEJvb2wqKXZhbHVlID0gcGx1Z2luLT5pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIE5QTlZjb250ZW50
c1NjYWxlRmFjdG9yOiB7Ci0gICAgICAgICAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdp
biA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0KLSAgICAgICAgICAgICooZG91Ymxl
Kil2YWx1ZSA9IHBsdWdpbi0+Y29udGVudHNTY2FsZUZhY3RvcigpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBOUE5Wc3VwcG9ydHNDb2NvYUJvb2w6Ci0gICAg
ICAgICAgICAvLyBBbHdheXMgY2xhaW0gdG8gc3VwcG9ydCB0aGUgQ29jb2EgZXZlbnQgbW9kZWwu
Ci0gICAgICAgICAgICAqKE5QQm9vbCopdmFsdWUgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSBOUE5Wc3VwcG9ydHNVcGRhdGVkQ29jb2FUZXh0SW5wdXRCb29sOiB7
Ci0gICAgICAgICAgICAvLyBUaGUgcGx1Zy1pbiBpcyBhc2tpbmcgd2hldGhlciB3ZSBzdXBwb3J0
IHRoZSB1cGRhdGVkIENvY29hIHRleHQgaW5wdXQgbW9kZWwuCi0gICAgICAgICAgICAvLyBJZiB3
ZSBoYXZlbid0IHlldCBkZWxpdmVyZWQgYSBrZXkgZG93biBldmVudCB0byB0aGUgcGx1Zy1pbiwg
d2UgY2FuIG9wdCBpbnRvIHRoZSB1cGRhdGVkCi0gICAgICAgICAgICAvLyBtb2RlbCBhbmQgc2F5
IHRoYXQgd2Ugc3VwcG9ydCBpdC4gT3RoZXJ3aXNlLCB3ZSdsbCBqdXN0IGZhbGwgYmFjayBhbmQg
c2F5IHRoYXQgd2UgZG9uJ3Qgc3VwcG9ydCBpdC4KLSAgICAgICAgICAgIFJlZlB0cjxOZXRzY2Fw
ZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsKLQotICAgICAg
ICAgICAgYm9vbCBzdXBwb3J0c1VwZGF0ZWRUZXh0SW5wdXQgPSAhcGx1Z2luLT5oYXNIYW5kbGVk
QUtleURvd25FdmVudCgpOwotICAgICAgICAgICAgaWYgKHN1cHBvcnRzVXBkYXRlZFRleHRJbnB1
dCkKLSAgICAgICAgICAgICAgICBwbHVnaW4tPnNldFBsdWdpbldhbnRzTGVnYWN5Q29jb2FUZXh0
SW5wdXQoZmFsc2UpOwotCi0gICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxOUEJvb2wqPih2
YWx1ZSkgPSBzdXBwb3J0c1VwZGF0ZWRUZXh0SW5wdXQ7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIGNhc2UgV0tOVkNBTGF5ZXJSZW5kZXJTZXJ2ZXJQb3J0OiB7Ci0g
ICAgICAgICAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2lu
Ojpmcm9tTlBQKG5wcCk7Ci0KLSAgICAgICAgICAgICoobWFjaF9wb3J0X3QqKXZhbHVlID0gcGx1
Z2luLT5jb21wb3NpdGluZ1JlbmRlclNlcnZlclBvcnQoKS5zZW5kUmlnaHQoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBXS05WRXhwZWN0c05vbnJldGFp
bmVkTGF5ZXI6IHsKLSAgICAgICAgICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0g
TmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsKLQotICAgICAgICAgICAgLy8gQXNraW5nIGZv
ciB0aGlzIHdpbGwgbWFrZSB1cyBleHBlY3QgYSBub24tcmV0YWluZWQgbGF5ZXIgZnJvbSB0aGUg
cGx1Zy1pbi4KLSAgICAgICAgICAgIHBsdWdpbi0+c2V0UGx1Z2luUmV0dXJuc05vbnJldGFpbmVk
TGF5ZXIodHJ1ZSk7Ci0gICAgICAgICAgICAqKE5QQm9vbCopdmFsdWUgPSB0cnVlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSNlbGlmIFBMQVRGT1JNKFgxMSkKLSAgICAgICAgY2Fz
ZSBOUE5WeERpc3BsYXk6IHsKLSAgICAgICAgICAgIGlmICghbnBwKQotICAgICAgICAgICAgICAg
IHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgICAgICAgICAgYXV0byYgZGlzcGxheSA9
IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheSgpOwotICAgICAgICAgICAgaWYgKGRpc3Bs
YXkudHlwZSgpICE9IFBsYXRmb3JtRGlzcGxheTo6VHlwZTo6WDExKQotICAgICAgICAgICAgICAg
IHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nh
c3Q8RGlzcGxheSoqPih2YWx1ZSkgPSBkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KGRpc3Bs
YXkpLm5hdGl2ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOgotICAgICAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9v
bCo+KHZhbHVlKSA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheSgpLnR5cGUoKSA9PSBQ
bGF0Zm9ybURpc3BsYXk6OlR5cGU6OlgxMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIE5QTlZTdXBwb3J0c1dpbmRvd2xlc3M6Ci0gICAgICAgICAgICAqc3RhdGljX2Nhc3Q8TlBC
b29sKj4odmFsdWUpID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgY2FzZSBO
UE5WVG9vbGtpdDogewotICAgICAgICAgICAvLyBHdGsgYmFzZWQgcGx1Z2lucyBuZWVkIHRvIGJl
IGFzc3VyZWQgYWJvdXQgdGhlIHRvb2xraXQgdmVyc2lvbi4KLSAgICAgICAgICAgY29uc3QgdWlu
dDMyX3QgZXhwZWN0ZWRHdGtUb29sS2l0VmVyc2lvbiA9IDI7Ci0gICAgICAgICAgICpyZWludGVy
cHJldF9jYXN0PHVpbnQzMl90Kj4odmFsdWUpID0gZXhwZWN0ZWRHdGtUb29sS2l0VmVyc2lvbjsK
LSAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgfQotCi0gICAgICAgLy8gVE9ETzogaW1wbGVtZW50
IE5QTlZuZXRzY2FwZVdpbmRvdyBvbmNlIHdlIHdhbnQgdG8gc3VwcG9ydCB3aW5kb3dlZCBwbHVn
aW5zLgotI2VuZGlmCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotfQotCi1zdGF0aWMgTlBFcnJvciBOUE5fU2V0VmFs
dWUoTlBQIG5wcCwgTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnZhbHVlKQotewotICAgIHN3
aXRjaCAodmFyaWFibGUpIHsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICAgICAgY2FzZSBOUFBW
cGx1Z2luRHJhd2luZ01vZGVsOiB7Ci0gICAgICAgICAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+
IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIE5QRHJhd2luZ01vZGVsIGRyYXdpbmdNb2RlbCA9IHN0YXRpY19jYXN0PE5QRHJh
d2luZ01vZGVsPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odmFsdWUpKTsKLSAgICAgICAg
ICAgIHJldHVybiBwbHVnaW4tPnNldERyYXdpbmdNb2RlbChkcmF3aW5nTW9kZWwpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgY2FzZSBOUFBWcGx1Z2luRXZlbnRNb2RlbDogewotICAgICAgICAgICAg
UmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChu
cHApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBOUEV2ZW50TW9kZWwgZXZlbnRNb2RlbCA9
IHN0YXRpY19jYXN0PE5QRXZlbnRNb2RlbD4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHZh
bHVlKSk7Ci0gICAgICAgICAgICByZXR1cm4gcGx1Z2luLT5zZXRFdmVudE1vZGVsKGV2ZW50TW9k
ZWwpOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBjYXNlIE5QUFZwbHVnaW5XaW5kb3dC
b29sOiB7Ci0gICAgICAgICAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNj
YXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0gICAgICAgICAgICBwbHVnaW4tPnNldElzV2luZG93
ZWQodmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAgICAgICB9
Ci0KLSAgICAgICAgY2FzZSBOUFBWcGx1Z2luVHJhbnNwYXJlbnRCb29sOiB7Ci0gICAgICAgICAg
ICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQ
KG5wcCk7Ci0gICAgICAgICAgICBwbHVnaW4tPnNldElzVHJhbnNwYXJlbnQodmFsdWUpOwotICAg
ICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgY2Fz
ZSBOUFBWcGx1Z2luSXNQbGF5aW5nQXVkaW86IHsKLSAgICAgICAgICAgIFJlZlB0cjxOZXRzY2Fw
ZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsKLSAgICAgICAg
ICAgIHBsdWdpbi0+c2V0SXNQbGF5aW5nQXVkaW8odmFsdWUpOwotICAgICAgICAgICAgcmV0dXJu
IE5QRVJSX05PX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19F
UlJPUjsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIE5QTl9JbnZhbGlkYXRlUmVjdChOUFAgbnBw
LCBOUFJlY3QqIGludmFsaWRSZWN0KQotewotI2lmIFBMVUdJTl9BUkNISVRFQ1RVUkUoVU5JWCkK
LSAgICAvLyBOU1BsdWdpbldyYXBwZXIsIGEgcGx1Z2luIHdyYXBwZXIgYmluYXJ5IHRoYXQgYWxs
b3dzIHJ1bm5pbmcgMzItYml0IHBsdWdpbnMKLSAgICAvLyBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJl
cyB0eXBpY2FsbHkgdXNlZCBpbiBYMTEsIHdpbGwgc29tZXRpbWVzIGdpdmUgdXMgYSBudWxsIE5Q
UCBoZXJlLgotICAgIGlmICghbnBwKQotICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICBSZWZQ
dHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7
Ci0gICAgcGx1Z2luLT5pbnZhbGlkYXRlKGludmFsaWRSZWN0KTsKLX0KLQotc3RhdGljIHZvaWQg
TlBOX0ludmFsaWRhdGVSZWdpb24oTlBQIG5wcCwgTlBSZWdpb24pCi17Ci0gICAgLy8gRklYTUU6
IFdlIGNvdWxkIGF0IGxlYXN0IGZpZ3VyZSBvdXQgdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSBvZiB0
aGUgaW52YWxpZCByZWdpb24uCi0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBO
ZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotICAgIHBsdWdpbi0+aW52YWxpZGF0ZSgwKTsK
LX0KLQotc3RhdGljIHZvaWQgTlBOX0ZvcmNlUmVkcmF3KE5QUCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi1zdGF0aWMgTlBJZGVudGlmaWVyIE5QTl9HZXRTdHJpbmdJZGVudGlmaWVy
KGNvbnN0IE5QVVRGOCAqbmFtZSkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlBJZGVudGlm
aWVyPihJZGVudGlmaWVyUmVwOjpnZXQobmFtZSkpOwotfQotICAgIAotc3RhdGljIHZvaWQgTlBO
X0dldFN0cmluZ0lkZW50aWZpZXJzKGNvbnN0IE5QVVRGOCAqKm5hbWVzLCBpbnQzMl90IG5hbWVD
b3VudCwgTlBJZGVudGlmaWVyICppZGVudGlmaWVycykKLXsKLSAgICBBU1NFUlQobmFtZXMpOwot
ICAgIEFTU0VSVChpZGVudGlmaWVycyk7Ci0KLSAgICBpZiAoIW5hbWVzIHx8ICFpZGVudGlmaWVy
cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbmFtZUNv
dW50OyArK2kpCi0gICAgICAgIGlkZW50aWZpZXJzW2ldID0gTlBOX0dldFN0cmluZ0lkZW50aWZp
ZXIobmFtZXNbaV0pOwotfQotCi1zdGF0aWMgTlBJZGVudGlmaWVyIE5QTl9HZXRJbnRJZGVudGlm
aWVyKGludDMyX3QgaW50aWQpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PE5QSWRlbnRpZmll
cj4oSWRlbnRpZmllclJlcDo6Z2V0KGludGlkKSk7Ci19Ci0KLXN0YXRpYyBib29sIE5QTl9JZGVu
dGlmaWVySXNTdHJpbmcoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIpCi17Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihpZGVudGlmaWVyKS0+aXNTdHJpbmcoKTsKLX0KLQot
c3RhdGljIE5QVVRGOCAqTlBOX1VURjhGcm9tSWRlbnRpZmllcihOUElkZW50aWZpZXIgaWRlbnRp
ZmllcikKLXsKLSAgICBjb25zdCBjaGFyKiBzdHJpbmcgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVy
UmVwKj4oaWRlbnRpZmllciktPnN0cmluZygpOwotICAgIGlmICghc3RyaW5nKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIHVpbnQzMl90IHN0cmluZ0xlbmd0aCA9IHN0cmxlbihzdHJpbmcpOwot
ICAgIGNoYXIqIHV0ZjhTdHJpbmcgPSBucG5NZW1OZXdBcnJheTxjaGFyPihzdHJpbmdMZW5ndGgg
KyAxKTsKLSAgICBtZW1jcHkodXRmOFN0cmluZywgc3RyaW5nLCBzdHJpbmdMZW5ndGgpOwotICAg
IHV0ZjhTdHJpbmdbc3RyaW5nTGVuZ3RoXSA9ICdcMCc7Ci0gICAgCi0gICAgcmV0dXJuIHV0ZjhT
dHJpbmc7Ci19Ci0KLXN0YXRpYyBpbnQzMl90IE5QTl9JbnRGcm9tSWRlbnRpZmllcihOUElkZW50
aWZpZXIgaWRlbnRpZmllcikKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJl
cCo+KGlkZW50aWZpZXIpLT5udW1iZXIoKTsKLX0KLQotc3RhdGljIE5QT2JqZWN0KiBOUE5fQ3Jl
YXRlT2JqZWN0KE5QUCBucHAsIE5QQ2xhc3MgKm5wQ2xhc3MpCi17Ci0gICAgcmV0dXJuIGNyZWF0
ZU5QT2JqZWN0KG5wcCwgbnBDbGFzcyk7Ci19Ci0KLXN0YXRpYyBOUE9iamVjdCAqTlBOX1JldGFp
bk9iamVjdChOUE9iamVjdCAqbnBPYmplY3QpCi17Ci0gICAgcmV0YWluTlBPYmplY3QobnBPYmpl
Y3QpOwotICAgIHJldHVybiBucE9iamVjdDsKLX0KLQotc3RhdGljIHZvaWQgTlBOX1JlbGVhc2VP
YmplY3QoTlBPYmplY3QgKm5wT2JqZWN0KQotewotICAgIHJlbGVhc2VOUE9iamVjdChucE9iamVj
dCk7Ci19Ci0KLXN0YXRpYyBib29sIE5QTl9JbnZva2UoTlBQIG5wcCwgTlBPYmplY3QgKm5wT2Jq
ZWN0LCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSwgY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMs
IHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KQotewotICAgIFJlZlB0
cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsK
LSAgICBQbHVnaW5EZXN0cnVjdGlvblByb3RlY3RvciBwcm90ZWN0b3IocGx1Z2luLmdldCgpKTsK
LQotICAgIGlmIChucE9iamVjdC0+X2NsYXNzLT5pbnZva2UpCi0gICAgICAgIHJldHVybiBucE9i
amVjdC0+X2NsYXNzLT5pbnZva2UobnBPYmplY3QsIG1ldGhvZE5hbWUsIGFyZ3VtZW50cywgYXJn
dW1lbnRDb3VudCwgcmVzdWx0KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJv
b2wgTlBOX0ludm9rZURlZmF1bHQoTlBQIG5wcCwgTlBPYmplY3QgKm5wT2JqZWN0LCBjb25zdCBO
UFZhcmlhbnQqIGFyZ3VtZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBs
dWdpbjo6ZnJvbU5QUChucHApOwotICAgIFBsdWdpbkRlc3RydWN0aW9uUHJvdGVjdG9yIHByb3Rl
Y3RvcihwbHVnaW4uZ2V0KCkpOwotCi0gICAgaWYgKG5wT2JqZWN0LT5fY2xhc3MtPmludm9rZURl
ZmF1bHQpCi0gICAgICAgIHJldHVybiBucE9iamVjdC0+X2NsYXNzLT5pbnZva2VEZWZhdWx0KG5w
T2JqZWN0LCBhcmd1bWVudHMsIGFyZ3VtZW50Q291bnQsIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIE5QTl9FdmFsdWF0ZShOUFAgbnBwLCBOUE9iamVjdCAq
bnBPYmplY3QsIE5QU3RyaW5nICpzY3JpcHQsIE5QVmFyaWFudCogcmVzdWx0KQotewotICAgIFJl
ZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBw
KTsKLSAgICBQbHVnaW5EZXN0cnVjdGlvblByb3RlY3RvciBwcm90ZWN0b3IocGx1Z2luLmdldCgp
KTsKLSAgICAKLSAgICBTdHJpbmcgc2NyaXB0U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOFdpdGhM
YXRpbjFGYWxsYmFjayhzY3JpcHQtPlVURjhDaGFyYWN0ZXJzLCBzY3JpcHQtPlVURjhMZW5ndGgp
OwotICAgIAotICAgIHJldHVybiBwbHVnaW4tPmV2YWx1YXRlKG5wT2JqZWN0LCBzY3JpcHRTdHJp
bmcsIHJlc3VsdCk7Ci19Ci0KLXN0YXRpYyBib29sIE5QTl9HZXRQcm9wZXJ0eShOUFAgbnBwLCBO
UE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIE5QVmFyaWFudCog
cmVzdWx0KQotewotICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQ
bHVnaW46OmZyb21OUFAobnBwKTsKLSAgICBQbHVnaW5EZXN0cnVjdGlvblByb3RlY3RvciBwcm90
ZWN0b3IocGx1Z2luLmdldCgpKTsKLSAgICAKLSAgICBpZiAobnBPYmplY3QtPl9jbGFzcy0+Z2V0
UHJvcGVydHkpCi0gICAgICAgIHJldHVybiBucE9iamVjdC0+X2NsYXNzLT5nZXRQcm9wZXJ0eShu
cE9iamVjdCwgcHJvcGVydHlOYW1lLCByZXN1bHQpOwotICAgIAotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotc3RhdGljIGJvb2wgTlBOX1NldFByb3BlcnR5KE5QUCBucHAsIE5QT2JqZWN0KiBucE9i
amVjdCwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgTlBWYXJpYW50KiB2YWx1ZSkK
LXsKLSAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpm
cm9tTlBQKG5wcCk7Ci0gICAgUGx1Z2luRGVzdHJ1Y3Rpb25Qcm90ZWN0b3IgcHJvdGVjdG9yKHBs
dWdpbi5nZXQoKSk7Ci0gICAgCi0gICAgaWYgKG5wT2JqZWN0LT5fY2xhc3MtPnNldFByb3BlcnR5
KQotICAgICAgICByZXR1cm4gbnBPYmplY3QtPl9jbGFzcy0+c2V0UHJvcGVydHkobnBPYmplY3Qs
IHByb3BlcnR5TmFtZSwgdmFsdWUpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMg
Ym9vbCBOUE5fUmVtb3ZlUHJvcGVydHkoTlBQIG5wcCwgTlBPYmplY3QqIG5wT2JqZWN0LCBOUElk
ZW50aWZpZXIgcHJvcGVydHlOYW1lKQotewotICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1
Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsKLSAgICBQbHVnaW5EZXN0cnVjdGlv
blByb3RlY3RvciBwcm90ZWN0b3IocGx1Z2luLmdldCgpKTsKLSAgICAKLSAgICBpZiAobnBPYmpl
Y3QtPl9jbGFzcy0+cmVtb3ZlUHJvcGVydHkpCi0gICAgICAgIHJldHVybiBucE9iamVjdC0+X2Ns
YXNzLT5yZW1vdmVQcm9wZXJ0eShucE9iamVjdCwgcHJvcGVydHlOYW1lKTsKLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wgTlBOX0hhc1Byb3BlcnR5KE5QUCBucHAsIE5QT2Jq
ZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKLXsKLSAgICBSZWZQdHI8
TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0g
ICAgUGx1Z2luRGVzdHJ1Y3Rpb25Qcm90ZWN0b3IgcHJvdGVjdG9yKHBsdWdpbi5nZXQoKSk7Ci0g
ICAgCi0gICAgaWYgKG5wT2JqZWN0LT5fY2xhc3MtPmhhc1Byb3BlcnR5KQotICAgICAgICByZXR1
cm4gbnBPYmplY3QtPl9jbGFzcy0+aGFzUHJvcGVydHkobnBPYmplY3QsIHByb3BlcnR5TmFtZSk7
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIE5QTl9IYXNNZXRob2QoTlBQ
IG5wcCwgTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSkKLXsKLSAg
ICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQ
KG5wcCk7Ci0gICAgUGx1Z2luRGVzdHJ1Y3Rpb25Qcm90ZWN0b3IgcHJvdGVjdG9yKHBsdWdpbi5n
ZXQoKSk7Ci0gICAgCi0gICAgaWYgKG5wT2JqZWN0LT5fY2xhc3MtPmhhc01ldGhvZCkKLSAgICAg
ICAgcmV0dXJuIG5wT2JqZWN0LT5fY2xhc3MtPmhhc01ldGhvZChucE9iamVjdCwgbWV0aG9kTmFt
ZSk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkIE5QTl9SZWxlYXNlVmFy
aWFudFZhbHVlKE5QVmFyaWFudCogdmFyaWFudCkKLXsKLSAgICByZWxlYXNlTlBWYXJpYW50VmFs
dWUodmFyaWFudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIE5QTl9TZXRFeGNlcHRpb24oTlBPYmplY3Qq
LCBjb25zdCBOUFVURjgqIG1lc3NhZ2UpCi17Ci0gICAgTmV0c2NhcGVQbHVnaW46OnNldEV4Y2Vw
dGlvbihtZXNzYWdlKTsKLX0KLQotc3RhdGljIHZvaWQgTlBOX1B1c2hQb3B1cHNFbmFibGVkU3Rh
dGUoTlBQIG5wcCwgTlBCb29sIGVuYWJsZWQpCi17Ci0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2lu
PiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotICAgIHBsdWdpbi0+cHVz
aFBvcHVwc0VuYWJsZWRTdGF0ZShlbmFibGVkKTsKLX0KLSAgICAKLXN0YXRpYyB2b2lkIE5QTl9Q
b3BQb3B1cHNFbmFibGVkU3RhdGUoTlBQIG5wcCkKLXsKLSAgICBSZWZQdHI8TmV0c2NhcGVQbHVn
aW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0gICAgcGx1Z2luLT5w
b3BQb3B1cHNFbmFibGVkU3RhdGUoKTsKLX0KLSAgICAKLXN0YXRpYyBib29sIE5QTl9FbnVtZXJh
dGUoTlBQIG5wcCwgTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIqKiBpZGVudGlmaWVy
cywgdWludDMyX3QqIGlkZW50aWZpZXJDb3VudCkKLXsKLSAgICBSZWZQdHI8TmV0c2NhcGVQbHVn
aW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0gICAgUGx1Z2luRGVz
dHJ1Y3Rpb25Qcm90ZWN0b3IgcHJvdGVjdG9yKHBsdWdpbi5nZXQoKSk7Ci0gICAgCi0gICAgaWYg
KE5QX0NMQVNTX1NUUlVDVF9WRVJTSU9OX0hBU19FTlVNKG5wT2JqZWN0LT5fY2xhc3MpICYmIG5w
T2JqZWN0LT5fY2xhc3MtPmVudW1lcmF0ZSkKLSAgICAgICAgcmV0dXJuIG5wT2JqZWN0LT5fY2xh
c3MtPmVudW1lcmF0ZShucE9iamVjdCwgaWRlbnRpZmllcnMsIGlkZW50aWZpZXJDb3VudCk7Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkIE5QTl9QbHVnaW5UaHJlYWRBc3lu
Y0NhbGwoTlBQIG5wcCwgdm9pZCAoKmZ1bmN0aW9uKSh2b2lkKiksIHZvaWQqIHVzZXJEYXRhKQot
ewotICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZy
b21OUFAobnBwKTsKLQotICAgIHBsdWdpbi0+cGx1Z2luVGhyZWFkQXN5bmNDYWxsKGZ1bmN0aW9u
LCB1c2VyRGF0YSk7Ci19Ci0KLXN0YXRpYyBib29sIE5QTl9Db25zdHJ1Y3QoTlBQIG5wcCwgTlBP
YmplY3QqIG5wT2JqZWN0LCBjb25zdCBOUFZhcmlhbnQqIGFyZ3VtZW50cywgdWludDMyX3QgYXJn
dW1lbnRDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgUmVmUHRyPE5ldHNjYXBlUGx1
Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotICAgIFBsdWdpbkRl
c3RydWN0aW9uUHJvdGVjdG9yIHByb3RlY3RvcihwbHVnaW4uZ2V0KCkpOwotICAgIAotICAgIGlm
IChOUF9DTEFTU19TVFJVQ1RfVkVSU0lPTl9IQVNfQ1RPUihucE9iamVjdC0+X2NsYXNzKSAmJiBu
cE9iamVjdC0+X2NsYXNzLT5jb25zdHJ1Y3QpCi0gICAgICAgIHJldHVybiBucE9iamVjdC0+X2Ns
YXNzLT5jb25zdHJ1Y3QobnBPYmplY3QsIGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwgcmVzdWx0
KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIE5QRXJyb3IgY29weUNTdHJpbmco
Y29uc3QgQ1N0cmluZyYgc3RyaW5nLCBjaGFyKiogdmFsdWUsIHVpbnQzMl90KiBsZW4pCi17Ci0g
ICAgQVNTRVJUKCFzdHJpbmcuaXNOdWxsKCkpOwotICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgQVNT
RVJUKGxlbik7Ci0KLSAgICAqdmFsdWUgPSBucG5NZW1OZXdBcnJheTxjaGFyPihzdHJpbmcubGVu
Z3RoKCkpOwotICAgIGlmICghKnZhbHVlKQotICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19F
UlJPUjsKLQotICAgIG1lbWNweSgqdmFsdWUsIHN0cmluZy5kYXRhKCksIHN0cmluZy5sZW5ndGgo
KSk7Ci0gICAgKmxlbiA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICByZXR1cm4gTlBFUlJfTk9fRVJS
T1I7Ci19Ci0KLXN0YXRpYyBOUEVycm9yIE5QTl9HZXRWYWx1ZUZvclVSTChOUFAgbnBwLCBOUE5V
UkxWYXJpYWJsZSB2YXJpYWJsZSwgY29uc3QgY2hhciogdXJsLCBjaGFyKiogdmFsdWUsIHVpbnQz
Ml90KiBsZW4pCi17Ci0gICAgaWYgKCF2YWx1ZSB8fCAhbGVuKQotICAgICAgICByZXR1cm4gTlBF
UlJfR0VORVJJQ19FUlJPUjsKLSAgICAKLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgICAg
IGNhc2UgTlBOVVJMVkNvb2tpZTogewotICAgICAgICAgICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2lu
PiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotICAgICAgICAgICAgUGx1
Z2luRGVzdHJ1Y3Rpb25Qcm90ZWN0b3IgcHJvdGVjdG9yKHBsdWdpbi5nZXQoKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIFN0cmluZyBjb29raWVzID0gcGx1Z2luLT5jb29raWVzRm9yVVJM
KG1ha2VVUkxTdHJpbmcodXJsKSk7Ci0gICAgICAgICAgICBpZiAoY29va2llcy5pc051bGwoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLQotICAgICAgICAg
ICAgcmV0dXJuIGNvcHlDU3RyaW5nKGNvb2tpZXMudXRmOCgpLCB2YWx1ZSwgbGVuKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGNhc2UgTlBOVVJMVlByb3h5OiB7Ci0gICAgICAgICAgICBSZWZQdHI8
TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0g
ICAgICAgICAgICBQbHVnaW5EZXN0cnVjdGlvblByb3RlY3RvciBwcm90ZWN0b3IocGx1Z2luLmdl
dCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgU3RyaW5nIHByb3hpZXMgPSBwbHVnaW4t
PnByb3hpZXNGb3JVUkwobWFrZVVSTFN0cmluZyh1cmwpKTsKLSAgICAgICAgICAgIGlmIChwcm94
aWVzLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9S
OwotCi0gICAgICAgICAgICByZXR1cm4gY29weUNTdHJpbmcocHJveGllcy51dGY4KCksIHZhbHVl
LCBsZW4pOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAg
fQotfQotCi1zdGF0aWMgTlBFcnJvciBOUE5fU2V0VmFsdWVGb3JVUkwoTlBQIG5wcCwgTlBOVVJM
VmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdmFsdWUsIHVp
bnQzMl90IGxlbikKLXsKLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgICAgIGNhc2UgTlBO
VVJMVkNvb2tpZTogewotICAgICAgICAgICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4g
PSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotICAgICAgICAgICAgUGx1Z2luRGVzdHJ1
Y3Rpb25Qcm90ZWN0b3IgcHJvdGVjdG9yKHBsdWdpbi5nZXQoKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHBsdWdpbi0+c2V0Q29va2llc0ZvclVSTChtYWtlVVJMU3RyaW5nKHVybCksIFN0
cmluZyh2YWx1ZSwgbGVuKSk7Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0g
ICAgICAgIH0KLQotICAgICAgICBjYXNlIE5QTlVSTFZQcm94eToKLSAgICAgICAgICAgIC8vIENh
bid0IHNldCB0aGUgcHJveHkgZm9yIGEgVVJMLgotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dF
TkVSSUNfRVJST1I7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICB9Ci19
Ci0KLXN0YXRpYyBib29sIGluaXRpYWxpemVQcm90ZWN0aW9uU3BhY2UoY29uc3QgY2hhciogcHJv
dG9jb2wsIGNvbnN0IGNoYXIqIGhvc3QsIGludCBwb3J0LCBjb25zdCBjaGFyKiBzY2hlbWUsIGNv
bnN0IGNoYXIqIHJlYWxtLCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSkKLXsKLSAg
ICBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJUeXBlIHNlcnZlclR5cGU7Ci0gICAgaWYgKGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHByb3RvY29sLCAiaHR0cCIpKQotICAgICAgICBzZXJ2ZXJU
eXBlID0gUHJvdGVjdGlvblNwYWNlU2VydmVySFRUUDsKLSAgICBlbHNlIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm90b2NvbCwgImh0dHBzIikpCi0gICAgICAgIHNlcnZlclR5
cGUgPSBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJIVFRQUzsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8g
V2Ugb25seSBjYXJlIGFib3V0IGh0dHAgYW5kIGh0dHBzLgotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWUgYXV0aGVu
dGljYXRpb25TY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZURlZmF1
bHQ7Ci0gICAgaWYgKHNlcnZlclR5cGUgPT0gUHJvdGVjdGlvblNwYWNlU2VydmVySFRUUCkgewot
ICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc2NoZW1lLCAiYmFzaWMi
KSkKLSAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uU2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0
aGVudGljYXRpb25TY2hlbWVIVFRQQmFzaWM7Ci0gICAgICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKHNjaGVtZSwgImRpZ2VzdCIpKQotICAgICAgICAgICAgYXV0aGVu
dGljYXRpb25TY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUVFBE
aWdlc3Q7Ci0gICAgfQotCi0gICAgcHJvdGVjdGlvblNwYWNlID0gUHJvdGVjdGlvblNwYWNlKGhv
c3QsIHBvcnQsIHNlcnZlclR5cGUsIHJlYWxtLCBhdXRoZW50aWNhdGlvblNjaGVtZSk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBOUEVycm9yIE5QTl9HZXRBdXRoZW50aWNhdGlvbklu
Zm8oTlBQIG5wcCwgY29uc3QgY2hhciogcHJvdG9jb2wsIGNvbnN0IGNoYXIqIGhvc3QsIGludDMy
X3QgcG9ydCwgY29uc3QgY2hhciogc2NoZW1lLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVhbG0sIGNoYXIqKiB1c2VybmFtZSwgdWludDMy
X3QqIHVzZXJuYW1lTGVuZ3RoLCBjaGFyKiogcGFzc3dvcmQsIHVpbnQzMl90KiBwYXNzd29yZExl
bmd0aCkKLXsKLSAgICBpZiAoIXByb3RvY29sIHx8ICFob3N0IHx8ICFzY2hlbWUgfHwgIXJlYWxt
IHx8ICF1c2VybmFtZSB8fCAhdXNlcm5hbWVMZW5ndGggfHwgIXBhc3N3b3JkIHx8ICFwYXNzd29y
ZExlbmd0aCkKLSAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAgICBQcm90
ZWN0aW9uU3BhY2UgcHJvdGVjdGlvblNwYWNlOwotICAgIGlmICghaW5pdGlhbGl6ZVByb3RlY3Rp
b25TcGFjZShwcm90b2NvbCwgaG9zdCwgcG9ydCwgc2NoZW1lLCByZWFsbSwgcHJvdGVjdGlvblNw
YWNlKSkKLSAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAgICBSZWZQdHI8
TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0g
ICAgU3RyaW5nIHVzZXJuYW1lU3RyaW5nOwotICAgIFN0cmluZyBwYXNzd29yZFN0cmluZzsKLSAg
ICBpZiAoIXBsdWdpbi0+Z2V0QXV0aGVudGljYXRpb25JbmZvKHByb3RlY3Rpb25TcGFjZSwgdXNl
cm5hbWVTdHJpbmcsIHBhc3N3b3JkU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVS
SUNfRVJST1I7Ci0KLSAgICBOUEVycm9yIHJlc3VsdCA9IGNvcHlDU3RyaW5nKHVzZXJuYW1lU3Ry
aW5nLnV0ZjgoKSwgdXNlcm5hbWUsIHVzZXJuYW1lTGVuZ3RoKTsKLSAgICBpZiAocmVzdWx0ICE9
IE5QRVJSX05PX0VSUk9SKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgcmVzdWx0ID0g
Y29weUNTdHJpbmcocGFzc3dvcmRTdHJpbmcudXRmOCgpLCBwYXNzd29yZCwgcGFzc3dvcmRMZW5n
dGgpOwotICAgIGlmIChyZXN1bHQgIT0gTlBFUlJfTk9fRVJST1IpIHsKLSAgICAgICAgbnBuTWVt
RnJlZSgqdXNlcm5hbWUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHJl
dHVybiBOUEVSUl9OT19FUlJPUjsKLX0KLQotc3RhdGljIHVpbnQzMl90IE5QTl9TY2hlZHVsZVRp
bWVyKE5QUCBucHAsIHVpbnQzMl90IGludGVydmFsLCBOUEJvb2wgcmVwZWF0LCB2b2lkICgqdGlt
ZXJGdW5jKShOUFAgbnBwLCB1aW50MzJfdCB0aW1lcklEKSkKLXsKLSAgICBSZWZQdHI8TmV0c2Nh
cGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0KLSAgICBy
ZXR1cm4gcGx1Z2luLT5zY2hlZHVsZVRpbWVyKGludGVydmFsLCByZXBlYXQsIHRpbWVyRnVuYyk7
Ci19Ci0KLXN0YXRpYyB2b2lkIE5QTl9VbnNjaGVkdWxlVGltZXIoTlBQIG5wcCwgdWludDMyX3Qg
dGltZXJJRCkKLXsKLSAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBl
UGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0KLSAgICBwbHVnaW4tPnVuc2NoZWR1bGVUaW1lcih0aW1l
cklEKTsKLX0KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotc3RhdGljIE5QRXJyb3IgTlBOX1BvcFVw
Q29udGV4dE1lbnUoTlBQIG5wcCwgTlBNZW51KiBtZW51KQotewotICAgIFJlZlB0cjxOZXRzY2Fw
ZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsKLQotICAgIHJl
dHVybiBwbHVnaW4tPnBvcFVwQ29udGV4dE1lbnUobWVudSk7Ci19Ci0KLXN0YXRpYyBOUEJvb2wg
TlBOX0NvbnZlcnRQb2ludChOUFAgbnBwLCBkb3VibGUgc291cmNlWCwgZG91YmxlIHNvdXJjZVks
IE5QQ29vcmRpbmF0ZVNwYWNlIHNvdXJjZVNwYWNlLCBkb3VibGUqIGRlc3RYLCBkb3VibGUqIGRl
c3RZLCBOUENvb3JkaW5hdGVTcGFjZSBkZXN0U3BhY2UpCi17Ci0gICAgUmVmUHRyPE5ldHNjYXBl
UGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotCi0gICAgZG91
YmxlIGRlc3RpbmF0aW9uWDsKLSAgICBkb3VibGUgZGVzdGluYXRpb25ZOwotCi0gICAgYm9vbCBy
ZXR1cm5WYWx1ZSA9IHBsdWdpbi0+Y29udmVydFBvaW50KHNvdXJjZVgsIHNvdXJjZVksIHNvdXJj
ZVNwYWNlLCBkZXN0aW5hdGlvblgsIGRlc3RpbmF0aW9uWSwgZGVzdFNwYWNlKTsKLQotICAgIGlm
IChkZXN0WCkKLSAgICAgICAgKmRlc3RYID0gZGVzdGluYXRpb25YOwotICAgIGlmIChkZXN0WSkK
LSAgICAgICAgKmRlc3RZID0gZGVzdGluYXRpb25ZOwotCi0gICAgcmV0dXJuIHJldHVyblZhbHVl
OwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIE5QTl9VUkxSZWRpcmVjdFJlc3BvbnNlKE5QUCBu
cHAsIHZvaWQqIG5vdGlmeURhdGEsIE5QQm9vbCBhbGxvdykKLXsKLSAgICBSZWZQdHI8TmV0c2Nh
cGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0KLSAgICBw
bHVnaW4tPnVybFJlZGlyZWN0UmVzcG9uc2Uobm90aWZ5RGF0YSwgYWxsb3cpOwotfQotCi1zdGF0
aWMgdm9pZCBpbml0aWFsaXplQnJvd3NlckZ1bmNzKE5QTmV0c2NhcGVGdW5jcyAmbmV0c2NhcGVG
dW5jcykKLXsKLSAgICBuZXRzY2FwZUZ1bmNzLnNpemUgPSBzaXplb2YoTlBOZXRzY2FwZUZ1bmNz
KTsKLSAgICBuZXRzY2FwZUZ1bmNzLnZlcnNpb24gPSAoTlBfVkVSU0lPTl9NQUpPUiA8PCA4KSB8
IE5QX1ZFUlNJT05fTUlOT1I7Ci0gICAgCi0gICAgbmV0c2NhcGVGdW5jcy5nZXR1cmwgPSBOUE5f
R2V0VVJMOwotICAgIG5ldHNjYXBlRnVuY3MucG9zdHVybCA9IE5QTl9Qb3N0VVJMOwotICAgIG5l
dHNjYXBlRnVuY3MucmVxdWVzdHJlYWQgPSBOUE5fUmVxdWVzdFJlYWQ7Ci0gICAgbmV0c2NhcGVG
dW5jcy5uZXdzdHJlYW0gPSBOUE5fTmV3U3RyZWFtOwotICAgIG5ldHNjYXBlRnVuY3Mud3JpdGUg
PSBOUE5fV3JpdGU7Ci0gICAgbmV0c2NhcGVGdW5jcy5kZXN0cm95c3RyZWFtID0gTlBOX0Rlc3Ry
b3lTdHJlYW07Ci0gICAgbmV0c2NhcGVGdW5jcy5zdGF0dXMgPSBOUE5fU3RhdHVzOwotICAgIG5l
dHNjYXBlRnVuY3MudWFnZW50ID0gTlBOX1VzZXJBZ2VudDsKLSAgICBuZXRzY2FwZUZ1bmNzLm1l
bWFsbG9jID0gTlBOX01lbUFsbG9jOwotICAgIG5ldHNjYXBlRnVuY3MubWVtZnJlZSA9IE5QTl9N
ZW1GcmVlOwotICAgIG5ldHNjYXBlRnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7Ci0gICAg
bmV0c2NhcGVGdW5jcy5yZWxvYWRwbHVnaW5zID0gTlBOX1JlbG9hZFBsdWdpbnM7Ci0gICAgbmV0
c2NhcGVGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dldEphdmFFbnY7Ci0gICAgbmV0c2NhcGVGdW5j
cy5nZXRKYXZhUGVlciA9IE5QTl9HZXRKYXZhUGVlcjsKLSAgICBuZXRzY2FwZUZ1bmNzLmdldHVy
bG5vdGlmeSA9IE5QTl9HZXRVUkxOb3RpZnk7Ci0gICAgbmV0c2NhcGVGdW5jcy5wb3N0dXJsbm90
aWZ5ID0gTlBOX1Bvc3RVUkxOb3RpZnk7Ci0gICAgbmV0c2NhcGVGdW5jcy5nZXR2YWx1ZSA9IE5Q
Tl9HZXRWYWx1ZTsKLSAgICBuZXRzY2FwZUZ1bmNzLnNldHZhbHVlID0gTlBOX1NldFZhbHVlOwot
ICAgIG5ldHNjYXBlRnVuY3MuaW52YWxpZGF0ZXJlY3QgPSBOUE5fSW52YWxpZGF0ZVJlY3Q7Ci0g
ICAgbmV0c2NhcGVGdW5jcy5pbnZhbGlkYXRlcmVnaW9uID0gTlBOX0ludmFsaWRhdGVSZWdpb247
Ci0gICAgbmV0c2NhcGVGdW5jcy5mb3JjZXJlZHJhdyA9IE5QTl9Gb3JjZVJlZHJhdzsKLSAgICAK
LSAgICBuZXRzY2FwZUZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXIgPSBOUE5fR2V0U3RyaW5nSWRl
bnRpZmllcjsKLSAgICBuZXRzY2FwZUZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXJzID0gTlBOX0dl
dFN0cmluZ0lkZW50aWZpZXJzOwotICAgIG5ldHNjYXBlRnVuY3MuZ2V0aW50aWRlbnRpZmllciA9
IE5QTl9HZXRJbnRJZGVudGlmaWVyOwotICAgIG5ldHNjYXBlRnVuY3MuaWRlbnRpZmllcmlzc3Ry
aW5nID0gTlBOX0lkZW50aWZpZXJJc1N0cmluZzsKLSAgICBuZXRzY2FwZUZ1bmNzLnV0Zjhmcm9t
aWRlbnRpZmllciA9IE5QTl9VVEY4RnJvbUlkZW50aWZpZXI7Ci0gICAgbmV0c2NhcGVGdW5jcy5p
bnRmcm9taWRlbnRpZmllciA9IE5QTl9JbnRGcm9tSWRlbnRpZmllcjsKLSAgICBuZXRzY2FwZUZ1
bmNzLmNyZWF0ZW9iamVjdCA9IE5QTl9DcmVhdGVPYmplY3Q7Ci0gICAgbmV0c2NhcGVGdW5jcy5y
ZXRhaW5vYmplY3QgPSBOUE5fUmV0YWluT2JqZWN0OwotICAgIG5ldHNjYXBlRnVuY3MucmVsZWFz
ZW9iamVjdCA9IE5QTl9SZWxlYXNlT2JqZWN0OwotICAgIG5ldHNjYXBlRnVuY3MuaW52b2tlID0g
TlBOX0ludm9rZTsKLSAgICBuZXRzY2FwZUZ1bmNzLmludm9rZURlZmF1bHQgPSBOUE5fSW52b2tl
RGVmYXVsdDsKLSAgICBuZXRzY2FwZUZ1bmNzLmV2YWx1YXRlID0gTlBOX0V2YWx1YXRlOwotICAg
IG5ldHNjYXBlRnVuY3MuZ2V0cHJvcGVydHkgPSBOUE5fR2V0UHJvcGVydHk7Ci0gICAgbmV0c2Nh
cGVGdW5jcy5zZXRwcm9wZXJ0eSA9IE5QTl9TZXRQcm9wZXJ0eTsKLSAgICBuZXRzY2FwZUZ1bmNz
LnJlbW92ZXByb3BlcnR5ID0gTlBOX1JlbW92ZVByb3BlcnR5OwotICAgIG5ldHNjYXBlRnVuY3Mu
aGFzcHJvcGVydHkgPSBOUE5fSGFzUHJvcGVydHk7Ci0gICAgbmV0c2NhcGVGdW5jcy5oYXNtZXRo
b2QgPSBOUE5fSGFzTWV0aG9kOwotICAgIG5ldHNjYXBlRnVuY3MucmVsZWFzZXZhcmlhbnR2YWx1
ZSA9IE5QTl9SZWxlYXNlVmFyaWFudFZhbHVlOwotICAgIG5ldHNjYXBlRnVuY3Muc2V0ZXhjZXB0
aW9uID0gTlBOX1NldEV4Y2VwdGlvbjsKLSAgICBuZXRzY2FwZUZ1bmNzLnB1c2hwb3B1cHNlbmFi
bGVkc3RhdGUgPSBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZTsKLSAgICBuZXRzY2FwZUZ1bmNz
LnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGU7Ci0gICAg
bmV0c2NhcGVGdW5jcy5lbnVtZXJhdGUgPSBOUE5fRW51bWVyYXRlOwotICAgIG5ldHNjYXBlRnVu
Y3MucGx1Z2ludGhyZWFkYXN5bmNjYWxsID0gTlBOX1BsdWdpblRocmVhZEFzeW5jQ2FsbDsKLSAg
ICBuZXRzY2FwZUZ1bmNzLmNvbnN0cnVjdCA9IE5QTl9Db25zdHJ1Y3Q7Ci0gICAgbmV0c2NhcGVG
dW5jcy5nZXR2YWx1ZWZvcnVybCA9IE5QTl9HZXRWYWx1ZUZvclVSTDsKLSAgICBuZXRzY2FwZUZ1
bmNzLnNldHZhbHVlZm9ydXJsID0gTlBOX1NldFZhbHVlRm9yVVJMOwotICAgIG5ldHNjYXBlRnVu
Y3MuZ2V0YXV0aGVudGljYXRpb25pbmZvID0gTlBOX0dldEF1dGhlbnRpY2F0aW9uSW5mbzsKLSAg
ICBuZXRzY2FwZUZ1bmNzLnNjaGVkdWxldGltZXIgPSBOUE5fU2NoZWR1bGVUaW1lcjsKLSAgICBu
ZXRzY2FwZUZ1bmNzLnVuc2NoZWR1bGV0aW1lciA9IE5QTl9VbnNjaGVkdWxlVGltZXI7Ci0jaWYg
UExBVEZPUk0oQ09DT0EpCi0gICAgbmV0c2NhcGVGdW5jcy5wb3B1cGNvbnRleHRtZW51ID0gTlBO
X1BvcFVwQ29udGV4dE1lbnU7Ci0gICAgbmV0c2NhcGVGdW5jcy5jb252ZXJ0cG9pbnQgPSBOUE5f
Q29udmVydFBvaW50OwotI2Vsc2UKLSAgICBuZXRzY2FwZUZ1bmNzLnBvcHVwY29udGV4dG1lbnUg
PSAwOwotICAgIG5ldHNjYXBlRnVuY3MuY29udmVydHBvaW50ID0gMDsKLSNlbmRpZgotICAgIG5l
dHNjYXBlRnVuY3MudXJscmVkaXJlY3RyZXNwb25zZSA9IE5QTl9VUkxSZWRpcmVjdFJlc3BvbnNl
OwotfQotICAgIAotTlBOZXRzY2FwZUZ1bmNzKiBuZXRzY2FwZUJyb3dzZXJGdW5jcygpCi17Ci0g
ICAgc3RhdGljIE5QTmV0c2NhcGVGdW5jcyBuZXRzY2FwZUZ1bmNzOwotICAgIHN0YXRpYyBib29s
IGluaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKCFpbml0aWFsaXplZCkgewotICAg
ICAgICBpbml0aWFsaXplQnJvd3NlckZ1bmNzKG5ldHNjYXBlRnVuY3MpOwotICAgICAgICBpbml0
aWFsaXplZCA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuICZuZXRzY2FwZUZ1bmNzOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0
c2NhcGUvTmV0c2NhcGVCcm93c2VyRnVuY3MuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL05ldHNjYXBlQnJvd3NlckZ1bmNzLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDA3ZDQyMWZiM2QzNzhkZjQxNDFhY2YwMDJlZmU3MTc1ZWE1NzEyYmMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVCcm93c2VyRnVuY3MuaAorKysg
L2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE5ldHNjYXBl
QnJvd3NlckZ1bmNzX2gKLSNkZWZpbmUgTmV0c2NhcGVCcm93c2VyRnVuY3NfaAotCi0jaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlIDxXZWJDb3JlL25wZnVuY3Rpb25z
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi0jaWYgUExVR0lOX0FSQ0hJVEVDVFVSRShNQUMp
Ci0vLyBUaGUgQ29yZSBBbmltYXRpb24gcmVuZGVyIHNlcnZlciBwb3J0Lgotc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFdLTlZDQUxheWVyUmVuZGVyU2VydmVyUG9ydCA9IDcxODc5OwotI2VuZGlmCi0K
LU5QTmV0c2NhcGVGdW5jcyogbmV0c2NhcGVCcm93c2VyRnVuY3MoKTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2Vu
ZGlmIC8vIE5ldHNjYXBlQnJvd3NlckZ1bmNzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk3YTg1MjhiZWZiMGM2MmRlNjM1MTIxY2IyYWJh
MGM2NTFlNTMyNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdp
bi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTmV0c2NhcGVQbHVnaW4uaCIKLQotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiTlBSdW50aW1lT2JqZWN0TWFwLmgi
Ci0jaW5jbHVkZSAiTlBSdW50aW1lVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiTmV0c2NhcGVQbHVn
aW5TdHJlYW0uaCIKLSNpbmNsdWRlICJQbHVnaW5Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2hh
cmVhYmxlQml0bWFwLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3QuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSFRU
UEhlYWRlck1hcC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvU2hhcmVkQnVmZmVyLmg+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLSNpbmNsdWRlIDx3dGYv
VVJMLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgUExVR0lOX0FSQ0hJ
VEVDVFVSRShVTklYKQotI2luY2x1ZGUgIk5ldHNjYXBlUGx1Z2luVW5peC5oIgotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJMYXllckhvc3RpbmdDb250ZXh0LmgiCi0j
aW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLS8vIFRoZSBwbHVnLWluIHRoYXQgd2UncmUg
Y3VycmVudGx5IGNhbGxpbmcgTlBQX05ldyBmb3IuCi1zdGF0aWMgTmV0c2NhcGVQbHVnaW4qIGN1
cnJlbnROUFBOZXdQbHVnaW47Ci0KLVJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gTmV0c2NhcGVQbHVn
aW46OmNyZWF0ZShSZWZQdHI8TmV0c2NhcGVQbHVnaW5Nb2R1bGU+JiYgcGx1Z2luTW9kdWxlKQot
ewotICAgIGlmICghcGx1Z2luTW9kdWxlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHNjYXBlUGx1Z2luKHBsdWdpbk1vZHVsZS5yZWxlYXNl
Tm9uTnVsbCgpKSk7Ci19Ci0gICAgCi1OZXRzY2FwZVBsdWdpbjo6TmV0c2NhcGVQbHVnaW4oUmVm
PE5ldHNjYXBlUGx1Z2luTW9kdWxlPiYmIHBsdWdpbk1vZHVsZSkKLSAgICA6IFBsdWdpbihOZXRz
Y2FwZVBsdWdpblR5cGUpCi0gICAgLCBtX25leHRSZXF1ZXN0SUQoMCkKLSAgICAsIG1fcGx1Z2lu
TW9kdWxlKFdURk1vdmUocGx1Z2luTW9kdWxlKSkKLSAgICAsIG1fbnBXaW5kb3coKQotICAgICwg
bV9pc1N0YXJ0ZWQoZmFsc2UpCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgLCBtX2lzV2luZG93
ZWQoZmFsc2UpCi0jZWxzZQotICAgICwgbV9pc1dpbmRvd2VkKHRydWUpCi0jZW5kaWYKLSAgICAs
IG1faXNUcmFuc3BhcmVudChmYWxzZSkKLSAgICAsIG1faW5OUFBOZXcoZmFsc2UpCi0gICAgLCBt
X3Nob3VsZFVzZU1hbnVhbExvYWRlcihmYWxzZSkKLSAgICAsIG1faGFzQ2FsbGVkU2V0V2luZG93
KGZhbHNlKQotICAgICwgbV9pc1Zpc2libGUoZmFsc2UpCi0gICAgLCBtX25leHRUaW1lcklEKDAp
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgLCBtX2RyYXdpbmdNb2RlbChzdGF0aWNfY2FzdDxO
UERyYXdpbmdNb2RlbD4oLTEpKQotICAgICwgbV9ldmVudE1vZGVsKHN0YXRpY19jYXN0PE5QRXZl
bnRNb2RlbD4oLTEpKQotICAgICwgbV9wbHVnaW5SZXR1cm5zTm9ucmV0YWluZWRMYXllcighbV9w
bHVnaW5Nb2R1bGUtPnBsdWdpblF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrczo6UmV0dXJu
c1JldGFpbmVkQ29yZUFuaW1hdGlvbkxheWVyKSkKLSAgICAsIG1fbGF5ZXJIb3N0aW5nTW9kZShM
YXllckhvc3RpbmdNb2RlOjpJblByb2Nlc3MpCi0gICAgLCBtX2N1cnJlbnRNb3VzZUV2ZW50KDAp
Ci0gICAgLCBtX3BsdWdpbkhhc0ZvY3VzKGZhbHNlKQotICAgICwgbV93aW5kb3dIYXNGb2N1cyhm
YWxzZSkKLSAgICAsIG1fcGx1Z2luV2FudHNMZWdhY3lDb2NvYVRleHRJbnB1dCh0cnVlKQotICAg
ICwgbV9pc0NvbXBsZXhUZXh0SW5wdXRFbmFibGVkKGZhbHNlKQotICAgICwgbV9oYXNIYW5kbGVk
QUtleURvd25FdmVudChmYWxzZSkKLSAgICAsIG1faWdub3JlTmV4dEtleVVwRXZlbnRDb3VudGVy
KDApCi0jZW5kaWYKLXsKLSAgICBtX25wcC5uZGF0YSA9IHRoaXM7Ci0gICAgbV9ucHAucGRhdGEg
PSAwOwotICAgIAotICAgIG1fcGx1Z2luTW9kdWxlLT5pbmNyZW1lbnRMb2FkQ291bnQoKTsKLX0K
LQotTmV0c2NhcGVQbHVnaW46On5OZXRzY2FwZVBsdWdpbigpCi17Ci0gICAgQVNTRVJUKCFtX2lz
U3RhcnRlZCk7Ci0gICAgQVNTRVJUKG1fdGltZXJzLmlzRW1wdHkoKSk7Ci0KLSAgICBtX3BsdWdp
bk1vZHVsZS0+ZGVjcmVtZW50TG9hZENvdW50KCk7Ci19Ci0KLVJlZlB0cjxOZXRzY2FwZVBsdWdp
bj4gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAoTlBQIG5wcCkKLXsKLSAgICBpZiAoIW5wcCkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TmV0c2NhcGVQ
bHVnaW4qPihucHAtPm5kYXRhKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6aW52YWxpZGF0
ZShjb25zdCBOUFJlY3QqIGludmFsaWRSZWN0KQotewotICAgIEludFJlY3QgcmVjdDsKLSAgICAK
LSAgICBpZiAoIWludmFsaWRSZWN0KQotICAgICAgICByZWN0ID0gSW50UmVjdCgwLCAwLCBtX3Bs
dWdpblNpemUud2lkdGgoKSwgbV9wbHVnaW5TaXplLmhlaWdodCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIHJlY3QgPSBJbnRSZWN0KGludmFsaWRSZWN0LT5sZWZ0LCBpbnZhbGlkUmVjdC0+dG9wLCBp
bnZhbGlkUmVjdC0+cmlnaHQgLSBpbnZhbGlkUmVjdC0+bGVmdCwgaW52YWxpZFJlY3QtPmJvdHRv
bSAtIGludmFsaWRSZWN0LT50b3ApOwotICAgIAotICAgIGlmIChwbGF0Zm9ybUludmFsaWRhdGUo
cmVjdCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnRyb2xsZXIoKS0+aW52YWxpZGF0ZShy
ZWN0KTsKLX0KLQotY29uc3QgY2hhciogTmV0c2NhcGVQbHVnaW46OnVzZXJBZ2VudChOUFAgbnBw
KQotewotICAgIGlmIChucHApCi0gICAgICAgIHJldHVybiBmcm9tTlBQKG5wcCktPnVzZXJBZ2Vu
dCgpOwotCi0gICAgaWYgKGN1cnJlbnROUFBOZXdQbHVnaW4pCi0gICAgICAgIHJldHVybiBjdXJy
ZW50TlBQTmV3UGx1Z2luLT51c2VyQWdlbnQoKTsKLQotICAgIHJldHVybiAwOwotfQotCi1jb25z
dCBjaGFyKiBOZXRzY2FwZVBsdWdpbjo6dXNlckFnZW50KCkKLXsKLSAgICBpZiAobV91c2VyQWdl
bnQuaXNOdWxsKCkpIHsKLSAgICAgICAgU3RyaW5nIHVzZXJBZ2VudCA9IGNvbnRyb2xsZXIoKS0+
dXNlckFnZW50KCk7Ci0gICAgICAgIEFTU0VSVCghdXNlckFnZW50LmlzTnVsbCgpKTsKLQotI2lm
IFBMVUdJTl9BUkNISVRFQ1RVUkUoTUFDKQotICAgICAgICBpZiAocXVpcmtzKCkuY29udGFpbnMo
UGx1Z2luUXVpcmtzOjpBcHBlbmRWZXJzaW9uM1VzZXJBZ2VudCkpCi0gICAgICAgICAgICB1c2Vy
QWdlbnQuYXBwZW5kKCIgVmVyc2lvbi8zLjIuMSIpOwotI2VuZGlmCi0KLSAgICAgICAgbV91c2Vy
QWdlbnQgPSB1c2VyQWdlbnQudXRmOCgpOwotICAgIH0KLSAgICByZXR1cm4gbV91c2VyQWdlbnQu
ZGF0YSgpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpsb2FkVVJMKGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNv
bnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlckZpZWxkcywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBo
dHRwQm9keSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZW5kTm90aWZpY2F0
aW9uLCB2b2lkKiBub3RpZmljYXRpb25EYXRhKQotewotICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9
ICsrbV9uZXh0UmVxdWVzdElEOwotICAgIAotICAgIGNvbnRyb2xsZXIoKS0+bG9hZFVSTChyZXF1
ZXN0SUQsIG1ldGhvZCwgdXJsU3RyaW5nLCB0YXJnZXQsIGhlYWRlckZpZWxkcywgaHR0cEJvZHks
IGFsbG93UG9wdXBzKCkpOwotCi0gICAgaWYgKHRhcmdldC5pc051bGwoKSkgewotICAgICAgICAv
LyBUaGUgYnJvd3NlciBpcyBnb2luZyB0byBzZW5kIHRoZSBkYXRhIGluIGEgc3RyZWFtLCBjcmVh
dGUgYSBwbHVnLWluIHN0cmVhbS4KLSAgICAgICAgYXV0byBwbHVnaW5TdHJlYW0gPSBOZXRzY2Fw
ZVBsdWdpblN0cmVhbTo6Y3JlYXRlKCp0aGlzLCByZXF1ZXN0SUQsIHVybFN0cmluZywgc2VuZE5v
dGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uRGF0YSk7Ci0gICAgICAgIEFTU0VSVCghbV9zdHJlYW1z
LmNvbnRhaW5zKHJlcXVlc3RJRCkpOwotCi0gICAgICAgIG1fc3RyZWFtcy5zZXQocmVxdWVzdElE
LCBXVEZNb3ZlKHBsdWdpblN0cmVhbSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKHNlbmROb3RpZmljYXRpb24pIHsKLSAgICAgICAgLy8gRXZlbnR1YWxseSB3ZSBhcmUgZ29p
bmcgdG8gZ2V0IGEgZnJhbWVEaWRGaW5pc2hMb2FkaW5nIG9yIGZyYW1lRGlkRmFpbCBjYWxsIGZv
ciB0aGlzIHJlcXVlc3QuCi0gICAgICAgIC8vIEtlZXAgdHJhY2sgb2YgdGhlIG5vdGlmaWNhdGlv
biBkYXRhIHNvIHdlIGNhbiBjYWxsIE5QUF9VUkxOb3RpZnkuCi0gICAgICAgIEFTU0VSVCghbV9w
ZW5kaW5nVVJMTm90aWZpY2F0aW9ucy5jb250YWlucyhyZXF1ZXN0SUQpKTsKLSAgICAgICAgbV9w
ZW5kaW5nVVJMTm90aWZpY2F0aW9ucy5zZXQocmVxdWVzdElELCBzdGQ6Om1ha2VfcGFpcih1cmxT
dHJpbmcsIG5vdGlmaWNhdGlvbkRhdGEpKTsKLSAgICB9Ci19Ci0KLU5QRXJyb3IgTmV0c2NhcGVQ
bHVnaW46OmRlc3Ryb3lTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQot
ewotICAgIE5ldHNjYXBlUGx1Z2luU3RyZWFtKiBwbHVnaW5TdHJlYW0gPSAwOwotCi0gICAgZm9y
IChTdHJlYW1zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3RyZWFtcy5iZWdpbigpLCBlbmQg
PSBtX3N0cmVhbXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnZh
bHVlLT5ucFN0cmVhbSgpID09IHN0cmVhbSkgewotICAgICAgICAgICAgcGx1Z2luU3RyZWFtID0g
aXQtPnZhbHVlLmdldCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoIXBsdWdpblN0cmVhbSkKLSAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfSU5T
VEFOQ0VfRVJST1I7Ci0KLSAgICByZXR1cm4gcGx1Z2luU3RyZWFtLT5kZXN0cm95KHJlYXNvbik7
Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OnNldElzV2luZG93ZWQoYm9vbCBpc1dpbmRvd2Vk
KQotewotICAgIC8vIE9uY2UgdGhlIHBsdWdpbiBoYXMgc3RhcnRlZCwgaXQncyB0b28gbGF0ZSB0
byBjaGFuZ2Ugd2hldGhlciB0aGUgcGx1Z2luIGlzIHdpbmRvd2VkIG9yIG5vdC4KLSAgICAvLyAo
VGhpcyBpcyB0cnVlIGluIEZpcmVmb3ggYW5kIENocm9tZSwgdG9vLikgRGlzYWxsb3cgc2V0dGlu
ZyBtX2lzV2luZG93ZWQgaW4gdGhhdCBjYXNlIHRvCi0gICAgLy8ga2VlcCBvdXIgaW50ZXJuYWwg
c3RhdGUgY29uc2lzdGVudC4KLSAgICBpZiAobV9pc1N0YXJ0ZWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1faXNXaW5kb3dlZCA9IGlzV2luZG93ZWQ7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVn
aW46OnNldElzVHJhbnNwYXJlbnQoYm9vbCBpc1RyYW5zcGFyZW50KQotewotICAgIG1faXNUcmFu
c3BhcmVudCA9IGlzVHJhbnNwYXJlbnQ7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OnNldFN0
YXR1c2JhclRleHQoY29uc3QgU3RyaW5nJiBzdGF0dXNiYXJUZXh0KQotewotICAgIGNvbnRyb2xs
ZXIoKS0+c2V0U3RhdHVzYmFyVGV4dChzdGF0dXNiYXJUZXh0KTsKLX0KLQotc3RhdGljIHZvaWQg
KCpzZXRFeGNlcHRpb25GdW5jdGlvbikoY29uc3QgU3RyaW5nJik7Ci0KLXZvaWQgTmV0c2NhcGVQ
bHVnaW46OnNldFNldEV4Y2VwdGlvbkZ1bmN0aW9uKHZvaWQgKCpmdW5jdGlvbikoY29uc3QgU3Ry
aW5nJikpCi17Ci0gICAgQVNTRVJUKCFzZXRFeGNlcHRpb25GdW5jdGlvbiB8fCBzZXRFeGNlcHRp
b25GdW5jdGlvbiA9PSBmdW5jdGlvbik7Ci0gICAgc2V0RXhjZXB0aW9uRnVuY3Rpb24gPSBmdW5j
dGlvbjsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6c2V0RXhjZXB0aW9uKGNvbnN0IFN0cmlu
ZyYgZXhjZXB0aW9uU3RyaW5nKQotewotICAgIEFTU0VSVChzZXRFeGNlcHRpb25GdW5jdGlvbik7
Ci0gICAgc2V0RXhjZXB0aW9uRnVuY3Rpb24oZXhjZXB0aW9uU3RyaW5nKTsKLX0KLQotYm9vbCBO
ZXRzY2FwZVBsdWdpbjo6ZXZhbHVhdGUoTlBPYmplY3QqIG5wT2JqZWN0LCBjb25zdCBTdHJpbmcm
IHNjcmlwdFN0cmluZywgTlBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIGNvbnRyb2xs
ZXIoKS0+ZXZhbHVhdGUobnBPYmplY3QsIHNjcmlwdFN0cmluZywgcmVzdWx0LCBhbGxvd1BvcHVw
cygpKTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6aXNQcml2YXRlQnJvd3NpbmdFbmFibGVk
KCkKLXsKLSAgICByZXR1cm4gY29udHJvbGxlcigpLT5pc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQo
KTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6aXNNdXRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGNvbnRyb2xsZXIoKS0+aXNNdXRlZCgpOwotfQotCi1OUE9iamVjdCogTmV0c2NhcGVQbHVn
aW46OndpbmRvd1NjcmlwdE5QT2JqZWN0KCkKLXsKLSAgICByZXR1cm4gY29udHJvbGxlcigpLT53
aW5kb3dTY3JpcHROUE9iamVjdCgpOwotfQotCi1OUE9iamVjdCogTmV0c2NhcGVQbHVnaW46OnBs
dWdpbkVsZW1lbnROUE9iamVjdCgpCi17Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXIoKS0+cGx1Z2lu
RWxlbWVudE5QT2JqZWN0KCk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OmNhbmNlbFN0cmVh
bUxvYWQoTmV0c2NhcGVQbHVnaW5TdHJlYW0qIHBsdWdpblN0cmVhbSkKLXsKLSAgICBpZiAocGx1
Z2luU3RyZWFtID09IG1fbWFudWFsU3RyZWFtKSB7Ci0gICAgICAgIGNvbnRyb2xsZXIoKS0+Y2Fu
Y2VsTWFudWFsU3RyZWFtTG9hZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
QXNrIHRoZSBwbHVnLWluIGNvbnRyb2xsZXIgdG8gY2FuY2VsIHRoaXMgc3RyZWFtIGxvYWQuCi0g
ICAgY29udHJvbGxlcigpLT5jYW5jZWxTdHJlYW1Mb2FkKHBsdWdpblN0cmVhbS0+c3RyZWFtSUQo
KSk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OnJlbW92ZVBsdWdpblN0cmVhbShOZXRzY2Fw
ZVBsdWdpblN0cmVhbSogcGx1Z2luU3RyZWFtKQotewotICAgIGlmIChwbHVnaW5TdHJlYW0gPT0g
bV9tYW51YWxTdHJlYW0pIHsKLSAgICAgICAgbV9tYW51YWxTdHJlYW0gPSBudWxscHRyOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fc3RyZWFtcy5nZXQocGx1Z2luU3Ry
ZWFtLT5zdHJlYW1JRCgpKSA9PSBwbHVnaW5TdHJlYW0pOwotICAgIG1fc3RyZWFtcy5yZW1vdmUo
cGx1Z2luU3RyZWFtLT5zdHJlYW1JRCgpKTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6aXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpCi17Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXIo
KS0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpOwotfQotCi12b2lkIE5ldHNjYXBl
UGx1Z2luOjpwdXNoUG9wdXBzRW5hYmxlZFN0YXRlKGJvb2wgc3RhdGUpCi17Ci0gICAgbV9wb3B1
cEVuYWJsZWRTdGF0ZXMuYXBwZW5kKHN0YXRlKTsKLX0KLSAKLXZvaWQgTmV0c2NhcGVQbHVnaW46
OnBvcFBvcHVwc0VuYWJsZWRTdGF0ZSgpCi17Ci0gICAgQVNTRVJUKCFtX3BvcHVwRW5hYmxlZFN0
YXRlcy5pc0VtcHR5KCkpOwotCi0gICAgbV9wb3B1cEVuYWJsZWRTdGF0ZXMucmVtb3ZlTGFzdCgp
OwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpwbHVnaW5UaHJlYWRBc3luY0NhbGwodm9pZCAo
KmZ1bmN0aW9uKSh2b2lkKiksIHZvaWQqIHVzZXJEYXRhKQotewotICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIGZ1bmN0aW9uLCB1c2Vy
RGF0YV0gewotICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1faXNTdGFydGVkKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIGZ1bmN0aW9uKHVzZXJEYXRhKTsKLSAgICB9KTsKLX0K
LQotTmV0c2NhcGVQbHVnaW46OlRpbWVyOjpUaW1lcihOZXRzY2FwZVBsdWdpbiogbmV0c2NhcGVQ
bHVnaW4sIHVuc2lnbmVkIHRpbWVySUQsIHVuc2lnbmVkIGludGVydmFsLCBib29sIHJlcGVhdCwg
VGltZXJGdW5jIHRpbWVyRnVuYykKLSAgICA6IG1fbmV0c2NhcGVQbHVnaW4obmV0c2NhcGVQbHVn
aW4pCi0gICAgLCBtX3RpbWVySUQodGltZXJJRCkKLSAgICAsIG1faW50ZXJ2YWwoaW50ZXJ2YWwp
Ci0gICAgLCBtX3JlcGVhdChyZXBlYXQpCi0gICAgLCBtX3RpbWVyRnVuYyh0aW1lckZ1bmMpCi0g
ICAgLCBtX3RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlRpbWVyOjp0aW1lckZpcmVkKQot
ewotfQotCi1OZXRzY2FwZVBsdWdpbjo6VGltZXI6On5UaW1lcigpCi17Ci19Ci0KLXZvaWQgTmV0
c2NhcGVQbHVnaW46OlRpbWVyOjpzdGFydCgpCi17Ci0gICAgU2Vjb25kcyB0aW1lSW50ZXJ2YWwg
PSAxX21zICogbV9pbnRlcnZhbDsKLQotICAgIGlmIChtX3JlcGVhdCkKLSAgICAgICAgbV90aW1l
ci5zdGFydFJlcGVhdGluZyh0aW1lSW50ZXJ2YWwpOwotICAgIGVsc2UKLSAgICAgICAgbV90aW1l
ci5zdGFydE9uZVNob3QodGltZUludGVydmFsKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6
VGltZXI6OnN0b3AoKQotewotICAgIG1fdGltZXIuc3RvcCgpOwotfQotCi12b2lkIE5ldHNjYXBl
UGx1Z2luOjpUaW1lcjo6dGltZXJGaXJlZCgpCi17Ci0gICAgbV90aW1lckZ1bmMoJm1fbmV0c2Nh
cGVQbHVnaW4tPm1fbnBwLCBtX3RpbWVySUQpOwotCi0gICAgaWYgKCFtX3JlcGVhdCkKLSAgICAg
ICAgbV9uZXRzY2FwZVBsdWdpbi0+dW5zY2hlZHVsZVRpbWVyKG1fdGltZXJJRCk7Ci19Ci0KLXVp
bnQzMl90IE5ldHNjYXBlUGx1Z2luOjpzY2hlZHVsZVRpbWVyKHVuc2lnbmVkIGludGVydmFsLCBi
b29sIHJlcGVhdCwgdm9pZCAoKnRpbWVyRnVuYykoTlBQLCB1bnNpZ25lZCB0aW1lcklEKSkKLXsK
LSAgICBpZiAoIXRpbWVyRnVuYykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBGSVhNRTog
SGFuZGxlIHdyYXBwaW5nIGFyb3VuZC4KLSAgICB1bnNpZ25lZCB0aW1lcklEID0gKyttX25leHRU
aW1lcklEOwotCi0gICAgYXV0byB0aW1lciA9IG1ha2VVbmlxdWU8VGltZXI+KHRoaXMsIHRpbWVy
SUQsIGludGVydmFsLCByZXBlYXQsIHRpbWVyRnVuYyk7Ci0gICAgCi0gICAgLy8gRklYTUU6IEJh
c2VkIG9uIHRoZSBwbHVnLWluIHZpc2liaWxpdHksIGZpZ3VyZSBvdXQgaWYgd2Ugc2hvdWxkIHRo
cm90dGxlIHRoZSB0aW1lciwgb3IgaWYgd2Ugc2hvdWxkIHN0YXJ0IGl0IGF0IGFsbC4KLSAgICB0
aW1lci0+c3RhcnQoKTsKLSAgICBtX3RpbWVycy5zZXQodGltZXJJRCwgV1RGTW92ZSh0aW1lcikp
OwotCi0gICAgcmV0dXJuIHRpbWVySUQ7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OnVuc2No
ZWR1bGVUaW1lcih1bnNpZ25lZCB0aW1lcklEKQotewotICAgIGlmIChhdXRvIHRpbWVyID0gbV90
aW1lcnMudGFrZSh0aW1lcklEKSkKLSAgICAgICAgdGltZXItPnN0b3AoKTsKLX0KLQotZG91Ymxl
IE5ldHNjYXBlUGx1Z2luOjpjb250ZW50c1NjYWxlRmFjdG9yKCkKLXsKLSAgICByZXR1cm4gY29u
dHJvbGxlcigpLT5jb250ZW50c1NjYWxlRmFjdG9yKCk7Ci19Ci0KLVN0cmluZyBOZXRzY2FwZVBs
dWdpbjo6cHJveGllc0ZvclVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKLXsKLSAgICByZXR1
cm4gY29udHJvbGxlcigpLT5wcm94aWVzRm9yVVJMKHVybFN0cmluZyk7Ci19Ci0gICAgCi1TdHJp
bmcgTmV0c2NhcGVQbHVnaW46OmNvb2tpZXNGb3JVUkwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcp
Ci17Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXIoKS0+Y29va2llc0ZvclVSTCh1cmxTdHJpbmcpOwot
fQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpzZXRDb29raWVzRm9yVVJMKGNvbnN0IFN0cmluZyYg
dXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cmluZykKLXsKLSAgICBjb250cm9sbGVy
KCktPnNldENvb2tpZXNGb3JVUkwodXJsU3RyaW5nLCBjb29raWVTdHJpbmcpOwotfQotCi1ib29s
IE5ldHNjYXBlUGx1Z2luOjpnZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgUHJvdGVjdGlvblNw
YWNlJiBwcm90ZWN0aW9uU3BhY2UsIFN0cmluZyYgdXNlcm5hbWUsIFN0cmluZyYgcGFzc3dvcmQp
Ci17Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXIoKS0+Z2V0QXV0aGVudGljYXRpb25JbmZvKHByb3Rl
Y3Rpb25TcGFjZSwgdXNlcm5hbWUsIHBhc3N3b3JkKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdp
bjo6cmVnaXN0ZXJSZWRpcmVjdChOZXRzY2FwZVBsdWdpblN0cmVhbSogc3RyZWFtLCBjb25zdCBV
UkwmIHJlcXVlc3RVUkwsIGludCByZWRpcmVjdFJlc3BvbnNlU3RhdHVzLCB2b2lkKiBub3RpZmlj
YXRpb25EYXRhKQotewotICAgIC8vIE5QUF9VUkxSZWRpcmVjdE5vdGlmeSBtYXkgc3luY2hyb25v
dXNseSByZXF1ZXN0IHRoaXMgc3RyZWFtIGJhY2sgb3V0LCBzbyBzZXQgaXQgZmlyc3QKLSAgICBt
X3JlZGlyZWN0cy5zZXQobm90aWZpY2F0aW9uRGF0YSwgc3RkOjptYWtlX3BhaXIoc3RyZWFtLCBy
ZXF1ZXN0VVJMLnN0cmluZygpKSk7Ci0gICAgaWYgKCFOUFBfVVJMUmVkaXJlY3ROb3RpZnkocmVx
dWVzdFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCByZWRpcmVjdFJlc3BvbnNlU3RhdHVzLCBu
b3RpZmljYXRpb25EYXRhKSkgewotICAgICAgICBtX3JlZGlyZWN0cy50YWtlKG5vdGlmaWNhdGlv
bkRhdGEpOwotICAgICAgICBjb250cm9sbGVyKCktPmNvbnRpbnVlU3RyZWFtTG9hZChzdHJlYW0t
PnN0cmVhbUlEKCkpOwotICAgIH0KLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6dXJsUmVkaXJl
Y3RSZXNwb25zZSh2b2lkKiBub3RpZnlEYXRhLCBib29sIGFsbG93KQotewotICAgIGlmICghbV9y
ZWRpcmVjdHMuY29udGFpbnMobm90aWZ5RGF0YSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1
dG8gcmVkaXJlY3QgPSBtX3JlZGlyZWN0cy50YWtlKG5vdGlmeURhdGEpOwotICAgIGlmICghcmVk
aXJlY3QuZmlyc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdp
blN0cmVhbT4gc3RyZWFtID0gcmVkaXJlY3QuZmlyc3Q7Ci0gICAgaWYgKCFhbGxvdykgewotICAg
ICAgICBjb250cm9sbGVyKCktPmNhbmNlbFN0cmVhbUxvYWQoc3RyZWFtLT5zdHJlYW1JRCgpKTsK
LSAgICAgICAgc3RyZWFtLT5zdG9wKE5QUkVTX1VTRVJfQlJFQUspOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHN0cmVhbS0+c2V0VVJMKHJlZGlyZWN0LnNlY29uZCk7Ci0gICAgICAgIGNvbnRyb2xs
ZXIoKS0+Y29udGludWVTdHJlYW1Mb2FkKHN0cmVhbS0+c3RyZWFtSUQoKSk7Ci0gICAgfQotfQot
Ci12b2lkIE5ldHNjYXBlUGx1Z2luOjpzZXRJc1BsYXlpbmdBdWRpbyhib29sIGlzUGxheWluZ0F1
ZGlvKQotewotICAgIGNvbnRyb2xsZXIoKS0+c2V0UGx1Z2luSXNQbGF5aW5nQXVkaW8oaXNQbGF5
aW5nQXVkaW8pOwotfQotCi1OUEVycm9yIE5ldHNjYXBlUGx1Z2luOjpOUFBfTmV3KE5QTUlNRVR5
cGUgcGx1Z2luVHlwZSwgdWludDE2X3QgbW9kZSwgaW50MTZfdCBhcmdjLCBjaGFyKiBhcmduW10s
IGNoYXIqIGFyZ3ZbXSwgTlBTYXZlZERhdGEqIHNhdmVkRGF0YSkKLXsKLSAgICByZXR1cm4gbV9w
bHVnaW5Nb2R1bGUtPnBsdWdpbkZ1bmNzKCkubmV3cChwbHVnaW5UeXBlLCAmbV9ucHAsIG1vZGUs
IGFyZ2MsIGFyZ24sIGFyZ3YsIHNhdmVkRGF0YSk7Ci19Ci0gICAgCi1OUEVycm9yIE5ldHNjYXBl
UGx1Z2luOjpOUFBfRGVzdHJveShOUFNhdmVkRGF0YSoqIHNhdmVkRGF0YSkKLXsKLSAgICByZXR1
cm4gbV9wbHVnaW5Nb2R1bGUtPnBsdWdpbkZ1bmNzKCkuZGVzdHJveSgmbV9ucHAsIHNhdmVkRGF0
YSk7Ci19Ci0KLU5QRXJyb3IgTmV0c2NhcGVQbHVnaW46Ok5QUF9TZXRXaW5kb3coTlBXaW5kb3cq
IG5wV2luZG93KQotewotICAgIHJldHVybiBtX3BsdWdpbk1vZHVsZS0+cGx1Z2luRnVuY3MoKS5z
ZXR3aW5kb3coJm1fbnBwLCBucFdpbmRvdyk7Ci19Ci0KLU5QRXJyb3IgTmV0c2NhcGVQbHVnaW46
Ok5QUF9OZXdTdHJlYW0oTlBNSU1FVHlwZSBtaW1lVHlwZSwgTlBTdHJlYW0qIHN0cmVhbSwgTlBC
b29sIHNlZWthYmxlLCB1aW50MTZfdCogc3RyZWFtVHlwZSkKLXsKLSAgICByZXR1cm4gbV9wbHVn
aW5Nb2R1bGUtPnBsdWdpbkZ1bmNzKCkubmV3c3RyZWFtKCZtX25wcCwgbWltZVR5cGUsIHN0cmVh
bSwgc2Vla2FibGUsIHN0cmVhbVR5cGUpOwotfQotCi1OUEVycm9yIE5ldHNjYXBlUGx1Z2luOjpO
UFBfRGVzdHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCi17Ci0g
ICAgcmV0dXJuIG1fcGx1Z2luTW9kdWxlLT5wbHVnaW5GdW5jcygpLmRlc3Ryb3lzdHJlYW0oJm1f
bnBwLCBzdHJlYW0sIHJlYXNvbik7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46Ok5QUF9TdHJl
YW1Bc0ZpbGUoTlBTdHJlYW0qIHN0cmVhbSwgY29uc3QgY2hhciogZmlsZW5hbWUpCi17Ci0gICAg
cmV0dXJuIG1fcGx1Z2luTW9kdWxlLT5wbHVnaW5GdW5jcygpLmFzZmlsZSgmbV9ucHAsIHN0cmVh
bSwgZmlsZW5hbWUpOwotfQotCi1pbnQzMl90IE5ldHNjYXBlUGx1Z2luOjpOUFBfV3JpdGVSZWFk
eShOUFN0cmVhbSogc3RyZWFtKQotewotICAgIHJldHVybiBtX3BsdWdpbk1vZHVsZS0+cGx1Z2lu
RnVuY3MoKS53cml0ZXJlYWR5KCZtX25wcCwgc3RyZWFtKTsKLX0KLQotaW50MzJfdCBOZXRzY2Fw
ZVBsdWdpbjo6TlBQX1dyaXRlKE5QU3RyZWFtKiBzdHJlYW0sIGludDMyX3Qgb2Zmc2V0LCBpbnQz
Ml90IGxlbiwgdm9pZCogYnVmZmVyKQotewotICAgIHJldHVybiBtX3BsdWdpbk1vZHVsZS0+cGx1
Z2luRnVuY3MoKS53cml0ZSgmbV9ucHAsIHN0cmVhbSwgb2Zmc2V0LCBsZW4sIGJ1ZmZlcik7Ci19
Ci0KLWludDE2X3QgTmV0c2NhcGVQbHVnaW46Ok5QUF9IYW5kbGVFdmVudCh2b2lkKiBldmVudCkK
LXsKLSAgICByZXR1cm4gbV9wbHVnaW5Nb2R1bGUtPnBsdWdpbkZ1bmNzKCkuZXZlbnQoJm1fbnBw
LCBldmVudCk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46Ok5QUF9VUkxOb3RpZnkoY29uc3Qg
Y2hhciogdXJsLCBOUFJlYXNvbiByZWFzb24sIHZvaWQqIG5vdGlmeURhdGEpCi17Ci0gICAgbV9w
bHVnaW5Nb2R1bGUtPnBsdWdpbkZ1bmNzKCkudXJsbm90aWZ5KCZtX25wcCwgdXJsLCByZWFzb24s
IG5vdGlmeURhdGEpOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjpOUFBfVVJMUmVkaXJlY3RO
b3RpZnkoY29uc3QgY2hhciogdXJsLCBpbnQzMl90IHN0YXR1cywgdm9pZCogbm90aWZ5RGF0YSkK
LXsKLSAgICBpZiAoIW1fcGx1Z2luTW9kdWxlLT5wbHVnaW5GdW5jcygpLnVybHJlZGlyZWN0bm90
aWZ5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3BsdWdpbk1vZHVsZS0+cGx1Z2lu
RnVuY3MoKS51cmxyZWRpcmVjdG5vdGlmeSgmbV9ucHAsIHVybCwgc3RhdHVzLCBub3RpZnlEYXRh
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotTlBFcnJvciBOZXRzY2FwZVBsdWdpbjo6TlBQX0dl
dFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkICp2YWx1ZSkKLXsKLSAgICBpZiAoIW1f
cGx1Z2luTW9kdWxlLT5wbHVnaW5GdW5jcygpLmdldHZhbHVlKQotICAgICAgICByZXR1cm4gTlBF
UlJfR0VORVJJQ19FUlJPUjsKLQotICAgIHJldHVybiBtX3BsdWdpbk1vZHVsZS0+cGx1Z2luRnVu
Y3MoKS5nZXR2YWx1ZSgmbV9ucHAsIHZhcmlhYmxlLCB2YWx1ZSk7Ci19Ci0KLU5QRXJyb3IgTmV0
c2NhcGVQbHVnaW46Ok5QUF9TZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqdmFs
dWUpCi17Ci0gICAgaWYgKCFtX3BsdWdpbk1vZHVsZS0+cGx1Z2luRnVuY3MoKS5zZXR2YWx1ZSkK
LSAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAgICByZXR1cm4gbV9wbHVn
aW5Nb2R1bGUtPnBsdWdpbkZ1bmNzKCkuc2V0dmFsdWUoJm1fbnBwLCB2YXJpYWJsZSwgdmFsdWUp
OwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpjYWxsU2V0V2luZG93KCkKLXsKLSAgICBpZiAo
d2FudHNQbHVnaW5SZWxhdGl2ZU5QV2luZG93Q29vcmRpbmF0ZXMoKSkgewotICAgICAgICBtX25w
V2luZG93LnggPSAwOwotICAgICAgICBtX25wV2luZG93LnkgPSAwOwotICAgICAgICBtX25wV2lu
ZG93LmNsaXBSZWN0LnRvcCA9IG1fY2xpcFJlY3QueSgpOwotICAgICAgICBtX25wV2luZG93LmNs
aXBSZWN0LmxlZnQgPSBtX2NsaXBSZWN0LngoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBJbnRQ
b2ludCBwbHVnaW5Mb2NhdGlvbkluUm9vdFZpZXdDb29yZGluYXRlcyA9IGNvbnZlcnRUb1Jvb3RW
aWV3KEludFBvaW50KCkpOwotICAgICAgICBJbnRQb2ludCBjbGlwUmVjdEluUm9vdFZpZXdDb29y
ZGluYXRlcyA9IGNvbnZlcnRUb1Jvb3RWaWV3KG1fY2xpcFJlY3QubG9jYXRpb24oKSk7Ci0KLSAg
ICAgICAgbV9ucFdpbmRvdy54ID0gcGx1Z2luTG9jYXRpb25JblJvb3RWaWV3Q29vcmRpbmF0ZXMu
eCgpOwotICAgICAgICBtX25wV2luZG93LnkgPSBwbHVnaW5Mb2NhdGlvbkluUm9vdFZpZXdDb29y
ZGluYXRlcy55KCk7Ci0gICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gY2xpcFJlY3RJ
blJvb3RWaWV3Q29vcmRpbmF0ZXMueSgpOwotICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0Lmxl
ZnQgPSBjbGlwUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcy54KCk7Ci0gICAgfQotCi0gICAgbV9u
cFdpbmRvdy53aWR0aCA9IG1fcGx1Z2luU2l6ZS53aWR0aCgpOwotICAgIG1fbnBXaW5kb3cuaGVp
Z2h0ID0gbV9wbHVnaW5TaXplLmhlaWdodCgpOwotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3Qucmln
aHQgPSBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgKyBtX2NsaXBSZWN0LndpZHRoKCk7Ci0gICAg
bV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSBtX25wV2luZG93LmNsaXBSZWN0LnRvcCArIG1f
Y2xpcFJlY3QuaGVpZ2h0KCk7Ci0KLSAgICBOUFBfU2V0V2luZG93KCZtX25wV2luZG93KTsKLSAg
ICBtX2hhc0NhbGxlZFNldFdpbmRvdyA9IHRydWU7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46
OmNhbGxTZXRXaW5kb3dJbnZpc2libGUoKQotewotICAgIE5QV2luZG93IGludmlzaWJsZVdpbmRv
dyA9IG1fbnBXaW5kb3c7Ci0gICAgCi0gICAgaW52aXNpYmxlV2luZG93LndpbmRvdyA9IDA7Ci0g
ICAgaW52aXNpYmxlV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7Ci0gICAgaW52aXNpYmxlV2luZG93
LmNsaXBSZWN0LmxlZnQgPSAwOwotICAgIGludmlzaWJsZVdpbmRvdy5jbGlwUmVjdC5ib3R0b20g
PSAwOwotICAgIGludmlzaWJsZVdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IDA7Ci0gICAgCi0gICAg
TlBQX1NldFdpbmRvdygmaW52aXNpYmxlV2luZG93KTsKLSAgICBtX2hhc0NhbGxlZFNldFdpbmRv
dyA9IHRydWU7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46OnNob3VsZExvYWRTcmNVUkwoKQot
ewotI2lmIFBMQVRGT1JNKFgxMSkKLSAgICAvLyBGbGFzaCBjcmFzaGVzIHdoZW4gTlBQX0dldFZh
bHVlIGlzIGNhbGxlZCBmb3IgTlBQVnBsdWdpbkNhbmNlbFNyY1N0cmVhbSBpbiB3aW5kb3dlZCBt
b2RlLgotICAgIGlmIChtX2lzV2luZG93ZWQgJiYgbV9wbHVnaW5Nb2R1bGUtPnBsdWdpblF1aXJr
cygpLmNvbnRhaW5zKFBsdWdpblF1aXJrczo6RG9Ob3RDYW5jZWxTcmNTdHJlYW1JbldpbmRvd2Vk
TW9kZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi0KLSAgICAvLyBDaGVjayBpZiB3
ZSBzaG91bGQgY2FuY2VsIHRoZSBsb2FkCi0gICAgTlBCb29sIGNhbmNlbFNyY1N0cmVhbSA9IGZh
bHNlOwotCi0gICAgaWYgKE5QUF9HZXRWYWx1ZShOUFBWcGx1Z2luQ2FuY2VsU3JjU3RyZWFtLCAm
Y2FuY2VsU3JjU3RyZWFtKSAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICByZXR1cm4gIWNhbmNlbFNyY1N0cmVhbTsKLX0KLQotTmV0c2NhcGVQbHVnaW5TdHJl
YW0qIE5ldHNjYXBlUGx1Z2luOjpzdHJlYW1Gcm9tSUQodWludDY0X3Qgc3RyZWFtSUQpCi17Ci0g
ICAgcmV0dXJuIG1fc3RyZWFtcy5nZXQoc3RyZWFtSUQpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1
Z2luOjpzdG9wQWxsU3RyZWFtcygpCi17Ci0gICAgZm9yIChhdXRvJiBzdHJlYW0gOiBjb3B5VG9W
ZWN0b3IobV9zdHJlYW1zLnZhbHVlcygpKSkKLSAgICAgICAgc3RyZWFtLT5zdG9wKE5QUkVTX1VT
RVJfQlJFQUspOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjphbGxvd1BvcHVwcygpIGNvbnN0
Ci17Ci0gICAgaWYgKG1fcGx1Z2luTW9kdWxlLT5wbHVnaW5GdW5jcygpLnZlcnNpb24gPj0gTlBW
RVJTX0hBU19QT1BVUFNfRU5BQkxFRF9TVEFURSkgewotICAgICAgICBpZiAoIW1fcG9wdXBFbmFi
bGVkU3RhdGVzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBtX3BvcHVwRW5hYmxlZFN0
YXRlcy5sYXN0KCk7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IENoZWNrIGlmIHRoZSBjdXJyZW50
IGV2ZW50IGlzIGEgdXNlciBnZXN0dXJlLgotICAgIC8vIFJlYWxseSBvbGQgdmVyc2lvbnMgb2Yg
Rmxhc2ggcmVxdWlyZWQgdGhpcyBmb3IgcG9wdXBzIHRvIHdvcmssIGJ1dCBhbGwgbmV3ZXIgdmVy
c2lvbnMKLSAgICAvLyBzdXBwb3J0IE5QTl9QdXNoUG9wdXBFbmFibGVkU3RhdGUvTlBOX1BvcFBv
cHVwRW5hYmxlZFN0YXRlLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2lmIFBMVUdJTl9BUkNI
SVRFQ1RVUkUoTUFDKQotc3RhdGljIGJvb2wgaXNUcmFuc3BhcmVudFNpbHZlcmxpZ2h0QmFja2dy
b3VuZFZhbHVlKGNvbnN0IFN0cmluZyYgbG93ZXJjYXNlQmFja2dyb3VuZFZhbHVlKQotewotICAg
IC8vIFRoaXMgY2hlY2tzIGlmIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIHZhbHVlIGlzIHRyYW5zcGFy
ZW50LCBhY2NvcmRpbmcgdG8KLSAgICAvLyB0aGUgZm9ybWF0IGRvY3VtZW50ZWQgYXQgaHR0cDov
L21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2NjODM4MTQ4KFZTLjk1KS5hc3B4Ci0g
ICAgaWYgKGxvd2VyY2FzZUJhY2tncm91bmRWYWx1ZS5zdGFydHNXaXRoKCcjJykpIHsKLSAgICAg
ICAgaWYgKGxvd2VyY2FzZUJhY2tncm91bmRWYWx1ZS5sZW5ndGgoKSA9PSA1ICYmIGxvd2VyY2Fz
ZUJhY2tncm91bmRWYWx1ZVsxXSAhPSAnZicpIHsKLSAgICAgICAgICAgIC8vIEFuIDgtYml0IFJH
QiB2YWx1ZSB3aXRoIGFscGhhIHRyYW5zcGFyZW5jeSwgaW4gdGhlIGZvcm0gI0FSR0IuCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb3dlcmNhc2VC
YWNrZ3JvdW5kVmFsdWUubGVuZ3RoKCkgPT0gOSAmJiAhKGxvd2VyY2FzZUJhY2tncm91bmRWYWx1
ZVsxXSA9PSAnZicgJiYgbG93ZXJjYXNlQmFja2dyb3VuZFZhbHVlWzJdID09ICdmJykpIHsKLSAg
ICAgICAgICAgIC8vIEEgMTYtYml0IFJHQiB2YWx1ZSB3aXRoIGFscGhhIHRyYW5zcGFyZW5jeSwg
aW4gdGhlIGZvcm0gI0FBUlJHR0JCLgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKGxvd2VyY2FzZUJhY2tncm91bmRWYWx1ZS5zdGFydHNXaXRoKCJz
YyMiKSkgewotICAgICAgICBWZWN0b3I8U3RyaW5nPiBjb21wb25lbnRzID0gbG93ZXJjYXNlQmFj
a2dyb3VuZFZhbHVlLnN1YnN0cmluZygzKS5zcGxpdCgnLCcpOwotCi0gICAgICAgIC8vIEFuIFNj
UkdCIHZhbHVlIHdpdGggYWxwaGEgdHJhbnNwYXJlbmN5LCBpbiB0aGUgZm9ybSBzYyNBLFIsRyxC
LgotICAgICAgICBpZiAoY29tcG9uZW50cy5zaXplKCkgPT0gNCkgewotICAgICAgICAgICAgaWYg
KGNvbXBvbmVudHNbMF0udG9Eb3VibGUoKSA8IDEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGxvd2VyY2FzZUJhY2tncm91bmRWYWx1ZSA9
PSAidHJhbnNwYXJlbnQiKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFRoaXMgaXMg
YW4gb3BhcXVlIGNvbG9yLgotICAgIHJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgotCi1ib29sIE5l
dHNjYXBlUGx1Z2luOjppbml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCi17
Ci0gICAgdWludDE2X3QgbW9kZSA9IHBhcmFtZXRlcnMuaXNGdWxsRnJhbWVQbHVnaW4gPyBOUF9G
VUxMIDogTlBfRU1CRUQ7Ci0gICAgCi0gICAgbV9zaG91bGRVc2VNYW51YWxMb2FkZXIgPSBwYXJh
bWV0ZXJzLnNob3VsZFVzZU1hbnVhbExvYWRlcjsKLQotICAgIENTdHJpbmcgbWltZVR5cGVDU3Ry
aW5nID0gcGFyYW1ldGVycy5taW1lVHlwZS51dGY4KCk7Ci0KLSAgICBBU1NFUlQocGFyYW1ldGVy
cy5uYW1lcy5zaXplKCkgPT0gcGFyYW1ldGVycy52YWx1ZXMuc2l6ZSgpKTsKLQotICAgIFZlY3Rv
cjxDU3RyaW5nPiBwYXJhbU5hbWVzOwotICAgIFZlY3RvcjxDU3RyaW5nPiBwYXJhbVZhbHVlczsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMubmFtZXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgU3RyaW5nIHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXJzLm5hbWVzW2ldOwot
Ci0jaWYgUExVR0lOX0FSQ0hJVEVDVFVSRShNQUMpCi0gICAgICAgIGlmIChtX3BsdWdpbk1vZHVs
ZS0+cGx1Z2luUXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtzOjpXYW50c0xvd2VyY2FzZVBh
cmFtZXRlck5hbWVzKSkKLSAgICAgICAgICAgIHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXJOYW1l
LmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7Ci0jZW5kaWYKLQotICAgICAgICBwYXJhbU5hbWVz
LmFwcGVuZChwYXJhbWV0ZXJOYW1lLnV0ZjgoKSk7Ci0gICAgICAgIHBhcmFtVmFsdWVzLmFwcGVu
ZChwYXJhbWV0ZXJzLnZhbHVlc1tpXS51dGY4KCkpOwotICAgIH0KLQotI2lmIFBMQVRGT1JNKFgx
MSkKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFyYW1ldGVycy5taW1l
VHlwZSwgImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikpIHsKLSAgICAgICAgc2l6ZV90
IHdtb2RlSW5kZXggPSBwYXJhbWV0ZXJzLm5hbWVzLmZpbmQoIndtb2RlIik7Ci0gICAgICAgIGlm
ICh3bW9kZUluZGV4ICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgICAgICAvLyBUcmFuc3BhcmVudCB3
aW5kb3cgbW9kZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IFgxMSBiYWNrZW5kLgotICAgICAgICAgICAg
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBhcmFtZXRlcnMudmFsdWVzW3dtb2Rl
SW5kZXhdLCAidHJhbnNwYXJlbnQiKQotICAgICAgICAgICAgICAgIHx8IChtX3BsdWdpbk1vZHVs
ZS0+cGx1Z2luUXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtzOjpGb3JjZUZsYXNoV2luZG93
bGVzc01vZGUpICYmIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBhcmFtZXRlcnMudmFs
dWVzW3dtb2RlSW5kZXhdLCAid2luZG93IikpKQotICAgICAgICAgICAgICAgIHBhcmFtVmFsdWVz
W3dtb2RlSW5kZXhdID0gIm9wYXF1ZSI7Ci0gICAgICAgIH0gZWxzZSBpZiAobV9wbHVnaW5Nb2R1
bGUtPnBsdWdpblF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrczo6Rm9yY2VGbGFzaFdpbmRv
d2xlc3NNb2RlKSkgewotICAgICAgICAgICAgcGFyYW1OYW1lcy5hcHBlbmQoIndtb2RlIik7Ci0g
ICAgICAgICAgICBwYXJhbVZhbHVlcy5hcHBlbmQoIm9wYXF1ZSIpOwotICAgICAgICB9Ci0gICAg
fQotI2VuZGlmCi0KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFyYW1l
dGVycy5taW1lVHlwZSwgImFwcGxpY2F0aW9uL3gtd2Via2l0LXRlc3QtbmV0c2NhcGUiKSkgewot
ICAgICAgICBwYXJhbU5hbWVzLmFwcGVuZCgid2luZG93ZWRQbHVnaW4iKTsKLSAgICAgICAgcGFy
YW1WYWx1ZXMuYXBwZW5kKCJmYWxzZSIpOwotICAgIH0KLQotICAgIC8vIFRoZSBzdHJpbmdzIHRo
YXQgdGhlc2UgcG9pbnRlcnMgcG9pbnQgdG8gYXJlIGtlcHQgYWxpdmUgYnkgcGFyYW1OYW1lcyBh
bmQgcGFyYW1WYWx1ZXMuCi0gICAgVmVjdG9yPGNvbnN0IGNoYXIqPiBuYW1lczsKLSAgICBWZWN0
b3I8Y29uc3QgY2hhcio+IHZhbHVlczsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFt
TmFtZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgbmFtZXMuYXBwZW5kKHBhcmFtTmFtZXNbaV0u
ZGF0YSgpKTsKLSAgICAgICAgdmFsdWVzLmFwcGVuZChwYXJhbVZhbHVlc1tpXS5kYXRhKCkpOwot
ICAgIH0KLQotI2lmIFBMVUdJTl9BUkNISVRFQ1RVUkUoTUFDKQotICAgIGlmIChtX3BsdWdpbk1v
ZHVsZS0+cGx1Z2luUXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtzOjpNYWtlT3BhcXVlVW5s
ZXNzVHJhbnNwYXJlbnRTaWx2ZXJsaWdodEJhY2tncm91bmRBdHRyaWJ1dGVFeGlzdHMpKSB7Ci0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5uYW1lcy5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBhcmFt
ZXRlcnMubmFtZXNbaV0sICJiYWNrZ3JvdW5kIikpIHsKLSAgICAgICAgICAgICAgICBzZXRJc1Ry
YW5zcGFyZW50KGlzVHJhbnNwYXJlbnRTaWx2ZXJsaWdodEJhY2tncm91bmRWYWx1ZShwYXJhbWV0
ZXJzLnZhbHVlc1tpXS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2xheWVy
SG9zdGluZ01vZGUgPSBwYXJhbWV0ZXJzLmxheWVySG9zdGluZ01vZGU7Ci0jZW5kaWYKLQotICAg
IHBsYXRmb3JtUHJlSW5pdGlhbGl6ZSgpOwotCi0gICAgTmV0c2NhcGVQbHVnaW4qIHByZXZpb3Vz
TlBQTmV3UGx1Z2luID0gY3VycmVudE5QUE5ld1BsdWdpbjsKLSAgICAKLSAgICBtX2luTlBQTmV3
ID0gdHJ1ZTsKLSAgICBjdXJyZW50TlBQTmV3UGx1Z2luID0gdGhpczsKLQotICAgIE5QRXJyb3Ig
ZXJyb3IgPSBOUFBfTmV3KGNvbnN0X2Nhc3Q8Y2hhcio+KG1pbWVUeXBlQ1N0cmluZy5kYXRhKCkp
LCBtb2RlLCBuYW1lcy5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Rf
Y2FzdDxjaGFyKio+KG5hbWVzLmRhdGEoKSksIGNvbnN0X2Nhc3Q8Y2hhcioqPih2YWx1ZXMuZGF0
YSgpKSwgMCk7Ci0KLSAgICBtX2luTlBQTmV3ID0gZmFsc2U7Ci0gICAgY3VycmVudE5QUE5ld1Bs
dWdpbiA9IHByZXZpb3VzTlBQTmV3UGx1Z2luOwotCi0gICAgaWYgKGVycm9yICE9IE5QRVJSX05P
X0VSUk9SKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2lzU3RhcnRlZCA9IHRydWU7
Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgY29ycmVjdCBpbiBhbGwgY2FzZXMuCi0gICAg
bV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7Ci0KLSAgICBpZiAoIXBsYXRm
b3JtUG9zdEluaXRpYWxpemUoKSkgewotICAgICAgICBkZXN0cm95KCk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBMb2FkIHRoZSBzcmMgVVJMIGlmIG5lZWRlZC4KLSAg
ICBpZiAoIXBhcmFtZXRlcnMuc2hvdWxkVXNlTWFudWFsTG9hZGVyICYmICFwYXJhbWV0ZXJzLnVy
bC5pc0VtcHR5KCkgJiYgc2hvdWxkTG9hZFNyY1VSTCgpKQotICAgICAgICBsb2FkVVJMKCJHRVQi
LCBwYXJhbWV0ZXJzLnVybC5zdHJpbmcoKSwgU3RyaW5nKCksIEhUVFBIZWFkZXJNYXAoKSwgVmVj
dG9yPHVpbnQ4X3Q+KCksIGZhbHNlLCAwKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAg
ICAKLXZvaWQgTmV0c2NhcGVQbHVnaW46OmRlc3Ryb3koKQotewotICAgIEFTU0VSVChtX2lzU3Rh
cnRlZCk7Ci0KLSAgICAvLyBTdG9wIGFsbCBzdHJlYW1zLgotICAgIHN0b3BBbGxTdHJlYW1zKCk7
Ci0KLSNpZiAhUExVR0lOX0FSQ0hJVEVDVFVSRShNQUMpICYmICFQTFVHSU5fQVJDSElURUNUVVJF
KFVOSVgpCi0gICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOwotICAgIGNhbGxTZXRXaW5kb3coKTsK
LSNlbmRpZgotCi0gICAgTlBQX0Rlc3Ryb3koMCk7Ci0KLSAgICBtX2lzU3RhcnRlZCA9IGZhbHNl
OwotCi0gICAgcGxhdGZvcm1EZXN0cm95KCk7Ci0KLSAgICBtX3RpbWVycy5jbGVhcigpOwotfQot
ICAgIAotdm9pZCBOZXRzY2FwZVBsdWdpbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgQVNTRVJUKG1faXNTdGFydGVkKTsK
LSAgICAKLSAgICBwbGF0Zm9ybVBhaW50KGNvbnRleHQsIGRpcnR5UmVjdCk7Ci19Ci0KLVJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IE5ldHNjYXBlUGx1Z2luOjpzbmFwc2hvdCgpCi17Ci0gICAgaWYg
KCFzdXBwb3J0c1NuYXBzaG90dGluZygpIHx8IG1fcGx1Z2luU2l6ZS5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQVNTRVJUKG1faXNTdGFydGVkKTsKLQotICAgIElu
dFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IG1fcGx1Z2luU2l6ZTsKLSAgICBiYWNraW5nU3RvcmVT
aXplLnNjYWxlKGNvbnRlbnRzU2NhbGVGYWN0b3IoKSk7Ci0KLSAgICBhdXRvIGJpdG1hcCA9IFNo
YXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGJhY2tpbmdTdG9yZVNpemUsIHsgfSk7Ci0g
ICAgYXV0byBjb250ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKLSAgICBp
ZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gRklYTUU6IFdl
IHNob3VsZCByZWFsbHkgY2FsbCBhcHBseURldmljZVNjYWxlRmFjdG9yIGluc3RlYWQgb2Ygc2Nh
bGUsIGJ1dCB0aGF0IGVuZHMgdXAgY2FsbGluZyBpbnRvIFdLU0kKLSAgICAvLyB3aGljaCB3ZSBj
dXJyZW50bHkgZG9uJ3QgaGF2ZSBpbml0aWF0ZWQgaW4gdGhlIHBsdWctaW4gcHJvY2Vzcy4KLSAg
ICBjb250ZXh0LT5zY2FsZShjb250ZW50c1NjYWxlRmFjdG9yKCkpOwotCi0gICAgcGxhdGZvcm1Q
YWludCgqY29udGV4dCwgSW50UmVjdChJbnRQb2ludCgpLCBtX3BsdWdpblNpemUpLCB0cnVlKTsK
LQotICAgIHJldHVybiBiaXRtYXA7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46OmlzVHJhbnNw
YXJlbnQoKQotewotICAgIHJldHVybiBtX2lzVHJhbnNwYXJlbnQ7Ci19Ci0KLWJvb2wgTmV0c2Nh
cGVQbHVnaW46OndhbnRzV2hlZWxFdmVudHMoKQotewotICAgIHJldHVybiBtX3BsdWdpbk1vZHVs
ZS0+cGx1Z2luUXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtzOjpXYW50c1doZWVsRXZlbnRz
KTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6Z2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgSW50
U2l6ZSYgcGx1Z2luU2l6ZSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybSkKLXsKLSAgICBBU1NFUlQobV9pc1N0
YXJ0ZWQpOwotCi0gICAgaWYgKHBsdWdpblNpemUgPT0gbV9wbHVnaW5TaXplICYmIG1fY2xpcFJl
Y3QgPT0gY2xpcFJlY3QgJiYgbV9wbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtID09IHBsdWdpblRv
Um9vdFZpZXdUcmFuc2Zvcm0pIHsKLSAgICAgICAgLy8gTm90aGluZyB0byBkby4KLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGJvb2wgc2hvdWxkQ2FsbFNldFdpbmRvdyA9IHRydWU7Ci0K
LSAgICAvLyBJZiB0aGUgcGx1Zy1pbiBkb2Vzbid0IHdhbnQgd2luZG93IHJlbGF0aXZlIGNvb3Jk
aW5hdGVzLCB3ZSBkb24ndCBuZWVkIHRvIGNhbGwgc2V0V2luZG93IHVubGVzcyBpdHMgc2l6ZSBv
ciBjbGlwIHJlY3QgY2hhbmdlcy4KLSAgICBpZiAobV9oYXNDYWxsZWRTZXRXaW5kb3cgJiYgd2Fu
dHNQbHVnaW5SZWxhdGl2ZU5QV2luZG93Q29vcmRpbmF0ZXMoKSAmJiBtX3BsdWdpblNpemUgPT0g
cGx1Z2luU2l6ZSAmJiBtX2NsaXBSZWN0ID09IGNsaXBSZWN0KQotICAgICAgICBzaG91bGRDYWxs
U2V0V2luZG93ID0gZmFsc2U7Ci0KLSAgICBtX3BsdWdpblNpemUgPSBwbHVnaW5TaXplOwotICAg
IG1fY2xpcFJlY3QgPSBjbGlwUmVjdDsKLSAgICBtX3BsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0g
PSBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtOwotCi0jaWYgUExVR0lOX0FSQ0hJVEVDVFVSRShV
TklYKQotICAgIEludFBvaW50IGZyYW1lUmVjdExvY2F0aW9uSW5XaW5kb3dDb29yZGluYXRlcyA9
IG1fcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybS5tYXBQb2ludChJbnRQb2ludCgpKTsKLSAgICBt
X2ZyYW1lUmVjdEluV2luZG93Q29vcmRpbmF0ZXMgPSBJbnRSZWN0KGZyYW1lUmVjdExvY2F0aW9u
SW5XaW5kb3dDb29yZGluYXRlcywgbV9wbHVnaW5TaXplKTsKLSNlbmRpZgotCi0gICAgcGxhdGZv
cm1HZW9tZXRyeURpZENoYW5nZSgpOwotCi0gICAgaWYgKCFzaG91bGRDYWxsU2V0V2luZG93KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBjYWxsU2V0V2luZG93KCk7Ci19Ci0KLXZvaWQgTmV0c2Nh
cGVQbHVnaW46OnZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCBpc1Zpc2libGUpCi17Ci0gICAgQVNT
RVJUKG1faXNTdGFydGVkKTsKLQotICAgIGlmIChtX2lzVmlzaWJsZSA9PSBpc1Zpc2libGUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1faXNWaXNpYmxlID0gaXNWaXNpYmxlOwotICAgIHBsYXRm
b3JtVmlzaWJpbGl0eURpZENoYW5nZSgpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpmcmFt
ZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QgcmVxdWVzdElEKQotewotICAgIEFTU0VSVChtX2lz
U3RhcnRlZCk7Ci0gICAgCi0gICAgYXV0byBub3RpZmljYXRpb24gPSBtX3BlbmRpbmdVUkxOb3Rp
ZmljYXRpb25zLnRha2UocmVxdWVzdElEKTsKLSAgICBpZiAobm90aWZpY2F0aW9uLmZpcnN0Lmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlBQX1VSTE5vdGlmeShub3RpZmljYXRp
b24uZmlyc3QudXRmOCgpLmRhdGEoKSwgTlBSRVNfRE9ORSwgbm90aWZpY2F0aW9uLnNlY29uZCk7
Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OmZyYW1lRGlkRmFpbCh1aW50NjRfdCByZXF1ZXN0
SUQsIGJvb2wgd2FzQ2FuY2VsbGVkKQotewotICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7Ci0gICAg
Ci0gICAgYXV0byBub3RpZmljYXRpb24gPSBtX3BlbmRpbmdVUkxOb3RpZmljYXRpb25zLnRha2Uo
cmVxdWVzdElEKTsKLSAgICBpZiAobm90aWZpY2F0aW9uLmZpcnN0LmlzTnVsbCgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgTlBQX1VSTE5vdGlmeShub3RpZmljYXRpb24uZmlyc3QudXRm
OCgpLmRhdGEoKSwgd2FzQ2FuY2VsbGVkID8gTlBSRVNfVVNFUl9CUkVBSyA6IE5QUkVTX05FVFdP
UktfRVJSLCBub3RpZmljYXRpb24uc2Vjb25kKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6
ZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgU3RyaW5nJiBy
ZXN1bHQpCi17Ci0gICAgQVNTRVJUKG1faXNTdGFydGVkKTsKLSAgICAKLSAgICBpZiAoTmV0c2Nh
cGVQbHVnaW5TdHJlYW0qIHBsdWdpblN0cmVhbSA9IHN0cmVhbUZyb21JRChyZXF1ZXN0SUQpKQot
ICAgICAgICBwbHVnaW5TdHJlYW0tPnNlbmRKYXZhU2NyaXB0U3RyZWFtKHJlc3VsdCk7Ci19Ci0K
LXZvaWQgTmV0c2NhcGVQbHVnaW46OnN0cmVhbVdpbGxTZW5kUmVxdWVzdCh1aW50NjRfdCBzdHJl
YW1JRCwgY29uc3QgVVJMJiByZXF1ZXN0VVJMLCBjb25zdCBVUkwmIHJlZGlyZWN0UmVzcG9uc2VV
UkwsIGludCByZWRpcmVjdFJlc3BvbnNlU3RhdHVzKQotewotICAgIEFTU0VSVChtX2lzU3RhcnRl
ZCk7Ci0KLSAgICBpZiAoTmV0c2NhcGVQbHVnaW5TdHJlYW0qIHBsdWdpblN0cmVhbSA9IHN0cmVh
bUZyb21JRChzdHJlYW1JRCkpCi0gICAgICAgIHBsdWdpblN0cmVhbS0+d2lsbFNlbmRSZXF1ZXN0
KHJlcXVlc3RVUkwsIHJlZGlyZWN0UmVzcG9uc2VVUkwsIHJlZGlyZWN0UmVzcG9uc2VTdGF0dXMp
OwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpzdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UodWlu
dDY0X3Qgc3RyZWFtSUQsIGNvbnN0IFVSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVhbUxl
bmd0aCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu
dDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3Ry
aW5nJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcmIC8qIHN1Z2dlc3RlZEZpbGVOYW1lICovKQotewot
ICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7Ci0gICAgCi0gICAgaWYgKE5ldHNjYXBlUGx1Z2luU3Ry
ZWFtKiBwbHVnaW5TdHJlYW0gPSBzdHJlYW1Gcm9tSUQoc3RyZWFtSUQpKQotICAgICAgICBwbHVn
aW5TdHJlYW0tPmRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZVVSTCwgc3RyZWFtTGVuZ3RoLCBs
YXN0TW9kaWZpZWRUaW1lLCBtaW1lVHlwZSwgaGVhZGVycyk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQ
bHVnaW46OnN0cmVhbURpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCB1aW50
OF90KiBieXRlcywgaW50IGxlbmd0aCkKLXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwotICAg
IAotICAgIGlmIChOZXRzY2FwZVBsdWdpblN0cmVhbSogcGx1Z2luU3RyZWFtID0gc3RyZWFtRnJv
bUlEKHN0cmVhbUlEKSkKLSAgICAgICAgcGx1Z2luU3RyZWFtLT5kaWRSZWNlaXZlRGF0YShieXRl
cywgbGVuZ3RoKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6c3RyZWFtRGlkRmluaXNoTG9h
ZGluZyh1aW50NjRfdCBzdHJlYW1JRCkKLXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwotICAg
IAotICAgIGlmIChOZXRzY2FwZVBsdWdpblN0cmVhbSogcGx1Z2luU3RyZWFtID0gc3RyZWFtRnJv
bUlEKHN0cmVhbUlEKSkKLSAgICAgICAgcGx1Z2luU3RyZWFtLT5kaWRGaW5pc2hMb2FkaW5nKCk7
Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OnN0cmVhbURpZEZhaWwodWludDY0X3Qgc3RyZWFt
SUQsIGJvb2wgd2FzQ2FuY2VsbGVkKQotewotICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7Ci0gICAg
Ci0gICAgaWYgKE5ldHNjYXBlUGx1Z2luU3RyZWFtKiBwbHVnaW5TdHJlYW0gPSBzdHJlYW1Gcm9t
SUQoc3RyZWFtSUQpKQotICAgICAgICBwbHVnaW5TdHJlYW0tPmRpZEZhaWwod2FzQ2FuY2VsbGVk
KTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6bWFudWFsU3RyZWFtRGlkUmVjZWl2ZVJlc3Bv
bnNlKGNvbnN0IFVSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwgdWludDMy
X3QgbGFzdE1vZGlmaWVkVGltZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBo
ZWFkZXJzLCBjb25zdCBTdHJpbmcmIC8qIHN1Z2dlc3RlZEZpbGVOYW1lICovKQotewotICAgIEFT
U0VSVChtX2lzU3RhcnRlZCk7Ci0gICAgQVNTRVJUKG1fc2hvdWxkVXNlTWFudWFsTG9hZGVyKTsK
LSAgICBBU1NFUlQoIW1fbWFudWFsU3RyZWFtKTsKLSAgICAKLSAgICBtX21hbnVhbFN0cmVhbSA9
IE5ldHNjYXBlUGx1Z2luU3RyZWFtOjpjcmVhdGUoKnRoaXMsIDAsIHJlc3BvbnNlVVJMLnN0cmlu
ZygpLCBmYWxzZSwgMCk7Ci0gICAgbV9tYW51YWxTdHJlYW0tPmRpZFJlY2VpdmVSZXNwb25zZShy
ZXNwb25zZVVSTCwgc3RyZWFtTGVuZ3RoLCBsYXN0TW9kaWZpZWRUaW1lLCBtaW1lVHlwZSwgaGVh
ZGVycyk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVE
YXRhKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBpbnQgbGVuZ3RoKQotewotICAgIEFTU0VSVChtX2lz
U3RhcnRlZCk7Ci0gICAgQVNTRVJUKG1fc2hvdWxkVXNlTWFudWFsTG9hZGVyKTsKLSAgICBBU1NF
UlQobV9tYW51YWxTdHJlYW0pOwotCi0gICAgbV9tYW51YWxTdHJlYW0tPmRpZFJlY2VpdmVEYXRh
KGJ5dGVzLCBsZW5ndGgpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjptYW51YWxTdHJlYW1E
aWRGaW5pc2hMb2FkaW5nKCkKLXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwotICAgIEFTU0VS
VChtX3Nob3VsZFVzZU1hbnVhbExvYWRlcik7Ci0gICAgQVNTRVJUKG1fbWFudWFsU3RyZWFtKTsK
LQotICAgIG1fbWFudWFsU3RyZWFtLT5kaWRGaW5pc2hMb2FkaW5nKCk7Ci19Ci0KLXZvaWQgTmV0
c2NhcGVQbHVnaW46Om1hbnVhbFN0cmVhbURpZEZhaWwoYm9vbCB3YXNDYW5jZWxsZWQpCi17Ci0g
ICAgQVNTRVJUKG1faXNTdGFydGVkKTsKLSAgICBBU1NFUlQobV9zaG91bGRVc2VNYW51YWxMb2Fk
ZXIpOwotCi0gICAgaWYgKCFtX21hbnVhbFN0cmVhbSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1f
bWFudWFsU3RyZWFtLT5kaWRGYWlsKHdhc0NhbmNlbGxlZCk7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQ
bHVnaW46OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCkK
LXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwotICAgIAotICAgIHJldHVybiBwbGF0Zm9ybUhh
bmRsZU1vdXNlRXZlbnQobW91c2VFdmVudCk7Ci19Ci0gICAgCi1ib29sIE5ldHNjYXBlUGx1Z2lu
OjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCi17Ci0g
ICAgQVNTRVJUKG1faXNTdGFydGVkKTsKLQotICAgIHJldHVybiBwbGF0Zm9ybUhhbmRsZVdoZWVs
RXZlbnQod2hlZWxFdmVudCk7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46OmhhbmRsZU1vdXNl
RW50ZXJFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQotewotICAgIEFTU0VS
VChtX2lzU3RhcnRlZCk7Ci0KLSAgICByZXR1cm4gcGxhdGZvcm1IYW5kbGVNb3VzZUVudGVyRXZl
bnQobW91c2VFdmVudCk7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46OmhhbmRsZU1vdXNlTGVh
dmVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQotewotICAgIEFTU0VSVCht
X2lzU3RhcnRlZCk7Ci0KLSAgICByZXR1cm4gcGxhdGZvcm1IYW5kbGVNb3VzZUxlYXZlRXZlbnQo
bW91c2VFdmVudCk7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46OmhhbmRsZUNvbnRleHRNZW51
RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpCi17Ci0gICAgLy8gV2UgZG9uJ3Qga25vdyBpZiB0
aGUgcGx1Zy1pbiBoYXMgaGFuZGxlZCBtb3VzZWRvd24gZXZlbnQgYnkgZGlzcGxheWluZyBhIGNv
bnRleHQgbWVudSwgc28gd2UgbmV2ZXIgd2FudCBXZWJLaXQgdG8gc2hvdyBhIGRlZmF1bHQgb25l
LgotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjpoYW5kbGVLZXli
b2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQpCi17Ci0gICAg
QVNTRVJUKG1faXNTdGFydGVkKTsKLQotICAgIHJldHVybiBwbGF0Zm9ybUhhbmRsZUtleWJvYXJk
RXZlbnQoa2V5Ym9hcmRFdmVudCk7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46OmhhbmRsZUVk
aXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgLyogY29tbWFuZE5hbWUgKi8sIGNvbnN0IFN0cmlu
ZyYgLyogYXJndW1lbnQgKi8pCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIE5ldHNj
YXBlUGx1Z2luOjppc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIC8qIGNvbW1h
bmROYW1lICovKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdp
bjo6c2hvdWxkQWxsb3dTY3JpcHRpbmcoKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IE5ldHNjYXBlUGx1Z2luOjpzaG91bGRBbGxvd05hdmlnYXRpb25Gcm9tRHJhZ3MoKQotewotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6aGFuZGxlc1BhZ2VTY2Fs
ZUZhY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIE5ldHNjYXBl
UGx1Z2luOjpzZXRGb2N1cyhib29sIGhhc0ZvY3VzKQotewotICAgIEFTU0VSVChtX2lzU3RhcnRl
ZCk7Ci0KLSAgICBwbGF0Zm9ybVNldEZvY3VzKGhhc0ZvY3VzKTsKLX0KLQotTlBPYmplY3QqIE5l
dHNjYXBlUGx1Z2luOjpwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKQotewotICAgIEFTU0VSVCht
X2lzU3RhcnRlZCk7Ci0gICAgTlBPYmplY3QqIHNjcmlwdGFibGVOUE9iamVjdCA9IDA7Ci0gICAg
Ci0gICAgaWYgKE5QUF9HZXRWYWx1ZShOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAmc2Ny
aXB0YWJsZU5QT2JqZWN0KSAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSNpZiBQTFVHSU5fQVJDSElURUNUVVJFKE1BQykKLSAgICBpZiAobV9wbHVnaW5Nb2R1bGUtPnBs
dWdpblF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrczo6UmV0dXJuc05vblJldGFpbmVkU2Ny
aXB0YWJsZU5QT2JqZWN0KSkKLSAgICAgICAgcmV0YWluTlBPYmplY3Qoc2NyaXB0YWJsZU5QT2Jq
ZWN0KTsgICAgICAgIAotI2VuZGlmICAgIAotCi0gICAgcmV0dXJuIHNjcmlwdGFibGVOUE9iamVj
dDsKLX0KLSAgICAKLXVuc2lnbmVkIE5ldHNjYXBlUGx1Z2luOjpjb3VudEZpbmRNYXRjaGVzKGNv
bnN0IFN0cmluZyYsIFdlYkNvcmU6OkZpbmRPcHRpb25zLCB1bnNpZ25lZCkKLXsKLSAgICByZXR1
cm4gMDsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcm
LCBXZWJDb3JlOjpGaW5kT3B0aW9ucywgdW5zaWduZWQpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdlZChmbG9h
dCBzY2FsZUZhY3RvcikKLXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwotCi0jaWYgUExVR0lO
X0FSQ0hJVEVDVFVSRShNQUMpCi0gICAgZG91YmxlIGNvbnRlbnRzU2NhbGVGYWN0b3IgPSBzY2Fs
ZUZhY3RvcjsKLSAgICBOUFBfU2V0VmFsdWUoTlBOVmNvbnRlbnRzU2NhbGVGYWN0b3IsICZjb250
ZW50c1NjYWxlRmFjdG9yKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNjYWxlRmFjdG9yKTsK
LSNlbmRpZgotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpzdG9yYWdlQmxvY2tpbmdTdGF0ZUNo
YW5nZWQoYm9vbCBzdG9yYWdlQmxvY2tpbmdFbmFibGVkKQotewotICAgIGlmIChtX3N0b3JhZ2VC
bG9ja2luZ1N0YXRlICE9IHN0b3JhZ2VCbG9ja2luZ0VuYWJsZWQpIHsKLSAgICAgICAgbV9zdG9y
YWdlQmxvY2tpbmdTdGF0ZSA9IHN0b3JhZ2VCbG9ja2luZ0VuYWJsZWQ7Ci0gICAgICAgIHVwZGF0
ZU5QTlByaXZhdGVNb2RlKCk7Ci0gICAgfQotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpwcml2
YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkKQotewot
ICAgIGlmIChtX3ByaXZhdGVCcm93c2luZ1N0YXRlICE9IHByaXZhdGVCcm93c2luZ0VuYWJsZWQp
IHsKLSAgICAgICAgbV9wcml2YXRlQnJvd3NpbmdTdGF0ZSA9IHByaXZhdGVCcm93c2luZ0VuYWJs
ZWQ7Ci0gICAgICAgIHVwZGF0ZU5QTlByaXZhdGVNb2RlKCk7Ci0gICAgfQotfQotCi12b2lkIE5l
dHNjYXBlUGx1Z2luOjp1cGRhdGVOUE5Qcml2YXRlTW9kZSgpCi17Ci0gICAgQVNTRVJUKG1faXNT
dGFydGVkKTsKLQotICAgIC8vIEZyb20gaHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL1BsdWdpbnM6
UHJpdmF0ZU1vZGUKLSAgICAvLyAgIFdoZW4gdGhlIGJyb3dzZXIgdHVybnMgcHJpdmF0ZSBtb2Rl
IG9uIG9yIG9mZiBpdCB3aWxsIGNhbGwgTlBQX1NldFZhbHVlIGZvciAiTlBOVnByaXZhdGVNb2Rl
Qm9vbCIgCi0gICAgLy8gICAoYXNzaWduZWQgZW51bSB2YWx1ZSAxOCkgd2l0aCBhIHBvaW50ZXIg
dG8gYW4gTlBCb29sIHZhbHVlIG9uIGFsbCBhcHBsaWNhYmxlIGluc3RhbmNlcy4KLSAgICAvLyAg
IFBsdWdpbnMgc2hvdWxkIGNoZWNrIHRoZSBib29sZWFuIHZhbHVlIHBvaW50ZWQgdG8sIG5vdCB0
aGUgcG9pbnRlciBpdHNlbGYuIAotICAgIC8vICAgVGhlIHZhbHVlIHdpbGwgYmUgdHJ1ZSB3aGVu
IHByaXZhdGUgbW9kZSBpcyBvbi4KLSAgICBOUEJvb2wgdmFsdWUgPSBtX3ByaXZhdGVCcm93c2lu
Z1N0YXRlIHx8IG1fc3RvcmFnZUJsb2NraW5nU3RhdGU7Ci0gICAgTlBQX1NldFZhbHVlKE5QTlZw
cml2YXRlTW9kZUJvb2wsICZ2YWx1ZSk7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46OmdldEZv
cm1WYWx1ZShTdHJpbmcmIGZvcm1WYWx1ZSkKLXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwot
Ci0gICAgY2hhciogZm9ybVZhbHVlU3RyaW5nID0gMDsKLSAgICBpZiAoTlBQX0dldFZhbHVlKE5Q
UFZmb3JtVmFsdWUsICZmb3JtVmFsdWVTdHJpbmcpICE9IE5QRVJSX05PX0VSUk9SKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3JtVmFsdWUgPSBTdHJpbmc6OmZyb21VVEY4KGZvcm1W
YWx1ZVN0cmluZyk7Ci0KLSAgICAvLyBUaGUgcGx1Zy1pbiBhbGxvY2F0ZXMgdGhlIGZvcm0gdmFs
dWUgc3RyaW5nIHdpdGggTlBOX01lbUFsbG9jIHNvIGl0IG5lZWRzIHRvIGJlIGZyZWVkIHdpdGgg
TlBOX01lbUZyZWUuCi0gICAgbnBuTWVtRnJlZShmb3JtVmFsdWVTdHJpbmcpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjpoYW5kbGVTY3JvbGwoU2Nyb2xsRGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVNj
cm9sbGJhciogTmV0c2NhcGVQbHVnaW46Omhvcml6b250YWxTY3JvbGxiYXIoKQotewotICAgIHJl
dHVybiAwOwotfQotCi1TY3JvbGxiYXIqIE5ldHNjYXBlUGx1Z2luOjp2ZXJ0aWNhbFNjcm9sbGJh
cigpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46OnN1cHBvcnRz
U25hcHNob3R0aW5nKCkgY29uc3QKLXsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICByZXR1cm4g
bV9wbHVnaW5Nb2R1bGUtPnBsdWdpblF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrczo6U3Vw
cG9ydHNTbmFwc2hvdHRpbmcpOwotI2VuZGlmCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1SZWZQ
dHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBOZXRzY2FwZVBsdWdpbjo6bGl2ZVJlc291cmNlRGF0
YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUludFBvaW50IE5ldHNjYXBl
UGx1Z2luOjpjb252ZXJ0VG9Sb290Vmlldyhjb25zdCBJbnRQb2ludCYgcG9pbnRJblBsdWdpbkNv
b3JkaW5hdGVzKSBjb25zdAotewotICAgIHJldHVybiBtX3BsdWdpblRvUm9vdFZpZXdUcmFuc2Zv
cm0ubWFwUG9pbnQocG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzKTsKLX0KLQotYm9vbCBOZXRzY2Fw
ZVBsdWdpbjo6Y29udmVydEZyb21Sb290Vmlldyhjb25zdCBJbnRQb2ludCYgcG9pbnRJblJvb3RW
aWV3Q29vcmRpbmF0ZXMsIEludFBvaW50JiBwb2ludEluUGx1Z2luQ29vcmRpbmF0ZXMpCi17Ci0g
ICAgaWYgKGF1dG8gaW52ZXJzZSA9IG1fcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybS5pbnZlcnNl
KCkpIHsKLSAgICAgICAgcG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzID0gaW52ZXJzZS52YWx1ZSgp
Lm1hcFBvaW50KHBvaW50SW5Sb290Vmlld0Nvb3JkaW5hdGVzKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6
bXV0ZWRTdGF0ZUNoYW5nZWQoYm9vbCBtdXRlZCkKLXsKLSAgICBOUEJvb2wgdmFsdWUgPSBtdXRl
ZDsKLSAgICBOUFBfU2V0VmFsdWUoTlBOVm11dGVBdWRpb0Jvb2wsICZ2YWx1ZSk7Ci19Ci0KLSNp
ZiAhUExBVEZPUk0oQ09DT0EpCi0gICAgCi12b2lkIE5ldHNjYXBlUGx1Z2luOjp3aW5kb3dGb2N1
c0NoYW5nZWQoYm9vbCkKLXsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6d2luZG93VmlzaWJp
bGl0eUNoYW5nZWQoYm9vbCkKLXsKLX0KLQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5o
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVn
aW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU4MmI2NjUyZmE1MDFkNmU3N2Rj
MjQyOTA2YjQxZGVhMmIwNWRjMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRz
Y2FwZVBsdWdpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzgwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0K
LSNpbmNsdWRlICJOZXRzY2FwZVBsdWdpbk1vZHVsZS5oIgotI2luY2x1ZGUgIlBsdWdpbi5oIgot
I2luY2x1ZGUgPFdlYkNvcmUvQWZmaW5lVHJhbnNmb3JtLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVz
cGFjZSBXVEYgewotY2xhc3MgTWFjaFNlbmRSaWdodDsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotY2xhc3MgRWxlbWVudDsKLWNsYXNzIEhUVFBIZWFkZXJNYXA7Ci1jbGFzcyBQcm90ZWN0aW9u
U3BhY2U7Ci1jbGFzcyBTaGFyZWRCdWZmZXI7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1j
bGFzcyBOZXRzY2FwZVBsdWdpblN0cmVhbTsKLWNsYXNzIE5ldHNjYXBlUGx1Z2luVW5peDsKLQot
Y2xhc3MgTmV0c2NhcGVQbHVnaW4gOiBwdWJsaWMgUGx1Z2luIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBjcmVhdGUoUmVmUHRyPE5ldHNjYXBlUGx1Z2luTW9k
dWxlPiYmKTsKLSAgICB2aXJ0dWFsIH5OZXRzY2FwZVBsdWdpbigpOwotCi0gICAgc3RhdGljIFJl
ZlB0cjxOZXRzY2FwZVBsdWdpbj4gZnJvbU5QUChOUFApOwotCi0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci0gICAgTlBFcnJvciBzZXREcmF3aW5nTW9kZWwoTlBEcmF3aW5nTW9kZWwpOwotICAgIE5QRXJy
b3Igc2V0RXZlbnRNb2RlbChOUEV2ZW50TW9kZWwpOwotICAgIE5QQm9vbCBjb252ZXJ0UG9pbnQo
ZG91YmxlIHNvdXJjZVgsIGRvdWJsZSBzb3VyY2VZLCBOUENvb3JkaW5hdGVTcGFjZSBzb3VyY2VT
cGFjZSwgZG91YmxlJiBkZXN0WCwgZG91YmxlJiBkZXN0WSwgTlBDb29yZGluYXRlU3BhY2UgZGVz
dFNwYWNlKTsKLSAgICBOUEVycm9yIHBvcFVwQ29udGV4dE1lbnUoTlBNZW51Kik7Ci0KLSAgICB2
b2lkIHNldFBsdWdpblJldHVybnNOb25yZXRhaW5lZExheWVyKGJvb2wgcGx1Z2luUmV0dXJuc05v
bnJldGFpbmVkTGF5ZXIpIHsgbV9wbHVnaW5SZXR1cm5zTm9ucmV0YWluZWRMYXllciA9IHBsdWdp
blJldHVybnNOb25yZXRhaW5lZExheWVyOyB9Ci0gICAgdm9pZCBzZXRQbHVnaW5XYW50c0xlZ2Fj
eUNvY29hVGV4dElucHV0KGJvb2wgcGx1Z2luV2FudHNMZWdhY3lDb2NvYVRleHRJbnB1dCkgeyBt
X3BsdWdpbldhbnRzTGVnYWN5Q29jb2FUZXh0SW5wdXQgPSBwbHVnaW5XYW50c0xlZ2FjeUNvY29h
VGV4dElucHV0OyB9Ci0KLSAgICBib29sIGhhc0hhbmRsZWRBS2V5RG93bkV2ZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNIYW5kbGVkQUtleURvd25FdmVudDsgfQotCi0gICAgY29uc3QgV1RGOjpN
YWNoU2VuZFJpZ2h0JiBjb21wb3NpdGluZ1JlbmRlclNlcnZlclBvcnQoKTsKLQotICAgIC8vIENv
bXB1dGVzIGFuIGFmZmluZSB0cmFuc2Zvcm0gZnJvbSB0aGUgZ2l2ZW4gY29vcmRpbmF0ZSBzcGFj
ZSB0byB0aGUgc2NyZWVuIGNvb3JkaW5hdGUgc3BhY2UuCi0gICAgYm9vbCBnZXRTY3JlZW5UcmFu
c2Zvcm0oTlBDb29yZGluYXRlU3BhY2Ugc291cmNlU3BhY2UsIFdlYkNvcmU6OkFmZmluZVRyYW5z
Zm9ybSYpOwotI2VuZGlmCi0KLSNpZiBQTFVHSU5fQVJDSElURUNUVVJFKFVOSVgpCi0gICAgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgZnJhbWVSZWN0SW5XaW5kb3dDb29yZGluYXRlcygpIGNvbnN0
IHsgcmV0dXJuIG1fZnJhbWVSZWN0SW5XaW5kb3dDb29yZGluYXRlczsgfQotI2VuZGlmCi0gICAg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaXBS
ZWN0OyB9Ci0gICAgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcGx1Z2luU2l6ZTsgfQotCi0gICAgUGx1Z2luUXVpcmtzIHF1aXJrcygpIGNvbnN0IHsgcmV0
dXJuIG1fcGx1Z2luTW9kdWxlLT5wbHVnaW5RdWlya3MoKTsgfQotCi0gICAgdm9pZCBpbnZhbGlk
YXRlKGNvbnN0IE5QUmVjdCopOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiB1c2VyQWdlbnQoTlBQ
KTsKLSAgICB2b2lkIGxvYWRVUkwoY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFN0cmluZyYg
dXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRl
ck1hcCYgaGVhZGVyRmllbGRzLAotICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8dWludDhf
dD4mIGh0dHBCb2R5LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmaWNhdGlvbkRh
dGEpOwotICAgIE5QRXJyb3IgZGVzdHJveVN0cmVhbShOUFN0cmVhbSosIE5QUmVhc29uKTsKLSAg
ICB2b2lkIHNldElzV2luZG93ZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRJc1RyYW5zcGFyZW50KGJv
b2wpOwotICAgIHZvaWQgc2V0U3RhdHVzYmFyVGV4dChjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0
aWMgdm9pZCBzZXRFeGNlcHRpb24oY29uc3QgU3RyaW5nJik7Ci0gICAgYm9vbCBldmFsdWF0ZShO
UE9iamVjdCosIGNvbnN0IFN0cmluZyZzY3JpcHRTdHJpbmcsIE5QVmFyaWFudCogcmVzdWx0KTsK
LSAgICBib29sIGlzUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOwotICAgIGJvb2wgaXNNdXRlZCgp
IGNvbnN0OwotICAgIGJvb2wgaXNXaW5kb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNXaW5kb3dl
ZDsgfQotICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc1Zpc2libGU7IH0K
LQotICAgIHN0YXRpYyB2b2lkIHNldFNldEV4Y2VwdGlvbkZ1bmN0aW9uKHZvaWQgKCopKGNvbnN0
IFN0cmluZyYpKTsKLQotICAgIC8vIFRoZXNlIHJldHVybiByZXRhaW5lZCBvYmplY3RzLgotICAg
IE5QT2JqZWN0KiB3aW5kb3dTY3JpcHROUE9iamVjdCgpOwotICAgIE5QT2JqZWN0KiBwbHVnaW5F
bGVtZW50TlBPYmplY3QoKTsKLQotICAgIHZvaWQgY2FuY2VsU3RyZWFtTG9hZChOZXRzY2FwZVBs
dWdpblN0cmVhbSopOwotICAgIHZvaWQgcmVtb3ZlUGx1Z2luU3RyZWFtKE5ldHNjYXBlUGx1Z2lu
U3RyZWFtKik7Ci0KLSAgICBib29sIGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKTsK
LQotICAgIHZvaWQgcHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShib29sIGVuYWJsZWQpOwotICAgIHZv
aWQgcG9wUG9wdXBzRW5hYmxlZFN0YXRlKCk7Ci0KLSAgICB2b2lkIHBsdWdpblRocmVhZEFzeW5j
Q2FsbCh2b2lkICgqZnVuY3Rpb24pKHZvaWQqKSwgdm9pZCogdXNlckRhdGEpOwotCi0gICAgdW5z
aWduZWQgc2NoZWR1bGVUaW1lcih1bnNpZ25lZCBpbnRlcnZhbCwgYm9vbCByZXBlYXQsIHZvaWQg
KCp0aW1lckZ1bmMpKE5QUCwgdW5zaWduZWQgdGltZXJJRCkpOwotICAgIHZvaWQgdW5zY2hlZHVs
ZVRpbWVyKHVuc2lnbmVkIHRpbWVySUQpOwotCi0gICAgZG91YmxlIGNvbnRlbnRzU2NhbGVGYWN0
b3IoKTsKLSAgICBTdHJpbmcgcHJveGllc0ZvclVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7
Ci0gICAgU3RyaW5nIGNvb2tpZXNGb3JVUkwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOwotICAg
IHZvaWQgc2V0Q29va2llc0ZvclVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgU3Ry
aW5nJiBjb29raWVTdHJpbmcpOwotICAgIGJvb2wgZ2V0QXV0aGVudGljYXRpb25JbmZvKGNvbnN0
IFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZSYsIFN0cmluZyYgdXNlcm5hbWUsIFN0cmluZyYgcGFz
c3dvcmQpOwotCi0gICAgdm9pZCBzZXRJc1BsYXlpbmdBdWRpbyhib29sKTsKLQotICAgIHZvaWQg
cmVnaXN0ZXJSZWRpcmVjdChOZXRzY2FwZVBsdWdpblN0cmVhbSosIGNvbnN0IFVSTCYgcmVxdWVz
dFVSTCwgaW50IHJlZGlyZWN0UmVzcG9uc2VTdGF0dXMsIHZvaWQqIG5vdGlmaWNhdGlvbkRhdGEp
OwotICAgIHZvaWQgdXJsUmVkaXJlY3RSZXNwb25zZSh2b2lkKiBub3RpZnlEYXRhLCBib29sIGFs
bG93KTsKLQotICAgIC8vIE1lbWJlciBmdW5jdGlvbnMgZm9yIGNhbGxpbmcgaW50byB0aGUgcGx1
Zy1pbi4KLSAgICBOUEVycm9yIE5QUF9OZXcoTlBNSU1FVHlwZSBwbHVnaW5UeXBlLCB1aW50MTZf
dCBtb2RlLCBpbnQxNl90IGFyZ2MsIGNoYXIqIGFyZ25bXSwgY2hhciogYXJndltdLCBOUFNhdmVk
RGF0YSopOwotICAgIE5QRXJyb3IgTlBQX0Rlc3Ryb3koTlBTYXZlZERhdGEqKik7Ci0gICAgTlBF
cnJvciBOUFBfU2V0V2luZG93KE5QV2luZG93Kik7Ci0gICAgTlBFcnJvciBOUFBfTmV3U3RyZWFt
KE5QTUlNRVR5cGUsIE5QU3RyZWFtKiwgTlBCb29sIHNlZWthYmxlLCB1aW50MTZfdCogc3R5cGUp
OwotICAgIE5QRXJyb3IgTlBQX0Rlc3Ryb3lTdHJlYW0oTlBTdHJlYW0qLCBOUFJlYXNvbik7Ci0g
ICAgdm9pZCBOUFBfU3RyZWFtQXNGaWxlKE5QU3RyZWFtKiwgY29uc3QgY2hhciogZmlsZW5hbWUp
OwotICAgIGludDMyX3QgTlBQX1dyaXRlUmVhZHkoTlBTdHJlYW0qKTsKLSAgICBpbnQzMl90IE5Q
UF9Xcml0ZShOUFN0cmVhbSosIGludDMyX3Qgb2Zmc2V0LCBpbnQzMl90IGxlbiwgdm9pZCogYnVm
ZmVyKTsKLSAgICBpbnQxNl90IE5QUF9IYW5kbGVFdmVudCh2b2lkKiBldmVudCk7Ci0gICAgdm9p
ZCBOUFBfVVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgTlBSZWFzb24sIHZvaWQqIG5vdGlmeURh
dGEpOwotICAgIGJvb2wgTlBQX1VSTFJlZGlyZWN0Tm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgaW50
MzJfdCBzdGF0dXMsIHZvaWQqIG5vdGlmeURhdGEpOwotICAgIE5QRXJyb3IgTlBQX0dldFZhbHVl
KE5QUFZhcmlhYmxlLCB2b2lkICp2YWx1ZSk7Ci0gICAgTlBFcnJvciBOUFBfU2V0VmFsdWUoTlBO
VmFyaWFibGUsIHZvaWQgKnZhbHVlKTsKLQotICAgIC8vIENvbnZlcnQgdGhlIGdpdmVuIHBvaW50
IGZyb20gcGx1Zy1pbiBjb29yZGluYXRlcyB0byByb290IHZpZXcgY29vcmRpbmF0ZXMuCi0gICAg
V2ViQ29yZTo6SW50UG9pbnQgY29udmVydFRvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmKSBjb25zdCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBOZXRzY2FwZVBs
dWdpbihSZWY8TmV0c2NhcGVQbHVnaW5Nb2R1bGU+JiYpOwotCi0gICAgdm9pZCBjYWxsU2V0V2lu
ZG93KCk7Ci0gICAgdm9pZCBjYWxsU2V0V2luZG93SW52aXNpYmxlKCk7Ci0gICAgYm9vbCBzaG91
bGRMb2FkU3JjVVJMKCk7Ci0gICAgTmV0c2NhcGVQbHVnaW5TdHJlYW0qIHN0cmVhbUZyb21JRCh1
aW50NjRfdCBzdHJlYW1JRCk7Ci0gICAgdm9pZCBzdG9wQWxsU3RyZWFtcygpOwotICAgIGJvb2wg
YWxsb3dQb3B1cHMoKSBjb25zdDsKLQotICAgIGNvbnN0IGNoYXIqIHVzZXJBZ2VudCgpOwotCi0g
ICAgdm9pZCBwbGF0Zm9ybVByZUluaXRpYWxpemUoKTsKLSAgICBib29sIHBsYXRmb3JtUG9zdElu
aXRpYWxpemUoKTsKLSAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOwotICAgIGJvb2wgcGxhdGZv
cm1JbnZhbGlkYXRlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2b2lkIHBsYXRmb3Jt
R2VvbWV0cnlEaWRDaGFuZ2UoKTsKLSAgICB2b2lkIHBsYXRmb3JtVmlzaWJpbGl0eURpZENoYW5n
ZSgpOwotICAgIHZvaWQgcGxhdGZvcm1QYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QsIGJvb2wgaXNTbmFwc2hvdCA9IGZhbHNl
KTsKLQotICAgIGJvb2wgcGxhdGZvcm1IYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZl
bnQmKTsKLSAgICBib29sIHBsYXRmb3JtSGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2
ZW50Jik7Ci0gICAgYm9vbCBwbGF0Zm9ybUhhbmRsZU1vdXNlRW50ZXJFdmVudChjb25zdCBXZWJN
b3VzZUV2ZW50Jik7Ci0gICAgYm9vbCBwbGF0Zm9ybUhhbmRsZU1vdXNlTGVhdmVFdmVudChjb25z
dCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAgYm9vbCBwbGF0Zm9ybUhhbmRsZUtleWJvYXJkRXZlbnQo
Y29uc3QgV2ViS2V5Ym9hcmRFdmVudCYpOwotICAgIHZvaWQgcGxhdGZvcm1TZXRGb2N1cyhib29s
KTsKLQotICAgIHN0YXRpYyBib29sIHdhbnRzUGx1Z2luUmVsYXRpdmVOUFdpbmRvd0Nvb3JkaW5h
dGVzKCk7Ci0KLSAgICAvLyBQbHVnaW4KLSAgICBib29sIGluaXRpYWxpemUoY29uc3QgUGFyYW1l
dGVycyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVzdHJveSgpIG92ZXJyaWRlOwotICAgIHZvaWQg
cGFpbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
ZGlydHlSZWN0KSBvdmVycmlkZTsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBzbmFwc2hv
dCgpIG92ZXJyaWRlOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIFBsYXRmb3JtTGF5ZXIqIHBs
dWdpbkxheWVyKCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLSAgICBib29sIGlzVHJhbnNwYXJlbnQoKSBv
dmVycmlkZTsKLSAgICBib29sIHdhbnRzV2hlZWxFdmVudHMoKSBvdmVycmlkZTsKLSAgICB2b2lk
IGdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBsdWdpblNpemUsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFu
c2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pIG92ZXJyaWRlOwotICAgIHZvaWQgdmlz
aWJpbGl0eURpZENoYW5nZShib29sIGlzVmlzaWJsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmcmFt
ZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QgcmVxdWVzdElEKSBvdmVycmlkZTsKLSAgICB2b2lk
IGZyYW1lRGlkRmFpbCh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgd2FzQ2FuY2VsbGVkKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCByZXF1ZXN0SUQs
IGNvbnN0IFN0cmluZyYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cmVhbVdpbGxTZW5k
UmVxdWVzdCh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgVVJMJiByZXF1ZXN0VVJMLCBjb25zdCBV
UkwmIHJlc3BvbnNlVVJMLCBpbnQgcmVzcG9uc2VTdGF0dXMpIG92ZXJyaWRlOwotICAgIHZvaWQg
c3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBVUkwmIHJl
c3BvbnNlVVJMLCB1aW50MzJfdCBzdHJlYW1MZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgc3VnZ2Vz
dGVkRmlsZU5hbWUpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RyZWFtRGlkUmVjZWl2ZURhdGEodWlu
dDY0X3Qgc3RyZWFtSUQsIGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBpbnQgbGVuZ3RoKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHN0cmVhbURpZEZpbmlzaExvYWRpbmcodWludDY0X3Qgc3RyZWFtSUQpIG92
ZXJyaWRlOwotICAgIHZvaWQgc3RyZWFtRGlkRmFpbCh1aW50NjRfdCBzdHJlYW1JRCwgYm9vbCB3
YXNDYW5jZWxsZWQpIG92ZXJyaWRlOwotICAgIHZvaWQgbWFudWFsU3RyZWFtRGlkUmVjZWl2ZVJl
c3BvbnNlKGNvbnN0IFVSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBs
YXN0TW9kaWZpZWRUaW1lLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhl
YWRlcnMsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZU5hbWUpIG92ZXJyaWRlOwotICAgIHZv
aWQgbWFudWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEoY29uc3QgdWludDhfdCogYnl0ZXMsIGludCBs
ZW5ndGgpIG92ZXJyaWRlOwotICAgIHZvaWQgbWFudWFsU3RyZWFtRGlkRmluaXNoTG9hZGluZygp
IG92ZXJyaWRlOwotICAgIHZvaWQgbWFudWFsU3RyZWFtRGlkRmFpbChib29sIHdhc0NhbmNlbGxl
ZCkgb3ZlcnJpZGU7Ci0gICAgCi0gICAgYm9vbCBoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1v
dXNlRXZlbnQmKSBvdmVycmlkZTsKLSAgICBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgV2Vi
V2hlZWxFdmVudCYpIG92ZXJyaWRlOwotICAgIGJvb2wgaGFuZGxlTW91c2VFbnRlckV2ZW50KGNv
bnN0IFdlYk1vdXNlRXZlbnQmKSBvdmVycmlkZTsKLSAgICBib29sIGhhbmRsZU1vdXNlTGVhdmVF
dmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYW5kbGVDb250
ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKSBvdmVycmlkZTsKLSAgICBib29sIGhh
bmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgc2V0Rm9jdXMoYm9vbCkgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGhhbmRsZUVkaXRpbmdD
b21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQp
IG92ZXJyaWRlOwotICAgIGJvb2wgaXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3QgU3RyaW5n
Jikgb3ZlcnJpZGU7Ci0KLSAgICBib29sIHNob3VsZEFsbG93U2NyaXB0aW5nKCkgb3ZlcnJpZGU7
Ci0gICAgYm9vbCBzaG91bGRBbGxvd05hdmlnYXRpb25Gcm9tRHJhZ3MoKSBvdmVycmlkZTsKLSAg
ICAKLSAgICBib29sIGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKLQot
ICAgIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKSBvdmVycmlkZTsKLSAgICAK
LSAgICB1bnNpZ25lZCBjb3VudEZpbmRNYXRjaGVzKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkZp
bmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KSBvdmVycmlkZTsKLSAgICBib29sIGZp
bmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6RmluZE9wdGlvbnMsIHVuc2lnbmVkIG1h
eE1hdGNoQ291bnQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB3aW5kb3dGb2N1c0NoYW5nZWQoYm9v
bCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChib29sKSBvdmVy
cmlkZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHZvaWQgd2luZG93QW5kVmlld0ZyYW1l
c0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3Jk
aW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5h
dGVzKSBvdmVycmlkZTsKLQotICAgIHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVu
dGlmaWVyKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZW5kQ29tcGxleFRleHRJbnB1dChj
b25zdCBTdHJpbmcmIHRleHRJbnB1dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMYXllckhvc3Rp
bmdNb2RlKExheWVySG9zdGluZ01vZGUpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBwbHVnaW5Gb2N1
c09yV2luZG93Rm9jdXNDaGFuZ2VkKCk7Ci0gICAgdm9pZCBzZXRDb21wbGV4VGV4dElucHV0RW5h
YmxlZChib29sKTsKLQotICAgIHZvaWQgdXBkYXRlUGx1Z2luTGF5ZXIoKTsKLSNlbmRpZgotCi0g
ICAgdm9pZCBjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdlZChmbG9hdCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzdG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBn
ZXRGb3JtVmFsdWUoU3RyaW5nJiBmb3JtVmFsdWUpIG92ZXJyaWRlOwotICAgIGJvb2wgaGFuZGxl
U2Nyb2xsKFdlYkNvcmU6OlNjcm9sbERpcmVjdGlvbiwgV2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJp
dHkpIG92ZXJyaWRlOwotICAgIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJh
cigpIG92ZXJyaWRlOwotICAgIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIo
KSBvdmVycmlkZTsKLQotICAgIGJvb2wgc3VwcG9ydHNTbmFwc2hvdHRpbmcoKSBjb25zdCBvdmVy
cmlkZTsKLQotICAgIC8vIENvbnZlcnQgdGhlIGdpdmVuIHBvaW50IGZyb20gcm9vdCB2aWV3IGNv
b3JkaW5hdGVzIHRvIHBsdWctaW4gY29vcmRpbmF0ZXMuIFJldHVybnMgZmFsc2UgaWYgdGhlIHBv
aW50IGNhbid0IGJlCi0gICAgLy8gY29udmVydGVkIChpZiB0aGUgdHJhbnNmb3JtYXRpb24gbWF0
cml4IGlzbid0IGludmVydGlibGUpLgotICAgIGJvb2wgY29udmVydEZyb21Sb290Vmlldyhjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnRJblJvb3RWaWV3Q29vcmRpbmF0ZXMsIFdlYkNvcmU6
OkludFBvaW50JiBwb2ludEluUGx1Z2luQ29vcmRpbmF0ZXMpOwotCi0gICAgUmVmUHRyPFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcj4gbGl2ZVJlc291cmNlRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotCi0g
ICAgYm9vbCBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICBTdHJpbmcgZ2V0
U2VsZWN0aW9uU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KLSAg
ICBTdHJpbmcgZ2V0U2VsZWN0aW9uRm9yV29yZEF0UG9pbnQoY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgYm9vbCBleGlz
dGluZ1NlbGVjdGlvbkNvbnRhaW5zUG9pbnQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2b2lkIG11dGVkU3RhdGVDaGFu
Z2VkKGJvb2wpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB1cGRhdGVOUE5Qcml2YXRlTW9kZSgpOwot
Ci0gICAgdWludDY0X3QgbV9uZXh0UmVxdWVzdElEOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPHVp
bnQ2NF90LCBzdGQ6OnBhaXI8U3RyaW5nLCB2b2lkKj4+IFBlbmRpbmdVUkxOb3RpZnlNYXA7Ci0g
ICAgUGVuZGluZ1VSTE5vdGlmeU1hcCBtX3BlbmRpbmdVUkxOb3RpZmljYXRpb25zOwotCi0gICAg
dHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8TmV0c2NhcGVQbHVnaW5TdHJlYW0+PiBT
dHJlYW1zTWFwOwotICAgIFN0cmVhbXNNYXAgbV9zdHJlYW1zOwotICAgIEhhc2hNYXA8dm9pZCos
IHN0ZDo6cGFpcjxSZWZQdHI8TmV0c2NhcGVQbHVnaW5TdHJlYW0+LCBTdHJpbmc+PiBtX3JlZGly
ZWN0czsKLQotICAgIFJlZjxOZXRzY2FwZVBsdWdpbk1vZHVsZT4gbV9wbHVnaW5Nb2R1bGU7Ci0g
ICAgTlBQX3QgbV9ucHA7Ci0gICAgTlBXaW5kb3cgbV9ucFdpbmRvdzsKLQotICAgIFdlYkNvcmU6
OkludFNpemUgbV9wbHVnaW5TaXplOwotCi0gICAgLy8gVGhlIGNsaXAgcmVjdCBpbiBwbHVnLWlu
IGNvb3JkaW5hdGVzLgotICAgIFdlYkNvcmU6OkludFJlY3QgbV9jbGlwUmVjdDsKLQotICAgIC8v
IEEgdHJhbnNmb3JtIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29udmVydCBmcm9tIHJvb3QgdmlldyBj
b29yZGluYXRlcyB0byBwbHVnLWluIGNvb3JkaW5hdGVzLgotICAgIFdlYkNvcmU6OkFmZmluZVRy
YW5zZm9ybSBtX3BsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm07Ci0KLSNpZiBQTFVHSU5fQVJDSElU
RUNUVVJFKFVOSVgpCi0gICAgV2ViQ29yZTo6SW50UmVjdCBtX2ZyYW1lUmVjdEluV2luZG93Q29v
cmRpbmF0ZXM7Ci0jZW5kaWYKLQotICAgIENTdHJpbmcgbV91c2VyQWdlbnQ7Ci0KLSAgICBib29s
IG1faXNTdGFydGVkOwotICAgIGJvb2wgbV9pc1dpbmRvd2VkOwotICAgIGJvb2wgbV9pc1RyYW5z
cGFyZW50OwotICAgIGJvb2wgbV9pbk5QUE5ldzsKLSAgICBib29sIG1fc2hvdWxkVXNlTWFudWFs
TG9hZGVyOwotICAgIGJvb2wgbV9oYXNDYWxsZWRTZXRXaW5kb3c7Ci0gICAgYm9vbCBtX2lzVmlz
aWJsZTsKLQotICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpblN0cmVhbT4gbV9tYW51YWxTdHJlYW07
Ci0gICAgVmVjdG9yPGJvb2wsIDg+IG1fcG9wdXBFbmFibGVkU3RhdGVzOwotCi0gICAgY2xhc3Mg
VGltZXIgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoVGltZXIpOwotCi0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIHZv
aWQgKCpUaW1lckZ1bmMpKE5QUCwgdWludDMyX3QgdGltZXJJRCk7Ci0KLSAgICAgICAgVGltZXIo
TmV0c2NhcGVQbHVnaW4qLCB1bnNpZ25lZCB0aW1lcklELCB1bnNpZ25lZCBpbnRlcnZhbCwgYm9v
bCByZXBlYXQsIFRpbWVyRnVuYyk7Ci0gICAgICAgIH5UaW1lcigpOwotCi0gICAgICAgIHZvaWQg
c3RhcnQoKTsKLSAgICAgICAgdm9pZCBzdG9wKCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2
b2lkIHRpbWVyRmlyZWQoKTsKLQotICAgICAgICAvLyBUaGlzIGlzIGEgd2VhayBwb2ludGVyIHNp
bmNlIFRpbWVyIG9iamVjdHMgYXJlIGRlc3Ryb3llZCBiZWZvcmUgdGhlIE5ldHNjYXBlUGx1Z2lu
IG9iamVjdCBpdHNlbGYgaXMgZGVzdHJveWVkLgotICAgICAgICBOZXRzY2FwZVBsdWdpbiogbV9u
ZXRzY2FwZVBsdWdpbjsKLQotICAgICAgICB1bnNpZ25lZCBtX3RpbWVySUQ7Ci0gICAgICAgIHVu
c2lnbmVkIG1faW50ZXJ2YWw7Ci0gICAgICAgIGJvb2wgbV9yZXBlYXQ7Ci0gICAgICAgIFRpbWVy
RnVuYyBtX3RpbWVyRnVuYzsKLQotICAgICAgICBSdW5Mb29wOjpUaW1lcjxUaW1lcj4gbV90aW1l
cjsKLSAgICB9OwotICAgIHR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwgc3RkOjp1bmlxdWVfcHRy
PFRpbWVyPj4gVGltZXJNYXA7Ci0gICAgVGltZXJNYXAgbV90aW1lcnM7Ci0gICAgdW5zaWduZWQg
bV9uZXh0VGltZXJJRDsKLQotICAgIGJvb2wgbV9wcml2YXRlQnJvd3NpbmdTdGF0ZSB7IGZhbHNl
IH07Ci0gICAgYm9vbCBtX3N0b3JhZ2VCbG9ja2luZ1N0YXRlIHsgZmFsc2UgfTsKLQotI2lmIFBM
VUdJTl9BUkNISVRFQ1RVUkUoTUFDKQotICAgIE5QRHJhd2luZ01vZGVsIG1fZHJhd2luZ01vZGVs
OwotICAgIE5QRXZlbnRNb2RlbCBtX2V2ZW50TW9kZWw7Ci0KLSAgICBSZXRhaW5QdHI8UGxhdGZv
cm1MYXllcj4gbV9wbHVnaW5MYXllcjsKLSAgICBib29sIG1fcGx1Z2luUmV0dXJuc05vbnJldGFp
bmVkTGF5ZXI7Ci0gICAgTGF5ZXJIb3N0aW5nTW9kZSBtX2xheWVySG9zdGluZ01vZGU7Ci0KLSAg
ICBOUENvY29hRXZlbnQqIG1fY3VycmVudE1vdXNlRXZlbnQ7Ci0KLSAgICBib29sIG1fcGx1Z2lu
SGFzRm9jdXM7Ci0gICAgYm9vbCBtX3dpbmRvd0hhc0ZvY3VzOwotCi0gICAgLy8gV2hldGhlciB0
aGUgcGx1Zy1pbiB3YW50cyB0byB1c2UgdGhlIGxlZ2FjeSBDb2NvYSB0ZXh0IGlucHV0IGhhbmRs
aW5nIHRoYXQKLSAgICAvLyBleGlzdGVkIGluIFdlYktpdDEsIG9yIHRoZSB1cGRhdGVkIENvY29h
IHRleHQgaW5wdXQgaGFuZGxpbmcgc3BlY2lmaWVkIG9uCi0gICAgLy8gaHR0cHM6Ly93aWtpLm1v
emlsbGEub3JnL05QQVBJOkNvY29hRXZlbnRNb2RlbCNUZXh0X0lucHV0Ci0gICAgYm9vbCBtX3Bs
dWdpbldhbnRzTGVnYWN5Q29jb2FUZXh0SW5wdXQ7Ci0KLSAgICAvLyBXaGV0aGVyIGNvbXBsZXgg
dGV4dCBpbnB1dCBpcyBlbmFibGVkLgotICAgIGJvb2wgbV9pc0NvbXBsZXhUZXh0SW5wdXRFbmFi
bGVkOwotCi0gICAgLy8gV2hldGhlciB0aGUgcGx1Zy1pbiBoYXMgaGFuZGxlZCBhIGtleWRvd24g
ZXZlbnQuIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUKLSAgICAvLyBpZiB3ZSBjYW4gdGVsbCB0
aGUgcGx1Zy1pbiB0aGF0IHdlIHN1cHBvcnQgdGhlIHVwZGF0ZWQgQ29jb2EgdGV4dCBpbnB1dCBz
cGVjaWZpY2F0aW9uLgotICAgIGJvb2wgbV9oYXNIYW5kbGVkQUtleURvd25FdmVudDsKLQotICAg
IC8vIFRoZSBudW1iZXIgb2YgTlBDb2NvYUV2ZW50S2V5VXAgZXZlbnRzIHRoYXQgc2hvdWxkIGJl
IGlnbm9yZWQuCi0gICAgdW5zaWduZWQgbV9pZ25vcmVOZXh0S2V5VXBFdmVudENvdW50ZXI7Ci0K
LSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzOwot
ICAgIFdlYkNvcmU6OkludFJlY3QgbV92aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzOwotI2Vs
aWYgUExVR0lOX0FSQ0hJVEVDVFVSRShVTklYKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXRzY2Fw
ZVBsdWdpblVuaXg+IG1faW1wbDsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUExVR0lOKE5ldHNjYXBlUGx1Z2luLCBpc05ldHNj
YXBlUGx1Z2luKCkpCi0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNj
YXBlUGx1Z2luU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL05ldHNjYXBlUGx1Z2luU3RyZWFtLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZjI3MTdlYjE2MzZjOTAxOGFmNTA2MzkzY2U5NDY1Y2Y3MGVkYzU4Yi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpblN0cmVhbS5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwzNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJOZXRzY2FwZVBsdWdpblN0cmVhbS5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJOZXRzY2FwZVBsdWdpbi5oIgotI2luY2x1ZGUgPHV0
aWxpdHk+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1OZXRzY2FwZVBsdWdpblN0cmVhbTo6TmV0c2NhcGVQ
bHVnaW5TdHJlYW0oUmVmPE5ldHNjYXBlUGx1Z2luPiYmIHBsdWdpbiwgdWludDY0X3Qgc3RyZWFt
SUQsIGNvbnN0IFN0cmluZyYgcmVxdWVzdFVSTFN0cmluZywgYm9vbCBzZW5kTm90aWZpY2F0aW9u
LCB2b2lkKiBub3RpZmljYXRpb25EYXRhKQotICAgIDogbV9wbHVnaW4oV1RGTW92ZShwbHVnaW4p
KQotICAgICwgbV9zdHJlYW1JRChzdHJlYW1JRCkKLSAgICAsIG1fcmVxdWVzdFVSTFN0cmluZyhy
ZXF1ZXN0VVJMU3RyaW5nKQotICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKHNlbmROb3RpZmljYXRp
b24pCi0gICAgLCBtX25vdGlmaWNhdGlvbkRhdGEobm90aWZpY2F0aW9uRGF0YSkKLSAgICAsIG1f
bnBTdHJlYW0oKQotICAgICwgbV90cmFuc2Zlck1vZGUoTlBfTk9STUFMKQotICAgICwgbV9vZmZz
ZXQoMCkKLSAgICAsIG1fZmlsZUhhbmRsZShGaWxlU3lzdGVtOjppbnZhbGlkUGxhdGZvcm1GaWxl
SGFuZGxlKQotICAgICwgbV9pc1N0YXJ0ZWQoZmFsc2UpCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAg
ICAsIG1fdXJsTm90aWZ5SGFzQmVlbkNhbGxlZChmYWxzZSkKLSNlbmRpZiAgICAKLSAgICAsIG1f
ZGVsaXZlcnlEYXRhVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmTmV0c2NhcGVQbHVnaW5T
dHJlYW06OmRlbGl2ZXJEYXRhVG9QbHVnaW4pCi0gICAgLCBtX3N0b3BTdHJlYW1XaGVuRG9uZURl
bGl2ZXJpbmcoZmFsc2UpCi17Ci19Ci0KLU5ldHNjYXBlUGx1Z2luU3RyZWFtOjp+TmV0c2NhcGVQ
bHVnaW5TdHJlYW0oKQotewotICAgIEFTU0VSVCghbV9pc1N0YXJ0ZWQpOwotICAgIEFTU0VSVCgh
bV9zZW5kTm90aWZpY2F0aW9uIHx8IG1fdXJsTm90aWZ5SGFzQmVlbkNhbGxlZCk7Ci0gICAgQVNT
RVJUKG1fZmlsZUhhbmRsZSA9PSBGaWxlU3lzdGVtOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxl
KTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpblN0cmVhbTo6d2lsbFNlbmRSZXF1ZXN0KGNvbnN0
IFVSTCYgcmVxdWVzdFVSTCwgY29uc3QgVVJMJiByZWRpcmVjdFJlc3BvbnNlVVJMLCBpbnQgcmVk
aXJlY3RSZXNwb25zZVN0YXR1cykKLXsKLSAgICBSZWY8TmV0c2NhcGVQbHVnaW5TdHJlYW0+IHBy
b3RlY3QoKnRoaXMpOwotCi0gICAgaWYgKHJlZGlyZWN0UmVzcG9uc2VTdGF0dXMgPj0gMzAwICYm
IHJlZGlyZWN0UmVzcG9uc2VTdGF0dXMgPCA0MDApCi0gICAgICAgIG1fcGx1Z2luLT5yZWdpc3Rl
clJlZGlyZWN0KHRoaXMsIHJlcXVlc3RVUkwsIHJlZGlyZWN0UmVzcG9uc2VTdGF0dXMsIG1fbm90
aWZpY2F0aW9uRGF0YSk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5TdHJlYW06OmRpZFJlY2Vp
dmVSZXNwb25zZShjb25zdCBVUkwmIHJlc3BvbnNlVVJMLCB1aW50MzJfdCBzdHJlYW1MZW5ndGgs
IHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0
IFN0cmluZyYgaGVhZGVycykKLXsKLSAgICAvLyBTdGFydGluZyB0aGUgc3RyZWFtIGNvdWxkIGNh
dXNlIHRoZSBwbHVnLWluIHN0cmVhbSB0byBnbyBhd2F5IHNvIHdlIGtlZXAgYSByZWZlcmVuY2Ug
dG8gaXQgaGVyZS4KLSAgICBSZWY8TmV0c2NhcGVQbHVnaW5TdHJlYW0+IHByb3RlY3QoKnRoaXMp
OwotCi0gICAgc3RhcnQocmVzcG9uc2VVUkwuc3RyaW5nKCksIHN0cmVhbUxlbmd0aCwgbGFzdE1v
ZGlmaWVkVGltZSwgbWltZVR5cGUsIGhlYWRlcnMpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2lu
U3RyZWFtOjpkaWRSZWNlaXZlRGF0YShjb25zdCB1aW50OF90KiBieXRlcywgaW50IGxlbmd0aCkK
LXsKLSAgICAvLyBEZWxpdmVyaW5nIHRoZSBkYXRhIGNvdWxkIGNhdXNlIHRoZSBwbHVnLWluIHN0
cmVhbSB0byBnbyBhd2F5IHNvIHdlIGtlZXAgYSByZWZlcmVuY2UgdG8gaXQgaGVyZS4KLSAgICBS
ZWY8TmV0c2NhcGVQbHVnaW5TdHJlYW0+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgZGVsaXZlckRh
dGEoYnl0ZXMsIGxlbmd0aCk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5TdHJlYW06OmRpZEZp
bmlzaExvYWRpbmcoKQotewotICAgIC8vIFN0b3BwaW5nIHRoZSBzdHJlYW0gY291bGQgY2F1c2Ug
dGhlIHBsdWctaW4gc3RyZWFtIHRvIGdvIGF3YXkgc28gd2Uga2VlcCBhIHJlZmVyZW5jZSB0byBp
dCBoZXJlLgotICAgIFJlZjxOZXRzY2FwZVBsdWdpblN0cmVhbT4gcHJvdGVjdCgqdGhpcyk7Ci0K
LSAgICBzdG9wKE5QUkVTX0RPTkUpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luU3RyZWFtOjpk
aWRGYWlsKGJvb2wgd2FzQ2FuY2VsbGVkKQotewotICAgIC8vIFN0b3BwaW5nIHRoZSBzdHJlYW0g
Y291bGQgY2F1c2UgdGhlIHBsdWctaW4gc3RyZWFtIHRvIGdvIGF3YXkgc28gd2Uga2VlcCBhIHJl
ZmVyZW5jZSB0byBpdCBoZXJlLgotICAgIFJlZjxOZXRzY2FwZVBsdWdpblN0cmVhbT4gcHJvdGVj
dCgqdGhpcyk7Ci0KLSAgICBzdG9wKHdhc0NhbmNlbGxlZCA/IE5QUkVTX1VTRVJfQlJFQUsgOiBO
UFJFU19ORVRXT1JLX0VSUik7Ci19Ci0gICAgCi12b2lkIE5ldHNjYXBlUGx1Z2luU3RyZWFtOjpz
ZW5kSmF2YVNjcmlwdFN0cmVhbShjb25zdCBTdHJpbmcmIHJlc3VsdCkKLXsKLSAgICAvLyBzdGFy
dGluZyB0aGUgc3RyZWFtIG9yIGRlbGl2ZXJpbmcgdGhlIGRhdGEgdG8gaXQgbWlnaHQgY2F1c2Ug
dGhlIHBsdWctaW4gc3RyZWFtIHRvIGdvIGF3YXksIHNvIHdlIGtlZXAKLSAgICAvLyBhIHJlZmVy
ZW5jZSB0byBpdCBoZXJlLgotICAgIFJlZjxOZXRzY2FwZVBsdWdpblN0cmVhbT4gcHJvdGVjdCgq
dGhpcyk7Ci0KLSAgICBDU3RyaW5nIHJlc3VsdENTdHJpbmcgPSByZXN1bHQudXRmOCgpOwotICAg
IGlmIChyZXN1bHRDU3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgIC8vIFRoZXJlIHdhcyBhbiBl
cnJvciBldmFsdWF0aW5nIHRoZSBKYXZhU2NyaXB0LCBjYWxsIE5QUF9VUkxOb3RpZnkgaWYgbmVl
ZGVkIGFuZCB0aGVuIGRlc3Ryb3kgdGhlIHN0cmVhbS4KLSAgICAgICAgbm90aWZ5QW5kRGVzdHJv
eVN0cmVhbShOUFJFU19ORVRXT1JLX0VSUik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoIXN0YXJ0KG1fcmVxdWVzdFVSTFN0cmluZywgcmVzdWx0Q1N0cmluZy5sZW5ndGgoKSwg
MCwgInRleHQvcGxhaW4iLCAiIikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRlbGl2ZXJEYXRh
KHJlc3VsdENTdHJpbmcuZGF0YUFzVUludDhQdHIoKSwgcmVzdWx0Q1N0cmluZy5sZW5ndGgoKSk7
Ci0gICAgc3RvcChOUFJFU19ET05FKTsKLX0KLQotTlBFcnJvciBOZXRzY2FwZVBsdWdpblN0cmVh
bTo6ZGVzdHJveShOUFJlYXNvbiByZWFzb24pCi17Ci0gICAgLy8gSXQgZG9lc24ndCBtYWtlIHNl
bnNlIHRvIGNhbGwgTlBOX0Rlc3Ryb3lTdHJlYW0gb24gYSBzdHJlYW0gdGhhdCBoYXNuJ3QgYmVl
biBzdGFydGVkIHlldC4KLSAgICBpZiAoIW1faXNTdGFydGVkKQotICAgICAgICByZXR1cm4gTlBF
UlJfR0VORVJJQ19FUlJPUjsKLQotICAgIC8vIEl0IGlzbid0IHJlYWxseSB2YWxpZCBmb3IgYSBw
bHVnLWluIHRvIGNhbGwgTlBOX0Rlc3Ryb3lTdHJlYW0gd2l0aCBOUFJFU19ET05FLgotICAgIC8v
IChBdCBsZWFzdCBub3QgZm9yIGJyb3dzZXIgaW5pdGlhdGVkIHN0cmVhbXMsIGFuZCB3ZSBkb24n
dCBzdXBwb3J0IHBsdWctaW4gaW5pdGlhdGVkIHN0cmVhbXMpLgotICAgIGlmIChyZWFzb24gPT0g
TlBSRVNfRE9ORSkKLSAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07Ci0KLSAgICBj
YW5jZWwoKTsKLSAgICBzdG9wKHJlYXNvbik7Ci0gICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwot
fQotCi1zdGF0aWMgYm9vbCBpc1N1cHBvcnRlZFRyYW5zZmVyTW9kZSh1aW50MTZfdCB0cmFuc2Zl
ck1vZGUpCi17Ci0gICAgc3dpdGNoICh0cmFuc2Zlck1vZGUpIHsKLSAgICBjYXNlIE5QX0FTRklM
RU9OTFk6Ci0gICAgY2FzZSBOUF9BU0ZJTEU6Ci0gICAgY2FzZSBOUF9OT1JNQUw6Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIC8vIEZJWE1FOiBXZSBkb24ndCBzdXBwb3J0IHNlZWthYmxlIHN0
cmVhbXMuCi0gICAgY2FzZSBOUF9TRUVLOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotICAgIAot
Ym9vbCBOZXRzY2FwZVBsdWdpblN0cmVhbTo6c3RhcnQoY29uc3QgU3RyaW5nJiByZXNwb25zZVVS
TFN0cmluZywgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1l
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMpCi17Ci0gICAg
bV9yZXNwb25zZVVSTCA9IHJlc3BvbnNlVVJMU3RyaW5nLnV0ZjgoKTsKLSAgICBtX21pbWVUeXBl
ID0gbWltZVR5cGUudXRmOCgpOwotICAgIG1faGVhZGVycyA9IGhlYWRlcnMudXRmOCgpOwotCi0g
ICAgbV9ucFN0cmVhbS5uZGF0YSA9IHRoaXM7Ci0gICAgbV9ucFN0cmVhbS51cmwgPSBtX3Jlc3Bv
bnNlVVJMLmRhdGEoKTsKLSAgICBtX25wU3RyZWFtLmVuZCA9IHN0cmVhbUxlbmd0aDsKLSAgICBt
X25wU3RyZWFtLmxhc3Rtb2RpZmllZCA9IGxhc3RNb2RpZmllZFRpbWU7Ci0gICAgbV9ucFN0cmVh
bS5ub3RpZnlEYXRhID0gbV9ub3RpZmljYXRpb25EYXRhOwotICAgIG1fbnBTdHJlYW0uaGVhZGVy
cyA9IG1faGVhZGVycy5sZW5ndGgoKSA9PSAwID8gMCA6IG1faGVhZGVycy5kYXRhKCk7Ci0KLSAg
ICBOUEVycm9yIGVycm9yID0gbV9wbHVnaW4tPk5QUF9OZXdTdHJlYW0oY29uc3RfY2FzdDxjaGFy
Kj4obV9taW1lVHlwZS5kYXRhKCkpLCAmbV9ucFN0cmVhbSwgZmFsc2UsICZtX3RyYW5zZmVyTW9k
ZSk7Ci0gICAgaWYgKGVycm9yICE9IE5QRVJSX05PX0VSUk9SKSB7Ci0gICAgICAgIC8vIFdlIGZh
aWxlZCB0byBzdGFydCB0aGUgc3RyZWFtLCBjYW5jZWwgdGhlIGxvYWQgYW5kIGRlc3Ryb3kgaXQu
Ci0gICAgICAgIGNhbmNlbCgpOwotICAgICAgICBub3RpZnlBbmREZXN0cm95U3RyZWFtKE5QUkVT
X05FVFdPUktfRVJSKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFdl
IHN1Y2Nlc3NmdWxseSBzdGFydGVkIHRoZSBzdHJlYW0uCi0gICAgbV9pc1N0YXJ0ZWQgPSB0cnVl
OwotCi0gICAgaWYgKCFpc1N1cHBvcnRlZFRyYW5zZmVyTW9kZShtX3RyYW5zZmVyTW9kZSkpIHsK
LSAgICAgICAgLy8gQ2FuY2VsIHRoZSBsb2FkIGFuZCBzdG9wIHRoZSBzdHJlYW0uCi0gICAgICAg
IGNhbmNlbCgpOwotICAgICAgICBzdG9wKE5QUkVTX05FVFdPUktfRVJSKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIE5ldHNjYXBl
UGx1Z2luU3RyZWFtOjpkZWxpdmVyRGF0YShjb25zdCB1aW50OF90KiBieXRlcywgaW50IGxlbmd0
aCkKLXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwotCi0gICAgaWYgKG1fdHJhbnNmZXJNb2Rl
ICE9IE5QX0FTRklMRU9OTFkpIHsKLSAgICAgICAgaWYgKCFtX2RlbGl2ZXJ5RGF0YSkKLSAgICAg
ICAgICAgIG1fZGVsaXZlcnlEYXRhID0gbWFrZVVuaXF1ZTxWZWN0b3I8dWludDhfdD4+KCk7Ci0K
LSAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2VydmVDYXBhY2l0eShtX2RlbGl2ZXJ5RGF0YS0+
c2l6ZSgpICsgbGVuZ3RoKTsKLSAgICAgICAgbV9kZWxpdmVyeURhdGEtPmFwcGVuZChieXRlcywg
bGVuZ3RoKTsKLSAgICAgICAgCi0gICAgICAgIGRlbGl2ZXJEYXRhVG9QbHVnaW4oKTsKLSAgICB9
Ci0KLSAgICBpZiAobV90cmFuc2Zlck1vZGUgPT0gTlBfQVNGSUxFIHx8IG1fdHJhbnNmZXJNb2Rl
ID09IE5QX0FTRklMRU9OTFkpCi0gICAgICAgIGRlbGl2ZXJEYXRhVG9GaWxlKGJ5dGVzLCBsZW5n
dGgpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luU3RyZWFtOjpkZWxpdmVyRGF0YVRvUGx1Z2lu
KCkKLXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwotCi0gICAgaW50MzJfdCBudW1CeXRlc1Rv
RGVsaXZlciA9IG1fZGVsaXZlcnlEYXRhLT5zaXplKCk7Ci0gICAgaW50MzJfdCBudW1CeXRlc0Rl
bGl2ZXJlZCA9IDA7Ci0KLSAgICB3aGlsZSAobnVtQnl0ZXNEZWxpdmVyZWQgPCBudW1CeXRlc1Rv
RGVsaXZlcikgewotICAgICAgICBpbnQzMl90IG51bUJ5dGVzUGx1Z2luQ2FuSGFuZGxlID0gbV9w
bHVnaW4tPk5QUF9Xcml0ZVJlYWR5KCZtX25wU3RyZWFtKTsKLSAgICAgICAgCi0gICAgICAgIC8v
IE5QUF9Xcml0ZVJlYWR5IGNvdWxkIGNhbGwgTlBOX0Rlc3Ryb3lTdHJlYW0gYW5kIGRlc3Ryb3kg
dGhlIHN0cmVhbS4KLSAgICAgICAgaWYgKCFtX2lzU3RhcnRlZCkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBpZiAobnVtQnl0ZXNQbHVnaW5DYW5IYW5kbGUgPD0gMCkgewotICAgICAg
ICAgICAgLy8gVGhlIHBsdWctaW4gY2FuJ3QgaGFuZGxlIG1vcmUgZGF0YSwgd2UnbGwgc2VuZCB0
aGUgcmVzdCBsYXRlcgotICAgICAgICAgICAgbV9kZWxpdmVyeURhdGFUaW1lci5zdGFydE9uZVNo
b3QoMF9zKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRmln
dXJlIG91dCBob3cgbXVjaCBkYXRhIHRvIHNlbmQgdG8gdGhlIHBsdWctaW4uCi0gICAgICAgIGlu
dDMyX3QgZGF0YUxlbmd0aCA9IHN0ZDo6bWluKG51bUJ5dGVzUGx1Z2luQ2FuSGFuZGxlLCBudW1C
eXRlc1RvRGVsaXZlciAtIG51bUJ5dGVzRGVsaXZlcmVkKTsKLSAgICAgICAgdWludDhfdCogZGF0
YSA9IG1fZGVsaXZlcnlEYXRhLT5kYXRhKCkgKyBudW1CeXRlc0RlbGl2ZXJlZDsKLQotICAgICAg
ICBpbnQzMl90IG51bUJ5dGVzV3JpdHRlbiA9IG1fcGx1Z2luLT5OUFBfV3JpdGUoJm1fbnBTdHJl
YW0sIG1fb2Zmc2V0LCBkYXRhTGVuZ3RoLCBkYXRhKTsKLSAgICAgICAgaWYgKG51bUJ5dGVzV3Jp
dHRlbiA8IDApIHsKLSAgICAgICAgICAgIGNhbmNlbCgpOwotICAgICAgICAgICAgc3RvcChOUFJF
U19ORVRXT1JLX0VSUik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBOUFBfV3JpdGUgY291bGQgY2FsbCBOUE5fRGVzdHJveVN0cmVhbSBhbmQgZGVzdHJveSB0
aGUgc3RyZWFtLgotICAgICAgICBpZiAoIW1faXNTdGFydGVkKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIG51bUJ5dGVzV3JpdHRlbiA9IHN0ZDo6bWluKG51bUJ5dGVzV3JpdHRlbiwg
ZGF0YUxlbmd0aCk7Ci0gICAgICAgIG1fb2Zmc2V0ICs9IG51bUJ5dGVzV3JpdHRlbjsKLSAgICAg
ICAgbnVtQnl0ZXNEZWxpdmVyZWQgKz0gbnVtQnl0ZXNXcml0dGVuOwotICAgIH0KLQotICAgIC8v
IFdlIGRpZG4ndCB3cml0ZSBhbnl0aGluZy4KLSAgICBpZiAoIW51bUJ5dGVzRGVsaXZlcmVkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobnVtQnl0ZXNEZWxpdmVyZWQgPCBudW1CeXRlc1Rv
RGVsaXZlcikgewotICAgICAgICAvLyBSZW1vdmUgdGhlIGJ5dGVzIHRoYXQgd2UgYWN0dWFsbHkg
ZGVsaXZlcmVkLgotICAgICAgICBtX2RlbGl2ZXJ5RGF0YS0+cmVtb3ZlKDAsIG51bUJ5dGVzRGVs
aXZlcmVkKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX2RlbGl2ZXJ5RGF0YS0+Y2xlYXIoKTsK
LQotICAgICAgICBpZiAobV9zdG9wU3RyZWFtV2hlbkRvbmVEZWxpdmVyaW5nKQotICAgICAgICAg
ICAgc3RvcChOUFJFU19ET05FKTsKLSAgICB9Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5TdHJl
YW06OmRlbGl2ZXJEYXRhVG9GaWxlKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBpbnQgbGVuZ3RoKQot
ewotICAgIGlmIChtX2ZpbGVIYW5kbGUgPT0gRmlsZVN5c3RlbTo6aW52YWxpZFBsYXRmb3JtRmls
ZUhhbmRsZSAmJiBtX2ZpbGVQYXRoLmlzTnVsbCgpKSB7Ci0gICAgICAgIC8vIENyZWF0ZSBhIHRl
bXBvcmFyeSBmaWxlLgotICAgICAgICBtX2ZpbGVQYXRoID0gRmlsZVN5c3RlbTo6b3BlblRlbXBv
cmFyeUZpbGUoIldlYktpdFBsdWdpblN0cmVhbSIsIG1fZmlsZUhhbmRsZSk7Ci0KLSAgICAgICAg
Ly8gV2UgZmFpbGVkIHRvIG9wZW4gdGhlIGZpbGUsIHN0b3AgdGhlIHN0cmVhbS4KLSAgICAgICAg
aWYgKG1fZmlsZUhhbmRsZSA9PSBGaWxlU3lzdGVtOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxl
KSB7Ci0gICAgICAgICAgICBzdG9wKE5QUkVTX05FVFdPUktfRVJSKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpbnQgYnl0ZUNvdW50ID0gRmlsZVN5c3RlbTo6d3JpdGVUb0ZpbGUobV9maWxl
SGFuZGxlLCBieXRlcywgbGVuZ3RoKTsKLSAgICBpZiAoYnl0ZUNvdW50ICE9IGxlbmd0aCkgewot
ICAgICAgICAvLyBUaGlzIGhhcHBlbnMgb25seSByYXJlbHksIHdoZW4gd2UgYXJlIG91dCBvZiBk
aXNrIHNwYWNlIG9yIGhhdmUgYSBkaXNrIEkvTyBlcnJvci4KLSAgICAgICAgRmlsZVN5c3RlbTo6
Y2xvc2VGaWxlKG1fZmlsZUhhbmRsZSk7Ci0KLSAgICAgICAgc3RvcChOUFJFU19ORVRXT1JLX0VS
Uik7Ci0gICAgfQotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luU3RyZWFtOjpzdG9wKE5QUmVhc29u
IHJlYXNvbikKLXsKLSAgICAvLyBUaGUgc3RyZWFtIHdhcyBzdG9wcGVkIGJlZm9yZSBpdCBnb3Qg
YSBjaGFuY2UgdG8gc3RhcnQuIFRoaXMgY2FuIGhhcHBlbiBpZiBhIHN0cmVhbSBpcyBjYW5jZWxs
ZWQgYnkKLSAgICAvLyBXZWJLaXQgYmVmb3JlIGl0IHJlY2VpdmVkIGEgcmVzcG9uc2UuCi0gICAg
aWYgKCFtX2lzU3RhcnRlZCkgewotICAgICAgICBBU1NFUlQocmVhc29uICE9IE5QUkVTX0RPTkUp
OwotICAgICAgICBub3RpZnlBbmREZXN0cm95U3RyZWFtKHJlYXNvbik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAocmVhc29uID09IE5QUkVTX0RPTkUgJiYgbV9kZWxpdmVyeURh
dGEgJiYgIW1fZGVsaXZlcnlEYXRhLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gVGhlcmUgaXMg
c3RpbGwgZGF0YSBsZWZ0IHRoYXQgdGhlIHBsdWctaW4gaGFzbid0IGJlZW4gYWJsZSB0byBjb25z
dW1lIHlldC4KLSAgICAgICAgQVNTRVJUKG1fZGVsaXZlcnlEYXRhVGltZXIuaXNBY3RpdmUoKSk7
Ci0gICAgICAgIAotICAgICAgICAvLyBTZXQgbV9zdG9wU3RyZWFtV2hlbkRvbmVEZWxpdmVyaW5n
IHRvIHRydWUgc28gdGhhdCB0aGUgbmV4dCB0aW1lIHRoZSBkZWxpdmVyeSB0aW1lciBmaXJlcwot
ICAgICAgICAvLyBhbmQgY2FsbHMgZGVsaXZlckRhdGFUb1BsdWdpbiB0aGUgc3RyZWFtIHdpbGwg
YmUgY2xvc2VkIGlmIGFsbCB0aGUgcmVtYWluaW5nIGRhdGEgd2FzCi0gICAgICAgIC8vIHN1Y2Nl
c3NmdWxseSBkZWxpdmVyZWQuCi0gICAgICAgIG1fc3RvcFN0cmVhbVdoZW5Eb25lRGVsaXZlcmlu
ZyA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2RlbGl2ZXJ5RGF0YSA9
IG51bGxwdHI7Ci0gICAgbV9kZWxpdmVyeURhdGFUaW1lci5zdG9wKCk7Ci0KLSAgICBpZiAobV90
cmFuc2Zlck1vZGUgPT0gTlBfQVNGSUxFIHx8IG1fdHJhbnNmZXJNb2RlID09IE5QX0FTRklMRU9O
TFkpIHsKLSAgICAgICAgaWYgKHJlYXNvbiA9PSBOUFJFU19ET05FKSB7Ci0gICAgICAgICAgICAv
LyBFbnN1cmUgdGhhdCB0aGUgZmlsZSBpcyBjcmVhdGVkLgotICAgICAgICAgICAgZGVsaXZlckRh
dGFUb0ZpbGUoMCwgMCk7Ci0gICAgICAgICAgICBpZiAobV9maWxlSGFuZGxlICE9IEZpbGVTeXN0
ZW06OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpCi0gICAgICAgICAgICAgICAgRmlsZVN5c3Rl
bTo6Y2xvc2VGaWxlKG1fZmlsZUhhbmRsZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFT
U0VSVCghbV9maWxlUGF0aC5pc051bGwoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1f
cGx1Z2luLT5OUFBfU3RyZWFtQXNGaWxlKCZtX25wU3RyZWFtLCBtX2ZpbGVQYXRoLnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gSnVzdCBjbG9zZSB0aGUg
ZmlsZS4KLSAgICAgICAgICAgIGlmIChtX2ZpbGVIYW5kbGUgIT0gRmlsZVN5c3RlbTo6aW52YWxp
ZFBsYXRmb3JtRmlsZUhhbmRsZSkKLSAgICAgICAgICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZp
bGUobV9maWxlSGFuZGxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIERlbGV0ZSB0aGUgZmls
ZSBhZnRlciBjYWxsaW5nIE5QUF9TdHJlYW1Bc0ZpbGUoKSwgaW5zdGVhZCBvZiBpbiB0aGUgZGVz
dHJ1Y3Rvci4gIEl0IHNob3VsZCBiZSBPSwotICAgICAgICAvLyB0byBkZWxldGUgdGhlIGZpbGUg
aGVyZSAtLSBOUFBfU3RyZWFtQXNGaWxlKCkgaXMgYWx3YXlzIGNhbGxlZCBpbW1lZGlhdGVseSBi
ZWZvcmUgTlBQX0Rlc3Ryb3lTdHJlYW0oKQotICAgICAgICAvLyAodGhlIHN0cmVhbSBkZXN0cnVj
dGlvbiBmdW5jdGlvbiksIHNvIHRoZXJlIGNhbiBiZSBubyBleHBlY3RhdGlvbiB0aGF0IGEgcGx1
Z2luIHdpbGwgcmVhZCB0aGUgc3RyZWFtCi0gICAgICAgIC8vIGZpbGUgYXN5bmNocm9ub3VzbHkg
YWZ0ZXIgTlBQX1N0cmVhbUFzRmlsZSgpIGlzIGNhbGxlZC4KLSAgICAgICAgRmlsZVN5c3RlbTo6
ZGVsZXRlRmlsZShtX2ZpbGVQYXRoKTsKLSAgICAgICAgbV9maWxlUGF0aCA9IFN0cmluZygpOwot
Ci0gICAgICAgIC8vIE5QUF9TdHJlYW1Bc0ZpbGUgY291bGQgY2FsbCBOUE5fRGVzdHJveVN0cmVh
bSBhbmQgZGVzdHJveSB0aGUgc3RyZWFtLgotICAgICAgICBpZiAoIW1faXNTdGFydGVkKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFNldCBtX2lzU3RhcnRlZCB0byBmYWxz
ZSBiZWZvcmUgY2FsbGluZyBOUFBfRGVzdHJveVN0cmVhbSBpbiBjYXNlIE5QUF9EZXN0cm95U3Ry
ZWFtIGNhbGxzIE5QTl9EZXN0cm95U3RyZWFtLgotICAgIG1faXNTdGFydGVkID0gZmFsc2U7Ci0K
LSAgICBtX3BsdWdpbi0+TlBQX0Rlc3Ryb3lTdHJlYW0oJm1fbnBTdHJlYW0sIHJlYXNvbik7Ci0K
LSAgICBub3RpZnlBbmREZXN0cm95U3RyZWFtKHJlYXNvbik7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQ
bHVnaW5TdHJlYW06OnNldFVSTChjb25zdCBTdHJpbmcmIG5ld1VSTFN0cmluZykKLXsKLSAgICBt
X3JlcXVlc3RVUkxTdHJpbmcgPSBuZXdVUkxTdHJpbmc7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVn
aW5TdHJlYW06OmNhbmNlbCgpCi17Ci0gICAgbV9wbHVnaW4tPmNhbmNlbFN0cmVhbUxvYWQodGhp
cyk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5TdHJlYW06Om5vdGlmeUFuZERlc3Ryb3lTdHJl
YW0oTlBSZWFzb24gcmVhc29uKQotewotICAgIEFTU0VSVCghbV9pc1N0YXJ0ZWQpOwotICAgIEFT
U0VSVCghbV9kZWxpdmVyeURhdGFUaW1lci5pc0FjdGl2ZSgpKTsKLSAgICBBU1NFUlQoIW1fdXJs
Tm90aWZ5SGFzQmVlbkNhbGxlZCk7Ci0gICAgCi0gICAgaWYgKG1fc2VuZE5vdGlmaWNhdGlvbikg
ewotICAgICAgICBtX3BsdWdpbi0+TlBQX1VSTE5vdGlmeShtX3JlcXVlc3RVUkxTdHJpbmcudXRm
OCgpLmRhdGEoKSwgcmVhc29uLCBtX25vdGlmaWNhdGlvbkRhdGEpOwotICAgIAotI2lmIEFTU0VS
VF9FTkFCTEVECi0gICAgICAgIG1fdXJsTm90aWZ5SGFzQmVlbkNhbGxlZCA9IHRydWU7Ci0jZW5k
aWYgICAgCi0gICAgfQotCi0gICAgbV9wbHVnaW4tPnJlbW92ZVBsdWdpblN0cmVhbSh0aGlzKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5z
L05ldHNjYXBlL05ldHNjYXBlUGx1Z2luU3RyZWFtLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpblN0cmVhbS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA5YjA3MDk5ODg0NzIwNDMxYTNiMTNlNDAxZWU0ODg4MzhiYTYyOWU0
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luU3RyZWFtLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlIDxXZWJDb3Jl
L25wcnVudGltZV9pbnRlcm5hbC5oPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYv
RmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxv
b3AuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1jbGFzcyBOZXRzY2FwZVBsdWdpbjsKLQotY2xhc3MgTmV0c2NhcGVQbHVnaW5TdHJlYW0g
OiBwdWJsaWMgUmVmQ291bnRlZDxOZXRzY2FwZVBsdWdpblN0cmVhbT4gewotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8TmV0c2NhcGVQbHVnaW5TdHJlYW0+IGNyZWF0ZShSZWY8TmV0c2NhcGVQbHVn
aW4+JiYgcGx1Z2luLCB1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgU3RyaW5nJiByZXF1ZXN0VVJM
U3RyaW5nLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmaWNhdGlvbkRhdGEpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXRzY2FwZVBsdWdpblN0cmVhbShX
VEZNb3ZlKHBsdWdpbiksIHN0cmVhbUlELCByZXF1ZXN0VVJMU3RyaW5nLCBzZW5kTm90aWZpY2F0
aW9uLCBub3RpZmljYXRpb25EYXRhKSk7Ci0gICAgfQotICAgIH5OZXRzY2FwZVBsdWdpblN0cmVh
bSgpOwotCi0gICAgdWludDY0X3Qgc3RyZWFtSUQoKSBjb25zdCB7IHJldHVybiBtX3N0cmVhbUlE
OyB9Ci0gICAgY29uc3QgTlBTdHJlYW0qIG5wU3RyZWFtKCkgY29uc3QgeyByZXR1cm4gJm1fbnBT
dHJlYW07IH0KLQotICAgIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KGNvbnN0IFVSTCYgcmVxdWVzdFVS
TCwgY29uc3QgVVJMJiByZWRpcmVjdFJlc3BvbnNlVVJMLCBpbnQgcmVkaXJlY3RSZXNwb25zZVN0
YXR1cyk7Ci0gICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgVVJMJiByZXNwb25zZVVS
TCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0
cmluZyYgaGVhZGVycyk7Ci0gICAgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCB1aW50OF90KiBi
eXRlcywgaW50IGxlbmd0aCk7Ci0gICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCk7Ci0gICAgdm9p
ZCBkaWRGYWlsKGJvb2wgd2FzQ2FuY2VsbGVkKTsKLQotICAgIHZvaWQgc2VuZEphdmFTY3JpcHRT
dHJlYW0oY29uc3QgU3RyaW5nJiByZXN1bHQpOwotCi0gICAgdm9pZCBzdG9wKE5QUmVhc29uKTsK
LSAgICBOUEVycm9yIGRlc3Ryb3koTlBSZWFzb24pOwotICAgIHZvaWQgc2V0VVJMKGNvbnN0IFN0
cmluZyYgbmV3VVJMU3RyaW5nKTsKLQotcHJpdmF0ZToKLSAgICBOZXRzY2FwZVBsdWdpblN0cmVh
bShSZWY8TmV0c2NhcGVQbHVnaW4+JiYsIHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBTdHJpbmcm
IHJlcXVlc3RVUkxTdHJpbmcsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZpY2F0
aW9uRGF0YSk7Ci0KLSAgICBib29sIHN0YXJ0KGNvbnN0IFN0cmluZyYgcmVzcG9uc2VVUkxTdHJp
bmcsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwgCi0gICAgICAgICAgICAgICB1aW50MzJfdCBsYXN0
TW9kaWZpZWRUaW1lLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRl
cnMpOwotCi0gICAgdm9pZCBjYW5jZWwoKTsKLSAgICB2b2lkIG5vdGlmeUFuZERlc3Ryb3lTdHJl
YW0oTlBSZWFzb24pOwotCi0gICAgdm9pZCBkZWxpdmVyRGF0YShjb25zdCB1aW50OF90KiBieXRl
cywgaW50IGxlbmd0aCk7Ci0gICAgdm9pZCBkZWxpdmVyRGF0YVRvUGx1Z2luKCk7Ci0gICAgdm9p
ZCBkZWxpdmVyRGF0YVRvRmlsZShjb25zdCB1aW50OF90KiBieXRlcywgaW50IGxlbmd0aCk7Ci0K
LSAgICBSZWY8TmV0c2NhcGVQbHVnaW4+IG1fcGx1Z2luOwotICAgIHVpbnQ2NF90IG1fc3RyZWFt
SUQ7Ci0KLSAgICBTdHJpbmcgbV9yZXF1ZXN0VVJMU3RyaW5nOwotICAgIGJvb2wgbV9zZW5kTm90
aWZpY2F0aW9uOwotICAgIHZvaWQqIG1fbm90aWZpY2F0aW9uRGF0YTsKLQotICAgIE5QU3RyZWFt
IG1fbnBTdHJlYW07Ci0gICAgdWludDE2X3QgbV90cmFuc2Zlck1vZGU7Ci0gICAgaW50MzJfdCBt
X29mZnNldDsKLQotICAgIFN0cmluZyBtX2ZpbGVQYXRoOwotICAgIEZpbGVTeXN0ZW06OlBsYXRm
b3JtRmlsZUhhbmRsZSBtX2ZpbGVIYW5kbGU7Ci0gICAgCi0gICAgLy8gV2hldGhlciBOUFBfTmV3
U3RyZWFtIGhhcyBzdWNjZXNzZnVsbHkgYmVlbiBjYWxsZWQuCi0gICAgYm9vbCBtX2lzU3RhcnRl
ZDsKLQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9vbCBtX3VybE5vdGlmeUhhc0JlZW5DYWxs
ZWQ7Ci0jZW5kaWYKLQotICAgIENTdHJpbmcgbV9yZXNwb25zZVVSTDsKLSAgICBDU3RyaW5nIG1f
bWltZVR5cGU7Ci0gICAgQ1N0cmluZyBtX2hlYWRlcnM7Ci0KLSAgICBSdW5Mb29wOjpUaW1lcjxO
ZXRzY2FwZVBsdWdpblN0cmVhbT4gbV9kZWxpdmVyeURhdGFUaW1lcjsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8VmVjdG9yPHVpbnQ4X3Q+PiBtX2RlbGl2ZXJ5RGF0YTsKLSAgICBib29sIG1fc3RvcFN0
cmVhbVdoZW5Eb25lRGVsaXZlcmluZzsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0j
ZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9tYWMvTmV0c2NhcGVQbHVnaW5NYWMu
bW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9tYWMvTmV0c2Nh
cGVQbHVnaW5NYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwZDlhMTVhMzYy
MjcxZmY1OTU2NDQ1YzY4MDA5YjIwZTkxNGY0ZjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0
c2NhcGUvbWFjL05ldHNjYXBlUGx1Z2luTWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNzc2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiTmV0
c2NhcGVQbHVnaW4uaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW1w
b3J0ICJMYXllclRyZWVDb250ZXh0LmgiCi0jaW1wb3J0ICJOZXRzY2FwZUJyb3dzZXJGdW5jcy5o
IgotI2ltcG9ydCAiUGx1Z2luQ29udHJvbGxlci5oIgotI2ltcG9ydCAiV2ViS2V5Ym9hcmRFdmVu
dC5oIgotI2ltcG9ydCAiV2ViTW91c2VFdmVudC5oIgotI2ltcG9ydCAiV2ViV2hlZWxFdmVudC5o
IgotI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbXBvcnQgPG9i
amMvcnVudGltZS5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvSElUb29sYm94U1BJLmg+Ci0jaW1w
b3J0IDxwYWwvc3BpL21hYy9OU01lbnVTUEkuaD4KLSNpbXBvcnQgPHd0Zi9NYWNoU2VuZFJpZ2h0
Lmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1N0
cmluZ1ZpZXcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKLQotTlBFcnJvciBOZXRzY2FwZVBsdWdpbjo6c2V0RHJhd2luZ01vZGVsKE5QRHJhd2luZ01v
ZGVsIGRyYXdpbmdNb2RlbCkKLXsKLSAgICAvLyBUaGUgZHJhd2luZyBtb2RlbCBjYW4gb25seSBi
ZSBzZXQgZnJvbSBOUFBfTmV3LgotICAgIGlmICghbV9pbk5QUE5ldykKLSAgICAgICAgcmV0dXJu
IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAgICBzd2l0Y2ggKGRyYXdpbmdNb2RlbCkgewotICAg
ICAgICBjYXNlIE5QRHJhd2luZ01vZGVsQ29yZUdyYXBoaWNzOgotICAgICAgICBjYXNlIE5QRHJh
d2luZ01vZGVsQ29yZUFuaW1hdGlvbjoKLSAgICAgICAgICAgIG1fZHJhd2luZ01vZGVsID0gZHJh
d2luZ01vZGVsOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgIH0KLQotICAgIHJldHVybiBO
UEVSUl9OT19FUlJPUjsKLX0KLSAgICAKLU5QRXJyb3IgTmV0c2NhcGVQbHVnaW46OnNldEV2ZW50
TW9kZWwoTlBFdmVudE1vZGVsIGV2ZW50TW9kZWwpCi17Ci0gICAgLy8gVGhlIGV2ZW50IG1vZGVs
IGNhbiBvbmx5IGJlIHNldCBmcm9tIE5QUF9OZXcuCi0gICAgaWYgKCFtX2luTlBQTmV3KQotICAg
ICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLQotICAgIHN3aXRjaCAoZXZlbnRNb2Rl
bCkgewotICAgICAgICBjYXNlIE5QRXZlbnRNb2RlbENvY29hOgotICAgICAgICAgICAgbV9ldmVu
dE1vZGVsID0gZXZlbnRNb2RlbDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICB9Ci0gICAg
Ci0gICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjpn
ZXRTY3JlZW5UcmFuc2Zvcm0oTlBDb29yZGluYXRlU3BhY2Ugc291cmNlU3BhY2UsIEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIEFTU0VSVCh0cmFuc2Zvcm0uaXNJZGVudGl0eSgp
KTsKLQotICAgIHN3aXRjaCAoc291cmNlU3BhY2UpIHsKLSAgICAgICAgY2FzZSBOUENvb3JkaW5h
dGVTcGFjZVBsdWdpbjogewotICAgICAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShtX3dpbmRv
d0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcy54KCksIG1fd2luZG93RnJhbWVJblNjcmVlbkNvb3Jk
aW5hdGVzLnkoKSk7Ci0gICAgICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKG1fdmlld0ZyYW1l
SW5XaW5kb3dDb29yZGluYXRlcy54KCksIG1fdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcy5o
ZWlnaHQoKSArIG1fdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcy55KCkpOwotICAgICAgICAg
ICAgdHJhbnNmb3JtLmZsaXBZKCk7Ci0gICAgICAgICAgICB0cmFuc2Zvcm0gKj0gbV9wbHVnaW5U
b1Jvb3RWaWV3VHJhbnNmb3JtOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LQotICAgICAgICBjYXNlIE5QQ29vcmRpbmF0ZVNwYWNlV2luZG93OiB7Ci0gICAgICAgICAgICB0
cmFuc2Zvcm0udHJhbnNsYXRlKG1fd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLngoKSwg
bV93aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMueSgpKTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBOUENvb3JkaW5hdGVTcGFjZUZsaXBw
ZWRXaW5kb3c6IHsKLSAgICAgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUobV93aW5kb3dGcmFt
ZUluU2NyZWVuQ29vcmRpbmF0ZXMueCgpLCBtX3dpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRl
cy5oZWlnaHQoKSArIG1fd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLnkoKSk7Ci0gICAg
ICAgICAgICB0cmFuc2Zvcm0uZmxpcFkoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgY2FzZSBOUENvb3JkaW5hdGVTcGFjZVNjcmVlbjogewotICAgICAg
ICAgICAgLy8gTm90aGluZyB0byBkby4KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgY2FzZSBOUENvb3JkaW5hdGVTcGFjZUZsaXBwZWRTY3JlZW46IHsKLSAg
ICAgICAgICAgIGRvdWJsZSBzY3JlZW5IZWlnaHQgPSBbKE5TU2NyZWVuICopW1tOU1NjcmVlbiBz
Y3JlZW5zXSBvYmplY3RBdEluZGV4OjBdIGZyYW1lXS5zaXplLmhlaWdodDsKLSAgICAgICAgICAg
IHRyYW5zZm9ybS50cmFuc2xhdGUoMCwgc2NyZWVuSGVpZ2h0KTsKLSAgICAgICAgICAgIHRyYW5z
Zm9ybS5mbGlwWSgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotTlBC
b29sIE5ldHNjYXBlUGx1Z2luOjpjb252ZXJ0UG9pbnQoZG91YmxlIHNvdXJjZVgsIGRvdWJsZSBz
b3VyY2VZLCBOUENvb3JkaW5hdGVTcGFjZSBzb3VyY2VTcGFjZSwgZG91YmxlJiBkZXN0WCwgZG91
YmxlJiBkZXN0WSwgTlBDb29yZGluYXRlU3BhY2UgZGVzdFNwYWNlKQotewotICAgIEFmZmluZVRy
YW5zZm9ybSBzb3VyY2VUcmFuc2Zvcm07Ci0gICAgaWYgKCFnZXRTY3JlZW5UcmFuc2Zvcm0oc291
cmNlU3BhY2UsIHNvdXJjZVRyYW5zZm9ybSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IEFmZmluZVRyYW5zZm9ybSBkZXN0VHJhbnNmb3JtOwotICAgIGlmICghZ2V0U2NyZWVuVHJhbnNm
b3JtKGRlc3RTcGFjZSwgZGVzdFRyYW5zZm9ybSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmIChhdXRvIGludmVyc2UgPSBkZXN0VHJhbnNmb3JtLmludmVyc2UoKSkgewotICAgICAg
ICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gaW52ZXJzZS52YWx1ZSgpICogc291cmNlVHJh
bnNmb3JtOwotCi0gICAgICAgIEZsb2F0UG9pbnQgZGVzdGluYXRpb25Qb2ludCA9IHRyYW5zZm9y
bS5tYXBQb2ludChGbG9hdFBvaW50KHNvdXJjZVgsIHNvdXJjZVkpKTsKLQotICAgICAgICBkZXN0
WCA9IGRlc3RpbmF0aW9uUG9pbnQueCgpOwotICAgICAgICBkZXN0WSA9IGRlc3RpbmF0aW9uUG9p
bnQueSgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1OUEVycm9yIE5ldHNjYXBlUGx1Z2luOjpwb3BVcENvbnRleHRNZW51KE5QTWVudSogbnBN
ZW51KQotewotICAgIGlmICghbV9jdXJyZW50TW91c2VFdmVudCkKLSAgICAgICAgcmV0dXJuIE5Q
RVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAgICBkb3VibGUgc2NyZWVuWCwgc2NyZWVuWTsKLSAgICBp
ZiAoIWNvbnZlcnRQb2ludChtX2N1cnJlbnRNb3VzZUV2ZW50LT5kYXRhLm1vdXNlLnBsdWdpblgs
IG1fY3VycmVudE1vdXNlRXZlbnQtPmRhdGEubW91c2UucGx1Z2luWSwgTlBDb29yZGluYXRlU3Bh
Y2VQbHVnaW4sIHNjcmVlblgsIHNjcmVlblksIE5QQ29vcmRpbmF0ZVNwYWNlU2NyZWVuKSkKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICBfTlNQb3BVcENhcmJvbk1lbnUzKChf
X2JyaWRnZSBOU01lbnUgKilucE1lbnUsIG5pbCwgbmlsLCBOU01ha2VQb2ludChzY3JlZW5YLCBz
Y3JlZW5ZKSwgLTEsIG5pbCwgMCwgbmlsLCBOU1BvcFVwTWVudVR5cGVDb250ZXh0LCBuaWwpOwot
ICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLX0KLQotY29uc3QgTWFjaFNlbmRSaWdodCYgTmV0
c2NhcGVQbHVnaW46OmNvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydCgpCi17Ci0jaWYgSEFWRShP
VVRfT0ZfUFJPQ0VTU19MQVlFUl9IT1NUSU5HKQotICAgIGlmIChtX2xheWVySG9zdGluZ01vZGUg
PT0gTGF5ZXJIb3N0aW5nTW9kZTo6T3V0T2ZQcm9jZXNzKSB7Ci0gICAgICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxNYWNoU2VuZFJpZ2h0PiBzZW5kUmlnaHQ7Ci0KLSAgICAgICAgcmV0dXJuIHNl
bmRSaWdodDsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiBjb250cm9sbGVyKCktPmNvbXBv
c2l0aW5nUmVuZGVyU2VydmVyUG9ydCgpOwotfQotCi1zdGF0aWMgdm9pZCBOU0V4Y2VwdGlvbl9y
ZWxlYXNlKGlkLCBTRUwpCi17Ci0gICAgLy8gRG8gbm90aGluZy4KLX0KLQotdm9pZCBOZXRzY2Fw
ZVBsdWdpbjo6cGxhdGZvcm1QcmVJbml0aWFsaXplKCkKLXsKLSAgICBpZiAobV9wbHVnaW5Nb2R1
bGUtPnBsdWdpblF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrczo6TGVha0FsbFRocm93bk5T
RXhjZXB0aW9ucykpIHsKLSAgICAgICAgLy8gUGF0Y2ggLVtOU0V4Y2VwdGlvbiByZWxlYXNlXSB0
byBub3QgcmVsZWFzZSB0aGUgb2JqZWN0LgotICAgICAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90
IG9uY2U7Ci0gICAgICAgIGRpc3BhdGNoX29uY2UoJm9uY2UsIF57Ci0gICAgICAgICAgICBhdXRv
IGV4Y2VwdGlvbkNsYXNzID0gW05TRXhjZXB0aW9uIGNsYXNzXTsKLSAgICAgICAgICAgIGF1dG8g
cmVsZWFzZVNlbGVjdG9yID0gc2VsX3JlZ2lzdGVyTmFtZSgicmVsZWFzZSIpOwotICAgICAgICAg
ICAgYXV0byBleGNlcHRpb25SZWxlYXNlTWV0aG9kID0gY2xhc3NfZ2V0SW5zdGFuY2VNZXRob2Qo
ZXhjZXB0aW9uQ2xhc3MsIHJlbGVhc2VTZWxlY3Rvcik7Ci0gICAgICAgICAgICBjbGFzc19yZXBs
YWNlTWV0aG9kKGV4Y2VwdGlvbkNsYXNzLCByZWxlYXNlU2VsZWN0b3IsIHJlaW50ZXJwcmV0X2Nh
c3Q8SU1QPihOU0V4Y2VwdGlvbl9yZWxlYXNlKSwgbWV0aG9kX2dldFR5cGVFbmNvZGluZyhleGNl
cHRpb25SZWxlYXNlTWV0aG9kKSk7Ci0gICAgICAgIH0pOwotICAgIH0KLX0KLQotYm9vbCBOZXRz
Y2FwZVBsdWdpbjo6cGxhdGZvcm1Qb3N0SW5pdGlhbGl6ZSgpCi17Ci0gICAgaWYgKG1fZHJhd2lu
Z01vZGVsID09IHN0YXRpY19jYXN0PE5QRHJhd2luZ01vZGVsPigtMSkpCi0gICAgICAgIG1fZHJh
d2luZ01vZGVsID0gTlBEcmF3aW5nTW9kZWxDb3JlR3JhcGhpY3M7Ci0gICAgCi0gICAgaWYgKG1f
ZXZlbnRNb2RlbCA9PSBzdGF0aWNfY2FzdDxOUEV2ZW50TW9kZWw+KC0xKSkKLSAgICAgICAgbV9l
dmVudE1vZGVsID0gTlBFdmVudE1vZGVsQ29jb2E7Ci0KLSAgICB1cGRhdGVQbHVnaW5MYXllcigp
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OnBsYXRmb3Jt
RGVzdHJveSgpCi17Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46OnBsYXRmb3JtSW52YWxpZGF0
ZShjb25zdCBJbnRSZWN0JikKLXsKLSAgICAvLyBOUE5fSW52YWxpZGF0ZVJlY3QgaXMganVzdCBh
IG5vLW9wIGluIHRoZSBDb3JlIEFuaW1hdGlvbiBkcmF3aW5nIG1vZGVsLgotICAgIGlmIChtX2Ry
YXdpbmdNb2RlbCA9PSBOUERyYXdpbmdNb2RlbENvcmVBbmltYXRpb24pCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpw
bGF0Zm9ybUdlb21ldHJ5RGlkQ2hhbmdlKCkKLXsKLSAgICBzd2l0Y2ggKG1fZXZlbnRNb2RlbCkg
ewotICAgIGNhc2UgTlBFdmVudE1vZGVsQ29jb2E6Ci0gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8K
LSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgfQotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpwbGF0Zm9ybVZpc2liaWxpdHlE
aWRDaGFuZ2UoKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4gPGh0dHA6Ly93ZWJr
aXQub3JnL2IvNDQzNjg+LgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgTlBDb2NvYUV2ZW50IGluaXRpYWxpemVFdmVudChOUENvY29hRXZlbnRUeXBlIHR5cGUpCi17
Ci0gICAgTlBDb2NvYUV2ZW50IGV2ZW50OwotICAgIAotICAgIGV2ZW50LnR5cGUgPSB0eXBlOwot
ICAgIGV2ZW50LnZlcnNpb24gPSAwOwotICAgIAotICAgIHJldHVybiBldmVudDsKLX0KLQotdm9p
ZCBOZXRzY2FwZVBsdWdpbjo6cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCwgYm9vbCBpc1NuYXBzaG90KQotewotICAgIENHQ29u
dGV4dFJlZiBwbGF0Zm9ybUNvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwotCi0g
ICAgc3dpdGNoIChtX2V2ZW50TW9kZWwpIHsKLSAgICAgICAgY2FzZSBOUEV2ZW50TW9kZWxDb2Nv
YTogewotICAgICAgICAgICAgLy8gRG9uJ3Qgc2VuZCBkcmF3IGV2ZW50cyB3aGVuIHdlJ3JlIHVz
aW5nIHRoZSBDb3JlIEFuaW1hdGlvbiBkcmF3aW5nIG1vZGVsLgotICAgICAgICAgICAgaWYgKCFp
c1NuYXBzaG90ICYmIG1fZHJhd2luZ01vZGVsID09IE5QRHJhd2luZ01vZGVsQ29yZUFuaW1hdGlv
bikKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIE5QQ29jb2FFdmVudCBl
dmVudCA9IGluaXRpYWxpemVFdmVudChOUENvY29hRXZlbnREcmF3UmVjdCk7Ci0KLSAgICAgICAg
ICAgIGV2ZW50LmRhdGEuZHJhdy5jb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0OwotICAgICAgICAg
ICAgZXZlbnQuZGF0YS5kcmF3LnggPSBkaXJ0eVJlY3QueCgpOwotICAgICAgICAgICAgZXZlbnQu
ZGF0YS5kcmF3LnkgPSBkaXJ0eVJlY3QueSgpOwotICAgICAgICAgICAgZXZlbnQuZGF0YS5kcmF3
LndpZHRoID0gZGlydHlSZWN0LndpZHRoKCk7Ci0gICAgICAgICAgICBldmVudC5kYXRhLmRyYXcu
aGVpZ2h0ID0gZGlydHlSZWN0LmhlaWdodCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBO
UFBfSGFuZGxlRXZlbnQoJmV2ZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IH0KLX0KLQotc3RhdGljIHVpbnQzMl90IG1vZGlmaWVyRmxhZ3MoY29uc3QgV2ViRXZlbnQmIGV2
ZW50KQotewotICAgIHVpbnQzMl90IG1vZGlmaWVycyA9IDA7Ci0KLSAgICBpZiAoZXZlbnQuc2hp
ZnRLZXkoKSkKLSAgICAgICAgbW9kaWZpZXJzIHw9IE5TRXZlbnRNb2RpZmllckZsYWdTaGlmdDsK
LSAgICBpZiAoZXZlbnQuY29udHJvbEtleSgpKQotICAgICAgICBtb2RpZmllcnMgfD0gTlNFdmVu
dE1vZGlmaWVyRmxhZ0NvbnRyb2w7Ci0gICAgaWYgKGV2ZW50LmFsdEtleSgpKQotICAgICAgICBt
b2RpZmllcnMgfD0gTlNFdmVudE1vZGlmaWVyRmxhZ09wdGlvbjsKLSAgICBpZiAoZXZlbnQubWV0
YUtleSgpKQotICAgICAgICBtb2RpZmllcnMgfD0gTlNFdmVudE1vZGlmaWVyRmxhZ0NvbW1hbmQ7
Ci0gICAgCi0gICAgcmV0dXJuIG1vZGlmaWVyczsKLX0KLSAgICAKLXN0YXRpYyBpbnQzMl90IGJ1
dHRvbk51bWJlcihXZWJNb3VzZUV2ZW50OjpCdXR0b24gYnV0dG9uKQotewotICAgIHN3aXRjaCAo
YnV0dG9uKSB7Ci0gICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpOb0J1dHRvbjoKLSAgICBjYXNlIFdl
Yk1vdXNlRXZlbnQ6OkxlZnRCdXR0b246Ci0gICAgICAgIHJldHVybiAwOwotICAgIGNhc2UgV2Vi
TW91c2VFdmVudDo6UmlnaHRCdXR0b246Ci0gICAgICAgIHJldHVybiAxOwotICAgIGNhc2UgV2Vi
TW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOgotICAgICAgICByZXR1cm4gMjsKLSAgICB9Ci0KLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyB2b2lk
IGZpbGxJbkNvY29hRXZlbnRGcm9tTW91c2VFdmVudChOUENvY29hRXZlbnQmIGV2ZW50LCBjb25z
dCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZXZl
bnRQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXMpCi17Ci0gICAgZXZlbnQuZGF0YS5tb3VzZS5t
b2RpZmllckZsYWdzID0gbW9kaWZpZXJGbGFncyhtb3VzZUV2ZW50KTsKLSAgICBldmVudC5kYXRh
Lm1vdXNlLnBsdWdpblggPSBldmVudFBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRlcy54KCk7Ci0g
ICAgZXZlbnQuZGF0YS5tb3VzZS5wbHVnaW5ZID0gZXZlbnRQb3NpdGlvbkluUGx1Z2luQ29vcmRp
bmF0ZXMueSgpOwotICAgIGV2ZW50LmRhdGEubW91c2UuYnV0dG9uTnVtYmVyID0gYnV0dG9uTnVt
YmVyKG1vdXNlRXZlbnQuYnV0dG9uKCkpOwotICAgIGV2ZW50LmRhdGEubW91c2UuY2xpY2tDb3Vu
dCA9IG1vdXNlRXZlbnQuY2xpY2tDb3VudCgpOwotICAgIGV2ZW50LmRhdGEubW91c2UuZGVsdGFY
ID0gbW91c2VFdmVudC5kZWx0YVgoKTsKLSAgICBldmVudC5kYXRhLm1vdXNlLmRlbHRhWSA9IG1v
dXNlRXZlbnQuZGVsdGFZKCk7Ci0gICAgZXZlbnQuZGF0YS5tb3VzZS5kZWx0YVogPSBtb3VzZUV2
ZW50LmRlbHRhWigpOwotfQotICAgIAotc3RhdGljIE5QQ29jb2FFdmVudCBpbml0aWFsaXplTW91
c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgZXZlbnRQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXMpCi17Ci0gICAgTlBDb2Nv
YUV2ZW50VHlwZSBldmVudFR5cGU7Ci0KLSAgICBzd2l0Y2ggKG1vdXNlRXZlbnQudHlwZSgpKSB7
Ci0gICAgY2FzZSBXZWJFdmVudDo6TW91c2VEb3duOgotICAgICAgICBldmVudFR5cGUgPSBOUENv
Y29hRXZlbnRNb3VzZURvd247Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViRXZlbnQ6Ok1v
dXNlVXA6Ci0gICAgICAgIGV2ZW50VHlwZSA9IE5QQ29jb2FFdmVudE1vdXNlVXA7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZToKLSAgICAgICAgaWYgKG1vdXNl
RXZlbnQuYnV0dG9uKCkgPT0gV2ViTW91c2VFdmVudDo6Tm9CdXR0b24pCi0gICAgICAgICAgICBl
dmVudFR5cGUgPSBOUENvY29hRXZlbnRNb3VzZU1vdmVkOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBldmVudFR5cGUgPSBOUENvY29hRXZlbnRNb3VzZURyYWdnZWQ7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm4gTlBDb2NvYUV2ZW50KCk7Ci0gICAgfQotCi0gICAgTlBDb2NvYUV2ZW50IGV2ZW50ID0g
aW5pdGlhbGl6ZUV2ZW50KGV2ZW50VHlwZSk7Ci0gICAgZmlsbEluQ29jb2FFdmVudEZyb21Nb3Vz
ZUV2ZW50KGV2ZW50LCBtb3VzZUV2ZW50LCBldmVudFBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRl
cyk7Ci0gICAgcmV0dXJuIGV2ZW50OwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjpwbGF0Zm9y
bUhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCkKLXsKLSAg
ICBJbnRQb2ludCBldmVudFBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRlczsKLSAgICBpZiAoIWNv
bnZlcnRGcm9tUm9vdFZpZXcobW91c2VFdmVudC5wb3NpdGlvbigpLCBldmVudFBvc2l0aW9uSW5Q
bHVnaW5Db29yZGluYXRlcykpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgc3dpdGNoICht
X2V2ZW50TW9kZWwpIHsKLSAgICAgICAgY2FzZSBOUEV2ZW50TW9kZWxDb2NvYTogewotICAgICAg
ICAgICAgTlBDb2NvYUV2ZW50IGV2ZW50ID0gaW5pdGlhbGl6ZU1vdXNlRXZlbnQobW91c2VFdmVu
dCwgZXZlbnRQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXMpOwotCi0gICAgICAgICAgICBOUENv
Y29hRXZlbnQqIHByZXZpb3VzTW91c2VFdmVudCA9IG1fY3VycmVudE1vdXNlRXZlbnQ7Ci0gICAg
ICAgICAgICBtX2N1cnJlbnRNb3VzZUV2ZW50ID0gJmV2ZW50OwotCi0gICAgICAgICAgICAvLyBQ
cm90ZWN0IGFnYWluc3QgTlBQX0hhbmRsZUV2ZW50IGNhdXNpbmcgdGhlIHBsdWctaW4gdG8gYmUg
ZGVzdHJveWVkLCBzaW5jZSB3ZQotICAgICAgICAgICAgLy8gYWNjZXNzIG1fY3VycmVudE1vdXNl
RXZlbnQgYWZ0ZXJ3YXJkcy4KLSAgICAgICAgICAgIFJlZjxOZXRzY2FwZVBsdWdpbj4gcHJvdGVj
dCgqdGhpcyk7Ci0KLSAgICAgICAgICAgIE5QUF9IYW5kbGVFdmVudCgmZXZlbnQpOwotCi0gICAg
ICAgICAgICBtX2N1cnJlbnRNb3VzZUV2ZW50ID0gcHJldmlvdXNNb3VzZUV2ZW50OwotCi0gICAg
ICAgICAgICAvLyBTb21lIHBsdWctaW5zIHJldHVybiBmYWxzZSBldmVuIGlmIHRoZSBtb3VzZSBl
dmVudCBoYXMgYmVlbiBoYW5kbGVkLgotICAgICAgICAgICAgLy8gVGhpcyBsZWFkcyB0byBidWdz
IHN1Y2ggYXMgPHJkYXI6Ly9wcm9ibGVtLzkxNjc2MTE+LiBXb3JrIGFyb3VuZCB0aGlzCi0gICAg
ICAgICAgICAvLyBieSBhbHdheXMgcmV0dXJuaW5nIHRydWUuCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgTmV0
c2NhcGVQbHVnaW46OnBsYXRmb3JtSGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50
JiB3aGVlbEV2ZW50KQotewotICAgIHN3aXRjaCAobV9ldmVudE1vZGVsKSB7Ci0gICAgICAgIGNh
c2UgTlBFdmVudE1vZGVsQ29jb2E6IHsKLSAgICAgICAgICAgIEludFBvaW50IGV2ZW50UG9zaXRp
b25JblBsdWdpbkNvb3JkaW5hdGVzOwotICAgICAgICAgICAgaWYgKCFjb252ZXJ0RnJvbVJvb3RW
aWV3KHdoZWVsRXZlbnQucG9zaXRpb24oKSwgZXZlbnRQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0
ZXMpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgICBOUENvY29h
RXZlbnQgZXZlbnQgPSBpbml0aWFsaXplRXZlbnQoTlBDb2NvYUV2ZW50U2Nyb2xsV2hlZWwpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBldmVudC5kYXRhLm1vdXNlLm1vZGlmaWVyRmxhZ3Mg
PSBtb2RpZmllckZsYWdzKHdoZWVsRXZlbnQpOwotICAgICAgICAgICAgZXZlbnQuZGF0YS5tb3Vz
ZS5wbHVnaW5YID0gZXZlbnRQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXMueCgpOwotICAgICAg
ICAgICAgZXZlbnQuZGF0YS5tb3VzZS5wbHVnaW5ZID0gZXZlbnRQb3NpdGlvbkluUGx1Z2luQ29v
cmRpbmF0ZXMueSgpOwotICAgICAgICAgICAgZXZlbnQuZGF0YS5tb3VzZS5idXR0b25OdW1iZXIg
PSAwOwotICAgICAgICAgICAgZXZlbnQuZGF0YS5tb3VzZS5jbGlja0NvdW50ID0gMDsKLSAgICAg
ICAgICAgIGV2ZW50LmRhdGEubW91c2UuZGVsdGFYID0gd2hlZWxFdmVudC5kZWx0YSgpLndpZHRo
KCk7Ci0gICAgICAgICAgICBldmVudC5kYXRhLm1vdXNlLmRlbHRhWSA9IHdoZWVsRXZlbnQuZGVs
dGEoKS5oZWlnaHQoKTsKLSAgICAgICAgICAgIGV2ZW50LmRhdGEubW91c2UuZGVsdGFaID0gMDsK
LSAgICAgICAgICAgIHJldHVybiBOUFBfSGFuZGxlRXZlbnQoJmV2ZW50KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46OnBsYXRm
b3JtSGFuZGxlTW91c2VFbnRlckV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIG1vdXNlRXZlbnQp
Ci17Ci0gICAgc3dpdGNoIChtX2V2ZW50TW9kZWwpIHsKLSAgICAgICAgY2FzZSBOUEV2ZW50TW9k
ZWxDb2NvYTogewotICAgICAgICAgICAgTlBDb2NvYUV2ZW50IGV2ZW50ID0gaW5pdGlhbGl6ZUV2
ZW50KE5QQ29jb2FFdmVudE1vdXNlRW50ZXJlZCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGZpbGxJbkNvY29hRXZlbnRGcm9tTW91c2VFdmVudChldmVudCwgbW91c2VFdmVudCwgSW50UG9p
bnQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gTlBQX0hhbmRsZUV2ZW50KCZldmVudCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2lu
OjpwbGF0Zm9ybUhhbmRsZU1vdXNlTGVhdmVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3Vz
ZUV2ZW50KQotewotICAgIHN3aXRjaCAobV9ldmVudE1vZGVsKSB7Ci0gICAgICAgIGNhc2UgTlBF
dmVudE1vZGVsQ29jb2E6IHsKLSAgICAgICAgICAgIE5QQ29jb2FFdmVudCBldmVudCA9IGluaXRp
YWxpemVFdmVudChOUENvY29hRXZlbnRNb3VzZUV4aXRlZCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGZpbGxJbkNvY29hRXZlbnRGcm9tTW91c2VFdmVudChldmVudCwgbW91c2VFdmVudCwg
SW50UG9pbnQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gTlBQX0hhbmRsZUV2ZW50KCZldmVudCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdW5zaWdu
ZWQgbW9kaWZpZXJGbGFncyhjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBrZXlib2FyZEV2ZW50KQot
ewotICAgIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MgPSAwOwotCi0gICAgaWYgKGtleWJvYXJkRXZl
bnQuY2Fwc0xvY2tLZXkoKSkKLSAgICAgICAgbW9kaWZpZXJGbGFncyB8PSBOU0V2ZW50TW9kaWZp
ZXJGbGFnQ2Fwc0xvY2s7Ci0gICAgaWYgKGtleWJvYXJkRXZlbnQuc2hpZnRLZXkoKSkKLSAgICAg
ICAgbW9kaWZpZXJGbGFncyB8PSBOU0V2ZW50TW9kaWZpZXJGbGFnU2hpZnQ7Ci0gICAgaWYgKGtl
eWJvYXJkRXZlbnQuY29udHJvbEtleSgpKQotICAgICAgICBtb2RpZmllckZsYWdzIHw9IE5TRXZl
bnRNb2RpZmllckZsYWdDb250cm9sOwotICAgIGlmIChrZXlib2FyZEV2ZW50LmFsdEtleSgpKQot
ICAgICAgICBtb2RpZmllckZsYWdzIHw9IE5TRXZlbnRNb2RpZmllckZsYWdPcHRpb247Ci0gICAg
aWYgKGtleWJvYXJkRXZlbnQubWV0YUtleSgpKQotICAgICAgICBtb2RpZmllckZsYWdzIHw9IE5T
RXZlbnRNb2RpZmllckZsYWdDb21tYW5kOwotCi0gICAgcmV0dXJuIG1vZGlmaWVyRmxhZ3M7Ci19
Ci0KLXN0YXRpYyBib29sIGlzRmxhZ3NDaGFuZ2VkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVu
dCYga2V5Ym9hcmRFdmVudCkKLXsKLSAgICBzd2l0Y2ggKGtleWJvYXJkRXZlbnQubmF0aXZlVmly
dHVhbEtleUNvZGUoKSkgewotICAgIGNhc2UgNTQ6IC8vIFJpZ2h0IENvbW1hbmQKLSAgICBjYXNl
IDU1OiAvLyBMZWZ0IENvbW1hbmQKLQotICAgIGNhc2UgNTc6IC8vIENhcHNsb2NrCi0KLSAgICBj
YXNlIDU2OiAvLyBMZWZ0IFNoaWZ0Ci0gICAgY2FzZSA2MDogLy8gUmlnaHQgU2hpZnQKLQotICAg
IGNhc2UgNTg6IC8vIExlZnQgQWx0Ci0gICAgY2FzZSA2MTogLy8gUmlnaHQgQWx0Ci0gICAgICAg
ICAgICAKLSAgICBjYXNlIDU5OiAvLyBMZWZ0IEN0cmwKLSAgICBjYXNlIDYyOiAvLyBSaWdodCBD
dHJsCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotc3RhdGljIE5QTlNTdHJpbmcgKmNvbnZlcnRUb05QTk5TdHJpbmcoY29uc3QgU3RyaW5nJiBz
dHJpbmcpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PE5QTlNTdHJpbmcqPihzdGF0aWNfY2Fz
dDxOU1N0cmluZyo+KHN0cmluZykpOwotfQotCi1zdGF0aWMgTlBDb2NvYUV2ZW50IGluaXRpYWxp
emVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQpCi17
Ci0gICAgTlBDb2NvYUV2ZW50VHlwZSBldmVudFR5cGU7Ci0KLSAgICBpZiAoaXNGbGFnc0NoYW5n
ZWRFdmVudChrZXlib2FyZEV2ZW50KSkKLSAgICAgICAgZXZlbnRUeXBlID0gTlBDb2NvYUV2ZW50
RmxhZ3NDaGFuZ2VkOwotICAgIGVsc2UgewotICAgICAgICBzd2l0Y2ggKGtleWJvYXJkRXZlbnQu
dHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFdlYkV2ZW50OjpLZXlEb3duOgotICAgICAgICAg
ICAgICAgIGV2ZW50VHlwZSA9IE5QQ29jb2FFdmVudEtleURvd247Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkV2ZW50OjpLZXlVcDoKLSAgICAgICAgICAgICAg
ICBldmVudFR5cGUgPSBOUENvY29hRXZlbnRLZXlVcDsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5QQ29jb2FFdmVudCgpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgTlBDb2NvYUV2ZW50IGV2ZW50ID0gaW5pdGlhbGl6ZUV2ZW50KGV2ZW50VHlw
ZSk7Ci0gICAgZXZlbnQuZGF0YS5rZXkubW9kaWZpZXJGbGFncyA9IG1vZGlmaWVyRmxhZ3Moa2V5
Ym9hcmRFdmVudCk7Ci0gICAgZXZlbnQuZGF0YS5rZXkuY2hhcmFjdGVycyA9IGNvbnZlcnRUb05Q
Tk5TdHJpbmcoa2V5Ym9hcmRFdmVudC50ZXh0KCkpOwotICAgIGV2ZW50LmRhdGEua2V5LmNoYXJh
Y3RlcnNJZ25vcmluZ01vZGlmaWVycyA9IGNvbnZlcnRUb05QTk5TdHJpbmcoa2V5Ym9hcmRFdmVu
dC51bm1vZGlmaWVkVGV4dCgpKTsKLSAgICBldmVudC5kYXRhLmtleS5pc0FSZXBlYXQgPSBrZXli
b2FyZEV2ZW50LmlzQXV0b1JlcGVhdCgpOwotICAgIGV2ZW50LmRhdGEua2V5LmtleUNvZGUgPSBr
ZXlib2FyZEV2ZW50Lm5hdGl2ZVZpcnR1YWxLZXlDb2RlKCk7Ci0KLSAgICByZXR1cm4gZXZlbnQ7
Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46OnBsYXRmb3JtSGFuZGxlS2V5Ym9hcmRFdmVudChj
b25zdCBXZWJLZXlib2FyZEV2ZW50JiBrZXlib2FyZEV2ZW50KQotewotICAgIGJvb2wgaGFuZGxl
ZCA9IGZhbHNlOwotCi0gICAgc3dpdGNoIChtX2V2ZW50TW9kZWwpIHsKLSAgICBjYXNlIE5QRXZl
bnRNb2RlbENvY29hOiB7Ci0gICAgICAgIGlmIChrZXlib2FyZEV2ZW50LnR5cGUoKSA9PSBXZWJF
dmVudDo6S2V5RG93bikgewotICAgICAgICAgICAgbV9oYXNIYW5kbGVkQUtleURvd25FdmVudCA9
IHRydWU7Ci0KLSAgICAgICAgICAgIGlmICghbV9wbHVnaW5XYW50c0xlZ2FjeUNvY29hVGV4dElu
cHV0ICYmIG1faXNDb21wbGV4VGV4dElucHV0RW5hYmxlZCAmJiAha2V5Ym9hcmRFdmVudC5pc0F1
dG9SZXBlYXQoKSkgewotICAgICAgICAgICAgICAgIC8vIFdoZW4gY29tcGxleCB0ZXh0IGlzIGVu
YWJsZWQgaW4gdGhlIG5ldyBtb2RlbCwgdGhlIHBsdWctaW4gc2hvdWxkIG5ldmVyCi0gICAgICAg
ICAgICAgICAgLy8gcmVjZWl2ZSBhbnkga2V5IGRvd24gb3Iga2V5IHVwIGV2ZW50cyB1bnRpbCB0
aGUgY29tcG9zaXRpb24gaXMgY29tcGxldGUuCi0gICAgICAgICAgICAgICAgbV9pZ25vcmVOZXh0
S2V5VXBFdmVudENvdW50ZXIrKzsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChrZXlib2FyZEV2ZW50LnR5cGUoKSA9PSBXZWJF
dmVudDo6S2V5VXAgJiYgbV9pZ25vcmVOZXh0S2V5VXBFdmVudENvdW50ZXIpIHsKLSAgICAgICAg
ICAgIG1faWdub3JlTmV4dEtleVVwRXZlbnRDb3VudGVyLS07Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIE5QQ29jb2FFdmVudCBldmVudCA9IGluaXRpYWxp
emVLZXlib2FyZEV2ZW50KGtleWJvYXJkRXZlbnQpOwotICAgICAgICBpbnQxNl90IHJldHVyblZh
bHVlID0gTlBQX0hhbmRsZUV2ZW50KCZldmVudCk7Ci0gICAgICAgIGhhbmRsZWQgPSByZXR1cm5W
YWx1ZTsKLQotICAgICAgICBpZiAoIW1fcGx1Z2luV2FudHNMZWdhY3lDb2NvYVRleHRJbnB1dCkg
ewotICAgICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT0gTlBDb2NvYUV2ZW50S2V5RG93biAmJiBy
ZXR1cm5WYWx1ZSA9PSBrTlBFdmVudFN0YXJ0SU1FKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFr
ZXlib2FyZEV2ZW50LmlzQXV0b1JlcGVhdCgpKQotICAgICAgICAgICAgICAgICAgICBtX2lnbm9y
ZU5leHRLZXlVcEV2ZW50Q291bnRlcisrOwotICAgICAgICAgICAgICAgIHNldENvbXBsZXhUZXh0
SW5wdXRFbmFibGVkKHRydWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgfQotCi0gICAgLy8gTW9zdCBwbHVnLWlucyBzaW1wbHkgcmV0dXJuIHRydWUgZm9y
IGFsbCBrZXlib2FyZCBldmVudHMsIGV2ZW4gdGhvc2UgdGhhdCBhcmVuJ3QgaGFuZGxlZC4KLSAg
ICAvLyBUaGlzIGxlYWRzIHRvIGJ1Z3Mgc3VjaCBhcyA8cmRhcjovL3Byb2JsZW0vODc0MDkyNj4u
IFdlIHdvcmsgYXJvdW5kIHRoaXMgYnkgcmV0dXJuaW5nIGZhbHNlCi0gICAgLy8gaWYgdGhlIGtl
eWJvYXJkIGV2ZW50IGhhcyB0aGUgY29tbWFuZCBtb2RpZmllciBwcmVzc2VkLgotICAgIC8vIEhv
d2V2ZXIsIGZvciBjb21tYW5kLUEgKHRoZSBzaG9ydGN1cnQgZm9yICdTZWxlY3QgQWxsJyB3ZSB3
aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZSwgc2luY2Ugd2UgZG9uJ3QKLSAgICAvLyB3YW50IHRoZSBl
bnRpcmUgcGFnZSB0byBiZSBzZWxlY3RlZCBpZiB0aGUgZm9jdXMgaXMgaW4gYSBwbHVnLWluIHRl
eHQgZmllbGQgKHNlZSA8cmRhcjovL3Byb2JsZW0vOTMwOTkwMz4pLgotICAgIGlmIChrZXlib2Fy
ZEV2ZW50Lm1ldGFLZXkoKSkgewotICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC50ZXh0KCkgPT0g
ImEiKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHJldHVybiBoYW5kbGVkOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpw
bGF0Zm9ybVNldEZvY3VzKGJvb2wgaGFzRm9jdXMpCi17Ci0gICAgbV9wbHVnaW5IYXNGb2N1cyA9
IGhhc0ZvY3VzOwotICAgIHBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQoKTsKLQotICAg
IHN3aXRjaCAobV9ldmVudE1vZGVsKSB7Ci0gICAgICAgIGNhc2UgTlBFdmVudE1vZGVsQ29jb2E6
IHsKLSAgICAgICAgICAgIE5QQ29jb2FFdmVudCBldmVudCA9IGluaXRpYWxpemVFdmVudChOUENv
Y29hRXZlbnRGb2N1c0NoYW5nZWQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBldmVudC5k
YXRhLmZvY3VzLmhhc0ZvY3VzID0gaGFzRm9jdXM7Ci0gICAgICAgICAgICBOUFBfSGFuZGxlRXZl
bnQoJmV2ZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotYm9v
bCBOZXRzY2FwZVBsdWdpbjo6d2FudHNQbHVnaW5SZWxhdGl2ZU5QV2luZG93Q29vcmRpbmF0ZXMo
KQotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjp3aW5kb3dG
b2N1c0NoYW5nZWQoYm9vbCBoYXNGb2N1cykKLXsKLSAgICBtX3dpbmRvd0hhc0ZvY3VzID0gaGFz
Rm9jdXM7Ci0gICAgcGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZCgpOwotCi0gICAgc3dp
dGNoIChtX2V2ZW50TW9kZWwpIHsKLSAgICAgICAgY2FzZSBOUEV2ZW50TW9kZWxDb2NvYTogewot
ICAgICAgICAgICAgTlBDb2NvYUV2ZW50IGV2ZW50ID0gaW5pdGlhbGl6ZUV2ZW50KE5QQ29jb2FF
dmVudFdpbmRvd0ZvY3VzQ2hhbmdlZCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGV2ZW50
LmRhdGEuZm9jdXMuaGFzRm9jdXMgPSBoYXNGb2N1czsKLSAgICAgICAgICAgIE5QUF9IYW5kbGVF
dmVudCgmZXZlbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi12
b2lkIE5ldHNjYXBlUGx1Z2luOjp3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBJbnRS
ZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IEludFJlY3QmIHZpZXdG
cmFtZUluV2luZG93Q29vcmRpbmF0ZXMpCi17Ci0gICAgbV93aW5kb3dGcmFtZUluU2NyZWVuQ29v
cmRpbmF0ZXMgPSB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXM7Ci0gICAgbV92aWV3RnJh
bWVJbldpbmRvd0Nvb3JkaW5hdGVzID0gdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlczsKLQot
ICAgIHN3aXRjaCAobV9ldmVudE1vZGVsKSB7Ci0gICAgICAgIGNhc2UgTlBFdmVudE1vZGVsQ29j
b2E6Ci0gICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IH0KLX0KLSAgICAKLXZvaWQgTmV0c2NhcGVQbHVnaW46OndpbmRvd1Zpc2liaWxpdHlDaGFuZ2Vk
KGJvb2wgdmlzaWJsZSkKLXsKLSAgICBpZiAodmlzaWJsZSkKLSAgICAgICAgY2FsbFNldFdpbmRv
dygpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbFNldFdpbmRvd0ludmlzaWJsZSgpOwotfQotCi11
aW50NjRfdCBOZXRzY2FwZVBsdWdpbjo6cGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIo
KSBjb25zdAotewotICAgIC8vIEp1c3QgcmV0dXJuIGEgZHVtbXkgdmFsdWU7IHRoaXMgaXMgb25s
eSBjYWxsZWQgZm9yIGluLXByb2Nlc3MgcGx1Zy1pbnMsIHdoaWNoIHdlIGRvbid0IHN1cHBvcnQg
b24gTWFjLgotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KHRoaXMpKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6c2VuZENvbXBs
ZXhUZXh0SW5wdXQoY29uc3QgU3RyaW5nJiB0ZXh0SW5wdXQpCi17Ci0gICAgaWYgKCFtX3BsdWdp
bldhbnRzTGVnYWN5Q29jb2FUZXh0SW5wdXQpIHsKLSAgICAgICAgLy8gSW4gdGhlIHVwZGF0ZWQg
Q29jb2EgdGV4dCBpbnB1dCBzcGVjLCB0ZXh0IGlucHV0IGlzIGRpc2FibGVkIHdoZW4gdGhlIHRl
eHQgaW5wdXQgc3RyaW5nIGhhcyBiZWVuIHNlbnQKLSAgICAgICAgLy8gYnkgdGhlIFVJIHByb2Nl
c3MuIFNpbmNlIHRoZSBVSSBwcm9jZXNzIGhhcyBhbHNvIHVwZGF0ZWQgaXRzIHN0YXRlLCB3ZSBj
YW4ganVzdCByZXNldCB0aGUgdmFyaWFibGUgaGVyZQotICAgICAgICAvLyBpbnN0ZWFkIG9mIGNh
bGxpbmcgc2V0Q29tcGxleFRleHRJbnB1dEVuYWJsZWQuCi0gICAgICAgIG1faXNDb21wbGV4VGV4
dElucHV0RW5hYmxlZCA9IGZhbHNlOwotCi0gICAgICAgIC8vIFRoZSBVSSBwcm9jZXNzIGNhbiBh
bHNvIGRpc2FibGUgdGV4dCBpbnB1dCBieSBzZW5kaW5nIGFuIGVtcHR5IGlucHV0IHN0cmluZy4g
SW4gdGhpcyBjYXNlLCB3ZSBkb24ndCB3YW50Ci0gICAgICAgIC8vIHRvIHNlbmQgaXQgdG8gdGhl
IHBsdWctaW4uCi0gICAgICAgIGlmICh0ZXh0SW5wdXQuaXNOdWxsKCkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgc3dpdGNoIChtX2V2ZW50TW9kZWwpIHsKLSAgICBjYXNlIE5Q
RXZlbnRNb2RlbENvY29hOiB7Ci0gICAgICAgIE5QQ29jb2FFdmVudCBldmVudCA9IGluaXRpYWxp
emVFdmVudChOUENvY29hRXZlbnRUZXh0SW5wdXQpOwotICAgICAgICBldmVudC5kYXRhLnRleHQu
dGV4dCA9IGNvbnZlcnRUb05QTk5TdHJpbmcodGV4dElucHV0KTsKLSAgICAgICAgTlBQX0hhbmRs
ZUV2ZW50KCZldmVudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVn
aW46OnNldExheWVySG9zdGluZ01vZGUoTGF5ZXJIb3N0aW5nTW9kZSBsYXllckhvc3RpbmdNb2Rl
KQotewotICAgIG1fbGF5ZXJIb3N0aW5nTW9kZSA9IGxheWVySG9zdGluZ01vZGU7Ci0KLSAgICAv
LyBUZWxsIHRoZSBwbHVnLWluIGFib3V0IHRoZSBuZXcgY29tcG9zaXRpbmcgcmVuZGVyIHNlcnZl
ciBwb3J0LiBJZiBpdCByZXR1cm5zIE9LIHdlJ2xsIGFzayBpdCBhZ2FpbiBmb3IgYSBuZXcgbGF5
ZXIuCi0gICAgbWFjaF9wb3J0X3QgcG9ydCA9IE5ldHNjYXBlUGx1Z2luOjpjb21wb3NpdGluZ1Jl
bmRlclNlcnZlclBvcnQoKS5zZW5kUmlnaHQoKTsKLSAgICBpZiAoTlBQX1NldFZhbHVlKHN0YXRp
Y19jYXN0PE5QTlZhcmlhYmxlPihXS05WQ0FMYXllclJlbmRlclNlcnZlclBvcnQpLCAmcG9ydCkg
IT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGx1Z2luTGF5ZXIg
PSBudWxscHRyOwotICAgIHVwZGF0ZVBsdWdpbkxheWVyKCk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQ
bHVnaW46OnBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQoKQotewotICAgIGJvb2wgcGx1
Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1cyA9IG1fcGx1Z2luSGFzRm9jdXMgJiYgbV93aW5k
b3dIYXNGb2N1czsKLQotICAgIGNvbnRyb2xsZXIoKS0+cGx1Z2luRm9jdXNPcldpbmRvd0ZvY3Vz
Q2hhbmdlZChwbHVnaW5IYXNGb2N1c0FuZFdpbmRvd0hhc0ZvY3VzKTsKLQotICAgIC8vIEluIHRo
ZSB1cGRhdGVkIENvY29hIHRleHQgaW5wdXQgc3BlYywgdGhlIHBsdWctaW4gd2lsbCBlbmFibGUg
Y29tcGxleCB0ZXh0IGlucHV0Ci0gICAgLy8gYnkgcmV0dXJuaW5nIGtOUEV2ZW50U3RhcnRJTUUg
ZnJvbSBpdCdzIE5QQ29jb2FFdmVudEtleURvd24gaGFuZGxlci4KLSAgICBpZiAoIW1fcGx1Z2lu
V2FudHNMZWdhY3lDb2NvYVRleHRJbnB1dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSW4g
dGhlIG9sZCBtb2RlbCwgaWYgdGhlIHBsdWctaW4gaXMgZm9jdXNlZCwgZW5hYmxlIGNvbXBsZXgg
dGV4dCBpbnB1dC4KLSAgICBzZXRDb21wbGV4VGV4dElucHV0RW5hYmxlZChwbHVnaW5IYXNGb2N1
c0FuZFdpbmRvd0hhc0ZvY3VzKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6c2V0Q29tcGxl
eFRleHRJbnB1dEVuYWJsZWQoYm9vbCBjb21wbGV4VGV4dElucHV0RW5hYmxlZCkKLXsKLSAgICBp
ZiAobV9pc0NvbXBsZXhUZXh0SW5wdXRFbmFibGVkID09IGNvbXBsZXhUZXh0SW5wdXRFbmFibGVk
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lzQ29tcGxleFRleHRJbnB1dEVuYWJsZWQgPSBj
b21wbGV4VGV4dElucHV0RW5hYmxlZDsKLQotICAgIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0
ZSBjb21wbGV4VGV4dElucHV0U3RhdGUgPSBQbHVnaW5Db21wbGV4VGV4dElucHV0RGlzYWJsZWQ7
Ci0gICAgaWYgKG1faXNDb21wbGV4VGV4dElucHV0RW5hYmxlZCkKLSAgICAgICAgY29tcGxleFRl
eHRJbnB1dFN0YXRlID0gbV9wbHVnaW5XYW50c0xlZ2FjeUNvY29hVGV4dElucHV0ID8gUGx1Z2lu
Q29tcGxleFRleHRJbnB1dEVuYWJsZWRMZWdhY3kgOiBQbHVnaW5Db21wbGV4VGV4dElucHV0RW5h
YmxlZDsKLQotICAgIGNvbnRyb2xsZXIoKS0+c2V0Q29tcGxleFRleHRJbnB1dFN0YXRlKGNvbXBs
ZXhUZXh0SW5wdXRTdGF0ZSk7Ci19Ci0KLVBsYXRmb3JtTGF5ZXIqIE5ldHNjYXBlUGx1Z2luOjpw
bHVnaW5MYXllcigpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsYXRmb3JtTGF5ZXIqPiht
X3BsdWdpbkxheWVyLmdldCgpKTsKLX0KLQotc3RhdGljIHZvaWQgbWFrZUNHTFByZXNlbnRMYXll
ck9wYXF1ZShDQUxheWVyICpwbHVnaW5Sb290TGF5ZXIpCi17Ci0gICAgLy8gV2UgbG9vayBmb3Ig
YSBsYXllciB0aGF0J3MgdGhlIG9ubHkgc3VibGF5ZXIgb2YgdGhlIHJvb3QgbGF5ZXIgdGhhdCBp
cyBhbiBpbnN0YW5jZQotICAgIC8vIG9mIHRoZSBDR0xQcmVzZW50TGF5ZXIgY2xhc3Mgd2hpY2gg
aW4gdHVybiBpcyBhIHN1YmNsYXNzIG9mIENBT3BlbkdMTGF5ZXIgYW5kIG1ha2UKLSAgICAvLyBp
dCBvcGFxdWUgaWYgYWxsIHRoZXNlIGNvbmRpdGlvbnMgaG9sZC4KLQotICAgIE5TQXJyYXkgKnN1
YmxheWVycyA9IFtwbHVnaW5Sb290TGF5ZXIgc3VibGF5ZXJzXTsKLSAgICBpZiAoW3N1YmxheWVy
cyBjb3VudF0gIT0gMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ2xhc3MgY2dsUHJlc2VudExh
eWVyQ2xhc3MgPSBOU0NsYXNzRnJvbVN0cmluZyhAIkNHTFByZXNlbnRMYXllciIpOwotICAgIEFM
TE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgaWYgKCFbY2dsUHJlc2VudExh
eWVyQ2xhc3MgaXNTdWJjbGFzc09mQ2xhc3M6W0NBT3BlbkdMTGF5ZXIgY2xhc3NdXSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotCi0gICAg
Q0FMYXllciAqbGF5ZXIgPSBbc3VibGF5ZXJzIG9iamVjdEF0SW5kZXg6MF07Ci0gICAgaWYgKCFb
bGF5ZXIgaXNLaW5kT2ZDbGFzczpjZ2xQcmVzZW50TGF5ZXJDbGFzc10pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFtsYXllciBzZXRPcGFxdWU6WUVTXTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdp
bjo6dXBkYXRlUGx1Z2luTGF5ZXIoKQotewotICAgIGlmIChtX2RyYXdpbmdNb2RlbCAhPSBOUERy
YXdpbmdNb2RlbENvcmVBbmltYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIHZvaWQqIHZh
bHVlID0gMDsKLQotICAgIC8vIEdldCB0aGUgQ29yZSBBbmltYXRpb24gbGF5ZXIuCi0gICAgaWYg
KE5QUF9HZXRWYWx1ZShOUFBWcGx1Z2luQ29yZUFuaW1hdGlvbkxheWVyLCAmdmFsdWUpICE9IE5Q
RVJSX05PX0VSUk9SKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXZhbHVlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIW1fcGx1Z2luTGF5ZXIpOwotCi0gICAgLy8gVGhlIG9y
aWdpbmFsIENvcmUgQW5pbWF0aW9uIGRyYXdpbmcgbW9kZWwgcmVxdWlyZWQgdGhhdCBwbHVnLWlu
cyBwYXNzIGEgcmV0YWluZWQgbGF5ZXIKLSAgICAvLyB0byB0aGUgYnJvd3Nlciwgd2hpY2ggdGhl
IGJyb3dzZXIgd291bGQgdGhlbiBhZG9wdC4gSG93ZXZlciwgdGhlIGZpbmFsIHNwZWMgY2hhbmdl
ZCB0aGlzCi0gICAgLy8gKFNlZSBodHRwczovL3dpa2kubW96aWxsYS5vcmcvTlBBUEk6Q29yZUFu
aW1hdGlvbkRyYXdpbmdNb2RlbCBmb3IgbW9yZSBpbmZvcm1hdGlvbikKLSAgICAvLyBhZnRlciBh
IHZlcnNpb24gb2YgV2ViS2l0MSB3aXRoIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBoYWQg
c2hpcHBlZCwgYnV0IHRoYXQgbm93IG1lYW5zCi0gICAgLy8gdGhhdCBhbnkgcGx1Zy1pbnMgdGhh
dCBleHBlY3QgdGhlIFdlYktpdDEgYmVoYXZpb3Igd291bGQgbGVhayB0aGUgQ0FMYXllci4KLSAg
ICAvLyBGb3IgcGx1Zy1pbnMgdGhhdCB3ZSBrbm93IHJldHVybiByZXRhaW5lZCBsYXllcnMsIHdl
IGhhdmUgdGhlIFJldHVybnNSZXRhaW5lZENvcmVBbmltYXRpb25MYXllcgotICAgIC8vIHBsdWct
aW4gcXVpcmsuIFBsdWctaW5zIGNhbiBhbHNvIGNoZWNrIGZvciB3aGV0aGVyIHRoZSBicm93c2Vy
IGV4cGVjdHMgYSBub24tcmV0YWluZWQgbGF5ZXIgdG8KLSAgICAvLyBiZSByZXR1cm5lZCBieSB1
c2luZyBOUE5fR2V0VmFsdWUgYW5kIHBhc3MgdGhlIFdLTlZFeHBlY3RzTm9ucmV0YWluZWRMYXll
ciBwYXJhbWV0ZXIuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU4MjgyIGRlc2NyaWJlcyB0aGUgYnVnIHdoZXJlIFdlYktpdCBleHBlY3RzIHJldGFpbmVk
IGxheWVycy4KLSAgICBpZiAobV9wbHVnaW5SZXR1cm5zTm9ucmV0YWluZWRMYXllcikKLSAgICAg
ICAgbV9wbHVnaW5MYXllciA9IChfX2JyaWRnZSBDQUxheWVyICopdmFsdWU7Ci0gICAgZWxzZQot
ICAgICAgICBtX3BsdWdpbkxheWVyID0gYWRvcHROUygoX19icmlkZ2UgQ0FMYXllciAqKXZhbHVl
KTsKLQotICAgIGlmIChtX3BsdWdpbk1vZHVsZS0+cGx1Z2luUXVpcmtzKCkuY29udGFpbnMoUGx1
Z2luUXVpcmtzOjpNYWtlT3BhcXVlVW5sZXNzVHJhbnNwYXJlbnRTaWx2ZXJsaWdodEJhY2tncm91
bmRBdHRyaWJ1dGVFeGlzdHMpICYmCi0gICAgICAgICFtX2lzVHJhbnNwYXJlbnQpCi0gICAgICAg
IG1ha2VDR0xQcmVzZW50TGF5ZXJPcGFxdWUobV9wbHVnaW5MYXllci5nZXQoKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2Fw
ZS9tYWMvUGx1Z2luUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9tYWMvUGx1Z2luUHJveHlNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDcyZTgxYzA5Njg4NWU0NGZkN2MyMWIwOTU1YTgyMTU1MjkyYTU5YmIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvbWFjL1BsdWdpblByb3h5TWFjLm1tCisrKyAvZGV2L251
bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgi
Ci0jaW1wb3J0ICJQbHVnaW5Qcm94eS5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi0KLSNpbXBvcnQgIlBsdWdpbkNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIlBsdWdpbkNvbnRy
b2xsZXJQcm94eU1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5o
IgotI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1dl
YkNvcmVDQUxheWVyRXh0cmFzLmg+Ci0KLXN0YXRpYyBjb25zdGV4cHIgZG91YmxlIGZhZGVJbkR1
cmF0aW9uID0gMC41OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIHZvaWQgbWFrZVJl
bmRlckxheWVyKENBTGF5ZXIgKnBsdWdpbkxheWVyLCB1aW50MzJfdCBsYXllckhvc3RpbmdDb250
ZXh0SUQpCi17Ci0gICAgQ0FMYXllciAqcmVuZGVyTGF5ZXIgPSBbQ0FMYXllciBfd2ViX3JlbmRl
ckxheWVyV2l0aENvbnRleHRJRDpsYXllckhvc3RpbmdDb250ZXh0SURdOwotICAgIFtyZW5kZXJM
YXllciBzZXRGcmFtZTpbcGx1Z2luTGF5ZXIgYm91bmRzXV07Ci0gICAgW3JlbmRlckxheWVyIHNl
dEF1dG9yZXNpemluZ01hc2s6a0NBTGF5ZXJXaWR0aFNpemFibGUgfCBrQ0FMYXllckhlaWdodFNp
emFibGVdOwotICAgIFtwbHVnaW5MYXllciBzZXRTdWJsYXllcnM6QFtyZW5kZXJMYXllcl1dOwot
fQotCi1QbGF0Zm9ybUxheWVyKiBQbHVnaW5Qcm94eTo6cGx1Z2luTGF5ZXIoKQotewotICAgIGlm
ICghbV9wbHVnaW5MYXllciAmJiBtX3JlbW90ZUxheWVyQ2xpZW50SUQpIHsKLSAgICAgICAgLy8g
Q3JlYXRlIGEgbGF5ZXIgd2l0aCBmbGlwcGVkIGdlb21ldHJ5IGFuZCBhZGQgdGhlIHJlYWwgcGx1
Zy1pbiBsYXllciBhcyBhIHN1YmxheWVyCi0gICAgICAgIC8vIHNvIHRoZSBjb29yZGluYXRlIHN5
c3RlbSB3aWxsIG1hdGNoIHRoZSBldmVudCBjb29yZGluYXRlIHN5c3RlbS4KLSAgICAgICAgbV9w
bHVnaW5MYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIFtt
X3BsdWdpbkxheWVyIHNldEdlb21ldHJ5RmxpcHBlZDpZRVNdOwotICAgICAgICBtYWtlUmVuZGVy
TGF5ZXIobV9wbHVnaW5MYXllci5nZXQoKSwgbV9yZW1vdGVMYXllckNsaWVudElEKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbV9wbHVnaW5MYXllci5nZXQoKTsKLX0KLQotYm9vbCBQbHVnaW5Qcm94
eTo6bmVlZHNCYWNraW5nU3RvcmUoKSBjb25zdAotewotICAgIHJldHVybiAhbV9yZW1vdGVMYXll
ckNsaWVudElEOwotfQotCi12b2lkIFBsdWdpblByb3h5OjpwbHVnaW5Gb2N1c09yV2luZG93Rm9j
dXNDaGFuZ2VkKGJvb2wgcGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1cykKLXsKLSAgICBj
b250cm9sbGVyKCktPnBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQocGx1Z2luSGFzRm9j
dXNBbmRXaW5kb3dIYXNGb2N1cyk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OnNldENvbXBsZXhU
ZXh0SW5wdXRTdGF0ZSh1aW50NjRfdCBjb21wbGV4VGV4dElucHV0U3RhdGUpCi17Ci0gICAgY29u
dHJvbGxlcigpLT5zZXRDb21wbGV4VGV4dElucHV0U3RhdGUoc3RhdGljX2Nhc3Q8UGx1Z2luQ29t
cGxleFRleHRJbnB1dFN0YXRlPihjb21wbGV4VGV4dElucHV0U3RhdGUpKTsKLX0KLQotdm9pZCBQ
bHVnaW5Qcm94eTo6c2V0TGF5ZXJIb3N0aW5nTW9kZShMYXllckhvc3RpbmdNb2RlIGxheWVySG9z
dGluZ01vZGUpCi17Ci0gICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6U2V0TGF5ZXJIb3N0aW5nTW9kZShzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obGF5ZXJIb3N0aW5nTW9kZSkpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwotfQot
Ci12b2lkIFBsdWdpblByb3h5OjpzZXRMYXllckhvc3RpbmdDb250ZXh0SUQodWludDMyX3QgbGF5
ZXJIb3N0aW5nQ29udGV4dElEKQotewotICAgIEFTU0VSVChtX3BsdWdpbkxheWVyLmdldCgpKTsK
LQotICAgIG1fcmVtb3RlTGF5ZXJDbGllbnRJRCA9IGxheWVySG9zdGluZ0NvbnRleHRJRDsKLSAg
ICBtYWtlUmVuZGVyTGF5ZXIobV9wbHVnaW5MYXllci5nZXQoKSwgbV9yZW1vdGVMYXllckNsaWVu
dElEKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpbkNvbnRyb2xsZXIuaAppbmRleCAzYjdhZmVkYTU3NmViMmZiYzY1NzhlNDRlNTBh
Y2RlZDM4MTU1ZWU5Li5mOGVkMjczZmY4MzUwNjg3YjE0NDE5N2M5NWYzZGJhMzdlNTljNGVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Db250cm9s
bGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luQ29udHJv
bGxlci5oCkBAIC0yOCwxMCArMjgsNiBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5j
bHVkZSA8d3RmL1dlYWtQdHIuaD4KIAotI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgIlBs
dWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZS5oIgotI2VuZGlmCi0KIHN0cnVjdCBOUE9iamVjdDsK
IHR5cGVkZWYgc3RydWN0IF9OUFZhcmlhbnQgTlBWYXJpYW50OwogdHlwZWRlZiB2b2lkKiBOUElk
ZW50aWZpZXI7CkBAIC03NSwyMyArNzEsNiBAQCBwdWJsaWM6CiAgICAgLy8gQ2FuY2VscyB0aGUg
bG9hZCBvZiB0aGUgbWFudWFsIHN0cmVhbS4KICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsTWFudWFs
U3RyZWFtTG9hZCgpID0gMDsKIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAg
IC8vIEdldCB0aGUgTlBPYmplY3QgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgd2luZG93IEphdmFT
Y3JpcHQgb2JqZWN0LiBSZXR1cm5zIGEgcmV0YWluZWQgb2JqZWN0LgotICAgIHZpcnR1YWwgTlBP
YmplY3QqIHdpbmRvd1NjcmlwdE5QT2JqZWN0KCkgPSAwOwotCi0gICAgLy8gR2V0IHRoZSBOUE9i
amVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBwbHVnLWluJ3MgZWxlbWVudC4gUmV0dXJucyBh
IHJldGFpbmVkIG9iamVjdC4KLSAgICB2aXJ0dWFsIE5QT2JqZWN0KiBwbHVnaW5FbGVtZW50TlBP
YmplY3QoKSA9IDA7Ci0KLSAgICAvLyBFdmFsdWF0ZXMgdGhlIGdpdmVuIHNjcmlwdCBzdHJpbmcg
aW4gdGhlIGNvbnRleHQgb2YgdGhlIGdpdmVuIE5QT2JqZWN0LgotICAgIHZpcnR1YWwgYm9vbCBl
dmFsdWF0ZShOUE9iamVjdCosIGNvbnN0IFN0cmluZyYgc2NyaXB0U3RyaW5nLCBOUFZhcmlhbnQq
IHJlc3VsdCwgYm9vbCBhbGxvd1BvcHVwcykgPSAwOwotCi0gICAgLy8gQ2FsbGVkIGJ5IHRoZSBO
ZXRzY2FwZSBwbHVnLWluIHdoZW4gaXQgc3RhcnRzIG9yIHN0b3BzIHBsYXlpbmcgYXVkaW8uCi0g
ICAgdmlydHVhbCB2b2lkIHNldFBsdWdpbklzUGxheWluZ0F1ZGlvKGJvb2wpID0gMDsKLQotICAg
IC8vIFJldHVybnMgd2hldGhlciB0aGUgcGx1Z2luIHNob3VsZCBiZSBtdXRlZC4KLSAgICB2aXJ0
dWFsIGJvb2wgaXNNdXRlZCgpIGNvbnN0ID0gMDsKLSNlbmRpZgotCiAgICAgLy8gU2V0IHRoZSBz
dGF0dXNiYXIgdGV4dC4KICAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVzYmFyVGV4dChjb25zdCBT
dHJpbmcmKSA9IDA7CiAKQEAgLTEwNSw5ICs4NCw2IEBAIHB1YmxpYzoKICAgICAvLyBUZWxscyB0
aGUgY29udHJvbGxlciB0aGF0IHRoZSBwbHVnLWluIGZvY3VzIG9yIHdpbmRvdyBmb2N1cyBkaWQg
Y2hhbmdlLgogICAgIHZpcnR1YWwgdm9pZCBwbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2Vk
KGJvb2wpID0gMDsKIAotICAgIC8vIFRlbGxzIHRoZSBjb250cm9sbGVyIHRoYXQgY29tcGxleCB0
ZXh0IGlucHV0IGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZm9yIHRoZSBwbHVnLWluLgotICAgIHZp
cnR1YWwgdm9pZCBzZXRDb21wbGV4VGV4dElucHV0U3RhdGUoUGx1Z2luQ29tcGxleFRleHRJbnB1
dFN0YXRlKSA9IDA7Ci0KICAgICAvLyBSZXR1cm5zIHRoZSBtYWNoIHBvcnQgb2YgdGhlIGNvbXBv
c2l0aW5nIHJlbmRlciBzZXJ2ZXIuCiAgICAgdmlydHVhbCBjb25zdCBXVEY6Ok1hY2hTZW5kUmln
aHQmIGNvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydCgpID0gMDsKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rp
b24uY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Nv
bm5lY3Rpb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzg5MWU5ZGJlN2I0
MmE5YTY0MTcxZDZkOWRjYzRjZjk2N2ViNTRjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blByb2Nlc3NDb25uZWN0aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3ND
b25uZWN0aW9uLmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1
ZGUgIk5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJOUFJlbW90
ZU9iamVjdE1hcC5oIgotI2luY2x1ZGUgIk5QUnVudGltZU9iamVjdE1hcC5oIgotI2luY2x1ZGUg
IlBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5oIgotI2luY2x1ZGUgIlBsdWdpblByb3h5
LmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eU1l
c3NhZ2VzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3QuaD4KLSNpbmNsdWRl
IDx3dGYvRmlsZVN5c3RlbS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb246OlBsdWdpblByb2Nlc3NDb25uZWN0aW9uKFBsdWdpblByb2Nlc3NDb25uZWN0
aW9uTWFuYWdlciogcGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLCB1aW50NjRfdCBwbHVn
aW5Qcm9jZXNzVG9rZW4sIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRl
bnRpZmllciwgYm9vbCBzdXBwb3J0c0FzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uKQot
ICAgIDogbV9wbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIocGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb25NYW5hZ2VyKQotICAgICwgbV9wbHVnaW5Qcm9jZXNzVG9rZW4ocGx1Z2luUHJvY2Vzc1Rv
a2VuKQotICAgICwgbV9zdXBwb3J0c0FzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uKHN1
cHBvcnRzQXN5bmNocm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRpb24pCi17Ci0gICAgbV9jb25uZWN0
aW9uID0gSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVDbGllbnRDb25uZWN0aW9uKGNvbm5lY3Rpb25J
ZGVudGlmaWVyLCAqdGhpcyk7Ci0KLSAgICBtX25wUmVtb3RlT2JqZWN0TWFwID0gTlBSZW1vdGVP
YmplY3RNYXA6OmNyZWF0ZShtX2Nvbm5lY3Rpb24uZ2V0KCkpOwotCi0gICAgbV9jb25uZWN0aW9u
LT5vcGVuKCk7Ci19Ci0KLVBsdWdpblByb2Nlc3NDb25uZWN0aW9uOjp+UGx1Z2luUHJvY2Vzc0Nv
bm5lY3Rpb24oKQotewotICAgIEFTU0VSVCghbV9jb25uZWN0aW9uKTsKLSAgICBBU1NFUlQoIW1f
bnBSZW1vdGVPYmplY3RNYXApOwotfQotCi12b2lkIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOjph
ZGRQbHVnaW5Qcm94eShQbHVnaW5Qcm94eSogcGx1Z2luKQotewotICAgIEFTU0VSVCghbV9wbHVn
aW5zLmNvbnRhaW5zKHBsdWdpbi0+cGx1Z2luSW5zdGFuY2VJRCgpKSk7Ci0gICAgbV9wbHVnaW5z
LnNldChwbHVnaW4tPnBsdWdpbkluc3RhbmNlSUQoKSwgcGx1Z2luKTsKLX0KLQotdm9pZCBQbHVn
aW5Qcm9jZXNzQ29ubmVjdGlvbjo6cmVtb3ZlUGx1Z2luUHJveHkoUGx1Z2luUHJveHkqIHBsdWdp
bikKLXsKLSAgICBBU1NFUlQobV9wbHVnaW5zLmNvbnRhaW5zKHBsdWdpbi0+cGx1Z2luSW5zdGFu
Y2VJRCgpKSk7Ci0gICAgbV9wbHVnaW5zLnJlbW92ZShwbHVnaW4tPnBsdWdpbkluc3RhbmNlSUQo
KSk7Ci0KLSAgICAvLyBJbnZhbGlkYXRlIGFsbCBvYmplY3RzIHJlbGF0ZWQgdG8gdGhpcyBwbHVn
LWluLgotICAgIG1fbnBSZW1vdGVPYmplY3RNYXAtPnBsdWdpbkRlc3Ryb3llZChwbHVnaW4pOwot
Ci0gICAgaWYgKCFtX3BsdWdpbnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X25wUmVtb3RlT2JqZWN0TWFwID0gbnVsbHB0cjsKLQotICAgIC8vIFdlIGhhdmUgbm8gbW9yZSBw
bHVnLWlucywgaW52YWxpZGF0ZSB0aGUgY29ubmVjdGlvbiB0byB0aGUgcGx1Zy1pbiBwcm9jZXNz
LgotICAgIEFTU0VSVChtX2Nvbm5lY3Rpb24pOwotICAgIG1fY29ubmVjdGlvbi0+aW52YWxpZGF0
ZSgpOwotICAgIG1fY29ubmVjdGlvbiA9IG51bGxwdHI7Ci0KLSAgICAvLyBUaGlzIHdpbGwgY2F1
c2UgdXMgdG8gYmUgZGVsZXRlZC4KLSAgICBtX3BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdl
ci0+cmVtb3ZlUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24odGhpcyk7Ci19Ci0KLXZvaWQgUGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29u
bmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIEFTU0VSVChkZWNvZGVyLmRl
c3RpbmF0aW9uSUQoKSk7Ci0KLSAgICBQbHVnaW5Qcm94eSogcGx1Z2luUHJveHkgPSBtX3BsdWdp
bnMuZ2V0KGRlY29kZXIuZGVzdGluYXRpb25JRCgpKTsKLSAgICBpZiAoIXBsdWdpblByb3h5KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBwbHVnaW5Qcm94eS0+ZGlkUmVjZWl2ZVBsdWdpblByb3h5
TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLX0KLQotYm9vbCBQbHVnaW5Qcm9jZXNzQ29u
bmVjdGlvbjo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYgcmVwbHlF
bmNvZGVyKQotewotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNz
YWdlczo6TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkKLSAg
ICAgICAgcmV0dXJuIG1fbnBSZW1vdGVPYmplY3RNYXAtPmRpZFJlY2VpdmVTeW5jTWVzc2FnZShj
b25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwotCi0gICAgdWludDY0X3QgZGVzdGlu
YXRpb25JRCA9IGRlY29kZXIuZGVzdGluYXRpb25JRCgpOwotCi0gICAgaWYgKCFkZXN0aW5hdGlv
bklEKQotICAgICAgICByZXR1cm4gZGlkUmVjZWl2ZVN5bmNQbHVnaW5Qcm9jZXNzQ29ubmVjdGlv
bk1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKLQotICAgIFBsdWdp
blByb3h5KiBwbHVnaW5Qcm94eSA9IG1fcGx1Z2lucy5nZXQoZGVzdGluYXRpb25JRCk7Ci0gICAg
aWYgKCFwbHVnaW5Qcm94eSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHBs
dWdpblByb3h5LT5kaWRSZWNlaXZlU3luY1BsdWdpblByb3h5TWVzc2FnZShjb25uZWN0aW9uLCBk
ZWNvZGVyLCByZXBseUVuY29kZXIpOwotfQotCi12b2lkIFBsdWdpblByb2Nlc3NDb25uZWN0aW9u
OjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQotewotICAgIC8vIFRoZSBwbHVnLWluIHByb2Nl
c3MgbXVzdCBoYXZlIGNyYXNoZWQuCi0gICAgZm9yIChIYXNoTWFwPHVpbnQ2NF90LCBQbHVnaW5Q
cm94eSo+Ojpjb25zdF9pdGVyYXRvcjo6VmFsdWVzIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCkudmFs
dWVzKCksIGVuZCA9IG1fcGx1Z2lucy5lbmQoKS52YWx1ZXMoKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIFBsdWdpblByb3h5KiBwbHVnaW5Qcm94eSA9ICgqaXQpOwotCi0gICAgICAgIHBs
dWdpblByb3h5LT5wbHVnaW5Qcm9jZXNzQ3Jhc2hlZCgpOwotICAgIH0KLX0KLQotdm9pZCBQbHVn
aW5Qcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYsIElQQzo6TWVzc2FnZU5hbWUpCi17Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb246OnNldEV4Y2VwdGlvbihjb25zdCBTdHJpbmcmIGV4Y2VwdGlvblN0cmluZywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIE5QUnVudGlt
ZU9iamVjdE1hcDo6c2V0R2xvYmFsRXhjZXB0aW9uKGV4Y2VwdGlvblN0cmluZyk7Ci0gICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKLX0KLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5oIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24uaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk0N2NlZGYzN2ZkZjk3ZTg2YTZjMTY1M2MxMmQ5
ODg1NzgyNzc3Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlv
bi5oCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25faAotI2RlZmluZSBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlv
bl9oCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIkNvbm5l
Y3Rpb24uaCIKLSNpbmNsdWRlICJQbHVnaW4uaCIKLSNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzLmgi
Ci0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgTlBSZW1vdGVPYmplY3RN
YXA7Ci1jbGFzcyBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXI7Ci1jbGFzcyBQbHVnaW5Q
cm94eTsKLSAgICAKLWNsYXNzIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uIDogcHVibGljIFJlZkNv
dW50ZWQ8UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24+LCBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbj4gY3JlYXRl
KFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlciogcGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25N
YW5hZ2VyLCB1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4sIElQQzo6Q29ubmVjdGlvbjo6SWRl
bnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllciwgYm9vbCBzdXBwb3J0c0FzeW5jaHJvbm91c1Bs
dWdpbkluaXRpYWxpemF0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24ocGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLCBw
bHVnaW5Qcm9jZXNzVG9rZW4sIGNvbm5lY3Rpb25JZGVudGlmaWVyLCBzdXBwb3J0c0FzeW5jaHJv
bm91c1BsdWdpbkluaXRpYWxpemF0aW9uKSk7Ci0gICAgfQotICAgIH5QbHVnaW5Qcm9jZXNzQ29u
bmVjdGlvbigpOwotCi0gICAgdWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2VuKCkgY29uc3QgeyBy
ZXR1cm4gbV9wbHVnaW5Qcm9jZXNzVG9rZW47IH0KLQotICAgIElQQzo6Q29ubmVjdGlvbiogY29u
bmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQotCi0gICAgdm9p
ZCBhZGRQbHVnaW5Qcm94eShQbHVnaW5Qcm94eSopOwotICAgIHZvaWQgcmVtb3ZlUGx1Z2luUHJv
eHkoUGx1Z2luUHJveHkqKTsKLQotICAgIE5QUmVtb3RlT2JqZWN0TWFwKiBucFJlbW90ZU9iamVj
dE1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fbnBSZW1vdGVPYmplY3RNYXAuZ2V0KCk7IH0KLQotICAg
IGJvb2wgc3VwcG9ydHNBc3luY2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fc3VwcG9ydHNBc3luY2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbjsgfQotICAg
IAotcHJpdmF0ZToKLSAgICBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbihQbHVnaW5Qcm9jZXNzQ29u
bmVjdGlvbk1hbmFnZXIqLCB1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4sIElQQzo6Q29ubmVj
dGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllciwgYm9vbCBzdXBwb3J0c0FzeW5j
aHJvbm91c0luaXRpYWxpemF0aW9uKTsKLQotICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50
Ci0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImKSBvdmVycmlkZTsKLSAgICBib29sIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBJUEM6OkRlY29kZXImLCBVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYpIG92ZXJyaWRl
OwotICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpNZXNzYWdl
TmFtZSkgb3ZlcnJpZGU7Ci0KLSAgICAvLyBNZXNzYWdlIGhhbmRsZXJzLgotICAgIGJvb2wgZGlk
UmVjZWl2ZVN5bmNQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiwgSVBDOjpEZWNvZGVyJiwgVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mKTsKLSAgICB2b2lkIHNl
dEV4Y2VwdGlvbihjb25zdCBTdHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwot
Ci0gICAgUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyKiBtX3BsdWdpblByb2Nlc3NDb25u
ZWN0aW9uTWFuYWdlcjsKLSAgICB1aW50NjRfdCBtX3BsdWdpblByb2Nlc3NUb2tlbjsKLQotICAg
IC8vIFRoZSBjb25uZWN0aW9uIGZyb20gdGhlIHdlYiBwcm9jZXNzIHRvIHRoZSBwbHVnLWluIHBy
b2Nlc3MuCi0gICAgUmVmUHRyPElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwotCi0gICAg
Ly8gVGhlIHBsdWctaW5zLiBXZSB1c2UgYSB3ZWFrIHJlZmVyZW5jZSB0byB0aGUgcGx1Zy1pbiBw
cm94aWVzIGJlY2F1c2UgdGhlIHBsdWctaW4gdmlldyBob2xkcyB0aGUgc3Ryb25nIHJlZmVyZW5j
ZS4KLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBQbHVnaW5Qcm94eSo+IG1fcGx1Z2luczsKLQotICAg
IFJlZlB0cjxOUFJlbW90ZU9iamVjdE1hcD4gbV9ucFJlbW90ZU9iamVjdE1hcDsKLSAgICAKLSAg
ICBib29sIG1fc3VwcG9ydHNBc3luY2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbjsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCi0KLSNlbmRpZiAvLyBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlv
bi5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblBy
b2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBmOWJkOWU4MDZiOTY2MGY1ZDNkYjA5NTU3NjZlYjgyNDY5NzNjM2ZkLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCisrKyAvZGV2L251
bGwKQEAgLTEsMzAgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6
Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLW1lc3NhZ2VzIC0+IFBsdWdp
blByb2Nlc3NDb25uZWN0aW9uIExlZ2FjeVJlY2VpdmVyIHsKLSAgICAjIFNldCBhIGdsb2JhbCBK
YXZhU2NyaXB0IGV4Y2VwdGlvbi4KLSAgICBTZXRFeGNlcHRpb24oU3RyaW5nIGV4Y2VwdGlvblN0
cmluZykgLT4gKCkgU3luY2hyb25vdXMKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb25NYW5hZ2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYzMjg0YzY4
N2FjMzEzN2NmOWE3YTk0YWEzMmZhZTEzMmRmNmY2My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9Q
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTMx
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiRGVjb2Rlci5oIgotI2luY2x1ZGUgIkVuY29kZXIu
aCIKLSNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIlBsdWdp
blByb2Nlc3NDb25uZWN0aW9uTWFuYWdlck1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUgIldlYlBy
b2Nlc3NQcm94eU1lc3NhZ2VzLmgiCi0KLSNpZiBPUyhEQVJXSU4pICYmICFVU0UoVU5JWF9ET01B
SU5fU09DS0VUUykKLSNpbmNsdWRlICJNYWNoUG9ydC5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1SZWY8UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyPiBQbHVnaW5Qcm9j
ZXNzQ29ubmVjdGlvbk1hbmFnZXI6OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyKTsKLX0KLQotUGx1Z2luUHJvY2Vzc0Nv
bm5lY3Rpb25NYW5hZ2VyOjpQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIoKQotICAgIDog
bV9xdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5QbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbk1hbmFnZXIiKSkKLXsKLX0KLQotUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5h
Z2VyOjp+UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyKCkKLXsKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXI6Omlu
aXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbikKLXsKLSAgICBj
b25uZWN0aW9uLT5hZGRXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlBsdWdpblBy
b2Nlc3NDb25uZWN0aW9uTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3F1ZXVlLmdl
dCgpLCB0aGlzKTsKLX0KLQotUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24qIFBsdWdpblByb2Nlc3ND
b25uZWN0aW9uTWFuYWdlcjo6Z2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24odWludDY0X3QgcGx1
Z2luUHJvY2Vzc1Rva2VuKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wbHVnaW5Q
cm9jZXNzQ29ubmVjdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fcGx1Z2luUHJv
Y2Vzc0Nvbm5lY3Rpb25zW2ldLT5wbHVnaW5Qcm9jZXNzVG9rZW4oKSA9PSBwbHVnaW5Qcm9jZXNz
VG9rZW4pCi0gICAgICAgICAgICByZXR1cm4gbV9wbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbnNbaV0u
Z2V0KCk7Ci0gICAgfQotCi0gICAgSVBDOjpBdHRhY2htZW50IGVuY29kZWRDb25uZWN0aW9uSWRl
bnRpZmllcjsKLSAgICBib29sIHN1cHBvcnRzQXN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb247Ci0g
ICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRQbHVnaW5Qcm9jZXNzQ29u
bmVjdGlvbihwbHVnaW5Qcm9jZXNzVG9rZW4pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjo6UmVwbHkoZW5jb2RlZENvbm5lY3Rpb25JZGVudGlmaWVy
LCBzdXBwb3J0c0FzeW5jaHJvbm91c0luaXRpYWxpemF0aW9uKSwgMCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0jaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCi0gICAgSVBDOjpDb25u
ZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyID0gZW5jb2RlZENvbm5lY3Rp
b25JZGVudGlmaWVyLnJlbGVhc2VGaWxlRGVzY3JpcHRvcigpOwotI2VsaWYgT1MoREFSV0lOKQot
ICAgIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcihlbmNv
ZGVkQ29ubmVjdGlvbklkZW50aWZpZXIucG9ydCgpKTsKLSNlbGlmIE9TKFdJTkRPV1MpCi0gICAg
SVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyID0gZW5jb2Rl
ZENvbm5lY3Rpb25JZGVudGlmaWVyLmhhbmRsZSgpOwotI2VuZGlmCi0gICAgaWYgKCFJUEM6OkNv
bm5lY3Rpb246OmlkZW50aWZpZXJJc1ZhbGlkKGNvbm5lY3Rpb25JZGVudGlmaWVyKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHBsdWdpblByb2Nlc3NDb25uZWN0aW9uID0g
UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0ZSh0aGlzLCBwbHVnaW5Qcm9jZXNzVG9rZW4s
IGNvbm5lY3Rpb25JZGVudGlmaWVyLCBzdXBwb3J0c0FzeW5jaHJvbm91c0luaXRpYWxpemF0aW9u
KTsKLSAgICBtX3BsdWdpblByb2Nlc3NDb25uZWN0aW9ucy5hcHBlbmQocGx1Z2luUHJvY2Vzc0Nv
bm5lY3Rpb24uY29weVJlZigpKTsKLQotICAgIHsKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1f
dG9rZW5zQW5kQ29ubmVjdGlvbnNMb2NrIH07Ci0gICAgICAgIEFTU0VSVCghbV90b2tlbnNBbmRD
b25uZWN0aW9ucy5jb250YWlucyhwbHVnaW5Qcm9jZXNzVG9rZW4pKTsKLQotICAgICAgICBtX3Rv
a2Vuc0FuZENvbm5lY3Rpb25zLnNldChwbHVnaW5Qcm9jZXNzVG9rZW4sIHBsdWdpblByb2Nlc3ND
b25uZWN0aW9uLT5jb25uZWN0aW9uKCkpOwotICAgIH0KLQotICAgIHJldHVybiBwbHVnaW5Qcm9j
ZXNzQ29ubmVjdGlvbi5wdHIoKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1h
bmFnZXI6OnJlbW92ZVBsdWdpblByb2Nlc3NDb25uZWN0aW9uKFBsdWdpblByb2Nlc3NDb25uZWN0
aW9uKiBwbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbikKLXsKLSAgICBzaXplX3QgdmVjdG9ySW5kZXgg
PSBtX3BsdWdpblByb2Nlc3NDb25uZWN0aW9ucy5maW5kKHBsdWdpblByb2Nlc3NDb25uZWN0aW9u
KTsKLSAgICBBU1NFUlQodmVjdG9ySW5kZXggIT0gbm90Rm91bmQpOwotCi0gICAgewotICAgICAg
ICBMb2NrZXIgbG9ja2VyIHsgbV90b2tlbnNBbmRDb25uZWN0aW9uc0xvY2sgfTsKLSAgICAgICAg
QVNTRVJUKG1fdG9rZW5zQW5kQ29ubmVjdGlvbnMuY29udGFpbnMocGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb24tPnBsdWdpblByb2Nlc3NUb2tlbigpKSk7Ci0gICAgICAgIAotICAgICAgICBtX3Rva2Vu
c0FuZENvbm5lY3Rpb25zLnJlbW92ZShwbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi0+cGx1Z2luUHJv
Y2Vzc1Rva2VuKCkpOwotICAgIH0KLQotICAgIG1fcGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25zLnJl
bW92ZSh2ZWN0b3JJbmRleCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5h
Z2VyOjpwbHVnaW5Qcm9jZXNzQ3Jhc2hlZCh1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4pCi17
Ci0gICAgTG9ja2VyIGxvY2tlciB7IG1fdG9rZW5zQW5kQ29ubmVjdGlvbnNMb2NrIH07Ci0gICAg
SVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uID0gbV90b2tlbnNBbmRDb25uZWN0aW9ucy5nZXQo
cGx1Z2luUHJvY2Vzc1Rva2VuKTsKLQotICAgIC8vIEl0J3MgT0sgZm9yIGNvbm5lY3Rpb24gdG8g
YmUgbnVsbCBoZXJlOyBpdCB3aWxsIGhhcHBlbiBpZiB0aGlzIHdlYiBwcm9jZXNzIGRvZXNuJ3Qg
a25vdwotICAgIC8vIGFueXRoaW5nIGFib3V0IHRoZSBwbHVnLWluIHByb2Nlc3MuCi0gICAgaWYg
KCFjb25uZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25uZWN0aW9uLT5wb3N0Q29u
bmVjdGlvbkRpZENsb3NlT25Db25uZWN0aW9uV29ya1F1ZXVlKCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29u
bmVjdGlvbk1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAzNTQ2ZGYxMTBiMDUyNDc0ODk2MDU2MDY2YjgyNGU4NDFmOTBhMzNmLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5oCisrKyAvZGV2L251bGwK
QEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb25NYW5hZ2VyX2gKLSNkZWZpbmUgUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyX2gK
LQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiUGx1Z2luUHJv
Y2Vzcy5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KLSNpbmNsdWRlIDx3dGYvTG9jay5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgot
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi0vLyBNYW5hZ2VzIHBsdWctaW4gcHJvY2Vz
cyBjb25uZWN0aW9ucyBmb3IgdGhlIGdpdmVuIHdlYiBwcm9jZXNzLgotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotY2xhc3MgUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb247Ci0gICAgICAgIAotY2xhc3Mg
UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyIDogcHVibGljIElQQzo6Q29ubmVjdGlvbjo6
V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFBsdWdp
blByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcj4gY3JlYXRlKCk7Ci0gICAgflBsdWdpblByb2Nlc3ND
b25uZWN0aW9uTWFuYWdlcigpOwotCi0gICAgdm9pZCBpbml0aWFsaXplQ29ubmVjdGlvbihJUEM6
OkNvbm5lY3Rpb24qKTsKLQotICAgIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKiBnZXRQbHVnaW5Q
cm9jZXNzQ29ubmVjdGlvbih1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4pOwotICAgIHZvaWQg
cmVtb3ZlUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24oUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24qKTsK
LQotcHJpdmF0ZToKLSAgICBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIoKTsKLQotICAg
IC8vIElQQzo6Q29ubmVjdGlvbjo6V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyLgotICAgIHZvaWQg
ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJp
ZGU7Ci0KLSAgICB2b2lkIHBsdWdpblByb2Nlc3NDcmFzaGVkKHVpbnQ2NF90IHBsdWdpblByb2Nl
c3NUb2tlbik7Ci0KLSAgICBSZWY8V29ya1F1ZXVlPiBtX3F1ZXVlOwotCi0gICAgVmVjdG9yPFJl
ZlB0cjxQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbj4+IG1fcGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25z
OwotCi0gICAgTG9jayBtX3Rva2Vuc0FuZENvbm5lY3Rpb25zTG9jazsKLSAgICBIYXNoTWFwPHVp
bnQ2NF90LCBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPj4gbV90b2tlbnNBbmRDb25uZWN0aW9ucyBX
VEZfR1VBUkRFRF9CWV9MT0NLKG1fdG9rZW5zQW5kQ29ubmVjdGlvbnNMb2NrKTsKLX07Ci0KLX0K
LQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jZW5kaWYgLy8gUGx1
Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25u
ZWN0aW9uTWFuYWdlci5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YmQwNjc2ZDdkZmExMzgxZGViZWFlNzdhYzNlZDUzYWM0NDQ2ZTdlMS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4KKysrIC9k
ZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJl
IG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgot
IyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
Ci0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotbWVzc2FnZXMgLT4g
UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyIHsKLSAgICBQbHVnaW5Qcm9jZXNzQ3Jhc2hl
ZCh1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4pCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA5Y2VkN2RhMDc1MDJmNjJiYWM2YWY2NzllMTYxMGQ0ZTY1OWUwN2Zm
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDc0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlBsdWdpblByb3h5LmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQot
I2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJOUFJlbW90ZU9iamVjdE1hcC5o
IgotI2luY2x1ZGUgIk5QUnVudGltZVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIk5QVmFyaWFudERh
dGEuaCIKLSNpbmNsdWRlICJQbHVnaW5Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiUGx1Z2luQ29u
dHJvbGxlclByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJQbHVnaW5DcmVhdGlvblBhcmFtZXRl
cnMuaCIKLSNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIlBs
dWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5oIgotI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1h
cC5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIldlYktl
eWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJXZWJNb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiV2Vi
UHJvY2Vzcy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCIKLSNp
bmNsdWRlICJXZWJXaGVlbEV2ZW50LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRl
eHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1zdGF0aWMgdWludDY0X3QgZ2VuZXJh
dGVQbHVnaW5JbnN0YW5jZUlEKCkKLXsKLSAgICBzdGF0aWMgdWludDY0X3QgdW5pcXVlUGx1Z2lu
SW5zdGFuY2VJRDsKLSAgICByZXR1cm4gKyt1bmlxdWVQbHVnaW5JbnN0YW5jZUlEOwotfQotCi1S
ZWY8UGx1Z2luUHJveHk+IFBsdWdpblByb3h5OjpjcmVhdGUodWludDY0X3QgcGx1Z2luUHJvY2Vz
c1Rva2VuKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBsdWdpblByb3h5KHBsdWdpblBy
b2Nlc3NUb2tlbikpOwotfQotCi1QbHVnaW5Qcm94eTo6UGx1Z2luUHJveHkodWludDY0X3QgcGx1
Z2luUHJvY2Vzc1Rva2VuKQotICAgIDogUGx1Z2luKFBsdWdpblByb3h5VHlwZSkKLSAgICAsIG1f
cGx1Z2luUHJvY2Vzc1Rva2VuKHBsdWdpblByb2Nlc3NUb2tlbikKLSAgICAsIG1fcGx1Z2luSW5z
dGFuY2VJRChnZW5lcmF0ZVBsdWdpbkluc3RhbmNlSUQoKSkKLXsKLX0KLQotUGx1Z2luUHJveHk6
On5QbHVnaW5Qcm94eSgpCi17Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OnBsdWdpblByb2Nlc3ND
cmFzaGVkKCkKLXsKLSAgICBjb250cm9sbGVyKCktPnBsdWdpblByb2Nlc3NDcmFzaGVkKCk7Ci19
Ci0KLWJvb2wgUGx1Z2luUHJveHk6OmluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYgcGFyYW1l
dGVycykKLXsKLSAgICBBU1NFUlQoIW1fY29ubmVjdGlvbik7Ci0gICAgbV9jb25uZWN0aW9uID0g
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyKCku
Z2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24obV9wbHVnaW5Qcm9jZXNzVG9rZW4pOwotICAgIAot
ICAgIGlmICghbV9jb25uZWN0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAg
Ly8gQWRkIHRoZSBwbHVnLWluIHByb3h5IGJlZm9yZSBjcmVhdGluZyB0aGUgcGx1Zy1pbjsgaXQg
bmVlZHMgdG8gYmUgaW4gdGhlIG1hcCBiZWNhdXNlIENyZWF0ZVBsdWdpbgotICAgIC8vIGNhbiBj
YWxsIGJhY2sgb3V0IHRvIHRoZSBwbHVnLWluIHByb3h5LgotICAgIG1fY29ubmVjdGlvbi0+YWRk
UGx1Z2luUHJveHkodGhpcyk7Ci0KLSAgICAvLyBBc2sgdGhlIHBsdWctaW4gcHJvY2VzcyB0byBj
cmVhdGUgYSBwbHVnLWluLgotICAgIG1fcGVuZGluZ1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyA9
IG1ha2VVbmlxdWU8UGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzPigpOwotCi0gICAgbV9wZW5kaW5n
UGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLT5wbHVnaW5JbnN0YW5jZUlEID0gbV9wbHVnaW5JbnN0
YW5jZUlEOwotICAgIG1fcGVuZGluZ1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy0+d2luZG93TlBP
YmplY3RJRCA9IHdpbmRvd05QT2JqZWN0SUQoKTsKLSAgICBtX3BlbmRpbmdQbHVnaW5DcmVhdGlv
blBhcmFtZXRlcnMtPnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzOwotICAgIG1fcGVuZGluZ1BsdWdp
bkNyZWF0aW9uUGFyYW1ldGVycy0+dXNlckFnZW50ID0gY29udHJvbGxlcigpLT51c2VyQWdlbnQo
KTsKLSAgICBtX3BlbmRpbmdQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMtPmNvbnRlbnRzU2NhbGVG
YWN0b3IgPSBjb250ZW50c1NjYWxlRmFjdG9yKCk7Ci0gICAgbV9wZW5kaW5nUGx1Z2luQ3JlYXRp
b25QYXJhbWV0ZXJzLT5pc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQgPSBjb250cm9sbGVyKCktPmlz
UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOwotICAgIG1fcGVuZGluZ1BsdWdpbkNyZWF0aW9uUGFy
YW1ldGVycy0+aXNNdXRlZCA9IGNvbnRyb2xsZXIoKS0+aXNNdXRlZCgpOwotICAgIG1fcGVuZGlu
Z1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy0+YXJ0aWZpY2lhbFBsdWdpbkluaXRpYWxpemF0aW9u
RGVsYXlFbmFibGVkID0gY29udHJvbGxlcigpLT5hcnRpZmljaWFsUGx1Z2luSW5pdGlhbGl6YXRp
b25EZWxheUVuYWJsZWQoKTsKLSAgICBtX3BlbmRpbmdQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMt
PmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQgPSBjb250cm9sbGVyKCktPmlzQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKTsKLQotICAgIGlmICghY2FuSW5pdGlhbGl6ZUFzeW5j
aHJvbm91c2x5KCkpCi0gICAgICAgIHJldHVybiBpbml0aWFsaXplU3luY2hyb25vdXNseSgpOwot
Ci0gICAgLy8gUmVtZW1iZXIgdGhhdCB3ZSB0cmllZCB0byBjcmVhdGUgdGhpcyBwbHVnLWluIGFz
eW5jaHJvbm91c2x5IGluIGNhc2Ugd2UgbmVlZCB0byBjcmVhdGUgaXQgc3luY2hyb25vdXNseSBs
YXRlci4KLSAgICBtX3dhaXRpbmdPbkFzeW5jaHJvbm91c0luaXRpYWxpemF0aW9uID0gdHJ1ZTsK
LSAgICBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMgY3JlYXRpb25QYXJhbWV0ZXJzKCptX3BlbmRp
bmdQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMuZ2V0KCkpOwotICAgIG1fY29ubmVjdGlvbi0+Y29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1
Z2luQXN5bmNocm9ub3VzbHkoY3JlYXRpb25QYXJhbWV0ZXJzKSwgbV9wbHVnaW5JbnN0YW5jZUlE
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQbHVnaW5Qcm94eTo6Y2FuSW5pdGlhbGl6
ZUFzeW5jaHJvbm91c2x5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29udHJvbGxlcigpLT5hc3lu
Y2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbkVuYWJsZWQoKSAmJiAobV9jb25uZWN0aW9uLT5z
dXBwb3J0c0FzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uKCkgfHwgY29udHJvbGxlcigp
LT5hc3luY2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbkVuYWJsZWRGb3JBbGxQbHVnaW5zKCkp
OwotfQotCi1ib29sIFBsdWdpblByb3h5Ojppbml0aWFsaXplU3luY2hyb25vdXNseSgpCi17Ci0g
ICAgQVNTRVJUKG1fcGVuZGluZ1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyk7Ci0KLSAgICBtX3Bl
bmRpbmdQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMtPmFzeW5jaHJvbm91c0NyZWF0aW9uSW5jb21w
bGV0ZSA9IG1fd2FpdGluZ09uQXN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb247Ci0gICAgYm9vbCBy
ZXN1bHQgPSBmYWxzZTsKLSAgICBib29sIHdhbnRzV2hlZWxFdmVudHMgPSBmYWxzZTsKLSAgICB1
aW50MzJfdCByZW1vdGVMYXllckNsaWVudElEID0gMDsKLSAgICAKLSAgICBQbHVnaW5DcmVhdGlv
blBhcmFtZXRlcnMgcGFyYW1ldGVycygqbV9wZW5kaW5nUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJz
LmdldCgpKTsKLQotICAgIGlmICghbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luKHBhcmFtZXRlcnMp
LCBNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdpbjo6UmVwbHkocmVz
dWx0LCB3YW50c1doZWVsRXZlbnRzLCByZW1vdGVMYXllckNsaWVudElEKSwgMCkgfHwgIXJlc3Vs
dCkKLSAgICAgICAgZGlkRmFpbFRvQ3JlYXRlUGx1Z2luSW50ZXJuYWwoKTsKLSAgICBlbHNlCi0g
ICAgICAgIGRpZENyZWF0ZVBsdWdpbkludGVybmFsKHdhbnRzV2hlZWxFdmVudHMsIHJlbW90ZUxh
eWVyQ2xpZW50SUQpOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgUGx1Z2lu
UHJveHk6OmRpZENyZWF0ZVBsdWdpbihib29sIHdhbnRzV2hlZWxFdmVudHMsIHVpbnQzMl90IHJl
bW90ZUxheWVyQ2xpZW50SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKLXsKLSAgICAvLyBXZSBtaWdodCBoYXZlIHRyaWVkIHRvIGNyZWF0ZSB0aGUgcGx1
Zy1pbiBzeWNocm9ub3VzbHkgd2hpbGUgd2FpdGluZyBvbiB0aGUgYXN5bmNocm9ub3VzIHJlcGx5
LAotICAgIC8vIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIGlnbm9yZSB0aGlzIG1lc3NhZ2UuCi0g
ICAgaWYgKCFtX3dhaXRpbmdPbkFzeW5jaHJvbm91c0luaXRpYWxpemF0aW9uKQotICAgICAgICBy
ZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoKTsKLQotICAgIGRpZENyZWF0ZVBsdWdpbkludGVybmFs
KHdhbnRzV2hlZWxFdmVudHMsIHJlbW90ZUxheWVyQ2xpZW50SUQpOwotICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OmRpZEZhaWxUb0NyZWF0ZVBsdWdpbihD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgLy8g
V2UgbWlnaHQgaGF2ZSB0cmllZCB0byBjcmVhdGUgdGhlIHBsdWctaW4gc3ljaHJvbm91c2x5IHdo
aWxlIHdhaXRpbmcgb24gdGhlIGFzeW5jaHJvbm91cyByZXBseSwKLSAgICAvLyBpbiB3aGljaCBj
YXNlIHdlIHNob3VsZCBpZ25vcmUgdGhpcyBtZXNzYWdlLgotICAgIGlmICghbV93YWl0aW5nT25B
c3luY2hyb25vdXNJbml0aWFsaXphdGlvbikKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5k
bGVyKCk7Ci0KLSAgICBkaWRGYWlsVG9DcmVhdGVQbHVnaW5JbnRlcm5hbCgpOwotICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OmRpZENyZWF0ZVBsdWdpbklu
dGVybmFsKGJvb2wgd2FudHNXaGVlbEV2ZW50cywgdWludDMyX3QgcmVtb3RlTGF5ZXJDbGllbnRJ
RCkKLXsKLSAgICBtX3dhbnRzV2hlZWxFdmVudHMgPSB3YW50c1doZWVsRXZlbnRzOwotICAgIG1f
cmVtb3RlTGF5ZXJDbGllbnRJRCA9IHJlbW90ZUxheWVyQ2xpZW50SUQ7Ci0gICAgbV9pc1N0YXJ0
ZWQgPSB0cnVlOwotICAgIGNvbnRyb2xsZXIoKS0+ZGlkSW5pdGlhbGl6ZVBsdWdpbigpOwotCi0g
ICAgLy8gV2hldGhlciBzeW5jaHJvbm91c2x5IG9yIGFzeW5jaHJvbm91c2x5LCB0aGlzIHBsdWct
aW4gd2FzIGNyZWF0ZWQgYW5kIHdlIHNob3VsZG4ndCBuZWVkIHRvIHJlbWVtYmVyCi0gICAgLy8g
YW55dGhpbmcgYWJvdXQgaG93LgotICAgIG1fcGVuZGluZ1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVy
cyA9IG51bGxwdHI7Ci0gICAgbV93YWl0aW5nT25Bc3luY2hyb25vdXNJbml0aWFsaXphdGlvbiA9
IGZhbHNlOwotfQotCi12b2lkIFBsdWdpblByb3h5OjpkaWRGYWlsVG9DcmVhdGVQbHVnaW5JbnRl
cm5hbCgpCi17Ci0gICAgLy8gQ2FsbGluZyBvdXQgdG8gdGhlIGNvbm5lY3Rpb24gYW5kIHRoZSBj
b250cm9sbGVyIGNvdWxkIHBvdGVudGlhbGx5IGNhdXNlIHRoZSBwbHVnLWluIHByb3h5IHRvIGdv
IGF3YXksIHNvIHByb3RlY3QgaXQgaGVyZS4KLSAgICBSZWY8UGx1Z2luUHJveHk+IHByb3RlY3Qo
KnRoaXMpOwotCi0gICAgbV9jb25uZWN0aW9uLT5yZW1vdmVQbHVnaW5Qcm94eSh0aGlzKTsKLSAg
ICBjb250cm9sbGVyKCktPmRpZEZhaWxUb0luaXRpYWxpemVQbHVnaW4oKTsKLQotICAgIC8vIFdo
ZXRoZXIgc3luY2hyb25vdXNseSBvciBhc3luY2hyb25vdXNseSwgdGhpcyBwbHVnLWluIGZhaWxl
ZCB0byBjcmVhdGUgYW5kIHdlIHNob3VsZG4ndCBuZWVkIHRvIHJlbWVtYmVyCi0gICAgLy8gYW55
dGhpbmcgYWJvdXQgaG93LgotICAgIG1fcGVuZGluZ1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyA9
IG51bGxwdHI7Ci0gICAgbV93YWl0aW5nT25Bc3luY2hyb25vdXNJbml0aWFsaXphdGlvbiA9IGZh
bHNlOwotfQotCi12b2lkIFBsdWdpblByb3h5OjpkZXN0cm95KCkKLXsKLSAgICBtX2lzU3RhcnRl
ZCA9IGZhbHNlOwotCi0gICAgaWYgKCFtX2Nvbm5lY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIEFsdGhvdWdoIHRoaXMgbWVzc2FnZSBpcyBzZW50IHN5bmNocm9ub3VzbHksIHRoZSBQ
bHVnaW4gcHJvY2VzcyByZXBsaWVzIGltbWVkaWF0ZWx5IChiZWZvcmUgcGVyZm9ybWluZyBhbnkg
dGFza3MpIHNvIHRoaXMgaXMgb25seSB3YWl0aW5nIGZvcgotICAgIC8vIGNvbmZpcm1hdGlvbiB0
aGF0IHRoZSBQbHVnaW4gcHJvY2VzcyByZWNlaXZlZCB0aGUgRGVzdHJveVBsdWdpbiBtZXNzYWdl
LgotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2Vi
UHJvY2Vzc0Nvbm5lY3Rpb246OkRlc3Ryb3lQbHVnaW4obV9wbHVnaW5JbnN0YW5jZUlELCBtX3dh
aXRpbmdPbkFzeW5jaHJvbm91c0luaXRpYWxpemF0aW9uKSwgTWVzc2FnZXM6OldlYlByb2Nlc3ND
b25uZWN0aW9uOjpEZXN0cm95UGx1Z2luOjpSZXBseSgpLCAwLCAxX3MpOwotICAgIG1fY29ubmVj
dGlvbi0+cmVtb3ZlUGx1Z2luUHJveHkodGhpcyk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OnBh
aW50KEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0
eVJlY3QpCi17Ci0gICAgaWYgKCFuZWVkc0JhY2tpbmdTdG9yZSgpIHx8ICFtX2JhY2tpbmdTdG9y
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3BsdWdpbkJhY2tpbmdTdG9yZUNvbnRh
aW5zVmFsaWREYXRhKSB7Ci0gICAgICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5k
U3luYyhNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpQYWludEVudGlyZVBsdWdpbigp
LCBNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpQYWludEVudGlyZVBsdWdpbjo6UmVw
bHkoKSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLSAgICAKLSAgICAgICAgLy8gQmxpdCB0aGUgcGx1
Zy1pbiBiYWNraW5nIHN0b3JlIGludG8gb3VyIG93biBiYWNraW5nIHN0b3JlLgotICAgICAgICBh
dXRvIGdyYXBoaWNzQ29udGV4dCA9IG1fYmFja2luZ1N0b3JlLT5jcmVhdGVHcmFwaGljc0NvbnRl
eHQoKTsKLSAgICAgICAgaWYgKGdyYXBoaWNzQ29udGV4dCkgewotICAgICAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LT5hcHBseURldmljZVNjYWxlRmFjdG9yKGNvbnRlbnRzU2NhbGVGYWN0b3IoKSk7
Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21w
b3NpdGVPcGVyYXRvcjo6Q29weSk7Ci0KLSAgICAgICAgICAgIG1fcGx1Z2luQmFja2luZ1N0b3Jl
LT5wYWludCgqZ3JhcGhpY3NDb250ZXh0LCBjb250ZW50c1NjYWxlRmFjdG9yKCksIEludFBvaW50
KCksIHBsdWdpbkJvdW5kcygpKTsKLQotICAgICAgICAgICAgbV9wbHVnaW5CYWNraW5nU3RvcmVD
b250YWluc1ZhbGlkRGF0YSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2JhY2tp
bmdTdG9yZS0+cGFpbnQoZ3JhcGhpY3NDb250ZXh0LCBjb250ZW50c1NjYWxlRmFjdG9yKCksIGRp
cnR5UmVjdC5sb2NhdGlvbigpLCBkaXJ0eVJlY3QpOwotCi0gICAgaWYgKG1fd2FpdGluZ0ZvclBh
aW50SW5SZXNwb25zZVRvVXBkYXRlKSB7Ci0gICAgICAgIG1fd2FpdGluZ0ZvclBhaW50SW5SZXNw
b25zZVRvVXBkYXRlID0gZmFsc2U7Ci0gICAgICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OkRpZFVwZGF0ZSgpLCBtX3Bs
dWdpbkluc3RhbmNlSUQpOwotICAgIH0KLX0KLQotYm9vbCBQbHVnaW5Qcm94eTo6c3VwcG9ydHNT
bmFwc2hvdHRpbmcoKSBjb25zdAotewotICAgIGlmIChtX3dhaXRpbmdPbkFzeW5jaHJvbm91c0lu
aXRpYWxpemF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIGlzU3VwcG9y
dGVkID0gZmFsc2U7Ci0gICAgaWYgKG1fY29ubmVjdGlvbiAmJiAhbV9jb25uZWN0aW9uLT5jb25u
ZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OlN1cHBv
cnRzU25hcHNob3R0aW5nKCksIE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OlN1cHBv
cnRzU25hcHNob3R0aW5nOjpSZXBseShpc1N1cHBvcnRlZCksIG1fcGx1Z2luSW5zdGFuY2VJRCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBpc1N1cHBvcnRlZDsKLX0KLQot
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gUGx1Z2luUHJveHk6OnNuYXBzaG90KCkKLXsKLSAgICBT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZSBzbmFwc2hvdFN0b3JlSGFuZGxlOwotICAgIG1fY29ubmVj
dGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclBy
b3h5OjpTbmFwc2hvdCgpLCBNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpTbmFwc2hv
dDo6UmVwbHkoc25hcHNob3RTdG9yZUhhbmRsZSksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci0KLSAg
ICBpZiAoc25hcHNob3RTdG9yZUhhbmRsZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICByZXR1cm4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoc25hcHNob3RTdG9yZUhh
bmRsZSk7Ci19Ci0KLWJvb2wgUGx1Z2luUHJveHk6OmlzVHJhbnNwYXJlbnQoKQotewotICAgIC8v
IFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBmcm9tIHRoZSB3ZWIgcHJvY2Vzcy4KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUGx1Z2lu
UHJveHk6OndhbnRzV2hlZWxFdmVudHMoKQotewotICAgIHJldHVybiBtX3dhbnRzV2hlZWxFdmVu
dHM7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6Omdlb21ldHJ5RGlkQ2hhbmdlKCkKLXsKLSAgICBB
U1NFUlQobV9pc1N0YXJ0ZWQpOwotCi0gICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgcGx1Z2lu
QmFja2luZ1N0b3JlSGFuZGxlOwotCi0gICAgaWYgKHVwZGF0ZUJhY2tpbmdTdG9yZSgpKSB7Ci0g
ICAgICAgIC8vIENyZWF0ZSBhIG5ldyBwbHVnLWluIGJhY2tpbmcgc3RvcmUuCi0gICAgICAgIG1f
cGx1Z2luQmFja2luZ1N0b3JlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUobV9i
YWNraW5nU3RvcmUtPnNpemUoKSwgeyB9KTsKLSAgICAgICAgaWYgKCFtX3BsdWdpbkJhY2tpbmdT
dG9yZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBDcmVhdGUgYSBoYW5kbGUg
dG8gdGhlIHBsdWctaW4gYmFja2luZyBzdG9yZSBzbyB3ZSBjYW4gc2VuZCBpdCBvdmVyLgotICAg
ICAgICBpZiAoIW1fcGx1Z2luQmFja2luZ1N0b3JlLT5jcmVhdGVIYW5kbGUocGx1Z2luQmFja2lu
Z1N0b3JlSGFuZGxlKSkgewotICAgICAgICAgICAgbV9wbHVnaW5CYWNraW5nU3RvcmUgPSBudWxs
cHRyOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9wbHVnaW5C
YWNraW5nU3RvcmVDb250YWluc1ZhbGlkRGF0YSA9IGZhbHNlOwotICAgIH0KLQotICAgIG1fY29u
bmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJv
eHk6Okdlb21ldHJ5RGlkQ2hhbmdlKG1fcGx1Z2luU2l6ZSwgbV9jbGlwUmVjdCwgbV9wbHVnaW5U
b1Jvb3RWaWV3VHJhbnNmb3JtLCBjb250ZW50c1NjYWxlRmFjdG9yKCksIHBsdWdpbkJhY2tpbmdT
dG9yZUhhbmRsZSksIG1fcGx1Z2luSW5zdGFuY2VJRCwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRj
aE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOwotfQotCi12b2lkIFBsdWdpblBy
b3h5OjpnZW9tZXRyeURpZENoYW5nZShjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBJ
bnRSZWN0JiBjbGlwUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3
VHJhbnNmb3JtKQotewotICAgIGlmIChwbHVnaW5TaXplID09IG1fcGx1Z2luU2l6ZSAmJiBtX2Ns
aXBSZWN0ID09IGNsaXBSZWN0ICYmIG1fcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybSA9PSBwbHVn
aW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKSB7Ci0gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCi0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgbV9wbHVnaW5TaXplID0gcGx1Z2luU2l6ZTsK
LSAgICBtX2NsaXBSZWN0ID0gY2xpcFJlY3Q7Ci0gICAgbV9wbHVnaW5Ub1Jvb3RWaWV3VHJhbnNm
b3JtID0gcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybTsKLQotICAgIGdlb21ldHJ5RGlkQ2hhbmdl
KCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OnZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCBpc1Zp
c2libGUpCi17Ci0gICAgQVNTRVJUKG1faXNTdGFydGVkKTsKLSAgICBtX2Nvbm5lY3Rpb24tPmNv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpWaXNpYmls
aXR5RGlkQ2hhbmdlKGlzVmlzaWJsZSksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0KLXZvaWQg
UGx1Z2luUHJveHk6OmZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpCi17
Ci0gICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpbkNv
bnRyb2xsZXJQcm94eTo6RnJhbWVEaWRGaW5pc2hMb2FkaW5nKHJlcXVlc3RJRCksIG1fcGx1Z2lu
SW5zdGFuY2VJRCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OmZyYW1lRGlkRmFpbCh1aW50NjRf
dCByZXF1ZXN0SUQsIGJvb2wgd2FzQ2FuY2VsbGVkKQotewotICAgIG1fY29ubmVjdGlvbi0+Y29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OkZyYW1lRGlk
RmFpbChyZXF1ZXN0SUQsIHdhc0NhbmNlbGxlZCksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0K
LXZvaWQgUGx1Z2luUHJveHk6OmRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCByZXF1ZXN0
SUQsIGNvbnN0IFdURjo6U3RyaW5nJiByZXN1bHQpCi17Ci0gICAgbV9jb25uZWN0aW9uLT5jb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6RGlkRXZhbHVh
dGVKYXZhU2NyaXB0KHJlcXVlc3RJRCwgcmVzdWx0KSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLX0K
LQotdm9pZCBQbHVnaW5Qcm94eTo6c3RyZWFtV2lsbFNlbmRSZXF1ZXN0KHVpbnQ2NF90IHN0cmVh
bUlELCBjb25zdCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IFVSTCYgcmVzcG9uc2VVUkwsIGludCBy
ZXNwb25zZVN0YXR1cykKLXsKLSAgICBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpTdHJlYW1XaWxsU2VuZFJlcXVlc3Qoc3Ry
ZWFtSUQsIHJlcXVlc3RVUkwuc3RyaW5nKCksIHJlc3BvbnNlVVJMLnN0cmluZygpLCByZXNwb25z
ZVN0YXR1cyksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OnN0
cmVhbURpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgVVJMJiByZXNw
b25zZVVSTCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1l
LCBjb25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFdURjo6U3RyaW5nJiBoZWFkZXJz
LCBjb25zdCBTdHJpbmcmIC8qIHN1Z2dlc3RlZEZpbGVOYW1lICovKQotewotICAgIG1fY29ubmVj
dGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6
OlN0cmVhbURpZFJlY2VpdmVSZXNwb25zZShzdHJlYW1JRCwgcmVzcG9uc2VVUkwuc3RyaW5nKCks
IHN0cmVhbUxlbmd0aCwgbGFzdE1vZGlmaWVkVGltZSwgbWltZVR5cGUsIGhlYWRlcnMpLCBtX3Bs
dWdpbkluc3RhbmNlSUQpOwotfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAotdm9pZCBQbHVnaW5Qcm94eTo6c3RyZWFtRGlkUmVjZWl2ZURhdGEodWludDY0X3Qg
c3RyZWFtSUQsIGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBpbnQgbGVuZ3RoKQotewotICAgIG1fY29u
bmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJv
eHk6OlN0cmVhbURpZFJlY2VpdmVEYXRhKHN0cmVhbUlELCBJUEM6OkRhdGFSZWZlcmVuY2UoYnl0
ZXMsIGxlbmd0aCkpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwotfQotCi12b2lkIFBsdWdpblByb3h5
OjpzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlEKQotewotICAgIG1fY29u
bmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJv
eHk6OlN0cmVhbURpZEZpbmlzaExvYWRpbmcoc3RyZWFtSUQpLCBtX3BsdWdpbkluc3RhbmNlSUQp
OwotfQotCi12b2lkIFBsdWdpblByb3h5OjpzdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0cmVhbUlE
LCBib29sIHdhc0NhbmNlbGxlZCkKLXsKLSAgICBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpTdHJlYW1EaWRGYWlsKHN0cmVh
bUlELCB3YXNDYW5jZWxsZWQpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwotfQotCi12b2lkIFBsdWdp
blByb3h5OjptYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgVVJMJiByZXNwb25z
ZVVSTCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCAgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwg
Y29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBXVEY6OlN0cmluZyYgaGVhZGVycywg
Y29uc3QgU3RyaW5nJiAvKiBzdWdnZXN0ZWRGaWxlTmFtZSAqLykKLXsKLSAgICBtX2Nvbm5lY3Rp
b24tPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpN
YW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2VVUkwuc3RyaW5nKCksIHN0cmVh
bUxlbmd0aCwgbGFzdE1vZGlmaWVkVGltZSwgbWltZVR5cGUsIGhlYWRlcnMpLCBtX3BsdWdpbklu
c3RhbmNlSUQpOwotfQotCi12b2lkIFBsdWdpblByb3h5OjptYW51YWxTdHJlYW1EaWRSZWNlaXZl
RGF0YShjb25zdCB1aW50OF90KiBieXRlcywgaW50IGxlbmd0aCkKLXsKLSAgICBtX2Nvbm5lY3Rp
b24tPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpN
YW51YWxTdHJlYW1EaWRSZWNlaXZlRGF0YShJUEM6OkRhdGFSZWZlcmVuY2UoYnl0ZXMsIGxlbmd0
aCkpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwotfQotCi12b2lkIFBsdWdpblByb3h5OjptYW51YWxT
dHJlYW1EaWRGaW5pc2hMb2FkaW5nKCkKLXsKLSAgICBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpNYW51YWxTdHJlYW1EaWRG
aW5pc2hMb2FkaW5nKCksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJv
eHk6Om1hbnVhbFN0cmVhbURpZEZhaWwoYm9vbCB3YXNDYW5jZWxsZWQpCi17Ci0gICAgbV9jb25u
ZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94
eTo6TWFudWFsU3RyZWFtRGlkRmFpbCh3YXNDYW5jZWxsZWQpLCBtX3BsdWdpbkluc3RhbmNlSUQp
OwotfQotCi1ib29sIFBsdWdpblByb3h5OjpoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNl
RXZlbnQmIG1vdXNlRXZlbnQpCi17Ci0gICAgaWYgKG1fd2FpdGluZ09uQXN5bmNocm9ub3VzSW5p
dGlhbGl6YXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fY29ubmVjdGlvbi0+
Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OkhhbmRs
ZU1vdXNlRXZlbnQobW91c2VFdmVudCksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgUGx1Z2luUHJveHk6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgV2Vi
V2hlZWxFdmVudCYgd2hlZWxFdmVudCkKLXsKLSAgICBpZiAobV93YWl0aW5nT25Bc3luY2hyb25v
dXNJbml0aWFsaXphdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBoYW5k
bGVkID0gZmFsc2U7Ci0gICAgaWYgKCFtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6SGFuZGxlV2hlZWxFdmVudCh3aGVl
bEV2ZW50KSwgTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6SGFuZGxlV2hlZWxFdmVu
dDo6UmVwbHkoaGFuZGxlZCksIG1fcGx1Z2luSW5zdGFuY2VJRCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiBoYW5kbGVkOwotfQotCi1ib29sIFBsdWdpblByb3h5OjpoYW5k
bGVNb3VzZUVudGVyRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFbnRlckV2ZW50KQot
ewotICAgIGlmIChtX3dhaXRpbmdPbkFzeW5jaHJvbm91c0luaXRpYWxpemF0aW9uKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKLSAgICBpZiAoIW1f
Y29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6UGx1Z2luQ29udHJv
bGxlclByb3h5OjpIYW5kbGVNb3VzZUVudGVyRXZlbnQobW91c2VFbnRlckV2ZW50KSwgTWVzc2Fn
ZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6SGFuZGxlTW91c2VFbnRlckV2ZW50OjpSZXBseSho
YW5kbGVkKSwgbV9wbHVnaW5JbnN0YW5jZUlEKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAotICAgIHJldHVybiBoYW5kbGVkOwotfQotCi1ib29sIFBsdWdpblByb3h5OjpoYW5kbGVNb3Vz
ZUxlYXZlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VMZWF2ZUV2ZW50KQotewotICAg
IGlmIChtX3dhaXRpbmdPbkFzeW5jaHJvbm91c0luaXRpYWxpemF0aW9uKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKLSAgICBpZiAoIW1fY29ubmVj
dGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclBy
b3h5OjpIYW5kbGVNb3VzZUxlYXZlRXZlbnQobW91c2VMZWF2ZUV2ZW50KSwgTWVzc2FnZXM6OlBs
dWdpbkNvbnRyb2xsZXJQcm94eTo6SGFuZGxlTW91c2VMZWF2ZUV2ZW50OjpSZXBseShoYW5kbGVk
KSwgbV9wbHVnaW5JbnN0YW5jZUlEKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAg
IHJldHVybiBoYW5kbGVkOwotfQotCi1ib29sIFBsdWdpblByb3h5OjpoYW5kbGVDb250ZXh0TWVu
dUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKQotewotICAgIC8vIFdlIGRvbid0IGtub3cgaWYg
dGhlIHBsdWctaW4gaGFzIGhhbmRsZWQgbW91c2Vkb3duIGV2ZW50IGJ5IGRpc3BsYXlpbmcgYSBj
b250ZXh0IG1lbnUsIHNvIHdlIG5ldmVyIHdhbnQgV2ViS2l0IHRvIHNob3cgYSBkZWZhdWx0IG9u
ZS4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQbHVnaW5Qcm94eTo6aGFuZGxlS2V5Ym9h
cmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBrZXlib2FyZEV2ZW50KQotewotICAgIGlm
IChtX3dhaXRpbmdPbkFzeW5jaHJvbm91c0luaXRpYWxpemF0aW9uKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKLSAgICBpZiAoIW1fY29ubmVjdGlv
bi0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5
OjpIYW5kbGVLZXlib2FyZEV2ZW50KGtleWJvYXJkRXZlbnQpLCBNZXNzYWdlczo6UGx1Z2luQ29u
dHJvbGxlclByb3h5OjpIYW5kbGVLZXlib2FyZEV2ZW50OjpSZXBseShoYW5kbGVkKSwgbV9wbHVn
aW5JbnN0YW5jZUlEKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiBo
YW5kbGVkOwotfQotCi12b2lkIFBsdWdpblByb3h5OjpzZXRGb2N1cyhib29sIGhhc0ZvY3VzKQot
ewotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5D
b250cm9sbGVyUHJveHk6OlNldEZvY3VzKGhhc0ZvY3VzKSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsK
LX0KLQotYm9vbCBQbHVnaW5Qcm94eTo6aGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5n
JiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKLXsKLSAgICBpZiAobV93YWl0
aW5nT25Bc3luY2hyb25vdXNJbml0aWFsaXphdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0gICAgaWYgKCFtX2Nvbm5lY3Rpb24tPmNvbm5l
Y3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6SGFuZGxl
RWRpdGluZ0NvbW1hbmQoY29tbWFuZE5hbWUsIGFyZ3VtZW50KSwgTWVzc2FnZXM6OlBsdWdpbkNv
bnRyb2xsZXJQcm94eTo6SGFuZGxlRWRpdGluZ0NvbW1hbmQ6OlJlcGx5KGhhbmRsZWQpLCBtX3Bs
dWdpbkluc3RhbmNlSUQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJu
IGhhbmRsZWQ7Ci19Ci0gICAgCi1ib29sIFBsdWdpblByb3h5Ojppc0VkaXRpbmdDb21tYW5kRW5h
YmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQotewotICAgIGlmIChtX3dhaXRpbmdPbkFz
eW5jaHJvbm91c0luaXRpYWxpemF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBi
b29sIGVuYWJsZWQgPSBmYWxzZTsKLSAgICBpZiAoIW1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpJc0VkaXRpbmdDb21t
YW5kRW5hYmxlZChjb21tYW5kTmFtZSksIE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6
OklzRWRpdGluZ0NvbW1hbmRFbmFibGVkOjpSZXBseShlbmFibGVkKSwgbV9wbHVnaW5JbnN0YW5j
ZUlEKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiBlbmFibGVkOwot
fQotICAgIAotYm9vbCBQbHVnaW5Qcm94eTo6aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpIGNvbnN0
Ci17Ci0gICAgaWYgKG1fd2FpdGluZ09uQXN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb24pCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwotICAgIGlmICgh
bV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Db250
cm9sbGVyUHJveHk6OkhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSwgTWVzc2FnZXM6OlBsdWdpbkNv
bnRyb2xsZXJQcm94eTo6SGFuZGxlc1BhZ2VTY2FsZUZhY3Rvcjo6UmVwbHkoaGFuZGxlZCksIG1f
cGx1Z2luSW5zdGFuY2VJRCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXR1
cm4gaGFuZGxlZDsKLX0KLQotYm9vbCBQbHVnaW5Qcm94eTo6cmVxdWlyZXNVbmlmaWVkU2NhbGVG
YWN0b3IoKSBjb25zdAotewotICAgIGlmIChtX3dhaXRpbmdPbkFzeW5jaHJvbm91c0luaXRpYWxp
emF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIHJlcXVpcmVkID0gZmFs
c2U7Ci0gICAgaWYgKCFtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6UmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0b3IoKSwg
TWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6UmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0
b3I6OlJlcGx5KHJlcXVpcmVkKSwgbV9wbHVnaW5JbnN0YW5jZUlEKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAotICAgIHJldHVybiByZXF1aXJlZDsKLX0KLQotTlBPYmplY3QqIFBsdWdp
blByb3h5OjpwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKQotewotICAgIC8vIFNlbmRpbmcgdGhl
IHN5bmNocm9ub3VzIE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OkdldFBsdWdpblNj
cmlwdGFibGVOUE9iamVjdCBtZXNzYWdlIGNhbiBjYXVzZSB1cyB0byBkaXNwYXRjaCBhbgotICAg
IC8vIGluY29taW5nIHN5bmNocm9ub3VzIG1lc3NhZ2UgdGhhdCBlbmRzIHVwIGRlc3Ryb3lpbmcg
dGhlIFBsdWdpblByb3h5IG9iamVjdC4KLSAgICBQbHVnaW5Db250cm9sbGVyOjpQbHVnaW5EZXN0
cnVjdGlvblByb3RlY3RvciBwcm90ZWN0b3IoY29udHJvbGxlcigpKTsKLQotICAgIHVpbnQ2NF90
IHBsdWdpblNjcmlwdGFibGVOUE9iamVjdElEID0gMDsKLSAgICAKLSAgICBpZiAoIW1fY29ubmVj
dGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclBy
b3h5OjpHZXRQbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKSwgTWVzc2FnZXM6OlBsdWdpbkNvbnRy
b2xsZXJQcm94eTo6R2V0UGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0OjpSZXBseShwbHVnaW5TY3Jp
cHRhYmxlTlBPYmplY3RJRCksIG1fcGx1Z2luSW5zdGFuY2VJRCkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgaWYgKCFwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3RJRCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICByZXR1cm4gbV9jb25uZWN0aW9uLT5ucFJlbW90ZU9iamVjdE1hcCgpLT5jcmVh
dGVOUE9iamVjdFByb3h5KHBsdWdpblNjcmlwdGFibGVOUE9iamVjdElELCB0aGlzKTsKLX0KLQot
dm9pZCBQbHVnaW5Qcm94eTo6d2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wgaGFzRm9jdXMpCi17Ci0g
ICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpbkNvbnRy
b2xsZXJQcm94eTo6V2luZG93Rm9jdXNDaGFuZ2VkKGhhc0ZvY3VzKSwgbV9wbHVnaW5JbnN0YW5j
ZUlEKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm94eTo6d2luZG93VmlzaWJpbGl0eUNoYW5nZWQoYm9v
bCBpc1Zpc2libGUpCi17Ci0gICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6V2luZG93VmlzaWJpbGl0eUNoYW5nZWQoaXNW
aXNpYmxlKSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLX0KLQotI2lmIFBMQVRGT1JNKENPQ09BKQot
dm9pZCBQbHVnaW5Qcm94eTo6d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKQotewotICAgIG1fY29ubmVj
dGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6
OldpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRl
cywgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcyksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci19
Ci11aW50NjRfdCBQbHVnaW5Qcm94eTo6cGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIo
KSBjb25zdAotewotICAgIHJldHVybiBtX3BsdWdpbkluc3RhbmNlSUQ7Ci19Ci0KLXZvaWQgUGx1
Z2luUHJveHk6OnNlbmRDb21wbGV4VGV4dElucHV0KGNvbnN0IFN0cmluZyYgdGV4dElucHV0KQot
ewotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5D
b250cm9sbGVyUHJveHk6OlNlbmRDb21wbGV4VGV4dElucHV0KHRleHRJbnB1dCksIG1fcGx1Z2lu
SW5zdGFuY2VJRCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBQbHVnaW5Qcm94eTo6Y29udGVudHNTY2Fs
ZUZhY3RvckNoYW5nZWQoZmxvYXQpCi17Ci0gICAgZ2VvbWV0cnlEaWRDaGFuZ2UoKTsKLX0KLQot
dm9pZCBQbHVnaW5Qcm94eTo6c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKGJvb2wgaXNTdG9y
YWdlQmxvY2tpbmdFbmFibGVkKQotewotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OlN0b3JhZ2VCbG9ja2luZ1N0YXRl
Q2hhbmdlZChpc1N0b3JhZ2VCbG9ja2luZ0VuYWJsZWQpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwot
fQotCi12b2lkIFBsdWdpblByb3h5Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCBp
c1ByaXZhdGVCcm93c2luZ0VuYWJsZWQpCi17Ci0gICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6UHJpdmF0ZUJyb3dzaW5n
U3RhdGVDaGFuZ2VkKGlzUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCksIG1fcGx1Z2luSW5zdGFuY2VJ
RCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6Om11dGVkU3RhdGVDaGFuZ2VkKGJvb2wgaXNNdXRl
ZCkKLXsKLSAgICBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1
Z2luQ29udHJvbGxlclByb3h5OjpNdXRlZFN0YXRlQ2hhbmdlZChpc011dGVkKSwgbV9wbHVnaW5J
bnN0YW5jZUlEKTsKLX0KLQotYm9vbCBQbHVnaW5Qcm94eTo6Z2V0Rm9ybVZhbHVlKFN0cmluZyYg
Zm9ybVZhbHVlKQotewotICAgIGJvb2wgcmV0dXJuVmFsdWU7Ci0gICAgaWYgKCFtX2Nvbm5lY3Rp
b24tPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94
eTo6R2V0Rm9ybVZhbHVlKCksIE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OkdldEZv
cm1WYWx1ZTo6UmVwbHkocmV0dXJuVmFsdWUsIGZvcm1WYWx1ZSksIG1fcGx1Z2luSW5zdGFuY2VJ
RCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLX0K
LQotYm9vbCBQbHVnaW5Qcm94eTo6aGFuZGxlU2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xs
R3JhbnVsYXJpdHkpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1TY3JvbGxiYXIqIFBsdWdp
blByb3h5Ojpob3Jpem9udGFsU2Nyb2xsYmFyKCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotU2Ny
b2xsYmFyKiBQbHVnaW5Qcm94eTo6dmVydGljYWxTY3JvbGxiYXIoKQotewotICAgIHJldHVybiAw
OwotfQotCi12b2lkIFBsdWdpblByb3h5Ojpsb2FkVVJMKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHRhcmdldCwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVyRmllbGRzLCBjb25zdCBWZWN0b3I8
dWludDhfdD4mIGh0dHBCb2R5LCBib29sIGFsbG93UG9wdXBzKQotewotICAgIGNvbnRyb2xsZXIo
KS0+bG9hZFVSTChyZXF1ZXN0SUQsIG1ldGhvZCwgdXJsU3RyaW5nLCB0YXJnZXQsIGhlYWRlckZp
ZWxkcywgaHR0cEJvZHksIGFsbG93UG9wdXBzKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm94eTo6cHJv
eGllc0ZvclVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChTdHJpbmcpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGNvbXBsZXRpb25IYW5kbGVy
KGNvbnRyb2xsZXIoKS0+cHJveGllc0ZvclVSTCh1cmxTdHJpbmcpKTsKLX0KLQotdm9pZCBQbHVn
aW5Qcm94eTo6Y29va2llc0ZvclVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChTdHJpbmcpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGNvbXBs
ZXRpb25IYW5kbGVyKGNvbnRyb2xsZXIoKS0+Y29va2llc0ZvclVSTCh1cmxTdHJpbmcpKTsKLX0K
LQotdm9pZCBQbHVnaW5Qcm94eTo6c2V0Q29va2llc0ZvclVSTChjb25zdCBTdHJpbmcmIHVybFN0
cmluZywgY29uc3QgU3RyaW5nJiBjb29raWVTdHJpbmcpCi17Ci0gICAgY29udHJvbGxlcigpLT5z
ZXRDb29raWVzRm9yVVJMKHVybFN0cmluZywgY29va2llU3RyaW5nKTsKLX0KLQotdm9pZCBQbHVn
aW5Qcm94eTo6Z2V0QXV0aGVudGljYXRpb25JbmZvKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJv
dGVjdGlvblNwYWNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgcmV0dXJuVmFsdWUsIFN0
cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsK
LSAgICBTdHJpbmcgdXNlcm5hbWU7Ci0gICAgU3RyaW5nIHBhc3N3b3JkOwotICAgIGJvb2wgcmV0
dXJuVmFsdWUgPSBjb250cm9sbGVyKCktPmdldEF1dGhlbnRpY2F0aW9uSW5mbyhwcm90ZWN0aW9u
U3BhY2UsIHVzZXJuYW1lLCBwYXNzd29yZCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJu
VmFsdWUsIHVzZXJuYW1lLCBwYXNzd29yZCk7Ci19Ci0KLWZsb2F0IFBsdWdpblByb3h5Ojpjb250
ZW50c1NjYWxlRmFjdG9yKCkKLXsKLSAgICByZXR1cm4gY29udHJvbGxlcigpLT5jb250ZW50c1Nj
YWxlRmFjdG9yKCk7Ci19Ci0KLWJvb2wgUGx1Z2luUHJveHk6OnVwZGF0ZUJhY2tpbmdTdG9yZSgp
Ci17Ci0gICAgaWYgKG1fcGx1Z2luU2l6ZS5pc0VtcHR5KCkgfHwgIW5lZWRzQmFja2luZ1N0b3Jl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6
ZSA9IG1fcGx1Z2luU2l6ZTsKLSAgICBiYWNraW5nU3RvcmVTaXplLnNjYWxlKGNvbnRlbnRzU2Nh
bGVGYWN0b3IoKSk7Ci0KLSAgICBpZiAobV9iYWNraW5nU3RvcmUpIHsKLSAgICAgICAgaWYgKG1f
YmFja2luZ1N0b3JlLT5zaXplKCkgPT0gYmFja2luZ1N0b3JlU2l6ZSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOyAvLyBHaXZlIG1h
bGxvYyBhIGNoYW5jZSB0byByZWN5Y2xlIG91ciBiYWNraW5nIHN0b3JlLgotICAgIH0KLQotICAg
IG1fYmFja2luZ1N0b3JlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoYmFja2luZ1N0b3JlU2l6
ZSwgeyB9KTsKLSAgICByZXR1cm4gISFtX2JhY2tpbmdTdG9yZTsKLX0KLQotdWludDY0X3QgUGx1
Z2luUHJveHk6OndpbmRvd05QT2JqZWN0SUQoKQotewotICAgIE5QT2JqZWN0KiB3aW5kb3dTY3Jp
cHROUE9iamVjdCA9IGNvbnRyb2xsZXIoKS0+d2luZG93U2NyaXB0TlBPYmplY3QoKTsKLSAgICBp
ZiAoIXdpbmRvd1NjcmlwdE5QT2JqZWN0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHVpbnQ2
NF90IHdpbmRvd05QT2JqZWN0SUQgPSBtX2Nvbm5lY3Rpb24tPm5wUmVtb3RlT2JqZWN0TWFwKCkt
PnJlZ2lzdGVyTlBPYmplY3Qod2luZG93U2NyaXB0TlBPYmplY3QsIHRoaXMpOwotICAgIHJlbGVh
c2VOUE9iamVjdCh3aW5kb3dTY3JpcHROUE9iamVjdCk7Ci0KLSAgICByZXR1cm4gd2luZG93TlBP
YmplY3RJRDsKLX0KLQotSW50UmVjdCBQbHVnaW5Qcm94eTo6cGx1Z2luQm91bmRzKCkKLXsKLSAg
ICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBtX3BsdWdpblNpemUpOwotfQotCi12b2lkIFBs
dWdpblByb3h5OjpnZXRQbHVnaW5FbGVtZW50TlBPYmplY3QoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCh1aW50NjRfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgTlBPYmplY3QqIHBsdWdp
bkVsZW1lbnROUE9iamVjdCA9IGNvbnRyb2xsZXIoKS0+cGx1Z2luRWxlbWVudE5QT2JqZWN0KCk7
Ci0gICAgaWYgKCFwbHVnaW5FbGVtZW50TlBPYmplY3QpCi0gICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcigwKTsKLQotICAgIHVpbnQ2NF90IHBsdWdpbkVsZW1lbnROUE9iamVjdElEID0g
bV9jb25uZWN0aW9uLT5ucFJlbW90ZU9iamVjdE1hcCgpLT5yZWdpc3Rlck5QT2JqZWN0KHBsdWdp
bkVsZW1lbnROUE9iamVjdCwgdGhpcyk7Ci0gICAgcmVsZWFzZU5QT2JqZWN0KHBsdWdpbkVsZW1l
bnROUE9iamVjdCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIocGx1Z2luRWxlbWVudE5QT2JqZWN0
SUQpOwotfQotCi12b2lkIFBsdWdpblByb3h5OjpldmFsdWF0ZShjb25zdCBOUFZhcmlhbnREYXRh
JiBucE9iamVjdEFzVmFyaWFudERhdGEsIGNvbnN0IFN0cmluZyYgc2NyaXB0U3RyaW5nLCBib29s
IGFsbG93UG9wdXBzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgcmV0dXJuVmFsdWUsIE5Q
VmFyaWFudERhdGEmJiByZXN1bHREYXRhKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBQ
bHVnaW5Db250cm9sbGVyOjpQbHVnaW5EZXN0cnVjdGlvblByb3RlY3RvciBwcm90ZWN0b3IoY29u
dHJvbGxlcigpKTsKLQotICAgIE5QVmFyaWFudCBucE9iamVjdEFzVmFyaWFudCA9IG1fY29ubmVj
dGlvbi0+bnBSZW1vdGVPYmplY3RNYXAoKS0+bnBWYXJpYW50RGF0YVRvTlBWYXJpYW50KG5wT2Jq
ZWN0QXNWYXJpYW50RGF0YSwgdGhpcyk7Ci0gICAgaWYgKCFOUFZBUklBTlRfSVNfT0JKRUNUKG5w
T2JqZWN0QXNWYXJpYW50KSB8fCAhKE5QVkFSSUFOVF9UT19PQkpFQ1QobnBPYmplY3RBc1Zhcmlh
bnQpKSkKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlLCB7IH0pOwotCi0g
ICAgTlBWYXJpYW50IHJlc3VsdDsKLSAgICBib29sIHJldHVyblZhbHVlID0gY29udHJvbGxlcigp
LT5ldmFsdWF0ZShOUFZBUklBTlRfVE9fT0JKRUNUKG5wT2JqZWN0QXNWYXJpYW50KSwgc2NyaXB0
U3RyaW5nLCAmcmVzdWx0LCBhbGxvd1BvcHVwcyk7Ci0gICAgaWYgKCFyZXR1cm5WYWx1ZSkKLSAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlLCB7IH0pOwotCi0gICAgLy8gQ29u
dmVydCB0aGUgTlBWYXJpYW50IHRvIGFuIE5QVmFyaWFudERhdGEuCi0gICAgTlBWYXJpYW50RGF0
YSByZXN1bHREYXRhID0gbV9jb25uZWN0aW9uLT5ucFJlbW90ZU9iamVjdE1hcCgpLT5ucFZhcmlh
bnRUb05QVmFyaWFudERhdGEocmVzdWx0LCB0aGlzKTsKLSAgICAKLSAgICAvLyBBbmQgcmVsZWFz
ZSB0aGUgcmVzdWx0LgotICAgIHJlbGVhc2VOUFZhcmlhbnRWYWx1ZSgmcmVzdWx0KTsKLSAgICBy
ZWxlYXNlTlBWYXJpYW50VmFsdWUoJm5wT2JqZWN0QXNWYXJpYW50KTsKLSAgICAKLSAgICBjb21w
bGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSwgV1RGTW92ZShyZXN1bHREYXRhKSk7Ci19Ci0KLXZv
aWQgUGx1Z2luUHJveHk6OnNldFBsdWdpbklzUGxheWluZ0F1ZGlvKGJvb2wgcGx1Z2luSXNQbGF5
aW5nQXVkaW8pCi17Ci0gICAgY29udHJvbGxlcigpLT5zZXRQbHVnaW5Jc1BsYXlpbmdBdWRpbyhw
bHVnaW5Jc1BsYXlpbmdBdWRpbyk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OmNvbnRpbnVlU3Ry
ZWFtTG9hZCh1aW50NjRfdCBzdHJlYW1JRCkKLXsKLSAgICBjb250cm9sbGVyKCktPmNvbnRpbnVl
U3RyZWFtTG9hZChzdHJlYW1JRCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OmNhbmNlbFN0cmVh
bUxvYWQodWludDY0X3Qgc3RyZWFtSUQpCi17Ci0gICAgY29udHJvbGxlcigpLT5jYW5jZWxTdHJl
YW1Mb2FkKHN0cmVhbUlEKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm94eTo6Y2FuY2VsTWFudWFsU3Ry
ZWFtTG9hZCgpCi17Ci0gICAgY29udHJvbGxlcigpLT5jYW5jZWxNYW51YWxTdHJlYW1Mb2FkKCk7
Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OnNldFN0YXR1c2JhclRleHQoY29uc3QgU3RyaW5nJiBz
dGF0dXNiYXJUZXh0KQotewotICAgIGNvbnRyb2xsZXIoKS0+c2V0U3RhdHVzYmFyVGV4dChzdGF0
dXNiYXJUZXh0KTsKLX0KLQotI2lmIFBMQVRGT1JNKFgxMSkKLXZvaWQgUGx1Z2luUHJveHk6OmNy
ZWF0ZVBsdWdpbkNvbnRhaW5lcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90IHdpbmRv
d0lEKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihjb250
cm9sbGVyKCktPmNyZWF0ZVBsdWdpbkNvbnRhaW5lcigpKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm94
eTo6d2luZG93ZWRQbHVnaW5HZW9tZXRyeURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBmcmFtZVJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0LCB1aW50NjRfdCB3
aW5kb3dJRCkKLXsKLSAgICBjb250cm9sbGVyKCktPndpbmRvd2VkUGx1Z2luR2VvbWV0cnlEaWRD
aGFuZ2UoZnJhbWVSZWN0LCBjbGlwUmVjdCwgd2luZG93SUQpOwotfQotCi12b2lkIFBsdWdpblBy
b3h5Ojp3aW5kb3dlZFBsdWdpblZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCBpc1Zpc2libGUsIHVp
bnQ2NF90IHdpbmRvd0lEKQotewotICAgIGNvbnRyb2xsZXIoKS0+d2luZG93ZWRQbHVnaW5WaXNp
YmlsaXR5RGlkQ2hhbmdlKGlzVmlzaWJsZSwgd2luZG93SUQpOwotfQotI2VuZGlmCi0KLXZvaWQg
UGx1Z2luUHJveHk6OnVwZGF0ZShjb25zdCBJbnRSZWN0JiBwYWludGVkUmVjdCkKLXsKLSAgICBp
ZiAocGFpbnRlZFJlY3QgPT0gcGx1Z2luQm91bmRzKCkpCi0gICAgICAgIG1fcGx1Z2luQmFja2lu
Z1N0b3JlQ29udGFpbnNWYWxpZERhdGEgPSB0cnVlOwotCi0gICAgaWYgKG1fYmFja2luZ1N0b3Jl
KSB7Ci0gICAgICAgIC8vIEJsaXQgdGhlIHBsdWctaW4gYmFja2luZyBzdG9yZSBpbnRvIG91ciBv
d24gYmFja2luZyBzdG9yZS4KLSAgICAgICAgYXV0byBncmFwaGljc0NvbnRleHQgPSBtX2JhY2tp
bmdTdG9yZS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgICAgIGlmIChncmFwaGljc0Nv
bnRleHQpIHsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YXBwbHlEZXZpY2VTY2FsZUZh
Y3Rvcihjb250ZW50c1NjYWxlRmFjdG9yKCkpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHkpOwotICAgICAg
ICAgICAgbV9wbHVnaW5CYWNraW5nU3RvcmUtPnBhaW50KCpncmFwaGljc0NvbnRleHQsIGNvbnRl
bnRzU2NhbGVGYWN0b3IoKSwgcGFpbnRlZFJlY3QubG9jYXRpb24oKSwgcGFpbnRlZFJlY3QpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQXNrIHRoZSBjb250cm9sbGVyIHRvIGludmFsaWRh
dGUgdGhlIHJlY3QgZm9yIHVzLgotICAgIG1fd2FpdGluZ0ZvclBhaW50SW5SZXNwb25zZVRvVXBk
YXRlID0gdHJ1ZTsKLSAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUocGFpbnRlZFJlY3QpOwot
fQotCi1JbnRQb2ludCBQbHVnaW5Qcm94eTo6Y29udmVydFRvUm9vdFZpZXcoY29uc3QgSW50UG9p
bnQmIHBvaW50KSBjb25zdAotewotICAgIHJldHVybiBtX3BsdWdpblRvUm9vdFZpZXdUcmFuc2Zv
cm0ubWFwUG9pbnQocG9pbnQpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBQ
bHVnaW5Qcm94eTo6bGl2ZVJlc291cmNlRGF0YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG51bGxw
dHI7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5Qcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1
Z2luUHJveHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YxYjM5ZWFiN2RhZTA4
MTY4ZGQzYTczOGZlZDJiMGRjMDcxNDRiMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Q
cm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5j
bHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIlBsdWdpbi5oIgotI2luY2x1ZGUgIlBsdWdp
blByb2Nlc3MuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0FmZmluZVRyYW5zZm9ybS5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4u
aD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+Ci1PQkpDX0NMQVNTIENBTGF5ZXI7Ci0jZW5kaWYKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotICAgIGNsYXNzIEhUVFBIZWFkZXJNYXA7Ci0gICAgY2xhc3MgUHJvdGVjdGlv
blNwYWNlOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgU2hhcmVhYmxlQml0bWFw
OwotY2xhc3MgTlBWYXJpYW50RGF0YTsKLWNsYXNzIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOwot
Ci1zdHJ1Y3QgUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzOwotCi1jbGFzcyBQbHVnaW5Qcm94eSA6
IHB1YmxpYyBQbHVnaW4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8UGx1Z2luUHJveHk+IGNy
ZWF0ZSh1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4pOwotICAgIH5QbHVnaW5Qcm94eSgpOwot
Ci0gICAgdWludDY0X3QgcGx1Z2luSW5zdGFuY2VJRCgpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2lu
SW5zdGFuY2VJRDsgfQotICAgIHZvaWQgcGx1Z2luUHJvY2Vzc0NyYXNoZWQoKTsKLQotICAgIHZv
aWQgZGlkUmVjZWl2ZVBsdWdpblByb3h5TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImKTsKLSAgICBib29sIGRpZFJlY2VpdmVTeW5jUGx1Z2luUHJveHlNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+Jik7Ci0K
LXByaXZhdGU6Ci0gICAgZXhwbGljaXQgUGx1Z2luUHJveHkodWludDY0X3QgcGx1Z2luUHJvY2Vz
c1Rva2VuKTsKLQotICAgIC8vIFBsdWdpbgotICAgIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBQYXJh
bWV0ZXJzJikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpbml0aWFsaXplU3luY2hyb25vdXNseSgpOwot
Ci0gICAgdm9pZCBkZXN0cm95KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwYWludChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpIG92ZXJy
aWRlOwotICAgIGJvb2wgc3VwcG9ydHNTbmFwc2hvdHRpbmcoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBzbmFwc2hvdCgpIG92ZXJyaWRlOwotI2lmIFBMQVRG
T1JNKENPQ09BKQotICAgIFBsYXRmb3JtTGF5ZXIqIHBsdWdpbkxheWVyKCkgb3ZlcnJpZGU7Ci0j
ZW5kaWYKLSAgICBib29sIGlzVHJhbnNwYXJlbnQoKSBvdmVycmlkZTsKLSAgICBib29sIHdhbnRz
V2hlZWxFdmVudHMoKSBvdmVycmlkZTsKLSAgICB2b2lkIGdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIHBsdWdpblNpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNs
aXBSZWN0LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdU
cmFuc2Zvcm0pIG92ZXJyaWRlOwotICAgIHZvaWQgdmlzaWJpbGl0eURpZENoYW5nZShib29sIGlz
VmlzaWJsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0
X3QgcmVxdWVzdElEKSBvdmVycmlkZTsKLSAgICB2b2lkIGZyYW1lRGlkRmFpbCh1aW50NjRfdCBy
ZXF1ZXN0SUQsIGJvb2wgd2FzQ2FuY2VsbGVkKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEV2YWx1
YXRlSmF2YVNjcmlwdCh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFN0cmluZyYgcmVzdWx0KSBv
dmVycmlkZTsKLSAgICB2b2lkIHN0cmVhbVdpbGxTZW5kUmVxdWVzdCh1aW50NjRfdCBzdHJlYW1J
RCwgY29uc3QgVVJMJiByZXF1ZXN0VVJMLCBjb25zdCBVUkwmIHJlc3BvbnNlVVJMLCBpbnQgcmVz
cG9uc2VTdGF0dXMpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNl
KHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBVUkwmIHJlc3BvbnNlVVJMLCB1aW50MzJfdCBzdHJl
YW1MZW5ndGgsIHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGNvbnN0IFN0cmluZyYgaGVhZGVycywgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlTmFt
ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJlYW1EaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBzdHJl
YW1JRCwgY29uc3QgdWludDhfdCogYnl0ZXMsIGludCBsZW5ndGgpIG92ZXJyaWRlOwotICAgIHZv
aWQgc3RyZWFtRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCBzdHJlYW1JRCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0cmVhbUlELCBib29sIHdhc0NhbmNlbGxl
ZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UoY29u
c3QgVVJMJiByZXNwb25zZVVSTCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0
TW9kaWZpZWRUaW1lLCBjb25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFdURjo6U3Ry
aW5nJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVOYW1lKSBvdmVycmlkZTsK
LSAgICB2b2lkIG1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKGNvbnN0IHVpbnQ4X3QqIGJ5dGVz
LCBpbnQgbGVuZ3RoKSBvdmVycmlkZTsKLSAgICB2b2lkIG1hbnVhbFN0cmVhbURpZEZpbmlzaExv
YWRpbmcoKSBvdmVycmlkZTsKLSAgICB2b2lkIG1hbnVhbFN0cmVhbURpZEZhaWwoYm9vbCB3YXND
YW5jZWxsZWQpIG92ZXJyaWRlOwotICAgIAotICAgIGJvb2wgaGFuZGxlTW91c2VFdmVudChjb25z
dCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNv
bnN0IFdlYldoZWVsRXZlbnQmKSBvdmVycmlkZTsKLSAgICBib29sIGhhbmRsZU1vdXNlRW50ZXJF
dmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYW5kbGVNb3Vz
ZUxlYXZlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpIG92ZXJyaWRlOwotICAgIGJvb2wgaGFu
ZGxlQ29udGV4dE1lbnVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAg
Ym9vbCBoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNldEZvY3VzKGJvb2wpIG92ZXJyaWRlOwotICAgIGJvb2wgaGFuZGxlRWRp
dGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1
bWVudCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBT
dHJpbmcmIGNvbW1hbmROYW1lKSBvdmVycmlkZTsKLSAgICBib29sIHNob3VsZEFsbG93U2NyaXB0
aW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIGJvb2wgc2hvdWxkQWxsb3dOYXZp
Z2F0aW9uRnJvbURyYWdzKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAKLSAgICBi
b29sIGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIHJl
cXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgCi0gICAgTlBP
YmplY3QqIHBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB3
aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aW5kb3dWaXNpYmls
aXR5Q2hhbmdlZChib29sKSBvdmVycmlkZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHZv
aWQgd2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2lu
ZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3
RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKSBvdmVycmlkZTsKLSAgICB1aW50NjRfdCBwbHVnaW5D
b21wbGV4VGV4dElucHV0SWRlbnRpZmllcigpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc2Vu
ZENvbXBsZXhUZXh0SW5wdXQoY29uc3QgU3RyaW5nJiB0ZXh0SW5wdXQpIG92ZXJyaWRlOwotICAg
IHZvaWQgc2V0TGF5ZXJIb3N0aW5nTW9kZShMYXllckhvc3RpbmdNb2RlKSBvdmVycmlkZTsKLSNl
bmRpZgotCi0gICAgdm9pZCBjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdlZChmbG9hdCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBzdG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBtdXRlZFN0YXRlQ2hhbmdlZChib29sKSBvdmVycmlkZTsKLSAgICBib29sIGdldEZv
cm1WYWx1ZShTdHJpbmcmIGZvcm1WYWx1ZSkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYW5kbGVTY3Jv
bGwoV2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uLCBXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eSkg
b3ZlcnJpZGU7Ci0gICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkg
b3ZlcnJpZGU7Ci0gICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIG92
ZXJyaWRlOwotCi0gICAgdW5zaWduZWQgY291bnRGaW5kTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCBX
ZWJDb3JlOjpGaW5kT3B0aW9ucywgdW5zaWduZWQpIG92ZXJyaWRlICB7IHJldHVybiAwOyB9Ci0g
ICAgYm9vbCBmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkZpbmRPcHRpb25zLCB1
bnNpZ25lZCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIFdlYkNvcmU6OkludFBv
aW50IGNvbnZlcnRUb1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Qgb3Zl
cnJpZGU7Ci0KLSAgICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBsaXZlUmVzb3VyY2VE
YXRhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0
TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9Ci0KLSAgICBTdHJpbmcgZ2V0U2VsZWN0aW9uU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gU3RyaW5nKCk7IH0KLSAgICBTdHJpbmcgZ2V0U2VsZWN0aW9uRm9yV29yZEF0UG9p
bnQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0
cmluZygpOyB9Ci0gICAgYm9vbCBleGlzdGluZ1NlbGVjdGlvbkNvbnRhaW5zUG9pbnQoY29uc3Qg
V2ViQ29yZTo6RmxvYXRQb2ludCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0K
LSAgICBmbG9hdCBjb250ZW50c1NjYWxlRmFjdG9yKCk7Ci0gICAgYm9vbCBuZWVkc0JhY2tpbmdT
dG9yZSgpIGNvbnN0OwotICAgIGJvb2wgdXBkYXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgdWludDY0
X3Qgd2luZG93TlBPYmplY3RJRCgpOwotICAgIFdlYkNvcmU6OkludFJlY3QgcGx1Z2luQm91bmRz
KCk7Ci0KLSAgICB2b2lkIGdlb21ldHJ5RGlkQ2hhbmdlKCk7Ci0KLSAgICAvLyBNZXNzYWdlIGhh
bmRsZXJzLgotICAgIHZvaWQgbG9hZFVSTCh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgU3RyaW5nJiB0YXJnZXQs
IGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmIGhlYWRlckZpZWxkcywgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBodHRwQm9keSwgYm9vbCBhbGxvd1BvcHVwcyk7Ci0gICAgdm9pZCB1cGRhdGUo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcGFpbnRlZFJlY3QpOwotICAgIHZvaWQgcHJveGllc0Zv
clVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJp
bmcpPiYmKTsKLSAgICB2b2lkIGNvb2tpZXNGb3JVUkwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nKT4mJik7Ci0gICAgdm9pZCBzZXRDb29raWVz
Rm9yVVJMKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cmlu
Zyk7Ci0gICAgdm9pZCBnZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgV2ViQ29yZTo6UHJvdGVj
dGlvblNwYWNlJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIHJldHVyblZhbHVlLCBTdHJp
bmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCk+JiYpOwotICAgIHZvaWQgZ2V0UGx1Z2luRWxl
bWVudE5QT2JqZWN0KENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDY0X3QpPiYmKTsKLSAgICB2
b2lkIGV2YWx1YXRlKGNvbnN0IE5QVmFyaWFudERhdGEmIG5wT2JqZWN0QXNWYXJpYW50RGF0YSwg
Y29uc3QgU3RyaW5nJiBzY3JpcHRTdHJpbmcsIGJvb2wgYWxsb3dQb3B1cHMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCByZXR1cm5WYWx1ZSwgTlBWYXJpYW50RGF0YSYmIHJlc3VsdERhdGEp
PiYmKTsKLSAgICB2b2lkIHNldFBsdWdpbklzUGxheWluZ0F1ZGlvKGJvb2wpOwotICAgIHZvaWQg
Y29udGludWVTdHJlYW1Mb2FkKHVpbnQ2NF90IHN0cmVhbUlEKTsKLSAgICB2b2lkIGNhbmNlbFN0
cmVhbUxvYWQodWludDY0X3Qgc3RyZWFtSUQpOwotICAgIHZvaWQgY2FuY2VsTWFudWFsU3RyZWFt
TG9hZCgpOwotICAgIHZvaWQgc2V0U3RhdHVzYmFyVGV4dChjb25zdCBTdHJpbmcmIHN0YXR1c2Jh
clRleHQpOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHZvaWQgcGx1Z2luRm9jdXNPcldpbmRv
d0ZvY3VzQ2hhbmdlZChib29sKTsKLSAgICB2b2lkIHNldENvbXBsZXhUZXh0SW5wdXRTdGF0ZSh1
aW50NjRfdCk7Ci0gICAgdm9pZCBzZXRMYXllckhvc3RpbmdDb250ZXh0SUQodWludDMyX3QpOwot
I2VuZGlmCi0jaWYgUExBVEZPUk0oWDExKQotICAgIHZvaWQgY3JlYXRlUGx1Z2luQ29udGFpbmVy
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDY0X3Qgd2luZG93SUQpPiYmKTsKLSAgICB2b2lk
IHdpbmRvd2VkUGx1Z2luR2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
ZnJhbWVSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCwgdWludDY0X3Qgd2lu
ZG93SUQpOwotICAgIHZvaWQgd2luZG93ZWRQbHVnaW5WaXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wg
aXNWaXNpYmxlLCB1aW50NjRfdCB3aW5kb3dJRCk7Ci0jZW5kaWYKLQotICAgIGJvb2wgY2FuSW5p
dGlhbGl6ZUFzeW5jaHJvbm91c2x5KCkgY29uc3Q7Ci0KLSAgICB2b2lkIGRpZENyZWF0ZVBsdWdp
bihib29sIHdhbnRzV2hlZWxFdmVudHMsIHVpbnQzMl90IHJlbW90ZUxheWVyQ2xpZW50SUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCBkaWRGYWlsVG9DcmVhdGVQbHVn
aW4oQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLQotICAgIHZvaWQgZGlkQ3JlYXRlUGx1
Z2luSW50ZXJuYWwoYm9vbCB3YW50c1doZWVsRXZlbnRzLCB1aW50MzJfdCByZW1vdGVMYXllckNs
aWVudElEKTsKLSAgICB2b2lkIGRpZEZhaWxUb0NyZWF0ZVBsdWdpbkludGVybmFsKCk7Ci0KLSAg
ICB1aW50NjRfdCBtX3BsdWdpblByb2Nlc3NUb2tlbiB7IDAgfTsKLQotICAgIFJlZlB0cjxQbHVn
aW5Qcm9jZXNzQ29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwotICAgIHVpbnQ2NF90IG1fcGx1Z2lu
SW5zdGFuY2VJRCB7IDAgfTsKLQotICAgIFdlYkNvcmU6OkludFNpemUgbV9wbHVnaW5TaXplOwot
Ci0gICAgLy8gVGhlIGNsaXAgcmVjdCBpbiBwbHVnLWluIGNvb3JkaW5hdGVzLgotICAgIFdlYkNv
cmU6OkludFJlY3QgbV9jbGlwUmVjdDsKLQotICAgIC8vIEEgdHJhbnNmb3JtIHRoYXQgY2FuIGJl
IHVzZWQgdG8gY29udmVydCBmcm9tIHJvb3QgdmlldyBjb29yZGluYXRlcyB0byBwbHVnLWluIGNv
b3JkaW5hdGVzLgotICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSBtX3BsdWdpblRvUm9vdFZp
ZXdUcmFuc2Zvcm07Ci0KLSAgICAvLyBUaGlzIGlzIHRoZSBiYWNraW5nIHN0b3JlIHRoYXQgd2Ug
cGFpbnQgd2hlbiB3ZSdyZSB0b2xkIHRvIHBhaW50LgotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRt
YXA+IG1fYmFja2luZ1N0b3JlOwotCi0gICAgLy8gVGhpcyBpcyB0aGUgc2hhcmVkIG1lbW9yeSBi
YWNraW5nIHN0b3JlIHRoYXQgdGhlIHBsdWctaW4gcGFpbnRzIGludG8uIFdoZW4gdGhlIHBsdWct
aW4gdGVsbHMgdXMKLSAgICAvLyB0aGF0IGl0J3MgcGFpbnRlZCBzb21ldGhpbmcgaW4gaXQsIHdl
J2xsIGJsaXQgZnJvbSBpdCB0byBvdXIgb3duIGJhY2tpbmcgc3RvcmUuCi0gICAgUmVmUHRyPFNo
YXJlYWJsZUJpdG1hcD4gbV9wbHVnaW5CYWNraW5nU3RvcmU7Ci0gICAgCi0gICAgLy8gV2hldGhl
ciBhbGwgb2YgdGhlIHBsdWctaW4gYmFja2luZyBzdG9yZSBjb250YWlucyB2YWxpZCBkYXRhLgot
ICAgIGJvb2wgbV9wbHVnaW5CYWNraW5nU3RvcmVDb250YWluc1ZhbGlkRGF0YSB7IGZhbHNlIH07
Ci0KLSAgICBib29sIG1faXNTdGFydGVkIHsgZmFsc2UgfTsKLQotICAgIC8vIFdoZXRoZXIgd2Un
cmUgY2FsbGVkIGludmFsaWRhdGUgaW4gcmVzcG9uc2UgdG8gYW4gdXBkYXRlIGNhbGwsIGFuZCBh
cmUgbm93IHdhaXRpbmcgZm9yIGEgcGFpbnQgY2FsbC4KLSAgICBib29sIG1fd2FpdGluZ0ZvclBh
aW50SW5SZXNwb25zZVRvVXBkYXRlIHsgZmFsc2UgfTsKLQotICAgIC8vIFdoZXRoZXIgd2Ugc2hv
dWxkIHNlbmQgd2hlZWwgZXZlbnRzIHRvIHRoaXMgcGx1Zy1pbiBvciBub3QuCi0gICAgYm9vbCBt
X3dhbnRzV2hlZWxFdmVudHMgeyBmYWxzZSB9OwotCi0gICAgLy8gVGhlIGNsaWVudCBJRCBmb3Ig
dGhlIENBIGxheWVyIGluIHRoZSBwbHVnLWluIHByb2Nlc3MuIFdpbGwgYmUgMCBpZiB0aGUgcGx1
Zy1pbiBpcyBub3QgYSBDQSBwbHVnLWluLgotICAgIHVpbnQzMl90IG1fcmVtb3RlTGF5ZXJDbGll
bnRJRCB7IDAgfTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5DcmVhdGlvblBhcmFtZXRl
cnM+IG1fcGVuZGluZ1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVyczsKLSAgICBib29sIG1fd2FpdGlu
Z09uQXN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb24geyBmYWxzZSB9OwotCi0jaWYgUExBVEZPUk0o
Q09DT0EpCi0gICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fcGx1Z2luTGF5ZXI7Ci0jZW5kaWYKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1BMVUdJ
TihQbHVnaW5Qcm94eSwgaXNQbHVnaW5Qcm94eSgpKQotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luUHJveHkubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDc0YzdhMjk5NjAwOWQzM2UwNGQ5MWJlNTEyOGVjMTZkZDQwNzc5NGMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVsbApAQCAt
MSw5NCArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotbWVzc2FnZXMgLT4gUGx1Z2luUHJveHkg
TGVnYWN5UmVjZWl2ZXIgewotICAgICMgQXNrcyB0aGUgd2ViIHByb2Nlc3MgdG8gbG9hZCBhIFVS
TC4KLSAgICBMb2FkVVJMKHVpbnQ2NF90IHJlcXVlc3RJRCwgU3RyaW5nIG1ldGhvZCwgU3RyaW5n
IHVybFN0cmluZywgU3RyaW5nIHRhcmdldCwgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCBoZWFkZXJG
aWVsZHMsIFZlY3Rvcjx1aW50OF90PiBodHRwQm9keSwgYm9vbCBhbGxvd1BvcHVwcyk7Ci0KLSAg
ICAjIENhbGxlZCB3aGVuIHRoZSBwbHVnLWluIGhhcyBwYWludGVkIGludG8gaXRzIGJhY2tpbmcg
c3RvcmUuIFRoZSBwYWludGVkIHJlY3QgaXMgaW4gcGx1Zy1pbiBjb29yZGluYXRlcy4KLSAgICBV
cGRhdGUoV2ViQ29yZTo6SW50UmVjdCBwYWludGVkUmVjdCkKLQotICAgICMgUmV0dXJucyBhIFBB
QyBzdHlsZSBzdHJpbmcgd2l0aCBwcm94aWVzIGZvciB0aGUgZ2l2ZW4gVVJMLgotICAgIFByb3hp
ZXNGb3JVUkwoU3RyaW5nIHVybFN0cmluZykgLT4gKFN0cmluZyBwcm94aWVzU3RyaW5nKSBTeW5j
aHJvbm91cwotCi0gICAgIyBSZXR1cm5zIHRoZSBjb29raWVzIGZvciB0aGUgZ2l2ZW4gVVJMLgot
ICAgIENvb2tpZXNGb3JVUkwoU3RyaW5nIHVybFN0cmluZykgLT4gKFN0cmluZyBjb29raWVTdHJp
bmcpIFN5bmNocm9ub3VzCi0KLSAgICAjIFNldHMgdGhlIGNvb2tpZXMgZm9yIHRoZSBnaXZlbiBV
UkwuCi0gICAgU2V0Q29va2llc0ZvclVSTChTdHJpbmcgdXJsU3RyaW5nLCBTdHJpbmcgY29va2ll
U3RyaW5nKQotCi0gICAgIyBHZXRzIHRoZSBhdXRoZW50aWNhdGlvbiBpbmZvIGZvciB0aGUgZ2l2
ZW4gcHJvdGVjdGlvbiBzcGFjZS4KLSAgICBHZXRBdXRoZW50aWNhdGlvbkluZm8oV2ViQ29yZTo6
UHJvdGVjdGlvblNwYWNlIHByb3RlY3Rpb25TcGFjZSkgLT4gKGJvb2wgcmV0dXJuVmFsdWUsIFN0
cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkKSBTeW5jaHJvbm91cwotCi0gICAgIyBHZXRz
IGEgcmVmZXJlbmNlIHRvIHRoZSBwbHVnLWluIGVsZW1lbnQgTlBPYmplY3QuCi0gICAgR2V0UGx1
Z2luRWxlbWVudE5QT2JqZWN0KCkgLT4gKHVpbnQ2NF90IHBsdWdpbkVsZW1lbnROUE9iamVjdElE
KSBTeW5jaHJvbm91cwotCi0gICAgIyBFdmFsdWF0ZXMgdGhlIGdpdmVuIEphdmFTY3JpcHQgc3Ry
aW5nLgotICAgIEV2YWx1YXRlKFdlYktpdDo6TlBWYXJpYW50RGF0YSBucE9iamVjdEFzVmFyaWFu
dERhdGEsIFN0cmluZyBzY3JpcHRTdHJpbmcsIGJvb2wgYWxsb3dQb3B1cHMpIC0+IChib29sIHJl
dHVyblZhbHVlLCBXZWJLaXQ6Ok5QVmFyaWFudERhdGEgcmVzdWx0RGF0YSkgU3luY2hyb25vdXMK
LQotICAgICMgQ2FuY2VscyB0aGUgZ2l2ZW4gc3RyZWFtIGxvYWQuCi0gICAgQ2FuY2VsU3RyZWFt
TG9hZCh1aW50NjRfdCBzdHJlYW1JRCkKLQotICAgICMgQ29udGludWVzIHRoZSBnaXZlbiBzdHJl
YW0gbG9hZC4KLSAgICBDb250aW51ZVN0cmVhbUxvYWQodWludDY0X3Qgc3RyZWFtSUQpCi0KLSAg
ICAjIENhbmNlbCB0aGUgbWFudWFsIHN0cmVhbSBsb2FkLgotICAgIENhbmNlbE1hbnVhbFN0cmVh
bUxvYWQoKQotCi0gICAgIyBTZXQgdGhlIHN0YXR1cyBiYXIgdGV4dC4KLSAgICBTZXRTdGF0dXNi
YXJUZXh0KFN0cmluZyBzdGF0dXNiYXJUZXh0KQotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAg
IyBDYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbidzIGZvY3VzIG9yIGl0cyBjb250YWluaW5nIHdpbmRv
dyBmb2N1cyBjaGFuZ2VzLgotICAgIFBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQoYm9v
bCBwbHVnaW5IYXNGb2N1c0FuZFdpbmRvd0hhc0ZvY3VzKQotCi0gICAgIyBDaGFuZ2Ugd2hldGhl
ciBjb21wbGV4IHRleHQgaW5wdXQgaXMgZW5hYmxlZCBmb3IgdGhpcyBwbHVnLWluLgotICAgIFNl
dENvbXBsZXhUZXh0SW5wdXRTdGF0ZSh1aW50NjRfdCBjb21wbGV4VGV4dElucHV0U3RhdGUpCi0K
LSAgICAjIFVwZGF0ZSB0aGUgbGF5ZXIgaG9zdGluZyBjb250ZXh0IElELiBDYWxsZWQgd2hlbmV2
ZXIgdGhlIGxheWVyIGhvc3Rpbmcgc3RhdGUgY2hhbmdlcy4KLSAgICBTZXRMYXllckhvc3RpbmdD
b250ZXh0SUQodWludDMyX3QgbGF5ZXJIb3N0aW5nQ29udGV4dElEKQotI2VuZGlmCi0KLSNpZiBQ
TEFURk9STShYMTEpCi0gICAgIyBDcmVhdGUgdGhlIHBsdWdpbiBjb250YWluZXIgZm9yIHdpbmRv
d2VkIHBsdWdpbnMKLSAgICBDcmVhdGVQbHVnaW5Db250YWluZXIoKSAtPiAodWludDY0X3Qgd2lu
ZG93SUQpIFN5bmNocm9ub3VzCi0KLSAgICAjIFVwZGF0ZSBnZW9tZXRyeSBvZiB3aW5kb3dlZCBw
bHVnaW4gd2lkZ2V0Ci0gICAgV2luZG93ZWRQbHVnaW5HZW9tZXRyeURpZENoYW5nZShXZWJDb3Jl
OjpJbnRSZWN0IGZyYW1lUmVjdCwgV2ViQ29yZTo6SW50UmVjdCBjbGlwUmVjdCwgdWludDY0X3Qg
d2luZG93SUQpCi0KLSAgICAjIFVwZGF0ZSB2aXNpYmlsaXR5IG9mIHdpbmRvd2VkIHBsdWdpbiB3
aWRnZXQKLSAgICBXaW5kb3dlZFBsdWdpblZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCBpc1Zpc2li
bGUsIHVpbnQ2NF90IHdpbmRvd0lEKQotI2VuZGlmCi0KLSAgICAjIFRlbGxzIHRoZSBXZWJQcm9j
ZXNzIHRoYXQgdGhlIHBsdWctaW4gd2FzIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBhc3luY2hy
b25vdXNseQotICAgIERpZENyZWF0ZVBsdWdpbihib29sIHdhbnRzV2hlZWxFdmVudHMsIHVpbnQz
Ml90IHJlbW90ZUxheWVyQ2xpZW50SUQpIC0+ICgpIFN5bmNocm9ub3VzCi0gICAgCi0gICAgIyBU
ZWxscyB0aGUgV2ViUHJvY2VzcyB0aGF0IHRoZSBwbHVnLWluIGZhaWxlZCB0byBpbml0aWFsaXpl
LgotICAgIERpZEZhaWxUb0NyZWF0ZVBsdWdpbigpIC0+ICgpIFN5bmNocm9ub3VzCi0KLSAgICAj
IFRlbGxzIHRoZSBXZWJQcm9jZXNzIHRoYXQgdGhlIHBsdWctaW4gaGFzIHN0YXJ0ZWQgb3Igc3Rv
cHBlZCBwbGF5aW5nIGF1ZGlvLgotICAgIFNldFBsdWdpbklzUGxheWluZ0F1ZGlvKGJvb2wgcGx1
Z2luSXNQbGF5aW5nQXVkaW8pCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCBkM2FhZDZlYTI2MTY4YTIxYjgzZDUz
MGU3YWI2ZGQ0N2EyNjdmMjFhLi5kNTRmMjdmMDcwOTE0N2U5ZWRlYzA2ZGU1OGMxZThjYzEyMzFh
Njc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5W
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3
LmNwcApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBs
dWdpblZpZXcuaCIKIAotI2luY2x1ZGUgIk5QUnVudGltZVV0aWxpdGllcy5oIgogI2luY2x1ZGUg
IlBsdWdpbi5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYkNv
cmVBcmd1bWVudENvZGVycy5oIgpAQCAtMjYwLDEwICsyNTksNiBAQCB2b2lkIFBsdWdpblZpZXc6
OlN0cmVhbTo6ZGlkRmluaXNoTG9hZGluZyhOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciopCiAg
ICAgLy8gQ2FsbGluZyBzdHJlYW1EaWRGaW5pc2hMb2FkaW5nIGNvdWxkIGNhdXNlIHVzIHRvIGJl
IGRlbGV0ZWQsIHNvIHdlIGhvbGQgb24gdG8gYSByZWZlcmVuY2UgaGVyZS4KICAgICBSZWY8U3Ry
ZWFtPiBwcm90ZWN0KCp0aGlzKTsKIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQot
ICAgIC8vIFByb3RlY3QgdGhlIHBsdWctaW4gd2hpbGUgd2UncmUgY2FsbGluZyBpbnRvIGl0Lgot
ICAgIE5QUnVudGltZU9iamVjdE1hcDo6UGx1Z2luUHJvdGVjdG9yIHBsdWdpblByb3RlY3Rvcigm
bV9wbHVnaW5WaWV3LT5tX25wUnVudGltZU9iamVjdE1hcCk7Ci0jZW5kaWYKICAgICBtX3BsdWdp
blZpZXctPm1fcGx1Z2luLT5zdHJlYW1EaWRGaW5pc2hMb2FkaW5nKG1fc3RyZWFtSUQpOwogCiAg
ICAgbV9wbHVnaW5WaWV3LT5yZW1vdmVTdHJlYW0odGhpcyk7CkBAIC0zMzUsMTEgKzMzMCw2IEBA
IHZvaWQgUGx1Z2luVmlldzo6ZGVzdHJveVBsdWdpbkFuZFJlc2V0KCkKICNlbmRpZgogICAgIH0K
IAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIC8vIEludmFsaWRhdGUgdGhl
IG9iamVjdCBtYXAuCi0gICAgbV9ucFJ1bnRpbWVPYmplY3RNYXAuaW52YWxpZGF0ZSgpOwotI2Vu
ZGlmCi0KICAgICBjYW5jZWxBbGxTdHJlYW1zKCk7CiB9CiAKQEAgLTU4OSwxMiArNTc5LDYgQEAg
dm9pZCBQbHVnaW5WaWV3Ojppbml0aWFsaXplUGx1Z2luKCkKIHZvaWQgUGx1Z2luVmlldzo6ZGlk
RmFpbFRvSW5pdGlhbGl6ZVBsdWdpbigpCiB7CiAgICAgbV9wbHVnaW4gPSBudWxscHRyOwotCi0j
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgU3RyaW5nIGZyYW1lVVJMU3RyaW5n
ID0gZnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9uc2VVUkwoKS5zdHJp
bmcoKTsKLSAgICBTdHJpbmcgcGFnZVVSTFN0cmluZyA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+
bWFpbkZyYW1lKCkubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9uc2VVUkwoKS5zdHJp
bmcoKTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmFp
bFRvSW5pdGlhbGl6ZVBsdWdpbihtX3BhcmFtZXRlcnMubWltZVR5cGUsIGZyYW1lVVJMU3RyaW5n
LCBwYWdlVVJMU3RyaW5nKSk7Ci0jZW5kaWYKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjpkaWRJbml0
aWFsaXplUGx1Z2luKCkKQEAgLTY2MCwxOSArNjQ0LDggQEAgSlNPYmplY3QqIFBsdWdpblZpZXc6
OnNjcmlwdE9iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIGlmICghbV9p
c0luaXRpYWxpemVkIHx8ICFtX3BsdWdpbikKICAgICAgICAgcmV0dXJuIDA7CiAKLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBOUE9iamVjdCogc2NyaXB0YWJsZU5QT2JqZWN0
ID0gbV9wbHVnaW4tPnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpOwotICAgIGlmICghc2NyaXB0
YWJsZU5QT2JqZWN0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEpTT2JqZWN0KiBqc09iamVj
dCA9IG1fbnBSdW50aW1lT2JqZWN0TWFwLmdldE9yQ3JlYXRlSlNPYmplY3QoZ2xvYmFsT2JqZWN0
LCBzY3JpcHRhYmxlTlBPYmplY3QpOwotICAgIHJlbGVhc2VOUE9iamVjdChzY3JpcHRhYmxlTlBP
YmplY3QpOwotCi0gICAgcmV0dXJuIGpzT2JqZWN0OwotI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
Z2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4gMDsKLSNlbmRpZgogfQogCiB2b2lkIFBsdWdpblZp
ZXc6OnN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZCgpCkBAIC0xMzE5LDEzICsxMjkyLDYgQEAg
dm9pZCBQbHVnaW5WaWV3OjptZWRpYUNhblN0YXJ0KFdlYkNvcmU6OkRvY3VtZW50JikKIAogdm9p
ZCBQbHVnaW5WaWV3OjpwYWdlTXV0ZWRTdGF0ZURpZENoYW5nZSgpCiB7Ci0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgLy8gVGhlIHBsdWctaW4gY2FuIGJlIG51bGwgaGVyZSBp
ZiBpdCBmYWlsZWQgdG8gaW5pdGlhbGl6ZS4KLSAgICBpZiAoIW1faXNJbml0aWFsaXplZCB8fCAh
bV9wbHVnaW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGx1Z2luLT5tdXRlZFN0YXRlQ2hh
bmdlZChpc011dGVkKCkpOwotI2VuZGlmCiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0
ZShjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCkBAIC0xMzk1LDY4ICsxMzYxLDYgQEAgdm9pZCBQ
bHVnaW5WaWV3OjpjYW5jZWxNYW51YWxTdHJlYW1Mb2FkKCkKICAgICAgICAgZG9jdW1lbnRMb2Fk
ZXItPmNhbmNlbE1haW5SZXNvdXJjZUxvYWQoZnJhbWUoKS0+bG9hZGVyKCkuY2FuY2VsbGVkRXJy
b3IobV9wYXJhbWV0ZXJzLnVybCkpOwogfQogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi1OUE9iamVjdCogUGx1Z2luVmlldzo6d2luZG93U2NyaXB0TlBPYmplY3QoKQotewotICAg
IGlmICghZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoIWZyYW1l
KCktPnNjcmlwdCgpLmNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkg
ewotICAgICAgICAvLyBGSVhNRTogSW52ZXN0aWdhdGUgaWYgb3RoZXIgYnJvd3NlcnMgYWxsb3cg
cGx1Zy1pbnMgdG8gYWNjZXNzIEphdmFTY3JpcHQgb2JqZWN0cyBldmVuIGlmIEphdmFTY3JpcHQg
aXMgZGlzYWJsZWQuCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVy
biBtX25wUnVudGltZU9iamVjdE1hcC5nZXRPckNyZWF0ZU5QT2JqZWN0KHBsdWdpbldvcmxkKCku
dm0oKSwgZnJhbWUoKS0+d2luZG93UHJveHkoKS5qc1dpbmRvd1Byb3h5KHBsdWdpbldvcmxkKCkp
LT53aW5kb3coKSk7Ci19Ci0KLU5QT2JqZWN0KiBQbHVnaW5WaWV3OjpwbHVnaW5FbGVtZW50TlBP
YmplY3QoKQotewotICAgIGlmICghZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBp
ZiAoIWZyYW1lKCktPnNjcmlwdCgpLmNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRl
U2NyaXB0KSkgewotICAgICAgICAvLyBGSVhNRTogSW52ZXN0aWdhdGUgaWYgb3RoZXIgYnJvd3Nl
cnMgYWxsb3cgcGx1Zy1pbnMgdG8gYWNjZXNzIEphdmFTY3JpcHQgb2JqZWN0cyBldmVuIGlmIEph
dmFTY3JpcHQgaXMgZGlzYWJsZWQuCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBmcmFtZSgpLT5zY3JpcHQoKS5qc09iamVjdEZvclBsdWdpbkVsZW1l
bnQobV9wbHVnaW5FbGVtZW50LmdldCgpKTsKLSAgICBBU1NFUlQob2JqZWN0KTsKLQotICAgIHJl
dHVybiBtX25wUnVudGltZU9iamVjdE1hcC5nZXRPckNyZWF0ZU5QT2JqZWN0KHBsdWdpbldvcmxk
KCkudm0oKSwgb2JqZWN0KTsKLX0KLQotYm9vbCBQbHVnaW5WaWV3OjpldmFsdWF0ZShOUE9iamVj
dCogbnBPYmplY3QsIGNvbnN0IFN0cmluZyYgc2NyaXB0U3RyaW5nLCBOUFZhcmlhbnQqIHJlc3Vs
dCwgYm9vbCBhbGxvd1BvcHVwcykKLXsKLSAgICAvLyBGSVhNRTogSXMgdGhpcyBjaGVjayBuZWNl
c3Nhcnk/Ci0gICAgaWYgKCFtX3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQ2FsbGluZyBldmFsdWF0ZSB3aWxsIHJ1biBK
YXZhU2NyaXB0IHRoYXQgY2FuIHBvdGVudGlhbGx5IHJlbW92ZSB0aGUgcGx1Zy1pbiBlbGVtZW50
LCBzbyB3ZSBuZWVkIHRvCi0gICAgLy8gcHJvdGVjdCB0aGUgcGx1Zy1pbiB2aWV3IGZyb20gZGVz
dHJ1Y3Rpb24uCi0gICAgTlBSdW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcGx1Z2lu
UHJvdGVjdG9yKCZtX25wUnVudGltZU9iamVjdE1hcCk7Ci0KLSAgICBVc2VyR2VzdHVyZUluZGlj
YXRvciBnZXN0dXJlSW5kaWNhdG9yKGFsbG93UG9wdXBzID8gc3RkOjpvcHRpb25hbDxQcm9jZXNz
aW5nVXNlckdlc3R1cmVTdGF0ZT4oUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKSA6IHN0ZDo6bnVsbG9w
dCk7Ci0gICAgcmV0dXJuIG1fbnBSdW50aW1lT2JqZWN0TWFwLmV2YWx1YXRlKG5wT2JqZWN0LCBz
Y3JpcHRTdHJpbmcsIHJlc3VsdCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0UGx1Z2luSXNQ
bGF5aW5nQXVkaW8oYm9vbCBwbHVnaW5Jc1BsYXlpbmdBdWRpbykKLXsKLSAgICBpZiAobV9wbHVn
aW5Jc1BsYXlpbmdBdWRpbyA9PSBwbHVnaW5Jc1BsYXlpbmdBdWRpbykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9wbHVnaW5Jc1BsYXlpbmdBdWRpbyA9IHBsdWdpbklzUGxheWluZ0F1ZGlvOwot
ICAgIG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKS51cGRhdGVJc1BsYXlpbmdNZWRpYSgpOwot
fQotCi1ib29sIFBsdWdpblZpZXc6OmlzTXV0ZWQoKSBjb25zdAotewotICAgIGlmICghZnJhbWUo
KSB8fCAhZnJhbWUoKS0+cGFnZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gZnJhbWUoKS0+cGFnZSgpLT5pc0F1ZGlvTXV0ZWQoKTsKLX0KLSNlbmRpZgotCiB2b2lkIFBs
dWdpblZpZXc6OnNldFN0YXR1c2JhclRleHQoY29uc3QgU3RyaW5nJiBzdGF0dXNiYXJUZXh0KQog
ewogICAgIGlmICghZnJhbWUoKSkKQEAgLTE0OTksMTIgKzE0MDMsNiBAQCB2b2lkIFBsdWdpblZp
ZXc6OnBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQoYm9vbCBwbHVnaW5IYXNGb2N1c0Fu
ZFdpbmRvd0hhcwogICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6UGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZChtX3BsdWdpbi0+cGx1Z2luQ29tcGxl
eFRleHRJbnB1dElkZW50aWZpZXIoKSwgcGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1cykp
OwogfQogCi12b2lkIFBsdWdpblZpZXc6OnNldENvbXBsZXhUZXh0SW5wdXRTdGF0ZShQbHVnaW5D
b21wbGV4VGV4dElucHV0U3RhdGUgcGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKQotewotICAg
IGlmIChtX3dlYlBhZ2UpCi0gICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpTZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUobV9wbHVnaW4tPnBsdWdpbkNv
bXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyKCksIHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkp
OwotfQotCiBjb25zdCBNYWNoU2VuZFJpZ2h0JiBQbHVnaW5WaWV3Ojpjb21wb3NpdGluZ1JlbmRl
clNlcnZlclBvcnQoKQogewogICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5jb21w
b3NpdGluZ1JlbmRlclNlcnZlclBvcnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblZpZXcuaAppbmRleCA1YWJjNDg2ZTBjNTkxMGFkZThiOGM2ZmM4ZDhmOTBh
OWY5NmViNThlLi4yMTI2ZWI4ZWRiNTU5Mzg2YjM0MjI1ZWIyYmQ1YmZjZDY4MDIzZjIzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmgKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oCkBAIC0yNiw3
ICsyNiw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIK
LSNpbmNsdWRlICJOUFJ1bnRpbWVPYmplY3RNYXAuaCIKICNpbmNsdWRlICJQbHVnaW4uaCIKICNp
bmNsdWRlICJQbHVnaW5Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKQEAgLTE5
NiwxOSArMTk1LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYW5jZWxTdHJlYW1Mb2FkKHVpbnQ2
NF90IHN0cmVhbUlEKSBvdmVycmlkZTsKICAgICB2b2lkIGNvbnRpbnVlU3RyZWFtTG9hZCh1aW50
NjRfdCBzdHJlYW1JRCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjYW5jZWxNYW51YWxTdHJlYW1Mb2Fk
KCkgb3ZlcnJpZGU7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgTlBPYmpl
Y3QqIHdpbmRvd1NjcmlwdE5QT2JqZWN0KCkgb3ZlcnJpZGU7Ci0gICAgTlBPYmplY3QqIHBsdWdp
bkVsZW1lbnROUE9iamVjdCgpIG92ZXJyaWRlOwotICAgIGJvb2wgZXZhbHVhdGUoTlBPYmplY3Qq
LCBjb25zdCBTdHJpbmcmIHNjcmlwdFN0cmluZywgTlBWYXJpYW50KiByZXN1bHQsIGJvb2wgYWxs
b3dQb3B1cHMpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0UGx1Z2luSXNQbGF5aW5nQXVkaW8oYm9v
bCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc011dGVkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0jZW5kaWYK
ICAgICB2b2lkIHNldFN0YXR1c2JhclRleHQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAg
Ym9vbCBpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBwbHVnaW5Qcm9jZXNzQ3Jhc2hlZCgpIG92ZXJyaWRlOwogI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgIHZvaWQgcGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZChib29sIHBsdWdpbkhhc0Zv
Y3VzQW5kV2luZG93SGFzRm9jdXMpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Q29tcGxleFRleHRJ
bnB1dFN0YXRlKFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkgb3ZlcnJpZGU7CiAgICAgY29u
c3QgV1RGOjpNYWNoU2VuZFJpZ2h0JiBjb21wb3NpdGluZ1JlbmRlclNlcnZlclBvcnQoKSBvdmVy
cmlkZTsKICNlbmRpZgogICAgIGZsb2F0IGNvbnRlbnRzU2NhbGVGYWN0b3IoKSBvdmVycmlkZTsK
QEAgLTI1NCwxMSArMjQ1LDYgQEAgcHJpdmF0ZToKICAgICAvLyBTdHJlYW1zIHRoYXQgdGhlIHBs
dWctaW4gaGFzIHJlcXVlc3RlZCB0byBsb2FkLiAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQ
dHI8U3RyZWFtPj4gbV9zdHJlYW1zOwogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0gICAgLy8gQSBtYXAgb2YgYWxsIHJlbGF0ZWQgTlBPYmplY3RzIGZvciB0aGlzIHBsdWctaW4g
dmlldy4KLSAgICBOUFJ1bnRpbWVPYmplY3RNYXAgbV9ucFJ1bnRpbWVPYmplY3RNYXAgeyB0aGlz
IH07Ci0jZW5kaWYKLQogICAgIC8vIFRoZSBtYW51YWwgc3RyZWFtIHN0YXRlLiBUaGlzIGlzIHVz
ZWQgc28gd2UgY2FuIGRlbGl2ZXIgYSBtYW51YWwgc3RyZWFtIHRvIGEgcGx1Zy1pbgogICAgIC8v
IHdoZW4gaXQgaXMgaW5pdGlhbGl6ZWQuCiAgICAgZW51bSBjbGFzcyBNYW51YWxTdHJlYW1TdGF0
ZSB7IEluaXRpYWwsIEhhc1JlY2VpdmVkUmVzcG9uc2UsIEZpbmlzaGVkLCBGYWlsZWQgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpbkluZm9Q
cm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5J
bmZvUHJvdmlkZXIuY3BwCmluZGV4IDcxNWIyZWE5MTJiYjc2YjM2N2I0NGMwMGIwYjEzMjM0M2Uw
OGI2NmEuLmU5MTUzNDI2Nzg0YjhhNTVmY2VjZGRkZmYzN2I5YzIxODMyYjc2OTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpbkluZm9Qcm92aWRl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luSW5m
b1Byb3ZpZGVyLmNwcApAQCAtNjcsMjMgKzY3LDExIEBAIFdlYlBsdWdpbkluZm9Qcm92aWRlcjo6
fldlYlBsdWdpbkluZm9Qcm92aWRlcigpCiAKIHZvaWQgV2ViUGx1Z2luSW5mb1Byb3ZpZGVyOjpy
ZWZyZXNoUGx1Z2lucygpCiB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAg
bV9jYWNoZWRQbHVnaW5zLmNsZWFyKCk7Ci0gICAgbV9wbHVnaW5DYWNoZUlzUG9wdWxhdGVkID0g
ZmFsc2U7Ci0gICAgbV9zaG91bGRSZWZyZXNoUGx1Z2lucyA9IHRydWU7Ci0jZW5kaWYKIH0KIAog
VmVjdG9yPFBsdWdpbkluZm8+IFdlYlBsdWdpbkluZm9Qcm92aWRlcjo6cGx1Z2luSW5mbyhQYWdl
JiBwYWdlLCBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxTdXBwb3J0ZWRQbHVnaW5JZGVudGlmaWVyPj4m
IHN1cHBvcnRlZFBsdWdpbklkZW50aWZpZXJzKQogewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotICAgIHBvcHVsYXRlUGx1Z2luQ2FjaGUocGFnZSk7Ci0KLSAgICBpZiAobV9jYWNo
ZWRTdXBwb3J0ZWRQbHVnaW5JZGVudGlmaWVycykKLSAgICAgICAgc3VwcG9ydGVkUGx1Z2luSWRl
bnRpZmllcnMgPSAqbV9jYWNoZWRTdXBwb3J0ZWRQbHVnaW5JZGVudGlmaWVyczsKLQotICAgIHJl
dHVybiBwYWdlLm1haW5GcmFtZSgpLmFyZVBsdWdpbnNFbmFibGVkKCkgPyBtX2NhY2hlZFBsdWdp
bnMgOiBtX2NhY2hlZEFwcGxpY2F0aW9uUGx1Z2luczsKLSNlbGlmIEVOQUJMRShQREZLSVRfUExV
R0lOKQorI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQogICAgIFVOVVNFRF9QQVJBTShwYWdlKTsK
ICAgICBVTlVTRURfUEFSQU0oc3VwcG9ydGVkUGx1Z2luSWRlbnRpZmllcnMpOwogICAgIHJldHVy
biB7IFBERlBsdWdpbjo6cGx1Z2luSW5mbygpIH07CkBAIC05MSw3ICs3OSw3IEBAIFZlY3RvcjxQ
bHVnaW5JbmZvPiBXZWJQbHVnaW5JbmZvUHJvdmlkZXI6OnBsdWdpbkluZm8oUGFnZSYgcGFnZSwg
c3RkOjpvcHRpb25hbDxWCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwogICAgIFVOVVNFRF9QQVJB
TShzdXBwb3J0ZWRQbHVnaW5JZGVudGlmaWVycyk7CiAgICAgcmV0dXJuIHsgfTsKLSNlbmRpZiAv
LyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyNlbmRpZiAvLyBFTkFCTEUoUERGS0lUX1BM
VUdJTikKIH0KIAogVmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+IFdlYlBsdWdpbkluZm9Qcm92
aWRlcjo6d2ViVmlzaWJsZVBsdWdpbkluZm8oUGFnZSYgcGFnZSwgY29uc3QgVVJMJiB1cmwpCkBA
IC0xMjEsMjcgKzEwOSw0IEBAIFZlY3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZvPiBXZWJQbHVnaW5J
bmZvUHJvdmlkZXI6OndlYlZpc2libGVQbHVnaW5JbmZvKFBhZ2UmIHBhCiAgICAgcmV0dXJuIHBs
dWdpbnM7CiB9CiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLXZvaWQgV2ViUGx1
Z2luSW5mb1Byb3ZpZGVyOjpwb3B1bGF0ZVBsdWdpbkNhY2hlKGNvbnN0IFdlYkNvcmU6OlBhZ2Um
KQotewotICAgIGlmICghbV9wbHVnaW5DYWNoZUlzUG9wdWxhdGVkKSB7Ci0jaWYgUExBVEZPUk0o
Q09DT0EpCi0gICAgICAgIC8vIEFwcGxpY2F0aW9uIHBsdWdpbnMgYXJlIG5vdCBhZmZlY3RlZCBi
eSBlbmFibGVQbHVnaW5zIHNldHRpbmcsIHNvIHdlIGFsd2F5cyBuZWVkIHRvIHNjYW4gcGx1Z2lu
cyB0byBnZXQgdGhlbS4KLSAgICAgICAgYm9vbCBzaG91bGRTY2FuUGx1Z2lucyA9IHRydWU7Ci0j
ZWxzZQotICAgICAgICBib29sIHNob3VsZFNjYW5QbHVnaW5zID0gcGFnZS5tYWluRnJhbWUoKS5h
cmVQbHVnaW5zRW5hYmxlZCgpOwotI2VuZGlmCi0gICAgICAgIGlmIChzaG91bGRTY2FuUGx1Z2lu
cykgewotICAgICAgICAgICAgSGFuZ0RldGVjdGlvbkRpc2FibGVyIGhhbmdEZXRlY3Rpb25EaXNh
YmxlcjsKLSAgICAgICAgICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0
UGx1Z2lucyhtX3Nob3VsZFJlZnJlc2hQbHVnaW5zKSwKLSAgICAgICAgICAgICAgICBNZXNzYWdl
czo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRQbHVnaW5zOjpSZXBseShtX2NhY2hlZFBsdWdpbnMsIG1f
Y2FjaGVkQXBwbGljYXRpb25QbHVnaW5zLCBtX2NhY2hlZFN1cHBvcnRlZFBsdWdpbklkZW50aWZp
ZXJzKSwgMCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
bV9zaG91bGRSZWZyZXNoUGx1Z2lucyA9IGZhbHNlOwotICAgICAgICBtX3BsdWdpbkNhY2hlSXNQ
b3B1bGF0ZWQgPSB0cnVlOwotICAgIH0KLX0KLSNlbmRpZgotCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5JbmZvUHJvdmlkZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpbkluZm9Qcm92aWRlci5oCmlu
ZGV4IDk3MDY2NmVhYzAwZGEwODhhZGJkZGQyZGEwZDBiYzNlZDkyZWRlNjguLjIwYmI4N2ZmNTA2
YTlhNDM2YWVkNTUwZTlkZThhNjRkODFiOWUzOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpbkluZm9Qcm92aWRlci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpbkluZm9Qcm92aWRlci5oCkBAIC00Mywx
OCArNDMsNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZvPiBwbHVn
aW5JbmZvKFdlYkNvcmU6OlBhZ2UmLCBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpTdXBw
b3J0ZWRQbHVnaW5JZGVudGlmaWVyPj4mKSBmaW5hbDsKICAgICBWZWN0b3I8V2ViQ29yZTo6UGx1
Z2luSW5mbz4gd2ViVmlzaWJsZVBsdWdpbkluZm8oV2ViQ29yZTo6UGFnZSYsIGNvbnN0IFVSTCYp
IGZpbmFsOwogICAgIHZvaWQgcmVmcmVzaFBsdWdpbnMoKSBvdmVycmlkZTsKLQotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHZvaWQgcG9wdWxhdGVQbHVnaW5DYWNoZShjb25z
dCBXZWJDb3JlOjpQYWdlJik7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQotICAgIGJvb2wgbV9wbHVnaW5DYWNoZUlzUG9wdWxhdGVkIHsgZmFsc2UgfTsKLSAgICBi
b29sIG1fc2hvdWxkUmVmcmVzaFBsdWdpbnMgeyBmYWxzZSB9OwotICAgIFZlY3RvcjxXZWJDb3Jl
OjpQbHVnaW5JbmZvPiBtX2NhY2hlZFBsdWdpbnM7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OlBsdWdp
bkluZm8+IG1fY2FjaGVkQXBwbGljYXRpb25QbHVnaW5zOwotICAgIHN0ZDo6b3B0aW9uYWw8VmVj
dG9yPFdlYkNvcmU6OlN1cHBvcnRlZFBsdWdpbklkZW50aWZpZXI+PiBtX2NhY2hlZFN1cHBvcnRl
ZFBsdWdpbklkZW50aWZpZXJzOwotI2VuZGlmCiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
CmluZGV4IGUzNzk2YmFiNjRiYTRlZTIwNTY2MjIzZDc5ODNkY2E0ZmYwOTU4ZDYuLjBjOGRhNjY1
NzcwYmQ0NzNhZWFhYmFiM2YxNmFmNjAxNjBiMjc1MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
CkBAIC02OTMsMjMgKzY5Myw4IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpzaG91bGRVbmF2YWls
YWJsZVBsdWdpbk1lc3NhZ2VCZUJ1dHRvbihSZW5kZXJFbWJlZGRlZE9iamVjCiAgICAgCiB2b2lk
IFdlYkNocm9tZUNsaWVudDo6dW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkKEVsZW1lbnQm
IGVsZW1lbnQsIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNv
biBwbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbikgY29uc3QKIHsKLSNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLSAgICBBU1NFUlQoZWxlbWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykg
fHwgZWxlbWVudC5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoYXBw
bGV0VGFnKSk7Ci0gICAgQVNTRVJUKHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uID09IFJlbmRl
ckVtYmVkZGVkT2JqZWN0OjpQbHVnaW5NaXNzaW5nIHx8IHBsdWdpblVuYXZhaWxhYmlsaXR5UmVh
c29uID09IFJlbmRlckVtYmVkZGVkT2JqZWN0OjpJbnNlY3VyZVBsdWdpblZlcnNpb24gfHwgcGx1
Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pOwotCi0gICAgYXV0byYgcGx1Z2luRWxlbWVudCA9IGRv
d25jYXN0PEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ+KGVsZW1lbnQpOwotCi0gICAgU3RyaW5nIGZy
YW1lVVJMU3RyaW5nID0gcGx1Z2luRWxlbWVudC5kb2N1bWVudCgpLmZyYW1lKCktPmxvYWRlcigp
LmRvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNlVVJMKCkuc3RyaW5nKCk7Ci0gICAgU3RyaW5nIHBh
Z2VVUkxTdHJpbmcgPSBtX3BhZ2UubWFpbkZyYW1lKCktPmxvYWRlcigpLmRvY3VtZW50TG9hZGVy
KCktPnJlc3BvbnNlVVJMKCkuc3RyaW5nKCk7Ci0gICAgU3RyaW5nIHBsdWdpblVSTFN0cmluZyA9
IHBsdWdpbkVsZW1lbnQuZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChwbHVnaW5FbGVtZW50LnVybCgp
KS5zdHJpbmcoKTsKLSAgICBVUkwgcGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkwgPSBwbHVnaW5FbGVt
ZW50LmRvY3VtZW50KCkuY29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3Bh
Y2VzKHBsdWdpbkVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihwbHVnaW5z
cGFnZUF0dHIpKSk7Ci0gICAgaWYgKCFwbHVnaW5zcGFnZUF0dHJpYnV0ZVVSTC5wcm90b2NvbElz
SW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIHBsdWdpbnNwYWdlQXR0cmlidXRlVVJMID0gVVJMKCk7
Ci0gICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6VW5hdmFpbGFibGVQbHVn
aW5CdXR0b25DbGlja2VkKHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uLCBwbHVnaW5FbGVtZW50
LnNlcnZpY2VUeXBlKCksIHBsdWdpblVSTFN0cmluZywgcGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkwu
c3RyaW5nKCksIGZyYW1lVVJMU3RyaW5nLCBwYWdlVVJMU3RyaW5nKSk7Ci0jZWxzZQogICAgIFVO
VVNFRF9QQVJBTShlbGVtZW50KTsKICAgICBVTlVTRURfUEFSQU0ocGx1Z2luVW5hdmFpbGFiaWxp
dHlSZWFzb24pOwotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogfQogCiB2
b2lkIFdlYkNocm9tZUNsaWVudDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVz
dFJlc3VsdCYgaGl0VGVzdFJlc3VsdCwgdW5zaWduZWQgbW9kaWZpZXJGbGFncywgY29uc3QgU3Ry
aW5nJiB0b29sVGlwLCBUZXh0RGlyZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVz
LmNwcAppbmRleCA2ZWMxODkxYzI1ZTZlOGQ5ZWU2MjIzYmY2OGViOTE4MjJjMTEwOWVjLi5hMmJl
ZTZjZDgyYzZmMzY5MTI5MDM1YTFjYWNlZDRlMTg0YWY4OWNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZv
cm1TdHJhdGVnaWVzLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIk5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24uaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oIgot
I2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlckNvcHku
aCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJFcnJv
cnMuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5k
ZXggNDdkYTFmODU0MzcwMWU2MTJhZmUzYWY4MWEwYzYyN2FjNDBhYTlkOS4uMDg5MmVkNTUyYzkw
YzE3MjQ2ZTJkNjFmZDAyMDZiOTA4YWVjNmQ0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTQ5LDEzICs0OSwxMCBAQAogI2luY2x1ZGUgIk1l
ZGlhS2V5U3lzdGVtUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiTWVkaWFQ
bGF5YmFja1N0YXRlLmgiCiAjaW5jbHVkZSAiTWVkaWFSZWNvcmRlclByb3ZpZGVyLmgiCi0jaW5j
bHVkZSAiTmV0c2NhcGVQbHVnaW4uaCIKICNpbmNsdWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgi
CiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmgiCiAjaW5j
bHVkZSAiUGFnZUJhbm5lci5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLmgi
Ci0jaW5jbHVkZSAiUGx1Z2luUHJveHkuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCiAjaW5j
bHVkZSAiUHJpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LmgiCkBAIC0xMTU3LDUzICsxMTU0LDExIEBAIHZvaWQgV2ViUGFnZTo6aW5pdGlhbGl6ZUluamVj
dGVkQnVuZGxlRnVsbFNjcmVlbkNsaWVudChXS0J1bmRsZVBhZ2VGdWxsU2NyZWVuQ2xpCiAjaWYg
RU5BQkxFKFBERktJVF9QTFVHSU4pCiBSZWZQdHI8UGx1Z2luPiBXZWJQYWdlOjpjcmVhdGVQbHVn
aW4oV2ViRnJhbWUqIGZyYW1lLCBIVE1MUGx1Z0luRWxlbWVudCogcGx1Z2luRWxlbWVudCwgY29u
c3QgUGx1Z2luOjpQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBTdHJpbmcmIG5ld01JTUVUeXBlKQog
ewotICAgIFN0cmluZyBmcmFtZVVSTFN0cmluZyA9IGZyYW1lLT5jb3JlRnJhbWUoKS0+bG9hZGVy
KCkuZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9uc2VVUkwoKS5zdHJpbmcoKTsKLSAgICBTdHJpbmcg
cGFnZVVSTFN0cmluZyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuZG9jdW1lbnRMb2Fk
ZXIoKS0+cmVzcG9uc2VVUkwoKS5zdHJpbmcoKTsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotICAgIGJvb2wgYWxsb3dPbmx5QXBwbGljYXRpb25QbHVnaW5zID0gIWZyYW1lLT5j
b3JlRnJhbWUoKS0+YXJlUGx1Z2luc0VuYWJsZWQoKTsKLSNlbmRpZgotCi0gICAgdWludDY0X3Qg
cGx1Z2luUHJvY2Vzc1Rva2VuIHsgMCB9OwotICAgIHVpbnQzMl90IHBsdWdpbkxvYWRQb2xpY3kg
eyAwIH07Ci0gICAgU3RyaW5nIHVuYXZhaWxhYmlsaXR5RGVzY3JpcHRpb247Ci0gICAgYm9vbCBp
c1Vuc3VwcG9ydGVkIHsgZmFsc2UgfTsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
LSAgICBpZiAoIXNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkZpbmRQbHVnaW4ocGFy
YW1ldGVycy5taW1lVHlwZSwgcGFyYW1ldGVycy51cmwuc3RyaW5nKCksIGZyYW1lVVJMU3RyaW5n
LCBwYWdlVVJMU3RyaW5nLCBhbGxvd09ubHlBcHBsaWNhdGlvblBsdWdpbnMpLCBNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpGaW5kUGx1Z2luOjpSZXBseShwbHVnaW5Qcm9jZXNzVG9rZW4sIG5ld01J
TUVUeXBlLCBwbHVnaW5Mb2FkUG9saWN5LCB1bmF2YWlsYWJpbGl0eURlc2NyaXB0aW9uLCBpc1Vu
c3VwcG9ydGVkKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotI2VuZGlmCi0KLSAgICBQbHVn
aW5Nb2R1bGVMb2FkUG9saWN5IGxvYWRQb2xpY3kgPSBzdGF0aWNfY2FzdDxQbHVnaW5Nb2R1bGVM
b2FkUG9saWN5PihwbHVnaW5Mb2FkUG9saWN5KTsKLSAgICBib29sIGlzQmxvY2tlZFBsdWdpbiA9
IChsb2FkUG9saWN5ID09IFBsdWdpbk1vZHVsZUJsb2NrZWRGb3JTZWN1cml0eSkgfHwgKGxvYWRQ
b2xpY3kgPT0gUGx1Z2luTW9kdWxlQmxvY2tlZEZvckNvbXBhdGliaWxpdHkpOwotCi0gICAgaWYg
KGlzVW5zdXBwb3J0ZWQgfHwgaXNCbG9ja2VkUGx1Z2luIHx8ICFwbHVnaW5Qcm9jZXNzVG9rZW4p
IHsKLSNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKLSAgICAgICAgaWYgKHNob3VsZFVzZVBERlBs
dWdpbihwYXJhbWV0ZXJzLm1pbWVUeXBlLCBwYXJhbWV0ZXJzLnVybC5wYXRoKCkpKQotICAgICAg
ICAgICAgcmV0dXJuIFBERlBsdWdpbjo6Y3JlYXRlKCpmcmFtZSwgcGx1Z2luRWxlbWVudCk7Ci0j
ZW5kaWYKLSAgICB9Ci0KLSAgICBpZiAoaXNVbnN1cHBvcnRlZCkgewotICAgICAgICBwbHVnaW5F
bGVtZW50LT5zZXRSZXBsYWNlbWVudChSZW5kZXJFbWJlZGRlZE9iamVjdDo6VW5zdXBwb3J0ZWRQ
bHVnaW4sIHVuYXZhaWxhYmlsaXR5RGVzY3JpcHRpb24pOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBpZiAoaXNC
bG9ja2VkUGx1Z2luKSB7Ci0gICAgICAgIGJvb2wgaXNSZXBsYWNlbWVudE9ic2N1cmVkID0gcGx1
Z2luRWxlbWVudC0+c2V0UmVwbGFjZW1lbnQoUmVuZGVyRW1iZWRkZWRPYmplY3Q6Okluc2VjdXJl
UGx1Z2luVmVyc2lvbiwgdW5hdmFpbGFiaWxpdHlEZXNjcmlwdGlvbik7Ci0gICAgICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkQmxvY2tJbnNlY3VyZVBsdWdpblZlcnNpb24ocGFy
YW1ldGVycy5taW1lVHlwZSwgcGFyYW1ldGVycy51cmwuc3RyaW5nKCksIGZyYW1lVVJMU3RyaW5n
LCBwYWdlVVJMU3RyaW5nLCBpc1JlcGxhY2VtZW50T2JzY3VyZWQpKTsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKCFwbHVnaW5Qcm9jZXNzVG9rZW4pCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIFBsdWdpblByb3h5OjpjcmVhdGUocGx1Z2lu
UHJvY2Vzc1Rva2VuKTsKLSNlbHNlCisgICAgaWYgKHNob3VsZFVzZVBERlBsdWdpbihwYXJhbWV0
ZXJzLm1pbWVUeXBlLCBwYXJhbWV0ZXJzLnVybC5wYXRoKCkpKQorICAgICAgICByZXR1cm4gUERG
UGx1Z2luOjpjcmVhdGUoKmZyYW1lLCBwbHVnaW5FbGVtZW50KTsKICAgICByZXR1cm4gbnVsbHB0
cjsKLSNlbmRpZgogfQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorI2Vu
ZGlmIC8vIEVOQUJMRShQREZLSVRfUExVR0lOKQogCiAjaWYgRU5BQkxFKFdFQkdMKSAmJiAhUExB
VEZPUk0oTUFDKQogV2ViQ29yZTo6V2ViR0xMb2FkUG9saWN5IFdlYlBhZ2U6OndlYkdMUG9saWN5
Rm9yVVJMKFdlYkZyYW1lKiwgY29uc3QgVVJMJikKQEAgLTU3ODcsMjQgKzU3NDIsOCBAQCBGcmFt
ZVZpZXcqIFdlYlBhZ2U6Om1haW5GcmFtZVZpZXcoKSBjb25zdAogCiBib29sIFdlYlBhZ2U6OmNh
blBsdWdpbkhhbmRsZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQog
ewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHVpbnQzMl90IHBsdWdpbkxv
YWRQb2xpY3k7Ci0gICAgYm9vbCBhbGxvd09ubHlBcHBsaWNhdGlvblBsdWdpbnMgPSAhbV9tYWlu
RnJhbWUtPmNvcmVGcmFtZSgpLT5hcmVQbHVnaW5zRW5hYmxlZCgpOwotCi0gICAgdWludDY0X3Qg
cGx1Z2luUHJvY2Vzc1Rva2VuOwotICAgIFN0cmluZyBuZXdNSU1FVHlwZTsKLSAgICBTdHJpbmcg
dW5hdmFpbGFiaWxpdHlEZXNjcmlwdGlvbjsKLSAgICBib29sIGlzVW5zdXBwb3J0ZWQgPSBmYWxz
ZTsKLSAgICBpZiAoIXNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkZpbmRQbHVnaW4o
cmVzcG9uc2UubWltZVR5cGUoKSwgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCksIHJlc3BvbnNlLnVy
bCgpLnN0cmluZygpLCByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgYWxsb3dPbmx5QXBwbGljYXRp
b25QbHVnaW5zKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RmluZFBsdWdpbjo6UmVwbHkocGx1
Z2luUHJvY2Vzc1Rva2VuLCBuZXdNSU1FVHlwZSwgcGx1Z2luTG9hZFBvbGljeSwgdW5hdmFpbGFi
aWxpdHlEZXNjcmlwdGlvbiwgaXNVbnN1cHBvcnRlZCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBBU1NFUlQoIWlzVW5zdXBwb3J0ZWQpOwotICAgIGJvb2wgaXNCbG9ja2VkUGx1Z2lu
ID0gKHBsdWdpbkxvYWRQb2xpY3kgPT0gUGx1Z2luTW9kdWxlQmxvY2tlZEZvclNlY3VyaXR5KSB8
fCAocGx1Z2luTG9hZFBvbGljeSA9PSBQbHVnaW5Nb2R1bGVCbG9ja2VkRm9yQ29tcGF0aWJpbGl0
eSk7Ci0gICAgcmV0dXJuICFpc1Vuc3VwcG9ydGVkICYmICFpc0Jsb2NrZWRQbHVnaW4gJiYgcGx1
Z2luUHJvY2Vzc1Rva2VuOwotI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocmVzcG9uc2UpOwogICAg
IHJldHVybiBmYWxzZTsKLSNlbmRpZgogfQogCiBib29sIFdlYlBhZ2U6OnNob3VsZFVzZUN1c3Rv
bUNvbnRlbnRQcm92aWRlckZvclJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IGI0ODAyZWNi
OTM3MDIzZTBlMzNhMjQzNWU4YWFmMGZjMTI1YjA1OTguLmQ4NjI5ZTg3MjkxNGYwNzgxYzZjNDEy
YzcyNTQ5YTI4YmJhZTcwZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHAKQEAgLTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25J
bmZvLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKICNpbmNsdWRlICJOZXR3b3JrU2Vz
c2lvbkNyZWF0aW9uUGFyYW1ldGVycy5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NDb25uZWN0
aW9uTWFuYWdlci5oIgogI2luY2x1ZGUgIlByb2Nlc3NBc3NlcnRpb24uaCIKICNpbmNsdWRlICJS
ZW1vdGVBdWRpb0hhcmR3YXJlTGlzdGVuZXIuaCIKICNpbmNsdWRlICJSZW1vdGVBdWRpb1Nlc3Np
b24uaCIKQEAgLTI4Miw5ICsyODEsNiBAQCBXZWJQcm9jZXNzOjpXZWJQcm9jZXNzKCkKICAgICAs
IG1fY29va2llSmFyKFdlYkNvb2tpZUphcjo6Y3JlYXRlKCkpCiAgICAgLCBtX3JlcG9ydGluZ0Vu
ZHBvaW50c0NhY2hlKFJlcG9ydGluZ0VuZHBvaW50c0NhY2hlOjpjcmVhdGUoKSkKICAgICAsIG1f
ZG5zUHJlZmV0Y2hIeXN0ZXJlcmlzKFt0aGlzXShQQUw6Okh5c3RlcmVzaXNTdGF0ZSBzdGF0ZSkg
eyBpZiAoc3RhdGUgPT0gUEFMOjpIeXN0ZXJlc2lzU3RhdGU6OlN0b3BwZWQpIG1fZG5zUHJlZmV0
Y2hlZEhvc3RzLmNsZWFyKCk7IH0pCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0g
ICAgLCBtX3BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcihQbHVnaW5Qcm9jZXNzQ29ubmVj
dGlvbk1hbmFnZXI6OmNyZWF0ZSgpKQotI2VuZGlmCiAgICAgLCBtX25vblZpc2libGVQcm9jZXNz
R3JhcGhpY3NDbGVhbnVwVGltZXIoKnRoaXMsICZXZWJQcm9jZXNzOjpub25WaXNpYmxlUHJvY2Vz
c0dyYXBoaWNzQ2xlYW51cFRpbWVyRmlyZWQpCiAjaWYgRU5BQkxFKE5PTl9WSVNJQkxFX1dFQlBS
T0NFU1NfTUVNT1JZX0NMRUFOVVBfVElNRVIpCiAgICAgLCBtX25vblZpc2libGVQcm9jZXNzTWVt
b3J5Q2xlYW51cFRpbWVyKCp0aGlzLCAmV2ViUHJvY2Vzczo6bm9uVmlzaWJsZVByb2Nlc3NNZW1v
cnlDbGVhbnVwVGltZXJGaXJlZCkKQEAgLTM3NCwxMCArMzcwLDYgQEAgdm9pZCBXZWJQcm9jZXNz
Ojppbml0aWFsaXplQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCiAKICAg
ICBtX3dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXItPmluaXRpYWxpemVDb25uZWN0aW9u
KGNvbm5lY3Rpb24pOwogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgbV9w
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXItPmluaXRpYWxpemVDb25uZWN0aW9uKGNvbm5l
Y3Rpb24pOwotI2VuZGlmCi0KICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1l
bnRzLnZhbHVlcygpKQogICAgICAgICBzdXBwbGVtZW50LT5pbml0aWFsaXplQ29ubmVjdGlvbihj
b25uZWN0aW9uKTsKIApAQCAtNzUxLDEzICs3NDMsNiBAQCB2b2lkIFdlYlByb2Nlc3M6OmZ1bGxL
ZXlib2FyZEFjY2Vzc01vZGVDaGFuZ2VkKGJvb2wgZnVsbEtleWJvYXJkQWNjZXNzRW5hYmxlZCkK
ICAgICBtX2Z1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZWQgPSBmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFi
bGVkOwogfQogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi1QbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbk1hbmFnZXImIFdlYlByb2Nlc3M6OnBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFu
YWdlcigpCi17Ci0gICAgcmV0dXJuICptX3BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcjsK
LX0KLSNlbmRpZgotCiB2b2lkIFdlYlByb2Nlc3M6OnNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBj
YWNoZU1vZGVsKQogewogICAgIGlmIChtX2hhc1NldENhY2hlTW9kZWwgJiYgKGNhY2hlTW9kZWwg
PT0gbV9jYWNoZU1vZGVsKSkKQEAgLTk5MCw5ICs5NzUsNiBAQCB2b2lkIFdlYlByb2Nlc3M6Omlz
SklURW5hYmxlZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogCiB2b2lkIFdlYlByb2Nlc3M6OnJlZnJlc2hQbHVnaW5zKCkKIHsKLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBXZWJQbHVnaW5JbmZvUHJvdmlkZXI6OnNpbmdsZXRv
bigpLnJlZnJlc2goZmFsc2UpOwotI2VuZGlmCiB9CiAKIHZvaWQgV2ViUHJvY2Vzczo6Z2FyYmFn
ZUNvbGxlY3RKYXZhU2NyaXB0T2JqZWN0cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nl
c3MuaAppbmRleCAxZTg0ZThkZmYzMzljZGVhMjMyMDI0MWNiYTY1NmEzYTZmMmM3OGNlLi4yMzUz
NDI1MjZlZjdhNzYxMGNiMjcyMzIwYjRkNjM4NjRkZWUwNjU3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmgKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJBdXhpbGlhcnlQ
cm9jZXNzLmgiCiAjaW5jbHVkZSAiQ2FjaGVNb2RlbC5oIgogI2luY2x1ZGUgIklkZW50aWZpZXJU
eXBlcy5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5oIgogI2lu
Y2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYUlkZW50aWZp
ZXIuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCkBAIC0yMzksMTAgKzIzOCw2IEBA
IHB1YmxpYzoKICAgICAKICAgICBjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiB0ZXh0Q2hlY2tlclN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Q2hlY2tlclN0YXRlOyB9CiAgICAgdm9pZCBzZXRU
ZXh0Q2hlY2tlclN0YXRlKGNvbnN0IFRleHRDaGVja2VyU3RhdGUmKTsKLSAgICAKLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFn
ZXImIHBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcigpOwotI2VuZGlmCiAKICAgICBFdmVu
dERpc3BhdGNoZXImIGV2ZW50RGlzcGF0Y2hlcigpIHsgcmV0dXJuIG1fZXZlbnREaXNwYXRjaGVy
LmdldCgpOyB9CiAKQEAgLTY5MCwxMCArNjg1LDYgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5PiBtX2F1dG9tYXRpb25TZXNzaW9uUHJv
eHk7CiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBSZWZQdHI8UGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyPiBtX3BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdl
cjsKLSNlbmRpZgotCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCiAgICAgYm9vbCBtX2hh
c0ltYWdlU2VydmljZXMgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9oYXNTZWxlY3Rpb25TZXJ2aWNl
cyB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1BsYXRmb3JtTWFj
LmNtYWtlIGIvU291cmNlL1dlYktpdExlZ2FjeS9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCBiNTNl
NjIyZGM2ZjMzN2NjNzQzODZmNjY2YWNjZTM3Mjc0ZGZmZmIwLi4zMDBiMDBiNDUxNGQzNTY5MjEx
M2U3ZjIyMTZhYmYxMDFmNjJmNGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1Bs
YXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvUGxhdGZvcm1NYWMuY21h
a2UKQEAgLTc1LDI5ICs3NSw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9TT1VSQ0VTCiAg
ICAgbWFjL1BhbmVscy9XZWJBdXRoZW50aWNhdGlvblBhbmVsLm0KICAgICBtYWMvUGFuZWxzL1dl
YlBhbmVsQXV0aGVudGljYXRpb25IYW5kbGVyLm0KIAotICAgIG1hYy9QbHVnaW5zL1dlYkJhc2VO
ZXRzY2FwZVBsdWdpblZpZXcubW0KLSAgICBtYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpbkV2
ZW50SGFuZGxlci5tbQotICAgIG1hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5k
bGVyQ29jb2EubW0KLSAgICBtYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UubW0K
LSAgICBtYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQotICAgIG1hYy9QbHVn
aW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQogICAgIG1hYy9QbHVnaW5zL1dlYlBsdWdpblBh
Y2thZ2UubW0KLSAgICBtYWMvUGx1Z2lucy9XZWJQbHVnaW5SZXF1ZXN0Lm0KLSAgICBtYWMvUGx1
Z2lucy9ucGFwaS5tbQotCi0gICAgbWFjL1BsdWdpbnMvSG9zdGVkL0hvc3RlZE5ldHNjYXBlUGx1
Z2luU3RyZWFtLm1tCi0gICAgbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1h
bmFnZXIubW0KLSAgICBtYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHku
bW0KLSAgICBtYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1t
Ci0gICAgbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0KLSAgICBtYWMvUGx1Z2lu
cy9Ib3N0ZWQvUHJveHlSdW50aW1lT2JqZWN0Lm1tCi0gICAgbWFjL1BsdWdpbnMvSG9zdGVkL1dl
Ykhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbQotICAgIG1hYy9QbHVnaW5zL0hvc3RlZC9XZWJL
aXRQbHVnaW5BZ2VudC5kZWZzCi0gICAgbWFjL1BsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkFn
ZW50UmVwbHkuZGVmcwotICAgIG1hYy9QbHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5DbGllbnQu
ZGVmcwotICAgIG1hYy9QbHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5Ib3N0LmRlZnMKLSAgICBt
YWMvUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luSG9zdFR5cGVzLmRlZnMKLSAgICBtYWMvUGx1
Z2lucy9Ib3N0ZWQvV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlci5tCiAKICAgICBtYWMvU3Rv
cmFnZS9XZWJEYXRhYmFzZU1hbmFnZXIubW0KICAgICBtYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1h
bmFnZXJDbGllbnQubW0KQEAgLTQ0NSwzMSArNDIzLDE1IEBAIHNldChXZWJLaXRMZWdhY3lfTEVH
QUNZX0ZPUldBUkRJTkdfSEVBREVSU19GSUxFUwogCiAgICAgbWFjL1BsdWdpbnMvV2ViUGx1Z2lu
Vmlld0ZhY3RvcnlQcml2YXRlLmgKICAgICBtYWMvUGx1Z2lucy9XZWJCYXNlUGx1Z2luUGFja2Fn
ZS5oCi0gICAgbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3LmgKLSAgICBtYWMvUGx1
Z2lucy9XZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hLmgKLSAgICBtYWMvUGx1Z2lu
cy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5oCi0gICAgbWFjL1BsdWdpbnMvV2ViQmFzZU5ldHNj
YXBlUGx1Z2luVmlldy5oCiAgICAgbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5oCi0g
ICAgbWFjL1BsdWdpbnMvSG9zdGVkL1dlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaAotICAg
IG1hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5oCi0gICAgbWFjL1Bs
dWdpbnMvSG9zdGVkL1Byb3h5UnVudGltZU9iamVjdC5oCi0gICAgbWFjL1BsdWdpbnMvSG9zdGVk
L1Byb3h5SW5zdGFuY2UuaAotICAgIG1hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhv
c3RNYW5hZ2VyLmgKLSAgICBtYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luSG9zdFR5cGVz
LmgKLSAgICBtYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3LmgK
LSAgICBtYWMvUGx1Z2lucy9Ib3N0ZWQvSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0uaAotICAg
IG1hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkuaAogICAgIG1h
Yy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRhaW5lckNoZWNrLmgKICAgICBtYWMvUGx1Z2lucy9XZWJQ
bHVnaW5Db250YWluZXIuaAogICAgIG1hYy9QbHVnaW5zL1dlYlBsdWdpblBhY2thZ2VQcml2YXRl
LmgKICAgICBtYWMvUGx1Z2lucy9XZWJQbHVnaW5QYWNrYWdlLmgKLSAgICBtYWMvUGx1Z2lucy9X
ZWJQbHVnaW5SZXF1ZXN0LmgKLSAgICBtYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpbkV2ZW50
SGFuZGxlci5oCiAgICAgbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udGFpbmVyUHJpdmF0ZS5oCiAg
ICAgbWFjL1BsdWdpbnMvV2ViSmF2YVBsdWdJbi5oCiAgICAgbWFjL1BsdWdpbnMvV2ViUGx1Z2lu
Vmlld0ZhY3RvcnkuaAogICAgIG1hYy9QbHVnaW5zL1dlYlBsdWdpbkRhdGFiYXNlLmgKLSAgICBt
YWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UuaAogICAgIG1hYy9QbHVnaW5zL1dl
YlBsdWdpbi5oCiAKICAgICBtYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXJQcml2YXRlLmgK
QEAgLTYyMSw3ICs1ODMsNiBAQCBzZXQoQzk5X0ZJTEVTCiAgICAgbWFjL01pc2MvV2ViTlNWaWV3
RXh0cmFzLm0KICAgICBtYWMvTWlzYy9XZWJOU1dpbmRvd0V4dHJhcy5tCiAKLSAgICBtYWMvUGx1
Z2lucy9XZWJQbHVnaW5SZXF1ZXN0Lm0KICAgICBtYWMvUGx1Z2lucy9XZWJQbHVnaW5zUHJpdmF0
ZS5tCiAKICAgICBtYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxl
ci5tCkBAIC02NTMsNDYgKzYxNCw2IEBAIGZvcmVhY2ggKF9maWxlICR7V2ViS2l0TGVnYWN5X0xF
R0FDWV9GT1JXQVJESU5HX0hFQURFUlNfRklMRVN9KQogICAgIGVuZGlmICgpCiBlbmRmb3JlYWNo
ICgpCiAKLWlmIChOT1QgRVhJU1RTICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9
L1dlYktpdExlZ2FjeS9XZWJLaXRQbHVnaW5Ib3N0VHlwZXMuaCkKLSAgICBmaWxlKENPUFkKLSAg
ICAgICAgbWFjL1BsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkFnZW50LmRlZnMKLSAgICAgICAg
bWFjL1BsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkFnZW50UmVwbHkuZGVmcwotICAgICAgICBt
YWMvUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luQ2xpZW50LmRlZnMKLSAgICAgICAgbWFjL1Bs
dWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkhvc3QuZGVmcwotICAgICAgICBERVNUSU5BVElPTiAk
e1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfSkKLSAgICBmaWxlKE1BS0VfRElSRUNU
T1JZICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L1dlYktpdExlZ2FjeSkKLSAg
ICBmaWxlKENPUFkKLSAgICAgICAgbWFjL1BsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkhvc3RU
eXBlcy5kZWZzCi0gICAgICAgIG1hYy9QbHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5Ib3N0VHlw
ZXMuaAotICAgICAgICBERVNUSU5BVElPTiAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNf
RElSfS9XZWJLaXRMZWdhY3kpCi1lbmRpZiAoKQotCi1hZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAg
T1VUUFVUCi0gICAgICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L1dlYktp
dFBsdWdpbkFnZW50UmVwbHlTZXJ2ZXIuYwotICAgICAgICAke1dlYktpdExlZ2FjeV9ERVJJVkVE
X1NPVVJDRVNfRElSfS9XZWJLaXRQbHVnaW5BZ2VudFJlcGx5VXNlci5jCi0gICAgICAgICR7V2Vi
S2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L1dlYktpdFBsdWdpbkFnZW50U2VydmVyLmMK
LSAgICAgICAgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV2ViS2l0UGx1Z2lu
QWdlbnRVc2VyLmMKLSAgICAgICAgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0v
V2ViS2l0UGx1Z2luSG9zdFNlcnZlci5jCi0gICAgICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURf
U09VUkNFU19ESVJ9L1dlYktpdFBsdWdpbkhvc3RVc2VyLmMKLSAgICBERVBFTkRTIG1hYy9QbHVn
aW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5BZ2VudC5kZWZzIG1hYy9QbHVnaW5zL0hvc3RlZC9XZWJL
aXRQbHVnaW5Ib3N0LmRlZnMKLSAgICBXT1JLSU5HX0RJUkVDVE9SWSAke1dlYktpdExlZ2FjeV9E
RVJJVkVEX1NPVVJDRVNfRElSfQotICAgIENPTU1BTkQgbWlnIC1JLi4gV2ViS2l0UGx1Z2luQWdl
bnQuZGVmcyBXZWJLaXRQbHVnaW5BZ2VudFJlcGx5LmRlZnMgV2ViS2l0UGx1Z2luSG9zdC5kZWZz
Ci0gICAgVkVSQkFUSU0pCi1hZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAgT1VUUFVUCi0gICAgICAg
ICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L1dlYktpdFBsdWdpbkNsaWVudFNl
cnZlci5jCi0gICAgICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L1dlYktp
dFBsdWdpbkNsaWVudFVzZXIuYwotICAgIERFUEVORFMgbWFjL1BsdWdpbnMvSG9zdGVkL1dlYktp
dFBsdWdpbkNsaWVudC5kZWZzCi0gICAgV09SS0lOR19ESVJFQ1RPUlkgJHtXZWJLaXRMZWdhY3lf
REVSSVZFRF9TT1VSQ0VTX0RJUn0KLSAgICBDT01NQU5EIG1pZyAtSS4uIC1zaGVhZGVyIFdlYktp
dFBsdWdpbkNsaWVudFNlcnZlci5oIFdlYktpdFBsdWdpbkNsaWVudC5kZWZzCi0gICAgVkVSQkFU
SU0pCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfU09VUkNFUwotICAgICR7V2ViS2l0TGVnYWN5
X0RFUklWRURfU09VUkNFU19ESVJ9L1dlYktpdFBsdWdpbkFnZW50VXNlci5jCi0gICAgJHtXZWJL
aXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV2ViS2l0UGx1Z2luQ2xpZW50U2VydmVyLmMK
LSAgICAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9XZWJLaXRQbHVnaW5Ib3N0
VXNlci5jCi0pCi0KIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICBPVVRQVVQgJHtXZWJLaXRMZWdh
Y3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV2ViVmlld1ByZWZlcmVuY2VzQ2hhbmdlZEdlbmVyYXRl
ZC5tbSAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9XZWJQcmVmZXJlbmNlc0lu
dGVybmFsRmVhdHVyZXMubW0gJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV2Vi
UHJlZmVyZW5jZXNFeHBlcmltZW50YWxGZWF0dXJlcy5tbSAke1dlYktpdExlZ2FjeV9ERVJJVkVE
X1NPVVJDRVNfRElSfS9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmgKICAgICBERVBFTkRTICR7
V2ViS2l0X1dFQl9QUkVGRVJFTkNFU19URU1QTEFURVN9ICR7V2ViS2l0X1dFQl9QUkVGRVJFTkNF
U30gV1RGX0NvcHlQcmVmZXJlbmNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9X
ZWJLaXRMZWdhY3kueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvV2ViS2l0TGVnYWN5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZmUzYmUwYTc5
MzY2ODdjYzk0MmU2YzVjMTkwMzZlNDIwM2RlZWUxMy4uZGRjNWViYmJmNWRhYzM4NWY4N2U2ZjMw
YzhmODA4OWVkNGVmZmNkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9XZWJLaXRM
ZWdhY3kueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L1dlYktpdExlZ2FjeS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00NCwxMiArNDQsNiBA
QAogCQkxNEQ4MjUzMDBBRjk1NTA5MDAwNEYwNTcgLyogV2ViQ2hyb21lQ2xpZW50Lm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREODI1MkUwQUY5NTUw
OTAwMDRGMDU3IC8qIFdlYkNocm9tZUNsaWVudC5tbSAqLzsgfTsKIAkJMUEwOEZFRTAxRDU5Mzc2
RTAwOEJBOENCIC8qIFdlYlBsdWdpbkluZm9Qcm92aWRlci5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMDhGRURFMUQ1OTM3NkUwMDhCQThDQiAvKiBX
ZWJQbHVnaW5JbmZvUHJvdmlkZXIubW0gKi87IH07CiAJCTFBMDhGRUUxMUQ1OTM3NkUwMDhCQThD
QiAvKiBXZWJQbHVnaW5JbmZvUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBMDhGRURGMUQ1OTM3NkUwMDhCQThDQiAvKiBXZWJQbHVnaW5J
bmZvUHJvdmlkZXIuaCAqLzsgfTsKLQkJMUEyREJFOUYwRjI1MUUzQTAwMzZGOEE2IC8qIFByb3h5
SW5zdGFuY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBMkRCRTlEMEYyNTFFM0EwMDM2RjhBNiAvKiBQcm94eUluc3RhbmNlLmggKi87IH07Ci0JCTFB
MkRCRUEwMEYyNTFFM0EwMDM2RjhBNiAvKiBQcm94eUluc3RhbmNlLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyREJFOUUwRjI1MUUzQTAwMzZGOEE2
IC8qIFByb3h5SW5zdGFuY2UubW0gKi87IH07Ci0JCTFBNERGNTIyMEVDOEM3NEQwMDZCRDRCNCAv
KiBXZWJOZXRzY2FwZVBsdWdpblZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBNERGNTIwMEVDOEM3NEQwMDZCRDRCNCAvKiBXZWJOZXRzY2FwZVBs
dWdpblZpZXcuaCAqLzsgfTsKLQkJMUE0REY1MjMwRUM4Qzc0RDAwNkJENEI0IC8qIFdlYk5ldHNj
YXBlUGx1Z2luVmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBNERGNTIxMEVDOEM3NEQwMDZCRDRCNCAvKiBXZWJOZXRzY2FwZVBsdWdpblZpZXcu
bW0gKi87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1Xbm8tZGVwcmVjYXRlZC1kZWNs
YXJhdGlvbnMiOyB9OyB9OwotCQkxQTRERjVFNDBFQzhEMTA0MDA2QkQ0QjQgLyogV2ViQmFzZU5l
dHNjYXBlUGx1Z2luVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUE0REY1RTIwRUM4RDEwNDAwNkJENEI0IC8qIFdlYkJhc2VOZXRzY2FwZVBsdWdp
blZpZXcuaCAqLzsgfTsKLQkJMUE0REY1RTUwRUM4RDEwNDAwNkJENEI0IC8qIFdlYkJhc2VOZXRz
Y2FwZVBsdWdpblZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTRERjVFMzBFQzhEMTA0MDA2QkQ0QjQgLyogV2ViQmFzZU5ldHNjYXBlUGx1Z2lu
Vmlldy5tbSAqLzsgfTsKIAkJMUE1OTFENDUxQTJFOTFCQjAwMDkwN0M0IC8qIFdlYlN0b3JhZ2VO
YW1lc3BhY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQTU5MUQ0MzFBMkU5MUJCMDAwOTA3QzQgLyogV2ViU3RvcmFnZU5hbWVzcGFj
ZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMUE1OTFENDYxQTJFOTFCQjAwMDkwN0M0IC8qIFdlYlN0
b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUE1OTFENDQxQTJFOTFCQjAwMDkwN0M0IC8qIFdlYlN0b3JhZ2VOYW1l
c3BhY2VQcm92aWRlci5oICovOyB9OwogCQkxQTYwNTE5MTE3NTAyQTVEMDBCQzYyRjUgLyogQmlu
YXJ5UHJvcGVydHlMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBNjA1MThEMTc1MDJBNUQwMEJDNjJGNSAvKiBCaW5hcnlQcm9wZXJ0eUxpc3Qu
Y3BwICovOyB9OwpAQCAtNzEsMzkgKzY1LDE3IEBACiAJCTFBNkIzMTNCMUE1MUYzQTkwMDQyMjk3
NSAvKiBTdG9yYWdlVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQTZCMzEyRTFBNTFGM0E5MDA0MjI5NzUgLyogU3RvcmFnZVRyYWNrZXIu
Y3BwICovOyB9OwogCQkxQTZCMzEzQzFBNTFGM0E5MDA0MjI5NzUgLyogU3RvcmFnZVRyYWNrZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNkIzMTJG
MUE1MUYzQTkwMDQyMjk3NSAvKiBTdG9yYWdlVHJhY2tlci5oICovOyB9OwogCQkxQTZCMzEzRDFB
NTFGM0E5MDA0MjI5NzUgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNkIzMTMwMUE1MUYzQTkwMDQyMjk3NSAv
KiBTdG9yYWdlVHJhY2tlckNsaWVudC5oICovOyB9OwotCQkxQTc0QTI4RTBGNEY3NTQwMDA4MkUy
MjggLyogV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NEEyOEMwRjRGNzU0MDAwODJFMjI4IC8qIFdl
YlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaCAqLzsgfTsKLQkJMUE3NEEyOEYwRjRGNzU0MDAw
ODJFMjI4IC8qIFdlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIubSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzRBMjhEMEY0Rjc1NDAwMDgyRTIyOCAv
KiBXZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLm0gKi87IH07Ci0JCTFBNzdCMDJFMEVFNzcz
MDUwMEM4QTFGOSAvKiBXZWJQbHVnaW5SZXF1ZXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc3QjAyQzBFRTc3MzA1MDBDOEExRjkgLyogV2ViUGx1
Z2luUmVxdWVzdC5oICovOyB9OwotCQkxQTc3QjAyRjBFRTc3MzA1MDBDOEExRjkgLyogV2ViUGx1
Z2luUmVxdWVzdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUE3N0IwMkQwRUU3NzMwNTAwQzhBMUY5IC8qIFdlYlBsdWdpblJlcXVlc3QubSAqLzsgfTsK
IAkJMUE4NkNDRDQxQUQ0OEE2MjAwNzRCQTg5IC8qIFdlYkFwcGxpY2F0aW9uQ2FjaGVJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE4NkND
RDMxQUQ0OEE2MjAwNzRCQTg5IC8qIFdlYkFwcGxpY2F0aW9uQ2FjaGVJbnRlcm5hbC5oICovOyB9
OwotCQkxQThERUQ1MDBFRTg4QjhBMDBGMjUwMjIgLyogSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJl
YW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOERF
RDRFMEVFODhCOEEwMEYyNTAyMiAvKiBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbS5oICovOyB9
OwotCQkxQThERUQ1MTBFRTg4QjhBMDBGMjUwMjIgLyogSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJl
YW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQThE
RUQ0RjBFRTg4QjhBMDBGMjUwMjIgLyogSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0gKi87
IH07CiAJCTFBOTExOUY2MURCMDQ3MEEwMDg3RDFGRCAvKiBCYWNrRm9yd2FyZExpc3QubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkxMTlGNDFEQjA0
NzBBMDA4N0QxRkQgLyogQmFja0ZvcndhcmRMaXN0Lm1tICovOyB9OwogCQkxQTkxMTlGNzFEQjA0
NzBBMDA4N0QxRkQgLyogQmFja0ZvcndhcmRMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkxMTlGNTFEQjA0NzBBMDA4N0QxRkQgLyogQmFja0Zv
cndhcmRMaXN0LmggKi87IH07CiAJCTFBQTgzRjgzMUE1QzRBRTQwMDAyNkVDNiAvKiBXZWJEYXRh
YmFzZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBQTgzRjgxMUE1QzRBRTQwMDAyNkVDNiAvKiBXZWJEYXRhYmFzZVByb3ZpZGVyLmNw
cCAqLzsgfTsKIAkJMUFBODNGODQxQTVDNEFFNDAwMDI2RUM2IC8qIFdlYkRhdGFiYXNlUHJvdmlk
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTgz
RjgyMUE1QzRBRTQwMDAyNkVDNiAvKiBXZWJEYXRhYmFzZVByb3ZpZGVyLmggKi87IH07CiAJCTFB
QTg3OUI2MTFDQkU5QkYwMDNDNjY0RiAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTg3OUI0MTFDQkU5QkYw
MDNDNjY0RiAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCAqLzsgfTsKIAkJMUFBODc5QjcxMUNC
RTlCRjAwM0M2NjRGIC8qIFdlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTg3OUI1MTFDQkU5QkYwMDNDNjY0RiAv
KiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0gKi87IH07Ci0JCTFBQUY1Q0VBMEVEREUxRkUwMDhE
ODgzRCAvKiBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUFGNUNFNDBFRERFMUZFMDA4RDg4M0QgLyogTmV0
c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5oICovOyB9OwotCQkxQUFGNUNFQjBFRERFMUZFMDA4RDg4
M0QgLyogTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUY1Q0U1MEVEREUxRkUwMDhEODgzRCAvKiBOZXRz
Y2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tICovOyB9OwotCQkxQUFGNUNFQzBFRERFMUZFMDA4RDg4
M0QgLyogTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUY1Q0U2MEVEREUxRkUwMDhEODgzRCAvKiBOZXRzY2Fw
ZVBsdWdpbkhvc3RQcm94eS5oICovOyB9OwotCQkxQUFGNUNFRDBFRERFMUZFMDA4RDg4M0QgLyog
TmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQUFGNUNFNzBFRERFMUZFMDA4RDg4M0QgLyogTmV0c2NhcGVQbHVn
aW5Ib3N0UHJveHkubW0gKi87IH07Ci0JCTFBQUY1Q0VFMEVEREUxRkUwMDhEODgzRCAvKiBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBQUY1Q0U4MEVEREUxRkUwMDhEODgzRCAvKiBOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHkuaCAqLzsgfTsKLQkJMUFBRjVDRUYwRURERTFGRTAwOEQ4ODNEIC8qIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUY1Q0U5MEVEREUxRkUwMDhEODgzRCAvKiBOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHkubW0gKi87IH07Ci0JCTFBQUY1Q0YxMEVEREU1ODYwMDhEODgzRCAv
KiBXZWJLaXRQbHVnaW5Ib3N0LmRlZnMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQUFGNTg4RDBFRENDRUEzMDA4RDg4M0QgLyogV2ViS2l0UGx1Z2luSG9z
dC5kZWZzICovOyB9OwotCQkxQUFGNUQwMDBFRERFNjA0MDA4RDg4M0QgLyogV2ViS2l0UGx1Z2lu
Q2xpZW50LmRlZnMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQUFGNTg4QzBFRENDRUEzMDA4RDg4M0QgLyogV2ViS2l0UGx1Z2luQ2xpZW50LmRlZnMgKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoU2VydmVyLCApOyB9OyB9OwotCQkxQUFGNUQwOTBF
RERFNzFEMDA4RDg4M0QgLyogV2ViS2l0UGx1Z2luSG9zdFR5cGVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUFGNUQwODBFRERFNzFEMDA4RDg4M0Qg
LyogV2ViS2l0UGx1Z2luSG9zdFR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJMUFBRjVEMEYwRURERTdBNzAwOEQ4ODNEIC8qIFdlYktpdFBs
dWdpbkFnZW50LmRlZnMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQUFGNTg4QTBFRENDRUEzMDA4RDg4M0QgLyogV2ViS2l0UGx1Z2luQWdlbnQuZGVmcyAq
LzsgfTsKLQkJMUFBRjVGQkYwRURFM0E5MjAwOEQ4ODNEIC8qIFdlYkhvc3RlZE5ldHNjYXBlUGx1
Z2luVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUFBRjVGQkQwRURFM0E5MjAwOEQ4ODNEIC8qIFdlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5o
ICovOyB9OwotCQkxQUFGNUZDMDBFREUzQTkyMDA4RDg4M0QgLyogV2ViSG9zdGVkTmV0c2NhcGVQ
bHVnaW5WaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUFBRjVGQkUwRURFM0E5MjAwOEQ4ODNEIC8qIFdlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmll
dy5tbSAqLzsgfTsKIAkJMUFCMUY3NkUxRDFCMjYwQjAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29y
ZGluYXRvckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUFCMUY3NkMxRDFCMjYwQjAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvckNs
aWVudC5oICovOyB9OwogCQkxQUIxRjc2RjFEMUIyNjBCMDA3QzlCRDEgLyogV2ViUGF5bWVudENv
b3JkaW5hdG9yQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUFCMUY3NkQxRDFCMjYwQjAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRv
ckNsaWVudC5tbSAqLzsgfTsKIAkJMUFDNzE3NkUxQTI2NTY4QTAwMkUzMTE1IC8qIFdlYlZpc2l0
ZWRMaW5rU3RvcmUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQUM3MTc2QzFBMjY1NjhBMDAyRTMxMTUgLyogV2ViVmlzaXRlZExpbmtTdG9yZS5tbSAq
LzsgfTsKIAkJMUFDNzE3NkYxQTI2NTY4QTAwMkUzMTE1IC8qIFdlYlZpc2l0ZWRMaW5rU3RvcmUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQzcxNzZE
MUEyNjU2OEEwMDJFMzExNSAvKiBXZWJWaXNpdGVkTGlua1N0b3JlLmggKi87IH07Ci0JCTFBRUE2
NkQ0MERDNkIxRkYwMDNEMTJCRiAvKiBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFFQTY2RDIwREM2
QjFGRjAwM0QxMkJGIC8qIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyLmggKi87IH07Ci0J
CTFBRUE2NkQ1MERDNkIxRkYwMDNEMTJCRiAvKiBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxl
ci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRUE2
NkQzMERDNkIxRkYwMDNEMTJCRiAvKiBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlci5tbSAq
LzsgfTsKLQkJMUFFQTZBNTAwREM4Q0UyRjAwM0QxMkJGIC8qIFdlYk5ldHNjYXBlUGx1Z2luRXZl
bnRIYW5kbGVyQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBRUE2QTRFMERDOENFMkYwMDNEMTJCRiAvKiBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50
SGFuZGxlckNvY29hLmggKi87IH07Ci0JCTFBRUE2QTUxMERDOENFMkYwMDNEMTJCRiAvKiBXZWJO
ZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFFQTZBNEYwREM4Q0UyRjAwM0QxMkJGIC8qIFdlYk5l
dHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2EubW0gKi87IH07CiAJCTFDMEQ0MDg3MEFDMUM4
RjQwMDA5QzExMyAvKiBXZWJLaXRWZXJzaW9uQ2hlY2tzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzBENDA4NTBBQzFDOEY0MDAwOUMxMTMgLyogV2Vi
S2l0VmVyc2lvbkNoZWNrcy5oICovOyB9OwogCQkxQzY4RjY2RjA5NUI1RkMxMDBDMjk4NEUgLyog
V2ViTm9kZUhpZ2hsaWdodC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUM2OEY2NjMwOTVCNUZDMTAwQzI5ODRFIC8qIFdlYk5vZGVIaWdobGlnaHQuaCAq
LzsgfTsKIAkJMUM2OEY2NzAwOTVCNUZDMTAwQzI5ODRFIC8qIFdlYk5vZGVIaWdobGlnaHQubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzY4RjY2NDA5
NUI1RkMxMDBDMjk4NEUgLyogV2ViTm9kZUhpZ2hsaWdodC5tbSAqLzsgfTsKQEAgLTE1OCwxMSAr
MTMwLDYgQEAKIAkJNTFGREM0RDMwQjBBRjVDMTAwRjg0RUIzIC8qIFdlYkhpc3RvcnlJdGVtUHJp
dmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFG
REM0RDIwQjBBRjVDMTAwRjg0RUIzIC8qIFdlYkhpc3RvcnlJdGVtUHJpdmF0ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNDFBREY1MEIxQkM0
OEEwMDQwMTJCRCAvKiBXZWJDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTI0MUFERjMwQjFCQzQ4QTAwNDAxMkJEIC8qIFdlYkNhY2hlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTI0MUFERjYw
QjFCQzQ4QTAwNDAxMkJEIC8qIFdlYkNhY2hlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTI0MUFERjQwQjFCQzQ4QTAwNDAxMkJEIC8qIFdlYkNhY2hl
Lm1tICovOyB9OwotCQk1MzVFMDhDQzIyNTQ2M0IyMDBERjAwQ0EgLyogV2ViS2l0UGx1Z2luQWdl
bnQuZGVmcyBpbiBDb3B5IE1pZyBGaWxlcyBpbnRvIFByaXZhdGUgRnJhbWV3b3JrIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBRjU4OEEwRURDQ0VBMzAwOEQ4
ODNEIC8qIFdlYktpdFBsdWdpbkFnZW50LmRlZnMgKi87IH07Ci0JCTUzNUUwOENEMjI1NDYzQjIw
MERGMDBDQSAvKiBXZWJLaXRQbHVnaW5BZ2VudFJlcGx5LmRlZnMgaW4gQ29weSBNaWcgRmlsZXMg
aW50byBQcml2YXRlIEZyYW1ld29yayBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBQUY1ODhCMEVEQ0NFQTMwMDhEODgzRCAvKiBXZWJLaXRQbHVnaW5BZ2VudFJl
cGx5LmRlZnMgKi87IH07Ci0JCTUzNUUwOENFMjI1NDYzQjIwMERGMDBDQSAvKiBXZWJLaXRQbHVn
aW5DbGllbnQuZGVmcyBpbiBDb3B5IE1pZyBGaWxlcyBpbnRvIFByaXZhdGUgRnJhbWV3b3JrIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBRjU4OEMwRURDQ0VB
MzAwOEQ4ODNEIC8qIFdlYktpdFBsdWdpbkNsaWVudC5kZWZzICovOyB9OwotCQk1MzVFMDhDRjIy
NTQ2M0IyMDBERjAwQ0EgLyogV2ViS2l0UGx1Z2luSG9zdC5kZWZzIGluIENvcHkgTWlnIEZpbGVz
IGludG8gUHJpdmF0ZSBGcmFtZXdvcmsgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQUFGNTg4RDBFRENDRUEzMDA4RDg4M0QgLyogV2ViS2l0UGx1Z2luSG9zdC5k
ZWZzICovOyB9OwotCQk1MzVFMDhEMDIyNTQ2M0IyMDBERjAwQ0EgLyogV2ViS2l0UGx1Z2luSG9z
dFR5cGVzLmRlZnMgaW4gQ29weSBNaWcgRmlsZXMgaW50byBQcml2YXRlIEZyYW1ld29yayBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUY1ODhFMEVEQ0NFQTMw
MDhEODgzRCAvKiBXZWJLaXRQbHVnaW5Ib3N0VHlwZXMuZGVmcyAqLzsgfTsKIAkJNTk4QUQ5MUEx
MjAxQ0VDOTAwQUJBRTRFIC8qIFdlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OThBRDkxOTEyMDFDRUM5MDBB
QkFFNEUgLyogV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnQuaCAqLzsgfTsKIAkJNTk4QUQ5MUUx
MjAxQ0VDRjAwQUJBRTRFIC8qIFdlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50Lm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTk4QUQ5MUQxMjAxQ0VDRjAw
QUJBRTRFIC8qIFdlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50Lm1tICovOyB9OwogCQk1OThBRDky
MDEyMDFDRjA3MDBBQkFFNEUgLyogV2ViRGV2aWNlT3JpZW50YXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5OEFEOTFGMTIwMUNGMDcwMEFCQUU0
RSAvKiBXZWJEZXZpY2VPcmllbnRhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0yNjQsOSArMjMxLDcgQEAKIAkJOTM5ODEwMjcwODI0QkYw
MTAwOERGMDM4IC8qIFdlYlN0cmluZ1RydW5jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU5NjY4QzgwMkFEMjkyMzAxODYzNUNBIC8qIFdlYlN0
cmluZ1RydW5jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTkzOTgxMDI5MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJBdXRoZW50aWNhdGlvblBh
bmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGOENB
MTVCNTAyOUEzOUQ5MDEwMDAxMjIgLyogV2ViQXV0aGVudGljYXRpb25QYW5lbC5oICovOyB9Owog
CQk5Mzk4MTAyQTA4MjRCRjAxMDA4REYwMzggLyogV2ViUGFuZWxBdXRoZW50aWNhdGlvbkhhbmRs
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMTU0
RUYxMDNBNDEyNzAwMDg2MzVDRSAvKiBXZWJQYW5lbEF1dGhlbnRpY2F0aW9uSGFuZGxlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTkzOTgxMDJC
MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVBNjcyQjkwMjYzODY2RTAxMDAw
MTAyIC8qIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLmggKi87IH07CiAJCTkzOTgxMDJFMDgyNEJG
MDEwMDhERjAzOCAvKiBXZWJCYXNlUGx1Z2luUGFja2FnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODNFNEFGNDYwMzY2NTIxNTAwMDBFNTA2IC8qIFdl
YkJhc2VQbHVnaW5QYWNrYWdlLmggKi87IH07Ci0JCTkzOTgxMDMxMDgyNEJGMDEwMDhERjAzOCAv
KiBXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY1RjcxNzFFMDI4ODQ5M0MwMTg2MzVDQSAvKiBXZWJOZXRzY2Fw
ZVBsdWdpblBhY2thZ2UuaCAqLzsgfTsKIAkJOTM5ODEwMzUwODI0QkYwMTAwOERGMDM4IC8qIFdl
YlBsdWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODQ4REZGODQwMzY1RkU2QTAwQ0EyQUNBIC8qIFdlYlBsdWdpbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzOTgxMDM2MDgyNEJGMDEwMDhERjAz
OCAvKiBXZWJQbHVnaW5Db250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg0OERGRjg1MDM2NUZFNkEwMENBMkFDQSAvKiBXZWJQbHVnaW5Db250
YWluZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk5Mzk4MTAzNzA4MjRCRjAxMDA4REYwMzggLyogV2ViUGx1Z2luQ29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ2NzI3NUMwMzY3MTU4
NTAwQ0EyQUNBIC8qIFdlYlBsdWdpbkNvbnRyb2xsZXIuaCAqLzsgfTsKQEAgLTM0OCwxMCArMzEz
LDcgQEAKIAkJOTM5ODEwQ0MwODI0QkYwMTAwOERGMDM4IC8qIFdlYlN0cmluZ1RydW5jYXRvci5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1OTY2OEM5
MDJBRDI5MjMwMTg2MzVDQSAvKiBXZWJTdHJpbmdUcnVuY2F0b3IubW0gKi87IH07CiAJCTkzOTgx
MENGMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJBdXRoZW50aWNhdGlvblBhbmVsLm0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGOENBMTVCNjAyOUEzOUQ5MDEw
MDAxMjIgLyogV2ViQXV0aGVudGljYXRpb25QYW5lbC5tICovOyB9OwogCQk5Mzk4MTBEMDA4MjRC
RjAxMDA4REYwMzggLyogV2ViUGFuZWxBdXRoZW50aWNhdGlvbkhhbmRsZXIubSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMTU0RUYyMDNBNDEyNzAwMDg2
MzVDRSAvKiBXZWJQYW5lbEF1dGhlbnRpY2F0aW9uSGFuZGxlci5tICovOyB9OwotCQk5Mzk4MTBE
MTA4MjRCRjAxMDA4REYwMzggLyogV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNUE2NzJCQTAyNjM4NjZFMDEw
MDAxMDIgLyogV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0gKi87IH07Ci0JCTkzOTgxMEQ2MDgy
NEJGMDEwMDhERjAzOCAvKiBXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNUY3MTcxRjAyODg0OTNDMDE4NjM1
Q0EgLyogV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm1tICovOyB9OwogCQk5Mzk4MTBEQzA4MjRC
RjAxMDA4REYwMzggLyogV2ViUGx1Z2luUGFja2FnZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzRTRBRjRDMDM2NjU5NDQwMDAwRTUwNiAvKiBXZWJQ
bHVnaW5QYWNrYWdlLm1tICovOyB9OwotCQk5Mzk4MTBERDA4MjRCRjAxMDA4REYwMzggLyogbnBh
cGkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNUY3
MTcyMzAyODg0OTNDMDE4NjM1Q0EgLyogbnBhcGkubW0gKi87IH07CiAJCTkzOTgxMEU0MDgyNEJG
MDEwMDhERjAzOCAvKiBXZWJKYXZhU2NyaXB0VGV4dElucHV0UGFuZWwubSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNDVENEVCMDM2NUM1QjIwMDg2MzVD
RSAvKiBXZWJKYXZhU2NyaXB0VGV4dElucHV0UGFuZWwubSAqLzsgfTsKIAkJOTM5ODEwRjAwODI0
QkYwMTAwOERGMDM4IC8qIFdlYkRlZmF1bHRQb2xpY3lEZWxlZ2F0ZS5tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1MkZBRTAwMzNGQzUwNDAwQ0EyQUNE
IC8qIFdlYkRlZmF1bHRQb2xpY3lEZWxlZ2F0ZS5tICovOyB9OwogCQk5Mzk4MTBGMTA4MjRCRjAx
MDA4REYwMzggLyogV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzk0NDYwNkMwMjBGNTBFRDBFQ0ExNzY3IC8q
IFdlYkR5bmFtaWNTY3JvbGxCYXJzVmlldy5tbSAqLzsgfTsKQEAgLTY4Nyw4ICs2NDksNiBAQAog
CQlFMTNFNzgyQzFFNUE3MzY1MDAxODQ5RDEgLyogV2ViQ3JlYXRlRnJhZ21lbnRJbnRlcm5hbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEzRTc4MkIx
RTVBNzM2NTAwMTg0OUQxIC8qIFdlYkNyZWF0ZUZyYWdtZW50SW50ZXJuYWwuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMTUzMUJEODIxODdCOTU0
MDAyRTNGODEgLyogTlNVUkxEb3dubG9hZFNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1MzFCRDcyMTg3QjhGMjAwMkUzRjgxIC8qIE5TVVJMRG93
bmxvYWRTUEkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFMTU2NjMxOTBGQjYxQzFGMDBDMTk5Q0EgLyogV2ViRG93bmxvYWQubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU2NjMxODBGQjYxQzFGMDBD
MTk5Q0EgLyogV2ViRG93bmxvYWQubW0gKi87IH07Ci0JCUUxNjk4MzYyMTEzNDZEMUIwMDg5NDEx
NSAvKiBQcm94eVJ1bnRpbWVPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxNjk4MzYxMTEzNDZEMUIwMDg5NDExNSAvKiBQcm94eVJ1bnRpbWVP
YmplY3QuaCAqLzsgfTsKLQkJRTE2OTgzNkMxMTM0NkQ1NjAwODk0MTE1IC8qIFByb3h5UnVudGlt
ZU9iamVjdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxNjk4MzZCMTEzNDZENTYwMDg5NDExNSAvKiBQcm94eVJ1bnRpbWVPYmplY3QubW0gKi87IH07
CiAJCUU0QUVGOTdDMUMwREY0QkMwMEIwMTcyNyAvKiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QUVGOTdB
MUMwREY0QkMwMEIwMTcyNyAvKiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCAqLzsgfTsKIAkJ
RUQ1Qjk1MjQxMTFCNzI1QTAwNDcyMjk4IC8qIFdlYkxvY2FsaXphYmxlU3RyaW5ncy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVENUI5NTIzMTExQjcy
NUEwMDQ3MjI5OCAvKiBXZWJMb2NhbGl6YWJsZVN0cmluZ3MubW0gKi87IH07CiAJCUVEN0Y2RDhC
MDk4MDY4MzUwMEMyMzVFRCAvKiBXZWJOU0RhdGFFeHRyYXNQcml2YXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFRDdGNkQ4QTA5ODA2ODM1MDBDMjM1
RUQgLyogV2ViTlNEYXRhRXh0cmFzUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03MzEsMTEgKzY5MSw2IEBACiAJCQlkc3RQYXRoID0g
UHJpdmF0ZUhlYWRlcnM7CiAJCQlkc3RTdWJmb2xkZXJTcGVjID0gMTsKIAkJCWZpbGVzID0gKAot
CQkJCTUzNUUwOENDMjI1NDYzQjIwMERGMDBDQSAvKiBXZWJLaXRQbHVnaW5BZ2VudC5kZWZzIGlu
IENvcHkgTWlnIEZpbGVzIGludG8gUHJpdmF0ZSBGcmFtZXdvcmsgSGVhZGVycyAqLywKLQkJCQk1
MzVFMDhDRDIyNTQ2M0IyMDBERjAwQ0EgLyogV2ViS2l0UGx1Z2luQWdlbnRSZXBseS5kZWZzIGlu
IENvcHkgTWlnIEZpbGVzIGludG8gUHJpdmF0ZSBGcmFtZXdvcmsgSGVhZGVycyAqLywKLQkJCQk1
MzVFMDhDRTIyNTQ2M0IyMDBERjAwQ0EgLyogV2ViS2l0UGx1Z2luQ2xpZW50LmRlZnMgaW4gQ29w
eSBNaWcgRmlsZXMgaW50byBQcml2YXRlIEZyYW1ld29yayBIZWFkZXJzICovLAotCQkJCTUzNUUw
OENGMjI1NDYzQjIwMERGMDBDQSAvKiBXZWJLaXRQbHVnaW5Ib3N0LmRlZnMgaW4gQ29weSBNaWcg
RmlsZXMgaW50byBQcml2YXRlIEZyYW1ld29yayBIZWFkZXJzICovLAotCQkJCTUzNUUwOEQwMjI1
NDYzQjIwMERGMDBDQSAvKiBXZWJLaXRQbHVnaW5Ib3N0VHlwZXMuZGVmcyBpbiBDb3B5IE1pZyBG
aWxlcyBpbnRvIFByaXZhdGUgRnJhbWV3b3JrIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJbmFtZSA9
ICJDb3B5IE1pZyBGaWxlcyBpbnRvIFByaXZhdGUgRnJhbWV3b3JrIEhlYWRlcnMiOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC03NTUsMTIgKzcxMCw2IEBA
CiAJCTE0RDgyNTJFMEFGOTU1MDkwMDA0RjA1NyAvKiBXZWJDaHJvbWVDbGllbnQubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDaHJvbWVDbGllbnQubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMDhGRURFMUQ1OTM3NkUwMDhCQThDQiAvKiBX
ZWJQbHVnaW5JbmZvUHJvdmlkZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXZWJQbHVnaW5JbmZvUHJvdmlkZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFBMDhGRURGMUQ1OTM3NkUwMDhCQThDQiAvKiBXZWJQbHVnaW5JbmZvUHJvdmlkZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGx1Z2luSW5mb1Byb3ZpZGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMkRCRTlEMEYyNTFFM0EwMDM2RjhB
NiAvKiBQcm94eUluc3RhbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBy
b3h5SW5zdGFuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEyREJFOUUwRjI1
MUUzQTAwMzZGOEE2IC8qIFByb3h5SW5zdGFuY2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBQcm94eUluc3RhbmNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkxQTRERjUyMDBFQzhDNzREMDA2QkQ0QjQgLyogV2ViTmV0c2NhcGVQbHVnaW5WaWV3
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYk5ldHNjYXBlUGx1Z2luVmll
dy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTRERjUyMTBFQzhDNzREMDA2QkQ0
QjQgLyogV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkxQTRERjVFMjBFQzhEMTA0MDA2QkQ0QjQgLyogV2ViQmFzZU5ldHNjYXBl
UGx1Z2luVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJCYXNlTmV0
c2NhcGVQbHVnaW5WaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBNERGNUUz
MEVDOEQxMDQwMDZCRDRCNCAvKiBXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmll
dy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE1OTFENDMxQTJFOTFCQjAwMDkw
N0M0IC8qIFdlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuY3BwOyBwYXRo
ID0gLi4vLi4vU3RvcmFnZS9XZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQTU5MUQ0NDFBMkU5MUJCMDAwOTA3QzQgLyogV2ViU3Rv
cmFnZU5hbWVzcGFjZVByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFdlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oOyBwYXRoID0gLi4vLi4vU3RvcmFnZS9XZWJT
dG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUE2MDUxOEQxNzUwMkE1RDAwQkM2MkY1IC8qIEJpbmFyeVByb3BlcnR5TGlzdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaW5hcnlQcm9wZXJ0eUxpc3QuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzgyLDQxICs3MzEsMTcgQEAKIAkJMUE2QjMx
MkUxQTUxRjNBOTAwNDIyOTc1IC8qIFN0b3JhZ2VUcmFja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFN0b3JhZ2VUcmFja2VyLmNwcDsgcGF0aCA9IFN0b3JhZ2Uv
U3RvcmFnZVRyYWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCTFBNkIz
MTJGMUE1MUYzQTkwMDQyMjk3NSAvKiBTdG9yYWdlVHJhY2tlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBTdG9yYWdlVHJhY2tlci5oOyBwYXRoID0gU3RvcmFnZS9TdG9yYWdl
VHJhY2tlci5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCTFBNkIzMTMwMUE1MUYz
QTkwMDQyMjk3NSAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBTdG9yYWdlVHJhY2tlckNsaWVudC5oOyBwYXRoID0gU3RvcmFnZS9TdG9y
YWdlVHJhY2tlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07Ci0JCTFBNzRB
MjhDMEY0Rjc1NDAwMDgyRTIyOCAvKiBXZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE3NEEyOEQwRjRGNzU0MDAwODJF
MjI4IC8qIFdlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBXZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLm07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBNzdCMDJDMEVFNzczMDUwMEM4QTFGOSAvKiBXZWJQbHVn
aW5SZXF1ZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsdWdpblJl
cXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE3N0IwMkQwRUU3NzMwNTAw
QzhBMUY5IC8qIFdlYlBsdWdpblJlcXVlc3QubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpj
OyBwYXRoID0gV2ViUGx1Z2luUmVxdWVzdC5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQTg2Q0NEMzFBRDQ4QTYyMDA3NEJBODkgLyogV2ViQXBwbGljYXRpb25DYWNoZUludGVybmFs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkFwcGxpY2F0aW9uQ2FjaGVJ
bnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQThERUQ0RTBFRTg4QjhB
MDBGMjUwMjIgLyogSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE4REVENEYwRUU4OEI4QTAwRjI1MDIyIC8qIEhvc3RlZE5l
dHNjYXBlUGx1Z2luU3RyZWFtLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFBOTExOUY0MURCMDQ3MEEwMDg3RDFGRCAvKiBCYWNrRm9yd2FyZExpc3QubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBCYWNrRm9yd2FyZExpc3Qu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOTExOUY1MURCMDQ3MEEwMDg3RDFG
RCAvKiBCYWNrRm9yd2FyZExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QmFja0ZvcndhcmRMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTgzRjgx
MUE1QzRBRTQwMDAyNkVDNiAvKiBXZWJEYXRhYmFzZVByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkRhdGFiYXNlUHJvdmlkZXIuY3BwOyBwYXRoID0g
Li4vLi4vU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUFBODNGODIxQTVDNEFFNDAwMDI2RUM2IC8qIFdlYkRhdGFiYXNlUHJvdmlk
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViRGF0YWJhc2VQcm92aWRl
ci5oOyBwYXRoID0gLi4vLi4vU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTg3OUI0MTFDQkU5QkYwMDNDNjY0RiAvKiBXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGxh
dGZvcm1TdHJhdGVnaWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTg3OUI1
MTFDQkU5QkYwMDNDNjY0RiAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQUY1ODhBMEVEQ0NFQTMwMDhEODgzRCAvKiBX
ZWJLaXRQbHVnaW5BZ2VudC5kZWZzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5taWc7IHBhdGggPSBX
ZWJLaXRQbHVnaW5BZ2VudC5kZWZzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUFG
NTg4QjBFRENDRUEzMDA4RDg4M0QgLyogV2ViS2l0UGx1Z2luQWdlbnRSZXBseS5kZWZzICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5taWc7IHBhdGggPSBXZWJLaXRQbHVnaW5BZ2VudFJlcGx5LmRlZnM7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQUY1ODhDMEVEQ0NFQTMwMDhEODgzRCAv
KiBXZWJLaXRQbHVnaW5DbGllbnQuZGVmcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUubWlnOyBwYXRo
ID0gV2ViS2l0UGx1Z2luQ2xpZW50LmRlZnM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTFBQUY1ODhEMEVEQ0NFQTMwMDhEODgzRCAvKiBXZWJLaXRQbHVnaW5Ib3N0LmRlZnMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLm1pZzsgcGF0aCA9IFdlYktpdFBsdWdpbkhvc3QuZGVmczsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBRjU4OEUwRURDQ0VBMzAwOEQ4ODNEIC8qIFdlYktp
dFBsdWdpbkhvc3RUeXBlcy5kZWZzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5taWc7IHBhdGggPSBX
ZWJLaXRQbHVnaW5Ib3N0VHlwZXMuZGVmczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MUFBRjVDRTQwRURERTFGRTAwOEQ4ODNEIC8qIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUFGNUNFNTBFRERFMUZFMDA4RDg4
M0QgLyogTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQUY1Q0U2MEVEREUxRkUwMDhEODgzRCAvKiBOZXRzY2Fw
ZVBsdWdpbkhvc3RQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXRz
Y2FwZVBsdWdpbkhvc3RQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUFG
NUNFNzBFRERFMUZFMDA4RDg4M0QgLyogTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOZXRzY2FwZVBsdWdpbkhvc3RQcm94
eS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBRjVDRTgwRURERTFGRTAwOEQ4
ODNEIC8qIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMUFBRjVDRTkwRURERTFGRTAwOEQ4ODNEIC8qIE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMUFBRjVEMDgwRURERTcxRDAwOEQ4ODNEIC8qIFdlYktpdFBsdWdpbkhvc3RUeXBl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRQbHVnaW5Ib3N0VHlw
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBRjVGQkQwRURFM0E5MjAwOEQ4
ODNEIC8qIFdlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMUFBRjVGQkUwRURFM0E5MjAwOEQ4ODNEIC8qIFdlYkhvc3RlZE5l
dHNjYXBlUGx1Z2luVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUFCMUY3NkMxRDFCMjYwQjAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRv
ckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQYXltZW50Q29v
cmRpbmF0b3JDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFCMUY3NkQx
RDFCMjYwQjAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvckNsaWVudC5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlBheW1lbnRDb29yZGluYXRvckNs
aWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFDNzE3NkMxQTI2NTY4QTAw
MkUzMTE1IC8qIFdlYlZpc2l0ZWRMaW5rU3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXZWJWaXNpdGVkTGlua1N0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQUM3MTc2RDFBMjY1NjhBMDAyRTMxMTUgLyogV2ViVmlzaXRlZExpbmtT
dG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaXNpdGVkTGlua1N0
b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBRUE2NkQyMERDNkIxRkYwMDNE
MTJCRiAvKiBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkxQUVBNjZEMzBEQzZCMUZGMDAzRDEyQkYgLyogV2ViTmV0
c2NhcGVQbHVnaW5FdmVudEhhbmRsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlci5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMUFFQTZBNEUwREM4Q0UyRjAwM0QxMkJGIC8qIFdlYk5ldHNjYXBl
UGx1Z2luRXZlbnRIYW5kbGVyQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkxQUVBNkE0RjBEQzhDRTJGMDAzRDEyQkYgLyogV2ViTmV0c2NhcGVQbHVn
aW5FdmVudEhhbmRsZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2EubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFDMEQ0MDg1MEFDMUM4RjQwMDA5QzExMyAvKiBXZWJLaXRWZXJz
aW9uQ2hlY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdFZlcnNp
b25DaGVja3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM2OEY2NjMwOTVCNUZD
MTAwQzI5ODRFIC8qIFdlYk5vZGVIaWdobGlnaHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJOb2RlSGlnaGxpZ2h0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB3cmFwc0xpbmVzID0gMDsg
fTsKIAkJMUM2OEY2NjQwOTVCNUZDMTAwQzI5ODRFIC8qIFdlYk5vZGVIaWdobGlnaHQubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBwYXRoID0gV2Vi
Tm9kZUhpZ2hsaWdodC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1
c2VzVGFicyA9IDA7IH07CkBAIC0xNTQxLDggKzE0NjYsNiBAQAogCQlFMTNFNzgyQjFFNUE3MzY1
MDAxODQ5RDEgLyogV2ViQ3JlYXRlRnJhZ21lbnRJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5j
b2RpbmcgPSA0OyBwYXRoID0gV2ViQ3JlYXRlRnJhZ21lbnRJbnRlcm5hbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFMTUzMUJENzIxODdCOEYyMDAyRTNGODEgLyogTlNVUkxEb3du
bG9hZFNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOU1VSTERvd25sb2FkU1BJLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUxNTY2MzE4MEZCNjFDMUYwMEMxOTlDQSAvKiBXZWJEb3dubG9h
ZC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkRvd25sb2Fk
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMTY5ODM2MTExMzQ2RDFCMDA4OTQx
MTUgLyogUHJveHlSdW50aW1lT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFByb3h5UnVudGltZU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlF
MTY5ODM2QjExMzQ2RDU2MDA4OTQxMTUgLyogUHJveHlSdW50aW1lT2JqZWN0Lm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUHJveHlSdW50aW1lT2JqZWN0Lm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEFFRjk3OTFDMERGNEJDMDBCMDE3MjcgLyog
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBmaWxlRW5jb2Rpbmcg
PSA0OyBuYW1lID0gV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDsgcGF0aCA9IFdlYkNvcmVT
dXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSBTT1VSQ0Vf
Uk9PVDsgfTsKIAkJRTRBRUY5N0ExQzBERjRCQzAwQjAxNzI3IC8qIFdlYlJlc291cmNlTG9hZFNj
aGVkdWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXIuaDsgcGF0aCA9IFdlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVk
dWxlci5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCUVEMjFCOTgxMDUyOEY3QUEw
MDMyOTlBQyAvKiBXZWJEb2N1bWVudEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRG9jdW1lbnRJbnRlcm5hbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTE1NzAs
MTkgKzE0OTMsMTQgQEAKIAkJRjU5RUFFM0UwMjUzQzdFRTAxODYzNUNBIC8qIFdlYkNvcmVTdGF0
aXN0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViQ29yZVN0YXRpc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGgg
PSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1OUVBRTQxMDI1M0M4REUwMTg2MzVDQSAvKiBXZWJD
b3JlU3RhdGlzdGljcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVN0YXRpc3RpY3MubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNUE1NURDNzAyQkFBMkU4
MDE4NjM1Q0MgLyogV2ViSFRNTFJlcHJlc2VudGF0aW9uUHJpdmF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkhUTUxSZXByZXNlbnRhdGlv
blByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07Ci0JCUY1QTY3MkI5MDI2Mzg2NkUwMTAwMDEwMiAvKiBXZWJOZXRzY2FwZVBsdWdp
blN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRh
YldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlGNUE2NzJCQTAyNjM4NjZFMDEwMDAxMDIg
LyogV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgZmlsZUVuY29kaW5n
ID0gNDsgaW5kZW50V2lkdGggPSA0OyBwYXRoID0gV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9Owog
CQlGNUFFQkIzRDAyNEE1Mjc2MDFDMUE1MjYgLyogV2ViUHJlZmVyZW5jZXMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBwYXRoID0gV2ViUHJlZmVy
ZW5jZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMg
PSAwOyB9OwogCQlGNUI2NzEzMDAyM0VERjg5MDFDMUE1MjUgLyogdXJsX2ljb24udGlmZiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdlLnRpZmY7
IHBhdGggPSB1cmxfaWNvbi50aWZmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNUI5
MkI4MjAyMjMxOTFEMDFDMUE1MjUgLyogV2ViSGlzdG9yeVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSGlzdG9yeVByaXZhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
CiAJCUY1QzI4MzczMDI4NDY3NkQwMTg2MzVDQSAvKiBXZWJLaXRQcmVmaXguaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJLaXRQcmVmaXguaDsg
cGF0aCA9IG1hYy9XZWJLaXRQcmVmaXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lk
dGggPSA0OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1RTBBNzZFMDJCOEZFRTQwMUMxQTUyNSAvKiBX
ZWJVUkxzV2l0aFRpdGxlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJVUkxzV2l0aFRpdGxlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjVFMEE3NkYwMkI4RkVFNDAxQzFB
NTI1IC8qIFdlYlVSTHNXaXRoVGl0bGVzLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdlYlVSTHNXaXRoVGl0bGVzLm07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlGNUY3MTcxRTAy
ODg0OTNDMDE4NjM1Q0EgLyogV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViTmV0c2NhcGVQbHVnaW5Q
YWNrYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMg
PSAwOyB9OwotCQlGNUY3MTcxRjAyODg0OTNDMDE4NjM1Q0EgLyogV2ViTmV0c2NhcGVQbHVnaW5Q
YWNrYWdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0g
NDsgcGF0aCA9IFdlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1RjcxNzIwMDI4ODQ5M0Mw
MTg2MzVDQSAvKiBXZWJQbHVnaW5EYXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsdWdpbkRhdGFiYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNUY3MTcyMTAy
ODg0OTNDMDE4NjM1Q0EgLyogV2ViUGx1Z2luRGF0YWJhc2UubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgZmls
ZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBwYXRoID0gV2ViUGx1Z2luRGF0YWJhc2Uu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9
OwotCQlGNUY3MTcyMzAyODg0OTNDMDE4NjM1Q0EgLyogbnBhcGkubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
ZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBwYXRoID0gbnBhcGkubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNUY3
MzJEMjAyRkY0RDRGMDFBODAxODAgLyogV2ViS2l0LmV4cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmV4cG9ydHM7IG5hbWUgPSBXZWJLaXQuZXhwOyBwYXRoID0gbWFjL1dlYktpdC5leHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gNDsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNzM4
QzlFOTAzRkFEM0RGMDMyMUZCRTAgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdv
cms7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9Q
Uk9EVUNUU19ESVI7IH07CiAJCUY3MzhDOUVBMDNGQUQzREYwMzIxRkJFMCAvKiBXZWJDb3JlLmZy
YW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHdyYXBwZXIuZnJhbWV3b3JrOyBwYXRoID0gV2ViQ29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC0xNjgyLDQ2ICsxNjAwLDYgQEAKIAkJCXRhYldp
ZHRoID0gNDsKIAkJCXVzZXNUYWJzID0gMDsKIAkJfTsKLQkJMUExRjkxNDMwRUNCQjE2RjAwNjM1
MURBIC8qIEhvc3RlZCAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAo
Ci0JCQkJMUE4REVENEUwRUU4OEI4QTAwRjI1MDIyIC8qIEhvc3RlZE5ldHNjYXBlUGx1Z2luU3Ry
ZWFtLmggKi8sCi0JCQkJMUE4REVENEYwRUU4OEI4QTAwRjI1MDIyIC8qIEhvc3RlZE5ldHNjYXBl
UGx1Z2luU3RyZWFtLm1tICovLAotCQkJCTFBQUY1Q0U0MEVEREUxRkUwMDhEODgzRCAvKiBOZXRz
Y2FwZVBsdWdpbkhvc3RNYW5hZ2VyLmggKi8sCi0JCQkJMUFBRjVDRTUwRURERTFGRTAwOEQ4ODNE
IC8qIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW0gKi8sCi0JCQkJMUFBRjVDRTYwRURERTFG
RTAwOEQ4ODNEIC8qIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5LmggKi8sCi0JCQkJMUFBRjVDRTcw
RURERTFGRTAwOEQ4ODNEIC8qIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tICovLAotCQkJCTFB
QUY1Q0U4MEVEREUxRkUwMDhEODgzRCAvKiBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkuaCAq
LywKLQkJCQkxQUFGNUNFOTBFRERFMUZFMDA4RDg4M0QgLyogTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5Lm1tICovLAotCQkJCTFBMkRCRTlEMEYyNTFFM0EwMDM2RjhBNiAvKiBQcm94eUluc3Rh
bmNlLmggKi8sCi0JCQkJMUEyREJFOUUwRjI1MUUzQTAwMzZGOEE2IC8qIFByb3h5SW5zdGFuY2Uu
bW0gKi8sCi0JCQkJRTE2OTgzNjExMTM0NkQxQjAwODk0MTE1IC8qIFByb3h5UnVudGltZU9iamVj
dC5oICovLAotCQkJCUUxNjk4MzZCMTEzNDZENTYwMDg5NDExNSAvKiBQcm94eVJ1bnRpbWVPYmpl
Y3QubW0gKi8sCi0JCQkJMUFBRjVGQkQwRURFM0E5MjAwOEQ4ODNEIC8qIFdlYkhvc3RlZE5ldHNj
YXBlUGx1Z2luVmlldy5oICovLAotCQkJCTFBQUY1RkJFMEVERTNBOTIwMDhEODgzRCAvKiBXZWJI
b3N0ZWROZXRzY2FwZVBsdWdpblZpZXcubW0gKi8sCi0JCQkJMUFBRjU4OEEwRURDQ0VBMzAwOEQ4
ODNEIC8qIFdlYktpdFBsdWdpbkFnZW50LmRlZnMgKi8sCi0JCQkJMUFBRjU4OEIwRURDQ0VBMzAw
OEQ4ODNEIC8qIFdlYktpdFBsdWdpbkFnZW50UmVwbHkuZGVmcyAqLywKLQkJCQkxQUFGNTg4QzBF
RENDRUEzMDA4RDg4M0QgLyogV2ViS2l0UGx1Z2luQ2xpZW50LmRlZnMgKi8sCi0JCQkJMUFBRjU4
OEQwRURDQ0VBMzAwOEQ4ODNEIC8qIFdlYktpdFBsdWdpbkhvc3QuZGVmcyAqLywKLQkJCQkxQUFG
NTg4RTBFRENDRUEzMDA4RDg4M0QgLyogV2ViS2l0UGx1Z2luSG9zdFR5cGVzLmRlZnMgKi8sCi0J
CQkJMUFBRjVEMDgwRURERTcxRDAwOEQ4ODNEIC8qIFdlYktpdFBsdWdpbkhvc3RUeXBlcy5oICov
LAotCQkJCTFBNzRBMjhDMEY0Rjc1NDAwMDgyRTIyOCAvKiBXZWJUZXh0SW5wdXRXaW5kb3dDb250
cm9sbGVyLmggKi8sCi0JCQkJMUE3NEEyOEQwRjRGNzU0MDAwODJFMjI4IC8qIFdlYlRleHRJbnB1
dFdpbmRvd0NvbnRyb2xsZXIubSAqLywKLQkJCSk7Ci0JCQlwYXRoID0gSG9zdGVkOwotCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJMUE5Qzc4MDMwRUJCQzQ1NTAwODU5OUQ0IC8q
IEV2ZW50cyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
MUFFQTY2RDIwREM2QjFGRjAwM0QxMkJGIC8qIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVy
LmggKi8sCi0JCQkJMUFFQTY2RDMwREM2QjFGRjAwM0QxMkJGIC8qIFdlYk5ldHNjYXBlUGx1Z2lu
RXZlbnRIYW5kbGVyLm1tICovLAotCQkJCTFBRUE2QTRFMERDOENFMkYwMDNEMTJCRiAvKiBXZWJO
ZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hLmggKi8sCi0JCQkJMUFFQTZBNEYwREM4Q0Uy
RjAwM0QxMkJGIC8qIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2EubW0gKi8sCi0J
CQkpOwotCQkJbmFtZSA9IEV2ZW50czsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07
CiAJCTFDNjhGNjNGMDk1QjVGOUMwMEMyOTg0RSAvKiBXZWJJbnNwZWN0b3IgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjAxOCwyNiArMTg5Niw2IEBACiAJ
CQlwYXRoID0gInVuaWZpZWQtc291cmNlcyI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwog
CQl9OwotCQk4NDhERkY0MTAzNjVGNkZCMDBDQTJBQ0EgLyogTmV0c2NhcGUgUGx1Zy1pbnMgKi8g
PSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTFBOUM3ODAzMEVC
QkM0NTUwMDg1OTlENCAvKiBFdmVudHMgKi8sCi0JCQkJMUExRjkxNDMwRUNCQjE2RjAwNjM1MURB
IC8qIEhvc3RlZCAqLywKLQkJCQlGNUY3MTcyMzAyODg0OTNDMDE4NjM1Q0EgLyogbnBhcGkubW0g
Ki8sCi0JCQkJMUE0REY1RTIwRUM4RDEwNDAwNkJENEI0IC8qIFdlYkJhc2VOZXRzY2FwZVBsdWdp
blZpZXcuaCAqLywKLQkJCQkxQTRERjVFMzBFQzhEMTA0MDA2QkQ0QjQgLyogV2ViQmFzZU5ldHNj
YXBlUGx1Z2luVmlldy5tbSAqLywKLQkJCQlGNUY3MTcxRTAyODg0OTNDMDE4NjM1Q0EgLyogV2Vi
TmV0c2NhcGVQbHVnaW5QYWNrYWdlLmggKi8sCi0JCQkJRjVGNzE3MUYwMjg4NDkzQzAxODYzNUNB
IC8qIFdlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5tbSAqLywKLQkJCQlGNUE2NzJCOTAyNjM4NjZF
MDEwMDAxMDIgLyogV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0uaCAqLywKLQkJCQlGNUE2NzJCQTAy
NjM4NjZFMDEwMDAxMDIgLyogV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0gKi8sCi0JCQkJMUE0
REY1MjAwRUM4Qzc0RDAwNkJENEI0IC8qIFdlYk5ldHNjYXBlUGx1Z2luVmlldy5oICovLAotCQkJ
CTFBNERGNTIxMEVDOEM3NEQwMDZCRDRCNCAvKiBXZWJOZXRzY2FwZVBsdWdpblZpZXcubW0gKi8s
Ci0JCQkJMUE3N0IwMkMwRUU3NzMwNTAwQzhBMUY5IC8qIFdlYlBsdWdpblJlcXVlc3QuaCAqLywK
LQkJCQkxQTc3QjAyRDBFRTc3MzA1MDBDOEExRjkgLyogV2ViUGx1Z2luUmVxdWVzdC5tICovLAot
CQkJKTsKLQkJCW5hbWUgPSAiTmV0c2NhcGUgUGx1Zy1pbnMiOwotCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKLQkJfTsKIAkJODQ4REZGNDMwMzY1RjcxNTAwQ0EyQUNBIC8qIFdlYktpdCBQbHVn
LWlucyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yNzE0
LDcgKzI1NzIsNiBAQAogCQlGNUVCQzQ1MjAyMTM0QkI2MDFDQTE1MjAgLyogUGx1Z2lucyAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJODQ4REZGNDEwMzY1
RjZGQjAwQ0EyQUNBIC8qIE5ldHNjYXBlIFBsdWctaW5zICovLAogCQkJCTg0OERGRjQzMDM2NUY3
MTUwMENBMkFDQSAvKiBXZWJLaXQgUGx1Zy1pbnMgKi8sCiAJCQkJODNFNEFGNDYwMzY2NTIxNTAw
MDBFNTA2IC8qIFdlYkJhc2VQbHVnaW5QYWNrYWdlLmggKi8sCiAJCQkJODNFNEFGNDcwMzY2NTIx
NTAwMDBFNTA2IC8qIFdlYkJhc2VQbHVnaW5QYWNrYWdlLm1tICovLApAQCAtMjk2MCwxMSArMjgx
Nyw3IEBACiAJCQkJOTNENDM3OTgxRDU3QUJFRjAwQUI4NUVBIC8qIERPTVhQYXRoUmVzdWx0SW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRDQzNzk5MUQ1N0FCRUYwMEFCODVFQSAvKiBF
eGNlcHRpb25IYW5kbGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2MDUxOTQxNzUwMkE1RDAw
QkM2MkY1IC8qIEhpc3RvcnlQcm9wZXJ0eUxpc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBOERF
RDUwMEVFODhCOEEwMEYyNTAyMiAvKiBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTM2NDAwNkYyMzk5NkU4MTAwMUUxODVFIC8qIEluUHJvY2Vzc0lEQlNl
cnZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUFBRjVDRUEwRURERTFGRTAwOEQ4ODNEIC8qIE5l
dHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBQUY1Q0VDMEVE
REUxRkUwMDhEODgzRCAvKiBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMUFBRjVDRUUwRURERTFGRTAwOEQ4ODNEIC8qIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNBNDZFNzgyMUYxNDUxRDAwQ0U4NkI0IC8qIE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbk1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE1MzFCRDgyMTg3
Qjk1NDAwMkUzRjgxIC8qIE5TVVJMRG93bmxvYWRTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
RDQzNzlCMUQ1N0FCRUYwMEFCODVFQSAvKiBPYmpDRXZlbnRMaXN0ZW5lci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yOTczLDggKzI4MjYsNiBAQAogCQkJCTVDRTQ0RjRBMjA2RDcwRUEwMDNFRkQwMSAv
KiBQaW5nSGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTBDMUQ1RjE4MjAzMDBFMDAzNjg4
M0EgLyogUG9wdXBNZW51SU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzAxQ0I4NTE3MzQzNUM5
MDBDNUQ4MDcgLyogUG9wdXBNZW51TWFjLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTJEQkU5RjBG
MjUxRTNBMDAzNkY4QTYgLyogUHJveHlJbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTE2
OTgzNjIxMTM0NkQxQjAwODk0MTE1IC8qIFByb3h5UnVudGltZU9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTEwQzFENjIxODIwMzAwRTAwMzY4ODNBIC8qIFNlYXJjaFBvcHVwTWVudUlPUy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJN0MwMUNCODcxNzM0MzVDOTAwQzVEODA3IC8qIFNlYXJjaFBv
cHVwTWVudU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2QjMxMzIxQTUxRjNBOTAwNDIyOTc1
IC8qIFN0b3JhZ2VBcmVhSW1wbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTk3LDcgKzI4NDgsNiBA
QAogCQkJCTkzOTgxMDExMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJCYWNrRm9yd2FyZExpc3QuaCBp
biBIZWFkZXJzICovLAogCQkJCTUxQzcxNEZCMEIyMEY3OUYwMEU1RTMzQyAvKiBXZWJCYWNrRm9y
d2FyZExpc3RJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjJGMjE5Q0MwOEQyMzY3MzAw
MzBFMDc4IC8qIFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTFBNERGNUU0MEVDOEQxMDQwMDZCRDRCNCAvKiBXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTAyRTA4MjRCRjAxMDA4REYwMzggLyogV2ViQmFzZVBs
dWdpblBhY2thZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2MDEzNUU1MjY5RkFEMzEwMDdBOEE5
NSAvKiBXZWJCcm9hZGNhc3RDaGFubmVsUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTUy
NDFBREY1MEIxQkM0OEEwMDQwMTJCRCAvKiBXZWJDYWNoZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
MDgxLDcgKzI5MzEsNiBAQAogCQkJCTkzOTgxMDYzMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJIaXN0
b3J5SXRlbUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUZEQzREMzBCMEFGNUMxMDBG
ODRFQjMgLyogV2ViSGlzdG9yeUl0ZW1Qcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4
MTAxNDA4MjRCRjAxMDA4REYwMzggLyogV2ViSGlzdG9yeVByaXZhdGUuaCBpbiBIZWFkZXJzICov
LAotCQkJCTFBQUY1RkJGMEVERTNBOTIwMDhEODgzRCAvKiBXZWJIb3N0ZWROZXRzY2FwZVBsdWdp
blZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDU1MDgyNEJGMDEwMDhERjAzOCAvKiBX
ZWJIVE1MUmVwcmVzZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDU2MDgyNEJG
MDEwMDhERjAzOCAvKiBXZWJIVE1MUmVwcmVzZW50YXRpb25Qcml2YXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5Mzk4MTA1NzA4MjRCRjAxMDA4REYwMzggLyogV2ViSFRNTFZpZXcuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzEwMiw3ICsyOTUxLDYgQEAKIAkJCQlDRDhCRkNFODE1NTMxMjI0MDA1QUZC
MjUgLyogV2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4
MTAxRDA4MjRCRjAxMDA4REYwMzggLyogV2ViS2l0TG9nZ2luZy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTM5ODEwMUUwODI0QkYwMTAwOERGMDM4IC8qIFdlYktpdE5TU3RyaW5nRXh0cmFzLmggaW4g
SGVhZGVycyAqLywKLQkJCQkxQUFGNUQwOTBFRERFNzFEMDA4RDg4M0QgLyogV2ViS2l0UGx1Z2lu
SG9zdFR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA0NzA4MjRCRjAxMDA4REYwMzgg
LyogV2ViS2l0UHJlZml4LmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTAxRjA4MjRCRjAxMDA4
REYwMzggLyogV2ViS2l0U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwMjAw
ODI0QkYwMTAwOERGMDM4IC8qIFdlYktpdFN0YXRpc3RpY3NQcml2YXRlLmggaW4gSGVhZGVycyAq
LywKQEAgLTMxMTQsMTEgKzI5NjIsNiBAQAogCQkJCTA3MkU1RjQ1MUFCRjg4NzUwMDAzQjE2NCAv
KiBXZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTBD
MUQ3MjE4MjAzMDBFMDAzNjg4M0EgLyogV2ViTUlNRVR5cGVSZWdpc3RyeS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTE4NUY2MjYxMDcxMkI4MDAwN0FBMzkzIC8qIFdlYk5hdmlnYXRpb25EYXRhLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkxQUVBNjZENDBEQzZCMUZGMDAzRDEyQkYgLyogV2ViTmV0c2Nh
cGVQbHVnaW5FdmVudEhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBRUE2QTUwMERDOENF
MkYwMDNEMTJCRiAvKiBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk5Mzk4MTAzMTA4MjRCRjAxMDA4REYwMzggLyogV2ViTmV0c2NhcGVQbHVn
aW5QYWNrYWdlLmggaW4gSGVhZGVycyAqLywKLQkJCQk5Mzk4MTAyQjA4MjRCRjAxMDA4REYwMzgg
LyogV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0uaCBpbiBIZWFkZXJzICovLAotCQkJCTFBNERGNTIy
MEVDOEM3NEQwMDZCRDRCNCAvKiBXZWJOZXRzY2FwZVBsdWdpblZpZXcuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFDNjhGNjZGMDk1QjVGQzEwMEMyOTg0RSAvKiBXZWJOb2RlSGlnaGxpZ2h0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNTY4N0JEQTEzNUI3OTFBMDA3NENCQ0IgLyogV2ViTm9kZUhpZ2hs
aWdodGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzY4RjY3MTA5NUI1RkMxMDBDMjk4NEUgLyog
V2ViTm9kZUhpZ2hsaWdodFZpZXcuaCBpbiBIZWFkZXJzICovLApAQCAtMzE2Miw3ICszMDA1LDYg
QEAKIAkJCQkxQTA4RkVFMTFENTkzNzZFMDA4QkE4Q0IgLyogV2ViUGx1Z2luSW5mb1Byb3ZpZGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTAzOTA4MjRCRjAxMDA4REYwMzggLyogV2ViUGx1
Z2luUGFja2FnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3QTExQjExODBEQzg0ODAwRTU0OThD
IC8qIFdlYlBsdWdpblBhY2thZ2VQcml2YXRlLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTc3QjAy
RTBFRTc3MzA1MDBDOEExRjkgLyogV2ViUGx1Z2luUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTM5ODEwM0EwODI0QkYwMTAwOERGMDM4IC8qIFdlYlBsdWdpblZpZXdGYWN0b3J5LmggaW4g
SGVhZGVycyAqLywKIAkJCQk5Mzk4MTBBQzA4MjRCRjAxMDA4REYwMzggLyogV2ViUGx1Z2luVmll
d0ZhY3RvcnlQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA3MjA4MjRCRjAxMDA4
REYwMzggLyogV2ViUG9saWN5RGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzE5Nyw3ICsz
MDM5LDYgQEAKIAkJCQk5Mzk4MTAyNzA4MjRCRjAxMDA4REYwMzggLyogV2ViU3RyaW5nVHJ1bmNh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMTFFQkY0MjIxNDE5Q0NFMDBENjU5RTcgLyogV2Vi
U3dpdGNoaW5nR1BVQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzZBMkRFQTBGRDJEMDg0
MDBEMzEyREIgLyogV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywK
LQkJCQkxQTc0QTI4RTBGNEY3NTQwMDA4MkUyMjggLyogV2ViVGV4dElucHV0V2luZG93Q29udHJv
bGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjgzNEFBRDcwRTY0QjFDNzAwRTI3MzdDIC8qIFdl
YlRleHRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwNzUwODI0QkYwMTAwOERG
MDM4IC8qIFdlYlVJRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDgzMDgyNEJG
MDEwMDhERjAzOCAvKiBXZWJVSURlbGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
NTQyLDE2ICszMzgzLDkgQEAKIAkJCQkxQTYwNTE5MTE3NTAyQTVEMDBCQzYyRjUgLyogQmluYXJ5
UHJvcGVydHlMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI4Mjk1OEQ0MTMyNzA3RDAwMDBE
MEU3OSAvKiBDb3JyZWN0aW9uUGFuZWwubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTYwNTE5MzE3
NTAyQTVEMDBCQzYyRjUgLyogSGlzdG9yeVByb3BlcnR5TGlzdC5tbSBpbiBTb3VyY2VzICovLAot
CQkJCTFBOERFRDUxMEVFODhCOEEwMEYyNTAyMiAvKiBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVh
bS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzNjQwMDZFMjM5OTZFODEwMDFFMTg1RSAvKiBJblBy
b2Nlc3NJREJTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUFBRjVDRUIwRURERTFGRTAw
OEQ4ODNEIC8qIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW0gaW4gU291cmNlcyAqLywKLQkJ
CQkxQUFGNUNFRDBFRERFMUZFMDA4RDg4M0QgLyogTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0g
aW4gU291cmNlcyAqLywKLQkJCQkxQUFGNUNFRjBFRERFMUZFMDA4RDg4M0QgLyogTmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJOTM5ODEwREQwODI0QkYw
MTAwOERGMDM4IC8qIG5wYXBpLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTEwQzFENjAxODIwMzAw
RTAwMzY4ODNBIC8qIFBvcHVwTWVudUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVDNDBDRDIx
MjJEOEY5QzAwMEU5REFENSAvKiBQb3B1cE1lbnVNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQkx
QTJEQkVBMDBGMjUxRTNBMDAzNkY4QTYgLyogUHJveHlJbnN0YW5jZS5tbSBpbiBTb3VyY2VzICov
LAotCQkJCUUxNjk4MzZDMTEzNDZENTYwMDg5NDExNSAvKiBQcm94eVJ1bnRpbWVPYmplY3QubW0g
aW4gU291cmNlcyAqLywKIAkJCQlBMTBDMUQ2MTE4MjAzMDBFMDAzNjg4M0EgLyogU2VhcmNoUG9w
dXBNZW51SU9TLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNDBDRDIyMjJEOEY5QzMwMEU5REFE
NSAvKiBTZWFyY2hQb3B1cE1lbnVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTZCMzEzMTFB
NTFGM0E5MDA0MjI5NzUgLyogU3RvcmFnZUFyZWFJbXBsLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MzU4OSw3ICszNDIzLDYgQEAKIAkJCQlDRURBMTJEQjE1MkNCRTY4MDBEOUUwOEQgLyogV2ViQWx0
ZXJuYXRpdmVUZXh0Q2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODExMUQwODI0QkYw
MTAwOERGMDM4IC8qIFdlYkFyY2hpdmUubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTBDRjA4
MjRCRjAxMDA4REYwMzggLyogV2ViQXV0aGVudGljYXRpb25QYW5lbC5tIGluIFNvdXJjZXMgKi8s
Ci0JCQkJMUE0REY1RTUwRUM4RDEwNDAwNkJENEI0IC8qIFdlYkJhc2VOZXRzY2FwZVBsdWdpblZp
ZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MjQxQURGNjBCMUJDNDhBMDA0MDEyQkQgLyogV2Vi
Q2FjaGUubW0gaW4gU291cmNlcyAqLywKIAkJCQkxNEQ4MjUzMDBBRjk1NTA5MDAwNEYwNTcgLyog
V2ViQ2hyb21lQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTEwQzFENjUxODIwMzAwRTAw
MzY4ODNBIC8qIFdlYkNocm9tZUNsaWVudElPUy5tbSBpbiBTb3VyY2VzICovLApAQCAtMzYzMSw3
ICszNDY0LDYgQEAKIAkJCQlBMTBDMUQzNzE4MjAyRkM1MDAzNjg4M0EgLyogV2ViR2VvbG9jYXRp
b25Qcm92aWRlcklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMTEzMDgyNEJGMDEwMDhE
RjAzOCAvKiBXZWJIaXN0b3J5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwQkQwODI0QkYw
MTAwOERGMDM4IC8qIFdlYkhpc3RvcnlJdGVtLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMUFBRjVG
QzAwRURFM0E5MjAwOEQ4ODNEIC8qIFdlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTkzOTgxMEYzMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJIVE1MUmVwcmVz
ZW50YXRpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTBDMTA4MjRCRjAxMDA4REYwMzgg
LyogV2ViSWNvbkRhdGFiYXNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU2MDk0NjcxNEQ4QUQy
NjAwNzk5QThBIC8qIFdlYkluZGljYXRlTGF5ZXIubW0gaW4gU291cmNlcyAqLywKQEAgLTM2NDYs
OSArMzQ3OCw2IEBACiAJCQkJOTM5ODEwQzMwODI0QkYwMTAwOERGMDM4IC8qIFdlYktpdExvZ2dp
bmcubSBpbiBTb3VyY2VzICovLAogCQkJCTFDRjE4RjQxMjZCQjcxQjcwMDRCMTcyMiAvKiBXZWJL
aXRMb2dJbml0aWFsaXphdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMEM0MDgyNEJG
MDEwMDhERjAzOCAvKiBXZWJLaXROU1N0cmluZ0V4dHJhcy5tbSBpbiBTb3VyY2VzICovLAotCQkJ
CTFBQUY1RDBGMEVEREU3QTcwMDhEODgzRCAvKiBXZWJLaXRQbHVnaW5BZ2VudC5kZWZzIGluIFNv
dXJjZXMgKi8sCi0JCQkJMUFBRjVEMDAwRURERTYwNDAwOEQ4ODNEIC8qIFdlYktpdFBsdWdpbkNs
aWVudC5kZWZzIGluIFNvdXJjZXMgKi8sCi0JCQkJMUFBRjVDRjEwRURERTU4NjAwOEQ4ODNEIC8q
IFdlYktpdFBsdWdpbkhvc3QuZGVmcyBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMEM1MDgyNEJG
MDEwMDhERjAzOCAvKiBXZWJLaXRTdGF0aXN0aWNzLm0gaW4gU291cmNlcyAqLywKIAkJCQk1MTIw
QzgyQzFFNTRDRThBMDAyNUIyNTAgLyogV2ViS2l0VmVyc2lvbkNoZWNrcy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUVENUI5NTI0MTExQjcyNUEwMDQ3MjI5OCAvKiBXZWJMb2NhbGl6YWJsZVN0cmlu
Z3MubW0gaW4gU291cmNlcyAqLywKQEAgLTM2NTcsMTEgKzM0ODYsNiBAQAogCQkJCTA3MkU1RjQ2
MUFCRjg4NzUwMDAzQjE2NCAvKiBXZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTEwQzFENzMxODIwMzAwRTAwMzY4ODNBIC8qIFdlYk1JTUVUeXBlUmVn
aXN0cnkubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTg1RjYyODEwNzEyQjk3MDA3QUEzOTMgLyog
V2ViTmF2aWdhdGlvbkRhdGEubW0gaW4gU291cmNlcyAqLywKLQkJCQkxQUVBNjZENTBEQzZCMUZG
MDAzRDEyQkYgLyogV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXIubW0gaW4gU291cmNlcyAq
LywKLQkJCQkxQUVBNkE1MTBEQzhDRTJGMDAzRDEyQkYgLyogV2ViTmV0c2NhcGVQbHVnaW5FdmVu
dEhhbmRsZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovLAotCQkJCTkzOTgxMEQ2MDgyNEJGMDEwMDhE
RjAzOCAvKiBXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UubW0gaW4gU291cmNlcyAqLywKLQkJCQk5
Mzk4MTBEMTA4MjRCRjAxMDA4REYwMzggLyogV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0gaW4g
U291cmNlcyAqLywKLQkJCQkxQTRERjUyMzBFQzhDNzREMDA2QkQ0QjQgLyogV2ViTmV0c2NhcGVQ
bHVnaW5WaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM2OEY2NzAwOTVCNUZDMTAwQzI5ODRF
IC8qIFdlYk5vZGVIaWdobGlnaHQubW0gaW4gU291cmNlcyAqLywKIAkJCQlBNTY4N0JEQjEzNUI3
OTFBMDA3NENCQ0IgLyogV2ViTm9kZUhpZ2hsaWdodGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUM2OEY2NzIwOTVCNUZDMTAwQzI5ODRFIC8qIFdlYk5vZGVIaWdobGlnaHRWaWV3Lm1tIGluIFNv
dXJjZXMgKi8sCkBAIC0zNjkyLDcgKzM1MTYsNiBAQAogCQkJCTFBQTg3OUI3MTFDQkU5QkYwMDND
NjY0RiAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTA4
RkVFMDFENTkzNzZFMDA4QkE4Q0IgLyogV2ViUGx1Z2luSW5mb1Byb3ZpZGVyLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTM5ODEwREMwODI0QkYwMTAwOERGMDM4IC8qIFdlYlBsdWdpblBhY2thZ2Uu
bW0gaW4gU291cmNlcyAqLywKLQkJCQkxQTc3QjAyRjBFRTc3MzA1MDBDOEExRjkgLyogV2ViUGx1
Z2luUmVxdWVzdC5tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODExMDgwODI0QkYwMTAwOERGMDM4
IC8qIFdlYlBvbGljeURlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwRjgwODI0
QkYwMTAwOERGMDM4IC8qIFdlYlByZWZlcmVuY2VzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0Mw
MjNBMjQyNTFCQTQzRTAwQkE3QkI2IC8qIFdlYlByZWZlcmVuY2VzRGVmYXVsdFZhbHVlcy5tbSBp
biBTb3VyY2VzICovLApAQCAtMzcwOSw3ICszNTMyLDYgQEAKIAkJCQk5Mzk4MTBDQzA4MjRCRjAx
MDA4REYwMzggLyogV2ViU3RyaW5nVHJ1bmNhdG9yLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzEx
RUJGNDEyMTQxOUNDRTAwRDY1OUU3IC8qIFdlYlN3aXRjaGluZ0dQVUNsaWVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5MzZBMkRFODBGRDJEMDgwMDBEMzEyREIgLyogV2ViVGV4dENvbXBsZXRp
b25Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMUE3NEEyOEYwRjRGNzU0MDAwODJF
MjI4IC8qIFdlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIubSBpbiBTb3VyY2VzICovLAogCQkJ
CUY4MzRBQUQ4MEU2NEIxQzcwMEUyNzM3QyAvKiBXZWJUZXh0SXRlcmF0b3IubW0gaW4gU291cmNl
cyAqLywKIAkJCQlBMTBDMUQzRTE4MjAyRkM1MDAzNjg4M0EgLyogV2ViVUlLaXRTdXBwb3J0Lm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwQkUwODI0QkYwMTAwOERGMDM4IC8qIFdlYlVSTHNX
aXRoVGl0bGVzLm0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1BsdWdpbnMvSG9zdGVkL0hvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtLmggYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9Ib3N0ZWROZXRzY2FwZVBsdWdpblN0
cmVhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTIwMGVjZDkxOTI2OGMzNDA3
ZDkxOWMwNjY3MThjOTMyNDYxNGRhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL0hvc3Rl
ZE5ldHNjYXBlUGx1Z2luU3RyZWFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWYgVVNFKFBM
VUdJTl9IT1NUX1BST0NFU1MpCi0KLSNpZm5kZWYgSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW1f
aAotI2RlZmluZSBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbV9oCi0KLSNpbmNsdWRlIDxXZWJD
b3JlL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmg+Ci0jaW5jbHVkZSA8V2ViS2l0TGVnYWN5
L25wYXBpLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZi5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEZyYW1lTG9hZGVyOwotICAgIGNsYXNz
IE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
Y2xhc3MgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OwotCi1jbGFzcyBIb3N0ZWROZXRzY2Fw
ZVBsdWdpblN0cmVhbSA6IHB1YmxpYyBSZWZDb3VudGVkPEhvc3RlZE5ldHNjYXBlUGx1Z2luU3Ry
ZWFtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwcml2YXRlIFdlYkNvcmU6
Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtPiBjcmVhdGUoTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5KiBpbnN0YW5jZSwgdWludDMyX3Qgc3RyZWFtSUQsIE5TVVJMUmVxdWVzdCAqcmVx
dWVzdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEhvc3RlZE5ldHNjYXBl
UGx1Z2luU3RyZWFtKGluc3RhbmNlLCBzdHJlYW1JRCwgcmVxdWVzdCkpOwotICAgIH0KLSAgICBz
dGF0aWMgUmVmPEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtPiBjcmVhdGUoTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZSwgV2ViQ29yZTo6RnJhbWVMb2FkZXIqIGZyYW1lTG9h
ZGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSG9zdGVkTmV0c2NhcGVQ
bHVnaW5TdHJlYW0oaW5zdGFuY2UsIGZyYW1lTG9hZGVyKSk7Ci0gICAgfQotCi0gICAgfkhvc3Rl
ZE5ldHNjYXBlUGx1Z2luU3RyZWFtKCk7Ci0KLSAgICB1aW50MzJfdCBzdHJlYW1JRCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RyZWFtSUQ7IH0KLQotICAgIHZvaWQgc3RhcnRTdHJlYW1XaXRoUmVzcG9u
c2UoTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UpOwotCi0gICAgLy8gRklYTUU6IENhbiB0aGVzZSBi
ZSBtYWRlIHByaXZhdGU/Ci0gICAgdm9pZCBkaWRSZWNlaXZlRGF0YShXZWJDb3JlOjpOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBpbnQgbGVuZ3RoKSBv
dmVycmlkZTsKLSAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoV2ViQ29yZTo6TmV0c2NhcGVQbHVn
SW5TdHJlYW1Mb2FkZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEZhaWwoV2ViQ29yZTo6TmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJikg
b3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHN0YXJ0KCk7Ci0gICAgdm9pZCBzdG9wKCk7Ci0KLSAgICB2
b2lkIGNhbmNlbExvYWQoTlBSZWFzb24gcmVhc29uKTsKLQotICAgIHN0YXRpYyBOUFJlYXNvbiBy
ZWFzb25Gb3JFcnJvcihOU0Vycm9yKiBlcnJvcik7Ci0KLXByaXZhdGU6Ci0gICAgTlNFcnJvciAq
ZXJyb3JGb3JSZWFzb24oTlBSZWFzb24pIGNvbnN0OwotICAgIHZvaWQgY2FuY2VsTG9hZChOU0Vy
cm9yICopOwotCi0gICAgSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0oTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5KiwgdWludDMyX3Qgc3RyZWFtSUQsIE5TVVJMUmVxdWVzdCAqKTsKLSAgICBI
b3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbShOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkqLCBX
ZWJDb3JlOjpGcmFtZUxvYWRlciopOwotICAgIAotICAgIHZvaWQgc3RhcnRTdHJlYW0oTlNVUkwg
KiwgbG9uZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0aCwgTlNEYXRlICpsYXN0TW9kaWZpZWRE
YXRlLCBOU1N0cmluZyAqbWltZVR5cGUsIE5TRGF0YSAqaGVhZGVycyk7Ci0KLSAgICBOU0Vycm9y
ICpwbHVnaW5DYW5jZWxsZWRDb25uZWN0aW9uRXJyb3IoKSBjb25zdDsKLQotICAgIC8vIE5ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50IG1ldGhvZHMuCi0gICAgdm9pZCB3aWxsU2VuZFJl
cXVlc3QoV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RS
ZXNwb25zZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
Jik+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNvcmU6Ok5l
dHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYpIG92ZXJyaWRlOwotICAgIGJvb2wgd2FudHNBbGxTdHJlYW1zKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgCi0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eT4gbV9pbnN0YW5j
ZTsKLSAgICB1aW50MzJfdCBtX3N0cmVhbUlEOwotICAgIFJldGFpblB0cjxOU011dGFibGVVUkxS
ZXF1ZXN0PiBtX3JlcXVlc3Q7Ci0KLSAgICBSZXRhaW5QdHI8TlNVUkw+IG1fcmVxdWVzdFVSTDsK
LSAgICBSZXRhaW5QdHI8TlNVUkw+IG1fcmVzcG9uc2VVUkw7Ci0gICAgUmV0YWluUHRyPE5TU3Ry
aW5nPiBtX21pbWVUeXBlOwotCi0gICAgV2ViQ29yZTo6RnJhbWVMb2FkZXIqIG1fZnJhbWVMb2Fk
ZXI7Ci0gICAgUmVmUHRyPFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBtX2xv
YWRlcjsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtX2gK
LSNlbmRpZiAvLyBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL0hvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFt
Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvSG9zdGVkTmV0c2Nh
cGVQbHVnaW5TdHJlYW0ubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZmI5YWRh
ZjcxODMwNGFjZTYwNDU5ZDhmNmVmMmI0MWQ5YjIyNGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9I
b3N0ZWQvSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0KKysrIC9kZXYvbnVsbApAQCAtMSwy
ODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaWYgVVNFKFBMVUdJTl9IT1NUX1BST0NFU1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQotCi0jaW1wb3J0ICJIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbS5oIgotCi0jaW1wb3J0
ICJOZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5oIgotI2ltcG9ydCAiTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5LmgiCi0jaW1wb3J0ICJXZWJGcmFtZUludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJI
b3N0ZWROZXRzY2FwZVBsdWdpblZpZXcuaCIKLSNpbXBvcnQgIldlYktpdEVycm9yc1ByaXZhdGUu
aCIKLSNpbXBvcnQgIldlYktpdFBsdWdpbkhvc3QuaCIKLSNpbXBvcnQgIldlYk5TVVJMRXh0cmFz
LmgiCi0jaW1wb3J0ICJXZWJOU1VSTFJlcXVlc3RFeHRyYXMuaCIKLSNpbXBvcnQgIldlYlJlc291
cmNlTG9hZFNjaGVkdWxlci5oIgotI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudC5oPgotI2ltcG9y
dCA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgot
I2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9y
bVN0cmF0ZWdpZXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KLSNpbXBv
cnQgPFdlYkNvcmUvU2VjdXJpdHlQb2xpY3kuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVVS
TFJlc3BvbnNlLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgotI2ltcG9y
dCA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+Ci0jaW1wb3J0IDx3dGYvUmVmQ291bnRlZExlYWtD
b3VudGVyLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotREVGSU5FX0RFQlVHX09OTFlfR0xPQkFMKFdURjo6UmVmQ291bnRlZExlYWtDb3VudGVy
LCBob3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbUNvdW50ZXIsICgiSG9zdGVkTmV0c2NhcGVQbHVn
aW5TdHJlYW0iKSk7Ci0KLUhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtOjpIb3N0ZWROZXRzY2Fw
ZVBsdWdpblN0cmVhbShOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIGluc3RhbmNlLCB1aW50
MzJfdCBzdHJlYW1JRCwgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0KQotICAgIDogbV9pbnN0YW5jZShp
bnN0YW5jZSkKLSAgICAsIG1fc3RyZWFtSUQoc3RyZWFtSUQpCi0gICAgLCBtX3JlcXVlc3QoYWRv
cHROUyhbcmVxdWVzdCBtdXRhYmxlQ29weV0pKQotICAgICwgbV9yZXF1ZXN0VVJMKFtyZXF1ZXN0
IFVSTF0pCi0gICAgLCBtX2ZyYW1lTG9hZGVyKDApCi17Ci0gICAgU3RyaW5nIHJlZmVycmVyID0g
U2VjdXJpdHlQb2xpY3k6OmdlbmVyYXRlUmVmZXJyZXJIZWFkZXIoY29yZShbaW5zdGFuY2UtPnBs
dWdpblZpZXcoKSB3ZWJGcmFtZV0pLT5kb2N1bWVudCgpLT5yZWZlcnJlclBvbGljeSgpLCBbcmVx
dWVzdCBVUkxdLCBjb3JlKFtpbnN0YW5jZS0+cGx1Z2luVmlldygpIHdlYkZyYW1lXSktPmxvYWRl
cigpLm91dGdvaW5nUmVmZXJyZXIoKSk7Ci0gICAgaWYgKHJlZmVycmVyLmlzRW1wdHkoKSkKLSAg
ICAgICAgW21fcmVxdWVzdC5nZXQoKSBfd2ViX3NldEhUVFBSZWZlcnJlcjpuaWxdOwotICAgIGVs
c2UKLSAgICAgICAgW21fcmVxdWVzdC5nZXQoKSBfd2ViX3NldEhUVFBSZWZlcnJlcjpyZWZlcnJl
cl07Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgaG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW1Db3Vu
dGVyLmluY3JlbWVudCgpOwotI2VuZGlmCi19Ci0KLUhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFt
OjpIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbShOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkq
IGluc3RhbmNlLCBXZWJDb3JlOjpGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIpCi0gICAgOiBtX2lu
c3RhbmNlKGluc3RhbmNlKQotICAgICwgbV9zdHJlYW1JRCgxKQotICAgICwgbV9mcmFtZUxvYWRl
cihmcmFtZUxvYWRlcikKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgaG9zdGVkTmV0c2NhcGVQbHVn
aW5TdHJlYW1Db3VudGVyLmluY3JlbWVudCgpOwotI2VuZGlmCi19Ci0KLUhvc3RlZE5ldHNjYXBl
UGx1Z2luU3RyZWFtOjp+SG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0oKQotewotI2lmbmRlZiBO
REVCVUcKLSAgICBob3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbUNvdW50ZXIuZGVjcmVtZW50KCk7
Ci0jZW5kaWYKLX0KLQotdm9pZCBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbTo6c3RhcnRTdHJl
YW1XaXRoUmVzcG9uc2UoTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UpCi17Ci0gICAgZGlkUmVjZWl2
ZVJlc3BvbnNlKDAsIHJlc3BvbnNlKTsKLX0KLSAgICAKLXZvaWQgSG9zdGVkTmV0c2NhcGVQbHVn
aW5TdHJlYW06OnN0YXJ0U3RyZWFtKE5TVVJMICpyZXNwb25zZVVSTCwgbG9uZyBsb25nIGV4cGVj
dGVkQ29udGVudExlbmd0aCwgTlNEYXRlICpsYXN0TW9kaWZpZWREYXRlLCBOU1N0cmluZyAqbWlt
ZVR5cGUsIE5TRGF0YSAqaGVhZGVycykKLXsKLSAgICBtX3Jlc3BvbnNlVVJMID0gcmVzcG9uc2VV
Ukw7Ci0gICAgbV9taW1lVHlwZSA9IG1pbWVUeXBlOwotCi0gICAgY2hhciogbWltZVR5cGVVVEY4
ID0gY29uc3RfY2FzdDxjaGFyKj4oW21pbWVUeXBlIFVURjhTdHJpbmddKTsKLSAgICBpbnQgbWlt
ZVR5cGVVVEY4TGVuZ3RoID0gbWltZVR5cGVVVEY4ID8gc3RybGVuIChtaW1lVHlwZVVURjgpICsg
MSA6IDA7Ci0gICAgCi0gICAgY29uc3QgY2hhciAqdXJsID0gW3Jlc3BvbnNlVVJMIF93ZWJfVVJM
Q1N0cmluZ107Ci0gICAgaW50IHVybExlbmd0aCA9IHVybCA/IHN0cmxlbih1cmwpICsgMSA6IDA7
Ci0gICAgCi0gICAgX1dLUEhTdGFydFN0cmVhbShtX2luc3RhbmNlLT5ob3N0UHJveHkoKS0+cG9y
dCgpLAotICAgICAgICAgICAgICAgICAgICAgbV9pbnN0YW5jZS0+cGx1Z2luSUQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgIG1fc3RyZWFtSUQsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdF9j
YXN0PGNoYXIqPih1cmwpLCB1cmxMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICBleHBlY3Rl
ZENvbnRlbnRMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICBbbGFzdE1vZGlmaWVkRGF0ZSB0
aW1lSW50ZXJ2YWxTaW5jZTE5NzBdLAotICAgICAgICAgICAgICAgICAgICAgbWltZVR5cGVVVEY4
LCBtaW1lVHlwZVVURjhMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PGNo
YXIqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihbaGVhZGVycyBieXRlc10pKSwgW2hl
YWRlcnMgbGVuZ3RoXSk7Ci19Ci0gICAgICAgICAgICAgICAgICAgICAKLXZvaWQgSG9zdGVkTmV0
c2NhcGVQbHVnaW5TdHJlYW06OmRpZFJlY2VpdmVEYXRhKFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyKiwgY29uc3QgdWludDhfdCogYnl0ZXMsIGludCBsZW5ndGgpCi17Ci0gICAg
X1dLUEhTdHJlYW1EaWRSZWNlaXZlRGF0YShtX2luc3RhbmNlLT5ob3N0UHJveHkoKS0+cG9ydCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnN0YW5jZS0+cGx1Z2luSUQoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RyZWFtSUQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PGNoYXIqPihyZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPihieXRlcykpLCBsZW5ndGgpOwotfQotICAgIAotdm9pZCBIb3N0ZWROZXRzY2FwZVBs
dWdpblN0cmVhbTo6ZGlkRmluaXNoTG9hZGluZyhXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVh
bUxvYWRlciopCi17Ci0gICAgX1dLUEhTdHJlYW1EaWRGaW5pc2hMb2FkaW5nKG1faW5zdGFuY2Ut
Pmhvc3RQcm94eSgpLT5wb3J0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aW5zdGFuY2UtPnBsdWdpbklEKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
c3RyZWFtSUQpOwotICAgIG1faW5zdGFuY2UtPmRpc2Nvbm5lY3RTdHJlYW0odGhpcyk7Ci19Ci0K
LXZvaWQgSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW06OndpbGxTZW5kUmVxdWVzdChOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYmKT4mJiBjYWxsYmFjaykKLXsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdGlm
eSB0aGUgcGx1Zy1pbiB3aXRoIE5QUF9VUkxSZWRpcmVjdE5vdGlmeSBoZXJlLgotICAgIGNhbGxi
YWNrKFdURk1vdmUocmVxdWVzdCkpOwotfQotCi12b2lkIEhvc3RlZE5ldHNjYXBlUGx1Z2luU3Ry
ZWFtOjpkaWRSZWNlaXZlUmVzcG9uc2UoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBOU1VSTFJlc3BvbnNlICpyID0g
cmVzcG9uc2UubnNVUkxSZXNwb25zZSgpOwotICAgIAotICAgIE5TTXV0YWJsZURhdGEgKnRoZUhl
YWRlcnMgPSBuaWw7Ci0gICAgbG9uZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0aCA9IFtyIGV4
cGVjdGVkQ29udGVudExlbmd0aF07Ci0gICAgCi0gICAgaWYgKFtyIGlzS2luZE9mQ2xhc3M6W05T
SFRUUFVSTFJlc3BvbnNlIGNsYXNzXV0pIHsKLSAgICAgICAgTlNIVFRQVVJMUmVzcG9uc2UgKmh0
dHBSZXNwb25zZSA9IChOU0hUVFBVUkxSZXNwb25zZSAqKXI7Ci0gICAgICAgIHRoZUhlYWRlcnMg
PSBbTlNNdXRhYmxlRGF0YSBkYXRhV2l0aENhcGFjaXR5OjEwMjRdOwotICAgICAgICAKLSAgICAg
ICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIG5pY2UgdG8gYmUgYWJsZSB0byBnZXQgdGhlIHJhdyBI
VFRQIGhlYWRlciBibG9jay4KLSAgICAgICAgLy8gVGhpcyBpbmNsdWRlcyB0aGUgSFRUUCB2ZXJz
aW9uLCB0aGUgcmVhbCBzdGF0dXMgdGV4dCwKLSAgICAgICAgLy8gYWxsIGhlYWRlcnMgaW4gdGhl
aXIgb3JpZ2luYWwgb3JkZXIgYW5kIGluY2x1ZGluZyBkdXBsaWNhdGVzLAotICAgICAgICAvLyBh
bmQgYWxsIG9yaWdpbmFsIGJ5dGVzIHZlcmJhdGltLCByYXRoZXIgdGhhbiBzZW50IHRocm91Z2gg
VW5pY29kZSB0cmFuc2xhdGlvbi4KLSAgICAgICAgLy8gVW5mb3J0dW5hdGVseSBOU0hUVFBVUkxS
ZXNwb25zZSBkb2Vzbid0IHByb3ZpZGUgYWNjZXNzIGF0IHRoYXQgbG93IGEgbGV2ZWwuCi0gICAg
ICAgIAotICAgICAgICBbdGhlSGVhZGVycyBhcHBlbmRCeXRlczoiSFRUUCAiIGxlbmd0aDo1XTsK
LSAgICAgICAgY2hhciBzdGF0dXNTdHJbMTBdOwotICAgICAgICBsb25nIHN0YXR1c0NvZGUgPSBb
aHR0cFJlc3BvbnNlIHN0YXR1c0NvZGVdOwotICAgICAgICBzbnByaW50ZihzdGF0dXNTdHIsIHNp
emVvZihzdGF0dXNTdHIpLCAiJWxkIiwgc3RhdHVzQ29kZSk7Ci0gICAgICAgIFt0aGVIZWFkZXJz
IGFwcGVuZEJ5dGVzOnN0YXR1c1N0ciBsZW5ndGg6c3RybGVuKHN0YXR1c1N0cildOwotICAgICAg
ICBbdGhlSGVhZGVycyBhcHBlbmRCeXRlczoiIE9LXG4iIGxlbmd0aDo0XTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIEhBQ0s6IHBhc3MgdGhlIGhlYWRlcnMgdGhyb3VnaCBhcyBVVEYtOC4KLSAgICAg
ICAgLy8gVGhpcyBpcyBub3QgdGhlIGludGVuZGVkIGJlaGF2aW9yOyB3ZSdyZSBzdXBwb3NlZCB0
byBwYXNzIG9yaWdpbmFsIGJ5dGVzIHZlcmJhdGltLgotICAgICAgICAvLyBCdXQgd2UgZG9uJ3Qg
aGF2ZSB0aGUgb3JpZ2luYWwgYnl0ZXMsIHdlIGhhdmUgTlNTdHJpbmdzIGJ1aWx0IGJ5IHRoZSBV
UkwgbG9hZGluZyBzeXN0ZW0uCi0gICAgICAgIC8vIEl0IGhvcGVmdWxseSBzaG91bGRuJ3QgbWF0
dGVyLCBzaW5jZSBSRkMyNjE2L1JGQzgyMiByZXF1aXJlIEFTQ0lJLW9ubHkgaGVhZGVycywKLSAg
ICAgICAgLy8gYnV0IHN1cmVseSBzb21lb25lIG91dCB0aGVyZSBpcyB1c2luZyBub24tQVNDSUkg
Y2hhcmFjdGVycywgYW5kIGhvcGVmdWxseSBVVEYtOCBpcyBhZGVxdWF0ZSBoZXJlLgotICAgICAg
ICAvLyBJdCBzZWVtcyBiZXR0ZXIgdGhhbiBOU0FTQ0lJU3RyaW5nRW5jb2RpbmcsIHdoaWNoIHdp
bGwgbG9zZSBpbmZvcm1hdGlvbiBpZiBub24tQVNDSUkgaXMgdXNlZC4KLSAgICAgICAgCi0gICAg
ICAgIE5TRGljdGlvbmFyeSAqaGVhZGVyRGljdCA9IFtodHRwUmVzcG9uc2UgYWxsSGVhZGVyRmll
bGRzXTsKLSAgICAgICAgTlNBcnJheSAqa2V5cyA9IFtbaGVhZGVyRGljdCBhbGxLZXlzXSBzb3J0
ZWRBcnJheVVzaW5nU2VsZWN0b3I6QHNlbGVjdG9yKGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6KV07
Ci0gICAgICAgIE5TRW51bWVyYXRvciAqaSA9IFtrZXlzIG9iamVjdEVudW1lcmF0b3JdOwotICAg
ICAgICBOU1N0cmluZyAqazsKLSAgICAgICAgd2hpbGUgKChrID0gW2kgbmV4dE9iamVjdF0pICE9
IG5pbCkgewotICAgICAgICAgICAgTlNTdHJpbmcgKnYgPSBbaGVhZGVyRGljdCBvYmplY3RGb3JL
ZXk6a107Ci0gICAgICAgICAgICBbdGhlSGVhZGVycyBhcHBlbmREYXRhOltrIGRhdGFVc2luZ0Vu
Y29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07Ci0gICAgICAgICAgICBbdGhlSGVhZGVycyBh
cHBlbmRCeXRlczoiOiAiIGxlbmd0aDoyXTsKLSAgICAgICAgICAgIFt0aGVIZWFkZXJzIGFwcGVu
ZERhdGE6W3YgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsKLSAgICAg
ICAgICAgIFt0aGVIZWFkZXJzIGFwcGVuZEJ5dGVzOiJcbiIgbGVuZ3RoOjFdOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB0aGUgY29udGVudCBpcyBlbmNvZGVkIChtb3N0IGxp
a2VseSBjb21wcmVzc2VkKSwgdGhlbiBkb24ndCBzZW5kIGl0cyBsZW5ndGggdG8gdGhlIHBsdWdp
biwKLSAgICAgICAgLy8gd2hpY2ggaXMgb25seSBpbnRlcmVzdGVkIGluIHRoZSBkZWNvZGVkIGxl
bmd0aCwgbm90IHlldCBrbm93biBhdCB0aGUgbW9tZW50LgotICAgICAgICAvLyA8cmRhcjovL3By
b2JsZW0vNDQ3MDU5OT4gdHJhY2tzIGEgcmVxdWVzdCBmb3IgLVtOU1VSTFJlc3BvbnNlIGV4cGVj
dGVkQ29udGVudExlbmd0aF0gdG8gaW5jb3Jwb3JhdGUgdGhpcyBsb2dpYy4KLSAgICAgICAgTlNT
dHJpbmcgKmNvbnRlbnRFbmNvZGluZyA9IChOU1N0cmluZyAqKVtbKE5TSFRUUFVSTFJlc3BvbnNl
ICopciBhbGxIZWFkZXJGaWVsZHNdIG9iamVjdEZvcktleTpAIkNvbnRlbnQtRW5jb2RpbmciXTsK
LSAgICAgICAgaWYgKGNvbnRlbnRFbmNvZGluZyAmJiAhW2NvbnRlbnRFbmNvZGluZyBpc0VxdWFs
VG9TdHJpbmc6QCJpZGVudGl0eSJdKQotICAgICAgICAgICAgZXhwZWN0ZWRDb250ZW50TGVuZ3Ro
ID0gLTE7Ci0KLSAgICAgICAgW3RoZUhlYWRlcnMgYXBwZW5kQnl0ZXM6IlwwIiBsZW5ndGg6MV07
Ci0gICAgfQotICAgIAotICAgIHN0YXJ0U3RyZWFtKFtyIFVSTF0sIGV4cGVjdGVkQ29udGVudExl
bmd0aCwgW3IgX2xhc3RNb2RpZmllZERhdGVdLCBbciBNSU1FVHlwZV0sIHRoZUhlYWRlcnMpOwot
fQotCi1OUFJlYXNvbiBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbTo6cmVhc29uRm9yRXJyb3Io
TlNFcnJvciAqZXJyb3IpCi17Ci0gICAgaWYgKCFlcnJvcikKLSAgICAgICAgcmV0dXJuIE5QUkVT
X0RPTkU7Ci0KLSAgICBpZiAoW1tlcnJvciBkb21haW5dIGlzRXF1YWxUb1N0cmluZzpOU1VSTEVy
cm9yRG9tYWluXSAmJiBbZXJyb3IgY29kZV0gPT0gTlNVUkxFcnJvckNhbmNlbGxlZCkKLSAgICAg
ICAgcmV0dXJuIE5QUkVTX1VTRVJfQlJFQUs7Ci0KLSAgICByZXR1cm4gTlBSRVNfTkVUV09SS19F
UlI7Ci19Ci0KLXZvaWQgSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW06OmRpZEZhaWwoV2ViQ29y
ZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yJiBlcnJvcikKLXsKLSAgICBpZiAoTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94
eSA9IG1faW5zdGFuY2UtPmhvc3RQcm94eSgpKQotICAgICAgICBfV0tQSFN0cmVhbURpZEZhaWwo
aG9zdFByb3h5LT5wb3J0KCksIG1faW5zdGFuY2UtPnBsdWdpbklEKCksIG1fc3RyZWFtSUQsIHJl
YXNvbkZvckVycm9yKGVycm9yKSk7Ci0gICAgbV9pbnN0YW5jZS0+ZGlzY29ubmVjdFN0cmVhbSh0
aGlzKTsKLX0KLQotYm9vbCBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbTo6d2FudHNBbGxTdHJl
YW1zKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotdm9pZCBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbTo6c3RhcnQoKQotewotICAg
IEFTU0VSVChtX3JlcXVlc3QpOwotICAgIEFTU0VSVCghbV9mcmFtZUxvYWRlcik7Ci0gICAgQVNT
RVJUKCFtX2xvYWRlcik7Ci0KLSAgICB3ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zY2hlZHVs
ZVBsdWdpblN0cmVhbUxvYWQoKmNvcmUoW21faW5zdGFuY2UtPnBsdWdpblZpZXcoKSB3ZWJGcmFt
ZV0pLCAqdGhpcywgbV9yZXF1ZXN0LmdldCgpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7
ICp0aGlzIH1dIChSZWZQdHI8V2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+JiYg
bG9hZGVyKSB7Ci0gICAgICAgIG1fbG9hZGVyID0gV1RGTW92ZShsb2FkZXIpOwotICAgIH0pOwot
fQotCi12b2lkIEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtOjpzdG9wKCkKLXsKLSAgICBBU1NF
UlQoIW1fZnJhbWVMb2FkZXIpOwotICAgIAotICAgIGlmICghbV9sb2FkZXItPmlzRG9uZSgpKQot
ICAgICAgICBtX2xvYWRlci0+Y2FuY2VsKG1fbG9hZGVyLT5jYW5jZWxsZWRFcnJvcigpKTsKLX0K
LSAgICAKLXZvaWQgSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW06OmNhbmNlbExvYWQoTlBSZWFz
b24gcmVhc29uKQotewotICAgIGNhbmNlbExvYWQoZXJyb3JGb3JSZWFzb24ocmVhc29uKSk7Ci19
Ci0KLXZvaWQgSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW06OmNhbmNlbExvYWQoTlNFcnJvciAq
ZXJyb3IpCi17Ci0gICAgaWYgKG1fZnJhbWVMb2FkZXIpIHsKLSAgICAgICAgQVNTRVJUKCFtX2xv
YWRlcik7Ci0gICAgICAgIAotICAgICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIg
PSBtX2ZyYW1lTG9hZGVyLT5hY3RpdmVEb2N1bWVudExvYWRlcigpOwotICAgICAgICBpZiAoZG9j
dW1lbnRMb2FkZXIgJiYgZG9jdW1lbnRMb2FkZXItPmlzTG9hZGluZ01haW5SZXNvdXJjZSgpKQot
ICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXItPmNhbmNlbE1haW5SZXNvdXJjZUxvYWQoZXJyb3Ip
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX2xvYWRlci0+aXNEb25lKCkp
IHsKLSAgICAgICAgLy8gQ2FuY2VsbGluZyB0aGUgbG9hZCB3aWxsIGRpc2Nvbm5lY3QgdGhlIHN0
cmVhbSBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gZG8gaXQgZXhwbGljaXRseS4KLSAgICAgICAgbV9s
b2FkZXItPmNhbmNlbChlcnJvcik7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1faW5zdGFuY2UtPmRp
c2Nvbm5lY3RTdHJlYW0odGhpcyk7Ci19Ci0KLU5TRXJyb3IgKkhvc3RlZE5ldHNjYXBlUGx1Z2lu
U3RyZWFtOjpwbHVnaW5DYW5jZWxsZWRDb25uZWN0aW9uRXJyb3IoKSBjb25zdAotewotICAgIHJl
dHVybiBhZG9wdE5TKFtbTlNFcnJvciBhbGxvY10gX2luaXRXaXRoUGx1Z2luRXJyb3JDb2RlOldl
YktpdEVycm9yUGx1Z0luQ2FuY2VsbGVkQ29ubmVjdGlvbgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRVUkw6bV9yZXNwb25zZVVSTCA/IG1fcmVzcG9u
c2VVUkwuZ2V0KCkgOiBtX3JlcXVlc3RVUkwuZ2V0KCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwbHVnaW5QYWdlVVJMOm5pbAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbk5hbWU6W1ttX2luc3RhbmNlLT5wbHVnaW5WaWV3
KCkgcGx1Z2luUGFja2FnZV0gcGx1Z2luSW5mb10ubmFtZQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6bV9taW1lVHlwZS5nZXQoKV0pLmF1dG9y
ZWxlYXNlKCk7Ci19Ci0KLU5TRXJyb3IgKkhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtOjplcnJv
ckZvclJlYXNvbihOUFJlYXNvbiByZWFzb24pIGNvbnN0Ci17Ci0gICAgaWYgKHJlYXNvbiA9PSBO
UFJFU19ET05FKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgaWYgKHJlYXNvbiA9PSBOUFJF
U19VU0VSX0JSRUFLKQotICAgICAgICByZXR1cm4gW05TRXJyb3IgX3dlYktpdEVycm9yV2l0aERv
bWFpbjpOU1VSTEVycm9yRG9tYWluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb2RlOk5TVVJMRXJyb3JDYW5jZWxsZWQgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVVJMOm1fcmVzcG9uc2VVUkwgPyBtX3Jlc3BvbnNlVVJMLmdl
dCgpIDogbV9yZXF1ZXN0VVJMLmdldCgpXTsKLQotICAgIHJldHVybiBwbHVnaW5DYW5jZWxsZWRD
b25uZWN0aW9uRXJyb3IoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAv
LyBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL05l
dHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdp
bnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOGY0NDQ5OGI3YjA4NjI2M2RmZmZmMGQ5ZGM1MTRlZTI3MDY5ZTE5YS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZiBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykKLQotI2lmbmRl
ZiBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyX2gKLSNkZWZpbmUgTmV0c2NhcGVQbHVnaW5Ib3N0
TWFuYWdlcl9oCi0KLSNpbXBvcnQgPHd0Zi9IYXNoTWFwLmg+Ci0jaW1wb3J0IDx3dGYvUmVmUHRy
Lmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotQGNsYXNzIFdlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldzsKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTsKLWNs
YXNzIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5OwotCi1jbGFzcyBOZXRzY2FwZVBsdWdpbkhvc3RN
YW5hZ2VyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlciYg
c2luZ2xldG9uKCk7Ci0gICAgCi0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eT4gaW5zdGFudGlhdGVQbHVnaW4oY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoLCBjcHVfdHlwZV90
IHBsdWdpbkFyY2hpdGVjdHVyZSwgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBXZWJI
b3N0ZWROZXRzY2FwZVBsdWdpblZpZXcgKiwgTlNTdHJpbmcgKm1pbWVUeXBlLCBOU0FycmF5ICph
dHRyaWJ1dGVLZXlzLCBOU0FycmF5ICphdHRyaWJ1dGVWYWx1ZXMsIE5TU3RyaW5nICp1c2VyQWdl
bnQsIE5TVVJMICpzb3VyY2VVUkwsIGJvb2wgZnVsbEZyYW1lLCBib29sIGlzUHJpdmF0ZUJyb3dz
aW5nRW5hYmxlZCwgYm9vbCBpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkLCBib29sIGhv
c3RMYXllcnNJbldpbmRvd1NlcnZlcik7Ci0KLSAgICB2b2lkIHBsdWdpbkhvc3REaWVkKE5ldHNj
YXBlUGx1Z2luSG9zdFByb3h5Kik7Ci0KLSAgICB2b2lkIGNyZWF0ZVByb3BlcnR5TGlzdEZpbGUo
Y29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoLCBjcHVfdHlwZV90IHBsdWdpbkFyY2hpdGVjdHVyZSwg
Y29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKTsKLSAgICAKLSAgICB2b2lkIGRpZENyZWF0
ZVdpbmRvdygpOwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxO
ZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyPjsKLSAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSog
aG9zdEZvclBsdWdpbihjb25zdCBTdHJpbmcmIHBsdWdpblBhdGgsIGNwdV90eXBlX3QgcGx1Z2lu
QXJjaGl0ZWN0dXJlLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpOwotCi0gICAgTmV0
c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcigpOwotICAgIH5OZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2Vy
KCk7Ci0gICAgCi0gICAgYm9vbCBzcGF3blBsdWdpbkhvc3QoY29uc3QgU3RyaW5nJiBwbHVnaW5Q
YXRoLCBjcHVfdHlwZV90IHBsdWdpbkFyY2hpdGVjdHVyZSwgbWFjaF9wb3J0X3QgY2xpZW50UG9y
dCwgbWFjaF9wb3J0X3QmIHBsdWdpbkhvc3RQb3J0LCBQcm9jZXNzU2VyaWFsTnVtYmVyJiBwbHVn
aW5Ib3N0UFNOKTsKLSAgICAKLSAgICBib29sIGluaXRpYWxpemVWZW5kb3JQb3J0KCk7Ci0gICAg
Ci0gICAgbWFjaF9wb3J0X3QgbV9wbHVnaW5WZW5kb3JQb3J0IHsgTUFDSF9QT1JUX05VTEwgfTsK
LSAgICAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmVhbGx5IGJlIGEgSGFzaE1hcCBvZiBS
ZXRhaW5QdHJzLCBidXQgdGhhdCBkb2Vzbid0IHdvcmsgcmlnaHQgbm93LgotICAgIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5Kj4gUGx1Z2luSG9zdE1hcDsK
LSAgICBQbHVnaW5Ib3N0TWFwIG1fcGx1Z2luSG9zdHM7Ci19OwotICAgIAotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyX2gKLSNlbmRp
ZiAvLyBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW0gYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RN
YW5hZ2VyLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWI2ZDgxOWY5ZDk3Nzhh
YTVhNjIxYjgwZWEzMGIxMzg1ZGU1NmRlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL05l
dHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW0KKysrIC9kZXYvbnVsbApAQCAtMSwzMjkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
ZiBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0KLSNpbXBvcnQgIk5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIuaCIKLQotI2ltcG9ydCAiTmV0
c2NhcGVQbHVnaW5Ib3N0UHJveHkuaCIKLSNpbXBvcnQgIk5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eS5oIgotI2ltcG9ydCAiV2ViTG9jYWxpemFibGVTdHJpbmdzSW50ZXJuYWwuaCIKLSNpbXBv
cnQgIldlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5oIgotI2ltcG9ydCA8bWFjaC9tYWNoX3BvcnQu
aD4KLSNpbXBvcnQgPHBhbC9zcGkvY2YvQ0ZMb2NhbGVTUEkuaD4KLSNpbXBvcnQgPHBhbC9zcGkv
Y29jb2EvUXVhcnR6Q29yZVNQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9TZXJ2ZXJzU1BJ
Lmg+Ci0jaW1wb3J0IDxzcGF3bi5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBv
cnQgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
LSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
LQotZXh0ZXJuICJDIiB7Ci0jaW1wb3J0ICJXZWJLaXRQbHVnaW5BZ2VudC5oIgotI2ltcG9ydCAi
V2ViS2l0UGx1Z2luSG9zdC5oIgotfQotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLU5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXImIE5ldHNjYXBlUGx1
Z2luSG9zdE1hbmFnZXI6OnNpbmdsZXRvbigpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI+IHBsdWdpbkhvc3RNYW5hZ2VyOwotICAgIHJldHVy
biBwbHVnaW5Ib3N0TWFuYWdlcjsKLX0KLQotc3RhdGljIE5TU3RyaW5nICogY29uc3QgcGx1Z2lu
SG9zdEFwcE5hbWUgPSBAIldlYktpdFBsdWdpbkhvc3QuYXBwIjsKLQotTmV0c2NhcGVQbHVnaW5I
b3N0TWFuYWdlcjo6TmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcigpCi0gICAgOiBtX3BsdWdpblZl
bmRvclBvcnQoTUFDSF9QT1JUX05VTEwpCi17Ci19Ci0gCi1OZXRzY2FwZVBsdWdpbkhvc3RNYW5h
Z2VyOjp+TmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcigpCi17Ci19Ci0KLU5ldHNjYXBlUGx1Z2lu
SG9zdFByb3h5KiBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpob3N0Rm9yUGx1Z2luKGNvbnN0
IFdURjo6U3RyaW5nJiBwbHVnaW5QYXRoLCBjcHVfdHlwZV90IHBsdWdpbkFyY2hpdGVjdHVyZSwg
Y29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKQotewotICAgIFBsdWdpbkhvc3RNYXA6OkFk
ZFJlc3VsdCByZXN1bHQgPSBtX3BsdWdpbkhvc3RzLmFkZChwbHVnaW5QYXRoLCBudWxscHRyKTsK
LSAgICAKLSAgICAvLyBUaGUgcGFja2FnZSB3YXMgYWxyZWFkeSBpbiB0aGUgbWFwLCBqdXN0IHJl
dHVybiBpdC4KLSAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgCi0gICAgbWFjaF9wb3J0X3QgY2xpZW50UG9y
dCA9IE1BQ0hfUE9SVF9OVUxMOwotICAgIGlmIChtYWNoX3BvcnRfYWxsb2NhdGUobWFjaF90YXNr
X3NlbGYoKSwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZjbGllbnRQb3J0KSAhPSBLRVJOX1NV
Q0NFU1MpIHsKLSAgICAgICAgbV9wbHVnaW5Ib3N0cy5yZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIAotICAgIG1hY2hfcG9ydF90IHBs
dWdpbkhvc3RQb3J0ID0gTUFDSF9QT1JUX05VTEw7Ci0gICAgUHJvY2Vzc1NlcmlhbE51bWJlciBw
bHVnaW5Ib3N0UFNOOwotICAgIGlmICghc3Bhd25QbHVnaW5Ib3N0KHBsdWdpblBhdGgsIHBsdWdp
bkFyY2hpdGVjdHVyZSwgY2xpZW50UG9ydCwgcGx1Z2luSG9zdFBvcnQsIHBsdWdpbkhvc3RQU04p
KSB7Ci0gICAgICAgIG1hY2hfcG9ydF9tb2RfcmVmcyhtYWNoX3Rhc2tfc2VsZigpLCBjbGllbnRQ
b3J0LCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgLTEpOwotICAgICAgICBtX3BsdWdpbkhvc3Rz
LnJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9
Ci0gICAgCi0gICAgLy8gU2luY2UgRmxhc2ggTlBPYmplY3RzIGFkZCBtZXRob2RzIGR5bmFtaWNh
bGx5LCB3ZSBkb24ndCB3YW50IHRvIGNhY2hlIHdoZW4gYSBwcm9wZXJ0eS9tZXRob2QgZG9lc24n
dCBleGlzdAotICAgIC8vIG9uIGFuIG9iamVjdCBiZWNhdXNlIGl0IGNvdWxkIGJlIGFkZGVkIGxh
dGVyLgotICAgIGJvb2wgc2hvdWxkQ2FjaGVNaXNzaW5nUHJvcGVydGllc0FuZE1ldGhvZHMgPSBi
dW5kbGVJZGVudGlmaWVyICE9ICJjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIucGx1Z2luIjsK
LSAgICAKLSAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gbmV3IE5ldHNj
YXBlUGx1Z2luSG9zdFByb3h5KGNsaWVudFBvcnQsIHBsdWdpbkhvc3RQb3J0LCBwbHVnaW5Ib3N0
UFNOLCBzaG91bGRDYWNoZU1pc3NpbmdQcm9wZXJ0aWVzQW5kTWV0aG9kcyk7Ci0gICAgCi0gICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGhvc3RQcm94eTsKLSAgICAKLSAgICByZXR1cm4gaG9z
dFByb3h5OwotfQotCi1zdGF0aWMgTlNTdHJpbmcgKnByZWZlcnJlZEJ1bmRsZUxvY2FsaXphdGlv
bk5hbWUoKQotewotICAgIC8vIEZJWE1FOiBBbnkgdXNlIG9mIHRoaXMgZnVuY3Rpb24gdG8gcGFz
cyBsb2NhbGl6YXRpb25zIHRvIGFub3RoZXIKLSAgICAvLyBwcm9jZXNzIGlzIGxpa2VseSBub3Qg
Y29tcGxldGVseSByaWdodCwgc2luY2UgaXQgb25seSBjb25zaWRlcnMKLSAgICAvLyBvbmUgbG9j
YWxpemF0aW9uLgotICAgIE5TQXJyYXkgKnByZWZlcnJlZExvY2FsaXphdGlvbnMgPSBbW05TQnVu
ZGxlIG1haW5CdW5kbGVdIHByZWZlcnJlZExvY2FsaXphdGlvbnNdOwotICAgIGlmICghcHJlZmVy
cmVkTG9jYWxpemF0aW9ucyB8fCAhW3ByZWZlcnJlZExvY2FsaXphdGlvbnMgY291bnRdKQotICAg
ICAgICByZXR1cm4gQCJlbl9VUyI7Ci0KLSAgICBOU1N0cmluZyAqbGFuZ3VhZ2UgPSBbcHJlZmVy
cmVkTG9jYWxpemF0aW9ucyBvYmplY3RBdEluZGV4OjBdOwotCi0gICAgLy8gRklYTUU6IDxyZGFy
Oi8vcHJvYmxlbS8xODA4Mzg4MD4gUmVwbGFjZSB1c2Ugb2YgU2NyaXB0IE1hbmFnZXIKLSAgICAv
LyB0byBjYW5vbmljYWxpemUgbG9jYWxlcyB3aXRoIGEgY3VzdG9tIFdlYi1zcGVjaWZpYyB0YWJs
ZQotICAgIExhbmdDb2RlIGxhbmd1YWdlQ29kZTsKLSAgICBSZWdpb25Db2RlIHJlZ2lvbkNvZGU7
Ci0KLSAgICBCb29sZWFuIHN1Y2Nlc3MgPSBDRkxvY2FsZUdldExhbmd1YWdlUmVnaW9uRW5jb2Rp
bmdGb3JMb2NhbGVJZGVudGlmaWVyKChfX2JyaWRnZSBDRlN0cmluZ1JlZilsYW5ndWFnZSwgJmxh
bmd1YWdlQ29kZSwgJnJlZ2lvbkNvZGUsIG51bGxwdHIsIG51bGxwdHIpOwotICAgIGlmICghc3Vj
Y2VzcykKLSAgICAgICAgcmV0dXJuIEAiZW5fVVMiOwotCi0gICAgcmV0dXJuIGFkb3B0Q0YoQ0ZM
b2NhbGVDcmVhdGVDYW5vbmljYWxMb2NhbGVJZGVudGlmaWVyRnJvbVNjcmlwdE1hbmFnZXJDb2Rl
cygwLCBsYW5ndWFnZUNvZGUsIHJlZ2lvbkNvZGUpKS5icmlkZ2luZ0F1dG9yZWxlYXNlKCk7Ci19
Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6c3Bhd25QbHVnaW5Ib3N0KGNvbnN0
IFN0cmluZyYgcGx1Z2luUGF0aCwgY3B1X3R5cGVfdCBwbHVnaW5BcmNoaXRlY3R1cmUsIG1hY2hf
cG9ydF90IGNsaWVudFBvcnQsIG1hY2hfcG9ydF90JiBwbHVnaW5Ib3N0UG9ydCwgUHJvY2Vzc1Nl
cmlhbE51bWJlciYgcGx1Z2luSG9zdFBTTikKLXsKLSAgICBpZiAobV9wbHVnaW5WZW5kb3JQb3J0
ID09IE1BQ0hfUE9SVF9OVUxMKSB7Ci0gICAgICAgIGlmICghaW5pdGlhbGl6ZVZlbmRvclBvcnQo
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIUNBUmVuZGVy
U2VydmVyU3RhcnQoKSkKLSAgICAgICAgcmV0dXJuIE1BQ0hfUE9SVF9OVUxMOwotCi0gICAgbWFj
aF9wb3J0X3QgcmVuZGVyU2VydmVyUG9ydCA9IENBUmVuZGVyU2VydmVyR2V0UG9ydCgpOwotICAg
IGlmICghTUFDSF9QT1JUX1ZBTElEKHJlbmRlclNlcnZlclBvcnQpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBOU1N0cmluZyAqcGx1Z2luSG9zdEFwcFBhdGggPSBbW05TQnVuZGxlIGJ1
bmRsZUZvckNsYXNzOltXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UgY2xhc3NdXSBwYXRoRm9yQXV4
aWxpYXJ5RXhlY3V0YWJsZTpwbHVnaW5Ib3N0QXBwTmFtZV07Ci0gICAgTlNTdHJpbmcgKnBsdWdp
bkhvc3RBcHBFeGVjdXRhYmxlUGF0aCA9IFtbTlNCdW5kbGUgYnVuZGxlV2l0aFBhdGg6cGx1Z2lu
SG9zdEFwcFBhdGhdIGV4ZWN1dGFibGVQYXRoXTsKLQotICAgIE5TRGljdGlvbmFyeSAqbGF1bmNo
UHJvcGVydGllcyA9IEB7Ci0gICAgICAgIEAicGx1Z2luSG9zdFBhdGgiOiBwbHVnaW5Ib3N0QXBw
RXhlY3V0YWJsZVBhdGgsCi0gICAgICAgIEAiY3B1VHlwZSI6IEAocGx1Z2luQXJjaGl0ZWN0dXJl
KSwKLSAgICAgICAgQCJsb2NhbGl6YXRpb24iOiBwcmVmZXJyZWRCdW5kbGVMb2NhbGl6YXRpb25O
YW1lKCksCi0gICAgfTsKLSAgICBOU0RhdGEgKmRhdGEgPSBbTlNQcm9wZXJ0eUxpc3RTZXJpYWxp
emF0aW9uIGRhdGFXaXRoUHJvcGVydHlMaXN0OmxhdW5jaFByb3BlcnRpZXMgZm9ybWF0Ok5TUHJv
cGVydHlMaXN0QmluYXJ5Rm9ybWF0X3YxXzAgb3B0aW9uczowIGVycm9yOm51bGxwdHJdOwotICAg
IEFTU0VSVChkYXRhKTsKLQotICAgIGtlcm5fcmV0dXJuX3Qga3IgPSBfV0tQQVNwYXduUGx1Z2lu
SG9zdChtX3BsdWdpblZlbmRvclBvcnQsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGNvbnN0
X2Nhc3Q8dm9pZCo+KFtkYXRhIGJ5dGVzXSkpLCBbZGF0YSBsZW5ndGhdLCAmcGx1Z2luSG9zdFBv
cnQpOwotCi0gICAgaWYgKGtyID09IE1BQ0hfU0VORF9JTlZBTElEX0RFU1QpIHsKLSAgICAgICAg
Ly8gVGhlIHBsdWctaW4gdmVuZG9yIHBvcnQgaGFzIGdvbmUgYXdheSBmb3Igc29tZSByZWFzb24u
IFRyeSB0byByZWluaXRpYWxpemUgaXQuCi0gICAgICAgIG1fcGx1Z2luVmVuZG9yUG9ydCA9IE1B
Q0hfUE9SVF9OVUxMOwotICAgICAgICBpZiAoIWluaXRpYWxpemVWZW5kb3JQb3J0KCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICAvLyBBbmQgc3Bhd24gdGhl
IHBsdWctaW4gaG9zdCBhZ2Fpbi4KLSAgICAgICAga3IgPSBfV0tQQVNwYXduUGx1Z2luSG9zdCht
X3BsdWdpblZlbmRvclBvcnQsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGNvbnN0X2Nhc3Q8
dm9pZCo+KFtkYXRhIGJ5dGVzXSkpLCBbZGF0YSBsZW5ndGhdLCAmcGx1Z2luSG9zdFBvcnQpOwot
ICAgIH0KLQotICAgIGlmIChrciAhPSBLRVJOX1NVQ0NFU1MpIHsKLSAgICAgICAgLy8gRklYTUU6
IENoZWNrIGZvciBpbnZhbGlkIGRlc3QgYW5kIHRyeSB0byByZS1zcGF3biB0aGUgcGx1Zy1pbiBh
Z2VudC4KLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc3Bhd24gcGx1Zy1pbiBob3N0LCBl
cnJvciAleCIsIGtyKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBO
U1N0cmluZyAqdmlzaWJsZU5hbWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpVSV9TVFJJ
TkdfSU5URVJOQUwoIiVAICglQCBJbnRlcm5ldCBwbHVnLWluKSIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2aXNpYmxl
IG5hbWUgb2YgdGhlIHBsdWctaW4gaG9zdCBwcm9jZXNzLiBUaGUgZmlyc3QgYXJndW1lbnQgaXMg
dGhlIHBsdWctaW4gbmFtZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmQgdGhlIHNlY29uZCBhcmd1bWVudCBpcyB0
aGUgYXBwbGljYXRpb24gbmFtZS4iKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1so
TlNTdHJpbmcqKXBsdWdpblBhdGggbGFzdFBhdGhDb21wb25lbnRdIHN0cmluZ0J5RGVsZXRpbmdQ
YXRoRXh0ZW5zaW9uXSwgW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBwcm9jZXNzTmFtZV1d
OwotICAgIAotICAgIGF1dG8gaG9zdFByb3BlcnRpZXMgPSBAewotICAgICAgICBAInZpc2libGVO
YW1lIjogdmlzaWJsZU5hbWUsCi0gICAgICAgIEAiYnVuZGxlUGF0aCI6IChOU1N0cmluZyAqKXBs
dWdpblBhdGgsCi0gICAgfTsKLSAgICBkYXRhID0gW05TUHJvcGVydHlMaXN0U2VyaWFsaXphdGlv
biBkYXRhV2l0aFByb3BlcnR5TGlzdDpob3N0UHJvcGVydGllcyBmb3JtYXQ6TlNQcm9wZXJ0eUxp
c3RCaW5hcnlGb3JtYXRfdjFfMCBvcHRpb25zOjAgZXJyb3I6TlVMTF07Ci0gICAgQVNTRVJUKGRh
dGEpOwotCi0gICAgUHJvY2Vzc1NlcmlhbE51bWJlciBwc247Ci0KLSAgICBBTExPV19ERVBSRUNB
VEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIEdldEN1cnJlbnRQcm9jZXNzKCZwc24pOwotICAg
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotCi0gICAgQVNTRVJUKE1BQ0hfUE9S
VF9WQUxJRChjbGllbnRQb3J0KSk7Ci0gICAga3IgPSBfV0tQSENoZWNrSW5XaXRoUGx1Z2luSG9z
dChwbHVnaW5Ib3N0UG9ydCwgc3RhdGljX2Nhc3Q8dWludDhfdCo+KGNvbnN0X2Nhc3Q8dm9pZCo+
KFtkYXRhIGJ5dGVzXSkpLCBbZGF0YSBsZW5ndGhdLCBjbGllbnRQb3J0LCBwc24uaGlnaExvbmdP
ZlBTTiwgcHNuLmxvd0xvbmdPZlBTTiwgcmVuZGVyU2VydmVyUG9ydCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZwbHVnaW5Ib3N0UFNOLmhpZ2hMb25nT2ZQU04sICZwbHVn
aW5Ib3N0UFNOLmxvd0xvbmdPZlBTTik7Ci0gICAgCi0gICAgaWYgKGtyICE9IEtFUk5fU1VDQ0VT
UykgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjaGVjayBpbiB3aXRoIHBsdWctaW4g
aG9zdCwgZXJyb3IgJXgiLCBrcik7Ci0gICAgICAgIGRlYWxsb2NhdGVTZW5kUmlnaHRTYWZlbHko
cGx1Z2luSG9zdFBvcnQpOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjppbml0aWFs
aXplVmVuZG9yUG9ydCgpCi17Ci0gICAgQVNTRVJUKG1fcGx1Z2luVmVuZG9yUG9ydCA9PSBNQUNI
X1BPUlRfTlVMTCk7Ci0KLSAgICAvLyBHZXQgdGhlIHBsdWctaW4gYWdlbnQgcG9ydC4KLSAgICBt
YWNoX3BvcnRfdCBwbHVnaW5BZ2VudFBvcnQgPSBNQUNIX1BPUlRfTlVMTDsKLSAgICBpZiAoYm9v
dHN0cmFwX2xvb2tfdXAoYm9vdHN0cmFwX3BvcnQsICJjb20uYXBwbGUuV2ViS2l0LlBsdWdpbkFn
ZW50IiwgJnBsdWdpbkFnZW50UG9ydCkgIT0gS0VSTl9TVUNDRVNTKSB7Ci0gICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGxvb2sgdXAgdGhlIHBsdWctaW4gYWdlbnQgcG9ydCIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIE5TRGF0YSAqYXBwTmFtZURhdGEgPSBb
W1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBwcm9jZXNzTmFtZV0gZGF0YVVzaW5nRW5jb2Rp
bmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOwotICAgIAotICAgIC8vIFRlbGwgdGhlIHBsdWctaW4g
YWdlbnQgdGhhdCB3ZSBleGlzdC4KLSAgICBpZiAoX1dLUEFDaGVja0luQXBwbGljYXRpb24ocGx1
Z2luQWdlbnRQb3J0LCBzdGF0aWNfY2FzdDx1aW50OF90Kj4oY29uc3RfY2FzdDx2b2lkKj4oW2Fw
cE5hbWVEYXRhIGJ5dGVzXSkpLCBbYXBwTmFtZURhdGEgbGVuZ3RoXSwgJm1fcGx1Z2luVmVuZG9y
UG9ydCkgIT0gS0VSTl9TVUNDRVNTKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBG
SVhNRTogU2hvdWxkIHdlIGFkZCBhIG5vdGlmaWNhdGlvbiBmb3Igd2hlbiB0aGUgdmVuZG9yIHBv
cnQgZGllcz8KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdp
bkhvc3RNYW5hZ2VyOjpwbHVnaW5Ib3N0RGllZChOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogcGx1
Z2luSG9zdCkKLXsKLSAgICBQbHVnaW5Ib3N0TWFwOjppdGVyYXRvciBlbmQgPSBtX3BsdWdpbkhv
c3RzLmVuZCgpOwotCi0gICAgLy8gVGhpcyBoYXMgTyhuKSBjb21wbGV4aXR5IGJ1dCB0aGUgbnVt
YmVyIG9mIGFjdGl2ZSBwbHVnLWluIGhvc3RzIGlzIHZlcnkgc21hbGwgc28gaXQgc2hvdWxkbid0
IG1hdHRlci4KLSAgICBmb3IgKFBsdWdpbkhvc3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wbHVnaW5I
b3N0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT52YWx1ZSA9
PSBwbHVnaW5Ib3N0KSB7Ci0gICAgICAgICAgICBtX3BsdWdpbkhvc3RzLnJlbW92ZShpdCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVJlZlB0cjxOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHk+IE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6Omluc3RhbnRp
YXRlUGx1Z2luKGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCwgY3B1X3R5cGVfdCBwbHVnaW5BcmNo
aXRlY3R1cmUsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgV2ViSG9zdGVkTmV0c2Nh
cGVQbHVnaW5WaWV3ICpwbHVnaW5WaWV3LCBOU1N0cmluZyAqbWltZVR5cGUsIE5TQXJyYXkgKmF0
dHJpYnV0ZUtleXMsIE5TQXJyYXkgKmF0dHJpYnV0ZVZhbHVlcywgTlNTdHJpbmcgKnVzZXJBZ2Vu
dCwgTlNVUkwgKnNvdXJjZVVSTCwgYm9vbCBmdWxsRnJhbWUsIGJvb2wgaXNQcml2YXRlQnJvd3Np
bmdFbmFibGVkLCBib29sIGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsIGJvb2wgaG9z
dExheWVyc0luV2luZG93U2VydmVyKQotewotICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBo
b3N0UHJveHkgPSBob3N0Rm9yUGx1Z2luKHBsdWdpblBhdGgsIHBsdWdpbkFyY2hpdGVjdHVyZSwg
YnVuZGxlSWRlbnRpZmllcik7Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IHByb3BlcnRpZXMg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwotICAgIAotICAg
IGlmIChtaW1lVHlwZSkKLSAgICAgICAgW3Byb3BlcnRpZXMuZ2V0KCkgc2V0T2JqZWN0Om1pbWVU
eXBlIGZvcktleTpAIm1pbWVUeXBlIl07Ci0KLSAgICBBU1NFUlRfQVJHKHVzZXJBZ2VudCwgdXNl
ckFnZW50KTsKLSAgICBbcHJvcGVydGllcy5nZXQoKSBzZXRPYmplY3Q6dXNlckFnZW50IGZvcktl
eTpAInVzZXJBZ2VudCJdOwotICAgIAotICAgIEFTU0VSVF9BUkcoYXR0cmlidXRlS2V5cywgYXR0
cmlidXRlS2V5cyk7Ci0gICAgW3Byb3BlcnRpZXMuZ2V0KCkgc2V0T2JqZWN0OmF0dHJpYnV0ZUtl
eXMgZm9yS2V5OkAiYXR0cmlidXRlS2V5cyJdOwotICAgIAotICAgIEFTU0VSVF9BUkcoYXR0cmli
dXRlVmFsdWVzLCBhdHRyaWJ1dGVWYWx1ZXMpOwotICAgIFtwcm9wZXJ0aWVzLmdldCgpIHNldE9i
amVjdDphdHRyaWJ1dGVWYWx1ZXMgZm9yS2V5OkAiYXR0cmlidXRlVmFsdWVzIl07Ci0KLSAgICBp
ZiAoc291cmNlVVJMKQotICAgICAgICBbcHJvcGVydGllcy5nZXQoKSBzZXRPYmplY3Q6W3NvdXJj
ZVVSTCBhYnNvbHV0ZVN0cmluZ10gZm9yS2V5OkAic291cmNlVVJMIl07Ci0gICAgCi0gICAgW3By
b3BlcnRpZXMuZ2V0KCkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpmdWxsRnJh
bWVdIGZvcktleTpAImZ1bGxGcmFtZSJdOwotICAgIFtwcm9wZXJ0aWVzLmdldCgpIHNldE9iamVj
dDpbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6aXNQcml2YXRlQnJvd3NpbmdFbmFibGVkXSBmb3JL
ZXk6QCJwcml2YXRlQnJvd3NpbmdFbmFibGVkIl07Ci0gICAgW3Byb3BlcnRpZXMuZ2V0KCkgc2V0
T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDppc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdF
bmFibGVkXSBmb3JLZXk6QCJhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCJdOwotICAgIFtw
cm9wZXJ0aWVzLmdldCgpIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6aG9zdExh
eWVyc0luV2luZG93U2VydmVyXSBmb3JLZXk6QCJob3N0TGF5ZXJzSW5XaW5kb3dTZXJ2ZXIiXTsK
LQotICAgIE5TRGF0YSAqZGF0YSA9IFtOU1Byb3BlcnR5TGlzdFNlcmlhbGl6YXRpb24gZGF0YVdp
dGhQcm9wZXJ0eUxpc3Q6cHJvcGVydGllcy5nZXQoKSBmb3JtYXQ6TlNQcm9wZXJ0eUxpc3RCaW5h
cnlGb3JtYXRfdjFfMCBvcHRpb25zOjAgZXJyb3I6bnVsbHB0cl07Ci0gICAgQVNTRVJUKGRhdGEp
OwotICAgIAotICAgIGF1dG8gaW5zdGFuY2UgPSBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OmNyZWF0ZShob3N0UHJveHksIHBsdWdpblZpZXcsIGZ1bGxGcmFtZSk7Ci0gICAgdWludDMyX3Qg
cmVxdWVzdElEID0gaW5zdGFuY2UtPm5leHRSZXF1ZXN0SUQoKTsKLSAgICBrZXJuX3JldHVybl90
IGtyID0gX1dLUEhJbnN0YW50aWF0ZVBsdWdpbihob3N0UHJveHktPnBvcnQoKSwgcmVxdWVzdElE
LCBzdGF0aWNfY2FzdDx1aW50OF90Kj4oY29uc3RfY2FzdDx2b2lkKj4oW2RhdGEgYnl0ZXNdKSks
IFtkYXRhIGxlbmd0aF0sIGluc3RhbmNlLT5wbHVnaW5JRCgpKTsKLSAgICBpZiAoa3IgPT0gTUFD
SF9TRU5EX0lOVkFMSURfREVTVCkgewotICAgICAgICAvLyBJbnZhbGlkYXRlIHRoZSBpbnN0YW5j
ZS4KLSAgICAgICAgaW5zdGFuY2UtPmludmFsaWRhdGUoKTsKLSAgICAgICAgCi0gICAgICAgIC8v
IFRoZSBwbHVnLWluIGhvc3QgbXVzdCBoYXZlIGRpZWQsIGJ1dCB3ZSBoYXZlbid0IHJlY2VpdmVk
IHRoZSBkZWF0aCBub3RpZmljYXRpb24geWV0LgotICAgICAgICBwbHVnaW5Ib3N0RGllZChob3N0
UHJveHkpOwotCi0gICAgICAgIC8vIFRyeSB0byBzcGF3biBpdCBhZ2Fpbi4KLSAgICAgICAgaG9z
dFByb3h5ID0gaG9zdEZvclBsdWdpbihwbHVnaW5QYXRoLCBwbHVnaW5BcmNoaXRlY3R1cmUsIGJ1
bmRsZUlkZW50aWZpZXIpOwotICAgICAgICAKLSAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGluc3Rh
bmNlLgotICAgICAgICBpbnN0YW5jZSA9IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y3Jl
YXRlKGhvc3RQcm94eSwgcGx1Z2luVmlldywgZnVsbEZyYW1lKTsKLSAgICAgICAgcmVxdWVzdElE
ID0gaW5zdGFuY2UtPm5leHRSZXF1ZXN0SUQoKTsKLSAgICAgICAgX1dLUEhJbnN0YW50aWF0ZVBs
dWdpbihob3N0UHJveHktPnBvcnQoKSwgcmVxdWVzdElELCBzdGF0aWNfY2FzdDx1aW50OF90Kj4o
Y29uc3RfY2FzdDx2b2lkKj4oW2RhdGEgYnl0ZXNdKSksIFtkYXRhIGxlbmd0aF0sIGluc3RhbmNl
LT5wbHVnaW5JRCgpKTsKLSAgICB9Ci0KLSAgICBhdXRvIHJlcGx5ID0gaW5zdGFuY2UtPndhaXRG
b3JSZXBseTxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Okluc3RhbnRpYXRlUGx1Z2luUmVw
bHk+KHJlcXVlc3RJRCk7Ci0gICAgaWYgKCFyZXBseSB8fCByZXBseS0+bV9yZXN1bHRDb2RlICE9
IEtFUk5fU1VDQ0VTUykgewotICAgICAgICBpbnN0YW5jZS0+Y2xlYW51cCgpOwotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgCi0gICAgaW5zdGFuY2UtPnNldFJlbmRlckNvbnRl
eHRJRChyZXBseS0+bV9yZW5kZXJDb250ZXh0SUQpOwotICAgIGluc3RhbmNlLT5zZXRSZW5kZXJl
clR5cGUocmVwbHktPm1fcmVuZGVyZXJUeXBlKTsKLQotICAgIHJldHVybiBXVEZNb3ZlKGluc3Rh
bmNlKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpjcmVhdGVQcm9wZXJ0
eUxpc3RGaWxlKGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCwgY3B1X3R5cGVfdCBwbHVnaW5BcmNo
aXRlY3R1cmUsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllcikKLXsKLSAgICBOZXRzY2Fw
ZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gaG9zdEZvclBsdWdpbihwbHVnaW5QYXRoLCBw
bHVnaW5BcmNoaXRlY3R1cmUsIGJ1bmRsZUlkZW50aWZpZXIpOwotICAgIGlmICghaG9zdFByb3h5
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBfV0tQSENyZWF0ZVBsdWdpbk1JTUVUeXBlc1ByZWZl
cmVuY2VzKGhvc3RQcm94eS0+cG9ydCgpKTsKLX0KLSAgICAKLXZvaWQgTmV0c2NhcGVQbHVnaW5I
b3N0TWFuYWdlcjo6ZGlkQ3JlYXRlV2luZG93KCkKLXsKLSAgICAvLyBTZWUgaWYgYW55IG9mIG91
ciBob3N0cyBhcmUgaW4gZnVsbC1zY3JlZW4gbW9kZS4KLSAgICBQbHVnaW5Ib3N0TWFwOjppdGVy
YXRvciBlbmQgPSBtX3BsdWdpbkhvc3RzLmVuZCgpOwotICAgIGZvciAoUGx1Z2luSG9zdE1hcDo6
aXRlcmF0b3IgaXQgPSBtX3BsdWdpbkhvc3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gaXQtPnZhbHVlOwot
ICAgICAgICAKLSAgICAgICAgaWYgKCFob3N0UHJveHktPmlzTWVudUJhclZpc2libGUoKSkgewot
ICAgICAgICAgICAgLy8gTWFrZSBvdXJzZWx2ZXMgdGhlIGZyb250IHByb2Nlc3MuCi0gICAgICAg
ICAgICBQcm9jZXNzU2VyaWFsTnVtYmVyIHBzbjsKLSAgICAgICAgICAgIEFMTE9XX0RFUFJFQ0FU
RURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgICAgICAgICBHZXRDdXJyZW50UHJvY2VzcygmcHNu
KTsKLSAgICAgICAgICAgIFNldEZyb250UHJvY2VzcygmcHNuKTsKLSAgICAgICAgICAgIEFMTE9X
X0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShQ
TFVHSU5fSE9TVF9QUk9DRVNTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1
Z2luSG9zdFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9O
ZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4
ZDBiYTZmZDUwYTE0NjY0ZjRlN2JjMWM1NWViNzdkYzlmOTg0OTJmLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1Bs
dWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5LmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKQotCi0jaW5j
bHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQGNsYXNzIFdlYlBsYWNlaG9sZGVyTW9kYWxXaW5k
b3c7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotICAgIAotY2xhc3MgTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5OwotCi1jbGFzcyBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSB7Ci1wdWJsaWM6Ci0g
ICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkobWFjaF9wb3J0X3QgY2xpZW50UG9ydCwgbWFjaF9w
b3J0X3QgcGx1Z2luSG9zdFBvcnQsIGNvbnN0IFByb2Nlc3NTZXJpYWxOdW1iZXImIHBsdWdpbkhv
c3RQU04sIGJvb2wgc2hvdWxkQ2FjaGVNaXNzaW5nUHJvcGVydGllc0FuZE1ldGhvZHMpOwotICAg
IAotICAgIG1hY2hfcG9ydF90IHBvcnQoKSBjb25zdCB7IEFTU0VSVChmYXN0TWFsbG9jU2l6ZSh0
aGlzKSk7IHJldHVybiBtX3BsdWdpbkhvc3RQb3J0OyB9Ci0gICAgbWFjaF9wb3J0X3QgY2xpZW50
UG9ydCgpIGNvbnN0IHsgQVNTRVJUKGZhc3RNYWxsb2NTaXplKHRoaXMpKTsgcmV0dXJuIG1fY2xp
ZW50UG9ydDsgfQotCi0gICAgdm9pZCBhZGRQbHVnaW5JbnN0YW5jZShOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHkqKTsKLSAgICB2b2lkIHJlbW92ZVBsdWdpbkluc3RhbmNlKE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eSopOwotCi0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBw
bHVnaW5JbnN0YW5jZSh1aW50MzJfdCBwbHVnaW5JRCk7Ci0KLSAgICBib29sIGlzTWVudUJhclZp
c2libGUoKSBjb25zdCB7IHJldHVybiBtX21lbnVCYXJJc1Zpc2libGU7IH0KLSAgICB2b2lkIHNl
dE1lbnVCYXJWaXNpYmxlKGJvb2wpOwotCi0gICAgYm9vbCBpc0Z1bGxzY3JlZW5XaW5kb3dTaG93
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9mdWxsc2NyZWVuV2luZG93SXNTaG93aW5nOyB9Ci0gICAg
dm9pZCBzZXRGdWxsc2NyZWVuV2luZG93SXNTaG93aW5nKGJvb2wpOwotCi0gICAgdm9pZCBzZXRN
b2RhbChib29sKTsKLQotICAgIHZvaWQgYXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKTsKLSAg
ICAKLSAgICBib29sIHByb2Nlc3NSZXF1ZXN0cygpOwotICAgIHN0YXRpYyBib29sIGlzUHJvY2Vz
c2luZ1JlcXVlc3RzKCkgeyByZXR1cm4gc19wcm9jZXNzaW5nUmVxdWVzdHM7IH0KLSAgICAKLSAg
ICBib29sIHNob3VsZENhY2hlTWlzc2luZ1Byb3BlcnRpZXNBbmRNZXRob2RzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaG91bGRDYWNoZU1pc3NpbmdQcm9wZXJ0aWVzQW5kTWV0aG9kczsgfQotCi0gICAg
c3RhdGljIHZvaWQgbWFrZUN1cnJlbnRQcm9jZXNzRnJvbnRQcm9jZXNzKCk7Ci0gICAgdm9pZCBt
YWtlUGx1Z2luSG9zdFByb2Nlc3NGcm9udFByb2Nlc3MoKSBjb25zdDsKLSAgICBib29sIGlzUGx1
Z2luSG9zdFByb2Nlc3NGcm9udFByb2Nlc3MoKSBjb25zdDsKLQotcHJpdmF0ZToKLQotICAgIH5O
ZXRzY2FwZVBsdWdpbkhvc3RQcm94eSgpOwotICAgIHZvaWQgcGx1Z2luSG9zdERpZWQoKTsKLQot
ICAgIHZvaWQgYmVnaW5Nb2RhbCgpOwotICAgIHZvaWQgZW5kTW9kYWwoKTsKLQotICAgIHZvaWQg
ZGlkRW50ZXJGdWxsc2NyZWVuKCkgY29uc3Q7Ci0gICAgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbigp
IGNvbnN0OwotCi0gICAgc3RhdGljIHZvaWQgZGVhZE5hbWVOb3RpZmljYXRpb25DYWxsYmFjayhD
Rk1hY2hQb3J0UmVmLCB2b2lkICptc2csIENGSW5kZXggc2l6ZSwgdm9pZCAqaW5mbyk7Ci0KLSAg
ICB0eXBlZGVmIEhhc2hNYXA8dWludDMyX3QsIFJlZlB0cjxOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk+PiBQbHVnaW5JbnN0YW5jZU1hcDsKLSAgICBQbHVnaW5JbnN0YW5jZU1hcCBtX2luc3Rh
bmNlczsKLSAgICAKLSAgICBtYWNoX3BvcnRfdCBtX2NsaWVudFBvcnQgeyBNQUNIX1BPUlRfTlVM
TCB9OwotICAgIG1hY2hfcG9ydF90IG1fcG9ydFNldCB7IE1BQ0hfUE9SVF9OVUxMIH07Ci0gICAg
Ci0gICAgUmV0YWluUHRyPENGUnVuTG9vcFNvdXJjZVJlZj4gbV9jbGllbnRQb3J0U291cmNlOwot
ICAgIG1hY2hfcG9ydF90IG1fcGx1Z2luSG9zdFBvcnQgeyBNQUNIX1BPUlRfTlVMTCB9OwotICAg
IFJldGFpblB0cjxDRk1hY2hQb3J0UmVmPiBtX2RlYWROYW1lTm90aWZpY2F0aW9uUG9ydDsKLSAg
ICAKLSAgICBSZXRhaW5QdHI8aWQ+IG1fYWN0aXZhdGlvbk9ic2VydmVyOwotICAgIFJldGFpblB0
cjxXZWJQbGFjZWhvbGRlck1vZGFsV2luZG93PiBtX3BsYWNlaG9sZGVyV2luZG93OwotICAgIHVu
c2lnbmVkIG1faXNNb2RhbDsKLSAgICBib29sIG1fbWVudUJhcklzVmlzaWJsZTsKLSAgICBib29s
IG1fZnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZzsKLSAgICBjb25zdCBQcm9jZXNzU2VyaWFsTnVt
YmVyIG1fcGx1Z2luSG9zdFBTTjsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBzX3Byb2Nlc3NpbmdS
ZXF1ZXN0czsKLQotICAgIGJvb2wgbV9zaG91bGRDYWNoZU1pc3NpbmdQcm9wZXJ0aWVzQW5kTWV0
aG9kczsKLX07Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShQ
TFVHSU5fSE9TVF9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
UGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY2ZmFkOTFkNTJhZmU1NDA5ODgyM2Y4MjdlZTk0
NjA1NTBmNTE3NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhv
c3RQcm94eS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDExOTEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZiBVU0UoUExVR0lOX0hP
U1RfUFJPQ0VTUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbXBvcnQgIk5l
dHNjYXBlUGx1Z2luSG9zdFByb3h5LmgiCi0KLSNpbXBvcnQgPG1hY2gvbWFjaC5oPgotI2ltcG9y
dCA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi0jaW1wb3J0ICJIb3N0ZWROZXRzY2FwZVBsdWdpblN0
cmVhbS5oIgotI2ltcG9ydCAiTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5oIgotI2ltcG9ydCAi
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5LmgiCi0jaW1wb3J0ICJXZWJGcmFtZUludGVybmFs
LmgiCi0jaW1wb3J0ICJXZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcuaCIKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0lkZW50aWZpZXJJbmxpbmVzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0NvbW1v
blZNLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0lkZW50
aWZpZXJSZXAuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2NyaXB0Q29udHJvbGxlci5oPgotI2ltcG9y
dCA8cGFsL3NwaS9tYWMvSElTZXJ2aWNlc1NQSS5oPgotI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+Ci0KLWV4dGVybiAiQyIgewotI2ltcG9ydCAiV2ViS2l0UGx1Z2luSG9zdC5oIgotI2lt
cG9ydCAiV2ViS2l0UGx1Z2luQ2xpZW50U2VydmVyLmgiCi19Ci0KLXVzaW5nIG5hbWVzcGFjZSBK
U0M7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotQGludGVyZmFjZSBXZWJQbGFjZWhvbGRl
ck1vZGFsV2luZG93IDogTlNXaW5kb3cgCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJQbGFj
ZWhvbGRlck1vZGFsV2luZG93Ci0vLyBQcmV2ZW50IE5TQXBwIGZyb20gY2FsbGluZyByZXF1ZXN0
VXNlckF0dGVudGlvbjogd2hlbiB0aGUgd2luZG93IGlzIHNob3duIAotLy8gbW9kYWxseSwgZXZl
biBpZiB0aGUgYXBwIGlzIGluYWN0aXZlLiBTZWUgNjgyMzA0OS4KLS0gKEJPT0wpX3dhbnRzVXNl
ckF0dGVudGlvbgotewotICAgIHJldHVybiBOTzsgICAKLX0KLUBlbmQKLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLWNsYXNzIFBsdWdpbkRlc3Ryb3lEZWZlcnJlciB7Ci1wdWJsaWM6Ci0gICAgUGx1
Z2luRGVzdHJveURlZmVycmVyKE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSogcHJveHkpCi0g
ICAgICAgIDogbV9wcm94eShwcm94eSkKLSAgICB7Ci0gICAgICAgIG1fcHJveHktPndpbGxDYWxs
UGx1Z2luRnVuY3Rpb24oKTsKLSAgICB9Ci0gICAgCi0gICAgflBsdWdpbkRlc3Ryb3lEZWZlcnJl
cigpCi0gICAgewotICAgICAgICBib29sIHN0b3BwZWQ7Ci0gICAgICAgIG1fcHJveHktPmRpZENh
bGxQbHVnaW5GdW5jdGlvbihzdG9wcGVkKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRy
PE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eT4gbV9wcm94eTsKLX07Ci0KLXR5cGVkZWYgSGFz
aE1hcDxtYWNoX3BvcnRfdCwgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqPiBQbHVnaW5Qcm94eU1h
cDsKLXN0YXRpYyBQbHVnaW5Qcm94eU1hcCYgcGx1Z2luUHJveHlNYXAoKQotewotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxQbHVnaW5Qcm94eU1hcD4gcGx1Z2luUHJveHlNYXA7Ci0gICAgcmV0
dXJuIHBsdWdpblByb3h5TWFwOwotfQotCi11bnNpZ25lZCBOZXRzY2FwZVBsdWdpbkhvc3RQcm94
eTo6c19wcm9jZXNzaW5nUmVxdWVzdHM7Ci0KLU5ldHNjYXBlUGx1Z2luSG9zdFByb3h5OjpOZXRz
Y2FwZVBsdWdpbkhvc3RQcm94eShtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCBtYWNoX3BvcnRfdCBw
bHVnaW5Ib3N0UG9ydCwgY29uc3QgUHJvY2Vzc1NlcmlhbE51bWJlciYgcGx1Z2luSG9zdFBTTiwg
Ym9vbCBzaG91bGRDYWNoZU1pc3NpbmdQcm9wZXJ0aWVzQW5kTWV0aG9kcykKLSAgICA6IG1fY2xp
ZW50UG9ydChjbGllbnRQb3J0KQotICAgICwgbV9wbHVnaW5Ib3N0UG9ydChwbHVnaW5Ib3N0UG9y
dCkKLSAgICAsIG1faXNNb2RhbChmYWxzZSkKLSAgICAsIG1fbWVudUJhcklzVmlzaWJsZSh0cnVl
KQotICAgICwgbV9mdWxsc2NyZWVuV2luZG93SXNTaG93aW5nKGZhbHNlKQotICAgICwgbV9wbHVn
aW5Ib3N0UFNOKHBsdWdpbkhvc3RQU04pCi0gICAgLCBtX3Nob3VsZENhY2hlTWlzc2luZ1Byb3Bl
cnRpZXNBbmRNZXRob2RzKHNob3VsZENhY2hlTWlzc2luZ1Byb3BlcnRpZXNBbmRNZXRob2RzKQot
ewotICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQobV9jbGllbnRQb3J0KSk7Ci0gICAgQVNTRVJU
KE1BQ0hfUE9SVF9WQUxJRChtX3BsdWdpbkhvc3RQb3J0KSk7Ci0KLSAgICBwbHVnaW5Qcm94eU1h
cCgpLmFkZChtX2NsaWVudFBvcnQsIHRoaXMpOwotICAgIAotICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgdXNlIGxpYmRpc3BhdGNoIGZvciB0aGlzLgotICAgIENGTWFjaFBvcnRDb250ZXh0IGNvbnRl
eHQgPSB7IDAsIHRoaXMsIDAsIDAsIDAgfTsKLSAgICBtX2RlYWROYW1lTm90aWZpY2F0aW9uUG9y
dCA9IGFkb3B0Q0YoQ0ZNYWNoUG9ydENyZWF0ZSgwLCBkZWFkTmFtZU5vdGlmaWNhdGlvbkNhbGxi
YWNrLCAmY29udGV4dCwgMCkpOwotCi0gICAgbWFjaF9wb3J0X3QgcHJldmlvdXMgPSBNQUNIX1BP
UlRfTlVMTDsKLSAgICBhdXRvIGtyID0gbWFjaF9wb3J0X3JlcXVlc3Rfbm90aWZpY2F0aW9uKG1h
Y2hfdGFza19zZWxmKCksIHBsdWdpbkhvc3RQb3J0LCBNQUNIX05PVElGWV9ERUFEX05BTUUsIDAs
Ci0gICAgICAgIENGTWFjaFBvcnRHZXRQb3J0KG1fZGVhZE5hbWVOb3RpZmljYXRpb25Qb3J0Lmdl
dCgpKSwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkRfT05DRSwgJnByZXZpb3VzKTsKLSAgICBBU1NF
UlQocHJldmlvdXMgPT0gTUFDSF9QT1JUX05VTEwpOwotICAgIEFTU0VSVChrciA9PSBLRVJOX1NV
Q0NFU1MpOwotICAgIGlmIChrciAhPSBLRVJOX1NVQ0NFU1MpIHsKLSAgICAgICAgLy8gSWYgbWFj
aF9wb3J0X3JlcXVlc3Rfbm90aWZpY2F0aW9uIGZhaWxzLCAncHJldmlvdXMnIHdpbGwgYmUgdW5p
bml0aWFsaXplZC4KLSAgICAgICAgTE9HX0VSUk9SKCJtYWNoX3BvcnRfcmVxdWVzdF9ub3RpZmlj
YXRpb24gZmFpbGVkOiAoJXgpICVzIiwga3IsIG1hY2hfZXJyb3Jfc3RyaW5nKGtyKSk7Ci0gICAg
ICAgIHByZXZpb3VzID0gTUFDSF9QT1JUX05VTEw7Ci0gICAgfQotCi0gICAgUmV0YWluUHRyPENG
UnVuTG9vcFNvdXJjZVJlZj4gZGVhdGhQb3J0U291cmNlID0gYWRvcHRDRihDRk1hY2hQb3J0Q3Jl
YXRlUnVuTG9vcFNvdXJjZSgwLCBtX2RlYWROYW1lTm90aWZpY2F0aW9uUG9ydC5nZXQoKSwgMCkp
OwotICAgIAotICAgIENGUnVuTG9vcEFkZFNvdXJjZShDRlJ1bkxvb3BHZXRDdXJyZW50KCksIGRl
YXRoUG9ydFNvdXJjZS5nZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLSAgICAKLSAgICBt
X2NsaWVudFBvcnRTb3VyY2UgPSBhZG9wdENGKE1TSENyZWF0ZU1JR1NlcnZlclNvdXJjZShudWxs
cHRyLCAwLCByZWludGVycHJldF9jYXN0PG1pZ19zdWJzeXN0ZW1fdD4oY29uc3RfY2FzdDxzdHJ1
Y3QgV0tXZWJLaXRQbHVnaW5DbGllbnRfc3Vic3lzdGVtKj4oJldLV2ViS2l0UGx1Z2luQ2xpZW50
X3N1YnN5c3RlbSkpLCBrTVNIRG9Ob3RDcmVhdGVTZW5kUmlnaHRPcHRpb24sIG1fY2xpZW50UG9y
dCwgbnVsbHB0cikpOwotICAgIENGUnVuTG9vcEFkZFNvdXJjZShDRlJ1bkxvb3BHZXRDdXJyZW50
KCksIG1fY2xpZW50UG9ydFNvdXJjZS5nZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLSAg
ICBDRlJ1bkxvb3BBZGRTb3VyY2UoQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBtX2NsaWVudFBvcnRT
b3VyY2UuZ2V0KCksIChDRlN0cmluZ1JlZilOU0V2ZW50VHJhY2tpbmdSdW5Mb29wTW9kZSk7Ci19
Ci0KLU5ldHNjYXBlUGx1Z2luSG9zdFByb3h5Ojp+TmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkoKQot
ewotICAgIHBsdWdpblByb3h5TWFwKCkucmVtb3ZlKG1fY2xpZW50UG9ydCk7Ci0KLSAgICBpZiAo
bV9wb3J0U2V0KSB7Ci0gICAgICAgIG1hY2hfcG9ydF9leHRyYWN0X21lbWJlcihtYWNoX3Rhc2tf
c2VsZigpLCBtX2NsaWVudFBvcnQsIG1fcG9ydFNldCk7Ci0gICAgICAgIG1hY2hfcG9ydF9leHRy
YWN0X21lbWJlcihtYWNoX3Rhc2tfc2VsZigpLCBDRk1hY2hQb3J0R2V0UG9ydChtX2RlYWROYW1l
Tm90aWZpY2F0aW9uUG9ydC5nZXQoKSksIG1fcG9ydFNldCk7Ci0gICAgICAgIG1hY2hfcG9ydF9t
b2RfcmVmcyhtYWNoX3Rhc2tfc2VsZigpLCBtX3BvcnRTZXQsIE1BQ0hfUE9SVF9SSUdIVF9QT1JU
X1NFVCwgLTEpOwotICAgICAgICBtX3BvcnRTZXQgPSBNQUNIX1BPUlRfTlVMTDsKLSAgICB9Ci0g
ICAgCi0gICAgQVNTRVJUKG1fY2xpZW50UG9ydFNvdXJjZSk7Ci0gICAgQ0ZSdW5Mb29wU291cmNl
SW52YWxpZGF0ZShtX2NsaWVudFBvcnRTb3VyY2UuZ2V0KCkpOwotICAgIG1fY2xpZW50UG9ydFNv
dXJjZSA9IDA7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHk6OnBsdWdpbkhvc3RE
aWVkKCkKLXsKLSAgICBQbHVnaW5JbnN0YW5jZU1hcCBpbnN0YW5jZXM7ICAgIAotICAgIG1faW5z
dGFuY2VzLnN3YXAoaW5zdGFuY2VzKTsKLSAgCi0gICAgUGx1Z2luSW5zdGFuY2VNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IGluc3RhbmNlcy5lbmQoKTsKLSAgICBmb3IgKFBsdWdpbkluc3RhbmNl
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGluc3RhbmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgIGl0LT52YWx1ZS0+cGx1Z2luSG9zdERpZWQoKTsKLSAgICAKLSAgICBOZXRz
Y2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpzaW5nbGV0b24oKS5wbHVnaW5Ib3N0RGllZCh0aGlzKTsK
LSAgICAKLSAgICAvLyBUaGUgcGx1Zy1pbiBjcmFzaGVkIHdoaWxlIGl0cyBtZW51IGJhciB3YXMg
aGlkZGVuLiBNYWtlIHN1cmUgdG8gc2hvdyBpdC4KLSAgICBpZiAoIW1fbWVudUJhcklzVmlzaWJs
ZSkKLSAgICAgICAgc2V0TWVudUJhclZpc2libGUodHJ1ZSk7Ci0KLSAgICAvLyBUaGUgcGx1Zy1p
biBjcmFzaGVkIHdoaWxlIGl0IGhhZCBhIG1vZGFsIGRpYWxvZyB1cC4KLSAgICBpZiAobV9pc01v
ZGFsKQotICAgICAgICBlbmRNb2RhbCgpOwotICAgIAotICAgIGRlbGV0ZSB0aGlzOwotfQotICAg
IAotdm9pZCBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eTo6YWRkUGx1Z2luSW5zdGFuY2UoTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZSkKLXsKLSAgICBBU1NFUlQoIW1faW5zdGFu
Y2VzLmNvbnRhaW5zKGluc3RhbmNlLT5wbHVnaW5JRCgpKSk7Ci0gICAgCi0gICAgbV9pbnN0YW5j
ZXMuc2V0KGluc3RhbmNlLT5wbHVnaW5JRCgpLCBpbnN0YW5jZSk7Ci19Ci0gICAgCi12b2lkIE5l
dHNjYXBlUGx1Z2luSG9zdFByb3h5OjpyZW1vdmVQbHVnaW5JbnN0YW5jZShOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHkqIGluc3RhbmNlKQotewotICAgIEFTU0VSVChtX2luc3RhbmNlcy5nZXQo
aW5zdGFuY2UtPnBsdWdpbklEKCkpID09IGluc3RhbmNlKTsKLQotICAgIG1faW5zdGFuY2VzLnJl
bW92ZShpbnN0YW5jZS0+cGx1Z2luSUQoKSk7Ci19Ci0KLU5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eSogTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHk6OnBsdWdpbkluc3RhbmNlKHVpbnQzMl90IHBs
dWdpbklEKQotewotICAgIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSogcmVzdWx0ID0gbV9p
bnN0YW5jZXMuZ2V0KHBsdWdpbklEKTsKLSAgICBBU1NFUlQoIXJlc3VsdCB8fCByZXN1bHQtPmhv
c3RQcm94eSgpID09IHRoaXMpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgTmV0c2Nh
cGVQbHVnaW5Ib3N0UHJveHk6OmRlYWROYW1lTm90aWZpY2F0aW9uQ2FsbGJhY2soQ0ZNYWNoUG9y
dFJlZiBwb3J0LCB2b2lkICptc2csIENGSW5kZXggc2l6ZSwgdm9pZCAqaW5mbykKLXsKLSAgICBB
U1NFUlQobXNnKTsKLSAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8bWFjaF9tc2dfaGVhZGVyX3QqPiht
c2cpLT5tc2doX2lkID09IE1BQ0hfTk9USUZZX0RFQURfTkFNRSk7Ci0gICAgCi0gICAgc3RhdGlj
X2Nhc3Q8TmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqPihpbmZvKS0+cGx1Z2luSG9zdERpZWQoKTsK
LX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eTo6c2V0TWVudUJhclZpc2libGUoYm9v
bCB2aXNpYmxlKQotewotICAgIG1fbWVudUJhcklzVmlzaWJsZSA9IHZpc2libGU7Ci0KLSAgICBb
TlNNZW51IHNldE1lbnVCYXJWaXNpYmxlOnZpc2libGVdOwotfQotCi12b2lkIE5ldHNjYXBlUGx1
Z2luSG9zdFByb3h5OjpkaWRFbnRlckZ1bGxzY3JlZW4oKSBjb25zdAotewotICAgIG1ha2VQbHVn
aW5Ib3N0UHJvY2Vzc0Zyb250UHJvY2VzcygpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSG9z
dFByb3h5OjpkaWRFeGl0RnVsbHNjcmVlbigpIGNvbnN0Ci17Ci0gICAgLy8gSWYgdGhlIHBsdWct
aW4gaG9zdCBpcyB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiB0aGVuIHdlIHNob3VsZCBicmluZyBv
dXJzZWx2ZXMgdG8gdGhlIGZyb250IHdoZW4gaXQgZXhpdHMgZnVsbC1zY3JlZW4gbW9kZS4KLSAg
ICBpZiAoaXNQbHVnaW5Ib3N0UHJvY2Vzc0Zyb250UHJvY2VzcygpKQotICAgICAgICBtYWtlQ3Vy
cmVudFByb2Nlc3NGcm9udFByb2Nlc3MoKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkhvc3RQ
cm94eTo6c2V0RnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZyhib29sIGlzU2hvd2luZykKLXsKLSAg
ICBpZiAobV9mdWxsc2NyZWVuV2luZG93SXNTaG93aW5nID09IGlzU2hvd2luZykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9mdWxsc2NyZWVuV2luZG93SXNTaG93aW5nID0gaXNTaG93aW5nOwot
ICAgIGlmIChtX2Z1bGxzY3JlZW5XaW5kb3dJc1Nob3dpbmcpCi0gICAgICAgIGRpZEVudGVyRnVs
bHNjcmVlbigpOwotICAgIGVsc2UKLSAgICAgICAgZGlkRXhpdEZ1bGxzY3JlZW4oKTsKLQotfQot
Ci12b2lkIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5OjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2
ZSgpCi17Ci0gICAgbWFrZVBsdWdpbkhvc3RQcm9jZXNzRnJvbnRQcm9jZXNzKCk7Ci19Ci0KLXZv
aWQgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHk6OmJlZ2luTW9kYWwoKQotewotICAgIEFTU0VSVCgh
bV9wbGFjZWhvbGRlcldpbmRvdyk7Ci0gICAgQVNTRVJUKCFtX2FjdGl2YXRpb25PYnNlcnZlcik7
Ci0gICAgCi0gICAgbV9wbGFjZWhvbGRlcldpbmRvdyA9IGFkb3B0TlMoW1tXZWJQbGFjZWhvbGRl
ck1vZGFsV2luZG93IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0Ok5TTWFrZVJlY3QoMCwgMCwg
MSwgMSkgc3R5bGVNYXNrOk5TV2luZG93U3R5bGVNYXNrQm9yZGVybGVzcyBiYWNraW5nOk5TQmFj
a2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6WUVTXSk7Ci0KLSAgICBtX2FjdGl2YXRpb25PYnNlcnZl
ciA9IFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXJGb3JO
YW1lOk5TQXBwbGljYXRpb25XaWxsQmVjb21lQWN0aXZlTm90aWZpY2F0aW9uIG9iamVjdDpOU0Fw
cCBxdWV1ZTpuaWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZ0Jsb2NrOl4oTlNOb3RpZmljYXRpb24g
Kil7IGFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCk7IH1dOwotICAgIAotICAgIC8vIFdlIG5l
ZWQgdG8gYmUgYWJsZSB0byBnZXQgdGhlIHNldE1vZGFsKGZhbHNlKSBjYWxsIGZyb20gdGhlIHBs
dWctaW4gaG9zdC4KLSAgICBDRlJ1bkxvb3BBZGRTb3VyY2UoQ0ZSdW5Mb29wR2V0Q3VycmVudCgp
LCBtX2NsaWVudFBvcnRTb3VyY2UuZ2V0KCksIChDRlN0cmluZ1JlZilOU01vZGFsUGFuZWxSdW5M
b29wTW9kZSk7Ci0gICAgCi0gICAgW05TQXBwIHJ1bk1vZGFsRm9yV2luZG93Om1fcGxhY2Vob2xk
ZXJXaW5kb3cuZ2V0KCldOwotICAgIAotICAgIFttX3BsYWNlaG9sZGVyV2luZG93LmdldCgpIG9y
ZGVyT3V0Om5pbF07Ci0gICAgbV9wbGFjZWhvbGRlcldpbmRvdyA9IDA7Ci19Ci0gICAgCi12b2lk
IE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5OjplbmRNb2RhbCgpCi17Ci0gICAgQVNTRVJUKG1fcGxh
Y2Vob2xkZXJXaW5kb3cpOwotICAgIEFTU0VSVChtX2FjdGl2YXRpb25PYnNlcnZlcik7Ci0gICAg
Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZl
cjptX2FjdGl2YXRpb25PYnNlcnZlci5nZXQoKV07Ci0gICAgbV9hY3RpdmF0aW9uT2JzZXJ2ZXIg
PSBuaWw7Ci0gICAgCi0gICAgQ0ZSdW5Mb29wUmVtb3ZlU291cmNlKENGUnVuTG9vcEdldEN1cnJl
bnQoKSwgbV9jbGllbnRQb3J0U291cmNlLmdldCgpLCAoQ0ZTdHJpbmdSZWYpTlNNb2RhbFBhbmVs
UnVuTG9vcE1vZGUpOwotICAgIAotICAgIFtOU0FwcCBzdG9wTW9kYWxdOwotCi0gICAgbWFrZUN1
cnJlbnRQcm9jZXNzRnJvbnRQcm9jZXNzKCk7Ci19Ci0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkhv
c3RQcm94eTo6c2V0TW9kYWwoYm9vbCBtb2RhbCkKLXsKLSAgICBpZiAobW9kYWwgPT0gbV9pc01v
ZGFsKSAKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1faXNNb2RhbCA9IG1vZGFsOwotICAg
IAotICAgIGlmIChtX2lzTW9kYWwpCi0gICAgICAgIGJlZ2luTW9kYWwoKTsKLSAgICBlbHNlCi0g
ICAgICAgIGVuZE1vZGFsKCk7Ci19Ci0gICAgCi1ib29sIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5
Ojpwcm9jZXNzUmVxdWVzdHMoKQotewotICAgIHNfcHJvY2Vzc2luZ1JlcXVlc3RzKys7Ci0KLSAg
ICBpZiAoIW1fcG9ydFNldCkgewotICAgICAgICBhdXRvIGtyID0gbWFjaF9wb3J0X2FsbG9jYXRl
KG1hY2hfdGFza19zZWxmKCksIE1BQ0hfUE9SVF9SSUdIVF9QT1JUX1NFVCwgJm1fcG9ydFNldCk7
Ci0gICAgICAgIGlmIChrciAhPSBLRVJOX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIExPR19FUlJP
UigiQ291bGQgbm90IGFsbG9jYXRlIG1hY2ggcG9ydCwgZXJyb3IgJXg6ICVzIiwga3IsIG1hY2hf
ZXJyb3Jfc3RyaW5nKGtyKSk7Ci0gICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICB9Ci0gICAg
ICAgIG1hY2hfcG9ydF9pbnNlcnRfbWVtYmVyKG1hY2hfdGFza19zZWxmKCksIG1fY2xpZW50UG9y
dCwgbV9wb3J0U2V0KTsKLSAgICAgICAgbWFjaF9wb3J0X2luc2VydF9tZW1iZXIobWFjaF90YXNr
X3NlbGYoKSwgQ0ZNYWNoUG9ydEdldFBvcnQobV9kZWFkTmFtZU5vdGlmaWNhdGlvblBvcnQuZ2V0
KCkpLCBtX3BvcnRTZXQpOwotICAgIH0KLSAgICAKLSAgICBjaGFyIGJ1ZmZlcls0MDk2XTsKLSAg
ICAKLSAgICBtYWNoX21zZ19oZWFkZXJfdCogbXNnID0gcmVpbnRlcnByZXRfY2FzdDxtYWNoX21z
Z19oZWFkZXJfdCo+KGJ1ZmZlcik7Ci0gICAgCi0gICAga2Vybl9yZXR1cm5fdCBrciA9IG1hY2hf
bXNnKG1zZywgTUFDSF9SQ1ZfTVNHLCAwLCBzaXplb2YoYnVmZmVyKSwgbV9wb3J0U2V0LCAwLCBN
QUNIX1BPUlRfTlVMTCk7Ci0gICAgCi0gICAgaWYgKGtyICE9IEtFUk5fU1VDQ0VTUykgewotICAg
ICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCByZWNlaXZlIG1hY2ggbWVzc2FnZSwgZXJyb3IgJXg6
ICVzIiwga3IsIG1hY2hfZXJyb3Jfc3RyaW5nKGtyKSk7Ci0gICAgICAgIHNfcHJvY2Vzc2luZ1Jl
cXVlc3RzLS07Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1z
Zy0+bXNnaF9sb2NhbF9wb3J0ID09IG1fY2xpZW50UG9ydCkgewotICAgICAgICBfX1JlcGx5VW5p
b25fX1dLV2ViS2l0UGx1Z2luQ2xpZW50X3N1YnN5c3RlbSByZXBseTsKLSAgICAgICAgbWFjaF9t
c2dfaGVhZGVyX3QqIHJlcGx5SGVhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxtYWNoX21zZ19oZWFk
ZXJfdCo+KCZyZXBseSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoV2ViS2l0UGx1Z2luQ2xpZW50
X3NlcnZlcihtc2csIHJlcGx5SGVhZGVyKSAmJiBNQUNIX1BPUlRfVkFMSUQocmVwbHlIZWFkZXIt
Pm1zZ2hfcmVtb3RlX3BvcnQpKSB7Ci0gICAgICAgICAgICBrciA9IG1hY2hfbXNnKHJlcGx5SGVh
ZGVyLCBNQUNIX1NFTkRfTVNHLCByZXBseUhlYWRlci0+bXNnaF9zaXplLCAwLCBNQUNIX1BPUlRf
TlVMTCwgMCwgTUFDSF9QT1JUX05VTEwpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
a3IgIT0gS0VSTl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3Qgc2VuZCBtYWNoIG1lc3NhZ2UsIGVycm9yICV4OiAlcyIsIGtyLCBtYWNoX2Vycm9yX3N0cmlu
ZyhrcikpOwotICAgICAgICAgICAgICAgIHNfcHJvY2Vzc2luZ1JlcXVlc3RzLS07Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBzX3Byb2Nlc3NpbmdSZXF1ZXN0cy0tOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgCi0gICAgaWYgKG1zZy0+bXNnaF9sb2NhbF9wb3J0ID09IENGTWFjaFBvcnRH
ZXRQb3J0KG1fZGVhZE5hbWVOb3RpZmljYXRpb25Qb3J0LmdldCgpKSkgewotICAgICAgICBBU1NF
UlQobXNnLT5tc2doX2lkID09IE1BQ0hfTk9USUZZX0RFQURfTkFNRSk7Ci0gICAgICAgIHBsdWdp
bkhvc3REaWVkKCk7Ci0gICAgICAgIHNfcHJvY2Vzc2luZ1JlcXVlc3RzLS07Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
c19wcm9jZXNzaW5nUmVxdWVzdHMtLTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTmV0
c2NhcGVQbHVnaW5Ib3N0UHJveHk6Om1ha2VDdXJyZW50UHJvY2Vzc0Zyb250UHJvY2VzcygpCi17
Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBQcm9jZXNzU2Vy
aWFsTnVtYmVyIHBzbjsKLSAgICBHZXRDdXJyZW50UHJvY2VzcygmcHNuKTsKLSAgICBTZXRGcm9u
dFByb2Nlc3MoJnBzbik7Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi19
Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHk6Om1ha2VQbHVnaW5Ib3N0UHJvY2Vzc0Zy
b250UHJvY2VzcygpIGNvbnN0Ci17Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNf
QkVHSU4KLSAgICBTZXRGcm9udFByb2Nlc3MoJm1fcGx1Z2luSG9zdFBTTik7Ci0gICAgQUxMT1df
REVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW5Ib3N0
UHJveHk6OmlzUGx1Z2luSG9zdFByb2Nlc3NGcm9udFByb2Nlc3MoKSBjb25zdAotewotICAgIEFM
TE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgUHJvY2Vzc1NlcmlhbE51bWJl
ciBmcm9udFByb2Nlc3M7Ci0gICAgR2V0RnJvbnRQcm9jZXNzKCZmcm9udFByb2Nlc3MpOwotCi0g
ICAgQm9vbGVhbiBpc1NhbWVQcm9jZXNzID0gMDsKLSAgICBTYW1lUHJvY2VzcygmZnJvbnRQcm9j
ZXNzLCAmbV9wbHVnaW5Ib3N0UFNOLCAmaXNTYW1lUHJvY2Vzcyk7Ci0gICAgQUxMT1dfREVQUkVD
QVRFRF9ERUNMQVJBVElPTlNfRU5ECi0KLSAgICByZXR1cm4gaXNTYW1lUHJvY2VzczsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KLS8vIEhl
bHBlciBjbGFzcyBmb3IgZGVhbGxvY2F0aW5nIGRhdGEKLWNsYXNzIERhdGFEZWFsbG9jYXRvciB7
Ci1wdWJsaWM6Ci0gICAgRGF0YURlYWxsb2NhdG9yKGRhdGFfdCBkYXRhLCBtYWNoX21zZ190eXBl
X251bWJlcl90IGRhdGFMZW5ndGgpCi0gICAgICAgIDogbV9kYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8
dm1fYWRkcmVzc190PihkYXRhKSkKLSAgICAgICAgLCBtX2RhdGFMZW5ndGgoZGF0YUxlbmd0aCkK
LSAgICB7Ci0gICAgfQotICAgIAotICAgIH5EYXRhRGVhbGxvY2F0b3IoKQotICAgIHsKLSAgICAg
ICAgaWYgKCFtX2RhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICB2
bV9kZWFsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIG1fZGF0YSwgbV9kYXRhTGVuZ3RoKTsKLSAg
ICB9Ci0gICAgCi1wcml2YXRlOgotICAgIHZtX2FkZHJlc3NfdCBtX2RhdGE7Ci0gICAgdm1fc2l6
ZV90IG1fZGF0YUxlbmd0aDsKLX07Ci0KLS8vIE1pRyBjYWxsYmFja3MKLWtlcm5fcmV0dXJuX3Qg
V0tQQ1N0YXR1c1RleHQobWFjaF9wb3J0X3QgY2xpZW50UG9ydCwgdWludDMyX3QgcGx1Z2luSUQs
IGRhdGFfdCB0ZXh0LCBtYWNoX21zZ190eXBlX251bWJlcl90IHRleHRDbnQpCi17Ci0gICAgQVNT
RVJUKE1BQ0hfUE9SVF9WQUxJRChjbGllbnRQb3J0KSk7Ci0KLSAgICBEYXRhRGVhbGxvY2F0b3Ig
ZGVhbGxvY2F0b3IodGV4dCwgdGV4dENudCk7Ci0gICAgCi0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0
UHJveHkqIGhvc3RQcm94eSA9IHBsdWdpblByb3h5TWFwKCkuZ2V0KGNsaWVudFBvcnQpOwotICAg
IGlmICghaG9zdFByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAgIAotICAg
IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSogaW5zdGFuY2VQcm94eSA9IGhvc3RQcm94eS0+
cGx1Z2luSW5zdGFuY2UocGx1Z2luSUQpOwotICAgIGlmICghaW5zdGFuY2VQcm94eSkKLSAgICAg
ICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBpbnN0YW5jZVByb3h5LT5zdGF0dXMo
dGV4dCk7Ci0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1cm5fdCBXS1BD
TG9hZFVSTChtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJfdCBwbHVnaW5JRCwgZGF0YV90
IHVybCwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCB1cmxMZW5ndGgsIGRhdGFfdCB0YXJnZXQsIG1h
Y2hfbXNnX3R5cGVfbnVtYmVyX3QgdGFyZ2V0TGVuZ3RoLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YV90IHBvc3REYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90IHBvc3REYXRhTGVu
Z3RoLCB1aW50MzJfdCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qq
IG91dFJlc3VsdCwgdWludDMyX3QqIG91dFN0cmVhbUlEKQotewotICAgIEFTU0VSVChNQUNIX1BP
UlRfVkFMSUQoY2xpZW50UG9ydCkpOwotCi0gICAgRGF0YURlYWxsb2NhdG9yIHVybERlYWxsb2Nh
dG9yKHVybCwgdXJsTGVuZ3RoKTsKLSAgICBEYXRhRGVhbGxvY2F0b3IgdGFyZ2V0RGVhbGxvY2F0
b3IodGFyZ2V0LCB0YXJnZXRMZW5ndGgpOwotICAgIERhdGFEZWFsbG9jYXRvciBwb3N0RGF0YURl
YWxsb2NhdG9yKHBvc3REYXRhLCBwb3N0RGF0YUxlbmd0aCk7Ci0KLSAgICBOZXRzY2FwZVBsdWdp
bkhvc3RQcm94eSogaG9zdFByb3h5ID0gcGx1Z2luUHJveHlNYXAoKS5nZXQoY2xpZW50UG9ydCk7
Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAg
Ci0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZVByb3h5ID0gaG9zdFBy
b3h5LT5wbHVnaW5JbnN0YW5jZShwbHVnaW5JRCk7Ci0gICAgaWYgKCFpbnN0YW5jZVByb3h5KQot
ICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAgdWludDMyX3Qgc3RyZWFtSUQgPSAw
OwotICAgIE5QRXJyb3IgcmVzdWx0ID0gaW5zdGFuY2VQcm94eS0+bG9hZFVSTCh1cmwsIHRhcmdl
dCwgcG9zdERhdGEsIHBvc3REYXRhTGVuZ3RoLCBzdGF0aWNfY2FzdDxMb2FkVVJMRmxhZ3M+KGZs
YWdzKSwgc3RyZWFtSUQpOwotICAgIAotICAgICpvdXRSZXN1bHQgPSByZXN1bHQ7Ci0gICAgKm91
dFN0cmVhbUlEID0gc3RyZWFtSUQ7Ci0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vy
bl9yZXR1cm5fdCBXS1BDQ2FuY2VsTG9hZFVSTChtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50
MzJfdCBwbHVnaW5JRCwgdWludDMyX3Qgc3RyZWFtSUQsIGludDE2X3QgcmVhc29uKQotewotICAg
IEFTU0VSVChNQUNIX1BPUlRfVkFMSUQoY2xpZW50UG9ydCkpOwotCi0gICAgTmV0c2NhcGVQbHVn
aW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IHBsdWdpblByb3h5TWFwKCkuZ2V0KGNsaWVudFBvcnQp
OwotICAgIGlmICghaG9zdFByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAg
IAotICAgIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSogaW5zdGFuY2VQcm94eSA9IGhvc3RQ
cm94eS0+cGx1Z2luSW5zdGFuY2UocGx1Z2luSUQpOwotICAgIGlmICghaW5zdGFuY2VQcm94eSkK
LSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBpZiAoIWluc3RhbmNlUHJv
eHktPmNhbmNlbFN0cmVhbUxvYWQoc3RyZWFtSUQsIHJlYXNvbikpCi0gICAgICAgIHJldHVybiBL
RVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9y
ZXR1cm5fdCBXS1BDSW52YWxpZGF0ZVJlY3QobWFjaF9wb3J0X3QgY2xpZW50UG9ydCwgdWludDMy
X3QgcGx1Z2luSUQsIGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHdpZHRoLCBkb3VibGUgaGVp
Z2h0KQotewotICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQoY2xpZW50UG9ydCkpOwotCi0gICAg
TmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IHBsdWdpblByb3h5TWFwKCkuZ2V0
KGNsaWVudFBvcnQpOwotICAgIGlmICghaG9zdFByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9T
VUNDRVNTOwotCi0gICAgaWYgKCFob3N0UHJveHktPmlzUHJvY2Vzc2luZ1JlcXVlc3RzKCkpIHsK
LSAgICAgICAgaWYgKE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSogaW5zdGFuY2VQcm94eSA9
IGhvc3RQcm94eS0+cGx1Z2luSW5zdGFuY2UocGx1Z2luSUQpKQotICAgICAgICAgICAgaW5zdGFu
Y2VQcm94eS0+aW52YWxpZGF0ZVJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIHJl
dHVybiBLRVJOX1NVQ0NFU1M7Ci0gICAgfQotCi0gICAgLy8gRGVmZXIgdGhlIHdvcmsKLSAgICBD
RlJ1bkxvb3BQZXJmb3JtQmxvY2soQ0ZSdW5Mb29wR2V0TWFpbigpLCBrQ0ZSdW5Mb29wRGVmYXVs
dE1vZGUsIF57Ci0gICAgICAgIGlmIChOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5
ID0gcGx1Z2luUHJveHlNYXAoKS5nZXQoY2xpZW50UG9ydCkpIHsKLSAgICAgICAgICAgIGlmIChO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIGluc3RhbmNlUHJveHkgPSBob3N0UHJveHktPnBs
dWdpbkluc3RhbmNlKHBsdWdpbklEKSkKLSAgICAgICAgICAgICAgICBpbnN0YW5jZVByb3h5LT5p
bnZhbGlkYXRlUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgfQotICAgIH0pOwot
Ci0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1cm5fdCBXS1BDR2V0U2Ny
aXB0YWJsZU5QT2JqZWN0UmVwbHkobWFjaF9wb3J0X3QgY2xpZW50UG9ydCwgdWludDMyX3QgcGx1
Z2luSUQsIHVpbnQzMl90IHJlcXVlc3RJRCwgdWludDMyX3Qgb2JqZWN0SUQpCi17Ci0gICAgQVNT
RVJUKE1BQ0hfUE9SVF9WQUxJRChjbGllbnRQb3J0KSk7Ci0KLSAgICBOZXRzY2FwZVBsdWdpbkhv
c3RQcm94eSogaG9zdFByb3h5ID0gcGx1Z2luUHJveHlNYXAoKS5nZXQoY2xpZW50UG9ydCk7Ci0g
ICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0g
ICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZVByb3h5ID0gaG9zdFByb3h5
LT5wbHVnaW5JbnN0YW5jZShwbHVnaW5JRCk7Ci0gICAgaWYgKCFpbnN0YW5jZVByb3h5KQotICAg
ICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAgaW5zdGFuY2VQcm94eS0+c2V0Q3VycmVu
dFJlcGx5KHJlcXVlc3RJRCwgbWFrZVVuaXF1ZTxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OkdldFNjcmlwdGFibGVOUE9iamVjdFJlcGx5PihvYmplY3RJRCkpOwotICAgIHJldHVybiBLRVJO
X1NVQ0NFU1M7Ci19Ci0KLWtlcm5fcmV0dXJuX3QgV0tQQ0Jvb2xlYW5SZXBseShtYWNoX3BvcnRf
dCBjbGllbnRQb3J0LCB1aW50MzJfdCBwbHVnaW5JRCwgdWludDMyX3QgcmVxdWVzdElELCBib29s
ZWFuX3QgcmVzdWx0KQotewotICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQoY2xpZW50UG9ydCkp
OwotCi0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IHBsdWdpblByb3h5
TWFwKCkuZ2V0KGNsaWVudFBvcnQpOwotICAgIGlmICghaG9zdFByb3h5KQotICAgICAgICByZXR1
cm4gS0VSTl9GQUlMVVJFOwotICAgIAotICAgIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSog
aW5zdGFuY2VQcm94eSA9IGhvc3RQcm94eS0+cGx1Z2luSW5zdGFuY2UocGx1Z2luSUQpOwotICAg
IGlmICghaW5zdGFuY2VQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAK
LSAgICBpbnN0YW5jZVByb3h5LT5zZXRDdXJyZW50UmVwbHkocmVxdWVzdElELCBtYWtlVW5pcXVl
PE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Qm9vbGVhblJlcGx5PihyZXN1bHQpKTsKLSAg
ICByZXR1cm4gS0VSTl9TVUNDRVNTOwotfQotCi1rZXJuX3JldHVybl90IFdLUENCb29sZWFuQW5k
RGF0YVJlcGx5KG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQzMl90IHBsdWdpbklELCB1aW50
MzJfdCByZXF1ZXN0SUQsIGJvb2xlYW5fdCByZXR1cm5WYWx1ZSwgZGF0YV90IHJlc3VsdERhdGEs
IG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgcmVzdWx0TGVuZ3RoKQotewotICAgIEFTU0VSVChNQUNI
X1BPUlRfVkFMSUQoY2xpZW50UG9ydCkpOwotCi0gICAgRGF0YURlYWxsb2NhdG9yIGRlYWxsb2Nh
dG9yKHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7Ci0KLSAgICBOZXRzY2FwZVBsdWdpbkhvc3RQ
cm94eSogaG9zdFByb3h5ID0gcGx1Z2luUHJveHlNYXAoKS5nZXQoY2xpZW50UG9ydCk7Ci0gICAg
aWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZVByb3h5ID0gaG9zdFByb3h5LT5w
bHVnaW5JbnN0YW5jZShwbHVnaW5JRCk7Ci0gICAgaWYgKCFpbnN0YW5jZVByb3h5KQotICAgICAg
ICByZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gcmVzdWx0
ID0gYWRvcHRDRihDRkRhdGFDcmVhdGUoMCwgcmVpbnRlcnByZXRfY2FzdDxVSW50OCo+KHJlc3Vs
dERhdGEpLCByZXN1bHRMZW5ndGgpKTsKLSAgICBpbnN0YW5jZVByb3h5LT5zZXRDdXJyZW50UmVw
bHkocmVxdWVzdElELCBtYWtlVW5pcXVlPE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Qm9v
bGVhbkFuZERhdGFSZXBseT4ocmV0dXJuVmFsdWUsIHJlc3VsdCkpOwotICAgIAotICAgIHJldHVy
biBLRVJOX1NVQ0NFU1M7Ci19Ci0KLWtlcm5fcmV0dXJuX3QgV0tQQ0luc3RhbnRpYXRlUGx1Z2lu
UmVwbHkobWFjaF9wb3J0X3QgY2xpZW50UG9ydCwgdWludDMyX3QgcGx1Z2luSUQsIHVpbnQzMl90
IHJlcXVlc3RJRCwga2Vybl9yZXR1cm5fdCByZXN1bHQsIHVpbnQzMl90IHJlbmRlckNvbnRleHRJ
RCwgdWludDMyX3QgcmVuZGVyZXJUeXBlKQotewotICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQo
Y2xpZW50UG9ydCkpOwotCi0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9
IHBsdWdpblByb3h5TWFwKCkuZ2V0KGNsaWVudFBvcnQpOwotICAgIGlmICghaG9zdFByb3h5KQot
ICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAgIAotICAgIE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eSogaW5zdGFuY2VQcm94eSA9IGhvc3RQcm94eS0+cGx1Z2luSW5zdGFuY2UocGx1
Z2luSUQpOwotICAgIGlmICghaW5zdGFuY2VQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJ
TFVSRTsKLQotICAgIGluc3RhbmNlUHJveHktPnNldEN1cnJlbnRSZXBseShyZXF1ZXN0SUQsIG1h
a2VVbmlxdWU8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpJbnN0YW50aWF0ZVBsdWdpblJl
cGx5PihyZXN1bHQsIHJlbmRlckNvbnRleHRJRCwgc3RhdGljX2Nhc3Q8UmVuZGVyZXJUeXBlPihy
ZW5kZXJlclR5cGUpKSk7Ci0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1
cm5fdCBXS1BDR2V0V2luZG93TlBPYmplY3QobWFjaF9wb3J0X3QgY2xpZW50UG9ydCwgdWludDMy
X3QgcGx1Z2luSUQsIHVpbnQzMl90KiBvdXRPYmplY3RJRCkKLXsKLSAgICBBU1NFUlQoTUFDSF9Q
T1JUX1ZBTElEKGNsaWVudFBvcnQpKTsKLQotICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBo
b3N0UHJveHkgPSBwbHVnaW5Qcm94eU1hcCgpLmdldChjbGllbnRQb3J0KTsKLSAgICBpZiAoIWhv
c3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHkqIGluc3RhbmNlUHJveHkgPSBob3N0UHJveHktPnBsdWdpbklu
c3RhbmNlKHBsdWdpbklEKTsKLSAgICBpZiAoIWluc3RhbmNlUHJveHkpCi0gICAgICAgIHJldHVy
biBLRVJOX0ZBSUxVUkU7Ci0KLSAgICB1aW50MzJfdCBvYmplY3RJRDsKLSAgICBpZiAoIWluc3Rh
bmNlUHJveHktPmdldFdpbmRvd05QT2JqZWN0KG9iamVjdElEKSkKLSAgICAgICAgcmV0dXJuIEtF
Uk5fRkFJTFVSRTsKLSAgICAKLSAgICAqb3V0T2JqZWN0SUQgPSBvYmplY3RJRDsgICAgCi0gICAg
cmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1cm5fdCBXS1BDR2V0UGx1Z2luRWxl
bWVudE5QT2JqZWN0KG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQzMl90IHBsdWdpbklELCB1
aW50MzJfdCogb3V0T2JqZWN0SUQpCi17Ci0gICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJRChjbGll
bnRQb3J0KSk7Ci0KLSAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gcGx1
Z2luUHJveHlNYXAoKS5nZXQoY2xpZW50UG9ydCk7Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAg
ICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5KiBpbnN0YW5jZVByb3h5ID0gaG9zdFByb3h5LT5wbHVnaW5JbnN0YW5jZShwbHVnaW5J
RCk7Ci0gICAgaWYgKCFpbnN0YW5jZVByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJF
OwotICAgIAotICAgIHVpbnQzMl90IG9iamVjdElEOwotICAgIGlmICghaW5zdGFuY2VQcm94eS0+
Z2V0UGx1Z2luRWxlbWVudE5QT2JqZWN0KG9iamVjdElEKSkKLSAgICAgICAgcmV0dXJuIEtFUk5f
RkFJTFVSRTsKLSAgICAKLSAgICAqb3V0T2JqZWN0SUQgPSBvYmplY3RJRDsgICAgCi0gICAgcmV0
dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1cm5fdCBXS1BDRm9yZ2V0QnJvd3Nlck9i
amVjdChtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJfdCBwbHVnaW5JRCwgdWludDMyX3Qg
b2JqZWN0SUQpCi17Ci0gICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJRChjbGllbnRQb3J0KSk7Ci0K
LSAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gcGx1Z2luUHJveHlNYXAo
KS5nZXQoY2xpZW50UG9ydCk7Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBL
RVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0
YW5jZVByb3h5ID0gaG9zdFByb3h5LT5wbHVnaW5JbnN0YW5jZShwbHVnaW5JRCk7Ci0gICAgaWYg
KCFpbnN0YW5jZVByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAgcmV0
dXJuIGluc3RhbmNlUHJveHktPmZvcmdldEJyb3dzZXJPYmplY3RJRChvYmplY3RJRCkgPyBLRVJO
X1NVQ0NFU1MgOiBLRVJOX0ZBSUxVUkU7Ci19Ci0KLWtlcm5fcmV0dXJuX3QgV0tQQ0V2YWx1YXRl
KG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQzMl90IHBsdWdpbklELCB1aW50MzJfdCByZXF1
ZXN0SUQsIHVpbnQzMl90IG9iamVjdElELCBkYXRhX3Qgc2NyaXB0RGF0YSwgbWFjaF9tc2dfdHlw
ZV9udW1iZXJfdCBzY3JpcHRMZW5ndGgsIGJvb2xlYW5fdCBhbGxvd1BvcHVwcykKLXsKLSAgICBB
U1NFUlQoTUFDSF9QT1JUX1ZBTElEKGNsaWVudFBvcnQpKTsKLQotICAgIERhdGFEZWFsbG9jYXRv
ciBkZWFsbG9jYXRvcihzY3JpcHREYXRhLCBzY3JpcHRMZW5ndGgpOwotCi0gICAgTmV0c2NhcGVQ
bHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IHBsdWdpblByb3h5TWFwKCkuZ2V0KGNsaWVudFBv
cnQpOwotICAgIGlmICghaG9zdFByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwot
ICAgIAotICAgIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSogaW5zdGFuY2VQcm94eSA9IGhv
c3RQcm94eS0+cGx1Z2luSW5zdGFuY2UocGx1Z2luSUQpOwotICAgIGlmICghaW5zdGFuY2VQcm94
eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLQotICAgIFBsdWdpbkRlc3Ryb3lEZWZl
cnJlciBkZWZlcnJlcihpbnN0YW5jZVByb3h5KTsKLSAgICAKLSAgICBTdHJpbmcgc2NyaXB0ID0g
c2NyaXB0TGVuZ3RoID8gU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhzY3JpcHRE
YXRhLCBzY3JpcHRMZW5ndGgpIDogZW1wdHlTdHJpbmcoKTsKLSAgICAKLSAgICBkYXRhX3QgcmVz
dWx0RGF0YSA9IDA7Ci0gICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCByZXN1bHRMZW5ndGggPSAw
OwotICAgIGJvb2xlYW5fdCByZXR1cm5WYWx1ZSA9IGluc3RhbmNlUHJveHktPmV2YWx1YXRlKG9i
amVjdElELCBzY3JpcHQsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCwgYWxsb3dQb3B1cHMpOwot
Ci0gICAgaG9zdFByb3h5ID0gaW5zdGFuY2VQcm94eS0+aG9zdFByb3h5KCk7Ci0gICAgaWYgKCFo
b3N0UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0KLSAgICBfV0tQSEJvb2xl
YW5BbmREYXRhUmVwbHkoaG9zdFByb3h5LT5wb3J0KCksIGluc3RhbmNlUHJveHktPnBsdWdpbklE
KCksIHJlcXVlc3RJRCwgcmV0dXJuVmFsdWUsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7Ci0g
ICAgaWYgKHJlc3VsdERhdGEpCi0gICAgICAgIG1pZ19kZWFsbG9jYXRlKHJlaW50ZXJwcmV0X2Nh
c3Q8dm1fYWRkcmVzc190PihyZXN1bHREYXRhKSwgcmVzdWx0TGVuZ3RoKTsKLSAgICAgICAgCi0g
ICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1cm5fdCBXS1BDR2V0U3RyaW5n
SWRlbnRpZmllcihtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCBkYXRhX3QgbmFtZSwgbWFjaF9tc2df
dHlwZV9udW1iZXJfdCBuYW1lQ250LCB1aW50NjRfdCogaWRlbnRpZmllcikKLXsKLSAgICBBU1NF
UlQoTUFDSF9QT1JUX1ZBTElEKGNsaWVudFBvcnQpKTsKLQotICAgIERhdGFEZWFsbG9jYXRvciBk
ZWFsbG9jYXRvcihuYW1lLCBuYW1lQ250KTsKLQotICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZigq
aWRlbnRpZmllcikgPT0gc2l6ZW9mKElkZW50aWZpZXJSZXAqKSwgaWRlbnRpZmllcl9zaXplcyk7
Ci0gICAgCi0gICAgKmlkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihJZGVu
dGlmaWVyUmVwOjpnZXQobmFtZSkpOwotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci19Ci0KLWtl
cm5fcmV0dXJuX3QgV0tQQ0dldEludElkZW50aWZpZXIobWFjaF9wb3J0X3QgY2xpZW50UG9ydCwg
aW50MzJfdCB2YWx1ZSwgdWludDY0X3QqIGlkZW50aWZpZXIpCi17Ci0gICAgQVNTRVJUKE1BQ0hf
UE9SVF9WQUxJRChjbGllbnRQb3J0KSk7Ci0KLSAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoKmlk
ZW50aWZpZXIpID09IHNpemVvZihOUElkZW50aWZpZXIpLCBpZGVudGlmaWVyX3NpemVzKTsKLSAg
ICAKLSAgICAqaWRlbnRpZmllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KElkZW50aWZp
ZXJSZXA6OmdldCh2YWx1ZSkpOwotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci19Ci0KLXN0YXRp
YyBJZGVudGlmaWVyIGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChJZGVudGlmaWVyUmVwKiBp
ZGVudGlmaWVyKQotewotICAgIEFTU0VSVChJZGVudGlmaWVyUmVwOjppc1ZhbGlkKGlkZW50aWZp
ZXIpKTsKLSAgICBBU1NFUlQoaWRlbnRpZmllci0+aXNTdHJpbmcoKSk7Ci0gIAotICAgIGNvbnN0
IGNoYXIqIHN0ciA9IGlkZW50aWZpZXItPnN0cmluZygpOyAgICAKLSAgICByZXR1cm4gSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhjb21tb25WTSgpLCBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZh
bGxiYWNrKHN0ciwgc3RybGVuKHN0cikpKTsKLX0KLQota2Vybl9yZXR1cm5fdCBXS1BDSW52b2tl
KG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQzMl90IHBsdWdpbklELCB1aW50MzJfdCByZXF1
ZXN0SUQsIHVpbnQzMl90IG9iamVjdElELCB1aW50NjRfdCBzZXJ2ZXJJZGVudGlmaWVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCBhcmd1bWVudHNEYXRhLCBtYWNoX21zZ190eXBl
X251bWJlcl90IGFyZ3VtZW50c0xlbmd0aCkgCi17Ci0gICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJ
RChjbGllbnRQb3J0KSk7Ci0KLSAgICBEYXRhRGVhbGxvY2F0b3IgZGVhbGxvY2F0b3IoYXJndW1l
bnRzRGF0YSwgYXJndW1lbnRzTGVuZ3RoKTsKLQotICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5
KiBob3N0UHJveHkgPSBwbHVnaW5Qcm94eU1hcCgpLmdldChjbGllbnRQb3J0KTsKLSAgICBpZiAo
IWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIGluc3RhbmNlUHJveHkgPSBob3N0UHJveHktPnBsdWdp
bkluc3RhbmNlKHBsdWdpbklEKTsKLSAgICBpZiAoIWluc3RhbmNlUHJveHkpCi0gICAgICAgIHJl
dHVybiBLRVJOX0ZBSUxVUkU7Ci0KLSAgICBQbHVnaW5EZXN0cm95RGVmZXJyZXIgZGVmZXJyZXIo
aW5zdGFuY2VQcm94eSk7Ci0gICAgCi0gICAgSWRlbnRpZmllclJlcCogaWRlbnRpZmllciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8SWRlbnRpZmllclJlcCo+KHNlcnZlcklkZW50aWZpZXIpOwotICAgIGlm
ICghSWRlbnRpZmllclJlcDo6aXNWYWxpZChpZGVudGlmaWVyKSkKLSAgICAgICAgcmV0dXJuIEtF
Uk5fRkFJTFVSRTsKLQotICAgIElkZW50aWZpZXIgbWV0aG9kTmFtZUlkZW50aWZpZXIgPSBpZGVu
dGlmaWVyRnJvbUlkZW50aWZpZXJSZXAoaWRlbnRpZmllcik7Ci0KLSAgICBkYXRhX3QgcmVzdWx0
RGF0YSA9IDA7Ci0gICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCByZXN1bHRMZW5ndGggPSAwOwot
ICAgIGJvb2xlYW5fdCByZXR1cm5WYWx1ZSA9IGluc3RhbmNlUHJveHktPmludm9rZShvYmplY3RJ
RCwgbWV0aG9kTmFtZUlkZW50aWZpZXIsIGFyZ3VtZW50c0RhdGEsIGFyZ3VtZW50c0xlbmd0aCwg
cmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLQotICAgIGhvc3RQcm94eSA9IGluc3RhbmNlUHJv
eHktPmhvc3RQcm94eSgpOwotICAgIGlmICghaG9zdFByb3h5KQotICAgICAgICByZXR1cm4gS0VS
Tl9GQUlMVVJFOwotCi0gICAgX1dLUEhCb29sZWFuQW5kRGF0YVJlcGx5KGhvc3RQcm94eS0+cG9y
dCgpLCBpbnN0YW5jZVByb3h5LT5wbHVnaW5JRCgpLCByZXF1ZXN0SUQsIHJldHVyblZhbHVlLCBy
ZXN1bHREYXRhLCByZXN1bHRMZW5ndGgpOwotICAgIGlmIChyZXN1bHREYXRhKQotICAgICAgICBt
aWdfZGVhbGxvY2F0ZShyZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdD4ocmVzdWx0RGF0YSks
IHJlc3VsdExlbmd0aCk7Ci0gICAgCi0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vy
bl9yZXR1cm5fdCBXS1BDSW52b2tlRGVmYXVsdChtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50
MzJfdCBwbHVnaW5JRCwgdWludDMyX3QgcmVxdWVzdElELCB1aW50MzJfdCBvYmplY3RJRCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90IGFyZ3VtZW50c0RhdGEsIG1hY2hf
bXNnX3R5cGVfbnVtYmVyX3QgYXJndW1lbnRzTGVuZ3RoKQotewotICAgIEFTU0VSVChNQUNIX1BP
UlRfVkFMSUQoY2xpZW50UG9ydCkpOwotCi0gICAgRGF0YURlYWxsb2NhdG9yIGRlYWxsb2NhdG9y
KGFyZ3VtZW50c0RhdGEsIGFyZ3VtZW50c0xlbmd0aCk7Ci0KLSAgICBOZXRzY2FwZVBsdWdpbkhv
c3RQcm94eSogaG9zdFByb3h5ID0gcGx1Z2luUHJveHlNYXAoKS5nZXQoY2xpZW50UG9ydCk7Ci0g
ICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0g
ICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZVByb3h5ID0gaG9zdFByb3h5
LT5wbHVnaW5JbnN0YW5jZShwbHVnaW5JRCk7Ci0gICAgaWYgKCFpbnN0YW5jZVByb3h5KQotICAg
ICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAgUGx1Z2luRGVzdHJveURlZmVycmVyIGRl
ZmVycmVyKGluc3RhbmNlUHJveHkpOwotCi0gICAgZGF0YV90IHJlc3VsdERhdGEgPSAwOwotICAg
IG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgcmVzdWx0TGVuZ3RoID0gMDsKLSAgICBib29sZWFuX3Qg
cmV0dXJuVmFsdWUgPSBpbnN0YW5jZVByb3h5LT5pbnZva2VEZWZhdWx0KG9iamVjdElELCBhcmd1
bWVudHNEYXRhLCBhcmd1bWVudHNMZW5ndGgsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7Ci0K
LSAgICBob3N0UHJveHkgPSBpbnN0YW5jZVByb3h5LT5ob3N0UHJveHkoKTsKLSAgICBpZiAoIWhv
c3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLQotICAgIF9XS1BIQm9vbGVh
bkFuZERhdGFSZXBseShob3N0UHJveHktPnBvcnQoKSwgaW5zdGFuY2VQcm94eS0+cGx1Z2luSUQo
KSwgcmVxdWVzdElELCByZXR1cm5WYWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLSAg
ICBpZiAocmVzdWx0RGF0YSkKLSAgICAgICAgbWlnX2RlYWxsb2NhdGUocmVpbnRlcnByZXRfY2Fz
dDx2bV9hZGRyZXNzX3Q+KHJlc3VsdERhdGEpLCByZXN1bHRMZW5ndGgpOwotICAgIAotICAgIHJl
dHVybiBLRVJOX1NVQ0NFU1M7Ci19Ci0KLWtlcm5fcmV0dXJuX3QgV0tQQ0NvbnN0cnVjdChtYWNo
X3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJfdCBwbHVnaW5JRCwgdWludDMyX3Qgb2JqZWN0SUQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90IGFyZ3VtZW50c0RhdGEsIG1hY2hf
bXNnX3R5cGVfbnVtYmVyX3QgYXJndW1lbnRzTGVuZ3RoLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sZWFuX3QqIHJldHVyblZhbHVlLCBkYXRhX3QqIHJlc3VsdERhdGEsIG1hY2hf
bXNnX3R5cGVfbnVtYmVyX3QqIHJlc3VsdExlbmd0aCkKLXsKLSAgICBBU1NFUlQoTUFDSF9QT1JU
X1ZBTElEKGNsaWVudFBvcnQpKTsKLQotICAgIERhdGFEZWFsbG9jYXRvciBkZWFsbG9jYXRvcihh
cmd1bWVudHNEYXRhLCBhcmd1bWVudHNMZW5ndGgpOwotCi0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0
UHJveHkqIGhvc3RQcm94eSA9IHBsdWdpblByb3h5TWFwKCkuZ2V0KGNsaWVudFBvcnQpOwotICAg
IGlmICghaG9zdFByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAgIAotICAg
IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSogaW5zdGFuY2VQcm94eSA9IGhvc3RQcm94eS0+
cGx1Z2luSW5zdGFuY2UocGx1Z2luSUQpOwotICAgIGlmICghaW5zdGFuY2VQcm94eSkKLSAgICAg
ICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLQotICAgIFBsdWdpbkRlc3Ryb3lEZWZlcnJlciBkZWZl
cnJlcihpbnN0YW5jZVByb3h5KTsKLQotICAgICpyZXR1cm5WYWx1ZSA9IGluc3RhbmNlUHJveHkt
PmNvbnN0cnVjdChvYmplY3RJRCwgYXJndW1lbnRzRGF0YSwgYXJndW1lbnRzTGVuZ3RoLCAqcmVz
dWx0RGF0YSwgKnJlc3VsdExlbmd0aCk7Ci0gICAgCi0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsK
LX0KLQota2Vybl9yZXR1cm5fdCBXS1BDR2V0UHJvcGVydHkobWFjaF9wb3J0X3QgY2xpZW50UG9y
dCwgdWludDMyX3QgcGx1Z2luSUQsIHVpbnQzMl90IHJlcXVlc3RJRCwgdWludDMyX3Qgb2JqZWN0
SUQsIHVpbnQ2NF90IHNlcnZlcklkZW50aWZpZXIpCi17Ci0gICAgQVNTRVJUKE1BQ0hfUE9SVF9W
QUxJRChjbGllbnRQb3J0KSk7Ci0KLSAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFBy
b3h5ID0gcGx1Z2luUHJveHlNYXAoKS5nZXQoY2xpZW50UG9ydCk7Ci0gICAgaWYgKCFob3N0UHJv
eHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAgTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZVByb3h5ID0gaG9zdFByb3h5LT5wbHVnaW5JbnN0YW5j
ZShwbHVnaW5JRCk7Ci0gICAgaWYgKCFpbnN0YW5jZVByb3h5KQotICAgICAgICByZXR1cm4gS0VS
Tl9GQUlMVVJFOwotCi0gICAgSWRlbnRpZmllclJlcCogaWRlbnRpZmllciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8SWRlbnRpZmllclJlcCo+KHNlcnZlcklkZW50aWZpZXIpOwotICAgIGlmICghSWRlbnRp
ZmllclJlcDo6aXNWYWxpZChpZGVudGlmaWVyKSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVS
RTsKLSAgICAKLSAgICBQbHVnaW5EZXN0cm95RGVmZXJyZXIgZGVmZXJyZXIoaW5zdGFuY2VQcm94
eSk7Ci0KLSAgICBkYXRhX3QgcmVzdWx0RGF0YSA9IDA7Ci0gICAgbWFjaF9tc2dfdHlwZV9udW1i
ZXJfdCByZXN1bHRMZW5ndGggPSAwOwotICAgIGJvb2xlYW5fdCByZXR1cm5WYWx1ZTsKLSAgICAK
LSAgICBpZiAoaWRlbnRpZmllci0+aXNTdHJpbmcoKSkgewotICAgICAgICBJZGVudGlmaWVyIHBy
b3BlcnR5TmFtZUlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAoaWRlbnRp
Zmllcik7ICAgICAgICAKLSAgICAgICAgcmV0dXJuVmFsdWUgPSBpbnN0YW5jZVByb3h5LT5nZXRQ
cm9wZXJ0eShvYmplY3RJRCwgcHJvcGVydHlOYW1lSWRlbnRpZmllciwgcmVzdWx0RGF0YSwgcmVz
dWx0TGVuZ3RoKTsKLSAgICB9IGVsc2UgCi0gICAgICAgIHJldHVyblZhbHVlID0gaW5zdGFuY2VQ
cm94eS0+c2V0UHJvcGVydHkob2JqZWN0SUQsIGlkZW50aWZpZXItPm51bWJlcigpLCByZXN1bHRE
YXRhLCByZXN1bHRMZW5ndGgpOwotCi0gICAgaG9zdFByb3h5ID0gaW5zdGFuY2VQcm94eS0+aG9z
dFByb3h5KCk7Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxV
UkU7Ci0KLSAgICBfV0tQSEJvb2xlYW5BbmREYXRhUmVwbHkoaG9zdFByb3h5LT5wb3J0KCksIGlu
c3RhbmNlUHJveHktPnBsdWdpbklEKCksIHJlcXVlc3RJRCwgcmV0dXJuVmFsdWUsIHJlc3VsdERh
dGEsIHJlc3VsdExlbmd0aCk7Ci0gICAgaWYgKHJlc3VsdERhdGEpCi0gICAgICAgIG1pZ19kZWFs
bG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190PihyZXN1bHREYXRhKSwgcmVzdWx0
TGVuZ3RoKTsKLSAgICAKLSAgICByZXR1cm4gS0VSTl9TVUNDRVNTOwotfQotCi1rZXJuX3JldHVy
bl90IFdLUENTZXRQcm9wZXJ0eShtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJfdCBwbHVn
aW5JRCwgdWludDMyX3QgcmVxdWVzdElELCB1aW50MzJfdCBvYmplY3RJRCwgdWludDY0X3Qgc2Vy
dmVySWRlbnRpZmllciwgZGF0YV90IHZhbHVlRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCB2
YWx1ZUxlbmd0aCkKLXsKLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKGNsaWVudFBvcnQpKTsK
LQotICAgIERhdGFEZWFsbG9jYXRvciBkZWFsbG9jYXRvcih2YWx1ZURhdGEsIHZhbHVlTGVuZ3Ro
KTsKLQotICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBwbHVnaW5Qcm94
eU1hcCgpLmdldChjbGllbnRQb3J0KTsKLSAgICBpZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0
dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkq
IGluc3RhbmNlUHJveHkgPSBob3N0UHJveHktPnBsdWdpbkluc3RhbmNlKHBsdWdpbklEKTsKLSAg
ICBpZiAoIWluc3RhbmNlUHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0KLSAg
ICBQbHVnaW5EZXN0cm95RGVmZXJyZXIgZGVmZXJyZXIoaW5zdGFuY2VQcm94eSk7Ci0KLSAgICBJ
ZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2FzdDxJZGVudGlmaWVyUmVw
Kj4oc2VydmVySWRlbnRpZmllcik7Ci0gICAgaWYgKCFJZGVudGlmaWVyUmVwOjppc1ZhbGlkKGlk
ZW50aWZpZXIpKQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAgYm9vbCByZXN1
bHQ7Ci0gICAgaWYgKGlkZW50aWZpZXItPmlzU3RyaW5nKCkpIHsKLSAgICAgICAgSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWVJZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKGlk
ZW50aWZpZXIpOyAgICAgICAgCi0gICAgICAgIHJlc3VsdCA9IGluc3RhbmNlUHJveHktPnNldFBy
b3BlcnR5KG9iamVjdElELCBwcm9wZXJ0eU5hbWVJZGVudGlmaWVyLCB2YWx1ZURhdGEsIHZhbHVl
TGVuZ3RoKTsKLSAgICB9IGVsc2UgCi0gICAgICAgIHJlc3VsdCA9IGluc3RhbmNlUHJveHktPnNl
dFByb3BlcnR5KG9iamVjdElELCBpZGVudGlmaWVyLT5udW1iZXIoKSwgdmFsdWVEYXRhLCB2YWx1
ZUxlbmd0aCk7Ci0KLSAgICBob3N0UHJveHkgPSBpbnN0YW5jZVByb3h5LT5ob3N0UHJveHkoKTsK
LSAgICBpZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLQotICAg
IF9XS1BIQm9vbGVhblJlcGx5KGhvc3RQcm94eS0+cG9ydCgpLCBpbnN0YW5jZVByb3h5LT5wbHVn
aW5JRCgpLCByZXF1ZXN0SUQsIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gS0VSTl9TVUNDRVNTOwot
fQotCi1rZXJuX3JldHVybl90IFdLUENSZW1vdmVQcm9wZXJ0eShtYWNoX3BvcnRfdCBjbGllbnRQ
b3J0LCB1aW50MzJfdCBwbHVnaW5JRCwgdWludDMyX3QgcmVxdWVzdElELCB1aW50MzJfdCBvYmpl
Y3RJRCwgdWludDY0X3Qgc2VydmVySWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQoTUFDSF9QT1JU
X1ZBTElEKGNsaWVudFBvcnQpKTsKLQotICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0
UHJveHkgPSBwbHVnaW5Qcm94eU1hcCgpLmdldChjbGllbnRQb3J0KTsKLSAgICBpZiAoIWhvc3RQ
cm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHkqIGluc3RhbmNlUHJveHkgPSBob3N0UHJveHktPnBsdWdpbkluc3Rh
bmNlKHBsdWdpbklEKTsKLSAgICBpZiAoIWluc3RhbmNlUHJveHkpCi0gICAgICAgIHJldHVybiBL
RVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAgUGx1Z2luRGVzdHJveURlZmVycmVyIGRlZmVycmVyKGlu
c3RhbmNlUHJveHkpOwotCi0gICAgSWRlbnRpZmllclJlcCogaWRlbnRpZmllciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8SWRlbnRpZmllclJlcCo+KHNlcnZlcklkZW50aWZpZXIpOwotICAgIGlmICghSWRl
bnRpZmllclJlcDo6aXNWYWxpZChpZGVudGlmaWVyKSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJ
TFVSRTsKLQotICAgIGJvb2wgcmVzdWx0OwotICAgIGlmIChpZGVudGlmaWVyLT5pc1N0cmluZygp
KSB7Ci0gICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lSWRlbnRpZmllciA9IGlkZW50aWZp
ZXJGcm9tSWRlbnRpZmllclJlcChpZGVudGlmaWVyKTsgICAgICAgIAotICAgICAgICByZXN1bHQg
PSBpbnN0YW5jZVByb3h5LT5yZW1vdmVQcm9wZXJ0eShvYmplY3RJRCwgcHJvcGVydHlOYW1lSWRl
bnRpZmllcik7Ci0gICAgfSBlbHNlIAotICAgICAgICByZXN1bHQgPSBpbnN0YW5jZVByb3h5LT5y
ZW1vdmVQcm9wZXJ0eShvYmplY3RJRCwgaWRlbnRpZmllci0+bnVtYmVyKCkpOwotCi0gICAgaG9z
dFByb3h5ID0gaW5zdGFuY2VQcm94eS0+aG9zdFByb3h5KCk7Ci0gICAgaWYgKCFob3N0UHJveHkp
Ci0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0KLSAgICBfV0tQSEJvb2xlYW5SZXBseSho
b3N0UHJveHktPnBvcnQoKSwgaW5zdGFuY2VQcm94eS0+cGx1Z2luSUQoKSwgcmVxdWVzdElELCBy
ZXN1bHQpOwotCi0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1cm5fdCBX
S1BDSGFzUHJvcGVydHkobWFjaF9wb3J0X3QgY2xpZW50UG9ydCwgdWludDMyX3QgcGx1Z2luSUQs
IHVpbnQzMl90IHJlcXVlc3RJRCwgdWludDMyX3Qgb2JqZWN0SUQsIHVpbnQ2NF90IHNlcnZlcklk
ZW50aWZpZXIpCi17Ci0gICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJRChjbGllbnRQb3J0KSk7Ci0K
LSAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gcGx1Z2luUHJveHlNYXAo
KS5nZXQoY2xpZW50UG9ydCk7Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBL
RVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0
YW5jZVByb3h5ID0gaG9zdFByb3h5LT5wbHVnaW5JbnN0YW5jZShwbHVnaW5JRCk7Ci0gICAgaWYg
KCFpbnN0YW5jZVByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAgIAotICAg
IFBsdWdpbkRlc3Ryb3lEZWZlcnJlciBkZWZlcnJlcihpbnN0YW5jZVByb3h5KTsKLQotICAgIElk
ZW50aWZpZXJSZXAqIGlkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PElkZW50aWZpZXJSZXAq
PihzZXJ2ZXJJZGVudGlmaWVyKTsKLSAgICBpZiAoIUlkZW50aWZpZXJSZXA6OmlzVmFsaWQoaWRl
bnRpZmllcikpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAgYm9vbGVh
bl90IHJldHVyblZhbHVlOwotICAgIGlmIChpZGVudGlmaWVyLT5pc1N0cmluZygpKSB7Ci0gICAg
ICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lSWRlbnRpZmllciA9IGlkZW50aWZpZXJGcm9tSWRl
bnRpZmllclJlcChpZGVudGlmaWVyKTsgICAgICAgIAotICAgICAgICByZXR1cm5WYWx1ZSA9IGlu
c3RhbmNlUHJveHktPmhhc1Byb3BlcnR5KG9iamVjdElELCBwcm9wZXJ0eU5hbWVJZGVudGlmaWVy
KTsKLSAgICB9IGVsc2UgCi0gICAgICAgIHJldHVyblZhbHVlID0gaW5zdGFuY2VQcm94eS0+aGFz
UHJvcGVydHkob2JqZWN0SUQsIGlkZW50aWZpZXItPm51bWJlcigpKTsKLQotICAgIGhvc3RQcm94
eSA9IGluc3RhbmNlUHJveHktPmhvc3RQcm94eSgpOwotICAgIGlmICghaG9zdFByb3h5KQotICAg
ICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAgX1dLUEhCb29sZWFuUmVwbHkoaG9zdFBy
b3h5LT5wb3J0KCksIGluc3RhbmNlUHJveHktPnBsdWdpbklEKCksIHJlcXVlc3RJRCwgcmV0dXJu
VmFsdWUpOwotICAgIAotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci19Ci0KLWtlcm5fcmV0dXJu
X3QgV0tQQ0hhc01ldGhvZChtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJfdCBwbHVnaW5J
RCwgdWludDMyX3QgcmVxdWVzdElELCB1aW50MzJfdCBvYmplY3RJRCwgdWludDY0X3Qgc2VydmVy
SWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKGNsaWVudFBvcnQpKTsK
LQotICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBwbHVnaW5Qcm94eU1h
cCgpLmdldChjbGllbnRQb3J0KTsKLSAgICBpZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJu
IEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIGlu
c3RhbmNlUHJveHkgPSBob3N0UHJveHktPnBsdWdpbkluc3RhbmNlKHBsdWdpbklEKTsKLSAgICBp
ZiAoIWluc3RhbmNlUHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0g
ICAgUGx1Z2luRGVzdHJveURlZmVycmVyIGRlZmVycmVyKGluc3RhbmNlUHJveHkpOwotCi0gICAg
SWRlbnRpZmllclJlcCogaWRlbnRpZmllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SWRlbnRpZmllclJl
cCo+KHNlcnZlcklkZW50aWZpZXIpOwotICAgIGlmICghSWRlbnRpZmllclJlcDo6aXNWYWxpZChp
ZGVudGlmaWVyKSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBJZGVu
dGlmaWVyIG1ldGhvZE5hbWVJZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVw
KGlkZW50aWZpZXIpOyAgICAgICAgCi0gICAgYm9vbGVhbl90IHJldHVyblZhbHVlID0gaW5zdGFu
Y2VQcm94eS0+aGFzTWV0aG9kKG9iamVjdElELCBtZXRob2ROYW1lSWRlbnRpZmllcik7Ci0KLSAg
ICBob3N0UHJveHkgPSBpbnN0YW5jZVByb3h5LT5ob3N0UHJveHkoKTsKLSAgICBpZiAoIWhvc3RQ
cm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLQotICAgIF9XS1BIQm9vbGVhblJl
cGx5KGhvc3RQcm94eS0+cG9ydCgpLCBpbnN0YW5jZVByb3h5LT5wbHVnaW5JRCgpLCByZXF1ZXN0
SUQsIHJldHVyblZhbHVlKTsKLQotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci19Ci0KLWtlcm5f
cmV0dXJuX3QgV0tQQ0lkZW50aWZpZXJJbmZvKG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQ2
NF90IHNlcnZlcklkZW50aWZpZXIsIGRhdGFfdCogaW5mb0RhdGEsIG1hY2hfbXNnX3R5cGVfbnVt
YmVyX3QqIGluZm9MZW5ndGgpCi17Ci0gICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJRChjbGllbnRQ
b3J0KSk7Ci0KLSAgICBJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2Fz
dDxJZGVudGlmaWVyUmVwKj4oc2VydmVySWRlbnRpZmllcik7Ci0gICAgaWYgKCFJZGVudGlmaWVy
UmVwOjppc1ZhbGlkKGlkZW50aWZpZXIpKQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwot
ICAgIAotICAgIGlkIGluZm87Ci0gICAgaWYgKGlkZW50aWZpZXItPmlzU3RyaW5nKCkpIHsKLSAg
ICAgICAgY29uc3QgY2hhciogc3RyID0gaWRlbnRpZmllci0+c3RyaW5nKCk7Ci0gICAgICAgIGlu
Zm8gPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXNOb0NvcHk6KHZvaWQqKXN0ciBsZW5ndGg6c3RybGVu
KHN0cikgZnJlZVdoZW5Eb25lOk5PXTsKLSAgICB9IGVsc2UgCi0gICAgICAgIGluZm8gPSBAKGlk
ZW50aWZpZXItPm51bWJlcigpKTsKLQotICAgIE5TRGF0YSAqZGF0YSA9IFtOU1Byb3BlcnR5TGlz
dFNlcmlhbGl6YXRpb24gZGF0YVdpdGhQcm9wZXJ0eUxpc3Q6aW5mbyBmb3JtYXQ6TlNQcm9wZXJ0
eUxpc3RCaW5hcnlGb3JtYXRfdjFfMCBvcHRpb25zOjAgZXJyb3I6bnVsbHB0cl07Ci0gICAgQVNT
RVJUKGRhdGEpOwotICAgIAotICAgICppbmZvTGVuZ3RoID0gZGF0YS5sZW5ndGg7Ci0gICAgbWln
X2FsbG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190Kj4oaW5mb0RhdGEpLCAqaW5m
b0xlbmd0aCk7Ci0gICAgCi0gICAgbWVtY3B5KCppbmZvRGF0YSwgZGF0YS5ieXRlcywgKmluZm9M
ZW5ndGgpOwotICAgIAotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci19Ci0KLWtlcm5fcmV0dXJu
X3QgV0tQQ0VudW1lcmF0ZShtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJfdCBwbHVnaW5J
RCwgdWludDMyX3QgcmVxdWVzdElELCB1aW50MzJfdCBvYmplY3RJRCkKLXsKLSAgICBBU1NFUlQo
TUFDSF9QT1JUX1ZBTElEKGNsaWVudFBvcnQpKTsKLQotICAgIE5ldHNjYXBlUGx1Z2luSG9zdFBy
b3h5KiBob3N0UHJveHkgPSBwbHVnaW5Qcm94eU1hcCgpLmdldChjbGllbnRQb3J0KTsKLSAgICBp
ZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIGluc3RhbmNlUHJveHkgPSBob3N0UHJveHktPnBs
dWdpbkluc3RhbmNlKHBsdWdpbklEKTsKLSAgICBpZiAoIWluc3RhbmNlUHJveHkpCi0gICAgICAg
IHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAgZGF0YV90IHJlc3VsdERhdGEgPSAwOwot
ICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgcmVzdWx0TGVuZ3RoID0gMDsKLSAgICBib29sZWFu
X3QgcmV0dXJuVmFsdWUgPSBpbnN0YW5jZVByb3h5LT5lbnVtZXJhdGUob2JqZWN0SUQsIHJlc3Vs
dERhdGEsIHJlc3VsdExlbmd0aCk7Ci0KLSAgICBob3N0UHJveHkgPSBpbnN0YW5jZVByb3h5LT5o
b3N0UHJveHkoKTsKLSAgICBpZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJ
TFVSRTsKLQotICAgIF9XS1BIQm9vbGVhbkFuZERhdGFSZXBseShob3N0UHJveHktPnBvcnQoKSwg
aW5zdGFuY2VQcm94eS0+cGx1Z2luSUQoKSwgcmVxdWVzdElELCByZXR1cm5WYWx1ZSwgcmVzdWx0
RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLSAgICAKLSAgICBpZiAocmVzdWx0RGF0YSkKLSAgICAgICAg
bWlnX2RlYWxsb2NhdGUocmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KHJlc3VsdERhdGEp
LCByZXN1bHRMZW5ndGgpOwotICAgIAotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci19Ci0KLWtl
cm5fcmV0dXJuX3QgV0tQQ1NldE1lbnVCYXJWaXNpYmxlKG1hY2hfcG9ydF90IGNsaWVudFBvcnQs
IGJvb2xlYW5fdCBtZW51QmFyVmlzaWJsZSkKLXsKLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElE
KGNsaWVudFBvcnQpKTsKLQotICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkg
PSBwbHVnaW5Qcm94eU1hcCgpLmdldChjbGllbnRQb3J0KTsKLSAgICBpZiAoIWhvc3RQcm94eSkK
LSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLQotICAgIGhvc3RQcm94eS0+c2V0TWVudUJh
clZpc2libGUobWVudUJhclZpc2libGUpOwotCi0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0K
LQota2Vybl9yZXR1cm5fdCBXS1BDU2V0RnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZyhtYWNoX3Bv
cnRfdCBjbGllbnRQb3J0LCBib29sZWFuX3QgZnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZykKLXsK
LSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKGNsaWVudFBvcnQpKTsKLQotICAgIE5ldHNjYXBl
UGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBwbHVnaW5Qcm94eU1hcCgpLmdldChjbGllbnRQ
b3J0KTsKLSAgICBpZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsK
LQotICAgIGhvc3RQcm94eS0+c2V0RnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZyhmdWxsc2NyZWVu
V2luZG93SXNTaG93aW5nKTsKLQotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci19Ci0KLWtlcm5f
cmV0dXJuX3QgV0tQQ1NldE1vZGFsKG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIGJvb2xlYW5fdCBt
b2RhbCkKLXsKLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKGNsaWVudFBvcnQpKTsKLQotICAg
IE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBwbHVnaW5Qcm94eU1hcCgpLmdl
dChjbGllbnRQb3J0KTsKLSAgICBpZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5f
RkFJTFVSRTsKLQotICAgIGlmICghaG9zdFByb3h5LT5pc1Byb2Nlc3NpbmdSZXF1ZXN0cygpKSB7
Ci0gICAgICAgIGhvc3RQcm94eS0+c2V0TW9kYWwobW9kYWwpOwotICAgICAgICByZXR1cm4gS0VS
Tl9TVUNDRVNTOwotICAgIH0KLQotICAgIC8vIERlZmVyIHRoZSB3b3JrCi0gICAgQ0ZSdW5Mb29w
UGVyZm9ybUJsb2NrKENGUnVuTG9vcEdldE1haW4oKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlLCBe
ewotICAgICAgICBpZiAoTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IHBsdWdp
blByb3h5TWFwKCkuZ2V0KGNsaWVudFBvcnQpKQotICAgICAgICAgICAgaG9zdFByb3h5LT5zZXRN
b2RhbChtb2RhbCk7Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gS0VSTl9TVUNDRVNTOwotfQotCi1r
ZXJuX3JldHVybl90IFdLUENHZXRDb29raWVzKG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQz
Ml90IHBsdWdpbklELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgdXJsRGF0
YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCB1cmxMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2xlYW5fdCogcmV0dXJuVmFsdWUsIGRhdGFfdCogY29va2llc0RhdGEsIG1h
Y2hfbXNnX3R5cGVfbnVtYmVyX3QqIGNvb2tpZXNMZW5ndGgpCi17Ci0gICAgQVNTRVJUKE1BQ0hf
UE9SVF9WQUxJRChjbGllbnRQb3J0KSk7Ci0KLSAgICAqY29va2llc0RhdGEgPSBudWxscHRyOwot
ICAgICpjb29raWVzTGVuZ3RoID0gMDsKLSAgICAKLSAgICBEYXRhRGVhbGxvY2F0b3IgZGVhbGxv
Y2F0b3IodXJsRGF0YSwgdXJsTGVuZ3RoKTsKLSAgICAKLSAgICBOZXRzY2FwZVBsdWdpbkhvc3RQ
cm94eSogaG9zdFByb3h5ID0gcGx1Z2luUHJveHlNYXAoKS5nZXQoY2xpZW50UG9ydCk7Ci0gICAg
aWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZVByb3h5ID0gaG9zdFByb3h5LT5w
bHVnaW5JbnN0YW5jZShwbHVnaW5JRCk7Ci0gICAgaWYgKCFpbnN0YW5jZVByb3h5KQotICAgICAg
ICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAgIAotICAgICpyZXR1cm5WYWx1ZSA9IGluc3RhbmNl
UHJveHktPmdldENvb2tpZXModXJsRGF0YSwgdXJsTGVuZ3RoLCAqY29va2llc0RhdGEsICpjb29r
aWVzTGVuZ3RoKTsKLSAgICAKLSAgICByZXR1cm4gS0VSTl9TVUNDRVNTOwotfQotCi1rZXJuX3Jl
dHVybl90IFdLUENHZXRQcm94eShtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJfdCBwbHVn
aW5JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCB1cmxEYXRhLCBtYWNoX21z
Z190eXBlX251bWJlcl90IHVybExlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2xlYW5fdCogcmV0dXJuVmFsdWUsIGRhdGFfdCogcHJveHlEYXRhLCBtYWNoX21zZ190eXBlX251
bWJlcl90KiBwcm94eUxlbmd0aCkKLXsKLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKGNsaWVu
dFBvcnQpKTsKLQotICAgICpwcm94eURhdGEgPSBudWxscHRyOwotICAgICpwcm94eUxlbmd0aCA9
IDA7Ci0gICAgCi0gICAgRGF0YURlYWxsb2NhdG9yIGRlYWxsb2NhdG9yKHVybERhdGEsIHVybExl
bmd0aCk7Ci0gICAgCi0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IHBs
dWdpblByb3h5TWFwKCkuZ2V0KGNsaWVudFBvcnQpOwotICAgIGlmICghaG9zdFByb3h5KQotICAg
ICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAgIAotICAgIE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eSogaW5zdGFuY2VQcm94eSA9IGhvc3RQcm94eS0+cGx1Z2luSW5zdGFuY2UocGx1Z2lu
SUQpOwotICAgIGlmICghaW5zdGFuY2VQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVS
RTsKLSAgICAKLSAgICAqcmV0dXJuVmFsdWUgPSBpbnN0YW5jZVByb3h5LT5nZXRQcm94eSh1cmxE
YXRhLCB1cmxMZW5ndGgsICpwcm94eURhdGEsICpwcm94eUxlbmd0aCk7Ci0gICAgCi0gICAgcmV0
dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1cm5fdCBXS1BDU2V0Q29va2llcyhtYWNo
X3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJfdCBwbHVnaW5JRCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YV90IHVybERhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgdXJsTGVu
Z3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgY29va2llc0RhdGEsIG1h
Y2hfbXNnX3R5cGVfbnVtYmVyX3QgY29va2llc0xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbGVhbl90KiByZXR1cm5WYWx1ZSkKLXsKLSAgICBBU1NFUlQoTUFDSF9QT1JU
X1ZBTElEKGNsaWVudFBvcnQpKTsKLQotICAgIERhdGFEZWFsbG9jYXRvciB1cmxEZWFsbG9jYXRv
cih1cmxEYXRhLCB1cmxMZW5ndGgpOwotICAgIERhdGFEZWFsbG9jYXRvciBjb29raWVzRGVhbGxv
Y2F0b3IoY29va2llc0RhdGEsIGNvb2tpZXNMZW5ndGgpOwotIAotICAgIE5ldHNjYXBlUGx1Z2lu
SG9zdFByb3h5KiBob3N0UHJveHkgPSBwbHVnaW5Qcm94eU1hcCgpLmdldChjbGllbnRQb3J0KTsK
LSAgICBpZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAK
LSAgICBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIGluc3RhbmNlUHJveHkgPSBob3N0UHJv
eHktPnBsdWdpbkluc3RhbmNlKHBsdWdpbklEKTsKLSAgICBpZiAoIWluc3RhbmNlUHJveHkpCi0g
ICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0KLSAgICAqcmV0dXJuVmFsdWUgPSBpbnN0YW5j
ZVByb3h5LT5zZXRDb29raWVzKHVybERhdGEsIHVybExlbmd0aCwgY29va2llc0RhdGEsIGNvb2tp
ZXNMZW5ndGgpOwotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci19Ci0KLWtlcm5fcmV0dXJuX3Qg
V0tQQ0dldEF1dGhlbnRpY2F0aW9uSW5mbyhtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJf
dCBwbHVnaW5JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
X3QgcHJvdG9jb2xEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90IHByb3RvY29sTGVuZ3RoLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCBob3N0RGF0YSwg
bWFjaF9tc2dfdHlwZV9udW1iZXJfdCBob3N0TGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YV90IHNjaGVtZURhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVy
X3Qgc2NoZW1lTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFfdCByZWFsbURhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgcmVhbG1MZW5ndGgsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbl90KiByZXR1cm5W
YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QqIHVz
ZXJuYW1lRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCAqdXNlcm5hbWVMZW5ndGgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90KiBwYXNzd29yZERhdGEs
IG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgKnBhc3N3b3JkTGVuZ3RoKQotewotICAgIEFTU0VSVChN
QUNIX1BPUlRfVkFMSUQoY2xpZW50UG9ydCkpOwotCi0gICAgRGF0YURlYWxsb2NhdG9yIHByb3Rv
Y29sRGVhbGxvY2F0b3IocHJvdG9jb2xEYXRhLCBwcm90b2NvbExlbmd0aCk7Ci0gICAgRGF0YURl
YWxsb2NhdG9yIGhvc3REZWFsbG9jYXRvcihob3N0RGF0YSwgaG9zdExlbmd0aCk7Ci0gICAgRGF0
YURlYWxsb2NhdG9yIHNjaGVtZURlYWxsb2NhdG9yKHNjaGVtZURhdGEsIHNjaGVtZUxlbmd0aCk7
Ci0gICAgRGF0YURlYWxsb2NhdG9yIHJlYWxtRGVhbGxvY2F0b3IocmVhbG1EYXRhLCByZWFsbUxl
bmd0aCk7Ci0KLSAgICAqdXNlcm5hbWVEYXRhID0gbnVsbHB0cjsKLSAgICAqdXNlcm5hbWVMZW5n
dGggPSAwOwotICAgICpwYXNzd29yZERhdGEgPSBudWxscHRyOwotICAgICpwYXNzd29yZExlbmd0
aCA9IDA7Ci0gICAgCi0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IHBs
dWdpblByb3h5TWFwKCkuZ2V0KGNsaWVudFBvcnQpOwotICAgIGlmICghaG9zdFByb3h5KQotICAg
ICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAgIAotICAgIE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eSogaW5zdGFuY2VQcm94eSA9IGhvc3RQcm94eS0+cGx1Z2luSW5zdGFuY2UocGx1Z2lu
SUQpOwotICAgIGlmICghaW5zdGFuY2VQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVS
RTsKLSAgICAKLSAgICAqcmV0dXJuVmFsdWUgPSBpbnN0YW5jZVByb3h5LT5nZXRBdXRoZW50aWNh
dGlvbkluZm8ocHJvdG9jb2xEYXRhLCBob3N0RGF0YSwgcG9ydCwgc2NoZW1lRGF0YSwgcmVhbG1E
YXRhLCAqdXNlcm5hbWVEYXRhLCAqdXNlcm5hbWVMZW5ndGgsICpwYXNzd29yZERhdGEsICpwYXNz
d29yZExlbmd0aCk7Ci0gICAgCi0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9y
ZXR1cm5fdCBXS1BDQ29udmVydFBvaW50KG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQzMl90
IHBsdWdpbklELCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgc291cmNl
WCwgZG91YmxlIHNvdXJjZVksIHVpbnQzMl90IHNvdXJjZVNwYWNlLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50MzJfdCBkZXN0U3BhY2UsIGJvb2xlYW5fdCAqcmV0dXJuVmFs
dWUsIGRvdWJsZSAqZGVzdFgsIGRvdWJsZSAqZGVzdFkpCi17Ci0gICAgQVNTRVJUKE1BQ0hfUE9S
VF9WQUxJRChjbGllbnRQb3J0KSk7Ci0KLSAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9z
dFByb3h5ID0gcGx1Z2luUHJveHlNYXAoKS5nZXQoY2xpZW50UG9ydCk7Ci0gICAgaWYgKCFob3N0
UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAgTmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZVByb3h5ID0gaG9zdFByb3h5LT5wbHVnaW5JbnN0
YW5jZShwbHVnaW5JRCk7Ci0gICAgaWYgKCFpbnN0YW5jZVByb3h5KQotICAgICAgICByZXR1cm4g
S0VSTl9GQUlMVVJFOwotCi0gICAgKnJldHVyblZhbHVlID0gaW5zdGFuY2VQcm94eS0+Y29udmVy
dFBvaW50KHNvdXJjZVgsIHNvdXJjZVksIHN0YXRpY19jYXN0PE5QQ29vcmRpbmF0ZVNwYWNlPihz
b3VyY2VTcGFjZSksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqZGVzdFgsICpkZXN0WSwgc3RhdGljX2Nhc3Q8TlBDb29yZGluYXRlU3BhY2U+KGRlc3RT
cGFjZSkpOwotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci19Ci0KLWtlcm5fcmV0dXJuX3QgV0tQ
Q0xheWVySG9zdGluZ01vZGVDaGFuZ2VkKG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQzMl90
IHBsdWdpbklELCBib29sZWFuX3QgaG9zdHNMYXllcnNJbldpbmRvd1NlcnZlciwgdWludDMyX3Qg
cmVuZGVyQ29udGV4dElEKQotewotICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQoY2xpZW50UG9y
dCkpOwotCi0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IHBsdWdpblBy
b3h5TWFwKCkuZ2V0KGNsaWVudFBvcnQpOwotICAgIGlmICghaG9zdFByb3h5KQotICAgICAgICBy
ZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBp
bnN0YW5jZVByb3h5ID0gaG9zdFByb3h5LT5wbHVnaW5JbnN0YW5jZShwbHVnaW5JRCk7Ci0gICAg
aWYgKCFpbnN0YW5jZVByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAg
aW5zdGFuY2VQcm94eS0+bGF5ZXJIb3N0aW5nTW9kZUNoYW5nZWQoaG9zdHNMYXllcnNJbldpbmRv
d1NlcnZlciwgcmVuZGVyQ29udGV4dElEKTsKLSAgICByZXR1cm4gS0VSTl9TVUNDRVNTOwotfQot
Ci0KLWtlcm5fcmV0dXJuX3QgV0tQQ1NldEV4Y2VwdGlvbihtYWNoX3BvcnRfdCBjbGllbnRQb3J0
LCBkYXRhX3QgbWVzc2FnZSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCBtZXNzYWdlQ250KQotewot
ICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQoY2xpZW50UG9ydCkpOwotCi0gICAgRGF0YURlYWxs
b2NhdG9yIGRlYWxsb2NhdG9yKG1lc3NhZ2UsIG1lc3NhZ2VDbnQpOwotCi0gICAgTmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5OjpzZXRHbG9iYWxFeGNlcHRpb24oU3RyaW5nOjpmcm9tVVRGOFdp
dGhMYXRpbjFGYWxsYmFjayhtZXNzYWdlLCBtZXNzYWdlQ250KSk7Ci0KLSAgICByZXR1cm4gS0VS
Tl9TVUNDRVNTOwotfQotCi0jZW5kaWYgLy8gVVNFKFBMVUdJTl9IT1NUX1BST0NFU1MpICYmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWEwNWVkMjEzYTVjZmMyZDI4
YWIyMmE3MWMwOTAzZjFiMmU0ZTBjZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDM2OCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZiBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykKLQotI2lmbmRlZiBOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHlfaAotI2RlZmluZSBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHlfaAot
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSWRlbnRpZmllci5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1ZNLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Ryb25nLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9UaW1lci5oPgotI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9ucGFwaS5oPgot
I2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVmLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSAiV2ViS2l0
UGx1Z2luSG9zdFR5cGVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotICAgIG5hbWVzcGFjZSBCaW5k
aW5ncyB7Ci0gICAgICAgIGNsYXNzIEluc3RhbmNlOwotICAgICAgICBjbGFzcyBSb290T2JqZWN0
OwotICAgIH0KLSAgICBjbGFzcyBBcmdMaXN0OwotfQotQGNsYXNzIFdlYkhvc3RlZE5ldHNjYXBl
UGx1Z2luVmlldzsKLUBjbGFzcyBXZWJGcmFtZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNs
YXNzIEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtOwotY2xhc3MgTmV0c2NhcGVQbHVnaW5Ib3N0
UHJveHk7Ci1jbGFzcyBQbHVnaW5SZXF1ZXN0OwotY2xhc3MgUHJveHlJbnN0YW5jZTsKLSAgICAK
LWNsYXNzIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eT4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5PiBjcmVhdGUoTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkq
LCBXZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcgKiwgYm9vbCBmdWxsRnJhbWVQbHVnaW4pOwot
ICAgIH5OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkoKTsKLSAgICAKLSAgICB1aW50MzJfdCBw
bHVnaW5JRCgpIGNvbnN0IAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcGx1Z2luSUQpOwotICAg
ICAgICAKLSAgICAgICAgcmV0dXJuIG1fcGx1Z2luSUQ7Ci0gICAgfQotICAgIHVpbnQzMl90IHJl
bmRlckNvbnRleHRJRCgpIGNvbnN0IHsgQVNTRVJUKGZhc3RNYWxsb2NTaXplKHRoaXMpKTsgcmV0
dXJuIG1fcmVuZGVyQ29udGV4dElEOyB9Ci0gICAgdm9pZCBzZXRSZW5kZXJDb250ZXh0SUQodWlu
dDMyX3QgcmVuZGVyQ29udGV4dElEKSB7IG1fcmVuZGVyQ29udGV4dElEID0gcmVuZGVyQ29udGV4
dElEOyB9Ci0gICAgCi0gICAgUmVuZGVyZXJUeXBlIHJlbmRlcmVyVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVuZGVyZXJUeXBlOyB9Ci0gICAgdm9pZCBzZXRSZW5kZXJlclR5cGUoUmVuZGVyZXJU
eXBlIHJlbmRlcmVyVHlwZSkgeyBtX3JlbmRlcmVyVHlwZSA9IHJlbmRlcmVyVHlwZTsgfQotICAg
IAotICAgIFdlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldyAqcGx1Z2luVmlldygpIGNvbnN0IHsg
QVNTRVJUKGZhc3RNYWxsb2NTaXplKHRoaXMpKTsgcmV0dXJuIG1fcGx1Z2luVmlldzsgfQotICAg
IE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkoKSBjb25zdCB7IEFTU0VSVChmYXN0
TWFsbG9jU2l6ZSh0aGlzKSk7IHJldHVybiBtX3BsdWdpbkhvc3RQcm94eTsgfQotICAgIAotICAg
IGJvb2wgY2FuY2VsU3RyZWFtTG9hZCh1aW50MzJfdCBzdHJlYW1JRCwgTlBSZWFzb24pOwotICAg
IHZvaWQgZGlzY29ubmVjdFN0cmVhbShIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbSopOwotICAg
IAotICAgIHZvaWQgc2V0TWFudWFsU3RyZWFtKFJlZjxIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVh
bT4mJik7Ci0gICAgSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0qIG1hbnVhbFN0cmVhbSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWFudWFsU3RyZWFtLmdldCgpOyB9Ci0gICAgCi0gICAgdm9pZCBwbHVn
aW5Ib3N0RGllZCgpOwotICAgIAotICAgIHZvaWQgcmVzaXplKE5TUmVjdCBzaXplLCBOU1JlY3Qg
Y2xpcFJlY3QpOwotICAgIHZvaWQgZGVzdHJveSgpOwotICAgIHZvaWQgZm9jdXNDaGFuZ2VkKGJv
b2wgaGFzRm9jdXMpOwotICAgIHZvaWQgd2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wgaGFzRm9jdXMp
OwotICAgIHZvaWQgd2luZG93RnJhbWVDaGFuZ2VkKE5TUmVjdCBmcmFtZSk7Ci0KLSAgICB2b2lk
IHNldFNob3VsZEhvc3RMYXllcnNJbldpbmRvd1NlcnZlcihib29sKTsKLSAgICB2b2lkIGxheWVy
SG9zdGluZ01vZGVDaGFuZ2VkKGJvb2wgaG9zdHNMYXllcnNJbldpbmRvd1NlcnZlciwgdWludDMy
X3QgcmVuZGVyQ29udGV4dElEKTsKLSAgICAKLSAgICB2b2lkIG1vdXNlRXZlbnQoTlNWaWV3ICpw
bHVnaW5WaWV3LCBOU0V2ZW50ICosIE5QQ29jb2FFdmVudFR5cGUpOwotICAgIHZvaWQga2V5RXZl
bnQoTlNWaWV3ICpwbHVnaW5WaWV3LCBOU0V2ZW50ICosIE5QQ29jb2FFdmVudFR5cGUpOwotICAg
IHZvaWQgaW5zZXJ0VGV4dChOU1N0cmluZyAqKTsKLSAgICBib29sIHdoZWVsRXZlbnQoTlNWaWV3
ICpwbHVnaW5WaWV3LCBOU0V2ZW50ICopOwotICAgIHZvaWQgc3ludGhldGljS2V5RG93bldpdGhD
b21tYW5kTW9kaWZpZXIoaW50IGtleUNvZGUsIGNoYXIgY2hhcmFjdGVyKTsKLSAgICB2b2lkIGZs
YWdzQ2hhbmdlZChOU0V2ZW50ICopOwotICAgIHZvaWQgcHJpbnQoQ0dDb250ZXh0UmVmLCB1bnNp
Z25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKLSAgICB2b2lkIHNuYXBzaG90KENHQ29udGV4
dFJlZiwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7Ci0gICAgCi0gICAgdm9pZCBz
dGFydFRpbWVycyhib29sIHRocm90dGxlVGltZXJzKTsKLSAgICB2b2lkIHN0b3BUaW1lcnMoKTsK
LSAgICAKLSAgICB2b2lkIGludmFsaWRhdGVSZWN0KGRvdWJsZSB4LCBkb3VibGUgeSwgZG91Ymxl
IHdpZHRoLCBkb3VibGUgaGVpZ2h0KTsKLSAgICAKLSAgICAvLyBOUFJ1bnRpbWUKLSAgICBib29s
IGdldFdpbmRvd05QT2JqZWN0KHVpbnQzMl90JiBvYmplY3RJRCk7Ci0gICAgYm9vbCBnZXRQbHVn
aW5FbGVtZW50TlBPYmplY3QodWludDMyX3QmIG9iamVjdElEKTsKLSAgICBib29sIGZvcmdldEJy
b3dzZXJPYmplY3RJRCh1aW50MzJfdCBvYmplY3RJRCk7IC8vIFdpbGwgZmFpbCBpZiB0aGUgSUQg
aXMgYmVpbmcgc2VudCB0byBwbHVnLWluIHJpZ2h0IG5vdyAoaS5lLiwgcmV0YWluL3JlbGVhc2Ug
Y2FsbHMgYXJlbid0IGJhbGFuY2VkKS4KLQotICAgIGJvb2wgZXZhbHVhdGUodWludDMyX3Qgb2Jq
ZWN0SUQsIGNvbnN0IFdURjo6U3RyaW5nJiBzY3JpcHQsIGRhdGFfdCYgcmVzdWx0RGF0YSwgbWFj
aF9tc2dfdHlwZV9udW1iZXJfdCYgcmVzdWx0TGVuZ3RoLCBib29sIGFsbG93UG9wdXBzKTsKLSAg
ICBib29sIGludm9rZSh1aW50MzJfdCBvYmplY3RJRCwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBt
ZXRob2ROYW1lLCBkYXRhX3QgYXJndW1lbnRzRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCBh
cmd1bWVudHNMZW5ndGgsIGRhdGFfdCYgcmVzdWx0RGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJf
dCYgcmVzdWx0TGVuZ3RoKTsKLSAgICBib29sIGludm9rZURlZmF1bHQodWludDMyX3Qgb2JqZWN0
SUQsIGRhdGFfdCBhcmd1bWVudHNEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90IGFyZ3VtZW50
c0xlbmd0aCwgZGF0YV90JiByZXN1bHREYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90JiByZXN1
bHRMZW5ndGgpOwotICAgIGJvb2wgY29uc3RydWN0KHVpbnQzMl90IG9iamVjdElELCBkYXRhX3Qg
YXJndW1lbnRzRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCBhcmd1bWVudHNMZW5ndGgsIGRh
dGFfdCYgcmVzdWx0RGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCYgcmVzdWx0TGVuZ3RoKTsK
LSAgICBib29sIGVudW1lcmF0ZSh1aW50MzJfdCBvYmplY3RJRCwgZGF0YV90JiByZXN1bHREYXRh
LCBtYWNoX21zZ190eXBlX251bWJlcl90JiByZXN1bHRMZW5ndGgpOwotICAgIAotICAgIGJvb2wg
Z2V0UHJvcGVydHkodWludDMyX3Qgb2JqZWN0SUQsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBkYXRhX3QgJnJlc3VsdERhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QmIHJl
c3VsdExlbmd0aCk7Ci0gICAgYm9vbCBnZXRQcm9wZXJ0eSh1aW50MzJfdCBvYmplY3RJRCwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBkYXRhX3QgJnJlc3VsdERhdGEsIG1hY2hfbXNnX3R5cGVfbnVt
YmVyX3QmIHJlc3VsdExlbmd0aCk7ICAgIAotICAgIGJvb2wgc2V0UHJvcGVydHkodWludDMyX3Qg
b2JqZWN0SUQsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBkYXRhX3QgdmFs
dWVEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90IHZhbHVlTGVuZ3RoKTsKLSAgICBib29sIHNl
dFByb3BlcnR5KHVpbnQzMl90IG9iamVjdElELCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIGRhdGFf
dCB2YWx1ZURhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgdmFsdWVMZW5ndGgpOwotICAgIGJv
b2wgcmVtb3ZlUHJvcGVydHkodWludDMyX3Qgb2JqZWN0SUQsIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lKTsKLSAgICBib29sIHJlbW92ZVByb3BlcnR5KHVpbnQzMl90IG9iamVj
dElELCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwotICAgIGJvb2wgaGFzUHJvcGVydHkodWludDMy
X3Qgb2JqZWN0SUQsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKLSAgICBi
b29sIGhhc1Byb3BlcnR5KHVpbnQzMl90IG9iamVjdElELCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUp
OwotICAgIGJvb2wgaGFzTWV0aG9kKHVpbnQzMl90IG9iamVjdElELCBjb25zdCBKU0M6OklkZW50
aWZpZXImIG1ldGhvZE5hbWUpOwotICAgIAotICAgIHZvaWQgc3RhdHVzKGNvbnN0IGNoYXIqIG1l
c3NhZ2UpOwotICAgIE5QRXJyb3IgbG9hZFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIq
IHRhcmdldCwgY29uc3QgY2hhciogcG9zdERhdGEsIHVpbnQzMl90IHBvc3REYXRhTGVuZ3RoLCBM
b2FkVVJMRmxhZ3MsIHVpbnQzMl90JiByZXF1ZXN0SUQpOwotCi0gICAgYm9vbCBnZXRDb29raWVz
KGRhdGFfdCB1cmxEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90IHVybExlbmd0aCwgZGF0YV90
JiBjb29raWVzRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCYgY29va2llc0xlbmd0aCk7Ci0g
ICAgYm9vbCBzZXRDb29raWVzKGRhdGFfdCB1cmxEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90
IHVybExlbmd0aCwgZGF0YV90IGNvb2tpZXNEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90IGNv
b2tpZXNMZW5ndGgpOwotICAgICAgICAgICAgIAotICAgIGJvb2wgZ2V0UHJveHkoZGF0YV90IHVy
bERhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgdXJsTGVuZ3RoLCBkYXRhX3QmIHByb3h5RGF0
YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCYgcHJveHlMZW5ndGgpOwotICAgIGJvb2wgZ2V0QXV0
aGVudGljYXRpb25JbmZvKGRhdGFfdCBwcm90b2NvbERhdGEsIGRhdGFfdCBob3N0RGF0YSwgdWlu
dDMyX3QgcG9ydCwgZGF0YV90IHNjaGVtZURhdGEsIGRhdGFfdCByZWFsbURhdGEsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCYgdXNlcm5hbWVEYXRhLCBtYWNoX21zZ190
eXBlX251bWJlcl90JiB1c2VybmFtZUxlbmd0aCwgZGF0YV90JiBwYXNzd29yZERhdGEsIG1hY2hf
bXNnX3R5cGVfbnVtYmVyX3QmIHBhc3N3b3JkTGVuZ3RoKTsKLSAgICBib29sIGNvbnZlcnRQb2lu
dChkb3VibGUgc291cmNlWCwgZG91YmxlIHNvdXJjZVksIE5QQ29vcmRpbmF0ZVNwYWNlIHNvdXJj
ZVNwYWNlLCAKLSAgICAgICAgICAgICAgICAgICAgICBkb3VibGUmIGRlc3RYLCBkb3VibGUmIGRl
c3RZLCBOUENvb3JkaW5hdGVTcGFjZSBkZXN0U3BhY2UpOwotCi0gICAgUmVmUHRyPEpTQzo6Qmlu
ZGluZ3M6Okluc3RhbmNlPiBjcmVhdGVCaW5kaW5nc0luc3RhbmNlKFJlZjxKU0M6OkJpbmRpbmdz
OjpSb290T2JqZWN0PiYmKTsKLSAgICBSZXRhaW5QdHI8TlNEYXRhPiBtYXJzaGFsVmFsdWVzKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpOwotICAgIHZvaWQg
bWFyc2hhbFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUsIGRhdGFfdCYg
cmVzdWx0RGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCYgcmVzdWx0TGVuZ3RoKTsKLSAgICBK
U0M6OkpTVmFsdWUgZGVtYXJzaGFsVmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IGNo
YXIqIHZhbHVlRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCB2YWx1ZUxlbmd0aCk7Ci0KLSAg
ICAvLyBOby1vcCBpZiB0aGUgdmFsdWUgZG9lcyBub3QgY29udGFpbiBhIGxvY2FsIG9iamVjdC4K
LSAgICB2b2lkIHJldGFpbkxvY2FsT2JqZWN0KEpTQzo6SlNWYWx1ZSk7Ci0gICAgdm9pZCByZWxl
YXNlTG9jYWxPYmplY3QoSlNDOjpKU1ZhbHVlKTsKLQotICAgIHZvaWQgYWRkSW5zdGFuY2UoUHJv
eHlJbnN0YW5jZSopOwotICAgIHZvaWQgcmVtb3ZlSW5zdGFuY2UoUHJveHlJbnN0YW5jZSopOwot
ICAgIAotICAgIHZvaWQgY2xlYW51cCgpOwotICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotICAgIAot
ICAgIHZvaWQgd2lsbENhbGxQbHVnaW5GdW5jdGlvbigpOwotICAgIHZvaWQgZGlkQ2FsbFBsdWdp
bkZ1bmN0aW9uKGJvb2wmIHN0b3BwZWQpOwotICAgIGJvb2wgc2hvdWxkU3RvcCgpOwotICAgIAot
ICAgIHVpbnQzMl90IG5leHRSZXF1ZXN0SUQoKTsKLQotICAgIHZvaWQgZGlkRHJhdygpOwotICAg
IHZvaWQgcHJpdmF0ZUJyb3dzaW5nTW9kZURpZENoYW5nZShib29sIGlzUHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZCk7Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgc2V0R2xvYmFsRXhjZXB0aW9uKGNvbnN0
IFdURjo6U3RyaW5nJik7Ci0gICAgc3RhdGljIHZvaWQgbW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhl
Y1N0YXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLQotICAgIC8vIFJlcGx5IHN0cnVjdHMKLSAg
ICBzdHJ1Y3QgUmVwbHkgewotICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7
Ci0gICAgICAgIGVudW0gVHlwZSB7Ci0gICAgICAgICAgICBJbnN0YW50aWF0ZVBsdWdpbiwKLSAg
ICAgICAgICAgIEdldFNjcmlwdGFibGVOUE9iamVjdCwKLSAgICAgICAgICAgIEJvb2xlYW5BbmRE
YXRhLAotICAgICAgICAgICAgQm9vbGVhbgotICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAg
UmVwbHkoVHlwZSB0eXBlKSAKLSAgICAgICAgICAgIDogbV90eXBlKHR5cGUpCi0gICAgICAgIHsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdmlydHVhbCB+UmVwbHkoKSB7IH0KLSAgICAK
LSAgICAgICAgVHlwZSBtX3R5cGU7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBJbnN0YW50aWF0ZVBs
dWdpblJlcGx5IDogcHVibGljIFJlcGx5IHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBSZXBs
eVR5cGUgPSBJbnN0YW50aWF0ZVBsdWdpbjsKLSAgICAgICAgCi0gICAgICAgIEluc3RhbnRpYXRl
UGx1Z2luUmVwbHkoa2Vybl9yZXR1cm5fdCByZXN1bHRDb2RlLCB1aW50MzJfdCByZW5kZXJDb250
ZXh0SUQsIFJlbmRlcmVyVHlwZSByZW5kZXJlclR5cGUpCi0gICAgICAgICAgICA6IFJlcGx5KElu
c3RhbnRpYXRlUGx1Z2luKQotICAgICAgICAgICAgLCBtX3Jlc3VsdENvZGUocmVzdWx0Q29kZSkK
LSAgICAgICAgICAgICwgbV9yZW5kZXJDb250ZXh0SUQocmVuZGVyQ29udGV4dElEKQotICAgICAg
ICAgICAgLCBtX3JlbmRlcmVyVHlwZShyZW5kZXJlclR5cGUpCi0gICAgICAgIHsKLSAgICAgICAg
fQotICAgICAgICAgICAgICAgICAKLSAgICAgICAga2Vybl9yZXR1cm5fdCBtX3Jlc3VsdENvZGU7
Ci0gICAgICAgIHVpbnQzMl90IG1fcmVuZGVyQ29udGV4dElEOwotICAgICAgICBSZW5kZXJlclR5
cGUgbV9yZW5kZXJlclR5cGU7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBHZXRTY3JpcHRhYmxlTlBP
YmplY3RSZXBseSA6IHB1YmxpYyBSZXBseSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBSZXBseTo6
VHlwZSBSZXBseVR5cGUgPSBHZXRTY3JpcHRhYmxlTlBPYmplY3Q7Ci0gICAgICAgIAotICAgICAg
ICBHZXRTY3JpcHRhYmxlTlBPYmplY3RSZXBseSh1aW50MzJfdCBvYmplY3RJRCkKLSAgICAgICAg
ICAgIDogUmVwbHkoUmVwbHlUeXBlKQotICAgICAgICAgICAgLCBtX29iamVjdElEKG9iamVjdElE
KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICB1aW50MzJfdCBt
X29iamVjdElEOwotICAgIH07Ci0gICAgCi0gICAgc3RydWN0IEJvb2xlYW5SZXBseSA6IHB1Ymxp
YyBSZXBseSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBSZXBseTo6VHlwZSBSZXBseVR5cGUgPSBC
b29sZWFuOwotICAgICAgICAKLSAgICAgICAgQm9vbGVhblJlcGx5KGJvb2xlYW5fdCByZXN1bHQp
Ci0gICAgICAgICAgICA6IFJlcGx5KFJlcGx5VHlwZSkKLSAgICAgICAgICAgICwgbV9yZXN1bHQo
cmVzdWx0KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJvb2xlYW5f
dCBtX3Jlc3VsdDsKLSAgICB9OwotCi0gICAgc3RydWN0IEJvb2xlYW5BbmREYXRhUmVwbHkgOiBw
dWJsaWMgUmVwbHkgewotICAgICAgICBzdGF0aWMgY29uc3QgUmVwbHk6OlR5cGUgUmVwbHlUeXBl
ID0gQm9vbGVhbkFuZERhdGE7Ci0gICAgICAgIAotICAgICAgICBCb29sZWFuQW5kRGF0YVJlcGx5
KGJvb2xlYW5fdCByZXR1cm5WYWx1ZSwgUmV0YWluUHRyPENGRGF0YVJlZj4gcmVzdWx0KQotICAg
ICAgICAgICAgOiBSZXBseShSZXBseVR5cGUpCi0gICAgICAgICAgICAsIG1fcmV0dXJuVmFsdWUo
cmV0dXJuVmFsdWUpCi0gICAgICAgICAgICAsIG1fcmVzdWx0KHJlc3VsdCkKLSAgICAgICAgewot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29sZWFuX3QgbV9yZXR1cm5WYWx1ZTsKLSAg
ICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gbV9yZXN1bHQ7Ci0gICAgfTsKLSAgICAKLSAgICB2
b2lkIHNldEN1cnJlbnRSZXBseSh1aW50MzJfdCByZXF1ZXN0SUQsIHN0ZDo6dW5pcXVlX3B0cjxS
ZXBseT4gcmVwbHkpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1fcmVwbGllcy5jb250YWlucyhy
ZXF1ZXN0SUQpKTsKLSAgICAgICAgbV9yZXBsaWVzLmFkZChyZXF1ZXN0SUQsIFdURk1vdmUocmVw
bHkpKTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPFQ+IHdhaXRGb3JSZXBseSh1aW50MzJfdCByZXF1ZXN0SUQpCi0gICAgewotICAg
ICAgICBSZWY8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5PiBwcm90ZWN0KCp0aGlzKTsgLy8g
UGx1Zy1pbiBob3N0IG1heSBjcmFzaCB3aGlsZSB3ZSBhcmUgd2FpdGluZyBmb3IgcmVwbHksIHJl
bGVhc2luZyBhbGwgaW5zdGFuY2VzIHRvIHRoZSBpbnN0YW5jZSBwcm94eS4KLQotICAgICAgICB3
aWxsQ2FsbFBsdWdpbkZ1bmN0aW9uKCk7Ci0gICAgICAgIG1fd2FpdGluZ0ZvclJlcGx5ID0gdHJ1
ZTsKLQotICAgICAgICBhdXRvIHJlcGx5ID0gcHJvY2Vzc1JlcXVlc3RzQW5kV2FpdEZvclJlcGx5
KHJlcXVlc3RJRCk7Ci0gICAgICAgIGlmIChyZXBseSkKLSAgICAgICAgICAgIEFTU0VSVChyZXBs
eS0+bV90eXBlID09IFQ6OlJlcGx5VHlwZSk7Ci0gICAgICAgIAotICAgICAgICBtX3dhaXRpbmdG
b3JSZXBseSA9IGZhbHNlOwotCi0gICAgICAgIGJvb2wgc3RvcHBlZCA9IGZhbHNlOwotICAgICAg
ICBkaWRDYWxsUGx1Z2luRnVuY3Rpb24oc3RvcHBlZCk7Ci0gICAgICAgIGlmIChzdG9wcGVkKSB7
Ci0gICAgICAgICAgICAvLyBUaGUgaW5zdGFuY2UgcHJveHkgbWF5IGhhdmUgYmVlbiBkZWxldGVk
IGZyb20gZGlkQ2FsbFBsdWdpbkZ1bmN0aW9uKCksIHNvIGEgbnVsbCByZXBseSBuZWVkcyB0byBi
ZSByZXR1cm5lZC4KLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxUPihzdGF0aWNfY2FzdDxUKj4ocmVwbHkucmVs
ZWFzZSgpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgd2ViRnJhbWVEaWRGaW5pc2hMb2FkV2l0
aFJlYXNvbihXZWJGcmFtZSosIE5QUmVhc29uKTsKLQotcHJpdmF0ZToKLSAgICBOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHkoTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqLCBXZWJIb3N0ZWROZXRz
Y2FwZVBsdWdpblZpZXcqLCBib29sIGZ1bGxGcmFtZVBsdWdpbik7Ci0KLSAgICBOUEVycm9yIGxv
YWRSZXF1ZXN0KE5TVVJMUmVxdWVzdCosIGNvbnN0IGNoYXIqIGNUYXJnZXQsIGJvb2wgY3VycmVu
dEV2ZW50SXNVc2VyR2VzdHVyZSwgdWludDMyX3QmIHN0cmVhbUlEKTsKLSAgICAKLSAgICBjbGFz
cyBQbHVnaW5SZXF1ZXN0OwotICAgIHZvaWQgcGVyZm9ybVJlcXVlc3QoUGx1Z2luUmVxdWVzdCop
OwotICAgIHZvaWQgZXZhbHVhdGVKYXZhU2NyaXB0KFBsdWdpblJlcXVlc3QqKTsKLSAgICAKLSAg
ICB2b2lkIHN0b3BBbGxTdHJlYW1zKCk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlcGx5PiBwcm9j
ZXNzUmVxdWVzdHNBbmRXYWl0Rm9yUmVwbHkodWludDMyX3QgcmVxdWVzdElEKTsKLSAgICAKLSAg
ICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogbV9wbHVnaW5Ib3N0UHJveHk7Ci0gICAgV2ViSG9z
dGVkTmV0c2NhcGVQbHVnaW5WaWV3ICptX3BsdWdpblZpZXc7Ci0KLSAgICB2b2lkIHJlcXVlc3RU
aW1lckZpcmVkKCk7Ci0gICAgV2ViQ29yZTo6VGltZXIgbV9yZXF1ZXN0VGltZXI7Ci0gICAgRGVx
dWU8UmVmUHRyPFBsdWdpblJlcXVlc3Q+PiBtX3BsdWdpblJlcXVlc3RzOwotICAgIAotICAgIEhh
c2hNYXA8dWludDMyX3QsIFJlZlB0cjxIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbT4+IG1fc3Ry
ZWFtczsKLQotICAgIHVpbnQzMl90IG1fY3VycmVudFVSTFJlcXVlc3RJRDsKLSAgICAKLSAgICB1
aW50MzJfdCBtX3BsdWdpbklEOwotICAgIHVpbnQzMl90IG1fcmVuZGVyQ29udGV4dElEOwotICAg
IFJlbmRlcmVyVHlwZSBtX3JlbmRlcmVyVHlwZTsKLSAgICAKLSAgICBib29sIG1fd2FpdGluZ0Zv
clJlcGx5OwotICAgIEhhc2hNYXA8dWludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxSZXBseT4+IG1f
cmVwbGllczsKLSAgICAKLSAgICAvLyBOUFJ1bnRpbWUKLQotICAgIHZvaWQgYWRkVmFsdWVUb0Fy
cmF5KE5TTXV0YWJsZUFycmF5ICosIEpTQzo6SlNHbG9iYWxPYmplY3QqIGV4ZWMsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSk7Ci0gICAgCi0gICAgYm9vbCBkZW1hcnNoYWxWYWx1ZUZyb21BcnJheShKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgTlNBcnJheSAqYXJyYXksIE5TVUludGVnZXImIGluZGV4LCBKU0M6
OkpTVmFsdWUmIHJlc3VsdCk7Ci0gICAgdm9pZCBkZW1hcnNoYWxWYWx1ZXMoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIGRhdGFfdCB2YWx1ZXNEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90IHZhbHVl
c0xlbmd0aCwgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlckJhc2UmIHJlc3VsdCk7Ci0KLSAgICBj
bGFzcyBMb2NhbE9iamVjdE1hcCB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExvY2Fs
T2JqZWN0TWFwKTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIExvY2FsT2JqZWN0TWFwKCk7Ci0gICAg
ICAgIH5Mb2NhbE9iamVjdE1hcCgpOwotICAgICAgICB1aW50MzJfdCBpZEZvck9iamVjdChKU0M6
OlZNJiwgSlNDOjpKU09iamVjdCopOwotICAgICAgICB2b2lkIHJldGFpbihKU0M6OkpTT2JqZWN0
Kik7Ci0gICAgICAgIHZvaWQgcmVsZWFzZShKU0M6OkpTT2JqZWN0Kik7Ci0gICAgICAgIHZvaWQg
Y2xlYXIoKTsKLSAgICAgICAgYm9vbCBmb3JnZXQodWludDMyX3QpOwotICAgICAgICBib29sIGNv
bnRhaW5zKHVpbnQzMl90KSBjb25zdDsKLSAgICAgICAgSlNDOjpKU09iamVjdCogZ2V0KHVpbnQz
Ml90KSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIEhhc2hNYXA8dWludDMyX3QsIEpT
Qzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+PiBtX2lkVG9KU09iamVjdE1hcDsKLSAgICAgICAgLy8g
VGhlIHBhaXIgY29uc2lzdHMgb2Ygb2JqZWN0IElEIGFuZCBhIHJlZmVyZW5jZSBjb3VudC4gT25l
IHJlZmVyZW5jZSBiZWxvbmdzIHRvIHJlbW90ZSBwbHVnLWluLAotICAgICAgICAvLyBhbmQgdGhl
IHByb3h5IHdpbGwgYWRkIHRyYW5zaWVudCByZWZlcmVuY2VzIGZvciBhcmd1bWVudHMgdGhhdCBh
cmUgYmVpbmcgc2VudCBvdXQuCi0gICAgICAgIEhhc2hNYXA8SlNDOjpKU09iamVjdCosIHN0ZDo6
cGFpcjx1aW50MzJfdCwgdWludDMyX3Q+PiBtX2pzT2JqZWN0VG9JRE1hcDsKLSAgICAgICAgdWlu
dDMyX3QgbV9vYmplY3RJRENvdW50ZXI7Ci0gICAgfTsKLQotICAgIExvY2FsT2JqZWN0TWFwIG1f
bG9jYWxPYmplY3RzOwotCi0gICAgdHlwZWRlZiBIYXNoU2V0PFByb3h5SW5zdGFuY2UqPiBQcm94
eUluc3RhbmNlU2V0OwotICAgIFByb3h5SW5zdGFuY2VTZXQgbV9pbnN0YW5jZXM7Ci0KLSAgICB1
bnNpZ25lZCBtX3BsdWdpbkZ1bmN0aW9uQ2FsbERlcHRoOwotICAgIGJvb2wgbV9zaG91bGRTdG9w
U29vbjsKLSAgICB1aW50MzJfdCBtX2N1cnJlbnRSZXF1ZXN0SUQ7Ci0KLSAgICAvLyBBbGwgTlBS
dW50aW1lIGZ1bmN0aW9ucyB3aWxsIHJldHVybiBmYWxzZSB3aGVuIGRlc3Ryb3lpbmcgYSBwbHVn
LWluLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZXJlIG1heSBiZSB1bmhhbmRsZWQgbWVz
c2FnZXMgd2FpdGluZywKLSAgICAvLyBhbmQgc3Bpbm5pbmcgaW4gcHJvY2Vzc1JlcXVlc3RzKCkg
d2lsbCB1bmV4cGVjdGVkbHkgZXhlY3V0ZSB0aGVtIGZyb20gaW5zaWRlIGRlc3Ryb3koKS4gVGhh
dCdzIG5vdCBhIGdvb2QgdGltZSB0byBleGVjdXRlIGFyYml0cmFyeSBKYXZhU2NyaXB0LAotICAg
IC8vIHNpbmNlIGJvdGggbG9hZGluZyBhbmQgcmVuZGVyaW5nIGRhdGEgc3RydWN0dXJlcyBtYXkg
YmUgaW4gaW5jb25zaXN0ZW50IHN0YXRlLgotICAgIC8vIFRoaXMgc3VwcHJlc3NlcyBjYWxscyBm
cm9tIGFsbCBwbHVnLWlucywgZXZlbiB0aG9zZSBpbiBkaWZmZXJlbnQgcGFnZXMsIHNpbmNlIEpT
IG1pZ2h0IGFmZmVjdCB0aGUgZnJhbWUgd2l0aCBwbHVnLWluIHRoYXQncyBiZWluZyBzdG9wcGVk
LgotICAgIC8vCi0gICAgLy8gRklYTUU6IFBsdWctaW5zIGNhbiBleGVjdXRlIGFyYml0cmFyeSBK
UyBmcm9tIGRlc3Ryb3koKSBpbiBzYW1lIHByb2Nlc3MgY2FzZSwgYW5kIG90aGVyIGJyb3dzZXJz
IGFsc28gc3VwcG9ydCB0aGF0LgotICAgIC8vIEEgYmV0dGVyIGZpeCBtYXkgYmUgdG8gbWFrZSBz
dXJlIHRoYXQgdW5yZWxhdGVkIG1lc3NhZ2VzIGFyZSBwb3N0cG9uZWQgdW50aWwgYWZ0ZXIgZGVz
dHJveSgpIHJldHVybnMuCi0gICAgLy8gQW5vdGhlciBwb3NzaWJsZSBmaXggbWF5IGJlIHRvIHNl
bmQgZGVzdHJveSBtZXNzYWdlIGF0IGEgdGltZSB3aGVuIGludGVybmFsIHN0cnVjdHVyZXMgYXJl
IGNvbnNpc3RlbnQuCi0gICAgLy8KLSAgICAvLyBGSVhNRTogV2UgbGFjayBzaW1pbGFyIG1lc3Nh
Z2Ugc3VwcHJlc3Npb24gaW4gb3RoZXIgY2FzZXMgLSByZXNpemUoKSBpcyBhbHNvIHRyaWdnZXJl
ZCBieSBsYXlvdXQsIHNvIGV4ZWN1dGluZyBhcmJpdHJhcnkgSlMgaXMgYWxzbyBwcm9ibGVtYXRp
Yy4KLSAgICBzdGF0aWMgYm9vbCBtX2luRGVzdHJveTsKLQotICAgIGJvb2wgbV9wbHVnaW5Jc1dh
aXRpbmdGb3JEcmF3OwotICAgIAotICAgIFJlZlB0cjxIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVh
bT4gbV9tYW51YWxTdHJlYW07Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8V2ViRnJhbWUqLCBSZWZQ
dHI8UGx1Z2luUmVxdWVzdD4+IEZyYW1lTG9hZE1hcDsKLSAgICBGcmFtZUxvYWRNYXAgbV9wZW5k
aW5nRnJhbWVMb2FkczsKLX07Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
IC8vIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eV9oCi0jZW5kaWYgLy8gVVNFKFBMVUdJTl9I
T1NUX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5z
L0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyYTI0ODRlZWFmODZmNDZhYjE1ZDBkZDA5ZmJj
Y2I4YWIyODg0MzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsMTY5MyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmIFVTRShQTFVH
SU5fSE9TVF9QUk9DRVNTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2ltcG9y
dCAiTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5LmgiCi0KLSNpbXBvcnQgIkhvc3RlZE5ldHNj
YXBlUGx1Z2luU3RyZWFtLmgiCi0jaW1wb3J0ICJOZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5oIgot
I2ltcG9ydCAiUHJveHlJbnN0YW5jZS5oIgotI2ltcG9ydCAiUHJveHlSdW50aW1lT2JqZWN0Lmgi
Ci0jaW1wb3J0ICJXZWJEYXRhU291cmNlSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkZyYW1lSW50
ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5oIgotI2ltcG9y
dCAiV2ViS2l0TlNTdHJpbmdFeHRyYXMuaCIKLSNpbXBvcnQgIldlYk5TRGF0YUV4dHJhcy5oIgot
I2ltcG9ydCAiV2ViTlNVUkxFeHRyYXMuaCIKLSNpbXBvcnQgIldlYlBsdWdpblJlcXVlc3QuaCIK
LSNpbXBvcnQgIldlYlVJRGVsZWdhdGUuaCIKLSNpbXBvcnQgIldlYlVJRGVsZWdhdGVQcml2YXRl
LmgiCi0jaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0NhdGNoU2NvcGUuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0NvbXBsZXRpb24uaD4KLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0Vycm9yLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9K
U0dsb2JhbE9iamVjdElubGluZXMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5o
PgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvUHJvcGVydHlOYW1lQXJyYXkuaD4KLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL1NvdXJjZUNvZGUuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL1N0
cm9uZ0lubGluZXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ29va2llSmFyLmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL0RvY3VtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVHJlZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL1Byb3h5U2VydmVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KLSNpbXBvcnQgPFdlYkNvcmUv
VXNlckdlc3R1cmVJbmRpY2F0b3IuaD4KLSNpbXBvcnQgPFdlYkNvcmUvbnBydW50aW1lX2ltcGwu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvcnVudGltZV9vYmplY3QuaD4KLSNpbXBvcnQgPG1hY2gvbWFj
aC5oPgotI2ltcG9ydCA8dXRpbGl0eT4KLSNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgot
I2ltcG9ydCA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgotI2ltcG9ydCA8d3RmL1VSTC5o
PgotI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1leHRlcm4gIkMiIHsKLSNpbXBvcnQg
IldlYktpdFBsdWdpbkNsaWVudFNlcnZlci5oIgotI2ltcG9ydCAiV2ViS2l0UGx1Z2luSG9zdC5o
IgotfQotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotdXNpbmcgbmFtZXNwYWNlIEpTQzo6QmluZGlu
Z3M7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNs
YXNzIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6UGx1Z2luUmVxdWVzdCA6IHB1YmxpYyBS
ZWZDb3VudGVkPE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6UGx1Z2luUmVxdWVzdD4gewot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8UGx1Z2luUmVxdWVzdD4gY3JlYXRlKHVpbnQzMl90IHJl
cXVlc3RJRCwgTlNVUkxSZXF1ZXN0KiByZXF1ZXN0LCBOU1N0cmluZyogZnJhbWVOYW1lLCBib29s
IGFsbG93UG9wdXBzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGx1Z2lu
UmVxdWVzdChyZXF1ZXN0SUQsIHJlcXVlc3QsIGZyYW1lTmFtZSwgYWxsb3dQb3B1cHMpKTsKLSAg
ICB9Ci0KLSAgICB1aW50MzJfdCByZXF1ZXN0SUQoKSBjb25zdCB7IHJldHVybiBtX3JlcXVlc3RJ
RDsgfQotICAgIE5TVVJMUmVxdWVzdCogcmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVz
dC5nZXQoKTsgfQotICAgIE5TU3RyaW5nKiBmcmFtZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2Zy
YW1lTmFtZS5nZXQoKTsgfQotICAgIGJvb2wgYWxsb3dQb3B1cHMoKSBjb25zdCB7IHJldHVybiBt
X2FsbG93UG9wdXBzOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIFBsdWdpblJlcXVlc3QodWludDMy
X3QgcmVxdWVzdElELCBOU1VSTFJlcXVlc3QqIHJlcXVlc3QsIE5TU3RyaW5nKiBmcmFtZU5hbWUs
IGJvb2wgYWxsb3dQb3B1cHMpCi0gICAgICAgIDogbV9yZXF1ZXN0SUQocmVxdWVzdElEKQotICAg
ICAgICAsIG1fcmVxdWVzdChyZXF1ZXN0KQotICAgICAgICAsIG1fZnJhbWVOYW1lKGZyYW1lTmFt
ZSkKLSAgICAgICAgLCBtX2FsbG93UG9wdXBzKGFsbG93UG9wdXBzKQotICAgIHsKLSAgICB9Ci0g
ICAgCi0gICAgdWludDMyX3QgbV9yZXF1ZXN0SUQ7Ci0gICAgUmV0YWluUHRyPE5TVVJMUmVxdWVz
dD4gbV9yZXF1ZXN0OwotICAgIFJldGFpblB0cjxOU1N0cmluZz4gbV9mcmFtZU5hbWU7Ci0gICAg
Ym9vbCBtX2FsbG93UG9wdXBzOwotfTsKLQotTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpM
b2NhbE9iamVjdE1hcDo6TG9jYWxPYmplY3RNYXAoKQotICAgIDogbV9vYmplY3RJRENvdW50ZXIo
MCkKLXsKLX0KLQotTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6
fkxvY2FsT2JqZWN0TWFwKCkKLXsKLX0KLQotaW5saW5lIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6Y29udGFpbnModWludDMyX3Qgb2JqZWN0SUQpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1faWRUb0pTT2JqZWN0TWFwLmNvbnRhaW5zKG9iamVjdElEKTsK
LX0KLQotaW5saW5lIEpTQzo6SlNPYmplY3QqIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6
TG9jYWxPYmplY3RNYXA6OmdldCh1aW50MzJfdCBvYmplY3RJRCkgY29uc3QKLXsKLSAgICBpZiAo
b2JqZWN0SUQgPT0gSGFzaFRyYWl0czx1aW50MzJfdD46OmVtcHR5VmFsdWUoKSB8fCBIYXNoVHJh
aXRzPHVpbnQzMl90Pjo6aXNEZWxldGVkVmFsdWUob2JqZWN0SUQpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIHJldHVybiBtX2lkVG9KU09iamVjdE1hcC5nZXQob2JqZWN0SUQpLmdl
dCgpOwotfQotCi11aW50MzJfdCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2Jq
ZWN0TWFwOjppZEZvck9iamVjdChWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgLy8g
VGhpcyBtZXRob2QgY3JlYXRlcyBvYmplY3RzIHdpdGggcmVmY291bnQgb2YgMSwgYnV0IGRvZXNu
J3QgaW5jcmVhc2UgcmVmY291bnQgd2hlbiByZXR1cm5pbmcKLSAgICAvLyBmb3VuZCBvYmplY3Rz
LiBUaGlzIGV4dHJhIGNvdW50IGFjY291bnRzIGZvciB0aGUgbWFpbiAicmVmZXJlbmNlIiBrZXB0
IGJ5IHBsdWdpbiBwcm9jZXNzLgotCi0gICAgLy8gVG8gYXZvaWQgZXhjZXNzaXZlIElQQywgcGx1
Z2luIHByb2Nlc3MgZG9lc24ndCBzZW5kIGVhY2ggTlBPYmplY3QgcmVsZWFzZS9yZXRhaW4gY2Fs
bCB0bwotICAgIC8vIFNhZmFyaS4gSXQgb25seSBzZW5kcyBvbmUgd2hlbiB0aGUgbGFzdCByZWZl
cmVuY2UgaXMgcmVtb3ZlZCwgYW5kIGl0IGNhbiBkZXN0cm95IHRoZSBwcm94eQotICAgIC8vIE5Q
T2JqZWN0LgotCi0gICAgLy8gSG93ZXZlciwgdGhlIGJyb3dzZXIgbWF5IGJlIHNlbmRpbmcgdGhl
IHNhbWUgb2JqZWN0IG91dCB0byBwbHVnLWluIGFzIGEgZnVuY3Rpb24gY2FsbAotICAgIC8vIGFy
Z3VtZW50IGF0IHRoZSBzYW1lIHRpbWUgLSBuZWl0aGVyIHNpZGUgY2FuIGtub3cgd2hhdCB0aGUg
b3RoZXIgb25lIGlzIGRvaW5nLiBTbywKLSAgICAvLyBpcyB0byBtYWtlIFBDRm9yZ2V0QnJvd3Nl
ck9iamVjdCBjYWxsIHJldHVybiBhIGJvb2xlYW4gcmVzdWx0LCBtYWtpbmcgaXQgcG9zc2libGUg
Zm9yIAotICAgIC8vIHRoZSBicm93c2VyIHRvIG1ha2UgcGx1Z2luIGhvc3Qga2VlcCB0aGUgcHJv
eHkgd2l0aCB6ZXJvIHJlZmNvdW50IGZvciBhIGxpdHRsZSBsb25nZXIuCi0KLSAgICB1aW50MzJf
dCBvYmplY3RJRCA9IDA7Ci0gICAgCi0gICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0Kiwgc3RkOjpw
YWlyPHVpbnQzMl90LCB1aW50MzJfdD4+OjppdGVyYXRvciBpdGVyID0gbV9qc09iamVjdFRvSURN
YXAuZmluZChvYmplY3QpOwotICAgIGlmIChpdGVyICE9IG1fanNPYmplY3RUb0lETWFwLmVuZCgp
KQotICAgICAgICByZXR1cm4gaXRlci0+dmFsdWUuZmlyc3Q7Ci0gICAgCi0gICAgZG8gewotICAg
ICAgICBvYmplY3RJRCA9ICsrbV9vYmplY3RJRENvdW50ZXI7Ci0gICAgfSB3aGlsZSAoIW1fb2Jq
ZWN0SURDb3VudGVyIHx8IG1fb2JqZWN0SURDb3VudGVyID09IHN0YXRpY19jYXN0PHVpbnQzMl90
PigtMSkgfHwgbV9pZFRvSlNPYmplY3RNYXAuY29udGFpbnMob2JqZWN0SUQpKTsKLQotICAgIG1f
aWRUb0pTT2JqZWN0TWFwLnNldChvYmplY3RJRCwgU3Ryb25nPEpTT2JqZWN0Pih2bSwgb2JqZWN0
KSk7Ci0gICAgbV9qc09iamVjdFRvSURNYXAuc2V0KG9iamVjdCwgc3RkOjptYWtlX3BhaXIob2Jq
ZWN0SUQsIDEpKTsKLQotICAgIHJldHVybiBvYmplY3RJRDsKLX0KLQotdm9pZCBOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjpyZXRhaW4oSlNDOjpKU09iamVjdCog
b2JqZWN0KQotewotICAgIEhhc2hNYXA8SlNDOjpKU09iamVjdCosIHN0ZDo6cGFpcjx1aW50MzJf
dCwgdWludDMyX3Q+Pjo6aXRlcmF0b3IgaXRlciA9IG1fanNPYmplY3RUb0lETWFwLmZpbmQob2Jq
ZWN0KTsKLSAgICBBU1NFUlQoaXRlciAhPSBtX2pzT2JqZWN0VG9JRE1hcC5lbmQoKSk7Ci0KLSAg
ICBpdGVyLT52YWx1ZS5zZWNvbmQgPSBpdGVyLT52YWx1ZS5zZWNvbmQgKyAxOwotfQotCi12b2lk
IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OnJlbGVhc2UoSlND
OjpKU09iamVjdCogb2JqZWN0KQotewotICAgIEhhc2hNYXA8SlNDOjpKU09iamVjdCosIHN0ZDo6
cGFpcjx1aW50MzJfdCwgdWludDMyX3Q+Pjo6aXRlcmF0b3IgaXRlciA9IG1fanNPYmplY3RUb0lE
TWFwLmZpbmQob2JqZWN0KTsKLSAgICBBU1NFUlQoaXRlciAhPSBtX2pzT2JqZWN0VG9JRE1hcC5l
bmQoKSk7Ci0KLSAgICBBU1NFUlQoaXRlci0+dmFsdWUuc2Vjb25kID4gMCk7Ci0gICAgaXRlci0+
dmFsdWUuc2Vjb25kID0gaXRlci0+dmFsdWUuc2Vjb25kIC0gMTsKLSAgICBpZiAoIWl0ZXItPnZh
bHVlLnNlY29uZCkgewotICAgICAgICBtX2lkVG9KU09iamVjdE1hcC5yZW1vdmUoaXRlci0+dmFs
dWUuZmlyc3QpOwotICAgICAgICBtX2pzT2JqZWN0VG9JRE1hcC5yZW1vdmUoaXRlcik7Ci0gICAg
fQotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6
OmNsZWFyKCkKLXsKLSAgICBtX2lkVG9KU09iamVjdE1hcC5jbGVhcigpOwotICAgIG1fanNPYmpl
Y3RUb0lETWFwLmNsZWFyKCk7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
OjpMb2NhbE9iamVjdE1hcDo6Zm9yZ2V0KHVpbnQzMl90IG9iamVjdElEKQotewotICAgIGlmIChv
YmplY3RJRCA9PSBIYXNoVHJhaXRzPHVpbnQzMl90Pjo6ZW1wdHlWYWx1ZSgpIHx8IEhhc2hUcmFp
dHM8dWludDMyX3Q+Ojppc0RlbGV0ZWRWYWx1ZShvYmplY3RJRCkpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjpmb3JnZXQ6
IGxvY2FsIG9iamVjdCBpZCAldSBpcyBub3QgdmFsaWQuIiwgb2JqZWN0SUQpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBIYXNoTWFwPHVpbnQzMl90LCBKU0M6OlN0cm9uZzxK
U0M6OkpTT2JqZWN0Pj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2lkVG9KU09iamVjdE1hcC5maW5kKG9i
amVjdElEKTsKLSAgICBpZiAoaXRlciA9PSBtX2lkVG9KU09iamVjdE1hcC5lbmQoKSkgewotICAg
ICAgICBMT0dfRVJST1IoIk5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RN
YXA6OmZvcmdldDogbG9jYWwgb2JqZWN0ICV1IGRvZXNuJ3QgZXhpc3QuIiwgb2JqZWN0SUQpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBIYXNoTWFwPEpTQzo6SlNPYmplY3Qq
LCBzdGQ6OnBhaXI8dWludDMyX3QsIHVpbnQzMl90Pj46Oml0ZXJhdG9yIHJJdGVyID0gbV9qc09i
amVjdFRvSURNYXAuZmluZChpdGVyLT52YWx1ZS5nZXQoKSk7Ci0KLSAgICAvLyBJZiB0aGUgb2Jq
ZWN0IGlzIGJlaW5nIHNlbnQgdG8gcGx1Zy1pbiByaWdodCBub3csIHRoZW4gaXQncyBub3QgdGhl
IHRpbWUgdG8gZm9yZ2V0LgotICAgIGlmIChySXRlci0+dmFsdWUuc2Vjb25kICE9IDEpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fanNPYmplY3RUb0lETWFwLnJlbW92ZShySXRlcik7
Ci0gICAgbV9pZFRvSlNPYmplY3RNYXAucmVtb3ZlKGl0ZXIpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1zdGF0aWMgdWludDMyX3QgcGx1Z2luSURDb3VudGVyOwotCi1ib29sIE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6bV9pbkRlc3Ryb3k7Ci0KLURFRklORV9ERUJVR19PTkxZX0dMT0JB
TChXVEY6OlJlZkNvdW50ZWRMZWFrQ291bnRlciwgbmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
Q291bnRlciwgKCJOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkiKSk7Ci0KLU5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KE5ldHNjYXBlUGx1
Z2luSG9zdFByb3h5KiBwbHVnaW5Ib3N0UHJveHksIFdlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmll
dyAqcGx1Z2luVmlldywgYm9vbCBmdWxsRnJhbWVQbHVnaW4pCi0gICAgOiBtX3BsdWdpbkhvc3RQ
cm94eShwbHVnaW5Ib3N0UHJveHkpCi0gICAgLCBtX3BsdWdpblZpZXcocGx1Z2luVmlldykKLSAg
ICAsIG1fcmVxdWVzdFRpbWVyKCp0aGlzLCAmTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpy
ZXF1ZXN0VGltZXJGaXJlZCkKLSAgICAsIG1fY3VycmVudFVSTFJlcXVlc3RJRCgwKQotICAgICwg
bV9yZW5kZXJDb250ZXh0SUQoMCkKLSAgICAsIG1fcmVuZGVyZXJUeXBlKFVzZVNvZnR3YXJlUmVu
ZGVyZXIpCi0gICAgLCBtX3dhaXRpbmdGb3JSZXBseShmYWxzZSkKLSAgICAsIG1fcGx1Z2luRnVu
Y3Rpb25DYWxsRGVwdGgoMCkKLSAgICAsIG1fc2hvdWxkU3RvcFNvb24oZmFsc2UpCi0gICAgLCBt
X2N1cnJlbnRSZXF1ZXN0SUQoMCkKLSAgICAsIG1fcGx1Z2luSXNXYWl0aW5nRm9yRHJhdyhmYWxz
ZSkKLXsKLSAgICBBU1NFUlQobV9wbHVnaW5WaWV3KTsKLSAgICAKLSAgICBpZiAoZnVsbEZyYW1l
UGx1Z2luKSB7Ci0gICAgICAgIC8vIEZvciBmdWxsIGZyYW1lIHBsdWctaW5zLCB0aGUgZmlyc3Qg
cmVxdWVzdElEIHdpbGwgYWx3YXlzIGJlIHRoZSBvbmUgZm9yIHRoZSBhbHJlYWR5Ci0gICAgICAg
IC8vIG9wZW4gc3RyZWFtLgotICAgICAgICArK21fY3VycmVudFVSTFJlcXVlc3RJRDsKLSAgICB9
Ci0gICAgCi0gICAgLy8gQXNzaWduIGEgcGx1Zy1pbiBJRC4KLSAgICBkbyB7Ci0gICAgICAgIG1f
cGx1Z2luSUQgPSArK3BsdWdpbklEQ291bnRlcjsKLSAgICB9IHdoaWxlIChwbHVnaW5Ib3N0UHJv
eHktPnBsdWdpbkluc3RhbmNlKG1fcGx1Z2luSUQpIHx8ICFtX3BsdWdpbklEKTsKLQotI2lmbmRl
ZiBOREVCVUcKLSAgICBuZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHlDb3VudGVyLmluY3JlbWVu
dCgpOwotI2VuZGlmCi19Ci0KLVJlZjxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk+IE5ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y3JlYXRlKE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBw
bHVnaW5Ib3N0UHJveHksIFdlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldyAqcGx1Z2luVmlldywg
Ym9vbCBmdWxsRnJhbWVQbHVnaW4pCi17Ci0gICAgYXV0byBwcm94eSA9IGFkb3B0UmVmKCpuZXcg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KHBsdWdpbkhvc3RQcm94eSwgcGx1Z2luVmlldywg
ZnVsbEZyYW1lUGx1Z2luKSk7Ci0gICAgcGx1Z2luSG9zdFByb3h5LT5hZGRQbHVnaW5JbnN0YW5j
ZShwcm94eS5wdHIoKSk7Ci0gICAgcmV0dXJuIHByb3h5OwotfQotCi1OZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6On5OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkoKQotewotICAgIEFTU0VS
VCghbV9wbHVnaW5Ib3N0UHJveHkpOwotICAgIAotICAgIG1fcGx1Z2luSUQgPSAwOwotCi0jaWZu
ZGVmIE5ERUJVRwotICAgIG5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eUNvdW50ZXIuZGVjcmVt
ZW50KCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJl
c2l6ZShOU1JlY3Qgc2l6ZSwgTlNSZWN0IGNsaXBSZWN0KQotewotICAgIHVpbnQzMl90IHJlcXVl
c3RJRCA9IDA7Ci0gICAgCi0gICAgcmVxdWVzdElEID0gbmV4dFJlcXVlc3RJRCgpOwotCi0gICAg
X1dLUEhSZXNpemVQbHVnaW5JbnN0YW5jZShtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3Bs
dWdpbklELCByZXF1ZXN0SUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLm9y
aWdpbi54LCBzaXplLm9yaWdpbi55LCBzaXplLnNpemUud2lkdGgsIHNpemUuc2l6ZS5oZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwUmVjdC5vcmlnaW4ueCwgY2xpcFJl
Y3Qub3JpZ2luLnksIGNsaXBSZWN0LnNpemUud2lkdGgsIGNsaXBSZWN0LnNpemUuaGVpZ2h0KTsK
LSAgICAKLSAgICB3YWl0Rm9yUmVwbHk8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpCb29s
ZWFuUmVwbHk+KHJlcXVlc3RJRCk7Ci19Ci0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6OnNldFNob3VsZEhvc3RMYXllcnNJbldpbmRvd1NlcnZlcihib29sIHNob3VsZEhvc3RM
YXllcnNJbldpbmRvd1NlcnZlcikKLXsKLSAgICBfV0tQSFBsdWdpblNob3VsZEhvc3RMYXllcnNJ
bldpbmRvd1NlcnZlckNoYW5nZWQobV9wbHVnaW5Ib3N0UHJveHktPnBvcnQoKSwgbV9wbHVnaW5J
RCwgc2hvdWxkSG9zdExheWVyc0luV2luZG93U2VydmVyKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6OmxheWVySG9zdGluZ01vZGVDaGFuZ2VkKGJvb2wgaG9zdHNMYXll
cnNJbldpbmRvd1NlcnZlciwgdWludDMyX3QgcmVuZGVyQ29udGV4dElEKQotewotICAgIHNldFJl
bmRlckNvbnRleHRJRChyZW5kZXJDb250ZXh0SUQpOwotCi0gICAgW21fcGx1Z2luVmlldyBzZXRI
b3N0c0xheWVyc0luV2luZG93U2VydmVyOmhvc3RzTGF5ZXJzSW5XaW5kb3dTZXJ2ZXJdOwotfQot
Ci12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c3RvcEFsbFN0cmVhbXMoKQotewot
ICAgIGZvciAoYXV0byYgc3RyZWFtIDogY29weVRvVmVjdG9yKG1fc3RyZWFtcy52YWx1ZXMoKSkp
Ci0gICAgICAgIHN0cmVhbS0+c3RvcCgpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6Y2xlYW51cCgpCi17Ci0gICAgc3RvcEFsbFN0cmVhbXMoKTsKLSAgICAKLSAgICBt
X3JlcXVlc3RUaW1lci5zdG9wKCk7Ci0gICAgCi0gICAgLy8gQ2xlYXIgdGhlIG9iamVjdCBtYXAs
IHRoaXMgd2lsbCBjYXVzZSBhbnkgb3V0c3RhbmRpbmcgSlMgb2JqZWN0cyB0aGF0IHRoZSBwbHVn
LWluIGhhZCBhIHJlZmVyZW5jZSB0byAKLSAgICAvLyB0byBnbyBhd2F5IHdoZW4gdGhlIG5leHQg
Z2FyYmFnZSBjb2xsZWN0aW9uIHRha2VzIHBsYWNlLgotICAgIG1fbG9jYWxPYmplY3RzLmNsZWFy
KCk7Ci0gICAgCi0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJG
cmFtZV0pKQotICAgICAgICBmcmFtZS0+c2NyaXB0KCkuY2xlYW51cFNjcmlwdE9iamVjdHNGb3JQ
bHVnaW4oKF9fYnJpZGdlIHZvaWQqKW1fcGx1Z2luVmlldyk7Ci0gICAgCi0gICAgUHJveHlJbnN0
YW5jZVNldCBpbnN0YW5jZXM7Ci0gICAgaW5zdGFuY2VzLnN3YXAobV9pbnN0YW5jZXMpOwotICAg
IAotICAgIC8vIEludmFsaWRhdGUgYWxsIHByb3h5IGluc3RhbmNlcy4KLSAgICBQcm94eUluc3Rh
bmNlU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBpbnN0YW5jZXMuZW5kKCk7Ci0gICAgZm9yIChQ
cm94eUluc3RhbmNlU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGluc3RhbmNlcy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5pbnZhbGlkYXRlKCk7Ci0gICAgCi0gICAg
bV9wbHVnaW5WaWV3ID0gbmlsOwotICAgIG1fbWFudWFsU3RyZWFtID0gbnVsbHB0cjsKLX0KLQot
dm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmludmFsaWRhdGUoKQotewotICAgIC8v
IElmIHRoZSBwbHVnLWluIGhvc3QgaGFzIGRpZWQsIHRoZSBwcm94eSB3aWxsIGJlIG51bGwuCi0g
ICAgaWYgKCFtX3BsdWdpbkhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1f
cGx1Z2luSG9zdFByb3h5LT5yZW1vdmVQbHVnaW5JbnN0YW5jZSh0aGlzKTsKLSAgICBtX3BsdWdp
bkhvc3RQcm94eSA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpkZXN0cm95KCkKLXsKLSAgICB1aW50MzJfdCByZXF1ZXN0SUQgPSBuZXh0UmVxdWVzdElE
KCk7Ci0KLSAgICBBU1NFUlQoIW1faW5EZXN0cm95KTsKLSAgICBtX2luRGVzdHJveSA9IHRydWU7
Ci0gICAgCi0gICAgRnJhbWVMb2FkTWFwOjppdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdGcmFtZUxv
YWRzLmVuZCgpOwotICAgIGZvciAoRnJhbWVMb2FkTWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGlu
Z0ZyYW1lTG9hZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbKGl0LT5rZXkp
IF9zZXRJbnRlcm5hbExvYWREZWxlZ2F0ZTpuaWxdOwotCi0gICAgX1dLUEhEZXN0cm95UGx1Z2lu
SW5zdGFuY2UobV9wbHVnaW5Ib3N0UHJveHktPnBvcnQoKSwgbV9wbHVnaW5JRCwgcmVxdWVzdElE
KTsKLSAKLSAgICAvLyBJZiB0aGUgcGx1Zy1pbiBob3N0IGNyYXNoZXMgd2hpbGUgd2UncmUgd2Fp
dGluZyBmb3IgYSByZXBseSwgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBpbnN0YW5jZSBwcm94
eQotICAgIC8vIHdpbGwgZ28gYXdheS4gUHJldmVudCB0aGlzIGJ5IHByb3RlY3RpbmcgaXQgaGVy
ZS4KLSAgICBSZWY8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5PiBwcm90ZWN0KCp0aGlzKTsK
LSAgICAKLSAgICAvLyBXZSBkb24ndCBjYXJlIGFib3V0IHRoZSByZXBseSBoZXJlIC0gd2UganVz
dCB3YW50IHRvIGJsb2NrIHVudGlsIHRoZSBwbHVnLWluIGluc3RhbmNlIGhhcyBiZWVuIHRvcm4g
ZG93bi4KLSAgICB3YWl0Rm9yUmVwbHk8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpCb29s
ZWFuUmVwbHk+KHJlcXVlc3RJRCk7Ci0KLSAgICBtX2luRGVzdHJveSA9IGZhbHNlOwotICAgIAot
ICAgIGNsZWFudXAoKTsKLSAgICBpbnZhbGlkYXRlKCk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5OjpzZXRNYW51YWxTdHJlYW0oUmVmPEhvc3RlZE5ldHNjYXBlUGx1Z2lu
U3RyZWFtPiYmIG1hbnVhbFN0cmVhbSkKLXsKLSAgICBBU1NFUlQoIW1fbWFudWFsU3RyZWFtKTsK
LSAgICAKLSAgICBtX21hbnVhbFN0cmVhbSA9IFdURk1vdmUobWFudWFsU3RyZWFtKTsKLX0KLQot
Ym9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmNhbmNlbFN0cmVhbUxvYWQodWludDMy
X3Qgc3RyZWFtSUQsIE5QUmVhc29uIHJlYXNvbikgCi17Ci0gICAgSG9zdGVkTmV0c2NhcGVQbHVn
aW5TdHJlYW0qIHN0cmVhbTsKLSAgICAKLSAgICBpZiAobV9tYW51YWxTdHJlYW0gJiYgc3RyZWFt
SUQgPT0gMSkKLSAgICAgICAgc3RyZWFtID0gbV9tYW51YWxTdHJlYW0uZ2V0KCk7Ci0gICAgZWxz
ZQotICAgICAgICBzdHJlYW0gPSBtX3N0cmVhbXMuZ2V0KHN0cmVhbUlEKTsKLSAgICAKLSAgICBp
ZiAoIXN0cmVhbSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHN0cmVhbS0+Y2Fu
Y2VsTG9hZChyZWFzb24pOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6ZGlzY29ubmVjdFN0cmVhbShIb3N0ZWROZXRzY2FwZVBsdWdpblN0
cmVhbSogc3RyZWFtKQotewotICAgIGlmIChzdHJlYW0gPT0gbV9tYW51YWxTdHJlYW0pIHsKLSAg
ICAgICAgbV9tYW51YWxTdHJlYW0gPSBudWxscHRyOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgQVNTRVJUKG1fc3RyZWFtcy5nZXQoc3RyZWFtLT5zdHJlYW1JRCgpKSA9PSBzdHJlYW0p
OwotICAgIG1fc3RyZWFtcy5yZW1vdmUoc3RyZWFtLT5zdHJlYW1JRCgpKTsKLX0KLSAgICAKLXZv
aWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpwbHVnaW5Ib3N0RGllZCgpCi17Ci0gICAg
bV9wbHVnaW5Ib3N0UHJveHkgPSBudWxscHRyOwotCi0gICAgW21fcGx1Z2luVmlldyBwbHVnaW5I
b3N0RGllZF07Ci0KLSAgICBjbGVhbnVwKCk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5Ojpmb2N1c0NoYW5nZWQoYm9vbCBoYXNGb2N1cykKLXsKLSAgICBfV0tQSFBsdWdp
bkluc3RhbmNlRm9jdXNDaGFuZ2VkKG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0KCksIG1fcGx1Z2lu
SUQsIGhhc0ZvY3VzKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Ondp
bmRvd0ZvY3VzQ2hhbmdlZChib29sIGhhc0ZvY3VzKQotewotICAgIF9XS1BIUGx1Z2luSW5zdGFu
Y2VXaW5kb3dGb2N1c0NoYW5nZWQobV9wbHVnaW5Ib3N0UHJveHktPnBvcnQoKSwgbV9wbHVnaW5J
RCwgaGFzRm9jdXMpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6d2lu
ZG93RnJhbWVDaGFuZ2VkKE5TUmVjdCBmcmFtZSkKLXsKLSAgICBfV0tQSFBsdWdpbkluc3RhbmNl
V2luZG93RnJhbWVDaGFuZ2VkKG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0KCksIG1fcGx1Z2luSUQs
IGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSwgZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUu
c2l6ZS5oZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
U01heFkoW1tbTlNTY3JlZW4gc2NyZWVuc10gb2JqZWN0QXRJbmRleDowXSBmcmFtZV0pKTsKLX0K
LSAgICAKLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzdGFydFRpbWVycyhib29s
IHRocm90dGxlVGltZXJzKQotewotICAgIF9XS1BIUGx1Z2luSW5zdGFuY2VTdGFydFRpbWVycyht
X3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdpbklELCB0aHJvdHRsZVRpbWVycyk7Ci19
Ci0gICAgCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6bW91c2VFdmVudChOU1Zp
ZXcgKnBsdWdpblZpZXcsIE5TRXZlbnQgKmV2ZW50LCBOUENvY29hRXZlbnRUeXBlIHR5cGUpCi17
Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBOU1BvaW50IHNj
cmVlblBvaW50ID0gW1tldmVudCB3aW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46W2V2ZW50IGxv
Y2F0aW9uSW5XaW5kb3ddXTsKLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQK
LSAgICBOU1BvaW50IHBsdWdpblBvaW50ID0gW3BsdWdpblZpZXcgY29udmVydFBvaW50OltldmVu
dCBsb2NhdGlvbkluV2luZG93XSBmcm9tVmlldzpuaWxdOwotICAgIAotICAgIGludCBjbGlja0Nv
dW50OwotICAgIGlmICh0eXBlID09IE5QQ29jb2FFdmVudE1vdXNlRW50ZXJlZCB8fCB0eXBlID09
IE5QQ29jb2FFdmVudE1vdXNlRXhpdGVkKQotICAgICAgICBjbGlja0NvdW50ID0gMDsKLSAgICBl
bHNlCi0gICAgICAgIGNsaWNrQ291bnQgPSBbZXZlbnQgY2xpY2tDb3VudF07Ci0gICAgCi0KLSAg
ICBfV0tQSFBsdWdpbkluc3RhbmNlTW91c2VFdmVudChtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgp
LCBtX3BsdWdpbklELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtldmVudCB0
aW1lc3RhbXBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsIFtldmVu
dCBtb2RpZmllckZsYWdzXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVn
aW5Qb2ludC54LCBwbHVnaW5Qb2ludC55LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNjcmVlblBvaW50LngsIHNjcmVlblBvaW50LnksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTlNNYXhZKFtbW05TU2NyZWVuIHNjcmVlbnNdIG9iamVjdEF0SW5kZXg6MF0g
ZnJhbWVdKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXZlbnQgYnV0dG9u
TnVtYmVyXSwgY2xpY2tDb3VudCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
W2V2ZW50IGRlbHRhWF0sIFtldmVudCBkZWx0YVldLCBbZXZlbnQgZGVsdGFaXSk7Ci19Ci0gICAg
Ci12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6a2V5RXZlbnQoTlNWaWV3ICpwbHVn
aW5WaWV3LCBOU0V2ZW50ICpldmVudCwgTlBDb2NvYUV2ZW50VHlwZSB0eXBlKQotewotICAgIE5T
RGF0YSAqY2hhcmFjdGVyc0RhdGEgPSBbW2V2ZW50IGNoYXJhY3RlcnNdIGRhdGFVc2luZ0VuY29k
aW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKLSAgICBOU0RhdGEgKmNoYXJhY3RlcnNJZ25vcmlu
Z01vZGlmaWVyc0RhdGEgPSBbW2V2ZW50IGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyc10gZGF0
YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOwotICAgIAotICAgIF9XS1BIUGx1
Z2luSW5zdGFuY2VLZXlib2FyZEV2ZW50KG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0KCksIG1fcGx1
Z2luSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2V2ZW50IHRpbWVz
dGFtcF0sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsIFtldmVu
dCBtb2RpZmllckZsYWdzXSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3RfY2FzdDxjaGFyKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oW2NoYXJhY3Rl
cnNEYXRhIGJ5dGVzXSkpLCBbY2hhcmFjdGVyc0RhdGEgbGVuZ3RoXSwgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfY2FzdDxjaGFyKj4ocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oW2NoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyc0RhdGEgYnl0ZXNdKSks
IFtjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnNEYXRhIGxlbmd0aF0sIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFtldmVudCBpc0FSZXBlYXRdLCBbZXZlbnQga2V5Q29k
ZV0sIGtleUNoYXJGb3JFdmVudChldmVudCkpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6c3ludGhldGljS2V5RG93bldpdGhDb21tYW5kTW9kaWZpZXIoaW50IGtleUNv
ZGUsIGNoYXIgY2hhcmFjdGVyKQotewotICAgIE5TRGF0YSAqY2hhcmFjdGVyc0RhdGEgPSBbTlNE
YXRhIGRhdGFXaXRoQnl0ZXM6JmNoYXJhY3RlciBsZW5ndGg6MV07Ci0KLSAgICBfV0tQSFBsdWdp
bkluc3RhbmNlS2V5Ym9hcmRFdmVudChtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdp
bklELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtOU0RhdGUgdGltZUlu
dGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTlBDb2NvYUV2ZW50S2V5RG93biwgTlNFdmVudE1vZGlmaWVyRmxhZ0NvbW1hbmQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfY2FzdDxjaGFyKj4o
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oW2NoYXJhY3RlcnNEYXRhIGJ5dGVzXSkpLCBb
Y2hhcmFjdGVyc0RhdGEgbGVuZ3RoXSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3RfY2FzdDxjaGFyKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oW2No
YXJhY3RlcnNEYXRhIGJ5dGVzXSkpLCBbY2hhcmFjdGVyc0RhdGEgbGVuZ3RoXSwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGtleUNvZGUsIGNoYXJhY3Rlcik7
Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpmbGFnc0NoYW5nZWQoTlNF
dmVudCAqZXZlbnQpCi17Ci0gICAgX1dLUEhQbHVnaW5JbnN0YW5jZUtleWJvYXJkRXZlbnQobV9w
bHVnaW5Ib3N0UHJveHktPnBvcnQoKSwgbV9wbHVnaW5JRCwgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgW2V2ZW50IHRpbWVzdGFtcF0sIE5QQ29jb2FFdmVudEZsYWdzQ2hh
bmdlZCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2V2ZW50IG1vZGlm
aWVyRmxhZ3NdLCAwLCAwLCAwLCAwLCBmYWxzZSwgW2V2ZW50IGtleUNvZGVdLCAwKTsKLX0KLQot
dm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omluc2VydFRleHQoTlNTdHJpbmcgKnRl
eHQpCi17Ci0gICAgTlNEYXRhICp0ZXh0RGF0YSA9IFt0ZXh0IGRhdGFVc2luZ0VuY29kaW5nOk5T
VVRGOFN0cmluZ0VuY29kaW5nXTsKLSAgICAKLSAgICBfV0tQSFBsdWdpbkluc3RhbmNlSW5zZXJ0
VGV4dChtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdpbklELAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8Y2hhcio+KHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KFt0ZXh0RGF0YSBieXRlc10pKSwgW3RleHREYXRhIGxlbmd0aF0pOwotfQot
Ci1ib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6d2hlZWxFdmVudChOU1ZpZXcgKnBs
dWdpblZpZXcsIE5TRXZlbnQgKmV2ZW50KQotewotICAgIE5TUG9pbnQgcGx1Z2luUG9pbnQgPSBb
cGx1Z2luVmlldyBjb252ZXJ0UG9pbnQ6W2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddIGZyb21WaWV3
Om5pbF07Ci0KLSAgICB1aW50MzJfdCByZXF1ZXN0SUQgPSBuZXh0UmVxdWVzdElEKCk7Ci0gICAg
X1dLUEhQbHVnaW5JbnN0YW5jZVdoZWVsRXZlbnQobV9wbHVnaW5Ib3N0UHJveHktPnBvcnQoKSwg
bV9wbHVnaW5JRCwgcmVxdWVzdElELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFtldmVudCB0aW1lc3RhbXBdLCBbZXZlbnQgbW9kaWZpZXJGbGFnc10sIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBsdWdpblBvaW50LngsIHBsdWdpblBvaW50LnksIFtldmVu
dCBidXR0b25OdW1iZXJdLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXZl
bnQgZGVsdGFYXSwgW2V2ZW50IGRlbHRhWV0sIFtldmVudCBkZWx0YVpdKTsKLSAgICAKLSAgICBh
dXRvIHJlcGx5ID0gd2FpdEZvclJlcGx5PE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Qm9v
bGVhblJlcGx5PihyZXF1ZXN0SUQpOwotICAgIHJldHVybiByZXBseSAmJiByZXBseS0+bV9yZXN1
bHQ7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpwcmludChDR0NvbnRl
eHRSZWYgY29udGV4dCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKLXsKLSAgICB1
aW50MzJfdCByZXF1ZXN0SUQgPSBuZXh0UmVxdWVzdElEKCk7Ci0gICAgX1dLUEhQbHVnaW5JbnN0
YW5jZVByaW50KG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0KCksIG1fcGx1Z2luSUQsIHJlcXVlc3RJ
RCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgCi0gICAgYXV0byByZXBseSA9IHdhaXRGb3JSZXBseTxO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkJvb2xlYW5BbmREYXRhUmVwbHk+KHJlcXVlc3RJ
RCk7Ci0gICAgaWYgKCFyZXBseSB8fCAhcmVwbHktPm1fcmV0dXJuVmFsdWUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlcj4gZGF0YVByb3ZpZGVyID0gYWRv
cHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhDRkRhdGEocmVwbHktPm1fcmVzdWx0LmdldCgp
KSk7Ci0gICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZSA9IGFkb3B0Q0Yo
Q0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwotICAgIFJldGFpblB0cjxDR0ltYWdlUmVm
PiBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZSh3aWR0aCwgaGVpZ2h0LCA4LCAzMiwgd2lk
dGggKiA0LCBjb2xvclNwYWNlLmdldCgpLCBrQ0dJbWFnZUFscGhhRmlyc3QsIGRhdGFQcm92aWRl
ci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLQotICAgIC8v
IEZsaXAgdGhlIGNvbnRleHQgYW5kIGRyYXcgdGhlIGltYWdlLgotICAgIENHQ29udGV4dFNhdmVH
U3RhdGUoY29udGV4dCk7Ci0gICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAuMCwg
aGVpZ2h0KTsKLSAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLjAsIC0xLjApOwotICAg
IAotICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LCBDR1JlY3RNYWtlKDAsIDAsIHdpZHRo
LCBoZWlnaHQpLCBpbWFnZS5nZXQoKSk7Ci0KLSAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNv
bnRleHQpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c25hcHNob3Qo
Q0dDb250ZXh0UmVmIGNvbnRleHQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCi17
Ci0gICAgdWludDMyX3QgcmVxdWVzdElEID0gbmV4dFJlcXVlc3RJRCgpOwotICAgIF9XS1BIUGx1
Z2luSW5zdGFuY2VTbmFwc2hvdChtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdpbklE
LCByZXF1ZXN0SUQsIHdpZHRoLCBoZWlnaHQpOwotICAgIAotICAgIGF1dG8gcmVwbHkgPSB3YWl0
Rm9yUmVwbHk8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpCb29sZWFuQW5kRGF0YVJlcGx5
PihyZXF1ZXN0SUQpOwotICAgIGlmICghcmVwbHkgfHwgIXJlcGx5LT5tX3JldHVyblZhbHVlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXI+IGRhdGFQcm92
aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKHJlcGx5LT5tX3Jl
c3VsdC5nZXQoKSkpOwotICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2Ug
PSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKLSAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUod2lkdGgsIGhlaWdodCwg
OCwgMzIsIHdpZHRoICogNCwgY29sb3JTcGFjZS5nZXQoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRp
cGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCwgZGF0YVByb3ZpZGVyLmdldCgp
LCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotCi0gICAgQ0dDb250ZXh0
RHJhd0ltYWdlKGNvbnRleHQsIENHUmVjdE1ha2UoMCwgMCwgd2lkdGgsIGhlaWdodCksIGltYWdl
LmdldCgpKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnN0b3BUaW1l
cnMoKQotewotICAgIF9XS1BIUGx1Z2luSW5zdGFuY2VTdG9wVGltZXJzKG1fcGx1Z2luSG9zdFBy
b3h5LT5wb3J0KCksIG1fcGx1Z2luSUQpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6c3RhdHVzKGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiBzdGF0dXMgPSBhZG9wdENGKENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoMCwg
bWVzc2FnZSA/IG1lc3NhZ2UgOiAiIiwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KSk7Ci0gICAgaWYg
KCFzdGF0dXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYlZpZXcgKnd2ID0gW21fcGx1Z2lu
VmlldyB3ZWJWaWV3XTsKLSAgICBbW3d2IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Ond2
IHNldFN0YXR1c1RleHQ6KF9fYnJpZGdlIE5TU3RyaW5nICopc3RhdHVzLmdldCgpXTsKLX0KLQot
TlBFcnJvciBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmxvYWRVUkwoY29uc3QgY2hhciog
dXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIGNvbnN0IGNoYXIqIHBvc3REYXRhLCB1aW50MzJfdCBw
b3N0TGVuLCBMb2FkVVJMRmxhZ3MgZmxhZ3MsIHVpbnQzMl90JiBzdHJlYW1JRCkKLXsKLSAgICBp
ZiAoIXVybCkKLSAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07Ci0gCi0gICAgTlNN
dXRhYmxlVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFttX3BsdWdpblZpZXcgcmVxdWVzdFdpdGhVUkxD
U3RyaW5nOnVybF07Ci0KLSAgICBpZiAoZmxhZ3MgJiBJc1Bvc3QpIHsKLSAgICAgICAgTlNEYXRh
ICpodHRwQm9keSA9IG5pbDsKLQotICAgICAgICBpZiAoZmxhZ3MgJiBQb3N0RGF0YUlzRmlsZSkg
ewotICAgICAgICAgICAgLy8gSWYgd2UncmUgcG9zdGluZyBhIGZpbGUsIGJ1ZiBpcyBlaXRoZXIg
YSBmaWxlIFVSTCBvciBhIHBhdGggdG8gdGhlIGZpbGUuCi0gICAgICAgICAgICBpZiAoIXBvc3RE
YXRhKQotICAgICAgICAgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOwotICAgICAg
ICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBidWZTdHJpbmcgPSBhZG9wdENGKENGU3RyaW5n
Q3JlYXRlV2l0aENTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcG9zdERhdGEsIGtDRlN0cmlu
Z0VuY29kaW5nV2luZG93c0xhdGluMSkpOwotICAgICAgICAgICAgaWYgKCFidWZTdHJpbmcpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIE5TVVJMICpmaWxlVVJMID0gW05TVVJMIF93ZWJfVVJMV2l0aERhdGFBc1N0
cmluZzooX19icmlkZ2UgTlNTdHJpbmcgKilidWZTdHJpbmcuZ2V0KCldOwotICAgICAgICAgICAg
TlNTdHJpbmcgKnBhdGg7Ci0gICAgICAgICAgICBpZiAoW2ZpbGVVUkwgaXNGaWxlVVJMXSkKLSAg
ICAgICAgICAgICAgICBwYXRoID0gW2ZpbGVVUkwgcGF0aF07Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgcGF0aCA9IChfX2JyaWRnZSBOU1N0cmluZyAqKWJ1ZlN0cmluZy5nZXQo
KTsKLSAgICAgICAgICAgIGh0dHBCb2R5ID0gW05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZGaWxl
OnBhdGhdOwotICAgICAgICAgICAgaWYgKCFodHRwQm9keSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaHR0
cEJvZHkgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6cG9zdERhdGEgbGVuZ3RoOnBvc3RMZW5dOwot
Ci0gICAgICAgIGlmICghW2h0dHBCb2R5IGxlbmd0aF0pCi0gICAgICAgICAgICByZXR1cm4gTlBF
UlJfSU5WQUxJRF9QQVJBTTsKLQotICAgICAgICBbcmVxdWVzdCBzZXRIVFRQTWV0aG9kOkAiUE9T
VCJdOwotICAgICAgICAKLSAgICAgICAgaWYgKGZsYWdzICYgQWxsb3dIZWFkZXJzSW5Qb3N0RGF0
YSkgewotICAgICAgICAgICAgaWYgKFtodHRwQm9keSBfd2ViX3N0YXJ0c1dpdGhCbGFua0xpbmVd
KQotICAgICAgICAgICAgICAgIGh0dHBCb2R5ID0gW2h0dHBCb2R5IHN1YmRhdGFXaXRoUmFuZ2U6
TlNNYWtlUmFuZ2UoMSwgW2h0dHBCb2R5IGxlbmd0aF0gLSAxKV07Ci0gICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICBOU0ludGVnZXIgbG9jYXRpb24gPSBbaHR0cEJvZHkgX3dlYl9s
b2NhdGlvbkFmdGVyRmlyc3RCbGFua0xpbmVdOwotICAgICAgICAgICAgICAgIGlmIChsb2NhdGlv
biAhPSBOU05vdEZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBibGFuayBs
aW5lIGlzIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHBvc3REYXRhLCBldmVyeXRoaW5nIGJl
Zm9yZSBpcyB0aGUgaGVhZGVyLgotICAgICAgICAgICAgICAgICAgICBOU0RhdGEgKmhlYWRlckRh
dGEgPSBbaHR0cEJvZHkgc3ViZGF0YVdpdGhSYW5nZTpOU01ha2VSYW5nZSgwLCBsb2NhdGlvbild
OwotICAgICAgICAgICAgICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpoZWFkZXIgPSBbaGVh
ZGVyRGF0YSBfd2Via2l0X3BhcnNlUkZDODIySGVhZGVyRmllbGRzXTsKLSAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgZGF0YUxlbmd0aCA9IFtodHRwQm9keSBsZW5ndGhdIC0gbG9jYXRpb247
Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gU29tZXRpbWVzIHBsdWdpbnMgbGlrZSB0byBzZXQg
Q29udGVudC1MZW5ndGggdGhlbXNlbHZlcyB3aGVuIHRoZXkgcG9zdCwKLSAgICAgICAgICAgICAg
ICAgICAgLy8gYnV0IENGTmV0d29yayBkb2VzIG5vdCBsaWtlIHRoYXQuIFNvIHdlIHdpbGwgcmVt
b3ZlIHRoZSBoZWFkZXIKLSAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGluc3RlYWQgdHJ1bmNh
dGUgdGhlIGRhdGEgdG8gdGhlIHJlcXVlc3RlZCBsZW5ndGguCi0gICAgICAgICAgICAgICAgICAg
IE5TU3RyaW5nICpjb250ZW50TGVuZ3RoID0gW2hlYWRlciBvYmplY3RGb3JLZXk6QCJDb250ZW50
LUxlbmd0aCJdOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50TGVuZ3RoKQotICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxlbmd0aCA9IHN0ZDo6bWluKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihbY29udGVudExlbmd0aCBpbnRWYWx1ZV0pLCBkYXRhTGVuZ3RoKTsKLSAgICAgICAg
ICAgICAgICAgICAgW2hlYWRlciByZW1vdmVPYmplY3RGb3JLZXk6QCJDb250ZW50LUxlbmd0aCJd
OwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChbaGVhZGVyIGNvdW50XSA+IDApCi0gICAgICAg
ICAgICAgICAgICAgICAgICBbcmVxdWVzdCBzZXRBbGxIVFRQSGVhZGVyRmllbGRzOmhlYWRlcl07
Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gRXZlcnl0aGluZyBhZnRlciB0aGUgYmxhbmsgbGlu
ZSBpcyB0aGUgYWN0dWFsIGNvbnRlbnQgb2YgdGhlIFBPU1QuCi0gICAgICAgICAgICAgICAgICAg
IGh0dHBCb2R5ID0gW2h0dHBCb2R5IHN1YmRhdGFXaXRoUmFuZ2U6TlNNYWtlUmFuZ2UobG9jYXRp
b24sIGRhdGFMZW5ndGgpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIVtodHRwQm9keSBsZW5ndGhdKQotICAgICAgICAgICAgcmV0
dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07Ci0KLSAgICAgICAgLy8gUGx1Zy1pbnMgZXhwZWN0IHRv
IHJlY2VpdmUgdW5jYWNoZWQgZGF0YSB3aGVuIGRvaW5nIGEgUE9TVCAoMzM0NzEzNCkuCi0gICAg
ICAgIFtyZXF1ZXN0IHNldENhY2hlUG9saWN5Ok5TVVJMUmVxdWVzdFJlbG9hZElnbm9yaW5nQ2Fj
aGVEYXRhXTsKLSAgICAgICAgW3JlcXVlc3Qgc2V0SFRUUEJvZHk6aHR0cEJvZHldOwotICAgIH0K
LSAgICAKLSAgICByZXR1cm4gbG9hZFJlcXVlc3QocmVxdWVzdCwgdGFyZ2V0LCBmbGFncyAmIEFs
bG93UG9wdXBzLCBzdHJlYW1JRCk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpwZXJmb3JtUmVxdWVzdChQbHVnaW5SZXF1ZXN0KiBwbHVnaW5SZXF1ZXN0KQotewotICAg
IC8vIExvYWRpbmcgdGhlIHJlcXVlc3QgY2FuIGNhdXNlIHRoZSBpbnN0YW5jZSBwcm94eSB0byBn
byBhd2F5LCBzbyBwcm90ZWN0IGl0LgotICAgIFJlZjxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgQVNTRVJUKG1fcGx1Z2luVmlldyk7Ci0gICAgCi0g
ICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gcGx1Z2luUmVxdWVzdC0+cmVxdWVzdCgpOwotICAg
IE5TU3RyaW5nICpmcmFtZU5hbWUgPSBwbHVnaW5SZXF1ZXN0LT5mcmFtZU5hbWUoKTsKLSAgICBX
ZWJGcmFtZSAqZnJhbWUgPSBuaWw7Ci0gICAgCi0gICAgTlNVUkwgKlVSTCA9IFtyZXF1ZXN0IFVS
TF07Ci0gICAgTlNTdHJpbmcgKkpTU3RyaW5nID0gW1VSTCBfd2Via2l0X3NjcmlwdElmSmF2YVNj
cmlwdFVSTF07Ci0gICAgCi0gICAgQVNTRVJUKGZyYW1lTmFtZSB8fCBKU1N0cmluZyk7Ci0gICAg
aWYgKGZyYW1lTmFtZSkgewotICAgICAgICAvLyBGSVhNRSAtIG5lZWQgdG8gZ2V0IHJpZCBvZiB0
aGlzIHdpbmRvdyBjcmVhdGlvbiB3aGljaAotICAgICAgICAvLyBieXBhc3NlcyBub3JtYWwgdGFy
Z2V0ZWQgbGluayBoYW5kbGluZwotICAgICAgICBmcmFtZSA9IGtpdChjb3JlKFttX3BsdWdpblZp
ZXcgd2ViRnJhbWVdKS0+bG9hZGVyKCkuZmluZEZyYW1lRm9yTmF2aWdhdGlvbihmcmFtZU5hbWUp
KTsKLSAgICAgICAgaWYgKCFmcmFtZSkgewotICAgICAgICAgICAgV2ViVmlldyAqY3VycmVudFdl
YlZpZXcgPSBbbV9wbHVnaW5WaWV3IHdlYlZpZXddOwotICAgICAgICAgICAgV2ViVmlldyAqbmV3
V2ViVmlldyA9IFtbY3VycmVudFdlYlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6
Y3VycmVudFdlYlZpZXcgY3JlYXRlV2ViVmlld1dpdGhSZXF1ZXN0Om5pbCB3aW5kb3dGZWF0dXJl
czpAeyB9XTsKLQotICAgICAgICAgICAgaWYgKCFuZXdXZWJWaWV3KSB7Ci0gICAgICAgICAgICAg
ICAgX1dLUEhMb2FkVVJMTm90aWZ5KG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0KCksIG1fcGx1Z2lu
SUQsIHBsdWdpblJlcXVlc3QtPnJlcXVlc3RJRCgpLCBOUEVSUl9HRU5FUklDX0VSUk9SKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGZyYW1lID0gW25ld1dlYlZpZXcgbWFpbkZyYW1lXTsKLSAgICAgICAgICAgIGNvcmUo
ZnJhbWUpLT50cmVlKCkuc2V0TmFtZShmcmFtZU5hbWUpOwotICAgICAgICAgICAgW1tuZXdXZWJW
aWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3U2hvdzpuZXdXZWJWaWV3XTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChKU1N0cmluZykgewotICAgICAgICBBU1NFUlQoIWZyYW1l
IHx8IFttX3BsdWdpblZpZXcgd2ViRnJhbWVdID09IGZyYW1lKTsKLSAgICAgICAgZXZhbHVhdGVK
YXZhU2NyaXB0KHBsdWdpblJlcXVlc3QpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFtmcmFtZSBs
b2FkUmVxdWVzdDpyZXF1ZXN0XTsKLQotICAgICAgICAvLyBDaGVjayBpZiBhbm90aGVyIHBsdWct
aW4gdmlldyBvciBldmVuIHRoaXMgdmlldyBpcyB3YWl0aW5nIGZvciB0aGUgZnJhbWUgdG8gbG9h
ZC4KLSAgICAgICAgLy8gSWYgaXQgaXMsIHRlbGwgaXQgdGhhdCB0aGUgbG9hZCB3YXMgY2FuY2Vs
bGVkIGJlY2F1c2UgaXQgd2lsbCBiZSBhbnl3YXkuCi0gICAgICAgIFdlYkhvc3RlZE5ldHNjYXBl
UGx1Z2luVmlldyAqdmlldyA9IFtmcmFtZSBfaW50ZXJuYWxMb2FkRGVsZWdhdGVdOwotICAgICAg
ICBpZiAodmlldyAhPSBuaWwpIHsKLSAgICAgICAgICAgIEFTU0VSVChbdmlldyBpc0tpbmRPZkNs
YXNzOltXZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcgY2xhc3NdXSk7Ci0gICAgICAgICAgICBb
dmlldyB3ZWJGcmFtZTpmcmFtZSBkaWRGaW5pc2hMb2FkV2l0aFJlYXNvbjpOUFJFU19VU0VSX0JS
RUFLXTsKLSAgICAgICAgfQotICAgICAgICBtX3BlbmRpbmdGcmFtZUxvYWRzLnNldChmcmFtZSwg
cGx1Z2luUmVxdWVzdCk7Ci0gICAgICAgIFtmcmFtZSBfc2V0SW50ZXJuYWxMb2FkRGVsZWdhdGU6
bV9wbHVnaW5WaWV3XTsKLSAgICB9Ci0KLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6OndlYkZyYW1lRGlkRmluaXNoTG9hZFdpdGhSZWFzb24oV2ViRnJhbWUqIHdlYkZyYW1l
LCBOUFJlYXNvbiByZWFzb24pCi17Ci0gICAgRnJhbWVMb2FkTWFwOjppdGVyYXRvciBpdCA9IG1f
cGVuZGluZ0ZyYW1lTG9hZHMuZmluZCh3ZWJGcmFtZSk7Ci0gICAgQVNTRVJUKGl0ICE9IG1fcGVu
ZGluZ0ZyYW1lTG9hZHMuZW5kKCkpOwotICAgICAgICAKLSAgICBQbHVnaW5SZXF1ZXN0KiBwbHVn
aW5SZXF1ZXN0ID0gaXQtPnZhbHVlLmdldCgpOwotICAgIF9XS1BITG9hZFVSTE5vdGlmeShtX3Bs
dWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdpbklELCBwbHVnaW5SZXF1ZXN0LT5yZXF1ZXN0
SUQoKSwgcmVhc29uKTsKLSAKLSAgICBtX3BlbmRpbmdGcmFtZUxvYWRzLnJlbW92ZShpdCk7Ci0K
LSAgICBbd2ViRnJhbWUgX3NldEludGVybmFsTG9hZERlbGVnYXRlOm5pbF07Ci19Ci0KLXZvaWQg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpldmFsdWF0ZUphdmFTY3JpcHQoUGx1Z2luUmVx
dWVzdCogcGx1Z2luUmVxdWVzdCkKLXsKLSAgICBOU1VSTCAqVVJMID0gW3BsdWdpblJlcXVlc3Qt
PnJlcXVlc3QoKSBVUkxdOwotICAgIE5TU3RyaW5nICpKU1N0cmluZyA9IFtVUkwgX3dlYmtpdF9z
Y3JpcHRJZkphdmFTY3JpcHRVUkxdOwotICAgIEFTU0VSVChKU1N0cmluZyk7Ci0KLSAgICBSZWY8
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5PiBwcm90ZWN0KCp0aGlzKTsgLy8gRXhlY3V0aW5n
IGFyYml0cmFyeSBKYXZhU2NyaXB0IGNhbiBkZXN0cm95IHRoZSBwcm94eS4KLQotICAgIE5TU3Ry
aW5nICpyZXN1bHQgPSBbW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0gX3N0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHRGcm9tU3RyaW5nOkpTU3RyaW5nIGZvcmNlVXNlckdlc3R1cmU6cGx1Z2luUmVx
dWVzdC0+YWxsb3dQb3B1cHMoKV07Ci0gICAgCi0gICAgLy8gRG9uJ3QgY29udGludWUgaWYgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmcgY2F1c2VkIHRoZSBwbHVnLWluIHRv
IHN0b3AuCi0gICAgaWYgKCFtX3BsdWdpbkhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKHBsdWdpblJlcXVlc3QtPmZyYW1lTmFtZSgpICE9IG5pbCkKLSAgICAgICAgcmV0dXJu
OwotICAgICAgICAKLSAgICBpZiAoW3Jlc3VsdCBsZW5ndGhdID4gMCkgewotICAgICAgICAvLyBE
b24ndCBjYWxsIE5QUF9OZXdTdHJlYW0gYW5kIG90aGVyIHN0cmVhbSBtZXRob2RzIGlmIHRoZXJl
IGlzIG5vIEpTIHJlc3VsdCB0byBkZWxpdmVyLiBUaGlzIGlzIHdoYXQgTW96aWxsYSBkb2VzLgot
ICAgICAgICBOU0RhdGEgKkpTRGF0YSA9IFtyZXN1bHQgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4
U3RyaW5nRW5jb2RpbmddOwotICAgICAgICAKLSAgICAgICAgYXV0byBzdHJlYW0gPSBIb3N0ZWRO
ZXRzY2FwZVBsdWdpblN0cmVhbTo6Y3JlYXRlKHRoaXMsIHBsdWdpblJlcXVlc3QtPnJlcXVlc3RJ
RCgpLCBwbHVnaW5SZXF1ZXN0LT5yZXF1ZXN0KCkpOwotICAgICAgICBtX3N0cmVhbXMuYWRkKHN0
cmVhbS0+c3RyZWFtSUQoKSwgc3RyZWFtLmNvcHlSZWYoKSk7Ci0gICAgICAgIAotICAgICAgICBS
ZXRhaW5QdHI8TlNVUkxSZXNwb25zZT4gcmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNVUkxSZXNwb25z
ZSBhbGxvY10gaW5pdFdpdGhVUkw6VVJMIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpA
InRleHQvcGxhaW4iIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkQ29udGVudExlbmd0aDpbSlNEYXRhIGxlbmd0
aF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHRFbmNvZGluZ05hbWU6bmlsXSk7Ci0gICAgICAgIHN0cmVhbS0+
c3RhcnRTdHJlYW1XaXRoUmVzcG9uc2UocmVzcG9uc2UuZ2V0KCkpOwotICAgICAgICBzdHJlYW0t
PmRpZFJlY2VpdmVEYXRhKDAsIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihbSlNEYXRhIGJ5
dGVzXSksIFtKU0RhdGEgbGVuZ3RoXSk7Ci0gICAgICAgIHN0cmVhbS0+ZGlkRmluaXNoTG9hZGlu
ZygwKTsKLSAgICB9Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZXF1
ZXN0VGltZXJGaXJlZCgpCi17Ci0gICAgQVNTRVJUKCFtX3BsdWdpblJlcXVlc3RzLmlzRW1wdHko
KSk7Ci0gICAgQVNTRVJUKG1fcGx1Z2luVmlldyk7Ci0gICAgCi0gICAgUmVmUHRyPFBsdWdpblJl
cXVlc3Q+IHJlcXVlc3QgPSBtX3BsdWdpblJlcXVlc3RzLmZpcnN0KCk7Ci0gICAgbV9wbHVnaW5S
ZXF1ZXN0cy5yZW1vdmVGaXJzdCgpOwotICAgIAotICAgIGlmICghbV9wbHVnaW5SZXF1ZXN0cy5p
c0VtcHR5KCkpCi0gICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotICAg
IAotICAgIHBlcmZvcm1SZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOwotfQotICAgIAotTlBFcnJvciBO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmxvYWRSZXF1ZXN0KE5TVVJMUmVxdWVzdCAqcmVx
dWVzdCwgY29uc3QgY2hhciogY1RhcmdldCwgYm9vbCBhbGxvd1BvcHVwcywgdWludDMyX3QmIHJl
cXVlc3RJRCkKLXsKLSAgICBOU1VSTCAqVVJMID0gW3JlcXVlc3QgVVJMXTsKLQotICAgIGlmICgh
VVJMKSAKLSAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfVVJMOwotCi0gICAgLy8gRG9uJ3Qg
YWxsb3cgcmVxdWVzdHMgdG8gYmUgbG9hZGVkIHdoZW4gdGhlIGRvY3VtZW50IGxvYWRlciBpcyBz
dG9wcGluZyBhbGwgbG9hZGVycy4KLSAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIg
PSBbW21fcGx1Z2luVmlldyBkYXRhU291cmNlXSBfZG9jdW1lbnRMb2FkZXJdOwotICAgIGlmICgh
ZG9jdW1lbnRMb2FkZXIgfHwgZG9jdW1lbnRMb2FkZXItPmlzU3RvcHBpbmcoKSkKLSAgICAgICAg
cmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAgICBOU1N0cmluZyAqdGFyZ2V0ID0gbmls
OwotICAgIGlmIChjVGFyZ2V0KSB7Ci0gICAgICAgIC8vIEZpbmQgdGhlIGZyYW1lIGdpdmVuIHRo
ZSB0YXJnZXQgc3RyaW5nLgotICAgICAgICB0YXJnZXQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENT
dHJpbmc6Y1RhcmdldCBlbmNvZGluZzpOU0lTT0xhdGluMVN0cmluZ0VuY29kaW5nXTsKLSAgICB9
Ci0gICAgV2ViRnJhbWUgKmZyYW1lID0gW21fcGx1Z2luVmlldyB3ZWJGcmFtZV07Ci0KLSAgICAv
LyBkb24ndCBsZXQgYSBwbHVnaW4gc3RhcnQgYW55IGxvYWRzIGlmIGl0IGlzIG5vIGxvbmdlciBw
YXJ0IG9mIGEgZG9jdW1lbnQgdGhhdCBpcyBiZWluZyAKLSAgICAvLyBkaXNwbGF5ZWQgdW5sZXNz
IHRoZSBsb2FkcyBhcmUgaW4gdGhlIHNhbWUgZnJhbWUgYXMgdGhlIHBsdWdpbi4KLSAgICBpZiAo
ZG9jdW1lbnRMb2FkZXIgIT0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSktPmxvYWRlcigp
LmFjdGl2ZURvY3VtZW50TG9hZGVyKCkgJiYKLSAgICAgICAgKCFjVGFyZ2V0IHx8IFtmcmFtZSBm
aW5kRnJhbWVOYW1lZDp0YXJnZXRdICE9IGZyYW1lKSkgewotICAgICAgICByZXR1cm4gTlBFUlJf
R0VORVJJQ19FUlJPUjsgCi0gICAgfQotICAgIAotICAgIE5TU3RyaW5nICpKU1N0cmluZyA9IFtV
UkwgX3dlYmtpdF9zY3JpcHRJZkphdmFTY3JpcHRVUkxdOwotICAgIGlmIChKU1N0cmluZyAhPSBu
aWwpIHsKLSAgICAgICAgaWYgKCFbW1ttX3BsdWdpblZpZXcgd2ViVmlld10gcHJlZmVyZW5jZXNd
IGlzSmF2YVNjcmlwdEVuYWJsZWRdKSB7Ci0gICAgICAgICAgICAvLyBSZXR1cm4gTlBFUlJfR0VO
RVJJQ19FUlJPUiBpZiBKUyBpcyBkaXNhYmxlZC4gVGhpcyBpcyB3aGF0IE1vemlsbGEgZG9lcy4K
LSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgICAgICB9Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgaWYgKCFjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKS0+ZG9j
dW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS5jYW5EaXNwbGF5KFVSTCkpCi0gICAgICAgICAgICBy
ZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICB9Ci0gICAgCi0gICAgLy8gRklYTUU6IEhh
bmRsZSB3cmFwYXJvdW5kCi0gICAgcmVxdWVzdElEID0gKyttX2N1cnJlbnRVUkxSZXF1ZXN0SUQ7
Ci0gICAgICAgIAotICAgIGlmIChjVGFyZ2V0IHx8IEpTU3RyaW5nKSB7Ci0gICAgICAgIC8vIE1h
a2Ugd2hlbiB0YXJnZXRpbmcgYSBmcmFtZSBvciBldmFsdWF0aW5nIGEgSlMgc3RyaW5nLCBwZXJm
b3JtIHRoZSByZXF1ZXN0IGFmdGVyIGEgZGVsYXkgYmVjYXVzZSB3ZSBkb24ndAotICAgICAgICAv
LyB3YW50IHRvIHBvdGVudGlhbGx5IGtpbGwgdGhlIHBsdWctaW4gaW5zaWRlIG9mIGl0cyBVUkwg
cmVxdWVzdC4KLSAgICAgICAgCi0gICAgICAgIGlmIChKU1N0cmluZyAmJiB0YXJnZXQgJiYgW2Zy
YW1lIGZpbmRGcmFtZU5hbWVkOnRhcmdldF0gIT0gZnJhbWUpIHsKLSAgICAgICAgICAgIC8vIEZv
ciBzZWN1cml0eSByZWFzb25zLCBvbmx5IGFsbG93IEpTIHJlcXVlc3RzIHRvIGJlIG1hZGUgb24g
dGhlIGZyYW1lIHRoYXQgY29udGFpbnMgdGhlIHBsdWctaW4uCi0gICAgICAgICAgICByZXR1cm4g
TlBFUlJfSU5WQUxJRF9QQVJBTTsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gcGx1Z2luUmVx
dWVzdCA9IFBsdWdpblJlcXVlc3Q6OmNyZWF0ZShyZXF1ZXN0SUQsIHJlcXVlc3QsIHRhcmdldCwg
YWxsb3dQb3B1cHMpOwotICAgICAgICBtX3BsdWdpblJlcXVlc3RzLmFwcGVuZChXVEZNb3ZlKHBs
dWdpblJlcXVlc3QpKTsKLSAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90KDBfcyk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byBzdHJlYW0gPSBIb3N0ZWROZXRzY2FwZVBsdWdp
blN0cmVhbTo6Y3JlYXRlKHRoaXMsIHJlcXVlc3RJRCwgcmVxdWVzdCk7Ci0KLSAgICAgICAgQVNT
RVJUKCFtX3N0cmVhbXMuY29udGFpbnMocmVxdWVzdElEKSk7Ci0gICAgICAgIG1fc3RyZWFtcy5h
ZGQocmVxdWVzdElELCBzdHJlYW0uY29weVJlZigpKTsKLSAgICAgICAgc3RyZWFtLT5zdGFydCgp
OwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLXN0ZDo6dW5p
cXVlX3B0cjxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OlJlcGx5PiBOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OnByb2Nlc3NSZXF1ZXN0c0FuZFdhaXRGb3JSZXBseSh1aW50MzJfdCBy
ZXF1ZXN0SUQpCi17Ci0gICAgQVNTRVJUKG1fcGx1Z2luSG9zdFByb3h5KTsKLQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxSZXBseT4gcmVwbHk7Ci0KLSAgICB3aGlsZSAoIShyZXBseSA9IG1fcmVwbGll
cy50YWtlKHJlcXVlc3RJRCkpKSB7Ci0gICAgICAgIGlmICghbV9wbHVnaW5Ib3N0UHJveHktPnBy
b2Nlc3NSZXF1ZXN0cygpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAg
Ly8gVGhlIGhvc3QgcHJveHkgY2FuIGJlIGRlc3Ryb3llZCB3aGlsZSBleGVjdXRpbmcgYSBuZXN0
ZWQgcHJvY2Vzc1JlcXVlc3RzKCkgY2FsbCwgaW4gd2hpY2ggY2FzZSBpdCdzIG5vcm1hbAotICAg
ICAgICAvLyB0byBnZXQgYSBzdWNjZXNzIHJlc3VsdCwgYnV0IGJlIHVuYWJsZSB0byBrZWVwIGxv
b3BpbmcuCi0gICAgICAgIGlmICghbV9wbHVnaW5Ib3N0UHJveHkpCi0gICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVwbHk7Ci19Ci0KLS8vIE5QUnVudGlt
ZSBzdXBwb3J0Ci1ib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0V2luZG93TlBP
YmplY3QodWludDMyX3QmIG9iamVjdElEKQotewotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21f
cGx1Z2luVmlldyB3ZWJGcmFtZV0pOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAKLSAgICBpZiAoIWZyYW1lLT5zY3JpcHQoKS5jYW5FeGVjdXRlU2NyaXB0cyhO
b3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkpCi0gICAgICAgIG9iamVjdElEID0gMDsKLSAgICBlbHNl
Ci0gICAgICAgIG9iamVjdElEID0gbV9sb2NhbE9iamVjdHMuaWRGb3JPYmplY3QocGx1Z2luV29y
bGQoKS52bSgpLCBmcmFtZS0+d2luZG93UHJveHkoKS5qc1dpbmRvd1Byb3h5KHBsdWdpbldvcmxk
KCkpLT53aW5kb3coKSk7Ci0gICAgICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0UGx1Z2luRWxlbWVudE5QT2JqZWN0KHVpbnQz
Ml90JiBvYmplY3RJRCkKLXsKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcg
d2ViRnJhbWVdKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgaWYgKEpTT2JqZWN0KiBvYmplY3QgPSBmcmFtZS0+c2NyaXB0KCkuanNPYmplY3RGb3JQ
bHVnaW5FbGVtZW50KFttX3BsdWdpblZpZXcgZWxlbWVudF0pKQotICAgICAgICBvYmplY3RJRCA9
IG1fbG9jYWxPYmplY3RzLmlkRm9yT2JqZWN0KHBsdWdpbldvcmxkKCkudm0oKSwgb2JqZWN0KTsK
LSAgICBlbHNlCi0gICAgICAgIG9iamVjdElEID0gMDsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmZvcmdldEJyb3dzZXJPYmpl
Y3RJRCh1aW50MzJfdCBvYmplY3RJRCkKLXsKLSAgICByZXR1cm4gbV9sb2NhbE9iamVjdHMuZm9y
Z2V0KG9iamVjdElEKTsKLX0KLSAKLWJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpl
dmFsdWF0ZSh1aW50MzJfdCBvYmplY3RJRCwgY29uc3QgU3RyaW5nJiBzY3JpcHQsIGRhdGFfdCYg
cmVzdWx0RGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCYgcmVzdWx0TGVuZ3RoLCBib29sIGFs
bG93UG9wdXBzKQotewotICAgIHJlc3VsdERhdGEgPSBudWxscHRyOwotICAgIHJlc3VsdExlbmd0
aCA9IDA7Ci0KLSAgICBpZiAobV9pbkRlc3Ryb3kpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmICghbV9sb2NhbE9iamVjdHMuY29udGFpbnMob2JqZWN0SUQpKSB7Ci0gICAgICAgIExP
R19FUlJPUigiTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpldmFsdWF0ZTogbG9jYWwgb2Jq
ZWN0ICV1IGRvZXNuJ3QgZXhpc3QuIiwgb2JqZWN0SUQpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1l
XSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVk0mIHZt
ID0gcGx1Z2luV29ybGQoKS52bSgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0KLSAgICBTdHJvbmc8SlNHbG9i
YWxPYmplY3Q+IGdsb2JhbE9iamVjdCh2bSwgZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChw
bHVnaW5Xb3JsZCgpKSk7Ci0KLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNh
dG9yKGFsbG93UG9wdXBzID8gc3RkOjpvcHRpb25hbDxQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0
ZT4oUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKSA6IHN0ZDo6bnVsbG9wdCk7Ci0gICAgCi0gICAgSlNW
YWx1ZSByZXN1bHQgPSBKU0M6OmV2YWx1YXRlKGdsb2JhbE9iamVjdC5nZXQoKSwgSlNDOjptYWtl
U291cmNlKHNjcmlwdCwgeyB9KSk7Ci0gICAgCi0gICAgbWFyc2hhbFZhbHVlKGdsb2JhbE9iamVj
dC5nZXQoKSwgcmVzdWx0LCByZXN1bHREYXRhLCByZXN1bHRMZW5ndGgpOwotICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5OjppbnZva2UodWludDMyX3Qgb2JqZWN0SUQsIGNvbnN0IElkZW50aWZp
ZXImIG1ldGhvZE5hbWUsIGRhdGFfdCBhcmd1bWVudHNEYXRhLCBtYWNoX21zZ190eXBlX251bWJl
cl90IGFyZ3VtZW50c0xlbmd0aCwgZGF0YV90JiByZXN1bHREYXRhLCBtYWNoX21zZ190eXBlX251
bWJlcl90JiByZXN1bHRMZW5ndGgpCi17Ci0gICAgcmVzdWx0RGF0YSA9IG51bGxwdHI7Ci0gICAg
cmVzdWx0TGVuZ3RoID0gMDsKLSAgICAKLSAgICBpZiAobV9pbkRlc3Ryb3kpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICBKU09iamVjdCogb2JqZWN0ID0gbV9sb2NhbE9iamVjdHMu
Z2V0KG9iamVjdElEKTsKLSAgICBpZiAoIW9iamVjdCkgewotICAgICAgICBMT0dfRVJST1IoIk5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52b2tlOiBsb2NhbCBvYmplY3QgJXUgZG9lc24n
dCBleGlzdC4iLCBvYmplY3RJRCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
Ci0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7Ci0gICAg
aWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVk0mIHZtID0gcGx1Z2lu
V29ybGQoKS52bSgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQo
KSk7Ci0gICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iamVjdC0+Z2V0KGxleGljYWxHbG9iYWxPYmpl
Y3QsIG1ldGhvZE5hbWUpOwotICAgIGF1dG8gY2FsbERhdGEgPSBnZXRDYWxsRGF0YSh2bSwgZnVu
Y3Rpb24pOwotICAgIGlmIChjYWxsRGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOb25lKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0
OwotICAgIGRlbWFyc2hhbFZhbHVlcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudHNEYXRh
LCBhcmd1bWVudHNMZW5ndGgsIGFyZ0xpc3QpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFhcmdMaXN0
Lmhhc092ZXJmbG93ZWQoKSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbChsZXhpY2FsR2xv
YmFsT2JqZWN0LCBmdW5jdGlvbiwgY2FsbERhdGEsIG9iamVjdCwgYXJnTGlzdCk7Ci0gICAgICAg
IAotICAgIG1hcnNoYWxWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgcmVzdWx0RGF0
YSwgcmVzdWx0TGVuZ3RoKTsKLSAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52b2tlRGVm
YXVsdCh1aW50MzJfdCBvYmplY3RJRCwgZGF0YV90IGFyZ3VtZW50c0RhdGEsIG1hY2hfbXNnX3R5
cGVfbnVtYmVyX3QgYXJndW1lbnRzTGVuZ3RoLCBkYXRhX3QmIHJlc3VsdERhdGEsIG1hY2hfbXNn
X3R5cGVfbnVtYmVyX3QmIHJlc3VsdExlbmd0aCkKLXsKLSAgICBpZiAobV9pbkRlc3Ryb3kpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBtX2xvY2FsT2Jq
ZWN0cy5nZXQob2JqZWN0SUQpOwotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIExPR19FUlJP
UigiTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2VEZWZhdWx0OiBsb2NhbCBvYmpl
Y3QgJXUgZG9lc24ndCBleGlzdC4iLCBvYmplY3RJRCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZy
YW1lXSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVk0m
IHZtID0gcGx1Z2luV29ybGQoKS52bSgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0KLSAgICBKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3Qo
cGx1Z2luV29ybGQoKSk7Ci0gICAgYXV0byBjYWxsRGF0YSA9IGdldENhbGxEYXRhKHZtLCBvYmpl
Y3QpOwotICAgIGlmIChjYWxsRGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOb25lKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0Owot
ICAgIGRlbWFyc2hhbFZhbHVlcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudHNEYXRhLCBh
cmd1bWVudHNMZW5ndGgsIGFyZ0xpc3QpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFhcmdMaXN0Lmhh
c092ZXJmbG93ZWQoKSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbChsZXhpY2FsR2xvYmFs
T2JqZWN0LCBvYmplY3QsIGNhbGxEYXRhLCBvYmplY3QsIGFyZ0xpc3QpOwotICAgIAotICAgIG1h
cnNoYWxWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0
TGVuZ3RoKTsKLSAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y29uc3RydWN0KHVpbnQzMl90
IG9iamVjdElELCBkYXRhX3QgYXJndW1lbnRzRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCBh
cmd1bWVudHNMZW5ndGgsIGRhdGFfdCYgcmVzdWx0RGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJf
dCYgcmVzdWx0TGVuZ3RoKQotewotICAgIGlmIChtX2luRGVzdHJveSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgSlNPYmplY3QqIG9iamVjdCA9IG1fbG9jYWxPYmplY3RzLmdldChvYmpl
Y3RJRCk7Ci0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6OmNvbnN0cnVjdDogbG9jYWwgb2JqZWN0ICV1IGRvZXNuJ3QgZXhp
c3QuIiwgb2JqZWN0SUQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAg
IEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwotICAgIGlmICgh
ZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZNJiB2bSA9IHBsdWdpbldvcmxk
KCkudm0oKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpOwot
Ci0gICAgYXV0byBjb25zdHJ1Y3REYXRhID0gZ2V0Q29uc3RydWN0RGF0YSh2bSwgb2JqZWN0KTsK
LSAgICBpZiAoY29uc3RydWN0RGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOb25lKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0Owot
ICAgIGRlbWFyc2hhbFZhbHVlcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudHNEYXRhLCBh
cmd1bWVudHNMZW5ndGgsIGFyZ0xpc3QpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFhcmdMaXN0Lmhh
c092ZXJmbG93ZWQoKSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNDOjpjb25zdHJ1Y3QobGV4
aWNhbEdsb2JhbE9iamVjdCwgb2JqZWN0LCBjb25zdHJ1Y3REYXRhLCBhcmdMaXN0KTsKLSAgICAK
LSAgICBtYXJzaGFsVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIHJlc3VsdERhdGEs
IHJlc3VsdExlbmd0aCk7Ci0gICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmdldFByb3BlcnR5
KHVpbnQzMl90IG9iamVjdElELCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGRhdGFf
dCYgcmVzdWx0RGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCYgcmVzdWx0TGVuZ3RoKQotewot
ICAgIGlmIChtX2luRGVzdHJveSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNPYmpl
Y3QqIG9iamVjdCA9IG1fbG9jYWxPYmplY3RzLmdldChvYmplY3RJRCk7Ci0gICAgaWYgKCFvYmpl
Y3QpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omdl
dFByb3BlcnR5OiBsb2NhbCBvYmplY3QgJXUgZG9lc24ndCBleGlzdC4iLCBvYmplY3RJRCk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0gY29y
ZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOwotICAgIEpTTG9j
a0hvbGRlciBsb2NrKHZtKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGZyYW1lLT5z
Y3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9
IG9iamVjdC0+Z2V0KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7Ci0gICAgCi0g
ICAgbWFyc2hhbFZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCByZXN1bHREYXRhLCBy
ZXN1bHRMZW5ndGgpOwotICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0gICAgCi1ib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0UHJvcGVy
dHkodWludDMyX3Qgb2JqZWN0SUQsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgZGF0YV90JiByZXN1
bHREYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90JiByZXN1bHRMZW5ndGgpCi17Ci0gICAgSlNP
YmplY3QqIG9iamVjdCA9IG1fbG9jYWxPYmplY3RzLmdldChvYmplY3RJRCk7Ci0gICAgaWYgKCFv
YmplY3QpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OmdldFByb3BlcnR5OiBsb2NhbCBvYmplY3QgJXUgZG9lc24ndCBleGlzdC4iLCBvYmplY3RJRCk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0g
Y29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOwotICAgIEpT
TG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGZyYW1l
LT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSk7Ci0gICAgSlNWYWx1ZSB2YWx1
ZSA9IG9iamVjdC0+Z2V0KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7Ci0gICAg
Ci0gICAgbWFyc2hhbFZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCByZXN1bHREYXRh
LCByZXN1bHRMZW5ndGgpOwotICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRQcm9wZXJ0
eSh1aW50MzJfdCBvYmplY3RJRCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBkYXRh
X3QgdmFsdWVEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90IHZhbHVlTGVuZ3RoKQotewotICAg
IGlmIChtX2luRGVzdHJveSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNPYmplY3Qq
IG9iamVjdCA9IG1fbG9jYWxPYmplY3RzLmdldChvYmplY3RJRCk7Ci0gICAgaWYgKCFvYmplY3Qp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnNldFBy
b3BlcnR5OiBsb2NhbCBvYmplY3QgJXUgZG9lc24ndCBleGlzdC4iLCBvYmplY3RJRCk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZShb
bV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOwotICAgIEpTTG9ja0hv
bGRlciBsb2NrKHZtKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGZyYW1lLT5zY3Jp
cHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0g
ZGVtYXJzaGFsVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWVEYXRhLCB2YWx1ZUxlbmd0
aCk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0KTsKLSAgICBvYmplY3QtPm1ldGhv
ZFRhYmxlKHZtKS0+cHV0KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnNldFBy
b3BlcnR5KHVpbnQzMl90IG9iamVjdElELCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIGRhdGFfdCB2
YWx1ZURhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgdmFsdWVMZW5ndGgpCi17Ci0gICAgaWYg
KG1faW5EZXN0cm95KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBKU09iamVjdCogb2Jq
ZWN0ID0gbV9sb2NhbE9iamVjdHMuZ2V0KG9iamVjdElEKTsKLSAgICBpZiAoIW9iamVjdCkgewot
ICAgICAgICBMT0dfRVJST1IoIk5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c2V0UHJvcGVy
dHk6IGxvY2FsIG9iamVjdCAldSBkb2Vzbid0IGV4aXN0LiIsIG9iamVjdElEKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3Bs
dWdpblZpZXcgd2ViRnJhbWVdKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7Ci0gICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0pOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQot
ICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZnJhbWUtPnNjcmlwdCgp
Lmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKTsKLSAgICAKLSAgICBKU1ZhbHVlIHZhbHVlID0g
ZGVtYXJzaGFsVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWVEYXRhLCB2YWx1ZUxlbmd0
aCk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgob2JqZWN0LCBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBmYWxzZSk7Ci0gICAgCi0gICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJlbW92ZVByb3BlcnR5KHVpbnQzMl90IG9iamVjdElE
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaWYgKG1faW5EZXN0cm95
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBKU09iamVjdCogb2JqZWN0ID0gbV9sb2Nh
bE9iamVjdHMuZ2V0KG9iamVjdElEKTsKLSAgICBpZiAoIW9iamVjdCkgewotICAgICAgICBMT0df
RVJST1IoIk5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6cmVtb3ZlUHJvcGVydHk6IGxvY2Fs
IG9iamVjdCAldSBkb2Vzbid0IGV4aXN0LiIsIG9iamVjdElEKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICAKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcg
d2ViRnJhbWVdKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2sodm0p
OwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQotICAgIEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9i
amVjdChwbHVnaW5Xb3JsZCgpKTsKLSAgICBpZiAoIW9iamVjdC0+aGFzUHJvcGVydHkobGV4aWNh
bEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSkgewotICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgSlNDZWxsOjpkZWxl
dGVQcm9wZXJ0eShvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7Ci0g
ICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAgICAKLWJv
b2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZW1vdmVQcm9wZXJ0eSh1aW50MzJfdCBv
YmplY3RJRCwgdW5zaWduZWQgcHJvcGVydHlOYW1lKQotewotICAgIGlmIChtX2luRGVzdHJveSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNPYmplY3QqIG9iamVjdCA9IG1fbG9jYWxP
YmplY3RzLmdldChvYmplY3RJRCk7Ci0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJlbW92ZVByb3BlcnR5OiBsb2NhbCBv
YmplY3QgJXUgZG9lc24ndCBleGlzdC4iLCBvYmplY3RJRCk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdl
YkZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Vk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
LSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0KLSAgICBKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmpl
Y3QocGx1Z2luV29ybGQoKSk7Ci0gICAgaWYgKCFvYmplY3QtPmhhc1Byb3BlcnR5KGxleGljYWxH
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBvYmplY3QtPm1l
dGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lKTsKLSAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aGFz
UHJvcGVydHkodWludDMyX3Qgb2JqZWN0SUQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSkKLXsKLSAgICBpZiAobV9pbkRlc3Ryb3kpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IEpTT2JqZWN0KiBvYmplY3QgPSBtX2xvY2FsT2JqZWN0cy5nZXQob2JqZWN0SUQpOwotICAgIGlm
ICghb2JqZWN0KSB7Ci0gICAgICAgIExPR19FUlJPUigiTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpoYXNQcm9wZXJ0eTogbG9jYWwgb2JqZWN0ICV1IGRvZXNuJ3QgZXhpc3QuIiwgb2JqZWN0
SUQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIEZyYW1lKiBmcmFt
ZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwotICAgIGlmICghZnJhbWUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKLSAg
ICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOwotCi0gICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBm
cmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpOwotICAgIGJvb2wgcmVz
dWx0ID0gb2JqZWN0LT5oYXNQcm9wZXJ0eShsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUpOwotICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1ib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aGFzUHJvcGVydHkodWludDMy
X3Qgb2JqZWN0SUQsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKLXsKLSAgICBpZiAobV9pbkRlc3Ry
b3kpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBtX2xv
Y2FsT2JqZWN0cy5nZXQob2JqZWN0SUQpOwotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIExP
R19FUlJPUigiTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpoYXNQcm9wZXJ0eTogbG9jYWwg
b2JqZWN0ICV1IGRvZXNuJ3QgZXhpc3QuIiwgb2JqZWN0SUQpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIAotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3
ZWJGcmFtZV0pOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7
Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2Jq
ZWN0KHBsdWdpbldvcmxkKCkpOwotICAgIGJvb2wgcmVzdWx0ID0gb2JqZWN0LT5oYXNQcm9wZXJ0
eShsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwotICAgIHNjb3BlLmNsZWFyRXhj
ZXB0aW9uKCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotICAgIAotYm9vbCBOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6Omhhc01ldGhvZCh1aW50MzJfdCBvYmplY3RJRCwgY29uc3QgSWRl
bnRpZmllciYgbWV0aG9kTmFtZSkKLXsKLSAgICBpZiAobV9pbkRlc3Ryb3kpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBtX2xvY2FsT2JqZWN0cy5nZXQo
b2JqZWN0SUQpOwotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIExPR19FUlJPUigiTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5OjpoYXNNZXRob2Q6IGxvY2FsIG9iamVjdCAldSBkb2Vzbid0
IGV4aXN0LiIsIG9iamVjdElEKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwotICAgIGlmICgh
ZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZNJiB2bSA9IHBsdWdpbldvcmxk
KCkudm0oKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpOwot
ICAgIEpTVmFsdWUgZnVuYyA9IG9iamVjdC0+Z2V0KGxleGljYWxHbG9iYWxPYmplY3QsIG1ldGhv
ZE5hbWUpOwotICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuICFmdW5jLmlz
VW5kZWZpbmVkKCk7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjplbnVt
ZXJhdGUodWludDMyX3Qgb2JqZWN0SUQsIGRhdGFfdCYgcmVzdWx0RGF0YSwgbWFjaF9tc2dfdHlw
ZV9udW1iZXJfdCYgcmVzdWx0TGVuZ3RoKQotewotICAgIGlmIChtX2luRGVzdHJveSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNPYmplY3QqIG9iamVjdCA9IG1fbG9jYWxPYmplY3Rz
LmdldChvYmplY3RJRCk7Ci0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmVudW1lcmF0ZTogbG9jYWwgb2JqZWN0ICV1IGRv
ZXNuJ3QgZXhpc3QuIiwgb2JqZWN0SUQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIAotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwot
ICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZNJiB2bSA9IHBs
dWdpbldvcmxkKCkudm0oKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldv
cmxkKCkpOwotIAotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXModm0sIFByb3Bl
cnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKLSAgICBv
YmplY3QtPmdldFByb3BlcnR5TmFtZXMobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
cywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7Ci0KLSAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlQXJyYXk+IGFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0
XSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnR5TmFtZXMuc2l6ZSgpOyBp
KyspIHsKLSAgICAgICAgdWludDY0X3QgbWV0aG9kTmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDY0X3Q+KF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcihwcm9wZXJ0eU5hbWVzW2ldLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpKTsKLQotICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OltOU051
bWJlciBudW1iZXJXaXRoTG9uZ0xvbmc6bWV0aG9kTmFtZV1dOwotICAgIH0KLQotICAgIE5TRGF0
YSAqZGF0YSA9IFtOU1Byb3BlcnR5TGlzdFNlcmlhbGl6YXRpb24gZGF0YVdpdGhQcm9wZXJ0eUxp
c3Q6YXJyYXkuZ2V0KCkgZm9ybWF0Ok5TUHJvcGVydHlMaXN0QmluYXJ5Rm9ybWF0X3YxXzAgb3B0
aW9uczowIGVycm9yOm51bGxwdHJdOwotICAgIEFTU0VSVChkYXRhKTsKLQotICAgIHJlc3VsdExl
bmd0aCA9IFtkYXRhIGxlbmd0aF07Ci0gICAgbWlnX2FsbG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8
dm1fYWRkcmVzc190Kj4oJnJlc3VsdERhdGEpLCByZXN1bHRMZW5ndGgpOwotCi0gICAgbWVtY3B5
KHJlc3VsdERhdGEsIFtkYXRhIGJ5dGVzXSwgcmVzdWx0TGVuZ3RoKTsKLQotICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgZ2V0
T2JqZWN0SUQoTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBwbHVnaW5JbnN0YW5jZVByb3h5
LCBKU09iamVjdCogb2JqZWN0LCB1aW50NjRfdCYgb2JqZWN0SUQpCi17Ci0gICAgSlNDOjpWTSYg
dm0gPSBvYmplY3QtPnZtKCk7Ci0gICAgaWYgKG9iamVjdC0+Y2xhc3NJbmZvKHZtKSAhPSBQcm94
eVJ1bnRpbWVPYmplY3Q6OmluZm8oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUHJv
eHlSdW50aW1lT2JqZWN0KiBydW50aW1lT2JqZWN0ID0gc3RhdGljX2Nhc3Q8UHJveHlSdW50aW1l
T2JqZWN0Kj4ob2JqZWN0KTsKLSAgICBQcm94eUluc3RhbmNlKiBpbnN0YW5jZSA9IHJ1bnRpbWVP
YmplY3QtPmdldEludGVybmFsUHJveHlJbnN0YW5jZSgpOwotICAgIGlmICghaW5zdGFuY2UpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChpbnN0YW5jZS0+aW5zdGFuY2VQcm94eSgp
ICE9IHBsdWdpbkluc3RhbmNlUHJveHkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG9i
amVjdElEID0gaW5zdGFuY2UtPm9iamVjdElEKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0gICAg
Ci12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6YWRkVmFsdWVUb0FycmF5KE5TTXV0
YWJsZUFycmF5ICphcnJheSwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsK
LSAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0KLSAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkg
ewotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OkAoU3RyaW5nVmFsdWVUeXBlKV07Ci0gICAgICAg
IFthcnJheSBhZGRPYmplY3Q6YXNTdHJpbmcodmFsdWUpLT52YWx1ZShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KV07Ci0gICAgfSBlbHNlIGlmICh2YWx1ZS5pc051bWJlcigpKSB7Ci0gICAgICAgIFthcnJh
eSBhZGRPYmplY3Q6QChEb3VibGVWYWx1ZVR5cGUpXTsKLSAgICAgICAgW2FycmF5IGFkZE9iamVj
dDpAKHZhbHVlLnRvTnVtYmVyKGxleGljYWxHbG9iYWxPYmplY3QpKV07Ci0gICAgfSBlbHNlIGlm
ICh2YWx1ZS5pc0Jvb2xlYW4oKSkgewotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OkAoQm9vbFZh
bHVlVHlwZSldOwotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRo
Qm9vbDp2YWx1ZS50b0Jvb2xlYW4obGV4aWNhbEdsb2JhbE9iamVjdCldXTsKLSAgICB9IGVsc2Ug
aWYgKHZhbHVlLmlzTnVsbCgpKQotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OkAoTnVsbFZhbHVl
VHlwZSldOwotICAgIGVsc2UgaWYgKHZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgSlNPYmpl
Y3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgdWludDY0X3Qgb2JqZWN0SUQ7
Ci0gICAgICAgIGlmIChnZXRPYmplY3RJRCh0aGlzLCBvYmplY3QsIG9iamVjdElEKSkgewotICAg
ICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpAKE5QT2JqZWN0VmFsdWVUeXBlKV07Ci0gICAgICAg
ICAgICBbYXJyYXkgYWRkT2JqZWN0OkAob2JqZWN0SUQpXTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6QChKU09iamVjdFZhbHVlVHlwZSldOwotICAgICAg
ICAgICAgW2FycmF5IGFkZE9iamVjdDpAKG1fbG9jYWxPYmplY3RzLmlkRm9yT2JqZWN0KHZtLCBv
YmplY3QpKV07Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgW2FycmF5IGFkZE9iamVj
dDpAKFZvaWRWYWx1ZVR5cGUpXTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk6Om1hcnNoYWxWYWx1ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgZGF0YV90JiByZXN1bHREYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90JiBy
ZXN1bHRMZW5ndGgpCi17Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBhcnJheSA9IGFk
b3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwotICAgIAotICAgIGFkZFZhbHVl
VG9BcnJheShhcnJheS5nZXQoKSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwotCi0gICAg
TlNEYXRhICpkYXRhID0gW05TUHJvcGVydHlMaXN0U2VyaWFsaXphdGlvbiBkYXRhV2l0aFByb3Bl
cnR5TGlzdDphcnJheS5nZXQoKSBmb3JtYXQ6TlNQcm9wZXJ0eUxpc3RCaW5hcnlGb3JtYXRfdjFf
MCBvcHRpb25zOjAgZXJyb3I6bnVsbHB0cl07Ci0gICAgQVNTRVJUKGRhdGEpOwotICAgIAotICAg
IHJlc3VsdExlbmd0aCA9IGRhdGEubGVuZ3RoOwotICAgIG1pZ19hbGxvY2F0ZShyZWludGVycHJl
dF9jYXN0PHZtX2FkZHJlc3NfdCo+KCZyZXN1bHREYXRhKSwgcmVzdWx0TGVuZ3RoKTsKLSAgICAK
LSAgICBtZW1jcHkocmVzdWx0RGF0YSwgZGF0YS5ieXRlcywgcmVzdWx0TGVuZ3RoKTsKLX0KLQot
UmV0YWluUHRyPE5TRGF0YT4gTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjptYXJzaGFsVmFs
dWVzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBBcmdMaXN0JiBh
cmdzKQotewotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gYXJyYXkgPSBhZG9wdE5TKFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBhcmdzLnNpemUoKTsgaSsrKQotICAgICAgICBhZGRWYWx1ZVRvQXJyYXkoYXJyYXkuZ2V0
KCksIGxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3MuYXQoaSkpOwotCi0gICAgTlNEYXRhICpkYXRh
ID0gW05TUHJvcGVydHlMaXN0U2VyaWFsaXphdGlvbiBkYXRhV2l0aFByb3BlcnR5TGlzdDphcnJh
eS5nZXQoKSBmb3JtYXQ6TlNQcm9wZXJ0eUxpc3RCaW5hcnlGb3JtYXRfdjFfMCBvcHRpb25zOjAg
ZXJyb3I6bnVsbHB0cl07Ci0gICAgQVNTRVJUKGRhdGEpOwotCi0gICAgcmV0dXJuIGRhdGE7Ci19
ICAgIAotCi1ib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZGVtYXJzaGFsVmFsdWVG
cm9tQXJyYXkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIE5TQXJyYXkgKmFy
cmF5LCBOU1VJbnRlZ2VyJiBpbmRleCwgSlNWYWx1ZSYgcmVzdWx0KQotewotICAgIGlmIChpbmRl
eCA9PSBbYXJyYXkgY291bnRdKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgICAKLSAgICBpbnQgdHlwZSA9IFtbYXJyYXkgb2JqZWN0QXRJbmRleDppbmRleCsrXSBpbnRW
YWx1ZV07Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgVm9pZFZhbHVlVHlwZToK
LSAgICAgICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgY2FzZSBOdWxsVmFsdWVUeXBlOgotICAgICAgICAgICAgcmVzdWx0ID0g
anNOdWxsKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBCb29sVmFs
dWVUeXBlOgotICAgICAgICAgICAgcmVzdWx0ID0ganNCb29sZWFuKFtbYXJyYXkgb2JqZWN0QXRJ
bmRleDppbmRleCsrXSBib29sVmFsdWVdKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBjYXNlIERvdWJsZVZhbHVlVHlwZToKLSAgICAgICAgICAgIHJlc3VsdCA9IGpzTnVtYmVy
KFtbYXJyYXkgb2JqZWN0QXRJbmRleDppbmRleCsrXSBkb3VibGVWYWx1ZV0pOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgU3RyaW5nVmFsdWVUeXBlOiB7Ci0gICAgICAg
ICAgICBOU1N0cmluZyAqc3RyaW5nID0gW2FycmF5IG9iamVjdEF0SW5kZXg6aW5kZXgrK107Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc3VsdCA9IGpzU3RyaW5nKGxleGljYWxHbG9iYWxP
YmplY3QtPnZtKCksIFN0cmluZyhzdHJpbmcpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgSlNPYmplY3RWYWx1ZVR5cGU6IHsKLSAgICAgICAgICAg
IHVpbnQzMl90IG9iamVjdElEID0gW1thcnJheSBvYmplY3RBdEluZGV4OmluZGV4KytdIGludFZh
bHVlXTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmVzdWx0ID0gbV9sb2NhbE9iamVjdHMu
Z2V0KG9iamVjdElEKTsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQpOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBOUE9iamVjdFZhbHVlVHlwZTog
ewotICAgICAgICAgICAgdWludDMyX3Qgb2JqZWN0SUQgPSBbW2FycmF5IG9iamVjdEF0SW5kZXg6
aW5kZXgrK10gaW50VmFsdWVdOwotCi0gICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtt
X3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKLSAgICAgICAgICAgIGlmICghZnJhbWUpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWZy
YW1lLT5zY3JpcHQoKS5jYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBhdXRvIHJvb3RP
YmplY3QgPSBmcmFtZS0+c2NyaXB0KCkuY3JlYXRlUm9vdE9iamVjdCgoX19icmlkZ2Ugdm9pZCop
bV9wbHVnaW5WaWV3KTsKLSAgICAgICAgICAgIHJlc3VsdCA9IFByb3h5SW5zdGFuY2U6OmNyZWF0
ZShXVEZNb3ZlKHJvb3RPYmplY3QpLCB0aGlzLCBvYmplY3RJRCktPmNyZWF0ZVJ1bnRpbWVPYmpl
Y3QobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1KU1ZhbHVlIE5ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eTo6ZGVtYXJzaGFsVmFsdWUoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIGNvbnN0IGNoYXIqIHZhbHVlRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1i
ZXJfdCB2YWx1ZUxlbmd0aCkKLXsKLSAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhID0gYWRvcHRO
UyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlc05vQ29weToodm9pZCopdmFsdWVEYXRhIGxl
bmd0aDp2YWx1ZUxlbmd0aCBmcmVlV2hlbkRvbmU6Tk9dKTsKLQotICAgIE5TQXJyYXkgKmFycmF5
ID0gW05TUHJvcGVydHlMaXN0U2VyaWFsaXphdGlvbiBwcm9wZXJ0eUxpc3RXaXRoRGF0YTpkYXRh
LmdldCgpIG9wdGlvbnM6TlNQcm9wZXJ0eUxpc3RJbW11dGFibGUgZm9ybWF0Om51bGxwdHIgZXJy
b3I6bnVsbHB0cl07Ci0KLSAgICBOU1VJbnRlZ2VyIHBvc2l0aW9uID0gMDsKLSAgICBKU1ZhbHVl
IHZhbHVlOwotICAgIGJvb2wgcmVzdWx0ID0gZGVtYXJzaGFsVmFsdWVGcm9tQXJyYXkobGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJyYXksIHBvc2l0aW9uLCB2YWx1ZSk7Ci0gICAgQVNTRVJUX1VOVVNF
RChyZXN1bHQsIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXZvaWQgTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5OjpkZW1hcnNoYWxWYWx1ZXMoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIGRhdGFfdCB2YWx1ZXNEYXRhLCBtYWNoX21zZ190eXBlX251bWJl
cl90IHZhbHVlc0xlbmd0aCwgTWFya2VkQXJndW1lbnRCdWZmZXJCYXNlJiByZXN1bHQpCi17Ci0g
ICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRX
aXRoQnl0ZXNOb0NvcHk6dmFsdWVzRGF0YSBsZW5ndGg6dmFsdWVzTGVuZ3RoIGZyZWVXaGVuRG9u
ZTpOT10pOwotCi0gICAgTlNBcnJheSAqYXJyYXkgPSBbTlNQcm9wZXJ0eUxpc3RTZXJpYWxpemF0
aW9uIHByb3BlcnR5TGlzdFdpdGhEYXRhOmRhdGEuZ2V0KCkgb3B0aW9uczpOU1Byb3BlcnR5TGlz
dEltbXV0YWJsZSBmb3JtYXQ6bnVsbHB0ciBlcnJvcjpudWxscHRyXTsKLQotICAgIE5TVUludGVn
ZXIgcG9zaXRpb24gPSAwOwotICAgIEpTVmFsdWUgdmFsdWU7Ci0gICAgd2hpbGUgKGRlbWFyc2hh
bFZhbHVlRnJvbUFycmF5KGxleGljYWxHbG9iYWxPYmplY3QsIGFycmF5LCBwb3NpdGlvbiwgdmFs
dWUpKQotICAgICAgICByZXN1bHQuYXBwZW5kKHZhbHVlKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6OnJldGFpbkxvY2FsT2JqZWN0KEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LXsKLSAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkgfHwgdmFsdWUuaW5oZXJpdHM8UHJveHlSdW50
aW1lT2JqZWN0Pih2YWx1ZS5nZXRPYmplY3QoKS0+dm0oKSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fbG9jYWxPYmplY3RzLnJldGFpbihhc09iamVjdCh2YWx1ZSkpOwotfQotCi12b2lkIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6cmVsZWFzZUxvY2FsT2JqZWN0KEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLXsKLSAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkgfHwgdmFsdWUuaW5oZXJpdHM8
UHJveHlSdW50aW1lT2JqZWN0Pih2YWx1ZS5nZXRPYmplY3QoKS0+dm0oKSkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fbG9jYWxPYmplY3RzLnJlbGVhc2UoYXNPYmplY3QodmFsdWUpKTsKLX0K
LQotUmVmUHRyPEluc3RhbmNlPiBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmNyZWF0ZUJp
bmRpbmdzSW5zdGFuY2UoUmVmPFJvb3RPYmplY3Q+JiYgcm9vdE9iamVjdCkKLXsKLSAgICB1aW50
MzJfdCByZXF1ZXN0SUQgPSBuZXh0UmVxdWVzdElEKCk7Ci0gICAgCi0gICAgaWYgKF9XS1BIR2V0
U2NyaXB0YWJsZU5QT2JqZWN0KG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0KCksIG1fcGx1Z2luSUQs
IHJlcXVlc3RJRCkgIT0gS0VSTl9TVUNDRVNTKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIGF1dG8gcmVwbHkgPSB3YWl0Rm9yUmVwbHk8R2V0U2NyaXB0YWJsZU5QT2JqZWN0UmVwbHk+
KHJlcXVlc3RJRCk7Ci0gICAgaWYgKCFyZXBseSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBpZiAoIXJlcGx5LT5tX29iamVjdElEKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIC8vIFNpbmNlIHRoZSByZXBseSB3YXMgbm9uLW51bGwsICJ0aGlzIiBpcyBzdGlsbCBhIHZh
bGlkIHBvaW50ZXIuCi0gICAgcmV0dXJuIFByb3h5SW5zdGFuY2U6OmNyZWF0ZShXVEZNb3ZlKHJv
b3RPYmplY3QpLCB0aGlzLCByZXBseS0+bV9vYmplY3RJRCk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5OjphZGRJbnN0YW5jZShQcm94eUluc3RhbmNlKiBpbnN0YW5jZSkK
LXsKLSAgICBBU1NFUlQoIW1faW5zdGFuY2VzLmNvbnRhaW5zKGluc3RhbmNlKSk7Ci0gICAgCi0g
ICAgbV9pbnN0YW5jZXMuYWRkKGluc3RhbmNlKTsKLX0KLSAgICAKLXZvaWQgTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5OjpyZW1vdmVJbnN0YW5jZShQcm94eUluc3RhbmNlKiBpbnN0YW5jZSkK
LXsKLSAgICBBU1NFUlQobV9pbnN0YW5jZXMuY29udGFpbnMoaW5zdGFuY2UpKTsKLSAgICAKLSAg
ICBtX2luc3RhbmNlcy5yZW1vdmUoaW5zdGFuY2UpOwotfQotIAotdm9pZCBOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OndpbGxDYWxsUGx1Z2luRnVuY3Rpb24oKQotewotICAgIG1fcGx1Z2lu
RnVuY3Rpb25DYWxsRGVwdGgrKzsKLX0KLSAgICAKLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5OjpkaWRDYWxsUGx1Z2luRnVuY3Rpb24oYm9vbCYgc3RvcHBlZCkKLXsKLSAgICBBU1NF
UlQobV9wbHVnaW5GdW5jdGlvbkNhbGxEZXB0aCA+IDApOwotICAgIG1fcGx1Z2luRnVuY3Rpb25D
YWxsRGVwdGgtLTsKLSAgICAKLSAgICAvLyBJZiAtc3RvcCB3YXMgY2FsbGVkIHdoaWxlIHdlIHdl
cmUgY2FsbGluZyBpbnRvIGEgcGx1Zy1pbiBmdW5jdGlvbiwgYW5kIHdlJ3JlIG5vIGxvbmdlcgot
ICAgIC8vIGluc2lkZSBhIHBsdWctaW4gZnVuY3Rpb24sIHN0b3Agbm93LgotICAgIGlmICghbV9w
bHVnaW5GdW5jdGlvbkNhbGxEZXB0aCAmJiBtX3Nob3VsZFN0b3BTb29uKSB7Ci0gICAgICAgIG1f
c2hvdWxkU3RvcFNvb24gPSBmYWxzZTsKLSAgICAgICAgW21fcGx1Z2luVmlldyBzdG9wXTsKLSAg
ICAgICAgc3RvcHBlZCA9IHRydWU7Ci0gICAgfQotfQotICAgIAotYm9vbCBOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OnNob3VsZFN0b3AoKQotewotICAgIGlmIChtX3BsdWdpbkZ1bmN0aW9u
Q2FsbERlcHRoKSB7Ci0gICAgICAgIG1fc2hvdWxkU3RvcFNvb24gPSB0cnVlOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi11aW50MzJf
dCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Om5leHRSZXF1ZXN0SUQoKQotewotICAgIHVp
bnQzMl90IHJlcXVlc3RJRCA9ICsrbV9jdXJyZW50UmVxdWVzdElEOwotICAgIAotICAgIC8vIFdl
IGRvbid0IHdhbnQgdG8gcmV0dXJuIHRoZSBIYXNoTWFwIGVtcHR5L2RlbGV0ZWQgInNwZWNpYWwg
a2V5cyIKLSAgICBpZiAocmVxdWVzdElEID09IDAgfHwgcmVxdWVzdElEID09IHN0YXRpY19jYXN0
PHVpbnQzMl90PigtMSkpCi0gICAgICAgIHJldHVybiBuZXh0UmVxdWVzdElEKCk7Ci0gICAgCi0g
ICAgcmV0dXJuIHJlcXVlc3RJRDsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk6OmludmFsaWRhdGVSZWN0KGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHdpZHRoLCBkb3Vi
bGUgaGVpZ2h0KQotewotICAgIEFTU0VSVChtX3BsdWdpblZpZXcpOwotICAgIAotICAgIG1fcGx1
Z2luSXNXYWl0aW5nRm9yRHJhdyA9IHRydWU7Ci0gICAgW21fcGx1Z2luVmlldyBpbnZhbGlkYXRl
UGx1Z2luQ29udGVudFJlY3Q6TlNNYWtlUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KV07Ci19Ci0K
LXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpkaWREcmF3KCkKLXsKLSAgICBpZiAo
IW1fcGx1Z2luSXNXYWl0aW5nRm9yRHJhdykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1f
cGx1Z2luSXNXYWl0aW5nRm9yRHJhdyA9IGZhbHNlOwotICAgIF9XS1BIUGx1Z2luSW5zdGFuY2VE
aWREcmF3KG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0KCksIG1fcGx1Z2luSUQpOwotfQotICAgIAot
Ym9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmdldENvb2tpZXMoZGF0YV90IHVybERh
dGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgdXJsTGVuZ3RoLCBkYXRhX3QmIGNvb2tpZXNEYXRh
LCBtYWNoX21zZ190eXBlX251bWJlcl90JiBjb29raWVzTGVuZ3RoKQotewotICAgIEFTU0VSVCht
X3BsdWdpblZpZXcpOwotICAgIAotICAgIE5TVVJMICp1cmwgPSBbbV9wbHVnaW5WaWV3IFVSTFdp
dGhDU3RyaW5nOnVybERhdGFdOwotICAgIGlmICghdXJsKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCi0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFt
ZV0pKSB7Ci0gICAgICAgIGF1dG8qIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAg
ICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAot
ICAgICAgICBhdXRvKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKTsKLSAgICAgICAgaWYgKCFwYWdl
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFN0cmluZyBjb29raWVTdHJp
bmcgPSBwYWdlLT5jb29raWVKYXIoKS5jb29raWVzKCpkb2N1bWVudCwgdXJsKTsKLSAgICAgICAg
V1RGOjpDU3RyaW5nIGNvb2tpZVN0cmluZ1VURjggPSBjb29raWVTdHJpbmcudXRmOCgpOwotICAg
ICAgICBpZiAoY29va2llU3RyaW5nVVRGOC5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgCi0gICAgICAgIGNvb2tpZXNMZW5ndGggPSBjb29raWVTdHJpbmdVVEY4
Lmxlbmd0aCgpOwotICAgICAgICBtaWdfYWxsb2NhdGUocmVpbnRlcnByZXRfY2FzdDx2bV9hZGRy
ZXNzX3QqPigmY29va2llc0RhdGEpLCBjb29raWVzTGVuZ3RoKTsKLSAgICAgICAgbWVtY3B5KGNv
b2tpZXNEYXRhLCBjb29raWVTdHJpbmdVVEY4LmRhdGEoKSwgY29va2llc0xlbmd0aCk7Ci0gICAg
ICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0gICAgCi1ib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c2V0Q29va2llcyhkYXRh
X3QgdXJsRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCB1cmxMZW5ndGgsIGRhdGFfdCBjb29r
aWVzRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCBjb29raWVzTGVuZ3RoKQotewotICAgIEFT
U0VSVChtX3BsdWdpblZpZXcpOwotICAgIAotICAgIE5TVVJMICp1cmwgPSBbbV9wbHVnaW5WaWV3
IFVSTFdpdGhDU3RyaW5nOnVybERhdGFdOwotICAgIGlmICghdXJsKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZy
YW1lXSkpIHsKLSAgICAgICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgo
Y29va2llc0RhdGEsIGNvb2tpZXNMZW5ndGgpOwotICAgICAgICBpZiAoIWNvb2tpZVN0cmluZykK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBhdXRvKiBkb2N1bWVudCA9IGZy
YW1lLT5kb2N1bWVudCgpOwotICAgICAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIGF1dG8qIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpOwotICAg
ICAgICBpZiAoIXBhZ2UpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAg
ICAgICBwYWdlLT5jb29raWVKYXIoKS5zZXRDb29raWVzKCpkb2N1bWVudCwgdXJsLCBjb29raWVT
dHJpbmcpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRQcm94eShkYXRhX3Qg
dXJsRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCB1cmxMZW5ndGgsIGRhdGFfdCYgcHJveHlE
YXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90JiBwcm94eUxlbmd0aCkKLXsKLSAgICBBU1NFUlQo
bV9wbHVnaW5WaWV3KTsKLSAgICAKLSAgICBOU1VSTCAqdXJsID0gW21fcGx1Z2luVmlldyBVUkxX
aXRoQ1N0cmluZzp1cmxEYXRhXTsKLSAgICBpZiAoIXVybCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgVmVjdG9yPFByb3h5U2VydmVyPiBwcm94eVNlcnZlcnMgPSBwcm94eVNlcnZlcnNG
b3JVUkwodXJsKTsKLSAgICBXVEY6OkNTdHJpbmcgcHJveHlTdHJpbmdVVEY4ID0gdG9TdHJpbmco
cHJveHlTZXJ2ZXJzKS51dGY4KCk7Ci0KLSAgICBwcm94eUxlbmd0aCA9IHByb3h5U3RyaW5nVVRG
OC5sZW5ndGgoKTsKLSAgICBtaWdfYWxsb2NhdGUocmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNz
X3QqPigmcHJveHlEYXRhKSwgcHJveHlMZW5ndGgpOwotICAgIG1lbWNweShwcm94eURhdGEsIHBy
b3h5U3RyaW5nVVRGOC5kYXRhKCksIHByb3h5TGVuZ3RoKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLSAgICAKLWJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRBdXRoZW50
aWNhdGlvbkluZm8oZGF0YV90IHByb3RvY29sRGF0YSwgZGF0YV90IGhvc3REYXRhLCB1aW50MzJf
dCBwb3J0LCBkYXRhX3Qgc2NoZW1lRGF0YSwgZGF0YV90IHJlYWxtRGF0YSwgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCYgdXNl
cm5hbWVEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90JiB1c2VybmFtZUxlbmd0aCwgZGF0YV90
JiBwYXNzd29yZERhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QmIHBhc3N3b3JkTGVuZ3RoKQot
ewotICAgIFdURjo6Q1N0cmluZyB1c2VybmFtZTsKLSAgICBXVEY6OkNTdHJpbmcgcGFzc3dvcmQ7
Ci0gICAgCi0gICAgaWYgKCFXZWJLaXQ6OmdldEF1dGhlbnRpY2F0aW9uSW5mbyhwcm90b2NvbERh
dGEsIGhvc3REYXRhLCBwb3J0LCBzY2hlbWVEYXRhLCByZWFsbURhdGEsIHVzZXJuYW1lLCBwYXNz
d29yZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICB1c2VybmFtZUxlbmd0aCA9
IHVzZXJuYW1lLmxlbmd0aCgpOwotICAgIG1pZ19hbGxvY2F0ZShyZWludGVycHJldF9jYXN0PHZt
X2FkZHJlc3NfdCo+KCZ1c2VybmFtZURhdGEpLCB1c2VybmFtZUxlbmd0aCk7Ci0gICAgbWVtY3B5
KHVzZXJuYW1lRGF0YSwgdXNlcm5hbWUuZGF0YSgpLCB1c2VybmFtZUxlbmd0aCk7Ci0gICAgCi0g
ICAgcGFzc3dvcmRMZW5ndGggPSBwYXNzd29yZC5sZW5ndGgoKTsKLSAgICBtaWdfYWxsb2NhdGUo
cmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3QqPigmcGFzc3dvcmREYXRhKSwgcGFzc3dvcmRM
ZW5ndGgpOwotICAgIG1lbWNweShwYXNzd29yZERhdGEsIHBhc3N3b3JkLmRhdGEoKSwgcGFzc3dv
cmRMZW5ndGgpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6Y29udmVydFBvaW50KGRvdWJsZSBzb3VyY2VYLCBkb3VibGUgc291
cmNlWSwgTlBDb29yZGluYXRlU3BhY2Ugc291cmNlU3BhY2UsIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUmIGRlc3RYLCBkb3VibGUmIGRlc3RZ
LCBOUENvb3JkaW5hdGVTcGFjZSBkZXN0U3BhY2UpCi17Ci0gICAgQVNTRVJUKG1fcGx1Z2luVmll
dyk7Ci0KLSAgICByZXR1cm4gW21fcGx1Z2luVmlldyBjb252ZXJ0RnJvbVg6c291cmNlWCBhbmRZ
OnNvdXJjZVkgc3BhY2U6c291cmNlU3BhY2UgdG9YOiZkZXN0WCBhbmRZOiZkZXN0WSBzcGFjZTpk
ZXN0U3BhY2VdOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6cHJpdmF0
ZUJyb3dzaW5nTW9kZURpZENoYW5nZShib29sIGlzUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkKLXsK
LSAgICBfV0tQSFBsdWdpbkluc3RhbmNlUHJpdmF0ZUJyb3dzaW5nTW9kZURpZENoYW5nZShtX3Bs
dWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdpbklELCBpc1ByaXZhdGVCcm93c2luZ0VuYWJs
ZWQpOwotfQotCi1zdGF0aWMgU3RyaW5nJiBnbG9iYWxFeGNlcHRpb25TdHJpbmcoKQotewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGV4Y2VwdGlvblN0cmluZzsKLSAgICByZXR1
cm4gZXhjZXB0aW9uU3RyaW5nOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eTo6c2V0R2xvYmFsRXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXhjZXB0aW9uKQotewotICAgIGds
b2JhbEV4Y2VwdGlvblN0cmluZygpID0gZXhjZXB0aW9uOwotfQotCi12b2lkIE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KQotewotICAgIFZNJiB2bSA9IGxleGljYWxHbG9i
YWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotCi0gICAgaWYgKGdsb2JhbEV4Y2VwdGlvblN0cmluZygpLmlzTnVsbCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICAgICAg
dGhyb3dFeGNlcHRpb24obGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbEV4Y2VwdGlvblN0cmluZygpKSk7Ci0gICAgfQotCi0g
ICAgZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkgPSBTdHJpbmcoKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykgJiYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDk0ZDlmMGRkMjM2YTVjNjNjZTk1ZjAyYzkxMDVlMjE4YWVlMjBjNWMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTA5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2lmIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKQotCi0jaWZuZGVmIFByb3h5SW5z
dGFuY2VfaAotI2RlZmluZSBQcm94eUluc3RhbmNlX2gKLQotI2ltcG9ydCAiTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5LmgiCi0jaW1wb3J0ICJXZWJLaXRQbHVnaW5Ib3N0VHlwZXMuaCIKLSNp
bXBvcnQgPFdlYkNvcmUvQnJpZGdlSlNDLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL3J1bnRpbWVfcm9v
dC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgUHJveHlDbGFzczsKLSAgICAKLWNs
YXNzIFByb3h5SW5zdGFuY2UgOiBwdWJsaWMgSlNDOjpCaW5kaW5nczo6SW5zdGFuY2UgewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8UHJveHlJbnN0YW5jZT4gY3JlYXRlKFJlZjxKU0M6OkJpbmRp
bmdzOjpSb290T2JqZWN0PiYmIHJvb3RPYmplY3QsIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eSogaW5zdGFuY2VQcm94eSwgdWludDMyX3Qgb2JqZWN0SUQpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBQcm94eUluc3RhbmNlKFdURk1vdmUocm9vdE9iamVjdCksIGluc3Rh
bmNlUHJveHksIG9iamVjdElEKSk7Ci0gICAgfQotICAgIH5Qcm94eUluc3RhbmNlKCk7Ci0KLSAg
ICBKU0M6OkJpbmRpbmdzOjpNZXRob2QqIG1ldGhvZE5hbWVkKEpTQzo6UHJvcGVydHlOYW1lKTsK
LSAgICBKU0M6OkJpbmRpbmdzOjpGaWVsZCogZmllbGROYW1lZChKU0M6OlByb3BlcnR5TmFtZSk7
Ci0KLSAgICBKU0M6OkpTVmFsdWUgZmllbGRWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29u
c3QgSlNDOjpCaW5kaW5nczo6RmllbGQqKSBjb25zdDsKLSAgICBib29sIHNldEZpZWxkVmFsdWUo
SlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IEpTQzo6QmluZGluZ3M6OkZpZWxkKiwgSlNDOjpK
U1ZhbHVlKSBjb25zdDsKLSAgICAKLQotICAgIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSog
aW5zdGFuY2VQcm94eSgpIHsgcmV0dXJuIG1faW5zdGFuY2VQcm94eTsgfQotCi0gICAgdm9pZCBp
bnZhbGlkYXRlKCk7Ci0gICAgCi0gICAgdWludDMyX3Qgb2JqZWN0SUQoKSBjb25zdCB7IHJldHVy
biBtX29iamVjdElEOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIFByb3h5SW5zdGFuY2UoUmVmPEpT
Qzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+JiYsIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSos
IHVpbnQzMl90IG9iamVjdElEKTsKLQotICAgIHZpcnR1YWwgSlNDOjpCaW5kaW5nczo6UnVudGlt
ZU9iamVjdCogbmV3UnVudGltZU9iamVjdChKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0KLSAgICB2
aXJ0dWFsIEpTQzo6QmluZGluZ3M6OkNsYXNzKiBnZXRDbGFzcygpIGNvbnN0OwotCi0gICAgdmly
dHVhbCBKU0M6OkpTVmFsdWUgZ2V0TWV0aG9kKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Ci0gICAgdmlydHVhbCBKU0M6OkpTVmFsdWUgaW52b2tlTWV0aG9kKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSosIEpTQzo6UnVudGltZU1ldGhvZCopOwot
Ci0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW52b2tlRGVmYXVsdE1ldGhvZCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlIGludm9rZURlZmF1bHRNZXRob2QoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHND
b25zdHJ1Y3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSBpbnZva2VDb25zdHJ1
Y3QoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKiwgY29uc3QgSlNDOjpBcmdM
aXN0Jik7Ci0KLSAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSBkZWZhdWx0VmFsdWUoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6UHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7Ci0gICAgdmly
dHVhbCBKU0M6OkpTVmFsdWUgdmFsdWVPZihKU0M6OkpTR2xvYmFsT2JqZWN0KikgY29uc3Q7Ci0g
ICAgCi0gICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmKTsKLQotICAgIEpTQzo6SlNWYWx1ZSBzdHJpbmdW
YWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0KikgY29uc3Q7Ci0gICAgSlNDOjpKU1ZhbHVlIG51bWJl
clZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqKSBjb25zdDsKLSAgICBKU0M6OkpTVmFsdWUgYm9v
bGVhblZhbHVlKCkgY29uc3Q7Ci0gICAgCi0gICAgSlNDOjpKU1ZhbHVlIGludm9rZShKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqLCBJbnZva2VUeXBlLCB1aW50NjRfdCBpZGVu
dGlmaWVyLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VD4gd2FpdEZvclJlcGx5KHVpbnQzMl90IHJlcXVl
c3RJRCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGF1dG8gcmVwbHkgPSBtX2luc3RhbmNlUHJveHkt
PndhaXRGb3JSZXBseTxUPihyZXF1ZXN0SUQpOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgdGhl
IGluc3RhbmNlIHByb3h5IHdhcyBpbnZhbGlkYXRlZCwganVzdCByZXR1cm4gYSBudWxsIHJlcGx5
LgotICAgICAgICBpZiAoIW1faW5zdGFuY2VQcm94eSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHJlcGx5OwotICAgIH0KLQotICAgIE5ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eSogbV9pbnN0YW5jZVByb3h5OwotICAgIHVpbnQzMl90IG1f
b2JqZWN0SUQ7Ci0gICAgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIHN0ZDo6dW5pcXVlX3B0
cjxKU0M6OkJpbmRpbmdzOjpGaWVsZD4+IG1fZmllbGRzOwotICAgIEhhc2hNYXA8UmVmUHRyPFN0
cmluZ0ltcGw+LCBzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpCaW5kaW5nczo6TWV0aG9kPj4gbV9tZXRo
b2RzOwotfTsKLSAgICAKLX0KLQotI2VuZGlmIC8vIFByb3h5SW5zdGFuY2VfaAotI2VuZGlmIC8v
IFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDI5NWRkYmUyOGJiMDdlZWM5YTI0NTRkMGEwMGZlMmY2N2NjMzdiNTYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQorKysgL2Rldi9udWxs
CkBAIC0xLDQ2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2lmIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKSAmJiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLQotI2ltcG9ydCAiUHJveHlJbnN0YW5jZS5oIgotCi0jaW1wb3J0
ICJOZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5oIgotI2ltcG9ydCAiUHJveHlSdW50aW1lT2JqZWN0
LmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9FcnJvci5oPgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTR2xv
YmFsT2JqZWN0SW5saW5lcy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvUHJvcGVydHlOYW1l
QXJyYXkuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ29tbW9uVk0uaD4KLSNpbXBvcnQgPFdlYkNvcmUv
SWRlbnRpZmllclJlcC5oPgotI2ltcG9ydCA8V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgotI2ltcG9y
dCA8V2ViQ29yZS9ucHJ1bnRpbWVfaW1wbC5oPgotI2ltcG9ydCA8V2ViQ29yZS9ydW50aW1lX21l
dGhvZC5oPgotI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLWV4dGVybiAiQyIgewot
I2ltcG9ydCAiV2ViS2l0UGx1Z2luSG9zdC5oIgotfQotCi11c2luZyBuYW1lc3BhY2UgSlNDOwot
dXNpbmcgbmFtZXNwYWNlIEpTQzo6QmluZGluZ3M7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFByb3h5Q2xhc3MgOiBwdWJsaWMgSlNDOjpC
aW5kaW5nczo6Q2xhc3MgewotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIE1ldGhvZCogbWV0aG9kTmFt
ZWQoUHJvcGVydHlOYW1lLCBJbnN0YW5jZSopIGNvbnN0OwotICAgIHZpcnR1YWwgRmllbGQqIGZp
ZWxkTmFtZWQoUHJvcGVydHlOYW1lLCBJbnN0YW5jZSopIGNvbnN0OwotfTsKLQotTWV0aG9kKiBQ
cm94eUNsYXNzOjptZXRob2ROYW1lZChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBJbnN0YW5j
ZSogaW5zdGFuY2UpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFByb3h5SW5zdGFu
Y2UqPihpbnN0YW5jZSktPm1ldGhvZE5hbWVkKHByb3BlcnR5TmFtZSk7Ci19Ci0KLUZpZWxkKiBQ
cm94eUNsYXNzOjpmaWVsZE5hbWVkKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEluc3RhbmNl
KiBpbnN0YW5jZSkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHJveHlJbnN0YW5j
ZSo+KGluc3RhbmNlKS0+ZmllbGROYW1lZChwcm9wZXJ0eU5hbWUpOwotfQotCi1zdGF0aWMgUHJv
eHlDbGFzcyogcHJveHlDbGFzcygpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFByb3h5
Q2xhc3M+IHByb3h5Q2xhc3M7Ci0gICAgcmV0dXJuICZwcm94eUNsYXNzLmdldCgpOwotfQotICAg
IAotY2xhc3MgUHJveHlGaWVsZCA6IHB1YmxpYyBKU0M6OkJpbmRpbmdzOjpGaWVsZCB7Ci1wdWJs
aWM6Ci0gICAgUHJveHlGaWVsZCh1aW50NjRfdCBzZXJ2ZXJJZGVudGlmaWVyKQotICAgICAgICA6
IG1fc2VydmVySWRlbnRpZmllcihzZXJ2ZXJJZGVudGlmaWVyKQotICAgIHsKLSAgICB9Ci0gICAg
Ci0gICAgdWludDY0X3Qgc2VydmVySWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2VydmVy
SWRlbnRpZmllcjsgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgSlNWYWx1ZSB2YWx1ZUZyb21J
bnN0YW5jZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3RhbmNlKikgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIHNldFZhbHVlVG9JbnN0YW5jZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3Rh
bmNlKiwgSlNWYWx1ZSkgY29uc3Q7Ci0gICAgCi0gICAgdWludDY0X3QgbV9zZXJ2ZXJJZGVudGlm
aWVyOwotfTsKLQotSlNWYWx1ZSBQcm94eUZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZShKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgSW5zdGFuY2UqIGluc3RhbmNlKSBj
b25zdAotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBQcm94eUluc3RhbmNlKj4oaW5z
dGFuY2UpLT5maWVsZFZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXMpOwotfQotICAgIAot
Ym9vbCBQcm94eUZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIGNvbnN0IEluc3RhbmNlKiBpbnN0YW5jZSwgSlNWYWx1ZSB2YWx1ZSkg
Y29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUHJveHlJbnN0YW5jZSo+KGlu
c3RhbmNlKS0+c2V0RmllbGRWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzLCB2YWx1ZSk7
Ci19Ci0KLWNsYXNzIFByb3h5TWV0aG9kIDogcHVibGljIEpTQzo6QmluZGluZ3M6Ok1ldGhvZCB7
Ci1wdWJsaWM6Ci0gICAgUHJveHlNZXRob2QodWludDY0X3Qgc2VydmVySWRlbnRpZmllcikKLSAg
ICAgICAgOiBtX3NlcnZlcklkZW50aWZpZXIoc2VydmVySWRlbnRpZmllcikKLSAgICB7Ci0gICAg
fQotCi0gICAgdWludDY0X3Qgc2VydmVySWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Vy
dmVySWRlbnRpZmllcjsgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgaW50IG51bVBhcmFtZXRl
cnMoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLSAgICB1aW50NjRfdCBtX3NlcnZlcklkZW50aWZp
ZXI7Ci19OwotCi1Qcm94eUluc3RhbmNlOjpQcm94eUluc3RhbmNlKFJlZjxSb290T2JqZWN0PiYm
IHJvb3RPYmplY3QsIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSogaW5zdGFuY2VQcm94eSwg
dWludDMyX3Qgb2JqZWN0SUQpCi0gICAgOiBJbnN0YW5jZShXVEZNb3ZlKHJvb3RPYmplY3QpKQot
ICAgICwgbV9pbnN0YW5jZVByb3h5KGluc3RhbmNlUHJveHkpCi0gICAgLCBtX29iamVjdElEKG9i
amVjdElEKQotewotICAgIG1faW5zdGFuY2VQcm94eS0+YWRkSW5zdGFuY2UodGhpcyk7Ci19Ci0K
LVByb3h5SW5zdGFuY2U6On5Qcm94eUluc3RhbmNlKCkKLXsKLSAgICBpZiAoIW1faW5zdGFuY2VQ
cm94eSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1faW5zdGFuY2VQcm94eS0+cmVtb3Zl
SW5zdGFuY2UodGhpcyk7Ci0KLSAgICBpbnZhbGlkYXRlKCk7Ci19Ci0gICAgCi1SdW50aW1lT2Jq
ZWN0KiBQcm94eUluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0KQotewotICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0RE9NU3RydWN0
dXJlIHVzZXMgdGhlIHByb3RvdHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QuCi0g
ICAgcmV0dXJuIFByb3h5UnVudGltZU9iamVjdDo6Y3JlYXRlKGxleGljYWxHbG9iYWxPYmplY3Qt
PnZtKCksIFdlYkNvcmU6OmRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8UHJveHlSdW50aW1lT2Jq
ZWN0PihsZXhpY2FsR2xvYmFsT2JqZWN0KSwgKnRoaXMpOwotfQotCi1KU0M6OkJpbmRpbmdzOjpD
bGFzcyogUHJveHlJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBjb25zdAotewotICAgIHJldHVybiBwcm94
eUNsYXNzKCk7Ci19Ci0KLUpTVmFsdWUgUHJveHlJbnN0YW5jZTo6aW52b2tlKEpTQzo6SlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEludm9rZVR5cGUgdHlwZSwgdWludDY0X3QgaWRlbnRpZmllciwgY29uc3QgQXJnTGlzdCYgYXJn
cykKLXsKLSAgICBpZiAoIW1faW5zdGFuY2VQcm94eSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0KLSAgICBSZXRhaW5QdHI8TlNEYXRhPiBhcmd1bWVudHMobV9pbnN0YW5jZVByb3h5
LT5tYXJzaGFsVmFsdWVzKGxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3MpKTsKLQotICAgIHVpbnQz
Ml90IHJlcXVlc3RJRCA9IG1faW5zdGFuY2VQcm94eS0+bmV4dFJlcXVlc3RJRCgpOwotCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyBpKyspCi0gICAgICAgIG1faW5z
dGFuY2VQcm94eS0+cmV0YWluTG9jYWxPYmplY3QoYXJncy5hdChpKSk7Ci0KLSAgICBpZiAoX1dL
UEhOUE9iamVjdEludm9rZShtX2luc3RhbmNlUHJveHktPmhvc3RQcm94eSgpLT5wb3J0KCksIG1f
aW5zdGFuY2VQcm94eS0+cGx1Z2luSUQoKSwgcmVxdWVzdElELCBtX29iamVjdElELCB0eXBlLCBp
ZGVudGlmaWVyLCBzdGF0aWNfY2FzdDxjaGFyKj4oY29uc3RfY2FzdDx2b2lkKj4oW2FyZ3VtZW50
cy5nZXQoKSBieXRlc10pKSwgW2FyZ3VtZW50cy5nZXQoKSBsZW5ndGhdKSAhPSBLRVJOX1NVQ0NF
U1MpIHsKLSAgICAgICAgaWYgKG1faW5zdGFuY2VQcm94eSkgewotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICAgICAgbV9p
bnN0YW5jZVByb3h5LT5yZWxlYXNlTG9jYWxPYmplY3QoYXJncy5hdChpKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIAotICAgIGF1dG8gcmVw
bHkgPSB3YWl0Rm9yUmVwbHk8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpCb29sZWFuQW5k
RGF0YVJlcGx5PihyZXF1ZXN0SUQpOwotICAgIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6
bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGxleGljYWxHbG9iYWxPYmplY3QpOwotCi0g
ICAgaWYgKG1faW5zdGFuY2VQcm94eSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYXJncy5zaXplKCk7IGkrKykKLSAgICAgICAgICAgIG1faW5zdGFuY2VQcm94eS0+cmVsZWFz
ZUxvY2FsT2JqZWN0KGFyZ3MuYXQoaSkpOwotICAgIH0KLQotICAgIGlmICghcmVwbHkgfHwgIXJl
cGx5LT5tX3JldHVyblZhbHVlKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAK
LSAgICByZXR1cm4gbV9pbnN0YW5jZVByb3h5LT5kZW1hcnNoYWxWYWx1ZShsZXhpY2FsR2xvYmFs
T2JqZWN0LCByZWludGVycHJldF9jYXN0PGNoYXIqPihjb25zdF9jYXN0PHVuc2lnbmVkIGNoYXIq
PihDRkRhdGFHZXRCeXRlUHRyKHJlcGx5LT5tX3Jlc3VsdC5nZXQoKSkpKSwgQ0ZEYXRhR2V0TGVu
Z3RoKHJlcGx5LT5tX3Jlc3VsdC5nZXQoKSkpOwotfQotCi1jbGFzcyBQcm94eVJ1bnRpbWVNZXRo
b2QgZmluYWwgOiBwdWJsaWMgUnVudGltZU1ldGhvZCB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgQmFz
ZSA9IFJ1bnRpbWVNZXRob2Q7Ci0KLSAgICBzdGF0aWMgUHJveHlSdW50aW1lTWV0aG9kKiBjcmVh
dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZCogbWV0aG9k
KQotICAgIHsKLSAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgICAgICAv
LyBGSVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZSB1c2VzIHRoZSBwcm90b3R5cGUgb2Zm
IG9mIHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0Ci0gICAgICAgIC8vIGxleGljYWxHbG9iYWxPYmpl
Y3Qtdm0oKSBpcyBhbHNvIGxpa2VseSB3cm9uZy4KLSAgICAgICAgU3RydWN0dXJlKiBkb21TdHJ1
Y3R1cmUgPSBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFByb3h5UnVudGltZU1ldGhvZD4obGV4
aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgICAgIFByb3h5UnVudGltZU1ldGhvZCogcnVudGltZU1l
dGhvZCA9IG5ldyAoYWxsb2NhdGVDZWxsPFByb3h5UnVudGltZU1ldGhvZD4odm0uaGVhcCkpIFBy
b3h5UnVudGltZU1ldGhvZCh2bSwgZG9tU3RydWN0dXJlLCBtZXRob2QpOwotICAgICAgICBydW50
aW1lTWV0aG9kLT5maW5pc2hDcmVhdGlvbih2bSwgbmFtZSk7Ci0gICAgICAgIHJldHVybiBydW50
aW1lTWV0aG9kOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSW50ZXJuYWxGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotCi1wcml2YXRlOgot
ICAgIFByb3h5UnVudGltZU1ldGhvZChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCaW5k
aW5nczo6TWV0aG9kKiBtZXRob2QpCi0gICAgICAgIDogUnVudGltZU1ldGhvZCh2bSwgc3RydWN0
dXJlLCBtZXRob2QpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSwgbmFtZSk7Ci0gICAgICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0g
ICAgfQotfTsKLQotY29uc3QgQ2xhc3NJbmZvIFByb3h5UnVudGltZU1ldGhvZDo6c19pbmZvID0g
eyAiUHJveHlSdW50aW1lTWV0aG9kIiwgJlJ1bnRpbWVNZXRob2Q6OnNfaW5mbywgbnVsbHB0ciwg
bnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShQcm94eVJ1bnRpbWVNZXRob2QpIH07Ci0KLUpT
VmFsdWUgUHJveHlJbnN0YW5jZTo6Z2V0TWV0aG9kKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgTWV0aG9k
KiBtZXRob2QgPSBnZXRDbGFzcygpLT5tZXRob2ROYW1lZChwcm9wZXJ0eU5hbWUsIHRoaXMpOwot
ICAgIHJldHVybiBQcm94eVJ1bnRpbWVNZXRob2Q6OmNyZWF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpLCBtZXRob2Qp
OwotfQotCi1KU1ZhbHVlIFByb3h5SW5zdGFuY2U6Omludm9rZU1ldGhvZChKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNDOjpS
dW50aW1lTWV0aG9kKiBydW50aW1lTWV0aG9kKQotewotICAgIFZNJiB2bSA9IGxleGljYWxHbG9i
YWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotCi0gICAgaWYgKCFhc09iamVjdChydW50aW1lTWV0aG9kKS0+aW5oZXJpdHM8UHJveHlSdW50
aW1lTWV0aG9kPih2bSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgIkF0dGVtcHQgdG8gaW52b2tlIG5vbi1wbHVnLWluIG1ldGhvZCBv
biBwbHVnLWluIG9iamVjdC4iX3MpOwotCi0gICAgUHJveHlNZXRob2QqIG1ldGhvZCA9IHN0YXRp
Y19jYXN0PFByb3h5TWV0aG9kKj4ocnVudGltZU1ldGhvZC0+bWV0aG9kKCkpOwotICAgIEFTU0VS
VChtZXRob2QpOwotCi0gICAgcmV0dXJuIGludm9rZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUsIEludm9rZSwgbWV0aG9kLT5zZXJ2ZXJJZGVudGlmaWVyKCksIEFyZ0xpc3QoY2FsbEZy
YW1lKSk7Ci19Ci0KLWJvb2wgUHJveHlJbnN0YW5jZTo6c3VwcG9ydHNJbnZva2VEZWZhdWx0TWV0
aG9kKCkgY29uc3QKLXsKLSAgICBpZiAoIW1faW5zdGFuY2VQcm94eSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAotICAgIHVpbnQzMl90IHJlcXVlc3RJRCA9IG1faW5zdGFuY2VQcm94eS0+
bmV4dFJlcXVlc3RJRCgpOwotICAgIAotICAgIGlmIChfV0tQSE5QT2JqZWN0SGFzSW52b2tlRGVm
YXVsdE1ldGhvZChtX2luc3RhbmNlUHJveHktPmhvc3RQcm94eSgpLT5wb3J0KCksIG1faW5zdGFu
Y2VQcm94eS0+cGx1Z2luSUQoKSwgcmVxdWVzdElELCBtX29iamVjdElEKSAhPSBLRVJOX1NVQ0NF
U1MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBhdXRvIHJlcGx5ID0gd2FpdEZv
clJlcGx5PE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Qm9vbGVhblJlcGx5PihyZXF1ZXN0
SUQpOwotICAgIHJldHVybiByZXBseSAmJiByZXBseS0+bV9yZXN1bHQ7Ci19Ci0KLUpTVmFsdWUg
UHJveHlJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZChKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgcmV0dXJuIGludm9r
ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIEludm9rZURlZmF1bHQsIDAsIEFyZ0xp
c3QoY2FsbEZyYW1lKSk7Ci19Ci0KLWJvb2wgUHJveHlJbnN0YW5jZTo6c3VwcG9ydHNDb25zdHJ1
Y3QoKSBjb25zdAotewotICAgIGlmICghbV9pbnN0YW5jZVByb3h5KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCi0gICAgdWludDMyX3QgcmVxdWVzdElEID0gbV9pbnN0YW5jZVByb3h5LT5u
ZXh0UmVxdWVzdElEKCk7Ci0gICAgCi0gICAgaWYgKF9XS1BITlBPYmplY3RIYXNDb25zdHJ1Y3RN
ZXRob2QobV9pbnN0YW5jZVByb3h5LT5ob3N0UHJveHkoKS0+cG9ydCgpLCBtX2luc3RhbmNlUHJv
eHktPnBsdWdpbklEKCksIHJlcXVlc3RJRCwgbV9vYmplY3RJRCkgIT0gS0VSTl9TVUNDRVNTKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgYXV0byByZXBseSA9IHdhaXRGb3JSZXBs
eTxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkJvb2xlYW5SZXBseT4ocmVxdWVzdElEKTsK
LSAgICByZXR1cm4gcmVwbHkgJiYgcmVwbHktPm1fcmVzdWx0OwotfQotICAgIAotSlNWYWx1ZSBQ
cm94eUluc3RhbmNlOjppbnZva2VDb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBBcmdMaXN0JiBhcmdzKQotewot
ICAgIHJldHVybiBpbnZva2UobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBDb25zdHJ1
Y3QsIDAsIGFyZ3MpOwotfQotCi1KU1ZhbHVlIFByb3h5SW5zdGFuY2U6OmRlZmF1bHRWYWx1ZShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJlZmVycmVkUHJpbWl0aXZlVHlw
ZSBoaW50KSBjb25zdAotewotICAgIGlmIChoaW50ID09IFByZWZlclN0cmluZykKLSAgICAgICAg
cmV0dXJuIHN0cmluZ1ZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGlmIChoaW50ID09
IFByZWZlck51bWJlcikKLSAgICAgICAgcmV0dXJuIG51bWJlclZhbHVlKGxleGljYWxHbG9iYWxP
YmplY3QpOwotICAgIHJldHVybiB2YWx1ZU9mKGxleGljYWxHbG9iYWxPYmplY3QpOwotfQotCi1K
U1ZhbHVlIFByb3h5SW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0KSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgc29tZXRoaW5n
IHNlbnNpYmxlLgotICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGxleGljYWxHbG9iYWxPYmplY3Qt
PnZtKCkpOwotfQotCi1KU1ZhbHVlIFByb3h5SW5zdGFuY2U6Om51bWJlclZhbHVlKEpTR2xvYmFs
T2JqZWN0KikgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHNvbWV0aGluZyBzZW5z
aWJsZS4KLSAgICByZXR1cm4ganNOdW1iZXIoMCk7Ci19Ci0KLUpTVmFsdWUgUHJveHlJbnN0YW5j
ZTo6Ym9vbGVhblZhbHVlKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHNvbWV0
aGluZyBzZW5zaWJsZS4KLSAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKLX0KLQotSlNWYWx1
ZSBQcm94eUluc3RhbmNlOjp2YWx1ZU9mKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSBjb25zdAotewotICAgIHJldHVybiBzdHJpbmdWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKLX0KLQotdm9pZCBQcm94eUluc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgbmFtZUFycmF5KQot
ewotICAgIGlmICghbV9pbnN0YW5jZVByb3h5KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
dWludDMyX3QgcmVxdWVzdElEID0gbV9pbnN0YW5jZVByb3h5LT5uZXh0UmVxdWVzdElEKCk7Ci0g
ICAgCi0gICAgaWYgKF9XS1BITlBPYmplY3RFbnVtZXJhdGUobV9pbnN0YW5jZVByb3h5LT5ob3N0
UHJveHkoKS0+cG9ydCgpLCBtX2luc3RhbmNlUHJveHktPnBsdWdpbklEKCksIHJlcXVlc3RJRCwg
bV9vYmplY3RJRCkgIT0gS0VSTl9TVUNDRVNTKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
YXV0byByZXBseSA9IHdhaXRGb3JSZXBseTxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkJv
b2xlYW5BbmREYXRhUmVwbHk+KHJlcXVlc3RJRCk7Ci0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5Ojptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUobGV4aWNhbEdsb2JhbE9iamVj
dCk7Ci0gICAgaWYgKCFyZXBseSB8fCAhcmVwbHktPm1fcmV0dXJuVmFsdWUpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBOU0FycmF5ICphcnJheSA9IFtOU1Byb3BlcnR5TGlzdFNlcmlhbGl6
YXRpb24gcHJvcGVydHlMaXN0V2l0aERhdGE6KF9fYnJpZGdlIE5TRGF0YSAqKXJlcGx5LT5tX3Jl
c3VsdC5nZXQoKSBvcHRpb25zOk5TUHJvcGVydHlMaXN0SW1tdXRhYmxlIGZvcm1hdDpudWxscHRy
IGVycm9yOm51bGxwdHJdOwotICAgIAotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qt
PnZtKCk7Ci0gICAgZm9yIChOU051bWJlciAqbnVtYmVyIGluIGFycmF5KSB7Ci0gICAgICAgIElk
ZW50aWZpZXJSZXAqIGlkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PElkZW50aWZpZXJSZXAq
PihbbnVtYmVyIGxvbmdMb25nVmFsdWVdKTsKLSAgICAgICAgaWYgKCFJZGVudGlmaWVyUmVwOjpp
c1ZhbGlkKGlkZW50aWZpZXIpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYg
KGlkZW50aWZpZXItPmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIHN0ciA9
IGlkZW50aWZpZXItPnN0cmluZygpOwotICAgICAgICAgICAgbmFtZUFycmF5LmFkZChJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHN0
ciwgc3RybGVuKHN0cikpKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbmFtZUFycmF5
LmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBpZGVudGlmaWVyLT5udW1iZXIoKSkpOwotICAgIH0K
LX0KLQotTWV0aG9kKiBQcm94eUluc3RhbmNlOjptZXRob2ROYW1lZChQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lKQotewotICAgIFN0cmluZyBuYW1lKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkp
OwotICAgIGlmIChuYW1lLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IGlmICghbV9pbnN0YW5jZVByb3h5KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAg
ICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgYW4gZW50cnkgaW4gdGhlIG1hcCwgdXNlIGl0LgotICAg
IGF1dG8gZXhpc3RpbmdNYXBFbnRyeSA9IG1fbWV0aG9kcy5maW5kKG5hbWUuaW1wbCgpKTsKLSAg
ICBpZiAoZXhpc3RpbmdNYXBFbnRyeSAhPSBtX21ldGhvZHMuZW5kKCkpCi0gICAgICAgIHJldHVy
biBleGlzdGluZ01hcEVudHJ5LT52YWx1ZS5nZXQoKTsKLSAgICAKLSAgICB1aW50NjRfdCBtZXRo
b2ROYW1lID0gcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4oX05QTl9HZXRTdHJpbmdJZGVudGlm
aWVyKG5hbWUuYXNjaWkoKS5kYXRhKCkpKTsKLSAgICB1aW50MzJfdCByZXF1ZXN0SUQgPSBtX2lu
c3RhbmNlUHJveHktPm5leHRSZXF1ZXN0SUQoKTsKLSAgICAKLSAgICBpZiAoX1dLUEhOUE9iamVj
dEhhc01ldGhvZChtX2luc3RhbmNlUHJveHktPmhvc3RQcm94eSgpLT5wb3J0KCksIG1faW5zdGFu
Y2VQcm94eS0+cGx1Z2luSUQoKSwgcmVxdWVzdElELCBtX29iamVjdElELCBtZXRob2ROYW1lKSAh
PSBLRVJOX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIGF1dG8g
cmVwbHkgPSB3YWl0Rm9yUmVwbHk8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpCb29sZWFu
UmVwbHk+KHJlcXVlc3RJRCk7Ci0gICAgaWYgKCFyZXBseSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBpZiAoIXJlcGx5LT5tX3Jlc3VsdCAmJiAhbV9pbnN0YW5jZVByb3h5LT5ob3N0
UHJveHkoKS0+c2hvdWxkQ2FjaGVNaXNzaW5nUHJvcGVydGllc0FuZE1ldGhvZHMoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBBZGQgYSBuZXcgZW50cnkgdG8gdGhlIG1hcCB1
bmxlc3MgYW4gZW50cnkgd2FzIGFkZGVkIHdoaWxlIHdlIHdlcmUgaW4gd2FpdEZvclJlcGx5Lgot
ICAgIGF1dG8gbWFwQWRkUmVzdWx0ID0gbV9tZXRob2RzLmFkZChuYW1lLmltcGwoKSwgbnVsbHB0
cik7Ci0gICAgaWYgKG1hcEFkZFJlc3VsdC5pc05ld0VudHJ5ICYmIHJlcGx5LT5tX3Jlc3VsdCkK
LSAgICAgICAgbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG1ha2VVbmlxdWU8UHJveHlN
ZXRob2Q+KG1ldGhvZE5hbWUpOwotCi0gICAgcmV0dXJuIG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+
dmFsdWUuZ2V0KCk7Ci19Ci0KLUZpZWxkKiBQcm94eUluc3RhbmNlOjpmaWVsZE5hbWVkKFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgU3RyaW5nIG5hbWUocHJvcGVydHlOYW1lLnB1
YmxpY05hbWUoKSk7Ci0gICAgaWYgKG5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgaWYgKCFtX2luc3RhbmNlUHJveHkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIAotICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBlbnRyeSBpbiB0aGUgbWFwLCB1
c2UgaXQuCi0gICAgYXV0byBleGlzdGluZ01hcEVudHJ5ID0gbV9maWVsZHMuZmluZChuYW1lLmlt
cGwoKSk7Ci0gICAgaWYgKGV4aXN0aW5nTWFwRW50cnkgIT0gbV9maWVsZHMuZW5kKCkpCi0gICAg
ICAgIHJldHVybiBleGlzdGluZ01hcEVudHJ5LT52YWx1ZS5nZXQoKTsKLSAgICAKLSAgICB1aW50
NjRfdCBpZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4oX05QTl9HZXRTdHJp
bmdJZGVudGlmaWVyKG5hbWUuYXNjaWkoKS5kYXRhKCkpKTsKLSAgICB1aW50MzJfdCByZXF1ZXN0
SUQgPSBtX2luc3RhbmNlUHJveHktPm5leHRSZXF1ZXN0SUQoKTsKLSAgICAKLSAgICBpZiAoX1dL
UEhOUE9iamVjdEhhc1Byb3BlcnR5KG1faW5zdGFuY2VQcm94eS0+aG9zdFByb3h5KCktPnBvcnQo
KSwgbV9pbnN0YW5jZVByb3h5LT5wbHVnaW5JRCgpLCByZXF1ZXN0SUQsIG1fb2JqZWN0SUQsIGlk
ZW50aWZpZXIpICE9IEtFUk5fU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
Ci0gICAgYXV0byByZXBseSA9IHdhaXRGb3JSZXBseTxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk6OkJvb2xlYW5SZXBseT4ocmVxdWVzdElEKTsKLSAgICBpZiAoIXJlcGx5KQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBpZiAoIXJlcGx5LT5tX3Jlc3VsdCAmJiAhbV9pbnN0
YW5jZVByb3h5LT5ob3N0UHJveHkoKS0+c2hvdWxkQ2FjaGVNaXNzaW5nUHJvcGVydGllc0FuZE1l
dGhvZHMoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgLy8gQWRkIGEgbmV3
IGVudHJ5IHRvIHRoZSBtYXAgdW5sZXNzIGFuIGVudHJ5IHdhcyBhZGRlZCB3aGlsZSB3ZSB3ZXJl
IGluIHdhaXRGb3JSZXBseS4KLSAgICBhdXRvIG1hcEFkZFJlc3VsdCA9IG1fZmllbGRzLmFkZChu
YW1lLmltcGwoKSwgbnVsbHB0cik7Ci0gICAgaWYgKG1hcEFkZFJlc3VsdC5pc05ld0VudHJ5ICYm
IHJlcGx5LT5tX3Jlc3VsdCkKLSAgICAgICAgbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IG1ha2VVbmlxdWU8UHJveHlGaWVsZD4oaWRlbnRpZmllcik7Ci0gICAgcmV0dXJuIG1hcEFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBQcm94eUluc3Rh
bmNlOjpmaWVsZFZhbHVlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25z
dCBGaWVsZCogZmllbGQpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2luc3RhbmNlUHJveHkpCi0gICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIAotICAgIHVpbnQ2NF90IHNlcnZlcklkZW50
aWZpZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBQcm94eUZpZWxkKj4oZmllbGQpLT5zZXJ2ZXJJZGVu
dGlmaWVyKCk7Ci0gICAgdWludDMyX3QgcmVxdWVzdElEID0gbV9pbnN0YW5jZVByb3h5LT5uZXh0
UmVxdWVzdElEKCk7Ci0gICAgCi0gICAgaWYgKF9XS1BITlBPYmplY3RHZXRQcm9wZXJ0eShtX2lu
c3RhbmNlUHJveHktPmhvc3RQcm94eSgpLT5wb3J0KCksIG1faW5zdGFuY2VQcm94eS0+cGx1Z2lu
SUQoKSwgcmVxdWVzdElELCBtX29iamVjdElELCBzZXJ2ZXJJZGVudGlmaWVyKSAhPSBLRVJOX1NV
Q0NFU1MpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIAotICAgIGF1dG8gcmVw
bHkgPSB3YWl0Rm9yUmVwbHk8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpCb29sZWFuQW5k
RGF0YVJlcGx5PihyZXF1ZXN0SUQpOwotICAgIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6
bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGxleGljYWxHbG9iYWxPYmplY3QpOwotICAg
IGlmICghcmVwbHkgfHwgIXJlcGx5LT5tX3JldHVyblZhbHVlKQotICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICAKLSAgICByZXR1cm4gbV9pbnN0YW5jZVByb3h5LT5kZW1hcnNoYWxW
YWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCByZWludGVycHJldF9jYXN0PGNoYXIqPihjb25zdF9j
YXN0PHVuc2lnbmVkIGNoYXIqPihDRkRhdGFHZXRCeXRlUHRyKHJlcGx5LT5tX3Jlc3VsdC5nZXQo
KSkpKSwgQ0ZEYXRhR2V0TGVuZ3RoKHJlcGx5LT5tX3Jlc3VsdC5nZXQoKSkpOwotfQotICAgIAot
Ym9vbCBQcm94eUluc3RhbmNlOjpzZXRGaWVsZFZhbHVlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBjb25zdCBGaWVsZCogZmllbGQsIEpTVmFsdWUgdmFsdWUpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX2luc3RhbmNlUHJveHkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICB1aW50NjRfdCBzZXJ2ZXJJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgUHJveHlG
aWVsZCo+KGZpZWxkKS0+c2VydmVySWRlbnRpZmllcigpOwotICAgIHVpbnQzMl90IHJlcXVlc3RJ
RCA9IG1faW5zdGFuY2VQcm94eS0+bmV4dFJlcXVlc3RJRCgpOwotICAgIAotICAgIGRhdGFfdCB2
YWx1ZURhdGE7Ci0gICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCB2YWx1ZUxlbmd0aDsKLQotICAg
IG1faW5zdGFuY2VQcm94eS0+bWFyc2hhbFZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
LCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3RoKTsKLSAgICBtX2luc3RhbmNlUHJveHktPnJldGFpbkxv
Y2FsT2JqZWN0KHZhbHVlKTsKLSAgICBrZXJuX3JldHVybl90IGtyID0gX1dLUEhOUE9iamVjdFNl
dFByb3BlcnR5KG1faW5zdGFuY2VQcm94eS0+aG9zdFByb3h5KCktPnBvcnQoKSwgbV9pbnN0YW5j
ZVByb3h5LT5wbHVnaW5JRCgpLCByZXF1ZXN0SUQsIG1fb2JqZWN0SUQsIHNlcnZlcklkZW50aWZp
ZXIsIHZhbHVlRGF0YSwgdmFsdWVMZW5ndGgpOwotICAgIG1pZ19kZWFsbG9jYXRlKHJlaW50ZXJw
cmV0X2Nhc3Q8dm1fYWRkcmVzc190Pih2YWx1ZURhdGEpLCB2YWx1ZUxlbmd0aCk7Ci0gICAgaWYg
KG1faW5zdGFuY2VQcm94eSkKLSAgICAgICAgbV9pbnN0YW5jZVByb3h5LT5yZWxlYXNlTG9jYWxP
YmplY3QodmFsdWUpOwotICAgIGlmIChrciAhPSBLRVJOX1NVQ0NFU1MpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICB3YWl0Rm9yUmVwbHk8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpCb29sZWFuUmVwbHk+KHJlcXVlc3RJRCk7Ci0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5Ojptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUobGV4aWNhbEdsb2JhbE9iamVj
dCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHJveHlJbnN0YW5jZTo6aW52YWxpZGF0
ZSgpCi17Ci0gICAgQVNTRVJUKG1faW5zdGFuY2VQcm94eSk7Ci0gICAgCi0gICAgaWYgKE5ldHNj
YXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBtX2luc3RhbmNlUHJveHktPmhvc3RQcm94
eSgpKQotICAgICAgICBfV0tQSE5QT2JqZWN0UmVsZWFzZShob3N0UHJveHktPnBvcnQoKSwgbV9p
bnN0YW5jZVByb3h5LT5wbHVnaW5JRCgpLCBtX29iamVjdElEKTsKLSAgICBtX2luc3RhbmNlUHJv
eHkgPSBudWxscHRyOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVT
RShQTFVHSU5fSE9TVF9QUk9DRVNTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5UnVu
dGltZU9iamVjdC5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJv
eHlSdW50aW1lT2JqZWN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkY2M4NTk1
YmQ0NTcwOTQyM2E2MWE2Y2QxZTY0NzcyMjk4Y2ViYTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9I
b3N0ZWQvUHJveHlSdW50aW1lT2JqZWN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZiBVU0Uo
UExVR0lOX0hPU1RfUFJPQ0VTUykKLQotI2lmbmRlZiBQcm94eVJ1bnRpbWVPYmplY3RfaAotI2Rl
ZmluZSBQcm94eVJ1bnRpbWVPYmplY3RfaAotCi0jaW5jbHVkZSA8V2ViQ29yZS9KU0RPTUJpbmRp
bmcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL3J1bnRpbWVfb2JqZWN0Lmg+Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1jbGFzcyBQcm94eUluc3RhbmNlOwotCi1jbGFzcyBQcm94eVJ1bnRpbWVPYmpl
Y3QgZmluYWwgOiBwdWJsaWMgSlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdCB7Ci1wdWJsaWM6
Ci0gICAgdXNpbmcgQmFzZSA9IEpTQzo6QmluZGluZ3M6OlJ1bnRpbWVPYmplY3Q7Ci0KLSAgICBz
dGF0aWMgUHJveHlSdW50aW1lT2JqZWN0KiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFJlZjxQcm94eUluc3RhbmNlPiYmIGluc3RhbmNlKQotICAgIHsKLSAg
ICAgICAgUHJveHlSdW50aW1lT2JqZWN0KiBvYmplY3QgPSBuZXcgKEpTQzo6YWxsb2NhdGVDZWxs
PFByb3h5UnVudGltZU9iamVjdD4odm0uaGVhcCkpIFByb3h5UnVudGltZU9iamVjdCh2bSwgc3Ry
dWN0dXJlLCBXVEZNb3ZlKGluc3RhbmNlKSk7Ci0gICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRp
b24odm0pOwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLQotICAgIFByb3h5SW5zdGFu
Y2UqIGdldEludGVybmFsUHJveHlJbnN0YW5jZSgpIGNvbnN0OwotCi0gICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0KLXByaXZhdGU6Ci0gICAgUHJveHlSdW50
aW1lT2JqZWN0KEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZjxQcm94eUluc3RhbmNlPiYm
KTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLX07Ci0KLX0KLQotI2VuZGlm
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9z
dGVkL1Byb3h5UnVudGltZU9iamVjdC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdp
bnMvSG9zdGVkL1Byb3h5UnVudGltZU9iamVjdC5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZWNhZTk5MGU0ODBiMjBlZDU1OGFiY2ZhNGNjZjZhNWZiYjhiODUyMy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eVJ1bnRpbWVPYmplY3QubW0KKysrIC9kZXYvbnVsbApA
QCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpZiBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykKLQotI2ltcG9ydCAiUHJveHlSdW50
aW1lT2JqZWN0LmgiCi0KLSNpbXBvcnQgIlByb3h5SW5zdGFuY2UuaCIKLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL09iamVjdFByb3RvdHlwZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotY29uc3QgQ2xhc3NJbmZvIFByb3h5UnVudGltZU9iamVjdDo6
c19pbmZvID0geyAiUHJveHlSdW50aW1lT2JqZWN0IiwgJlJ1bnRpbWVPYmplY3Q6OnNfaW5mbywg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShQcm94eVJ1bnRpbWVPYmplY3Qp
IH07Ci0KLVByb3h5UnVudGltZU9iamVjdDo6UHJveHlSdW50aW1lT2JqZWN0KFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxQcm94eUluc3RhbmNlPiYmIGluc3RhbmNlKQotICAgIDog
UnVudGltZU9iamVjdCh2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKGluc3RhbmNlKSkKLXsKLX0KLQot
dm9pZCBQcm94eVJ1bnRpbWVPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKLXsKLSAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKHZtLCAmc19pbmZv
KSk7Ci19Ci0KLVByb3h5SW5zdGFuY2UqIFByb3h5UnVudGltZU9iamVjdDo6Z2V0SW50ZXJuYWxQ
cm94eUluc3RhbmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHJveHlJbnN0
YW5jZSo+KGdldEludGVybmFsSW5zdGFuY2UoKSk7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJIb3N0ZWROZXRz
Y2FwZVBsdWdpblZpZXcuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVk
L1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBiNjBjMWU1YTRlNTNlNzRlMTg0MGJmNmM1Y2NlM2U0ZmJlMzY4OTViLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1BsdWdpbnMvSG9zdGVkL1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5oCisrKyAvZGV2
L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZiBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykKLQotI2ltcG9y
dCAiV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5oIgotI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtOwot
Y2xhc3MgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OwotY2xhc3MgU29mdHdhcmVDQVJlbmRl
cmVyOwotfQotCi1AaW50ZXJmYWNlIFdlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldyA6IFdlYkJh
c2VOZXRzY2FwZVBsdWdpblZpZXc8V2ViUGx1Z2luTWFudWFsTG9hZGVyPgotewotICAgIFJldGFp
blB0cjxOU0FycmF5PiBfYXR0cmlidXRlS2V5czsKLSAgICBSZXRhaW5QdHI8TlNBcnJheT4gX2F0
dHJpYnV0ZVZhbHVlczsKLSAgICAKLSAgICBSZXRhaW5QdHI8Q0FMYXllcj4gX3BsdWdpbkxheWVy
OwotICAgIEJPT0wgX2hvc3RzTGF5ZXJzSW5XaW5kb3dTZXJ2ZXI7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPFdlYktpdDo6U29mdHdhcmVDQVJlbmRlcmVyPiBfc29mdHdhcmVSZW5kZXJlcjsKLSAgICAK
LSAgICBOU1NpemUgX3ByZXZpb3VzU2l6ZTsKLSAgICBSZWZQdHI8V2ViS2l0OjpOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk+IF9wcm94eTsKLX0KLQotLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNS
ZWN0KXIKLSAgICAgIHBsdWdpblBhY2thZ2U6KFdlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSAqKXRo
ZVBsdWdpblBhY2thZ2UKLSAgICAgICAgICAgICAgICBVUkw6KE5TVVJMICopVVJMCi0gICAgICAg
ICAgICBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwKLSAgICAgICAgICAgTUlNRVR5cGU6KE5TU3Ry
aW5nICopTUlNRQotICAgICAgYXR0cmlidXRlS2V5czooTlNBcnJheSAqKWtleXMKLSAgICBhdHRy
aWJ1dGVWYWx1ZXM6KE5TQXJyYXkgKil2YWx1ZXMKLSAgICAgICBsb2FkTWFudWFsbHk6KEJPT0wp
bG9hZE1hbnVhbGx5Ci0gICAgICAgICAgICBlbGVtZW50OihSZWZQdHI8V2ViQ29yZTo6SFRNTFBs
dWdJbkVsZW1lbnQ+JiYpZWxlbWVudDsKLQotLSAodm9pZClwbHVnaW5Ib3N0RGllZDsKLS0gKENB
TGF5ZXIgKilwbHVnaW5MYXllcjsKLS0gKEJPT0wpZ2V0Rm9ybVZhbHVlOihOU1N0cmluZyAqKil2
YWx1ZTsKLS0gKHZvaWQpd2ViRnJhbWU6KFdlYkZyYW1lICopd2ViRnJhbWUgZGlkRmluaXNoTG9h
ZFdpdGhSZWFzb246KE5QUmVhc29uKXJlYXNvbjsKLS0gKHZvaWQpc2V0SG9zdHNMYXllcnNJbldp
bmRvd1NlcnZlcjooYm9vbClob3N0c0xheWVyc0luV2luZG93U2VydmVyOwotCi1AZW5kCi0KLSNl
bmRpZiAvLyBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3
Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVkTmV0
c2NhcGVQbHVnaW5WaWV3Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGMyNzdi
NWY0M2QxNTFiZGE0MTViZWM5YjU5ZDVmM2NjZmMwODVkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMv
SG9zdGVkL1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbQorKysgL2Rldi9udWxsCkBAIC0x
LDU2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2lmIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKSAmJiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKLQotI2ltcG9ydCAiV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3LmgiCi0K
LSNpbXBvcnQgIkhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtLmgiCi0jaW1wb3J0ICJOZXRzY2Fw
ZVBsdWdpbkhvc3RNYW5hZ2VyLmgiCi0jaW1wb3J0ICJOZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5o
IgotI2ltcG9ydCAiTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5LmgiCi0jaW1wb3J0ICJXZWJG
cmFtZUludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLmgi
Ci0jaW1wb3J0ICJXZWJVSURlbGVnYXRlLmgiCi0jaW1wb3J0ICJXZWJWaWV3LmgiCi0jaW1wb3J0
ICJXZWJWaWV3SW50ZXJuYWwuaCIKLQotI2ltcG9ydCA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5k
YXRpb24uaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVUaHJlYWRpbmcuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvQnJpZGdlSlNDLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
RnJhbWVWaWV3Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxQbHVnSW5FbGVtZW50Lmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL1JlbmRlckVtYmVkZGVkT2JqZWN0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Jl
c291cmNlRXJyb3IuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUNBTGF5ZXJFeHRyYXMuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUpJVE9wZXJhdGlvbnMuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvcnVudGltZV9yb290Lmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NvY29hL1F1YXJ0ekNvcmVTUEku
aD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvTWFpblRocmVhZC5o
PgotI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11
c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLSAgICAKLWNsYXNz
IFNvZnR3YXJlQ0FSZW5kZXJlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgZXhwbGljaXQgU29mdHdhcmVDQVJlbmRlcmVyKHVpbnQzMl90IGNvbnRleHRJRCkK
LSAgICAgICAgOiBtX2NvbnRleHQgeyBbQ0FDb250ZXh0IGxvY2FsQ29udGV4dF0gfQotICAgICAg
ICAsIG1fcmVuZGVyQ29udGV4dCB7IENBUmVuZGVyQ0dOZXcoMCkgfQotICAgIHsKLSAgICAgICAg
W21fY29udGV4dCBzZXRMYXllcjpbQ0FMYXllciBfd2ViX3JlbmRlckxheWVyV2l0aENvbnRleHRJ
RDpjb250ZXh0SURdXTsKLSAgICB9Ci0KLSAgICB+U29mdHdhcmVDQVJlbmRlcmVyKCkKLSAgICB7
Ci0gICAgICAgIENBUmVuZGVyQ0dEZXN0cm95KG1fcmVuZGVyQ29udGV4dCk7Ci0gICAgfQotCi0g
ICAgdm9pZCByZW5kZXIoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHUmVjdCByZWN0KQotICAgIHsK
LSAgICAgICAgQ0FSZW5kZXJVcGRhdGUqIHVwZGF0ZSA9IENBUmVuZGVyVXBkYXRlQmVnaW4obnVs
bHB0ciwgMCwgQ0FDdXJyZW50TWVkaWFUaW1lKCksIG51bGxwdHIsIDAsICZyZWN0KTsKLSAgICAg
ICAgQ0FSZW5kZXJVcGRhdGVBZGRDb250ZXh0KHVwZGF0ZSwgW21fY29udGV4dCByZW5kZXJDb250
ZXh0XSk7Ci0gICAgICAgIENBUmVuZGVyVXBkYXRlQWRkUmVjdCh1cGRhdGUsICZyZWN0KTsKLSAg
ICAgICAgQ0FSZW5kZXJDR1JlbmRlcihtX3JlbmRlckNvbnRleHQsIHVwZGF0ZSwgY29udGV4dCk7
Ci0gICAgICAgIENBUmVuZGVyVXBkYXRlRmluaXNoKHVwZGF0ZSk7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIFJldGFpblB0cjxDQUNvbnRleHQ+IG1fY29udGV4dDsKLSAgICBDQVJlbmRlckNHQ29u
dGV4dCogbV9yZW5kZXJDb250ZXh0OwotfTsKLQotfQotCi1leHRlcm4gIkMiIHsKLSNpbXBvcnQg
IldlYktpdFBsdWdpbkNsaWVudFNlcnZlci5oIgotI2ltcG9ydCAiV2ViS2l0UGx1Z2luSG9zdC5o
IgotfQotCi0jaWYgSEFWRShPVVRfT0ZfUFJPQ0VTU19MQVlFUl9IT1NUSU5HKQotQGludGVyZmFj
ZSBOU1dpbmRvdyAoRGV0YWlscykKLS0gKEJPT0wpX2hvc3RzTGF5ZXJzSW5XaW5kb3dTZXJ2ZXI7
Ci1AZW5kCi0jZW5kaWYKLQotQGltcGxlbWVudGF0aW9uIFdlYkhvc3RlZE5ldHNjYXBlUGx1Z2lu
VmlldwotCi0rICh2b2lkKWluaXRpYWxpemUKLXsKLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LSAgICBKU0M6OmluaXRpYWxpemUoKTsKLSAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7
Ci0gICAgV2ViQ29yZTo6cG9wdWxhdGVKSVRPcGVyYXRpb25zKCk7Ci0jZW5kaWYKLSAgICBzZW5k
VXNlckNoYW5nZU5vdGlmaWNhdGlvbnMoKTsKLX0KLQotLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNS
ZWN0KWZyYW1lCi0gICAgICBwbHVnaW5QYWNrYWdlOihXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2Ug
KilwbHVnaW5QYWNrYWdlCi0gICAgICAgICAgICAgICAgVVJMOihOU1VSTCAqKVVSTAotICAgICAg
ICAgICAgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMCi0gICAgICAgICAgIE1JTUVUeXBlOihOU1N0
cmluZyAqKU1JTUUKLSAgICAgIGF0dHJpYnV0ZUtleXM6KE5TQXJyYXkgKilrZXlzCi0gICAgYXR0
cmlidXRlVmFsdWVzOihOU0FycmF5ICopdmFsdWVzCi0gICAgICAgbG9hZE1hbnVhbGx5OihCT09M
KWxvYWRNYW51YWxseQotICAgICAgICAgICAgZWxlbWVudDooUmVmUHRyPFdlYkNvcmU6OkhUTUxQ
bHVnSW5FbGVtZW50PiYmKWVsZW1lbnQKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRXaXRoRnJh
bWU6ZnJhbWUgcGx1Z2luUGFja2FnZTpwbHVnaW5QYWNrYWdlIFVSTDpVUkwgYmFzZVVSTDpiYXNl
VVJMIE1JTUVUeXBlOk1JTUUgYXR0cmlidXRlS2V5czprZXlzIGF0dHJpYnV0ZVZhbHVlczp2YWx1
ZXMgbG9hZE1hbnVhbGx5OmxvYWRNYW51YWxseSBlbGVtZW50OldURk1vdmUoZWxlbWVudCldOwot
ICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICByZXR1cm4gc2Vs
ZjsKLX0gICAgCi0KLS0gKHZvaWQpaGFuZGxlTW91c2VNb3ZlZDooTlNFdmVudCAqKWV2ZW50Ci17
Ci0gICAgaWYgKF9pc1N0YXJ0ZWQgJiYgX3Byb3h5KQotICAgICAgICBfcHJveHktPm1vdXNlRXZl
bnQoc2VsZiwgZXZlbnQsIE5QQ29jb2FFdmVudE1vdXNlTW92ZWQpOwotfQotCi0tICh2b2lkKXNl
dEF0dHJpYnV0ZUtleXM6KE5TQXJyYXkgKilrZXlzIGFuZFZhbHVlczooTlNBcnJheSAqKXZhbHVl
cwotewotICAgIEFTU0VSVCghX2F0dHJpYnV0ZUtleXMpOwotICAgIEFTU0VSVCghX2F0dHJpYnV0
ZVZhbHVlcyk7Ci0gICAgCi0gICAgX2F0dHJpYnV0ZUtleXMgPSBhZG9wdE5TKFtrZXlzIGNvcHld
KTsKLSAgICBfYXR0cmlidXRlVmFsdWVzID0gYWRvcHROUyhbdmFsdWVzIGNvcHldKTsKLX0KLQot
LSAoQk9PTCl3aW5kb3dIb3N0c0xheWVyc0luV2luZG93U2VydmVyCi17Ci0jaWYgSEFWRShPVVRf
T0ZfUFJPQ0VTU19MQVlFUl9IT1NUSU5HKQotICAgIHJldHVybiBbW1tzZWxmIHdlYlZpZXddIHdp
bmRvd10gX2hvc3RzTGF5ZXJzSW5XaW5kb3dTZXJ2ZXJdOwotI2Vsc2UKLSAgICByZXR1cm4gZmFs
c2U7Ci0jZW5kaWYKLX0KLQotLSAoQk9PTCljcmVhdGVQbHVnaW4KLXsKLSAgICBBU1NFUlQoIV9w
cm94eSk7Ci0KLSAgICBOU1N0cmluZyAqdXNlckFnZW50ID0gW1tzZWxmIHdlYlZpZXddIHVzZXJB
Z2VudEZvclVSTDpfYmFzZVVSTC5nZXQoKV07Ci0gICAgQk9PTCBhY2NlbGVyYXRlZENvbXBvc2l0
aW5nRW5hYmxlZCA9IGZhbHNlOwotICAgIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkID0g
W1tbc2VsZiB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJs
ZWRdOwotICAgIF9ob3N0c0xheWVyc0luV2luZG93U2VydmVyID0gW3NlbGYgd2luZG93SG9zdHNM
YXllcnNJbldpbmRvd1NlcnZlcl07Ci0KLSAgICBfcHJveHkgPSBOZXRzY2FwZVBsdWdpbkhvc3RN
YW5hZ2VyOjpzaW5nbGV0b24oKS5pbnN0YW50aWF0ZVBsdWdpbihbX3BsdWdpblBhY2thZ2UuZ2V0
KCkgcGF0aF0sIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5Ib3N0QXJjaGl0ZWN0dXJlXSwg
W19wbHVnaW5QYWNrYWdlLmdldCgpIGJ1bmRsZUlkZW50aWZpZXJdLCBzZWxmLCBfTUlNRVR5cGUu
Z2V0KCksIF9hdHRyaWJ1dGVLZXlzLmdldCgpLCBfYXR0cmlidXRlVmFsdWVzLmdldCgpLCB1c2Vy
QWdlbnQsIF9zb3VyY2VVUkwuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21vZGUgPT0gTlBfRlVMTCwgX2lz
UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCwgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsIF9o
b3N0c0xheWVyc0luV2luZG93U2VydmVyKTsKLSAgICBpZiAoIV9wcm94eSkgCi0gICAgICAgIHJl
dHVybiBOTzsKLQotICAgIGlmIChfcHJveHktPnJlbmRlcmVyVHlwZSgpID09IFVzZVNvZnR3YXJl
UmVuZGVyZXIpCi0gICAgICAgIF9zb2Z0d2FyZVJlbmRlcmVyID0gbWFrZVVuaXF1ZTxTb2Z0d2Fy
ZUNBUmVuZGVyZXI+KF9wcm94eS0+cmVuZGVyQ29udGV4dElEKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgW3NlbGYgY3JlYXRlUGx1Z2luTGF5ZXJdOwotICAgIAotICAgIC8vIFVwZGF0ZSB0aGUgd2lu
ZG93IGZyYW1lLgotICAgIF9wcm94eS0+d2luZG93RnJhbWVDaGFuZ2VkKFtbc2VsZiB3aW5kb3dd
IGZyYW1lXSk7Ci0gICAgCi0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAodm9pZCljcmVhdGVQbHVn
aW5MYXllcgotewotICAgIEJPT0wgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQgPSBmYWxz
ZTsKLSAgICBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCA9IFtbW3NlbGYgd2ViVmlld10g
cHJlZmVyZW5jZXNdIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkXTsKLQotICAgIF9wbHVn
aW5MYXllciA9IFtDQUxheWVyIF93ZWJfcmVuZGVyTGF5ZXJXaXRoQ29udGV4dElEOl9wcm94eS0+
cmVuZGVyQ29udGV4dElEKCldOwotCi0gICAgaWYgKGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFi
bGVkICYmIF9wcm94eS0+cmVuZGVyZXJUeXBlKCkgPT0gVXNlQWNjZWxlcmF0ZWRDb21wb3NpdGlu
ZykgewotICAgICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBX
ZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcgYW5kIFdlYk5ldHNjYXBlUGx1Z2luVmlldy4KLSAg
ICAgICAgLy8gU2luY2UgdGhpcyBsYXllciBpc24ndCBnb2luZyB0byBiZSBpbnNlcnRlZCBpbnRv
IGEgdmlldywgd2UgbmVlZCB0byBjcmVhdGUgYW5vdGhlciBsYXllciBhbmQgZmxpcCBpdHMgZ2Vv
bWV0cnkKLSAgICAgICAgLy8gaW4gb3JkZXIgdG8gZ2V0IHRoZSBjb29yZGluYXRlIHN5c3RlbSBy
aWdodC4KLSAgICAgICAgUmV0YWluUHRyPENBTGF5ZXI+IHJlYWxQbHVnaW5MYXllciA9IFdURk1v
dmUoX3BsdWdpbkxheWVyKTsKLQotICAgICAgICBfcGx1Z2luTGF5ZXIgPSBhZG9wdE5TKFtbQ0FM
YXllciBhbGxvY10gaW5pdF0pOwotICAgICAgICBfcGx1Z2luTGF5ZXIuZ2V0KCkuYm91bmRzID0g
cmVhbFBsdWdpbkxheWVyLmdldCgpLmJvdW5kczsKLSAgICAgICAgX3BsdWdpbkxheWVyLmdldCgp
Lmdlb21ldHJ5RmxpcHBlZCA9IFlFUzsKLQotICAgICAgICByZWFsUGx1Z2luTGF5ZXIuZ2V0KCku
YXV0b3Jlc2l6aW5nTWFzayA9IGtDQUxheWVyV2lkdGhTaXphYmxlIHwga0NBTGF5ZXJIZWlnaHRT
aXphYmxlOwotICAgICAgICBbX3BsdWdpbkxheWVyLmdldCgpIGFkZFN1YmxheWVyOnJlYWxQbHVn
aW5MYXllci5nZXQoKV07Ci0KLSAgICAgICAgLy8gRWFnZXJseSBlbnRlciBjb21wb3NpdGluZyBt
b2RlLCBzaW5jZSB3ZSBrbm93IHdlJ2xsIG5lZWQgaXQuIFRoaXMgYXZvaWRzIGZpcmluZyBzZXRO
ZWVkc1N0eWxlUmVjYWxjKCkKLSAgICAgICAgLy8gZm9yIGlmcmFtZXMgdGhhdCBjb250YWluIGNv
bXBvc2l0ZWQgcGx1Z2lucyBhdCBiYWQgdGltZXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zOTAzMwotICAgICAgICBjb3JlKFtzZWxmIHdlYkZyYW1lXSktPnZpZXco
KS0+ZW50ZXJDb21wb3NpdGluZ01vZGUoKTsKLSAgICAgICAgW3NlbGYgZWxlbWVudF0tPmludmFs
aWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2Vs
Zi53YW50c0xheWVyID0gWUVTOwotfQotCi0tICh2b2lkKXNldEhvc3RzTGF5ZXJzSW5XaW5kb3dT
ZXJ2ZXI6KGJvb2wpaG9zdHNMYXllcnNJbldpbmRvd1NlcnZlcgotewotICAgIGlmIChfcHJveHkt
PnJlbmRlcmVyVHlwZSgpID09IFVzZVNvZnR3YXJlUmVuZGVyZXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFJldGFpblB0cjxDQUxheWVyPiBjdXJyZW50U3VwZXJsYXllciA9IFtfcGx1Z2luTGF5
ZXIgc3VwZXJsYXllcl07Ci0KLSAgICBfaG9zdHNMYXllcnNJbldpbmRvd1NlcnZlciA9IGhvc3Rz
TGF5ZXJzSW5XaW5kb3dTZXJ2ZXI7Ci0KLSAgICBbc2VsZiBjcmVhdGVQbHVnaW5MYXllcl07Ci0g
ICAgW3NlbGYgc2V0TGF5ZXI6Y3VycmVudFN1cGVybGF5ZXIuZ2V0KCldOwotfQotCi0vLyBGSVhN
RTogVGhpcyBtZXRob2QgaXMgYW4gaWRlYWwgY2FuZGlkYXRlIHRvIG1vdmUgdXAgdG8gdGhlIGJh
c2UgY2xhc3MKLS0gKENBTGF5ZXIgKilwbHVnaW5MYXllcgotewotICAgIHJldHVybiBfcGx1Z2lu
TGF5ZXIuZ2V0KCk7Ci19Ci0KLS0gKEJPT0wpZ2V0Rm9ybVZhbHVlOihOU1N0cmluZyAqKil2YWx1
ZQotewotICAgIC8vIEZJWE1FOiBXZSBjYW5ub3QgaW1wbGVtZW50IHRoaXMgbWV0aG9kIGZvciBu
b3cgYmVjYXVzZSBOUFBfR2V0VmFsdWUKLSAgICAvLyBpcyBub3QgY3VycmVudGx5IGV4cG9zZWQg
YnkgdGhlIHBsdWdpbiBob3N0LiBPbmNlIHdlIGhhdmUgYW4gSVBDIHJvdXRpbmUKLSAgICAvLyB3
aGljaCBhbGxvd3MgdXMgdG8gaW52b2tlIE5QUF9HZXRWYWx1ZSwgd2UgY291bGQgaW1wbGVtZW50
IHRoaXMgbWV0aG9kLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLSAodm9pZClzZXRMYXllcjoo
Q0FMYXllciAqKW5ld0xheWVyCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUg
c2FtZSBpbXBsZW1lbnRhdGlvbiBhcyBXZWJOZXRzY2FwZVBsdWdpblZpZXcgKGFuZCBtb3ZlIHRv
IHRoZSBiYXNlIGNsYXNzKS4KLSAgICBbc3VwZXIgc2V0TGF5ZXI6bmV3TGF5ZXJdOwotICAgIAot
ICAgIGlmIChfcGx1Z2luTGF5ZXIpCi0gICAgICAgIFtuZXdMYXllciBhZGRTdWJsYXllcjpfcGx1
Z2luTGF5ZXIuZ2V0KCldOwotfQotCi0tICh2b2lkKXByaXZhdGVCcm93c2luZ01vZGVEaWRDaGFu
Z2UKLXsKLSAgICBpZiAoX3Byb3h5KQotICAgICAgICBfcHJveHktPnByaXZhdGVCcm93c2luZ01v
ZGVEaWRDaGFuZ2UoX2lzUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk7Ci19Ci0KLS0gKHZvaWQpbG9h
ZFN0cmVhbQotewotfQotCi0tICh2b2lkKXVwZGF0ZUFuZFNldFdpbmRvdwotewotICAgIGlmICgh
X3Byb3h5KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gVGhlIGJhc2UgY29vcmRpbmF0
ZXMgb2YgYSB3aW5kb3cgYW5kIGl0J3MgY29udGVudFZpZXcgaGFwcGVuIHRvIGJlIHRoZSBlcXVh
bCBhdCBhIHVzZXJTcGFjZVNjYWxlRmFjdG9yCi0gICAgLy8gb2YgMS4gRm9yIG5vbi0xLjAgc2Nh
bGUgZmFjdG9ycyB0aGlzIGFzc3VtcHRpb24gaXMgZmFsc2UuCi0gICAgTlNWaWV3ICp3aW5kb3dD
b250ZW50VmlldyA9IFtbc2VsZiB3aW5kb3ddIGNvbnRlbnRWaWV3XTsKLSAgICBOU1JlY3QgYm91
bmRzSW5XaW5kb3cgPSBbc2VsZiBjb252ZXJ0UmVjdDpbc2VsZiBib3VuZHNdIHRvVmlldzp3aW5k
b3dDb250ZW50Vmlld107Ci0KLSAgICBOU1JlY3QgdmlzaWJsZVJlY3RJbldpbmRvdzsKLSAgICAK
LSAgICAvLyBDb3JlIEFuaW1hdGlvbiBwbHVnLWlucyBuZWVkIHRvIGJlIHVwZGF0ZWQgKHdpdGgg
YSAwLDAsMCwwIGNsaXBSZWN0KSB3aGVuCi0gICAgLy8gbW92ZWQgdG8gYSBiYWNrZ3JvdW5kIHRh
Yi4gV2UgZG9uJ3QgZG8gdGhpcyBmb3IgQ29yZSBHcmFwaGljcyBwbHVnLWlucyBhcwotICAgIC8v
IG9sZGVyIHZlcnNpb25zIG9mIEZsYXNoIGhhdmUgaGlzdG9yaWNhbCBXZWJLaXQtc3BlY2lmaWMg
Y29kZSB0aGF0IGlzbid0Ci0gICAgLy8gY29tcGF0aWJsZSB3aXRoIHRoaXMgYmVoYXZpb3IuICAg
IAotICAgIEJPT0wgc2hvdWxkQ2xpcE91dFBsdWdpbiA9IF9wbHVnaW5MYXllciAmJiBbc2VsZiBz
aG91bGRDbGlwT3V0UGx1Z2luXTsKLSAgICBpZiAoIXNob3VsZENsaXBPdXRQbHVnaW4pCi0gICAg
ICAgIHZpc2libGVSZWN0SW5XaW5kb3cgPSBbc2VsZiBhY3R1YWxWaXNpYmxlUmVjdEluV2luZG93
XTsKLSAgICBlbHNlCi0gICAgICAgIHZpc2libGVSZWN0SW5XaW5kb3cgPSBOU1plcm9SZWN0Owot
ICAgIAotICAgIC8vIEZsaXAgWSB0byBjb252ZXJ0IE5TV2luZG93IGNvb3JkaW5hdGVzIHRvIHRv
cC1sZWZ0LWJhc2VkIHdpbmRvdyBjb29yZGluYXRlcy4KLSAgICBmbG9hdCBib3JkZXJWaWV3SGVp
Z2h0ID0gW1tzZWxmIGN1cnJlbnRXaW5kb3ddIGZyYW1lXS5zaXplLmhlaWdodDsKLSAgICBib3Vu
ZHNJbldpbmRvdy5vcmlnaW4ueSA9IGJvcmRlclZpZXdIZWlnaHQgLSBOU01heFkoYm91bmRzSW5X
aW5kb3cpOwotICAgICAgICAKLSAgICBpZiAoIXNob3VsZENsaXBPdXRQbHVnaW4pCi0gICAgICAg
IHZpc2libGVSZWN0SW5XaW5kb3cub3JpZ2luLnkgPSBib3JkZXJWaWV3SGVpZ2h0IC0gTlNNYXhZ
KHZpc2libGVSZWN0SW5XaW5kb3cpOwotCi0gICAgX3ByZXZpb3VzU2l6ZSA9IGJvdW5kc0luV2lu
ZG93LnNpemU7Ci0gICAgCi0gICAgX3Byb3h5LT5yZXNpemUoYm91bmRzSW5XaW5kb3csIHZpc2li
bGVSZWN0SW5XaW5kb3cpOwotCi0gICAgYm9vbCBzaG91bGRIb3N0TGF5ZXJzSW5XaW5kb3dTZXJ2
ZXIgPSBbc2VsZiB3aW5kb3dIb3N0c0xheWVyc0luV2luZG93U2VydmVyXTsKLSAgICBpZiAoX2hv
c3RzTGF5ZXJzSW5XaW5kb3dTZXJ2ZXIgIT0gc2hvdWxkSG9zdExheWVyc0luV2luZG93U2VydmVy
KQotICAgICAgICBfcHJveHktPnNldFNob3VsZEhvc3RMYXllcnNJbldpbmRvd1NlcnZlcihzaG91
bGRIb3N0TGF5ZXJzSW5XaW5kb3dTZXJ2ZXIpOwotfQotCi0tICh2b2lkKXdpbmRvd0ZvY3VzQ2hh
bmdlZDooQk9PTCloYXNGb2N1cwotewotICAgIGlmIChfcHJveHkpCi0gICAgICAgIF9wcm94eS0+
d2luZG93Rm9jdXNDaGFuZ2VkKGhhc0ZvY3VzKTsKLX0KLQotLSAoQk9PTClzaG91bGRTdG9wCi17
Ci0gICAgaWYgKCFfcHJveHkpCi0gICAgICAgIHJldHVybiBZRVM7Ci0gICAgCi0gICAgcmV0dXJu
IF9wcm94eS0+c2hvdWxkU3RvcCgpOwotfQotCi0tICh2b2lkKWRlc3Ryb3lQbHVnaW4KLXsKLSAg
ICBpZiAoX3Byb3h5KSB7Ci0gICAgICAgIF9zb2Z0d2FyZVJlbmRlcmVyID0gbnVsbHB0cjsKLSAg
ICAgICAgX3Byb3h5LT5kZXN0cm95KCk7Ci0gICAgICAgIF9wcm94eSA9IG51bGxwdHI7Ci0gICAg
fQotICAgIAotICAgIF9wbHVnaW5MYXllciA9IDA7Ci19Ci0KLS0gKHZvaWQpc3RhcnRUaW1lcnMK
LXsKLSAgICBpZiAoX3Byb3h5KQotICAgICAgICBfcHJveHktPnN0YXJ0VGltZXJzKF9pc0NvbXBs
ZXRlbHlPYnNjdXJlZCk7Ci19Ci0KLS0gKHZvaWQpc3RvcFRpbWVycwotewotICAgIGlmIChfcHJv
eHkpCi0gICAgICAgIF9wcm94eS0+c3RvcFRpbWVycygpOwotfQotCi0tICh2b2lkKWZvY3VzQ2hh
bmdlZAotewotICAgIGlmIChfcHJveHkpCi0gICAgICAgIF9wcm94eS0+Zm9jdXNDaGFuZ2VkKF9o
YXNGb2N1cyk7Ci19Ci0KLS0gKHZvaWQpd2luZG93RnJhbWVEaWRDaGFuZ2U6KE5TTm90aWZpY2F0
aW9uICopbm90aWZpY2F0aW9uIAotewotICAgIGlmIChfcHJveHkgJiYgW3NlbGYgd2luZG93XSkK
LSAgICAgICAgX3Byb3h5LT53aW5kb3dGcmFtZUNoYW5nZWQoW1tzZWxmIHdpbmRvd10gZnJhbWVd
KTsKLX0KLQotLSAodm9pZClhZGRXaW5kb3dPYnNlcnZlcnMKLXsKLSAgICBbc3VwZXIgYWRkV2lu
ZG93T2JzZXJ2ZXJzXTsKLSAgICAKLSAgICBBU1NFUlQoW3NlbGYgd2luZG93XSk7Ci0gICAgCi0g
ICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107Ci0gICAgCi0gICAgTlNOb3RpZmlj
YXRpb25DZW50ZXIgKm5vdGlmaWNhdGlvbkNlbnRlciA9IFtOU05vdGlmaWNhdGlvbkNlbnRlciBk
ZWZhdWx0Q2VudGVyXTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYg
c2VsZWN0b3I6QHNlbGVjdG9yKHdpbmRvd0ZyYW1lRGlkQ2hhbmdlOikgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmFtZTpOU1dpbmRvd0RpZE1vdmVOb3RpZmljYXRpb24gb2JqZWN0
OndpbmRvd107Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVj
dG9yOkBzZWxlY3Rvcih3aW5kb3dGcmFtZURpZENoYW5nZTopCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZTpOU1dpbmRvd0RpZFJlc2l6ZU5vdGlmaWNhdGlvbiBvYmplY3Q6d2lu
ZG93XTsgICAgCi0KLSAgICBpZiAoX3Byb3h5KQotICAgICAgICBfcHJveHktPndpbmRvd0ZyYW1l
Q2hhbmdlZChbd2luZG93IGZyYW1lXSk7Ci0gICAgW3NlbGYgdXBkYXRlQW5kU2V0V2luZG93XTsK
LX0KLQotLSAodm9pZClyZW1vdmVXaW5kb3dPYnNlcnZlcnMKLXsKLSAgICBbc3VwZXIgcmVtb3Zl
V2luZG93T2JzZXJ2ZXJzXTsKLSAgICAKLSAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAqbm90aWZp
Y2F0aW9uQ2VudGVyID0gW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdOwotICAg
IFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TV2luZG93RGlk
TW92ZU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJl
bW92ZU9ic2VydmVyOnNlbGYgbmFtZTpOU1dpbmRvd0RpZFJlc2l6ZU5vdGlmaWNhdGlvbiBvYmpl
Y3Q6bmlsXTsKLX0KLQotLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKilldmVudAotewotICAg
IGlmIChfaXNTdGFydGVkICYmIF9wcm94eSkKLSAgICAgICAgX3Byb3h5LT5tb3VzZUV2ZW50KHNl
bGYsIGV2ZW50LCBOUENvY29hRXZlbnRNb3VzZURvd24pOwotfQotCi0tICh2b2lkKW1vdXNlVXA6
KE5TRXZlbnQgKilldmVudAotewotICAgIGlmIChfaXNTdGFydGVkICYmIF9wcm94eSkKLSAgICAg
ICAgX3Byb3h5LT5tb3VzZUV2ZW50KHNlbGYsIGV2ZW50LCBOUENvY29hRXZlbnRNb3VzZVVwKTsK
LX0KLQotLSAodm9pZCltb3VzZURyYWdnZWQ6KE5TRXZlbnQgKilldmVudAotewotICAgIGlmIChf
aXNTdGFydGVkICYmIF9wcm94eSkKLSAgICAgICAgX3Byb3h5LT5tb3VzZUV2ZW50KHNlbGYsIGV2
ZW50LCBOUENvY29hRXZlbnRNb3VzZURyYWdnZWQpOwotfQotCi0tICh2b2lkKWhhbmRsZU1vdXNl
RW50ZXJlZDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgLy8gU2V0IGN1cnNvciB0byBhcnJvdy4g
UGx1Z2lucyBvZnRlbiBoYW5kbGUgY3Vyc29yIGludGVybmFsbHksIGJ1dCB0aG9zZSB0aGF0IGRv
bid0IHdpbGwganVzdCBnZXQgdGhpcyBkZWZhdWx0IG9uZS4KLSAgICBbW05TQ3Vyc29yIGFycm93
Q3Vyc29yXSBzZXRdOwotCi0gICAgaWYgKF9pc1N0YXJ0ZWQgJiYgX3Byb3h5KQotICAgICAgICBf
cHJveHktPm1vdXNlRXZlbnQoc2VsZiwgZXZlbnQsIE5QQ29jb2FFdmVudE1vdXNlRW50ZXJlZCk7
Ci19Ci0KLS0gKHZvaWQpaGFuZGxlTW91c2VFeGl0ZWQ6KE5TRXZlbnQgKilldmVudAotewotICAg
IGlmIChfaXNTdGFydGVkICYmIF9wcm94eSkKLSAgICAgICAgX3Byb3h5LT5tb3VzZUV2ZW50KHNl
bGYsIGV2ZW50LCBOUENvY29hRXZlbnRNb3VzZUV4aXRlZCk7Ci0KLSAgICAvLyBTZXQgY3Vyc29y
IGJhY2sgdG8gYXJyb3cgY3Vyc29yLiAgQmVjYXVzZSBOU0N1cnNvciBkb2Vzbid0IGtub3cgYWJv
dXQgY2hhbmdlcyB0aGF0IHRoZSBwbHVnaW4gbWFkZSwgd2UgY291bGQgZ2V0IGNvbmZ1c2VkIGFi
b3V0IHdoYXQgd2UgdGhpbmsgdGhlCi0gICAgLy8gY3VycmVudCBjdXJzb3IgaXMgb3RoZXJ3aXNl
LiAgVGhlcmVmb3JlIHdlIGhhdmUgbm8gY2hvaWNlIGJ1dCB0byB1bmNvbmRpdGlvbmFsbHkgcmVz
ZXQgdGhlIGN1cnNvciB3aGVuIHRoZSBtb3VzZSBleGl0cyB0aGUgcGx1Z2luLgotICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBiZSBqb2Igb2YgcGx1Z2luIGhvc3QsIHNlZSA8cmRhcjovL3Byb2Js
ZW0vNzY1NDQzND4uCi0gICAgW1tOU0N1cnNvciBhcnJvd0N1cnNvcl0gc2V0XTsKLX0KLQotLSAo
dm9pZClzY3JvbGxXaGVlbDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgYm9vbCBwcm9jZXNzZWRF
dmVudCA9IGZhbHNlOwotICAgIAotICAgIGlmIChfaXNTdGFydGVkICYmIF9wcm94eSkKLSAgICAg
ICAgcHJvY2Vzc2VkRXZlbnQgPSBfcHJveHktPndoZWVsRXZlbnQoc2VsZiwgZXZlbnQpOwotICAg
IAotICAgIGlmICghcHJvY2Vzc2VkRXZlbnQpCi0gICAgICAgIFtzdXBlciBzY3JvbGxXaGVlbDpl
dmVudF07Ci19Ci0KLS0gKE5TVGV4dElucHV0Q29udGV4dCAqKWlucHV0Q29udGV4dAotewotICAg
IHJldHVybiBbW1dlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIgc2hhcmVkVGV4dElucHV0V2lu
ZG93Q29udHJvbGxlcl0gaW5wdXRDb250ZXh0XTsKLX0KLQotLSAodm9pZClrZXlEb3duOihOU0V2
ZW50ICopZXZlbnQKLXsKLSAgICBpZiAoIV9pc1N0YXJ0ZWQgfHwgIV9wcm94eSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIE5TU3RyaW5nICpzdHJpbmcgPSBuaWw7Ci0gICAgaWYgKFtbV2Vi
VGV4dElucHV0V2luZG93Q29udHJvbGxlciBzaGFyZWRUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVy
XSBpbnRlcnByZXRLZXlFdmVudDpldmVudCBzdHJpbmc6JnN0cmluZ10pIHsKLSAgICAgICAgaWYg
KHN0cmluZykKLSAgICAgICAgICAgIF9wcm94eS0+aW5zZXJ0VGV4dChzdHJpbmcpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIF9wcm94eS0+a2V5RXZlbnQoc2VsZiwgZXZlbnQs
IE5QQ29jb2FFdmVudEtleURvd24pOwotfQotCi0tICh2b2lkKWtleVVwOihOU0V2ZW50ICopZXZl
bnQKLXsKLSAgICBpZiAoX2lzU3RhcnRlZCAmJiBfcHJveHkpCi0gICAgICAgIF9wcm94eS0+a2V5
RXZlbnQoc2VsZiwgZXZlbnQsIE5QQ29jb2FFdmVudEtleVVwKTsKLX0KLQotLSAodm9pZClmbGFn
c0NoYW5nZWQ6KE5TRXZlbnQgKilldmVudAotewotICAgIGlmIChfaXNTdGFydGVkICYmIF9wcm94
eSkKLSAgICAgICAgX3Byb3h5LT5mbGFnc0NoYW5nZWQoZXZlbnQpOwotfQotCi0tICh2b2lkKXNl
bmRNb2RpZmllckV2ZW50V2l0aEtleUNvZGU6KGludClrZXlDb2RlIGNoYXJhY3RlcjooY2hhcilj
aGFyYWN0ZXIKLXsKLSAgICBpZiAoX2lzU3RhcnRlZCAmJiBfcHJveHkpCi0gICAgICAgIF9wcm94
eS0+c3ludGhldGljS2V5RG93bldpdGhDb21tYW5kTW9kaWZpZXIoa2V5Q29kZSwgY2hhcmFjdGVy
KTsKLX0KLQotLSAodm9pZClwbHVnaW5Ib3N0RGllZAotewotICAgIGlmIChpczxSZW5kZXJFbWJl
ZGRlZE9iamVjdD4oX2VsZW1lbnQtPnJlbmRlcmVyKCkpKQotICAgICAgICBkb3duY2FzdDxSZW5k
ZXJFbWJlZGRlZE9iamVjdD4oKl9lbGVtZW50LT5yZW5kZXJlcigpKS5zZXRQbHVnaW5VbmF2YWls
YWJpbGl0eVJlYXNvbihSZW5kZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2luQ3Jhc2hlZCk7Ci0KLSAg
ICBfcGx1Z2luTGF5ZXIgPSBuaWw7Ci0gICAgX3Byb3h5ID0gbnVsbHB0cjsKLSAgICAKLSAgICAv
LyBObyBuZWVkIGZvciB1cyB0byBiZSBsYXllciBiYWNrZWQgYW55bW9yZQotICAgIHNlbGYud2Fu
dHNMYXllciA9IE5POwotICAgIAotICAgIFtzZWxmIGludmFsaWRhdGVQbHVnaW5Db250ZW50UmVj
dDpbc2VsZiBib3VuZHNdXTsKLX0KLQotLSAodm9pZClkcmF3UmVjdDooTlNSZWN0KXJlY3QKLXsK
LSAgICBpZiAoX2NhY2hlZFNuYXBzaG90KSB7Ci0gICAgICAgIE5TUmVjdCBzb3VyY2VSZWN0ID0g
eyBOU1plcm9Qb2ludCwgW19jYWNoZWRTbmFwc2hvdC5nZXQoKSBzaXplXSB9OwotICAgICAgICBb
X2NhY2hlZFNuYXBzaG90LmdldCgpIGRyYXdJblJlY3Q6W3NlbGYgYm91bmRzXSBmcm9tUmVjdDpz
b3VyY2VSZWN0IG9wZXJhdGlvbjpOU0NvbXBvc2l0aW5nT3BlcmF0aW9uU291cmNlT3ZlciBmcmFj
dGlvbjoxXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChfcHJveHkpIHsKLSAg
ICAgICAgaWYgKF9zb2Z0d2FyZVJlbmRlcmVyKSB7Ci0gICAgICAgICAgICBpZiAoW05TR3JhcGhp
Y3NDb250ZXh0IGN1cnJlbnRDb250ZXh0RHJhd2luZ1RvU2NyZWVuXSkgewotICAgICAgICAgICAg
ICAgIF9zb2Z0d2FyZVJlbmRlcmVyLT5yZW5kZXIoW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50
Q29udGV4dF0gQ0dDb250ZXh0XSwgTlNSZWN0VG9DR1JlY3QocmVjdCkpOwotICAgICAgICAgICAg
ICAgIF9wcm94eS0+ZGlkRHJhdygpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgX3Byb3h5LT5wcmludChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBDR0Nv
bnRleHRdLCBbc2VsZiBib3VuZHNdLnNpemUud2lkdGgsIFtzZWxmIGJvdW5kc10uc2l6ZS5oZWln
aHQpOwotICAgICAgICB9IGVsc2UgaWYgKF9zbmFwc2hvdHRpbmcgJiYgW3NlbGYgc3VwcG9ydHNT
bmFwc2hvdHRpbmddKSB7Ci0gICAgICAgICAgICBfcHJveHktPnNuYXBzaG90KFtbTlNHcmFwaGlj
c0NvbnRleHQgY3VycmVudENvbnRleHRdIENHQ29udGV4dF0sIFtzZWxmIGJvdW5kc10uc2l6ZS53
aWR0aCwgW3NlbGYgYm91bmRzXS5zaXplLmhlaWdodCk7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotfQotCi0tIChSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+KWNy
ZWF0ZVBsdWdpbkJpbmRpbmdzSW5zdGFuY2U6KFJlZjxKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0
PiYmKXJvb3RPYmplY3QKLXsKLSAgICBpZiAoIV9wcm94eSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgCi0gICAgcmV0dXJuIF9wcm94eS0+Y3JlYXRlQmluZGluZ3NJbnN0YW5jZShXVEZN
b3ZlKHJvb3RPYmplY3QpKTsKLX0KLQotLSAodm9pZClwbHVnaW5WaWV3OihOU1ZpZXcgKilwbHVn
aW5WaWV3IHJlY2VpdmVkUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyZXNwb25zZQotewotICAg
IEFTU0VSVChfbG9hZE1hbnVhbGx5KTsKLSAgICBpZiAoIV9wcm94eSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIEFTU0VSVCghX3Byb3h5LT5tYW51YWxTdHJlYW0oKSk7Ci0KLSAgICBfcHJv
eHktPnNldE1hbnVhbFN0cmVhbShIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbTo6Y3JlYXRlKF9w
cm94eS5nZXQoKSwgJmNvcmUoW3NlbGYgd2ViRnJhbWVdKS0+bG9hZGVyKCkpKTsKLSAgICBfcHJv
eHktPm1hbnVhbFN0cmVhbSgpLT5zdGFydFN0cmVhbVdpdGhSZXNwb25zZShyZXNwb25zZSk7Ci19
Ci0KLS0gKHZvaWQpcGx1Z2luVmlldzooTlNWaWV3ICopcGx1Z2luVmlldyByZWNlaXZlZERhdGE6
KE5TRGF0YSAqKWRhdGEKLXsKLSAgICBBU1NFUlQoX2xvYWRNYW51YWxseSk7Ci0gICAgaWYgKCFf
cHJveHkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoSG9zdGVkTmV0c2NhcGVQbHVn
aW5TdHJlYW0qIG1hbnVhbFN0cmVhbSA9IF9wcm94eS0+bWFudWFsU3RyZWFtKCkpCi0gICAgICAg
IG1hbnVhbFN0cmVhbS0+ZGlkUmVjZWl2ZURhdGEoMCwgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KFtkYXRhIGJ5dGVzXSksIFtkYXRhIGxlbmd0aF0pOwotfQotCi0tICh2b2lkKXBsdWdpblZp
ZXc6KE5TVmlldyAqKXBsdWdpblZpZXcgcmVjZWl2ZWRFcnJvcjooTlNFcnJvciAqKWVycm9yCi17
Ci0gICAgQVNTRVJUKF9sb2FkTWFudWFsbHkpOwotICAgIGlmICghX3Byb3h5KQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgaWYgKEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtKiBtYW51YWxT
dHJlYW0gPSBfcHJveHktPm1hbnVhbFN0cmVhbSgpKQotICAgICAgICBtYW51YWxTdHJlYW0tPmRp
ZEZhaWwoMCwgZXJyb3IpOwotfQotCi0tICh2b2lkKXBsdWdpblZpZXdGaW5pc2hlZExvYWRpbmc6
KE5TVmlldyAqKXBsdWdpblZpZXcKLXsKLSAgICBBU1NFUlQoX2xvYWRNYW51YWxseSk7Ci0gICAg
aWYgKCFfcHJveHkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoSG9zdGVkTmV0c2Nh
cGVQbHVnaW5TdHJlYW0qIG1hbnVhbFN0cmVhbSA9IF9wcm94eS0+bWFudWFsU3RyZWFtKCkpCi0g
ICAgICAgIG1hbnVhbFN0cmVhbS0+ZGlkRmluaXNoTG9hZGluZygwKTsKLX0KLQotLSAodm9pZCl3
ZWJGcmFtZTooV2ViRnJhbWUgKil3ZWJGcmFtZSBkaWRGaW5pc2hMb2FkV2l0aFJlYXNvbjooTlBS
ZWFzb24pcmVhc29uCi17Ci0gICAgaWYgKF9pc1N0YXJ0ZWQgJiYgX3Byb3h5KQotICAgICAgICBf
cHJveHktPndlYkZyYW1lRGlkRmluaXNoTG9hZFdpdGhSZWFzb24od2ViRnJhbWUsIHJlYXNvbik7
Ci19Ci0KLS0gKHZvaWQpd2ViRnJhbWU6KFdlYkZyYW1lICopd2ViRnJhbWUgZGlkRmluaXNoTG9h
ZFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yCi17Ci0gICAgTlBSZWFzb24gcmVhc29uID0gTlBS
RVNfRE9ORTsKLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIHJlYXNvbiA9IEhvc3RlZE5ldHNjYXBl
UGx1Z2luU3RyZWFtOjpyZWFzb25Gb3JFcnJvcihlcnJvcik7Ci0gICAgW3NlbGYgd2ViRnJhbWU6
d2ViRnJhbWUgZGlkRmluaXNoTG9hZFdpdGhSZWFzb246cmVhc29uXTsKLX0KLQotQGVuZAotCi0j
ZW5kaWYgLy8gVVNFKFBMVUdJTl9IT1NUX1BST0NFU1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0
ZWQvV2ViS2l0UGx1Z2luQWdlbnQuZGVmcyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdp
bnMvSG9zdGVkL1dlYktpdFBsdWdpbkFnZW50LmRlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDEzMGNmNjFmMjRlNjNlNThhYzllNDkyMjkzNWMwMTI4OWQzNDU5NTAuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luQWdlbnQuZGVmcworKysgL2Rldi9udWxs
CkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLSAKLSNpbmNsdWRlIDxXZWJLaXRMZWdhY3kvV2ViS2l0UGx1Z2luSG9zdFR5cGVzLmRl
ZnM+Ci0KLXN1YnN5c3RlbSBXZWJLaXRQbHVnaW5BZ2VudCAxMDA7Ci0KLXNlcnZlcnByZWZpeCBX
S1BBOwotdXNlcnByZWZpeCBfV0tQQTsKLQotcm91dGluZSBDaGVja0luQXBwbGljYXRpb24oc2Vy
dmVyUG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2ZXJB
dWRpdFRva2VuIHRva2VuIDphdWRpdF90b2tlbl90OwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXBwbGljYXRpb25OYW1lIDphcHBsaWNhdGlvbl9uYW1lX3Q7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXQgcGx1Z2luVmVuZG9yUG9ydCA6bWFjaF9wb3J0X21ha2Vfc2VuZF90KTsK
LQotcm91dGluZSBTcGF3blBsdWdpbkhvc3QocGx1Z2luVmVuZG9yUG9ydCA6bWFjaF9wb3J0X3Q7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcmVwbHlwb3J0IF9yZXBseVBvcnQgOm1hY2hfcG9y
dF9tYWtlX3NlbmRfb25jZV90OwotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA6cGxp
c3RfYnl0ZXNfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCBwbHVnaW5Ib3N0UG9ydDog
bWFjaF9wb3J0X21vdmVfc2VuZF90KTsKLQotcm91dGluZSBDaGVja0luUGx1Z2luSG9zdChzZXJ2
ZXJQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSG9z
dFBvcnQgOm1hY2hfcG9ydF9tb3ZlX3NlbmRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
U2VydmVyQXVkaXRUb2tlbiB0b2tlbiA6YXVkaXRfdG9rZW5fdCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5BZ2VudFJlcGx5
LmRlZnMgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVn
aW5BZ2VudFJlcGx5LmRlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNTU1YjNj
Mjk1YmIzN2FhMGUyYTllY2U1ODU3NWQ2MGQ2NmNiNTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9I
b3N0ZWQvV2ViS2l0UGx1Z2luQWdlbnRSZXBseS5kZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMzgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotIAot
I2luY2x1ZGUgPFdlYktpdExlZ2FjeS9XZWJLaXRQbHVnaW5Ib3N0VHlwZXMuZGVmcz4KLQotc3Vi
c3lzdGVtIFdlYktpdFBsdWdpbkFnZW50UmVwbHkgMjAwOwotCi1zZXJ2ZXJwcmVmaXggV0tQQTsK
LXVzZXJwcmVmaXggX1dLUEE7Ci0KLXNraXA7IC8vIENoZWNrSW5BcHBsaWNhdGlvbgotCi1zaW1w
bGVyb3V0aW5lIFNwYXduUGx1Z2luSG9zdFJlcGx5KF9yZXBseVBvcnQgOm1hY2hfcG9ydF9tb3Zl
X3NlbmRfb25jZV90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBwbHVn
aW5Ib3N0UG9ydDogbWFjaF9wb3J0X21vdmVfc2VuZF90KTsKLQotc2tpcDsgLy8gQ2hlY2tJblBs
dWdpbkhvc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9z
dGVkL1dlYktpdFBsdWdpbkNsaWVudC5kZWZzIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1
Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luQ2xpZW50LmRlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDI2ZjRhMGM5NGUzOTQwNzQzM2VhNjhiMjJmZjg2OGEzMTNiODMzM2YuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luQ2xpZW50LmRlZnMKKysrIC9kZXYv
bnVsbApAQCAtMSwyMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSA8V2ViS2l0TGVnYWN5L1dlYktpdFBsdWdpbkhvc3RUeXBl
cy5kZWZzPgotCi0vLyBGSVhNRTogQ29tZSB1cCB3aXRoIGEgYmV0dGVyIG5hbWUuCi1zdWJzeXN0
ZW0gV2ViS2l0UGx1Z2luQ2xpZW50IDMwMDsKLQotc2VydmVycHJlZml4IFdLOwotdXNlcnByZWZp
eCBfV0s7Ci0KLXNpbXBsZXJvdXRpbmUgUENTdGF0dXNUZXh0KGNsaWVudFBvcnQgOm1hY2hfcG9y
dF90OwotICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0IDpkYXRhX3QpOwotCi1yb3V0aW5lIFBDTG9hZFVSTChj
bGllbnRQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6
dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgdXJsIDpkYXRhX3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgdGFyZ2V0IDpkYXRhX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgcG9zdERh
dGEgOmRhdGFfdDsKLSAgICAgICAgICAgICAgICAgICAgICBmbGFnczogdWludDMyX3Q7Ci0gICAg
ICAgICAgICAgICAgICAgICAgb3V0IHJlc3VsdENvZGUgOnVpbnQxNl90OwotICAgICAgICAgICAg
ICAgICAgICAgIG91dCByZXF1ZXN0SUQgOnVpbnQzMl90KTsKLQotc2ltcGxlcm91dGluZSBQQ0Nh
bmNlbExvYWRVUkwoY2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cmVhbUlEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24g
OmludDE2X3QpOwotCi1zaW1wbGVyb3V0aW5lIFBDSW52YWxpZGF0ZVJlY3QoY2xpZW50UG9ydCA6
bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50
MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA6ZG91YmxlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB5IDpkb3VibGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdpZHRoIDpkb3VibGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCA6
ZG91YmxlKTsKLQotcm91dGluZSBQQ0dldENvb2tpZXMoY2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7
Ci0gICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAg
ICAgICAgICB1cmwgOmRhdGFfdDsKLSAgICAgICAgICAgICAgICAgICAgIG91dCByZXR1cm5WYWx1
ZSA6Ym9vbGVhbl90OwotICAgICAgICAgICAgICAgICAgICAgb3V0IGNvb2tpZXMgOmRhdGFfdCwg
ZGVhbGxvYyk7Ci0KLXJvdXRpbmUgUENTZXRDb29raWVzKGNsaWVudFBvcnQgOm1hY2hfcG9ydF90
OwotICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAg
ICAgICAgICAgdXJsIDpkYXRhX3Q7Ci0gICAgICAgICAgICAgICAgICAgICBjb29raWVzIDpkYXRh
X3Q7Ci0gICAgICAgICAgICAgICAgICAgICBvdXQgcmV0dXJuVmFsdWUgOmJvb2xlYW5fdCk7Ci0K
LXJvdXRpbmUgUENHZXRQcm94eShjbGllbnRQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAg
ICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgdXJsIDpkYXRh
X3Q7Ci0gICAgICAgICAgICAgICAgICAgb3V0IHJldHVyblZhbHVlIDpib29sZWFuX3Q7Ci0gICAg
ICAgICAgICAgICAgICAgb3V0IHByb3h5IDpkYXRhX3QsIGRlYWxsb2MpOwotCi1yb3V0aW5lIFBD
R2V0QXV0aGVudGljYXRpb25JbmZvKGNsaWVudFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3RvY29sIDpkYXRhX3Q7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhvc3QgOmRhdGFfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcG9ydCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVt
ZSA6ZGF0YV90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbSA6ZGF0YV90
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgcmV0dXJuVmFsdWUgOmJvb2xl
YW5fdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IHVzZXJuYW1lIDpkYXRh
X3QsIGRlYWxsb2M7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCBwYXNzd29y
ZCA6ZGF0YV90LCBkZWFsbG9jKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi1y
b3V0aW5lIFBDQ29udmVydFBvaW50KGNsaWVudFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAg
ICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAg
IHNvdXJjZVggOmRvdWJsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgc291cmNlWSA6ZG91Ymxl
OwotICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VTcGFjZSA6dWludDMyX3Q7Ci0gICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RTcGFjZSA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAg
ICAgIG91dCByZXR1cm5WYWx1ZSA6Ym9vbGVhbl90OwotICAgICAgICAgICAgICAgICAgICAgICBv
dXQgZGVzdFggOmRvdWJsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgb3V0IGRlc3RZIDpkb3Vi
bGUpOwotCi0vLyBOUFJ1bnRpbWUKLQotcm91dGluZSBQQ0dldFN0cmluZ0lkZW50aWZpZXIoY2xp
ZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA6
ZGF0YV90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCBpZGVudGlmaWVyIDp1aW50
NjRfdCk7Ci0KLXJvdXRpbmUgUENHZXRJbnRJZGVudGlmaWVyKGNsaWVudFBvcnQgOm1hY2hfcG9y
dF90OwotICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDppbnQzMl90OwotICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dCBpZGVudGlmaWVyOiB1aW50NjRfdCk7Ci0KLXJvdXRpbmUgUENH
ZXRXaW5kb3dOUE9iamVjdChjbGllbnRQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXQgb2JqZWN0SUQgOnVpbnQzMl90KTsKLXJvdXRpbmUgUENHZXRQbHVnaW5FbGVtZW50TlBP
YmplY3QoY2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvdXQgb2JqZWN0SUQgOnVpbnQzMl90KTsKLSAgICAgICAgICAgICAgICAgICAgICAKLXJv
dXRpbmUgUENGb3JnZXRCcm93c2VyT2JqZWN0KGNsaWVudFBvcnQgOm1hY2hfcG9ydF90OwotICAg
ICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAg
ICAgICBvYmplY3RJRCA6dWludDMyX3QpOwotICAgICAgICAgICAgICAgICAgICAgIAotc2ltcGxl
cm91dGluZSBQQ0V2YWx1YXRlKGNsaWVudFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAg
ICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgIHJl
cXVlc3RJRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgIG9iamVjdElEIDp1aW50
MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0IDpkYXRhX3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgIGFsbG93UG9wdXBzIDpib29sZWFuX3QpOwotCi1zaW1wbGVyb3V0aW5lIFBD
SW52b2tlKGNsaWVudFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgcGx1
Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElEIDp1aW50MzJf
dDsKLSAgICAgICAgICAgICAgICAgICAgIG9iamVjdElEIDp1aW50MzJfdDsKLSAgICAgICAgICAg
ICAgICAgICAgIG1ldGhvZE5hbWVJZGVudGlmaWVyIDp1aW50NjRfdDsKLSAgICAgICAgICAgICAg
ICAgICAgIGFyZ3VtZW50cyA6ZGF0YV90KTsKLQotc2ltcGxlcm91dGluZSBQQ0ludm9rZURlZmF1
bHQoY2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICBwbHVnaW5JRCA6dWlu
dDMyX3Q7Ci0gICAgICAgICAgICAgICByZXF1ZXN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAg
ICAgb2JqZWN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgYXJndW1lbnRzIDpkYXRhX3Qp
OwotCi1yb3V0aW5lIFBDQ29uc3RydWN0KGNsaWVudFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAg
ICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgb2JqZWN0
SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgYXJndW1lbnRzIDpkYXRhX3Q7Ci0gICAg
ICAgICAgICAgICAgICBvdXQgcmV0dXJuVmFsdWUgOmJvb2xlYW5fdDsKLSAgICAgICAgICAgICAg
ICAgIG91dCByZXN1bHQgOmRhdGFfdCwgZGVhbGxvYyk7Ci0KLXNpbXBsZXJvdXRpbmUgUENHZXRQ
cm9wZXJ0eShjbGllbnRQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVx
dWVzdElEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RJRCA6
dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lSWRlbnRp
ZmllciA6dWludDY0X3QpOwotCi1zaW1wbGVyb3V0aW5lIFBDU2V0UHJvcGVydHkoY2xpZW50UG9y
dCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsK
LSAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAg
ICAgICAgb2JqZWN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5h
bWVJZGVudGlmaWVyIDp1aW50NjRfdDsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgOmRhdGFf
dCk7Ci0KLXNpbXBsZXJvdXRpbmUgUENSZW1vdmVQcm9wZXJ0eShjbGllbnRQb3J0IDptYWNoX3Bv
cnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAg
ICAgICAgICAgICAgICAgICByZXF1ZXN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAg
ICAgICBvYmplY3RJRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5
TmFtZUlkZW50aWZpZXIgOnVpbnQ2NF90KTsKLQotc2ltcGxlcm91dGluZSBQQ0hhc1Byb3BlcnR5
KGNsaWVudFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBs
dWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SUQg
OnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdElEIDp1aW50MzJf
dDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVJZGVudGlmaWVyIDp1
aW50NjRfdCk7Ci0KLXNpbXBsZXJvdXRpbmUgUENIYXNNZXRob2QoY2xpZW50UG9ydCA6bWFjaF9w
b3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SUQgOnVpbnQzMl90OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb2JqZWN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWV0aG9kTmFtZUlkZW50aWZpZXIgOnVpbnQ2NF90KTsKLQotcm91dGluZSBQQ0lk
ZW50aWZpZXJJbmZvKGNsaWVudFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAg
ICAgICBpZGVudGlmaWVyIDp1aW50NjRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgb3V0IGlu
Zm8gOmRhdGFfdCwgZGVhbGxvYyk7Ci0KLXNpbXBsZXJvdXRpbmUgUENFbnVtZXJhdGUoY2xpZW50
UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1
aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElEIDp1aW50MzJfdDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0SUQgOnVpbnQzMl90KTsKLQotLy8gTWlz
YwotCi1zaW1wbGVyb3V0aW5lIFBDU2V0TWVudUJhclZpc2libGUoY2xpZW50UG9ydCA6bWFjaF9w
b3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGUgOmJvb2xlYW5f
dCk7Ci0KLXNpbXBsZXJvdXRpbmUgUENTZXRNb2RhbChjbGllbnRQb3J0IDptYWNoX3BvcnRfdDsK
LSAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwgOmJvb2xlYW5fdCk7Ci0KLS8vIFdhcyBQQ0No
ZWNrSWZBbGxvd2VkVG9Mb2FkVVJMLgotc2tpcDsKLQotLy8gV2FzIFBDQ2FuY2VsQ2hlY2tJZkFs
bG93ZWRUb0xvYWRVUkwuCi1za2lwOwotCi0vLyBXYXMgUENSZXNvbHZlVVJMLgotc2tpcDsKLQot
Ly8gUmVwbGllcwotc2ltcGxlcm91dGluZSBQQ0luc3RhbnRpYXRlUGx1Z2luUmVwbHkoY2xpZW50
UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlcXVlc3RJRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0IDprZXJuX3JldHVybl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlbmRlckNvbnRleHRJRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVuZGVyZXJUeXBlIDp1aW50MzJfdCk7Ci0KLXNpbXBsZXJvdXRpbmUg
UENHZXRTY3JpcHRhYmxlTlBPYmplY3RSZXBseShjbGllbnRQb3J0IDptYWNoX3BvcnRfdDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SUQgOnVp
bnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RJ
RCA6dWludDMyX3QpOwotCi1zaW1wbGVyb3V0aW5lIFBDQm9vbGVhblJlcGx5KGNsaWVudFBvcnQg
Om1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWlu
dDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMyX3Q7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA6Ym9vbGVhbl90KTsKLQotc2lt
cGxlcm91dGluZSBQQ0Jvb2xlYW5BbmREYXRhUmVwbHkoY2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SUQgOnVpbnQzMl90
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgOmJvb2xl
YW5fdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA6ZGF0YV90
KTsgIAotCi0vLyBOZXcgUm91dGluZXMgKG11c3QgYmUgYWRkZWQgYXQgdGhlIGJvdHRvbSBvZiB0
aGUgZmlsZSkKLQotc2ltcGxlcm91dGluZSBQQ1NldEZ1bGxzY3JlZW5XaW5kb3dJc1Nob3dpbmco
Y2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpc1Nob3dpbmcgOmJvb2xlYW5fdCk7Ci0KLXNpbXBsZXJvdXRpbmUgUENT
ZXRFeGNlcHRpb24oY2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1lc3NhZ2UgOmRhdGFfdCk7Ci0KLXNpbXBsZXJvdXRpbmUgUENMYXllckhvc3Rp
bmdNb2RlQ2hhbmdlZChjbGllbnRQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdHNMYXllcnNJbldpbmRvd1NlcnZlciA6Ym9v
bGVhbl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckNv
bnRleHRJRCA6dWludDMyX3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
UGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luSG9zdC5kZWZzIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luSG9zdC5kZWZzCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBlNDk4NDc2NDk5NGIxNmY2Nzg4MjRmZjRhZWNmZmU3MTE5YzNkYzY5
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkhvc3QuZGVmcworKysg
L2Rldi9udWxsCkBAIC0xLDI1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlIDxXZWJLaXRMZWdhY3kvV2ViS2l0UGx1Z2luSG9z
dFR5cGVzLmRlZnM+Ci0KLXN1YnN5c3RlbSBXZWJLaXRQbHVnaW5Ib3N0IDMwMDsKLQotc2VydmVy
cHJlZml4IFdLOwotdXNlcnByZWZpeCBfV0s7Ci0KLXJvdXRpbmUgUEhDaGVja0luV2l0aFBsdWdp
bkhvc3QocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2VydmVyQXVkaXRUb2tlbiB0b2tlbiA6YXVkaXRfdG9rZW5fdDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgOnBsaXN0X2J5dGVzX3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjbGllbnRQb3J0IDptYWNoX3BvcnRfbWFrZV9zZW5kX3Q7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRQU05IaWdoIDp1aW50MzJfdDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudFBTTkxvdyA6dWludDMyX3Q7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJQb3J0IDptYWNoX3BvcnRfY29weV9zZW5k
X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgcGx1Z2luSG9zdFBTTkhpZ2gg
OnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IHBsdWdpbkhvc3RQ
U05Mb3cgOnVpbnQzMl90KTsKLQotc2ltcGxlcm91dGluZSBQSEluc3RhbnRpYXRlUGx1Z2luKHBs
dWdpbkhvc3RQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVxdWVzdElEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3B0aW9ucyA6cGxpc3RfYnl0ZXNfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGx1Z2luSUQgOnVpbnQzMl90KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi1z
aW1wbGVyb3V0aW5lIFBIUmVzaXplUGx1Z2luSW5zdGFuY2UocGx1Z2luSG9zdFBvcnQgOm1hY2hf
cG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1
aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElEIDp1aW50
MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5YIDpkb3Vi
bGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luWSA6ZG91Ymxl
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbldpZHRoIDpkb3Vi
bGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSGVpZ2h0IDpk
b3VibGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcFggOmRvdWJs
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwWSA6ZG91YmxlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBXaWR0aCA6ZG91YmxlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBIZWlnaHQgOmRvdWJsZSk7
Ci0KLXNpbXBsZXJvdXRpbmUgUEhQbHVnaW5JbnN0YW5jZUZvY3VzQ2hhbmdlZChwbHVnaW5Ib3N0
UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGFzRm9jdXMgOmJvb2xlYW5fdCk7Ci1zaW1wbGVyb3V0aW5lIFBIUGx1Z2luSW5z
dGFuY2VXaW5kb3dGb2N1c0NoYW5nZWQocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0ZvY3VzIDpib29s
ZWFuX3QpOwotc2ltcGxlcm91dGluZSBQSFBsdWdpbkluc3RhbmNlV2luZG93RnJhbWVDaGFuZ2Vk
KHBsdWdpbkhvc3RQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4IDpkb3VibGU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgOmRvdWJsZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggOmRvdWJsZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0IDpkb3VibGU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNjcmVl
blkgOmRvdWJsZSk7Ci0KLXNpbXBsZXJvdXRpbmUgUEhQbHVnaW5JbnN0YW5jZU1vdXNlRXZlbnQo
cGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGltZXN0YW1wIDpkb3VibGU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBldmVudFR5cGUgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJGbGFncyA6dWludDMyX3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5YIDpkb3VibGU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5ZIDpkb3VibGU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JlZW5YIDpkb3VibGU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JlZW5ZIDpkb3VibGU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTY3JlZW5ZIDpkb3VibGU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25OdW1iZXIgOmludDMyX3Q7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlja0NvdW50IDppbnQzMl90
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFYIDpkb3VibGU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YVkgOmRvdWJsZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhWjogZG91YmxlKTsK
LQotc2ltcGxlcm91dGluZSBQSFBsdWdpbkluc3RhbmNlS2V5Ym9hcmRFdmVudChwbHVnaW5Ib3N0
UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aW1lc3RhbXAgOmRvdWJsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV2ZW50VHlwZSA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllckZsYWdzIDp1aW50MzJfdDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgOmRhdGFfdDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnNJZ25vcmlu
Z01vZGlmaWVycyA6ZGF0YV90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXNBUmVwZWF0IDpib29sZWFuX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBrZXlDb2RlIDp1aW50MTZfdDsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtleUNoYXIgOnVpbnQ4X3QpOwotCi1zaW1wbGVyb3V0aW5lIFBI
UGx1Z2luSW5zdGFuY2VXaGVlbEV2ZW50KHBsdWdpbkhvc3RQb3J0IDptYWNoX3BvcnRfdDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SUQgOnVp
bnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3Rh
bXAgOmRvdWJsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9k
aWZpZXJGbGFncyA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBsdWdpblggOmRvdWJsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGx1Z2luWSA6ZG91YmxlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBidXR0b25OdW1iZXIgOmludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlbHRhWCA6ZG91YmxlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWx0YVkgOmRvdWJsZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVsdGFaOiBkb3VibGUpOwotCi1zaW1wbGVyb3V0aW5lIFBI
UGx1Z2luSW5zdGFuY2VJbnNlcnRUZXh0KHBsdWdpbkhvc3RQb3J0IDptYWNoX3BvcnRfdDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0IDpkYXRhX3Qp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotc2ltcGxlcm91dGlu
ZSBQSFBsdWdpbkluc3RhbmNlU3RhcnRUaW1lcnMocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50
MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdHRsZVRp
bWVycyA6Ym9vbGVhbl90KTsKLXNpbXBsZXJvdXRpbmUgUEhQbHVnaW5JbnN0YW5jZVN0b3BUaW1l
cnMocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90KTsKLQotc2ltcGxlcm91dGluZSBQSFBs
dWdpbkluc3RhbmNlUHJpbnQocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElEIDp1aW50MzJfdDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoIDp1aW50MzJfdDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCA6dWludDMyX3QpOwotCi1zaW1wbGVyb3V0
aW5lIFBIRGVzdHJveVBsdWdpbkluc3RhbmNlKHBsdWdpbkhvc3RQb3J0IDptYWNoX3BvcnRfdDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMyX3Qp
OwotCi0vLyBXYXMgUEhDaGVja0lmQWxsb3dlZFRvTG9hZFVSTFJlc3VsdC4KLXNraXA7Ci0KLS8v
IFN0cmVhbXMKLXNpbXBsZXJvdXRpbmUgUEhTdGFydFN0cmVhbShwbHVnaW5Ib3N0UG9ydCA6bWFj
aF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtSUQgOnVpbnQzMl90OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXNwb25zZVVSTCA6ZGF0YV90OwotICAgICAgICAgICAgICAgICAg
ICAgICAgICBleHBlY3RlZENvbnRlbnRMZW5ndGggOmludDY0X3Q7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgIGxhc3RNb2RpZmllZFRpbWVJbnRlcnZhbCA6ZG91YmxlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICBtaW1lVHlwZSA6ZGF0YV90OwotICAgICAgICAgICAgICAgICAgICAgICAg
ICBoZWFkZXJzIDpkYXRhX3QpOwotCi1zaW1wbGVyb3V0aW5lIFBIU3RyZWFtRGlkUmVjZWl2ZURh
dGEocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cmVhbUlEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YSA6ZGF0YV90KTsKLQotc2ltcGxlcm91dGluZSBQSFN0cmVhbURpZEZpbmlz
aExvYWRpbmcocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJlYW1JRCA6dWludDMyX3QpOwotCi1zaW1wbGVyb3V0aW5l
IFBIU3RyZWFtRGlkRmFpbChwbHVnaW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cmVhbUlEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWFzb24gOmludDE2X3QpOwotCi1zaW1wbGVyb3V0aW5lIFBITG9hZFVSTE5vdGlmeShwbHVn
aW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1
Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCA6
dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uIDppbnQxNl90KTsK
LQotLy8gTlBSdW50aW1lCi0KLXNpbXBsZXJvdXRpbmUgUEhHZXRTY3JpcHRhYmxlTlBPYmplY3Qo
cGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMyX3QpOwotCi1zaW1wbGVyb3V0aW5lIFBITlBP
YmplY3RIYXNQcm9wZXJ0eShwbHVnaW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2JqZWN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA6dWludDY0X3QpOwotCi1zaW1wbGVyb3V0
aW5lIFBITlBPYmplY3RIYXNNZXRob2QocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMyX3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9iamVjdElEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSA6dWludDY0X3QpOwotCi1zaW1wbGVyb3V0aW5l
IFBITlBPYmplY3RJbnZva2UocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9iamVjdElEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW52b2tlVHlwZSA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhv
ZE5hbWUgOnVpbnQ2NF90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMg
OmRhdGFfdCk7Ci0KLXNpbXBsZXJvdXRpbmUgUEhOUE9iamVjdEhhc0ludm9rZURlZmF1bHRNZXRo
b2QocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElEIDp1aW50MzJfdDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdElEIDp1aW50MzJf
dCk7Ci0KLXNpbXBsZXJvdXRpbmUgUEhOUE9iamVjdEhhc0NvbnN0cnVjdE1ldGhvZChwbHVnaW5I
b3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVxdWVzdElEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb2JqZWN0SUQgOnVpbnQzMl90KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAotc2ltcGxlcm91dGluZSBQSE5QT2JqZWN0R2V0UHJvcGVy
dHkocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXF1ZXN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9iamVjdElEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eU5hbWUgOnVpbnQ2NF90KTsKLQotc2ltcGxlcm91dGluZSBQSE5QT2JqZWN0
U2V0UHJvcGVydHkocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXF1ZXN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9iamVjdElEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgOnVpbnQ2NF90OwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlIDpkYXRhX3QpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAotc2ltcGxlcm91dGluZSBQSE5QT2JqZWN0UmVsZWFzZShwbHVnaW5Ib3N0UG9y
dCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6
dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RJRCA6dWludDMy
X3QpOwotCi1zaW1wbGVyb3V0aW5lIFBITlBPYmplY3RFbnVtZXJhdGUocGx1Z2luSG9zdFBvcnQg
Om1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklE
IDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SUQg
OnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdElEIDp1
aW50MzJfdCk7Ci0KLS8vIFJlcGxpZXMKLQotc2ltcGxlcm91dGluZSBQSEJvb2xlYW5SZXBseShj
bGllbnRQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1
Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SUQg
OnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgOmJvb2xlYW5f
dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAKLXNpbXBsZXJvdXRpbmUgUEhCb29sZWFu
QW5kRGF0YVJlcGx5KHBsdWdpbkhvc3RQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA6Ym9vbGVhbl90OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IDpkYXRhX3QpOwotCi0vLyBOZXcgUm91
dGluZXMgKG11c3QgYmUgYWRkZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgZmlsZSkKLQotc2ltcGxl
cm91dGluZSBQSFBsdWdpbkluc3RhbmNlRGlkRHJhdyhwbHVnaW5Ib3N0UG9ydCA6bWFjaF9wb3J0
X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50
MzJfdCk7Ci1zaW1wbGVyb3V0aW5lIFBIUGx1Z2luSW5zdGFuY2VQcml2YXRlQnJvd3NpbmdNb2Rl
RGlkQ2hhbmdlKHBsdWdpbkhvc3RQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQz
Ml90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcml2YXRlQnJvd3NpbmdFbmFibGVkIDpib29sZWFuX3QpOwotCi1zaW1wbGVyb3V0
aW5lIFBIUGx1Z2luSW5zdGFuY2VTbmFwc2hvdChwbHVnaW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SUQgOnVpbnQzMl90
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggOnVpbnQzMl90Owot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0IDp1aW50MzJfdCk7Ci0K
LXJvdXRpbmUgUEhDcmVhdGVQbHVnaW5NSU1FVHlwZXNQcmVmZXJlbmNlcyhwbHVnaW5Ib3N0UG9y
dCA6bWFjaF9wb3J0X3QpOwotCi1zaW1wbGVyb3V0aW5lIFBIUGx1Z2luU2hvdWxkSG9zdExheWVy
c0luV2luZG93U2VydmVyQ2hhbmdlZChwbHVnaW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
bHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRIb3N0TGF5ZXJzSW5XaW5kb3dTZXJ2ZXIgOmJv
b2xlYW5fdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hv
c3RlZC9XZWJLaXRQbHVnaW5Ib3N0VHlwZXMuZGVmcyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1BsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkhvc3RUeXBlcy5kZWZzCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBlM2I1OWEyZTRjZGQ3YTgxNTAzOGJjZWYxNWQ2YjgzMzU5MzlmNGFl
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkhvc3RUeXBlcy5kZWZz
CisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSA8bWFjaC9zdGRfdHlwZXMuZGVmcz4KLSNp
bmNsdWRlIDxtYWNoL21hY2hfdHlwZXMuZGVmcz4KLQotaW1wb3J0IDxXZWJLaXRMZWdhY3kvV2Vi
S2l0UGx1Z2luSG9zdFR5cGVzLmg+OwotCi10eXBlIHBsaXN0X2J5dGVzX3QgPSBeYXJyYXkgW10g
b2YgdWludDhfdDsKLXR5cGUgYXBwbGljYXRpb25fbmFtZV90ID0gXmFycmF5IFtdIG9mIHVpbnQ4
X3Q7Ci10eXBlIGRhdGFfdCA9IF5hcnJheSBbXSBvZiBjaGFyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luSG9zdFR5cGVzLmgg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5Ib3N0
VHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk3MTA1NDFjZjlmZjVhMDNl
MTY4NmE3Mzc0YTk0YWMwMzQ5ZDIzYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJL
aXRQbHVnaW5Ib3N0VHlwZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBXZWJLaXRQ
bHVnaW5Ib3N0VHlwZXNfaAotI2RlZmluZSBXZWJLaXRQbHVnaW5Ib3N0VHlwZXNfaAotCi0jaW5j
bHVkZSA8c3RkaW50Lmg+Ci0KLXR5cGVkZWYgdWludDhfdCogcGxpc3RfYnl0ZXNfdDsKLXR5cGVk
ZWYgdWludDhfdCogYXBwbGljYXRpb25fbmFtZV90OwotCi10eXBlZGVmIGNoYXIqIGRhdGFfdDsK
LQotI2lmbmRlZiBfX01pZ1R5cGVDaGVjawotI2RlZmluZSBfX01pZ1R5cGVDaGVjayAxCi0jZW5k
aWYKLQotZW51bSBMb2FkVVJMRmxhZ3MgewotICAgIElzUG9zdCA9IDEgPDwgMCwKLSAgICBQb3N0
RGF0YUlzRmlsZSA9IDEgPDwgMSwgCi0gICAgQWxsb3dIZWFkZXJzSW5Qb3N0RGF0YSA9IDEgPDwg
MiwKLSAgICBBbGxvd1BvcHVwcyA9IDEgPDwgMywKLX07Ci0gCi1lbnVtIEludm9rZVR5cGUgewot
ICAgIEludm9rZSwKLSAgICBJbnZva2VEZWZhdWx0LAotICAgIENvbnN0cnVjdAotfTsKLQotZW51
bSBWYWx1ZVR5cGUgewotICAgIFZvaWRWYWx1ZVR5cGUsCi0gICAgTnVsbFZhbHVlVHlwZSwKLSAg
ICBCb29sVmFsdWVUeXBlLAotICAgIERvdWJsZVZhbHVlVHlwZSwKLSAgICBTdHJpbmdWYWx1ZVR5
cGUsCi0gICAgSlNPYmplY3RWYWx1ZVR5cGUsCi0gICAgTlBPYmplY3RWYWx1ZVR5cGUKLX07Ci0K
LWVudW0gUmVuZGVyZXJUeXBlIHsKLSAgICBVc2VBY2NlbGVyYXRlZENvbXBvc2l0aW5nLAotICAg
IFVzZVNvZnR3YXJlUmVuZGVyZXIsCi0gICAgVXNlTGF5ZXJCYWNrZWRWaWV3Ci19OwotCi0jZW5k
aWYgLy8gV2ViS2l0UGx1Z2luSG9zdFR5cGVzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaCBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYlRleHRJbnB1dFdpbmRv
d0NvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYwMzZlZTJiMDRl
MmY4YjlhMzJmOTZlOWVkYzI3YjVjNzczODJhZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3Rl
ZC9XZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
ZiBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykKLQotI2lmbmRlZiBXZWJUZXh0SW5wdXRXaW5kb3dD
b250cm9sbGVyX2gKLSNkZWZpbmUgV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlcl9oCi0KLUBj
bGFzcyBXZWJUZXh0SW5wdXRQYW5lbDsKLQotQGludGVyZmFjZSBXZWJUZXh0SW5wdXRXaW5kb3dD
b250cm9sbGVyIDogTlNPYmplY3QgewotICAgIFdlYlRleHRJbnB1dFBhbmVsICpfcGFuZWw7Ci19
Ci0KLSsgKFdlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIgKilzaGFyZWRUZXh0SW5wdXRXaW5k
b3dDb250cm9sbGVyOwotCi0tIChOU1RleHRJbnB1dENvbnRleHQgKilpbnB1dENvbnRleHQ7Ci0t
IChCT09MKWludGVycHJldEtleUV2ZW50OihOU0V2ZW50ICopZXZlbnQgc3RyaW5nOihOU1N0cmlu
ZyAqKilzdHJpbmc7Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFdlYlRleHRJbnB1dFdpbmRvd0NvbnRy
b2xsZXJfaAotCi0jZW5kaWYgLy8gVVNFKFBMVUdJTl9IT1NUX1BST0NFU1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJUZXh0SW5wdXRXaW5k
b3dDb250cm9sbGVyLm0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9X
ZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDUwNDkyZjEwZWRmYTdlNTJhODAxYTU2OTJmNTEyYWUwMDcwMzg4YTAuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvUGx1Z2lucy9Ib3N0ZWQvV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlci5tCisrKyAvZGV2
L251bGwKQEAgLTEsMTkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2lmIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKQotCi0jaW1wb3J0ICJX
ZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLmgiCi0KLSNpbXBvcnQgPHBhbC9zeXN0ZW0vbWFj
L1dlYlBhbmVsLmg+Ci0KLUBpbnRlcmZhY2UgV2ViVGV4dElucHV0VmlldyA6IE5TVGV4dFZpZXcg
ewotfQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViVGV4dElucHV0VmlldwotCi0tIChOU0Fy
cmF5ICopdmFsaWRBdHRyaWJ1dGVzRm9yTWFya2VkVGV4dAotewotICAgIC8vIExldCBUU00ga25v
dyB0aGF0IGEgYm90dG9tIGlucHV0IHdpbmRvdyB3b3VsZCBiZSBjcmVhdGVkIGZvciBtYXJrZWQg
dGV4dC4KLSAgICBOU0FycmF5ICpyZWd1bGFyQXR0cmlidXRlcyA9IFtzdXBlciB2YWxpZEF0dHJp
YnV0ZXNGb3JNYXJrZWRUZXh0XTsKLSAgICBOU011dGFibGVBcnJheSAqZmxvYXRpbmdXaW5kb3dB
dHRyaWJ1dGVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aEFycmF5OnJlZ3VsYXJBdHRyaWJ1
dGVzXTsKLSAgICBbZmxvYXRpbmdXaW5kb3dBdHRyaWJ1dGVzIGFkZE9iamVjdDpAIl9fTlNVc2Vz
RmxvYXRpbmdJbnB1dFdpbmRvdyJdOwotICAgIHJldHVybiBmbG9hdGluZ1dpbmRvd0F0dHJpYnV0
ZXM7Ci19Ci0KLUBlbmQKLQotQGludGVyZmFjZSBXZWJUZXh0SW5wdXRQYW5lbCA6IFdlYlBhbmVs
IHsKLSAgICBOU1RleHRWaWV3ICpfaW5wdXRUZXh0VmlldzsKLX0KLQotLSAoTlNUZXh0SW5wdXRD
b250ZXh0ICopX2lucHV0Q29udGV4dDsKLS0gKEJPT0wpX2ludGVycHJldEtleUV2ZW50OihOU0V2
ZW50ICopZXZlbnQgc3RyaW5nOihOU1N0cmluZyAqKilzdHJpbmc7Ci0KLUBlbmQKLQotI2RlZmlu
ZSBpbnB1dFdpbmRvd0hlaWdodCAyMAotCi1AaW1wbGVtZW50YXRpb24gV2ViVGV4dElucHV0UGFu
ZWwKLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZh
dWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKLSAgICAKLSAgICBbX2lucHV0VGV4dFZp
ZXcgcmVsZWFzZV07Ci0gICAgCi0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tIChpZClpbml0
Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgCi0gICAgLy8gU2V0IHRoZSBmcmFtZSBzaXplLgotICAgIE5TUmVjdCB2
aXNpYmxlRnJhbWUgPSBbW05TU2NyZWVuIG1haW5TY3JlZW5dIHZpc2libGVGcmFtZV07Ci0gICAg
TlNSZWN0IGZyYW1lID0gTlNNYWtlUmVjdCh2aXNpYmxlRnJhbWUub3JpZ2luLngsIHZpc2libGVG
cmFtZS5vcmlnaW4ueSwgdmlzaWJsZUZyYW1lLnNpemUud2lkdGgsIGlucHV0V2luZG93SGVpZ2h0
KTsKLSAgICAgCi0gICAgW3NlbGYgc2V0RnJhbWU6ZnJhbWUgZGlzcGxheTpOT107Ci0gICAgICAg
IAotICAgIF9pbnB1dFRleHRWaWV3ID0gW1tXZWJUZXh0SW5wdXRWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOltzZWxmLmNvbnRlbnRWaWV3IGZyYW1lXV07Ci0gICAgX2lucHV0VGV4dFZpZXcuYXV0
b3Jlc2l6aW5nTWFzayA9IE5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGUg
fCBOU1ZpZXdNYXhYTWFyZ2luIHwgTlNWaWV3TWluWE1hcmdpbiB8IE5TVmlld01heFlNYXJnaW4g
fCBOU1ZpZXdNaW5ZTWFyZ2luOwotICAgICAgICAKLSAgICBOU1Njcm9sbFZpZXcqIHNjcm9sbFZp
ZXcgPSBbW05TU2Nyb2xsVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbc2VsZi5jb250ZW50Vmll
dyBmcmFtZV1dOwotICAgIHNjcm9sbFZpZXcuZG9jdW1lbnRWaWV3ID0gX2lucHV0VGV4dFZpZXc7
Ci0gICAgc2VsZi5jb250ZW50VmlldyA9IHNjcm9sbFZpZXc7Ci0gICAgW3Njcm9sbFZpZXcgcmVs
ZWFzZV07Ci0gICAgICAgIAotICAgIFtzZWxmIHNldEZsb2F0aW5nUGFuZWw6WUVTXTsKLSAgICAK
LSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNl
bGYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9y
OkBzZWxlY3Rvcihfa2V5Ym9hcmRJbnB1dFNvdXJjZUNoYW5nZWQ6KQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6TlNUZXh0SW5wdXRDb250ZXh0
S2V5Ym9hcmRTZWxlY3Rpb25EaWRDaGFuZ2VOb3RpZmljYXRpb24KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Om5pbF07Ci0KLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAodm9pZClfa2V5Ym9hcmRJbnB1dFNvdXJjZUNoYW5nZWQ6KE5TTm90aWZp
Y2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgW19pbnB1dFRleHRWaWV3IHNldFN0cmluZzpA
IiJdOwotICAgIFtzZWxmIG9yZGVyT3V0Om5pbF07Ci19Ci0KLS0gKEJPT0wpX2ludGVycHJldEtl
eUV2ZW50OihOU0V2ZW50ICopZXZlbnQgc3RyaW5nOihOU1N0cmluZyAqKilzdHJpbmcKLXsKLSAg
ICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIEJPT0wgaGFkTWFya2Vk
VGV4dCA9IFtfaW5wdXRUZXh0VmlldyBoYXNNYXJrZWRUZXh0XTsKLSAgICBBTExPV19ERVBSRUNB
VEVEX0RFQ0xBUkFUSU9OU19FTkQKLQotICAgICpzdHJpbmcgPSBuaWw7Ci0KLSAgICAvLyBMZXQg
VFNNIGtub3cgdGhhdCBhIGJvdHRvbSBpbnB1dCB3aW5kb3cgd291bGQgYmUgY3JlYXRlZCBmb3Ig
bWFya2VkIHRleHQuCi0gICAgLy8gRklYTUU6IENhbiBiZSByZW1vdmVkIG9uY2Ugd2UgY2FuIHJl
bHkgb24gX19OU1VzZXNGbG9hdGluZ0lucHV0V2luZG93IChvciBhIGJldHRlciBBUEkpIGJlaW5n
IGF2YWlsYWJsZSBldmVyeXdoZXJlLgotICAgIElHTk9SRV9XQVJOSU5HU19CRUdJTigiY2FzdC1x
dWFsIikKLSAgICBFdmVudFJlZiBjYXJib25FdmVudCA9IChFdmVudFJlZilbZXZlbnQgZXZlbnRS
ZWZdOwotICAgIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICBpZiAoY2FyYm9uRXZlbnQpIHsKLSAg
ICAgICAgQm9vbGVhbiBpZ25vcmVQQUggPSB0cnVlOwotICAgICAgICBTZXRFdmVudFBhcmFtZXRl
cihjYXJib25FdmVudCwgJ2lQQUgnLCB0eXBlQm9vbGVhbiwgc2l6ZW9mKGlnbm9yZVBBSCksICZp
Z25vcmVQQUgpOwotICAgIH0KLQotICAgIGlmICghW1tfaW5wdXRUZXh0VmlldyBpbnB1dENvbnRl
eHRdIGhhbmRsZUV2ZW50OmV2ZW50XSkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIAotICAgIEFM
TE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgaWYgKFtfaW5wdXRUZXh0Vmll
dyBoYXNNYXJrZWRUZXh0XSkgewotICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9O
U19FTkQKLSAgICAgICAgLy8gRG9uJ3Qgc2hvdyB0aGUgaW5wdXQgbWV0aG9kIHdpbmRvdyBmb3Ig
ZGVhZCBrZXlzCi0gICAgICAgIGlmIChbW2V2ZW50IGNoYXJhY3RlcnNdIGxlbmd0aF0gPiAwKQot
ICAgICAgICAgICAgW3NlbGYgb3JkZXJGcm9udDpuaWxdOwotCi0gICAgICAgIHJldHVybiBZRVM7
Ci0gICAgfQotICAgIAotICAgIGlmIChoYWRNYXJrZWRUZXh0KSB7Ci0gICAgICAgIFtzZWxmIG9y
ZGVyT3V0Om5pbF07Ci0KLSAgICAgICAgTlNTdHJpbmcgKnRleHQgPSBbW19pbnB1dFRleHRWaWV3
IHRleHRTdG9yYWdlXSBzdHJpbmddOwotICAgICAgICBpZiAoW3RleHQgbGVuZ3RoXSA+IDApCi0g
ICAgICAgICAgICAqc3RyaW5nID0gW1t0ZXh0IGNvcHldIGF1dG9yZWxlYXNlXTsKLSAgICB9Ci0g
ICAgICAgICAgICAKLSAgICBbX2lucHV0VGV4dFZpZXcgc2V0U3RyaW5nOkAiIl07Ci0gICAgcmV0
dXJuIGhhZE1hcmtlZFRleHQ7Ci19Ci0KLS0gKE5TVGV4dElucHV0Q29udGV4dCAqKV9pbnB1dENv
bnRleHQKLXsKLSAgICByZXR1cm4gW19pbnB1dFRleHRWaWV3IGlucHV0Q29udGV4dF07Ci19Ci0K
LUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIKLQot
KyAoV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlciAqKXNoYXJlZFRleHRJbnB1dFdpbmRvd0Nv
bnRyb2xsZXIKLXsKLSAgICBzdGF0aWMgV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlciAqdGV4
dElucHV0V2luZG93Q29udHJvbGxlcjsKLSAgICBpZiAoIXRleHRJbnB1dFdpbmRvd0NvbnRyb2xs
ZXIpCi0gICAgICAgIHRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIgPSBbW1dlYlRleHRJbnB1dFdp
bmRvd0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdOwotICAgIAotICAgIHJldHVybiB0ZXh0SW5wdXRX
aW5kb3dDb250cm9sbGVyOwotfQotCi0tIChpZClpbml0Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBp
bml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgX3Bh
bmVsID0gW1tXZWJUZXh0SW5wdXRQYW5lbCBhbGxvY10gaW5pdF07Ci0gICAgCi0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0gICAgICAgIAotLSAoTlNUZXh0SW5wdXRDb250ZXh0ICopaW5wdXRDb250ZXh0
Ci17Ci0gICAgcmV0dXJuIFtfcGFuZWwgX2lucHV0Q29udGV4dF07Ci19Ci0KLS0gKEJPT0wpaW50
ZXJwcmV0S2V5RXZlbnQ6KE5TRXZlbnQgKilldmVudCBzdHJpbmc6KE5TU3RyaW5nICoqKXN0cmlu
ZwotewotICAgIHJldHVybiBbX3BhbmVsIF9pbnRlcnByZXRLZXlFdmVudDpldmVudCBzdHJpbmc6
c3RyaW5nXTsKLX0KLQotQGVuZAotCi0jZW5kaWYgLy8gVVNFKFBMVUdJTl9IT1NUX1BST0NFU1Mp
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViQmFzZU5l
dHNjYXBlUGx1Z2luVmlldy5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJC
YXNlTmV0c2NhcGVQbHVnaW5WaWV3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1
YTk2MWUzNzdlZThmZTJkMDM1ODgyYWM0NTAxOWM2NTlhZGY2ZWMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1
Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSNpbXBvcnQgPENvY29hL0Nv
Y29hLmg+Ci0KLSNpbXBvcnQgIldlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5oIgotI2ltcG9ydCA8
d3RmL0ZvcndhcmQuaD4KLSNpbXBvcnQgPHd0Zi9OYWtlZFB0ci5oPgotI2ltcG9ydCA8d3RmL1Jl
ZlB0ci5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotCi1AY2xhc3MgRE9NRWxlbWVudDsK
LUBjbGFzcyBXZWJEYXRhU291cmNlOwotQGNsYXNzIFdlYkZyYW1lOwotQGNsYXNzIFdlYlZpZXc7
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBIVE1MUGx1Z0luRWxlbWVudDsKLX0K
LQotQGludGVyZmFjZSBXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3IDogTlNWaWV3Ci17Ci0gICAg
UmV0YWluUHRyPFdlYk5ldHNjYXBlUGx1Z2luUGFja2FnZT4gX3BsdWdpblBhY2thZ2U7Ci0gICAg
Ci0gICAgV2ViRnJhbWUgKl93ZWJGcmFtZTsKLSAgICAKLSAgICBpbnQgX21vZGU7Ci0gICAgCi0g
ICAgQk9PTCBfdHJpZWRBbmRGYWlsZWRUb0NyZWF0ZVBsdWdpbjsKLSAgICBCT09MIF9sb2FkTWFu
dWFsbHk7Ci0gICAgQk9PTCBfc2hvdWxkRmlyZVRpbWVyczsKLSAgICBCT09MIF9pc1N0YXJ0ZWQ7
Ci0gICAgQk9PTCBfaGFzRm9jdXM7Ci0gICAgQk9PTCBfaXNDb21wbGV0ZWx5T2JzY3VyZWQ7Ci0g
ICAgQk9PTCBfaXNQcml2YXRlQnJvd3NpbmdFbmFibGVkOwotICAgIEJPT0wgX3NuYXBzaG90dGlu
ZzsKLSAgICAKLSAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQ+IF9lbGVtZW50
OwotICAgIFJldGFpblB0cjxOU1N0cmluZz4gX01JTUVUeXBlOwotICAgIFJldGFpblB0cjxOU1VS
TD4gX2Jhc2VVUkw7Ci0gICAgUmV0YWluUHRyPE5TVVJMPiBfc291cmNlVVJMOwotICAgIFJldGFp
blB0cjxOU0ltYWdlPiBfY2FjaGVkU25hcHNob3Q7Ci0gICAgCi0gICAgTlNUcmFja2luZ1JlY3RU
YWcgX3RyYWNraW5nVGFnOwotfQotCi0tIChpZClpbml0V2l0aEZyYW1lOihOU1JlY3QpcgotICAg
ICAgcGx1Z2luUGFja2FnZTooV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlICopdGhlUGx1Z2luUGFj
a2FnZQotICAgICAgICAgICAgICAgIFVSTDooTlNVUkwgKilVUkwKLSAgICAgICAgICAgIGJhc2VV
Ukw6KE5TVVJMICopYmFzZVVSTAotICAgICAgICAgICBNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1F
Ci0gICAgICBhdHRyaWJ1dGVLZXlzOihOU0FycmF5ICopa2V5cwotICAgIGF0dHJpYnV0ZVZhbHVl
czooTlNBcnJheSAqKXZhbHVlcwotICAgICAgIGxvYWRNYW51YWxseTooQk9PTClsb2FkTWFudWFs
bHkKLSAgICAgICAgICAgIGVsZW1lbnQ6KFJlZlB0cjxXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVu
dD4mJillbGVtZW50OwotCi0tIChXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UgKilwbHVnaW5QYWNr
YWdlOwotCi0tIChOU1VSTCAqKVVSTFdpdGhDU3RyaW5nOihjb25zdCBjaGFyICopVVJMQ1N0cmlu
ZzsKLS0gKE5TTXV0YWJsZVVSTFJlcXVlc3QgKilyZXF1ZXN0V2l0aFVSTENTdHJpbmc6KGNvbnN0
IGNoYXIgKilVUkxDU3RyaW5nOwotCi0vLyBTdWJjbGFzc2VzIG11c3Qgb3ZlcnJpZGUgdGhlc2Uu
Ci0vLyBUaGUgImhhbmRsZSIgcHJlZml4IGlzIG5lZWRlZCB0byBhdm9pZCBvdmVycmlkaW5nIE5T
VmlldyBtZXRob2RzLgotLSAodm9pZCloYW5kbGVNb3VzZU1vdmVkOihOU0V2ZW50ICopZXZlbnQ7
Ci0tICh2b2lkKWhhbmRsZU1vdXNlRW50ZXJlZDooTlNFdmVudCAqKWV2ZW50OwotLSAodm9pZClo
YW5kbGVNb3VzZUV4aXRlZDooTlNFdmVudCAqKWV2ZW50OwotLSAodm9pZClzZXRBdHRyaWJ1dGVL
ZXlzOihOU0FycmF5ICopa2V5cyBhbmRWYWx1ZXM6KE5TQXJyYXkgKil2YWx1ZXM7Ci0tICh2b2lk
KWZvY3VzQ2hhbmdlZDsKLS0gKHZvaWQpdXBkYXRlQW5kU2V0V2luZG93OwotCi0tIChXZWJGcmFt
ZSAqKXdlYkZyYW1lOwotLSAoV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2U7Ci0tIChXZWJWaWV3
ICopd2ViVmlldzsKLS0gKE5TV2luZG93ICopY3VycmVudFdpbmRvdzsKLS0gKE5ha2VkUHRyPFdl
YkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50PillbGVtZW50OwotCi0tICh2b2lkKXJlbW92ZVRyYWNr
aW5nUmVjdDsKLS0gKHZvaWQpcmVzZXRUcmFja2luZ1JlY3Q7Ci0KLS0gKHZvaWQpc3RvcFRpbWVy
czsKLS0gKHZvaWQpc3RhcnRUaW1lcnM7Ci0tICh2b2lkKXJlc3RhcnRUaW1lcnM7Ci0KLS0gKHZv
aWQpc3RhcnQ7Ci0tICh2b2lkKXN0b3A7Ci0KLS0gKHZvaWQpYWRkV2luZG93T2JzZXJ2ZXJzOwot
LSAodm9pZClyZW1vdmVXaW5kb3dPYnNlcnZlcnM7Ci0tIChCT09MKXNob3VsZENsaXBPdXRQbHVn
aW47Ci0KLS0gKEJPT0wpc3VwcG9ydHNTbmFwc2hvdHRpbmc7Ci0tICh2b2lkKWNhY2hlU25hcHNo
b3Q7Ci0tICh2b2lkKWNsZWFyQ2FjaGVkU25hcHNob3Q7Ci0KLS0gKEJPT0wpY29udmVydEZyb21Y
Oihkb3VibGUpc291cmNlWCBhbmRZOihkb3VibGUpc291cmNlWSBzcGFjZTooTlBDb29yZGluYXRl
U3BhY2Upc291cmNlU3BhY2UKLSAgICAgICAgICAgICAgICAgdG9YOihkb3VibGUgKilkZXN0WCBh
bmRZOihkb3VibGUgKilkZXN0WSBzcGFjZTooTlBDb29yZGluYXRlU3BhY2UpZGVzdFNwYWNlOwot
Ci0tICh2b2lkKWludmFsaWRhdGVQbHVnaW5Db250ZW50UmVjdDooTlNSZWN0KXJlY3Q7Ci0KLS0g
KE5TUmVjdClhY3R1YWxWaXNpYmxlUmVjdEluV2luZG93OyAvLyB0YWtlcyB0cmFuc2Zvcm1zIGlu
dG8gYWNjb3VudC4KLQotLSAoQ0FMYXllciAqKXBsdWdpbkxheWVyOwotCi0tIChCT09MKWdldEZv
cm1WYWx1ZTooTlNTdHJpbmcgKiopdmFsdWU7Ci0KLUBlbmQKLQotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLWJvb2wgZ2V0QXV0aGVudGljYXRpb25JbmZvKGNvbnN0IGNoYXIqIHByb3RvY29sU3RyLCBj
b25zdCBjaGFyKiBob3N0U3RyLCBpbnQzMl90IHBvcnQsIGNvbnN0IGNoYXIqIHNjaGVtZVN0ciwg
Y29uc3QgY2hhciogcmVhbG1TdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBXVEY6OkNT
dHJpbmcmIHVzZXJuYW1lLCBXVEY6OkNTdHJpbmcmIHBhc3N3b3JkKTsKLXZvaWQgc2VuZFVzZXJD
aGFuZ2VOb3RpZmljYXRpb25zKCk7Ci19IAotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3
Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2I4NGIyMzQ0ZDE4YjUyNTBiZTBj
ZDJlZmVkNmJhMmMzZDA5ZTY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBl
UGx1Z2luVmlldy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDkwMiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW1wb3J0ICJXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3
LmgiCi0KLSNpbXBvcnQgIk5ldHdvcmtTdG9yYWdlU2Vzc2lvbk1hcC5oIgotI2ltcG9ydCAiV2Vi
RnJhbWVJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViS2l0TG9nZ2luZy5oIgotI2ltcG9ydCAiV2Vi
S2l0TlNTdHJpbmdFeHRyYXMuaCIKLSNpbXBvcnQgIldlYk5TVVJMRXh0cmFzLmgiCi0jaW1wb3J0
ICJXZWJOU1VSTFJlcXVlc3RFeHRyYXMuaCIKLSNpbXBvcnQgIldlYlZpZXcuaCIKLSNpbXBvcnQg
IldlYlZpZXdJbnRlcm5hbC5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5pdGlhbGl6ZVRo
cmVhZGluZy5oPgotI2ltcG9ydCA8V2ViQ29yZS9BdXRoZW50aWNhdGlvbk1hYy5oPgotI2ltcG9y
dCA8V2ViQ29yZS9CaXRtYXBJbWFnZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9DcmVkZW50aWFsLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL0NyZWRlbnRpYWxTdG9yYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L0RvY3VtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0VsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvRnJhbWUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvSFRNTFBsdWdJbkVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
UHJvdGVjdGlvblNwYWNlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlckVtYmVkZGVkT2JqZWN0
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2Vj
dXJpdHlPcmlnaW4uaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUpJVE9wZXJhdGlvbnMuaD4K
LSNpbXBvcnQgPFdlYktpdExlZ2FjeS9ET01Qcml2YXRlLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2Nn
L0NvcmVHcmFwaGljc1NQSS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQg
PHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgotI2ltcG9ydCA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotCi0jZGVmaW5lIExvZ2luV2luZG93RGlkU3dpdGNoRnJvbVVzZXJO
b3RpZmljYXRpb24gICAgQCJXZWJMb2dpbldpbmRvd0RpZFN3aXRjaEZyb21Vc2VyTm90aWZpY2F0
aW9uIgotI2RlZmluZSBMb2dpbldpbmRvd0RpZFN3aXRjaFRvVXNlck5vdGlmaWNhdGlvbiAgICAg
IEAiV2ViTG9naW5XaW5kb3dEaWRTd2l0Y2hUb1VzZXJOb3RpZmljYXRpb24iCi0KLXVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwotCi1AaW1wbGVtZW50YXRpb24gV2ViQmFzZU5ldHNjYXBlUGx1Z2lu
VmlldwotCi0rICh2b2lkKWluaXRpYWxpemUKLXsKLSAgICBKU0M6OmluaXRpYWxpemUoKTsKLSAg
ICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7Ci0gICAgV2ViQ29yZTo6cG9wdWxhdGVKSVRP
cGVyYXRpb25zKCk7Ci0gICAgV2ViS2l0OjpzZW5kVXNlckNoYW5nZU5vdGlmaWNhdGlvbnMoKTsK
LX0KLQotLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lCi0gICAgICBwbHVnaW5QYWNr
YWdlOihXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UgKilwbHVnaW5QYWNrYWdlCi0gICAgICAgICAg
ICAgICAgVVJMOihOU1VSTCAqKVVSTAotICAgICAgICAgICAgYmFzZVVSTDooTlNVUkwgKiliYXNl
VVJMCi0gICAgICAgICAgIE1JTUVUeXBlOihOU1N0cmluZyAqKU1JTUUKLSAgICAgIGF0dHJpYnV0
ZUtleXM6KE5TQXJyYXkgKilrZXlzCi0gICAgYXR0cmlidXRlVmFsdWVzOihOU0FycmF5ICopdmFs
dWVzCi0gICAgICAgbG9hZE1hbnVhbGx5OihCT09MKWxvYWRNYW51YWxseQotICAgICAgICAgICAg
ZWxlbWVudDooUmVmUHRyPFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50PiYmKWVsZW1lbnQKLXsK
LSAgICBzZWxmID0gW3N1cGVyIGluaXRXaXRoRnJhbWU6ZnJhbWVdOwotICAgIGlmICghc2VsZikK
LSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBfcGx1Z2luUGFja2FnZSA9IHBsdWdpblBh
Y2thZ2U7Ci0gICAgX2VsZW1lbnQgPSBXVEZNb3ZlKGVsZW1lbnQpOwotICAgIF9zb3VyY2VVUkwg
PSBhZG9wdE5TKFtVUkwgY29weV0pOwotICAgIF9iYXNlVVJMID0gYWRvcHROUyhbYmFzZVVSTCBj
b3B5XSk7Ci0gICAgX01JTUVUeXBlID0gYWRvcHROUyhbTUlNRSBjb3B5XSk7Ci0KLSAgICBbc2Vs
ZiBzZXRBdHRyaWJ1dGVLZXlzOmtleXMgYW5kVmFsdWVzOnZhbHVlc107Ci0KLSAgICBpZiAobG9h
ZE1hbnVhbGx5KQotICAgICAgICBfbW9kZSA9IE5QX0ZVTEw7Ci0gICAgZWxzZQotICAgICAgICBf
bW9kZSA9IE5QX0VNQkVEOwotICAgIAotICAgIF9sb2FkTWFudWFsbHkgPSBsb2FkTWFudWFsbHk7
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIEFTU0VSVCgh
X2lzU3RhcnRlZCk7Ci0KLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKFdlYk5ldHNjYXBl
UGx1Z2luUGFja2FnZSAqKXBsdWdpblBhY2thZ2UKLXsKLSAgICByZXR1cm4gX3BsdWdpblBhY2th
Z2UuZ2V0KCk7Ci19Ci0gICAgCi0tIChCT09MKWlzRmxpcHBlZAotewotICAgIHJldHVybiBZRVM7
Ci19Ci0KLS0gKE5TVVJMICopVVJMV2l0aENTdHJpbmc6KGNvbnN0IGNoYXIgKiljU3RyaW5nCi17
Ci0gICAgaWYgKCFjU3RyaW5nKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIE5TU3Ry
aW5nICpzdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENTdHJpbmc6Y1N0cmluZyBlbmNvZGlu
ZzpOU0lTT0xhdGluMVN0cmluZ0VuY29kaW5nXTsKLSAgICBzdHJpbmcgPSBbc3RyaW5nIHN0cmlu
Z0J5UmVwbGFjaW5nT2NjdXJyZW5jZXNPZlN0cmluZzpAIlxyIiB3aXRoU3RyaW5nOkAiIl07Ci0g
ICAgc3RyaW5nID0gW3N0cmluZyBzdHJpbmdCeVJlcGxhY2luZ09jY3VycmVuY2VzT2ZTdHJpbmc6
QCJcbiIgd2l0aFN0cmluZzpAIiJdOwotICAgIHJldHVybiBbTlNVUkwgX3dlYl9VUkxXaXRoRGF0
YUFzU3RyaW5nOnN0cmluZyByZWxhdGl2ZVRvVVJMOl9iYXNlVVJMLmdldCgpXTsKLX0KLQotLSAo
TlNNdXRhYmxlVVJMUmVxdWVzdCAqKXJlcXVlc3RXaXRoVVJMQ1N0cmluZzooY29uc3QgY2hhciAq
KVVSTENTdHJpbmcKLXsKLSAgICBOU1VSTCAqVVJMID0gW3NlbGYgVVJMV2l0aENTdHJpbmc6VVJM
Q1N0cmluZ107Ci0gICAgaWYgKCFVUkwpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAg
TlNNdXRhYmxlVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtOU011dGFibGVVUkxSZXF1ZXN0IHJlcXVl
c3RXaXRoVVJMOlVSTF07Ci0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiB3ZWJGcmFtZV0p
OwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgW3JlcXVlc3QgX3dl
Yl9zZXRIVFRQUmVmZXJyZXI6ZnJhbWUtPmxvYWRlcigpLm91dGdvaW5nUmVmZXJyZXIoKV07Ci0g
ICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0KLS8vIE1ldGhvZHMgdGhhdCBzdWJjbGFzc2VzIG11c3Qg
b3ZlcnJpZGUKLS0gKHZvaWQpc2V0QXR0cmlidXRlS2V5czooTlNBcnJheSAqKWtleXMgYW5kVmFs
dWVzOihOU0FycmF5ICopdmFsdWVzCi17Ci0gICAgLy8gVGhpcyBuZWVkcyB0byBiZSBvdmVycmlk
ZGVuIGJ5IHN1YmNsYXNzZXMuCi19Ci0KLS0gKHZvaWQpaGFuZGxlTW91c2VNb3ZlZDooTlNFdmVu
dCAqKWV2ZW50Ci17Ci0gICAgLy8gVGhpcyBuZWVkcyB0byBiZSBvdmVycmlkZGVuIGJ5IHN1YmNs
YXNzZXMuCi19Ci0KLS0gKHZvaWQpaGFuZGxlTW91c2VFbnRlcmVkOihOU0V2ZW50ICopZXZlbnQK
LXsKLSAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KLX0K
LQotLSAodm9pZCloYW5kbGVNb3VzZUV4aXRlZDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgLy8g
VGhpcyBuZWVkcyB0byBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCi19Ci0KLS0gKHZvaWQp
Zm9jdXNDaGFuZ2VkCi17Ci0gICAgLy8gVGhpcyBuZWVkcyB0byBiZSBvdmVycmlkZGVuIGJ5IHN1
YmNsYXNzZXMuCi19Ci0KLS0gKHZvaWQpd2luZG93Rm9jdXNDaGFuZ2VkOihCT09MKWhhc0ZvY3Vz
Ci17Ci0gICAgLy8gVGhpcyBuZWVkcyB0byBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCi19
Ci0KLS0gKEJPT0wpY3JlYXRlUGx1Z2luCi17Ci0gICAgLy8gVGhpcyBuZWVkcyB0byBiZSBvdmVy
cmlkZGVuIGJ5IHN1YmNsYXNzZXMuCi0gICAgcmV0dXJuIE5POwotfQotCi0tICh2b2lkKWxvYWRT
dHJlYW0KLXsKLSAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nl
cy4KLX0KLQotLSAoQk9PTClzaG91bGRTdG9wCi17Ci0gICAgLy8gVGhpcyBuZWVkcyB0byBiZSBv
dmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCi0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAodm9pZClk
ZXN0cm95UGx1Z2luCi17Ci0gICAgLy8gVGhpcyBuZWVkcyB0byBiZSBvdmVycmlkZGVuIGJ5IHN1
YmNsYXNzZXMuCi19Ci0KLS0gKHZvaWQpdXBkYXRlQW5kU2V0V2luZG93Ci17Ci0gICAgLy8gVGhp
cyBuZWVkcyB0byBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCi19Ci0KLS0gKHZvaWQpc2Vu
ZE1vZGlmaWVyRXZlbnRXaXRoS2V5Q29kZTooaW50KWtleUNvZGUgY2hhcmFjdGVyOihjaGFyKWNo
YXJhY3RlcgotewotICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFz
c2VzLgotfQotCi0tICh2b2lkKXByaXZhdGVCcm93c2luZ01vZGVEaWRDaGFuZ2UKLXsKLX0KLQot
LSAodm9pZClyZW1vdmVUcmFja2luZ1JlY3QKLXsKLSAgICBpZiAoX3RyYWNraW5nVGFnKSB7Ci0g
ICAgICAgIFtzZWxmIHJlbW92ZVRyYWNraW5nUmVjdDpfdHJhY2tpbmdUYWddOwotICAgICAgICBf
dHJhY2tpbmdUYWcgPSAwOwotICAgICAgICAKLSAgICAgICAgLy8gRG8gdGhlIGZvbGxvd2luZyBh
ZnRlciBzZXR0aW5nIHRyYWNraW5nVGFnIHRvIDAgc28gd2UgZG9uJ3QgcmUtZW50ZXIuCi0gICAg
ICAgIAotICAgICAgICAvLyBCYWxhbmNlIHRoZSByZXRhaW4gaW4gcmVzZXRUcmFja2luZ1JlY3Qu
IFVzZSBhdXRvcmVsZWFzZSBpbiBjYXNlIHdlIGhvbGQgCi0gICAgICAgIC8vIHRoZSBsYXN0IHJl
ZmVyZW5jZSB0byB0aGUgd2luZG93IGR1cmluZyB0ZWFyLWRvd24sIHRvIGF2b2lkIGNyYXNoaW5n
IEFwcEtpdC4gCi0gICAgICAgIFtbc2VsZiB3aW5kb3ddIGF1dG9yZWxlYXNlXTsKLSAgICB9Ci19
Ci0KLS0gKHZvaWQpcmVzZXRUcmFja2luZ1JlY3QKLXsKLSAgICBbc2VsZiByZW1vdmVUcmFja2lu
Z1JlY3RdOwotICAgIGlmIChfaXNTdGFydGVkKSB7Ci0gICAgICAgIC8vIFJldGFpbiB0aGUgd2lu
ZG93IHNvIHRoYXQgcmVtb3ZlVHJhY2tpbmdSZWN0IGNhbiB3b3JrIGFmdGVyIHRoZSB3aW5kb3cg
aXMgY2xvc2VkLgotICAgICAgICBbW3NlbGYgd2luZG93XSByZXRhaW5dOwotICAgICAgICBfdHJh
Y2tpbmdUYWcgPSBbc2VsZiBhZGRUcmFja2luZ1JlY3Q6W3NlbGYgYm91bmRzXSBvd25lcjpzZWxm
IHVzZXJEYXRhOm5pbCBhc3N1bWVJbnNpZGU6Tk9dOwotICAgIH0KLX0KLQotLSAodm9pZClzdG9w
VGltZXJzCi17Ci0gICAgX3Nob3VsZEZpcmVUaW1lcnMgPSBOTzsKLX0KLQotLSAodm9pZClzdGFy
dFRpbWVycwotewotICAgIF9zaG91bGRGaXJlVGltZXJzID0gWUVTOwotfQotCi0tICh2b2lkKXJl
c3RhcnRUaW1lcnMKLXsKLSAgICBbc2VsZiBzdG9wVGltZXJzXTsKLSAgICAKLSAgICBpZiAoIV9p
c1N0YXJ0ZWQgfHwgW1tzZWxmIHdpbmRvd10gaXNNaW5pYXR1cml6ZWRdKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgW3NlbGYgc3RhcnRUaW1lcnNdOwotfQotCi0tIChOU1JlY3QpX3dpbmRv
d0NsaXBSZWN0Ci17Ci0gICAgYXV0byogcmVuZGVyZXIgPSBfZWxlbWVudC0+cmVuZGVyZXIoKTsK
LSAgICBpZiAoIWlzPFJlbmRlckVtYmVkZGVkT2JqZWN0PihyZW5kZXJlcikpCi0gICAgICAgIHJl
dHVybiBOU1plcm9SZWN0OwotICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJFbWJlZGRlZE9iamVj
dD4oKnJlbmRlcmVyKS53aW5kb3dDbGlwUmVjdCgpOwotfQotCi0tIChOU1JlY3QpdmlzaWJsZVJl
Y3QKLXsKLSAgICAvLyBXZWJDb3JlIG1heSBpbXBvc2UgYW4gYWRkaXRpb25hbCBjbGlwICh2aWEg
Q1NTIG92ZXJmbG93IG9yIGNsaXAgcHJvcGVydGllcykuICBGZXRjaAotICAgIC8vIHRoYXQgY2xp
cCBub3cuICAgIAotICAgIHJldHVybiBOU0ludGVyc2VjdGlvblJlY3QoW3NlbGYgY29udmVydFJl
Y3Q6W3NlbGYgX3dpbmRvd0NsaXBSZWN0XSBmcm9tVmlldzpuaWxdLCBbc3VwZXIgdmlzaWJsZVJl
Y3RdKTsKLX0KLQotLSAoQk9PTClhY2NlcHRzRmlyc3RSZXNwb25kZXIKLXsKLSAgICByZXR1cm4g
WUVTOwotfQotCi0tICh2b2lkKXNlbmRBY3RpdmF0ZUV2ZW50OihCT09MKWFjdGl2YXRlCi17Ci0g
ICAgaWYgKCFfaXNTdGFydGVkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgW3NlbGYgd2lu
ZG93Rm9jdXNDaGFuZ2VkOmFjdGl2YXRlXTsKLX0KLQotLSAodm9pZClzZXRIYXNGb2N1czooQk9P
TClmbGFnCi17Ci0gICAgaWYgKCFfaXNTdGFydGVkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgaWYgKF9oYXNGb2N1cyA9PSBmbGFnKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgX2hh
c0ZvY3VzID0gZmxhZzsKLSAgICAKLSAgICBbc2VsZiBmb2N1c0NoYW5nZWRdOwotfQotCi0tICh2
b2lkKWFkZFdpbmRvd09ic2VydmVycwotewotICAgIEFTU0VSVChbc2VsZiB3aW5kb3ddKTsKLSAg
ICAKLSAgICBOU1dpbmRvdyAqdGhlV2luZG93ID0gW3NlbGYgd2luZG93XTsKLSAgICAKLSAgICBO
U05vdGlmaWNhdGlvbkNlbnRlciAqbm90aWZpY2F0aW9uQ2VudGVyID0gW05TTm90aWZpY2F0aW9u
Q2VudGVyIGRlZmF1bHRDZW50ZXJdOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2
ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Iod2luZG93V2lsbENsb3NlOikgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZTpOU1dpbmRvd1dpbGxDbG9zZU5vdGlmaWNhdGlvbiBv
YmplY3Q6dGhlV2luZG93XTsgCi0gICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpz
ZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih3aW5kb3dCZWNhbWVLZXk6KQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWU6TlNXaW5kb3dEaWRCZWNvbWVLZXlOb3RpZmljYXRpb24gb2Jq
ZWN0OnRoZVdpbmRvd107Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxm
IHNlbGVjdG9yOkBzZWxlY3Rvcih3aW5kb3dSZXNpZ25lZEtleTopCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmFtZTpOU1dpbmRvd0RpZFJlc2lnbktleU5vdGlmaWNhdGlvbiBvYmpl
Y3Q6dGhlV2luZG93XTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYg
c2VsZWN0b3I6QHNlbGVjdG9yKHdpbmRvd0RpZE1pbmlhdHVyaXplOikKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuYW1lOk5TV2luZG93RGlkTWluaWF0dXJpemVOb3RpZmljYXRpb24g
b2JqZWN0OnRoZVdpbmRvd107Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpz
ZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih3aW5kb3dEaWREZW1pbmlhdHVyaXplOikKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lOk5TV2luZG93RGlkRGVtaW5pYXR1cml6ZU5vdGlm
aWNhdGlvbiBvYmplY3Q6dGhlV2luZG93XTsKLSAgICAKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVy
IGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGxvZ2luV2luZG93RGlkU3dpdGNo
RnJvbVVzZXI6KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6TG9naW5XaW5k
b3dEaWRTd2l0Y2hGcm9tVXNlck5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKLSAgICBbbm90aWZp
Y2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGxvZ2luV2lu
ZG93RGlkU3dpdGNoVG9Vc2VyOikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1l
OkxvZ2luV2luZG93RGlkU3dpdGNoVG9Vc2VyTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwotfQot
Ci0tICh2b2lkKXJlbW92ZVdpbmRvd09ic2VydmVycwotewotICAgIE5TTm90aWZpY2F0aW9uQ2Vu
dGVyICpub3RpZmljYXRpb25DZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl07Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6
TlNXaW5kb3dXaWxsQ2xvc2VOb3RpZmljYXRpb24gICAgICAgIG9iamVjdDpuaWxdOyAKLSAgICBb
bm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpOU1dpbmRvd0RpZEJl
Y29tZUtleU5vdGlmaWNhdGlvbiAgICAgb2JqZWN0Om5pbF07Ci0gICAgW25vdGlmaWNhdGlvbkNl
bnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNXaW5kb3dEaWRSZXNpZ25LZXlOb3RpZmlj
YXRpb24gICAgIG9iamVjdDpuaWxdOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2Jz
ZXJ2ZXI6c2VsZiBuYW1lOk5TV2luZG93RGlkTWluaWF0dXJpemVOb3RpZmljYXRpb24gICBvYmpl
Y3Q6bmlsXTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFt
ZTpOU1dpbmRvd0RpZERlbWluaWF0dXJpemVOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07Ci0gICAg
W25vdGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6TG9naW5XaW5kb3dE
aWRTd2l0Y2hGcm9tVXNlck5vdGlmaWNhdGlvbiAgIG9iamVjdDpuaWxdOwotICAgIFtub3RpZmlj
YXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOkxvZ2luV2luZG93RGlkU3dpdGNo
VG9Vc2VyTm90aWZpY2F0aW9uICAgICBvYmplY3Q6bmlsXTsKLX0KLQotLSAodm9pZClzdGFydAot
ewotICAgIEFTU0VSVChbc2VsZiBjdXJyZW50V2luZG93XSk7Ci0gICAgCi0gICAgaWYgKF9pc1N0
YXJ0ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoX3RyaWVkQW5kRmFpbGVkVG9D
cmVhdGVQbHVnaW4pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQoW3NlbGYgd2Vi
Vmlld10pOwotICAgIAotICAgIGlmICghW1tbc2VsZiB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gYXJl
UGx1Z0luc0VuYWJsZWRdKQotICAgICAgICByZXR1cm47Ci0gICAKLSAgICBGcmFtZSogZnJhbWUg
PSBjb3JlKFtzZWxmIHdlYkZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIGJvb2wgd2FzRGVmZXJyaW5nID0gcGFnZS0+ZGVmZXJzTG9h
ZGluZygpOwotICAgIGlmICghd2FzRGVmZXJyaW5nKQotICAgICAgICBwYWdlLT5zZXREZWZlcnNM
b2FkaW5nKHRydWUpOwotCi0gICAgQk9PTCByZXN1bHQgPSBbc2VsZiBjcmVhdGVQbHVnaW5dOwot
ICAgIAotICAgIGlmICghd2FzRGVmZXJyaW5nKQotICAgICAgICBwYWdlLT5zZXREZWZlcnNMb2Fk
aW5nKGZhbHNlKTsKLQotICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIF90cmllZEFuZEZhaWxl
ZFRvQ3JlYXRlUGx1Z2luID0gWUVTOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAg
IF9pc1N0YXJ0ZWQgPSBZRVM7Ci0KLSAgICBbW3NlbGYgd2ViVmlld10gYWRkUGx1Z2luSW5zdGFu
Y2VWaWV3OnNlbGZdOwotCi0gICAgaWYgKFtzZWxmIGN1cnJlbnRXaW5kb3ddKQotICAgICAgICBb
c2VsZiB1cGRhdGVBbmRTZXRXaW5kb3ddOwotCi0gICAgaWYgKFtzZWxmIHdpbmRvd10pIHsKLSAg
ICAgICAgW3NlbGYgYWRkV2luZG93T2JzZXJ2ZXJzXTsKLSAgICAgICAgaWYgKFtbc2VsZiB3aW5k
b3ddIGlzS2V5V2luZG93XSkgewotICAgICAgICAgICAgW3NlbGYgc2VuZEFjdGl2YXRlRXZlbnQ6
WUVTXTsKLSAgICAgICAgfQotICAgICAgICBbc2VsZiByZXN0YXJ0VGltZXJzXTsKLSAgICB9Ci0g
ICAgCi0gICAgW3NlbGYgcmVzZXRUcmFja2luZ1JlY3RdOwotICAgIAotICAgIFtzZWxmIGxvYWRT
dHJlYW1dOwotfQotCi0tICh2b2lkKXN0b3AKLXsKLSAgICBpZiAoIVtzZWxmIHNob3VsZFN0b3Bd
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgW3NlbGYgcmVtb3ZlVHJhY2tpbmdSZWN0XTsK
LSAgICAKLSAgICBpZiAoIV9pc1N0YXJ0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9pc1N0
YXJ0ZWQgPSBOTzsKLSAgICAKLSAgICBbW3NlbGYgd2ViVmlld10gcmVtb3ZlUGx1Z2luSW5zdGFu
Y2VWaWV3OnNlbGZdOwotICAgIAotICAgIC8vIFN0b3AgdGhlIHRpbWVycwotICAgIFtzZWxmIHN0
b3BUaW1lcnNdOwotICAgIAotICAgIC8vIFN0b3Agbm90aWZpY2F0aW9ucyBhbmQgY2FsbGJhY2tz
LgotICAgIFtzZWxmIHJlbW92ZVdpbmRvd09ic2VydmVyc107Ci0gICAgCi0gICAgW3NlbGYgZGVz
dHJveVBsdWdpbl07Ci19Ci0KLS0gKEJPT0wpc2hvdWxkQ2xpcE91dFBsdWdpbgotewotICAgIE5T
V2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOwotICAgIHJldHVybiAhd2luZG93IHx8IFt3
aW5kb3cgaXNNaW5pYXR1cml6ZWRdIHx8IFtOU0FwcCBpc0hpZGRlbl0gfHwgIVtzZWxmIGlzRGVz
Y2VuZGFudE9mOltbc2VsZiB3aW5kb3ddIGNvbnRlbnRWaWV3XV0gfHwgW3NlbGYgaXNIaWRkZW5P
ckhhc0hpZGRlbkFuY2VzdG9yXTsKLX0KLQotLSAoQk9PTClzdXBwb3J0c1NuYXBzaG90dGluZwot
ewotICAgIHJldHVybiBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgc3VwcG9ydHNTbmFwc2hvdHRpbmdd
OwotfQotCi0tICh2b2lkKWNhY2hlU25hcHNob3QKLXsKLSAgICBOU1NpemUgYm91bmRzU2l6ZSA9
IFtzZWxmIGJvdW5kc10uc2l6ZTsKLSAgICBpZiAoIWJvdW5kc1NpemUuaGVpZ2h0IHx8ICFib3Vu
ZHNTaXplLndpZHRoKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHNuYXBzaG90ID0gYWRv
cHROUyhbW05TSW1hZ2UgYWxsb2NdIGluaXRXaXRoU2l6ZTpib3VuZHNTaXplXSk7Ci0gICAgICAg
IAotICAgIF9zbmFwc2hvdHRpbmcgPSBZRVM7Ci0gICAgW3NuYXBzaG90IGxvY2tGb2N1c107Ci0g
ICAgW3NlbGYgZHJhd1JlY3Q6W3NlbGYgYm91bmRzXV07Ci0gICAgW3NuYXBzaG90IHVubG9ja0Zv
Y3VzXTsKLSAgICBfc25hcHNob3R0aW5nID0gTk87Ci0gICAgCi0gICAgX2NhY2hlZFNuYXBzaG90
ID0gV1RGTW92ZShzbmFwc2hvdCk7Ci19Ci0KLS0gKHZvaWQpY2xlYXJDYWNoZWRTbmFwc2hvdAot
ewotICAgIF9jYWNoZWRTbmFwc2hvdC5jbGVhcigpOwotfQotCi0tICh2b2lkKXZpZXdXaWxsTW92
ZVRvV2luZG93OihOU1dpbmRvdyAqKW5ld1dpbmRvdwotewotICAgIC8vIFdlIG11c3QgcmVtb3Zl
IHRoZSB0cmFja2luZyByZWN0IGJlZm9yZSB3ZSBtb3ZlIHRvIHRoZSBuZXcgd2luZG93LgotICAg
IC8vIE9uY2Ugd2UgbW92ZSB0byB0aGUgbmV3IHdpbmRvdywgaXQgd2lsbCBiZSB0b28gbGF0ZS4K
LSAgICBbc2VsZiByZW1vdmVUcmFja2luZ1JlY3RdOwotICAgIFtzZWxmIHJlbW92ZVdpbmRvd09i
c2VydmVyc107Ci0gICAgCi0gICAgLy8gV29ya2Fyb3VuZCBmb3I6IDxyZGFyOi8vcHJvYmxlbS8z
ODIyODcxPiByZXNpZ25GaXJzdFJlc3BvbmRlciBpcyBub3Qgc2VudCB0byBmaXJzdCByZXNwb25k
ZXIgdmlldyB3aGVuIGl0IGlzIHJlbW92ZWQgZnJvbSB0aGUgd2luZG93Ci0gICAgW3NlbGYgc2V0
SGFzRm9jdXM6Tk9dOwotICAgIAotICAgIGlmICghbmV3V2luZG93KSB7Ci0gICAgICAgIGlmIChb
W3NlbGYgd2ViVmlld10gaG9zdFdpbmRvd10pIHsKLSAgICAgICAgICAgIC8vIFZpZXcgd2lsbCBi
ZSBtb3ZlZCBvdXQgb2YgdGhlIGFjdHVhbCB3aW5kb3cgYnV0IGl0IHN0aWxsIGhhcyBhIGhvc3Qg
d2luZG93LgotICAgICAgICAgICAgW3NlbGYgc3RvcFRpbWVyc107Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAvLyBWaWV3IHdpbGwgaGF2ZSBubyBhc3NvY2lhdGVkIHdpbmRvd3MuCi0g
ICAgICAgICAgICBbc2VsZiBzdG9wXTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gU3Rv
cCBvYnNlcnZpbmcgV2ViUHJlZmVyZW5jZXNDaGFuZ2VkSW50ZXJuYWxOb3RpZmljYXRpb24gLS0g
d2Ugb25seSBuZWVkIHRvIG9ic2VydmUgdGhpcyB3aGVuIGluc3RhbGxlZCBpbiB0aGUgdmlldyBo
aWVyYXJjaHkuCi0gICAgICAgICAgICAvLyBXaGVuIG5vdCBpbiB0aGUgdmlldyBoaWVyYXJjaHks
IC12aWV3V2lsbE1vdmVUb1dpbmRvdzogYW5kIC12aWV3RGlkTW92ZVRvV2luZG93IHdpbGwgc3Rh
cnQvc3RvcCB0aGUgcGx1Z2luIGFzIG5lZWRlZC4KLSAgICAgICAgICAgIFtbTlNOb3RpZmljYXRp
b25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOldlYlByZWZl
cmVuY2VzQ2hhbmdlZEludGVybmFsTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwotICAgICAgICB9
Ci0gICAgfQotfQotCi0tICh2b2lkKXZpZXdXaWxsTW92ZVRvU3VwZXJ2aWV3OihOU1ZpZXcgKilu
ZXdTdXBlcnZpZXcKLXsKLSAgICBpZiAoIW5ld1N1cGVydmlldykgewotICAgICAgICAvLyBTdG9w
IHRoZSBwbHVnLWluIHdoZW4gaXQgaXMgcmVtb3ZlZCBmcm9tIGl0cyBzdXBlcnZpZXcuICBJdCBp
cyBub3Qgc3VmZmljaWVudCB0byBkbyB0aGlzIGluIC12aWV3V2lsbE1vdmVUb1dpbmRvdzpuaWws
IGJlY2F1c2UKLSAgICAgICAgLy8gdGhlIFdlYlZpZXcgbWlnaHQgc3RpbGwgaGFzIGEgaG9zdFdp
bmRvdyBhdCB0aGF0IHBvaW50LCB3aGljaCBwcmV2ZW50cyB0aGUgcGx1Zy1pbiBmcm9tIGJlaW5n
IGRlc3Ryb3llZC4KLSAgICAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBzdGFydCB0aGUgcGx1
Zy1pbiB3aGVuIG1vdmluZyBpbnRvIGEgc3VwZXJ2aWV3LiAgLXZpZXdEaWRNb3ZlVG9XaW5kb3cg
dGFrZXMgY2FyZSBvZiB0aGF0LgotICAgICAgICBbc2VsZiBzdG9wXTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIFN0b3Agb2JzZXJ2aW5nIFdlYlByZWZlcmVuY2VzQ2hhbmdlZEludGVybmFsTm90aWZp
Y2F0aW9uIC0tIHdlIG9ubHkgbmVlZCB0byBvYnNlcnZlIHRoaXMgd2hlbiBpbnN0YWxsZWQgaW4g
dGhlIHZpZXcgaGllcmFyY2h5LgotICAgICAgICAvLyBXaGVuIG5vdCBpbiB0aGUgdmlldyBoaWVy
YXJjaHksIC12aWV3V2lsbE1vdmVUb1dpbmRvdzogYW5kIC12aWV3RGlkTW92ZVRvV2luZG93IHdp
bGwgc3RhcnQvc3RvcCB0aGUgcGx1Z2luIGFzIG5lZWRlZC4KLSAgICAgICAgW1tOU05vdGlmaWNh
dGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6V2ViUHJl
ZmVyZW5jZXNDaGFuZ2VkSW50ZXJuYWxOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07Ci0gICAgfQot
fQotCi0tICh2b2lkKXZpZXdEaWRNb3ZlVG9XaW5kb3cKLXsKLSAgICBbc2VsZiByZXNldFRyYWNr
aW5nUmVjdF07Ci0gICAgCi0gICAgaWYgKFtzZWxmIHdpbmRvd10pIHsKLSAgICAgICAgLy8gV2hp
bGUgaW4gdGhlIHZpZXcgaGllcmFyY2h5LCBvYnNlcnZlIFdlYlByZWZlcmVuY2VzQ2hhbmdlZElu
dGVybmFsTm90aWZpY2F0aW9uIHNvIHRoYXQgd2UgY2FuIHN0YXJ0L3N0b3AgZGVwZW5kaW5nCi0g
ICAgICAgIC8vIG9uIHdoZXRoZXIgcGx1Z2lucyBhcmUgZW5hYmxlZC4KLSAgICAgICAgW1tOU05v
dGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3I6QHNlbGVj
dG9yKHByZWZlcmVuY2VzSGF2ZUNoYW5nZWQ6KQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOldlYlByZWZlcmVuY2VzQ2hhbmdlZEludGVy
bmFsTm90aWZpY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvYmplY3Q6bmlsXTsKLQotICAgICAgICBfaXNQcml2YXRlQnJvd3NpbmdFbmFi
bGVkID0gW1tbc2VsZiB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gcHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZF07Ci0gICAgICAgIAotICAgICAgICAvLyBWaWV3IG1vdmVkIHRvIGFuIGFjdHVhbCB3aW5kb3cu
IFN0YXJ0IGl0IGlmIG5vdCBhbHJlYWR5IHN0YXJ0ZWQuCi0gICAgICAgIFtzZWxmIHN0YXJ0XTsK
LQotICAgICAgICAvLyBTdGFydGluZyB0aGUgcGx1Zy1pbiBjYW4gcmVzdWx0IGluIGl0IHJlbW92
aW5nIGl0c2VsZiBmcm9tIHRoZSB3aW5kb3cgc28gd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSdy
ZSBzdGlsbCBpbgotICAgICAgICAvLyBwbGFjZSBiZWZvcmUgZG9pbmcgYW55dGhpbmcgdGhhdCBy
ZXF1aXJlcyBhIHdpbmRvdy4KLSAgICAgICAgaWYgKFtzZWxmIHdpbmRvd10pIHsKLSAgICAgICAg
ICAgIFtzZWxmIHJlc3RhcnRUaW1lcnNdOwotICAgICAgICAgICAgW3NlbGYgYWRkV2luZG93T2Jz
ZXJ2ZXJzXTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoW1tzZWxmIHdlYlZpZXddIGhvc3RX
aW5kb3ddKSB7Ci0gICAgICAgIC8vIFZpZXcgbW92ZWQgb3V0IG9mIGFuIGFjdHVhbCB3aW5kb3cs
IGJ1dCBzdGlsbCBoYXMgYSBob3N0IHdpbmRvdy4KLSAgICAgICAgLy8gQ2FsbCBzZXRXaW5kb3cg
dG8gZXhwbGljaXRseSAiY2xpcCBvdXQiIHRoZSBwbHVnLWluIGZyb20gc2lnaHQuCi0gICAgICAg
IC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIHRvIGRvIHRoaXMgd2hlcmUgd2UgY2FsbCBzdG9w
TnVsbEV2ZW50cyBpbiB2aWV3V2lsbE1vdmVUb1dpbmRvdy4KLSAgICAgICAgW3NlbGYgdXBkYXRl
QW5kU2V0V2luZG93XTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpdmlld1dpbGxNb3ZlVG9Ib3N0V2lu
ZG93OihOU1dpbmRvdyAqKWhvc3RXaW5kb3cKLXsKLSAgICBpZiAoIWhvc3RXaW5kb3cgJiYgIVtz
ZWxmIHdpbmRvd10pIHsKLSAgICAgICAgLy8gVmlldyB3aWxsIGhhdmUgbm8gYXNzb2NpYXRlZCB3
aW5kb3dzLgotICAgICAgICBbc2VsZiBzdG9wXTsKLSAgICAgICAgCi0gICAgICAgIC8vIFJlbW92
ZSBXZWJQcmVmZXJlbmNlc0NoYW5nZWRJbnRlcm5hbE5vdGlmaWNhdGlvbiBvYnNlcnZlciAtLSB3
ZSB3aWxsIG9ic2VydmUgb25jZSBhZ2FpbiB3aGVuIHdlIG1vdmUgYmFjayBpbnRvIHRoZSB3aW5k
b3cKLSAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVP
YnNlcnZlcjpzZWxmIG5hbWU6V2ViUHJlZmVyZW5jZXNDaGFuZ2VkSW50ZXJuYWxOb3RpZmljYXRp
b24gb2JqZWN0Om5pbF07Ci0gICAgfQotfQotCi0tICh2b2lkKXZpZXdEaWRNb3ZlVG9Ib3N0V2lu
ZG93Ci17Ci0gICAgaWYgKFtbc2VsZiB3ZWJWaWV3XSBob3N0V2luZG93XSkgewotICAgICAgICAv
LyBWaWV3IG5vdyBoYXMgYW4gYXNzb2NpYXRlZCB3aW5kb3cuIFN0YXJ0IGl0IGlmIG5vdCBhbHJl
YWR5IHN0YXJ0ZWQuCi0gICAgICAgIFtzZWxmIHN0YXJ0XTsKLSAgICB9Ci19Ci0KLS8vIE1BUks6
IE5PVElGSUNBVElPTlMKLQotLSAodm9pZCl3aW5kb3dXaWxsQ2xvc2U6KE5TTm90aWZpY2F0aW9u
ICopbm90aWZpY2F0aW9uIAotewotICAgIFtzZWxmIHN0b3BdOyAKLX0gCi0KLS0gKHZvaWQpd2lu
ZG93QmVjYW1lS2V5OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIFtzZWxm
IHNlbmRBY3RpdmF0ZUV2ZW50OllFU107Ci0gICAgW3NlbGYgaW52YWxpZGF0ZVBsdWdpbkNvbnRl
bnRSZWN0OltzZWxmIGJvdW5kc11dOwotICAgIFtzZWxmIHJlc3RhcnRUaW1lcnNdOwotfQotCi0t
ICh2b2lkKXdpbmRvd1Jlc2lnbmVkS2V5OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgot
ewotICAgIFtzZWxmIHNlbmRBY3RpdmF0ZUV2ZW50Ok5PXTsKLSAgICBbc2VsZiBpbnZhbGlkYXRl
UGx1Z2luQ29udGVudFJlY3Q6W3NlbGYgYm91bmRzXV07Ci0gICAgW3NlbGYgcmVzdGFydFRpbWVy
c107Ci19Ci0KLS0gKHZvaWQpd2luZG93RGlkTWluaWF0dXJpemU6KE5TTm90aWZpY2F0aW9uICop
bm90aWZpY2F0aW9uCi17Ci0gICAgW3NlbGYgc3RvcFRpbWVyc107Ci19Ci0KLS0gKHZvaWQpd2lu
ZG93RGlkRGVtaW5pYXR1cml6ZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAg
ICBbc2VsZiByZXN0YXJ0VGltZXJzXTsKLX0KLQotLSAodm9pZClsb2dpbldpbmRvd0RpZFN3aXRj
aEZyb21Vc2VyOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIFtzZWxmIHN0
b3BUaW1lcnNdOwotfQotCi0tKHZvaWQpbG9naW5XaW5kb3dEaWRTd2l0Y2hUb1VzZXI6KE5TTm90
aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgW3NlbGYgcmVzdGFydFRpbWVyc107Ci19
Ci0KLS0gKHZvaWQpcHJlZmVyZW5jZXNIYXZlQ2hhbmdlZDooTlNOb3RpZmljYXRpb24gKilub3Rp
ZmljYXRpb24KLXsKLSAgICBXZWJQcmVmZXJlbmNlcyAqcHJlZmVyZW5jZXMgPSBbW3NlbGYgd2Vi
Vmlld10gcHJlZmVyZW5jZXNdOwotCi0gICAgaWYgKFtub3RpZmljYXRpb24gb2JqZWN0XSAhPSBw
cmVmZXJlbmNlcykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEJPT0wgYXJlUGx1Z0luc0Vu
YWJsZWQgPSBbcHJlZmVyZW5jZXMgYXJlUGx1Z0luc0VuYWJsZWRdOwotICAgIGlmIChfaXNTdGFy
dGVkICE9IGFyZVBsdWdJbnNFbmFibGVkKSB7Ci0gICAgICAgIGlmIChhcmVQbHVnSW5zRW5hYmxl
ZCkgewotICAgICAgICAgICAgaWYgKFtzZWxmIGN1cnJlbnRXaW5kb3ddKSB7Ci0gICAgICAgICAg
ICAgICAgW3NlbGYgc3RhcnRdOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgW3NlbGYgc3RvcF07Ci0gICAgICAgICAgICBbc2VsZiBpbnZhbGlkYXRlUGx1Z2lu
Q29udGVudFJlY3Q6W3NlbGYgYm91bmRzXV07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAg
Qk9PTCBpc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQgPSBbcHJlZmVyZW5jZXMgcHJpdmF0ZUJyb3dz
aW5nRW5hYmxlZF07Ci0gICAgaWYgKGlzUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCAhPSBfaXNQcml2
YXRlQnJvd3NpbmdFbmFibGVkKSB7Ci0gICAgICAgIF9pc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQg
PSBpc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQ7Ci0gICAgICAgIFtzZWxmIHByaXZhdGVCcm93c2lu
Z01vZGVEaWRDaGFuZ2VdOwotICAgIH0KLX0KLQotQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRB
VElPTlNfQkVHSU4KLS0gKHZvaWQpcmVuZXdHU3RhdGUKLUFMTE9XX0RFUFJFQ0FURURfSU1QTEVN
RU5UQVRJT05TX0VORAotewotICAgIFtzdXBlciByZW5ld0dTdGF0ZV07Ci0gICAgCi0gICAgLy8g
LXJlbmV3R1N0YXRlIGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgdmlldydzIGdlb21ldHJ5IGNoYW5n
ZXMuICBJdCdzIGEgbGl0dGxlIGhhY2t5IHRvIG92ZXJyaWRlIHRoaXMgbWV0aG9kLCBidXQKLSAg
ICAvLyBtdWNoIHNhZmVyIHRoYW4gd2Fsa2luZyB1cCB0aGUgdmlldyBoaWVyYXJjaHkgYW5kIG9i
c2VydmluZyBmcmFtZS9ib3VuZHMgY2hhbmdlZCBub3RpZmljYXRpb25zLCBzaW5jZSB5b3UgZG9u
J3QKLSAgICAvLyBoYXZlIHRvIHRyYWNrIHN1YnNlcXVlbnQgY2hhbmdlcyB0byB0aGUgdmlldyBo
aWVyYXJjaHkgYW5kIGFkZC9yZW1vdmUgbm90aWZpY2F0aW9uIG9ic2VydmVycy4KLSAgICAvLyBO
U09wZW5HTFZpZXcgdXNlcyB0aGUgZXhhY3Qgc2FtZSB0ZWNobmlxdWUgdG8gcmVzaGFwZSBpdHMg
T3BlbkdMIHN1cmZhY2UuCi0gICAgCi0gICAgLy8gQWxsIG9mIHRoZSB3b3JrIHRoaXMgbWV0aG9k
IGRvZXMgbWF5IHNhZmVseSBiZSBza2lwcGVkIGlmIHRoZSB2aWV3IGlzIG5vdCBpbiBhIHdpbmRv
dy4gIFdoZW4gdGhlIHZpZXcKLSAgICAvLyBpcyBtb3ZlZCBiYWNrIGludG8gYSB3aW5kb3csIGV2
ZXJ5dGhpbmcgc2hvdWxkIGJlIHNldCB1cCBjb3JyZWN0bHkuCi0gICAgaWYgKCFbc2VsZiB3aW5k
b3ddKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgW3NlbGYgdXBkYXRlQW5kU2V0V2luZG93
XTsKLSAgICAKLSAgICBbc2VsZiByZXNldFRyYWNraW5nUmVjdF07Ci0gICAgCi0gICAgLy8gQ2hl
Y2sgdG8gc2VlIGlmIHRoZSBwbHVnaW4gdmlldyBpcyBjb21wbGV0ZWx5IG9ic2N1cmVkIChzY3Jv
bGxlZCBvdXQgb2YgdmlldywgZm9yIGV4YW1wbGUpLgotICAgIC8vIEZvciBwZXJmb3JtYW5jZSBy
ZWFzb25zLCB3ZSBzZW5kIG51bGwgZXZlbnRzIGF0IGEgbG93ZXIgcmF0ZSB0byBwbHVnaW5zIHdo
aWNoIGFyZSBvYnNjdXJlZC4KLSAgICBCT09MIG9sZElzT2JzY3VyZWQgPSBfaXNDb21wbGV0ZWx5
T2JzY3VyZWQ7Ci0gICAgX2lzQ29tcGxldGVseU9ic2N1cmVkID0gTlNJc0VtcHR5UmVjdChbc2Vs
ZiB2aXNpYmxlUmVjdF0pOwotICAgIGlmIChfaXNDb21wbGV0ZWx5T2JzY3VyZWQgIT0gb2xkSXNP
YnNjdXJlZCkKLSAgICAgICAgW3NlbGYgcmVzdGFydFRpbWVyc107Ci19Ci0KLS0gKEJPT0wpYmVj
b21lRmlyc3RSZXNwb25kZXIKLXsKLSAgICBbc2VsZiBzZXRIYXNGb2N1czpZRVNdOwotICAgIHJl
dHVybiBZRVM7Ci19Ci0KLS0gKEJPT0wpcmVzaWduRmlyc3RSZXNwb25kZXIKLXsKLSAgICBbc2Vs
ZiBzZXRIYXNGb2N1czpOT107ICAgIAotICAgIHJldHVybiBZRVM7Ci19Ci0KLS0gKFdlYkRhdGFT
b3VyY2UgKilkYXRhU291cmNlCi17Ci0gICAgcmV0dXJuIFtbc2VsZiB3ZWJGcmFtZV0gX2RhdGFT
b3VyY2VdOwotfQotCi0tIChXZWJGcmFtZSAqKXdlYkZyYW1lCi17Ci0gICAgcmV0dXJuIGtpdChf
ZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpKTsKLX0KLQotLSAoV2ViVmlldyAqKXdlYlZpZXcK
LXsKLSAgICByZXR1cm4gW1tzZWxmIHdlYkZyYW1lXSB3ZWJWaWV3XTsKLX0KLQotLSAoTlNXaW5k
b3cgKiljdXJyZW50V2luZG93Ci17Ci0gICAgcmV0dXJuIFtzZWxmIHdpbmRvd10gPyBbc2VsZiB3
aW5kb3ddIDogW1tzZWxmIHdlYlZpZXddIGhvc3RXaW5kb3ddOwotfQotCi0tIChOYWtlZFB0cjxX
ZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudD4pZWxlbWVudAotewotICAgIHJldHVybiBfZWxlbWVu
dC5nZXQoKTsKLX0KLQotLSAodm9pZCljdXQ6KGlkKXNlbmRlcgotewotICAgIFtzZWxmIHNlbmRN
b2RpZmllckV2ZW50V2l0aEtleUNvZGU6NyBjaGFyYWN0ZXI6J3gnXTsKLX0KLQotLSAodm9pZClj
b3B5OihpZClzZW5kZXIKLXsKLSAgICBbc2VsZiBzZW5kTW9kaWZpZXJFdmVudFdpdGhLZXlDb2Rl
OjggY2hhcmFjdGVyOidjJ107Ci19Ci0KLS0gKHZvaWQpcGFzdGU6KGlkKXNlbmRlcgotewotICAg
IFtzZWxmIHNlbmRNb2RpZmllckV2ZW50V2l0aEtleUNvZGU6OSBjaGFyYWN0ZXI6J3YnXTsKLX0K
LQotLSAodm9pZClzZWxlY3RBbGw6KGlkKXNlbmRlcgotewotICAgIFtzZWxmIHNlbmRNb2RpZmll
ckV2ZW50V2l0aEtleUNvZGU6MCBjaGFyYWN0ZXI6J2EnXTsKLX0KLQotLy8gQXBwS2l0IGRvZXNu
J3QgY2FsbCBtb3VzZURvd24gb3IgbW91c2VVcCBvbiByaWdodC1jbGljay4gU2ltdWxhdGUgY29u
dHJvbC1jbGljawotLy8gbW91c2VEb3duIGFuZCBtb3VzZVVwIHNvIHBsdWctaW5zIGdldCB0aGUg
cmlnaHQtY2xpY2sgZXZlbnQgYXMgdGhleSBkbyBpbiBDYXJib24gKDMxMjU3NDMpLgotLSAodm9p
ZClyaWdodE1vdXNlRG93bjooTlNFdmVudCAqKXRoZUV2ZW50Ci17Ci0gICAgW3NlbGYgbW91c2VE
b3duOnRoZUV2ZW50XTsKLX0KLQotLSAodm9pZClyaWdodE1vdXNlVXA6KE5TRXZlbnQgKil0aGVF
dmVudAotewotICAgIFtzZWxmIG1vdXNlVXA6dGhlRXZlbnRdOwotfQotCi0KLS0gKEJPT0wpY29u
dmVydEZyb21YOihkb3VibGUpc291cmNlWCBhbmRZOihkb3VibGUpc291cmNlWSBzcGFjZTooTlBD
b29yZGluYXRlU3BhY2Upc291cmNlU3BhY2UKLSAgICAgICAgICAgICAgICAgdG9YOihkb3VibGUg
KilkZXN0WCBhbmRZOihkb3VibGUgKilkZXN0WSBzcGFjZTooTlBDb29yZGluYXRlU3BhY2UpZGVz
dFNwYWNlCi17Ci0gICAgLy8gTm90aGluZyB0byBkbwotICAgIGlmIChzb3VyY2VTcGFjZSA9PSBk
ZXN0U3BhY2UpIHsKLSAgICAgICAgaWYgKGRlc3RYKQotICAgICAgICAgICAgKmRlc3RYID0gc291
cmNlWDsKLSAgICAgICAgaWYgKGRlc3RZKQotICAgICAgICAgICAgKmRlc3RZID0gc291cmNlWTsK
LSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0gICAgCi0gICAgTlNQb2ludCBzb3VyY2VQb2lu
dCA9IE5TTWFrZVBvaW50KHNvdXJjZVgsIHNvdXJjZVkpOwotICAgIAotICAgIE5TUG9pbnQgc291
cmNlUG9pbnRJblNjcmVlblNwYWNlOwotICAgIAotICAgIC8vIEZpcnN0IGNvbnZlcnQgdG8gc2Ny
ZWVuIHNwYWNlCi0gICAgc3dpdGNoIChzb3VyY2VTcGFjZSkgewotICAgICAgICBjYXNlIE5QQ29v
cmRpbmF0ZVNwYWNlUGx1Z2luOgotICAgICAgICAgICAgc291cmNlUG9pbnRJblNjcmVlblNwYWNl
ID0gW3NlbGYgY29udmVydFBvaW50OnNvdXJjZVBvaW50IHRvVmlldzpuaWxdOwotICAgICAgICAg
ICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICAgICAgICAgIHNvdXJj
ZVBvaW50SW5TY3JlZW5TcGFjZSA9IFtbc2VsZiBjdXJyZW50V2luZG93XSBjb252ZXJ0QmFzZVRv
U2NyZWVuOnNvdXJjZVBvaW50SW5TY3JlZW5TcGFjZV07Ci0gICAgICAgICAgICBBTExPV19ERVBS
RUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgTlBDb29yZGluYXRlU3BhY2VXaW5kb3c6Ci0gICAgICAgICAgICBBTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgICAgICAgICAgc291cmNlUG9pbnRJ
blNjcmVlblNwYWNlID0gW1tzZWxmIGN1cnJlbnRXaW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46
c291cmNlUG9pbnRdOwotICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNf
RU5ECi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIE5QQ29v
cmRpbmF0ZVNwYWNlRmxpcHBlZFdpbmRvdzoKLSAgICAgICAgICAgIHNvdXJjZVBvaW50LnkgPSBb
W3NlbGYgY3VycmVudFdpbmRvd10gZnJhbWVdLnNpemUuaGVpZ2h0IC0gc291cmNlUG9pbnQueTsK
LSAgICAgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgICAg
ICAgICBzb3VyY2VQb2ludEluU2NyZWVuU3BhY2UgPSBbW3NlbGYgY3VycmVudFdpbmRvd10gY29u
dmVydEJhc2VUb1NjcmVlbjpzb3VyY2VQb2ludF07Ci0gICAgICAgICAgICBBTExPV19ERVBSRUNB
VEVEX0RFQ0xBUkFUSU9OU19FTkQKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgTlBDb29yZGluYXRlU3BhY2VTY3JlZW46Ci0gICAgICAgICAgICBzb3VyY2VQ
b2ludEluU2NyZWVuU3BhY2UgPSBzb3VyY2VQb2ludDsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgTlBDb29yZGluYXRlU3BhY2VGbGlwcGVkU2NyZWVuOgot
ICAgICAgICAgICAgc291cmNlUG9pbnQueSA9IFsoTlNTY3JlZW4gKilbW05TU2NyZWVuIHNjcmVl
bnNdIG9iamVjdEF0SW5kZXg6MF0gZnJhbWVdLnNpemUuaGVpZ2h0IC0gc291cmNlUG9pbnQueTsK
LSAgICAgICAgICAgIHNvdXJjZVBvaW50SW5TY3JlZW5TcGFjZSA9IHNvdXJjZVBvaW50OwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gRkFM
U0U7Ci0gICAgfQotICAgIAotICAgIE5TUG9pbnQgZGVzdFBvaW50OwotICAgIAotICAgIC8vIFRo
ZW4gY29udmVydCBiYWNrIHRvIHRoZSBkZXN0aW5hdGlvbiBzcGFjZQotICAgIHN3aXRjaCAoZGVz
dFNwYWNlKSB7Ci0gICAgICAgIGNhc2UgTlBDb29yZGluYXRlU3BhY2VQbHVnaW46Ci0gICAgICAg
ICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgICAgICAgICAgZGVz
dFBvaW50ID0gW1tzZWxmIGN1cnJlbnRXaW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6c291cmNl
UG9pbnRJblNjcmVlblNwYWNlXTsKLSAgICAgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFS
QVRJT05TX0VORAotICAgICAgICAgICAgZGVzdFBvaW50ID0gW3NlbGYgY29udmVydFBvaW50OmRl
c3RQb2ludCBmcm9tVmlldzpuaWxdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBOUENvb3JkaW5hdGVTcGFjZVdpbmRvdzoKLSAgICAgICAgICAgIEFMTE9X
X0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgICAgICAgICBkZXN0UG9pbnQgPSBb
W3NlbGYgY3VycmVudFdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTpzb3VyY2VQb2ludEluU2Ny
ZWVuU3BhY2VdOwotICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5E
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIE5QQ29vcmRp
bmF0ZVNwYWNlRmxpcHBlZFdpbmRvdzoKLSAgICAgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVD
TEFSQVRJT05TX0JFR0lOCi0gICAgICAgICAgICBkZXN0UG9pbnQgPSBbW3NlbGYgY3VycmVudFdp
bmRvd10gY29udmVydFNjcmVlblRvQmFzZTpzb3VyY2VQb2ludEluU2NyZWVuU3BhY2VdOwotICAg
ICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0gICAgICAgICAgICBk
ZXN0UG9pbnQueSA9IFtbc2VsZiBjdXJyZW50V2luZG93XSBmcmFtZV0uc2l6ZS5oZWlnaHQgLSBk
ZXN0UG9pbnQueTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgTlBDb29yZGluYXRlU3BhY2VTY3JlZW46Ci0gICAgICAgICAgICBkZXN0UG9pbnQgPSBzb3Vy
Y2VQb2ludEluU2NyZWVuU3BhY2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIE5QQ29vcmRpbmF0ZVNwYWNlRmxpcHBlZFNjcmVlbjoKLSAgICAgICAgICAg
IGRlc3RQb2ludCA9IHNvdXJjZVBvaW50SW5TY3JlZW5TcGFjZTsKLSAgICAgICAgICAgIGRlc3RQ
b2ludC55ID0gWyhOU1NjcmVlbiAqKVtbTlNTY3JlZW4gc2NyZWVuc10gb2JqZWN0QXRJbmRleDow
XSBmcmFtZV0uc2l6ZS5oZWlnaHQgLSBkZXN0UG9pbnQueTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gRkFMU0U7
Ci0gICAgfQotICAgIAotICAgIGlmIChkZXN0WCkKLSAgICAgICAgKmRlc3RYID0gZGVzdFBvaW50
Lng7Ci0gICAgaWYgKGRlc3RZKQotICAgICAgICAqZGVzdFkgPSBkZXN0UG9pbnQueTsKLSAgICAK
LSAgICByZXR1cm4gVFJVRTsKLX0KLQotCi0tICh2b2lkKWludmFsaWRhdGVQbHVnaW5Db250ZW50
UmVjdDooTlNSZWN0KXJlY3QKLXsKLSAgICBhdXRvKiByZW5kZXJlciA9IF9lbGVtZW50LT5yZW5k
ZXJlcigpOwotICAgIGlmICghaXM8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KHJlbmRlcmVyKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGF1dG8mIG9iamVjdCA9IGRvd25jYXN0PFJlbmRlckVtYmVkZGVk
T2JqZWN0PigqcmVuZGVyZXIpOwotICAgIEludFJlY3QgY29udGVudFJlY3QocmVjdCk7Ci0gICAg
Y29udGVudFJlY3QubW92ZShvYmplY3QuYm9yZGVyTGVmdCgpICsgb2JqZWN0LnBhZGRpbmdMZWZ0
KCksIG9iamVjdC5ib3JkZXJUb3AoKSArIG9iamVjdC5wYWRkaW5nVG9wKCkpOwotICAgIG9iamVj
dC5yZXBhaW50UmVjdGFuZ2xlKGNvbnRlbnRSZWN0KTsKLX0KLQotLSAoTlNSZWN0KWFjdHVhbFZp
c2libGVSZWN0SW5XaW5kb3cKLXsKLSAgICBhdXRvKiByZW5kZXJlciA9IF9lbGVtZW50LT5yZW5k
ZXJlcigpOwotICAgIGlmICghaXM8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KHJlbmRlcmVyKSkKLSAg
ICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7Ci0gICAgYXV0byYgb2JqZWN0ID0gZG93bmNhc3Q8UmVu
ZGVyRW1iZWRkZWRPYmplY3Q+KCpyZW5kZXJlcik7Ci0gICAgYXV0byB3aWRnZXRSZWN0ID0gb2Jq
ZWN0LnZpZXcoKS5mcmFtZVZpZXcoKS5jb250ZW50c1RvV2luZG93KG9iamVjdC5waXhlbFNuYXBw
ZWRBYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgcmV0dXJuIGludGVyc2VjdGlv
bihvYmplY3Qud2luZG93Q2xpcFJlY3QoKSwgd2lkZ2V0UmVjdCk7Ci19Ci0KLS0gKENBTGF5ZXIg
KilwbHVnaW5MYXllcgotewotICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgb3ZlcnJpZGRlbiBieSBz
dWJjbGFzc2VzLgotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKEJPT0wpZ2V0Rm9ybVZhbHVlOihO
U1N0cmluZyAqKil2YWx1ZQotewotICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgb3ZlcnJpZGRlbiBi
eSBzdWJjbGFzc2VzLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQotQGVuZAotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotYm9vbCBnZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgY2hhciogcHJvdG9j
b2xTdHIsIGNvbnN0IGNoYXIqIGhvc3RTdHIsIGludDMyX3QgcG9ydCwgY29uc3QgY2hhciogc2No
ZW1lU3RyLCBjb25zdCBjaGFyKiByZWFsbVN0ciwgQ1N0cmluZyYgdXNlcm5hbWUsIENTdHJpbmcm
IHBhc3N3b3JkKQotewotICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocHJv
dG9jb2xTdHIsICJodHRwIikgJiYgIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHByb3Rv
Y29sU3RyLCAiaHR0cHMiKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTlNTdHJpbmcg
Kmhvc3QgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6aG9zdFN0cl07Ci0gICAgaWYg
KCFob3N0U3RyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgTlNTdHJpbmcgKnBy
b3RvY29sID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnByb3RvY29sU3RyXTsKLSAg
ICBpZiAoIXByb3RvY29sKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgTlNTdHJp
bmcgKnJlYWxtID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnJlYWxtU3RyXTsKLSAg
ICBpZiAoIXJlYWxtKQotICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAK
LSAgICBOU1N0cmluZyAqYXV0aGVudGljYXRpb25NZXRob2QgPSBOU1VSTEF1dGhlbnRpY2F0aW9u
TWV0aG9kRGVmYXVsdDsKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocHJv
dG9jb2xTdHIsICJodHRwIikpIHsKLSAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKHNjaGVtZVN0ciwgImJhc2ljIikpCi0gICAgICAgICAgICBhdXRoZW50aWNhdGlvbk1l
dGhvZCA9IE5TVVJMQXV0aGVudGljYXRpb25NZXRob2RIVFRQQmFzaWM7Ci0gICAgICAgIGVsc2Ug
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHNjaGVtZVN0ciwgImRpZ2VzdCIpKQot
ICAgICAgICAgICAgYXV0aGVudGljYXRpb25NZXRob2QgPSBOU1VSTEF1dGhlbnRpY2F0aW9uTWV0
aG9kSFRUUERpZ2VzdDsKLSAgICB9Ci0gICAgCi0gICAgUmV0YWluUHRyPE5TVVJMUHJvdGVjdGlv
blNwYWNlPiBwcm90ZWN0aW9uU3BhY2UgPSBhZG9wdE5TKFtbTlNVUkxQcm90ZWN0aW9uU3BhY2Ug
YWxsb2NdIGluaXRXaXRoSG9zdDpob3N0IHBvcnQ6cG9ydCBwcm90b2NvbDpwcm90b2NvbCByZWFs
bTpyZWFsbSBhdXRoZW50aWNhdGlvbk1ldGhvZDphdXRoZW50aWNhdGlvbk1ldGhvZF0pOwotICAg
IAotICAgIE5TVVJMQ3JlZGVudGlhbCAqY3JlZGVudGlhbCA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lv
bk1hcDo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQoZW1w
dHlTdHJpbmcoKSwgUHJvdGVjdGlvblNwYWNlKHByb3RlY3Rpb25TcGFjZS5nZXQoKSkpLm5zQ3Jl
ZGVudGlhbCgpOwotICAgIGlmICghY3JlZGVudGlhbCkKLSAgICAgICAgY3JlZGVudGlhbCA9IFtb
TlNVUkxDcmVkZW50aWFsU3RvcmFnZSBzaGFyZWRDcmVkZW50aWFsU3RvcmFnZV0gZGVmYXVsdENy
ZWRlbnRpYWxGb3JQcm90ZWN0aW9uU3BhY2U6cHJvdGVjdGlvblNwYWNlLmdldCgpXTsKLSAgICBp
ZiAoIWNyZWRlbnRpYWwpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgCi0gICAgaWYgKCFbY3Jl
ZGVudGlhbCBoYXNQYXNzd29yZF0pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICB1
c2VybmFtZSA9IFtbY3JlZGVudGlhbCB1c2VyXSBVVEY4U3RyaW5nXTsKLSAgICBwYXNzd29yZCA9
IFtbY3JlZGVudGlhbCBwYXNzd29yZF0gVVRGOFN0cmluZ107Ci0gICAgCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgc2VuZFVzZXJDaGFuZ2VOb3RpZmljYXRpb25zKCkKLXsKLSAgICBhdXRv
IGNvbnNvbGVDb25uZWN0aW9uQ2hhbmdlTm90aWZ5UHJvYyA9IFtdKENHU05vdGlmaWNhdGlvblR5
cGUgdHlwZSwgQ0dTTm90aWZpY2F0aW9uRGF0YSwgQ0dTQnl0ZUNvdW50LCBDR1NOb3RpZmljYXRp
b25BcmcpIHsKLSAgICAgICAgTlNTdHJpbmcgKm5vdGlmaWNhdGlvbk5hbWUgPSBuaWw7Ci0gICAg
ICAgIGlmICh0eXBlID09IGtDR1Nlc3Npb25Db25zb2xlQ29ubmVjdCkKLSAgICAgICAgICAgIG5v
dGlmaWNhdGlvbk5hbWUgPSBMb2dpbldpbmRvd0RpZFN3aXRjaFRvVXNlck5vdGlmaWNhdGlvbjsK
LSAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBrQ0dTZXNzaW9uQ29uc29sZURpc2Nvbm5lY3QpCi0g
ICAgICAgICAgICBub3RpZmljYXRpb25OYW1lID0gTG9naW5XaW5kb3dEaWRTd2l0Y2hGcm9tVXNl
ck5vdGlmaWNhdGlvbjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcG9z
dE5vdGlmaWNhdGlvbk5hbWU6bm90aWZpY2F0aW9uTmFtZSBvYmplY3Q6bmlsXTsKLSAgICB9Owot
Ci0gICAgQ0dTUmVnaXN0ZXJOb3RpZnlQcm9jKGNvbnNvbGVDb25uZWN0aW9uQ2hhbmdlTm90aWZ5
UHJvYywga0NHU2Vzc2lvbkNvbnNvbGVDb25uZWN0LCBudWxscHRyKTsKLSAgICBDR1NSZWdpc3Rl
ck5vdGlmeVByb2MoY29uc29sZUNvbm5lY3Rpb25DaGFuZ2VOb3RpZnlQcm9jLCBrQ0dTZXNzaW9u
Q29uc29sZURpc2Nvbm5lY3QsIG51bGxwdHIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmIC8vICBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJCYXNlUGx1Z2luUGFja2FnZS5oIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJCYXNlUGx1Z2luUGFja2FnZS5oCmlu
ZGV4IDJmNDdlYmUwNTRlOGIwMjU3NGRkMWY2Nzk1ZWVmNTIwZGU3MDZhZWYuLjViZDNmYzUzMTM1
ZmFkMWIwZjZjMWFlZDY0NTRmZTQ5MjUyOGZkMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1BsdWdpbnMvV2ViQmFzZVBsdWdpblBhY2thZ2UuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYkJhc2VQbHVnaW5QYWNrYWdlLmgKQEAgLTI5LDExICsy
OSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KICNpbXBvcnQgPHd0Zi9SZXRh
aW5QdHIuaD4KIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotI2ltcG9ydCA8V2Vi
S2l0TGVnYWN5L25wZnVuY3Rpb25zLmg+Ci0jZWxzZQogdHlwZWRlZiB2b2lkICgqQlBfQ3JlYXRl
UGx1Z2luTUlNRVR5cGVzUHJlZmVyZW5jZXNGdW5jUHRyKSh2b2lkKTsKLSNlbmRpZgogCiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbXBvcnQgPFdlYkNvcmUvV0FLQXBwS2l0U3R1YnMuaD4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViQmFzZVBsdWdp
blBhY2thZ2UubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYkJhc2VQbHVn
aW5QYWNrYWdlLm1tCmluZGV4IGQ3Mjc5MWU5ODFkYjViMzQxOTQ0ZWM1ODIyZjE4YzY1OTdlN2U1
NTAuLjlkZjRjNDk0NThlMzljYWZlZWRhZDYxZGRlNTJlNjg1Y2NlMDBmMWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViQmFzZVBsdWdpblBhY2thZ2UubW0K
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJCYXNlUGx1Z2luUGFja2Fn
ZS5tbQpAQCAtMzAsNyArMzAsNiBAQAogCiAjaW1wb3J0ICJXZWJLaXRMb2dnaW5nLmgiCiAjaW1w
b3J0ICJXZWJLaXROU1N0cmluZ0V4dHJhcy5oIgotI2ltcG9ydCAiV2ViTmV0c2NhcGVQbHVnaW5Q
YWNrYWdlLmgiCiAjaW1wb3J0ICJXZWJQbHVnaW5QYWNrYWdlLmgiCiAjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVK
SVRPcGVyYXRpb25zLmg+CkBAIC02NywxNyArNjYsNyBAQAogCiArIChXZWJCYXNlUGx1Z2luUGFj
a2FnZSAqKXBsdWdpbldpdGhQYXRoOihOU1N0cmluZyAqKXBsdWdpblBhdGgKIHsKLSAgICBSZXRh
aW5QdHI8V2ViQmFzZVBsdWdpblBhY2thZ2U+IHBsdWdpblBhY2thZ2UgPSBhZG9wdE5TKFtbV2Vi
UGx1Z2luUGFja2FnZSBhbGxvY10gaW5pdFdpdGhQYXRoOnBsdWdpblBhdGhdKTsKLQotICAgIGlm
ICghcGx1Z2luUGFja2FnZSkgewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAg
ICAgICBwbHVnaW5QYWNrYWdlID0gYWRvcHROUyhbW1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSBh
bGxvY10gaW5pdFdpdGhQYXRoOnBsdWdpblBhdGhdKTsKLSNlbHNlCi0gICAgICAgIHJldHVybiBu
aWw7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICByZXR1cm4gcGx1Z2luUGFja2FnZS5hdXRvcmVsZWFz
ZSgpOworICAgIHJldHVybiBhZG9wdE5TKFtbV2ViUGx1Z2luUGFja2FnZSBhbGxvY10gaW5pdFdp
dGhQYXRoOnBsdWdpblBhdGhdKS5hdXRvcmVsZWFzZSgpOwogfQogCiAtIChpZClpbml0V2l0aFBh
dGg6KE5TU3RyaW5nICopcGx1Z2luUGF0aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlci5oIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlci5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGI0MWJjZmFhOWRkNjc4YzAwOGI4YTYxZWFh
MzNiZWJlNzVjYzA3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5FdmVu
dEhhbmRsZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBXZWJOZXRzY2FwZVBsdWdp
bkV2ZW50SGFuZGxlcl9oCi0jZGVmaW5lIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyX2gK
LQotI2ltcG9ydCAiV2ViTmV0c2NhcGVQbHVnaW5WaWV3LmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLQotQGNsYXNzIE5TRXZlbnQ7Ci1AY2xhc3MgV2ViTmV0c2NhcGVQbHVn
aW5WaWV3OwotCi1jbGFzcyBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlciB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxl
cj4gY3JlYXRlKFdlYk5ldHNjYXBlUGx1Z2luVmlldyAqKTsKLSAgICB2aXJ0dWFsIH5XZWJOZXRz
Y2FwZVBsdWdpbkV2ZW50SGFuZGxlcigpIHsgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3
UmVjdChDR0NvbnRleHRSZWYsIGNvbnN0IE5TUmVjdCYpID0gMDsKLSAgICAKLSAgICB2aXJ0dWFs
IHZvaWQgbW91c2VEb3duKE5TRXZlbnQgKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBtb3VzZURy
YWdnZWQoTlNFdmVudCAqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlRW50ZXJlZChOU0V2
ZW50ICopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VFeGl0ZWQoTlNFdmVudCAqKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlTW92ZWQoTlNFdmVudCAqKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIG1vdXNlVXAoTlNFdmVudCAqKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNjcm9sbFdo
ZWVsKE5TRXZlbnQgKikgPSAwOwotICAgIAotICAgIHZpcnR1YWwgdm9pZCBrZXlEb3duKE5TRXZl
bnQgKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBrZXlVcChOU0V2ZW50ICopID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgZmxhZ3NDaGFuZ2VkKE5TRXZlbnQgKikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzeW50aGV0aWNLZXlEb3duV2l0aENvbW1hbmRNb2RpZmllcihpbnQga2V5Q29kZSwgY2hhciBj
aGFyYWN0ZXIpID0gMDsKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgZm9jdXNDaGFuZ2VkKGJvb2wg
aGFzRm9jdXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgd2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wg
aGFzRm9jdXMpID0gMDsKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRUaW1lcnMoYm9vbCB0
aHJvdHRsZVRpbWVycykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BUaW1lcnMoKSB7IH0KLSAg
ICAKLSAgICAvLyBSZXR1cm5zIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyB3aW5kb3cgdXNlZCBpbiBO
UFBfU2V0V2luZG93Ci0gICAgdmlydHVhbCB2b2lkKiBwbGF0Zm9ybVdpbmRvdyhOU1dpbmRvdyAq
KSA9IDA7Ci0gICAgCi0gICAgYm9vbCBjdXJyZW50RXZlbnRJc1VzZXJHZXN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9jdXJyZW50RXZlbnRJc1VzZXJHZXN0dXJlOyB9Ci0KLXByb3RlY3RlZDoKLSAg
ICBleHBsaWNpdCBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlcihXZWJOZXRzY2FwZVBsdWdp
blZpZXcgKnBsdWdpblZpZXcpCi0gICAgICAgIDogbV9wbHVnaW5WaWV3KHBsdWdpblZpZXcpCi0g
ICAgICAgICwgbV9jdXJyZW50RXZlbnRJc1VzZXJHZXN0dXJlKGZhbHNlKQotICAgIHsKLSAgICB9
Ci0gICAgCi0gICAgV2ViTmV0c2NhcGVQbHVnaW5WaWV3ICptX3BsdWdpblZpZXc7Ci0gICAgYm9v
bCBtX2N1cnJlbnRFdmVudElzVXNlckdlc3R1cmU7Ci19OwotCi0jZW5kaWYgLy8gRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNlbmRpZiAvLyBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFu
ZGxlcl9oCi0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9X
ZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXIubW0KZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDhlYzFiZjc5ZWUzMmEyYWMxYmJjZjdhMjFlNzNlN2UxZTAxZGIxZDMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlci5tbQor
KysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0j
aW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlci5oIgotCi0jaW1wb3J0IDx3dGYv
QXNzZXJ0aW9ucy5oPgotI2ltcG9ydCAiV2ViTmV0c2NhcGVQbHVnaW5WaWV3LmgiCi0jaW1wb3J0
ICJXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hLmgiCi0KLXN0ZDo6dW5pcXVlX3B0
cjxXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlcj4gV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhh
bmRsZXI6OmNyZWF0ZShXZWJOZXRzY2FwZVBsdWdpblZpZXcgKnBsdWdpblZpZXcpCi17Ci0gICAg
c3dpdGNoIChbcGx1Z2luVmlldyBldmVudE1vZGVsXSkgewotICAgIGNhc2UgTlBFdmVudE1vZGVs
Q29jb2E6Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRI
YW5kbGVyQ29jb2E+KHBsdWdpblZpZXcpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci19Ci0KLSNlbmRp
ZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYS5o
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpbkV2ZW50
SGFuZGxlckNvY29hLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZDljNWQ1ODIx
Zjg1ZjY1ZWJjOGY3NzdlYzY1NTIyOWQ1ZTg5ZjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJO
ZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2lmbmRlZiBXZWJOZXRzY2FwZVBsdWdp
bkV2ZW50SGFuZGxlckNvY29hX2gKLSNkZWZpbmUgV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRs
ZXJDb2NvYV9oCi0KLSNpbmNsdWRlIDxXZWJLaXRMZWdhY3kvbnBhcGkuaD4KLSNpbmNsdWRlICJX
ZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlci5oIgotCi1jbGFzcyBXZWJOZXRzY2FwZVBsdWdp
bkV2ZW50SGFuZGxlckNvY29hIDogcHVibGljIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVy
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBXZWJOZXRzY2Fw
ZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hKFdlYk5ldHNjYXBlUGx1Z2luVmlldyopOyAKLQotICAg
IHZpcnR1YWwgdm9pZCBkcmF3UmVjdChDR0NvbnRleHRSZWYsIGNvbnN0IE5TUmVjdCYpOwotCi0g
ICAgdmlydHVhbCB2b2lkIG1vdXNlRG93bihOU0V2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIG1v
dXNlRHJhZ2dlZChOU0V2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlRW50ZXJlZChOU0V2
ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlRXhpdGVkKE5TRXZlbnQqKTsKLSAgICB2aXJ0
dWFsIHZvaWQgbW91c2VNb3ZlZChOU0V2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlVXAo
TlNFdmVudCopOwotICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxXaGVlbChOU0V2ZW50Kik7Ci0gICAg
Ci0gICAgdmlydHVhbCB2b2lkIGtleURvd24oTlNFdmVudCopOwotICAgIHZpcnR1YWwgdm9pZCBr
ZXlVcChOU0V2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIGZsYWdzQ2hhbmdlZChOU0V2ZW50Kik7
Ci0gICAgdmlydHVhbCB2b2lkIHN5bnRoZXRpY0tleURvd25XaXRoQ29tbWFuZE1vZGlmaWVyKGlu
dCBrZXlDb2RlLCBjaGFyIGNoYXJhY3Rlcik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgd2luZG93Rm9j
dXNDaGFuZ2VkKGJvb2wgaGFzRm9jdXMpOyAgICAKLSAgICB2aXJ0dWFsIHZvaWQgZm9jdXNDaGFu
Z2VkKGJvb2wgaGFzRm9jdXMpOwotCi0gICAgdmlydHVhbCB2b2lkKiBwbGF0Zm9ybVdpbmRvdyhO
U1dpbmRvdyopOwotICAgIAotcHJpdmF0ZToKLSAgICBib29sIHNlbmRNb3VzZUV2ZW50KE5TRXZl
bnQqLCBOUENvY29hRXZlbnRUeXBlKTsKLSAgICBib29sIHNlbmRLZXlFdmVudChOU0V2ZW50Kiwg
TlBDb2NvYUV2ZW50VHlwZSk7Ci0gICAgYm9vbCBzZW5kRXZlbnQoTlBDb2NvYUV2ZW50Kik7Ci19
OwotCi0jZW5kaWYgLy9XZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hX2gKLQotI2Vu
ZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29j
b2EubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2lu
RXZlbnRIYW5kbGVyQ29jb2EubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlN2Iw
ZTViYjBiNGZjMjQ2N2Y4MmQ2NzAzOWU3YmYyOWI1YmM4MzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lu
cy9XZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hLm1tCisrKyAvZGV2L251bGwKQEAg
LTEsMjI1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbXBvcnQgIldl
Yk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2EuaCIKLQotI2ltcG9ydCAiV2ViTmV0c2Nh
cGVQbHVnaW5WaWV3LmgiCi0jaW1wb3J0IDxwYWwvc3BpL21hYy9ISVRvb2xib3hTUEkuaD4KLSNp
bXBvcnQgPHBhbC9zcGkvbWFjL05TRXZlbnRTUEkuaD4KLSNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4K
LQotV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYTo6V2ViTmV0c2NhcGVQbHVnaW5F
dmVudEhhbmRsZXJDb2NvYShXZWJOZXRzY2FwZVBsdWdpblZpZXcqIHBsdWdpblZpZXcpCi0gICAg
OiBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlcihwbHVnaW5WaWV3KQotewotfQotCi1zdGF0
aWMgaW5saW5lIHZvaWQgaW5pdGlhbGl6ZUV2ZW50KE5QQ29jb2FFdmVudCogZXZlbnQsIE5QQ29j
b2FFdmVudFR5cGUgdHlwZSkKLXsKLSAgICBldmVudC0+dHlwZSA9IHR5cGU7Ci0gICAgZXZlbnQt
PnZlcnNpb24gPSAwOwotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29j
b2E6OmRyYXdSZWN0KENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBOU1JlY3QmIHJlY3QpCi17
Ci0gICAgTlBDb2NvYUV2ZW50IGV2ZW50OwotICAgIAotICAgIGluaXRpYWxpemVFdmVudCgmZXZl
bnQsIE5QQ29jb2FFdmVudERyYXdSZWN0KTsKLSAgICBldmVudC5kYXRhLmRyYXcuY29udGV4dCA9
IGNvbnRleHQ7Ci0gICAgZXZlbnQuZGF0YS5kcmF3LnggPSByZWN0Lm9yaWdpbi54OwotICAgIGV2
ZW50LmRhdGEuZHJhdy55ID0gcmVjdC5vcmlnaW4ueTsKLSAgICBldmVudC5kYXRhLmRyYXcud2lk
dGggPSByZWN0LnNpemUud2lkdGg7Ci0gICAgZXZlbnQuZGF0YS5kcmF3LmhlaWdodCA9IHJlY3Qu
c2l6ZS5oZWlnaHQ7Ci0gICAgCi0gICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gcHJvdGVjdChj
b250ZXh0KTsKLSAgICAKLSAgICBzZW5kRXZlbnQoJmV2ZW50KTsKLX0KLQotdm9pZCBXZWJOZXRz
Y2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hOjptb3VzZURvd24oTlNFdmVudCAqZXZlbnQpCi17
Ci0gICAgc2VuZE1vdXNlRXZlbnQoZXZlbnQsIE5QQ29jb2FFdmVudE1vdXNlRG93bik7Ci19Ci0K
LXZvaWQgV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYTo6bW91c2VEcmFnZ2VkKE5T
RXZlbnQgKmV2ZW50KQotewotICAgIHNlbmRNb3VzZUV2ZW50KGV2ZW50LCBOUENvY29hRXZlbnRN
b3VzZURyYWdnZWQpOwotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29j
b2E6Om1vdXNlRW50ZXJlZChOU0V2ZW50ICpldmVudCkKLXsKLSAgICBzZW5kTW91c2VFdmVudChl
dmVudCwgTlBDb2NvYUV2ZW50TW91c2VFbnRlcmVkKTsKLX0KLQotdm9pZCBXZWJOZXRzY2FwZVBs
dWdpbkV2ZW50SGFuZGxlckNvY29hOjptb3VzZUV4aXRlZChOU0V2ZW50ICpldmVudCkKLXsKLSAg
ICBzZW5kTW91c2VFdmVudChldmVudCwgTlBDb2NvYUV2ZW50TW91c2VFeGl0ZWQpOwotfQotCi12
b2lkIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2E6Om1vdXNlTW92ZWQoTlNFdmVu
dCAqZXZlbnQpCi17Ci0gICAgc2VuZE1vdXNlRXZlbnQoZXZlbnQsIE5QQ29jb2FFdmVudE1vdXNl
TW92ZWQpOwotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2E6Om1v
dXNlVXAoTlNFdmVudCAqZXZlbnQpCi17Ci0gICAgc2VuZE1vdXNlRXZlbnQoZXZlbnQsIE5QQ29j
b2FFdmVudE1vdXNlVXApOwotfQotCi1ib29sIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVy
Q29jb2E6OnNjcm9sbFdoZWVsKE5TRXZlbnQqIGV2ZW50KQotewotICAgIHJldHVybiBzZW5kTW91
c2VFdmVudChldmVudCwgTlBDb2NvYUV2ZW50U2Nyb2xsV2hlZWwpOwotfQotCi1ib29sIFdlYk5l
dHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2E6OnNlbmRNb3VzZUV2ZW50KE5TRXZlbnQgKm5z
RXZlbnQsIE5QQ29jb2FFdmVudFR5cGUgdHlwZSkKLXsKLSAgICBOUENvY29hRXZlbnQgZXZlbnQ7
Ci0gICAgCi0gICAgTlNQb2ludCBwb2ludCA9IFttX3BsdWdpblZpZXcgY29udmVydFBvaW50Oltu
c0V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddIGZyb21WaWV3Om5pbF07Ci0gICAgCi0gICAgaW50IGNs
aWNrQ291bnQ7Ci0gICAgaWYgKHR5cGUgPT0gTlBDb2NvYUV2ZW50TW91c2VFbnRlcmVkIHx8IHR5
cGUgPT0gTlBDb2NvYUV2ZW50TW91c2VFeGl0ZWQgfHwgdHlwZSA9PSBOUENvY29hRXZlbnRTY3Jv
bGxXaGVlbCkKLSAgICAgICAgY2xpY2tDb3VudCA9IDA7Ci0gICAgZWxzZQotICAgICAgICBjbGlj
a0NvdW50ID0gW25zRXZlbnQgY2xpY2tDb3VudF07Ci0gICAgCi0gICAgaW5pdGlhbGl6ZUV2ZW50
KCZldmVudCwgdHlwZSk7Ci0gICAgZXZlbnQuZGF0YS5tb3VzZS5tb2RpZmllckZsYWdzID0gW25z
RXZlbnQgbW9kaWZpZXJGbGFnc107Ci0gICAgZXZlbnQuZGF0YS5tb3VzZS5idXR0b25OdW1iZXIg
PSBbbnNFdmVudCBidXR0b25OdW1iZXJdOwotICAgIGV2ZW50LmRhdGEubW91c2UuY2xpY2tDb3Vu
dCA9IGNsaWNrQ291bnQ7Ci0gICAgZXZlbnQuZGF0YS5tb3VzZS5wbHVnaW5YID0gcG9pbnQueDsK
LSAgICBldmVudC5kYXRhLm1vdXNlLnBsdWdpblkgPSBwb2ludC55OwotICAgIGV2ZW50LmRhdGEu
bW91c2UuZGVsdGFYID0gW25zRXZlbnQgZGVsdGFYXTsKLSAgICBldmVudC5kYXRhLm1vdXNlLmRl
bHRhWSA9IFtuc0V2ZW50IGRlbHRhWV07Ci0gICAgZXZlbnQuZGF0YS5tb3VzZS5kZWx0YVogPSBb
bnNFdmVudCBkZWx0YVpdOwotICAgIAotICAgIHJldHVybiBzZW5kRXZlbnQoJmV2ZW50KTsKLX0K
LQotdm9pZCBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hOjprZXlEb3duKE5TRXZl
bnQgKmV2ZW50KQotewotICAgIGJvb2wgcmV0dmFsID0gc2VuZEtleUV2ZW50KGV2ZW50LCBOUENv
Y29hRXZlbnRLZXlEb3duKTsKLSAgICBVTlVTRURfUEFSQU0ocmV0dmFsKTsKLX0KLQotdm9pZCBX
ZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hOjprZXlVcChOU0V2ZW50ICpldmVudCkK
LXsKLSAgICBzZW5kS2V5RXZlbnQoZXZlbnQsIE5QQ29jb2FFdmVudEtleVVwKTsKLX0KLQotdm9p
ZCBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hOjpmbGFnc0NoYW5nZWQoTlNFdmVu
dCAqbnNFdmVudCkKLXsKLSAgICBOUENvY29hRXZlbnQgZXZlbnQ7Ci0gICAgICAgIAotICAgIGlu
aXRpYWxpemVFdmVudCgmZXZlbnQsIE5QQ29jb2FFdmVudEZsYWdzQ2hhbmdlZCk7Ci0gICAgZXZl
bnQuZGF0YS5rZXkubW9kaWZpZXJGbGFncyA9IFtuc0V2ZW50IG1vZGlmaWVyRmxhZ3NdOwotICAg
IGV2ZW50LmRhdGEua2V5LmtleUNvZGUgPSBbbnNFdmVudCBrZXlDb2RlXTsKLSAgICBldmVudC5k
YXRhLmtleS5pc0FSZXBlYXQgPSBmYWxzZTsKLSAgICBldmVudC5kYXRhLmtleS5jaGFyYWN0ZXJz
ID0gMDsKLSAgICBldmVudC5kYXRhLmtleS5jaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgPSAw
OwotICAgIAotICAgIHNlbmRFdmVudCgmZXZlbnQpOwotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1
Z2luRXZlbnRIYW5kbGVyQ29jb2E6OnN5bnRoZXRpY0tleURvd25XaXRoQ29tbWFuZE1vZGlmaWVy
KGludCBrZXlDb2RlLCBjaGFyIGNoYXJhY3RlcikKLXsKLSAgICBjaGFyIG51bGxUZXJtaW5hdGVk
U3RyaW5nW10gPSB7IGNoYXJhY3RlciwgJ1wwJyB9OwotICAgIAotICAgIFJldGFpblB0cjxOU1N0
cmluZz4gY2hhcmFjdGVycyA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhVVEY4
U3RyaW5nOm51bGxUZXJtaW5hdGVkU3RyaW5nXSk7Ci0gICAgCi0gICAgTlBDb2NvYUV2ZW50IGV2
ZW50OwotICAgIGluaXRpYWxpemVFdmVudCgmZXZlbnQsIE5QQ29jb2FFdmVudEtleURvd24pOwot
ICAgIGV2ZW50LmRhdGEua2V5Lm1vZGlmaWVyRmxhZ3MgPSBOU0V2ZW50TW9kaWZpZXJGbGFnQ29t
bWFuZDsKLSAgICBldmVudC5kYXRhLmtleS5rZXlDb2RlID0ga2V5Q29kZTsKLSAgICBldmVudC5k
YXRhLmtleS5pc0FSZXBlYXQgPSBmYWxzZTsKLSAgICBldmVudC5kYXRhLmtleS5jaGFyYWN0ZXJz
ID0gKE5QTlNTdHJpbmcgKiljaGFyYWN0ZXJzLmdldCgpOwotICAgIGV2ZW50LmRhdGEua2V5LmNo
YXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycyA9IChOUE5TU3RyaW5nICopY2hhcmFjdGVycy5nZXQo
KTsKLQotICAgIHNlbmRFdmVudCgmZXZlbnQpOwotfQotCi1ib29sIFdlYk5ldHNjYXBlUGx1Z2lu
RXZlbnRIYW5kbGVyQ29jb2E6OnNlbmRLZXlFdmVudChOU0V2ZW50KiBuc0V2ZW50LCBOUENvY29h
RXZlbnRUeXBlIHR5cGUpCi17Ci0gICAgTlBDb2NvYUV2ZW50IGV2ZW50OwotCi0gICAgaW5pdGlh
bGl6ZUV2ZW50KCZldmVudCwgdHlwZSk7Ci0gICAgZXZlbnQuZGF0YS5rZXkubW9kaWZpZXJGbGFn
cyA9IFtuc0V2ZW50IG1vZGlmaWVyRmxhZ3NdOwotICAgIGV2ZW50LmRhdGEua2V5LmtleUNvZGUg
PSBbbnNFdmVudCBrZXlDb2RlXTsKLSAgICBldmVudC5kYXRhLmtleS5pc0FSZXBlYXQgPSBbbnNF
dmVudCBpc0FSZXBlYXRdOwotICAgIGV2ZW50LmRhdGEua2V5LmNoYXJhY3RlcnMgPSAoTlBOU1N0
cmluZyAqKVtuc0V2ZW50IGNoYXJhY3RlcnNdOwotICAgIGV2ZW50LmRhdGEua2V5LmNoYXJhY3Rl
cnNJZ25vcmluZ01vZGlmaWVycyA9IChOUE5TU3RyaW5nICopW25zRXZlbnQgY2hhcmFjdGVyc0ln
bm9yaW5nTW9kaWZpZXJzXTsKLSAgICAgCi0gICAgcmV0dXJuIHNlbmRFdmVudCgmZXZlbnQpOwot
fQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2E6OndpbmRvd0ZvY3Vz
Q2hhbmdlZChib29sIGhhc0ZvY3VzKQotewotICAgIE5QQ29jb2FFdmVudCBldmVudDsKLSAgICAK
LSAgICBpbml0aWFsaXplRXZlbnQoJmV2ZW50LCBOUENvY29hRXZlbnRXaW5kb3dGb2N1c0NoYW5n
ZWQpOwotICAgIGV2ZW50LmRhdGEuZm9jdXMuaGFzRm9jdXMgPSBoYXNGb2N1czsKLSAgICAKLSAg
ICBzZW5kRXZlbnQoJmV2ZW50KTsKLX0KLQotdm9pZCBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFu
ZGxlckNvY29hOjpmb2N1c0NoYW5nZWQoYm9vbCBoYXNGb2N1cykKLXsKLSAgICBOUENvY29hRXZl
bnQgZXZlbnQ7Ci0KLSAgICBpbml0aWFsaXplRXZlbnQoJmV2ZW50LCBOUENvY29hRXZlbnRGb2N1
c0NoYW5nZWQpOwotICAgIGV2ZW50LmRhdGEuZm9jdXMuaGFzRm9jdXMgPSBoYXNGb2N1czsKLSAg
ICAKLSAgICBzZW5kRXZlbnQoJmV2ZW50KTsKLX0KLQotdm9pZCogV2ViTmV0c2NhcGVQbHVnaW5F
dmVudEhhbmRsZXJDb2NvYTo6cGxhdGZvcm1XaW5kb3coTlNXaW5kb3cgKndpbmRvdykKLXsKLSAg
ICByZXR1cm4gKF9fYnJpZGdlIHZvaWQqKXdpbmRvdzsKLX0KLQotYm9vbCBXZWJOZXRzY2FwZVBs
dWdpbkV2ZW50SGFuZGxlckNvY29hOjpzZW5kRXZlbnQoTlBDb2NvYUV2ZW50KiBldmVudCkKLXsK
LSAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7Ci0gICAgICAgIGNhc2UgTlBDb2NvYUV2ZW50TW91
c2VEb3duOgotICAgICAgICBjYXNlIE5QQ29jb2FFdmVudE1vdXNlVXA6Ci0gICAgICAgIGNhc2Ug
TlBDb2NvYUV2ZW50TW91c2VEcmFnZ2VkOgotICAgICAgICBjYXNlIE5QQ29jb2FFdmVudEtleURv
d246Ci0gICAgICAgIGNhc2UgTlBDb2NvYUV2ZW50S2V5VXA6Ci0gICAgICAgIGNhc2UgTlBDb2Nv
YUV2ZW50RmxhZ3NDaGFuZ2VkOgotICAgICAgICBjYXNlIE5QQ29jb2FFdmVudFNjcm9sbFdoZWVs
OgotICAgICAgICAgICAgbV9jdXJyZW50RXZlbnRJc1VzZXJHZXN0dXJlID0gdHJ1ZTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgbV9jdXJyZW50RXZl
bnRJc1VzZXJHZXN0dXJlID0gZmFsc2U7Ci0gICAgfQotICAgICAgICAgICAgCi0gICAgYm9vbCBy
ZXN1bHQgPSBbbV9wbHVnaW5WaWV3IHNlbmRFdmVudDpldmVudCBpc0RyYXdSZWN0OmV2ZW50LT50
eXBlID09IE5QQ29jb2FFdmVudERyYXdSZWN0XTsKLSAgICAKLSAgICBtX2N1cnJlbnRFdmVudElz
VXNlckdlc3R1cmUgPSBmYWxzZTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0jZW5kaWYgLy8g
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5oIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZDNmM2M5Y2ZhNjg1MDVmNGY4ZDg1MmZmOTFhZjQ5OTQzYjBh
N2QxNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5oCisr
KyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwg
MjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCi0jaW1wb3J0ICJXZWJCYXNlUGx1Z2luUGFja2FnZS5oIgotCi0KLUBpbnRlcmZh
Y2UgV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlIDogV2ViQmFzZVBsdWdpblBhY2thZ2UKLXsKLSAg
ICBOUFBsdWdpbkZ1bmNzIHBsdWdpbkZ1bmNzOwotICAgIE5QTmV0c2NhcGVGdW5jcyBicm93c2Vy
RnVuY3M7Ci0gICAgCi0gICAgdWludDE2X3QgcGx1Z2luU2l6ZTsKLSAgICB1aW50MTZfdCBwbHVn
aW5WZXJzaW9uOwotICAgIAotICAgIFJlc0ZpbGVSZWZOdW0gcmVzb3VyY2VSZWY7Ci0gICAgCi0g
ICAgTlBQX1NodXRkb3duUHJvY1B0ciBOUF9TaHV0ZG93bjsKLQotICAgIEJPT0wgaXNMb2FkZWQ7
Ci0gICAgQk9PTCBuZWVkc1VubG9hZDsKLSAgICB1bnNpZ25lZCBpbnQgaW5zdGFuY2VDb3VudDsK
LSAgICAgCi0jaWYgVVNFKFBMVUdJTl9IT1NUX1BST0NFU1MpCi0gICAgY3B1X3R5cGVfdCBwbHVn
aW5Ib3N0QXJjaGl0ZWN0dXJlOwotI2VuZGlmCi19Ci0KLS8vIE5ldHNjYXBlIHBsdWctaW4gcGFj
a2FnZXMgbXVzdCBiZSBleHBsaWNpdGx5IG9wZW5lZCBhbmQgY2xvc2VkIGJ5IGVhY2ggcGx1Zy1p
biBpbnN0YW5jZS4KLS8vIFRoaXMgaXMgdG8gcHJvdGVjdCBOZXRzY2FwZSBwbHVnLWlucyBmcm9t
IGJlaW5nIHVubG9hZGVkIHdoaWxlIHRoZXkgYXJlIGluIHVzZS4KLS0gKHZvaWQpb3BlbjsKLS0g
KHZvaWQpY2xvc2U7Ci0KLS0gKE5QUGx1Z2luRnVuY3MgKilwbHVnaW5GdW5jczsKLS0gKE5QTmV0
c2NhcGVGdW5jcyAqKWJyb3dzZXJGdW5jczsKLQotLSAoQk9PTClzdXBwb3J0c1NuYXBzaG90dGlu
ZzsKLQotI2lmIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKQotLSAoY3B1X3R5cGVfdClwbHVnaW5I
b3N0QXJjaGl0ZWN0dXJlOwotI2VuZGlmCi0KLUBlbmQKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luUGFja2Fn
ZS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2UxZmNmNjdkMmNkY2Y0NTVkNjM0
ZjhhNWVhNDg0N2Y3ZmI4ZmFkYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1
Z2luUGFja2FnZS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDM2NCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSNpbXBvcnQgIldlYk5ldHNjYXBlUGx1Z2luUGFj
a2FnZS5oIgotCi0jaW1wb3J0ICJXZWJLaXRMb2dnaW5nLmgiCi0jaW1wb3J0ICJXZWJLaXROU1N0
cmluZ0V4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNGaWxlTWFuYWdlckV4dHJhcy5oIgotI2ltcG9y
dCAiV2ViTlNPYmplY3RFeHRyYXMuaCIKLSNpbXBvcnQgPFdlYkNvcmUvbnBydW50aW1lX2ltcGwu
aD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLQotI2lmIFVTRShQTFVHSU5fSE9TVF9QUk9D
RVNTKQotI2ltcG9ydCAiTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5oIgotCi11c2luZyBuYW1l
c3BhY2UgV2ViS2l0OwotI2VuZGlmCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1AaW50
ZXJmYWNlIFdlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSAoSW50ZXJuYWwpCi0tICh2b2lkKV91bmxv
YWRXaXRoU2h1dGRvd246KEJPT0wpc2h1dGRvd247Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBX
ZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UKLQotLSAoUmVzRmlsZVJlZk51bSlvcGVuUmVzb3VyY2VG
aWxlCi17Ci1BTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIHJldHVybiBD
RkJ1bmRsZU9wZW5CdW5kbGVSZXNvdXJjZU1hcChjZkJ1bmRsZS5nZXQoKSk7Ci1BTExPV19ERVBS
RUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLX0KLQotLSAodm9pZCljbG9zZVJlc291cmNlRmlsZToo
UmVzRmlsZVJlZk51bSlyZXNSZWYKLXsKLUFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JF
R0lOCi0gICAgQ0ZCdW5kbGVDbG9zZUJ1bmRsZVJlc291cmNlTWFwKGNmQnVuZGxlLmdldCgpLCBy
ZXNSZWYpOwotQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi19Ci0KLS0gKEJPT0wp
X2luaXRXaXRoUGF0aDooTlNTdHJpbmcgKilwbHVnaW5QYXRoCi17Ci0gICAgcmVzb3VyY2VSZWYg
PSAtMTsKLSAgICAKLSAgICBPU1R5cGUgdHlwZSA9IDA7Ci0KLSAgICBpZiAoIWNmQnVuZGxlKQot
ICAgICAgICByZXR1cm4gTk87Ci0KLSAgICBDRkJ1bmRsZUdldFBhY2thZ2VJbmZvKGNmQnVuZGxl
LmdldCgpLCAmdHlwZSwgTlVMTCk7Ci0gICAgCi0gICAgaWYgKHR5cGUgIT0gRk9VUl9DSEFSX0NP
REUoJ0JSUEwnKSkKLSAgICAgICAgcmV0dXJuIE5POwotCi0jaWYgVVNFKFBMVUdJTl9IT1NUX1BS
T0NFU1MpCi0gICAgYXV0byBhcmNocyA9IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5RXhlY3V0YWJsZUFy
Y2hpdGVjdHVyZXMoY2ZCdW5kbGUuZ2V0KCkpKTsKLSAgICBpZiAoWyhfX2JyaWRnZSBOU0FycmF5
ICopYXJjaHMuZ2V0KCkgY29udGFpbnNPYmplY3Q6QChOU0J1bmRsZUV4ZWN1dGFibGVBcmNoaXRl
Y3R1cmVYODZfNjQpXSkKLSAgICAgICAgcGx1Z2luSG9zdEFyY2hpdGVjdHVyZSA9IENQVV9UWVBF
X1g4Nl82NDsKLSAgICBlbHNlIGlmIChbKF9fYnJpZGdlIE5TQXJyYXkgKilhcmNocy5nZXQoKSBj
b250YWluc09iamVjdDpAKE5TQnVuZGxlRXhlY3V0YWJsZUFyY2hpdGVjdHVyZUkzODYpXSkKLSAg
ICAgICAgcGx1Z2luSG9zdEFyY2hpdGVjdHVyZSA9IENQVV9UWVBFX1g4NjsKLSAgICBlbHNlCi0g
ICAgICAgIHJldHVybiBOTzsKLSNlbHNlCi0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBleGVjdXRh
YmxlVVJMID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlFeGVjdXRhYmxlVVJMKGNmQnVuZGxlLmdldCgp
KSk7Ci0gICAgaWYgKCFleGVjdXRhYmxlVVJMKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgTlNG
aWxlSGFuZGxlICpleGVjdXRhYmxlRmlsZSA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZUZvclJl
YWRpbmdBdFBhdGg6WyhOU1VSTCAqKWV4ZWN1dGFibGVVUkwuZ2V0KCkgcGF0aF1dOwotICAgIE5T
RGF0YSAqZGF0YSA9IFtleGVjdXRhYmxlRmlsZSByZWFkRGF0YU9mTGVuZ3RoOjUxMl07Ci0gICAg
W2V4ZWN1dGFibGVGaWxlIGNsb3NlRmlsZV07Ci0KLSAgICAgaWYgKCFbc2VsZiBpc05hdGl2ZUxp
YnJhcnlEYXRhOmRhdGFdKQotICAgICAgICAgcmV0dXJuIE5POwotI2VuZGlmCi0KLSAgICBpZiAo
IVtzZWxmIGdldFBsdWdpbkluZm9Gcm9tUExpc3RzXSkKLSAgICAgICAgcmV0dXJuIE5POwotICAg
IAotICAgIHJldHVybiBZRVM7Ci19Ci0KLS0gKGlkKWluaXRXaXRoUGF0aDooTlNTdHJpbmcgKilw
bHVnaW5QYXRoCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aFBhdGg6cGx1Z2lu
UGF0aF0pKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIC8vIEluaXRpYWxpemluZyBh
IHBsdWdpbiBwYWNrYWdlIGNhbiBjYXVzZSBpdCB0byBiZSBsb2FkZWQuICBJZiB0aGVyZSB3YXMg
YW4gZXJyb3IgaW5pdGlhbGl6aW5nIHRoZSBwbHVnaW4gcGFja2FnZSwKLSAgICAvLyBlbnN1cmUg
dGhhdCBpdCBpcyB1bmxvYWRlZCBiZWZvcmUgZGVhbGxvY2F0aW5nIGl0IChXZWJCYXNlUGx1Z2lu
UGFja2FnZSByZXF1aXJlcyAmIGFzc2VydHMgdGhpcykuCi0gICAgaWYgKCFbc2VsZiBfaW5pdFdp
dGhQYXRoOnBsdWdpblBhdGhdKSB7Ci0gICAgICAgIFtzZWxmIF91bmxvYWRXaXRoU2h1dGRvd246
WUVTXTsKLSAgICAgICAgW3NlbGYgcmVsZWFzZV07Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAg
fQotICAgICAgICAKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotI2lmIFVTRShQTFVHSU5fSE9TVF9Q
Uk9DRVNTKQotCi0tIChjcHVfdHlwZV90KXBsdWdpbkhvc3RBcmNoaXRlY3R1cmUKLXsKLSAgICBy
ZXR1cm4gcGx1Z2luSG9zdEFyY2hpdGVjdHVyZTsKLX0KLQotLSAodm9pZCljcmVhdGVQcm9wZXJ0
eUxpc3RGaWxlCi17Ci0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6c2luZ2xldG9uKCku
Y3JlYXRlUHJvcGVydHlMaXN0RmlsZShwYXRoLCBwbHVnaW5Ib3N0QXJjaGl0ZWN0dXJlLCBbc2Vs
ZiBidW5kbGVJZGVudGlmaWVyXSk7Ci19Ci0KLSNlbmRpZgotCi0tICh2b2lkKXVubG9hZAotewot
ICAgIFtzZWxmIF91bmxvYWRXaXRoU2h1dGRvd246WUVTXTsKLX0KLQotLSAoQk9PTClfdHJ5TG9h
ZAotewotICAgIE5QX0dldEVudHJ5UG9pbnRzRnVuY1B0ciBOUF9HZXRFbnRyeVBvaW50cyA9IE5V
TEw7Ci0gICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6ZSA9IE5VTEw7Ci0gICAg
TlBFcnJvciBucEVycjsKLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICBDRkFic29sdXRlVGltZSBz
dGFydCA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwotICAgIENGQWJzb2x1dGVUaW1lIGN1
cnJlbnRUaW1lOwotICAgIENGQWJzb2x1dGVUaW1lIGR1cmF0aW9uOwotI2VuZGlmCi0gICAgTE9H
KFBsdWdpbnMsICIlZiBMb2FkIHRpbWluZyBzdGFydGVkIGZvcjogJUAiLCBzdGFydCwgKE5TU3Ry
aW5nICopW3NlbGYgcGx1Z2luSW5mb10ubmFtZSk7Ci0KLSAgICBpZiAoaXNMb2FkZWQpCi0gICAg
ICAgIHJldHVybiBZRVM7Ci0gICAgCi0gICAgaWYgKCFDRkJ1bmRsZUxvYWRFeGVjdXRhYmxlKGNm
QnVuZGxlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIE5POwotI2lmICFMT0dfRElTQUJMRUQKLSAg
ICBjdXJyZW50VGltZSA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwotICAgIGR1cmF0aW9u
ID0gY3VycmVudFRpbWUgLSBzdGFydDsKLSNlbmRpZgotICAgIExPRyhQbHVnaW5zLCAiJWYgQ0ZC
dW5kbGVMb2FkRXhlY3V0YWJsZSB0b29rICVmIHNlY29uZHMiLCBjdXJyZW50VGltZSwgZHVyYXRp
b24pOwotICAgIGlzTG9hZGVkID0gWUVTOwotCi0gICAgTlBfSW5pdGlhbGl6ZSA9IChOUF9Jbml0
aWFsaXplRnVuY1B0cilDRkJ1bmRsZUdldEZ1bmN0aW9uUG9pbnRlckZvck5hbWUoY2ZCdW5kbGUu
Z2V0KCksIENGU1RSKCJOUF9Jbml0aWFsaXplIikpOwotICAgIE5QX0dldEVudHJ5UG9pbnRzID0g
KE5QX0dldEVudHJ5UG9pbnRzRnVuY1B0cilDRkJ1bmRsZUdldEZ1bmN0aW9uUG9pbnRlckZvck5h
bWUoY2ZCdW5kbGUuZ2V0KCksIENGU1RSKCJOUF9HZXRFbnRyeVBvaW50cyIpKTsKLSAgICBOUF9T
aHV0ZG93biA9IChOUFBfU2h1dGRvd25Qcm9jUHRyKUNGQnVuZGxlR2V0RnVuY3Rpb25Qb2ludGVy
Rm9yTmFtZShjZkJ1bmRsZS5nZXQoKSwgQ0ZTVFIoIk5QX1NodXRkb3duIikpOwotICAgIGlmICgh
TlBfSW5pdGlhbGl6ZSB8fCAhTlBfR2V0RW50cnlQb2ludHMgfHwgIU5QX1NodXRkb3duKQotICAg
ICAgICByZXR1cm4gTk87Ci0KLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJ
TgotICAgIC8vIFBsdWdpbnMgKGF0IGxlYXN0IFFUKSByZXF1aXJlIHRoYXQgeW91IGNhbGwgVXNl
UmVzRmlsZSBvbiB0aGUgcmVzb3VyY2UgZmlsZSBiZWZvcmUgbG9hZGluZyBpdC4KLSAgICByZXNv
dXJjZVJlZiA9IFtzZWxmIG9wZW5SZXNvdXJjZUZpbGVdOwotICAgIGlmIChyZXNvdXJjZVJlZiAh
PSAtMSkgewotICAgICAgICBVc2VSZXNGaWxlKHJlc291cmNlUmVmKTsKLSAgICB9Ci0gICAgQUxM
T1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0KLSAgICBicm93c2VyRnVuY3MudmVyc2lv
biA9IE5QX1ZFUlNJT05fTUlOT1I7Ci0gICAgYnJvd3NlckZ1bmNzLnNpemUgPSBzaXplb2YoTlBO
ZXRzY2FwZUZ1bmNzKTsKLSAgICBicm93c2VyRnVuY3MuZ2V0dXJsID0gTlBOX0dldFVSTDsKLSAg
ICBicm93c2VyRnVuY3MucG9zdHVybCA9IE5QTl9Qb3N0VVJMOwotICAgIGJyb3dzZXJGdW5jcy5y
ZXF1ZXN0cmVhZCA9IE5QTl9SZXF1ZXN0UmVhZDsKLSAgICBicm93c2VyRnVuY3MubmV3c3RyZWFt
ID0gTlBOX05ld1N0cmVhbTsKLSAgICBicm93c2VyRnVuY3Mud3JpdGUgPSBOUE5fV3JpdGU7Ci0g
ICAgYnJvd3NlckZ1bmNzLmRlc3Ryb3lzdHJlYW0gPSBOUE5fRGVzdHJveVN0cmVhbTsKLSAgICBi
cm93c2VyRnVuY3Muc3RhdHVzID0gTlBOX1N0YXR1czsKLSAgICBicm93c2VyRnVuY3MudWFnZW50
ID0gTlBOX1VzZXJBZ2VudDsKLSAgICBicm93c2VyRnVuY3MubWVtYWxsb2MgPSBOUE5fTWVtQWxs
b2M7Ci0gICAgYnJvd3NlckZ1bmNzLm1lbWZyZWUgPSBOUE5fTWVtRnJlZTsKLSAgICBicm93c2Vy
RnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7Ci0gICAgYnJvd3NlckZ1bmNzLnJlbG9hZHBs
dWdpbnMgPSBOUE5fUmVsb2FkUGx1Z2luczsKLSAgICBicm93c2VyRnVuY3MuZ2V0dXJsbm90aWZ5
ID0gTlBOX0dldFVSTE5vdGlmeTsKLSAgICBicm93c2VyRnVuY3MucG9zdHVybG5vdGlmeSA9IE5Q
Tl9Qb3N0VVJMTm90aWZ5OwotICAgIGJyb3dzZXJGdW5jcy5nZXR2YWx1ZSA9IE5QTl9HZXRWYWx1
ZTsKLSAgICBicm93c2VyRnVuY3Muc2V0dmFsdWUgPSBOUE5fU2V0VmFsdWU7Ci0gICAgYnJvd3Nl
ckZ1bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0ludmFsaWRhdGVSZWN0OwotICAgIGJyb3dzZXJG
dW5jcy5pbnZhbGlkYXRlcmVnaW9uID0gTlBOX0ludmFsaWRhdGVSZWdpb247Ci0gICAgYnJvd3Nl
ckZ1bmNzLmZvcmNlcmVkcmF3ID0gTlBOX0ZvcmNlUmVkcmF3OwotICAgIGJyb3dzZXJGdW5jcy5n
ZXRKYXZhRW52ID0gTlBOX0dldEphdmFFbnY7Ci0gICAgYnJvd3NlckZ1bmNzLmdldEphdmFQZWVy
ID0gTlBOX0dldEphdmFQZWVyOwotICAgIGJyb3dzZXJGdW5jcy5wdXNocG9wdXBzZW5hYmxlZHN0
YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGU7Ci0gICAgYnJvd3NlckZ1bmNzLnBvcHBv
cHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGU7Ci0gICAgYnJvd3Nl
ckZ1bmNzLnBsdWdpbnRocmVhZGFzeW5jY2FsbCA9IE5QTl9QbHVnaW5UaHJlYWRBc3luY0NhbGw7
Ci0gICAgYnJvd3NlckZ1bmNzLmdldHZhbHVlZm9ydXJsID0gTlBOX0dldFZhbHVlRm9yVVJMOwot
ICAgIGJyb3dzZXJGdW5jcy5zZXR2YWx1ZWZvcnVybCA9IE5QTl9TZXRWYWx1ZUZvclVSTDsKLSAg
ICBicm93c2VyRnVuY3MuZ2V0YXV0aGVudGljYXRpb25pbmZvID0gTlBOX0dldEF1dGhlbnRpY2F0
aW9uSW5mbzsKLSAgICBicm93c2VyRnVuY3Muc2NoZWR1bGV0aW1lciA9IE5QTl9TY2hlZHVsZVRp
bWVyOwotICAgIGJyb3dzZXJGdW5jcy51bnNjaGVkdWxldGltZXIgPSBOUE5fVW5zY2hlZHVsZVRp
bWVyOwotICAgIGJyb3dzZXJGdW5jcy5wb3B1cGNvbnRleHRtZW51ID0gTlBOX1BvcFVwQ29udGV4
dE1lbnU7Ci0gICAgYnJvd3NlckZ1bmNzLmNvbnZlcnRwb2ludCA9IE5QTl9Db252ZXJ0UG9pbnQ7
Ci0KLSAgICBicm93c2VyRnVuY3MucmVsZWFzZXZhcmlhbnR2YWx1ZSA9IF9OUE5fUmVsZWFzZVZh
cmlhbnRWYWx1ZTsKLSAgICBicm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllciA9IF9OUE5f
R2V0U3RyaW5nSWRlbnRpZmllcjsKLSAgICBicm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmll
cnMgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzOwotICAgIGJyb3dzZXJGdW5jcy5nZXRpbnRp
ZGVudGlmaWVyID0gX05QTl9HZXRJbnRJZGVudGlmaWVyOwotICAgIGJyb3dzZXJGdW5jcy5pZGVu
dGlmaWVyaXNzdHJpbmcgPSBfTlBOX0lkZW50aWZpZXJJc1N0cmluZzsKLSAgICBicm93c2VyRnVu
Y3MudXRmOGZyb21pZGVudGlmaWVyID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXI7Ci0gICAgYnJv
d3NlckZ1bmNzLmludGZyb21pZGVudGlmaWVyID0gX05QTl9JbnRGcm9tSWRlbnRpZmllcjsKLSAg
ICBicm93c2VyRnVuY3MuY3JlYXRlb2JqZWN0ID0gX05QTl9DcmVhdGVPYmplY3Q7Ci0gICAgYnJv
d3NlckZ1bmNzLnJldGFpbm9iamVjdCA9IF9OUE5fUmV0YWluT2JqZWN0OwotICAgIGJyb3dzZXJG
dW5jcy5yZWxlYXNlb2JqZWN0ID0gX05QTl9SZWxlYXNlT2JqZWN0OwotICAgIGJyb3dzZXJGdW5j
cy5oYXNtZXRob2QgPSBfTlBOX0hhc01ldGhvZDsKLSAgICBicm93c2VyRnVuY3MuaW52b2tlID0g
X05QTl9JbnZva2U7Ci0gICAgYnJvd3NlckZ1bmNzLmludm9rZURlZmF1bHQgPSBfTlBOX0ludm9r
ZURlZmF1bHQ7Ci0gICAgYnJvd3NlckZ1bmNzLmV2YWx1YXRlID0gX05QTl9FdmFsdWF0ZTsKLSAg
ICBicm93c2VyRnVuY3MuaGFzcHJvcGVydHkgPSBfTlBOX0hhc1Byb3BlcnR5OwotICAgIGJyb3dz
ZXJGdW5jcy5nZXRwcm9wZXJ0eSA9IF9OUE5fR2V0UHJvcGVydHk7Ci0gICAgYnJvd3NlckZ1bmNz
LnNldHByb3BlcnR5ID0gX05QTl9TZXRQcm9wZXJ0eTsKLSAgICBicm93c2VyRnVuY3MucmVtb3Zl
cHJvcGVydHkgPSBfTlBOX1JlbW92ZVByb3BlcnR5OwotICAgIGJyb3dzZXJGdW5jcy5zZXRleGNl
cHRpb24gPSBfTlBOX1NldEV4Y2VwdGlvbjsKLSAgICBicm93c2VyRnVuY3MuZW51bWVyYXRlID0g
X05QTl9FbnVtZXJhdGU7Ci0gICAgYnJvd3NlckZ1bmNzLmNvbnN0cnVjdCA9IF9OUE5fQ29uc3Ry
dWN0OwotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIENGQWJzb2x1dGVUaW1lIGluaXRpYWxpemVT
dGFydCA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwotI2VuZGlmCi0gICAgTE9HKFBsdWdp
bnMsICIlZiBOUF9Jbml0aWFsaXplIHRpbWluZyBzdGFydGVkIiwgaW5pdGlhbGl6ZVN0YXJ0KTsK
LSAgICBucEVyciA9IE5QX0luaXRpYWxpemUoJmJyb3dzZXJGdW5jcyk7Ci0gICAgaWYgKG5wRXJy
ICE9IE5QRVJSX05PX0VSUk9SKQotICAgICAgICByZXR1cm4gTk87Ci0jaWYgIUxPR19ESVNBQkxF
RAotICAgIGN1cnJlbnRUaW1lID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7Ci0gICAgZHVy
YXRpb24gPSBjdXJyZW50VGltZSAtIGluaXRpYWxpemVTdGFydDsKLSNlbmRpZgotICAgIExPRyhQ
bHVnaW5zLCAiJWYgTlBfSW5pdGlhbGl6ZSB0b29rICVmIHNlY29uZHMiLCBjdXJyZW50VGltZSwg
ZHVyYXRpb24pOwotCi0gICAgcGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihOUFBsdWdpbkZ1bmNz
KTsKLQotICAgIG5wRXJyID0gTlBfR2V0RW50cnlQb2ludHMoJnBsdWdpbkZ1bmNzKTsKLSAgICBp
ZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAgIHJldHVybiBOTzsKLQotICAgIHBs
dWdpblNpemUgPSBwbHVnaW5GdW5jcy5zaXplOwotICAgIHBsdWdpblZlcnNpb24gPSBwbHVnaW5G
dW5jcy52ZXJzaW9uOwotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIGN1cnJlbnRUaW1lID0gQ0ZB
YnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7Ci0gICAgZHVyYXRpb24gPSBjdXJyZW50VGltZSAtIHN0
YXJ0OwotI2VuZGlmCi0gICAgTE9HKFBsdWdpbnMsICIlZiBUb3RhbCBsb2FkIHRpbWU6ICVmIHNl
Y29uZHMiLCBjdXJyZW50VGltZSwgZHVyYXRpb24pOwotCi0gICAgcmV0dXJuIFlFUzsKLX0KLQot
LSAoQk9PTClsb2FkCi17ICAgIAotICAgIGlmIChbc2VsZiBfdHJ5TG9hZF0pCi0gICAgICAgIHJl
dHVybiBbc3VwZXIgbG9hZF07Ci0KLSAgICBbc2VsZiBfdW5sb2FkV2l0aFNodXRkb3duOk5PXTsK
LSAgICByZXR1cm4gTk87Ci19Ci0KLS0gKE5QUGx1Z2luRnVuY3MgKilwbHVnaW5GdW5jcwotewot
ICAgIHJldHVybiAmcGx1Z2luRnVuY3M7Ci19Ci0KLS0gKE5QTmV0c2NhcGVGdW5jcyAqKWJyb3dz
ZXJGdW5jcwotewotICAgIHJldHVybiAmYnJvd3NlckZ1bmNzOwotfQotCi0tICh2b2lkKXdhc1Jl
bW92ZWRGcm9tUGx1Z2luRGF0YWJhc2U6KFdlYlBsdWdpbkRhdGFiYXNlICopZGF0YWJhc2UKLXsK
LSAgICBbc3VwZXIgd2FzUmVtb3ZlZEZyb21QbHVnaW5EYXRhYmFzZTpkYXRhYmFzZV07Ci0gICAg
Ci0gICAgLy8gVW5sb2FkIHdoZW4gcmVtb3ZlZCBmcm9tIGZpbmFsIHBsdWctaW4gZGF0YWJhc2UK
LSAgICBpZiAoW3BsdWdpbkRhdGFiYXNlcyBjb3VudF0gPT0gMCkKLSAgICAgICAgW3NlbGYgX3Vu
bG9hZFdpdGhTaHV0ZG93bjpZRVNdOwotfQotCi0tICh2b2lkKW9wZW4KLXsKLSAgICBpbnN0YW5j
ZUNvdW50Kys7Ci0gICAgCi0gICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGFsbCBpbnN0YW5j
ZXMgY2xvc2UgYSBwbHVnLWluIHBhY2thZ2UsIGJ1dCBhbm90aGVyCi0gICAgLy8gaW5zdGFuY2Ug
b3BlbnMgdGhlIHBhY2thZ2UgYmVmb3JlIGl0IGlzIHVubG9hZGVkICh3aGljaCBvbmx5IGhhcHBl
bnMgd2hlbgotICAgIC8vIHRoZSBwbHVnLWluIGRhdGFiYXNlIGlzIHJlZnJlc2hlZCkKLSAgICBu
ZWVkc1VubG9hZCA9IE5POwotICAgIAotICAgIGlmICghaXNMb2FkZWQpIHsKLSAgICAgICAgLy8g
U2hvdWxkIGxvYWQgd2hlbiB0aGUgZmlyc3QgaW5zdGFuY2Ugb3BlbnMgdGhlIHBsdWctaW4gcGFj
a2FnZQotICAgICAgICBBU1NFUlQoaW5zdGFuY2VDb3VudCA9PSAxKTsKLSAgICAgICAgW3NlbGYg
bG9hZF07Ci0gICAgfQotfQotCi0tICh2b2lkKWNsb3NlCi17Ci0gICAgQVNTRVJUKGluc3RhbmNl
Q291bnQgPiAwKTsKLSAgICBpbnN0YW5jZUNvdW50LS07Ci0gICAgaWYgKGluc3RhbmNlQ291bnQg
PT0gMCAmJiBuZWVkc1VubG9hZCkKLSAgICAgICAgW3NlbGYgX3VubG9hZFdpdGhTaHV0ZG93bjpZ
RVNdOwotfQotCi0KLS0gKEJPT0wpc3VwcG9ydHNTbmFwc2hvdHRpbmcKLXsKLSAgICBpZiAoW3Nl
bGYgYnVuZGxlSWRlbnRpZmllcl0gIT0gImNvbS5tYWNyb21lZGlhLkZsYXNoIFBsYXllci5wbHVn
aW4iKQotICAgICAgICByZXR1cm4gWUVTOwotICAgIAotICAgIC8vIEZsYXNoIGhhcyBhIGJvZ3Vz
IEluZm8ucGxpc3QgZW50cnkgZm9yIENGQnVuZGxlVmVyc2lvblN0cmluZywgc28gdXNlIENGQnVu
ZGxlU2hvcnRWZXJzaW9uU3RyaW5nLgotICAgIE5TU3RyaW5nICp2ZXJzaW9uU3RyaW5nID0gKE5T
U3RyaW5nICopQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoQ0ZCdW5kbGVHZXRJbmZvRGljdGlvbmFyeShj
ZkJ1bmRsZS5nZXQoKSksIENGU1RSKCJDRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZyIpKTsKLSAg
ICAKLSAgICBpZiAoIVt2ZXJzaW9uU3RyaW5nIGhhc1ByZWZpeDpAIjEwLjEiXSkKLSAgICAgICAg
cmV0dXJuIFlFUzsKLSAgICAKLSAgICAvLyBTb21lIHByZXJlbGVhc2UgdmVyc2lvbnMgb2YgRmxh
c2ggMTAuMSBjcmFzaCB3aGVuIHNlbnQgYSBkcmF3UmVjdCBldmVudCB1c2luZyB0aGUgQ0EgZHJh
d2luZyBtb2RlbDogPHJkYXI6Ly9wcm9ibGVtLzc3Mzk5MjI+Ci0gICAgcmV0dXJuIENGU3RyaW5n
Q29tcGFyZSgoQ0ZTdHJpbmdSZWYpdmVyc2lvblN0cmluZywgQ0ZTVFIoIjEwLjEuNTMuNjAiKSwg
a0NGQ29tcGFyZU51bWVyaWNhbGx5KSAhPSBrQ0ZDb21wYXJlTGVzc1RoYW47Ci19Ci0KLUBlbmQK
LQotQGltcGxlbWVudGF0aW9uIFdlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSAoSW50ZXJuYWwpCi0K
LS0gKHZvaWQpX3VubG9hZFdpdGhTaHV0ZG93bjooQk9PTClzaHV0ZG93bgotewotICAgIGlmICgh
aXNMb2FkZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBMT0coUGx1Z2lucywgIlVubG9h
ZGluZyAlQC4uLiIsIChOU1N0cmluZyAqKXBsdWdpbkluZm8ubmFtZSk7Ci0KLSAgICAvLyBDYW5u
b3QgdW5sb2FkIGEgcGx1Zy1pbiBwYWNrYWdlIHdoaWxlIGFuIGluc3RhbmNlIGlzIHN0aWxsIHVz
aW5nIGl0Ci0gICAgaWYgKGluc3RhbmNlQ291bnQgPiAwKSB7Ci0gICAgICAgIG5lZWRzVW5sb2Fk
ID0gWUVTOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHNodXRkb3duICYmIE5Q
X1NodXRkb3duKQotICAgICAgICBOUF9TaHV0ZG93bigpOwotCi0gICAgaWYgKHJlc291cmNlUmVm
ICE9IC0xKQotICAgICAgICBbc2VsZiBjbG9zZVJlc291cmNlRmlsZTpyZXNvdXJjZVJlZl07Ci0K
LSAgICBMT0coUGx1Z2lucywgIlBsdWdpbiBVbmxvYWRlZCIpOwotICAgIGlzTG9hZGVkID0gTk87
Ci19Ci0KLUBlbmQKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
UGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxOTM5MGI1YzAyYTc1Zjc5Zjk2NmY4MWE0MWEyZDcwNTY1NzhmMDg1Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0uaAorKysgL2Rldi9udWxs
CkBAIC0xLDEzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0jaW1wb3J0IDxG
b3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViQ29yZS9UaW1lci5oPgotI2lt
cG9ydCA8V2ViQ29yZS9OZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oPgotI2ltcG9ydCA8V2Vi
S2l0TGVnYWN5L25wZnVuY3Rpb25zLmg+Ci0jaW1wb3J0IDx3dGYvUmVmLmg+Ci0jaW1wb3J0IDx3
dGYvUmVmQ291bnRlZC5oPgotI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgotI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgotI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaW1wb3J0ICJXZWJO
ZXRzY2FwZVBsdWdpblZpZXcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEZy
YW1lTG9hZGVyOwotICAgIGNsYXNzIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOwotfQotCi1A
Y2xhc3MgV2ViTmV0c2NhcGVQbHVnaW5WaWV3OwotQGNsYXNzIE5TVVJMUmVzcG9uc2U7Ci0KLWNs
YXNzIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViTmV0c2Nh
cGVQbHVnaW5TdHJlYW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHByaXZhdGUg
V2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQKLXsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtPiBjcmVhdGUoTlNVUkxSZXF1ZXN0
ICpyZXF1ZXN0LCBOUFAgcGx1Z2luLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlm
eURhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJOZXRzY2FwZVBs
dWdpblN0cmVhbShyZXF1ZXN0LCBwbHVnaW4sIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEp
KTsKLSAgICB9Ci0gICAgc3RhdGljIFJlZjxXZWJOZXRzY2FwZVBsdWdpblN0cmVhbT4gY3JlYXRl
KFdlYkNvcmU6OkZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlcikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtKGZyYW1lTG9hZGVyKSk7Ci0g
ICAgfQotICAgIHZpcnR1YWwgfldlYk5ldHNjYXBlUGx1Z2luU3RyZWFtKCk7Ci0KLSAgICBOUFAg
cGx1Z2luKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW47IH0KLSAgICB2b2lkIHNldFBsdWdpbihO
UFApOwotICAgIAotICAgIHN0YXRpYyBOUFAgb3duZXJGb3JTdHJlYW0oTlBTdHJlYW0gKik7Ci0K
LSAgICBzdGF0aWMgTlBSZWFzb24gcmVhc29uRm9yRXJyb3IoTlNFcnJvciAqKTsKLSAgICBOU0Vy
cm9yICplcnJvckZvclJlYXNvbihOUFJlYXNvbikgY29uc3Q7Ci0KLSAgICB2b2lkIGNhbmNlbExv
YWRBbmREZXN0cm95U3RyZWFtV2l0aEVycm9yKE5TRXJyb3IgKik7Ci0KLSAgICB2b2lkIHNldFJl
cXVlc3RVUkwoY29uc3QgVVJMJiByZXF1ZXN0VVJMKSB7IG1fcmVxdWVzdFVSTCA9IHJlcXVlc3RV
Ukw7IH0KLQotICAgIHZvaWQgc3RhcnQoKTsKLSAgICB2b2lkIHN0b3AoKTsKLSAgICAKLSAgICB2
b2lkIHN0YXJ0U3RyZWFtV2l0aFJlc3BvbnNlKE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlKTsKLSAg
ICAKLSAgICB2b2lkIGRlc3Ryb3lTdHJlYW1XaXRoRXJyb3IoTlNFcnJvciAqKTsKLQotICAgIC8v
IEZJWE1FOiBDYW4gdGhlc2UgYmUgbWFkZSBwcml2YXRlPwotICAgIHZvaWQgZGlkUmVjZWl2ZURh
dGEoV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCB1aW50OF90KiBi
eXRlcywgaW50IGxlbmd0aCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFdl
YkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKikgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6
Ci0gICAgdm9pZCBkZXN0cm95U3RyZWFtKCk7Ci0gICAgdm9pZCBjYW5jZWxMb2FkV2l0aEVycm9y
KE5TRXJyb3IgKik7Ci0gICAgdm9pZCBkZXN0cm95U3RyZWFtV2l0aFJlYXNvbihOUFJlYXNvbik7
Ci0gICAgdm9pZCBkZWxpdmVyRGF0YVRvRmlsZShOU0RhdGEgKmRhdGEpOwotICAgIHZvaWQgZGVs
aXZlckRhdGEoKTsKLQotICAgIHZvaWQgc3RhcnRTdHJlYW0oTlNVUkwgKiwgbG9uZyBsb25nIGV4
cGVjdGVkQ29udGVudExlbmd0aCwgTlNEYXRlICpsYXN0TW9kaWZpZWREYXRlLCBjb25zdCBXVEY6
OlN0cmluZyYgbWltZVR5cGUsIE5TRGF0YSAqaGVhZGVycyk7Ci0gICAgCi0gICAgTlNFcnJvciAq
cGx1Z2luQ2FuY2VsbGVkQ29ubmVjdGlvbkVycm9yKCkgY29uc3Q7Ci0KLSAgICAvLyBOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudCBtZXRob2RzLgotICAgIHZvaWQgd2lsbFNlbmRSZXF1
ZXN0KFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVz
cG9uc2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYp
PiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpOZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Um
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEZhaWwoV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJl
YW1Mb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJikgb3ZlcnJpZGU7Ci0gICAg
Ym9vbCB3YW50c0FsbFN0cmVhbXMoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIFJldGFpblB0cjxO
U011dGFibGVEYXRhPiBtX2RlbGl2ZXJ5RGF0YTsKLSAgICBVUkwgbV9yZXF1ZXN0VVJMOwotICAg
IFJldGFpblB0cjxOU1VSTD4gbV9yZXNwb25zZVVSTDsKLSAgICBDU3RyaW5nIG1fbWltZVR5cGU7
Ci0KLSAgICBOUFAgbV9wbHVnaW47Ci0gICAgdWludDE2X3QgbV90cmFuc2Zlck1vZGU7Ci0gICAg
aW50MzJfdCBtX29mZnNldDsKLSAgICBOUFN0cmVhbSBtX3N0cmVhbTsKLSAgICBSZXRhaW5QdHI8
TlNTdHJpbmc+IG1fcGF0aDsKLSAgICBpbnQgbV9maWxlRGVzY3JpcHRvcjsKLSAgICBCT09MIG1f
c2VuZE5vdGlmaWNhdGlvbjsKLSAgICB2b2lkICptX25vdGlmeURhdGE7Ci0gICAgY2hhciAqbV9o
ZWFkZXJzOwotICAgIFJldGFpblB0cjxXZWJOZXRzY2FwZVBsdWdpblZpZXc+IG1fcGx1Z2luVmll
dzsKLSAgICBOUFJlYXNvbiBtX3JlYXNvbjsKLSAgICBib29sIG1faXNUZXJtaW5hdGVkOwotICAg
IGJvb2wgbV9uZXdTdHJlYW1TdWNjZXNzZnVsOwotICAgIAotICAgIFdlYkNvcmU6OkZyYW1lTG9h
ZGVyKiBtX2ZyYW1lTG9hZGVyOwotICAgIFJlZlB0cjxXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlcj4gbV9sb2FkZXI7Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZVVSTFJlcXVlc3Q+
IG1fcmVxdWVzdDsKLSAgICBOUFBsdWdpbkZ1bmNzICptX3BsdWdpbkZ1bmNzOwotCi0gICAgV2Vi
Q29yZTo6VGltZXIgbV9kZWxpdmVyRGF0YVRpbWVyOwotICAgIAotICAgIFdlYk5ldHNjYXBlUGx1
Z2luU3RyZWFtKFdlYkNvcmU6OkZyYW1lTG9hZGVyKik7Ci0gICAgV2ViTmV0c2NhcGVQbHVnaW5T
dHJlYW0oTlNVUkxSZXF1ZXN0ICosIE5QUCwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBu
b3RpZnlEYXRhKTsKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbSBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDlhNGMyNTE3ZTg0Yzk2N2U4ZjdmZDM5OGY2YzViZGNhNzczMDEw
NzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQorKysg
L2Rldi9udWxsCkBAIC0xLDYzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLSNpbXBvcnQgIldlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLmgiCi0KLSNpbXBvcnQg
IldlYkZyYW1lSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYktpdEVycm9yc1ByaXZhdGUuaCIKLSNp
bXBvcnQgIldlYktpdExvZ2dpbmcuaCIKLSNpbXBvcnQgIldlYk5TT2JqZWN0RXh0cmFzLmgiCi0j
aW1wb3J0ICJXZWJOU1VSTEV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNVUkxSZXF1ZXN0RXh0cmFz
LmgiCi0jaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UuaCIKLSNpbXBvcnQgIldlYk5l
dHNjYXBlUGx1Z2luVmlldy5oIgotI2ltcG9ydCAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgi
Ci0jaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJMUmVzcG9uc2UuaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0pTTG9jay5oPgotI2ltcG9ydCA8V2ViQ29yZS9Db21tb25WTS5oPgotI2ltcG9ydCA8
V2ViQ29yZS9Eb2N1bWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgot
I2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5o
PgotI2ltcG9ydCA8V2ViQ29yZS9KU0RPTVdpbmRvd0Jhc2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
TG9hZGVyU3RyYXRlZ3kuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TdHJhdGVnaWVzLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Nl
Y3VyaXR5UG9saWN5Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVVUkxSZXNwb25zZS5oPgot
I2ltcG9ydCA8cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4KLSNpbXBvcnQgPHd0Zi9Db21wbGV0
aW9uSGFuZGxlci5oPgotI2ltcG9ydCA8d3RmL0hhc2hNYXAuaD4KLSNpbXBvcnQgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgotI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi11c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKLQotI2RlZmluZSBXRUJfUkVBU09OX05PTkUgLTEKLQotY2xhc3MgUGx1
Z2luU3RvcERlZmVycmVyIHsKLXB1YmxpYzoKLSAgICBQbHVnaW5TdG9wRGVmZXJyZXIoV2ViTmV0
c2NhcGVQbHVnaW5WaWV3KiBwbHVnaW5WaWV3KQotICAgICAgICA6IG1fcGx1Z2luVmlldyhwbHVn
aW5WaWV3KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcGx1Z2luVmlldyk7Ci0gICAgICAgIAot
ICAgICAgICBbbV9wbHVnaW5WaWV3LmdldCgpIHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwotICAg
IH0KLSAgICAKLSAgICB+UGx1Z2luU3RvcERlZmVycmVyKCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChtX3BsdWdpblZpZXcpOwotICAgICAgICBbbV9wbHVnaW5WaWV3LmdldCgpIGRpZENhbGxQbHVn
SW5GdW5jdGlvbl07Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8V2ViTmV0
c2NhcGVQbHVnaW5WaWV3PiBtX3BsdWdpblZpZXc7Ci19OwotCi10eXBlZGVmIEhhc2hNYXA8TlBT
dHJlYW0qLCBOUFA+IFN0cmVhbU1hcDsKLXN0YXRpYyBTdHJlYW1NYXAmIHN0cmVhbXMoKQotewot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJlYW1NYXA+IHN0YXRpY1N0cmVhbXM7Ci0gICAg
cmV0dXJuIHN0YXRpY1N0cmVhbXM7Ci19Ci0KLU5QUCBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6
b3duZXJGb3JTdHJlYW0oTlBTdHJlYW0gKnN0cmVhbSkKLXsKLSAgICByZXR1cm4gc3RyZWFtcygp
LmdldChzdHJlYW0pOwotfQotCi1OUFJlYXNvbiBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6cmVh
c29uRm9yRXJyb3IoTlNFcnJvciAqZXJyb3IpCi17Ci0gICAgaWYgKCFlcnJvcikKLSAgICAgICAg
cmV0dXJuIE5QUkVTX0RPTkU7Ci0KLSAgICBpZiAoW1tlcnJvciBkb21haW5dIGlzRXF1YWxUb1N0
cmluZzpOU1VSTEVycm9yRG9tYWluXSAmJiBbZXJyb3IgY29kZV0gPT0gTlNVUkxFcnJvckNhbmNl
bGxlZCkKLSAgICAgICAgcmV0dXJuIE5QUkVTX1VTRVJfQlJFQUs7Ci0KLSAgICByZXR1cm4gTlBS
RVNfTkVUV09SS19FUlI7Ci19Ci0KLU5TRXJyb3IgKldlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpw
bHVnaW5DYW5jZWxsZWRDb25uZWN0aW9uRXJyb3IoKSBjb25zdAotewotICAgIHJldHVybiBhZG9w
dE5TKFtbTlNFcnJvciBhbGxvY10gX2luaXRXaXRoUGx1Z2luRXJyb3JDb2RlOldlYktpdEVycm9y
UGx1Z0luQ2FuY2VsbGVkQ29ubmVjdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRlbnRVUkw6bV9yZXNwb25zZVVSTCA/IG1fcmVzcG9uc2VVUkwuZ2V0
KCkgOiAoTlNVUkwgKiltX3JlcXVlc3RVUkwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwbHVnaW5QYWdlVVJMOm5pbAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBsdWdpbk5hbWU6W1ttX3BsdWdpblZpZXcuZ2V0KCkgcGx1Z2luUGFj
a2FnZV0gcGx1Z2luSW5mb10ubmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTUlNRVR5cGU6KE5TU3RyaW5nICopU3RyaW5nOjpmcm9tVVRGOChtX21pbWVU
eXBlLmRhdGEoKSwgbV9taW1lVHlwZS5sZW5ndGgoKSldKS5hdXRvcmVsZWFzZSgpOwotfQotCi1O
U0Vycm9yICpXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6ZXJyb3JGb3JSZWFzb24oTlBSZWFzb24g
cmVhc29uKSBjb25zdAotewotICAgIGlmIChyZWFzb24gPT0gTlBSRVNfRE9ORSkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLQotICAgIGlmIChyZWFzb24gPT0gTlBSRVNfVVNFUl9CUkVBSykKLSAgICAg
ICAgcmV0dXJuIFtOU0Vycm9yIF93ZWJLaXRFcnJvcldpdGhEb21haW46TlNVUkxFcnJvckRvbWFp
bgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTpOU1VSTEVy
cm9yQ2FuY2VsbGVkIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVSTDptX3Jlc3BvbnNlVVJMID8gbV9yZXNwb25zZVVSTC5nZXQoKSA6IChOU1VSTCAqKW1fcmVx
dWVzdFVSTF07Ci0KLSAgICByZXR1cm4gcGx1Z2luQ2FuY2VsbGVkQ29ubmVjdGlvbkVycm9yKCk7
Ci19Ci0KLVdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpXZWJOZXRzY2FwZVBsdWdpblN0cmVhbShG
cmFtZUxvYWRlciogZnJhbWVMb2FkZXIpCi0gICAgOiBtX3BsdWdpbigwKQotICAgICwgbV90cmFu
c2Zlck1vZGUoMCkKLSAgICAsIG1fb2Zmc2V0KDApCi0gICAgLCBtX2ZpbGVEZXNjcmlwdG9yKC0x
KQotICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKGZhbHNlKQotICAgICwgbV9ub3RpZnlEYXRhKDAp
Ci0gICAgLCBtX2hlYWRlcnMoMCkKLSAgICAsIG1fcmVhc29uKE5QUkVTX0JBU0UpCi0gICAgLCBt
X2lzVGVybWluYXRlZChmYWxzZSkKLSAgICAsIG1fbmV3U3RyZWFtU3VjY2Vzc2Z1bChmYWxzZSkK
LSAgICAsIG1fZnJhbWVMb2FkZXIoZnJhbWVMb2FkZXIpCi0gICAgLCBtX3BsdWdpbkZ1bmNzKDAp
Ci0gICAgLCBtX2RlbGl2ZXJEYXRhVGltZXIoKnRoaXMsICZXZWJOZXRzY2FwZVBsdWdpblN0cmVh
bTo6ZGVsaXZlckRhdGEpCi17Ci0gICAgbWVtc2V0KCZtX3N0cmVhbSwgMCwgc2l6ZW9mKE5QU3Ry
ZWFtKSk7Ci19Ci0KLVdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpXZWJOZXRzY2FwZVBsdWdpblN0
cmVhbShOU1VSTFJlcXVlc3QgKnJlcXVlc3QsIE5QUCBwbHVnaW4sIGJvb2wgc2VuZE5vdGlmaWNh
dGlvbiwgdm9pZCogbm90aWZ5RGF0YSkKLSAgICA6IG1fcmVxdWVzdFVSTChbcmVxdWVzdCBVUkxd
KQotICAgICwgbV9wbHVnaW4oMCkKLSAgICAsIG1fdHJhbnNmZXJNb2RlKDApCi0gICAgLCBtX29m
ZnNldCgwKQotICAgICwgbV9maWxlRGVzY3JpcHRvcigtMSkKLSAgICAsIG1fc2VuZE5vdGlmaWNh
dGlvbihzZW5kTm90aWZpY2F0aW9uKQotICAgICwgbV9ub3RpZnlEYXRhKG5vdGlmeURhdGEpCi0g
ICAgLCBtX2hlYWRlcnMoMCkKLSAgICAsIG1fcmVhc29uKE5QUkVTX0JBU0UpCi0gICAgLCBtX2lz
VGVybWluYXRlZChmYWxzZSkKLSAgICAsIG1fbmV3U3RyZWFtU3VjY2Vzc2Z1bChmYWxzZSkKLSAg
ICAsIG1fZnJhbWVMb2FkZXIoMCkKLSAgICAsIG1fcmVxdWVzdChhZG9wdE5TKFtyZXF1ZXN0IG11
dGFibGVDb3B5XSkpCi0gICAgLCBtX3BsdWdpbkZ1bmNzKDApCi0gICAgLCBtX2RlbGl2ZXJEYXRh
VGltZXIoKnRoaXMsICZXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6ZGVsaXZlckRhdGEpCi17Ci0g
ICAgbWVtc2V0KCZtX3N0cmVhbSwgMCwgc2l6ZW9mKE5QU3RyZWFtKSk7Ci0KLSAgICBXZWJOZXRz
Y2FwZVBsdWdpblZpZXcgKnZpZXcgPSAoV2ViTmV0c2NhcGVQbHVnaW5WaWV3ICopcGx1Z2luLT5u
ZGF0YTsKLSAgICAKLSAgICAvLyBUaGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gZG9uZSBieSB0
aGUgcGx1Zy1pbiB2aWV3LgotICAgIEFTU0VSVChjb3JlKFt2aWV3IHdlYkZyYW1lXSktPmRvY3Vt
ZW50KCktPnNlY3VyaXR5T3JpZ2luKCkuY2FuRGlzcGxheShbcmVxdWVzdCBVUkxdKSk7Ci0gICAg
Ci0gICAgQVNTRVJUKFtyZXF1ZXN0IFVSTF0pOwotICAgIEFTU0VSVChwbHVnaW4pOwotICAgIAot
ICAgIHNldFBsdWdpbihwbHVnaW4pOwotICAgIAotICAgIHN0cmVhbXMoKS5hZGQoJm1fc3RyZWFt
LCBwbHVnaW4pOwotICAgIAotICAgIFN0cmluZyByZWZlcnJlciA9IFNlY3VyaXR5UG9saWN5Ojpn
ZW5lcmF0ZVJlZmVycmVySGVhZGVyKGNvcmUoW3ZpZXcgd2ViRnJhbWVdKS0+ZG9jdW1lbnQoKS0+
cmVmZXJyZXJQb2xpY3koKSwgW3JlcXVlc3QgVVJMXSwgY29yZShbdmlldyB3ZWJGcmFtZV0pLT5s
b2FkZXIoKS5vdXRnb2luZ1JlZmVycmVyKCkpOwotICAgIGlmIChyZWZlcnJlci5pc0VtcHR5KCkp
Ci0gICAgICAgIFttX3JlcXVlc3QuZ2V0KCkgX3dlYl9zZXRIVFRQUmVmZXJyZXI6bmlsXTsKLSAg
ICBlbHNlCi0gICAgICAgIFttX3JlcXVlc3QuZ2V0KCkgX3dlYl9zZXRIVFRQUmVmZXJyZXI6cmVm
ZXJyZXJdOwotfQotCi1XZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6fldlYk5ldHNjYXBlUGx1Z2lu
U3RyZWFtKCkKLXsKLSAgICBBU1NFUlQoIW1fcGx1Z2luKTsKLSAgICBBU1NFUlQobV9pc1Rlcm1p
bmF0ZWQpOwotICAgIEFTU0VSVCghbV9zdHJlYW0ubmRhdGEpOwotICAgIAotICAgIC8vIFRoZSBz
dHJlYW0gZmlsZSBzaG91bGQgaGF2ZSBiZWVuIGRlbGV0ZWQsIGFuZCB0aGUgcGF0aCBmcmVlZCwg
aW4gLV9kZXN0cm95U3RyZWFtCi0gICAgQVNTRVJUKCFtX3BhdGgpOwotICAgIEFTU0VSVChtX2Zp
bGVEZXNjcmlwdG9yID09IC0xKTsKLSAgICAKLSAgICBmcmVlKCh2b2lkICopbV9zdHJlYW0udXJs
KTsKLSAgICBmcmVlKG1faGVhZGVycyk7Ci0gICAgCi0gICAgc3RyZWFtcygpLnJlbW92ZSgmbV9z
dHJlYW0pOwotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpzZXRQbHVnaW4oTlBQ
IHBsdWdpbikKLXsKLSAgICBpZiAocGx1Z2luKSB7Ci0gICAgICAgIG1fcGx1Z2luID0gcGx1Z2lu
OwotICAgICAgICBtX3BsdWdpblZpZXcgPSBzdGF0aWNfY2FzdDxXZWJOZXRzY2FwZVBsdWdpblZp
ZXcgKj4obV9wbHVnaW4tPm5kYXRhKTsKLQotICAgICAgICBXZWJOZXRzY2FwZVBsdWdpblBhY2th
Z2UgKnBsdWdpblBhY2thZ2UgPSBbbV9wbHVnaW5WaWV3LmdldCgpIHBsdWdpblBhY2thZ2VdOwot
ICAgICAgICAKLSAgICAgICAgbV9wbHVnaW5GdW5jcyA9IFtwbHVnaW5QYWNrYWdlIHBsdWdpbkZ1
bmNzXTsKLSAgICB9IGVsc2UgewotICAgICAgICBXZWJOZXRzY2FwZVBsdWdpblZpZXcgKnZpZXcg
PSBtX3BsdWdpblZpZXcuZ2V0KCk7Ci0gICAgICAgIG1fcGx1Z2luID0gMDsKLSAgICAgICAgbV9w
bHVnaW5GdW5jcyA9IDA7Ci0gICAgICAgIAotICAgICAgICBbdmlldyBkaXNjb25uZWN0U3RyZWFt
OnRoaXNdOwotICAgICAgICBtX3BsdWdpblZpZXcgPSAwOwotICAgIH0gICAgICAgIAotfQotCi12
b2lkIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpzdGFydFN0cmVhbShOU1VSTCAqdXJsLCBsb25n
IGxvbmcgZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBOU0RhdGUgKmxhc3RNb2RpZmllZERhdGUsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE5TRGF0YSAqaGVhZGVycykKLXsKLSAgICBBU1NFUlQoIW1f
aXNUZXJtaW5hdGVkKTsKLSAgICAKLSAgICBtX3Jlc3BvbnNlVVJMID0gdXJsOwotICAgIG1fbWlt
ZVR5cGUgPSBtaW1lVHlwZS51dGY4KCk7Ci0gICAgCi0gICAgZnJlZSgodm9pZCAqKW1fc3RyZWFt
LnVybCk7Ci0gICAgbV9zdHJlYW0udXJsID0gc3RyZHVwKFttX3Jlc3BvbnNlVVJMLmdldCgpIF93
ZWJfVVJMQ1N0cmluZ10pOwotCi0gICAgbV9zdHJlYW0ubmRhdGEgPSB0aGlzOwotICAgIG1fc3Ry
ZWFtLmVuZCA9IGV4cGVjdGVkQ29udGVudExlbmd0aCA+IDAgPyAodWludDMyX3QpZXhwZWN0ZWRD
b250ZW50TGVuZ3RoIDogMDsKLSAgICBtX3N0cmVhbS5sYXN0bW9kaWZpZWQgPSAodWludDMyX3Qp
W2xhc3RNb2RpZmllZERhdGUgdGltZUludGVydmFsU2luY2UxOTcwXTsKLSAgICBtX3N0cmVhbS5u
b3RpZnlEYXRhID0gbV9ub3RpZnlEYXRhOwotCi0gICAgaWYgKGhlYWRlcnMpIHsKLSAgICAgICAg
dW5zaWduZWQgbGVuID0gW2hlYWRlcnMgbGVuZ3RoXTsKLSAgICAgICAgbV9oZWFkZXJzID0gKGNo
YXIqKSBtYWxsb2MobGVuICsgMSk7Ci0gICAgICAgIFtoZWFkZXJzIGdldEJ5dGVzOm1faGVhZGVy
cyBsZW5ndGg6bGVuXTsKLSAgICAgICAgbV9oZWFkZXJzW2xlbl0gPSAwOwotICAgICAgICBtX3N0
cmVhbS5oZWFkZXJzID0gbV9oZWFkZXJzOwotICAgIH0KLSAgICAKLSAgICBtX3RyYW5zZmVyTW9k
ZSA9IE5QX05PUk1BTDsKLSAgICBtX29mZnNldCA9IDA7Ci0gICAgbV9yZWFzb24gPSBXRUJfUkVB
U09OX05PTkU7Ci0gICAgLy8gRklYTUU6IElmIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtIGNhbGxl
ZCBvdXIgaW5pdGlhbGl6ZXIgd2Ugd291bGRuJ3QgaGF2ZSB0byBkbyB0aGlzIGhlcmUuCi0gICAg
bV9maWxlRGVzY3JpcHRvciA9IC0xOwotCi0gICAgLy8gRklYTUU6IE5lZWQgYSB3YXkgdG8gY2hl
Y2sgaWYgc3RyZWFtIGlzIHNlZWthYmxlCi0KLSAgICBOUEVycm9yIG5wRXJyOwotICAgIHsKLSAg
ICAgICAgUGx1Z2luU3RvcERlZmVycmVyIGRlZmVycmVyKG1fcGx1Z2luVmlldy5nZXQoKSk7Ci0g
ICAgICAgIG5wRXJyID0gbV9wbHVnaW5GdW5jcy0+bmV3c3RyZWFtKG1fcGx1Z2luLCBtX21pbWVU
eXBlLm11dGFibGVEYXRhKCksICZtX3N0cmVhbSwgTk8sICZtX3RyYW5zZmVyTW9kZSk7Ci0gICAg
fQotCi0gICAgTE9HKFBsdWdpbnMsICJOUFBfTmV3U3RyZWFtIFVSTD0lQCBNSU1FPSVzIGVycm9y
PSVkIiwgbV9yZXNwb25zZVVSTC5nZXQoKSwgbV9taW1lVHlwZS5kYXRhKCksIG5wRXJyKTsKLQot
ICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikgewotICAgICAgICBMT0dfRVJST1IoIk5Q
UF9OZXdTdHJlYW0gZmFpbGVkIHdpdGggZXJyb3I6ICVkIHJlc3BvbnNlVVJMOiAlQCIsIG5wRXJy
LCBtX3Jlc3BvbnNlVVJMLmdldCgpKTsKLSAgICAgICAgLy8gQ2FsbGluZyBjYW5jZWxMb2FkV2l0
aEVycm9yOiBjYW5jZWxzIHRoZSBsb2FkLCBidXQgZG9lc24ndCBjYWxsIE5QUF9EZXN0cm95U3Ry
ZWFtLgotICAgICAgICBjYW5jZWxMb2FkV2l0aEVycm9yKHBsdWdpbkNhbmNlbGxlZENvbm5lY3Rp
b25FcnJvcigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fbmV3U3RyZWFtU3Vj
Y2Vzc2Z1bCA9IHRydWU7Ci0KLSAgICBzd2l0Y2ggKG1fdHJhbnNmZXJNb2RlKSB7Ci0gICAgICAg
IGNhc2UgTlBfTk9STUFMOgotICAgICAgICAgICAgTE9HKFBsdWdpbnMsICJTdHJlYW0gdHlwZTog
TlBfTk9STUFMIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOUF9BU0ZJTEVP
TkxZOgotICAgICAgICAgICAgTE9HKFBsdWdpbnMsICJTdHJlYW0gdHlwZTogTlBfQVNGSUxFT05M
WSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTlBfQVNGSUxFOgotICAgICAg
ICAgICAgTE9HKFBsdWdpbnMsICJTdHJlYW0gdHlwZTogTlBfQVNGSUxFIik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBOUF9TRUVLOgotICAgICAgICAgICAgTE9HX0VSUk9SKCJT
dHJlYW0gdHlwZTogTlBfU0VFSyBub3QgeWV0IHN1cHBvcnRlZCIpOwotICAgICAgICAgICAgY2Fu
Y2VsTG9hZEFuZERlc3Ryb3lTdHJlYW1XaXRoRXJyb3IocGx1Z2luQ2FuY2VsbGVkQ29ubmVjdGlv
bkVycm9yKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBMT0dfRVJST1IoInVua25vd24gc3RyZWFtIHR5cGUiKTsKLSAgICB9Ci19Ci0KLXZvaWQg
V2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OnN0YXJ0KCkKLXsKLSAgICBBU1NFUlQobV9yZXF1ZXN0
KTsKLSAgICBBU1NFUlQoIW1fZnJhbWVMb2FkZXIpOwotICAgIEFTU0VSVCghbV9sb2FkZXIpOwot
Ci0gICAgd2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkuc2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2Fk
KCpjb3JlKFttX3BsdWdpblZpZXcuZ2V0KCkgd2ViRnJhbWVdKSwgKnRoaXMsIG1fcmVxdWVzdC5n
ZXQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9XSAoUmVmUHRyPFdlYkNv
cmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiYmIGxvYWRlcikgewotICAgICAgICBtX2xv
YWRlciA9IFdURk1vdmUobG9hZGVyKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJOZXRzY2FwZVBs
dWdpblN0cmVhbTo6c3RvcCgpCi17Ci0gICAgQVNTRVJUKCFtX2ZyYW1lTG9hZGVyKTsKLSAgICAK
LSAgICBpZiAoIW1fbG9hZGVyLT5pc0RvbmUoKSkKLSAgICAgICAgY2FuY2VsTG9hZEFuZERlc3Ry
b3lTdHJlYW1XaXRoRXJyb3IobV9sb2FkZXItPmNhbmNlbGxlZEVycm9yKCkpOwotfQotCi12b2lk
IFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjp3aWxsU2VuZFJlcXVlc3QoTmV0c2NhcGVQbHVnSW5T
dHJlYW1Mb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
Jik+JiYgY2FsbGJhY2spCi17Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3RpZnkgdGhlIHBs
dWctaW4gd2l0aCBOUFBfVVJMUmVkaXJlY3ROb3RpZnkgaGVyZS4KLSAgICBjYWxsYmFjayhXVEZN
b3ZlKHJlcXVlc3QpKTsKLX0KLQotdm9pZCBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6ZGlkUmVj
ZWl2ZVJlc3BvbnNlKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgTlNVUkxSZXNwb25zZSAqciA9IHJlc3BvbnNlLm5z
VVJMUmVzcG9uc2UoKTsKLSAgICAKLSAgICBOU011dGFibGVEYXRhICp0aGVIZWFkZXJzID0gbmls
OwotICAgIGxvbmcgbG9uZyBleHBlY3RlZENvbnRlbnRMZW5ndGggPSBbciBleHBlY3RlZENvbnRl
bnRMZW5ndGhdOwotICAgIAotICAgIGlmIChbciBpc0tpbmRPZkNsYXNzOltOU0hUVFBVUkxSZXNw
b25zZSBjbGFzc11dKSB7Ci0gICAgICAgIE5TSFRUUFVSTFJlc3BvbnNlICpodHRwUmVzcG9uc2Ug
PSAoTlNIVFRQVVJMUmVzcG9uc2UgKilyOwotICAgICAgICB0aGVIZWFkZXJzID0gW05TTXV0YWJs
ZURhdGEgZGF0YVdpdGhDYXBhY2l0eToxMDI0XTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1F
OiBpdCB3b3VsZCBiZSBuaWNlIHRvIGJlIGFibGUgdG8gZ2V0IHRoZSByYXcgSFRUUCBoZWFkZXIg
YmxvY2suCi0gICAgICAgIC8vIFRoaXMgaW5jbHVkZXMgdGhlIEhUVFAgdmVyc2lvbiwgdGhlIHJl
YWwgc3RhdHVzIHRleHQsCi0gICAgICAgIC8vIGFsbCBoZWFkZXJzIGluIHRoZWlyIG9yaWdpbmFs
IG9yZGVyIGFuZCBpbmNsdWRpbmcgZHVwbGljYXRlcywKLSAgICAgICAgLy8gYW5kIGFsbCBvcmln
aW5hbCBieXRlcyB2ZXJiYXRpbSwgcmF0aGVyIHRoYW4gc2VudCB0aHJvdWdoIFVuaWNvZGUgdHJh
bnNsYXRpb24uCi0gICAgICAgIC8vIFVuZm9ydHVuYXRlbHkgTlNIVFRQVVJMUmVzcG9uc2UgZG9l
c24ndCBwcm92aWRlIGFjY2VzcyBhdCB0aGF0IGxvdyBhIGxldmVsLgotICAgICAgICAKLSAgICAg
ICAgW3RoZUhlYWRlcnMgYXBwZW5kQnl0ZXM6IkhUVFAgIiBsZW5ndGg6NV07Ci0gICAgICAgIGNo
YXIgc3RhdHVzU3RyWzEwXTsKLSAgICAgICAgbG9uZyBzdGF0dXNDb2RlID0gW2h0dHBSZXNwb25z
ZSBzdGF0dXNDb2RlXTsKLSAgICAgICAgc25wcmludGYoc3RhdHVzU3RyLCBzaXplb2Yoc3RhdHVz
U3RyKSwgIiVsZCIsIHN0YXR1c0NvZGUpOwotICAgICAgICBbdGhlSGVhZGVycyBhcHBlbmRCeXRl
czpzdGF0dXNTdHIgbGVuZ3RoOnN0cmxlbihzdGF0dXNTdHIpXTsKLSAgICAgICAgW3RoZUhlYWRl
cnMgYXBwZW5kQnl0ZXM6IiBPS1xuIiBsZW5ndGg6NF07Ci0gICAgICAgIAotICAgICAgICAvLyBI
QUNLOiBwYXNzIHRoZSBoZWFkZXJzIHRocm91Z2ggYXMgVVRGLTguCi0gICAgICAgIC8vIFRoaXMg
aXMgbm90IHRoZSBpbnRlbmRlZCBiZWhhdmlvcjsgd2UncmUgc3VwcG9zZWQgdG8gcGFzcyBvcmln
aW5hbCBieXRlcyB2ZXJiYXRpbS4KLSAgICAgICAgLy8gQnV0IHdlIGRvbid0IGhhdmUgdGhlIG9y
aWdpbmFsIGJ5dGVzLCB3ZSBoYXZlIE5TU3RyaW5ncyBidWlsdCBieSB0aGUgVVJMIGxvYWRpbmcg
c3lzdGVtLgotICAgICAgICAvLyBJdCBob3BlZnVsbHkgc2hvdWxkbid0IG1hdHRlciwgc2luY2Ug
UkZDMjYxNi9SRkM4MjIgcmVxdWlyZSBBU0NJSS1vbmx5IGhlYWRlcnMsCi0gICAgICAgIC8vIGJ1
dCBzdXJlbHkgc29tZW9uZSBvdXQgdGhlcmUgaXMgdXNpbmcgbm9uLUFTQ0lJIGNoYXJhY3RlcnMs
IGFuZCBob3BlZnVsbHkgVVRGLTggaXMgYWRlcXVhdGUgaGVyZS4KLSAgICAgICAgLy8gSXQgc2Vl
bXMgYmV0dGVyIHRoYW4gTlNBU0NJSVN0cmluZ0VuY29kaW5nLCB3aGljaCB3aWxsIGxvc2UgaW5m
b3JtYXRpb24gaWYgbm9uLUFTQ0lJIGlzIHVzZWQuCi0gICAgICAgIAotICAgICAgICBOU0RpY3Rp
b25hcnkgKmhlYWRlckRpY3QgPSBbaHR0cFJlc3BvbnNlIGFsbEhlYWRlckZpZWxkc107Ci0gICAg
ICAgIE5TQXJyYXkgKmtleXMgPSBbW2hlYWRlckRpY3QgYWxsS2V5c10gc29ydGVkQXJyYXlVc2lu
Z1NlbGVjdG9yOkBzZWxlY3RvcihjYXNlSW5zZW5zaXRpdmVDb21wYXJlOildOwotICAgICAgICBO
U0VudW1lcmF0b3IgKmkgPSBba2V5cyBvYmplY3RFbnVtZXJhdG9yXTsKLSAgICAgICAgTlNTdHJp
bmcgKms7Ci0gICAgICAgIHdoaWxlICgoayA9IFtpIG5leHRPYmplY3RdKSAhPSBuaWwpIHsKLSAg
ICAgICAgICAgIE5TU3RyaW5nICp2ID0gW2hlYWRlckRpY3Qgb2JqZWN0Rm9yS2V5OmtdOwotICAg
ICAgICAgICAgW3RoZUhlYWRlcnMgYXBwZW5kRGF0YTpbayBkYXRhVXNpbmdFbmNvZGluZzpOU1VU
RjhTdHJpbmdFbmNvZGluZ11dOwotICAgICAgICAgICAgW3RoZUhlYWRlcnMgYXBwZW5kQnl0ZXM6
IjogIiBsZW5ndGg6Ml07Ci0gICAgICAgICAgICBbdGhlSGVhZGVycyBhcHBlbmREYXRhOlt2IGRh
dGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07Ci0gICAgICAgICAgICBbdGhl
SGVhZGVycyBhcHBlbmRCeXRlczoiXG4iIGxlbmd0aDoxXTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgLy8gSWYgdGhlIGNvbnRlbnQgaXMgZW5jb2RlZCAobW9zdCBsaWtlbHkgY29tcHJl
c3NlZCksIHRoZW4gZG9uJ3Qgc2VuZCBpdHMgbGVuZ3RoIHRvIHRoZSBwbHVnaW4sCi0gICAgICAg
IC8vIHdoaWNoIGlzIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgZGVjb2RlZCBsZW5ndGgsIG5vdCB5
ZXQga25vd24gYXQgdGhlIG1vbWVudC4KLSAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzQ0NzA1
OTk+IHRyYWNrcyBhIHJlcXVlc3QgZm9yIC1bTlNVUkxSZXNwb25zZSBleHBlY3RlZENvbnRlbnRM
ZW5ndGhdIHRvIGluY29ycG9yYXRlIHRoaXMgbG9naWMuCi0gICAgICAgIE5TU3RyaW5nICpjb250
ZW50RW5jb2RpbmcgPSAoTlNTdHJpbmcgKilbWyhOU0hUVFBVUkxSZXNwb25zZSAqKXIgYWxsSGVh
ZGVyRmllbGRzXSBvYmplY3RGb3JLZXk6QCJDb250ZW50LUVuY29kaW5nIl07Ci0gICAgICAgIGlm
IChjb250ZW50RW5jb2RpbmcgJiYgIVtjb250ZW50RW5jb2RpbmcgaXNFcXVhbFRvU3RyaW5nOkAi
aWRlbnRpdHkiXSkKLSAgICAgICAgICAgIGV4cGVjdGVkQ29udGVudExlbmd0aCA9IC0xOwotICAg
ICAgICAKLSAgICAgICAgLy8gc3RhcnRTdHJlYW1SZXNwb25zZVVSTDouLi4gd2lsbCBudWxsLXRl
cm1pbmF0ZS4KLSAgICB9Ci0gICAgCi0gICAgc3RhcnRTdHJlYW0oW3IgVVJMXSwgZXhwZWN0ZWRD
b250ZW50TGVuZ3RoLCBbciBfbGFzdE1vZGlmaWVkRGF0ZV0sIHJlc3BvbnNlLm1pbWVUeXBlKCks
IHRoZUhlYWRlcnMpOwotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpzdGFydFN0
cmVhbVdpdGhSZXNwb25zZShOU1VSTFJlc3BvbnNlICpyZXNwb25zZSkKLXsKLSAgICBkaWRSZWNl
aXZlUmVzcG9uc2UoMCwgcmVzcG9uc2UpOwotfQotCi1ib29sIFdlYk5ldHNjYXBlUGx1Z2luU3Ry
ZWFtOjp3YW50c0FsbFN0cmVhbXMoKSBjb25zdAotewotICAgIGlmICghbV9wbHVnaW5GdW5jcy0+
Z2V0dmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICB2b2lkICp2YWx1ZSA9
IDA7Ci0gICAgTlBFcnJvciBlcnJvcjsKLSAgICB7Ci0gICAgICAgIFBsdWdpblN0b3BEZWZlcnJl
ciBkZWZlcnJlcihtX3BsdWdpblZpZXcuZ2V0KCkpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKLSAgICAgICAgZXJyb3IgPSBtX3Bs
dWdpbkZ1bmNzLT5nZXR2YWx1ZShtX3BsdWdpbiwgTlBQVnBsdWdpbldhbnRzQWxsTmV0d29ya1N0
cmVhbXMsICZ2YWx1ZSk7Ci0gICAgfQotICAgIGlmIChlcnJvciAhPSBOUEVSUl9OT19FUlJPUikK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotdm9p
ZCBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6ZGVzdHJveVN0cmVhbSgpCi17Ci0gICAgaWYgKG1f
aXNUZXJtaW5hdGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWY8V2ViTmV0c2NhcGVQbHVn
aW5TdHJlYW0+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgQVNTRVJUKG1fcmVhc29uICE9IFdFQl9S
RUFTT05fTk9ORSk7Ci0gICAgQVNTRVJUKFttX2RlbGl2ZXJ5RGF0YS5nZXQoKSBsZW5ndGhdID09
IDApOwotICAgIAotICAgIG1fZGVsaXZlckRhdGFUaW1lci5zdG9wKCk7Ci0KLSAgICBpZiAobV9z
dHJlYW0ubmRhdGEpIHsKLSAgICAgICAgaWYgKG1fcmVhc29uID09IE5QUkVTX0RPTkUgJiYgKG1f
dHJhbnNmZXJNb2RlID09IE5QX0FTRklMRSB8fCBtX3RyYW5zZmVyTW9kZSA9PSBOUF9BU0ZJTEVP
TkxZKSkgewotICAgICAgICAgICAgQVNTRVJUKG1fZmlsZURlc2NyaXB0b3IgPT0gLTEpOwotICAg
ICAgICAgICAgQVNTRVJUKG1fcGF0aCk7Ci0KLSAgICAgICAgICAgIFBsdWdpblN0b3BEZWZlcnJl
ciBkZWZlcnJlcihtX3BsdWdpblZpZXcuZ2V0KCkpOwotICAgICAgICAgICAgbV9wbHVnaW5GdW5j
cy0+YXNmaWxlKG1fcGx1Z2luLCAmbV9zdHJlYW0sIFttX3BhdGguZ2V0KCkgZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uXSk7Ci0gICAgICAgICAgICBMT0coUGx1Z2lucywgIk5QUF9TdHJlYW1Bc0Zp
bGUgcmVzcG9uc2VVUkw9JUAgcGF0aD0lcyIsIG1fcmVzcG9uc2VVUkwuZ2V0KCksIG1fcGF0aC5n
ZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9wYXRoKSB7Ci0gICAgICAgICAgICAv
LyBEZWxldGUgdGhlIGZpbGUgYWZ0ZXIgY2FsbGluZyBOUFBfU3RyZWFtQXNGaWxlKCksIGluc3Rl
YWQgb2YgaW4gLWRlYWxsb2MvLWZpbmFsaXplLiAgSXQgc2hvdWxkIGJlIE9LCi0gICAgICAgICAg
ICAvLyB0byBkZWxldGUgdGhlIGZpbGUgaGVyZSAtLSBOUFBfU3RyZWFtQXNGaWxlKCkgaXMgYWx3
YXlzIGNhbGxlZCBpbW1lZGlhdGVseSBiZWZvcmUgTlBQX0Rlc3Ryb3lTdHJlYW0oKQotICAgICAg
ICAgICAgLy8gKHRoZSBzdHJlYW0gZGVzdHJ1Y3Rpb24gZnVuY3Rpb24pLCBzbyB0aGVyZSBjYW4g
YmUgbm8gZXhwZWN0YXRpb24gdGhhdCBhIHBsdWdpbiB3aWxsIHJlYWQgdGhlIHN0cmVhbQotICAg
ICAgICAgICAgLy8gZmlsZSBhc3luY2hyb25vdXNseSBhZnRlciBOUFBfU3RyZWFtQXNGaWxlKCkg
aXMgY2FsbGVkLgotICAgICAgICAgICAgdW5saW5rKFttX3BhdGguZ2V0KCkgZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uXSk7Ci0gICAgICAgICAgICBtX3BhdGggPSAwOwotCi0gICAgICAgICAgICBp
ZiAobV9pc1Rlcm1pbmF0ZWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKG1fZmlsZURlc2NyaXB0b3IgIT0gLTEpIHsKLSAgICAgICAgICAgIC8vIFRo
ZSBmaWxlIG1heSBzdGlsbCBiZSBvcGVuIGlmIHdlIGFyZSBkZXN0cm95aW5nIHRoZSBzdHJlYW0g
YmVmb3JlIGl0IGNvbXBsZXRlZCBsb2FkaW5nLgotICAgICAgICAgICAgY2xvc2UobV9maWxlRGVz
Y3JpcHRvcik7Ci0gICAgICAgICAgICBtX2ZpbGVEZXNjcmlwdG9yID0gLTE7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAobV9uZXdTdHJlYW1TdWNjZXNzZnVsKSB7Ci0gICAgICAgICAgICBQbHVn
aW5TdG9wRGVmZXJyZXIgZGVmZXJyZXIobV9wbHVnaW5WaWV3LmdldCgpKTsKLSNpZiAhTE9HX0RJ
U0FCTEVECi0gICAgICAgICAgICBOUEVycm9yIG5wRXJyID0gCi0jZW5kaWYKLSAgICAgICAgICAg
IG1fcGx1Z2luRnVuY3MtPmRlc3Ryb3lzdHJlYW0obV9wbHVnaW4sICZtX3N0cmVhbSwgbV9yZWFz
b24pOwotICAgICAgICAgICAgTE9HKFBsdWdpbnMsICJOUFBfRGVzdHJveVN0cmVhbSByZXNwb25z
ZVVSTD0lQCBlcnJvcj0lZCIsIG1fcmVzcG9uc2VVUkwuZ2V0KCksIG5wRXJyKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGZyZWUobV9oZWFkZXJzKTsKLSAgICAgICAgbV9oZWFkZXJzID0gTlVMTDsK
LSAgICAgICAgbV9zdHJlYW0uaGVhZGVycyA9IE5VTEw7Ci0KLSAgICAgICAgbV9zdHJlYW0ubmRh
dGEgPSAwOwotCi0gICAgICAgIGlmIChtX2lzVGVybWluYXRlZCkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAobV9zZW5kTm90aWZpY2F0aW9uKSB7Ci0gICAgICAgIC8vIE5Q
UF9VUkxOb3RpZnkgZXhwZWN0cyB0aGUgcmVxdWVzdCBVUkwsIG5vdCB0aGUgcmVzcG9uc2UgVVJM
LgotICAgICAgICBQbHVnaW5TdG9wRGVmZXJyZXIgZGVmZXJyZXIobV9wbHVnaW5WaWV3LmdldCgp
KTsKLSAgICAgICAgbV9wbHVnaW5GdW5jcy0+dXJsbm90aWZ5KG1fcGx1Z2luLCBtX3JlcXVlc3RV
Ukwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbV9yZWFzb24sIG1fbm90aWZ5RGF0YSk7Ci0gICAg
ICAgIExPRyhQbHVnaW5zLCAiTlBQX1VSTE5vdGlmeSByZXF1ZXN0VVJMPSVAIHJlYXNvbj0lZCIs
IChOU1VSTCAqKW1fcmVxdWVzdFVSTCwgbV9yZWFzb24pOwotICAgIH0KLQotICAgIG1faXNUZXJt
aW5hdGVkID0gdHJ1ZTsKLQotICAgIHNldFBsdWdpbigwKTsKLX0KLQotdm9pZCBXZWJOZXRzY2Fw
ZVBsdWdpblN0cmVhbTo6ZGVzdHJveVN0cmVhbVdpdGhSZWFzb24oTlBSZWFzb24gcmVhc29uKQot
ewotICAgIG1fcmVhc29uID0gcmVhc29uOwotICAgIGlmIChtX3JlYXNvbiAhPSBOUFJFU19ET05F
KSB7Ci0gICAgICAgIC8vIFN0b3AgYW55IHBlbmRpbmcgZGF0YSBmcm9tIGJlaW5nIHN0cmVhbWVk
LgotICAgICAgICBbbV9kZWxpdmVyeURhdGEuZ2V0KCkgc2V0TGVuZ3RoOjBdOwotICAgIH0gZWxz
ZSBpZiAoW21fZGVsaXZlcnlEYXRhLmdldCgpIGxlbmd0aF0gPiAwKSB7Ci0gICAgICAgIC8vIFRo
ZXJlIGlzIG1vcmUgZGF0YSB0byBiZSBzdHJlYW1lZCwgZG9uJ3QgZGVzdHJveSB0aGUgc3RyZWFt
IG5vdy4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZjxXZWJOZXRzY2FwZVBsdWdp
blN0cmVhbT4gcHJvdGVjdCgqdGhpcyk7Ci0gICAgZGVzdHJveVN0cmVhbSgpOwotICAgIEFTU0VS
VCghbV9zdHJlYW0ubmRhdGEpOwotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpj
YW5jZWxMb2FkV2l0aEVycm9yKE5TRXJyb3IgKmVycm9yKQotewotICAgIGlmIChtX2ZyYW1lTG9h
ZGVyKSB7Ci0gICAgICAgIEFTU0VSVCghbV9sb2FkZXIpOwotICAgICAgICBhdXRvIGRvY3VtZW50
TG9hZGVyID0gbV9mcmFtZUxvYWRlci0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKTsKLSAgICAgICAg
aWYgKGRvY3VtZW50TG9hZGVyICYmIGRvY3VtZW50TG9hZGVyLT5pc0xvYWRpbmdNYWluUmVzb3Vy
Y2UoKSkKLSAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5jYW5jZWxNYWluUmVzb3VyY2VMb2Fk
KGVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW1fbG9hZGVyLT5pc0Rv
bmUoKSkKLSAgICAgICAgbV9sb2FkZXItPmNhbmNlbChlcnJvcik7Ci19Ci0KLXZvaWQgV2ViTmV0
c2NhcGVQbHVnaW5TdHJlYW06OmRlc3Ryb3lTdHJlYW1XaXRoRXJyb3IoTlNFcnJvciAqZXJyb3Ip
Ci17Ci0gICAgZGVzdHJveVN0cmVhbVdpdGhSZWFzb24ocmVhc29uRm9yRXJyb3IoZXJyb3IpKTsK
LX0KLQotdm9pZCBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6ZGlkRmFpbChXZWJDb3JlOjpOZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVy
cm9yKQotewotICAgIGRlc3Ryb3lTdHJlYW1XaXRoRXJyb3IoZXJyb3IpOwotfQotCi12b2lkIFdl
Yk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpjYW5jZWxMb2FkQW5kRGVzdHJveVN0cmVhbVdpdGhFcnJv
cihOU0Vycm9yICplcnJvcikKLXsKLSAgICBSZWY8V2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0+IHBy
b3RlY3QoKnRoaXMpOwotICAgIGNhbmNlbExvYWRXaXRoRXJyb3IoZXJyb3IpOwotICAgIGRlc3Ry
b3lTdHJlYW1XaXRoRXJyb3IoZXJyb3IpOwotICAgIHNldFBsdWdpbigwKTsKLX0gICAgCi0KLXZv
aWQgV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OmRlbGl2ZXJEYXRhKCkKLXsKLSAgICBpZiAoIW1f
c3RyZWFtLm5kYXRhIHx8IFttX2RlbGl2ZXJ5RGF0YS5nZXQoKSBsZW5ndGhdID09IDApCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFJlZjxXZWJOZXRzY2FwZVBsdWdpblN0cmVhbT4gcHJvdGVjdCgq
dGhpcyk7Ci0KLSAgICBpbnQzMl90IHRvdGFsQnl0ZXMgPSBbbV9kZWxpdmVyeURhdGEuZ2V0KCkg
bGVuZ3RoXTsKLSAgICBpbnQzMl90IHRvdGFsQnl0ZXNEZWxpdmVyZWQgPSAwOwotCi0gICAgd2hp
bGUgKHRvdGFsQnl0ZXNEZWxpdmVyZWQgPCB0b3RhbEJ5dGVzKSB7Ci0gICAgICAgIFBsdWdpblN0
b3BEZWZlcnJlciBkZWZlcnJlcihtX3BsdWdpblZpZXcuZ2V0KCkpOwotICAgICAgICBpbnQzMl90
IGRlbGl2ZXJ5Qnl0ZXMgPSBtX3BsdWdpbkZ1bmNzLT53cml0ZXJlYWR5KG1fcGx1Z2luLCAmbV9z
dHJlYW0pOwotICAgICAgICBMT0coUGx1Z2lucywgIk5QUF9Xcml0ZVJlYWR5IHJlc3BvbnNlVVJM
PSVAIGJ5dGVzPSVkIiwgbV9yZXNwb25zZVVSTC5nZXQoKSwgZGVsaXZlcnlCeXRlcyk7Ci0KLSAg
ICAgICAgaWYgKG1faXNUZXJtaW5hdGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IGlmIChkZWxpdmVyeUJ5dGVzIDw9IDApIHsKLSAgICAgICAgICAgIC8vIFBsdWctaW4gY2FuJ3Qg
cmVjZWl2ZSBhbnltb3JlIGRhdGEgcmlnaHQgbm93LiBTZW5kIGl0IGxhdGVyLgotICAgICAgICAg
ICAgaWYgKCFtX2RlbGl2ZXJEYXRhVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgICAgICAgICBt
X2RlbGl2ZXJEYXRhVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBzdGQ6Om1pbihk
ZWxpdmVyeUJ5dGVzLCB0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZCk7Ci0gICAgICAg
ICAgICBOU0RhdGEgKnN1YmRhdGEgPSBbbV9kZWxpdmVyeURhdGEuZ2V0KCkgc3ViZGF0YVdpdGhS
YW5nZTpOU01ha2VSYW5nZSh0b3RhbEJ5dGVzRGVsaXZlcmVkLCBkZWxpdmVyeUJ5dGVzKV07Ci0g
ICAgICAgICAgICBQbHVnaW5TdG9wRGVmZXJyZXIgZGVmZXJyZXIobV9wbHVnaW5WaWV3LmdldCgp
KTsKLSAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBtX3BsdWdpbkZ1bmNzLT53cml0ZShtX3Bs
dWdpbiwgJm1fc3RyZWFtLCBtX29mZnNldCwgW3N1YmRhdGEgbGVuZ3RoXSwgY29uc3RfY2FzdDx2
b2lkKj4oW3N1YmRhdGEgYnl0ZXNdKSk7Ci0gICAgICAgICAgICBpZiAoZGVsaXZlcnlCeXRlcyA8
IDApIHsKLSAgICAgICAgICAgICAgICAvLyBOZXRzY2FwZSBkb2N1bWVudGF0aW9uIHNheXMgdGhh
dCBhIG5lZ2F0aXZlIHJlc3VsdCBmcm9tIE5QUF9Xcml0ZSBtZWFucyBjYW5jZWwgdGhlIGxvYWQu
Ci0gICAgICAgICAgICAgICAgY2FuY2VsTG9hZEFuZERlc3Ryb3lTdHJlYW1XaXRoRXJyb3IocGx1
Z2luQ2FuY2VsbGVkQ29ubmVjdGlvbkVycm9yKCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBzdGQ6Om1pbjxpbnQz
Ml90PihkZWxpdmVyeUJ5dGVzLCBbc3ViZGF0YSBsZW5ndGhdKTsKLSAgICAgICAgICAgIG1fb2Zm
c2V0ICs9IGRlbGl2ZXJ5Qnl0ZXM7Ci0gICAgICAgICAgICB0b3RhbEJ5dGVzRGVsaXZlcmVkICs9
IGRlbGl2ZXJ5Qnl0ZXM7Ci0gICAgICAgICAgICBMT0coUGx1Z2lucywgIk5QUF9Xcml0ZSByZXNw
b25zZVVSTD0lQCBieXRlcz0lZCB0b3RhbC1kZWxpdmVyZWQ9JWQvJWQiLCBtX3Jlc3BvbnNlVVJM
LmdldCgpLCBkZWxpdmVyeUJ5dGVzLCBtX29mZnNldCwgbV9zdHJlYW0uZW5kKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmICh0b3RhbEJ5dGVzRGVsaXZlcmVkID4gMCkgewotICAgICAgICBp
ZiAodG90YWxCeXRlc0RlbGl2ZXJlZCA8IHRvdGFsQnl0ZXMpIHsKLSAgICAgICAgICAgIGF1dG8g
bmV3RGVsaXZlcnlEYXRhID0gYWRvcHROUyhbW05TTXV0YWJsZURhdGEgYWxsb2NdIGluaXRXaXRo
Q2FwYWNpdHk6dG90YWxCeXRlcyAtIHRvdGFsQnl0ZXNEZWxpdmVyZWRdKTsKLSAgICAgICAgICAg
IFtuZXdEZWxpdmVyeURhdGEgYXBwZW5kQnl0ZXM6c3RhdGljX2Nhc3Q8Y2hhcio+KGNvbnN0X2Nh
c3Q8dm9pZCo+KFttX2RlbGl2ZXJ5RGF0YS5nZXQoKSBieXRlc10pKSArIHRvdGFsQnl0ZXNEZWxp
dmVyZWQgbGVuZ3RoOnRvdGFsQnl0ZXMgLSB0b3RhbEJ5dGVzRGVsaXZlcmVkXTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEgPSBXVEZNb3ZlKG5ld0RlbGl2ZXJ5RGF0
YSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBbbV9kZWxpdmVyeURhdGEuZ2V0KCkg
c2V0TGVuZ3RoOjBdOwotICAgICAgICAgICAgaWYgKG1fcmVhc29uICE9IFdFQl9SRUFTT05fTk9O
RSkgCi0gICAgICAgICAgICAgICAgZGVzdHJveVN0cmVhbSgpOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpkZWxpdmVyRGF0YVRvRmlsZShOU0Rh
dGEgKmRhdGEpCi17Ci0gICAgaWYgKG1fZmlsZURlc2NyaXB0b3IgPT0gLTEgJiYgIW1fcGF0aCkg
ewotICAgICAgICBOU1N0cmluZyAqdGVtcG9yYXJ5RmlsZU1hc2sgPSBbTlNUZW1wb3JhcnlEaXJl
Y3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJXZWJLaXRQbHVnSW5TdHJl
YW1YWFhYWFgiXTsKLSAgICAgICAgY2hhciAqdGVtcG9yYXJ5RmlsZU5hbWUgPSBzdHJkdXAoW3Rl
bXBvcmFyeUZpbGVNYXNrIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbl0pOwotICAgICAgICBtX2Zp
bGVEZXNjcmlwdG9yID0gbWtzdGVtcCh0ZW1wb3JhcnlGaWxlTmFtZSk7Ci0gICAgICAgIGlmICht
X2ZpbGVEZXNjcmlwdG9yID09IC0xKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkNhbid0IGNy
ZWF0ZSBhIHRlbXBvcmFyeSBmaWxlLiIpOwotICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSBu
ZXR3b3JrIGVycm9yLCBidXQgdGhlIG9ubHkgZXJyb3IgY29kZXMgYXJlICJuZXR3b3JrIGVycm9y
IiBhbmQgInVzZXIgYnJlYWsiLgotICAgICAgICAgICAgZGVzdHJveVN0cmVhbVdpdGhSZWFzb24o
TlBSRVNfTkVUV09SS19FUlIpOwotICAgICAgICAgICAgZnJlZSh0ZW1wb3JhcnlGaWxlTmFtZSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBtX3BhdGggPSBbTlNT
dHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6dGVtcG9yYXJ5RmlsZU5hbWVdOwotICAgICAgICBm
cmVlKHRlbXBvcmFyeUZpbGVOYW1lKTsKLSAgICB9Ci0KLSAgICBpbnQgZGF0YUxlbmd0aCA9IFtk
YXRhIGxlbmd0aF07Ci0gICAgaWYgKCFkYXRhTGVuZ3RoKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpbnQgYnl0ZUNvdW50ID0gd3JpdGUobV9maWxlRGVzY3JpcHRvciwgW2RhdGEgYnl0ZXNdLCBk
YXRhTGVuZ3RoKTsKLSAgICBpZiAoYnl0ZUNvdW50ICE9IGRhdGFMZW5ndGgpIHsKLSAgICAgICAg
Ly8gVGhpcyBoYXBwZW5zIG9ubHkgcmFyZWx5LCB3aGVuIHdlIGFyZSBvdXQgb2YgZGlzayBzcGFj
ZSBvciBoYXZlIGEgZGlzayBJL08gZXJyb3IuCi0gICAgICAgIExPR19FUlJPUigiZXJyb3Igd3Jp
dGluZyB0byB0ZW1wb3JhcnkgZmlsZSwgZXJybm8gJWQiLCBlcnJubyk7Ci0gICAgICAgIGNsb3Nl
KG1fZmlsZURlc2NyaXB0b3IpOwotICAgICAgICBtX2ZpbGVEZXNjcmlwdG9yID0gLTE7Ci0KLSAg
ICAgICAgLy8gVGhpcyBpcyBub3QgYSBuZXR3b3JrIGVycm9yLCBidXQgdGhlIG9ubHkgZXJyb3Ig
Y29kZXMgYXJlICJuZXR3b3JrIGVycm9yIiBhbmQgInVzZXIgYnJlYWsiLgotICAgICAgICBkZXN0
cm95U3RyZWFtV2l0aFJlYXNvbihOUFJFU19ORVRXT1JLX0VSUik7Ci0gICAgICAgIG1fcGF0aCA9
IDA7Ci0gICAgfQotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpkaWRGaW5pc2hM
b2FkaW5nKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKikKLXsKLSAgICBpZiAoIW1fc3RyZWFt
Lm5kYXRhKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKG1fdHJhbnNmZXJNb2RlID09
IE5QX0FTRklMRSB8fCBtX3RyYW5zZmVyTW9kZSA9PSBOUF9BU0ZJTEVPTkxZKSB7Ci0gICAgICAg
IC8vIEZha2UgdGhlIGRlbGl2ZXJ5IG9mIGFuIGVtcHR5IGRhdGEgdG8gZW5zdXJlIHRoYXQgdGhl
IGZpbGUgaGFzIGJlZW4gY3JlYXRlZAotICAgICAgICBkZWxpdmVyRGF0YVRvRmlsZShbTlNEYXRh
IGRhdGFdKTsKLSAgICAgICAgaWYgKG1fZmlsZURlc2NyaXB0b3IgIT0gLTEpCi0gICAgICAgICAg
ICBjbG9zZShtX2ZpbGVEZXNjcmlwdG9yKTsKLSAgICAgICAgbV9maWxlRGVzY3JpcHRvciA9IC0x
OwotICAgIH0KLSAgICAKLSAgICBkZXN0cm95U3RyZWFtV2l0aFJlYXNvbihOUFJFU19ET05FKTsK
LX0KLQotdm9pZCBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6ZGlkUmVjZWl2ZURhdGEoTmV0c2Nh
cGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCB1aW50OF90KiBieXRlcywgaW50IGxlbmd0aCkK
LXsKLSAgICBhdXRvIGRhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVz
Tm9Db3B5Oih2b2lkKilieXRlcyBsZW5ndGg6bGVuZ3RoIGZyZWVXaGVuRG9uZTpOT10pOwotCi0g
ICAgQVNTRVJUKFtkYXRhIGxlbmd0aF0gPiAwKTsKLSAgICAKLSAgICBpZiAobV90cmFuc2Zlck1v
ZGUgIT0gTlBfQVNGSUxFT05MWSkgewotICAgICAgICBpZiAoIW1fZGVsaXZlcnlEYXRhKQotICAg
ICAgICAgICAgbV9kZWxpdmVyeURhdGEgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxvY10g
aW5pdFdpdGhDYXBhY2l0eTpbZGF0YSBsZW5ndGhdXSk7Ci0gICAgICAgIFttX2RlbGl2ZXJ5RGF0
YS5nZXQoKSBhcHBlbmREYXRhOmRhdGEuZ2V0KCldOwotICAgICAgICBkZWxpdmVyRGF0YSgpOwot
ICAgIH0KLSAgICBpZiAobV90cmFuc2Zlck1vZGUgPT0gTlBfQVNGSUxFIHx8IG1fdHJhbnNmZXJN
b2RlID09IE5QX0FTRklMRU9OTFkpCi0gICAgICAgIGRlbGl2ZXJEYXRhVG9GaWxlKGRhdGEuZ2V0
KCkpOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1Bs
dWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9Q
bHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzYWI5MTQyYTkzNTQxOTBmODU3NmZiOWIxNDhlZTBkOTUxNmUwNWEwLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3LmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
NjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbXBvcnQgIldl
YkJhc2VOZXRzY2FwZVBsdWdpblZpZXcuaCIKLSNpbXBvcnQgPFdlYktpdExlZ2FjeS9ucGZ1bmN0
aW9ucy5oPgotI2ltcG9ydCA8V2ViS2l0TGVnYWN5L25wYXBpLmg+Ci0jaW1wb3J0IDx3dGYvSGFz
aE1hcC5oPgotI2ltcG9ydCA8d3RmL0hhc2hTZXQuaD4KLQotQGNsYXNzIFdlYk5ldHNjYXBlUGx1
Z2luUGFja2FnZTsKLQotY2xhc3MgUGx1Z2luVGltZXI7Ci1jbGFzcyBXZWJOZXRzY2FwZVBsdWdp
blN0cmVhbTsKLWNsYXNzIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyOwotCi10eXBlZGVm
IHVuaW9uIFBsdWdpblBvcnQgewotICAgIE5QX0NHQ29udGV4dCBjZ1BvcnQ7Ci19IFBsdWdpblBv
cnQ7Ci0KLS8vIEJlY2F1c2UgdGhlIEFkb2JlIDcueCBBY3JvYmF0IHBsdWctaW4gaGFzIGEgaGFy
ZCBjb2RlZCBjaGVjayBmb3IgYSB2aWV3IG5hbWVkIAotLy8gIldlYk5ldHNjYXBlUGx1Z2luRG9j
dW1lbnRWaWV3IiwgdGhpcyBjbGFzcyBtdXN0IHJldGFpbiB0aGUgb2xkIG5hbWUgaW4gb3JkZXIg
Ci0vLyBmb3IgdGhlIHBsdWctaW4gdG8gZnVuY3Rpb24gY29ycmVjdGx5LiAocmRhcjovL3Byb2Js
ZW0vNDY5OTQ1NSkKLSNkZWZpbmUgV2ViTmV0c2NhcGVQbHVnaW5WaWV3IFdlYk5ldHNjYXBlUGx1
Z2luRG9jdW1lbnRWaWV3Ci0KLUBpbnRlcmZhY2UgV2ViTmV0c2NhcGVQbHVnaW5WaWV3IDogV2Vi
QmFzZU5ldHNjYXBlUGx1Z2luVmlldzxXZWJQbHVnaW5NYW51YWxMb2FkZXI+Ci17Ci1AcGFja2Fn
ZQotICAgIFJlZlB0cjxXZWJOZXRzY2FwZVBsdWdpblN0cmVhbT4gX21hbnVhbFN0cmVhbTsKLSAg
ICBSZXRhaW5QdHI8Q0FMYXllcj4gX3BsdWdpbkxheWVyOwotICAgIHVuc2lnbmVkIF9kYXRhTGVu
Z3RoUmVjZWl2ZWQ7Ci0gICAgUmV0YWluUHRyPE5TRXJyb3I+IF9lcnJvcjsKLQotICAgIE5QT2Jq
ZWN0KiBfZWxlbWVudE5QT2JqZWN0OwotCi0gICAgdW5zaWduZWQgYXJnc0NvdW50OwotICAgIGNo
YXIgKipjQXR0cmlidXRlczsKLSAgICBjaGFyICoqY1ZhbHVlczsKLSAgICAgICAgCi0gICAgTlBQ
IHBsdWdpbjsKLSAgICBOUFdpbmRvdyB3aW5kb3c7Ci0gICAgTlBXaW5kb3cgbGFzdFNldFdpbmRv
dzsKLSAgICBQbHVnaW5Qb3J0IG5Qb3J0OwotICAgIFBsdWdpblBvcnQgbGFzdFNldFBvcnQ7Ci0g
ICAgTlBEcmF3aW5nTW9kZWwgZHJhd2luZ01vZGVsOwotICAgIE5QRXZlbnRNb2RlbCBldmVudE1v
ZGVsOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVy
PiBfZXZlbnRIYW5kbGVyOwotICAgIAotICAgIEJPT0wgaW5TZXRXaW5kb3c7Ci0gICAgQk9PTCBz
aG91bGRTdG9wU29vbjsKLQotICAgIHVpbnQzMl90IGN1cnJlbnRUaW1lcklEOwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxIYXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luVGltZXI+
Pj4gdGltZXJzOwotCi0gICAgdW5zaWduZWQgcGx1Z2luRnVuY3Rpb25DYWxsRGVwdGg7Ci0gICAg
Ci0gICAgaW50MzJfdCBzcGVjaWZpZWRIZWlnaHQ7Ci0gICAgaW50MzJfdCBzcGVjaWZpZWRXaWR0
aDsKLSAgICAgICAgICAgIAotICAgIEhhc2hTZXQ8UmVmUHRyPFdlYk5ldHNjYXBlUGx1Z2luU3Ry
ZWFtPj4gc3RyZWFtczsKLSAgICBSZXRhaW5QdHI8TlNNYXBUYWJsZT4gX3BlbmRpbmdGcmFtZUxv
YWRzOwotICAgIAotICAgIEJPT0wgX2lzRmxhc2g7Ci0gICAgQk9PTCBfaXNTaWx2ZXJsaWdodDsK
LX0KLQotKyAoV2ViTmV0c2NhcGVQbHVnaW5WaWV3ICopY3VycmVudFBsdWdpblZpZXc7Ci0KLQot
LSAoaWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KXIKLSAgICAgIHBsdWdpblBhY2thZ2U6KFdlYk5l
dHNjYXBlUGx1Z2luUGFja2FnZSAqKXRoZVBsdWdpblBhY2thZ2UKLSAgICAgICAgICAgICAgICBV
Ukw6KE5TVVJMICopVVJMCi0gICAgICAgICAgICBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwKLSAg
ICAgICAgICAgTUlNRVR5cGU6KE5TU3RyaW5nICopTUlNRQotICAgICAgYXR0cmlidXRlS2V5czoo
TlNBcnJheSAqKWtleXMKLSAgICBhdHRyaWJ1dGVWYWx1ZXM6KE5TQXJyYXkgKil2YWx1ZXMKLSAg
ICAgICBsb2FkTWFudWFsbHk6KEJPT0wpbG9hZE1hbnVhbGx5Ci0gICAgICAgICAgICBlbGVtZW50
OihSZWZQdHI8V2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQ+JiYpZWxlbWVudDsKLQotCi0tIChO
UFApcGx1Z2luOwotCi0tICh2b2lkKWRpc2Nvbm5lY3RTdHJlYW06KFdlYk5ldHNjYXBlUGx1Z2lu
U3RyZWFtKilzdHJlYW07Ci0KLS8vIFJldHVybnMgdGhlIE5QT2JqZWN0IHRoYXQgcmVwcmVzZW50
cyB0aGUgcGx1Z2luIGludGVyZmFjZS4KLS8vIFRoZSByZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQg
dG8gYmUgcmV0YWluZWQuCi0tIChOUE9iamVjdCAqKWNyZWF0ZVBsdWdpblNjcmlwdGFibGVPYmpl
Y3Q7Ci0KLS8vIFJldHVybnMgdGhlIGZvcm0gdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwbHVn
aW4gaW5zdGFuY2UuCi0tIChCT09MKWdldEZvcm1WYWx1ZTooTlNTdHJpbmcgKiopdmFsdWU7Ci0K
LS8vIC13aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5n
IGFueSBvZiB0aGUgTlBQXyogZnVuY3Rpb25zIGZvciB0aGlzIHZpZXcncyBwbHVnaW4uCi0vLyBU
aGlzIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCBwbHVnLWlucyBhcmUgbm90IGRlc3Ryb3ll
ZCB3aGlsZSBXZWJLaXQgY2FsbHMgaW50byB0aGVtLiAgU29tZSBwbHVnLWlucyAoRmxhc2gKLS8v
IGF0IGxlYXN0KSBhcmUgd3JpdHRlbiB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgbm90aGluZyB0
aGV5IGRvIGluIHRoZWlyIHBsdWctaW4gZnVuY3Rpb25zIGNhbiBjYXVzZSBOUFBfRGVzdHJveSgp
Ci0vLyB0byBiZSBjYWxsZWQuICBVbmZvcnR1bmF0ZWx5LCB0aGlzIGlzIG5vdCB0cnVlLCBlc3Bl
Y2lhbGx5IGlmIHRoZSBwbHVnLWluIHVzZXMgTlBOX0ludm9rZSgpIHRvIGV4ZWN1dGUgYQotLy8g
ZG9jdW1lbnQud3JpdGUoKSwgd2hpY2ggY2xlYXJzIHRoZSBkb2N1bWVudCBhbmQgZGVzdHJveXMg
dGhlIHBsdWctaW4uCi0vLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzQ0ODA3Mzc+LgotLSAodm9pZCl3
aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uOwotCi0vLyAtZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uIHNob3Vs
ZCBiZSBjYWxsZWQgYWZ0ZXIgcmV0dXJuaW5nIGZyb20gYSBwbHVnLWluIGZ1bmN0aW9uLiAgSXQg
c2hvdWxkIGJlIGNhbGxlZCBleGFjdGx5Ci0vLyBvbmNlIGZvciBldmVyeSBjYWxsIHRvIC13aWxs
Q2FsbFBsdWdJbkZ1bmN0aW9uLgotLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS80NDgwNzM3Pi4KLS0g
KHZvaWQpZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uOwotCi0tICh2b2lkKWhhbmRsZU1vdXNlTW92ZWQ6
KE5TRXZlbnQgKilldmVudDsKLS0gKHZvaWQpaGFuZGxlTW91c2VFbnRlcmVkOihOU0V2ZW50ICop
ZXZlbnQ7Ci0tICh2b2lkKWhhbmRsZU1vdXNlRXhpdGVkOihOU0V2ZW50ICopZXZlbnQ7Ci0KLUBl
bmQKLQotQGludGVyZmFjZSBXZWJOZXRzY2FwZVBsdWdpblZpZXcgKFdlYkludGVybmFsKQotLSAo
Qk9PTClzZW5kRXZlbnQ6KHZvaWQqKWV2ZW50IGlzRHJhd1JlY3Q6KEJPT0wpZXZlbnRJc0RyYXdS
ZWN0OwotLSAoTlBFdmVudE1vZGVsKWV2ZW50TW9kZWw7Ci0tIChDQUxheWVyICopcGx1Z2luTGF5
ZXI7Ci0tIChOUEVycm9yKWxvYWRSZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0IGluVGFy
Z2V0OihOU1N0cmluZyAqKXRhcmdldCB3aXRoTm90aWZ5RGF0YToodm9pZCAqKW5vdGlmeURhdGEg
c2VuZE5vdGlmaWNhdGlvbjooQk9PTClzZW5kTm90aWZpY2F0aW9uOwotLSAoTlBFcnJvcilnZXRV
UkxOb3RpZnk6KGNvbnN0IGNoYXIgKilVUkwgdGFyZ2V0Oihjb25zdCBjaGFyICopdGFyZ2V0IG5v
dGlmeURhdGE6KHZvaWQgKilub3RpZnlEYXRhOwotLSAoTlBFcnJvcilnZXRVUkw6KGNvbnN0IGNo
YXIgKilVUkwgdGFyZ2V0Oihjb25zdCBjaGFyICopdGFyZ2V0OwotLSAoTlBFcnJvcilwb3N0VVJM
Tm90aWZ5Oihjb25zdCBjaGFyICopVVJMIHRhcmdldDooY29uc3QgY2hhciAqKXRhcmdldCBsZW46
KFVJbnQzMilsZW4gYnVmOihjb25zdCBjaGFyICopYnVmIGZpbGU6KE5QQm9vbClmaWxlIG5vdGlm
eURhdGE6KHZvaWQgKilub3RpZnlEYXRhOwotLSAoTlBFcnJvcilwb3N0VVJMOihjb25zdCBjaGFy
ICopVVJMIHRhcmdldDooY29uc3QgY2hhciAqKXRhcmdldCBsZW46KFVJbnQzMilsZW4gYnVmOihj
b25zdCBjaGFyICopYnVmIGZpbGU6KE5QQm9vbClmaWxlOwotLSAoTlBFcnJvciluZXdTdHJlYW06
KE5QTUlNRVR5cGUpdHlwZSB0YXJnZXQ6KGNvbnN0IGNoYXIgKil0YXJnZXQgc3RyZWFtOihOUFN0
cmVhbSoqKXN0cmVhbTsKLS0gKE5QRXJyb3Ipd3JpdGU6KE5QU3RyZWFtKilzdHJlYW0gbGVuOihT
SW50MzIpbGVuIGJ1ZmZlcjoodm9pZCAqKWJ1ZmZlcjsKLS0gKE5QRXJyb3IpZGVzdHJveVN0cmVh
bTooTlBTdHJlYW0qKXN0cmVhbSByZWFzb246KE5QUmVhc29uKXJlYXNvbjsKLS0gKHZvaWQpc3Rh
dHVzOihjb25zdCBjaGFyICopbWVzc2FnZTsKLS0gKGNvbnN0IGNoYXIgKil1c2VyQWdlbnQ7Ci0t
ICh2b2lkKWludmFsaWRhdGVSZWN0OihOUFJlY3QgKilpbnZhbGlkUmVjdDsKLS0gKHZvaWQpaW52
YWxpZGF0ZVJlZ2lvbjooTlBSZWdpb24paW52YWxpZGF0ZVJlZ2lvbjsKLS0gKHZvaWQpZm9yY2VS
ZWRyYXc7Ci0tIChOUEVycm9yKWdldFZhcmlhYmxlOihOUE5WYXJpYWJsZSl2YXJpYWJsZSB2YWx1
ZToodm9pZCAqKXZhbHVlOwotLSAoTlBFcnJvcilzZXRWYXJpYWJsZTooTlBQVmFyaWFibGUpdmFy
aWFibGUgdmFsdWU6KHZvaWQgKil2YWx1ZTsKLS0gKHVpbnQzMl90KXNjaGVkdWxlVGltZXJXaXRo
SW50ZXJ2YWw6KHVpbnQzMl90KWludGVydmFsIHJlcGVhdDooTlBCb29sKXJlcGVhdCB0aW1lckZ1
bmM6KHZvaWQgKCopKE5QUCBucHAsIHVpbnQzMl90IHRpbWVySUQpKXRpbWVyRnVuYzsKLS0gKHZv
aWQpdW5zY2hlZHVsZVRpbWVyOih1aW50MzJfdCl0aW1lcklEOwotLSAoTlBFcnJvcilwb3BVcENv
bnRleHRNZW51OihOUE1lbnUgKiltZW51OwotLSAoTlBFcnJvcilnZXRWYXJpYWJsZTooTlBOVVJM
VmFyaWFibGUpdmFyaWFibGUgZm9yVVJMOihjb25zdCBjaGFyKil1cmwgdmFsdWU6KGNoYXIqKil2
YWx1ZSBsZW5ndGg6KHVpbnQzMl90KilsZW5ndGg7Ci0tIChOUEVycm9yKXNldFZhcmlhYmxlOihO
UE5VUkxWYXJpYWJsZSl2YXJpYWJsZSBmb3JVUkw6KGNvbnN0IGNoYXIqKXVybCB2YWx1ZTooY29u
c3QgY2hhciopdmFsdWUgbGVuZ3RoOih1aW50MzJfdClsZW5ndGg7Ci0tIChOUEVycm9yKWdldEF1
dGhlbnRpY2F0aW9uSW5mb1dpdGhQcm90b2NvbDooY29uc3QgY2hhciopIHByb3RvY29sIGhvc3Q6
KGNvbnN0IGNoYXIqKWhvc3QgcG9ydDooaW50MzJfdClwb3J0IHNjaGVtZTooY29uc3QgY2hhciop
c2NoZW1lIHJlYWxtOihjb25zdCBjaGFyKilyZWFsbQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdXNlcm5hbWU6KGNoYXIqKil1c2VybmFtZSB1c2VybmFtZUxlbmd0aDoodWlu
dDMyX3QqKXVzZXJuYW1lTGVuZ3RoIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFzc3dvcmQ6KGNoYXIqKilwYXNzd29yZCBwYXNzd29yZExlbmd0aDoodWludDMyX3QqKXBh
c3N3b3JkTGVuZ3RoOwotQGVuZAotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0gYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYThhMmVlODE3MWEyZGI4ZDgyYzhiYjA1YTk5ZGQwMDQxNjll
YWVkNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQorKysg
L2Rldi9udWxsCkBAIC0xLDE4NzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAot
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKLQotI2ltcG9ydCAiV2ViTmV0c2NhcGVQbHVnaW5WaWV3LmgiCi0KLSNpbXBvcnQgIldlYkRh
dGFTb3VyY2VJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViRGVmYXVsdFVJRGVsZWdhdGUuaCIKLSNp
bXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkZyYW1lVmlldy5oIgotI2lt
cG9ydCAiV2ViS2l0RXJyb3JzUHJpdmF0ZS5oIgotI2ltcG9ydCAiV2ViS2l0TG9nZ2luZy5oIgot
I2ltcG9ydCAiV2ViS2l0TlNTdHJpbmdFeHRyYXMuaCIKLSNpbXBvcnQgIldlYk5TRGF0YUV4dHJh
cy5oIgotI2ltcG9ydCAiV2ViTlNEaWN0aW9uYXJ5RXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJOU09i
amVjdEV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNVUkxFeHRyYXMuaCIKLSNpbXBvcnQgIldlYk5T
VVJMUmVxdWVzdEV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNWaWV3RXh0cmFzLmgiCi0jaW1wb3J0
ICJXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlci5oIgotI2ltcG9ydCAiV2ViTmV0c2NhcGVQ
bHVnaW5QYWNrYWdlLmgiCi0jaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5oIgotI2lt
cG9ydCAiV2ViUGx1Z2luUmVxdWVzdC5oIgotI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXMuaCIKLSNp
bXBvcnQgIldlYlVJRGVsZWdhdGVQcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwu
aCIKLSNpbXBvcnQgPENhcmJvbi9DYXJib24uaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
aXRpYWxpemVUaHJlYWRpbmcuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgot
I2ltcG9ydCA8V2ViQ29yZS9Db21tb25WTS5oPgotI2ltcG9ydCA8V2ViQ29yZS9Db29raWVKYXIu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
RWxlbWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9G
cmFtZUxvYWRlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVRyZWUuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxQbHVnSW5FbGVtZW50Lmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL05QX2pzb2JqZWN0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BhZ2Uu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvUHJveHlTZXJ2ZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2Ny
aXB0Q29udHJvbGxlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgotI2lt
cG9ydCA8V2ViQ29yZS9Vc2VyR2VzdHVyZUluZGljYXRvci5oPgotI2ltcG9ydCA8V2ViQ29yZS9X
ZWJDb3JlSklUT3BlcmF0aW9ucy5oPgotI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVVJMUmVzcG9u
c2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvbnBydW50aW1lX2ltcGwuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvcnVudGltZV9yb290Lmg+Ci0jaW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9NUHJpdmF0ZS5oPgot
I2ltcG9ydCA8V2ViS2l0TGVnYWN5L1dlYlVJRGVsZWdhdGUuaD4KLSNpbXBvcnQgPG9iamMvcnVu
dGltZS5oPgotI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNpbXBvcnQg
PHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgotI2ltcG9ydCA8
d3RmL1J1bkxvb3AuaD4KLSNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgotI2ltcG9ydCA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotCi0jZGVmaW5lIExvZ2luV2luZG93RGlkU3dpdGNoRnJvbVVzZXJO
b3RpZmljYXRpb24gICAgQCJXZWJMb2dpbldpbmRvd0RpZFN3aXRjaEZyb21Vc2VyTm90aWZpY2F0
aW9uIgotI2RlZmluZSBMb2dpbldpbmRvd0RpZFN3aXRjaFRvVXNlck5vdGlmaWNhdGlvbiAgICAg
IEAiV2ViTG9naW5XaW5kb3dEaWRTd2l0Y2hUb1VzZXJOb3RpZmljYXRpb24iCi0jZGVmaW5lIFdL
TlZTdXBwb3J0c0NvbXBvc2l0aW5nQ29yZUFuaW1hdGlvblBsdWdpbnNCb29sIDc0NjU2ICAvKiBU
UlVFIGlmIHRoZSBicm93c2VyIHN1cHBvcnRzIGhhcmR3YXJlIGNvbXBvc2l0aW5nIG9mIENvcmUg
QW5pbWF0aW9uIHBsdWctaW5zICAqLwotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVzaW5n
IG5hbWVzcGFjZSBXZWJLaXQ7Ci0KLUBpbnRlcmZhY2UgV2ViTmV0c2NhcGVQbHVnaW5WaWV3IChJ
bnRlcm5hbCkKLS0gKE5QRXJyb3IpX2NyZWF0ZVBsdWdpbjsKLS0gKHZvaWQpX2Rlc3Ryb3lQbHVn
aW47Ci0tICh2b2lkKV9yZWRlbGl2ZXJTdHJlYW07Ci0tIChCT09MKV9zaG91bGRDYW5jZWxTcmNT
dHJlYW07Ci1AZW5kCi0KLXN0YXRpYyBXZWJOZXRzY2FwZVBsdWdpblZpZXcgKmN1cnJlbnRQbHVn
aW5WaWV3ID0gbmlsOwotCi10eXBlZGVmIHN0cnVjdCBPcGFxdWVQb3J0U3RhdGUqIFBvcnRTdGF0
ZTsKLQotc3RhdGljIGNvbnN0IFNlY29uZHMgdGhyb3R0bGVkVGltZXJJbnRlcnZhbCB7IDI1MF9t
cyB9OwotCi1jbGFzcyBQbHVnaW5UaW1lciA6IHB1YmxpYyBUaW1lckJhc2UgewotcHVibGljOgot
ICAgIHR5cGVkZWYgdm9pZCAoKlRpbWVyRnVuYykoTlBQIG5wcCwgdWludDMyX3QgdGltZXJJRCk7
Ci0gICAgCi0gICAgUGx1Z2luVGltZXIoTlBQIG5wcCwgdWludDMyX3QgdGltZXJJRCwgdWludDMy
X3QgaW50ZXJ2YWwsIE5QQm9vbCByZXBlYXQsIFRpbWVyRnVuYyB0aW1lckZ1bmMpCi0gICAgICAg
IDogbV9ucHAobnBwKQotICAgICAgICAsIG1fdGltZXJJRCh0aW1lcklEKQotICAgICAgICAsIG1f
aW50ZXJ2YWwoaW50ZXJ2YWwpCi0gICAgICAgICwgbV9yZXBlYXQocmVwZWF0KQotICAgICAgICAs
IG1fdGltZXJGdW5jKHRpbWVyRnVuYykKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3Rh
cnQoYm9vbCB0aHJvdHRsZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghaXNBY3RpdmUoKSk7Ci0K
LSAgICAgICAgU2Vjb25kcyB0aW1lSW50ZXJ2YWwgPSAxX21zICogbV9pbnRlcnZhbDsKLSAgICAg
ICAgCi0gICAgICAgIGlmICh0aHJvdHRsZSkKLSAgICAgICAgICAgIHRpbWVJbnRlcnZhbCA9IHN0
ZDo6bWF4KHRpbWVJbnRlcnZhbCwgdGhyb3R0bGVkVGltZXJJbnRlcnZhbCk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAobV9yZXBlYXQpCi0gICAgICAgICAgICBzdGFydFJlcGVhdGluZyhTZWNvbmRz
IHsgdGltZUludGVydmFsIH0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdGFydE9uZVNo
b3QodGltZUludGVydmFsKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIGZp
cmVkKCkgCi0gICAgewotICAgICAgICBtX3RpbWVyRnVuYyhtX25wcCwgbV90aW1lcklEKTsKLSAg
ICAgICAgaWYgKCFtX3JlcGVhdCkKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzOwotICAgIH0KLSAg
ICAKLSAgICBOUFAgbV9ucHA7Ci0gICAgdWludDMyX3QgbV90aW1lcklEOwotICAgIHVpbnQzMl90
IG1faW50ZXJ2YWw7Ci0gICAgTlBCb29sIG1fcmVwZWF0OwotICAgIFRpbWVyRnVuYyBtX3RpbWVy
RnVuYzsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dDsK
LX0gUG9ydFN0YXRlX0NHOwotCi1AY2xhc3MgTlNUZXh0SW5wdXRDb250ZXh0OwotQGludGVyZmFj
ZSBOU1Jlc3BvbmRlciAoQXBwS2l0RGV0YWlscykKLS0gKE5TVGV4dElucHV0Q29udGV4dCAqKWlu
cHV0Q29udGV4dDsKLUBlbmQKLQotQGludGVyZmFjZSBXZWJOZXRzY2FwZVBsdWdpblZpZXcgKEZv
cndhcmREZWNsYXJhdGlvbnMpCi0tICh2b2lkKXNldFdpbmRvd0lmTmVjZXNzYXJ5OwotLSAoTlBF
cnJvcilsb2FkUmVxdWVzdDooTlNNdXRhYmxlVVJMUmVxdWVzdCAqKXJlcXVlc3QgaW5UYXJnZXQ6
KGNvbnN0IGNoYXIgKiljVGFyZ2V0IHdpdGhOb3RpZnlEYXRhOih2b2lkICopbm90aWZ5RGF0YSBz
ZW5kTm90aWZpY2F0aW9uOihCT09MKXNlbmROb3RpZmljYXRpb247Ci1AZW5kCi0KLUBpbXBsZW1l
bnRhdGlvbiBXZWJOZXRzY2FwZVBsdWdpblZpZXcKLQotKyAodm9pZClpbml0aWFsaXplCi17Ci0g
ICAgSlNDOjppbml0aWFsaXplKCk7Ci0gICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwot
ICAgIFdlYkNvcmU6OnBvcHVsYXRlSklUT3BlcmF0aW9ucygpOwotICAgIHNlbmRVc2VyQ2hhbmdl
Tm90aWZpY2F0aW9ucygpOwotfQotCi0vLyBNQVJLOiBFVkVOVFMKLQotc3RhdGljIGlubGluZSB2
b2lkIGdldE5QUmVjdChjb25zdCBOU1JlY3QmIG5yLCBOUFJlY3QmIG5wcikKLXsKLSAgICBucHIu
dG9wID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KG5yLm9yaWdpbi55KTsKLSAgICBucHIubGVmdCA9
IHN0YXRpY19jYXN0PHVpbnQxNl90Pihuci5vcmlnaW4ueCk7Ci0gICAgbnByLmJvdHRvbSA9IHN0
YXRpY19jYXN0PHVpbnQxNl90PihOU01heFkobnIpKTsKLSAgICBucHIucmlnaHQgPSBzdGF0aWNf
Y2FzdDx1aW50MTZfdD4oTlNNYXhYKG5yKSk7Ci19Ci0KLS0gKFBvcnRTdGF0ZSlzYXZlQW5kU2V0
TmV3UG9ydFN0YXRlRm9yVXBkYXRlOihCT09MKWZvclVwZGF0ZQotewotICAgIEFTU0VSVChbc2Vs
ZiBjdXJyZW50V2luZG93XSAhPSBuaWwpOwotICAgIAotICAgIC8vIFRoZSBiYXNlIGNvb3JkaW5h
dGVzIG9mIGEgd2luZG93IGFuZCBpdCdzIGNvbnRlbnRWaWV3IGhhcHBlbiB0byBiZSB0aGUgZXF1
YWwgYXQgYSB1c2VyU3BhY2VTY2FsZUZhY3RvcgotICAgIC8vIG9mIDEuIEZvciBub24tMS4wIHNj
YWxlIGZhY3RvcnMgdGhpcyBhc3N1bXB0aW9uIGlzIGZhbHNlLgotICAgIE5TVmlldyAqd2luZG93
Q29udGVudFZpZXcgPSBbW3NlbGYgd2luZG93XSBjb250ZW50Vmlld107Ci0gICAgTlNSZWN0IGJv
dW5kc0luV2luZG93ID0gW3NlbGYgY29udmVydFJlY3Q6W3NlbGYgYm91bmRzXSB0b1ZpZXc6d2lu
ZG93Q29udGVudFZpZXddOwotICAgIE5TUmVjdCB2aXNpYmxlUmVjdEluV2luZG93ID0gW3NlbGYg
YWN0dWFsVmlzaWJsZVJlY3RJbldpbmRvd107Ci0gICAgCi0gICAgLy8gRmxpcCBZIHRvIGNvbnZl
cnQgLVtOU1dpbmRvdyBjb250ZW50Vmlld10gY29vcmRpbmF0ZXMgdG8gdG9wLWxlZnQtYmFzZWQg
d2luZG93IGNvb3JkaW5hdGVzLgotICAgIGZsb2F0IGJvcmRlclZpZXdIZWlnaHQgPSBbW3NlbGYg
Y3VycmVudFdpbmRvd10gZnJhbWVdLnNpemUuaGVpZ2h0OwotICAgIGJvdW5kc0luV2luZG93Lm9y
aWdpbi55ID0gYm9yZGVyVmlld0hlaWdodCAtIE5TTWF4WShib3VuZHNJbldpbmRvdyk7Ci0gICAg
dmlzaWJsZVJlY3RJbldpbmRvdy5vcmlnaW4ueSA9IGJvcmRlclZpZXdIZWlnaHQgLSBOU01heFko
dmlzaWJsZVJlY3RJbldpbmRvdyk7Ci0gICAgCi0gICAgd2luZG93LnR5cGUgPSBOUFdpbmRvd1R5
cGVXaW5kb3c7Ci0gICAgd2luZG93LnggPSAoaW50MzJfdClib3VuZHNJbldpbmRvdy5vcmlnaW4u
eDsgCi0gICAgd2luZG93LnkgPSAoaW50MzJfdClib3VuZHNJbldpbmRvdy5vcmlnaW4ueTsKLSAg
ICB3aW5kb3cud2lkdGggPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oTlNXaWR0aChib3VuZHNJbldp
bmRvdykpOwotICAgIHdpbmRvdy5oZWlnaHQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oTlNIZWln
aHQoYm91bmRzSW5XaW5kb3cpKTsKLSAgICAKLSAgICAvLyAiQ2xpcC1vdXQiIHRoZSBwbHVnLWlu
IHdoZW46Ci0gICAgLy8gMSkgaXQncyBub3QgcmVhbGx5IGluIGEgd2luZG93IG9yIG9mZi1zY3Jl
ZW4gb3IgaGFzIG5vIGhlaWdodCBvciB3aWR0aC4KLSAgICAvLyAyKSB3aW5kb3cueCBpcyBhICJi
aWcgbmVnYXRpdmUgbnVtYmVyIiB3aGljaCBpcyBob3cgV2ViQ29yZSBleHByZXNzZXMgb2ZmLXNj
cmVlbiB3aWRnZXRzLgotICAgIC8vIDMpIHRoZSB3aW5kb3cgaXMgbWluaWF0dXJpemVkIG9yIHRo
ZSBhcHAgaXMgaGlkZGVuCi0gICAgLy8gNCkgd2UncmUgaW5zaWRlIG9mIHZpZXdXaWxsTW92ZVRv
V2luZG93OiB3aXRoIGEgbmlsIHdpbmRvdy4gSW4gdGhpcyBjYXNlLCBzdXBlcnZpZXdzIG1heSBh
bHJlYWR5IGhhdmUgbmlsIAotICAgIC8vIHN1cGVydmlld3MgYW5kIG5pbCB3aW5kb3dzIGFuZCBy
ZXN1bHRzIGZyb20gY29udmVydFJlY3Q6dG9WaWV3OiBhcmUgaW5jb3JyZWN0LgotICAgIGlmICh3
aW5kb3cud2lkdGggPD0gMCB8fCB3aW5kb3cuaGVpZ2h0IDw9IDAgfHwgd2luZG93LnggPCAtMTAw
MDAwIHx8IFtzZWxmIHNob3VsZENsaXBPdXRQbHVnaW5dKSB7Ci0KLSAgICAgICAgLy8gVGhlIGZv
bGxvd2luZyBjb2RlIHRyaWVzIHRvIGdpdmUgcGx1Zy1pbnMgdGhlIHNhbWUgc2l6ZSB0aGV5IHdp
bGwgZXZlbnR1YWxseSBoYXZlLgotICAgICAgICAvLyBUaGUgc3BlY2lmaWVkV2lkdGggYW5kIHNw
ZWNpZmllZEhlaWdodCB2YXJpYWJsZXMgYXJlIHVzZWQgdG8gcHJlZGljdCB0aGUgc2l6ZSB0aGF0
Ci0gICAgICAgIC8vIFdlYkNvcmUgd2lsbCBldmVudHVhbGx5IHJlc2l6ZSB1cyB0by4KLQotICAg
ICAgICAvLyBUaGUgUXVpY2tUaW1lIHBsdWctaW4gaGFzIHByb2JsZW1zIGlmIHlvdSBnaXZlIGl0
IGEgd2lkdGggb3IgaGVpZ2h0IG9mIDAuCi0gICAgICAgIC8vIFNpbmNlIG90aGVyIHBsdWctaW5z
IGFsc28gbWlnaHQgaGF2ZSB0aGUgc2FtZSBzb3J0IG9mIHRyb3VibGUsIHdlIG1ha2Ugc3VyZQot
ICAgICAgICAvLyB0byBhbHdheXMgZ2l2ZSBwbHVnLWlucyBhIHNpemUgb3RoZXIgdGhhbiAwLDAu
Ci0KLSAgICAgICAgaWYgKHdpbmRvdy53aWR0aCA8PSAwKQotICAgICAgICAgICAgd2luZG93Lndp
ZHRoID0gc3BlY2lmaWVkV2lkdGggPiAwID8gc3BlY2lmaWVkV2lkdGggOiAxMDA7Ci0gICAgICAg
IGlmICh3aW5kb3cuaGVpZ2h0IDw9IDApCi0gICAgICAgICAgICB3aW5kb3cuaGVpZ2h0ID0gc3Bl
Y2lmaWVkSGVpZ2h0ID4gMCA/IHNwZWNpZmllZEhlaWdodCA6IDEwMDsKLQotICAgICAgICB3aW5k
b3cuY2xpcFJlY3QuYm90dG9tID0gd2luZG93LmNsaXBSZWN0LnRvcDsKLSAgICAgICAgd2luZG93
LmNsaXBSZWN0LmxlZnQgPSB3aW5kb3cuY2xpcFJlY3QucmlnaHQ7Ci0gICAgICAgIAotICAgICAg
ICAvLyBDb3JlIEFuaW1hdGlvbiBwbHVnLWlucyBuZWVkIHRvIGJlIHVwZGF0ZWQgKHdpdGggYSAw
LDAsMCwwIGNsaXBSZWN0KSB3aGVuCi0gICAgICAgIC8vIG1vdmVkIHRvIGEgYmFja2dyb3VuZCB0
YWIuIFdlIGRvbid0IGRvIHRoaXMgZm9yIENvcmUgR3JhcGhpY3MgcGx1Zy1pbnMgYXMKLSAgICAg
ICAgLy8gb2xkZXIgdmVyc2lvbnMgb2YgRmxhc2ggaGF2ZSBoaXN0b3JpY2FsIFdlYktpdC1zcGVj
aWZpYyBjb2RlIHRoYXQgaXNuJ3QKLSAgICAgICAgLy8gY29tcGF0aWJsZSB3aXRoIHRoaXMgYmVo
YXZpb3IuCi0gICAgICAgIGlmIChkcmF3aW5nTW9kZWwgPT0gTlBEcmF3aW5nTW9kZWxDb3JlQW5p
bWF0aW9uKQotICAgICAgICAgICAgZ2V0TlBSZWN0KE5TWmVyb1JlY3QsIHdpbmRvdy5jbGlwUmVj
dCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZ2V0TlBSZWN0KHZpc2libGVSZWN0SW5XaW5kb3cs
IHdpbmRvdy5jbGlwUmVjdCk7Ci0gICAgfQotICAgIAotICAgIC8vIFNhdmUgdGhlIHBvcnQgc3Rh
dGUsIHNldCB1cCB0aGUgcG9ydCBmb3IgZW50cnkgaW50byB0aGUgcGx1Z2luCi0gICAgUG9ydFN0
YXRlIHBvcnRTdGF0ZTsKLSAgICBzd2l0Y2ggKGRyYXdpbmdNb2RlbCkgewotICAgICAgICBjYXNl
IE5QRHJhd2luZ01vZGVsQ29yZUdyYXBoaWNzOiB7ICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoIVtzZWxmIGNhbkRyYXddKSB7Ci0gICAgICAgICAgICAgICAgcG9ydFN0YXRlID0gTlVMTDsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgQVNTRVJUKFtOU1ZpZXcgZm9jdXNWaWV3XSA9PSBzZWxmKTsKLQotICAgICAgICAg
ICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250
ZXh0XSBDR0NvbnRleHRdOwotCi0gICAgICAgICAgICBQb3J0U3RhdGVfQ0cgKmNnUG9ydFN0YXRl
ID0gKFBvcnRTdGF0ZV9DRyAqKW1hbGxvYyhzaXplb2YoUG9ydFN0YXRlX0NHKSk7Ci0gICAgICAg
ICAgICBwb3J0U3RhdGUgPSAoUG9ydFN0YXRlKWNnUG9ydFN0YXRlOwotICAgICAgICAgICAgY2dQ
b3J0U3RhdGUtPmNvbnRleHQgPSBjb250ZXh0OwotCi0gICAgICAgICAgICAvLyBTYXZlIGN1cnJl
bnQgZ3JhcGhpY3MgY29udGV4dCdzIHN0YXRlOyB3aWxsIGJlIHJlc3RvcmVkIGJ5IC1yZXN0b3Jl
UG9ydFN0YXRlOgotICAgICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKLQot
ICAgICAgICAgICAgLy8gQ2xpcCB0byB0aGUgZGlydHkgcmVnaW9uIGlmIGRyYXdpbmcgdG8gYSB3
aW5kb3cuIFdoZW4gZHJhd2luZyB0byBhbm90aGVyIGJpdG1hcCBjb250ZXh0LCBkbyBub3QgY2xp
cC4KLSAgICAgICAgICAgIGlmIChbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdID09
IFtbc2VsZiBjdXJyZW50V2luZG93XSBncmFwaGljc0NvbnRleHRdKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gR2V0IGxpc3Qgb2YgZGlydHkgcmVjdHMgZnJvbSB0aGUgb3BhcXVlIGFuY2VzdG9yIC0t
IFdlYktpdCBkb2VzIHNvbWUgdHJpY2tzIHdpdGggaW52YWxpZGF0aW9uIGFuZAotICAgICAgICAg
ICAgICAgIC8vIGRpc3BsYXkgdG8gZW5hYmxlIHotb3JkZXJpbmcgZm9yIE5TVmlld3M7IGEgc2lk
ZS1lZmZlY3Qgb2YgdGhpcyBpcyB0aGF0IG9ubHkgdGhlIFdlYkhUTUxWaWV3Ci0gICAgICAgICAg
ICAgICAgLy8ga25vd3MgYWJvdXQgdGhlIHRydWUgc2V0IG9mIGRpcnR5IHJlY3RzLgotICAgICAg
ICAgICAgICAgIE5TVmlldyAqb3BhcXVlQW5jZXN0b3IgPSBbc2VsZiBvcGFxdWVBbmNlc3Rvcl07
Ci0gICAgICAgICAgICAgICAgY29uc3QgTlNSZWN0ICpkaXJ0eVJlY3RzOwotICAgICAgICAgICAg
ICAgIE5TSW50ZWdlciBjb3VudDsKLSAgICAgICAgICAgICAgICBbb3BhcXVlQW5jZXN0b3IgZ2V0
UmVjdHNCZWluZ0RyYXduOiZkaXJ0eVJlY3RzIGNvdW50OiZjb3VudF07Ci0gICAgICAgICAgICAg
ICAgVmVjdG9yPENHUmVjdCwgMTY+IGNvbnZlcnRlZERpcnR5UmVjdHM7Ci0gICAgICAgICAgICAg
ICAgY29udmVydGVkRGlydHlSZWN0cy5ncm93KGNvdW50KTsKLSAgICAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8TlNSZWN0Jj4oY29udmVydGVkRGlydHlSZWN0c1tpXSkgPSBbc2VsZiBjb252ZXJ0
UmVjdDpkaXJ0eVJlY3RzW2ldIGZyb21WaWV3Om9wYXF1ZUFuY2VzdG9yXTsKLSAgICAgICAgICAg
ICAgICBDR0NvbnRleHRDbGlwVG9SZWN0cyhjb250ZXh0LCBjb252ZXJ0ZWREaXJ0eVJlY3RzLmRh
dGEoKSwgY291bnQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICAgIAotICAgICAgICBjYXNlIE5QRHJhd2luZ01vZGVsQ29yZUFuaW1hdGlv
bjoKLSAgICAgICAgICAgIC8vIEp1c3Qgc2V0IHRoZSBwb3J0IHN0YXRlIHRvIGEgZHVtbXkgdmFs
dWUuCi0gICAgICAgICAgICBwb3J0U3RhdGUgPSAoUG9ydFN0YXRlKTE7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHBvcnRTdGF0ZSA9IE5VTEw7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHBvcnRTdGF0ZTsKLX0KLQotLSAoUG9ydFN0
YXRlKXNhdmVBbmRTZXROZXdQb3J0U3RhdGUKLXsKLSAgICByZXR1cm4gW3NlbGYgc2F2ZUFuZFNl
dE5ld1BvcnRTdGF0ZUZvclVwZGF0ZTpOT107Ci19Ci0KLS0gKHZvaWQpcmVzdG9yZVBvcnRTdGF0
ZTooUG9ydFN0YXRlKXBvcnRTdGF0ZQotewotICAgIEFTU0VSVChbc2VsZiBjdXJyZW50V2luZG93
XSk7Ci0gICAgQVNTRVJUKHBvcnRTdGF0ZSk7Ci0gICAgCi0gICAgc3dpdGNoIChkcmF3aW5nTW9k
ZWwpIHsKLSAgICAgICAgY2FzZSBOUERyYXdpbmdNb2RlbENvcmVHcmFwaGljczogewotICAgICAg
ICAgICAgQVNTRVJUKFtOU1ZpZXcgZm9jdXNWaWV3XSA9PSBzZWxmKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSAoKFBvcnRTdGF0ZV9DRyAqKXBvcnRT
dGF0ZSktPmNvbnRleHQ7Ci0gICAgICAgICAgICBBU1NFUlQoIW5Qb3J0LmNnUG9ydC5jb250ZXh0
IHx8IChjb250ZXh0ID09IG5Qb3J0LmNnUG9ydC5jb250ZXh0KSk7Ci0gICAgICAgICAgICBDR0Nv
bnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGNhc2UgTlBEcmF3aW5nTW9kZWxDb3JlQW5pbWF0aW9uOgot
ICAgICAgICAgICAgQVNTRVJUKHBvcnRTdGF0ZSA9PSAoUG9ydFN0YXRlKTEpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotLSAoQk9PTClzZW5kRXZlbnQ6
KHZvaWQqKWV2ZW50IGlzRHJhd1JlY3Q6KEJPT0wpZXZlbnRJc0RyYXdSZWN0Ci17Ci0gICAgaWYg
KCFbc2VsZiB3aW5kb3ddKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgQVNTRVJUKGV2ZW50KTsK
LSAgICAgICAKLSAgICBpZiAoIV9pc1N0YXJ0ZWQpCi0gICAgICAgIHJldHVybiBOTzsKLQotICAg
IEFTU0VSVChbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5ldmVudCk7Ci0gICAg
Ci0gICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGNhbGwgTlBQX0hhbmRsZUV2ZW50IHdoaWxlIHdl
J3JlIGluc2lkZSBOUFBfU2V0V2luZG93LgotICAgIC8vIFdlIHByb2JhYmx5IGRvbid0IHdhbnQg
bW9yZSBnZW5lcmFsIHJlZW50cmFuY3kgcHJvdGVjdGlvbjsgd2UgYXJlIHJlYWxseQotICAgIC8v
IHByb3RlY3Rpbmcgb25seSBhZ2FpbnN0IHRoaXMgb25lIGNhc2UsIHdoaWNoIGFjdHVhbGx5IGNv
bWVzIHVwIHdoZW4KLSAgICAvLyB5b3UgZmlyc3QgaW5zdGFsbCB0aGUgU1ZHIHZpZXdlciBwbHVn
LWluLgotICAgIGlmIChpblNldFdpbmRvdykKLSAgICAgICAgcmV0dXJuIE5POwotCi0gICAgRnJh
bWUqIGZyYW1lID0gY29yZShbc2VsZiB3ZWJGcmFtZV0pOwotICAgIGlmICghZnJhbWUpCi0gICAg
ICAgIHJldHVybiBOTzsKLSAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAo
IXBhZ2UpCi0gICAgICAgIHJldHVybiBOTzsKLQotICAgIC8vIENhbiBvbmx5IHNlbmQgZHJhd1Jl
Y3QgKHVwZGF0ZUV2dCkgdG8gQ29yZUdyYXBoaWNzIHBsdWdpbnMgd2hlbiBhY3R1YWxseSBkcmF3
aW5nCi0gICAgQVNTRVJUKChkcmF3aW5nTW9kZWwgIT0gTlBEcmF3aW5nTW9kZWxDb3JlR3JhcGhp
Y3MpIHx8ICFldmVudElzRHJhd1JlY3QgfHwgW05TVmlldyBmb2N1c1ZpZXddID09IHNlbGYpOwot
ICAgIAotICAgIFBvcnRTdGF0ZSBwb3J0U3RhdGUgPSBOVUxMOwotICAgIAotICAgIGlmIChkcmF3
aW5nTW9kZWwgIT0gTlBEcmF3aW5nTW9kZWxDb3JlQW5pbWF0aW9uICYmIGV2ZW50SXNEcmF3UmVj
dCkgewotICAgICAgICAvLyBJbiBDb3JlR3JhcGhpY3MgbW9kZSwgdGhlIHBvcnQgc3RhdGUgb25s
eSBuZWVkcyB0byBiZSBzYXZlZC9zZXQgd2hlbiByZWRyYXdpbmcgdGhlIHBsdWctaW4gdmlldy4K
LSAgICAgICAgLy8gVGhlIHBsdWctaW4gaXMgbm90IGFsbG93ZWQgdG8gZHJhdyBhdCBhbnkgb3Ro
ZXIgdGltZS4KLSAgICAgICAgcG9ydFN0YXRlID0gW3NlbGYgc2F2ZUFuZFNldE5ld1BvcnRTdGF0
ZUZvclVwZGF0ZTpldmVudElzRHJhd1JlY3RdOwotICAgICAgICAvLyBXZSBtYXkgaGF2ZSBjaGFu
Z2VkIHRoZSB3aW5kb3csIHNvIGluZm9ybSB0aGUgcGx1Zy1pbi4KLSAgICAgICAgW3NlbGYgc2V0
V2luZG93SWZOZWNlc3NhcnldOwotICAgIH0KLQotICAgIC8vIFRlbXBvcmFyaWx5IHJldGFpbiBz
ZWxmIGluIGNhc2UgdGhlIHBsdWctaW4gdmlldyBpcyByZWxlYXNlZCB3aGlsZSBzZW5kaW5nIGFu
IGV2ZW50LiAKLSAgICBhdXRvIHN0cm9uZ1NlbGYgPSByZXRhaW5QdHIoc2VsZik7Ci0KLSAgICBC
T09MIGFjY2VwdGVkRXZlbnQ7Ci0gICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07Ci0g
ICAgLy8gU2V0IHRoZSBwbHVnaW5BbGxvd1BvcHVwIGZsYWcuCi0gICAgQVNTRVJUKF9ldmVudEhh
bmRsZXIpOwotICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoY29tbW9uVk0oKSk7Ci0gICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJ
bmRpY2F0b3IoX2V2ZW50SGFuZGxlci0+Y3VycmVudEV2ZW50SXNVc2VyR2VzdHVyZSgpID8gc3Rk
OjpvcHRpb25hbDxQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0ZT4oUHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKSA6IHN0ZDo6bnVsbG9wdCk7Ci0gICAgICAgIGFjY2VwdGVkRXZlbnQgPSBbX3BsdWdpblBh
Y2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5ldmVudChwbHVnaW4sIGV2ZW50KTsKLSAgICB9Ci0g
ICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKLQotICAgIGlmIChwb3J0U3RhdGUpIHsK
LSAgICAgICAgaWYgKFtzZWxmIGN1cnJlbnRXaW5kb3ddKQotICAgICAgICAgICAgW3NlbGYgcmVz
dG9yZVBvcnRTdGF0ZTpwb3J0U3RhdGVdOwotICAgICAgICBpZiAocG9ydFN0YXRlICE9IChQb3J0
U3RhdGUpMSkKLSAgICAgICAgICAgIGZyZWUocG9ydFN0YXRlKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gYWNjZXB0ZWRFdmVudDsKLX0KLQotLSAodm9pZCl3aW5kb3dGb2N1c0NoYW5nZWQ6KEJPT0wp
aGFzRm9jdXMKLXsKLSAgICBfZXZlbnRIYW5kbGVyLT53aW5kb3dGb2N1c0NoYW5nZWQoaGFzRm9j
dXMpOwotfQotCi0tICh2b2lkKXNlbmREcmF3UmVjdEV2ZW50OihOU1JlY3QpcmVjdAotewotICAg
IEFTU0VSVChfZXZlbnRIYW5kbGVyKTsKLSAgICAKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9
IFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIENHQ29udGV4dF07Ci0gICAgX2V2
ZW50SGFuZGxlci0+ZHJhd1JlY3QoY29udGV4dCwgcmVjdCk7Ci19Ci0KLS0gKHZvaWQpc3RvcFRp
bWVycwotewotICAgIFtzdXBlciBzdG9wVGltZXJzXTsKLSAgICAKLSAgICBpZiAoX2V2ZW50SGFu
ZGxlcikKLSAgICAgICAgX2V2ZW50SGFuZGxlci0+c3RvcFRpbWVycygpOwotICAgIAotICAgIGlm
ICghdGltZXJzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGF1dG8mIGl0OiB0aW1lcnMt
PnZhbHVlcygpKQotICAgICAgICBpdC0+c3RvcCgpOwotfQotCi0tICh2b2lkKXN0YXJ0VGltZXJz
Ci17Ci0gICAgW3N1cGVyIHN0YXJ0VGltZXJzXTsKLSAgICAKLSAgICAvLyBJZiB0aGUgcGx1Z2lu
IGlzIGNvbXBsZXRlbHkgb2JzY3VyZWQgKHNjcm9sbGVkIG91dCBvZiB2aWV3LCBmb3IgZXhhbXBs
ZSksIHRoZW4gd2Ugd2lsbAotICAgIC8vIHNlbmQgbnVsbCBldmVudHMgYXQgYSByZWR1Y2VkIHJh
dGUuCi0gICAgX2V2ZW50SGFuZGxlci0+c3RhcnRUaW1lcnMoX2lzQ29tcGxldGVseU9ic2N1cmVk
KTsKLSAgICAKLSAgICBpZiAoIXRpbWVycykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGZv
ciAoYXV0byYgaXQ6IHRpbWVycy0+dmFsdWVzKCkpIHsKLSAgICAgICAgQVNTRVJUKCFpdC0+aXNB
Y3RpdmUoKSk7Ci0gICAgICAgIGl0LT5zdGFydChfaXNDb21wbGV0ZWx5T2JzY3VyZWQpOwotICAg
IH0gICAgCi19Ci0KLS0gKHZvaWQpZm9jdXNDaGFuZ2VkCi17Ci0gICAgLy8gV2UgbmVlZCB0byBu
dWxsIGNoZWNrIHRoZSBldmVudCBoYW5kbGVyIGhlcmUgYmVjYXVzZQotICAgIC8vIHRoZSBwbHVn
LWluIHZpZXcgY2FuIHJlc2lnbiBmb2N1cyBhZnRlciBpdCdzIGJlZW4gc3RvcHBlZAotICAgIC8v
IGFuZCB0aGUgZXZlbnQgaGFuZGxlciBoYXMgYmVlbiBkZWxldGVkLgotICAgIGlmIChfZXZlbnRI
YW5kbGVyKQotICAgICAgICBfZXZlbnRIYW5kbGVyLT5mb2N1c0NoYW5nZWQoX2hhc0ZvY3VzKTsK
LX0KLQotLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKil0aGVFdmVudAotewotICAgIGlmICgh
X2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX2V2ZW50SGFuZGxlci0+bW91c2VE
b3duKHRoZUV2ZW50KTsKLX0KLQotLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopdGhlRXZlbnQK
LXsKLSAgICBpZiAoIV9pc1N0YXJ0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9ldmVudEhh
bmRsZXItPm1vdXNlVXAodGhlRXZlbnQpOwotfQotCi0tICh2b2lkKWhhbmRsZU1vdXNlRW50ZXJl
ZDooTlNFdmVudCAqKXRoZUV2ZW50Ci17Ci0gICAgaWYgKCFfaXNTdGFydGVkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBTZXQgY3Vyc29yIHRvIGFycm93LiBQbHVnaW5zIG9mdGVuIGhhbmRs
ZSBjdXJzb3IgaW50ZXJuYWxseSwgYnV0IHRob3NlIHRoYXQgZG9uJ3Qgd2lsbCBqdXN0IGdldCB0
aGlzIGRlZmF1bHQgb25lLgotICAgIFtbTlNDdXJzb3IgYXJyb3dDdXJzb3JdIHNldF07Ci0KLSAg
ICBfZXZlbnRIYW5kbGVyLT5tb3VzZUVudGVyZWQodGhlRXZlbnQpOwotfQotCi0tICh2b2lkKWhh
bmRsZU1vdXNlRXhpdGVkOihOU0V2ZW50ICopdGhlRXZlbnQKLXsKLSAgICBpZiAoIV9pc1N0YXJ0
ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9ldmVudEhhbmRsZXItPm1vdXNlRXhpdGVkKHRo
ZUV2ZW50KTsKLSAgICAKLSAgICAvLyBTZXQgY3Vyc29yIGJhY2sgdG8gYXJyb3cgY3Vyc29yLiAg
QmVjYXVzZSBOU0N1cnNvciBkb2Vzbid0IGtub3cgYWJvdXQgY2hhbmdlcyB0aGF0IHRoZSBwbHVn
aW4gbWFkZSwgd2UgY291bGQgZ2V0IGNvbmZ1c2VkIGFib3V0IHdoYXQgd2UgdGhpbmsgdGhlCi0g
ICAgLy8gY3VycmVudCBjdXJzb3IgaXMgb3RoZXJ3aXNlLiAgVGhlcmVmb3JlIHdlIGhhdmUgbm8g
Y2hvaWNlIGJ1dCB0byB1bmNvbmRpdGlvbmFsbHkgcmVzZXQgdGhlIGN1cnNvciB3aGVuIHRoZSBt
b3VzZSBleGl0cyB0aGUgcGx1Z2luLgotICAgIFtbTlNDdXJzb3IgYXJyb3dDdXJzb3JdIHNldF07
Ci19Ci0KLS0gKHZvaWQpaGFuZGxlTW91c2VNb3ZlZDooTlNFdmVudCAqKXRoZUV2ZW50Ci17Ci0g
ICAgaWYgKCFfaXNTdGFydGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBfZXZlbnRIYW5kbGVy
LT5tb3VzZU1vdmVkKHRoZUV2ZW50KTsKLX0KLSAgICAKLS0gKHZvaWQpbW91c2VEcmFnZ2VkOihO
U0V2ZW50ICopdGhlRXZlbnQKLXsKLSAgICBpZiAoIV9pc1N0YXJ0ZWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIF9ldmVudEhhbmRsZXItPm1vdXNlRHJhZ2dlZCh0aGVFdmVudCk7Ci19Ci0KLS0g
KHZvaWQpc2Nyb2xsV2hlZWw6KE5TRXZlbnQgKil0aGVFdmVudAotewotICAgIGlmICghX2lzU3Rh
cnRlZCkgewotICAgICAgICBbc3VwZXIgc2Nyb2xsV2hlZWw6dGhlRXZlbnRdOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFfZXZlbnRIYW5kbGVyLT5zY3JvbGxXaGVlbCh0aGVF
dmVudCkpCi0gICAgICAgIFtzdXBlciBzY3JvbGxXaGVlbDp0aGVFdmVudF07Ci19Ci0KLS0gKHZv
aWQpa2V5VXA6KE5TRXZlbnQgKil0aGVFdmVudAotewotICAgIGlmICghX2lzU3RhcnRlZCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgX2V2ZW50SGFuZGxlci0+a2V5VXAodGhlRXZlbnQpOwotfQot
Ci0tICh2b2lkKWtleURvd246KE5TRXZlbnQgKil0aGVFdmVudAotewotICAgIGlmICghX2lzU3Rh
cnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX2V2ZW50SGFuZGxlci0+a2V5RG93bih0aGVF
dmVudCk7Ci19Ci0KLS0gKHZvaWQpZmxhZ3NDaGFuZ2VkOihOU0V2ZW50ICopdGhlRXZlbnQKLXsK
LSAgICBpZiAoIV9pc1N0YXJ0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9ldmVudEhhbmRs
ZXItPmZsYWdzQ2hhbmdlZCh0aGVFdmVudCk7Ci19Ci0KLS0gKHZvaWQpc2VuZE1vZGlmaWVyRXZl
bnRXaXRoS2V5Q29kZTooaW50KWtleUNvZGUgY2hhcmFjdGVyOihjaGFyKWNoYXJhY3Rlcgotewot
ICAgIGlmICghX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIF9ldmVudEhh
bmRsZXItPnN5bnRoZXRpY0tleURvd25XaXRoQ29tbWFuZE1vZGlmaWVyKGtleUNvZGUsIGNoYXJh
Y3Rlcik7Ci19Ci0KLS0gKHZvaWQpcHJpdmF0ZUJyb3dzaW5nTW9kZURpZENoYW5nZQotewotICAg
IGlmICghX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIE5QQm9vbCB2YWx1
ZSA9IF9pc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQ7Ci0KLSAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJ
bkZ1bmN0aW9uXTsKLSAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKGNvbW1vblZNKCkpOwotICAgICAgICBpZiAoW19wbHVnaW5QYWNrYWdlLmdldCgp
IHBsdWdpbkZ1bmNzXS0+c2V0dmFsdWUpCi0gICAgICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0
KCkgcGx1Z2luRnVuY3NdLT5zZXR2YWx1ZShwbHVnaW4sIE5QTlZwcml2YXRlTW9kZUJvb2wsICZ2
YWx1ZSk7Ci0gICAgfQotICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07Ci19Ci0KLS8v
IE1BUks6IFdFQl9ORVRTQ0FQRV9QTFVHSU4KLQotLSAoQk9PTClpc05ld1dpbmRvd0VxdWFsVG9P
bGRXaW5kb3cKLXsKLSAgICBpZiAod2luZG93LnggIT0gbGFzdFNldFdpbmRvdy54KQotICAgICAg
ICByZXR1cm4gTk87Ci0gICAgaWYgKHdpbmRvdy55ICE9IGxhc3RTZXRXaW5kb3cueSkKLSAgICAg
ICAgcmV0dXJuIE5POwotICAgIGlmICh3aW5kb3cud2lkdGggIT0gbGFzdFNldFdpbmRvdy53aWR0
aCkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIGlmICh3aW5kb3cuaGVpZ2h0ICE9IGxhc3RTZXRX
aW5kb3cuaGVpZ2h0KQotICAgICAgICByZXR1cm4gTk87Ci0gICAgaWYgKHdpbmRvdy5jbGlwUmVj
dC50b3AgIT0gbGFzdFNldFdpbmRvdy5jbGlwUmVjdC50b3ApCi0gICAgICAgIHJldHVybiBOTzsK
LSAgICBpZiAod2luZG93LmNsaXBSZWN0LmxlZnQgIT0gbGFzdFNldFdpbmRvdy5jbGlwUmVjdC5s
ZWZ0KQotICAgICAgICByZXR1cm4gTk87Ci0gICAgaWYgKHdpbmRvdy5jbGlwUmVjdC5ib3R0b20g
ICE9IGxhc3RTZXRXaW5kb3cuY2xpcFJlY3QuYm90dG9tKQotICAgICAgICByZXR1cm4gTk87Ci0g
ICAgaWYgKHdpbmRvdy5jbGlwUmVjdC5yaWdodCAhPSBsYXN0U2V0V2luZG93LmNsaXBSZWN0LnJp
Z2h0KQotICAgICAgICByZXR1cm4gTk87Ci0gICAgaWYgKHdpbmRvdy50eXBlICE9IGxhc3RTZXRX
aW5kb3cudHlwZSkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIAotICAgIHN3aXRjaCAoZHJhd2lu
Z01vZGVsKSB7Ci0gICAgICAgIGNhc2UgTlBEcmF3aW5nTW9kZWxDb3JlR3JhcGhpY3M6Ci0gICAg
ICAgICAgICBpZiAoblBvcnQuY2dQb3J0LndpbmRvdyAhPSBsYXN0U2V0UG9ydC5jZ1BvcnQud2lu
ZG93KQotICAgICAgICAgICAgICAgIHJldHVybiBOTzsKLSAgICAgICAgICAgIGlmIChuUG9ydC5j
Z1BvcnQuY29udGV4dCAhPSBsYXN0U2V0UG9ydC5jZ1BvcnQuY29udGV4dCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gTk87Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBOUERyYXdpbmdNb2RlbENvcmVBbmltYXRpb246Ci0gICAgICAgICAgaWYgKHdp
bmRvdy53aW5kb3cgIT0gbGFzdFNldFdpbmRvdy53aW5kb3cpCi0gICAgICAgICAgICAgIHJldHVy
biBOTzsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIFlFUzsKLX0KLQotLSAodm9pZCl1cGRhdGVBbmRTZXRXaW5kb3cKLXsKLSAgICAvLyBBIHBs
dWctaW4gY2FuIG9ubHkgdXBkYXRlIGlmIGl0J3MgKDEpIGFscmVhZHkgYmVlbiBzdGFydGVkICgy
KSBpc24ndCBzdG9wcGVkCi0gICAgLy8gYW5kICgzKSBpcyBhYmxlIHRvIGRyYXcgb24tc2NyZWVu
LiBUbyBtZWV0IGNvbmRpdGlvbiAoMykgdGhlIHBsdWctaW4gbXVzdCBub3QKLSAgICAvLyBiZSBo
aWRkZW4gYW5kIGJlIGF0dGFjaGVkIHRvIGEgd2luZG93LiBUaGVyZSBhcmUgdHdvIGV4Y2VwdGlv
bnMgdG8gdGhpcyBydWxlOgotICAgIC8vCi0gICAgLy8gRXhjZXB0aW9uIDE6IFF1aWNrRHJhdyBw
bHVnLWlucyBtdXN0IGJlIG1hbnVhbGx5IHRvbGQgd2hlbiB0byBzdG9wIHdyaXRpbmcKLSAgICAv
LyBiaXRzIHRvIHRoZSB3aW5kb3cgYmFja2luZyBzdG9yZSwgdGh1cyB0byBkbyBzbyByZXF1aXJl
cyBhIG5ldyBjYWxsIHRvCi0gICAgLy8gTlBQX1NldFdpbmRvdygpIHdpdGggYW4gZW1wdHkgTlBX
aW5kb3cgc3RydWN0LgotICAgIC8vCi0gICAgLy8gRXhjZXB0aW9uIDI6IENvcmVHcmFwaGljcyBw
bHVnLWlucyBleHBlY3QgdG8gaGF2ZSB0aGVpciBkcmF3YWJsZSBhcmVhIHVwZGF0ZWQKLSAgICAv
LyB3aGVuIHRoZXkgYXJlIG1vdmVkIHRvIGEgYmFja2dyb3VuZCB0YWIsIHZpYSBhIE5QUF9TZXRX
aW5kb3cgY2FsbC4gVGhpcyBpcwotICAgIC8vIGFjY29tcGxpc2hlZCBieSBhbGxvd2luZyAtc2F2
ZUFuZFNldE5ld1BvcnRTdGF0ZUZvclVwZGF0ZSB0byAiY2xpcC1vdXQiIHRoZSB3aW5kb3cncwot
ICAgIC8vIGNsaXBSZWN0LiBGbGFzaCBpcyBjdXJlbnRseSBhbiBleGNlcHRpb24gdG8gdGhpcy4g
U2VlIDY0NTM3MzguCi0gICAgLy8KLSAgICAKLSAgICBpZiAoIV9pc1N0YXJ0ZWQpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBpZiAoIVtzZWxmIGNhbkRyYXddKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBCT09MIGRpZExvY2tGb2N1cyA9IFtOU1ZpZXcgZm9jdXNWaWV3XSAhPSBzZWxmICYm
IFtzZWxmIGxvY2tGb2N1c0lmQ2FuRHJhd107Ci0KLSAgICBQb3J0U3RhdGUgcG9ydFN0YXRlID0g
W3NlbGYgc2F2ZUFuZFNldE5ld1BvcnRTdGF0ZV07Ci0gICAgaWYgKHBvcnRTdGF0ZSkgewotICAg
ICAgICBbc2VsZiBzZXRXaW5kb3dJZk5lY2Vzc2FyeV07Ci0gICAgICAgIFtzZWxmIHJlc3RvcmVQ
b3J0U3RhdGU6cG9ydFN0YXRlXTsKLSAgICAgICAgaWYgKHBvcnRTdGF0ZSAhPSAoUG9ydFN0YXRl
KTEpCi0gICAgICAgICAgICBmcmVlKHBvcnRTdGF0ZSk7Ci0gICAgfSBlbHNlIGlmIChkcmF3aW5n
TW9kZWwgPT0gTlBEcmF3aW5nTW9kZWxDb3JlR3JhcGhpY3MpCi0gICAgICAgIFtzZWxmIHNldFdp
bmRvd0lmTmVjZXNzYXJ5XTsgICAgICAgIAotCi0gICAgaWYgKGRpZExvY2tGb2N1cykKLSAgICAg
ICAgW3NlbGYgdW5sb2NrRm9jdXNdOwotfQotCi0tICh2b2lkKXNldFdpbmRvd0lmTmVjZXNzYXJ5
Ci17Ci0gICAgaWYgKCFfaXNTdGFydGVkKSAKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlm
ICghW3NlbGYgaXNOZXdXaW5kb3dFcXVhbFRvT2xkV2luZG93XSkgeyAgICAgICAgCi0gICAgICAg
IC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBjYWxsIE5QUF9IYW5kbGVFdmVudCB3aGlsZSB3ZSdyZSBp
bnNpZGUgTlBQX1NldFdpbmRvdy4KLSAgICAgICAgLy8gV2UgcHJvYmFibHkgZG9uJ3Qgd2FudCBt
b3JlIGdlbmVyYWwgcmVlbnRyYW5jeSBwcm90ZWN0aW9uOyB3ZSBhcmUgcmVhbGx5Ci0gICAgICAg
IC8vIHByb3RlY3Rpbmcgb25seSBhZ2FpbnN0IHRoaXMgb25lIGNhc2UsIHdoaWNoIGFjdHVhbGx5
IGNvbWVzIHVwIHdoZW4KLSAgICAgICAgLy8geW91IGZpcnN0IGluc3RhbGwgdGhlIFNWRyB2aWV3
ZXIgcGx1Zy1pbi4KLSAgICAgICAgTlBFcnJvciBucEVycjsKLSAgICAgICAgCi0gICAgICAgIEJP
T0wgd2FzSW5TZXRXaW5kb3cgPSBpblNldFdpbmRvdzsKLSAgICAgICAgaW5TZXRXaW5kb3cgPSBZ
RVM7ICAgICAgICAKLSAgICAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KGNvbW1vblZNKCkpOwotICAgICAgICAgICAgbnBFcnIgPSBbX3BsdWdpblBhY2thZ2UuZ2V0KCkg
cGx1Z2luRnVuY3NdLT5zZXR3aW5kb3cocGx1Z2luLCAmd2luZG93KTsKLSAgICAgICAgfQotICAg
ICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwotICAgICAgICBpblNldFdpbmRvdyA9
IHdhc0luU2V0V2luZG93OwotCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICBzd2l0Y2ggKGRyYXdp
bmdNb2RlbCkgewotICAgICAgICAgICAgY2FzZSBOUERyYXdpbmdNb2RlbENvcmVHcmFwaGljczoK
LSAgICAgICAgICAgICAgICBMT0coUGx1Z2lucywgIk5QUF9TZXRXaW5kb3cgKENvcmVHcmFwaGlj
cyk6ICVkLCB3aW5kb3c9JXAsIGNvbnRleHQ9JXAsIHdpbmRvdy54OiVkIHdpbmRvdy55OiVkIHdp
bmRvdy53aWR0aDolZCB3aW5kb3cuaGVpZ2h0OiVkIHdpbmRvdy5jbGlwUmVjdCBzaXplOiVkeCVk
IiwKLSAgICAgICAgICAgICAgICBucEVyciwgblBvcnQuY2dQb3J0LndpbmRvdywgblBvcnQuY2dQ
b3J0LmNvbnRleHQsIChpbnQpd2luZG93LngsIChpbnQpd2luZG93LnksIChpbnQpd2luZG93Lndp
ZHRoLCAoaW50KXdpbmRvdy5oZWlnaHQsIAotICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY2xp
cFJlY3QucmlnaHQgLSB3aW5kb3cuY2xpcFJlY3QubGVmdCwgd2luZG93LmNsaXBSZWN0LmJvdHRv
bSAtIHdpbmRvdy5jbGlwUmVjdC50b3ApOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgIGNhc2UgTlBEcmF3aW5nTW9kZWxDb3JlQW5pbWF0aW9uOgotICAgICAgICAgICAgICAgIExP
RyhQbHVnaW5zLCAiTlBQX1NldFdpbmRvdyAoQ29yZUFuaW1hdGlvbik6ICVkLCB3aW5kb3c9JXAg
d2luZG93Lng6JWQgd2luZG93Lnk6JWQgd2luZG93LndpZHRoOiVkIHdpbmRvdy5oZWlnaHQ6JWQi
LAotICAgICAgICAgICAgICAgIG5wRXJyLCB3aW5kb3cud2luZG93LCBuUG9ydC5jZ1BvcnQuY29u
dGV4dCwgKGludCl3aW5kb3cueCwgKGludCl3aW5kb3cueSwgKGludCl3aW5kb3cud2lkdGgsIChp
bnQpd2luZG93LmhlaWdodCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0jZW5kaWYgLyogIWRlZmluZWQoTkRFQlVHKSAqLwotICAgICAg
ICAKLSAgICAgICAgbGFzdFNldFdpbmRvdyA9IHdpbmRvdzsKLSAgICAgICAgbGFzdFNldFBvcnQg
PSBuUG9ydDsKLSAgICB9Ci19Ci0KLSsgKHZvaWQpc2V0Q3VycmVudFBsdWdpblZpZXc6KFdlYk5l
dHNjYXBlUGx1Z2luVmlldyAqKXZpZXcKLXsKLSAgICBjdXJyZW50UGx1Z2luVmlldyA9IHZpZXc7
Ci19Ci0KLSsgKFdlYk5ldHNjYXBlUGx1Z2luVmlldyAqKWN1cnJlbnRQbHVnaW5WaWV3Ci17Ci0g
ICAgcmV0dXJuIGN1cnJlbnRQbHVnaW5WaWV3OwotfQotCi0tIChCT09MKWNyZWF0ZVBsdWdpbgot
ewotICAgIC8vIE9wZW4gdGhlIHBsdWctaW4gcGFja2FnZSBzbyBpdCByZW1haW5zIGxvYWRlZCB3
aGlsZSBvdXIgcGx1Z2luIHVzZXMgaXQKLSAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgb3Blbl07
Ci0gICAgCi0gICAgLy8gSW5pdGlhbGl6ZSBkcmF3aW5nTW9kZWwgdG8gYW4gaW52YWxpZCB2YWx1
ZSBzbyB0aGF0IHdlIGNhbiBkZXRlY3Qgd2hlbiB0aGUgcGx1Z2luIGRvZXMgbm90IHNwZWNpZnkg
YSBkcmF3aW5nTW9kZWwKLSAgICBkcmF3aW5nTW9kZWwgPSAoTlBEcmF3aW5nTW9kZWwpLTE7Ci0g
ICAgCi0gICAgLy8gSW5pdGlhbGl6ZSBldmVudE1vZGVsIHRvIGFuIGludmFsaWQgdmFsdWUgc28g
dGhhdCB3ZSBjYW4gZGV0ZWN0IHdoZW4gdGhlIHBsdWdpbiBkb2VzIG5vdCBzcGVjaWZ5IGFuIGV2
ZW50IG1vZGVsLgotICAgIGV2ZW50TW9kZWwgPSAoTlBFdmVudE1vZGVsKS0xOwotICAgIAotICAg
IE5QRXJyb3IgbnBFcnIgPSBbc2VsZiBfY3JlYXRlUGx1Z2luXTsKLSAgICBpZiAobnBFcnIgIT0g
TlBFUlJfTk9fRVJST1IpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJOUFBfTmV3IGZhaWxlZCB3aXRo
IGVycm9yOiAlZCIsIG5wRXJyKTsKLSAgICAgICAgW3NlbGYgX2Rlc3Ryb3lQbHVnaW5dOwotICAg
ICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgY2xvc2VdOwotICAgICAgICByZXR1cm4gTk87Ci0g
ICAgfQotICAgIAotICAgIGlmIChkcmF3aW5nTW9kZWwgPT0gKE5QRHJhd2luZ01vZGVsKS0xKQot
ICAgICAgICBkcmF3aW5nTW9kZWwgPSBOUERyYXdpbmdNb2RlbENvcmVHcmFwaGljczsKLQotICAg
IGlmIChldmVudE1vZGVsID09IChOUEV2ZW50TW9kZWwpLTEpCi0gICAgICAgIGV2ZW50TW9kZWwg
PSBOUEV2ZW50TW9kZWxDb2NvYTsKLQotICAgIGlmIChkcmF3aW5nTW9kZWwgPT0gTlBEcmF3aW5n
TW9kZWxDb3JlQW5pbWF0aW9uKSB7Ci0gICAgICAgIHZvaWQgKnZhbHVlID0gMDsKLSAgICAgICAg
aWYgKFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPmdldHZhbHVlKHBsdWdpbiwg
TlBQVnBsdWdpbkNvcmVBbmltYXRpb25MYXllciwgJnZhbHVlKSA9PSBOUEVSUl9OT19FUlJPUiAm
JiB2YWx1ZSkgewotCi0gICAgICAgICAgICAvLyBUaGUgcGx1Zy1pbiBnaXZlcyB1cyBhIHJldGFp
bmVkIGxheWVyLgotICAgICAgICAgICAgX3BsdWdpbkxheWVyID0gYWRvcHROUygoQ0FMYXllciAq
KXZhbHVlKTsKLQotICAgICAgICAgICAgQk9PTCBhY2NsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVk
ID0gZmFsc2U7Ci0gICAgICAgICAgICBhY2NsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkID0gW1tb
c2VsZiB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWRd
OwotICAgICAgICAgICAgaWYgKGFjY2xlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQpIHsKLSAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBXZWJI
b3N0ZWROZXRzY2FwZVBsdWdpblZpZXcgYW5kIFdlYk5ldHNjYXBlUGx1Z2luVmlldy4KLSAgICAg
ICAgICAgICAgICAvLyBTaW5jZSB0aGlzIGxheWVyIGlzbid0IGdvaW5nIHRvIGJlIGluc2VydGVk
IGludG8gYSB2aWV3LCB3ZSBuZWVkIHRvIGNyZWF0ZSBhbm90aGVyIGxheWVyIGFuZCBmbGlwIGl0
cyBnZW9tZXRyeQotICAgICAgICAgICAgICAgIC8vIGluIG9yZGVyIHRvIGdldCB0aGUgY29vcmRp
bmF0ZSBzeXN0ZW0gcmlnaHQuCi0gICAgICAgICAgICAgICAgUmV0YWluUHRyPENBTGF5ZXI+IHJl
YWxQbHVnaW5MYXllciA9IFdURk1vdmUoX3BsdWdpbkxheWVyKTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBfcGx1Z2luTGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10g
aW5pdF0pOwotICAgICAgICAgICAgICAgIF9wbHVnaW5MYXllci5nZXQoKS5ib3VuZHMgPSByZWFs
UGx1Z2luTGF5ZXIuZ2V0KCkuYm91bmRzOwotICAgICAgICAgICAgICAgIF9wbHVnaW5MYXllci5n
ZXQoKS5nZW9tZXRyeUZsaXBwZWQgPSBZRVM7Ci0KLSAgICAgICAgICAgICAgICByZWFsUGx1Z2lu
TGF5ZXIuZ2V0KCkuYXV0b3Jlc2l6aW5nTWFzayA9IGtDQUxheWVyV2lkdGhTaXphYmxlIHwga0NB
TGF5ZXJIZWlnaHRTaXphYmxlOwotICAgICAgICAgICAgICAgIFtfcGx1Z2luTGF5ZXIuZ2V0KCkg
YWRkU3VibGF5ZXI6cmVhbFBsdWdpbkxheWVyLmdldCgpXTsKLQotICAgICAgICAgICAgICAgIC8v
IEVhZ2VybHkgZW50ZXIgY29tcG9zaXRpbmcgbW9kZSwgc2luY2Ugd2Uga25vdyB3ZSdsbCBuZWVk
IGl0LiBUaGlzIGF2b2lkcyBmaXJpbmcgaW52YWxpZGF0ZVN0eWxlKCkKLSAgICAgICAgICAgICAg
ICAvLyBmb3IgaWZyYW1lcyB0aGF0IGNvbnRhaW4gY29tcG9zaXRlZCBwbHVnaW5zIGF0IGJhZCB0
aW1lcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDMzCi0gICAg
ICAgICAgICAgICAgY29yZShbc2VsZiB3ZWJGcmFtZV0pLT52aWV3KCktPmVudGVyQ29tcG9zaXRp
bmdNb2RlKCk7Ci0gICAgICAgICAgICAgICAgW3NlbGYgZWxlbWVudF0tPmludmFsaWRhdGVTdHls
ZUFuZExheWVyQ29tcG9zaXRpb24oKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgIFtzZWxmIHNldFdhbnRzTGF5ZXI6WUVTXTsKLQotICAgICAgICAgICAgTE9HKFBsdWdpbnMs
ICIlQCBpcyB1c2luZyBDb3JlIEFuaW1hdGlvbiBkcmF3aW5nIG1vZGVsIHdpdGggbGF5ZXIgJUAi
LCBfcGx1Z2luUGFja2FnZS5nZXQoKSwgX3BsdWdpbkxheWVyLmdldCgpKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEFTU0VSVChfcGx1Z2luTGF5ZXIpOwotICAgIH0KLSAgICAKLSAgICAvLyBDcmVh
dGUgdGhlIGV2ZW50IGhhbmRsZXIKLSAgICBfZXZlbnRIYW5kbGVyID0gV2ViTmV0c2NhcGVQbHVn
aW5FdmVudEhhbmRsZXI6OmNyZWF0ZShzZWxmKTsKLQotICAgIHJldHVybiBZRVM7Ci19Ci0KLS8v
IEZJWE1FOiBUaGlzIG1ldGhvZCBpcyBhbiBpZGVhbCBjYW5kaWRhdGUgdG8gbW92ZSB1cCB0byB0
aGUgYmFzZSBjbGFzcwotLSAoQ0FMYXllciAqKXBsdWdpbkxheWVyCi17Ci0gICAgcmV0dXJuIF9w
bHVnaW5MYXllci5nZXQoKTsKLX0KLQotLSAodm9pZClzZXRMYXllcjooQ0FMYXllciAqKW5ld0xh
eWVyCi17Ci0gICAgW3N1cGVyIHNldExheWVyOm5ld0xheWVyXTsKLQotICAgIGlmIChuZXdMYXll
ciAmJiBfcGx1Z2luTGF5ZXIpIHsKLSAgICAgICAgX3BsdWdpbkxheWVyLmdldCgpLmZyYW1lID0g
W25ld0xheWVyIGZyYW1lXTsKLSAgICAgICAgX3BsdWdpbkxheWVyLmdldCgpLmF1dG9yZXNpemlu
Z01hc2sgPSBrQ0FMYXllcldpZHRoU2l6YWJsZSB8IGtDQUxheWVySGVpZ2h0U2l6YWJsZTsKLSAg
ICAgICAgW25ld0xheWVyIGFkZFN1YmxheWVyOl9wbHVnaW5MYXllci5nZXQoKV07Ci0gICAgfQot
fQotCi0tICh2b2lkKWxvYWRTdHJlYW0KLXsKLSAgICBpZiAoW3NlbGYgX3Nob3VsZENhbmNlbFNy
Y1N0cmVhbV0pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoX2xvYWRNYW51YWxseSkg
ewotICAgICAgICBbc2VsZiBfcmVkZWxpdmVyU3RyZWFtXTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICAKLSAgICAvLyBJZiB0aGUgT0JKRUNUL0VNQkVEIHRhZyBoYXMgbm8gU1JDLCB0aGUg
VVJMIGlzIHBhc3NlZCB0byB1cyBhcyAiIi4KLSAgICAvLyBDaGVjayBmb3IgdGhpcyBhbmQgZG9u
J3Qgc3RhcnQgYSBsb2FkIGluIHRoaXMgY2FzZS4KLSAgICBpZiAoX3NvdXJjZVVSTCAmJiAhW19z
b3VyY2VVUkwuZ2V0KCkgX3dlYl9pc0VtcHR5XSkgewotICAgICAgICBOU011dGFibGVVUkxSZXF1
ZXN0ICpyZXF1ZXN0ID0gW05TTXV0YWJsZVVSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6X3NvdXJj
ZVVSTC5nZXQoKV07Ci0gICAgICAgIFtyZXF1ZXN0IF93ZWJfc2V0SFRUUFJlZmVycmVyOmNvcmUo
W3NlbGYgd2ViRnJhbWVdKS0+bG9hZGVyKCkub3V0Z29pbmdSZWZlcnJlcigpXTsKLSAgICAgICAg
W3NlbGYgbG9hZFJlcXVlc3Q6cmVxdWVzdCBpblRhcmdldDpuaWwgd2l0aE5vdGlmeURhdGE6bmls
IHNlbmROb3RpZmljYXRpb246Tk9dOwotICAgIH0gCi19Ci0KLS0gKEJPT0wpc2hvdWxkU3RvcAot
ewotICAgIC8vIElmIHdlJ3JlIGFscmVhZHkgY2FsbGluZyBhIHBsdWctaW4gZnVuY3Rpb24sIGRv
IG5vdCBjYWxsIE5QUF9EZXN0cm95KCkuICBUaGUgcGx1Zy1pbiBmdW5jdGlvbiB3ZSBhcmUgY2Fs
bGluZwotICAgIC8vIG1heSBhc3N1bWUgdGhhdCBpdHMgaW5zdGFuY2UtPnBkYXRhLCBvciBvdGhl
ciBtZW1vcnkgZnJlZWQgYnkgTlBQX0Rlc3Ryb3koKSwgaXMgdmFsaWQgYW5kIHVuY2hhbmdlZCB1
bnRpbCBzYWlkCi0gICAgLy8gcGx1Z2luLWZ1bmN0aW9uIHJldHVybnMuCi0gICAgLy8gU2VlIDxy
ZGFyOi8vcHJvYmxlbS80NDgwNzM3Pi4KLSAgICBpZiAocGx1Z2luRnVuY3Rpb25DYWxsRGVwdGgg
PiAwKSB7Ci0gICAgICAgIHNob3VsZFN0b3BTb29uID0gWUVTOwotICAgICAgICByZXR1cm4gTk87
Ci0gICAgfQotCi0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAodm9pZClkZXN0cm95UGx1Z2luCi17
Ci0gICAgLy8gVG8gc3RvcCBhY3RpdmUgc3RyZWFtcyBpdCdzIG5lY2Vzc2FyeSB0byBpbnZva2Ug
c3RvcCgpIG9uIGEgY29weSAKLSAgICAvLyBvZiBzdHJlYW1zLiBUaGlzIGlzIGJlY2F1c2UgY2Fs
bGluZyBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6c3RvcCgpIGFsc28gaGFzIHRoZSBzaWRlIGVm
ZmVjdAotICAgIC8vIG9mIHJlbW92aW5nIGEgc3RyZWFtIGZyb20gdGhpcyBoYXNoIHNldC4KLSAg
ICBmb3IgKGF1dG8mIHN0cmVhbSA6IGNvcHlUb1ZlY3RvcihzdHJlYW1zKSkKLSAgICAgICAgc3Ry
ZWFtLT5zdG9wKCk7Ci0KLSAgICBmb3IgKFdlYkZyYW1lICpmcmFtZSBpbiBbX3BlbmRpbmdGcmFt
ZUxvYWRzIGtleUVudW1lcmF0b3JdKQotICAgICAgICBbZnJhbWUgX3NldEludGVybmFsTG9hZERl
bGVnYXRlOm5pbF07Ci0gICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3Rz
V2l0aFRhcmdldDpzZWxmXTsKLQotICAgIC8vIFNldHRpbmcgdGhlIHdpbmRvdyB0eXBlIHRvIDAg
ZW5zdXJlcyB0aGF0IE5QUF9TZXRXaW5kb3cgd2lsbCBiZSBjYWxsZWQgaWYgdGhlIHBsdWctaW4g
aXMgcmVzdGFydGVkLgotICAgIGxhc3RTZXRXaW5kb3cudHlwZSA9IChOUFdpbmRvd1R5cGUpMDsK
LSAgICAKLSAgICBfcGx1Z2luTGF5ZXIgPSBuaWw7Ci0gICAgCi0gICAgW3NlbGYgX2Rlc3Ryb3lQ
bHVnaW5dOwotICAgIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBjbG9zZV07Ci0gICAgCi0gICAgX2V2
ZW50SGFuZGxlciA9IG51bGxwdHI7Ci19Ci0KLS0gKE5QRXZlbnRNb2RlbClldmVudE1vZGVsCi17
Ci0gICAgcmV0dXJuIGV2ZW50TW9kZWw7Ci19Ci0KLS0gKE5QUClwbHVnaW4KLXsKLSAgICByZXR1
cm4gcGx1Z2luOwotfQotCi0tICh2b2lkKXNldEF0dHJpYnV0ZUtleXM6KE5TQXJyYXkgKilrZXlz
IGFuZFZhbHVlczooTlNBcnJheSAqKXZhbHVlcwotewotICAgIEFTU0VSVChba2V5cyBjb3VudF0g
PT0gW3ZhbHVlcyBjb3VudF0pOwotICAgIAotICAgIC8vIENvbnZlcnQgdGhlIGF0dHJpYnV0ZXMg
dG8gMiBDIHN0cmluZyBhcnJheXMuCi0gICAgLy8gVGhlc2UgYXJyYXlzIGFyZSBwYXNzZWQgdG8g
TlBQX05ldywgYnV0IHRoZSBzdHJpbmdzIG5lZWQgdG8gYmUKLSAgICAvLyBtb2RpZmlhYmxlIGFu
ZCBsaXZlIHRoZSBlbnRpcmUgbGlmZSBvZiB0aGUgcGx1Z2luLgotCi0gICAgLy8gVGhlIEphdmEg
cGx1Zy1pbiByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgdGhlIGJhc2UgVVJMCi0g
ICAgaWYgKFtfTUlNRVR5cGUuZ2V0KCkgaXNFcXVhbFRvU3RyaW5nOkAiYXBwbGljYXRpb24veC1q
YXZhLWFwcGxldCJdKSB7Ci0gICAgICAgIGNBdHRyaWJ1dGVzID0gKGNoYXIgKiopbWFsbG9jKChb
a2V5cyBjb3VudF0gKyAxKSAqIHNpemVvZihjaGFyICopKTsKLSAgICAgICAgY1ZhbHVlcyA9IChj
aGFyICoqKW1hbGxvYygoW3ZhbHVlcyBjb3VudF0gKyAxKSAqIHNpemVvZihjaGFyICopKTsKLSAg
ICAgICAgY0F0dHJpYnV0ZXNbMF0gPSBzdHJkdXAoIkRPQ0JBU0UiKTsKLSAgICAgICAgY1ZhbHVl
c1swXSA9IHN0cmR1cChbX2Jhc2VVUkwuZ2V0KCkgX3dlYl9VUkxDU3RyaW5nXSk7Ci0gICAgICAg
IGFyZ3NDb3VudCsrOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNBdHRyaWJ1dGVzID0gKGNoYXIg
KiopbWFsbG9jKFtrZXlzIGNvdW50XSAqIHNpemVvZihjaGFyICopKTsKLSAgICAgICAgY1ZhbHVl
cyA9IChjaGFyICoqKW1hbGxvYyhbdmFsdWVzIGNvdW50XSAqIHNpemVvZihjaGFyICopKTsKLSAg
ICB9Ci0KLSAgICBCT09MIGlzV01QID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIGJ1bmRsZUlkZW50
aWZpZXJdID09ICJjb20ubWljcm9zb2Z0LldNUC5kZWZhdWx0cGx1Z2luIjsKLSAgICAKLSAgICB1
bnNpZ25lZCBpOwotICAgIHVuc2lnbmVkIGNvdW50ID0gW2tleXMgY291bnRdOwotICAgIGZvciAo
aSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgIE5TU3RyaW5nICprZXkgPSBba2V5cyBv
YmplY3RBdEluZGV4OmldOwotICAgICAgICBOU1N0cmluZyAqdmFsdWUgPSBbdmFsdWVzIG9iamVj
dEF0SW5kZXg6aV07Ci0gICAgICAgIGlmIChba2V5IF93ZWJraXRfaXNDYXNlSW5zZW5zaXRpdmVF
cXVhbFRvU3RyaW5nOkAiaGVpZ2h0Il0pIHsKLSAgICAgICAgICAgIHNwZWNpZmllZEhlaWdodCA9
IFt2YWx1ZSBpbnRWYWx1ZV07Ci0gICAgICAgIH0gZWxzZSBpZiAoW2tleSBfd2Via2l0X2lzQ2Fz
ZUluc2Vuc2l0aXZlRXF1YWxUb1N0cmluZzpAIndpZHRoIl0pIHsKLSAgICAgICAgICAgIHNwZWNp
ZmllZFdpZHRoID0gW3ZhbHVlIGludFZhbHVlXTsKLSAgICAgICAgfQotICAgICAgICAvLyBBdm9p
ZCBXaW5kb3cgTWVkaWEgUGxheWVyIGNyYXNoIHdoZW4gdGhlc2UgYXR0cmlidXRlcyBhcmUgcHJl
c2VudC4KLSAgICAgICAgaWYgKGlzV01QICYmIChba2V5IF93ZWJraXRfaXNDYXNlSW5zZW5zaXRp
dmVFcXVhbFRvU3RyaW5nOkAiU0FNSVN0eWxlIl0gfHwgW2tleSBfd2Via2l0X2lzQ2FzZUluc2Vu
c2l0aXZlRXF1YWxUb1N0cmluZzpAIlNBTUlMYW5nIl0pKSB7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotICAgICAgICBjQXR0cmlidXRlc1thcmdzQ291bnRdID0gc3RyZHVwKFtr
ZXkgVVRGOFN0cmluZ10pOwotICAgICAgICBjVmFsdWVzW2FyZ3NDb3VudF0gPSBzdHJkdXAoW3Zh
bHVlIFVURjhTdHJpbmddKTsKLSAgICAgICAgTE9HKFBsdWdpbnMsICIlQCA9ICVAIiwga2V5LCB2
YWx1ZSk7Ci0gICAgICAgIGFyZ3NDb3VudCsrOwotICAgIH0KLX0KLQotLy8gTUFSSzogTlNWSUVX
Ci0KLS0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZQotICAgICAgcGx1Z2luUGFja2Fn
ZTooV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlICopcGx1Z2luUGFja2FnZQotICAgICAgICAgICAg
ICAgIFVSTDooTlNVUkwgKilVUkwKLSAgICAgICAgICAgIGJhc2VVUkw6KE5TVVJMICopYmFzZVVS
TAotICAgICAgICAgICBNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FCi0gICAgICBhdHRyaWJ1dGVL
ZXlzOihOU0FycmF5ICopa2V5cwotICAgIGF0dHJpYnV0ZVZhbHVlczooTlNBcnJheSAqKXZhbHVl
cwotICAgICAgIGxvYWRNYW51YWxseTooQk9PTClsb2FkTWFudWFsbHkKLSAgICAgICAgICAgIGVs
ZW1lbnQ6KFJlZlB0cjxXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudD4mJillbGVtZW50Ci17Ci0g
ICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEZyYW1lOmZyYW1lIHBsdWdpblBhY2thZ2U6cGx1Z2lu
UGFja2FnZSBVUkw6VVJMIGJhc2VVUkw6YmFzZVVSTCBNSU1FVHlwZTpNSU1FIGF0dHJpYnV0ZUtl
eXM6a2V5cyBhdHRyaWJ1dGVWYWx1ZXM6dmFsdWVzIGxvYWRNYW51YWxseTpsb2FkTWFudWFsbHkg
ZWxlbWVudDpXVEZNb3ZlKGVsZW1lbnQpXTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICBfcGVuZGluZ0ZyYW1lTG9hZHMgPSBhZG9wdE5TKFtbTlNNYXBUYWJsZSBh
bGxvY10gaW5pdFdpdGhLZXlPcHRpb25zOk5TUG9pbnRlckZ1bmN0aW9uc1N0cm9uZ01lbW9yeSB2
YWx1ZU9wdGlvbnM6TlNQb2ludGVyRnVuY3Rpb25zU3Ryb25nTWVtb3J5IGNhcGFjaXR5OjBdKTsK
LQotICAgIC8vIGxvYWQgdGhlIHBsdWctaW4gaWYgaXQgaXMgbm90IGFscmVhZHkgbG9hZGVkCi0g
ICAgaWYgKCFbcGx1Z2luUGFja2FnZSBsb2FkXSkgewotICAgICAgICBbc2VsZiByZWxlYXNlXTsK
LSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
aWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAodm9pZClmaW5pCi17Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGFyZ3NDb3VudDsgaSsrKSB7Ci0gICAgICAgIGZyZWUoY0F0dHJpYnV0
ZXNbaV0pOwotICAgICAgICBmcmVlKGNWYWx1ZXNbaV0pOwotICAgIH0KLSAgICBmcmVlKGNBdHRy
aWJ1dGVzKTsKLSAgICBmcmVlKGNWYWx1ZXMpOwotICAgIAotICAgIEFTU0VSVCghX2V2ZW50SGFu
ZGxlcik7Ci19Ci0KLS0gKHZvaWQpZGlzY29ubmVjdFN0cmVhbTooV2ViTmV0c2NhcGVQbHVnaW5T
dHJlYW0qKXN0cmVhbQotewotICAgIHN0cmVhbXMucmVtb3ZlKHN0cmVhbSk7Ci19Ci0KLS0gKHZv
aWQpZGVhbGxvYwotewotICAgIEFTU0VSVCghX2lzU3RhcnRlZCk7Ci0gICAgQVNTRVJUKCFwbHVn
aW4pOwotCi0gICAgW3NlbGYgZmluaV07Ci0KLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0g
KHZvaWQpZHJhd1JlY3Q6KE5TUmVjdClyZWN0Ci17Ci0gICAgaWYgKF9jYWNoZWRTbmFwc2hvdCkg
ewotICAgICAgICBOU1JlY3Qgc291cmNlUmVjdCA9IHsgTlNaZXJvUG9pbnQsIFtfY2FjaGVkU25h
cHNob3QuZ2V0KCkgc2l6ZV0gfTsKLSAgICAgICAgW19jYWNoZWRTbmFwc2hvdC5nZXQoKSBkcmF3
SW5SZWN0OltzZWxmIGJvdW5kc10gZnJvbVJlY3Q6c291cmNlUmVjdCBvcGVyYXRpb246TlNDb21w
b3NpdGVTb3VyY2VPdmVyIGZyYWN0aW9uOjFdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IAotICAgIGlmIChkcmF3aW5nTW9kZWwgPT0gTlBEcmF3aW5nTW9kZWxDb3JlQW5pbWF0aW9uICYm
ICghX3NuYXBzaG90dGluZyB8fCAhW3NlbGYgc3VwcG9ydHNTbmFwc2hvdHRpbmddKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKCFfaXNTdGFydGVkKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgaWYgKFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dERyYXdpbmdUb1NjcmVl
bl0gfHwgX2lzRmxhc2gpCi0gICAgICAgIFtzZWxmIHNlbmREcmF3UmVjdEV2ZW50OnJlY3RdOwot
fQotCi0tIChOUE9iamVjdCAqKWNyZWF0ZVBsdWdpblNjcmlwdGFibGVPYmplY3QKLXsKLSAgICBp
ZiAoIVtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPmdldHZhbHVlIHx8ICFfaXNT
dGFydGVkKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgCi0gICAgTlBPYmplY3QgKnZh
bHVlID0gTlVMTDsKLSAgICBOUEVycm9yIGVycm9yOwotICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0lu
RnVuY3Rpb25dOwotICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoY29tbW9uVk0oKSk7Ci0gICAgICAgIGVycm9yID0gW19wbHVnaW5QYWNrYWdlLmdl
dCgpIHBsdWdpbkZ1bmNzXS0+Z2V0dmFsdWUocGx1Z2luLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5Q
T2JqZWN0LCAmdmFsdWUpOwotICAgIH0KLSAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25d
OwotICAgIGlmIChlcnJvciAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgcmV0dXJuIE5VTEw7
Ci0gICAgCi0gICAgcmV0dXJuIHZhbHVlOwotfQotCi0tIChCT09MKWdldEZvcm1WYWx1ZTooTlNT
dHJpbmcgKiopdmFsdWUKLXsKLSAgICBpZiAoIVtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5G
dW5jc10tPmdldHZhbHVlIHx8ICFfaXNTdGFydGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgLy8gUGx1Z2lucyB3aWxsIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGJ1ZmZlciBieSB1c2lu
ZyBOUE5fTWVtQWxsb2MoKS4KLSAgICBjaGFyKiBidWZmZXIgPSBOVUxMOwotICAgIE5QRXJyb3Ig
ZXJyb3I7Ci0gICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07Ci0gICAgewotICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKLSAg
ICAgICAgZXJyb3IgPSBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5nZXR2YWx1
ZShwbHVnaW4sIE5QUFZmb3JtVmFsdWUsICZidWZmZXIpOwotICAgIH0KLSAgICBbc2VsZiBkaWRD
YWxsUGx1Z0luRnVuY3Rpb25dOwotICAgIGlmIChlcnJvciAhPSBOUEVSUl9OT19FUlJPUiB8fCAh
YnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgKnZhbHVlID0gW1tOU1N0cmluZyBh
bGxvY10gaW5pdFdpdGhVVEY4U3RyaW5nOmJ1ZmZlcl07Ci0gICAgW19wbHVnaW5QYWNrYWdlLmdl
dCgpIGJyb3dzZXJGdW5jc10tPm1lbWZyZWUoYnVmZmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotLSAodm9pZCl3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uCi17Ci0gICAgQVNTRVJUKHBsdWdpbik7
Ci0KLSAgICAvLyBDb3VsZCB0cnkgdG8gcHJldmVudCBpbmZpbml0ZSByZWN1cnNpb24gaGVyZSwg
YnV0IGl0J3MgcHJvYmFibHkgbm90IHdvcnRoIHRoZSBlZmZvcnQuCi0gICAgcGx1Z2luRnVuY3Rp
b25DYWxsRGVwdGgrKzsKLX0KLQotLSAodm9pZClkaWRDYWxsUGx1Z0luRnVuY3Rpb24KLXsKLSAg
ICBBU1NFUlQocGx1Z2luRnVuY3Rpb25DYWxsRGVwdGggPiAwKTsKLSAgICBwbHVnaW5GdW5jdGlv
bkNhbGxEZXB0aC0tOwotICAgIAotICAgIC8vIElmIC1zdG9wIHdhcyBjYWxsZWQgd2hpbGUgd2Ug
d2VyZSBjYWxsaW5nIGludG8gYSBwbHVnLWluIGZ1bmN0aW9uLCBhbmQgd2UncmUgbm8gbG9uZ2Vy
Ci0gICAgLy8gaW5zaWRlIGEgcGx1Zy1pbiBmdW5jdGlvbiwgc3RvcCBub3cuCi0gICAgaWYgKHBs
dWdpbkZ1bmN0aW9uQ2FsbERlcHRoID09IDAgJiYgc2hvdWxkU3RvcFNvb24pIHsKLSAgICAgICAg
c2hvdWxkU3RvcFNvb24gPSBOTzsKLSAgICAgICAgW3NlbGYgc3RvcF07Ci0gICAgfQotfQotCi0t
KHZvaWQpcGx1Z2luVmlldzooTlNWaWV3ICopcGx1Z2luVmlldyByZWNlaXZlZFJlc3BvbnNlOihO
U1VSTFJlc3BvbnNlICopcmVzcG9uc2UKLXsKLSAgICBBU1NFUlQoX2xvYWRNYW51YWxseSk7Ci0g
ICAgQVNTRVJUKCFfbWFudWFsU3RyZWFtKTsKLQotICAgIF9tYW51YWxTdHJlYW0gPSBXZWJOZXRz
Y2FwZVBsdWdpblN0cmVhbTo6Y3JlYXRlKCZjb3JlKFtzZWxmIHdlYkZyYW1lXSktPmxvYWRlcigp
KTsKLX0KLQotLSAodm9pZClwbHVnaW5WaWV3OihOU1ZpZXcgKilwbHVnaW5WaWV3IHJlY2VpdmVk
RGF0YTooTlNEYXRhICopZGF0YQotewotICAgIEFTU0VSVChfbG9hZE1hbnVhbGx5KTsKLSAgICBB
U1NFUlQoX21hbnVhbFN0cmVhbSk7Ci0gICAgCi0gICAgX2RhdGFMZW5ndGhSZWNlaXZlZCArPSBb
ZGF0YSBsZW5ndGhdOwotICAgIAotICAgIGlmICghX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKCFfbWFudWFsU3RyZWFtLT5wbHVnaW4oKSkgewotICAgICAgICAvLyBDaGVj
ayBpZiB0aGUgbG9hZCBzaG91bGQgYmUgY2FuY2VsbGVkCi0gICAgICAgIGlmIChbc2VsZiBfc2hv
dWxkQ2FuY2VsU3JjU3RyZWFtXSkgewotICAgICAgICAgICAgTlNVUkxSZXNwb25zZSAqcmVzcG9u
c2UgPSBbW3NlbGYgZGF0YVNvdXJjZV0gcmVzcG9uc2VdOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBhdXRvIGVycm9yID0gYWRvcHROUyhbW05TRXJyb3IgYWxsb2NdIF9pbml0V2l0aFBsdWdp
bkVycm9yQ29kZTpXZWJLaXRFcnJvclBsdWdJbldpbGxIYW5kbGVMb2FkCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50VVJM
OltyZXNwb25zZSBVUkxdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwbHVnaW5QYWdlVVJMOm5pbAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luTmFtZTpuaWwgLy8g
RklYTUU6IEdldCB0aGlzIGZyb20gc29tZXdoZXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOltyZXNwb25zZSBN
SU1FVHlwZV1dKTsKLSAgICAgICAgICAgIFtbc2VsZiBkYXRhU291cmNlXSBfZG9jdW1lbnRMb2Fk
ZXJdLT5jYW5jZWxNYWluUmVzb3VyY2VMb2FkKGVycm9yLmdldCgpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgX21hbnVhbFN0cmVhbS0+c2V0UmVx
dWVzdFVSTChbW1tzZWxmIGRhdGFTb3VyY2VdIHJlcXVlc3RdIFVSTF0pOwotICAgICAgICBfbWFu
dWFsU3RyZWFtLT5zZXRQbHVnaW4oW3NlbGYgcGx1Z2luXSk7Ci0gICAgICAgIEFTU0VSVChfbWFu
dWFsU3RyZWFtLT5wbHVnaW4oKSk7Ci0gICAgICAgIAotICAgICAgICBfbWFudWFsU3RyZWFtLT5z
dGFydFN0cmVhbVdpdGhSZXNwb25zZShbW3NlbGYgZGF0YVNvdXJjZV0gcmVzcG9uc2VdKTsKLSAg
ICB9Ci0KLSAgICBpZiAoX21hbnVhbFN0cmVhbS0+cGx1Z2luKCkpCi0gICAgICAgIF9tYW51YWxT
dHJlYW0tPmRpZFJlY2VpdmVEYXRhKDAsIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihbZGF0
YSBieXRlc10pLCBbZGF0YSBsZW5ndGhdKTsKLX0KLQotLSAodm9pZClwbHVnaW5WaWV3OihOU1Zp
ZXcgKilwbHVnaW5WaWV3IHJlY2VpdmVkRXJyb3I6KE5TRXJyb3IgKillcnJvcgotewotICAgIEFT
U0VSVChfbG9hZE1hbnVhbGx5KTsKLQotICAgIF9lcnJvciA9IGVycm9yOwotICAgIAotICAgIGlm
ICghX2lzU3RhcnRlZCkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgX21hbnVhbFN0
cmVhbS0+ZGVzdHJveVN0cmVhbVdpdGhFcnJvcihlcnJvcik7Ci19Ci0KLS0gKHZvaWQpcGx1Z2lu
Vmlld0ZpbmlzaGVkTG9hZGluZzooTlNWaWV3ICopcGx1Z2luVmlldyAKLXsKLSAgICBBU1NFUlQo
X2xvYWRNYW51YWxseSk7Ci0gICAgQVNTRVJUKF9tYW51YWxTdHJlYW0pOwotICAgIAotICAgIGlm
IChfaXNTdGFydGVkKQotICAgICAgICBfbWFudWFsU3RyZWFtLT5kaWRGaW5pc2hMb2FkaW5nKDAp
OwotfQotCi0tIChOU1RleHRJbnB1dENvbnRleHQgKilpbnB1dENvbnRleHQKLXsKLSAgICByZXR1
cm4gbmlsOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJOZXRzY2FwZVBsdWdpblZp
ZXcgKFdlYk5QUENhbGxiYWNrcykKLQotLSAodm9pZClldmFsdWF0ZUphdmFTY3JpcHRQbHVnaW5S
ZXF1ZXN0OihXZWJQbHVnaW5SZXF1ZXN0ICopSlNQbHVnaW5SZXF1ZXN0Ci17Ci0gICAgLy8gRklY
TUU6IElzIHRoaXMgaXNTdGFydGVkIGNoZWNrIG5lZWRlZCBoZXJlPyBldmFsdWF0ZUphdmFTY3Jp
cHRQbHVnaW5SZXF1ZXN0IHNob3VsZCBub3QgYmUgY2FsbGVkCi0gICAgLy8gaWYgd2UgYXJlIHN0
b3BwZWQgc2luY2UgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGFmdGVyIGEgZGVsYXkgYW5kIHdlIGNh
bGwgCi0gICAgLy8gY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0IGluc2lk
ZSBvZiBzdG9wLgotICAgIGlmICghX2lzU3RhcnRlZCkgewotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIAotICAgIE5TVVJMICpVUkwgPSBbW0pTUGx1Z2luUmVxdWVzdCByZXF1ZXN0XSBVUkxd
OwotICAgIE5TU3RyaW5nICpKU1N0cmluZyA9IFtVUkwgX3dlYmtpdF9zY3JpcHRJZkphdmFTY3Jp
cHRVUkxdOwotICAgIEFTU0VSVChKU1N0cmluZyk7Ci0gICAgCi0gICAgTlNTdHJpbmcgKnJlc3Vs
dCA9IFtbc2VsZiB3ZWJGcmFtZV0gX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3Ry
aW5nOkpTU3RyaW5nIGZvcmNlVXNlckdlc3R1cmU6W0pTUGx1Z2luUmVxdWVzdCBpc0N1cnJlbnRF
dmVudFVzZXJHZXN0dXJlXV07Ci0gICAgCi0gICAgLy8gRG9uJ3QgY29udGludWUgaWYgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmcgY2F1c2VkIHRoZSBwbHVnLWluIHRvIHN0
b3AuCi0gICAgaWYgKCFfaXNTdGFydGVkKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
ICAgIAotICAgIGlmIChbSlNQbHVnaW5SZXF1ZXN0IGZyYW1lTmFtZV0gIT0gbmlsKSB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBJZiB0aGUgcmVzdWx0IGlzIGEgc3RyaW5nLCB3ZSBwcm9iYWJseSB3YW50
IHRvIHB1dCB0aGF0IHN0cmluZyBpbnRvIHRoZSBmcmFtZS4KLSAgICAgICAgaWYgKFtKU1BsdWdp
blJlcXVlc3Qgc2VuZE5vdGlmaWNhdGlvbl0pIHsKLSAgICAgICAgICAgIFtzZWxmIHdpbGxDYWxs
UGx1Z0luRnVuY3Rpb25dOwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwotICAgICAgICAgICAg
ICAgIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPnVybG5vdGlmeShwbHVnaW4s
IFtVUkwgX3dlYl9VUkxDU3RyaW5nXSwgTlBSRVNfRE9ORSwgW0pTUGx1Z2luUmVxdWVzdCBub3Rp
ZnlEYXRhXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBbc2VsZiBkaWRDYWxsUGx1Z0lu
RnVuY3Rpb25dOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChbcmVzdWx0IGxlbmd0aF0gPiAw
KSB7Ci0gICAgICAgIC8vIERvbid0IGNhbGwgTlBQX05ld1N0cmVhbSBhbmQgb3RoZXIgc3RyZWFt
IG1ldGhvZHMgaWYgdGhlcmUgaXMgbm8gSlMgcmVzdWx0IHRvIGRlbGl2ZXIuIFRoaXMgaXMgd2hh
dCBNb3ppbGxhIGRvZXMuCi0gICAgICAgIE5TRGF0YSAqSlNEYXRhID0gW3Jlc3VsdCBkYXRhVXNp
bmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107Ci0gICAgICAgIAotICAgICAgICBhdXRv
IHN0cmVhbSA9IFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpjcmVhdGUoW05TVVJMUmVxdWVzdCBy
ZXF1ZXN0V2l0aFVSTDpVUkxdLCBwbHVnaW4sIFtKU1BsdWdpblJlcXVlc3Qgc2VuZE5vdGlmaWNh
dGlvbl0sIFtKU1BsdWdpblJlcXVlc3Qgbm90aWZ5RGF0YV0pOwotICAgICAgICAKLSAgICAgICAg
UmV0YWluUHRyPE5TVVJMUmVzcG9uc2U+IHJlc3BvbnNlID0gYWRvcHROUyhbW05TVVJMUmVzcG9u
c2UgYWxsb2NdIGluaXRXaXRoVVJMOlVSTCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6
QCJ0ZXh0L3BsYWluIiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZENvbnRlbnRMZW5ndGg6W0pTRGF0YSBsZW5n
dGhdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0pOwotICAgICAgICAKLSAgICAg
ICAgc3RyZWFtLT5zdGFydFN0cmVhbVdpdGhSZXNwb25zZShyZXNwb25zZS5nZXQoKSk7Ci0gICAg
ICAgIHN0cmVhbS0+ZGlkUmVjZWl2ZURhdGEoMCwgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+
KFtKU0RhdGEgYnl0ZXNdKSwgW0pTRGF0YSBsZW5ndGhdKTsKLSAgICAgICAgc3RyZWFtLT5kaWRG
aW5pc2hMb2FkaW5nKDApOwotICAgIH0KLX0KLQotLSAodm9pZCl3ZWJGcmFtZTooV2ViRnJhbWUg
Kil3ZWJGcmFtZSBkaWRGaW5pc2hMb2FkV2l0aFJlYXNvbjooTlBSZWFzb24pcmVhc29uCi17Ci0g
ICAgQVNTRVJUKF9pc1N0YXJ0ZWQpOwotICAgIAotICAgIFdlYlBsdWdpblJlcXVlc3QgKnBsdWdp
blJlcXVlc3QgPSBbX3BlbmRpbmdGcmFtZUxvYWRzIG9iamVjdEZvcktleTp3ZWJGcmFtZV07Ci0g
ICAgQVNTRVJUKHBsdWdpblJlcXVlc3QgIT0gbmlsKTsKLSAgICBBU1NFUlQoW3BsdWdpblJlcXVl
c3Qgc2VuZE5vdGlmaWNhdGlvbl0pOwotICAgICAgICAKLSAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJ
bkZ1bmN0aW9uXTsKLSAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKGNvbW1vblZNKCkpOwotICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1
Z2luRnVuY3NdLT51cmxub3RpZnkocGx1Z2luLCBbW1twbHVnaW5SZXF1ZXN0IHJlcXVlc3RdIFVS
TF0gX3dlYl9VUkxDU3RyaW5nXSwgcmVhc29uLCBbcGx1Z2luUmVxdWVzdCBub3RpZnlEYXRhXSk7
Ci0gICAgfQotICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07Ci0gICAgCi0gICAgW19w
ZW5kaW5nRnJhbWVMb2FkcyByZW1vdmVPYmplY3RGb3JLZXk6d2ViRnJhbWVdOwotICAgIFt3ZWJG
cmFtZSBfc2V0SW50ZXJuYWxMb2FkRGVsZWdhdGU6bmlsXTsKLX0KLQotLSAodm9pZCl3ZWJGcmFt
ZTooV2ViRnJhbWUgKil3ZWJGcmFtZSBkaWRGaW5pc2hMb2FkV2l0aEVycm9yOihOU0Vycm9yICop
ZXJyb3IKLXsKLSAgICBOUFJlYXNvbiByZWFzb24gPSBOUFJFU19ET05FOwotICAgIGlmIChlcnJv
ciAhPSBuaWwpCi0gICAgICAgIHJlYXNvbiA9IFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpyZWFz
b25Gb3JFcnJvcihlcnJvcik7Ci0gICAgW3NlbGYgd2ViRnJhbWU6d2ViRnJhbWUgZGlkRmluaXNo
TG9hZFdpdGhSZWFzb246cmVhc29uXTsKLX0KLQotLSAodm9pZClsb2FkUGx1Z2luUmVxdWVzdDoo
V2ViUGx1Z2luUmVxdWVzdCAqKXBsdWdpblJlcXVlc3QKLXsKLSAgICBOU1VSTFJlcXVlc3QgKnJl
cXVlc3QgPSBbcGx1Z2luUmVxdWVzdCByZXF1ZXN0XTsKLSAgICBOU1N0cmluZyAqZnJhbWVOYW1l
ID0gW3BsdWdpblJlcXVlc3QgZnJhbWVOYW1lXTsKLSAgICBXZWJGcmFtZSAqZnJhbWUgPSBuaWw7
Ci0gICAgCi0gICAgTlNVUkwgKlVSTCA9IFtyZXF1ZXN0IFVSTF07Ci0gICAgTlNTdHJpbmcgKkpT
U3RyaW5nID0gW1VSTCBfd2Via2l0X3NjcmlwdElmSmF2YVNjcmlwdFVSTF07Ci0gICAgCi0gICAg
QVNTRVJUKGZyYW1lTmFtZSB8fCBKU1N0cmluZyk7Ci0gICAgCi0gICAgaWYgKGZyYW1lTmFtZSkg
ewotICAgICAgICAvLyBGSVhNRSAtIG5lZWQgdG8gZ2V0IHJpZCBvZiB0aGlzIHdpbmRvdyBjcmVh
dGlvbiB3aGljaAotICAgICAgICAvLyBieXBhc3NlcyBub3JtYWwgdGFyZ2V0ZWQgbGluayBoYW5k
bGluZwotICAgICAgICBmcmFtZSA9IGtpdChjb3JlKFtzZWxmIHdlYkZyYW1lXSktPmxvYWRlcigp
LmZpbmRGcmFtZUZvck5hdmlnYXRpb24oZnJhbWVOYW1lKSk7Ci0gICAgICAgIGlmIChmcmFtZSA9
PSBuaWwpIHsKLSAgICAgICAgICAgIFdlYlZpZXcgKmN1cnJlbnRXZWJWaWV3ID0gW3NlbGYgd2Vi
Vmlld107Ci0gICAgICAgICAgICBhdXRvIGZlYXR1cmVzID0gYWRvcHROUyhbW05TRGljdGlvbmFy
eSBhbGxvY10gaW5pdF0pOwotICAgICAgICAgICAgV2ViVmlldyAqbmV3V2ViVmlldyA9IFtbY3Vy
cmVudFdlYlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6Y3VycmVudFdlYlZpZXcK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3JlYXRlV2ViVmlld1dpdGhSZXF1ZXN0Om5pbAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93RmVhdHVyZXM6ZmVh
dHVyZXMuZ2V0KCldOwotCi0gICAgICAgICAgICBpZiAoIW5ld1dlYlZpZXcpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoW3BsdWdpblJlcXVlc3Qgc2VuZE5vdGlmaWNhdGlvbl0pIHsKLSAgICAgICAg
ICAgICAgICAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07Ci0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgW19w
bHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+dXJsbm90aWZ5KHBsdWdpbiwgW1tbcGx1
Z2luUmVxdWVzdCByZXF1ZXN0XSBVUkxdIF93ZWJfVVJMQ1N0cmluZ10sIE5QRVJSX0dFTkVSSUNf
RVJST1IsIFtwbHVnaW5SZXF1ZXN0IG5vdGlmeURhdGFdKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGZyYW1lID0gW25ld1dlYlZpZXcgbWFpbkZyYW1lXTsK
LSAgICAgICAgICAgIGNvcmUoZnJhbWUpLT50cmVlKCkuc2V0TmFtZShmcmFtZU5hbWUpOwotICAg
ICAgICAgICAgW1tuZXdXZWJWaWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3U2hvdzpu
ZXdXZWJWaWV3XTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChKU1N0cmluZykgewotICAg
ICAgICBBU1NFUlQoZnJhbWUgPT0gbmlsIHx8IFtzZWxmIHdlYkZyYW1lXSA9PSBmcmFtZSk7Ci0g
ICAgICAgIFtzZWxmIGV2YWx1YXRlSmF2YVNjcmlwdFBsdWdpblJlcXVlc3Q6cGx1Z2luUmVxdWVz
dF07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgW2ZyYW1lIGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwot
ICAgICAgICBpZiAoW3BsdWdpblJlcXVlc3Qgc2VuZE5vdGlmaWNhdGlvbl0pIHsKLSAgICAgICAg
ICAgIC8vIENoZWNrIGlmIGFub3RoZXIgcGx1Zy1pbiB2aWV3IG9yIGV2ZW4gdGhpcyB2aWV3IGlz
IHdhaXRpbmcgZm9yIHRoZSBmcmFtZSB0byBsb2FkLgotICAgICAgICAgICAgLy8gSWYgaXQgaXMs
IHRlbGwgaXQgdGhhdCB0aGUgbG9hZCB3YXMgY2FuY2VsbGVkIGJlY2F1c2UgaXQgd2lsbCBiZSBh
bnl3YXkuCi0gICAgICAgICAgICBXZWJOZXRzY2FwZVBsdWdpblZpZXcgKnZpZXcgPSBbZnJhbWUg
X2ludGVybmFsTG9hZERlbGVnYXRlXTsKLSAgICAgICAgICAgIGlmICh2aWV3ICE9IG5pbCkgewot
ICAgICAgICAgICAgICAgIEFTU0VSVChbdmlldyBpc0tpbmRPZkNsYXNzOltXZWJOZXRzY2FwZVBs
dWdpblZpZXcgY2xhc3NdXSk7Ci0gICAgICAgICAgICAgICAgW3ZpZXcgd2ViRnJhbWU6ZnJhbWUg
ZGlkRmluaXNoTG9hZFdpdGhSZWFzb246TlBSRVNfVVNFUl9CUkVBS107Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBbX3BlbmRpbmdGcmFtZUxvYWRzIHNldE9iamVjdDpwbHVnaW5SZXF1ZXN0
IGZvcktleTpmcmFtZV07Ci0gICAgICAgICAgICBbZnJhbWUgX3NldEludGVybmFsTG9hZERlbGVn
YXRlOnNlbGZdOwotICAgICAgICB9Ci0gICAgfQotfQotCi0tIChOUEVycm9yKWxvYWRSZXF1ZXN0
OihOU011dGFibGVVUkxSZXF1ZXN0ICopcmVxdWVzdCBpblRhcmdldDooY29uc3QgY2hhciAqKWNU
YXJnZXQgd2l0aE5vdGlmeURhdGE6KHZvaWQgKilub3RpZnlEYXRhIHNlbmROb3RpZmljYXRpb246
KEJPT0wpc2VuZE5vdGlmaWNhdGlvbgotewotICAgIE5TVVJMICpVUkwgPSBbcmVxdWVzdCBVUkxd
OwotCi0gICAgaWYgKCFVUkwpIAotICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9VUkw7Ci0K
LSAgICAvLyBEb24ndCBhbGxvdyByZXF1ZXN0cyB0byBiZSBsb2FkZWQgd2hlbiB0aGUgZG9jdW1l
bnQgbG9hZGVyIGlzIHN0b3BwaW5nIGFsbCBsb2FkZXJzLgotICAgIGlmIChbW3NlbGYgZGF0YVNv
dXJjZV0gX2RvY3VtZW50TG9hZGVyXS0+aXNTdG9wcGluZygpKQotICAgICAgICByZXR1cm4gTlBF
UlJfR0VORVJJQ19FUlJPUjsKLSAgICAKLSAgICBOU1N0cmluZyAqdGFyZ2V0ID0gbmlsOwotICAg
IGlmIChjVGFyZ2V0KSB7Ci0gICAgICAgIC8vIEZpbmQgdGhlIGZyYW1lIGdpdmVuIHRoZSB0YXJn
ZXQgc3RyaW5nLgotICAgICAgICB0YXJnZXQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENTdHJpbmc6
Y1RhcmdldCBlbmNvZGluZzpOU0lTT0xhdGluMVN0cmluZ0VuY29kaW5nXTsKLSAgICB9Ci0gICAg
V2ViRnJhbWUgKmZyYW1lID0gW3NlbGYgd2ViRnJhbWVdOwotCi0gICAgLy8gZG9uJ3QgbGV0IGEg
cGx1Z2luIHN0YXJ0IGFueSBsb2FkcyBpZiBpdCBpcyBubyBsb25nZXIgcGFydCBvZiBhIGRvY3Vt
ZW50IHRoYXQgaXMgYmVpbmcgCi0gICAgLy8gZGlzcGxheWVkIHVubGVzcyB0aGUgbG9hZHMgYXJl
IGluIHRoZSBzYW1lIGZyYW1lIGFzIHRoZSBwbHVnaW4uCi0gICAgaWYgKFtbc2VsZiBkYXRhU291
cmNlXSBfZG9jdW1lbnRMb2FkZXJdICE9IGNvcmUoW3NlbGYgd2ViRnJhbWVdKS0+bG9hZGVyKCku
YWN0aXZlRG9jdW1lbnRMb2FkZXIoKSAmJgotICAgICAgICAoIWNUYXJnZXQgfHwgW2ZyYW1lIGZp
bmRGcmFtZU5hbWVkOnRhcmdldF0gIT0gZnJhbWUpKSB7Ci0gICAgICAgIHJldHVybiBOUEVSUl9H
RU5FUklDX0VSUk9SOyAKLSAgICB9Ci0gICAgCi0gICAgTlNTdHJpbmcgKkpTU3RyaW5nID0gW1VS
TCBfd2Via2l0X3NjcmlwdElmSmF2YVNjcmlwdFVSTF07Ci0gICAgaWYgKEpTU3RyaW5nICE9IG5p
bCkgewotICAgICAgICBpZiAoIVtbW3NlbGYgd2ViVmlld10gcHJlZmVyZW5jZXNdIGlzSmF2YVNj
cmlwdEVuYWJsZWRdKSB7Ci0gICAgICAgICAgICAvLyBSZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJP
UiBpZiBKUyBpcyBkaXNhYmxlZC4gVGhpcyBpcyB3aGF0IE1vemlsbGEgZG9lcy4KLSAgICAgICAg
ICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgICAgICB9IGVsc2UgaWYgKGNUYXJn
ZXQgPT0gTlVMTCAmJiBfbW9kZSA9PSBOUF9GVUxMKSB7Ci0gICAgICAgICAgICAvLyBEb24ndCBh
bGxvdyBhIEphdmFTY3JpcHQgcmVxdWVzdCBmcm9tIGEgc3RhbmRhbG9uZSBwbHVnLWluIHRoYXQg
aXMgc2VsZi10YXJnZXR0ZWQKLSAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhpcyBjYW4gY2F1c2Ug
dGhlIHVzZXIgdG8gYmUgcmVkaXJlY3RlZCB0byBhIGJsYW5rIHBhZ2UgKDM0MjQwMzkpLgotICAg
ICAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICBpZiAoIWNvcmUoW3NlbGYgd2ViRnJhbWVdKS0+ZG9jdW1lbnQoKS0+c2Vj
dXJpdHlPcmlnaW4oKS5jYW5EaXNwbGF5KFVSTCkpCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJf
R0VORVJJQ19FUlJPUjsKLSAgICB9Ci0gICAgICAgIAotICAgIGlmIChjVGFyZ2V0IHx8IEpTU3Ry
aW5nKSB7Ci0gICAgICAgIC8vIE1ha2Ugd2hlbiB0YXJnZXRpbmcgYSBmcmFtZSBvciBldmFsdWF0
aW5nIGEgSlMgc3RyaW5nLCBwZXJmb3JtIHRoZSByZXF1ZXN0IGFmdGVyIGEgZGVsYXkgYmVjYXVz
ZSB3ZSBkb24ndAotICAgICAgICAvLyB3YW50IHRvIHBvdGVudGlhbGx5IGtpbGwgdGhlIHBsdWct
aW4gaW5zaWRlIG9mIGl0cyBVUkwgcmVxdWVzdC4KLSAgICAgICAgCi0gICAgICAgIGlmIChKU1N0
cmluZyAmJiB0YXJnZXQgJiYgW2ZyYW1lIGZpbmRGcmFtZU5hbWVkOnRhcmdldF0gIT0gZnJhbWUp
IHsKLSAgICAgICAgICAgIC8vIEZvciBzZWN1cml0eSByZWFzb25zLCBvbmx5IGFsbG93IEpTIHJl
cXVlc3RzIHRvIGJlIG1hZGUgb24gdGhlIGZyYW1lIHRoYXQgY29udGFpbnMgdGhlIHBsdWctaW4u
Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgYm9vbCBjdXJyZW50RXZlbnRJc1VzZXJHZXN0dXJlID0gZmFsc2U7Ci0g
ICAgICAgIGlmIChfZXZlbnRIYW5kbGVyKQotICAgICAgICAgICAgY3VycmVudEV2ZW50SXNVc2Vy
R2VzdHVyZSA9IF9ldmVudEhhbmRsZXItPmN1cnJlbnRFdmVudElzVXNlckdlc3R1cmUoKTsKLSAg
ICAgICAgCi0gICAgICAgIGF1dG8gcGx1Z2luUmVxdWVzdCA9IGFkb3B0TlMoW1tXZWJQbHVnaW5S
ZXF1ZXN0IGFsbG9jXSBpbml0V2l0aFJlcXVlc3Q6cmVxdWVzdAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
cmFtZU5hbWU6dGFyZ2V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5RGF0YTpub3RpZnlEYXRhIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbmROb3RpZmljYXRpb246c2VuZE5vdGlmaWNhdGlvbgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkU3RhcnRG
cm9tVXNlckdlc3R1cmU6Y3VycmVudEV2ZW50SXNVc2VyR2VzdHVyZV0pOwotICAgICAgICBbc2Vs
ZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRQbHVnaW5SZXF1ZXN0Oikgd2l0aE9iamVj
dDpwbHVnaW5SZXF1ZXN0LmdldCgpIGFmdGVyRGVsYXk6MF07Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgYXV0byBzdHJlYW0gPSBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6Y3JlYXRlKHJlcXVlc3Qs
IHBsdWdpbiwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSk7Ci0KLSAgICAgICAgc3RyZWFt
cy5hZGQoc3RyZWFtLmNvcHlSZWYoKSk7Ci0gICAgICAgIHN0cmVhbS0+c3RhcnQoKTsKLSAgICB9
Ci0gICAgCi0gICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotfQotCi0tKE5QRXJyb3IpZ2V0VVJM
Tm90aWZ5Oihjb25zdCBjaGFyICopVVJMQ1N0cmluZyB0YXJnZXQ6KGNvbnN0IGNoYXIgKiljVGFy
Z2V0IG5vdGlmeURhdGE6KHZvaWQgKilub3RpZnlEYXRhCi17Ci0gICAgTE9HKFBsdWdpbnMsICJO
UE5fR2V0VVJMTm90aWZ5OiAlcyB0YXJnZXQ6ICVzIiwgVVJMQ1N0cmluZywgY1RhcmdldCk7Ci0K
LSAgICBOU011dGFibGVVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW3NlbGYgcmVxdWVzdFdpdGhVUkxD
U3RyaW5nOlVSTENTdHJpbmddOwotICAgIHJldHVybiBbc2VsZiBsb2FkUmVxdWVzdDpyZXF1ZXN0
IGluVGFyZ2V0OmNUYXJnZXQgd2l0aE5vdGlmeURhdGE6bm90aWZ5RGF0YSBzZW5kTm90aWZpY2F0
aW9uOllFU107Ci19Ci0KLS0oTlBFcnJvcilnZXRVUkw6KGNvbnN0IGNoYXIgKilVUkxDU3RyaW5n
IHRhcmdldDooY29uc3QgY2hhciAqKWNUYXJnZXQKLXsKLSAgICBMT0coUGx1Z2lucywgIk5QTl9H
ZXRVUkw6ICVzIHRhcmdldDogJXMiLCBVUkxDU3RyaW5nLCBjVGFyZ2V0KTsKLQotICAgIE5TTXV0
YWJsZVVSTFJlcXVlc3QgKnJlcXVlc3QgPSBbc2VsZiByZXF1ZXN0V2l0aFVSTENTdHJpbmc6VVJM
Q1N0cmluZ107Ci0gICAgcmV0dXJuIFtzZWxmIGxvYWRSZXF1ZXN0OnJlcXVlc3QgaW5UYXJnZXQ6
Y1RhcmdldCB3aXRoTm90aWZ5RGF0YTpOVUxMIHNlbmROb3RpZmljYXRpb246Tk9dOwotfQotCi0t
IChOUEVycm9yKV9wb3N0VVJMOihjb25zdCBjaGFyICopVVJMQ1N0cmluZwotICAgICAgICAgICAg
IHRhcmdldDooY29uc3QgY2hhciAqKXRhcmdldAotICAgICAgICAgICAgICAgIGxlbjooVUludDMy
KWxlbgotICAgICAgICAgICAgICAgIGJ1ZjooY29uc3QgY2hhciAqKWJ1ZgotICAgICAgICAgICAg
ICAgZmlsZTooTlBCb29sKWZpbGUKLSAgICAgICAgIG5vdGlmeURhdGE6KHZvaWQgKilub3RpZnlE
YXRhCi0gICBzZW5kTm90aWZpY2F0aW9uOihCT09MKXNlbmROb3RpZmljYXRpb24KLSAgICAgICBh
bGxvd0hlYWRlcnM6KEJPT0wpYWxsb3dIZWFkZXJzCi17Ci0gICAgaWYgKCFVUkxDU3RyaW5nIHx8
ICFsZW4gfHwgIWJ1ZikgewotICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKLSAg
ICB9Ci0gICAgCi0gICAgTlNEYXRhICpwb3N0RGF0YSA9IG5pbDsKLQotICAgIGlmIChmaWxlKSB7
Ci0gICAgICAgIC8vIElmIHdlJ3JlIHBvc3RpbmcgYSBmaWxlLCBidWYgaXMgZWl0aGVyIGEgZmls
ZSBVUkwgb3IgYSBwYXRoIHRvIHRoZSBmaWxlLgotICAgICAgICBhdXRvIGJ1ZlN0cmluZyA9IGFk
b3B0Q0YoQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBidWYs
IGtDRlN0cmluZ0VuY29kaW5nV2luZG93c0xhdGluMSkpOwotICAgICAgICBpZiAoIWJ1ZlN0cmlu
ZykgewotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07Ci0gICAgICAgIH0K
LSAgICAgICAgTlNVUkwgKmZpbGVVUkwgPSBbTlNVUkwgX3dlYl9VUkxXaXRoRGF0YUFzU3RyaW5n
OihfX2JyaWRnZSBOU1N0cmluZyAqKWJ1ZlN0cmluZy5nZXQoKV07Ci0gICAgICAgIE5TU3RyaW5n
ICpwYXRoOwotICAgICAgICBpZiAoW2ZpbGVVUkwgaXNGaWxlVVJMXSkgewotICAgICAgICAgICAg
cGF0aCA9IFtmaWxlVVJMIHBhdGhdOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGF0
aCA9IChfX2JyaWRnZSBOU1N0cmluZyAqKWJ1ZlN0cmluZy5nZXQoKTsKLSAgICAgICAgfQotICAg
ICAgICBwb3N0RGF0YSA9IFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mRmlsZTpwYXRoXTsKLSAg
ICAgICAgaWYgKCFwb3N0RGF0YSkgewotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9U
X0ZPVU5EOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcG9zdERhdGEgPSBbTlNE
YXRhIGRhdGFXaXRoQnl0ZXM6YnVmIGxlbmd0aDpsZW5dOwotICAgIH0KLQotICAgIGlmIChbcG9z
dERhdGEgbGVuZ3RoXSA9PSAwKSB7Ci0gICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFN
OwotICAgIH0KLQotICAgIE5TTXV0YWJsZVVSTFJlcXVlc3QgKnJlcXVlc3QgPSBbc2VsZiByZXF1
ZXN0V2l0aFVSTENTdHJpbmc6VVJMQ1N0cmluZ107Ci0gICAgW3JlcXVlc3Qgc2V0SFRUUE1ldGhv
ZDpAIlBPU1QiXTsKLSAgICAKLSAgICBpZiAoYWxsb3dIZWFkZXJzKSB7Ci0gICAgICAgIGlmIChb
cG9zdERhdGEgX3dlYl9zdGFydHNXaXRoQmxhbmtMaW5lXSkgewotICAgICAgICAgICAgcG9zdERh
dGEgPSBbcG9zdERhdGEgc3ViZGF0YVdpdGhSYW5nZTpOU01ha2VSYW5nZSgxLCBbcG9zdERhdGEg
bGVuZ3RoXSAtIDEpXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIE5TSW50ZWdlciBs
b2NhdGlvbiA9IFtwb3N0RGF0YSBfd2ViX2xvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZV07Ci0g
ICAgICAgICAgICBpZiAobG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgewotICAgICAgICAgICAgICAg
IC8vIElmIHRoZSBibGFuayBsaW5lIGlzIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHBvc3RE
YXRhLCBldmVyeXRoaW5nIGJlZm9yZSBpcyB0aGUgaGVhZGVyLgotICAgICAgICAgICAgICAgIE5T
RGF0YSAqaGVhZGVyRGF0YSA9IFtwb3N0RGF0YSBzdWJkYXRhV2l0aFJhbmdlOk5TTWFrZVJhbmdl
KDAsIGxvY2F0aW9uKV07Ci0gICAgICAgICAgICAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqaGVh
ZGVyID0gW2hlYWRlckRhdGEgX3dlYmtpdF9wYXJzZVJGQzgyMkhlYWRlckZpZWxkc107Ci0gICAg
ICAgICAgICAgICAgdW5zaWduZWQgZGF0YUxlbmd0aCA9IFtwb3N0RGF0YSBsZW5ndGhdIC0gbG9j
YXRpb247Ci0KLSAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgcGx1Z2lucyBsaWtlIHRvIHNl
dCBDb250ZW50LUxlbmd0aCB0aGVtc2VsdmVzIHdoZW4gdGhleSBwb3N0LAotICAgICAgICAgICAg
ICAgIC8vIGJ1dCBXZWJGb3VuZGF0aW9uIGRvZXMgbm90IGxpa2UgdGhhdC4gU28gd2Ugd2lsbCBy
ZW1vdmUgdGhlIGhlYWRlcgotICAgICAgICAgICAgICAgIC8vIGFuZCBpbnN0ZWFkIHRydW5jYXRl
IHRoZSBkYXRhIHRvIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoLgotICAgICAgICAgICAgICAgIE5TU3Ry
aW5nICpjb250ZW50TGVuZ3RoID0gW2hlYWRlciBvYmplY3RGb3JLZXk6QCJDb250ZW50LUxlbmd0
aCJdOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbmlsKQotICAgICAg
ICAgICAgICAgICAgICBkYXRhTGVuZ3RoID0gc3RkOjptaW48dW5zaWduZWQ+KFtjb250ZW50TGVu
Z3RoIGludFZhbHVlXSwgZGF0YUxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgW2hlYWRlciByZW1v
dmVPYmplY3RGb3JLZXk6QCJDb250ZW50LUxlbmd0aCJdOwotCi0gICAgICAgICAgICAgICAgaWYg
KFtoZWFkZXIgY291bnRdID4gMCkgewotICAgICAgICAgICAgICAgICAgICBbcmVxdWVzdCBzZXRB
bGxIVFRQSGVhZGVyRmllbGRzOmhlYWRlcl07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIC8vIEV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGJsYW5rIGxpbmUgaXMgdGhlIGFjdHVhbCBj
b250ZW50IG9mIHRoZSBQT1NULgotICAgICAgICAgICAgICAgIHBvc3REYXRhID0gW3Bvc3REYXRh
IHN1YmRhdGFXaXRoUmFuZ2U6TlNNYWtlUmFuZ2UobG9jYXRpb24sIGRhdGFMZW5ndGgpXTsKLQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChbcG9zdERhdGEgbGVuZ3RoXSA9
PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIFBsdWctaW5zIGV4cGVjdCB0byByZWNlaXZlIHVuY2FjaGVkIGRh
dGEgd2hlbiBkb2luZyBhIFBPU1QgKDMzNDcxMzQpLgotICAgIFtyZXF1ZXN0IHNldENhY2hlUG9s
aWN5Ok5TVVJMUmVxdWVzdFJlbG9hZElnbm9yaW5nQ2FjaGVEYXRhXTsKLSAgICBbcmVxdWVzdCBz
ZXRIVFRQQm9keTpwb3N0RGF0YV07Ci0gICAgCi0gICAgcmV0dXJuIFtzZWxmIGxvYWRSZXF1ZXN0
OnJlcXVlc3QgaW5UYXJnZXQ6dGFyZ2V0IHdpdGhOb3RpZnlEYXRhOm5vdGlmeURhdGEgc2VuZE5v
dGlmaWNhdGlvbjpzZW5kTm90aWZpY2F0aW9uXTsKLX0KLQotLSAoTlBFcnJvcilwb3N0VVJMTm90
aWZ5Oihjb25zdCBjaGFyICopVVJMQ1N0cmluZwotICAgICAgICAgICAgICAgICAgdGFyZ2V0Oihj
b25zdCBjaGFyICopdGFyZ2V0Ci0gICAgICAgICAgICAgICAgICAgICBsZW46KFVJbnQzMilsZW4K
LSAgICAgICAgICAgICAgICAgICAgIGJ1ZjooY29uc3QgY2hhciAqKWJ1ZgotICAgICAgICAgICAg
ICAgICAgICBmaWxlOihOUEJvb2wpZmlsZQotICAgICAgICAgICAgICBub3RpZnlEYXRhOih2b2lk
ICopbm90aWZ5RGF0YQotewotICAgIExPRyhQbHVnaW5zLCAiTlBOX1Bvc3RVUkxOb3RpZnk6ICVz
IiwgVVJMQ1N0cmluZyk7Ci0gICAgcmV0dXJuIFtzZWxmIF9wb3N0VVJMOlVSTENTdHJpbmcgdGFy
Z2V0OnRhcmdldCBsZW46bGVuIGJ1ZjpidWYgZmlsZTpmaWxlIG5vdGlmeURhdGE6bm90aWZ5RGF0
YSBzZW5kTm90aWZpY2F0aW9uOllFUyBhbGxvd0hlYWRlcnM6WUVTXTsKLX0KLQotLShOUEVycm9y
KXBvc3RVUkw6KGNvbnN0IGNoYXIgKilVUkxDU3RyaW5nCi0gICAgICAgICAgIHRhcmdldDooY29u
c3QgY2hhciAqKXRhcmdldAotICAgICAgICAgICAgICBsZW46KFVJbnQzMilsZW4KLSAgICAgICAg
ICAgICAgYnVmOihjb25zdCBjaGFyICopYnVmCi0gICAgICAgICAgICAgZmlsZTooTlBCb29sKWZp
bGUKLXsKLSAgICBMT0coUGx1Z2lucywgIk5QTl9Qb3N0VVJMOiAlcyIsIFVSTENTdHJpbmcpOyAg
ICAgICAgCi0gICAgLy8gQXMgZG9jdW1lbnRlZCwgb25seSBhbGxvdyBoZWFkZXJzIHRvIGJlIHNw
ZWNpZmllZCB2aWEgTlBQX1Bvc3RVUkwgd2hlbiB1c2luZyBhIGZpbGUuCi0gICAgcmV0dXJuIFtz
ZWxmIF9wb3N0VVJMOlVSTENTdHJpbmcgdGFyZ2V0OnRhcmdldCBsZW46bGVuIGJ1ZjpidWYgZmls
ZTpmaWxlIG5vdGlmeURhdGE6TlVMTCBzZW5kTm90aWZpY2F0aW9uOk5PIGFsbG93SGVhZGVyczpm
aWxlXTsKLX0KLQotLShOUEVycm9yKW5ld1N0cmVhbTooTlBNSU1FVHlwZSl0eXBlIHRhcmdldDoo
Y29uc3QgY2hhciAqKXRhcmdldCBzdHJlYW06KE5QU3RyZWFtKiopc3RyZWFtCi17Ci0gICAgTE9H
KFBsdWdpbnMsICJOUE5fTmV3U3RyZWFtIik7Ci0gICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJS
T1I7Ci19Ci0KLS0oTlBFcnJvcil3cml0ZTooTlBTdHJlYW0qKXN0cmVhbSBsZW46KFNJbnQzMils
ZW4gYnVmZmVyOih2b2lkICopYnVmZmVyCi17Ci0gICAgTE9HKFBsdWdpbnMsICJOUE5fV3JpdGUi
KTsKLSAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLX0KLQotLShOUEVycm9yKWRlc3Ry
b3lTdHJlYW06KE5QU3RyZWFtKilzdHJlYW0gcmVhc29uOihOUFJlYXNvbilyZWFzb24KLXsKLSAg
ICBMT0coUGx1Z2lucywgIk5QTl9EZXN0cm95U3RyZWFtIik7Ci0gICAgLy8gVGhpcyBmdW5jdGlv
biBkb2VzIGEgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBOUFN0cmVhbSBwcm92aWRl
ZCBhY3R1YWxseQotICAgIC8vIGJlbG9uZ3MgdG8gdGhlIHBsdWctaW4gdGhhdCBwcm92aWRlZCBp
dCwgd2hpY2ggZml4ZXMgYSBjcmFzaCBpbiB0aGUgRGl2WCAKLSAgICAvLyBwbHVnLWluOiA8cmRh
cjovL3Byb2JsZW0vNTA5Mzg2Mj4gfCBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzIwMwotICAgIGlmICghc3RyZWFtIHx8IFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpv
d25lckZvclN0cmVhbShzdHJlYW0pICE9IHBsdWdpbikgewotICAgICAgICBMT0coUGx1Z2lucywg
IkludmFsaWQgTlBTdHJlYW0gcGFzc2VkIHRvIE5QTl9EZXN0cm95U3RyZWFtOiAlcCIsIHN0cmVh
bSk7Ci0gICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX0lOU1RBTkNFX0VSUk9SOwotICAgIH0K
LSAgICAKLSAgICBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbSogYnJvd3NlclN0cmVhbSA9IHN0YXRp
Y19jYXN0PFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtKj4oc3RyZWFtLT5uZGF0YSk7Ci0gICAgYnJv
d3NlclN0cmVhbS0+Y2FuY2VsTG9hZEFuZERlc3Ryb3lTdHJlYW1XaXRoRXJyb3IoYnJvd3NlclN0
cmVhbS0+ZXJyb3JGb3JSZWFzb24ocmVhc29uKSk7Ci0gICAgCi0gICAgcmV0dXJuIE5QRVJSX05P
X0VSUk9SOwotfQotCi0tIChjb25zdCBjaGFyICopdXNlckFnZW50Ci17Ci0gICAgTlNTdHJpbmcg
KnVzZXJBZ2VudCA9IFtbc2VsZiB3ZWJWaWV3XSB1c2VyQWdlbnRGb3JVUkw6X2Jhc2VVUkwuZ2V0
KCldOwotICAgIAotICAgIGlmIChfaXNTaWx2ZXJsaWdodCkgewotICAgICAgICAvLyBTaWx2ZXJs
aWdodCBoYXMgYSB3b3JrYXJvdW5kIGZvciBhIGxlYWsgaW4gU2FmYXJpIDIuIFRoaXMgd29ya2Fy
b3VuZCBpcyAKLSAgICAgICAgLy8gYXBwbGllZCB3aGVuIHRoZSB1c2VyIGFnZW50IGRvZXMgbm90
IGNvbnRhaW4gIlZlcnNpb24vMyIgc28gd2UgYXBwZW5kIGl0Ci0gICAgICAgIC8vIGF0IHRoZSBl
bmQgb2YgdGhlIHVzZXIgYWdlbnQuCi0gICAgICAgIHVzZXJBZ2VudCA9IFt1c2VyQWdlbnQgc3Ry
aW5nQnlBcHBlbmRpbmdTdHJpbmc6QCIgVmVyc2lvbi8zLjIuMSJdOwotICAgIH0gICAgICAgIAot
ICAgICAgICAKLSAgICByZXR1cm4gW3VzZXJBZ2VudCBVVEY4U3RyaW5nXTsKLX0KLQotLSh2b2lk
KXN0YXR1czooY29uc3QgY2hhciAqKW1lc3NhZ2UKLXsgICAgCi0gICAgYXV0byBzdGF0dXMgPSBh
ZG9wdENGKENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoTlVMTCwgbWVzc2FnZSA/IG1lc3NhZ2Ug
OiAiIiwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KSk7Ci0gICAgaWYgKCFzdGF0dXMpIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJOUE5fU3RhdHVzOiB0aGUgbWVzc2FnZSB3YXMgbm90IHZhbGlkIFVURi04
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgTE9HKFBsdWdpbnMsICJOUE5f
U3RhdHVzOiAlQCIsIHN0YXR1cy5nZXQoKSk7Ci0gICAgV2ViVmlldyAqd3YgPSBbc2VsZiB3ZWJW
aWV3XTsKLSAgICBbW3d2IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Ond2IHNldFN0YXR1
c1RleHQ6KF9fYnJpZGdlIE5TU3RyaW5nICopc3RhdHVzLmdldCgpXTsKLX0KLQotLSh2b2lkKWlu
dmFsaWRhdGVSZWN0OihOUFJlY3QgKilpbnZhbGlkUmVjdAotewotICAgIExPRyhQbHVnaW5zLCAi
TlBOX0ludmFsaWRhdGVSZWN0Iik7Ci0gICAgW3NlbGYgaW52YWxpZGF0ZVBsdWdpbkNvbnRlbnRS
ZWN0Ok5TTWFrZVJlY3QoaW52YWxpZFJlY3QtPmxlZnQsIGludmFsaWRSZWN0LT50b3AsCi0gICAg
ICAgIChmbG9hdClpbnZhbGlkUmVjdC0+cmlnaHQgLSBpbnZhbGlkUmVjdC0+bGVmdCwgKGZsb2F0
KWludmFsaWRSZWN0LT5ib3R0b20gLSBpbnZhbGlkUmVjdC0+dG9wKV07Ci19Ci0KLS0gKHZvaWQp
aW52YWxpZGF0ZVJlZ2lvbjooTlBSZWdpb24paW52YWxpZFJlZ2lvbgotewotICAgIExPRyhQbHVn
aW5zLCAiTlBOX0ludmFsaWRhdGVSZWdpb24iKTsKLSAgICBOU1JlY3QgaW52YWxpZFJlY3QgPSBO
U1plcm9SZWN0OwotICAgIHN3aXRjaCAoZHJhd2luZ01vZGVsKSB7Ci0gICAgICAgIGNhc2UgTlBE
cmF3aW5nTW9kZWxDb3JlR3JhcGhpY3M6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENHUmVjdCBj
Z1JlY3QgPSBDR1BhdGhHZXRCb3VuZGluZ0JveCgoTlBDR1JlZ2lvbilpbnZhbGlkUmVnaW9uKTsK
LSAgICAgICAgICAgIGludmFsaWRSZWN0ID0gKihOU1JlY3QqKSZjZ1JlY3Q7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBbc2VsZiBp
bnZhbGlkYXRlUGx1Z2luQ29udGVudFJlY3Q6aW52YWxpZFJlY3RdOwotfQotCi0tKHZvaWQpZm9y
Y2VSZWRyYXcKLXsKLSAgICBMT0coUGx1Z2lucywgImZvcmNlUmVkcmF3Iik7Ci0gICAgW3NlbGYg
aW52YWxpZGF0ZVBsdWdpbkNvbnRlbnRSZWN0OltzZWxmIGJvdW5kc11dOwotICAgIFtbc2VsZiB3
aW5kb3ddIGRpc3BsYXlJZk5lZWRlZF07Ci19Ci0KLS0gKE5QRXJyb3IpZ2V0VmFyaWFibGU6KE5Q
TlZhcmlhYmxlKXZhcmlhYmxlIHZhbHVlOih2b2lkICopdmFsdWUKLXsKLSAgICBzd2l0Y2ggKHN0
YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYWJsZSkpIHsKLSAgICAgICAgY2FzZSBOUE5WV2luZG93
TlBPYmplY3Q6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW3Nl
bGYgd2ViRnJhbWVdKTsKLSAgICAgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3Qg
PSBmcmFtZSA/IGZyYW1lLT5zY3JpcHQoKS53aW5kb3dTY3JpcHROUE9iamVjdCgpIDogMDsKLQot
ICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBh
cyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2lu
cy9ucHJ1bnRpbWUuaHRtbCNicm93c2VyYWNjZXNzPgotICAgICAgICAgICAgaWYgKHdpbmRvd1Nj
cmlwdE9iamVjdCkKLSAgICAgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdCh3aW5kb3dTY3Jp
cHRPYmplY3QpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB2b2lkICoqdiA9ICh2b2lkICoq
KXZhbHVlOwotICAgICAgICAgICAgKnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7Ci0KLSAgICAgICAg
ICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTlBO
VlBsdWdpbkVsZW1lbnROUE9iamVjdDoKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFfZWxl
bWVudE5QT2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFfZWxlbWVudCkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAgICAgICAgICAgICAg
ICBGcmFtZSogZnJhbWUgPSBjb3JlKHNlbGYud2ViRnJhbWUpOwotICAgICAgICAgICAgICAgIGlm
ICghZnJhbWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9S
OwotCi0gICAgICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gZnJhbWUtPnNjcmlw
dCgpLmpzT2JqZWN0Rm9yUGx1Z2luRWxlbWVudChfZWxlbWVudC5nZXQoKSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFvYmplY3QpCi0gICAgICAgICAgICAgICAgICAgIF9lbGVtZW50TlBPYmplY3Qg
PSBfTlBOX0NyZWF0ZU5vU2NyaXB0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICBfZWxlbWVudE5QT2JqZWN0ID0gX05QTl9DcmVhdGVTY3JpcHRPYmpl
Y3QoMCwgb2JqZWN0LCBmcmFtZS0+c2NyaXB0KCkuYmluZGluZ1Jvb3RPYmplY3QoKSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBi
ZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3By
b2plY3RzL3BsdWdpbnMvbnBydW50aW1lLmh0bWwjYnJvd3NlcmFjY2Vzcz4KLSAgICAgICAgICAg
IGlmIChfZWxlbWVudE5QT2JqZWN0KQotICAgICAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0
KF9lbGVtZW50TlBPYmplY3QpOwotCi0gICAgICAgICAgICAqKHZvaWQgKiopdmFsdWUgPSBfZWxl
bWVudE5QT2JqZWN0OwotCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhc2UgTlBOVnBsdWdpbkRyYXdpbmdNb2RlbDoKLSAg
ICAgICAgewotICAgICAgICAgICAgKihOUERyYXdpbmdNb2RlbCAqKXZhbHVlID0gZHJhd2luZ01v
ZGVsOwotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAgICAgICB9Ci0KLSAg
ICAgICAgY2FzZSBOUE5Wc3VwcG9ydHNDb3JlR3JhcGhpY3NCb29sOgotICAgICAgICB7Ci0gICAg
ICAgICAgICAqKE5QQm9vbCAqKXZhbHVlID0gVFJVRTsKLSAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9OT19FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTlBOVnN1cHBvcnRzT3BlbkdM
Qm9vbDoKLSAgICAgICAgewotICAgICAgICAgICAgKihOUEJvb2wgKil2YWx1ZSA9IEZBTFNFOwot
ICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBjYXNlIE5QTlZzdXBwb3J0c0NvcmVBbmltYXRpb25Cb29sOgotICAgICAgICB7Ci0g
ICAgICAgICAgICAqKE5QQm9vbCAqKXZhbHVlID0gVFJVRTsKLSAgICAgICAgICAgIHJldHVybiBO
UEVSUl9OT19FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTlBOVnN1cHBvcnRzQ29j
b2FCb29sOgotICAgICAgICB7Ci0gICAgICAgICAgICAqKE5QQm9vbCAqKXZhbHVlID0gVFJVRTsK
LSAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAg
IGNhc2UgTlBOVnByaXZhdGVNb2RlQm9vbDoKLSAgICAgICAgewotICAgICAgICAgICAgKihOUEJv
b2wgKil2YWx1ZSA9IF9pc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQ7Ci0gICAgICAgICAgICByZXR1
cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIFdLTlZTdXBwb3J0
c0NvbXBvc2l0aW5nQ29yZUFuaW1hdGlvblBsdWdpbnNCb29sOgotICAgICAgICB7Ci0gICAgICAg
ICAgICAqKE5QQm9vbCAqKXZhbHVlID0gW1tbc2VsZiB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gYWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWRdOwotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05P
X0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotfQotCi0tIChOUEVy
cm9yKXNldFZhcmlhYmxlOihOUFBWYXJpYWJsZSl2YXJpYWJsZSB2YWx1ZToodm9pZCAqKXZhbHVl
Ci17Ci0gICAgc3dpdGNoICh2YXJpYWJsZSkgewotICAgICAgICBjYXNlIE5QUFZwbHVnaW5EcmF3
aW5nTW9kZWw6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIENhbiBvbmx5IHNldCBkcmF3aW5n
IG1vZGVsIGluc2lkZSBOUFBfTmV3KCkKLSAgICAgICAgICAgIGlmIChzZWxmICE9IFtbc2VsZiBj
bGFzc10gY3VycmVudFBsdWdpblZpZXddKQotICAgICAgICAgICAgICAgIHJldHVybiBOUEVSUl9H
RU5FUklDX0VSUk9SOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBDaGVjayBmb3IgdmFs
aWQsIHN1cHBvcnRlZCBkcmF3aW5nIG1vZGVsCi0gICAgICAgICAgICBOUERyYXdpbmdNb2RlbCBu
ZXdEcmF3aW5nTW9kZWwgPSAoTlBEcmF3aW5nTW9kZWwpKHVpbnRwdHJfdCl2YWx1ZTsKLSAgICAg
ICAgICAgIHN3aXRjaCAobmV3RHJhd2luZ01vZGVsKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3Vw
cG9ydGVkIGRyYXdpbmcgbW9kZWxzOgotICAgICAgICAgICAgICAgIGNhc2UgTlBEcmF3aW5nTW9k
ZWxDb3JlR3JhcGhpY3M6Ci0gICAgICAgICAgICAgICAgY2FzZSBOUERyYXdpbmdNb2RlbENvcmVB
bmltYXRpb246Ci0gICAgICAgICAgICAgICAgICAgIGRyYXdpbmdNb2RlbCA9IG5ld0RyYXdpbmdN
b2RlbDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAgICAg
ICAgICAgICAgICAgICAKLQotICAgICAgICAgICAgICAgIC8vIFVuc3VwcG9ydGVkIChvciB1bmtu
b3duKSBkcmF3aW5nIG1vZGVsczoKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdpbiAlQCB1c2VzIHVuc3VwcG9ydGVkIGRyYXdp
bmcgbW9kZWw6ICVkIiwgX2V2ZW50SGFuZGxlci5nZXQoKSwgZHJhd2luZ01vZGVsKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhc2UgTlBQVnBsdWdpbkV2ZW50TW9kZWw6
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIENhbiBvbmx5IHNldCBldmVudCBtb2RlbCBpbnNp
ZGUgTlBQX05ldygpCi0gICAgICAgICAgICBpZiAoc2VsZiAhPSBbW3NlbGYgY2xhc3NdIGN1cnJl
bnRQbHVnaW5WaWV3XSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJP
UjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHZhbGlkLCBzdXBwb3J0
ZWQgZXZlbnQgbW9kZWwKLSAgICAgICAgICAgIE5QRXZlbnRNb2RlbCBuZXdFdmVudE1vZGVsID0g
KE5QRXZlbnRNb2RlbCkodWludHB0cl90KXZhbHVlOwotICAgICAgICAgICAgc3dpdGNoIChuZXdF
dmVudE1vZGVsKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3VwcG9ydGVkIGV2ZW50IG1vZGVsczoK
LSAgICAgICAgICAgICAgICBjYXNlIE5QRXZlbnRNb2RlbENvY29hOgotICAgICAgICAgICAgICAg
ICAgICBldmVudE1vZGVsID0gbmV3RXZlbnRNb2RlbDsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE5QRVJSX05PX0VSUk9SOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgLy8gVW5zdXBwb3J0ZWQgKG9yIHVua25vd24pIGV2ZW50IG1vZGVsczoKLSAgICAgICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdp
biAlQCB1c2VzIHVuc3VwcG9ydGVkIGV2ZW50IG1vZGVsOiAlZCIsIF9ldmVudEhhbmRsZXIuZ2V0
KCksIGV2ZW50TW9kZWwpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJ
Q19FUlJPUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICB9
Ci19Ci0KLS0gKHVpbnQzMl90KXNjaGVkdWxlVGltZXJXaXRoSW50ZXJ2YWw6KHVpbnQzMl90KWlu
dGVydmFsIHJlcGVhdDooTlBCb29sKXJlcGVhdCB0aW1lckZ1bmM6KHZvaWQgKCopKE5QUCBucHAs
IHVpbnQzMl90IHRpbWVySUQpKXRpbWVyRnVuYwotewotICAgIGlmICghdGltZXJGdW5jKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBpZiAoIXRpbWVycykKLSAgICAgICAgdGltZXJzID0g
bWFrZVVuaXF1ZTxIYXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luVGltZXI+
Pj4oKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5UaW1lcj4qIHNsb3QgPSBudWxscHRy
OwotICAgIHVpbnQzMl90IHRpbWVySUQ7Ci0gICAgZG8KLSAgICAgICAgdGltZXJJRCA9ICsrY3Vy
cmVudFRpbWVySUQ7Ci0gICAgd2hpbGUgKCF0aW1lcnMtPmlzVmFsaWRLZXkodGltZXJJRCkgfHwg
KihzbG90ID0gJnRpbWVycy0+YWRkKHRpbWVySUQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZSkp
OwotCi0gICAgYXV0byB0aW1lciA9IG1ha2VVbmlxdWU8UGx1Z2luVGltZXI+KHBsdWdpbiwgdGlt
ZXJJRCwgaW50ZXJ2YWwsIHJlcGVhdCwgdGltZXJGdW5jKTsKLQotICAgIGlmIChfc2hvdWxkRmly
ZVRpbWVycykKLSAgICAgICAgdGltZXItPnN0YXJ0KF9pc0NvbXBsZXRlbHlPYnNjdXJlZCk7Ci0g
ICAgCi0gICAgKnNsb3QgPSBXVEZNb3ZlKHRpbWVyKTsKLQotICAgIHJldHVybiB0aW1lcklEOwot
fQotCi0tICh2b2lkKXVuc2NoZWR1bGVUaW1lcjoodWludDMyX3QpdGltZXJJRAotewotICAgIGlm
ICghdGltZXJzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgdGltZXJzLT5yZW1vdmUodGlt
ZXJJRCk7Ci19Ci0KLS0gKE5QRXJyb3IpcG9wVXBDb250ZXh0TWVudTooTlBNZW51ICopbWVudQot
ewotICAgIE5TRXZlbnQgKmN1cnJlbnRFdmVudCA9IFtOU0FwcCBjdXJyZW50RXZlbnRdOwotICAg
IAotICAgIC8vIE5QTl9Qb3BVcENvbnRleHRNZW51IG11c3QgYmUgY2FsbGVkIGZyb20gd2l0aGlu
IHRoZSBwbHVnLWluJ3MgTlBQX0hhbmRsZUV2ZW50LgotICAgIGlmICghY3VycmVudEV2ZW50KQot
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAKLSAgICBbTlNNZW51IHBv
cFVwQ29udGV4dE1lbnU6KF9fYnJpZGdlIE5TTWVudSAqKW1lbnUgd2l0aEV2ZW50OmN1cnJlbnRF
dmVudCBmb3JWaWV3OnNlbGZdOwotICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLX0KLQotLSAo
TlBFcnJvcilnZXRWYXJpYWJsZTooTlBOVVJMVmFyaWFibGUpdmFyaWFibGUgZm9yVVJMOihjb25z
dCBjaGFyKil1cmwgdmFsdWU6KGNoYXIqKil2YWx1ZSBsZW5ndGg6KHVpbnQzMl90KilsZW5ndGgK
LXsKLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgICAgIGNhc2UgTlBOVVJMVkNvb2tpZTog
ewotICAgICAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgTlNVUkwgKlVSTCA9IFtzZWxmIFVSTFdpdGhDU3RyaW5nOnVy
bF07Ci0gICAgICAgICAgICBpZiAoIVVSTCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgd2ViRnJh
bWVdKSkgewotICAgICAgICAgICAgICAgIGF1dG8qIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYXV0byogcGFnZSA9IGRv
Y3VtZW50LT5wYWdlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYWdlKQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSBw
YWdlLT5jb29raWVKYXIoKS5jb29raWVzKCpkb2N1bWVudCwgVVJMKTsKLSAgICAgICAgICAgICAg
ICBDU3RyaW5nIGNvb2tpZVN0cmluZ1VURjggPSBjb29raWVTdHJpbmcudXRmOCgpOwotICAgICAg
ICAgICAgICAgIGlmIChjb29raWVTdHJpbmdVVEY4LmlzTnVsbCgpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLQotICAgICAgICAgICAgICAgICp2YWx1
ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihOUE5fTWVtQWxsb2MoY29va2llU3RyaW5nVVRGOC5sZW5n
dGgoKSkpOwotICAgICAgICAgICAgICAgIG1lbWNweSgqdmFsdWUsIGNvb2tpZVN0cmluZ1VURjgu
ZGF0YSgpLCBjb29raWVTdHJpbmdVVEY4Lmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBpZiAobGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICAqbGVuZ3RoID0g
Y29va2llU3RyaW5nVVRGOC5sZW5ndGgoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlBFUlJf
Tk9fRVJST1I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIE5QTlVSTFZQcm94eTogewotICAgICAgICAgICAgaWYgKCF2YWx1ZSkKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTlNVUkwgKlVS
TCA9IFtzZWxmIFVSTFdpdGhDU3RyaW5nOnVybF07Ci0gICAgICAgICAgICBpZiAoIVVSTCkKLSAg
ICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgVmVjdG9yPFByb3h5U2VydmVyPiBw
cm94eVNlcnZlcnMgPSBwcm94eVNlcnZlcnNGb3JVUkwoVVJMKTsKLSAgICAgICAgICAgIENTdHJp
bmcgcHJveGllc1VURjggPSB0b1N0cmluZyhwcm94eVNlcnZlcnMpLnV0ZjgoKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KE5QTl9NZW1BbGxv
Yyhwcm94aWVzVVRGOC5sZW5ndGgoKSkpOwotICAgICAgICAgICAgbWVtY3B5KCp2YWx1ZSwgcHJv
eGllc1VURjguZGF0YSgpLCBwcm94aWVzVVRGOC5sZW5ndGgoKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgaWYgKGxlbmd0aCkKLSAgICAgICAgICAgICAgICpsZW5ndGggPSBwcm94aWVzVVRG
OC5sZW5ndGgoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VS
Uk9SOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwot
fQotCi0tIChOUEVycm9yKXNldFZhcmlhYmxlOihOUE5VUkxWYXJpYWJsZSl2YXJpYWJsZSBmb3JV
Ukw6KGNvbnN0IGNoYXIqKXVybCB2YWx1ZTooY29uc3QgY2hhciopdmFsdWUgbGVuZ3RoOih1aW50
MzJfdClsZW5ndGgKLXsKLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgICAgIGNhc2UgTlBO
VVJMVkNvb2tpZTogewotICAgICAgICAgICAgTlNVUkwgKlVSTCA9IFtzZWxmIFVSTFdpdGhDU3Ry
aW5nOnVybF07Ci0gICAgICAgICAgICBpZiAoIVVSTCkKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IFN0cmluZzo6
ZnJvbVVURjgodmFsdWUsIGxlbmd0aCk7Ci0gICAgICAgICAgICBpZiAoIWNvb2tpZVN0cmluZykK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgd2ViRnJhbWVdKSkgewotICAgICAgICAgICAgICAgIGlm
IChhdXRvKiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChhdXRvKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHBhZ2UtPmNvb2tpZUphcigpLnNldENvb2tpZXMoKmRvY3VtZW50LCBVUkwsIGNvb2tp
ZVN0cmluZyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9OT19FUlJPUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBOUE5VUkxWUHJveHk6Ci0gICAgICAgICAgICAv
LyBDYW4ndCBzZXQgdGhlIHByb3h5IGZvciBhIFVSTC4KLSAgICAgICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLX0KLQotLSAoTlBFcnJvcilnZXRB
dXRoZW50aWNhdGlvbkluZm9XaXRoUHJvdG9jb2w6KGNvbnN0IGNoYXIqKXByb3RvY29sU3RyIGhv
c3Q6KGNvbnN0IGNoYXIqKWhvc3RTdHIgcG9ydDooaW50MzJfdClwb3J0IHNjaGVtZTooY29uc3Qg
Y2hhciopc2NoZW1lU3RyIHJlYWxtOihjb25zdCBjaGFyKilyZWFsbVN0cgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWU6KGNoYXIqKil1c2VybmFtZVN0ciB1c2Vy
bmFtZUxlbmd0aDoodWludDMyX3QqKXVzZXJuYW1lTGVuZ3RoIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ6KGNoYXIqKilwYXNzd29yZFN0ciBwYXNzd29yZExl
bmd0aDoodWludDMyX3QqKXBhc3N3b3JkTGVuZ3RoCi17Ci0gICAgaWYgKCFwcm90b2NvbFN0ciB8
fCAhaG9zdFN0ciB8fCAhc2NoZW1lU3RyIHx8ICFyZWFsbVN0ciB8fCAhdXNlcm5hbWVTdHIgfHwg
IXVzZXJuYW1lTGVuZ3RoIHx8ICFwYXNzd29yZFN0ciB8fCAhcGFzc3dvcmRMZW5ndGgpCi0gICAg
ICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAKLSAgICBDU3RyaW5nIHVzZXJuYW1l
OwotICAgIENTdHJpbmcgcGFzc3dvcmQ7Ci0gICAgaWYgKCFnZXRBdXRoZW50aWNhdGlvbkluZm8o
cHJvdG9jb2xTdHIsIGhvc3RTdHIsIHBvcnQsIHNjaGVtZVN0ciwgcmVhbG1TdHIsIHVzZXJuYW1l
LCBwYXNzd29yZCkpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgIAot
ICAgICp1c2VybmFtZUxlbmd0aCA9IHVzZXJuYW1lLmxlbmd0aCgpOwotICAgICp1c2VybmFtZVN0
ciA9IHN0YXRpY19jYXN0PGNoYXIqPihOUE5fTWVtQWxsb2ModXNlcm5hbWUubGVuZ3RoKCkpKTsK
LSAgICBtZW1jcHkoKnVzZXJuYW1lU3RyLCB1c2VybmFtZS5kYXRhKCksIHVzZXJuYW1lLmxlbmd0
aCgpKTsKLSAgICAKLSAgICAqcGFzc3dvcmRMZW5ndGggPSBwYXNzd29yZC5sZW5ndGgoKTsKLSAg
ICAqcGFzc3dvcmRTdHIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oTlBOX01lbUFsbG9jKHBhc3N3b3Jk
Lmxlbmd0aCgpKSk7Ci0gICAgbWVtY3B5KCpwYXNzd29yZFN0ciwgcGFzc3dvcmQuZGF0YSgpLCBw
YXNzd29yZC5sZW5ndGgoKSk7Ci0gICAgCi0gICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotfQot
Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJOZXRzY2FwZVBsdWdpblZpZXcgKEludGVybmFs
KQotCi0tIChCT09MKV9zaG91bGRDYW5jZWxTcmNTdHJlYW0KLXsKLSAgICBBU1NFUlQoX2lzU3Rh
cnRlZCk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgaWYgd2Ugc2hvdWxkIGNhbmNlbCB0aGUgbG9hZAot
ICAgIE5QQm9vbCBjYW5jZWxTcmNTdHJlYW0gPSAwOwotICAgIGlmIChbX3BsdWdpblBhY2thZ2Uu
Z2V0KCkgcGx1Z2luRnVuY3NdLT5nZXR2YWx1ZSAmJgotICAgICAgICBbX3BsdWdpblBhY2thZ2Uu
Z2V0KCkgcGx1Z2luRnVuY3NdLT5nZXR2YWx1ZShwbHVnaW4sIE5QUFZwbHVnaW5DYW5jZWxTcmNT
dHJlYW0sICZjYW5jZWxTcmNTdHJlYW0pID09IE5QRVJSX05PX0VSUk9SICYmIGNhbmNlbFNyY1N0
cmVhbSkKLSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICAKLSAgICByZXR1cm4gTk87Ci19Ci0KLS0g
KE5QRXJyb3IpX2NyZWF0ZVBsdWdpbgotewotICAgIHBsdWdpbiA9IChOUFApY2FsbG9jKDEsIHNp
emVvZihOUFBfdCkpOwotICAgIHBsdWdpbi0+bmRhdGEgPSBzZWxmOwotCi0gICAgQVNTRVJUKFtf
cGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPm5ld3ApOwotCi0gICAgLy8gTlBOX05l
dygpLCB3aGljaCBjcmVhdGVzIHRoZSBwbHVnLWluIGluc3RhbmNlLCBzaG91bGQgbmV2ZXIgYmUg
Y2FsbGVkIHdoaWxlIGNhbGxpbmcgYSBwbHVnLWluIGZ1bmN0aW9uIGZvciB0aGF0IGluc3RhbmNl
LgotICAgIEFTU0VSVChwbHVnaW5GdW5jdGlvbkNhbGxEZXB0aCA9PSAwKTsKLQotICAgIF9pc0Zs
YXNoID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIGJ1bmRsZUlkZW50aWZpZXJdID09ICJjb20ubWFj
cm9tZWRpYS5GbGFzaCBQbGF5ZXIucGx1Z2luIjsKLSAgICBfaXNTaWx2ZXJsaWdodCA9IFtfcGx1
Z2luUGFja2FnZS5nZXQoKSBidW5kbGVJZGVudGlmaWVyXSA9PSAiY29tLm1pY3Jvc29mdC5TaWx2
ZXJsaWdodFBsdWdpbiI7Ci0KLSAgICBbW3NlbGYgY2xhc3NdIHNldEN1cnJlbnRQbHVnaW5WaWV3
OnNlbGZdOwotICAgIE5QRXJyb3IgbnBFcnIgPSBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2lu
RnVuY3NdLT5uZXdwKGNvbnN0X2Nhc3Q8Y2hhcio+KFtfTUlNRVR5cGUuZ2V0KCkgY1N0cmluZ10p
LCBwbHVnaW4sIF9tb2RlLCBhcmdzQ291bnQsIGNBdHRyaWJ1dGVzLCBjVmFsdWVzLCBOVUxMKTsK
LSAgICBbW3NlbGYgY2xhc3NdIHNldEN1cnJlbnRQbHVnaW5WaWV3Om5pbF07Ci0gICAgTE9HKFBs
dWdpbnMsICJOUFBfTmV3OiAlZCIsIG5wRXJyKTsKLSAgICByZXR1cm4gbnBFcnI7Ci19Ci0KLS0g
KHZvaWQpX2Rlc3Ryb3lQbHVnaW4KLXsKLSAgICBOUEVycm9yIG5wRXJyOwotICAgIG5wRXJyID0g
IVtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPmRlc3Ryb3kocGx1Z2luLCBOVUxM
KTsKLSAgICBMT0coUGx1Z2lucywgIk5QUF9EZXN0cm95OiAlZCIsIG5wRXJyKTsKLQotICAgIGlm
IChfZWxlbWVudE5QT2JqZWN0KQotICAgICAgICBfTlBOX1JlbGVhc2VPYmplY3QoX2VsZW1lbnRO
UE9iamVjdCk7Ci0KLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiB3ZWJGcmFtZV0p
KQotICAgICAgICBmcmFtZS0+c2NyaXB0KCkuY2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4o
c2VsZik7Ci0gICAgICAgIAotICAgIGZyZWUocGx1Z2luKTsKLSAgICBwbHVnaW4gPSBOVUxMOwot
fQotCi0tICh2b2lkKV9yZWRlbGl2ZXJTdHJlYW0KLXsKLSAgICBpZiAoW3NlbGYgZGF0YVNvdXJj
ZV0gJiYgX2lzU3RhcnRlZCkgewotICAgICAgICAvLyBEZWxpdmVyIHdoYXQgaGFzIG5vdCBiZWVu
IHBhc3NlZCB0byB0aGUgcGx1Zy1pbiB1cCB0byB0aGlzIHBvaW50LgotICAgICAgICBpZiAoX2Rh
dGFMZW5ndGhSZWNlaXZlZCA+IDApIHsKLSAgICAgICAgICAgIE5TRGF0YSAqZGF0YSA9IFtbW3Nl
bGYgZGF0YVNvdXJjZV0gZGF0YV0gc3ViZGF0YVdpdGhSYW5nZTpOU01ha2VSYW5nZSgwLCBfZGF0
YUxlbmd0aFJlY2VpdmVkKV07Ci0gICAgICAgICAgICBfZGF0YUxlbmd0aFJlY2VpdmVkID0gMDsK
LSAgICAgICAgICAgIFtzZWxmIHBsdWdpblZpZXc6c2VsZiByZWNlaXZlZERhdGE6ZGF0YV07Ci0g
ICAgICAgICAgICBpZiAoIVtbc2VsZiBkYXRhU291cmNlXSBpc0xvYWRpbmddKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKF9lcnJvcikKLSAgICAgICAgICAgICAgICAgICAgW3NlbGYgcGx1Z2luVmll
dzpzZWxmIHJlY2VpdmVkRXJyb3I6X2Vycm9yLmdldCgpXTsKLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIFtzZWxmIHBsdWdpblZpZXdGaW5pc2hlZExvYWRpbmc6c2Vs
Zl07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUBlbmQKLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNv
bnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNv
bnRyb2xsZXIubW0KaW5kZXggOTQ4YWYzMjE5MWQwYTlhYTVjMWQ2NmExNzc1ODBmMjMwNjk3MmZj
Yi4uZjcwMjVmYTQ3OGMxZjcxNTg5ZDU2NmE0ZTc2MDExM2NmM2JkYjhiMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5t
bQpAQCAtMzgzLDExICszODMsNiBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplQXVkaW9TZXNzaW9u
KCkKICAgICAgICAgaWYgKF9zdGFydGVkKQogICAgICAgICAgICAgW3NlbGYgc3RvcE9uZVBsdWdp
bjp2aWV3XTsKICAgICAgICAgW3NlbGYgZGVzdHJveU9uZVBsdWdpbjp2aWV3XTsKLQotI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBpZiAoYXV0byogZnJhbWUgPSBjb3Jl
KFtzZWxmIHdlYkZyYW1lXSkpCi0gICAgICAgICAgICBmcmFtZS0+c2NyaXB0KCkuY2xlYW51cFNj
cmlwdE9iamVjdHNGb3JQbHVnaW4oc2VsZik7Ci0jZW5kaWYKICAgICAgICAgCiAgICAgICAgIFtw
bHVnaW5WaWV3cygpIHJlbW92ZU9iamVjdDp2aWV3XTsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlM
WSkKQEAgLTQzMSwxMiArNDI2LDcgQEAgc3RhdGljIHZvaWQgY2FuY2VsT3V0c3RhbmRpbmdDaGVj
ayhjb25zdCB2b2lkICppdGVtLCB2b2lkICpjb250ZXh0KQogICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgdmlld3NDb3VudDsgaSsrKSB7CiAgICAgICAgIGlkIGFWaWV3ID0gW192aWV3cyBvYmplY3RB
dEluZGV4OmldOwogICAgICAgICBbc2VsZiBkZXN0cm95T25lUGx1Z2luOmFWaWV3XTsKLSAgICAg
ICAgCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIGlmIChhdXRvKiBm
cmFtZSA9IGNvcmUoW3NlbGYgd2ViRnJhbWVdKSkKLSAgICAgICAgICAgIGZyYW1lLT5zY3JpcHQo
KS5jbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbihzZWxmKTsKLSNlbmRpZgotICAgICAgICAK
KwogICAgICAgICBbcGx1Z2luVmlld3MoKSByZW1vdmVPYmplY3Q6YVZpZXddOwogI2lmICFQTEFU
Rk9STShJT1NfRkFNSUxZKQogICAgICAgICBbW19kb2N1bWVudFZpZXcgX3dlYlZpZXddIHJlbW92
ZVBsdWdpbkluc3RhbmNlVmlldzphVmlld107CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9QbHVnaW5zL1dlYlBsdWdpbkRhdGFiYXNlLm1tIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvUGx1Z2lucy9XZWJQbHVnaW5EYXRhYmFzZS5tbQppbmRleCAwMWMzZGZiODQwNzQ2OTlj
MDI1NDA1ZDg4NDdhY2RmZTYzZTJjNjg1Li43OTNkZjA5ZmU1YTQ1MGQzNjE3MTM3MjYzN2Y5OTJk
NGRjYTIxZDI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dl
YlBsdWdpbkRhdGFiYXNlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMv
V2ViUGx1Z2luRGF0YWJhc2UubW0KQEAgLTI4LDcgKzI4LDYgQEAKIAogI2ltcG9ydCAiV2ViUGx1
Z2luRGF0YWJhc2UuaCIKIAotI2ltcG9ydCAiV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5oIgog
I2ltcG9ydCAiV2ViQmFzZVBsdWdpblBhY2thZ2UuaCIKICNpbXBvcnQgIldlYkRhdGFTb3VyY2VQ
cml2YXRlLmgiCiAjaW1wb3J0ICJXZWJGcmFtZS5oIgpAQCAtMzcsNyArMzYsNiBAQAogI2ltcG9y
dCAiV2ViSFRNTFZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViS2l0TG9nZ2luZy5oIgogI2lt
cG9ydCAiV2ViTlNGaWxlTWFuYWdlckV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTmV0c2NhcGVQbHVn
aW5QYWNrYWdlLmgiCiAjaW1wb3J0ICJXZWJQbHVnaW5Db250cm9sbGVyLmgiCiAjaW1wb3J0ICJX
ZWJQbHVnaW5QYWNrYWdlLmgiCiAjaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKQEAgLTExMywx
MyArMTExLDYgQEAgc3RydWN0IFBsdWdpblBhY2thZ2VDYW5kaWRhdGVzIHsKICAgICAgICAgICAg
IGNoZWNrQ2FuZGlkYXRlKCZ3ZWJQbHVnaW4sICZwbHVnaW4pOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0gICAgICAgICAgICAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKLSAgICAgICAgaWYoW3BsdWdpbiBpc0tpbmRPZkNsYXNzOltXZWJOZXRzY2FwZVBsdWdpblBh
Y2thZ2UgY2xhc3NdXSkgewotICAgICAgICAgICAgY2hlY2tDYW5kaWRhdGUoJm5ldHNjYXBlUGx1
Z2luLCAmcGx1Z2luKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotI2VuZGlmCiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKQEAgLTM1NCwxMiArMzQ1
LDggQEAgc3RhdGljIFJldGFpblB0cjxOU0FycmF5PiYgYWRkaXRpb25hbFdlYlBsdWdJblBhdGhz
KCkKICAgICBOU1ZpZXcgPFdlYkRvY3VtZW50Vmlldz4gKmRvY3VtZW50VmlldyA9IFtbd2ViRnJh
bWUgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOyAKICAgICBpZiAoW2RvY3VtZW50VmlldyBpc0tp
bmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKSB7CiAgICAgICAgIGZvciAoTlNWaWV3ICpz
dWJ2aWV3IGluIFtkb2N1bWVudFZpZXcgc3Vidmlld3NdKSB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0gICAgICAgICAgICBpZiAoW3N1YnZpZXcgaXNLaW5kT2ZDbGFzczpbV2Vi
QmFzZU5ldHNjYXBlUGx1Z2luVmlldyBjbGFzc11dIHx8IFtXZWJQbHVnaW5Db250cm9sbGVyIGlz
UGx1Z0luVmlldzpzdWJ2aWV3XSkKLSNlbHNlCiAgICAgICAgICAgICBpZiAoW1dlYlBsdWdpbkNv
bnRyb2xsZXIgaXNQbHVnSW5WaWV3OnN1YnZpZXddKQotI2VuZGlmCi0gICAgICAgICAgICAgICAg
W3BsdWdpbkluc3RhbmNlVmlld3MgcmVtb3ZlT2JqZWN0OnN1YnZpZXddOyAKKyAgICAgICAgICAg
ICAgICBbcGx1Z2luSW5zdGFuY2VWaWV3cyByZW1vdmVPYmplY3Q6c3Vidmlld107CiAgICAgICAg
IH0KICAgICB9CiB9CkBAIC0zNzAsMTIgKzM1Nyw2IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNBcnJh
eT4mIGFkZGl0aW9uYWxXZWJQbHVnSW5QYXRocygpCiAgICAgTlNBcnJheSAqcGxpID0gW3BsdWdp
bkluc3RhbmNlVmlld3MgYWxsT2JqZWN0c107CiAgICAgTlNFbnVtZXJhdG9yICplbnVtZXJhdG9y
ID0gW3BsaSBvYmplY3RFbnVtZXJhdG9yXTsKICAgICB3aGlsZSAoKHZpZXcgPSBbZW51bWVyYXRv
ciBuZXh0T2JqZWN0XSkgIT0gbmlsKSB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0gICAgICAgIGlmIChbdmlldyBpc0tpbmRPZkNsYXNzOltXZWJCYXNlTmV0c2NhcGVQbHVnaW5W
aWV3IGNsYXNzXV0pIHsKLSAgICAgICAgICAgIEFTU0VSVChbdmlldyByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKHN0b3ApXSk7Ci0gICAgICAgICAgICBbdmlldyBwZXJmb3JtU2VsZWN0b3I6
QHNlbGVjdG9yKHN0b3ApXTsKLSAgICAgICAgfSBlbHNlCi0jZW5kaWYKICAgICAgICAgaWYgKFtX
ZWJQbHVnaW5Db250cm9sbGVyIGlzUGx1Z0luVmlldzp2aWV3XSkgewogICAgICAgICAgICAgQVNT
RVJUKFtbdmlldyBzdXBlcnZpZXddIGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0p
OwogICAgICAgICAgICAgQVNTRVJUKFtbdmlldyBzdXBlcnZpZXddIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IoX2Rlc3Ryb3lBbGxXZWJQbHVnaW5zKV0pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJQbHVnaW5SZXF1ZXN0LmggYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYlBsdWdpblJlcXVlc3QuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYmIwN2M4NWNkZDEwMjBhNDRjNGY4ZTFmOTAzY2QwNDljMDNkMDBhOS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYlBsdWdpblJlcXVlc3QuaAorKysgL2Rldi9udWxsCkBA
IC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi1AaW50ZXJm
YWNlIFdlYlBsdWdpblJlcXVlc3QgOiBOU09iamVjdAotewotICAgIE5TVVJMUmVxdWVzdCAqX3Jl
cXVlc3Q7Ci0gICAgTlNTdHJpbmcgKl9mcmFtZU5hbWU7Ci0gICAgdm9pZCAqX25vdGlmeURhdGE7
Ci0gICAgQk9PTCBfZGlkU3RhcnRGcm9tVXNlckdlc3R1cmU7Ci0gICAgQk9PTCBfc2VuZE5vdGlm
aWNhdGlvbjsKLX0KLQotLSAoaWQpaW5pdFdpdGhSZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1
ZXN0IGZyYW1lTmFtZTooTlNTdHJpbmcgKilmcmFtZU5hbWUgbm90aWZ5RGF0YToodm9pZCAqKW5v
dGlmeURhdGEgc2VuZE5vdGlmaWNhdGlvbjooQk9PTClzZW5kTm90aWZpY2F0aW9uIGRpZFN0YXJ0
RnJvbVVzZXJHZXN0dXJlOihCT09MKWN1cnJlbnRFdmVudElzVXNlckdlc3R1cmU7Ci0KLS0gKE5T
VVJMUmVxdWVzdCAqKXJlcXVlc3Q7Ci0tIChOU1N0cmluZyAqKWZyYW1lTmFtZTsKLS0gKHZvaWQg
Kilub3RpZnlEYXRhOwotLSAoQk9PTClpc0N1cnJlbnRFdmVudFVzZXJHZXN0dXJlOwotLSAoQk9P
TClzZW5kTm90aWZpY2F0aW9uOwotCi1AZW5kCi0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMv
V2ViUGx1Z2luUmVxdWVzdC5tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJQ
bHVnaW5SZXF1ZXN0Lm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NDhiM2E0Yzk1
ZDkyODBhNmFmNzI1YmY2NDRjN2RlMDU3Zjk2NzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJQ
bHVnaW5SZXF1ZXN0Lm0KKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA1LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
IAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2ltcG9ydCAiV2ViUGx1Z2luUmVxdWVzdC5oIgotCi1A
aW1wbGVtZW50YXRpb24gV2ViUGx1Z2luUmVxdWVzdAotCi0tIChpZClpbml0V2l0aFJlcXVlc3Q6
KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QgZnJhbWVOYW1lOihOU1N0cmluZyAqKWZyYW1lTmFtZSBu
b3RpZnlEYXRhOih2b2lkICopbm90aWZ5RGF0YSBzZW5kTm90aWZpY2F0aW9uOihCT09MKXNlbmRO
b3RpZmljYXRpb24gZGlkU3RhcnRGcm9tVXNlckdlc3R1cmU6KEJPT0wpY3VycmVudEV2ZW50SXNV
c2VyR2VzdHVyZQotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQot
ICAgICAgICByZXR1cm4gbmlsOwotICAgIF9kaWRTdGFydEZyb21Vc2VyR2VzdHVyZSA9IGN1cnJl
bnRFdmVudElzVXNlckdlc3R1cmU7Ci0gICAgX3JlcXVlc3QgPSBbcmVxdWVzdCByZXRhaW5dOwot
ICAgIF9mcmFtZU5hbWUgPSBbZnJhbWVOYW1lIHJldGFpbl07Ci0gICAgX25vdGlmeURhdGEgPSBu
b3RpZnlEYXRhOwotICAgIF9zZW5kTm90aWZpY2F0aW9uID0gc2VuZE5vdGlmaWNhdGlvbjsKLSAg
ICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19yZXF1ZXN0IHJl
bGVhc2VdOwotICAgIFtfZnJhbWVOYW1lIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsK
LX0KLQotLSAoTlNVUkxSZXF1ZXN0ICopcmVxdWVzdAotewotICAgIHJldHVybiBfcmVxdWVzdDsK
LX0KLQotLSAoTlNTdHJpbmcgKilmcmFtZU5hbWUKLXsKLSAgICByZXR1cm4gX2ZyYW1lTmFtZTsK
LX0KLQotLSAoQk9PTClpc0N1cnJlbnRFdmVudFVzZXJHZXN0dXJlCi17Ci0gICAgcmV0dXJuIF9k
aWRTdGFydEZyb21Vc2VyR2VzdHVyZTsKLX0KLQotLSAoQk9PTClzZW5kTm90aWZpY2F0aW9uCi17
Ci0gICAgcmV0dXJuIF9zZW5kTm90aWZpY2F0aW9uOwotfQotCi0tICh2b2lkICopbm90aWZ5RGF0
YQotewotICAgIHJldHVybiBfbm90aWZ5RGF0YTsKLX0KLQotQGVuZAotCi0jZW5kaWYgLy8gRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9QbHVnaW5zL25wYXBpLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9u
cGFwaS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBjOWNiN2QxMTI1ZGZmMjQ5
YmFlYmM5MWQ3YzlhODc4NDgxNWY1NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL25wYXBpLm1tCisr
KyAvZGV2L251bGwKQEAgLTEsMjI5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
LSNpbXBvcnQgPFdlYktpdExlZ2FjeS9ucGFwaS5oPgotCi0jaW1wb3J0ICJXZWJOZXRzY2FwZVBs
dWdpblZpZXcuaCIKLSNpbXBvcnQgIldlYktpdExvZ2dpbmcuaCIKLSNpbXBvcnQgPHd0Zi9SdW5M
b29wLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1XZWJOZXRzY2FwZVBsdWdpblZp
ZXcgKnBsdWdpblZpZXdGb3JJbnN0YW5jZShOUFAgaW5zdGFuY2UpOwotCi0vLyBnZW5lcmFsIHBs
dWctaW4gdG8gYnJvd3NlciBmdW5jdGlvbnMKLQotdm9pZCogTlBOX01lbUFsbG9jKHVpbnQzMl90
IHNpemUpCi17Ci0gICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKLX0KLQotdm9pZCBOUE5fTWVtRnJl
ZSh2b2lkKiBwdHIpCi17Ci0gICAgZnJlZShwdHIpOwotfQotCi11aW50MzJfdCBOUE5fTWVtRmx1
c2godWludDMyX3Qgc2l6ZSkKLXsKLSAgICBMT0coUGx1Z2lucywgIk5QTl9NZW1GbHVzaCIpOwot
ICAgIHJldHVybiBzaXplOwotfQotCi12b2lkIE5QTl9SZWxvYWRQbHVnaW5zKE5QQm9vbCByZWxv
YWRQYWdlcykKLXsKLSAgICBMT0coUGx1Z2lucywgIk5QTl9SZWxvYWRQbHVnaW5zIik7Ci19Ci0K
LU5QRXJyb3IgTlBOX1JlcXVlc3RSZWFkKE5QU3RyZWFtKiBzdHJlYW0sIE5QQnl0ZVJhbmdlKiBy
YW5nZUxpc3QpCi17Ci0gICAgTE9HKFBsdWdpbnMsICJOUE5fUmVxdWVzdFJlYWQiKTsKLSAgICBy
ZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLX0KLQotLy8gaW5zdGFuY2Utc3BlY2lmaWMgZnVu
Y3Rpb25zCi0vLyBUaGUgcGx1Z2luIHZpZXcgaXMgYWx3YXlzIHRoZSBuZGF0YSBvZiB0aGUgaW5z
dGFuY2UuIFNvbWV0aW1lcywgcGx1Zy1pbnMgd2lsbCBjYWxsIGFuIGluc3RhbmNlLXNwZWNpZmlj
IGZ1bmN0aW9uCi0vLyB3aXRoIGEgTlVMTCBpbnN0YW5jZS4gVG8gd29ya2Fyb3VuZCB0aGlzLCBj
YWxsIHRoZSBsYXN0IHBsdWctaW4gdmlldyB0aGF0IG1hZGUgYSBjYWxsIHRvIGEgcGx1Zy1pbi4K
LS8vIEN1cnJlbnRseSwgdGhlIGN1cnJlbnQgcGx1Zy1pbiB2aWV3IGlzIG9ubHkgc2V0IGJlZm9y
ZSBOUFBfTmV3IGluIFtXZWJOZXRzY2FwZVBsdWdpblZpZXcgc3RhcnRdLgotLy8gVGhpcyBzcGVj
aWZpY2FsbHkgd29ya3MgYXJvdW5kIEZsYXNoIGFuZCBTaG9ja3dhdmUuIFdoZW4gd2UgY2FsbCBO
UFBfTmV3LCB0aGV5IGNhbGwgTlBOX1VzZXJBZ2VudCB3aXRoIGEgTlVMTCBpbnN0YW5jZS4KLVdl
Yk5ldHNjYXBlUGx1Z2luVmlldyAqcGx1Z2luVmlld0Zvckluc3RhbmNlKE5QUCBpbnN0YW5jZSkK
LXsKLSAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UtPm5kYXRhKQotICAgICAgICByZXR1cm4g
KF9fYnJpZGdlIFdlYk5ldHNjYXBlUGx1Z2luVmlldyAqKWluc3RhbmNlLT5uZGF0YTsKLSAgICBl
bHNlCi0gICAgICAgIHJldHVybiBbV2ViTmV0c2NhcGVQbHVnaW5WaWV3IGN1cnJlbnRQbHVnaW5W
aWV3XTsKLX0KLQotTlBFcnJvciBOUE5fR2V0VVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3Qg
Y2hhciogVVJMLCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpCi17Ci0gICAg
cmV0dXJuIFtwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpIGdldFVSTE5vdGlmeTpVUkwg
dGFyZ2V0OnRhcmdldCBub3RpZnlEYXRhOm5vdGlmeURhdGFdOwotfQotCi1OUEVycm9yIE5QTl9H
ZXRVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHRhcmdldCkK
LXsKLSAgICByZXR1cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgZ2V0VVJMOlVS
TCB0YXJnZXQ6dGFyZ2V0XTsKLX0KLQotTlBFcnJvciBOUE5fUG9zdFVSTE5vdGlmeShOUFAgaW5z
dGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4s
IGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpCi17Ci0gICAg
cmV0dXJuIFtwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpIHBvc3RVUkxOb3RpZnk6VVJM
IHRhcmdldDp0YXJnZXQgbGVuOmxlbiBidWY6YnVmIGZpbGU6ZmlsZSBub3RpZnlEYXRhOm5vdGlm
eURhdGFdOwotfQotCi1OUEVycm9yIE5QTl9Qb3N0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hh
ciogVVJMLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVm
LCBOUEJvb2wgZmlsZSkKLXsKLSAgICByZXR1cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0
YW5jZSkgcG9zdFVSTDpVUkwgdGFyZ2V0OnRhcmdldCBsZW46bGVuIGJ1ZjpidWYgZmlsZTpmaWxl
XTsKLX0KLQotTlBFcnJvciBOUE5fTmV3U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0
eXBlLCBjb25zdCBjaGFyKiB0YXJnZXQsIE5QU3RyZWFtKiogc3RyZWFtKQotewotICAgIHJldHVy
biBbcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKSBuZXdTdHJlYW06dHlwZSB0YXJnZXQ6
dGFyZ2V0IHN0cmVhbTpzdHJlYW1dOwotfQotCi1pbnQzMl90IE5QTl9Xcml0ZShOUFAgaW5zdGFu
Y2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyX3QgbGVuLCB2b2lkKiBidWZmZXIpCi17Ci0gICAg
cmV0dXJuIFtwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpIHdyaXRlOnN0cmVhbSBsZW46
bGVuIGJ1ZmZlcjpidWZmZXJdOwotfQotCi1OUEVycm9yIE5QTl9EZXN0cm95U3RyZWFtKE5QUCBp
bnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQotewotICAgIHJldHVy
biBbcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKSBkZXN0cm95U3RyZWFtOnN0cmVhbSBy
ZWFzb246cmVhc29uXTsKLX0KLQotY29uc3QgY2hhciogTlBOX1VzZXJBZ2VudChOUFAgaW5zdGFu
Y2UpCi17Ci0gICAgcmV0dXJuIFtwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpIHVzZXJB
Z2VudF07Ci19Ci0KLXZvaWQgTlBOX1N0YXR1cyhOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIG1l
c3NhZ2UpCi17Ci0gICAgW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgc3RhdHVzOm1l
c3NhZ2VdOwotfQotCi12b2lkIE5QTl9JbnZhbGlkYXRlUmVjdChOUFAgaW5zdGFuY2UsIE5QUmVj
dCAqaW52YWxpZFJlY3QpCi17Ci0gICAgW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkg
aW52YWxpZGF0ZVJlY3Q6aW52YWxpZFJlY3RdOwotfQotCi12b2lkIE5QTl9JbnZhbGlkYXRlUmVn
aW9uKE5QUCBpbnN0YW5jZSwgTlBSZWdpb24gaW52YWxpZFJlZ2lvbikKLXsKLSAgICBbcGx1Z2lu
Vmlld0Zvckluc3RhbmNlKGluc3RhbmNlKSBpbnZhbGlkYXRlUmVnaW9uOmludmFsaWRSZWdpb25d
OwotfQotCi12b2lkIE5QTl9Gb3JjZVJlZHJhdyhOUFAgaW5zdGFuY2UpCi17Ci0gICAgW3BsdWdp
blZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgZm9yY2VSZWRyYXddOwotfQotCi1OUEVycm9yIE5Q
Tl9HZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkICp2YWx1
ZSkKLXsKLSAgICByZXR1cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgZ2V0VmFy
aWFibGU6dmFyaWFibGUgdmFsdWU6dmFsdWVdOwotfQotCi1OUEVycm9yIE5QTl9TZXRWYWx1ZShO
UFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkICp2YWx1ZSkKLXsKLSAgICBy
ZXR1cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgc2V0VmFyaWFibGU6dmFyaWFi
bGUgdmFsdWU6dmFsdWVdOwotfQotCi0vLyBVbnN1cHBvcnRlZCBmdW5jdGlvbnMKLQotdm9pZCog
TlBOX0dldEphdmFFbnYodm9pZCkKLXsKLSAgICBMT0coUGx1Z2lucywgIk5QTl9HZXRKYXZhRW52
Iik7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXZvaWQqIE5QTl9HZXRKYXZhUGVlcihOUFAgaW5z
dGFuY2UpCi17Ci0gICAgTE9HKFBsdWdpbnMsICJOUE5fR2V0SmF2YVBlZXIiKTsKLSAgICByZXR1
cm4gTlVMTDsKLX0KLQotdm9pZCBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5zdGFu
Y2UsIE5QQm9vbCBlbmFibGVkKQotewotfQotCi12b2lkIE5QTl9Qb3BQb3B1cHNFbmFibGVkU3Rh
dGUoTlBQIGluc3RhbmNlKQotewotfQotCi12b2lkIE5QTl9QbHVnaW5UaHJlYWRBc3luY0NhbGwo
TlBQIGluc3RhbmNlLCB2b2lkICgqZnVuYykgKHZvaWQgKiksIHZvaWQgKnVzZXJEYXRhKQotewot
ICAgIFdlYk5ldHNjYXBlUGx1Z2luVmlldyAqcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JJbnN0
YW5jZShpbnN0YW5jZSk7Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3BsdWdpblZp
ZXcgPSByZXRhaW5QdHIocGx1Z2luVmlldyksIHVzZXJEYXRhLCBmdW5jXSB7Ci0gICAgICAgIGlm
ICghcGx1Z2luVmlldyB8fCAhcGx1Z2luVmlldy0+cGx1Z2luKSB7Ci0gICAgICAgICAgICAvLyBU
aGUgcGx1Zy1pbiBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZC4KLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmModXNlckRhdGEpOwotICAgIH0pOwotfQotCi11
aW50MzJfdCBOUE5fU2NoZWR1bGVUaW1lcihOUFAgaW5zdGFuY2UsIHVpbnQzMl90IGludGVydmFs
LCBOUEJvb2wgcmVwZWF0LCB2b2lkICgqdGltZXJGdW5jKShOUFAgbnBwLCB1aW50MzJfdCB0aW1l
cklEKSkKLXsKLSAgICByZXR1cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgc2No
ZWR1bGVUaW1lcldpdGhJbnRlcnZhbDppbnRlcnZhbCByZXBlYXQ6cmVwZWF0IHRpbWVyRnVuYzp0
aW1lckZ1bmNdOwotfQotCi12b2lkIE5QTl9VbnNjaGVkdWxlVGltZXIoTlBQIGluc3RhbmNlLCB1
aW50MzJfdCB0aW1lcklEKQotewotICAgIFtwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2Up
IHVuc2NoZWR1bGVUaW1lcjp0aW1lcklEXTsKLX0KLQotTlBFcnJvciBOUE5fUG9wVXBDb250ZXh0
TWVudShOUFAgaW5zdGFuY2UsIE5QTWVudSAqbWVudSkKLXsKLSAgICByZXR1cm4gW3BsdWdpblZp
ZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgcG9wVXBDb250ZXh0TWVudTptZW51XTsKLX0KLQotTlBF
cnJvciBOUE5fR2V0VmFsdWVGb3JVUkwoTlBQIGluc3RhbmNlLCBOUE5VUkxWYXJpYWJsZSB2YXJp
YWJsZSwgY29uc3QgY2hhciogdXJsLCBjaGFyKiogdmFsdWUsIHVpbnQzMl90KiBsZW4pCi17Ci0g
ICAgcmV0dXJuIFtwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpIGdldFZhcmlhYmxlOnZh
cmlhYmxlIGZvclVSTDp1cmwgdmFsdWU6dmFsdWUgbGVuZ3RoOmxlbl07Ci19Ci0KLU5QRXJyb3Ig
TlBOX1NldFZhbHVlRm9yVVJMKE5QUCBpbnN0YW5jZSwgTlBOVVJMVmFyaWFibGUgdmFyaWFibGUs
IGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdmFsdWUsIHVpbnQzMl90IGxlbikKLXsKLSAg
ICByZXR1cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgc2V0VmFyaWFibGU6dmFy
aWFibGUgZm9yVVJMOnVybCB2YWx1ZTp2YWx1ZSBsZW5ndGg6bGVuXTsKLX0KLQotTlBFcnJvciBO
UE5fR2V0QXV0aGVudGljYXRpb25JbmZvKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogcHJvdG9j
b2wsIGNvbnN0IGNoYXIqIGhvc3QsIGludDMyX3QgcG9ydCwgY29uc3QgY2hhciogc2NoZW1lLCBj
b25zdCBjaGFyICpyZWFsbSwgY2hhcioqIHVzZXJuYW1lLCB1aW50MzJfdCogdWxlbiwgY2hhcioq
IHBhc3N3b3JkLCB1aW50MzJfdCogcGxlbikKLXsKLSAgICByZXR1cm4gW3BsdWdpblZpZXdGb3JJ
bnN0YW5jZShpbnN0YW5jZSkgZ2V0QXV0aGVudGljYXRpb25JbmZvV2l0aFByb3RvY29sOnByb3Rv
Y29sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhvc3Q6aG9zdCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0OnBv
cnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2NoZW1lOnNjaGVtZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG06cmVh
bG0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVzZXJuYW1lOnVzZXJuYW1lIHVzZXJuYW1lTGVuZ3RoOnVsZW4KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhc3N3b3JkOnBhc3N3b3JkIHBhc3N3b3JkTGVuZ3RoOnBsZW5dOwotfQotCi1O
UEJvb2wgTlBOX0NvbnZlcnRQb2ludChOUFAgaW5zdGFuY2UsIGRvdWJsZSBzb3VyY2VYLCBkb3Vi
bGUgc291cmNlWSwgTlBDb29yZGluYXRlU3BhY2Ugc291cmNlU3BhY2UsIGRvdWJsZSAqZGVzdFgs
IGRvdWJsZSAqZGVzdFksIE5QQ29vcmRpbmF0ZVNwYWNlIGRlc3RTcGFjZSkKLXsKLSAgICByZXR1
cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgY29udmVydEZyb21YOnNvdXJjZVgg
YW5kWTpzb3VyY2VZIHNwYWNlOnNvdXJjZVNwYWNlIHRvWDpkZXN0WCBhbmRZOmRlc3RZIHNwYWNl
OmRlc3RTcGFjZV07Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCmluZGV4IDE2OTNkODc1
ZmUwMDg1NGY5MmQ1YmEzMTZkNWY3MzExZDg3ZDhhYjIuLmExNzUxYjAyOTg0Zjc3ZTdhN2M2ZDU1
YjU5NGZmYjg4MDAwOThmYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KQEAgLTkzLDEwICs5Myw2IEBA
CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAotI2lmIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLSNpbXBvcnQgIk5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIuaCIKLSNlbmRpZgotCiAj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgRU5BQkxFKEdFT0xPQ0FUSU9OKQogI2ltcG9ydCA8
V2ViQ29yZS9HZW9sb2NhdGlvbi5oPgogI2VuZGlmCkBAIC0yNzMsMTcgKzI2OSwxMCBAQCBQYWdl
KiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVdpbmRvdyhGcmFtZSYgZnJhbWUsIGNvbnN0IFdpbmRv
d0ZlYXR1cmVzJiBmZWF0dXJlcwogICAgICAgICAgICAgW2RpY3RGZWF0dXJlcyBzZXRPYmplY3Q6
QCgqZmVhdHVyZXMuaGVpZ2h0KSBmb3JLZXk6QCJoZWlnaHQiXTsKICAgICAgICAgCiAgICAgICAg
IG5ld1dlYlZpZXcgPSBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3
OmNyZWF0ZVdlYlZpZXdXaXRoUmVxdWVzdDp3aW5kb3dGZWF0dXJlczopLCBuaWwsIGRpY3RGZWF0
dXJlcy5nZXQoKSk7Ci0gICAgfSBlbHNlIGlmIChmZWF0dXJlcy5kaWFsb2cgJiYgW2RlbGVnYXRl
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpjcmVhdGVXZWJWaWV3TW9kYWxE
aWFsb2dXaXRoUmVxdWVzdDopXSkgeworICAgIH0gZWxzZSBpZiAoZmVhdHVyZXMuZGlhbG9nICYm
IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6Y3JlYXRlV2Vi
Vmlld01vZGFsRGlhbG9nV2l0aFJlcXVlc3Q6KV0pCiAgICAgICAgIG5ld1dlYlZpZXcgPSBDYWxs
VUlEZWxlZ2F0ZShtX3dlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmNyZWF0ZVdlYlZpZXdNb2Rh
bERpYWxvZ1dpdGhSZXF1ZXN0OiksIG5pbCk7Ci0gICAgfSBlbHNlIHsKKyAgICBlbHNlCiAgICAg
ICAgIG5ld1dlYlZpZXcgPSBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcsIEBzZWxlY3Rvcih3ZWJW
aWV3OmNyZWF0ZVdlYlZpZXdXaXRoUmVxdWVzdDopLCBuaWwpOwotICAgIH0KLQotI2lmIFVTRShQ
TFVHSU5fSE9TVF9QUk9DRVNTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBp
ZiAobmV3V2ViVmlldykKLSAgICAgICAgV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2Vy
OjpzaW5nbGV0b24oKS5kaWRDcmVhdGVXaW5kb3coKTsKLSNlbmRpZgotICAgIAogICAgIHJldHVy
biBjb3JlKG5ld1dlYlZpZXcpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbSBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCmluZGV4
IDM1NmEzNmEyNzk1ZjM4M2JiYjRjZWZkMTgzMTc4YzdiODE4NThkZjYuLmFjOWMxZWY4Yjc4NDE1
MDJmZTljOGY5MTBmZDViOGZjMmY4ZjU3NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1t
CkBAIC01OCw4ICs1OCw2IEBACiAjaW1wb3J0ICJXZWJLaXRWZXJzaW9uQ2hlY2tzLmgiCiAjaW1w
b3J0ICJXZWJOU1VSTEV4dHJhcy5oIgogI2ltcG9ydCAiV2ViTmF2aWdhdGlvbkRhdGEuaCIKLSNp
bXBvcnQgIldlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5oIgotI2ltcG9ydCAiV2ViTmV0c2NhcGVQ
bHVnaW5WaWV3LmgiCiAjaW1wb3J0ICJXZWJQYW5lbEF1dGhlbnRpY2F0aW9uSGFuZGxlci5oIgog
I2ltcG9ydCAiV2ViUGx1Z2luQ29udHJvbGxlci5oIgogI2ltcG9ydCAiV2ViUGx1Z2luUGFja2Fn
ZS5oIgpAQCAtMTM1LDExICsxMzMsNiBAQAogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29h
Lmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotI2lmIFVTRShQTFVHSU5fSE9T
VF9QUk9DRVNTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSNpbXBvcnQgIk5ldHNj
YXBlUGx1Z2luSG9zdE1hbmFnZXIuaCIKLSNpbXBvcnQgIldlYkhvc3RlZE5ldHNjYXBlUGx1Z2lu
Vmlldy5oIgotI2VuZGlmCi0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2ltcG9ydCA8V2Vi
Q29yZS9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dBS0NsaXBW
aWV3Lmg+CkBAIC04NDAsMTIgKzgzMyw2IEBAIFdlYkNvcmU6OkZyYW1lKiBXZWJGcmFtZUxvYWRl
ckNsaWVudDo6ZGlzcGF0Y2hDcmVhdGVQYWdlKGNvbnN0IFdlYkNvcmU6Ok5hdmlnYXRpCiAgICAg
V2ViVmlldyAqbmV3V2ViVmlldyA9IFtbY3VycmVudFdlYlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJk
ZXJdIHdlYlZpZXc6Y3VycmVudFdlYlZpZXcgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjcmVhdGVXZWJWaWV3V2l0aFJlcXVlc3Q6bmlsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93
RmVhdHVyZXM6ZmVhdHVyZXMuZ2V0KCldOwotICAgIAotI2lmIFVTRShQTFVHSU5fSE9TVF9QUk9D
RVNTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBpZiAobmV3V2ViVmlldykK
LSAgICAgICAgV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpzaW5nbGV0b24oKS5k
aWRDcmVhdGVXaW5kb3coKTsKLSNlbmRpZgotICAgICAgICAKICAgICByZXR1cm4gY29yZShbbmV3
V2ViVmlldyBtYWluRnJhbWVdKTsKIH0KIApAQCAtMTc3OSw4MyArMTc2Niw2IEBAIHB1YmxpYzoK
IH07CiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAotI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQotCi1jbGFzcyBOZXRzY2FwZVBsdWdpbldpZGdldCA6IHB1YmxpYyBQbHVn
aW5XaWRnZXQgewotcHVibGljOgotICAgIE5ldHNjYXBlUGx1Z2luV2lkZ2V0KFdlYkJhc2VOZXRz
Y2FwZVBsdWdpblZpZXcgKnZpZXcpCi0gICAgICAgIDogUGx1Z2luV2lkZ2V0KHZpZXcpCi0gICAg
ewotICAgIH0KLQotICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gWyhXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3ICop
cGxhdGZvcm1XaWRnZXQoKSBwbHVnaW5MYXllcl07Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29s
IGdldEZvcm1WYWx1ZShTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgTlNTdHJpbmcqIG5z
VmFsdWUgPSAwOwotICAgICAgICBpZiAoWyhXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3ICopcGxh
dGZvcm1XaWRnZXQoKSBnZXRGb3JtVmFsdWU6Jm5zVmFsdWVdKSB7Ci0gICAgICAgICAgICBpZiAo
IW5zVmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgdmFs
dWUgPSBTdHJpbmcoYWRvcHROUyhuc1ZhbHVlKS5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdmly
dHVhbCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OkV2ZW50JiBldmVudCkKLSAgICB7Ci0gICAg
ICAgIGF1dG8qIGZyYW1lID0gV2ViQ29yZTo6RnJhbWU6OmZyYW1lRm9yV2lkZ2V0KCp0aGlzKTsK
LSAgICAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAg
ICAgIE5TRXZlbnQqIGN1cnJlbnROU0V2ZW50ID0gZnJhbWUtPmV2ZW50SGFuZGxlcigpLmN1cnJl
bnROU0V2ZW50KCk7Ci0gICAgICAgIGlmIChldmVudC50eXBlKCkgPT0gV2ViQ29yZTo6ZXZlbnRO
YW1lcygpLm1vdXNlbW92ZUV2ZW50KQotICAgICAgICAgICAgWyhXZWJCYXNlTmV0c2NhcGVQbHVn
aW5WaWV3ICopcGxhdGZvcm1XaWRnZXQoKSBoYW5kbGVNb3VzZU1vdmVkOmN1cnJlbnROU0V2ZW50
XTsKLSAgICAgICAgZWxzZSBpZiAoZXZlbnQudHlwZSgpID09IFdlYkNvcmU6OmV2ZW50TmFtZXMo
KS5tb3VzZW92ZXJFdmVudCkKLSAgICAgICAgICAgIFsoV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmll
dyAqKXBsYXRmb3JtV2lkZ2V0KCkgaGFuZGxlTW91c2VFbnRlcmVkOmN1cnJlbnROU0V2ZW50XTsK
LSAgICAgICAgZWxzZSBpZiAoZXZlbnQudHlwZSgpID09IFdlYkNvcmU6OmV2ZW50TmFtZXMoKS5t
b3VzZW91dEV2ZW50KQotICAgICAgICAgICAgWyhXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3ICop
cGxhdGZvcm1XaWRnZXQoKSBoYW5kbGVNb3VzZUV4aXRlZDpjdXJyZW50TlNFdmVudF07Ci0gICAg
ICAgIGVsc2UgaWYgKGV2ZW50LnR5cGUoKSA9PSBXZWJDb3JlOjpldmVudE5hbWVzKCkuY29udGV4
dG1lbnVFdmVudCkKLSAgICAgICAgICAgIGV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7IC8vIFdl
IGRvbid0IGtub3cgaWYgdGhlIHBsdWctaW4gaGFzIGhhbmRsZWQgbW91c2Vkb3duIGV2ZW50IGJ5
IGRpc3BsYXlpbmcgYSBjb250ZXh0IG1lbnUsIHNvIHdlIG5ldmVyIHdhbnQgV2ViS2l0IHRvIHNo
b3cgYSBkZWZhdWx0IG9uZS4KLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xpcFJlY3RDaGFu
Z2VkKCkKLSAgICB7Ci0gICAgICAgIC8vIENoYW5naW5nIHRoZSBjbGlwIHJlY3QgZG9lc24ndCBh
ZmZlY3QgdGhlIHZpZXcgaGllcmFyY2h5LCBzbyB0aGUgcGx1Z2luIG11c3QgYmUgdG9sZCBhYm91
dCB0aGUgY2hhbmdlIGRpcmVjdGx5LgotICAgICAgICBbKFdlYkJhc2VOZXRzY2FwZVBsdWdpblZp
ZXcgKilwbGF0Zm9ybVdpZGdldCgpIHVwZGF0ZUFuZFNldFdpbmRvd107Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlXaWRnZXQoV2ViQ29yZTo6V2lkZ2V0Tm90aWZp
Y2F0aW9uIG5vdGlmaWNhdGlvbikKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobm90aWZpY2F0aW9u
KSB7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6V2lsbFBhaW50RmxhdHRlbmVkOiB7Ci0gICAgICAg
ICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAgICAgICAgIFsoV2ViQmFzZU5l
dHNjYXBlUGx1Z2luVmlldyAqKXBsYXRmb3JtV2lkZ2V0KCkgY2FjaGVTbmFwc2hvdF07Ci0gICAg
ICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIFdlYkNvcmU6OkRpZFBhaW50RmxhdHRlbmVkOiB7Ci0gICAg
ICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAgICAgICAgIFsoV2ViQmFz
ZU5ldHNjYXBlUGx1Z2luVmlldyAqKXBsYXRmb3JtV2lkZ2V0KCkgY2xlYXJDYWNoZWRTbmFwc2hv
dF07Ci0gICAgICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfTsKLQotI2lmIFVTRShQTFVHSU5f
SE9TVF9QUk9DRVNTKQotI2RlZmluZSBORVRTQ0FQRV9QTFVHSU5fVklFVyBXZWJIb3N0ZWROZXRz
Y2FwZVBsdWdpblZpZXcKLSNlbHNlCi0jZGVmaW5lIE5FVFNDQVBFX1BMVUdJTl9WSUVXIFdlYk5l
dHNjYXBlUGx1Z2luVmlldwotI2VuZGlmCi0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLQogc3RhdGljIGJvb2wgc2hvdWxkQmxvY2tQbHVnaW4oV2ViQmFzZVBsdWdpblBh
Y2thZ2UgKnBsdWdpblBhY2thZ2UpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMTkzOCwyMiAr
MTg0OCw2IEBAIFJlZlB0cjxXZWJDb3JlOjpXaWRnZXQ+IFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpj
cmVhdGVQbHVnaW4oY29uc3QgV2ViQ29yZTo6SW50U2l6CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBpZiAoW3BsdWdpblBhY2thZ2UgaXNLaW5kT2ZDbGFzczpbV2ViUGx1Z2luUGFja2Fn
ZSBjbGFzc11dKQogICAgICAgICAgICAgICAgIHZpZXcgPSBwbHVnaW5WaWV3KG1fd2ViRnJhbWUu
Z2V0KCksIChXZWJQbHVnaW5QYWNrYWdlICopcGx1Z2luUGFja2FnZSwgYXR0cmlidXRlS2V5cy5n
ZXQoKSwgY3JlYXRlTlNBcnJheShwYXJhbVZhbHVlcykuZ2V0KCksIGJhc2VVUkwsIGtpdCgmZWxl
bWVudCksIGxvYWRNYW51YWxseSk7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0g
ICAgICAgICAgICBlbHNlIGlmIChbcGx1Z2luUGFja2FnZSBpc0tpbmRPZkNsYXNzOltXZWJOZXRz
Y2FwZVBsdWdpblBhY2thZ2UgY2xhc3NdXSAmJiBbd2ViVmlldy5wcmVmZXJlbmNlcyBfYm9vbFZh
bHVlRm9yS2V5OkAiV2ViS2l0TlBBUElQbHVnSW5zRW5hYmxlZEZvclRlc3RpbmdJbldlYktpdExl
Z2FjeSJdKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBwbHVnaW5WaWV3ID0gYWRvcHROUyhbW05F
VFNDQVBFX1BMVUdJTl9WSUVXIGFsbG9jXQotICAgICAgICAgICAgICAgICAgICBpbml0V2l0aEZy
YW1lOk5TTWFrZVJlY3QoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKQotICAgICAg
ICAgICAgICAgICAgICBwbHVnaW5QYWNrYWdlOihXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UgKilw
bHVnaW5QYWNrYWdlCi0gICAgICAgICAgICAgICAgICAgIFVSTDpwbHVnaW5VUkwKLSAgICAgICAg
ICAgICAgICAgICAgYmFzZVVSTDpiYXNlVVJMCi0gICAgICAgICAgICAgICAgICAgIE1JTUVUeXBl
Ok1JTUVUeXBlCi0gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUtleXM6YXR0cmlidXRlS2V5
cy5nZXQoKQotICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXM6Y3JlYXRlTlNBcnJh
eShwYXJhbVZhbHVlcykuZ2V0KCkKLSAgICAgICAgICAgICAgICAgICAgbG9hZE1hbnVhbGx5Omxv
YWRNYW51YWxseQotICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiZlbGVtZW50XSk7Ci0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE5ldHNjYXBlUGx1Z2luV2lkZ2V0KHBs
dWdpblZpZXcuZ2V0KCkpKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZgogICAgICAgICB9CiAgICAg
fSBlbHNlCiAgICAgICAgIGVycm9yQ29kZSA9IFdlYktpdEVycm9yQ2Fubm90RmluZFBsdWdJbjsK
QEAgLTE5OTgsMTEgKzE4OTIsNiBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZWRpcmVj
dERhdGFUb1BsdWdpbihXZWJDb3JlOjpXaWRnZXQmIHBsdWdpbldpZGdldCkKIAogICAgIE5TVmll
dyAqcGx1Z2luVmlldyA9IHBsdWdpbldpZGdldC5wbGF0Zm9ybVdpZGdldCgpOwogCi0jaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgaWYgKFtwbHVnaW5WaWV3IGlzS2luZE9mQ2xh
c3M6W05FVFNDQVBFX1BMVUdJTl9WSUVXIGNsYXNzXV0pCi0gICAgICAgIFtyZXByZXNlbnRhdGlv
biBfcmVkaXJlY3REYXRhVG9NYW51YWxMb2FkZXI6KE5FVFNDQVBFX1BMVUdJTl9WSUVXICopcGx1
Z2luVmlldyBmb3JQbHVnaW5WaWV3OnBsdWdpblZpZXddOwotICAgIGVsc2UKLSNlbmRpZgogICAg
IHsKICAgICAgICAgV2ViSFRNTFZpZXcgKmRvY3VtZW50VmlldyA9IChXZWJIVE1MVmlldyAqKVtb
bV93ZWJGcmFtZS5nZXQoKSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CiAgICAgICAgIEFTU0VS
VChbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggZjkwNzcxMTNi
N2YxYWJmYzIzMmIzNjEwNjY2NDExMGRmM2JkM2M5Yy4uNjNkNzgxOTk0ZmFiZjQ2NWJlOGU1NTBl
YThjZjhiNmM3ODJiMzI5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tCkBAIC0xMTMzLDI4ICsxMTMzLDYgQEAgc3RhdGljIFdlYkZyYW1lTG9hZFR5cGUg
dG9XZWJGcmFtZUxvYWRUeXBlKFdlYkNvcmU6OkZyYW1lTG9hZFR5cGUgZnJhbWVMb2FkVHlwZSkK
ICAgICByZXR1cm4gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCkt
PnBlbmRpbmdVbmxvYWRFdmVudExpc3RlbmVycygpOwogfQogCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0tICh2b2lkKV9yZWN1cnNpdmVfcmVzdW1lTnVsbEV2ZW50c0ZvckFsbE5l
dHNjYXBlUGx1Z2lucwotewotICAgIGF1dG8gY29yZUZyYW1lID0gY29yZShzZWxmKTsKLSAgICBm
b3IgKGF1dG8qIGZyYW1lID0gY29yZUZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LnRyYXZlcnNlTmV4dChjb3JlRnJhbWUpKSB7Ci0gICAgICAgIE5TVmlldyA8V2ViRG9jdW1lbnRW
aWV3PiAqZG9jdW1lbnRWaWV3ID0gW1traXQoZnJhbWUpIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3
XTsKLSAgICAgICAgaWYgKFtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcg
Y2xhc3NdXSkKLSAgICAgICAgICAgIFsoV2ViSFRNTFZpZXcgKilkb2N1bWVudFZpZXcgX3Jlc3Vt
ZU51bGxFdmVudHNGb3JBbGxOZXRzY2FwZVBsdWdpbnNdOwotICAgIH0KLX0KLQotLSAodm9pZClf
cmVjdXJzaXZlX3BhdXNlTnVsbEV2ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2lucwotewotICAgIGF1
dG8gY29yZUZyYW1lID0gY29yZShzZWxmKTsKLSAgICBmb3IgKGF1dG8qIGZyYW1lID0gY29yZUZy
YW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dChjb3JlRnJhbWUp
KSB7Ci0gICAgICAgIE5TVmlldyA8V2ViRG9jdW1lbnRWaWV3PiAqZG9jdW1lbnRWaWV3ID0gW1tr
aXQoZnJhbWUpIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKLSAgICAgICAgaWYgKFtkb2N1bWVu
dFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKLSAgICAgICAgICAgIFso
V2ViSFRNTFZpZXcgKilkb2N1bWVudFZpZXcgX3BhdXNlTnVsbEV2ZW50c0ZvckFsbE5ldHNjYXBl
UGx1Z2luc107Ci0gICAgfQotfQotI2VuZGlmCi0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQog
CiAtICh2b2lkKXNldFRpbWVvdXRzUGF1c2VkOihCT09MKWZsYWcKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWVQcml2YXRlLmggYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lUHJpdmF0ZS5oCmluZGV4IDBjZGQyOGVmZTI5
OGNkNzRjNTFkMDVjNzY5YTMzYTQ5MWE4YTZiMmEuLjcyNmYwNzkxZjYwODY2MDRlNjU2YjQzNzE5
MGYzOGI5MGYxODhkZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViRnJhbWVQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJGcmFtZVByaXZhdGUuaApAQCAtMjksMTIgKzI5LDYgQEAKICNpbXBvcnQgPFdlYktpdExl
Z2FjeS9XZWJGcmFtZS5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNCYXNlLmg+CiAKLSNp
ZiAhVEFSR0VUX09TX0lQSE9ORQotI2lmICFkZWZpbmVkKEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5f
QVBJKQotI2RlZmluZSBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQSSAwCi0jZW5kaWYKLSNlbmRp
ZgotCiAjaWYgVEFSR0VUX09TX0lQSE9ORQogI2ltcG9ydCA8Q29yZVRleHQvQ29yZVRleHQuaD4K
ICNpbXBvcnQgPFdlYktpdExlZ2FjeS9XQUtBcHBLaXRTdHVicy5oPgpAQCAtMjExLDEzICsyMDUs
NiBAQCB0eXBlZGVmIGVudW0gewogCiAtICh1bnNpZ25lZClfcGVuZGluZ0ZyYW1lVW5sb2FkRXZl
bnRDb3VudDsKIAotI2lmICFUQVJHRVRfT1NfSVBIT05FCi0jaWYgRU5BQkxFX05FVFNDQVBFX1BM
VUdJTl9BUEkKLS0gKHZvaWQpX3JlY3Vyc2l2ZV9yZXN1bWVOdWxsRXZlbnRzRm9yQWxsTmV0c2Nh
cGVQbHVnaW5zOwotLSAodm9pZClfcmVjdXJzaXZlX3BhdXNlTnVsbEV2ZW50c0ZvckFsbE5ldHNj
YXBlUGx1Z2luczsKLSNlbmRpZgotI2VuZGlmCi0KIC0gKE5TU3RyaW5nICopX3N0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyB3aXRoR2xvYmFs
T2JqZWN0OihKU09iamVjdFJlZilnbG9iYWxPYmplY3QgaW5TY3JpcHRXb3JsZDooV2ViU2NyaXB0
V29ybGQgKil3b3JsZDsKIC0gKEpTR2xvYmFsQ29udGV4dFJlZilfZ2xvYmFsQ29udGV4dEZvclNj
cmlwdFdvcmxkOihXZWJTY3JpcHRXb3JsZCAqKXdvcmxkOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQppbmRleCBjMTc2NWNmYjRlNjY1YzhlYTc4
NzVjN2FjZDQ1ZTQ5ZTFhNTMxODI2Li44MzhlNDEzMzgxYTgwNzVhM2Q2MjQ1OTQ1NTI2N2E1YmJi
NTVhOTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhU
TUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZp
ZXcubW0KQEAgLTYxLDcgKzYxLDYgQEAKICNpbXBvcnQgIldlYk5TUHJpbnRPcGVyYXRpb25FeHRy
YXMuaCIKICNpbXBvcnQgIldlYk5TVVJMRXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJOU1ZpZXdFeHRy
YXMuaCIKLSNpbXBvcnQgIldlYk5ldHNjYXBlUGx1Z2luVmlldy5oIgogI2ltcG9ydCAiV2ViTm9k
ZUhpZ2hsaWdodC5oIgogI2ltcG9ydCAiV2ViUGx1Z2luQ29udHJvbGxlci5oIgogI2ltcG9ydCAi
V2ViUHJlZmVyZW5jZXMuaCIKQEAgLTY5NSwxMiArNjk0LDYgQEAgc3RhdGljIGJvb2wgbmVlZHND
dXJzb3JSZWN0c1N1cHBvcnRBdFBvaW50KE5TV2luZG93KiB3aW5kb3csIE5TUG9pbnQgcG9pbnQp
CiAgICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAg
IC8vIE5laXRoZXIgZG8gTlBBUEkgcGx1Zy1pbnMuCi0gICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xh
c3M6W1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgY2xhc3NdXSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotI2VuZGlmCi0KICAgICAvLyBOb24tV2ViIGNvbnRlbnQsIFdlYlBERlZpZXcsIGFuZCBX
ZWJLaXQgcGx1Zy1pbnMgdXNlIG5vcm1hbCBjdXJzb3IgaGFuZGxpbmcuCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC04NDksOSArODQyLDYgQEAgc3RhdGljIHZvaWQgaGFyZHdhcmVLZXlib2FyZEF2
YWlsYWJpbGl0eUNoYW5nZWRDYWxsYmFjayhDRk5vdGlmaWNhdGlvbkNlbnRlclJlZiwKIC0gKHZv
aWQpX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmVBbmRBZGp1c3RWaWV3U2l6ZTsKIC0gKHZv
aWQpX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2ZTsKICNlbmRpZgotI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotLSAodm9pZClfd2ViX21ha2VQbHVnaW5TdWJ2aWV3c1BlcmZv
cm1TZWxlY3RvcjooU0VMKXNlbGVjdG9yIHdpdGhPYmplY3Q6KGlkKW9iamVjdDsKLSNlbmRpZgog
QGVuZAogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMTQyMywyMSArMTQxMyw2IEBAIEFMTE9XX0RF
UFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCi0j
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLS0gKHZvaWQpX3dlYl9tYWtlUGx1Z2lu
U3Vidmlld3NQZXJmb3JtU2VsZWN0b3I6KFNFTClzZWxlY3RvciB3aXRoT2JqZWN0OihpZClvYmpl
Y3QKLXsKLSAgICAvLyBDb3B5IHN1YnZpZXdzIGJlY2F1c2UgW3NlbGYgc3Vidmlld3NdIHJldHVy
bnMgdGhlIHZpZXcncyBtdXRhYmxlIGludGVybmFsIGFycmF5LAotICAgIC8vIGFuZCB3ZSBtdXN0
IGF2b2lkIG11dGF0aW5nIHRoZSBhcnJheSB3aGlsZSBlbnVtZXJhdGluZyBpdC4KLSAgICBhdXRv
IHN1YnZpZXdzQ29weSA9IGFkb3B0TlMoW3NlbGYuc3Vidmlld3MgY29weV0pOwotICAgIGZvciAo
TlNWaWV3ICp2aWV3IGluIHN1YnZpZXdzQ29weS5nZXQoKSkgewotICAgICAgICBpZiAoW3ZpZXcg
aXNLaW5kT2ZDbGFzczpbV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyBjbGFzc11dKQotICAgICAg
ICAgICAgW3ZpZXcgcGVyZm9ybVNlbGVjdG9yOnNlbGVjdG9yIHdpdGhPYmplY3Q6b2JqZWN0XTsK
LSAgICB9Ci19Ci0KLSNlbmRpZgotCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmll
dyAoV2ViUHJpdmF0ZSkKQEAgLTIzNjUsMjAgKzIzNDAsNiBAQCBBTExPV19ERVBSRUNBVEVEX0RF
Q0xBUkFUSU9OU19FTkQKIAogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAotI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKSAKLQotLSAodm9pZClfcGF1c2VOdWxsRXZlbnRzRm9yQWxsTmV0
c2NhcGVQbHVnaW5zIAotewotICAgIFtzZWxmIF93ZWJfbWFrZVBsdWdpblN1YnZpZXdzUGVyZm9y
bVNlbGVjdG9yOkBzZWxlY3RvcihzdG9wVGltZXJzKSB3aXRoT2JqZWN0Om5pbF07Ci19Ci0KLS0g
KHZvaWQpX3Jlc3VtZU51bGxFdmVudHNGb3JBbGxOZXRzY2FwZVBsdWdpbnMKLXsKLSAgICBbc2Vs
ZiBfd2ViX21ha2VQbHVnaW5TdWJ2aWV3c1BlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IocmVzdGFy
dFRpbWVycykgd2l0aE9iamVjdDpuaWxdOwotfQotCi0jZW5kaWYgCi0KIC0gKEJPT0wpX2lzVXNp
bmdBY2NlbGVyYXRlZENvbXBvc2l0aW5nCiB7CiAgICAgcmV0dXJuIF9wcml2YXRlLT5sYXllckhv
c3RpbmdWaWV3ICE9IG5pbDsKQEAgLTMyNTAsMTYgKzMyMTEsMTAgQEAgSUdOT1JFX1dBUk5JTkdT
X0VORAogCiAtICh2b2lkKXZpZXdXaWxsTW92ZVRvSG9zdFdpbmRvdzooTlNXaW5kb3cgKilob3N0
V2luZG93CiB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgW3NlbGYgX3dl
Yl9tYWtlUGx1Z2luU3Vidmlld3NQZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHZpZXdXaWxsTW92
ZVRvSG9zdFdpbmRvdzopIHdpdGhPYmplY3Q6aG9zdFdpbmRvd107Ci0jZW5kaWYKIH0KIAogLSAo
dm9pZCl2aWV3RGlkTW92ZVRvSG9zdFdpbmRvdwogewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotICAgIFtzZWxmIF93ZWJfbWFrZVBsdWdpblN1YnZpZXdzUGVyZm9ybVNlbGVjdG9y
OkBzZWxlY3Rvcih2aWV3RGlkTW92ZVRvSG9zdFdpbmRvdykgd2l0aE9iamVjdDpuaWxdOwotI2Vu
ZGlmCiB9CiAKIC0gKHZvaWQpYWRkU3VidmlldzooTlNWaWV3ICopdmlldwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlld1ByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXdQcml2YXRlLmgKaW5kZXgg
Yjc1ODYyZmEwNTRlMGVjNzJlYWQ1ZTRmMTRmZGU2ZGRjZTgwMGJjNC4uZTY4NjQ5OGVjNjhkMzU5
NzEzMmEwNzViOGRmZGNjOTBhOWNiMzM0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJIVE1MVmlld1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3UHJpdmF0ZS5oCkBAIC0yOCwxMiArMjgsNiBAQAog
CiAjaW1wb3J0IDxXZWJLaXRMZWdhY3kvV2ViSFRNTFZpZXcuaD4KIAotI2lmICFUQVJHRVRfT1Nf
SVBIT05FCi0jaWYgIWRlZmluZWQoRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkpCi0jZGVmaW5l
IEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJIDAKLSNlbmRpZgotI2VuZGlmCi0KIEBjbGFzcyBE
T01Eb2N1bWVudEZyYWdtZW50OwogQGNsYXNzIERPTU5vZGU7CiBAY2xhc3MgRE9NUmFuZ2U7CkBA
IC0xMTMsMTEgKzEwNyw2IEBAIGV4dGVybiBjb25zdCBmbG9hdCBfV2ViSFRNTFZpZXdQcmludGlu
Z01heGltdW1TaHJpbmtGYWN0b3I7CiAKICNlbmRpZgogCi0jaWYgZGVmaW5lZChFTkFCTEVfTkVU
U0NBUEVfUExVR0lOX0FQSSkgJiYgRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkKLS0gKHZvaWQp
X3Jlc3VtZU51bGxFdmVudHNGb3JBbGxOZXRzY2FwZVBsdWdpbnM7Ci0tICh2b2lkKV9wYXVzZU51
bGxFdmVudHNGb3JBbGxOZXRzY2FwZVBsdWdpbnM7Ci0jZW5kaWYKLQogLSAoQk9PTClfaXNVc2lu
Z0FjY2VsZXJhdGVkQ29tcG9zaXRpbmc7CiAtIChOU1ZpZXcgKilfY29tcG9zaXRpbmdMYXllcnNI
b3N0aW5nVmlldzsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1t
CmluZGV4IDAwMmEyM2NiNmJkODkxOGJlZDk4YTg1MWM0NjM2ZmZiMjFjOWZkYzguLmFiYTEwNDEz
Y2Q4Nzg5YjdkYTMzYWM5NjNjYjgwZTMxMDIyZTM4NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTQzLDcgKzQzLDYgQEAKICNpbXBvcnQgIldlYkFw
cGxpY2F0aW9uQ2FjaGVJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViQXJjaGl2ZS5oIgogI2ltcG9y
dCAiV2ViQmFja0ZvcndhcmRMaXN0SW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkJhc2VOZXRzY2Fw
ZVBsdWdpblZpZXcuaCIKICNpbXBvcnQgIldlYkJyb2FkY2FzdENoYW5uZWxSZWdpc3RyeS5oIgog
I2ltcG9ydCAiV2ViQ2FjaGUuaCIKICNpbXBvcnQgIldlYkNocm9tZUNsaWVudC5oIgo=
</data>
<flag name="commit-queue"
          id="467354"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442777</attachid>
            <date>2021-10-28 20:44:15 -0700</date>
            <delta_ts>2021-10-28 22:01:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232462-20211028204413.patch</filename>
            <type>text/plain</type>
            <size>1662920</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1MDEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDZhOTAxZjkxMDVjZjhiN2E0Y2RhNzk2
YzYxM2E4MzE1NDk4ODVmNzIuLjZhNzMzMDQzM2I3NzIxMzMxZjFjMWE0NDExNzFkYWVlYTJiZjA2
NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMTAtMjggIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgY29kZSBpbnNpZGUgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzI0NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJdCBpcyBub3QgdXNlZCBhbnl3aGVyZSBzaW5jZSBodHRwczovL3Ry
YWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjg1MDAzL3dlYmtpdAorCisgICAgICAgICogd3RmL1Bs
YXRmb3JtRW5hYmxlLmg6CisgICAgICAgICogd3RmL1BsYXRmb3JtRW5hYmxlQ29jb2EuaDoKKwog
MjAyMS0xMC0yOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIERpc2FibGUgTkVUU0NBUEVfUExVR0lOX0FQSSBhdCBidWlsZCB0aW1lIG9uIG1h
Y09TIGFuZCBXaW5kb3dzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDc2OGUwN2E0MDMxYTYzYmM2YjkxZmU4MjU5
OWY5NDE2OWNlYTI1YS4uYjRlNzcxZjAzYTQ3OWI4MTQ2OTQ4YTMzZGY4ZmZiMzUyMjYwZGI4ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDIxLTEwLTI4ICBBbGV4IENocmlzdGVuc2Vu
ICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIGNvZGUgaW5zaWRl
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNDYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMu
dHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENvbnRyb2xsZXI6OlNjcmlwdENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1NjcmlwdE5QT2JqZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgICogYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRy
b2xsZXI6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KToKKyAgICAgICAgKiBicmlkZ2Uv
TlBfanNvYmplY3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9OUF9qc29iamVjdC5o
OiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9jL0NSdW50aW1lT2JqZWN0LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBicmlkZ2UvYy9DUnVudGltZU9iamVjdC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGJyaWRnZS9jL2NfY2xhc3MuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9jL2Nf
Y2xhc3MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBicmlkZ2UvYy9jX2luc3RhbmNlLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBicmlkZ2UvYy9jX2luc3RhbmNlLmg6IFJlbW92ZWQuCisgICAgICAg
ICogYnJpZGdlL2MvY19ydW50aW1lLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBicmlkZ2UvYy9j
X3J1bnRpbWUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBicmlkZ2UvYy9jX3V0aWxpdHkuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9jL2NfdXRpbGl0eS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGJyaWRnZS9ucHJ1bnRpbWUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9ucHJ1
bnRpbWVfaW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9ucHJ1bnRpbWVfaW50ZXJu
YWwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBicmlkZ2UvbnBydW50aW1lX3ByaXYuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcDoKKyAgICAgICAgKiBwYWdl
L0ZyYW1lLmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL25wYXBpLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGx1Z2lucy9ucGZ1bmN0aW9ucy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsdWdpbnMvbnBy
dW50aW1lLmg6IFJlbW92ZWQuCisgICAgICAgICogcGx1Z2lucy9ucHR5cGVzLmg6IFJlbW92ZWQu
CisKIDIwMjEtMTAtMjggIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4K
IAogICAgICAgICBUaGUgc3BhY2UgZ2x5cGggaW4gdGhlIEZpbGljdWRpIGZvbnQgaXMgbm90IHN1
YnN0aXR1dGVkIGJ5IHNoYXBpbmcgaW4gdGhlIGNvbXBsZXggdGV4dCBjb2RlcGF0aCwgdGhlcmVi
eSBicmVha2luZyB0aGUgdmlzdWFsIGVmZmVjdCBvZiB0aGUgZm9udApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAxZThj
NGE2YzRiNmY5OWFmMjVjOWRjMjk1ZmRjZThjZWM0MmRiOTA2Li4zZDFmODlmZjZhOWU0MzcxZGYz
ODBlMTJjYzljYzA5OWIwYjJhZTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2NyBAQAorMjAyMS0x
MC0yOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAg
ICAgIFJlbW92ZSBjb2RlIGluc2lkZSBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjQ2MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ29uZmlndXJhdGlv
bnMvUGx1Z2luU2VydmljZS54Y2NvbmZpZzoKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9XZWJL
aXQueGNjb25maWc6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlLmNwcDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6cmVtb3ZlRGF0YVJlY29yZHMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNob3VsZFJlbW92ZURhdGFSZWNvcmRzIGNvbnN0KToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjptb25pdG9yZWREYXRhVHlwZXMpOgorICAgICAgICAqIFBsYXRmb3Jt
TWFjLmNtYWtlOgorICAgICAgICAqIFBsdWdpblByb2Nlc3MvRW50cnlQb2ludC9Db2NvYS9YUENT
ZXJ2aWNlL1BsdWdpblNlcnZpY2UuSW5mby5wbGlzdDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVn
aW5Qcm9jZXNzL0VudHJ5UG9pbnQvQ29jb2EvWFBDU2VydmljZS9QbHVnaW5TZXJ2aWNlRW50cnlQ
b2ludC5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xs
ZXJQcm94eS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250
cm9sbGVyUHJveHkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNv
bnRyb2xsZXJQcm94eS5tZXNzYWdlcy5pbjogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5Qcm9j
ZXNzL1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogUGx1
Z2luUHJvY2Vzcy9QbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBQbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFBs
dWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5oOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpblBy
b2Nlc3MvUGx1Z2luUHJvY2Vzcy5tZXNzYWdlcy5pbjogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVn
aW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBQ
bHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICog
UGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbjogUmVtb3ZlZC4K
KyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Db250cm9sbGVyUHJveHlNYWMubW06
IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc01hYy5t
bTogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9jZXNzU2hp
bS5oOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpblByb2Nlc3MvbWFjL1BsdWdpblByb2Nlc3NT
aGltLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpblByb2Nlc3MvbWFjL2NvbS5hcHBsZS5X
ZWJLaXQucGx1Z2luLWNvbW1vbi5zYi5pbjogUmVtb3ZlZC4KKyAgICAgICAgKiBSZXNvdXJjZXMv
UGx1Z0luU2FuZGJveFByb2ZpbGVzL2NuLm1pY3JvZG9uZS5jbWIuc2FmYXJpLnNiOiBSZW1vdmVk
LgorICAgICAgICAqIFJlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmFwcGxlLkJv
Y29tU3VibWl0Q3RybC5zYjogUmVtb3ZlZC4KKyAgICAgICAgKiBSZXNvdXJjZXMvUGx1Z0luU2Fu
ZGJveFByb2ZpbGVzL2NvbS5hcHBsZS5OUFNhZmVJbnB1dC5zYjogUmVtb3ZlZC4KKyAgICAgICAg
KiBSZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5hcHBsZS5OUFNhZmVTdWJtaXQu
c2I6IFJlbW92ZWQuCisgICAgICAgICogUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9j
b20uYXBwbGUuUXVpY2tUaW1lIFBsdWdpbi5wbHVnaW4uc2I6IFJlbW92ZWQuCisgICAgICAgICog
UmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uYXBwbGUuYXBwc3RvcmUuQ29kZVJl
ZGVlbWVyTmV0c2NhcGVQbHVnaW4uc2I6IFJlbW92ZWQuCisgICAgICAgICogUmVzb3VyY2VzL1Bs
dWdJblNhbmRib3hQcm9maWxlcy9jb20uYXBwbGUuaXN0LmRzLmFwcGxlY29ubmVjdC53ZWJwbHVn
aW4uc2I6IFJlbW92ZWQuCisgICAgICAgICogUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxl
cy9jb20uY2ZjYS5ucFNlY0VkaXRDdGwuTUFDLkJPQy5wbHVnaW4uc2I6IFJlbW92ZWQuCisgICAg
ICAgICogUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uY2lzY28ud2ViZXgucGx1
Z2luLmdwYzY0LnNiOiBSZW1vdmVkLgorICAgICAgICAqIFJlc291cmNlcy9QbHVnSW5TYW5kYm94
UHJvZmlsZXMvY29tLmNtYmNoaW5hLkNNQlNlY3VyaXR5LnNiOiBSZW1vdmVkLgorICAgICAgICAq
IFJlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmZ0c2FmZS5OUEFQSS1Db3JlLVNh
ZmUtU29mdEtleWJhb3JkLnBsdWdpbi5yZmMxMDM0aWRlbnRpZmllci5zYjogUmVtb3ZlZC4KKyAg
ICAgICAgKiBSZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5nb29nbGUuZ29vZ2xl
dGFsa2Jyb3dzZXJwbHVnaW4uc2I6IFJlbW92ZWQuCisgICAgICAgICogUmVzb3VyY2VzL1BsdWdJ
blNhbmRib3hQcm9maWxlcy9jb20uZ29vZ2xlLm8xZGJyb3dzZXJwbHVnaW4uc2I6IFJlbW92ZWQu
CisgICAgICAgICogUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20ubWFjcm9tZWRp
YS5GbGFzaCBQbGF5ZXIgRVNSLnBsdWdpbi5zYjogUmVtb3ZlZC4KKyAgICAgICAgKiBSZXNvdXJj
ZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5tYWNyb21lZGlhLkZsYXNoIFBsYXllci5wbHVn
aW4uc2I6IFJlbW92ZWQuCisgICAgICAgICogUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxl
cy9jb20ubWljcm9zb2Z0LlNpbHZlcmxpZ2h0UGx1Z2luLnNiOiBSZW1vdmVkLgorICAgICAgICAq
IFJlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLm9yYWNsZS5qYXZhLkphdmFBcHBs
ZXRQbHVnaW4uc2I6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL0FQSS9jL1dLUGx1Z2luSW5m
b3JtYXRpb24uY3BwOgorICAgICAgICAoV0tQbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZUlkZW50aWZp
ZXJLZXkpOgorICAgICAgICAoV0tQbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZVZlcnNpb25LZXkpOgor
ICAgICAgICAoV0tQbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZVNob3J0VmVyc2lvbktleSk6CisgICAg
ICAgIChXS1BsdWdpbkluZm9ybWF0aW9uUGF0aEtleSk6CisgICAgICAgIChXS1BsdWdpbkluZm9y
bWF0aW9uRGlzcGxheU5hbWVLZXkpOgorICAgICAgICAoV0tQbHVnaW5JbmZvcm1hdGlvbkRlZmF1
bHRMb2FkUG9saWN5S2V5KToKKyAgICAgICAgKFdLUGx1Z2luSW5mb3JtYXRpb25VcGRhdGVQYXN0
TGFzdEJsb2NrZWRWZXJzaW9uSXNLbm93bkF2YWlsYWJsZUtleSk6CisgICAgICAgIChXS1BsdWdp
bkluZm9ybWF0aW9uSGFzU2FuZGJveFByb2ZpbGVLZXkpOgorICAgICAgICAoV0tQbHVnaW5JbmZv
cm1hdGlvbkZyYW1lVVJMS2V5KToKKyAgICAgICAgKFdLUGx1Z2luSW5mb3JtYXRpb25NSU1FVHlw
ZUtleSk6CisgICAgICAgIChXS1BsdWdpbkluZm9ybWF0aW9uUGFnZVVSTEtleSk6CisgICAgICAg
IChXS1BsdWdpbkluZm9ybWF0aW9uUGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkxLZXkpOgorICAgICAg
ICAoV0tQbHVnaW5JbmZvcm1hdGlvblBsdWdpblVSTEtleSk6CisgICAgICAgIChXS1BsdWdJbklu
Zm9ybWF0aW9uUmVwbGFjZW1lbnRPYnNjdXJlZEtleSk6CisgICAgICAgICogU2hhcmVkL1BsdWdp
bnMvTlBJZGVudGlmaWVyRGF0YS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL1BsdWdp
bnMvTlBJZGVudGlmaWVyRGF0YS5oOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9QbHVnaW5z
L05QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQv
UGx1Z2lucy9OUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5oOiBSZW1vdmVkLgorICAgICAgICAqIFNo
YXJlZC9QbHVnaW5zL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLm1lc3NhZ2VzLmluOiBSZW1vdmVk
LgorICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL05QT2JqZWN0UHJveHkuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL05QT2JqZWN0UHJveHkuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBTaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogU2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBTaGFyZWQvUGx1Z2lucy9OUFZhcmlhbnREYXRhLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBTaGFyZWQvUGx1Z2lucy9OUFZhcmlhbnREYXRhLmg6IFJlbW92ZWQuCisgICAgICAgICogU2hh
cmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5Nb2R1bGUuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luTW9kdWxlLmg6
IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvUGx1Z2luSW5mb3Jt
YXRpb24uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL1Bs
dWdpbkluZm9ybWF0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL1BsdWdpbnMvTmV0
c2NhcGUvbWFjL05ldHNjYXBlUGx1Z2luTW9kdWxlTWFjLm1tOiBSZW1vdmVkLgorICAgICAgICAq
IFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL21hYy9QbHVnaW5JbmZvcm1hdGlvbk1hYy5tbTogUmVt
b3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9QbHVnaW5Nb2R1bGVJbmZvLmg6IFJlbW92
ZWQuCisgICAgICAgICogU2hhcmVkL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9QbHVnaW5Q
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL1Bs
dWdpbnMvUGx1Z2luUXVpcmtzLmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL1BsdWdpbnMv
bWFjL1BsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFNo
YXJlZC9QbHVnaW5zL21hYy9QbHVnaW5TYW5kYm94UHJvZmlsZS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIFNoYXJlZC9QbHVnaW5zL21hYy9QbHVnaW5TYW5kYm94UHJvZmlsZS5tbTogUmVtb3ZlZC4K
KyAgICAgICAgKiBTaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAg
ICAqIFNoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGE6Om93bmVyUHJvY2Vzcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhOjppc29sYXRlZENvcHkgY29uc3QpOgorICAg
ICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YS5oOgorICAgICAgICAqIFNoYXJl
ZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUuaDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJ
TG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uQ2xp
ZW50Lmg6CisgICAgICAgIChBUEk6Ok5hdmlnYXRpb25DbGllbnQ6OmNvbnRlbnRSdWxlTGlzdE5v
dGlmaWNhdGlvbik6CisgICAgICAgIChBUEk6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZEZhaWxUb0lu
aXRpYWxpemVQbHVnSW4pOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpOYXZpZ2F0aW9uQ2xpZW50
OjpkaWRCbG9ja0luc2VjdXJlUGx1Z2luVmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChBUEk6
Ok5hdmlnYXRpb25DbGllbnQ6OmRlY2lkZVBvbGljeUZvclBsdWdpbkxvYWQpOiBEZWxldGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVUlDbGllbnQuaDoKKyAgICAgICAgKEFQSTo6VUlD
bGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6
OnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oOgorICAgICAgICAoV2ViS2l0Ojp0b1dLUGx1Z2luTG9h
ZFBvbGljeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OnRvV0tQbHVnaW5Mb2FkQ2xpZW50
UG9saWN5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6dG9QbHVnaW5Nb2R1bGVMb2FkUG9s
aWN5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6dG9QbHVnaW5Mb2FkQ2xpZW50UG9saWN5
KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcDoKKyAg
ICAgICAgKFdLQ29udGV4dFNldEFkZGl0aW9uYWxQbHVnaW5zRGlyZWN0b3J5KToKKyAgICAgICAg
KFdLQ29udGV4dFJlZnJlc2hQbHVnSW5zKToKKyAgICAgICAgKFdLQ29udGV4dEFkZFN1cHBvcnRl
ZFBsdWdpbik6CisgICAgICAgIChXS0NvbnRleHRDbGVhclN1cHBvcnRlZFBsdWdpbnMpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgorICAgICAgICAoV0tQYWdlU2V0UGFn
ZVVJQ2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHA6
CisgICAgICAgIChXS1ByZWZlcmVuY2VzU2V0UGx1Z2luU2FuZGJveFByb2ZpbGVzRW5hYmxlZEZv
ckFsbFBsdWdpbnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9tYWMvV0tDb250ZXh0UHJp
dmF0ZU1hYy5tbToKKyAgICAgICAgKFdLQ29udGV4dENvcHlQbHVnSW5JbmZvRm9yQnVuZGxlSWRl
bnRpZmllcik6CisgICAgICAgIChXS0NvbnRleHRHZXRJbmZvRm9ySW5zdGFsbGVkUGx1Z0lucyk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1tOgorICAgICAg
ICAoLVtXS1ByZWZlcmVuY2VzIF9zZXRFeHBlcmltZW50YWxQbHVnSW5TYW5kYm94UHJvZmlsZXNF
bmFibGVkOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5t
bToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfcGx1Z2luUHJvY2Vzc0NvdW50XSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhUmVjb3JkSW50ZXJuYWwuaDoK
KyAgICAgICAgKFdlYktpdDo6dG9XZWJzaXRlRGF0YVR5cGUpOgorICAgICAgICAoV2ViS2l0Ojp0
b1dLV2Vic2l0ZURhdGFUeXBlcyk6CisgICAgICAgICogVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nl
c3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkF1eGlsaWFyeVByb2Nlc3NQcm94eTo6Z2V0
TGF1bmNoT3B0aW9ucyk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbToKKyAgICAgICAgKFdlYktp
dDo6dG9XS1BsdWdJblVuYXZhaWxhYmlsaXR5UmVhc29uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tl
ZCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29j
b2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3Vw
cHJlc3Npb25TdGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmg6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpwbHVnaW5Db21wbGV4VGV4dElucHV0U3Rh
dGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1w
bC5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRpc2FibGVDb21wbGV4VGV4dElu
cHV0SWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aGFuZGxlUGx1
Z2luQ29tcGxleFRleHRJbnB1dEtleURvd24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6dHJ5SGFuZGxlUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6dHJ5UG9zdFByb2Nlc3NQbHVnaW5Db21wbGV4VGV4dElucHV0S2V5
RG93bik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRQbHVnaW5Db21wbGV4VGV4
dElucHV0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0
UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlQW5kSWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9MYXVuY2hlci9tYWMvUHJvY2Vzc0xhdW5jaGVyTWFjLm1tOgorICAgICAgICAoV2Vi
S2l0OjpzZXJ2aWNlTmFtZSk6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5oOiBSZW1vdmVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NNYW5hZ2VyLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzTWFuYWdlci5o
OiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94
eS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vz
c1Byb3h5Lmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJv
Y2Vzc1Byb3h5Lm1lc3NhZ2VzLmluOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9QbHVn
aW5zL21hYy9QbHVnaW5JbmZvU3RvcmVNYWMubW06IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL1BsdWdpbnMvbWFjL1BsdWdpblByb2Nlc3NNYW5hZ2VyTWFjLm1tOiBSZW1vdmVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL21hYy9QbHVnaW5Qcm9jZXNzUHJveHlNYWMubW06IFJl
bW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y2FuU2hvd01JTUVUeXBlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpmaW5kUGx1Z2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5Ojp1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZEZhaWxUb0luaXRpYWxpemVQbHVnaW4pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZEJsb2NrSW5zZWN1cmVQ
bHVnaW5WZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2VuZE1lbW9yeVByZXNzdXJlRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6YWRkU3VwcG9ydGVkUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OmNsZWFyU3VwcG9ydGVkUGx1Z2lucyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjpzZXRBZGRpdGlvbmFsUGx1Z2luc0RpcmVjdG9yeSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWZyZXNoUGx1Z2lucyk6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94
eTo6Z2V0UGx1Z2lucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94
eTo6Z2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRl
RGF0YVJlY29yZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhUmVjb3JkOjp0b3BQ
cml2YXRlbHlDb250cm9sbGVkRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFS
ZWNvcmQ6Omlzb2xhdGVkQ29weSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
UmVjb3JkOjphZGRQbHVnaW5EYXRhSG9zdE5hbWUpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVJlY29yZC5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6cGx1Z2lucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBh
Z2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRQbHVnaW5D
b21wbGV4VGV4dElucHV0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMv
UGFnZUNsaWVudEltcGxNYWMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJ
bXBsTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2V0UGx1Z2luQ29t
cGxleFRleHRJbnB1dFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dl
YlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRQbHVn
aW5Db21wbGV4VGV4dElucHV0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIFdlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9KU05QTWV0aG9kLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5oOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oOiBSZW1vdmVkLgorICAgICAgICAq
IFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5oOiBSZW1vdmVk
LgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RN
YXAuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
UFJ1bnRpbWVPYmplY3RNYXAuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvTlBSdW50aW1lVXRpbGl0aWVzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lVXRpbGl0aWVzLmg6IFJlbW92ZWQu
CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlQnJvd3NlckZ1
bmNzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TmV0c2NhcGVCcm93c2VyRnVuY3MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFdl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5oOiBSZW1vdmVkLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpblN0cmVhbS5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNj
YXBlUGx1Z2luU3RyZWFtLmg6IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5z
L05ldHNjYXBlL21hYy9OZXRzY2FwZVBsdWdpbk1hYy5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvbWFjL1BsdWdpblByb3h5TWFjLm1tOiBSZW1vdmVk
LgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Db250cm9sbGVyLmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rp
b24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW46IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5o
OiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29u
bmVjdGlvbk1hbmFnZXIubWVzc2FnZXMuaW46IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblByb3h5LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luUHJveHkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luUHJveHkubWVzc2FnZXMuaW46IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3
OjpTdHJlYW06OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3
OjpkZXN0cm95UGx1Z2luQW5kUmVzZXQpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojpk
aWRGYWlsVG9Jbml0aWFsaXplUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6
c2NyaXB0T2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6cGFnZU11dGVkU3Rh
dGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojp3aW5kb3dTY3JpcHRO
UE9iamVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OnBsdWdpbkVs
ZW1lbnROUE9iamVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OmV2
YWx1YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6c2V0UGx1Z2lu
SXNQbGF5aW5nQXVkaW8pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojpp
c011dGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6c2V0
Q29tcGxleFRleHRJbnB1dFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luVmlldy5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9XZWJQbHVn
aW5JbmZvUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5JbmZvUHJvdmlk
ZXI6OnJlZnJlc2hQbHVnaW5zKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luSW5mb1Byb3Zp
ZGVyOjpwbHVnaW5JbmZvKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luSW5mb1Byb3ZpZGVy
Ojpwb3B1bGF0ZVBsdWdpbkNhY2hlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1Bs
dWdpbnMvV2ViUGx1Z2luSW5mb1Byb3ZpZGVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJv
bWVDbGllbnQ6OnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZCBjb25zdCk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6Y3JlYXRlUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y2Fu
UGx1Z2luSGFuZGxlUmVzcG9uc2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OldlYlByb2Nlc3MpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFsaXplQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3M6OnJlZnJlc2hQbHVnaW5zKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzczo6cGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuaDoKKwogMjAyMS0xMC0yOCAgU2lodWkgTGl1ICA8c2lo
dWlfbGl1QGFwcGxlLmNvbT4KIAogICAgICAgICBSZWxlYXNlIEZpbGVTeXN0ZW1TdG9yYWdlSGFu
ZGxlIHdoZW4gaXQgaXMgbm90IGluIHVzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwppbmRleCBjNzZiMDUw
NGZkMmQzNDIwMjhmYTI4ZjM5ZDBlNzhmOWMyZDg1YTRhLi4xODAwYTk1NDMxN2QwYTFhNDhiYThi
NTBlNDgxOTJkNjliYjYyZGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDIxLTEwLTI4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmVtb3ZlIGNvZGUgaW5zaWRlIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNDYy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0
Zm9ybU1hYy5jbWFrZToKKyAgICAgICAgKiBXZWJLaXRMZWdhY3kueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKwogMjAyMS0xMC0yMiAgSWFuIEFuZGVyc29uICA8aWFuYUBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRkIGEgbW9kdWxlIG1hcCBmaWxlIGZvciBQcml2YXRlRnJhbWV3b3Jrcy9XZWJL
aXRMZWdhY3kKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCAyMWVhMTMwNjkwNDYxM2I0
NGFhNTgzYmRjNGU1MjJhMzY0YTNjMjQ0Li42ZTE5MzVkMzZjZDZiZTY2Yzk5MDZhNmZhNTljZjI0
ODUwNzJkNTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAK
KzIwMjEtMTAtMjggIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZW1vdmUgY29kZSBpbnNpZGUgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI0NjIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsdWdp
bnMvSG9zdGVkL0hvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtLmg6IFJlbW92ZWQuCisgICAgICAg
ICogUGx1Z2lucy9Ib3N0ZWQvSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW06IFJlbW92ZWQu
CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5oOiBS
ZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFn
ZXIubW06IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5I
b3N0UHJveHkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBs
dWdpbkhvc3RQcm94eS5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL0hv
c3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW06IFJlbW92ZWQuCisgICAgICAgICog
UGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdp
bnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW06IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9I
b3N0ZWQvUHJveHlSdW50aW1lT2JqZWN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9I
b3N0ZWQvUHJveHlSdW50aW1lT2JqZWN0Lm1tOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMv
SG9zdGVkL1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5oOiBSZW1vdmVkLgorICAgICAgICAq
IFBsdWdpbnMvSG9zdGVkL1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbTogUmVtb3ZlZC4K
KyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5BZ2VudC5kZWZzOiBSZW1vdmVk
LgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkFnZW50UmVwbHkuZGVmczog
UmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5DbGllbnQuZGVm
czogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5Ib3N0LmRl
ZnM6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luSG9zdFR5
cGVzLmRlZnM6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2lu
SG9zdFR5cGVzLmg6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvV2ViVGV4dElu
cHV0V2luZG93Q29udHJvbGxlci5oOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVk
L1dlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIubTogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVn
aW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVn
aW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW06IFJlbW92ZWQuCisgICAgICAgICogUGx1
Z2lucy9XZWJCYXNlUGx1Z2luUGFja2FnZS5oOgorICAgICAgICAqIFBsdWdpbnMvV2ViQmFzZVBs
dWdpblBhY2thZ2UubW06CisgICAgICAgICgrW1dlYkJhc2VQbHVnaW5QYWNrYWdlIHBsdWdpbldp
dGhQYXRoOl0pOgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRs
ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luRXZlbnRI
YW5kbGVyLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5F
dmVudEhhbmRsZXJDb2NvYS5oOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2Nh
cGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYS5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5z
L1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMv
V2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMv
V2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBQbHVnaW5zL1dl
Yk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFBsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5WaWV3Lmg6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9XZWJOZXRz
Y2FwZVBsdWdpblZpZXcubW06IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9XZWJQbHVnaW5D
b250cm9sbGVyLm1tOgorICAgICAgICAoLVtXZWJQbHVnaW5Db250cm9sbGVyIGRlc3Ryb3lQbHVn
aW46XSk6CisgICAgICAgICgtW1dlYlBsdWdpbkNvbnRyb2xsZXIgZGVzdHJveUFsbFBsdWdpbnNd
KToKKyAgICAgICAgKiBQbHVnaW5zL1dlYlBsdWdpbkRhdGFiYXNlLm1tOgorICAgICAgICAoUGx1
Z2luUGFja2FnZUNhbmRpZGF0ZXM6OnVwZGF0ZSk6CisgICAgICAgICgtW1dlYlBsdWdpbkRhdGFi
YXNlIHJlbW92ZVBsdWdpbkluc3RhbmNlVmlld3NGb3I6XSk6CisgICAgICAgICgtW1dlYlBsdWdp
bkRhdGFiYXNlIGRlc3Ryb3lBbGxQbHVnaW5JbnN0YW5jZVZpZXdzXSk6CisgICAgICAgICogUGx1
Z2lucy9XZWJQbHVnaW5SZXF1ZXN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9XZWJQ
bHVnaW5SZXF1ZXN0Lm06IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2lucy9ucGFwaS5tbTogUmVt
b3ZlZC4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06CisgICAg
ICAgIChXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVdpbmRvdyk6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW06CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNs
aWVudDo6ZGlzcGF0Y2hDcmVhdGVQYWdlKToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpjcmVhdGVQbHVnaW4pOgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnJlZGlyZWN0
RGF0YVRvUGx1Z2luKToKKyAgICAgICAgKE5ldHNjYXBlUGx1Z2luV2lkZ2V0OjpOZXRzY2FwZVBs
dWdpbldpZGdldCk6IERlbGV0ZWQuCisgICAgICAgIChOZXRzY2FwZVBsdWdpbldpZGdldDo6cGxh
dGZvcm1MYXllciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChOZXRzY2FwZVBsdWdpbldpZGdl
dDo6Z2V0Rm9ybVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKE5ldHNjYXBlUGx1Z2luV2lkZ2V0
OjpoYW5kbGVFdmVudCk6IERlbGV0ZWQuCisgICAgICAgIChOZXRzY2FwZVBsdWdpbldpZGdldDo6
Y2xpcFJlY3RDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKE5ldHNjYXBlUGx1Z2luV2lkZ2V0
Ojpub3RpZnlXaWRnZXQpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06
CisgICAgICAgICgtW1dlYkZyYW1lIF9yZWN1cnNpdmVfcmVzdW1lTnVsbEV2ZW50c0ZvckFsbE5l
dHNjYXBlUGx1Z2luc10pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVjdXJzaXZl
X3BhdXNlTnVsbEV2ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2luc10pOiBEZWxldGVkLgorICAgICAg
ICAqIFdlYlZpZXcvV2ViRnJhbWVQcml2YXRlLmg6CisgICAgICAgICogV2ViVmlldy9XZWJIVE1M
Vmlldy5tbToKKyAgICAgICAgKG5lZWRzQ3Vyc29yUmVjdHNTdXBwb3J0QXRQb2ludCk6CisgICAg
ICAgICgtW1dlYkhUTUxWaWV3IHZpZXdXaWxsTW92ZVRvSG9zdFdpbmRvdzpdKToKKyAgICAgICAg
KC1bV2ViSFRNTFZpZXcgdmlld0RpZE1vdmVUb0hvc3RXaW5kb3ddKToKKyAgICAgICAgKC1bV2Vi
SFRNTFZpZXcgX3dlYl9tYWtlUGx1Z2luU3Vidmlld3NQZXJmb3JtU2VsZWN0b3I6d2l0aE9iamVj
dDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3BhdXNlTnVsbEV2ZW50c0Zv
ckFsbE5ldHNjYXBlUGx1Z2luc10pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBf
cmVzdW1lTnVsbEV2ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2luc10pOiBEZWxldGVkLgorICAgICAg
ICAqIFdlYlZpZXcvV2ViSFRNTFZpZXdQcml2YXRlLmg6CisgICAgICAgICogV2ViVmlldy9XZWJW
aWV3Lm1tOgorCiAyMDIxLTEwLTI4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgRGlzYWJsZSBORVRTQ0FQRV9QTFVHSU5fQVBJIGF0IGJ1aWxk
IHRpbWUgb24gbWFjT1MgYW5kIFdpbmRvd3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtRW5hYmxlLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCmluZGV4IDY2
MmE4ZGE4YmFjYjRjZDQ5ZWZlM2ZmYThjZDE2MTMxOTc2NDJlNTEuLjdjYTRjYTExNjhkNTk4YTA3
OWZiMjdiNjBlYzFiZWNmZjQ3OWExNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtRW5hYmxlLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGUuaApAQCAtMzg3
LDEwICszODcsNiBAQAogI2RlZmluZSBFTkFCTEVfTU9VU0VfRk9SQ0VfRVZFTlRTIDEKICNlbmRp
ZgogCi0jaWYgIWRlZmluZWQoRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkpCi0jZGVmaW5lIEVO
QUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJIDAKLSNlbmRpZgotCiAjaWYgIWRlZmluZWQoRU5BQkxF
X05FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKICNkZWZpbmUgRU5BQkxFX05FVFNDQVBF
X1BMVUdJTl9NRVRBREFUQV9DQUNIRSAwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtRW5hYmxlQ29jb2EuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxl
Q29jb2EuaAppbmRleCBkMWRiMjIyMWIyNmE2ZWNmN2Q4YmI4YzkwMDk4NWU5YTE3NzYzOTA1Li42
YWIwM2E3YmFiMmQ3ZTE2YjJjMzM4NmQ3OWI3NDBjNmM0YjEzYjcwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZUNvY29hLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxh
dGZvcm1FbmFibGVDb2NvYS5oCkBAIC00MTgsMTAgKzQxOCw2IEBACiAjZGVmaW5lIEVOQUJMRV9O
QVZJR0FUT1JfU1RBTkRBTE9ORSAxCiAjZW5kaWYKIAotI2lmICFkZWZpbmVkKEVOQUJMRV9ORVRT
Q0FQRV9QTFVHSU5fQVBJKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKQotI2RlZmluZSBFTkFCTEVf
TkVUU0NBUEVfUExVR0lOX0FQSSAwCi0jZW5kaWYKLQogI2lmICFkZWZpbmVkKEVOQUJMRV9ORVRX
T1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKICNkZWZpbmUgRU5BQkxFX05FVFdP
UktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OIDEKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21h
a2UKaW5kZXggNzFhNmViYmU5MzhiZWE3Yzk2MGViYWJjNGFlNzY2NmY1OGVlNDQ5Zi4uMmFlZWY0
M2FlOTQ0ZGE1MDZjNmUwYzM2NWRmODY5YTRkYTg5YjM3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBA
IC0zMzAsMTYgKzMzMCwxMCBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJT
CiAKICAgICBicmlkZ2UvQnJpZGdlLmgKICAgICBicmlkZ2UvSWRlbnRpZmllclJlcC5oCi0gICAg
YnJpZGdlL05QX2pzb2JqZWN0LmgKLSAgICBicmlkZ2UvbnBydW50aW1lX2ltcGwuaAotICAgIGJy
aWRnZS9ucHJ1bnRpbWVfaW50ZXJuYWwuaAogICAgIGJyaWRnZS9ydW50aW1lX21ldGhvZC5oCiAg
ICAgYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmgKICAgICBicmlkZ2UvcnVudGltZV9yb290LmgKIAot
ICAgIGJyaWRnZS9jL2NfaW5zdGFuY2UuaAotICAgIGJyaWRnZS9jL2NfdXRpbGl0eS5oCi0KICAg
ICBicmlkZ2UvanNjL0JyaWRnZUpTQy5oCiAKICAgICBjb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5l
ZEZpbHRlcnNBbHBoYWJldC5oCkBAIC0xNTg1LDEwICsxNTc5LDYgQEAgc2V0KFdlYkNvcmVfUFJJ
VkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsdWdpbnMvUGx1Z2luRGF0YS5oCiAgICAgcGx1
Z2lucy9QbHVnaW5JbmZvUHJvdmlkZXIuaAogICAgIHBsdWdpbnMvUGx1Z2luVmlld0Jhc2UuaAot
ICAgIHBsdWdpbnMvbnBhcGkuaAotICAgIHBsdWdpbnMvbnBmdW5jdGlvbnMuaAotICAgIHBsdWdp
bnMvbnBydW50aW1lLmgKLSAgICBwbHVnaW5zL25wdHlwZXMuaAogCiAgICAgcmVuZGVyaW5nL0Jy
ZWFrTGluZXMuaAogICAgIHJlbmRlcmluZy9DbGlwUmVjdC5oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGVm
Mjc5NjgxNmQ1NTJjMWJjMTM1NzA0MThjMTVlMzQzMDcxNjQzODYuLjY2ODE4NWM5ODU5OWQwNTIz
ZjlkNzQ3MDk5MDE2NzlkOTg3YjlhYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC01OTYsMTQgKzU5Niw3
IEBAIGJpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKIGJpbmRpbmdz
L2pzL1dvcmtlck1vZHVsZVNjcmlwdExvYWRlci5jcHAKIGJpbmRpbmdzL2pzL1dpbmRvd1Byb3h5
LmNwcAogYnJpZGdlL0lkZW50aWZpZXJSZXAuY3BwCi1icmlkZ2UvTlBfanNvYmplY3QuY3BwCi1i
cmlkZ2UvYy9DUnVudGltZU9iamVjdC5jcHAKLWJyaWRnZS9jL2NfY2xhc3MuY3BwCi1icmlkZ2Uv
Yy9jX2luc3RhbmNlLmNwcAotYnJpZGdlL2MvY19ydW50aW1lLmNwcAotYnJpZGdlL2MvY191dGls
aXR5LmNwcAogYnJpZGdlL2pzYy9CcmlkZ2VKU0MuY3BwCi1icmlkZ2UvbnBydW50aW1lLmNwcAog
YnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCiBicmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCiBicmlk
Z2UvcnVudGltZV9vYmplY3QuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggODE5NTI5N2VhNmU1YmFmOTIyNTg3ZTZlNjc2YThk
MmMxMjNjOGQyOC4uOWMwZTM2ZDI5MmY1NmFlZTU5ZjVhNjkwZWJlZGZkMDYxZTliNjBhOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtNDc1LDcgKzQ3NSw2IEBACiAJCTFBMEQ1NzQxMEE1Qzc4NjcwMDdFREQ0QyAvKiBKU092ZXJm
bG93RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBMEQ1NzNGMEE1Qzc4NjcwMDdFREQ0QyAvKiBKU092ZXJmbG93RXZlbnQuaCAqLzsgfTsKIAkJ
MUExNDE0QjUxM0EwRjA1MDAwMTk5OTZDIC8qIFdlYktpdEZvbnRGYW1pbHlOYW1lcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTE0MTRCMzEzQTBG
MDUwMDAxOTk5NkMgLyogV2ViS2l0Rm9udEZhbWlseU5hbWVzLmNwcCAqLzsgfTsKIAkJMUExNDE0
QjYxM0EwRjA1MDAwMTk5OTZDIC8qIFdlYktpdEZvbnRGYW1pbHlOYW1lcy5oIGluIENvcHkgR2Vu
ZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUExNDE0
QjQxM0EwRjA1MDAwMTk5OTZDIC8qIFdlYktpdEZvbnRGYW1pbHlOYW1lcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07Ci0JCTFBMjE5QjNCMERDQTg3QUIwMDQwRTNBMCAv
KiBucGZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUEyMTlCM0EwRENBODdBQjAwNDBFM0EwIC8qIG5wZnVuY3Rpb25zLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUEyMjQ2NEEwQ0M5OERE
QjAwQzA1MjQwIC8qIFNRTGl0ZURhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTIyNDY0NDBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlRGF0
YWJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxQTIyNDY0QzBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlU3RhdGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTIyNDY0NjBDQzk4RERCMDBD
MDUyNDAgLyogU1FMaXRlU3RhdGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUEyMjQ2NEUwQ0M5OEREQjAwQzA1MjQwIC8qIFNRTGl0ZVRy
YW5zYWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQTIyNDY0ODBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlVHJhbnNhY3Rpb24uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDkyLDE0ICs0OTEs
NiBAQAogCQkxQTRBMkRGMDBBMUI4NTJBMDBDODA3RjggLyogSlNIVE1MQW5jaG9yRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE0QTJERUMw
QTFCODUyQTAwQzgwN0Y4IC8qIEpTSFRNTEFuY2hvckVsZW1lbnQuaCAqLzsgfTsKIAkJMUE0QTk1
NEUwQjRFRENDQjAwMkQ4QzNDIC8qIFNoYXJlZEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE0QTk1NEMwQjRFRENDQjAwMkQ4QzNDIC8qIFNo
YXJlZEJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTFBNERBNDIyMUNERDNBODMwMEY0NDczQyAvKiBMaW5rSWNvbkNvbGxlY3Rvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE0REE0MjAxQ0RE
M0E4MzAwRjQ0NzNDIC8qIExpbmtJY29uQ29sbGVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMUE1NjlDRjgwRDdFMkI4MjAwN0MzOTgzIC8q
IGNfY2xhc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBNTY5Q0M3MEQ3RTJCODIwMDdDMzk4MyAvKiBjX2NsYXNzLmggKi87IH07Ci0JCTFBNTY5Q0ZB
MEQ3RTJCODIwMDdDMzk4MyAvKiBjX2luc3RhbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNDOTBEN0UyQjgyMDA3QzM5ODMgLyogY19pbnN0
YW5jZS5oICovOyB9OwotCQkxQTU2OUNGQzBEN0UyQjgyMDA3QzM5ODMgLyogY19ydW50aW1lLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNDQjBE
N0UyQjgyMDA3QzM5ODMgLyogY19ydW50aW1lLmggKi87IH07Ci0JCTFBNTY5Q0ZFMEQ3RTJCODIw
MDdDMzk4MyAvKiBjX3V0aWxpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBNTY5Q0NEMEQ3RTJCODIwMDdDMzk4MyAvKiBjX3V0aWxpdHkuaCAqLzsg
fTsKLQkJMUE1NjlEMEIwRDdFMkI4MjAwN0MzOTgzIC8qIE5QX2pzb2JqZWN0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNEQjBEN0UyQjgyMDA3
QzM5ODMgLyogTlBfanNvYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQkxQTU2OUQwRjBEN0UyQjgyMDA3QzM5ODMgLyogbnBydW50aW1lX2lt
cGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNTY5
Q0RGMEQ3RTJCODIwMDdDMzk4MyAvKiBucHJ1bnRpbWVfaW1wbC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTFBNTY5RDEwMEQ3RTJCODIwMDdDMzk4
MyAvKiBucHJ1bnRpbWVfaW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBNTY5Q0UwMEQ3RTJCODIwMDdDMzk4MyAvKiBucHJ1bnRpbWVfaW50
ZXJuYWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQkxQTU2OUQxMTBEN0UyQjgyMDA3QzM5ODMgLyogbnBydW50aW1lX3ByaXYuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNTY5Q0UxMEQ3RTJCODIwMDdD
Mzk4MyAvKiBucHJ1bnRpbWVfcHJpdi5oICovOyB9OwogCQkxQTU2OUQxMjBEN0UyQjgyMDA3QzM5
ODMgLyogb2JqY19jbGFzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUE1NjlDRTMwRDdFMkI4MjAwN0MzOTgzIC8qIG9iamNfY2xhc3MuaCAqLzsgfTsK
IAkJMUE1NjlEMTMwRDdFMkI4MjAwN0MzOTgzIC8qIG9iamNfY2xhc3MubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNFNDBEN0UyQjgyMDA3QzM5
ODMgLyogb2JqY19jbGFzcy5tbSAqLzsgfTsKIAkJMUE1NjlEMTQwRDdFMkI4MjAwN0MzOTgzIC8q
IG9iamNfaGVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQTU2OUNFNTBEN0UyQjgyMDA3QzM5ODMgLyogb2JqY19oZWFkZXIuaCAqLzsgfTsKQEAg
LTU1MCw5ICs1NDEsNiBAQAogCQkxQThGNkJDMTBEQjU1Q0RDMDAxREI3OTQgLyogQXBwbGljYXRp
b25DYWNoZVJlc291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQThGNkJCNjBEQjU1Q0RDMDAxREI3OTQgLyogQXBwbGljYXRpb25DYWNoZVJlc291
cmNlLmggKi87IH07CiAJCTFBOEY2QkMzMERCNTVDREMwMDFEQjc5NCAvKiBET01BcHBsaWNhdGlv
bkNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QThGNkJCODBEQjU1Q0RDMDAxREI3OTQgLyogRE9NQXBwbGljYXRpb25DYWNoZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTFBOEY2QkM2MERCNTVDREMwMDFEQjc5
NCAvKiBBcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOEY2QkJCMERCNTVDREMwMDFEQjc5NCAvKiBB
cHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuaCAqLzsgfTsKLQkJMUE5MjdGRDIxNDE2QTE1
QjAwM0E4M0M4IC8qIG5wYXBpLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQTkyN0ZDRjE0MTZBMTVCMDAzQTgzQzggLyogbnBhcGkuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxQTkyN0ZEMzE0MTZBMTVC
MDAzQTgzQzggLyogbnBydW50aW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQTkyN0ZEMDE0MTZBMTVCMDAzQTgzQzggLyogbnBydW50aW1lLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMUE5MjdGRDQx
NDE2QTE1QjAwM0E4M0M4IC8qIG5wdHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTI3RkQxMTQxNkExNUIwMDNBODNDOCAvKiBucHR5cGVzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUFBQURE
QTQxNERCNDA5RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUFEREEyMTREQjQwOUYwMEFGNjRCMyAvKiBT
Y3JvbGxpbmdUcmVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMUFBQURERTQxNERDOEM4RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVOb2RlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUFBRERFMjE0
REM4QzhGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQUIzM0RBNTEyNTUxRTMyMDAyNDQ1N0Eg
LyogSU9LaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUFCMzNEQTQxMjU1MUUzMjAwMjQ0NTdBIC8qIElPS2l0LmZyYW1ld29yayAq
LzsgfTsKQEAgLTUxMTksNyArNTEwNyw2IEBACiAJCUUxNUEzNkQ5MTEwNDU3MjcwMEI3QjYzOSAv
KiBYTUxOU05hbWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxNUEzNkQ4MTEwNDU3MjcwMEI3QjYzOSAvKiBYTUxOU05hbWVzLmNwcCAqLzsgfTsK
IAkJRTE1RkY3RDUxOEM5NTUzODAwRkU0Qzg3IC8qIEtleXByZXNzQ29tbWFuZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1RkY3RDQxOEM5NTUzODAw
RkU0Qzg3IC8qIEtleXByZXNzQ29tbWFuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUUxNjRGQUEzMTgzMTVCRjQwMERCNEU2MSAvKiBDcnlwdG9L
ZXlSU0EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
NjRGQUEyMTgzMTVCRjQwMERCNEU2MSAvKiBDcnlwdG9LZXlSU0EuaCAqLzsgfTsKLQkJRTE2OTgw
M0QxMTMzNTQyRDAwODk0MTE1IC8qIENSdW50aW1lT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTY5ODAzQzExMzM1NDJEMDA4OTQxMTUgLyog
Q1J1bnRpbWVPYmplY3QuaCAqLzsgfTsKIAkJRTE2OTgyNTUxMTM0NjI5RDAwODk0MTE1IC8qIE9i
akNSdW50aW1lT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMTY5ODI1NDExMzQ2MjlEMDA4OTQxMTUgLyogT2JqQ1J1bnRpbWVPYmplY3QuaCAq
LzsgfTsKIAkJRTE2OTgyNjAxMTM0NjM2QTAwODk0MTE1IC8qIE9iakNSdW50aW1lT2JqZWN0Lm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE2OTgyNUYx
MTM0NjM2QTAwODk0MTE1IC8qIE9iakNSdW50aW1lT2JqZWN0Lm1tICovOyB9OwogCQlFMTZBODRG
QTE0Qzg1Q0NDMDAyOTc3REYgLyogQ1NTQm9yZGVySW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNkE4NEY4MTRDODVDQ0MwMDI5NzdERiAvKiBD
U1NCb3JkZXJJbWFnZS5oICovOyB9OwpAQCAtNjY5NSw3ICs2NjgyLDYgQEAKIAkJMUEwRDU3M0Yw
QTVDNzg2NzAwN0VERDRDIC8qIEpTT3ZlcmZsb3dFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNPdmVyZmxvd0V2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFBMTQxNEIzMTNBMEYwNTAwMDE5OTk2QyAvKiBXZWJLaXRGb250RmFtaWx5TmFtZXMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViS2l0Rm9udEZhbWlseU5hbWVzLmNwcDsgcGF0aCA9
IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvV2ViS2l0Rm9udEZhbWlseU5hbWVzLmNwcDsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMUExNDE0QjQxM0EwRjA1MDAwMTk5OTZD
IC8qIFdlYktpdEZvbnRGYW1pbHlOYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJLaXRGb250RmFt
aWx5TmFtZXMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvV2ViS2l0Rm9udEZhbWls
eU5hbWVzLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTFBMjE5QjNB
MERDQTg3QUIwMDQwRTNBMCAvKiBucGZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBucGZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
QTIyNDY0MzBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlRGF0YWJhc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1FMaXRlRGF0YWJhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQTIyNDY0NDBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlRGF0
YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1FMaXRlRGF0YWJhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEyMjQ2NDUwQ0M5OEREQjAwQzA1MjQw
IC8qIFNRTGl0ZVN0YXRlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTUUxpdGVTdGF0ZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NjczNSwyMCArNjcyMSw2IEBACiAJCTFBNEE5NTUxMEI0RURDRkYwMDJEOEMzQyAvKiBTaGFyZWRC
dWZmZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBT
aGFyZWRCdWZmZXJDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE0REE0
MUYxQ0REM0E4MzAwRjQ0NzNDIC8qIExpbmtJY29uQ29sbGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExpbmtJY29uQ29sbGVjdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE0REE0MjAxQ0REM0E4MzAwRjQ0NzNDIC8qIExpbmtJY29u
Q29sbGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpbmtJY29uQ29s
bGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBNTY5Q0M2MEQ3RTJCODIw
MDdDMzk4MyAvKiBjX2NsYXNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IGNfY2xhc3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTU2OUNDNzBE
N0UyQjgyMDA3QzM5ODMgLyogY19jbGFzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBjX2NsYXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBNTY5Q0M4MEQ3
RTJCODIwMDdDMzk4MyAvKiBjX2luc3RhbmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IGNfaW5zdGFuY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkxQTU2OUNDOTBEN0UyQjgyMDA3QzM5ODMgLyogY19pbnN0YW5jZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBjX2luc3RhbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTFBNTY5Q0NBMEQ3RTJCODIwMDdDMzk4MyAvKiBjX3J1bnRpbWUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gY19ydW50aW1lLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMUE1NjlDQ0IwRDdFMkI4MjAwN0MzOTgzIC8qIGNfcnVudGltZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjX3J1bnRpbWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE1NjlDQ0MwRDdFMkI4MjAwN0MzOTgzIC8qIGNfdXRpbGl0
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBjX3V0aWxpdHkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTU2OUNDRDBEN0UyQjgyMDA3QzM5ODMg
LyogY191dGlsaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNfdXRpbGl0
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTU2OUNEQTBEN0UyQjgyMDA3QzM5
ODMgLyogTlBfanNvYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTlBfanNvYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTU2OUNE
QjBEN0UyQjgyMDA3QzM5ODMgLyogTlBfanNvYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTlBfanNvYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MUE1NjlDREQwRDdFMkI4MjAwN0MzOTgzIC8qIG5wcnVudGltZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBucHJ1bnRpbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkxQTU2OUNERjBEN0UyQjgyMDA3QzM5ODMgLyogbnBydW50aW1lX2ltcGwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbnBydW50aW1lX2ltcGwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE1NjlDRTAwRDdFMkI4MjAwN0MzOTgzIC8qIG5wcnVu
dGltZV9pbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBucHJ1bnRp
bWVfaW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE1NjlDRTEwRDdF
MkI4MjAwN0MzOTgzIC8qIG5wcnVudGltZV9wcml2LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IG5wcnVudGltZV9wcml2Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFBNTY5Q0UzMEQ3RTJCODIwMDdDMzk4MyAvKiBvYmpjX2NsYXNzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IG9iamNfY2xhc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUE1NjlDRTQwRDdFMkI4MjAwN0MzOTgzIC8qIG9iamNfY2xhc3MubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBvYmpjX2NsYXNzLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQTU2OUNFNTBEN0UyQjgyMDA3QzM5ODMgLyogb2JqY19oZWFk
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gb2JqY19oZWFkZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY4NTIsOSArNjgyNCw2IEBACiAJCTFBOEY2QkI5
MERCNTVDREMwMDFEQjc5NCAvKiBET01BcHBsaWNhdGlvbkNhY2hlLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBET01BcHBsaWNhdGlvbkNhY2hlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUE4RjZCQkEwREI1NUNEQzAwMURCNzk0IC8qIEFwcGxpY2F0aW9uQ2FjaGVNYW5p
ZmVzdFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcHBs
aWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQThGNkJCQjBEQjU1Q0RDMDAxREI3OTQgLyogQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0
UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFwcGxpY2F0aW9uQ2Fj
aGVNYW5pZmVzdFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTkyN0ZD
RjE0MTZBMTVCMDAzQTgzQzggLyogbnBhcGkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gbnBhcGkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE5MjdGRDAxNDE2
QTE1QjAwM0E4M0M4IC8qIG5wcnVudGltZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBucHJ1bnRpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE5MjdGRDEx
NDE2QTE1QjAwM0E4M0M4IC8qIG5wdHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gbnB0eXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUFBRERBMTE0
REI0MDlGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTY3JvbGxpbmdUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUFBQUREQTIxNERCNDA5RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsaW5nVHJlZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQUFBRERFMTE0REM4QzhGMDBBRjY0QjMgLyogU2Nyb2xsaW5n
VHJlZU5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xs
aW5nVHJlZU5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYyMzUsOCAr
MTYyMDQsNiBAQAogCQlFMTY0QTJFQjE5MUFFNjM1MDAxMDczN0QgLyogQmxvYkRhdGFGaWxlUmVm
ZXJlbmNlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQmxv
YkRhdGFGaWxlUmVmZXJlbmNlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MTY0RkFBMjE4MzE1QkY0MDBEQjRFNjEgLyogQ3J5cHRvS2V5UlNBLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENyeXB0b0tleVJTQS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMTY0RkFBNDE4MzE1RTFBMDBEQjRFNjEgLyogQ3J5cHRvS2V5UlNBTWFjLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENyeXB0b0tleVJTQU1hYy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxNjk4MDNDMTEzMzU0MkQwMDg5NDExNSAv
KiBDUnVudGltZU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDUnVu
dGltZU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMTY5ODA0ODExMzM2
NDQ3MDA4OTQxMTUgLyogQ1J1bnRpbWVPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ1J1bnRpbWVPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMTY5ODI1NDExMzQ2MjlEMDA4OTQxMTUgLyogT2JqQ1J1bnRpbWVPYmplY3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqQ1J1bnRpbWVPYmplY3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE2OTgyNUYxMTM0NjM2QTAwODk0MTE1IC8qIE9i
akNSdW50aW1lT2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gT2JqQ1J1bnRpbWVPYmplY3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUx
NkE4NEY3MTRDODVDQ0MwMDI5NzdERiAvKiBDU1NCb3JkZXJJbWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NCb3JkZXJJbWFnZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xODY1MywxOCArMTg2MjAsMTEgQEAKIAkJMUE1NjlDQzQwRDdF
MkI2MDAwN0MzOTgzIC8qIGJyaWRnZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCi0JCQkJMUE1NjlDQzUwRDdFMkI4MjAwN0MzOTgzIC8qIGMgKi8sCi0JCQkJNTlC
NTk3NzExMTA4NjU1NjAwNzE1OUU4IC8qIGpzYyAqLywKLQkJCQkxQTU2OUNFMjBEN0UyQjgyMDA3
QzM5ODMgLyogb2JqYyAqLywKIAkJCQk1OTlFNzU4RjExMDU1QTFGMDBEOTA0RkEgLyogQnJpZGdl
LmggKi8sCiAJCQkJMUE3MUQ1NzkwRjMzODE5MDAwRjlDRTRFIC8qIElkZW50aWZpZXJSZXAuY3Bw
ICovLAogCQkJCTFBNzFENTdBMEYzMzgxOTAwMEY5Q0U0RSAvKiBJZGVudGlmaWVyUmVwLmggKi8s
Ci0JCQkJMUE1NjlDREEwRDdFMkI4MjAwN0MzOTgzIC8qIE5QX2pzb2JqZWN0LmNwcCAqLywKLQkJ
CQkxQTU2OUNEQjBEN0UyQjgyMDA3QzM5ODMgLyogTlBfanNvYmplY3QuaCAqLywKLQkJCQkxQTU2
OUNERDBEN0UyQjgyMDA3QzM5ODMgLyogbnBydW50aW1lLmNwcCAqLywKLQkJCQkxQTU2OUNERjBE
N0UyQjgyMDA3QzM5ODMgLyogbnBydW50aW1lX2ltcGwuaCAqLywKLQkJCQkxQTU2OUNFMDBEN0Uy
QjgyMDA3QzM5ODMgLyogbnBydW50aW1lX2ludGVybmFsLmggKi8sCi0JCQkJMUE1NjlDRTEwRDdF
MkI4MjAwN0MzOTgzIC8qIG5wcnVudGltZV9wcml2LmggKi8sCisJCQkJNTlCNTk3NzExMTA4NjU1
NjAwNzE1OUU4IC8qIGpzYyAqLywKKwkJCQkxQTU2OUNFMjBEN0UyQjgyMDA3QzM5ODMgLyogb2Jq
YyAqLywKIAkJCQkxQTU2OUNFRjBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9hcnJheS5jcHAg
Ki8sCiAJCQkJMUE1NjlDRjAwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfYXJyYXkuaCAqLywK
IAkJCQkxQTU2OUNGMTBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9tZXRob2QuY3BwICovLApA
QCAtMTg2NzcsMjMgKzE4NjM3LDYgQEAKIAkJCXBhdGggPSBicmlkZ2U7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwogCQl9OwotCQkxQTU2OUNDNTBEN0UyQjgyMDA3QzM5ODMgLyogYyAqLyA9
IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMUE1NjlDQzYwRDdF
MkI4MjAwN0MzOTgzIC8qIGNfY2xhc3MuY3BwICovLAotCQkJCTFBNTY5Q0M3MEQ3RTJCODIwMDdD
Mzk4MyAvKiBjX2NsYXNzLmggKi8sCi0JCQkJMUE1NjlDQzgwRDdFMkI4MjAwN0MzOTgzIC8qIGNf
aW5zdGFuY2UuY3BwICovLAotCQkJCTFBNTY5Q0M5MEQ3RTJCODIwMDdDMzk4MyAvKiBjX2luc3Rh
bmNlLmggKi8sCi0JCQkJMUE1NjlDQ0EwRDdFMkI4MjAwN0MzOTgzIC8qIGNfcnVudGltZS5jcHAg
Ki8sCi0JCQkJMUE1NjlDQ0IwRDdFMkI4MjAwN0MzOTgzIC8qIGNfcnVudGltZS5oICovLAotCQkJ
CTFBNTY5Q0NDMEQ3RTJCODIwMDdDMzk4MyAvKiBjX3V0aWxpdHkuY3BwICovLAotCQkJCTFBNTY5
Q0NEMEQ3RTJCODIwMDdDMzk4MyAvKiBjX3V0aWxpdHkuaCAqLywKLQkJCQlFMTY5ODA0ODExMzM2
NDQ3MDA4OTQxMTUgLyogQ1J1bnRpbWVPYmplY3QuY3BwICovLAotCQkJCUUxNjk4MDNDMTEzMzU0
MkQwMDg5NDExNSAvKiBDUnVudGltZU9iamVjdC5oICovLAotCQkJKTsKLQkJCXBhdGggPSBjOwot
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJMUE1NjlDRTIwRDdFMkI4MjAwN0Mz
OTgzIC8qIG9iamMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApA
QCAtMjIxMDksMTAgKzIyMDUyLDYgQEAKIAkJCQlBOUM2RTRFRDBENzQ1RTM4MDA2NDQyRTkgLyog
RE9NUGx1Z2luQXJyYXkuY3BwICovLAogCQkJCUE5QzZFNEVFMEQ3NDVFMzgwMDY0NDJFOSAvKiBE
T01QbHVnaW5BcnJheS5oICovLAogCQkJCUE5QzZFNjYxMEQ3NDY3MUUwMDY0NDJFOSAvKiBET01Q
bHVnaW5BcnJheS5pZGwgKi8sCi0JCQkJMUE5MjdGQ0YxNDE2QTE1QjAwM0E4M0M4IC8qIG5wYXBp
LmggKi8sCi0JCQkJMUEyMTlCM0EwRENBODdBQjAwNDBFM0EwIC8qIG5wZnVuY3Rpb25zLmggKi8s
Ci0JCQkJMUE5MjdGRDAxNDE2QTE1QjAwM0E4M0M4IC8qIG5wcnVudGltZS5oICovLAotCQkJCTFB
OTI3RkQxMTQxNkExNUIwMDNBODNDOCAvKiBucHR5cGVzLmggKi8sCiAJCQkJQTlDNkU0RjEwRDc0
NUU0ODAwNjQ0MkU5IC8qIFBsdWdpbkRhdGEuY3BwICovLAogCQkJCUE5QzZFNEYyMEQ3NDVFNDgw
MDY0NDJFOSAvKiBQbHVnaW5EYXRhLmggKi8sCiAJCQkJMUEwOEZFREExRDU5MkI4QjAwOEJBOENC
IC8qIFBsdWdpbkluZm9Qcm92aWRlci5jcHAgKi8sCkBAIC0zMTk1MiwxMCArMzE4OTEsNiBAQAog
CQkJCTdBNDUwMzMwMThEQjcxNzIwMDM3N0IzNCAvKiBCdWZmZXJlZExpbmVSZWFkZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJERkE0ODhGMURCNTQxRDAwMDM2MkI5OSAvKiBCdWZmZXJTb3VyY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREIwMTI1MUYxMkQwMDNFRjI2OSAvKiBCdXR0b25J
bnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBNTY5Q0Y4MEQ3RTJCODIwMDdDMzk4MyAv
KiBjX2NsYXNzLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTU2OUNGQTBEN0UyQjgyMDA3QzM5ODMg
LyogY19pbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUE1NjlDRkMwRDdFMkI4MjAwN0Mz
OTgzIC8qIGNfcnVudGltZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUE1NjlDRkUwRDdFMkI4MjAw
N0MzOTgzIC8qIGNfdXRpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDdDMDQ2QzQxRTQyNTA4
QjAwNzIwMUU3IC8qIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNjM1M0UxRTYxRjkxNzQzMTAwQTM0MjA4IC8qIENhY2hlZEFwcGxpY2F0aW9uTWFuaWZlc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDQjE2QzFBMDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRD
U1NTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKQEAgLTMyMjEwLDcgKzMyMTQ1LDYgQEAKIAkJ
CQk0MUFCRTY3QjFEMDU4MERCMDA2RDg2MkQgLyogQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVja2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUM0MTVEQTBGNjU1RDZGMDA5MkQyRkIgLyogQ3Jvc3NP
cmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkIxRjQ4MTEy
Mjk4QTM3RTAwREU4QjgyIC8qIENyb3NzU2l0ZU5hdmlnYXRpb25EYXRhVHJhbnNmZXIuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUUxNjk4MDNEMTEzMzU0MkQwMDg5NDExNSAvKiBDUnVudGltZU9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc1Q0EyOEIxMzAzNjVGODAwRTk5QUQ5IC8qIENyeXB0
by5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0M5QUNBOTgxRjNDQ0RBRDAwRjNBQTA5IC8qIENyeXB0
b0Flc0tleUFsZ29yaXRobS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE3MkFGNkUxODBGMjRDNjAw
RkJBREI5IC8qIENyeXB0b0FsZ29yaXRobS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDYzNSwxNCAr
MzQ1NjksNiBAQAogCQkJCTk4RUIxRjk1MTMxM0ZFMDUwMEQwRTFFQSAvKiBOb3RJbXBsZW1lbnRl
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE2RkQyNUYyNDBGQTRFNTAwNjY2MUQ4IC8qIE5vd1Bs
YXlpbmdJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTc4RUYxNzI0MTI2MDg0MDAxOTNDNzQg
LyogTm93UGxheWluZ01hbmFnZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBNTY5RDBCMEQ3RTJC
ODIwMDdDMzk4MyAvKiBOUF9qc29iamVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUE5MjdGRDIx
NDE2QTE1QjAwM0E4M0M4IC8qIG5wYXBpLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTIxOUIzQjBE
Q0E4N0FCMDA0MEUzQTAgLyogbnBmdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBOTI3
RkQzMTQxNkExNUIwMDNBODNDOCAvKiBucHJ1bnRpbWUuaCBpbiBIZWFkZXJzICovLAotCQkJCTFB
NTY5RDBGMEQ3RTJCODIwMDdDMzk4MyAvKiBucHJ1bnRpbWVfaW1wbC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMUE1NjlEMTAwRDdFMkI4MjAwN0MzOTgzIC8qIG5wcnVudGltZV9pbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMUE1NjlEMTEwRDdFMkI4MjAwN0MzOTgzIC8qIG5wcnVudGltZV9w
cml2LmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTkyN0ZENDE0MTZBMTVCMDAzQTgzQzggLyogbnB0
eXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1MDBGMzIxM0ZERTNCRTAwOTlFQzI0IC8qIE5T
U2Nyb2xsZXJJbXBEZXRhaWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkyREEzOTdFNTI2NUM3Mzc1
MDA0NjhGMzMgLyogTnVsbEdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1
QjNEQzgxMjUxRjEyRDAwM0VGMjY5IC8qIE51bWJlcklucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCmlu
ZGV4IGE0M2FlZTA0OGY0YmM4NTA0ODY4OWVjZjE3MTA4Y2JkODUxOWI2YmEuLjAxYzE0MTkwNWI5
ODgxMTkzNGRmYWEzYTE3ZTE4NGI0ZmI0OTg3OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1vZHVsZUZldGNoRmFpbHVyZUtpbmQuaCIKICNpbmNs
dWRlICJNb2R1bGVGZXRjaFBhcmFtZXRlcnMuaCIKLSNpbmNsdWRlICJOUF9qc29iamVjdC5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlQ29uc29sZUNsaWVudC5oIgogI2luY2x1
ZGUgIlBhZ2VHcm91cC5oIgpAQCAtNTksNyArNTgsNiBAQAogI2luY2x1ZGUgIlVzZXJHZXN0dXJl
SW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRl
ICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCi0jaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKICNp
bmNsdWRlICJydW50aW1lX3Jvb3QuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9EZWJ1Z2dl
ci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXAuaD4KQEAgLTk3LDkgKzk1LDYgQEAg
U2NyaXB0Q29udHJvbGxlcjo6U2NyaXB0Q29udHJvbGxlcihGcmFtZSYgZnJhbWUpCiAgICAgOiBt
X2ZyYW1lKGZyYW1lKQogICAgICwgbV9zb3VyY2VVUkwoMCkKICAgICAsIG1fcGF1c2VkKGZhbHNl
KQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICwgbV93aW5kb3dTY3JpcHRO
UE9iamVjdCgwKQotI2VuZGlmCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLCBtX3dpbmRvd1Nj
cmlwdE9iamVjdCgwKQogI2VuZGlmCkBAIC00NzEsMjkgKzQ2Niw2IEBAIHZvaWQgU2NyaXB0Q29u
dHJvbGxlcjo6Y29sbGVjdElzb2xhdGVkQ29udGV4dHMoVmVjdG9yPHN0ZDo6cGFpcjxKU0M6OkpT
R2xvYmFsT2JqCiAgICAgfQogfQogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi1O
UE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2NyaXB0TlBPYmplY3QoKQotewotICAg
IGlmICghbV93aW5kb3dTY3JpcHROUE9iamVjdCkgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9j
ayhjb21tb25WTSgpKTsKLSAgICAgICAgaWYgKGNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFib3V0VG9F
eGVjdXRlU2NyaXB0KSkgewotICAgICAgICAgICAgLy8gSmF2YVNjcmlwdCBpcyBlbmFibGVkLCBz
byB0aGVyZSBpcyBhIEphdmFTY3JpcHQgd2luZG93IG9iamVjdC4KLSAgICAgICAgICAgIC8vIFJl
dHVybiBhbiBOUE9iamVjdCBib3VuZCB0byB0aGUgd2luZG93IG9iamVjdC4KLSAgICAgICAgICAg
IGF1dG8qIHdpbmRvdyA9IGpzV2luZG93UHJveHkocGx1Z2luV29ybGQoKSkud2luZG93KCk7Ci0g
ICAgICAgICAgICBBU1NFUlQod2luZG93KTsKLSAgICAgICAgICAgIEJpbmRpbmdzOjpSb290T2Jq
ZWN0KiByb290ID0gYmluZGluZ1Jvb3RPYmplY3QoKTsKLSAgICAgICAgICAgIG1fd2luZG93U2Ny
aXB0TlBPYmplY3QgPSBfTlBOX0NyZWF0ZVNjcmlwdE9iamVjdCgwLCB3aW5kb3csIHJvb3QpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gSmF2YVNjcmlwdCBpcyBub3QgZW5hYmxl
ZCwgc28gd2UgY2Fubm90IGJpbmQgdGhlIE5QT2JqZWN0IHRvIHRoZSBKYXZhU2NyaXB0IHdpbmRv
dyBvYmplY3QuCi0gICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSBjcmVhdGUgYW4gTlBPYmplY3Qg
b2YgYSBkaWZmZXJlbnQgY2xhc3MsIG9uZSB3aGljaCBpcyBub3QgYm91bmQgdG8gYSBKYXZhU2Ny
aXB0IG9iamVjdC4KLSAgICAgICAgICAgIG1fd2luZG93U2NyaXB0TlBPYmplY3QgPSBfTlBOX0Ny
ZWF0ZU5vU2NyaXB0T2JqZWN0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbV93
aW5kb3dTY3JpcHROUE9iamVjdDsKLX0KLSNlbmRpZgotCiAjaWYgIVBMQVRGT1JNKENPQ09BKQog
UmVmUHRyPEpTQzo6QmluZGluZ3M6Okluc3RhbmNlPiBTY3JpcHRDb250cm9sbGVyOjpjcmVhdGVT
Y3JpcHRJbnN0YW5jZUZvcldpZGdldChXaWRnZXQqIHdpZGdldCkKIHsKQEAgLTU1NywxNiArNTI5
LDYgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMoKQogICAgICAg
ICBtX2JpbmRpbmdSb290T2JqZWN0LT5pbnZhbGlkYXRlKCk7CiAgICAgICAgIG1fYmluZGluZ1Jv
b3RPYmplY3QgPSBudWxscHRyOwogICAgIH0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQotICAgIGlmIChtX3dpbmRvd1NjcmlwdE5QT2JqZWN0KSB7Ci0gICAgICAgIC8vIENhbGwg
X05QTl9EZWFsbG9jYXRlT2JqZWN0KCkgaW5zdGVhZCBvZiBfTlBOX1JlbGVhc2VPYmplY3QoKSBz
byB0aGF0IHdlIGRvbid0IGxlYWsgaWYgYSBwbHVnaW4gZmFpbHMgdG8gcmVsZWFzZSB0aGUgd2lu
ZG93Ci0gICAgICAgIC8vIHNjcmlwdCBvYmplY3QgcHJvcGVybHkuCi0gICAgICAgIC8vIFRoaXMg
c2hvdWxkbid0IGNhdXNlIGFueSBwcm9ibGVtcyBmb3IgcGx1Z2lucyBzaW5jZSB0aGV5IHNob3Vs
ZCBoYXZlIGFscmVhZHkgYmVlbiBzdG9wcGVkIGFuZCBkZXN0cm95ZWQgYXQgdGhpcyBwb2ludC4K
LSAgICAgICAgX05QTl9EZWFsbG9jYXRlT2JqZWN0KG1fd2luZG93U2NyaXB0TlBPYmplY3QpOwot
ICAgICAgICBtX3dpbmRvd1NjcmlwdE5QT2JqZWN0ID0gbnVsbHB0cjsKLSAgICB9Ci0jZW5kaWYK
IH0KIAogSlNDOjpKU1ZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV4ZWN1dGVTY3JpcHRJZ25vcmlu
Z0V4Y2VwdGlvbihjb25zdCBTdHJpbmcmIHNjcmlwdCwgYm9vbCBmb3JjZVVzZXJHZXN0dXJlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IGRh
ZjllYWQyMWNkODNjY2YwNTMxZWFmYTYxMzdmZjA3MTg4ZjY3MWYuLjAxMWViZTcyNWZjN2QyYjZh
OTg1NzYxOTZjMTc5NjVjMTE0ZjlkMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRDb250cm9sbGVyLmgKQEAgLTE2NSwxMCArMTY1LDYgQEAgcHVibGljOgogI2VuZGlm
CiAKICAgICBXRUJDT1JFX0VYUE9SVCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdEZvclBsdWdpbkVs
ZW1lbnQoSFRNTFBsdWdJbkVsZW1lbnQqKTsKLSAgICAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLSAgICBXRUJDT1JFX0VYUE9SVCBOUE9iamVjdCogd2luZG93U2NyaXB0TlBPYmpl
Y3QoKTsKLSNlbmRpZgogCiAgICAgdm9pZCBpbml0U2NyaXB0Rm9yV2luZG93UHJveHkoSlNXaW5k
b3dQcm94eSYpOwogCkBAIC0yMDAsOSArMTk2LDYgQEAgcHJpdmF0ZToKICAgICAvLyBUaGlzIGVu
c3VyZXMgdGhleSBhcmUgc3RpbGwgYXZhaWxhYmxlIHdoZW4gdGhlIHBhZ2UgaXMgcmVzdG9yZWQu
CiAgICAgUmVmUHRyPEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+IG1fY2FjaGVhYmxlQmluZGlu
Z1Jvb3RPYmplY3Q7CiAgICAgUm9vdE9iamVjdE1hcCBtX3Jvb3RPYmplY3RzOwotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIE5QT2JqZWN0KiBtX3dpbmRvd1NjcmlwdE5QT2Jq
ZWN0OwotI2VuZGlmCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgUmV0YWluUHRyPFdlYlNjcmlw
dE9iamVjdD4gbV93aW5kb3dTY3JpcHRPYmplY3Q7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tCmluZGV4IDZmMmMwOWIyNGE5
ZjE3MGIxNTVkOGYxODJhNjJiMGJhMjMyODgwNjkuLmM2OTNhZjQ3ZmYyNmU4ODUzMTIwODFlNzNh
MDU2YTk4MGJkOGFiMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdENvbnRyb2xsZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0Q29udHJvbGxlck1hYy5tbQpAQCAtNDQsMTIgKzQ0LDYgQEAKICNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0pTQ29udGV4dEludGVybmFsLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0xv
Y2suaD4KIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotI2ltcG9ydCAiY19pbnN0
YW5jZS5oIgotI2ltcG9ydCAiTlBfanNvYmplY3QuaCIKLSNpbXBvcnQgIm5wcnVudGltZV9pbXBs
LmgiCi0jZW5kaWYKLQogQGludGVyZmFjZSBOU09iamVjdCAoV2ViUGx1Z2luKQogLSAoaWQpb2Jq
ZWN0Rm9yV2ViU2NyaXB0OwogLSAoTlBPYmplY3QgKiljcmVhdGVQbHVnaW5TY3JpcHRhYmxlT2Jq
ZWN0OwpAQCAtNzcsMjEgKzcxLDYgQEAgUmVmUHRyPEpTQzo6QmluZGluZ3M6Okluc3RhbmNlPiBT
Y3JpcHRDb250cm9sbGVyOjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldpZGdldCgKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gSlNDOjpCaW5kaW5nczo6T2JqY0lu
c3RhbmNlOjpjcmVhdGUob2JqZWN0Rm9yV2ViU2NyaXB0LCBXVEZNb3ZlKHJvb3RPYmplY3QpKTsK
ICAgICB9Ci0KLSAgICBpZiAoW3dpZGdldFZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihjcmVhdGVQbHVnaW5TY3JpcHRhYmxlT2JqZWN0KV0pIHsKLSNpZiAhRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotI2Vsc2UKLSAgICAgICAgTlBP
YmplY3QqIG5wT2JqZWN0ID0gW3dpZGdldFZpZXcgY3JlYXRlUGx1Z2luU2NyaXB0YWJsZU9iamVj
dF07Ci0gICAgICAgIGlmICghbnBPYmplY3QpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgYXV0byBpbnN0YW5jZSA9IEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6Y3JlYXRl
KG5wT2JqZWN0LCBXVEZNb3ZlKHJvb3RPYmplY3QpKTsKLSAgICAgICAgLy8gLWNyZWF0ZVBsdWdp
blNjcmlwdGFibGVPYmplY3QgcmV0dXJucyBhIHJldGFpbmVkIE5QT2JqZWN0LiAgVGhlIGNhbGxl
ciBpcyBleHBlY3RlZCB0byByZWxlYXNlIGl0LgotICAgICAgICBfTlBOX1JlbGVhc2VPYmplY3Qo
bnBPYmplY3QpOwotICAgICAgICByZXR1cm4gV1RGTW92ZShpbnN0YW5jZSk7Ci0jZW5kaWYKLSAg
ICB9Ci0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29i
amVjdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYzZkNmI5YzI1N2Y0ZjVi
NzQ2NTEyYWZlZWM5NWMyMjJlMTA0YzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDU1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIw
MTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiTlBfanNvYmplY3QuaCIKLQotI2lu
Y2x1ZGUgIklkZW50aWZpZXJSZXAuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNs
dWRlICJjX2luc3RhbmNlLmgiCi0jaW5jbHVkZSAiY191dGlsaXR5LmgiCi0jaW5jbHVkZSAibnBy
dW50aW1lX3ByaXYuaCIKLSNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9DYXRjaFNjb3BlLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQ29tcGxl
dGlvbi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Vycm9yLmg+Ci0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0xvY2suaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1NvdXJjZUNvZGUuaD4KLSNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI3ByYWdt
YSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGRlZmF1bHQpCi0jaW5jbHVkZSAibnBydW50aW1lX2ltcGwu
aCIKLSNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcG9wCi0KLW5hbWVzcGFjZSBKU0MgewotdXNpbmcg
bmFtZXNwYWNlIEJpbmRpbmdzOwotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLWNsYXNzIE9i
amVjdE1hcCB7Ci1wdWJsaWM6Ci0gICAgTlBPYmplY3QqIGdldChSb290T2JqZWN0KiByb290T2Jq
ZWN0LCBKU09iamVjdCoganNPYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gbV9tYXAuZ2V0
KHJvb3RPYmplY3QpLmdldChqc09iamVjdCk7Ci0gICAgfQotCi0gICAgdm9pZCBhZGQoUm9vdE9i
amVjdCogcm9vdE9iamVjdCwgSlNPYmplY3QqIGpzT2JqZWN0LCBOUE9iamVjdCogbnBPYmplY3Qp
Ci0gICAgewotICAgICAgICBIYXNoTWFwPFJvb3RPYmplY3QqLCBKU1RvTlBPYmplY3RNYXA+Ojpp
dGVyYXRvciBpdGVyID0gbV9tYXAuZmluZChyb290T2JqZWN0KTsKLSAgICAgICAgaWYgKGl0ZXIg
PT0gbV9tYXAuZW5kKCkpIHsKLSAgICAgICAgICAgIHJvb3RPYmplY3QtPmFkZEludmFsaWRhdGlv
bkNhbGxiYWNrKCZtX2ludmFsaWRhdGlvbkNhbGxiYWNrKTsKLSAgICAgICAgICAgIGl0ZXIgPSBt
X21hcC5hZGQocm9vdE9iamVjdCwgSlNUb05QT2JqZWN0TWFwKCkpLml0ZXJhdG9yOwotICAgICAg
ICB9Ci0KLSAgICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlLmZpbmQoanNPYmplY3QpID09IGl0ZXIt
PnZhbHVlLmVuZCgpKTsKLSAgICAgICAgaXRlci0+dmFsdWUuYWRkKGpzT2JqZWN0LCBucE9iamVj
dCk7Ci0gICAgfQotCi0gICAgdm9pZCByZW1vdmUoUm9vdE9iamVjdCogcm9vdE9iamVjdCkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChtX21hcC5jb250YWlucyhyb290T2JqZWN0KSk7Ci0gICAgICAg
IG1fbWFwLnJlbW92ZShyb290T2JqZWN0KTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlbW92ZShSb290
T2JqZWN0KiByb290T2JqZWN0LCBKU09iamVjdCoganNPYmplY3QpCi0gICAgewotICAgICAgICBI
YXNoTWFwPFJvb3RPYmplY3QqLCBKU1RvTlBPYmplY3RNYXA+OjppdGVyYXRvciBpdGVyID0gbV9t
YXAuZmluZChyb290T2JqZWN0KTsKLSAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9tYXAuZW5kKCkp
OwotICAgICAgICBBU1NFUlQoaXRlci0+dmFsdWUuZmluZChqc09iamVjdCkgIT0gaXRlci0+dmFs
dWUuZW5kKCkpOwotCi0gICAgICAgIGl0ZXItPnZhbHVlLnJlbW92ZShqc09iamVjdCk7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIHN0cnVjdCBSb290T2JqZWN0SW52YWxpZGF0aW9uQ2FsbGJhY2sg
OiBwdWJsaWMgUm9vdE9iamVjdDo6SW52YWxpZGF0aW9uQ2FsbGJhY2sgewotICAgICAgICB2b2lk
IG9wZXJhdG9yKCkoUm9vdE9iamVjdCopIG92ZXJyaWRlOwotICAgIH07Ci0gICAgUm9vdE9iamVj
dEludmFsaWRhdGlvbkNhbGxiYWNrIG1faW52YWxpZGF0aW9uQ2FsbGJhY2s7Ci0KLSAgICAvLyBK
U09iamVjdHMgYXJlIHByb3RlY3RlZCBieSBSb290T2JqZWN0LgotICAgIHR5cGVkZWYgSGFzaE1h
cDxKU09iamVjdCosIE5QT2JqZWN0Kj4gSlNUb05QT2JqZWN0TWFwOwotICAgIEhhc2hNYXA8Um9v
dE9iamVjdCosIEpTVG9OUE9iamVjdE1hcD4gbV9tYXA7Ci19OwotCi0KLXN0YXRpYyBPYmplY3RN
YXAmIG9iamVjdE1hcCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE9iamVjdE1hcD4g
bWFwOwotICAgIHJldHVybiBtYXA7Ci19Ci0KLXZvaWQgT2JqZWN0TWFwOjpSb290T2JqZWN0SW52
YWxpZGF0aW9uQ2FsbGJhY2s6Om9wZXJhdG9yKCkoUm9vdE9iamVjdCogcm9vdE9iamVjdCkKLXsK
LSAgICBvYmplY3RNYXAoKS5yZW1vdmUocm9vdE9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdl
dExpc3RGcm9tVmFyaWFudEFyZ3MoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IGNvbnN0IE5QVmFyaWFudCogYXJncywgdW5zaWduZWQgYXJnQ291bnQsIFJvb3RPYmplY3QqIHJv
b3RPYmplY3QsIE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhTGlzdCkKLXsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYXJnQ291bnQ7ICsraSkKLSAgICAgICAgYUxpc3QuYXBwZW5kKGNvbnZl
cnROUFZhcmlhbnRUb1ZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsICZhcmdzW2ldLCByb290T2Jq
ZWN0KSk7Ci19Ci0KLXN0YXRpYyBOUE9iamVjdCoganNBbGxvY2F0ZShOUFAsIE5QQ2xhc3MqKQot
ewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUE9iamVjdCo+KG1hbGxvYyhzaXplb2YoSmF2YVNj
cmlwdE9iamVjdCkpKTsKLX0KLQotc3RhdGljIHZvaWQganNEZWFsbG9jYXRlKE5QT2JqZWN0KiBu
cE9iaikKLXsKLSAgICBKYXZhU2NyaXB0T2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEph
dmFTY3JpcHRPYmplY3QqPihucE9iaik7Ci0KLSAgICBpZiAob2JqLT5yb290T2JqZWN0ICYmIG9i
ai0+cm9vdE9iamVjdC0+aXNWYWxpZCgpKSB7Ci0gICAgICAgIG9iamVjdE1hcCgpLnJlbW92ZShv
YmotPnJvb3RPYmplY3QsIG9iai0+aW1wKTsKLSAgICAgICAgb2JqLT5yb290T2JqZWN0LT5nY1Vu
cHJvdGVjdChvYmotPmltcCk7Ci0gICAgfQotCi0gICAgaWYgKG9iai0+cm9vdE9iamVjdCkKLSAg
ICAgICAgb2JqLT5yb290T2JqZWN0LT5kZXJlZigpOwotCi0gICAgZnJlZShvYmopOwotfQotCi1z
dGF0aWMgTlBDbGFzcyBqYXZhc2NyaXB0Q2xhc3MgPSB7IDEsIGpzQWxsb2NhdGUsIGpzRGVhbGxv
Y2F0ZSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9Owotc3RhdGljIE5QQ2xhc3Mgbm9T
Y3JpcHRDbGFzcyA9IHsgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9Owot
Ci1leHRlcm4gIkMiIHsKLU5QQ2xhc3MqIE5QU2NyaXB0T2JqZWN0Q2xhc3MgPSAmamF2YXNjcmlw
dENsYXNzOwotc3RhdGljIE5QQ2xhc3MqIE5QTm9TY3JpcHRPYmplY3RDbGFzcyA9ICZub1Njcmlw
dENsYXNzOwotCi1OUE9iamVjdCogX05QTl9DcmVhdGVTY3JpcHRPYmplY3QoTlBQIG5wcCwgSlNP
YmplY3QqIGltcCwgUmVmUHRyPFJvb3RPYmplY3Q+JiYgcm9vdE9iamVjdCkKLXsKLSAgICBpZiAo
TlBPYmplY3QqIG9iamVjdCA9IG9iamVjdE1hcCgpLmdldChyb290T2JqZWN0LmdldCgpLCBpbXAp
KQotICAgICAgICByZXR1cm4gX05QTl9SZXRhaW5PYmplY3Qob2JqZWN0KTsKLQotICAgIEphdmFT
Y3JpcHRPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlwdE9iamVjdCo+KF9O
UE5fQ3JlYXRlT2JqZWN0KG5wcCwgTlBTY3JpcHRPYmplY3RDbGFzcykpOwotCi0gICAgb2JqLT5y
b290T2JqZWN0ID0gcm9vdE9iamVjdC5sZWFrUmVmKCk7Ci0KLSAgICBpZiAob2JqLT5yb290T2Jq
ZWN0KSB7Ci0gICAgICAgIG9iai0+cm9vdE9iamVjdC0+Z2NQcm90ZWN0KGltcCk7Ci0gICAgICAg
IG9iamVjdE1hcCgpLmFkZChvYmotPnJvb3RPYmplY3QsIGltcCwgcmVpbnRlcnByZXRfY2FzdDxO
UE9iamVjdCo+KG9iaikpOwotICAgIH0KLQotICAgIG9iai0+aW1wID0gaW1wOwotCi0gICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TlBPYmplY3QqPihvYmopOwotfQotCi1OUE9iamVjdCogX05Q
Tl9DcmVhdGVOb1NjcmlwdE9iamVjdCh2b2lkKQotewotICAgIHJldHVybiBfTlBOX0NyZWF0ZU9i
amVjdCgwLCBOUE5vU2NyaXB0T2JqZWN0Q2xhc3MpOwotfQotCi1ib29sIF9OUE5fSW52b2tlRGVm
YXVsdChOUFAsIE5QT2JqZWN0KiBvLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVpbnQzMl90IGFy
Z0NvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoby0+X2NsYXNzID09IE5QU2Ny
aXB0T2JqZWN0Q2xhc3MpIHsKLSAgICAgICAgSmF2YVNjcmlwdE9iamVjdCogb2JqID0gcmVpbnRl
cnByZXRfY2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4obyk7IAotICAgICAgICAKLSAgICAgICAgVk9J
RF9UT19OUFZBUklBTlQoKnJlc3VsdCk7Ci0gICAgICAgIAotICAgICAgICAvLyBMb29rdXAgdGhl
IGZ1bmN0aW9uIG9iamVjdC4KLSAgICAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+
cm9vdE9iamVjdDsKLSAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBhdXRv
IGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOwotICAgICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
LSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0OwotICAg
ICAgICAKLSAgICAgICAgLy8gQ2FsbCB0aGUgZnVuY3Rpb24gb2JqZWN0LgotICAgICAgICBKU1Zh
bHVlIGZ1bmN0aW9uID0gb2JqLT5pbXA7Ci0gICAgICAgIGF1dG8gY2FsbERhdGEgPSBnZXRDYWxs
RGF0YSh2bSwgZnVuY3Rpb24pOwotICAgICAgICBpZiAoY2FsbERhdGEudHlwZSA9PSBDYWxsRGF0
YTo6VHlwZTo6Tm9uZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAg
ICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xpc3Q7Ci0gICAgICAgIGdldExpc3RGcm9tVmFy
aWFudEFyZ3MobGV4aWNhbEdsb2JhbE9iamVjdCwgYXJncywgYXJnQ291bnQsIHJvb3RPYmplY3Qs
IGFyZ0xpc3QpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghYXJnTGlzdC5oYXNPdmVyZmxvd2Vk
KCkpOwotICAgICAgICBKU1ZhbHVlIHJlc3VsdFYgPSBKU0M6OmNhbGwobGV4aWNhbEdsb2JhbE9i
amVjdCwgZnVuY3Rpb24sIGNhbGxEYXRhLCBmdW5jdGlvbiwgYXJnTGlzdCk7Ci0KLSAgICAgICAg
Ly8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuCi0g
ICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGxleGljYWxHbG9iYWxPYmplY3QsIHJlc3Vs
dFYsIHJlc3VsdCk7Ci0gICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOyAgICAgICAgCi0gICAgfQotCi0gICAgaWYgKG8tPl9jbGFzcy0+aW52b2tlRGVm
YXVsdCkKLSAgICAgICAgcmV0dXJuIG8tPl9jbGFzcy0+aW52b2tlRGVmYXVsdChvLCBhcmdzLCBh
cmdDb3VudCwgcmVzdWx0KTsgICAgCi0gICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgX05QTl9JbnZva2UoTlBQIG5wcCwgTlBPYmplY3Qq
IG8sIE5QSWRlbnRpZmllciBtZXRob2ROYW1lLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVpbnQz
Ml90IGFyZ0NvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoby0+X2NsYXNzID09
IE5QU2NyaXB0T2JqZWN0Q2xhc3MpIHsKLSAgICAgICAgSmF2YVNjcmlwdE9iamVjdCogb2JqID0g
cmVpbnRlcnByZXRfY2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4obyk7IAotCi0gICAgICAgIElkZW50
aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4obWV0aG9kTmFtZSk7Ci0g
ICAgICAgIGlmICghaS0+aXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICAvLyBTcGVjaWFsIGNhc2UgdGhlICJldmFsIiBtZXRob2QuCi0gICAgICAgIGlmICht
ZXRob2ROYW1lID09IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcigiZXZhbCIpKSB7Ci0gICAgICAg
ICAgICBpZiAoYXJnQ291bnQgIT0gMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBpZiAoYXJnc1swXS50eXBlICE9IE5QVmFyaWFudFR5cGVfU3RyaW5nKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBfTlBOX0V2YWx1
YXRlKG5wcCwgbywgY29uc3RfY2FzdDxOUFN0cmluZyo+KCZhcmdzWzBdLnZhbHVlLnN0cmluZ1Zh
bHVlKSwgcmVzdWx0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIExvb2sgdXAgdGhlIGZ1bmN0
aW9uIG9iamVjdC4KLSAgICAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9vdE9i
amVjdDsKLSAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYXV0byBnbG9iYWxPYmplY3Qg
PSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQotICAgICAgICBKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdDsKLSAgICAgICAgSlNWYWx1ZSBm
dW5jdGlvbiA9IG9iai0+aW1wLT5nZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllckZy
b21OUElkZW50aWZpZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgaS0+c3RyaW5nKCkpKTsKLSAgICAg
ICAgYXV0byBjYWxsRGF0YSA9IGdldENhbGxEYXRhKHZtLCBmdW5jdGlvbik7Ci0gICAgICAgIGlm
IChjYWxsRGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOb25lKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIENhbGwgdGhlIGZ1bmN0aW9uIG9iamVjdC4KLSAgICAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnTGlzdDsKLSAgICAgICAgZ2V0TGlzdEZyb21WYXJp
YW50QXJncyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmdzLCBhcmdDb3VudCwgcm9vdE9iamVjdCwg
YXJnTGlzdCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFhcmdMaXN0Lmhhc092ZXJmbG93ZWQo
KSk7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ViA9IEpTQzo6Y2FsbChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBmdW5jdGlvbiwgY2FsbERhdGEsIG9iai0+aW1wLCBhcmdMaXN0KTsKLQotICAgICAgICAv
LyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gY2FsbC4KLSAg
ICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQobGV4aWNhbEdsb2JhbE9iamVjdCwgcmVzdWx0
ViwgcmVzdWx0KTsKLSAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG8tPl9jbGFzcy0+aW52b2tlKQotICAgICAgICBy
ZXR1cm4gby0+X2NsYXNzLT5pbnZva2UobywgbWV0aG9kTmFtZSwgYXJncywgYXJnQ291bnQsIHJl
c3VsdCk7Ci0gICAgCi0gICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgX05QTl9FdmFsdWF0ZShOUFAsIE5QT2JqZWN0KiBvLCBOUFN0cmlu
ZyogcywgTlBWYXJpYW50KiB2YXJpYW50KQotewotICAgIGlmIChvLT5fY2xhc3MgPT0gTlBTY3Jp
cHRPYmplY3RDbGFzcykgewotICAgICAgICBKYXZhU2NyaXB0T2JqZWN0KiBvYmogPSByZWludGVy
cHJldF9jYXN0PEphdmFTY3JpcHRPYmplY3QqPihvKTsgCi0KLSAgICAgICAgUm9vdE9iamVjdCog
cm9vdE9iamVjdCA9IG9iai0+cm9vdE9iamVjdDsKLSAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8
ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKLSAg
ICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayh2bSk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsK
LQotICAgICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGdsb2JhbE9i
amVjdDsKLSAgICAgICAgU3RyaW5nIHNjcmlwdFN0cmluZyA9IGNvbnZlcnROUFN0cmluZ1RvVVRG
MTYocyk7Ci0gICAgICAgIAotICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNDOjpldmFs
dWF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6Om1ha2VTb3VyY2Uoc2NyaXB0U3RyaW5nLCB7
IH0pLCBKU0M6OkpTVmFsdWUoKSk7Ci0KLSAgICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQo
bGV4aWNhbEdsb2JhbE9iamVjdCwgcmV0dXJuVmFsdWUsIHZhcmlhbnQpOwotICAgICAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBW
T0lEX1RPX05QVkFSSUFOVCgqdmFyaWFudCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IF9OUE5fR2V0UHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgTlBJZGVudGlmaWVyIHByb3BlcnR5
TmFtZSwgTlBWYXJpYW50KiB2YXJpYW50KQotewotICAgIGlmIChvLT5fY2xhc3MgPT0gTlBTY3Jp
cHRPYmplY3RDbGFzcykgewotICAgICAgICBKYXZhU2NyaXB0T2JqZWN0KiBvYmogPSByZWludGVy
cHJldF9jYXN0PEphdmFTY3JpcHRPYmplY3QqPihvKTsgCi0KLSAgICAgICAgUm9vdE9iamVjdCog
cm9vdE9iamVjdCA9IG9iai0+cm9vdE9iamVjdDsKLSAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8
ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKLSAg
ICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayh2bSk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsK
LQotICAgICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGdsb2JhbE9i
amVjdDsKLSAgICAgICAgSWRlbnRpZmllclJlcCogaSA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJS
ZXAqPihwcm9wZXJ0eU5hbWUpOwotICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQ7Ci0g
ICAgICAgIGlmIChpLT5pc1N0cmluZygpKQotICAgICAgICAgICAgcmVzdWx0ID0gb2JqLT5pbXAt
PmdldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBpLT5zdHJpbmcoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICByZXN1bHQgPSBvYmotPmltcC0+Z2V0KGxleGljYWxHbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0
PHVpbnQzMl90PihpLT5udW1iZXIoKSkpOwotCi0gICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJp
YW50KGxleGljYWxHbG9iYWxPYmplY3QsIHJlc3VsdCwgdmFyaWFudCk7Ci0gICAgICAgIHNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlm
IChvLT5fY2xhc3MtPmhhc1Byb3BlcnR5ICYmIG8tPl9jbGFzcy0+Z2V0UHJvcGVydHkpIHsKLSAg
ICAgICAgaWYgKG8tPl9jbGFzcy0+aGFzUHJvcGVydHkobywgcHJvcGVydHlOYW1lKSkKLSAgICAg
ICAgICAgIHJldHVybiBvLT5fY2xhc3MtPmdldFByb3BlcnR5KG8sIHByb3BlcnR5TmFtZSwgdmFy
aWFudCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBWT0lEX1RPX05QVkFS
SUFOVCgqdmFyaWFudCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIF9OUE5fU2V0UHJv
cGVydHkoTlBQLCBOUE9iamVjdCogbywgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3Qg
TlBWYXJpYW50KiB2YXJpYW50KQotewotICAgIGlmIChvLT5fY2xhc3MgPT0gTlBTY3JpcHRPYmpl
Y3RDbGFzcykgewotICAgICAgICBKYXZhU2NyaXB0T2JqZWN0KiBvYmogPSByZWludGVycHJldF9j
YXN0PEphdmFTY3JpcHRPYmplY3QqPihvKTsgCi0KLSAgICAgICAgUm9vdE9iamVjdCogcm9vdE9i
amVjdCA9IG9iai0+cm9vdE9iamVjdDsKLSAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290
T2JqZWN0LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
YXV0byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2
bSk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQotICAg
ICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdDsK
LSAgICAgICAgSWRlbnRpZmllclJlcCogaSA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihw
cm9wZXJ0eU5hbWUpOwotCi0gICAgICAgIGlmIChpLT5pc1N0cmluZygpKSB7Ci0gICAgICAgICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmotPmltcCk7Ci0gICAgICAgICAgICBvYmotPmltcC0+
bWV0aG9kVGFibGUodm0pLT5wdXQob2JqLT5pbXAsIGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50
aWZpZXJGcm9tTlBJZGVudGlmaWVyKGxleGljYWxHbG9iYWxPYmplY3QsIGktPnN0cmluZygpKSwg
Y29udmVydE5QVmFyaWFudFRvVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFyaWFudCwgcm9v
dE9iamVjdCksIHNsb3QpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG9iai0+aW1wLT5t
ZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgob2JqLT5pbXAsIGxleGljYWxHbG9iYWxPYmplY3Qs
IGktPm51bWJlcigpLCBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YXJpYW50LCByb290T2JqZWN0KSwgZmFsc2UpOwotICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoby0+X2NsYXNz
LT5zZXRQcm9wZXJ0eSkKLSAgICAgICAgcmV0dXJuIG8tPl9jbGFzcy0+c2V0UHJvcGVydHkobywg
cHJvcGVydHlOYW1lLCB2YXJpYW50KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBf
TlBOX1JlbW92ZVByb3BlcnR5KE5QUCwgTlBPYmplY3QqIG8sIE5QSWRlbnRpZmllciBwcm9wZXJ0
eU5hbWUpCi17Ci0gICAgaWYgKG8tPl9jbGFzcyA9PSBOUFNjcmlwdE9iamVjdENsYXNzKSB7Ci0g
ICAgICAgIEphdmFTY3JpcHRPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlw
dE9iamVjdCo+KG8pOyAKLQotICAgICAgICBSb290T2JqZWN0KiByb290T2JqZWN0ID0gb2JqLT5y
b290T2JqZWN0OwotICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFs
aWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBhdXRvIGdsb2JhbE9i
amVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOwotICAgICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0OwotCi0gICAgICAgIElk
ZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4ocHJvcGVydHlOYW1l
KTsKLSAgICAgICAgaWYgKGktPmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgIGlmICghb2JqLT5p
bXAtPmhhc1Byb3BlcnR5KGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXJGcm9tTlBJZGVu
dGlmaWVyKGxleGljYWxHbG9iYWxPYmplY3QsIGktPnN0cmluZygpKSkpIHsKLSAgICAgICAgICAg
ICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghb2Jq
LT5pbXAtPmhhc1Byb3BlcnR5KGxleGljYWxHbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQz
Ml90PihpLT5udW1iZXIoKSkpKSB7Ci0gICAgICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoaS0+aXNTdHJpbmcoKSkKLSAgICAgICAgICAgIEpTQ2VsbDo6
ZGVsZXRlUHJvcGVydHkob2JqLT5pbXAsIGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXJG
cm9tTlBJZGVudGlmaWVyKGxleGljYWxHbG9iYWxPYmplY3QsIGktPnN0cmluZygpKSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG9iai0+aW1wLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVBy
b3BlcnR5QnlJbmRleChvYmotPmltcCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaS0+bnVtYmVyKCkp
OwotCi0gICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgX05QTl9IYXNQcm9wZXJ0eShO
UFAsIE5QT2JqZWN0KiBvLCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lKQotewotICAgIGlmIChv
LT5fY2xhc3MgPT0gTlBTY3JpcHRPYmplY3RDbGFzcykgewotICAgICAgICBKYXZhU2NyaXB0T2Jq
ZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEphdmFTY3JpcHRPYmplY3QqPihvKTsgCi0KLSAg
ICAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9vdE9iamVjdDsKLSAgICAgICAg
aWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5n
bG9iYWxPYmplY3QoKTsKLSAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAg
ICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKHZtKTsKLQotICAgICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCA9IGdsb2JhbE9iamVjdDsKLSAgICAgICAgSWRlbnRpZmllclJlcCogaSA9IHN0YXRp
Y19jYXN0PElkZW50aWZpZXJSZXAqPihwcm9wZXJ0eU5hbWUpOwotICAgICAgICBpZiAoaS0+aXNT
dHJpbmcoKSkgewotICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBvYmotPmltcC0+aGFzUHJvcGVy
dHkobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIobGV4aWNh
bEdsb2JhbE9iamVjdCwgaS0+c3RyaW5nKCkpKTsKLSAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhj
ZXB0aW9uKCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAg
ICAgYm9vbCByZXN1bHQgPSBvYmotPmltcC0+aGFzUHJvcGVydHkobGV4aWNhbEdsb2JhbE9iamVj
dCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGktPm51bWJlcigpKSk7Ci0gICAgICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgaWYg
KG8tPl9jbGFzcy0+aGFzUHJvcGVydHkpCi0gICAgICAgIHJldHVybiBvLT5fY2xhc3MtPmhhc1By
b3BlcnR5KG8sIHByb3BlcnR5TmFtZSk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
X05QTl9IYXNNZXRob2QoTlBQLCBOUE9iamVjdCogbywgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUp
Ci17Ci0gICAgaWYgKG8tPl9jbGFzcyA9PSBOUFNjcmlwdE9iamVjdENsYXNzKSB7Ci0gICAgICAg
IEphdmFTY3JpcHRPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlwdE9iamVj
dCo+KG8pOyAKLQotICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGljX2Nhc3Q8SWRlbnRp
ZmllclJlcCo+KG1ldGhvZE5hbWUpOwotICAgICAgICBpZiAoIWktPmlzU3RyaW5nKCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9
IG9iai0+cm9vdE9iamVjdDsKLSAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0
LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYXV0byBn
bG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0g
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQotICAgICAgICBK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdDsKLSAgICAg
ICAgSlNWYWx1ZSBmdW5jID0gb2JqLT5pbXAtPmdldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVu
dGlmaWVyRnJvbU5QSWRlbnRpZmllcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBpLT5zdHJpbmcoKSkp
OwotICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICByZXR1cm4gIWZ1bmMu
aXNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG8tPl9jbGFzcy0+aGFzTWV0aG9k
KQotICAgICAgICByZXR1cm4gby0+X2NsYXNzLT5oYXNNZXRob2QobywgbWV0aG9kTmFtZSk7Ci0g
ICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIF9OUE5fU2V0RXhjZXB0aW9uKE5QT2Jq
ZWN0KiwgY29uc3QgTlBVVEY4KiBtZXNzYWdlKQotewotICAgIC8vIElnbm9yaW5nIHRoZSBOUE9i
amVjdCBwYXJhbSBpcyBjb25zaXN0ZW50IHdpdGggdGhlIE1vemlsbGEgaW1wbGVtZW50YXRpb24u
Ci0gICAgU3RyaW5nIGV4Y2VwdGlvbihtZXNzYWdlKTsKLSAgICBDSW5zdGFuY2U6OnNldEdsb2Jh
bEV4Y2VwdGlvbihleGNlcHRpb24pOwotfQotCi1ib29sIF9OUE5fRW51bWVyYXRlKE5QUCwgTlBP
YmplY3QqIG8sIE5QSWRlbnRpZmllcioqIGlkZW50aWZpZXIsIHVpbnQzMl90KiBjb3VudCkKLXsK
LSAgICBpZiAoby0+X2NsYXNzID09IE5QU2NyaXB0T2JqZWN0Q2xhc3MpIHsKLSAgICAgICAgSmF2
YVNjcmlwdE9iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4o
byk7IAotICAgICAgICAKLSAgICAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9v
dE9iamVjdDsKLSAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlk
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBhdXRvIGds
b2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOwotICAgICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0OwotICAgICAg
ICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7Ci0KLSAgICAgICAgb2JqLT5pbXAt
PmdldFByb3BlcnR5TmFtZXMobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7Ci0gICAgICAgIHVuc2lnbmVkIHNpemUgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4ocHJvcGVydHlOYW1lcy5zaXplKCkpOwotICAgICAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgcmVhbGx5IGNhbGwgTlBOX01lbUFsbG9jIGJ1dCB0aGF0J3MgaW4g
V2ViS2l0Ci0gICAgICAgIE5QSWRlbnRpZmllciogaWRlbnRpZmllcnMgPSBzdGF0aWNfY2FzdDxO
UElkZW50aWZpZXIqPihtYWxsb2Moc2l6ZW9mKE5QSWRlbnRpZmllcikgKiBzaXplKSk7Ci0gICAg
ICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAg
ICAgICAgaWRlbnRpZmllcnNbaV0gPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIocHJvcGVydHlO
YW1lc1tpXS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgICAgICAqaWRlbnRpZmllciA9
IGlkZW50aWZpZXJzOwotICAgICAgICAqY291bnQgPSBzaXplOwotCi0gICAgICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBp
ZiAoTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT05fSEFTX0VOVU0oby0+X2NsYXNzKSAmJiBvLT5fY2xh
c3MtPmVudW1lcmF0ZSkKLSAgICAgICAgcmV0dXJuIG8tPl9jbGFzcy0+ZW51bWVyYXRlKG8sIGlk
ZW50aWZpZXIsIGNvdW50KTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgX05Q
Tl9Db25zdHJ1Y3QoTlBQLCBOUE9iamVjdCogbywgY29uc3QgTlBWYXJpYW50KiBhcmdzLCB1aW50
MzJfdCBhcmdDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKG8tPl9jbGFzcyA9
PSBOUFNjcmlwdE9iamVjdENsYXNzKSB7Ci0gICAgICAgIEphdmFTY3JpcHRPYmplY3QqIG9iaiA9
IHJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlwdE9iamVjdCo+KG8pOwotICAgICAgICAKLSAgICAg
ICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7Ci0gICAgICAgIAotICAgICAgICAvLyBMb29r
dXAgdGhlIGNvbnN0cnVjdG9yIG9iamVjdC4KLSAgICAgICAgUm9vdE9iamVjdCogcm9vdE9iamVj
dCA9IG9iai0+cm9vdE9iamVjdDsKLSAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2Jq
ZWN0LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYXV0
byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7
Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQotICAgICAg
ICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdDsKLSAg
ICAgICAgCi0gICAgICAgIC8vIENhbGwgdGhlIGNvbnN0cnVjdG9yIG9iamVjdC4KLSAgICAgICAg
SlNWYWx1ZSBjb25zdHJ1Y3RvciA9IG9iai0+aW1wOwotICAgICAgICBhdXRvIGNvbnN0cnVjdERh
dGEgPSBnZXRDb25zdHJ1Y3REYXRhKHZtLCBjb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGlmIChjb25z
dHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0
OwotICAgICAgICBnZXRMaXN0RnJvbVZhcmlhbnRBcmdzKGxleGljYWxHbG9iYWxPYmplY3QsIGFy
Z3MsIGFyZ0NvdW50LCByb290T2JqZWN0LCBhcmdMaXN0KTsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIWFyZ0xpc3QuaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHRWID0g
SlNDOjpjb25zdHJ1Y3QobGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3RydWN0b3IsIGNvbnN0cnVj
dERhdGEsIGFyZ0xpc3QpOwotICAgICAgICAKLSAgICAgICAgLy8gQ29udmVydCBhbmQgcmV0dXJu
IHRoZSByZXN1bHQuCi0gICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGxleGljYWxHbG9i
YWxPYmplY3QsIHJlc3VsdFYsIHJlc3VsdCk7Ci0gICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAoTlBfQ0xBU1Nf
U1RSVUNUX1ZFUlNJT05fSEFTX0NUT1Ioby0+X2NsYXNzKSAmJiBvLT5fY2xhc3MtPmNvbnN0cnVj
dCkKLSAgICAgICAgcmV0dXJuIG8tPl9jbGFzcy0+Y29uc3RydWN0KG8sIGFyZ3MsIGFyZ0NvdW50
LCByZXN1bHQpOwotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBleHRlcm4gIkMi
Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuaCBi
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBiZmYxNmRlYjUwM2UzYzY5MDU0YWJiMzA1NmJlMWRlZWY4OWY0ZmMxLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9OUF9qc29iamVjdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRl
ZiBOUF9KU09CSkVDVF9ICi0jZGVmaW5lIE5QX0pTT0JKRUNUX0gKLQotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCi0jaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBKU09iamVjdDsK
LW5hbWVzcGFjZSBCaW5kaW5ncyB7Ci1jbGFzcyBSb290T2JqZWN0OwotfQotfQotCi1zdHJ1Y3Qg
SmF2YVNjcmlwdE9iamVjdAotewotICAgIE5QT2JqZWN0IG9iamVjdDsKLSAgICBKU0M6OkpTT2Jq
ZWN0KiBpbXA7Ci0gICAgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdE9iamVjdDsKLX07
Ci0KLWV4dGVybiAiQyIgewotZXh0ZXJuIE5QQ2xhc3MqIE5QU2NyaXB0T2JqZWN0Q2xhc3M7Ci0K
LVdFQkNPUkVfRVhQT1JUIE5QT2JqZWN0KiBfTlBOX0NyZWF0ZVNjcmlwdE9iamVjdChOUFAsIEpT
Qzo6SlNPYmplY3QqLCBSZWZQdHI8SlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdD4mJik7Ci1XRUJD
T1JFX0VYUE9SVCBOUE9iamVjdCogX05QTl9DcmVhdGVOb1NjcmlwdE9iamVjdCh2b2lkKTsKLX0K
LQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL0NSdW50aW1lT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9jL0NSdW50aW1lT2JqZWN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZWI0ZmE1YWRlNTUwZjNlYmNhMmIyYWNlMDg1NjZjODJlMjdlNzBmNi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvYy9DUnVudGltZU9iamVjdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDUnVudGltZU9iamVjdC5oIgotCi0jaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNs
dWRlICJjX2luc3RhbmNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT2JqZWN0UHJvdG90
eXBlLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotbmFtZXNwYWNlIEJpbmRpbmdzIHsKLQotY29uc3Qg
Q2xhc3NJbmZvIENSdW50aW1lT2JqZWN0OjpzX2luZm8gPSB7ICJDUnVudGltZU9iamVjdCIsICZS
dW50aW1lT2JqZWN0OjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFC
TEUoQ1J1bnRpbWVPYmplY3QpIH07Ci0KLUNSdW50aW1lT2JqZWN0OjpDUnVudGltZU9iamVjdChW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWZQdHI8Q0luc3RhbmNlPiYmIGluc3RhbmNl
KQotICAgIDogUnVudGltZU9iamVjdCh2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKGluc3RhbmNlKSkK
LXsKLX0KLQotdm9pZCBDUnVudGltZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQotewot
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBBU1NFUlQoaW5oZXJpdHModm0sIGlu
Zm8oKSkpOwotfQotCi1DSW5zdGFuY2UqIENSdW50aW1lT2JqZWN0OjpnZXRJbnRlcm5hbENJbnN0
YW5jZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENJbnN0YW5jZSo+KGdldElu
dGVybmFsSW5zdGFuY2UoKSk7Ci19Ci0KLX0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvYy9DUnVudGltZU9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYnJp
ZGdlL2MvQ1J1bnRpbWVPYmplY3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEy
MjdlY2RiZjk0ZmM2OWEwN2VjN2VhZGQ4OWQwMDAxMWRmZjBkZi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9DUnVu
dGltZU9iamVjdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIENSdW50aW1lT2JqZWN0
X2gKLSNkZWZpbmUgQ1J1bnRpbWVPYmplY3RfaAotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCi0KLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJydW50aW1lX29i
amVjdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgSlNET01HbG9iYWxPYmpl
Y3Q7Ci19Ci0KLW5hbWVzcGFjZSBKU0MgewotbmFtZXNwYWNlIEJpbmRpbmdzIHsKLQotY2xhc3Mg
Q0luc3RhbmNlOwotCi1jbGFzcyBDUnVudGltZU9iamVjdCBmaW5hbCA6IHB1YmxpYyBSdW50aW1l
T2JqZWN0IHsKLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlID0gUnVudGltZU9iamVjdDsKLQotICAg
IHN0YXRpYyBDUnVudGltZU9iamVjdCogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFJlZlB0cjxDSW5zdGFuY2U+JiYgaW5zdGFuY2UpCi0gICAgewotICAgICAgICBDUnVudGlt
ZU9iamVjdCogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8Q1J1bnRpbWVPYmpl
Y3Q+KHZtLmhlYXApKSBDUnVudGltZU9iamVjdCh2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKGluc3Rh
bmNlKSk7Ci0gICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1
cm4gb2JqZWN0OwotICAgIH0KLQotICAgIENJbnN0YW5jZSogZ2V0SW50ZXJuYWxDSW5zdGFuY2Uo
KSBjb25zdDsKLQotICAgIERFQ0xBUkVfSU5GTzsKLQotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBDUnVudGltZU9iamVjdChW
TSYsIFN0cnVjdHVyZSosIFJlZlB0cjxDSW5zdGFuY2U+JiYpOwotICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mKTsKLX07Ci0KLX0KLX0KLQotI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfY2xhc3MuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdl
L2MvY19jbGFzcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhNTZlMmZkZTg1
NTc3YWNmOWMwNDc0Yzg5ODc3ZjRlMGQ1YzUxMDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19jbGFzcy5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJjX2NsYXNzLmgiCi0KLSNp
bmNsdWRlICJjX2luc3RhbmNlLmgiCi0jaW5jbHVkZSAiY19ydW50aW1lLmgiCi0jaW5jbHVkZSAi
bnBydW50aW1lX2ltcGwuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JZGVudGlmaWVyLmg+
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSlNWYWx1ZUlubGluZXMuaD4KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1uYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEJpbmRpbmdzIHsKLQotQ0NsYXNzOjpDQ2xhc3MoTlBDbGFz
cyogYUNsYXNzKQotewotICAgIG1faXNhID0gYUNsYXNzOwotfQotCi1DQ2xhc3M6On5DQ2xhc3Mo
KQotewotICAgIG1fbWV0aG9kcy5jbGVhcigpOwotICAgIG1fZmllbGRzLmNsZWFyKCk7Ci19Ci0K
LXR5cGVkZWYgSGFzaE1hcDxOUENsYXNzKiwgQ0NsYXNzKj4gQ2xhc3Nlc0J5SXNBTWFwOwotc3Rh
dGljIENsYXNzZXNCeUlzQU1hcCogY2xhc3Nlc0J5SXNBID0gMDsKLQotQ0NsYXNzKiBDQ2xhc3M6
OmNsYXNzRm9ySXNBKE5QQ2xhc3MqIGlzYSkKLXsKLSAgICBpZiAoIWNsYXNzZXNCeUlzQSkKLSAg
ICAgICAgY2xhc3Nlc0J5SXNBID0gbmV3IENsYXNzZXNCeUlzQU1hcDsKLQotICAgIENDbGFzcyog
YUNsYXNzID0gY2xhc3Nlc0J5SXNBLT5nZXQoaXNhKTsKLSAgICBpZiAoIWFDbGFzcykgewotICAg
ICAgICBhQ2xhc3MgPSBuZXcgQ0NsYXNzKGlzYSk7Ci0gICAgICAgIGNsYXNzZXNCeUlzQS0+c2V0
KGlzYSwgYUNsYXNzKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYUNsYXNzOwotfQotCi1NZXRob2Qq
IENDbGFzczo6bWV0aG9kTmFtZWQoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSW5zdGFuY2Uq
IGluc3RhbmNlKSBjb25zdAotewotICAgIFN0cmluZyBuYW1lKHByb3BlcnR5TmFtZS5wdWJsaWNO
YW1lKCkpOwotICAgIGlmIChuYW1lLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAKLSAgICBpZiAoTWV0aG9kKiBtZXRob2QgPSBtX21ldGhvZHMuZ2V0KG5hbWUuaW1wbCgp
KSkKLSAgICAgICAgcmV0dXJuIG1ldGhvZDsKLQotICAgIE5QSWRlbnRpZmllciBpZGVudCA9IF9O
UE5fR2V0U3RyaW5nSWRlbnRpZmllcihuYW1lLmFzY2lpKCkuZGF0YSgpKTsKLSAgICBjb25zdCBD
SW5zdGFuY2UqIGluc3QgPSBzdGF0aWNfY2FzdDxjb25zdCBDSW5zdGFuY2UqPihpbnN0YW5jZSk7
Ci0gICAgTlBPYmplY3QqIG9iaiA9IGluc3QtPmdldE9iamVjdCgpOwotICAgIGlmIChtX2lzYS0+
aGFzTWV0aG9kICYmIG1faXNhLT5oYXNNZXRob2Qob2JqLCBpZGVudCkpIHsKLSAgICAgICAgYXV0
byBtZXRob2QgPSBtYWtlVW5pcXVlPENNZXRob2Q+KGlkZW50KTsKLSAgICAgICAgQ01ldGhvZCog
cmV0ID0gbWV0aG9kLmdldCgpOwotICAgICAgICBtX21ldGhvZHMuc2V0KG5hbWUuaW1wbCgpLCBX
VEZNb3ZlKG1ldGhvZCkpOwotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLSAgICAKLSAgICBy
ZXR1cm4gbnVsbHB0cjsKLX0KLQotRmllbGQqIENDbGFzczo6ZmllbGROYW1lZChQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBJbnN0YW5jZSogaW5zdGFuY2UpIGNvbnN0Ci17Ci0gICAgU3RyaW5n
IG5hbWUocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Ci0gICAgaWYgKG5hbWUuaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIGlmIChGaWVsZCogZmllbGQgPSBt
X2ZpZWxkcy5nZXQobmFtZS5pbXBsKCkpKQotICAgICAgICByZXR1cm4gZmllbGQ7Ci0KLSAgICBO
UElkZW50aWZpZXIgaWRlbnQgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIobmFtZS5hc2NpaSgp
LmRhdGEoKSk7Ci0gICAgY29uc3QgQ0luc3RhbmNlKiBpbnN0ID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
Q0luc3RhbmNlKj4oaW5zdGFuY2UpOwotICAgIE5QT2JqZWN0KiBvYmogPSBpbnN0LT5nZXRPYmpl
Y3QoKTsKLSAgICBpZiAobV9pc2EtPmhhc1Byb3BlcnR5ICYmIG1faXNhLT5oYXNQcm9wZXJ0eShv
YmosIGlkZW50KSkgewotICAgICAgICBhdXRvIGZpZWxkID0gbWFrZVVuaXF1ZTxDRmllbGQ+KGlk
ZW50KTsKLSAgICAgICAgQ0ZpZWxkKiByZXQgPSBmaWVsZC5nZXQoKTsKLSAgICAgICAgbV9maWVs
ZHMuc2V0KG5hbWUuaW1wbCgpLCBXVEZNb3ZlKGZpZWxkKSk7Ci0gICAgICAgIHJldHVybiByZXQ7
Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCaW5kaW5ncwotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2NsYXNzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvYy9jX2NsYXNzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0YjZi
MGVlNmVhMzJkYTc0OTNhNmE1Y2U2NGI4N2U1OWIwNTMwMDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19jbGFz
cy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwMyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBCSU5ESU5HU19DX0NMQVNTX0hfCi0j
ZGVmaW5lIEJJTkRJTkdTX0NfQ0xBU1NfSF8KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQotCi0jaW5jbHVkZSAiQnJpZGdlSlNDLmgiCi0jaW5jbHVkZSAibnBydW50aW1lX2ludGVy
bmFsLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci1uYW1l
c3BhY2UgQmluZGluZ3MgewotCi1jbGFzcyBDQ2xhc3MgOiBwdWJsaWMgQ2xhc3MgewotcHJvdGVj
dGVkOgotICAgIENDbGFzcyhOUENsYXNzKik7IC8vIFVzZSBjbGFzc0ZvcklzQSB0byBjcmVhdGUg
YSBDQ2xhc3MuCi0gICAgCi1wdWJsaWM6Ci0gICAgc3RhdGljIENDbGFzcyogY2xhc3NGb3JJc0Eo
TlBDbGFzcyopOwotICAgIHZpcnR1YWwgfkNDbGFzcygpOwotCi0gICAgTWV0aG9kKiBtZXRob2RO
YW1lZChQcm9wZXJ0eU5hbWUsIEluc3RhbmNlKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgRmllbGQq
IGZpZWxkTmFtZWQoUHJvcGVydHlOYW1lLCBJbnN0YW5jZSopIGNvbnN0IG92ZXJyaWRlOwotCi1w
cml2YXRlOgotICAgIE5QQ2xhc3MqIG1faXNhOwotICAgIG11dGFibGUgSGFzaE1hcDxSZWZQdHI8
U3RyaW5nSW1wbD4sIHN0ZDo6dW5pcXVlX3B0cjxNZXRob2Q+PiBtX21ldGhvZHM7Ci0gICAgbXV0
YWJsZSBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgc3RkOjp1bmlxdWVfcHRyPEZpZWxkPj4g
bV9maWVsZHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBCaW5kaW5ncwotfSAvLyBuYW1lc3BhY2Ug
SlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBmYTc2ZTE5ODU2MTJhYzU5OGYxZjhmOTZlZjNhYzVjMjU2ZmRkY2JkLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9jL2NfaW5zdGFuY2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzg1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1
ZGUgImNfaW5zdGFuY2UuaCIKLQotI2luY2x1ZGUgIkNSdW50aW1lT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiSWRlbnRpZmllclJlcC5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUg
ImNfY2xhc3MuaCIKLSNpbmNsdWRlICJjX3J1bnRpbWUuaCIKLSNpbmNsdWRlICJjX3V0aWxpdHku
aCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI2luY2x1ZGUgInJ1bnRpbWVfbWV0aG9k
LmgiCi0jaW5jbHVkZSAicnVudGltZV9yb290LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
QXJnTGlzdC5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NhbGxGcmFtZS5oPgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0Vycm9yLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVu
Y3Rpb25Qcm90b3R5cGUuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPgotI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBKU0MgewotbmFtZXNwYWNlIEJpbmRpbmdz
IHsKLQotc3RhdGljIFN0cmluZyYgZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkKLXsKLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBleGNlcHRpb25TdHI7Ci0gICAgcmV0dXJuIGV4Y2Vw
dGlvblN0cjsKLX0KLQotdm9pZCBDSW5zdGFuY2U6OnNldEdsb2JhbEV4Y2VwdGlvbihTdHJpbmcg
ZXhjZXB0aW9uKQotewotICAgIGdsb2JhbEV4Y2VwdGlvblN0cmluZygpID0gZXhjZXB0aW9uOwot
fQotCi12b2lkIENJbnN0YW5jZTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KQotewotICAgIGlmIChnbG9iYWxFeGNlcHRp
b25TdHJpbmcoKS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgewotICAgICAgICBW
TSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayh2bSk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICAgICAgdGhyb3dFeGNlcHRpb24obGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbEV4Y2VwdGlvblN0cmluZygpKSk7Ci0g
ICAgfQotCi0gICAgZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkgPSBTdHJpbmcoKTsKLX0KLQotQ0lu
c3RhbmNlOjpDSW5zdGFuY2UoTlBPYmplY3QqIG8sIFJlZlB0cjxSb290T2JqZWN0PiYmIHJvb3RP
YmplY3QpCi0gICAgOiBJbnN0YW5jZShXVEZNb3ZlKHJvb3RPYmplY3QpKQotewotICAgIF9vYmpl
Y3QgPSBfTlBOX1JldGFpbk9iamVjdChvKTsKLSAgICBfY2xhc3MgPSAwOwotfQotCi1DSW5zdGFu
Y2U6On5DSW5zdGFuY2UoKQotewotICAgIF9OUE5fUmVsZWFzZU9iamVjdChfb2JqZWN0KTsKLX0K
LQotUnVudGltZU9iamVjdCogQ0luc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KQotewotICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0
RE9NU3RydWN0dXJlIHVzZXMgdGhlIHByb3RvdHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBv
YmplY3QuCi0gICAgcmV0dXJuIENSdW50aW1lT2JqZWN0OjpjcmVhdGUobGV4aWNhbEdsb2JhbE9i
amVjdC0+dm0oKSwgV2ViQ29yZTo6ZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZTxDUnVudGltZU9i
amVjdD4obGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXMpOwotfQotCi1DbGFzcyAqQ0luc3RhbmNl
OjpnZXRDbGFzcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFfY2xhc3MpCi0gICAgICAgIF9jbGFzcyA9
IENDbGFzczo6Y2xhc3NGb3JJc0EoX29iamVjdC0+X2NsYXNzKTsKLSAgICByZXR1cm4gX2NsYXNz
OwotfQotCi1ib29sIENJbnN0YW5jZTo6c3VwcG9ydHNJbnZva2VEZWZhdWx0TWV0aG9kKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gX29iamVjdC0+X2NsYXNzLT5pbnZva2VEZWZhdWx0OwotfQotCi1j
bGFzcyBDUnVudGltZU1ldGhvZCBmaW5hbCA6IHB1YmxpYyBSdW50aW1lTWV0aG9kIHsKLXB1Ymxp
YzoKLSAgICB1c2luZyBCYXNlID0gUnVudGltZU1ldGhvZDsKLQotICAgIHN0YXRpYyBDUnVudGlt
ZU1ldGhvZCogY3JlYXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIEJpbmRpbmdzOjpN
ZXRob2QqIG1ldGhvZCkKLSAgICB7Ci0gICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKLSAgICAgICAgLy8gRklYTUU6IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNlcyB0aGUg
cHJvdG90eXBlIG9mZiBvZiB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdAotICAgICAgICAvLyBXZSBu
ZWVkIHRvIHBhc3MgaW4gdGhlIHJpZ2h0IGdsb2JhbCBvYmplY3QgZm9yICJpIi4KLSAgICAgICAg
U3RydWN0dXJlKiBkb21TdHJ1Y3R1cmUgPSBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0
dXJlPENSdW50aW1lTWV0aG9kPihsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICAgICAgQ1J1bnRp
bWVNZXRob2QqIHJ1bnRpbWVNZXRob2QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxDUnVu
dGltZU1ldGhvZD4odm0uaGVhcCkpIENSdW50aW1lTWV0aG9kKHZtLCBkb21TdHJ1Y3R1cmUsIG1l
dGhvZCk7Ci0gICAgICAgIHJ1bnRpbWVNZXRob2QtPmZpbmlzaENyZWF0aW9uKHZtLCBuYW1lKTsK
LSAgICAgICAgcmV0dXJuIHJ1bnRpbWVNZXRob2Q7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhJbnRlcm5hbEZ1bmN0
aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotICAgIERFQ0xBUkVf
SU5GTzsKLQotcHJpdmF0ZToKLSAgICBDUnVudGltZU1ldGhvZChWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBCaW5kaW5nczo6TWV0aG9kKiBtZXRob2QpCi0gICAgICAgIDogUnVudGltZU1l
dGhvZCh2bSwgc3RydWN0dXJlLCBtZXRob2QpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAgewotICAgICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgbmFtZSk7Ci0gICAgICAgIEFTU0VSVChpbmhlcml0cyh2
bSwgaW5mbygpKSk7Ci0gICAgfQotfTsKLQotY29uc3QgQ2xhc3NJbmZvIENSdW50aW1lTWV0aG9k
OjpzX2luZm8gPSB7ICJDUnVudGltZU1ldGhvZCIsICZSdW50aW1lTWV0aG9kOjpzX2luZm8sIG51
bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoQ1J1bnRpbWVNZXRob2QpIH07Ci0K
LUpTVmFsdWUgQ0luc3RhbmNlOjpnZXRNZXRob2QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgTWV0aG9kKiBtZXRo
b2QgPSBnZXRDbGFzcygpLT5tZXRob2ROYW1lZChwcm9wZXJ0eU5hbWUsIHRoaXMpOwotICAgIHJl
dHVybiBDUnVudGltZU1ldGhvZDo6Y3JlYXRlKGxleGljYWxHbG9iYWxPYmplY3QsIGxleGljYWxH
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCksIG1ldGhvZCk7Ci19Ci0KLUpT
VmFsdWUgQ0luc3RhbmNlOjppbnZva2VNZXRob2QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBSdW50aW1lTWV0aG9kKiBydW50aW1lTWV0
aG9kKQotewotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKCFhc09iamVjdChy
dW50aW1lTWV0aG9kKS0+aW5oZXJpdHM8Q1J1bnRpbWVNZXRob2Q+KHZtKSkKLSAgICAgICAgcmV0
dXJuIHRocm93VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiQXR0ZW1wdCB0
byBpbnZva2Ugbm9uLXBsdWctaW4gbWV0aG9kIG9uIHBsdWctaW4gb2JqZWN0LiJfcyk7Ci0KLSAg
ICBDTWV0aG9kKiBtZXRob2QgPSBzdGF0aWNfY2FzdDxDTWV0aG9kKj4ocnVudGltZU1ldGhvZC0+
bWV0aG9kKCkpOwotICAgIEFTU0VSVChtZXRob2QpOwotCi0gICAgTlBJZGVudGlmaWVyIGlkZW50
ID0gbWV0aG9kLT5pZGVudGlmaWVyKCk7Ci0gICAgaWYgKCFfb2JqZWN0LT5fY2xhc3MtPmhhc01l
dGhvZChfb2JqZWN0LCBpZGVudCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0g
ICAgdW5zaWduZWQgY291bnQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsKLSAgICBWZWN0
b3I8TlBWYXJpYW50LCA4PiBjQXJncyhjb3VudCk7Ci0KLSAgICB1bnNpZ25lZCBpOwotICAgIGZv
ciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFu
dChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLCAm
Y0FyZ3NbaV0pOwotCi0gICAgLy8gSW52b2tlIHRoZSAnQycgbWV0aG9kLgotICAgIGJvb2wgcmV0
dmFsID0gdHJ1ZTsKLSAgICBOUFZhcmlhbnQgcmVzdWx0VmFyaWFudDsKLSAgICBWT0lEX1RPX05Q
VkFSSUFOVChyZXN1bHRWYXJpYW50KTsKLQotICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgICAgICBBU1NFUlQo
Z2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwotICAgICAgICByZXR2YWwgPSBfb2Jq
ZWN0LT5fY2xhc3MtPmludm9rZShfb2JqZWN0LCBpZGVudCwgY0FyZ3MuZGF0YSgpLCBjb3VudCwg
JnJlc3VsdFZhcmlhbnQpOwotICAgICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUo
bGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgfQotCi0gICAgaWYgKCFyZXR2YWwpCi0gICAgICAg
IHRocm93RXhjZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiRXJyb3IgY2FsbGluZyBtZXRob2Qgb24gTlBPYmplY3QuIl9z
KSk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgX05QTl9SZWxl
YXNlVmFyaWFudFZhbHVlKCZjQXJnc1tpXSk7Ci0KLSAgICBKU1ZhbHVlIHJlc3VsdFZhbHVlID0g
Y29udmVydE5QVmFyaWFudFRvVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgJnJlc3VsdFZhcmlh
bnQsIG1fcm9vdE9iamVjdC5nZXQoKSk7Ci0gICAgX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlKCZy
ZXN1bHRWYXJpYW50KTsKLSAgICByZXR1cm4gcmVzdWx0VmFsdWU7Ci19Ci0KLQotSlNWYWx1ZSBD
SW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIFZNJiB2bSA9IGxleGljYWxH
bG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotCi0gICAgaWYgKCFfb2JqZWN0LT5fY2xhc3MtPmludm9rZURlZmF1bHQpCi0gICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgdW5zaWduZWQgY291bnQgPSBjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKTsKLSAgICBWZWN0b3I8TlBWYXJpYW50LCA4PiBjQXJncyhjb3VudCk7
Ci0KLSAgICB1bnNpZ25lZCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAg
ICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLCAmY0FyZ3NbaV0pOwotCi0gICAgLy8gSW52b2tlIHRo
ZSAnQycgbWV0aG9kLgotICAgIGJvb2wgcmV0dmFsID0gdHJ1ZTsKLSAgICBOUFZhcmlhbnQgcmVz
dWx0VmFyaWFudDsKLSAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHRWYXJpYW50KTsKLSAgICB7
Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKLSAgICAgICAgQVNTRVJUKGdsb2JhbEV4Y2VwdGlvblN0cmluZygpLmlzTnVsbCgp
KTsKLSAgICAgICAgcmV0dmFsID0gX29iamVjdC0+X2NsYXNzLT5pbnZva2VEZWZhdWx0KF9vYmpl
Y3QsIGNBcmdzLmRhdGEoKSwgY291bnQsICZyZXN1bHRWYXJpYW50KTsKLSAgICAgICAgbW92ZUds
b2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIH0KLQot
ICAgIGlmICghcmV0dmFsKQotICAgICAgICB0aHJvd0V4Y2VwdGlvbihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBzY29wZSwgY3JlYXRlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgIkVycm9yIGNhbGxp
bmcgbWV0aG9kIG9uIE5QT2JqZWN0LiJfcykpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IGNvdW50
OyBpKyspCi0gICAgICAgIF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSgmY0FyZ3NbaV0pOwotCi0g
ICAgSlNWYWx1ZSByZXN1bHRWYWx1ZSA9IGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGxleGljYWxH
bG9iYWxPYmplY3QsICZyZXN1bHRWYXJpYW50LCBtX3Jvb3RPYmplY3QuZ2V0KCkpOwotICAgIF9O
UE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSgmcmVzdWx0VmFyaWFudCk7Ci0gICAgcmV0dXJuIHJlc3Vs
dFZhbHVlOwotfQotCi1ib29sIENJbnN0YW5jZTo6c3VwcG9ydHNDb25zdHJ1Y3QoKSBjb25zdAot
ewotICAgIHJldHVybiBfb2JqZWN0LT5fY2xhc3MtPmNvbnN0cnVjdDsKLX0KLQotSlNWYWx1ZSBD
SW5zdGFuY2U6Omludm9rZUNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiwgY29uc3QgQXJnTGlzdCYgYXJncykKLXsKLSAgICBWTSYgdm0gPSBs
ZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgIGlmICghX29iamVjdC0+X2NsYXNzLT5jb25zdHJ1Y3QpCi0gICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgdW5zaWduZWQgY291bnQgPSBhcmdzLnNp
emUoKTsKLSAgICBWZWN0b3I8TlBWYXJpYW50LCA4PiBjQXJncyhjb3VudCk7Ci0KLSAgICB1bnNp
Z25lZCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICBjb252ZXJ0
VmFsdWVUb05QVmFyaWFudChsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmdzLmF0KGkpLCAmY0FyZ3Nb
aV0pOwotCi0gICAgLy8gSW52b2tlIHRoZSAnQycgbWV0aG9kLgotICAgIGJvb2wgcmV0dmFsID0g
dHJ1ZTsKLSAgICBOUFZhcmlhbnQgcmVzdWx0VmFyaWFudDsKLSAgICBWT0lEX1RPX05QVkFSSUFO
VChyZXN1bHRWYXJpYW50KTsKLSAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICAgICAgQVNTRVJUKGdsb2JhbEV4
Y2VwdGlvblN0cmluZygpLmlzTnVsbCgpKTsKLSAgICAgICAgcmV0dmFsID0gX29iamVjdC0+X2Ns
YXNzLT5jb25zdHJ1Y3QoX29iamVjdCwgY0FyZ3MuZGF0YSgpLCBjb3VudCwgJnJlc3VsdFZhcmlh
bnQpOwotICAgICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUobGV4aWNhbEdsb2Jh
bE9iamVjdCk7Ci0gICAgfQotCi0gICAgaWYgKCFyZXR2YWwpCi0gICAgICAgIHRocm93RXhjZXB0
aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiRXJyb3IgY2FsbGluZyBtZXRob2Qgb24gTlBPYmplY3QuIl9zKSk7Ci0KLSAgICBm
b3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgX05QTl9SZWxlYXNlVmFyaWFudFZh
bHVlKCZjQXJnc1tpXSk7Ci0KLSAgICBKU1ZhbHVlIHJlc3VsdFZhbHVlID0gY29udmVydE5QVmFy
aWFudFRvVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgJnJlc3VsdFZhcmlhbnQsIG1fcm9vdE9i
amVjdC5nZXQoKSk7Ci0gICAgX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlKCZyZXN1bHRWYXJpYW50
KTsKLSAgICByZXR1cm4gcmVzdWx0VmFsdWU7Ci19Ci0KLUpTVmFsdWUgQ0luc3RhbmNlOjpkZWZh
dWx0VmFsdWUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByZWZlcnJlZFBy
aW1pdGl2ZVR5cGUgaGludCkgY29uc3QKLXsKLSAgICBpZiAoaGludCA9PSBQcmVmZXJTdHJpbmcp
Ci0gICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBp
ZiAoaGludCA9PSBQcmVmZXJOdW1iZXIpCi0gICAgICAgIHJldHVybiBudW1iZXJWYWx1ZShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gdmFsdWVPZihsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKLX0KLQotSlNWYWx1ZSBDSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0KSBjb25zdAotewotICAgIEpTVmFsdWUgdmFsdWU7Ci0gICAgaWYg
KHRvSlNQcmltaXRpdmUobGV4aWNhbEdsb2JhbE9iamVjdCwgInRvU3RyaW5nIiwgdmFsdWUpKQot
ICAgICAgICByZXR1cm4gdmFsdWU7Ci0KLSAgICAvLyBGYWxsYmFjayB0byBkZWZhdWx0IGltcGxl
bWVudGF0aW9uLgotICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcobGV4aWNhbEdsb2JhbE9i
amVjdC0+dm0oKSwgIk5QT2JqZWN0Il9zKTsKLX0KLQotSlNWYWx1ZSBDSW5zdGFuY2U6Om51bWJl
clZhbHVlKEpTR2xvYmFsT2JqZWN0KikgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHNvbWV0aGluZyBzZW5zaWJsZS4KLSAgICByZXR1cm4ganNOdW1iZXIoMCk7Ci19Ci0KLUpTVmFs
dWUgQ0luc3RhbmNlOjpib29sZWFuVmFsdWUoKSBjb25zdAotewotICAgIC8vIEFzIHBlciBFQ01B
IDkuMi4KLSAgICByZXR1cm4ganNCb29sZWFuKGdldE9iamVjdCgpKTsKLX0KLQotSlNWYWx1ZSBD
SW5zdGFuY2U6OnZhbHVlT2YoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QpIGNv
bnN0Ci17Ci0gICAgSlNWYWx1ZSB2YWx1ZTsKLSAgICBpZiAodG9KU1ByaW1pdGl2ZShsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAidmFsdWVPZiIsIHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwot
Ci0gICAgLy8gRmFsbGJhY2sgdG8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KLSAgICByZXR1cm4g
c3RyaW5nVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci19Ci0KLWJvb2wgQ0luc3RhbmNlOjp0
b0pTUHJpbWl0aXZlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBj
aGFyKiBuYW1lLCBKU1ZhbHVlJiByZXN1bHRWYWx1ZSkgY29uc3QKLXsKLSAgICBWTSYgdm0gPSBs
ZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgIE5QSWRlbnRpZmllciBpZGVudCA9IF9OUE5fR2V0U3RyaW5nSWRl
bnRpZmllcihuYW1lKTsKLSAgICBpZiAoIV9vYmplY3QtPl9jbGFzcy0+aGFzTWV0aG9kKF9vYmpl
Y3QsIGlkZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSW52b2tlIHRoZSAn
QycgbWV0aG9kLgotICAgIGJvb2wgcmV0dmFsID0gdHJ1ZTsKLSAgICBOUFZhcmlhbnQgcmVzdWx0
VmFyaWFudDsKLSAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHRWYXJpYW50KTsKLQotICAgIHsK
LSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGxleGljYWxHbG9iYWxP
YmplY3QpOwotICAgICAgICBBU1NFUlQoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkp
OwotICAgICAgICByZXR2YWwgPSBfb2JqZWN0LT5fY2xhc3MtPmludm9rZShfb2JqZWN0LCBpZGVu
dCwgMCwgMCwgJnJlc3VsdFZhcmlhbnQpOwotICAgICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9F
eGVjU3RhdGUobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgfQotCi0gICAgaWYgKCFyZXR2YWwp
Ci0gICAgICAgIHRocm93RXhjZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVh
dGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCAiRXJyb3IgY2FsbGluZyBtZXRob2Qgb24gTlBP
YmplY3QuIl9zKSk7Ci0KLSAgICByZXN1bHRWYWx1ZSA9IGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVl
KGxleGljYWxHbG9iYWxPYmplY3QsICZyZXN1bHRWYXJpYW50LCBtX3Jvb3RPYmplY3QuZ2V0KCkp
OwotICAgIF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSgmcmVzdWx0VmFyaWFudCk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ0luc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgbmFtZUFycmF5
KQotewotICAgIGlmICghTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT05fSEFTX0VOVU0oX29iamVjdC0+
X2NsYXNzKSB8fCAhX29iamVjdC0+X2NsYXNzLT5lbnVtZXJhdGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHVpbnQzMl90IGNvdW50OwotICAgIE5QSWRlbnRpZmllciogaWRlbnRpZmllcnM7Ci0K
LSAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKLSAgICAgICAgQVNTRVJUKGdsb2JhbEV4Y2VwdGlvblN0cmluZygpLmlz
TnVsbCgpKTsKLSAgICAgICAgYm9vbCBvayA9IF9vYmplY3QtPl9jbGFzcy0+ZW51bWVyYXRlKF9v
YmplY3QsICZpZGVudGlmaWVycywgJmNvdW50KTsKLSAgICAgICAgbW92ZUdsb2JhbEV4Y2VwdGlv
blRvRXhlY1N0YXRlKGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgICAgICBpZiAoIW9rKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmpl
Y3QtPnZtKCk7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAg
ICAgICAgSWRlbnRpZmllclJlcCogaWRlbnRpZmllciA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJS
ZXAqPihpZGVudGlmaWVyc1tpXSk7Ci0KLSAgICAgICAgaWYgKGlkZW50aWZpZXItPmlzU3RyaW5n
KCkpCi0gICAgICAgICAgICBuYW1lQXJyYXkuYWRkKGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVy
KGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXItPnN0cmluZygpKSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG5hbWVBcnJheS5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaWRlbnRp
Zmllci0+bnVtYmVyKCkpKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmVh
bGx5IGNhbGwgTlBOX01lbUZyZWUgYnV0IHRoYXQncyBpbiBXZWJLaXQKLSAgICBmcmVlKGlkZW50
aWZpZXJzKTsKLX0KLQotfQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmggYi9T
b3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGQyZGQ3Zjk4Yzg1MzkzNzI5NjI5YmQ3MjgyYWQ0MDQ3MDQxNmMzMDQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
YnJpZGdlL2MvY19pbnN0YW5jZS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEJJTkRJ
TkdTX0NfSU5TVEFOQ0VfSF8KLSNkZWZpbmUgQklORElOR1NfQ19JTlNUQU5DRV9IXwotCi0jaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJCcmlkZ2VKU0MuaCIKLSNp
bmNsdWRlICJydW50aW1lX3Jvb3QuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotdHlwZWRlZiBzdHJ1Y3QgTlBPYmplY3QgTlBPYmplY3Q7Ci0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1uYW1lc3BhY2UgQmluZGluZ3MgewotCi1jbGFzcyBDQ2xhc3M7Ci0KLWNsYXNzIENJbnN0YW5j
ZSA6IHB1YmxpYyBJbnN0YW5jZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDSW5zdGFuY2U+
IGNyZWF0ZShOUE9iamVjdCogb2JqZWN0LCBSZWZQdHI8Um9vdE9iamVjdD4mJiByb290T2JqZWN0
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ0luc3RhbmNlKG9iamVjdCwg
V1RGTW92ZShyb290T2JqZWN0KSkpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHNldEdsb2Jh
bEV4Y2VwdGlvbihTdHJpbmcpOwotICAgIHN0YXRpYyB2b2lkIG1vdmVHbG9iYWxFeGNlcHRpb25U
b0V4ZWNTdGF0ZShKU0dsb2JhbE9iamVjdCopOwotCi0gICAgdmlydHVhbCB+Q0luc3RhbmNlKCk7
Ci0KLSAgICBDbGFzcyAqZ2V0Q2xhc3MoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIEpTVmFsdWUg
dmFsdWVPZihKU0dsb2JhbE9iamVjdCopIGNvbnN0IG92ZXJyaWRlOwotICAgIEpTVmFsdWUgZGVm
YXVsdFZhbHVlKEpTR2xvYmFsT2JqZWN0KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Qg
b3ZlcnJpZGU7Ci0KLSAgICBKU1ZhbHVlIGdldE1ldGhvZChKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZSkgb3ZlcnJpZGU7Ci0gICAgSlNWYWx1ZSBpbnZva2VNZXRob2QoSlNHbG9iYWxPYmpl
Y3QqLCBDYWxsRnJhbWUqLCBSdW50aW1lTWV0aG9kKikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzdXBw
b3J0c0ludm9rZURlZmF1bHRNZXRob2QoKSBjb25zdCBvdmVycmlkZTsKLSAgICBKU1ZhbHVlIGlu
dm9rZURlZmF1bHRNZXRob2QoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKSBvdmVycmlkZTsK
LQotICAgIGJvb2wgc3VwcG9ydHNDb25zdHJ1Y3QoKSBjb25zdCBvdmVycmlkZTsKLSAgICBKU1Zh
bHVlIGludm9rZUNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIGNvbnN0IEFy
Z0xpc3QmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZUFycmF5Jikgb3ZlcnJpZGU7Ci0KLSAgICBKU1ZhbHVlIHN0cmlu
Z1ZhbHVlKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7Ci0gICAgSlNWYWx1ZSBudW1iZXJWYWx1ZShK
U0dsb2JhbE9iamVjdCopIGNvbnN0OwotICAgIEpTVmFsdWUgYm9vbGVhblZhbHVlKCkgY29uc3Q7
Ci0KLSAgICBOUE9iamVjdCAqZ2V0T2JqZWN0KCkgY29uc3QgeyByZXR1cm4gX29iamVjdDsgfQot
Ci1wcml2YXRlOgotICAgIENJbnN0YW5jZShOUE9iamVjdCosIFJlZlB0cjxSb290T2JqZWN0PiYm
KTsKLQotICAgIFJ1bnRpbWVPYmplY3QqIG5ld1J1bnRpbWVPYmplY3QoSlNHbG9iYWxPYmplY3Qq
KSBvdmVycmlkZTsKLSAgICBib29sIHRvSlNQcmltaXRpdmUoSlNHbG9iYWxPYmplY3QqLCBjb25z
dCBjaGFyKiwgSlNWYWx1ZSYpIGNvbnN0OwotCi0KLSAgICBtdXRhYmxlIENDbGFzcyAqX2NsYXNz
OwotICAgIE5QT2JqZWN0ICpfb2JqZWN0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgQmluZGluZ3MK
LQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX3J1
bnRpbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19ydW50aW1lLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc1MmZlMjIxNWQ0MTc1NmYyZTVjNDYxODk0ZWI1ZTZk
ZTlkMTQwNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX3J1bnRpbWUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
ODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0KLSNpbmNsdWRlICJjX3J1bnRpbWUuaCIKLQotI2luY2x1ZGUgImNfaW5zdGFuY2UuaCIKLSNp
bmNsdWRlICJjX3V0aWxpdHkuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
T2JqZWN0Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotbmFtZXNwYWNlIEJpbmRpbmdzIHsKLQotSlNW
YWx1ZSBDRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBjb25zdCBJbnN0YW5jZSogaW5zdCkgY29uc3QKLXsKLSAgICBjb25zdCBDSW5z
dGFuY2UqIGluc3RhbmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ0luc3RhbmNlKj4oaW5zdCk7Ci0g
ICAgTlBPYmplY3QqIG9iaiA9IGluc3RhbmNlLT5nZXRPYmplY3QoKTsKLSAgICBpZiAob2JqLT5f
Y2xhc3MtPmdldFByb3BlcnR5KSB7Ci0gICAgICAgIE5QVmFyaWFudCBwcm9wZXJ0eTsKLSAgICAg
ICAgVk9JRF9UT19OUFZBUklBTlQocHJvcGVydHkpOwotCi0gICAgICAgIGJvb2wgcmVzdWx0Owot
ICAgICAgICB7Ci0gICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
bGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICByZXN1bHQgPSBvYmotPl9jbGFzcy0+
Z2V0UHJvcGVydHkob2JqLCBfZmllbGRJZGVudGlmaWVyLCAmcHJvcGVydHkpOwotICAgICAgICAg
ICAgQ0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUobGV4aWNhbEdsb2Jh
bE9iamVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICAgICAg
SlNWYWx1ZSByZXN1bHQgPSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAmcHJvcGVydHksIGluc3RhbmNlLT5yb290T2JqZWN0KCkpOwotICAgICAgICAgICAgX05Q
Tl9SZWxlYXNlVmFyaWFudFZhbHVlKCZwcm9wZXJ0eSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1i
b29sIENGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBjb25zdCBJbnN0YW5jZSAqaW5zdCwgSlNWYWx1ZSBhVmFsdWUpIGNvbnN0Ci17
Ci0gICAgY29uc3QgQ0luc3RhbmNlKiBpbnN0YW5jZSA9IHN0YXRpY19jYXN0PGNvbnN0IENJbnN0
YW5jZSo+KGluc3QpOwotICAgIE5QT2JqZWN0KiBvYmogPSBpbnN0YW5jZS0+Z2V0T2JqZWN0KCk7
Ci0gICAgaWYgKG9iai0+X2NsYXNzLT5zZXRQcm9wZXJ0eSkgewotICAgICAgICBOUFZhcmlhbnQg
dmFyaWFudDsKLSAgICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQobGV4aWNhbEdsb2JhbE9i
amVjdCwgYVZhbHVlLCAmdmFyaWFudCk7Ci0KLSAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsK
LSAgICAgICAgewotICAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgICAgICAgICAgcmVzdWx0ID0gb2JqLT5fY2xhc3Mt
PnNldFByb3BlcnR5KG9iaiwgX2ZpZWxkSWRlbnRpZmllciwgJnZhcmlhbnQpOwotICAgICAgICAg
ICAgQ0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUobGV4aWNhbEdsb2Jh
bE9iamVjdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWUo
JnZhcmlhbnQpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLX0gfQotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX3J1bnRpbWUuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9jL2NfcnVudGltZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3NzkwODRkZGVhMjNhNmJkZTFlYTIxYjlmYmZhZGMzY2U5Zjg1MDNmLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9j
L2NfcnVudGltZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBCSU5ESU5H
U19DX1JVTlRJTUVfSF8KLSNkZWZpbmUgQklORElOR1NfQ19SVU5USU1FX0hfCi0KLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIkJyaWRnZUpTQy5oIgotI2luY2x1
ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLW5hbWVzcGFjZSBC
aW5kaW5ncyB7Ci0KLWNsYXNzIENGaWVsZCA6IHB1YmxpYyBGaWVsZCB7Ci1wdWJsaWM6Ci0gICAg
Q0ZpZWxkKE5QSWRlbnRpZmllciBpZGVudCkgOiBfZmllbGRJZGVudGlmaWVyKGlkZW50KSB7IH0K
LQotICAgIEpTVmFsdWUgdmFsdWVGcm9tSW5zdGFuY2UoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJ
bnN0YW5jZSopIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgc2V0VmFsdWVUb0luc3RhbmNlKEpT
R2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdGFuY2UqLCBKU1ZhbHVlKSBjb25zdCBvdmVycmlkZTsK
LQotICAgIE5QSWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gX2ZpZWxkSWRl
bnRpZmllcjsgfQotCi1wcml2YXRlOgotICAgIE5QSWRlbnRpZmllciBfZmllbGRJZGVudGlmaWVy
OwotfTsKLQotCi1jbGFzcyBDTWV0aG9kIDogcHVibGljIE1ldGhvZCB7Ci1wdWJsaWM6Ci0gICAg
Q01ldGhvZChOUElkZW50aWZpZXIgaWRlbnQpIDogX21ldGhvZElkZW50aWZpZXIoaWRlbnQpIHsg
fQotCi0gICAgTlBJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBfbWV0aG9k
SWRlbnRpZmllcjsgfQotICAgIGludCBudW1QYXJhbWV0ZXJzKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gMDsgfQotCi1wcml2YXRlOgotICAgIE5QSWRlbnRpZmllciBfbWV0aG9kSWRlbnRpZmll
cjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCi19IC8vIG5hbWVzcGFjZSBKU0MKLQot
I2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvYy9jX3V0aWxpdHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBk
NzkxYjgyNTI2NGI5ZmE3MDYwNTQxZjMwNWVlYjBiYzM2NTc4MDMwLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2Nf
dXRpbGl0eS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJjX3V0
aWxpdHkuaCIKLQotI2luY2x1ZGUgIkNSdW50aW1lT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NV2lu
ZG93LmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiSlNET01XaW5kb3cu
aCIKLSNpbmNsdWRlICJOUF9qc29iamVjdC5oIgotI2luY2x1ZGUgImNfaW5zdGFuY2UuaCIKLSNp
bmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI2luY2x1ZGUgIm5wcnVudGltZV9wcml2LmgiCi0j
aW5jbHVkZSAicnVudGltZV9vYmplY3QuaCIKLSNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTTG9jay5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQmlu
ZGluZ3MgewotCi1zdGF0aWMgU3RyaW5nIGNvbnZlcnRVVEY4VG9VVEYxNldpdGhMYXRpbjFGYWxs
YmFjayhjb25zdCBOUFVURjgqIFVURjhDaGFycywgaW50IFVURjhMZW5ndGgpCi17Ci0gICAgQVNT
RVJUKFVURjhDaGFycyB8fCBVVEY4TGVuZ3RoID09IDApOwotICAgIAotICAgIGlmIChVVEY4TGVu
Z3RoID09IC0xKQotICAgICAgICBVVEY4TGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50PihzdHJsZW4o
VVRGOENoYXJzKSk7Ci0KLSAgICBTdHJpbmcgcmVzdWx0ID0gU3RyaW5nOjpmcm9tVVRGOChVVEY4
Q2hhcnMsIFVURjhMZW5ndGgpOwotICAgIAotICAgIC8vIElmIHdlIGdvdCBiYWNrIGEgbnVsbCBz
dHJpbmcgaW5kaWNhdGluZyBhbiB1bnN1Y2Nlc3NmdWwgY29udmVyc2lvbiwgZmFsbCBiYWNrIHRv
IGxhdGluIDEuCi0gICAgLy8gU29tZSBwbHVnaW5zIHJldHVybiBpbnZhbGlkIFVURi04IGluIE5Q
VmFyaWFudFR5cGVfU3RyaW5nLCBzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUxNjM+Ci0gICAgLy8gVGhlcmUgaXMgbm8gImJhZCBkYXRhIiBmb3IgbGF0aW4xLiBJ
dCBpcyB1bmxpa2VseSB0aGF0IHRoZSBwbHVnaW4gd2FzIHJlYWxseSBzZW5kaW5nIHRleHQgaW4g
dGhpcyBlbmNvZGluZywKLSAgICAvLyBidXQgaXQgc2hvdWxkIGhhdmUgdXNlZCBVVEYtOCwgYW5k
IG5vdyB3ZSBhcmUgc2ltcGx5IGF2b2lkaW5nIGEgY3Jhc2guCi0gICAgaWYgKHJlc3VsdC5pc051
bGwoKSkKLSAgICAgICAgcmVzdWx0ID0gU3RyaW5nKFVURjhDaGFycywgVVRGOExlbmd0aCk7Ci0g
ICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gVmFyaWFudCB2YWx1ZSBtdXN0IGJlIHJl
bGVhc2VkIHdpdGggTlBSZWxlYXNlVmFyaWFudFZhbHVlKCkKLXZvaWQgY29udmVydFZhbHVlVG9O
UFZhcmlhbnQoSlNHbG9iYWxPYmplY3QqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIE5QVmFyaWFudCog
cmVzdWx0KQotewotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgCi0gICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7Ci0KLSAgICBp
ZiAodmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRv
V1RGU3RyaW5nKGV4ZWMpOwotICAgICAgICBDU3RyaW5nIGNzdHJpbmcgPSB1c3RyaW5nLnV0Zjgo
KTsKLSAgICAgICAgTlBTdHJpbmcgc3RyaW5nID0geyAoY29uc3QgTlBVVEY4Kiljc3RyaW5nLmRh
dGEoKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNzdHJpbmcubGVuZ3RoKCkpIH07Ci0gICAgICAg
IE5QTl9Jbml0aWFsaXplVmFyaWFudFdpdGhTdHJpbmdDb3B5KHJlc3VsdCwgJnN0cmluZyk7Ci0g
ICAgfSBlbHNlIGlmICh2YWx1ZS5pc051bWJlcigpKSB7Ci0gICAgICAgIERPVUJMRV9UT19OUFZB
UklBTlQodmFsdWUudG9OdW1iZXIoZXhlYyksICpyZXN1bHQpOwotICAgIH0gZWxzZSBpZiAodmFs
dWUuaXNCb29sZWFuKCkpIHsKLSAgICAgICAgQk9PTEVBTl9UT19OUFZBUklBTlQodmFsdWUudG9C
b29sZWFuKGV4ZWMpLCAqcmVzdWx0KTsKLSAgICB9IGVsc2UgaWYgKHZhbHVlLmlzTnVsbCgpKSB7
Ci0gICAgICAgIE5VTExfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOwotICAgIH0gZWxzZSBpZiAodmFs
dWUuaXNPYmplY3QoKSkgewotICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFs
dWUpOwotICAgICAgICBpZiAob2JqZWN0LT5jbGFzc0luZm8odm0pID09IENSdW50aW1lT2JqZWN0
OjppbmZvKCkpIHsKLSAgICAgICAgICAgIENSdW50aW1lT2JqZWN0KiBydW50aW1lT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8Q1J1bnRpbWVPYmplY3QqPihvYmplY3QpOwotICAgICAgICAgICAgQ0luc3Rh
bmNlKiBpbnN0YW5jZSA9IHJ1bnRpbWVPYmplY3QtPmdldEludGVybmFsQ0luc3RhbmNlKCk7Ci0g
ICAgICAgICAgICBpZiAoaW5zdGFuY2UpIHsKLSAgICAgICAgICAgICAgICBOUE9iamVjdCogb2Jq
ID0gaW5zdGFuY2UtPmdldE9iamVjdCgpOwotICAgICAgICAgICAgICAgIF9OUE5fUmV0YWluT2Jq
ZWN0KG9iaik7Ci0gICAgICAgICAgICAgICAgT0JKRUNUX1RPX05QVkFSSUFOVChvYmosICpyZXN1
bHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHZtLmRlcHJlY2F0ZWRWTUVudHJ5R2xvYmFsT2JqZWN0
KGV4ZWMpOwotCi0gICAgICAgICAgICBSb290T2JqZWN0KiByb290T2JqZWN0ID0gZmluZFJvb3RP
YmplY3QoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgICAgIGlmIChyb290T2JqZWN0KSB7Ci0gICAg
ICAgICAgICAgICAgTlBPYmplY3QqIG5wT2JqZWN0ID0gX05QTl9DcmVhdGVTY3JpcHRPYmplY3Qo
MCwgb2JqZWN0LCByb290T2JqZWN0KTsKLSAgICAgICAgICAgICAgICBPQkpFQ1RfVE9fTlBWQVJJ
QU5UKG5wT2JqZWN0LCAqcmVzdWx0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LX0KLQotSlNWYWx1ZSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShKU0dsb2JhbE9iamVjdCogZXhl
YywgY29uc3QgTlBWYXJpYW50KiB2YXJpYW50LCBSb290T2JqZWN0KiByb290T2JqZWN0KQotewot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIAotICAgIE5QVmFyaWFudFR5cGUgdHlw
ZSA9IHZhcmlhbnQtPnR5cGU7Ci0KLSAgICBpZiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX0Jvb2wp
Ci0gICAgICAgIHJldHVybiBqc0Jvb2xlYW4oTlBWQVJJQU5UX1RPX0JPT0xFQU4oKnZhcmlhbnQp
KTsKLSAgICBpZiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX051bGwpCi0gICAgICAgIHJldHVybiBq
c051bGwoKTsKLSAgICBpZiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX1ZvaWQpCi0gICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGlmICh0eXBlID09IE5QVmFyaWFudFR5cGVfSW50MzIp
Ci0gICAgICAgIHJldHVybiBqc051bWJlcihOUFZBUklBTlRfVE9fSU5UMzIoKnZhcmlhbnQpKTsK
LSAgICBpZiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX0RvdWJsZSkKLSAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKE5QVkFSSUFOVF9UT19ET1VCTEUoKnZhcmlhbnQpKTsKLSAgICBpZiAodHlwZSA9PSBO
UFZhcmlhbnRUeXBlX1N0cmluZykKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4
ZWMtPnZtKCksIGNvbnZlcnROUFN0cmluZ1RvVVRGMTYoJnZhcmlhbnQtPnZhbHVlLnN0cmluZ1Zh
bHVlKSk7Ci0gICAgaWYgKHR5cGUgPT0gTlBWYXJpYW50VHlwZV9PYmplY3QpIHsKLSAgICAgICAg
TlBPYmplY3QqIG9iaiA9IHZhcmlhbnQtPnZhbHVlLm9iamVjdFZhbHVlOwotICAgICAgICAKLSAg
ICAgICAgaWYgKG9iai0+X2NsYXNzID09IE5QU2NyaXB0T2JqZWN0Q2xhc3MpCi0gICAgICAgICAg
ICAvLyBHZXQgSlNPYmplY3QgZnJvbSBOUF9KYXZhU2NyaXB0T2JqZWN0LgotICAgICAgICAgICAg
cmV0dXJuICgoSmF2YVNjcmlwdE9iamVjdCopb2JqKS0+aW1wOwotCi0gICAgICAgIC8vIFdyYXAg
TlBPYmplY3QgaW4gYSBDSW5zdGFuY2UuCi0gICAgICAgIHJldHVybiBDSW5zdGFuY2U6OmNyZWF0
ZShvYmosIHJvb3RPYmplY3QpLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwotICAgIH0KLSAg
ICAKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotU3RyaW5nIGNvbnZlcnROUFN0cmlu
Z1RvVVRGMTYoY29uc3QgTlBTdHJpbmcqIHN0cmluZykKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhzdHJpbmctPlVURjhDaGFyYWN0ZXJzLCBzdHJpbmct
PlVURjhMZW5ndGgpOwotfQotCi1JZGVudGlmaWVyIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVy
KEpTR2xvYmFsT2JqZWN0KiBleGVjLCBjb25zdCBOUFVURjgqIG5hbWUpCi17Ci0gICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgY29u
dmVydFVURjhUb1VURjE2V2l0aExhdGluMUZhbGxiYWNrKG5hbWUsIC0xKSk7Ci19Ci0KLX0gfQot
Ci0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxpdHkuaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9j
L2NfdXRpbGl0eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjlhMzc0MTRjNmIy
YTI5NTJmYmM4OGYxMDhjYmZhMTZjYzQ2MDI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5oCisr
KyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDX1VUSUxJVFlfSF8KLSNkZWZpbmUgQ19VVElM
SVRZX0hfCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIm5w
cnVudGltZV9pbnRlcm5hbC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMu
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NKU1ZhbHVlLmg+Ci0jaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENhbGxGcmFtZTsKLWNsYXNz
IElkZW50aWZpZXI7Ci0KLW5hbWVzcGFjZSBCaW5kaW5ncyB7Ci0KLWNsYXNzIFJvb3RPYmplY3Q7
Ci0gICAgCi10eXBlZGVmIHVpbnQxNl90IE5QVVRGMTY7Ci0KLVN0cmluZyBjb252ZXJ0TlBTdHJp
bmdUb1VURjE2KGNvbnN0IE5QU3RyaW5nICopOwotdm9pZCBjb252ZXJ0VmFsdWVUb05QVmFyaWFu
dChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUsIE5QVmFyaWFudCogcmVzdWx0KTsKLUpTVmFsdWUg
Y29udmVydE5QVmFyaWFudFRvVmFsdWUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBOUFZhcmlhbnQq
LCBSb290T2JqZWN0Kik7Ci1JZGVudGlmaWVyIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKEpT
R2xvYmFsT2JqZWN0KiwgY29uc3QgTlBVVEY4KiBuYW1lKTsKLQotfSB9Ci0KLSNlbmRpZiAvLyBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvbnBydW50aW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ucHJ1
bnRpbWUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGIwMjlmYjNlMzAwMmE5
OThiZGRlMzg4MTYzNTI4YmIxYjYwYjc0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWUuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiSWRlbnRpZmllclJlcC5oIgotI2lu
Y2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgotI2luY2x1ZGUgIm5wcnVudGltZV9wcml2Lmgi
Ci0KLSNpbmNsdWRlICJjX3V0aWxpdHkuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JZGVu
dGlmaWVyLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotI3ByYWdtYSBHQ0Mgdmlz
aWJpbGl0eSBwdXNoKGRlZmF1bHQpCi0jaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKLSNwcmFn
bWEgR0NDIHZpc2liaWxpdHkgcG9wCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1OUElk
ZW50aWZpZXIgX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyKGNvbnN0IE5QVVRGOCogbmFtZSkKLXsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyPihJZGVudGlmaWVyUmVwOjpnZXQo
bmFtZSkpOwotfQotCi12b2lkIF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcnMoY29uc3QgTlBVVEY4
KiogbmFtZXMsIGludDMyX3QgbmFtZUNvdW50LCBOUElkZW50aWZpZXIqIGlkZW50aWZpZXJzKQot
ewotICAgIEFTU0VSVChuYW1lcyk7Ci0gICAgQVNTRVJUKGlkZW50aWZpZXJzKTsKLSAgICAKLSAg
ICBpZiAobmFtZXMgJiYgaWRlbnRpZmllcnMpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBuYW1lQ291bnQ7IGkrKykKLSAgICAgICAgICAgIGlkZW50aWZpZXJzW2ldID0gX05QTl9HZXRT
dHJpbmdJZGVudGlmaWVyKG5hbWVzW2ldKTsKLSAgICB9Ci19Ci0KLU5QSWRlbnRpZmllciBfTlBO
X0dldEludElkZW50aWZpZXIoaW50MzJfdCBpbnRpZCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8TlBJZGVudGlmaWVyPihJZGVudGlmaWVyUmVwOjpnZXQoaW50aWQpKTsKLX0KLQotYm9vbCBf
TlBOX0lkZW50aWZpZXJJc1N0cmluZyhOUElkZW50aWZpZXIgaWRlbnRpZmllcikKLXsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KGlkZW50aWZpZXIpLT5pc1N0cmluZygp
OwotfQotCi1OUFVURjggKl9OUE5fVVRGOEZyb21JZGVudGlmaWVyKE5QSWRlbnRpZmllciBpZGVu
dGlmaWVyKQotewotICAgIGNvbnN0IGNoYXIqIHN0cmluZyA9IHN0YXRpY19jYXN0PElkZW50aWZp
ZXJSZXAqPihpZGVudGlmaWVyKS0+c3RyaW5nKCk7Ci0gICAgaWYgKCFzdHJpbmcpCi0gICAgICAg
IHJldHVybiAwOwotICAgIAotICAgIHJldHVybiBzdHJkdXAoc3RyaW5nKTsKLX0KLQotaW50MzJf
dCBfTlBOX0ludEZyb21JZGVudGlmaWVyKE5QSWRlbnRpZmllciBpZGVudGlmaWVyKQotewotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4oaWRlbnRpZmllciktPm51bWJlcigp
OwotfQotCi12b2lkIE5QTl9Jbml0aWFsaXplVmFyaWFudFdpdGhTdHJpbmdDb3B5KE5QVmFyaWFu
dCogdmFyaWFudCwgY29uc3QgTlBTdHJpbmcqIHZhbHVlKQotewotICAgIHZhcmlhbnQtPnR5cGUg
PSBOUFZhcmlhbnRUeXBlX1N0cmluZzsKLSAgICB2YXJpYW50LT52YWx1ZS5zdHJpbmdWYWx1ZS5V
VEY4TGVuZ3RoID0gdmFsdWUtPlVURjhMZW5ndGg7Ci0gICAgLy8gU3dpdGNoaW5nIHRvIGZhc3RN
YWxsb2Mgd291bGQgYmUgYmV0dGVyIHRvIGF2b2lkIGxlbmd0aCBjaGVjayBidXQgdGhpcyBpcyBu
b3QgZGVzaXJhYmxlCi0gICAgLy8gYXMgTlBOX01lbUFsbG9jIGlzIHVzaW5nIG1hbGxvYyBhbmQg
dGhlcmUgbWlnaHQgYmUgcGx1Z2lucyB0aGF0IG1peCBOUE5fTWVtQWxsb2MgYW5kIG1hbGxvYyB0
b28uCi0gICAgdmFyaWFudC0+dmFsdWUuc3RyaW5nVmFsdWUuVVRGOENoYXJhY3RlcnMgPSAoTlBV
VEY4KiltYWxsb2Moc2l6ZW9mKE5QVVRGOCkgKiB2YWx1ZS0+VVRGOExlbmd0aCk7Ci0gICAgaWYg
KHZhbHVlLT5VVEY4TGVuZ3RoICYmICF2YXJpYW50LT52YWx1ZS5zdHJpbmdWYWx1ZS5VVEY4Q2hh
cmFjdGVycykKLSAgICAgICAgQ1JBU0goKTsKLSAgICBtZW1jcHkoKHZvaWQqKXZhcmlhbnQtPnZh
bHVlLnN0cmluZ1ZhbHVlLlVURjhDaGFyYWN0ZXJzLCB2YWx1ZS0+VVRGOENoYXJhY3RlcnMsIHNp
emVvZihOUFVURjgpICogdmFsdWUtPlVURjhMZW5ndGgpOwotfQotCi12b2lkIF9OUE5fUmVsZWFz
ZVZhcmlhbnRWYWx1ZShOUFZhcmlhbnQqIHZhcmlhbnQpCi17Ci0gICAgQVNTRVJUKHZhcmlhbnQp
OwotCi0gICAgaWYgKHZhcmlhbnQtPnR5cGUgPT0gTlBWYXJpYW50VHlwZV9PYmplY3QpIHsKLSAg
ICAgICAgX05QTl9SZWxlYXNlT2JqZWN0KHZhcmlhbnQtPnZhbHVlLm9iamVjdFZhbHVlKTsKLSAg
ICAgICAgdmFyaWFudC0+dmFsdWUub2JqZWN0VmFsdWUgPSAwOwotICAgIH0gZWxzZSBpZiAodmFy
aWFudC0+dHlwZSA9PSBOUFZhcmlhbnRUeXBlX1N0cmluZykgewotICAgICAgICBmcmVlKCh2b2lk
Kil2YXJpYW50LT52YWx1ZS5zdHJpbmdWYWx1ZS5VVEY4Q2hhcmFjdGVycyk7Ci0gICAgICAgIHZh
cmlhbnQtPnZhbHVlLnN0cmluZ1ZhbHVlLlVURjhDaGFyYWN0ZXJzID0gMDsKLSAgICAgICAgdmFy
aWFudC0+dmFsdWUuc3RyaW5nVmFsdWUuVVRGOExlbmd0aCA9IDA7Ci0gICAgfQotCi0gICAgdmFy
aWFudC0+dHlwZSA9IE5QVmFyaWFudFR5cGVfVm9pZDsKLX0KLQotTlBPYmplY3QgKl9OUE5fQ3Jl
YXRlT2JqZWN0KE5QUCBucHAsIE5QQ2xhc3MqIGFDbGFzcykKLXsKLSAgICBBU1NFUlQoYUNsYXNz
KTsKLQotICAgIGlmIChhQ2xhc3MpIHsKLSAgICAgICAgTlBPYmplY3QqIG9iajsKLSAgICAgICAg
aWYgKGFDbGFzcy0+YWxsb2NhdGUgIT0gTlVMTCkKLSAgICAgICAgICAgIG9iaiA9IGFDbGFzcy0+
YWxsb2NhdGUobnBwLCBhQ2xhc3MpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvYmogPSAo
TlBPYmplY3QqKW1hbGxvYyhzaXplb2YoTlBPYmplY3QpKTsKLSAgICAgICAgaWYgKCFvYmopCi0g
ICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICBvYmotPl9jbGFzcyA9IGFDbGFzczsKLSAgICAg
ICAgb2JqLT5yZWZlcmVuY2VDb3VudCA9IDE7Ci0KLSAgICAgICAgcmV0dXJuIG9iajsKLSAgICB9
Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotTlBPYmplY3QqIF9OUE5fUmV0YWluT2JqZWN0KE5QT2Jq
ZWN0KiBvYmopCi17Ci0gICAgQVNTRVJUKG9iaik7Ci0KLSAgICBpZiAob2JqKQotICAgICAgICBv
YmotPnJlZmVyZW5jZUNvdW50Kys7Ci0KLSAgICByZXR1cm4gb2JqOwotfQotCi12b2lkIF9OUE5f
UmVsZWFzZU9iamVjdChOUE9iamVjdCogb2JqKQotewotICAgIEFTU0VSVChvYmopOwotICAgIEFT
U0VSVChvYmotPnJlZmVyZW5jZUNvdW50ID49IDEpOwotCi0gICAgaWYgKG9iaiAmJiBvYmotPnJl
ZmVyZW5jZUNvdW50ID49IDEpIHsKLSAgICAgICAgaWYgKC0tb2JqLT5yZWZlcmVuY2VDb3VudCA9
PSAwKQotICAgICAgICAgICAgX05QTl9EZWFsbG9jYXRlT2JqZWN0KG9iaik7Ci0gICAgfQotfQot
Ci12b2lkIF9OUE5fRGVhbGxvY2F0ZU9iamVjdChOUE9iamVjdCAqb2JqKQotewotICAgIEFTU0VS
VChvYmopOwotCi0gICAgaWYgKG9iaikgewotICAgICAgICBpZiAob2JqLT5fY2xhc3MtPmRlYWxs
b2NhdGUpCi0gICAgICAgICAgICBvYmotPl9jbGFzcy0+ZGVhbGxvY2F0ZShvYmopOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBmcmVlKG9iaik7Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlk
Z2UvbnBydW50aW1lX2ltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWVfaW1w
bC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjE4MDQyY2NjMmZhNTkyY2JmZTIy
NDBmMTg3OTJmODViMmYzMWE3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWVfaW1wbC5oCisrKyAvZGV2
L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2lmbmRlZiBfTlBfUlVOVElNRV9JTVBMX0hfCi0jZGVmaW5lIF9OUF9S
VU5USU1FX0lNUExfSF8KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5j
bHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJu
ICJDIiB7Ci0jZW5kaWYKLQotZXh0ZXJuIHZvaWQgX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlKE5Q
VmFyaWFudCopOwotZXh0ZXJuIE5QSWRlbnRpZmllciBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIo
Y29uc3QgTlBVVEY4Kik7Ci1leHRlcm4gdm9pZCBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzKGNv
bnN0IE5QVVRGOCoqIG5hbWVzLCBpbnQzMl90IG5hbWVDb3VudCwgTlBJZGVudGlmaWVyKiBpZGVu
dGlmaWVycyk7Ci1leHRlcm4gTlBJZGVudGlmaWVyIF9OUE5fR2V0SW50SWRlbnRpZmllcihpbnQz
Ml90KTsKLWV4dGVybiBib29sIF9OUE5fSWRlbnRpZmllcklzU3RyaW5nKE5QSWRlbnRpZmllcik7
Ci1leHRlcm4gTlBVVEY4KiBfTlBOX1VURjhGcm9tSWRlbnRpZmllcihOUElkZW50aWZpZXIpOwot
ZXh0ZXJuIGludDMyX3QgX05QTl9JbnRGcm9tSWRlbnRpZmllcihOUElkZW50aWZpZXIpOyAgICAK
LWV4dGVybiBOUE9iamVjdCogX05QTl9DcmVhdGVPYmplY3QoTlBQLCBOUENsYXNzKik7Ci1leHRl
cm4gTlBPYmplY3QqIF9OUE5fUmV0YWluT2JqZWN0KE5QT2JqZWN0Kik7Ci1leHRlcm4gdm9pZCBf
TlBOX1JlbGVhc2VPYmplY3QoTlBPYmplY3QqKTsKLWV4dGVybiB2b2lkIF9OUE5fRGVhbGxvY2F0
ZU9iamVjdChOUE9iamVjdCopOwotZXh0ZXJuIGJvb2wgX05QTl9JbnZva2UoTlBQLCBOUE9iamVj
dCosIE5QSWRlbnRpZmllciBtZXRob2ROYW1lLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVpbnQz
Ml90IGFyZ0NvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCk7Ci1leHRlcm4gYm9vbCBfTlBOX0ludm9r
ZURlZmF1bHQoTlBQLCBOUE9iamVjdCosIGNvbnN0IE5QVmFyaWFudCogYXJncywgdWludDMyX3Qg
YXJnQ291bnQsIE5QVmFyaWFudCogcmVzdWx0KTsKLWV4dGVybiBib29sIF9OUE5fRXZhbHVhdGUo
TlBQLCBOUE9iamVjdCosIE5QU3RyaW5nKiwgTlBWYXJpYW50KiByZXN1bHQpOwotZXh0ZXJuIGJv
b2wgX05QTl9HZXRQcm9wZXJ0eShOUFAsIE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyLCBOUFZhcmlh
bnQqIHJlc3VsdCk7Ci1leHRlcm4gYm9vbCBfTlBOX1NldFByb3BlcnR5KE5QUCwgTlBPYmplY3Qq
LCBOUElkZW50aWZpZXIsIGNvbnN0IE5QVmFyaWFudCopOwotZXh0ZXJuIGJvb2wgX05QTl9SZW1v
dmVQcm9wZXJ0eShOUFAsIE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyKTsKLWV4dGVybiBib29sIF9O
UE5fSGFzUHJvcGVydHkoTlBQLCBOUE9iamVjdCosIE5QSWRlbnRpZmllcik7Ci1leHRlcm4gYm9v
bCBfTlBOX0hhc01ldGhvZChOUFAsIE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyKTsKLWV4dGVybiB2
b2lkIF9OUE5fU2V0RXhjZXB0aW9uKE5QT2JqZWN0KiwgY29uc3QgTlBVVEY4Kik7Ci1leHRlcm4g
Ym9vbCBfTlBOX0VudW1lcmF0ZShOUFAsIE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyKiosIHVpbnQz
Ml90KiBjb3VudCk7Ci1leHRlcm4gYm9vbCBfTlBOX0NvbnN0cnVjdChOUFAsIE5QT2JqZWN0Kiwg
Y29uc3QgTlBWYXJpYW50KiBhcmdzLCB1aW50MzJfdCBhcmdDb3VudCwgTlBWYXJpYW50ICpyZXN1
bHQpOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0gIC8qIGVuZCBleHRlcm4gIkMiICovCi0jZW5k
aWYKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWVfaW50ZXJuYWwuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWVfaW50ZXJuYWwuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNTk4ZjlkZGYxMDgwMmNjMjBmODRiNDljMmFhOTM0MGJhODY1YjlhMS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvbnBydW50aW1lX2ludGVybmFsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggQ29sbGFib3JhIEx0ZC4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
LjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQot
ICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1B
IDAyMTM5LCBVU0EuCi0gKgotICoKLSAqIFRoaXMgaXMgYSBpbnRlcm5hbCBpbmNsdWRlIGhlYWRl
ciBmb3IgbnBhcGkuaAotICoKLSAqIFNvbWUgb2YgdGhlICNkZWZpbmVzIHdoaWNoIGFyZSBpbiBY
MTEgaGVhZGVycyBjb25mbGljdCB3aXRoIHR5cGUgYW5kIGVudW0KLSAqIG5hbWVzIGluIEphdmFT
Y3JpcHRDb3JlIGFuZCBXZWJDb3JlCi0gKiBUaGlzIGhlYWRlciAjdW5kZWZzIHRob3NlIGRlZmlu
ZXMgdG8gZml4IHRoZSBjb25mbGljdHMKLSAqIElmIHlvdSBuZWVkIHRvIGluY2x1ZGUgbnBhcGku
aCBvciBucHJ1bnRpbWUuaCB3aGVuIGJ1aWxkaW5nIG9uIFgxMSwKLSAqIGluY2x1ZGUgdGhpcyBm
aWxlIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBucGFwaS5oIG9yIG5wcnVudGltZS5oCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJucGFwaS5oIgotI2luY2x1ZGUgIm5wZnVuY3Rpb25z
LmgiCi0jaW5jbHVkZSAibnBydW50aW1lLmgiCi0KLSNpZiBkZWZpbmVkKE1PWl9YMTEpCi0gICAg
I2luY2x1ZGUgPFgxMS9YcmVzb3VyY2UuaD4KLQotICAgICN1bmRlZiBBbHdheXMKLSAgICAjdW5k
ZWYgTm9uZQotICAgICN1bmRlZiBBYm92ZQotICAgICN1bmRlZiBCZWxvdwotICAgICN1bmRlZiBB
dXRvCi0gICAgI3VuZGVmIENvbXBsZXgKLSAgICAjdW5kZWYgU3RhdHVzCi0gICAgI3VuZGVmIEN1
cnNvclNoYXBlCi0gICAgI3VuZGVmIEZvY3VzSW4KLSAgICAjdW5kZWYgRm9jdXNPdXQKLSAgICAj
dW5kZWYgS2V5UHJlc3MKLSAgICAjdW5kZWYgS2V5UmVsZWFzZQotICAgICN1bmRlZiBVbnNvcnRl
ZAotICAgICN1bmRlZiBCb29sCi0gICAgI3VuZGVmIEZvbnRDaGFuZ2UKLSAgICAjdW5kZWYgR3Jh
eVNjYWxlCi0gICAgI3VuZGVmIE5vcm1hbFN0YXRlCi0gICAgI3VuZGVmIFRydWUKLSAgICAjdW5k
ZWYgRmFsc2UKLSAgICAjdW5kZWYgU3VjY2VzcwotICAgICN1bmRlZiBFeHBvc2UKLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL25wcnVudGltZV9wcml2LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvbnBydW50aW1lX3ByaXYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTlkYzBhMTdkYzRkNTllMDQ5Y2I5ZTBkYzViMTYwZTE0NGM2ZDI1NS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvbnBydW50aW1lX3ByaXYuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5k
ZWYgTlBfUlVOVElNRV9QUklWX0hfCi0jZGVmaW5lIE5QX1JVTlRJTUVfUFJJVl9IXwotCi0jaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJucHJ1bnRpbWVfaW50ZXJu
YWwuaCIKLQotLyoKLSAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRoU3RyaW5nQ29weSgpIHdp
bGwgY29weSBzdHJpbmcgZGF0YS4gIFRoZSBzdHJpbmcgZGF0YQotICAgIHdpbGwgYmUgZGVhbGxv
Y2F0ZWQgYnkgY2FsbHMgdG8gTlBSZWxlYXNlVmFyaWFudFZhbHVlKCkuCi0qLwotdm9pZCBOUE5f
SW5pdGlhbGl6ZVZhcmlhbnRXaXRoU3RyaW5nQ29weShOUFZhcmlhbnQqLCBjb25zdCBOUFN0cmlu
ZyopOwotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0jZW5kaWYKLQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAppbmRleCA5NjUxZDg0ZWEw
MmI1Zjk3ZjI2Yjc3NGUwZjM2ODVkZTI5ODc0NzlhLi5kNTc5MDZmMWU3YmUxYWYzOTU4YjNjZjE0
ZmU2YjhhNGVhZDlmYTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVn
SW5FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50
LmNwcApAQCAtNTAsMTAgKzUwLDYgQEAKICNpbmNsdWRlICJXaWRnZXQuaCIKICNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0jaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oQ09D
T0EpCiAjaW5jbHVkZSAiUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaCIKICNpbmNsdWRlICJZ
b3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggN2U4YWMw
NTI0MGE1ZTEwM2M4NTRjMGM0NTczZGRiMmM1YjdkN2EyYS4uODJhNzYzZjgyNzYwMTgxZjQ2YmI4
ZjM0MWZlNzgxOGUzNmMxNjVkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTEwMiw3ICsxMDIs
NiBAQAogI2luY2x1ZGUgIlVzZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAi
VmlzaWJsZVVuaXRzLmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCi0jaW5jbHVkZSAibnBydW50aW1l
X2ltcGwuaCIKICNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9BUElDYXN0Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVndWxhckV4cHJlc3Np
b24uaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbnBhcGkuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvbnBhcGkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YjMzYjRlOTQ2NWY5NmU5NDFhMjY3YzM4Yjc1ODBjZDUyYzYxNmJiNC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL25w
YXBpLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NjkgKzAsMCBAQAotLyogLSotIE1vZGU6IEM7IHRh
Yi13aWR0aDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0g
Ki8KLS8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKLSAqIFZlcnNpb246IE1QTCAx
LjEvR1BMIDIuMC9MR1BMIDIuMQotICoKLSAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJl
IHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgotICogMS4xICh0
aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoCi0gKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0Ci0gKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KLSAqCi0gKiBTb2Z0d2Fy
ZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIGJhc2lzLAotICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl
c3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCi0gKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1
YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQotICogTGljZW5z
ZS4KLSAqCi0gKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBtb3ppbGxhLm9yZyBjb2RlLgotICoKLSAq
IFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcwotICogTmV0c2Nh
cGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCi0gKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRo
ZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAxOTk4Ci0gKiB0aGUgSW5pdGlh
bCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogQ29udHJpYnV0b3Iocyk6
Ci0gKgotICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUg
dXNlZCB1bmRlciB0aGUgdGVybXMgb2YKLSAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgotICogdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJM
R1BMIiksCi0gKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhl
IExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAotICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3
aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKLSAqIHVu
ZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBh
bGxvdyBvdGhlcnMgdG8KLSAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCi0gKiBkZWNpc2lvbiBieSBkZWxldGlu
ZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQot
ICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4g
SWYgeW91IGRvIG5vdCBkZWxldGUKLSAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVu
dCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKLSAqIHRoZSB0ZXJtcyBv
ZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCi0gKgotICogKioqKiog
RU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KLQotI2lmbmRlZiBucGFwaV9oXwotI2RlZmluZSBu
cGFwaV9oXwotCi0jaWYgZGVmaW5lZChfX09TMl9fKQotI3ByYWdtYSBwYWNrKDEpCi0jZW5kaWYK
LQotI2luY2x1ZGUgIm5wdHlwZXMuaCIKLQotI2lmIGRlZmluZWQoX19PUzJfXykgfHwgZGVmaW5l
ZChPUzIpCi0jaWZuZGVmIFhQX09TMgotI2RlZmluZSBYUF9PUzIgMQotI2VuZGlmCi0jZW5kaWYK
LQotI2lmZGVmIElOQ0xVREVfSkFWQQotI2luY2x1ZGUgImpyaS5oIiAgICAgICAgICAgICAgICAv
KiBKYXZhIFJ1bnRpbWUgSW50ZXJmYWNlICovCi0jZWxzZQotI2RlZmluZSBqcmVmICAgIHZvaWQg
KgotI2RlZmluZSBKUklFbnYgIHZvaWQKLSNlbmRpZgotCi0jaWZkZWYgX1dJTjMyCi0jaW5jbHVk
ZSA8d2luZG93cy5oPgotI2lmbmRlZiBYUF9XSU4KLSNkZWZpbmUgWFBfV0lOIDEKLSNlbmRpZgot
I2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfQ0NfXykgJiYgIWRlZmluZWQoWFBfVU5JWCkK
LSNpZm5kZWYgWFBfTUFDT1NYCi0jZGVmaW5lIFhQX01BQ09TWCAxCi0jZW5kaWYKLSNlbmRpZgot
Ci0jaWYgZGVmaW5lZChYUF9NQUNPU1gpICYmIGRlZmluZWQoX19MUDY0X18pCi0jZGVmaW5lIE5Q
X05PX1FVSUNLRFJBVwotI2RlZmluZSBOUF9OT19DQVJCT04KLSNlbmRpZgotCi0jaWYgZGVmaW5l
ZChYUF9NQUNPU1gpCi0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgotI2lu
Y2x1ZGUgPE9wZW5HTC9PcGVuR0wuaD4KLSNpZm5kZWYgTlBfTk9fQ0FSQk9OCi0jaW5jbHVkZSA8
Q2FyYm9uL0NhcmJvbi5oPgotI2VuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoWFBfVU5JWCkK
LSNpbmNsdWRlIDxzdGRpby5oPgotI2lmIGRlZmluZWQoTU9aX1gxMSkKLSNpbmNsdWRlIDxYMTEv
WGxpYi5oPgotI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgotI2VuZGlmCi0jZW5kaWYKLQotLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgUGx1Z2luIFZlcnNpb24gQ29u
c3RhbnRzICAgICAgICAgICAgICAgICAgICAgICovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jZGVm
aW5lIE5QX1ZFUlNJT05fTUFKT1IgMAotI2RlZmluZSBOUF9WRVJTSU9OX01JTk9SIDI2Ci0KLQot
LyogVGhlIE9TLzIgdmVyc2lvbiBvZiBOZXRzY2FwZSB1c2VzIFJDX0RBVEEgdG8gZGVmaW5lIHRo
ZQotICAgbWltZSB0eXBlcywgZmlsZSBleHRlbnNpb25zLCBldGMgdGhhdCBhcmUgcmVxdWlyZWQu
Ci0gICBVc2UgYSB2ZXJ0aWNhbCBiYXIgdG8gc2VwYXJhdGUgdHlwZXMsIGVuZCB0eXBlcyB3aXRo
IFwwLgotICAgRmlsZVZlcnNpb24gYW5kIFByb2R1Y3RWZXJzaW9uIGFyZSAzMmJpdCBpbnRzLCBh
bGwgb3RoZXIKLSAgIGVudHJpZXMgYXJlIHN0cmluZ3MgdGhhdCBNVVNUIGJlIHRlcm1pbmF0ZWQg
d2l0aCBhIFwwLgotCi1BTiBFWEFNUExFOgotCi1SQ0RBVEEgTlBfSU5GT19Qcm9kdWN0VmVyc2lv
biB7IDEsMCwwLDEsfQotCi1SQ0RBVEEgTlBfSU5GT19NSU1FVHlwZSAgICB7ICJ2aWRlby94LXZp
ZGVvfCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2aWRlby94LWZsaWNrXDAiIH0K
LVJDREFUQSBOUF9JTkZPX0ZpbGVFeHRlbnRzIHsgImF2aXwiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZmxjXDAiIH0KLVJDREFUQSBOUF9JTkZPX0ZpbGVPcGVuTmFtZXsgIk1NT1My
IHZpZGVvIHBsYXllcigqLmF2aSl8IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1N
T1MyIEZsYy9GbGkgcGxheWVyKCouZmxjKVwwIiB9Ci0KLVJDREFUQSBOUF9JTkZPX0ZpbGVWZXJz
aW9uICAgICAgIHsgMSwwLDAsMSB9Ci1SQ0RBVEEgTlBfSU5GT19Db21wYW55TmFtZSAgICAgICB7
ICJOZXRzY2FwZSBDb21tdW5pY2F0aW9uc1wwIiB9Ci1SQ0RBVEEgTlBfSU5GT19GaWxlRGVzY3Jp
cHRpb24gICB7ICJOUEFWSTMyIEV4dGVuc2lvbiBETExcMCIKLVJDREFUQSBOUF9JTkZPX0ludGVy
bmFsTmFtZSAgICAgIHsgIk5QQVZJMzJcMCIgKQotUkNEQVRBIE5QX0lORk9fTGVnYWxDb3B5cmln
aHQgICAgeyAiQ29weXJpZ2h0IE5ldHNjYXBlIENvbW11bmljYXRpb25zIFwyNTEgMTk5NlwwIgot
UkNEQVRBIE5QX0lORk9fT3JpZ2luYWxGaWxlbmFtZSAgeyAiTlZBUEkzMi5ETEwiIH0KLVJDREFU
QSBOUF9JTkZPX1Byb2R1Y3ROYW1lICAgICAgIHsgIk5QQVZJMzIgRHluYW1pYyBMaW5rIExpYnJh
cnlcMCIgfQotKi8KLS8qIFJDX0RBVEEgdHlwZXMgZm9yIHZlcnNpb24gaW5mbyAtIHJlcXVpcmVk
ICovCi0jZGVmaW5lIE5QX0lORk9fUHJvZHVjdFZlcnNpb24gICAgICAxCi0jZGVmaW5lIE5QX0lO
Rk9fTUlNRVR5cGUgICAgICAgICAgICAyCi0jZGVmaW5lIE5QX0lORk9fRmlsZU9wZW5OYW1lICAg
ICAgICAzCi0jZGVmaW5lIE5QX0lORk9fRmlsZUV4dGVudHMgICAgICAgICA0Ci0vKiBSQ19EQVRB
IHR5cGVzIGZvciB2ZXJzaW9uIGluZm8gLSB1c2VkIGlmIGZvdW5kICovCi0jZGVmaW5lIE5QX0lO
Rk9fRmlsZURlc2NyaXB0aW9uICAgICA1Ci0jZGVmaW5lIE5QX0lORk9fUHJvZHVjdE5hbWUgICAg
ICAgICA2Ci0vKiBSQ19EQVRBIHR5cGVzIGZvciB2ZXJzaW9uIGluZm8gLSBvcHRpb25hbCAqLwot
I2RlZmluZSBOUF9JTkZPX0NvbXBhbnlOYW1lICAgICAgICAgNwotI2RlZmluZSBOUF9JTkZPX0Zp
bGVWZXJzaW9uICAgICAgICAgOAotI2RlZmluZSBOUF9JTkZPX0ludGVybmFsTmFtZSAgICAgICAg
OQotI2RlZmluZSBOUF9JTkZPX0xlZ2FsQ29weXJpZ2h0ICAgICAgMTAKLSNkZWZpbmUgTlBfSU5G
T19PcmlnaW5hbEZpbGVuYW1lICAgIDExCi0KLSNpZm5kZWYgUkNfSU5WT0tFRAotCi0vKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLwotLyogICAgICAgICAgICAgICAgICAgICAgIERlZmluaXRpb24gb2YgQmFzaWMg
VHlwZXMgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZm5k
ZWYgRkFMU0UKLSNkZWZpbmUgRkFMU0UgKDApCi0jZW5kaWYKLSNpZm5kZWYgVFJVRQotI2RlZmlu
ZSBUUlVFICgxKQotI2VuZGlmCi0jaWZuZGVmIE5VTEwKLSNkZWZpbmUgTlVMTCAoMEwpCi0jZW5k
aWYKLQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIE5QQm9vbDsKLXR5cGVkZWYgaW50MTZfdCAgICAg
ICBOUEVycm9yOwotdHlwZWRlZiBpbnQxNl90ICAgICAgIE5QUmVhc29uOwotdHlwZWRlZiBjaGFy
KiAgICAgICAgIE5QTUlNRVR5cGU7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiAgICAgICAgICAg
ICAgICAgICAgICAgU3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAg
ICAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmICFkZWZpbmVkKF9fTFA2NF9fKQotI2lmIGRl
ZmluZWQoWFBfTUFDT1NYKQotI3ByYWdtYSBvcHRpb25zIGFsaWduPW1hYzY4awotI2VuZGlmCi0j
ZW5kaWYgLyogX19MUDY0X18gKi8KLQotLyoKLSAqICBOUFAgaXMgYSBwbHVnLWluJ3Mgb3BhcXVl
IGluc3RhbmNlIGhhbmRsZQotICovCi10eXBlZGVmIHN0cnVjdCBfTlBQCi17Ci0gIHZvaWQqIHBk
YXRhOyAgICAgIC8qIHBsdWctaW4gcHJpdmF0ZSBkYXRhICovCi0gIHZvaWQqIG5kYXRhOyAgICAg
IC8qIG5ldHNjYXBlIHByaXZhdGUgZGF0YSAqLwotfSBOUFBfdDsKLQotdHlwZWRlZiBOUFBfdCog
IE5QUDsKLQotdHlwZWRlZiBzdHJ1Y3QgX05QU3RyZWFtCi17Ci0gIHZvaWQqICAgIHBkYXRhOyAv
KiBwbHVnLWluIHByaXZhdGUgZGF0YSAqLwotICB2b2lkKiAgICBuZGF0YTsgLyogbmV0c2NhcGUg
cHJpdmF0ZSBkYXRhICovCi0gIGNvbnN0ICAgIGNoYXIqIHVybDsKLSAgdWludDMyX3QgZW5kOwot
ICB1aW50MzJfdCBsYXN0bW9kaWZpZWQ7Ci0gIHZvaWQqICAgIG5vdGlmeURhdGE7Ci0gIGNvbnN0
ICAgIGNoYXIqIGhlYWRlcnM7IC8qIFJlc3BvbnNlIGhlYWRlcnMgZnJvbSBob3N0LgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKiBFeGlzdHMgb25seSBmb3IgPj0gTlBWRVJTX0hBU19SRVNQ
T05TRV9IRUFERVJTLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBVc2VkIGZvciBIVFRQ
IG9ubHk7IE5VTEwgZm9yIG5vbi1IVFRQLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBB
dmFpbGFibGUgZnJvbSBOUFBfTmV3U3RyZWFtIG9ud2FyZHMuCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAqIFBsdWdpbiBzaG91bGQgY29weSB0aGlzIGRhdGEgYmVmb3JlIHN0b3JpbmcgaXQu
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluY2x1ZGVzIEhUVFAgc3RhdHVzIGxpbmUg
YW5kIGFsbCBoZWFkZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBwcmVmZXJhYmx5
IHZlcmJhdGltIGFzIHJlY2VpdmVkIGZyb20gc2VydmVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKiBoZWFkZXJzIGZvcm1hdHRlZCBhcyBpbiBIVFRQICgiSGVhZGVyOiBWYWx1ZSIpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhbmQgbmV3bGluZXMgKFxuLCBOT1QgXHJcbikg
c2VwYXJhdGluZyBsaW5lcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICogVGVybWluYXRl
ZCBieSBcblwwIChOT1QgXG5cblwwKS4gKi8KLX0gTlBTdHJlYW07Ci0KLXR5cGVkZWYgc3RydWN0
IF9OUEJ5dGVSYW5nZQotewotICBpbnQzMl90ICBvZmZzZXQ7IC8qIG5lZ2F0aXZlIG9mZnNldCBt
ZWFucyBmcm9tIHRoZSBlbmQgKi8KLSAgdWludDMyX3QgbGVuZ3RoOwotICBzdHJ1Y3QgX05QQnl0
ZVJhbmdlKiBuZXh0OwotfSBOUEJ5dGVSYW5nZTsKLQotdHlwZWRlZiBzdHJ1Y3QgX05QU2F2ZWRE
YXRhCi17Ci0gIGludDMyX3QgbGVuOwotICB2b2lkKiAgIGJ1ZjsKLX0gTlBTYXZlZERhdGE7Ci0K
LXR5cGVkZWYgc3RydWN0IF9OUFJlY3QKLXsKLSAgdWludDE2X3QgdG9wOwotICB1aW50MTZfdCBs
ZWZ0OwotICB1aW50MTZfdCBib3R0b207Ci0gIHVpbnQxNl90IHJpZ2h0OwotfSBOUFJlY3Q7Ci0K
LXR5cGVkZWYgc3RydWN0IF9OUFNpemUKLXsKLSAgaW50MzJfdCB3aWR0aDsKLSAgaW50MzJfdCBo
ZWlnaHQ7Ci19IE5QU2l6ZTsKLQotdHlwZWRlZiBlbnVtIHsKLSAgTlBGb2N1c05leHQgPSAwLAot
ICBOUEZvY3VzUHJldmlvdXMgPSAxCi19IE5QRm9jdXNEaXJlY3Rpb247Ci0KLS8qIFJldHVybiB2
YWx1ZXMgZm9yIE5QUF9IYW5kbGVFdmVudCAqLwotI2RlZmluZSBrTlBFdmVudE5vdEhhbmRsZWQg
MAotI2RlZmluZSBrTlBFdmVudEhhbmRsZWQgMQotLyogRXhhY3QgbWVhbmluZyBtdXN0IGJlIHNw
ZWMnZCBpbiBldmVudCBtb2RlbC4gKi8KLSNkZWZpbmUga05QRXZlbnRTdGFydElNRSAyCi0KLSNp
ZiBkZWZpbmVkKFhQX1VOSVgpCi0vKgotICogVW5peCBzcGVjaWZpYyBzdHJ1Y3R1cmVzIGFuZCBk
ZWZpbml0aW9ucwotICovCi0KLS8qCi0gKiBDYWxsYmFjayBTdHJ1Y3R1cmVzLgotICoKLSAqIFRo
ZXNlIGFyZSB1c2VkIHRvIHBhc3MgYWRkaXRpb25hbCBwbGF0Zm9ybSBzcGVjaWZpYyBpbmZvcm1h
dGlvbi4KLSAqLwotZW51bSB7Ci0gIE5QX1NFVFdJTkRPVyA9IDEsCi0gIE5QX1BSSU5UCi19Owot
Ci10eXBlZGVmIHN0cnVjdAotewotICBpbnQzMl90IHR5cGU7Ci19IE5QQW55Q2FsbGJhY2tTdHJ1
Y3Q7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGludDMyX3QgICAgICB0eXBlOwotI2lmIGRlZmlu
ZWQoTU9aX1gxMSkKLSAgRGlzcGxheSogICAgIGRpc3BsYXk7Ci0gIFZpc3VhbCogICAgICB2aXN1
YWw7Ci0gIENvbG9ybWFwICAgICBjb2xvcm1hcDsKLSAgdW5zaWduZWQgaW50IGRlcHRoOwotI2Vu
ZGlmCi19IE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3Q7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0g
IGludDMyX3QgdHlwZTsKLSAgRklMRSogZnA7Ci19IE5QUHJpbnRDYWxsYmFja1N0cnVjdDsKLQot
I2VuZGlmIC8qIFhQX1VOSVggKi8KLQotI2lmIGRlZmluZWQoWFBfTUFDT1NYKQotdHlwZWRlZiBl
bnVtIHsKLSNpZm5kZWYgTlBfTk9fUVVJQ0tEUkFXCi0gIE5QRHJhd2luZ01vZGVsUXVpY2tEcmF3
ID0gMCwKLSNlbmRpZgotICBOUERyYXdpbmdNb2RlbENvcmVHcmFwaGljcyA9IDEsCi0gIE5QRHJh
d2luZ01vZGVsT3BlbkdMID0gMiwgLy8gTm90ZTogVGhpcyBpcyBub3Qgc3VwcG9ydGVkLgotICBO
UERyYXdpbmdNb2RlbENvcmVBbmltYXRpb24gPSAzCi19IE5QRHJhd2luZ01vZGVsOwotCi10eXBl
ZGVmIGVudW0gewotI2lmbmRlZiBOUF9OT19DQVJCT04KLSAgTlBFdmVudE1vZGVsQ2FyYm9uID0g
MCwKLSNlbmRpZgotICBOUEV2ZW50TW9kZWxDb2NvYSA9IDEKLX0gTlBFdmVudE1vZGVsOwotI2Vu
ZGlmCi0KLS8qCi0gKiAgIFRoZSBmb2xsb3dpbmcgbWFza3MgYXJlIGFwcGxpZWQgb24gY2VydGFp
biBwbGF0Zm9ybXMgdG8gTlBOViBhbmQKLSAqICAgTlBQViBzZWxlY3RvcnMgdGhhdCBwYXNzIGFy
b3VuZCBwb2ludGVycyB0byBDT00gaW50ZXJmYWNlcy4gTmV3ZXIKLSAqICAgY29tcGlsZXJzIG9u
IHNvbWUgcGxhdGZvcm1zIG1heSBnZW5lcmF0ZSB2dGFibGVzIHRoYXQgYXJlIG5vdAotICogICBj
b21wYXRpYmxlIHdpdGggb2xkZXIgY29tcGlsZXJzLiBUbyBwcmV2ZW50IG9sZGVyIHBsdWdpbnMg
ZnJvbQotICogICBub3QgdW5kZXJzdGFuZGluZyBhIG5ldyBicm93c2VyJ3MgQUJJLCB0aGVzZSBt
YXNrcyBjaGFuZ2UgdGhlCi0gKiAgIHZhbHVlcyBvZiB0aG9zZSBzZWxlY3RvcnMgb24gdGhvc2Ug
cGxhdGZvcm1zLiBUbyByZW1haW4gYmFja3dhcmRzCi0gKiAgIGNvbXBhdGlibGUgd2l0aCBkaWZm
ZXJlbnQgdmVyc2lvbnMgb2YgdGhlIGJyb3dzZXIsIHBsdWdpbnMgY2FuCi0gKiAgIHVzZSB0aGVz
ZSBtYXNrcyB0byBkeW5hbWljYWxseSBkZXRlcm1pbmUgYW5kIHVzZSB0aGUgY29ycmVjdCBDKysK
LSAqICAgQUJJIHRoYXQgdGhlIGJyb3dzZXIgaXMgZXhwZWN0aW5nLiBUaGlzIGRvZXMgbm90IGFw
cGx5IHRvIFdpbmRvd3MKLSAqICAgYXMgTWljcm9zb2Z0J3MgQ09NIEFCSSB3aWxsIGxpa2VseSBu
b3QgY2hhbmdlLgotICovCi0KLSNkZWZpbmUgTlBfQUJJX0dDQzNfTUFTSyAgMHgxMDAwMDAwMAot
LyoKLSAqICAgZ2NjIDMueCBnZW5lcmF0ZWQgdnRhYmxlcyBvbiBVTklYIGFuZCBPU1ggYXJlIGlu
Y29tcGF0aWJsZSB3aXRoCi0gKiAgIHByZXZpb3VzIGNvbXBpbGVycy4KLSAqLwotI2lmIChkZWZp
bmVkKFhQX1VOSVgpICYmIGRlZmluZWQoX19HTlVDX18pICYmIChfX0dOVUNfXyA+PSAzKSkKLSNk
ZWZpbmUgX05QX0FCSV9NSVhJTl9GT1JfR0NDMyBOUF9BQklfR0NDM19NQVNLCi0jZWxzZQotI2Rl
ZmluZSBfTlBfQUJJX01JWElOX0ZPUl9HQ0MzIDAKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChYUF9N
QUNPU1gpCi0jZGVmaW5lIE5QX0FCSV9NQUNIT19NQVNLIDB4MDEwMDAwMDAKLSNkZWZpbmUgX05Q
X0FCSV9NSVhJTl9GT1JfTUFDSE8gTlBfQUJJX01BQ0hPX01BU0sKLSNlbHNlCi0jZGVmaW5lIF9O
UF9BQklfTUlYSU5fRk9SX01BQ0hPIDAKLSNlbmRpZgotCi0jZGVmaW5lIE5QX0FCSV9NQVNLIChf
TlBfQUJJX01JWElOX0ZPUl9HQ0MzIHwgX05QX0FCSV9NSVhJTl9GT1JfTUFDSE8pCi0KLS8qCi0g
KiBMaXN0IG9mIHZhcmlhYmxlIG5hbWVzIGZvciB3aGljaCBOUFBfR2V0VmFsdWUgc2hhbGwgYmUg
aW1wbGVtZW50ZWQKLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgTlBQVnBsdWdpbk5hbWVTdHJpbmcg
PSAxLAotICBOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmcsCi0gIE5QUFZwbHVnaW5XaW5kb3dC
b29sLAotICBOUFBWcGx1Z2luVHJhbnNwYXJlbnRCb29sLAotICBOUFBWamF2YUNsYXNzLCAgICAg
ICAgICAgICAgICAvKiBOb3QgaW1wbGVtZW50ZWQgaW4gV2ViS2l0ICovCi0gIE5QUFZwbHVnaW5X
aW5kb3dTaXplLCAgICAgICAgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBXZWJLaXQgKi8KLSAgTlBQ
VnBsdWdpblRpbWVySW50ZXJ2YWwsICAgICAgLyogTm90IGltcGxlbWVudGVkIGluIFdlYktpdCAq
LwotICBOUFBWcGx1Z2luU2NyaXB0YWJsZUluc3RhbmNlID0gKDEwIHwgTlBfQUJJX01BU0spLCAv
KiBOb3QgaW1wbGVtZW50ZWQgaW4gV2ViS2l0ICovCi0gIE5QUFZwbHVnaW5TY3JpcHRhYmxlSUlE
ID0gMTEsIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBXZWJLaXQgKi8KLSAgTlBQVmphdmFzY3JpcHRQ
dXNoQ2FsbGVyQm9vbCA9IDEyLCAgLyogTm90IGltcGxlbWVudGVkIGluIFdlYktpdCAqLwotICBO
UFBWcGx1Z2luS2VlcExpYnJhcnlJbk1lbW9yeSA9IDEzLCAvKiBOb3QgaW1wbGVtZW50ZWQgaW4g
V2ViS2l0ICovCi0gIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCAgICAgICAgID0gMTQsIC8qIE5vdCBp
bXBsZW1lbnRlZCBpbiBXZWJLaXQgKi8KLQotICAvKiBHZXQgdGhlIE5QT2JqZWN0IGZvciBzY3Jp
cHRpbmcgdGhlIHBsdWdpbi4gSW50cm9kdWNlZCBpbiBOUEFQSSBtaW5vciB2ZXJzaW9uIDE0Lgot
ICAgKi8KLSAgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCAgPSAxNSwKLQotICAvKiBHZXQg
dGhlIHBsdWdpbiB2YWx1ZSAoYXMgXDAtdGVybWluYXRlZCBVVEYtOCBzdHJpbmcgZGF0YSkgZm9y
Ci0gICAqIGZvcm0gc3VibWlzc2lvbiBpZiB0aGUgcGx1Z2luIGlzIHBhcnQgb2YgYSBmb3JtLiBV
c2UKLSAgICogTlBOX01lbUFsbG9jKCkgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgc3RyaW5n
IGRhdGEuIEludHJvZHVjZWQKLSAgICogaW4gTlBBUEkgbWlub3IgdmVyc2lvbiAxNS4KLSAgICov
Ci0gIE5QUFZmb3JtVmFsdWUgPSAxNiwgICAgLyogTm90IGltcGxlbWVudGVkIGluIFdlYktpdCAq
LwotCi0gIE5QUFZwbHVnaW5VcmxSZXF1ZXN0c0Rpc3BsYXllZEJvb2wgPSAxNywgLyogTm90IGlt
cGxlbWVudGVkIGluIFdlYktpdCAqLwotCi0gIC8qIENoZWNrcyBpZiB0aGUgcGx1Z2luIGlzIGlu
dGVyZXN0ZWQgaW4gcmVjZWl2aW5nIHRoZSBodHRwIGJvZHkgb2YKLSAgICogYWxsIGh0dHAgcmVx
dWVzdHMgKGluY2x1ZGluZyBmYWlsZWQgb25lcywgaHR0cCBzdGF0dXMgIT0gMjAwKS4KLSAgICov
Ci0gIE5QUFZwbHVnaW5XYW50c0FsbE5ldHdvcmtTdHJlYW1zID0gMTgsCi0KLSAgLyogQnJvd3Nl
cnMgY2FuIHJldHJpZXZlIGEgbmF0aXZlIEFUSyBhY2Nlc3NpYmlsaXR5IHBsdWcgSUQgdmlhIHRo
aXMgdmFyaWFibGUuICovCi0gIE5QUFZwbHVnaW5OYXRpdmVBY2Nlc3NpYmxlQXRrUGx1Z0lkID0g
MTksCi0KLSAgLyogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgcGx1Zy1pbiB3b3VsZCBsaWtlIHRoZSBi
cm93c2VyIHRvIGxvYWQgdGhlICJzcmMiIGF0dHJpYnV0ZS4gKi8KLSAgTlBQVnBsdWdpbkNhbmNl
bFNyY1N0cmVhbSA9IDIwCi0KLSNpZiBkZWZpbmVkKFhQX01BQ09TWCkKLSAgLyogVXNlZCBmb3Ig
bmVnb3RpYXRpbmcgZHJhd2luZyBtb2RlbHMgKi8KLSAgLCBOUFBWcGx1Z2luRHJhd2luZ01vZGVs
ID0gMTAwMAotICAvKiBVc2VkIGZvciBuZWdvdGlhdGluZyBldmVudCBtb2RlbHMgKi8KLSAgLCBO
UFBWcGx1Z2luRXZlbnRNb2RlbCA9IDEwMDEKLSAgLyogSW4gdGhlIE5QRHJhd2luZ01vZGVsQ29y
ZUFuaW1hdGlvbiBkcmF3aW5nIG1vZGVsLCB0aGUgYnJvd3NlciBhc2tzIHRoZSBwbHVnLWluIGZv
ciBhIENvcmUgQW5pbWF0aW9uIGxheWVyLiAqLwotICAsIE5QUFZwbHVnaW5Db3JlQW5pbWF0aW9u
TGF5ZXIgPSAxMDAzCi0jZW5kaWYKLQotICAvKiBVc2VkIGZvciBmaWd1cmluZyBvdXQgd2hldGhl
ciBhIHBsdWctaW4gaXMgcGxheWluZyBhdWRpby4gKi8KLSAgLCBOUFBWcGx1Z2luSXNQbGF5aW5n
QXVkaW8gPSA0MDAwCi0KLX0gTlBQVmFyaWFibGU7Ci0KLS8qCi0gKiBMaXN0IG9mIHZhcmlhYmxl
IG5hbWVzIGZvciB3aGljaCBOUE5fR2V0VmFsdWUgc2hvdWxkIGJlIGltcGxlbWVudGVkLgotICov
Ci10eXBlZGVmIGVudW0gewotICBOUE5WeERpc3BsYXkgPSAxLAotICBOUE5WeHRBcHBDb250ZXh0
LAotICBOUE5WbmV0c2NhcGVXaW5kb3csCi0gIE5QTlZqYXZhc2NyaXB0RW5hYmxlZEJvb2wsCi0g
IE5QTlZhc2RFbmFibGVkQm9vbCwKLSAgTlBOVmlzT2ZmbGluZUJvb2wsCi0KLSAgTlBOVnNlcnZp
Y2VNYW5hZ2VyID0gKDEwIHwgTlBfQUJJX01BU0spLCAgLyogTm90IGltcGxlbWVudGVkIGluIFdl
YktpdCAqLwotICBOUE5WRE9NRWxlbWVudCAgICAgPSAoMTEgfCBOUF9BQklfTUFTSyksICAvKiBO
b3QgaW1wbGVtZW50ZWQgaW4gV2ViS2l0ICovCi0gIE5QTlZET01XaW5kb3cgICAgICA9ICgxMiB8
IE5QX0FCSV9NQVNLKSwgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBXZWJLaXQgKi8KLSAgTlBOVlRv
b2xraXQgICAgICAgID0gKDEzIHwgTlBfQUJJX01BU0spLCAgLyogTm90IGltcGxlbWVudGVkIGlu
IFdlYktpdCAqLwotICBOUE5WU3VwcG9ydHNYRW1iZWRCb29sID0gMTQsICAgICAgICAgICAgICAv
KiBOb3QgaW1wbGVtZW50ZWQgaW4gV2ViS2l0ICovCi0KLSAgLyogR2V0IHRoZSBOUE9iamVjdCB3
cmFwcGVyIGZvciB0aGUgYnJvd3NlciB3aW5kb3cuICovCi0gIE5QTlZXaW5kb3dOUE9iamVjdCA9
IDE1LAotCi0gIC8qIEdldCB0aGUgTlBPYmplY3Qgd3JhcHBlciBmb3IgdGhlIHBsdWdpbnMgRE9N
IGVsZW1lbnQuICovCi0gIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3QgPSAxNiwKLQotICBOUE5W
U3VwcG9ydHNXaW5kb3dsZXNzID0gMTcsCi0KLSAgTlBOVnByaXZhdGVNb2RlQm9vbCA9IDE4LAot
Ci0gIE5QTlZzdXBwb3J0c0FkdmFuY2VkS2V5SGFuZGxpbmcgPSAyMQotCi0jaWYgZGVmaW5lZChY
UF9NQUNPU1gpCi0gIC8qIFVzZWQgZm9yIG5lZ290aWF0aW5nIGRyYXdpbmcgbW9kZWxzICovCi0g
ICwgTlBOVnBsdWdpbkRyYXdpbmdNb2RlbCA9IDEwMDAKLSAgLCBOUE5WY29udGVudHNTY2FsZUZh
Y3RvciA9IDEwMDEKLSNpZm5kZWYgTlBfTk9fUVVJQ0tEUkFXCi0gICwgTlBOVnN1cHBvcnRzUXVp
Y2tEcmF3Qm9vbCA9IDIwMDAKLSNlbmRpZgotICAsIE5QTlZzdXBwb3J0c0NvcmVHcmFwaGljc0Jv
b2wgPSAyMDAxCi0gICwgTlBOVnN1cHBvcnRzT3BlbkdMQm9vbCA9IDIwMDIKLSAgLCBOUE5Wc3Vw
cG9ydHNDb3JlQW5pbWF0aW9uQm9vbCA9IDIwMDMKLSNpZm5kZWYgTlBfTk9fQ0FSQk9OCi0gICwg
TlBOVnN1cHBvcnRzQ2FyYm9uQm9vbCA9IDMwMDAgLyogVFJVRSBpZiB0aGUgYnJvd3NlciBzdXBw
b3J0cyB0aGUgQ2FyYm9uIGV2ZW50IG1vZGVsICovCi0jZW5kaWYKLSAgLCBOUE5Wc3VwcG9ydHND
b2NvYUJvb2wgPSAzMDAxIC8qIFRSVUUgaWYgdGhlIGJyb3dzZXIgc3VwcG9ydHMgdGhlIENvY29h
IGV2ZW50IG1vZGVsICovCi0gICwgTlBOVnN1cHBvcnRzVXBkYXRlZENvY29hVGV4dElucHV0Qm9v
bCA9IDMwMDIgLyogVFJVRSBpZiB0aGUgYnJvd3NlciBzdXBwb3J0cyB0aGUgdXBkYXRlZAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvY29hIHRl
eHQgaW5wdXQgc3BlY2lmaWNhdGlvbi4gKi8KLSAgLCBOUE5Wc3VwcG9ydHNDb21wb3NpdGluZ0Nv
cmVBbmltYXRpb25QbHVnaW5zQm9vbCA9IDc0NjU2IC8qIFRSVUUgaWYgdGhlIGJyb3dzZXIgc3Vw
cG9ydHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENBIG1vZGVsIGNvbXBvc2l0aW5nICovCi0jZW5kaWYgLyogWFBfTUFDT1NY
ICovCi0KLSAgLCBOUE5WbXV0ZUF1ZGlvQm9vbCA9IDQwMDAKLQotfSBOUE5WYXJpYWJsZTsKLQot
dHlwZWRlZiBlbnVtIHsKLSAgTlBOVVJMVkNvb2tpZSA9IDUwMSwKLSAgTlBOVVJMVlByb3h5Ci19
IE5QTlVSTFZhcmlhYmxlOwotCi0vKgotICogVGhlIHR5cGUgb2YgVG9vbGtpdCB0aGUgd2lkZ2V0
cyB1c2UKLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgTlBOVkd0azEyID0gMSwKLSAgTlBOVkd0azIK
LX0gTlBOVG9vbGtpdFR5cGU7Ci0KLS8qCi0gKiBUaGUgdHlwZSBvZiBhIE5QV2luZG93IC0gaXQg
c3BlY2lmaWVzIHRoZSB0eXBlIG9mIHRoZSBkYXRhIHN0cnVjdHVyZQotICogcmV0dXJuZWQgaW4g
dGhlIHdpbmRvdyBmaWVsZC4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgTlBXaW5kb3dUeXBlV2lu
ZG93ID0gMSwKLSAgTlBXaW5kb3dUeXBlRHJhd2FibGUKLX0gTlBXaW5kb3dUeXBlOwotCi10eXBl
ZGVmIHN0cnVjdCBfTlBXaW5kb3cKLXsKLSAgdm9pZCogd2luZG93OyAgLyogUGxhdGZvcm0gc3Bl
Y2lmaWMgd2luZG93IGhhbmRsZSAqLwotICAgICAgICAgICAgICAgICAvKiBPUy8yOiB4IC0gUG9z
aXRpb24gb2YgYm90dG9tIGxlZnQgY29ybmVyICovCi0gICAgICAgICAgICAgICAgIC8qIE9TLzI6
IHkgLSByZWxhdGl2ZSB0byB2aXNpYmxlIG5ldHNjYXBlIHdpbmRvdyAqLwotICBpbnQzMl90ICB4
OyAgICAgIC8qIFBvc2l0aW9uIG9mIHRvcCBsZWZ0IGNvcm5lciByZWxhdGl2ZSAqLwotICBpbnQz
Ml90ICB5OyAgICAgIC8qIHRvIGEgbmV0c2NhcGUgcGFnZS4gKi8KLSAgdWludDMyX3Qgd2lkdGg7
ICAvKiBNYXhpbXVtIHdpbmRvdyBzaXplICovCi0gIHVpbnQzMl90IGhlaWdodDsKLSAgTlBSZWN0
ICAgY2xpcFJlY3Q7IC8qIENsaXBwaW5nIHJlY3RhbmdsZSBpbiBwb3J0IGNvb3JkaW5hdGVzICov
Ci0jaWYgZGVmaW5lZChYUF9VTklYKQotICB2b2lkICogd3NfaW5mbzsgLyogUGxhdGZvcm0tZGVw
ZW5kZW50IGFkZGl0b25hbCBkYXRhICovCi0jZW5kaWYgLyogWFBfVU5JWCAqLwotICBOUFdpbmRv
d1R5cGUgdHlwZTsgLyogSXMgdGhpcyBhIHdpbmRvdyBvciBhIGRyYXdhYmxlPyAqLwotfSBOUFdp
bmRvdzsKLQotdHlwZWRlZiBzdHJ1Y3QgX05QRnVsbFByaW50Ci17Ci0gIE5QQm9vbCBwbHVnaW5Q
cmludGVkOy8qIFNldCBUUlVFIGlmIHBsdWdpbiBoYW5kbGVkIGZ1bGxzY3JlZW4gcHJpbnRpbmcg
Ki8KLSAgTlBCb29sIHByaW50T25lOyAgICAgLyogVFJVRSBpZiBwbHVnaW4gc2hvdWxkIHByaW50
IG9uZSBjb3B5IHRvIGRlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRlciAq
LwotICB2b2lkKiBwbGF0Zm9ybVByaW50OyAvKiBQbGF0Zm9ybS1zcGVjaWZpYyBwcmludGluZyBp
bmZvICovCi19IE5QRnVsbFByaW50OwotCi10eXBlZGVmIHN0cnVjdCBfTlBFbWJlZFByaW50Ci17
Ci0gIE5QV2luZG93IHdpbmRvdzsKLSAgdm9pZCogcGxhdGZvcm1QcmludDsgLyogUGxhdGZvcm0t
c3BlY2lmaWMgcHJpbnRpbmcgaW5mbyAqLwotfSBOUEVtYmVkUHJpbnQ7Ci0KLXR5cGVkZWYgc3Ry
dWN0IF9OUFByaW50Ci17Ci0gIHVpbnQxNl90IG1vZGU7ICAgICAgICAgICAgICAgLyogTlBfRlVM
TCBvciBOUF9FTUJFRCAqLwotICB1bmlvbgotICB7Ci0gICAgTlBGdWxsUHJpbnQgZnVsbFByaW50
OyAgIC8qIGlmIG1vZGUgaXMgTlBfRlVMTCAqLwotICAgIE5QRW1iZWRQcmludCBlbWJlZFByaW50
OyAvKiBpZiBtb2RlIGlzIE5QX0VNQkVEICovCi0gIH0gcHJpbnQ7Ci19IE5QUHJpbnQ7Ci0KLSNp
ZiBkZWZpbmVkKFhQX01BQ09TWCkKLSNpZm5kZWYgTlBfTk9fQ0FSQk9OCi10eXBlZGVmIEV2ZW50
UmVjb3JkIE5QRXZlbnQ7Ci0jZWxzZQotdHlwZWRlZiB2b2lkKiAgTlBFdmVudDsKLSNlbmRpZgot
I2VsaWYgZGVmaW5lZChYUF9XSU4pCi10eXBlZGVmIHN0cnVjdCBfTlBFdmVudAotewotICB1aW50
MTZfdCBldmVudDsKLSAgdWludHB0cl90IHdQYXJhbTsKLSAgdWludHB0cl90IGxQYXJhbTsKLX0g
TlBFdmVudDsKLSNlbGlmIGRlZmluZWQoWFBfT1MyKQotdHlwZWRlZiBzdHJ1Y3QgX05QRXZlbnQK
LXsKLSAgdWludDMyX3QgZXZlbnQ7Ci0gIHVpbnQzMl90IHdQYXJhbTsKLSAgdWludDMyX3QgbFBh
cmFtOwotfSBOUEV2ZW50OwotI2VsaWYgZGVmaW5lZChYUF9VTklYKSAmJiBkZWZpbmVkKE1PWl9Y
MTEpCi10eXBlZGVmIFhFdmVudCBOUEV2ZW50OwotI2Vsc2UKLXR5cGVkZWYgdm9pZCogIE5QRXZl
bnQ7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoWFBfTUFDT1NYKQotdHlwZWRlZiB2b2lkKiBOUFJl
Z2lvbjsKLSNpZm5kZWYgTlBfTk9fUVVJQ0tEUkFXCi10eXBlZGVmIFJnbkhhbmRsZSBOUFFEUmVn
aW9uOwotI2VuZGlmCi10eXBlZGVmIENHUGF0aFJlZiBOUENHUmVnaW9uOwotI2VsaWYgZGVmaW5l
ZChYUF9XSU4pCi10eXBlZGVmIEhSR04gTlBSZWdpb247Ci0jZWxpZiBkZWZpbmVkKFhQX1VOSVgp
ICYmIGRlZmluZWQoTU9aX1gxMSkKLXR5cGVkZWYgUmVnaW9uIE5QUmVnaW9uOwotI2Vsc2UKLXR5
cGVkZWYgdm9pZCAqTlBSZWdpb247Ci0jZW5kaWYKLQotdHlwZWRlZiBzdHJ1Y3QgX05QTlNTdHJp
bmcgTlBOU1N0cmluZzsKLXR5cGVkZWYgc3RydWN0IF9OUE5TV2luZG93IE5QTlNXaW5kb3c7Ci10
eXBlZGVmIHN0cnVjdCBfTlBOU01lbnUgICBOUE5TTWVudTsKLQotI2lmIGRlZmluZWQoWFBfTUFD
T1NYKQotdHlwZWRlZiBOUE5TTWVudSBOUE1lbnU7Ci0jZWxzZQotdHlwZWRlZiB2b2lkICpOUE1l
bnU7Ci0jZW5kaWYKLQotdHlwZWRlZiBlbnVtIHsKLSAgTlBDb29yZGluYXRlU3BhY2VQbHVnaW4g
PSAxLAotICBOUENvb3JkaW5hdGVTcGFjZVdpbmRvdywKLSAgTlBDb29yZGluYXRlU3BhY2VGbGlw
cGVkV2luZG93LAotICBOUENvb3JkaW5hdGVTcGFjZVNjcmVlbiwKLSAgTlBDb29yZGluYXRlU3Bh
Y2VGbGlwcGVkU2NyZWVuCi19IE5QQ29vcmRpbmF0ZVNwYWNlOwotCi0jaWYgZGVmaW5lZChYUF9N
QUNPU1gpCi0KLSNpZm5kZWYgTlBfTk9fUVVJQ0tEUkFXCi10eXBlZGVmIHN0cnVjdCBOUF9Qb3J0
Ci17Ci0gIENHcmFmUHRyIHBvcnQ7Ci0gIGludDMyX3QgcG9ydHg7IC8qIHBvc2l0aW9uIGluc2lk
ZSB0aGUgdG9wbW9zdCB3aW5kb3cgKi8KLSAgaW50MzJfdCBwb3J0eTsKLX0gTlBfUG9ydDsKLSNl
bmRpZiAvKiBOUF9OT19RVUlDS0RSQVcgKi8KLQotLyoKLSAqIE5QX0NHQ29udGV4dCBpcyB0aGUg
dHlwZSBvZiB0aGUgTlBXaW5kb3cncyAnd2luZG93JyB3aGVuIHRoZSBwbHVnaW4gc3BlY2lmaWVz
IE5QRHJhd2luZ01vZGVsQ29yZUdyYXBoaWNzCi0gKiBhcyBpdHMgZHJhd2luZyBtb2RlbC4KLSAq
LwotCi10eXBlZGVmIHN0cnVjdCBOUF9DR0NvbnRleHQKLXsKLSAgQ0dDb250ZXh0UmVmIGNvbnRl
eHQ7Ci0jaWZkZWYgTlBfTk9fQ0FSQk9OCi0gIE5QTlNXaW5kb3cgKndpbmRvdzsKLSNlbHNlCi0g
IHZvaWQgKndpbmRvdzsgLyogQSBXaW5kb3dSZWYgb3IgTlVMTCBmb3IgdGhlIENvY29hIGV2ZW50
IG1vZGVsLiAqLwotI2VuZGlmCi19IE5QX0NHQ29udGV4dDsKLQotdHlwZWRlZiBlbnVtIHsKLSAg
TlBDb2NvYUV2ZW50RHJhd1JlY3QgPSAxLAotICBOUENvY29hRXZlbnRNb3VzZURvd24sCi0gIE5Q
Q29jb2FFdmVudE1vdXNlVXAsCi0gIE5QQ29jb2FFdmVudE1vdXNlTW92ZWQsCi0gIE5QQ29jb2FF
dmVudE1vdXNlRW50ZXJlZCwKLSAgTlBDb2NvYUV2ZW50TW91c2VFeGl0ZWQsCi0gIE5QQ29jb2FF
dmVudE1vdXNlRHJhZ2dlZCwKLSAgTlBDb2NvYUV2ZW50S2V5RG93biwKLSAgTlBDb2NvYUV2ZW50
S2V5VXAsCi0gIE5QQ29jb2FFdmVudEZsYWdzQ2hhbmdlZCwKLSAgTlBDb2NvYUV2ZW50Rm9jdXND
aGFuZ2VkLAotICBOUENvY29hRXZlbnRXaW5kb3dGb2N1c0NoYW5nZWQsCi0gIE5QQ29jb2FFdmVu
dFNjcm9sbFdoZWVsLAotICBOUENvY29hRXZlbnRUZXh0SW5wdXQKLX0gTlBDb2NvYUV2ZW50VHlw
ZTsKLQotdHlwZWRlZiBzdHJ1Y3QgX05QQ29jb2FFdmVudCB7Ci0gIE5QQ29jb2FFdmVudFR5cGUg
dHlwZTsKLSAgdWludDMyX3QgdmVyc2lvbjsKLSAgdW5pb24gewotICAgIHN0cnVjdCB7Ci0gICAg
ICB1aW50MzJfdCBtb2RpZmllckZsYWdzOwotICAgICAgZG91YmxlICAgcGx1Z2luWDsKLSAgICAg
IGRvdWJsZSAgIHBsdWdpblk7Ci0gICAgICBpbnQzMl90ICBidXR0b25OdW1iZXI7Ci0gICAgICBp
bnQzMl90ICBjbGlja0NvdW50OwotICAgICAgZG91YmxlICAgZGVsdGFYOwotICAgICAgZG91Ymxl
ICAgZGVsdGFZOwotICAgICAgZG91YmxlICAgZGVsdGFaOwotICAgIH0gbW91c2U7Ci0gICAgc3Ry
dWN0IHsKLSAgICAgIHVpbnQzMl90ICAgIG1vZGlmaWVyRmxhZ3M7Ci0gICAgICBOUE5TU3RyaW5n
ICpjaGFyYWN0ZXJzOwotICAgICAgTlBOU1N0cmluZyAqY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZp
ZXJzOwotICAgICAgTlBCb29sICAgICAgaXNBUmVwZWF0OwotICAgICAgdWludDE2X3QgICAga2V5
Q29kZTsKLSAgICB9IGtleTsKLSAgICBzdHJ1Y3QgewotICAgICAgQ0dDb250ZXh0UmVmIGNvbnRl
eHQ7Ci0gICAgICBkb3VibGUgeDsKLSAgICAgIGRvdWJsZSB5OwotICAgICAgZG91YmxlIHdpZHRo
OwotICAgICAgZG91YmxlIGhlaWdodDsKLSAgICB9IGRyYXc7Ci0gICAgc3RydWN0IHsKLSAgICAg
IE5QQm9vbCBoYXNGb2N1czsKLSAgICB9IGZvY3VzOwotICAgIHN0cnVjdCB7Ci0gICAgICBOUE5T
U3RyaW5nICp0ZXh0OwotICAgIH0gdGV4dDsKLSAgfSBkYXRhOwotfSBOUENvY29hRXZlbnQ7Ci0K
LSNpZm5kZWYgTlBfTk9fQ0FSQk9OCi0vKiBOb24tc3RhbmRhcmQgZXZlbnQgdHlwZXMgdGhhdCBj
YW4gYmUgcGFzc2VkIHRvIEhhbmRsZUV2ZW50ICovCi1lbnVtIE5QRXZlbnRUeXBlIHsKLSAgTlBF
dmVudFR5cGVfR2V0Rm9jdXNFdmVudCA9IChvc0V2dCArIDE2KSwKLSAgTlBFdmVudFR5cGVfTG9z
ZUZvY3VzRXZlbnQsCi0gIE5QRXZlbnRUeXBlX0FkanVzdEN1cnNvckV2ZW50LAotICBOUEV2ZW50
VHlwZV9NZW51Q29tbWFuZEV2ZW50LAotICBOUEV2ZW50VHlwZV9DbGlwcGluZ0NoYW5nZWRFdmVu
dCwKLSAgTlBFdmVudFR5cGVfU2Nyb2xsaW5nQmVnaW5zRXZlbnQgPSAxMDAwLAotICBOUEV2ZW50
VHlwZV9TY3JvbGxpbmdFbmRzRXZlbnQKLX07Ci0jZW5kaWYgLyogTlBfTk9fQ0FSQk9OICovCi0K
LSNlbmRpZiAvKiBYUF9NQUNPU1ggKi8KLQotLyoKLSAqIFZhbHVlcyBmb3IgbW9kZSBwYXNzZWQg
dG8gTlBQX05ldzoKLSAqLwotI2RlZmluZSBOUF9FTUJFRCAxCi0jZGVmaW5lIE5QX0ZVTEwgIDIK
LQotLyoKLSAqIFZhbHVlcyBmb3Igc3RyZWFtIHR5cGUgcGFzc2VkIHRvIE5QUF9OZXdTdHJlYW06
Ci0gKi8KLSNkZWZpbmUgTlBfTk9STUFMICAgICAxCi0jZGVmaW5lIE5QX1NFRUsgICAgICAgMgot
I2RlZmluZSBOUF9BU0ZJTEUgICAgIDMKLSNkZWZpbmUgTlBfQVNGSUxFT05MWSA0Ci0KLSNkZWZp
bmUgTlBfTUFYUkVBRFkgKCgodW5zaWduZWQpKH4wKTw8MSk+PjEpCi0KLS8qCi0gKiBGbGFncyBm
b3IgTlBQX0NsZWFyU2l0ZURhdGEuCi0gKi8KLSNkZWZpbmUgTlBfQ0xFQVJfQUxMICAgMAotI2Rl
ZmluZSBOUF9DTEVBUl9DQUNIRSAoMSA8PCAwKQotCi0jaWYgIWRlZmluZWQoX19MUDY0X18pCi0j
aWYgZGVmaW5lZChYUF9NQUNPU1gpCi0jcHJhZ21hIG9wdGlvbnMgYWxpZ249cmVzZXQKLSNlbmRp
ZgotI2VuZGlmIC8qIF9fTFA2NF9fICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiAgICAgICBF
cnJvciBhbmQgUmVhc29uIENvZGUgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyoKLSAqIFZhbHVlcyBvZiB0eXBlIE5QRXJy
b3I6Ci0gKi8KLSNkZWZpbmUgTlBFUlJfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAwCi0j
ZGVmaW5lIE5QRVJSX05PX0VSUk9SICAgICAgICAgICAgICAgICAgICAoTlBFUlJfQkFTRSArIDAp
Ci0jZGVmaW5lIE5QRVJSX0dFTkVSSUNfRVJST1IgICAgICAgICAgICAgICAoTlBFUlJfQkFTRSAr
IDEpCi0jZGVmaW5lIE5QRVJSX0lOVkFMSURfSU5TVEFOQ0VfRVJST1IgICAgICAoTlBFUlJfQkFT
RSArIDIpCi0jZGVmaW5lIE5QRVJSX0lOVkFMSURfRlVOQ1RBQkxFX0VSUk9SICAgICAoTlBFUlJf
QkFTRSArIDMpCi0jZGVmaW5lIE5QRVJSX01PRFVMRV9MT0FEX0ZBSUxFRF9FUlJPUiAgICAoTlBF
UlJfQkFTRSArIDQpCi0jZGVmaW5lIE5QRVJSX09VVF9PRl9NRU1PUllfRVJST1IgICAgICAgICAo
TlBFUlJfQkFTRSArIDUpCi0jZGVmaW5lIE5QRVJSX0lOVkFMSURfUExVR0lOX0VSUk9SICAgICAg
ICAoTlBFUlJfQkFTRSArIDYpCi0jZGVmaW5lIE5QRVJSX0lOVkFMSURfUExVR0lOX0RJUl9FUlJP
UiAgICAoTlBFUlJfQkFTRSArIDcpCi0jZGVmaW5lIE5QRVJSX0lOQ09NUEFUSUJMRV9WRVJTSU9O
X0VSUk9SICAoTlBFUlJfQkFTRSArIDgpCi0jZGVmaW5lIE5QRVJSX0lOVkFMSURfUEFSQU0gICAg
ICAgICAgICAgICAoTlBFUlJfQkFTRSArIDkpCi0jZGVmaW5lIE5QRVJSX0lOVkFMSURfVVJMICAg
ICAgICAgICAgICAgICAoTlBFUlJfQkFTRSArIDEwKQotI2RlZmluZSBOUEVSUl9GSUxFX05PVF9G
T1VORCAgICAgICAgICAgICAgKE5QRVJSX0JBU0UgKyAxMSkKLSNkZWZpbmUgTlBFUlJfTk9fREFU
QSAgICAgICAgICAgICAgICAgICAgIChOUEVSUl9CQVNFICsgMTIpCi0jZGVmaW5lIE5QRVJSX1NU
UkVBTV9OT1RfU0VFS0FCTEUgICAgICAgICAoTlBFUlJfQkFTRSArIDEzKQotCi0vKgotICogVmFs
dWVzIG9mIHR5cGUgTlBSZWFzb246Ci0gKi8KLSNkZWZpbmUgTlBSRVNfQkFTRSAgICAgICAgICAw
Ci0jZGVmaW5lIE5QUkVTX0RPTkUgICAgICAgICAoTlBSRVNfQkFTRSArIDApCi0jZGVmaW5lIE5Q
UkVTX05FVFdPUktfRVJSICAoTlBSRVNfQkFTRSArIDEpCi0jZGVmaW5lIE5QUkVTX1VTRVJfQlJF
QUsgICAoTlBSRVNfQkFTRSArIDIpCi0KLS8qCi0gKiBEb24ndCB1c2UgdGhlc2Ugb2Jzb2xldGUg
ZXJyb3IgY29kZXMgYW55IG1vcmUuCi0gKi8KLSNkZWZpbmUgTlBfTk9FUlIgIE5QX05PRVJSX2lz
X29ic29sZXRlX3VzZV9OUEVSUl9OT19FUlJPUgotI2RlZmluZSBOUF9FSU5WQUwgTlBfRUlOVkFM
X2lzX29ic29sZXRlX3VzZV9OUEVSUl9HRU5FUklDX0VSUk9SCi0jZGVmaW5lIE5QX0VBQk9SVCBO
UF9FQUJPUlRfaXNfb2Jzb2xldGVfdXNlX05QUkVTX1VTRVJfQlJFQUsKLQotLyoKLSAqIFZlcnNp
b24gZmVhdHVyZSBpbmZvcm1hdGlvbgotICovCi0jZGVmaW5lIE5QVkVSU19IQVNfU1RSRUFNT1VU
UFVUICAgICAgICAgICAgIDgKLSNkZWZpbmUgTlBWRVJTX0hBU19OT1RJRklDQVRJT04gICAgICAg
ICAgICAgOQotI2RlZmluZSBOUFZFUlNfSEFTX0xJVkVDT05ORUNUICAgICAgICAgICAgICA5Ci0j
ZGVmaW5lIE5QVkVSU19XSU4xNl9IQVNfTElWRUNPTk5FQ1QgICAgICAgIDkKLSNkZWZpbmUgTlBW
RVJTXzY4S19IQVNfTElWRUNPTk5FQ1QgICAgICAgICAgMTEKLSNkZWZpbmUgTlBWRVJTX0hBU19X
SU5ET1dMRVNTICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgTlBWRVJTX0hBU19YUENPTk5FQ1Rf
U0NSSVBUSU5HICAgICAgMTMgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBXZWJLaXQgKi8KLSNkZWZp
bmUgTlBWRVJTX0hBU19OUFJVTlRJTUVfU0NSSVBUSU5HICAgICAgMTQKLSNkZWZpbmUgTlBWRVJT
X0hBU19GT1JNX1ZBTFVFUyAgICAgICAgICAgICAgMTUgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBX
ZWJLaXQ7IHNlZSBidWcgMTMwNjEgKi8KLSNkZWZpbmUgTlBWRVJTX0hBU19QT1BVUFNfRU5BQkxF
RF9TVEFURSAgICAgMTYgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBXZWJLaXQgKi8KLSNkZWZpbmUg
TlBWRVJTX0hBU19SRVNQT05TRV9IRUFERVJTICAgICAgICAgMTcKLSNkZWZpbmUgTlBWRVJTX0hB
U19OUE9CSkVDVF9FTlVNICAgICAgICAgICAgMTgKLSNkZWZpbmUgTlBWRVJTX0hBU19QTFVHSU5f
VEhSRUFEX0FTWU5DX0NBTEwgMTkKLSNkZWZpbmUgTlBWRVJTX0hBU19BTExfTkVUV09SS19TVFJF
QU1TICAgICAgMjAKLSNkZWZpbmUgTlBWRVJTX0hBU19VUkxfQU5EX0FVVEhfSU5GTyAgICAgICAg
MjEKLSNkZWZpbmUgTlBWRVJTX0hBU19QUklWQVRFX01PREUgICAgICAgICAgICAgMjIKLSNkZWZp
bmUgTlBWRVJTX01BQ09TWF9IQVNfRVZFTlRfTU9ERUxTICAgICAgMjMKLSNkZWZpbmUgTlBWRVJT
X0hBU19DQU5DRUxfU1JDX1NUUkVBTSAgICAgICAgMjQKLSNkZWZpbmUgTlBWRVJTX0hBU19BRFZB
TkNFRF9LRVlfSEFORExJTkcgICAgMjUKLSNkZWZpbmUgTlBWRVJTX0hBU19VUkxfUkVESVJFQ1Rf
SEFORExJTkcgICAgMjYKLSNkZWZpbmUgTlBWRVJTX0hBU19DTEVBUl9TSVRFX0RBVEEgICAgICAg
ICAgMjcKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgRnVu
Y3Rpb24gUHJvdG90eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLwotCi0jaWYgZGVmaW5lZChfX09TMl9fKQotI2RlZmluZSBOUF9MT0FERFMgX1N5c3Rl
bQotI2Vsc2UKLSNkZWZpbmUgTlBfTE9BRERTCi0jZW5kaWYKLQotI2lmZGVmIF9fY3BsdXNwbHVz
Ci1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0vKiBOUFBfKiBmdW5jdGlvbnMgYXJlIHByb3ZpZGVk
IGJ5IHRoZSBwbHVnaW4gYW5kIGNhbGxlZCBieSB0aGUgbmF2aWdhdG9yLiAqLwotCi0jaWYgZGVm
aW5lZChYUF9VTklYKQotY29uc3QgY2hhciogTlBQX0dldE1JTUVEZXNjcmlwdGlvbih2b2lkKTsK
LSNlbmRpZgotCi1OUEVycm9yIE5QX0xPQUREUyBOUFBfSW5pdGlhbGl6ZSh2b2lkKTsKLXZvaWQg
ICAgTlBfTE9BRERTIE5QUF9TaHV0ZG93bih2b2lkKTsKLU5QRXJyb3IgTlBfTE9BRERTIE5QUF9O
ZXcoTlBNSU1FVHlwZSBwbHVnaW5UeXBlLCBOUFAgaW5zdGFuY2UsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQxNl90IG1vZGUsIGludDE2X3QgYXJnYywgY2hhciogYXJnbltdLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBhcmd2W10sIE5QU2F2ZWREYXRhKiBzYXZlZCk7
Ci1OUEVycm9yIE5QX0xPQUREUyBOUFBfRGVzdHJveShOUFAgaW5zdGFuY2UsIE5QU2F2ZWREYXRh
Kiogc2F2ZSk7Ci1OUEVycm9yIE5QX0xPQUREUyBOUFBfU2V0V2luZG93KE5QUCBpbnN0YW5jZSwg
TlBXaW5kb3cqIHdpbmRvdyk7Ci1OUEVycm9yIE5QX0xPQUREUyBOUFBfTmV3U3RyZWFtKE5QUCBp
bnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOUFN0cmVhbSogc3RyZWFtLCBOUEJvb2wgc2Vla2FibGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQxNl90KiBzdHlwZSk7Ci1OUEVycm9yIE5QX0xPQUREUyBOUFBfRGVz
dHJveVN0cmVhbShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOUFJlYXNvbiByZWFzb24pOwotaW50MzJfdCBOUF9MT0FE
RFMgTlBQX1dyaXRlUmVhZHkoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtKTsKLWludDMy
X3QgTlBfTE9BRERTIE5QUF9Xcml0ZShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGlu
dDMyX3Qgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbGVuLCB2
b2lkKiBidWZmZXIpOwotdm9pZCAgICBOUF9MT0FERFMgTlBQX1N0cmVhbUFzRmlsZShOUFAgaW5z
dGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGZuYW1lKTsKLXZvaWQgICAgTlBfTE9BRERTIE5QUF9QcmludChOUFAg
aW5zdGFuY2UsIE5QUHJpbnQqIHBsYXRmb3JtUHJpbnQpOwotaW50MTZfdCBOUF9MT0FERFMgTlBQ
X0hhbmRsZUV2ZW50KE5QUCBpbnN0YW5jZSwgdm9pZCogZXZlbnQpOwotdm9pZCAgICBOUF9MT0FE
RFMgTlBQX1VSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTlBSZWFzb24gcmVhc29uLCB2b2lkKiBub3RpZnlEYXRh
KTsKLWpyZWYgICAgTlBfTE9BRERTIE5QUF9HZXRKYXZhQ2xhc3Modm9pZCk7Ci1OUEVycm9yIE5Q
X0xPQUREUyBOUFBfR2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwg
dm9pZCAqdmFsdWUpOwotTlBFcnJvciBOUF9MT0FERFMgTlBQX1NldFZhbHVlKE5QUCBpbnN0YW5j
ZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnZhbHVlKTsKLU5QQm9vbCAgTlBfTE9BRERT
IE5QUF9Hb3RGb2N1cyhOUFAgaW5zdGFuY2UsIE5QRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKTsK
LXZvaWQgICAgTlBfTE9BRERTIE5QUF9Mb3N0Rm9jdXMoTlBQIGluc3RhbmNlKTsKLXZvaWQgICAg
TlBfTE9BRERTIE5QUF9VUkxSZWRpcmVjdE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIq
IHVybCwgaW50MzJfdCBzdGF0dXMsIHZvaWQqIG5vdGlmeURhdGEpOwotTlBFcnJvciBOUF9MT0FE
RFMgTlBQX0NsZWFyU2l0ZURhdGEoY29uc3QgY2hhciogc2l0ZSwgdWludDY0X3QgZmxhZ3MsIHVp
bnQ2NF90IG1heEFnZSk7Ci1jaGFyKiogIE5QX0xPQUREUyBOUFBfR2V0U2l0ZXNXaXRoRGF0YSh2
b2lkKTsKLQotLyogTlBOXyogZnVuY3Rpb25zIGFyZSBwcm92aWRlZCBieSB0aGUgbmF2aWdhdG9y
IGFuZCBjYWxsZWQgYnkgdGhlIHBsdWdpbi4gKi8KLXZvaWQgICAgICAgIE5QX0xPQUREUyBOUE5f
VmVyc2lvbihpbnQqIHBsdWdpbl9tYWpvciwgaW50KiBwbHVnaW5fbWlub3IsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBuZXRzY2FwZV9tYWpvciwgaW50KiBuZXRzY2Fw
ZV9taW5vcik7Ci1OUEVycm9yICAgICBOUF9MT0FERFMgTlBOX0dldFVSTE5vdGlmeShOUFAgaW5z
dGFuY2UsIGNvbnN0IGNoYXIqIHVybCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSk7Ci1OUEVycm9yICAg
ICBOUF9MT0FERFMgTlBOX0dldFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRhcmdldCk7Ci1OUEVy
cm9yICAgICBOUF9MT0FERFMgTlBOX1Bvc3RVUkxOb3RpZnkoTlBQIGluc3RhbmNlLCBjb25zdCBj
aGFyKiB1cmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBub3RpZnlEYXRhKTsKLU5QRXJyb3IgICAg
IE5QX0xPQUREUyBOUE5fUG9zdFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQz
Ml90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBi
dWYsIE5QQm9vbCBmaWxlKTsKLU5QRXJyb3IgICAgIE5QX0xPQUREUyBOUE5fUmVxdWVzdFJlYWQo
TlBTdHJlYW0qIHN0cmVhbSwgTlBCeXRlUmFuZ2UqIHJhbmdlTGlzdCk7Ci1OUEVycm9yICAgICBO
UF9MT0FERFMgTlBOX05ld1N0cmVhbShOUFAgaW5zdGFuY2UsIE5QTUlNRVR5cGUgdHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRhcmdldCwgTlBT
dHJlYW0qKiBzdHJlYW0pOwotaW50MzJfdCAgICAgTlBfTE9BRERTIE5QTl9Xcml0ZShOUFAgaW5z
dGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyX3QgbGVuLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2b2lkKiBidWZmZXIpOwotTlBFcnJvciAgICAgTlBfTE9BRERTIE5QTl9E
ZXN0cm95U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUFJlYXNvbiByZWFzb24pOwotdm9pZCAgICAg
ICAgTlBfTE9BRERTIE5QTl9TdGF0dXMoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBtZXNzYWdl
KTsKLWNvbnN0IGNoYXIqIE5QX0xPQUREUyBOUE5fVXNlckFnZW50KE5QUCBpbnN0YW5jZSk7Ci12
b2lkKiAgICAgICBOUF9MT0FERFMgTlBOX01lbUFsbG9jKHVpbnQzMl90IHNpemUpOwotdm9pZCAg
ICAgICAgTlBfTE9BRERTIE5QTl9NZW1GcmVlKHZvaWQqIHB0cik7Ci11aW50MzJfdCAgICBOUF9M
T0FERFMgTlBOX01lbUZsdXNoKHVpbnQzMl90IHNpemUpOwotdm9pZCAgICAgICAgTlBfTE9BRERT
IE5QTl9SZWxvYWRQbHVnaW5zKE5QQm9vbCByZWxvYWRQYWdlcyk7Ci1KUklFbnYqICAgICBOUF9M
T0FERFMgTlBOX0dldEphdmFFbnYodm9pZCk7Ci1qcmVmICAgICAgICBOUF9MT0FERFMgTlBOX0dl
dEphdmFQZWVyKE5QUCBpbnN0YW5jZSk7Ci1OUEVycm9yICAgICBOUF9MT0FERFMgTlBOX0dldFZh
bHVlKE5QUCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZvaWQgKnZhbHVlKTsKLU5QRXJyb3IgICAgIE5QX0xPQUREUyBO
UE5fU2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdmFsdWUpOwotdm9pZCAgICAgICAgTlBf
TE9BRERTIE5QTl9JbnZhbGlkYXRlUmVjdChOUFAgaW5zdGFuY2UsIE5QUmVjdCAqaW52YWxpZFJl
Y3QpOwotdm9pZCAgICAgICAgTlBfTE9BRERTIE5QTl9JbnZhbGlkYXRlUmVnaW9uKE5QUCBpbnN0
YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUFJlZ2lv
biBpbnZhbGlkUmVnaW9uKTsKLXZvaWQgICAgICAgIE5QX0xPQUREUyBOUE5fRm9yY2VSZWRyYXco
TlBQIGluc3RhbmNlKTsKLXZvaWQgICAgICAgIE5QX0xPQUREUyBOUE5fUHVzaFBvcHVwc0VuYWJs
ZWRTdGF0ZShOUFAgaW5zdGFuY2UsIE5QQm9vbCBlbmFibGVkKTsKLXZvaWQgICAgICAgIE5QX0xP
QUREUyBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSk7Ci12b2lkICAgICAg
ICBOUF9MT0FERFMgTlBOX1BsdWdpblRocmVhZEFzeW5jQ2FsbChOUFAgaW5zdGFuY2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqZnVuYykg
KHZvaWQgKiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkICp1c2VyRGF0YSk7Ci1OUEVycm9yICAgICBOUF9MT0FERFMgTlBOX0dldFZhbHVlRm9y
VVJMKE5QUCBpbnN0YW5jZSwgTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnVybCwgY2hhciAqKnZhbHVl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqbGVu
KTsKLU5QRXJyb3IgICAgIE5QX0xPQUREUyBOUE5fU2V0VmFsdWVGb3JVUkwoTlBQIGluc3RhbmNl
LCBOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqdXJsLCBjb25zdCBjaGFyICp2YWx1ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGVuKTsKLU5QRXJyb3Ig
ICAgIE5QX0xPQUREUyBOUE5fR2V0QXV0aGVudGljYXRpb25JbmZvKE5QUCBpbnN0YW5jZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KnByb3RvY29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqaG9zdCwgaW50MzJfdCBwb3J0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2NoZW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcmVhbG0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq
dXNlcm5hbWUsIHVpbnQzMl90ICp1bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqKnBhc3N3b3JkLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnBsZW4pOwotdWludDMyX3QgICAg
TlBfTE9BRERTIE5QTl9TY2hlZHVsZVRpbWVyKE5QUCBpbnN0YW5jZSwgdWludDMyX3QgaW50ZXJ2
YWwsIE5QQm9vbCByZXBlYXQsIHZvaWQgKCp0aW1lckZ1bmMpKE5QUCBucHAsIHVpbnQzMl90IHRp
bWVySUQpKTsKLXZvaWQgICAgICAgIE5QX0xPQUREUyBOUE5fVW5zY2hlZHVsZVRpbWVyKE5QUCBp
bnN0YW5jZSwgdWludDMyX3QgdGltZXJJRCk7Ci1OUEVycm9yICAgICBOUF9MT0FERFMgTlBOX1Bv
cFVwQ29udGV4dE1lbnUoTlBQIGluc3RhbmNlLCBOUE1lbnUqIG1lbnUpOwotTlBCb29sICAgICAg
TlBfTE9BRERTIE5QTl9Db252ZXJ0UG9pbnQoTlBQIGluc3RhbmNlLCBkb3VibGUgc291cmNlWCwg
ZG91YmxlIHNvdXJjZVksIE5QQ29vcmRpbmF0ZVNwYWNlIHNvdXJjZVNwYWNlLCBkb3VibGUgKmRl
c3RYLCBkb3VibGUgKmRlc3RZLCBOUENvb3JkaW5hdGVTcGFjZSBkZXN0U3BhY2UpOwotTlBCb29s
ICAgICAgTlBfTE9BRERTIE5QTl9IYW5kbGVFdmVudChOUFAgaW5zdGFuY2UsIHZvaWQgKmV2ZW50
LCBOUEJvb2wgaGFuZGxlZCk7Ci1OUEJvb2wgICAgICBOUF9MT0FERFMgTlBOX1VuZm9jdXNJbnN0
YW5jZShOUFAgaW5zdGFuY2UsIE5QRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKTsKLXZvaWQgICAg
ICAgIE5QX0xPQUREUyBOUE5fVVJMUmVkaXJlY3RSZXNwb25zZShOUFAgaW5zdGFuY2UsIHZvaWQq
IG5vdGlmeURhdGEsIE5QQm9vbCBhbGxvdyk7Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfSAgLyog
ZW5kIGV4dGVybiAiQyIgKi8KLSNlbmRpZgotCi0jZW5kaWYgLyogUkNfSU5WT0tFRCAqLwotI2lm
IGRlZmluZWQoX19PUzJfXykKLSNwcmFnbWEgcGFjaygpCi0jZW5kaWYKLQotI2VuZGlmIC8qIG5w
YXBpX2hfICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL25wZnVuY3Rpb25z
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL25wZnVuY3Rpb25zLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGQ2NWY3NmIwZGY1OTJmY2M1NjdhYmYzNWQ1ZGU1ZTQ2Yzc4MmMyZDIu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9ucGZ1bmN0aW9ucy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjI5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0jaWZuZGVm
IE5QRlVOQ1RJT05TX0gKLSNkZWZpbmUgTlBGVU5DVElPTlNfSAotCi0KLSNpbmNsdWRlICJucHJ1
bnRpbWUuaCIKLSNpbmNsdWRlICJucGFwaS5oIgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVy
biAiQyIgewotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFhQX1dJTikKLSNkZWZpbmUgRVhQT1JURURf
Q0FMTEJBQ0soX3R5cGUsIF9uYW1lKSBfdHlwZSAoX19zdGRjYWxsICogX25hbWUpCi0jZWxzZQot
I2RlZmluZSBFWFBPUlRFRF9DQUxMQkFDSyhfdHlwZSwgX25hbWUpIF90eXBlICgqIF9uYW1lKQot
I2VuZGlmCi0KLXR5cGVkZWYgTlBFcnJvciAoKk5QTl9HZXRVUkxOb3RpZnlQcm9jUHRyKShOUFAg
aW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciogd2luZG93LCB2b2lkKiBub3Rp
ZnlEYXRhKTsKLXR5cGVkZWYgTlBFcnJvciAoKk5QTl9Qb3N0VVJMTm90aWZ5UHJvY1B0cikoTlBQ
IGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHdpbmRvdywgdWludDMyX3Qg
bGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKTsKLXR5
cGVkZWYgTlBFcnJvciAoKk5QTl9SZXF1ZXN0UmVhZFByb2NQdHIpKE5QU3RyZWFtKiBzdHJlYW0s
IE5QQnl0ZVJhbmdlKiByYW5nZUxpc3QpOwotdHlwZWRlZiBOUEVycm9yICgqTlBOX05ld1N0cmVh
bVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB3aW5k
b3csIE5QU3RyZWFtKiogc3RyZWFtKTsKLXR5cGVkZWYgaW50MzJfdCAoKk5QTl9Xcml0ZVByb2NQ
dHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzJfdCBsZW4sIHZvaWQqIGJ1
ZmZlcik7Ci10eXBlZGVmIE5QRXJyb3IgKCpOUE5fRGVzdHJveVN0cmVhbVByb2NQdHIpKE5QUCBp
bnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKTsKLXR5cGVkZWYgdm9p
ZCAoKk5QTl9TdGF0dXNQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2Up
OwotdHlwZWRlZiBjb25zdCBjaGFyKigqTlBOX1VzZXJBZ2VudFByb2NQdHIpKE5QUCBpbnN0YW5j
ZSk7Ci10eXBlZGVmIHZvaWQqICgqTlBOX01lbUFsbG9jUHJvY1B0cikodWludDMyX3Qgc2l6ZSk7
Ci10eXBlZGVmIHZvaWQgKCpOUE5fTWVtRnJlZVByb2NQdHIpKHZvaWQqIHB0cik7Ci10eXBlZGVm
IHVpbnQzMl90ICgqTlBOX01lbUZsdXNoUHJvY1B0cikodWludDMyX3Qgc2l6ZSk7Ci10eXBlZGVm
IHZvaWQgKCpOUE5fUmVsb2FkUGx1Z2luc1Byb2NQdHIpKE5QQm9vbCByZWxvYWRQYWdlcyk7Ci10
eXBlZGVmIE5QRXJyb3IgKCpOUE5fR2V0VmFsdWVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QTlZh
cmlhYmxlIHZhcmlhYmxlLCB2b2lkICpyZXRfdmFsdWUpOwotdHlwZWRlZiBOUEVycm9yICgqTlBO
X1NldFZhbHVlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9p
ZCAqdmFsdWUpOwotdHlwZWRlZiB2b2lkICgqTlBOX0ludmFsaWRhdGVSZWN0UHJvY1B0cikoTlBQ
IGluc3RhbmNlLCBOUFJlY3QgKnJlY3QpOwotdHlwZWRlZiB2b2lkICgqTlBOX0ludmFsaWRhdGVS
ZWdpb25Qcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUmVnaW9uIHJlZ2lvbik7Ci10eXBlZGVmIHZv
aWQgKCpOUE5fRm9yY2VSZWRyYXdQcm9jUHRyKShOUFAgaW5zdGFuY2UpOwotdHlwZWRlZiBOUEVy
cm9yICgqTlBOX0dldFVSTFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBj
b25zdCBjaGFyKiB3aW5kb3cpOwotdHlwZWRlZiBOUEVycm9yICgqTlBOX1Bvc3RVUkxQcm9jUHRy
KShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciogd2luZG93LCB1aW50
MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpOwotdHlwZWRlZiB2b2lkKiAo
Kk5QTl9HZXRKYXZhRW52UHJvY1B0cikodm9pZCk7Ci10eXBlZGVmIHZvaWQqICgqTlBOX0dldEph
dmFQZWVyUHJvY1B0cikoTlBQIGluc3RhbmNlKTsKLXR5cGVkZWYgdm9pZCAgKCpOUE5fUHVzaFBv
cHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBCb29sIGVuYWJsZWQpOwot
dHlwZWRlZiB2b2lkICAoKk5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyKShOUFAgaW5z
dGFuY2UpOwotdHlwZWRlZiB2b2lkICgqTlBOX1BsdWdpblRocmVhZEFzeW5jQ2FsbFByb2NQdHIp
KE5QUCBucHAsIHZvaWQgKCpmdW5jKSh2b2lkICopLCB2b2lkICp1c2VyRGF0YSk7Ci10eXBlZGVm
IE5QRXJyb3IgKCpOUE5fR2V0VmFsdWVGb3JVUkxQcm9jUHRyKShOUFAgbnBwLCBOUE5VUkxWYXJp
YWJsZSB2YXJpYWJsZSwgY29uc3QgY2hhciogdXJsLCBjaGFyKiogdmFsdWUsIHVpbnQzMl90KiBs
ZW4pOwotdHlwZWRlZiBOUEVycm9yICgqTlBOX1NldFZhbHVlRm9yVVJMUHJvY1B0cikoTlBQIG5w
cCwgTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciog
dmFsdWUsIHVpbnQzMl90IGxlbik7Ci10eXBlZGVmIE5QRXJyb3IgKCpOUE5fR2V0QXV0aGVudGlj
YXRpb25JbmZvUHJvY1B0cikoTlBQIG5wcCwgY29uc3QgY2hhciogcHJvdG9jb2wsIGNvbnN0IGNo
YXIqIGhvc3QsIGludDMyX3QgcG9ydCwgY29uc3QgY2hhciogc2NoZW1lLCBjb25zdCBjaGFyICpy
ZWFsbSwgY2hhcioqIHVzZXJuYW1lLCB1aW50MzJfdCogdWxlbiwgY2hhcioqIHBhc3N3b3JkLCB1
aW50MzJfdCogcGxlbik7Ci0KLXR5cGVkZWYgdWludDMyX3QgKCpOUE5fU2NoZWR1bGVUaW1lclBy
b2NQdHIpKE5QUCBucHAsIHVpbnQzMl90IGludGVydmFsLCBOUEJvb2wgcmVwZWF0LCB2b2lkICgq
dGltZXJGdW5jKShOUFAgbnBwLCB1aW50MzJfdCB0aW1lcklEKSk7Ci10eXBlZGVmIHZvaWQgKCpO
UE5fVW5zY2hlZHVsZVRpbWVyUHJvY1B0cikoTlBQIG5wcCwgdWludDMyX3QgdGltZXJJRCk7Ci10
eXBlZGVmIE5QRXJyb3IgKCpOUE5fUG9wVXBDb250ZXh0TWVudVByb2NQdHIpKE5QUCBpbnN0YW5j
ZSwgTlBNZW51KiBtZW51KTsKLXR5cGVkZWYgTlBCb29sICgqTlBOX0NvbnZlcnRQb2ludFByb2NQ
dHIpKE5QUCBucHAsIGRvdWJsZSBzb3VyY2VYLCBkb3VibGUgc291cmNlWSwgTlBDb29yZGluYXRl
U3BhY2Ugc291cmNlU3BhY2UsIGRvdWJsZSAqZGVzdFgsIGRvdWJsZSAqZGVzdFksIE5QQ29vcmRp
bmF0ZVNwYWNlIGRlc3RTcGFjZSk7Ci10eXBlZGVmIE5QQm9vbCAoKk5QTl9IYW5kbGVFdmVudFB0
cikoTlBQIGluc3RhbmNlLCB2b2lkICpldmVudCwgTlBCb29sIGhhbmRsZWQpOwotdHlwZWRlZiBO
UEJvb2wgKCpOUE5fVW5mb2N1c0luc3RhbmNlUHRyKShOUFAgaW5zdGFuY2UsIE5QRm9jdXNEaXJl
Y3Rpb24gZGlyZWN0aW9uKTsKLXR5cGVkZWYgdm9pZCAoKk5QTl9VUkxSZWRpcmVjdFJlc3BvbnNl
UHRyKShOUFAgaW5zdGFuY2UsIHZvaWQqIG5vdGlmeURhdGEsIE5QQm9vbCBhbGxvdyk7Ci0KLXR5
cGVkZWYgdm9pZCAoKk5QTl9SZWxlYXNlVmFyaWFudFZhbHVlUHJvY1B0cikgKE5QVmFyaWFudCAq
dmFyaWFudCk7Ci0KLXR5cGVkZWYgTlBJZGVudGlmaWVyICgqTlBOX0dldFN0cmluZ0lkZW50aWZp
ZXJQcm9jUHRyKSAoY29uc3QgTlBVVEY4ICpuYW1lKTsKLXR5cGVkZWYgdm9pZCAoKk5QTl9HZXRT
dHJpbmdJZGVudGlmaWVyc1Byb2NQdHIpIChjb25zdCBOUFVURjggKipuYW1lcywgaW50MzJfdCBu
YW1lQ291bnQsIE5QSWRlbnRpZmllciAqaWRlbnRpZmllcnMpOwotdHlwZWRlZiBOUElkZW50aWZp
ZXIgKCpOUE5fR2V0SW50SWRlbnRpZmllclByb2NQdHIpIChpbnQzMl90IGludGlkKTsKLXR5cGVk
ZWYgaW50MzJfdCAoKk5QTl9JbnRGcm9tSWRlbnRpZmllclByb2NQdHIpIChOUElkZW50aWZpZXIg
aWRlbnRpZmllcik7Ci10eXBlZGVmIGJvb2wgKCpOUE5fSWRlbnRpZmllcklzU3RyaW5nUHJvY1B0
cikgKE5QSWRlbnRpZmllciBpZGVudGlmaWVyKTsKLXR5cGVkZWYgTlBVVEY4ICooKk5QTl9VVEY4
RnJvbUlkZW50aWZpZXJQcm9jUHRyKSAoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIpOwotCi10eXBl
ZGVmIE5QT2JqZWN0KiAoKk5QTl9DcmVhdGVPYmplY3RQcm9jUHRyKSAoTlBQLCBOUENsYXNzICph
Q2xhc3MpOwotdHlwZWRlZiBOUE9iamVjdCogKCpOUE5fUmV0YWluT2JqZWN0UHJvY1B0cikgKE5Q
T2JqZWN0ICpvYmopOwotdHlwZWRlZiB2b2lkICgqTlBOX1JlbGVhc2VPYmplY3RQcm9jUHRyKSAo
TlBPYmplY3QgKm9iaik7Ci10eXBlZGVmIGJvb2wgKCpOUE5fSW52b2tlUHJvY1B0cikgKE5QUCBu
cHAsIE5QT2JqZWN0ICpvYmosIE5QSWRlbnRpZmllciBtZXRob2ROYW1lLCBjb25zdCBOUFZhcmlh
bnQgKmFyZ3MsIHVuc2lnbmVkIGFyZ0NvdW50LCBOUFZhcmlhbnQgKnJlc3VsdCk7Ci10eXBlZGVm
IGJvb2wgKCpOUE5fSW52b2tlRGVmYXVsdFByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2Jq
LCBjb25zdCBOUFZhcmlhbnQgKmFyZ3MsIHVuc2lnbmVkIGFyZ0NvdW50LCBOUFZhcmlhbnQgKnJl
c3VsdCk7Ci10eXBlZGVmIGJvb2wgKCpOUE5fRXZhbHVhdGVQcm9jUHRyKSAoTlBQIG5wcCwgTlBP
YmplY3QgKm9iaiwgTlBTdHJpbmcgKnNjcmlwdCwgTlBWYXJpYW50ICpyZXN1bHQpOwotdHlwZWRl
ZiBib29sICgqTlBOX0dldFByb3BlcnR5UHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmos
IE5QSWRlbnRpZmllciAgcHJvcGVydHlOYW1lLCBOUFZhcmlhbnQgKnJlc3VsdCk7Ci10eXBlZGVm
IGJvb2wgKCpOUE5fU2V0UHJvcGVydHlQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm9iaiwg
TlBJZGVudGlmaWVyICBwcm9wZXJ0eU5hbWUsIGNvbnN0IE5QVmFyaWFudCAqdmFsdWUpOwotdHlw
ZWRlZiBib29sICgqTlBOX0hhc1Byb3BlcnR5UHJvY1B0cikgKE5QUCwgTlBPYmplY3QgKm5wb2Jq
LCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lKTsKLXR5cGVkZWYgYm9vbCAoKk5QTl9IYXNNZXRo
b2RQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm5wb2JqLCBOUElkZW50aWZpZXIgbWV0aG9k
TmFtZSk7Ci10eXBlZGVmIGJvb2wgKCpOUE5fUmVtb3ZlUHJvcGVydHlQcm9jUHRyKSAoTlBQIG5w
cCwgTlBPYmplY3QgKm9iaiwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSk7Ci10eXBlZGVmIHZv
aWQgKCpOUE5fU2V0RXhjZXB0aW9uUHJvY1B0cikgKE5QT2JqZWN0ICpvYmosIGNvbnN0IE5QVVRG
OCAqbWVzc2FnZSk7Ci10eXBlZGVmIGJvb2wgKCpOUE5fRW51bWVyYXRlUHJvY1B0cikgKE5QUCBu
cHAsIE5QT2JqZWN0ICpucG9iaiwgTlBJZGVudGlmaWVyICoqaWRlbnRpZmllciwgdWludDMyX3Qg
KmNvdW50KTsKLXR5cGVkZWYgYm9vbCAoKk5QTl9Db25zdHJ1Y3RQcm9jUHRyKShOUFAgbnBwLCBO
UE9iamVjdCogb2JqLCBjb25zdCBOUFZhcmlhbnQgKmFyZ3MsIHVpbnQzMl90IGFyZ0NvdW50LCBO
UFZhcmlhbnQgKnJlc3VsdCk7ICAgIAotCi10eXBlZGVmIE5QRXJyb3IgKCpOUFBfTmV3UHJvY1B0
cikoTlBNSU1FVHlwZSBwbHVnaW5UeXBlLCBOUFAgaW5zdGFuY2UsIHVpbnQxNl90IG1vZGUsIGlu
dDE2X3QgYXJnYywgY2hhciogYXJnbltdLCBjaGFyKiBhcmd2W10sIE5QU2F2ZWREYXRhKiBzYXZl
ZCk7Ci10eXBlZGVmIE5QRXJyb3IgKCpOUFBfRGVzdHJveVByb2NQdHIpKE5QUCBpbnN0YW5jZSwg
TlBTYXZlZERhdGEqKiBzYXZlKTsKLXR5cGVkZWYgTlBFcnJvciAoKk5QUF9TZXRXaW5kb3dQcm9j
UHRyKShOUFAgaW5zdGFuY2UsIE5QV2luZG93KiB3aW5kb3cpOwotdHlwZWRlZiBOUEVycm9yICgq
TlBQX05ld1N0cmVhbVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBOUFN0
cmVhbSogc3RyZWFtLCBOUEJvb2wgc2Vla2FibGUsIHVpbnQxNl90KiBzdHlwZSk7Ci10eXBlZGVm
IE5QRXJyb3IgKCpOUFBfRGVzdHJveVN0cmVhbVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJl
YW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKTsKLXR5cGVkZWYgdm9pZCAoKk5QUF9TdHJlYW1B
c0ZpbGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGNvbnN0IGNoYXIq
IGZuYW1lKTsKLXR5cGVkZWYgaW50MzJfdCAoKk5QUF9Xcml0ZVJlYWR5UHJvY1B0cikoTlBQIGlu
c3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtKTsKLXR5cGVkZWYgaW50MzJfdCAoKk5QUF9Xcml0ZVBy
b2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzJfdCBvZmZzZXQsIGlu
dDMyX3QgbGVuLCB2b2lkKiBidWZmZXIpOwotdHlwZWRlZiB2b2lkICgqTlBQX1ByaW50UHJvY1B0
cikoTlBQIGluc3RhbmNlLCBOUFByaW50KiBwbGF0Zm9ybVByaW50KTsKLXR5cGVkZWYgaW50MTZf
dCAoKk5QUF9IYW5kbGVFdmVudFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgdm9pZCogZXZlbnQpOwot
dHlwZWRlZiB2b2lkICgqTlBQX1VSTE5vdGlmeVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3Qg
Y2hhciogVVJMLCBOUFJlYXNvbiByZWFzb24sIHZvaWQqIG5vdGlmeURhdGEpOwotdHlwZWRlZiBO
UEVycm9yICgqTlBQX0dldFZhbHVlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2
YXJpYWJsZSwgdm9pZCAqcmV0X3ZhbHVlKTsKLXR5cGVkZWYgTlBFcnJvciAoKk5QUF9TZXRWYWx1
ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnZhbHVl
KTsKLXR5cGVkZWYgTlBCb29sICgqTlBQX0dvdEZvY3VzUHRyKShOUFAgaW5zdGFuY2UsIE5QRm9j
dXNEaXJlY3Rpb24gZGlyZWN0aW9uKTsKLXR5cGVkZWYgdm9pZCAoKk5QUF9Mb3N0Rm9jdXNQdHIp
KE5QUCBpbnN0YW5jZSk7Ci10eXBlZGVmIHZvaWQgKCpOUFBfVVJMUmVkaXJlY3ROb3RpZnlQdHIp
KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBpbnQzMl90IHN0YXR1cywgdm9pZCogbm90
aWZ5RGF0YSk7Ci10eXBlZGVmIE5QRXJyb3IgKCpOUFBfQ2xlYXJTaXRlRGF0YVB0cikoY29uc3Qg
Y2hhciogc2l0ZSwgdWludDY0X3QgZmxhZ3MsIHVpbnQ2NF90IG1heEFnZSk7Ci10eXBlZGVmIGNo
YXIqKiAoKk5QUF9HZXRTaXRlc1dpdGhEYXRhUHRyKSh2b2lkKTsKLQotdHlwZWRlZiB2b2lkICoo
Kk5QUF9HZXRKYXZhQ2xhc3NQcm9jUHRyKSh2b2lkKTsKLXR5cGVkZWYgdm9pZCogSlJJR2xvYmFs
UmVmOyAvL25vdCB1c2luZyB0aGlzIHJpZ2h0IG5vdwotCi10eXBlZGVmIHN0cnVjdCBfTlBOZXRz
Y2FwZUZ1bmNzIHsKLSAgICB1aW50MTZfdCBzaXplOwotICAgIHVpbnQxNl90IHZlcnNpb247Ci0g
ICAgCi0gICAgTlBOX0dldFVSTFByb2NQdHIgZ2V0dXJsOwotICAgIE5QTl9Qb3N0VVJMUHJvY1B0
ciBwb3N0dXJsOwotICAgIE5QTl9SZXF1ZXN0UmVhZFByb2NQdHIgcmVxdWVzdHJlYWQ7Ci0gICAg
TlBOX05ld1N0cmVhbVByb2NQdHIgbmV3c3RyZWFtOwotICAgIE5QTl9Xcml0ZVByb2NQdHIgd3Jp
dGU7Ci0gICAgTlBOX0Rlc3Ryb3lTdHJlYW1Qcm9jUHRyIGRlc3Ryb3lzdHJlYW07Ci0gICAgTlBO
X1N0YXR1c1Byb2NQdHIgc3RhdHVzOwotICAgIE5QTl9Vc2VyQWdlbnRQcm9jUHRyIHVhZ2VudDsK
LSAgICBOUE5fTWVtQWxsb2NQcm9jUHRyIG1lbWFsbG9jOwotICAgIE5QTl9NZW1GcmVlUHJvY1B0
ciBtZW1mcmVlOwotICAgIE5QTl9NZW1GbHVzaFByb2NQdHIgbWVtZmx1c2g7Ci0gICAgTlBOX1Jl
bG9hZFBsdWdpbnNQcm9jUHRyIHJlbG9hZHBsdWdpbnM7Ci0gICAgTlBOX0dldEphdmFFbnZQcm9j
UHRyIGdldEphdmFFbnY7Ci0gICAgTlBOX0dldEphdmFQZWVyUHJvY1B0ciBnZXRKYXZhUGVlcjsK
LSAgICBOUE5fR2V0VVJMTm90aWZ5UHJvY1B0ciBnZXR1cmxub3RpZnk7Ci0gICAgTlBOX1Bvc3RV
UkxOb3RpZnlQcm9jUHRyIHBvc3R1cmxub3RpZnk7Ci0gICAgTlBOX0dldFZhbHVlUHJvY1B0ciBn
ZXR2YWx1ZTsKLSAgICBOUE5fU2V0VmFsdWVQcm9jUHRyIHNldHZhbHVlOwotICAgIE5QTl9JbnZh
bGlkYXRlUmVjdFByb2NQdHIgaW52YWxpZGF0ZXJlY3Q7Ci0gICAgTlBOX0ludmFsaWRhdGVSZWdp
b25Qcm9jUHRyIGludmFsaWRhdGVyZWdpb247Ci0gICAgTlBOX0ZvcmNlUmVkcmF3UHJvY1B0ciBm
b3JjZXJlZHJhdzsKLSAgICAKLSAgICBOUE5fR2V0U3RyaW5nSWRlbnRpZmllclByb2NQdHIgZ2V0
c3RyaW5naWRlbnRpZmllcjsKLSAgICBOUE5fR2V0U3RyaW5nSWRlbnRpZmllcnNQcm9jUHRyIGdl
dHN0cmluZ2lkZW50aWZpZXJzOwotICAgIE5QTl9HZXRJbnRJZGVudGlmaWVyUHJvY1B0ciBnZXRp
bnRpZGVudGlmaWVyOwotICAgIE5QTl9JZGVudGlmaWVySXNTdHJpbmdQcm9jUHRyIGlkZW50aWZp
ZXJpc3N0cmluZzsKLSAgICBOUE5fVVRGOEZyb21JZGVudGlmaWVyUHJvY1B0ciB1dGY4ZnJvbWlk
ZW50aWZpZXI7Ci0gICAgTlBOX0ludEZyb21JZGVudGlmaWVyUHJvY1B0ciBpbnRmcm9taWRlbnRp
ZmllcjsKLSAgICBOUE5fQ3JlYXRlT2JqZWN0UHJvY1B0ciBjcmVhdGVvYmplY3Q7Ci0gICAgTlBO
X1JldGFpbk9iamVjdFByb2NQdHIgcmV0YWlub2JqZWN0OwotICAgIE5QTl9SZWxlYXNlT2JqZWN0
UHJvY1B0ciByZWxlYXNlb2JqZWN0OwotICAgIE5QTl9JbnZva2VQcm9jUHRyIGludm9rZTsKLSAg
ICBOUE5fSW52b2tlRGVmYXVsdFByb2NQdHIgaW52b2tlRGVmYXVsdDsKLSAgICBOUE5fRXZhbHVh
dGVQcm9jUHRyIGV2YWx1YXRlOwotICAgIE5QTl9HZXRQcm9wZXJ0eVByb2NQdHIgZ2V0cHJvcGVy
dHk7Ci0gICAgTlBOX1NldFByb3BlcnR5UHJvY1B0ciBzZXRwcm9wZXJ0eTsKLSAgICBOUE5fUmVt
b3ZlUHJvcGVydHlQcm9jUHRyIHJlbW92ZXByb3BlcnR5OwotICAgIE5QTl9IYXNQcm9wZXJ0eVBy
b2NQdHIgaGFzcHJvcGVydHk7Ci0gICAgTlBOX0hhc01ldGhvZFByb2NQdHIgaGFzbWV0aG9kOwot
ICAgIE5QTl9SZWxlYXNlVmFyaWFudFZhbHVlUHJvY1B0ciByZWxlYXNldmFyaWFudHZhbHVlOwot
ICAgIE5QTl9TZXRFeGNlcHRpb25Qcm9jUHRyIHNldGV4Y2VwdGlvbjsKLSAgICBOUE5fUHVzaFBv
cHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIgcHVzaHBvcHVwc2VuYWJsZWRzdGF0ZTsKLSAgICBOUE5f
UG9wUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0ciBwb3Bwb3B1cHNlbmFibGVkc3RhdGU7Ci0gICAg
TlBOX0VudW1lcmF0ZVByb2NQdHIgZW51bWVyYXRlOwotICAgIE5QTl9QbHVnaW5UaHJlYWRBc3lu
Y0NhbGxQcm9jUHRyIHBsdWdpbnRocmVhZGFzeW5jY2FsbDsKLSAgICBOUE5fQ29uc3RydWN0UHJv
Y1B0ciBjb25zdHJ1Y3Q7Ci0gICAgTlBOX0dldFZhbHVlRm9yVVJMUHJvY1B0ciBnZXR2YWx1ZWZv
cnVybDsKLSAgICBOUE5fU2V0VmFsdWVGb3JVUkxQcm9jUHRyIHNldHZhbHVlZm9ydXJsOwotICAg
IE5QTl9HZXRBdXRoZW50aWNhdGlvbkluZm9Qcm9jUHRyIGdldGF1dGhlbnRpY2F0aW9uaW5mbzsK
LSAgICBOUE5fU2NoZWR1bGVUaW1lclByb2NQdHIgc2NoZWR1bGV0aW1lcjsKLSAgICBOUE5fVW5z
Y2hlZHVsZVRpbWVyUHJvY1B0ciB1bnNjaGVkdWxldGltZXI7Ci0gICAgTlBOX1BvcFVwQ29udGV4
dE1lbnVQcm9jUHRyIHBvcHVwY29udGV4dG1lbnU7Ci0gICAgTlBOX0NvbnZlcnRQb2ludFByb2NQ
dHIgY29udmVydHBvaW50OwotICAgIE5QTl9IYW5kbGVFdmVudFB0ciBoYW5kbGVldmVudDsKLSAg
ICBOUE5fVW5mb2N1c0luc3RhbmNlUHRyIHVuZm9jdXNpbnN0YW5jZTsKLSAgICBOUE5fVVJMUmVk
aXJlY3RSZXNwb25zZVB0ciB1cmxyZWRpcmVjdHJlc3BvbnNlOwotfSBOUE5ldHNjYXBlRnVuY3M7
Ci0KLXR5cGVkZWYgc3RydWN0IF9OUFBsdWdpbkZ1bmNzIHsKLSAgICB1aW50MTZfdCBzaXplOwot
ICAgIHVpbnQxNl90IHZlcnNpb247Ci0gICAgTlBQX05ld1Byb2NQdHIgbmV3cDsKLSAgICBOUFBf
RGVzdHJveVByb2NQdHIgZGVzdHJveTsKLSAgICBOUFBfU2V0V2luZG93UHJvY1B0ciBzZXR3aW5k
b3c7Ci0gICAgTlBQX05ld1N0cmVhbVByb2NQdHIgbmV3c3RyZWFtOwotICAgIE5QUF9EZXN0cm95
U3RyZWFtUHJvY1B0ciBkZXN0cm95c3RyZWFtOwotICAgIE5QUF9TdHJlYW1Bc0ZpbGVQcm9jUHRy
IGFzZmlsZTsKLSAgICBOUFBfV3JpdGVSZWFkeVByb2NQdHIgd3JpdGVyZWFkeTsKLSAgICBOUFBf
V3JpdGVQcm9jUHRyIHdyaXRlOwotICAgIE5QUF9QcmludFByb2NQdHIgcHJpbnQ7Ci0gICAgTlBQ
X0hhbmRsZUV2ZW50UHJvY1B0ciBldmVudDsKLSAgICBOUFBfVVJMTm90aWZ5UHJvY1B0ciB1cmxu
b3RpZnk7Ci0gICAgSlJJR2xvYmFsUmVmIGphdmFDbGFzczsKLSAgICBOUFBfR2V0VmFsdWVQcm9j
UHRyIGdldHZhbHVlOwotICAgIE5QUF9TZXRWYWx1ZVByb2NQdHIgc2V0dmFsdWU7Ci0gICAgTlBQ
X0dvdEZvY3VzUHRyIGdvdGZvY3VzOwotICAgIE5QUF9Mb3N0Rm9jdXNQdHIgbG9zdGZvY3VzOwot
ICAgIE5QUF9VUkxSZWRpcmVjdE5vdGlmeVB0ciB1cmxyZWRpcmVjdG5vdGlmeTsKLSAgICBOUFBf
Q2xlYXJTaXRlRGF0YVB0ciBjbGVhcnNpdGVkYXRhOwotICAgIE5QUF9HZXRTaXRlc1dpdGhEYXRh
UHRyIGdldHNpdGVzd2l0aGRhdGE7Ci19IE5QUGx1Z2luRnVuY3M7Ci0KLXR5cGVkZWYgRVhQT1JU
RURfQ0FMTEJBQ0soTlBFcnJvciwgTlBfR2V0RW50cnlQb2ludHNGdW5jUHRyKShOUFBsdWdpbkZ1
bmNzKik7Ci10eXBlZGVmIEVYUE9SVEVEX0NBTExCQUNLKHZvaWQsIE5QUF9TaHV0ZG93blByb2NQ
dHIpKHZvaWQpOyAgICAKLQotI2lmIGRlZmluZWQoWFBfTUFDT1NYKQotdHlwZWRlZiB2b2lkICgq
QlBfQ3JlYXRlUGx1Z2luTUlNRVR5cGVzUHJlZmVyZW5jZXNGdW5jUHRyKSh2b2lkKTsKLXR5cGVk
ZWYgTlBFcnJvciAoKk1haW5GdW5jUHRyKShOUE5ldHNjYXBlRnVuY3MqLCBOUFBsdWdpbkZ1bmNz
KiwgTlBQX1NodXRkb3duUHJvY1B0ciopOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFhQX1VOSVgp
Ci10eXBlZGVmIEVYUE9SVEVEX0NBTExCQUNLKE5QRXJyb3IsIE5QX0luaXRpYWxpemVGdW5jUHRy
KShOUE5ldHNjYXBlRnVuY3MqLCBOUFBsdWdpbkZ1bmNzKik7Ci10eXBlZGVmIEVYUE9SVEVEX0NB
TExCQUNLKGNvbnN0IGNoYXIqLCBOUF9HZXRNSU1FRGVzY3JpcHRpb25GdW5jUHRyKSh2b2lkKTsK
LSNlbHNlCi10eXBlZGVmIEVYUE9SVEVEX0NBTExCQUNLKE5QRXJyb3IsIE5QX0luaXRpYWxpemVG
dW5jUHRyKShOUE5ldHNjYXBlRnVuY3MqKTsKLSNlbmRpZgotCi0jaWZkZWYgX19jcGx1c3BsdXMK
LX0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
bnBydW50aW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL25wcnVudGltZS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGVjNmM2YmExZjgyYzBkNmZmYWI4ZTE3NDZkZWI5ZDYw
ZDI1ZDQyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvbnBydW50aW1lLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOTMg
KzAsMCBAQAotLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogNDsgaW5kZW50LXRhYnMtbW9kZTog
bmlsOyBjLWJhc2ljLW9mZnNldDogNCAtKi0gKi8KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQs
IEFwcGxlIEluYy4gYW5kIFRoZSBNb3ppbGxhIEZvdW5kYXRpb24uIAotICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KiAKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIEFwcGxlIEluYy4gKCJB
cHBsZSIpIG9yIFRoZSBNb3ppbGxhCi0gKiBGb3VuZGF0aW9uICgiTW96aWxsYSIpIG5vciB0aGUg
bmFtZXMgb2YgdGhlaXIgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCi0gKiB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotICog
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFLCBNT1pJTExBIEFORCBUSEVJUiBDT05UUklCVVRPUlMgIkFT
Ci0gKiBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQKLSAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQotICogUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSwgTU9aSUxMQSBPUgotICogVEhFSVIg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQKLSAqIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HCi0gKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqLwotI2lmbmRl
ZiBfTlBfUlVOVElNRV9IXwotI2RlZmluZSBfTlBfUlVOVElNRV9IXwotCi0jaW5jbHVkZSAibnBh
cGkuaCIKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0vKgot
ICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gZmFjaWxpdGF0ZSBiaW5kaW5nIGNvZGUgd3JpdHRlbiBp
biBDIHRvIHNjcmlwdAotICAgIG9iamVjdHMuICBUaGUgQVBJIGluIHRoaXMgaGVhZGVyIGRvZXMg
bm90IGFzc3VtZSB0aGUgcHJlc2VuY2Ugb2YgYQotICAgIHVzZXIgYWdlbnQuICBUaGF0IGlzLCBp
dCBjYW4gYmUgdXNlZCB0byBiaW5kIEMgY29kZSB0byBzY3JpcHRpbmcKLSAgICBlbnZpcm9ubWVu
dHMgb3V0c2lkZSBvZiB0aGUgY29udGV4dCBvZiBhIHVzZXIgYWdlbnQuCi0gICAgCi0gICAgSG93
ZXZlciwgdGhlIG5vcm1hbCB1c2Ugb2YgdGhlIHRoaXMgQVBJIGlzIGluIHRoZSBjb250ZXh0IG9m
IGEKLSAgICBzY3JpcHRpbmcgZW52aXJvbm1lbnQgcnVubmluZyBpbiBhIGJyb3dzZXIgb3Igb3Ro
ZXIgdXNlciBhZ2VudC4KLSAgICBJbiBwYXJ0aWN1bGFyIGl0IGlzIHVzZWQgdG8gc3VwcG9ydCB0
aGUgZXh0ZW5kZWQgTmV0c2NhcGUKLSAgICBzY3JpcHQtYWJpbGl0eSBBUEkgZm9yIHBsdWdpbnMg
KE5QLVNBUCkuICBOUC1TQVAgaXMgYW4gZXh0ZW5zaW9uCi0gICAgb2YgdGhlIE5ldHNjYXBlIHBs
dWdpbiBBUEkuICBBcyBzdWNoIHdlIGhhdmUgYWRvcHRlZCB0aGUgdXNlIG9mCi0gICAgdGhlICJO
UCIgcHJlZml4IGZvciB0aGlzIEFQSS4KLQotICAgIFRoZSBmb2xsb3dpbmcgTlB7TnxQfVZhcmlh
YmxlcyB3ZXJlIGFkZGVkIHRvIHRoZSBOZXRzY2FwZSBwbHVnaW4KLSAgICBBUEkgKGluIG5wYXBp
LmgpOgotCi0gICAgTlBOVldpbmRvd05QT2JqZWN0Ci0gICAgTlBOVlBsdWdpbkVsZW1lbnROUE9i
amVjdAotICAgIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QKLQotICAgIFRoZXNlIHZhcmlh
YmxlcyBhcmUgZXhwb3NlZCB0aHJvdWdoIE5QTl9HZXRWYWx1ZSgpIGFuZAotICAgIE5QUF9HZXRW
YWx1ZSgpIChyZXNwZWN0aXZlbHkpIGFuZCBhcmUgdXNlZCB0byBlc3RhYmxpc2ggdGhlCi0gICAg
aW5pdGlhbCBiaW5kaW5nIGJldHdlZW4gdGhlIHVzZXIgYWdlbnQgYW5kIG5hdGl2ZSBjb2RlLiAg
VGhlIERPTQotICAgIG9iamVjdHMgaW4gdGhlIHVzZXIgYWdlbnQgY2FuIGJlIGV4YW1pbmVkIGFu
ZCBtYW5pcHVsYXRlZCB1c2luZwotICAgIHRoZSBOUE5fIGZ1bmN0aW9ucyB0aGF0IG9wZXJhdGUg
b24gTlBPYmplY3RzIGRlc2NyaWJlZCBpbiB0aGlzCi0gICAgaGVhZGVyLgotCi0gICAgVG8gdGhl
IGV4dGVudCBwb3NzaWJsZSB0aGUgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHNjcmlwdGluZwotICAg
IGxhbmd1YWdlIHVzZWQgYnkgdGhlIHNjcmlwdGluZyBlbnZpcm9ubWVudCBoYXZlIGJlZW4gbWlu
aW1pemVkLgotKi8KLQotI2RlZmluZSBOUF9CRUdJTl9NQUNSTyAgZG8gewotI2RlZmluZSBOUF9F
TkRfTUFDUk8gICAgfSB3aGlsZSAoMCkKLQotLyoKLSAgICBPYmplY3RzIChub24tcHJpbWl0aXZl
IGRhdGEpIHBhc3NlZCBiZXR3ZWVuICdDJyBhbmQgc2NyaXB0IGlzCi0gICAgYWx3YXlzIHdyYXBw
ZWQgaW4gYW4gTlBPYmplY3QuICBUaGUgJ2ludGVyZmFjZScgb2YgYW4gTlBPYmplY3QgaXMKLSAg
ICBkZXNjcmliZWQgYnkgYW4gTlBDbGFzcy4KLSovCi10eXBlZGVmIHN0cnVjdCBOUE9iamVjdCBO
UE9iamVjdDsKLXR5cGVkZWYgc3RydWN0IE5QQ2xhc3MgTlBDbGFzczsKLQotdHlwZWRlZiBjaGFy
IE5QVVRGODsKLXR5cGVkZWYgc3RydWN0IF9OUFN0cmluZyB7Ci0gICAgY29uc3QgTlBVVEY4ICpV
VEY4Q2hhcmFjdGVyczsKLSAgICB1aW50MzJfdCBVVEY4TGVuZ3RoOwotfSBOUFN0cmluZzsKLQot
dHlwZWRlZiBlbnVtIHsKLSAgICBOUFZhcmlhbnRUeXBlX1ZvaWQsCi0gICAgTlBWYXJpYW50VHlw
ZV9OdWxsLAotICAgIE5QVmFyaWFudFR5cGVfQm9vbCwKLSAgICBOUFZhcmlhbnRUeXBlX0ludDMy
LAotICAgIE5QVmFyaWFudFR5cGVfRG91YmxlLAotICAgIE5QVmFyaWFudFR5cGVfU3RyaW5nLAot
ICAgIE5QVmFyaWFudFR5cGVfT2JqZWN0Ci19IE5QVmFyaWFudFR5cGU7Ci0KLXR5cGVkZWYgc3Ry
dWN0IF9OUFZhcmlhbnQgewotICAgIE5QVmFyaWFudFR5cGUgdHlwZTsKLSAgICB1bmlvbiB7Ci0g
ICAgICAgIGJvb2wgYm9vbFZhbHVlOwotICAgICAgICBpbnQzMl90IGludFZhbHVlOwotICAgICAg
ICBkb3VibGUgZG91YmxlVmFsdWU7Ci0gICAgICAgIE5QU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAg
ICAgICBOUE9iamVjdCAqb2JqZWN0VmFsdWU7Ci0gICAgfSB2YWx1ZTsKLX0gTlBWYXJpYW50Owot
Ci0vKgotICAgIE5QTl9SZWxlYXNlVmFyaWFudFZhbHVlIGlzIGNhbGxlZCBvbiBhbGwgJ291dCcg
cGFyYW1ldGVycwotICAgIHJlZmVyZW5jZXMuICBTcGVjaWZpY2FsbHkgaXQgaXMgdG8gYmUgY2Fs
bGVkIG9uIHZhcmlhbnRzIHRoYXQgb3duCi0gICAgdGhlaXIgdmFsdWUsIGFzIGlzIHRoZSBjYXNl
IHdpdGggYWxsIG5vbi1jb25zdCBOUFZhcmlhbnQqCi0gICAgYXJndW1lbnRzIGFmdGVyIGEgc3Vj
Y2Vzc2Z1bCBjYWxsIHRvIGFueSBtZXRob2RzIChleGNlcHQgdGhpcyBvbmUpCi0gICAgaW4gdGhp
cyBBUEkuCi0KLSAgICBBZnRlciBjYWxsaW5nIE5QTl9SZWxlYXNlVmFyaWFudFZhbHVlLCB0aGUg
dHlwZSBvZiB0aGUgdmFyaWFudAotICAgIHdpbGwgYmUgTlBWYXJpYW50VHlwZV9Wb2lkLgotKi8K
LXZvaWQgTlBOX1JlbGVhc2VWYXJpYW50VmFsdWUoTlBWYXJpYW50ICp2YXJpYW50KTsKLQotI2Rl
ZmluZSBOUFZBUklBTlRfSVNfVk9JRChfdikgICAgKChfdikudHlwZSA9PSBOUFZhcmlhbnRUeXBl
X1ZvaWQpCi0jZGVmaW5lIE5QVkFSSUFOVF9JU19OVUxMKF92KSAgICAoKF92KS50eXBlID09IE5Q
VmFyaWFudFR5cGVfTnVsbCkKLSNkZWZpbmUgTlBWQVJJQU5UX0lTX0JPT0xFQU4oX3YpICgoX3Yp
LnR5cGUgPT0gTlBWYXJpYW50VHlwZV9Cb29sKQotI2RlZmluZSBOUFZBUklBTlRfSVNfSU5UMzIo
X3YpICAgKChfdikudHlwZSA9PSBOUFZhcmlhbnRUeXBlX0ludDMyKQotI2RlZmluZSBOUFZBUklB
TlRfSVNfRE9VQkxFKF92KSAgKChfdikudHlwZSA9PSBOUFZhcmlhbnRUeXBlX0RvdWJsZSkKLSNk
ZWZpbmUgTlBWQVJJQU5UX0lTX1NUUklORyhfdikgICgoX3YpLnR5cGUgPT0gTlBWYXJpYW50VHlw
ZV9TdHJpbmcpCi0jZGVmaW5lIE5QVkFSSUFOVF9JU19PQkpFQ1QoX3YpICAoKF92KS50eXBlID09
IE5QVmFyaWFudFR5cGVfT2JqZWN0KQotCi0jZGVmaW5lIE5QVkFSSUFOVF9UT19CT09MRUFOKF92
KSAoKF92KS52YWx1ZS5ib29sVmFsdWUpCi0jZGVmaW5lIE5QVkFSSUFOVF9UT19JTlQzMihfdikg
ICAoKF92KS52YWx1ZS5pbnRWYWx1ZSkKLSNkZWZpbmUgTlBWQVJJQU5UX1RPX0RPVUJMRShfdikg
ICgoX3YpLnZhbHVlLmRvdWJsZVZhbHVlKQotI2RlZmluZSBOUFZBUklBTlRfVE9fU1RSSU5HKF92
KSAgKChfdikudmFsdWUuc3RyaW5nVmFsdWUpCi0jZGVmaW5lIE5QVkFSSUFOVF9UT19PQkpFQ1Qo
X3YpICAoKF92KS52YWx1ZS5vYmplY3RWYWx1ZSkKLQotI2RlZmluZSBWT0lEX1RPX05QVkFSSUFO
VChfdikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
TlBfQkVHSU5fTUFDUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIChfdikudHlwZSA9IE5QVmFyaWFudFR5cGVfVm9p
ZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChfdiku
dmFsdWUub2JqZWN0VmFsdWUgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotTlBfRU5EX01BQ1JPCi0KLSNkZWZpbmUgTlVMTF9UT19OUFZBUklBTlQo
X3YpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLU5Q
X0JFR0lOX01BQ1JPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAoX3YpLnR5cGUgPSBOUFZhcmlhbnRUeXBlX051bGw7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoX3YpLnZh
bHVlLm9iamVjdFZhbHVlID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLU5QX0VORF9NQUNSTwotCi0jZGVmaW5lIEJPT0xFQU5fVE9fTlBWQVJJQU5U
KF92YWwsIF92KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1OUF9C
RUdJTl9NQUNSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgKF92KS50eXBlID0gTlBWYXJpYW50VHlwZV9Cb29sOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKF92KS52YWx1
ZS5ib29sVmFsdWUgPSAhIShfdmFsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi1OUF9FTkRfTUFDUk8KLQotI2RlZmluZSBJTlQzMl9UT19OUFZBUklBTlQoX3Zh
bCwgX3YpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotTlBfQkVH
SU5fTUFDUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIChfdikudHlwZSA9IE5QVmFyaWFudFR5cGVfSW50MzI7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChfdikudmFsdWUu
aW50VmFsdWUgPSBfdmFsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotTlBfRU5EX01BQ1JPCi0KLSNkZWZpbmUgRE9VQkxFX1RPX05QVkFSSUFOVChfdmFs
LCBfdikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLU5QX0JFR0lO
X01BQ1JPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAoX3YpLnR5cGUgPSBOUFZhcmlhbnRUeXBlX0RvdWJsZTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoX3YpLnZhbHVlLmRv
dWJsZVZhbHVlID0gX3ZhbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLU5QX0VORF9NQUNSTwotCi0jZGVmaW5lIFNUUklOR1pfVE9fTlBWQVJJQU5UKF92YWws
IF92KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1OUF9CRUdJTl9N
QUNSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgKF92KS50eXBlID0gTlBWYXJpYW50VHlwZV9TdHJpbmc7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTlBTdHJpbmcgc3RyID0g
eyBfdmFsLCB1aW50MzJfdChzdHJsZW4oX3ZhbCkpIH07ICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgKF92KS52YWx1ZS5zdHJpbmdWYWx1ZSA9IHN0cjsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1OUF9FTkRfTUFDUk8KLQotI2RlZmluZSBTVFJJ
TkdOX1RPX05QVkFSSUFOVChfdmFsLCBfbGVuLCBfdikgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotTlBfQkVHSU5fTUFDUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChfdikudHlwZSA9IE5QVmFy
aWFudFR5cGVfU3RyaW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIE5QU3RyaW5nIHN0ciA9IHsgX3ZhbCwgdWludDMyX3QoX2xlbikgfTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChfdikudmFsdWUuc3RyaW5nVmFsdWUgPSBz
dHI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotTlBfRU5E
X01BQ1JPCi0KLSNkZWZpbmUgT0JKRUNUX1RPX05QVkFSSUFOVChfdmFsLCBfdikgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLU5QX0JFR0lOX01BQ1JPICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAoX3YpLnR5cGUgPSBOUFZhcmlhbnRUeXBlX09iamVjdDsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoX3YpLnZhbHVlLm9iamVjdFZhbHVlID0gX3Zh
bDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLU5QX0VORF9N
QUNSTwotCi0KLS8qCi0gIFR5cGUgbWFwcGluZ3MgKEphdmFTY3JpcHQgdHlwZXMgaGF2ZSBiZWVu
IHVzZWQgZm9yIGlsbHVzdHJhdGlvbgotICAgIHB1cnBvc2VzKToKLQotICBKYXZhU2NyaXB0ICAg
ICAgIHRvICAgICAgICAgICAgIEMgKE5QVmFyaWFudCB3aXRoIHR5cGU6KQotICB1bmRlZmluZWQg
ICAgICAgICAgICAgICAgICAgICAgIE5QVmFyaWFudFR5cGVfVm9pZAotICBudWxsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5QVmFyaWFudFR5cGVfTnVsbAotICBCb29sZWFuICAgICAgICAg
ICAgICAgICAgICAgICAgIE5QVmFyaWFudFR5cGVfQm9vbAotICBOdW1iZXIgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5QVmFyaWFudFR5cGVfRG91YmxlIG9yIE5QVmFyaWFudFR5cGVfSW50MzIK
LSAgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICBOUFZhcmlhbnRUeXBlX1N0cmluZwot
ICBPYmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgIE5QVmFyaWFudFR5cGVfT2JqZWN0Ci0K
LSAgQyAoTlBWYXJpYW50IHdpdGggdHlwZTopICAgdG8gICBKYXZhU2NyaXB0Ci0gIE5QVmFyaWFu
dFR5cGVfVm9pZCAgICAgICAgICAgICAgdW5kZWZpbmVkCi0gIE5QVmFyaWFudFR5cGVfTnVsbCAg
ICAgICAgICAgICAgbnVsbAotICBOUFZhcmlhbnRUeXBlX0Jvb2wgICAgICAgICAgICAgIEJvb2xl
YW4KLSAgTlBWYXJpYW50VHlwZV9JbnQzMiAgICAgICAgICAgICBOdW1iZXIKLSAgTlBWYXJpYW50
VHlwZV9Eb3VibGUgICAgICAgICAgICBOdW1iZXIKLSAgTlBWYXJpYW50VHlwZV9TdHJpbmcgICAg
ICAgICAgICBTdHJpbmcKLSAgTlBWYXJpYW50VHlwZV9PYmplY3QgICAgICAgICAgICBPYmplY3QK
LSovCi0KLXR5cGVkZWYgdm9pZCAqTlBJZGVudGlmaWVyOwotCi0vKgotICAgIE5QT2JqZWN0cyBo
YXZlIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMuICBNZXRob2RzIGFuZCBwcm9wZXJ0aWVzIGFyZQot
ICAgIGlkZW50aWZpZWQgd2l0aCBOUElkZW50aWZpZXJzLiAgVGhlc2UgaWRlbnRpZmllcnMgbWF5
IGJlIHJlZmxlY3RlZAotICAgIGluIHNjcmlwdC4gIE5QSWRlbnRpZmllcnMgY2FuIGJlIGVpdGhl
ciBzdHJpbmdzIG9yIGludGVnZXJzLCBJT1csCi0gICAgbWV0aG9kcyBhbmQgcHJvcGVydGllcyBj
YW4gYmUgaWRlbnRpZmllZCBieSBlaXRoZXIgc3RyaW5ncyBvcgotICAgIGludGVnZXJzIChpLmUu
IGZvb1siYmFyIl0gdnMgZm9vWzFdKS4gTlBJZGVudGlmaWVycyBjYW4gYmUKLSAgICBjb21wYXJl
ZCB1c2luZyA9PS4gIEluIGNhc2Ugb2YgYW55IGVycm9ycywgdGhlIHJlcXVlc3RlZAotICAgIE5Q
SWRlbnRpZmllcihzKSB3aWxsIGJlIE5VTEwuIE5QSWRlbnRpZmllciBsaWZldGltZSBpcyBjb250
cm9sbGVkCi0gICAgYnkgdGhlIGJyb3dzZXIuIFBsdWdpbnMgZG8gbm90IG5lZWQgdG8gd29ycnkg
YWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQKLSAgICB3aXRoIHJlZ2FyZHMgdG8gTlBJZGVudGlmaWVy
cy4KLSovCi1OUElkZW50aWZpZXIgTlBOX0dldFN0cmluZ0lkZW50aWZpZXIoY29uc3QgTlBVVEY4
ICpuYW1lKTsKLXZvaWQgTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzKGNvbnN0IE5QVVRGOCAqKm5h
bWVzLCBpbnQzMl90IG5hbWVDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5Q
SWRlbnRpZmllciAqaWRlbnRpZmllcnMpOwotTlBJZGVudGlmaWVyIE5QTl9HZXRJbnRJZGVudGlm
aWVyKGludDMyX3QgaW50aWQpOwotYm9vbCBOUE5fSWRlbnRpZmllcklzU3RyaW5nKE5QSWRlbnRp
ZmllciBpZGVudGlmaWVyKTsKLQotLyoKLSAgICBUaGUgTlBVVEY4IHJldHVybmVkIGZyb20gTlBO
X1VURjhGcm9tSWRlbnRpZmllciBTSE9VTEQgYmUgZnJlZWQuCi0qLwotTlBVVEY4ICpOUE5fVVRG
OEZyb21JZGVudGlmaWVyKE5QSWRlbnRpZmllciBpZGVudGlmaWVyKTsKLQotLyoKLSAgICBHZXQg
dGhlIGludGVnZXIgcmVwcmVzZW50ZWQgYnkgaWRlbnRpZmllci4gSWYgaWRlbnRpZmllciBpcyBu
b3QgYW4KLSAgICBpbnRlZ2VyIGlkZW50aWZpZXIsIHRoZSBiZWhhdmlvdXIgaXMgdW5kZWZpbmVk
LgotKi8KLWludDMyX3QgTlBOX0ludEZyb21JZGVudGlmaWVyKE5QSWRlbnRpZmllciBpZGVudGlm
aWVyKTsKLQotLyoKLSAgICBOUE9iamVjdCBiZWhhdmlvciBpcyBpbXBsZW1lbnRlZCB1c2luZyB0
aGUgZm9sbG93aW5nIHNldCBvZgotICAgIGNhbGxiYWNrIGZ1bmN0aW9ucy4KLQotICAgIFRoZSBO
UFZhcmlhbnQgKnJlc3VsdCBhcmd1bWVudCBvZiB0aGVzZSBmdW5jdGlvbnMgKHdoZXJlCi0gICAg
YXBwbGljYWJsZSkgc2hvdWxkIGJlIHJlbGVhc2VkIHVzaW5nIE5QTl9SZWxlYXNlVmFyaWFudFZh
bHVlKCkuCi0qLwotdHlwZWRlZiBOUE9iamVjdCAqKCpOUEFsbG9jYXRlRnVuY3Rpb25QdHIpKE5Q
UCBucHAsIE5QQ2xhc3MgKmFDbGFzcyk7Ci10eXBlZGVmIHZvaWQgKCpOUERlYWxsb2NhdGVGdW5j
dGlvblB0cikoTlBPYmplY3QgKm5wb2JqKTsKLXR5cGVkZWYgdm9pZCAoKk5QSW52YWxpZGF0ZUZ1
bmN0aW9uUHRyKShOUE9iamVjdCAqbnBvYmopOwotdHlwZWRlZiBib29sICgqTlBIYXNNZXRob2RG
dW5jdGlvblB0cikoTlBPYmplY3QgKm5wb2JqLCBOUElkZW50aWZpZXIgbmFtZSk7Ci10eXBlZGVm
IGJvb2wgKCpOUEludm9rZUZ1bmN0aW9uUHRyKShOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmll
ciBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTlBWYXJp
YW50ICphcmdzLCB1aW50MzJfdCBhcmdDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5QVmFyaWFudCAqcmVzdWx0KTsKLXR5cGVkZWYgYm9vbCAoKk5QSW52b2tlRGVm
YXVsdEZ1bmN0aW9uUHRyKShOUE9iamVjdCAqbnBvYmosCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgTlBWYXJpYW50ICphcmdzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFyZ0NvdW50LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5QVmFyaWFudCAqcmVzdWx0KTsK
LXR5cGVkZWYgYm9vbCAoKk5QSGFzUHJvcGVydHlGdW5jdGlvblB0cikoTlBPYmplY3QgKm5wb2Jq
LCBOUElkZW50aWZpZXIgbmFtZSk7Ci10eXBlZGVmIGJvb2wgKCpOUEdldFByb3BlcnR5RnVuY3Rp
b25QdHIpKE5QT2JqZWN0ICpucG9iaiwgTlBJZGVudGlmaWVyIG5hbWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5QVmFyaWFudCAqcmVzdWx0KTsKLXR5cGVkZWYg
Ym9vbCAoKk5QU2V0UHJvcGVydHlGdW5jdGlvblB0cikoTlBPYmplY3QgKm5wb2JqLCBOUElkZW50
aWZpZXIgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgTlBWYXJpYW50ICp2YWx1ZSk7Ci10eXBlZGVmIGJvb2wgKCpOUFJlbW92ZVByb3BlcnR5RnVu
Y3Rpb25QdHIpKE5QT2JqZWN0ICpucG9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTlBJZGVudGlmaWVyIG5hbWUpOwotdHlwZWRlZiBib29sICgqTlBFbnVt
ZXJhdGlvbkZ1bmN0aW9uUHRyKShOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciAqKnZhbHVl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqY291
bnQpOwotdHlwZWRlZiBib29sICgqTlBDb25zdHJ1Y3RGdW5jdGlvblB0cikoTlBPYmplY3QgKm5w
b2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTlBWYXJp
YW50ICphcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy
X3QgYXJnQ291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUFZh
cmlhbnQgKnJlc3VsdCk7Ci0KLS8qCi0gICAgTlBPYmplY3RzIHJldHVybmVkIGJ5IGNyZWF0ZSwg
cmV0YWluLCBpbnZva2UsIGFuZCBnZXRQcm9wZXJ0eSBwYXNzCi0gICAgYSByZWZlcmVuY2UgY291
bnQgdG8gdGhlIGNhbGxlci4gIFRoYXQgaXMsIHRoZSBjYWxsZWUgYWRkcyBhCi0gICAgcmVmZXJl
bmNlIGNvdW50IHdoaWNoIHBhc3NlcyB0byB0aGUgY2FsbGVyLiAgSXQgaXMgdGhlIGNhbGxlcidz
Ci0gICAgcmVzcG9uc2liaWxpdHkgdG8gcmVsZWFzZSB0aGUgcmV0dXJuZWQgb2JqZWN0LgotCi0g
ICAgTlBJbnZva2VGdW5jdGlvblB0ciBmdW5jdGlvbiBtYXkgcmV0dXJuIDAgdG8gaW5kaWNhdGUg
YSB2b2lkCi0gICAgcmVzdWx0LgotCi0gICAgTlBJbnZhbGlkYXRlRnVuY3Rpb25QdHIgaXMgY2Fs
bGVkIGJ5IHRoZSBzY3JpcHRpbmcgZW52aXJvbm1lbnQKLSAgICB3aGVuIHRoZSBuYXRpdmUgY29k
ZSBpcyBzaHV0ZG93bi4gIEFueSBhdHRlbXB0IHRvIG1lc3NhZ2UgYQotICAgIE5QT2JqZWN0IGlu
c3RhbmNlIGFmdGVyIHRoZSBpbnZhbGlkYXRlIGNhbGxiYWNrIGhhcyBiZWVuCi0gICAgY2FsbGVk
IHdpbGwgcmVzdWx0IGluIHVuZGVmaW5lZCBiZWhhdmlvciwgZXZlbiBpZiB0aGUgbmF0aXZlIGNv
ZGUKLSAgICBpcyBzdGlsbCByZXRhaW5pbmcgdGhvc2UgTlBPYmplY3QgaW5zdGFuY2VzLiAgKFRo
ZSBydW50aW1lCi0gICAgd2lsbCB0eXBpY2FsbHkgcmV0dXJuIGltbWVkaWF0ZWx5LCB3aXRoIDAg
b3IgTlVMTCwgZnJvbSBhbiBhdHRlbXB0Ci0gICAgdG8gZGlzcGF0Y2ggdG8gYSBOUE9iamVjdCwg
YnV0IHRoaXMgYmVoYXZpb3Igc2hvdWxkIG5vdCBiZQotICAgIGRlcGVuZGVkIHVwb24uKQotCi0g
ICAgVGhlIE5QRW51bWVyYXRpb25GdW5jdGlvblB0ciBmdW5jdGlvbiBtYXkgcGFzcyBhbiBhcnJh
eSBvZgotICAgIE5QSWRlbnRpZmllcnMgYmFjayB0byB0aGUgY2FsbGVyLiBUaGUgY2FsbGVlIGFs
bG9jcyB0aGUgbWVtb3J5IG9mCi0gICAgdGhlIGFycmF5IHVzaW5nIE5QTl9NZW1BbGxvYygpLCBh
bmQgaXQncyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkKLSAgICB0byByZWxlYXNlIGl0IHVz
aW5nIE5QTl9NZW1GcmVlKCkuCi0qLwotc3RydWN0IE5QQ2xhc3MKLXsKLSAgICB1aW50MzJfdCBz
dHJ1Y3RWZXJzaW9uOwotICAgIE5QQWxsb2NhdGVGdW5jdGlvblB0ciBhbGxvY2F0ZTsKLSAgICBO
UERlYWxsb2NhdGVGdW5jdGlvblB0ciBkZWFsbG9jYXRlOwotICAgIE5QSW52YWxpZGF0ZUZ1bmN0
aW9uUHRyIGludmFsaWRhdGU7Ci0gICAgTlBIYXNNZXRob2RGdW5jdGlvblB0ciBoYXNNZXRob2Q7
Ci0gICAgTlBJbnZva2VGdW5jdGlvblB0ciBpbnZva2U7Ci0gICAgTlBJbnZva2VEZWZhdWx0RnVu
Y3Rpb25QdHIgaW52b2tlRGVmYXVsdDsKLSAgICBOUEhhc1Byb3BlcnR5RnVuY3Rpb25QdHIgaGFz
UHJvcGVydHk7Ci0gICAgTlBHZXRQcm9wZXJ0eUZ1bmN0aW9uUHRyIGdldFByb3BlcnR5OwotICAg
IE5QU2V0UHJvcGVydHlGdW5jdGlvblB0ciBzZXRQcm9wZXJ0eTsKLSAgICBOUFJlbW92ZVByb3Bl
cnR5RnVuY3Rpb25QdHIgcmVtb3ZlUHJvcGVydHk7Ci0gICAgTlBFbnVtZXJhdGlvbkZ1bmN0aW9u
UHRyIGVudW1lcmF0ZTsKLSAgICBOUENvbnN0cnVjdEZ1bmN0aW9uUHRyIGNvbnN0cnVjdDsKLX07
Ci0KLSNkZWZpbmUgTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT04gICAgICAzCi0KLSNkZWZpbmUgTlBf
Q0xBU1NfU1RSVUNUX1ZFUlNJT05fRU5VTSAyCi0jZGVmaW5lIE5QX0NMQVNTX1NUUlVDVF9WRVJT
SU9OX0NUT1IgMwotCi0jZGVmaW5lIE5QX0NMQVNTX1NUUlVDVF9WRVJTSU9OX0hBU19FTlVNKG5w
Y2xhc3MpICAgXAotICAgICAgICAoKG5wY2xhc3MpLT5zdHJ1Y3RWZXJzaW9uID49IE5QX0NMQVNT
X1NUUlVDVF9WRVJTSU9OX0VOVU0pCi0KLSNkZWZpbmUgTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT05f
SEFTX0NUT1IobnBjbGFzcykgICBcCi0gICAgICAgICgobnBjbGFzcyktPnN0cnVjdFZlcnNpb24g
Pj0gTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT05fQ1RPUikKLQotc3RydWN0IE5QT2JqZWN0IHsKLSAg
ICBOUENsYXNzICpfY2xhc3M7Ci0gICAgdWludDMyX3QgcmVmZXJlbmNlQ291bnQ7Ci0gICAgLyoK
LSAgICAgKiBBZGRpdGlvbmFsIHNwYWNlIG1heSBiZSBhbGxvY2F0ZWQgaGVyZSBieSB0eXBlcyBv
ZiBOUE9iamVjdHMKLSAgICAgKi8KLX07Ci0KLS8qCi0gICAgSWYgdGhlIGNsYXNzIGhhcyBhbiBh
bGxvY2F0ZSBmdW5jdGlvbiwgTlBOX0NyZWF0ZU9iamVjdCBpbnZva2VzCi0gICAgdGhhdCBmdW5j
dGlvbiwgb3RoZXJ3aXNlIGEgTlBPYmplY3QgaXMgYWxsb2NhdGVkIGFuZAotICAgIHJldHVybmVk
LiBUaGlzIG1ldGhvZCB3aWxsIGluaXRpYWxpemUgdGhlIHJlZmVyZW5jZUNvdW50IG1lbWJlciBv
ZgotICAgIHRoZSBOUE9iamVjdCB0byAxLgotKi8KLU5QT2JqZWN0ICpOUE5fQ3JlYXRlT2JqZWN0
KE5QUCBucHAsIE5QQ2xhc3MgKmFDbGFzcyk7Ci0KLS8qCi0gICAgSW5jcmVtZW50IHRoZSBOUE9i
amVjdCdzIHJlZmVyZW5jZSBjb3VudC4KLSovCi1OUE9iamVjdCAqTlBOX1JldGFpbk9iamVjdChO
UE9iamVjdCAqbnBvYmopOwotCi0vKgotICAgIERlY3JlbWVudGVkIHRoZSBOUE9iamVjdCdzIHJl
ZmVyZW5jZSBjb3VudC4gIElmIHRoZSByZWZlcmVuY2UKLSAgICBjb3VudCBnb2VzIHRvIHplcm8s
IHRoZSBjbGFzcydzIGRlc3Ryb3kgZnVuY3Rpb24gaXMgaW52b2tlIGlmCi0gICAgc3BlY2lmaWVk
LCBvdGhlcndpc2UgdGhlIG9iamVjdCBpcyBmcmVlZCBkaXJlY3RseS4KLSovCi12b2lkIE5QTl9S
ZWxlYXNlT2JqZWN0KE5QT2JqZWN0ICpucG9iaik7Ci0KLS8qCi0gICAgRnVuY3Rpb25zIHRvIGFj
Y2VzcyBzY3JpcHQgb2JqZWN0cyByZXByZXNlbnRlZCBieSBOUE9iamVjdC4KLQotICAgIENhbGxz
IHRvIHNjcmlwdCBvYmplY3RzIGFyZSBzeW5jaHJvbm91cy4gIElmIGEgZnVuY3Rpb24gcmV0dXJu
cyBhCi0gICAgdmFsdWUsIGl0IHdpbGwgYmUgc3VwcGxpZWQgdmlhIHRoZSByZXN1bHQgTlBWYXJp
YW50Ci0gICAgYXJndW1lbnQuIFN1Y2Nlc3NmdWwgY2FsbHMgd2lsbCByZXR1cm4gdHJ1ZSwgZmFs
c2Ugd2lsbCBiZQotICAgIHJldHVybmVkIGluIGNhc2Ugb2YgYW4gZXJyb3IuCi0gICAgCi0gICAg
Q2FsbHMgbWFkZSBmcm9tIHBsdWdpbiBjb2RlIHRvIHNjcmlwdCBtdXN0IGJlIG1hZGUgZnJvbSB0
aGUgdGhyZWFkCi0gICAgb24gd2hpY2ggdGhlIHBsdWdpbiB3YXMgaW5pdGlhbGl6ZWQuCi0qLwot
Ci1ib29sIE5QTl9JbnZva2UoTlBQIG5wcCwgTlBPYmplY3QgKm5wb2JqLCBOUElkZW50aWZpZXIg
bWV0aG9kTmFtZSwKLSAgICAgICAgICAgICAgICBjb25zdCBOUFZhcmlhbnQgKmFyZ3MsIHVpbnQz
Ml90IGFyZ0NvdW50LCBOUFZhcmlhbnQgKnJlc3VsdCk7Ci1ib29sIE5QTl9JbnZva2VEZWZhdWx0
KE5QUCBucHAsIE5QT2JqZWN0ICpucG9iaiwgY29uc3QgTlBWYXJpYW50ICphcmdzLAotICAgICAg
ICAgICAgICAgICAgICAgICB1aW50MzJfdCBhcmdDb3VudCwgTlBWYXJpYW50ICpyZXN1bHQpOwot
Ym9vbCBOUE5fRXZhbHVhdGUoTlBQIG5wcCwgTlBPYmplY3QgKm5wb2JqLCBOUFN0cmluZyAqc2Ny
aXB0LAotICAgICAgICAgICAgICAgICAgTlBWYXJpYW50ICpyZXN1bHQpOwotYm9vbCBOUE5fR2V0
UHJvcGVydHkoTlBQIG5wcCwgTlBPYmplY3QgKm5wb2JqLCBOUElkZW50aWZpZXIgcHJvcGVydHlO
YW1lLAotICAgICAgICAgICAgICAgICAgICAgTlBWYXJpYW50ICpyZXN1bHQpOwotYm9vbCBOUE5f
U2V0UHJvcGVydHkoTlBQIG5wcCwgTlBPYmplY3QgKm5wb2JqLCBOUElkZW50aWZpZXIgcHJvcGVy
dHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgTlBWYXJpYW50ICp2YWx1ZSk7Ci1i
b29sIE5QTl9SZW1vdmVQcm9wZXJ0eShOUFAgbnBwLCBOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUpOwotYm9vbCBOUE5fSGFzUHJvcGVydHkoTlBQIG5wcCwgTlBPYmpl
Y3QgKm5wb2JqLCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lKTsKLWJvb2wgTlBOX0hhc01ldGhv
ZChOUFAgbnBwLCBOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciBtZXRob2ROYW1lKTsKLWJv
b2wgTlBOX0VudW1lcmF0ZShOUFAgbnBwLCBOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciAq
KmlkZW50aWZpZXIsCi0gICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmNvdW50KTsKLWJvb2wg
TlBOX0NvbnN0cnVjdChOUFAgbnBwLCBOUE9iamVjdCAqbnBvYmosIGNvbnN0IE5QVmFyaWFudCAq
YXJncywKLSAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhcmdDb3VudCwgTlBWYXJpYW50ICpy
ZXN1bHQpOwotCi0vKgotICAgIE5QTl9TZXRFeGNlcHRpb24gbWF5IGJlIGNhbGxlZCB0byB0cmln
Z2VyIGEgc2NyaXB0IGV4Y2VwdGlvbiB1cG9uCi0gICAgcmV0dXJuIGZyb20gZW50cnkgcG9pbnRz
IGludG8gTlBPYmplY3RzLiAgVHlwaWNhbCB1c2FnZToKLQotICAgIE5QTl9TZXRFeGNlcHRpb24g
KG5wb2JqLCBtZXNzYWdlKTsKLSovCi12b2lkIE5QTl9TZXRFeGNlcHRpb24oTlBPYmplY3QgKm5w
b2JqLCBjb25zdCBOUFVURjggKm1lc3NhZ2UpOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNl
bmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbnB0eXBl
cy5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ucHR5cGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDMwMDEyODg4NWNjMzQ2NzQ1YmRiYTg3Zjg3MTY3NGRjZmM1ZTIzMWEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9ucHR5cGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyog
LSotIE1vZGU6IEM7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2lj
LW9mZnNldDogMiAtKi0gKi8KLS8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKLSAq
IFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQotICoKLSAqIFRoZSBjb250ZW50cyBv
ZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVy
c2lvbgotICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBl
eGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi0gKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4g
YSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8K
LSAqCi0gKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli
dXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAotICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO
RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCi0gKiBmb3IgdGhl
IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVy
IHRoZQotICogTGljZW5zZS4KLSAqCi0gKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBtb3ppbGxhLm9y
ZyBjb2RlLgotICoKLSAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29k
ZSBpcwotICogbW96aWxsYS5vcmcuCi0gKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFs
IERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDA0Ci0gKiB0aGUgSW5pdGlhbCBEZXZlbG9w
ZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogQ29udHJpYnV0b3Iocyk6Ci0gKiAgIEpv
aG5ueSBTdGVuYmFjayA8anN0QG1vemlsbGEub3JnPiAoT3JpZ2luYWwgYXV0aG9yKQotICoKLSAq
IEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5k
ZXIgdGhlIHRlcm1zIG9mCi0gKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKLSAqIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAot
ICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFy
ZSBhcHBsaWNhYmxlIGluc3RlYWQKLSAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBh
bGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5Ci0gKiB1bmRlciB0aGUg
dGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3Ro
ZXJzIHRvCi0gKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgotICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHBy
b3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKLSAqIGFuZCBv
dGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBk
byBub3QgZGVsZXRlCi0gKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVz
ZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCi0gKiB0aGUgdGVybXMgb2YgYW55IG9u
ZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgotICoKLSAqICoqKioqIEVORCBMSUNF
TlNFIEJMT0NLICoqKioqICovCi0KLSNpZm5kZWYgbnB0eXBlc19oXwotI2RlZmluZSBucHR5cGVz
X2hfCi0KLS8qCi0gKiBIZWFkZXIgZmlsZSBmb3IgZW5zdXJpbmcgdGhhdCBDOTkgdHlwZXMgKFt1
XWludDMyX3QsIFt1XWludDY0X3QgYW5kIGJvb2wpIGFuZAotICogdHJ1ZS9mYWxzZSBtYWNyb3Mg
YXJlIGF2YWlsYWJsZS4KLSAqLwotCi0jaWYgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChPUzIp
Ci0gIC8qCi0gICAqIFdpbjMyIGFuZCBPUy8yIGRvbid0IGtub3cgQzk5LCBzbyBkZWZpbmUgW3Vd
aW50XzE2LzMyLzY0IGhlcmUuIFRoZSBib29sCi0gICAqIGlzIHByZWRlZmluZWQgdGhvLCBib3Ro
IGluIEMgYW5kIEMrKy4KLSAgICovCi0gIHR5cGVkZWYgc2hvcnQgaW50MTZfdDsKLSAgdHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsKLSAgdHlwZWRlZiBpbnQgaW50MzJfdDsKLSAgdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgdWludDMyX3Q7Ci0gIHR5cGVkZWYgbG9uZyBsb25nIGludDY0X3Q7
Ci0gIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnQ2NF90OwotI2VsaWYgZGVmaW5lZChf
QUlYKSB8fCBkZWZpbmVkKF9fc3VuKSB8fCBkZWZpbmVkKF9fb3NmX18pIHx8IGRlZmluZWQoSVJJ
WCkgfHwgZGVmaW5lZChIUFVYKQotICAvKgotICAgKiBBSVggYW5kIFN1bk9TIHNoaXAgYSBpbnR0
eXBlcy5oIGhlYWRlciB0aGF0IGRlZmluZXMgW3VdaW50MzJfdCwKLSAgICogYnV0IG5vdCBib29s
IGZvciBDLgotICAgKi8KLSAgI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0KLSAgI2lmbmRlZiBfX2Nw
bHVzcGx1cwotICAgIHR5cGVkZWYgaW50IGJvb2w7Ci0gICAgI2RlZmluZSB0cnVlICAgMQotICAg
ICNkZWZpbmUgZmFsc2UgIDAKLSAgI2VuZGlmCi0jZWxpZiBkZWZpbmVkKGJzZGkpIHx8IGRlZmlu
ZWQoRlJFRUJTRCkgfHwgZGVmaW5lZChPUEVOQlNEKQotICAvKgotICAgKiBCU0QvT1MsIEZyZWVC
U0QsIGFuZCBPcGVuQlNEIHNoaXAgc3lzL3R5cGVzLmggdGhhdCBkZWZpbmUgaW50MzJfdCBhbmQg
Ci0gICAqIHVfaW50MzJfdC4KLSAgICovCi0gICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotICAv
KgotICAgKiBCU0QvT1Mgc2hpcHMgbm8gaGVhZGVyIHRoYXQgZGVmaW5lcyB1aW50MzJfdCwgbm9y
IGJvb2wgKGZvciBDKQotICAgKi8KLSAgI2lmIGRlZmluZWQoYnNkaSkKLSAgdHlwZWRlZiB1X2lu
dDMyX3QgdWludDMyX3Q7Ci0gIHR5cGVkZWYgdV9pbnQ2NF90IHVpbnQ2NF90OwotCi0gICNpZiAh
ZGVmaW5lZChfX2NwbHVzcGx1cykKLSAgICB0eXBlZGVmIGludCBib29sOwotICAgICNkZWZpbmUg
dHJ1ZSAgIDEKLSAgICAjZGVmaW5lIGZhbHNlICAwCi0gICNlbmRpZgotICAjZWxzZQotICAvKgot
ICAgKiBGcmVlQlNEIGFuZCBPcGVuQlNEIGRlZmluZSB1aW50MzJfdCBhbmQgYm9vbC4KLSAgICov
Ci0gICAgI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0gICAgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLSAg
I2VuZGlmCi0jZWxpZiBkZWZpbmVkKEJFT1MpCi0gICNpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2Vs
c2UKLSAgLyoKLSAgICogRm9yIHRob3NlIHRoYXQgc2hpcCBhIHN0YW5kYXJkIEM5OSBzdGRpbnQu
aCBoZWFkZXIgZmlsZSwgaW5jbHVkZQotICAgKiBpdC4gQ2FuJ3QgZG8gdGhlIHNhbWUgZm9yIHN0
ZGJvb2wuaCB0aG8sIHNpbmNlIHNvbWUgc3lzdGVtcyBzaGlwCi0gICAqIHdpdGggYSBzdGRib29s
LmggZmlsZSB0aGF0IGRvZXNuJ3QgY29tcGlsZSEKLSAgICovCi0gICNpbmNsdWRlIDxzdGRpbnQu
aD4KLQotICAjaWZuZGVmIF9fY3BsdXNwbHVzCi0gICAgI2lmICFkZWZpbmVkKF9fR05VQ19fKSB8
fCAoX19HTlVDX18gPiAyIHx8IF9fR05VQ19NSU5PUl9fID4gOTUpCi0gICAgICAjaW5jbHVkZSA8
c3RkYm9vbC5oPgotICAgICNlbHNlCi0gICAgICAvKgotICAgICAgICogR0NDIDIuOTEgY2FuJ3Qg
ZGVhbCB3aXRoIGEgdHlwZWRlZiBmb3IgYm9vbCwgYnV0IGEgI2RlZmluZQotICAgICAgICogd29y
a3MuCi0gICAgICAgKi8KLSAgICAgICNkZWZpbmUgYm9vbCBpbnQKLSAgICAgICNkZWZpbmUgdHJ1
ZSAgIDEKLSAgICAgICNkZWZpbmUgZmFsc2UgIDAKLSAgICAjZW5kaWYKLSAgI2VuZGlmCi0jZW5k
aWYKLQotI2VuZGlmIC8qIG5wdHlwZXNfaF8gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Q01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CmluZGV4IDdlNmFh
MjdkODVlNDdmZWVlMjViY2YyOTY2MDA3N2UyMjI5MTI1ZGQuLmRlMWQxMzUxYjZkZWNjZWUyMTA5
NzFhMjhhNjAwMzgyMjY0NWQxZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dApAQCAtMTg1LDEwICsxODUs
NiBAQCBzZXQoV2ViS2l0X01FU1NBR0VTX0lOX0ZJTEVTCiAgICAgTmV0d29ya1Byb2Nlc3Mvd2Vi
cnRjL05ldHdvcmtSVENQcm92aWRlcgogICAgIE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9SVENEYXRh
Q2hhbm5lbFJlbW90ZU1hbmFnZXJQcm94eQogCi0gICAgUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250
cm9sbGVyUHJveHkKLSAgICBQbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MKLSAgICBQbHVnaW5Q
cm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uCi0KICAgICBTaGFyZWQvQXV4aWxpYXJ5UHJvY2Vz
cwogICAgIFNoYXJlZC9XZWJDb25uZWN0aW9uCiAKQEAgLTE5Niw4ICsxOTIsNiBAQCBzZXQoV2Vi
S2l0X01FU1NBR0VTX0lOX0ZJTEVTCiAKICAgICBTaGFyZWQvTm90aWZpY2F0aW9ucy9Ob3RpZmlj
YXRpb25NYW5hZ2VyTWVzc2FnZUhhbmRsZXIKIAotICAgIFNoYXJlZC9QbHVnaW5zL05QT2JqZWN0
TWVzc2FnZVJlY2VpdmVyCi0KICAgICBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eQogCiAgICAg
VUlQcm9jZXNzL01lZGlhL1JlbW90ZU1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yUHJveHkKQEAgLTIy
NCw4ICsyMTgsNiBAQCBzZXQoV2ViS2l0X01FU1NBR0VTX0lOX0ZJTEVTCiAKICAgICBVSVByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5CiAKLSAgICBVSVByb2Nlc3MvUGx1Z2lucy9Q
bHVnaW5Qcm9jZXNzUHJveHkKLQogICAgIFVJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJQcm94eQogCiAgICAgVUlQcm9jZXNzL1hSL1BsYXRmb3JtWFJTeXN0ZW0K
QEAgLTI3OSwxMCArMjcxLDYgQEAgc2V0KFdlYktpdF9NRVNTQUdFU19JTl9GSUxFUwogCiAgICAg
V2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIKIAotICAgIFdl
YlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbgotICAgIFdlYlByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIKLSAgICBXZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luUHJveHkKLQogICAgIFdlYlByb2Nlc3MvU3BlZWNoL1NwZWVjaFJlY29nbml0
aW9uUmVhbHRpbWVNZWRpYVNvdXJjZU1hbmFnZXIKIAogICAgIFdlYlByb2Nlc3MvU3RvcmFnZS9X
ZWJTV0NsaWVudENvbm5lY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ29uZmlndXJh
dGlvbnMvUGx1Z2luU2VydmljZS54Y2NvbmZpZyBiL1NvdXJjZS9XZWJLaXQvQ29uZmlndXJhdGlv
bnMvUGx1Z2luU2VydmljZS54Y2NvbmZpZwppbmRleCA0YjkyYTQwZmQ0NDdlMDE2MjhiZDhlMTI3
OTU2MTkwNjVmM2ZlYjIxLi5lYmQ4NDZmNjJkMjc2OGU0NWNiYTcyYmM5MDU1ZmExMTI1NDU2Mjdk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NvbmZpZ3VyYXRpb25zL1BsdWdpblNlcnZpY2Uu
eGNjb25maWcKKysrIGIvU291cmNlL1dlYktpdC9Db25maWd1cmF0aW9ucy9QbHVnaW5TZXJ2aWNl
LnhjY29uZmlnCkBAIC0zMSw3ICszMSw2IEBAIFdLX0FQUEtJVF9MREZMQUdTID0gJChXS19BUFBL
SVRfTERGTEFHU18kKFdLX1BMQVRGT1JNX05BTUUpKTsKIFdLX0FQUEtJVF9MREZMQUdTX21hY29z
eCA9IC1mcmFtZXdvcmsgQXBwS2l0OwogCiBPVEhFUl9MREZMQUdTID0gJChpbmhlcml0ZWQpICQo
V0tfQVBQS0lUX0xERkxBR1MpICQoT1RIRVJfTERGTEFHU19QTEFURk9STSkgJChPVEhFUl9MREZM
QUdTX1ZFUlNJT05FRF9GUkFNRVdPUktfUEFUSCkgJChXS19SRUxPQ0FUQUJMRV9GUkFNRVdPUktT
X0xERkxBR1MpOwotT1RIRVJfTERGTEFHU19QTEFURk9STVtzZGs9bWFjb3N4Kl0gPSAkKEJVSUxU
X1BST0RVQ1RTX0RJUikvUGx1Z2luUHJvY2Vzc1NoaW0uZHlsaWI7CiAKIFdLX0xJQlJBUllfVkFM
SURBVElPTl9DT0RFX1NJR05fRkxBR1Nbc2RrPW1hY29zeCpdID0gLS1lbnRpdGxlbWVudHMgJChX
S19QUk9DRVNTRURfWENFTlRfRklMRSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ29u
ZmlndXJhdGlvbnMvV2ViS2l0LnhjY29uZmlnIGIvU291cmNlL1dlYktpdC9Db25maWd1cmF0aW9u
cy9XZWJLaXQueGNjb25maWcKaW5kZXggZjM1NjMzYzdhNGRhZjg3NzY1YTkzOWFiMWYxNGZmNTM2
ZTc0YzE5Yy4uOWQ0ZDM3MzY2MjI1ZWFiN2Q5OWI1YzI3NmViZWVhNjdkNjg2MDA3OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9Db25maWd1cmF0aW9ucy9XZWJLaXQueGNjb25maWcKKysrIGIv
U291cmNlL1dlYktpdC9Db25maWd1cmF0aW9ucy9XZWJLaXQueGNjb25maWcKQEAgLTE3Myw3ICsx
NzMsNyBAQCBTRUNUT1JERVJfRkxBR1NfUHJvZHVjdGlvbltzZGs9bWFjb3N4Kl0gPSAtV2wsLW9y
ZGVyX2ZpbGUsbWFjL1dlYktpdDIub3JkZXI7CiBFWENMVURFRF9JT1NfUkVTT1VSQ0VfRklMRV9O
QU1FUyA9IFJlc291cmNlcy9pb3MvKjsKIEVYQ0xVREVEX0lPU19SRVNPVVJDRV9GSUxFX05BTUVT
W3Nkaz1pcGhvbmUqXSA9IDsKIAotRVhDTFVERURfTUFDT1NfUExVR0lOX0ZJTEVfTkFNRVNbc2Rr
PWlwaG9uZSpdID0gUGx1Z2luUHJvY2Vzc1NoaW0uZHlsaWIgU2VjSXRlbVNoaW0uZHlsaWIgV2Vi
UHJvY2Vzc1NoaW0uZHlsaWIgKi5wZGYgUmVzb3VyY2VzL21hYy8qIGNvbS5hcHBsZS5XZWJLaXQu
TmV0d29ya1Byb2Nlc3Muc2IgY29tLmFwcGxlLldlYktpdC5HUFVQcm9jZXNzLnNiIGNvbS5hcHBs
ZS5XZWJLaXQuV2ViQXV0aG5Qcm9jZXNzLnNiIGNvbS5hcHBsZS5XZWJQcm9jZXNzLnNiIGNvbS5h
cHBsZS5XZWJLaXQucGx1Z2luLWNvbW1vbi5zYiBQbHVnSW5TYW5kYm94UHJvZmlsZXMvKi5zYjsK
K0VYQ0xVREVEX01BQ09TX1BMVUdJTl9GSUxFX05BTUVTW3Nkaz1pcGhvbmUqXSA9IFNlY0l0ZW1T
aGltLmR5bGliIFdlYlByb2Nlc3NTaGltLmR5bGliICoucGRmIFJlc291cmNlcy9tYWMvKiBjb20u
YXBwbGUuV2ViS2l0Lk5ldHdvcmtQcm9jZXNzLnNiIGNvbS5hcHBsZS5XZWJLaXQuR1BVUHJvY2Vz
cy5zYiBjb20uYXBwbGUuV2ViS2l0LldlYkF1dGhuUHJvY2Vzcy5zYiBjb20uYXBwbGUuV2ViUHJv
Y2Vzcy5zYjsKIAogSU5TVEFMTEhEUlNfU0NSSVBUX1BIQVNFID0gWUVTOwogQVBQTFlfUlVMRVNf
SU5fQ09QWV9IRUFERVJTID0gJChXS19VU0VfTkVXX0JVSUxEX1NZU1RFTSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2
ZWRTb3VyY2VzLm1ha2UKaW5kZXggMTRmMmE4Y2MwNmNjNThlZDdkMjdiZWFmYjI3ZDkyNTkxZWRm
NTAwNS4uNWY1ZjQ3MzA5NjNkYjY5NTVlZTliNDA5MzEzZGNiMDQwZjNjOTY4OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQv
RGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMTQzLDcgKzE0Myw2IEBAIE1FU1NBR0VfUkVDRUlWRVJT
ID0gXAogCU5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9SVENEYXRhQ2hhbm5lbFJlbW90ZU1hbmFnZXJQ
cm94eSBcCiAJTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyIFwKIAlOZXR3
b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlciBcCi0JU2hhcmVkL1BsdWdp
bnMvTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIgXAogCVNoYXJlZC9BdXhpbGlhcnlQcm9jZXNzIFwK
IAlTaGFyZWQvQVBJL0NvY29hL1JlbW90ZU9iamVjdFJlZ2lzdHJ5IFwKIAlTaGFyZWQvQXBwbGVQ
YXkvV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkgXApAQCAtMTYwLDcgKzE1OSw2IEBAIE1FU1NB
R0VfUkVDRUlWRVJTID0gXAogCVVJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUlQcm94
eSBcCiAJVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5IFwKIAlV
SVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlclByb3h5
IFwKLQlVSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkgXAogCVVJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5IFwKIAlVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
IFwKIAlVSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyUHJveHkgXApAQCAtMjEwLDkgKzIwOCw2IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0g
XAogCVdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvciBcCiAJV2ViUHJvY2Vzcy9JbnNw
ZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUkgXAogCVdlYlByb2Nlc3MvTWVkaWFTZXNzaW9uL1Jl
bW90ZU1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yIFwKLQlXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyIFwKLQlXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJv
eHkgXAotCVdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbiBcCiAJV2Vi
UHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwgXAogCVdlYlByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24gXAogCVdlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRT
dHJlYW0gXApAQCAtMjQ4LDkgKzI0Myw2IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogCVdlYlBy
b2Nlc3MvV2ViUGFnZS9WaWV3VXBkYXRlRGlzcGF0Y2hlciBcCiAJV2ViUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9XZWJBdXRoblByb2Nlc3NDb25uZWN0aW9uIFwKIAlXZWJQcm9jZXNzL1hSL1Bs
YXRmb3JtWFJTeXN0ZW1Qcm94eSBcCi0JUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlv
biBcCi0JUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkgXAotCVBsdWdpblByb2Nl
c3MvUGx1Z2luUHJvY2VzcyBcCiAJR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
IFwKIAlHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIgXAogCUdQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBcCkBAIC0zMjUsNyArMzE3
LDYgQEAgZW5kaWYKIAogU0FOREJPWF9QUk9GSUxFUyA9IFwKIAljb20uYXBwbGUuV2ViUHJvY2Vz
cy5zYiBcCi0JY29tLmFwcGxlLldlYktpdC5wbHVnaW4tY29tbW9uLnNiIFwKIAljb20uYXBwbGUu
V2ViS2l0Lk5ldHdvcmtQcm9jZXNzLnNiIFwKIAljb20uYXBwbGUuV2ViS2l0LkdQVVByb2Nlc3Mu
c2IgXAogCWNvbS5hcHBsZS5XZWJLaXQuV2ViQXV0aG5Qcm9jZXNzLnNiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFz
c2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcAppbmRleCAyNjg1
NTIwZjgyMWQ1NjY5NTNjYjQ3NGQ3YzdhZWI4YjkzNTg4YWQxLi4zNTViYjg0ZmNiYTdkNmVhYmFh
OTc1MjAyMjc2YmU5YWIzZTZmZmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKQEAgLTMwLDggKzMwLDYgQEAKIAogI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgotI2luY2x1ZGUgIlBs
dWdpblByb2Nlc3NNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc1Byb3h5LmgiCiAj
aW5jbHVkZSAiUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJTdG9yYWdlQWNj
ZXNzU3RhdHVzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Ns
YXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3Bw
CmluZGV4IDQ5M2U0M2FlMGI2YmJlODg3NWI5OWM2NmE1ODJmYWU2YjU0NzYwY2QuLjIwMWQxYWZk
ZjczMmUyYmNmMGY1OGRhMzEwMDI0MDhiYjdhYWFhNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCkBAIC0zMSw4ICszMSw2IEBACiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Nl
c3Npb24uaCIKLSNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzTWFuYWdlci5oIgotI2luY2x1ZGUgIlBs
dWdpblByb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKICNp
bmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgi
CkBAIC0xNjQsMTIgKzE2Miw2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpy
ZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIG1fYWN0
aXZlUGx1Z2luVG9rZW5zLmNsZWFyKCk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBwbHVnaW4gOiBQ
bHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkucGx1Z2luUHJvY2Vzc2VzKCkpCi0gICAg
ICAgIG1fYWN0aXZlUGx1Z2luVG9rZW5zLmFkZChwbHVnaW4tPnBsdWdpblByb2Nlc3NUb2tlbigp
KTsKLSNlbmRpZgotCiAgICAgYXV0byBkb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURh
dGFGb3IgPSByZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZv
cigpOwogICAgIGlmIChkb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IuaXNF
bXB0eSgpKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC0zOTIsMTMgKzM4NCw2
IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzaG91bGRSZW1vdmVEYXRhUmVj
b3JkcygpIGNvbnN0CiAgICAgaWYgKG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGZv
ciAoY29uc3QgYXV0byYgcGx1Z2luIDogUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigp
LnBsdWdpblByb2Nlc3NlcygpKSB7Ci0gICAgICAgIGlmICghbV9hY3RpdmVQbHVnaW5Ub2tlbnMu
Y29udGFpbnMocGx1Z2luLT5wbHVnaW5Qcm9jZXNzVG9rZW4oKSkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYKLQogICAgIHJldHVybiAhbV9sYXN0VGltZURhdGFSZWNv
cmRzV2VyZVJlbW92ZWQgfHwgTW9ub3RvbmljVGltZTo6bm93KCkgPj0gKG1fbGFzdFRpbWVEYXRh
UmVjb3Jkc1dlcmVSZW1vdmVkICsgbV9wYXJhbWV0ZXJzLm1pbmltdW1UaW1lQmV0d2VlbkRhdGFS
ZWNvcmRzUmVtb3ZhbCkgfHwgcGFyYW1ldGVycygpLmlzUnVubmluZ1Rlc3Q7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAppbmRleCA5YTk4M2FkYzc3MjE4OTlj
YTI3ZDYyYjk2NmExNGVhMmMzYWY5MTQ1Li4xYTNiMDhiZjczZTE0ZmM3Y2UwYTY1N2RlNTgzZjlm
MjJkNGFhODIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNz
aWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCkBA
IC0yNzIsOSArMjcyLDYgQEAgcHJpdmF0ZToKICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xh
c3NpZmllckNvY29hIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI7CiAjZWxzZQog
ICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyIG1fcmVzb3VyY2VMb2FkU3RhdGlz
dGljc0NsYXNzaWZpZXI7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
LSAgICBIYXNoU2V0PHVpbnQ2NF90PiBtX2FjdGl2ZVBsdWdpblRva2VuczsKICNlbmRpZgogICAg
IFBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJzOwogICAgIFdhbGxUaW1lIG1fZW5kT2ZHcmFuZGZhdGhl
cmluZ1RpbWVzdGFtcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5jcHAKaW5kZXggNTM5OTU0NTVmNzVmM2M1YmY0YmY5NjIzOGY2M2YzZDcyMzc1ZjQxZi4u
ZGU3NjVkZTQ1MDcxZjQxZjNmYzRkNDY5NzA1MzgxNmUxODk5ZWJmYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKQEAgLTY5LDkgKzY5LDYgQEAg
Y29uc3QgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4mIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6bW9uaXRvcmVkRGF0YVQKICAgICAgICAgV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0
b3JhZ2UsCiAgICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6TWVkaWFLZXlzLAogICAgICAgICBXZWJz
aXRlRGF0YVR5cGU6Ok9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlLAotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBXZWJzaXRlRGF0YVR5cGU6OlBsdWdJbkRhdGEsCi0j
ZW5kaWYKICAgICAgICAgV2Vic2l0ZURhdGFUeXBlOjpTZWFyY2hGaWVsZFJlY2VudFNlYXJjaGVz
LAogICAgICAgICBXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlLAogI2lmIEVOQUJMRShT
RVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vRXh0cmFQ
cml2YXRlU3ltYm9sc0ZvclRBUEkuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vRXh0cmFQcml2
YXRlU3ltYm9sc0ZvclRBUEkuaAppbmRleCBmYjdhYzBiYzRjMWNjODkwM2JhOTI1NGMxNDIzMWQz
NjY5ZGQ0MjhmLi40NjIzMDMyZDM2MzYxMzQyYzNhNzBiYjI4OWNiMDMwZGZiMmNjZGZjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0V4dHJhUHJpdmF0ZVN5bWJvbHNGb3JUQVBJ
LmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9FeHRyYVByaXZhdGVTeW1ib2xzRm9yVEFQ
SS5oCkBAIC0zMSw3ICszMSw2IEBAIGV4dGVybiAiQyIgewogCiAvLyBGSVhNRTogUmVtb3ZlIHRo
ZXNlIGFmdGVyIDxyZGFyOi8vcHJvYmxlbS8zMDc3MjAzMz4gaXMgZml4ZWQuCiB2b2lkIE5ldHdv
cmtTZXJ2aWNlSW5pdGlhbGl6ZXIoKTsKLXZvaWQgUGx1Z2luU2VydmljZUluaXRpYWxpemVyKCk7
CiB2b2lkIFdlYkNvbnRlbnRTZXJ2aWNlSW5pdGlhbGl6ZXIoKTsKIHZvaWQgR1BVU2VydmljZUlu
aXRpYWxpemVyKCk7CiB2b2lkIFdlYkF1dGhuU2VydmljZUluaXRpYWxpemVyKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRlRXLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0
Zm9ybUZUVy5jbWFrZQppbmRleCBkYWJmMzIzZTM2N2RhYjI2NGNiMWFmODY0MTAzNDk1ZTRmNjlj
NDc1Li44NDcwYmJmYTI5OWE5NDJhODFkNTA1ZWFjMzBiNzRhY2Q3YTNhN2I5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRlRXLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm1GVFcuY21ha2UKQEAgLTcxLDEwICs3MSw2IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VS
Q0VTCiAKICAgICBXZWJQcm9jZXNzL01lZGlhQ2FjaGUvV2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdl
ci5jcHAKIAotICAgIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbk5v
bmUuY3BwCi0KLSAgICBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvd2luL1BsdWdpblByb3h5
V2luLmNwcAotCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4vV2ViUG9wdXBNZW51
V2luLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkU3VyZmFjZS5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IDA2NTQ5Yjg5NzA4YTQ0MTI5NzBkM2ExOWU4NDI1
ZTZjZjZhMWY0OTAuLjMzMjlhOGY1NTljMGNjZjU0Yzk1N2ZkMDMzMDg0MDI4MTdmZTYwZWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtMTgxLDExICsxODEsNiBAQCBzZXQoTmV0d29ya1By
b2Nlc3NfU09VUkNFUwogICAgICR7WFBDU2VydmljZV9TT1VSQ0VTfQogKQogCi1zZXQoUGx1Z2lu
UHJvY2Vzc19TT1VSQ0VTCi0gICAgUGx1Z2luUHJvY2Vzcy9FbnRyeVBvaW50L0NvY29hL1hQQ1Nl
cnZpY2UvUGx1Z2luU2VydmljZUVudHJ5UG9pbnQubW0KLSAgICAke1hQQ1NlcnZpY2VfU09VUkNF
U30KLSkKLQogc2V0KEdQVVByb2Nlc3NfU09VUkNFUwogICAgIEdQVVByb2Nlc3MvRW50cnlQb2lu
dC9Db2NvYS9YUENTZXJ2aWNlL0dQVVNlcnZpY2VFbnRyeVBvaW50Lm1tCiAgICAgJHtYUENTZXJ2
aWNlX1NPVVJDRVN9CkBAIC0xOTksMTMgKzE5NCwxMSBAQCBzZXQoV2ViQXV0aG5Qcm9jZXNzX1NP
VVJDRVMKICMgRklYTUU6IFRoZXNlIHNob3VsZCBub3QgaGF2ZSBEZXZlbG9wbWVudCBpbiBwcm9k
dWN0aW9uIGJ1aWxkcy4KIHNldChXZWJQcm9jZXNzX09VVFBVVF9OQU1FIGNvbS5hcHBsZS5XZWJL
aXQuV2ViQ29udGVudC5EZXZlbG9wbWVudCkKIHNldChOZXR3b3JrUHJvY2Vzc19PVVRQVVRfTkFN
RSBjb20uYXBwbGUuV2ViS2l0Lk5ldHdvcmtpbmcuRGV2ZWxvcG1lbnQpCi1zZXQoUGx1Z2luUHJv
Y2Vzc19PVVRQVVRfTkFNRSBjb20uYXBwbGUuV2ViS2l0LlBsdWdpbi42NC5EZXZlbG9wbWVudCkK
IHNldChHUFVQcm9jZXNzX09VVFBVVF9OQU1FIGNvbS5hcHBsZS5XZWJLaXQuR1BVLkRldmVsb3Bt
ZW50KQogc2V0KFdlYkF1dGhuUHJvY2Vzc19PVVRQVVRfTkFNRSBjb20uYXBwbGUuV2ViS2l0Lldl
YkF1dGhuLkRldmVsb3BtZW50KQogCiBzZXQoV2ViUHJvY2Vzc19JTkNMVURFX0RJUkVDVE9SSUVT
ICR7Q01BS0VfQklOQVJZX0RJUn0pCiBzZXQoTmV0d29ya1Byb2Nlc3NfSU5DTFVERV9ESVJFQ1RP
UklFUyAke0NNQUtFX0JJTkFSWV9ESVJ9KQotc2V0KFBsdWdpblByb2Nlc3NfSU5DTFVERV9ESVJF
Q1RPUklFUyAke0NNQUtFX0JJTkFSWV9ESVJ9KQogCiBhZGRfZGVmaW5pdGlvbnMoIi1pbmNsdWRl
IFdlYktpdDJQcmVmaXguaCIpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1X
aW4uY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IDAxNTY1ZDU1
MDY5N2IyNTM2N2JiMzY5NzFkNmZlNWVjMzNmNzEyZjAuLjFmODA3MzM0MDAxMzA4M2Y2NDgwZGU4
YTlhOWIxYTllYmYxMDBkMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4u
Y21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtODQsOSArODQs
NiBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwogCiAgICAgV2ViUHJvY2Vzcy9NZWRpYUNh
Y2hlL1dlYk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIuY3BwCiAKLSAgICBXZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5Ob25lLmNwcAotICAgIFdlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS93aW4vUGx1Z2luUHJveHlXaW4uY3BwCi0KICAgICBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L3dpbi9XZWJQb3B1cE1lbnVXaW4uY3BwCiAKICAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvQWNjZWxlcmF0ZWRTdXJmYWNlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbHVn
aW5Qcm9jZXNzL0VudHJ5UG9pbnQvQ29jb2EvWFBDU2VydmljZS9QbHVnaW5TZXJ2aWNlLkluZm8u
cGxpc3QgYi9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvRW50cnlQb2ludC9Db2NvYS9YUENT
ZXJ2aWNlL1BsdWdpblNlcnZpY2UuSW5mby5wbGlzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNjJiMDJhYzgzZjAxZmM1MGQxMmUzYTUzMmUwN2I1MGRlZWNlNDI3YS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsdWdp
blByb2Nlc3MvRW50cnlQb2ludC9Db2NvYS9YUENTZXJ2aWNlL1BsdWdpblNlcnZpY2UuSW5mby5w
bGlzdAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIg
ZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFRE
IFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0x
LjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0JPGtleT5DRkJ1bmRsZUdl
dEluZm9TdHJpbmc8L2tleT4KLQk8c3RyaW5nPiR7QlVORExFX1ZFUlNJT059LCBDb3B5cmlnaHQg
MjAwMy0yMDIxIEFwcGxlIEluYy48L3N0cmluZz4KLQk8a2V5PkNGQnVuZGxlRGV2ZWxvcG1lbnRS
ZWdpb248L2tleT4KLQk8c3RyaW5nPkVuZ2xpc2g8L3N0cmluZz4KLQk8a2V5PkNGQnVuZGxlRXhl
Y3V0YWJsZTwva2V5PgotCTxzdHJpbmc+JHtFWEVDVVRBQkxFX05BTUV9PC9zdHJpbmc+Ci0JPGtl
eT5DRkJ1bmRsZUlkZW50aWZpZXI8L2tleT4KLQk8c3RyaW5nPiR7UFJPRFVDVF9CVU5ETEVfSURF
TlRJRklFUn08L3N0cmluZz4KLQk8a2V5PkNGQnVuZGxlSW5mb0RpY3Rpb25hcnlWZXJzaW9uPC9r
ZXk+Ci0JPHN0cmluZz42LjA8L3N0cmluZz4KLQk8a2V5PkNGQnVuZGxlTmFtZTwva2V5PgotCTxz
dHJpbmc+JHtQUk9EVUNUX05BTUV9PC9zdHJpbmc+Ci0JPGtleT5DRkJ1bmRsZVBhY2thZ2VUeXBl
PC9rZXk+Ci0JPHN0cmluZz5YUEMhPC9zdHJpbmc+Ci0JPGtleT5DRkJ1bmRsZVNob3J0VmVyc2lv
blN0cmluZzwva2V5PgotCTxzdHJpbmc+JHtTSE9SVF9WRVJTSU9OX1NUUklOR308L3N0cmluZz4K
LQk8a2V5PkNGQnVuZGxlU2lnbmF0dXJlPC9rZXk+Ci0JPHN0cmluZz4/Pz8/PC9zdHJpbmc+Ci0J
PGtleT5DRkJ1bmRsZVZlcnNpb248L2tleT4KLQk8c3RyaW5nPiR7QlVORExFX1ZFUlNJT059PC9z
dHJpbmc+Ci0JPGtleT5MU0ZpbGVRdWFyYW50aW5lRW5hYmxlZDwva2V5PgotCTxmYWxzZS8+Ci0J
PGtleT5OU1ByaW5jaXBhbENsYXNzPC9rZXk+Ci0JPHN0cmluZz5OU0FwcGxpY2F0aW9uPC9zdHJp
bmc+Ci0JPGtleT5MU1VJRWxlbWVudDwva2V5PgotCTx0cnVlLz4KLQk8a2V5Pk5TU3VwcG9ydHNB
dXRvbWF0aWNHcmFwaGljc1N3aXRjaGluZzwva2V5PgotCTx0cnVlLz4KLQk8a2V5Pk5TU3VwcG9y
dHNBcHBOYXA8L2tleT4KLQk8dHJ1ZS8+Ci0JPGtleT5YUENTZXJ2aWNlPC9rZXk+Ci0JPGRpY3Q+
Ci0JCTxrZXk+U2VydmljZVR5cGU8L2tleT4KLQkJPHN0cmluZz5BcHBsaWNhdGlvbjwvc3RyaW5n
PgotCQk8a2V5PlJ1bkxvb3BUeXBlPC9rZXk+Ci0JCTxzdHJpbmc+X05TQXBwbGljYXRpb25NYWlu
PC9zdHJpbmc+Ci0JCTxrZXk+Sm9pbkV4aXN0aW5nU2Vzc2lvbjwva2V5PgotCQk8dHJ1ZS8+Ci0J
CTxrZXk+X011bHRpcGxlSW5zdGFuY2VzPC9rZXk+Ci0JCTx0cnVlLz4KLQkJPGtleT5fQWJhbmRv
bkNvYWxpdGlvbjwva2V5PgotCQk8dHJ1ZS8+Ci0JCTxrZXk+X0hpZ2hCaXRzQVNMUjwva2V5Pgot
CQk8dHJ1ZS8+Ci0JCTxrZXk+RW52aXJvbm1lbnRWYXJpYWJsZXM8L2tleT4KLQkJPGRpY3Q+Ci0J
CQk8a2V5Pk5TU3RyaW5nRGlzYWJsZVRhZ2dlZDwva2V5PgotCQkJPHN0cmluZz5ZRVM8L3N0cmlu
Zz4KLQkJPC9kaWN0PgotCTwvZGljdD4KLTwvZGljdD4KLTwvcGxpc3Q+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvRW50cnlQb2ludC9Db2NvYS9YUENTZXJ2aWNlL1Bs
dWdpblNlcnZpY2VFbnRyeVBvaW50Lm1tIGIvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL0Vu
dHJ5UG9pbnQvQ29jb2EvWFBDU2VydmljZS9QbHVnaW5TZXJ2aWNlRW50cnlQb2ludC5tbQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ3NGMzZTQ1NDBjYmE4ODc4MzljMWRjNzEyMmM4
OTRhYjE3MDc1OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvRW50cnlQb2ludC9Db2NvYS9YUENTZXJ2aWNl
L1BsdWdpblNlcnZpY2VFbnRyeVBvaW50Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotCi0jaW1wb3J0ICJFbnZpcm9ubWVu
dFV0aWxpdGllcy5oIgotI2ltcG9ydCAiUGx1Z2luUHJvY2Vzcy5oIgotI2ltcG9ydCAiV0tCYXNl
LmgiCi0jaW1wb3J0ICJYUENTZXJ2aWNlRW50cnlQb2ludC5oIgotI2ltcG9ydCA8d3RmL1J1bkxv
b3AuaD4KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotY2xhc3MgUGx1Z2luU2VydmljZUluaXRpYWxpemVyRGVsZWdhdGUgOiBwdWJsaWMg
WFBDU2VydmljZUluaXRpYWxpemVyRGVsZWdhdGUgewotcHVibGljOgotICAgIFBsdWdpblNlcnZp
Y2VJbml0aWFsaXplckRlbGVnYXRlKE9TT2JqZWN0UHRyPHhwY19jb25uZWN0aW9uX3Q+IGNvbm5l
Y3Rpb24sIHhwY19vYmplY3RfdCBpbml0aWFsaXplck1lc3NhZ2UpCi0gICAgICAgIDogWFBDU2Vy
dmljZUluaXRpYWxpemVyRGVsZWdhdGUoV1RGTW92ZShjb25uZWN0aW9uKSwgaW5pdGlhbGl6ZXJN
ZXNzYWdlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RXh0cmFJbml0aWFs
aXphdGlvbkRhdGEoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGV4dHJhSW5pdGlhbGl6YXRpb25E
YXRhKQotICAgIHsKLSAgICAgICAgeHBjX29iamVjdF90IGV4dHJhRGF0YUluaXRpYWxpemF0aW9u
RGF0YU9iamVjdCA9IHhwY19kaWN0aW9uYXJ5X2dldF92YWx1ZShtX2luaXRpYWxpemVyTWVzc2Fn
ZSwgImV4dHJhLWluaXRpYWxpemF0aW9uLWRhdGEiKTsKLQotICAgICAgICBTdHJpbmcgcGx1Z2lu
UGF0aCA9IHhwY19kaWN0aW9uYXJ5X2dldF9zdHJpbmcoZXh0cmFEYXRhSW5pdGlhbGl6YXRpb25E
YXRhT2JqZWN0LCAicGx1Z2luLXBhdGgiKTsKLSAgICAgICAgaWYgKHBsdWdpblBhdGguaXNFbXB0
eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBleHRyYUluaXRpYWxpemF0
aW9uRGF0YS5hZGQoInBsdWdpbi1wYXRoIiwgcGx1Z2luUGF0aCk7Ci0KLSAgICAgICAgU3RyaW5n
IGRpc2FibGVTYW5kYm94ID0geHBjX2RpY3Rpb25hcnlfZ2V0X3N0cmluZyhleHRyYURhdGFJbml0
aWFsaXphdGlvbkRhdGFPYmplY3QsICJkaXNhYmxlLXNhbmRib3giKTsKLSAgICAgICAgaWYgKCFk
aXNhYmxlU2FuZGJveC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9u
RGF0YS5hZGQoImRpc2FibGUtc2FuZGJveCIsIGRpc2FibGVTYW5kYm94KTsKLQotICAgICAgICBT
dHJpbmcgZXhwZXJpbWVudGFsU2FuZGJveFBsdWdJbiA9IHhwY19kaWN0aW9uYXJ5X2dldF9zdHJp
bmcoZXh0cmFEYXRhSW5pdGlhbGl6YXRpb25EYXRhT2JqZWN0LCAiZXhwZXJpbWVudGFsLXNhbmRi
b3gtcGx1Z2luIik7Ci0gICAgICAgIGlmICghZXhwZXJpbWVudGFsU2FuZGJveFBsdWdJbi5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uRGF0YS5hZGQoImV4cGVyaW1l
bnRhbC1zYW5kYm94LXBsdWdpbiJfcywgZXhwZXJpbWVudGFsU2FuZGJveFBsdWdJbik7Ci0KLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLQotZXh0ZXJuICJDIiBXS19FWFBPUlQgdm9pZCBQTFVHSU5fU0VSVklDRV9JTklU
SUFMSVpFUih4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24sIHhwY19vYmplY3RfdCBpbml0aWFs
aXplck1lc3NhZ2UsIHhwY19vYmplY3RfdCBwcmlvcml0eUJvb3N0TWVzc2FnZSk7Ci0KLXZvaWQg
UExVR0lOX1NFUlZJQ0VfSU5JVElBTElaRVIoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uLCB4
cGNfb2JqZWN0X3QgaW5pdGlhbGl6ZXJNZXNzYWdlLCB4cGNfb2JqZWN0X3QgcHJpb3JpdHlCb29z
dE1lc3NhZ2UpCi17Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgV1RGOjpp
bml0aWFsaXplTWFpblRocmVhZCgpOwotCi0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciB0
ZWFyZG93biBmcm9tIFBsdWdpblByb2Nlc3NNYWluLm1tCi0KLSAgICAvLyBSZW1vdmUgdGhlIFBs
dWdpblByb2Nlc3Mgc2hpbSBmcm9tIHRoZSBEWUxEX0lOU0VSVF9MSUJSQVJJRVMgZW52aXJvbm1l
bnQgdmFyaWFibGUgc28gYW55IHByb2Nlc3NlcwotICAgIC8vIHNwYXduZWQgYnkgdGhlIFBsdWdp
blByb2Nlc3MgZG9uJ3QgdHJ5IHRvIGluc2VydCB0aGUgc2hpbSBhbmQgY3Jhc2guCi0gICAgRW52
aXJvbm1lbnRVdGlsaXRpZXM6OnJlbW92ZVZhbHVlc0VuZGluZ1dpdGgoIkRZTERfSU5TRVJUX0xJ
QlJBUklFUyIsICIvUGx1Z2luUHJvY2Vzc1NoaW0uZHlsaWIiKTsKLSAgICBYUENTZXJ2aWNlSW5p
dGlhbGl6ZXI8UGx1Z2luUHJvY2VzcywgUGx1Z2luU2VydmljZUluaXRpYWxpemVyRGVsZWdhdGU+
KGNvbm5lY3Rpb24sIGluaXRpYWxpemVyTWVzc2FnZSwgcHJpb3JpdHlCb29zdE1lc3NhZ2UpOwot
I2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JkMDRkOTliN2MyNzE2NzFjODc1MmIxOGE5MmU0MjE1
ODU2YzllMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDY3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlBsdWdpbkNvbnRyb2xsZXJQcm94eS5oIgotCi0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJOUE9iamVjdFByb3h5LmgiCi0jaW5jbHVk
ZSAiTlBSZW1vdGVPYmplY3RNYXAuaCIKLSNpbmNsdWRlICJOUFJ1bnRpbWVVdGlsaXRpZXMuaCIK
LSNpbmNsdWRlICJOUFZhcmlhbnREYXRhLmgiCi0jaW5jbHVkZSAiTmV0c2NhcGVQbHVnaW4uaCIK
LSNpbmNsdWRlICJQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMuaCIKLSNpbmNsdWRlICJQbHVnaW5Q
cm9jZXNzLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIlNo
YXJlYWJsZUJpdG1hcC5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2lu
Y2x1ZGUgIldlYlByb2Nlc3NDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc0Nvbm5l
Y3Rpb25NZXNzYWdlcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9IVFRQSGVhZGVyTWFwLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JZGVu
dGlmaWVyUmVwLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1
ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiTGF5ZXJIb3N0aW5nQ29udGV4dC5oIgot
I2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0K
LVBsdWdpbkNvbnRyb2xsZXJQcm94eTo6UGx1Z2luQ29udHJvbGxlclByb3h5KFdlYlByb2Nlc3ND
b25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmIGNy
ZWF0aW9uUGFyYW1ldGVycykKLSAgICA6IG1fY29ubmVjdGlvbihjb25uZWN0aW9uKQotICAgICwg
bV9wbHVnaW5JbnN0YW5jZUlEKGNyZWF0aW9uUGFyYW1ldGVycy5wbHVnaW5JbnN0YW5jZUlEKQot
ICAgICwgbV91c2VyQWdlbnQoY3JlYXRpb25QYXJhbWV0ZXJzLnVzZXJBZ2VudCkKLSAgICAsIG1f
aXNQcml2YXRlQnJvd3NpbmdFbmFibGVkKGNyZWF0aW9uUGFyYW1ldGVycy5pc1ByaXZhdGVCcm93
c2luZ0VuYWJsZWQpCi0gICAgLCBtX2lzTXV0ZWQoY3JlYXRpb25QYXJhbWV0ZXJzLmlzTXV0ZWQp
Ci0gICAgLCBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoY3JlYXRpb25QYXJhbWV0
ZXJzLmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQpCi0gICAgLCBtX2lzSW5pdGlhbGl6
aW5nKGZhbHNlKQotICAgICwgbV9pc1Zpc2libGUoZmFsc2UpCi0gICAgLCBtX2lzV2luZG93Vmlz
aWJsZShmYWxzZSkKLSAgICAsIG1fcGFpbnRUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZQ
bHVnaW5Db250cm9sbGVyUHJveHk6OnBhaW50KQotICAgICwgbV9wbHVnaW5EZXN0cnVjdGlvblBy
b3RlY3RDb3VudCgwKQotICAgICwgbV9wbHVnaW5EZXN0cm95VGltZXIoUnVuTG9vcDo6bWFpbigp
LCB0aGlzLCAmUGx1Z2luQ29udHJvbGxlclByb3h5OjpkZXN0cm95KQotICAgICwgbV93YWl0aW5n
Rm9yRGlkVXBkYXRlKGZhbHNlKQotICAgICwgbV9wbHVnaW5DYW5jZWxlZE1hbnVhbFN0cmVhbUxv
YWQoZmFsc2UpCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgLCBtX2lzQ29tcGxleFRleHRJbnB1
dEVuYWJsZWQoZmFsc2UpCi0jZW5kaWYKLSAgICAsIG1fY29udGVudHNTY2FsZUZhY3RvcihjcmVh
dGlvblBhcmFtZXRlcnMuY29udGVudHNTY2FsZUZhY3RvcikKLSAgICAsIG1fd2luZG93TlBPYmpl
Y3QoMCkKLSAgICAsIG1fcGx1Z2luRWxlbWVudE5QT2JqZWN0KDApCi0gICAgLCBtX3Zpc2libGl0
eUFjdGl2aXR5KCJQbHVnaW4gaXMgdmlzaWJsZS4iKQotewotfQotCi1QbHVnaW5Db250cm9sbGVy
UHJveHk6On5QbHVnaW5Db250cm9sbGVyUHJveHkoKQotewotICAgIEFTU0VSVCghbV9wbHVnaW4p
OwotCi0gICAgaWYgKG1fd2luZG93TlBPYmplY3QpCi0gICAgICAgIHJlbGVhc2VOUE9iamVjdCht
X3dpbmRvd05QT2JqZWN0KTsKLQotICAgIGlmIChtX3BsdWdpbkVsZW1lbnROUE9iamVjdCkKLSAg
ICAgICAgcmVsZWFzZU5QT2JqZWN0KG1fcGx1Z2luRWxlbWVudE5QT2JqZWN0KTsKLX0KLQotdm9p
ZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnNldEluaXRpYWxpemF0aW9uUmVwbHkoTWVzc2FnZXM6
OldlYlByb2Nlc3NDb25uZWN0aW9uOjpDcmVhdGVQbHVnaW46OkRlbGF5ZWRSZXBseSYmIHJlcGx5
KQotewotICAgIEFTU0VSVCghbV9pbml0aWFsaXphdGlvblJlcGx5KTsKLSAgICBtX2luaXRpYWxp
emF0aW9uUmVwbHkgPSBXVEZNb3ZlKHJlcGx5KTsKLX0KLQotTWVzc2FnZXM6OldlYlByb2Nlc3ND
b25uZWN0aW9uOjpDcmVhdGVQbHVnaW46OkRlbGF5ZWRSZXBseSBQbHVnaW5Db250cm9sbGVyUHJv
eHk6OnRha2VJbml0aWFsaXphdGlvblJlcGx5KCkKLXsKLSAgICByZXR1cm4gc3RkOjpleGNoYW5n
ZShtX2luaXRpYWxpemF0aW9uUmVwbHksIG51bGxwdHIpOwotfQotCi1ib29sIFBsdWdpbkNvbnRy
b2xsZXJQcm94eTo6aW5pdGlhbGl6ZShjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmIGNy
ZWF0aW9uUGFyYW1ldGVycykKLXsKLSAgICBBU1NFUlQoIW1fcGx1Z2luKTsKLQotICAgIEFTU0VS
VCghbV9pc0luaXRpYWxpemluZyk7Ci0gICAgbV9pc0luaXRpYWxpemluZyA9IHRydWU7IC8vIENh
bm5vdCB1c2UgU2V0Rm9yU2NvcGUgaGVyZSwgYmVjYXVzZSB0aGlzIG9iamVjdCBjYW4gYmUgZGVs
ZXRlZCBiZWZvcmUgdGhlIGZ1bmN0aW9uIHJldHVybnMuCi0KLSAgICBtX3BsdWdpbiA9IE5ldHNj
YXBlUGx1Z2luOjpjcmVhdGUoUGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0c2NhcGVQbHVn
aW5Nb2R1bGUoKSk7Ci0gICAgaWYgKCFtX3BsdWdpbikgewotICAgICAgICAvLyBUaGlzIHdpbGwg
ZGVsZXRlIHRoZSBwbHVnLWluIGNvbnRyb2xsZXIgcHJveHkgb2JqZWN0LgotICAgICAgICBtX2Nv
bm5lY3Rpb24tPnJlbW92ZVBsdWdpbkNvbnRyb2xsZXJQcm94eSh0aGlzLCAwKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChjcmVhdGlvblBhcmFtZXRlcnMud2luZG93
TlBPYmplY3RJRCkKLSAgICAgICAgbV93aW5kb3dOUE9iamVjdCA9IG1fY29ubmVjdGlvbi0+bnBS
ZW1vdGVPYmplY3RNYXAoKS0+Y3JlYXRlTlBPYmplY3RQcm94eShjcmVhdGlvblBhcmFtZXRlcnMu
d2luZG93TlBPYmplY3RJRCwgbV9wbHVnaW4uZ2V0KCkpOwotCi0gICAgYm9vbCByZXR1cm5WYWx1
ZSA9IG1fcGx1Z2luLT5pbml0aWFsaXplKCp0aGlzLCBjcmVhdGlvblBhcmFtZXRlcnMucGFyYW1l
dGVycyk7Ci0KLSAgICBpZiAoIXJldHVyblZhbHVlKSB7Ci0gICAgICAgIC8vIEdldCB0aGUgcGx1
Zy1pbiBzbyB3ZSBjYW4gcGFzcyBpdCB0byByZW1vdmVQbHVnaW5Db250cm9sbGVyUHJveHkuIFRo
ZSBwb2ludGVyIGlzIG9ubHkKLSAgICAgICAgLy8gdXNlZCBhcyBhbiBpZGVudGlmaWVyIHNvIGl0
J3MgT0sgdG8ganVzdCBnZXQgYSB3ZWFrIHJlZmVyZW5jZS4KLSAgICAgICAgUGx1Z2luKiBwbHVn
aW4gPSBtX3BsdWdpbi5nZXQoKTsKLSAgICAgICAgCi0gICAgICAgIG1fcGx1Z2luID0gbnVsbHB0
cjsKLQotICAgICAgICAvLyBUaGlzIHdpbGwgZGVsZXRlIHRoZSBwbHVnLWluIGNvbnRyb2xsZXIg
cHJveHkgb2JqZWN0LgotICAgICAgICBtX2Nvbm5lY3Rpb24tPnJlbW92ZVBsdWdpbkNvbnRyb2xs
ZXJQcm94eSh0aGlzLCBwbHVnaW4pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcGxhdGZvcm1Jbml0aWFsaXplKGNyZWF0aW9uUGFyYW1ldGVycyk7Ci0KLSAgICBtX2lzSW5p
dGlhbGl6aW5nID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUGx1Z2luQ29u
dHJvbGxlclByb3h5OjpkZXN0cm95KCkKLXsKLSAgICBBU1NFUlQobV9wbHVnaW4pOwotCi0gICAg
Ly8gRklYTUU6IENvbnNpZGVyIHJlbW92aW5nIG1fcGx1Z2luRGVzdHJ1Y3Rpb25Qcm90ZWN0Q291
bnQgYW5kIGFsd2F5cyB1c2UgaW5TZW5kU3luYyBoZXJlLgotICAgIGlmIChtX3BsdWdpbkRlc3Ry
dWN0aW9uUHJvdGVjdENvdW50IHx8IG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5pblNlbmRT
eW5jKCkpIHsKLSAgICAgICAgLy8gV2UgaGF2ZSBwbHVnLWluIGNvZGUgb24gdGhlIHN0YWNrIHNv
IHdlIGNhbid0IGRlc3Ryb3kgaXQgcmlnaHQgbm93LgotICAgICAgICAvLyBEZXN0cm95IGl0IGxh
dGVyLgotICAgICAgICBtX3BsdWdpbkRlc3Ryb3lUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEdldCB0aGUgcGx1Zy1pbiBzbyB3ZSBjYW4g
cGFzcyBpdCB0byByZW1vdmVQbHVnaW5Db250cm9sbGVyUHJveHkuIFRoZSBwb2ludGVyIGlzIG9u
bHkKLSAgICAvLyB1c2VkIGFzIGFuIGlkZW50aWZpZXIgc28gaXQncyBPSyB0byBqdXN0IGdldCBh
IHdlYWsgcmVmZXJlbmNlLgotICAgIFBsdWdpbiogcGx1Z2luID0gbV9wbHVnaW4uZ2V0KCk7Ci0K
LSAgICBtX3BsdWdpbi0+ZGVzdHJveVBsdWdpbigpOwotICAgIG1fcGx1Z2luID0gbnVsbHB0cjsK
LQotICAgIHBsYXRmb3JtRGVzdHJveSgpOwotCi0gICAgLy8gVGhpcyB3aWxsIGRlbGV0ZSB0aGUg
cGx1Zy1pbiBjb250cm9sbGVyIHByb3h5IG9iamVjdC4KLSAgICBtX2Nvbm5lY3Rpb24tPnJlbW92
ZVBsdWdpbkNvbnRyb2xsZXJQcm94eSh0aGlzLCBwbHVnaW4pOwotfQotCi1ib29sIFBsdWdpbkNv
bnRyb2xsZXJQcm94eTo6d2FudHNXaGVlbEV2ZW50cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
cGx1Z2luLT53YW50c1doZWVsRXZlbnRzKCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclBy
b3h5OjpwYWludCgpCi17Ci0gICAgQVNTRVJUKCFtX2RpcnR5UmVjdC5pc0VtcHR5KCkpOwotICAg
IG1fcGFpbnRUaW1lci5zdG9wKCk7Ci0KLSAgICBpZiAoIW1fYmFja2luZ1N0b3JlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IG1fZGlydHlSZWN0OwotICAgIG1f
ZGlydHlSZWN0ID0gSW50UmVjdCgpOwotCi0gICAgQVNTRVJUKG1fcGx1Z2luKTsKLQotICAgIC8v
IENyZWF0ZSBhIGdyYXBoaWNzIGNvbnRleHQuCi0gICAgYXV0byBncmFwaGljc0NvbnRleHQgPSBt
X2JhY2tpbmdTdG9yZS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgaWYgKCFncmFwaGlj
c0NvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgcmVhbGx5IGNhbGwgYXBwbHlEZXZpY2VTY2FsZUZhY3RvciBpbnN0
ZWFkIG9mIHNjYWxlLCBidXQgdGhhdCBlbmRzIHVwIGNhbGxpbmcgaW50byBXS1NJCi0gICAgLy8g
d2hpY2ggd2UgY3VycmVudGx5IGRvbid0IGhhdmUgaW5pdGlhdGVkIGluIHRoZSBwbHVnLWluIHBy
b2Nlc3MuCi0gICAgZ3JhcGhpY3NDb250ZXh0LT5zY2FsZShtX2NvbnRlbnRzU2NhbGVGYWN0b3Ip
OwotI2VuZGlmCi0KLSAgICBpZiAobV9wbHVnaW4tPmlzVHJhbnNwYXJlbnQoKSkKLSAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LT5jbGVhclJlY3QoZGlydHlSZWN0KTsKLQotICAgIG1fcGx1Z2luLT5w
YWludCgqZ3JhcGhpY3NDb250ZXh0LCBkaXJ0eVJlY3QpOwotCi0gICAgbV9jb25uZWN0aW9uLT5j
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpblByb3h5OjpVcGRhdGUoZGlydHlSZWN0
KSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6
OnN0YXJ0UGFpbnRUaW1lcigpCi17Ci0gICAgLy8gQ2hlY2sgaWYgd2Ugc2hvdWxkIHN0YXJ0IHRo
ZSB0aW1lci4KLSAgICAKLSAgICBpZiAobV9kaXJ0eVJlY3QuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogQ2hlY2sgY2xpcCByZWN0LgotICAgIAotICAgIGlmICht
X3BhaW50VGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fd2Fp
dGluZ0ZvckRpZFVwZGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU3RhcnQgdGhlIHRp
bWVyLgotICAgIG1fcGFpbnRUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLQotICAgIG1fd2FpdGlu
Z0ZvckRpZFVwZGF0ZSA9IHRydWU7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5Ojpp
bnZhbGlkYXRlKGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgSW50UmVjdCBkaXJ0eVJlY3Qg
PSByZWN0OwotCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGRpcnR5IHJlY3QgaXMgbm90IGdy
ZWF0ZXIgdGhhbiB0aGUgcGx1Zy1pbiBpdHNlbGYuCi0gICAgZGlydHlSZWN0LmludGVyc2VjdChJ
bnRSZWN0KEludFBvaW50KCksIG1fcGx1Z2luU2l6ZSkpOwotICAgIG1fZGlydHlSZWN0LnVuaXRl
KGRpcnR5UmVjdCk7Ci0KLSAgICBzdGFydFBhaW50VGltZXIoKTsKLX0KLQotU3RyaW5nIFBsdWdp
bkNvbnRyb2xsZXJQcm94eTo6dXNlckFnZW50KCkKLXsKLSAgICByZXR1cm4gbV91c2VyQWdlbnQ7
Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5Ojpsb2FkVVJMKHVpbnQ2NF90IHJlcXVl
c3RJRCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHRhcmdldCwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVyRmllbGRzLCBjb25z
dCBWZWN0b3I8dWludDhfdD4mIGh0dHBCb2R5LCBib29sIGFsbG93UG9wdXBzKQotewotICAgIG1f
Y29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Qcm94eTo6TG9h
ZFVSTChyZXF1ZXN0SUQsIG1ldGhvZCwgdXJsU3RyaW5nLCB0YXJnZXQsIGhlYWRlckZpZWxkcywg
aHR0cEJvZHksIGFsbG93UG9wdXBzKSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLX0KLQotdm9pZCBQ
bHVnaW5Db250cm9sbGVyUHJveHk6OmNvbnRpbnVlU3RyZWFtTG9hZCh1aW50NjRfdCBzdHJlYW1J
RCkKLXsKLSAgICBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1
Z2luUHJveHk6OkNvbnRpbnVlU3RyZWFtTG9hZChzdHJlYW1JRCksIG1fcGx1Z2luSW5zdGFuY2VJ
RCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpjYW5jZWxTdHJlYW1Mb2FkKHVp
bnQ2NF90IHN0cmVhbUlEKQotewotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpQbHVnaW5Qcm94eTo6Q2FuY2VsU3RyZWFtTG9hZChzdHJlYW1JRCksIG1fcGx1
Z2luSW5zdGFuY2VJRCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpjYW5jZWxN
YW51YWxTdHJlYW1Mb2FkKCkKLXsKLSAgICBtX3BsdWdpbkNhbmNlbGVkTWFudWFsU3RyZWFtTG9h
ZCA9IHRydWU7Ci0KLSAgICBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6UGx1Z2luUHJveHk6OkNhbmNlbE1hbnVhbFN0cmVhbUxvYWQoKSwgbV9wbHVnaW5JbnN0YW5j
ZUlEKTsKLX0KLQotTlBPYmplY3QqIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6d2luZG93U2NyaXB0
TlBPYmplY3QoKQotewotICAgIGlmICghbV93aW5kb3dOUE9iamVjdCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICByZXRhaW5OUE9iamVjdChtX3dpbmRvd05QT2JqZWN0KTsKLSAgICByZXR1cm4g
bV93aW5kb3dOUE9iamVjdDsKLX0KLQotTlBPYmplY3QqIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6
cGx1Z2luRWxlbWVudE5QT2JqZWN0KCkKLXsKLSAgICBpZiAoIW1fcGx1Z2luRWxlbWVudE5QT2Jq
ZWN0KSB7Ci0gICAgICAgIHVpbnQ2NF90IHBsdWdpbkVsZW1lbnROUE9iamVjdElEID0gMDsKLQot
ICAgICAgICBpZiAoIW1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdl
czo6UGx1Z2luUHJveHk6OkdldFBsdWdpbkVsZW1lbnROUE9iamVjdCgpLCBNZXNzYWdlczo6UGx1
Z2luUHJveHk6OkdldFBsdWdpbkVsZW1lbnROUE9iamVjdDo6UmVwbHkocGx1Z2luRWxlbWVudE5Q
T2JqZWN0SUQpLCBtX3BsdWdpbkluc3RhbmNlSUQpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICAgICAgaWYgKCFwbHVnaW5FbGVtZW50TlBPYmplY3RJRCkKLSAgICAgICAgICAgIHJldHVy
biAwOwotCi0gICAgICAgIG1fcGx1Z2luRWxlbWVudE5QT2JqZWN0ID0gbV9jb25uZWN0aW9uLT5u
cFJlbW90ZU9iamVjdE1hcCgpLT5jcmVhdGVOUE9iamVjdFByb3h5KHBsdWdpbkVsZW1lbnROUE9i
amVjdElELCBtX3BsdWdpbi5nZXQoKSk7Ci0gICAgICAgIEFTU0VSVChtX3BsdWdpbkVsZW1lbnRO
UE9iamVjdCk7Ci0gICAgfQotCi0gICAgcmV0YWluTlBPYmplY3QobV9wbHVnaW5FbGVtZW50TlBP
YmplY3QpOwotICAgIHJldHVybiBtX3BsdWdpbkVsZW1lbnROUE9iamVjdDsKLX0KLQotYm9vbCBQ
bHVnaW5Db250cm9sbGVyUHJveHk6OmV2YWx1YXRlKE5QT2JqZWN0KiBucE9iamVjdCwgY29uc3Qg
U3RyaW5nJiBzY3JpcHRTdHJpbmcsIE5QVmFyaWFudCogcmVzdWx0LCBib29sIGFsbG93UG9wdXBz
KQotewotICAgIFBsdWdpbkRlc3RydWN0aW9uUHJvdGVjdG9yIHByb3RlY3Rvcih0aGlzKTsKLQot
ICAgIE5QVmFyaWFudCBucE9iamVjdEFzTlBWYXJpYW50OwotICAgIE9CSkVDVF9UT19OUFZBUklB
TlQobnBPYmplY3QsIG5wT2JqZWN0QXNOUFZhcmlhbnQpOwotCi0gICAgLy8gU2VuZCB0aGUgTlBP
YmplY3Qgb3ZlciBhcyBhbiBOUFZhcmlhbnREYXRhLgotICAgIE5QVmFyaWFudERhdGEgbnBPYmpl
Y3RBc05QVmFyaWFudERhdGEgPSBtX2Nvbm5lY3Rpb24tPm5wUmVtb3RlT2JqZWN0TWFwKCktPm5w
VmFyaWFudFRvTlBWYXJpYW50RGF0YShucE9iamVjdEFzTlBWYXJpYW50LCBtX3BsdWdpbi5nZXQo
KSk7Ci0KLSAgICBib29sIHJldHVyblZhbHVlID0gZmFsc2U7Ci0gICAgTlBWYXJpYW50RGF0YSBy
ZXN1bHREYXRhOwotCi0gICAgaWYgKCFtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoTWVzc2FnZXM6OlBsdWdpblByb3h5OjpFdmFsdWF0ZShucE9iamVjdEFzTlBWYXJpYW50RGF0
YSwgc2NyaXB0U3RyaW5nLCBhbGxvd1BvcHVwcyksIE1lc3NhZ2VzOjpQbHVnaW5Qcm94eTo6RXZh
bHVhdGU6OlJlcGx5KHJldHVyblZhbHVlLCByZXN1bHREYXRhKSwgbV9wbHVnaW5JbnN0YW5jZUlE
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFyZXR1cm5WYWx1ZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgKnJlc3VsdCA9IG1fY29ubmVjdGlvbi0+bnBSZW1vdGVP
YmplY3RNYXAoKS0+bnBWYXJpYW50RGF0YVRvTlBWYXJpYW50KHJlc3VsdERhdGEsIG1fcGx1Z2lu
LmdldCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJv
eHk6OnNldFBsdWdpbklzUGxheWluZ0F1ZGlvKGJvb2wgcGx1Z2luSXNQbGF5aW5nQXVkaW8pCi17
Ci0gICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpblBy
b3h5OjpTZXRQbHVnaW5Jc1BsYXlpbmdBdWRpbyhwbHVnaW5Jc1BsYXlpbmdBdWRpbyksIG1fcGx1
Z2luSW5zdGFuY2VJRCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpzZXRTdGF0
dXNiYXJUZXh0KGNvbnN0IFN0cmluZyYgc3RhdHVzYmFyVGV4dCkKLXsKLSAgICBtX2Nvbm5lY3Rp
b24tPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1Z2luUHJveHk6OlNldFN0YXR1c2Jh
clRleHQoc3RhdHVzYmFyVGV4dCksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0KLWJvb2wgUGx1
Z2luQ29udHJvbGxlclByb3h5Ojppc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCkKLXsK
LSAgICByZXR1cm4gbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkOwotfQotCi12b2lk
IFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6cGx1Z2luUHJvY2Vzc0NyYXNoZWQoKQotewotICAgIC8v
IFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBmcm9tIGhlcmUuCi0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpkaWRJbml0aWFsaXpl
UGx1Z2luKCkKLXsKLSAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiB0aGUgcGx1
Z2luIGluIHRoZSB3ZWIgcHJvY2Vzcy4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQot
dm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OmRpZEZhaWxUb0luaXRpYWxpemVQbHVnaW4oKQot
ewotICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIHRoZSBwbHVnaW4gaW4gdGhl
IHdlYiBwcm9jZXNzLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1mbG9hdCBQbHVn
aW5Db250cm9sbGVyUHJveHk6OmNvbnRlbnRzU2NhbGVGYWN0b3IoKQotewotICAgIHJldHVybiBt
X2NvbnRlbnRzU2NhbGVGYWN0b3I7Ci19Ci0KLVN0cmluZyBQbHVnaW5Db250cm9sbGVyUHJveHk6
OnByb3hpZXNGb3JVUkwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCi17Ci0gICAgU3RyaW5nIHBy
b3h5U3RyaW5nOwotCi0gICAgaWYgKCFtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoTWVzc2FnZXM6OlBsdWdpblByb3h5OjpQcm94aWVzRm9yVVJMKHVybFN0cmluZyksIE1lc3Nh
Z2VzOjpQbHVnaW5Qcm94eTo6UHJveGllc0ZvclVSTDo6UmVwbHkocHJveHlTdHJpbmcpLCBtX3Bs
dWdpbkluc3RhbmNlSUQpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4g
cHJveHlTdHJpbmc7Ci19Ci0KLVN0cmluZyBQbHVnaW5Db250cm9sbGVyUHJveHk6OmNvb2tpZXNG
b3JVUkwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCi17Ci0gICAgU3RyaW5nIGNvb2tpZVN0cmlu
ZzsKLQotICAgIGlmICghbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpQbHVnaW5Qcm94eTo6Q29va2llc0ZvclVSTCh1cmxTdHJpbmcpLCBNZXNzYWdlczo6UGx1
Z2luUHJveHk6OkNvb2tpZXNGb3JVUkw6OlJlcGx5KGNvb2tpZVN0cmluZyksIG1fcGx1Z2luSW5z
dGFuY2VJRCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIHJldHVybiBjb29raWVT
dHJpbmc7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpzZXRDb29raWVzRm9yVVJM
KGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cmluZykKLXsK
LSAgICBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1Z2luUHJv
eHk6OlNldENvb2tpZXNGb3JVUkwodXJsU3RyaW5nLCBjb29raWVTdHJpbmcpLCBtX3BsdWdpbklu
c3RhbmNlSUQpOwotfQotCi1ib29sIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6aXNQcml2YXRlQnJv
d3NpbmdFbmFibGVkKCkKLXsKLSAgICByZXR1cm4gbV9pc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQ7
Ci19Ci0KLWJvb2wgUGx1Z2luQ29udHJvbGxlclByb3h5OjpnZXRBdXRoZW50aWNhdGlvbkluZm8o
Y29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UsIFN0cmluZyYgdXNlcm5hbWUs
IFN0cmluZyYgcGFzc3dvcmQpCi17Ci0gICAgYm9vbCByZXR1cm5WYWx1ZTsKLSAgICBpZiAoIW1f
Y29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6UGx1Z2luUHJveHk6
OkdldEF1dGhlbnRpY2F0aW9uSW5mbyhwcm90ZWN0aW9uU3BhY2UpLCBNZXNzYWdlczo6UGx1Z2lu
UHJveHk6OkdldEF1dGhlbnRpY2F0aW9uSW5mbzo6UmVwbHkocmV0dXJuVmFsdWUsIHVzZXJuYW1l
LCBwYXNzd29yZCksIG1fcGx1Z2luSW5zdGFuY2VJRCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJv
eHk6OnByb3RlY3RQbHVnaW5Gcm9tRGVzdHJ1Y3Rpb24oKQotewotICAgIG1fcGx1Z2luRGVzdHJ1
Y3Rpb25Qcm90ZWN0Q291bnQrKzsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnVu
cHJvdGVjdFBsdWdpbkZyb21EZXN0cnVjdGlvbigpCi17Ci0gICAgQVNTRVJUKG1fcGx1Z2luRGVz
dHJ1Y3Rpb25Qcm90ZWN0Q291bnQpOwotCi0gICAgbV9wbHVnaW5EZXN0cnVjdGlvblByb3RlY3RD
b3VudC0tOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6ZnJhbWVEaWRGaW5pc2hM
b2FkaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCkKLXsKLSAgICBtX3BsdWdpbi0+ZnJhbWVEaWRGaW5p
c2hMb2FkaW5nKHJlcXVlc3RJRCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5Ojpm
cmFtZURpZEZhaWwodWludDY0X3QgcmVxdWVzdElELCBib29sIHdhc0NhbmNlbGxlZCkKLXsKLSAg
ICBtX3BsdWdpbi0+ZnJhbWVEaWRGYWlsKHJlcXVlc3RJRCwgd2FzQ2FuY2VsbGVkKTsKLX0KLQot
dm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6Omdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IEludFNp
emUmIHBsdWdpblNpemUsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0sIGZsb2F0IGNvbnRlbnRzU2NhbGVGYWN0
b3IsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBiYWNraW5nU3RvcmVIYW5kbGUpCi17
Ci0gICAgQVNTRVJUKG1fcGx1Z2luKTsKLQotICAgIG1fcGx1Z2luU2l6ZSA9IHBsdWdpblNpemU7
Ci0KLSAgICBpZiAoY29udGVudHNTY2FsZUZhY3RvciAhPSBtX2NvbnRlbnRzU2NhbGVGYWN0b3Ip
IHsKLSAgICAgICAgbV9jb250ZW50c1NjYWxlRmFjdG9yID0gY29udGVudHNTY2FsZUZhY3RvcjsK
LSAgICAgICAgbV9wbHVnaW4tPmNvbnRlbnRzU2NhbGVGYWN0b3JDaGFuZ2VkKG1fY29udGVudHNT
Y2FsZUZhY3Rvcik7Ci0gICAgfQotCi0gICAgcGxhdGZvcm1HZW9tZXRyeURpZENoYW5nZSgpOwot
Ci0gICAgaWYgKCFiYWNraW5nU3RvcmVIYW5kbGUuaXNOdWxsKCkpIHsKLSAgICAgICAgLy8gQ3Jl
YXRlIGEgbmV3IGJhY2tpbmcgc3RvcmUuCi0gICAgICAgIG1fYmFja2luZ1N0b3JlID0gU2hhcmVh
YmxlQml0bWFwOjpjcmVhdGUoYmFja2luZ1N0b3JlSGFuZGxlKTsKLSAgICB9Ci0KLSAgICBtX3Bs
dWdpbi0+Z2VvbWV0cnlEaWRDaGFuZ2UocGx1Z2luU2l6ZSwgY2xpcFJlY3QsIHBsdWdpblRvUm9v
dFZpZXdUcmFuc2Zvcm0pOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6dmlzaWJp
bGl0eURpZENoYW5nZShib29sIGlzVmlzaWJsZSkKLXsKLSAgICBtX2lzVmlzaWJsZSA9IGlzVmlz
aWJsZTsKLSAgICAKLSAgICBBU1NFUlQobV9wbHVnaW4pOwotICAgIG1fcGx1Z2luLT52aXNpYmls
aXR5RGlkQ2hhbmdlKGlzVmlzaWJsZSk7Ci0KLSAgICB1cGRhdGVWaXNpYmlsaXR5QWN0aXZpdHko
KTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OndpbmRvd0ZvY3VzQ2hhbmdlZChi
b29sIGhhc0ZvY3VzKQotewotICAgIEFTU0VSVChtX3BsdWdpbik7Ci0gICAgbV9wbHVnaW4tPndp
bmRvd0ZvY3VzQ2hhbmdlZChoYXNGb2N1cyk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclBy
b3h5Ojp3aW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChib29sIGlzVmlzaWJsZSkKLXsKLSAgICBtX2lz
V2luZG93VmlzaWJsZSA9IGlzVmlzaWJsZTsKLQotICAgIEFTU0VSVChtX3BsdWdpbik7Ci0gICAg
bV9wbHVnaW4tPndpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKGlzVmlzaWJsZSk7Ci0KLSAgICB1cGRh
dGVWaXNpYmlsaXR5QWN0aXZpdHkoKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6
OnVwZGF0ZVZpc2liaWxpdHlBY3Rpdml0eSgpCi17Ci0gICAgaWYgKG1faXNWaXNpYmxlICYmIG1f
aXNXaW5kb3dWaXNpYmxlKQotICAgICAgICBtX3Zpc2libGl0eUFjdGl2aXR5LnN0YXJ0KCk7Ci0g
ICAgZWxzZQotICAgICAgICBtX3Zpc2libGl0eUFjdGl2aXR5LnN0b3AoKTsKLX0KLQotdm9pZCBQ
bHVnaW5Db250cm9sbGVyUHJveHk6OmRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCByZXF1
ZXN0SUQsIGNvbnN0IFN0cmluZyYgcmVzdWx0KQotewotICAgIG1fcGx1Z2luLT5kaWRFdmFsdWF0
ZUphdmFTY3JpcHQocmVxdWVzdElELCByZXN1bHQpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xs
ZXJQcm94eTo6c3RyZWFtV2lsbFNlbmRSZXF1ZXN0KHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBT
dHJpbmcmIHJlcXVlc3RVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVkaXJlY3RSZXNwb25zZVVS
TFN0cmluZywgdWludDMyX3QgcmVkaXJlY3RSZXNwb25zZVN0YXR1c0NvZGUpCi17Ci0gICAgbV9w
bHVnaW4tPnN0cmVhbVdpbGxTZW5kUmVxdWVzdChzdHJlYW1JRCwgVVJMKHsgfSwgcmVxdWVzdFVS
TFN0cmluZyksIFVSTCh7IH0sIHJlZGlyZWN0UmVzcG9uc2VVUkxTdHJpbmcpLCByZWRpcmVjdFJl
c3BvbnNlU3RhdHVzQ29kZSk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpzdHJl
YW1EaWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IFN0cmluZyYgcmVz
cG9uc2VVUkxTdHJpbmcsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwgdWludDMyX3QgbGFzdE1vZGlm
aWVkVGltZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBoZWFkZXJzKQot
ewotICAgIG1fcGx1Z2luLT5zdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2Uoc3RyZWFtSUQsIFVSTCh7
IH0sIHJlc3BvbnNlVVJMU3RyaW5nKSwgc3RyZWFtTGVuZ3RoLCBsYXN0TW9kaWZpZWRUaW1lLCBt
aW1lVHlwZSwgaGVhZGVycywgU3RyaW5nKCkpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQ
cm94eTo6c3RyZWFtRGlkUmVjZWl2ZURhdGEodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IElQQzo6
RGF0YVJlZmVyZW5jZSYgZGF0YSkKLXsKLSAgICBtX3BsdWdpbi0+c3RyZWFtRGlkUmVjZWl2ZURh
dGEoc3RyZWFtSUQsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7Ci19Ci0KLXZvaWQgUGx1Z2lu
Q29udHJvbGxlclByb3h5OjpzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlE
KQotewotICAgIG1fcGx1Z2luLT5zdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHN0cmVhbUlEKTsKLX0K
LQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnN0cmVhbURpZEZhaWwodWludDY0X3Qgc3Ry
ZWFtSUQsIGJvb2wgd2FzQ2FuY2VsbGVkKQotewotICAgIG1fcGx1Z2luLT5zdHJlYW1EaWRGYWls
KHN0cmVhbUlELCB3YXNDYW5jZWxsZWQpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94
eTo6bWFudWFsU3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFN0cmluZyYgcmVzcG9uc2VV
UkxTdHJpbmcsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwgdWludDMyX3QgbGFzdE1vZGlmaWVkVGlt
ZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBoZWFkZXJzKQotewotICAg
IGlmIChtX3BsdWdpbkNhbmNlbGVkTWFudWFsU3RyZWFtTG9hZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9wbHVnaW4tPm1hbnVhbFN0cmVhbURpZFJlY2VpdmVSZXNwb25zZShVUkwoeyB9LCBy
ZXNwb25zZVVSTFN0cmluZyksIHN0cmVhbUxlbmd0aCwgbGFzdE1vZGlmaWVkVGltZSwgbWltZVR5
cGUsIGhlYWRlcnMsIFN0cmluZygpKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6
Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0
YSkKLXsKLSAgICBpZiAobV9wbHVnaW5DYW5jZWxlZE1hbnVhbFN0cmVhbUxvYWQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fcGx1Z2luLT5tYW51YWxTdHJlYW1EaWRSZWNlaXZlRGF0YShkYXRh
LmRhdGEoKSwgZGF0YS5zaXplKCkpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6
bWFudWFsU3RyZWFtRGlkRmluaXNoTG9hZGluZygpCi17Ci0gICAgaWYgKG1fcGx1Z2luQ2FuY2Vs
ZWRNYW51YWxTdHJlYW1Mb2FkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9wbHVnaW4t
Pm1hbnVhbFN0cmVhbURpZEZpbmlzaExvYWRpbmcoKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9s
bGVyUHJveHk6Om1hbnVhbFN0cmVhbURpZEZhaWwoYm9vbCB3YXNDYW5jZWxsZWQpCi17Ci0gICAg
aWYgKG1fcGx1Z2luQ2FuY2VsZWRNYW51YWxTdHJlYW1Mb2FkKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgbV9wbHVnaW4tPm1hbnVhbFN0cmVhbURpZEZhaWwod2FzQ2FuY2VsbGVkKTsKLX0K
LQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2Vi
TW91c2VFdmVudCYgbW91c2VFdmVudCkKLXsKLSAgICBtX3BsdWdpbi0+aGFuZGxlTW91c2VFdmVu
dChtb3VzZUV2ZW50KTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OmhhbmRsZVdo
ZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBjb21wbGV0aW9uSGFu
ZGxlcihtX3BsdWdpbi0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KSk7Ci19Ci0KLXZvaWQg
UGx1Z2luQ29udHJvbGxlclByb3h5OjpoYW5kbGVNb3VzZUVudGVyRXZlbnQoY29uc3QgV2ViTW91
c2VFdmVudCYgbW91c2VFbnRlckV2ZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcGx1Z2luLT5o
YW5kbGVNb3VzZUVudGVyRXZlbnQobW91c2VFbnRlckV2ZW50KSk7Ci19Ci0KLXZvaWQgUGx1Z2lu
Q29udHJvbGxlclByb3h5OjpoYW5kbGVNb3VzZUxlYXZlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVu
dCYgbW91c2VMZWF2ZUV2ZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQotewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcGx1Z2luLT5oYW5kbGVN
b3VzZUxlYXZlRXZlbnQobW91c2VMZWF2ZUV2ZW50KSk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJv
bGxlclByb3h5OjpoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmIGtl
eWJvYXJkRXZlbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCi17Ci0gICAgY29tcGxldGlvbkhhbmRsZXIobV9wbHVnaW4tPmhhbmRsZUtleWJvYXJk
RXZlbnQoa2V5Ym9hcmRFdmVudCkpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6
aGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3Ry
aW5nJiBhcmd1bWVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKLXsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihtX3BsdWdpbi0+aGFuZGxlRWRpdGlu
Z0NvbW1hbmQoY29tbWFuZE5hbWUsIGFyZ3VtZW50KSk7Ci19Ci0gICAgCi12b2lkIFBsdWdpbkNv
bnRyb2xsZXJQcm94eTo6aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3QgU3RyaW5nJiBjb21t
YW5kTmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKLXsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihtX3BsdWdpbi0+aXNFZGl0aW5nQ29tbWFuZEVu
YWJsZWQoY29tbWFuZE5hbWUpKTsKLX0KLSAgICAKLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5
OjpoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgY29tcGxldGlvbkhhbmRsZXIobV9wbHVnaW4tPmhh
bmRsZXNQYWdlU2NhbGVGYWN0b3IoKSk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5
OjpyZXF1aXJlc1VuaWZpZWRTY2FsZUZhY3RvcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcGx1Z2lu
LT5yZXF1aXJlc1VuaWZpZWRTY2FsZUZhY3RvcigpKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9s
bGVyUHJveHk6OnBhaW50RW50aXJlUGx1Z2luKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAobV9wbHVnaW5TaXplLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0KLSAgICBtX2RpcnR5UmVjdCA9IElu
dFJlY3QoSW50UG9pbnQoKSwgbV9wbHVnaW5TaXplKTsKLSAgICBwYWludCgpOwotICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpzdXBwb3J0
c1NuYXBzaG90dGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQotewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcGx1Z2luLT5zdXBwb3J0c1NuYXBz
aG90dGluZygpKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnNuYXBzaG90KENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmJik+IGNvbXBsZXRp
b25IYW5kbGVyKQotewotICAgIEFTU0VSVChtX3BsdWdpbik7Ci0gICAgUmVmUHRyPFNoYXJlYWJs
ZUJpdG1hcD4gYml0bWFwID0gbV9wbHVnaW4tPnNuYXBzaG90KCk7Ci0gICAgaWYgKCFiaXRtYXAp
Ci0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwotCi0gICAgU2hhcmVhYmxl
Qml0bWFwOjpIYW5kbGUgYmFja2luZ1N0b3JlSGFuZGxlOwotICAgIGJpdG1hcC0+Y3JlYXRlSGFu
ZGxlKGJhY2tpbmdTdG9yZUhhbmRsZSk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShi
YWNraW5nU3RvcmVIYW5kbGUpKTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnNl
dEZvY3VzKGJvb2wgaGFzRm9jdXMpCi17Ci0gICAgbV9wbHVnaW4tPnNldEZvY3VzKGhhc0ZvY3Vz
KTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OmRpZFVwZGF0ZSgpCi17Ci0gICAg
bV93YWl0aW5nRm9yRGlkVXBkYXRlID0gZmFsc2U7Ci0gICAgc3RhcnRQYWludFRpbWVyKCk7Ci19
Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpnZXRQbHVnaW5TY3JpcHRhYmxlTlBPYmpl
Y3QoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50NjRfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Ci17Ci0gICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdGFibGVOUE9iamVjdCA9IG1fcGx1Z2luLT5w
bHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKTsKLSAgICBpZiAoIXBsdWdpblNjcmlwdGFibGVOUE9i
amVjdCkKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKDApOwotICAgIAotICAgIHVp
bnQ2NF90IHBsdWdpblNjcmlwdGFibGVOUE9iamVjdElEID0gbV9jb25uZWN0aW9uLT5ucFJlbW90
ZU9iamVjdE1hcCgpLT5yZWdpc3Rlck5QT2JqZWN0KHBsdWdpblNjcmlwdGFibGVOUE9iamVjdCwg
bV9wbHVnaW4uZ2V0KCkpOwotICAgIHJlbGVhc2VOUE9iamVjdChwbHVnaW5TY3JpcHRhYmxlTlBP
YmplY3QpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKHBsdWdpblNjcmlwdGFibGVOUE9iamVjdElE
KTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnN0b3JhZ2VCbG9ja2luZ1N0YXRl
Q2hhbmdlZChib29sIGlzU3RvcmFnZUJsb2NraW5nRW5hYmxlZCkKLXsKLSAgICBpZiAobV9zdG9y
YWdlQmxvY2tpbmdFbmFibGVkICE9IGlzU3RvcmFnZUJsb2NraW5nRW5hYmxlZCkgewotICAgICAg
ICBtX3N0b3JhZ2VCbG9ja2luZ0VuYWJsZWQgPSBpc1N0b3JhZ2VCbG9ja2luZ0VuYWJsZWQ7Ci0g
ICAgICAgIG1fcGx1Z2luLT5zdG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5nZWQobV9zdG9yYWdlQmxv
Y2tpbmdFbmFibGVkKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5Ojpw
cml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCBpc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQp
Ci17Ci0gICAgbV9pc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQgPSBpc1ByaXZhdGVCcm93c2luZ0Vu
YWJsZWQ7Ci0KLSAgICBtX3BsdWdpbi0+cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGlzUHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5Ojpt
dXRlZFN0YXRlQ2hhbmdlZChib29sIGlzTXV0ZWQpCi17Ci0gICAgaWYgKG1faXNNdXRlZCA9PSBp
c011dGVkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9pc011dGVkID0gaXNNdXRlZDsK
LSAgICBtX3BsdWdpbi0+bXV0ZWRTdGF0ZUNoYW5nZWQoaXNNdXRlZCk7Ci19Ci0KLXZvaWQgUGx1
Z2luQ29udHJvbGxlclByb3h5OjpnZXRGb3JtVmFsdWUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChi
b29sLCBTdHJpbmcmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgU3RyaW5nIGZvcm1W
YWx1ZTsKLSAgICBib29sIHJldHVyblZhbHVlID0gbV9wbHVnaW4tPmdldEZvcm1WYWx1ZShmb3Jt
VmFsdWUpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlLCBXVEZNb3ZlKGZvcm1W
YWx1ZSkpOwotfQotCi0jaWYgUExBVEZPUk0oWDExKQotdWludDY0X3QgUGx1Z2luQ29udHJvbGxl
clByb3h5OjpjcmVhdGVQbHVnaW5Db250YWluZXIoKQotewotICAgIHVpbnQ2NF90IHdpbmRvd0lE
ID0gMDsKLSAgICBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6
OlBsdWdpblByb3h5OjpDcmVhdGVQbHVnaW5Db250YWluZXIoKSwgTWVzc2FnZXM6OlBsdWdpblBy
b3h5OjpDcmVhdGVQbHVnaW5Db250YWluZXI6OlJlcGx5KHdpbmRvd0lEKSwgbV9wbHVnaW5JbnN0
YW5jZUlEKTsKLSAgICByZXR1cm4gd2luZG93SUQ7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxl
clByb3h5Ojp3aW5kb3dlZFBsdWdpbkdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IEludFJlY3QmIGZy
YW1lUmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIHVpbnQ2NF90IHdpbmRvd0lEKQotewot
ICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Qcm94
eTo6V2luZG93ZWRQbHVnaW5HZW9tZXRyeURpZENoYW5nZShmcmFtZVJlY3QsIGNsaXBSZWN0LCB3
aW5kb3dJRCksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxl
clByb3h5Ojp3aW5kb3dlZFBsdWdpblZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCBpc1Zpc2libGUs
IHVpbnQ2NF90IHdpbmRvd0lEKQotewotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpQbHVnaW5Qcm94eTo6V2luZG93ZWRQbHVnaW5WaXNpYmlsaXR5RGlkQ2hh
bmdlKGlzVmlzaWJsZSwgd2luZG93SUQpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwotfQotI2VuZGlm
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvUGx1Z2lu
Q29udHJvbGxlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvUGx1Z2luQ29u
dHJvbGxlclByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjZjVlMWY5N2I4
N2E0YmQ5MmEzNjZhNGNjODkwMjUxNzM0MDE4YjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNv
bnRyb2xsZXJQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjM1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0KLSNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgot
I2luY2x1ZGUgIlBsdWdpbi5oIgotI2luY2x1ZGUgIlBsdWdpbkNvbnRyb2xsZXIuaCIKLSNpbmNs
dWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzQ29ubmVjdGlvbk1l
c3NhZ2VzUmVwbGllcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1VzZXJBY3Rpdml0eS5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1j
bGFzcyBMYXllckhvc3RpbmdDb250ZXh0OwotY2xhc3MgU2hhcmVhYmxlQml0bWFwOwotY2xhc3Mg
V2ViUHJvY2Vzc0Nvbm5lY3Rpb247Ci1zdHJ1Y3QgUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzOwot
Ci1jbGFzcyBQbHVnaW5Db250cm9sbGVyUHJveHkgOiBwdWJsaWMgUGx1Z2luQ29udHJvbGxlciB7
Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
UGx1Z2luQ29udHJvbGxlclByb3h5KTsKLQotcHVibGljOgotICAgIFBsdWdpbkNvbnRyb2xsZXJQ
cm94eShXZWJQcm9jZXNzQ29ubmVjdGlvbiosIGNvbnN0IFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVy
cyYpOwotICAgIH5QbHVnaW5Db250cm9sbGVyUHJveHkoKTsKLQotICAgIHVpbnQ2NF90IHBsdWdp
bkluc3RhbmNlSUQoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbkluc3RhbmNlSUQ7IH0KLQotICAg
IGJvb2wgaW5pdGlhbGl6ZShjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICB2
b2lkIGRlc3Ryb3koKTsKLQotICAgIHZvaWQgZGlkUmVjZWl2ZVBsdWdpbkNvbnRyb2xsZXJQcm94
eU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7Ci0gICAgYm9vbCBkaWRS
ZWNlaXZlU3luY1BsdWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwg
SVBDOjpEZWNvZGVyJiwgVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mKTsKLQotICAgIGJvb2wgd2Fu
dHNXaGVlbEV2ZW50cygpIGNvbnN0OwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgdWludDMy
X3QgcmVtb3RlTGF5ZXJDbGllbnRJRCgpIGNvbnN0OwotI2VuZGlmCi0KLSAgICBQbHVnaW5Db250
cm9sbGVyKiBhc1BsdWdpbkNvbnRyb2xsZXIoKSB7IHJldHVybiB0aGlzOyB9Ci0KLSAgICBib29s
IGlzSW5pdGlhbGl6aW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc0luaXRpYWxpemluZzsgfQotICAg
IAotICAgIHZvaWQgc2V0SW5pdGlhbGl6YXRpb25SZXBseShNZXNzYWdlczo6V2ViUHJvY2Vzc0Nv
bm5lY3Rpb246OkNyZWF0ZVBsdWdpbkRlbGF5ZWRSZXBseSYmKTsKLSAgICBNZXNzYWdlczo6V2Vi
UHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdpbkRlbGF5ZWRSZXBseSB0YWtlSW5pdGlhbGl6
YXRpb25SZXBseSgpOwotCi1wcml2YXRlOgotICAgIHZvaWQgc3RhcnRQYWludFRpbWVyKCk7Ci0g
ICAgdm9pZCBwYWludCgpOwotCi0gICAgLy8gUGx1Z2luQ29udHJvbGxlcgotICAgIHZvaWQgaW52
YWxpZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHVz
ZXJBZ2VudCgpIG92ZXJyaWRlOwotICAgIHZvaWQgbG9hZFVSTCh1aW50NjRfdCByZXF1ZXN0SUQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgU3Ry
aW5nJiB0YXJnZXQsIGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmIGhlYWRlckZpZWxkcywg
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBodHRwQm9keSwgYm9vbCBhbGxvd1BvcHVwcykgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBjb250aW51ZVN0cmVhbUxvYWQodWludDY0X3Qgc3RyZWFtSUQpIG92ZXJy
aWRlOwotICAgIHZvaWQgY2FuY2VsU3RyZWFtTG9hZCh1aW50NjRfdCBzdHJlYW1JRCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBjYW5jZWxNYW51YWxTdHJlYW1Mb2FkKCkgb3ZlcnJpZGU7Ci0gICAgTlBP
YmplY3QqIHdpbmRvd1NjcmlwdE5QT2JqZWN0KCkgb3ZlcnJpZGU7Ci0gICAgTlBPYmplY3QqIHBs
dWdpbkVsZW1lbnROUE9iamVjdCgpIG92ZXJyaWRlOwotICAgIGJvb2wgZXZhbHVhdGUoTlBPYmpl
Y3QqLCBjb25zdCBTdHJpbmcmIHNjcmlwdFN0cmluZywgTlBWYXJpYW50KiByZXN1bHQsIGJvb2wg
YWxsb3dQb3B1cHMpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0UGx1Z2luSXNQbGF5aW5nQXVkaW8o
Ym9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTdGF0dXNiYXJUZXh0KGNvbnN0IFN0cmluZyYp
IG92ZXJyaWRlOwotICAgIGJvb2wgaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpIG92
ZXJyaWRlOwotICAgIHZvaWQgcGx1Z2luUHJvY2Vzc0NyYXNoZWQoKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRpZEluaXRpYWxpemVQbHVnaW4oKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEZhaWxUb0lu
aXRpYWxpemVQbHVnaW4oKSBvdmVycmlkZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHZv
aWQgcGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZChib29sKSBvdmVycmlkZTsKLSAgICB2
b2lkIHNldENvbXBsZXhUZXh0SW5wdXRTdGF0ZShQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUp
IG92ZXJyaWRlOwotICAgIGNvbnN0IFdURjo6TWFjaFNlbmRSaWdodCYgY29tcG9zaXRpbmdSZW5k
ZXJTZXJ2ZXJQb3J0KCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotICAgIGZsb2F0IGNvbnRlbnRzU2Nh
bGVGYWN0b3IoKSBvdmVycmlkZTsKLSAgICBTdHJpbmcgcHJveGllc0ZvclVSTChjb25zdCBTdHJp
bmcmKSBvdmVycmlkZTsKLSAgICBTdHJpbmcgY29va2llc0ZvclVSTChjb25zdCBTdHJpbmcmKSBv
dmVycmlkZTsKLSAgICB2b2lkIHNldENvb2tpZXNGb3JVUkwoY29uc3QgU3RyaW5nJiB1cmxTdHJp
bmcsIGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKSBvdmVycmlkZTsKLSAgICBib29sIGlzUHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZCgpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNNdXRlZCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1faXNNdXRlZDsgfQotICAgIGJvb2wgZ2V0QXV0aGVudGljYXRp
b25JbmZvKGNvbnN0IFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZSYsIFN0cmluZyYgdXNlcm5hbWUs
IFN0cmluZyYgcGFzc3dvcmQpIG92ZXJyaWRlOwotICAgIHZvaWQgcHJvdGVjdFBsdWdpbkZyb21E
ZXN0cnVjdGlvbigpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5wcm90ZWN0UGx1Z2luRnJvbURlc3Ry
dWN0aW9uKCkgb3ZlcnJpZGU7Ci0jaWYgUExBVEZPUk0oWDExKQotICAgIHVpbnQ2NF90IGNyZWF0
ZVBsdWdpbkNvbnRhaW5lcigpIG92ZXJyaWRlOwotICAgIHZvaWQgd2luZG93ZWRQbHVnaW5HZW9t
ZXRyeURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmcmFtZVJlY3QsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGNsaXBSZWN0LCB1aW50NjRfdCB3aW5kb3dJRCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCB3aW5kb3dlZFBsdWdpblZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCBpc1Zpc2libGUs
IHVpbnQ2NF90IHdpbmRvd0lEKSBvdmVycmlkZTsKLSNlbmRpZgotICAgIAotICAgIC8vIE1lc3Nh
Z2UgaGFuZGxlcnMuCi0gICAgdm9pZCBmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QgcmVx
dWVzdElEKTsKLSAgICB2b2lkIGZyYW1lRGlkRmFpbCh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wg
d2FzQ2FuY2VsbGVkKTsKLSAgICB2b2lkIGdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHBsdWdpblNpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0LCBj
b25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0s
IGZsb2F0IGNvbnRlbnRzU2NhbGVGYWN0b3IsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
JiBiYWNraW5nU3RvcmVIYW5kbGUpOwotICAgIHZvaWQgdmlzaWJpbGl0eURpZENoYW5nZShib29s
IGlzVmlzaWJsZSk7Ci0gICAgdm9pZCBkaWRFdmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3QgcmVx
dWVzdElELCBjb25zdCBTdHJpbmcmIHJlc3VsdCk7Ci0gICAgdm9pZCBzdHJlYW1XaWxsU2VuZFJl
cXVlc3QodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IFN0cmluZyYgcmVxdWVzdFVSTFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZWRpcmVjdFJlc3BvbnNlVVJMU3RyaW5nLCB1aW50MzJfdCByZWRpcmVj
dFJlc3BvbnNlU3RhdHVzQ29kZSk7Ci0gICAgdm9pZCBzdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2Uo
dWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IFN0cmluZyYgcmVzcG9uc2VVUkxTdHJpbmcsIHVpbnQz
Ml90IHN0cmVhbUxlbmd0aCwgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBoZWFkZXJzKTsKLSAgICB2b2lkIHN0cmVhbURpZFJl
Y2VpdmVEYXRhKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRh
dGEpOwotICAgIHZvaWQgc3RyZWFtRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCBzdHJlYW1JRCk7
Ci0gICAgdm9pZCBzdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0cmVhbUlELCBib29sIHdhc0NhbmNl
bGxlZCk7Ci0gICAgdm9pZCBtYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgU3Ry
aW5nJiByZXNwb25zZVVSTFN0cmluZywgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBs
YXN0TW9kaWZpZWRUaW1lLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhl
YWRlcnMpOwotICAgIHZvaWQgbWFudWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEoY29uc3QgSVBDOjpE
YXRhUmVmZXJlbmNlJiBkYXRhKTsKLSAgICB2b2lkIG1hbnVhbFN0cmVhbURpZEZpbmlzaExvYWRp
bmcoKTsKLSAgICB2b2lkIG1hbnVhbFN0cmVhbURpZEZhaWwoYm9vbCB3YXNDYW5jZWxsZWQpOwot
ICAgIHZvaWQgaGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAgdm9p
ZCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wgaGFuZGxlZCk+JiYpOwotICAgIHZvaWQgaGFuZGxlTW91c2VFbnRlckV2ZW50
KGNvbnN0IFdlYk1vdXNlRXZlbnQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaGFuZGxl
ZCk+JiYpOwotICAgIHZvaWQgaGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZl
bnQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaGFuZGxlZCk+JiYpOwotICAgIHZvaWQg
aGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JiwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sIGhhbmRsZWQpPiYmKTsKLSAgICB2b2lkIGhhbmRsZUVkaXRpbmdDb21t
YW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCBoYW5kbGVkKT4mJik7Ci0gICAgdm9pZCBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25z
dCBTdHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKLSAgICB2b2lkIGhh
bmRsZXNQYWdlU2NhbGVGYWN0b3IoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7Ci0g
ICAgdm9pZCByZXF1aXJlc1VuaWZpZWRTY2FsZUZhY3RvcihDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmKTsKLSAgICB2b2lkIHBhaW50RW50aXJlUGx1Z2luKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7Ci0gICAgdm9pZCBzdXBwb3J0c1NuYXBzaG90dGluZyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmKTsKLSAgICB2b2lkIHNuYXBzaG90KENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmJik+KTsKLSAgICB2b2lkIHNldEZvY3VzKGJv
b2wpOwotICAgIHZvaWQgZGlkVXBkYXRlKCk7Ci0gICAgdm9pZCBnZXRQbHVnaW5TY3JpcHRhYmxl
TlBPYmplY3QoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50NjRfdCBwbHVnaW5TY3JpcHRhYmxl
TlBPYmplY3RJRCk+JiYpOwotCi0gICAgdm9pZCB3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCk7Ci0g
ICAgdm9pZCB3aW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChib29sKTsKLSAgICB2b2lkIHVwZGF0ZVZp
c2liaWxpdHlBY3Rpdml0eSgpOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgdm9pZCB3aW5k
b3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFt
ZUluU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFtZUlu
V2luZG93Q29vcmRpbmF0ZXMpOwotICAgIHZvaWQgc2VuZENvbXBsZXhUZXh0SW5wdXQoY29uc3Qg
U3RyaW5nJiB0ZXh0SW5wdXQpOwotICAgIHZvaWQgc2V0TGF5ZXJIb3N0aW5nTW9kZSh1aW50MzJf
dCk7Ci0KLSAgICB2b2lkIHVwZGF0ZUxheWVySG9zdGluZ0NvbnRleHQoTGF5ZXJIb3N0aW5nTW9k
ZSk7Ci0jZW5kaWYKLQotICAgIHZvaWQgc3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKGJvb2wp
OwotICAgIHZvaWQgcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJvb2wpOwotICAgIHZvaWQg
bXV0ZWRTdGF0ZUNoYW5nZWQoYm9vbCk7Ci0gICAgdm9pZCBnZXRGb3JtVmFsdWUoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sIHJldHVyblZhbHVlLCBTdHJpbmcmJiBmb3JtVmFsdWUpPiYmKTsK
LQotICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IFBsdWdpbkNyZWF0aW9uUGFyYW1l
dGVycyYpOwotICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUdl
b21ldHJ5RGlkQ2hhbmdlKCk7Ci0KLSAgICBXZWJQcm9jZXNzQ29ubmVjdGlvbiogbV9jb25uZWN0
aW9uOwotICAgIHVpbnQ2NF90IG1fcGx1Z2luSW5zdGFuY2VJRDsKLQotICAgIFN0cmluZyBtX3Vz
ZXJBZ2VudDsKLSAgICBib29sIG1fc3RvcmFnZUJsb2NraW5nRW5hYmxlZDsKLSAgICBib29sIG1f
aXNQcml2YXRlQnJvd3NpbmdFbmFibGVkOwotICAgIGJvb2wgbV9pc011dGVkOwotICAgIGJvb2wg
bV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkOwotICAgIGJvb2wgbV9pc0luaXRpYWxp
emluZzsKLSAgICBib29sIG1faXNWaXNpYmxlOwotICAgIGJvb2wgbV9pc1dpbmRvd1Zpc2libGU7
Ci0KLSAgICBNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdpbkRlbGF5
ZWRSZXBseSBtX2luaXRpYWxpemF0aW9uUmVwbHk7Ci0KLSAgICBSZWZQdHI8UGx1Z2luPiBtX3Bs
dWdpbjsKLQotICAgIFdlYkNvcmU6OkludFNpemUgbV9wbHVnaW5TaXplOwotCi0gICAgLy8gVGhl
IGRpcnR5IHJlY3QgaW4gcGx1Zy1pbiBjb29yZGluYXRlcy4KLSAgICBXZWJDb3JlOjpJbnRSZWN0
IG1fZGlydHlSZWN0OwotCi0gICAgLy8gVGhlIHBhaW50IHRpbWVyLCB1c2VkIGZvciBjb2FsZXNj
aW5nIHBhaW50aW5nLgotICAgIFJ1bkxvb3A6OlRpbWVyPFBsdWdpbkNvbnRyb2xsZXJQcm94eT4g
bV9wYWludFRpbWVyOwotICAgIAotICAgIC8vIEEgY291bnRlciB1c2VkIHRvIHByZXZlbnQgdGhl
IHBsdWctaW4gZnJvbSBiZWluZyBkZXN0cm95ZWQuCi0gICAgdW5zaWduZWQgbV9wbHVnaW5EZXN0
cnVjdGlvblByb3RlY3RDb3VudDsKLQotICAgIC8vIEEgdGltZXIgdGhhdCB3ZSB1c2UgdG8gcHJl
dmVudCBkZXN0cnVjdGlvbiBvZiB0aGUgcGx1Zy1pbiB3aGlsZSBwbHVnLWluCi0gICAgLy8gY29k
ZSBpcyBvbiB0aGUgc3RhY2suCi0gICAgUnVuTG9vcDo6VGltZXI8UGx1Z2luQ29udHJvbGxlclBy
b3h5PiBtX3BsdWdpbkRlc3Ryb3lUaW1lcjsKLQotICAgIC8vIFdoZXRoZXIgd2UncmUgd2FpdGlu
ZyBmb3IgdGhlIHBsdWctaW4gcHJveHkgaW4gdGhlIHdlYiBwcm9jZXNzIHRvIGRyYXcgdGhlIGNv
bnRlbnRzIG9mIGl0cwotICAgIC8vIGJhY2tpbmcgc3RvcmUgaW50byB0aGUgd2ViIHByb2Nlc3Mg
YmFja2luZyBzdG9yZS4KLSAgICBib29sIG1fd2FpdGluZ0ZvckRpZFVwZGF0ZTsKLQotICAgIC8v
IFdoZXRoZXIgdGhlIHBsdWctaW4gaGFzIGNhbmNlbGVkIHRoZSBtYW51YWwgc3RyZWFtIGxvYWQu
Ci0gICAgYm9vbCBtX3BsdWdpbkNhbmNlbGVkTWFudWFsU3RyZWFtTG9hZDsKLQotI2lmIFBMQVRG
T1JNKENPQ09BKQotICAgIC8vIFdoZXRoZXIgY29tcGxleCB0ZXh0IGlucHV0IGlzIGVuYWJsZWQg
Zm9yIHRoaXMgcGx1Zy1pbi4KLSAgICBib29sIG1faXNDb21wbGV4VGV4dElucHV0RW5hYmxlZDsK
LQotICAgIC8vIEZvciBDQSBwbHVnLWlucywgdGhpcyBob2xkcyB0aGUgaW5mb3JtYXRpb24gbmVl
ZGVkIHRvIGV4cG9ydCB0aGUgbGF5ZXIgaGllcmFyY2h5IHRvIHRoZSBVSSBwcm9jZXNzLgotICAg
IHN0ZDo6dW5pcXVlX3B0cjxMYXllckhvc3RpbmdDb250ZXh0PiBtX2xheWVySG9zdGluZ0NvbnRl
eHQ7Ci0jZW5kaWYKLQotICAgIC8vIFRoZSBjb250ZW50cyBzY2FsZSBmYWN0b3Igb2YgdGhpcyBw
bHVnLWluLgotICAgIGZsb2F0IG1fY29udGVudHNTY2FsZUZhY3RvcjsKLSAgICAKLSAgICAvLyBU
aGUgYmFja2luZyBzdG9yZSB0aGF0IHRoaXMgcGx1Zy1pbiBkcmF3cyBpbnRvLgotICAgIFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IG1fYmFja2luZ1N0b3JlOwotCi0gICAgLy8gVGhlIHdpbmRvdyBO
UE9iamVjdC4KLSAgICBOUE9iamVjdCogbV93aW5kb3dOUE9iamVjdDsKLQotICAgIC8vIFRoZSBw
bHVnLWluIGVsZW1lbnQgTlBPYmplY3QuCi0gICAgTlBPYmplY3QqIG1fcGx1Z2luRWxlbWVudE5Q
T2JqZWN0OwotCi0gICAgLy8gSG9sZCBhbiBhY3Rpdml0eSB3aGVuIHRoZSBwbHVnaW4gaXMgdmlz
aWJsZSB0byBwcmV2ZW50IHRocm90dGxpbmcuCi0gICAgVXNlckFjdGl2aXR5IG1fdmlzaWJsaXR5
QWN0aXZpdHk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbHVnaW5Q
cm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQv
UGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkubWVzc2FnZXMuaW4KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxYTE2ODZmY2E2MGE2MDBjYzU1MjRmYzk2NWJlMTJjNzU3
NjQ2OWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5tZXNzYWdlcy5p
bgorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotbWVz
c2FnZXMgLT4gUGx1Z2luQ29udHJvbGxlclByb3h5IExlZ2FjeVJlY2VpdmVyIE5vdFJlZkNvdW50
ZWQgewotICAgICMgU2VudCB3aGVuIHRoZSBwbHVnLWluIGdlb21ldHJ5IGNoYW5nZXMuCi0gICAg
R2VvbWV0cnlEaWRDaGFuZ2UoV2ViQ29yZTo6SW50U2l6ZSBwbHVnaW5TaXplLCBXZWJDb3JlOjpJ
bnRSZWN0IGNsaXBSZWN0LCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gcGx1Z2luVG9Sb290Vmll
d1RyYW5zZm9ybSwgZmxvYXQgc2NhbGVGYWN0b3IsIFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpI
YW5kbGUgYmFja2luZ1N0b3JlSGFuZGxlKQotCi0gICAgIyBTZW50IHdoZW4gdGhlIHBsdWctaW4g
dmlzaWJpbGl0eSBjaGFuZ2VzLgotICAgIFZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCBpc1Zpc2li
bGUpCi0KLSAgICAjIFNlbnQgd2hlbiBhIGZyYW1lIGhhcyBmaW5pc2hlZCBsb2FkaW5nLgotICAg
IEZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpCi0KLSAgICAjIFNlbnQg
d2hlbiBhIGZyYW1lIGRmYWlsZWQgdG8gbG9hZC4KLSAgICBGcmFtZURpZEZhaWwodWludDY0X3Qg
cmVxdWVzdElELCBib29sIHdhc0NhbmNlbGxlZCkKLQotICAgICMgU2VudCB3aGVuIEphdmFTY3Jp
cHQgdGhhdCB0aGUgcGx1Zy1pbiBhc2tlZCB0byBiZSBldmFsdWF0ZWQgaGFzIGJlZW4gZXZhbHVh
dGVkLgotICAgIERpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCByZXF1ZXN0SUQsIFN0cmlu
ZyByZXN1bHQpCi0KLSAgICAjIFNlbnQgd2hlbiB0aGUgcGx1Zy1pbiByZWNlaXZlcyB3aWxsIHNl
bmQgYSByZXF1ZXN0IGZvciBhIHN0cmVhbS4KLSAgICBTdHJlYW1XaWxsU2VuZFJlcXVlc3QodWlu
dDY0X3Qgc3RyZWFtSUQsIFN0cmluZyByZXF1ZXN0VVJMU3RyaW5nLCBTdHJpbmcgcmVkaXJlY3RS
ZXNwb25zZVVSTFN0cmluZywgdWludDMyX3QgcmVkaXJlY3RSZXNwb25zZVN0YXR1c0NvZGUpCi0K
LSAgICAjIFNlbnQgd2hlbiB0aGUgcGx1Zy1pbiByZWNlaXZlcyBhIHJlc3BvbnNlIGZvciBhIHN0
cmVhbS4KLSAgICBTdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3Qgc3RyZWFtSUQsIFN0
cmluZyByZXNwb25zZVVSTFN0cmluZywgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBs
YXN0TW9kaWZpZWRUaW1lLCBTdHJpbmcgbWltZVR5cGUsIFN0cmluZyBoZWFkZXJzKQotCi0gICAg
IyBTZW50IHdoZW4gdGhlIHBsdWctaW4gcmVjZWl2ZXMgZGF0YSBmb3IgYSBzdHJlYW0uCi0gICAg
U3RyZWFtRGlkUmVjZWl2ZURhdGEodWludDY0X3Qgc3RyZWFtSUQsIElQQzo6RGF0YVJlZmVyZW5j
ZSBkYXRhKQotCi0gICAgIyBTZW50IHdoZW4gYSBwbHVnLWluIHN0cmVhbSBoYXMgZmluaXNoZXMg
bG9hZGluZy4KLSAgICBTdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlEKQot
Ci0gICAgIyBTZW50IHdoZW4gYSBwbHVnLWluIHN0cmVhbSBoYXMgZmFpbGVkIHRvIGxvYWQuCi0g
ICAgU3RyZWFtRGlkRmFpbCh1aW50NjRfdCBzdHJlYW1JRCwgYm9vbCB3YXNDYW5jZWxsZWQpCi0K
LSAgICAjIFNlbnQgd2hlbiB0aGUgcGx1Zy1pbiByZWNlaXZlcyBhIHJlc3BvbnNlIGZvciB0aGUg
bWFudWFsIHN0cmVhbS4KLSAgICBNYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UoU3RyaW5n
IHJlc3BvbnNlVVJMU3RyaW5nLCB1aW50MzJfdCBzdHJlYW1MZW5ndGgsIHVpbnQzMl90IGxhc3RN
b2RpZmllZFRpbWUsIFN0cmluZyBtaW1lVHlwZSwgU3RyaW5nIGhlYWRlcnMpCi0KLSAgICAjIFNl
bnQgd2hlbiB0aGUgcGx1Zy1pbiByZWNlaXZlcyBkYXRhIGZvciB0aGUgbWFudWFsIHN0cmVhbS4K
LSAgICBNYW51YWxTdHJlYW1EaWRSZWNlaXZlRGF0YShJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YSkK
LQotICAgICMgU2VudCB3aGVuIHRoZSBwbHVnLWluIG1hbnVhbCBzdHJlYW0gaGFzIGZpbmlzaGVz
IGxvYWRpbmcuCi0gICAgTWFudWFsU3RyZWFtRGlkRmluaXNoTG9hZGluZygpCi0KLSAgICAjIFNl
bnQgd2hlbiB0aGUgcGx1Zy1pbiBtYW51YWwgc3RyZWFtIGhhcyBmYWlsZWQgdG8gbG9hZC4KLSAg
ICBNYW51YWxTdHJlYW1EaWRGYWlsKGJvb2wgd2FzQ2FuY2VsbGVkKQotCi0gICAgIyBTZW50IHdo
ZW4gYSBtb3VzZSBldmVudCAodGhhdCBpc24ndCBhIG1vdXNlIGVudGVyL2xlYXZlIGV2ZW50IG9y
IGEgd2hlZWwgZXZlbnQpIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAgSGFuZGxlTW91c2VFdmVu
dChXZWJLaXQ6OldlYk1vdXNlRXZlbnQgbW91c2VFdmVudCkKLSAgICAKLSAgICAjIFNlbnQgd2hl
biBhIG1vdXNlIHdoZWVsIGV2ZW50IHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gICAgSGFuZGxlV2hl
ZWxFdmVudChXZWJLaXQ6OldlYldoZWVsRXZlbnQgd2hlZWxFdmVudCkgLT4gKGJvb2wgaGFuZGxl
ZCkgU3luY2hyb25vdXMKLQotICAgICMgU2VudCB3aGVuIGEgbW91c2UgZW50ZXIgZXZlbnQgc2hv
dWxkIGJlIHByb2Nlc3NlZC4KLSAgICBIYW5kbGVNb3VzZUVudGVyRXZlbnQoV2ViS2l0OjpXZWJN
b3VzZUV2ZW50IG1vdXNlRXZlbnQpIC0+IChib29sIGhhbmRsZWQpIFN5bmNocm9ub3VzCi0gICAg
Ci0gICAgIyBTZW50IHdoZW4gYSBtb3VzZSBsZWF2ZSBldmVudCBzaG91bGQgYmUgcHJvY2Vzc2Vk
LgotICAgIEhhbmRsZU1vdXNlTGVhdmVFdmVudChXZWJLaXQ6OldlYk1vdXNlRXZlbnQgbW91c2VF
dmVudCkgLT4gKGJvb2wgaGFuZGxlZCkgU3luY2hyb25vdXMKLQotICAgICMgU2VudCB3aGVuIGEg
a2V5Ym9hcmQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAgICBIYW5kbGVLZXlib2FyZEV2ZW50KFdl
YktpdDo6V2ViS2V5Ym9hcmRFdmVudCBrZXlib2FyZEV2ZW50KSAtPiAoYm9vbCBoYW5kbGVkKSBT
eW5jaHJvbm91cwotICAgIAotICAgICMgU2VudCB3aGVuIGFuIGVkaXRpbmcgY29tbWFuZCBzaG91
bGQgYmUgcHJvY2Vzc2VkLgotICAgIEhhbmRsZUVkaXRpbmdDb21tYW5kKFN0cmluZyBjb21tYW5k
TmFtZSwgU3RyaW5nIGFyZ3VtZW50KSAtPiAoYm9vbCBoYW5kbGVkKSBTeW5jaHJvbm91cwotICAg
IAotICAgICMgUmV0dXJuIHdoZXRoZXIgb3Igbm90IGEgcGx1Z2luIHdhbnRzIHRvIGVuYWJsZSB0
aGUgZ2l2ZW4gZWRpdGluZyBjb21tYW5kLgotICAgIElzRWRpdGluZ0NvbW1hbmRFbmFibGVkKFN0
cmluZyBjb21tYW5kTmFtZSkgLT4gKGJvb2wgZW5hYmxlZCkgU3luY2hyb25vdXMKLSAgICAKLSAg
ICAjIFJldHVybiB3aGV0aGVyIG9yIG5vdCBhIHBsdWdpbiB3YW50cyB0byBoYW5kbGUgcGFnZSBz
Y2FsZSBmYWN0b3IgaXRzZWxmLgotICAgIEhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSAtPiAoYm9v
bCBlbmFibGVkKSBTeW5jaHJvbm91cwotCi0gICAgIyBSZXR1cm4gd2hldGhlciBvciBub3QgYSBw
bHVnaW4gd2FudHMgcGFnZSBzY2FsZSwgcGFnZSB6b29tLCBhbmQgdGV4dCB6b29tIGFsbCB0byBh
ZmZlY3QgcGFnZSBzY2FsZS4KLSAgICBSZXF1aXJlc1VuaWZpZWRTY2FsZUZhY3RvcigpIC0+IChi
b29sIHJlcXVpcmVkKSBTeW5jaHJvbm91cwotCi0gICAgIyBTZW50IHdoZW4gdGhlIHBsdWctaW4g
Zm9jdXMgY2hhbmdlcy4KLSAgICBTZXRGb2N1cyhib29sIGlzRm9jdXNlZCkKLQotICAgICMgU2Vu
dCB3aGVuIHRoZSB1cGRhdGUgcmVxdWVzdGVkIGJ5IFVwZGF0ZSBoYXMgYmVlbiBwYWludGVkLgot
ICAgIERpZFVwZGF0ZSgpCi0KLSAgICAjIFBhaW50IHRoZSBlbnRpcmUgcGx1Zy1pbi4KLSAgICBQ
YWludEVudGlyZVBsdWdpbigpIC0+ICgpIFN5bmNocm9ub3VzCi0KLSAgICAjIEdldCBhIHJlZmVy
ZW5jZSB0byB0aGUgcGx1Zy1pbidzIHNjcmlwdGFibGUgTlBPYmplY3QuCi0gICAgR2V0UGx1Z2lu
U2NyaXB0YWJsZU5QT2JqZWN0KCkgLT4gKHVpbnQ2NF90IHBsdWdpblNjcmlwdGFibGVOUE9iamVj
dElEKSBTeW5jaHJvbm91cwotCi0gICAgIyBTZW50IHdoZW4gdGhlIGNvbnRhaW5pbmcgTlNXaW5k
b3cncyBmb2N1cyBjaGFuZ2VzCi0gICAgV2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wgaGFzRm9jdXMp
Ci0KLSAgICAjIFNlbnQgd2hlbiB0aGUgY29udGFpbmluZyBOU1dpbmRvdydzIHZpc2liaWxpdHkg
Y2hhbmdlcwotICAgIFdpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKGJvb2wgaXNWaXNpYmxlKQotCi0j
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgIyBTZW5kIHRoZSBjb21wbGV4IHRleHQgaW5wdXQgdG8g
dGhlIHBsdWctaW4uCi0gICAgU2VuZENvbXBsZXhUZXh0SW5wdXQoU3RyaW5nIHRleHRJbnB1dCkK
LQotICAgICMgU2VudCB3aGVuIHRoZSBjb250YWluaW5nIE5TV2luZG93IG9yIE5TVmlldyBmcmFt
ZSBjaGFuZ2VzCi0gICAgV2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoV2ViQ29yZTo6SW50UmVj
dCB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIFdlYkNvcmU6OkludFJlY3Qgdmlld0Zy
YW1lSW5XaW5kb3dDb29yZGluYXRlcykKLQotICAgICMgU2VudCB3aGVuIHRoZSBjb250YWluaW5n
IHdpbmRvdydzIGxheWVyIGhvc3RpbmcgbW9kZSBjaGFuZ2VzCi0gICAgU2V0TGF5ZXJIb3N0aW5n
TW9kZSh1aW50MzJfdCBsYXllckhvc3RpbmdNb2RlKQotI2VuZGlmCi0KLSAgICAjIERvZXMgdGhl
IHBsdWdpbiBzdXBwb3J0IHNuYXBzaG90dGluZz8KLSAgICBTdXBwb3J0c1NuYXBzaG90dGluZygp
IC0+IChib29sIGlzU3VwcG9ydGVkKSBTeW5jaHJvbm91cwotCi0gICAgIyBSZXR1cm4gYSBzbmFw
c2hvdCBvZiB0aGUgcGx1Z2luLgotICAgIFNuYXBzaG90KCkgLT4gKFdlYktpdDo6U2hhcmVhYmxl
Qml0bWFwOjpIYW5kbGUgYmFja2luZ1N0b3JlSGFuZGxlKSBTeW5jaHJvbm91cwotCi0gICAgIyBT
ZW50IHdoZW4gc3RvcmFnZSBibG9ja2luZyBwb2xpY3kgY2hhbmdlcwotICAgIFN0b3JhZ2VCbG9j
a2luZ1N0YXRlQ2hhbmdlZChib29sIHN0b3JhZ2VCbG9ja2luZ0VuYWJsZWQpCi0KLSAgICAjIFNl
bnQgd2hlbiBwcml2YXRlIGJyb3dzaW5nIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQKLSAgICBQcml2
YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCBpc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQpCi0K
LSAgICAjIEdldHMgdGhlIHN0cmluZyByZXByZXNlbnRhdGluZyB0aGUgZm9ybSB2YWx1ZSBvZiB0
aGUgcGx1Zy1pbgotICAgIEdldEZvcm1WYWx1ZSgpIC0+IChib29sIHJldHVyblZhbHVlLCBTdHJp
bmcgZm9ybVZhbHVlKSBTeW5jaHJvbm91cwotCi0gICAgIyBTZW50IHdoZW4gdGhlIGJyb3dzZXIg
d2FudHMgdG8gbXV0ZSBvciB1bm11dGUgdGhlIHBsdWdpbi4KLSAgICBNdXRlZFN0YXRlQ2hhbmdl
ZChib29sIG11dGVkKQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGx1
Z2luUHJvY2Vzcy9QbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9Q
bHVnaW5Qcm9jZXNzL1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGVjMjdlZWQ3NDk0OTNkNWIwYmM5MDVkMzY5MzVkODJlN2ZkNjY0ZDgu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5oIgotCi0jaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzOjpQbHVnaW5DcmVhdGlvblBh
cmFtZXRlcnMoKQotICAgIDogcGx1Z2luSW5zdGFuY2VJRCgwKQotICAgICwgd2luZG93TlBPYmpl
Y3RJRCgwKQotICAgICwgY29udGVudHNTY2FsZUZhY3RvcigxKQotICAgICwgaXNQcml2YXRlQnJv
d3NpbmdFbmFibGVkKGZhbHNlKQotICAgICwgaXNNdXRlZChmYWxzZSkKLSAgICAsIGFzeW5jaHJv
bm91c0NyZWF0aW9uSW5jb21wbGV0ZShmYWxzZSkKLSAgICAsIGFydGlmaWNpYWxQbHVnaW5Jbml0
aWFsaXphdGlvbkRlbGF5RW5hYmxlZChmYWxzZSkKLSAgICAsIGlzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0VuYWJsZWQoZmFsc2UpCi17Ci19Ci0KLXZvaWQgUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJz
OjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwg
cGx1Z2luSW5zdGFuY2VJRDsKLSAgICBlbmNvZGVyIDw8IHdpbmRvd05QT2JqZWN0SUQ7Ci0gICAg
ZW5jb2RlciA8PCBwYXJhbWV0ZXJzOwotICAgIGVuY29kZXIgPDwgdXNlckFnZW50OwotICAgIGVu
Y29kZXIgPDwgY29udGVudHNTY2FsZUZhY3RvcjsKLSAgICBlbmNvZGVyIDw8IGlzUHJpdmF0ZUJy
b3dzaW5nRW5hYmxlZDsKLSAgICBlbmNvZGVyIDw8IGlzTXV0ZWQ7Ci0gICAgZW5jb2RlciA8PCBh
c3luY2hyb25vdXNDcmVhdGlvbkluY29tcGxldGU7Ci0gICAgZW5jb2RlciA8PCBhcnRpZmljaWFs
UGx1Z2luSW5pdGlhbGl6YXRpb25EZWxheUVuYWJsZWQ7Ci0gICAgZW5jb2RlciA8PCBpc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkOwotfQotCi1ib29sIFBsdWdpbkNyZWF0aW9uUGFyYW1l
dGVyczo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgUGx1Z2luQ3JlYXRpb25QYXJhbWV0
ZXJzJiByZXN1bHQpCi17Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucGx1Z2luSW5z
dGFuY2VJRCkgfHwgIXJlc3VsdC5wbHVnaW5JbnN0YW5jZUlEKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC53aW5kb3dOUE9iamVjdElEKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
cGFyYW1ldGVycykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0LnVzZXJBZ2VudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNvbnRlbnRzU2NhbGVGYWN0b3IpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc1ByaXZhdGVC
cm93c2luZ0VuYWJsZWQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5pc011dGVkKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYXN5bmNocm9ub3VzQ3JlYXRpb25JbmNvbXBsZXRl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQuYXJ0aWZpY2lhbFBsdWdpbkluaXRpYWxpemF0aW9uRGVsYXlFbmFibGVkKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nRW5hYmxlZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsdWdp
blByb2Nlc3MvUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1BsdWdp
blByb2Nlc3MvUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGQyOGY1Njc5MjE4Yzc3ZGYwMTIxNTE5ZjQ5NzE1ZWQzMDkwZGEzNjkuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9Q
bHVnaW5Qcm9jZXNzL1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5oCisrKyAvZGV2L251bGwKQEAg
LTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUGx1Z2luQ3JlYXRpb25QYXJhbWV0
ZXJzX2gKLSNkZWZpbmUgUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzX2gKLQotI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiUGx1Z2luLmgiCi0KLW5hbWVzcGFjZSBJ
UEMgewotY2xhc3MgRGVjb2RlcjsKLWNsYXNzIEVuY29kZXI7Ci19Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1zdHJ1Y3QgUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzIHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMoKTsK
LQotICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0OwotICAgIHN0YXRpYyBXQVJO
X1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoSVBDOjpEZWNvZGVyJiwgUGx1Z2luQ3JlYXRpb25Q
YXJhbWV0ZXJzJik7Ci0KLSAgICAvLyBUaGUgdW5pcXVlIElEIG9mIHRoaXMgcGx1Zy1pbiBpbnN0
YW5jZS4KLSAgICB1aW50NjRfdCBwbHVnaW5JbnN0YW5jZUlEOwotCi0gICAgLy8gVGhlIElEIG9m
IHRoZSB3aW5kb3cgTlBPYmplY3QuCi0gICAgdWludDY0X3Qgd2luZG93TlBPYmplY3RJRDsKLQot
ICAgIC8vIFRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUgcGx1Zy1pbi4KLSAgICBQbHVnaW46
OlBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLQotICAgIC8vIFRoZSBicm93c2VyIHVzZXIgYWdlbnQu
Ci0gICAgU3RyaW5nIHVzZXJBZ2VudDsKLQotICAgIC8vIFRoZSBjdXJyZW50IGNvbnRlbnRzIHNj
YWxlIGZhY3RvciB0aGF0IHRoaXMgcGx1Zy1pbiBzaG91bGQgaGF2ZS4KLSAgICBmbG9hdCBjb250
ZW50c1NjYWxlRmFjdG9yOwotCi0gICAgLy8gV2hldGhlciBwcml2YXRlIGJyb3dzaW5nIGlzIGVu
YWJsZWQgYXQgdGhlIHRpbWUgb2YgaW5zdGFudGlhdGlvbi4KLSAgICBib29sIGlzUHJpdmF0ZUJy
b3dzaW5nRW5hYmxlZDsKLQotICAgIC8vIFdoZXRoZXIgdGhlIHBsdWdpbiBzaG91bGQgYmUgbXV0
ZWQuCi0gICAgYm9vbCBpc011dGVkOwotICAgIAotICAgIC8vIElmIHJlcXVlc3Rpbmcgc3luY2hy
b25vdXMgaW5pdGlhbGl6YXRpb24sIHdoZXRoZXIgdGhpcyBwbHVnaW4gaGFkIHByZXZpb3VzbHkg
YmVlbiByZXF1ZXN0ZWQgYXN5bmNocm9ub3VzbHkKLSAgICBib29sIGFzeW5jaHJvbm91c0NyZWF0
aW9uSW5jb21wbGV0ZTsKLQotICAgIC8vIFNpbXVsYXRlZCBpbml0aWFsaXphdGlvbiBkZWxheSB0
ZXN0IGFzeW5jaHJvbm91cyBwbHVnaW4gaW5pdGlhbGl6YXRpb24KLSAgICBib29sIGFydGlmaWNp
YWxQbHVnaW5Jbml0aWFsaXphdGlvbkRlbGF5RW5hYmxlZDsKLQotICAgIC8vIFdoZXRoZXIgYWNj
ZWxlcmF0ZWQgY29tcG9zaXRpbmcgaXMgZW5hYmxlZC4KLSAgICBib29sIGlzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0VuYWJsZWQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
IC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jZW5kaWYgLy8gUGx1Z2luQ3JlYXRp
b25QYXJhbWV0ZXJzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9Q
bHVnaW5Qcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Qcm9j
ZXNzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM5NWFlNjBhMzQ4MjIyYzg0
NTYwZmQ5OTQwYTM2YjMwZWY0YzcwMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3MuaCIKLQotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKLSNp
bmNsdWRlICJBdHRhY2htZW50LmgiCi0jaW5jbHVkZSAiQXV4aWxpYXJ5UHJvY2Vzc01lc3NhZ2Vz
LmgiCi0jaW5jbHVkZSAiTmV0c2NhcGVQbHVnaW4uaCIKLSNpbmNsdWRlICJOZXRzY2FwZVBsdWdp
bk1vZHVsZS5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCIK
LSNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0jaW5jbHVkZSAi
UGx1Z2luUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzQ29ubmVj
dGlvbi5oIgotI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgotI2luY2x1ZGUg
PHd0Zi9SdW5Mb29wLmg+Ci0KLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSA8Y3J0X2V4dGVy
bnMuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Ci0KLU5PX1JFVFVSTiBzdGF0aWMgdm9pZCBjYWxsRXhpdChJUEM6OkNvbm5lY3Rpb24q
KQotewotICAgIF9leGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLVBsdWdpblByb2Nlc3MmIFBsdWdp
blByb2Nlc3M6OnNpbmdsZXRvbigpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFBsdWdp
blByb2Nlc3M+IHBsdWdpblByb2Nlc3M7Ci0gICAgcmV0dXJuIHBsdWdpblByb2Nlc3M7Ci19Ci0K
LVBsdWdpblByb2Nlc3M6OlBsdWdpblByb2Nlc3MoKQotICAgIDogbV9zdXBwb3J0c0FzeW5jaHJv
bm91c1BsdWdpbkluaXRpYWxpemF0aW9uKGZhbHNlKQotICAgICwgbV9taW5pbXVtTGlmZXRpbWVU
aW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZQbHVnaW5Qcm9jZXNzOjptaW5pbXVtTGlmZXRp
bWVUaW1lckZpcmVkKQotICAgICwgbV9jb25uZWN0aW9uQWN0aXZpdHkoIlBsdWdpblByb2Nlc3Mg
Y29ubmVjdGlvbiBhY3Rpdml0eS4iKQotewotICAgIE5ldHNjYXBlUGx1Z2luOjpzZXRTZXRFeGNl
cHRpb25GdW5jdGlvbihXZWJQcm9jZXNzQ29ubmVjdGlvbjo6c2V0R2xvYmFsRXhjZXB0aW9uKTsK
LX0KLQotUGx1Z2luUHJvY2Vzczo6flBsdWdpblByb2Nlc3MoKQotewotfQotCi12b2lkIFBsdWdp
blByb2Nlc3M6OmluaXRpYWxpemVQcm9jZXNzKGNvbnN0IEF1eGlsaWFyeVByb2Nlc3NJbml0aWFs
aXphdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCi17Ci0gICAgV1RGOjpzZXRQcm9jZXNzUHJp
dmlsZWdlcyhhbGxQcml2aWxlZ2VzKCkpOwotICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6cGVybWl0UHJvY2Vzc1RvVXNlQ29va2llQVBJKHRydWUpOwotICAgIG1fcGx1Z2luUGF0
aCA9IHBhcmFtZXRlcnMuZXh0cmFJbml0aWFsaXphdGlvbkRhdGEuZ2V0KCJwbHVnaW4tcGF0aCIp
OwotICAgIHBsYXRmb3JtSW5pdGlhbGl6ZVByb2Nlc3MocGFyYW1ldGVycyk7Ci19Ci0KLXZvaWQg
UGx1Z2luUHJvY2Vzczo6aW5pdGlhbGl6ZUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uKiBjb25u
ZWN0aW9uKQotewotICAgIEF1eGlsaWFyeVByb2Nlc3M6OmluaXRpYWxpemVDb25uZWN0aW9uKGNv
bm5lY3Rpb24pOwotCi0gICAgLy8gV2UgY2FsbCBfZXhpdCgpIGRpcmVjdGx5IGZyb20gdGhlIGJh
Y2tncm91bmQgcXVldWUgaW4gY2FzZSB0aGUgbWFpbiB0aHJlYWQgaXMgdW5yZXNwb25zaXZlCi0g
ICAgLy8gYW5kIEF1eGlsaWFyeVByb2Nlc3M6OmRpZENsb3NlKCkgZG9lcyBub3QgZ2V0IGNhbGxl
ZC4KLSAgICBjb25uZWN0aW9uLT5zZXREaWRDbG9zZU9uQ29ubmVjdGlvbldvcmtRdWV1ZUNhbGxi
YWNrKGNhbGxFeGl0KTsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzOjpyZW1vdmVXZWJQcm9jZXNz
Q29ubmVjdGlvbihXZWJQcm9jZXNzQ29ubmVjdGlvbiogd2ViUHJvY2Vzc0Nvbm5lY3Rpb24pCi17
Ci0gICAgc2l6ZV90IHZlY3RvckluZGV4ID0gbV93ZWJQcm9jZXNzQ29ubmVjdGlvbnMuZmluZCh3
ZWJQcm9jZXNzQ29ubmVjdGlvbik7Ci0gICAgQVNTRVJUKHZlY3RvckluZGV4ICE9IG5vdEZvdW5k
KTsKLQotICAgIG1fd2ViUHJvY2Vzc0Nvbm5lY3Rpb25zLnJlbW92ZSh2ZWN0b3JJbmRleCk7Ci0g
ICAgCi0gICAgaWYgKG1fd2ViUHJvY2Vzc0Nvbm5lY3Rpb25zLmlzRW1wdHkoKSAmJiBtX3BsdWdp
bk1vZHVsZSkgewotICAgICAgICAvLyBEZWNyZW1lbnQgdGhlIGxvYWQgY291bnQuIFRoaXMgaXMg
YmFsYW5jZWQgYnkgYSBjYWxsIHRvIGluY3JlbWVudExvYWRDb3VudCBpbiBjcmVhdGVXZWJQcm9j
ZXNzQ29ubmVjdGlvbi4KLSAgICAgICAgbV9wbHVnaW5Nb2R1bGUtPmRlY3JlbWVudExvYWRDb3Vu
dCgpOwotICAgIH0gICAgICAgIAotCi0gICAgZW5hYmxlVGVybWluYXRpb24oKTsKLX0KLQotTmV0
c2NhcGVQbHVnaW5Nb2R1bGUqIFBsdWdpblByb2Nlc3M6Om5ldHNjYXBlUGx1Z2luTW9kdWxlKCkK
LXsKLSAgICBpZiAoIW1fcGx1Z2luTW9kdWxlKSB7Ci0gICAgICAgIEFTU0VSVCghbV9wbHVnaW5Q
YXRoLmlzTnVsbCgpKTsKLSAgICAgICAgbV9wbHVnaW5Nb2R1bGUgPSBOZXRzY2FwZVBsdWdpbk1v
ZHVsZTo6Z2V0T3JDcmVhdGUobV9wbHVnaW5QYXRoKTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICAgICAgaWYgKG1fcGx1Z2luTW9kdWxlKSB7Ci0gICAgICAgICAgICBpZiAobV9wbHVnaW5Nb2R1
bGUtPnBsdWdpblF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrczo6UHJvZ25hbWVTaG91bGRC
ZVdlYktpdFBsdWdpbkhvc3QpKQotICAgICAgICAgICAgICAgICpjb25zdF9jYXN0PGNvbnN0IGNo
YXIqKj4oX05TR2V0UHJvZ25hbWUoKSkgPSAiV2ViS2l0UGx1Z2luSG9zdCI7Ci0gICAgICAgIH0K
LSNlbmRpZgotICAgIH0KLQotICAgIHJldHVybiBtX3BsdWdpbk1vZHVsZS5nZXQoKTsKLX0KLQot
Ym9vbCBQbHVnaW5Qcm9jZXNzOjpzaG91bGRUZXJtaW5hdGUoKQotewotICAgIHJldHVybiBtX3dl
YlByb2Nlc3NDb25uZWN0aW9ucy5pc0VtcHR5KCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzczo6
ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29k
ZXImIGRlY29kZXIpCi17Ci0jaWYgT1MoTElOVVgpCi0gICAgaWYgKGRlY29kZXIubWVzc2FnZVJl
Y2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCkpIHsKLSAgICAgICAgQXV4aWxpYXJ5UHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2Uo
Y29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQot
ICAgIGRpZFJlY2VpdmVQbHVnaW5Qcm9jZXNzTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsK
LX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzOjppbml0aWFsaXplUGx1Z2luUHJvY2VzcyhQbHVnaW5Q
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKLXsKLSAgICBBU1NFUlQoIW1f
cGx1Z2luTW9kdWxlKTsKLQotICAgIGF1dG8mIG1lbW9yeVByZXNzdXJlSGFuZGxlciA9IE1lbW9y
eVByZXNzdXJlSGFuZGxlcjo6c2luZ2xldG9uKCk7Ci0gICAgbWVtb3J5UHJlc3N1cmVIYW5kbGVy
LnNldExvd01lbW9yeUhhbmRsZXIoW3RoaXNdIChDcml0aWNhbCwgU3luY2hyb25vdXMpIHsKLSAg
ICAgICAgaWYgKHNob3VsZFRlcm1pbmF0ZSgpKQotICAgICAgICAgICAgdGVybWluYXRlKCk7Ci0g
ICAgfSk7Ci0gICAgbWVtb3J5UHJlc3N1cmVIYW5kbGVyLmluc3RhbGwoKTsKLQotICAgIG1fc3Vw
cG9ydHNBc3luY2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbiA9IHBhcmFtZXRlcnMuc3VwcG9y
dHNBc3luY2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbjsKLSAgICBzZXRNaW5pbXVtTGlmZXRp
bWUocGFyYW1ldGVycy5taW5pbXVtTGlmZXRpbWUpOwotICAgIHNldFRlcm1pbmF0aW9uVGltZW91
dChwYXJhbWV0ZXJzLnRlcm1pbmF0aW9uVGltZW91dCk7Ci0KLSAgICBwbGF0Zm9ybUluaXRpYWxp
emVQbHVnaW5Qcm9jZXNzKFdURk1vdmUocGFyYW1ldGVycykpOwotfQotCi12b2lkIFBsdWdpblBy
b2Nlc3M6OmNyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9uKCkKLXsKLSAgICAvLyBGSVhNRTogTWVy
Z2UgdGhpcyB3aXRoIEF1eGlsaWFyeVByb2Nlc3M6OmNyZWF0ZUlQQ0Nvbm5lY3Rpb25QYWlyKCku
Ci0KLSAgICBib29sIGRpZEhhdmVBbnlXZWJQcm9jZXNzQ29ubmVjdGlvbnMgPSAhbV93ZWJQcm9j
ZXNzQ29ubmVjdGlvbnMuaXNFbXB0eSgpOwotCi0jaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMp
Ci0gICAgSVBDOjpDb25uZWN0aW9uOjpTb2NrZXRQYWlyIHNvY2tldFBhaXIgPSBJUEM6OkNvbm5l
Y3Rpb246OmNyZWF0ZVBsYXRmb3JtQ29ubmVjdGlvbigpOwotCi0gICAgYXV0byBjb25uZWN0aW9u
ID0gV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0ZShzb2NrZXRQYWlyLnNlcnZlcik7Ci0gICAg
bV93ZWJQcm9jZXNzQ29ubmVjdGlvbnMuYXBwZW5kKFdURk1vdmUoY29ubmVjdGlvbikpOwotCi0g
ICAgSVBDOjpBdHRhY2htZW50IGNsaWVudFNvY2tldChzb2NrZXRQYWlyLmNsaWVudCk7Ci0gICAg
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1Z2luUHJvY2Vzc1By
b3h5OjpEaWRDcmVhdGVXZWJQcm9jZXNzQ29ubmVjdGlvbihjbGllbnRTb2NrZXQsIG1fc3VwcG9y
dHNBc3luY2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbiksIDApOwotI2VsaWYgT1MoREFSV0lO
KQotICAgIC8vIENyZWF0ZSB0aGUgbGlzdGVuaW5nIHBvcnQuCi0gICAgbWFjaF9wb3J0X3QgbGlz
dGVuaW5nUG9ydCA9IE1BQ0hfUE9SVF9OVUxMOwotICAgIGF1dG8ga3IgPSBtYWNoX3BvcnRfYWxs
b2NhdGUobWFjaF90YXNrX3NlbGYoKSwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZsaXN0ZW5p
bmdQb3J0KTsKLSAgICBpZiAoa3IgIT0gS0VSTl9TVUNDRVNTKSB7Ci0gICAgICAgIExPR19FUlJP
UigiQ291bGQgbm90IGFsbG9jYXRlIG1hY2ggcG9ydCwgZXJyb3IgJXgiLCBrcik7Ci0gICAgICAg
IENSQVNIKCk7Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlIGEgbGlzdGVuaW5nIGNvbm5lY3Rpb24u
Ci0gICAgYXV0byBjb25uZWN0aW9uID0gV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0ZShJUEM6
OkNvbm5lY3Rpb246OklkZW50aWZpZXIobGlzdGVuaW5nUG9ydCkpOwotCi0gICAgbV93ZWJQcm9j
ZXNzQ29ubmVjdGlvbnMuYXBwZW5kKFdURk1vdmUoY29ubmVjdGlvbikpOwotCi0gICAgSVBDOjpB
dHRhY2htZW50IGNsaWVudFBvcnQobGlzdGVuaW5nUG9ydCwgTUFDSF9NU0dfVFlQRV9NQUtFX1NF
TkQpOwotICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdp
blByb2Nlc3NQcm94eTo6RGlkQ3JlYXRlV2ViUHJvY2Vzc0Nvbm5lY3Rpb24oY2xpZW50UG9ydCwg
bV9zdXBwb3J0c0FzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uKSwgMCk7Ci0jZWxzZQot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0jZW5kaWYKLQotICAgIGlmIChOZXRzY2FwZVBsdWdpbk1v
ZHVsZSogbW9kdWxlID0gbmV0c2NhcGVQbHVnaW5Nb2R1bGUoKSkgewotICAgICAgICBpZiAoIWRp
ZEhhdmVBbnlXZWJQcm9jZXNzQ29ubmVjdGlvbnMpIHsKLSAgICAgICAgICAgIC8vIEluY3JlbWVu
dCB0aGUgbG9hZCBjb3VudC4gVGhpcyBpcyBtYXRjaGVkIGJ5IGEgY2FsbCB0byBkZWNyZW1lbnRM
b2FkQ291bnQgaW4gcmVtb3ZlV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uCi0gICAgICAgICAgICAvLyBX
ZSBkbyB0aGlzIHNvIHRoYXQgdGhlIHBsdWctaW4gbW9kdWxlJ3MgTlBfU2h1dGRvd24gd29uJ3Qg
YmUgY2FsbGVkIHVudGlsIHJpZ2h0IGJlZm9yZSBleGl0aW5nLgotICAgICAgICAgICAgbW9kdWxl
LT5pbmNyZW1lbnRMb2FkQ291bnQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGRpc2FibGVU
ZXJtaW5hdGlvbigpOwotfQotCi12b2lkIFBsdWdpblByb2Nlc3M6OmdldFNpdGVzV2l0aERhdGEo
dWludDY0X3QgY2FsbGJhY2tJRCkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiBzaXRlczsKLSAgICBp
ZiAoTmV0c2NhcGVQbHVnaW5Nb2R1bGUqIG1vZHVsZSA9IG5ldHNjYXBlUGx1Z2luTW9kdWxlKCkp
Ci0gICAgICAgIHNpdGVzID0gbW9kdWxlLT5zaXRlc1dpdGhEYXRhKCk7Ci0KLSAgICBwYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Qcm9jZXNzUHJveHk6OkRp
ZEdldFNpdGVzV2l0aERhdGEoc2l0ZXMsIGNhbGxiYWNrSUQpLCAwKTsKLX0KLQotdm9pZCBQbHVn
aW5Qcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YShXYWxsVGltZSBtb2RpZmllZFNpbmNlLCB1aW50
NjRfdCBjYWxsYmFja0lEKQotewotICAgIGlmIChhdXRvKiBtb2R1bGUgPSBuZXRzY2FwZVBsdWdp
bk1vZHVsZSgpKSB7Ci0gICAgICAgIGF1dG8gY3VycmVudFRpbWUgPSBXYWxsVGltZTo6bm93KCk7
Ci0KLSAgICAgICAgaWYgKGN1cnJlbnRUaW1lID4gbW9kaWZpZWRTaW5jZSkgewotICAgICAgICAg
ICAgdWludDY0X3QgbWF4aW11bUFnZSA9IChjdXJyZW50VGltZSAtIG1vZGlmaWVkU2luY2UpLnNl
Y29uZHNBczx1aW50NjRfdD4oKTsKLQotICAgICAgICAgICAgbW9kdWxlLT5jbGVhclNpdGVEYXRh
KFN0cmluZygpLCBOUF9DTEVBUl9BTEwsIG1heGltdW1BZ2UpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1Z2luUHJv
Y2Vzc1Byb3h5OjpEaWREZWxldGVXZWJzaXRlRGF0YShjYWxsYmFja0lEKSwgMCk7Ci19Ci0KLXZv
aWQgUGx1Z2luUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JIb3N0TmFtZXMoY29uc3QgVmVj
dG9yPFN0cmluZz4mIGhvc3ROYW1lcywgdWludDY0X3QgY2FsbGJhY2tJRCkKLXsKLSAgICBpZiAo
YXV0byogbW9kdWxlID0gbmV0c2NhcGVQbHVnaW5Nb2R1bGUoKSkgewotICAgICAgICBmb3IgKGF1
dG8mIGhvc3ROYW1lIDogaG9zdE5hbWVzKQotICAgICAgICAgICAgbW9kdWxlLT5jbGVhclNpdGVE
YXRhKGhvc3ROYW1lLCBOUF9DTEVBUl9BTEwsIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+
OjptYXgoKSk7Ci0gICAgfQotCi0gICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6UGx1Z2luUHJvY2Vzc1Byb3h5OjpEaWREZWxldGVXZWJzaXRlRGF0YUZvckhvc3RO
YW1lcyhjYWxsYmFja0lEKSwgMCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzczo6c2V0TWluaW11
bUxpZmV0aW1lKFNlY29uZHMgbGlmZXRpbWUpCi17Ci0gICAgaWYgKGxpZmV0aW1lIDw9IDBfcykK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGRpc2FibGVUZXJtaW5hdGlvbigpOwotICAgIAot
ICAgIG1fbWluaW11bUxpZmV0aW1lVGltZXIuc3RhcnRPbmVTaG90KGxpZmV0aW1lKTsKLX0KLQot
dm9pZCBQbHVnaW5Qcm9jZXNzOjptaW5pbXVtTGlmZXRpbWVUaW1lckZpcmVkKCkKLXsKLSAgICBl
bmFibGVUZXJtaW5hdGlvbigpOwotfQotCi0jaWYgIVBMQVRGT1JNKENPQ09BKQotdm9pZCBQbHVn
aW5Qcm9jZXNzOjppbml0aWFsaXplUHJvY2Vzc05hbWUoY29uc3QgQXV4aWxpYXJ5UHJvY2Vzc0lu
aXRpYWxpemF0aW9uUGFyYW1ldGVycyYpCi17Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzczo6aW5p
dGlhbGl6ZVNhbmRib3goY29uc3QgQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1l
dGVycyYsIFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKQotewotfQotI2VuZGlmCi0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Q
cm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmNhYjEyZWIwN2Q4M2Q0ODdhNzczNDRjM2Q0
ZDdmMzk3Njc1ZjkxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Qcm9jZXNzLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIkF1eGlsaWFyeVBy
b2Nlc3MuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NvdW50ZWRVc2VyQWN0aXZpdHkuaD4KLSNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0j
aWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KLSNlbmRp
ZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgTmV0c2NhcGVQbHVnaW5Nb2R1bGU7Ci1j
bGFzcyBXZWJQcm9jZXNzQ29ubmVjdGlvbjsKLXN0cnVjdCBQbHVnaW5Qcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzOwotICAgICAgICAKLWNsYXNzIFBsdWdpblByb2Nlc3MgOiBwdWJsaWMgQXV4aWxp
YXJ5UHJvY2VzcwotewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBsdWdpblByb2Nlc3MpOwot
ICAgIGZyaWVuZCBOZXZlckRlc3Ryb3llZDxQbHVnaW5Qcm9jZXNzPjsKLQotcHVibGljOgotICAg
IHN0YXRpYyBQbHVnaW5Qcm9jZXNzJiBzaW5nbGV0b24oKTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IFdlYkNvcmU6OkF1eGlsaWFyeVByb2Nlc3NUeXBlIHByb2Nlc3NUeXBlID0gV2ViQ29yZTo6QXV4
aWxpYXJ5UHJvY2Vzc1R5cGU6OlBsdWdpbjsKLQotICAgIHZvaWQgcmVtb3ZlV2ViUHJvY2Vzc0Nv
bm5lY3Rpb24oV2ViUHJvY2Vzc0Nvbm5lY3Rpb24qKTsKLQotICAgIE5ldHNjYXBlUGx1Z2luTW9k
dWxlKiBuZXRzY2FwZVBsdWdpbk1vZHVsZSgpOwotCi0gICAgY29uc3QgU3RyaW5nJiBwbHVnaW5Q
YXRoKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5QYXRoOyB9Ci0KLSNpZiBQTEFURk9STShDT0NP
QSkKLSAgICB2b2lkIHNldE1vZGFsV2luZG93SXNTaG93aW5nKGJvb2wpOwotICAgIHZvaWQgc2V0
RnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZyhib29sKTsKLQotICAgIGNvbnN0IFdURjo6TWFjaFNl
bmRSaWdodCYgY29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0KCkgY29uc3QgeyByZXR1cm4gbV9j
b21wb3NpdGluZ1JlbmRlclNlcnZlclBvcnQ7IH0KLQotICAgIGJvb2wgbGF1bmNoUHJvY2Vzcyhj
b25zdCBTdHJpbmcmIGxhdW5jaFBhdGgsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhcmd1bWVudHMp
OwotICAgIGJvb2wgbGF1bmNoQXBwbGljYXRpb25BdFVSTChjb25zdCBTdHJpbmcmIHVybFN0cmlu
ZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cyk7Ci0gICAgYm9vbCBvcGVuVVJMKGNv
bnN0IFN0cmluZyYgdXJsU3RyaW5nLCBpbnQzMl90JiBzdGF0dXMsIFN0cmluZyYgbGF1bmNoZWRV
UkxTdHJpbmcpOwotICAgIGJvb2wgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOwot
I2VuZGlmCi0KLSAgICBDb3VudGVkVXNlckFjdGl2aXR5JiBjb25uZWN0aW9uQWN0aXZpdHkoKSB7
IHJldHVybiBtX2Nvbm5lY3Rpb25BY3Rpdml0eTsgfQotCi1wcml2YXRlOgotICAgIFBsdWdpblBy
b2Nlc3MoKTsKLSAgICB+UGx1Z2luUHJvY2VzcygpOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAg
IGJvb2wgc2hvdWxkT3ZlcnJpZGVRdWFyYW50aW5lKCkgZmluYWw7Ci0jZW5kaWYKLQotICAgIC8v
IEF1eGlsaWFyeVByb2Nlc3MKLSAgICB2b2lkIGluaXRpYWxpemVQcm9jZXNzKGNvbnN0IEF1eGls
aWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKSBvdmVycmlkZTsKLSAgICB2b2lk
IGluaXRpYWxpemVQcm9jZXNzTmFtZShjb25zdCBBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRp
b25QYXJhbWV0ZXJzJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBpbml0aWFsaXplQ29ubmVjdGlvbihJ
UEM6OkNvbm5lY3Rpb24qKSBvdmVycmlkZTsKLSAgICB2b2lkIGluaXRpYWxpemVTYW5kYm94KGNv
bnN0IEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmLCBTYW5kYm94SW5p
dGlhbGl6YXRpb25QYXJhbWV0ZXJzJikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzaG91bGRUZXJtaW5h
dGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZVByb2Nlc3MoY29uc3Qg
QXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYpOwotCi0jaWYgVVNFKEFQ
UEtJVCkKLSAgICB2b2lkIHN0b3BSdW5Mb29wKCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotICAgIC8v
IElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50Ci0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKLQotICAgIC8vIE1lc3NhZ2Ug
aGFuZGxlcnMuCi0gICAgdm9pZCBkaWRSZWNlaXZlUGx1Z2luUHJvY2Vzc01lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7Ci0gICAgdm9pZCBpbml0aWFsaXplUGx1Z2luUHJv
Y2VzcyhQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYpOwotICAgIHZvaWQgY3JlYXRl
V2ViUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKLQotICAgIHZvaWQgZ2V0U2l0ZXNXaXRoRGF0YSh1aW50
NjRfdCBjYWxsYmFja0lEKTsKLSAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKFdhbGxUaW1lIG1v
ZGlmaWVkU2luY2UsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwotICAgIHZvaWQgZGVsZXRlV2Vic2l0
ZURhdGFGb3JIb3N0TmFtZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3ROYW1lcywgdWludDY0
X3QgY2FsbGJhY2tJRCk7Ci0KLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZVBsdWdpblByb2Nl
c3MoUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmKTsKLSAgICAKLSAgICB2b2lkIHNl
dE1pbmltdW1MaWZldGltZShTZWNvbmRzKTsKLSAgICB2b2lkIG1pbmltdW1MaWZldGltZVRpbWVy
RmlyZWQoKTsKLSAgICAvLyBPdXIgd2ViIHByb2Nlc3MgY29ubmVjdGlvbnMuCi0gICAgVmVjdG9y
PFJlZlB0cjxXZWJQcm9jZXNzQ29ubmVjdGlvbj4+IG1fd2ViUHJvY2Vzc0Nvbm5lY3Rpb25zOwot
Ci0gICAgLy8gVGhlIHBsdWctaW4gcGF0aC4KLSAgICBTdHJpbmcgbV9wbHVnaW5QYXRoOwotCi0j
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgU3RyaW5nIG1fcGx1Z2luQnVuZGxlSWRlbnRpZmllcjsK
LSNlbmRpZgotCi0gICAgLy8gVGhlIHBsdWctaW4gbW9kdWxlLgotICAgIFJlZlB0cjxOZXRzY2Fw
ZVBsdWdpbk1vZHVsZT4gbV9wbHVnaW5Nb2R1bGU7Ci0gICAgCi0gICAgYm9vbCBtX3N1cHBvcnRz
QXN5bmNocm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRpb247Ci0KLSAgICBSdW5Mb29wOjpUaW1lcjxQ
bHVnaW5Qcm9jZXNzPiBtX21pbmltdW1MaWZldGltZVRpbWVyOwotCi0jaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgLy8gVGhlIE1hY2ggcG9ydCB1c2VkIGZvciBhY2NlbGVyYXRlZCBjb21wb3NpdGlu
Zy4KLSAgICBXVEY6Ok1hY2hTZW5kUmlnaHQgbV9jb21wb3NpdGluZ1JlbmRlclNlcnZlclBvcnQ7
Ci0KLSAgICBTdHJpbmcgbV9uc3VybENhY2hlRGlyZWN0b3J5OwotI2VuZGlmCi0KLSAgICBDb3Vu
dGVkVXNlckFjdGl2aXR5IG1fY29ubmVjdGlvbkFjdGl2aXR5OwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Qcm9jZXNzLm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MubWVzc2FnZXMu
aW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2NDY4MjYwNTM3MjBjZjYxMWU5NjYy
NzRkODIwZjdhY2JiMDRiZTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MubWVzc2Fn
ZXMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQot
bWVzc2FnZXMgLT4gUGx1Z2luUHJvY2VzcyBMZWdhY3lSZWNlaXZlciBOb3RSZWZDb3VudGVkIHsK
LSAgICAjIEluaXRpYWxpemVzIHRoZSBwbHVnLWluIHByb2Nlc3MuCi0gICAgSW5pdGlhbGl6ZVBs
dWdpblByb2Nlc3Moc3RydWN0IFdlYktpdDo6UGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cyBwcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzKQotICAgIAotICAgICMgQ3JlYXRlcyBhIHdlYiBw
cm9jZXNzIGNvbm5lY3Rpb24uIFdoZW4gdGhlIGNvbm5lY3Rpb24gaGFzIGJlZW4gY3JlYXRlZCwK
LSAgICAjIFRoZSBwbHVnLWluIHByb2Nlc3Mgc2VuZHMgYmFjayBhIERpZENyZWF0ZVdlYlByb2Nl
c3NDb25uZWN0aW9uIG1lc3NhZ2Ugd2l0aAotICAgICMgYSBjb25uZWN0aW9uIGlkZW50aWZpZXIu
Ci0gICAgQ3JlYXRlV2ViUHJvY2Vzc0Nvbm5lY3Rpb24oKQotCi0gICAgIyBBc2tzIHRoZSBwbHVn
LWluIHByb2Nlc3MgZm9yIHNpdGVzIHdpdGggZGF0YS4gVGhlIHBsdWctaW4gcHJvY2VzcyBzZW5k
cyBiYWNrIGEgCi0gICAgIyBEaWRHZXRTaXRlc1dpdGhEYXRhIG1lc3NhZ2Ugd2l0aCB0aGUgc2l0
ZXMuCi0gICAgR2V0U2l0ZXNXaXRoRGF0YSh1aW50NjRfdCBjYWxsYmFja0lEKQotCi0gICAgRGVs
ZXRlV2Vic2l0ZURhdGEoV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgdWludDY0X3QgY2FsbGJhY2tJ
RCkKLSAgICBEZWxldGVXZWJzaXRlRGF0YUZvckhvc3ROYW1lcyhWZWN0b3I8U3RyaW5nPiBob3N0
TmFtZXMsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBT
ZXRRT1MoaW50IGxhdGVuY3lRT1MsIGludCB0aHJvdWdocHV0UU9TKQotI2VuZGlmCi19Ci0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3ND
b25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29u
bmVjdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZjMzZjgyMDJiMjdl
NGVmOGNmODQ3Y2ZiNjFkNjBiNGU3ZmY5NTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3ND
b25uZWN0aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NDb25uZWN0aW9uLmgi
Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIkFjdGl2aXR5
QXNzZXJ0aW9uLmgiCi0jaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJOUE9i
amVjdE1lc3NhZ2VSZWNlaXZlck1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiTlBSZW1vdGVPYmplY3RN
YXAuaCIKLSNpbmNsdWRlICJQbHVnaW5Db250cm9sbGVyUHJveHkuaCIKLSNpbmNsdWRlICJQbHVn
aW5DcmVhdGlvblBhcmFtZXRlcnMuaCIKLSNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzLmgiCi0jaW5j
bHVkZSAiUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oIgotI2luY2x1ZGUgIlBsdWdp
blByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2Vz
LmgiCi0jaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+Ci0KLSNpZiAhT1MoV0lORE9XUykKLSNp
bmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwotCi1zdGF0aWMgSVBDOjpDb25uZWN0aW9uKiBjdXJyZW50Q29ubmVj
dGlvbjsKLQotUmVmPFdlYlByb2Nlc3NDb25uZWN0aW9uPiBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6
Y3JlYXRlKElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcikK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJQcm9jZXNzQ29ubmVjdGlvbihjb25uZWN0
aW9uSWRlbnRpZmllcikpOwotfQotCi1XZWJQcm9jZXNzQ29ubmVjdGlvbjo6fldlYlByb2Nlc3ND
b25uZWN0aW9uKCkKLXsKLSAgICBBU1NFUlQobV9wbHVnaW5Db250cm9sbGVycy5pc0VtcHR5KCkp
OwotICAgIEFTU0VSVCghbV9ucFJlbW90ZU9iamVjdE1hcCk7Ci0gICAgQVNTRVJUKCFtX2Nvbm5l
Y3Rpb24pOwotfQotICAgIAotV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OldlYlByb2Nlc3NDb25uZWN0
aW9uKElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcikKLXsK
LSAgICBtX2Nvbm5lY3Rpb24gPSBJUEM6OkNvbm5lY3Rpb246OmNyZWF0ZVNlcnZlckNvbm5lY3Rp
b24oY29ubmVjdGlvbklkZW50aWZpZXIsICp0aGlzKTsKLSAgICBtX25wUmVtb3RlT2JqZWN0TWFw
ID0gTlBSZW1vdGVPYmplY3RNYXA6OmNyZWF0ZShtX2Nvbm5lY3Rpb24uZ2V0KCkpOwotCi0gICAg
Ly8gVXNlIHRoaXMgZmxhZyB0byBmb3JjZSBzeW5jaHJvbm91cyBtZXNzYWdlcyB0byBiZSB0cmVh
dGVkIGFzIGFzeW5jaHJvbm91cyBtZXNzYWdlcyBpbiB0aGUgV2ViUHJvY2Vzcy4KLSAgICAvLyBP
dGhlcndpc2UsIHRoZSBXZWJQcm9jZXNzIHdvdWxkIHByb2Nlc3MgaW5jb21pbmcgc3luY2hyb25v
dXMgSVBDIHdoaWxlIHdhaXRpbmcgZm9yIGEgc3luY2hyb25vdXMgSVBDCi0gICAgLy8gcmVwbHkg
ZnJvbSB0aGUgUGx1Z2luIHByb2Nlc3MsIHdoaWNoIHdvdWxkIGJlIHVuc2FmZS4KLSAgICBtX2Nv
bm5lY3Rpb24tPnNldE9ubHlTZW5kTWVzc2FnZXNBc0Rpc3BhdGNoV2hlbldhaXRpbmdGb3JTeW5j
UmVwbHlXaGVuUHJvY2Vzc2luZ1N1Y2hBTWVzc2FnZSh0cnVlKTsKLSAgICBtX2Nvbm5lY3Rpb24t
Pm9wZW4oKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6YWRkUGx1Z2luQ29udHJv
bGxlclByb3h5KHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5Db250cm9sbGVyUHJveHk+IHBsdWdpbkNv
bnRyb2xsZXIpCi17Ci0gICAgdWludDY0X3QgcGx1Z2luSW5zdGFuY2VJRCA9IHBsdWdpbkNvbnRy
b2xsZXItPnBsdWdpbkluc3RhbmNlSUQoKTsKLQotICAgIEFTU0VSVCghbV9wbHVnaW5Db250cm9s
bGVycy5jb250YWlucyhwbHVnaW5JbnN0YW5jZUlEKSk7Ci0gICAgbV9wbHVnaW5Db250cm9sbGVy
cy5zZXQocGx1Z2luSW5zdGFuY2VJRCwgV1RGTW92ZShwbHVnaW5Db250cm9sbGVyKSk7Ci19Ci0K
LXZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmRlc3Ryb3lQbHVnaW5Db250cm9sbGVyUHJveHko
UGx1Z2luQ29udHJvbGxlclByb3h5KiBwbHVnaW5Db250cm9sbGVyKQotewotICAgIC8vIFRoaXMg
bWF5IGVuZCB1cCBjYWxsaW5nIHJlbW92ZVBsdWdpbkNvbnRyb2xsZXJQcm94eSB3aGljaCBlbmRz
IHVwIGRlbGV0aW5nCi0gICAgLy8gdGhlIFdlYlByb2Nlc3NDb25uZWN0aW9uIG9iamVjdCBpZiB0
aGlzIHdhcyB0aGUgbGFzdCBvYmplY3QuCi0gICAgcGx1Z2luQ29udHJvbGxlci0+ZGVzdHJveSgp
OwotfQotCi12b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjpyZW1vdmVQbHVnaW5Db250cm9sbGVy
UHJveHkoUGx1Z2luQ29udHJvbGxlclByb3h5KiBwbHVnaW5Db250cm9sbGVyLCBQbHVnaW4qIHBs
dWdpbikKLXsKLSAgICB1bnNpZ25lZCBwbHVnaW5JbnN0YW5jZUlEID0gcGx1Z2luQ29udHJvbGxl
ci0+cGx1Z2luSW5zdGFuY2VJRCgpOwotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcGx1Z2luQ29u
dHJvbGxlcnMuY29udGFpbnMocGx1Z2luSW5zdGFuY2VJRCkpOwotCi0gICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxQbHVnaW5Db250cm9sbGVyUHJveHk+IHBsdWdpbkNvbnRyb2xsZXJVbmlxdWVQdHIg
PSBtX3BsdWdpbkNvbnRyb2xsZXJzLnRha2UocGx1Z2luSW5zdGFuY2VJRCk7Ci0gICAgICAgIEFT
U0VSVChwbHVnaW5Db250cm9sbGVyVW5pcXVlUHRyLmdldCgpID09IHBsdWdpbkNvbnRyb2xsZXIp
OwotICAgIH0KLQotICAgIC8vIEludmFsaWRhdGUgYWxsIG9iamVjdHMgcmVsYXRlZCB0byB0aGlz
IHBsdWctaW4uCi0gICAgaWYgKHBsdWdpbikKLSAgICAgICAgbV9ucFJlbW90ZU9iamVjdE1hcC0+
cGx1Z2luRGVzdHJveWVkKHBsdWdpbik7Ci0KLSAgICBpZiAoIW1fcGx1Z2luQ29udHJvbGxlcnMu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX25wUmVtb3RlT2JqZWN0TWFwID0g
bnVsbHB0cjsKLQotICAgIC8vIFRoZSBsYXN0IHBsdWctaW4gd2VudCBhd2F5LCBjbG9zZSB0aGlz
IGNvbm5lY3Rpb24uCi0gICAgbV9jb25uZWN0aW9uLT5pbnZhbGlkYXRlKCk7Ci0gICAgbV9jb25u
ZWN0aW9uID0gbnVsbHB0cjsKLQotICAgIC8vIFRoaXMgd2lsbCBjYXVzZSB1cyB0byBiZSBkZWxl
dGVkLiAgICAKLSAgICBQbHVnaW5Qcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVXZWJQcm9jZXNz
Q29ubmVjdGlvbih0aGlzKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6c2V0R2xv
YmFsRXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXhjZXB0aW9uU3RyaW5nKQotewotICAgIGlmICgh
Y3VycmVudENvbm5lY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGN1cnJlbnRDb25uZWN0
aW9uLT5zZW5kU3luYyhNZXNzYWdlczo6UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246OlNldEV4Y2Vw
dGlvbihleGNlcHRpb25TdHJpbmcpLCBNZXNzYWdlczo6UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246
OlNldEV4Y2VwdGlvbjo6UmVwbHkoKSwgMCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rp
b246OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpE
ZWNvZGVyJiBkZWNvZGVyKQotewotICAgIFNldEZvclNjb3BlPElQQzo6Q29ubmVjdGlvbio+IGN1
cnJlbnRDb25uZWN0aW9uQ2hhbmdlKGN1cnJlbnRDb25uZWN0aW9uLCAmY29ubmVjdGlvbik7Ci0K
LSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBy
b2Nlc3NDb25uZWN0aW9uOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKLSAgICAgICAgZGlkUmVj
ZWl2ZVdlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghZGVjb2Rlci5kZXN0aW5hdGlvbklEKCkp
IHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBQbHVnaW5Db250cm9sbGVyUHJveHkqIHBsdWdpbkNvbnRyb2xsZXJQcm94eSA9IG1f
cGx1Z2luQ29udHJvbGxlcnMuZ2V0KGRlY29kZXIuZGVzdGluYXRpb25JRCgpKTsKLSAgICBpZiAo
IXBsdWdpbkNvbnRyb2xsZXJQcm94eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGx1Z2luQ29u
dHJvbGxlcjo6UGx1Z2luRGVzdHJ1Y3Rpb25Qcm90ZWN0b3IgcHJvdGVjdG9yKHBsdWdpbkNvbnRy
b2xsZXJQcm94eS0+YXNQbHVnaW5Db250cm9sbGVyKCkpOwotICAgIHBsdWdpbkNvbnRyb2xsZXJQ
cm94eS0+ZGlkUmVjZWl2ZVBsdWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwg
ZGVjb2Rlcik7Ci19Ci0KLWJvb2wgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVTeW5j
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rl
ciwgVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKLXsKLSAgICBTZXRGb3JT
Y29wZTxJUEM6OkNvbm5lY3Rpb24qPiBjdXJyZW50Q29ubmVjdGlvbkNoYW5nZShjdXJyZW50Q29u
bmVjdGlvbiwgJmNvbm5lY3Rpb24pOwotCi0gICAgdWludDY0X3QgZGVzdGluYXRpb25JRCA9IGRl
Y29kZXIuZGVzdGluYXRpb25JRCgpOwotCi0gICAgaWYgKCFkZXN0aW5hdGlvbklEKQotICAgICAg
ICByZXR1cm4gZGlkUmVjZWl2ZVN5bmNXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2UoY29ubmVj
dGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKLQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSkKLSAgICAgICAgcmV0dXJuIG1fbnBSZW1vdGVPYmplY3RNYXAtPmRp
ZFJlY2VpdmVTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwot
Ci0gICAgUGx1Z2luQ29udHJvbGxlclByb3h5KiBwbHVnaW5Db250cm9sbGVyUHJveHkgPSBtX3Bs
dWdpbkNvbnRyb2xsZXJzLmdldChkZWNvZGVyLmRlc3RpbmF0aW9uSUQoKSk7Ci0gICAgaWYgKCFw
bHVnaW5Db250cm9sbGVyUHJveHkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFBsdWdp
bkNvbnRyb2xsZXI6OlBsdWdpbkRlc3RydWN0aW9uUHJvdGVjdG9yIHByb3RlY3RvcihwbHVnaW5D
b250cm9sbGVyUHJveHktPmFzUGx1Z2luQ29udHJvbGxlcigpKTsKLSAgICByZXR1cm4gcGx1Z2lu
Q29udHJvbGxlclByb3h5LT5kaWRSZWNlaXZlU3luY1BsdWdpbkNvbnRyb2xsZXJQcm94eU1lc3Nh
Z2UoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKLX0KLQotdm9pZCBXZWJQcm9j
ZXNzQ29ubmVjdGlvbjo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKLXsKLSAgICAvLyBUaGUg
d2ViIHByb2Nlc3MgY3Jhc2hlZC4gRGVzdHJveSBhbGwgdGhlIHBsdWctaW4gY29udHJvbGxlcnMu
IERlc3Ryb3lpbmcgdGhlIGxhc3QgcGx1Zy1pbiBjb250cm9sbGVyCi0gICAgLy8gd2lsbCBjYXVz
ZSB0aGUgd2ViIHByb2Nlc3MgY29ubmVjdGlvbiBpdHNlbGYgdG8gYmUgZGVzdHJveWVkLgotICAg
IFZlY3RvcjxQbHVnaW5Db250cm9sbGVyUHJveHkqPiBwbHVnaW5Db250cm9sbGVyczsKLSAgICBm
b3IgKGF1dG8gaXQgPSBtX3BsdWdpbkNvbnRyb2xsZXJzLnZhbHVlcygpLmJlZ2luKCksIGVuZCA9
IG1fcGx1Z2luQ29udHJvbGxlcnMudmFsdWVzKCkuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgcGx1Z2luQ29udHJvbGxlcnMuYXBwZW5kKGl0LT5nZXQoKSk7Ci0KLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHBsdWdpbkNvbnRyb2xsZXJzLnNpemUoKTsgKytpKQotICAgICAgICBk
ZXN0cm95UGx1Z2luQ29udHJvbGxlclByb3h5KHBsdWdpbkNvbnRyb2xsZXJzW2ldKTsKLX0KLQot
dm9pZCBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6ZGVzdHJveVBsdWdpbih1aW50NjRfdCBwbHVnaW5J
bnN0YW5jZUlELCBib29sIGFzeW5jaHJvbm91c0NyZWF0aW9uSW5jb21wbGV0ZSwgTWVzc2FnZXM6
OldlYlByb2Nlc3NDb25uZWN0aW9uOjpEZXN0cm95UGx1Z2luOjpEZWxheWVkUmVwbHkmJiByZXBs
eSkKLXsKLSAgICAvLyBXZSByZXR1cm4gaW1tZWRpYXRlbHkgZnJvbSB0aGlzIHN5bmNocm9ub3Vz
IElQQy4gV2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIHBsdWdpbiBkZXN0cnVjdGlvbiBpcyBqdXN0
IGFib3V0IHRvIHN0YXJ0IHNvIGF1ZGlvIHBsYXliYWNrCi0gICAgLy8gd2lsbCBmaW5pc2ggc29v
biBhZnRlciByZXR1cm5pbmcuIEhvd2V2ZXIgd2UgZG9uJ3Qgd2FudCB0byB3YWl0IGZvciBkZXN0
cnVjdGlvbiB0byBjb21wbGV0ZSBmdWxseSBhcyB0aGF0IG1heSB0YWtlIGEgd2hpbGUuCi0gICAg
cmVwbHkoKTsKLQotICAgIC8vIEVuc3VyZSB3ZSBkb24ndCBjbGFtcCBhbnkgdGltZXJzIGR1cmlu
ZyBkZXN0cnVjdGlvbgotICAgIEFjdGl2aXR5QXNzZXJ0aW9uIGFjdGl2aXR5QXNzZXJ0aW9uKFBs
dWdpblByb2Nlc3M6OnNpbmdsZXRvbigpLmNvbm5lY3Rpb25BY3Rpdml0eSgpKTsKLQotICAgIFBs
dWdpbkNvbnRyb2xsZXJQcm94eSogcGx1Z2luQ29udHJvbGxlclByb3h5ID0gbV9wbHVnaW5Db250
cm9sbGVycy5nZXQocGx1Z2luSW5zdGFuY2VJRCk7Ci0gICAgCi0gICAgLy8gSWYgdGhlcmUgaXMg
bm8gUGx1Z2luQ29udHJvbGxlclByb3h5IHRoZW4gdGhpcyBwbHVnLWluIGRvZXNuJ3QgZXhpc3Qg
eWV0IGFuZCB3ZSBwcm9iYWJseSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKCFwbHVnaW5D
b250cm9sbGVyUHJveHkpIHsKLSAgICAgICAgLy8gSWYgdGhlIHBsdWdpbiB3ZSdyZSBzdXBwb3Nl
ZCB0byBkZXN0cm95IHdhcyByZXF1ZXN0ZWQgYXN5bmNocm9ub3VzbHkgYW5kIGRvZXNuJ3QgZXhp
c3QgeWV0LAotICAgICAgICAvLyB3ZSBuZWVkIHRvIGZsYWcgdGhlIGluc3RhbmNlIElEIHNvIGl0
IGlzIG5vdCBjcmVhdGVkIGxhdGVyLgotICAgICAgICBpZiAoYXN5bmNocm9ub3VzQ3JlYXRpb25J
bmNvbXBsZXRlKQotICAgICAgICAgICAgbV9hc3luY2hyb25vdXNJbnN0YW5jZUlEc1RvSWdub3Jl
LmFkZChwbHVnaW5JbnN0YW5jZUlEKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCi0gICAgZGVzdHJveVBsdWdpbkNvbnRyb2xsZXJQcm94eShwbHVnaW5Db250cm9sbGVy
UHJveHkpOwotfQotCi12b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxp
ZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpNZXNzYWdlTmFtZSkKLXsKLSAgICAvLyBG
SVhNRTogSW1wbGVtZW50LgotfQotCi12b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjpjcmVhdGVQ
bHVnaW5JbnRlcm5hbChjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmIGNyZWF0aW9uUGFy
YW1ldGVycywgYm9vbCYgcmVzdWx0LCBib29sJiB3YW50c1doZWVsRXZlbnRzLCB1aW50MzJfdCYg
cmVtb3RlTGF5ZXJDbGllbnRJRCkKLXsKLSAgICBhdXRvIHBsdWdpbkNvbnRyb2xsZXJQcm94eSA9
IG1ha2VVbmlxdWU8UGx1Z2luQ29udHJvbGxlclByb3h5Pih0aGlzLCBjcmVhdGlvblBhcmFtZXRl
cnMpOwotCi0gICAgUGx1Z2luQ29udHJvbGxlclByb3h5KiBwbHVnaW5Db250cm9sbGVyUHJveHlQ
dHIgPSBwbHVnaW5Db250cm9sbGVyUHJveHkuZ2V0KCk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdG8g
YWRkIHRoZSBwcm94eSB0byB0aGUgbWFwIGJlZm9yZSBpbml0aWFsaXppbmcgaXQsIHNpbmNlIHRo
ZSBwbHVnLWluIG1pZ2h0IGNhbGwgb3V0IHRvIHRoZSB3ZWIgcHJvY2VzcyBmcm9tIAotICAgIC8v
IGl0cyBOUFBfTmV3IGZ1bmN0aW9uLiBUaGlzIHdpbGwgaGFuZCBvdmVyIG93bmVyc2hpcCBvZiB0
aGUgcHJveHkgdG8gdGhlIHdlYiBwcm9jZXNzIGNvbm5lY3Rpb24uCi0gICAgYWRkUGx1Z2luQ29u
dHJvbGxlclByb3h5KFdURk1vdmUocGx1Z2luQ29udHJvbGxlclByb3h5KSk7Ci0KLSAgICAvLyBO
b3cgdHJ5IHRvIGluaXRpYWxpemUgdGhlIHBsdWctaW4uCi0gICAgcmVzdWx0ID0gcGx1Z2luQ29u
dHJvbGxlclByb3h5UHRyLT5pbml0aWFsaXplKGNyZWF0aW9uUGFyYW1ldGVycyk7Ci0KLSAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2FudHNXaGVlbEV2ZW50cyA9IHBs
dWdpbkNvbnRyb2xsZXJQcm94eVB0ci0+d2FudHNXaGVlbEV2ZW50cygpOwotI2lmIFBMQVRGT1JN
KENPQ09BKQotICAgIHJlbW90ZUxheWVyQ2xpZW50SUQgPSBwbHVnaW5Db250cm9sbGVyUHJveHlQ
dHItPnJlbW90ZUxheWVyQ2xpZW50SUQoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHJlbW90
ZUxheWVyQ2xpZW50SUQpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246
OmNyZWF0ZVBsdWdpbihjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmIGNyZWF0aW9uUGFy
YW1ldGVycywgTWVzc2FnZXM6OldlYlByb2Nlc3NDb25uZWN0aW9uOjpDcmVhdGVQbHVnaW46OkRl
bGF5ZWRSZXBseSYmIHJlcGx5KQotewotICAgIC8vIEVuc3VyZSB3ZSBkb24ndCBjbGFtcCBhbnkg
dGltZXJzIGR1cmluZyBpbml0aWFsaXphdGlvbgotICAgIEFjdGl2aXR5QXNzZXJ0aW9uIGFjdGl2
aXR5QXNzZXJ0aW9uKFBsdWdpblByb2Nlc3M6OnNpbmdsZXRvbigpLmNvbm5lY3Rpb25BY3Rpdml0
eSgpKTsKLQotICAgIFBsdWdpbkNvbnRyb2xsZXJQcm94eSogcGx1Z2luQ29udHJvbGxlclByb3h5
ID0gbV9wbHVnaW5Db250cm9sbGVycy5nZXQoY3JlYXRpb25QYXJhbWV0ZXJzLnBsdWdpbkluc3Rh
bmNlSUQpOwotCi0gICAgLy8gVGhlIGNvbnRyb2xsZXIgcHJveHkgZm9yIHRoZSBwbHVnLWluIHdl
J3JlIGJlaW5nIGFza2VkIHRvIGNyZWF0ZSBzeW5jaHJvbm91c2x5IG1pZ2h0IGFscmVhZHkgZXhp
c3QgaWYgaXQgd2FzIHJlcXVlc3RlZCBhc3luY2hyb25vdXNseSBiZWZvcmUuCi0gICAgaWYgKHBs
dWdpbkNvbnRyb2xsZXJQcm94eSkgewotICAgICAgICAvLyBJdCBtaWdodCBzdGlsbCBiZSBpbiB0
aGUgbWlkZGxlIG9mIGluaXRpYWxpemF0aW9uIGluIHdoaWNoIGNhc2Ugd2UgaGF2ZSB0byBsZXQg
dGhhdCBpbml0aWFsaXphdGlvbiBjb21wbGV0ZSBhbmQgcmVzcG9uZCB0byB0aGlzIG1lc3NhZ2Ug
bGF0ZXIuCi0gICAgICAgIGlmIChwbHVnaW5Db250cm9sbGVyUHJveHktPmlzSW5pdGlhbGl6aW5n
KCkpIHsKLSAgICAgICAgICAgIHBsdWdpbkNvbnRyb2xsZXJQcm94eS0+c2V0SW5pdGlhbGl6YXRp
b25SZXBseShXVEZNb3ZlKHJlcGx5KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIC8vIElmIGl0cyBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZSB0
aGVuIHdlIG5lZWQgdG8gcmVzcG9uZCB0byB0aGlzIG1lc3NhZ2Ugd2l0aCB0aGUgY29ycmVjdCBp
bmZvcm1hdGlvbiBhYm91dCBpdHMgY3JlYXRpb24uCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAg
ICAgIHJlcGx5KHRydWUsIHBsdWdpbkNvbnRyb2xsZXJQcm94eS0+d2FudHNXaGVlbEV2ZW50cygp
LCBwbHVnaW5Db250cm9sbGVyUHJveHktPnJlbW90ZUxheWVyQ2xpZW50SUQoKSk7Ci0jZWxzZQot
ICAgICAgICByZXBseSh0cnVlLCBwbHVnaW5Db250cm9sbGVyUHJveHktPndhbnRzV2hlZWxFdmVu
dHMoKSwgMCk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAvLyBU
aGUgcGx1Z2luIHdlJ3JlIHN1cHBvc2VkIHRvIGNyZWF0ZSBtaWdodCBoYXZlIGJlZW4gcmVxdWVz
dGVkIGFzeW5jaHJvbm91c2x5IGJlZm9yZS4KLSAgICAvLyBJbiB0aGF0IGNhc2Ugd2UgbmVlZCB0
byBjcmVhdGUgaXQgc3luY2hyb25vdXNseSBub3cgYnV0IGZsYWcgdGhlIGluc3RhbmNlIElEIHNv
IHdlIGRvbid0IHJlY3JlYXRlIGl0IGFzeW5jaHJvbm91c2x5IGxhdGVyLgotICAgIGlmIChjcmVh
dGlvblBhcmFtZXRlcnMuYXN5bmNocm9ub3VzQ3JlYXRpb25JbmNvbXBsZXRlKQotICAgICAgICBt
X2FzeW5jaHJvbm91c0luc3RhbmNlSURzVG9JZ25vcmUuYWRkKGNyZWF0aW9uUGFyYW1ldGVycy5w
bHVnaW5JbnN0YW5jZUlEKTsKLSAgICAKLSAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIGJv
b2wgd2FudHNXaGVlbEV2ZW50cyA9IGZhbHNlOwotICAgIHVpbnQzMl90IHJlbW90ZUxheWVyQ2xp
ZW50SUQgPSAwOwotICAgIGNyZWF0ZVBsdWdpbkludGVybmFsKGNyZWF0aW9uUGFyYW1ldGVycywg
cmVzdWx0LCB3YW50c1doZWVsRXZlbnRzLCByZW1vdGVMYXllckNsaWVudElEKTsKLSAgICAKLSAg
ICByZXBseShyZXN1bHQsIHdhbnRzV2hlZWxFdmVudHMsIHJlbW90ZUxheWVyQ2xpZW50SUQpOwot
fQotCi12b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjpjcmVhdGVQbHVnaW5Bc3luY2hyb25vdXNs
eShjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmIGNyZWF0aW9uUGFyYW1ldGVycykKLXsK
LSAgICAvLyBJbiB0aGUgdGltZSBzaW5jZSB0aGlzIHBsdWdpbiB3YXMgcmVxdWVzdGVkIGFzeW5j
aHJvbm91c2x5IHdlIG1pZ2h0IGhhdmUgY3JlYXRlZCBpdCBzeW5jaHJvbm91c2x5IG9yIGRlc3Ry
b3llZCBpdC4KLSAgICAvLyBJbiBlaXRoZXIgb2YgdGhvc2UgY2FzZXMgd2UgbmVlZCB0byBpZ25v
cmUgdGhpcyBjcmVhdGlvbiByZXF1ZXN0LgotICAgIGlmIChtX2FzeW5jaHJvbm91c0luc3RhbmNl
SURzVG9JZ25vcmUuY29udGFpbnMoY3JlYXRpb25QYXJhbWV0ZXJzLnBsdWdpbkluc3RhbmNlSUQp
KSB7Ci0gICAgICAgIG1fYXN5bmNocm9ub3VzSW5zdGFuY2VJRHNUb0lnbm9yZS5yZW1vdmUoY3Jl
YXRpb25QYXJhbWV0ZXJzLnBsdWdpbkluc3RhbmNlSUQpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIAotICAgIC8vIFRoaXMgdmVyc2lvbiBvZiBDcmVhdGVQbHVnaW4gaXMgb25seSB1c2Vk
IGJ5IHBsdWctaW5zIHRoYXQgYXJlIGtub3duIHRvIGJlaGF2ZSB3aGVuIHN0YXJ0ZWQgYXN5bmNo
cm9ub3VzbHkuCi0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBib29sIHdhbnRzV2hlZWxF
dmVudHMgPSBmYWxzZTsKLSAgICB1aW50MzJfdCByZW1vdGVMYXllckNsaWVudElEID0gMDsKLSAg
ICAKLSAgICBpZiAoY3JlYXRpb25QYXJhbWV0ZXJzLmFydGlmaWNpYWxQbHVnaW5Jbml0aWFsaXph
dGlvbkRlbGF5RW5hYmxlZCkgewotICAgICAgICBTZWNvbmRzIGFydGlmaWNpYWxQbHVnaW5Jbml0
aWFsaXphdGlvbkRlbGF5IHsgNV9zIH07Ci0gICAgICAgIHNsZWVwKGFydGlmaWNpYWxQbHVnaW5J
bml0aWFsaXphdGlvbkRlbGF5KTsKLSAgICB9Ci0KLSAgICAvLyBTaW5jZSBwbHVnLWluIGNyZWF0
aW9uIGNhbiBvZnRlbiBtZXNzYWdlIHRvIHRoZSBXZWJQcm9jZXNzIHN5bmNocm9ub3VzbHkgKHdp
dGggTlBQX0V2YWx1YXRlIGZvciBleGFtcGxlKQotICAgIC8vIHdlIG5lZWQgdG8gbWFrZSBzdXJl
IHRoYXQgdGhlIHdlYiBwcm9jZXNzIHdpbGwgaGFuZGxlIHRoZSBwbHVnLWluIHByb2Nlc3MncyBz
eW5jaHJvbm91cyBtZXNzYWdlcywKLSAgICAvLyBldmVuIGlmIHRoZSB3ZWIgcHJvY2VzcyBpcyB3
YWl0aW5nIG9uIGEgc3luY2hyb25vdXMgcmVwbHkgaXRzZWxmLgotICAgIC8vIE5vcm1hbGx5IHRo
ZSBwbHVnLWluIHByb2Nlc3MgZG9lc24ndCBnaXZlIGl0cyBzeW5jaHJvbm91cyBtZXNzYWdlcyB0
aGUgc3BlY2lhbCBmbGFnIHRvIGFsbG93IGZvciB0aGF0LgotICAgIC8vIFdlIGNhbiBmb3JjZSBp
dCB0byBkbyBzbyBieSBpbmNyZW1lbnRpbmcgdGhlICJEaXNwYXRjaE1lc3NhZ2VNYXJrZWREaXNw
YXRjaFdoZW5XYWl0aW5nRm9yU3luY1JlcGx5IiBjb3VudC4KLSAgICBtX2Nvbm5lY3Rpb24tPmlu
Y3JlbWVudERpc3BhdGNoTWVzc2FnZU1hcmtlZERpc3BhdGNoV2hlbldhaXRpbmdGb3JTeW5jUmVw
bHlDb3VudCgpOwotCi0gICAgLy8gVGhlIGNhbGwgdG8gY3JlYXRlUGx1Z2luSW50ZXJuYWwgY2Fu
IHBvdGVudGlhbGx5IGNhdXNlIHRoZSBwbHVnLWluIHRvIGJlIGRlc3Ryb3llZCBhbmQKLSAgICAv
LyB0aHVzIGZyZWUgdGhlIFdlYlByb2Nlc3NDb25uZWN0aW9uIG9iamVjdC4gUHJvdGVjdCBpdC4K
LSAgICBSZWY8V2ViUHJvY2Vzc0Nvbm5lY3Rpb24+IHByb3RlY3QoKnRoaXMpOwotICAgIGNyZWF0
ZVBsdWdpbkludGVybmFsKGNyZWF0aW9uUGFyYW1ldGVycywgcmVzdWx0LCB3YW50c1doZWVsRXZl
bnRzLCByZW1vdGVMYXllckNsaWVudElEKTsKLQotICAgIGlmICghbV9jb25uZWN0aW9uKSB7Ci0g
ICAgICAgIC8vIGNyZWF0ZVBsdWdpbkludGVybmFsIGNhdXNlZCB0aGUgY29ubmVjdGlvbiB0byBn
byBhd2F5LgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb25uZWN0aW9uLT5kZWNy
ZW1lbnREaXNwYXRjaE1lc3NhZ2VNYXJrZWREaXNwYXRjaFdoZW5XYWl0aW5nRm9yU3luY1JlcGx5
Q291bnQoKTsKLQotICAgIC8vIElmIHNvbWVvbmUgYXNrZWQgZm9yIHRoaXMgcGx1Zy1pbiBzeW5j
aHJvbm91c2x5IHdoaWxlIGl0IHdhcyBpbiB0aGUgbWlkZGxlIG9mIGJlaW5nIGNyZWF0ZWQgdGhl
biB3ZSBuZWVkIHBlcmZvcm0gdGhlCi0gICAgLy8gc3luY2hyb25vdXMgcmVwbHkgaW5zdGVhZCBv
ZiBzZW5kaW5nIHRoZSBhc3luY2hyb25vdXMgcmVwbHkuCi0gICAgUGx1Z2luQ29udHJvbGxlclBy
b3h5KiBwbHVnaW5Db250cm9sbGVyUHJveHkgPSBtX3BsdWdpbkNvbnRyb2xsZXJzLmdldChjcmVh
dGlvblBhcmFtZXRlcnMucGx1Z2luSW5zdGFuY2VJRCk7Ci0gICAgQVNTRVJUKHBsdWdpbkNvbnRy
b2xsZXJQcm94eSk7Ci0gICAgaWYgKGF1dG8gZGVsYXllZFN5bmNSZXBseSA9IHBsdWdpbkNvbnRy
b2xsZXJQcm94eS0+dGFrZUluaXRpYWxpemF0aW9uUmVwbHkoKSkgewotICAgICAgICBkZWxheWVk
U3luY1JlcGx5KHJlc3VsdCwgd2FudHNXaGVlbEV2ZW50cywgcmVtb3RlTGF5ZXJDbGllbnRJRCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBPdGhlcndpc2UsIHNlbmQgdGhlIGFz
eW5jaHJvbm91cyByZXN1bHRzIG5vdy4KLSAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICBtX2Nv
bm5lY3Rpb24tPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Qcm94eTo6RGlkRmFpbFRvQ3JlYXRl
UGx1Z2luKCksIE1lc3NhZ2VzOjpQbHVnaW5Qcm94eTo6RGlkRmFpbFRvQ3JlYXRlUGx1Z2luOjpS
ZXBseSgpLCBjcmVhdGlvblBhcmFtZXRlcnMucGx1Z2luSW5zdGFuY2VJRCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBtX2Nvbm5lY3Rpb24tPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVn
aW5Qcm94eTo6RGlkQ3JlYXRlUGx1Z2luKHdhbnRzV2hlZWxFdmVudHMsIHJlbW90ZUxheWVyQ2xp
ZW50SUQpLCBNZXNzYWdlczo6UGx1Z2luUHJveHk6OkRpZENyZWF0ZVBsdWdpbjo6UmVwbHkoKSwg
Y3JlYXRpb25QYXJhbWV0ZXJzLnBsdWdpbkluc3RhbmNlSUQpOwotfQotICAgIAotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlv
bi5oIGIvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxNzY2ZmQ0YTEyNTNhZGExZDVkMjI3ZjJh
Nzk3NWJiYTBiZjU0ZWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIkNvbm5lY3Rp
b24uaCIKLSNpbmNsdWRlICJQbHVnaW4uaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzQ29ubmVjdGlv
bk1lc3NhZ2VzUmVwbGllcy5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIE5QUmVtb3Rl
T2JqZWN0TWFwOwotY2xhc3MgUGx1Z2luQ29udHJvbGxlclByb3h5Owotc3RydWN0IFBsdWdpbkNy
ZWF0aW9uUGFyYW1ldGVyczsKLSAgICAKLS8vIEEgY29ubmVjdGlvbiBmcm9tIGEgcGx1Zy1pbiBw
cm9jZXNzIHRvIGEgd2ViIHByb2Nlc3MuCi0KLWNsYXNzIFdlYlByb2Nlc3NDb25uZWN0aW9uIDog
cHVibGljIFJlZkNvdW50ZWQ8V2ViUHJvY2Vzc0Nvbm5lY3Rpb24+LCBJUEM6OkNvbm5lY3Rpb246
OkNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJQcm9jZXNzQ29ubmVjdGlvbj4g
Y3JlYXRlKElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllcik7Ci0gICAgdmlydHVhbCB+V2ViUHJv
Y2Vzc0Nvbm5lY3Rpb24oKTsKLQotICAgIElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQotICAgIE5QUmVtb3RlT2JqZWN0TWFw
KiBucFJlbW90ZU9iamVjdE1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fbnBSZW1vdGVPYmplY3RNYXAu
Z2V0KCk7IH0KLQotICAgIHZvaWQgcmVtb3ZlUGx1Z2luQ29udHJvbGxlclByb3h5KFBsdWdpbkNv
bnRyb2xsZXJQcm94eSosIFBsdWdpbiopOwotCi0gICAgc3RhdGljIHZvaWQgc2V0R2xvYmFsRXhj
ZXB0aW9uKGNvbnN0IFN0cmluZyYpOwotICAgIAotcHJpdmF0ZToKLSAgICBXZWJQcm9jZXNzQ29u
bmVjdGlvbihJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIpOwotCi0gICAgdm9pZCBhZGRQbHVn
aW5Db250cm9sbGVyUHJveHkoc3RkOjp1bmlxdWVfcHRyPFBsdWdpbkNvbnRyb2xsZXJQcm94eT4p
OwotCi0gICAgdm9pZCBkZXN0cm95UGx1Z2luQ29udHJvbGxlclByb3h5KFBsdWdpbkNvbnRyb2xs
ZXJQcm94eSopOwotCi0gICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKLSAgICB2b2lkIGRp
ZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRl
OwotICAgIGJvb2wgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYsIFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
aWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZFJlY2VpdmVJ
bnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VOYW1lKSBvdmVycmlk
ZTsKLQotICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMuCi0gICAgdm9pZCBkaWRSZWNlaXZlV2ViUHJv
Y2Vzc0Nvbm5lY3Rpb25NZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwot
ICAgIGJvb2wgZGlkUmVjZWl2ZVN5bmNXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mKTsKLSAg
ICB2b2lkIGNyZWF0ZVBsdWdpbihjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmLCBNZXNz
YWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdpbkRlbGF5ZWRSZXBseSYmKTsK
LSAgICB2b2lkIGNyZWF0ZVBsdWdpbkFzeW5jaHJvbm91c2x5KGNvbnN0IFBsdWdpbkNyZWF0aW9u
UGFyYW1ldGVycyYpOwotICAgIHZvaWQgZGVzdHJveVBsdWdpbih1aW50NjRfdCBwbHVnaW5JbnN0
YW5jZUlELCBib29sIGFzeW5jaHJvbm91c0NyZWF0aW9uSW5jb21wbGV0ZSwgTWVzc2FnZXM6Oldl
YlByb2Nlc3NDb25uZWN0aW9uOjpEZXN0cm95UGx1Z2luRGVsYXllZFJlcGx5JiYpOwotICAgIAot
ICAgIHZvaWQgY3JlYXRlUGx1Z2luSW50ZXJuYWwoY29uc3QgUGx1Z2luQ3JlYXRpb25QYXJhbWV0
ZXJzJiwgYm9vbCYgcmVzdWx0LCBib29sJiB3YW50c1doZWVsRXZlbnRzLCB1aW50MzJfdCYgcmVt
b3RlTGF5ZXJDbGllbnRJRCk7Ci0KLSAgICBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5l
Y3Rpb247Ci0KLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luQ29u
dHJvbGxlclByb3h5Pj4gbV9wbHVnaW5Db250cm9sbGVyczsKLSAgICBSZWZQdHI8TlBSZW1vdGVP
YmplY3RNYXA+IG1fbnBSZW1vdGVPYmplY3RNYXA7Ci0gICAgSGFzaFNldDx1aW50NjRfdD4gbV9h
c3luY2hyb25vdXNJbnN0YW5jZUlEc1RvSWdub3JlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5t
ZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlhZTFjNzVmMTFkOGM1
NmY3ZmYyN2E0N2MyOTQ5NjZjMTg0NjE1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvV2ViUHJvY2Vzc0Nv
bm5lY3Rpb24ubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0jIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMK
LSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKLQotbWVzc2FnZXMgLT4gV2ViUHJvY2Vzc0Nvbm5lY3Rpb24gTGVnYWN5UmVj
ZWl2ZXIgewotICAgICMgQ3JlYXRlcyBhIHBsdWctaW4gaW5zdGFuY2UgdXNpbmcgdGhlIGdpdmVu
IGNyZWF0aW9uIHBhcmFtZXRlcnMuCi0gICAgQ3JlYXRlUGx1Z2luKHN0cnVjdCBXZWJLaXQ6OlBs
dWdpbkNyZWF0aW9uUGFyYW1ldGVycyBwbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMpIC0+IChib29s
IGNyZWF0aW9uUmVzdWx0LCBib29sIHdhbnRzV2hlZWxFdmVudHMsIHVpbnQzMl90IHJlbW90ZUxh
eWVyQ2xpZW50SUQpIFN5bmNocm9ub3VzCi0KLSAgICAjIENyZWF0ZXMgYSBwbHVnLWluIGluc3Rh
bmNlIGFzeW5jaHJvbm91c2x5IHVzaW5nIHRoZSBnaXZlbiBjcmVhdGlvbiBwYXJhbWV0ZXJzLgot
ICAgIENyZWF0ZVBsdWdpbkFzeW5jaHJvbm91c2x5KHN0cnVjdCBXZWJLaXQ6OlBsdWdpbkNyZWF0
aW9uUGFyYW1ldGVycyBwbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMpCi0KLSAgICAjIERlc3Ryb3lz
IHRoZSBwbHVnLWluIGluc3RhbmNlIHdpdGggdGhlIGdpdmVuIGluc3RhbmNlIElELgotICAgIERl
c3Ryb3lQbHVnaW4odWludDY0X3QgcGx1Z2luSW5zdGFuY2VJRCwgYm9vbCBhc3luY2hyb25vdXND
cmVhdGlvbkluY29tcGxldGUpIC0+ICgpIFN5bmNocm9ub3VzCi19Ci0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Db250cm9sbGVyUHJv
eHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpbkNvbnRyb2xs
ZXJQcm94eU1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE2Y2QyNzY2OWQz
NTM5MzliZjI0YTc5NjFjNTM5M2IyMjJhNzcwMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvbWFjL1BsdWdp
bkNvbnRyb2xsZXJQcm94eU1hYy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJQbHVnaW5Db250cm9sbGVy
UHJveHkuaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW1wb3J0ICJM
YXllckhvc3RpbmdDb250ZXh0LmgiCi0jaW1wb3J0ICJMYXllclRyZWVDb250ZXh0LmgiCi0jaW1w
b3J0ICJQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMuaCIKLSNpbXBvcnQgIlBsdWdpblByb2Nlc3Mu
aCIKLSNpbXBvcnQgIlBsdWdpblByb2Nlc3NQcm94eU1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJQbHVn
aW5Qcm94eU1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJXZWJQcm9jZXNzQ29ubmVjdGlvbi5oIgotI2lt
cG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNz
Q29udGV4dENHLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIFBsdWdpbkNvbnRyb2xs
ZXJQcm94eTo6cGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZChib29sIHBsdWdpbkhhc0Zv
Y3VzQW5kV2luZG93SGFzRm9jdXMpCi17Ci0gICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OlBsdWdpblByb3h5OjpQbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFu
Z2VkKHBsdWdpbkhhc0ZvY3VzQW5kV2luZG93SGFzRm9jdXMpLCBtX3BsdWdpbkluc3RhbmNlSUQp
OwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6c2V0Q29tcGxleFRleHRJbnB1dFN0
YXRlKFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSBwbHVnaW5Db21wbGV4VGV4dElucHV0U3Rh
dGUpCi17Ci0gICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBs
dWdpblByb3h5OjpTZXRDb21wbGV4VGV4dElucHV0U3RhdGUocGx1Z2luQ29tcGxleFRleHRJbnB1
dFN0YXRlKSwgbV9wbHVnaW5JbnN0YW5jZUlELCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVz
c2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7Ci19Ci0KLWNvbnN0IE1hY2hTZW5kUmln
aHQmIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6Y29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0KCkK
LXsKLSAgICByZXR1cm4gUGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkuY29tcG9zaXRpbmdSZW5k
ZXJTZXJ2ZXJQb3J0KCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpwbGF0Zm9y
bUluaXRpYWxpemUoY29uc3QgUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzJiBjcmVhdGlvblBhcmFt
ZXRlcnMpCi17Ci0gICAgQVNTRVJUKCFtX2xheWVySG9zdGluZ0NvbnRleHQpOwotICAgIHVwZGF0
ZUxheWVySG9zdGluZ0NvbnRleHQoY3JlYXRpb25QYXJhbWV0ZXJzLnBhcmFtZXRlcnMubGF5ZXJI
b3N0aW5nTW9kZSk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpwbGF0Zm9ybURl
c3Ryb3koKQotewotICAgIGlmICghbV9sYXllckhvc3RpbmdDb250ZXh0KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2xheWVySG9zdGluZ0NvbnRleHQtPmludmFsaWRhdGUoKTsKLSAgICBtX2xh
eWVySG9zdGluZ0NvbnRleHQgPSBudWxscHRyOwotfQotCi11aW50MzJfdCBQbHVnaW5Db250cm9s
bGVyUHJveHk6OnJlbW90ZUxheWVyQ2xpZW50SUQoKSBjb25zdAotewotICAgIGlmICghbV9sYXll
ckhvc3RpbmdDb250ZXh0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2xheWVy
SG9zdGluZ0NvbnRleHQtPmNvbnRleHRJRCgpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQ
cm94eTo6cGxhdGZvcm1HZW9tZXRyeURpZENoYW5nZSgpCi17Ci0gICAgQ0FMYXllciAqcGx1Z2lu
TGF5ZXIgPSBtX3BsdWdpbi0+cGx1Z2luTGF5ZXIoKTsKLQotICAgIC8vIFdlIGRvbid0IHdhbnQg
dG8gYW5pbWF0ZSB0byB0aGUgbmV3IHNpemUgc28gd2UgZGlzYWJsZSBhY3Rpb25zIGZvciB0aGlz
IHRyYW5zYWN0aW9uLgotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBbQ0FUcmFuc2Fj
dGlvbiBzZXRWYWx1ZTpAWUVTIGZvcktleTprQ0FUcmFuc2FjdGlvbkRpc2FibGVBY3Rpb25zXTsK
LSAgICBbcGx1Z2luTGF5ZXIgc2V0RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCBtX3BsdWdpblNpemUu
d2lkdGgoKSwgbV9wbHVnaW5TaXplLmhlaWdodCgpKV07Ci0gICAgW0NBVHJhbnNhY3Rpb24gY29t
bWl0XTsKLX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OndpbmRvd0FuZFZpZXdGcmFt
ZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29y
ZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGlu
YXRlcykKLXsKLSAgICBtX3BsdWdpbi0+d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQod2luZG93
RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKTsK
LX0KLQotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnNlbmRDb21wbGV4VGV4dElucHV0KGNv
bnN0IFN0cmluZyYgdGV4dElucHV0KQotewotICAgIG1fcGx1Z2luLT5zZW5kQ29tcGxleFRleHRJ
bnB1dCh0ZXh0SW5wdXQpOwotfQotCi12b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6c2V0TGF5
ZXJIb3N0aW5nTW9kZSh1aW50MzJfdCBvcGFxdWVMYXllckhvc3RpbmdNb2RlKQotewotICAgIExh
eWVySG9zdGluZ01vZGUgbGF5ZXJIb3N0aW5nTW9kZSA9IHN0YXRpY19jYXN0PExheWVySG9zdGlu
Z01vZGU+KG9wYXF1ZUxheWVySG9zdGluZ01vZGUpOwotCi0gICAgbV9wbHVnaW4tPnNldExheWVy
SG9zdGluZ01vZGUobGF5ZXJIb3N0aW5nTW9kZSk7Ci0gICAgdXBkYXRlTGF5ZXJIb3N0aW5nQ29u
dGV4dChsYXllckhvc3RpbmdNb2RlKTsKLQotICAgIGlmIChtX2xheWVySG9zdGluZ0NvbnRleHQp
Ci0gICAgICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVn
aW5Qcm94eTo6U2V0TGF5ZXJIb3N0aW5nQ29udGV4dElEKG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+
Y29udGV4dElEKCkpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwotfQotCi12b2lkIFBsdWdpbkNvbnRy
b2xsZXJQcm94eTo6dXBkYXRlTGF5ZXJIb3N0aW5nQ29udGV4dChMYXllckhvc3RpbmdNb2RlIGxh
eWVySG9zdGluZ01vZGUpCi17Ci0gICAgQ0FMYXllciAqcGxhdGZvcm1MYXllciA9IG1fcGx1Z2lu
LT5wbHVnaW5MYXllcigpOwotICAgIGlmICghcGxhdGZvcm1MYXllcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1fbGF5ZXJIb3N0aW5nQ29udGV4dCkgewotICAgICAgICBpZiAobV9sYXll
ckhvc3RpbmdDb250ZXh0LT5sYXllckhvc3RpbmdNb2RlKCkgPT0gbGF5ZXJIb3N0aW5nTW9kZSkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX2xheWVySG9zdGluZ0NvbnRleHQtPmlu
dmFsaWRhdGUoKTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGxheWVySG9zdGluZ01vZGUpIHsKLSAg
ICAgICAgY2FzZSBMYXllckhvc3RpbmdNb2RlOjpJblByb2Nlc3M6Ci0gICAgICAgICAgICBtX2xh
eWVySG9zdGluZ0NvbnRleHQgPSBMYXllckhvc3RpbmdDb250ZXh0OjpjcmVhdGVGb3JQb3J0KFBs
dWdpblByb2Nlc3M6OnNpbmdsZXRvbigpLmNvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydCgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotI2lmIEhBVkUoT1VUX09GX1BST0NFU1NfTEFZRVJfSE9TVElO
RykKLSAgICAgICAgY2FzZSBMYXllckhvc3RpbmdNb2RlOjpPdXRPZlByb2Nlc3M6Ci0gICAgICAg
ICAgICBtX2xheWVySG9zdGluZ0NvbnRleHQgPSBMYXllckhvc3RpbmdDb250ZXh0OjpjcmVhdGVG
b3JFeHRlcm5hbFBsdWdpbkhvc3RpbmdQcm9jZXNzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSNl
bmRpZgotICAgIH0KLQotICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+c2V0Q29sb3JTcGFjZShX
ZWJDb3JlOjpzUkdCQ29sb3JTcGFjZVJlZigpKTsKLSAgICBtX2xheWVySG9zdGluZ0NvbnRleHQt
PnNldENvbG9yTWF0Y2hVbnRhZ2dlZENvbnRlbnQodHJ1ZSk7Ci0KLSAgICBtX2xheWVySG9zdGlu
Z0NvbnRleHQtPnNldFJvb3RMYXllcihwbGF0Zm9ybUxheWVyKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc01hYy5t
bSBiL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc01hYy5tbQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MzNjJjODFjNjkxMTA4Y2RhZjc3YjJlNzlh
YTcwOTdiY2EyZDRkOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpblByb2Nlc3NNYWMubW0K
KysrIC9kZXYvbnVsbApAQCAtMSw1MTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0
ICJjb25maWcuaCIKLSNpbXBvcnQgIlBsdWdpblByb2Nlc3MuaCIKLQotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotCi0jaW1wb3J0ICJBcmd1bWVudENvZGVycy5oIgotI2ltcG9ydCAi
TmV0c2NhcGVQbHVnaW4uaCIKLSNpbXBvcnQgIlBsdWdpbkluZm9TdG9yZS5oIgotI2ltcG9ydCAi
UGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgotI2ltcG9ydCAiUGx1Z2luUHJvY2Vz
c1Byb3h5TWVzc2FnZXMuaCIKLSNpbXBvcnQgIlBsdWdpblByb2Nlc3NTaGltLmgiCi0jaW1wb3J0
ICJQbHVnaW5TYW5kYm94UHJvZmlsZS5oIgotI2ltcG9ydCAiU2FuZGJveEluaXRpYWxpemF0aW9u
UGFyYW1ldGVycy5oIgotI2ltcG9ydCAiU2FuZGJveFV0aWxpdGllcy5oIgotI2ltcG9ydCA8Q29y
ZUF1ZGlvL0F1ZGlvSGFyZHdhcmUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5n
cy5oPgotI2ltcG9ydCA8V2ViQ29yZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmg+Ci0jaW1wb3J0
IDxkbGZjbi5oPgotI2ltcG9ydCA8bWFjaC1vL2R5bGQuaD4KLSNpbXBvcnQgPG1hY2gtby9nZXRz
ZWN0Lmg+Ci0jaW1wb3J0IDxtYWNoL21hY2hfdm0uaD4KLSNpbXBvcnQgPG1hY2gvdm1fc3RhdGlz
dGljcy5oPgotI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NmL0NG
TmV0d29ya1NQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNp
bXBvcnQgPHBhbC9zcGkvY29jb2EvTGF1bmNoU2VydmljZXNTUEkuaD4KLSNpbXBvcnQgPHBhbC9z
cGkvbWFjL0hJVG9vbGJveFNQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNBcHBsaWNhdGlv
blNQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNXaW5kb3dTUEkuaD4KLSNpbXBvcnQgPHN5
c2V4aXRzLmg+Ci0jaW1wb3J0IDx3dGYvSGFzaFNldC5oPgotI2ltcG9ydCA8d3RmL05ldmVyRGVz
dHJveWVkLmg+Ci0jaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KLQotY29uc3QgQ0ZT
dHJpbmdSZWYga0xTUGx1Z0luQnVuZGxlSWRlbnRpZmllcktleSA9IENGU1RSKCJMU1BsdWdJbkJ1
bmRsZUlkZW50aWZpZXJLZXkiKTsKLQotLy8gVGhlc2UgdmFsdWVzIHdlcmUgY2hvc2VuIHRvIG1h
dGNoIGRlZmF1bHQgTlNVUkxDYWNoZSBzaXplcyBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcu
Ci1jb25zdCBOU1VJbnRlZ2VyIHBsdWdpbk1lbW9yeUNhY2hlU2l6ZSA9IDUxMjAwMDsKLWNvbnN0
IE5TVUludGVnZXIgcGx1Z2luRGlza0NhY2hlU2l6ZSA9IDIwMDAwMDAwOwotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotY2xhc3MgRnVsbHNjcmVlbldpbmRvd1RyYWNrZXIgewotICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEZ1bGxzY3JlZW5XaW5kb3dUcmFja2VyKTsKLQotcHVibGljOgotICAgIEZ1
bGxzY3JlZW5XaW5kb3dUcmFja2VyKCkgeyB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gdm9pZCB3aW5kb3dTaG93bihUIHdpbmRvdyk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
dm9pZCB3aW5kb3dIaWRkZW4oVCB3aW5kb3cpOwotCi1wcml2YXRlOgotICAgIEhhc2hTZXQ8Q0dX
aW5kb3dJRD4gbV93aW5kb3dzOwotfTsKLQotc3RhdGljIGJvb2wgcmVjdENvdmVyc0FueVNjcmVl
bihOU1JlY3QgcmVjdCkKLXsKLSAgICBmb3IgKE5TU2NyZWVuICpzY3JlZW4gaW4gW05TU2NyZWVu
IHNjcmVlbnNdKSB7Ci0gICAgICAgIGlmIChOU0NvbnRhaW5zUmVjdChyZWN0LCBbc2NyZWVuIGZy
YW1lXSkpCi0gICAgICAgICAgICByZXR1cm4gWUVTOwotICAgIH0KLSAgICByZXR1cm4gTk87Ci19
Ci0KLXN0YXRpYyBib29sIHdpbmRvd0NvdmVyc0FueVNjcmVlbihOU1dpbmRvdyAqd2luZG93KQot
ewotICAgIHJldHVybiByZWN0Q292ZXJzQW55U2NyZWVuKHdpbmRvdy5mcmFtZSk7Ci19Ci0KLXN0
YXRpYyBDR1dpbmRvd0lEIGNnV2luZG93SUQoTlNXaW5kb3cgKndpbmRvdykKLXsKLSAgICByZXR1
cm4gd2luZG93LndpbmRvd051bWJlcjsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQg
RnVsbHNjcmVlbldpbmRvd1RyYWNrZXI6OndpbmRvd1Nob3duKFQgd2luZG93KQotewotICAgIENH
V2luZG93SUQgd2luZG93SUQgPSBjZ1dpbmRvd0lEKHdpbmRvdyk7Ci0gICAgaWYgKCF3aW5kb3dJ
RCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgdGhpcyB3aW5kb3cgaXMgYWxyZWFkeSB2
aXNpYmxlIHRoZW4gdGhlcmUgaXMgbm90aGluZyB0byBkby4KLSAgICBpZiAobV93aW5kb3dzLmNv
bnRhaW5zKHdpbmRvd0lEKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIElmIHRoZSB3
aW5kb3cgaXMgbm90IGZ1bGwtc2NyZWVuIHRoZW4gd2UncmUgbm90IGludGVyZXN0ZWQgaW4gaXQu
Ci0gICAgaWYgKCF3aW5kb3dDb3ZlcnNBbnlTY3JlZW4od2luZG93KSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYm9vbCB3aW5kb3dTZXRXYXNFbXB0eSA9IG1fd2luZG93cy5pc0VtcHR5KCk7Ci0K
LSAgICBtX3dpbmRvd3MuYWRkKHdpbmRvd0lEKTsKLSAgICAKLSAgICAvLyBJZiB0aGlzIGlzIHRo
ZSBmaXJzdCBmdWxsIHNjcmVlbiB3aW5kb3cgdG8gYmUgc2hvd24sIG5vdGlmeSB0aGUgVUkgcHJv
Y2Vzcy4KLSAgICBpZiAod2luZG93U2V0V2FzRW1wdHkpCi0gICAgICAgIFBsdWdpblByb2Nlc3M6
OnNpbmdsZXRvbigpLnNldEZ1bGxzY3JlZW5XaW5kb3dJc1Nob3dpbmcodHJ1ZSk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEZ1bGxzY3JlZW5XaW5kb3dUcmFja2VyOjp3aW5kb3dI
aWRkZW4oVCB3aW5kb3cpCi17Ci0gICAgQ0dXaW5kb3dJRCB3aW5kb3dJRCA9IGNnV2luZG93SUQo
d2luZG93KTsKLSAgICBpZiAoIXdpbmRvd0lEKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJ
ZiB0aGlzIGlzIG5vdCBhIHdpbmRvdyB0aGF0IHdlJ3JlIHRyYWNraW5nIHRoZW4gdGhlcmUgaXMg
bm90aGluZyB0byBkby4KLSAgICBpZiAoIW1fd2luZG93cy5yZW1vdmUod2luZG93SUQpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB0aGlzIHdhcyB0aGUgbGFzdCBmdWxsIHNjcmVlbiB3
aW5kb3cgdGhhdCB3YXMgdmlzaWJsZSwgbm90aWZ5IHRoZSBVSSBwcm9jZXNzLgotICAgIGlmICht
X3dpbmRvd3MuaXNFbXB0eSgpKQotICAgICAgICBQbHVnaW5Qcm9jZXNzOjpzaW5nbGV0b24oKS5z
ZXRGdWxsc2NyZWVuV2luZG93SXNTaG93aW5nKGZhbHNlKTsKLX0KLQotc3RhdGljIEZ1bGxzY3Jl
ZW5XaW5kb3dUcmFja2VyJiBmdWxsc2NyZWVuV2luZG93VHJhY2tlcigpCi17Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEZ1bGxzY3JlZW5XaW5kb3dUcmFja2VyPiBmdWxsc2NyZWVuV2luZG93
VHJhY2tlcjsKLSAgICByZXR1cm4gZnVsbHNjcmVlbldpbmRvd1RyYWNrZXI7Ci19Ci0KLXN0YXRp
YyB2b2lkIHNldE1vZGFsKGJvb2wgbW9kYWxXaW5kb3dJc1Nob3dpbmcpCi17Ci0gICAgUGx1Z2lu
UHJvY2Vzczo6c2luZ2xldG9uKCkuc2V0TW9kYWxXaW5kb3dJc1Nob3dpbmcobW9kYWxXaW5kb3dJ
c1Nob3dpbmcpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbW9kYWxDb3VudDsKLQotc3RhdGljIHZv
aWQgYmVnaW5Nb2RhbCgpCi17Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVH
SU4KLSAgICAvLyBNYWtlIHN1cmUgdG8gbWFrZSBvdXJzZWx2ZXMgdGhlIGZyb250IHByb2Nlc3MK
LSAgICBQcm9jZXNzU2VyaWFsTnVtYmVyIHBzbjsKLSAgICBHZXRDdXJyZW50UHJvY2VzcygmcHNu
KTsKLSAgICBTZXRGcm9udFByb2Nlc3MoJnBzbik7Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECi0KLSAgICBpZiAoIW1vZGFsQ291bnQrKykKLSAgICAgICAgc2V0TW9kYWwo
dHJ1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuZE1vZGFsKCkKLXsKLSAgICBpZiAoIS0tbW9kYWxD
b3VudCkKLSAgICAgICAgc2V0TW9kYWwoZmFsc2UpOwotfQotCi1zdGF0aWMgSU1QIE5TQXBwbGlj
YXRpb25fUnVuTW9kYWxGb3JXaW5kb3c7Ci0KLXN0YXRpYyBOU0ludGVnZXIgcmVwbGFjZWRSdW5N
b2RhbEZvcldpbmRvdyhpZCBzZWxmLCBTRUwgX2NtZCwgTlNXaW5kb3cqIHdpbmRvdykKLXsKLSAg
ICBiZWdpbk1vZGFsKCk7Ci0gICAgTlNJbnRlZ2VyIHJlc3VsdCA9ICgoTlNJbnRlZ2VyICgqKShp
ZCwgU0VMLCBOU1dpbmRvdyAqKSlOU0FwcGxpY2F0aW9uX1J1bk1vZGFsRm9yV2luZG93KShzZWxm
LCBfY21kLCB3aW5kb3cpOwotICAgIGVuZE1vZGFsKCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1zdGF0aWMgYm9vbCBvbGRQbHVnaW5Qcm9jZXNzTmFtZVNob3VsZEVxdWFsTmV3UGx1Z2lu
UHJvY2Vzc05hbWVGb3JBZG9iZVJlYWRlcjsKLQotc3RhdGljIGJvb2wgaXNBZG9iZUFjcm9iYXRB
ZGRyZXNzKGNvbnN0IHZvaWQqIGFkZHJlc3MpCi17Ci0gICAgRGxfaW5mbyBpbWFnZUluZm87Ci0g
ICAgaWYgKCFkbGFkZHIoYWRkcmVzcywgJmltYWdlSW5mbykpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGNvbnN0IGNoYXIqIHBhdGhTdWZmaXggPSAiL0NvbnRlbnRzL0ZyYW1ld29ya3Mv
QWNyb2JhdC5mcmFtZXdvcmsvQWNyb2JhdCI7Ci0KLSAgICBpbnQgcGF0aFN1ZmZpeExlbmd0aCA9
IHN0cmxlbihwYXRoU3VmZml4KTsKLSAgICBpbnQgaW1hZ2VGaWxlUGF0aExlbmd0aCA9IHN0cmxl
bihpbWFnZUluZm8uZGxpX2ZuYW1lKTsKLQotICAgIGlmIChpbWFnZUZpbGVQYXRoTGVuZ3RoIDwg
cGF0aFN1ZmZpeExlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHN0cmNt
cChpbWFnZUluZm8uZGxpX2ZuYW1lICsgKGltYWdlRmlsZVBhdGhMZW5ndGggLSBwYXRoU3VmZml4
TGVuZ3RoKSwgcGF0aFN1ZmZpeCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBzdHJpbmdDb21wYXJlKENGU3RyaW5nUmVmIGEsIENG
U3RyaW5nUmVmIGIsIENGU3RyaW5nQ29tcGFyZUZsYWdzIG9wdGlvbnMsIHZvaWQqIHJldHVybkFk
ZHJlc3MsIENGQ29tcGFyaXNvblJlc3VsdCYgcmVzdWx0KQotewotICAgIGlmIChwdGhyZWFkX21h
aW5fbnAoKSAhPSAxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW9sZFBsdWdp
blByb2Nlc3NOYW1lU2hvdWxkRXF1YWxOZXdQbHVnaW5Qcm9jZXNzTmFtZUZvckFkb2JlUmVhZGVy
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAob3B0aW9ucyAhPSBrQ0ZDb21wYXJl
Q2FzZUluc2Vuc2l0aXZlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBjaGFy
KiBhQ1N0cmluZyA9IENGU3RyaW5nR2V0Q1N0cmluZ1B0cihhLCBrQ0ZTdHJpbmdFbmNvZGluZ0FT
Q0lJKTsKLSAgICBpZiAoIWFDU3RyaW5nKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBj
b25zdCBjaGFyKiBiQ1N0cmluZyA9IENGU3RyaW5nR2V0Q1N0cmluZ1B0cihiLCBrQ0ZTdHJpbmdF
bmNvZGluZ0FTQ0lJKTsKLSAgICBpZiAoIWJDU3RyaW5nKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAoc3RyY21wKGFDU3RyaW5nLCAiY29tLmFwcGxlLldlYktpdC5QbHVnaW5Qcm9j
ZXNzIikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzdHJjbXAoYkNTdHJpbmcs
ICJjb20uYXBwbGUuV2ViS2l0LlBsdWdpbi42NCIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAvLyBDaGVjayBpZiB0aGUgTEhTIHN0cmluZyBjb21lcyBmcm9tIHRoZSBBY3JvYmF0IGZy
YW1ld29yay4KLSAgICBpZiAoIWlzQWRvYmVBY3JvYmF0QWRkcmVzcyhhKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIHJldHVybiBhZHJlc3MgaXMgcGFydCBv
ZiB0aGUgQWNyb2JhdCBmcmFtZXdvcmsgYXMgd2VsbC4KLSAgICBpZiAoIWlzQWRvYmVBY3JvYmF0
QWRkcmVzcyhyZXR1cm5BZGRyZXNzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmVz
dWx0ID0ga0NGQ29tcGFyZUVxdWFsVG87Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2
b2lkIGluaXRpYWxpemVTaGltKCkKLXsKLSAgICAvLyBJbml0aWFsaXplIHRoZSBzaGltIGZvciAz
Mi1iaXQgb25seS4KLSAgICBjb25zdCBQbHVnaW5Qcm9jZXNzU2hpbUNhbGxiYWNrcyBjYWxsYmFj
a3MgPSB7Ci0gICAgICAgIHN0cmluZ0NvbXBhcmUsCi0gICAgfTsKLQotICAgIFBsdWdpblByb2Nl
c3NTaGltSW5pdGlhbGl6ZUZ1bmMgaW5pdEZ1bmMgPSByZWludGVycHJldF9jYXN0PFBsdWdpblBy
b2Nlc3NTaGltSW5pdGlhbGl6ZUZ1bmM+KGRsc3ltKFJUTERfREVGQVVMVCwgIldlYktpdFBsdWdp
blByb2Nlc3NTaGltSW5pdGlhbGl6ZSIpKTsKLSAgICBpbml0RnVuYyhjYWxsYmFja3MpOwotfQot
Ci1zdGF0aWMgdm9pZCAoKk5TQ29uY3JldGVUYXNrX2xhdW5jaCkoTlNUYXNrICosIFNFTCk7Ci0K
LXN0YXRpYyB2b2lkIHJlcGxhY2VkTlNDb25jcmV0ZVRhc2tfbGF1bmNoKE5TVGFzayAqc2VsZiwg
U0VMIF9jbWQpCi17Ci0gICAgU3RyaW5nIGxhdW5jaFBhdGggPSBzZWxmLmxhdW5jaFBhdGg7Ci0K
LSAgICBpZiAoUGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkubGF1bmNoUHJvY2VzcyhsYXVuY2hQ
YXRoLCBtYWtlVmVjdG9yPFN0cmluZz4oc2VsZi5hcmd1bWVudHMpKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgTlNDb25jcmV0ZVRhc2tfbGF1bmNoKHNlbGYsIF9jbWQpOwotfQotCi1zdGF0aWMg
TlNSdW5uaW5nQXBwbGljYXRpb24gKigqTlNXb3Jrc3BhY2VfbGF1bmNoQXBwbGljYXRpb25BdFVS
TF9vcHRpb25zX2NvbmZpZ3VyYXRpb25fZXJyb3IpKE5TV29ya3NwYWNlICosIFNFTCwgTlNVUkwg
KiwgTlNXb3Jrc3BhY2VMYXVuY2hPcHRpb25zLCBOU0RpY3Rpb25hcnkgKiwgTlNFcnJvciAqKik7
Ci0KLXN0YXRpYyBOU1J1bm5pbmdBcHBsaWNhdGlvbiAqcmVwbGFjZWROU1dvcmtzcGFjZV9sYXVu
Y2hBcHBsaWNhdGlvbkF0VVJMX29wdGlvbnNfY29uZmlndXJhdGlvbl9lcnJvcihOU1dvcmtzcGFj
ZSAqc2VsZiwgU0VMIF9jbWQsIE5TVVJMICp1cmwsIE5TV29ya3NwYWNlTGF1bmNoT3B0aW9ucyBv
cHRpb25zLCBOU0RpY3Rpb25hcnkgKmNvbmZpZ3VyYXRpb24sIE5TRXJyb3IgKiplcnJvcikKLXsK
LSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIGF1dG8gYXJndW1l
bnRzID0gbWFrZVZlY3RvcjxTdHJpbmc+KFtjb25maWd1cmF0aW9uIG9iamVjdEZvcktleTpOU1dv
cmtzcGFjZUxhdW5jaENvbmZpZ3VyYXRpb25Bcmd1bWVudHNdKTsKLSAgICBBTExPV19ERVBSRUNB
VEVEX0RFQ0xBUkFUSU9OU19FTkQKLQotICAgIGlmIChQbHVnaW5Qcm9jZXNzOjpzaW5nbGV0b24o
KS5sYXVuY2hBcHBsaWNhdGlvbkF0VVJMKFVSTCh1cmwpLnN0cmluZygpLCBhcmd1bWVudHMpKSB7
Ci0gICAgICAgIGlmIChlcnJvcikKLSAgICAgICAgICAgICplcnJvciA9IG5pbDsKLSAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICB9Ci0KLSAgICByZXR1cm4gTlNXb3Jrc3BhY2VfbGF1bmNoQXBwbGlj
YXRpb25BdFVSTF9vcHRpb25zX2NvbmZpZ3VyYXRpb25fZXJyb3Ioc2VsZiwgX2NtZCwgdXJsLCBv
cHRpb25zLCBjb25maWd1cmF0aW9uLCBlcnJvcik7Ci19Ci0KLXN0YXRpYyBCT09MICgqTlNXb3Jr
c3BhY2Vfb3BlbkZpbGUpKE5TV29ya3NwYWNlICosIFNFTCwgTlNTdHJpbmcgKik7Ci0KLXN0YXRp
YyBCT09MIHJlcGxhY2VkTlNXb3Jrc3BhY2Vfb3BlbkZpbGUoTlNXb3Jrc3BhY2UgKnNlbGYsIFNF
TCBfY21kLCBOU1N0cmluZyAqZnVsbFBhdGgpCi17Ci0gICAgaWYgKFBsdWdpblByb2Nlc3M6OnNp
bmdsZXRvbigpLm9wZW5GaWxlKGZ1bGxQYXRoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICByZXR1cm4gTlNXb3Jrc3BhY2Vfb3BlbkZpbGUoc2VsZiwgX2NtZCwgZnVsbFBhdGgpOwotfQot
Ci1zdGF0aWMgdm9pZCBpbml0aWFsaXplQ29jb2FPdmVycmlkZXMoKQotewotICAgIC8vIE92ZXJy
aWRlIC1bTlNDb25jcmV0ZVRhc2sgbGF1bmNoOl0KLSAgICBNZXRob2QgbGF1bmNoTWV0aG9kID0g
Y2xhc3NfZ2V0SW5zdGFuY2VNZXRob2Qob2JqY19nZXRDbGFzcygiTlNDb25jcmV0ZVRhc2siKSwg
QHNlbGVjdG9yKGxhdW5jaCkpOwotICAgIE5TQ29uY3JldGVUYXNrX2xhdW5jaCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCAoKikoTlNUYXNrICosIFNFTCk+KG1ldGhvZF9zZXRJbXBsZW1lbnRhdGlv
bihsYXVuY2hNZXRob2QsIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihyZXBsYWNlZE5TQ29uY3JldGVU
YXNrX2xhdW5jaCkpKTsKLQotICAgIC8vIE92ZXJyaWRlIC1bTlNXb3Jrc3BhY2UgbGF1bmNoQXBw
bGljYXRpb25BdFVSTDpvcHRpb25zOmNvbmZpZ3VyYXRpb246ZXJyb3I6XQotICAgIC8vIEZJWE1F
OiBBcmUgdGhlc2UgZGVwcmVjYXRpb24gYWxsb3dhbmNlcyBuZWNlc3Nhcnk/Ci0gICAgTWV0aG9k
IGxhdW5jaEFwcGxpY2F0aW9uQXRVUkxPcHRpb25zQ29uZmlndXJhdGlvbkVycm9yTWV0aG9kID0g
Y2xhc3NfZ2V0SW5zdGFuY2VNZXRob2Qob2JqY19nZXRDbGFzcygiTlNXb3Jrc3BhY2UiKSwgQHNl
bGVjdG9yKGxhdW5jaEFwcGxpY2F0aW9uQXRVUkw6b3B0aW9uczpjb25maWd1cmF0aW9uOmVycm9y
OikpOwotICAgIE5TV29ya3NwYWNlX2xhdW5jaEFwcGxpY2F0aW9uQXRVUkxfb3B0aW9uc19jb25m
aWd1cmF0aW9uX2Vycm9yID0gcmVpbnRlcnByZXRfY2FzdDxOU1J1bm5pbmdBcHBsaWNhdGlvbiAq
KCopKE5TV29ya3NwYWNlICosIFNFTCwgTlNVUkwgKiwgTlNXb3Jrc3BhY2VMYXVuY2hPcHRpb25z
LCBOU0RpY3Rpb25hcnkgKiwgTlNFcnJvciAqKik+KG1ldGhvZF9zZXRJbXBsZW1lbnRhdGlvbihs
YXVuY2hBcHBsaWNhdGlvbkF0VVJMT3B0aW9uc0NvbmZpZ3VyYXRpb25FcnJvck1ldGhvZCwgcmVp
bnRlcnByZXRfY2FzdDxJTVA+KHJlcGxhY2VkTlNXb3Jrc3BhY2VfbGF1bmNoQXBwbGljYXRpb25B
dFVSTF9vcHRpb25zX2NvbmZpZ3VyYXRpb25fZXJyb3IpKSk7Ci0KLSAgICAvLyBPdmVycmlkZSAt
W05TV29ya3NwYWNlIG9wZW5GaWxlOl0KLSAgICBNZXRob2Qgb3BlbkZpbGVNZXRob2QgPSBjbGFz
c19nZXRJbnN0YW5jZU1ldGhvZChvYmpjX2dldENsYXNzKCJOU1dvcmtzcGFjZSIpLCBAc2VsZWN0
b3Iob3BlbkZpbGU6KSk7Ci0gICAgTlNXb3Jrc3BhY2Vfb3BlbkZpbGUgPSByZWludGVycHJldF9j
YXN0PEJPT0wgKCopKE5TV29ya3NwYWNlICosIFNFTCwgTlNTdHJpbmcgKik+KG1ldGhvZF9zZXRJ
bXBsZW1lbnRhdGlvbihvcGVuRmlsZU1ldGhvZCwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KHJlcGxh
Y2VkTlNXb3Jrc3BhY2Vfb3BlbkZpbGUpKSk7Ci0KLSAgICAvLyBPdmVycmlkZSAtW05TQXBwbGlj
YXRpb24gcnVuTW9kYWxGb3JXaW5kb3c6XQotICAgIE1ldGhvZCBydW5Nb2RhbEZvcldpbmRvd01l
dGhvZCA9IGNsYXNzX2dldEluc3RhbmNlTWV0aG9kKG9iamNfZ2V0Q2xhc3MoIk5TQXBwbGljYXRp
b24iKSwgQHNlbGVjdG9yKHJ1bk1vZGFsRm9yV2luZG93OikpOwotICAgIE5TQXBwbGljYXRpb25f
UnVuTW9kYWxGb3JXaW5kb3cgPSBtZXRob2Rfc2V0SW1wbGVtZW50YXRpb24ocnVuTW9kYWxGb3JX
aW5kb3dNZXRob2QsIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihyZXBsYWNlZFJ1bk1vZGFsRm9yV2lu
ZG93KSk7Ci0KLSAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAqZGVmYXVsdENlbnRlciA9IFtOU05v
dGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKLQotICAgIC8vIFRyYWNrIHdoZW4gYW55
IENvY29hIHdpbmRvdyBpcyBhYm91dCB0byBiZSBiZSBzaG93bi4KLSAgICBbZGVmYXVsdENlbnRl
ciBhZGRPYnNlcnZlckZvck5hbWU6TlNXaW5kb3dXaWxsT3JkZXJPblNjcmVlbk5vdGlmaWNhdGlv
bgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDpuaWwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcXVldWU6bmlsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICB1c2luZ0Jsb2NrOl4oTlNOb3RpZmljYXRpb24gKm5vdGlmaWNhdGlvbikgeyBmdWxsc2NyZWVu
V2luZG93VHJhY2tlcigpLndpbmRvd1Nob3duKFtub3RpZmljYXRpb24gb2JqZWN0XSk7IH1dOwot
ICAgIC8vIFRyYWNrIHdoZW4gYW55IENvY29hIHdpbmRvdyBpcyBhYm91dCB0byBiZSBoaWRkZW4u
Ci0gICAgW2RlZmF1bHRDZW50ZXIgYWRkT2JzZXJ2ZXJGb3JOYW1lOk5TV2luZG93V2lsbE9yZGVy
T2ZmU2NyZWVuTm90aWZpY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Jq
ZWN0Om5pbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZTpuaWwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVzaW5nQmxvY2s6XihOU05vdGlmaWNhdGlvbiAqbm90aWZp
Y2F0aW9uKSB7IGZ1bGxzY3JlZW5XaW5kb3dUcmFja2VyKCkud2luZG93SGlkZGVuKFtub3RpZmlj
YXRpb24gb2JqZWN0XSk7IH1dOwotCi19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzczo6c2V0TW9kYWxX
aW5kb3dJc1Nob3dpbmcoYm9vbCBtb2RhbFdpbmRvd0lzU2hvd2luZykKLXsKLSAgICBwYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Qcm9jZXNzUHJveHk6OlNl
dE1vZGFsV2luZG93SXNTaG93aW5nKG1vZGFsV2luZG93SXNTaG93aW5nKSwgMCk7Ci19Ci0KLXZv
aWQgUGx1Z2luUHJvY2Vzczo6c2V0RnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZyhib29sIGZ1bGxz
Y3JlZW5XaW5kb3dJc1Nob3dpbmcpCi17Ci0gICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6UGx1Z2luUHJvY2Vzc1Byb3h5OjpTZXRGdWxsc2NyZWVuV2luZG93SXNT
aG93aW5nKGZ1bGxzY3JlZW5XaW5kb3dJc1Nob3dpbmcpLCAwKTsKLX0KLQotYm9vbCBQbHVnaW5Q
cm9jZXNzOjpsYXVuY2hQcm9jZXNzKGNvbnN0IFN0cmluZyYgbGF1bmNoUGF0aCwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGFyZ3VtZW50cykKLXsKLSAgICBib29sIHJlc3VsdDsKLSAgICBpZiAoIXBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Qcm9jZXNz
UHJveHk6OkxhdW5jaFByb2Nlc3MobGF1bmNoUGF0aCwgYXJndW1lbnRzKSwgTWVzc2FnZXM6OlBs
dWdpblByb2Nlc3NQcm94eTo6TGF1bmNoUHJvY2Vzczo6UmVwbHkocmVzdWx0KSwgMCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgUGx1Z2lu
UHJvY2Vzczo6bGF1bmNoQXBwbGljYXRpb25BdFVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cykKLXsKLSAgICBib29sIHJlc3VsdCA9IGZh
bHNlOwotICAgIGlmICghcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OlBsdWdpblByb2Nlc3NQcm94eTo6TGF1bmNoQXBwbGljYXRpb25BdFVSTCh1cmxTdHJpbmcs
IGFyZ3VtZW50cyksIE1lc3NhZ2VzOjpQbHVnaW5Qcm9jZXNzUHJveHk6OkxhdW5jaFByb2Nlc3M6
OlJlcGx5KHJlc3VsdCksIDApKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1ib29sIFBsdWdpblByb2Nlc3M6Om9wZW5VUkwoY29uc3QgU3RyaW5nJiB1
cmxTdHJpbmcsIGludDMyX3QmIHN0YXR1cywgU3RyaW5nJiBsYXVuY2hlZFVSTFN0cmluZykKLXsK
LSAgICBib29sIHJlc3VsdDsKLSAgICBpZiAoIXBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Qcm9jZXNzUHJveHk6Ok9wZW5VUkwodXJsU3RyaW5nKSwg
TWVzc2FnZXM6OlBsdWdpblByb2Nlc3NQcm94eTo6T3BlblVSTDo6UmVwbHkocmVzdWx0LCBzdGF0
dXMsIGxhdW5jaGVkVVJMU3RyaW5nKSwgMCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgUGx1Z2luUHJvY2Vzczo6b3BlbkZpbGUoY29uc3Qg
U3RyaW5nJiBmdWxsUGF0aCkKLXsKLSAgICBib29sIHJlc3VsdDsKLSAgICBpZiAoIXBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Qcm9jZXNzUHJveHk6
Ok9wZW5GaWxlKGZ1bGxQYXRoKSwgTWVzc2FnZXM6OlBsdWdpblByb2Nlc3NQcm94eTo6T3BlbkZp
bGU6OlJlcGx5KHJlc3VsdCksIDApKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi12b2lkIFBsdWdpblByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVBs
dWdpblByb2Nlc3MoUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMp
Ci17Ci0gICAgbV9jb21wb3NpdGluZ1JlbmRlclNlcnZlclBvcnQgPSBXVEZNb3ZlKHBhcmFtZXRl
cnMuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ1BvcnQpOwotCi0gICAgW05TVVJMQ2FjaGUgc2V0U2hh
cmVkVVJMQ2FjaGU6YWRvcHROUyhbW05TVVJMQ2FjaGUgYWxsb2NdCi0gICAgICAgIGluaXRXaXRo
TWVtb3J5Q2FwYWNpdHk6cGx1Z2luTWVtb3J5Q2FjaGVTaXplCi0gICAgICAgIGRpc2tDYXBhY2l0
eTpwbHVnaW5EaXNrQ2FjaGVTaXplCi0gICAgICAgIGRpc2tQYXRoOm1fbnN1cmxDYWNoZURpcmVj
dG9yeV0pLmdldCgpXTsKLQotICAgIC8vIERpc2FibGUgRGFyayBNb2RlIGluIHRoZSBwbHVnaW4g
cHJvY2VzcyB0byBhdm9pZCByZW5kZXJpbmcgaXNzdWVzLgotICAgIFtOU0FwcCBzZXRBcHBlYXJh
bmNlOltOU0FwcGVhcmFuY2UgYXBwZWFyYW5jZU5hbWVkOk5TQXBwZWFyYW5jZU5hbWVBcXVhXV07
Ci0KLSNpZiBIQVZFKEFQUF9TU08pIHx8IFBMQVRGT1JNKE1BQ0NBVEFMWVNUKQotICAgIFtOU1VS
TFNlc3Npb24gX2Rpc2FibGVBcHBTU09dOwotI2VuZGlmCi19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vz
czo6cGxhdGZvcm1Jbml0aWFsaXplUHJvY2Vzcyhjb25zdCBBdXhpbGlhcnlQcm9jZXNzSW5pdGlh
bGl6YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQotewotICAgIGluaXRpYWxpemVTaGltKCk7
Ci0KLSAgICBpbml0aWFsaXplQ29jb2FPdmVycmlkZXMoKTsKLQotICAgIGJvb2wgZXhwZXJpbWVu
dGFsUGx1Z0luU2FuZGJveFByb2ZpbGVzRW5hYmxlZCA9IHBhcmFtZXRlcnMuZXh0cmFJbml0aWFs
aXphdGlvbkRhdGEuZ2V0KCJleHBlcmltZW50YWwtc2FuZGJveC1wbHVnaW4iKSA9PSAiMSI7Ci0g
ICAgV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRF
eHBlcmltZW50YWxQbHVnSW5TYW5kYm94UHJvZmlsZXNFbmFibGVkKGV4cGVyaW1lbnRhbFBsdWdJ
blNhbmRib3hQcm9maWxlc0VuYWJsZWQpOwotCi0gICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIGJl
dHRlciB0byBwcm94eSBTZXRDdXJzb3IgY2FsbHMgb3ZlciB0byB0aGUgVUkgcHJvY2VzcyBpbnN0
ZWFkIG9mCi0gICAgLy8gYWxsb3dpbmcgcGx1Zy1pbnMgdG8gY2hhbmdlIHRoZSBtb3VzZSBjdXJz
b3IgYXQgYW55IHRpbWUuCi0gICAgLy8gRklYTUU6IFNldHNDdXJzb3JJbkJhY2tncm91bmQgY29u
bmVjdGlvbiBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGtDR1NTZXRzQ3Vyc29y
SW5CYWNrZ3JvdW5kVGFnQml0IHdpbmRvdyB0YWcgYml0LgotICAgIC8vIDxyZGFyOi8vcHJvYmxl
bS83NzUyNDIyPiBhc2tzIGZvciBhbiBBUEkgdG8gc2V0IGN1cnNvciBmcm9tIGJhY2tncm91bmQg
cHJvY2Vzc2VzLgotICAgIENHU0Nvbm5lY3Rpb25JRCBjaWQgPSBDR1NNYWluQ29ubmVjdGlvbklE
KCk7Ci0gICAgQ0dTU2V0Q29ubmVjdGlvblByb3BlcnR5KGNpZCwgY2lkLCBDRlNUUigiU2V0c0N1
cnNvckluQmFja2dyb3VuZCIpLCAoQ0ZUeXBlUmVmKWtDRkJvb2xlYW5UcnVlKTsKLQotICAgIFJl
dGFpblB0cjxDRlVSTFJlZj4gcGx1Z2luVVJMID0gYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhGaWxl
U3lzdGVtUGF0aCgwLCBtX3BsdWdpblBhdGguY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwga0NGVVJM
UE9TSVhQYXRoU3R5bGUsIGZhbHNlKSk7Ci0gICAgaWYgKCFwbHVnaW5VUkwpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFJldGFpblB0cjxDRkJ1bmRsZVJlZj4gcGx1Z2luQnVuZGxlID0gYWRvcHRD
RihDRkJ1bmRsZUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwbHVnaW5VUkwuZ2V0KCkpKTsK
LSAgICBpZiAoIXBsdWdpbkJ1bmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wbHVnaW5C
dW5kbGVJZGVudGlmaWVyID0gQ0ZCdW5kbGVHZXRJZGVudGlmaWVyKHBsdWdpbkJ1bmRsZS5nZXQo
KSk7Ci0KLSAgICBpZiAobV9wbHVnaW5CdW5kbGVJZGVudGlmaWVyID09ICJjb20uYWRvYmUuYWNy
b2JhdC5wZGZ2aWV3ZXJOUEFQSSIpCi0gICAgICAgIG9sZFBsdWdpblByb2Nlc3NOYW1lU2hvdWxk
RXF1YWxOZXdQbHVnaW5Qcm9jZXNzTmFtZUZvckFkb2JlUmVhZGVyID0gdHJ1ZTsKLQotICAgIC8v
IEZJWE1FOiBXb3JrYXJvdW5kIGZvciBKYXZhIG5vdCBsaWtpbmcgaXRzIHBsdWdpbiBwcm9jZXNz
IHRvIGJlIHN1cHByZXNzZWQgLSA8cmRhcjovL3Byb2JsZW0vMTQyNjc4NDM+Ci0gICAgaWYgKG1f
cGx1Z2luQnVuZGxlSWRlbnRpZmllciA9PSAiY29tLm9yYWNsZS5qYXZhLkphdmFBcHBsZXRQbHVn
aW4iKQotICAgICAgICAobmV3IFVzZXJBY3Rpdml0eSgiY29tLm9yYWNsZS5qYXZhLkphdmFBcHBs
ZXRQbHVnaW4iKSktPnN0YXJ0KCk7Ci0gICAgCi0gICAgaWYgKCFwbHVnaW5IYXNTYW5kYm94UHJv
ZmlsZShtX3BsdWdpbkJ1bmRsZUlkZW50aWZpZXIpKSB7Ci0gICAgICAgIC8vIEFsbG93IEFwcGxl
IEV2ZW50cyBmcm9tIENpdHJpeCBwbHVnaW4uIFRoaXMgY2FuIGJlIHJlbW92ZWQgd2hlbiA8cmRh
cjovL3Byb2JsZW0vMTQwMTI4MjM+IGlzIGZpeGVkLgotICAgICAgICBzZXRlbnYoIl9fQVBQTEVF
VkVOVFNTRVJWSUNFTkFNRSIsICJjb20uYXBwbGUuY29yZXNlcnZpY2VzLmFwcGxlZXZlbnRzIiwg
MSk7Ci0gICAgfQotfQotCi12b2lkIFBsdWdpblByb2Nlc3M6OmluaXRpYWxpemVQcm9jZXNzTmFt
ZShjb25zdCBBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzKQotewotICAgIE5TU3RyaW5nICphcHBsaWNhdGlvbk5hbWUgPSBbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpXRUJfVUlfTlNTVFJJTkcoQCIlQCAoJUAgSW50ZXJuZXQgcGx1Zy1pbikiLCAi
dmlzaWJsZSBuYW1lIG9mIHRoZSBwbHVnLWluIGhvc3QgcHJvY2Vzcy4gVGhlIGZpcnN0IGFyZ3Vt
ZW50IGlzIHRoZSBwbHVnLWluIG5hbWUgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGFw
cGxpY2F0aW9uIG5hbWUuIiksIFtbKE5TU3RyaW5nICopbV9wbHVnaW5QYXRoIGxhc3RQYXRoQ29t
cG9uZW50XSBzdHJpbmdCeURlbGV0aW5nUGF0aEV4dGVuc2lvbl0sIChOU1N0cmluZyAqKXBhcmFt
ZXRlcnMudWlQcm9jZXNzTmFtZV07Ci0gICAgX0xTU2V0QXBwbGljYXRpb25JbmZvcm1hdGlvbkl0
ZW0oa0xTRGVmYXVsdFNlc3Npb25JRCwgX0xTR2V0Q3VycmVudEFwcGxpY2F0aW9uQVNOKCksIF9r
TFNEaXNwbGF5TmFtZUtleSwgKENGU3RyaW5nUmVmKWFwcGxpY2F0aW9uTmFtZSwgbnVsbHB0cik7
Ci0gICAgaWYgKCFtX3BsdWdpbkJ1bmRsZUlkZW50aWZpZXIuaXNFbXB0eSgpKQotICAgICAgICBf
TFNTZXRBcHBsaWNhdGlvbkluZm9ybWF0aW9uSXRlbShrTFNEZWZhdWx0U2Vzc2lvbklELCBfTFNH
ZXRDdXJyZW50QXBwbGljYXRpb25BU04oKSwga0xTUGx1Z0luQnVuZGxlSWRlbnRpZmllcktleSwg
bV9wbHVnaW5CdW5kbGVJZGVudGlmaWVyLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIG51bGxwdHIp
OwotfQotCi12b2lkIFBsdWdpblByb2Nlc3M6OmluaXRpYWxpemVTYW5kYm94KGNvbnN0IEF1eGls
aWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIFNhbmRib3hJ
bml0aWFsaXphdGlvblBhcmFtZXRlcnMmIHNhbmRib3hQYXJhbWV0ZXJzKQotewotICAgIC8vIFBs
dWdpblByb2Nlc3MgbWF5IGFscmVhZHkgYmUgc2FuZGJveGVkIGlmIGl0cyBwYXJlbnQgcHJvY2Vz
cyB3YXMgc2FuZGJveGVkLCBhbmQgbGF1bmNoZWQgYSBjaGlsZCBwcm9jZXNzIGluc3RlYWQgb2Yg
YW4gWFBDIHNlcnZpY2UuCi0gICAgLy8gVGhpcyBpcyBnZW5lcmFsbHkgbm90IGV4cGVjdGVkLCBo
b3dldmVyIHdlIGN1cnJlbnRseSBhbHdheXMgc3Bhd24gYSBjaGlsZCBwcm9jZXNzIHRvIGNyZWF0
ZSBhIE1JTUUgdHlwZSBwcmVmZXJlbmNlcyBmaWxlLgotICAgIGlmIChjdXJyZW50UHJvY2Vzc0lz
U2FuZGJveGVkKCkpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXBhcmFtZXRlcnMuY29ubmVj
dGlvbklkZW50aWZpZXIueHBjQ29ubmVjdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBjaGFyIGNhY2hlRGlyZWN0b3J5W1BBVEhfTUFYXTsKLSAgICBpZiAoIWNvbmZzdHIoX0NT
X0RBUldJTl9VU0VSX0NBQ0hFX0RJUiwgY2FjaGVEaXJlY3RvcnksIHNpemVvZihjYWNoZURpcmVj
dG9yeSkpKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiUGx1Z2luUHJvY2VzczogY291bGRuJ3Qg
cmV0cmlldmUgc3lzdGVtIGNhY2hlIGRpcmVjdG9yeSBwYXRoOiAlZFxuIiwgZXJybm8pOwotICAg
ICAgICBleGl0KEVYX09TRVJSKTsKLSAgICB9Ci0KLSAgICBtX25zdXJsQ2FjaGVEaXJlY3Rvcnkg
PSBbW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBzdHJpbmdXaXRoRmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uOmNhY2hlRGlyZWN0b3J5IGxlbmd0aDpzdHJsZW4oY2FjaGVEaXJlY3Rvcnkp
XSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBi
dW5kbGVJZGVudGlmaWVyXV07Ci0gICAgaWYgKCFbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFn
ZXJdIGNyZWF0ZURpcmVjdG9yeUF0VVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6bV9uc3VybENh
Y2hlRGlyZWN0b3J5IGlzRGlyZWN0b3J5OllFU10gd2l0aEludGVybWVkaWF0ZURpcmVjdG9yaWVz
OllFUyBhdHRyaWJ1dGVzOm5pbCBlcnJvcjpuaWxdKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygi
UGx1Z2luUHJvY2VzczogY291bGRuJ3QgY3JlYXRlIE5TVVJMIGNhY2hlIGRpcmVjdG9yeSAnJXMn
XG4iLCBjYWNoZURpcmVjdG9yeSk7Ci0gICAgICAgIGV4aXQoRVhfT1NFUlIpOwotICAgIH0KLQot
ICAgIGJvb2wgcGFyZW50SXNTYW5kYm94ZWQgPSBwYXJhbWV0ZXJzLmNvbm5lY3Rpb25JZGVudGlm
aWVyLnhwY0Nvbm5lY3Rpb24gJiYgY29ubmVjdGVkUHJvY2Vzc0lzU2FuZGJveGVkKHBhcmFtZXRl
cnMuY29ubmVjdGlvbklkZW50aWZpZXIueHBjQ29ubmVjdGlvbi5nZXQoKSk7Ci0KLSAgICBpZiAo
cGFyYW1ldGVycy5leHRyYUluaXRpYWxpemF0aW9uRGF0YS5nZXQoImRpc2FibGUtc2FuZGJveCIp
ID09ICIxIikgewotICAgICAgICBpZiAocGFyZW50SXNTYW5kYm94ZWQpIHsKLSAgICAgICAgICAg
IFdURkxvZ0Fsd2F5cygiU2FuZGJveGVkIHByb2Nlc3NlcyBtYXkgbm90IGRpc2FibGUgcGx1Zy1p
biBzYW5kYm94LCB0ZXJtaW5hdGluZyAlcy4iLCBwYXJhbWV0ZXJzLmNsaWVudElkZW50aWZpZXIu
dXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBleGl0KEVYX09TRVJSKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU3RyaW5nIHNhbmRib3hQcm9maWxlID0gcGx1
Z2luU2FuZGJveFByb2ZpbGUobV9wbHVnaW5CdW5kbGVJZGVudGlmaWVyKTsKLSAgICBpZiAoc2Fu
ZGJveFByb2ZpbGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChwYXJlbnRJc1NhbmRib3hlZCkg
ewotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJTYW5kYm94ZWQgcHJvY2Vzc2VzIG1heSBvbmx5
IHVzZSBzYW5kYm94ZWQgcGx1Zy1pbnMsIHRlcm1pbmF0aW5nICVzLiIsIHBhcmFtZXRlcnMuY2xp
ZW50SWRlbnRpZmllci51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGV4aXQoRVhfT1NFUlIp
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzYW5kYm94UGFyYW1l
dGVycy5zZXRTYW5kYm94UHJvZmlsZShzYW5kYm94UHJvZmlsZSk7Ci0KLSAgICBjaGFyIHRlbXBv
cmFyeURpcmVjdG9yeVtQQVRIX01BWF07Ci0gICAgaWYgKCFjb25mc3RyKF9DU19EQVJXSU5fVVNF
Ul9URU1QX0RJUiwgdGVtcG9yYXJ5RGlyZWN0b3J5LCBzaXplb2YodGVtcG9yYXJ5RGlyZWN0b3J5
KSkpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJQbHVnaW5Qcm9jZXNzOiBjb3VsZG4ndCByZXRy
aWV2ZSBzeXN0ZW0gdGVtcG9yYXJ5IGRpcmVjdG9yeSBwYXRoOiAlZFxuIiwgZXJybm8pOwotICAg
ICAgICBleGl0KEVYX09TRVJSKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RybGNweSh0ZW1wb3JhcnlE
aXJlY3RvcnksIFtbW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBzdHJpbmdXaXRoRmls
ZVN5c3RlbVJlcHJlc2VudGF0aW9uOnRlbXBvcmFyeURpcmVjdG9yeSBsZW5ndGg6c3RybGVuKHRl
bXBvcmFyeURpcmVjdG9yeSldIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIldlYktp
dFBsdWdpbi1YWFhYWFgiXSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb25dLCBzaXplb2YodGVtcG9y
YXJ5RGlyZWN0b3J5KSkgPj0gc2l6ZW9mKHRlbXBvcmFyeURpcmVjdG9yeSkKLSAgICAgICAgfHwg
IW1rZHRlbXAodGVtcG9yYXJ5RGlyZWN0b3J5KSkgewotICAgICAgICBXVEZMb2dBbHdheXMoIlBs
dWdpblByb2Nlc3M6IGNvdWxkbid0IGNyZWF0ZSBwcml2YXRlIHRlbXBvcmFyeSBkaXJlY3Rvcnkg
JyVzJ1xuIiwgdGVtcG9yYXJ5RGlyZWN0b3J5KTsKLSAgICAgICAgZXhpdChFWF9PU0VSUik7Ci0g
ICAgfQotCi0gICAgc2FuZGJveFBhcmFtZXRlcnMuc2V0VXNlckRpcmVjdG9yeVN1ZmZpeChbW1tb
TlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gc3RyaW5nV2l0aEZpbGVTeXN0ZW1SZXByZXNl
bnRhdGlvbjp0ZW1wb3JhcnlEaXJlY3RvcnkgbGVuZ3RoOnN0cmxlbih0ZW1wb3JhcnlEaXJlY3Rv
cnkpXSBsYXN0UGF0aENvbXBvbmVudF0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uXSk7Ci0KLSAg
ICBzYW5kYm94UGFyYW1ldGVycy5hZGRQYXRoUGFyYW1ldGVyKCJQTFVHSU5fUEFUSCIsIG1fcGx1
Z2luUGF0aCk7Ci0gICAgc2FuZGJveFBhcmFtZXRlcnMuYWRkUGF0aFBhcmFtZXRlcigiTlNVUkxf
Q0FDSEVfRElSIiwgbV9uc3VybENhY2hlRGlyZWN0b3J5KTsKLQotICAgIFtbTlNVc2VyRGVmYXVs
dHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHJlZ2lzdGVyRGVmYXVsdHM6QHsgQCJOU1VzZVJlbW90
ZVNhdmVQYW5lbCIgOiBAWUVTIH1dOwotCi0gICAgQXV4aWxpYXJ5UHJvY2Vzczo6aW5pdGlhbGl6
ZVNhbmRib3gocGFyYW1ldGVycywgc2FuZGJveFBhcmFtZXRlcnMpOwotfQotCi1ib29sIFBsdWdp
blByb2Nlc3M6OnNob3VsZE92ZXJyaWRlUXVhcmFudGluZSgpCi17Ci0gICAgcmV0dXJuIG1fcGx1
Z2luQnVuZGxlSWRlbnRpZmllciAhPSAiY29tLmNpc2NvLndlYmV4LnBsdWdpbi5ncGM2NCI7Ci19
Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzczo6c3RvcFJ1bkxvb3AoKQotewotICAgIEF1eGlsaWFyeVBy
b2Nlc3M6OnN0b3BOU0FwcFJ1bkxvb3AoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc1NoaW0uaCBiL1NvdXJjZS9X
ZWJLaXQvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc1NoaW0uaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDNiMGJmNmM5ODFiZjhkODE4ZTQyYjRiMTY4MmY0ZDJiN2NhOWU1
Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpblByb2Nlc3NTaGltLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLUBjbGFzcyBO
U1dpbmRvdzsKLQotI2luY2x1ZGUgPENhcmJvbi9DYXJib24uaD4KLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLXN0cnVjdCBQbHVnaW5Qcm9jZXNzU2hpbUNhbGxiYWNrcyB7Ci0gICAgYm9vbCAoKnN0
cmluZ0NvbXBhcmUpKENGU3RyaW5nUmVmIGEsIENGU3RyaW5nUmVmIGIsIENGU3RyaW5nQ29tcGFy
ZUZsYWdzIG9wdGlvbnMsIHZvaWQqIHJldHVybkFkZHJlc3MsIENGQ29tcGFyaXNvblJlc3VsdCYg
cmVzdWx0KTsKLX07Ci0KLXR5cGVkZWYgdm9pZCAoKlBsdWdpblByb2Nlc3NTaGltSW5pdGlhbGl6
ZUZ1bmMpKGNvbnN0IFBsdWdpblByb2Nlc3NTaGltQ2FsbGJhY2tzJik7Ci0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc1NoaW0ubW0g
Yi9Tb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpblByb2Nlc3NTaGltLm1tCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTg0NzFlODhhYWU0NTJlOTBkY2JmNjI0NDcy
OGE1MDhhMzNkMmNlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc1NoaW0ubW0K
KysrIC9kZXYvbnVsbApAQCAtMSwyNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmICFQ
TEFURk9STShJT1NfRkFNSUxZKQotCi0jaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KLSNpbXBvcnQg
IlBsdWdpblByb2Nlc3NTaGltLmgiCi0KLSNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KLSNpbXBv
cnQgPENhcmJvbi9DYXJib24uaD4KLSNpbXBvcnQgPFdlYkNvcmUvRHluYW1pY0xpbmtlckludGVy
cG9zaW5nLmg+Ci0jaW1wb3J0IDxtYWNoL21hY2hfdm0uaD4KLSNpbXBvcnQgPG9iamMvbWVzc2Fn
ZS5oPgotI2ltcG9ydCA8c3RkaW8uaD4KLSNpbXBvcnQgPHN5cy9pcGMuaD4KLSNpbXBvcnQgPHN5
cy9tbWFuLmg+Ci0jaW1wb3J0IDxzeXMvc2htLmg+Ci0jaW1wb3J0IDx3dGYvQ29tcGlsZXIuaD4K
LSNpbXBvcnQgPHd0Zi9zcGkvZGFyd2luL1NhbmRib3hTUEkuaD4KLQotI2lmIENQVShBUk02NEUp
Ci0jaW1wb3J0IDxwdHJhdXRoLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWV4
dGVybiAiQyIgdm9pZCBXZWJLaXRQbHVnaW5Qcm9jZXNzU2hpbUluaXRpYWxpemUoY29uc3QgUGx1
Z2luUHJvY2Vzc1NoaW1DYWxsYmFja3MmIGNhbGxiYWNrcyk7Ci0KLXN0YXRpYyBQbHVnaW5Qcm9j
ZXNzU2hpbUNhbGxiYWNrcyBwbHVnaW5Qcm9jZXNzU2hpbUNhbGxiYWNrczsKLQotLy8gU2ltcGxl
IEZha2UgU3lzdGVtIFYgc2hhcmVkIG1lbW9yeS4gVGhpcyByZXBsYWNlbWVudCBBUEkgaW1wbGVt
ZW50cwotLy8gdXNhYmxlIHN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgZm9yIHVzZSB3aXRoaW4gYSBz
aW5nbGUgcHJvY2Vzcy4gVGhlIG1lbW9yeQotLy8gaXMgbm90IHNoYXJlZCBvdXRzaWRlIG9mIHRo
ZSBzY29wZSBvZiB0aGUgcHJvY2Vzcy4KLXN0cnVjdCBGYWtlU2hhcmVkTWVtb3J5RGVzY3JpcHRv
ciB7Ci0gICAgRmFrZVNoYXJlZE1lbW9yeURlc2NyaXB0b3IqIG5leHQ7Ci0gICAgaW50IHJlZmVy
ZW5jZUNvdW50OwotICAgIGtleV90IGtleTsKLSAgICBzaXplX3QgcmVxdWVzdGVkU2l6ZTsKLSAg
ICBzaXplX3QgbW1hcGVkU2l6ZTsKLSAgICBpbnQgc2hhcmVkTWVtb3J5RmxhZ3M7Ci0gICAgaW50
IHNoYXJlZE1lbW9yeUlkZW50aWZpZXI7Ci0gICAgdm9pZCogbW1hcGVkQWRkcmVzczsKLX07Ci0K
LXN0YXRpYyBGYWtlU2hhcmVkTWVtb3J5RGVzY3JpcHRvciogc2htRGVzY3JpcHRvckxpc3QgPSAw
Owotc3RhdGljIGludCBmYWtlU2hhcmVkTWVtb3J5SWRlbnRpZmllciA9IDA7Ci0KLXN0YXRpYyBG
YWtlU2hhcmVkTWVtb3J5RGVzY3JpcHRvciogZmluZEJ5U2hhcmVkTWVtb3J5SWRlbnRpZmllcihp
bnQgc2hhcmVkTWVtb3J5SWRlbnRpZmllcikKLXsKLSAgICBGYWtlU2hhcmVkTWVtb3J5RGVzY3Jp
cHRvciogZGVzY3JpcHRvclB0ciA9IHNobURlc2NyaXB0b3JMaXN0OwotCi0gICAgd2hpbGUgKGRl
c2NyaXB0b3JQdHIpIHsKLSAgICAgICAgaWYgKGRlc2NyaXB0b3JQdHItPnNoYXJlZE1lbW9yeUlk
ZW50aWZpZXIgPT0gc2hhcmVkTWVtb3J5SWRlbnRpZmllcikKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBkZXNjcmlwdG9yUHRyID0gZGVzY3JpcHRvclB0ci0+bmV4dDsKLSAgICB9Ci0gICAg
cmV0dXJuIGRlc2NyaXB0b3JQdHI7Ci19Ci0KLXN0YXRpYyBGYWtlU2hhcmVkTWVtb3J5RGVzY3Jp
cHRvciogZmluZEJ5U2hhcmVkTWVtb3J5QWRkcmVzcyhjb25zdCB2b2lkKiBtbWFwZWRBZGRyZXNz
KQotewotICAgIEZha2VTaGFyZWRNZW1vcnlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yUHRyID0gc2ht
RGVzY3JpcHRvckxpc3Q7Ci0KLSAgICB3aGlsZSAoZGVzY3JpcHRvclB0cikgewotICAgICAgICBp
ZiAoZGVzY3JpcHRvclB0ci0+bW1hcGVkQWRkcmVzcyA9PSBtbWFwZWRBZGRyZXNzKQotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVzY3JpcHRvclB0ciA9IGRlc2NyaXB0b3JQdHItPm5l
eHQ7Ci0gICAgfQotICAgIHJldHVybiBkZXNjcmlwdG9yUHRyOwotfQotCi1zdGF0aWMgQm9vbGVh
biBzaGltX2Rpc2FibGVkKHZvaWQpCi17Ci0gICAgc3RhdGljIEJvb2xlYW4gaXNGYWtlU0hNRGlz
YWJsZWQ7Ci0KLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2U7Ci0gICAgZGlzcGF0Y2hf
b25jZSgmb25jZSwgXigpIHsKLSAgICAgICAgQm9vbGVhbiBrZXlFeGlzdHNBbmRIYXNWYWxpZEZv
cm1hdCA9IGZhbHNlOwotICAgICAgICBCb29sZWFuIHByZWZWYWx1ZSA9IENGUHJlZmVyZW5jZXNH
ZXRBcHBCb29sZWFuVmFsdWUoQ0ZTVFIoIldlYktpdERpc2FibGVGYWtlU1lTVlNITSIpLCBrQ0ZQ
cmVmZXJlbmNlc0N1cnJlbnRBcHBsaWNhdGlvbiwgJmtleUV4aXN0c0FuZEhhc1ZhbGlkRm9ybWF0
KTsKLQotICAgICAgICBpZiAoa2V5RXhpc3RzQW5kSGFzVmFsaWRGb3JtYXQgJiYgcHJlZlZhbHVl
KQotICAgICAgICAgICAgaXNGYWtlU0hNRGlzYWJsZWQgPSB0cnVlOwotICAgICAgICBlbHNlIGlm
IChzYW5kYm94X2NoZWNrKGdldHBpZCgpLCBOVUxMLCBTQU5EQk9YX0ZJTFRFUl9OT05FKSA9PSAx
KQotICAgICAgICAgICAgaXNGYWtlU0hNRGlzYWJsZWQgPSBmYWxzZTsgIC8vIFNhbmRib3hlZAot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBpc0Zha2VTSE1EaXNhYmxlZCA9IHRydWU7ICAgLy8g
Tm90IFNhbmRib3hlZAotCi0gICAgfSk7Ci0KLSAgICByZXR1cm4gaXNGYWtlU0hNRGlzYWJsZWQ7
Ci19Ci0KLXN0YXRpYyBpbnQgc2hpbV9zaG1kdChjb25zdCB2b2lkKiBzaGFyZWRBZGRyZXNzKQot
ewotICAgIGlmIChzaGltX2Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBzaG1kdChzaGFyZWRB
ZGRyZXNzKTsKLQotICAgIEZha2VTaGFyZWRNZW1vcnlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yUHRy
ID0gZmluZEJ5U2hhcmVkTWVtb3J5QWRkcmVzcyhzaGFyZWRBZGRyZXNzKTsKLSAgICBpZiAoIWRl
c2NyaXB0b3JQdHIpIHsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiAt
MTsKLSAgICB9Ci0KLSAgICBkZXNjcmlwdG9yUHRyLT5yZWZlcmVuY2VDb3VudC0tOwotICAgIGlm
ICghZGVzY3JpcHRvclB0ci0+cmVmZXJlbmNlQ291bnQpIHsKLSAgICAgICAgbXVubWFwKGRlc2Ny
aXB0b3JQdHItPm1tYXBlZEFkZHJlc3MsIGRlc2NyaXB0b3JQdHItPm1tYXBlZFNpemUpOwotICAg
ICAgICBkZXNjcmlwdG9yUHRyLT5tbWFwZWRBZGRyZXNzID0gMDsKLSAgICB9Ci0KLSAgICByZXR1
cm4gMDsKLX0KLQotc3RhdGljIHZvaWQqIHNoaW1fc2htYXQoaW50IHNoYXJlZE1lbW9yeUlkZW50
aWZpZXIsIGNvbnN0IHZvaWQqIHJlcXVlc3RlZFNoYXJlZEFkZHJlc3MsIGludCBzaG1mbGcpCi17
Ci0gICAgaWYgKHNoaW1fZGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHNobWF0KHNoYXJlZE1l
bW9yeUlkZW50aWZpZXIsIHJlcXVlc3RlZFNoYXJlZEFkZHJlc3MsIHNobWZsZyk7Ci0KLSAgICBG
YWtlU2hhcmVkTWVtb3J5RGVzY3JpcHRvciogZGVzY3JpcHRvclB0ciA9IGZpbmRCeVNoYXJlZE1l
bW9yeUlkZW50aWZpZXIoc2hhcmVkTWVtb3J5SWRlbnRpZmllcik7Ci0gICAgdm9pZCogbWFwcGVk
QWRkcmVzcyA9ICh2b2lkKiktMTsKLQotICAgIGlmICghZGVzY3JpcHRvclB0cikgewotICAgICAg
ICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIG1hcHBlZEFkZHJlc3M7Ci0gICAgfQot
Ci0gICAgaWYgKGRlc2NyaXB0b3JQdHItPm1tYXBlZEFkZHJlc3MpIHsKLSAgICAgICAgaWYgKCFy
ZXF1ZXN0ZWRTaGFyZWRBZGRyZXNzIHx8IHJlcXVlc3RlZFNoYXJlZEFkZHJlc3MgPT0gZGVzY3Jp
cHRvclB0ci0+bW1hcGVkQWRkcmVzcykgewotICAgICAgICAgICAgbWFwcGVkQWRkcmVzcyA9IGRl
c2NyaXB0b3JQdHItPm1tYXBlZEFkZHJlc3M7Ci0gICAgICAgICAgICBkZXNjcmlwdG9yUHRyLT5y
ZWZlcmVuY2VDb3VudCsrOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVzY3Jp
cHRvclB0ci0+bW1hcGVkU2l6ZSA9IChkZXNjcmlwdG9yUHRyLT5yZXF1ZXN0ZWRTaXplICsgUEFH
RV9TSVpFKSAmIH4oUEFHRV9TSVpFIC0gMSk7Ci0gICAgICAgIG1hcHBlZEFkZHJlc3MgPSBkZXNj
cmlwdG9yUHRyLT5tbWFwZWRBZGRyZXNzID0gbW1hcChjb25zdF9jYXN0PHZvaWQqPihyZXF1ZXN0
ZWRTaGFyZWRBZGRyZXNzKSwKLSAgICAgICAgICAgIGRlc2NyaXB0b3JQdHItPm1tYXBlZFNpemUs
IFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9BTk9OIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTsK
LSAgICAgICAgZGVzY3JpcHRvclB0ci0+cmVmZXJlbmNlQ291bnQrKzsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gbWFwcGVkQWRkcmVzczsKLX0KLQotc3RhdGljIGludCBzaGltX3NobWdldChrZXlfdCBr
ZXksIHNpemVfdCByZXF1ZXN0ZWRTaXplT2ZTaGFyZWRNZW1vcnksIGludCBzaGFyZWRNZW1vcnlG
bGFncykKLXsKLSAgICBpZiAoc2hpbV9kaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gc2htZ2V0
KGtleSwgcmVxdWVzdGVkU2l6ZU9mU2hhcmVkTWVtb3J5LCBzaGFyZWRNZW1vcnlGbGFncyk7Ci0K
LSAgICBGYWtlU2hhcmVkTWVtb3J5RGVzY3JpcHRvciogZGVzY3JpcHRvclB0ciA9IHNobURlc2Ny
aXB0b3JMaXN0OwotCi0gICAgd2hpbGUgKGRlc2NyaXB0b3JQdHIpIHsKLSAgICAgICAgLy8gQXJl
IHdlIGxvb2tpbmcgZm9yIHNvbWV0aGluZyB3ZSd2ZSBhbHJlYWR5IGNyZWF0ZWQ/Ci0gICAgICAg
IGlmIChkZXNjcmlwdG9yUHRyLT5rZXkgPT0ga2V5Ci0gICAgICAgICAgICAmJiBkZXNjcmlwdG9y
UHRyLT5yZXF1ZXN0ZWRTaXplID09IHJlcXVlc3RlZFNpemVPZlNoYXJlZE1lbW9yeQotICAgICAg
ICAgICAgJiYgISgoZGVzY3JpcHRvclB0ci0+c2hhcmVkTWVtb3J5RmxhZ3MgXiBzaGFyZWRNZW1v
cnlGbGFncykgJiAwNzc3KSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZXNjcmlwdG9y
UHRyID0gZGVzY3JpcHRvclB0ci0+bmV4dDsKLSAgICB9Ci0KLSAgICBpZiAoIWRlc2NyaXB0b3JQ
dHIpIHsKLSAgICAgICAgZGVzY3JpcHRvclB0ciA9IChGYWtlU2hhcmVkTWVtb3J5RGVzY3JpcHRv
ciopbWFsbG9jKHNpemVvZihGYWtlU2hhcmVkTWVtb3J5RGVzY3JpcHRvcikpOwotICAgICAgICBp
ZiAoIWRlc2NyaXB0b3JQdHIpIHsKLSAgICAgICAgICAgIGVycm5vID0gRU5PTUVNOwotICAgICAg
ICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGRlc2NyaXB0b3JQdHItPmtleSA9
IGtleTsKLSAgICAgICAgZGVzY3JpcHRvclB0ci0+cmVxdWVzdGVkU2l6ZSA9IHJlcXVlc3RlZFNp
emVPZlNoYXJlZE1lbW9yeTsKLSAgICAgICAgZGVzY3JpcHRvclB0ci0+c2hhcmVkTWVtb3J5Rmxh
Z3MgPSBzaGFyZWRNZW1vcnlGbGFnczsKLSAgICAgICAgZGVzY3JpcHRvclB0ci0+c2hhcmVkTWVt
b3J5SWRlbnRpZmllciA9ICsrZmFrZVNoYXJlZE1lbW9yeUlkZW50aWZpZXI7Ci0gICAgICAgIGRl
c2NyaXB0b3JQdHItPnJlZmVyZW5jZUNvdW50ID0gMDsKLSAgICAgICAgZGVzY3JpcHRvclB0ci0+
bW1hcGVkQWRkcmVzcyA9IDA7Ci0gICAgICAgIGRlc2NyaXB0b3JQdHItPm1tYXBlZFNpemUgPSAw
OwotICAgICAgICBkZXNjcmlwdG9yUHRyLT5uZXh0ID0gc2htRGVzY3JpcHRvckxpc3Q7Ci0gICAg
ICAgIHNobURlc2NyaXB0b3JMaXN0ID0gZGVzY3JpcHRvclB0cjsKLSAgICB9Ci0gICAgcmV0dXJu
IGRlc2NyaXB0b3JQdHItPnNoYXJlZE1lbW9yeUlkZW50aWZpZXI7Ci19Ci0KLXN0YXRpYyBpbnQg
c2hpbV9zaG1jdGwoaW50IHNoYXJlZE1lbW9yeUlkZW50aWZpZXIsIGludCBjbWQsIHN0cnVjdCBz
aG1pZF9kcyogb3V0cHV0RGVzY3JpcHRvcikKLXsKLSAgICBpZiAoc2hpbV9kaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm4gc2htY3RsKHNoYXJlZE1lbW9yeUlkZW50aWZpZXIsIGNtZCwgb3V0cHV0
RGVzY3JpcHRvcik7Ci0KLSAgICBGYWtlU2hhcmVkTWVtb3J5RGVzY3JpcHRvciogZGVzY3JpcHRv
clB0ciA9IGZpbmRCeVNoYXJlZE1lbW9yeUlkZW50aWZpZXIoc2hhcmVkTWVtb3J5SWRlbnRpZmll
cik7Ci0KLSAgICBpZiAoIWRlc2NyaXB0b3JQdHIpIHsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7
Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGNtZCkgewotICAgIGNh
c2UgSVBDX1NFVDoKLSAgICBjYXNlIElQQ19STUlEOgotICAgICAgICBlcnJubyA9IEVQRVJNOwot
ICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBjYXNlIElQQ19TVEFUOgotICAgICAgICBvdXRwdXRE
ZXNjcmlwdG9yLT5zaG1fcGVybS5jdWlkID0gb3V0cHV0RGVzY3JpcHRvci0+c2htX3Blcm0udWlk
ID0gZ2V0dWlkKCk7Ci0gICAgICAgIG91dHB1dERlc2NyaXB0b3ItPnNobV9wZXJtLmNnaWQgPSBv
dXRwdXREZXNjcmlwdG9yLT5zaG1fcGVybS5naWQgPSBnZXRnaWQoKTsKLSAgICAgICAgb3V0cHV0
RGVzY3JpcHRvci0+c2htX3Blcm0ubW9kZSA9IGRlc2NyaXB0b3JQdHItPnNoYXJlZE1lbW9yeUZs
YWdzICYgMDc3NzsKLQotICAgICAgICBvdXRwdXREZXNjcmlwdG9yLT5zaG1fc2Vnc3ogPSBkZXNj
cmlwdG9yUHRyLT5yZXF1ZXN0ZWRTaXplOwotCi0gICAgICAgIG91dHB1dERlc2NyaXB0b3ItPnNo
bV9jcGlkID0gb3V0cHV0RGVzY3JpcHRvci0+c2htX2xwaWQgPSBnZXRwaWQoKTsKLQotICAgICAg
ICBvdXRwdXREZXNjcmlwdG9yLT5zaG1fbmF0dGNoID0gZGVzY3JpcHRvclB0ci0+cmVmZXJlbmNl
Q291bnQ7Ci0KLSAgICAgICAgb3V0cHV0RGVzY3JpcHRvci0+c2htX2N0aW1lID0gb3V0cHV0RGVz
Y3JpcHRvci0+c2htX2F0aW1lID0gb3V0cHV0RGVzY3JpcHRvci0+c2htX2R0aW1lID0gdGltZSgw
KTsKLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBlcnJubyA9IEVJTlZBTDsKLSAg
ICByZXR1cm4gLTE7Ci19Ci0KLURZTERfSU5URVJQT1NFKHNoaW1fc2htYXQsIHNobWF0KTsKLURZ
TERfSU5URVJQT1NFKHNoaW1fc2htZHQsIHNobWR0KTsKLURZTERfSU5URVJQT1NFKHNoaW1fc2ht
Z2V0LCBzaG1nZXQpOwotRFlMRF9JTlRFUlBPU0Uoc2hpbV9zaG1jdGwsIHNobWN0bCk7Ci0KLXN0
YXRpYyBDRkNvbXBhcmlzb25SZXN1bHQgc2hpbUNGU3RyaW5nQ29tcGFyZShDRlN0cmluZ1JlZiBh
LCBDRlN0cmluZ1JlZiBiLCBDRlN0cmluZ0NvbXBhcmVGbGFncyBvcHRpb25zKQotewotICAgIGlm
IChwbHVnaW5Qcm9jZXNzU2hpbUNhbGxiYWNrcy5zdHJpbmdDb21wYXJlKSB7Ci0gICAgICAgIENG
Q29tcGFyaXNvblJlc3VsdCByZXN1bHQ7Ci0gICAgICAgIC8vIEZJWE1FIChzZWUgcmRhcjovLzcy
ODk3MjkxKTogV29yayBhcm91bmQgYSBDbGFuZyBidWcgd2hlcmUgX19idWlsdGluX3JldHVybl9h
ZGRyZXNzKCkKLSAgICAgICAgLy8gc29tZXRpbWVzIGdpdmVzIHVzIGEgc2lnbmVkIHBvaW50ZXIs
IGFuZCBzb21ldGltZXMgZG9lcyBub3QuCi0gICAgICAgIHZvaWQqIHJldHVybkFkZHJlc3MgPSBf
X2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7Ci0jaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgcmV0
dXJuQWRkcmVzcyA9IHB0cmF1dGhfc3RyaXAocmV0dXJuQWRkcmVzcywgcHRyYXV0aF9rZXlfcHJv
Y2Vzc19kZXBlbmRlbnRfY29kZSk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKHBsdWdpblByb2Nlc3NT
aGltQ2FsbGJhY2tzLnN0cmluZ0NvbXBhcmUoYSwgYiwgb3B0aW9ucywgcmV0dXJuQWRkcmVzcywg
cmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcmV0dXJu
IENGU3RyaW5nQ29tcGFyZShhLCBiLCBvcHRpb25zKTsKLX0KLQotRFlMRF9JTlRFUlBPU0Uoc2hp
bUNGU3RyaW5nQ29tcGFyZSwgQ0ZTdHJpbmdDb21wYXJlKTsKLQotCi1fX2F0dHJpYnV0ZV9fKCh2
aXNpYmlsaXR5KCJkZWZhdWx0IikpKQotdm9pZCBXZWJLaXRQbHVnaW5Qcm9jZXNzU2hpbUluaXRp
YWxpemUoY29uc3QgUGx1Z2luUHJvY2Vzc1NoaW1DYWxsYmFja3MmIGNhbGxiYWNrcykKLXsKLSAg
ICBwbHVnaW5Qcm9jZXNzU2hpbUNhbGxiYWNrcyA9IGNhbGxiYWNrczsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9tYWMvY29tLmFwcGxlLldlYktpdC5wbHVn
aW4tY29tbW9uLnNiLmluIGIvU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL21hYy9jb20uYXBw
bGUuV2ViS2l0LnBsdWdpbi1jb21tb24uc2IuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGMyMDE1ZWFmMDVmNzAyZDg3ZDdhMDVlNGM1NzU4MjJlOTBjNzFmZjkuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9QbHVnaW5Q
cm9jZXNzL21hYy9jb20uYXBwbGUuV2ViS2l0LnBsdWdpbi1jb21tb24uc2IuaW4KKysrIC9kZXYv
bnVsbApAQCAtMSw1MjAgKzAsMCBAQAotOyBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi07Ci07IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotOyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLTsg
YXJlIG1ldDoKLTsgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLTsgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotOyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotOyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi07ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi07Ci07IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLTsgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi07IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLTsgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi07IEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LTsgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLTsgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi07IElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi07IENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi07IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLTsgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi0odmVyc2lvbiAxKQotKGRlbnkgZGVmYXVsdCAod2l0aCBwYXJ0aWFsLXN5bWJv
bGljYXRpb24pKQotKGFsbG93IHN5c3RlbS1hdWRpdCBmaWxlLXJlYWQtbWV0YWRhdGEpCi0KLShp
bXBvcnQgInN5c3RlbS5zYiIpCi0KLSNpbmNsdWRlICJTaGFyZWQvU2FuZGJveC9wcmVmZXJlbmNl
cy5zYiIKLQotOzs7IHByb2Nlc3MtaW5mbyogZGVmYXVsdHMgdG8gYWxsb3c7IGRlbnkgaXQgYW5k
IHRoZW4gYWxsb3cgb3BlcmF0aW9ucyB3ZSBhY3R1YWxseSBuZWVkLgotKGRlbnkgcHJvY2Vzcy1p
bmZvKikKLShhbGxvdyBwcm9jZXNzLWluZm8tcGlkaW5mbykKLShhbGxvdyBwcm9jZXNzLWluZm8t
c2V0Y29udHJvbCAodGFyZ2V0IHNlbGYpKQotCi0oZGVueSBzeXNjdGwqKQotKGFsbG93IHN5c2N0
bC1yZWFkCi0gICAgKHN5c2N0bC1uYW1lCi0gICAgICAgICJody5hdmFpbGNwdSIKLSAgICAgICAg
Imh3Lm5jcHUiCi0gICAgICAgICJody5tb2RlbCIKLSAgICAgICAgImtlcm4ubWVtb3J5c3RhdHVz
X2xldmVsIgotICAgICAgICAidm0uZm9vdHByaW50X3N1c3BlbmQiKSkKLQotKGRlbnkgaW9raXQt
Z2V0LXByb3BlcnRpZXMpCi0oYWxsb3cgaW9raXQtZ2V0LXByb3BlcnRpZXMKLSAgICAoaW9raXQt
cHJvcGVydHktcmVnZXggIyJeQUFQTCwoRGlzcGxheVBpcGV8T3BlbkNMZGlzYWJsZWR8SU9HcmFw
aGljc19MRVIofF9SZWdUYWdfMXxfUmVnVGFnXzB8X0J1c3lfMil8YWxpYXMtcG9saWN5fGJvb3Qt
ZGlzcGxheXxkaXNwbGF5LWFsaWFzfG11eC1zd2l0Y2gtc3RhdGV8bmRydi1kZXZ8cHJpbWFyeS1k
aXNwbGF5fHNsb3QtbmFtZSkiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiQUdDSW5mbyIpCi0gICAg
KGlva2l0LXByb3BlcnR5LXJlZ2V4ICMiXkFUWSwoY2JpdHN8ZmJfKGxpbmVieXRlc3xvZmZzZXR8
c2l6ZSl8aW50cmV2KSIpCi0gICAgKGlva2l0LXByb3BlcnR5LXJlZ2V4ICMiXkFjY2VsKENhcHN8
TmF0aXZlRE1BUm93Qnl0ZUFsaWdubWVudCkiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiQWN0dWF0
aW9uU3VwcG9ydGVkIikKLSAgICAoaW9raXQtcHJvcGVydHkgIkFsbG93RGlzcGxheVNsZWVwIikK
LSAgICAoaW9raXQtcHJvcGVydHkgIkFsd2F5c05lZWRzVmVsb2NpdHlDYWxjdWxhdGVkIikKLSAg
ICAoaW9raXQtcHJvcGVydHkgIkFwcGxlKERpc3BsYXlUeXBlfEdWQUtleURvZXNOb3RFeGlzdHxJ
bnRlbE1FVkFCdW5kbGVOYW1lfFNlbnNlKSIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJDRkJ1bmRs
ZUlkZW50aWZpZXIiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiQ0ZCdW5kbGVJZGVudGlmaWVyS2Vy
bmVsIikgOzsgPHJkYXI6Ly9wcm9ibGVtLzU0MzQ3NTAzPgotICAgIChpb2tpdC1wcm9wZXJ0eS1y
ZWdleCAjIl5EaXNwbGF5KFBhcmFtZXRlckhhbmRsZXJVc2VzQ2hhclB0cnxQcm9kdWN0SUR8Um91
dGluZ3xTZXJpYWxOdW1iZXJ8VmVuZG9ySUQpIikKLSAgICAoaW9raXQtcHJvcGVydHkgIkRldmVs
b3BtZW50IikKLSAgICAoaW9raXQtcHJvcGVydHkgIkRldmljZUVxSUQiKQotICAgIChpb2tpdC1w
cm9wZXJ0eSAiRHJpdmVyIGlzIFJlYWR5IikKLSAgICAoaW9raXQtcHJvcGVydHkgIkVuYWJsZUxQ
VlAiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiRW5kaWFubmVzcyIpCi0gICAgKGlva2l0LXByb3Bl
cnR5ICJGYW1pbHkgSUQiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiRm9yY2VTdXBwb3J0ZWQiKQot
ICAgIChpb2tpdC1wcm9wZXJ0eSAiR1BVQ29uZmlndXJhdGlvblZhcmlhYmxlIikKLSAgICAoaW9r
aXQtcHJvcGVydHkgIkdwdURlYnVnUG9saWN5IikKLSAgICAoaW9raXQtcHJvcGVydHkgIkhJRFBv
aW50ZXJBY2NlbGVyYXRpb25UeXBlIikKLSAgICAoaW9raXQtcHJvcGVydHktcmVnZXggIyJeSU9B
ViguKikoRGV8RW4pY29kZSQiKQotICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdleCAjIl5JT0FjY2Vs
KERpc3BsYXlQaXBlQ2FwYWJpbGl0aWVzfEluZGV4fFJldmlzaW9ufFR5cGVzKSIpCi0gICAgKGlv
a2l0LXByb3BlcnR5LXJlZ2V4ICMiXklPQXVkaW9Db250cm9sKENoYW5uZWxJRHxJRHxTdWJUeXBl
fFVzYWdlKSIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJJT0F1ZGlvQ29udHJvbFZhbHVlIikKLSAg
ICAoaW9raXQtcHJvcGVydHktcmVnZXggIyJeSU9BdWRpb0RldmljZShDYW5CZURlZmF1bHRzfFRy
YW5zcG9ydFR5cGUpIikKLSAgICAoaW9raXQtcHJvcGVydHktcmVnZXggIyJeSU9BdWRpb0VuZ2lu
ZShDaGFubmVsTmFtZXN8Q2xpZW50RGVzY3JpcHRpb258Q29yZUF1ZGlvUGx1Z0lufCh8RGV2aWNl
KURlc2NyaXB0aW9ufEZsYXZvcnxHbG9iYWxVbmlxdWVJRHxPdXRwdXRDaGFubmVsTGF5b3V0fFNh
bXBsZU9mZnNldHxTdGF0ZSkiKQotICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdleCAjIl5JT0F1ZGlv
RW5naW5lQ2xvY2soRG9tYWlufElzU3RhYmxlKSIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJJT0F1
ZGlvRW5naW5lRGlzYWJsZUNsb2NrQm91bmRzQ2hlY2siKQotICAgIChpb2tpdC1wcm9wZXJ0eS1y
ZWdleCAjIl5JT0F1ZGlvRW5naW5lKElucHV0fE91dHB1dClTYW1wbGUoTGF0ZW5jeXxPZmZzZXQp
IikKLSAgICAoaW9raXQtcHJvcGVydHkgIklPQXVkaW9FbmdpbmVJc0hpZGRlbiIpCi0gICAgKGlv
a2l0LXByb3BlcnR5LXJlZ2V4ICMiXklPQXVkaW9FbmdpbmVOdW0oQWN0aXZlVXNlckNsaWVudHN8
U2FtcGxlRnJhbWVzUGVyQnVmZmVyKSIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJJT0F1ZGlvU2Ft
cGxlUmF0ZSIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJJT0F1ZGlvU3RyZWFtU2FtcGxlRm9ybWF0
Qnl0ZU9yZGVyIikKLSAgICAoaW9raXQtcHJvcGVydHkgIklPQmFja2xpZ2h0SGFuZGxlcklEIikK
LSAgICAoaW9raXQtcHJvcGVydHkgIklPQ2xhc3NOYW1lT3ZlcnJpZGUiKQotICAgIChpb2tpdC1w
cm9wZXJ0eSAiSU9DRlBsdWdJblR5cGVzIikKLSAgICAoaW9raXQtcHJvcGVydHkgIklPQ2xhc3Mi
KQotICAgIChpb2tpdC1wcm9wZXJ0eSAiSU9Db25zb2xlVXNlcnMiKQotICAgIChpb2tpdC1wcm9w
ZXJ0eSAiSU9EVkRCdW5kbGVOYW1lIikKLSAgICAoaW9raXQtcHJvcGVydHktcmVnZXggIyJeSU9E
aXNwbGF5KEF0dHJpYnV0ZXN8Q2FwYWJpbGl0eVN0cmluZ3xDb25uZWN0RmxhZ3N8Q29udHJvbGxl
cklEfEVESUR8RmlybXdhcmVMZXZlbHxNQ0NTVmVyc2lvbnxQYXJhbWV0ZXJzfFByZWZzS2V5fFRl
Y2hub2xvZ3lUeXBlfFVzYWdlVGltZSkiKQotICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdleCAjIl5J
T0ZCKENMVVREZWZlcnxDb25maWd8Q3VycmVudFBpeGVsQ2xvY2t8Q3VycmVudFBpeGVsQ291bnR8
Q3Vyc29ySW5mb3xEZXBlbmRlbnRJRHxEZXBlbmRlbnRJbmRleHxEZXRhaWxlZFRpbWluZ3N8R2Ft
bWFDb3VudHxHYW1tYUhlYWRlclNpemV8R2FtbWFXaWR0aHxJMkNJbnRlcmZhY2VJRHN8STJDSW50
ZXJmYWNlSW5mb3xJbnRlZ3JhdGVkfE1lbW9yeVNpemV8TmVlZHNSZWZyZXNofFByb2JlT3B0aW9u
c3xTY2FsZXJJbmZvfFRpbWluZ1JhbmdlfFRyYW5zZm9ybXxVSVNjYWxlfFdhaXRDdXJzb3JGcmFt
ZXN8V2FpdEN1cnNvclBlcmlvZCkiKQotICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdleCAjIl5JT0ZC
Q3VycmVudFBpeGVsQ291bnQoUmVhbCkiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiSU9GcmFtZWJ1
ZmZlck9wZW5HTEluZGV4IikKLSAgICAoaW9raXQtcHJvcGVydHkgIklPR2VuZXJhbEludGVyZXN0
IikKLSAgICAoaW9raXQtcHJvcGVydHkgIklPR0xCdW5kbGVOYW1lIikKLSAgICAoaW9raXQtcHJv
cGVydHktcmVnZXggIyJeSU9HVkEoQkdSQUVuY3xDb2RlY3xFbmNvZGVyUmVzdHJpY3RlZHxTY2Fs
ZXJ8VlRDYXBhYmlsaXRpZXMpIikKLSAgICAoaW9raXQtcHJvcGVydHktcmVnZXggIl5JT0dWQVtB
LVpdKyhEZXxFbiljb2RlIikKLSAgICAoaW9raXQtcHJvcGVydHkgIklPR1ZBSDI2NEVuY29kZUNh
cGFiaWxpdGllcyIpIDs7IDxyZGFyOi8vcHJvYmxlbS80OTQ5ODA0MD4KLSAgICAoaW9raXQtcHJv
cGVydHkgIklPSTJDVHJhbnNhY3Rpb25UeXBlcyIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJJT0tp
dERlYnVnIikKLSAgICAoaW9raXQtcHJvcGVydHkgIklPTUFDQWRkcmVzcyIpIDs7IEZvciBzb21l
IEZsYXNoIHBsYXllcnMKLSAgICAoaW9raXQtcHJvcGVydHkgIklPTWF0Y2hDYXRlZ29yeSIpCi0g
ICAgKGlva2l0LXByb3BlcnR5LXJlZ2V4ICMiXklPTmFtZShNYXRjaHxNYXRjaGVkKSIpCi0gICAg
KGlva2l0LXByb3BlcnR5ICJJT09DREJ1bmRsZU5hbWUiKQotICAgIChpb2tpdC1wcm9wZXJ0eS1y
ZWdleCAjIl5JT1BDSSgoQ2xhc3N8UHJpbWFyeXxQcm9wZXJ0eXwpTWF0Y2h8RXhwcmVzcyhDYXBh
YmlsaXRpZXN8TGluayhTdGF0dXN8Q2FwYWJpbGl0aWVzKSl8TVNJTW9kZXxSZXNvdXJjZWR8VHVu
bmVsbGVkKSIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJJT1BNU3RyaWN0VHJlZU9yZGVyIikKLSAg
ICAoaW9raXQtcHJvcGVydHktcmVnZXggIyJeSU9QbGF0Zm9ybShTZXJpYWxOdW1iZXJ8VVVJRCki
KSA7OyBEaXR0bwotICAgIChpb2tpdC1wcm9wZXJ0eSAiSU9Qb3dlck1hbmFnZW1lbnQiKQotICAg
IChpb2tpdC1wcm9wZXJ0eSAiSU9Qcm9iZVNjb3JlIikKLSAgICAoaW9raXQtcHJvcGVydHkgIklP
UHJvcGVydHlNYXRjaCIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJJT1Byb3ZpZGVyQ2xhc3MiKQot
ICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdleCAjIl5JT1JlcG9ydChMdXJlc3xMZWdlbmQofFB1Ymxp
YykpIikKLSAgICAoaW9raXQtcHJvcGVydHkgIklPU2NyZWVuUmVzdG9yZVN0YXRlIikKLSAgICAo
aW9raXQtcHJvcGVydHkgIklPU291cmNlVmVyc2lvbiIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJJ
T1ZBQnVuZGxlTmFtZSIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJJT1ZBUmVuZGVyZXJJRCIpCi0g
ICAgKGlva2l0LXByb3BlcnR5ICJJT1ZBUmVuZGVyZXJTdWJJRCIpCi0gICAgKGlva2l0LXByb3Bl
cnR5LXJlZ2V4ICMiXkludGVybmFsU3RhdGlzdGljcyh8QWNjbSkiKQotICAgIChpb2tpdC1wcm9w
ZXJ0eS1yZWdleCAjIl5NVCggQnVpbHQtSW58SElERGV2aWNlKSIpCi0gICAgKGlva2l0LXByb3Bl
cnR5ICJNYWludGFpblBvd2VySW5VSUxvY2siKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiTWF4IFBh
Y2tldCBTaXplIikKLSAgICAoaW9raXQtcHJvcGVydHktcmVnZXggIyJeTWV0YWxQbHVnaW4oTmFt
ZXxDbGFzc05hbWUpIikKLSAgICAoaW9raXQtcHJvcGVydHkgIk1ldGFsU3RhdGlzdGljc05hbWUi
KQotICAgIChpb2tpdC1wcm9wZXJ0eS1yZWdleCAjIl5NdWx0aXRvdWNoIChJRHxTZXJpYWwgTnVt
YmVyfFN1YmRldmljZSBJRCkiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiTlZEQSxtbS12ZXJzaW9u
IikKLSAgICAoaW9raXQtcHJvcGVydHkgIk5WREEsTlZQcmVzZW50bWVudC12ZXJzaW9uIikKLSAg
ICAoaW9raXQtcHJvcGVydHkgIk5WREEsRW5hYmxlLUEyUjEwRzEwQjEwRm9ybWF0IikKLSAgICAo
aW9raXQtcHJvcGVydHkgIk5YU3lzdGVtSW5mbyIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJOb0F1
dG9Sb3V0ZSIpCi0gICAgKGlva2l0LXByb3BlcnR5LXJlZ2V4ICMiXlBlcmZvcm1hbmNlU3RhdGlz
dGljcyh8QWNjdW0pIikKLSAgICAoaW9raXQtcHJvcGVydHkgIlByb3RvY29sIENoYXJhY3Rlcmlz
dGljcyIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJTYWZlRWplY3RSZXF1ZXN0ZWQiKQotICAgIChp
b2tpdC1wcm9wZXJ0eS1yZWdleCAjIl5TZW5zb3IgKENvbHVtbnN8UmVnaW9uIChEZXNjcmlwdG9y
fFBhcmFtKXxSb3dzfFN1cmZhY2UgKERlc2NyaXB0b3J8SGVpZ2h0fFdpZHRoKSkiKQotICAgIChp
b2tpdC1wcm9wZXJ0eSAiU3VwcG9ydEF1ZGlvQVVVQyIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJT
dXJmYWNlTGlzdCIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJUaW1lU3RhbXBGaWx0ZXJpbmciKQot
ICAgIChpb2tpdC1wcm9wZXJ0eSAiVHJhbnNwb3J0IikKLSAgICAoaW9raXQtcHJvcGVydHkgIlZS
QU0sdG90YWxNQiIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJXQU5UU19GUkFNRVNfSUdOT1JFRCIp
Ci0gICAgKGlva2l0LXByb3BlcnR5ICJib2FyZC1pZCIpCi0gICAgKGlva2l0LXByb3BlcnR5LXJl
Z2V4ICMiXmF1ZGlvLShjb2RlYy1pbmZvfGRldmljZS0obXZhbHVlfG52YWx1ZSkpIikKLSAgICAo
aW9raXQtcHJvcGVydHkgImF2LXNpZ25hbC10eXBlIikKLSAgICAoaW9raXQtcHJvcGVydHkgImJj
ZFZlcnNpb24iKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiYm9vdC1nYW1tYS1yZXN0b3JlZCIpCi0g
ICAgKGlva2l0LXByb3BlcnR5ICJidWlsdC1pbiIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJjYWls
X3Byb3BlcnRpZXMiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiY29ubmVjdG9yLXR5cGUiKQotICAg
IChpb2tpdC1wcm9wZXJ0eSAiZGV2aWNlLWNvbG9ycyIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJk
cG0iKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiZ3JhcGhpYy1vcHRpb25zIikKLSAgICAoaW9raXQt
cHJvcGVydHkgImlkUHJvZHVjdCIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJpZFZlbmRvciIpCi0g
ICAgKGlva2l0LXByb3BlcnR5ICJpb2ZiX3ZlcnNpb24iKQotICAgIChpb2tpdC1wcm9wZXJ0eS1y
ZWdleCAjIl5wYXJzZXItKG9wdGlvbnN8dHlwZSkiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAicG9y
dC1udW1iZXIiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAic3RhcnR1cC10aW1pbmciKQotICAgIChp
b2tpdC1wcm9wZXJ0eSAidG91Y2gtc2l6ZS1pZCIpCi0pCi0KLShkZW55IG1hY2gtbG9va3VwICh4
cGMtc2VydmljZS1uYW1lLXByZWZpeCAiIikpCi0oYWxsb3cgbWFjaC1sb29rdXAKLSAgICAoeHBj
LXNlcnZpY2UtbmFtZSAiY29tLmFwcGxlLlZpZXdCcmlkZ2VBdXhpbGlhcnkiKQotICAgICh4cGMt
c2VydmljZS1uYW1lICJjb20uYXBwbGUuYWNjZXNzaWJpbGl0eS5tZWRpYWFjY2Vzc2liaWxpdHlk
IikKLSAgICAoeHBjLXNlcnZpY2UtbmFtZSAiY29tLmFwcGxlLmFwcGtpdC54cGMub3BlbkFuZFNh
dmVQYW5lbFNlcnZpY2UiKQotICAgICh4cGMtc2VydmljZS1uYW1lICJjb20uYXBwbGUuYXBwc3Rv
cmUuUGx1Z2luWFBDU2VydmljZSIpIDsgPHJkYXI6Ly9wcm9ibGVtLzM1OTQwOTQ4PgotICAgICh4
cGMtc2VydmljZS1uYW1lICJjb20uYXBwbGUuYXVkaW8uU2FuZGJveEhlbHBlciIpCi0gICAgKHhw
Yy1zZXJ2aWNlLW5hbWUgImNvbS5hcHBsZS5jb3JlbWVkaWEudmlkZW9kZWNvZGVyIikKLSAgICAo
eHBjLXNlcnZpY2UtbmFtZSAiY29tLmFwcGxlLmNvcmVtZWRpYS52aWRlb2VuY29kZXIiKQotICAg
ICh4cGMtc2VydmljZS1uYW1lLXJlZ2V4ICMiXC5hcHBsZS1leHRlbnNpb24tc2VydmljZSQiKQot
ICAgICh4cGMtc2VydmljZS1uYW1lICJjb20uYXBwbGUuaGlzZXJ2aWNlcy14cGNzZXJ2aWNlIikK
LSkKLQotI2lmIFBMQVRGT1JNKE1BQykKLTs7IDxyZGFyOi8vcHJvYmxlbS80NzI2ODE2Nj4KLShh
bGxvdyBtYWNoLWxvb2t1cCAoeHBjLXNlcnZpY2UtbmFtZSAiY29tLmFwcGxlLk1UTENvbXBpbGVy
U2VydmljZSIpKQotI2VuZGlmCi0KLTs7IFV0aWxpdHkgZnVuY3Rpb25zCi0oZGVmaW5lIChob21l
LWxpdGVyYWwgaG9tZS1yZWxhdGl2ZS1saXRlcmFsKQotICAgIChsaXRlcmFsIChzdHJpbmctYXBw
ZW5kIChwYXJhbSAiSE9NRV9ESVIiKSBob21lLXJlbGF0aXZlLWxpdGVyYWwpKSkKLQotKGRlZmlu
ZSAoaG9tZS1saWJyYXJ5LXJlZ2V4IGhvbWUtbGlicmFyeS1yZWxhdGl2ZS1yZWdleCkKLSAgICAo
cmVnZXggKHN0cmluZy1hcHBlbmQgIl4iIChyZWdleC1xdW90ZSAocGFyYW0gIkhPTUVfTElCUkFS
WV9ESVIiKSkgaG9tZS1saWJyYXJ5LXJlbGF0aXZlLXJlZ2V4KSkpCi0KLShkZWZpbmUgKGhvbWUt
bGlicmFyeS1zdWJwYXRoIGhvbWUtbGlicmFyeS1yZWxhdGl2ZS1zdWJwYXRoKQotICAgIChzdWJw
YXRoIChzdHJpbmctYXBwZW5kIChwYXJhbSAiSE9NRV9MSUJSQVJZX0RJUiIpIGhvbWUtbGlicmFy
eS1yZWxhdGl2ZS1zdWJwYXRoKSkpCi0KLShkZWZpbmUgKGhvbWUtbGlicmFyeS1saXRlcmFsIGhv
bWUtbGlicmFyeS1yZWxhdGl2ZS1saXRlcmFsKQotICAgIChsaXRlcmFsIChzdHJpbmctYXBwZW5k
IChwYXJhbSAiSE9NRV9MSUJSQVJZX0RJUiIpIGhvbWUtbGlicmFyeS1yZWxhdGl2ZS1saXRlcmFs
KSkpCi0KLShkZWZpbmUgKGhvbWUtbGlicmFyeS1wcmVmZXJlbmNlcy1yZWdleCBob21lLWxpYnJh
cnktcHJlZmVyZW5jZXMtcmVsYXRpdmUtcmVnZXgpCi0gICAgKHJlZ2V4IChzdHJpbmctYXBwZW5k
ICJeIiAocmVnZXgtcXVvdGUgKHBhcmFtICJIT01FX0xJQlJBUllfUFJFRkVSRU5DRVNfRElSIikp
IGhvbWUtbGlicmFyeS1wcmVmZXJlbmNlcy1yZWxhdGl2ZS1yZWdleCkpKQotCi0oZGVmaW5lICho
b21lLWxpYnJhcnktcHJlZmVyZW5jZXMtc3VicGF0aCBob21lLWxpYnJhcnktcHJlZmVyZW5jZXMt
cmVsYXRpdmUtc3VicGF0aCkKLSAgICAoc3VicGF0aCAoc3RyaW5nLWFwcGVuZCAocGFyYW0gIkhP
TUVfTElCUkFSWV9QUkVGRVJFTkNFU19ESVIiKSBob21lLWxpYnJhcnktcHJlZmVyZW5jZXMtcmVs
YXRpdmUtc3VicGF0aCkpKQotCi0oZGVmaW5lIChob21lLWxpYnJhcnktcHJlZmVyZW5jZXMtbGl0
ZXJhbCBob21lLWxpYnJhcnktcHJlZmVyZW5jZXMtcmVsYXRpdmUtbGl0ZXJhbCkKLSAgICAobGl0
ZXJhbCAoc3RyaW5nLWFwcGVuZCAocGFyYW0gIkhPTUVfTElCUkFSWV9QUkVGRVJFTkNFU19ESVIi
KSBob21lLWxpYnJhcnktcHJlZmVyZW5jZXMtcmVsYXRpdmUtbGl0ZXJhbCkpKQotCi0oZGVmaW5l
IChzaGFyZWQtcHJlZmVyZW5jZXMtcmVhZC13cml0ZSAuIGRvbWFpbnMpCi0gIChmb3ItZWFjaCAo
bGFtYmRhIChkb21haW4pCi0gICAgICAgICAgICAgIChiZWdpbgotICAgICAgICAgICAgICAgIChp
ZiAoZGVmaW5lZD8gYHVzZXItcHJlZmVyZW5jZS13cml0ZSkKLSAgICAgICAgICAgICAgICAgICAg
KGFsbG93IHVzZXItcHJlZmVyZW5jZS1yZWFkIHVzZXItcHJlZmVyZW5jZS13cml0ZSAocHJlZmVy
ZW5jZS1kb21haW4gZG9tYWluKSkpCi0gICAgICAgICAgICAgICAgOyAoVGVtcG9yYXJ5KSBiYWNr
d2FyZCBjb21wYXRpYmlsaXR5IHdpdGggbm9uLUNGUHJlZmVyZW5jZXMgcmVhZGVycyAvIHdyaXRl
cnMuCi0gICAgICAgICAgICAgICAgKGFsbG93IGZpbGUtcmVhZCogZmlsZS13cml0ZSoKLSAgICAg
ICAgICAgICAgICAgICAgICAgKGxpdGVyYWwgKHN0cmluZy1hcHBlbmQgIi9MaWJyYXJ5L1ByZWZl
cmVuY2VzLyIgZG9tYWluICIucGxpc3QiKSkKLSAgICAgICAgICAgICAgICAgICAgICAgKGhvbWUt
bGlicmFyeS1wcmVmZXJlbmNlcy1saXRlcmFsIChzdHJpbmctYXBwZW5kICIvIiBkb21haW4gIi5w
bGlzdCIpKQotICAgICAgICAgICAgICAgICAgICAgICAoaG9tZS1saWJyYXJ5LXByZWZlcmVuY2Vz
LXJlZ2V4IChzdHJpbmctYXBwZW5kICMiL0J5SG9zdC8iIChyZWdleC1xdW90ZSBkb21haW4pICMi
XC4uKlwucGxpc3QkIikpKSkpCi0gICAgICAgICAgICBkb21haW5zKSkKLQotOzsgUmVtb3ZlIHdo
ZW4gPHJkYXI6Ly9wcm9ibGVtLzI5NjQ2MDk0PiBpcyBmaXhlZC4KLShkZWZpbmUgKEhFWC1wYXR0
ZXJuLW1hdGNoLWdlbmVyYXRvciBwYXR0ZXJuLWRlc2NyaXB0b3IpCi0gICAgKGxldHJlYyAoKHBh
dHRlcm4tc3RyaW5nICIiKSkKLSAgICAgICAgKGZvci1lYWNoICAobGFtYmRhIChyZXBlYXQtY291
bnQpCi0gICAgICAgICAgICAoaWYgKHplcm8/IHJlcGVhdC1jb3VudCkKLSAgICAgICAgICAgICAg
ICAoc2V0ISBwYXR0ZXJuLXN0cmluZyAoc3RyaW5nLWFwcGVuZCAgcGF0dGVybi1zdHJpbmcgIi0i
KSkKLSAgICAgICAgICAgICAgICAobGV0IGFwcGVuZGVyICgoY291bnQgcmVwZWF0LWNvdW50KSkK
LSAgICAgICAgICAgICAgICAgICAgKGlmICg+IGNvdW50IDApCi0gICAgICAgICAgICAgICAgICAg
ICAgICAoYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0ISBwYXR0ZXJuLXN0
cmluZyAoc3RyaW5nLWFwcGVuZCAgcGF0dGVybi1zdHJpbmcgIlswLTlBLUZdIikpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGFwcGVuZGVyICgtIGNvdW50IDEpKSkpKSkpCi0gICAgICAg
ICAgICBwYXR0ZXJuLWRlc2NyaXB0b3IpCi0gICAgcGF0dGVybi1zdHJpbmcpKQotCi07OyByZXR1
cm4gYSByZWdleCBwYXR0ZXJuIG1hdGNoaW5nIHN0cmluZyBmb3IgOC00LTQtNC0xMiBVVUlEczoK
LShkZWZpbmUgKHV1aWQtSEVYLXBhdHRlcm4tbWF0Y2gtc3RyaW5nKQotICAgIChIRVgtcGF0dGVy
bi1tYXRjaC1nZW5lcmF0b3IgJyg4IDAgNCAwIDQgMCA0IDAgMTIpKSkKLQotOzsgZ2xvYmFsIHRv
IGhvbGQgdGhlIGNvbXB1dGVkIFVVSUQgbWF0Y2hpbmcgcGF0dGVybi4KLShkZWZpbmUgKnV1aWQt
cGF0dGVybiogIiIpCi0KLShkZWZpbmUgKHV1aWQtcmVnZXgtc3RyaW5nKQotICAgIChpZiAoemVy
bz8gKHN0cmluZy1sZW5ndGggKnV1aWQtcGF0dGVybiopKQotICAgICAgICAoc2V0ISAqdXVpZC1w
YXR0ZXJuKiAodXVpZC1IRVgtcGF0dGVybi1tYXRjaC1zdHJpbmcpKSkKLSAgICAqdXVpZC1wYXR0
ZXJuKikKLQotKGRlZmluZSAoYWxsb3ctcmVhZC13cml0ZS1kaXJlY3RvcnktYW5kLWlzc3VlLXJl
YWQtd3JpdGUtZXh0ZW5zaW9ucyBwYXRoKQotICAgIChpZiBwYXRoCi0gICAgICAgIChiZWdpbgot
ICAgICAgICAgICAgKGFsbG93IGZpbGUtcmVhZCogZmlsZS13cml0ZSogKHN1YnBhdGggcGF0aCkp
Ci0gICAgICAgICAgICAoYWxsb3cgZmlsZS1pc3N1ZS1leHRlbnNpb24gKHJlcXVpcmUtYWxsIChl
eHRlbnNpb24tY2xhc3MgImNvbS5hcHBsZS5hcHAtc2FuZGJveC5yZWFkIikgKHN1YnBhdGggcGF0
aCkpKQotICAgICAgICAgICAgKGFsbG93IGZpbGUtaXNzdWUtZXh0ZW5zaW9uIChyZXF1aXJlLWFs
bCAoZXh0ZW5zaW9uLWNsYXNzICJjb20uYXBwbGUuYXBwLXNhbmRib3gucmVhZC13cml0ZSIpIChz
dWJwYXRoIHBhdGgpKSkpKSkKLQotOzsgV2ViS2l0MiBzYW5kYm94IGxhdW5jaGVyIG5lZWRzIHRv
IGRlZmluZSBhbiBfT1NfVkVSU0lPTiBwYXJhbWV0ZXIKLTs7IFRoaXMgcGFyYW1ldGVyIGlzIHRo
ZSBtYWpvciBPUyBWZXJzaW9uIG51bWJlci4KLShpZiAobm90IChkZWZpbmVkPyAnb3MtdmVyc2lv
bikpCi0gICAgKGRlZmluZSBvcy12ZXJzaW9uIChwYXJhbSAiX09TX1ZFUlNJT04iKSkpCi0KLShz
eXN0ZW0tZ3JhcGhpY3MpCi0KLTs7IFJlYWQtb25seSBwcmVmZXJlbmNlcwotKHNoYXJlZC1wcmVm
ZXJlbmNlcy1yZWFkCi0gICAgIi5HbG9iYWxQcmVmZXJlbmNlcyIKLSAgICAiY29tLmFwcGxlLkFU
UyIKLSAgICAiY29tLmFwcGxlLkFjY2Vzc2liaWxpdHkiCi0gICAgImNvbS5hcHBsZS5CbHVldG9v
dGgiCi0gICAgImNvbS5hcHBsZS5Db3JlR3JhcGhpY3MiCi0gICAgImNvbS5hcHBsZS5ISVRvb2xi
b3giCi0gICAgImNvbS5hcHBsZS5RdWlja1RpbWUiCi0gICAgImNvbS5hcHBsZS5kcml2ZXIuQXBw
bGVCbHVldG9vdGhNdWx0aXRvdWNoLm1vdXNlIgotICAgICJjb20uYXBwbGUuZHJpdmVyLkFwcGxl
Qmx1ZXRvb3RoTXVsdGl0b3VjaC50cmFja3BhZCIKLSAgICAiY29tLmFwcGxlLmRyaXZlci5BcHBs
ZUhJRE1vdXNlIgotICAgICJjb20uYXBwbGUuaW5wdXRtZXRob2RraXQiCi0gICAgImNvbS5hcHBs
ZS5pV29yay5QYWdlcyIKLSAgICAiY29tLmFwcGxlLkxhdW5jaFNlcnZpY2VzIgotICAgICJjb20u
YXBwbGUuTXVsdGl0b3VjaFN1cHBvcnQiCi0gICAgImNvbS5hcHBsZS5zZWN1cml0eSIKLSAgICAi
Y29tLmFwcGxlLnNlY3VyaXR5LnJldm9jYXRpb24iCi0gICAgImNvbS5hcHBsZS5zZWN1cml0eV9j
b21tb24iCi0gICAgImNvbS5hcHBsZS5zcGVlY2gudm9pY2UucHJlZnMiCi0gICAgImNvbS5hcHBs
ZS5zcGVlY2guc3ludGhlc2lzLmdlbmVyYWwucHJlZnMiCi0gICAgImNvbS5hcHBsZS5zcGVlY2gu
cmVjb2duaXRpb24uQXBwbGVTcGVlY2hSZWNvZ25pdGlvbi5wcmVmcyIKLSAgICAiY29tLmFwcGxl
LnN5c3RlbXNvdW5kIgotICAgICJjb20uYXBwbGUudW5pdmVyc2FsYWNjZXNzIgotICAgICJjb20u
YXBwbGUuV2ViRm91bmRhdGlvbiIKLSAgICAiY29tLmFwcGxlLldlYktpdC5QbHVnaW5Qcm9jZXNz
IgotICAgICJwYnMiCi0gICAgImNvbS5hcHBsZS5TZXJ2aWNlc01lbnUuU2VydmljZXMiKQotCi07
OyBSZWFkLW9ubHkgZGF0YQotKGFsbG93IGZpbGUtcmVhZCoKLSAgICAobGl0ZXJhbCAiLyIpCi0g
ICAgKGxpdGVyYWwgIi9wcml2YXRlL2V0Yy9ob3N0cyIpCi0gICAgKGxpdGVyYWwgIi9wcml2YXRl
L2V0Yy9wcm90b2NvbHMiKQotICAgIChsaXRlcmFsICIvcHJpdmF0ZS9ldGMvc2VydmljZXMiKQot
ICAgIChsaXRlcmFsICIvcHJpdmF0ZS9ldGMvcmVzb2x2LmNvbmYiKQotICAgIChsaXRlcmFsICIv
cHJpdmF0ZS92YXIvcnVuL3Jlc29sdi5jb25mIikKLQotICAgIChzdWJwYXRoICIvTGlicmFyeS9G
cmFtZXdvcmtzIikKLSAgICAoc3VicGF0aCAiL0xpYnJhcnkvTWFuYWdlZCBQcmVmZXJlbmNlcyIp
Ci0gICAgKHN1YnBhdGggIi9wcml2YXRlL3Zhci9kYi9tZHMiKQotCi0gICAgKHJlZ2V4ICMiXi9M
aWJyYXJ5L1ByZWZlcmVuY2VzL2NvbVwuYXBwbGVcLnNlY3VyaXR5IikKLSAgICAoaG9tZS1saXRl
cmFsICIvLkNGVXNlclRleHRFbmNvZGluZyIpCi0gICAgKGhvbWUtbGlicmFyeS1zdWJwYXRoICIv
QXVkaW8iKQotICAgIChob21lLWxpYnJhcnktc3VicGF0aCAiL0NvbG9yUGlja2VycyIpCi0gICAg
KGhvbWUtbGlicmFyeS1zdWJwYXRoICIvQ29sb3JTeW5jIikKLSAgICAoc3VicGF0aCAiL0xpYnJh
cnkvQ29tcG9uZW50cyIpCi0gICAgKGhvbWUtbGlicmFyeS1zdWJwYXRoICIvQ29tcG9uZW50cyIp
Ci0gICAgKHN1YnBhdGggIi9MaWJyYXJ5L0NvbnRleHR1YWwgTWVudSBJdGVtcyIpCi0gICAgKHN1
YnBhdGggIi9MaWJyYXJ5L0lucHV0IE1ldGhvZHMiKQotICAgIChob21lLWxpYnJhcnktc3VicGF0
aCAiL0lucHV0IE1ldGhvZHMiKQotICAgIChzdWJwYXRoICIvTGlicmFyeS9JbnB1dE1hbmFnZXJz
IikKLSAgICAoaG9tZS1saWJyYXJ5LXN1YnBhdGggIi9JbnB1dE1hbmFnZXJzIikKLSAgICAoaG9t
ZS1saWJyYXJ5LXN1YnBhdGggIi9LZXlCaW5kaW5ncyIpCi0gICAgKHN1YnBhdGggIi9MaWJyYXJ5
L0tleWJvYXJkIExheW91dHMiKQotICAgIChob21lLWxpYnJhcnktc3VicGF0aCAiL0tleWJvYXJk
IExheW91dHMiKQotICAgIChzdWJwYXRoICIvTGlicmFyeS9Gb250cyIpCi0gICAgKGhvbWUtbGli
cmFyeS1zdWJwYXRoICIvRm9udHMiKQotICAgIChzdWJwYXRoICIvTGlicmFyeS9TcGVsbGluZyIp
Ci0gICAgKGhvbWUtbGlicmFyeS1zdWJwYXRoICIvU3BlbGxpbmciKQotICAgIChzdWJwYXRoICIv
TGlicmFyeS9QREYgU2VydmljZXMiKQotICAgIChob21lLWxpYnJhcnktc3VicGF0aCAiL1BERiBT
ZXJ2aWNlcyIpCi0gICAgKGhvbWUtbGlicmFyeS1wcmVmZXJlbmNlcy1saXRlcmFsICIvUXVpY2tU
aW1lIFByZWZlcmVuY2VzIikKLQotICAgIChob21lLWxpYnJhcnktbGl0ZXJhbCAiL0NhY2hlcy9j
b20uYXBwbGUuY29yZWF1ZGlvLmNvbXBvbmVudHMucGxpc3QiKQotCi0gICAgKHN1YnBhdGggIi9M
aWJyYXJ5L0F1ZGlvL1NvdW5kcyIpCi0gICAgKHN1YnBhdGggIi9MaWJyYXJ5L0F1ZGlvL1BsdWct
SW5zL0NvbXBvbmVudHMiKQotICAgIChob21lLWxpYnJhcnktc3VicGF0aCAiL0F1ZGlvL1BsdWct
SW5zL0NvbXBvbmVudHMiKQotICAgIChzdWJwYXRoICIvTGlicmFyeS9BdWRpby9QbHVnLUlucy9I
QUwiKQotICAgIChzdWJwYXRoICIvTGlicmFyeS9Db3JlTWVkaWFJTy9QbHVnLUlucy9EQUwiKQot
ICAgIChzdWJwYXRoICIvTGlicmFyeS9RdWlja1RpbWUiKQotICAgIChob21lLWxpYnJhcnktc3Vi
cGF0aCAiL1F1aWNrVGltZSIpCi0gICAgKHN1YnBhdGggIi9MaWJyYXJ5L1ZpZGVvL1BsdWctSW5z
IikKLSAgICAoaG9tZS1saWJyYXJ5LXN1YnBhdGggIi9DYWNoZXMvUXVpY2tUaW1lIikKLQotICAg
IChob21lLWxpYnJhcnktbGl0ZXJhbCAiL0FwcGxpY2F0aW9uIFN1cHBvcnQvU3luY1NlcnZpY2Vz
L0xvY2FsL0NsaWVudHNXaXRoQ2hhbmdlcy9jb20uYXBwbGUuS2V5Y2hhaW4iKQotCi0gICAgKHN1
YnBhdGggIi9MaWJyYXJ5L0NvbG9yU3luYyIpCi0KLSAgICAoaG9tZS1saXRlcmFsICIvTGlicmFy
eS9QcmVmZXJlbmNlcy9jb20uYXBwbGUubG9va3VwLnNoYXJlZC5wbGlzdCIpKQotCi07OyBTZWN1
cml0eSBmcmFtZXdvcmsKLShhbGxvdyBtYWNoLWxvb2t1cCAoZ2xvYmFsLW5hbWUgImNvbS5hcHBs
ZS5vY3NwZCIpKQotKGFsbG93IGZpbGUtcmVhZCoKLSAgICAgICAoc3VicGF0aCAiL3ByaXZhdGUv
dmFyL2RiL21kcyIpCi0gICAgICAgKGxpdGVyYWwgIi9wcml2YXRlL3Zhci9kYi9EZXRhY2hlZFNp
Z25hdHVyZXMiKSkKLShhbGxvdyBpcGMtcG9zaXgtc2htLXJlYWQqIGlwYy1wb3NpeC1zaG0td3Jp
dGUtZGF0YQotICAgICAgIChpcGMtcG9zaXgtbmFtZSAiY29tLmFwcGxlLkFwcGxlRGF0YWJhc2VD
aGFuZ2VkIikpCi0KLTs7IFJlYWQtd3JpdGUgcHJlZmVyZW5jZXMgYW5kIGRhdGEKLShhbGxvdyBz
eXN0ZW0tZnNjdGwgKGZzY3RsLWNvbW1hbmQgKF9JTyAiaCIgNDcpKSkKLQotOzsgSU9LaXQgdXNl
ciBjbGllbnRzCi0oYWxsb3cgaW9raXQtb3BlbgotICAgIChpb2tpdC11c2VyLWNsaWVudC1jbGFz
cyAiSU9BdWRpb0NvbnRyb2xVc2VyQ2xpZW50IikKLSAgICAoaW9raXQtdXNlci1jbGllbnQtY2xh
c3MgIklPQXVkaW9FbmdpbmVVc2VyQ2xpZW50IikKLSAgICAoaW9raXQtdXNlci1jbGllbnQtY2xh
c3MgIklPSElEUGFyYW1Vc2VyQ2xpZW50IikKLSAgICAoaW9raXQtdXNlci1jbGllbnQtY2xhc3Mg
IlJvb3REb21haW5Vc2VyQ2xpZW50IikpCi0KLTs7IFZhcmlvdXMgc2VydmljZXMgcmVxdWlyZWQg
YnkgQXBwS2l0IGFuZCBvdGhlciBmcmFtZXdvcmtzCi0oYWxsb3cgbWFjaC1sb29rdXAKLSAgICAo
Z2xvYmFsLW5hbWUgImNvbS5hcHBsZS5hdWRpby5BdWRpb0NvbXBvbmVudFJlZ2lzdHJhciIpCi0g
ICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuYXNzZXJ0aW9uZC5wcm9jZXNzYXNzZXJ0aW9uY29u
bmVjdGlvbiIpCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuQ29yZVNlcnZpY2VzLmNvcmVz
ZXJ2aWNlc2QiKQotICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLkRpc2tBcmJpdHJhdGlvbi5k
aXNrYXJiaXRyYXRpb25kIikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5GaWxlQ29vcmRp
bmF0aW9uIikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5Gb250T2JqZWN0c1NlcnZlciIp
Ci0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuSW1hZ2VDYXB0dXJlRXh0ZW5zaW9uMi5wcmVz
ZW5jZSIpCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuUG93ZXJNYW5hZ2VtZW50LmNvbnRy
b2wiKQotICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLlNlY3VyaXR5U2VydmVyIikKLSAgICAo
Z2xvYmFsLW5hbWUgImNvbS5hcHBsZS5TeXN0ZW1Db25maWd1cmF0aW9uLlBQUENvbnRyb2xsZXIi
KQotICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLlN5c3RlbUNvbmZpZ3VyYXRpb24uY29uZmln
ZCIpCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuVU5DVXNlck5vdGlmaWNhdGlvbiIpCi0g
ICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuYW5hbHl0aWNzZCIpCi0gICAgKGdsb2JhbC1uYW1l
ICJjb20uYXBwbGUuYXVkaW8uYXVkaW9oYWxkIikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBs
ZS5hdWRpby5jb3JlYXVkaW9kIikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5jZm5ldHdv
cmsuQXV0aEJyb2tlckFnZW50IikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5jbWlvLlZE
Q0Fzc2lzdGFudCIpCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuY29va2llZCIpIDs7IEZJ
WE1FOiA8cmRhcjovL3Byb2JsZW0vMTA3OTA3Njg+IExpbWl0IGFjY2VzcyB0byBjb29raWVzLgot
ICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLmNvcmVzZXJ2aWNlcy5sYXVuY2hzZXJ2aWNlc2Qi
KQotICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLmZvbnRzIikKLSAgICAoZ2xvYmFsLW5hbWUg
ImNvbS5hcHBsZS5sc2QubWFwZGIiKQotICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLm9jc3Bk
IikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5wYXN0ZWJvYXJkLjEiKQotICAgIChnbG9i
YWwtbmFtZSAiY29tLmFwcGxlLnBicy5mZXRjaF9zZXJ2aWNlcyIpCi0gICAgKGdsb2JhbC1uYW1l
ICJjb20uYXBwbGUudGNjZCIpCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUudGNjZC5zeXN0
ZW0iKQotICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLnRzbS51aXNlcnZlciIpCi0gICAgKGds
b2JhbC1uYW1lICJjb20uYXBwbGUud2luZG93X3Byb3hpZXMiKQotICAgIChnbG9iYWwtbmFtZSAi
Y29tLmFwcGxlLndpbmRvd3NlcnZlci5hY3RpdmUiKQotICAgIChsb2NhbC1uYW1lICJjb20uYXBw
bGUudHNtLnBvcnRuYW1lIikKLSAgICAoZ2xvYmFsLW5hbWUtcmVnZXggIyJfT3BlblN0ZXAkIikp
Ci0KLTs7IENvbmZpZ3VyYXRpb24gZGlyZWN0b3JpZXMKLShhbGxvdyBmaWxlLXJlYWQqIChzdWJw
YXRoIChwYXJhbSAiUExVR0lOX1BBVEgiKSkpCi0oYWxsb3cgZmlsZS1yZWFkKiAoc3VicGF0aCAo
cGFyYW0gIldFQktJVDJfRlJBTUVXT1JLX0RJUiIpKSkKLShpZiAocG9zaXRpdmU/IChzdHJpbmct
bGVuZ3RoIChwYXJhbSAiREFSV0lOX1VTRVJfQ0FDSEVfRElSIikpKQotICAgIChhbGxvdy1yZWFk
LXdyaXRlLWRpcmVjdG9yeS1hbmQtaXNzdWUtcmVhZC13cml0ZS1leHRlbnNpb25zIChwYXJhbSAi
REFSV0lOX1VTRVJfQ0FDSEVfRElSIikpKQotKGlmIChwb3NpdGl2ZT8gKHN0cmluZy1sZW5ndGgg
KHBhcmFtICJEQVJXSU5fVVNFUl9URU1QX0RJUiIpKSkKLSAgICAoYWxsb3ctcmVhZC13cml0ZS1k
aXJlY3RvcnktYW5kLWlzc3VlLXJlYWQtd3JpdGUtZXh0ZW5zaW9ucyAocGFyYW0gIkRBUldJTl9V
U0VSX1RFTVBfRElSIikpKQotKGlmIChwb3NpdGl2ZT8gKHN0cmluZy1sZW5ndGggKHBhcmFtICJO
U1VSTF9DQUNIRV9ESVIiKSkpCi0gICAgKGFsbG93LXJlYWQtd3JpdGUtZGlyZWN0b3J5LWFuZC1p
c3N1ZS1yZWFkLXdyaXRlLWV4dGVuc2lvbnMgKHBhcmFtICJOU1VSTF9DQUNIRV9ESVIiKSkpCi0K
LTs7IEFsbG93IHRoZSBPcGVuR0wgUHJvZmlsZXIgdG8gYXR0YWNoLgotKGlmIChkZWZpbmVkPyAn
bWFjaC1yZWdpc3RlcikKLSAgICAoYWxsb3cgbWFjaC1yZWdpc3RlciAoZ2xvYmFsLW5hbWUtcmVn
ZXggIyJeX29nbHByb2ZfYXR0YWNoXzxbMC05XSs+JCIpKSkKLQotKHN5c3RlbS1uZXR3b3JrKQot
Ci0oYWxsb3cgbmV0d29yay1vdXRib3VuZAotICAgIDs7IExvY2FsIG1ETlNSZXNwb25kZXIgZm9y
IEROUywgYXJiaXRyYXJ5IG91dGJvdW5kIFRDUCBhbmQgVURQCi0gICAgKGxpdGVyYWwgIi9wcml2
YXRlL3Zhci9ydW4vbUROU1Jlc3BvbmRlciIpCi0gICAgKHJlbW90ZSB0Y3ApCi0gICAgKHJlbW90
ZSB1ZHApKQotKGFsbG93IG5ldHdvcmstaW5ib3VuZAotICAgIChsb2NhbCB1ZHApKQotCi07OyBP
cGVuIGFuZCBTYXZlIHBhbmVscwotKGRlZmluZSAod2Via2l0LXBvd2VyYm94KQotICAgIChhbGxv
dyBmaWxlLXJlYWQqIChsaXRlcmFsICIvTGlicmFyeS9QcmVmZXJlbmNlcy9jb20uYXBwbGUuVmll
d0JyaWRnZS5wbGlzdCIpKQotICAgIChhbGxvdyBmaWxlLXJlYWQqIGZpbGUtd3JpdGUqIChleHRl
bnNpb24gImNvbS5hcHBsZS5hcHAtc2FuZGJveC5yZWFkLXdyaXRlIikpCi0gICAgKGFsbG93IGZp
bGUtaXNzdWUtZXh0ZW5zaW9uCi0gICAgICAgIChyZXF1aXJlLWFsbAotICAgICAgICAgICAgKGV4
dGVuc2lvbi1jbGFzcyAiY29tLmFwcGxlLmFwcC1zYW5kYm94LnJlYWQiKQotICAgICAgICAgICAg
KGV4dGVuc2lvbiAiY29tLmFwcGxlLmFwcC1zYW5kYm94LnJlYWQtd3JpdGUiKSkKLSAgICAgICAg
KHJlcXVpcmUtYWxsCi0gICAgICAgICAgICAoZXh0ZW5zaW9uLWNsYXNzICJjb20uYXBwbGUuYXBw
LXNhbmRib3gucmVhZC13cml0ZSIpCi0gICAgICAgICAgICAoZXh0ZW5zaW9uICJjb20uYXBwbGUu
YXBwLXNhbmRib3gucmVhZC13cml0ZSIpKSkpCi0KLTs7IFByaW50aW5nCi0oZGVmaW5lICh3ZWJr
aXQtcHJpbnRpbmcpCi0gICAgKGlmIChkZWZpbmVkPyAnYXV0aG9yaXphdGlvbi1yaWdodC1vYnRh
aW4pCi0gICAgICAgIChhbGxvdyBhdXRob3JpemF0aW9uLXJpZ2h0LW9idGFpbgotICAgICAgICAg
ICAgICAgKHJpZ2h0LW5hbWUgInN5c3RlbS5wcmludC5vcGVyYXRvciIpCi0gICAgICAgICAgICAg
ICAocmlnaHQtbmFtZSAic3lzdGVtLnByaW50aW5nbWFuYWdlciIpKSkKLSAgICAoaWYgKGRlZmlu
ZWQ/ICdtYWNoLXJlZ2lzdGVyKQotICAgICAgICAoZGVueSBtYWNoLXJlZ2lzdGVyICh3aXRoIG5v
LWxvZykKLSAgICAgICAgICAgICAgIChnbG9iYWwtbmFtZS1yZWdleCAjIl5jb21cLmFwcGxlXC5J
Q0EtWzAtOV0rJCIpKSkKLSAgICAoaWYgKGRlZmluZWQ/ICdtYWNoLXRhc2stbmFtZSkKLSAgICAg
ICAgKGFsbG93IG1hY2gtdGFzay1uYW1lKSkKLSAgICAoYWxsb3cgbmV0d29yay1vdXRib3VuZCAo
bGl0ZXJhbCAiL3ByaXZhdGUvdmFyL3J1bi9jdXBzZCIpKQotICAgIChhbGxvdyBtYWNoLWxvb2t1
cAotICAgICAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5wcmludHVpdG9vbC5hZ2VudCIpCi0g
ICAgICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLnByaW50dG9vbC5hZ2VudCIpCi0gICAgICAg
IChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLnByaW50dG9vbC5kYWVtb24iKSkKLSAgICAoYWxsb3cg
ZmlsZS1yZWFkKgotICAgICAgICAoc3VicGF0aCAiL0xpYnJhcnkvUHJpbnRlcnMiKQotICAgICAg
ICAoaG9tZS1saXRlcmFsICIvLmN1cHMvbHBvcHRpb25zIikKLSAgICAgICAgKGhvbWUtbGl0ZXJh
bCAiLy5jdXBzL2NsaWVudC5jb25mIikKLSAgICAgICAgKGxpdGVyYWwgIi9wcml2YXRlL2V0Yy9j
dXBzL2NsaWVudC5jb25mIikKLSAgICAgICAgKGxpdGVyYWwgIi9wcml2YXRlL2V0Yy9jdXBzL2xw
b3B0aW9ucyIpCi0gICAgICAgIChzdWJwYXRoICIvcHJpdmF0ZS9ldGMvY3Vwcy9wcGQiKQotICAg
ICAgICAobGl0ZXJhbCAiL3ByaXZhdGUvdmFyL3J1bi9jdXBzZCIpKQotICAgIChzaGFyZWQtcHJl
ZmVyZW5jZXMtcmVhZCAib3JnLmN1cHMuUHJpbnRpbmdQcmVmcyIpKQotCi07OyBUZXh0IFNlcnZp
Y2VzIE1hbmFnZXIKLSh3aXRoLWZpbHRlciAoaW9raXQtcmVnaXN0cnktZW50cnktY2xhc3MgIklP
SElERXZlbnREcml2ZXIiKQotICAgIChhbGxvdyBpb2tpdC1zZXQtcHJvcGVydGllcyAoaW9raXQt
cHJvcGVydHkgIkNhcHNMb2NrRGVsYXlPdmVycmlkZSIpKSkKLQotOzsgSW1hZ2UgQ2FwdHVyZQot
KGRlZmluZSAod2Via2l0LWltYWdlY2FwdHVyZSkKLSAgICAoYWxsb3cgYXBwbGVldmVudC1zZW5k
IChhcHBsZWV2ZW50LWRlc3RpbmF0aW9uICJjb20uYXBwbGUuaW1hZ2VjYXB0dXJlZXh0ZW5zaW9u
MiIpKSkKLQotOzsgQ2FtZXJhCi0oZGVmaW5lICh3ZWJraXQtY2FtZXJhKQotICAgIChzaGFyZWQt
cHJlZmVyZW5jZXMtcmVhZCAiY29tLmFwcGxlLmNvcmVtZWRpYSIpCi0gICAgKGFsbG93IG1hY2gt
bG9va3VwIChleHRlbnNpb24gImNvbS5hcHBsZS5hcHAtc2FuZGJveC5tYWNoIikpCi0gICAgKGFs
bG93IG1hY2gtbG9va3VwCi0gICAgICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLmNtaW8uQXBw
bGVDYW1lcmFBc3Npc3RhbnQiKQotICAgICAgICA7OyBBcHBsZSBEQUwgYXNzaXN0YW50cwotICAg
ICAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5jbWlvLlZEQ0Fzc2lzdGFudCIpCi0gICAgICAg
IChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLmNtaW8uQVZDQXNzaXN0YW50IikKLSAgICAgICAgKGds
b2JhbC1uYW1lICJjb20uYXBwbGUuY21pby5JSURDVmlkZW9Bc3Npc3RhbnQiKQotICAgICAgICA7
OyBRdWlja1RpbWVJSURDRGlnaXRpemVyIGFzc2lzdGFudAotICAgICAgICAoZ2xvYmFsLW5hbWUg
ImNvbS5hcHBsZS5JSURDQXNzaXN0YW50IikpCi0gICAgKGFsbG93IGlva2l0LW9wZW4KLSAgICAg
ICAgOzsgUXVpY2tUaW1lVVNCVkRDRGlnaXRpemVyCi0gICAgICAgIChpb2tpdC11c2VyLWNsaWVu
dC1jbGFzcyAiSU9VU0JEZXZpY2VVc2VyQ2xpZW50VjIiKQotICAgICAgICAoaW9raXQtdXNlci1j
bGllbnQtY2xhc3MgIklPVVNCSW50ZXJmYWNlVXNlckNsaWVudFYyIikpCi0gICAgKGFsbG93IGRl
dmljZS1jYW1lcmEpKQotCi07OyBNaWNyb3Bob25lCi0oZGVmaW5lICh3ZWJraXQtbWljcm9waG9u
ZSkKLSAgICAoYWxsb3cgZGV2aWNlLW1pY3JvcGhvbmUpKQotCi0oYWxsb3cgaXBjLXBvc2l4LXNo
bSoKLSAgICAoaXBjLXBvc2l4LW5hbWUtcmVnZXggIyJeQXVkaW9JTyIpCi0gICAgKGlwYy1wb3Np
eC1uYW1lLXJlZ2V4ICMiXkNGUEJTOiIpCi0gICAgKGlwYy1wb3NpeC1uYW1lLXJlZ2V4ICMiXmNv
bVwuYXBwbGVcLmNzXC4iKQotICAgIChpcGMtcG9zaXgtbmFtZS1yZWdleCAjIl5sc1wuIikpCi0o
YWxsb3cgaXBjLXBvc2l4LXNobS1yZWFkKgotICAgIChpcGMtcG9zaXgtbmFtZS1yZWdleCAjIl4v
dG1wL2NvbVwuYXBwbGVcLmNzc2VlZFwuIikKLSAgICAoaXBjLXBvc2l4LW5hbWUgIkZOZXR3b3Jr
LmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiIpCi0gICAgKGlwYy1wb3NpeC1uYW1lICJhcHBsZS5zaG0u
bm90aWZpY2F0aW9uX2NlbnRlciIpKQotCi07OyBTaWxlbnRseSBibG9jayBhY2Nlc3MgdG8gc29t
ZSByZXNvdXJjZXMKLShkZW55IGZpbGUtcmVhZCogZmlsZS13cml0ZSogKHdpdGggbm8tbG9nKQot
ICAgIChzdWJwYXRoICIvTmV0d29yay9MaWJyYXJ5IikKLSAgICAoc3VicGF0aCAiL05ldHdvcmsv
QXBwbGljYXRpb25zIikKLSAgICAoaG9tZS1saWJyYXJ5LXByZWZlcmVuY2VzLXJlZ2V4ICMiL2Nv
bVwuYXBwbGVcLmludGVybmV0Y29uZmlnKHByaXYpP1wucGxpc3QiKQotCi0gICAgOzsgRklYTUU6
IFNob3VsZCBiZSByZW1vdmVkIGFmdGVyIDxyZGFyOi8vcHJvYmxlbS8xMDQ2Mzg4MT4gaXMgZml4
ZWQuCi0gICAgKGhvbWUtbGlicmFyeS1wcmVmZXJlbmNlcy1saXRlcmFsICIvY29tLmFwcGxlLkxh
dW5jaFNlcnZpY2VzLlF1YXJhbnRpbmVFdmVudHNWMiIpCi0gICAgKGhvbWUtbGlicmFyeS1wcmVm
ZXJlbmNlcy1saXRlcmFsICIvY29tLmFwcGxlLkxhdW5jaFNlcnZpY2VzLlF1YXJhbnRpbmVFdmVu
dHNWMi1qb3VybmFsIikpCi0KLShkZW55IG1hY2gtbG9va3VwICh3aXRoIG5vLWxvZykKLSAgICAo
Z2xvYmFsLW5hbWUgImNvbS5hcHBsZS5GU0V2ZW50cyIpCi0gICAgKGdsb2JhbC1uYW1lICJjb20u
YXBwbGUuY29yZXNlcnZpY2VzLmFwcGxlZXZlbnRzIikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5h
cHBsZS5kb2NrLnNlcnZlciIpCi0gICAgKGdsb2JhbC1uYW1lLXJlZ2V4ICMiXmNvbVwuYXBwbGVc
LmRpc3RyaWJ1dGVkX25vdGlmaWNhdGlvbnMiKSkKLQotOzsgVGhlIGJlbG93IHJ1bGVzIGFyZSBp
bnNlcnRlZCBhdCB0aGUgZW5kIG9mIHNhbmRib3ggcHJvZmlsZSBjb21waWxhdGlvbiBieSBvdmVy
cmlkaW5nIHRoZSBmaW5hbGl6ZXIuCi07OyBUaGUgaW5pdGlhbCB2YWx1ZSBvZiAlZmluYWxpemUg
bXVzdCBiZSB0aGUgbGFzdCBmdW5jdGlvbiBjYWxsZWQuCi0obGV0cmVjCi0gICAoKG9yaWdpbmFs
LSVmaW5hbGl6ZSAlZmluYWxpemUpCi0gICAgKHdlYmtpdC0lZmluYWxpemUKLSAgICAgICAgKGxh
bWJkYSAoKQotICAgICAgICAgICAgKGlmIChub3QgKGRlZmluZWQ/ICdhbGxvdy1zeW1saW5rcykp
Ci0gICAgICAgICAgICAgICAgKGlmIChkZWZpbmVkPyAndm5vZGUtdHlwZSkKLSAgICAgICAgICAg
ICAgICAgICAgKGRlbnkgZmlsZS13cml0ZS1jcmVhdGUKLSAgICAgICAgICAgICAgICAgICAgICAg
ICh2bm9kZS10eXBlIFNZTUxJTkspKSkpCi0gICAgICAgICAgICA7OyBSZXNlcnZlIGEgbmFtZXNw
YWNlIGZvciBhZGRpdGlvbmFsIHByb3RlY3RlZCBleHRlbmRlZCBhdHRyaWJ1dGVzLgotICAgICAg
ICAgICAgKGRlbnkgZmlsZS1yZWFkLXhhdHRyIGZpbGUtd3JpdGUteGF0dHIgKHhhdHRyICMiXmNv
bVwuYXBwbGVcLnNlY3VyaXR5XC5wcml2YXRlXC4iKSkKLSAgICAgICAgICAgIDs7IEZJWE1FOiBT
aG91bGQgYmUgcmVtb3ZlZCBvbmNlIDxyZGFyOi8vcHJvYmxlbS8xNjMyOTA4Nz4gaXMgZml4ZWQu
Ci0gICAgICAgICAgICAoaWYgKGRlZmluZWQ/ICd4YXR0ci1yZWdleCkKLSAgICAgICAgICAgICAg
ICAoZGVueSBmaWxlLXJlYWQteGF0dHIgZmlsZS13cml0ZS14YXR0ciAoeGF0dHItcmVnZXggIyJe
Y29tXC5hcHBsZVwuc2VjdXJpdHlcLnByaXZhdGVcLiIpKQotICAgICAgICAgICAgICAgIChkZW55
IGZpbGUtcmVhZC14YXR0ciBmaWxlLXdyaXRlLXhhdHRyICh4YXR0ciAjIl5jb21cLmFwcGxlXC5z
ZWN1cml0eVwucHJpdmF0ZVwuIikpKQotICAgICAgICAgICAgKG9yaWdpbmFsLSVmaW5hbGl6ZSkp
KSkKLSAgIChzZXQhICVmaW5hbGl6ZSB3ZWJraXQtJWZpbmFsaXplKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jbi5taWNyb2RvbmUu
Y21iLnNhZmFyaS5zYiBiL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9m
aWxlcy9jbi5taWNyb2RvbmUuY21iLnNhZmFyaS5zYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYTBhNzFjZjc1ZThiOGE5ODc0ODI1N2ViYzRiMzExNjk1ZWNjMTMxZC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Jlc291
cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY24ubWljcm9kb25lLmNtYi5zYWZhcmkuc2IKKysr
IC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi07IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi07Ci07IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotOyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLTsg
YXJlIG1ldDoKLTsgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLTsgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotOyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotOyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi07ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi07Ci07IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLTsgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi07IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLTsgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi07IEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LTsgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLTsgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi07IElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi07IENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi07IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLTsgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5k
Ym94UHJvZmlsZXMvY29tLmFwcGxlLkJvY29tU3VibWl0Q3RybC5zYiBiL1NvdXJjZS9XZWJLaXQv
UmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uYXBwbGUuQm9jb21TdWJtaXRDdHJs
LnNiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGE3MWNmNzVlOGI4YTk4NzQ4MjU3
ZWJjNGIzMTE2OTVlY2MxMzFkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9j
b20uYXBwbGUuQm9jb21TdWJtaXRDdHJsLnNiCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBA
QAotOyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
OwotOyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLTsgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi07IGFyZSBtZXQ6Ci07IDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLTsgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLTsgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotOyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
OwotOyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi07IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotOyBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi07IFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotOyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi07IENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi07IFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotOyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotOyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotOyBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi07IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5hcHBsZS5OUFNh
ZmVJbnB1dC5zYiBiL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxl
cy9jb20uYXBwbGUuTlBTYWZlSW5wdXQuc2IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDUxN2IyZDg2ZmUxMDcxMmJmOGY2YjlhNWUwYjdiNDBkYzI1M2FmZTEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9SZXNvdXJjZXMv
UGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5hcHBsZS5OUFNhZmVJbnB1dC5zYgorKysgL2Rldi9u
dWxsCkBAIC0xLDMyICswLDAgQEAKLTsgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLTsKLTsgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci07IG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotOyBhcmUgbWV0
OgotOyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotOyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi07IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LTsgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLTsKLTsgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotOyBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLTsg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotOyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLTsgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotOyBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotOyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLTsgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLTsgQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLTsgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotOyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLShhbGxvdyBtYWNoLWxvb2t1cAotICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLmRvY2su
ZnVsbHNjcmVlbiIpCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuaW9oaWRldmVudHN5c3Rl
bSIpKQotCi0oYWxsb3cgZmlsZS1yZWFkKgotICAgIChsaXRlcmFsICIvTGlicmFyeS9JbnRlcm5l
dCBQbHVnLUlucy9kYXRhLmluaSIpKQotCi0oYWxsb3cgaW9raXQtZ2V0LXByb3BlcnRpZXMKLSAg
ICAoaW9raXQtcHJvcGVydHkgIm1hbnVmYWN0dXJlciIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5hcHBsZS5OUFNhZmVTdWJt
aXQuc2IgYi9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29t
LmFwcGxlLk5QU2FmZVN1Ym1pdC5zYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBh
NzFjZjc1ZThiOGE5ODc0ODI1N2ViYzRiMzExNjk1ZWNjMTMxZC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVn
SW5TYW5kYm94UHJvZmlsZXMvY29tLmFwcGxlLk5QU2FmZVN1Ym1pdC5zYgorKysgL2Rldi9udWxs
CkBAIC0xLDIzICswLDAgQEAKLTsgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLTsKLTsgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci07IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotOyBhcmUgbWV0Ogot
OyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotOyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi07IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLTsg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLTsKLTsgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotOyBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLTsgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotOyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLTsgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotOyBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotOyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLTsgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLTsgQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLTsgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotOyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxl
cy9jb20uYXBwbGUuUXVpY2tUaW1lIFBsdWdpbi5wbHVnaW4uc2IgYi9Tb3VyY2UvV2ViS2l0L1Jl
c291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmFwcGxlLlF1aWNrVGltZSBQbHVnaW4u
cGx1Z2luLnNiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDFjZDU0YmJjYjg1OWM4
YzAzMWFhYjhlZDY2ZTc2MGVkNjNmMDE5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9m
aWxlcy9jb20uYXBwbGUuUXVpY2tUaW1lIFBsdWdpbi5wbHVnaW4uc2IJCisrKyAvZGV2L251bGwK
QEAgLTEsMzEgKzAsMCBAQAotOyBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotOwotOyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLTsgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi07IGFyZSBtZXQ6Ci07
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLTsgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLTsgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotOyAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotOwotOyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi07IEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotOyBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi07IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotOyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi07IENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi07IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotOyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotOyBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotOyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi07IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
KHdlYmtpdC1wb3dlcmJveCkKLShzaGFyZWQtcHJlZmVyZW5jZXMtcmVhZC13cml0ZSAiY29tLmFw
cGxlLnF1aWNrdGltZS5wbHVnaW4ucHJlZmVyZW5jZXMiKQotCi0oYWxsb3cgZmlsZS1yZWFkKiBm
aWxlLXdyaXRlKgotICAgIChob21lLWxpYnJhcnktc3VicGF0aCAiL0NhY2hlcy9RdWlja1RpbWUi
KQotICAgIChob21lLWxpYnJhcnktcHJlZmVyZW5jZXMtbGl0ZXJhbCAiL1F1aWNrVGltZSBQcmVm
ZXJlbmNlcyIpKQotCi0oYWxsb3cgbmV0d29yay1iaW5kIChsb2NhbCBpcCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmFwcGxl
LmFwcHN0b3JlLkNvZGVSZWRlZW1lck5ldHNjYXBlUGx1Z2luLnNiIGIvU291cmNlL1dlYktpdC9S
ZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5hcHBsZS5hcHBzdG9yZS5Db2RlUmVk
ZWVtZXJOZXRzY2FwZVBsdWdpbi5zYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhk
MjAwYzU2NTJlZGUwYWU0ODM4NGVlZDllYzhmZTMyYzc1NWRiNy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVn
SW5TYW5kYm94UHJvZmlsZXMvY29tLmFwcGxlLmFwcHN0b3JlLkNvZGVSZWRlZW1lck5ldHNjYXBl
UGx1Z2luLnNiCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotOyBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotOwotOyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLTsg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi07IGFyZSBtZXQ6Ci07IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLTsgMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLTsgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotOyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotOwotOyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci07IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotOyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi07IFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotOyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi07IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi07IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotOyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotOyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotOyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi07IFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotKHdlYmtpdC1jYW1lcmEpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmFwcGxlLmlzdC5k
cy5hcHBsZWNvbm5lY3Qud2VicGx1Z2luLnNiIGIvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1
Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0LndlYnBsdWdp
bi5zYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNmNmZkOTY5ZGU2YWQ1MDAyYWFh
NzgzY2YyOGQ0YjBiOTA2NDk3OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMv
Y29tLmFwcGxlLmlzdC5kcy5hcHBsZWNvbm5lY3Qud2VicGx1Z2luLnNiCisrKyAvZGV2L251bGwK
QEAgLTEsNjUgKzAsMCBAQAotOyBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotOwotOyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLTsgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi07IGFyZSBt
ZXQ6Ci07IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLTsgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLTsgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotOyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotOwotOyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi07IEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
OyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi07IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotOyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi07IENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi07IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotOyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotOyBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotOyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi07IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotKGFsbG93IG1hY2gtbG9va3VwCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuaXN0
LmRzLmFwcGxlY29ubmVjdDIuc2VydmljZS5hZG1pbiIpCi0gICAgKGdsb2JhbC1uYW1lICJjb20u
YXBwbGUuaXN0LmRzLmFwcGxlY29ubmVjdDIuc2VydmljZS5hZ2VudCIpCi0gICAgKGdsb2JhbC1u
YW1lICJjb20uYXBwbGUuaXN0LmRzLmFwcGxlY29ubmVjdDIuc2VydmljZS5rZGN0dW5uZWxjb250
cm9sbGVyIikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0
Mi5zZXJ2aWNlLm1lbnVleHRyYSIpCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUud2lmaS5h
bnFwIikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5HU1NDcmVkIikKLSAgICAoZ2xvYmFs
LW5hbWUgIm9yZy5oNWwua2NtIikpCi0oYWxsb3cgbWFjaC1sb29rdXAKLSAgICAoZ2xvYmFsLW5h
bWUtcmVnZXggIyJeY29tXC5hcHBsZVwuaXN0XC5kc1wuYXBwbGVjb25uZWN0Mlwuc2VydmljZVwu
Y29tXC5hcHBsZVwuV2ViS2l0XC5QbHVnaW5cLigzMnw2NCkoXC5EZXZlbG9wbWVudCk/XFtbMC05
XStcXSQiKQotICAgIChnbG9iYWwtbmFtZS1yZWdleCAjIl5jb21cLmFwcGxlXC5pc3RcLmRzXC5h
cHBsZWNvbm5lY3QyXC5zZXJ2aWNlXC5QbHVnaW5Qcm9jZXNzXFtbMC05XStcXSQiKSkKLQotKHNo
YXJlZC1wcmVmZXJlbmNlcy1yZWFkCi0gICAgImNvbS5hcHBsZS5HU1MiCi0gICAgImNvbS5hcHBs
ZS5pc3QuZHMuYXBwbGVjb25uZWN0MiIKLSAgICAiY29tLmFwcGxlLmlzdC5kcy5hcHBsZWNvbm5l
Y3QyLmFjY2VwdGFuY2VUZXN0IgotICAgICJjb20uYXBwbGUuaXN0LmRzLmFwcGxlY29ubmVjdDIu
cHJvZHVjdGlvbiIKLSAgICAiY29tLmFwcGxlLmlzdC5kcy5hcHBsZWNvbm5lY3QyLnVhdCIKLSAg
ICAiY29tLmFwcGxlLktlcmJlcm9zIgotICAgICJjb20uYXBwbGUubmV0d29ya0Nvbm5lY3QiCi0g
ICAgImVkdS5taXQuS2VyYmVyb3MiKQotCi0oYWxsb3cgZmlsZS1yZWFkKgotICAgIChzdWJwYXRo
ICIvTGlicmFyeS9LZXJiZXJvc1BsdWdpbnMvR1NTQVBJIikKLSAgICAoc3VicGF0aCAiL0xpYnJh
cnkvS2VyYmVyb3NQbHVnaW5zL0tlcmJlcm9zRnJhbWV3b3JrUGx1Z2lucyIpCi0gICAgKGxpdGVy
YWwgIi9MaWJyYXJ5L1ByZWZlcmVuY2VzL2VkdS5taXQuS2VyYmVyb3MiKQotICAgIChsaXRlcmFs
ICIvTGlicmFyeS9QcmVmZXJlbmNlcy9TeXN0ZW1Db25maWd1cmF0aW9uL3ByZWZlcmVuY2VzLnBs
aXN0IikKLSAgICAoaG9tZS1saWJyYXJ5LXByZWZlcmVuY2VzLWxpdGVyYWwgIi9lZHUubWl0Lktl
cmJlcm9zIikpCi0KLShhbGxvdyBmaWxlLXJlYWQqCi0gICAgKGxpdGVyYWwgIi9wcml2YXRlL2V0
Yy9zZXJ2aWNlcyIpKQotCi0oaWYgKGRlZmluZWQ/ICdtYWNoLXJlZ2lzdGVyKQotICAgIChhbGxv
dyBtYWNoLXJlZ2lzdGVyCi0gICAgICAgIChnbG9iYWwtbmFtZS1yZWdleCAjIl5jb21cLmFwcGxl
XC5pc3RcLmRzXC5hcHBsZWNvbm5lY3QyXC5zZXJ2aWNlXC5jb21cLmFwcGxlXC5XZWJLaXRcLlBs
dWdpblwuKDMyfDY0KShcLkRldmVsb3BtZW50KT9cW1swLTldK1xdJCIpCi0gICAgICAgIChnbG9i
YWwtbmFtZS1yZWdleCAjIl5jb21cLmFwcGxlXC5pc3RcLmRzXC5hcHBsZWNvbm5lY3QyXC5zZXJ2
aWNlXC5QbHVnaW5Qcm9jZXNzXFtbMC05XStcXSQiKSkpCi0KLShhbGxvdyBzeXN0ZW0tc29ja2V0
KQotKGFsbG93IG5ldHdvcmstb3V0Ym91bmQKLSAgIChyZW1vdGUgdWRwICIqOjQxNjAiICIqOjg4
IikpCi0oYWxsb3cgbmV0d29yay1pbmJvdW5kCi0gICAobG9jYWwgdWRwKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uY2ZjYS5u
cFNlY0VkaXRDdGwuTUFDLkJPQy5wbHVnaW4uc2IgYi9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9Q
bHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmNmY2EubnBTZWNFZGl0Q3RsLk1BQy5CT0MucGx1Z2lu
LnNiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTdjYTBmZjQ1YjJhYjg5ZmU0OTY4
M2I0ZTViOTNlY2YyZWFmZjVlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9j
b20uY2ZjYS5ucFNlY0VkaXRDdGwuTUFDLkJPQy5wbHVnaW4uc2IKKysrIC9kZXYvbnVsbApAQCAt
MSwyNSArMCwwIEBACi07IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi07Ci07IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotOyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLTsgYXJlIG1ldDoKLTsgMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLTsgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotOyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotOyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi07ICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi07Ci07IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLTsgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi07IFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLTsgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi07IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLTsgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LTsgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi07IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi07IENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi07
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLTsgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0oYWxs
b3cgZmlsZS1yZWFkKiBmaWxlLXdyaXRlKgotICAgIChsaXRlcmFsICIvTGlicmFyeS9JbnRlcm5l
dCBQbHVnLUlucy9ucFNlY0VkaXRDdGwuTUFDLkJPQy5zaWciKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uY2lzY28ud2ViZXgu
cGx1Z2luLmdwYzY0LnNiIGIvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFBy
b2ZpbGVzL2NvbS5jaXNjby53ZWJleC5wbHVnaW4uZ3BjNjQuc2IKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGNhNmNmODM1OGZhYzhhZGNmOGRjYmRkM2E0NTQ5OTBhODUwNzM5ZDcuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5jaXNjby53ZWJleC5wbHVnaW4u
Z3BjNjQuc2IKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi07IENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi07Ci07IFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotOyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLTsgYXJlIG1ldDoKLTsgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLTsgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotOyAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotOyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi07ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi07Ci07IFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LTsgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi07IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLTsgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi07IEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLTsgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLTsgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi07IElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi07IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi07IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLTsgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi0oZGVmaW5lIGFsbG93LXN5bWxpbmtzICN0KQotCi0oZGVm
aW5lIChob21lLXN1YnBhdGggaG9tZS1yZWxhdGl2ZS1zdWJwYXRoKQotICAgIChzdWJwYXRoIChz
dHJpbmctYXBwZW5kIChwYXJhbSAiSE9NRV9ESVIiKSBob21lLXJlbGF0aXZlLXN1YnBhdGgpKSkK
LShkZWZpbmUgKGhvbWUtbGl0ZXJhbCBob21lLXJlbGF0aXZlLWxpdGVyYWwpCi0gICAgKGxpdGVy
YWwgKHN0cmluZy1hcHBlbmQgKHBhcmFtICJIT01FX0RJUiIpIGhvbWUtcmVsYXRpdmUtbGl0ZXJh
bCkpKQotCi0oYWxsb3cgZmlsZS1yZWFkKiBmaWxlLXdyaXRlKgotICAgIChob21lLWxpdGVyYWwg
Ii9MaWJyYXJ5L1ByZWZlcmVuY2VzL2NvbS5jaXNjby53ZWJleC5mdXp6eVdpbmRvd0NvbmZpZy5w
bGlzdCIpKQotCi0oYWxsb3cgZmlsZS1yZWFkKiBmaWxlLXdyaXRlKgotICAgIChob21lLWxpdGVy
YWwgIi9MaWJyYXJ5L1ByZWZlcmVuY2VzL2NvbS53ZWJleC5tZWV0aW5nbWFuYWdlci5wbGlzdCIp
KQotCi0oYWxsb3cgZmlsZS1yZWFkKiBmaWxlLXdyaXRlKiBmaWxlLXdyaXRlLWNyZWF0ZQotICAg
IChob21lLXN1YnBhdGggIi9MaWJyYXJ5L0FwcGxpY2F0aW9uIFN1cHBvcnQvV2ViRXggRm9sZGVy
IikpCi0KLTs7IEZJWE1FOiBXZSBzaG91bGQgdGlndGhlbiB0aGUgc2FuZGJveCB0byBzb21lIHRt
cCBzdWJmb2xkZXJzCi0oYWxsb3cgZmlsZSoKLSAgICAocHJlZml4ICIvcHJpdmF0ZS90bXAiKSkK
LQotKGFsbG93IGZpbGUtcmVhZC1kYXRhIGZpbGUtd3JpdGUtZGF0YQotICAgIChwYXRoICIvZGV2
L3R0eSIpKQotCi0oYWxsb3cgcHJvY2Vzcy1leGVjKQotKGFsbG93IHByb2Nlc3MtZm9yaykKLShh
bGxvdyBkaXN0cmlidXRlZC1ub3RpZmljYXRpb24tcG9zdCkKLQotKGFsbG93IG1hY2gtbG9va3Vw
Ci0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuUGVyZm9ybWFuY2VBbmFseXNpcy5hbmltYXRp
b25wZXJmZCIpCi0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuZG9jay5mdWxsc2NyZWVuIikK
LSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5xdWlja2xvb2sudWkuaGVscGVyLmFjdGl2ZSIp
Ci0gICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUucXVpY2tsb29rLnVpLmhlbHBlciIpCi0gICAg
KGdsb2JhbC1uYW1lICJjb20uYXBwbGUuaW5wdXRtZXRob2RraXQubGF1bmNoYWdlbnQiKQotICAg
IChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLmlucHV0bWV0aG9ka2l0LmxhdW5jaGVyIikKLSAgICAo
Z2xvYmFsLW5hbWUgImNvbS5hcHBsZS5pbnB1dG1ldGhvZGtpdC5nZXR4cGNlbmRwb2ludCIpKQot
Ci0oYWxsb3cgaW9raXQtZ2V0LXByb3BlcnRpZXMKLSAgICAoaW9raXQtcHJvcGVydHkgIlBvd2Vy
Q29udHJvbFN1cHBvcnRlZCIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJTdXBwb3J0VGFwVG9XYWtl
IikKLSAgICAoaW9raXQtcHJvcGVydHkgIlJlc2V0T25Mb2NrTXMiKQotICAgIChpb2tpdC1wcm9w
ZXJ0eSAiUmVzZXRPblVubG9ja01zIikKLSAgICAoaW9raXQtcHJvcGVydHkgIlNob3VsZFJlc2V0
T25CdXR0b24iKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiV2lyZWxlc3NDaGFyZ2luZ05vdGlmaWNh
dGlvblN1cHBvcnRlZCIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJTdXBwb3J0c1NpbGVudENsaWNr
IikKLSAgICAoaW9raXQtcHJvcGVydHkgIk1pbkRpZ2l0aXplclByZXNzdXJlVmFsdWUiKQotICAg
IChpb2tpdC1wcm9wZXJ0eSAiQWNjdXJhdGVNYXhEaWdpdGl6ZXJQcmVzc3VyZVZhbHVlIikKLSAg
ICAoaW9raXQtcHJvcGVydHkgIkV4dGVuZGVkTWF4RGlnaXRpemVyUHJlc3N1cmVWYWx1ZSIpCi0g
ICAgKGlva2l0LXByb3BlcnR5ICJBbmltYXRpb25UaHJlc2hvbGRzIikKLSAgICAoaW9raXQtcHJv
cGVydHkgIkFjdGl2YXRpb25UaHJlc2hvbGRzIikKLSAgICAoaW9raXQtcHJvcGVydHkgIm10LWRl
dmljZS1pZCIpKQotCi0od2Via2l0LXBvd2VyYm94KQotKHdlYmtpdC1wcmludGluZykKLSh3ZWJr
aXQtY2FtZXJhKQotKHdlYmtpdC1taWNyb3Bob25lKQotCi0oYWxsb3cgbmV0d29yay1iaW5kIChs
b2NhbCBpcCkpCi0KLShhbGxvdyBuZXR3b3JrLW91dGJvdW5kKQotKGFsbG93IG5ldHdvcmstaW5i
b3VuZCAobG9jYWwgaXApKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1
Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5jbWJjaGluYS5DTUJTZWN1cml0eS5zYiBiL1NvdXJjZS9X
ZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uY21iY2hpbmEuQ01CU2Vj
dXJpdHkuc2IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwZTliZmQ0YzUyMjAyOGNh
NTk2YWY2MzZjZjgwYzZmOGU5ODZhZDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2Zp
bGVzL2NvbS5jbWJjaGluYS5DTUJTZWN1cml0eS5zYgorKysgL2Rldi9udWxsCkBAIC0xLDI2ICsw
LDAgQEAKLTsgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLTsKLTsgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci07IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotOyBhcmUgbWV0OgotOyAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
OyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi07IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLTsgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLTsKLTsgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotOyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLTsgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
OyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLTsgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotOyBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotOyBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLTsgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLTsgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLTsgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotOyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLShhbGxvdyBtYWNo
LWxvb2t1cAotICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLmRvY2suZnVsbHNjcmVlbiIpCi0g
ICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuaW9oaWRldmVudHN5c3RlbSIpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5mdHNh
ZmUuTlBBUEktQ29yZS1TYWZlLVNvZnRLZXliYW9yZC5wbHVnaW4ucmZjMTAzNGlkZW50aWZpZXIu
c2IgYi9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLmZ0
c2FmZS5OUEFQSS1Db3JlLVNhZmUtU29mdEtleWJhb3JkLnBsdWdpbi5yZmMxMDM0aWRlbnRpZmll
ci5zYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBhNzFjZjc1ZThiOGE5ODc0ODI1
N2ViYzRiMzExNjk1ZWNjMTMxZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMv
Y29tLmZ0c2FmZS5OUEFQSS1Db3JlLVNhZmUtU29mdEtleWJhb3JkLnBsdWdpbi5yZmMxMDM0aWRl
bnRpZmllci5zYgorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTsgQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLTsKLTsgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci07
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotOyBhcmUgbWV0OgotOyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotOyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi07IDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci07ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLTsgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLTsKLTsgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotOyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLTsgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotOyBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLTsg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotOyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotOyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLTsgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLTsgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLTsgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotOyBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUmVzb3Vy
Y2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20uZ29vZ2xlLmdvb2dsZXRhbGticm93c2VycGx1
Z2luLnNiIGIvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2Nv
bS5nb29nbGUuZ29vZ2xldGFsa2Jyb3dzZXJwbHVnaW4uc2IKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGJmNGYwZGQ3OGM5ZWUyZWE0ODJiYTc3ZjU4ZWIzMTQ4OWIwZGI5MjEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9S
ZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5nb29nbGUuZ29vZ2xldGFsa2Jyb3dz
ZXJwbHVnaW4uc2IKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi07IENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi07Ci07IFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
OyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLTsgYXJlIG1ldDoKLTsgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLTsgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotOyAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotOyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi07ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi07Ci07IFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLTsgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi07IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLTsgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi07
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLTsgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLTsgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi07IElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi07IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi07IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLTsgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0oZGVmaW5lIChob21lLXN1YnBhdGggaG9tZS1yZWxh
dGl2ZS1zdWJwYXRoKQotICAgIChzdWJwYXRoIChzdHJpbmctYXBwZW5kIChwYXJhbSAiSE9NRV9E
SVIiKSBob21lLXJlbGF0aXZlLXN1YnBhdGgpKSkKLQotKGFsbG93IGZpbGUtcmVhZCogZmlsZS13
cml0ZSoKLSAgICAoaG9tZS1zdWJwYXRoICIvTGlicmFyeS9BcHBsaWNhdGlvbiBTdXBwb3J0L0dv
b2dsZS9Hb29nbGUgVGFsayBQbHVnaW4iKSkKLQotKGFsbG93IGZpbGUtcmVhZCogZmlsZS13cml0
ZSoKLSAgICAoc3VicGF0aCAiL0xpYnJhcnkvQXBwbGljYXRpb24gU3VwcG9ydC9Hb29nbGUiKSkK
LQotKGFsbG93IGpvYi1jcmVhdGlvbikKLShhbGxvdyBzaWduYWwpCi0oYWxsb3cgbWFjaC1sb29r
dXApCi0KLSh3ZWJraXQtcG93ZXJib3gpCi0od2Via2l0LXByaW50aW5nKQotKHdlYmtpdC1jYW1l
cmEpCi0od2Via2l0LW1pY3JvcGhvbmUpCi0KLShhbGxvdyBuZXR3b3JrLWJpbmQgKGxvY2FsIGlw
KSkKLQotKGFsbG93IG5ldHdvcmstb3V0Ym91bmQpCi0oYWxsb3cgbmV0d29yay1pbmJvdW5kIChs
b2NhbCBpcCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5k
Ym94UHJvZmlsZXMvY29tLmdvb2dsZS5vMWRicm93c2VycGx1Z2luLnNiIGIvU291cmNlL1dlYktp
dC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5nb29nbGUubzFkYnJvd3NlcnBs
dWdpbi5zYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdiYmQ3NDkwMjcxMDU0Mjc1
YWY5OTA2MGEwNGM4YWMzNDkyYzVmMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmls
ZXMvY29tLmdvb2dsZS5vMWRicm93c2VycGx1Z2luLnNiCisrKyAvZGV2L251bGwKQEAgLTEsNTAg
KzAsMCBAQAotOyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotOwotOyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLTsgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi07IGFyZSBtZXQ6Ci07IDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci07ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLTsgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLTsgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotOyAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotOwotOyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi07IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotOyBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci07IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotOyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi07IENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi07IFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotOyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotOyBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotOyBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi07IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotKGRlZmluZSAo
aG9tZS1zdWJwYXRoIGhvbWUtcmVsYXRpdmUtc3VicGF0aCkKLSAgICAoc3VicGF0aCAoc3RyaW5n
LWFwcGVuZCAocGFyYW0gIkhPTUVfRElSIikgaG9tZS1yZWxhdGl2ZS1zdWJwYXRoKSkpCi0KLShh
bGxvdyBmaWxlLXJlYWQqIGZpbGUtd3JpdGUqCi0gICAgKGhvbWUtc3VicGF0aCAiL0xpYnJhcnkv
QXBwbGljYXRpb24gU3VwcG9ydC9Hb29nbGUvR29vZ2xlIFRhbGsgUGx1Z2luIikpCi0KLShhbGxv
dyBmaWxlLXJlYWQqIGZpbGUtd3JpdGUqCi0gICAgKHN1YnBhdGggIi9MaWJyYXJ5L0FwcGxpY2F0
aW9uIFN1cHBvcnQvR29vZ2xlIikpCi0KLShhbGxvdyBmaWxlKgotICAgIChwcmVmaXggIi9wcml2
YXRlL3RtcCIpKQotCi0oYWxsb3cgbmV0d29yay1iaW5kIChwcmVmaXggIi9wcml2YXRlL3RtcCIp
KQotCi0oYWxsb3cgam9iLWNyZWF0aW9uKQotKGFsbG93IHNpZ25hbCkKLShhbGxvdyBtYWNoLWxv
b2t1cCkKLQotKHdlYmtpdC1wb3dlcmJveCkKLSh3ZWJraXQtcHJpbnRpbmcpCi0od2Via2l0LWNh
bWVyYSkKLSh3ZWJraXQtbWljcm9waG9uZSkKLQotKGFsbG93IG5ldHdvcmstYmluZCAobG9jYWwg
aXApKQotCi0oYWxsb3cgbmV0d29yay1vdXRib3VuZCkKLShhbGxvdyBuZXR3b3JrLWluYm91bmQg
KGxvY2FsIGlwKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNh
bmRib3hQcm9maWxlcy9jb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIgRVNSLnBsdWdpbi5zYiBi
L1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20ubWFjcm9t
ZWRpYS5GbGFzaCBQbGF5ZXIgRVNSLnBsdWdpbi5zYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYjFmYWY0OTQ2ODA0N2IzMTIyYzBhZmQwYzk5ODNiZjcyZGYyM2I0Ni4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Jlc291
cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyIEVT
Ui5wbHVnaW4uc2IJCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotOyBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotOwotOyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LTsgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi07IGFyZSBtZXQ6Ci07IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLTsgMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLTsgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotOyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotOwotOyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi07IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotOyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi07IFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
OyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi07IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi07IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotOyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotOyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotOyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi07IFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotKHdlYmtpdC1wb3dlcmJveCkKLSh3ZWJraXQtcHJp
bnRpbmcpCi0od2Via2l0LWNhbWVyYSkKLSh3ZWJraXQtbWljcm9waG9uZSkKLQotKGFsbG93IGlw
Yy1wb3NpeC1zZW0KLSAgICAoaXBjLXBvc2l4LW5hbWUgIk1hY3JvbWVkaWFTZW1hcGhvcmVEaWci
KQotICAgIChpcGMtcG9zaXgtbmFtZSAiNTk5MTgxMzAiKSkKLQotKGFsbG93IGZpbGUtcmVhZCoK
LSAgICAoaG9tZS1saXRlcmFsICIvbW0uY2ZnIikKLSAgICAoaG9tZS1saXRlcmFsICIvbW1zLmNm
ZyIpKQotCi0oZGVueSBmaWxlLXJlYWQteGF0dHIgKHdpdGggbm8tbG9nKQotICAgIChob21lLWxp
YnJhcnktbGl0ZXJhbCAiL0NhY2hlcyIpCi0gICAgKGhvbWUtbGlicmFyeS1wcmVmZXJlbmNlcy1s
aXRlcmFsICIvIikpCi0KLShhbGxvdyBmaWxlLXJlYWQqIGZpbGUtd3JpdGUtY3JlYXRlIGZpbGUt
d3JpdGUtbW9kZSBmaWxlLXdyaXRlLW93bmVyCi0gICAgKGhvbWUtbGlicmFyeS1saXRlcmFsICIv
Q2FjaGVzL0Fkb2JlIikKLSAgICAoaG9tZS1saWJyYXJ5LXByZWZlcmVuY2VzLWxpdGVyYWwgIi9N
YWNyb21lZGlhIikpCi0KLShhbGxvdyBmaWxlLXJlYWQqIGZpbGUtd3JpdGUqCi0gICAgKGxpdGVy
YWwgIi9MaWJyYXJ5L0FwcGxpY2F0aW9uIFN1cHBvcnQvTWFjcm9tZWRpYS9tbXMuY2ZnIikKLSAg
ICAoaG9tZS1saWJyYXJ5LWxpdGVyYWwgIi9BcHBsaWNhdGlvbiBTdXBwb3J0L01hY3JvbWVkaWEv
bW1zLmNmZyIpCi0gICAgKGhvbWUtbGlicmFyeS1zdWJwYXRoICIvQ2FjaGVzL0Fkb2JlL0ZsYXNo
IFBsYXllciIpCi0gICAgKGhvbWUtbGlicmFyeS1wcmVmZXJlbmNlcy1zdWJwYXRoICIvTWFjcm9t
ZWRpYS9GbGFzaCBQbGF5ZXIiKSkKLQotKGFsbG93IGZpbGUtcmVhZCoKLSAgICAobGl0ZXJhbCAi
L0xpYnJhcnkvUHJlZmVyZW5jZVBhbmVzL0ZsYXNoIFBsYXllci5wcmVmUGFuZSIpCi0gICAgKGhv
bWUtbGlicmFyeS1saXRlcmFsICIvUHJlZmVyZW5jZVBhbmVzL0ZsYXNoIFBsYXllci5wcmVmUGFu
ZSIpCi0gICAgKGhvbWUtbGlicmFyeS1yZWdleCAiL0FwcGxpY2F0aW9uIFN1cHBvcnQvTWFjcm9t
ZWRpYS9zc1wuKGNmZ3xjZm58c2duKSQiKSkKLQotKGFsbG93IGZpbGUtcmVhZCogZmlsZS13cml0
ZSoKLSAgICAobW91bnQtcmVsYXRpdmUtcmVnZXggIyJeL1wuVGVtcG9yYXJ5SXRlbXMvIikpCi0K
LShkZW55IGZpbGUtcmVhZCogKHdpdGggbm8tbG9nKQotICAgIChsaXRlcmFsICIvTGlicmFyeS9B
cHBsaWNhdGlvbiBTdXBwb3J0L01hY3JvbWVkaWEvRmxhc2hBdXRob3IuY2ZnIikKLSAgICAoc3Vi
cGF0aCAiL0xpYnJhcnkvQXBwbGljYXRpb24gU3VwcG9ydC9NYWNyb21lZGlhL0ZsYXNoUGxheWVy
VHJ1c3QiKSkKLQotKGFsbG93IG5ldHdvcmstYmluZCAobG9jYWwgaXApKQotCi07OzsKLTs7OyBO
ZWVkZWQgZm9yIENhbWVyYSBhY2Nlc3MKLTs7OwotKGFsbG93IGlva2l0LWdldC1wcm9wZXJ0aWVz
Ci0gICAgKGlva2l0LXByb3BlcnR5LXJlZ2V4ICMiXihBY3RpdmF0aW9ufEFuaW1hdGlvbilUaHJl
c2hvbGRzIikKLSAgICAoaW9raXQtcHJvcGVydHktcmVnZXggIyJeKChBY2N1cmF0ZXxFeHRlbmRl
ZClNYXh8TWluKURpZ2l0aXplclByZXNzdXJlVmFsdWUiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAi
SU9QQ0lUdW5uZWxDb21wYXRpYmxlIikKLSAgICAoaW9raXQtcHJvcGVydHkgIlBvd2VyQ29udHJv
bFN1cHBvcnRlZCIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJSZW1vdmFibGUiKQotICAgIChpb2tp
dC1wcm9wZXJ0eSAiUmVzZXRPbkxvY2tNcyIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJSZXNldE9u
VW5sb2NrTXMiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiU2hvdWxkUmVzZXRPbkJ1dHRvbiIpCi0g
ICAgKGlva2l0LXByb3BlcnR5LXJlZ2V4ICMiXlN1cHBvcnQoc1NpbGVudENsaWNrfFRhcFRvV2Fr
ZSkiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiV2lyZWxlc3NDaGFyZ2luZ05vdGlmaWNhdGlvblN1
cHBvcnRlZCIpCi0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5T
YW5kYm94UHJvZmlsZXMvY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyLnBsdWdpbi5zYiBiL1Nv
dXJjZS9XZWJLaXQvUmVzb3VyY2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20ubWFjcm9tZWRp
YS5GbGFzaCBQbGF5ZXIucGx1Z2luLnNiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBj
MGMyYTIzNzcxMmE2MzM3YmZjOGQzMjE2YWUxNmRhYTEwOTJiZmYyLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1Bs
dWdJblNhbmRib3hQcm9maWxlcy9jb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIucGx1Z2luLnNi
CQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLTsgQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLTsKLTsgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci07IG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotOyBhcmUgbWV0OgotOyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotOyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi07IDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLTsgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLTsKLTsgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotOyBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLTsgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotOyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLTsgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotOyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotOyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLTsgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LTsgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLTsgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotOyBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLSh3ZWJraXQtcG93ZXJib3gpCi0od2Via2l0LXByaW50aW5nKQotKHdl
YmtpdC1jYW1lcmEpCi0od2Via2l0LW1pY3JvcGhvbmUpCi0KLShhbGxvdyBpcGMtcG9zaXgtc2Vt
Ci0gICAgKGlwYy1wb3NpeC1uYW1lICJNYWNyb21lZGlhU2VtYXBob3JlRGlnIikKLSAgICAoaXBj
LXBvc2l4LW5hbWUgIjU5OTE4MTMwIikpCi0KLShhbGxvdyBmaWxlLXJlYWQqCi0gICAgKGhvbWUt
bGl0ZXJhbCAiL21tLmNmZyIpCi0gICAgKGhvbWUtbGl0ZXJhbCAiL21tcy5jZmciKSkKLQotKGRl
bnkgZmlsZS1yZWFkLXhhdHRyICh3aXRoIG5vLWxvZykKLSAgICAoaG9tZS1saWJyYXJ5LWxpdGVy
YWwgIi9DYWNoZXMiKQotICAgIChob21lLWxpYnJhcnktcHJlZmVyZW5jZXMtbGl0ZXJhbCAiLyIp
KQotCi0oYWxsb3cgZmlsZS1yZWFkKiBmaWxlLXdyaXRlLWNyZWF0ZSBmaWxlLXdyaXRlLW1vZGUg
ZmlsZS13cml0ZS1vd25lcgotICAgIChob21lLWxpYnJhcnktbGl0ZXJhbCAiL0NhY2hlcy9BZG9i
ZSIpCi0gICAgKGhvbWUtbGlicmFyeS1wcmVmZXJlbmNlcy1saXRlcmFsICIvTWFjcm9tZWRpYSIp
KQotCi0oYWxsb3cgZmlsZS1yZWFkKiBmaWxlLXdyaXRlKgotICAgIChsaXRlcmFsICIvTGlicmFy
eS9BcHBsaWNhdGlvbiBTdXBwb3J0L01hY3JvbWVkaWEvbW1zLmNmZyIpCi0gICAgKGhvbWUtbGli
cmFyeS1saXRlcmFsICIvQXBwbGljYXRpb24gU3VwcG9ydC9NYWNyb21lZGlhL21tcy5jZmciKQot
ICAgIChob21lLWxpYnJhcnktc3VicGF0aCAiL0NhY2hlcy9BZG9iZS9GbGFzaCBQbGF5ZXIiKQot
ICAgIChob21lLWxpYnJhcnktcHJlZmVyZW5jZXMtc3VicGF0aCAiL01hY3JvbWVkaWEvRmxhc2gg
UGxheWVyIikpCi0KLShhbGxvdyBmaWxlLXJlYWQqCi0gICAgKGxpdGVyYWwgIi9MaWJyYXJ5L1By
ZWZlcmVuY2VQYW5lcy9GbGFzaCBQbGF5ZXIucHJlZlBhbmUiKQotICAgIChob21lLWxpYnJhcnkt
bGl0ZXJhbCAiL1ByZWZlcmVuY2VQYW5lcy9GbGFzaCBQbGF5ZXIucHJlZlBhbmUiKQotICAgICho
b21lLWxpYnJhcnktcmVnZXggIi9BcHBsaWNhdGlvbiBTdXBwb3J0L01hY3JvbWVkaWEvc3NcLihj
Zmd8Y2ZufHNnbikkIikpCi0KLShhbGxvdyBmaWxlLXJlYWQqIGZpbGUtd3JpdGUqCi0gICAgKG1v
dW50LXJlbGF0aXZlLXJlZ2V4ICMiXi9cLlRlbXBvcmFyeUl0ZW1zLyIpKQotCi0oZGVueSBmaWxl
LXJlYWQqICh3aXRoIG5vLWxvZykKLSAgICAobGl0ZXJhbCAiL0xpYnJhcnkvQXBwbGljYXRpb24g
U3VwcG9ydC9NYWNyb21lZGlhL0ZsYXNoQXV0aG9yLmNmZyIpCi0gICAgKHN1YnBhdGggIi9MaWJy
YXJ5L0FwcGxpY2F0aW9uIFN1cHBvcnQvTWFjcm9tZWRpYS9GbGFzaFBsYXllclRydXN0IikpCi0K
LShhbGxvdyBuZXR3b3JrLWJpbmQgKGxvY2FsIGlwKSkKLQotOzs7Ci07OzsgTmVlZGVkIGZvciBD
YW1lcmEgYWNjZXNzCi07OzsKLShhbGxvdyBpb2tpdC1nZXQtcHJvcGVydGllcwotICAgIChpb2tp
dC1wcm9wZXJ0eS1yZWdleCAjIl4oQWN0aXZhdGlvbnxBbmltYXRpb24pVGhyZXNob2xkcyIpCi0g
ICAgKGlva2l0LXByb3BlcnR5LXJlZ2V4ICMiXigoQWNjdXJhdGV8RXh0ZW5kZWQpTWF4fE1pbilE
aWdpdGl6ZXJQcmVzc3VyZVZhbHVlIikKLSAgICAoaW9raXQtcHJvcGVydHkgIklPUENJVHVubmVs
Q29tcGF0aWJsZSIpCi0gICAgKGlva2l0LXByb3BlcnR5ICJQb3dlckNvbnRyb2xTdXBwb3J0ZWQi
KQotICAgIChpb2tpdC1wcm9wZXJ0eSAiUmVtb3ZhYmxlIikKLSAgICAoaW9raXQtcHJvcGVydHkg
IlJlc2V0T25Mb2NrTXMiKQotICAgIChpb2tpdC1wcm9wZXJ0eSAiUmVzZXRPblVubG9ja01zIikK
LSAgICAoaW9raXQtcHJvcGVydHkgIlNob3VsZFJlc2V0T25CdXR0b24iKQotICAgIChpb2tpdC1w
cm9wZXJ0eS1yZWdleCAjIl5TdXBwb3J0KHNTaWxlbnRDbGlja3xUYXBUb1dha2UpIikKLSAgICAo
aW9raXQtcHJvcGVydHkgIldpcmVsZXNzQ2hhcmdpbmdOb3RpZmljYXRpb25TdXBwb3J0ZWQiKQot
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2Zp
bGVzL2NvbS5taWNyb3NvZnQuU2lsdmVybGlnaHRQbHVnaW4uc2IgYi9Tb3VyY2UvV2ViS2l0L1Jl
c291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmlsZXMvY29tLm1pY3Jvc29mdC5TaWx2ZXJsaWdodFBs
dWdpbi5zYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ5NGI3ZjgyZGRkZjY1ZTJk
MGY3YzA5NWYyMDdlNjIxYmIyYjhjZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9QbHVnSW5TYW5kYm94UHJvZmls
ZXMvY29tLm1pY3Jvc29mdC5TaWx2ZXJsaWdodFBsdWdpbi5zYgorKysgL2Rldi9udWxsCkBAIC0x
LDU2ICswLDAgQEAKLTsgQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLTsKLTsgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci07IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotOyBhcmUgbWV0OgotOyAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotOyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi07IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci07ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLTsgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLTsKLTsgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotOyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLTsgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotOyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLTsgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotOyBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
OyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLTsgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLTsgQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLTsg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotOyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLShhbGxv
dyBpb2tpdC1vcGVuCi0gICAgKGlva2l0LXVzZXItY2xpZW50LWNsYXNzICJJT0hJRExpYlVzZXJD
bGllbnQiKQotICAgIChpb2tpdC11c2VyLWNsaWVudC1jbGFzcyAiSU9CbHVldG9vdGhIQ0lVc2Vy
Q2xpZW50IikpCi0KLShzaGFyZWQtcHJlZmVyZW5jZXMtcmVhZAotICAgICJjb20ubWljcm9zb2Z0
LlBsYXlSZWFkeSIKLSAgICAiY29tLm1pY3Jvc29mdC5hdXRvdXBkYXRlMiIpCi0oc2hhcmVkLXBy
ZWZlcmVuY2VzLXJlYWQtd3JpdGUgImNvbS5taWNyb3NvZnQuc2lsdmVybGlnaHQiKQotCi0oYWxs
b3cgZmlsZS13cml0ZS1jcmVhdGUKLSAgICAoaG9tZS1saWJyYXJ5LWxpdGVyYWwgIi9BcHBsaWNh
dGlvbiBTdXBwb3J0L01pY3Jvc29mdCIpKQotCi0oYWxsb3cgZmlsZS1yZWFkKiBmaWxlLXdyaXRl
KgotICAgIDs7IFNpZ2gsIG1vZGUgNzc3IGluIC9MaWJyYXJ5LgotICAgIChzdWJwYXRoICIvTGli
cmFyeS9BcHBsaWNhdGlvbiBTdXBwb3J0L01pY3Jvc29mdC9QbGF5UmVhZHkiKQotICAgIChob21l
LWxpYnJhcnktc3VicGF0aCAiL0FwcGxpY2F0aW9uIFN1cHBvcnQvTWljcm9zb2Z0L1BsYXlSZWFk
eSIpCi0gICAgKGhvbWUtbGlicmFyeS1zdWJwYXRoICIvQXBwbGljYXRpb24gU3VwcG9ydC9NaWNy
b3NvZnQvU2lsdmVybGlnaHQiKQotICAgIChob21lLWxpYnJhcnktc3VicGF0aCAiL0NhY2hlcy9U
ZW1wb3JhcnlJdGVtcyIpKQotCi0oaWYgKGRlZmluZWQ/ICdzZW1hcGhvcmUtb3duZXIpCi0gICAg
KGFsbG93IGlwYy1wb3NpeC1zZW0KLSAgICAgICAgIChzZW1hcGhvcmUtb3duZXIgc2FtZS1zYW5k
Ym94KSkKLSAgICAoYWxsb3cgaXBjLXBvc2l4LXNlbQotICAgICAgICAgKGlwYy1wb3NpeC1uYW1l
ICJMQ19NdXRleCIpKSkKLQotOzsgRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8xMzYzNjA3OD4KLShh
bGxvdyBpcGMtcG9zaXgtc2htKgotICAgIChpcGMtcG9zaXgtbmFtZS1yZWdleCAjIl5Db3JlQ0xS
XyIpKQotCi0oYWxsb3cgbmV0d29yay1iaW5kIChsb2NhbCBpcCkpCi0KLSh3ZWJraXQtcG93ZXJi
b3gpCi0od2Via2l0LXByaW50aW5nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9SZXNvdXJj
ZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5vcmFjbGUuamF2YS5KYXZhQXBwbGV0UGx1Z2lu
LnNiIGIvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvUGx1Z0luU2FuZGJveFByb2ZpbGVzL2NvbS5v
cmFjbGUuamF2YS5KYXZhQXBwbGV0UGx1Z2luLnNiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3ZTYxZWJjZjVhODZjNjgzM2Q1YzU1MzM3ZjcxYWM1MDJkZDcyNmU3Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUmVzb3Vy
Y2VzL1BsdWdJblNhbmRib3hQcm9maWxlcy9jb20ub3JhY2xlLmphdmEuSmF2YUFwcGxldFBsdWdp
bi5zYgorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLTsgQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLTsKLTsgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci07IG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotOyBhcmUgbWV0OgotOyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotOyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi07IDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci07
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLTsgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLTsKLTsgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotOyBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLTsgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotOyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLTsgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotOyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotOyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLTsgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLTsgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLTsgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotOyBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLSh3ZWJraXQtcHJpbnRpbmcpCi0KLShhbGxvdyBzaWduYWwgbmV0
d29yay1pbmJvdW5kKQotKGFsbG93IHByb2Nlc3MtZm9yaykKLShhbGxvdyBwcm9jZXNzLWV4ZWMK
LSAgICAoc3VicGF0aCAiL1N5c3RlbS9MaWJyYXJ5L0phdmEvSmF2YVZpcnR1YWxNYWNoaW5lcyIp
Ci0gICAgKHN1YnBhdGggIi9MaWJyYXJ5L0ludGVybmV0IFBsdWctSW5zL0phdmFBcHBsZXRQbHVn
aW4ucGx1Z2luIikpCi0KLShhbGxvdyBtYWNoLWxvb2t1cAotICAgIChnbG9iYWwtbmFtZSAiY29t
LmFwcGxlLmNvcmVzZXJ2aWNlcy5sYXVuY2hzZXJ2aWNlc2QiKQotICAgIChnbG9iYWwtbmFtZS1y
ZWdleCAjIl5QbGFjZUhvbGRlclNlcnZlck5hbWUtIikpCi0KLShhbGxvdyBmaWxlLXJlYWQqCi0g
ICAgKGxpdGVyYWwgIi9kZXYvZmQiKQotICAgIChsaXRlcmFsICIvdXNyL2JpbiIpCi0gICAgKGxp
dGVyYWwgIi9wcml2YXRlL2V0Yy9ob3N0cyIpCi0gICAgKHN1YnBhdGggIi9MaWJyYXJ5L0phdmEi
KQotICAgIChzdWJwYXRoICIvU3lzdGVtL0xpYnJhcnkvSmF2YSIpKQotCi0oc2hhcmVkLXByZWZl
cmVuY2VzLXJlYWQKLSAgICAiY29tLmFwcGxlLmphdmEuSmF2YVByZWZlcmVuY2VzIgotICAgICJu
ZXQuamF2YS5vcGVuamRrLmNtZCIpCi0KLShzaGFyZWQtcHJlZmVyZW5jZXMtcmVhZC13cml0ZQot
ICAgICJjb20uYXBwbGUuamF2YS51dGlsLnByZWZzIgotICAgICJjb20ub3JhY2xlLmphdmFkZXBs
b3ltZW50IikKLQotKGFsbG93IGZpbGUtcmVhZCogZmlsZS13cml0ZSoKLSAgICAoaG9tZS1saWJy
YXJ5LXN1YnBhdGggIi9TYXZlZCBBcHBsaWNhdGlvbiBTdGF0ZS9uZXQuamF2YS5vcGVuamRrLmNt
ZC5zYXZlZFN0YXRlIikKLSAgICAoaG9tZS1saWJyYXJ5LXN1YnBhdGggIi9BcHBsaWNhdGlvbiBT
dXBwb3J0L09yYWNsZS9KYXZhL0RlcGxveW1lbnQiKQotICAgIChob21lLWxpYnJhcnktc3VicGF0
aCAiL0NhY2hlcy9KYXZhIikpCi0KLShhbGxvdyBmaWxlLXdyaXRlLWNyZWF0ZQotICAgIChob21l
LWxpYnJhcnktbGl0ZXJhbCAiL0FwcGxpY2F0aW9uIFN1cHBvcnQvT3JhY2xlIikKLSAgICAoaG9t
ZS1saWJyYXJ5LWxpdGVyYWwgIi9BcHBsaWNhdGlvbiBTdXBwb3J0L09yYWNsZS9KYXZhIikpCi0K
LShhbGxvdyBmaWxlLXJlYWQqCi0gICAgKHN1YnBhdGggIi9MaWJyYXJ5L0FwcGxpY2F0aW9uIFN1
cHBvcnQvSmF2YS9QdWJsaWNGaWxlcyIpCi0gICAgKHN1YnBhdGggIi9MaWJyYXJ5L0FwcGxpY2F0
aW9uIFN1cHBvcnQvT3JhY2xlL0phdmEvRGVwbG95bWVudCIpKQotCi0oYWxsb3cgbmV0d29yay1i
aW5kIG5ldHdvcmstb3V0Ym91bmQgKHN1YnBhdGggKHBhcmFtICJEQVJXSU5fVVNFUl9URU1QX0RJ
UiIpKSkKLShhbGxvdyBuZXR3b3JrLWJpbmQgKGxvY2FsIGlwKSkKLQotKGRlbnkgZmlsZS13cml0
ZSogKHdpdGggbm8tbG9nKSAoc3VicGF0aCAiL0xpYnJhcnkvQXBwbGljYXRpb24gU3VwcG9ydC9P
cmFjbGUiKSkKLShkZW55IGZpbGUtd3JpdGUqICh3aXRoIG5vLWxvZykgKHN1YnBhdGggKHBhcmFt
ICJXRUJLSVQyX0ZSQU1FV09SS19ESVIiKSkpCi0KLShkZW55IGpvYi1jcmVhdGlvbiAod2l0aCBu
by1sb2cpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvV0tQbHVnaW5J
bmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9XS1BsdWdpbkluZm9y
bWF0aW9uLmNwcAppbmRleCBkNWIzNDFiMWM5NjE5YzgxMzFhN2Q3ZmMzNzgzMmJhYjkxYzk5MjEy
Li5jNWU3Zjk2Nzc0ZjA5M2ZmODcxMDJiNWE5NTdhYjYxNTc5NWYxODBkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9XS1BsdWdpbkluZm9ybWF0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9XS1BsdWdpbkluZm9ybWF0aW9uLmNwcApAQCAtMjcs
MTQ1ICsyNyw3NCBAQAogI2luY2x1ZGUgIldLUGx1Z2luSW5mb3JtYXRpb24uaCIKIAogI2luY2x1
ZGUgIkFQSVN0cmluZy5oIgotI2luY2x1ZGUgIlBsdWdpbkluZm9ybWF0aW9uLmgiCiAjaW5jbHVk
ZSAiV0tTaGFyZWRBUElDYXN0LmgiCiAKIFdLU3RyaW5nUmVmIFdLUGx1Z2luSW5mb3JtYXRpb25C
dW5kbGVJZGVudGlmaWVyS2V5KCkKIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
LSAgICBzdGF0aWMgQVBJOjpTdHJpbmcmIGtleSA9IEFQSTo6U3RyaW5nOjpjcmVhdGUoV2ViS2l0
OjpwbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZUlkZW50aWZpZXJLZXkoKSkubGVha1JlZigpOwotICAg
IHJldHVybiBXZWJLaXQ6OnRvQVBJKCZrZXkpOwotI2Vsc2UKICAgICByZXR1cm4gMDsKLSNlbmRp
ZgogfQogCiBXS1N0cmluZ1JlZiBXS1BsdWdpbkluZm9ybWF0aW9uQnVuZGxlVmVyc2lvbktleSgp
CiB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgc3RhdGljIEFQSTo6U3Ry
aW5nJiBrZXkgPSBBUEk6OlN0cmluZzo6Y3JlYXRlKFdlYktpdDo6cGx1Z2luSW5mb3JtYXRpb25C
dW5kbGVWZXJzaW9uS2V5KCkpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgm
a2V5KTsKLSNlbHNlCiAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKIH0KIAogV0tTdHJpbmdSZWYgV0tQ
bHVnaW5JbmZvcm1hdGlvbkJ1bmRsZVNob3J0VmVyc2lvbktleSgpCiB7Ci0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgc3RhdGljIEFQSTo6U3RyaW5nJiBrZXkgPSBBUEk6OlN0
cmluZzo6Y3JlYXRlKFdlYktpdDo6cGx1Z2luSW5mb3JtYXRpb25CdW5kbGVTaG9ydFZlcnNpb25L
ZXkoKSkubGVha1JlZigpOwotICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZrZXkpOwotI2Vsc2UK
ICAgICByZXR1cm4gMDsKLSNlbmRpZgogfQogCiBXS1N0cmluZ1JlZiBXS1BsdWdpbkluZm9ybWF0
aW9uUGF0aEtleSgpCiB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgc3Rh
dGljIEFQSTo6U3RyaW5nJiBrZXkgPSBBUEk6OlN0cmluZzo6Y3JlYXRlKFdlYktpdDo6cGx1Z2lu
SW5mb3JtYXRpb25QYXRoS2V5KCkpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQ
SSgma2V5KTsKLSNlbHNlCiAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKIH0KIAogV0tTdHJpbmdSZWYg
V0tQbHVnaW5JbmZvcm1hdGlvbkRpc3BsYXlOYW1lS2V5KCkKIHsKLSNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLSAgICBzdGF0aWMgQVBJOjpTdHJpbmcmIGtleSA9IEFQSTo6U3RyaW5n
OjpjcmVhdGUoV2ViS2l0OjpwbHVnaW5JbmZvcm1hdGlvbkRpc3BsYXlOYW1lS2V5KCkpLmxlYWtS
ZWYoKTsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgma2V5KTsKLSNlbHNlCiAgICAgcmV0dXJu
IDA7Ci0jZW5kaWYKIH0KIAogV0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlvbkRlZmF1bHRM
b2FkUG9saWN5S2V5KCkKIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBz
dGF0aWMgQVBJOjpTdHJpbmcmIGtleSA9IEFQSTo6U3RyaW5nOjpjcmVhdGUoV2ViS2l0OjpwbHVn
aW5JbmZvcm1hdGlvbkRlZmF1bHRMb2FkUG9saWN5S2V5KCkpLmxlYWtSZWYoKTsKLSAgICByZXR1
cm4gV2ViS2l0Ojp0b0FQSSgma2V5KTsKLSNlbHNlCiAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKIH0K
IAogV0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlvblVwZGF0ZVBhc3RMYXN0QmxvY2tlZFZl
cnNpb25Jc0tub3duQXZhaWxhYmxlS2V5KCkKIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLSAgICBzdGF0aWMgQVBJOjpTdHJpbmcmIGtleSA9IEFQSTo6U3RyaW5nOjpjcmVhdGUo
V2ViS2l0OjpwbHVnaW5JbmZvcm1hdGlvblVwZGF0ZVBhc3RMYXN0QmxvY2tlZFZlcnNpb25Jc0tu
b3duQXZhaWxhYmxlS2V5KCkpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgm
a2V5KTsKLSNlbHNlCiAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKIH0KIAogV0tTdHJpbmdSZWYgV0tQ
bHVnaW5JbmZvcm1hdGlvbkhhc1NhbmRib3hQcm9maWxlS2V5KCkKIHsKLSNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLSAgICBzdGF0aWMgQVBJOjpTdHJpbmcmIGtleSA9IEFQSTo6U3Ry
aW5nOjpjcmVhdGUoV2ViS2l0OjpwbHVnaW5JbmZvcm1hdGlvbkhhc1NhbmRib3hQcm9maWxlS2V5
KCkpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgma2V5KTsKLSNlbHNlCiAg
ICAgcmV0dXJuIDA7Ci0jZW5kaWYKIH0KIAogV0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlv
bkZyYW1lVVJMS2V5KCkKIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBz
dGF0aWMgQVBJOjpTdHJpbmcmIGtleSA9IEFQSTo6U3RyaW5nOjpjcmVhdGUoV2ViS2l0OjpwbHVn
aW5JbmZvcm1hdGlvbkZyYW1lVVJMS2V5KCkpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gV2ViS2l0
Ojp0b0FQSSgma2V5KTsKLSNlbHNlCiAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKIH0KIAogV0tTdHJp
bmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlvbk1JTUVUeXBlS2V5KCkKIHsKLSNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLSAgICBzdGF0aWMgQVBJOjpTdHJpbmcmIGtleSA9IEFQSTo6U3Ry
aW5nOjpjcmVhdGUoV2ViS2l0OjpwbHVnaW5JbmZvcm1hdGlvbk1JTUVUeXBlS2V5KCkpLmxlYWtS
ZWYoKTsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgma2V5KTsKLSNlbHNlCiAgICAgcmV0dXJu
IDA7Ci0jZW5kaWYKIH0KIAogV0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlvblBhZ2VVUkxL
ZXkoKQogewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHN0YXRpYyBBUEk6
OlN0cmluZyYga2V5ID0gQVBJOjpTdHJpbmc6OmNyZWF0ZShXZWJLaXQ6OnBsdWdpbkluZm9ybWF0
aW9uUGFnZVVSTEtleSgpKS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJmtl
eSk7Ci0jZWxzZQogICAgIHJldHVybiAwOwotI2VuZGlmCiB9CiAKIFdLU3RyaW5nUmVmIFdLUGx1
Z2luSW5mb3JtYXRpb25QbHVnaW5zcGFnZUF0dHJpYnV0ZVVSTEtleSgpCiB7Ci0jaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgc3RhdGljIEFQSTo6U3RyaW5nJiBrZXkgPSBBUEk6
OlN0cmluZzo6Y3JlYXRlKFdlYktpdDo6cGx1Z2luSW5mb3JtYXRpb25QbHVnaW5zcGFnZUF0dHJp
YnV0ZVVSTEtleSgpKS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJmtleSk7
Ci0jZWxzZQogICAgIHJldHVybiAwOwotI2VuZGlmCiB9CiAKIFdLU3RyaW5nUmVmIFdLUGx1Z2lu
SW5mb3JtYXRpb25QbHVnaW5VUkxLZXkoKQogewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQotICAgIHN0YXRpYyBBUEk6OlN0cmluZyYga2V5ID0gQVBJOjpTdHJpbmc6OmNyZWF0ZShX
ZWJLaXQ6OnBsdWdpbkluZm9ybWF0aW9uUGx1Z2luVVJMS2V5KCkpLmxlYWtSZWYoKTsKLSAgICBy
ZXR1cm4gV2ViS2l0Ojp0b0FQSSgma2V5KTsKLSNlbHNlCiAgICAgcmV0dXJuIDA7Ci0jZW5kaWYK
IH0KIAogV0tTdHJpbmdSZWYgV0tQbHVnSW5JbmZvcm1hdGlvblJlcGxhY2VtZW50T2JzY3VyZWRL
ZXkoKQogewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHN0YXRpYyBBUEk6
OlN0cmluZyYga2V5ID0gQVBJOjpTdHJpbmc6OmNyZWF0ZShXZWJLaXQ6OnBsdWdJbkluZm9ybWF0
aW9uUmVwbGFjZW1lbnRPYnNjdXJlZEtleSgpKS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJuIFdlYktp
dDo6dG9BUEkoJmtleSk7Ci0jZWxzZQogICAgIHJldHVybiAwOwotI2VuZGlmCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL0NvY29hL1hQQ1Nl
cnZpY2UvWFBDU2VydmljZUVudHJ5UG9pbnQuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VudHJ5
UG9pbnRVdGlsaXRpZXMvQ29jb2EvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2ludC5oCmlu
ZGV4IDBhODEyMWFlNzUwMDUwYjM3MDcxMzI4MTI5YzA3NDY3NGEzNTk1ZjAuLmZmN2E0NGM1YmEz
NmZjOWJjZmJkYzMxMmI5M2QzM2JiOTVkYTY3MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvQ29jb2EvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50
cnlQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMv
Q29jb2EvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2ludC5oCkBAIC00MCw3ICs0MCw2IEBA
IGV4dGVybiAiQyIgT1NfTk9USFJPVyB2b2lkIHZvdWNoZXJfcmVwbGFjZV9kZWZhdWx0X3ZvdWNo
ZXIodm9pZCk7CiAKICNkZWZpbmUgV0VCQ09OVEVOVF9TRVJWSUNFX0lOSVRJQUxJWkVSIFdlYkNv
bnRlbnRTZXJ2aWNlSW5pdGlhbGl6ZXIKICNkZWZpbmUgTkVUV09SS19TRVJWSUNFX0lOSVRJQUxJ
WkVSIE5ldHdvcmtTZXJ2aWNlSW5pdGlhbGl6ZXIKLSNkZWZpbmUgUExVR0lOX1NFUlZJQ0VfSU5J
VElBTElaRVIgUGx1Z2luU2VydmljZUluaXRpYWxpemVyCiAjZGVmaW5lIEdQVV9TRVJWSUNFX0lO
SVRJQUxJWkVSIEdQVVNlcnZpY2VJbml0aWFsaXplcgogI2RlZmluZSBXRUJBVVRITl9TRVJWSUNF
X0lOSVRJQUxJWkVSIFdlYkF1dGhuU2VydmljZUluaXRpYWxpemVyCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTlBJZGVudGlmaWVyRGF0YS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9QbHVnaW5zL05QSWRlbnRpZmllckRhdGEuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhMjliODRjNDE3NGE2NTE4YmI1OGVjNjM0YTZjYjE5NjgyZGYzM2Qy
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1BsdWdpbnMvTlBJZGVudGlmaWVyRGF0YS5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIk5QSWRlbnRpZmllckRhdGEuaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQotCi0jaW5jbHVkZSAiRGVjb2Rlci5oIgotI2luY2x1ZGUgIkVuY29kZXIuaCIKLSNpbmNsdWRl
ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0lkZW50aWZpZXJS
ZXAuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQot
TlBJZGVudGlmaWVyRGF0YTo6TlBJZGVudGlmaWVyRGF0YSgpCi0gICAgOiBtX2lzU3RyaW5nKGZh
bHNlKQotICAgICwgbV9udW1iZXIoMCkKLXsKLX0KLQotCi1OUElkZW50aWZpZXJEYXRhIE5QSWRl
bnRpZmllckRhdGE6OmZyb21OUElkZW50aWZpZXIoTlBJZGVudGlmaWVyIG5wSWRlbnRpZmllcikK
LXsKLSAgICBOUElkZW50aWZpZXJEYXRhIG5wSWRlbnRpZmllckRhdGE7Ci0KLSAgICBJZGVudGlm
aWVyUmVwKiBpZGVudGlmaWVyUmVwID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KG5wSWRl
bnRpZmllcik7Ci0gICAgbnBJZGVudGlmaWVyRGF0YS5tX2lzU3RyaW5nID0gaWRlbnRpZmllclJl
cC0+aXNTdHJpbmcoKTsKLQotICAgIGlmIChucElkZW50aWZpZXJEYXRhLm1faXNTdHJpbmcpCi0g
ICAgICAgIG5wSWRlbnRpZmllckRhdGEubV9zdHJpbmcgPSBpZGVudGlmaWVyUmVwLT5zdHJpbmco
KTsKLSAgICBlbHNlCi0gICAgICAgIG5wSWRlbnRpZmllckRhdGEubV9udW1iZXIgPSBpZGVudGlm
aWVyUmVwLT5udW1iZXIoKTsKLQotICAgIHJldHVybiBucElkZW50aWZpZXJEYXRhOwotfQotCi1O
UElkZW50aWZpZXIgTlBJZGVudGlmaWVyRGF0YTo6Y3JlYXRlTlBJZGVudGlmaWVyKCkgY29uc3QK
LXsKLSAgICBpZiAobV9pc1N0cmluZykKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5QSWRl
bnRpZmllcj4oSWRlbnRpZmllclJlcDo6Z2V0KG1fc3RyaW5nLmRhdGEoKSkpOwotICAgIAotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXI+KElkZW50aWZpZXJSZXA6OmdldChtX251
bWJlcikpOwotfQotCi12b2lkIE5QSWRlbnRpZmllckRhdGE6OmVuY29kZShJUEM6OkVuY29kZXIm
IGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX2lzU3RyaW5nOwotICAgIGlmICht
X2lzU3RyaW5nKQotICAgICAgICBlbmNvZGVyIDw8IG1fc3RyaW5nOwotICAgIGVsc2UKLSAgICAg
ICAgZW5jb2RlciA8PCBtX251bWJlcjsKLX0KLQotc3RkOjpvcHRpb25hbDxOUElkZW50aWZpZXJE
YXRhPiBOUElkZW50aWZpZXJEYXRhOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQotewot
ICAgIE5QSWRlbnRpZmllckRhdGEgcmVzdWx0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
dWx0Lm1faXNTdHJpbmcpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICAK
LSAgICBpZiAocmVzdWx0Lm1faXNTdHJpbmcpIHsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQubV9zdHJpbmcpKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3VsdC5tX251bWJlcikpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Bs
dWdpbnMvTlBJZGVudGlmaWVyRGF0YS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9O
UElkZW50aWZpZXJEYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0YWEyNGYx
MTAxNmZhMTZjZTE5Y2U1NDM4MGM0ZDc5NDQ0ZmFmOTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OUElk
ZW50aWZpZXJEYXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2lu
Y2x1ZGUgPFdlYkNvcmUvbnBydW50aW1lX2ludGVybmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSVBDIHsKLWNsYXNzIERlY29kZXI7Ci1jbGFzcyBFbmNv
ZGVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgTlBJZGVudGlmaWVyRGF0YSB7
Ci1wdWJsaWM6Ci0gICAgTlBJZGVudGlmaWVyRGF0YSgpOwotICAgIAotICAgIHN0YXRpYyBOUElk
ZW50aWZpZXJEYXRhIGZyb21OUElkZW50aWZpZXIoTlBJZGVudGlmaWVyKTsKLSAgICBOUElkZW50
aWZpZXIgY3JlYXRlTlBJZGVudGlmaWVyKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGVuY29kZShJUEM6
OkVuY29kZXImKSBjb25zdDsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxOUElkZW50aWZpZXJE
YXRhPiBkZWNvZGUoSVBDOjpEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtX2lzU3Ry
aW5nOwotICAgIENTdHJpbmcgbV9zdHJpbmc7Ci0gICAgaW50IG1fbnVtYmVyOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTlBPYmplY3RNZXNz
YWdlUmVjZWl2ZXIuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OUE9iamVjdE1l
c3NhZ2VSZWNlaXZlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ZjkwNDU1
ZTI3ZjZjZjljNGRhOThkYzJlZDgxZWZmYzFmMTZkMDYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OUE9i
amVjdE1lc3NhZ2VSZWNlaXZlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOUE9iamVjdE1lc3Nh
Z2VSZWNlaXZlci5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNs
dWRlICJOUElkZW50aWZpZXJEYXRhLmgiCi0jaW5jbHVkZSAiTlBSZW1vdGVPYmplY3RNYXAuaCIK
LSNpbmNsdWRlICJOUFJ1bnRpbWVVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJOUFZhcmlhbnREYXRh
LmgiCi0jaW5jbHVkZSAiUGx1Z2luLmgiCi0jaW5jbHVkZSAiUGx1Z2luQ29udHJvbGxlci5oIgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6Ok5QT2JqZWN0
TWVzc2FnZVJlY2VpdmVyKE5QUmVtb3RlT2JqZWN0TWFwKiBucFJlbW90ZU9iamVjdE1hcCwgUGx1
Z2luKiBwbHVnaW4sIHVpbnQ2NF90IG5wT2JqZWN0SUQsIE5QT2JqZWN0KiBucE9iamVjdCkKLSAg
ICA6IG1fbnBSZW1vdGVPYmplY3RNYXAobnBSZW1vdGVPYmplY3RNYXApCi0gICAgLCBtX3BsdWdp
bihwbHVnaW4pCi0gICAgLCBtX25wT2JqZWN0SUQobnBPYmplY3RJRCkKLSAgICAsIG1fbnBPYmpl
Y3QobnBPYmplY3QpCi17Ci0gICAgcmV0YWluTlBPYmplY3QobV9ucE9iamVjdCk7Ci19Ci0KLU5Q
T2JqZWN0TWVzc2FnZVJlY2VpdmVyOjp+TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIoKQotewotICAg
IG1fbnBSZW1vdGVPYmplY3RNYXAtPnVucmVnaXN0ZXJOUE9iamVjdChtX25wT2JqZWN0SUQpOwot
Ci0gICAgcmVsZWFzZU5QT2JqZWN0KG1fbnBPYmplY3QpOwotfQotCi12b2lkIE5QT2JqZWN0TWVz
c2FnZVJlY2VpdmVyOjpkZWFsbG9jYXRlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKLXsKLSAgICBkZWxldGUgdGhpczsKLSAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwotfQotCi12b2lkIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyOjpoYXNNZXRob2QoY29uc3Qg
TlBJZGVudGlmaWVyRGF0YSYgbWV0aG9kTmFtZURhdGEsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKG1fcGx1Z2luLT5pc0JlaW5n
RGVzdHJveWVkKCkgfHwgIW1fbnBPYmplY3QtPl9jbGFzcy0+aGFzTWV0aG9kKQotICAgICAgICBy
ZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwotCi0gICAgY29tcGxldGlvbkhhbmRsZXIo
bV9ucE9iamVjdC0+X2NsYXNzLT5oYXNNZXRob2QobV9ucE9iamVjdCwgbWV0aG9kTmFtZURhdGEu
Y3JlYXRlTlBJZGVudGlmaWVyKCkpKTsKLX0KLQotdm9pZCBOUE9iamVjdE1lc3NhZ2VSZWNlaXZl
cjo6aW52b2tlKGNvbnN0IE5QSWRlbnRpZmllckRhdGEmIG1ldGhvZE5hbWVEYXRhLCBjb25zdCBW
ZWN0b3I8TlBWYXJpYW50RGF0YT4mIGFyZ3VtZW50c0RhdGEsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCwgTlBWYXJpYW50RGF0YSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBp
ZiAobV9wbHVnaW4tPmlzQmVpbmdEZXN0cm95ZWQoKSB8fCAhbV9ucE9iamVjdC0+X2NsYXNzLT5p
bnZva2UpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSwgeyB9KTsKLQot
ICAgIFZlY3RvcjxOUFZhcmlhbnQ+IGFyZ3VtZW50czsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGFyZ3VtZW50c0RhdGEuc2l6ZSgpOyArK2kpCi0gICAgICAgIGFyZ3VtZW50cy5hcHBlbmQo
bV9ucFJlbW90ZU9iamVjdE1hcC0+bnBWYXJpYW50RGF0YVRvTlBWYXJpYW50KGFyZ3VtZW50c0Rh
dGFbaV0sIG1fcGx1Z2luKSk7Ci0KLSAgICBOUFZhcmlhbnQgcmVzdWx0OwotICAgIFZPSURfVE9f
TlBWQVJJQU5UKHJlc3VsdCk7Ci0KLSAgICBQbHVnaW5Db250cm9sbGVyOjpQbHVnaW5EZXN0cnVj
dGlvblByb3RlY3RvciBwcm90ZWN0b3IobV9wbHVnaW4tPmNvbnRyb2xsZXIoKSk7Ci0KLSAgICBO
UFZhcmlhbnREYXRhIHJlc3VsdERhdGE7Ci0gICAgYm9vbCByZXR1cm5WYWx1ZSA9IG1fbnBPYmpl
Y3QtPl9jbGFzcy0+aW52b2tlKG1fbnBPYmplY3QsIG1ldGhvZE5hbWVEYXRhLmNyZWF0ZU5QSWRl
bnRpZmllcigpLCBhcmd1bWVudHMuZGF0YSgpLCBhcmd1bWVudHMuc2l6ZSgpLCAmcmVzdWx0KTsK
LSAgICBpZiAocmV0dXJuVmFsdWUpIHsKLSAgICAgICAgLy8gQ29udmVydCB0aGUgTlBWYXJpYW50
IHRvIGFuIE5QVmFyaWFudERhdGEuCi0gICAgICAgIHJlc3VsdERhdGEgPSBtX25wUmVtb3RlT2Jq
ZWN0TWFwLT5ucFZhcmlhbnRUb05QVmFyaWFudERhdGEocmVzdWx0LCBtX3BsdWdpbik7Ci0gICAg
fQotCi0gICAgLy8gUmVsZWFzZSBhbGwgYXJndW1lbnRzLgotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYXJndW1lbnRzRGF0YS5zaXplKCk7ICsraSkKLSAgICAgICAgcmVsZWFzZU5QVmFyaWFu
dFZhbHVlKCZhcmd1bWVudHNbaV0pOwotICAgIAotICAgIC8vIEFuZCByZWxlYXNlIHRoZSByZXN1
bHQuCi0gICAgcmVsZWFzZU5QVmFyaWFudFZhbHVlKCZyZXN1bHQpOwotICAgIGNvbXBsZXRpb25I
YW5kbGVyKHJldHVyblZhbHVlLCBXVEZNb3ZlKHJlc3VsdERhdGEpKTsKLX0KLQotdm9pZCBOUE9i
amVjdE1lc3NhZ2VSZWNlaXZlcjo6aW52b2tlRGVmYXVsdChjb25zdCBWZWN0b3I8TlBWYXJpYW50
RGF0YT4mIGFyZ3VtZW50c0RhdGEsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCwgTlBWYXJp
YW50RGF0YSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAobV9wbHVnaW4tPmlz
QmVpbmdEZXN0cm95ZWQoKSB8fCAhbV9ucE9iamVjdC0+X2NsYXNzLT5pbnZva2VEZWZhdWx0KQot
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UsIHsgfSk7Ci0KLSAgICBWZWN0
b3I8TlBWYXJpYW50PiBhcmd1bWVudHM7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1
bWVudHNEYXRhLnNpemUoKTsgKytpKQotICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fbnBSZW1v
dGVPYmplY3RNYXAtPm5wVmFyaWFudERhdGFUb05QVmFyaWFudChhcmd1bWVudHNEYXRhW2ldLCBt
X3BsdWdpbikpOwotCi0gICAgTlBWYXJpYW50IHJlc3VsdDsKLSAgICBWT0lEX1RPX05QVkFSSUFO
VChyZXN1bHQpOwotCi0gICAgUGx1Z2luQ29udHJvbGxlcjo6UGx1Z2luRGVzdHJ1Y3Rpb25Qcm90
ZWN0b3IgcHJvdGVjdG9yKG1fcGx1Z2luLT5jb250cm9sbGVyKCkpOwotCi0gICAgTlBWYXJpYW50
RGF0YSByZXN1bHREYXRhOwotICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xh
c3MtPmludm9rZURlZmF1bHQobV9ucE9iamVjdCwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1lbnRz
LnNpemUoKSwgJnJlc3VsdCk7Ci0gICAgaWYgKHJldHVyblZhbHVlKSB7Ci0gICAgICAgIC8vIENv
bnZlcnQgdGhlIE5QVmFyaWFudCB0byBhbiBOUFZhcmlhbnREYXRhLgotICAgICAgICByZXN1bHRE
YXRhID0gbV9ucFJlbW90ZU9iamVjdE1hcC0+bnBWYXJpYW50VG9OUFZhcmlhbnREYXRhKHJlc3Vs
dCwgbV9wbHVnaW4pOwotICAgIH0KLQotICAgIC8vIFJlbGVhc2UgYWxsIGFyZ3VtZW50cy4KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50c0RhdGEuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIHJlbGVhc2VOUFZhcmlhbnRWYWx1ZSgmYXJndW1lbnRzW2ldKTsKLSAgICAKLSAgICAvLyBB
bmQgcmVsZWFzZSB0aGUgcmVzdWx0LgotICAgIHJlbGVhc2VOUFZhcmlhbnRWYWx1ZSgmcmVzdWx0
KTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSwgV1RGTW92ZShyZXN1bHREYXRh
KSk7Ci19Ci0KLXZvaWQgTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6Omhhc1Byb3BlcnR5KGNvbnN0
IE5QSWRlbnRpZmllckRhdGEmIHByb3BlcnR5TmFtZURhdGEsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKG1fcGx1Z2luLT5pc0Jl
aW5nRGVzdHJveWVkKCkgfHwgIW1fbnBPYmplY3QtPl9jbGFzcy0+aGFzUHJvcGVydHkpCi0gICAg
ICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Ci0KLSAgICBjb21wbGV0aW9uSGFu
ZGxlcihtX25wT2JqZWN0LT5fY2xhc3MtPmhhc1Byb3BlcnR5KG1fbnBPYmplY3QsIHByb3BlcnR5
TmFtZURhdGEuY3JlYXRlTlBJZGVudGlmaWVyKCkpKTsKLX0KLQotdm9pZCBOUE9iamVjdE1lc3Nh
Z2VSZWNlaXZlcjo6Z2V0UHJvcGVydHkoY29uc3QgTlBJZGVudGlmaWVyRGF0YSYgcHJvcGVydHlO
YW1lRGF0YSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sLCBOUFZhcmlhbnREYXRhJiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmIChtX3BsdWdpbi0+aXNCZWluZ0Rlc3Ryb3ll
ZCgpIHx8ICFtX25wT2JqZWN0LT5fY2xhc3MtPmdldFByb3BlcnR5KQotICAgICAgICByZXR1cm4g
Y29tcGxldGlvbkhhbmRsZXIoZmFsc2UsIHsgfSk7Ci0KLSAgICBOUFZhcmlhbnQgcmVzdWx0Owot
ICAgIFZPSURfVE9fTlBWQVJJQU5UKHJlc3VsdCk7Ci0KLSAgICBQbHVnaW5Db250cm9sbGVyOjpQ
bHVnaW5EZXN0cnVjdGlvblByb3RlY3RvciBwcm90ZWN0b3IobV9wbHVnaW4tPmNvbnRyb2xsZXIo
KSk7Ci0KLSAgICBib29sIHJldHVyblZhbHVlID0gbV9ucE9iamVjdC0+X2NsYXNzLT5nZXRQcm9w
ZXJ0eShtX25wT2JqZWN0LCBwcm9wZXJ0eU5hbWVEYXRhLmNyZWF0ZU5QSWRlbnRpZmllcigpLCAm
cmVzdWx0KTsKLSAgICBpZiAoIXJldHVyblZhbHVlKQotICAgICAgICByZXR1cm4gY29tcGxldGlv
bkhhbmRsZXIoZmFsc2UsIHsgfSk7Ci0KLQotICAgIE5QVmFyaWFudERhdGEgcmVzdWx0RGF0YSA9
IG1fbnBSZW1vdGVPYmplY3RNYXAtPm5wVmFyaWFudFRvTlBWYXJpYW50RGF0YShyZXN1bHQsIG1f
cGx1Z2luKTsKLQotICAgIHJlbGVhc2VOUFZhcmlhbnRWYWx1ZSgmcmVzdWx0KTsKLSAgICBjb21w
bGV0aW9uSGFuZGxlcih0cnVlLCBXVEZNb3ZlKHJlc3VsdERhdGEpKTsKLX0KLQotdm9pZCBOUE9i
amVjdE1lc3NhZ2VSZWNlaXZlcjo6c2V0UHJvcGVydHkoY29uc3QgTlBJZGVudGlmaWVyRGF0YSYg
cHJvcGVydHlOYW1lRGF0YSwgY29uc3QgTlBWYXJpYW50RGF0YSYgcHJvcGVydHlWYWx1ZURhdGEs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0g
ICAgaWYgKG1fcGx1Z2luLT5pc0JlaW5nRGVzdHJveWVkKCkgfHwgIW1fbnBPYmplY3QtPl9jbGFz
cy0+c2V0UHJvcGVydHkpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7
Ci0KLSAgICBOUFZhcmlhbnQgcHJvcGVydHlWYWx1ZSA9IG1fbnBSZW1vdGVPYmplY3RNYXAtPm5w
VmFyaWFudERhdGFUb05QVmFyaWFudChwcm9wZXJ0eVZhbHVlRGF0YSwgbV9wbHVnaW4pOwotCi0g
ICAgUGx1Z2luQ29udHJvbGxlcjo6UGx1Z2luRGVzdHJ1Y3Rpb25Qcm90ZWN0b3IgcHJvdGVjdG9y
KG1fcGx1Z2luLT5jb250cm9sbGVyKCkpOwotCi0gICAgYm9vbCByZXR1cm5WYWx1ZSA9IG1fbnBP
YmplY3QtPl9jbGFzcy0+c2V0UHJvcGVydHkobV9ucE9iamVjdCwgcHJvcGVydHlOYW1lRGF0YS5j
cmVhdGVOUElkZW50aWZpZXIoKSwgJnByb3BlcnR5VmFsdWUpOwotCi0gICAgcmVsZWFzZU5QVmFy
aWFudFZhbHVlKCZwcm9wZXJ0eVZhbHVlKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihyZXR1cm5W
YWx1ZSk7Ci19Ci0KLXZvaWQgTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6OnJlbW92ZVByb3BlcnR5
KGNvbnN0IE5QSWRlbnRpZmllckRhdGEmIHByb3BlcnR5TmFtZURhdGEsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKG1fcGx1Z2lu
LT5pc0JlaW5nRGVzdHJveWVkKCkgfHwgIW1fbnBPYmplY3QtPl9jbGFzcy0+cmVtb3ZlUHJvcGVy
dHkpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Ci0KLSAgICBjb21w
bGV0aW9uSGFuZGxlcihtX25wT2JqZWN0LT5fY2xhc3MtPnJlbW92ZVByb3BlcnR5KG1fbnBPYmpl
Y3QsIHByb3BlcnR5TmFtZURhdGEuY3JlYXRlTlBJZGVudGlmaWVyKCkpKTsKLX0KLQotdm9pZCBO
UE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6ZW51bWVyYXRlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCwgVmVjdG9yPE5QSWRlbnRpZmllckRhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQot
ewotICAgIGlmIChtX3BsdWdpbi0+aXNCZWluZ0Rlc3Ryb3llZCgpIHx8ICFOUF9DTEFTU19TVFJV
Q1RfVkVSU0lPTl9IQVNfRU5VTShtX25wT2JqZWN0LT5fY2xhc3MpIHx8ICFtX25wT2JqZWN0LT5f
Y2xhc3MtPmVudW1lcmF0ZSkKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNl
LCB7IH0pOwotCi0gICAgTlBJZGVudGlmaWVyKiBpZGVudGlmaWVycyA9IDA7Ci0gICAgdWludDMy
X3QgaWRlbnRpZmllckNvdW50ID0gMDsKLQotICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBtX25wT2Jq
ZWN0LT5fY2xhc3MtPmVudW1lcmF0ZShtX25wT2JqZWN0LCAmaWRlbnRpZmllcnMsICZpZGVudGlm
aWVyQ291bnQpOwotICAgIGlmICghcmV0dXJuVmFsdWUpCi0gICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcihmYWxzZSwgeyB9KTsKLQotICAgIFZlY3RvcjxXZWJLaXQ6Ok5QSWRlbnRpZmll
ckRhdGE+IGlkZW50aWZpZXJzRGF0YTsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgaWRl
bnRpZmllckNvdW50OyArK2kpCi0gICAgICAgIGlkZW50aWZpZXJzRGF0YS5hcHBlbmQoTlBJZGVu
dGlmaWVyRGF0YTo6ZnJvbU5QSWRlbnRpZmllcihpZGVudGlmaWVyc1tpXSkpOwotCi0gICAgbnBu
TWVtRnJlZShpZGVudGlmaWVycyk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSwgV1RGTW92
ZShpZGVudGlmaWVyc0RhdGEpKTsKLX0KLQotdm9pZCBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6
Y29uc3RydWN0KGNvbnN0IFZlY3RvcjxOUFZhcmlhbnREYXRhPiYgYXJndW1lbnRzRGF0YSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sLCBOUFZhcmlhbnREYXRhJiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQotewotICAgIGlmIChtX3BsdWdpbi0+aXNCZWluZ0Rlc3Ryb3llZCgpIHx8ICFOUF9D
TEFTU19TVFJVQ1RfVkVSU0lPTl9IQVNfQ1RPUihtX25wT2JqZWN0LT5fY2xhc3MpIHx8ICFtX25w
T2JqZWN0LT5fY2xhc3MtPmNvbnN0cnVjdCkKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5k
bGVyKGZhbHNlLCB7IH0pOwotCi0gICAgVmVjdG9yPE5QVmFyaWFudD4gYXJndW1lbnRzOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRzRGF0YS5zaXplKCk7ICsraSkKLSAgICAg
ICAgYXJndW1lbnRzLmFwcGVuZChtX25wUmVtb3RlT2JqZWN0TWFwLT5ucFZhcmlhbnREYXRhVG9O
UFZhcmlhbnQoYXJndW1lbnRzRGF0YVtpXSwgbV9wbHVnaW4pKTsKLQotICAgIE5QVmFyaWFudCBy
ZXN1bHQ7Ci0gICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsKLQotICAgIFBsdWdpbkNvbnRy
b2xsZXI6OlBsdWdpbkRlc3RydWN0aW9uUHJvdGVjdG9yIHByb3RlY3RvcihtX3BsdWdpbi0+Y29u
dHJvbGxlcigpKTsKLQotICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xhc3Mt
PmNvbnN0cnVjdChtX25wT2JqZWN0LCBhcmd1bWVudHMuZGF0YSgpLCBhcmd1bWVudHMuc2l6ZSgp
LCAmcmVzdWx0KTsKLSAgICBOUFZhcmlhbnREYXRhIHJlc3VsdERhdGE7Ci0gICAgaWYgKHJldHVy
blZhbHVlKQotICAgICAgICByZXN1bHREYXRhID0gbV9ucFJlbW90ZU9iamVjdE1hcC0+bnBWYXJp
YW50VG9OUFZhcmlhbnREYXRhKHJlc3VsdCwgbV9wbHVnaW4pOwotCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBhcmd1bWVudHNEYXRhLnNpemUoKTsgKytpKQotICAgICAgICByZWxlYXNlTlBW
YXJpYW50VmFsdWUoJmFyZ3VtZW50c1tpXSk7Ci0gICAgCi0gICAgcmVsZWFzZU5QVmFyaWFudFZh
bHVlKCZyZXN1bHQpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlLCBXVEZNb3Zl
KHJlc3VsdERhdGEpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
aGFyZWQvUGx1Z2lucy9OUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5oIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvUGx1Z2lucy9OUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBiZjI1ZTgwZWE3ZjQyMTVkYzNhNzViZmJjNDEzODc0Y2ExOTgzYWFkLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1BsdWdpbnMvTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIuaAorKysgL2Rldi9udWxs
CkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1
ZGUgPFdlYkNvcmUvbnBydW50aW1lLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBOUElkZW50aWZpZXJEYXRhOwotY2xhc3MgTlBS
ZW1vdGVPYmplY3RNYXA7Ci1jbGFzcyBOUFZhcmlhbnREYXRhOwotY2xhc3MgUGx1Z2luOwotCi1j
bGFzcyBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIpOwot
Ci1wdWJsaWM6Ci0gICAgTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIoTlBSZW1vdGVPYmplY3RNYXAq
LCBQbHVnaW4qLCB1aW50NjRfdCBucE9iamVjdElELCBOUE9iamVjdCopOwotICAgIH5OUE9iamVj
dE1lc3NhZ2VSZWNlaXZlcigpOwotCi0gICAgYm9vbCBkaWRSZWNlaXZlU3luY05QT2JqZWN0TWVz
c2FnZVJlY2VpdmVyTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBVbmlx
dWVSZWY8SVBDOjpFbmNvZGVyPiYpOwotCi0gICAgUGx1Z2luKiBwbHVnaW4oKSBjb25zdCB7IHJl
dHVybiBtX3BsdWdpbjsgfQotICAgIE5QT2JqZWN0KiBucE9iamVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fbnBPYmplY3Q7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgLy8gTWVzc2FnZSBoYW5kbGVycy4K
LSAgICB2b2lkIGRlYWxsb2NhdGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2
b2lkIGhhc01ldGhvZChjb25zdCBOUElkZW50aWZpZXJEYXRhJiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sKT4mJik7Ci0gICAgdm9pZCBpbnZva2UoY29uc3QgTlBJZGVudGlmaWVyRGF0YSYs
IGNvbnN0IFZlY3RvcjxOUFZhcmlhbnREYXRhPiYgYXJndW1lbnRzRGF0YSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sLCBOUFZhcmlhbnREYXRhJiYpPiYmKTsKLSAgICB2b2lkIGludm9rZURl
ZmF1bHQoY29uc3QgVmVjdG9yPE5QVmFyaWFudERhdGE+JiBhcmd1bWVudHNEYXRhLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wsIE5QVmFyaWFudERhdGEmJik+JiYpOwotICAgIHZvaWQgaGFz
UHJvcGVydHkoY29uc3QgTlBJZGVudGlmaWVyRGF0YSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYpOwotICAgIHZvaWQgZ2V0UHJvcGVydHkoY29uc3QgTlBJZGVudGlmaWVyRGF0YSYs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCwgTlBWYXJpYW50RGF0YSYmKT4mJik7Ci0gICAg
dm9pZCBzZXRQcm9wZXJ0eShjb25zdCBOUElkZW50aWZpZXJEYXRhJiwgY29uc3QgTlBWYXJpYW50
RGF0YSYgcHJvcGVydHlWYWx1ZURhdGEsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYp
OwotICAgIHZvaWQgcmVtb3ZlUHJvcGVydHkoY29uc3QgTlBJZGVudGlmaWVyRGF0YSYsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwotICAgIHZvaWQgZW51bWVyYXRlKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCwgVmVjdG9yPE5QSWRlbnRpZmllckRhdGE+JiYpPiYmKTsKLSAg
ICB2b2lkIGNvbnN0cnVjdChjb25zdCBWZWN0b3I8TlBWYXJpYW50RGF0YT4mIGFyZ3VtZW50c0Rh
dGEsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCwgTlBWYXJpYW50RGF0YSYmKT4mJik7Ci0K
LSAgICBOUFJlbW90ZU9iamVjdE1hcCogbV9ucFJlbW90ZU9iamVjdE1hcDsKLSAgICBQbHVnaW4q
IG1fcGx1Z2luOwotICAgIHVpbnQ2NF90IG1fbnBPYmplY3RJRDsKLSAgICBOUE9iamVjdCogbV9u
cE9iamVjdDsKLX07Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvUGx1Z2lucy9OUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1BsdWdpbnMvTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIubWVzc2FnZXMuaW4K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZmY4ODRmYjI5ZWVmY2M5MGEyN2E5YTU2
Nzk0OTlmZGRmZDFkOGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OUE9iamVjdE1lc3NhZ2VSZWNlaXZl
ci5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLSMgQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0j
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IK
LSMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQotCi1tZXNzYWdlcyAtPiBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlciBMZWdhY3lSZWNlaXZl
ciBOb3RSZWZDb3VudGVkIHsKLSAgICBEZWFsbG9jYXRlKCkgLT4gKCkgU3luY2hyb25vdXMKLSAg
ICBIYXNNZXRob2QoV2ViS2l0OjpOUElkZW50aWZpZXJEYXRhIG1ldGhvZE5hbWUpIC0+IChib29s
IHJldHVyblZhbHVlKSBTeW5jaHJvbm91cwotICAgIEludm9rZShXZWJLaXQ6Ok5QSWRlbnRpZmll
ckRhdGEgbWV0aG9kTmFtZSwgVmVjdG9yPFdlYktpdDo6TlBWYXJpYW50RGF0YT4gYXJndW1lbnRz
RGF0YSkgLT4gKGJvb2wgcmV0dXJuVmFsdWUsIFdlYktpdDo6TlBWYXJpYW50RGF0YSByZXN1bHRE
YXRhKSBTeW5jaHJvbm91cwotICAgIEludm9rZURlZmF1bHQoVmVjdG9yPFdlYktpdDo6TlBWYXJp
YW50RGF0YT4gYXJndW1lbnRzRGF0YSkgLT4gKGJvb2wgcmV0dXJuVmFsdWUsIFdlYktpdDo6TlBW
YXJpYW50RGF0YSByZXN1bHREYXRhKSBTeW5jaHJvbm91cwotICAgIEhhc1Byb3BlcnR5KFdlYktp
dDo6TlBJZGVudGlmaWVyRGF0YSBwcm9wZXJ0eU5hbWUpIC0+IChib29sIHJldHVyblZhbHVlKSBT
eW5jaHJvbm91cwotICAgIEdldFByb3BlcnR5KFdlYktpdDo6TlBJZGVudGlmaWVyRGF0YSBwcm9w
ZXJ0eU5hbWUpIC0+IChib29sIHJldHVyblZhbHVlLCBXZWJLaXQ6Ok5QVmFyaWFudERhdGEgcmVz
dWx0RGF0YSkgU3luY2hyb25vdXMKLSAgICBTZXRQcm9wZXJ0eShXZWJLaXQ6Ok5QSWRlbnRpZmll
ckRhdGEgcHJvcGVydHlOYW1lLCBXZWJLaXQ6Ok5QVmFyaWFudERhdGEgcHJvcGVydHlWYWx1ZURh
dGEpIC0+IChib29sIHJldHVyblZhbHVlKSBTeW5jaHJvbm91cwotICAgIFJlbW92ZVByb3BlcnR5
KFdlYktpdDo6TlBJZGVudGlmaWVyRGF0YSBwcm9wZXJ0eU5hbWUpIC0+IChib29sIHJldHVyblZh
bHVlKSBTeW5jaHJvbm91cwotICAgIEVudW1lcmF0ZSgpIC0+IChib29sIHJldHVyblZhbHVlLCBW
ZWN0b3I8V2ViS2l0OjpOUElkZW50aWZpZXJEYXRhPiBpZGVudGlmaWVyc0RhdGEpIFN5bmNocm9u
b3VzCi0gICAgQ29uc3RydWN0KFZlY3RvcjxXZWJLaXQ6Ok5QVmFyaWFudERhdGE+IGFyZ3VtZW50
c0RhdGEpIC0+IChib29sIHJldHVyblZhbHVlLCBXZWJLaXQ6Ok5QVmFyaWFudERhdGEgcmVzdWx0
RGF0YSkgU3luY2hyb25vdXMKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9QbHVnaW5zL05QT2JqZWN0UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
UGx1Z2lucy9OUE9iamVjdFByb3h5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
Y2VlYzRkYzNmZWM1MGE3YzFhZDcyNDYyMjI3YjE1ZmI0MjM2ZjU4Mi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVn
aW5zL05QT2JqZWN0UHJveHkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzU3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTlBPYmplY3RQcm94eS5o
IgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJBcmd1bWVu
dENvZGVycy5oIgotI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJOUElkZW50aWZp
ZXJEYXRhLmgiCi0jaW5jbHVkZSAiTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXJNZXNzYWdlcy5oIgot
I2luY2x1ZGUgIk5QUmVtb3RlT2JqZWN0TWFwLmgiCi0jaW5jbHVkZSAiTlBSdW50aW1lVXRpbGl0
aWVzLmgiCi0jaW5jbHVkZSAiTlBWYXJpYW50RGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LU5QT2JqZWN0UHJveHkqIE5QT2JqZWN0UHJveHk6OmNyZWF0ZShOUFJlbW90ZU9iamVjdE1hcCog
bnBSZW1vdGVPYmplY3RNYXAsIFBsdWdpbiogcGx1Z2luLCB1aW50NjRfdCBucE9iamVjdElEKQot
ewotICAgIE5QT2JqZWN0UHJveHkqIG5wT2JqZWN0UHJveHkgPSB0b05QT2JqZWN0UHJveHkoY3Jl
YXRlTlBPYmplY3QoMCwgbnBDbGFzcygpKSk7Ci0gICAgbnBPYmplY3RQcm94eS0+aW5pdGlhbGl6
ZShucFJlbW90ZU9iamVjdE1hcCwgcGx1Z2luLCBucE9iamVjdElEKTsKLQotICAgIHJldHVybiBu
cE9iamVjdFByb3h5OwotfQotCi1OUE9iamVjdFByb3h5OjpOUE9iamVjdFByb3h5KCkKLSAgICA6
IG1fbnBSZW1vdGVPYmplY3RNYXAoMCkKLSAgICAsIG1fcGx1Z2luKDApCi0gICAgLCBtX25wT2Jq
ZWN0SUQoMCkKLXsKLX0KLQotTlBPYmplY3RQcm94eTo6fk5QT2JqZWN0UHJveHkoKQotewotICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIW1fbnBSZW1vdGVPYmplY3RN
YXApCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbnBSZW1vdGVPYmplY3RNYXAtPm5wT2JqZWN0
UHJveHlEZXN0cm95ZWQodGhpcyk7Ci0gICAgbV9ucFJlbW90ZU9iamVjdE1hcC0+Y29ubmVjdGlv
bigpLT5zZW5kU3luYyhNZXNzYWdlczo6TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6OkRlYWxsb2Nh
dGUoKSwgTWVzc2FnZXM6Ok5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyOjpEZWFsbG9jYXRlOjpSZXBs
eSgpLCBtX25wT2JqZWN0SUQpOwotfQotCi1ib29sIE5QT2JqZWN0UHJveHk6OmlzTlBPYmplY3RQ
cm94eShOUE9iamVjdCogbnBPYmplY3QpCi17Ci0gICAgcmV0dXJuIG5wT2JqZWN0LT5fY2xhc3Mg
PT0gbnBDbGFzcygpOwotfQotCi12b2lkIE5QT2JqZWN0UHJveHk6OmludmFsaWRhdGUoKQotewot
ICAgIEFTU0VSVChtX25wUmVtb3RlT2JqZWN0TWFwKTsKLSAgICBBU1NFUlQobV9wbHVnaW4pOwot
Ci0gICAgbV9ucFJlbW90ZU9iamVjdE1hcCA9IDA7Ci0gICAgbV9wbHVnaW4gPSAwOwotfQotICAg
IAotdm9pZCBOUE9iamVjdFByb3h5Ojppbml0aWFsaXplKE5QUmVtb3RlT2JqZWN0TWFwKiBucFJl
bW90ZU9iamVjdE1hcCwgUGx1Z2luKiBwbHVnaW4sIHVpbnQ2NF90IG5wT2JqZWN0SUQpCi17Ci0g
ICAgQVNTRVJUKCFtX25wUmVtb3RlT2JqZWN0TWFwKTsKLSAgICBBU1NFUlQoIW1fcGx1Z2luKTsK
LSAgICBBU1NFUlQoIW1fbnBPYmplY3RJRCk7Ci0KLSAgICBBU1NFUlQobnBSZW1vdGVPYmplY3RN
YXApOwotICAgIEFTU0VSVChwbHVnaW4pOwotICAgIEFTU0VSVChucE9iamVjdElEKTsKLQotICAg
IG1fbnBSZW1vdGVPYmplY3RNYXAgPSBucFJlbW90ZU9iamVjdE1hcDsKLSAgICBtX3BsdWdpbiA9
IHBsdWdpbjsKLSAgICBtX25wT2JqZWN0SUQgPSBucE9iamVjdElEOwotfQotCi1ib29sIE5QT2Jq
ZWN0UHJveHk6Omhhc01ldGhvZChOUElkZW50aWZpZXIgbWV0aG9kTmFtZSkKLXsKLSAgICBpZiAo
IW1fbnBSZW1vdGVPYmplY3RNYXApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBO
UElkZW50aWZpZXJEYXRhIG1ldGhvZE5hbWVEYXRhID0gTlBJZGVudGlmaWVyRGF0YTo6ZnJvbU5Q
SWRlbnRpZmllcihtZXRob2ROYW1lKTsKLSAgICAKLSAgICBib29sIHJldHVyblZhbHVlID0gZmFs
c2U7Ci0gICAgCi0gICAgaWYgKCFtX25wUmVtb3RlT2JqZWN0TWFwLT5jb25uZWN0aW9uKCktPnNl
bmRTeW5jKE1lc3NhZ2VzOjpOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6SGFzTWV0aG9kKG1ldGhv
ZE5hbWVEYXRhKSwgTWVzc2FnZXM6Ok5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyOjpIYXNNZXRob2Q6
OlJlcGx5KHJldHVyblZhbHVlKSwgbV9ucE9iamVjdElEKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAotICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLX0KLQotYm9vbCBOUE9iamVjdFByb3h5
OjppbnZva2UoTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUsIGNvbnN0IE5QVmFyaWFudCogYXJndW1l
bnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBp
ZiAoIW1fbnBSZW1vdGVPYmplY3RNYXApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIE5Q
SWRlbnRpZmllckRhdGEgbWV0aG9kTmFtZURhdGEgPSBOUElkZW50aWZpZXJEYXRhOjpmcm9tTlBJ
ZGVudGlmaWVyKG1ldGhvZE5hbWUpOwotICAgIFZlY3RvcjxOUFZhcmlhbnREYXRhPiBhcmd1bWVu
dHNEYXRhOwotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kp
Ci0gICAgICAgIGFyZ3VtZW50c0RhdGEuYXBwZW5kKG1fbnBSZW1vdGVPYmplY3RNYXAtPm5wVmFy
aWFudFRvTlBWYXJpYW50RGF0YShhcmd1bWVudHNbaV0sIG1fcGx1Z2luKSk7Ci0KLSAgICBib29s
IHJldHVyblZhbHVlID0gZmFsc2U7Ci0gICAgTlBWYXJpYW50RGF0YSByZXN1bHREYXRhOwotICAg
IAotICAgIGlmICghbV9ucFJlbW90ZU9iamVjdE1hcC0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhN
ZXNzYWdlczo6TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6Okludm9rZShtZXRob2ROYW1lRGF0YSwg
YXJndW1lbnRzRGF0YSksIE1lc3NhZ2VzOjpOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6SW52b2tl
OjpSZXBseShyZXR1cm5WYWx1ZSwgcmVzdWx0RGF0YSksIG1fbnBPYmplY3RJRCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAoIXJldHVyblZhbHVlKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCi0gICAgKnJlc3VsdCA9IG1fbnBSZW1vdGVPYmplY3RNYXAtPm5wVmFy
aWFudERhdGFUb05QVmFyaWFudChyZXN1bHREYXRhLCBtX3BsdWdpbik7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgTlBPYmplY3RQcm94eTo6aW52b2tlRGVmYXVsdChjb25zdCBOUFZhcmlh
bnQqIGFyZ3VtZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50KiByZXN1bHQp
Ci17Ci0gICAgaWYgKCFtX25wUmVtb3RlT2JqZWN0TWFwKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBWZWN0b3I8TlBWYXJpYW50RGF0YT4gYXJndW1lbnRzRGF0YTsKLSAgICBmb3IgKHVp
bnQzMl90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKQotICAgICAgICBhcmd1bWVudHNE
YXRhLmFwcGVuZChtX25wUmVtb3RlT2JqZWN0TWFwLT5ucFZhcmlhbnRUb05QVmFyaWFudERhdGEo
YXJndW1lbnRzW2ldLCBtX3BsdWdpbikpOwotCi0gICAgYm9vbCByZXR1cm5WYWx1ZSA9IGZhbHNl
OwotICAgIE5QVmFyaWFudERhdGEgcmVzdWx0RGF0YTsKLSAgICAKLSAgICBpZiAoIW1fbnBSZW1v
dGVPYmplY3RNYXAtPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5QT2JqZWN0TWVz
c2FnZVJlY2VpdmVyOjpJbnZva2VEZWZhdWx0KGFyZ3VtZW50c0RhdGEpLCBNZXNzYWdlczo6TlBP
YmplY3RNZXNzYWdlUmVjZWl2ZXI6Okludm9rZURlZmF1bHQ6OlJlcGx5KHJldHVyblZhbHVlLCBy
ZXN1bHREYXRhKSwgbV9ucE9iamVjdElEKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIGlmICghcmV0dXJuVmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAq
cmVzdWx0ID0gbV9ucFJlbW90ZU9iamVjdE1hcC0+bnBWYXJpYW50RGF0YVRvTlBWYXJpYW50KHJl
c3VsdERhdGEsIG1fcGx1Z2luKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBOUE9iamVj
dFByb3h5OjpoYXNQcm9wZXJ0eShOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lKQotewotICAgIGlm
ICghbV9ucFJlbW90ZU9iamVjdE1hcCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAg
IE5QSWRlbnRpZmllckRhdGEgcHJvcGVydHlOYW1lRGF0YSA9IE5QSWRlbnRpZmllckRhdGE6OmZy
b21OUElkZW50aWZpZXIocHJvcGVydHlOYW1lKTsKLQotICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBm
YWxzZTsKLSAgICAKLSAgICBpZiAoIW1fbnBSZW1vdGVPYmplY3RNYXAtPmNvbm5lY3Rpb24oKS0+
c2VuZFN5bmMoTWVzc2FnZXM6Ok5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyOjpIYXNQcm9wZXJ0eShw
cm9wZXJ0eU5hbWVEYXRhKSwgTWVzc2FnZXM6Ok5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyOjpIYXNQ
cm9wZXJ0eTo6UmVwbHkocmV0dXJuVmFsdWUpLCBtX25wT2JqZWN0SUQpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci19Ci0KLWJvb2wgTlBPYmplY3RQ
cm94eTo6Z2V0UHJvcGVydHkoTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgTlBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgaWYgKCFtX25wUmVtb3RlT2JqZWN0TWFwKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBOUElkZW50aWZpZXJEYXRhIHByb3BlcnR5TmFtZURhdGEgPSBOUElkZW50
aWZpZXJEYXRhOjpmcm9tTlBJZGVudGlmaWVyKHByb3BlcnR5TmFtZSk7Ci0KLSAgICBib29sIHJl
dHVyblZhbHVlID0gZmFsc2U7Ci0gICAgTlBWYXJpYW50RGF0YSByZXN1bHREYXRhOwotICAgIAot
ICAgIGlmICghbV9ucFJlbW90ZU9iamVjdE1hcC0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNz
YWdlczo6TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6OkdldFByb3BlcnR5KHByb3BlcnR5TmFtZURh
dGEpLCBNZXNzYWdlczo6TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6OkdldFByb3BlcnR5OjpSZXBs
eShyZXR1cm5WYWx1ZSwgcmVzdWx0RGF0YSksIG1fbnBPYmplY3RJRCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmICghcmV0dXJuVmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICpyZXN1bHQgPSBtX25wUmVtb3RlT2JqZWN0TWFwLT5ucFZhcmlhbnREYXRhVG9OUFZh
cmlhbnQocmVzdWx0RGF0YSwgbV9wbHVnaW4pOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IE5QT2JqZWN0UHJveHk6OnNldFByb3BlcnR5KE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNv
bnN0IE5QVmFyaWFudCogdmFsdWUpCi17Ci0gICAgaWYgKCFtX25wUmVtb3RlT2JqZWN0TWFwKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgTlBJZGVudGlmaWVyRGF0YSBwcm9wZXJ0
eU5hbWVEYXRhID0gTlBJZGVudGlmaWVyRGF0YTo6ZnJvbU5QSWRlbnRpZmllcihwcm9wZXJ0eU5h
bWUpOwotICAgIE5QVmFyaWFudERhdGEgcHJvcGVydHlWYWx1ZURhdGEgPSBtX25wUmVtb3RlT2Jq
ZWN0TWFwLT5ucFZhcmlhbnRUb05QVmFyaWFudERhdGEoKnZhbHVlLCBtX3BsdWdpbik7Ci0KLSAg
ICBib29sIHJldHVyblZhbHVlID0gZmFsc2U7Ci0KLSAgICBpZiAoIW1fbnBSZW1vdGVPYmplY3RN
YXAtPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5QT2JqZWN0TWVzc2FnZVJlY2Vp
dmVyOjpTZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWVEYXRhLCBwcm9wZXJ0eVZhbHVlRGF0YSksIE1l
c3NhZ2VzOjpOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcjo6U2V0UHJvcGVydHk6OlJlcGx5KHJldHVy
blZhbHVlKSwgbV9ucE9iamVjdElEKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0
dXJuIHJldHVyblZhbHVlOwotfQotCi1ib29sIE5QT2JqZWN0UHJveHk6OnJlbW92ZVByb3BlcnR5
KE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaWYgKCFtX25wUmVtb3RlT2JqZWN0
TWFwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgTlBJZGVudGlmaWVyRGF0YSBw
cm9wZXJ0eU5hbWVEYXRhID0gTlBJZGVudGlmaWVyRGF0YTo6ZnJvbU5QSWRlbnRpZmllcihwcm9w
ZXJ0eU5hbWUpOwotCi0gICAgYm9vbCByZXR1cm5WYWx1ZSA9IGZhbHNlOwotICAgIAotICAgIGlm
ICghbV9ucFJlbW90ZU9iamVjdE1hcC0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6
TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6OlJlbW92ZVByb3BlcnR5KHByb3BlcnR5TmFtZURhdGEp
LCBNZXNzYWdlczo6TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXI6OlJlbW92ZVByb3BlcnR5OjpSZXBs
eShyZXR1cm5WYWx1ZSksIG1fbnBPYmplY3RJRCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLX0KLQotYm9vbCBOUE9iamVjdFByb3h5OjplbnVtZXJh
dGUoTlBJZGVudGlmaWVyKiogaWRlbnRpZmllcnMsIHVpbnQzMl90KiBpZGVudGlmaWVyQ291bnQp
Ci17Ci0gICAgaWYgKCFtX25wUmVtb3RlT2JqZWN0TWFwKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBib29sIHJldHVyblZhbHVlOwotICAgIFZlY3RvcjxOUElkZW50aWZpZXJEYXRhPiBp
ZGVudGlmaWVyc0RhdGE7Ci0KLSAgICBpZiAoIW1fbnBSZW1vdGVPYmplY3RNYXAtPmNvbm5lY3Rp
b24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyOjpFbnVtZXJh
dGUoKSwgTWVzc2FnZXM6Ok5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyOjpFbnVtZXJhdGU6OlJlcGx5
KHJldHVyblZhbHVlLCBpZGVudGlmaWVyc0RhdGEpLCBtX25wT2JqZWN0SUQpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXJldHVyblZhbHVlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBOUElkZW50aWZpZXIqIG5hbWVJZGVudGlmaWVycyA9IG5wbk1lbU5ld0FycmF5
PE5QSWRlbnRpZmllcj4oaWRlbnRpZmllcnNEYXRhLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBpZGVudGlmaWVyc0RhdGEuc2l6ZSgpOyArK2kpCi0gICAgICAgIG5h
bWVJZGVudGlmaWVyc1tpXSA9IGlkZW50aWZpZXJzRGF0YVtpXS5jcmVhdGVOUElkZW50aWZpZXIo
KTsKLSAgICAKLSAgICAqaWRlbnRpZmllcnMgPSBuYW1lSWRlbnRpZmllcnM7Ci0gICAgKmlkZW50
aWZpZXJDb3VudCA9IGlkZW50aWZpZXJzRGF0YS5zaXplKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgTlBPYmplY3RQcm94eTo6Y29uc3RydWN0KGNvbnN0IE5QVmFyaWFudCogYXJndW1l
bnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBp
ZiAoIW1fbnBSZW1vdGVPYmplY3RNYXApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZl
Y3RvcjxOUFZhcmlhbnREYXRhPiBhcmd1bWVudHNEYXRhOwotICAgIGZvciAodWludDMyX3QgaSA9
IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpCi0gICAgICAgIGFyZ3VtZW50c0RhdGEuYXBwZW5k
KG1fbnBSZW1vdGVPYmplY3RNYXAtPm5wVmFyaWFudFRvTlBWYXJpYW50RGF0YShhcmd1bWVudHNb
aV0sIG1fcGx1Z2luKSk7Ci0KLSAgICBib29sIHJldHVyblZhbHVlID0gZmFsc2U7Ci0gICAgTlBW
YXJpYW50RGF0YSByZXN1bHREYXRhOwotICAgIAotICAgIGlmICghbV9ucFJlbW90ZU9iamVjdE1h
cC0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TlBPYmplY3RNZXNzYWdlUmVjZWl2
ZXI6OkNvbnN0cnVjdChhcmd1bWVudHNEYXRhKSwgTWVzc2FnZXM6Ok5QT2JqZWN0TWVzc2FnZVJl
Y2VpdmVyOjpDb25zdHJ1Y3Q6OlJlcGx5KHJldHVyblZhbHVlLCByZXN1bHREYXRhKSwgbV9ucE9i
amVjdElEKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmICghcmV0dXJuVmFs
dWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAqcmVzdWx0ID0gbV9ucFJlbW90
ZU9iamVjdE1hcC0+bnBWYXJpYW50RGF0YVRvTlBWYXJpYW50KHJlc3VsdERhdGEsIG1fcGx1Z2lu
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotTlBDbGFzcyogTlBPYmplY3RQcm94eTo6bnBDbGFz
cygpCi17Ci0gICAgc3RhdGljIE5QQ2xhc3MgbnBDbGFzcyA9IHsKLSAgICAgICAgTlBfQ0xBU1Nf
U1RSVUNUX1ZFUlNJT04sCi0gICAgICAgIE5QX0FsbG9jYXRlLAotICAgICAgICBOUF9EZWFsbG9j
YXRlLAotICAgICAgICAwLAotICAgICAgICBOUF9IYXNNZXRob2QsCi0gICAgICAgIE5QX0ludm9r
ZSwKLSAgICAgICAgTlBfSW52b2tlRGVmYXVsdCwKLSAgICAgICAgTlBfSGFzUHJvcGVydHksCi0g
ICAgICAgIE5QX0dldFByb3BlcnR5LAotICAgICAgICBOUF9TZXRQcm9wZXJ0eSwKLSAgICAgICAg
TlBfUmVtb3ZlUHJvcGVydHksCi0gICAgICAgIE5QX0VudW1lcmF0ZSwKLSAgICAgICAgTlBfQ29u
c3RydWN0Ci0gICAgfTsKLQotICAgIHJldHVybiAmbnBDbGFzczsKLX0KLQotTlBPYmplY3QqIE5Q
T2JqZWN0UHJveHk6Ok5QX0FsbG9jYXRlKE5QUCBucHAsIE5QQ2xhc3MqKQotewotICAgIEFTU0VS
VF9VTlVTRUQobnBwLCAhbnBwKTsKLQotICAgIHJldHVybiBuZXcgTlBPYmplY3RQcm94eTsKLX0K
LQotdm9pZCBOUE9iamVjdFByb3h5OjpOUF9EZWFsbG9jYXRlKE5QT2JqZWN0KiBucE9iamVjdCkK
LXsKLSAgICAvLyBodHRwOi8vd2Via2l0Lm9yZy9iLzExODUzNSAtIFRoZSBKYXZhIE5ldHNjYXBl
IFBsdWctaW4gaGFzIGEgYmFja2dyb3VuZCB0aHJlYWQgZG8gc29tZSBvZiB0aGVpciBOUFBfRGVz
dHJveSB3b3JrLgotICAgIC8vIFRoYXQgYmFja2dyb3VuZCB0aHJlYWQgY2FuIGNhbGwgTlBfRGVh
bGxvY2F0ZSwgYW5kIHRoaXMgbGVhZHMgdG8gYSBXZWJQcm9jZXNzIDwtPiBQbHVnaW5Qcm9jZXNz
IGRlYWRsb2NrLgotICAgIC8vIFNpbmNlIE5QQVBJIGJlaGF2aW9yIG9uIGEgYmFja2dyb3VuZCB0
aHJlYWQgaXMgdW5kZWZpbmVkLCBpdCBpcyBva2F5IHRvIGxpbWl0IHRoaXMgd29ya2Fyb3VuZCB0
byB0aGUgb25lIEFQSQotICAgIC8vIHRoYXQgaXMga25vd24gdG8gYmUgbWlzdXNlZCBkdXJpbmcg
cGx1Z2luIHRlYXJkb3duLCBhbmQgdG8gbm90IGJlIGNvbmNlcm5lZCBhYm91dCBjaGFuZ2UgaW4g
YmVoYXZpb3IgaWYgdGhpcwotICAgIC8vIG9jY3VyZWQgYXQgYW55IG90aGVyIHRpbWUuCi0gICAg
ZW5zdXJlT25NYWluUnVuTG9vcChbbnBPYmplY3RdIHsKLSAgICAgICAgZGVsZXRlIHRvTlBPYmpl
Y3RQcm94eShucE9iamVjdCk7Ci0gICAgfSk7Ci19Ci0KLWJvb2wgTlBPYmplY3RQcm94eTo6TlBf
SGFzTWV0aG9kKE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUpCi17
Ci0gICAgcmV0dXJuIHRvTlBPYmplY3RQcm94eShucE9iamVjdCktPmhhc01ldGhvZChtZXRob2RO
YW1lKTsKLX0KLQotYm9vbCBOUE9iamVjdFByb3h5OjpOUF9JbnZva2UoTlBPYmplY3QqIG5wT2Jq
ZWN0LCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSwgY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMs
IHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KQotewotICAgIHJldHVy
biB0b05QT2JqZWN0UHJveHkobnBPYmplY3QpLT5pbnZva2UobWV0aG9kTmFtZSwgYXJndW1lbnRz
LCBhcmd1bWVudENvdW50LCByZXN1bHQpOwotfQotCi1ib29sIE5QT2JqZWN0UHJveHk6Ok5QX0lu
dm9rZURlZmF1bHQoTlBPYmplY3QqIG5wT2JqZWN0LCBjb25zdCBOUFZhcmlhbnQqIGFyZ3VtZW50
cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmV0
dXJuIHRvTlBPYmplY3RQcm94eShucE9iamVjdCktPmludm9rZURlZmF1bHQoYXJndW1lbnRzLCBh
cmd1bWVudENvdW50LCByZXN1bHQpOwotfQotCi1ib29sIE5QT2JqZWN0UHJveHk6Ok5QX0hhc1By
b3BlcnR5KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKLXsK
LSAgICByZXR1cm4gdG9OUE9iamVjdFByb3h5KG5wT2JqZWN0KS0+aGFzUHJvcGVydHkocHJvcGVy
dHlOYW1lKTsKLX0KLQotYm9vbCBOUE9iamVjdFByb3h5OjpOUF9HZXRQcm9wZXJ0eShOUE9iamVj
dCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIE5QVmFyaWFudCogcmVzdWx0
KQotewotICAgIHJldHVybiB0b05QT2JqZWN0UHJveHkobnBPYmplY3QpLT5nZXRQcm9wZXJ0eShw
cm9wZXJ0eU5hbWUsIHJlc3VsdCk7Ci19Ci0KLWJvb2wgTlBPYmplY3RQcm94eTo6TlBfU2V0UHJv
cGVydHkoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25z
dCBOUFZhcmlhbnQqIHZhbHVlKQotewotICAgIHJldHVybiB0b05QT2JqZWN0UHJveHkobnBPYmpl
Y3QpLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKLX0KLQotYm9vbCBOUE9iamVj
dFByb3h5OjpOUF9SZW1vdmVQcm9wZXJ0eShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIHRvTlBPYmplY3RQcm94eShucE9iamVjdCkt
PnJlbW92ZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7Ci19Ci0KLWJvb2wgTlBPYmplY3RQcm94eTo6
TlBfRW51bWVyYXRlKE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyKiogaWRlbnRpZmll
cnMsIHVpbnQzMl90KiBpZGVudGlmaWVyQ291bnQpCi17Ci0gICAgcmV0dXJuIHRvTlBPYmplY3RQ
cm94eShucE9iamVjdCktPmVudW1lcmF0ZShpZGVudGlmaWVycywgaWRlbnRpZmllckNvdW50KTsK
LX0KLQotYm9vbCBOUE9iamVjdFByb3h5OjpOUF9Db25zdHJ1Y3QoTlBPYmplY3QqIG5wT2JqZWN0
LCBjb25zdCBOUFZhcmlhbnQqIGFyZ3VtZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBW
YXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIHRvTlBPYmplY3RQcm94eShucE9iamVjdCkt
PmNvbnN0cnVjdChhcmd1bWVudHMsIGFyZ3VtZW50Q291bnQsIHJlc3VsdCk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL05QT2JqZWN0UHJveHku
aCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTlBPYmplY3RQcm94eS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWZhYjFlMzc1ZjQ1NjE2NmMyNWQ5Y2RhNzA3YTg4OGNh
NmY3ODlkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTlBPYmplY3RQcm94eS5oCisrKyAvZGV2L251bGwK
QEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgPFdlYkNvcmUvbnBydW50aW1l
X2ludGVybmFsLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1jbGFzcyBOUFJlbW90ZU9iamVjdE1hcDsKLWNsYXNzIFBsdWdpbjsKLQotY2xh
c3MgTlBPYmplY3RQcm94eSA6IHB1YmxpYyBOUE9iamVjdCB7Ci0gICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoTlBPYmplY3RQcm94eSk7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgTlBPYmplY3RQcm94
eSogY3JlYXRlKE5QUmVtb3RlT2JqZWN0TWFwKiwgUGx1Z2luKiwgdWludDY0X3QgbnBPYmplY3RJ
RCk7Ci0KLSAgICBzdGF0aWMgYm9vbCBpc05QT2JqZWN0UHJveHkoTlBPYmplY3QqKTsKLSAgICAK
LSAgICBzdGF0aWMgTlBPYmplY3RQcm94eSogdG9OUE9iamVjdFByb3h5KE5QT2JqZWN0KiBucE9i
amVjdCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oaXNOUE9iamVjdFByb3h5KG5wT2JqZWN0KSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxOUE9iamVjdFByb3h5Kj4obnBPYmplY3QpOwotICAgIH0KLQotICAgIFBsdWdpbiogcGx1
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW47IH0KLSAgICB1aW50NjRfdCBucE9iamVjdElE
KCkgY29uc3QgeyByZXR1cm4gbV9ucE9iamVjdElEOyB9Ci0KLSAgICB2b2lkIGludmFsaWRhdGUo
KTsKLQotcHJpdmF0ZToKLSAgICBOUE9iamVjdFByb3h5KCk7Ci0gICAgfk5QT2JqZWN0UHJveHko
KTsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZShOUFJlbW90ZU9iamVjdE1hcCosIFBsdWdpbiosIHVp
bnQ2NF90IG5wT2JqZWN0SUQpOwotCi0gICAgYm9vbCBoYXNNZXRob2QoTlBJZGVudGlmaWVyIG1l
dGhvZE5hbWUpOwotICAgIGJvb2wgaW52b2tlKE5QSWRlbnRpZmllciBtZXRob2ROYW1lLCBjb25z
dCBOUFZhcmlhbnQqIGFyZ3VtZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50
KiByZXN1bHQpOwotICAgIGJvb2wgaW52b2tlRGVmYXVsdChjb25zdCBOUFZhcmlhbnQqIGFyZ3Vt
ZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpOwotICAgIGJv
b2wgaGFzUHJvcGVydHkoTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSk7Ci0gICAgYm9vbCBnZXRQ
cm9wZXJ0eShOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBOUFZhcmlhbnQqIHJlc3VsdCk7Ci0g
ICAgYm9vbCBzZXRQcm9wZXJ0eShOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBOUFZh
cmlhbnQqIHZhbHVlKTsKLSAgICBib29sIHJlbW92ZVByb3BlcnR5KE5QSWRlbnRpZmllciBwcm9w
ZXJ0eU5hbWUpOwotICAgIGJvb2wgZW51bWVyYXRlKE5QSWRlbnRpZmllcioqIGlkZW50aWZpZXJz
LCB1aW50MzJfdCogaWRlbnRpZmllckNvdW50KTsKLSAgICBib29sIGNvbnN0cnVjdChjb25zdCBO
UFZhcmlhbnQqIGFyZ3VtZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50KiBy
ZXN1bHQpOwotCi0gICAgc3RhdGljIE5QQ2xhc3MqIG5wQ2xhc3MoKTsKLSAgICBzdGF0aWMgTlBP
YmplY3QqIE5QX0FsbG9jYXRlKE5QUCwgTlBDbGFzcyopOwotICAgIHN0YXRpYyB2b2lkIE5QX0Rl
YWxsb2NhdGUoTlBPYmplY3QqKTsKLSAgICBzdGF0aWMgYm9vbCBOUF9IYXNNZXRob2QoTlBPYmpl
Y3QqLCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSk7Ci0gICAgc3RhdGljIGJvb2wgTlBfSW52b2tl
KE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUsIGNvbnN0IE5QVmFyaWFudCogYXJn
dW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCk7Ci0gICAg
c3RhdGljIGJvb2wgTlBfSW52b2tlRGVmYXVsdChOUE9iamVjdCosIGNvbnN0IE5QVmFyaWFudCog
YXJndW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCk7Ci0g
ICAgc3RhdGljIGJvb2wgTlBfSGFzUHJvcGVydHkoTlBPYmplY3QqLCBOUElkZW50aWZpZXIgcHJv
cGVydHlOYW1lKTsKLSAgICBzdGF0aWMgYm9vbCBOUF9HZXRQcm9wZXJ0eShOUE9iamVjdCosIE5Q
SWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIE5QVmFyaWFudCogcmVzdWx0KTsKLSAgICBzdGF0aWMg
Ym9vbCBOUF9TZXRQcm9wZXJ0eShOUE9iamVjdCosIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUs
IGNvbnN0IE5QVmFyaWFudCogdmFsdWUpOwotICAgIHN0YXRpYyBib29sIE5QX1JlbW92ZVByb3Bl
cnR5KE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSk7Ci0gICAgc3RhdGljIGJv
b2wgTlBfRW51bWVyYXRlKE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyKiogaWRlbnRpZmllcnMsIHVp
bnQzMl90KiBpZGVudGlmaWVyQ291bnQpOwotICAgIHN0YXRpYyBib29sIE5QX0NvbnN0cnVjdChO
UE9iamVjdCosIGNvbnN0IE5QVmFyaWFudCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENv
dW50LCBOUFZhcmlhbnQqIHJlc3VsdCk7Ci0KLSAgICBOUFJlbW90ZU9iamVjdE1hcCogbV9ucFJl
bW90ZU9iamVjdE1hcDsKLSAgICBQbHVnaW4qIG1fcGx1Z2luOwotICAgIHVpbnQ2NF90IG1fbnBP
YmplY3RJRDsKLX07Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Q
bHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMjcxZTE3ZjU4YWM2MWEzZGM0YThmNTg2ZDdiZDQyYmU0ODg2ZmNhZi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Q
bHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzMSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5QUmVtb3Rl
T2JqZWN0TWFwLmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1
ZGUgIk5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSAiTlBPYmplY3RQcm94eS5o
IgotI2luY2x1ZGUgIk5QUnVudGltZVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIk5QVmFyaWFudERh
dGEuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZU5Q
T2JqZWN0SUQoKQotewotICAgIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZU5QT2JqZWN0SUQ7Ci0g
ICAgcmV0dXJuICsrZ2VuZXJhdGVOUE9iamVjdElEOwotfQotCi1SZWY8TlBSZW1vdGVPYmplY3RN
YXA+IE5QUmVtb3RlT2JqZWN0TWFwOjpjcmVhdGUoSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9u
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5QUmVtb3RlT2JqZWN0TWFwKGNvbm5lY3Rp
b24pKTsKLX0KLQotTlBSZW1vdGVPYmplY3RNYXA6Ok5QUmVtb3RlT2JqZWN0TWFwKElQQzo6Q29u
bmVjdGlvbiogY29ubmVjdGlvbikKLSAgICA6IG1fY29ubmVjdGlvbihjb25uZWN0aW9uKQotewot
fQotCi1OUFJlbW90ZU9iamVjdE1hcDo6fk5QUmVtb3RlT2JqZWN0TWFwKCkKLXsKLSAgICBBU1NF
UlQobV9ucE9iamVjdFByb3hpZXMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQobV9yZWdpc3RlcmVk
TlBPYmplY3RzLmlzRW1wdHkoKSk7Ci19Ci0KLU5QT2JqZWN0KiBOUFJlbW90ZU9iamVjdE1hcDo6
Y3JlYXRlTlBPYmplY3RQcm94eSh1aW50NjRfdCByZW1vdGVPYmplY3RJRCwgUGx1Z2luKiBwbHVn
aW4pCi17Ci0gICAgTlBPYmplY3RQcm94eSogbnBPYmplY3RQcm94eSA9IE5QT2JqZWN0UHJveHk6
OmNyZWF0ZSh0aGlzLCBwbHVnaW4sIHJlbW90ZU9iamVjdElEKTsKLQotICAgIG1fbnBPYmplY3RQ
cm94aWVzLmFkZChucE9iamVjdFByb3h5KTsKLQotICAgIHJldHVybiBucE9iamVjdFByb3h5Owot
fQotCi12b2lkIE5QUmVtb3RlT2JqZWN0TWFwOjpucE9iamVjdFByb3h5RGVzdHJveWVkKE5QT2Jq
ZWN0KiBucE9iamVjdCkKLXsKLSAgICBOUE9iamVjdFByb3h5KiBucE9iamVjdFByb3h5ID0gTlBP
YmplY3RQcm94eTo6dG9OUE9iamVjdFByb3h5KG5wT2JqZWN0KTsKLSAgICBBU1NFUlQobV9ucE9i
amVjdFByb3hpZXMuY29udGFpbnMobnBPYmplY3RQcm94eSkpOwotCi0gICAgbV9ucE9iamVjdFBy
b3hpZXMucmVtb3ZlKG5wT2JqZWN0UHJveHkpOwotfQotCi11aW50NjRfdCBOUFJlbW90ZU9iamVj
dE1hcDo6cmVnaXN0ZXJOUE9iamVjdChOUE9iamVjdCogbnBPYmplY3QsIFBsdWdpbiogcGx1Z2lu
KQotewotICAgIHVpbnQ2NF90IG5wT2JqZWN0SUQgPSBnZW5lcmF0ZU5QT2JqZWN0SUQoKTsKLSAg
ICBtX3JlZ2lzdGVyZWROUE9iamVjdHMuc2V0KG5wT2JqZWN0SUQsIG1ha2VVbmlxdWU8TlBPYmpl
Y3RNZXNzYWdlUmVjZWl2ZXI+KHRoaXMsIHBsdWdpbiwgbnBPYmplY3RJRCwgbnBPYmplY3QpLnJl
bGVhc2UoKSk7Ci0KLSAgICByZXR1cm4gbnBPYmplY3RJRDsKLX0KLQotdm9pZCBOUFJlbW90ZU9i
amVjdE1hcDo6dW5yZWdpc3Rlck5QT2JqZWN0KHVpbnQ2NF90IG5wT2JqZWN0SUQpCi17Ci0gICAg
bV9yZWdpc3RlcmVkTlBPYmplY3RzLnJlbW92ZShucE9iamVjdElEKTsKLX0KLQotc3RhdGljIHVp
bnQ2NF90IHJlbW90ZU5QT2JqZWN0SUQoUGx1Z2luKiBwbHVnaW4sIE5QT2JqZWN0KiBucE9iamVj
dCkKLXsKLSAgICBpZiAoIU5QT2JqZWN0UHJveHk6OmlzTlBPYmplY3RQcm94eShucE9iamVjdCkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgTlBPYmplY3RQcm94eSogbnBPYmplY3RQcm94eSA9
IE5QT2JqZWN0UHJveHk6OnRvTlBPYmplY3RQcm94eShucE9iamVjdCk7Ci0gICAgaWYgKG5wT2Jq
ZWN0UHJveHktPnBsdWdpbigpICE9IHBsdWdpbikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBy
ZXR1cm4gbnBPYmplY3RQcm94eS0+bnBPYmplY3RJRCgpOwotfQotCi1OUFZhcmlhbnREYXRhIE5Q
UmVtb3RlT2JqZWN0TWFwOjpucFZhcmlhbnRUb05QVmFyaWFudERhdGEoY29uc3QgTlBWYXJpYW50
JiB2YXJpYW50LCBQbHVnaW4qIHBsdWdpbikKLXsKLSAgICBzd2l0Y2ggKHZhcmlhbnQudHlwZSkg
ewotICAgIGNhc2UgTlBWYXJpYW50VHlwZV9Wb2lkOgotICAgICAgICByZXR1cm4gTlBWYXJpYW50
RGF0YTo6bWFrZVZvaWQoKTsKLQotICAgIGNhc2UgTlBWYXJpYW50VHlwZV9OdWxsOgotICAgICAg
ICByZXR1cm4gTlBWYXJpYW50RGF0YTo6bWFrZU51bGwoKTsKLQotICAgIGNhc2UgTlBWYXJpYW50
VHlwZV9Cb29sOgotICAgICAgICByZXR1cm4gTlBWYXJpYW50RGF0YTo6bWFrZUJvb2wodmFyaWFu
dC52YWx1ZS5ib29sVmFsdWUpOwotCi0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX0ludDMyOgotICAg
ICAgICByZXR1cm4gTlBWYXJpYW50RGF0YTo6bWFrZUludDMyKHZhcmlhbnQudmFsdWUuaW50VmFs
dWUpOwotCi0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX0RvdWJsZToKLSAgICAgICAgcmV0dXJuIE5Q
VmFyaWFudERhdGE6Om1ha2VEb3VibGUodmFyaWFudC52YWx1ZS5kb3VibGVWYWx1ZSk7Ci0KLSAg
ICBjYXNlIE5QVmFyaWFudFR5cGVfU3RyaW5nOgotICAgICAgICByZXR1cm4gTlBWYXJpYW50RGF0
YTo6bWFrZVN0cmluZyh2YXJpYW50LnZhbHVlLnN0cmluZ1ZhbHVlLlVURjhDaGFyYWN0ZXJzLCB2
YXJpYW50LnZhbHVlLnN0cmluZ1ZhbHVlLlVURjhMZW5ndGgpOwotCi0gICAgY2FzZSBOUFZhcmlh
bnRUeXBlX09iamVjdDogewotICAgICAgICBOUE9iamVjdCogbnBPYmplY3QgPSB2YXJpYW50LnZh
bHVlLm9iamVjdFZhbHVlOwotCi0gICAgICAgIGlmICh1aW50NjRfdCBucE9iamVjdElEID0gcmVt
b3RlTlBPYmplY3RJRChwbHVnaW4sIG5wT2JqZWN0KSkgewotICAgICAgICAgICAgLy8gRklYTUU6
IFVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcywgdGhpcyBtaWdodCBsZWFrIHRoZSBOUE9iamVjdFBy
b3h5IG9iamVjdC4gCi0gICAgICAgICAgICAvLyBGaWd1cmUgb3V0IGhvdyB0byBhdm9pZCB0aGF0
LgotICAgICAgICAgICAgcmV0YWluTlBPYmplY3QobnBPYmplY3QpOwotICAgICAgICAgICAgcmV0
dXJuIE5QVmFyaWFudERhdGE6Om1ha2VSZW1vdGVOUE9iamVjdElEKG5wT2JqZWN0SUQpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdWludDY0X3QgbnBPYmplY3RJRCA9IHJlZ2lzdGVyTlBPYmplY3Qo
bnBPYmplY3QsIHBsdWdpbik7Ci0gICAgICAgIHJldHVybiBOUFZhcmlhbnREYXRhOjptYWtlTG9j
YWxOUE9iamVjdElEKG5wT2JqZWN0SUQpOwotICAgIH0KLQotICAgIH0KLQotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBOUFZhcmlhbnREYXRhOjptYWtlVm9pZCgpOwotfQot
Ci1OUFZhcmlhbnQgTlBSZW1vdGVPYmplY3RNYXA6Om5wVmFyaWFudERhdGFUb05QVmFyaWFudChj
b25zdCBOUFZhcmlhbnREYXRhJiBucFZhcmlhbnREYXRhLCBQbHVnaW4qIHBsdWdpbikKLXsKLSAg
ICBOUFZhcmlhbnQgbnBWYXJpYW50OwotCi0gICAgc3dpdGNoIChucFZhcmlhbnREYXRhLnR5cGUo
KSkgewotICAgIGNhc2UgTlBWYXJpYW50RGF0YTo6Vm9pZDoKLSAgICAgICAgVk9JRF9UT19OUFZB
UklBTlQobnBWYXJpYW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOUFZhcmlhbnREYXRh
OjpOdWxsOgotICAgICAgICBOVUxMX1RPX05QVkFSSUFOVChucFZhcmlhbnQpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIE5QVmFyaWFudERhdGE6OkJvb2w6Ci0gICAgICAgIEJPT0xFQU5fVE9f
TlBWQVJJQU5UKG5wVmFyaWFudERhdGEuYm9vbFZhbHVlKCksIG5wVmFyaWFudCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgTlBWYXJpYW50RGF0YTo6SW50MzI6Ci0gICAgICAgIElOVDMyX1RP
X05QVkFSSUFOVChucFZhcmlhbnREYXRhLmludDMyVmFsdWUoKSwgbnBWYXJpYW50KTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBOUFZhcmlhbnREYXRhOjpEb3VibGU6Ci0gICAgICAgIERPVUJM
RV9UT19OUFZBUklBTlQobnBWYXJpYW50RGF0YS5kb3VibGVWYWx1ZSgpLCBucFZhcmlhbnQpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIE5QVmFyaWFudERhdGE6OlN0cmluZzogewotICAgICAg
ICBOUFN0cmluZyBucFN0cmluZyA9IGNyZWF0ZU5QU3RyaW5nKG5wVmFyaWFudERhdGEuc3RyaW5n
VmFsdWUoKSk7Ci0gICAgICAgIFNUUklOR05fVE9fTlBWQVJJQU5UKG5wU3RyaW5nLlVURjhDaGFy
YWN0ZXJzLCBucFN0cmluZy5VVEY4TGVuZ3RoLCBucFZhcmlhbnQpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBOUFZhcmlhbnREYXRhOjpMb2NhbE5QT2JqZWN0SUQ6IHsKLSAgICAg
ICAgdWludDY0X3QgbnBPYmplY3RJRCA9IG5wVmFyaWFudERhdGEubG9jYWxOUE9iamVjdElEVmFs
dWUoKTsKLSAgICAgICAgQVNTRVJUKG5wT2JqZWN0SUQpOwotCi0gICAgICAgIE5QT2JqZWN0TWVz
c2FnZVJlY2VpdmVyKiBucE9iamVjdE1lc3NhZ2VSZWNlaXZlciA9IG1fcmVnaXN0ZXJlZE5QT2Jq
ZWN0cy5nZXQobnBPYmplY3RJRCk7Ci0gICAgICAgIGlmICghbnBPYmplY3RNZXNzYWdlUmVjZWl2
ZXIpIHsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgVk9J
RF9UT19OUFZBUklBTlQobnBWYXJpYW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0KLSAgICAgICAgTlBPYmplY3QqIG5wT2JqZWN0ID0gbnBPYmplY3RNZXNzYWdlUmVjZWl2ZXIt
Pm5wT2JqZWN0KCk7Ci0gICAgICAgIEFTU0VSVChucE9iamVjdCk7Ci0KLSAgICAgICAgcmV0YWlu
TlBPYmplY3QobnBPYmplY3QpOwotICAgICAgICBPQkpFQ1RfVE9fTlBWQVJJQU5UKG5wT2JqZWN0
LCBucFZhcmlhbnQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBOUFZhcmlhbnRE
YXRhOjpSZW1vdGVOUE9iamVjdElEOiB7Ci0gICAgICAgIE5QT2JqZWN0KiBucE9iamVjdFByb3h5
ID0gY3JlYXRlTlBPYmplY3RQcm94eShucFZhcmlhbnREYXRhLnJlbW90ZU5QT2JqZWN0SURWYWx1
ZSgpLCBwbHVnaW4pOwotICAgICAgICBPQkpFQ1RfVE9fTlBWQVJJQU5UKG5wT2JqZWN0UHJveHks
IG5wVmFyaWFudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
bnBWYXJpYW50OwotfQotCi12b2lkIE5QUmVtb3RlT2JqZWN0TWFwOjpwbHVnaW5EZXN0cm95ZWQo
UGx1Z2luKiBwbHVnaW4pCi17Ci0gICAgLy8gR2F0aGVyIGFuZCBkZWxldGUgdGhlIHJlY2VpdmVy
cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwbHVnLWluLgotICAgIFZlY3RvcjxOUE9iamVjdE1lc3Nh
Z2VSZWNlaXZlcio+IHJlY2VpdmVyczsKLSAgICBmb3IgKGF1dG8qIHJlY2VpdmVyIDogbV9yZWdp
c3RlcmVkTlBPYmplY3RzLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChyZWNlaXZlci0+cGx1Z2lu
KCkgPT0gcGx1Z2luKQotICAgICAgICAgICAgcmVjZWl2ZXJzLmFwcGVuZChyZWNlaXZlcik7Ci0g
ICAgfQotICAgIGZvciAoYXV0byogcmVjZWl2ZXIgOiByZWNlaXZlcnMpCi0gICAgICAgIGRlbGV0
ZSByZWNlaXZlcjsKLQotICAgIC8vIEludmFsaWRhdGUgYW5kIHJlbW92ZSBhbGwgcHJveGllcyBh
c3NvY2lhdGVkIHdpdGggdGhpcyBwbHVnLWluLgotICAgIFZlY3RvcjxOUE9iamVjdFByb3h5Kj4g
cHJveGllczsKLSAgICBmb3IgKGF1dG8qIHByb3h5IDogbV9ucE9iamVjdFByb3hpZXMpIHsKLSAg
ICAgICAgaWYgKHByb3h5LT5wbHVnaW4oKSA9PSBwbHVnaW4pCi0gICAgICAgICAgICBwcm94aWVz
LmFwcGVuZChwcm94eSk7Ci0gICAgfQotICAgIGZvciAoYXV0byogcHJveHkgOiBwcm94aWVzKSB7
Ci0gICAgICAgIHByb3h5LT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIEFTU0VSVChtX25wT2JqZWN0
UHJveGllcy5jb250YWlucyhwcm94eSkpOwotICAgICAgICBtX25wT2JqZWN0UHJveGllcy5yZW1v
dmUocHJveHkpOwotICAgIH0KLX0KLQotYm9vbCBOUFJlbW90ZU9iamVjdE1hcDo6ZGlkUmVjZWl2
ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBk
ZWNvZGVyLCBVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQotewotICAgIE5Q
T2JqZWN0TWVzc2FnZVJlY2VpdmVyKiBtZXNzYWdlUmVjZWl2ZXIgPSBtX3JlZ2lzdGVyZWROUE9i
amVjdHMuZ2V0KGRlY29kZXIuZGVzdGluYXRpb25JRCgpKTsKLSAgICBpZiAoIW1lc3NhZ2VSZWNl
aXZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZl
ci0+ZGlkUmVjZWl2ZVN5bmNOUE9iamVjdE1lc3NhZ2VSZWNlaXZlck1lc3NhZ2UoY29ubmVjdGlv
biwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAuaCBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggODZjZDJmMzg1MzBmMmFiNDMyZWU3NDJhZDVkZjUwOWI3NzM0YmFjOC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBOUFJlbW90ZU9iamVjdE1hcF9oCi0jZGVm
aW5lIE5QUmVtb3RlT2JqZWN0TWFwX2gKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQotCi0jaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgPFdlYkNvcmUvbnBydW50aW1l
Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFz
cyBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlcjsKLWNsYXNzIE5QT2JqZWN0UHJveHk7Ci1jbGFzcyBO
UFZhcmlhbnREYXRhOwotY2xhc3MgUGx1Z2luOwotCi1jbGFzcyBOUFJlbW90ZU9iamVjdE1hcCA6
IHB1YmxpYyBSZWZDb3VudGVkPE5QUmVtb3RlT2JqZWN0TWFwPiB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxOUFJlbW90ZU9iamVjdE1hcD4gY3JlYXRlKElQQzo6Q29ubmVjdGlvbiopOwotICAg
IH5OUFJlbW90ZU9iamVjdE1hcCgpOwotCi0gICAgLy8gQ3JlYXRlcyBhbiBOUE9iamVjdFByb3h5
IHdyYXBwZXIgZm9yIHRoZSByZW1vdGUgb2JqZWN0IHdpdGggdGhlIGdpdmVuIHJlbW90ZSBvYmpl
Y3QgSUQuCi0gICAgTlBPYmplY3QqIGNyZWF0ZU5QT2JqZWN0UHJveHkodWludDY0X3QgcmVtb3Rl
T2JqZWN0SUQsIFBsdWdpbiopOwotICAgIHZvaWQgbnBPYmplY3RQcm94eURlc3Ryb3llZChOUE9i
amVjdCopOwotCi0gICAgLy8gRXhwb3NlIHRoZSBnaXZlbiBOUE9iamVjdCBhcyBhIHJlbW90ZSBv
YmplY3QuIFJldHVybnMgdGhlIG9iamVjdElELgotICAgIHVpbnQ2NF90IHJlZ2lzdGVyTlBPYmpl
Y3QoTlBPYmplY3QqLCBQbHVnaW4qKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJOUE9iamVjdCh1aW50
NjRfdCk7Ci0KLSAgICBOUFZhcmlhbnREYXRhIG5wVmFyaWFudFRvTlBWYXJpYW50RGF0YShjb25z
dCBOUFZhcmlhbnQmLCBQbHVnaW4qKTsKLSAgICBOUFZhcmlhbnQgbnBWYXJpYW50RGF0YVRvTlBW
YXJpYW50KGNvbnN0IE5QVmFyaWFudERhdGEmLCBQbHVnaW4qKTsKLQotICAgIElQQzo6Q29ubmVj
dGlvbiogY29ubmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29ubmVjdGlvbjsgfQotCi0gICAg
dm9pZCBwbHVnaW5EZXN0cm95ZWQoUGx1Z2luKik7Ci0KLSAgICBib29sIGRpZFJlY2VpdmVTeW5j
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBVbmlxdWVSZWY8SVBDOjpF
bmNvZGVyPiYpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IE5QUmVtb3RlT2JqZWN0TWFwKElQ
Qzo6Q29ubmVjdGlvbiopOwotICAgIElQQzo6Q29ubmVjdGlvbiogbV9jb25uZWN0aW9uOwotCi0g
ICAgLy8gQSBtYXAgb2YgTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIgY2xhc3Nlcywgd3JhcHBpbmcg
b2JqZWN0cyB0aGF0IHdlIGV4cG9ydCB0byB0aGUKLSAgICAvLyBvdGhlciBlbmQgb2YgdGhlIGNv
bm5lY3Rpb24uCi0gICAgSGFzaE1hcDx1aW50NjRfdCwgTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIq
PiBtX3JlZ2lzdGVyZWROUE9iamVjdHM7Ci0KLSAgICAvLyBBIHNldCBvZiBOUE9iamVjdFByb3h5
IG9iamVjdHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFwLgotICAgIEhhc2hTZXQ8TlBPYmplY3RQ
cm94eSo+IG1fbnBPYmplY3RQcm94aWVzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2VuZGlmIC8vIE5QUmVt
b3RlT2JqZWN0TWFwX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMv
TlBWYXJpYW50RGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL05QVmFyaWFu
dERhdGEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGI5MmJkYzk0MDY3YTEy
ZmQ2ODUyYTYxNzk2ZDFlYWFhMDEwNDk5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTlBWYXJpYW50RGF0
YS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOUFZhcmlhbnREYXRhLmgiCi0KLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIkRlY29kZXIuaCIKLSNpbmNsdWRlICJF
bmNvZGVyLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1OUFZhcmlhbnREYXRhOjpOUFZhcmlhbnREYXRhKCkKLSAgICA6IG1fdHlw
ZShOUFZhcmlhbnREYXRhOjpWb2lkKQotICAgICwgbV9ib29sVmFsdWUoZmFsc2UpCi0gICAgLCBt
X2ludDMyVmFsdWUoMCkKLSAgICAsIG1fZG91YmxlVmFsdWUoMCkKLSAgICAsIG1fbG9jYWxOUE9i
amVjdElEVmFsdWUoMCkKLSAgICAsIG1fcmVtb3RlTlBPYmplY3RJRFZhbHVlKDApCi17Ci19Ci0K
LU5QVmFyaWFudERhdGEgTlBWYXJpYW50RGF0YTo6bWFrZVZvaWQoKQotewotICAgIHJldHVybiBO
UFZhcmlhbnREYXRhKCk7Ci19Ci0KLU5QVmFyaWFudERhdGEgTlBWYXJpYW50RGF0YTo6bWFrZU51
bGwoKQotewotICAgIE5QVmFyaWFudERhdGEgbnBWYXJpYW50RGF0YTsKLSAgICAKLSAgICBucFZh
cmlhbnREYXRhLm1fdHlwZSA9IE5QVmFyaWFudERhdGE6Ok51bGw7Ci0gICAgCi0gICAgcmV0dXJu
IG5wVmFyaWFudERhdGE7Ci19Ci0gICAgCi1OUFZhcmlhbnREYXRhIE5QVmFyaWFudERhdGE6Om1h
a2VCb29sKGJvb2wgdmFsdWUpCi17Ci0gICAgTlBWYXJpYW50RGF0YSBucFZhcmlhbnREYXRhOwot
Ci0gICAgbnBWYXJpYW50RGF0YS5tX3R5cGUgPSBOUFZhcmlhbnREYXRhOjpCb29sOwotICAgIG5w
VmFyaWFudERhdGEubV9ib29sVmFsdWUgPSB2YWx1ZTsKLQotICAgIHJldHVybiBucFZhcmlhbnRE
YXRhOwotfQotCi1OUFZhcmlhbnREYXRhIE5QVmFyaWFudERhdGE6Om1ha2VJbnQzMihpbnQzMl90
IHZhbHVlKQotewotICAgIE5QVmFyaWFudERhdGEgbnBWYXJpYW50RGF0YTsKLQotICAgIG5wVmFy
aWFudERhdGEubV90eXBlID0gTlBWYXJpYW50RGF0YTo6SW50MzI7Ci0gICAgbnBWYXJpYW50RGF0
YS5tX2ludDMyVmFsdWUgPSB2YWx1ZTsKLQotICAgIHJldHVybiBucFZhcmlhbnREYXRhOwotfSAg
ICAKLQotTlBWYXJpYW50RGF0YSBOUFZhcmlhbnREYXRhOjptYWtlRG91YmxlKGRvdWJsZSB2YWx1
ZSkKLXsKLSAgICBOUFZhcmlhbnREYXRhIG5wVmFyaWFudERhdGE7Ci0KLSAgICBucFZhcmlhbnRE
YXRhLm1fdHlwZSA9IE5QVmFyaWFudERhdGE6OkRvdWJsZTsKLSAgICBucFZhcmlhbnREYXRhLm1f
ZG91YmxlVmFsdWUgPSB2YWx1ZTsKLQotICAgIHJldHVybiBucFZhcmlhbnREYXRhOwotfQotCi1O
UFZhcmlhbnREYXRhIE5QVmFyaWFudERhdGE6Om1ha2VTdHJpbmcoY29uc3QgY2hhciogc3RyaW5n
LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgTlBWYXJpYW50RGF0YSBucFZhcmlhbnREYXRhOwot
ICAgIAotICAgIG5wVmFyaWFudERhdGEubV90eXBlID0gTlBWYXJpYW50RGF0YTo6U3RyaW5nOwot
ICAgIG5wVmFyaWFudERhdGEubV9zdHJpbmdWYWx1ZSA9IENTdHJpbmcoc3RyaW5nLCBsZW5ndGgp
OwotICAgIAotICAgIHJldHVybiBucFZhcmlhbnREYXRhOwotfQotCi1OUFZhcmlhbnREYXRhIE5Q
VmFyaWFudERhdGE6Om1ha2VMb2NhbE5QT2JqZWN0SUQodWludDY0X3QgdmFsdWUpCi17Ci0gICAg
TlBWYXJpYW50RGF0YSBucFZhcmlhbnREYXRhOwotCi0gICAgbnBWYXJpYW50RGF0YS5tX3R5cGUg
PSBOUFZhcmlhbnREYXRhOjpMb2NhbE5QT2JqZWN0SUQ7Ci0gICAgbnBWYXJpYW50RGF0YS5tX2xv
Y2FsTlBPYmplY3RJRFZhbHVlID0gdmFsdWU7Ci0KLSAgICByZXR1cm4gbnBWYXJpYW50RGF0YTsK
LX0KLQotTlBWYXJpYW50RGF0YSBOUFZhcmlhbnREYXRhOjptYWtlUmVtb3RlTlBPYmplY3RJRCh1
aW50NjRfdCB2YWx1ZSkKLXsKLSAgICBOUFZhcmlhbnREYXRhIG5wVmFyaWFudERhdGE7Ci0KLSAg
ICBucFZhcmlhbnREYXRhLm1fdHlwZSA9IE5QVmFyaWFudERhdGE6OlJlbW90ZU5QT2JqZWN0SUQ7
Ci0gICAgbnBWYXJpYW50RGF0YS5tX3JlbW90ZU5QT2JqZWN0SURWYWx1ZSA9IHZhbHVlOwotCi0g
ICAgcmV0dXJuIG5wVmFyaWFudERhdGE7Ci19Ci0KLXZvaWQgTlBWYXJpYW50RGF0YTo6ZW5jb2Rl
KElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fdHlwZTsK
LQotICAgIHN3aXRjaCAodHlwZSgpKSB7Ci0gICAgY2FzZSBOUFZhcmlhbnREYXRhOjpWb2lkOgot
ICAgIGNhc2UgTlBWYXJpYW50RGF0YTo6TnVsbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBO
UFZhcmlhbnREYXRhOjpCb29sOgotICAgICAgICBlbmNvZGVyIDw8IGJvb2xWYWx1ZSgpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIE5QVmFyaWFudERhdGE6OkludDMyOgotICAgICAgICBlbmNv
ZGVyIDw8IGludDMyVmFsdWUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOUFZhcmlhbnRE
YXRhOjpEb3VibGU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG91YmxlVmFsdWUoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBOUFZhcmlhbnREYXRhOjpTdHJpbmc6Ci0gICAgICAgIGVuY29kZXIg
PDwgc3RyaW5nVmFsdWUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOUFZhcmlhbnREYXRh
OjpMb2NhbE5QT2JqZWN0SUQ6Ci0gICAgICAgIGVuY29kZXIgPDwgbG9jYWxOUE9iamVjdElEVmFs
dWUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOUFZhcmlhbnREYXRhOjpSZW1vdGVOUE9i
amVjdElEOgotICAgICAgICBlbmNvZGVyIDw8IHJlbW90ZU5QT2JqZWN0SURWYWx1ZSgpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8TlBWYXJpYW50RGF0YT4gTlBW
YXJpYW50RGF0YTo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBOUFZhcmlh
bnREYXRhIHJlc3VsdDsKLSAgICB1aW50MzJfdCB0eXBlOwotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUodHlwZSkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAvLyBXZSBzcGVj
aWFsLWNhc2UgTG9jYWxOUE9iamVjdElEIGFuZCBSZW1vdGVOUE9iamVjdElEIGhlcmUgc28gYSBM
b2NhbE5QT2JqZWN0SUQgaXMKLSAgICAvLyBkZWNvZGVkIGFzIGEgUmVtb3RlTlBPYmplY3RJRCBh
bmQgdmljZSB2ZXJzYS4KLSAgICAvLyBUaGlzIGlzIGRvbmUgYmVjYXVzZSB0aGUgdHlwZSBpcyBm
cm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiB0aGUgb3RoZXIgY29ubmVjdGlvbiwgYW5kCi0gICAgLy8g
dGh1cyB3ZSBoYXZlIHRvIGFkanVzdCBpdCB0byBtYXRjaCBvdXIgb3duIHBlcnNwZWN0aXZlLgot
ICAgIGlmICh0eXBlID09IE5QVmFyaWFudERhdGE6OkxvY2FsTlBPYmplY3RJRCkKLSAgICAgICAg
dHlwZSA9IE5QVmFyaWFudERhdGE6OlJlbW90ZU5QT2JqZWN0SUQ7Ci0gICAgZWxzZSBpZiAodHlw
ZSA9PSBOUFZhcmlhbnREYXRhOjpSZW1vdGVOUE9iamVjdElEKQotICAgICAgICB0eXBlID0gTlBW
YXJpYW50RGF0YTo6TG9jYWxOUE9iamVjdElEOwotCi0gICAgcmVzdWx0Lm1fdHlwZSA9IHR5cGU7
Ci0KLSAgICBzd2l0Y2ggKHJlc3VsdC5tX3R5cGUpIHsKLSAgICBjYXNlIE5QVmFyaWFudERhdGE6
OlZvaWQ6Ci0gICAgY2FzZSBOUFZhcmlhbnREYXRhOjpOdWxsOgotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIGNhc2UgTlBWYXJpYW50RGF0YTo6Qm9vbDoKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQubV9ib29sVmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBjYXNlIE5QVmFyaWFudERhdGE6Oklu
dDMyOgotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tX2ludDMyVmFsdWUpKQot
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICBjYXNlIE5QVmFyaWFudERhdGE6OkRvdWJsZToKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShyZXN1bHQubV9kb3VibGVWYWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIGNhc2UgTlBWYXJpYW50RGF0YTo6U3Ry
aW5nOgotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tX3N0cmluZ1ZhbHVlKSkK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgY2FzZSBOUFZhcmlhbnREYXRhOjpMb2NhbE5QT2JqZWN0SUQ6Ci0gICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1fbG9jYWxOUE9iamVjdElEVmFsdWUpKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBjYXNl
IE5QVmFyaWFudERhdGE6OlJlbW90ZU5QT2JqZWN0SUQ6Ci0gICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0Lm1fcmVtb3RlTlBPYmplY3RJRFZhbHVlKSkKLSAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAv
LyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL1BsdWdpbnMvTlBWYXJpYW50RGF0YS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1
Z2lucy9OUFZhcmlhbnREYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OGUy
ZDUwNGJhZDliNzQ2ZDYzNzQyNTc5MDVjY2UzOGZiNzNiZmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9O
UFZhcmlhbnREYXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJUEMgewotY2xhc3MgRGVj
b2RlcjsKLWNsYXNzIEVuY29kZXI7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBO
UFZhcmlhbnREYXRhIHsKLXB1YmxpYzoKLSAgICBlbnVtIFR5cGUgewotICAgICAgICBWb2lkLAot
ICAgICAgICBOdWxsLAotICAgICAgICBCb29sLAotICAgICAgICBJbnQzMiwKLSAgICAgICAgRG91
YmxlLAotICAgICAgICBTdHJpbmcsCi0gICAgICAgIExvY2FsTlBPYmplY3RJRCwKLSAgICAgICAg
UmVtb3RlTlBPYmplY3RJRCwKLSAgICB9OwotICAgIE5QVmFyaWFudERhdGEoKTsKLQotICAgIHN0
YXRpYyBOUFZhcmlhbnREYXRhIG1ha2VWb2lkKCk7Ci0gICAgc3RhdGljIE5QVmFyaWFudERhdGEg
bWFrZU51bGwoKTsKLSAgICBzdGF0aWMgTlBWYXJpYW50RGF0YSBtYWtlQm9vbChib29sIHZhbHVl
KTsKLSAgICBzdGF0aWMgTlBWYXJpYW50RGF0YSBtYWtlSW50MzIoaW50MzJfdCB2YWx1ZSk7Ci0g
ICAgc3RhdGljIE5QVmFyaWFudERhdGEgbWFrZURvdWJsZShkb3VibGUgdmFsdWUpOwotICAgIHN0
YXRpYyBOUFZhcmlhbnREYXRhIG1ha2VTdHJpbmcoY29uc3QgY2hhciogc3RyaW5nLCB1bnNpZ25l
ZCBsZW5ndGgpOwotICAgIHN0YXRpYyBOUFZhcmlhbnREYXRhIG1ha2VMb2NhbE5QT2JqZWN0SUQo
dWludDY0X3QgdmFsdWUpOwotICAgIHN0YXRpYyBOUFZhcmlhbnREYXRhIG1ha2VSZW1vdGVOUE9i
amVjdElEKHVpbnQ2NF90IHZhbHVlKTsKLQotICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PFR5cGU+KG1fdHlwZSk7IH0KLQotICAgIGJvb2wgYm9vbFZhbHVlKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh0eXBlKCkgPT0gTlBWYXJpYW50RGF0YTo6Qm9vbCk7
Ci0gICAgICAgIHJldHVybiBtX2Jvb2xWYWx1ZTsKLSAgICB9Ci0KLSAgICBpbnQzMl90IGludDMy
VmFsdWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKHR5cGUoKSA9PSBOUFZhcmlhbnRE
YXRhOjpJbnQzMik7Ci0gICAgICAgIHJldHVybiBtX2ludDMyVmFsdWU7Ci0gICAgfQotCi0gICAg
ZG91YmxlIGRvdWJsZVZhbHVlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh0eXBlKCkg
PT0gTlBWYXJpYW50RGF0YTo6RG91YmxlKTsKLSAgICAgICAgcmV0dXJuIG1fZG91YmxlVmFsdWU7
Ci0gICAgfQotCi0gICAgY29uc3QgQ1N0cmluZyYgc3RyaW5nVmFsdWUoKSBjb25zdAotICAgIHsK
LSAgICAgICAgQVNTRVJUKHR5cGUoKSA9PSBOUFZhcmlhbnREYXRhOjpTdHJpbmcpOwotICAgICAg
ICByZXR1cm4gbV9zdHJpbmdWYWx1ZTsKLSAgICB9Ci0KLSAgICB1aW50NjRfdCBsb2NhbE5QT2Jq
ZWN0SURWYWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQodHlwZSgpID09IE5QVmFy
aWFudERhdGE6OkxvY2FsTlBPYmplY3RJRCk7Ci0gICAgICAgIHJldHVybiBtX2xvY2FsTlBPYmpl
Y3RJRFZhbHVlOwotICAgIH0KLQotICAgIHVpbnQ2NF90IHJlbW90ZU5QT2JqZWN0SURWYWx1ZSgp
IGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQodHlwZSgpID09IE5QVmFyaWFudERhdGE6OlJl
bW90ZU5QT2JqZWN0SUQpOwotICAgICAgICByZXR1cm4gbV9yZW1vdGVOUE9iamVjdElEVmFsdWU7
Ci0gICAgfQotCi0gICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNvZGVyJikgY29uc3Q7Ci0gICAgc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8TlBWYXJpYW50RGF0YT4gZGVjb2RlKElQQzo6RGVjb2RlciYpOwot
Ci1wcml2YXRlOgotICAgIHVpbnQzMl90IG1fdHlwZTsKLSAgICBib29sIG1fYm9vbFZhbHVlOwot
ICAgIGludDMyX3QgbV9pbnQzMlZhbHVlOwotICAgIGRvdWJsZSBtX2RvdWJsZVZhbHVlOwotICAg
IENTdHJpbmcgbV9zdHJpbmdWYWx1ZTsKLSAgICB1aW50NjRfdCBtX2xvY2FsTlBPYmplY3RJRFZh
bHVlOwotICAgIHVpbnQ2NF90IG1fcmVtb3RlTlBPYmplY3RJRFZhbHVlOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2Nh
cGVQbHVnaW5Nb2R1bGUuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OZXRzY2Fw
ZS9OZXRzY2FwZVBsdWdpbk1vZHVsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDI2MWQ3YTg5NjkzMDZhODkyNWM0YWIzNmU0Nzk0N2IzOTZjMTI1MmMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1
Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbk1vZHVsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwyNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJOZXRzY2FwZVBsdWdpbk1vZHVsZS5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi0KLSNpbmNsdWRlICJNb2R1bGUuaCIKLSNpbmNsdWRlICJOUFJ1bnRpbWVVdGlsaXRpZXMu
aCIKLSNpbmNsdWRlICJOZXRzY2FwZUJyb3dzZXJGdW5jcy5oIgotI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLXN0YXRpYyBWZWN0b3I8TmV0c2NhcGVQbHVnaW5Nb2R1bGUqPiYgaW5pdGlh
bGl6ZWROZXRzY2FwZVBsdWdpbk1vZHVsZXMoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxWZWN0b3I8TmV0c2NhcGVQbHVnaW5Nb2R1bGUqPj4gaW5pdGlhbGl6ZWROZXRzY2FwZVBsdWdp
bk1vZHVsZXM7Ci0gICAgcmV0dXJuIGluaXRpYWxpemVkTmV0c2NhcGVQbHVnaW5Nb2R1bGVzOwot
fQotCi1OZXRzY2FwZVBsdWdpbk1vZHVsZTo6TmV0c2NhcGVQbHVnaW5Nb2R1bGUoY29uc3QgU3Ry
aW5nJiBwbHVnaW5QYXRoKQotICAgIDogbV9wbHVnaW5QYXRoKHBsdWdpblBhdGgpCi0gICAgLCBt
X2lzSW5pdGlhbGl6ZWQoZmFsc2UpCi0gICAgLCBtX2xvYWRDb3VudCgwKQotICAgICwgbV9zaHV0
ZG93blByb2NQdHIoMCkKLSAgICAsIG1fcGx1Z2luRnVuY3MoKQotewotfQotCi1OZXRzY2FwZVBs
dWdpbk1vZHVsZTo6fk5ldHNjYXBlUGx1Z2luTW9kdWxlKCkKLXsKLSAgICBBU1NFUlQoaW5pdGlh
bGl6ZWROZXRzY2FwZVBsdWdpbk1vZHVsZXMoKS5maW5kKHRoaXMpID09IG5vdEZvdW5kKTsKLX0K
LQotVmVjdG9yPFN0cmluZz4gTmV0c2NhcGVQbHVnaW5Nb2R1bGU6OnNpdGVzV2l0aERhdGEoKQot
ewotICAgIFZlY3RvcjxTdHJpbmc+IHNpdGVzOwotCi0gICAgaW5jcmVtZW50TG9hZENvdW50KCk7
Ci0gICAgdHJ5R2V0U2l0ZXNXaXRoRGF0YShzaXRlcyk7Ci0gICAgZGVjcmVtZW50TG9hZENvdW50
KCk7Ci0KLSAgICByZXR1cm4gc2l0ZXM7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW5Nb2R1bGU6
OmNsZWFyU2l0ZURhdGEoY29uc3QgU3RyaW5nJiBzaXRlLCB1aW50NjRfdCBmbGFncywgdWludDY0
X3QgbWF4QWdlKQotewotICAgIGluY3JlbWVudExvYWRDb3VudCgpOwotICAgIGJvb2wgcmVzdWx0
ID0gdHJ5Q2xlYXJTaXRlRGF0YShzaXRlLCBmbGFncywgbWF4QWdlKTsKLSAgICBkZWNyZW1lbnRM
b2FkQ291bnQoKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVn
aW5Nb2R1bGU6OnRyeUdldFNpdGVzV2l0aERhdGEoVmVjdG9yPFN0cmluZz4mIHNpdGVzKQotewot
ICAgIGlmICghbV9pc0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAv
LyBDaGVjayBpZiB0aGUgcGx1Zy1pbiBzdXBwb3J0cyBOUFBfR2V0U2l0ZXNXaXRoRGF0YS4KLSAg
ICBpZiAoIW1fcGx1Z2luRnVuY3MuZ2V0c2l0ZXN3aXRoZGF0YSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgY2hhcioqIHNpdGVBcnJheSA9IG1fcGx1Z2luRnVuY3MuZ2V0c2l0ZXN3aXRo
ZGF0YSgpOwotCi0gICAgLy8gVGhlcmUgd2VyZSBubyBzaXRlcyB3aXRoIGRhdGEuCi0gICAgaWYg
KCFzaXRlQXJyYXkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgZm9yIChpbnQgaSA9IDA7
IHNpdGVBcnJheVtpXTsgKytpKSB7Ci0gICAgICAgIGNoYXIqIHNpdGUgPSBzaXRlQXJyYXlbaV07
Ci0KLSAgICAgICAgU3RyaW5nIHNpdGVTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KHNpdGUpOwot
ICAgICAgICBpZiAoIXNpdGVTdHJpbmcuaXNOdWxsKCkpCi0gICAgICAgICAgICBzaXRlcy5hcHBl
bmQoc2l0ZVN0cmluZyk7Ci0KLSAgICAgICAgbnBuTWVtRnJlZShzaXRlKTsKLSAgICB9Ci0KLSAg
ICBucG5NZW1GcmVlKHNpdGVBcnJheSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTmV0
c2NhcGVQbHVnaW5Nb2R1bGU6OnRyeUNsZWFyU2l0ZURhdGEoY29uc3QgU3RyaW5nJiBzaXRlLCB1
aW50NjRfdCBmbGFncywgdWludDY0X3QgbWF4QWdlKQotewotICAgIGlmICghbV9pc0luaXRpYWxp
emVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBDaGVjayBpZiB0aGUgcGx1Zy1p
biBzdXBwb3J0cyBOUFBfQ2xlYXJTaXRlRGF0YS4KLSAgICBpZiAoIW1fcGx1Z2luRnVuY3MuY2xl
YXJzaXRlZGF0YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ1N0cmluZyBzaXRlU3Ry
aW5nOwotICAgIGlmICghc2l0ZS5pc051bGwoKSkKLSAgICAgICAgc2l0ZVN0cmluZyA9IHNpdGUu
dXRmOCgpOwotCi0gICAgcmV0dXJuIG1fcGx1Z2luRnVuY3MuY2xlYXJzaXRlZGF0YShzaXRlU3Ry
aW5nLmRhdGEoKSwgZmxhZ3MsIG1heEFnZSkgPT0gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLXZvaWQg
TmV0c2NhcGVQbHVnaW5Nb2R1bGU6OnNodXRkb3duKCkKLXsKLSAgICBBU1NFUlQobV9pc0luaXRp
YWxpemVkKTsKLQotICAgIG1fc2h1dGRvd25Qcm9jUHRyKCk7Ci0KLSAgICBtX2lzSW5pdGlhbGl6
ZWQgPSBmYWxzZTsKLQotICAgIHNpemVfdCBwbHVnaW5Nb2R1bGVJbmRleCA9IGluaXRpYWxpemVk
TmV0c2NhcGVQbHVnaW5Nb2R1bGVzKCkuZmluZCh0aGlzKTsKLSAgICBBU1NFUlQocGx1Z2luTW9k
dWxlSW5kZXggIT0gbm90Rm91bmQpOwotCi0gICAgaW5pdGlhbGl6ZWROZXRzY2FwZVBsdWdpbk1v
ZHVsZXMoKS5yZW1vdmUocGx1Z2luTW9kdWxlSW5kZXgpOwotfQotCi1SZWZQdHI8TmV0c2NhcGVQ
bHVnaW5Nb2R1bGU+IE5ldHNjYXBlUGx1Z2luTW9kdWxlOjpnZXRPckNyZWF0ZShjb25zdCBTdHJp
bmcmIHBsdWdpblBhdGgpCi17Ci0gICAgLy8gRmlyc3QsIHNlZSBpZiB3ZSBhbHJlYWR5IGhhdmUg
YSBtb2R1bGUgd2l0aCB0aGlzIHBsdWctaW4gcGF0aC4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGluaXRpYWxpemVkTmV0c2NhcGVQbHVnaW5Nb2R1bGVzKCkuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgTmV0c2NhcGVQbHVnaW5Nb2R1bGUqIHBsdWdpbk1vZHVsZSA9IGluaXRpYWxpemVkTmV0
c2NhcGVQbHVnaW5Nb2R1bGVzKClbaV07Ci0KLSAgICAgICAgaWYgKHBsdWdpbk1vZHVsZS0+bV9w
bHVnaW5QYXRoID09IHBsdWdpblBhdGgpCi0gICAgICAgICAgICByZXR1cm4gcGx1Z2luTW9kdWxl
OwotICAgIH0KLQotICAgIGF1dG8gcGx1Z2luTW9kdWxlKGFkb3B0UmVmKCpuZXcgTmV0c2NhcGVQ
bHVnaW5Nb2R1bGUocGx1Z2luUGF0aCkpKTsKLSAgICAKLSAgICAvLyBUcnkgdG8gbG9hZCBhbmQg
aW5pdGlhbGl6ZSB0aGUgcGx1Zy1pbiBtb2R1bGUuCi0gICAgaWYgKCFwbHVnaW5Nb2R1bGUtPmxv
YWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgcmV0dXJuIHBsdWdpbk1v
ZHVsZTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbk1vZHVsZTo6aW5jcmVtZW50TG9hZENvdW50
KCkKLXsKLSAgICBpZiAoIW1fbG9hZENvdW50KSB7Ci0gICAgICAgIC8vIExvYWQgdGhlIHBsdWct
aW4gbW9kdWxlIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgbG9hZCgpOwotICAgIH0KLSAgICAKLSAg
ICBtX2xvYWRDb3VudCsrOwotfQotICAgIAotdm9pZCBOZXRzY2FwZVBsdWdpbk1vZHVsZTo6ZGVj
cmVtZW50TG9hZENvdW50KCkKLXsKLSAgICBBU1NFUlQobV9sb2FkQ291bnQgPiAwKTsKLSAgICBt
X2xvYWRDb3VudC0tOwotICAgIAotICAgIGlmICghbV9sb2FkQ291bnQgJiYgbV9pc0luaXRpYWxp
emVkKSB7Ci0gICAgICAgIHNodXRkb3duKCk7Ci0gICAgICAgIHVubG9hZCgpOwotICAgIH0KLX0K
LQotYm9vbCBOZXRzY2FwZVBsdWdpbk1vZHVsZTo6bG9hZCgpCi17Ci0gICAgaWYgKG1faXNJbml0
aWFsaXplZCkgewotICAgICAgICBBU1NFUlQoaW5pdGlhbGl6ZWROZXRzY2FwZVBsdWdpbk1vZHVs
ZXMoKS5maW5kKHRoaXMpICE9IG5vdEZvdW5kKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgaWYgKCF0cnlMb2FkKCkpIHsKLSAgICAgICAgdW5sb2FkKCk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgbV9pc0luaXRpYWxpemVkID0gdHJ1ZTsKLQot
ICAgIEFTU0VSVChpbml0aWFsaXplZE5ldHNjYXBlUGx1Z2luTW9kdWxlcygpLmZpbmQodGhpcykg
PT0gbm90Rm91bmQpOwotICAgIGluaXRpYWxpemVkTmV0c2NhcGVQbHVnaW5Nb2R1bGVzKCkuYXBw
ZW5kKHRoaXMpOwotCi0gICAgZGV0ZXJtaW5lUXVpcmtzKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotI2lmIFBMQVRGT1JNKEdUSykKLXN0YXRpYyBib29sIG1vZHVsZU1peGVzR3RrU3ltYm9s
cyhNb2R1bGUqIG1vZHVsZSkKLXsKLSAgICByZXR1cm4gbW9kdWxlLT5mdW5jdGlvblBvaW50ZXI8
Z3BvaW50ZXI+KCJndGtfb2JqZWN0X2dldF90eXBlIik7Ci19Ci0jZW5kaWYKLQotYm9vbCBOZXRz
Y2FwZVBsdWdpbk1vZHVsZTo6dHJ5TG9hZCgpCi17Ci0gICAgbV9tb2R1bGUgPSBtYWtlVW5pcXVl
PE1vZHVsZT4obV9wbHVnaW5QYXRoKTsKLSAgICBpZiAoIW1fbW9kdWxlLT5sb2FkKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotI2lmIFBMQVRGT1JNKEdUSykKLSAgICBpZiAobW9kdWxlTWl4
ZXNHdGtTeW1ib2xzKG1fbW9kdWxlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2Vu
ZGlmCi0KLSAgICBOUF9Jbml0aWFsaXplRnVuY1B0ciBpbml0aWFsaXplRnVuY1B0ciA9IG1fbW9k
dWxlLT5mdW5jdGlvblBvaW50ZXI8TlBfSW5pdGlhbGl6ZUZ1bmNQdHI+KCJOUF9Jbml0aWFsaXpl
Iik7Ci0gICAgaWYgKCFpbml0aWFsaXplRnVuY1B0cikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0jaWYgIVBMVUdJTl9BUkNISVRFQ1RVUkUoVU5JWCkKLSAgICBOUF9HZXRFbnRyeVBvaW50c0Z1
bmNQdHIgZ2V0RW50cnlQb2ludHNGdW5jUHRyID0gbV9tb2R1bGUtPmZ1bmN0aW9uUG9pbnRlcjxO
UF9HZXRFbnRyeVBvaW50c0Z1bmNQdHI+KCJOUF9HZXRFbnRyeVBvaW50cyIpOwotICAgIGlmICgh
Z2V0RW50cnlQb2ludHNGdW5jUHRyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLQot
ICAgIG1fc2h1dGRvd25Qcm9jUHRyID0gbV9tb2R1bGUtPmZ1bmN0aW9uUG9pbnRlcjxOUFBfU2h1
dGRvd25Qcm9jUHRyPigiTlBfU2h1dGRvd24iKTsKLSAgICBpZiAoIW1fc2h1dGRvd25Qcm9jUHRy
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3BsdWdpbkZ1bmNzLnNpemUgPSBzaXpl
b2YoTlBQbHVnaW5GdW5jcyk7Ci0gICAgbV9wbHVnaW5GdW5jcy52ZXJzaW9uID0gKE5QX1ZFUlNJ
T05fTUFKT1IgPDwgOCkgfCBOUF9WRVJTSU9OX01JTk9SOwotCi0gICAgLy8gT24gTWFjLCBOUF9J
bml0aWFsaXplIG11c3QgYmUgY2FsbGVkIGZpcnN0LCB0aGVuIE5QX0dldEVudHJ5UG9pbnRzLiBP
biBXaW5kb3dzLCB0aGUgb3JkZXIgaXMKLSAgICAvLyByZXZlcnNlZC4gRmFpbGluZyB0byBmb2xs
b3cgdGhpcyBvcmRlciByZXN1bHRzIGluIGNyYXNoZXMgKGUuZy4sIGluIFNpbHZlcmxpZ2h0IG9u
IE1hYyBhbmQKLSAgICAvLyBpbiBGbGFzaCBhbmQgUXVpY2tUaW1lIG9uIFdpbmRvd3MpLgotI2lm
IFBMVUdJTl9BUkNISVRFQ1RVUkUoTUFDKQotICAgIHJldHVybiBpbml0aWFsaXplRnVuY1B0cihu
ZXRzY2FwZUJyb3dzZXJGdW5jcygpKSA9PSBOUEVSUl9OT19FUlJPUiAmJiBnZXRFbnRyeVBvaW50
c0Z1bmNQdHIoJm1fcGx1Z2luRnVuY3MpID09IE5QRVJSX05PX0VSUk9SOwotI2VsaWYgUExVR0lO
X0FSQ0hJVEVDVFVSRShVTklYKQotICAgIGlmIChpbml0aWFsaXplRnVuY1B0cihuZXRzY2FwZUJy
b3dzZXJGdW5jcygpLCAmbV9wbHVnaW5GdW5jcykgIT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTmV0
c2NhcGVQbHVnaW5Nb2R1bGU6OnVubG9hZCgpCi17Ci0gICAgQVNTRVJUKCFtX2lzSW5pdGlhbGl6
ZWQpOwotCi0gICAgbV9tb2R1bGUgPSBudWxscHRyOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbk1vZHVs
ZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdp
bk1vZHVsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODJhZGExMTM3ODQ0M2E0
NTY2NDBkOGM5NWE0NDg0OWJjMDRmNTBhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0
c2NhcGVQbHVnaW5Nb2R1bGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBOZXRzY2FwZVBsdWdpbk1vZHVsZV9oCi0jZGVmaW5lIE5ldHNjYXBl
UGx1Z2luTW9kdWxlX2gKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5j
bHVkZSAiTW9kdWxlLmgiCi0jaW5jbHVkZSAiUGx1Z2luTW9kdWxlSW5mby5oIgotI2luY2x1ZGUg
IlBsdWdpblF1aXJrcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvbnBydW50aW1lX2ludGVybmFsLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotc3RydWN0IE1pbWVDbGFzc0luZm87Ci19Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdHJ1Y3QgUmF3UGx1Z2luTWV0YURhdGE7Ci0KLWNsYXNz
IE5ldHNjYXBlUGx1Z2luTW9kdWxlIDogcHVibGljIFJlZkNvdW50ZWQ8TmV0c2NhcGVQbHVnaW5N
b2R1bGU+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPE5ldHNjYXBlUGx1Z2luTW9kdWxl
PiBnZXRPckNyZWF0ZShjb25zdCBTdHJpbmcmIHBsdWdpblBhdGgpOwotICAgIH5OZXRzY2FwZVBs
dWdpbk1vZHVsZSgpOwotCi0gICAgY29uc3QgTlBQbHVnaW5GdW5jcyYgcGx1Z2luRnVuY3MoKSBj
b25zdCB7IHJldHVybiBtX3BsdWdpbkZ1bmNzOyB9Ci0gCi0gICAgdm9pZCBpbmNyZW1lbnRMb2Fk
Q291bnQoKTsKLSAgICB2b2lkIGRlY3JlbWVudExvYWRDb3VudCgpOwotCi0gICAgc3RhdGljIGJv
b2wgZ2V0UGx1Z2luSW5mbyhjb25zdCBTdHJpbmcmIHBsdWdpblBhdGgsIFBsdWdpbk1vZHVsZUlu
Zm8mKTsKLQotICAgIGNvbnN0IFBsdWdpblF1aXJrcyYgcGx1Z2luUXVpcmtzKCkgY29uc3QgeyBy
ZXR1cm4gbV9wbHVnaW5RdWlya3M7IH0KLQotICAgIC8vIFJldHVybiBhIGxpc3Qgb2YgZG9tYWlu
cyBmb3Igd2hpY2ggdGhlIHBsdWctaW4gaGFzIGRhdGEgc3RvcmVkLgotICAgIFZlY3RvcjxTdHJp
bmc+IHNpdGVzV2l0aERhdGEoKTsKLQotICAgIC8vIFJlcXVlc3QgdGhhdCB0aGUgcGx1Zy1pbiBj
bGVhciB0aGUgc2l0ZSBkYXRhLgotICAgIGJvb2wgY2xlYXJTaXRlRGF0YShjb25zdCBTdHJpbmcm
IHNpdGUsIHVpbnQ2NF90IGZsYWdzLCB1aW50NjRfdCBtYXhBZ2UpOwotCi0gICAgTW9kdWxlKiBt
b2R1bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQotCi0jaWYgUExVR0lOX0FS
Q0hJVEVDVFVSRShVTklYKQotICAgIHN0YXRpYyBib29sIHNjYW5QbHVnaW4oY29uc3QgU3RyaW5n
JiBwbHVnaW5QYXRoKTsKLSAgICBzdGF0aWMgdm9pZCBwYXJzZU1JTUVEZXNjcmlwdGlvbihjb25z
dCBTdHJpbmcmIG1pbWVEZXNjcmlwdGlvbiwgVmVjdG9yPFdlYkNvcmU6Ok1pbWVDbGFzc0luZm8+
JiByZXN1bHQpOwotICAgIHN0YXRpYyBTdHJpbmcgYnVpbGRNSU1FRGVzY3JpcHRpb24oY29uc3Qg
VmVjdG9yPFdlYkNvcmU6Ok1pbWVDbGFzc0luZm8+Jik7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAg
ICBleHBsaWNpdCBOZXRzY2FwZVBsdWdpbk1vZHVsZShjb25zdCBTdHJpbmcmIHBsdWdpblBhdGgp
OwotCi0gICAgdm9pZCBkZXRlcm1pbmVRdWlya3MoKTsKLQotI2lmIFBMVUdJTl9BUkNISVRFQ1RV
UkUoVU5JWCkKLSAgICBib29sIGdldFBsdWdpbkluZm9Gb3JMb2FkZWRQbHVnaW4oUmF3UGx1Z2lu
TWV0YURhdGEmKTsKLSNlbmRpZgotCi0gICAgYm9vbCB0cnlHZXRTaXRlc1dpdGhEYXRhKFZlY3Rv
cjxTdHJpbmc+Jik7Ci0gICAgYm9vbCB0cnlDbGVhclNpdGVEYXRhKGNvbnN0IFN0cmluZyYgc2l0
ZSwgdWludDY0X3QgZmxhZ3MsIHVpbnQ2NF90IG1heEFnZSk7Ci0KLSAgICBib29sIHRyeUxvYWQo
KTsKLSAgICBib29sIGxvYWQoKTsKLSAgICB2b2lkIHVubG9hZCgpOwotCi0gICAgdm9pZCBzaHV0
ZG93bigpOwotCi0gICAgU3RyaW5nIG1fcGx1Z2luUGF0aDsKLSAgICBib29sIG1faXNJbml0aWFs
aXplZDsKLSAgICB1bnNpZ25lZCBtX2xvYWRDb3VudDsKLQotICAgIFBsdWdpblF1aXJrcyBtX3Bs
dWdpblF1aXJrczsKLQotICAgIE5QUF9TaHV0ZG93blByb2NQdHIgbV9zaHV0ZG93blByb2NQdHI7
Ci0gICAgTlBQbHVnaW5GdW5jcyBtX3BsdWdpbkZ1bmNzOwotCi0gICAgc3RkOjp1bmlxdWVfcHRy
PE1vZHVsZT4gbV9tb2R1bGU7Ci19OwotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNl
bmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2VuZGlmIC8vIE5ldHNjYXBl
UGx1Z2luTW9kdWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMv
TmV0c2NhcGUvUGx1Z2luSW5mb3JtYXRpb24uY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1
Z2lucy9OZXRzY2FwZS9QbHVnaW5JbmZvcm1hdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDY2NzczNGI0YTNhNTk5MzViZjA4ZDk0NTJhYmJhMDNkMGM2OTc5OTAuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9T
aGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9QbHVnaW5JbmZvcm1hdGlvbi5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJQbHVnaW5JbmZvcm1hdGlvbi5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCi0KLSNpbmNsdWRlICJBUElOdW1iZXIuaCIKLSNpbmNsdWRlICJBUElTdHJpbmcuaCIK
LSNpbmNsdWRlICJBUElVUkwuaCIKLSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKLSNpbmNs
dWRlICJQbHVnaW5Nb2R1bGVJbmZvLmgiCi0jaW5jbHVkZSAiV0tBUElDYXN0LmgiCi0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1TdHJpbmcg
cGx1Z2luSW5mb3JtYXRpb25CdW5kbGVJZGVudGlmaWVyS2V5KCkKLXsKLSAgICByZXR1cm4gIlBs
dWdpbkluZm9ybWF0aW9uQnVuZGxlSWRlbnRpZmllciJfczsKLX0KLQotU3RyaW5nIHBsdWdpbklu
Zm9ybWF0aW9uQnVuZGxlVmVyc2lvbktleSgpCi17Ci0gICAgcmV0dXJuICJQbHVnaW5JbmZvcm1h
dGlvbkJ1bmRsZVZlcnNpb24iX3M7Ci19Ci0KLVN0cmluZyBwbHVnaW5JbmZvcm1hdGlvbkJ1bmRs
ZVNob3J0VmVyc2lvbktleSgpCi17Ci0gICAgcmV0dXJuICJQbHVnaW5JbmZvcm1hdGlvbkJ1bmRs
ZVNob3J0VmVyc2lvbiJfczsKLX0KLQotU3RyaW5nIHBsdWdpbkluZm9ybWF0aW9uUGF0aEtleSgp
Ci17Ci0gICAgcmV0dXJuICJQbHVnaW5JbmZvcm1hdGlvblBhdGgiX3M7Ci19Ci0KLVN0cmluZyBw
bHVnaW5JbmZvcm1hdGlvbkRpc3BsYXlOYW1lS2V5KCkKLXsKLSAgICByZXR1cm4gIlBsdWdpbklu
Zm9ybWF0aW9uRGlzcGxheU5hbWUiX3M7Ci19Ci0KLVN0cmluZyBwbHVnaW5JbmZvcm1hdGlvbkRl
ZmF1bHRMb2FkUG9saWN5S2V5KCkKLXsKLSAgICByZXR1cm4gIlBsdWdpbkluZm9ybWF0aW9uRGVm
YXVsdExvYWRQb2xpY3kiX3M7Ci19Ci0KLVN0cmluZyBwbHVnaW5JbmZvcm1hdGlvblVwZGF0ZVBh
c3RMYXN0QmxvY2tlZFZlcnNpb25Jc0tub3duQXZhaWxhYmxlS2V5KCkKLXsKLSAgICByZXR1cm4g
IlBsdWdpbkluZm9ybWF0aW9uVXBkYXRlUGFzdExhc3RCbG9ja2VkVmVyc2lvbklzS25vd25BdmFp
bGFibGUiX3M7Ci19Ci0KLVN0cmluZyBwbHVnaW5JbmZvcm1hdGlvbkhhc1NhbmRib3hQcm9maWxl
S2V5KCkKLXsKLSAgICByZXR1cm4gIlBsdWdpbkluZm9ybWF0aW9uSGFzU2FuZGJveFByb2ZpbGUi
X3M7Ci19Ci0KLVN0cmluZyBwbHVnaW5JbmZvcm1hdGlvbkZyYW1lVVJMS2V5KCkKLXsKLSAgICBy
ZXR1cm4gIlBsdWdpbkluZm9ybWF0aW9uRnJhbWVVUkwiX3M7Ci19Ci0KLVN0cmluZyBwbHVnaW5J
bmZvcm1hdGlvbk1JTUVUeXBlS2V5KCkKLXsKLSAgICByZXR1cm4gIlBsdWdpbkluZm9ybWF0aW9u
TUlNRVR5cGUiX3M7Ci19Ci0KLVN0cmluZyBwbHVnaW5JbmZvcm1hdGlvblBhZ2VVUkxLZXkoKQot
ewotICAgIHJldHVybiAiUGx1Z2luSW5mb3JtYXRpb25QYWdlVVJMIl9zOwotfQotCi1TdHJpbmcg
cGx1Z2luSW5mb3JtYXRpb25QbHVnaW5zcGFnZUF0dHJpYnV0ZVVSTEtleSgpCi17Ci0gICAgcmV0
dXJuICJQbHVnaW5JbmZvcm1hdGlvblBsdWdpbnNwYWdlQXR0cmlidXRlVVJMIl9zOwotfQotCi1T
dHJpbmcgcGx1Z2luSW5mb3JtYXRpb25QbHVnaW5VUkxLZXkoKQotewotICAgIHJldHVybiAiUGx1
Z2luSW5mb3JtYXRpb25QbHVnaW5VUkwiX3M7Ci19Ci0KLVN0cmluZyBwbHVnSW5JbmZvcm1hdGlv
blJlcGxhY2VtZW50T2JzY3VyZWRLZXkoKQotewotICAgIHJldHVybiAiUGx1Z0luSW5mb3JtYXRp
b25SZXBsYWNlbWVudE9ic2N1cmVkIl9zOwotfQotCi12b2lkIGdldFBsdWdpbk1vZHVsZUluZm9y
bWF0aW9uKGNvbnN0IFBsdWdpbk1vZHVsZUluZm8mIHBsdWdpbiwgQVBJOjpEaWN0aW9uYXJ5OjpN
YXBUeXBlJiBtYXApCi17Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgbWFw
LnNldChwbHVnaW5JbmZvcm1hdGlvblBhdGhLZXkoKSwgQVBJOjpTdHJpbmc6OmNyZWF0ZShwbHVn
aW4ucGF0aCkpOwotICAgIG1hcC5zZXQocGx1Z2luSW5mb3JtYXRpb25EaXNwbGF5TmFtZUtleSgp
LCBBUEk6OlN0cmluZzo6Y3JlYXRlKHBsdWdpbi5pbmZvLm5hbWUpKTsKLSAgICBtYXAuc2V0KHBs
dWdpbkluZm9ybWF0aW9uRGVmYXVsdExvYWRQb2xpY3lLZXkoKSwgQVBJOjpVSW50NjQ6OmNyZWF0
ZSh0b1dLUGx1Z2luTG9hZFBvbGljeShQbHVnaW5JbmZvU3RvcmU6OmRlZmF1bHRMb2FkUG9saWN5
Rm9yUGx1Z2luKHBsdWdpbikpKSk7Ci0KLSAgICBnZXRQbGF0Zm9ybVBsdWdpbk1vZHVsZUluZm9y
bWF0aW9uKHBsdWdpbiwgbWFwKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHBsdWdpbik7Ci0g
ICAgVU5VU0VEX1BBUkFNKG1hcCk7Ci0jZW5kaWYKLX0KLQotUmVmPEFQSTo6RGljdGlvbmFyeT4g
Y3JlYXRlUGx1Z2luSW5mb3JtYXRpb25EaWN0aW9uYXJ5KGNvbnN0IFBsdWdpbk1vZHVsZUluZm8m
IHBsdWdpbikKLXsKLSAgICBBUEk6OkRpY3Rpb25hcnk6Ok1hcFR5cGUgbWFwOwotICAgIGdldFBs
dWdpbk1vZHVsZUluZm9ybWF0aW9uKHBsdWdpbiwgbWFwKTsKLQotICAgIHJldHVybiBBUEk6OkRp
Y3Rpb25hcnk6OmNyZWF0ZShXVEZNb3ZlKG1hcCkpOwotfQotCi1SZWY8QVBJOjpEaWN0aW9uYXJ5
PiBjcmVhdGVQbHVnaW5JbmZvcm1hdGlvbkRpY3Rpb25hcnkoY29uc3QgUGx1Z2luTW9kdWxlSW5m
byYgcGx1Z2luLCBjb25zdCBTdHJpbmcmIGZyYW1lVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgcGx1Z2lu
c3BhZ2VBdHRyaWJ1dGVVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgcGx1Z2luVVJMU3RyaW5nLCBi
b29sIHJlcGxhY2VtZW50T2JzY3VyZWQpCi17Ci0gICAgQVBJOjpEaWN0aW9uYXJ5OjpNYXBUeXBl
IG1hcDsKLSAgICBnZXRQbHVnaW5Nb2R1bGVJbmZvcm1hdGlvbihwbHVnaW4sIG1hcCk7Ci0KLSAg
ICBpZiAoIWZyYW1lVVJMU3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgbWFwLnNldChwbHVnaW5J
bmZvcm1hdGlvbkZyYW1lVVJMS2V5KCksIEFQSTo6VVJMOjpjcmVhdGUoZnJhbWVVUkxTdHJpbmcp
KTsKLSAgICBpZiAoIW1pbWVUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgbWFwLnNldChwbHVnaW5J
bmZvcm1hdGlvbk1JTUVUeXBlS2V5KCksIEFQSTo6U3RyaW5nOjpjcmVhdGUobWltZVR5cGUpKTsK
LSAgICBpZiAoIXBhZ2VVUkxTdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICBtYXAuc2V0KHBsdWdp
bkluZm9ybWF0aW9uUGFnZVVSTEtleSgpLCBBUEk6OlVSTDo6Y3JlYXRlKHBhZ2VVUkxTdHJpbmcp
KTsKLSAgICBpZiAoIXBsdWdpbnNwYWdlQXR0cmlidXRlVVJMU3RyaW5nLmlzRW1wdHkoKSkKLSAg
ICAgICAgbWFwLnNldChwbHVnaW5JbmZvcm1hdGlvblBsdWdpbnNwYWdlQXR0cmlidXRlVVJMS2V5
KCksIEFQSTo6VVJMOjpjcmVhdGUocGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkxTdHJpbmcpKTsKLSAg
ICBpZiAoIXBsdWdpblVSTFN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIG1hcC5zZXQocGx1Z2lu
SW5mb3JtYXRpb25QbHVnaW5VUkxLZXkoKSwgQVBJOjpVUkw6OmNyZWF0ZShwbHVnaW5VUkxTdHJp
bmcpKTsKLSAgICBtYXAuc2V0KHBsdWdJbkluZm9ybWF0aW9uUmVwbGFjZW1lbnRPYnNjdXJlZEtl
eSgpLCBBUEk6OkJvb2xlYW46OmNyZWF0ZShyZXBsYWNlbWVudE9ic2N1cmVkKSk7Ci0KLSAgICBy
ZXR1cm4gQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGTW92ZShtYXApKTsKLX0KLQotUmVmPEFQ
STo6RGljdGlvbmFyeT4gY3JlYXRlUGx1Z2luSW5mb3JtYXRpb25EaWN0aW9uYXJ5KGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgZnJhbWVVUkxTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcGFnZVVSTFN0cmluZykKLXsKLSAgICBBUEk6OkRpY3Rpb25hcnk6Ok1hcFR5cGUgbWFwOwot
Ci0gICAgaWYgKCFmcmFtZVVSTFN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIG1hcC5zZXQocGx1
Z2luSW5mb3JtYXRpb25GcmFtZVVSTEtleSgpLCBBUEk6OlVSTDo6Y3JlYXRlKGZyYW1lVVJMU3Ry
aW5nKSk7Ci0gICAgaWYgKCFtaW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIG1hcC5zZXQocGx1
Z2luSW5mb3JtYXRpb25NSU1FVHlwZUtleSgpLCBBUEk6OlN0cmluZzo6Y3JlYXRlKG1pbWVUeXBl
KSk7Ci0gICAgaWYgKCFwYWdlVVJMU3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgbWFwLnNldChw
bHVnaW5JbmZvcm1hdGlvblBhZ2VVUkxLZXkoKSwgQVBJOjpVUkw6OmNyZWF0ZShwYWdlVVJMU3Ry
aW5nKSk7Ci0KLSAgICByZXR1cm4gQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGTW92ZShtYXAp
KTsKLX0KLQotI2lmICFQTEFURk9STShDT0NPQSkKLXZvaWQgZ2V0UGxhdGZvcm1QbHVnaW5Nb2R1
bGVJbmZvcm1hdGlvbihjb25zdCBQbHVnaW5Nb2R1bGVJbmZvJiwgQVBJOjpEaWN0aW9uYXJ5OjpN
YXBUeXBlJikKLXsKLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
IC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9QbHVnaW5JbmZvcm1hdGlvbi5oIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9QbHVnaW5JbmZvcm1hdGlvbi5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjllODVhMGE0ZDFjMzFiNzUwNTg5MjYwMzgzMDgxMTk5
MWU3MmE4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvUGx1Z2luSW5mb3JtYXRpb24uaAor
KysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFBsdWdp
bkluZm9ybWF0aW9uX2gKLSNkZWZpbmUgUGx1Z2luSW5mb3JtYXRpb25faAotCi0jaW5jbHVkZSAi
QVBJRGljdGlvbmFyeS5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1zdHJ1Y3QgUGx1Z2luTW9kdWxlSW5mbzsKLQotLy8gUGx1Zy1pbiBtb2R1bGUg
aW5mb3JtYXRpb24ga2V5cwotU3RyaW5nIHBsdWdpbkluZm9ybWF0aW9uQnVuZGxlSWRlbnRpZmll
cktleSgpOwotU3RyaW5nIHBsdWdpbkluZm9ybWF0aW9uQnVuZGxlVmVyc2lvbktleSgpOwotU3Ry
aW5nIHBsdWdpbkluZm9ybWF0aW9uQnVuZGxlU2hvcnRWZXJzaW9uS2V5KCk7Ci1TdHJpbmcgcGx1
Z2luSW5mb3JtYXRpb25QYXRoS2V5KCk7Ci1TdHJpbmcgcGx1Z2luSW5mb3JtYXRpb25EaXNwbGF5
TmFtZUtleSgpOwotU3RyaW5nIHBsdWdpbkluZm9ybWF0aW9uRGVmYXVsdExvYWRQb2xpY3lLZXko
KTsKLVN0cmluZyBwbHVnaW5JbmZvcm1hdGlvblVwZGF0ZVBhc3RMYXN0QmxvY2tlZFZlcnNpb25J
c0tub3duQXZhaWxhYmxlS2V5KCk7Ci1TdHJpbmcgcGx1Z2luSW5mb3JtYXRpb25IYXNTYW5kYm94
UHJvZmlsZUtleSgpOwotCi0vLyBQbHVnLWluIGxvYWQgc3BlY2lmaWMgaW5mb3JtYXRpb24ga2V5
cwotU3RyaW5nIHBsdWdpbkluZm9ybWF0aW9uRnJhbWVVUkxLZXkoKTsKLVN0cmluZyBwbHVnaW5J
bmZvcm1hdGlvbk1JTUVUeXBlS2V5KCk7Ci1TdHJpbmcgcGx1Z2luSW5mb3JtYXRpb25QYWdlVVJM
S2V5KCk7Ci1TdHJpbmcgcGx1Z2luSW5mb3JtYXRpb25QbHVnaW5zcGFnZUF0dHJpYnV0ZVVSTEtl
eSgpOwotU3RyaW5nIHBsdWdpbkluZm9ybWF0aW9uUGx1Z2luVVJMS2V5KCk7Ci1TdHJpbmcgcGx1
Z0luSW5mb3JtYXRpb25SZXBsYWNlbWVudE9ic2N1cmVkS2V5KCk7Ci0KLVJlZjxBUEk6OkRpY3Rp
b25hcnk+IGNyZWF0ZVBsdWdpbkluZm9ybWF0aW9uRGljdGlvbmFyeShjb25zdCBQbHVnaW5Nb2R1
bGVJbmZvJik7Ci1SZWY8QVBJOjpEaWN0aW9uYXJ5PiBjcmVhdGVQbHVnaW5JbmZvcm1hdGlvbkRp
Y3Rpb25hcnkoY29uc3QgUGx1Z2luTW9kdWxlSW5mbyYsIGNvbnN0IFN0cmluZyYgZnJhbWVVUkxT
dHJpbmcsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgcGFnZVVSTFN0cmlu
ZywgY29uc3QgU3RyaW5nJiBwbHVnaW5zcGFnZUF0dHJpYnV0ZVVSTFN0cmluZywgY29uc3QgU3Ry
aW5nJiBwbHVnaW5VUkxTdHJpbmcsIGJvb2wgcmVwbGFjZW1lbnRPYnNjdXJlZCA9IGZhbHNlKTsK
LVJlZjxBUEk6OkRpY3Rpb25hcnk+IGNyZWF0ZVBsdWdpbkluZm9ybWF0aW9uRGljdGlvbmFyeShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGZyYW1lVVJMU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHBhZ2VVUkxTdHJpbmcpOwotCi12b2lkIGdldFBsdWdpbk1vZHVsZUluZm9ybWF0
aW9uKGNvbnN0IFBsdWdpbk1vZHVsZUluZm8mLCBBUEk6OkRpY3Rpb25hcnk6Ok1hcFR5cGUmKTsK
LXZvaWQgZ2V0UGxhdGZvcm1QbHVnaW5Nb2R1bGVJbmZvcm1hdGlvbihjb25zdCBQbHVnaW5Nb2R1
bGVJbmZvJiwgQVBJOjpEaWN0aW9uYXJ5OjpNYXBUeXBlJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi0jZW5kaWYgLy8gUGx1Z2luSW5mb3JtYXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9tYWMvTmV0c2NhcGVQbHVnaW5Nb2R1bGVN
YWMubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL21hYy9OZXRzY2Fw
ZVBsdWdpbk1vZHVsZU1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmMzYTE3
ZWE5OTY5OWNjMjdmMTAxY2Q3ZTczNTBhNjk5MjYzM2Q5OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL05l
dHNjYXBlL21hYy9OZXRzY2FwZVBsdWdpbk1vZHVsZU1hYy5tbQorKysgL2Rldi9udWxsCkBAIC0x
LDI3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJO
ZXRzY2FwZVBsdWdpbk1vZHVsZS5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0KLSNpbXBvcnQgIlBsdWdpblByb2Nlc3NQcm94eS5oIgotI2ltcG9ydCAiUGx1Z2luU2FuZGJv
eFByb2ZpbGUuaCIKLSNpbXBvcnQgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW1wb3J0IDx3dGYvTWFpblRo
cmVhZC5oPgotI2ltcG9ydCA8d3RmL2NmL1R5cGVDYXN0c0NGLmg+Ci0jaW1wb3J0IDx3dGYvc3Bp
L2NmL0NGQnVuZGxlU1BJLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252
ZXJzaW9uLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgYm9vbCBnZXRQbHVnaW5B
cmNoaXRlY3R1cmUoQ0ZCdW5kbGVSZWYgYnVuZGxlLCBQbHVnaW5Nb2R1bGVJbmZvJiBwbHVnaW4p
Ci17Ci0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IHBsdWdpbkFyY2hpdGVjdHVyZXNBcnJheSA9
IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5RXhlY3V0YWJsZUFyY2hpdGVjdHVyZXMoYnVuZGxlKSk7Ci0g
ICAgaWYgKCFwbHVnaW5BcmNoaXRlY3R1cmVzQXJyYXkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIC8vIFR1cm4gdGhlIGFycmF5IGludG8gYSBzZXQuCi0gICAgSGFzaFNldDx1bnNpZ25l
ZD4gYXJjaGl0ZWN0dXJlczsKLSAgICBmb3IgKENGSW5kZXggaSA9IDAsIG51bVBsdWdpbkFyY2hp
dGVjdHVyZXMgPSBDRkFycmF5R2V0Q291bnQocGx1Z2luQXJjaGl0ZWN0dXJlc0FycmF5LmdldCgp
KTsgaSA8IG51bVBsdWdpbkFyY2hpdGVjdHVyZXM7ICsraSkgewotICAgICAgICBDRk51bWJlclJl
ZiBudW1iZXIgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRl
eChwbHVnaW5BcmNoaXRlY3R1cmVzQXJyYXkuZ2V0KCksIGkpKTsKLSAgICAgICAgCi0gICAgICAg
IFNJbnQzMiBhcmNoaXRlY3R1cmU7Ci0gICAgICAgIGlmICghQ0ZOdW1iZXJHZXRWYWx1ZShudW1i
ZXIsIGtDRk51bWJlclNJbnQzMlR5cGUsICZhcmNoaXRlY3R1cmUpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGFyY2hpdGVjdHVyZXMuYWRkKGFyY2hpdGVjdHVyZSk7Ci0gICAgfQot
ICAgIAotI2lmZGVmIF9feDg2XzY0X18KLSAgICAvLyBXZSBvbmx5IHN1cHBvcnQgNjQtYml0IElu
dGVsIHBsdWctaW5zIG9uIDY0LWJpdCBJbnRlbC4KLSAgICBpZiAoYXJjaGl0ZWN0dXJlcy5jb250
YWlucyhrQ0ZCdW5kbGVFeGVjdXRhYmxlQXJjaGl0ZWN0dXJlWDg2XzY0KSkgewotICAgICAgICBw
bHVnaW4ucGx1Z2luQXJjaGl0ZWN0dXJlID0gQ1BVX1RZUEVfWDg2XzY0OwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGlj
IGJvb2wgZ2V0UGx1Z2luSW5mb0Zyb21Qcm9wZXJ0eUxpc3RzKENGQnVuZGxlUmVmIGJ1bmRsZSwg
UGx1Z2luTW9kdWxlSW5mbyYgcGx1Z2luKQotewotICAgIFJldGFpblB0ciBtaW1lVHlwZXMgPSBk
eW5hbWljX2NmX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkJ1bmRsZUdldFZhbHVlRm9ySW5mb0Rp
Y3Rpb25hcnlLZXkoYnVuZGxlLCBDRlNUUigiV2ViUGx1Z2luTUlNRVR5cGVzIikpKTsKLSAgICBp
ZiAoIW1pbWVUeXBlcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gR2V0IHRoZSBw
bHVnLWluIG5hbWUuCi0gICAgYXV0byBwbHVnaW5OYW1lID0gZHluYW1pY19jZl9jYXN0PENGU3Ry
aW5nUmVmPihDRkJ1bmRsZUdldFZhbHVlRm9ySW5mb0RpY3Rpb25hcnlLZXkoYnVuZGxlLCBDRlNU
UigiV2ViUGx1Z2luTmFtZSIpKSk7Ci0gICAgaWYgKHBsdWdpbk5hbWUpCi0gICAgICAgIHBsdWdp
bi5pbmZvLm5hbWUgPSBwbHVnaW5OYW1lOwotICAgIAotICAgIC8vIEdldCB0aGUgcGx1Zy1pbiBk
ZXNjcmlwdGlvbi4KLSAgICBhdXRvIHBsdWdpbkRlc2NyaXB0aW9uID0gZHluYW1pY19jZl9jYXN0
PENGU3RyaW5nUmVmPihDRkJ1bmRsZUdldFZhbHVlRm9ySW5mb0RpY3Rpb25hcnlLZXkoYnVuZGxl
LCBDRlNUUigiV2ViUGx1Z2luRGVzY3JpcHRpb24iKSkpOwotICAgIGlmIChwbHVnaW5EZXNjcmlw
dGlvbikKLSAgICAgICAgcGx1Z2luLmluZm8uZGVzYyA9IHBsdWdpbkRlc2NyaXB0aW9uOwotICAg
IAotICAgIC8vIEdldCB0aGUgTUlNRSB0eXBlIG1hcHBpbmcgZGljdGlvbmFyeS4KLSAgICBDRklu
ZGV4IG51bU1pbWVUeXBlcyA9IENGRGljdGlvbmFyeUdldENvdW50KG1pbWVUeXBlcy5nZXQoKSk7
ICAgICAgICAgIAotICAgIFZlY3RvcjxDRlR5cGVSZWY+IG1pbWVUeXBlc1ZlY3RvcihudW1NaW1l
VHlwZXMpOwotICAgIFZlY3RvcjxDRlR5cGVSZWY+IG1pbWVUeXBlSW5mb1ZlY3RvcihudW1NaW1l
VHlwZXMpOwotICAgIENGRGljdGlvbmFyeUdldEtleXNBbmRWYWx1ZXMobWltZVR5cGVzLmdldCgp
LCBtaW1lVHlwZXNWZWN0b3IuZGF0YSgpLCBtaW1lVHlwZUluZm9WZWN0b3IuZGF0YSgpKTsKLSAg
ICAKLSAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBudW1NaW1lVHlwZXM7ICsraSkgewotICAg
ICAgICBXZWJDb3JlOjpNaW1lQ2xhc3NJbmZvIG1pbWVDbGFzc0luZm87Ci0gICAgICAgIAotICAg
ICAgICAvLyBJZiB0aGlzIE1JTUUgdHlwZSBpcyBpbnZhbGlkLCBpZ25vcmUgaXQuCi0gICAgICAg
IGF1dG8gbWltZVR5cGUgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KG1pbWVUeXBlc1Zl
Y3RvcltpXSk7Ci0gICAgICAgIGlmICghbWltZVR5cGUgfHwgIUNGU3RyaW5nR2V0TGVuZ3RoKG1p
bWVUeXBlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIElmIHRoaXMgTUlN
RSB0eXBlIGRvZXNuJ3QgaGF2ZSBhIHZhbGlkIGluZm8gZGljdGlvbmFyeSwgaWdub3JlIGl0Lgot
ICAgICAgICBhdXRvIG1pbWVUeXBlSW5mbyA9IGR5bmFtaWNfY2ZfY2FzdDxDRkRpY3Rpb25hcnlS
ZWY+KG1pbWVUeXBlSW5mb1ZlY3RvcltpXSk7Ci0gICAgICAgIGlmICghbWltZVR5cGVJbmZvKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIHN0b3Jp
bmcgZGlzYWJsZWQgTUlNRSB0eXBlcy4KLSAgICAgICAgYXV0byBpc0VuYWJsZWQgPSBDRkRpY3Rp
b25hcnlHZXRWYWx1ZShtaW1lVHlwZUluZm8sIENGU1RSKCJXZWJQbHVnaW5UeXBlRW5hYmxlZCIp
KTsKLSAgICAgICAgaWYgKGlzRW5hYmxlZCkgewotICAgICAgICAgICAgaWYgKGF1dG8gbnVtYmVy
ID0gZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihpc0VuYWJsZWQpKSB7Ci0gICAgICAgICAg
ICAgICAgaW50IHZhbHVlOwotICAgICAgICAgICAgICAgIGlmICghQ0ZOdW1iZXJHZXRWYWx1ZShu
dW1iZXIsIGtDRk51bWJlckludFR5cGUsICZ2YWx1ZSkgfHwgIXZhbHVlKQotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNFbmFibGVkICE9IGtD
RkJvb2xlYW5UcnVlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbWltZUNsYXNzSW5mby50eXBlID0gU3RyaW5nKG1pbWVUeXBlKS5jb252ZXJ0VG9BU0NJ
SUxvd2VyY2FzZSgpOwotICAgICAgICBtaW1lQ2xhc3NJbmZvLmRlc2MgPSBkeW5hbWljX2NmX2Nh
c3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG1pbWVUeXBlSW5mbywgQ0ZTVFIo
IldlYlBsdWdpblR5cGVEZXNjcmlwdGlvbiIpKSk7Ci0KLSAgICAgICAgLy8gTm93IGdldCB0aGUg
ZXh0ZW5zaW9ucyBmb3IgdGhpcyBNSU1FIHR5cGUuCi0gICAgICAgIENGSW5kZXggbnVtRXh0ZW5z
aW9ucyA9IDA7Ci0gICAgICAgIGF1dG8gZXh0ZW5zaW9uc0FycmF5ID0gZHluYW1pY19jZl9jYXN0
PENGQXJyYXlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKG1pbWVUeXBlSW5mbywgQ0ZTVFIoIldl
YlBsdWdpbkV4dGVuc2lvbnMiKSkpOwotICAgICAgICBpZiAoZXh0ZW5zaW9uc0FycmF5KQotICAg
ICAgICAgICAgbnVtRXh0ZW5zaW9ucyA9IENGQXJyYXlHZXRDb3VudChleHRlbnNpb25zQXJyYXkp
OwotCi0gICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IG51bUV4dGVuc2lvbnM7ICsraSkg
ewotICAgICAgICAgICAgYXV0byBleHRlbnNpb24gPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZTdHJpbmdS
ZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoZXh0ZW5zaW9uc0FycmF5LCBpKSk7Ci0gICAgICAg
ICAgICBpZiAoIWV4dGVuc2lvbikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAgICAgLy8gVGhlIERpdlggcGx1Zy1pbiBsaXN0cyBtdWx0aXBsZSBleHRlbnNpb25zIGluIGEg
Y29tbWEgc2VwYXJhdGVkIHN0cmluZyBpbnN0ZWFkIG9mIHVzaW5nCi0gICAgICAgICAgICAvLyBt
dWx0aXBsZSBhcnJheSBlbGVtZW50cyBpbiB0aGUgcHJvcGVydHkgbGlzdC4gV29yayBhcm91bmQg
dGhpcyBoZXJlIGJ5IHNwbGl0dGluZyB0aGUKLSAgICAgICAgICAgIC8vIGV4dGVuc2lvbiBzdHJp
bmcgaW50byBjb21wb25lbnRzLgotICAgICAgICAgICAgZm9yIChhdXRvJiBjb21wb25lbnQgOiBT
dHJpbmcoZXh0ZW5zaW9uKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpLnNwbGl0KCcsJykpCi0g
ICAgICAgICAgICAgICAgbWltZUNsYXNzSW5mby5leHRlbnNpb25zLmFwcGVuZChjb21wb25lbnQp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWRkIHRoaXMgTUlNRSB0eXBlLgotICAgICAgICBw
bHVnaW4uaW5mby5taW1lcy5hcHBlbmQobWltZUNsYXNzSW5mbyk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7ICAgIAotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luTW9kdWxlOjpnZXRQbHVnaW5J
bmZvKGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCwgUGx1Z2luTW9kdWxlSW5mbyYgcGx1Z2luKQot
ewotICAgIGF1dG8gYnVuZGxlVVJMID0gYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVt
UGF0aChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwbHVnaW5QYXRoLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0
KCksIGtDRlVSTFBPU0lYUGF0aFN0eWxlLCBmYWxzZSkpOwotICAgIAotICAgIC8vIFRyeSB0byBp
bml0aWFsaXplIHRoZSBidW5kbGUuCi0gICAgYXV0byBidW5kbGUgPSBhZG9wdENGKF9DRkJ1bmRs
ZUNyZWF0ZVVuaXF1ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBidW5kbGVVUkwuZ2V0KCkpKTsKLSAg
ICBpZiAoIWJ1bmRsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIC8vIENoZWNr
IGlmIHRoaXMgYnVuZGxlIGlzIGFuIE5QQVBJIHBsdWctaW4uCi0gICAgVUludDMyIHBhY2thZ2VU
eXBlID0gMDsKLSAgICBDRkJ1bmRsZUdldFBhY2thZ2VJbmZvKGJ1bmRsZS5nZXQoKSwgJnBhY2th
Z2VUeXBlLCAwKTsKLSAgICBpZiAocGFja2FnZVR5cGUgIT0gRk9VUl9DSEFSX0NPREUoJ0JSUEwn
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgdGhlIGFy
Y2hpdGVjdHVyZSBpcyB2YWxpZC4KLSAgICBpZiAoIWdldFBsdWdpbkFyY2hpdGVjdHVyZShidW5k
bGUuZ2V0KCksIHBsdWdpbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHBsdWdpbi5w
YXRoID0gcGx1Z2luUGF0aDsKLSAgICBwbHVnaW4uYnVuZGxlSWRlbnRpZmllciA9IENGQnVuZGxl
R2V0SWRlbnRpZmllcihidW5kbGUuZ2V0KCkpOwotICAgIHBsdWdpbi52ZXJzaW9uU3RyaW5nID0g
ZHluYW1pY19jZl9jYXN0PENGU3RyaW5nUmVmPihDRkJ1bmRsZUdldFZhbHVlRm9ySW5mb0RpY3Rp
b25hcnlLZXkoYnVuZGxlLmdldCgpLCBrQ0ZCdW5kbGVWZXJzaW9uS2V5KSk7Ci0gICAgcGx1Z2lu
LnNob3J0VmVyc2lvblN0cmluZyA9IGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZCdW5k
bGVHZXRWYWx1ZUZvckluZm9EaWN0aW9uYXJ5S2V5KGJ1bmRsZS5nZXQoKSwgQ0ZTVFIoIkNGQnVu
ZGxlU2hvcnRWZXJzaW9uU3RyaW5nIikpKTsKLQotICAgIGlmICghZ2V0UGx1Z2luSW5mb0Zyb21Q
cm9wZXJ0eUxpc3RzKGJ1bmRsZS5nZXQoKSwgcGx1Z2luKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcGx1Z2luLmhhc1NhbmRib3hQcm9maWxlID0gcGx1Z2luSGFzU2FuZGJveFByb2Zp
bGUocGx1Z2luLmJ1bmRsZUlkZW50aWZpZXIpOwotCi0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVm
PiBmaWxlbmFtZSA9IGFkb3B0Q0YoQ0ZVUkxDb3B5TGFzdFBhdGhDb21wb25lbnQoYnVuZGxlVVJM
LmdldCgpKSk7Ci0gICAgcGx1Z2luLmluZm8uZmlsZSA9IGZpbGVuYW1lLmdldCgpOwotICAgIAot
ICAgIGlmIChwbHVnaW4uaW5mby5uYW1lLmlzTnVsbCgpKQotICAgICAgICBwbHVnaW4uaW5mby5u
YW1lID0gcGx1Z2luLmluZm8uZmlsZTsKLSAgICBpZiAocGx1Z2luLmluZm8uZGVzYy5pc051bGwo
KSkKLSAgICAgICAgcGx1Z2luLmluZm8uZGVzYyA9IHBsdWdpbi5pbmZvLmZpbGU7Ci0KLSAgICBw
bHVnaW4uaW5mby5pc0FwcGxpY2F0aW9uUGx1Z2luID0gZmFsc2U7Ci0gICAgcGx1Z2luLmluZm8u
Y2xpZW50TG9hZFBvbGljeSA9IFdlYkNvcmU6OlBsdWdpbkxvYWRDbGllbnRQb2xpY3k6OlVuZGVm
aW5lZDsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgcGx1Z2luLmluZm8uYnVuZGxlSWRlbnRpZmll
ciA9IHBsdWdpbi5idW5kbGVJZGVudGlmaWVyOwotICAgIHBsdWdpbi5pbmZvLnZlcnNpb25TdHJp
bmcgPSBwbHVnaW4udmVyc2lvblN0cmluZzsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLS8vIEZJWE1FOiBUaGlzIGRvZXNuJ3QgbmVlZCB0byBiZSBwbGF0Zm9ybS1zcGVjaWZpYy4K
LWNsYXNzIFBsdWdpblZlcnNpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQbHVnaW5WZXJzaW9u
IHBhcnNlKGNvbnN0IFN0cmluZyYgdmVyc2lvblN0cmluZyk7Ci0KLSAgICBib29sIGlzTGVzc1Ro
YW4odW5zaWduZWQgY29tcG9uZW50QSkgY29uc3Q7Ci0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Qg
eyByZXR1cm4gIW1fdmVyc2lvbkNvbXBvbmVudHMuaXNFbXB0eSgpOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgUGx1Z2luVmVyc2lvbigpCi0gICAgewotICAgIH0KLQotICAgIFZlY3Rvcjx1bnNpZ25lZCwg
ND4gbV92ZXJzaW9uQ29tcG9uZW50czsKLX07Ci0KLVBsdWdpblZlcnNpb24gUGx1Z2luVmVyc2lv
bjo6cGFyc2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9uU3RyaW5nKQotewotICAgIFBsdWdpblZlcnNp
b24gdmVyc2lvbjsKLSAgICBmb3IgKGF1dG8gY29tcG9uZW50IDogU3RyaW5nVmlldyB7IHZlcnNp
b25TdHJpbmcgfS5zcGxpdCgnLicpKSB7Ci0gICAgICAgIGF1dG8gdmVyc2lvbkNvbXBvbmVudCA9
IHBhcnNlSW50ZWdlckFsbG93aW5nVHJhaWxpbmdKdW5rPHVuc2lnbmVkPihjb21wb25lbnQpOwot
ICAgICAgICBpZiAoIXZlcnNpb25Db21wb25lbnQpCi0gICAgICAgICAgICByZXR1cm4geyB9Owot
ICAgICAgICB2ZXJzaW9uLm1fdmVyc2lvbkNvbXBvbmVudHMuYXBwZW5kKCp2ZXJzaW9uQ29tcG9u
ZW50KTsKLSAgICB9Ci0gICAgcmV0dXJuIHZlcnNpb247Ci19Ci0KLWJvb2wgUGx1Z2luVmVyc2lv
bjo6aXNMZXNzVGhhbih1bnNpZ25lZCBjb21wb25lbnRBKSBjb25zdAotewotICAgIEFTU0VSVChp
c1ZhbGlkKCkpOwotCi0gICAgcmV0dXJuIG1fdmVyc2lvbkNvbXBvbmVudHNbMF0gPCBjb21wb25l
bnRBOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luTW9kdWxlOjpkZXRlcm1pbmVRdWlya3MoKQot
ewotICAgIFBsdWdpbk1vZHVsZUluZm8gcGx1Z2luOwotICAgIGlmICghZ2V0UGx1Z2luSW5mbyht
X3BsdWdpblBhdGgsIHBsdWdpbikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwbHVnaW4u
YnVuZGxlSWRlbnRpZmllciA9PSAiY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyLnBsdWdpbiIp
IHsKLSAgICAgICAgLy8gRmxhc2ggcmVxdWlyZXMgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIG9mIGdl
dHByb2duYW1lKCkgYmUgIldlYktpdFBsdWdpbkhvc3QiLgotICAgICAgICBtX3BsdWdpblF1aXJr
cy5hZGQoUGx1Z2luUXVpcmtzOjpQcm9nbmFtZVNob3VsZEJlV2ViS2l0UGx1Z2luSG9zdCk7Ci0K
LSAgICAgICAgLy8gRmxhc2ggc3VwcG9ydHMgc25hcHNob3R0aW5nLgotICAgICAgICBtX3BsdWdp
blF1aXJrcy5hZGQoUGx1Z2luUXVpcmtzOjpTdXBwb3J0c1NuYXBzaG90dGluZyk7Ci0KLSAgICAg
ICAgLy8gRmxhc2ggcmV0dXJucyBhIHJldGFpbmVkIENvcmUgQW5pbWF0aW9uIGxheWVyLgotICAg
ICAgICBtX3BsdWdpblF1aXJrcy5hZGQoUGx1Z2luUXVpcmtzOjpSZXR1cm5zUmV0YWluZWRDb3Jl
QW5pbWF0aW9uTGF5ZXIpOwotCi0gICAgICAgIC8vIEZsYXNoIGhhcyBhIGJ1ZyB3aGVyZSBOU0V4
Y2VwdGlvbnMgY2FuIGJlIHJlbGVhc2VkIHRvbyBlYXJseS4KLSAgICAgICAgbV9wbHVnaW5RdWly
a3MuYWRkKFBsdWdpblF1aXJrczo6TGVha0FsbFRocm93bk5TRXhjZXB0aW9ucyk7Ci0gICAgfQot
Ci0gICAgaWYgKHBsdWdpbi5idW5kbGVJZGVudGlmaWVyID09ICJjb20ubWljcm9zb2Z0LlNpbHZl
cmxpZ2h0UGx1Z2luIikgewotICAgICAgICAvLyBTaWx2ZXJsaWdodCBkb2Vzbid0IGV4cGxpY2l0
bHkgb3B0IGludG8gdHJhbnNwYXJlbmN5LCBzbyB3ZSdsbCBkbyBpdCB3aGVuZXZlcgotICAgICAg
ICAvLyB0aGVyZSdzIGEgJ2JhY2tncm91bmQnIGF0dHJpYnV0ZSB0aGF0J3Mgc2V0IHRvIGEgdHJh
bnNwYXJlbnQgY29sb3IuCi0gICAgICAgIG1fcGx1Z2luUXVpcmtzLmFkZChQbHVnaW5RdWlya3M6
Ok1ha2VPcGFxdWVVbmxlc3NUcmFuc3BhcmVudFNpbHZlcmxpZ2h0QmFja2dyb3VuZEF0dHJpYnV0
ZUV4aXN0cyk7Ci0KLSAgICAgICAgLy8gU2lsdmVybGlnaHQgaGFzIGEgd29ya2Fyb3VuZCBmb3Ig
YSBsZWFrIGluIFNhZmFyaSAyLiBUaGlzIHdvcmthcm91bmQgaXMKLSAgICAgICAgLy8gYXBwbGll
ZCB3aGVuIHRoZSB1c2VyIGFnZW50IGRvZXMgbm90IGNvbnRhaW4gIlZlcnNpb24vMyIgc28gd2Ug
YXBwZW5kIGl0Ci0gICAgICAgIC8vIGF0IHRoZSBlbmQgb2YgdGhlIHVzZXIgYWdlbnQuCi0gICAg
ICAgIG1fcGx1Z2luUXVpcmtzLmFkZChQbHVnaW5RdWlya3M6OkFwcGVuZFZlcnNpb24zVXNlckFn
ZW50KTsKLQotICAgICAgICBQbHVnaW5WZXJzaW9uIHBsdWdpblZlcnNpb24gPSBQbHVnaW5WZXJz
aW9uOjpwYXJzZShwbHVnaW4udmVyc2lvblN0cmluZyk7Ci0gICAgICAgIGlmIChwbHVnaW5WZXJz
aW9uLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgaWYgKHBsdWdpblZlcnNpb24uaXNMZXNzVGhh
big0KSkgewotICAgICAgICAgICAgICAgIC8vIFZlcnNpb25zIG9mIFNpbHZlcmxpZ2h0IHByaW9y
IHRvIDQgZG9uJ3QgcmV0YWluIHRoZSBzY3JpcHRhYmxlIE5QT2JqZWN0LgotICAgICAgICAgICAg
ICAgIG1fcGx1Z2luUXVpcmtzLmFkZChQbHVnaW5RdWlya3M6OlJldHVybnNOb25SZXRhaW5lZFNj
cmlwdGFibGVOUE9iamVjdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAocGx1Z2luLmJ1bmRsZUlkZW50aWZpZXIgPT0gImNvbS5hcHBsZS5pc3QuZHMuYXBwbGVj
b25uZWN0LndlYnBsdWdpbiIpIHsKLSAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzg0NDA5MDM+
OiBBcHBsZUNvbm5lY3QgaGFzIGEgYnVnIHdoZXJlIGl0IGRvZXMgbm90Ci0gICAgICAgIC8vIHVu
ZGVyc3RhbmQgdGhlIHBhcmFtZXRlciBuYW1lcyBzcGVjaWZpZWQgaW4gdGhlIDxvYmplY3Q+IGVs
ZW1lbnQgdGhhdAotICAgICAgICAvLyBlbWJlZHMgaXRzIHBsdWctaW4uIAotICAgICAgICBtX3Bs
dWdpblF1aXJrcy5hZGQoUGx1Z2luUXVpcmtzOjpXYW50c0xvd2VyY2FzZVBhcmFtZXRlck5hbWVz
KTsKLSAgICB9Ci0KLSAgICBpZiAocGx1Z2luLmJ1bmRsZUlkZW50aWZpZXIgPT0gImNvbS5hZG9i
ZS5hY3JvYmF0LnBkZnZpZXdlck5QQVBJIiB8fCBwbHVnaW4uYnVuZGxlSWRlbnRpZmllciA9PSAi
Y29tLmFwcGxlLnRlc3RuZXRzY2FwZXBsdWdpbiIpIHsKLSAgICAgICAgLy8gVGhlIEFkb2JlIFJl
YWRlciBwbHVnLWluIHdhbnRzIHdoZWVsIGV2ZW50cy4KLSAgICAgICAgbV9wbHVnaW5RdWlya3Mu
YWRkKFBsdWdpblF1aXJrczo6V2FudHNXaGVlbEV2ZW50cyk7Ci0gICAgfQotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9tYWMvUGx1
Z2luSW5mb3JtYXRpb25NYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5zL05ldHNj
YXBlL21hYy9QbHVnaW5JbmZvcm1hdGlvbk1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNjc5YTQzOGE5MDk4OGM3ZThiN2FmYzE3MGU4MDgyNzFmZTY0YjY4Zi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9QbHVnaW5zL05ldHNjYXBlL21hYy9QbHVnaW5JbmZvcm1hdGlvbk1hYy5tbQorKysgL2Rldi9u
dWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNp
bXBvcnQgIlBsdWdpbkluZm9ybWF0aW9uLmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLQotI2ltcG9ydCAiQVBJTnVtYmVyLmgiCi0jaW1wb3J0ICJBUElTdHJpbmcuaCIKLSNp
bXBvcnQgIlBsdWdpbk1vZHVsZUluZm8uaCIKLSNpbXBvcnQgIlN0cmluZ1V0aWxpdGllcy5oIgot
I2ltcG9ydCA8V2ViQ29yZS9QbHVnaW5CbG9ja2xpc3QuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotdm9pZCBnZXRQbGF0Zm9ybVBsdWdpbk1vZHVs
ZUluZm9ybWF0aW9uKGNvbnN0IFBsdWdpbk1vZHVsZUluZm8mIHBsdWdpbiwgQVBJOjpEaWN0aW9u
YXJ5OjpNYXBUeXBlJiBtYXApCi17Ci0gICAgbWFwLnNldChwbHVnaW5JbmZvcm1hdGlvbkJ1bmRs
ZUlkZW50aWZpZXJLZXkoKSwgQVBJOjpTdHJpbmc6OmNyZWF0ZShwbHVnaW4uYnVuZGxlSWRlbnRp
ZmllcikpOwotICAgIG1hcC5zZXQocGx1Z2luSW5mb3JtYXRpb25CdW5kbGVWZXJzaW9uS2V5KCks
IEFQSTo6U3RyaW5nOjpjcmVhdGUocGx1Z2luLnZlcnNpb25TdHJpbmcpKTsKLSAgICBtYXAuc2V0
KHBsdWdpbkluZm9ybWF0aW9uQnVuZGxlU2hvcnRWZXJzaW9uS2V5KCksIEFQSTo6U3RyaW5nOjpj
cmVhdGUocGx1Z2luLnNob3J0VmVyc2lvblN0cmluZykpOwotICAgIG1hcC5zZXQocGx1Z2luSW5m
b3JtYXRpb25VcGRhdGVQYXN0TGFzdEJsb2NrZWRWZXJzaW9uSXNLbm93bkF2YWlsYWJsZUtleSgp
LCBBUEk6OkJvb2xlYW46OmNyZWF0ZShXZWJDb3JlOjpQbHVnaW5CbG9ja2xpc3Q6OmlzUGx1Z2lu
VXBkYXRlQXZhaWxhYmxlKG5zU3RyaW5nRnJvbVdlYkNvcmVTdHJpbmcocGx1Z2luLmJ1bmRsZUlk
ZW50aWZpZXIpKSkpOwotICAgIG1hcC5zZXQocGx1Z2luSW5mb3JtYXRpb25IYXNTYW5kYm94UHJv
ZmlsZUtleSgpLCBBUEk6OkJvb2xlYW46OmNyZWF0ZShwbHVnaW4uaGFzU2FuZGJveFByb2ZpbGUp
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMv
UGx1Z2luTW9kdWxlSW5mby5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9QbHVnaW5N
b2R1bGVJbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMTYzYzljNWI3ZDJi
ZjQ0MmNkOWJhZGZlMzZjYjY4ZmVmMDlmZjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9QbHVnaW5Nb2R1
bGVJbmZvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KLQotI2lmIFBMQVRG
T1JNKENPQ09BKQotI2luY2x1ZGUgPG1hY2gvbWFjaGluZS5oPgotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1lbnVtIFBsdWdpbk1vZHVsZUxvYWRQb2xpY3kgewotICAgIC8vIFRoZSBw
bHVnLWluIG1vZHVsZSBzaG91bGQgYmUgbG9hZGVkIG5vcm1hbGx5LgotICAgIFBsdWdpbk1vZHVs
ZUxvYWROb3JtYWxseSwKLQotICAgIC8vIFRoZSBwbHVnLWluIG1vZHVsZSBzaG91bGQgYmUgbG9h
ZGVkIG5vcm1hbGx5LiBJZiB0aGUgcGx1Zy1pbiBoYXMgYSBzYW5kYm94LCBpdCB3aWxsIGJlIGRp
c2FibGVkLgotICAgIFBsdWdpbk1vZHVsZUxvYWRVbnNhbmRib3hlZCwKLQotICAgIC8vIFRoZSBw
bHVnLWluIHNob3VsZCBiZSBibG9ja2VkIGZyb20gYmVpbmcgaW5zdGFudGlhdGVkLgotICAgIC8v
IE5vdGUgdGhhdCB0aGUgcGx1Zy1pbiB3aWxsIHN0aWxsIGJlIHNlZW4gYnkgZS5nLiBuYXZpZ2F0
b3IucGx1Z2lucwotICAgIFBsdWdpbk1vZHVsZUJsb2NrZWRGb3JTZWN1cml0eSwKLSAgICBQbHVn
aW5Nb2R1bGVCbG9ja2VkRm9yQ29tcGF0aWJpbGl0eSwKLX07Ci0KLXN0cnVjdCBQbHVnaW5Nb2R1
bGVJbmZvIHsKLSAgICBTdHJpbmcgcGF0aDsKLSAgICBXZWJDb3JlOjpQbHVnaW5JbmZvIGluZm87
Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBjcHVfdHlwZV90IHBsdWdpbkFyY2hpdGVjdHVy
ZTsKLSAgICBTdHJpbmcgYnVuZGxlSWRlbnRpZmllcjsKLSAgICBTdHJpbmcgdmVyc2lvblN0cmlu
ZzsKLSAgICBTdHJpbmcgc2hvcnRWZXJzaW9uU3RyaW5nOwotICAgIGJvb2wgaGFzU2FuZGJveFBy
b2ZpbGU7Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQXR0cmlidXRlcy5oIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQXR0cmlidXRlcy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTg3YWFmYzM3MzQ0YTYyODc3YmExMWFkZjlk
OGRhMzVmMjA3OWQxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMu
aAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiUGx1Z2luTW9kdWxlSW5mby5oIgotI2luY2x1ZGUgPHd0Zi9F
bnVtVHJhaXRzLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1lbnVtIGNsYXNzIFBsdWdpblBy
b2Nlc3NTYW5kYm94UG9saWN5IDogYm9vbCB7Ci0gICAgTm9ybWFsLAotICAgIFVuc2FuZGJveGVk
LAotfTsKLQotc3RydWN0IFBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzIHsKLSAgICBQbHVnaW5Nb2R1
bGVJbmZvIG1vZHVsZUluZm87Ci0gICAgUGx1Z2luUHJvY2Vzc1NhbmRib3hQb2xpY3kgc2FuZGJv
eFBvbGljeTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4OWUyMjZmZmMyYWM0
N2U4YTI5MTU2NWZlYTMwMjMwMmQ4ZDE5NWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9QbHVnaW5Qcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNDRi5oIgotI2Vu
ZGlmCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1QbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpQbHVnaW5Qcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzKCkKLSAgICA6IHN1cHBvcnRzQXN5bmNocm9ub3VzUGx1Z2luSW5pdGlh
bGl6YXRpb24oZmFsc2UpCi17Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVy
IDw8IHN1cHBvcnRzQXN5bmNocm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRpb247Ci0gICAgZW5jb2Rl
ciA8PCBtaW5pbXVtTGlmZXRpbWU7Ci0gICAgZW5jb2RlciA8PCB0ZXJtaW5hdGlvblRpbWVvdXQ7
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgZW5jb2RlciA8PCBhY2NlbGVyYXRlZENvbXBvc2l0
aW5nUG9ydDsKLSAgICBlbmNvZGVyIDw8IG5ldHdvcmtBVFNDb250ZXh0OwotI2VuZGlmCi19Ci0K
LWJvb2wgUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjb2Rl
ciYgZGVjb2RlciwgUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcmVzdWx0KQotewot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnN1cHBvcnRzQXN5bmNocm9ub3VzUGx1Z2lu
SW5pdGlhbGl6YXRpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQubWluaW11bUxpZmV0aW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRlcm1pbmF0aW9uVGltZW91dCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHJlc3VsdC5hY2NlbGVyYXRlZENvbXBvc2l0aW5nUG9ydCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5uZXR3b3JrQVRTQ29udGV4
dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvUGx1
Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1
Z2lucy9QbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGJmODQyZjBhNTRiOTljNTQ1ODVmZGIyZTc2ZmNlZDY5YTlmMDI2MjkuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9TaGFyZWQvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiUGx1Z2luUHJv
Y2Vzc0F0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgotCi0jaWYgUExBVEZP
Uk0oQ09DT0EpCi0jaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KLSNlbmRpZgotCi1uYW1l
c3BhY2UgSVBDIHsKLWNsYXNzIERlY29kZXI7Ci1jbGFzcyBFbmNvZGVyOwotfQotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotc3RydWN0IFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewot
ICAgIFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMoKTsKLQotICAgIHZvaWQgZW5jb2Rl
KElQQzo6RW5jb2RlciYpIGNvbnN0OwotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBkZWNvZGUoSVBDOjpEZWNvZGVyJiwgUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYp
OwotCi0gICAgYm9vbCBzdXBwb3J0c0FzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uOwot
Ci0gICAgU2Vjb25kcyBtaW5pbXVtTGlmZXRpbWU7Ci0gICAgU2Vjb25kcyB0ZXJtaW5hdGlvblRp
bWVvdXQ7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBXVEY6Ok1hY2hTZW5kUmlnaHQgYWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ1BvcnQ7Ci0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gbmV0d29y
a0FUU0NvbnRleHQ7Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9QbHVnaW5zL1BsdWdpblF1aXJrcy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
UGx1Z2lucy9QbHVnaW5RdWlya3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFl
NmY5MWIwZDgwZjhiMzI4M2RlMjkxYzliN2UzYWZlZTFhY2E5Ny4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbHVnaW5z
L1BsdWdpblF1aXJrcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNwcmFnbWEgb25jZQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgUGx1
Z2luUXVpcmtzIHsKLXB1YmxpYzoKLSAgICBlbnVtIFBsdWdpblF1aXJrIHsKLSAgICAgICAgLy8g
TWFjIHNwZWNpZmljIHF1aXJrczoKLSNpZiBQTFVHSU5fQVJDSElURUNUVVJFKE1BQykKLSAgICAg
ICAgLy8gVGhlIHBsdWctaW4gd2FudHMgdGhlIGNhbGwgdG8gZ2V0cHJvZ25hbWUoKSB0byByZXR1
cm4gIldlYktpdFBsdWdpbkhvc3QiLgotICAgICAgICAvLyBBZG9iZSBGbGFzaCBXaWxsIG5vdCBo
YW5kbGUga2V5IGRvd24gZXZlbnRzIG90aGVyd2lzZS4KLSAgICAgICAgUHJvZ25hbWVTaG91bGRC
ZVdlYktpdFBsdWdpbkhvc3QsCi0KLSAgICAgICAgLy8gU3VwcG9ydHMgcmVjZWl2aW5nIGEgcGFp
bnQgZXZlbnQsIGV2ZW4gd2hlbiB1c2luZyBDb3JlQW5pbWF0aW9uIHJlbmRlcmluZy4KLSAgICAg
ICAgU3VwcG9ydHNTbmFwc2hvdHRpbmcsCi0KLSAgICAgICAgLy8gTWFrZSB0aGUgcGx1Zy1pbiBv
cGFxdWUgdW5sZXNzIGl0IGhhcyBhICJiYWNrZ3JvdW5kIiBhdHRyaWJ1dGUgc2V0IHRvIGEgdHJh
bnNwYXJlbnQgY29sb3IKLSAgICAgICAgLy8gYWNjb3JkaW5nIHRvIGh0dHA6Ly9tc2RuLm1pY3Jv
c29mdC5jb20vZW4tdXMvbGlicmFyeS9jYzgzODE0OChWUy45NSkuYXNweAotICAgICAgICAvLyBB
IG5vbi1leGlzdGVudCAiYmFja2dyb3VuZCIgYXR0cmlidXRlIGlzIGludGVycHJldGVkIGFzIHRo
ZSBuYW1lZCBjb2xvciBXaGl0ZSB3aGljaCBpcyBvcGFxdWUuCi0gICAgICAgIC8vIE1pY3Jvc29m
dCBTaWx2ZXJsaWdodCBkb2Vzbid0IG9wdCBpbnRvIHRyYW5zcGFyZW5jeSB1c2luZyBOUE5fU2V0
VmFsdWUgYW5kCi0gICAgICAgIC8vIE5QUFZwbHVnaW5UcmFuc3BhcmVudEJvb2wsIHNvIHdlJ2xs
IGFsd2F5cyBmb3JjZSBpdCB1bmxlc3MgdGhlIHBsdWctaW4gaGFzIGEgImJhY2tncm91bmQiCi0g
ICAgICAgIC8vIGF0dHJpYnV0ZSB0aGF0IHNwZWNpZmllcyBhIG9wYXF1ZSBjb2xvci4KLSAgICAg
ICAgTWFrZU9wYXF1ZVVubGVzc1RyYW5zcGFyZW50U2lsdmVybGlnaHRCYWNrZ3JvdW5kQXR0cmli
dXRlRXhpc3RzLAotCi0gICAgICAgIC8vIFdoZXRoZXIgY2FsbGluZyBOUFBfR2V0VmFsdWUgd2l0
aCBOUFBWcGx1Z2luQ29yZUFuaW1hdGlvbkxheWVyIHJldHVybnMgYSByZXRhaW5lZCBDb3JlIEFu
aW1hdGlvbgotICAgICAgICAvLyBsYXllciBvciBub3QuIEFjY29yZGluZyB0byB0aGUgTlBBUEkg
c3BlY2lmaWNhdGlvbnMsIHBsdWctaW4gc2hvdWxkbid0IHJldHVybiBhIHJldGFpbmVkIGxheWVy
IGJ1dAotICAgICAgICAvLyBXZWJLaXQxIGV4cGVjdHMgYSByZXRhaW5lZCBwbHVnLWluIGxheWVy
LiBXZSB1c2UgdGhpcyBmb3IgRmxhc2ggdG8gYXZvaWQgbGVha2luZyBPcGVuR0wgbGF5ZXJzLgot
ICAgICAgICBSZXR1cm5zUmV0YWluZWRDb3JlQW5pbWF0aW9uTGF5ZXIsCi0KLSAgICAgICAgLy8g
V2hldGhlciBOUFBfR2V0VmFsdWUgd2l0aCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0IHJl
dHVybnMgYSBub24tcmV0YWluZWQgTlBPYmplY3Qgb3Igbm90LgotICAgICAgICAvLyBWZXJzaW9u
cyBvZiBTaWx2ZXJsaWdodCBwcmlvciB0byA0IG5ldmVyIHJldGFpbmVkIHRoZSByZXR1cm5lZCBO
UE9iamVjdC4KLSAgICAgICAgUmV0dXJuc05vblJldGFpbmVkU2NyaXB0YWJsZU5QT2JqZWN0LAot
Ci0gICAgICAgIC8vIFdoZXRoZXIgdGhlIHBsdWctaW4gd2FudHMgcGFyYW1ldGVyIG5hbWVzIHRv
IGJlIGxvd2VyY2FzZS4KLSAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzg0NDA5MDM+OiBBcHBs
ZUNvbm5lY3QgaGFzIGEgYnVnIHdoZXJlIGl0IGRvZXMgbm90Ci0gICAgICAgIC8vIHVuZGVyc3Rh
bmQgdGhlIHBhcmFtZXRlciBuYW1lcyBzcGVjaWZpZWQgaW4gdGhlIDxvYmplY3Q+IGVsZW1lbnQg
dGhhdAotICAgICAgICAvLyBlbWJlZHMgaXRzIHBsdWctaW4uIAotICAgICAgICBXYW50c0xvd2Vy
Y2FzZVBhcmFtZXRlck5hbWVzLAotCi0gICAgICAgIC8vIFdoZXRoZXIgdG8gYXBwZW5kIFZlcnNp
b24vMy4yLjEgdG8gdGhlIHVzZXItYWdlbnQgcGFzc2VkIHRvIHRoZSBwbHVnaW4KLSAgICAgICAg
Ly8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gZGlzYWJsZSBTaWx2ZXJsaWdodCdzIHdvcmthcm91bmQg
Zm9yIGEgU2FmYXJpIDIgbGVhawotICAgICAgICAvLyB3aGljaCBpcyBlbmFibGVkIGlmIGl0IGRv
ZXNuJ3QgZmluZCBWZXJzaW9uLzMgaW4gdGhlIHVzZXItYWdlbnQuCi0gICAgICAgIEFwcGVuZFZl
cnNpb24zVXNlckFnZW50LAotCi0gICAgICAgIC8vIFdoZXRoZXIgYWxsIHRocm93biBOU0V4Y2Vw
dGlvbnMgc2hvdWxkIGJlIGxlYWtlZC4KLSAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzEzMDAz
NDcwPiBBZG9iZSBGbGFzaCBoYXMgYSBidWcgd2hlcmUgZXhjZXB0aW9ucyBhcmUgcmVsZWFzZWQg
dG9vIGVhcmx5LgotICAgICAgICBMZWFrQWxsVGhyb3duTlNFeGNlcHRpb25zLAotCi0gICAgICAg
IC8vIFgxMSBzcGVjaWZpYyBxdWlya3M6Ci0jZWxpZiBQTEFURk9STShYMTEpCi0gICAgICAgIC8v
IEZsYXNoIGFuZCBucHdyYXBwZXIgYXNrIHRoZSBicm93c2VyIGFib3V0IHdoaWNoIEdUSyB2ZXJz
aW9uIGRvZXMgaXQgdXNlCi0gICAgICAgIC8vIGFuZCByZWZ1c2UgdG8gbG9hZCBhbmQgd29yayBp
ZiBpdCBpcyBub3QgR1RLIDIgc28gd2UgbmVlZCB0byBmYWtlIGl0IGluCi0gICAgICAgIC8vIE5Q
Tl9HZXRWYWx1ZSBldmVuIHdoZW4gaXQgaXMgYSBsaWUuCi0gICAgICAgIFJlcXVpcmVzR1RLVG9v
bEtpdCwKLQotICAgICAgICAvLyBTb21lIHZlcnNpb24gMTAgcmVsZWFzZXMgb2YgRmxhc2ggcnVu
IHVuZGVyIG5zcGx1Z2lud3JhcHBlciB3aWxsIGNvbXBsZXRlbHkKLSAgICAgICAgLy8gZnJlZXpl
IHdoZW4gc2VuZGluZyByaWdodCBjbGljayBldmVudHMgdG8gdGhlbSBpbiB3aW5kb3dlZCBtb2Rl
LgotICAgICAgICBJZ25vcmVSaWdodENsaWNrSW5XaW5kb3dsZXNzTW9kZSwKLQotICAgICAgICAv
LyBTb21lIHBvcnRzIGRvbid0IHN1cHBvcnQgd2luZG93ZWQgcGx1Z2lucy4KLSAgICAgICAgRm9y
Y2VGbGFzaFdpbmRvd2xlc3NNb2RlLAotCi0gICAgICAgIC8vIEZsYXNoIGNyYXNoZXMgd2hlbiBO
UFBfR2V0VmFsdWUgaXMgY2FsbGVkIGZvciBOUFBWcGx1Z2luQ2FuY2VsU3JjU3RyZWFtIGluIHdp
bmRvd2VkIG1vZGUuCi0gICAgICAgIERvTm90Q2FuY2VsU3JjU3RyZWFtSW5XaW5kb3dlZE1vZGUs
Ci0jZW5kaWYKLQotICAgICAgICAvLyBUaGlzIGlzbid0IHJlYWxseSBhIHF1aXJrIGFzIG11Y2gg
YXMgdGhlIG9wcG9zaXRlIG9mIGEgcXVpcmsuIEJ5IGRlZmF1bHQsIHdlIGRvbid0IHNlbmQgd2hl
ZWwgZXZlbnRzCi0gICAgICAgIC8vIHRvIHBsdWctaW5zIHVubGVzcyB3ZSBrbm93IHRoYXQgdGhl
eSBoYW5kbGUgdGhlbSBjb3JyZWN0bHkuIEFkb2JlIFJlYWRlciBvbiBNYWMgaGFuZGxlcyB3aGVl
bCBldmVudHMgY29ycmVjdGx5LgotICAgICAgICBXYW50c1doZWVsRXZlbnRzLAotCi0gICAgICAg
IE51bVBsdWdpblF1aXJrcwotICAgIH07Ci0gICAgCi0gICAgUGx1Z2luUXVpcmtzKCkKLSAgICAg
ICAgOiBtX3F1aXJrcygwKQotICAgIHsKLSAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKG1f
cXVpcmtzKSAqIDggPj0gTnVtUGx1Z2luUXVpcmtzLCBub3RfZW5vdWdoX3Jvb21fZm9yX3F1aXJr
cyk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgYWRkKFBsdWdpblF1aXJrIHF1aXJrKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKHF1aXJrID49IDApOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHF1aXJrIDwgTnVtUGx1Z2luUXVpcmtzKTsKLSAgICAgICAg
Ci0gICAgICAgIG1fcXVpcmtzIHw9ICgxIDw8IHF1aXJrKTsKLSAgICB9Ci0gICAgCi0gICAgYm9v
bCBjb250YWlucyhQbHVnaW5RdWlyayBxdWlyaykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX3F1aXJrcyAmICgxIDw8IHF1aXJrKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdWludDMy
X3QgbV9xdWlya3M7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvbWFjL1BsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0
ZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9tYWMvUGx1Z2luQ29tcGxleFRleHRJ
bnB1dFN0YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyZWRkMmIwNjczM2Ey
ODdiZjU5ZjRlYmJkYjMwNzQ5YThhMzkyZjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9tYWMvUGx1Z2lu
Q29tcGxleFRleHRJbnB1dFN0YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGVfaAotI2RlZmlu
ZSBQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGVfaAotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
ZW51bSBQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUgewotICAgIC8vIENvbXBsZXggdGV4dCBp
bnB1dCBpcyBkaXNhYmxlZC4KLSAgICBQbHVnaW5Db21wbGV4VGV4dElucHV0RGlzYWJsZWQsCi0K
LSAgICAvLyBDb21wbGV4IHRleHQgaW5wdXQgaXMgZW5hYmxlZCB1c2luZyB0aGUgdXBkYXRlZCBD
b2NvYSBldmVudCBtb2RlbCB0ZXh0Ci0gICAgLy8gaW5wdXQgaGFuZGxpbmcgc3BlY2lmaWNhdGlv
biBkZXNjcmliZWQgYXQgaHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL05QQVBJOkNvY29hRXZlbnRN
b2RlbCNUZXh0X0lucHV0Ci0gICAgUGx1Z2luQ29tcGxleFRleHRJbnB1dEVuYWJsZWQsCi0KLSAg
ICAvLyBDb21wbGV4IHRleHQgaW5wdXQgaXMgZW5hYmxlZCB1c2luZyB0aGUgbGVnYWN5IENvY29h
L0NhcmJvbiBldmVudCBtb2RlbCB0ZXh0Ci0gICAgLy8gaW5wdXQgaGFuZGxpbmcgdGhhdCBtYXRj
aGVzIFdlYktpdDEuCi0gICAgUGx1Z2luQ29tcGxleFRleHRJbnB1dEVuYWJsZWRMZWdhY3kKLX07
Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRl
KHVpbnQ2NF90IHZhbHVlKQotewotICAgIHN3aXRjaCAodmFsdWUpIHsKLSAgICBjYXNlIFBsdWdp
bkNvbXBsZXhUZXh0SW5wdXREaXNhYmxlZDoKLSAgICBjYXNlIFBsdWdpbkNvbXBsZXhUZXh0SW5w
dXRFbmFibGVkOgotICAgIGNhc2UgUGx1Z2luQ29tcGxleFRleHRJbnB1dEVuYWJsZWRMZWdhY3k6
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQbHVnaW5Db21wbGV4VGV4dElucHV0
U3RhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9tYWMvUGx1
Z2luU2FuZGJveFByb2ZpbGUuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsdWdpbnMvbWFjL1Bs
dWdpblNhbmRib3hQcm9maWxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhMjQ2
YjYyNDk3MzQzMGM3NjIxNWM2ODJlODkyOWNlMWI3ZmNiNzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGx1Z2lucy9t
YWMvUGx1Z2luU2FuZGJveFByb2ZpbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIFBsdWdpblNhbmRib3hQcm9maWxlX2gKLSNkZWZpbmUgUGx1
Z2luU2FuZGJveFByb2ZpbGVfaAotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLVN0cmluZyBwbHVnaW5TYW5kYm94UHJvZmlsZShjb25zdCBTdHJpbmcm
IGJ1bmRsZUlkZW50aWZpZXIpOwotYm9vbCBwbHVnaW5IYXNTYW5kYm94UHJvZmlsZShjb25zdCBT
dHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2Vu
ZGlmIC8vIFBsdWdpblNhbmRib3hQcm9maWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL1BsdWdpbnMvbWFjL1BsdWdpblNhbmRib3hQcm9maWxlLm1tIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvUGx1Z2lucy9tYWMvUGx1Z2luU2FuZGJveFByb2ZpbGUubW0KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDI3MjQzOWM5YTNjYTA1OTU4YWRkZjYyN2YzYzU4NjU1NjA5ZmU5
OTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvUGx1Z2lucy9tYWMvUGx1Z2luU2FuZGJveFByb2ZpbGUubW0KKysrIC9k
ZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgi
Ci0jaW1wb3J0ICJQbHVnaW5TYW5kYm94UHJvZmlsZS5oIgotCi0jaW1wb3J0ICJXS0ZvdW5kYXRp
b24uaCIKLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1N0cmlu
Z0NvbmNhdGVuYXRlLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBOU1N0cmluZyAqcGx1Z2luU2FuZGJveFByb2ZpbGVEaXJl
Y3RvcnkoKQotewotICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xh
c3M6TlNDbGFzc0Zyb21TdHJpbmcoQCJXS1dlYlZpZXciKV07Ci0gICAgcmV0dXJuIFtbYnVuZGxl
IHJlc291cmNlUGF0aF0gc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiUGx1Z0luU2Fu
ZGJveFByb2ZpbGVzIl07Ci19Ci0KLXN0YXRpYyBOU1N0cmluZyAqcGx1Z2luU2FuZGJveFByb2Zp
bGVOYW1lKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllcikKLXsKLSAgICAvLyBGb2xkIGFs
bCAvIGNoYXJhY3RlcnMgdG8gOiB0byBwcmV2ZW50IHRoZSBwbHVnaW4gYnVuZGxlLWlkIGZyb20g
dHJ5aW5nIHRvIGVzY2FwZSB0aGUgcHJvZmlsZSBkaXJlY3RvcnkKLSAgICBTdHJpbmcgc2FuaXRp
emVkQnVuZGxlSWRlbnRpZmllciA9IGJ1bmRsZUlkZW50aWZpZXI7Ci0gICAgc2FuaXRpemVkQnVu
ZGxlSWRlbnRpZmllci5yZXBsYWNlKCcvJywgJzonKTsKLQotICAgIHJldHVybiBbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIiVALnNiIiwgKE5TU3RyaW5nICopc2FuaXRpemVkQnVuZGxlSWRl
bnRpZmllcl07Ci19Ci0KLXN0YXRpYyBTdHJpbmcgcGx1Z2luU2FuZGJveENvbW1vblByb2ZpbGUo
KQotewotICAgIE5TU3RyaW5nICpwcm9maWxlUGF0aCA9IFtwbHVnaW5TYW5kYm94UHJvZmlsZURp
cmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImNvbS5hcHBsZS5XZWJL
aXQucGx1Z2luLWNvbW1vbi5zYiJdOwotICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aENv
bnRlbnRzT2ZGaWxlOnByb2ZpbGVQYXRoIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVy
cm9yOk5VTExdOwotfQotCi1TdHJpbmcgcGx1Z2luU2FuZGJveFByb2ZpbGUoY29uc3QgU3RyaW5n
JiBidW5kbGVJZGVudGlmaWVyKQotewotICAgIGlmIChidW5kbGVJZGVudGlmaWVyLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgTlNTdHJpbmcgKnByb2ZpbGVOYW1l
ID0gcGx1Z2luU2FuZGJveFByb2ZpbGVOYW1lKGJ1bmRsZUlkZW50aWZpZXIpOwotCi0gICAgTlNT
dHJpbmcgKnByb2ZpbGVQYXRoID0gW3BsdWdpblNhbmRib3hQcm9maWxlRGlyZWN0b3J5KCkgc3Ry
aW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OnByb2ZpbGVOYW1lXTsKLSAgICBOU1N0cmluZyAq
cHJvZmlsZVN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6cHJvZmls
ZVBhdGggZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6TlVMTF07Ci0gICAgaWYg
KCFwcm9maWxlU3RyaW5nKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4g
bWFrZVN0cmluZyhwbHVnaW5TYW5kYm94Q29tbW9uUHJvZmlsZSgpLCBTdHJpbmcocHJvZmlsZVN0
cmluZykpOwotfQotCi1ib29sIHBsdWdpbkhhc1NhbmRib3hQcm9maWxlKGNvbnN0IFN0cmluZyYg
YnVuZGxlSWRlbnRpZmllcikKLXsKLSAgICBpZiAoYnVuZGxlSWRlbnRpZmllci5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIE5TU3RyaW5nICpwcm9maWxlTmFtZSA9IHBs
dWdpblNhbmRib3hQcm9maWxlTmFtZShidW5kbGVJZGVudGlmaWVyKTsKLSAgICBOU1N0cmluZyAq
cHJvZmlsZVBhdGggPSBbcGx1Z2luU2FuZGJveFByb2ZpbGVEaXJlY3RvcnkoKSBzdHJpbmdCeUFw
cGVuZGluZ1BhdGhDb21wb25lbnQ6cHJvZmlsZU5hbWVdOwotCi0gICAgcmV0dXJuIFtbTlNGaWxl
TWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpwcm9maWxlUGF0aF07Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCmluZGV4IGY3NjE0Y2QyMDNhM2E5NTBiODI2
MDVkZGQ5OGM3NjY1OGEyZjk4NjUuLmRjMGRiMzZkODAyZWExMDlkZTNmN2Y0OTcxYzdkNDRkMTY0
MDIwN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmgKQEAgLTQ5LDEwICs0OSw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5k
ZXJUaGVtZUlPUy5oPgogI2VuZGlmCiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
LSNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KLSNlbmRpZgotCiAjaWYgUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShXUEUpCiAjaW5jbHVkZSA8d3RmL01lbW9yeVByZXNzdXJlSGFuZGxl
ci5oPgogI2VuZGlmCkBAIC0xNzMsMTAgKzE2OSw2IEBAIHN0cnVjdCBXZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzIHsKICAgICBIYXNoTWFwPFN0cmluZywgYm9vbD4gbm90aWZpY2F0aW9uUGVy
bWlzc2lvbnM7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAg
IEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxTdHJpbmcsIFdlYkNvcmU6
OlBsdWdpbkxvYWRDbGllbnRQb2xpY3k+Pj4gcGx1Z2luTG9hZENsaWVudFBvbGljaWVzOwotI2Vu
ZGlmCi0KICNpZiBQTEFURk9STShDT0NPQSkKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBuZXR3
b3JrQVRTQ29udGV4dDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGEuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGEuY3BwCmluZGV4IGFhNzM5MGQ2YTRjM2UyODNhNmMxYzg2ZjkxYjFm
NzYxYjAwNGQ0YjguLmYzNzI5MDEzOGI0ZmFmZjMyMzUzYjJhY2RhZGU4MzQwMGRhOWNjOGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YS5jcHAK
QEAgLTY1LDkgKzY1LDYgQEAgdm9pZCBXZWJzaXRlRGF0YTo6ZW5jb2RlKElQQzo6RW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IGVudHJpZXM7CiAgICAgZW5jb2RlciA8
PCBob3N0TmFtZXNXaXRoQ29va2llczsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
LSAgICBlbmNvZGVyIDw8IGhvc3ROYW1lc1dpdGhQbHVnaW5EYXRhOwotI2VuZGlmCiAgICAgZW5j
b2RlciA8PCBob3N0TmFtZXNXaXRoSFNUU0NhY2hlOwogI2lmIEVOQUJMRShJTlRFTExJR0VOVF9U
UkFDS0lOR19QUkVWRU5USU9OKQogICAgIGVuY29kZXIgPDwgcmVnaXN0cmFibGVEb21haW5zV2l0
aFJlc291cmNlTG9hZFN0YXRpc3RpY3M7CkBAIC04MCwxMCArNzcsNiBAQCBib29sIFdlYnNpdGVE
YXRhOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBXZWJzaXRlRGF0YSYgcmVzdWx0KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaG9z
dE5hbWVzV2l0aENvb2tpZXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaG9zdE5h
bWVzV2l0aFBsdWdpbkRhdGEpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5ob3N0TmFtZXNXaXRoSFNUU0NhY2hlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogI2lmIEVOQUJMRShJTlRFTExJR0VOVF9UUkFDS0lOR19QUkVWRU5U
SU9OKQpAQCAtMTE4LDEwICsxMTEsNiBAQCBXZWJzaXRlRGF0YVByb2Nlc3NUeXBlIFdlYnNpdGVE
YXRhOjpvd25lclByb2Nlc3MoV2Vic2l0ZURhdGFUeXBlIGRhdGFUeXBlKQogICAgICAgICByZXR1
cm4gV2Vic2l0ZURhdGFQcm9jZXNzVHlwZTo6TmV0d29yazsKICAgICBjYXNlIFdlYnNpdGVEYXRh
VHlwZTo6U2VhcmNoRmllbGRSZWNlbnRTZWFyY2hlczoKICAgICAgICAgcmV0dXJuIFdlYnNpdGVE
YXRhUHJvY2Vzc1R5cGU6OlVJOwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAg
IGNhc2UgV2Vic2l0ZURhdGFUeXBlOjpQbHVnSW5EYXRhOgotICAgICAgICByZXR1cm4gV2Vic2l0
ZURhdGFQcm9jZXNzVHlwZTo6VUk7Ci0jZW5kaWYKICAgICBjYXNlIFdlYnNpdGVEYXRhVHlwZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljczoKICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhUHJvY2Vz
c1R5cGU6Ok5ldHdvcms7CiAgICAgY2FzZSBXZWJzaXRlRGF0YVR5cGU6OkNyZWRlbnRpYWxzOgpA
QCAtMTYxLDkgKzE1MCw2IEBAIFdlYnNpdGVEYXRhIFdlYnNpdGVEYXRhOjppc29sYXRlZENvcHko
KSBjb25zdAogICAgIHJldHVybiBXZWJzaXRlRGF0YSB7CiAgICAgICAgIGNyb3NzVGhyZWFkQ29w
eShlbnRyaWVzKSwKICAgICAgICAgY3Jvc3NUaHJlYWRDb3B5KGhvc3ROYW1lc1dpdGhDb29raWVz
KSwKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgY3Jvc3NUaHJlYWRD
b3B5KGhvc3ROYW1lc1dpdGhQbHVnaW5EYXRhKSwKLSNlbmRpZgogICAgICAgICBjcm9zc1RocmVh
ZENvcHkoaG9zdE5hbWVzV2l0aEhTVFNDYWNoZSksCiAjaWYgRU5BQkxFKElOVEVMTElHRU5UX1RS
QUNLSU5HX1BSRVZFTlRJT04pCiAgICAgICAgIGNyb3NzVGhyZWFkQ29weShyZWdpc3RyYWJsZURv
bWFpbnNXaXRoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YS5oIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGEuaAppbmRleCA0NDRiMWFlMTMxOTM5MGE3MTBmN2M3
NDRjNjQ5MDY5Y2QwZTkzNDBhLi5iYjIwYjI1MTkyM2Y0ZmViOWQ3N2FhZDRmYjJjYzcxZjk0MGFj
NDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRl
RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRh
LmgKQEAgLTU5LDkgKzU5LDYgQEAgc3RydWN0IFdlYnNpdGVEYXRhIHsKICAgICBWZWN0b3I8RW50
cnk+IGVudHJpZXM7CiAgICAgSGFzaFNldDxTdHJpbmc+IGhvc3ROYW1lc1dpdGhDb29raWVzOwog
Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgSGFzaFNldDxTdHJpbmc+IGhv
c3ROYW1lc1dpdGhQbHVnaW5EYXRhOwotI2VuZGlmCiAgICAgSGFzaFNldDxTdHJpbmc+IGhvc3RO
YW1lc1dpdGhIU1RTQ2FjaGU7CiAjaWYgRU5BQkxFKElOVEVMTElHRU5UX1RSQUNLSU5HX1BSRVZF
TlRJT04pCiAgICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gcmVnaXN0cmFi
bGVEb21haW5zV2l0aFJlc291cmNlTG9hZFN0YXRpc3RpY3M7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVR5cGUuaCBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhVHlwZS5oCmluZGV4IDM1ZjcyOTk0MTZj
YjlkNGZiMDJiZjk1NjMzMTgyNmExNGM4YTdkNjguLjdhOWU1MDBmZTFiMDllMzg5NWRkNzQzZTE2
NWM5ODkxOGJlN2E4ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhVHlwZS5oCkBAIC00MSw5ICs0MSw2IEBAIGVudW0gY2xhc3MgV2Vic2l0
ZURhdGFUeXBlIDogdWludDMyX3QgewogICAgIE1lZGlhS2V5cyA9IDEgPDwgOCwKICAgICBIU1RT
Q2FjaGUgPSAxIDw8IDksCiAgICAgU2VhcmNoRmllbGRSZWNlbnRTZWFyY2hlcyA9IDEgPDwgMTAs
Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgUGx1Z0luRGF0YSA9IDEgPDwg
MTEsCi0jZW5kaWYKICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gMSA8PCAxMiwKICAgICBD
cmVkZW50aWFscyA9IDEgPDwgMTMsCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtNzUs
OSArNzIsNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYktpdDo6V2Vic2l0ZURh
dGFUeXBlPiB7CiAgICAgICAgIFdlYktpdDo6V2Vic2l0ZURhdGFUeXBlOjpNZWRpYUtleXMsCiAg
ICAgICAgIFdlYktpdDo6V2Vic2l0ZURhdGFUeXBlOjpIU1RTQ2FjaGUsCiAgICAgICAgIFdlYktp
dDo6V2Vic2l0ZURhdGFUeXBlOjpTZWFyY2hGaWVsZFJlY2VudFNlYXJjaGVzLAotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBXZWJLaXQ6OldlYnNpdGVEYXRhVHlwZTo6
UGx1Z0luRGF0YSwKLSNlbmRpZgogICAgICAgICBXZWJLaXQ6OldlYnNpdGVEYXRhVHlwZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljcywKICAgICAgICAgV2ViS2l0OjpXZWJzaXRlRGF0YVR5cGU6OkNy
ZWRlbnRpYWxzLAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IDE0
MjdlN2UzYmJjZjExZTllZTIxZDliZjg3OGJhMWM0MmM3MzE2NDAuLjBhY2ZmNWM2ODA1NDc4YjNk
YTI4MDMzMDI0ZjU4ZTc2N2MzZjIxNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNl
cy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtMTgxLDExICsxODEsNiBA
QCBQbGF0Zm9ybS9JUEMvU2hhcmVkRmlsZUhhbmRsZS5jcHAgQG5vLXVuaWZ5CiBQbGF0Zm9ybS9J
UEMvU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5jcHAgQG5vLXVuaWZ5CiBQbGF0Zm9ybS9JUEMvU3Ry
aW5nUmVmZXJlbmNlLmNwcCBAbm8tdW5pZnkKIAotUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9s
bGVyUHJveHkuY3BwIEBuby11bmlmeQotUGx1Z2luUHJvY2Vzcy9QbHVnaW5DcmVhdGlvblBhcmFt
ZXRlcnMuY3BwIEBuby11bmlmeQotUGx1Z2luUHJvY2Vzcy9QbHVnaW5Qcm9jZXNzLmNwcCBAbm8t
dW5pZnkKLVBsdWdpblByb2Nlc3MvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwIEBuby11bmlmeQot
CiAvLyBUT0RPOiBUaGUgZmlsZXMgaGVyZSBtYXJrZWQgQG5vLXVuaWZ5IHNob3VsZCBiZSB1bmlm
aWVkIG9uY2UgR1RLJ3MgUGx1Z2luUHJvY2VzczIgaXMgcmVtb3ZlZC4KIFNoYXJlZC9BY2Nlc3Np
YmlsaXR5UHJlZmVyZW5jZXMuY3BwCiBTaGFyZWQvQWN0aXZpdHlBc3NlcnRpb24uY3BwIEBuby11
bmlmeQpAQCAtMjk3LDE4ICsyOTIsNiBAQCBTaGFyZWQvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJ
REJSZXN1bHQuY3BwCiAKIFNoYXJlZC9HYW1lcGFkL0dhbWVwYWREYXRhLmNwcAogCi0vLyBUT0RP
OiBUaGVzZSBmaWxlcyBzaG91bGQgYmUgdW5pZmllZCBvbmNlIEdUSydzIFBsdWdpblByb2Nlc3My
IGlzIHJlbW92ZWQuCi1TaGFyZWQvUGx1Z2lucy9OUElkZW50aWZpZXJEYXRhLmNwcCBAbm8tdW5p
ZnkKLVNoYXJlZC9QbHVnaW5zL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLmNwcCBAbm8tdW5pZnkK
LVNoYXJlZC9QbHVnaW5zL05QT2JqZWN0UHJveHkuY3BwIEBuby11bmlmeQotU2hhcmVkL1BsdWdp
bnMvTlBSZW1vdGVPYmplY3RNYXAuY3BwIEBuby11bmlmeQotU2hhcmVkL1BsdWdpbnMvTlBWYXJp
YW50RGF0YS5jcHAgQG5vLXVuaWZ5Ci1TaGFyZWQvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmNwcCBAbm8tdW5pZnkKLQotLy8gVE9ETzogVGhlc2UgZmlsZXMgc2hvdWxk
IGJlIHVuaWZpZWQgb25jZSBHVEsncyBQbHVnaW5Qcm9jZXNzMiBpcyByZW1vdmVkLgotU2hhcmVk
L1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5Nb2R1bGUuY3BwICBAbm8tdW5pZnkKLVNo
YXJlZC9QbHVnaW5zL05ldHNjYXBlL1BsdWdpbkluZm9ybWF0aW9uLmNwcCBAbm8tdW5pZnkKLQog
U2hhcmVkL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhLmNwcAogCiBTaGFyZWQvWFIvWFJEZXZpY2VJ
bmZvLmNwcApAQCAtNTAxLDEwICs0ODQsNiBAQCBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJO
b3RpZmljYXRpb25NYW5hZ2VyTWVzc2FnZUhhbmRsZXIuY3BwCiBVSVByb2Nlc3MvTm90aWZpY2F0
aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHkuY3BwCiBVSVByb2Nlc3MvTm90aWZpY2F0
aW9ucy9XZWJOb3RpZmljYXRpb25Qcm92aWRlci5jcHAKIAotVUlQcm9jZXNzL1BsdWdpbnMvUGx1
Z2luSW5mb1N0b3JlLmNwcAotVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc01hbmFnZXIu
Y3BwCi1VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwCi0KIFVJUHJvY2Vz
cy9Vc2VyQ29udGVudC9XZWJTY3JpcHRNZXNzYWdlSGFuZGxlci5jcHAKIFVJUHJvY2Vzcy9Vc2Vy
Q29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAKIApAQCAtNjc0LDIyICs2
NTMsOSBAQCBXZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlci5j
cHAKIAogLy8gVE9ETzogVGhlc2UgZmlsZXMgc2hvdWxkIGJlIHVuaWZpZWQgb25jZSBHVEsncyBQ
bHVnaW5Qcm9jZXNzMiBpcyByZW1vdmVkLgogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbi5jcHAg
QG5vLXVuaWZ5Ci1XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24uY3Bw
IEBuby11bmlmeQotV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFu
YWdlci5jcHAgQG5vLXVuaWZ5Ci1XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuY3BwIEBu
by11bmlmeQogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIEBuby11bmlmeQogV2Vi
UHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpbkluZm9Qcm92aWRlci5jcHAgQG5vLXVuaWZ5CiAKLS8v
IFRPRE86IFRoZXNlIGZpbGVzIHNob3VsZCBiZSB1bmlmaWVkIG9uY2UgR1RLJ3MgUGx1Z2luUHJv
Y2VzczIgaXMgcmVtb3ZlZC4KLVdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0aG9k
LmNwcCBAbm8tdW5pZnkKLVdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNw
cCBAbm8tdW5pZnkKLVdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcCBA
bm8tdW5pZnkKLVdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAu
Y3BwIEBuby11bmlmeQotV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZVV0aWxp
dGllcy5jcHAgQG5vLXVuaWZ5Ci1XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVC
cm93c2VyRnVuY3MuY3BwIEBuby11bmlmeQotV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05l
dHNjYXBlUGx1Z2luLmNwcCBAbm8tdW5pZnkKLVdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
ZXRzY2FwZVBsdWdpblN0cmVhbS5jcHAgQG5vLXVuaWZ5Ci0KIFdlYlByb2Nlc3MvU3BlZWNoL1Nw
ZWVjaFJlY29nbml0aW9uUmVhbHRpbWVNZWRpYVNvdXJjZU1hbmFnZXIuY3BwCiAKIFdlYlByb2Nl
c3MvU3RvcmFnZS9XZWJTV0NsaWVudENvbm5lY3Rpb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQK
aW5kZXggNzNkZjk1YzgwODUwZjE5MWI5YjY5ODI0M2NhMjBjYTc0NjUyYzk0Ni4uMGNiZTM3ZmZh
NzBmYTdjYjU2ZGVmMDk4MmRiYTBlM2Y0YmY5OGQyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApA
QCAtMTA5LDExICsxMDksNiBAQCBQbGF0Zm9ybS9tYWMvU3RyaW5nVXRpbGl0aWVzLm1tCiAKIFBs
YXRmb3JtL3VuaXgvRW52aXJvbm1lbnRVdGlsaXRpZXMuY3BwCiAKLVBsdWdpblByb2Nlc3MvRW50
cnlQb2ludC9Db2NvYS9YUENTZXJ2aWNlL1BsdWdpblNlcnZpY2VFbnRyeVBvaW50Lm1tIEBuby11
bmlmeQotCi1QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Db250cm9sbGVyUHJveHlNYWMubW0gQG5v
LXVuaWZ5Ci1QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9jZXNzTWFjLm1tIEBuby11bmlmeQot
CiBTaGFyZWQvQVBJL2MvY2YvV0tFcnJvckNGLmNwcAogU2hhcmVkL0FQSS9jL2NmL1dLU3RyaW5n
Q0YubW0KIFNoYXJlZC9BUEkvYy9jZi9XS1VSTENGLm1tCkBAIC0yNDAsMTEgKzIzNSw2IEBAIFNo
YXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwCiBTaGFy
ZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQ3Vyc29yLmNwcAogU2hhcmVkL21h
Yy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRyYWNrUmVhZGVyLmNwcAogCi1TaGFyZWQvUGx1Z2lu
cy9tYWMvUGx1Z2luU2FuZGJveFByb2ZpbGUubW0KLQotU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUv
bWFjL05ldHNjYXBlUGx1Z2luTW9kdWxlTWFjLm1tCi1TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9t
YWMvUGx1Z2luSW5mb3JtYXRpb25NYWMubW0KLQogU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1v
dGVMYXllckJhY2tpbmdTdG9yZS5tbQogU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXll
ckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24ubW0KIFNoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3Rl
TGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLm1tCkBAIC01NTcsMTAgKzU0Nyw2IEBAIFVJUHJvY2Vz
cy9NZWRpYS9jb2NvYS9NZWRpYVVzYWdlTWFuYWdlckNvY29hLm1tCiAKIFVJUHJvY2Vzcy9OZXR3
b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAK
IAotVUlQcm9jZXNzL1BsdWdpbnMvbWFjL1BsdWdpbkluZm9TdG9yZU1hYy5tbQotVUlQcm9jZXNz
L1BsdWdpbnMvbWFjL1BsdWdpblByb2Nlc3NNYW5hZ2VyTWFjLm1tCi1VSVByb2Nlc3MvUGx1Z2lu
cy9tYWMvUGx1Z2luUHJvY2Vzc1Byb3h5TWFjLm1tCi0KIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRy
ZWUvY29jb2EvUmVtb3RlTGF5ZXJUcmVlTGF5ZXJzLm1tCiAKIFVJUHJvY2Vzcy9SZW1vdGVMYXll
clRyZWUvbWFjL1Njcm9sbGVyTWFjLm1tCkBAIC02NjksOSArNjU1LDYgQEAgV2ViUHJvY2Vzcy9J
bnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJTWFjLm1tCiAKIFdlYlByb2Nlc3MvTWVkaWFDYWNo
ZS9XZWJNZWRpYUtleVN0b3JhZ2VNYW5hZ2VyLmNwcAogCi1XZWJQcm9jZXNzL1BsdWdpbnMvTmV0
c2NhcGUvbWFjL05ldHNjYXBlUGx1Z2luTWFjLm1tCi1XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvbWFjL1BsdWdpblByb3h5TWFjLm1tCi0KIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1
Z2luLm1tCiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbkFubm90YXRpb24ubW0KIFdl
YlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5tbQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUxvYWRlckNsaWVudC5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUxvYWRlckNsaWVudC5oCmluZGV4IGMzNjRhZWY1
ZDkwNjgyZTcyNGViMzczM2U5OTk3YWJiZmU4YmQ3MDMuLjlhNzMwMWI4MDFlYmMwMTliZDk4YjZm
ZjU4MmE4ZTc0ZWE0MGYwOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElMb2FkZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJ
TG9hZGVyQ2xpZW50LmgKQEAgLTI2LDcgKzI2LDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiQVBJRGF0YS5oIgotI2luY2x1ZGUgIlBsdWdpbk1vZHVsZUluZm8uaCIKICNpbmNsdWRlICJT
YW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2Fk
ZXJUeXBlcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTGF5b3V0TWlsZXN0b25lLmg+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkNsaWVudC5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb25DbGllbnQuaAppbmRleCAx
YzlmYTNmMjA2YjI5NmFlN2ZkN2ViN2ViYWNjZDNlMTY1NWUyNTRiLi41NjIzNDAxNDU5ZGE1ZmUz
MGY0OTFhNDFmYjM0N2E2NzU3MjAyYzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElOYXZpZ2F0aW9uQ2xpZW50LmgKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRl
ICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAiQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uRGVjaXNp
b25MaXN0ZW5lci5oIgotI2luY2x1ZGUgIlBsdWdpbk1vZHVsZUluZm8uaCIKICNpbmNsdWRlICJQ
cm9jZXNzVGVybWluYXRpb25SZWFzb24uaCIKICNpbmNsdWRlICJTYW1lRG9jdW1lbnROYXZpZ2F0
aW9uVHlwZS5oIgogI2luY2x1ZGUgIldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5oIgpAQCAt
MTM0LDE1ICsxMzMsNiBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHZpcnR1YWwgdm9pZCBj
b250ZW50UnVsZUxpc3ROb3RpZmljYXRpb24oV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXVEY6OlVS
TCYmLCBXZWJDb3JlOjpDb250ZW50UnVsZUxpc3RSZXN1bHRzJiYpIHsgfTsKLSAgICAKLSNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICB2aXJ0dWFsIGJvb2wgZGlkRmFpbFRvSW5p
dGlhbGl6ZVBsdWdJbihXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIEFQSTo6RGljdGlvbmFyeSYpIHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGRpZEJsb2NrSW5zZWN1cmVQbHVnaW5W
ZXJzaW9uKFdlYktpdDo6V2ViUGFnZVByb3h5JiwgQVBJOjpEaWN0aW9uYXJ5JikgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVjaWRlUG9saWN5Rm9yUGx1Z2luTG9hZChXZWJL
aXQ6OldlYlBhZ2VQcm94eSYsIFdlYktpdDo6UGx1Z2luTW9kdWxlTG9hZFBvbGljeSBjdXJyZW50
UGx1Z2luTG9hZFBvbGljeSwgRGljdGlvbmFyeSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vi
S2l0OjpQbHVnaW5Nb2R1bGVMb2FkUG9saWN5LCBjb25zdCBXVEY6OlN0cmluZyYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQotICAgIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY3VycmVudFBs
dWdpbkxvYWRQb2xpY3ksIHsgfSk7Ci0gICAgfQotI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCR0wp
CiAgICAgdmlydHVhbCB2b2lkIHdlYkdMTG9hZFBvbGljeShXZWJLaXQ6OldlYlBhZ2VQcm94eSYs
IGNvbnN0IFdURjo6VVJMJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpXZWJHTExv
YWRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdCB7IGNvbXBsZXRpb25IYW5kbGVy
KFdlYkNvcmU6OldlYkdMTG9hZFBvbGljeTo6V2ViR0xBbGxvd0NyZWF0aW9uKTsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVVJQ2xpZW50LmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJVUlDbGllbnQuaAppbmRleCA1NDkxMDJlYjVmZWVhYjAw
OWJmOTQ3NzUzMmQ0ZjlkNTAxZWE4ZTViLi42NThjZWJjM2MyODVhYTZkODk4MjY5OTUwYmViZGZk
Y2ZiMWM5N2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJVUlD
bGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJVUlDbGllbnQuaApA
QCAtOTcsOSArOTcsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVzVGV4
dChXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0IFdURjo6U3RyaW5nJikgeyB9CiAgICAgdmly
dHVhbCB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KFdlYktpdDo6V2ViUGFnZVByb3h5Jiwg
Y29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0RGF0YSYsIE9wdGlvblNldDxXZWJLaXQ6Oldl
YkV2ZW50OjpNb2RpZmllcj4sIE9iamVjdCopIHsgfQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotICAgIHZpcnR1YWwgdm9pZCB1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQo
V2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXS1BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uLCBEaWN0
aW9uYXJ5JikgeyB9Ci0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkTm90SGFuZGxlS2V5RXZlbnQoV2ViS2l0OjpXZWJQYWdlUHJveHkq
LCBjb25zdCBXZWJLaXQ6Ok5hdGl2ZVdlYktleWJvYXJkRXZlbnQmKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgZGlkTm90SGFuZGxlV2hlZWxFdmVudChXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0
IFdlYktpdDo6TmF0aXZlV2ViV2hlZWxFdmVudCYpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS0FQSUNhc3QuaAppbmRleCBkODk4N2ViOWI3ZGY2MmFhODA4NDU1Zjc1YWVjMTM2
Y2M1MzNiZTVkLi41MTJiMmJjNjk1MjRiNzk5MDE4NTY1MmNjMTM2Y2Q1YTM4NGE2NmNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaApAQCAtMjksNyArMjksNiBA
QAogCiAjaW5jbHVkZSAiQ2FjaGVNb2RlbC5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlSGl0
VGVzdFJlc3VsdE1lZGlhVHlwZS5oIgotI2luY2x1ZGUgIlBsdWdpbk1vZHVsZUluZm8uaCIKICNp
bmNsdWRlICJQcm9jZXNzVGVybWluYXRpb25SZWFzb24uaCIKICNpbmNsdWRlICJXS0J1bmRsZUhp
dFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJXS0NvbnRleHQuaCIKQEAgLTQxOCw3OCArNDE3LDYg
QEAgaW5saW5lIFdLU3RvcmFnZUJsb2NraW5nUG9saWN5IHRvQVBJKFdlYkNvcmU6OlN0b3JhZ2VC
bG9ja2luZ1BvbGljeSBwb2xpY3kpCiAgICAgcmV0dXJuIGtXS0FsbG93QWxsU3RvcmFnZTsKIH0K
IAotaW5saW5lIFdLUGx1Z2luTG9hZFBvbGljeSB0b1dLUGx1Z2luTG9hZFBvbGljeShQbHVnaW5N
b2R1bGVMb2FkUG9saWN5IHBsdWdpbk1vZHVsZUxvYWRQb2xpY3kpCi17Ci0gICAgc3dpdGNoIChw
bHVnaW5Nb2R1bGVMb2FkUG9saWN5KSB7Ci0gICAgY2FzZSBQbHVnaW5Nb2R1bGVMb2FkTm9ybWFs
bHk6Ci0gICAgICAgIHJldHVybiBrV0tQbHVnaW5Mb2FkUG9saWN5TG9hZE5vcm1hbGx5OwotICAg
IGNhc2UgUGx1Z2luTW9kdWxlTG9hZFVuc2FuZGJveGVkOgotICAgICAgICByZXR1cm4ga1dLUGx1
Z2luTG9hZFBvbGljeUxvYWRVbnNhbmRib3hlZDsKLSAgICBjYXNlIFBsdWdpbk1vZHVsZUJsb2Nr
ZWRGb3JTZWN1cml0eToKLSAgICAgICAgcmV0dXJuIGtXS1BsdWdpbkxvYWRQb2xpY3lCbG9ja2Vk
OwotICAgIGNhc2UgUGx1Z2luTW9kdWxlQmxvY2tlZEZvckNvbXBhdGliaWxpdHk6Ci0gICAgICAg
IHJldHVybiBrV0tQbHVnaW5Mb2FkUG9saWN5QmxvY2tlZEZvckNvbXBhdGliaWxpdHk7Ci0gICAg
fQotICAgIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBrV0tQbHVnaW5M
b2FkUG9saWN5QmxvY2tlZDsKLX0KLQotaW5saW5lIFdLUGx1Z2luTG9hZENsaWVudFBvbGljeSB0
b1dLUGx1Z2luTG9hZENsaWVudFBvbGljeShXZWJDb3JlOjpQbHVnaW5Mb2FkQ2xpZW50UG9saWN5
IFBsdWdpbkxvYWRDbGllbnRQb2xpY3kpCi17Ci0gICAgc3dpdGNoIChQbHVnaW5Mb2FkQ2xpZW50
UG9saWN5KSB7Ci0gICAgY2FzZSBXZWJDb3JlOjpQbHVnaW5Mb2FkQ2xpZW50UG9saWN5OjpVbmRl
ZmluZWQ6Ci0gICAgICAgIHJldHVybiBrV0tQbHVnaW5Mb2FkQ2xpZW50UG9saWN5VW5kZWZpbmVk
OwotICAgIGNhc2UgV2ViQ29yZTo6UGx1Z2luTG9hZENsaWVudFBvbGljeTo6QmxvY2s6Ci0gICAg
ICAgIHJldHVybiBrV0tQbHVnaW5Mb2FkQ2xpZW50UG9saWN5QmxvY2s7Ci0gICAgY2FzZSBXZWJD
b3JlOjpQbHVnaW5Mb2FkQ2xpZW50UG9saWN5OjpBc2s6Ci0gICAgICAgIHJldHVybiBrV0tQbHVn
aW5Mb2FkQ2xpZW50UG9saWN5QXNrOwotICAgIGNhc2UgV2ViQ29yZTo6UGx1Z2luTG9hZENsaWVu
dFBvbGljeTo6QWxsb3c6Ci0gICAgICAgIHJldHVybiBrV0tQbHVnaW5Mb2FkQ2xpZW50UG9saWN5
QWxsb3c7Ci0gICAgY2FzZSBXZWJDb3JlOjpQbHVnaW5Mb2FkQ2xpZW50UG9saWN5OjpBbGxvd0Fs
d2F5czoKLSAgICAgICAgcmV0dXJuIGtXS1BsdWdpbkxvYWRDbGllbnRQb2xpY3lBbGxvd0Fsd2F5
czsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4ga1dLUGx1
Z2luTG9hZENsaWVudFBvbGljeUJsb2NrOwotfQotCi1pbmxpbmUgUGx1Z2luTW9kdWxlTG9hZFBv
bGljeSB0b1BsdWdpbk1vZHVsZUxvYWRQb2xpY3koV0tQbHVnaW5Mb2FkUG9saWN5IHBsdWdpbkxv
YWRQb2xpY3kpCi17Ci0gICAgc3dpdGNoIChwbHVnaW5Mb2FkUG9saWN5KSB7Ci0gICAgY2FzZSBr
V0tQbHVnaW5Mb2FkUG9saWN5TG9hZE5vcm1hbGx5OgotICAgICAgICByZXR1cm4gUGx1Z2luTW9k
dWxlTG9hZE5vcm1hbGx5OwotICAgIGNhc2Uga1dLUGx1Z2luTG9hZFBvbGljeUJsb2NrZWQ6Ci0g
ICAgICAgIHJldHVybiBQbHVnaW5Nb2R1bGVCbG9ja2VkRm9yU2VjdXJpdHk7Ci0gICAgY2FzZSBr
V0tQbHVnaW5Mb2FkUG9saWN5QmxvY2tlZEZvckNvbXBhdGliaWxpdHk6Ci0gICAgICAgIHJldHVy
biBQbHVnaW5Nb2R1bGVCbG9ja2VkRm9yQ29tcGF0aWJpbGl0eTsKLSAgICBjYXNlIGtXS1BsdWdp
bkxvYWRQb2xpY3lMb2FkVW5zYW5kYm94ZWQ6Ci0gICAgICAgIHJldHVybiBQbHVnaW5Nb2R1bGVM
b2FkVW5zYW5kYm94ZWQ7Ci0gICAgfQotICAgIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiBQbHVnaW5Nb2R1bGVCbG9ja2VkRm9yU2VjdXJpdHk7Ci19Ci0KLWlubGluZSBX
ZWJDb3JlOjpQbHVnaW5Mb2FkQ2xpZW50UG9saWN5IHRvUGx1Z2luTG9hZENsaWVudFBvbGljeShX
S1BsdWdpbkxvYWRDbGllbnRQb2xpY3kgcGx1Z2luTG9hZENsaWVudFBvbGljeSkKLXsKLSAgICBz
d2l0Y2ggKHBsdWdpbkxvYWRDbGllbnRQb2xpY3kpIHsKLSAgICBjYXNlIGtXS1BsdWdpbkxvYWRD
bGllbnRQb2xpY3lVbmRlZmluZWQ6Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpQbHVnaW5Mb2Fk
Q2xpZW50UG9saWN5OjpVbmRlZmluZWQ7Ci0gICAgY2FzZSBrV0tQbHVnaW5Mb2FkQ2xpZW50UG9s
aWN5QmxvY2s6Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpQbHVnaW5Mb2FkQ2xpZW50UG9saWN5
OjpCbG9jazsKLSAgICBjYXNlIGtXS1BsdWdpbkxvYWRDbGllbnRQb2xpY3lBc2s6Ci0gICAgICAg
IHJldHVybiBXZWJDb3JlOjpQbHVnaW5Mb2FkQ2xpZW50UG9saWN5OjpBc2s7Ci0gICAgY2FzZSBr
V0tQbHVnaW5Mb2FkQ2xpZW50UG9saWN5QWxsb3c6Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpQ
bHVnaW5Mb2FkQ2xpZW50UG9saWN5OjpBbGxvdzsKLSAgICBjYXNlIGtXS1BsdWdpbkxvYWRDbGll
bnRQb2xpY3lBbGxvd0Fsd2F5czoKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlBsdWdpbkxvYWRD
bGllbnRQb2xpY3k6OkFsbG93QWx3YXlzOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBXZWJDb3JlOjpQbHVnaW5Mb2FkQ2xpZW50UG9saWN5OjpCbG9jazsK
LX0KLQogaW5saW5lIFdlYkNvcmU6OldlYkdMTG9hZFBvbGljeSB0b1dlYkdMTG9hZFBvbGljeShX
S1dlYkdMTG9hZFBvbGljeSB3ZWJHTExvYWRQb2xpY3kpCiB7CiAgICAgc3dpdGNoICh3ZWJHTExv
YWRQb2xpY3kpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dL
Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3Bw
CmluZGV4IGYxZWJjYjU5Y2RjNTJiMTVkOTNlYmZmOWJlZGIzZDEwNWYyY2FkNDEuLmMyOWFmODE3
ZmQ4YjBlY2FiM2E3Nzk2YTEyMmRiNjQyY2YwOTBmNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcApAQCAtMzM0LDIxICszMzQsMTMgQEAgdm9pZCBXS0Nv
bnRleHRTZXRTaG91bGRVc2VGb250U21vb3RoaW5nKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBi
b29sIHVzZUZvbnRTbW8KIAogdm9pZCBXS0NvbnRleHRTZXRBZGRpdGlvbmFsUGx1Z2luc0RpcmVj
dG9yeShXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tTdHJpbmdSZWYgcGx1Z2luc0RpcmVjdG9y
eSkKIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBXZWJLaXQ6OnRvSW1w
bChjb250ZXh0UmVmKS0+c2V0QWRkaXRpb25hbFBsdWdpbnNEaXJlY3RvcnkoV2ViS2l0Ojp0b0lt
cGwocGx1Z2luc0RpcmVjdG9yeSktPnN0cmluZygpKTsKLSNlbHNlCiAgICAgVU5VU0VEX1BBUkFN
KGNvbnRleHRSZWYpOwogICAgIFVOVVNFRF9QQVJBTShwbHVnaW5zRGlyZWN0b3J5KTsKLSNlbmRp
ZgogfQogCiB2b2lkIFdLQ29udGV4dFJlZnJlc2hQbHVnSW5zKFdLQ29udGV4dFJlZiBjb250ZXh0
KQogewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIFdlYktpdDo6dG9JbXBs
KGNvbnRleHQpLT5yZWZyZXNoUGx1Z2lucygpOwotI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29u
dGV4dCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBXS0NvbnRleHRSZWdpc3RlclVSTFNjaGVtZUFzRW1w
dHlEb2N1bWVudChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tTdHJpbmdSZWYgdXJsU2NoZW1l
KQpAQCAtNTYxLDI2ICs1NTMsMTAgQEAgdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNlV29y
a2VycyhXS0NvbnRleHRSZWYgY29udGV4dCkKIAogdm9pZCBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQ
bHVnaW4oV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLU3RyaW5nUmVmIGRvbWFpblJlZiwgV0tT
dHJpbmdSZWYgbmFtZVJlZiwgV0tBcnJheVJlZiBtaW1lVHlwZXNSZWYsIFdLQXJyYXlSZWYgZXh0
ZW5zaW9uc1JlZikKIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBIYXNo
U2V0PFN0cmluZz4gbWltZVR5cGVzOwotICAgIEhhc2hTZXQ8U3RyaW5nPiBleHRlbnNpb25zOwot
Ci0gICAgc2l6ZV90IGNvdW50ID0gV0tBcnJheUdldFNpemUobWltZVR5cGVzUmVmKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIG1pbWVUeXBlcy5hZGQo
V2ViS2l0Ojp0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0
ZW1BdEluZGV4KG1pbWVUeXBlc1JlZiwgaSkpKSk7Ci0gICAgY291bnQgPSBXS0FycmF5R2V0U2l6
ZShleHRlbnNpb25zUmVmKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kp
Ci0gICAgICAgIGV4dGVuc2lvbnMuYWRkKFdlYktpdDo6dG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChleHRlbnNpb25zUmVmLCBpKSkpKTsK
LQotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5hZGRTdXBwb3J0ZWRQbHVnaW4oV2Vi
S2l0Ojp0b1dURlN0cmluZyhkb21haW5SZWYpLCBXZWJLaXQ6OnRvV1RGU3RyaW5nKG5hbWVSZWYp
LCBXVEZNb3ZlKG1pbWVUeXBlcyksIFdURk1vdmUoZXh0ZW5zaW9ucykpOwotI2VuZGlmCiB9CiAK
IHZvaWQgV0tDb250ZXh0Q2xlYXJTdXBwb3J0ZWRQbHVnaW5zKFdLQ29udGV4dFJlZiBjb250ZXh0
UmVmKQogewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIFdlYktpdDo6dG9J
bXBsKGNvbnRleHRSZWYpLT5jbGVhclN1cHBvcnRlZFBsdWdpbnMoKTsKLSNlbmRpZgogfQogCiB2
b2lkIFdLQ29udGV4dENsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFdLQ29udGV4
dFJlZiBjb250ZXh0UmVmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAK
aW5kZXggYThkYTdmZDQ4NWE0NzY0OTk2NDQ3ZjYyODJhNzlmMjBhNDg3OTIxZS4uNjdhNzYwNWZm
NWVhOWRmZTlkMTliZWExYjU2NGViMmMxZDFlNTc2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1BhZ2UuY3BwCkBAIC02NCw3ICs2NCw2IEBACiAjaW5jbHVkZSAiTmF2aWdhdGlv
bkFjdGlvbkRhdGEuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdC5o
IgogI2luY2x1ZGUgIlBhZ2VDbGllbnQuaCIKLSNpbmNsdWRlICJQbHVnaW5JbmZvcm1hdGlvbi5o
IgogI2luY2x1ZGUgIlByaW50SW5mby5oIgogI2luY2x1ZGUgIlNwZWVjaFJlY29nbml0aW9uUGVy
bWlzc2lvblJlcXVlc3QuaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKQEAgLTE4MDEsMzcgKzE4
MDAsNiBAQCB2b2lkIFdLUGFnZVNldFBhZ2VVSUNsaWVudChXS1BhZ2VSZWYgcGFnZVJlZiwgY29u
c3QgV0tQYWdlVUlDbGllbnRCYXNlKiB3a0NsaWVudAogICAgICAgICAgICAgbV9jbGllbnQubW91
c2VEaWRNb3ZlT3ZlckVsZW1lbnQodG9BUEkoJnBhZ2UpLCB0b0FQSShhcGlIaXRUZXN0UmVzdWx0
LnB0cigpKSwgdG9BUEkobW9kaWZpZXJzKSwgdG9BUEkodXNlckRhdGEpLCBtX2NsaWVudC5iYXNl
LmNsaWVudEluZm8pOwogICAgICAgICB9CiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKLSAgICAgICAgdm9pZCB1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQoV2ViUGFnZVBy
b3h5JiBwYWdlLCBXS1BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uIHBsdWdpblVuYXZhaWxhYmls
aXR5UmVhc29uLCBBUEk6OkRpY3Rpb25hcnkmIHBsdWdpbkluZm9ybWF0aW9uKSBmaW5hbAotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAocGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24gPT0ga1dL
UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb25QbHVnaW5NaXNzaW5nKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fY2xpZW50Lm1pc3NpbmdQbHVnaW5CdXR0b25DbGlja2VkX2RlcHJlY2F0ZWRGb3JV
c2VXaXRoVjApCi0gICAgICAgICAgICAgICAgICAgIG1fY2xpZW50Lm1pc3NpbmdQbHVnaW5CdXR0
b25DbGlja2VkX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAoCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0b0FQSSgmcGFnZSksCi0gICAgICAgICAgICAgICAgICAgICAgICB0b0FQSShwbHVnaW5JbmZv
cm1hdGlvbi5nZXQ8QVBJOjpTdHJpbmc+KHBsdWdpbkluZm9ybWF0aW9uTUlNRVR5cGVLZXkoKSkp
LAotICAgICAgICAgICAgICAgICAgICAgICAgdG9BUEkocGx1Z2luSW5mb3JtYXRpb24uZ2V0PEFQ
STo6U3RyaW5nPihwbHVnaW5JbmZvcm1hdGlvblBsdWdpblVSTEtleSgpKSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICB0b0FQSShwbHVnaW5JbmZvcm1hdGlvbi5nZXQ8QVBJOjpTdHJpbmc+KHBs
dWdpbkluZm9ybWF0aW9uUGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkxLZXkoKSkpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKG1fY2xpZW50LnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tl
ZF9kZXByZWNhdGVkRm9yVXNlV2l0aFYxKQotICAgICAgICAgICAgICAgIG1fY2xpZW50LnVuYXZh
aWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZF9kZXByZWNhdGVkRm9yVXNlV2l0aFYxKAotICAgICAg
ICAgICAgICAgICAgICB0b0FQSSgmcGFnZSksCi0gICAgICAgICAgICAgICAgICAgIHBsdWdpblVu
YXZhaWxhYmlsaXR5UmVhc29uLAotICAgICAgICAgICAgICAgICAgICB0b0FQSShwbHVnaW5JbmZv
cm1hdGlvbi5nZXQ8QVBJOjpTdHJpbmc+KHBsdWdpbkluZm9ybWF0aW9uTUlNRVR5cGVLZXkoKSkp
LAotICAgICAgICAgICAgICAgICAgICB0b0FQSShwbHVnaW5JbmZvcm1hdGlvbi5nZXQ8QVBJOjpT
dHJpbmc+KHBsdWdpbkluZm9ybWF0aW9uUGx1Z2luVVJMS2V5KCkpKSwKLSAgICAgICAgICAgICAg
ICAgICAgdG9BUEkocGx1Z2luSW5mb3JtYXRpb24uZ2V0PEFQSTo6U3RyaW5nPihwbHVnaW5JbmZv
cm1hdGlvblBsdWdpbnNwYWdlQXR0cmlidXRlVVJMS2V5KCkpKSwKLSAgICAgICAgICAgICAgICAg
ICAgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKLQotICAgICAgICAgICAgaWYgKG1fY2xpZW50
LnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZCkKLSAgICAgICAgICAgICAgICBtX2NsaWVu
dC51bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQoCi0gICAgICAgICAgICAgICAgICAgIHRv
QVBJKCZwYWdlKSwKLSAgICAgICAgICAgICAgICAgICAgcGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFz
b24sCi0gICAgICAgICAgICAgICAgICAgIHRvQVBJKCZwbHVnaW5JbmZvcm1hdGlvbiksCi0gICAg
ICAgICAgICAgICAgICAgIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Ci0gICAgICAgIH0KLSNl
bmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQogICAgICAgICB2b2lkIGRpZE5v
dEhhbmRsZUtleUV2ZW50KFdlYlBhZ2VQcm94eSogcGFnZSwgY29uc3QgTmF0aXZlV2ViS2V5Ym9h
cmRFdmVudCYgZXZlbnQpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGll
bnQuZGlkTm90SGFuZGxlS2V5RXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLUHJlZmVyZW5jZXMuY3BwCmluZGV4IGJlZDgzMTZmMzc1OGY5MzMzMDE0YzJmYmUyZjJk
MjVjMTg5NTliY2EuLjIxOTA1MDk5ZjY1ZDM2OTkzYzFhY2YxNjhlZWI4NGRkOTU3ZTNiOWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwCkBA
IC0yNSw3ICsyNSw2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2luY2x1ZGUgIlBsdWdp
blByb2Nlc3NNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV0tQcmVmZXJlbmNlc1JlZi5oIgogI2luY2x1
ZGUgIldLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCkBA
IC0xMDY3LDkgKzEwNjYsNiBAQCBib29sIFdLUHJlZmVyZW5jZXNHZXRQbHVnSW5TbmFwc2hvdHRp
bmdFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiAKIHZvaWQgV0tQcmVm
ZXJlbmNlc1NldFBsdWdpblNhbmRib3hQcm9maWxlc0VuYWJsZWRGb3JBbGxQbHVnaW5zKFdLUHJl
ZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkgJiYgUExBVEZPUk0oTUFDKQotICAgIFdlYktpdDo6UGx1Z2lu
UHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLnNldEV4cGVyaW1lbnRhbFBsdWdJblNhbmRib3hQ
cm9maWxlc0VuYWJsZWQoZW5hYmxlZCk7Ci0jZW5kaWYKICAgICB0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT5zZXRFeHBlcmltZW50YWxQbHVnSW5TYW5kYm94UHJvZmlsZXNFbmFibGVkKGVuYWJsZWQp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9tYWMvV0tD
b250ZXh0UHJpdmF0ZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL21hYy9X
S0NvbnRleHRQcml2YXRlTWFjLm1tCmluZGV4IDIzYjcyODJjNWU3ZDI3NmIzOTlmMzhjYzY3OTg1
NTBjZjc5MzYyMzMuLjRiMGQxNTViYTlmOTIzODg2OTFkZTJiODEzNDM5OGJkODJjYmU4YjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2
YXRlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL21hYy9XS0NvbnRl
eHRQcml2YXRlTWFjLm1tCkBAIC0zMCw4ICszMCw2IEBACiAjaW1wb3J0ICJBUElEaWN0aW9uYXJ5
LmgiCiAjaW1wb3J0ICJBUElOdW1iZXIuaCIKICNpbXBvcnQgIkFQSVN0cmluZy5oIgotI2ltcG9y
dCAiUGx1Z2luSW5mb1N0b3JlLmgiCi0jaW1wb3J0ICJQbHVnaW5JbmZvcm1hdGlvbi5oIgogI2lt
cG9ydCAiU3RyaW5nVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJXS0FQSUNhc3QuaCIKICNpbXBvcnQg
IldLUGx1Z2luSW5mb3JtYXRpb24uaCIKQEAgLTU4LDM4ICs1NiwxMSBAQCB2b2lkIFdLQ29udGV4
dENsZWFyUGx1Z2luQ2xpZW50UG9saWNpZXMoV0tDb250ZXh0UmVmKQogCiBXS0RpY3Rpb25hcnlS
ZWYgV0tDb250ZXh0Q29weVBsdWdJbkluZm9Gb3JCdW5kbGVJZGVudGlmaWVyKFdLQ29udGV4dFJl
ZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBwbHVnSW5CdW5kbGVJZGVudGlmaWVyUmVmKQogewot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIFdlYktpdDo6UGx1Z2luTW9kdWxl
SW5mbyBwbHVnaW4gPSBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+cGx1Z2luSW5mb1N0b3Jl
KCkuZmluZFBsdWdpbldpdGhCdW5kbGVJZGVudGlmaWVyKFdlYktpdDo6dG9XVEZTdHJpbmcocGx1
Z0luQnVuZGxlSWRlbnRpZmllclJlZikpOwotICAgIGlmIChwbHVnaW4ucGF0aC5pc051bGwoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBhdXRvIGRpY3Rpb25hcnkgPSBjcmVhdGVQbHVnaW5J
bmZvcm1hdGlvbkRpY3Rpb25hcnkocGx1Z2luKTsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgm
ZGljdGlvbmFyeS5sZWFrUmVmKCkpOwotI2Vsc2UKICAgICByZXR1cm4gMDsKLSNlbmRpZgogfQog
CiB2b2lkIFdLQ29udGV4dEdldEluZm9Gb3JJbnN0YWxsZWRQbHVnSW5zKFdLQ29udGV4dFJlZiBj
b250ZXh0UmVmLCBXS0NvbnRleHRHZXRJbmZvRm9ySW5zdGFsbGVkUGx1Z0luc0Jsb2NrIGJsb2Nr
KQogewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIFZlY3RvcjxXZWJLaXQ6
OlBsdWdpbk1vZHVsZUluZm8+IHBsdWdpbnMgPSBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+
cGx1Z2luSW5mb1N0b3JlKCkucGx1Z2lucygpOwotCi0gICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9i
amVjdD4+IHBsdWdpbkluZm9EaWN0aW9uYXJpZXM7Ci0gICAgcGx1Z2luSW5mb0RpY3Rpb25hcmll
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBsdWdpbnMuc2l6ZSgpKTsKLQotICAgIGZvciAoY29u
c3QgYXV0byYgcGx1Z2luOiBwbHVnaW5zKQotICAgICAgICBwbHVnaW5JbmZvRGljdGlvbmFyaWVz
LnVuY2hlY2tlZEFwcGVuZChjcmVhdGVQbHVnaW5JbmZvcm1hdGlvbkRpY3Rpb25hcnkocGx1Z2lu
KSk7Ci0KLSAgICBSZWZQdHI8QVBJOjpBcnJheT4gYXJyYXkgPSBBUEk6OkFycmF5OjpjcmVhdGUo
V1RGTW92ZShwbHVnaW5JbmZvRGljdGlvbmFyaWVzKSk7Ci0KLSAgICBXZWJLaXQ6OnRvSW1wbChj
b250ZXh0UmVmKS0+cmVmKCk7Ci0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtibG9jayA9
IG1ha2VCbG9ja1B0cihibG9jayksIGFycmF5ID0gV1RGTW92ZShhcnJheSksIGNvbnRleHRSZWZd
IHsKLSAgICAgICAgYmxvY2soV2ViS2l0Ojp0b0FQSShhcnJheS5nZXQoKSksIDApOwotICAgIAot
ICAgICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+ZGVyZWYoKTsKLSAgICB9KTsKLSNl
bmRpZgogfQogCiB2b2lkIFdLQ29udGV4dFJlc2V0SFNUU0hvc3RzKFdLQ29udGV4dFJlZikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2Vz
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW0K
aW5kZXggZDY1ZWFkYmMyNzFhMzVkNWI1M2JmYzZiZjE1OGM2NzEyZGEwOGQ1My4uOWJjZjdlZGFm
MDZjMThiNmQ3ZDllZmU1NzA3YzBiOWY1ZjQ0ZTVjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW0KQEAgLTI4LDcgKzI4LDYgQEAK
IAogI2ltcG9ydCAiQVBJQXJyYXkuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlBs
dWdpblByb2Nlc3NNYW5hZ2VyLmgiCiAjaW1wb3J0ICJXS05TQXJyYXkuaCIKICNpbXBvcnQgIldl
YlByZWZlcmVuY2VzLmgiCiAjaW1wb3J0ICJfV0tFeHBlcmltZW50YWxGZWF0dXJlSW50ZXJuYWwu
aCIKQEAgLTExMDcsOSArMTEwNiw2IEBAIHN0YXRpYyBXZWJDb3JlOjpFZGl0YWJsZUxpbmtCZWhh
dmlvciB0b0VkaXRhYmxlTGlua0JlaGF2aW9yKF9XS0VkaXRhYmxlTGlua0JlaGF2CiAKIC0gKHZv
aWQpX3NldEV4cGVyaW1lbnRhbFBsdWdJblNhbmRib3hQcm9maWxlc0VuYWJsZWQ6KEJPT0wpZW5h
YmxlZAogewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIFdlYktpdDo6UGx1
Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLnNldEV4cGVyaW1lbnRhbFBsdWdJblNhbmRi
b3hQcm9maWxlc0VuYWJsZWQoZW5hYmxlZCk7Ci0jZW5kaWYKICAgICBfcHJlZmVyZW5jZXMtPnNl
dEV4cGVyaW1lbnRhbFBsdWdJblNhbmRib3hQcm9maWxlc0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQ
b29sLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wu
bW0KaW5kZXggOTZiNzExYmFkMjU4MDBhOWZiYmQzZDVkMDk1M2RmYjJlNDZjZmNhMS4uNzEzN2Jk
NmI0ZmZiZWUzMzZlMzI1ZjBiMmI4ZTc0YjZjZGE0MjU1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KQEAgLTMxLDcgKzMxLDYg
QEAKICNpbXBvcnQgIkRvd25sb2FkTWFuYWdlci5oIgogI2ltcG9ydCAiTGVnYWN5RG93bmxvYWRD
bGllbnQuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlBsdWdpblByb2Nlc3NNYW5h
Z2VyLmgiCiAjaW1wb3J0ICJTYW5kYm94VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJVSUdhbWVwYWRQ
cm92aWRlci5oIgogI2ltcG9ydCAiV0tEb3dubG9hZEludGVybmFsLmgiCkBAIC00NTYsMTEgKzQ1
NSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8V0tQcm9jZXNzUG9vbD4mIHNoYXJlZFByb2Nlc3NQb29s
KCkKIAogLSAoc2l6ZV90KV9wbHVnaW5Qcm9jZXNzQ291bnQKIHsKLSNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLSAgICByZXR1cm4gV2ViS2l0OjpQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6
c2luZ2xldG9uKCkucGx1Z2luUHJvY2Vzc2VzKCkuc2l6ZSgpOwotI2Vsc2UKICAgICByZXR1cm4g
MDsKLSNlbmRpZgogfQogCiAtIChOU1VJbnRlZ2VyKV9tYXhpbXVtU3VzcGVuZGVkUGFnZUNvdW50
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRl
RGF0YVJlY29yZEludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJzaXRlRGF0YVJlY29yZEludGVybmFsLmgKaW5kZXggZTE3ODI2YmZiZGYwOWJiODg1ZGYx
OTM4ZGM5NWQwMDVhZWE4MmJjOC4uZGJjNWYzZjdhMWZmNGZiNzQ5YWFmZDcwZTU3MGJhMDQ4NTY4
YWNkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
c2l0ZURhdGFSZWNvcmRJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYnNpdGVEYXRhUmVjb3JkSW50ZXJuYWwuaApAQCAtNjUsMTAgKzY1LDYgQEAg
c3RhdGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPFdlYnNpdGVEYXRhVHlwZT4gdG9XZWJzaXRlRGF0
YVR5cGUoTlNTdHJpbmcgKndlYnNpdGUKICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhVHlwZTo6
TWVkaWFLZXlzOwogICAgIGlmIChbd2Vic2l0ZURhdGFUeXBlIGlzRXF1YWxUb1N0cmluZzpfV0tX
ZWJzaXRlRGF0YVR5cGVTZWFyY2hGaWVsZFJlY2VudFNlYXJjaGVzXSkKICAgICAgICAgcmV0dXJu
IFdlYnNpdGVEYXRhVHlwZTo6U2VhcmNoRmllbGRSZWNlbnRTZWFyY2hlczsKLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBpZiAoW3dlYnNpdGVEYXRhVHlwZSBpc0VxdWFsVG9T
dHJpbmc6X1dLV2Vic2l0ZURhdGFUeXBlUGx1Z0luRGF0YV0pCi0gICAgICAgIHJldHVybiBXZWJz
aXRlRGF0YVR5cGU6OlBsdWdJbkRhdGE7Ci0jZW5kaWYKICAgICBpZiAoW3dlYnNpdGVEYXRhVHlw
ZSBpc0VxdWFsVG9TdHJpbmc6X1dLV2Vic2l0ZURhdGFUeXBlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c10pCiAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YVR5cGU6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M7CiAgICAgaWYgKFt3ZWJzaXRlRGF0YVR5cGUgaXNFcXVhbFRvU3RyaW5nOl9XS1dlYnNpdGVE
YXRhVHlwZUNyZWRlbnRpYWxzXSkKQEAgLTEyOCwxMCArMTI0LDYgQEAgc3RhdGljIGlubGluZSBS
ZXRhaW5QdHI8TlNTZXQ+IHRvV0tXZWJzaXRlRGF0YVR5cGVzKE9wdGlvblNldDxXZWJLaXQ6Oldl
YnNpdGVEYXQKICAgICAgICAgW3drV2Vic2l0ZURhdGFUeXBlcyBhZGRPYmplY3Q6X1dLV2Vic2l0
ZURhdGFUeXBlTWVkaWFLZXlzXTsKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhX
ZWJzaXRlRGF0YVR5cGU6OlNlYXJjaEZpZWxkUmVjZW50U2VhcmNoZXMpKQogICAgICAgICBbd2tX
ZWJzaXRlRGF0YVR5cGVzIGFkZE9iamVjdDpfV0tXZWJzaXRlRGF0YVR5cGVTZWFyY2hGaWVsZFJl
Y2VudFNlYXJjaGVzXTsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBpZiAo
d2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlBsdWdJbkRhdGEpKQot
ICAgICAgICBbd2tXZWJzaXRlRGF0YVR5cGVzIGFkZE9iamVjdDpfV0tXZWJzaXRlRGF0YVR5cGVQ
bHVnSW5EYXRhXTsKLSNlbmRpZgogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdl
YnNpdGVEYXRhVHlwZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcykpCiAgICAgICAgIFt3a1dlYnNp
dGVEYXRhVHlwZXMgYWRkT2JqZWN0Ol9XS1dlYnNpdGVEYXRhVHlwZVJlc291cmNlTG9hZFN0YXRp
c3RpY3NdOwogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6Q3JlZGVudGlhbHMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4
aWxpYXJ5UHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFy
eVByb2Nlc3NQcm94eS5jcHAKaW5kZXggODVhODJjYmI2ZjNiZDgyOTNkYzZjNTlhNjZiMWRlODk4
OTRkOWIzYS4uZTVhNmMzN2NhM2ZlZDQ0YTNiMTI1YTBlYzdjYjkxMmY2ZThjMjE2ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuY3BwCkBA
IC03NSwxMSArNzUsNiBAQCB2b2lkIEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0
aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdQogICAgIGNhc2UgUHJvY2Vz
c0xhdW5jaGVyOjpQcm9jZXNzVHlwZTo6V2ViOgogICAgICAgICB2YXJuYW1lID0gIldFQl9QUk9D
RVNTX0NNRF9QUkVGSVgiOwogICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLSAgICBjYXNlIFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6OlBsdWdpbjoK
LSAgICAgICAgdmFybmFtZSA9ICJQTFVHSU5fUFJPQ0VTU19DTURfUFJFRklYIjsKLSAgICAgICAg
YnJlYWs7Ci0jZW5kaWYKICAgICBjYXNlIFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6Ok5l
dHdvcms6CiAgICAgICAgIHZhcm5hbWUgPSAiTkVUV09SS19QUk9DRVNTX0NNRF9QUkVGSVgiOwog
ICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1VJRGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUu
aAppbmRleCA5ZmRlYjIzZGMyN2RmMDQ3NGRjOWMzZjM2ZWYyNmEzNWI3M2U3NWYwLi41Y2JjYTc3
YTEwMGY0MDhiYTU2NTQ1YmU5YjA5OWZiZTg4ODQ3NmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5oCkBAIC0xMjMsOSArMTIzLDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgdm9pZCBkcmF3Rm9vdGVyKFdlYlBhZ2VQcm94eSYsIFdlYkZyYW1lUHJveHkmLCBXZWJD
b3JlOjpGbG9hdFJlY3QmJikgZmluYWw7CiAKICAgICAgICAgdm9pZCBkZWNpZGVQb2xpY3lGb3JO
b3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdChXZWJQYWdlUHJveHkmLCBBUEk6OlNlY3VyaXR5
T3JpZ2luJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGFsbG93ZWQpPiYmKSBmaW5hbDsK
LSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgdm9pZCB1bmF2YWlsYWJs
ZVBsdWdpbkJ1dHRvbkNsaWNrZWQoV2ViUGFnZVByb3h5JiwgV0tQbHVnaW5VbmF2YWlsYWJpbGl0
eVJlYXNvbiwgQVBJOjpEaWN0aW9uYXJ5JikgZmluYWw7Ci0jZW5kaWYKICAgICAgICAgdm9pZCBt
b3VzZURpZE1vdmVPdmVyRWxlbWVudChXZWJQYWdlUHJveHkmLCBjb25zdCBXZWJIaXRUZXN0UmVz
dWx0RGF0YSYsIE9wdGlvblNldDxXZWJFdmVudDo6TW9kaWZpZXI+LCBBUEk6Ok9iamVjdCopOwog
ICAgICAgICB2b2lkIGRpZENsaWNrQXV0b0ZpbGxCdXR0b24oV2ViUGFnZVByb3h5JiwgQVBJOjpP
YmplY3QqKSBmaW5hbDsKICAgICAgICAgdm9pZCB0b29sYmFyc0FyZVZpc2libGUoV2ViUGFnZVBy
b3h5JiwgRnVuY3Rpb248dm9pZChib29sKT4mJikgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbQppbmRleCAwOWEzOTQwYzI5YzdiMWQ2YTQyNzg2Zjg0
OGZlNzc4YmRhODZmOWU0Li5hMDA0YTE1ZGI5NzExOTI3ZTI1ODdjNjFiMTdhN2MxOTNjYjBlOGUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUubW0KQEAgLTc0
OCwzNyArNzQ4LDYgQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6dW5mb2N1cyhXZWJQYWdl
UHJveHkqKQogICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF91bmZvY3Vz
V2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKLSNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLXN0YXRpYyBfV0tQbHVnSW5VbmF2YWlsYWJpbGl0
eVJlYXNvbiB0b1dLUGx1Z0luVW5hdmFpbGFiaWxpdHlSZWFzb24oV0tQbHVnaW5VbmF2YWlsYWJp
bGl0eVJlYXNvbiByZWFzb24pCi17Ci0gICAgc3dpdGNoIChyZWFzb24pIHsKLSAgICBjYXNlIGtX
S1BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uUGx1Z2luTWlzc2luZzoKLSAgICAgICAgcmV0dXJu
IF9XS1BsdWdJblVuYXZhaWxhYmlsaXR5UmVhc29uUGx1Z2luTWlzc2luZzsKLSAgICBjYXNlIGtX
S1BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uUGx1Z2luQ3Jhc2hlZDoKLSAgICAgICAgcmV0dXJu
IF9XS1BsdWdJblVuYXZhaWxhYmlsaXR5UmVhc29uUGx1Z2luQ3Jhc2hlZDsKLSAgICBjYXNlIGtX
S1BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uSW5zZWN1cmVQbHVnaW5WZXJzaW9uOgotICAgICAg
ICByZXR1cm4gX1dLUGx1Z0luVW5hdmFpbGFiaWxpdHlSZWFzb25JbnNlY3VyZVBsdWdpblZlcnNp
b247Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBfV0tQbHVn
SW5VbmF2YWlsYWJpbGl0eVJlYXNvblBsdWdpbk1pc3Npbmc7Ci19Ci0gICAgCi12b2lkIFVJRGVs
ZWdhdGU6OlVJQ2xpZW50Ojp1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQoV2ViUGFnZVBy
b3h5JiwgV0tQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiByZWFzb24sIEFQSTo6RGljdGlvbmFy
eSYgcGx1Z0luSW5mbykKLXsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdVbmF2
YWlsYWJsZVBsdWdJbkJ1dHRvbkNsaWNrZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBh
dXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwotICAgIGlmICgh
ZGVsZWdhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZh
dGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgp
IHVuYXZhaWxhYmxlUGx1Z0luQnV0dG9uQ2xpY2tlZFdpdGhSZWFzb246dG9XS1BsdWdJblVuYXZh
aWxhYmlsaXR5UmVhc29uKHJlYXNvbikgcGx1Z0luSW5mbzp3cmFwcGVyKHBsdWdJbkluZm8pXTsK
LX0KLSNlbmRpZgotICAgIAogc3RhdGljIF9XS1Jlc291cmNlTGltaXQgdG9XS1Jlc291cmNlTGlt
aXQoV0tSZXNvdXJjZUxpbWl0IGxpbWl0KQogewogICAgIHN3aXRjaCAobGltaXQpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1t
CmluZGV4IGIxMjE1ZmM5YjIyNDI0YmQ4NTJlM2NjYTZjZjFmYmY2MTIxYmU2NzguLjExZjA1M2Yx
YjUzN2VhNjRmYzI0MWU2MGEzZGU5NzA2MTljMDFkOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpAQCAtMzUsNyArMzUs
NiBAQAogI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKICNpbXBv
cnQgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKICNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzUHJv
eHkuaCIKLSNpbXBvcnQgIlBsdWdpblByb2Nlc3NNYW5hZ2VyLmgiCiAjaW1wb3J0ICJQcmVmZXJl
bmNlT2JzZXJ2ZXIuaCIKICNpbXBvcnQgIlNhbmRib3hVdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRl
eHRDaGVja2VyLmgiCkBAIC0xODksMTMgKzE4OCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVw
ZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRlKCkKICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gZGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzSWZFeGlzdHMoKSkKICAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKGVuYWJsZWQpOwog
ICAgIH0pOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgaWYgKCFtX3By
b2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKSkKLSAgICAgICAg
bV9wbHVnaW5Qcm9jZXNzTWFuYWdlclByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkVG9rZW4gPSBu
dWxscHRyOwotICAgIGVsc2UgaWYgKCFtX3BsdWdpblByb2Nlc3NNYW5hZ2VyUHJvY2Vzc1N1cHBy
ZXNzaW9uRGlzYWJsZWRUb2tlbikKLSAgICAgICAgbV9wbHVnaW5Qcm9jZXNzTWFuYWdlclByb2Nl
c3NTdXBwcmVzc2lvbkRpc2FibGVkVG9rZW4gPSBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xl
dG9uKCkucHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRUb2tlbigpOwotI2VuZGlmCiB9CiAKIE5T
TXV0YWJsZURpY3Rpb25hcnkgKldlYlByb2Nlc3NQb29sOjplbnN1cmVCdW5kbGVQYXJhbWV0ZXJz
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBs
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oCmluZGV4IDFj
NTc0NDU4ZWYzMDhjMWEwNTU0MWJkNmFkZDJiZGE1MDQwMGQyNjAuLmI3N2Q0YzA3Y2IwNzMyMDA5
NzRiZDMwYTM0Yzc3ZjgwZTI4OTNkZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvV2ViVmlld0ltcGwuaApAQCAtMjgsNyArMjgsNiBAQAogI2lmIFBMQVRGT1JNKE1BQykKIAog
I2luY2x1ZGUgIlBERlBsdWdpbklkZW50aWZpZXIuaCIKLSNpbmNsdWRlICJQbHVnaW5Db21wbGV4
VGV4dElucHV0U3RhdGUuaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRl
ICJXS0xheW91dE1vZGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0RPTVBhc3RlQWNjZXNzLmg+CkBA
IC0zNDEsMTMgKzM0MCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNldFNlY3VyZUlucHV0U3Rh
dGUoKTsKICAgICBib29sIGluU2VjdXJlSW5wdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5T
ZWN1cmVJbnB1dFN0YXRlOyB9CiAgICAgdm9pZCBub3RpZnlJbnB1dENvbnRleHRBYm91dERpc2Nh
cmRlZENvbXBvc2l0aW9uKCk7Ci0gICAgdm9pZCBzZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3Rh
dGVBbmRJZGVudGlmaWVyKFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSwgdWludDY0X3QgaWRl
bnRpZmllcik7CiAgICAgdm9pZCBkaXNhYmxlQ29tcGxleFRleHRJbnB1dElmTmVjZXNzYXJ5KCk7
CiAgICAgYm9vbCBoYW5kbGVQbHVnaW5Db21wbGV4VGV4dElucHV0S2V5RG93bihOU0V2ZW50ICop
OwogICAgIGJvb2wgdHJ5SGFuZGxlUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd24oTlNFdmVu
dCAqKTsKICAgICB2b2lkIHBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQoYm9vbCBwbHVn
aW5IYXNGb2N1c0FuZFdpbmRvd0hhc0ZvY3VzLCB1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElu
cHV0SWRlbnRpZmllcik7CiAgICAgYm9vbCB0cnlQb3N0UHJvY2Vzc1BsdWdpbkNvbXBsZXhUZXh0
SW5wdXRLZXlEb3duKE5TRXZlbnQgKik7Ci0gICAgUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRl
IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luQ29t
cGxleFRleHRJbnB1dFN0YXRlOyB9CiAgICAgdWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1
dElkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVu
dGlmaWVyOyB9CiAgICAgCiAgICAgdm9pZCBoYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dChj
b25zdCBTdHJpbmcmKTsKQEAgLTcxNyw4ICs3MTQsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBw
b3N0RmFrZU1vdXNlTW92ZWRFdmVudEZvckZsYWdzQ2hhbmdlZEV2ZW50KE5TRXZlbnQgKik7CiAK
LSAgICB2b2lkIHNldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZShQbHVnaW5Db21wbGV4VGV4
dElucHV0U3RhdGUpOwotCiAgICAgdm9pZCBzZW5kVG9vbFRpcE1vdXNlRXhpdGVkKCk7CiAgICAg
dm9pZCBzZW5kVG9vbFRpcE1vdXNlRW50ZXJlZCgpOwogCkBAIC03OTMsOSArNzg4LDYgQEAgcHJp
dmF0ZToKICAgICAvLyBUaGUgaWRlbnRpZmllciBvZiB0aGUgcGx1Zy1pbiB3ZSB3YW50IHRvIHNl
bmQgY29tcGxleCB0ZXh0IGlucHV0IHRvLCBvciAwIGlmIHRoZXJlIGlzIG5vbmUuCiAgICAgdWlu
dDY0X3QgbV9wbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciB7IDAgfTsKIAotICAgIC8v
IFRoZSBzdGF0ZSBvZiBjb21wbGV4IHRleHQgaW5wdXQgZm9yIHRoZSBwbHVnLWluLgotICAgIFBs
dWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSBtX3BsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSB7
IFBsdWdpbkNvbXBsZXhUZXh0SW5wdXREaXNhYmxlZCB9OwotCiAjaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKQogICAgIFJldGFpblB0cjxXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyPiBtX2Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCmluZGV4IGJiZDI1OTlkOWVhZjM1NDMxMmVjYTFjZmJh
MTM2MmMxMzgzNjlhODUuLjA5YWQzOThiY2FiNmQ0MmY0MDhhN2ZiOGY0ODYyOGYyYzEwYjQxYjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCkBAIC0y
NzUzLDczICsyNzUzLDE3IEBAIHZvaWQgV2ViVmlld0ltcGw6Om5vdGlmeUlucHV0Q29udGV4dEFi
b3V0RGlzY2FyZGVkQ29tcG9zaXRpb24oKQogICAgIFtbbV92aWV3IF93ZWJfc3VwZXJJbnB1dENv
bnRleHRdIGRpc2NhcmRNYXJrZWRUZXh0XTsgLy8gSW5mb3JtIHRoZSBpbnB1dCBtZXRob2QgdGhh
dCB3ZSB3b24ndCBoYXZlIGFuIGlubGluZSBpbnB1dCBhcmVhIGRlc3BpdGUgaGF2aW5nIGJlZW4g
YXNrZWQgdG8uCiB9CiAKLXZvaWQgV2ViVmlld0ltcGw6OnNldFBsdWdpbkNvbXBsZXhUZXh0SW5w
dXRTdGF0ZShQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUgcGx1Z2luQ29tcGxleFRleHRJbnB1
dFN0YXRlKQotewotICAgIG1fcGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlID0gcGx1Z2luQ29t
cGxleFRleHRJbnB1dFN0YXRlOwotCi0gICAgaWYgKG1fcGx1Z2luQ29tcGxleFRleHRJbnB1dFN0
YXRlICE9IFBsdWdpbkNvbXBsZXhUZXh0SW5wdXREaXNhYmxlZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gU2VuZCBiYWNrIGFuIGVtcHR5IHN0cmluZyB0byB0aGUgcGx1Zy1pbi4gVGhpcyB3
aWxsIGRpc2FibGUgdGV4dCBpbnB1dC4KLSAgICBtX3BhZ2UtPnNlbmRDb21wbGV4VGV4dElucHV0
VG9QbHVnaW4obV9wbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgU3RyaW5nKCkpOwot
fQotCi12b2lkIFdlYlZpZXdJbXBsOjpzZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGVBbmRJ
ZGVudGlmaWVyKFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSBwbHVnaW5Db21wbGV4VGV4dElu
cHV0U3RhdGUsIHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyKQotewot
ICAgIGlmIChwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciAhPSBtX3BsdWdpbkNvbXBs
ZXhUZXh0SW5wdXRJZGVudGlmaWVyKSB7Ci0gICAgICAgIC8vIFdlJ3JlIGFza2VkIHRvIHVwZGF0
ZSB0aGUgc3RhdGUgZm9yIGEgcGx1Zy1pbiB0aGF0IGRvZXNuJ3QgaGF2ZSBmb2N1cy4KLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZShw
bHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUpOwotfQotCiB2b2lkIFdlYlZpZXdJbXBsOjpkaXNh
YmxlQ29tcGxleFRleHRJbnB1dElmTmVjZXNzYXJ5KCkKIHsKLSAgICBpZiAoIW1fcGx1Z2luQ29t
cGxleFRleHRJbnB1dElkZW50aWZpZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3Bs
dWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSAhPSBQbHVnaW5Db21wbGV4VGV4dElucHV0RW5hYmxl
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIHRleHQgaW5wdXQgd2lu
ZG93IGhhcyBiZWVuIGRpc21pc3NlZC4KLSAgICBpZiAoIVtbV0tUZXh0SW5wdXRXaW5kb3dDb250
cm9sbGVyIHNoYXJlZFRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXJdIGhhc01hcmtlZFRleHRdKQot
ICAgICAgICBzZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUoUGx1Z2luQ29tcGxleFRleHRJ
bnB1dERpc2FibGVkKTsKIH0KIAotYm9vbCBXZWJWaWV3SW1wbDo6aGFuZGxlUGx1Z2luQ29tcGxl
eFRleHRJbnB1dEtleURvd24oTlNFdmVudCAqZXZlbnQpCitib29sIFdlYlZpZXdJbXBsOjpoYW5k
bGVQbHVnaW5Db21wbGV4VGV4dElucHV0S2V5RG93bihOU0V2ZW50ICopCiB7Ci0gICAgQVNTRVJU
KG1fcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIpOwotICAgIEFTU0VSVChtX3BsdWdp
bkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSAhPSBQbHVnaW5Db21wbGV4VGV4dElucHV0RGlzYWJsZWQp
OwotCi0gICAgQk9PTCB1c2luZ0xlZ2FjeUNvY29hVGV4dElucHV0ID0gbV9wbHVnaW5Db21wbGV4
VGV4dElucHV0U3RhdGUgPT0gUGx1Z2luQ29tcGxleFRleHRJbnB1dEVuYWJsZWRMZWdhY3k7Ci0K
LSAgICBOU1N0cmluZyAqc3RyaW5nID0gbmlsOwotICAgIEJPT0wgZGlkSGFuZGxlRXZlbnQgPSBb
W1dLVGV4dElucHV0V2luZG93Q29udHJvbGxlciBzaGFyZWRUZXh0SW5wdXRXaW5kb3dDb250cm9s
bGVyXSBpbnRlcnByZXRLZXlFdmVudDpldmVudCB1c2luZ0xlZ2FjeUNvY29hVGV4dElucHV0OnVz
aW5nTGVnYWN5Q29jb2FUZXh0SW5wdXQgc3RyaW5nOiZzdHJpbmddOwotCi0gICAgaWYgKHN0cmlu
ZykgewotICAgICAgICBtX3BhZ2UtPnNlbmRDb21wbGV4VGV4dElucHV0VG9QbHVnaW4obV9wbHVn
aW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgc3RyaW5nKTsKLQotICAgICAgICBpZiAoIXVz
aW5nTGVnYWN5Q29jb2FUZXh0SW5wdXQpCi0gICAgICAgICAgICBtX3BsdWdpbkNvbXBsZXhUZXh0
SW5wdXRTdGF0ZSA9IFBsdWdpbkNvbXBsZXhUZXh0SW5wdXREaXNhYmxlZDsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZGlkSGFuZGxlRXZlbnQ7CisgICAgcmV0dXJuIE5POwogfQogCi1ib29sIFdlYlZp
ZXdJbXBsOjp0cnlIYW5kbGVQbHVnaW5Db21wbGV4VGV4dElucHV0S2V5RG93bihOU0V2ZW50ICpl
dmVudCkKK2Jvb2wgV2ViVmlld0ltcGw6OnRyeUhhbmRsZVBsdWdpbkNvbXBsZXhUZXh0SW5wdXRL
ZXlEb3duKE5TRXZlbnQgKikKIHsKLSAgICBpZiAoIW1fcGx1Z2luQ29tcGxleFRleHRJbnB1dElk
ZW50aWZpZXIgfHwgbV9wbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUgPT0gUGx1Z2luQ29tcGxl
eFRleHRJbnB1dERpc2FibGVkKQotICAgICAgICByZXR1cm4gTk87Ci0KLSAgICAvLyBDaGVjayBp
ZiB0aGUgdGV4dCBpbnB1dCB3aW5kb3cgaGFzIGJlZW4gZGlzbWlzc2VkIGFuZCBsZXQgdGhlIHBs
dWctaW4gcHJvY2VzcyBrbm93LgotICAgIC8vIFRoaXMgaXMgb25seSB2YWxpZCB3aXRoIHRoZSB1
cGRhdGVkIENvY29hIHRleHQgaW5wdXQgc3BlYy4KLSAgICBkaXNhYmxlQ29tcGxleFRleHRJbnB1
dElmTmVjZXNzYXJ5KCk7Ci0KLSAgICAvLyBUcnkgZmVlZGluZyB0aGUga2V5Ym9hcmQgZXZlbnQg
ZGlyZWN0bHkgdG8gdGhlIHBsdWctaW4uCi0gICAgaWYgKG1fcGx1Z2luQ29tcGxleFRleHRJbnB1
dFN0YXRlID09IFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRFbmFibGVkTGVnYWN5KQotICAgICAgICBy
ZXR1cm4gaGFuZGxlUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd24oZXZlbnQpOwotCiAgICAg
cmV0dXJuIE5POwogfQogCkBAIC0yODUyLDE2ICsyNzk2LDkgQEAgdm9pZCBXZWJWaWV3SW1wbDo6
cGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZChib29sIHBsdWdpbkhhc0ZvY3VzQW5kV2lu
ZG93SGEKICAgICBbTlNBcHAgdXBkYXRlV2luZG93c107CiB9CiAKLWJvb2wgV2ViVmlld0ltcGw6
OnRyeVBvc3RQcm9jZXNzUGx1Z2luQ29tcGxleFRleHRJbnB1dEtleURvd24oTlNFdmVudCAqZXZl
bnQpCitib29sIFdlYlZpZXdJbXBsOjp0cnlQb3N0UHJvY2Vzc1BsdWdpbkNvbXBsZXhUZXh0SW5w
dXRLZXlEb3duKE5TRXZlbnQgKikKIHsKLSAgICBpZiAoIW1fcGx1Z2luQ29tcGxleFRleHRJbnB1
dElkZW50aWZpZXIgfHwgbV9wbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUgPT0gUGx1Z2luQ29t
cGxleFRleHRJbnB1dERpc2FibGVkKQotICAgICAgICByZXR1cm4gTk87Ci0KLSAgICAvLyBJbiB0
aGUgbGVnYWN5IHRleHQgaW5wdXQgbW9kZWwsIHRoZSBldmVudCBoYXMgYWxyZWFkeSBiZWVuIHNl
bnQgdG8gdGhlIGlucHV0IG1ldGhvZC4KLSAgICBpZiAobV9wbHVnaW5Db21wbGV4VGV4dElucHV0
U3RhdGUgPT0gUGx1Z2luQ29tcGxleFRleHRJbnB1dEVuYWJsZWRMZWdhY3kpCi0gICAgICAgIHJl
dHVybiBOTzsKLQotICAgIHJldHVybiBoYW5kbGVQbHVnaW5Db21wbGV4VGV4dElucHV0S2V5RG93
bihldmVudCk7CisgICAgcmV0dXJuIE5POwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjpoYW5kbGVB
Y2NlcHRlZEFsdGVybmF0aXZlVGV4dChjb25zdCBTdHJpbmcmIGFjY2VwdGVkQWx0ZXJuYXRpdmUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1
bmNoZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hl
ci5oCmluZGV4IGQzMGY2ZDQ5YjA5MmY3OTQxNzU4NTY4NTIxYTA2YWEzMGQyYmRiZWQuLjc1NjZj
NGU2NDc3MzliYmIxYjBmMzFhMzc1NzdiNzYyYzY4YTE0ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oCkBAIC02OSw5ICs2OSw2
IEBAIHB1YmxpYzoKICAgICAKICAgICBlbnVtIGNsYXNzIFByb2Nlc3NUeXBlIHsKICAgICAgICAg
V2ViLAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBQbHVnaW4sCi0j
ZW5kaWYKICAgICAgICAgTmV0d29yaywKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAgICAgICAg
IEdQVSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0xhdW5jaGVyL21hYy9Q
cm9jZXNzTGF1bmNoZXJNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9MYXVuY2hlci9t
YWMvUHJvY2Vzc0xhdW5jaGVyTWFjLm1tCmluZGV4IGVjMjZkMzc0M2FhYTJkNjdiNTkyMDJlZDlh
NmFjMDRhOWFhM2JiOGYuLmUyODhlMzA4NGIwZDEyZGQzZGQ4MzFlYjZmMjYzYjQ0ZjdhZmU5NmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0xhdW5jaGVyL21hYy9Qcm9jZXNz
TGF1bmNoZXJNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTGF1bmNoZXIvbWFj
L1Byb2Nlc3NMYXVuY2hlck1hYy5tbQpAQCAtNjgsMTAgKzY4LDYgQEAgc3RhdGljIGNvbnN0IGNo
YXIqIHNlcnZpY2VOYW1lKGNvbnN0IFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYgbGF1
bmNoT3B0aW8KICNpZiBFTkFCTEUoV0VCX0FVVEhOKQogICAgIGNhc2UgUHJvY2Vzc0xhdW5jaGVy
OjpQcm9jZXNzVHlwZTo6V2ViQXV0aG46CiAgICAgICAgIHJldHVybiAiY29tLmFwcGxlLldlYktp
dC5XZWJBdXRobiI7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAg
ICBjYXNlIFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6OlBsdWdpbjoKLSAgICAgICAgcmV0
dXJuICJjb20uYXBwbGUuV2ViS2l0LlBsdWdpbi42NCI7CiAjZW5kaWYKICAgICB9CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKaW5kZXggOWU3ZGYxODQxYWU5ZjU5OTA4NDc3Y2Rk
YTFhZGM1MTA1ODY3OTZlMC4uNWUyZWM3NTU5OWM1NmFjYTU0NmJhZDJhNWM2M2RlZTFhMGE2NzMy
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaApAQCAtNTYsNyArNTYsNiBAQAog
I2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRl
ICJQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUuaCIKICNpbmNsdWRlICJSZW1vdGVMYXllclRy
ZWVOb2RlLmgiCiAjaW5jbHVkZSAiV0tGb3VuZGF0aW9uLmgiCiAKQEAgLTQyMyw3ICs0MjIsNiBA
QCBwdWJsaWM6CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgdmlydHVhbCB2b2lkIHBsdWdpbkZv
Y3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElk
ZW50aWZpZXIsIGJvb2wgcGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1cykgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUodWludDY0X3QgcGx1
Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0
ZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkFs
dGVybmF0aXZlVGV4dFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hP
ZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVS
ZXBsYWNlbWVudFN0cmluZ3MpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rp
b25QYW5lbChXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KSA9IDA7
CiAgICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6
UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwYmYwYmY0ZDQxNzk4NDI4OTdiM2Y1ODc4MmQyZTk1MDgyODQz
Yzg3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDI1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJQbHVnaW5Nb2R1bGVJbmZvLmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9y
aWdpbi5oPgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQu
aD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1VSTC5oPgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1QbHVnaW5J
bmZvU3RvcmU6OlBsdWdpbkluZm9TdG9yZSgpCi0gICAgOiBtX3BsdWdpbkxpc3RJc1VwVG9EYXRl
KGZhbHNlKQotewotfQotCi12b2lkIFBsdWdpbkluZm9TdG9yZTo6c2V0QWRkaXRpb25hbFBsdWdp
bnNEaXJlY3Rvcmllcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMpCi17Ci0gICAg
bV9hZGRpdGlvbmFsUGx1Z2luc0RpcmVjdG9yaWVzID0gZGlyZWN0b3JpZXM7Ci0gICAgcmVmcmVz
aCgpOwotfQotCi12b2lkIFBsdWdpbkluZm9TdG9yZTo6cmVmcmVzaCgpCi17Ci0gICAgbV9wbHVn
aW5MaXN0SXNVcFRvRGF0ZSA9IGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4KLXN0YXRpYyB2b2lkIGFkZEZyb21WZWN0b3IoVCYgaGFzaFNldCwgY29uc3QgVSYg
dmVjdG9yKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgKytp
KQotICAgICAgICBoYXNoU2V0LmFkZCh2ZWN0b3JbaV0pOwotfQotCi12b2lkIFBsdWdpbkluZm9T
dG9yZTo6bG9hZFBsdWdpbnNJZk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKG1fcGx1Z2luTGlzdElz
VXBUb0RhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIExpc3RIYXNoU2V0PFN0cmluZz4gdW5p
cXVlUGx1Z2luUGF0aHM7Ci0KLSAgICAvLyBGaXJzdCwgbG9hZCBwbHVnLWlucyBmcm9tIHRoZSBh
ZGRpdGlvbmFsIHBsdWctaW5zIGRpcmVjdG9yaWVzIHNwZWNpZmllZC4KLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fYWRkaXRpb25hbFBsdWdpbnNEaXJlY3Rvcmllcy5zaXplKCk7ICsraSkK
LSAgICAgICAgYWRkRnJvbVZlY3Rvcih1bmlxdWVQbHVnaW5QYXRocywgcGx1Z2luUGF0aHNJbkRp
cmVjdG9yeShtX2FkZGl0aW9uYWxQbHVnaW5zRGlyZWN0b3JpZXNbaV0pKTsKLQotICAgIC8vIFRo
ZW4gbG9hZCBwbHVnLWlucyBmcm9tIHRoZSBzdGFuZGFyZCBwbHVnLWlucyBkaXJlY3Rvcmllcy4K
LSAgICBWZWN0b3I8U3RyaW5nPiBkaXJlY3RvcmllcyA9IHBsdWdpbnNEaXJlY3RvcmllcygpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGlyZWN0b3JpZXMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIGFkZEZyb21WZWN0b3IodW5pcXVlUGx1Z2luUGF0aHMsIHBsdWdpblBhdGhzSW5EaXJlY3Rv
cnkoZGlyZWN0b3JpZXNbaV0pKTsKLQotICAgIC8vIFRoZW4gbG9hZCBwbHVnLWlucyB0aGF0IGFy
ZSBub3QgaW4gdGhlIHN0YW5kYXJkIHBsdWctaW5zIGRpcmVjdG9yaWVzLgotICAgIGFkZEZyb21W
ZWN0b3IodW5pcXVlUGx1Z2luUGF0aHMsIGluZGl2aWR1YWxQbHVnaW5QYXRocygpKTsKLQotICAg
IG1fcGx1Z2lucy5jbGVhcigpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBwbHVnaW5QYXRoIDog
dW5pcXVlUGx1Z2luUGF0aHMpCi0gICAgICAgIGxvYWRQbHVnaW4obV9wbHVnaW5zLCBwbHVnaW5Q
YXRoKTsKLQotICAgIG1fcGx1Z2luTGlzdElzVXBUb0RhdGUgPSB0cnVlOwotfQotCi12b2lkIFBs
dWdpbkluZm9TdG9yZTo6bG9hZFBsdWdpbihWZWN0b3I8UGx1Z2luTW9kdWxlSW5mbz4mIHBsdWdp
bnMsIGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCkKLXsKLSAgICBQbHVnaW5Nb2R1bGVJbmZvIHBs
dWdpbjsKLSAgICAKLSAgICBpZiAoIWdldFBsdWdpbkluZm8ocGx1Z2luUGF0aCwgcGx1Z2luKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFzaG91bGRVc2VQbHVnaW4ocGx1Z2lucywgcGx1
Z2luKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHBsdWdpbnMuYXBwZW5kKHBsdWdpbik7
Ci19Ci0KLVZlY3RvcjxQbHVnaW5Nb2R1bGVJbmZvPiBQbHVnaW5JbmZvU3RvcmU6OnBsdWdpbnMo
KQotewotICAgIGxvYWRQbHVnaW5zSWZOZWNlc3NhcnkoKTsKLSAgICByZXR1cm4gbV9wbHVnaW5z
OwotfQotCi1QbHVnaW5Nb2R1bGVJbmZvIFBsdWdpbkluZm9TdG9yZTo6ZmluZFBsdWdpbkZvck1J
TUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFBsdWdpbkRhdGE6OkFsbG93ZWRQbHVnaW5U
eXBlcyBhbGxvd2VkUGx1Z2luVHlwZXMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtaW1lVHlwZS5p
c051bGwoKSk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIHBsdWdpbiA6IG1fcGx1Z2lucykgewot
ICAgICAgICBpZiAoYWxsb3dlZFBsdWdpblR5cGVzID09IFBsdWdpbkRhdGE6Ok9ubHlBcHBsaWNh
dGlvblBsdWdpbnMgJiYgIXBsdWdpbi5pbmZvLmlzQXBwbGljYXRpb25QbHVnaW4pCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG1pbWVDbGFzc0luZm8g
OiBwbHVnaW4uaW5mby5taW1lcykgewotICAgICAgICAgICAgaWYgKG1pbWVDbGFzc0luZm8udHlw
ZSA9PSBtaW1lVHlwZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcGx1Z2luOwotICAgICAgICB9
Ci0gICAgfQotICAgIAotICAgIHJldHVybiBQbHVnaW5Nb2R1bGVJbmZvKCk7Ci19Ci0KLVBsdWdp
bk1vZHVsZUluZm8gUGx1Z2luSW5mb1N0b3JlOjpmaW5kUGx1Z2luRm9yRXh0ZW5zaW9uKGNvbnN0
IFN0cmluZyYgZXh0ZW5zaW9uLCBTdHJpbmcmIG1pbWVUeXBlLCBQbHVnaW5EYXRhOjpBbGxvd2Vk
UGx1Z2luVHlwZXMgYWxsb3dlZFBsdWdpblR5cGVzKSBjb25zdAotewotICAgIEFTU0VSVCghZXh0
ZW5zaW9uLmlzTnVsbCgpKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgcGx1Z2luIDogbV9wbHVn
aW5zKSB7Ci0gICAgICAgIGlmIChhbGxvd2VkUGx1Z2luVHlwZXMgPT0gUGx1Z2luRGF0YTo6T25s
eUFwcGxpY2F0aW9uUGx1Z2lucyAmJiAhcGx1Z2luLmluZm8uaXNBcHBsaWNhdGlvblBsdWdpbikK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZvciAoY29uc3QgYXV0byYgbWltZUNs
YXNzSW5mbyA6IHBsdWdpbi5pbmZvLm1pbWVzKSB7Ci0gICAgICAgICAgICBpZiAobWltZUNsYXNz
SW5mby5leHRlbnNpb25zLmNvbnRhaW5zKGV4dGVuc2lvbikpIHsKLSAgICAgICAgICAgICAgICAv
LyBXZSBmb3VuZCBhIHN1cHBvcnRlZCBleHRlbnNpb24sIHNldCB0aGUgY29ycmVjdCBNSU1FIHR5
cGUuCi0gICAgICAgICAgICAgICAgbWltZVR5cGUgPSBtaW1lQ2xhc3NJbmZvLnR5cGU7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHBsdWdpbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gUGx1Z2luTW9kdWxlSW5mbygpOwotfQotCi1zdGF0aWMgU3Ry
aW5nIHBhdGhFeHRlbnNpb24oY29uc3QgVVJMJiB1cmwpCi17Ci0gICAgYXV0byBmaWxlbmFtZSA9
IHVybC5sYXN0UGF0aENvbXBvbmVudCgpOwotICAgIGlmIChmaWxlbmFtZS5lbmRzV2l0aCgnLycp
KQotICAgICAgICByZXR1cm4geyB9OwotICAgIHNpemVfdCBsYXN0RG90UG9zaXRpb24gPSBmaWxl
bmFtZS5yZXZlcnNlRmluZCgnLicpOwotICAgIGlmIChsYXN0RG90UG9zaXRpb24gPT0gbm90Rm91
bmQpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIGZpbGVuYW1lLnN1YnN0cmluZyhs
YXN0RG90UG9zaXRpb24gKyAxKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwotfQotCi0jaWYg
IVBMQVRGT1JNKENPQ09BKQotCi1QbHVnaW5Nb2R1bGVMb2FkUG9saWN5IFBsdWdpbkluZm9TdG9y
ZTo6ZGVmYXVsdExvYWRQb2xpY3lGb3JQbHVnaW4oY29uc3QgUGx1Z2luTW9kdWxlSW5mbyYpCi17
Ci0gICAgcmV0dXJuIFBsdWdpbk1vZHVsZUxvYWROb3JtYWxseTsKLX0KLSAgICAKLVBsdWdpbk1v
ZHVsZUluZm8gUGx1Z2luSW5mb1N0b3JlOjpmaW5kUGx1Z2luV2l0aEJ1bmRsZUlkZW50aWZpZXIo
Y29uc3QgU3RyaW5nJikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
UGx1Z2luTW9kdWxlSW5mbygpOwotfQotCi0jZW5kaWYKLQotUGx1Z2luTW9kdWxlSW5mbyBQbHVn
aW5JbmZvU3RvcmU6OmZpbmRQbHVnaW4oU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVVJMJiB1cmws
IFBsdWdpbkRhdGE6OkFsbG93ZWRQbHVnaW5UeXBlcyBhbGxvd2VkUGx1Z2luVHlwZXMpCi17Ci0g
ICAgbG9hZFBsdWdpbnNJZk5lY2Vzc2FyeSgpOwotICAgIAotICAgIC8vIEZpcnN0LCBjaGVjayBp
ZiB3ZSBjYW4gZ2V0IHRoZSBwbHVnLWluIGJhc2VkIG9uIGl0cyBNSU1FIHR5cGUuCi0gICAgaWYg
KCFtaW1lVHlwZS5pc051bGwoKSkgewotICAgICAgICBQbHVnaW5Nb2R1bGVJbmZvIHBsdWdpbiA9
IGZpbmRQbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSwgYWxsb3dlZFBsdWdpblR5cGVzKTsKLSAg
ICAgICAgaWYgKCFwbHVnaW4ucGF0aC5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBwbHVn
aW47Ci0gICAgfQotCi0gICAgLy8gTmV4dCwgY2hlY2sgaWYgYW55IHBsdWctaW5zIGNsYWltIHRv
IHN1cHBvcnQgdGhlIFVSTCBleHRlbnNpb24uCi0gICAgU3RyaW5nIGV4dGVuc2lvbiA9IHBhdGhF
eHRlbnNpb24odXJsKTsKLSAgICBpZiAoIWV4dGVuc2lvbi5pc051bGwoKSAmJiBtaW1lVHlwZS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgUGx1Z2luTW9kdWxlSW5mbyBwbHVnaW4gPSBmaW5kUGx1Z2lu
Rm9yRXh0ZW5zaW9uKGV4dGVuc2lvbiwgbWltZVR5cGUsIGFsbG93ZWRQbHVnaW5UeXBlcyk7Ci0g
ICAgICAgIGlmICghcGx1Z2luLnBhdGguaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gcGx1
Z2luOwotICAgICAgICAKLSAgICAgICAgLy8gRmluYWxseSwgdHJ5IHRvIGdldCB0aGUgTUlNRSB0
eXBlIGZyb20gdGhlIGV4dGVuc2lvbiBpbiBhIHBsYXRmb3JtIHNwZWNpZmljIG1hbm5lciBhbmQg
dXNlIHRoYXQuCi0gICAgICAgIFN0cmluZyBleHRlbnNpb25NaW1lVHlwZSA9IE1JTUVUeXBlUmVn
aXN0cnk6Om1pbWVUeXBlRm9yRXh0ZW5zaW9uKGV4dGVuc2lvbik7Ci0gICAgICAgIGlmICghZXh0
ZW5zaW9uTWltZVR5cGUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIFBsdWdpbk1vZHVsZUluZm8g
cGx1Z2luID0gZmluZFBsdWdpbkZvck1JTUVUeXBlKGV4dGVuc2lvbk1pbWVUeXBlLCBhbGxvd2Vk
UGx1Z2luVHlwZXMpOwotICAgICAgICAgICAgaWYgKCFwbHVnaW4ucGF0aC5pc051bGwoKSkgewot
ICAgICAgICAgICAgICAgIG1pbWVUeXBlID0gZXh0ZW5zaW9uTWltZVR5cGU7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHBsdWdpbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAg
ICAKLSAgICByZXR1cm4gUGx1Z2luTW9kdWxlSW5mbygpOwotfQotCi1ib29sIFBsdWdpbkluZm9T
dG9yZTo6aXNTdXBwb3J0ZWRQbHVnaW4oY29uc3QgUGx1Z2luSW5mb1N0b3JlOjpTdXBwb3J0ZWRQ
bHVnaW4mIHBsdWdpbiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVVJMJiBwbHVnaW5V
UkwpCi17Ci0gICAgaWYgKCFtaW1lVHlwZS5pc0VtcHR5KCkgJiYgcGx1Z2luLm1pbWVUeXBlcy5j
b250YWlucyhtaW1lVHlwZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGF1dG8gZXh0ZW5z
aW9uID0gcGF0aEV4dGVuc2lvbihwbHVnaW5VUkwpOwotICAgIHJldHVybiBleHRlbnNpb24uaXNF
bXB0eSgpID8gZmFsc2UgOiBwbHVnaW4uZXh0ZW5zaW9ucy5jb250YWlucyhleHRlbnNpb24pOwot
fQotCi1ib29sIFBsdWdpbkluZm9TdG9yZTo6aXNTdXBwb3J0ZWRQbHVnaW4oY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgY29uc3QgVVJMJiBwbHVnaW5VUkwsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFVS
TCYgcGFnZVVSTCkKLXsKLSAgICAvLyBXZSBjaGVjayBvbmx5IHBhZ2VVUkwgZm9yIGNvbnNpc3Rl
bmN5IHdpdGggV2ViUHJvY2VzcyB2aXNpYmxlIHBsdWdpbnMuCi0gICAgaWYgKCFtX3N1cHBvcnRl
ZFBsdWdpbnMpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIG1fc3VwcG9ydGVk
UGx1Z2lucy0+ZmluZE1hdGNoaW5nKFsmXSAoYXV0byYmIHBsdWdpbikgewotICAgICAgICByZXR1
cm4gcGFnZVVSTC5pc01hdGNoaW5nRG9tYWluKHBsdWdpbi5tYXRjaGluZ0RvbWFpbikgJiYgaXNT
dXBwb3J0ZWRQbHVnaW4ocGx1Z2luLCBtaW1lVHlwZSwgcGx1Z2luVVJMKTsKLSAgICB9KSAhPSBu
b3RGb3VuZDsKLX0KLQotc3RkOjpvcHRpb25hbDxWZWN0b3I8U3VwcG9ydGVkUGx1Z2luSWRlbnRp
Zmllcj4+IFBsdWdpbkluZm9TdG9yZTo6c3VwcG9ydGVkUGx1Z2luSWRlbnRpZmllcnMoKQotewot
ICAgIGlmICghbV9zdXBwb3J0ZWRQbHVnaW5zKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotCi0gICAgcmV0dXJuIFdURjo6bWFwKCptX3N1cHBvcnRlZFBsdWdpbnMsIFtdIChhdXRvJiYg
aXRlbSkgewotICAgICAgICByZXR1cm4gU3VwcG9ydGVkUGx1Z2luSWRlbnRpZmllciB7IGl0ZW0u
bWF0Y2hpbmdEb21haW4sIGl0ZW0uaWRlbnRpZmllciB9OwotICAgIH0pOwotfQotCi12b2lkIFBs
dWdpbkluZm9TdG9yZTo6YWRkU3VwcG9ydGVkUGx1Z2luKFN0cmluZyYmIGRvbWFpbk5hbWUsIFN0
cmluZyYmIGlkZW50aWZpZXIsIEhhc2hTZXQ8U3RyaW5nPiYmIG1pbWVUeXBlcywgSGFzaFNldDxT
dHJpbmc+IGV4dGVuc2lvbnMpCi17Ci0gICAgaWYgKCFtX3N1cHBvcnRlZFBsdWdpbnMpCi0gICAg
ICAgIG1fc3VwcG9ydGVkUGx1Z2lucyA9IFZlY3RvcjxTdXBwb3J0ZWRQbHVnaW4+IHsgfTsKLQot
ICAgIG1fc3VwcG9ydGVkUGx1Z2lucy0+YXBwZW5kKFN1cHBvcnRlZFBsdWdpbiB7IFdURk1vdmUo
ZG9tYWluTmFtZSksIFdURk1vdmUoaWRlbnRpZmllciksIFdURk1vdmUobWltZVR5cGVzKSwgV1RG
TW92ZShleHRlbnNpb25zKSB9KTsKLX0KLQotUGx1Z2luTW9kdWxlSW5mbyBQbHVnaW5JbmZvU3Rv
cmU6OmluZm9Gb3JQbHVnaW5XaXRoUGF0aChjb25zdCBTdHJpbmcmIHBsdWdpblBhdGgpIGNvbnN0
Ci17Ci0gICAgZm9yIChjb25zdCBhdXRvJiBwbHVnaW4gOiBtX3BsdWdpbnMpIHsKLSAgICAgICAg
aWYgKHBsdWdpbi5wYXRoID09IHBsdWdpblBhdGgpCi0gICAgICAgICAgICByZXR1cm4gcGx1Z2lu
OwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBQbHVnaW5N
b2R1bGVJbmZvKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MzA5YjgwNTZiNTIwZmRiYWZhMmUzMjM1NTBlOGJiMzZjNWNlZDhlYy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpbkluZm9TdG9yZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiUGx1Z2luTW9kdWxlSW5mby5oIgotCi0jaW5j
bHVkZSA8V2ViQ29yZS9QbHVnaW5EYXRhLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFBsdWdpbkluZm9TdG9yZTsKLQotY2xhc3MgUGx1
Z2luSW5mb1N0b3JlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQbHVnaW5JbmZvU3RvcmUp
OwotCi1wdWJsaWM6Ci0gICAgUGx1Z2luSW5mb1N0b3JlKCk7Ci0KLSAgICB2b2lkIHNldEFkZGl0
aW9uYWxQbHVnaW5zRGlyZWN0b3JpZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKLQotICAgIHZv
aWQgcmVmcmVzaCgpOwotICAgIFZlY3RvcjxQbHVnaW5Nb2R1bGVJbmZvPiBwbHVnaW5zKCk7Ci0K
LSAgICAvLyBSZXR1cm5zIHRoZSBpbmZvIGZvciBhIHBsdWctaW4gdGhhdCBjYW4gaGFuZGxlIHRo
ZSBnaXZlbiBNSU1FIHR5cGUuCi0gICAgLy8gSWYgdGhlIE1JTUUgdHlwZSBpcyBudWxsLCB0aGUg
ZmlsZSBleHRlbnNpb24gb2YgdGhlIGdpdmVuIHVybCB3aWxsIGJlIHVzZWQgdG8gaW5mZXIgdGhl
Ci0gICAgLy8gcGx1Zy1pbiB0eXBlLiBJbiB0aGF0IGNhc2UsIG1pbWVUeXBlIHdpbGwgYmUgZmls
bGVkIGluIHdpdGggdGhlIHJpZ2h0IE1JTUUgdHlwZS4KLSAgICBQbHVnaW5Nb2R1bGVJbmZvIGZp
bmRQbHVnaW4oU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVVJMJiwgV2ViQ29yZTo6UGx1Z2luRGF0
YTo6QWxsb3dlZFBsdWdpblR5cGVzID0gV2ViQ29yZTo6UGx1Z2luRGF0YTo6QWxsUGx1Z2lucyk7
Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBpbmZvIGZvciB0aGUgcGx1Zy1pbiB3aXRoIHRoZSBnaXZl
biBidW5kbGUgaWRlbnRpZmllci4KLSAgICBQbHVnaW5Nb2R1bGVJbmZvIGZpbmRQbHVnaW5XaXRo
QnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpOwotCi0gICAg
Ly8gUmV0dXJucyB0aGUgaW5mbyBmb3IgdGhlIHBsdWctaW4gd2l0aCB0aGUgZ2l2ZW4gcGF0aC4K
LSAgICBQbHVnaW5Nb2R1bGVJbmZvIGluZm9Gb3JQbHVnaW5XaXRoUGF0aChjb25zdCBTdHJpbmcm
IHBsdWdpblBhdGgpIGNvbnN0OwotCi0gICAgc3RhdGljIFBsdWdpbk1vZHVsZUxvYWRQb2xpY3kg
ZGVmYXVsdExvYWRQb2xpY3lGb3JQbHVnaW4oY29uc3QgUGx1Z2luTW9kdWxlSW5mbyYpOwotCi0g
ICAgYm9vbCBpc1N1cHBvcnRlZFBsdWdpbihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBV
UkwmIHBsdWdpblVSTCwgY29uc3QgU3RyaW5nJiBmcmFtZVVSTFN0cmluZywgY29uc3QgVVJMJiBw
YWdlVVJMKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpTdXBwb3J0ZWRQbHVn
aW5JZGVudGlmaWVyPj4gc3VwcG9ydGVkUGx1Z2luSWRlbnRpZmllcnMoKTsKLSAgICB2b2lkIGFk
ZFN1cHBvcnRlZFBsdWdpbihTdHJpbmcmJiBtYXRjaGluZ0RvbWFpbiwgU3RyaW5nJiYgaWRlbnRp
ZmllciwgSGFzaFNldDxTdHJpbmc+JiYgbWltZVR5cGVzLCBIYXNoU2V0PFN0cmluZz4gZXh0ZW5z
aW9ucyk7Ci0gICAgdm9pZCBjbGVhclN1cHBvcnRlZFBsdWdpbnMoKSB7IG1fc3VwcG9ydGVkUGx1
Z2lucyA9IHN0ZDo6bnVsbG9wdDsgfQotCi1wcml2YXRlOgotICAgIFBsdWdpbk1vZHVsZUluZm8g
ZmluZFBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFdlYkNvcmU6OlBs
dWdpbkRhdGE6OkFsbG93ZWRQbHVnaW5UeXBlcykgY29uc3Q7Ci0gICAgUGx1Z2luTW9kdWxlSW5m
byBmaW5kUGx1Z2luRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uLCBTdHJpbmcm
IG1pbWVUeXBlLCBXZWJDb3JlOjpQbHVnaW5EYXRhOjpBbGxvd2VkUGx1Z2luVHlwZXMpIGNvbnN0
OwotCi0gICAgdm9pZCBsb2FkUGx1Z2luc0lmTmVjZXNzYXJ5KCk7Ci0gICAgc3RhdGljIHZvaWQg
bG9hZFBsdWdpbihWZWN0b3I8UGx1Z2luTW9kdWxlSW5mbz4mIHBsdWdpbnMsIGNvbnN0IFN0cmlu
ZyYgcGx1Z2luUGF0aCk7Ci0gICAgCi0gICAgLy8gUGxhdGZvcm0tc3BlY2lmaWMgbWVtYmVyIGZ1
bmN0aW9uczoKLQotICAgIC8vIFJldHVybnMgcGF0aHMgdG8gZGlyZWN0b3JpZXMgdGhhdCBzaG91
bGQgYmUgc2VhcmNoZWQgZm9yIHBsdWctaW5zICh2aWEgcGx1Z2luUGF0aHNJbkRpcmVjdG9yeSku
Ci0gICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHBsdWdpbnNEaXJlY3RvcmllcygpOwotCi0gICAg
Ly8gUmV0dXJucyBwYXRocyB0byBhbGwgcGx1Zy1pbnMgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3Rv
cnkuCi0gICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHBsdWdpblBhdGhzSW5EaXJlY3RvcnkoY29u
c3QgU3RyaW5nJiBkaXJlY3RvcnkpOwotCi0gICAgLy8gUmV0dXJucyBwYXRocyB0byBpbmRpdmlk
dWFsIHBsdWctaW5zIHRoYXQgd29uJ3QgYmUgZm91bmQgdmlhIHBsdWdpbnNEaXJlY3Rvcmllcy9w
bHVnaW5QYXRoc0luRGlyZWN0b3J5LgotICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBpbmRpdmlk
dWFsUGx1Z2luUGF0aHMoKTsKLQotICAgIC8vIExvYWQgcGx1Zy1pbiBpbmZvIGZvciB0aGUgcGx1
Zy1pbiB3aXRoIHRoZSBzcGVjaWZpZWQgcGF0aC4KLSAgICBzdGF0aWMgYm9vbCBnZXRQbHVnaW5J
bmZvKGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCwgUGx1Z2luTW9kdWxlSW5mbyYpOwotCi0gICAg
Ly8gUmV0dXJuIHdoZXRoZXIgdGhpcyBwbHVnLWluIHNob3VsZCBiZSB1c2VkIChhZGRlZCB0byB0
aGUgbGlzdCBvZiBwbHVnLWlucykgb3Igbm90LgotICAgIHN0YXRpYyBib29sIHNob3VsZFVzZVBs
dWdpbihWZWN0b3I8UGx1Z2luTW9kdWxlSW5mbz4mIGFscmVhZHlMb2FkZWRQbHVnaW5zLCBjb25z
dCBQbHVnaW5Nb2R1bGVJbmZvJik7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiBtX2FkZGl0aW9uYWxQ
bHVnaW5zRGlyZWN0b3JpZXM7Ci0gICAgVmVjdG9yPFBsdWdpbk1vZHVsZUluZm8+IG1fcGx1Z2lu
czsKLSAgICBib29sIG1fcGx1Z2luTGlzdElzVXBUb0RhdGU7Ci0KLSAgICBzdHJ1Y3QgU3VwcG9y
dGVkUGx1Z2luIHsKLSAgICAgICAgU3RyaW5nIG1hdGNoaW5nRG9tYWluOwotICAgICAgICBTdHJp
bmcgaWRlbnRpZmllcjsKLSAgICAgICAgSGFzaFNldDxTdHJpbmc+IG1pbWVUeXBlczsKLSAgICAg
ICAgSGFzaFNldDxTdHJpbmc+IGV4dGVuc2lvbnM7Ci0gICAgfTsKLSAgICBzdGF0aWMgYm9vbCBp
c1N1cHBvcnRlZFBsdWdpbihjb25zdCBTdXBwb3J0ZWRQbHVnaW4mLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBjb25zdCBVUkwmIHBsdWdpblVSTCk7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPFZlY3Rv
cjxTdXBwb3J0ZWRQbHVnaW4+PiBtX3N1cHBvcnRlZFBsdWdpbnM7Ci19OwotICAgIAotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vz
c01hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9j
ZXNzTWFuYWdlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZDVlMzMwNjE4
ZmNmM2NmYjQ4MTY2OWJlMjM2ZjFkNmFiZWNkMjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5Qcm9jZXNzTWFuYWdlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nl
c3NNYW5hZ2VyLmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1
ZGUgIlBsdWdpblByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eU1lc3Nh
Z2VzLmgiCi0jaW5jbHVkZSAiV2Vic2l0ZURhdGFGZXRjaE9wdGlvbi5oIgotI2luY2x1ZGUgPHd0
Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVBsdWdpblByb2Nlc3NN
YW5hZ2VyJiBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkKLXsKLSAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8UGx1Z2luUHJvY2Vzc01hbmFnZXI+IHBsdWdpblByb2Nlc3NNYW5hZ2Vy
OwotICAgIHJldHVybiBwbHVnaW5Qcm9jZXNzTWFuYWdlcjsKLX0KLQotUGx1Z2luUHJvY2Vzc01h
bmFnZXI6OlBsdWdpblByb2Nlc3NNYW5hZ2VyKCkKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICA6
IG1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlcihbdGhpc10oUmVmQ291
bnRlckV2ZW50IGV2ZW50KSB7IHVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkKGV2ZW50
KTsgfSkKLSNlbmRpZgotewotfQotCi11aW50NjRfdCBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6cGx1
Z2luUHJvY2Vzc1Rva2VuKGNvbnN0IFBsdWdpbk1vZHVsZUluZm8mIHBsdWdpbk1vZHVsZUluZm8s
IFBsdWdpblByb2Nlc3NTYW5kYm94UG9saWN5IHBsdWdpblByb2Nlc3NTYW5kYm94UG9saWN5KQot
ewotICAgIC8vIFNlZSBpZiB3ZSBrbm93IHRoaXMgdG9rZW4gYWxyZWFkeS4KLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fcGx1Z2luUHJvY2Vzc1Rva2Vucy5zaXplKCk7ICsraSkgewotICAg
ICAgICBjb25zdCBQbHVnaW5Qcm9jZXNzQXR0cmlidXRlcyYgYXR0cmlidXRlcyA9IG1fcGx1Z2lu
UHJvY2Vzc1Rva2Vuc1tpXS5maXJzdDsKLQotICAgICAgICBpZiAoYXR0cmlidXRlcy5tb2R1bGVJ
bmZvLnBhdGggPT0gcGx1Z2luTW9kdWxlSW5mby5wYXRoCi0gICAgICAgICAgICAmJiBhdHRyaWJ1
dGVzLnNhbmRib3hQb2xpY3kgPT0gcGx1Z2luUHJvY2Vzc1NhbmRib3hQb2xpY3kpCi0gICAgICAg
ICAgICByZXR1cm4gbV9wbHVnaW5Qcm9jZXNzVG9rZW5zW2ldLnNlY29uZDsKLSAgICB9Ci0KLSAg
ICB1aW50NjRfdCB0b2tlbjsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBjcnlwdG9ncmFw
aGljYWxseVJhbmRvbVZhbHVlcygmdG9rZW4sIHNpemVvZih0b2tlbikpOwotCi0gICAgICAgIGlm
IChtX2tub3duVG9rZW5zLmlzVmFsaWRWYWx1ZSh0b2tlbikgJiYgIW1fa25vd25Ub2tlbnMuY29u
dGFpbnModG9rZW4pKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgUGx1Z2luUHJv
Y2Vzc0F0dHJpYnV0ZXMgYXR0cmlidXRlczsKLSAgICBhdHRyaWJ1dGVzLm1vZHVsZUluZm8gPSBw
bHVnaW5Nb2R1bGVJbmZvOwotICAgIGF0dHJpYnV0ZXMuc2FuZGJveFBvbGljeSA9IHBsdWdpblBy
b2Nlc3NTYW5kYm94UG9saWN5OwotCi0gICAgbV9wbHVnaW5Qcm9jZXNzVG9rZW5zLmFwcGVuZChz
dGQ6Om1ha2VfcGFpcihXVEZNb3ZlKGF0dHJpYnV0ZXMpLCB0b2tlbikpOwotICAgIG1fa25vd25U
b2tlbnMuYWRkKHRva2VuKTsKLQotICAgIHJldHVybiB0b2tlbjsKLX0KLQotYm9vbCBQbHVnaW5Q
cm9jZXNzTWFuYWdlcjo6Z2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24odWludDY0X3QgcGx1Z2lu
UHJvY2Vzc1Rva2VuLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRQbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbjo6RGVsYXllZFJlcGx5JiYgcmVwbHkpCi17Ci0gICAgQVNTRVJUKHBsdWdpblBy
b2Nlc3NUb2tlbik7Ci0KLSAgICBhdXRvKiBwbHVnaW5Qcm9jZXNzID0gZ2V0T3JDcmVhdGVQbHVn
aW5Qcm9jZXNzKHBsdWdpblByb2Nlc3NUb2tlbik7Ci0gICAgQVNTRVJUKHBsdWdpblByb2Nlc3Mp
OwotICAgIGlmICghcGx1Z2luUHJvY2VzcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
cGx1Z2luUHJvY2Vzcy0+Z2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24oV1RGTW92ZShyZXBseSkp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpyZW1v
dmVQbHVnaW5Qcm9jZXNzUHJveHkoUGx1Z2luUHJvY2Vzc1Byb3h5KiBwbHVnaW5Qcm9jZXNzUHJv
eHkpCi17Ci0gICAgc2l6ZV90IHZlY3RvckluZGV4ID0gbV9wbHVnaW5Qcm9jZXNzZXMuZmluZChw
bHVnaW5Qcm9jZXNzUHJveHkpOwotICAgIEFTU0VSVCh2ZWN0b3JJbmRleCAhPSBub3RGb3VuZCk7
Ci0KLSAgICBtX3BsdWdpblByb2Nlc3Nlcy5yZW1vdmUodmVjdG9ySW5kZXgpOwotfQotCi12b2lk
IFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpmZXRjaFdlYnNpdGVEYXRhKGNvbnN0IFBsdWdpbk1vZHVs
ZUluZm8mIHBsdWdpbiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0
aW9ucywgV1RGOjpGdW5jdGlvbjx2b2lkIChWZWN0b3I8U3RyaW5nPik+JiYgY29tcGxldGlvbkhh
bmRsZXIpCi17Ci0gICAgYXV0byB0b2tlbiA9IHBsdWdpblByb2Nlc3NUb2tlbihwbHVnaW4sIFBs
dWdpblByb2Nlc3NTYW5kYm94UG9saWN5OjpOb3JtYWwpOwotICAgIGF1dG8gcGx1Z2luUHJvY2Vz
cyA9IGZldGNoT3B0aW9ucy5jb250YWlucyhXZWJzaXRlRGF0YUZldGNoT3B0aW9uOjpEb05vdENy
ZWF0ZVByb2Nlc3NlcykgPyBnZXRQbHVnaW5Qcm9jZXNzKHRva2VuKSA6IGdldE9yQ3JlYXRlUGx1
Z2luUHJvY2Vzcyh0b2tlbik7Ci0gICAgaWYgKCFwbHVnaW5Qcm9jZXNzKSB7Ci0gICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwbHVn
aW5Qcm9jZXNzLT5mZXRjaFdlYnNpdGVEYXRhKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6ZGVsZXRlV2Vic2l0ZURhdGEoY29uc3Qg
UGx1Z2luTW9kdWxlSW5mbyYgcGx1Z2luLCBXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBXVEY6OkZ1
bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgUGx1Z2luUHJvY2Vz
c1Byb3h5KiBwbHVnaW5Qcm9jZXNzID0gZ2V0T3JDcmVhdGVQbHVnaW5Qcm9jZXNzKHBsdWdpblBy
b2Nlc3NUb2tlbihwbHVnaW4sIFBsdWdpblByb2Nlc3NTYW5kYm94UG9saWN5OjpOb3JtYWwpKTsK
LSAgICBwbHVnaW5Qcm9jZXNzLT5kZWxldGVXZWJzaXRlRGF0YShtb2RpZmllZFNpbmNlLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc01hbmFnZXI6
OmRlbGV0ZVdlYnNpdGVEYXRhRm9ySG9zdE5hbWVzKGNvbnN0IFBsdWdpbk1vZHVsZUluZm8mIHBs
dWdpbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3ROYW1lcyxXVEY6OkZ1bmN0aW9uPHZvaWQg
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgUGx1Z2luUHJvY2Vzc1Byb3h5KiBwbHVn
aW5Qcm9jZXNzID0gZ2V0T3JDcmVhdGVQbHVnaW5Qcm9jZXNzKHBsdWdpblByb2Nlc3NUb2tlbihw
bHVnaW4sIFBsdWdpblByb2Nlc3NTYW5kYm94UG9saWN5OjpOb3JtYWwpKTsKLSAgICBwbHVnaW5Q
cm9jZXNzLT5kZWxldGVXZWJzaXRlRGF0YUZvckhvc3ROYW1lcyhob3N0TmFtZXMsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQotUGx1Z2luUHJvY2Vzc1Byb3h5KiBQbHVnaW5Qcm9j
ZXNzTWFuYWdlcjo6Z2V0UGx1Z2luUHJvY2Vzcyh1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4p
Ci17Ci0gICAgZm9yIChjb25zdCBhdXRvJiBwbHVnaW5Qcm9jZXNzIDogbV9wbHVnaW5Qcm9jZXNz
ZXMpIHsKLSAgICAgICAgaWYgKHBsdWdpblByb2Nlc3MtPnBsdWdpblByb2Nlc3NUb2tlbigpID09
IHBsdWdpblByb2Nlc3NUb2tlbikKLSAgICAgICAgICAgIHJldHVybiBwbHVnaW5Qcm9jZXNzLmdl
dCgpOwotICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi0jaWYgT1MoTElOVVgpCi12
b2lkIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudChib29sIGlz
Q3JpdGljYWwpCi17Ci0gICAgZm9yIChhdXRvJiBwbHVnaW5Qcm9jZXNzIDogbV9wbHVnaW5Qcm9j
ZXNzZXMpCi0gICAgICAgIHBsdWdpblByb2Nlc3MtPnNlbmRNZW1vcnlQcmVzc3VyZUV2ZW50KGlz
Q3JpdGljYWwpOwotfQotI2VuZGlmCi0KLVBsdWdpblByb2Nlc3NQcm94eSogUGx1Z2luUHJvY2Vz
c01hbmFnZXI6OmdldE9yQ3JlYXRlUGx1Z2luUHJvY2Vzcyh1aW50NjRfdCBwbHVnaW5Qcm9jZXNz
VG9rZW4pCi17Ci0gICAgaWYgKGF1dG8gZXhpc3RpbmdQcm9jZXNzID0gZ2V0UGx1Z2luUHJvY2Vz
cyhwbHVnaW5Qcm9jZXNzVG9rZW4pKQotICAgICAgICByZXR1cm4gZXhpc3RpbmdQcm9jZXNzOwot
Ci0gICAgZm9yIChhdXRvJiBhdHRyaWJ1dGVzQW5kVG9rZW4gOiBtX3BsdWdpblByb2Nlc3NUb2tl
bnMpIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXNBbmRUb2tlbi5zZWNvbmQgPT0gcGx1Z2luUHJv
Y2Vzc1Rva2VuKSB7Ci0gICAgICAgICAgICBhdXRvIHBsdWdpblByb2Nlc3MgPSBQbHVnaW5Qcm9j
ZXNzUHJveHk6OmNyZWF0ZSh0aGlzLCBhdHRyaWJ1dGVzQW5kVG9rZW4uZmlyc3QsIGF0dHJpYnV0
ZXNBbmRUb2tlbi5zZWNvbmQpOwotICAgICAgICAgICAgUGx1Z2luUHJvY2Vzc1Byb3h5KiBwbHVn
aW5Qcm9jZXNzUHRyID0gcGx1Z2luUHJvY2Vzcy5wdHIoKTsKLSAgICAgICAgICAgIG1fcGx1Z2lu
UHJvY2Vzc2VzLmFwcGVuZChXVEZNb3ZlKHBsdWdpblByb2Nlc3MpKTsKLSAgICAgICAgICAgIHJl
dHVybiBwbHVnaW5Qcm9jZXNzUHRyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG51
bGxwdHI7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblByb2Nlc3NNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblByb2Nlc3NNYW5hZ2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDJlMGRiYjAwMmViM2VmMzI4MDZjMmRhYmI1MzI4NTY0MjBmYmNmNWUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzTWFuYWdlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlICJQbHVnaW5Nb2R1bGVJbmZvLmgiCi0jaW5j
bHVkZSAiUGx1Z2luUHJvY2Vzcy5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NBdHRyaWJ1dGVz
LmgiCi0jaW5jbHVkZSAiUHJvY2Vzc1Rocm90dGxlci5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQ
cm94eU1lc3NhZ2VzUmVwbGllcy5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNl
IElQQyB7Ci1jbGFzcyBFbmNvZGVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3Mg
UGx1Z2luSW5mb1N0b3JlOwotY2xhc3MgUGx1Z2luUHJvY2Vzc1Byb3h5OwotY2xhc3MgV2ViUHJv
Y2Vzc1Byb3h5OwotZW51bSBjbGFzcyBXZWJzaXRlRGF0YUZldGNoT3B0aW9uIDogdWludDhfdDsK
LQotY2xhc3MgUGx1Z2luUHJvY2Vzc01hbmFnZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFBsdWdpblByb2Nlc3NNYW5hZ2VyKTsKLSAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8UGx1Z2lu
UHJvY2Vzc01hbmFnZXI+OwotcHVibGljOgotICAgIHN0YXRpYyBQbHVnaW5Qcm9jZXNzTWFuYWdl
ciYgc2luZ2xldG9uKCk7Ci0KLSAgICB1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4oY29uc3Qg
UGx1Z2luTW9kdWxlSW5mbyYsIFBsdWdpblByb2Nlc3NTYW5kYm94UG9saWN5KTsKLQotICAgIGJv
b2wgZ2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24odWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2Vu
LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbkRl
bGF5ZWRSZXBseSYmKTsKLSAgICB2b2lkIHJlbW92ZVBsdWdpblByb2Nlc3NQcm94eShQbHVnaW5Q
cm9jZXNzUHJveHkqKTsKLQotICAgIHZvaWQgZmV0Y2hXZWJzaXRlRGF0YShjb25zdCBQbHVnaW5N
b2R1bGVJbmZvJiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+LCBXVEY6OkZ1bmN0
aW9uPHZvaWQgKFZlY3RvcjxTdHJpbmc+KT4mJiBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgdm9p
ZCBkZWxldGVXZWJzaXRlRGF0YShjb25zdCBQbHVnaW5Nb2R1bGVJbmZvJiwgV2FsbFRpbWUgbW9k
aWZpZWRTaW5jZSwgV1RGOjpGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsK
LSAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhRm9ySG9zdE5hbWVzKGNvbnN0IFBsdWdpbk1vZHVs
ZUluZm8mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdE5hbWVzLCBXVEY6OkZ1bmN0aW9uPHZv
aWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwotCi0jaWYgT1MoTElOVVgpCi0gICAgdm9pZCBz
ZW5kTWVtb3J5UHJlc3N1cmVFdmVudChib29sIGlzQ3JpdGljYWwpOwotI2VuZGlmCi0KLSNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICBpbmxpbmUgUHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRUb2tl
biBwcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZFRva2VuKCk7Ci0gICAgaW5saW5lIGJvb2wgcHJv
Y2Vzc1N1cHByZXNzaW9uRGlzYWJsZWQoKSBjb25zdDsKLSAgICB2b2lkIHVwZGF0ZVByb2Nlc3NT
dXBwcmVzc2lvbkRpc2FibGVkKFJlZkNvdW50ZXJFdmVudCk7Ci0jZW5kaWYKLQotICAgIGNvbnN0
IFZlY3RvcjxSZWZQdHI8UGx1Z2luUHJvY2Vzc1Byb3h5Pj4mIHBsdWdpblByb2Nlc3NlcygpIGNv
bnN0IHsgcmV0dXJuIG1fcGx1Z2luUHJvY2Vzc2VzOyB9Ci0KLSNpZiBQTEFURk9STShNQUMpCi0g
ICAgdm9pZCBzZXRFeHBlcmltZW50YWxQbHVnSW5TYW5kYm94UHJvZmlsZXNFbmFibGVkKGJvb2wp
OwotICAgIGJvb2wgZXhwZXJpbWVudGFsUGx1Z0luU2FuZGJveFByb2ZpbGVzRW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fZXhwZXJpbWVudGFsUGx1Z0luU2FuZGJveFByb2ZpbGVzRW5hYmxlZDsg
fQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgUGx1Z2luUHJvY2Vzc01hbmFnZXIoKTsKLQotICAg
IFBsdWdpblByb2Nlc3NQcm94eSogZ2V0UGx1Z2luUHJvY2Vzcyh1aW50NjRfdCBwbHVnaW5Qcm9j
ZXNzVG9rZW4pOwotICAgIFBsdWdpblByb2Nlc3NQcm94eSogZ2V0T3JDcmVhdGVQbHVnaW5Qcm9j
ZXNzKHVpbnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbik7Ci0KLSAgICBWZWN0b3I8c3RkOjpwYWly
PFBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLCB1aW50NjRfdD4+IG1fcGx1Z2luUHJvY2Vzc1Rva2Vu
czsKLSAgICBIYXNoU2V0PHVpbnQ2NF90PiBtX2tub3duVG9rZW5zOwotCi0gICAgVmVjdG9yPFJl
ZlB0cjxQbHVnaW5Qcm9jZXNzUHJveHk+PiBtX3BsdWdpblByb2Nlc3NlczsKLQotI2lmIFBMQVRG
T1JNKENPQ09BKQotICAgIFByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkQ291bnRlciBtX3Byb2Nl
c3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXI7Ci0jZW5kaWYKLSNpZiBQTEFURk9S
TShNQUMpCi0gICAgYm9vbCBtX2V4cGVyaW1lbnRhbFBsdWdJblNhbmRib3hQcm9maWxlc0VuYWJs
ZWQgeyBmYWxzZSB9OwotI2VuZGlmCi19OwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi1pbmxpbmUg
UHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRUb2tlbiBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6cHJv
Y2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRUb2tlbigpCi17Ci0gICAgcmV0dXJuIG1fcHJvY2Vzc1N1
cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlci5jb3VudCgpOwotfQotCi1pbmxpbmUgYm9v
bCBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6cHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWQoKSBjb25z
dAotewotICAgIHJldHVybiBtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50
ZXIudmFsdWUoKTsKLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
IC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjNDAzNTM4MWJiOGExNTNmZDAwYThlNGM2Y2YyMDdhNDgzMWJjMGZi
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDMwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc1Byb3h5LmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIkF1eGlsaWFyeVByb2Nlc3NNZXNzYWdlcy5oIgot
I2luY2x1ZGUgIlBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlck1lc3NhZ2VzLmgiCi0jaW5j
bHVkZSAiUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgotI2luY2x1ZGUgIlBsdWdp
blByb2Nlc3NNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc01lc3NhZ2VzLmgiCi0j
aW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Bv
b2wuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNz
UHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNp
bmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotCi1zdGF0aWMgY29uc3QgU2Vjb25kcyBtaW5pbXVtTGlmZXRpbWUgeyAy
X21pbiB9Owotc3RhdGljIGNvbnN0IFNlY29uZHMgc25hcHNob3R0aW5nTWluaW11bUxpZmV0aW1l
IHsgMzBfcyB9OwotCi1zdGF0aWMgY29uc3QgU2Vjb25kcyBzaHV0ZG93blRpbWVvdXQgeyAxX21p
biB9Owotc3RhdGljIGNvbnN0IFNlY29uZHMgc25hcHNob3R0aW5nU2h1dGRvd25UaW1lb3V0IHsg
MTVfcyB9OwotCi1zdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVQbHVnaW5Qcm9jZXNzQ2FsbGJhY2tJ
RCgpCi17Ci0gICAgc3RhdGljIHVpbnQ2NF90IGNhbGxiYWNrSUQ7Ci0KLSAgICByZXR1cm4gKytj
YWxsYmFja0lEOwotfQotCi1SZWY8UGx1Z2luUHJvY2Vzc1Byb3h5PiBQbHVnaW5Qcm9jZXNzUHJv
eHk6OmNyZWF0ZShQbHVnaW5Qcm9jZXNzTWFuYWdlciogUGx1Z2luUHJvY2Vzc01hbmFnZXIsIGNv
bnN0IFBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzJiBwbHVnaW5Qcm9jZXNzQXR0cmlidXRlcywgdWlu
dDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2VuKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBs
dWdpblByb2Nlc3NQcm94eShQbHVnaW5Qcm9jZXNzTWFuYWdlciwgcGx1Z2luUHJvY2Vzc0F0dHJp
YnV0ZXMsIHBsdWdpblByb2Nlc3NUb2tlbikpOwotfQotCi1QbHVnaW5Qcm9jZXNzUHJveHk6OlBs
dWdpblByb2Nlc3NQcm94eShQbHVnaW5Qcm9jZXNzTWFuYWdlciogUGx1Z2luUHJvY2Vzc01hbmFn
ZXIsIGNvbnN0IFBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzJiBwbHVnaW5Qcm9jZXNzQXR0cmlidXRl
cywgdWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2VuKQotICAgIDogbV90aHJvdHRsZXIoKnRoaXMs
IGZhbHNlKQotICAgICwgbV9wbHVnaW5Qcm9jZXNzTWFuYWdlcihQbHVnaW5Qcm9jZXNzTWFuYWdl
cikKLSAgICAsIG1fcGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMocGx1Z2luUHJvY2Vzc0F0dHJpYnV0
ZXMpCi0gICAgLCBtX3BsdWdpblByb2Nlc3NUb2tlbihwbHVnaW5Qcm9jZXNzVG9rZW4pCi0gICAg
LCBtX251bVBlbmRpbmdDb25uZWN0aW9uUmVxdWVzdHMoMCkKLSNpZiBQTEFURk9STShDT0NPQSkK
LSAgICAsIG1fbW9kYWxXaW5kb3dJc1Nob3dpbmcoZmFsc2UpCi0gICAgLCBtX2Z1bGxzY3JlZW5X
aW5kb3dJc1Nob3dpbmcoZmFsc2UpCi0gICAgLCBtX3ByZUZ1bGxzY3JlZW5BcHBQcmVzZW50YXRp
b25PcHRpb25zKDApCi0jZW5kaWYKLXsKLSAgICBjb25uZWN0KCk7Ci19Ci0KLVBsdWdpblByb2Nl
c3NQcm94eTo6flBsdWdpblByb2Nlc3NQcm94eSgpCi17Ci0gICAgaWYgKG1fY29ubmVjdGlvbikK
LSAgICAgICAgbV9jb25uZWN0aW9uLT5pbnZhbGlkYXRlKCk7Ci0KLSAgICBBU1NFUlQobV9wZW5k
aW5nRmV0Y2hXZWJzaXRlRGF0YVJlcXVlc3RzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fcGVu
ZGluZ0ZldGNoV2Vic2l0ZURhdGFDYWxsYmFja3MuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQobV9w
ZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFSZXF1ZXN0cy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVCht
X3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUNhbGxiYWNrcy5pc0VtcHR5KCkpOwotfQotCi12b2lk
IFBsdWdpblByb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6Okxh
dW5jaE9wdGlvbnMmIGxhdW5jaE9wdGlvbnMpCi17Ci0gICAgcGxhdGZvcm1HZXRMYXVuY2hPcHRp
b25zV2l0aEF0dHJpYnV0ZXMobGF1bmNoT3B0aW9ucywgbV9wbHVnaW5Qcm9jZXNzQXR0cmlidXRl
cyk7Ci0gICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKGxhdW5jaE9w
dGlvbnMpOwotfQotCi12b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6cHJvY2Vzc1dpbGxTaHV0RG93
bihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCi17Ci0gICAgQVNTRVJUX1VOVVNFRChjb25u
ZWN0aW9uLCB0aGlzLT5jb25uZWN0aW9uKCkgPT0gJmNvbm5lY3Rpb24pOwotfQotCi0vLyBBc2tz
IHRoZSBwbHVnLWluIHByb2Nlc3MgdG8gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24gdG8gYSB3ZWIg
cHJvY2Vzcy4gVGhlIGNvbm5lY3Rpb24gaWRlbnRpZmllciB3aWxsIGJlIAotLy8gZW5jb2RlZCBp
biB0aGUgZ2l2ZW4gYXJndW1lbnQgZW5jb2RlciBhbmQgc2VudCBiYWNrIHRvIHRoZSBjb25uZWN0
aW9uIG9mIHRoZSBnaXZlbiB3ZWIgcHJvY2Vzcy4KLXZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5Ojpn
ZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbihNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5JiYgcmVwbHkpCi17Ci0gICAgbV9w
ZW5kaW5nQ29ubmVjdGlvblJlcGxpZXMuYXBwZW5kKFdURk1vdmUocmVwbHkpKTsKLQotICAgIGlm
IChzdGF0ZSgpID09IFN0YXRlOjpMYXVuY2hpbmcpIHsKLSAgICAgICAgbV9udW1QZW5kaW5nQ29u
bmVjdGlvblJlcXVlc3RzKys7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgLy8g
QXNrIHRoZSBwbHVnLWluIHByb2Nlc3MgdG8gY3JlYXRlIGEgY29ubmVjdGlvbi4gU2luY2UgdGhl
IHBsdWctaW4gY2FuIGJlIHdhaXRpbmcgZm9yIGEgc3luY2hyb25vdXMgcmVwbHkKLSAgICAvLyB3
ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoaXMgbWVzc2FnZSBpcyBhbHdheXMgcHJvY2Vzc2Vk
LCBldmVuIHdoZW4gdGhlIHBsdWctaW4gaXMgd2FpdGluZyBmb3IgYSBzeW5jaHJvbnVzIHJlcGx5
LgotICAgIG1fY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6UGx1Z2luUHJvY2Vzczo6Q3JlYXRl
V2ViUHJvY2Vzc0Nvbm5lY3Rpb24oKSwgMCwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3Nh
Z2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOwotfQotCi12b2lkIFBsdWdpblByb2Nlc3NQ
cm94eTo6ZmV0Y2hXZWJzaXRlRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChWZWN0b3I8U3Ry
aW5nPik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgdWludDY0X3QgY2FsbGJhY2tJRCA9
IGdlbmVyYXRlUGx1Z2luUHJvY2Vzc0NhbGxiYWNrSUQoKTsKLSAgICBtX3BlbmRpbmdGZXRjaFdl
YnNpdGVEYXRhQ2FsbGJhY2tzLnNldChjYWxsYmFja0lELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0KLSAgICBpZiAoc3RhdGUoKSA9PSBTdGF0ZTo6TGF1bmNoaW5nKSB7Ci0gICAgICAg
IG1fcGVuZGluZ0ZldGNoV2Vic2l0ZURhdGFSZXF1ZXN0cy5hcHBlbmQoY2FsbGJhY2tJRCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2Nvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6
OlBsdWdpblByb2Nlc3M6OkdldFNpdGVzV2l0aERhdGEoY2FsbGJhY2tJRCksIDApOwotfQotCi12
b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6ZGVsZXRlV2Vic2l0ZURhdGEoV2FsbFRpbWUgbW9kaWZp
ZWRTaW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
LXsKLSAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gZ2VuZXJhdGVQbHVnaW5Qcm9jZXNzQ2FsbGJh
Y2tJRCgpOwotICAgIG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhQ2FsbGJhY2tzLnNldChjYWxs
YmFja0lELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBpZiAoc3RhdGUoKSA9
PSBTdGF0ZTo6TGF1bmNoaW5nKSB7Ci0gICAgICAgIG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRh
UmVxdWVzdHMuYXBwZW5kKHsgbW9kaWZpZWRTaW5jZSwgY2FsbGJhY2tJRCB9KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIG1fY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6UGx1Z2lu
UHJvY2Vzczo6RGVsZXRlV2Vic2l0ZURhdGEobW9kaWZpZWRTaW5jZSwgY2FsbGJhY2tJRCksIDAp
OwotfQotCi12b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JIb3N0
TmFtZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3ROYW1lcywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICB1aW50NjRfdCBjYWxsYmFja0lE
ID0gZ2VuZXJhdGVQbHVnaW5Qcm9jZXNzQ2FsbGJhY2tJRCgpOwotICAgIG1fcGVuZGluZ0RlbGV0
ZVdlYnNpdGVEYXRhRm9ySG9zdE5hbWVzQ2FsbGJhY2tzLnNldChjYWxsYmFja0lELCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBpZiAoc3RhdGUoKSA9PSBTdGF0ZTo6TGF1bmNo
aW5nKSB7Ci0gICAgICAgIG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhRm9ySG9zdE5hbWVzUmVx
dWVzdHMuYXBwZW5kKHsgaG9zdE5hbWVzLCBjYWxsYmFja0lEIH0pOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgbV9jb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Qcm9jZXNz
OjpEZWxldGVXZWJzaXRlRGF0YUZvckhvc3ROYW1lcyhob3N0TmFtZXMsIGNhbGxiYWNrSUQpLCAw
KTsKLX0KLQotI2lmIE9TKExJTlVYKQotdm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6OnNlbmRNZW1v
cnlQcmVzc3VyZUV2ZW50KGJvb2wgaXNDcml0aWNhbCkKLXsKLSAgICBpZiAoc3RhdGUoKSA9PSBT
dGF0ZTo6TGF1bmNoaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Nvbm5lY3Rpb24tPnNl
bmQoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2
ZW50KGlzQ3JpdGljYWwpLCAwKTsKLX0KLSNlbmRpZgotCi12b2lkIFBsdWdpblByb2Nlc3NQcm94
eTo6cGx1Z2luUHJvY2Vzc0NyYXNoZWRPckZhaWxlZFRvTGF1bmNoKCkKLXsKLSAgICAvLyBUaGUg
cGx1Zy1pbiBwcm9jZXNzIG11c3QgaGF2ZSBjcmFzaGVkIG9yIGV4aXRlZCwgc2VuZCBhbnkgcGVu
ZGluZyBzeW5jIHJlcGxpZXMgd2UgbWlnaHQgaGF2ZS4KLSAgICB3aGlsZSAoIW1fcGVuZGluZ0Nv
bm5lY3Rpb25SZXBsaWVzLmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvIHJlcGx5ID0gbV9wZW5k
aW5nQ29ubmVjdGlvblJlcGxpZXMudGFrZUZpcnN0KCk7Ci0KLSNpZiBVU0UoVU5JWF9ET01BSU5f
U09DS0VUUykKLSAgICAgICAgcmVwbHkoSVBDOjpBdHRhY2htZW50KCksIGZhbHNlKTsKLSNlbGlm
IE9TKERBUldJTikKLSAgICAgICAgcmVwbHkoSVBDOjpBdHRhY2htZW50KDAsIE1BQ0hfTVNHX1RZ
UEVfTU9WRV9TRU5EKSwgZmFsc2UpOwotI2Vsc2UKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsK
LSNlbmRpZgotICAgIH0KLQotICAgIG1fcGVuZGluZ0ZldGNoV2Vic2l0ZURhdGFSZXF1ZXN0cy5j
bGVhcigpOwotICAgIGZvciAoYXV0byYmIGNhbGxiYWNrIDogbV9wZW5kaW5nRmV0Y2hXZWJzaXRl
RGF0YUNhbGxiYWNrcy52YWx1ZXMoKSkKLSAgICAgICAgY2FsbGJhY2soeyB9KTsKLSAgICBtX3Bl
bmRpbmdGZXRjaFdlYnNpdGVEYXRhQ2FsbGJhY2tzLmNsZWFyKCk7Ci0KLSAgICBtX3BlbmRpbmdE
ZWxldGVXZWJzaXRlRGF0YVJlcXVlc3RzLmNsZWFyKCk7Ci0gICAgZm9yIChhdXRvJiYgY2FsbGJh
Y2sgOiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUNhbGxiYWNrcy52YWx1ZXMoKSkKLSAgICAg
ICAgY2FsbGJhY2soKTsKLSAgICBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YVJlcXVlc3RzLmNs
ZWFyKCk7Ci0KLSAgICBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUZvckhvc3ROYW1lc1JlcXVl
c3RzLmNsZWFyKCk7Ci0gICAgZm9yIChhdXRvJiYgY2FsbGJhY2sgOiBtX3BlbmRpbmdEZWxldGVX
ZWJzaXRlRGF0YUZvckhvc3ROYW1lc0NhbGxiYWNrcy52YWx1ZXMoKSkKLSAgICAgICAgY2FsbGJh
Y2soKTsKLSAgICBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUZvckhvc3ROYW1lc0NhbGxiYWNr
cy5jbGVhcigpOwotCi0gICAgLy8gVGVsbCB0aGUgcGx1Zy1pbiBwcm9jZXNzIG1hbmFnZXIgdG8g
Zm9yZ2V0IGFib3V0IHRoaXMgcGx1Zy1pbiBwcm9jZXNzIHByb3h5LiBUaGlzIG1heSBjYXVzZSB1
cyB0byBiZSBkZWxldGVkLgotICAgIG1fcGx1Z2luUHJvY2Vzc01hbmFnZXItPnJlbW92ZVBsdWdp
blByb2Nlc3NQcm94eSh0aGlzKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6OmRpZENs
b3NlKElQQzo6Q29ubmVjdGlvbiYpCi17Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKG1f
bW9kYWxXaW5kb3dJc1Nob3dpbmcpCi0gICAgICAgIGVuZE1vZGFsKCk7Ci0KLSAgICBpZiAobV9m
dWxsc2NyZWVuV2luZG93SXNTaG93aW5nKQotICAgICAgICBleGl0RnVsbHNjcmVlbigpOwotI2Vu
ZGlmCi0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFBy
b2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzKE1l
c3NhZ2VzOjpQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXI6OlBsdWdpblByb2Nlc3NDcmFz
aGVkKG1fcGx1Z2luUHJvY2Vzc1Rva2VuKSk7Ci0KLSAgICAvLyBUaGlzIHdpbGwgY2F1c2UgdXMg
dG8gYmUgZGVsZXRlZC4KLSAgICBwbHVnaW5Qcm9jZXNzQ3Jhc2hlZE9yRmFpbGVkVG9MYXVuY2go
KTsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6TWVzc2FnZU5hbWUgbWVzc2FnZU5h
bWUpCi17Ci0gICAgbG9nSW52YWxpZE1lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2FnZU5hbWUpOwot
ICAgIHRlcm1pbmF0ZSgpOwotfQotCi12b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6ZGlkRmluaXNo
TGF1bmNoaW5nKFByb2Nlc3NMYXVuY2hlciosIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBj
b25uZWN0aW9uSWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQoIW1fY29ubmVjdGlvbik7Ci0KLSAg
ICBpZiAoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmllcklzVmFsaWQoY29ubmVjdGlvbklkZW50
aWZpZXIpKSB7Ci0gICAgICAgIHBsdWdpblByb2Nlc3NDcmFzaGVkT3JGYWlsZWRUb0xhdW5jaCgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb25uZWN0aW9uID0gSVBDOjpDb25u
ZWN0aW9uOjpjcmVhdGVTZXJ2ZXJDb25uZWN0aW9uKGNvbm5lY3Rpb25JZGVudGlmaWVyLCAqdGhp
cyk7Ci0KLSAgICBtX2Nvbm5lY3Rpb24tPm9wZW4oKTsKLSAgICAKLSAgICBQbHVnaW5Qcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0gICAgcGFyYW1ldGVycy5taW5pbXVtTGlm
ZXRpbWUgPSBtaW5pbXVtTGlmZXRpbWU7Ci0gICAgcGFyYW1ldGVycy50ZXJtaW5hdGlvblRpbWVv
dXQgPSBzaHV0ZG93blRpbWVvdXQ7Ci0KLSAgICBwbGF0Zm9ybUluaXRpYWxpemVQbHVnaW5Qcm9j
ZXNzKHBhcmFtZXRlcnMpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgcGx1Zy1pbiBob3N0IHBy
b2Nlc3MuCi0gICAgbV9jb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Qcm9jZXNzOjpJ
bml0aWFsaXplUGx1Z2luUHJvY2VzcyhwYXJhbWV0ZXJzKSwgMCk7Ci0KLSNpZiBQTEFURk9STShD
T0NPQSkKLSAgICBtX2Nvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OlBsdWdpblByb2Nlc3M6OlNl
dFFPUyhwbHVnaW5Qcm9jZXNzTGF0ZW5jeVFPUygpLCBwbHVnaW5Qcm9jZXNzVGhyb3VnaHB1dFFP
UygpKSwgMCk7Ci0jZW5kaWYKLQotICAgIGZvciAoYXV0byBjYWxsYmFja0lEIDogbV9wZW5kaW5n
RmV0Y2hXZWJzaXRlRGF0YVJlcXVlc3RzKQotICAgICAgICBtX2Nvbm5lY3Rpb24tPnNlbmQoTWVz
c2FnZXM6OlBsdWdpblByb2Nlc3M6OkdldFNpdGVzV2l0aERhdGEoY2FsbGJhY2tJRCksIDApOwot
ICAgIG1fcGVuZGluZ0ZldGNoV2Vic2l0ZURhdGFSZXF1ZXN0cy5jbGVhcigpOwotCi0gICAgZm9y
IChhdXRvJiByZXF1ZXN0IDogbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFSZXF1ZXN0cykKLSAg
ICAgICAgbV9jb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Qcm9jZXNzOjpEZWxldGVX
ZWJzaXRlRGF0YShyZXF1ZXN0Lm1vZGlmaWVkU2luY2UsIHJlcXVlc3QuY2FsbGJhY2tJRCksIDAp
OwotICAgIG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhUmVxdWVzdHMuY2xlYXIoKTsKLQotICAg
IGZvciAoYXV0byYgcmVxdWVzdCA6IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhRm9ySG9zdE5h
bWVzUmVxdWVzdHMpCi0gICAgICAgIG1fY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6UGx1Z2lu
UHJvY2Vzczo6RGVsZXRlV2Vic2l0ZURhdGFGb3JIb3N0TmFtZXMocmVxdWVzdC5ob3N0TmFtZXMs
IHJlcXVlc3QuY2FsbGJhY2tJRCksIDApOwotICAgIG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRh
Rm9ySG9zdE5hbWVzUmVxdWVzdHMuY2xlYXIoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX251bVBlbmRpbmdDb25uZWN0aW9uUmVxdWVzdHM7ICsraSkKLSAgICAgICAgbV9jb25u
ZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Qcm9jZXNzOjpDcmVhdGVXZWJQcm9jZXNzQ29u
bmVjdGlvbigpLCAwKTsKLSAgICAKLSAgICBtX251bVBlbmRpbmdDb25uZWN0aW9uUmVxdWVzdHMg
PSAwOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKCFQbHVnaW5Qcm9jZXNzTWFuYWdl
cjo6c2luZ2xldG9uKCkucHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWQoKSkKLSAgICAgICAgc2V0
UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgotfQotCi12b2lkIFBsdWdp
blByb2Nlc3NQcm94eTo6ZGlkQ3JlYXRlV2ViUHJvY2Vzc0Nvbm5lY3Rpb24oY29uc3QgSVBDOjpB
dHRhY2htZW50JiBjb25uZWN0aW9uSWRlbnRpZmllciwgYm9vbCBzdXBwb3J0c0FzeW5jaHJvbm91
c1BsdWdpbkluaXRpYWxpemF0aW9uKQotewotICAgIEFTU0VSVCghbV9wZW5kaW5nQ29ubmVjdGlv
blJlcGxpZXMuaXNFbXB0eSgpKTsKLQotICAgIC8vIEdyYWIgdGhlIGZpcnN0IHBlbmRpbmcgY29u
bmVjdGlvbiByZXBseS4KLSAgICBhdXRvIHJlcGx5ID0gbV9wZW5kaW5nQ29ubmVjdGlvblJlcGxp
ZXMudGFrZUZpcnN0KCk7Ci0KLSNpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykKLSAgICByZXBs
eShjb25uZWN0aW9uSWRlbnRpZmllciwgc3VwcG9ydHNBc3luY2hyb25vdXNQbHVnaW5Jbml0aWFs
aXphdGlvbik7Ci0jZWxpZiBPUyhEQVJXSU4pCi0gICAgcmVwbHkoSVBDOjpBdHRhY2htZW50KGNv
bm5lY3Rpb25JZGVudGlmaWVyLnBvcnQoKSwgTUFDSF9NU0dfVFlQRV9NT1ZFX1NFTkQpLCBzdXBw
b3J0c0FzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uKTsKLSNlbHNlCi0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSNlbmRpZgotfQotCi12b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6ZGlkR2V0
U2l0ZXNXaXRoRGF0YShjb25zdCBWZWN0b3I8U3RyaW5nPiYgc2l0ZXMsIHVpbnQ2NF90IGNhbGxi
YWNrSUQpCi17Ci0gICAgYXV0byBjYWxsYmFjayA9IG1fcGVuZGluZ0ZldGNoV2Vic2l0ZURhdGFD
YWxsYmFja3MudGFrZShjYWxsYmFja0lEKTsKLSAgICBjYWxsYmFjayhzaXRlcyk7Ci19Ci0KLXZv
aWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjpkaWREZWxldGVXZWJzaXRlRGF0YSh1aW50NjRfdCBjYWxs
YmFja0lEKQotewotICAgIGF1dG8gY2FsbGJhY2sgPSBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0
YUNhbGxiYWNrcy50YWtlKGNhbGxiYWNrSUQpOwotICAgIGNhbGxiYWNrKCk7Ci19Ci0KLXZvaWQg
UGx1Z2luUHJvY2Vzc1Byb3h5OjpkaWREZWxldGVXZWJzaXRlRGF0YUZvckhvc3ROYW1lcyh1aW50
NjRfdCBjYWxsYmFja0lEKQotewotICAgIGF1dG8gY2FsbGJhY2sgPSBtX3BlbmRpbmdEZWxldGVX
ZWJzaXRlRGF0YUZvckhvc3ROYW1lc0NhbGxiYWNrcy50YWtlKGNhbGxiYWNrSUQpOwotICAgIGNh
bGxiYWNrKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggM2I0YTJhZWQxNDFiZWE4MjQyNWRhYTI2NTAyYWJhMmVhNzJlOTMwNy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTk0ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVk
ZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIlBsdWdpbk1vZHVsZUluZm8uaCIKLSNpbmNsdWRl
ICJQbHVnaW5Qcm9jZXNzLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMuaCIK
LSNpbmNsdWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKLSNpbmNsdWRlICJQcm9jZXNzVGhyb3R0bGVy
LmgiCi0jaW5jbHVkZSAiUHJvY2Vzc1Rocm90dGxlckNsaWVudC5oIgotI2luY2x1ZGUgIldlYlBy
b2Nlc3NQcm94eU1lc3NhZ2VzUmVwbGllcy5oIgotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotCi0j
aWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotT0JKQ19DTEFT
UyBOU09iamVjdDsKLU9CSkNfQ0xBU1MgV0tQbGFjZWhvbGRlck1vZGFsV2luZG93OwotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBQbHVnaW5Qcm9jZXNzTWFuYWdlcjsKLWNs
YXNzIFdlYlByb2Nlc3NQcm94eTsKLXN0cnVjdCBQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOwotCi0jaWYgUExVR0lOX0FSQ0hJVEVDVFVSRShVTklYKQotc3RydWN0IFJhd1BsdWdpbk1l
dGFEYXRhIHsKLSAgICBTdHJpbmcgbmFtZTsKLSAgICBTdHJpbmcgZGVzY3JpcHRpb247Ci0gICAg
U3RyaW5nIG1pbWVEZXNjcmlwdGlvbjsKLX07Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09B
KQotaW50IHBsdWdpblByb2Nlc3NMYXRlbmN5UU9TKCk7Ci1pbnQgcGx1Z2luUHJvY2Vzc1Rocm91
Z2hwdXRRT1MoKTsKLSNlbmRpZgotCi1jbGFzcyBQbHVnaW5Qcm9jZXNzUHJveHkgZmluYWwgOiBw
dWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRsZXJDbGll
bnQgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8UGx1Z2luUHJvY2Vzc1Byb3h5PiBjcmVhdGUo
UGx1Z2luUHJvY2Vzc01hbmFnZXIqLCBjb25zdCBQbHVnaW5Qcm9jZXNzQXR0cmlidXRlcyYsIHVp
bnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbik7Ci0gICAgflBsdWdpblByb2Nlc3NQcm94eSgpOwot
Ci0gICAgY29uc3QgUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMmIHBsdWdpblByb2Nlc3NBdHRyaWJ1
dGVzKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5Qcm9jZXNzQXR0cmlidXRlczsgfQotICAgIHVp
bnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbigpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luUHJvY2Vz
c1Rva2VuOyB9Ci0KLSAgICAvLyBBc2tzIHRoZSBwbHVnLWluIHByb2Nlc3MgdG8gY3JlYXRlIGEg
bmV3IGNvbm5lY3Rpb24gdG8gYSB3ZWIgcHJvY2Vzcy4gVGhlIGNvbm5lY3Rpb24gaWRlbnRpZmll
ciB3aWxsIGJlCi0gICAgLy8gZW5jb2RlZCBpbiB0aGUgZ2l2ZW4gYXJndW1lbnQgZW5jb2RlciBh
bmQgc2VudCBiYWNrIHRvIHRoZSBjb25uZWN0aW9uIG9mIHRoZSBnaXZlbiB3ZWIgcHJvY2Vzcy4K
LSAgICB2b2lkIGdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
UHJveHk6OkdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwotCi0gICAg
dm9pZCBmZXRjaFdlYnNpdGVEYXRhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKFZlY3RvcjxTdHJp
bmc+KT4mJik7Ci0gICAgdm9pZCBkZWxldGVXZWJzaXRlRGF0YShXYWxsVGltZSBtb2RpZmllZFNp
bmNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkICgpPiYmKTsKLSAgICB2b2lkIGRlbGV0ZVdlYnNp
dGVEYXRhRm9ySG9zdE5hbWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBob3N0TmFtZXMsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQgKCk+JiYpOwotCi0jaWYgT1MoTElOVVgpCi0gICAgdm9pZCBzZW5k
TWVtb3J5UHJlc3N1cmVFdmVudChib29sIGlzQ3JpdGljYWwpOwotI2VuZGlmCi0KLSAgICBib29s
IGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2Nvbm5lY3Rpb247IH0KLQotI2lmIFBMVUdJTl9B
UkNISVRFQ1RVUkUoVU5JWCkKLSAgICBzdGF0aWMgYm9vbCBzY2FuUGx1Z2luKGNvbnN0IFN0cmlu
ZyYgcGx1Z2luUGF0aCwgUmF3UGx1Z2luTWV0YURhdGEmIHJlc3VsdCk7Ci0jZW5kaWYKLQotICAg
IFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxlcigpIGZpbmFsIHsgcmV0dXJuIG1fdGhyb3R0bGVy
OyB9Ci0KLXByaXZhdGU6Ci0gICAgUGx1Z2luUHJvY2Vzc1Byb3h5KFBsdWdpblByb2Nlc3NNYW5h
Z2VyKiwgY29uc3QgUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMmLCB1aW50NjRfdCBwbHVnaW5Qcm9j
ZXNzVG9rZW4pOwotCi0gICAgLy8gQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5Ci0gICAgQVNDSUlMaXRl
cmFsIHByb2Nlc3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlBsdWdpbiJfczsgfQotCi0g
ICAgdm9pZCBnZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYp
IG92ZXJyaWRlOwotICAgIHZvaWQgcGxhdGZvcm1HZXRMYXVuY2hPcHRpb25zV2l0aEF0dHJpYnV0
ZXMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiwgY29uc3QgUGx1Z2luUHJvY2Vzc0F0
dHJpYnV0ZXMmKTsKLSAgICB2b2lkIHByb2Nlc3NXaWxsU2h1dERvd24oSVBDOjpDb25uZWN0aW9u
Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHBsdWdpblByb2Nlc3NDcmFzaGVkT3JGYWlsZWRUb0xh
dW5jaCgpOwotCi0gICAgLy8gUHJvY2Vzc1Rocm90dGxlckNsaWVudAotICAgIHZvaWQgc2VuZFBy
ZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1taW5lbnQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgZmluYWwgeyBjb21wbGV0aW9uSGFuZGxlcigpOyB9
Ci0gICAgdm9pZCBzZW5kUHJvY2Vzc0RpZFJlc3VtZSgpIGZpbmFsIHsgfQotICAgIEFTQ0lJTGl0
ZXJhbCBjbGllbnROYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlBsdWdpblByb2Nlc3MiX3M7
IH0KLQotICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50Ci0gICAgdm9pZCBkaWRSZWNlaXZl
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKLSAgICBi
b29sIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
LCBVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkaWRDbG9z
ZShJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlk
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VOYW1lKSBvdmVycmlkZTsKLQot
ICAgIC8vIFByb2Nlc3NMYXVuY2hlcjo6Q2xpZW50Ci0gICAgdm9pZCBkaWRGaW5pc2hMYXVuY2hp
bmcoUHJvY2Vzc0xhdW5jaGVyKiwgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyKSBvdmVycmlk
ZTsKLQotICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMKLSAgICB2b2lkIGRpZENyZWF0ZVdlYlByb2Nl
c3NDb25uZWN0aW9uKGNvbnN0IElQQzo6QXR0YWNobWVudCYsIGJvb2wgc3VwcG9ydHNBc3luY2hy
b25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbik7Ci0gICAgdm9pZCBkaWRHZXRTaXRlc1dpdGhEYXRh
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzaXRlcywgdWludDY0X3QgY2FsbGJhY2tJRCk7Ci0gICAg
dm9pZCBkaWREZWxldGVXZWJzaXRlRGF0YSh1aW50NjRfdCBjYWxsYmFja0lEKTsKLSAgICB2b2lk
IGRpZERlbGV0ZVdlYnNpdGVEYXRhRm9ySG9zdE5hbWVzKHVpbnQ2NF90IGNhbGxiYWNrSUQpOwot
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgYm9vbCBnZXRQbHVnaW5Qcm9jZXNzU2VyaWFsTnVt
YmVyKFByb2Nlc3NTZXJpYWxOdW1iZXImKTsKLSAgICB2b2lkIG1ha2VQbHVnaW5Qcm9jZXNzVGhl
RnJvbnRQcm9jZXNzKCk7Ci0gICAgdm9pZCBtYWtlVUlQcm9jZXNzVGhlRnJvbnRQcm9jZXNzKCk7
Ci0KLSAgICB2b2lkIHNldEZ1bGxzY3JlZW5XaW5kb3dJc1Nob3dpbmcoYm9vbCk7Ci0gICAgdm9p
ZCBlbnRlckZ1bGxzY3JlZW4oKTsKLSAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKCk7Ci0KLSAgICB2
b2lkIHNldE1vZGFsV2luZG93SXNTaG93aW5nKGJvb2wpOwotICAgIHZvaWQgYmVnaW5Nb2RhbCgp
OwotICAgIHZvaWQgZW5kTW9kYWwoKTsKLQotICAgIHZvaWQgYXBwbGljYXRpb25EaWRCZWNvbWVB
Y3RpdmUoKTsKLSAgICB2b2lkIGxhdW5jaFByb2Nlc3MoY29uc3QgU3RyaW5nJiBsYXVuY2hQYXRo
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmKTsKLSAgICB2b2lkIGxhdW5jaEFwcGxpY2F0aW9uQXRVUkwoY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhcmd1bWVudHMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYpOwotICAgIHZvaWQgb3BlblVSTChjb25zdCBTdHJpbmcmIHVy
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIHJlc3VsdCwgaW50MzJfdCBzdGF0dXMsIFN0
cmluZyBsYXVuY2hlZFVSTFN0cmluZyk+JiYpOwotICAgIHZvaWQgb3BlbkZpbGUoY29uc3QgU3Ry
aW5nJiBmdWxsUGF0aCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7Ci0jZW5kaWYK
LQotICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplUGx1Z2luUHJvY2VzcyhQbHVnaW5Qcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKTsKLQotICAgIFByb2Nlc3NUaHJvdHRsZXIg
bV90aHJvdHRsZXI7Ci0KLSAgICAvLyBUaGUgcGx1Zy1pbiBob3N0IHByb2Nlc3MgbWFuYWdlci4K
LSAgICBQbHVnaW5Qcm9jZXNzTWFuYWdlciogbV9wbHVnaW5Qcm9jZXNzTWFuYWdlcjsKLQotICAg
IFBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzIG1fcGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXM7Ci0gICAg
dWludDY0X3QgbV9wbHVnaW5Qcm9jZXNzVG9rZW47Ci0KLSAgICAvLyBUaGUgY29ubmVjdGlvbiB0
byB0aGUgcGx1Zy1pbiBob3N0IHByb2Nlc3MuCi0gICAgUmVmUHRyPElQQzo6Q29ubmVjdGlvbj4g
bV9jb25uZWN0aW9uOwotCi0gICAgRGVxdWU8TWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0
UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHk+IG1fcGVuZGluZ0Nvbm5lY3Rpb25S
ZXBsaWVzOwotCi0gICAgVmVjdG9yPHVpbnQ2NF90PiBtX3BlbmRpbmdGZXRjaFdlYnNpdGVEYXRh
UmVxdWVzdHM7Ci0gICAgSGFzaE1hcDx1aW50NjRfdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAo
VmVjdG9yPFN0cmluZz4pPj4gbV9wZW5kaW5nRmV0Y2hXZWJzaXRlRGF0YUNhbGxiYWNrczsKLQot
ICAgIHN0cnVjdCBEZWxldGVXZWJzaXRlRGF0YVJlcXVlc3QgewotICAgICAgICBXYWxsVGltZSBt
b2RpZmllZFNpbmNlOwotICAgICAgICB1aW50NjRfdCBjYWxsYmFja0lEOwotICAgIH07Ci0gICAg
VmVjdG9yPERlbGV0ZVdlYnNpdGVEYXRhUmVxdWVzdD4gbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURh
dGFSZXF1ZXN0czsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
ICgpPj4gbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFDYWxsYmFja3M7Ci0KLSAgICBzdHJ1Y3Qg
RGVsZXRlV2Vic2l0ZURhdGFGb3JIb3N0TmFtZXNSZXF1ZXN0IHsKLSAgICAgICAgVmVjdG9yPFN0
cmluZz4gaG9zdE5hbWVzOwotICAgICAgICB1aW50NjRfdCBjYWxsYmFja0lEOwotICAgIH07Ci0g
ICAgVmVjdG9yPERlbGV0ZVdlYnNpdGVEYXRhRm9ySG9zdE5hbWVzUmVxdWVzdD4gbV9wZW5kaW5n
RGVsZXRlV2Vic2l0ZURhdGFGb3JIb3N0TmFtZXNSZXF1ZXN0czsKLSAgICBIYXNoTWFwPHVpbnQ2
NF90LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkICgpPj4gbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURh
dGFGb3JIb3N0TmFtZXNDYWxsYmFja3M7Ci0KLSAgICAvLyBJZiBjcmVhdGVQbHVnaW5Db25uZWN0
aW9uIGlzIGNhbGxlZCB3aGlsZSB0aGUgcHJvY2VzcyBpcyBzdGlsbCBsYXVuY2hpbmcgd2UnbGwg
a2VlcCBjb3VudCBvZiBpdCBhbmQgc2VuZCBhIGJ1bmNoIG9mIHJlcXVlc3RzCi0gICAgLy8gd2hl
biB0aGUgcHJvY2VzcyBmaW5pc2hlcyBsYXVuY2hpbmcuCi0gICAgdW5zaWduZWQgbV9udW1QZW5k
aW5nQ29ubmVjdGlvblJlcXVlc3RzOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgUmV0YWlu
UHRyPE5TT2JqZWN0PiBtX2FjdGl2YXRpb25PYnNlcnZlcjsKLSAgICBSZXRhaW5QdHI8V0tQbGFj
ZWhvbGRlck1vZGFsV2luZG93PiBtX3BsYWNlaG9sZGVyV2luZG93OwotICAgIGJvb2wgbV9tb2Rh
bFdpbmRvd0lzU2hvd2luZzsKLSAgICBib29sIG1fZnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZzsK
LSAgICB1bnNpZ25lZCBtX3ByZUZ1bGxzY3JlZW5BcHBQcmVzZW50YXRpb25PcHRpb25zOwotI2Vu
ZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMmFlMDgzZDM3Mjc5Y2EwMDAyMWNiNWNmYTVmZDJhMjgzMjMyMDJl
NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgor
KysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
IyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAot
IyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi1tZXNzYWdl
cyAtPiBQbHVnaW5Qcm9jZXNzUHJveHkgewotICAgIERpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0
aW9uKElQQzo6QXR0YWNobWVudCBjb25uZWN0aW9uSWRlbnRpZmllciwgYm9vbCBzdXBwb3J0c0Fz
eW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uKQotCi0gICAgRGlkR2V0U2l0ZXNXaXRoRGF0
YShWZWN0b3I8U3RyaW5nPiBzaXRlcywgdWludDY0X3QgY2FsbGJhY2tJRCkKLSAgICBEaWREZWxl
dGVXZWJzaXRlRGF0YSh1aW50NjRfdCBjYWxsYmFja0lEKQotICAgIERpZERlbGV0ZVdlYnNpdGVE
YXRhRm9ySG9zdE5hbWVzKHVpbnQ2NF90IGNhbGxiYWNrSUQpCi0KLSNpZiBQTEFURk9STShDT0NP
QSkKLSAgICBTZXRNb2RhbFdpbmRvd0lzU2hvd2luZyhib29sIG1vZGFsV2luZG93SXNTaG93aW5n
KQotICAgIFNldEZ1bGxzY3JlZW5XaW5kb3dJc1Nob3dpbmcoYm9vbCBmdWxsc2NyZWVuV2luZG93
SXNTaG93aW5nKQotICAgIAotICAgICMgUmV0dXJucyB0cnVlIGlmIHRoZSBVSSBwcm9jZXNzIGxh
dW5jaGVkIHRoZSBwcm9jZXNzLgotICAgIExhdW5jaFByb2Nlc3MoU3RyaW5nIGxhdW5jaFBhdGgs
IFZlY3RvcjxTdHJpbmc+IGFyZ3VtZW50cykgLT4gKGJvb2wgcmVzdWx0KSBTeW5jaHJvbm91cwot
Ci0gICAgIyBSZXR1cm5zIHRydWUgaWYgdGhlIFVJIHByb2Nlc3MgbGF1bmNoZWQgdGhlIGFwcGxp
Y2F0aW9uLgotICAgIExhdW5jaEFwcGxpY2F0aW9uQXRVUkwoU3RyaW5nIHVybCwgVmVjdG9yPFN0
cmluZz4gYXJndW1lbnRzKSAtPiAoYm9vbCByZXN1bHQpIFN5bmNocm9ub3VzCi0KLSAgICAjIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgVUkgcHJvY2VzcyBkaWQgb3BlbiB0aGUgVVJMLgotICAgIE9wZW5V
UkwoU3RyaW5nIHVybFN0cmluZykgLT4gKGJvb2wgcmVzdWx0LCBpbnQzMl90IHN0YXR1cywgU3Ry
aW5nIGxhdW5jaGVkVVJMU3RyaW5nKSBTeW5jaHJvbm91cwotICAgIAotICAgICMgUmV0dXJucyB0
cnVlIGlmIHRoZSBVSSBwcm9jZXNzIGRpZCBvcGVuIHRoZSBmaWxlLgotICAgIE9wZW5GaWxlKFN0
cmluZyBmdWxsUGF0aCkgLT4gKGJvb2wgcmVzdWx0KSBTeW5jaHJvbm91cwotI2VuZGlmCi19Ci0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1Z2lucy9tYWMv
UGx1Z2luSW5mb1N0b3JlTWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1Z2lucy9t
YWMvUGx1Z2luSW5mb1N0b3JlTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
NmYxYjIyZjQ5Y2M2NDVmN2YxMThmNjExNTQwNTc4NTFkYWY2NzZlLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Bs
dWdpbnMvbWFjL1BsdWdpbkluZm9TdG9yZU1hYy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDEzNyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJQ
bHVnaW5JbmZvU3RvcmUuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0KLSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIk5ldHNjYXBlUGx1
Z2luTW9kdWxlLmgiCi0jaW1wb3J0ICJTYW5kYm94VXRpbGl0aWVzLmgiCi0jaW1wb3J0IDxXZWJD
b3JlL1BsdWdpbkJsb2NrbGlzdC5oPgotI2ltcG9ydCA8cHdkLmg+Ci0jaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+Ci0jaW1wb3J0IDx3dGYvY29jb2EvVHlwZUNhc3RzQ29jb2EuaD4KLSNpbXBvcnQg
PHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgotI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1WZWN0b3I8
U3RyaW5nPiBQbHVnaW5JbmZvU3RvcmU6OnBsdWdpbnNEaXJlY3RvcmllcygpCi17Ci0gICAgVmVj
dG9yPFN0cmluZz4gcGx1Z2luc0RpcmVjdG9yaWVzOwotICAgIHBsdWdpbnNEaXJlY3Rvcmllcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIpOwotCi0gICAgQVNDSUlMaXRlcmFsIHBsdWdpblBhdGgg
eyAiL0xpYnJhcnkvSW50ZXJuZXQgUGx1Zy1JbnMiX3MgfTsKLQotICAgIGlmIChhdXRvKiBwdyA9
IGdldHB3dWlkKGdldHVpZCgpKSkKLSAgICAgICAgcGx1Z2luc0RpcmVjdG9yaWVzLnVuY2hlY2tl
ZEFwcGVuZChtYWtlU3RyaW5nKHB3LT5wd19kaXIsIHBsdWdpblBhdGgpKTsKLSAgICBwbHVnaW5z
RGlyZWN0b3JpZXMudW5jaGVja2VkQXBwZW5kKHBsdWdpblBhdGgpOwotICAgIAotICAgIHJldHVy
biBwbHVnaW5zRGlyZWN0b3JpZXM7Ci19Ci0gICAgCi1WZWN0b3I8U3RyaW5nPiBQbHVnaW5JbmZv
U3RvcmU6OnBsdWdpblBhdGhzSW5EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnkpCi17
Ci0gICAgYXV0byBkaXJlY3RvcnlOU1N0cmluZyA9IGJyaWRnZV9jYXN0KGRpcmVjdG9yeS5jcmVh
dGVDRlN0cmluZygpKTsKLSAgICByZXR1cm4gbWFrZVZlY3RvcihbW05TRmlsZU1hbmFnZXIgZGVm
YXVsdE1hbmFnZXJdIGNvbnRlbnRzT2ZEaXJlY3RvcnlBdFBhdGg6ZGlyZWN0b3J5TlNTdHJpbmcu
Z2V0KCkgZXJyb3I6bmlsXSwgWyZdIChpZCBmaWxlbmFtZSkgLT4gc3RkOjpvcHRpb25hbDxTdHJp
bmc+IHsKLSAgICAgICAgcmV0dXJuIFtkaXJlY3RvcnlOU1N0cmluZyBzdHJpbmdCeUFwcGVuZGlu
Z1BhdGhDb21wb25lbnQ6ZmlsZW5hbWVdOwotICAgIH0pOwotfQotCi1WZWN0b3I8U3RyaW5nPiBQ
bHVnaW5JbmZvU3RvcmU6OmluZGl2aWR1YWxQbHVnaW5QYXRocygpCi17Ci0gICAgcmV0dXJuIFZl
Y3RvcjxTdHJpbmc+KCk7Ci19Ci0KLWJvb2wgUGx1Z2luSW5mb1N0b3JlOjpnZXRQbHVnaW5JbmZv
KGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCwgUGx1Z2luTW9kdWxlSW5mbyYgcGx1Z2luKQotewot
ICAgIHJldHVybiBOZXRzY2FwZVBsdWdpbk1vZHVsZTo6Z2V0UGx1Z2luSW5mbyhwbHVnaW5QYXRo
LCBwbHVnaW4pOwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGRCbG9ja1BsdWdpbihjb25zdCBQbHVn
aW5Nb2R1bGVJbmZvJiBwbHVnaW4pCi17Ci0gICAgUGx1Z2luTW9kdWxlTG9hZFBvbGljeSBsb2Fk
UG9saWN5ID0gUGx1Z2luSW5mb1N0b3JlOjpkZWZhdWx0TG9hZFBvbGljeUZvclBsdWdpbihwbHVn
aW4pOwotICAgIHJldHVybiBsb2FkUG9saWN5ID09IFBsdWdpbk1vZHVsZUJsb2NrZWRGb3JTZWN1
cml0eSB8fCBsb2FkUG9saWN5ID09IFBsdWdpbk1vZHVsZUJsb2NrZWRGb3JDb21wYXRpYmlsaXR5
OwotfQotCi1ib29sIFBsdWdpbkluZm9TdG9yZTo6c2hvdWxkVXNlUGx1Z2luKFZlY3RvcjxQbHVn
aW5Nb2R1bGVJbmZvPiYgYWxyZWFkeUxvYWRlZFBsdWdpbnMsIGNvbnN0IFBsdWdpbk1vZHVsZUlu
Zm8mIHBsdWdpbikKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFscmVhZHlMb2FkZWRQ
bHVnaW5zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFBsdWdpbk1vZHVsZUluZm8mIGxv
YWRlZFBsdWdpbiA9IGFscmVhZHlMb2FkZWRQbHVnaW5zW2ldOwotCi0gICAgICAgIC8vIElmIGEg
cGx1Zy1pbiB3aXRoIHRoZSBzYW1lIGJ1bmRsZSBpZGVudGlmaWVyIGFscmVhZHkgZXhpc3RzLCB3
ZSBkb24ndCB3YW50IHRvIGxvYWQgaXQuCi0gICAgICAgIC8vIEhvd2V2ZXIsIGlmIHRoZSBhbHJl
YWR5IGV4aXN0aW5nIHBsdWctaW4gaXMgYmxvY2tlZCB3ZSB3YW50IHRvIHJlcGxhY2UgaXQgd2l0
aCB0aGUgbmV3IHBsdWctaW4uCi0gICAgICAgIGlmIChsb2FkZWRQbHVnaW4uYnVuZGxlSWRlbnRp
ZmllciA9PSBwbHVnaW4uYnVuZGxlSWRlbnRpZmllcikgewotICAgICAgICAgICAgaWYgKCFzaG91
bGRCbG9ja1BsdWdpbihsb2FkZWRQbHVnaW4pKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICAgICAgYWxyZWFkeUxvYWRlZFBsdWdpbnMucmVtb3ZlKGkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocGx1Z2luLmJ1bmRsZUlk
ZW50aWZpZXIgPT0gImNvbS5hcHBsZS5qYXZhLkphdmFBcHBsZXRQbHVnaW4iKSB7Ci0gICAgICAg
IExPRyhQbHVnaW5zLCAiSWdub3JpbmcgY29tLmFwcGxlLmphdmEuSmF2YUFwcGxldFBsdWdpbiIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGN1cnJlbnRQcm9jZXNz
SXNTYW5kYm94ZWQoKSAmJiAhcGx1Z2luLmhhc1NhbmRib3hQcm9maWxlKSB7Ci0gICAgICAgIExP
RyhQbHVnaW5zLCAiSWdub3JpbmcgdW5zYW5kYm94ZWQgcGx1Zy1pbiAlcyIsIHBsdWdpbi5idW5k
bGVJZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBsdWdpbk1vZHVsZUxvYWRQb2xpY3kgUGx1Z2lu
SW5mb1N0b3JlOjpkZWZhdWx0TG9hZFBvbGljeUZvclBsdWdpbihjb25zdCBQbHVnaW5Nb2R1bGVJ
bmZvJiBwbHVnaW4pCi17Ci0gICAgc3dpdGNoIChQbHVnaW5CbG9ja2xpc3Q6OmxvYWRQb2xpY3lG
b3JQbHVnaW5WZXJzaW9uKHBsdWdpbi5idW5kbGVJZGVudGlmaWVyLCBwbHVnaW4udmVyc2lvblN0
cmluZykpIHsKLSAgICBjYXNlIFBsdWdpbkJsb2NrbGlzdDo6TG9hZFBvbGljeTo6TG9hZE5vcm1h
bGx5OgotICAgICAgICByZXR1cm4gUGx1Z2luTW9kdWxlTG9hZE5vcm1hbGx5OwotICAgIGNhc2Ug
UGx1Z2luQmxvY2tsaXN0OjpMb2FkUG9saWN5OjpCbG9ja2VkRm9yU2VjdXJpdHk6Ci0gICAgICAg
IHJldHVybiBQbHVnaW5Nb2R1bGVCbG9ja2VkRm9yU2VjdXJpdHk7Ci0gICAgY2FzZSBQbHVnaW5C
bG9ja2xpc3Q6OkxvYWRQb2xpY3k6OkJsb2NrZWRGb3JDb21wYXRpYmlsaXR5OgotICAgICAgICBy
ZXR1cm4gUGx1Z2luTW9kdWxlQmxvY2tlZEZvckNvbXBhdGliaWxpdHk7Ci0gICAgfQotfQotCi1Q
bHVnaW5Nb2R1bGVJbmZvIFBsdWdpbkluZm9TdG9yZTo6ZmluZFBsdWdpbldpdGhCdW5kbGVJZGVu
dGlmaWVyKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllcikKLXsKLSAgICBsb2FkUGx1Z2lu
c0lmTmVjZXNzYXJ5KCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGx1Z2lucy5z
aXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9wbHVnaW5zW2ldLmJ1bmRsZUlkZW50aWZpZXIg
PT0gYnVuZGxlSWRlbnRpZmllcikKLSAgICAgICAgICAgIHJldHVybiBtX3BsdWdpbnNbaV07Ci0g
ICAgfQotICAgIAotICAgIHJldHVybiBQbHVnaW5Nb2R1bGVJbmZvKCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BsdWdp
bnMvbWFjL1BsdWdpblByb2Nlc3NNYW5hZ2VyTWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUGx1Z2lucy9tYWMvUGx1Z2luUHJvY2Vzc01hbmFnZXJNYWMubW0KZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGI5MGEzMTQ0NWU4NTFkM2Y0MTM5M2U2NzM2NGE1ZTlmOGRkNDI5ZDMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvUGx1Z2lucy9tYWMvUGx1Z2luUHJvY2Vzc01hbmFnZXJNYWMubW0KKysr
IC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJQbHVnaW5Qcm9jZXNzTWFuYWdlci5oIgotCi0jaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCi0KLSNpbXBvcnQgIlBsdWdpblByb2Nlc3NQcm94eS5oIgotI2ltcG9y
dCA8V2ViQ29yZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi12b2lkIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25E
aXNhYmxlZChSZWZDb3VudGVyRXZlbnQgZXZlbnQpCi17Ci0gICAgc2l6ZV90IGRpc2FibGVDb3Vu
dCA9IG1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlci52YWx1ZSgpOwot
Ci0gICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IHplcm8vbm9uLXplcm8gZWRnZSBjaGFuZ2VzOyBp
Z25vcmUgY2FzZXMgd2hlcmUgdGhlIGNvdW50IHdhcyBwcmV2aW91c2x5IG5vbi16ZXJvLCBhbmQg
c3RpbGwgaXMuCi0gICAgaWYgKGRpc2FibGVDb3VudCA+PSAyIHx8IChkaXNhYmxlQ291bnQgPT0g
MSAmJiBldmVudCA9PSBSZWZDb3VudGVyRXZlbnQ6OkRlY3JlbWVudCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBBU1NFUlQoKGV2ZW50ID09IFJlZkNvdW50ZXJFdmVudDo6SW5jcmVtZW50ICYmIGRp
c2FibGVDb3VudCA9PSAxKQotICAgICAgICB8fCAoZXZlbnQgPT0gUmVmQ291bnRlckV2ZW50OjpE
ZWNyZW1lbnQgJiYgIWRpc2FibGVDb3VudCkpOwotCi0gICAgYm9vbCBlbmFibGVkID0gIWRpc2Fi
bGVDb3VudDsKLSAgICBmb3IgKGF1dG8mIHBsdWdpblByb2Nlc3MgOiBtX3BsdWdpblByb2Nlc3Nl
cykKLSAgICAgICAgcGx1Z2luUHJvY2Vzcy0+c2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChl
bmFibGVkKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2V0RXhwZXJpbWVudGFs
UGx1Z0luU2FuZGJveFByb2ZpbGVzRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgbV9leHBl
cmltZW50YWxQbHVnSW5TYW5kYm94UHJvZmlsZXNFbmFibGVkID0gZW5hYmxlZDsKLSAgICBXZWJD
b3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldEV4cGVyaW1l
bnRhbFBsdWdJblNhbmRib3hQcm9maWxlc0VuYWJsZWQoZW5hYmxlZCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QbHVnaW5zL21hYy9QbHVnaW5Qcm9j
ZXNzUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QbHVnaW5zL21hYy9QbHVn
aW5Qcm9jZXNzUHJveHlNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNGJh
NjA4YjQ3MjJiZjBiMmUzMjMxMDdkOTI3NDBlMDc4YzI0MWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1Z2lu
cy9tYWMvUGx1Z2luUHJvY2Vzc1Byb3h5TWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMzYwICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUGx1
Z2luUHJvY2Vzc1Byb3h5LmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQot
I2ltcG9ydCAiUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgotI2ltcG9ydCAiUGx1
Z2luUHJvY2Vzc01hbmFnZXIuaCIKLSNpbXBvcnQgIlBsdWdpblByb2Nlc3NNZXNzYWdlcy5oIgot
I2ltcG9ydCAiU2FuZGJveFV0aWxpdGllcy5oIgotI2ltcG9ydCA8UXVhcnR6Q29yZS9DQVJlbW90
ZUxheWVyU2VydmVyLmg+Ci0jaW1wb3J0IDxjcnRfZXh0ZXJucy5oPgotI2ltcG9ydCA8bWFjaC1v
L2R5bGQuaD4KLSNpbXBvcnQgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+Ci0jaW1wb3J0IDxz
cGF3bi5oPgotI2ltcG9ydCA8d3RmL0ZpbGVTeXN0ZW0uaD4KLSNpbXBvcnQgPHd0Zi9Qcm9jZXNz
UHJpdmlsZWdlLmg+Ci0jaW1wb3J0IDx3dGYvVVJMLmg+Ci0jaW1wb3J0IDx3dGYvY29jb2EvVmVj
dG9yQ29jb2EuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotQGludGVyZmFjZSBX
S1BsYWNlaG9sZGVyTW9kYWxXaW5kb3cgOiBOU1dpbmRvdyAKLUBlbmQKLQotQGltcGxlbWVudGF0
aW9uIFdLUGxhY2Vob2xkZXJNb2RhbFdpbmRvdwotCi0vLyBQcmV2ZW50IE5TQXBwIGZyb20gY2Fs
bGluZyByZXF1ZXN0VXNlckF0dGVudGlvbjogd2hlbiB0aGUgd2luZG93IGlzIHNob3duIAotLy8g
bW9kYWxseSwgZXZlbiBpZiB0aGUgYXBwIGlzIGluYWN0aXZlLiBTZWUgNjgyMzA0OS4KLS0gKEJP
T0wpX3dhbnRzVXNlckF0dGVudGlvbgotewotICAgIHJldHVybiBOTzsgICAKLX0KLQotQGVuZAot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLSAgICAKLXZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjpwbGF0
Zm9ybUdldExhdW5jaE9wdGlvbnNXaXRoQXR0cmlidXRlcyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5j
aE9wdGlvbnMmIGxhdW5jaE9wdGlvbnMsIGNvbnN0IFBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzJiBw
bHVnaW5Qcm9jZXNzQXR0cmlidXRlcykKLXsKLSAgICBBU1NFUlQocGx1Z2luUHJvY2Vzc0F0dHJp
YnV0ZXMubW9kdWxlSW5mby5wbHVnaW5BcmNoaXRlY3R1cmUgPT0gQ1BVX1RZUEVfWDg2XzY0KTsK
LSAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlID0gUHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNz
VHlwZTo6UGx1Z2luOwotCi0gICAgbGF1bmNoT3B0aW9ucy5leHRyYUluaXRpYWxpemF0aW9uRGF0
YS5hZGQoInBsdWdpbi1wYXRoIiwgcGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMubW9kdWxlSW5mby5w
YXRoKTsKLQotICAgIGlmIChQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuZXhwZXJp
bWVudGFsUGx1Z0luU2FuZGJveFByb2ZpbGVzRW5hYmxlZCgpKQotICAgICAgICBsYXVuY2hPcHRp
b25zLmV4dHJhSW5pdGlhbGl6YXRpb25EYXRhLmFkZCgiZXhwZXJpbWVudGFsLXNhbmRib3gtcGx1
Z2luIiwgIjEiKTsKLQotICAgIGlmIChwbHVnaW5Qcm9jZXNzQXR0cmlidXRlcy5zYW5kYm94UG9s
aWN5ID09IFBsdWdpblByb2Nlc3NTYW5kYm94UG9saWN5OjpVbnNhbmRib3hlZCkgewotICAgICAg
ICBpZiAoIWN1cnJlbnRQcm9jZXNzSXNTYW5kYm94ZWQoKSkKLSAgICAgICAgICAgIGxhdW5jaE9w
dGlvbnMuZXh0cmFJbml0aWFsaXphdGlvbkRhdGEuYWRkKCJkaXNhYmxlLXNhbmRib3giLCAiMSIp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBXVEZMb2dBbHdheXMoIk1haW4gcHJvY2VzcyBp
cyBzYW5kYm94ZWQsIGlnbm9yaW5nIHBsdWctaW4gc2FuZGJveCBwb2xpY3kiKTsKLSAgICB9Ci19
Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUluaXRpYWxpemVQbHVnaW5Qcm9j
ZXNzKFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCi17Ci0gICAg
Ly8gRm9yIG5vdyBvbmx5IEZsYXNoIGlzIGtub3duIHRvIGJlaGF2ZSB3aXRoIGFzeW5jaHJvbm91
cyBwbHVnLWluIGluaXRpYWxpemF0aW9uLgotICAgIHBhcmFtZXRlcnMuc3VwcG9ydHNBc3luY2hy
b25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbiA9IG1fcGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMubW9k
dWxlSW5mby5idW5kbGVJZGVudGlmaWVyID09ICJjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIu
cGx1Z2luIjsKLQotICAgIHBhcmFtZXRlcnMuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ1BvcnQgPSBN
YWNoU2VuZFJpZ2h0OjpjcmVhdGUoW0NBUmVtb3RlTGF5ZXJTZXJ2ZXIgc2hhcmVkU2VydmVyXS5z
ZXJ2ZXJQb3J0KTsKLSAgICBwYXJhbWV0ZXJzLm5ldHdvcmtBVFNDb250ZXh0ID0gYWRvcHRDRihf
Q0ZOZXR3b3JrQ29weUFUU0NvbnRleHQoKSk7Ci19Ci0KLWJvb2wgUGx1Z2luUHJvY2Vzc1Byb3h5
OjpnZXRQbHVnaW5Qcm9jZXNzU2VyaWFsTnVtYmVyKFByb2Nlc3NTZXJpYWxOdW1iZXImIHBsdWdp
blByb2Nlc3NTZXJpYWxOdW1iZXIpCi17Ci0gICAgcGlkX3QgcGx1Z2luUHJvY2Vzc1BJRCA9IHBy
b2Nlc3NJZGVudGlmaWVyKCk7Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVH
SU4KLSAgICByZXR1cm4gR2V0UHJvY2Vzc0ZvclBJRChwbHVnaW5Qcm9jZXNzUElELCAmcGx1Z2lu
UHJvY2Vzc1NlcmlhbE51bWJlcikgPT0gbm9FcnI7Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECi19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjptYWtlUGx1Z2luUHJv
Y2Vzc1RoZUZyb250UHJvY2VzcygpCi17Ci0gICAgUHJvY2Vzc1NlcmlhbE51bWJlciBwbHVnaW5Q
cm9jZXNzU2VyaWFsTnVtYmVyOwotICAgIGlmICghZ2V0UGx1Z2luUHJvY2Vzc1NlcmlhbE51bWJl
cihwbHVnaW5Qcm9jZXNzU2VyaWFsTnVtYmVyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQUxM
T1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBTZXRGcm9udFByb2Nlc3MoJnBs
dWdpblByb2Nlc3NTZXJpYWxOdW1iZXIpOwotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJ
T05TX0VORAotfQotCi12b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6bWFrZVVJUHJvY2Vzc1RoZUZy
b250UHJvY2VzcygpCi17Ci0gICAgUHJvY2Vzc1NlcmlhbE51bWJlciBwcm9jZXNzU2VyaWFsTnVt
YmVyOwotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgR2V0Q3Vy
cmVudFByb2Nlc3MoJnByb2Nlc3NTZXJpYWxOdW1iZXIpOwotICAgIFNldEZyb250UHJvY2Vzcygm
cHJvY2Vzc1NlcmlhbE51bWJlcik7ICAgICAgICAgICAgCi0gICAgQUxMT1dfREVQUkVDQVRFRF9E
RUNMQVJBVElPTlNfRU5ECi19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjpzZXRGdWxsc2Ny
ZWVuV2luZG93SXNTaG93aW5nKGJvb2wgZnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZykKLXsKLSAg
ICBpZiAobV9mdWxsc2NyZWVuV2luZG93SXNTaG93aW5nID09IGZ1bGxzY3JlZW5XaW5kb3dJc1No
b3dpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZnVsbHNjcmVlbldpbmRvd0lzU2hvd2lu
ZyA9IGZ1bGxzY3JlZW5XaW5kb3dJc1Nob3dpbmc7Ci0gICAgaWYgKG1fZnVsbHNjcmVlbldpbmRv
d0lzU2hvd2luZykKLSAgICAgICAgZW50ZXJGdWxsc2NyZWVuKCk7Ci0gICAgZWxzZQotICAgICAg
ICBleGl0RnVsbHNjcmVlbigpOwotfQotCi12b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6ZW50ZXJG
dWxsc2NyZWVuKCkKLXsKLSAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJp
dmlsZWdlOjpDYW5Db21tdW5pY2F0ZVdpdGhXaW5kb3dTZXJ2ZXIpKTsKLSAgICAvLyBHZXQgdGhl
IGN1cnJlbnQgcHJlc2VudGF0aW9uIG9wdGlvbnMuCi0gICAgbV9wcmVGdWxsc2NyZWVuQXBwUHJl
c2VudGF0aW9uT3B0aW9ucyA9IFtOU0FwcCBwcmVzZW50YXRpb25PcHRpb25zXTsKLQotICAgIC8v
IEZpZ3VyZSBvdXQgd2hpY2ggcHJlc2VudGF0aW9uIG9wdGlvbnMgdG8gdXNlLgotICAgIHVuc2ln
bmVkIHByZXNlbnRhdGlvbk9wdGlvbnMgPSBtX3ByZUZ1bGxzY3JlZW5BcHBQcmVzZW50YXRpb25P
cHRpb25zICYgfihOU0FwcGxpY2F0aW9uUHJlc2VudGF0aW9uQXV0b0hpZGVEb2NrIHwgTlNBcHBs
aWNhdGlvblByZXNlbnRhdGlvbkF1dG9IaWRlTWVudUJhcik7Ci0gICAgcHJlc2VudGF0aW9uT3B0
aW9ucyB8PSBOU0FwcGxpY2F0aW9uUHJlc2VudGF0aW9uSGlkZURvY2sgfCBOU0FwcGxpY2F0aW9u
UHJlc2VudGF0aW9uSGlkZU1lbnVCYXI7Ci0KLSAgICBbTlNBcHAgc2V0UHJlc2VudGF0aW9uT3B0
aW9uczpwcmVzZW50YXRpb25PcHRpb25zXTsKLSAgICBtYWtlUGx1Z2luUHJvY2Vzc1RoZUZyb250
UHJvY2VzcygpOwotfQotCi12b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6ZXhpdEZ1bGxzY3JlZW4o
KQotewotICAgIC8vIElmIHRoZSBwbHVnLWluIGhvc3QgaXMgdGhlIGN1cnJlbnQgYXBwbGljYXRp
b24gdGhlbiB3ZSBzaG91bGQgYnJpbmcgb3Vyc2VsdmVzIHRvIHRoZSBmcm9udCB3aGVuIGl0IGV4
aXRzIGZ1bGwtc2NyZWVuIG1vZGUuCi0gICAgUHJvY2Vzc1NlcmlhbE51bWJlciBmcm9udFByb2Nl
c3NTZXJpYWxOdW1iZXI7Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4K
LSAgICBHZXRGcm9udFByb2Nlc3MoJmZyb250UHJvY2Vzc1NlcmlhbE51bWJlcik7Ci0gICAgQUxM
T1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0KLSAgICAvLyBUaGUgVUkgcHJvY2VzcyBt
dXN0IGJlIHRoZSBmcm9udCBwcm9jZXNzIGluIG9yZGVyIHRvIGNoYW5nZSB0aGUgcHJlc2VudGF0
aW9uIG1vZGUuCi0gICAgbWFrZVVJUHJvY2Vzc1RoZUZyb250UHJvY2VzcygpOwotICAgIFtOU0Fw
cCBzZXRQcmVzZW50YXRpb25PcHRpb25zOm1fcHJlRnVsbHNjcmVlbkFwcFByZXNlbnRhdGlvbk9w
dGlvbnNdOwotCi0gICAgUHJvY2Vzc1NlcmlhbE51bWJlciBwbHVnaW5Qcm9jZXNzU2VyaWFsTnVt
YmVyOwotICAgIGlmICghZ2V0UGx1Z2luUHJvY2Vzc1NlcmlhbE51bWJlcihwbHVnaW5Qcm9jZXNz
U2VyaWFsTnVtYmVyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgdGhlIHBsdWctaW4g
cHJvY2VzcyB3YXMgbm90IHRoZSBmcm9udCBwcm9jZXNzLCBzd2l0Y2ggYmFjayB0byB0aGUgcHJl
dmlvdXMgZnJvbnQgcHJvY2Vzcy4KLSAgICAvLyAoT3RoZXJ3aXNlIHdlJ2xsIGtlZXAgdGhlIFVJ
IHByb2Nlc3MgYXMgdGhlIGZyb250IHByb2Nlc3MpLgotICAgIEJvb2xlYW4gaXNQbHVnaW5Qcm9j
ZXNzRnJvbnRQcm9jZXNzOwotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lO
Ci0gICAgU2FtZVByb2Nlc3MoJmZyb250UHJvY2Vzc1NlcmlhbE51bWJlciwgJnBsdWdpblByb2Nl
c3NTZXJpYWxOdW1iZXIsICZpc1BsdWdpblByb2Nlc3NGcm9udFByb2Nlc3MpOwotICAgIEFMTE9X
X0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotICAgIGlmICghaXNQbHVnaW5Qcm9jZXNzRnJv
bnRQcm9jZXNzKSB7Ci0gICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lO
Ci0gICAgICAgIFNldEZyb250UHJvY2VzcygmZnJvbnRQcm9jZXNzU2VyaWFsTnVtYmVyKTsKLSAg
ICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0gICAgfQotfQotCi12b2lk
IFBsdWdpblByb2Nlc3NQcm94eTo6c2V0TW9kYWxXaW5kb3dJc1Nob3dpbmcoYm9vbCBtb2RhbFdp
bmRvd0lzU2hvd2luZykKLXsKLSAgICBpZiAobW9kYWxXaW5kb3dJc1Nob3dpbmcgPT0gbV9tb2Rh
bFdpbmRvd0lzU2hvd2luZykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1fbW9kYWxXaW5k
b3dJc1Nob3dpbmcgPSBtb2RhbFdpbmRvd0lzU2hvd2luZzsKLSAgICAKLSAgICBpZiAobV9tb2Rh
bFdpbmRvd0lzU2hvd2luZykKLSAgICAgICAgYmVnaW5Nb2RhbCgpOwotICAgIGVsc2UKLSAgICAg
ICAgZW5kTW9kYWwoKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6OmJlZ2luTW9kYWwo
KQotewotICAgIEFTU0VSVCghbV9wbGFjZWhvbGRlcldpbmRvdyk7Ci0gICAgQVNTRVJUKCFtX2Fj
dGl2YXRpb25PYnNlcnZlcik7Ci0gICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vz
c1ByaXZpbGVnZTo6Q2FuQ29tbXVuaWNhdGVXaXRoV2luZG93U2VydmVyKSk7Ci0KLSAgICBtX3Bs
YWNlaG9sZGVyV2luZG93ID0gYWRvcHROUyhbW1dLUGxhY2Vob2xkZXJNb2RhbFdpbmRvdyBhbGxv
Y10gaW5pdFdpdGhDb250ZW50UmVjdDpOU01ha2VSZWN0KDAsIDAsIDEsIDEpIHN0eWxlTWFzazpO
U1dpbmRvd1N0eWxlTWFza0JvcmRlcmxlc3MgYmFja2luZzpOU0JhY2tpbmdTdG9yZUJ1ZmZlcmVk
IGRlZmVyOllFU10pOwotICAgIFttX3BsYWNlaG9sZGVyV2luZG93IHNldFJlbGVhc2VkV2hlbkNs
b3NlZDpOT107Ci0gICAgCi0gICAgbV9hY3RpdmF0aW9uT2JzZXJ2ZXIgPSBbW05TTm90aWZpY2F0
aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyRm9yTmFtZTpOU0FwcGxpY2F0aW9u
V2lsbEJlY29tZUFjdGl2ZU5vdGlmaWNhdGlvbiBvYmplY3Q6TlNBcHAgcXVldWU6bmlsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdXNpbmdCbG9jazpeKE5TTm90aWZpY2F0aW9uICopeyBhcHBsaWNhdGlvbkRp
ZEJlY29tZUFjdGl2ZSgpOyB9XTsKLQotICAgIC8vIFRoZSBjYWxsIHRvIC1bTlNBcHAgcnVuTW9k
YWxGb3JXaW5kb3c6XSBiZWxvdyB3aWxsIHJ1biBhIG5lc3RlZCBydW4gbG9vcCwgYW5kIGlmIHRo
ZSBwbHVnLWluIHByb2Nlc3MKLSAgICAvLyBjcmFzaGVzIHRoZSBQbHVnaW5Qcm9jZXNzUHJveHkg
b2JqZWN0IGNhbiBiZSBkZXN0cm95ZWQuIFByb3RlY3QgYWdhaW5zdCB0aGlzIGhlcmUuCi0gICAg
UmVmPFBsdWdpblByb2Nlc3NQcm94eT4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBbTlNBcHAgcnVu
TW9kYWxGb3JXaW5kb3c6bV9wbGFjZWhvbGRlcldpbmRvdy5nZXQoKV07Ci0gICAgCi0gICAgW21f
cGxhY2Vob2xkZXJXaW5kb3cgb3JkZXJPdXQ6bmlsXTsKLSAgICBtX3BsYWNlaG9sZGVyV2luZG93
ID0gbnVsbHB0cjsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6OmVuZE1vZGFsKCkKLXsK
LSAgICBBU1NFUlQobV9wbGFjZWhvbGRlcldpbmRvdyk7Ci0gICAgQVNTRVJUKG1fYWN0aXZhdGlv
bk9ic2VydmVyKTsKLSAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmls
ZWdlOjpDYW5Db21tdW5pY2F0ZVdpdGhXaW5kb3dTZXJ2ZXIpKTsKLQotICAgIFtbTlNOb3RpZmlj
YXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9hY3RpdmF0aW9uT2Jz
ZXJ2ZXIuZ2V0KCldOwotICAgIG1fYWN0aXZhdGlvbk9ic2VydmVyID0gbnVsbHB0cjsKLSAgICAK
LSAgICBbTlNBcHAgc3RvcE1vZGFsXTsKLQotICAgIG1ha2VVSVByb2Nlc3NUaGVGcm9udFByb2Nl
c3MoKTsKLX0KLSAgICAKLXZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjphcHBsaWNhdGlvbkRpZEJl
Y29tZUFjdGl2ZSgpCi17Ci0gICAgbWFrZVBsdWdpblByb2Nlc3NUaGVGcm9udFByb2Nlc3MoKTsK
LX0KLQotc3RhdGljIGJvb2wgaXNGbGFzaFVwZGF0ZXIoY29uc3QgU3RyaW5nJiBsYXVuY2hQYXRo
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRzKQotewotICAgIGlmIChsYXVuY2hQYXRo
ICE9ICIvQXBwbGljYXRpb25zL1V0aWxpdGllcy9BZG9iZSBGbGFzaCBQbGF5ZXIgSW5zdGFsbCBN
YW5hZ2VyLmFwcC9Db250ZW50cy9NYWNPUy9BZG9iZSBGbGFzaCBQbGF5ZXIgSW5zdGFsbCBNYW5h
Z2VyIikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkg
IT0gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGFyZ3VtZW50c1swXSAhPSAi
LXVwZGF0ZSIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1zdGF0aWMgYm9vbCBzaG91bGRMYXVuY2hQcm9jZXNzKGNvbnN0IFBsdWdpblByb2Nlc3NBdHRy
aWJ1dGVzJiBwbHVnaW5Qcm9jZXNzQXR0cmlidXRlcywgY29uc3QgU3RyaW5nJiBsYXVuY2hQYXRo
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRzKQotewotICAgIGlmIChwbHVnaW5Qcm9j
ZXNzQXR0cmlidXRlcy5tb2R1bGVJbmZvLmJ1bmRsZUlkZW50aWZpZXIgPT0gImNvbS5tYWNyb21l
ZGlhLkZsYXNoIFBsYXllci5wbHVnaW4iKQotICAgICAgICByZXR1cm4gaXNGbGFzaFVwZGF0ZXIo
bGF1bmNoUGF0aCwgYXJndW1lbnRzKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBQ
bHVnaW5Qcm9jZXNzUHJveHk6OmxhdW5jaFByb2Nlc3MoY29uc3QgU3RyaW5nJiBsYXVuY2hQYXRo
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmICghc2hvdWxkTGF1bmNoUHJv
Y2VzcyhtX3BsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLCBsYXVuY2hQYXRoLCBhcmd1bWVudHMpKQot
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwotCi0gICAgW05TVGFzayBs
YXVuY2hlZFRhc2tXaXRoTGF1bmNoUGF0aDpsYXVuY2hQYXRoIGFyZ3VtZW50czpjcmVhdGVOU0Fy
cmF5KGFyZ3VtZW50cykuZ2V0KCldOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKHRydWUpOwotfQot
Ci1zdGF0aWMgYm9vbCBpc0phdmFVcGRhdGVyVVJMKGNvbnN0IFBsdWdpblByb2Nlc3NBdHRyaWJ1
dGVzJiBwbHVnaW5Qcm9jZXNzQXR0cmlidXRlcywgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCi17
Ci0gICAgTlNVUkwgKnVybCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOnVybFN0cmluZ107Ci0gICAg
aWYgKCFbdXJsIGlzRmlsZVVSTF0pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIE5TQXJy
YXkgKmphdmFVcGRhdGVyQXBwTmFtZXMgPSBAW0AiSmF2YSBVcGRhdGVyLmFwcCIsIEAiSmF2YVVw
ZGF0ZXIuYXBwIl07Ci0KLSAgICBmb3IgKE5TU3RyaW5nICpqYXZhVXBkYXRlckFwcE5hbWUgaW4g
amF2YVVwZGF0ZXJBcHBOYW1lcykgewotICAgICAgICBOU1N0cmluZyAqamF2YVVwZGF0ZXJQYXRo
ID0gW05TU3RyaW5nIHBhdGhXaXRoQ29tcG9uZW50czpAWyhOU1N0cmluZyAqKXBsdWdpblByb2Nl
c3NBdHRyaWJ1dGVzLm1vZHVsZUluZm8ucGF0aCwgQCJDb250ZW50cy9SZXNvdXJjZXMiLCBqYXZh
VXBkYXRlckFwcE5hbWVdXTsKLSAgICAgICAgaWYgKFt1cmwucGF0aCBpc0VxdWFsVG9TdHJpbmc6
amF2YVVwZGF0ZXJQYXRoXSkKLSAgICAgICAgICAgIHJldHVybiBZRVM7Ci0gICAgfQotCi0gICAg
cmV0dXJuIE5POwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGRMYXVuY2hBcHBsaWNhdGlvbkF0VVJM
KGNvbnN0IFBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzJiBwbHVnaW5Qcm9jZXNzQXR0cmlidXRlcywg
Y29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCi17Ci0gICAgaWYgKHBsdWdpblByb2Nlc3NBdHRyaWJ1
dGVzLm1vZHVsZUluZm8uYnVuZGxlSWRlbnRpZmllciA9PSAiY29tLm9yYWNsZS5qYXZhLkphdmFB
cHBsZXRQbHVnaW4iKQotICAgICAgICByZXR1cm4gaXNKYXZhVXBkYXRlclVSTChwbHVnaW5Qcm9j
ZXNzQXR0cmlidXRlcywgdXJsU3RyaW5nKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9p
ZCBQbHVnaW5Qcm9jZXNzUHJveHk6OmxhdW5jaEFwcGxpY2F0aW9uQXRVUkwoY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhcmd1bWVudHMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFzaG91
bGRMYXVuY2hBcHBsaWNhdGlvbkF0VVJMKG1fcGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMsIHVybFN0
cmluZykpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Ci0KLUFMTE9X
X0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgYXV0byBjb25maWd1cmF0aW9uID0g
QHsgTlNXb3Jrc3BhY2VMYXVuY2hDb25maWd1cmF0aW9uQXJndW1lbnRzOiBjcmVhdGVOU0FycmF5
KGFyZ3VtZW50cykuZ2V0KCkgfTsKLSAgICBbW05TV29ya3NwYWNlIHNoYXJlZFdvcmtzcGFjZV0g
bGF1bmNoQXBwbGljYXRpb25BdFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzp1cmxTdHJpbmddIG9w
dGlvbnM6TlNXb3Jrc3BhY2VMYXVuY2hBc3luYyBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24g
ZXJyb3I6bnVsbHB0cl07Ci1BTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLSAgICBj
b21wbGV0aW9uSGFuZGxlcih0cnVlKTsKLX0KLQotc3RhdGljIGJvb2wgaXNTaWx2ZXJsaWdodFBy
ZWZlcmVuY2VzVVJMKGNvbnN0IFBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzJiBwbHVnaW5Qcm9jZXNz
QXR0cmlidXRlcywgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCi17Ci0gICAgTlNVUkwgKnNpbHZl
cmxpZ2h0UHJlZmVyZW5jZXNVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoQ29tcG9uZW50czpA
WyhOU1N0cmluZyAqKXBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLm1vZHVsZUluZm8ucGF0aCwgQCJD
b250ZW50cy9SZXNvdXJjZXMvU2lsdmVybGlnaHQgUHJlZmVyZW5jZXMuYXBwIl1dOwotCi0gICAg
cmV0dXJuIFtbTlNVUkwgVVJMV2l0aFN0cmluZzp1cmxTdHJpbmddIGlzRXF1YWw6c2lsdmVybGln
aHRQcmVmZXJlbmNlc1VSTF07Ci19Ci0KLXN0YXRpYyBib29sIHNob3VsZE9wZW5VUkwoY29uc3Qg
UGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMmIHBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLCBjb25zdCBT
dHJpbmcmIHVybFN0cmluZykKLXsKLSAgICBpZiAocGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMubW9k
dWxlSW5mby5idW5kbGVJZGVudGlmaWVyID09ICJjb20ubWljcm9zb2Z0LlNpbHZlcmxpZ2h0UGx1
Z2luIikKLSAgICAgICAgcmV0dXJuIGlzU2lsdmVybGlnaHRQcmVmZXJlbmNlc1VSTChwbHVnaW5Q
cm9jZXNzQXR0cmlidXRlcywgdXJsU3RyaW5nKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6Om9wZW5VUkwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCByZXN1bHQsIGludDMyX3Qgc3RhdHVzLCBTdHJp
bmcgbGF1bmNoZWRVUkxTdHJpbmcpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmICgh
c2hvdWxkT3BlblVSTChtX3BsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLCB1cmxTdHJpbmcpKQotICAg
ICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UsIDAsIHsgfSk7Ci0KLSAgICBDRlVS
TFJlZiBsYXVuY2hlZFVSTDsKLSAgICB1aW50MzJfdCBzdGF0dXMgPSBMU09wZW5DRlVSTFJlZihV
UkwoeyB9LCB1cmxTdHJpbmcpLmNyZWF0ZUNGVVJMKCkuZ2V0KCksICZsYXVuY2hlZFVSTCk7Ci0K
LSAgICBTdHJpbmcgbGF1bmNoZWRVUkxTdHJpbmc7Ci0gICAgaWYgKGxhdW5jaGVkVVJMKSB7Ci0g
ICAgICAgIGxhdW5jaGVkVVJMU3RyaW5nID0gVVJMKGxhdW5jaGVkVVJMKS5zdHJpbmcoKTsKLSAg
ICAgICAgQ0ZSZWxlYXNlKGxhdW5jaGVkVVJMKTsKLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRs
ZXIodHJ1ZSwgc3RhdHVzLCBsYXVuY2hlZFVSTFN0cmluZyk7Ci19Ci0KLXN0YXRpYyBib29sIHNo
b3VsZE9wZW5GaWxlKGNvbnN0IFBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzJiBwbHVnaW5Qcm9jZXNz
QXR0cmlidXRlcywgY29uc3QgU3RyaW5nJiBmdWxsUGF0aCkKLXsKLSAgICBpZiAocGx1Z2luUHJv
Y2Vzc0F0dHJpYnV0ZXMubW9kdWxlSW5mby5idW5kbGVJZGVudGlmaWVyID09ICJjb20ubWFjcm9t
ZWRpYS5GbGFzaCBQbGF5ZXIucGx1Z2luIikgewotICAgICAgICBpZiAoZnVsbFBhdGggPT0gIi9M
aWJyYXJ5L1ByZWZlcmVuY2VQYW5lcy9GbGFzaCBQbGF5ZXIucHJlZlBhbmUiKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFBs
dWdpblByb2Nlc3NQcm94eTo6b3BlbkZpbGUoY29uc3QgU3RyaW5nJiBmdWxsUGF0aCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAo
IXNob3VsZE9wZW5GaWxlKG1fcGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMsIGZ1bGxQYXRoKSkKLSAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKLQotICAgIEFMTE9XX0RFUFJF
Q0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgW1tOU1dvcmtzcGFjZSBzaGFyZWRXb3Jrc3Bh
Y2VdIG9wZW5GaWxlOmZ1bGxQYXRoXTsKLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9O
U19FTkQKLSAgICBjb21wbGV0aW9uSGFuZGxlcih0cnVlKTsKLX0KLQotaW50IHBsdWdpblByb2Nl
c3NMYXRlbmN5UU9TKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgaW50IHFvcyA9IFtbTlNVc2VyRGVm
YXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGludGVnZXJGb3JLZXk6QCJXZWJLaXRQbHVnaW5Q
cm9jZXNzTGF0ZW5jeVFPUyJdOwotICAgIHJldHVybiBxb3M7Ci19Ci0KLWludCBwbHVnaW5Qcm9j
ZXNzVGhyb3VnaHB1dFFPUygpCi17Ci0gICAgc3RhdGljIGNvbnN0IGludCBxb3MgPSBbW05TVXNl
ckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBpbnRlZ2VyRm9yS2V5OkAiV2ViS2l0UGx1
Z2luUHJvY2Vzc1Rocm91Z2hwdXRRT1MiXTsKLSAgICByZXR1cm4gcW9zOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggMjEwYjJmNGRhMmQy
MWFjZDAxMDc3ZTgyMDhmZGE0YTM0ODc0M2Y0MS4uYzkzNjdiMDBmMWRiMDc3YjhjMmRkMmM5OWE3
MWQ1Njc0YTlhYmRkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CkBAIC04MSw4ICs4MSw2IEBACiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVl
c3QuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuaCIK
ICNpbmNsdWRlICJQYWdlQ2xpZW50LmgiCi0jaW5jbHVkZSAiUGx1Z2luSW5mb3JtYXRpb24uaCIK
LSNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzTWFuYWdlci5oIgogI2luY2x1ZGUgIlByaW50SW5mby5o
IgogI2luY2x1ZGUgIlByb2Nlc3NUaHJvdHRsZXIuaCIKICNpbmNsdWRlICJQcm92aXNpb25hbFBh
Z2VQcm94eS5oIgpAQCAtMTg5MiwxMyArMTg5MCw2IEBAIGJvb2wgV2ViUGFnZVByb3h5OjpjYW5T
aG93TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKICAgICBpZiAoTUlNRVR5cGVSZWdp
c3RyeTo6Y2FuU2hvd01JTUVUeXBlKG1pbWVUeXBlKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
LSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBTdHJpbmcgbmV3TWltZVR5cGUg
PSBtaW1lVHlwZTsKLSAgICBQbHVnaW5Nb2R1bGVJbmZvIHBsdWdpbiA9IG1fcHJvY2Vzcy0+cHJv
Y2Vzc1Bvb2woKS5wbHVnaW5JbmZvU3RvcmUoKS5maW5kUGx1Z2luKG5ld01pbWVUeXBlLCBVUkwo
KSk7Ci0gICAgaWYgKCFwbHVnaW4ucGF0aC5pc051bGwoKSAmJiBtX3ByZWZlcmVuY2VzLT5wbHVn
aW5zRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZiAvLyBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIC8vIE9uIE1hYywg
d2UgY2FuIHNob3cgUERGcy4KICAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNQREZPclBvc3RT
Y3JpcHRNSU1FVHlwZShtaW1lVHlwZSkgJiYgIVdlYlByb2Nlc3NQb29sOjpvbWl0UERGU3VwcG9y
dCgpKQpAQCAtMzAwNiw2NCArMjk5Nyw2IEBAIFdlYlByZWZlcmVuY2VzU3RvcmUgV2ViUGFnZVBy
b3h5OjpwcmVmZXJlbmNlc1N0b3JlKCkgY29uc3QKICAgICByZXR1cm4gbV9wcmVmZXJlbmNlcy0+
c3RvcmUoKTsKIH0KIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotdm9pZCBXZWJQ
YWdlUHJveHk6OmZpbmRQbHVnaW4oY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cGFnZVVSTFN0cmluZywgYm9vbCBhbGxvd09ubHlBcHBsaWNhdGlvblBsdWdpbnMsIE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkZpbmRQbHVnaW46OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQotewotICAg
IFBhZ2VDbGllbnRQcm90ZWN0b3IgcHJvdGVjdG9yKHBhZ2VDbGllbnQoKSk7Ci0KLSAgICBNRVNT
QUdFX0NIRUNLX1VSTChtX3Byb2Nlc3MsIHVybFN0cmluZyk7Ci0KLSAgICBVUkwgcGx1Z2luVVJM
ID0gVVJMIHsgVVJMKCksIHVybFN0cmluZyB9OwotICAgIFN0cmluZyBuZXdNaW1lVHlwZSA9IG1p
bWVUeXBlLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7Ci0KLSAgICBQbHVnaW5EYXRhOjpBbGxv
d2VkUGx1Z2luVHlwZXMgYWxsb3dlZFBsdWdpblR5cGVzID0gYWxsb3dPbmx5QXBwbGljYXRpb25Q
bHVnaW5zID8gUGx1Z2luRGF0YTo6T25seUFwcGxpY2F0aW9uUGx1Z2lucyA6IFBsdWdpbkRhdGE6
OkFsbFBsdWdpbnM7Ci0KLSAgICBVUkwgcGFnZVVSTCA9IFVSTCB7IFVSTCgpLCBwYWdlVVJMU3Ry
aW5nIH07Ci0gICAgaWYgKCFtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkucGx1Z2luSW5mb1N0b3Jl
KCkuaXNTdXBwb3J0ZWRQbHVnaW4obWltZVR5cGUsIHBsdWdpblVSTCwgZnJhbWVVUkxTdHJpbmcs
IHBhZ2VVUkwpKSB7Ci0gICAgICAgIHJlcGx5KDAsIG5ld01pbWVUeXBlLCBQbHVnaW5Nb2R1bGVM
b2FkTm9ybWFsbHksIHsgfSwgdHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBQ
bHVnaW5Nb2R1bGVJbmZvIHBsdWdpbiA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5wbHVnaW5J
bmZvU3RvcmUoKS5maW5kUGx1Z2luKG5ld01pbWVUeXBlLCBwbHVnaW5VUkwsIGFsbG93ZWRQbHVn
aW5UeXBlcyk7Ci0gICAgaWYgKCFwbHVnaW4ucGF0aCkgewotICAgICAgICByZXBseSgwLCBuZXdN
aW1lVHlwZSwgUGx1Z2luTW9kdWxlTG9hZE5vcm1hbGx5LCB7IH0sIGZhbHNlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHVpbnQzMl90IHBsdWdpbkxvYWRQb2xpY3kgPSBQbHVnaW5J
bmZvU3RvcmU6OmRlZmF1bHRMb2FkUG9saWN5Rm9yUGx1Z2luKHBsdWdpbik7Ci0KLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSAgICBhdXRvIHBsdWdpbkluZm9ybWF0aW9uID0gY3JlYXRlUGx1Z2luSW5m
b3JtYXRpb25EaWN0aW9uYXJ5KHBsdWdpbiwgZnJhbWVVUkxTdHJpbmcsIFN0cmluZygpLCBwYWdl
VVJMU3RyaW5nLCBTdHJpbmcoKSwgU3RyaW5nKCkpOwotI2VuZGlmCi0KLSAgICBhdXRvIGZpbmRQ
bHVnaW5Db21wbGV0aW9uID0gW3JlcGx5ID0gV1RGTW92ZShyZXBseSksIG5ld01pbWVUeXBlID0g
V1RGTW92ZShuZXdNaW1lVHlwZSksIHBsdWdpbiA9IFdURk1vdmUocGx1Z2luKV0gKHVpbnQzMl90
IHBsdWdpbkxvYWRQb2xpY3ksIGNvbnN0IFN0cmluZyYgdW5hdmFpbGFiaWxpdHlEZXNjcmlwdGlv
bikgbXV0YWJsZSB7Ci0gICAgICAgIFBsdWdpblByb2Nlc3NTYW5kYm94UG9saWN5IHBsdWdpblBy
b2Nlc3NTYW5kYm94UG9saWN5ID0gUGx1Z2luUHJvY2Vzc1NhbmRib3hQb2xpY3k6Ok5vcm1hbDsK
LSAgICAgICAgc3dpdGNoIChwbHVnaW5Mb2FkUG9saWN5KSB7Ci0gICAgICAgIGNhc2UgUGx1Z2lu
TW9kdWxlTG9hZE5vcm1hbGx5OgotICAgICAgICAgICAgcGx1Z2luUHJvY2Vzc1NhbmRib3hQb2xp
Y3kgPSBQbHVnaW5Qcm9jZXNzU2FuZGJveFBvbGljeTo6Tm9ybWFsOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgUGx1Z2luTW9kdWxlTG9hZFVuc2FuZGJveGVkOgotICAgICAgICAg
ICAgcGx1Z2luUHJvY2Vzc1NhbmRib3hQb2xpY3kgPSBQbHVnaW5Qcm9jZXNzU2FuZGJveFBvbGlj
eTo6VW5zYW5kYm94ZWQ7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFBsdWdp
bk1vZHVsZUJsb2NrZWRGb3JTZWN1cml0eToKLSAgICAgICAgY2FzZSBQbHVnaW5Nb2R1bGVCbG9j
a2VkRm9yQ29tcGF0aWJpbGl0eToKLSAgICAgICAgICAgIHJlcGx5KDAsIG5ld01pbWVUeXBlLCBw
bHVnaW5Mb2FkUG9saWN5LCB1bmF2YWlsYWJpbGl0eURlc2NyaXB0aW9uLCBmYWxzZSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICByZXBseShQbHVnaW5Qcm9jZXNz
TWFuYWdlcjo6c2luZ2xldG9uKCkucGx1Z2luUHJvY2Vzc1Rva2VuKHBsdWdpbiwgcGx1Z2luUHJv
Y2Vzc1NhbmRib3hQb2xpY3kpLCBuZXdNaW1lVHlwZSwgcGx1Z2luTG9hZFBvbGljeSwgdW5hdmFp
bGFiaWxpdHlEZXNjcmlwdGlvbiwgZmFsc2UpOwotICAgIH07Ci0KLSNpZiBQTEFURk9STShDT0NP
QSkKLSAgICBtX25hdmlnYXRpb25DbGllbnQtPmRlY2lkZVBvbGljeUZvclBsdWdpbkxvYWQoKnRo
aXMsIHN0YXRpY19jYXN0PFBsdWdpbk1vZHVsZUxvYWRQb2xpY3k+KHBsdWdpbkxvYWRQb2xpY3kp
LCBwbHVnaW5JbmZvcm1hdGlvbi5nZXQoKSwgV1RGTW92ZShmaW5kUGx1Z2luQ29tcGxldGlvbikp
OwotI2Vsc2UKLSAgICBmaW5kUGx1Z2luQ29tcGxldGlvbihwbHVnaW5Mb2FkUG9saWN5LCB7IH0p
OwotI2VuZGlmCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAKIHN0YXRpYyBUcmFja2luZ1R5cGUgbWVyZ2VUcmFj
a2luZ1R5cGVzKFRyYWNraW5nVHlwZSBhLCBUcmFja2luZ1R5cGUgYikKQEAgLTYwMjcsMzkgKzU5
NjAsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV2ViSGl0
VGVzdFJlc3VsdERhdGEmJiBoaXRUZXN0UmVzdWx0RAogICAgIHNldFRvb2xUaXAoaGl0VGVzdFJl
c3VsdERhdGEudG9vbFRpcFRleHQpOwogfQogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi12b2lkIFdlYlBhZ2VQcm94eTo6dW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkKHVp
bnQzMl90IG9wYXF1ZVBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBjb25zdCBTdHJpbmcmIHBsdWdpblVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBwbHVn
aW5zcGFnZUF0dHJpYnV0ZVVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZVVSTFN0cmluZywg
Y29uc3QgU3RyaW5nJiBwYWdlVVJMU3RyaW5nKQotewotICAgIE1FU1NBR0VfQ0hFQ0tfVVJMKG1f
cHJvY2VzcywgcGx1Z2luVVJMU3RyaW5nKTsKLSAgICBNRVNTQUdFX0NIRUNLX1VSTChtX3Byb2Nl
c3MsIHBsdWdpbnNwYWdlQXR0cmlidXRlVVJMU3RyaW5nKTsKLSAgICBNRVNTQUdFX0NIRUNLX1VS
TChtX3Byb2Nlc3MsIGZyYW1lVVJMU3RyaW5nKTsKLSAgICBNRVNTQUdFX0NIRUNLX1VSTChtX3By
b2Nlc3MsIHBhZ2VVUkxTdHJpbmcpOwotCi0gICAgU3RyaW5nIG5ld01pbWVUeXBlID0gbWltZVR5
cGU7Ci0gICAgUGx1Z2luTW9kdWxlSW5mbyBwbHVnaW4gPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29s
KCkucGx1Z2luSW5mb1N0b3JlKCkuZmluZFBsdWdpbihuZXdNaW1lVHlwZSwgVVJMKFVSTCgpLCBw
bHVnaW5VUkxTdHJpbmcpKTsKLSAgICBhdXRvIHBsdWdpbkluZm9ybWF0aW9uID0gY3JlYXRlUGx1
Z2luSW5mb3JtYXRpb25EaWN0aW9uYXJ5KHBsdWdpbiwgZnJhbWVVUkxTdHJpbmcsIG1pbWVUeXBl
LCBwYWdlVVJMU3RyaW5nLCBwbHVnaW5zcGFnZUF0dHJpYnV0ZVVSTFN0cmluZywgcGx1Z2luVVJM
U3RyaW5nKTsKLQotICAgIFdLUGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24gcGx1Z2luVW5hdmFp
bGFiaWxpdHlSZWFzb24gPSBrV0tQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvblBsdWdpbk1pc3Np
bmc7Ci0gICAgc3dpdGNoIChzdGF0aWNfY2FzdDxSZW5kZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2lu
VW5hdmFpbGFiaWxpdHlSZWFzb24+KG9wYXF1ZVBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKSkg
ewotICAgIGNhc2UgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBsdWdpbk1pc3Npbmc6Ci0gICAgICAg
IHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uID0ga1dLUGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFz
b25QbHVnaW5NaXNzaW5nOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJlbmRlckVtYmVkZGVk
T2JqZWN0OjpJbnNlY3VyZVBsdWdpblZlcnNpb246Ci0gICAgICAgIHBsdWdpblVuYXZhaWxhYmls
aXR5UmVhc29uID0ga1dLUGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb25JbnNlY3VyZVBsdWdpblZl
cnNpb247Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBs
dWdpbkNyYXNoZWQ6Ci0gICAgICAgIHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uID0ga1dLUGx1
Z2luVW5hdmFpbGFiaWxpdHlSZWFzb25QbHVnaW5DcmFzaGVkOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpQbHVnaW5CbG9ja2VkQnlDb250ZW50U2VjdXJp
dHlQb2xpY3k6Ci0gICAgY2FzZSBSZW5kZXJFbWJlZGRlZE9iamVjdDo6VW5zdXBwb3J0ZWRQbHVn
aW46Ci0gICAgY2FzZSBSZW5kZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2luVG9vU21hbGw6Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIG1fdWlDbGllbnQtPnVuYXZh
aWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZCgqdGhpcywgcGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFz
b24sIHBsdWdpbkluZm9ybWF0aW9uLmdldCgpKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLQogI2lmIEVOQUJMRShXRUJHTCkKIHZvaWQgV2ViUGFnZVByb3h5Ojp3
ZWJHTFBvbGljeUZvclVSTChVUkwmJiB1cmwsIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OldlYkdM
UG9saWN5Rm9yVVJMOjpEZWxheWVkUmVwbHkmJiByZXBseSkKIHsKQEAgLTg4OTQsMjIgKzg3OTQs
NiBAQCBDb2xvciBXZWJQYWdlUHJveHk6OnBsYXRmb3JtVW5kZXJQYWdlQmFja2dyb3VuZENvbG9y
KCkgY29uc3QKIAogI2VuZGlmIC8vICFQTEFURk9STShDT0NPQSkKIAotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotdm9pZCBXZWJQYWdlUHJveHk6OmRpZEZhaWxUb0luaXRpYWxpemVQ
bHVnaW4oY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBmcmFtZVVSTFN0cmlu
ZywgY29uc3QgU3RyaW5nJiBwYWdlVVJMU3RyaW5nKQotewotICAgIG1fbmF2aWdhdGlvbkNsaWVu
dC0+ZGlkRmFpbFRvSW5pdGlhbGl6ZVBsdWdJbigqdGhpcywgY3JlYXRlUGx1Z2luSW5mb3JtYXRp
b25EaWN0aW9uYXJ5KG1pbWVUeXBlLCBmcmFtZVVSTFN0cmluZywgcGFnZVVSTFN0cmluZykuZ2V0
KCkpOwotfQotCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQmxvY2tJbnNlY3VyZVBsdWdpblZlcnNp
b24oY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBwbHVnaW5VUkxTdHJpbmcs
IGNvbnN0IFN0cmluZyYgZnJhbWVVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgcGFnZVVSTFN0cmlu
ZywgYm9vbCByZXBsYWNlbWVudE9ic2N1cmVkKQotewotICAgIFN0cmluZyBuZXdNaW1lVHlwZSA9
IG1pbWVUeXBlOwotICAgIFBsdWdpbk1vZHVsZUluZm8gcGx1Z2luID0gbV9wcm9jZXNzLT5wcm9j
ZXNzUG9vbCgpLnBsdWdpbkluZm9TdG9yZSgpLmZpbmRQbHVnaW4obmV3TWltZVR5cGUsIFVSTChV
UkwoKSwgcGx1Z2luVVJMU3RyaW5nKSk7Ci0gICAgYXV0byBwbHVnaW5JbmZvcm1hdGlvbiA9IGNy
ZWF0ZVBsdWdpbkluZm9ybWF0aW9uRGljdGlvbmFyeShwbHVnaW4sIGZyYW1lVVJMU3RyaW5nLCBt
aW1lVHlwZSwgcGFnZVVSTFN0cmluZywgU3RyaW5nKCksIFN0cmluZygpLCByZXBsYWNlbWVudE9i
c2N1cmVkKTsKLQotICAgIG1fbmF2aWdhdGlvbkNsaWVudC0+ZGlkQmxvY2tJbnNlY3VyZVBsdWdp
blZlcnNpb24oKnRoaXMsIHBsdWdpbkluZm9ybWF0aW9uLmdldCgpKTsKLX0KLSNlbmRpZiAvLyBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQogYm9vbCBXZWJQYWdlUHJveHk6OndpbGxIYW5k
bGVIb3Jpem9udGFsU2Nyb2xsRXZlbnRzKCkgY29uc3QKIHsKICAgICByZXR1cm4gIW1fY2FuU2hv
cnRDaXJjdWl0SG9yaXpvbnRhbFdoZWVsRXZlbnRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaAppbmRleCA5OTMzNmNjNzlhNTlhMGYzZDdlNDA3MTAzMDkxMTcxYWI4OTFjNmJl
Li5mN2U1ZGRhNjk1Mzg3ZDFlNzE2OWM1N2M0Y2Q1Y2E5YzlhNTlmOTBlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNDcsNyArNDcsNiBAQAogI2luY2x1ZGUgIlBE
RlBsdWdpbklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJQYWdlTG9hZFN0YXRlLmgiCiAjaW5jbHVk
ZSAiUGFzdGVib2FyZEFjY2Vzc0ludGVudC5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NBdHRy
aWJ1dGVzLmgiCiAjaW5jbHVkZSAiUG9saWN5RGVjaXNpb24uaCIKICNpbmNsdWRlICJQcm9jZXNz
VGVybWluYXRpb25SZWFzb24uaCIKICNpbmNsdWRlICJQcm9jZXNzVGhyb3R0bGVyLmgiCkBAIC0y
MTE0LDkgKzIxMTMsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0U3RhdHVzVGV4dChjb25zdCBT
dHJpbmcmKTsKICAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KFdlYkhpdFRlc3RSZXN1
bHREYXRhJiYsIHVpbnQzMl90IG1vZGlmaWVycywgVXNlckRhdGEmJik7CiAKLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICB2b2lkIHVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xp
Y2tlZCh1aW50MzJfdCBvcGFxdWVQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBwbHVnaW5VUkxTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcGx1Z2luc1BhZ2VVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVVUkxTdHJpbmcsIGNv
bnN0IFN0cmluZyYgcGFnZVVSTFN0cmluZyk7Ci0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIHZvaWQgd2ViR0xQb2xpY3lGb3JVUkwo
VVJMJiYsIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OldlYkdMUG9saWN5Rm9yVVJMRGVsYXllZFJl
cGx5JiYpOwogICAgIHZvaWQgcmVzb2x2ZVdlYkdMUG9saWN5Rm9yVVJMKFVSTCYmLCBNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpSZXNvbHZlV2ViR0xQb2xpY3lGb3JVUkxEZWxheWVkUmVwbHkmJik7
CkBAIC0yMTc1LDEwICsyMTcxLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhZ2VFeHRlbmRlZEJh
Y2tncm91bmRDb2xvckRpZENoYW5nZShjb25zdCBXZWJDb3JlOjpDb2xvciYpOwogICAgIHZvaWQg
c2FtcGxlZFBhZ2VUb3BDb2xvckNoYW5nZWQoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKICAgICBX
ZWJDb3JlOjpDb2xvciBwbGF0Zm9ybVVuZGVyUGFnZUJhY2tncm91bmRDb2xvcigpIGNvbnN0Owot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHZvaWQgZGlkRmFpbFRvSW5pdGlh
bGl6ZVBsdWdpbihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGZyYW1lVVJM
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkxTdHJpbmcpOwotICAgIHZvaWQgZGlkQmxvY2tJ
bnNlY3VyZVBsdWdpblZlcnNpb24oY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5n
JiBwbHVnaW5VUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVVUkxTdHJpbmcsIGNvbnN0IFN0
cmluZyYgcGFnZVVSTFN0cmluZywgYm9vbCByZXBsYWNlbWVudE9ic2N1cmVkKTsKLSNlbmRpZiAv
LyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICB2b2lkIHNldENhblNob3J0Q2lyY3Vp
dEhvcml6b250YWxXaGVlbEV2ZW50cyhib29sIGNhblNob3J0Q2lyY3VpdEhvcml6b250YWxXaGVl
bEV2ZW50cykgeyBtX2NhblNob3J0Q2lyY3VpdEhvcml6b250YWxXaGVlbEV2ZW50cyA9IGNhblNo
b3J0Q2lyY3VpdEhvcml6b250YWxXaGVlbEV2ZW50czsgfQogCiAgICAgZW51bSBjbGFzcyBQcm9j
ZXNzTGF1bmNoUmVhc29uIHsKQEAgLTIzMzEsNyArMjMyMyw2IEBAIHByaXZhdGU6CiAKICNpZiBQ
TEFURk9STShDT0NPQSkKICAgICB2b2lkIHBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQo
dWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIGJvb2wgcGx1Z2luSGFz
Rm9jdXNBbmRXaW5kb3dIYXNGb2N1cyk7Ci0gICAgdm9pZCBzZXRQbHVnaW5Db21wbGV4VGV4dElu
cHV0U3RhdGUodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIHVpbnQ2
NF90IGNvbXBsZXhUZXh0SW5wdXRTdGF0ZSk7CiAjZW5kaWYKIAogI2lmIFVTRShBVVRPTUFUSUNf
VEVYVF9SRVBMQUNFTUVOVCkKQEAgLTI0MDksMTAgKzI0MDAsNiBAQCBwcml2YXRlOgogICAgIFdl
YkNvcmU6OlRyYWNraW5nVHlwZSB0b3VjaEV2ZW50VHJhY2tpbmdUeXBlKGNvbnN0IFdlYlRvdWNo
RXZlbnQmKSBjb25zdDsKICNlbmRpZgogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0gICAgdm9pZCBmaW5kUGx1Z2luKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmlu
ZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHBhZ2VVUkxTdHJpbmcsIGJvb2wgYWxsb3dPbmx5QXBwbGljYXRpb25QbHVnaW5zLCBNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpGaW5kUGx1Z2luRGVsYXllZFJlcGx5JiYpOwotI2VuZGlmCi0KICNp
ZiBVU0UoUVVJQ0tfTE9PSykKICAgICB2b2lkIGRpZFN0YXJ0TG9hZEZvclF1aWNrTG9va0RvY3Vt
ZW50SW5NYWluRnJhbWUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiB1dGkp
OwogICAgIHZvaWQgZGlkRmluaXNoTG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWUo
Y29uc3QgU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGY1NzA1YTA2MTE1YTIyZThl
MzA3NmJjNWY5NWJjOWRjMWJlN2M0NmEuLjU2ZThhMWRjZTgxOGM2MzkwY2EwNjIyZTNiNDRhNWMx
ZWQxMGVmMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
bWVzc2FnZXMuaW4KQEAgLTMwLDkgKzMwLDYgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsK
ICAgICBSdW5KYXZhU2NyaXB0UHJvbXB0KFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlE
LCBzdHJ1Y3QgV2ViS2l0OjpGcmFtZUluZm9EYXRhIGZyYW1lSW5mbywgU3RyaW5nIG1lc3NhZ2Us
IFN0cmluZyBkZWZhdWx0VmFsdWUpIC0+IChTdHJpbmcgcmVzdWx0KSBTeW5jaHJvbm91cwogICAg
IE1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KHN0cnVjdCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHRE
YXRhIGhpdFRlc3RSZXN1bHREYXRhLCB1aW50MzJfdCBtb2RpZmllcnMsIFdlYktpdDo6VXNlckRh
dGEgdXNlckRhdGEpCiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBVbmF2
YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQodWludDMyX3QgcGx1Z2luVW5hdmFpbGFiaWxpdHlS
ZWFzb24sIFN0cmluZyBtaW1lVHlwZSwgU3RyaW5nIHBsdWdpblVSTFN0cmluZywgU3RyaW5nIHBs
dWdpbnNwYWdlQXR0cmlidXRlVVJMU3RyaW5nLCBTdHJpbmcgZnJhbWVVUkxTdHJpbmcsIFN0cmlu
ZyBwYWdlVVJMU3RyaW5nKQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQog
I2lmIEVOQUJMRShXRUJHTCkKICAgICBXZWJHTFBvbGljeUZvclVSTChVUkwgdXJsKSAtPiAoZW51
bTp1aW50OF90IFdlYkNvcmU6OldlYkdMTG9hZFBvbGljeSBsb2FkUG9saWN5KSBTeW5jaHJvbm91
cwogICAgIFJlc29sdmVXZWJHTFBvbGljeUZvclVSTChVUkwgdXJsKSAtPiAoZW51bTp1aW50OF90
IFdlYkNvcmU6OldlYkdMTG9hZFBvbGljeSBsb2FkUG9saWN5KSBTeW5jaHJvbm91cwpAQCAtODEs
MTAgKzc4LDYgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBUaGVtZUNvbG9yQ2hh
bmdlZChXZWJDb3JlOjpDb2xvciB0aGVtZUNvbG9yKQogICAgIFBhZ2VFeHRlbmRlZEJhY2tncm91
bmRDb2xvckRpZENoYW5nZShXZWJDb3JlOjpDb2xvciBiYWNrZ3JvdW5kQ29sb3IpCiAgICAgU2Ft
cGxlZFBhZ2VUb3BDb2xvckNoYW5nZWQoV2ViQ29yZTo6Q29sb3Igc2FtcGxlZFBhZ2VUb3BDb2xv
cikKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBEaWRGYWlsVG9Jbml0aWFs
aXplUGx1Z2luKFN0cmluZyBtaW1lVHlwZSwgU3RyaW5nIGZyYW1lVVJMU3RyaW5nLCBTdHJpbmcg
cGFnZVVSTFN0cmluZykKLSAgICBEaWRCbG9ja0luc2VjdXJlUGx1Z2luVmVyc2lvbihTdHJpbmcg
bWltZVR5cGUsIFN0cmluZyBwbHVnaW5VUkxTdHJpbmcsIFN0cmluZyBmcmFtZVVSTFN0cmluZywg
U3RyaW5nIHBhZ2VVUkxTdHJpbmcsIGJvb2wgcmVwbGFjZW1lbnRPYnNjdXJlZCkKLSNlbmRpZiAv
LyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBTZXRDYW5TaG9ydENpcmN1aXRIb3Jp
em9udGFsV2hlZWxFdmVudHMoYm9vbCBjYW5TaG9ydENpcmN1aXRIb3Jpem9udGFsV2hlZWxFdmVu
dHMpCiAKICAgICBEaWRDaGFuZ2VDb250ZW50U2l6ZShXZWJDb3JlOjpJbnRTaXplIG5ld1NpemUp
CkBAIC0zMzYsNyArMzI5LDYgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKIAogICAgICMg
UGx1Zy1pbiBjb21wbGV4IHRleHQgaW5wdXQgc3VwcG9ydCBtZXNzYWdlcwogICAgIFBsdWdpbkZv
Y3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElk
ZW50aWZpZXIsIGJvb2wgcGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1cykKLSAgICBTZXRQ
bHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1
dElkZW50aWZpZXIsIHVpbnQ2NF90IGNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkKIAogICAgICMgU3Bl
ZWNoIG1lc3NhZ2VzCiAgICAgR2V0SXNTcGVha2luZygpIC0+IChib29sIGlzU3BlYWtpbmcpIFN5
bmNocm9ub3VzCkBAIC00MzUsMTAgKzQyNyw2IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7
CiAgICAgU2hvd1BERkNvbnRleHRNZW51KHN0cnVjdCBXZWJLaXQ6OlBERkNvbnRleHRNZW51IGNv
bnRleHRNZW51LCBXZWJLaXQ6OlBERlBsdWdpbklkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKHN0
ZDo6b3B0aW9uYWw8aW50MzJfdD4gc2VsZWN0ZWRJdGVtKSBTeW5jaHJvbm91cwogI2VuZGlmCiAK
LSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBGaW5kUGx1Z2luKFN0cmluZyBt
aW1lVHlwZSwgU3RyaW5nIHVybFN0cmluZywgU3RyaW5nIGZyYW1lVVJMU3RyaW5nLCBTdHJpbmcg
cGFnZVVSTFN0cmluZywgYm9vbCBhbGxvd09ubHlBcHBsaWNhdGlvblBsdWdpbnMpIC0+ICh1aW50
NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4sIFN0cmluZyBuZXdNSU1FVHlwZSwgdWludDMyX3QgcGx1
Z2luTG9hZFBvbGljeSwgU3RyaW5nIHVuYXZhaWxhYmlsaXR5RGVzY3JpcHRpb24sIGJvb2wgaXNV
bnN1cHBvcnRlZCkgU3luY2hyb25vdXMKLSNlbmRpZgotCiAgICAgRGlkVXBkYXRlQWN0aXZpdHlT
dGF0ZSgpCiAKICNpZiBFTkFCTEUoV0VCX0NSWVBUTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQb29sLmNwcAppbmRleCBiNjVlMDg2ZDg4ZWFjZmViYjM0MzNkN2RkMTI2OGEx
OTFkY2JkZDBhLi43YTAyNjZiOGExMWE0ZTFjNjA1Y2IwMzM4NTJjN2JkMDIxNDNjNTNkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCkBAIC01MCw3ICs1MCw2
IEBACiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdv
cmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJQZXJBY3Rpdml0eVN0YXRlQ1BVVXNhZ2VTYW1w
bGVyLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCIKICNpbmNsdWRlICJTYW5k
Ym94RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNrZXIuaCIKICNpbmNsdWRlICJVSUdh
bWVwYWQuaCIKQEAgLTM4Nyw5ICszODYsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTWVt
b3J5UHJlc3N1cmVFdmVudChib29sIGlzQ3JpdGljYWwpCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2Vz
KE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVu
dChpc0NyaXRpY2FsKSk7CiAgICAgZm9yIChhdXRvIG5ldHdvcmtQcm9jZXNzIDogTmV0d29ya1By
b2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3NlcygpKQogICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+c2VuZChNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNz
dXJlRXZlbnQoaXNDcml0aWNhbCksIDApOwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQotICAgIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5zZW5kTWVtb3J5UHJlc3N1
cmVFdmVudChpc0NyaXRpY2FsKTsKLSNlbmRpZgogfQogI2VuZGlmCiAKQEAgLTEyNDgsMjMgKzEy
NDQsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpoYW5kbGVNZW1vcnlQcmVzc3VyZVdhcm5pbmco
Q3JpdGljYWwpCiAgICAgQVNTRVJUKCFtX3ByZXdhcm1lZFByb2Nlc3MpOwogfQogCi0jaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBZGRpdGlv
bmFsUGx1Z2luc0RpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSkKLXsKLSAgICBWZWN0
b3I8U3RyaW5nPiBkaXJlY3RvcmllczsKLSAgICBkaXJlY3Rvcmllcy5hcHBlbmQoZGlyZWN0b3J5
KTsKLQotICAgIG1fcGx1Z2luSW5mb1N0b3JlLnNldEFkZGl0aW9uYWxQbHVnaW5zRGlyZWN0b3Jp
ZXMoZGlyZWN0b3JpZXMpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpyZWZyZXNoUGx1Z2lu
cygpCi17Ci0gICAgbV9wbHVnaW5JbmZvU3RvcmUucmVmcmVzaCgpOwotICAgIHNlbmRUb0FsbFBy
b2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVmcmVzaFBsdWdpbnMoKSk7Ci19Ci0KLSNl
bmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQogUHJvY2Vzc0lEIFdlYlByb2Nl
c3NQb29sOjpwcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcigpCiB7CiAgICAgcmV0dXJuIG1fcHJl
d2FybWVkUHJvY2VzcyA/IG1fcHJld2FybWVkUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSA6
IDA7CkBAIC0xNjkzLDIxICsxNjcyLDE0IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEphdmFT
Y3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKGJvb2wgZmxhZykKIAogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6YWRkU3VwcG9ydGVkUGx1Z2luKFN0cmluZyYmIG1hdGNoaW5nRG9tYWluLCBT
dHJpbmcmJiBuYW1lLCBIYXNoU2V0PFN0cmluZz4mJiBtaW1lVHlwZXMsIEhhc2hTZXQ8U3RyaW5n
PiBleHRlbnNpb25zKQogewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIG1f
cGx1Z2luSW5mb1N0b3JlLmFkZFN1cHBvcnRlZFBsdWdpbihXVEZNb3ZlKG1hdGNoaW5nRG9tYWlu
KSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShtaW1lVHlwZXMpLCBXVEZNb3ZlKGV4dGVuc2lvbnMp
KTsKLSNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG1hdGNoaW5nRG9tYWluKTsKICAgICBVTlVTRURf
UEFSQU0obmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKG1pbWVUeXBlcyk7CiAgICAgVU5VU0VEX1BB
UkFNKGV4dGVuc2lvbnMpOwotI2VuZGlmCiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFy
U3VwcG9ydGVkUGx1Z2lucygpCiB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0g
ICAgbV9wbHVnaW5JbmZvU3RvcmUuY2xlYXJTdXBwb3J0ZWRQbHVnaW5zKCk7Ci0jZW5kaWYKIH0K
IAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0TWVtb3J5Q2FjaGVEaXNhYmxlZChib29sIGRpc2Fi
bGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKaW5kZXggZTQ4N2Q3
ODNhMmExZjRiZDczYmEzMTU4NzA2MzM0MmRiZWJhMzcyNS4uOGFiOTk2NTNjZjg3NjVkYmZkM2Ji
OGExMDg3OWI1NGNiNTFhMGRiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Bvb2wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5oCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAj
aW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyTWFwLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQ
cm94eS5oIgotI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgogI2luY2x1ZGUgIlByb2Nlc3NU
aHJvdHRsZXIuaCIKICNpbmNsdWRlICJWaXNpdGVkTGlua1N0b3JlLmgiCiAjaW5jbHVkZSAiV2Vi
Q29udGV4dENsaWVudC5oIgpAQCAtMjI5LDEzICsyMjgsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGhhbmRsZU1lbW9yeVByZXNzdXJlV2FybmluZyhDcml0aWNhbCk7CiAKLSNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLSAgICB2b2lkIHNldEFkZGl0aW9uYWxQbHVnaW5zRGlyZWN0b3J5
KGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgcmVmcmVzaFBsdWdpbnMoKTsKLQotICAgIFBsdWdp
bkluZm9TdG9yZSYgcGx1Z2luSW5mb1N0b3JlKCkgeyByZXR1cm4gbV9wbHVnaW5JbmZvU3RvcmU7
IH0KLSNlbmRpZgotCiAjaWYgSEFWRShDVkRJU1BMQVlMSU5LKQogICAgIHN0ZDo6b3B0aW9uYWw8
V2ViQ29yZTo6RnJhbWVzUGVyU2Vjb25kPiBub21pbmFsRnJhbWVzUGVyU2Vjb25kRm9yRGlzcGxh
eShXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCk7CiAgICAgdm9pZCBzdGFydERpc3BsYXlMaW5r
KElQQzo6Q29ubmVjdGlvbiYsIERpc3BsYXlMaW5rT2JzZXJ2ZXJJRCwgV2ViQ29yZTo6UGxhdGZv
cm1EaXNwbGF5SUQsIFdlYkNvcmU6OkZyYW1lc1BlclNlY29uZCk7CkBAIC02MzksOSArNjMxLDYg
QEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxXZWJBdXRvbWF0aW9uU2Vzc2lvbj4gbV9hdXRvbWF0
aW9uU2Vzc2lvbjsKIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIFBsdWdp
bkluZm9TdG9yZSBtX3BsdWdpbkluZm9TdG9yZTsKLSNlbmRpZgogICAgIFJlZjxWaXNpdGVkTGlu
a1N0b3JlPiBtX3Zpc2l0ZWRMaW5rU3RvcmU7CiAgICAgYm9vbCBtX3Zpc2l0ZWRMaW5rc1BvcHVs
YXRlZCB7IGZhbHNlIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJv
eHkuY3BwCmluZGV4IDVjNTk2NmVjY2I5ZThhMmNhMDJjMWEyODllMWI4MTgyMGQ3M2Q5MmMuLjk0
ODE3NjA4YzgwOGE2YmUwOWNlYzQ0ZWMwY2EwODk1NWY2MDk1MzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApAQCAtMzQsOCArMzQsNiBAQAogI2luY2x1
ZGUgIkRvd25sb2FkUHJveHlNYXAuaCIKICNpbmNsdWRlICJMb2FkUGFyYW1ldGVycy5oIgogI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKLSNpbmNsdWRl
ICJQbHVnaW5Qcm9jZXNzTWFuYWdlci5oIgogI2luY2x1ZGUgIlByb3Zpc2lvbmFsUGFnZVByb3h5
LmgiCiAjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25QZXJtaXNzaW9uUmVxdWVzdC5oIgogI2lu
Y2x1ZGUgIlNwZWVjaFJlY29nbml0aW9uUmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZU1hbmFnZXIu
aCIKQEAgLTgwMyw0MCArODAxLDYgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnVwZGF0ZUJhY2tG
b3J3YXJkSXRlbShjb25zdCBCYWNrRm9yd2FyZExpc3RJdGVtU3RhdGUmIGl0ZW0KICAgICB9CiB9
CiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLXZvaWQgV2ViUHJvY2Vzc1Byb3h5
OjpnZXRQbHVnaW5zKGJvb2wgcmVmcmVzaCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8
UGx1Z2luSW5mbz4mJiBwbHVnaW5zLCBWZWN0b3I8UGx1Z2luSW5mbz4mJiBhcHBsaWNhdGlvblBs
dWdpbnMsIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6OlN1cHBvcnRlZFBsdWdpbklkZW50
aWZpZXI+PiYmIHN1cHBvcnRlZFBsdWdpbklkZW50aWZpZXJzKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKLXsKLSAgICBpZiAocmVmcmVzaCkKLSAgICAgICAgbV9wcm9jZXNzUG9vbC0+cGx1Z2luSW5m
b1N0b3JlKCkucmVmcmVzaCgpOwotCi0gICAgYXV0byBzdXBwb3J0ZWRQbHVnaW5JZGVudGlmaWVy
cyA9IG1fcHJvY2Vzc1Bvb2wtPnBsdWdpbkluZm9TdG9yZSgpLnN1cHBvcnRlZFBsdWdpbklkZW50
aWZpZXJzKCk7Ci0KLSAgICBWZWN0b3I8UGx1Z2luSW5mbz4gcGx1Z2luczsKLSAgICBWZWN0b3I8
UGx1Z2luTW9kdWxlSW5mbz4gcGx1Z2luTW9kdWxlcyA9IG1fcHJvY2Vzc1Bvb2wtPnBsdWdpbklu
Zm9TdG9yZSgpLnBsdWdpbnMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBsdWdpbk1v
ZHVsZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHBsdWdpbnMuYXBwZW5kKHBsdWdpbk1vZHVsZXNb
aV0uaW5mbyk7Ci0KLSAgICBWZWN0b3I8UGx1Z2luSW5mbz4gYXBwbGljYXRpb25QbHVnaW5zOwot
I2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQotICAgIC8vIEFkZCBidWlsdC1pbiBQREYgbGFzdCwg
c28gdGhhdCBpdCdzIG5vdCB1c2VkIHdoZW4gYSByZWFsIHBsdWctaW4gaXMgaW5zdGFsbGVkLgot
ICAgIGlmICghbV9wcm9jZXNzUG9vbC0+b21pdFBERlN1cHBvcnQoKSkgewotICAgICAgICBwbHVn
aW5zLmFwcGVuZChQREZQbHVnaW46OnBsdWdpbkluZm8oKSk7Ci0gICAgICAgIGFwcGxpY2F0aW9u
UGx1Z2lucy5hcHBlbmQoUERGUGx1Z2luOjpwbHVnaW5JbmZvKCkpOwotICAgIH0KLSNlbmRpZgot
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocGx1Z2lucyksIFdURk1vdmUoYXBwbGljYXRp
b25QbHVnaW5zKSwgV1RGTW92ZShzdXBwb3J0ZWRQbHVnaW5JZGVudGlmaWVycykpOwotfQotI2Vu
ZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi12b2lkIFdlYlByb2Nlc3NQcm94eTo6Z2V0UGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb24odWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2VuLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1By
b3h5OjpHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5JiYgcmVwbHkpCi17
Ci0gICAgTUVTU0FHRV9DSEVDSyhIYXNoU2V0PHVpbnQ2NF90Pjo6aXNWYWxpZFZhbHVlKHBsdWdp
blByb2Nlc3NUb2tlbikpOwotICAgIGJvb2wgc3VjY2VzcyA9IFBsdWdpblByb2Nlc3NNYW5hZ2Vy
OjpzaW5nbGV0b24oKS5nZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbihwbHVnaW5Qcm9jZXNzVG9r
ZW4sIFdURk1vdmUocmVwbHkpKTsKLSAgICBNRVNTQUdFX0NIRUNLKHN1Y2Nlc3MpOwotfQotI2Vu
ZGlmCi0KIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24o
TWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpE
ZWxheWVkUmVwbHkmJiByZXBseSkKIHsKICAgICB3ZWJzaXRlRGF0YVN0b3JlKCkuZ2V0TmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uKCp0aGlzLCBXVEZNb3ZlKHJlcGx5KSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCmluZGV4IDEzOTUxN2JkYjI0YjU0YzQ4ZWRmYmJl
YjAxM2RlOTI5YTVmMTRlZjYuLjE5NDAwNTg3ODA2NmEzMDhkMzBiYTVjOTA5YjU1ODk1M2Q5YTQ2
NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCkBAIC0zMSw3
ICszMSw2IEBACiAjaW5jbHVkZSAiRGlzcGxheUxpbmtPYnNlcnZlcklELmgiCiAjaW5jbHVkZSAi
TWVzc2FnZVJlY2VpdmVyTWFwLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgot
I2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgogI2luY2x1ZGUgIlByb2Nlc3NMYXVuY2hlci5o
IgogI2luY2x1ZGUgIlByb2Nlc3NUZXJtaW5hdGlvblJlYXNvbi5oIgogI2luY2x1ZGUgIlByb2Nl
c3NUaHJvdHRsZXIuaCIKQEAgLTQ3MCwxNCArNDY5LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wg
aGFzUHJvdmlzaW9uYWxQYWdlV2l0aElEKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIpIGNvbnN0Owog
ICAgIGJvb2wgaXNBbGxvd2VkVG9VcGRhdGVCYWNrRm9yd2FyZEl0ZW0oV2ViQmFja0ZvcndhcmRM
aXN0SXRlbSYpIGNvbnN0OwotCi0gICAgLy8gUGx1Z2lucwotI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQotICAgIHZvaWQgZ2V0UGx1Z2lucyhib29sIHJlZnJlc2gsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+JiYgcGx1Z2lucywgVmVjdG9y
PFdlYkNvcmU6OlBsdWdpbkluZm8+JiYgYXBwbGljYXRpb25QbHVnaW5zLCBzdGQ6Om9wdGlvbmFs
PFZlY3RvcjxXZWJDb3JlOjpTdXBwb3J0ZWRQbHVnaW5JZGVudGlmaWVyPj4mJik+JiYpOwotI2Vu
ZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQotICAgIHZvaWQgZ2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24odWludDY0X3Qg
cGx1Z2luUHJvY2Vzc1Rva2VuLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRQbHVnaW5Q
cm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKLSNlbmRpZgogICAgIAogICAgIHZvaWQg
Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6Okdl
dE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCmluZGV4IDll
OTNkYTEzZjYzNWY1N2RhOWFlYTYyMTYzZjVlNmQyZmZiNGUwNmYuLmIyODk1Zjk0YjYyNzY1NmFk
YmRkMWZmYTFhZDZmNDNjMmRhMDIwMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4KQEAgLTMxLDExICszMSw2IEBAIG1lc3Nh
Z2VzIC0+IFdlYlByb2Nlc3NQcm94eSBMZWdhY3lSZWNlaXZlciB7CiAgICAgRW5hYmxlU3VkZGVu
VGVybWluYXRpb24oKQogICAgIERpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpCiAKLSAgICAjIFBs
dWdpbiBtZXNzYWdlcy4KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBHZXRQ
bHVnaW5zKGJvb2wgcmVmcmVzaCkgLT4gKFZlY3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZvPiBwbHVn
aW5zLCBWZWN0b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4gYXBwbGljYXRpb25QbHVnaW5zLCBzdHJ1
Y3Qgc3RkOjpvcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6U3VwcG9ydGVkUGx1Z2luSWRlbnRpZmll
cj4+IHN1cHBvcnRlZFBsdWdpbklkZW50aWZpZXJzKSBTeW5jaHJvbm91cwotICAgIEdldFBsdWdp
blByb2Nlc3NDb25uZWN0aW9uKHVpbnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbikgLT4gKElQQzo6
QXR0YWNobWVudCBjb25uZWN0aW9uSGFuZGxlLCBib29sIHN1cHBvcnRzQXN5bmNocm9ub3VzSW5p
dGlhbGl6YXRpb24pIFN5bmNocm9ub3VzCi0jZW5kaWYKICAgICBHZXROZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24oKSAtPiAoc3RydWN0IFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uSW5m
byBjb25uZWN0aW9uSW5mbykgU3luY2hyb25vdXMKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhUmVjb3JkLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhUmVjb3JkLmNwcAppbmRleCBlOTNjOGZhMjgyN2U1YWM2ODVmMWVhNTVjOTdjYTgxMDdi
M2Y3OWU4Li44NWQyMmQyZGM1MmEzM2IyYmQxMGRjNDJmZDExNzY4OGM2YjBiMzMxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVJlY29y
ZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURh
dGFSZWNvcmQuY3BwCkBAIC05MCwxNCArOTAsNiBAQCB2b2lkIFdlYnNpdGVEYXRhUmVjb3JkOjph
ZGRDb29raWVIb3N0TmFtZShjb25zdCBTdHJpbmcmIGhvc3ROYW1lKQogICAgIGNvb2tpZUhvc3RO
YW1lcy5hZGQoaG9zdE5hbWUpOwogfQogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci12b2lkIFdlYnNpdGVEYXRhUmVjb3JkOjphZGRQbHVnaW5EYXRhSG9zdE5hbWUoY29uc3QgU3Ry
aW5nJiBob3N0TmFtZSkKLXsKLSAgICB0eXBlcy5hZGQoV2Vic2l0ZURhdGFUeXBlOjpQbHVnSW5E
YXRhKTsKLSAgICBwbHVnaW5EYXRhSG9zdE5hbWVzLmFkZChob3N0TmFtZSk7Ci19Ci0jZW5kaWYK
LQogdm9pZCBXZWJzaXRlRGF0YVJlY29yZDo6YWRkSFNUU0NhY2hlSG9zdG5hbWUoY29uc3QgU3Ry
aW5nJiBob3N0TmFtZSkKIHsKICAgICB0eXBlcy5hZGQoV2Vic2l0ZURhdGFUeXBlOjpIU1RTQ2Fj
aGUpOwpAQCAtMTYwLDEyICsxNTIsNiBAQCBTdHJpbmcgV2Vic2l0ZURhdGFSZWNvcmQ6OnRvcFBy
aXZhdGVseUNvbnRyb2xsZWREb21haW4oKQogICAgIAogICAgIGlmICghb3JpZ2lucy5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBXZWJDb3JlOjp0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlu
KG9yaWdpbnMudGFrZUFueSgpLnNlY3VyaXR5T3JpZ2luKCkuZ2V0KCkuaG9zdCgpKTsKLSAgICAK
LSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBpZiAoIXBsdWdpbkRhdGFIb3N0
TmFtZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gV2ViQ29yZTo6dG9wUHJpdmF0ZWx5Q29u
dHJvbGxlZERvbWFpbihwbHVnaW5EYXRhSG9zdE5hbWVzLnRha2VBbnkoKSk7Ci0jZW5kaWYKLSAg
ICAKICNlbmRpZiAvLyBFTkFCTEUoUFVCTElDX1NVRkZJWF9MSVNUKQogICAgIAogICAgIHJldHVy
biBlbXB0eVN0cmluZygpOwpAQCAtMTc5LDkgKzE2NSw2IEBAIFdlYnNpdGVEYXRhUmVjb3JkIFdl
YnNpdGVEYXRhUmVjb3JkOjppc29sYXRlZENvcHkoKSBjb25zdAogICAgICAgICBzaXplLAogICAg
ICAgICBjcm9zc1RocmVhZENvcHkob3JpZ2lucyksCiAgICAgICAgIGNyb3NzVGhyZWFkQ29weShj
b29raWVIb3N0TmFtZXMpLAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAg
ICBjcm9zc1RocmVhZENvcHkocGx1Z2luRGF0YUhvc3ROYW1lcyksCi0jZW5kaWYKICAgICAgICAg
Y3Jvc3NUaHJlYWRDb3B5KEhTVFNDYWNoZUhvc3ROYW1lcyksCiAgICAgICAgIGNyb3NzVGhyZWFk
Q29weShhbHRlcm5hdGl2ZVNlcnZpY2VzSG9zdE5hbWVzKSwKICNpZiBFTkFCTEUoSU5URUxMSUdF
TlRfVFJBQ0tJTkdfUFJFVkVOVElPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhUmVjb3JkLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVJlY29yZC5oCmluZGV4IDlkODZlYTA1YTljODBl
MzA1MWJhMmUyNDliZDgzYmYzNmYxYzY1ODAuLjExY2E4ZTgwMDI2YmE4NTI5N2RlMzFlM2ZkMDEy
MWNiMWZjZDVlNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhUmVjb3JkLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFSZWNvcmQuaApAQCAtNDksOSArNDksNiBAQCBzdHJ1Y3QgV2Vi
c2l0ZURhdGFSZWNvcmQgewogCiAgICAgdm9pZCBhZGQoV2Vic2l0ZURhdGFUeXBlLCBjb25zdCBX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmKTsKICAgICB2b2lkIGFkZENvb2tpZUhvc3ROYW1l
KGNvbnN0IFN0cmluZyYgaG9zdE5hbWUpOwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQotICAgIHZvaWQgYWRkUGx1Z2luRGF0YUhvc3ROYW1lKGNvbnN0IFN0cmluZyYgaG9zdE5hbWUp
OwotI2VuZGlmCiAgICAgdm9pZCBhZGRIU1RTQ2FjaGVIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhv
c3ROYW1lKTsKICAgICB2b2lkIGFkZEFsdGVybmF0aXZlU2VydmljZXNIb3N0bmFtZShjb25zdCBT
dHJpbmcmIGhvc3ROYW1lKTsKICNpZiBFTkFCTEUoSU5URUxMSUdFTlRfVFJBQ0tJTkdfUFJFVkVO
VElPTikKQEAgLTc0LDkgKzcxLDYgQEAgc3RydWN0IFdlYnNpdGVEYXRhUmVjb3JkIHsKIAogICAg
IEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zOwogICAgIEhhc2hT
ZXQ8U3RyaW5nPiBjb29raWVIb3N0TmFtZXM7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi0gICAgSGFzaFNldDxTdHJpbmc+IHBsdWdpbkRhdGFIb3N0TmFtZXM7Ci0jZW5kaWYKICAg
ICBIYXNoU2V0PFN0cmluZz4gSFNUU0NhY2hlSG9zdE5hbWVzOwogICAgIEhhc2hTZXQ8U3RyaW5n
PiBhbHRlcm5hdGl2ZVNlcnZpY2VzSG9zdE5hbWVzOwogI2lmIEVOQUJMRShJTlRFTExJR0VOVF9U
UkFDS0lOR19QUkVWRU5USU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCBmZmZjYTIyNjZmZTcwMTVh
NmMwMzliMjkzN2FhNjQ4ODkxYjNjZDQ2Li45NjcwNTE1MzQ3YTU0YzA2YWQ0ZTcyNGYwZGU2Njll
MTIzMmJkMDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtNzAsMTAgKzcwLDYgQEAKICNpbmNsdWRl
IDx3dGYvc3BpL2Rhcndpbi9PU1ZhcmlhbnRTUEkuaD4KICNlbmRpZgogCi0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCIKLSNl
bmRpZgotCiAjaWYgSEFWRShTRUNfS0VZX1BST1hZKQogI2luY2x1ZGUgIlNlY0tleVByb3h5U3Rv
cmUuaCIKICNlbmRpZgpAQCAtMzkxLDIwICszODcsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmZldGNoRGF0YUFuZEFwcGx5KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywg
TwogICAgICAgICAgICAgICAgIHJlY29yZC5hZGRDb29raWVIb3N0TmFtZShob3N0TmFtZSk7CiAg
ICAgICAgICAgICB9CiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAg
ICAgIGZvciAoYXV0byYgaG9zdE5hbWUgOiB3ZWJzaXRlRGF0YS5ob3N0TmFtZXNXaXRoUGx1Z2lu
RGF0YSkgewotICAgICAgICAgICAgICAgIGF1dG8gZGlzcGxheU5hbWUgPSBXZWJzaXRlRGF0YVJl
Y29yZDo6ZGlzcGxheU5hbWVGb3JIb3N0TmFtZShob3N0TmFtZSk7Ci0gICAgICAgICAgICAgICAg
aWYgKCFkaXNwbGF5TmFtZSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgICAgICAgICBhdXRvJiByZWNvcmQgPSBtX3dlYnNpdGVEYXRhUmVjb3Jkcy5hZGQoZGlzcGxh
eU5hbWUsIFdlYnNpdGVEYXRhUmVjb3JkIHsgfSkuaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICAg
ICAgICAgIGlmICghcmVjb3JkLmRpc3BsYXlOYW1lKQotICAgICAgICAgICAgICAgICAgICByZWNv
cmQuZGlzcGxheU5hbWUgPSBXVEZNb3ZlKGRpc3BsYXlOYW1lKTsKLQotICAgICAgICAgICAgICAg
IHJlY29yZC5hZGRQbHVnaW5EYXRhSG9zdE5hbWUoaG9zdE5hbWUpOwotICAgICAgICAgICAgfQot
I2VuZGlmCi0KICAgICAgICAgICAgIGZvciAoYXV0byYgaG9zdE5hbWUgOiB3ZWJzaXRlRGF0YS5o
b3N0TmFtZXNXaXRoSFNUU0NhY2hlKSB7CiAgICAgICAgICAgICAgICAgYXV0byBkaXNwbGF5TmFt
ZSA9IFdlYnNpdGVEYXRhUmVjb3JkOjpkaXNwbGF5TmFtZUZvckhvc3ROYW1lKGhvc3ROYW1lKTsK
ICAgICAgICAgICAgICAgICBpZiAoIWRpc3BsYXlOYW1lKQpAQCAtNTQyLDU3ICs1MjQsNiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRXZWJzaXRlRGF0YShX
VEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAgIH0pOwogICAgIH0KLQotI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURh
dGFUeXBlOjpQbHVnSW5EYXRhKSAmJiBpc1BlcnNpc3RlbnQoKSkgewotICAgICAgICBjbGFzcyBT
dGF0ZSB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIHN0YXRpYyB2b2lkIGZldGNoRGF0
YShSZWY8Q2FsbGJhY2tBZ2dyZWdhdG9yPiYmIGNhbGxiYWNrQWdncmVnYXRvciwgVmVjdG9yPFBs
dWdpbk1vZHVsZUluZm8+JiYgcGx1Z2lucykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBuZXcgU3RhdGUoV1RGTW92ZShjYWxsYmFja0FnZ3JlZ2F0b3IpLCBXVEZNb3ZlKHBsdWdpbnMp
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICBwcml2YXRlOgotICAgICAgICAgICAgU3RhdGUo
UmVmPENhbGxiYWNrQWdncmVnYXRvcj4mJiBjYWxsYmFja0FnZ3JlZ2F0b3IsIFZlY3RvcjxQbHVn
aW5Nb2R1bGVJbmZvPiYmIHBsdWdpbnMpCi0gICAgICAgICAgICAgICAgOiBtX2NhbGxiYWNrQWdn
cmVnYXRvcihXVEZNb3ZlKGNhbGxiYWNrQWdncmVnYXRvcikpCi0gICAgICAgICAgICAgICAgLCBt
X3BsdWdpbnMoV1RGTW92ZShwbHVnaW5zKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBmZXRjaFdlYnNpdGVEYXRhRm9yTmV4dFBsdWdpbigpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICB+U3RhdGUoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEFTU0VSVCht
X3BsdWdpbnMuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdm9pZCBm
ZXRjaFdlYnNpdGVEYXRhRm9yTmV4dFBsdWdpbigpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1fcGx1Z2lucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgV2Vi
c2l0ZURhdGEgd2Vic2l0ZURhdGE7Ci0gICAgICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhLmhv
c3ROYW1lc1dpdGhQbHVnaW5EYXRhID0gV1RGTW92ZShtX2hvc3ROYW1lcyk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgbV9jYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFdlYnNpdGVEYXRhKFdURk1vdmUo
d2Vic2l0ZURhdGEpKTsKLQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpczsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGF1dG8gcGx1Z2luID0gbV9wbHVnaW5zLnRha2VMYXN0KCk7Ci0gICAgICAgICAgICAgICAg
UGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLmZldGNoV2Vic2l0ZURhdGEocGx1Z2lu
LCBtX2NhbGxiYWNrQWdncmVnYXRvci0+ZmV0Y2hPcHRpb25zKCksIFt0aGlzXShWZWN0b3I8U3Ry
aW5nPiBob3N0TmFtZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBob3N0TmFt
ZSA6IGhvc3ROYW1lcykKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faG9zdE5hbWVzLmFkZChX
VEZNb3ZlKGhvc3ROYW1lKSk7Ci0gICAgICAgICAgICAgICAgICAgIGZldGNoV2Vic2l0ZURhdGFG
b3JOZXh0UGx1Z2luKCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIFJlZjxDYWxsYmFja0FnZ3JlZ2F0b3I+IG1fY2FsbGJhY2tBZ2dyZWdhdG9yOwot
ICAgICAgICAgICAgVmVjdG9yPFBsdWdpbk1vZHVsZUluZm8+IG1fcGx1Z2luczsKLSAgICAgICAg
ICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2hvc3ROYW1lczsKLSAgICAgICAgfTsKLQotICAgICAgICBT
dGF0ZTo6ZmV0Y2hEYXRhKGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCksIHBsdWdpbnMoKSk7
Ci0gICAgfQotI2VuZGlmCiB9CiAKICNpZiBFTkFCTEUoSU5URUxMSUdFTlRfVFJBQ0tJTkdfUFJF
VkVOVElPTikKQEAgLTc2Myw1MSArNjk0LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1v
dmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgV2FsbFRpbWUKICAg
ICAgICAgfSk7CiAgICAgfQogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAg
aWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlBsdWdJbkRhdGEpICYmIGlz
UGVyc2lzdGVudCgpKSB7Ci0gICAgICAgIGNsYXNzIFN0YXRlIHsKLSAgICAgICAgcHVibGljOgot
ICAgICAgICAgICAgc3RhdGljIHZvaWQgZGVsZXRlRGF0YShSZWY8UmVtb3ZhbENhbGxiYWNrQWdn
cmVnYXRvcj4mJiBjYWxsYmFja0FnZ3JlZ2F0b3IsIFZlY3RvcjxQbHVnaW5Nb2R1bGVJbmZvPiYm
IHBsdWdpbnMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgbmV3IFN0YXRlKFdURk1vdmUoY2FsbGJhY2tBZ2dyZWdhdG9yKSwgV1RGTW92ZShw
bHVnaW5zKSwgbW9kaWZpZWRTaW5jZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0
ZToKLSAgICAgICAgICAgIFN0YXRlKFJlZjxSZW1vdmFsQ2FsbGJhY2tBZ2dyZWdhdG9yPiYmIGNh
bGxiYWNrQWdncmVnYXRvciwgVmVjdG9yPFBsdWdpbk1vZHVsZUluZm8+JiYgcGx1Z2lucywgV2Fs
bFRpbWUgbW9kaWZpZWRTaW5jZSkKLSAgICAgICAgICAgICAgICA6IG1fY2FsbGJhY2tBZ2dyZWdh
dG9yKFdURk1vdmUoY2FsbGJhY2tBZ2dyZWdhdG9yKSkKLSAgICAgICAgICAgICAgICAsIG1fcGx1
Z2lucyhXVEZNb3ZlKHBsdWdpbnMpKQotICAgICAgICAgICAgICAgICwgbV9tb2RpZmllZFNpbmNl
KG1vZGlmaWVkU2luY2UpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlV2Vi
c2l0ZURhdGFGb3JOZXh0UGx1Z2luKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH5T
dGF0ZSgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fcGx1Z2lucy5p
c0VtcHR5KCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2b2lkIGRlbGV0ZVdlYnNp
dGVEYXRhRm9yTmV4dFBsdWdpbigpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYg
KG1fcGx1Z2lucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXM7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBhdXRvIHBsdWdpbiA9IG1fcGx1Z2lucy50YWtlTGFzdCgpOwotICAgICAgICAg
ICAgICAgIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5kZWxldGVXZWJzaXRlRGF0
YShwbHVnaW4sIG1fbW9kaWZpZWRTaW5jZSwgW3RoaXNdIHsKLSAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlV2Vic2l0ZURhdGFGb3JOZXh0UGx1Z2luKCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJlZjxSZW1vdmFsQ2FsbGJhY2tBZ2dyZWdhdG9y
PiBtX2NhbGxiYWNrQWdncmVnYXRvcjsKLSAgICAgICAgICAgIFZlY3RvcjxQbHVnaW5Nb2R1bGVJ
bmZvPiBtX3BsdWdpbnM7Ci0gICAgICAgICAgICBXYWxsVGltZSBtX21vZGlmaWVkU2luY2U7Ci0g
ICAgICAgIH07Ci0KLSAgICAgICAgU3RhdGU6OmRlbGV0ZURhdGEoY2FsbGJhY2tBZ2dyZWdhdG9y
LmNvcHlSZWYoKSwgcGx1Z2lucygpLCBtb2RpZmllZFNpbmNlKTsKLSAgICB9Ci0jZW5kaWYKLQog
I2lmIEVOQUJMRShJTlRFTExJR0VOVF9UUkFDS0lOR19QUkVWRU5USU9OKQogICAgIGlmIChkYXRh
VHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSkg
ewogICAgICAgICBpZiAoIWRpZE5vdGlmeU5ldHdvcmtQcm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0
YSkKQEAgLTk0Miw1OSArODI4LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRh
KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29uc3QgVmUKICAgICAgICAg
ICAgIHJlbW92ZU1lZGlhS2V5cyhtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LCBvcmlnaW5zKTsK
ICAgICAgICAgfSk7CiAgICAgfQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0g
ICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlBsdWdJbkRhdGEpICYm
IGlzUGVyc2lzdGVudCgpKSB7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IGhvc3ROYW1lczsKLSAg
ICAgICAgZm9yIChjb25zdCBhdXRvJiBkYXRhUmVjb3JkIDogZGF0YVJlY29yZHMpIHsKLSAgICAg
ICAgICAgIGZvciAoY29uc3QgYXV0byYgaG9zdE5hbWUgOiBkYXRhUmVjb3JkLnBsdWdpbkRhdGFI
b3N0TmFtZXMpCi0gICAgICAgICAgICAgICAgaG9zdE5hbWVzLmFwcGVuZChob3N0TmFtZSk7Ci0g
ICAgICAgIH0KLQotCi0gICAgICAgIGNsYXNzIFN0YXRlIHsKLSAgICAgICAgcHVibGljOgotICAg
ICAgICAgICAgc3RhdGljIHZvaWQgZGVsZXRlRGF0YShSZWY8UmVtb3ZhbENhbGxiYWNrQWdncmVn
YXRvcj4mJiBjYWxsYmFja0FnZ3JlZ2F0b3IsIFZlY3RvcjxQbHVnaW5Nb2R1bGVJbmZvPiYmIHBs
dWdpbnMsIFZlY3RvcjxTdHJpbmc+JiYgaG9zdE5hbWVzKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG5ldyBTdGF0ZShXVEZNb3ZlKGNhbGxiYWNrQWdncmVnYXRvciksIFdURk1vdmUo
cGx1Z2lucyksIFdURk1vdmUoaG9zdE5hbWVzKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
cHJpdmF0ZToKLSAgICAgICAgICAgIFN0YXRlKFJlZjxSZW1vdmFsQ2FsbGJhY2tBZ2dyZWdhdG9y
PiYmIGNhbGxiYWNrQWdncmVnYXRvciwgVmVjdG9yPFBsdWdpbk1vZHVsZUluZm8+JiYgcGx1Z2lu
cywgVmVjdG9yPFN0cmluZz4mJiBob3N0TmFtZXMpCi0gICAgICAgICAgICAgICAgOiBtX2NhbGxi
YWNrQWdncmVnYXRvcihXVEZNb3ZlKGNhbGxiYWNrQWdncmVnYXRvcikpCi0gICAgICAgICAgICAg
ICAgLCBtX3BsdWdpbnMoV1RGTW92ZShwbHVnaW5zKSkKLSAgICAgICAgICAgICAgICAsIG1faG9z
dE5hbWVzKFdURk1vdmUoaG9zdE5hbWVzKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBkZWxldGVXZWJzaXRlRGF0YUZvck5leHRQbHVnaW4oKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgflN0YXRlKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
bV9wbHVnaW5zLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZvaWQg
ZGVsZXRlV2Vic2l0ZURhdGFGb3JOZXh0UGx1Z2luKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBpZiAobV9wbHVnaW5zLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgdGhpczsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIGF1dG8gcGx1Z2luID0gbV9wbHVnaW5zLnRha2VMYXN0KCk7
Ci0gICAgICAgICAgICAgICAgUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLmRlbGV0
ZVdlYnNpdGVEYXRhRm9ySG9zdE5hbWVzKHBsdWdpbiwgbV9ob3N0TmFtZXMsIFt0aGlzXSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlbGV0ZVdlYnNpdGVEYXRhRm9yTmV4dFBsdWdpbigpOwotICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBSZWY8UmVtb3Zh
bENhbGxiYWNrQWdncmVnYXRvcj4gbV9jYWxsYmFja0FnZ3JlZ2F0b3I7Ci0gICAgICAgICAgICBW
ZWN0b3I8UGx1Z2luTW9kdWxlSW5mbz4gbV9wbHVnaW5zOwotICAgICAgICAgICAgVmVjdG9yPFN0
cmluZz4gbV9ob3N0TmFtZXM7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKCFob3N0TmFtZXMu
aXNFbXB0eSgpKQotICAgICAgICAgICAgU3RhdGU6OmRlbGV0ZURhdGEoY2FsbGJhY2tBZ2dyZWdh
dG9yLmNvcHlSZWYoKSwgcGx1Z2lucygpLCBXVEZNb3ZlKGhvc3ROYW1lcykpOwotICAgIH0KLSNl
bmRpZgogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNlcnZpY2VXb3JrZXJUaW1lb3V0
Rm9yVGVzdGluZyhTZWNvbmRzIHNlY29uZHMpCkBAIC0xNjYyLDIwICsxNDk1LDYgQEAgSGFzaFNl
dDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjplbnN1cmVQcm9jZXNz
UG9vbHMoKSBjb25zdAogICAgIHJldHVybiBwcm9jZXNzUG9vbHM7CiB9CiAKLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLVZlY3RvcjxQbHVnaW5Nb2R1bGVJbmZvPiBXZWJzaXRlRGF0
YVN0b3JlOjpwbHVnaW5zKCkgY29uc3QKLXsKLSAgICBWZWN0b3I8UGx1Z2luTW9kdWxlSW5mbz4g
cGx1Z2luczsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBmb3IgKGF1dG8mIHBsdWdpbiA6IHByb2Nlc3NQb29sLT5wbHVnaW5J
bmZvU3RvcmUoKS5wbHVnaW5zKCkpCi0gICAgICAgICAgICBwbHVnaW5zLmFwcGVuZChwbHVnaW4p
OwotICAgIH0KLQotICAgIHJldHVybiBwbHVnaW5zOwotfQotI2VuZGlmCi0KIHN0YXRpYyBTdHJp
bmcgY29tcHV0ZU1lZGlhS2V5RmlsZShjb25zdCBTdHJpbmcmIG1lZGlhS2V5RGlyZWN0b3J5KQog
ewogICAgIHJldHVybiBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobWVkaWFL
ZXlEaXJlY3RvcnksICJTZWN1cmVTdG9wLnBsaXN0Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKaW5kZXggNDJlZTY3
NmNjZGE0YWIxNGI1YTQyODllZTFhNTcxZDEyZWRjNWZlYi4uMTUwNDZiZTViNWU0MGZmMWI3ODVl
YzU0Y2I0YjVlNDFjMGI1YzcwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaApAQCAtMTA1LDEwICsxMDUsNiBAQCBl
bnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NTdGF0dXMgOiB1aW50OF90OwogZW51bSBjbGFzcyBTdG9y
YWdlQWNjZXNzUHJvbXB0U3RhdHVzOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLXN0cnVjdCBQbHVnaW5Nb2R1bGVJbmZvOwotI2VuZGlmCi0KIGNsYXNzIFdlYnNp
dGVEYXRhU3RvcmUgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpX
ZWJzaXRlRGF0YVN0b3JlPiwgcHVibGljIElkZW50aWZpZWQ8V2Vic2l0ZURhdGFTdG9yZT4sIHB1
YmxpYyBDYW5NYWtlV2Vha1B0cjxXZWJzaXRlRGF0YVN0b3JlPiAgewogcHVibGljOgogICAgIHN0
YXRpYyBSZWY8V2Vic2l0ZURhdGFTdG9yZT4gZGVmYXVsdERhdGFTdG9yZSgpOwpAQCAtMzk5LDEw
ICszOTUsNiBAQCBwcml2YXRlOgogICAgIC8vIFdpbGwgY3JlYXRlIGEgdGVtcG9yYXJ5IHByb2Nl
c3MgcG9vbCBpcyBub25lIGV4aXN0cyB5ZXQuCiAgICAgSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vz
c1Bvb2w+PiBlbnN1cmVQcm9jZXNzUG9vbHMoKSBjb25zdDsKIAotI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQotICAgIFZlY3RvcjxQbHVnaW5Nb2R1bGVJbmZvPiBwbHVnaW5zKCkgY29u
c3Q7Ci0jZW5kaWYKLQogICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhPiBtZWRpYUtleU9yaWdpbnMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0
b3J5KTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRp
YUtleXNTdG9yYWdlRGlyZWN0b3J5LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlKTsKICAgICBzdGF0
aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGly
ZWN0b3J5LCBjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCmluZGV4IGI0
NjNjNTVlYjEwOWQ0YjZkMmFkZDFlODg0ODExNThhMzBjNzVmNTQuLjQ2NzlkN2IwOTgxYWE3ZDNm
Y2Q5YmRlOTBlZDZmZjJhYzIzMmVlMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1dlYlBhZ2VQcm94eUlPUy5tbQpAQCAtNzY1LDExICs3NjUsNiBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6cGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZCh1aW50NjRfdCwgYm9vbCkKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c2V0UGx1Z2luQ29t
cGxleFRleHRJbnB1dFN0YXRlKHVpbnQ2NF90LCB1aW50NjRfdCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2Vs
ZWN0b3IoY29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaAppbmRleCBkMzdjMjhmZWIxYTU3
ZWRmYjRhOGY0ZDg5ODM0MmQxOTZjN2E4ODAyLi4zOGE0MzAyYWY4OGEwMTUxMzljMjJjODg2ODFl
NzlmNDY3M2ExZDE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFn
ZUNsaWVudEltcGxNYWMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNs
aWVudEltcGxNYWMuaApAQCAtMTc0LDcgKzE3NCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhY2Nl
c3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuUmVjZWl2ZWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNl
Jikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQo
dWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIGJvb2wgcGx1Z2luSGFz
Rm9jdXNBbmRXaW5kb3dIYXNGb2N1cykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRQbHVnaW5Db21w
bGV4VGV4dElucHV0U3RhdGUodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZp
ZXIsIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIG1h
a2VGaXJzdFJlc3BvbmRlcigpIG92ZXJyaWRlOwogICAgIHZvaWQgYXNzaXN0aXZlVGVjaG5vbG9n
eU1ha2VGaXJzdFJlc3BvbmRlcigpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCmluZGV4IGFiNzM5OTQ4OTljNTQ3Y2UxODRi
OTk2MWFhMjU3Y2UxYmE5YmZjZDUuLmQ0MzNhNmRkMmIyZjg0YzRkOWI0MWI5ODdlZDMzMWNjYTUw
MTAzOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50
SW1wbE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudElt
cGxNYWMubW0KQEAgLTY1OSwxMSArNjU5LDYgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6cGx1Z2lu
Rm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZCh1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dEkKICAg
ICBtX2ltcGwtPnBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQocGx1Z2luSGFzRm9jdXNB
bmRXaW5kb3dIYXNGb2N1cywgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIpOwogfQog
Ci12b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUodWlu
dDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIFBsdWdpbkNvbXBsZXhUZXh0
SW5wdXRTdGF0ZSBwbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUpCi17Ci0gICAgbV9pbXBsLT5z
ZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGVBbmRJZGVudGlmaWVyKHBsdWdpbkNvbXBsZXhU
ZXh0SW5wdXRTdGF0ZSwgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIpOwotfQotCiB2
b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChjb25zdCBEaWN0
aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aW9uYXJ5UG9wdXBJbmZvKQogewogICAgIG1faW1wbC0+cHJl
cGFyZUZvckRpY3Rpb25hcnlMb29rdXAoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9t
YWMvV2ViUGFnZVByb3h5TWFjLm1tCmluZGV4IDljMzA4OWZmN2Q2NmM5MjEyMjAxMzI5ZmE4ZmMx
MGNmYjg1NzcwZTYuLjZkMzMzODY5ZTRlMDAxMmQyN2QzZmU4NWQ4NWU1M2E0ZWQ5Njk2MGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQpAQCAt
NDAsNyArNDAsNiBAQAogI2ltcG9ydCAiUERGQ29udGV4dE1lbnUuaCIKICNpbXBvcnQgIlBhZ2VD
bGllbnQuaCIKICNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsTWFjLmgiCi0jaW1wb3J0ICJQbHVnaW5D
b21wbGV4VGV4dElucHV0U3RhdGUuaCIKICNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZUhvc3QuaCIK
ICNpbXBvcnQgIlN0cmluZ1V0aWxpdGllcy5oIgogI2ltcG9ydCAiVGV4dENoZWNrZXIuaCIKQEAg
LTM2NiwxMyArMzY1LDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnBsdWdpbkZvY3VzT3JXaW5kb3dG
b2N1c0NoYW5nZWQodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnAKICAgICBwYWdlQ2xpZW50
KCkucGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZChwbHVnaW5Db21wbGV4VGV4dElucHV0
SWRlbnRpZmllciwgcGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1cyk7CiB9CiAKLXZvaWQg
V2ViUGFnZVByb3h5OjpzZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUodWludDY0X3QgcGx1
Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0
SW5wdXRTdGF0ZSkKLXsKLSAgICBNRVNTQUdFX0NIRUNLKGlzVmFsaWRQbHVnaW5Db21wbGV4VGV4
dElucHV0U3RhdGUocGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKSk7Ci0KLSAgICBwYWdlQ2xp
ZW50KCkuc2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKHBsdWdpbkNvbXBsZXhUZXh0SW5w
dXRJZGVudGlmaWVyLCBzdGF0aWNfY2FzdDxQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGU+KHBs
dWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkpOwotfQotCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZXhl
Y3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBNRVNT
QUdFX0NIRUNLKGlzVmFsaWRLZXlwcmVzc0NvbW1hbmROYW1lKHNlbGVjdG9yKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzODZiMDk1
ZTJkNDkxY2IzYzA2MjBiNDY5ZDg5ZTI1NTUzMmY2N2UyLi40YzkwZTcxMTQxMTk1ZDNlOTQ4ZTc4
MzZhYzJkOGMwYzUyNTgyYzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTE5LDcgKzE5LDYgQEAKIAkJCQk1NzQyQTJGQTI1MzU2MTlE
MDBCN0JBMTQgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQlCQ0E4RDQ2ODE1QkNFMEQ2
MDA5REMxRjEgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQkzNzJFQkI0OTIwMTdFNkNG
MDAwODUwNjQgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKLQkJCQlCQzgyODQ0NjE2QjRGRjY2
MDBBMjc4RkUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQlCQzgyODNENTE2QjRDMDFG
MDBBMjc4RkUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQkyRDlGQjIyQzIzNzUyNDVD
MDA0OUY5MzYgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCSk7CkBAIC0xNzgsMTYgKzE3
Nyw2IEBACiAJCTFBMDAyRDQzMTk2QjMzNzAwMEI5QUQ0NCAvKiBfV0tTZXNzaW9uU3RhdGVJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEw
MDJENDIxOTZCMzM3MDAwQjlBRDQ0IC8qIF9XS1Nlc3Npb25TdGF0ZUludGVybmFsLmggKi87IH07
CiAJCTFBMDAyRDQ0MTk2QjMzODkwMEI5QUQ0NCAvKiBfV0tTZXNzaW9uU3RhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMDAyRDNGMTk2QjMyOTQw
MEI5QUQ0NCAvKiBfV0tTZXNzaW9uU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkxQTAwMkQ0OTE5NkIzNDVEMDBCOUFENDQgLyogU2Vzc2lv
blN0YXRlQ29kaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQTAwMkQ0NzE5NkIzNDVEMDBCOUFENDQgLyogU2Vzc2lvblN0YXRlQ29kaW5nLmggKi87
IH07Ci0JCTFBMDQzOTc2MTI0RDAzNDgwMEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTA0Mzk3NDEyNEQwMzQ4
MDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzcy5oICovOyB9OwotCQkxQTA0Mzk3NzEyNEQwMzQ4MDBG
RkJGQjUgLyogUGx1Z2luUHJvY2Vzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQTA0Mzk3NTEyNEQwMzQ4MDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vz
cy5jcHAgKi87IH07Ci0JCTFBMDQzQTA5MTI0RDExQTkwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29u
bmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUEwNDNBMDcxMjREMTFBOTAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uLmggKi87IH07
Ci0JCTFBMDQzQTBBMTI0RDExQTkwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTA0M0EwODEy
NEQxMUE5MDBGRkJGQjUgLyogV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwICovOyB9OwotCQkxQTA0
M0I1RDEyNEQ1RTlEMDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMDQz
QjVCMTI0RDVFOUQwMEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2ZXIu
Y3BwICovOyB9OwotCQkxQTA0M0I1RTEyNEQ1RTlEMDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzc1By
b3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBMDQzQjVDMTI0RDVFOUQwMEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdl
cy5oICovOyB9OwotCQkxQTA0M0NFQjEyNEZFMzhGMDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzc01l
c3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTBFQzZCRDEyNEJCRDlCMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc01lc3NhZ2VS
ZWNlaXZlci5jcHAgKi87IH07Ci0JCTFBMDQzREMxMTI0RkY4NzUwMEZGQkZCNSAvKiBQbHVnaW5Q
cm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEw
NDNEQkYxMjRGRjg3NTAwRkZCRkI1IC8qIFBsdWdpblByb3h5LmggKi87IH07Ci0JCTFBMDQzRjY5
MTI1MTREOEIwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTA0M0Y2
NzEyNTE0RDhCMDBGRkJGQjUgLyogV2ViUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIu
Y3BwICovOyB9OwotCQkxQTA0M0Y2QTEyNTE0RDhCMDBGRkJGQjUgLyogV2ViUHJvY2Vzc0Nvbm5l
Y3Rpb25NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUEwNDNGNjgxMjUxNEQ4QjAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uTWVz
c2FnZXMuaCAqLzsgfTsKIAkJMUEwN0QyRjgxOTE5QjNBOTAwRUNEQTE2IC8qIF9faW5pdF9fLnB5
IGluIENvcHkgTWVzc2FnZSBHZW5lcmF0aW9uIFNjcmlwdHMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZDMDg1NkUxODdDRTBBOTAwNzgwRDg2IC8qIF9faW5pdF9fLnB5ICov
OyB9OwogCQkxQTA3RDJGOTE5MTlCM0E5MDBFQ0RBMTYgLyogbWVzc2FnZXMucHkgaW4gQ29weSBN
ZXNzYWdlIEdlbmVyYXRpb24gU2NyaXB0cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkMwODU2RjE4N0NFMEE5MDA3ODBEODYgLyogbWVzc2FnZXMucHkgKi87IH07CiAJCTFB
MDdEMkZBMTkxOUIzQTkwMEVDREExNiAvKiBtb2RlbC5weSBpbiBDb3B5IE1lc3NhZ2UgR2VuZXJh
dGlvbiBTY3JpcHRzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA4NTcw
MTg3Q0UwQTkwMDc4MEQ4NiAvKiBtb2RlbC5weSAqLzsgfTsKQEAgLTE5NSwxNiArMTg0LDkgQEAK
IAkJMUEwQzIyNUUyNDM1NzVDRDAwRUQ2MTREIC8qIFF1aWNrTG9va1RodW1ibmFpbExvYWRlci5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRUU1NzI0
MjQwOUYxNDIwMDIwMDVENiAvKiBRdWlja0xvb2tUaHVtYm5haWxMb2FkZXIubW0gKi87IH07CiAJ
CTFBMEMyMjdFMjQ1MTEzMEEwMEVENjE0RCAvKiBRdWlja0xvb2tUaHVtYm5haWxpbmdTb2Z0TGlu
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwQzIy
N0MyNDUxMTMwQTAwRUQ2MTREIC8qIFF1aWNrTG9va1RodW1ibmFpbGluZ1NvZnRMaW5rLmggKi87
IH07CiAJCTFBMEMyMjdGMjQ1MTEzMEEwMEVENjE0RCAvKiBRdWlja0xvb2tUaHVtYm5haWxpbmdT
b2Z0TGluay5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBMEMyMjdEMjQ1MTEzMEEwMEVENjE0RCAvKiBRdWlja0xvb2tUaHVtYm5haWxpbmdTb2Z0TGlu
ay5tbSAqLzsgfTsKLQkJMUEwRUM2MDMxMjRBOUYyQzAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NN
YW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTBFQzYwMTEyNEE5RjJDMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCAqLzsgfTsK
LQkJMUEwRUM2QzAxMjRCQkQ5QjAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NNZXNzYWdlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwRUM2QkUxMjRC
QkQ5QjAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NNZXNzYWdlcy5oICovOyB9OwotCQkxQTBFQzc1
RTEyNEJDN0IyMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTBFQzc1QzEyNEJDN0IyMDA3RUY0QTUg
LyogUGx1Z2luUHJvY2Vzc1Byb3h5LmggKi87IH07Ci0JCTFBMEVDOTA2MTI0QzBBQjgwMDdFRjRB
NSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwRUM5MDQxMjRDMEFCODAwN0VGNEE1IC8qIFBsdWdpblBy
b2Nlc3NDb25uZWN0aW9uLmggKi87IH07Ci0JCTFBMEVDOTBGMTI0QzBBRjUwMDdFRjRBNSAvKiBQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMEVDOTBEMTI0QzBBRjUwMDdFRjRBNSAvKiBQbHVnaW5Q
cm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuaCAqLzsgfTsKIAkJMUEwRjI5RTQxMjBCNDQ0MjAwNTNE
MUI5IC8qIFZpc2l0ZWRMaW5rU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBMEYyOUUyMTIwQjQ0NDIwMDUzRDFCOSAvKiBWaXNpdGVkTGlua1N0
b3JlLmggKi87IH07CiAJCTFBMTRGOEUyMUQ3NEM4MzQwMDZDQkVDNiAvKiBGcmFtZUluZm9EYXRh
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTE0RjhF
MDFENzRDODM0MDA2Q0JFQzYgLyogRnJhbWVJbmZvRGF0YS5oICovOyB9OwogCQkxQTE1ODQxQTE4
OTA0NEY1MDAxNzYxNkMgLyogV0tQcm9jZXNzUG9vbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUExNTg0MTgxODkwNDRGNTAwMTc2MTZDIC8qIFdLUHJv
Y2Vzc1Bvb2wuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07
Ci0JCTFBMTc5NzdGMTM3RUU4MkMwMEY5N0Q0NSAvKiBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUExNzk3
N0QxMzdFRTgyQzAwRjk3RDQ1IC8qIFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5jcHAgKi87IH07
Ci0JCTFBMTc5NzgwMTM3RUU4MkMwMEY5N0Q0NSAvKiBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMTc5NzdF
MTM3RUU4MkMwMEY5N0Q0NSAvKiBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMuaCAqLzsgfTsKIAkJ
MUExQjBFQjYxOEE0MjQ5NTAwMzg0ODFBIC8qIFdLTmF2aWdhdGlvblJlc3BvbnNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTFCMEVCNDE4QTQyNDk1
MDAzODQ4MUEgLyogV0tOYXZpZ2F0aW9uUmVzcG9uc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJCTFBMUIwRUI4MThBNDI0Q0QwMDM4NDgxQSAvKiBX
S05hdmlnYXRpb25SZXNwb25zZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTFCMEVCNzE4QTQyNENEMDAzODQ4MUEgLyogV0tOYXZpZ2F0
aW9uUmVzcG9uc2VJbnRlcm5hbC5oICovOyB9OwogCQkxQTFEQzM0MDE5NjM0NkQ3MDBGRjcwNTkg
LyogTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTYwN0YzODE5NjI3MDAyMDA5Qjg3REEgLyogTGVnYWN5U2Vz
c2lvblN0YXRlQ29kaW5nLmggKi87IH07CkBAIC0yMTIsMjQgKzE5NCwxMSBAQAogCQkxQTFFQzY5
RTE4NzIwOTIxMDBCOTUxRjAgLyogSW1wb3J0YW5jZUFzc2VydGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUExRUM2OUQxODcyMDkyMTAwQjk1MUYw
IC8qIEltcG9ydGFuY2VBc3NlcnRpb24uaCAqLzsgfTsKIAkJMUExRkVDMUMxNjI3QjQ1NzAwNzAw
RjZEIC8qIFdlYkNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUExRkVDMUExNjI3QjQ1NjAwNzAwRjZEIC8q
IFdlYkNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQkxQTFGRUMxRDE2MjdC
NDU3MDA3MDBGNkQgLyogV2ViQ29ubmVjdGlvbk1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTFGRUMxQjE2MjdCNDU3MDA3MDBGNkQgLyog
V2ViQ29ubmVjdGlvbk1lc3NhZ2VzLmggKi87IH07Ci0JCTFBMjE2MUIwMTFGMzc2NjQwMDhBRDBG
NSAvKiBOUFJ1bnRpbWVPYmplY3RNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBMjE2MUFFMTFGMzc2NjQwMDhBRDBGNSAvKiBOUFJ1bnRpbWVPYmpl
Y3RNYXAuaCAqLzsgfTsKLQkJMUEyMTYyQjExMUYzODk3MTAwOEFEMEY1IC8qIE5QUnVudGltZVV0
aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUEyMTYyQUYxMUYzODk3MTAwOEFEMEY1IC8qIE5QUnVudGltZVV0aWxpdGllcy5oICovOyB9Owog
CQkxQTI0NjRGMzE4OTFFNDUxMDAyMzRDNUIgLyogQVBJTG9hZGVyQ2xpZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTI0NjRGMjE4OTFFNDUxMDAy
MzRDNUIgLyogQVBJTG9hZGVyQ2xpZW50LmggKi87IH07CiAJCTFBMjRCNUYzMTFGNTMxRTgwMEMz
ODI2OSAvKiBNYWNoVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQTI0QjVGMTExRjUzMUU4MDBDMzgyNjkgLyogTWFjaFV0aWxpdGllcy5o
ICovOyB9OwogCQkxQTI0QkVENTEyMDg5NEQxMDBGQkIwNTkgLyogU2hhcmVkTWVtb3J5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTI0QkVEMzEyMDg5
NEQxMDBGQkIwNTkgLyogU2hhcmVkTWVtb3J5LmggKi87IH07CiAJCTFBMjU2RTM4MThBMUE3ODgw
MDZGQjkyMiAvKiBXS05hdmlnYXRpb25BY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMjU2RTM2MThBMUE3ODgwMDZGQjkyMiAvKiBXS05hdmln
YXRpb25BY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07
IH07CiAJCTFBMjU2RTNBMThBMUE3REYwMDZGQjkyMiAvKiBXS05hdmlnYXRpb25BY3Rpb25JbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEy
NTZFMzkxOEExQTdERjAwNkZCOTIyIC8qIFdLTmF2aWdhdGlvbkFjdGlvbkludGVybmFsLmggKi87
IH07Ci0JCTFBMkJCNkQwMTQxMTdCNEQwMDBGMzVENCAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlv
bk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQTJCQjZDRTE0MTE3QjREMDAwRjM1RDQgLyogUGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwotCQkxQTJCQjZEMTE0MTE3QjREMDAwRjM1
RDQgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyQkI2Q0YxNDExN0I0RDAwMEYzNUQ0IC8q
IFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCAqLzsgfTsKLQkJMUEyRDgyQTUxMjdG
NEVBQjAwMUVCOTYyIC8qIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTFGQTM1QjEyN0E0NUJGMDA1MEU3MDkg
LyogTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIuaCAqLzsgfTsKLQkJMUEyRDgyQTcxMjdGNEVBQjAw
MUVCOTYyIC8qIE5QT2JqZWN0UHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBMUZBMjgzMTI3QTEzQkMwMDUwRTcwOSAvKiBOUE9iamVjdFByb3h5
LmggKi87IH07Ci0JCTFBMkQ4MkE5MTI3RjRFQUIwMDFFQjk2MiAvKiBOUFJlbW90ZU9iamVjdE1h
cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUExRkEy
NTExMjdBMEU0RjAwNTBFNzA5IC8qIE5QUmVtb3RlT2JqZWN0TWFwLmggKi87IH07Ci0JCTFBMkQ4
NDM5MTI3RjY1RDUwMDFFQjk2MiAvKiBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlck1lc3NhZ2VSZWNl
aXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTJEODQzNzEyN0Y2NUQ1MDAxRUI5NjIgLyogTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXJNZXNzYWdl
UmVjZWl2ZXIuY3BwICovOyB9OwotCQkxQTJEODQzQTEyN0Y2NUQ1MDAxRUI5NjIgLyogTlBPYmpl
Y3RNZXNzYWdlUmVjZWl2ZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUEyRDg0MzgxMjdGNjVENTAwMUVCOTYyIC8qIE5QT2JqZWN0TWVz
c2FnZVJlY2VpdmVyTWVzc2FnZXMuaCAqLzsgfTsKLQkJMUEyRDg0OEIxMjdGNkE0OTAwMUVCOTYy
IC8qIE5QSWRlbnRpZmllckRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBMkQ4NDg5MTI3RjZBNDkwMDFFQjk2MiAvKiBOUElkZW50aWZpZXJEYXRh
LmggKi87IH07Ci0JCTFBMkQ4NEEzMTI3RjZBRDEwMDFFQjk2MiAvKiBOUFZhcmlhbnREYXRhLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTJEODRBMTEy
N0Y2QUQxMDAxRUI5NjIgLyogTlBWYXJpYW50RGF0YS5oICovOyB9OwotCQkxQTJEOTBEMjEyODFD
OTY2MDAxRUI5NjIgLyogUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyRDkwRDAxMjgxQzk2NjAw
MUVCOTYyIC8qIFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCAqLzsgfTsKLQkJMUEy
RDkxQTYxMjgxRDczOTAwMUVCOTYyIC8qIFBsdWdpbkNvbnRyb2xsZXJQcm94eU1hYy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMkQ5MUE1MTI4MUQ3
MzkwMDFFQjk2MiAvKiBQbHVnaW5Db250cm9sbGVyUHJveHlNYWMubW0gKi87IH07CiAJCTFBMkQ5
NTZGMTI4NDg1NjQwMDFFQjk2MiAvKiBBdXhpbGlhcnlQcm9jZXNzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTJEOTU2RDEyODQ4NTY0MDAxRUI5NjIg
LyogQXV4aWxpYXJ5UHJvY2Vzcy5oICovOyB9OwogCQkxQTMwMDY2RTExMTBGNEY3MDAzMTkzN0Mg
LyogUmVzcG9uc2l2ZW5lc3NUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUEzMDA2NkMxMTEwRjRGNzAwMzE5MzdDIC8qIFJlc3BvbnNpdmVuZXNz
VGltZXIuaCAqLzsgfTsKIAkJMUEzMzRERUQxNkRFOEY4ODAwNkE4RTM4IC8qIFN0b3JhZ2VBcmVh
TWFwTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBMzM0REVCMTZERThGODgwMDZBOEUzOCAvKiBTdG9yYWdlQXJlYU1hcE1l
c3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CkBAIC0yMzcsNyArMjA2LDYgQEAKIAkJMUEzQzg4ODAx
OEE1QUJBRTAwQzRDOTYyIC8qIFdLUHJlZmVyZW5jZXNJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEzQzg4N0YxOEE1QUJBRTAwQzRDOTYy
IC8qIFdLUHJlZmVyZW5jZXNJbnRlcm5hbC5oICovOyB9OwogCQkxQTNDQzE2NzE4OTA2QUNGMDAx
RTZFRDggLyogV0tXZWJWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQTNDQzE2NTE4OTA2QUNGMDAxRTZFRDggLyogV0tXZWJWaWV3LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQkxQTNDQzE2OTE4OTA3
RUIwMDAxRTZFRDggLyogV0tQcm9jZXNzUG9vbEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTNDQzE2ODE4OTA3RUIwMDAxRTZFRDggLyog
V0tQcm9jZXNzUG9vbEludGVybmFsLmggKi87IH07Ci0JCTFBM0Q2MTAyMTNBN0NDMkEwMEY5NUQ0
RSAvKiBQbHVnaW5Nb2R1bGVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQTNENjEwMDEzQTdDQzJBMDBGOTVENEUgLyogUGx1Z2luTW9kdWxlSW5m
by5oICovOyB9OwogCQkxQTNERDIwNjEyNUU1QTJGMDA0NTE1RTYgLyogQVBJQ2xpZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTNERDIwNTEyNUU1
QTJGMDA0NTE1RTYgLyogQVBJQ2xpZW50LmggKi87IH07CiAJCTFBM0U3MzYxMTFDQzI2NTkwMDdC
RDUzOSAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBM0U3MzVGMTFDQzI2NTkwMDdCRDUzOSAvKiBXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXMuaCAqLzsgfTsKIAkJMUEzRUVEMEYxNjFBNTM1NDAwQUVCNEY1IC8qIE1l
c3NhZ2VSZWNlaXZlck1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUEzRUVEMEQxNjFBNTM1MzAwQUVCNEY1IC8qIE1lc3NhZ2VSZWNlaXZlck1hcC5o
ICovOyB9OwpAQCAtMjUyLDggKzIyMCw2IEBACiAJCTFBNDgzMkQxMUE5QkRDMkYwMDhCNERGRSAv
KiBXZWJzaXRlRGF0YVJlY29yZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUE0ODMyQ0YxQTlCRDgyMTAwOEI0REZFIC8qIFdlYnNpdGVEYXRhUmVjb3Jk
LmggKi87IH07CiAJCTFBNDgzMkQ3MUE5Q0RGOTYwMDhCNERGRSAvKiBXZWJzaXRlRGF0YS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE0ODMyRDUxQTlD
REY5NjAwOEI0REZFIC8qIFdlYnNpdGVEYXRhLmggKi87IH07CiAJCTFBNEE5M0I3MUFFQjA4RUEw
MDE1MEU5QyAvKiBfV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNEE5M0I2MUFFQjA4RUEwMDE1MEU5QyAv
KiBfV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCAqLzsgfTsKLQkJMUE0QTlDNTYxMkI4MTZD
RjAwOEZFOTg0IC8qIE5ldHNjYXBlUGx1Z2luTW9kdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTRBOUM1NDEyQjgxNkNGMDA4RkU5ODQgLyogTmV0
c2NhcGVQbHVnaW5Nb2R1bGUuaCAqLzsgfTsKLQkJMUE0QTlGMzMxMkI4NDRFMjAwOEZFOTg0IC8q
IFBsdWdpblF1aXJrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUE0QTlGMzExMkI4NDRFMjAwOEZFOTg0IC8qIFBsdWdpblF1aXJrcy5oICovOyB9Owog
CQkxQTRENjY0ODE4QTJEOTFBMDBEODJFMjEgLyogQVBJVUlDbGllbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNEQ2NjQ3MThBMkQ5MUEwMEQ4MkUy
MSAvKiBBUElVSUNsaWVudC5oICovOyB9OwogCQkxQTRENjY0QzE4QTMwMzBFMDBEODJFMjEgLyog
V0tGcmFtZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBNEQ2NjRBMThBMzAzMEUwMEQ4MkUyMSAvKiBXS0ZyYW1lSW5mby5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJMUE1MkMwRjgxQTM4Q0RDNzAw
MTYxNjBBIC8qIFdlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1MkMwRjYxQTM4Q0RDNzAwMTYxNjBBIC8q
IFdlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oICovOyB9OwpAQCAtMjg0LDEwICsyNTAsNiBA
QAogCQkxQTZGQTIxRTFCRDA0MzVCMDBBQUE2NTAgLyogV0tGcmFtZUluZm9Qcml2YXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTZGQTIxRDFCRDA0
MzVCMDBBQUE2NTAgLyogV0tGcmFtZUluZm9Qcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUE2RkI3QUYxMUU2NEI2ODAwREIxMzcxIC8q
IFBsdWdpblZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBNkZCN0FEMTFFNjRCNjgwMERCMTM3MSAvKiBQbHVnaW5WaWV3LmggKi87IH07CiAJCTFB
NkZCN0QzMTFFNjUxRTIwMERCMTM3MSAvKiBQbHVnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNkZCN0QxMTFFNjUxRTIwMERCMTM3MSAvKiBQbHVn
aW4uaCAqLzsgfTsKLQkJMUE2RkJBMkExMUU2ODYyNzAwREIxMzcxIC8qIE5ldHNjYXBlQnJvd3Nl
ckZ1bmNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTZGQkEyODExRTY4NjI3MDBEQjEzNzEgLyogTmV0c2NhcGVCcm93c2VyRnVuY3MuaCAqLzsgfTsK
LQkJMUE2RkJEMjgxMUU2OUJDMjAwREIxMzcxIC8qIE5ldHNjYXBlUGx1Z2luLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTZGQkQyNjExRTY5QkMyMDBE
QjEzNzEgLyogTmV0c2NhcGVQbHVnaW4uaCAqLzsgfTsKLQkJMUE3ODY1QjkxNkNBQzcxNTAwQUNF
ODNBIC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc4NjVCNzE2
Q0FDNzE1MDBBQ0U4M0EgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyTWVzc2FnZVJl
Y2VpdmVyLmNwcCAqLzsgfTsKLQkJMUE3ODY1QkExNkNBQzcxNTAwQUNFODNBIC8qIFBsdWdpblBy
b2Nlc3NDb25uZWN0aW9uTWFuYWdlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc4NjVCODE2Q0FDNzE1MDBBQ0U4M0EgLyogUGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyTWVzc2FnZXMuaCAqLzsgfTsKIAkJMUE3QzBERjcxQjdE
MUYxMDAwQTlCODQ4IC8qIFdLV2luZG93RmVhdHVyZXNSZWYuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBN0MwREY1MUI3RDFGMTAwMEE5Qjg0OCAvKiBX
S1dpbmRvd0ZlYXR1cmVzUmVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMUE3RTM3NzUxOEU0QTMzQTAwM0QwRkZGIC8qIFdLU2NyaXB0TWVzc2Fn
ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBN0UzNzc0MThFNEEzM0EwMDNEMEZGRiAvKiBXS1NjcmlwdE1lc3NhZ2VIYW5kbGVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQkxQTdFMzc3OTE4
RTRBNEZFMDAzRDBGRkYgLyogV0tTY3JpcHRNZXNzYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTdFMzc3NzE4RTRBNEZFMDAzRDBGRkYgLyogV0tT
Y3JpcHRNZXNzYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9
OyB9OwpAQCAtMjk4LDEyICsyNjAsNiBAQAogCQkxQThCNjZCNDFCQzQ1QjAxMDA4MkRGNzcgLyog
V0tCdW5kbGVNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBOEI2NkIyMUJDNDVCMDEwMDgyREY3NyAvKiBXS0J1bmRsZU1hYy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFBOEU3RDNDMThDMTUxNDkw
MDVBNzAyQSAvKiBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQThFN0QzQTE4
QzE1MTQ5MDA1QTcwMkEgLyogVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwICovOyB9OwogCQkxQThFN0QzRDE4QzE1MTQ5MDA1QTcwMkEgLyogVmlzaXRlZExpbmtU
YWJsZUNvbnRyb2xsZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUE4RTdEM0IxOEMxNTE0OTAwNUE3MDJBIC8qIFZpc2l0ZWRMaW5rVGFi
bGVDb250cm9sbGVyTWVzc2FnZXMuaCAqLzsgfTsKLQkJMUE4RUY0Q0IxMjUyNDAzNzAwRjcwNjdG
IC8qIFBsdWdpbkNvbnRyb2xsZXJQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUE4RUY0QzkxMjUyNDAzNzAwRjcwNjdGIC8qIFBsdWdpbkNvbnRy
b2xsZXJQcm94eS5oICovOyB9OwotCQkxQThFRjRDQzEyNTI0MDM3MDBGNzA2N0YgLyogUGx1Z2lu
Q29udHJvbGxlclByb3h5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBOEVGNENBMTI1MjQwMzcwMEY3MDY3RiAvKiBQbHVnaW5Db250cm9sbGVyUHJv
eHkuY3BwICovOyB9OwotCQkxQThFRjk2RTEyNTJBRjZCMDBGNzA2N0YgLyogUGx1Z2luQ29udHJv
bGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBOEVGOTZDMTI1MkFGNkIwMEY3MDY3RiAvKiBQbHVnaW5Db250
cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwotCQkxQThFRjk2RjEyNTJBRjZC
MDBGNzA2N0YgLyogUGx1Z2luQ29udHJvbGxlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOEVGOTZEMTI1MkFGNkIwMEY3MDY3
RiAvKiBQbHVnaW5Db250cm9sbGVyUHJveHlNZXNzYWdlcy5oICovOyB9OwotCQkxQThFRkE3MDEy
NTJCODQxMDBGNzA2N0YgLyogUGx1Z2luUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE4RUZBNkUxMjUyQjg0MTAw
RjcwNjdGIC8qIFBsdWdpblByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKLQkJMUE4RUZB
NzExMjUyQjg0MTAwRjcwNjdGIC8qIFBsdWdpblByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOEVGQTZGMTI1MkI4NDEwMEY3MDY3
RiAvKiBQbHVnaW5Qcm94eU1lc3NhZ2VzLmggKi87IH07CiAJCTFBOTBDMUVFMTI2NEZENTAwMDNF
NDRENCAvKiBXZWJGaW5kT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUE5MEMxRUQxMjY0RkQ1MDAwM0U0NEQ0IC8qIFdlYkZpbmRPcHRpb25z
LmggKi87IH07CiAJCTFBOTBDMUY0MTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MEMxRjIx
MjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmggKi87IH07CiAJCTFBOTJEQzExMTJG
OEJBNDYwMDE3QUY2NSAvKiBMYXllclRyZWVDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkyREMxMDEyRjhCQTQ2MDAxN0FGNjUgLyogTGF5
ZXJUcmVlQ29udGV4dC5oICovOyB9OwpAQCAtMzEyLDE4ICsyNjgsMTUgQEAKIAkJMUE5RTMyOUIx
ODIyRTFDQzAwRjVEMDRDIC8qIFdLUmVtb3RlT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTlFMzI5OTE4MjJFMUNDMDBGNUQwNEMgLyogV0tS
ZW1vdGVPYmplY3QuaCAqLzsgfTsKIAkJMUE5RTMyOUYxODIyRkVERDAwRjVEMDRDIC8qIFdLUmVt
b3RlT2JqZWN0Q29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBOUUzMjlEMTgyMkZFREQwMEY1RDA0QyAvKiBXS1JlbW90ZU9iamVjdENvZGVyLmgg
Ki87IH07CiAJCTFBOUUzMkExMTgyMzAxODkwMEY1RDA0QyAvKiBfV0tSZW1vdGVPYmplY3RSZWdp
c3RyeUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQTlFMzJBMDE4MjMwMTg5MDBGNUQwNEMgLyogX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnlJ
bnRlcm5hbC5oICovOyB9OwotCQkxQTlGQkE4RDEzRkYwNEU2MDBERUVENjcgLyogUGx1Z2luQ29t
cGxleFRleHRJbnB1dFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQTlGQkE4QzEzRkYwNEU2MDBERUVENjcgLyogUGx1Z2luQ29tcGxleFRleHRJ
bnB1dFN0YXRlLmggKi87IH07CiAJCTFBQTEzMjEyMTkxRDU5MjQwMDlDMTQ4OSAvKiBXS05hdmln
YXRpb25SZXNwb25zZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBQTEzMjExMTkxRDU5MjQwMDlDMTQ4OSAvKiBXS05hdmlnYXRpb25SZXNw
b25zZVByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxQUEyMEQ1MTE4QUQ1MEUwMDA1RDFFRDQgLyogV0tOYXZpZ2F0aW9uRGVsZWdhdGVQ
cml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QUEyMEQ1MDE4QUQ1MEUwMDA1RDFFRDQgLyogV0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUFBMkU1
NjcxOEQ3NzUwODAwMzgxNEJEIC8qIFdLV2ViUHJvY2Vzc0J1bmRsZVBhcmFtZXRlcnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTJFNTY1MThENzc1
MDgwMDM4MTRCRCAvKiBXS1dlYlByb2Nlc3NCdW5kbGVQYXJhbWV0ZXJzLmggKi87IH07CiAJCTFB
QTNENzVDMTY1MUI0NEYwMDg3MTNEMCAvKiBSZW1vdGVMYXllclRyZWVIb3N0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUEzRDc1QTE2NTFCNDRGMDA4
NzEzRDAgLyogUmVtb3RlTGF5ZXJUcmVlSG9zdC5oICovOyB9OwogCQkxQUE0MTdDQjEyQzAwQ0NB
MDAyQkU2N0IgLyogVGV4dENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBQTQxN0M5MTJDMDBDQ0EwMDJCRTY3QiAvKiBUZXh0Q2hlY2tlci5o
ICovOyB9OwogCQkxQUE0MUFCNTEyQzAyRUM0MDAyQkU2N0IgLyogRWRpdG9yU3RhdGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTQxQUI0MTJDMDJF
QzQwMDJCRTY3QiAvKiBFZGl0b3JTdGF0ZS5oICovOyB9OwotCQkxQUE0NzkyMzEyQTU5RkQ5MDA4
MjM2QzMgLyogUGx1Z2luUHJvY2Vzc01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTQ3OTIyMTJBNTlGRDkwMDgyMzZDMyAvKiBQbHVnaW5Qcm9j
ZXNzTWFjLm1tICovOyB9OwogCQkxQUE1NkYyOTExRTkyQkM4MDA2MUI4ODIgLyogUGx1Z2luQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUFBNTZGMjgxMUU5MkJDODAwNjFCODgyIC8qIFBsdWdpbkNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJ
MUFBNTc1RkIxNDk2QjUyNjAwQTRFRTA2IC8qIEV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBNTc1RjkxNDk2QjUyNjAwQTRF
RTA2IC8qIEV2ZW50RGlzcGF0Y2hlci5oICovOyB9OwogCQkxQUE1NzYwMjE0OTZCOTc5MDBBNEVF
MDYgLyogRXZlbnREaXNwYXRjaGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTU3NUZGMTQ5NkI3QzAwMEE0RUUwNiAv
KiBFdmVudERpc3BhdGNoZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwotCQkxQUE1ODg5MjEx
RUU3MDQwMDA2MUI4ODIgLyogTmV0c2NhcGVQbHVnaW5TdHJlYW0uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTU4ODkwMTFFRTcwNDAwMDYxQjg4MiAv
KiBOZXRzY2FwZVBsdWdpblN0cmVhbS5oICovOyB9OwogCQkxQUE2NTREMTFCMTRGNzE0MDBCRjFE
M0UgLyogV0tXZWJzaXRlRGF0YVJlY29yZFByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTY1NEQwMUIxNEY3MTQwMEJGMUQzRSAvKiBXS1dl
YnNpdGVEYXRhUmVjb3JkUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTFBQTgzRjZEMUE1QjYzRkYwMDAyNkVDNiAvKiBXZWJEYXRhYmFz
ZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQUE4M0Y2QjFBNUI2M0ZGMDAwMjZFQzYgLyogV2ViRGF0YWJhc2VQcm92aWRlci5oICovOyB9
OwogCQkxQUFCMDM3QTE4NUE3QzZBMDBFREY1MDEgLyogTWVzc2FnZVNlbmRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBQjAzNzgxODVBN0M2QTAw
RURGNTAxIC8qIE1lc3NhZ2VTZW5kZXIuaCAqLzsgfTsKQEAgLTM3Niw5ICszMjksNyBAQAogCQkx
QUMxMzM4NTE4NTkwQzQ2MDBGM0VDMDUgLyogUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUFDMTMzODMxODU5MEM0NjAwRjNFQzA1IC8qIFJlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZVJl
Y2VpdmVyLmNwcCAqLzsgfTsKIAkJMUFDMTMzODYxODU5MEM0NjAwRjNFQzA1IC8qIFJlbW90ZU9i
amVjdFJlZ2lzdHJ5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBQzEzMzg0MTg1OTBDNDYwMEYzRUMwNSAvKiBSZW1vdGVPYmplY3RSZWdp
c3RyeU1lc3NhZ2VzLmggKi87IH07CiAJCTFBQzE0MTUxMThBQzQ3RUUwMDZDNjAyQyAvKiBXS1dl
YlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUFDMTQxNTAxOEFDNDdFRTAwNkM2MDJDIC8qIFdLV2ViVmlld0Nv
bmZpZ3VyYXRpb25Qcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJMUFDMjVGQzIxMkE0OEY2MDAwQkQyNjcxIC8qIFBsdWdpblByb2Nlc3NT
aGltLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFD
MjVGOEExMkE0OEUwMzAwQkQyNjcxIC8qIFBsdWdpblByb2Nlc3NTaGltLm1tICovOyB9OwogCQkx
QUM0QzgyOTE2Qjg3NkE5MDA2OURDQ0QgLyogTWVzc2FnZUZsYWdzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUM0QzgyODE2Qjg3NkE5MDA2OURDQ0Qg
LyogTWVzc2FnZUZsYWdzLmggKi87IH07Ci0JCTFBQzVGRkMyMTc0QkZEMUIwMDAxNDgzRCAvKiBQ
bHVnaW5Qcm9jZXNzQXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUFDNUZGQzExNzRCRkQxQjAwMDE0ODNEIC8qIFBsdWdpblByb2Nlc3NB
dHRyaWJ1dGVzLmggKi87IH07CiAJCTFBQzc1MzdDMTgzQTlGREIwMDcyQ0IxNSAvKiBQYWdlTG9h
ZFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QUM3NTM3QTE4M0E5RkRCMDA3MkNCMTUgLyogUGFnZUxvYWRTdGF0ZS5oICovOyB9OwogCQkxQUM3
NTM4MDE4M0JFNTBGMDA3MkNCMTUgLyogRGF0YVJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFDNzUzN0UxODNCRTUwRjAwNzJDQjE1IC8q
IERhdGFSZWZlcmVuY2UuaCAqLzsgfTsKIAkJMUFDNzVBMUIxQjMzNjgyNzAwNTY3NDVCIC8qIEhh
bmdEZXRlY3Rpb25EaXNhYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUFDNzVBMUExQjMzNjgyNzAwNTY3NDVCIC8qIEhhbmdEZXRlY3Rpb25EaXNh
Ymxlci5oICovOyB9OwpAQCAtNDA0LDEyICszNTUsOCBAQAogCQkxQUUyODY3QTFDN0Y3QkE2MDA2
OUFDNEYgLyogV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFFMjg2NzkxQzdGN0JBNjAwNjlBQzRGIC8qIFdL
V2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxQUUyODY4MDFDN0Y5MkMwMDA2OUFDNEYgLyogX1dLV2Vic2l0
ZURhdGFTaXplSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBRTI4NjdGMUM3RjkyQkYwMDY5QUM0RiAvKiBfV0tXZWJzaXRlRGF0YVNpemVJ
bnRlcm5hbC5oICovOyB9OwogCQkxQUUyODY4NDFDN0Y5Mzg2MDA2OUFDNEYgLyogQVBJV2Vic2l0
ZURhdGFSZWNvcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBRTI4NjgyMUM3RjkzODYwMDY5QUM0RiAvKiBBUElXZWJzaXRlRGF0YVJlY29yZC5oICov
OyB9OwotCQkxQUU0OTc2ODExRkY2NThFMDA0OEI0NjQgLyogTlBKU09iamVjdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFFNDk3NjYxMUZGNjU4RTAw
NDhCNDY0IC8qIE5QSlNPYmplY3QuaCAqLzsgfTsKLQkJMUFFNDk4NzgxMUZGN0ZBQTAwNDhCNDY0
IC8qIEpTTlBPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBRTQ5ODc2MTFGRjdGQUEwMDQ4QjQ2NCAvKiBKU05QT2JqZWN0LmggKi87IH07Ci0J
CTFBRTQ5QTQ5MTFGRkE4Q0UwMDQ4QjQ2NCAvKiBKU05QTWV0aG9kLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUU0OUE0NzExRkZBOENFMDA0OEI0NjQg
LyogSlNOUE1ldGhvZC5oICovOyB9OwogCQkxQUU1MkY5ODE5MjAyNjcyMDBBMUZBMzcgLyogV0tD
b250ZXh0Q29uZmlndXJhdGlvblJlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUFFNTJGOTQxOTIwMUY2QjAwQTFGQTM3IC8qIFdLQ29udGV4dENvbmZp
Z3VyYXRpb25SZWYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxQUVFNTcyNTI0MDlGMTQyMDAyMDA1RDYgLyogUXVpY2tMb29rVGh1bWJuYWlsTG9h
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUVF
NTcyMzI0MDlGMTQyMDAyMDA1RDYgLyogUXVpY2tMb29rVGh1bWJuYWlsTG9hZGVyLmggKi87IH07
Ci0JCTFBRUZDQzEyMTFEMDFGOTYwMDgyMTlEMyAvKiBQbHVnaW5JbmZvU3RvcmUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRUZDQzEwMTFEMDFGOTYw
MDgyMTlEMyAvKiBQbHVnaW5JbmZvU3RvcmUuaCAqLzsgfTsKIAkJMUFFRkQyNzkxMUQxNkM4MTAw
ODIxOUQzIC8qIEFyZ3VtZW50Q29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBRUZEMjc4MTFEMTZDODEwMDgyMTlEMyAvKiBBcmd1bWVudENvZGVy
LmggKi87IH07CiAJCTFBRUZEMkY3MTFEMTgwN0IwMDgyMTlEMyAvKiBBcmd1bWVudENvZGVycy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFFRkQyRjYx
MUQxODA3QjAwODIxOUQzIC8qIEFyZ3VtZW50Q29kZXJzLmggKi87IH07CiAJCTFBRjA1RDg3MTQ2
ODgzNDgwMDhCMUU4MSAvKiBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUYwNUQ4NTE0Njg4
MzQ4MDA4QjFFODEgLyogVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eS5oICovOyB9
OwpAQCAtNzEwLDE4ICs2NTcsNyBAQAogCQkyRDg3ODYyMDFCREI1N0Y1MDBEMDJBQkIgLyogX1dL
VXNlclN0eWxlU2hlZXRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkQ4Nzg2MUYxQkRCNTdGNTAwRDAyQUJCIC8qIF9XS1VzZXJTdHlsZVNo
ZWV0SW50ZXJuYWwuaCAqLzsgfTsKIAkJMkQ4Nzg2MjQxQkRCNThGRjAwRDAyQUJCIC8qIEFQSVVz
ZXJTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRDg3ODYyMjFCREI1OEZGMDBEMDJBQkIgLyogQVBJVXNlclN0eWxlU2hlZXQuaCAqLzsg
fTsKIAkJMkQ4OTQ5RjExODIwNDRGNjAwRTg5OEFBIC8qIFBsYXRmb3JtQ0FMYXllclJlbW90ZVRp
bGVkQmFja2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkQ4OTQ5RUYxODIwNDRGNjAwRTg5OEFBIC8qIFBsYXRmb3JtQ0FMYXllclJlbW90ZVRpbGVk
QmFja2luZy5oICovOyB9OwotCQkyRDkxMzQ0MTIxMkNGOUYwMDAxMjhBRkQgLyogSlNOUE1ldGhv
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUU0
OUE0ODExRkZBOENFMDA0OEI0NjQgLyogSlNOUE1ldGhvZC5jcHAgKi87IH07Ci0JCTJEOTEzNDQy
MjEyQ0Y5RjAwMDEyOEFGRCAvKiBKU05QT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRTQ5ODc3MTFGRjdGQUEwMDQ4QjQ2NCAvKiBKU05Q
T2JqZWN0LmNwcCAqLzsgfTsKLQkJMkQ5MTM0NDMyMTJDRjlGMDAwMTI4QUZEIC8qIE5ldHNjYXBl
QnJvd3NlckZ1bmNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBNkZCQTI5MTFFNjg2MjcwMERCMTM3MSAvKiBOZXRzY2FwZUJyb3dzZXJGdW5jcy5j
cHAgKi87IH07Ci0JCTJEOTEzNDQ0MjEyQ0Y5RjAwMDEyOEFGRCAvKiBOZXRzY2FwZVBsdWdpbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTZGQkQy
NzExRTY5QkMyMDBEQjEzNzEgLyogTmV0c2NhcGVQbHVnaW4uY3BwICovOyB9OwotCQkyRDkxMzQ0
NTIxMkNGOUYwMDAxMjhBRkQgLyogTmV0c2NhcGVQbHVnaW5TdHJlYW0uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBNTg4OTExMUVFNzA0MDAwNjFC
ODgyIC8qIE5ldHNjYXBlUGx1Z2luU3RyZWFtLmNwcCAqLzsgfTsKLQkJMkQ5MTM0NDYyMTJDRjlG
MDAwMTI4QUZEIC8qIE5QSlNPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUFFNDk3NjcxMUZGNjU4RTAwNDhCNDY0IC8qIE5QSlNPYmplY3Qu
Y3BwICovOyB9OwotCQkyRDkxMzQ0NzIxMkNGOUYwMDAxMjhBRkQgLyogTlBSdW50aW1lT2JqZWN0
TWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
MjE2MUFGMTFGMzc2NjQwMDhBRDBGNSAvKiBOUFJ1bnRpbWVPYmplY3RNYXAuY3BwICovOyB9Owot
CQkyRDkxMzQ0ODIxMkNGOUYwMDAxMjhBRkQgLyogTlBSdW50aW1lVXRpbGl0aWVzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMjE2MkFFMTFGMzg5
NzEwMDhBRDBGNSAvKiBOUFJ1bnRpbWVVdGlsaXRpZXMuY3BwICovOyB9OwogCQkyRDkxMzQ0OTIx
MkNGOUYwMDAxMjhBRkQgLyogUGx1Z2luLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBNkZCN0QwMTFFNjUxRTIwMERCMTM3MSAvKiBQbHVnaW4uY3Bw
ICovOyB9OwotCQkyRDkxMzQ0QTIxMkNGOUYwMDAxMjhBRkQgLyogUGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUEwRUM5MDUxMjRDMEFCODAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uLmNwcCAq
LzsgfTsKLQkJMkQ5MTM0NEIyMTJDRjlGMDAwMTI4QUZEIC8qIFBsdWdpblByb2Nlc3NDb25uZWN0
aW9uTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQTBFQzkwRTEyNEMwQUY1MDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25N
YW5hZ2VyLmNwcCAqLzsgfTsKLQkJMkQ5MTM0NEMyMTJDRjlGMDAwMTI4QUZEIC8qIFBsdWdpblBy
b3h5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
MDQzREMwMTI0RkY4NzUwMEZGQkZCNSAvKiBQbHVnaW5Qcm94eS5jcHAgKi87IH07CiAJCTJEOTEz
NDREMjEyQ0Y5RjAwMDEyOEFGRCAvKiBQbHVnaW5WaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNkZCN0FDMTFFNjRCNjgwMERCMTM3MSAvKiBQ
bHVnaW5WaWV3LmNwcCAqLzsgfTsKIAkJMkQ5MTM0NEUyMTJDRjlGMDAwMTI4QUZEIC8qIFdlYlBs
dWdpbkluZm9Qcm92aWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQTA4RkVFMjFENTkzQ0YxMDA4QkE4Q0IgLyogV2ViUGx1Z2luSW5mb1Byb3Zp
ZGVyLmNwcCAqLzsgfTsKIAkJMkQ5MkE3NzkyMTJCNkE2MTAwRjQ5M0ZEIC8qIExvZ2dpbmcuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBN0YyRjQx
MjVCRjhENDAwOEFFQjFEIC8qIExvZ2dpbmcuY3BwICovOyB9OwpAQCAtNzQ2LDE0ICs2ODIsNiBA
QAogCQkyRDkyQTc4RDIxMkI2QUIxMDBGNDkzRkQgLyogV2ViUGxhdGZvcm1Ub3VjaFBvaW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwMzM3RERD
MTI3QTUyMUMwMDhGRjRGNCAvKiBXZWJQbGF0Zm9ybVRvdWNoUG9pbnQuY3BwICovOyB9OwogCQky
RDkyQTc4RTIxMkI2QUIxMDBGNDkzRkQgLyogV2ViVG91Y2hFdmVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMDMzN0RENzEyN0E1MUI2MDA4RkY0
RjQgLyogV2ViVG91Y2hFdmVudC5jcHAgKi87IH07CiAJCTJEOTJBNzhGMjEyQjZBQjEwMEY0OTNG
RCAvKiBXZWJXaGVlbEV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEMwMzM3REQwMTI3QTI5ODAwMDhGRjRGNCAvKiBXZWJXaGVlbEV2ZW50LmNw
cCAqLzsgfTsKLQkJMkQ5MkE3OTAyMTJCNkFENDAwRjQ5M0ZEIC8qIE5QSWRlbnRpZmllckRhdGEu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyRDg0
OEExMjdGNkE0OTAwMUVCOTYyIC8qIE5QSWRlbnRpZmllckRhdGEuY3BwICovOyB9OwotCQkyRDky
QTc5MTIxMkI2QUQ0MDBGNDkzRkQgLyogTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUExRkEzNUMxMjdBNDVC
RjAwNTBFNzA5IC8qIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKLQkJMkQ5MkE3
OTIyMTJCNkFENDAwRjQ5M0ZEIC8qIE5QT2JqZWN0UHJveHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUExRkEyODQxMjdBMTNCQzAwNTBFNzA5IC8q
IE5QT2JqZWN0UHJveHkuY3BwICovOyB9OwotCQkyRDkyQTc5MzIxMkI2QUQ0MDBGNDkzRkQgLyog
TlBSZW1vdGVPYmplY3RNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUExRkEyNTIxMjdBMEU0RjAwNTBFNzA5IC8qIE5QUmVtb3RlT2JqZWN0TWFw
LmNwcCAqLzsgfTsKLQkJMkQ5MkE3OTQyMTJCNkFENDAwRjQ5M0ZEIC8qIE5QVmFyaWFudERhdGEu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyRDg0
QTIxMjdGNkFEMTAwMUVCOTYyIC8qIE5QVmFyaWFudERhdGEuY3BwICovOyB9OwotCQkyRDkyQTc5
NTIxMkI2QUQ0MDBGNDkzRkQgLyogUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTJEOTBEMTEy
ODFDOTY2MDAxRUI5NjIgLyogUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgKi87
IH07Ci0JCTJEOTJBNzk2MjEyQjZBREEwMEY0OTNGRCAvKiBOZXRzY2FwZVBsdWdpbk1vZHVsZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTRBOUM1
MzEyQjgxNkNGMDA4RkU5ODQgLyogTmV0c2NhcGVQbHVnaW5Nb2R1bGUuY3BwICovOyB9OwotCQky
RDkyQTc5NzIxMkI2QURBMDBGNDkzRkQgLyogUGx1Z2luSW5mb3JtYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzRjhDOEUxNzNBRjUyRDAw
N0I3RjM5IC8qIFBsdWdpbkluZm9ybWF0aW9uLmNwcCAqLzsgfTsKIAkJMkQ5MzExNjkyMTJGNjFC
MjAwMDQ0QkZFIC8qIFdLQ29udGVudFZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEUzRDE4QkJFMDQ0MDAwRkNGQzkgLyogV0tDb250ZW50
Vmlldy5tbSAqLzsgfTsKIAkJMkQ5MzExNkEyMTJGNjFCNTAwMDQ0QkZFIC8qIFdLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQ0I0RTZCMThCQkYyNkEwMDBGQ0ZDOSAvKiBXS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24ubW0gKi87IH07CiAJCTJEOUVBMzBEMUE5NkNCNTkwMDJEMjgwNyAvKiBXS1BhZ2VJbmplY3Rl
ZEJ1bmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkQ5RUEzMEMxQTk2Q0I1OTAwMkQyODA3IC8qIFdLUGFnZUluamVjdGVkQnVuZGxlQ2xp
ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTg1Myw3ICs3ODEsNiBAQAogCQkzNzBGMzRBNzE4MjlDRkYzMDA5MDI3QzggLyogV0tCcm93c2lu
Z0NvbnRleHRIaXN0b3J5RGVsZWdhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDM3MEYzNEE2MTgyOUNGRjMwMDkwMjdDOCAvKiBXS0Jyb3dzaW5nQ29u
dGV4dEhpc3RvcnlEZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTM3MTgzRDU3MTgyRjRFNzAwMDgwQzgxMSAvKiBXS05TVVJMRXh0cmFz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzE4M0Q1
NTE4MkY0RTcwMDA4MEM4MTEgLyogV0tOU1VSTEV4dHJhcy5oICovOyB9OwogCQkzNzFBMTk0MjE4
MjREMjkzMDBGMzJBNUUgLyogV0tOU0RpY3Rpb25hcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MUExOTQwMTgyNEQyOTMwMEYzMkE1RSAvKiBXS05T
RGljdGlvbmFyeS5oICovOyB9OwotCQkzNzFFNjk1OTFBRUQ3QTBGMDA0OTVFNDggLyogRm91bmRh
dGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQzNERTQ2ODE1QTkxNzYzMDA4RDI2RkMgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsg
Ki87IH07CiAJCTM3MkNBRjBCMTgzM0ZEOTEwMDQwQUMyNyAvKiBXS05TRXJyb3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MkNBRjA5MTgzM0ZEOTEw
MDQwQUMyNyAvKiBXS05TRXJyb3IuaCAqLzsgfTsKIAkJMzcyRUJCM0UyMDE3RTY0MzAwMDg1MDY0
IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkMzREU0NjgxNUE5MTc2MzAwOEQyNkZDIC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrICovOyB9OwogCQkzNzJFQkIzRjIwMTdFNjQzMDAwODUwNjQgLyogV2ViS2l0LmZy
YW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDhEQzJFRjVCMDQ4NkE2OTQwMDk4QjIxNiAvKiBXZWJLaXQuZnJhbWV3b3JrICovOyB9OwpAQCAt
ODk1LDcgKzgyMiw2IEBACiAJCTM3QTY0RTU3MThGMzhGNDYwMEVCMzBGMSAvKiBfV0tGb3JtSW5w
dXRTZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzN0E2NEU1NjE4RjM4RjQ2MDBFQjMwRjEgLyogX1dLRm9ybUlucHV0U2Vzc2lvbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTM3QTcwOUE3MUUz
RUEwRkQwMENBNTk2OSAvKiBXS0RhdGFEZXRlY3RvclR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0E3MDlBNjFFM0VBMEZEMDBDQTU5NjkgLyog
V0tEYXRhRGV0ZWN0b3JUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1Ymxp
YywgKTsgfTsgfTsKIAkJMzdBNzA5QTkxRTNFQTQwQzAwQ0E1OTY5IC8qIFdLRGF0YURldGVjdG9y
VHlwZXNJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzdBNzA5QTgxRTNFQTQwQzAwQ0E1OTY5IC8qIFdLRGF0YURldGVjdG9yVHlwZXNJbnRl
cm5hbC5oICovOyB9OwotCQkzN0IwRDE4NDFDMUU0OTlBMDBENDBENjQgLyogUGx1Z2luUHJvY2Vz
c1NoaW0uZHlsaWIgaW4gQ29weSBTaGltcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQUMyNUZCMDEyQTQ4RUE3MDBCRDI2NzEgLyogUGx1Z2luUHJvY2Vzc1NoaW0uZHlsaWIg
Ki87IH07CiAJCTM3QjUwNDUyMTlFRUYzMTMwMENFMkNGOCAvKiBXS0Vycm9yUHJpdmF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdCNTA0NTExOUVF
RjMxMzAwQ0UyQ0Y4IC8qIFdLRXJyb3JQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzdCRUM0REQxOTQ4RkM2QTAwOEI0Mjg2IC8qIFdl
YkNvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUFBMUM3OUExMDBFN0ZDNTAwNzhERUJDIC8qIFdlYkNvcmUuZnJhbWV3b3JrICov
OyB9OwogCQkzN0JFQzRFMTE5NDkxNDg2MDA4QjQyODYgLyogQ29tcGxldGlvbkhhbmRsZXJDYWxs
Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzdCRUM0REYxOTQ5MTQ4NjAwOEI0Mjg2IC8qIENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXIu
aCAqLzsgfTsKQEAgLTkyMCwxMiArODQ2LDYgQEAKIAkJM0ZGRERCOTYxRjU3N0Y0ODAwNTBFNTkz
IC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGOTE1QzBGMUY1NjRERUQwMDE4M0NFOSAvKiBX
S0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLmggKi87IH07CiAJCTQxMDQ4MkNFMURERDMy
NEYwMEYwMDZEMCAvKiBSVENOZXR3b3JrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MTA0ODJDQzFEREQyRkI1MDBGMDA2RDAgLyogUlRDTmV0d29yay5o
ICovOyB9OwogCQk0MTBGMEQ0QzI3MDFFRkY5MDBGOTZERkMgLyogR1BVUHJvY2Vzc0Nvbm5lY3Rp
b25Jbml0aWFsaXphdGlvblBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQxMEYwRDRCMjcwMUVGRUEwMEY5NkRGQyAvKiBHUFVQcm9jZXNz
Q29ubmVjdGlvbkluaXRpYWxpemF0aW9uUGFyYW1ldGVycy5oICovOyB9OwotCQk0MTEyRUREQjIw
RTQwN0E1MDBCRUE5MkEgLyogY29tLmFwcGxlLkJvY29tU3VibWl0Q3RybC5zYiBpbiBDb3B5IFBs
dWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MTEyRUREOTIwRTQwNzc1MDBCRUE5MkEgLyogY29tLmFwcGxlLkJvY29tU3VibWl0Q3RybC5z
YiAqLzsgfTsKLQkJNDExMkVEREMyMEU0MDdBNTAwQkVBOTJBIC8qIGNvbS5hcHBsZS5OUFNhZmVJ
bnB1dC5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MTEyRUREODIwRTQwNzc1MDBCRUE5MkEgLyogY29tLmFwcGxl
Lk5QU2FmZUlucHV0LnNiICovOyB9OwotCQk0MTEyRURERDIwRTQwN0E1MDBCRUE5MkEgLyogY29t
LmFwcGxlLk5QU2FmZVN1Ym1pdC5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTEyRURENzIwRTQwNzc1MDBCRUE5
MkEgLyogY29tLmFwcGxlLk5QU2FmZVN1Ym1pdC5zYiAqLzsgfTsKLQkJNDExMkVEREUyMEU0MDdB
NTAwQkVBOTJBIC8qIGNvbS5jZmNhLm5wU2VjRWRpdEN0bC5NQUMuQk9DLnBsdWdpbi5zYiBpbiBD
b3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0MTEyRUREMzIwRTQwNzc0MDBCRUE5MkEgLyogY29tLmNmY2EubnBTZWNFZGl0Q3Rs
Lk1BQy5CT0MucGx1Z2luLnNiICovOyB9OwotCQk0MTEyRURERjIwRTQwN0E1MDBCRUE5MkEgLyog
Y29tLmNtYmNoaW5hLkNNQlNlY3VyaXR5LnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2Zp
bGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMTJFREQ1MjBFNDA3NzQw
MEJFQTkyQSAvKiBjb20uY21iY2hpbmEuQ01CU2VjdXJpdHkuc2IgKi87IH07Ci0JCTQxMTJFREUw
MjBFNDA3QTUwMEJFQTkyQSAvKiBjb20uZnRzYWZlLk5QQVBJLUNvcmUtU2FmZS1Tb2Z0S2V5YmFv
cmQucGx1Z2luLnJmYzEwMzRpZGVudGlmaWVyLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFBy
b2ZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMTJFREQyMjBFNDA3
NzMwMEJFQTkyQSAvKiBjb20uZnRzYWZlLk5QQVBJLUNvcmUtU2FmZS1Tb2Z0S2V5YmFvcmQucGx1
Z2luLnJmYzEwMzRpZGVudGlmaWVyLnNiICovOyB9OwogCQk0MTFBOEREQjIwREREMUFDMDA2MEQz
NEYgLyogV0tNb2NrTWVkaWFEZXZpY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxMUE4REQ5MjBEREI2MDUwMDYwRDM0RiAvKiBXS01vY2tNZWRpYURl
dmljZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTQxMUIyMjY0MUUzNzFCQTYwMDRGNzM2MyAvKiBMaWJXZWJSVENOZXR3b3JrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTFCMjI2MjFFMzcxMjQ0MDA0
RjczNjMgLyogTGliV2ViUlRDTmV0d29yay5oICovOyB9OwogCQk0MTI4N0Q0RTIyNUQxRUNCMDA5
QTNFMjYgLyogV2ViU29ja2V0VGFza0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDEyODdENEIyMjVDMDVDNDAwOUEzRTI2IC8qIFdlYlNvY2tl
dFRhc2tDb2NvYS5tbSAqLzsgfTsKQEAgLTkzNCwxMSArODU0LDYgQEAKIAkJNDEzMDc1QjAxREU4
NUY1ODAwMzlFQzY5IC8qIFdlYlJUQ01vbml0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMzA3NUEzMURFODVFRTcwMDM5RUM2OSAvKiBXZWJSVENN
b25pdG9yLmggKi87IH07CiAJCTQxMzA3NUIyMURFODVGNTgwMDM5RUM2OSAvKiBMaWJXZWJSVENT
b2NrZXRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MTMwNzVBNjFERTg1RUU3MDAzOUVDNjkgLyogTGliV2ViUlRDU29ja2V0RmFjdG9yeS5o
ICovOyB9OwogCQk0MTMwNzVCNDFERTg1RjU4MDAzOUVDNjkgLyogTGliV2ViUlRDUHJvdmlkZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMzA3NUE4
MURFODVFRTcwMDM5RUM2OSAvKiBMaWJXZWJSVENQcm92aWRlci5oICovOyB9OwotCQk0MTNDQ0Q1
MDIwREVCQzc0MDA2NUEyMUEgLyogY29tLmdvb2dsZS5nb29nbGV0YWxrYnJvd3NlcnBsdWdpbi5z
YiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0MTNDQ0Q0RjIwREVCQzJGMDA2NUEyMUEgLyogY29tLmdvb2dsZS5nb29n
bGV0YWxrYnJvd3NlcnBsdWdpbi5zYiAqLzsgfTsKLQkJNDE0Mzc1MUMyMEVBRUEyRDAwRkFEMDZD
IC8qIGNuLm1pY3JvZG9uZS5jbWIuc2FmYXJpLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFBy
b2ZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNDM3NTFCMjBFQUVB
MUUwMEZBRDA2QyAvKiBjbi5taWNyb2RvbmUuY21iLnNhZmFyaS5zYiAqLzsgfTsKLQkJNDE0REQz
NzkyMEJGNDNGNTAwNjk1OUZCIC8qIGNvbS5jaXNjby53ZWJleC5wbHVnaW4uZ3BjNjQuc2IgaW4g
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNEREMzc4MjBC
RjQzRUEwMDY5NTlGQiAvKiBjb20uY2lzY28ud2ViZXgucGx1Z2luLmdwYzY0LnNiICovOyB9Owot
CQk0MTRERDM3QTIwQkY0OUE1MDA2OTU5RkIgLyogY29tLmNpc2NvLndlYmV4LnBsdWdpbi5ncGM2
NC5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MTRERDM3ODIwQkY0M0VBMDA2OTU5RkIgLyogY29tLmNpc2NvLndl
YmV4LnBsdWdpbi5ncGM2NC5zYiAqLzsgfTsKLQkJNDE1N0U0QjAyMEUyRUNERjAwQTZDMEQ3IC8q
IGNvbS5nb29nbGUubzFkYnJvd3NlcnBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQ
cm9maWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTU3RTRBRjIwRTJF
Qzk4MDBBNkMwRDcgLyogY29tLmdvb2dsZS5vMWRicm93c2VycGx1Z2luLnNiICovOyB9OwogCQk0
MTc2OTAxNDIyRkRENDFCMDBCMTU3NkQgLyogTmV0d29ya1JUQ1Byb3ZpZGVyLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE3NjkwMTMyMkZERDQxQjAw
QjE1NzZEIC8qIE5ldHdvcmtSVENQcm92aWRlci5tbSAqLzsgfTsKIAkJNDE3OTE1QUYyMjU2QkI3
NTAwRDZGOTdFIC8qIFdlYlNvY2tldENoYW5uZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNzkxNUFEMjI1NkJCNzQwMEQ2Rjk3RSAvKiBXZWJTb2Nr
ZXRDaGFubmVsLmggKi87IH07CiAJCTQxNzkxNUIxMjI1NkMwRDYwMEQ2Rjk3RSAvKiBXZWJTb2Nr
ZXRDaGFubmVsTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDE3OTE1QjAyMjU2QzBENjAwRDZGOTdFIC8qIFdlYlNvY2tldENoYW5uZWxNYW5h
Z2VyLmggKi87IH07CkBAIC0xMjk5LDcgKzEyMTQsNiBAQAogCQk1QzlBOTExMTIyOEY2OUNDMDA1
QzVCMTcgLyogWFBDU2VydmljZU1haW4ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzgyODM5NjE2QjQ3RUM0MDBBMjc4RkUgLyogWFBDU2VydmljZU1h
aW4ubW0gKi87IH07CiAJCTVDOUE5MTEyMjI4RjY5Q0MwMDVDNUIxNyAvKiBYUENTZXJ2aWNlTWFp
bi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODI4
Mzk2MTZCNDdFQzQwMEEyNzhGRSAvKiBYUENTZXJ2aWNlTWFpbi5tbSAqLzsgfTsKIAkJNUM5QTkx
MTMyMjhGNjlDRDAwNUM1QjE3IC8qIFhQQ1NlcnZpY2VNYWluLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4MjgzOTYxNkI0N0VDNDAwQTI3OEZFIC8q
IFhQQ1NlcnZpY2VNYWluLm1tICovOyB9OwotCQk1QzlBOTExNDIyOEY2OUNFMDA1QzVCMTcgLyog
WFBDU2VydmljZU1haW4ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQzgyODM5NjE2QjQ3RUM0MDBBMjc4RkUgLyogWFBDU2VydmljZU1haW4ubW0gKi87
IH07CiAJCTVDOUU1NjgzMURGN0YxQjMwMEM5RUUzMyAvKiBXS1dlYnNpdGVQb2xpY2llcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RTU2ODExREY3
RjA1NTAwQzlFRTMzIC8qIFdLV2Vic2l0ZVBvbGljaWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUNBMjZEODEyMTdBQkQ1QjAwRjk3QTM1IC8q
IFdLU2FmZUJyb3dzaW5nV2FybmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUNBMjZEODAyMTdBQkJCNjAwRjk3QTM1IC8qIFdLU2FmZUJyb3dzaW5n
V2FybmluZy5oICovOyB9OwogCQk1Q0EyNkQ4MzIxN0FEMUI4MDBGOTdBMzUgLyogV0tTYWZlQnJv
d3NpbmdXYXJuaW5nLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUNBMjZEN0YyMTdBQkJCNjAwRjk3QTM1IC8qIFdLU2FmZUJyb3dzaW5nV2FybmluZy5t
bSAqLzsgfTsKQEAgLTEzMjgsNyArMTI0Miw2IEBACiAJCTVDRTkxMjEwMjI5M0MyNzcwMDVCRUM3
OCAvKiBBdXhpbGlhcnlQcm9jZXNzTWFpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0U5MTIwRjIyOTNDMjVGMDA1QkVDNzggLyogQXV4aWxpYXJ5
UHJvY2Vzc01haW4uY3BwICovOyB9OwogCQk1Q0U5MTIxMTIyOTNDMjc4MDA1QkVDNzggLyogQXV4
aWxpYXJ5UHJvY2Vzc01haW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUNFOTEyMEYyMjkzQzI1RjAwNUJFQzc4IC8qIEF1eGlsaWFyeVByb2Nlc3NN
YWluLmNwcCAqLzsgfTsKIAkJNUNFOTEyMTIyMjkzQzI3ODAwNUJFQzc4IC8qIEF1eGlsaWFyeVBy
b2Nlc3NNYWluLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDVDRTkxMjBGMjI5M0MyNUYwMDVCRUM3OCAvKiBBdXhpbGlhcnlQcm9jZXNzTWFpbi5jcHAg
Ki87IH07Ci0JCTVDRTkxMjEzMjI5M0MyNzkwMDVCRUM3OCAvKiBBdXhpbGlhcnlQcm9jZXNzTWFp
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0U5
MTIwRjIyOTNDMjVGMDA1QkVDNzggLyogQXV4aWxpYXJ5UHJvY2Vzc01haW4uY3BwICovOyB9Owog
CQk1Q0U5MTIxNDIyOTNDMjgwMDA1QkVDNzggLyogV0tNYWluLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0U5MTIwQjIyOTNDMUUwMDA1QkVDNzggLyog
V0tNYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNjMxMDhGOTYxRjk2NzE5QzAwQTBEQjg0IC8qIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYzMTA4Rjk0MUY5
NjcxOUMwMEEwREI4NCAvKiBfV0tBcHBsaWNhdGlvbk1hbmlmZXN0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjMxMDhGOTkxRjk2NzFGNzAwQTBE
Qjg0IC8qIF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjMxMDhGOTgxRjk2NzFGNzAwQTBEQjg0IC8q
IF9XS0FwcGxpY2F0aW9uTWFuaWZlc3RJbnRlcm5hbC5oICovOyB9OwpAQCAtMTM1OSw3ICsxMjcy
LDYgQEAKIAkJN0EzQUNFMUIxRUVFRjc5QjAwQTg2NEE0IC8qIEFQSUluamVjdGVkQnVuZGxlUGFn
ZUxvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0EzQUNFMUExRUVFRjc4QzAwQTg2NEE0IC8qIEFQSUluamVjdGVkQnVuZGxlUGFnZUxv
YWRlckNsaWVudC5oICovOyB9OwogCQk3QTNGRUNBMjIxRjdDMDk3MDBGMjY3Q0QgLyogU3RvcmFn
ZUFjY2Vzc1N0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0EzRkVDQTEyMUY3QzA5NzAwRjI2N0NEIC8qIFN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCAq
LzsgfTsKIAkJN0E0MUU5RkIyMUY4MURBRDAwQjg4Q0RCIC8qIFNob3VsZEdyYW5kZmF0aGVyU3Rh
dGlzdGljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0E0MUU5RkEyMUY4MURBQzAwQjg4Q0RCIC8qIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5o
ICovOyB9OwotCQk3QTc3MkM4RDFEREQ0QTI1MDAwRjM0RjEgLyogY29tLmFwcGxlLldlYktpdC5w
bHVnaW4tY29tbW9uLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBMTUwNjcyMURENTYyOTgwMDFGNEI1OCAvKiBj
b20uYXBwbGUuV2ViS2l0LnBsdWdpbi1jb21tb24uc2IgKi87IH07CiAJCTdBNzhGRjMyMjI0MTkx
OTYwMDk2NDgzRSAvKiBXS1N0b3JhZ2VBY2Nlc3NBbGVydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E3OEZGMkUyMjQxOTE3NTAwOTY0ODNFIC8qIFdL
U3RvcmFnZUFjY2Vzc0FsZXJ0LmggKi87IH07CiAJCTdBNzhGRjMzMjI0MTkxOUIwMDk2NDgzRSAv
KiBXS1N0b3JhZ2VBY2Nlc3NBbGVydC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdBNzhGRjJGMjI0MTkxNzYwMDk2NDgzRSAvKiBXS1N0b3JhZ2VBY2Nl
c3NBbGVydC5tbSAqLzsgfTsKIAkJN0E4MjFGNEMxRTJGNjczOTAwNjA0NTc3IC8qIExlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0E4MjFGNEIxRTJGNjY0ODAwNjA0NTc3IC8qIExlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudC5oICovOyB9OwpAQCAtMTM5OCw3ICsxMzEwLDYgQEAKIAkJ
N0MzNjFENzgxOTI4MDNCRDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDMzYxRDc2MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTdDMzYxRDc5MTkyODAzQkQw
MDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzM2MUQ3NzE5MjgwM0JE
MDAzNkE1OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNzYWdlcy5oICovOyB9
OwogCQk3QzNBMDZBODFBQUI5MDNFMDA5RDc0QkEgLyogQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDM0EwNkE2
MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50UnVsZUxpc3RTdG9yZS5oICovOyB9OwotCQk3
QzNGOEM5MTE3M0FGNTJEMDA3QjdGMzkgLyogUGx1Z2luSW5mb3JtYXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDM0Y4QzhGMTczQUY1MkQwMDdC
N0YzOSAvKiBQbHVnaW5JbmZvcm1hdGlvbi5oICovOyB9OwogCQk3QzQ2OTRDOTFBNEI0RUExMDBB
RDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNDY5NEM3MUE0QjRFQTAwMEFE
NTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQk3
QzQ2OTRDQTFBNEI0RUExMDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5TWVzc2FnZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNDY5NEM4MUE0
QjRFQTEwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHlNZXNzYWdlcy5oICovOyB9OwogCQk3
QzQ2OTREMTFBNTFFMzY4MDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzQ2OTRDRTFBNTFFMzY4MDBB
RDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5LmggKi87IH07CkBAIC0xNDI1LDExICsxMzM2LDYg
QEAKIAkJN0NCMTAwRjIxRkEzODU4RTAwMTcyOUVFIC8qIFdlYlByZWZlcmVuY2VzRGVmaW5pdGlv
bnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDREU3
M0EzMUY5REFCNjUwMDM5MDMxMiAvKiBXZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmggKi87IH07
CiAJCTdDQjEwMEYzMUZBMzg1OEUwMDE3MjlFRSAvKiBXZWJQcmVmZXJlbmNlc0tleXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQjEwMEVGMUZBMkQ3
NEIwMDE3MjlFRSAvKiBXZWJQcmVmZXJlbmNlc0tleXMuaCAqLzsgfTsKIAkJN0NCMTAwRjQxRkEz
ODU5MjAwMTcyOUVFIC8qIFdlYlByZWZlcmVuY2VzU3RvcmVEZWZhdWx0c01hcC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0IxMDBGMDFGQTJENzg0
MDAxNzI5RUUgLyogV2ViUHJlZmVyZW5jZXNTdG9yZURlZmF1bHRzTWFwLmNwcCAqLzsgfTsKLQkJ
N0NCMTZGRUYxNzI0QkEyMzAwN0EwQTk1IC8qIGNvbS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0
LndlYnBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0IxNkZFMjE3MjRCOUI1MDA3QTBBOTUgLyogY29t
LmFwcGxlLmlzdC5kcy5hcHBsZWNvbm5lY3Qud2VicGx1Z2luLnNiICovOyB9OwotCQk3Q0IxNkZG
MDE3MjRCQTI0MDA3QTBBOTUgLyogY29tLmFwcGxlLlF1aWNrVGltZSBQbHVnaW4ucGx1Z2luLnNi
IGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDQjE2RkUzMTcyNEI5QjUwMDdBMEE5NSAvKiBjb20uYXBwbGUuUXVpY2tU
aW1lIFBsdWdpbi5wbHVnaW4uc2IgKi87IH07Ci0JCTdDQjE2RkYyMTcyNEJBMjgwMDdBMEE5NSAv
KiBjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIucGx1Z2luLnNiIGluIENvcHkgUGx1Zy1pbiBT
YW5kYm94IFByb2ZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQjE2
RkU1MTcyNEI5QjUwMDdBMEE5NSAvKiBjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIucGx1Z2lu
LnNiICovOyB9OwotCQk3Q0IxNkZGMzE3MjRCQTJGMDA3QTBBOTUgLyogY29tLm1pY3Jvc29mdC5T
aWx2ZXJsaWdodFBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0IxNkZFNjE3MjRCOUI1MDA3QTBBOTUg
LyogY29tLm1pY3Jvc29mdC5TaWx2ZXJsaWdodFBsdWdpbi5zYiAqLzsgfTsKLQkJN0NCMTZGRjQx
NzI0QkEzMDAwN0EwQTk1IC8qIGNvbS5vcmFjbGUuamF2YS5KYXZhQXBwbGV0UGx1Z2luLnNiIGlu
IENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDQjE2RkU3MTcyNEI5QjUwMDdBMEE5NSAvKiBjb20ub3JhY2xlLmphdmEuSmF2
YUFwcGxldFBsdWdpbi5zYiAqLzsgfTsKIAkJN0NCMzY1QUExRDMxREI3MDAwNzE1OENBIC8qIF9X
S1VzZXJJbml0aWF0ZWRBY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDQjM2NUE4MUQzMURCNzAwMDcxNThDQSAvKiBfV0tVc2VySW5pdGlhdGVk
QWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJN0NCMzY1QUQxRDMxREMxMDAwNzE1OENBIC8qIF9XS1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NC
MzY1QUMxRDMxREMxMDAwNzE1OENBIC8qIF9XS1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5o
ICovOyB9OwogCQk3Q0IzNjVCMTFEMzFERDFFMDA3MTU4Q0EgLyogQVBJVXNlckluaXRpYXRlZEFj
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NC
MzY1QUYxRDMxREQxRTAwNzE1OENBIC8qIEFQSVVzZXJJbml0aWF0ZWRBY3Rpb24uaCAqLzsgfTsK
QEAgLTE0NDAsNyArMTM0Niw2IEBACiAJCTdDRDVFQkI5MTc0NkExNUIwMDBDMUM0NSAvKiBXS09i
akNUeXBlV3JhcHBlclJlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0NENUVCQjcxNzQ2QTE1QjAwMEMxQzQ1IC8qIFdLT2JqQ1R5cGVXcmFwcGVyUmVm
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0NE
NUVCQkIxNzQ2QTgzRTAwMEMxQzQ1IC8qIFdLQmFzZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NENUVCQkExNzQ2QTgzRTAwMEMxQzQ1IC8qIFdL
QmFzZU1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTdDRDVFQkJGMTc0NkIwNEMwMDBDMUM0NSAvKiBXS1R5cGVSZWZXcmFwcGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0Q1RUJCRDE3NDZCMDRD
MDAwQzFDNDUgLyogV0tUeXBlUmVmV3JhcHBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTdDRDYyMjc4MTczOUQ4NjMwMDVCRDdGRiAvKiBQbHVn
aW5TYW5kYm94UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0NENjIyNzYxNzM5RDg2MzAwNUJEN0ZGIC8qIFBsdWdpblNhbmRib3hQcm9maWxl
LmggKi87IH07CiAJCTdDRTREMjA3MUE0Njc3NjEwMEM3RjE1MiAvKiBBUElMZWdhY3lDb250ZXh0
SGlzdG9yeUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0NFNEQyMDYxQTQ2Nzc1NzAwQzdGMTUyIC8qIEFQSUxlZ2FjeUNvbnRleHRIaXN0b3J5
Q2xpZW50LmggKi87IH07CiAJCTdDRTREMjFCMUE0OTE0QTMwMEM3RjE1MiAvKiBXZWJQcm9jZXNz
UG9vbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NF
NEQyMTgxQTQ5MTRBMzAwQzdGMTUyIC8qIFdlYlByb2Nlc3NQb29sLmggKi87IH07CiAJCTdDRTRE
MjIwMUE0OTE0Q0EwMEM3RjE1MiAvKiBBUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTREMjFFMUE0OTE0
Q0EwMEM3RjE1MiAvKiBBUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaCAqLzsgfTsKQEAgLTE2
MjYsNyArMTUzMSw2IEBACiAJCTlCRjVFQzY0MjU0MTE0NTYwMDk4NEU3NyAvKiBKU0lQQ0JpbmRp
bmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJG
NUVDNjMyNTQxMEU5OTAwOTg0RTc3IC8qIEpTSVBDQmluZGluZy5jcHAgKi87IH07CiAJCTlFQzUz
MkEzMjQ0N0ZCQUQwMDIxNTIxNiAvKiBHZW9sb2NhdGlvbklkZW50aWZpZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlFQzUzMkEyMjQ0N0ZCQUQwMDIx
NTIxNiAvKiBHZW9sb2NhdGlvbklkZW50aWZpZXIuaCAqLzsgfTsKIAkJOUZCNUYzOTUxNjlFNkE4
MDAwMkMyNUJGIC8qIFdLQ29udGV4dFByaXZhdGVNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGQjVGMzkzMTY5RTZBODAwMDJDMjVCRiAvKiBXS0Nv
bnRleHRQcml2YXRlTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJQTEwMkE3MDgxRUMwRUVFOTAwRDgxRDgyIC8qIGNvbS5tYWNyb21lZGlhLkZs
YXNoIFBsYXllciBFU1IucGx1Z2luLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNUUzOTQ5MUQ1QkQ4QTcwMEI0
QjdDRSAvKiBjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIgRVNSLnBsdWdpbi5zYiAqLzsgfTsK
IAkJQTEwNDZFQTEyMDc5MjYzMTAwRjBDNUQ4IC8qIFdLUERGVmlldy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwNDZFOUYyMDc5MjYzMTAwRjBDNUQ4
IC8qIFdLUERGVmlldy5oICovOyB9OwogCQlBMTE1REM3MjE5MUQ4MkRBMDBEQTgwNzIgLyogX1dL
V2ViVmlld1ByaW50Rm9ybWF0dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMTE1REM2RTE5MUQ4MkFCMDBEQTgwNzIgLyogX1dLV2ViVmlld1ByaW50
Rm9ybWF0dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQTExOEE5RjMxOTA4QjhFQTAwRjdDOTJCIC8qIF9XS05TRmlsZU1hbmFnZXJFeHRyYXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMThBOUYx
MTkwOEI4RUEwMEY3QzkyQiAvKiBfV0tOU0ZpbGVNYW5hZ2VyRXh0cmFzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE4MDQsOCArMTcwOCw2IEBA
CiAJCUJDODE0N0E5MTJGNjRDREEwMDdCMkMzMiAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VQb2xpY3lD
bGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
ODE0N0E3MTJGNjRDREEwMDdCMkMzMiAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VQb2xpY3lDbGllbnQu
aCAqLzsgfTsKIAkJQkM4MTQ3RDUxMkY2NkQzMTAwN0IyQzMyIC8qIEluamVjdGVkQnVuZGxlTmF2
aWdhdGlvbkFjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkM4MTQ3RDMxMkY2NkQzMTAwN0IyQzMyIC8qIEluamVjdGVkQnVuZGxlTmF2aWdhdGlv
bkFjdGlvbi5oICovOyB9OwogCQlCQzgyODNEQTE2QjREQjkzMDBBMjc4RkUgLyogV2ViS2l0LmZy
YW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDhEQzJFRjVCMDQ4NkE2OTQwMDk4QjIxNiAvKiBXZWJLaXQuZnJhbWV3b3JrICovOyB9OwotCQlC
QzgyODQ0RDE2QjUwODFDMDBBMjc4RkUgLyogUGx1Z2luU2VydmljZUVudHJ5UG9pbnQubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzgyODNFRjE2QjRG
OEUyMDBBMjc4RkUgLyogUGx1Z2luU2VydmljZUVudHJ5UG9pbnQubW0gKi87IH07Ci0JCUJDODI4
NDRGMTZCNTA4OTgwMEEyNzhGRSAvKiBXZWJLaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOERDMkVGNUIwNDg2QTY5NDAwOThCMjE2
IC8qIFdlYktpdC5mcmFtZXdvcmsgKi87IH07CiAJCUJDODQ1MkE4MTE2MkM4MDkwMENBQjlCNSAv
KiBEcmF3aW5nQXJlYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkM4NDUyQTYxMTYyQzgwOTAwQ0FCOUI1IC8qIERyYXdpbmdBcmVhLmggKi87IH07CiAJ
CUJDODU3Rjg1MTJCODJEMEIwMEVERUIyRSAvKiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4NTdGODMx
MkI4MkQwQjAwRURFQjJFIC8qIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmggKi87IH07CiAJ
CUJDODU3RkI1MTJCODMwRTYwMEVERUIyRSAvKiBBUElPcGVuUGFuZWxQYXJhbWV0ZXJzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzg1N0ZCMzEyQjgz
MEU2MDBFREVCMkUgLyogQVBJT3BlblBhbmVsUGFyYW1ldGVycy5oICovOyB9OwpAQCAtMjAxNSw3
ICsxOTE3LDYgQEAKIAkJRTE4RTY5MEMxNjlCNTYzRjAwOUI2NjcwIC8qIFNlY0l0ZW1TaGltUHJv
eHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOEU2
OTBBMTY5QjU2M0YwMDlCNjY3MCAvKiBTZWNJdGVtU2hpbVByb3h5LmggKi87IH07CiAJCUUxOEU2
OTE3MTY5QjY2N0IwMDlCNjY3MCAvKiBTZWNJdGVtU2hpbVByb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOEU2OTEz
MTY5QjY2N0IwMDlCNjY3MCAvKiBTZWNJdGVtU2hpbVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAq
LzsgfTsKIAkJRTE4RTY5MTgxNjlCNjY3QjAwOUI2NjcwIC8qIFNlY0l0ZW1TaGltUHJveHlNZXNz
YWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4
RTY5MTQxNjlCNjY3QjAwOUI2NjcwIC8qIFNlY0l0ZW1TaGltUHJveHlNZXNzYWdlcy5oICovOyB9
OwotCQlFMTlCREE4NjE5MzY2NUUzMDBCOTdGNTcgLyogY29tLmFwcGxlLmFwcHN0b3JlLkNvZGVS
ZWRlZW1lck5ldHNjYXBlUGx1Z2luLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOUJEQTg0MTkzNjVGNEIwMEI5
N0Y1NyAvKiBjb20uYXBwbGUuYXBwc3RvcmUuQ29kZVJlZGVlbWVyTmV0c2NhcGVQbHVnaW4uc2Ig
Ki87IH07CiAJCUUxQUVBMjJGMTQ2ODdCREIwMDgwNDU2OSAvKiBXS0Z1bGxLZXlib2FyZEFjY2Vz
c1dhdGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxQUVBMjJEMTQ2ODdCREIwMDgwNDU2OSAvKiBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIu
aCAqLzsgfTsKIAkJRTFCNzg0NzExNjNGMjQ2OTAwMDdCNjkyIC8qIFJlbW90ZU5ldHdvcmtpbmdD
b250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MUI3ODQ3MDE2M0YyNDY5MDAwN0I2OTIgLyogUmVtb3RlTmV0d29ya2luZ0NvbnRleHQuaCAqLzsg
fTsKIAkJRTFDQzFCOTAxMkQ3RUFERjAwNjI1ODM4IC8qIFByaW50SW5mby5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDQzFCOEUxMkQ3RUFERjAwNjI1
ODM4IC8qIFByaW50SW5mby5oICovOyB9OwpAQCAtMjE2MywxMyArMjA2NCw2IEBACiAJCQlyZW1v
dGVHbG9iYWxJRFN0cmluZyA9IDM3MkVCQjM4MjAxN0U2NDMwMDA4NTA2NDsKIAkJCXJlbW90ZUlu
Zm8gPSBXZWJDb250ZW50LkRldmVsb3BtZW50OwogCQl9OwotCQkzNzVFMDYyQTE5MUVBOEQ0MDA0
RTNDQUYgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewotCQkJaXNhID0gUEJYQ29udGFp
bmVySXRlbVByb3h5OwotCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFB
QzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOwotCQkJcHJveHlUeXBlID0gMTsKLQkJCXJlbW90ZUds
b2JhbElEU3RyaW5nID0gOERDMkVGNEYwNDg2QTY5NDAwOThCMjE2OwotCQkJcmVtb3RlSW5mbyA9
IFdlYktpdDsKLQkJfTsKIAkJMzc1RTA2MzAxOTFFQTkwNDAwNEUzQ0FGIC8qIFBCWENvbnRhaW5l
ckl0ZW1Qcm94eSAqLyA9IHsKIAkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKIAkJCWNv
bnRhaW5lclBvcnRhbCA9IDA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVj
dCAqLzsKQEAgLTIxODQsMTMgKzIwNzgsNiBAQAogCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSA4
REMyRUY0RjA0ODZBNjk0MDA5OEIyMTY7CiAJCQlyZW1vdGVJbmZvID0gV2ViS2l0OwogCQl9Owot
CQkzN0IxRDAxMzFDMUU0MjExMDBENjdGRTkgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0g
ewotCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OwotCQkJY29udGFpbmVyUG9ydGFsID0g
MDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOwotCQkJcHJveHlU
eXBlID0gMTsKLQkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMUFDMjVGQUYxMkE0OEVBNzAwQkQy
NjcxOwotCQkJcmVtb3RlSW5mbyA9IFBsdWdpblByb2Nlc3NTaGltOwotCQl9OwogCQkzN0Y3NDA3
ODEyNzIxRjc0MDA5Mzg2OUIgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewogCQkJaXNh
ID0gUEJYQ29udGFpbmVySXRlbVByb3h5OwogCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBG
RTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOwpAQCAtMjI4MiwxMyArMjE2OSw2
IEBACiAJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IEJDODI4M0IwMTZCNEJGNzcwMEEyNzhGRTsK
IAkJCXJlbW90ZUluZm8gPSBOZXR3b3JraW5nOwogCQl9OwotCQlCQzgyODQ0NTE2QjRGRjY2MDBB
Mjc4RkUgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewotCQkJaXNhID0gUEJYQ29udGFp
bmVySXRlbVByb3h5OwotCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFB
QzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOwotCQkJcHJveHlUeXBlID0gMTsKLQkJCXJlbW90ZUds
b2JhbElEU3RyaW5nID0gQkM4Mjg0MUUxNkI0RkRGNjAwQTI3OEZFOwotCQkJcmVtb3RlSW5mbyA9
IFBsdWdpbi42NDsKLQkJfTsKIAkJQkNBOEQ0NjcxNUJDRTBENjAwOURDMUYxIC8qIFBCWENvbnRh
aW5lckl0ZW1Qcm94eSAqLyA9IHsKIAkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKIAkJ
CWNvbnRhaW5lclBvcnRhbCA9IDA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9i
amVjdCAqLzsKQEAgLTIzMjQsMTMgKzIyMDQsNiBAQAogCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcg
PSA4REMyRUY0RjA0ODZBNjk0MDA5OEIyMTY7CiAJCQlyZW1vdGVJbmZvID0gV2ViS2l0OwogCQl9
OwotCQlFMUFDMkUyRDIwRjdCOTg4MDBCMDg5N0QgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICov
ID0gewotCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OwotCQkJY29udGFpbmVyUG9ydGFs
ID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOwotCQkJcHJv
eHlUeXBlID0gMTsKLQkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gRTFBQzJFMjcyMEY3Qjk0QzAw
QjA4OTdEOwotCQkJcmVtb3RlSW5mbyA9ICJVbmxvY2sgS2V5Y2hhaW4iOwotCQl9OwogCQlFMUFD
MkUzMTIwRjdCOTlCMDBCMDg5N0QgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewogCQkJ
aXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OwogCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2
OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOwpAQCAtMjM1MiwxMyArMjIy
NSw2IEBACiAJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IEUxQUMyRTI3MjBGN0I5NEMwMEIwODk3
RDsKIAkJCXJlbW90ZUluZm8gPSAiVW5sb2NrIEtleWNoYWluIjsKIAkJfTsKLQkJRTFBQzJFMzky
MEY3QjlBNzAwQjA4OTdEIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKLQkJCWlzYSA9
IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKLQkJCWNvbnRhaW5lclBvcnRhbCA9IDA4NjdENjkwRkU4
NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKLQkJCXByb3h5VHlwZSA9IDE7Ci0J
CQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IEUxQUMyRTI3MjBGN0I5NEMwMEIwODk3RDsKLQkJCXJl
bW90ZUluZm8gPSAiVW5sb2NrIEtleWNoYWluIjsKLQkJfTsKIAkJRTFBQzJFM0QyMEY3QjlDMDAw
QjA4OTdEIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKIAkJCWlzYSA9IFBCWENvbnRh
aW5lckl0ZW1Qcm94eTsKIAkJCWNvbnRhaW5lclBvcnRhbCA9IDA4NjdENjkwRkU4NDAyOEZDMDJB
QUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKQEAgLTI0MDIsMzkgKzIyNjgsMTAgQEAKIAkJCWRz
dFBhdGggPSAiIjsKIAkJCWRzdFN1YmZvbGRlclNwZWMgPSAxMDsKIAkJCWZpbGVzID0gKAotCQkJ
CTM3QjBEMTg0MUMxRTQ5OUEwMEQ0MEQ2NCAvKiBQbHVnaW5Qcm9jZXNzU2hpbS5keWxpYiBpbiBD
b3B5IFNoaW1zICovLAogCQkJKTsKIAkJCW5hbWUgPSAiQ29weSBTaGltcyI7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKLQkJN0NCMTZGRUUxNzI0QkEw
NTAwN0EwQTk1IC8qIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovID0gewotCQkJaXNh
ID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2
NDc7Ci0JCQlkc3RQYXRoID0gUGx1Z0luU2FuZGJveFByb2ZpbGVzOwotCQkJZHN0U3ViZm9sZGVy
U3BlYyA9IDc7Ci0JCQlmaWxlcyA9ICgKLQkJCQk0MTQzNzUxQzIwRUFFQTJEMDBGQUQwNkMgLyog
Y24ubWljcm9kb25lLmNtYi5zYWZhcmkuc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmls
ZXMgKi8sCi0JCQkJRTE5QkRBODYxOTM2NjVFMzAwQjk3RjU3IC8qIGNvbS5hcHBsZS5hcHBzdG9y
ZS5Db2RlUmVkZWVtZXJOZXRzY2FwZVBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQ
cm9maWxlcyAqLywKLQkJCQk0MTEyRUREQjIwRTQwN0E1MDBCRUE5MkEgLyogY29tLmFwcGxlLkJv
Y29tU3VibWl0Q3RybC5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLywKLQkJ
CQk3Q0IxNkZFRjE3MjRCQTIzMDA3QTBBOTUgLyogY29tLmFwcGxlLmlzdC5kcy5hcHBsZWNvbm5l
Y3Qud2VicGx1Z2luLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovLAotCQkJ
CTQxMTJFRERDMjBFNDA3QTUwMEJFQTkyQSAvKiBjb20uYXBwbGUuTlBTYWZlSW5wdXQuc2IgaW4g
Q29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8sCi0JCQkJNDExMkVEREQyMEU0MDdBNTAw
QkVBOTJBIC8qIGNvbS5hcHBsZS5OUFNhZmVTdWJtaXQuc2IgaW4gQ29weSBQbHVnLWluIFNhbmRi
b3ggUHJvZmlsZXMgKi8sCi0JCQkJN0NCMTZGRjAxNzI0QkEyNDAwN0EwQTk1IC8qIGNvbS5hcHBs
ZS5RdWlja1RpbWUgUGx1Z2luLnBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9m
aWxlcyAqLywKLQkJCQk3QTc3MkM4RDFEREQ0QTI1MDAwRjM0RjEgLyogY29tLmFwcGxlLldlYktp
dC5wbHVnaW4tY29tbW9uLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovLAot
CQkJCTQxMTJFRERFMjBFNDA3QTUwMEJFQTkyQSAvKiBjb20uY2ZjYS5ucFNlY0VkaXRDdGwuTUFD
LkJPQy5wbHVnaW4uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8sCi0JCQkJ
NDE0REQzN0EyMEJGNDlBNTAwNjk1OUZCIC8qIGNvbS5jaXNjby53ZWJleC5wbHVnaW4uZ3BjNjQu
c2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8sCi0JCQkJNDExMkVEREYyMEU0
MDdBNTAwQkVBOTJBIC8qIGNvbS5jbWJjaGluYS5DTUJTZWN1cml0eS5zYiBpbiBDb3B5IFBsdWct
aW4gU2FuZGJveCBQcm9maWxlcyAqLywKLQkJCQk0MTEyRURFMDIwRTQwN0E1MDBCRUE5MkEgLyog
Y29tLmZ0c2FmZS5OUEFQSS1Db3JlLVNhZmUtU29mdEtleWJhb3JkLnBsdWdpbi5yZmMxMDM0aWRl
bnRpZmllci5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLywKLQkJCQk0MTND
Q0Q1MDIwREVCQzc0MDA2NUEyMUEgLyogY29tLmdvb2dsZS5nb29nbGV0YWxrYnJvd3NlcnBsdWdp
bi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLywKLQkJCQk0MTU3RTRCMDIw
RTJFQ0RGMDBBNkMwRDcgLyogY29tLmdvb2dsZS5vMWRicm93c2VycGx1Z2luLnNiIGluIENvcHkg
UGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovLAotCQkJCUExMDJBNzA4MUVDMEVFRTkwMEQ4MUQ4
MiAvKiBjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIgRVNSLnBsdWdpbi5zYiBpbiBDb3B5IFBs
dWctaW4gU2FuZGJveCBQcm9maWxlcyAqLywKLQkJCQk3Q0IxNkZGMjE3MjRCQTI4MDA3QTBBOTUg
LyogY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyLnBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4g
U2FuZGJveCBQcm9maWxlcyAqLywKLQkJCQk3Q0IxNkZGMzE3MjRCQTJGMDA3QTBBOTUgLyogY29t
Lm1pY3Jvc29mdC5TaWx2ZXJsaWdodFBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQ
cm9maWxlcyAqLywKLQkJCQk3Q0IxNkZGNDE3MjRCQTMwMDA3QTBBOTUgLyogY29tLm9yYWNsZS5q
YXZhLkphdmFBcHBsZXRQbHVnaW4uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMg
Ki8sCi0JCQkpOwotCQkJbmFtZSA9ICJDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyI7Ci0J
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKIAkJQTE1Nzk3
NjMyNTgyQjFBNTAwNTI4MjM2IC8qIENvcHkgUGx1Zy1pbnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhD
b3B5RmlsZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAg
LTI2ODEsMzQgKzI1MTgsMTEgQEAKIAkJMUEwMDJENDIxOTZCMzM3MDAwQjlBRDQ0IC8qIF9XS1Nl
c3Npb25TdGF0ZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9X
S1Nlc3Npb25TdGF0ZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFB
MDAyRDQ2MTk2QjM0NUQwMEI5QUQ0NCAvKiBTZXNzaW9uU3RhdGVDb2RpbmcubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZXNzaW9uU3RhdGVDb2RpbmcubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMDAyRDQ3MTk2QjM0NUQwMEI5QUQ0NCAvKiBT
ZXNzaW9uU3RhdGVDb2RpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Vz
c2lvblN0YXRlQ29kaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMDQzOTc0
MTI0RDAzNDgwMEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBsdWdpblByb2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMUEwNDM5NzUxMjREMDM0ODAwRkZCRkI1IC8qIFBsdWdpblByb2Nlc3MuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGx1Z2luUHJvY2Vzcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMDQzQTA3MTI0RDExQTkwMEZGQkZCNSAvKiBXZWJQcm9j
ZXNzQ29ubmVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQcm9j
ZXNzQ29ubmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTA0M0EwODEy
NEQxMUE5MDBGRkJGQjUgLyogV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkxQTA0M0I0QzEyNEQ1RTM2MDBGRkJGQjUgLyogUGx1Z2lu
UHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBsdWdpblBy
b2Nlc3NQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEw
NDNCNUIxMjRENUU5RDAwRkZCRkI1IC8qIFBsdWdpblByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQbHVnaW5Qcm9jZXNz
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9Q
bHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRf
UFJPRFVDVFNfRElSOyB9OwotCQkxQTA0M0I1QzEyNEQ1RTlEMDBGRkJGQjUgLyogUGx1Z2luUHJv
Y2Vzc1Byb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGx1
Z2luUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIv
UGx1Z2luUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RT
X0RJUjsgfTsKLQkJMUEwNDNEQkYxMjRGRjg3NTAwRkZCRkI1IC8qIFBsdWdpblByb3h5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdpblByb3h5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTFBMDQzREMwMTI0RkY4NzUwMEZGQkZCNSAvKiBQbHVnaW5Qcm94
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbHVnaW5Qcm94eS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMDQzRjU5MTI1MTRDRjMwMEZGQkZC
NSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBXZWJQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMUEwNDNGNjcxMjUxNEQ4QjAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0
aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IFdlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2
ZWRTb3VyY2VzL1dlYktpdDIvV2ViUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkxQTA0M0Y2ODEyNTE0RDhC
MDBGRkJGQjUgLyogV2ViUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmg7IHBhdGgg
PSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaDsg
c291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMUEwNEY2MTcxQTRBM0E3QTAw
QTIxQjZFIC8qIFdlYlByb2Nlc3NQcm94eUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFBMDhGRUUyMUQ1OTNDRjEwMDhCQThDQiAvKiBXZWJQbHVnaW5JbmZv
UHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGx1
Z2luSW5mb1Byb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEwOEZF
RTMxRDU5M0NGMTAwOEJBOENCIC8qIFdlYlBsdWdpbkluZm9Qcm92aWRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQbHVnaW5JbmZvUHJvdmlkZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEwQzIyN0MyNDUxMTMwQTAwRUQ2MTREIC8qIFF1aWNrTG9v
a1RodW1ibmFpbGluZ1NvZnRMaW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFF1aWNrTG9va1RodW1ibmFp
bGluZ1NvZnRMaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMEMyMjdEMjQ1
MTEzMEEwMEVENjE0RCAvKiBRdWlja0xvb2tUaHVtYm5haWxpbmdTb2Z0TGluay5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFF1aWNrTG9va1RodW1ibmFpbGluZ1NvZnRMaW5rLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkxQTBFQzYwMTEyNEE5RjJDMDA3RUY0QTUgLyogUGx1Z2lu
UHJvY2Vzc01hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2lu
UHJvY2Vzc01hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEwRUM2MDIx
MjRBOUYyQzAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsdWdpblByb2Nlc3NNYW5hZ2VyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEwRUM2QjExMjRCQkQzNjAwN0VGNEE1IC8qIFBsdWdp
blByb2Nlc3MubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUGx1Z2luUHJvY2Vz
cy5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEwRUM2QkQxMjRC
QkQ5QjAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0g
MTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQbHVnaW5Q
cm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIv
UGx1Z2luUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07Ci0JCTFBMEVDNkJFMTI0QkJEOUIwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNz
TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGx1Z2luUHJvY2Vz
c01lc3NhZ2VzLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb2Nlc3NN
ZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkxQTBFQzc1
QzEyNEJDN0IyMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdpblByb2Nlc3NQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkxQTBFQzc1RDEyNEJDN0IyMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc1By
b3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsdWdpblByb2Nl
c3NQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMEVDOTA0MTI0QzBB
QjgwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkxQTBFQzkwNTEyNEMwQUI4MDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGx1
Z2luUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkx
QTBFQzkwRDEyNEMwQUY1MDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2Vy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdpblByb2Nlc3NDb25uZWN0
aW9uTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTBFQzkwRTEyNEMw
QUY1MDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFu
YWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMEYyOUUxMTIwQjQ0NDIw
MDUzRDFCOSAvKiBWaXNpdGVkTGlua1N0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFZpc2l0ZWRMaW5rU3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQTBGMjlFMjEyMEI0NDQyMDA1M0QxQjkgLyogVmlzaXRlZExpbmtTdG9yZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaXNpdGVkTGlua1N0b3JlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMTRGOERGMUQ3NEM4MzQwMDZDQkVDNiAvKiBGcmFt
ZUluZm9EYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYW1l
SW5mb0RhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjcxNyw4ICsyNTMx
LDYgQEAKIAkJMUExNTg0MTgxODkwNDRGNTAwMTc2MTZDIC8qIFdLUHJvY2Vzc1Bvb2wuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tQcm9jZXNzUG9vbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQTE3NjM1NDE2QjFENUQwMDBEODhGRDYgLyogU3RvcmFnZU5h
bWVzcGFjZUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3Rv
cmFnZU5hbWVzcGFjZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTE3
NjM1NTE2QjFENUQwMDBEODhGRDYgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZU5hbWVzcGFjZUltcGwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUExNzk3N0QxMzdFRTgyQzAwRjk3RDQ1IC8qIFBsdWdpbkNy
ZWF0aW9uUGFyYW1ldGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkxQTE3OTc3RTEzN0VFODJDMDBGOTdENDUgLyogUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdpbkNyZWF0aW9uUGFyYW1l
dGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTFCMEVCMzE4QTQyNDk1MDAz
ODQ4MUEgLyogV0tOYXZpZ2F0aW9uUmVzcG9uc2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXS05hdmlnYXRpb25SZXNwb25zZS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUExQjBFQjQxOEE0MjQ5NTAwMzg0ODFBIC8qIFdLTmF2aWdhdGlvblJl
c3BvbnNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLTmF2aWdhdGlvblJl
c3BvbnNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMUIwRUI3MThBNDI0Q0Qw
MDM4NDgxQSAvKiBXS05hdmlnYXRpb25SZXNwb25zZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdLTmF2aWdhdGlvblJlc3BvbnNlSW50ZXJuYWwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3MjgsMTkgKzI1NDAsOSBAQAogCQkxQTFFMDkzMjE4
ODYxRDM4MDBEMkRDNDkgLyogV2ViUHJvZ3Jlc3NUcmFja2VyQ2xpZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlByb2dyZXNzVHJhY2tlckNsaWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQTFFQzY5RDE4NzIwOTIxMDBCOTUxRjAgLyogSW1wb3J0
YW5jZUFzc2VydGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbXBvcnRh
bmNlQXNzZXJ0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMUVGMTk3MUEx
RDVCNDIwMDIzMjAwQSAvKiBBUElEYXRhQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBBUElEYXRhQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTFBMUZBMjUxMTI3QTBFNEYwMDUwRTcwOSAvKiBOUFJlbW90ZU9iamVjdE1hcC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOUFJlbW90ZU9iamVjdE1hcC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTFGQTI1MjEyN0EwRTRGMDA1MEU3MDkgLyogTlBS
ZW1vdGVPYmplY3RNYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TlBSZW1vdGVPYmplY3RNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTFG
QTI4MzEyN0ExM0JDMDA1MEU3MDkgLyogTlBPYmplY3RQcm94eS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBOUE9iamVjdFByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTFBMUZBMjg0MTI3QTEzQkMwMDUwRTcwOSAvKiBOUE9iamVjdFByb3h5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5QT2JqZWN0UHJveHkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTFGQTM1QjEyN0E0NUJGMDA1MEU3MDkgLyogTlBP
YmplY3RNZXNzYWdlUmVjZWl2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MUExRkEzNUMxMjdBNDVCRjAwNTBFNzA5IC8qIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5QT2JqZWN0TWVzc2FnZVJlY2Vp
dmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUExRkVDMTkxNjI3QjNFRjAw
NzAwRjZEIC8qIFdlYkNvbm5lY3Rpb24ubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViQ29ubmVjdGlvbi5t
ZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUExRkVDMUExNjI3QjQ1
NjAwNzAwRjZEIC8qIFdlYkNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5j
cHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYkNvbm5lY3Rpb25NZXNzYWdlUmVj
ZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkxQTFGRUMx
QjE2MjdCNDU3MDA3MDBGNkQgLyogV2ViQ29ubmVjdGlvbk1lc3NhZ2VzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkNvbm5lY3Rpb25NZXNzYWdlcy5oOyBwYXRoID0gRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJDb25uZWN0aW9uTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9
IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJMUEyMTYxQUUxMUYzNzY2NDAwOEFEMEY1IC8qIE5Q
UnVudGltZU9iamVjdE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOUFJ1
bnRpbWVPYmplY3RNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEyMTYxQUYx
MUYzNzY2NDAwOEFEMEY1IC8qIE5QUnVudGltZU9iamVjdE1hcC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOUFJ1bnRpbWVPYmplY3RNYXAuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkxQTIxNjJBRTExRjM4OTcxMDA4QUQwRjUgLyogTlBSdW50aW1l
VXRpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5QUnVu
dGltZVV0aWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMjE2MkFG
MTFGMzg5NzEwMDhBRDBGNSAvKiBOUFJ1bnRpbWVVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTlBSdW50aW1lVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFBMjJGMEZGMTI4OUZDRDkwMDg1RTc0RiAvKiBXS0J1bmRsZVBhZ2VPdmVy
bGF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnVuZGxlUGFnZU92ZXJs
YXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEyMkYxMDAxMjg5RkNEOTAwODVF
NzRGIC8qIFdLQnVuZGxlUGFnZU92ZXJsYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFBMjQ2NEYyMTg5MUU0NTEwMDIzNEM1QiAvKiBBUElMb2FkZXJDbGllbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJTG9hZGVyQ2xpZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzUxLDIyICsyNTUzLDcgQEAKIAkJMUEyNTZFMzYx
OEExQTc4ODAwNkZCOTIyIC8qIFdLTmF2aWdhdGlvbkFjdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXS05hdmlnYXRpb25BY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUEyNTZFMzkxOEExQTdERjAwNkZCOTIyIC8qIFdLTmF2aWdhdGlvbkFjdGlv
bkludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLTmF2aWdhdGlv
bkFjdGlvbkludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMjhCOENC
MUM4MEVENTkwMDZGRDc0MyAvKiBXZWJzaXRlRGF0YUZldGNoT3B0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEyQkI2Q0MxNDExN0E1RjAwMEYzNUQ0IC8qIFBsdWdpblBy
b2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBsdWdp
blByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkxQTJCQjZDRTE0MTE3QjREMDAwRjM1RDQgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25N
ZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5j
cHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTFBMkJCNkNGMTQxMTdC
NEQwMDBGMzVENCAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMu
aDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25N
ZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkxQTJEMjUy
QTE5NDY4OEZEMDA0NTM3QjAgLyogV0tFcnJvckludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdLRXJyb3JJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkxQTJEODQxMTEyN0Y2NEU4MDAxRUI5NjIgLyogTlBPYmplY3RNZXNzYWdlUmVjZWl2
ZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTlBPYmplY3RNZXNzYWdlUmVj
ZWl2ZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMkQ4NDM3
MTI3RjY1RDUwMDFFQjk2MiAvKiBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlck1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOUE9iamVjdE1lc3Nh
Z2VSZWNlaXZlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJL
aXQyL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVyTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJMUEyRDg0MzgxMjdGNjVENTAwMUVCOTYyIC8q
IE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXJNZXNzYWdlcy5oOyBwYXRoID0gRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9OUE9iamVjdE1lc3NhZ2VSZWNlaXZlck1lc3NhZ2VzLmg7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTFBMkQ4NDg5MTI3RjZBNDkwMDFF
Qjk2MiAvKiBOUElkZW50aWZpZXJEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE5QSWRlbnRpZmllckRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEy
RDg0OEExMjdGNkE0OTAwMUVCOTYyIC8qIE5QSWRlbnRpZmllckRhdGEuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTlBJZGVudGlmaWVyRGF0YS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMkQ4NEExMTI3RjZBRDEwMDFFQjk2MiAvKiBOUFZhcmlh
bnREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5QVmFyaWFudERhdGEu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEyRDg0QTIxMjdGNkFEMTAwMUVCOTYy
IC8qIE5QVmFyaWFudERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTlBWYXJpYW50RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMkQ5
MEJBMTI4MUM5MzEwMDFFQjk2MiAvKiBQbHVnaW5Qcm9jZXNzUHJveHlNYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbHVnaW5Qcm9jZXNzUHJveHlNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMkQ5MEQwMTI4MUM5NjYwMDFFQjk2MiAv
KiBQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEyRDkwRDExMjgxQzk2NjAwMUVCOTYyIC8qIFBsdWdpblBy
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTFBMkQ5MUE1MTI4MUQ3MzkwMDFFQjk2MiAvKiBQbHVnaW5Db250
cm9sbGVyUHJveHlNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBQbHVnaW5Db250cm9sbGVyUHJveHlNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTFBMkQ5MjIwMTI4MURDMUIwMDFFQjk2MiAvKiBQbHVnaW5Qcm94eU1hYy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsdWdpblByb3h5TWFjLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTJEOTU2RDEyODQ4NTY0MDAxRUI5NjIgLyogQXV4
aWxpYXJ5UHJvY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlh
cnlQcm9jZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMkQ5NTZFMTI4NDg1
NjQwMDFFQjk2MiAvKiBBdXhpbGlhcnlQcm9jZXNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEF1eGlsaWFyeVByb2Nlc3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQTMwMDY2QzExMTBGNEY3MDAzMTkzN0MgLyogUmVzcG9uc2l2ZW5lc3NUaW1l
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNwb25zaXZlbmVzc1RpbWVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzgwLDcgKzI1NjcsNiBAQAogCQkx
QTNDQzE2NDE4OTA2QUNGMDAxRTZFRDggLyogV0tXZWJWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQTNDQzE2NTE4OTA2QUNGMDAxRTZFRDggLyogV0tXZWJWaWV3LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2ViVmlldy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQTNDQzE2ODE4OTA3RUIwMDAxRTZFRDggLyogV0tQcm9jZXNzUG9vbElu
dGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUHJvY2Vzc1Bvb2xJ
bnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTNENjEwMDEzQTdDQzJB
MDBGOTVENEUgLyogUGx1Z2luTW9kdWxlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQbHVnaW5Nb2R1bGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFBM0Q2MTA0MTNBN0YwM0EwMEY5NUQ0RSAvKiBBcmd1bWVudENvZGVycy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcmd1bWVudENvZGVycy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBM0REMjA1MTI1RTVBMkYwMDQ1MTVFNiAvKiBBUElDbGll
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJQ2xpZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBM0U3MzVGMTFDQzI2NTkwMDdCRDUzOSAvKiBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODAz
LDEwICsyNTg5LDYgQEAKIAkJMUE0ODMyRDUxQTlDREY5NjAwOEI0REZFIC8qIFdlYnNpdGVEYXRh
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYnNpdGVEYXRhLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBNDgzMkQ4MUE5RDFGRDIwMDhCNERGRSAvKiBXZWJz
aXRlRGF0YVJlY29yZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
ZWJzaXRlRGF0YVJlY29yZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBNEE5
M0I2MUFFQjA4RUEwMDE1MEU5QyAvKiBfV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLV2Vic2l0ZURhdGFTdG9yZUludGVybmFs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBNEE5QzUzMTJCODE2Q0YwMDhGRTk4
NCAvKiBOZXRzY2FwZVBsdWdpbk1vZHVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBOZXRzY2FwZVBsdWdpbk1vZHVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTFBNEE5QzU0MTJCODE2Q0YwMDhGRTk4NCAvKiBOZXRzY2FwZVBsdWdpbk1vZHVs
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXRzY2FwZVBsdWdpbk1vZHVs
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTRBOUM5OTEyQjgyMUNEMDA4RkU5
ODQgLyogTmV0c2NhcGVQbHVnaW5Nb2R1bGVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBOZXRzY2FwZVBsdWdpbk1vZHVsZU1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMUE0QTlGMzExMkI4NDRFMjAwOEZFOTg0IC8qIFBsdWdpblF1aXJr
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW5RdWlya3MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE0RDY2NDcxOEEyRDkxQTAwRDgyRTIxIC8qIEFQ
SVVJQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSVVJQ2xpZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBNEQ2NjQ5MThBMzAzMEUwMEQ4MkUy
MSAvKiBXS0ZyYW1lSW5mby5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdLRnJhbWVJbmZvLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTRENjY0
QTE4QTMwMzBFMDBEODJFMjEgLyogV0tGcmFtZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0tGcmFtZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTI4NTksMTUgKzI2NDEsOCBAQAogCQkxQTZGQjdBRDExRTY0QjY4MDBEQjEzNzEgLyogUGx1Z2lu
Vmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW5WaWV3Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBNkZCN0QwMTFFNjUxRTIwMERCMTM3MSAvKiBQ
bHVnaW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGx1Z2luLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE2RkI3RDExMUU2NTFFMjAwREIxMzcx
IC8qIFBsdWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW4uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE2RkJBMjgxMUU2ODYyNzAwREIxMzcxIC8q
IE5ldHNjYXBlQnJvd3NlckZ1bmNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5ldHNjYXBlQnJvd3NlckZ1bmNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFB
NkZCQTI5MTFFNjg2MjcwMERCMTM3MSAvKiBOZXRzY2FwZUJyb3dzZXJGdW5jcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXRzY2FwZUJyb3dzZXJGdW5jcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBNkZCRDI2MTFFNjlCQzIwMERCMTM3MSAv
KiBOZXRzY2FwZVBsdWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXRz
Y2FwZVBsdWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTZGQkQyNzExRTY5
QkMyMDBEQjEzNzEgLyogTmV0c2NhcGVQbHVnaW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTmV0c2NhcGVQbHVnaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQTcyODQ0NDE5NTlFRDEwMDAwN0JDRTUgLyogU2Vzc2lvblN0YXRlQ29udmVyc2lv
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZXNzaW9uU3RhdGVD
b252ZXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE3Mjg0NDUxOTU5
RUQxMDAwMDdCQ0U1IC8qIFNlc3Npb25TdGF0ZUNvbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkxQTc4NjVCNjE2Q0FDNkZEMDBBQ0U4M0EgLyogUGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb25NYW5hZ2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBsdWdpblByb2Nlc3NDb25uZWN0
aW9uTWFuYWdlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE3
ODY1QjcxNkNBQzcxNTAwQUNFODNBIC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlck1l
c3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0g
RGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXJNZXNz
YWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkx
QTc4NjVCODE2Q0FDNzE1MDBBQ0U4M0EgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2Vy
TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb25NYW5hZ2VyTWVzc2FnZXMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktp
dDIvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9
IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMUE3QzBERjQxQjdEMUYxMDAwQTlCODQ4IC8qIFdL
V2luZG93RmVhdHVyZXNSZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0tXaW5kb3dGZWF0dXJlc1JlZi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFBN0MwREY1MUI3RDFGMTAwMEE5Qjg0OCAvKiBXS1dpbmRvd0ZlYXR1cmVzUmVmLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2luZG93RmVhdHVyZXNSZWYuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE3RTM3NzQxOEU0QTMzQTAwM0QwRkZGIC8qIFdLU2Ny
aXB0TWVzc2FnZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tT
Y3JpcHRNZXNzYWdlSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg4
MywxNCArMjY1OCw2IEBACiAJCTFBOEU3RDM4MThDMTUwQkYwMDVBNzAyQSAvKiBWaXNpdGVkTGlu
a1RhYmxlQ29udHJvbGxlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBWaXNp
dGVkTGlua1RhYmxlQ29udHJvbGxlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUE4RTdEM0ExOEMxNTE0OTAwNUE3MDJBIC8qIFZpc2l0ZWRMaW5rVGFibGVDb250
cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0
aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXJNZXNz
YWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkx
QThFN0QzQjE4QzE1MTQ5MDA1QTcwMkEgLyogVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXJNZXNz
YWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBWaXNpdGVkTGlua1RhYmxl
Q29udHJvbGxlck1lc3NhZ2VzLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1Zpc2l0
ZWRMaW5rVGFibGVDb250cm9sbGVyTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKLQkJMUE4RUY0QzkxMjUyNDAzNzAwRjcwNjdGIC8qIFBsdWdpbkNvbnRyb2xs
ZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW5Db250cm9s
bGVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE4RUY0Q0ExMjUyNDAz
NzAwRjcwNjdGIC8qIFBsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQbHVnaW5Db250cm9sbGVyUHJveHkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkxQThFRjk0MTEyNTJBRTg0MDBGNzA2N0YgLyogUGx1Z2luQ29u
dHJvbGxlclByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBsdWdpbkNv
bnRyb2xsZXJQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MUE4RUY5NkMxMjUyQUY2QjAwRjcwNjdGIC8qIFBsdWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQbHVnaW5D
b250cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9QbHVnaW5Db250cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkxQThFRjk2RDEyNTJBRjZCMDBGNzA2N0Yg
LyogUGx1Z2luQ29udHJvbGxlclByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gUGx1Z2luQ29udHJvbGxlclByb3h5TWVzc2FnZXMuaDsgcGF0aCA9IERlcml2
ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luQ29udHJvbGxlclByb3h5TWVzc2FnZXMuaDsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJMUE4RUZBNUIxMjUyQjdDRTAwRjcwNjdG
IC8qIFBsdWdpblByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBsdWdp
blByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQThFRkE2
RTEyNTJCODQxMDBGNzA2N0YgLyogUGx1Z2luUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUGx1Z2luUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTFBOEVG
QTZGMTI1MkI4NDEwMEY3MDY3RiAvKiBQbHVnaW5Qcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBsdWdpblByb3h5TWVzc2FnZXMuaDsgcGF0aCA9IERlcml2
ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OwogCQkxQTkwQzFFRDEyNjRGRDUwMDAzRTQ0RDQgLyogV2ViRmlu
ZE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRmluZE9wdGlv
bnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE5MEMxRjIxMjY0RkQ3MTAwM0U0
NEQ0IC8qIEZpbmRDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZpbmRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOTBDMUYz
MTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGaW5kQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yOTA2LDcgKzI2NzMsNiBAQAogCQkxQTlFMzI5RDE4MjJGRUREMDBGNUQw
NEMgLyogV0tSZW1vdGVPYmplY3RDb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXS1JlbW90ZU9iamVjdENvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFBOUUzMkEwMTgyMzAxODkwMEY1RDA0QyAvKiBfV0tSZW1vdGVPYmplY3RSZWdpc3RyeUludGVy
bmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1JlbW90ZU9iamVjdFJl
Z2lzdHJ5SW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE5RjI4MTAx
OTU4RjQ3ODAwOENBQzcyIC8qIFdLQmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXS0JhY2tGb3J3YXJkTGlzdFByaXZhdGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE5RkJBOEMxM0ZGMDRFNjAwREVFRDY3IC8qIFBsdWdp
bkNvbXBsZXhUZXh0SW5wdXRTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUFBMTMyMTExOTFENTkyNDAwOUMxNDg5IC8qIFdLTmF2aWdhdGlvblJlc3BvbnNlUHJp
dmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS05hdmlnYXRpb25SZXNw
b25zZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBMUM3OUExMDBF
N0ZDNTAwNzhERUJDIC8qIFdlYkNvcmUuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IHBhdGggPSBXZWJD
b3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMUFB
MUM3REUxMDBFODQ2RTAwNzhERUJDIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3
b3JrOyBwYXRoID0gSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gQlVJTFRf
UFJPRFVDVFNfRElSOyB9OwpAQCAtMjkyMCwxNSArMjY4NiwxMiBAQAogCQkxQUE0MTdDOTEyQzAw
Q0NBMDAyQkU2N0IgLyogVGV4dENoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVGV4dENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBNDE3
RUQxMkMwMEQ4NzAwMkJFNjdCIC8qIFRleHRDaGVja2VyTWFjLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGV4dENoZWNrZXJNYWMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFBQTQxQUI0MTJDMDJFQzQwMDJCRTY3QiAvKiBFZGl0b3JTdGF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFZGl0b3JTdGF0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkxQUE0NzkyMjEyQTU5RkQ5MDA4MjM2QzMgLyogUGx1Z2lu
UHJvY2Vzc01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBs
dWdpblByb2Nlc3NNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTU2RjI4
MTFFOTJCQzgwMDYxQjg4MiAvKiBQbHVnaW5Db250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBsdWdpbkNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUFBNTc1RjgxNDk2QjUyNjAwQTRFRTA2IC8qIEV2ZW50RGlzcGF0Y2hlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFdmVudERpc3BhdGNoZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUE1NzVGOTE0OTZCNTI2MDBBNEVFMDYg
LyogRXZlbnREaXNwYXRjaGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2
ZW50RGlzcGF0Y2hlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUE1NzVGRDE0
OTZCNkYzMDBBNEVFMDYgLyogRXZlbnREaXNwYXRjaGVyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IEV2ZW50RGlzcGF0Y2hlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUFBNTc1RkYxNDk2QjdDMDAwQTRFRTA2IC8qIEV2ZW50RGlzcGF0Y2hl
ck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBFdmVudERpc3BhdGNoZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJj
ZXMvV2ViS2l0Mi9FdmVudERpc3BhdGNoZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkxQUE1NzYwMDE0OTZCN0MwMDBBNEVFMDYgLyog
RXZlbnREaXNwYXRjaGVyTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRXZlbnREaXNwYXRjaGVyTWVzc2FnZXMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktp
dDIvRXZlbnREaXNwYXRjaGVyTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RT
X0RJUjsgfTsKLQkJMUFBNTg4OTAxMUVFNzA0MDAwNjFCODgyIC8qIE5ldHNjYXBlUGx1Z2luU3Ry
ZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHNjYXBlUGx1Z2luU3Ry
ZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQTU4ODkxMTFFRTcwNDAwMDYx
Qjg4MiAvKiBOZXRzY2FwZVBsdWdpblN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBOZXRzY2FwZVBsdWdpblN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFBQTY1NEQwMUIxNEY3MTQwMEJGMUQzRSAvKiBXS1dlYnNpdGVEYXRhUmVj
b3JkUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVE
YXRhUmVjb3JkUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUE4M0Y2
QTFBNUI2M0ZGMDAwMjZFQzYgLyogV2ViRGF0YWJhc2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJEYXRhYmFzZVByb3ZpZGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBODNGNkIxQTVCNjNGRjAwMDI2RUM2IC8qIFdlYkRh
dGFiYXNlUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRGF0
YWJhc2VQcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzAxNiwxMSAr
Mjc3OSw3IEBACiAJCTFBQzEzMzgzMTg1OTBDNDYwMEYzRUMwNSAvKiBSZW1vdGVPYmplY3RSZWdp
c3RyeU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBSZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJp
dmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZVJlY2VpdmVyLmNw
cDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMUFDMTMzODQxODU5MEM0
NjAwRjNFQzA1IC8qIFJlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlcy5oOyBwYXRo
ID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VzLmg7
IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTFBQzE0MTUwMThBQzQ3RUUw
MDZDNjAyQyAvKiBXS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUMyNUY4OTEyQTQ4RTAzMDBCRDI2NzEgLyogUGx1
Z2luUHJvY2Vzc1NoaW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2lu
UHJvY2Vzc1NoaW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFDMjVGOEExMkE0
OEUwMzAwQkQyNjcxIC8qIFBsdWdpblByb2Nlc3NTaGltLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gUGx1Z2luUHJvY2Vzc1NoaW0ubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTFBQzI1RkIwMTJBNDhFQTcwMEJEMjY3MSAvKiBQbHVnaW5Qcm9jZXNz
U2hpbS5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBl
ID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFBs
dWdpblByb2Nlc3NTaGltLmR5bGliOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwogCQkxQUM0QzgyODE2Qjg3NkE5MDA2OURDQ0QgLyogTWVzc2FnZUZsYWdzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lc3NhZ2VGbGFncy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkxQUM1RkZDMTE3NEJGRDFCMDAwMTQ4M0QgLyogUGx1Z2luUHJvY2Vzc0F0
dHJpYnV0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luUHJvY2Vz
c0F0dHJpYnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFDNzUzNzkxODNB
OUZEQTAwNzJDQjE1IC8qIFBhZ2VMb2FkU3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUGFnZUxvYWRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFBQzc1MzdBMTgzQTlGREIwMDcyQ0IxNSAvKiBQYWdlTG9hZFN0YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VMb2FkU3RhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUFDNzUzN0UxODNCRTUwRjAwNzJDQjE1IC8qIERhdGFSZWZlcmVu
Y2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YVJlZmVyZW5jZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzA2NSwyMCArMjgyNCwxMCBAQAogCQkxQUUy
ODY3RjFDN0Y5MkJGMDA2OUFDNEYgLyogX1dLV2Vic2l0ZURhdGFTaXplSW50ZXJuYWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLV2Vic2l0ZURhdGFTaXplSW50ZXJuYWwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFFMjg2ODExQzdGOTM4NjAwNjlBQzRG
IC8qIEFQSVdlYnNpdGVEYXRhUmVjb3JkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEFQSVdlYnNpdGVEYXRhUmVjb3JkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUFFMjg2ODIxQzdGOTM4NjAwNjlBQzRGIC8qIEFQSVdlYnNpdGVEYXRhUmVjb3Jk
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSVdlYnNpdGVEYXRhUmVjb3Jk
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBRTQ5NzY2MTFGRjY1OEUwMDQ4QjQ2
NCAvKiBOUEpTT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5QSlNP
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFFNDk3NjcxMUZGNjU4RTAw
NDhCNDY0IC8qIE5QSlNPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTlBKU09iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBRTQ5
ODc2MTFGRjdGQUEwMDQ4QjQ2NCAvKiBKU05QT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTTlBPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MUFFNDk4NzcxMUZGN0ZBQTAwNDhCNDY0IC8qIEpTTlBPYmplY3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNOUE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTFBRTQ5QTQ3MTFGRkE4Q0UwMDQ4QjQ2NCAvKiBKU05QTWV0aG9kLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTlBNZXRob2QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMUFFNDlBNDgxMUZGQThDRTAwNDhCNDY0IC8qIEpTTlBNZXRob2Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNOUE1ldGhvZC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRTUyRjkzMTkyMDFGNkIwMEExRkEzNyAv
KiBXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQUU1MkY5NDE5MjAxRjZCMDBBMUZBMzcgLyogV0tDb250ZXh0Q29u
ZmlndXJhdGlvblJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0NvbnRl
eHRDb25maWd1cmF0aW9uUmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBRTVC
N0Y5MTFFN0FFRDIwMEJBNjc2NyAvKiBOZXRzY2FwZVBsdWdpbk1hYy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHNjYXBlUGx1Z2luTWFjLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQUVFNTcyMzI0MDlGMTQyMDAyMDA1RDYgLyogUXVpY2tM
b29rVGh1bWJuYWlsTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFF1aWNrTG9va1RodW1ibmFpbExv
YWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUVFNTcyNDI0MDlGMTQyMDAy
MDA1RDYgLyogUXVpY2tMb29rVGh1bWJuYWlsTG9hZGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBRdWlja0xvb2tUaHVtYm5haWxMb2FkZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTFBRUZDQzEwMTFEMDFGOTYwMDgyMTlEMyAvKiBQbHVnaW5JbmZvU3RvcmUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luSW5mb1N0b3JlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTFBRUZDQzExMTFEMDFGOTYwMDgyMTlEMyAvKiBQbHVnaW5JbmZv
U3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGx1Z2luSW5m
b1N0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFFRkNDQkMxMUQwMkM1
RTAwODIxOUQzIC8qIFBsdWdpbkluZm9TdG9yZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFBsdWdpbkluZm9TdG9yZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUFFRkQyNzgxMUQxNkM4MTAwODIxOUQzIC8qIEFyZ3VtZW50Q29kZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJndW1lbnRDb2Rlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUVGRDJGNjExRDE4MDdCMDA4MjE5RDMgLyogQXJn
dW1lbnRDb2RlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJndW1lbnRD
b2RlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFGMDVEODQxNDY4ODM0ODAw
OEIxRTgxIC8qIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5n
QXJlYVByb3h5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzg0MiwxMiArMzU5
MSw2IEBACiAJCTQxMTJCNTQ3MUY5RkQzQUIwMEU2Nzk4NiAvKiBOZXR3b3JrUlRDUmVzb2x2ZXJD
b2NvYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrUlRD
UmVzb2x2ZXJDb2NvYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMTJCNTQ4
MUY5RkQzQUMwMEU2Nzg3NSAvKiBOZXR3b3JrUlRDUmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya1JUQ1Jlc29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQxMTJCNTQ4MUY5RkQzQUMwMEU2Nzk4NiAvKiBOZXR3b3JrUlRDUmVzb2x2
ZXJDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrUlRDUmVz
b2x2ZXJDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTEyRUREMjIwRTQw
NzczMDBCRUE5MkEgLyogY29tLmZ0c2FmZS5OUEFQSS1Db3JlLVNhZmUtU29mdEtleWJhb3JkLnBs
dWdpbi5yZmMxMDM0aWRlbnRpZmllci5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSAiY29tLmZ0
c2FmZS5OUEFQSS1Db3JlLVNhZmUtU29mdEtleWJhb3JkLnBsdWdpbi5yZmMxMDM0aWRlbnRpZmll
ci5zYiI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxMTJFREQzMjBFNDA3NzQwMEJF
QTkyQSAvKiBjb20uY2ZjYS5ucFNlY0VkaXRDdGwuTUFDLkJPQy5wbHVnaW4uc2IgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gY29tLmNmY2EubnBTZWNFZGl0Q3RsLk1BQy5CT0MucGx1Z2luLnNiOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTEyRURENTIwRTQwNzc0MDBCRUE5MkEgLyog
Y29tLmNtYmNoaW5hLkNNQlNlY3VyaXR5LnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGNvbS5j
bWJjaGluYS5DTUJTZWN1cml0eS5zYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDEx
MkVERDcyMEU0MDc3NTAwQkVBOTJBIC8qIGNvbS5hcHBsZS5OUFNhZmVTdWJtaXQuc2IgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gY29tLmFwcGxlLk5QU2FmZVN1Ym1pdC5zYjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNDExMkVERDgyMEU0MDc3NTAwQkVBOTJBIC8qIGNvbS5hcHBsZS5O
UFNhZmVJbnB1dC5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBjb20uYXBwbGUuTlBTYWZlSW5w
dXQuc2I7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxMTJFREQ5MjBFNDA3NzUwMEJF
QTkyQSAvKiBjb20uYXBwbGUuQm9jb21TdWJtaXRDdHJsLnNiICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IGNvbS5hcHBsZS5Cb2NvbVN1Ym1pdEN0cmwuc2I7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQxMThEQzFCMjFFNkQxMUEwMERFMDRDNyAvKiBXZWJzaXRlRGF0YVN0b3JlQ2xpZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYnNpdGVEYXRhU3RvcmVDbGll
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDExQThERDkyMEREQjYwNTAwNjBE
MzRGIC8qIFdLTW9ja01lZGlhRGV2aWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdLTW9ja01lZGlhRGV2aWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQx
MUE4RERBMjBEREI2MDUwMDYwRDM0RiAvKiBXS01vY2tNZWRpYURldmljZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS01vY2tNZWRpYURldmljZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zODc4LDE2ICszNjIxLDEyIEBACiAJCTQxMzVGQkNG
MUY0RkI3RjIwMDc0QzQ3QiAvKiBDYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEzNUZCRDAxRjRGQjdGMjAwNzRDNDdC
IC8qIENhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDEzQzhCMTMyNTUxNkJGQTAwRTY1MDU1IC8qIExpYldlYlJUQ0NvZGVjcy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IExpYldlYlJUQ0NvZGVjcy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNDEzQ0NENEYyMERFQkMyRjAwNjVBMjFBIC8qIGNvbS5nb29nbGUuZ29v
Z2xldGFsa2Jyb3dzZXJwbHVnaW4uc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gY29tLmdvb2ds
ZS5nb29nbGV0YWxrYnJvd3NlcnBsdWdpbi5zYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNDE0Mzc1MUIyMEVBRUExRTAwRkFEMDZDIC8qIGNuLm1pY3JvZG9uZS5jbWIuc2FmYXJpLnNi
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGNuLm1pY3JvZG9uZS5jbWIuc2FmYXJpLnNiOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTRERDM3ODIwQkY0M0VBMDA2OTU5RkIgLyogY29t
LmNpc2NvLndlYmV4LnBsdWdpbi5ncGM2NC5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBjb20u
Y2lzY28ud2ViZXgucGx1Z2luLmdwYzY0LnNiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0MTUwQTVBMDIzRTA2QzkxMDA1MTI2NEEgLyogR1BVUHJvY2Vzc1Nlc3Npb25QYXJhbWV0ZXJz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdQVVByb2Nlc3NTZXNzaW9uUGFy
YW1ldGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTUxODUzNTIyMjcwNEY1
MDA1NDMwQzYgLyogU2VydmljZVdvcmtlckZldGNoVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTZXJ2aWNlV29ya2VyRmV0Y2hUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQxNTE4NTM2MjIyNzA0RjYwMDU0MzBDNiAvKiBTZXJ2aWNlV29ya2VyRmV0
Y2hUYXNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlcnZpY2VX
b3JrZXJGZXRjaFRhc2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTUxODUz
ODIyMjcwRjUzMDA1NDMwQzYgLyogU2VydmljZVdvcmtlckZldGNoVGFzay5tZXNzYWdlcy5pbiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTZXJ2aWNlV29ya2VyRmV0Y2hUYXNrLm1lc3NhZ2VzLmlu
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTUxRTVDMzFGQkI5MEE5MDBFNDdFMkQg
LyogRm9ybURhdGFSZWZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Rm9ybURhdGFSZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE1Nzg1
MzAyMTI3NkI2RjAwREQzODAwIC8qIGNvcHktd2ViY29udGVudC1yZXNvdXJjZXMtdG8tcHJpdmF0
ZS1oZWFkZXJzLnNoICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5zY3JpcHQuc2g7IHBhdGggPSAiY29weS13ZWJjb250ZW50LXJlc291cmNlcy10
by1wcml2YXRlLWhlYWRlcnMuc2giOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTU3
RTRBRjIwRTJFQzk4MDBBNkMwRDcgLyogY29tLmdvb2dsZS5vMWRicm93c2VycGx1Z2luLnNiICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IGNvbS5nb29nbGUubzFkYnJvd3NlcnBsdWdpbi5zYjsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE1ODY0OUEyM0JFMDkyNDAwQTBBNjFFIC8qIFJU
Q0VuY29kZXJJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJU
Q0VuY29kZXJJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNjAw
OEIxMjVEQTg2QjkwMEU4OTJGRSAvKiBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlUHJveHkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZVByb3h5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNjAwOEIyMjVEQTg5NUIwMEU4OTJGRSAvKiBSZW1vdGVS
ZWFsdGltZU1lZGlhU291cmNlUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlUmVh
bHRpbWVNZWRpYVNvdXJjZVByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTQ3ODksNyArNDUyOCw2IEBACiAJCTdBM0FDRTFBMUVFRUY3OEMwMEE4NjRBNCAvKiBBUElJbmpl
Y3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQVBJSW5qZWN0ZWRCdW5kbGVQYWdlTG9hZGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdBM0ZFQ0ExMjFGN0MwOTcwMEYyNjdDRCAvKiBTdG9yYWdlQWNjZXNz
U3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0b3JhZ2VBY2Nlc3NT
dGF0dXMuaDsgcGF0aCA9IENsYXNzaWZpZXIvU3RvcmFnZUFjY2Vzc1N0YXR1cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QTQxRTlGQTIxRjgxREFDMDBCODhDREIgLyogU2hvdWxk
R3JhbmRmYXRoZXJTdGF0aXN0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oOyBwYXRoID0gQ2xhc3NpZmllci9TaG91bGRH
cmFuZGZhdGhlclN0YXRpc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0E1
RTM5NDkxRDVCRDhBNzAwQjRCN0NFIC8qIGNvbS5tYWNyb21lZGlhLkZsYXNoIFBsYXllciBFU1Iu
cGx1Z2luLnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9ICJjb20ubWFjcm9tZWRpYS5GbGFzaCBQ
bGF5ZXIgRVNSLnBsdWdpbi5zYiI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBNzhG
RjJFMjI0MTkxNzUwMDk2NDgzRSAvKiBXS1N0b3JhZ2VBY2Nlc3NBbGVydC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXS1N0b3JhZ2VBY2Nlc3NBbGVydC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3QTc4RkYyRjIyNDE5MTc2MDA5NjQ4M0UgLyogV0tTdG9yYWdl
QWNjZXNzQWxlcnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBX
S1N0b3JhZ2VBY2Nlc3NBbGVydC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E4
MjFGNDkxRTJGNjVERDAwNjA0NTc3IC8qIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5LmNwcDsgcGF0aCA9IEN1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00ODQ5LDcgKzQ1ODcsNiBAQAogCQk3QzA2NUYyQTFDOENEOTVGMDBDMkQ5NTAgLyogV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QzEzNUFBNjE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5JbmZv
cm1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS1BsdWdp
bkluZm9ybWF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MxMzVBQTcx
NzNCMEJDQTAwNTg2QUUyIC8qIFdLUGx1Z2luSW5mb3JtYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0tQbHVnaW5JbmZvcm1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk3QzEzNUFBQTE3M0IwQ0ZGMDA1ODZBRTIgLyogUGx1Z2luSW5mb3JtYXRp
b25NYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbHVnaW5J
bmZvcm1hdGlvbk1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MxQkEzM0Ix
QTRBMEU2MDAwNDNFMjQ5IC8qIEFQSURpY3Rpb25hcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQVBJRGljdGlvbmFyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdDMUJBMzNDMUE0QTBFNjAwMDQzRTI0OSAvKiBBUElEaWN0aW9uYXJ5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSURpY3Rpb25hcnkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MyNDEzMDAxQUFDRkE3NTAwQTU4QzE1IC8qIF9XS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNDg2NSw4ICs0NjAyLDYgQEAKIAkJN0MzODc0MzMxNzJGNTYxNTAwMUJE
ODhBIC8qIFBhZ2VCYW5uZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUGFnZUJhbm5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDM0EwNkE1
MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDM0EwNkE2MUFBQjkwM0UwMDlENzRCQSAv
KiBBUElDb250ZW50UnVsZUxpc3RTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBUElDb250ZW50UnVsZUxpc3RTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk3QzNGOEM4RTE3M0FGNTJEMDA3QjdGMzkgLyogUGx1Z2luSW5mb3JtYXRpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGx1Z2luSW5mb3JtYXRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QzNGOEM4RjE3M0FGNTJEMDA3QjdGMzkg
LyogUGx1Z2luSW5mb3JtYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGx1Z2luSW5mb3JtYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M0Njk0
QzcxQTRCNEVBMDAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJQYXN0ZWJvYXJkUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJQ
YXN0ZWJvYXJkUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJP
RFVDVFNfRElSOyB9OwogCQk3QzQ2OTRDODFBNEI0RUExMDBBRDU4NDUgLyogV2ViUGFzdGVib2Fy
ZFByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViUGFz
dGVib2FyZFByb3h5TWVzc2FnZXMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2Vi
UGFzdGVib2FyZFByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJ
UjsgfTsKIAkJN0M0Njk0Q0IxQTRCNTEwQTAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eUNv
Y29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUGFzdGVi
b2FyZFByb3h5Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00OTA5LDEy
ICs0NjQ0LDYgQEAKIAkJN0NCMTAwRUUxRkEyRDc0QTAwMTcyOUVFIC8qIFdlYlByZWZlcmVuY2Vz
S2V5cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJQcmVmZXJlbmNlc0tleXMuY3BwOyBwYXRo
ID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJQcmVmZXJlbmNlc0tleXMuY3BwOyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk3Q0IxMDBFRjFGQTJENzRCMDAxNzI5RUUg
LyogV2ViUHJlZmVyZW5jZXNLZXlzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlByZWZlcmVuY2VzS2V5
cy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJQcmVmZXJlbmNlc0tleXMuaDsg
c291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJN0NCMTAwRjAxRkEyRDc4NDAw
MTcyOUVFIC8qIFdlYlByZWZlcmVuY2VzU3RvcmVEZWZhdWx0c01hcC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBXZWJQcmVmZXJlbmNlc1N0b3JlRGVmYXVsdHNNYXAuY3BwOyBwYXRoID0gRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9XZWJQcmVmZXJlbmNlc1N0b3JlRGVmYXVsdHNNYXAuY3BwOyBzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQk3Q0IxNkZFMjE3MjRCOUI1MDA3QTBB
OTUgLyogY29tLmFwcGxlLmlzdC5kcy5hcHBsZWNvbm5lY3Qud2VicGx1Z2luLnNiICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IGNvbS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0LndlYnBsdWdpbi5z
Yjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0NCMTZGRTMxNzI0QjlCNTAwN0EwQTk1
IC8qIGNvbS5hcHBsZS5RdWlja1RpbWUgUGx1Z2luLnBsdWdpbi5zYiAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSAiY29tLmFwcGxlLlF1aWNrVGltZSBQbHVnaW4ucGx1Z2luLnNiIjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0NCMTZGRTQxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5hcHBs
ZS5XZWJLaXQucGx1Z2luLWNvbW1vbi5zYi5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSAiY29t
LmFwcGxlLldlYktpdC5wbHVnaW4tY29tbW9uLnNiLmluIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJN0NCMTZGRTUxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5tYWNyb21lZGlhLkZsYXNo
IFBsYXllci5wbHVnaW4uc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gImNvbS5tYWNyb21lZGlh
LkZsYXNoIFBsYXllci5wbHVnaW4uc2IiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3
Q0IxNkZFNjE3MjRCOUI1MDA3QTBBOTUgLyogY29tLm1pY3Jvc29mdC5TaWx2ZXJsaWdodFBsdWdp
bi5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBjb20ubWljcm9zb2Z0LlNpbHZlcmxpZ2h0UGx1
Z2luLnNiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3Q0IxNkZFNzE3MjRCOUI1MDA3
QTBBOTUgLyogY29tLm9yYWNsZS5qYXZhLkphdmFBcHBsZXRQbHVnaW4uc2IgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gY29tLm9yYWNsZS5qYXZhLkphdmFBcHBsZXRQbHVnaW4uc2I7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQjM2NUE4MUQzMURCNzAwMDcxNThDQSAvKiBfV0tVc2Vy
SW5pdGlhdGVkQWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1Vz
ZXJJbml0aWF0ZWRBY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NCMzY1
QTkxRDMxREI3MDAwNzE1OENBIC8qIF9XS1VzZXJJbml0aWF0ZWRBY3Rpb24ubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBfV0tVc2VySW5pdGlhdGVkQWN0aW9uLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0IzNjVBQzFEMzFEQzEwMDA3MTU4Q0Eg
LyogX1dLVXNlckluaXRpYXRlZEFjdGlvbkludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IF9XS1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNDkzMCw4ICs0NjU5LDYgQEAKIAkJN0NENUVCQkExNzQ2QTgz
RTAwMEMxQzQ1IC8qIFdLQmFzZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXS0Jhc2VNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NENUVCQkMxNzQ2
QjA0QzAwMEMxQzQ1IC8qIFdLVHlwZVJlZldyYXBwZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXS1R5cGVSZWZXcmFwcGVyLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3Q0Q1RUJCRDE3NDZCMDRDMDAwQzFDNDUgLyogV0tUeXBlUmVmV3JhcHBl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1R5cGVSZWZXcmFwcGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDRDYyMjc1MTczOUQ4NjMwMDVCRDdGRiAv
KiBQbHVnaW5TYW5kYm94UHJvZmlsZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFBsdWdpblNhbmRib3hQcm9maWxlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk3Q0Q2MjI3NjE3MzlEODYzMDA1QkQ3RkYgLyogUGx1Z2luU2FuZGJveFByb2ZpbGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luU2FuZGJveFByb2ZpbGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NERTczQTAxRjlEQTM3QjAwMzkwMzEy
IC8qIFdlYlByZWZlcmVuY2VzRGVmYXVsdFZhbHVlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0NERTczQTIxRjlEQTU5NzAwMzkwMzEyIC8qIFByZWZlcmVuY2VzVGVt
cGxhdGVzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
Zm9sZGVyOyBwYXRoID0gUHJlZmVyZW5jZXNUZW1wbGF0ZXM7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdDREU3M0EzMUY5REFCNjUwMDM5MDMxMiAvKiBXZWJQcmVmZXJlbmNlc0RlZmlu
aXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaDsgcGF0
aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViUHJlZmVyZW5jZXNEZWZpbml0aW9ucy5oOyBz
b3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtNTI1Myw3ICs0OTgwLDYgQEAK
IAkJOUJGNUVDNjMyNTQxMEU5OTAwOTg0RTc3IC8qIEpTSVBDQmluZGluZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0lQQ0JpbmRpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5RUM1MzJBMjI0NDdGQkFEMDAyMTUyMTYgLyogR2VvbG9jYXRpb25JZGVudGlmaWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEdlb2xvY2F0aW9uSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5RjU0Rjg4RTE2NDg4RTg3MDA3REY4MUEgLyogQXV4aWxpYXJ5UHJvY2Vzc01h
Yy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEF1eGlsaWFyeVBy
b2Nlc3NNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTlGNTRGODk0MTY0OEFF
MEUwMDdERjgxQSAvKiBQbHVnaW5Qcm9jZXNzTWFuYWdlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsdWdpblByb2Nlc3NNYW5hZ2VyTWFjLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5RkI1RjM5MjE2OUU2QTgwMDAyQzI1QkYgLyogV0tD
b250ZXh0UHJpdmF0ZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFt
ZSA9IFdLQ29udGV4dFByaXZhdGVNYWMubW07IHBhdGggPSBtYWMvV0tDb250ZXh0UHJpdmF0ZU1h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUZCNUYzOTMxNjlFNkE4MDAwMkMy
NUJGIC8qIFdLQ29udGV4dFByaXZhdGVNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gV0tDb250ZXh0UHJpdmF0ZU1hYy5oOyBwYXRoID0gbWFjL1dLQ29udGV4dFByaXZhdGVN
YWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTEwNDZFOUYyMDc5MjYzMTAwRjBD
NUQ4IC8qIFdLUERGVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS1BERlZpZXcuaDsgcGF0aCA9IGlv
cy9XS1BERlZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU2MDAsOSArNTMy
Niw3IEBACiAJCUJDODI4M0E4MTZCNEJEOTEwMEEyNzhGRSAvKiBOZXR3b3JrU2VydmljZUVudHJ5
UG9pbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOZXR3b3JrU2VydmljZUVudHJ5UG9pbnQu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDODI4M0FCMTZCNEJFQUQwMEEyNzhG
RSAvKiBOZXR3b3JrU2VydmljZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBOZXR3b3JrU2Vydmlj
ZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4MjgzQjExNkI0QkY3
NzAwQTI3OEZFIC8qIGNvbS5hcHBsZS5XZWJLaXQuTmV0d29ya2luZy54cGMgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJ3cmFwcGVyLnhwYy1zZXJ2aWNl
IjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gY29tLmFwcGxlLldlYktpdC5OZXR3b3JraW5n
LnhwYzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJQkM4MjgzRUYxNkI0
RjhFMjAwQTI3OEZFIC8qIFBsdWdpblNlcnZpY2VFbnRyeVBvaW50Lm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gUGx1Z2luU2VydmljZUVudHJ5UG9pbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDODI4M0Y0MTZCNEZDNTMwMEEyNzhGRSAvKiBQbHVnaW5TZXJ2aWNlLnhjY29u
ZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC54Y2NvbmZpZzsgcGF0aCA9IFBsdWdpblNlcnZpY2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUJDODI4NDFGMTZCNEZERjYwMEEyNzhGRSAvKiBjb20uYXBwbGUuV2Vi
S2l0LlBsdWdpbi42NC54cGMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRG
aWxlVHlwZSA9ICJ3cmFwcGVyLnhwYy1zZXJ2aWNlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRo
ID0gY29tLmFwcGxlLldlYktpdC5QbHVnaW4uNjQueHBjOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJP
RFVDVFNfRElSOyB9OwogCQlCQzg0NTJBNTExNjJDODA5MDBDQUI5QjUgLyogRHJhd2luZ0FyZWEu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRHJhd2luZ0FyZWEuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzg0NTJBNjExNjJDODA5MDBDQUI5QjUg
LyogRHJhd2luZ0FyZWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRHJhd2lu
Z0FyZWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4NTdFODUxMkI3MUVCQjAw
RURFQjJFIC8qIFdlYlBhZ2VQcm94eU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdlYlBhZ2VQcm94eU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTU3NDEsNyArNTQ2NSw2IEBACiAJCUJDRjY5RkExMTE3NkQwMTQwMDQ3MUE1MiAvKiBB
UElOYXZpZ2F0aW9uRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBBUElOYXZpZ2F0aW9uRGF0YS5jcHA7IHBhdGggPSBVSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRp
b25EYXRhLmNwcDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwogCQlCQ0Y2OUZBNzExNzZE
MUNCMDA0NzFBNTIgLyogV0tOYXZpZ2F0aW9uRGF0YVJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXS05hdmlnYXRpb25EYXRhUmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDRjY5RkE4MTE3NkQxQ0IwMDQ3MUE1MiAvKiBXS05hdmlnYXRpb25EYXRhUmVm
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLTmF2aWdhdGlvbkRh
dGFSZWYuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQ0ZDQTg5NTE2REU5NkNC
MDAwNzQwNjkgLyogUGx1Z2luU2VydmljZS5JbmZvLnBsaXN0ICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5wbGlzdC54bWw7IHBhdGggPSBQbHVn
aW5TZXJ2aWNlLkluZm8ucGxpc3Q7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRkQ1
NDg5MTMyRDgyNjgwMDU1RDgxNiAvKiBXS0Vycm9yQ0YuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV0tFcnJvckNGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkNGRDU0OEExMzJEODI2ODAwNTVEODE2IC8qIFdLRXJyb3JDRi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Vycm9yQ0YuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQkZBNjE3OUUxMkYwQjk5RDAwMzNFMENBIC8qIFdLVmlld1ByaXZhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tWaWV3UHJpdmF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNjA4OCw3ICs1ODExLDYgQEAKIAkJRTE4RTY5NDcxNjlCNzdD
ODAwOUI2NjcwIC8qIFNlY0l0ZW1TaGltLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNlY0l0ZW1TaGltLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTE4RTY5NDgxNjlCNzdDODAwOUI2NjcwIC8qIFNlY0l0ZW1TaGltLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNlY0l0ZW1TaGltLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUxOTY3RTM3MTUwQUI1RTIwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViUHJvY2Vzcy5z
YiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYjsgcGF0aCA9
IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvY29tLmFwcGxlLldlYlByb2Nlc3Muc2I7IHNvdXJjZVRy
ZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCUUxOUJEQTg0MTkzNjVGNEIwMEI5N0Y1NyAv
KiBjb20uYXBwbGUuYXBwc3RvcmUuQ29kZVJlZGVlbWVyTmV0c2NhcGVQbHVnaW4uc2IgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gY29tLmFwcGxlLmFwcHN0b3JlLkNvZGVSZWRlZW1lck5ldHNjYXBl
UGx1Z2luLnNiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTlCREE4ODE5MzY4NkE0
MDBCOTdGNTcgLyogU2FuZGJveFV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTYW5kYm94VXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUxQUVBMjJEMTQ2ODdCREIwMDgwNDU2OSAvKiBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tGdWxsS2V5Ym9hcmRBY2Nlc3NX
YXRjaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQUVBMjJFMTQ2ODdCREIw
MDgwNDU2OSAvKiBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MjU4LDEzICs1OTgwLDYgQEAKIC8qIEVu
ZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1
aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQkxQUMyNUZBRTEyQTQ4RUE3MDBCRDI2NzEgLyogRnJhbWV3
b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRB
Y3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwogCQkyRDlGQjIxRTIzNzUyMzgz
MDA0OUY5MzYgLyogRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWls
ZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTYzMzUsMTUgKzYw
NTAsNiBAQAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwotCQlCQzgyODQxQzE2QjRGREY2MDBBMjc4RkUgLyogRnJhbWV3b3JrcyAqLyA9IHsK
LQkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0g
MjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJCTM3MUU2OTU5MUFFRDdBMEYwMDQ5NUU0OCAv
KiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAotCQkJCUJDODI4NDRGMTZC
NTA4OTgwMEEyNzhGRSAvKiBXZWJLaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCi0JCQkp
OwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07CiAJCUJD
REMzMDhEMTVGREI5OUEwMDZCNjY5NSAvKiBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0gUEJY
RnJhbWV3b3Jrc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpA
QCAtNjM3MCwxMyArNjA3NiwxMSBAQAogCQkJCTVDMTU3OURBMjcxNjVCMkYwMEVENTI4MCAvKiB3
ZWJwdXNoZCAqLywKIAkJCQkyRDlGQjIyODIzNzUyMzgzMDA0OUY5MzYgLyogY29tLmFwcGxlLldl
YktpdC5HUFUueHBjICovLAogCQkJCUJDODI4M0IxMTZCNEJGNzcwMEEyNzhGRSAvKiBjb20uYXBw
bGUuV2ViS2l0Lk5ldHdvcmtpbmcueHBjICovLAotCQkJCUJDODI4NDFGMTZCNEZERjYwMEEyNzhG
RSAvKiBjb20uYXBwbGUuV2ViS2l0LlBsdWdpbi42NC54cGMgKi8sCiAJCQkJNTc0MkEyRjcyNTM1
NjEzRjAwQjdCQTE0IC8qIGNvbS5hcHBsZS5XZWJLaXQuV2ViQXV0aG4ueHBjICovLAogCQkJCTM3
MkVCQjQ2MjAxN0U2NDMwMDA4NTA2NCAvKiBjb20uYXBwbGUuV2ViS2l0LldlYkNvbnRlbnQuRGV2
ZWxvcG1lbnQueHBjICovLAogCQkJCUJDM0RFNDY2MTVBOTE3NjMwMDhEMjZGQyAvKiBjb20uYXBw
bGUuV2ViS2l0LldlYkNvbnRlbnQueHBjICovLAogCQkJCUNEOTU0OTM1MjYxNTkwMDQwMDgzNzJE
OSAvKiBsaWJXZWJLaXRTd2lmdC5keWxpYiAqLywKIAkJCQlBMTZFNjYwMDI1ODE5MzA4MDBFRTE3
NDkgLyogTWVkaWFGb3JtYXRSZWFkZXIuYnVuZGxlICovLAotCQkJCTFBQzI1RkIwMTJBNDhFQTcw
MEJEMjY3MSAvKiBQbHVnaW5Qcm9jZXNzU2hpbS5keWxpYiAqLywKIAkJCQk4REMyRUY1QjA0ODZB
Njk0MDA5OEIyMTYgLyogV2ViS2l0LmZyYW1ld29yayAqLywKIAkJCSk7CiAJCQluYW1lID0gUHJv
ZHVjdHM7CkBAIC02NTgzLDcgKzYyODcsNiBAQAogCQkJCUJDMDMyREMzMTBGNDM4MjYwMDU4QzE1
QSAvKiBVSVByb2Nlc3MgKi8sCiAJCQkJQkMwMzJENUMxMEY0MzZENTAwNThDMTVBIC8qIFdlYlBy
b2Nlc3MgKi8sCiAJCQkJNTEwQ0M3REExNjEzOEUwMTAwRDAzRUQzIC8qIE5ldHdvcmtQcm9jZXNz
ICovLAotCQkJCTFBMEVDNkIwMTI0QkJEMzYwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzICovLAog
CQkJCTJEOUZCMUZGMjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVQcm9jZXNzICovLAogCQkJCTU3NDJB
MkZGMjUzNTc1ODAwMEI3QkExNCAvKiBXZWJBdXRoblByb2Nlc3MgKi8sCiAJCQkJQzBDRTcyOUQx
MjQ3RTcxRDAwQkMwRUM0IC8qIERlcml2ZWQgU291cmNlcyAqLywKQEAgLTY2MTMsNyArNjMxNiw2
IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTM3Mjg4Nzk4MjAw
MEFBMzcwMEY0RUY1RCAvKiBpb3MgKi8sCi0JCQkJN0NCMTZGRTExNzI0QjlCNTAwN0EwQTk1IC8q
IFBsdWdJblNhbmRib3hQcm9maWxlcyAqLywKIAkJCQk2QkU5NjlCRjFFNTRENDUyMDA4Qjc0ODMg
LyogUmVzb3VyY2VMb2FkU3RhdGlzdGljcyAqLywKIAkJCQlBNzhDQ0RENTE5M0FDOUUzMDA1RUND
MjUgLyogU2FuZGJveFByb2ZpbGVzICovLAogCQkJCTZEOEE5MUE1MTFGMEVGRDEwMEREMDFGRSAv
KiBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYi5pbiAqLywKQEAgLTY3MDAsNDAgKzY0MDIsNiBAQAog
CQkJcGF0aCA9IFhSOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJMUEwRUM2
QjAxMjRCQkQzNjAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3MgKi8gPSB7Ci0JCQlpc2EgPSBQQlhH
cm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCUJDODI4Mzg2MTZCNDVFRjIwMEEyNzhGRSAvKiBF
bnRyeVBvaW50ICovLAotCQkJCTFBMEVDN0ZEMTI0QkQ0MDIwMDdFRjRBNSAvKiBtYWMgKi8sCi0J
CQkJMUE4RUY0Q0ExMjUyNDAzNzAwRjcwNjdGIC8qIFBsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAg
Ki8sCi0JCQkJMUE4RUY0QzkxMjUyNDAzNzAwRjcwNjdGIC8qIFBsdWdpbkNvbnRyb2xsZXJQcm94
eS5oICovLAotCQkJCTFBOEVGOTQxMTI1MkFFODQwMEY3MDY3RiAvKiBQbHVnaW5Db250cm9sbGVy
UHJveHkubWVzc2FnZXMuaW4gKi8sCi0JCQkJMUExNzk3N0QxMzdFRTgyQzAwRjk3RDQ1IC8qIFBs
dWdpbkNyZWF0aW9uUGFyYW1ldGVycy5jcHAgKi8sCi0JCQkJMUExNzk3N0UxMzdFRTgyQzAwRjk3
RDQ1IC8qIFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5oICovLAotCQkJCTFBMDQzOTc1MTI0RDAz
NDgwMEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNzLmNwcCAqLywKLQkJCQkxQTA0Mzk3NDEyNEQwMzQ4
MDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzcy5oICovLAotCQkJCTFBMEVDNkIxMTI0QkJEMzYwMDdF
RjRBNSAvKiBQbHVnaW5Qcm9jZXNzLm1lc3NhZ2VzLmluICovLAotCQkJCTFBMDQzQTA4MTI0RDEx
QTkwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbi5jcHAgKi8sCi0JCQkJMUEwNDNBMDcx
MjREMTFBOTAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uLmggKi8sCi0JCQkJMUEwNDNG
NTkxMjUxNENGMzAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluICov
LAotCQkJKTsKLQkJCXBhdGggPSBQbHVnaW5Qcm9jZXNzOwotCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKLQkJCXRhYldpZHRoID0gODsKLQkJCXVzZXNUYWJzID0gMDsKLQkJfTsKLQkJMUEwRUM3
RkQxMjRCRDQwMjAwN0VGNEE1IC8qIG1hYyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJ
Y2hpbGRyZW4gPSAoCi0JCQkJN0NCMTZGRTQxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5hcHBsZS5X
ZWJLaXQucGx1Z2luLWNvbW1vbi5zYi5pbiAqLywKLQkJCQkxQTJEOTFBNTEyODFENzM5MDAxRUI5
NjIgLyogUGx1Z2luQ29udHJvbGxlclByb3h5TWFjLm1tICovLAotCQkJCTFBQTQ3OTIyMTJBNTlG
RDkwMDgyMzZDMyAvKiBQbHVnaW5Qcm9jZXNzTWFjLm1tICovLAotCQkJCTFBQzI1Rjg5MTJBNDhF
MDMwMEJEMjY3MSAvKiBQbHVnaW5Qcm9jZXNzU2hpbS5oICovLAotCQkJCTFBQzI1RjhBMTJBNDhF
MDMwMEJEMjY3MSAvKiBQbHVnaW5Qcm9jZXNzU2hpbS5tbSAqLywKLQkJCSk7Ci0JCQlwYXRoID0g
bWFjOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJMUE0M0U4MjYxODhGMzhF
MjAwOUU0RDMwIC8qIERlcHJlY2F0ZWQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKApAQCAtNjc4MCwyNyArNjQ0OCw2IEBACiAJCQlwYXRoID0gQ29jb2E7CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQkxQTRBOUM1MjEyQjgxNkNGMDA4RkU5ODQg
LyogTmV0c2NhcGUgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAot
CQkJCTFBNEE5Qzk4MTJCODIxQzAwMDhGRTk4NCAvKiBtYWMgKi8sCi0JCQkJMUE0QTlDNTMxMkI4
MTZDRjAwOEZFOTg0IC8qIE5ldHNjYXBlUGx1Z2luTW9kdWxlLmNwcCAqLywKLQkJCQkxQTRBOUM1
NDEyQjgxNkNGMDA4RkU5ODQgLyogTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCAqLywKLQkJCQk3QzNG
OEM4RTE3M0FGNTJEMDA3QjdGMzkgLyogUGx1Z2luSW5mb3JtYXRpb24uY3BwICovLAotCQkJCTdD
M0Y4QzhGMTczQUY1MkQwMDdCN0YzOSAvKiBQbHVnaW5JbmZvcm1hdGlvbi5oICovLAotCQkJKTsK
LQkJCXBhdGggPSBOZXRzY2FwZTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0J
CTFBNEE5Qzk4MTJCODIxQzAwMDhGRTk4NCAvKiBtYWMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91
cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTFBNEE5Qzk5MTJCODIxQ0QwMDhGRTk4NCAvKiBOZXRz
Y2FwZVBsdWdpbk1vZHVsZU1hYy5tbSAqLywKLQkJCQk3QzEzNUFBQTE3M0IwQ0ZGMDA1ODZBRTIg
LyogUGx1Z2luSW5mb3JtYXRpb25NYWMubW0gKi8sCi0JCQkpOwotCQkJcGF0aCA9IG1hYzsKLQkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07CiAJCTFBNEY5NzY5MTAwRTdCNjYwMDYzN0Ex
OCAvKiBDb25maWd1cmF0aW9ucyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCkBAIC02ODUzLDIxICs2NTAwLDExIEBACiAJCTFBNkZCN0FBMTFFNjRCNDkwMERCMTM3
MSAvKiBQbHVnaW5zICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
LQkJCQkxQTZGQjkwODExRTY2RkIxMDBEQjEzNzEgLyogTmV0c2NhcGUgKi8sCiAJCQkJRTE5OTg3
NUIxNDJCRjlDRjAwQkIyREU3IC8qIFBERiAqLywKIAkJCQlERjc0Mjc1QzI0RjQ5NTUwMDBGOEFC
RTkgLyogUERGUGx1Z2luSWRlbnRpZmllci5oICovLAogCQkJCTFBNkZCN0QwMTFFNjUxRTIwMERC
MTM3MSAvKiBQbHVnaW4uY3BwICovLAogCQkJCTFBNkZCN0QxMTFFNjUxRTIwMERCMTM3MSAvKiBQ
bHVnaW4uaCAqLywKIAkJCQkxQUE1NkYyODExRTkyQkM4MDA2MUI4ODIgLyogUGx1Z2luQ29udHJv
bGxlci5oICovLAotCQkJCTFBMEVDOTA1MTI0QzBBQjgwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbi5jcHAgKi8sCi0JCQkJMUEwRUM5MDQxMjRDMEFCODAwN0VGNEE1IC8qIFBsdWdp
blByb2Nlc3NDb25uZWN0aW9uLmggKi8sCi0JCQkJMUEyQkI2Q0MxNDExN0E1RjAwMEYzNUQ0IC8q
IFBsdWdpblByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluICovLAotCQkJCTFBMEVDOTBFMTI0
QzBBRjUwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuY3BwICovLAot
CQkJCTFBMEVDOTBEMTI0QzBBRjUwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1h
bmFnZXIuaCAqLywKLQkJCQkxQTc4NjVCNjE2Q0FDNkZEMDBBQ0U4M0EgLyogUGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb25NYW5hZ2VyLm1lc3NhZ2VzLmluICovLAotCQkJCTFBMDQzREMwMTI0RkY4NzUw
MEZGQkZCNSAvKiBQbHVnaW5Qcm94eS5jcHAgKi8sCi0JCQkJMUEwNDNEQkYxMjRGRjg3NTAwRkZC
RkI1IC8qIFBsdWdpblByb3h5LmggKi8sCi0JCQkJMUE4RUZBNUIxMjUyQjdDRTAwRjcwNjdGIC8q
IFBsdWdpblByb3h5Lm1lc3NhZ2VzLmluICovLAogCQkJCTFBNkZCN0FDMTFFNjRCNjgwMERCMTM3
MSAvKiBQbHVnaW5WaWV3LmNwcCAqLywKIAkJCQkxQTZGQjdBRDExRTY0QjY4MDBEQjEzNzEgLyog
UGx1Z2luVmlldy5oICovLAogCQkJCTFBMDhGRUUyMUQ1OTNDRjEwMDhCQThDQiAvKiBXZWJQbHVn
aW5JbmZvUHJvdmlkZXIuY3BwICovLApAQCAtNjg3NiwzOSArNjUxMyw2IEBACiAJCQlwYXRoID0g
UGx1Z2luczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCTFBNkZCOTA4MTFF
NjZGQjEwMERCMTM3MSAvKiBOZXRzY2FwZSAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJ
Y2hpbGRyZW4gPSAoCi0JCQkJMUE2RkJBMDExMUU2ODEyQjAwREIxMzcxIC8qIG1hYyAqLywKLQkJ
CQkxQUU0OUE0ODExRkZBOENFMDA0OEI0NjQgLyogSlNOUE1ldGhvZC5jcHAgKi8sCi0JCQkJMUFF
NDlBNDcxMUZGQThDRTAwNDhCNDY0IC8qIEpTTlBNZXRob2QuaCAqLywKLQkJCQkxQUU0OTg3NzEx
RkY3RkFBMDA0OEI0NjQgLyogSlNOUE9iamVjdC5jcHAgKi8sCi0JCQkJMUFFNDk4NzYxMUZGN0ZB
QTAwNDhCNDY0IC8qIEpTTlBPYmplY3QuaCAqLywKLQkJCQkxQTZGQkEyOTExRTY4NjI3MDBEQjEz
NzEgLyogTmV0c2NhcGVCcm93c2VyRnVuY3MuY3BwICovLAotCQkJCTFBNkZCQTI4MTFFNjg2Mjcw
MERCMTM3MSAvKiBOZXRzY2FwZUJyb3dzZXJGdW5jcy5oICovLAotCQkJCTFBNkZCRDI3MTFFNjlC
QzIwMERCMTM3MSAvKiBOZXRzY2FwZVBsdWdpbi5jcHAgKi8sCi0JCQkJMUE2RkJEMjYxMUU2OUJD
MjAwREIxMzcxIC8qIE5ldHNjYXBlUGx1Z2luLmggKi8sCi0JCQkJMUFBNTg4OTExMUVFNzA0MDAw
NjFCODgyIC8qIE5ldHNjYXBlUGx1Z2luU3RyZWFtLmNwcCAqLywKLQkJCQkxQUE1ODg5MDExRUU3
MDQwMDA2MUI4ODIgLyogTmV0c2NhcGVQbHVnaW5TdHJlYW0uaCAqLywKLQkJCQkxQUU0OTc2NzEx
RkY2NThFMDA0OEI0NjQgLyogTlBKU09iamVjdC5jcHAgKi8sCi0JCQkJMUFFNDk3NjYxMUZGNjU4
RTAwNDhCNDY0IC8qIE5QSlNPYmplY3QuaCAqLywKLQkJCQkxQTIxNjFBRjExRjM3NjY0MDA4QUQw
RjUgLyogTlBSdW50aW1lT2JqZWN0TWFwLmNwcCAqLywKLQkJCQkxQTIxNjFBRTExRjM3NjY0MDA4
QUQwRjUgLyogTlBSdW50aW1lT2JqZWN0TWFwLmggKi8sCi0JCQkJMUEyMTYyQUUxMUYzODk3MTAw
OEFEMEY1IC8qIE5QUnVudGltZVV0aWxpdGllcy5jcHAgKi8sCi0JCQkJMUEyMTYyQUYxMUYzODk3
MTAwOEFEMEY1IC8qIE5QUnVudGltZVV0aWxpdGllcy5oICovLAotCQkJKTsKLQkJCXBhdGggPSBO
ZXRzY2FwZTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCTFBNkZCQTAxMTFF
NjgxMkIwMERCMTM3MSAvKiBtYWMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxk
cmVuID0gKAotCQkJCTFBRTVCN0Y5MTFFN0FFRDIwMEJBNjc2NyAvKiBOZXRzY2FwZVBsdWdpbk1h
Yy5tbSAqLywKLQkJCQkxQTJEOTIyMDEyODFEQzFCMDAxRUI5NjIgLyogUGx1Z2luUHJveHlNYWMu
bW0gKi8sCi0JCQkpOwotCQkJcGF0aCA9IG1hYzsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
Ci0JCX07CiAJCTFBN0U4MTRFMTE1MkQyMjQwMDAzNjk1QiAvKiBtYWMgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNjkyMiwxNiArNjUyNiw2IEBACiAJCQlw
YXRoID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJMUE5RkJBOEIx
M0ZGMDRFNjAwREVFRDY3IC8qIG1hYyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hp
bGRyZW4gPSAoCi0JCQkJMUE5RkJBOEMxM0ZGMDRFNjAwREVFRDY3IC8qIFBsdWdpbkNvbXBsZXhU
ZXh0SW5wdXRTdGF0ZS5oICovLAotCQkJCTdDRDYyMjc2MTczOUQ4NjMwMDVCRDdGRiAvKiBQbHVn
aW5TYW5kYm94UHJvZmlsZS5oICovLAotCQkJCTdDRDYyMjc1MTczOUQ4NjMwMDVCRDdGRiAvKiBQ
bHVnaW5TYW5kYm94UHJvZmlsZS5tbSAqLywKLQkJCSk7Ci0JCQlwYXRoID0gbWFjOwotCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJMUFBQzREREUxNkIxQ0JGNjAwOTQyNUUzIC8q
IFdlYlN0b3JhZ2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApA
QCAtNjk2Nyw3ICs2NTYxLDYgQEAKIAkJCQkyREE5NDQ5NjE4ODRFNERBMDBFRDg2REIgLyogaW9z
ICovLAogCQkJCUJDMTExQjVBMTEyRjYyODIwMDMzN0JBQiAvKiBtYWMgKi8sCiAJCQkJNTFBRjFC
M0QyNzFGNDZBNjAwMTUzOEU2IC8qIE5vdGlmaWNhdGlvbnMgKi8sCi0JCQkJMUFBRTA1OEMxMjc5
RENENDAwODUyNDE4IC8qIFBsdWdpbnMgKi8sCiAJCQkJMkQyRTA0NzYxRjVCRUM0RjAwQkIyNUVE
IC8qIFJlbW90ZUxheWVyVHJlZSAqLywKIAkJCQlFMzYxMkZGMDI2RjkwODYyMDA3QjExNzUgLyog
U2FuZGJveCAqLywKIAkJCQkxQUJGNDM3ODFBMzY4MDM1MDAzRkIwRTYgLyogV2Vic2l0ZURhdGEg
Ki8sCkBAIC03MTc3LDMxICs2NzcwLDYgQEAKIAkJCXRhYldpZHRoID0gODsKIAkJCXVzZXNUYWJz
ID0gMDsKIAkJfTsKLQkJMUFBRTA1OEMxMjc5RENENDAwODUyNDE4IC8qIFBsdWdpbnMgKi8gPSB7
Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTFBOUZCQThCMTNGRjA0
RTYwMERFRUQ2NyAvKiBtYWMgKi8sCi0JCQkJMUE0QTlDNTIxMkI4MTZDRjAwOEZFOTg0IC8qIE5l
dHNjYXBlICovLAotCQkJCTFBMkQ4NDhBMTI3RjZBNDkwMDFFQjk2MiAvKiBOUElkZW50aWZpZXJE
YXRhLmNwcCAqLywKLQkJCQkxQTJEODQ4OTEyN0Y2QTQ5MDAxRUI5NjIgLyogTlBJZGVudGlmaWVy
RGF0YS5oICovLAotCQkJCTFBMUZBMzVDMTI3QTQ1QkYwMDUwRTcwOSAvKiBOUE9iamVjdE1lc3Nh
Z2VSZWNlaXZlci5jcHAgKi8sCi0JCQkJMUExRkEzNUIxMjdBNDVCRjAwNTBFNzA5IC8qIE5QT2Jq
ZWN0TWVzc2FnZVJlY2VpdmVyLmggKi8sCi0JCQkJMUEyRDg0MTExMjdGNjRFODAwMUVCOTYyIC8q
IE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLm1lc3NhZ2VzLmluICovLAotCQkJCTFBMUZBMjg0MTI3
QTEzQkMwMDUwRTcwOSAvKiBOUE9iamVjdFByb3h5LmNwcCAqLywKLQkJCQkxQTFGQTI4MzEyN0Ex
M0JDMDA1MEU3MDkgLyogTlBPYmplY3RQcm94eS5oICovLAotCQkJCTFBMUZBMjUyMTI3QTBFNEYw
MDUwRTcwOSAvKiBOUFJlbW90ZU9iamVjdE1hcC5jcHAgKi8sCi0JCQkJMUExRkEyNTExMjdBMEU0
RjAwNTBFNzA5IC8qIE5QUmVtb3RlT2JqZWN0TWFwLmggKi8sCi0JCQkJMUEyRDg0QTIxMjdGNkFE
MTAwMUVCOTYyIC8qIE5QVmFyaWFudERhdGEuY3BwICovLAotCQkJCTFBMkQ4NEExMTI3RjZBRDEw
MDFFQjk2MiAvKiBOUFZhcmlhbnREYXRhLmggKi8sCi0JCQkJMUEzRDYxMDAxM0E3Q0MyQTAwRjk1
RDRFIC8qIFBsdWdpbk1vZHVsZUluZm8uaCAqLywKLQkJCQkxQUM1RkZDMTE3NEJGRDFCMDAwMTQ4
M0QgLyogUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMuaCAqLywKLQkJCQkxQTJEOTBEMTEyODFDOTY2
MDAxRUI5NjIgLyogUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgKi8sCi0JCQkJ
MUEyRDkwRDAxMjgxQzk2NjAwMUVCOTYyIC8qIFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuaCAqLywKLQkJCQkxQTRBOUYzMTEyQjg0NEUyMDA4RkU5ODQgLyogUGx1Z2luUXVpcmtzLmgg
Ki8sCi0JCQkpOwotCQkJcGF0aCA9IFBsdWdpbnM7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwotCQl9OwogCQkxQUFGMDg5RTE5MjY4MUFDMDBCNjM5MEMgLyogVXNlckNvbnRlbnQgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNzQ3MCwzMSArNzAzOCw2
IEBACiAJCQlwYXRoID0gSVBDOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJ
MUFFRkNDMDUxMUQwMUYzNDAwODIxOUQzIC8qIFBsdWdpbnMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhH
cm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTFBRUZDQzBEMTFEMDFGNDEwMDgyMTlEMyAvKiBt
YWMgKi8sCi0JCQkJMUFFRkNDMTExMUQwMUY5NjAwODIxOUQzIC8qIFBsdWdpbkluZm9TdG9yZS5j
cHAgKi8sCi0JCQkJMUFFRkNDMTAxMUQwMUY5NjAwODIxOUQzIC8qIFBsdWdpbkluZm9TdG9yZS5o
ICovLAotCQkJCTFBMEVDNjAyMTI0QTlGMkMwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzTWFuYWdl
ci5jcHAgKi8sCi0JCQkJMUEwRUM2MDExMjRBOUYyQzAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NN
YW5hZ2VyLmggKi8sCi0JCQkJMUEwRUM3NUQxMjRCQzdCMjAwN0VGNEE1IC8qIFBsdWdpblByb2Nl
c3NQcm94eS5jcHAgKi8sCi0JCQkJMUEwRUM3NUMxMjRCQzdCMjAwN0VGNEE1IC8qIFBsdWdpblBy
b2Nlc3NQcm94eS5oICovLAotCQkJCTFBMDQzQjRDMTI0RDVFMzYwMEZGQkZCNSAvKiBQbHVnaW5Q
cm9jZXNzUHJveHkubWVzc2FnZXMuaW4gKi8sCi0JCQkpOwotCQkJcGF0aCA9IFBsdWdpbnM7Ci0J
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQkxQUVGQ0MwRDExRDAxRjQxMDA4MjE5
RDMgLyogbWFjICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJ
CQkxQUVGQ0NCQzExRDAyQzVFMDA4MjE5RDMgLyogUGx1Z2luSW5mb1N0b3JlTWFjLm1tICovLAot
CQkJCTlGNTRGODk0MTY0OEFFMEUwMDdERjgxQSAvKiBQbHVnaW5Qcm9jZXNzTWFuYWdlck1hYy5t
bSAqLywKLQkJCQkxQTJEOTBCQTEyODFDOTMxMDAxRUI5NjIgLyogUGx1Z2luUHJvY2Vzc1Byb3h5
TWFjLm1tICovLAotCQkJKTsKLQkJCXBhdGggPSBtYWM7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwotCQl9OwogCQkxQzBBMTk0MzFDOEZGMUE4MDBGRTBFQkIgLyogQXV0b21hdGlvbiAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC05NTk5LDkgKzkxNDIs
OSBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk1Q0JCNkQ0RDI3
MUY2N0NDMDBGRDFBNUQgLyogY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5wbGlzdCAqLywKLQkJ
CQk1QzE1N0EwQjI3MTdDQTFDMDBFRDUyODAgLyogV2ViUHVzaERhZW1vbk1haW4ubW0gKi8sCiAJ
CQkJNTEyQ0Q2OUQyNzIzMzkzQTAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb24uaCAqLywKIAkJCQk1
MTJDRDY5RTI3MjMzOTNBMDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbi5tbSAqLywKKwkJCQk1QzE1
N0EwQjI3MTdDQTFDMDBFRDUyODAgLyogV2ViUHVzaERhZW1vbk1haW4ubW0gKi8sCiAJCQkpOwog
CQkJcGF0aCA9IHdlYnB1c2hkOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTk3NzAs
MzEgKzkzMTMsNiBAQAogCQkJcGF0aCA9IGNvY29hOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKIAkJfTsKLQkJN0NCMTZGRTExNzI0QjlCNTAwN0EwQTk1IC8qIFBsdWdJblNhbmRib3hQcm9m
aWxlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJNDE0
Mzc1MUIyMEVBRUExRTAwRkFEMDZDIC8qIGNuLm1pY3JvZG9uZS5jbWIuc2FmYXJpLnNiICovLAot
CQkJCUUxOUJEQTg0MTkzNjVGNEIwMEI5N0Y1NyAvKiBjb20uYXBwbGUuYXBwc3RvcmUuQ29kZVJl
ZGVlbWVyTmV0c2NhcGVQbHVnaW4uc2IgKi8sCi0JCQkJNDExMkVERDkyMEU0MDc3NTAwQkVBOTJB
IC8qIGNvbS5hcHBsZS5Cb2NvbVN1Ym1pdEN0cmwuc2IgKi8sCi0JCQkJN0NCMTZGRTIxNzI0QjlC
NTAwN0EwQTk1IC8qIGNvbS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0LndlYnBsdWdpbi5zYiAq
LywKLQkJCQk0MTEyRUREODIwRTQwNzc1MDBCRUE5MkEgLyogY29tLmFwcGxlLk5QU2FmZUlucHV0
LnNiICovLAotCQkJCTQxMTJFREQ3MjBFNDA3NzUwMEJFQTkyQSAvKiBjb20uYXBwbGUuTlBTYWZl
U3VibWl0LnNiICovLAotCQkJCTdDQjE2RkUzMTcyNEI5QjUwMDdBMEE5NSAvKiBjb20uYXBwbGUu
UXVpY2tUaW1lIFBsdWdpbi5wbHVnaW4uc2IgKi8sCi0JCQkJNDExMkVERDMyMEU0MDc3NDAwQkVB
OTJBIC8qIGNvbS5jZmNhLm5wU2VjRWRpdEN0bC5NQUMuQk9DLnBsdWdpbi5zYiAqLywKLQkJCQk0
MTRERDM3ODIwQkY0M0VBMDA2OTU5RkIgLyogY29tLmNpc2NvLndlYmV4LnBsdWdpbi5ncGM2NC5z
YiAqLywKLQkJCQk0MTEyRURENTIwRTQwNzc0MDBCRUE5MkEgLyogY29tLmNtYmNoaW5hLkNNQlNl
Y3VyaXR5LnNiICovLAotCQkJCTQxMTJFREQyMjBFNDA3NzMwMEJFQTkyQSAvKiBjb20uZnRzYWZl
Lk5QQVBJLUNvcmUtU2FmZS1Tb2Z0S2V5YmFvcmQucGx1Z2luLnJmYzEwMzRpZGVudGlmaWVyLnNi
ICovLAotCQkJCTQxM0NDRDRGMjBERUJDMkYwMDY1QTIxQSAvKiBjb20uZ29vZ2xlLmdvb2dsZXRh
bGticm93c2VycGx1Z2luLnNiICovLAotCQkJCTQxNTdFNEFGMjBFMkVDOTgwMEE2QzBENyAvKiBj
b20uZ29vZ2xlLm8xZGJyb3dzZXJwbHVnaW4uc2IgKi8sCi0JCQkJN0E1RTM5NDkxRDVCRDhBNzAw
QjRCN0NFIC8qIGNvbS5tYWNyb21lZGlhLkZsYXNoIFBsYXllciBFU1IucGx1Z2luLnNiICovLAot
CQkJCTdDQjE2RkU1MTcyNEI5QjUwMDdBMEE5NSAvKiBjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5
ZXIucGx1Z2luLnNiICovLAotCQkJCTdDQjE2RkU2MTcyNEI5QjUwMDdBMEE5NSAvKiBjb20ubWlj
cm9zb2Z0LlNpbHZlcmxpZ2h0UGx1Z2luLnNiICovLAotCQkJCTdDQjE2RkU3MTcyNEI5QjUwMDdB
MEE5NSAvKiBjb20ub3JhY2xlLmphdmEuSmF2YUFwcGxldFBsdWdpbi5zYiAqLywKLQkJCSk7Ci0J
CQluYW1lID0gUGx1Z0luU2FuZGJveFByb2ZpbGVzOwotCQkJcGF0aCA9IFJlc291cmNlcy9QbHVn
SW5TYW5kYm94UHJvZmlsZXM7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQk3
RUM0RjBGODE4RTRBOTIyMDA4MDU2QUYgLyogY29jb2EgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTA0MDMsNyArOTkyMSw2IEBACiAJCQkJNTEwQ0M3RTcx
NjEzOEU3MjAwRDAzRUQzIC8qIE5ldHdvcmsgKi8sCiAJCQkJMzFBMkVDNDAxNDg5OTczNzAwODEw
RDcxIC8qIE5vdGlmaWNhdGlvbnMgKi8sCiAJCQkJREY4NENFRTEyNDlBQTIwMDAwOTA5NkY2IC8q
IFBERiAqLywKLQkJCQkxQUVGQ0MwNTExRDAxRjM0MDA4MjE5RDMgLyogUGx1Z2lucyAqLywKIAkJ
CQkyRDE1NTFBOTFGNUE5QjQyMDAwNkUzRkUgLyogUmVtb3RlTGF5ZXJUcmVlICovLAogCQkJCTFB
QUYwODlFMTkyNjgxQUMwMEI2MzkwQyAvKiBVc2VyQ29udGVudCAqLywKIAkJCQk1NzYwODI5NDIw
MkJEODQ5MDAxMTY2NzggLyogV2ViQXV0aGVudGljYXRpb24gKi8sCkBAIC0xMTE1NywxNCArMTA2
NzQsNiBAQAogCQkJcGF0aCA9IEVudHJ5UG9pbnQ7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwogCQl9OwotCQlCQzgyODM4NjE2QjQ1RUYyMDBBMjc4RkUgLyogRW50cnlQb2ludCAqLyA9IHsK
LQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJQkM4MjgzRTIxNkI0RjhF
MjAwQTI3OEZFIC8qIFhQQ1NlcnZpY2UgKi8sCi0JCQkpOwotCQkJcGF0aCA9IEVudHJ5UG9pbnQ7
Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQlCQzgyODNBMTE2QjRCRDkxMDBB
Mjc4RkUgLyogWFBDU2VydmljZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCkBAIC0xMTE4NCwyNCArMTA2OTMsNiBAQAogCQkJcGF0aCA9IE5ldHdvcmtTZXJ2aWNl
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJQkM4MjgzRTIxNkI0RjhFMjAw
QTI3OEZFIC8qIFhQQ1NlcnZpY2UgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxk
cmVuID0gKAotCQkJCUJDODI4M0U5MTZCNEY4RTIwMEEyNzhGRSAvKiBQbHVnaW5TZXJ2aWNlICov
LAotCQkJCUJDODI4M0VGMTZCNEY4RTIwMEEyNzhGRSAvKiBQbHVnaW5TZXJ2aWNlRW50cnlQb2lu
dC5tbSAqLywKLQkJCSk7Ci0JCQluYW1lID0gWFBDU2VydmljZTsKLQkJCXBhdGggPSBDb2NvYS9Y
UENTZXJ2aWNlOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJQkM4MjgzRTkx
NkI0RjhFMjAwQTI3OEZFIC8qIFBsdWdpblNlcnZpY2UgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91
cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCUJDRkNBODk1MTZERTk2Q0IwMDA3NDA2OSAvKiBQbHVn
aW5TZXJ2aWNlLkluZm8ucGxpc3QgKi8sCi0JCQkpOwotCQkJbmFtZSA9IFBsdWdpblNlcnZpY2U7
Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQlCQzhBNTAxMzExNzY1RjQ1MDA3
NTc1NzMgLyogY3BwICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
QEAgLTExNTQ0LDI0ICsxMTAzNSwxMCBAQAogCQkJCTUxNDUyNzAyMjcxRkJBMzYwMDA0NjdCNiAv
KiBOb3RpZmljYXRpb25NYW5hZ2VyTWVzc2FnZUhhbmRsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICov
LAogCQkJCTUxNDUyNzAxMjcxRkJBMzUwMDA0NjdCNiAvKiBOb3RpZmljYXRpb25NYW5hZ2VyTWVz
c2FnZUhhbmRsZXJNZXNzYWdlcy5oICovLAogCQkJCTUxNDUyNzAwMjcxRkJBMzQwMDA0NjdCNiAv
KiBOb3RpZmljYXRpb25NYW5hZ2VyTWVzc2FnZUhhbmRsZXJNZXNzYWdlc1JlcGxpZXMuaCAqLywK
LQkJCQkxQTJEODQzNzEyN0Y2NUQ1MDAxRUI5NjIgLyogTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXJN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovLAotCQkJCTFBMkQ4NDM4MTI3RjY1RDUwMDFFQjk2MiAvKiBO
UE9iamVjdE1lc3NhZ2VSZWNlaXZlck1lc3NhZ2VzLmggKi8sCiAJCQkJQ0RBMjlBMjQxQ0JFQjY3
QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICov
LAogCQkJCUNEQTI5QTI1MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
TWVzc2FnZXMuaCAqLywKIAkJCQlDREEyOUEyNjFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKIAkJCQlDREEyOUEyNzFD
QkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCAq
LywKLQkJCQkxQThFRjk2QzEyNTJBRjZCMDBGNzA2N0YgLyogUGx1Z2luQ29udHJvbGxlclByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKLQkJCQkxQThFRjk2RDEyNTJBRjZCMDBGNzA2N0YgLyog
UGx1Z2luQ29udHJvbGxlclByb3h5TWVzc2FnZXMuaCAqLywKLQkJCQkxQTc4NjVCNzE2Q0FDNzE1
MDBBQ0U4M0EgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVy
LmNwcCAqLywKLQkJCQkxQTc4NjVCODE2Q0FDNzE1MDBBQ0U4M0EgLyogUGx1Z2luUHJvY2Vzc0Nv
bm5lY3Rpb25NYW5hZ2VyTWVzc2FnZXMuaCAqLywKLQkJCQkxQTJCQjZDRTE0MTE3QjREMDAwRjM1
RDQgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovLAotCQkJ
CTFBMkJCNkNGMTQxMTdCNEQwMDBGMzVENCAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1lc3Nh
Z2VzLmggKi8sCi0JCQkJMUEwRUM2QkQxMjRCQkQ5QjAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovLAotCQkJCTFBMEVDNkJFMTI0QkJEOUIwMDdFRjRBNSAvKiBQ
bHVnaW5Qcm9jZXNzTWVzc2FnZXMuaCAqLywKLQkJCQkxQTA0M0I1QjEyNEQ1RTlEMDBGRkJGQjUg
LyogUGx1Z2luUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKLQkJCQkxQTA0M0I1
QzEyNEQ1RTlEMDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCAqLywKLQkJ
CQkxQThFRkE2RTEyNTJCODQxMDBGNzA2N0YgLyogUGx1Z2luUHJveHlNZXNzYWdlUmVjZWl2ZXIu
Y3BwICovLAotCQkJCTFBOEVGQTZGMTI1MkI4NDEwMEY3MDY3RiAvKiBQbHVnaW5Qcm94eU1lc3Nh
Z2VzLmggKi8sCiAJCQkJQ0QyMENFNzcyNUNEMkI5RDAwNjlCNTQyIC8qIFJlbW90ZUF1ZGlvSGFy
ZHdhcmVMaXN0ZW5lck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJQ0QyMENFNzkyNUNEMkI5
RTAwNjlCNTQyIC8qIFJlbW90ZUF1ZGlvSGFyZHdhcmVMaXN0ZW5lck1lc3NhZ2VzLmggKi8sCiAJ
CQkJQ0QyMENFNzgyNUNEMkI5RDAwNjlCNTQyIC8qIFJlbW90ZUF1ZGlvSGFyZHdhcmVMaXN0ZW5l
ck1lc3NhZ2VzUmVwbGllcy5oICovLApAQCAtMTE3NTYsOCArMTEyMzMsNiBAQAogCQkJCTdDQjEw
MEVFMUZBMkQ3NEEwMDE3MjlFRSAvKiBXZWJQcmVmZXJlbmNlc0tleXMuY3BwICovLAogCQkJCTdD
QjEwMEVGMUZBMkQ3NEIwMDE3MjlFRSAvKiBXZWJQcmVmZXJlbmNlc0tleXMuaCAqLywKIAkJCQk3
Q0IxMDBGMDFGQTJENzg0MDAxNzI5RUUgLyogV2ViUHJlZmVyZW5jZXNTdG9yZURlZmF1bHRzTWFw
LmNwcCAqLywKLQkJCQkxQTA0M0Y2NzEyNTE0RDhCMDBGRkJGQjUgLyogV2ViUHJvY2Vzc0Nvbm5l
Y3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovLAotCQkJCTFBMDQzRjY4MTI1MTREOEIwMEZGQkZC
NSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmggKi8sCiAJCQkJQkMzMDY2QkMxMjVB
NDQyMTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCUJD
MzA2NkJEMTI1QTQ0MjEwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWVzc2FnZXMuaCAqLywKIAkJCQk3
Q0U0RDIyNTFBNDkxNkMyMDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bvb2xNZXNzYWdlUmVjZWl2ZXIu
Y3BwICovLApAQCAtMTIxMTIsMTMgKzExNTg3LDYgQEAKIC8qIEVuZCBQQlhHcm91cCBzZWN0aW9u
ICovCiAKIC8qIEJlZ2luIFBCWEhlYWRlcnNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMUFDMjVG
QUMxMkE0OEVBNzAwQkQyNjcxIC8qIEhlYWRlcnMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhIZWFkZXJz
QnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9
ICgKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJ
fTsKIAkJNUMxNTc5RDEyNzE2NUIyRjAwRUQ1MjgwIC8qIEhlYWRlcnMgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7
CkBAIC0xMjUyMCw4ICsxMTk4OCw2IEBACiAJCQkJMkQ0RDJDODExREY2MEJGMzAwMkVCMTBDIC8q
IEludGVyYWN0aW9uSW5mb3JtYXRpb25SZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzFG
NjBBNDI1Q0M3REI5MDBBRjE0RjQgLyogSVBDU2VtYXBob3JlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5QjQ3OTA4RjI1MzE1MUNDMDBFQzExQUIgLyogSlNJUENCaW5kaW5nLmggaW4gSGVhZGVycyAq
LywKLQkJCQkxQUU0OUE0OTExRkZBOENFMDA0OEI0NjQgLyogSlNOUE1ldGhvZC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMUFFNDk4NzgxMUZGN0ZBQTAwNDhCNDY0IC8qIEpTTlBPYmplY3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUMxNjYzRTVCMjRBRUFBMkYwMEM2QTNCMiAvKiBMYXVuY2hTZXJ2aWNl
c0RhdGFiYXNlWFBDQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0UwOTM3ODE0RkIx
MjhDMDAxMTM4RDkgLyogTGF5ZXJIb3N0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUE5MkRDMTExMkY4QkE0NjAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTI1ODksMTAgKzEyMDU1LDYgQEAKIAkJCQkxQUJDM0RGNjE4OTlFNDM3MDA0RjA2
MjYgLyogTmF2aWdhdGlvblN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1N0I4MjY0NDIzMDRG
MTQwMDBCNzJFQjAgLyogTmVhckZpZWxkU29mdExpbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3
QjgyNjQxMjMwNEVCM0UwMEI3MkVCMCAvKiBOZWFyRmllbGRTUEkuaCBpbiBIZWFkZXJzICovLAot
CQkJCTFBNkZCQTJBMTFFNjg2MjcwMERCMTM3MSAvKiBOZXRzY2FwZUJyb3dzZXJGdW5jcy5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMUE2RkJEMjgxMUU2OUJDMjAwREIxMzcxIC8qIE5ldHNjYXBlUGx1
Z2luLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTRBOUM1NjEyQjgxNkNGMDA4RkU5ODQgLyogTmV0
c2NhcGVQbHVnaW5Nb2R1bGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBQTU4ODkyMTFFRTcwNDAw
MDYxQjg4MiAvKiBOZXRzY2FwZVBsdWdpblN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM1
QkNCOTIyMDY5QzQ5QzAwQ0NDRTAyIC8qIE5ldHdvcmtBY3Rpdml0eVRyYWNrZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQ2RUUyODREMjY5RTA1MjUwMERENDhBQiAvKiBOZXR3b3JrQnJvYWRjYXN0
Q2hhbm5lbFJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDQzNkVDQzFBMEQwNDBCMDBF
QUQyMDQgLyogTmV0d29ya0NhY2hlLmggaW4gSGVhZGVycyAqLywKQEAgLTEyNjQ1LDE1ICsxMjEw
Nyw2IEBACiAJCQkJNTE0NTI3MDQyNzFGQkE0MDAwMDQ2N0I2IC8qIE5vdGlmaWNhdGlvbk1hbmFn
ZXJNZXNzYWdlSGFuZGxlck1lc3NhZ2VzUmVwbGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFB
MkVDNTYxNDg5OUMwOTAwODEwRDcxIC8qIE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMTMxMjYxRjE0OEZGODJDMDBCQTJBMzkgLyogTm90aWZpY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTJEODQ4
QjEyN0Y2QTQ5MDAxRUI5NjIgLyogTlBJZGVudGlmaWVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMUFFNDk3NjgxMUZGNjU4RTAwNDhCNDY0IC8qIE5QSlNPYmplY3QuaCBpbiBIZWFkZXJzICov
LAotCQkJCTFBMkQ4MkE1MTI3RjRFQUIwMDFFQjk2MiAvKiBOUE9iamVjdE1lc3NhZ2VSZWNlaXZl
ci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUEyRDg0M0ExMjdGNjVENTAwMUVCOTYyIC8qIE5QT2Jq
ZWN0TWVzc2FnZVJlY2VpdmVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBMkQ4MkE3
MTI3RjRFQUIwMDFFQjk2MiAvKiBOUE9iamVjdFByb3h5LmggaW4gSGVhZGVycyAqLywKLQkJCQkx
QTJEODJBOTEyN0Y0RUFCMDAxRUI5NjIgLyogTlBSZW1vdGVPYmplY3RNYXAuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTFBMjE2MUIwMTFGMzc2NjQwMDhBRDBGNSAvKiBOUFJ1bnRpbWVPYmplY3RNYXAu
aCBpbiBIZWFkZXJzICovLAotCQkJCTFBMjE2MkIxMTFGMzg5NzEwMDhBRDBGNSAvKiBOUFJ1bnRp
bWVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBMkQ4NEEzMTI3RjZBRDEwMDFFQjk2
MiAvKiBOUFZhcmlhbnREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzIwOTM2MDIyMzE4Q0Iw
MDAwMjZBMzkgLyogTlNBdHRyaWJ1dGVkU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzIx
ODQwMjIyMzM4NzI4MDBCQUM3MDAgLyogTlNBdHRyaWJ1dGVkU3RyaW5nUHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzc1NEQ1NDUxQjNBMjlGRDAwM0E0QzdGIC8qIE5TSW52b2NhdGlvblNQ
SS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMjY4OSwyOSArMTIxNDIsNyBAQAogCQkJCUNEQTI5QTIw
MUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUNEQTI5QTJCMUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2RkI3RDMxMUU2NTFF
MjAwREIxMzcxIC8qIFBsdWdpbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUE5RkJBOEQxM0ZGMDRF
NjAwREVFRDY3IC8qIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUFBNTZGMjkxMUU5MkJDODAwNjFCODgyIC8qIFBsdWdpbkNvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTFBOEVGNENCMTI1MjQwMzcwMEY3MDY3RiAvKiBQbHVnaW5Db250cm9s
bGVyUHJveHkuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBOEVGOTZGMTI1MkFGNkIwMEY3MDY3RiAv
KiBQbHVnaW5Db250cm9sbGVyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUEx
Nzk3ODAxMzdFRTgyQzAwRjk3RDQ1IC8qIFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJN0MzRjhDOTExNzNBRjUyRDAwN0I3RjM5IC8qIFBsdWdpbkluZm9ybWF0
aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQUVGQ0MxMjExRDAxRjk2MDA4MjE5RDMgLyogUGx1
Z2luSW5mb1N0b3JlLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTNENjEwMjEzQTdDQzJBMDBGOTVE
NEUgLyogUGx1Z2luTW9kdWxlSW5mby5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUEwNDM5NzYxMjRE
MDM0ODAwRkZCRkI1IC8qIFBsdWdpblByb2Nlc3MuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBQzVG
RkMyMTc0QkZEMUIwMDAxNDgzRCAvKiBQbHVnaW5Qcm9jZXNzQXR0cmlidXRlcy5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMUEwRUM5MDYxMjRDMEFCODAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NDb25u
ZWN0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTBFQzkwRjEyNEMwQUY1MDA3RUY0QTUgLyog
UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTc4
NjVCQTE2Q0FDNzE1MDBBQ0U4M0EgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyTWVz
c2FnZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBMkJCNkQxMTQxMTdCNEQwMDBGMzVENCAvKiBQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTJE
OTBEMjEyODFDOTY2MDAxRUI5NjIgLyogUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMUEwRUM2MDMxMjRBOUYyQzAwN0VGNEE1IC8qIFBsdWdpblBy
b2Nlc3NNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTBFQzZDMDEyNEJCRDlCMDA3RUY0
QTUgLyogUGx1Z2luUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTBFQzc1
RTEyNEJDN0IyMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5LmggaW4gSGVhZGVycyAqLywK
LQkJCQkxQTA0M0I1RTEyNEQ1RTlEMDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5TWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBMDQzREMxMTI0RkY4NzUwMEZGQkZCNSAvKiBQbHVn
aW5Qcm94eS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUE4RUZBNzExMjUyQjg0MTAwRjcwNjdGIC8q
IFBsdWdpblByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBNEE5RjMzMTJCODQ0
RTIwMDhGRTk4NCAvKiBQbHVnaW5RdWlya3MuaCBpbiBIZWFkZXJzICovLAotCQkJCTdDRDYyMjc4
MTczOUQ4NjMwMDVCRDdGRiAvKiBQbHVnaW5TYW5kYm94UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUE2RkI3QUYxMUU2NEI2ODAwREIxMzcxIC8qIFBsdWdpblZpZXcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5RUNBNDFDMjNGQ0E1RDgwMDIzMzU4RCAvKiBQb2xpY3lEZWNpc2lvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTdGRDMxODEyMkIzNTE1QjAwOEQwRThCIC8qIFBvcFVwU09BdXRo
b3JpemF0aW9uU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMjg0Myw3ICsxMjI3NCw2IEBA
CiAJCQkJOTNBQjlCNEUyNTc1NjdFMjAwOThCMTBFIC8qIFNwZWVjaFJlY29nbml0aW9uUmVtb3Rl
UmVhbHRpbWVNZWRpYVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNBQjlCNEQyNTc1NjdE
QzAwOThCMTBFIC8qIFNwZWVjaFJlY29nbml0aW9uUmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZU1h
bmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRDZCNzcyMjU0QkI1MTkwMDU4REQzQSAvKiBT
cGVlY2hSZWNvZ25pdGlvblNlcnZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTEyQ0Q2OUEyNzIx
RjBBOTAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb25Db25zdGFudHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTkzRDZCNzg0MjU0Q0NEMEUwMDU4REQzQSAvKiBTcGVlY2hSZWNvZ25pdGlvblNlcnZlck1l
c3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Q2Qjc4NTI1NENDRDQzMDA1OEREM0EgLyog
U3BlZWNoUmVjb2duaXRpb25TZXJ2ZXJNZXNzYWdlc1JlcGxpZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTdBM0ZFQ0EyMjFGN0MwOTcwMEYyNjdDRCAvKiBTdG9yYWdlQWNjZXNzU3RhdHVzLmggaW4g
SGVhZGVycyAqLywKQEAgLTEyOTMxLDcgKzEyMzYxLDYgQEAKIAkJCQk5OTBEMzlGNTI0M0JFNjQ4
MDAxOTkzODggLyogV2ViQXV0b21hdGlvbkRPTVdpbmRvd09ic2VydmVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5OTU1QTZFQzFDNzk4MEMyMDBFQjZBOTMgLyogV2ViQXV0b21hdGlvblNlc3Npb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTk5QzNBRTJEMURBREE2QUQwMEFGNUMxNiAvKiBXZWJBdXRv
bWF0aW9uU2Vzc2lvbk1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTEyQ0Q2OTgyNzIxRUZD
ODAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb25Db25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQzBBMTk1ODFDOTAwNjhGMDBGRTBFQkIgLyogV2ViQXV0b21hdGlvblNlc3Npb25NZXNzYWdl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUMwQTE5NDcxQzhGRjFBODAwRkUwRUJCIC8qIFdlYkF1
dG9tYXRpb25TZXNzaW9uUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDMEExOTU0MUM4RkZE
RkIwMEZFMEVCQiAvKiBXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5TWVzc2FnZXMuaCBpbiBIZWFk
ZXJzICovLApAQCAtMTMwOTgsOCArMTI1MjcsNiBAQAogCQkJCUJDRDU5OEFDMTEyQjdGREYwMEVD
OEMyMyAvKiBXZWJQcmVmZXJlbmNlc1N0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUM1MTJD
OTE5MDY1NkU1MDA0NDg5MTQgLyogV2ViUHJldmlld0xvYWRlckNsaWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMwMzJEOTcxMEY0MzdBRjAwNThDMTVBIC8qIFdlYlByb2Nlc3MuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTFBMDQzQTA5MTI0RDExQTkwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29ubmVj
dGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUEwNDNGNkExMjUxNEQ4QjAwRkZCRkI1IC8qIFdl
YlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzA2ODI0
MTI1QTZCOTQwMEU3MTI3OCAvKiBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0NjdFNDNFODIyNDNGRjdEMDBCMTM5MjQgLyogV2ViUHJvY2Vzc0RhdGFT
dG9yZVBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzA2NkJGMTI1QTQ0MjEwMEU3
MTI3OCAvKiBXZWJQcm9jZXNzTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMTMxMTAsNiAr
MTI1MzcsOCBAQAogCQkJCUJDRTBFNDI1MTY4QjdBMjgwMDU3RTY2QSAvKiBXZWJQcm9jZXNzU3Vw
cGxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUExRTA5MzQxODg2MUQzODAwRDJEQzQ5IC8q
IFdlYlByb2dyZXNzVHJhY2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEyRjU4OUQx
MkE4ODM4ODAwNjI5NTMwIC8qIFdlYlByb3RlY3Rpb25TcGFjZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTEyQ0Q2OTgyNzIxRUZDODAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb25Db25uZWN0aW9uLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk1MTJDRDY5QTI3MjFGMEE5MDBGN0Y4RUMgLyogV2ViUHVzaERh
ZW1vbkNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDYxQ0NDQTYyMzE0ODVBQTAwQjY1
OUI5IC8qIFdlYlJlbW90ZU9iamVjdFJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTg2
MEU3MTIzMEY2N0ZDMDA0NjFBQUUgLyogV2ViUmVzb3VyY2VJbnRlcmNlcHRDb250cm9sbGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTBBRkZCQTE2NTQyMDQ4MDAxQkEwNUUgLyogV2ViUmVzb3Vy
Y2VMb2FkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTM2MTAsMjQgKzEzMDM5LDYgQEAKIC8qIEVu
ZCBQQlhIZWFkZXJzQnVpbGRQaGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWE5hdGl2ZVRh
cmdldCBzZWN0aW9uICovCi0JCTFBQzI1RkFGMTJBNDhFQTcwMEJEMjY3MSAvKiBQbHVnaW5Qcm9j
ZXNzU2hpbSAqLyA9IHsKLQkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29uZmln
dXJhdGlvbkxpc3QgPSAxQUMyNUZCQTEyQTQ4RUI2MDBCRDI2NzEgLyogQnVpbGQgY29uZmlndXJh
dGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIlBsdWdpblByb2Nlc3NTaGltIiAqLzsKLQkJ
CWJ1aWxkUGhhc2VzID0gKAotCQkJCTFBQzI1RkFDMTJBNDhFQTcwMEJEMjY3MSAvKiBIZWFkZXJz
ICovLAotCQkJCTFBQzI1RkFEMTJBNDhFQTcwMEJEMjY3MSAvKiBTb3VyY2VzICovLAotCQkJCTFB
QzI1RkFFMTJBNDhFQTcwMEJEMjY3MSAvKiBGcmFtZXdvcmtzICovLAotCQkJKTsKLQkJCWJ1aWxk
UnVsZXMgPSAoCi0JCQkpOwotCQkJZGVwZW5kZW5jaWVzID0gKAotCQkJCUUxQUMyRTJFMjBGN0I5
ODgwMEIwODk3RCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAotCQkJKTsKLQkJCW5hbWUgPSBQ
bHVnaW5Qcm9jZXNzU2hpbTsKLQkJCXByb2R1Y3ROYW1lID0gUGx1Z2luUHJvY2Vzc1NoaW07Ci0J
CQlwcm9kdWN0UmVmZXJlbmNlID0gMUFDMjVGQjAxMkE0OEVBNzAwQkQyNjcxIC8qIFBsdWdpblBy
b2Nlc3NTaGltLmR5bGliICovOwotCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3Qt
dHlwZS5saWJyYXJ5LmR5bmFtaWMiOwotCQl9OwogCQkyRDlGQjIxNjIzNzUyMzgzMDA0OUY5MzYg
LyogR1BVICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1
cmF0aW9uTGlzdCA9IDJEOUZCMjI0MjM3NTIzODMwMDQ5RjkzNiAvKiBCdWlsZCBjb25maWd1cmF0
aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiR1BVIiAqLzsKQEAgLTEzNzQ4LDcgKzEzMTU5
LDYgQEAKIAkJCQkyRTE2QjZGNDIwMTlCQzI1MDA4OTk2RDYgLyogQ29weSBBZGRpdGlvbmFsIFJl
c291cmNlcyAqLywKIAkJCQk4REMyRUY1MjA0ODZBNjk0MDA5OEIyMTYgLyogUmVzb3VyY2VzICov
LAogCQkJCTM3MjU4OTQzMUMxRTQ5NjgwMEM5MkNBOSAvKiBDb3B5IFNoaW1zICovLAotCQkJCTdD
QjE2RkVFMTcyNEJBMDUwMDdBMEE5NSAvKiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAq
LywKIAkJCQk5OUNBMzg2MjIwNzI4NkRCMDBCQUQ1NzggLyogQ29weSBXZWJEcml2ZXIgQXRvbXMg
dG8gRnJhbWV3b3JrIFByaXZhdGUgSGVhZGVycyAqLywKIAkJCQkzN0U1MzEwMTFCMjM5MTA5MDA3
NEYwREYgLyogQ29weSBpT1MgU2FuZGJveCBQcm9maWxlcyBmb3IgTWFudWFsIFNhbmRib3hpbmcg
Ki8sCiAJCQkJMUEwN0QyRjcxOTE5QjM2NTAwRUNEQTE2IC8qIENvcHkgTWVzc2FnZSBHZW5lcmF0
aW9uIFNjcmlwdHMgKi8sCkBAIC0xMzc3Myw3ICsxMzE4Myw2IEBACiAJCQkJRTFBQzJFM0UyMEY3
QjlDMDAwQjA4OTdEIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJMzdGNzQwNzkxMjcy
MUY3NDAwOTM4NjlCIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJMkQxMUJBMDUyMTI2
QTVBRTAwNkY4ODc4IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCi0JCQkJMzdCMUQwMTQxQzFF
NDIxMTAwRDY3RkU5IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkpOwogCQkJbmFtZSA9
IFdlYktpdDsKIAkJCXByb2R1Y3RJbnN0YWxsUGF0aCA9ICIkKEhPTUUpL0xpYnJhcnkvRnJhbWV3
b3JrcyI7CkBAIC0xMzg0MiwyNiArMTMyNTEsNiBAQAogCQkJcHJvZHVjdFJlZmVyZW5jZSA9IEJD
ODI4M0IxMTZCNEJGNzcwMEEyNzhGRSAvKiBjb20uYXBwbGUuV2ViS2l0Lk5ldHdvcmtpbmcueHBj
ICovOwogCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS54cGMtc2Vydmlj
ZSI7CiAJCX07Ci0JCUJDODI4NDFFMTZCNEZERjYwMEEyNzhGRSAvKiBQbHVnaW4uNjQgKi8gPSB7
Ci0JCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0g
QkM4Mjg0MkExNkI0RkRGNzAwQTI3OEZFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3Ig
UEJYTmF0aXZlVGFyZ2V0ICJQbHVnaW4uNjQiICovOwotCQkJYnVpbGRQaGFzZXMgPSAoCi0JCQkJ
QkM4Mjg0MUIxNkI0RkRGNjAwQTI3OEZFIC8qIFNvdXJjZXMgKi8sCi0JCQkJQkM4Mjg0MUMxNkI0
RkRGNjAwQTI3OEZFIC8qIEZyYW1ld29ya3MgKi8sCi0JCQkJQkM4Mjg0MUQxNkI0RkRGNjAwQTI3
OEZFIC8qIFJlc291cmNlcyAqLywKLQkJCQk3QTc5RTJERDIxMDdGMkREMDBFRjMyQTQgLyogUHJv
Y2VzcyBQbHVnaW4gZW50aXRsZW1lbnRzICovLAotCQkJKTsKLQkJCWJ1aWxkUnVsZXMgPSAoCi0J
CQkpOwotCQkJZGVwZW5kZW5jaWVzID0gKAotCQkJCUUxQUMyRTNBMjBGN0I5QTcwMEIwODk3RCAv
KiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAotCQkJCTM3NUUwNjJCMTkxRUE4RDQwMDRFM0NBRiAv
KiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAotCQkJKTsKLQkJCW5hbWUgPSBQbHVnaW4uNjQ7Ci0J
CQlwcm9kdWN0TmFtZSA9IFBsdWdpbi42NDsKLQkJCXByb2R1Y3RSZWZlcmVuY2UgPSBCQzgyODQx
RjE2QjRGREY2MDBBMjc4RkUgLyogY29tLmFwcGxlLldlYktpdC5QbHVnaW4uNjQueHBjICovOwot
CQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS54cGMtc2VydmljZSI7Ci0J
CX07CiAJCUNEOTU0OTM0MjYxNTkwMDQwMDgzNzJEOSAvKiBXZWJLaXRTd2lmdCAqLyA9IHsKIAkJ
CWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSBDRDk1
NDkzQjI2MTU5MDA0MDA4MzcyRDkgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhO
YXRpdmVUYXJnZXQgIldlYktpdFN3aWZ0IiAqLzsKQEAgLTEzOTM0LDEzICsxMzMyMywxMSBAQAog
CQkJCTJEN0RFQkQ4MjEyNjlDNkIwMEI5RjczQyAvKiBHZW5lcmF0ZSBVbmlmaWVkIFNvdXJjZXMg
Ki8sCiAJCQkJQzBDRTcyODUxMjQ3RTY2ODAwQkMwRUM0IC8qIERlcml2ZWQgU291cmNlcyAqLywK
IAkJCQlBMTZFNjVGRjI1ODE5MzA4MDBFRTE3NDkgLyogTWVkaWFGb3JtYXRSZWFkZXIgKi8sCi0J
CQkJMUFDMjVGQUYxMkE0OEVBNzAwQkQyNjcxIC8qIFBsdWdpblByb2Nlc3NTaGltICovLAogCQkJ
CUJDM0RFNDY1MTVBOTE3NjMwMDhEMjZGQyAvKiBXZWJDb250ZW50ICovLAogCQkJCTM3MkVCQjM4
MjAxN0U2NDMwMDA4NTA2NCAvKiBXZWJDb250ZW50LkRldmVsb3BtZW50ICovLAogCQkJCUJDODI4
M0IwMTZCNEJGNzcwMEEyNzhGRSAvKiBOZXR3b3JraW5nICovLAogCQkJCTJEOUZCMjE2MjM3NTIz
ODMwMDQ5RjkzNiAvKiBHUFUgKi8sCiAJCQkJNTc0MkEyRTUyNTM1NjEzRjAwQjdCQTE0IC8qIFdl
YkF1dGhuICovLAotCQkJCUJDODI4NDFFMTZCNEZERjYwMEEyNzhGRSAvKiBQbHVnaW4uNjQgKi8s
CiAJCQkJQTdBQURBMTAxOTM5NUNBOTAwM0VBMUM3IC8qIFNhbmRib3ggUHJvZmlsZXMgKi8sCiAJ
CQkJRTFBQzJFMjcyMEY3Qjk0QzAwQjA4OTdEIC8qIFVubG9jayBLZXljaGFpbiAqLywKIAkJCQk1
MzI1QkRDRDIxREZGNDc3MDBBMERFRTEgLyogQXBwbHkgQ29uZmlndXJhdGlvbiB0byBYQ0ZpbGVM
aXN0cyAqLywKQEAgLTEzOTgyLDcgKzEzMzY5LDYgQEAKIAkJCQlFMTdBRTJDMzE2QjlDNjNBMDAx
QzQyRjEgLyogY29tLmFwcGxlLldlYktpdC5OZXR3b3JrUHJvY2Vzcy5zYiBpbiBSZXNvdXJjZXMg
Ki8sCiAJCQkJNTcyRUJCQzQyNTM2QUI4NDAwMDU1MkIzIC8qIGNvbS5hcHBsZS5XZWJLaXQuV2Vi
QXV0aG5Qcm9jZXNzLnNiIGluIFJlc291cmNlcyAqLywKIAkJCQlFMTFEMzVBRTE2QjYzRDFCMDA2
RDIzRDcgLyogY29tLmFwcGxlLldlYlByb2Nlc3Muc2IgaW4gUmVzb3VyY2VzICovLAotCQkJCTQx
NEREMzc5MjBCRjQzRjUwMDY5NTlGQiAvKiBjb20uY2lzY28ud2ViZXgucGx1Z2luLmdwYzY0LnNi
IGluIFJlc291cmNlcyAqLywKIAkJCQk2QkU5NjlDMTFFNTRENDUyMDA4Qjc0ODMgLyogY29yZVBy
ZWRpY3Rpb25fbW9kZWwgaW4gUmVzb3VyY2VzICovLAogCQkJCThEQzJFRjUzMDQ4NkE2OTQwMDk4
QjIxNiAvKiBJbmZvUGxpc3Quc3RyaW5ncyBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJM0ZCMDhFNDMx
RjYwQjI0MDAwNUU1MzEyIC8qIGlPUy54Y2Fzc2V0cyBpbiBSZXNvdXJjZXMgKi8sCkBAIC0xNDAw
NSwxMyArMTMzOTEsNiBAQAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwotCQlCQzgyODQxRDE2QjRGREY2MDBBMjc4RkUgLyogUmVzb3VyY2Vz
ICovID0gewotCQkJaXNhID0gUEJYUmVzb3VyY2VzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9u
TWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKIC8qIEVuZCBQQlhSZXNvdXJjZXNCdWls
ZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlIHNl
Y3Rpb24gKi8KQEAgLTE0NDM3LDIyICsxMzgxNiw2IEBACiAJCQlzaGVsbFBhdGggPSAvYmluL3No
OwogCQkJc2hlbGxTY3JpcHQgPSAiaWYgWyBcIiR7QUNUSU9OfVwiID0gXCJpbnN0YWxsaGRyc1wi
IF0gfHwgWyBcIiR7QUNUSU9OfVwiID0gXCJpbnN0YWxsYXBpXCIgXTsgdGhlblxuICAgIGV4aXQg
MDtcbmZpXG5cbmlmIFsgLWYgLi4vLi4vVG9vbHMvU2NyaXB0cy9jaGVjay1mb3ItaW5hcHByb3By
aWF0ZS1maWxlcy1pbi1mcmFtZXdvcmsgXTsgdGhlblxuICAgIC4uLy4uL1Rvb2xzL1NjcmlwdHMv
Y2hlY2stZm9yLWluYXBwcm9wcmlhdGUtZmlsZXMtaW4tZnJhbWV3b3JrIHx8IGV4aXQgJD9cbmZp
XG4iOwogCQl9OwotCQk3QTc5RTJERDIxMDdGMkREMDBFRjMyQTQgLyogUHJvY2VzcyBQbHVnaW4g
ZW50aXRsZW1lbnRzICovID0gewotCQkJaXNhID0gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlOwot
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJ
CWlucHV0UGF0aHMgPSAoCi0JCQkJIiQoU1JDUk9PVCkvU2NyaXB0cy9wcm9jZXNzLWVudGl0bGVt
ZW50cy5zaCIsCi0JCQkpOwotCQkJbmFtZSA9ICJQcm9jZXNzIFBsdWdpbiBlbnRpdGxlbWVudHMi
OwotCQkJb3V0cHV0UGF0aHMgPSAoCi0JCQkJIiQoV0tfUFJPQ0VTU0VEX1hDRU5UX0ZJTEUpIiwK
LQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJCXNo
ZWxsUGF0aCA9IC9iaW4vc2g7Ci0JCQlzaGVsbFNjcmlwdCA9ICJTY3JpcHRzL3Byb2Nlc3MtZW50
aXRsZW1lbnRzLnNoXG4iOwotCQl9OwogCQk3QUZDQkQ1NDIwQjg5MTFEMDBGNTVDOUMgLyogUHJv
Y2VzcyBXZWJDb250ZW50IGVudGl0bGVtZW50cyAqLyA9IHsKIAkJCWlzYSA9IFBCWFNoZWxsU2Ny
aXB0QnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0xNDY0
OCwxNCArMTQwMTEsNiBAQAogLyogRW5kIFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZSBzZWN0aW9u
ICovCiAKIC8qIEJlZ2luIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMUFDMjVG
QUQxMkE0OEVBNzAwQkQyNjcxIC8qIFNvdXJjZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhTb3VyY2Vz
QnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9
ICgKLQkJCQkxQUMyNUZDMjEyQTQ4RjYwMDBCRDI2NzEgLyogUGx1Z2luUHJvY2Vzc1NoaW0ubW0g
aW4gU291cmNlcyAqLywKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKLQkJfTsKIAkJMkQ5RkIyMUIyMzc1MjM4MzAwNDlGOTM2IC8qIFNvdXJjZXMgKi8g
PSB7CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9
IDIxNDc0ODM2NDc7CkBAIC0xNDY4NywxMSArMTQwNDIsMTEgQEAKIAkJCWlzYSA9IFBCWFNvdXJj
ZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVz
ID0gKAotCQkJCTUxMkNENkEwMjcyMzM5M0EwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNUMxNTdBMDEyNzE3QjdGQjAwRUQ1MjgwIC8qIEFyZ3VtZW50Q29k
ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMTU3OUZGMjcxN0I2RDIwMEVENTI4MCAvKiBE
YWVtb25EZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMTU3OUZFMjcxN0I2QzEwMEVE
NTI4MCAvKiBEYWVtb25FbmNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMTU3OUZCMjcx
N0FGNTAwMEVENTI4MCAvKiBEYWVtb25VdGlsaXRpZXMubW0gaW4gU291cmNlcyAqLywKKwkJCQk1
MTJDRDZBMDI3MjMzOTNBMDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbi5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTVDMTU3QTBDMjcxN0NBMUQwMEVENTI4MCAvKiBXZWJQdXNoRGFlbW9uTWFpbi5tbSBp
biBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwpAQCAtMTQ3NTYsOCArMTQxMTEsNiBAQAogCQkJCTI3NDlGNjQ0MjE0NjU2MUIwMDgz
ODBCRiAvKiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
Mjc0OUY2NDUyMTQ2NTYxRTAwODM4MEJGIC8qIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOUJGNUVDNjQyNTQxMTQ1NjAwOTg0RTc3IC8qIEpTSVBDQmlu
ZGluZy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRDkxMzQ0MTIxMkNGOUYwMDAxMjhBRkQgLyog
SlNOUE1ldGhvZC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRDkxMzQ0MjIxMkNGOUYwMDAxMjhB
RkQgLyogSlNOUE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMTREMzdGRTI0QUNFMDg2
MDA3RkYwMTQgLyogTGF1bmNoU2VydmljZXNEYXRhYmFzZU1hbmFnZXIubW0gaW4gU291cmNlcyAq
LywKIAkJCQlDMTcxMENGNzI0QUE2NDMyMDBEN0MxMTIgLyogTGF1bmNoU2VydmljZXNEYXRhYmFz
ZU9ic2VydmVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjk4NEY1ODgxNjRCQTA5NTAwNEJDMEM2
IC8qIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTE0Nzc1LDEwICsxNDEyOCw2IEBACiAJCQkJMkQ5MkE3ODIyMTJCNkE3MTAw
RjQ5M0ZEIC8qIE1lc3NhZ2VTZW5kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5MkE3N0Ey
MTJCNkE2MTAwRjQ5M0ZEIC8qIE1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1N0I4MjY0
NTIzMDRGMTQwMDBCNzJFQjAgLyogTmVhckZpZWxkU29mdExpbmsubW0gaW4gU291cmNlcyAqLywK
LQkJCQkyRDkxMzQ0MzIxMkNGOUYwMDAxMjhBRkQgLyogTmV0c2NhcGVCcm93c2VyRnVuY3MuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJMkQ5MTM0NDQyMTJDRjlGMDAwMTI4QUZEIC8qIE5ldHNjYXBl
UGx1Z2luLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTJEOTJBNzk2MjEyQjZBREEwMEY0OTNGRCAv
KiBOZXRzY2FwZVBsdWdpbk1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRDkxMzQ0NTIx
MkNGOUYwMDAxMjhBRkQgLyogTmV0c2NhcGVQbHVnaW5TdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQzFDMUIzMEYyNTQwRjUwRDAwRDkxMDBCIC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFERDlGMjgxNjM2N0RBMjAwMTU3OEU5
IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTUyRjA2MEUxMTY1NDMxODUwMEYzMjgxQiAvKiBOZXR3b3JrQ29udGVu
dFJ1bGVMaXN0TWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE0
Nzk1LDM1ICsxNDE0NCw5IEBACiAJCQkJNUMwQjE3NzgxRTdDODgwRTAwRTkxMjNDIC8qIE5ldHdv
cmtTb2NrZXRTdHJlYW1NZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMw
ODVERDIyNkUyRjU4RDAwMEVDNkE3IC8qIE5ldHdvcmtTdG9yYWdlTWFuYWdlck1lc3NhZ2VSZWNl
aXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTQ1MjcwMzI3MUZCQTNBMDAwNDY3QjYgLyog
Tm90aWZpY2F0aW9uTWFuYWdlck1lc3NhZ2VIYW5kbGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTJEOTJBNzkwMjEyQjZBRDQwMEY0OTNGRCAvKiBOUElkZW50aWZpZXJE
YXRhLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTJEOTEzNDQ2MjEyQ0Y5RjAwMDEyOEFGRCAvKiBO
UEpTT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTJEOTJBNzkxMjEyQjZBRDQwMEY0OTNG
RCAvKiBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxQTJE
ODQzOTEyN0Y2NUQ1MDAxRUI5NjIgLyogTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXJNZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkQ5MkE3OTIyMTJCNkFENDAwRjQ5M0ZEIC8q
IE5QT2JqZWN0UHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkQ5MkE3OTMyMTJCNkFENDAw
RjQ5M0ZEIC8qIE5QUmVtb3RlT2JqZWN0TWFwLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTJEOTEz
NDQ3MjEyQ0Y5RjAwMDEyOEFGRCAvKiBOUFJ1bnRpbWVPYmplY3RNYXAuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJMkQ5MTM0NDgyMTJDRjlGMDAwMTI4QUZEIC8qIE5QUnVudGltZVV0aWxpdGllcy5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQkyRDkyQTc5NDIxMkI2QUQ0MDBGNDkzRkQgLyogTlBWYXJp
YW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREEyOUEyODFDQkVCNjdBMDA5MDFDQ0Yg
LyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlDREEyOUEyQTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOTEzNDQ5MjEy
Q0Y5RjAwMDEyOEFGRCAvKiBQbHVnaW4uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUE4RUY0Q0Mx
MjUyNDAzNzAwRjcwNjdGIC8qIFBsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQkxQTJEOTFBNjEyODFENzM5MDAxRUI5NjIgLyogUGx1Z2luQ29udHJvbGxlclByb3h5
TWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMUE4RUY5NkUxMjUyQUY2QjAwRjcwNjdGIC8qIFBs
dWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQkxQTE3OTc3RjEzN0VFODJDMDBGOTdENDUgLyogUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTJEOTJBNzk3MjEyQjZBREEwMEY0OTNGRCAvKiBQbHVnaW5J
bmZvcm1hdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxQTA0Mzk3NzEyNEQwMzQ4MDBGRkJG
QjUgLyogUGx1Z2luUHJvY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRDkxMzQ0QTIxMkNG
OUYwMDAxMjhBRkQgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJMkQ5MTM0NEIyMTJDRjlGMDAwMTI4QUZEIC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9u
TWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxQTc4NjVCOTE2Q0FDNzE1MDBBQ0U4M0Eg
LyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTFBMkJCNkQwMTQxMTdCNEQwMDBGMzVENCAvKiBQbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRDkyQTc5
NTIxMkI2QUQ0MDBGNDkzRkQgLyogUGx1Z2luUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQkxQUE0NzkyMzEyQTU5RkQ5MDA4MjM2QzMgLyogUGx1Z2luUHJv
Y2Vzc01hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTFBMDQzQ0VCMTI0RkUzOEYwMEZGQkZCNSAv
KiBQbHVnaW5Qcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTFB
MDQzQjVEMTI0RDVFOUQwMEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkQ5MTM0NEMyMTJDRjlGMDAwMTI4QUZEIC8qIFBs
dWdpblByb3h5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTFBOEVGQTcwMTI1MkI4NDEwMEY3MDY3
RiAvKiBQbHVnaW5Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlC
QzgyODQ0RDE2QjUwODFDMDBBMjc4RkUgLyogUGx1Z2luU2VydmljZUVudHJ5UG9pbnQubW0gaW4g
U291cmNlcyAqLywKIAkJCQkyRDkxMzQ0RDIxMkNGOUYwMDAxMjhBRkQgLyogUGx1Z2luVmlldy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlDMTVDQkIzNzIzRjM3RUNCMDAzMDBDQzcgLyogUHJlZmVy
ZW5jZU9ic2VydmVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ1NEMzMUIyMTJGNERBNjAwNDlD
MTc0IC8qIFByb2Nlc3NMYXVuY2hlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE1MTIxLDggKzE0
NDQ0LDYgQEAKIAkJCQkzMUIzNjI5OTIxNDFGNkU4MDA3QkZBNTMgLyogV2ViUHJlZmVyZW5jZXNJ
bnRlcm5hbERlYnVnRmVhdHVyZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NCMTAwRjExRkEz
ODU4QTAwMTcyOUVFIC8qIFdlYlByZWZlcmVuY2VzS2V5cy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3Q0IxMDBGNDFGQTM4NTkyMDAxNzI5RUUgLyogV2ViUHJlZmVyZW5jZXNTdG9yZURlZmF1bHRz
TWFwLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTFBMDQzQTBBMTI0RDExQTkwMEZGQkZCNSAvKiBX
ZWJQcm9jZXNzQ29ubmVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxQTA0M0Y2OTEyNTE0
RDhCMDBGRkJGQjUgLyogV2ViUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkMzMDY2QkUxMjVBNDQyMTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NN
ZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NFNEQyMjcxQTQ5MTZDMjAw
QzdGMTUyIC8qIFdlYlByb2Nlc3NQb29sTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDRUU3QUQwMTI4MTc5ODgwMDk4MjdEQSAvKiBXZWJQcm9jZXNzUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNTE4NiwxNSArMTQ1MDcsNiBAQAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwotCQlC
QzgyODQxQjE2QjRGREY2MDBBMjc4RkUgLyogU291cmNlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWFNv
dXJjZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZp
bGVzID0gKAotCQkJCTVDRTkxMjEzMjI5M0MyNzkwMDVCRUM3OCAvKiBBdXhpbGlhcnlQcm9jZXNz
TWFpbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1QzlBOTExNDIyOEY2OUNFMDA1QzVCMTcgLyog
WFBDU2VydmljZU1haW4ubW0gaW4gU291cmNlcyAqLywKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKIAkJQ0Q5NTQ5MzIyNjE1OTAwNDAwODM3
MkQ5IC8qIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJ
CWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0xNTIzNiwxMSArMTQ1NDgsNiBAQAog
CQkJdGFyZ2V0ID0gMzcyRUJCMzgyMDE3RTY0MzAwMDg1MDY0IC8qIFdlYkNvbnRlbnQuRGV2ZWxv
cG1lbnQgKi87CiAJCQl0YXJnZXRQcm94eSA9IDM3MkVCQjQ4MjAxN0U2Q0YwMDA4NTA2NCAvKiBQ
QlhDb250YWluZXJJdGVtUHJveHkgKi87CiAJCX07Ci0JCTM3NUUwNjJCMTkxRUE4RDQwMDRFM0NB
RiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0gewotCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5k
ZW5jeTsKLQkJCXRhcmdldCA9IDhEQzJFRjRGMDQ4NkE2OTQwMDk4QjIxNiAvKiBXZWJLaXQgKi87
Ci0JCQl0YXJnZXRQcm94eSA9IDM3NUUwNjJBMTkxRUE4RDQwMDRFM0NBRiAvKiBQQlhDb250YWlu
ZXJJdGVtUHJveHkgKi87Ci0JCX07CiAJCTM3NUUwNjMxMTkxRUE5MDQwMDRFM0NBRiAvKiBQQlhU
YXJnZXREZXBlbmRlbmN5ICovID0gewogCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKIAkJ
CXRhcmdldCA9IDhEQzJFRjRGMDQ4NkE2OTQwMDk4QjIxNiAvKiBXZWJLaXQgKi87CkBAIC0xNTI1
MSwxMSArMTQ1NTgsNiBAQAogCQkJdGFyZ2V0ID0gOERDMkVGNEYwNDg2QTY5NDAwOThCMjE2IC8q
IFdlYktpdCAqLzsKIAkJCXRhcmdldFByb3h5ID0gMzc1RTA2MzIxOTFFQTkwOTAwNEUzQ0FGIC8q
IFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKIAkJfTsKLQkJMzdCMUQwMTQxQzFFNDIxMTAwRDY3
RkU5IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7Ci0JCQlpc2EgPSBQQlhUYXJnZXREZXBl
bmRlbmN5OwotCQkJdGFyZ2V0ID0gMUFDMjVGQUYxMkE0OEVBNzAwQkQyNjcxIC8qIFBsdWdpblBy
b2Nlc3NTaGltICovOwotCQkJdGFyZ2V0UHJveHkgPSAzN0IxRDAxMzFDMUU0MjExMDBENjdGRTkg
LyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOwotCQl9OwogCQkzN0Y3NDA3OTEyNzIxRjc0MDA5
Mzg2OUIgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKIAkJCWlzYSA9IFBCWFRhcmdldERl
cGVuZGVuY3k7CiAJCQl0YXJnZXQgPSBDMENFNzI4NTEyNDdFNjY4MDBCQzBFQzQgLyogRGVyaXZl
ZCBTb3VyY2VzICovOwpAQCAtMTUzMjEsMTEgKzE0NjIzLDYgQEAKIAkJCXRhcmdldCA9IEJDODI4
M0IwMTZCNEJGNzcwMEEyNzhGRSAvKiBOZXR3b3JraW5nICovOwogCQkJdGFyZ2V0UHJveHkgPSBC
QzgyODNENDE2QjRDMDFGMDBBMjc4RkUgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOwogCQl9
OwotCQlCQzgyODQ0NjE2QjRGRjY2MDBBMjc4RkUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9
IHsKLQkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7Ci0JCQl0YXJnZXQgPSBCQzgyODQxRTE2
QjRGREY2MDBBMjc4RkUgLyogUGx1Z2luLjY0ICovOwotCQkJdGFyZ2V0UHJveHkgPSBCQzgyODQ0
NTE2QjRGRjY2MDBBMjc4RkUgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOwotCQl9OwogCQlC
Q0E4RDQ2ODE1QkNFMEQ2MDA5REMxRjEgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKIAkJ
CWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CiAJCQl0YXJnZXQgPSBCQzNERTQ2NTE1QTkxNzYz
MDA4RDI2RkMgLyogV2ViQ29udGVudCAqLzsKQEAgLTE1MzUxLDExICsxNDY0OCw2IEBACiAJCQl0
YXJnZXQgPSA4REMyRUY0RjA0ODZBNjk0MDA5OEIyMTYgLyogV2ViS2l0ICovOwogCQkJdGFyZ2V0
UHJveHkgPSBERkVFMzY5OTI2RkFEMTEyMDA3Qzc4RTAgLyogUEJYQ29udGFpbmVySXRlbVByb3h5
ICovOwogCQl9OwotCQlFMUFDMkUyRTIwRjdCOTg4MDBCMDg5N0QgLyogUEJYVGFyZ2V0RGVwZW5k
ZW5jeSAqLyA9IHsKLQkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7Ci0JCQl0YXJnZXQgPSBF
MUFDMkUyNzIwRjdCOTRDMDBCMDg5N0QgLyogVW5sb2NrIEtleWNoYWluICovOwotCQkJdGFyZ2V0
UHJveHkgPSBFMUFDMkUyRDIwRjdCOTg4MDBCMDg5N0QgLyogUEJYQ29udGFpbmVySXRlbVByb3h5
ICovOwotCQl9OwogCQlFMUFDMkUzMjIwRjdCOTlCMDBCMDg5N0QgLyogUEJYVGFyZ2V0RGVwZW5k
ZW5jeSAqLyA9IHsKIAkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CiAJCQl0YXJnZXQgPSBF
MUFDMkUyNzIwRjdCOTRDMDBCMDg5N0QgLyogVW5sb2NrIEtleWNoYWluICovOwpAQCAtMTUzNzEs
MTEgKzE0NjYzLDYgQEAKIAkJCXRhcmdldCA9IEUxQUMyRTI3MjBGN0I5NEMwMEIwODk3RCAvKiBV
bmxvY2sgS2V5Y2hhaW4gKi87CiAJCQl0YXJnZXRQcm94eSA9IEUxQUMyRTM1MjBGN0I5QTEwMEIw
ODk3RCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CiAJCX07Ci0JCUUxQUMyRTNBMjBGN0I5
QTcwMEIwODk3RCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0gewotCQkJaXNhID0gUEJYVGFy
Z2V0RGVwZW5kZW5jeTsKLQkJCXRhcmdldCA9IEUxQUMyRTI3MjBGN0I5NEMwMEIwODk3RCAvKiBV
bmxvY2sgS2V5Y2hhaW4gKi87Ci0JCQl0YXJnZXRQcm94eSA9IEUxQUMyRTM5MjBGN0I5QTcwMEIw
ODk3RCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87Ci0JCX07CiAJCUUxQUMyRTNFMjBGN0I5
QzAwMEIwODk3RCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0gewogCQkJaXNhID0gUEJYVGFy
Z2V0RGVwZW5kZW5jeTsKIAkJCXRhcmdldCA9IEUxQUMyRTI3MjBGN0I5NEMwMEIwODk3RCAvKiBV
bmxvY2sgS2V5Y2hhaW4gKi87CkBAIC0xNTQxMSwzMyArMTQ2OTgsNiBAQAogCQkJfTsKIAkJCW5h
bWUgPSBSZWxlYXNlOwogCQl9OwotCQkxQUMyNUZCMTEyQTQ4RUE3MDBCRDI2NzEgLyogRGVidWcg
Ki8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0
aW9uUmVmZXJlbmNlID0gQTFFREQyREIxODg0Qjk2NDAwQkJGRTk4IC8qIFBsdWdpblByb2Nlc3NT
aGltLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlPVEhFUl9MREZMQUdT
ID0gIiQoT1RIRVJfTERGTEFHUykiOwotCQkJCVBST0RVQ1RfTkFNRSA9IFBsdWdpblByb2Nlc3NT
aGltOwotCQkJfTsKLQkJCW5hbWUgPSBEZWJ1ZzsKLQkJfTsKLQkJMUFDMjVGQjIxMkE0OEVBNzAw
QkQyNjcxIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsK
LQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQTFFREQyREIxODg0Qjk2NDAwQkJGRTk4
IC8qIFBsdWdpblByb2Nlc3NTaGltLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsK
LQkJCQlPVEhFUl9MREZMQUdTID0gIiQoT1RIRVJfTERGTEFHUykiOwotCQkJCVBST0RVQ1RfTkFN
RSA9IFBsdWdpblByb2Nlc3NTaGltOwotCQkJfTsKLQkJCW5hbWUgPSBSZWxlYXNlOwotCQl9Owot
CQkxQUMyNUZCMzEyQTQ4RUE3MDBCRDI2NzEgLyogUHJvZHVjdGlvbiAqLyA9IHsKLQkJCWlzYSA9
IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBB
MUVERDJEQjE4ODRCOTY0MDBCQkZFOTggLyogUGx1Z2luUHJvY2Vzc1NoaW0ueGNjb25maWcgKi87
Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCU9USEVSX0xERkxBR1MgPSAiJChPVEhFUl9MREZM
QUdTKSI7Ci0JCQkJUFJPRFVDVF9OQU1FID0gUGx1Z2luUHJvY2Vzc1NoaW07Ci0JCQl9OwotCQkJ
bmFtZSA9IFByb2R1Y3Rpb247Ci0JCX07CiAJCTFERUI5MUFFMDg3MzNEQTUwMDEwRTlDRCAvKiBE
ZWJ1ZyAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJYmFzZUNvbmZp
Z3VyYXRpb25SZWZlcmVuY2UgPSBCQ0I4NkY0QjExNkFBQUNEMDBDRTIwQjcgLyogV2ViS2l0Lnhj
Y29uZmlnICovOwpAQCAtMTU3NjQsMjcgKzE1MDI0LDYgQEAKIAkJCX07CiAJCQluYW1lID0gUHJv
ZHVjdGlvbjsKIAkJfTsKLQkJQkM4Mjg0MkIxNkI0RkRGNzAwQTI3OEZFIC8qIERlYnVnICovID0g
ewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJl
ZmVyZW5jZSA9IEJDODI4M0Y0MTZCNEZDNTMwMEEyNzhGRSAvKiBQbHVnaW5TZXJ2aWNlLnhjY29u
ZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCX07Ci0JCQluYW1lID0gRGVidWc7Ci0J
CX07Ci0JCUJDODI4NDJDMTZCNEZERjcwMEEyNzhGRSAvKiBSZWxlYXNlICovID0gewotCQkJaXNh
ID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9
IEJDODI4M0Y0MTZCNEZDNTMwMEEyNzhGRSAvKiBQbHVnaW5TZXJ2aWNlLnhjY29uZmlnICovOwot
CQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJ
QkM4Mjg0MkQxNkI0RkRGNzAwQTI3OEZFIC8qIFByb2R1Y3Rpb24gKi8gPSB7Ci0JCQlpc2EgPSBY
Q0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkM4
MjgzRjQxNkI0RkM1MzAwQTI3OEZFIC8qIFBsdWdpblNlcnZpY2UueGNjb25maWcgKi87Ci0JCQli
dWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCW5hbWUgPSBQcm9kdWN0aW9uOwotCQl9OwogCQlD
MENFNzI4NjEyNDdFNjY4MDBCQzBFQzQgLyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxk
Q29uZmlndXJhdGlvbjsKIAkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gNURBRDczRjEx
MTZGRjkwQzAwRUU1Mzk2IC8qIEJhc2VUYXJnZXQueGNjb25maWcgKi87CkBAIC0xNTg5NiwxNiAr
MTUxMzUsNiBAQAogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJZGVm
YXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKLQkJMUFDMjVGQkExMkE0
OEVCNjAwQkQyNjcxIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFy
Z2V0ICJQbHVnaW5Qcm9jZXNzU2hpbSIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25M
aXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQkxQUMyNUZCMTEyQTQ4RUE3MDBC
RDI2NzEgLyogRGVidWcgKi8sCi0JCQkJMUFDMjVGQjIxMkE0OEVBNzAwQkQyNjcxIC8qIFJlbGVh
c2UgKi8sCi0JCQkJMUFDMjVGQjMxMkE0OEVBNzAwQkQyNjcxIC8qIFByb2R1Y3Rpb24gKi8sCi0J
CQkpOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwotCQkJZGVmYXVsdENv
bmZpZ3VyYXRpb25OYW1lID0gUHJvZHVjdGlvbjsKLQkJfTsKIAkJMURFQjkxQUQwODczM0RBNTAw
MTBFOUNEIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJX
ZWJLaXQiICovID0gewogCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29u
ZmlndXJhdGlvbnMgPSAoCkBAIC0xNjA0NiwxNiArMTUyNzUsNiBAQAogCQkJZGVmYXVsdENvbmZp
Z3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUHJv
ZHVjdGlvbjsKIAkJfTsKLQkJQkM4Mjg0MkExNkI0RkRGNzAwQTI3OEZFIC8qIEJ1aWxkIGNvbmZp
Z3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJQbHVnaW4uNjQiICovID0gewotCQkJ
aXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0J
CQkJQkM4Mjg0MkIxNkI0RkRGNzAwQTI3OEZFIC8qIERlYnVnICovLAotCQkJCUJDODI4NDJDMTZC
NEZERjcwMEEyNzhGRSAvKiBSZWxlYXNlICovLAotCQkJCUJDODI4NDJEMTZCNEZERjcwMEEyNzhG
RSAvKiBQcm9kdWN0aW9uICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNp
YmxlID0gMDsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247Ci0JCX07
CiAJCUMwQ0U3Mjg5MTI0N0U2ODYwMEJDMEVDNCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWEFnZ3JlZ2F0ZVRhcmdldCAiRGVyaXZlZCBTb3VyY2VzIiAqLyA9IHsKIAkJCWlzYSA9
IFhDQ29uZmlndXJhdGlvbkxpc3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhv
ZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0
aG9kLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI0YTk2ZTE3OTRjYjhkOTFl
ZDM5ZjE1ZDNkNDViZjAwOTY5NDhjNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9K
U05QTWV0aG9kLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU05QTWV0aG9kLmgiCi0KLSNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIkpTTlBPYmplY3QuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9FcnJvci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSXNvU3Vi
c3BhY2VQZXJWTS5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNHbG9iYWxPYmpl
Y3RJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3QuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0pTSFRNTEVsZW1lbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0pTUGx1Z2lu
RWxlbWVudEZ1bmN0aW9ucy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFj
ZSBKU0M7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotU1RBVElDX0FTU0VSVF9JU19UUklW
SUFMTFlfREVTVFJVQ1RJQkxFKEpTTlBNZXRob2QpOwotCi1jb25zdCBDbGFzc0luZm8gSlNOUE1l
dGhvZDo6c19pbmZvID0geyAiTlBNZXRob2QiLCAmSW50ZXJuYWxGdW5jdGlvbjo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTTlBNZXRob2QpIH07Ci0KLXN0
YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNhbGxNZXRob2QpOwotCi1KU05QTWV0aG9k
OjpKU05QTWV0aG9kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBOUElkZW50aWZpZXIgbnBJZGVudGlmaWVyKQotICAgIDogSW50ZXJuYWxGdW5jdGlv
bihnbG9iYWxPYmplY3QtPnZtKCksIHN0cnVjdHVyZSwgY2FsbE1ldGhvZCwgbnVsbHB0cikKLSAg
ICAsIG1fbnBJZGVudGlmaWVyKG5wSWRlbnRpZmllcikKLXsKLX0KLQotdm9pZCBKU05QTWV0aG9k
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSwgMCwgbmFtZSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKHZtLCBp
bmZvKCkpKTsKLX0KLQotSXNvU3Vic3BhY2UqIEpTTlBNZXRob2Q6OnN1YnNwYWNlRm9ySW1wbChW
TSYgdm0pCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPElzb1N1YnNwYWNlUGVyVk0+IHBl
clZNKFtdIChWTSYgdm0pIHsgcmV0dXJuIElTT19TVUJTUEFDRV9QQVJBTUVURVJTKHZtLmNlbGxI
ZWFwQ2VsbFR5cGUuZ2V0KCksIEpTTlBNZXRob2QpOyB9KTsKLSAgICByZXR1cm4gJnBlclZNLmdl
dCgpLmZvclZNKHZtKTsKLX0KLQotSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxNZXRob2Qs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCi17
Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIEpTTlBNZXRob2QqIGpzTlBNZXRob2QgPSBqc0Nh
c3Q8SlNOUE1ldGhvZCo+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7Ci0KLSAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7Ci0KLSAgICAvLyBDaGVjayBpZiB3ZSdy
ZSBjYWxsaW5nIGEgbWV0aG9kIG9uIHRoZSBwbHVnLWluIHNjcmlwdCBvYmplY3QuCi0gICAgaWYg
KHRoaXNWYWx1ZS5pbmhlcml0czxKU0hUTUxFbGVtZW50Pih2bSkpIHsKLSAgICAgICAgSlNIVE1M
RWxlbWVudCogZWxlbWVudCA9IGpzQ2FzdDxKU0hUTUxFbGVtZW50Kj4oYXNPYmplY3QodGhpc1Zh
bHVlKSk7Ci0KLSAgICAgICAgLy8gVHJ5IHRvIGdldCB0aGUgc2NyaXB0IG9iamVjdCBmcm9tIHRo
ZSBlbGVtZW50Ci0gICAgICAgIGlmIChKU09iamVjdCogc2NyaXB0T2JqZWN0ID0gcGx1Z2luU2Ny
aXB0T2JqZWN0KGdsb2JhbE9iamVjdCwgZWxlbWVudCkpCi0gICAgICAgICAgICB0aGlzVmFsdWUg
PSBzY3JpcHRPYmplY3Q7Ci0gICAgfQotCi0gICAgaWYgKHRoaXNWYWx1ZS5pbmhlcml0czxKU05Q
T2JqZWN0Pih2bSkpIHsKLSAgICAgICAgSlNOUE9iamVjdCoganNOUE9iamVjdCA9IGpzQ2FzdDxK
U05QT2JqZWN0Kj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0KLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc05QT2JqZWN0LT5jYWxsTWV0aG9kKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LCBqc05QTWV0aG9kLT5ucElkZW50aWZpZXIoKSkpOwotICAgIH0KLQotICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5o
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzY5MDI3MTY4ODU1MDFjN2Y1Mjc5OTAz
MDg3YWVlNGU4ZTQ0ZmJkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRo
b2QuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgSlNOUE1ldGhvZF9oCi0jZGVmaW5lIEpTTlBNZXRob2RfaAotCi0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblBy
b3RvdHlwZS5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ludGVybmFsRnVuY3Rpb24uaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdC5oPgotCi10eXBlZGVmIHZv
aWQqIE5QSWRlbnRpZmllcjsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLS8vIEEgSlNPYmplY3Qg
dGhhdCB3cmFwcyBhbiBOUE1ldGhvZC4KLWNsYXNzIEpTTlBNZXRob2QgZmluYWwgOiBwdWJsaWMg
SlNDOjpJbnRlcm5hbEZ1bmN0aW9uIHsKLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlID0gSlNDOjpJ
bnRlcm5hbEZ1bmN0aW9uOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6
U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KEpTQzo6Vk0mIHZtKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7
Ci0gICAgfQotCi0gICAgc3RhdGljIEpTTlBNZXRob2QqIGNyZWF0ZShKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgTlBJZGVudGlmaWVyIG5wSWRl
bnQpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAg
ICAgICAgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNyZWF0ZVN0cnVjdHVyZShnbG9iYWxP
YmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblByb3RvdHlw
ZSgpKTsKLSAgICAgICAgSlNOUE1ldGhvZCogbWV0aG9kID0gbmV3IChKU0M6OmFsbG9jYXRlQ2Vs
bDxKU05QTWV0aG9kPih2bS5oZWFwKSkgSlNOUE1ldGhvZChnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSwgbnBJZGVudCk7Ci0gICAgICAgIG1ldGhvZC0+ZmluaXNoQ3JlYXRpb24odm0sIG5hbWUpOwot
ICAgICAgICByZXR1cm4gbWV0aG9kOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLQotICAg
IE5QSWRlbnRpZmllciBucElkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX25wSWRlbnRpZmll
cjsgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYpOwotICAgIAotICAgIEpTTlBNZXRob2QoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6U3RydWN0dXJlKiwgTlBJZGVudGlmaWVyKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6Vk0mLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotCi0gICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6OkludGVybmFsRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7Ci0gICAgfQotCi0gICAgTlBJZGVudGlmaWVyIG1fbnBJZGVudGlmaWVyOwotfTsK
LQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQotCi0jZW5kaWYgLy8gSlNOUE1ldGhvZF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGY0NzAwNTZiMGRjYTI4MjI3NmQ3OWUzNzRlZTQ1
ZjdkZjRiNDNlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNTQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU05QT2JqZWN0LmgiCi0KLSNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIkpTTlBNZXRob2QuaCIKLSNpbmNsdWRlICJO
UEpTT2JqZWN0LmgiCi0jaW5jbHVkZSAiTlBSdW50aW1lT2JqZWN0TWFwLmgiCi0jaW5jbHVkZSAi
TlBSdW50aW1lVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQXV4aWxpYXJ5
QmFycmllcklubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9FcnJvci5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lkZW50aWZpZXJJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSXNvU3Vic3BhY2VQZXJWTS5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xvY2su
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PYmplY3RQcm90b3R5cGUuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0NvbW1vblZNLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9ET01XaW5kb3cuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0lkZW50aWZpZXJSZXAuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0pTRE9N
V2luZG93QmFzZS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNl
IEpTQzsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1zdGF0aWMgSlNDX0RFQ0xBUkVfQ1VT
VE9NX0dFVFRFUihwcm9wZXJ0eUdldHRlcik7Ci1zdGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dF
VFRFUihtZXRob2RHZXR0ZXIpOwotCi1zdGF0aWMgTlBJZGVudGlmaWVyIG5wSWRlbnRpZmllckZy
b21JZGVudGlmaWVyKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgU3RyaW5nIG5h
bWUocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Ci0gICAgLy8gSWYgdGhlIHByb3BlcnR5TmFt
ZSBpcyBTeW1ib2wuCi0gICAgaWYgKG5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXI+KElkZW50aWZpZXJSZXA6
OmdldChuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLX0KLQotc3RhdGljIEpTQzo6RXhjZXB0aW9uKiB0
aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgVGhyb3dTY29wZSYgc2NvcGUpCi17Ci0gICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGxleGlj
YWxHbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVSZWZlcmVuY2VFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVHJ5aW5nIHRvIGFjY2VzcyBvYmplY3QgZnJvbSBkZXN0cm95ZWQgcGx1Zy1pbi4i
KSk7Ci19Ci0KLWNvbnN0IENsYXNzSW5mbyBKU05QT2JqZWN0OjpzX2luZm8gPSB7ICJOUE9iamVj
dCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNOUE9iamVjdCkgfTsKLQotSlNOUE9iamVjdDo6SlNOUE9iamVjdChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTlBSdW50aW1lT2JqZWN0TWFwKiBv
YmplY3RNYXAsIE5QT2JqZWN0KiBucE9iamVjdCkKLSAgICA6IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
KGdsb2JhbE9iamVjdC0+dm0oKSwgc3RydWN0dXJlKQotICAgICwgbV9vYmplY3RNYXAob2JqZWN0
TWFwKQotICAgICwgbV9ucE9iamVjdChucE9iamVjdCkKLXsKLSAgICBBU1NFUlQoZ2xvYmFsT2Jq
ZWN0ID09IHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpOwotfQotCi12b2lkIEpTTlBPYmplY3Q6
OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
LSAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwotCi0gICAgLy8gV2Ugc2hvdWxkIG5l
dmVyIGhhdmUgYW4gTlBKU09iamVjdCBpbnNpZGUgYSBKU05QT2JqZWN0LgotICAgIEFTU0VSVCgh
TlBKU09iamVjdDo6aXNOUEpTT2JqZWN0KG1fbnBPYmplY3QpKTsKLQotICAgIHJldGFpbk5QT2Jq
ZWN0KG1fbnBPYmplY3QpOwotfQotCi1KU05QT2JqZWN0Ojp+SlNOUE9iamVjdCgpCi17Ci0gICAg
aWYgKG1fbnBPYmplY3QpCi0gICAgICAgIGludmFsaWRhdGUoKTsKLX0KLQotdm9pZCBKU05QT2Jq
ZWN0OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBzdGF0aWNfY2FzdDxKU05QT2JqZWN0
Kj4oY2VsbCktPkpTTlBPYmplY3Q6On5KU05QT2JqZWN0KCk7Ci19Ci0KLXZvaWQgSlNOUE9iamVj
dDo6aW52YWxpZGF0ZSgpCi17Ci0gICAgQVNTRVJUKG1fbnBPYmplY3QpOwotCi0gICAgcmVsZWFz
ZU5QT2JqZWN0KG1fbnBPYmplY3QpOwotICAgIG1fbnBPYmplY3QgPSAwOwotfQotCi1OUE9iamVj
dCogSlNOUE9iamVjdDo6bGVha05QT2JqZWN0KCkKLXsKLSAgICBBU1NFUlQobV9ucE9iamVjdCk7
Ci0KLSAgICBOUE9iamVjdCogb2JqZWN0ID0gbV9ucE9iamVjdDsKLSAgICBtX25wT2JqZWN0ID0g
MDsKLSAgICByZXR1cm4gb2JqZWN0OwotfQotCi1KU1ZhbHVlIEpTTlBPYmplY3Q6OmNhbGxNZXRo
b2QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lLCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSkKLXsKLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xv
YmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLQotICAgIEFTU0VSVF9USElTX0dDX09CSkVDVF9JTkhFUklUUyhpbmZvKCkpOwotICAgIGlm
ICghbV9ucE9iamVjdCkKLSAgICAgICAgcmV0dXJuIHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHNjb3BlKTsKLQotICAgIC8vIElmIHRoZSBwcm9wZXJ0eU5hbWUg
aXMgc3ltYm9sLgotICAgIGlmICghbWV0aG9kTmFtZSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0KLSAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpOwotICAgIFZlY3RvcjxOUFZhcmlhbnQsIDg+IGFyZ3VtZW50cyhhcmd1bWVudENvdW50
KTsKLQotICAgIC8vIENvbnZlcnQgYWxsIGFyZ3VtZW50cyB0byBOUFZhcmlhbnRzLgotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKQotICAgICAgICBtX29iamVj
dE1hcC0+Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLCBhcmd1bWVudHNbaV0pOwotCi0gICAgLy8gQ2Fs
bGluZyBOUENsYXNzOjppbnZva2Ugd2lsbCBjYWxsIGludG8gcGx1Zy1pbiBjb2RlLCBhbmQgdGhl
cmUncyBubyB0ZWxsaW5nIHdoYXQgdGhlIHBsdWctaW4gY2FuIGRvLgotICAgIC8vIChpbmNsdWRp
bmcgZGVzdHJveWluZyB0aGUgcGx1Zy1pbikuIEJlY2F1c2Ugb2YgdGhpcywgd2UgbWFrZSBzdXJl
IHRvIGtlZXAgdGhlIHBsdWctaW4gYWxpdmUgdW50aWwgCi0gICAgLy8gdGhlIGNhbGwgaGFzIGZp
bmlzaGVkLgotICAgIE5QUnVudGltZU9iamVjdE1hcDo6UGx1Z2luUHJvdGVjdG9yIHByb3RlY3Rv
cihtX29iamVjdE1hcCk7Ci0KLSAgICBib29sIHJldHVyblZhbHVlOwotICAgIE5QVmFyaWFudCBy
ZXN1bHQ7Ci0gICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsKLSAgICAKLSAgICB7Ci0gICAg
ICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKLSAgICAg
ICAgcmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xhc3MtPmludm9rZShtX25wT2JqZWN0LCBt
ZXRob2ROYW1lLCBhcmd1bWVudHMuZGF0YSgpLCBhcmd1bWVudENvdW50LCAmcmVzdWx0KTsKLSAg
ICAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUo
bGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgfQotCi0gICAgLy8gUmVsZWFzZSBhbGwgYXJndW1l
bnRzLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKQotICAg
ICAgICByZWxlYXNlTlBWYXJpYW50VmFsdWUoJmFyZ3VtZW50c1tpXSk7Ci0KLSAgICBpZiAoIXJl
dHVyblZhbHVlKQotICAgICAgICB0aHJvd0V4Y2VwdGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
Y29wZSwgY3JlYXRlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgIkVycm9yIGNhbGxpbmcgbWV0
aG9kIG9uIE5QT2JqZWN0LiIpKTsKLQotICAgIEpTVmFsdWUgcHJvcGVydHlWYWx1ZSA9IG1fb2Jq
ZWN0TWFwLT5jb252ZXJ0TlBWYXJpYW50VG9KU1ZhbHVlKGdsb2JhbE9iamVjdCgpLCByZXN1bHQp
OwotICAgIHJlbGVhc2VOUFZhcmlhbnRWYWx1ZSgmcmVzdWx0KTsKLSAgICByZXR1cm4gcHJvcGVy
dHlWYWx1ZTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTTlBPYmplY3Q6OmNhbGxPYmplY3QoSlNDOjpK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKLXsKLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIEFTU0VSVF9USElTX0dD
X09CSkVDVF9JTkhFUklUUyhpbmZvKCkpOwotICAgIGlmICghbV9ucE9iamVjdCkKLSAgICAgICAg
cmV0dXJuIHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3Bl
KTsKLQotICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
KCk7Ci0gICAgVmVjdG9yPE5QVmFyaWFudCwgOD4gYXJndW1lbnRzKGFyZ3VtZW50Q291bnQpOwot
ICAgIAotICAgIC8vIENvbnZlcnQgYWxsIGFyZ3VtZW50cyB0byBOUFZhcmlhbnRzLgotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKQotICAgICAgICBtX29iamVj
dE1hcC0+Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLCBhcmd1bWVudHNbaV0pOwotCi0gICAgLy8gQ2Fs
bGluZyBOUENsYXNzOjppbnZva2VEZWZhdWx0IHdpbGwgY2FsbCBpbnRvIHBsdWctaW4gY29kZSwg
YW5kIHRoZXJlJ3Mgbm8gdGVsbGluZyB3aGF0IHRoZSBwbHVnLWluIGNhbiBkby4KLSAgICAvLyAo
aW5jbHVkaW5nIGRlc3Ryb3lpbmcgdGhlIHBsdWctaW4pLiBCZWNhdXNlIG9mIHRoaXMsIHdlIG1h
a2Ugc3VyZSB0byBrZWVwIHRoZSBwbHVnLWluIGFsaXZlIHVudGlsIAotICAgIC8vIHRoZSBjYWxs
IGhhcyBmaW5pc2hlZC4KLSAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBw
cm90ZWN0b3IobV9vYmplY3RNYXApOwotICAgIAotICAgIGJvb2wgcmV0dXJuVmFsdWU7Ci0gICAg
TlBWYXJpYW50IHJlc3VsdDsKLSAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHQpOwotCi0gICAg
ewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7
Ci0gICAgICAgIHJldHVyblZhbHVlID0gbV9ucE9iamVjdC0+X2NsYXNzLT5pbnZva2VEZWZhdWx0
KG1fbnBPYmplY3QsIGFyZ3VtZW50cy5kYXRhKCksIGFyZ3VtZW50Q291bnQsICZyZXN1bHQpOwot
ICAgICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0
ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICB9Ci0KLSAgICAvLyBSZWxlYXNlIGFsbCBhcmd1
bWVudHM7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpCi0g
ICAgICAgIHJlbGVhc2VOUFZhcmlhbnRWYWx1ZSgmYXJndW1lbnRzW2ldKTsKLQotICAgIGlmICgh
cmV0dXJuVmFsdWUpCi0gICAgICAgIHRocm93RXhjZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3Qs
IHNjb3BlLCBjcmVhdGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCAiRXJyb3IgY2FsbGluZyBt
ZXRob2Qgb24gTlBPYmplY3QuIikpOwotCi0gICAgSlNWYWx1ZSBwcm9wZXJ0eVZhbHVlID0gbV9v
YmplY3RNYXAtPmNvbnZlcnROUFZhcmlhbnRUb0pTVmFsdWUoZ2xvYmFsT2JqZWN0KCksIHJlc3Vs
dCk7Ci0gICAgcmVsZWFzZU5QVmFyaWFudFZhbHVlKCZyZXN1bHQpOwotICAgIHJldHVybiBwcm9w
ZXJ0eVZhbHVlOwotfQotCi1KU1ZhbHVlIEpTTlBPYmplY3Q6OmNhbGxDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17
Ci0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBBU1NFUlRfVEhJU19HQ19PQkpFQ1Rf
SU5IRVJJVFMoaW5mbygpKTsKLSAgICBpZiAoIW1fbnBPYmplY3QpCi0gICAgICAgIHJldHVybiB0
aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSk7Ci0KLSAg
ICBzaXplX3QgYXJndW1lbnRDb3VudCA9IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOwotICAg
IFZlY3RvcjxOUFZhcmlhbnQsIDg+IGFyZ3VtZW50cyhhcmd1bWVudENvdW50KTsKLQotICAgIC8v
IENvbnZlcnQgYWxsIGFyZ3VtZW50cyB0byBOUFZhcmlhbnRzLgotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKQotICAgICAgICBtX29iamVjdE1hcC0+Y29udmVy
dEpTVmFsdWVUb05QVmFyaWFudChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KGkpLCBhcmd1bWVudHNbaV0pOwotCi0gICAgLy8gQ2FsbGluZyBOUENsYXNz
Ojpjb25zdHJ1Y3Qgd2lsbCBjYWxsIGludG8gcGx1Zy1pbiBjb2RlLCBhbmQgdGhlcmUncyBubyB0
ZWxsaW5nIHdoYXQgdGhlIHBsdWctaW4gY2FuIGRvLgotICAgIC8vIChpbmNsdWRpbmcgZGVzdHJv
eWluZyB0aGUgcGx1Zy1pbikuIEJlY2F1c2Ugb2YgdGhpcywgd2UgbWFrZSBzdXJlIHRvIGtlZXAg
dGhlIHBsdWctaW4gYWxpdmUgdW50aWwgCi0gICAgLy8gdGhlIGNhbGwgaGFzIGZpbmlzaGVkLgot
ICAgIE5QUnVudGltZU9iamVjdE1hcDo6UGx1Z2luUHJvdGVjdG9yIHByb3RlY3RvcihtX29iamVj
dE1hcCk7Ci0gICAgCi0gICAgYm9vbCByZXR1cm5WYWx1ZTsKLSAgICBOUFZhcmlhbnQgcmVzdWx0
OwotICAgIFZPSURfVE9fTlBWQVJJQU5UKHJlc3VsdCk7Ci0gICAgCi0gICAgewotICAgICAgICBK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7Ci0gICAgICAgIHJl
dHVyblZhbHVlID0gbV9ucE9iamVjdC0+X2NsYXNzLT5jb25zdHJ1Y3QobV9ucE9iamVjdCwgYXJn
dW1lbnRzLmRhdGEoKSwgYXJndW1lbnRDb3VudCwgJnJlc3VsdCk7Ci0gICAgICAgIE5QUnVudGlt
ZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGxleGljYWxHbG9iYWxP
YmplY3QpOwotICAgIH0KLQotICAgIGlmICghcmV0dXJuVmFsdWUpCi0gICAgICAgIHRocm93RXhj
ZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiRXJyb3IgY2FsbGluZyBtZXRob2Qgb24gTlBPYmplY3QuIikpOwotICAgIAot
ICAgIEpTVmFsdWUgdmFsdWUgPSBtX29iamVjdE1hcC0+Y29udmVydE5QVmFyaWFudFRvSlNWYWx1
ZShnbG9iYWxPYmplY3QoKSwgcmVzdWx0KTsKLSAgICByZWxlYXNlTlBWYXJpYW50VmFsdWUoJnJl
c3VsdCk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1zdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9G
VU5DVElPTihjYWxsTlBKU09iamVjdCk7Ci1zdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
Tihjb25zdHJ1Y3RXaXRoQ29uc3RydWN0b3IpOwotCi1KU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
Y2FsbE5QSlNPYmplY3QsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkpCi17Ci0gICAgSlNPYmplY3QqIG9iamVjdCA9IGNhbGxGcmFtZS0+anNDYWxs
ZWUoKTsKLSAgICBBU1NFUlRfVU5VU0VEKGdsb2JhbE9iamVjdCwgb2JqZWN0LT5pbmhlcml0czxK
U05QT2JqZWN0PihnbG9iYWxPYmplY3QtPnZtKCkpKTsKLQotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNDYXN0PEpTTlBPYmplY3QqPihvYmplY3QpLT5jYWxsT2JqZWN0KGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lKSk7Ci19Ci0KLUNhbGxEYXRhIEpTTlBPYmplY3Q6OmdldENhbGxEYXRhKEpT
Q2VsbCogY2VsbCkKLXsKLSAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBKU05QT2JqZWN0KiB0
aGlzT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNOUE9iamVjdCo+KGNlbGwpOwotICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBpZiAodGhpc09iamVj
dC0+bV9ucE9iamVjdCAmJiB0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3MtPmludm9rZURl
ZmF1bHQpIHsKLSAgICAgICAgY2FsbERhdGEudHlwZSA9IENhbGxEYXRhOjpUeXBlOjpOYXRpdmU7
Ci0gICAgICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNhbGxOUEpTT2JqZWN0OwotICAg
IH0KLSAgICByZXR1cm4gY2FsbERhdGE7Ci19Ci0KLUpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihj
b25zdHJ1Y3RXaXRoQ29uc3RydWN0b3IsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkpCi17Ci0gICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yID0gY2Fs
bEZyYW1lLT5qc0NhbGxlZSgpOwotICAgIEFTU0VSVF9VTlVTRUQoZ2xvYmFsT2JqZWN0LCBjb25z
dHJ1Y3Rvci0+aW5oZXJpdHM8SlNOUE9iamVjdD4oZ2xvYmFsT2JqZWN0LT52bSgpKSk7Ci0KLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQ2FzdDxKU05QT2JqZWN0Kj4oY29uc3RydWN0b3Ip
LT5jYWxsQ29uc3RydWN0b3IoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUpKTsKLX0KLQotQ2FsbERh
dGEgSlNOUE9iamVjdDo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqIGNlbGwpCi17Ci0gICAgQ2Fs
bERhdGEgY29uc3RydWN0RGF0YTsKLQotICAgIEpTTlBPYmplY3QqIHRoaXNPYmplY3QgPSBKU0M6
OmpzQ2FzdDxKU05QT2JqZWN0Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGlmICh0aGlzT2JqZWN0LT5tX25wT2JqZWN0ICYm
IHRoaXNPYmplY3QtPm1fbnBPYmplY3QtPl9jbGFzcy0+Y29uc3RydWN0KSB7Ci0gICAgICAgIGNv
bnN0cnVjdERhdGEudHlwZSA9IENhbGxEYXRhOjpUeXBlOjpOYXRpdmU7Ci0gICAgICAgIGNvbnN0
cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0V2l0aENvbnN0cnVjdG9yOwotICAg
IH0KLQotICAgIHJldHVybiBjb25zdHJ1Y3REYXRhOwotfQotCi1ib29sIEpTTlBPYmplY3Q6Omdl
dE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQotewotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgSlNOUE9iamVjdCogdGhp
c09iamVjdCA9IEpTQzo6anNDYXN0PEpTTlBPYmplY3QqPihvYmplY3QpOwotICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBpZiAoIXRoaXNPYmpl
Y3QtPm1fbnBPYmplY3QpIHsKLSAgICAgICAgdGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IAotICAgIE5QSWRlbnRpZmllciBucElkZW50aWZpZXIgPSBucElkZW50aWZpZXJGcm9tSWRlbnRp
Zmllcihwcm9wZXJ0eU5hbWUpOwotICAgIC8vIElmIHRoZSBwcm9wZXJ0eU5hbWUgaXMgc3ltYm9s
LgotICAgIGlmICghbnBJZGVudGlmaWVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAv
LyBDYWxsaW5nIE5QQ2xhc3M6Omludm9rZSB3aWxsIGNhbGwgaW50byBwbHVnLWluIGNvZGUsIGFu
ZCB0aGVyZSdzIG5vIHRlbGxpbmcgd2hhdCB0aGUgcGx1Zy1pbiBjYW4gZG8uCi0gICAgLy8gKGlu
Y2x1ZGluZyBkZXN0cm95aW5nIHRoZSBwbHVnLWluKS4gQmVjYXVzZSBvZiB0aGlzLCB3ZSBtYWtl
IHN1cmUgdG8ga2VlcCB0aGUgcGx1Zy1pbiBhbGl2ZSB1bnRpbCAKLSAgICAvLyB0aGUgY2FsbCBo
YXMgZmluaXNoZWQuCi0gICAgTlBSdW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcHJv
dGVjdG9yKHRoaXNPYmplY3QtPm1fb2JqZWN0TWFwKTsKLQotICAgIC8vIEZpcnN0LCBjaGVjayBp
ZiB0aGUgTlBPYmplY3QgaGFzIGEgcHJvcGVydHkgd2l0aCB0aGlzIG5hbWUuCi0gICAgaWYgKHRo
aXNPYmplY3QtPm1fbnBPYmplY3QtPl9jbGFzcy0+aGFzUHJvcGVydHkgJiYgdGhpc09iamVjdC0+
bV9ucE9iamVjdC0+X2NsYXNzLT5oYXNQcm9wZXJ0eSh0aGlzT2JqZWN0LT5tX25wT2JqZWN0LCBu
cElkZW50aWZpZXIpKSB7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlKSwgcHJv
cGVydHlHZXR0ZXIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBTZWNv
bmQsIGNoZWNrIGlmIHRoZSBOUE9iamVjdCBoYXMgYSBtZXRob2Qgd2l0aCB0aGlzIG5hbWUuCi0g
ICAgaWYgKHRoaXNPYmplY3QtPm1fbnBPYmplY3QtPl9jbGFzcy0+aGFzTWV0aG9kICYmIHRoaXNP
YmplY3QtPm1fbnBPYmplY3QtPl9jbGFzcy0+aGFzTWV0aG9kKHRoaXNPYmplY3QtPm1fbnBPYmpl
Y3QsIG5wSWRlbnRpZmllcikpIHsKLSAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5LCBtZXRob2RHZXR0ZXIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEpTTlBPYmplY3Q6OnB1dChKU0Nl
bGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKQotewotICAg
IFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgSlNOUE9iamVjdCogdGhpc09iamVjdCA9IEpT
Qzo6anNDYXN0PEpTTlBPYmplY3QqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgaWYgKCF0aGlzT2JqZWN0LT5tX25wT2JqZWN0
KSB7Ci0gICAgICAgIHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIE5QSWRlbnRpZmll
ciBucElkZW50aWZpZXIgPSBucElkZW50aWZpZXJGcm9tSWRlbnRpZmllcihwcm9wZXJ0eU5hbWUp
OwotICAgIC8vIElmIHRoZSBwcm9wZXJ0eU5hbWUgaXMgc3ltYm9sLgotICAgIGlmICghbnBJZGVu
dGlmaWVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKCF0aGlzT2JqZWN0
LT5tX25wT2JqZWN0LT5fY2xhc3MtPmhhc1Byb3BlcnR5IHx8ICF0aGlzT2JqZWN0LT5tX25wT2Jq
ZWN0LT5fY2xhc3MtPmhhc1Byb3BlcnR5KHRoaXNPYmplY3QtPm1fbnBPYmplY3QsIG5wSWRlbnRp
ZmllcikpIHsKLSAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSB0aHJvdyBhbiBleGNlcHRpb24g
aGVyZT8KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghdGhpc09iamVj
dC0+bV9ucE9iamVjdC0+X2NsYXNzLT5zZXRQcm9wZXJ0eSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgTlBWYXJpYW50IHZhcmlhbnQ7Ci0gICAgdGhpc09iamVjdC0+bV9vYmplY3RNYXAt
PmNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIHZh
cmlhbnQpOwotCi0gICAgLy8gQ2FsbGluZyBOUENsYXNzOjpzZXRQcm9wZXJ0eSB3aWxsIGNhbGwg
aW50byBwbHVnLWluIGNvZGUsIGFuZCB0aGVyZSdzIG5vIHRlbGxpbmcgd2hhdCB0aGUgcGx1Zy1p
biBjYW4gZG8uCi0gICAgLy8gKGluY2x1ZGluZyBkZXN0cm95aW5nIHRoZSBwbHVnLWluKS4gQmVj
YXVzZSBvZiB0aGlzLCB3ZSBtYWtlIHN1cmUgdG8ga2VlcCB0aGUgcGx1Zy1pbiBhbGl2ZSB1bnRp
bCAKLSAgICAvLyB0aGUgY2FsbCBoYXMgZmluaXNoZWQuCi0gICAgTlBSdW50aW1lT2JqZWN0TWFw
OjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVjdG9yKHRoaXNPYmplY3QtPm1fb2JqZWN0TWFwKTsKLQot
ICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7Ci0gICAgICAgIHJlc3VsdCA9IHRoaXNPYmpl
Y3QtPm1fbnBPYmplY3QtPl9jbGFzcy0+c2V0UHJvcGVydHkodGhpc09iamVjdC0+bV9ucE9iamVj
dCwgbnBJZGVudGlmaWVyLCAmdmFyaWFudCk7Ci0KLSAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFw
Ojptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0K
LSAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSB0aHJvdyBhbiBleGNlcHRpb24gaWYgc2V0UHJv
cGVydHkgcmV0dXJucyBmYWxzZT8KLSAgICB9Ci0KLSAgICByZWxlYXNlTlBWYXJpYW50VmFsdWUo
JnZhcmlhbnQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgSlNOUE9iamVjdDo6ZGVs
ZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90
KQotewotICAgIHJldHVybiBqc0Nhc3Q8SlNOUE9iamVjdCo+KGNlbGwpLT5kZWxldGVQcm9wZXJ0
eShsZXhpY2FsR2xvYmFsT2JqZWN0LCBucElkZW50aWZpZXJGcm9tSWRlbnRpZmllcihwcm9wZXJ0
eU5hbWUpKTsKLX0KLQotYm9vbCBKU05QT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlND
ZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWQg
cHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBqc0Nhc3Q8SlNOUE9iamVjdCo+KGNlbGwpLT5k
ZWxldGVQcm9wZXJ0eShsZXhpY2FsR2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxOUElkZW50aWZp
ZXI+KElkZW50aWZpZXJSZXA6OmdldChwcm9wZXJ0eU5hbWUpKSk7Ci19Ci0KLWJvb2wgSlNOUE9i
amVjdDo6ZGVsZXRlUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2Jh
bE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0KLSAgICBBU1NFUlRfVEhJU19HQ19PQkpFQ1RfSU5IRVJJVFMoaW5mbygpKTsKLQotICAgIC8v
IElmIHRoZSBwcm9wZXJ0eU5hbWUgaXMgc3ltYm9sLgotICAgIGlmICghcHJvcGVydHlOYW1lKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1fbnBPYmplY3QpIHsKLSAgICAgICAg
dGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFtX25wT2JqZWN0LT5fY2xhc3Mt
PnJlbW92ZVByb3BlcnR5KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdGhyb3cgYW4g
ZXhjZXB0aW9uIGhlcmU/Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBD
YWxsaW5nIE5QQ2xhc3M6OnNldFByb3BlcnR5IHdpbGwgY2FsbCBpbnRvIHBsdWctaW4gY29kZSwg
YW5kIHRoZXJlJ3Mgbm8gdGVsbGluZyB3aGF0IHRoZSBwbHVnLWluIGNhbiBkby4KLSAgICAvLyAo
aW5jbHVkaW5nIGRlc3Ryb3lpbmcgdGhlIHBsdWctaW4pLiBCZWNhdXNlIG9mIHRoaXMsIHdlIG1h
a2Ugc3VyZSB0byBrZWVwIHRoZSBwbHVnLWluIGFsaXZlIHVudGlsIAotICAgIC8vIHRoZSBjYWxs
IGhhcyBmaW5pc2hlZC4KLSAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBw
cm90ZWN0b3IobV9vYmplY3RNYXApOwotCi0gICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7Ci0KLSAgICAgICAgLy8gRklYTUU6IFNob3Vs
ZCB3ZSB0aHJvdyBhbiBleGNlcHRpb24gaWYgcmVtb3ZlUHJvcGVydHkgcmV0dXJucyBmYWxzZT8K
LSAgICAgICAgaWYgKCFtX25wT2JqZWN0LT5fY2xhc3MtPnJlbW92ZVByb3BlcnR5KG1fbnBPYmpl
Y3QsIHByb3BlcnR5TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
TlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUobGV4aWNh
bEdsb2JhbE9iamVjdCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSlNO
UE9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZUFycmF5LCBEb250RW51bVByb3BlcnRpZXNNb2RlKQotewotICAgIFZNJiB2bSA9IGxleGljYWxH
bG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotCi0gICAgSlNOUE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU05QT2JqZWN0Kj4o
b2JqZWN0KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7Ci0gICAgaWYgKCF0aGlzT2JqZWN0LT5tX25wT2JqZWN0KSB7Ci0gICAgICAgIHRocm93SW52
YWxpZEFjY2Vzc0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmICghTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT05fSEFTX0VOVU0o
dGhpc09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzKSB8fCAhdGhpc09iamVjdC0+bV9ucE9iamVj
dC0+X2NsYXNzLT5lbnVtZXJhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5QSWRlbnRpZmll
ciogaWRlbnRpZmllcnMgPSAwOwotICAgIHVpbnQzMl90IGlkZW50aWZpZXJDb3VudCA9IDA7Ci0g
ICAgCi0gICAgLy8gQ2FsbGluZyBOUENsYXNzOjplbnVtZXJhdGUgd2lsbCBjYWxsIGludG8gcGx1
Zy1pbiBjb2RlLCBhbmQgdGhlcmUncyBubyB0ZWxsaW5nIHdoYXQgdGhlIHBsdWctaW4gY2FuIGRv
LgotICAgIC8vIChpbmNsdWRpbmcgZGVzdHJveWluZyB0aGUgcGx1Zy1pbikuIEJlY2F1c2Ugb2Yg
dGhpcywgd2UgbWFrZSBzdXJlIHRvIGtlZXAgdGhlIHBsdWctaW4gYWxpdmUgdW50aWwgCi0gICAg
Ly8gdGhlIGNhbGwgaGFzIGZpbmlzaGVkLgotICAgIE5QUnVudGltZU9iamVjdE1hcDo6UGx1Z2lu
UHJvdGVjdG9yIHByb3RlY3Rvcih0aGlzT2JqZWN0LT5tX29iamVjdE1hcCk7Ci0gICAgCi0gICAg
ewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7
Ci0KLSAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSB0aHJvdyBhbiBleGNlcHRpb24gaWYgZW51
bWVyYXRlIHJldHVybnMgZmFsc2U/Ci0gICAgICAgIGlmICghdGhpc09iamVjdC0+bV9ucE9iamVj
dC0+X2NsYXNzLT5lbnVtZXJhdGUodGhpc09iamVjdC0+bV9ucE9iamVjdCwgJmlkZW50aWZpZXJz
LCAmaWRlbnRpZmllckNvdW50KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBOUFJ1
bnRpbWVPYmplY3RNYXA6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKLSAgICB9Ci0KLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgaWRlbnRp
ZmllckNvdW50OyArK2kpIHsKLSAgICAgICAgSWRlbnRpZmllclJlcCogaWRlbnRpZmllclJlcCA9
IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihpZGVudGlmaWVyc1tpXSk7Ci0gICAgICAgIAot
ICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXI7Ci0gICAgICAgIGlmIChpZGVudGlmaWVyUmVw
LT5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBzdHJpbmcgPSBpZGVudGlm
aWVyUmVwLT5zdHJpbmcoKTsKLSAgICAgICAgICAgIGludCBsZW5ndGggPSBzdHJsZW4oc3RyaW5n
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soc3RyaW5nLCBs
ZW5ndGgpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpZGVudGlmaWVyID0gSWRlbnRp
Zmllcjo6ZnJvbSh2bSwgaWRlbnRpZmllclJlcC0+bnVtYmVyKCkpOwotCi0gICAgICAgIHByb3Bl
cnR5TmFtZUFycmF5LmFkZChpZGVudGlmaWVyKTsKLSAgICB9Ci0KLSAgICBucG5NZW1GcmVlKGlk
ZW50aWZpZXJzKTsKLX0KLQotSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKHByb3BlcnR5R2V0dGVy
LCAoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkpCi17Ci0gICAgVk0mIHZtID0gbGV4
aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0KLSAgICBKU05QT2JqZWN0KiB0aGlzT2JqID0ganNDYXN0PEpTTlBPYmplY3Qq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqLCBKU05QT2JqZWN0OjppbmZvKCkpOwotICAgIAotICAgIGlmICghdGhpc09i
ai0+bnBPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0ludmFs
aWRBY2Nlc3NFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSkpOwotCi0gICAgaWYgKCF0
aGlzT2JqLT5ucE9iamVjdCgpLT5fY2xhc3MtPmdldFByb3BlcnR5KQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCi0gICAgTlBWYXJpYW50IHJlc3VsdDsK
LSAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHQpOwotCi0gICAgLy8gQ2FsbGluZyBOUENsYXNz
OjpnZXRQcm9wZXJ0eSB3aWxsIGNhbGwgaW50byBwbHVnLWluIGNvZGUsIGFuZCB0aGVyZSdzIG5v
IHRlbGxpbmcgd2hhdCB0aGUgcGx1Zy1pbiBjYW4gZG8uCi0gICAgLy8gKGluY2x1ZGluZyBkZXN0
cm95aW5nIHRoZSBwbHVnLWluKS4gQmVjYXVzZSBvZiB0aGlzLCB3ZSBtYWtlIHN1cmUgdG8ga2Vl
cCB0aGUgcGx1Zy1pbiBhbGl2ZSB1bnRpbCAKLSAgICAvLyB0aGUgY2FsbCBoYXMgZmluaXNoZWQu
Ci0gICAgTlBSdW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVjdG9yKHRoaXNP
YmotPm9iamVjdE1hcCgpKTsKLSAgICAKLSAgICBib29sIHJldHVyblZhbHVlOwotICAgIHsKLSAg
ICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwotICAg
ICAgICBOUElkZW50aWZpZXIgbnBJZGVudGlmaWVyID0gbnBJZGVudGlmaWVyRnJvbUlkZW50aWZp
ZXIocHJvcGVydHlOYW1lKTsKLSAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5TmFtZSBpcyBzeW1i
b2wuCi0gICAgICAgIGlmICghbnBJZGVudGlmaWVyKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQotICAgICAgICByZXR1cm5WYWx1ZSA9IHRoaXNP
YmotPm5wT2JqZWN0KCktPl9jbGFzcy0+Z2V0UHJvcGVydHkodGhpc09iai0+bnBPYmplY3QoKSwg
bnBJZGVudGlmaWVyLCAmcmVzdWx0KTsKLSAgICAgICAgCi0gICAgICAgIE5QUnVudGltZU9iamVj
dE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGxleGljYWxHbG9iYWxPYmplY3Qp
OwotICAgIH0KLQotICAgIGlmICghcmV0dXJuVmFsdWUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAgICBKU1ZhbHVlIHByb3BlcnR5VmFsdWUgPSB0
aGlzT2JqLT5vYmplY3RNYXAoKS0+Y29udmVydE5QVmFyaWFudFRvSlNWYWx1ZSh0aGlzT2JqLT5n
bG9iYWxPYmplY3QoKSwgcmVzdWx0KTsKLSAgICByZWxlYXNlTlBWYXJpYW50VmFsdWUoJnJlc3Vs
dCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9wZXJ0eVZhbHVlKTsKLX0KLQotSlND
X0RFRklORV9DVVNUT01fR0VUVEVSKG1ldGhvZEdldHRlciwgKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpKQotewotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7
Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgSlNOUE9i
amVjdCogdGhpc09iaiA9IGpzQ2FzdDxKU05QT2JqZWN0Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iaiwgSlNOUE9iamVj
dDo6aW5mbygpKTsKLSAgICAKLSAgICBpZiAoIXRoaXNPYmotPm5wT2JqZWN0KCkpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgc2NvcGUpKTsKLQotICAgIE5QSWRlbnRpZmllciBucElkZW50aWZpZXIgPSBu
cElkZW50aWZpZXJGcm9tSWRlbnRpZmllcihwcm9wZXJ0eU5hbWUpOwotICAgIC8vIElmIHRoZSBw
cm9wZXJ0eU5hbWUgaXMgc3ltYm9sLgotICAgIGlmICghbnBJZGVudGlmaWVyKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTTlBNZXRo
b2Q6OmNyZWF0ZSh0aGlzT2JqLT5nbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLnB1YmxpY05h
bWUoKSwgbnBJZGVudGlmaWVyKSk7Ci19Ci0KLUlzb1N1YnNwYWNlKiBKU05QT2JqZWN0OjpzdWJz
cGFjZUZvckltcGwoVk0mIHZtKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJc29TdWJz
cGFjZVBlclZNPiBwZXJWTShbXSAoVk0mIHZtKSB7IHJldHVybiBJU09fU1VCU1BBQ0VfUEFSQU1F
VEVSUyh2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTTlBPYmplY3Qp
OyB9KTsKLSAgICByZXR1cm4gJnBlclZNLmdldCgpLmZvclZNKHZtKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBP
YmplY3QuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBP
YmplY3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdjNjhkODlkNjZjYzZjMDVl
MGY5ZjNlNTFkMzk0YjNhOWMxZjMxOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9K
U05QT2JqZWN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBKU05QT2JqZWN0X2gKLSNkZWZpbmUgSlNOUE9iamVjdF9oCi0KLSNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
R2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3QuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PYmplY3RQcm90b3R5cGUuaD4KLQotdHlwZWRlZiB2b2lk
KiBOUElkZW50aWZpZXI7Ci1zdHJ1Y3QgTlBPYmplY3Q7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci1jbGFzcyBOUFJ1bnRpbWVPYmplY3RNYXA7Ci0gICAgCi0vLyBKU05QT2JqZWN0IGlzIGEgSlNP
YmplY3QgdGhhdCB3cmFwcyBhbiBOUE9iamVjdC4KLQotY2xhc3MgSlNOUE9iamVjdCBmaW5hbCA6
IHB1YmxpYyBKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB1c2luZyBC
YXNlID0gSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1l
cyB8IEpTQzo6T3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBKU0M6Ok92ZXJyaWRlc1B1dCB8IEpTQzo6
R2V0T3duUHJvcGVydHlTbG90TWF5QmVXcm9uZ0Fib3V0RG9udEVudW07Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KLSAgICBzdGF0aWMgSlND
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCi0gICAgewotICAgICAgICBy
ZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlNOUE9iamVj
dCogY3JlYXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTlBSdW50aW1lT2Jq
ZWN0TWFwKiBvYmplY3RNYXAsIE5QT2JqZWN0KiBucE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT52
bSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpOwotICAg
ICAgICBKU05QT2JqZWN0KiBvYmplY3QgPSBuZXcgKEpTQzo6YWxsb2NhdGVDZWxsPEpTTlBPYmpl
Y3Q+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNOUE9iamVjdChnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSwgb2JqZWN0TWFwLCBucE9iamVjdCk7Ci0gICAgICAgIG9iamVjdC0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci0KLSAg
ICB+SlNOUE9iamVjdCgpOwotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0KLSAg
ICB2b2lkIGludmFsaWRhdGUoKTsKLQotICAgIC8vIFVzZWQgdG8gaW52YWxpZGF0ZSBhbiBOUE9i
amVjdCBhc3luY2hyb25vdXNseS4KLSAgICBOUE9iamVjdCogbGVha05QT2JqZWN0KCk7Ci0KLSAg
ICBKU0M6OkpTVmFsdWUgY2FsbE1ldGhvZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxs
RnJhbWUqLCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSk7Ci0gICAgSlNDOjpKU1ZhbHVlIGNhbGxP
YmplY3QoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7Ci0gICAgSlNDOjpK
U1ZhbHVlIGNhbGxDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJh
bWUqKTsKLQotICAgIERFQ0xBUkVfSU5GTzsKLQotICAgIE5QT2JqZWN0KiBucE9iamVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fbnBPYmplY3Q7IH0KLSAgICBOUFJ1bnRpbWVPYmplY3RNYXAqIG9iamVj
dE1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0TWFwOyB9Ci0KLXByaXZhdGU6Ci0gICAgc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJik7Ci0gICAgCi0g
ICAgSlNOUE9iamVjdChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqLCBOUFJ1
bnRpbWVPYmplY3RNYXAqLCBOUE9iamVjdCopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpKU0dsb2JhbE9iamVjdCopOwotICAgIAotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi0g
ICAgc3RhdGljIEpTQzo6Q2FsbERhdGEgZ2V0Q2FsbERhdGEoSlNDOjpKU0NlbGwqKTsKLSAgICBz
dGF0aWMgSlNDOjpDYWxsRGF0YSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKik7Ci0KLSAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAg
ICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKLQot
ICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkRlbGV0ZVByb3BlcnR5U2xvdCYpOwot
ICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwotCi0gICAgYm9vbCBkZWxl
dGVQcm9wZXJ0eShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFt
ZSk7Ci0KLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZSk7Ci0KLSAgICBOUFJ1bnRpbWVPYmplY3RNYXAqIG1fb2JqZWN0
TWFwOwotICAgIE5QT2JqZWN0KiBtX25wT2JqZWN0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2VuZGlmIC8v
IEpTTlBPYmplY3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMTI5Yjc1NTE4YmJkMWE0NzAwYzkzMjRiZmI0ZTIxYmZmMWE5ZTQ0Yy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQx
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiTlBKU09iamVjdC5oIgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNp
bmNsdWRlICJKU05QT2JqZWN0LmgiCi0jaW5jbHVkZSAiTlBSdW50aW1lT2JqZWN0TWFwLmgiCi0j
aW5jbHVkZSAiTlBSdW50aW1lVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
Q2F0Y2hTY29wZS5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NlbGxJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNMb2NrLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3QuaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdHJvbmdJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSWRlbnRpZmllclJlcC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5h
bWVzcGFjZSBKU0M7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotTlBKU09iamVjdCogTlBK
U09iamVjdDo6Y3JlYXRlKFZNJiB2bSwgTlBSdW50aW1lT2JqZWN0TWFwKiBvYmplY3RNYXAsIEpT
T2JqZWN0KiBqc09iamVjdCkKLXsKLSAgICAvLyBXZSBzaG91bGQgbmV2ZXIgaGF2ZSBhIEpTTlBP
YmplY3QgaW5zaWRlIGFuIE5QSlNPYmplY3QuCi0gICAgQVNTRVJUKCFqc09iamVjdC0+aW5oZXJp
dHM8SlNOUE9iamVjdD4odm0pKTsKLQotICAgIE5QSlNPYmplY3QqIG5wSlNPYmplY3QgPSB0b05Q
SlNPYmplY3QoY3JlYXRlTlBPYmplY3QoMCwgbnBDbGFzcygpKSk7Ci0gICAgbnBKU09iamVjdC0+
aW5pdGlhbGl6ZSh2bSwgb2JqZWN0TWFwLCBqc09iamVjdCk7Ci0KLSAgICByZXR1cm4gbnBKU09i
amVjdDsKLX0KLQotTlBKU09iamVjdDo6TlBKU09iamVjdCgpCi0gICAgOiBtX29iamVjdE1hcCgw
KQotewotfQotCi1OUEpTT2JqZWN0Ojp+TlBKU09iamVjdCgpCi17Ci0gICAgbV9vYmplY3RNYXAt
Pm5wSlNPYmplY3REZXN0cm95ZWQodGhpcyk7Ci19Ci0KLWJvb2wgTlBKU09iamVjdDo6aXNOUEpT
T2JqZWN0KE5QT2JqZWN0KiBucE9iamVjdCkKLXsKLSAgICByZXR1cm4gbnBPYmplY3QtPl9jbGFz
cyA9PSBucENsYXNzKCk7Ci19Ci0KLXZvaWQgTlBKU09iamVjdDo6aW5pdGlhbGl6ZShWTSYgdm0s
IE5QUnVudGltZU9iamVjdE1hcCogb2JqZWN0TWFwLCBKU09iamVjdCoganNPYmplY3QpCi17Ci0g
ICAgQVNTRVJUKCFtX29iamVjdE1hcCk7Ci0gICAgQVNTRVJUKCFtX2pzT2JqZWN0KTsKLQotICAg
IG1fb2JqZWN0TWFwID0gb2JqZWN0TWFwOwotICAgIG1fanNPYmplY3Quc2V0KHZtLCBqc09iamVj
dCk7Ci19Ci0KLXN0YXRpYyBJZGVudGlmaWVyIGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllclJlcCogaWRlbnRp
ZmllclJlcCkKLXsKLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAg
IEFTU0VSVChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKTsKLQotICAgIGNvbnN0IGNoYXIqIHN0
cmluZyA9IGlkZW50aWZpZXJSZXAtPnN0cmluZygpOwotICAgIGludCBsZW5ndGggPSBzdHJsZW4o
c3RyaW5nKTsKLQotICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJpbmc6
OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHN0cmluZywgbGVuZ3RoKSk7Ci19Ci0KLWJvb2wg
TlBKU09iamVjdDo6aGFzTWV0aG9kKE5QSWRlbnRpZmllciBtZXRob2ROYW1lKQotewotICAgIElk
ZW50aWZpZXJSZXAqIGlkZW50aWZpZXJSZXAgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4o
bWV0aG9kTmFtZSk7Ci0KLSAgICBpZiAoIWlkZW50aWZpZXJSZXAtPmlzU3RyaW5nKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0ID0gbV9vYmplY3RNYXAtPmdsb2JhbE9iamVjdCgpOwotICAgIGlmICghbGV4aWNhbEdsb2Jh
bE9iamVjdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVk0mIHZtID0gbGV4aWNhbEds
b2JhbE9iamVjdC0+dm0oKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IG1f
anNPYmplY3QtPmdldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyRnJvbUlkZW50aWZp
ZXJSZXAobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllclJlcCkpOyAgICAKLSAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwotCi0gICAgcmV0dXJuIHZhbHVlLmlzQ2FsbGFibGUodm0pOwot
fQotCi1ib29sIE5QSlNPYmplY3Q6Omludm9rZShOUElkZW50aWZpZXIgbWV0aG9kTmFtZSwgY29u
c3QgTlBWYXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFu
dCogcmVzdWx0KQotewotICAgIElkZW50aWZpZXJSZXAqIGlkZW50aWZpZXJSZXAgPSBzdGF0aWNf
Y2FzdDxJZGVudGlmaWVyUmVwKj4obWV0aG9kTmFtZSk7Ci0gICAgCi0gICAgaWYgKCFpZGVudGlm
aWVyUmVwLT5pc1N0cmluZygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBtX29iamVjdE1hcC0+Z2xvYmFsT2Jq
ZWN0KCk7Ci0gICAgaWYgKCFsZXhpY2FsR2xvYmFsT2JqZWN0KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCi0gICAgSlNMb2NrSG9sZGVyIGxvY2sobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0K
LSAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gbV9qc09iamVjdC0+Z2V0KGxleGljYWxHbG9iYWxPYmpl
Y3QsIGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVu
dGlmaWVyUmVwKSk7Ci0gICAgcmV0dXJuIGludm9rZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBmdW5j
dGlvbiwgYXJndW1lbnRzLCBhcmd1bWVudENvdW50LCByZXN1bHQpOwotfQotCi1ib29sIE5QSlNP
YmplY3Q6Omludm9rZURlZmF1bHQoY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90
IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KQotewotICAgIEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gbV9vYmplY3RNYXAtPmdsb2JhbE9iamVjdCgpOwotICAg
IGlmICghbGV4aWNhbEdsb2JhbE9iamVjdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
SlNMb2NrSG9sZGVyIGxvY2sobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0KLSAgICBKU1ZhbHVlIGZ1
bmN0aW9uID0gbV9qc09iamVjdC5nZXQoKTsKLSAgICByZXR1cm4gaW52b2tlKGxleGljYWxHbG9i
YWxPYmplY3QsIGZ1bmN0aW9uLCBhcmd1bWVudHMsIGFyZ3VtZW50Q291bnQsIHJlc3VsdCk7Ci19
Ci0KLWJvb2wgTlBKU09iamVjdDo6aGFzUHJvcGVydHkoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIp
Ci17Ci0gICAgSWRlbnRpZmllclJlcCogaWRlbnRpZmllclJlcCA9IHN0YXRpY19jYXN0PElkZW50
aWZpZXJSZXAqPihpZGVudGlmaWVyKTsKLSAgICAKLSAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCA9IG1fb2JqZWN0TWFwLT5nbG9iYWxPYmplY3QoKTsKLSAgICBpZiAoIWxl
eGljYWxHbG9iYWxPYmplY3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBWTSYg
dm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKHZt
KTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0KLSAgICBib29s
IHJlc3VsdDsKLSAgICBpZiAoaWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSkKLSAgICAgICAgcmVz
dWx0ID0gbV9qc09iamVjdC0+aGFzUHJvcGVydHkobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRp
ZmllckZyb21JZGVudGlmaWVyUmVwKGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXJSZXAp
KTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IG1fanNPYmplY3QtPmhhc1Byb3BlcnR5KGxl
eGljYWxHbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90PihpZGVudGlmaWVyUmVwLT5u
dW1iZXIoKSkpOwotCi0gICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1ib29sIE5QSlNPYmplY3Q6OmdldFByb3BlcnR5KE5QSWRlbnRpZmllciBwcm9w
ZXJ0eU5hbWUsIE5QVmFyaWFudCogcmVzdWx0KQotewotICAgIElkZW50aWZpZXJSZXAqIGlkZW50
aWZpZXJSZXAgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4ocHJvcGVydHlOYW1lKTsKLSAg
ICAKLSAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IG1fb2JqZWN0TWFw
LT5nbG9iYWxPYmplY3QoKTsKLSAgICBpZiAoIWxleGljYWxHbG9iYWxPYmplY3QpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7
Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKLQotICAgIEpTVmFsdWUganNSZXN1bHQ7Ci0gICAgaWYgKGlkZW50aWZp
ZXJSZXAtPmlzU3RyaW5nKCkpCi0gICAgICAgIGpzUmVzdWx0ID0gbV9qc09iamVjdC0+Z2V0KGxl
eGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChsZXhpY2FsR2xv
YmFsT2JqZWN0LCBpZGVudGlmaWVyUmVwKSk7Ci0gICAgZWxzZQotICAgICAgICBqc1Jlc3VsdCA9
IG1fanNPYmplY3QtPmdldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oaWRlbnRpZmllclJlcC0+bnVtYmVyKCkpKTsKLSAgICAKLSAgICBtX29iamVjdE1hcC0+Y29u
dmVydEpTVmFsdWVUb05QVmFyaWFudChsZXhpY2FsR2xvYmFsT2JqZWN0LCBqc1Jlc3VsdCwgKnJl
c3VsdCk7Ci0gICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBOUEpTT2JqZWN0OjpzZXRQcm9wZXJ0eShOUElkZW50aWZpZXIgcHJvcGVydHlOYW1l
LCBjb25zdCBOUFZhcmlhbnQqIHZhbHVlKQotewotICAgIElkZW50aWZpZXJSZXAqIGlkZW50aWZp
ZXJSZXAgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4ocHJvcGVydHlOYW1lKTsKLSAgICAK
LSAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IG1fb2JqZWN0TWFwLT5n
bG9iYWxPYmplY3QoKTsKLSAgICBpZiAoIWxleGljYWxHbG9iYWxPYmplY3QpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgp
OwotICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7Ci0KLSAgICBKU1ZhbHVlIGpzVmFsdWUgPSBtX29iamVjdE1hcC0+Y29u
dmVydE5QVmFyaWFudFRvSlNWYWx1ZShtX29iamVjdE1hcC0+Z2xvYmFsT2JqZWN0KCksICp2YWx1
ZSk7Ci0gICAgaWYgKGlkZW50aWZpZXJSZXAtPmlzU3RyaW5nKCkpIHsKLSAgICAgICAgUHV0UHJv
cGVydHlTbG90IHNsb3QobV9qc09iamVjdC5nZXQoKSk7Ci0gICAgICAgIG1fanNPYmplY3QtPm1l
dGhvZFRhYmxlKHZtKS0+cHV0KG1fanNPYmplY3QuZ2V0KCksIGxleGljYWxHbG9iYWxPYmplY3Qs
IGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVudGlm
aWVyUmVwKSwganNWYWx1ZSwgc2xvdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fanNPYmplY3Qt
Pm1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleChtX2pzT2JqZWN0LmdldCgpLCBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBpZGVudGlmaWVyUmVwLT5udW1iZXIoKSwganNWYWx1ZSwgZmFsc2UpOwotICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgTlBKU09iamVjdDo6cmVtb3ZlUHJvcGVydHkoTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkK
LXsKLSAgICBJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyUmVwID0gc3RhdGljX2Nhc3Q8SWRlbnRp
ZmllclJlcCo+KHByb3BlcnR5TmFtZSk7Ci0gICAgCi0gICAgSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QgPSBtX29iamVjdE1hcC0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgaWYgKCFs
ZXhpY2FsR2xvYmFsT2JqZWN0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWTSYgdm0g
PSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
LSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0KLSAgICBpZiAoaWRl
bnRpZmllclJlcC0+aXNTdHJpbmcoKSkgewotICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIg
PSBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRp
ZmllclJlcCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIW1fanNPYmplY3QtPmhhc1Byb3BlcnR5
KGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXIpKSB7Ci0gICAgICAgICAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0K
LSAgICAgICAgSlNDZWxsOjpkZWxldGVQcm9wZXJ0eShtX2pzT2JqZWN0LmdldCgpLCBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIW1f
anNPYmplY3QtPmhhc1Byb3BlcnR5KGxleGljYWxHbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVp
bnQzMl90PihpZGVudGlmaWVyUmVwLT5udW1iZXIoKSkpKSB7Ci0gICAgICAgICAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0K
LSAgICAgICAgbV9qc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgobV9qc09iamVjdC5nZXQoKSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllclJlcC0+
bnVtYmVyKCkpOwotICAgIH0KLQotICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgTlBKU09iamVjdDo6ZW51bWVyYXRlKE5QSWRlbnRpZmllcioq
IGlkZW50aWZpZXJzLCB1aW50MzJfdCogaWRlbnRpZmllckNvdW50KQotewotICAgIEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gbV9vYmplY3RNYXAtPmdsb2JhbE9iamVjdCgp
OwotICAgIGlmICghbGV4aWNhbEdsb2JhbE9iamVjdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7Ci0KLSAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKHZtLCBQ
cm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7Ci0g
ICAgbV9qc09iamVjdC0+Z2V0UHJvcGVydHlOYW1lcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKTsKLQotICAgIE5QSWRl
bnRpZmllciogbmFtZUlkZW50aWZpZXJzID0gbnBuTWVtTmV3QXJyYXk8TlBJZGVudGlmaWVyPihw
cm9wZXJ0eU5hbWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3Bl
cnR5TmFtZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG5hbWVJZGVudGlmaWVyc1tpXSA9IHN0YXRp
Y19jYXN0PE5QSWRlbnRpZmllcj4oSWRlbnRpZmllclJlcDo6Z2V0KHByb3BlcnR5TmFtZXNbaV0u
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSkpOwotCi0gICAgKmlkZW50aWZpZXJzID0gbmFtZUlkZW50
aWZpZXJzOwotICAgICppZGVudGlmaWVyQ291bnQgPSBwcm9wZXJ0eU5hbWVzLnNpemUoKTsKLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE5QSlNPYmplY3Q6OmNvbnN0cnVjdChjb25zdCBO
UFZhcmlhbnQqIGFyZ3VtZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBtX29i
amVjdE1hcC0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgaWYgKCFsZXhpY2FsR2xvYmFsT2JqZWN0KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0
LT52bSgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0KLSAgICBhdXRvIGNvbnN0cnVjdERhdGEgPSBnZXRDb25z
dHJ1Y3REYXRhKHZtLCBtX2pzT2JqZWN0LmdldCgpKTsKLSAgICBpZiAoY29uc3RydWN0RGF0YS50
eXBlID09IENhbGxEYXRhOjpUeXBlOjpOb25lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAvLyBDb252ZXJ0IHRoZSBwYXNzZWQgaW4gYXJndW1lbnRzLgotICAgIE1hcmtlZEFyZ3VtZW50
QnVmZmVyIGFyZ3VtZW50TGlzdDsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYXJndW1l
bnRDb3VudDsgKytpKQotICAgICAgICBhcmd1bWVudExpc3QuYXBwZW5kKG1fb2JqZWN0TWFwLT5j
b252ZXJ0TlBWYXJpYW50VG9KU1ZhbHVlKG1fb2JqZWN0TWFwLT5nbG9iYWxPYmplY3QoKSwgYXJn
dW1lbnRzW2ldKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWFyZ3VtZW50TGlzdC5oYXNPdmVyZmxv
d2VkKCkpOwotCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTQzo6Y29uc3RydWN0KGxleGljYWxHbG9i
YWxPYmplY3QsIG1fanNPYmplY3QuZ2V0KCksIGNvbnN0cnVjdERhdGEsIGFyZ3VtZW50TGlzdCk7
Ci0gICAgCi0gICAgLy8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSBuZXcgb2JqZWN0LgotICAgIG1f
b2JqZWN0TWFwLT5jb252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlLCAqcmVzdWx0KTsKLSAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgTlBKU09iamVjdDo6aW52b2tlKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGZ1bmN0aW9uLCBjb25zdCBOUFZhcmlhbnQqIGFy
Z3VtZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpCi17Ci0g
ICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0KLSAgICBhdXRvIGNhbGxEYXRhID0gZ2V0Q2FsbERh
dGEodm0sIGZ1bmN0aW9uKTsKLSAgICBpZiAoY2FsbERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlw
ZTo6Tm9uZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQ29udmVydCB0aGUgcGFz
c2VkIGluIGFyZ3VtZW50cy4KLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudExpc3Q7
Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkKLSAgICAg
ICAgYXJndW1lbnRMaXN0LmFwcGVuZChtX29iamVjdE1hcC0+Y29udmVydE5QVmFyaWFudFRvSlNW
YWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbaV0pKTsKLSAgICBSRUxFQVNFX0FT
U0VSVCghYXJndW1lbnRMaXN0Lmhhc092ZXJmbG93ZWQoKSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNDOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIGZ1bmN0aW9uLCBjYWxsRGF0YSwgbV9q
c09iamVjdC5nZXQoKSwgYXJndW1lbnRMaXN0KTsKLQotICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpIHsKLSAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIENvbnZlcnQgYW5kIHJldHVybiB0aGUgcmVz
dWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsLgotICAgIG1fb2JqZWN0TWFwLT5jb252ZXJ0SlNWYWx1
ZVRvTlBWYXJpYW50KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCAqcmVzdWx0KTsKLQotICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKLSAgICAgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotTlBDbGFzcyogTlBKU09iamVjdDo6bnBDbGFzcygpCi17Ci0gICAgc3Rh
dGljIE5QQ2xhc3MgbnBDbGFzcyA9IHsKLSAgICAgICAgTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT04s
Ci0gICAgICAgIE5QX0FsbG9jYXRlLAotICAgICAgICBOUF9EZWFsbG9jYXRlLAotICAgICAgICAw
LAotICAgICAgICBOUF9IYXNNZXRob2QsCi0gICAgICAgIE5QX0ludm9rZSwKLSAgICAgICAgTlBf
SW52b2tlRGVmYXVsdCwKLSAgICAgICAgTlBfSGFzUHJvcGVydHksCi0gICAgICAgIE5QX0dldFBy
b3BlcnR5LAotICAgICAgICBOUF9TZXRQcm9wZXJ0eSwKLSAgICAgICAgTlBfUmVtb3ZlUHJvcGVy
dHksCi0gICAgICAgIE5QX0VudW1lcmF0ZSwKLSAgICAgICAgTlBfQ29uc3RydWN0Ci0gICAgfTsK
LQotICAgIHJldHVybiAmbnBDbGFzczsKLX0KLSAgICAKLU5QT2JqZWN0KiBOUEpTT2JqZWN0OjpO
UF9BbGxvY2F0ZShOUFAgbnBwLCBOUENsYXNzKikKLXsKLSAgICBBU1NFUlRfVU5VU0VEKG5wcCwg
IW5wcCk7Ci0KLSAgICByZXR1cm4gbmV3IE5QSlNPYmplY3Q7Ci19Ci0KLXZvaWQgTlBKU09iamVj
dDo6TlBfRGVhbGxvY2F0ZShOUE9iamVjdCogbnBPYmplY3QpCi17Ci0gICAgTlBKU09iamVjdCog
bnBKU09iamVjdCA9IHRvTlBKU09iamVjdChucE9iamVjdCk7Ci0gICAgZGVsZXRlIG5wSlNPYmpl
Y3Q7Ci19Ci0KLWJvb2wgTlBKU09iamVjdDo6TlBfSGFzTWV0aG9kKE5QT2JqZWN0KiBucE9iamVj
dCwgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUpCi17Ci0gICAgcmV0dXJuIHRvTlBKU09iamVjdChu
cE9iamVjdCktPmhhc01ldGhvZChtZXRob2ROYW1lKTsKLX0KLSAgICAKLWJvb2wgTlBKU09iamVj
dDo6TlBfSW52b2tlKE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUs
IGNvbnN0IE5QVmFyaWFudCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gdG9OUEpTT2JqZWN0KG5wT2JqZWN0KS0+aW52
b2tlKG1ldGhvZE5hbWUsIGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwgcmVzdWx0KTsKLX0KLSAg
ICAKLWJvb2wgTlBKU09iamVjdDo6TlBfSW52b2tlRGVmYXVsdChOUE9iamVjdCogbnBPYmplY3Qs
IGNvbnN0IE5QVmFyaWFudCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gdG9OUEpTT2JqZWN0KG5wT2JqZWN0KS0+aW52
b2tlRGVmYXVsdChhcmd1bWVudHMsIGFyZ3VtZW50Q291bnQsIHJlc3VsdCk7Ci19Ci0gICAgCi1i
b29sIE5QSlNPYmplY3Q6Ok5QX0hhc1Byb3BlcnR5KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gdG9OUEpTT2JqZWN0KG5wT2JqZWN0
KS0+aGFzUHJvcGVydHkocHJvcGVydHlOYW1lKTsKLX0KLQotYm9vbCBOUEpTT2JqZWN0OjpOUF9H
ZXRQcm9wZXJ0eShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUs
IE5QVmFyaWFudCogcmVzdWx0KQotewotICAgIHJldHVybiB0b05QSlNPYmplY3QobnBPYmplY3Qp
LT5nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHJlc3VsdCk7Ci19Ci0KLWJvb2wgTlBKU09iamVj
dDo6TlBfU2V0UHJvcGVydHkoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgcHJvcGVy
dHlOYW1lLCBjb25zdCBOUFZhcmlhbnQqIHZhbHVlKQotewotICAgIHJldHVybiB0b05QSlNPYmpl
Y3QobnBPYmplY3QpLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKLX0KLQotYm9v
bCBOUEpTT2JqZWN0OjpOUF9SZW1vdmVQcm9wZXJ0eShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRl
bnRpZmllciBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIHRvTlBKU09iamVjdChucE9iamVj
dCktPnJlbW92ZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7Ci19Ci0KLWJvb2wgTlBKU09iamVjdDo6
TlBfRW51bWVyYXRlKE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyKiogaWRlbnRpZmll
cnMsIHVpbnQzMl90KiBpZGVudGlmaWVyQ291bnQpCi17Ci0gICAgcmV0dXJuIHRvTlBKU09iamVj
dChucE9iamVjdCktPmVudW1lcmF0ZShpZGVudGlmaWVycywgaWRlbnRpZmllckNvdW50KTsKLX0K
LQotYm9vbCBOUEpTT2JqZWN0OjpOUF9Db25zdHJ1Y3QoTlBPYmplY3QqIG5wT2JqZWN0LCBjb25z
dCBOUFZhcmlhbnQqIGFyZ3VtZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIHRvTlBKU09iamVjdChucE9iamVjdCktPmNvbnN0cnVj
dChhcmd1bWVudHMsIGFyZ3VtZW50Q291bnQsIHJlc3VsdCk7Ci19Ci0gICAgCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09i
amVjdC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09i
amVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODUzNWQ1ZDU1NDAyNWU4YjYy
N2ZjNzU5Y2MwMTc3ZTBlYWJiM2RhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05Q
SlNPYmplY3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBOUEpTT2JqZWN0X2gKLSNkZWZpbmUgTlBKU09iamVjdF9oCi0KLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N0cm9uZy5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvbnBydW50aW1lX2ludGVybmFsLmg+Ci0jaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBWTTsKLWNsYXNzIEpT
R2xvYmFsT2JqZWN0OwotY2xhc3MgSlNPYmplY3Q7Ci0KLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIE5QUnVudGltZU9iamVjdE1hcDsKLSAgICAKLS8vIE5QSlNPYmplY3QgaXMgYW4g
TlBPYmplY3QgdGhhdCB3cmFwcyBhIEpTT2JqZWN0LgotY2xhc3MgTlBKU09iamVjdCA6IHB1Ymxp
YyBOUE9iamVjdCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTlBKU09iamVjdCk7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIE5QSlNPYmplY3QqIGNyZWF0ZShKU0M6OlZNJiwgTlBSdW50aW1lT2Jq
ZWN0TWFwKiwgSlNDOjpKU09iamVjdCopOwotCi0gICAgSlNDOjpKU09iamVjdCoganNPYmplY3Qo
KSBjb25zdCB7IHJldHVybiBtX2pzT2JqZWN0LmdldCgpOyB9Ci0KLSAgICBzdGF0aWMgYm9vbCBp
c05QSlNPYmplY3QoTlBPYmplY3QqKTsKLQotICAgIHN0YXRpYyBOUEpTT2JqZWN0KiB0b05QSlNP
YmplY3QoTlBPYmplY3QqIG5wT2JqZWN0KQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpc05QSlNPYmplY3QobnBPYmplY3QpKTsKLSAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PE5QSlNPYmplY3QqPihucE9iamVjdCk7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIE5QSlNPYmplY3QoKTsKLSAgICB+TlBKU09iamVjdCgpOwotCi0gICAgdm9p
ZCBpbml0aWFsaXplKEpTQzo6Vk0mLCBOUFJ1bnRpbWVPYmplY3RNYXAqLCBKU0M6OkpTT2JqZWN0
Kik7Ci0KLSAgICBib29sIGhhc01ldGhvZChOUElkZW50aWZpZXIgbWV0aG9kTmFtZSk7Ci0gICAg
Ym9vbCBpbnZva2UoTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUsIGNvbnN0IE5QVmFyaWFudCogYXJn
dW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCk7Ci0gICAg
Ym9vbCBpbnZva2VEZWZhdWx0KGNvbnN0IE5QVmFyaWFudCogYXJndW1lbnRzLCB1aW50MzJfdCBh
cmd1bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCk7Ci0gICAgYm9vbCBoYXNQcm9wZXJ0eShO
UElkZW50aWZpZXIgcHJvcGVydHlOYW1lKTsKLSAgICBib29sIGdldFByb3BlcnR5KE5QSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUsIE5QVmFyaWFudCogcmVzdWx0KTsKLSAgICBib29sIHNldFByb3Bl
cnR5KE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IE5QVmFyaWFudCogdmFsdWUpOwot
ICAgIGJvb2wgcmVtb3ZlUHJvcGVydHkoTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSk7Ci0gICAg
Ym9vbCBlbnVtZXJhdGUoTlBJZGVudGlmaWVyKiogaWRlbnRpZmllcnMsIHVpbnQzMl90KiBpZGVu
dGlmaWVyQ291bnQpOwotICAgIGJvb2wgY29uc3RydWN0KGNvbnN0IE5QVmFyaWFudCogYXJndW1l
bnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCk7Ci0KLSAgICBi
b29sIGludm9rZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uLCBj
b25zdCBOUFZhcmlhbnQqIGFyZ3VtZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJp
YW50KiByZXN1bHQpOwotCi0gICAgc3RhdGljIE5QQ2xhc3MqIG5wQ2xhc3MoKTsKLSAgICBzdGF0
aWMgTlBPYmplY3QqIE5QX0FsbG9jYXRlKE5QUCwgTlBDbGFzcyopOwotICAgIHN0YXRpYyB2b2lk
IE5QX0RlYWxsb2NhdGUoTlBPYmplY3QqKTsKLSAgICBzdGF0aWMgYm9vbCBOUF9IYXNNZXRob2Qo
TlBPYmplY3QqLCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSk7Ci0gICAgc3RhdGljIGJvb2wgTlBf
SW52b2tlKE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUsIGNvbnN0IE5QVmFyaWFu
dCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCk7
Ci0gICAgc3RhdGljIGJvb2wgTlBfSW52b2tlRGVmYXVsdChOUE9iamVjdCosIGNvbnN0IE5QVmFy
aWFudCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3Vs
dCk7Ci0gICAgc3RhdGljIGJvb2wgTlBfSGFzUHJvcGVydHkoTlBPYmplY3QqLCBOUElkZW50aWZp
ZXIgcHJvcGVydHlOYW1lKTsKLSAgICBzdGF0aWMgYm9vbCBOUF9HZXRQcm9wZXJ0eShOUE9iamVj
dCosIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIE5QVmFyaWFudCogcmVzdWx0KTsKLSAgICBz
dGF0aWMgYm9vbCBOUF9TZXRQcm9wZXJ0eShOUE9iamVjdCosIE5QSWRlbnRpZmllciBwcm9wZXJ0
eU5hbWUsIGNvbnN0IE5QVmFyaWFudCogdmFsdWUpOwotICAgIHN0YXRpYyBib29sIE5QX1JlbW92
ZVByb3BlcnR5KE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSk7Ci0gICAgc3Rh
dGljIGJvb2wgTlBfRW51bWVyYXRlKE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyKiogaWRlbnRpZmll
cnMsIHVpbnQzMl90KiBpZGVudGlmaWVyQ291bnQpOwotICAgIHN0YXRpYyBib29sIE5QX0NvbnN0
cnVjdChOUE9iamVjdCosIGNvbnN0IE5QVmFyaWFudCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1
bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCk7Ci0gICAgCi0gICAgTlBSdW50aW1lT2JqZWN0
TWFwKiBtX29iamVjdE1hcDsKLSAgICBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBtX2pzT2Jq
ZWN0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLQotI2VuZGlmIC8vIE5QSlNPYmplY3RfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0
TWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVu
dGltZU9iamVjdE1hcC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3YzczMTMz
MTM4MDdkZGY2ZTk0MzYyNjkwNjJkMGEzMTVkYzIyMTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI5NiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
TlBSdW50aW1lT2JqZWN0TWFwLmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
LQotI2luY2x1ZGUgIkpTTlBPYmplY3QuaCIKLSNpbmNsdWRlICJOUEpTT2JqZWN0LmgiCi0jaW5j
bHVkZSAiTlBSdW50aW1lVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgotI2lu
Y2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Db21wbGV0aW9u
Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRXJyb3IuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0xvY2suaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Tb3VyY2VDb2RlLmg+Ci0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvU3Ryb25nLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
U3Ryb25nSW5saW5lcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRE9NV3JhcHBlcldvcmxkLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2NyaXB0Q29udHJv
bGxlci5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQot
Ci1OUFJ1bnRpbWVPYmplY3RNYXA6Ok5QUnVudGltZU9iamVjdE1hcChQbHVnaW5WaWV3KiBwbHVn
aW5WaWV3KQotICAgIDogbV9wbHVnaW5WaWV3KHBsdWdpblZpZXcpCi0gICAgLCBtX2ZpbmFsaXph
dGlvblRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJk5QUnVudGltZU9iamVjdE1hcDo6aW52
YWxpZGF0ZVF1ZXVlZE9iamVjdHMpCi17Ci19Ci0KLU5QUnVudGltZU9iamVjdE1hcDo6UGx1Z2lu
UHJvdGVjdG9yOjpQbHVnaW5Qcm90ZWN0b3IoTlBSdW50aW1lT2JqZWN0TWFwKiBucFJ1bnRpbWVP
YmplY3RNYXApCi17Ci0gICAgLy8gSWYgd2UncmUgYWxyZWFkeSBpbiB0aGUgcGx1Zy1pbiB2aWV3
IGRlc3RydWN0b3IsIHdlIHNob3VsZG4ndCB0cnkgdG8ga2VlcCBpdCBhbGl2ZS4KLSAgICBpZiAo
IW5wUnVudGltZU9iamVjdE1hcC0+bV9wbHVnaW5WaWV3LT5pc0JlaW5nRGVzdHJveWVkKCkpCi0g
ICAgICAgIG1fcGx1Z2luVmlldyA9IG5wUnVudGltZU9iamVjdE1hcC0+bV9wbHVnaW5WaWV3Owot
fQotCi1OUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3Rvcjo6flBsdWdpblByb3RlY3Rv
cigpCi17Ci19Ci0KLU5QT2JqZWN0KiBOUFJ1bnRpbWVPYmplY3RNYXA6OmdldE9yQ3JlYXRlTlBP
YmplY3QoVk0mIHZtLCBKU09iamVjdCoganNPYmplY3QpCi17Ci0gICAgLy8gSWYgdGhpcyBpcyBh
IEpTTlBPYmplY3QsIHdlIGNhbiBqdXN0IGdldCBpdHMgdW5kZXJseWluZyBOUE9iamVjdC4KLSAg
ICBpZiAoanNPYmplY3QtPmNsYXNzSW5mbyh2bSkgPT0gSlNOUE9iamVjdDo6aW5mbygpKSB7Ci0g
ICAgICAgIEpTTlBPYmplY3QqIGpzTlBPYmplY3QgPSBqc0Nhc3Q8SlNOUE9iamVjdCo+KGpzT2Jq
ZWN0KTsKLSAgICAgICAgTlBPYmplY3QqIG5wT2JqZWN0ID0ganNOUE9iamVjdC0+bnBPYmplY3Qo
KTsKLSAgICAgICAgCi0gICAgICAgIHJldGFpbk5QT2JqZWN0KG5wT2JqZWN0KTsKLSAgICAgICAg
cmV0dXJuIG5wT2JqZWN0OwotICAgIH0KLSAgICAKLSAgICAvLyBGaXJzdCwgY2hlY2sgaWYgd2Ug
YWxyZWFkeSBrbm93IGFib3V0IHRoaXMgb2JqZWN0LgotICAgIGlmIChOUEpTT2JqZWN0KiBucEpT
T2JqZWN0ID0gbV9ucEpTT2JqZWN0cy5nZXQoanNPYmplY3QpKSB7Ci0gICAgICAgIHJldGFpbk5Q
T2JqZWN0KG5wSlNPYmplY3QpOwotICAgICAgICByZXR1cm4gbnBKU09iamVjdDsKLSAgICB9Ci0K
LSAgICBOUEpTT2JqZWN0KiBucEpTT2JqZWN0ID0gTlBKU09iamVjdDo6Y3JlYXRlKHZtLCB0aGlz
LCBqc09iamVjdCk7Ci0gICAgbV9ucEpTT2JqZWN0cy5zZXQoanNPYmplY3QsIG5wSlNPYmplY3Qp
OwotCi0gICAgcmV0dXJuIG5wSlNPYmplY3Q7Ci19Ci0KLXZvaWQgTlBSdW50aW1lT2JqZWN0TWFw
OjpucEpTT2JqZWN0RGVzdHJveWVkKE5QSlNPYmplY3QqIG5wSlNPYmplY3QpCi17Ci0gICAgLy8g
UmVtb3ZlIHRoZSBvYmplY3QgZnJvbSB0aGUgbWFwLgotICAgIEFTU0VSVChtX25wSlNPYmplY3Rz
LmNvbnRhaW5zKG5wSlNPYmplY3QtPmpzT2JqZWN0KCkpKTsKLSAgICBtX25wSlNPYmplY3RzLnJl
bW92ZShucEpTT2JqZWN0LT5qc09iamVjdCgpKTsKLX0KLQotSlNPYmplY3QqIE5QUnVudGltZU9i
amVjdE1hcDo6Z2V0T3JDcmVhdGVKU09iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBOUE9iamVjdCogbnBPYmplY3QpCi17Ci0gICAgLy8gSWYgdGhpcyBpcyBhbiBOUEpTT2JqZWN0
LCB3ZSBjYW4ganVzdCBnZXQgdGhlIEpTT2JqZWN0IHRoYXQgaXQncyB3cmFwcGluZy4KLSAgICBp
ZiAoTlBKU09iamVjdDo6aXNOUEpTT2JqZWN0KG5wT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIE5Q
SlNPYmplY3Q6OnRvTlBKU09iamVjdChucE9iamVjdCktPmpzT2JqZWN0KCk7Ci0gICAgCi0gICAg
aWYgKEpTTlBPYmplY3QqIGpzTlBPYmplY3QgPSBtX2pzTlBPYmplY3RzLmdldChucE9iamVjdCkp
Ci0gICAgICAgIHJldHVybiBqc05QT2JqZWN0OwotCi0gICAgSlNOUE9iamVjdCoganNOUE9iamVj
dCA9IEpTTlBPYmplY3Q6OmNyZWF0ZShnbG9iYWxPYmplY3QsIHRoaXMsIG5wT2JqZWN0KTsKLSAg
ICB3ZWFrQWRkKG1fanNOUE9iamVjdHMsIG5wT2JqZWN0LCBKU0M6OldlYWs8SlNOUE9iamVjdD4o
anNOUE9iamVjdCwgdGhpcywgbnBPYmplY3QpKTsKLSAgICByZXR1cm4ganNOUE9iamVjdDsKLX0K
LQotSlNWYWx1ZSBOUFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnROUFZhcmlhbnRUb0pTVmFsdWUo
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBOUFZhcmlhbnQmIHZhcmlh
bnQpCi17Ci0gICAgc3dpdGNoICh2YXJpYW50LnR5cGUpIHsKLSAgICBjYXNlIE5QVmFyaWFudFR5
cGVfVm9pZDoKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBjYXNlIE5QVmFy
aWFudFR5cGVfTnVsbDoKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotCi0gICAgY2FzZSBOUFZh
cmlhbnRUeXBlX0Jvb2w6Ci0gICAgICAgIHJldHVybiBqc0Jvb2xlYW4odmFyaWFudC52YWx1ZS5i
b29sVmFsdWUpOwotCi0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX0ludDMyOgotICAgICAgICByZXR1
cm4ganNOdW1iZXIodmFyaWFudC52YWx1ZS5pbnRWYWx1ZSk7Ci0KLSAgICBjYXNlIE5QVmFyaWFu
dFR5cGVfRG91YmxlOgotICAgICAgICByZXR1cm4ganNOdW1iZXIodmFyaWFudC52YWx1ZS5kb3Vi
bGVWYWx1ZSk7Ci0KLSAgICBjYXNlIE5QVmFyaWFudFR5cGVfU3RyaW5nOgotICAgICAgICByZXR1
cm4ganNTdHJpbmcoZ2xvYmFsT2JqZWN0LT52bSgpLCBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGlu
MUZhbGxiYWNrKHZhcmlhbnQudmFsdWUuc3RyaW5nVmFsdWUuVVRGOENoYXJhY3RlcnMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhcmlhbnQudmFsdWUuc3RyaW5nVmFsdWUuVVRGOExlbmd0aCkpOwotICAgIGNhc2UgTlBW
YXJpYW50VHlwZV9PYmplY3Q6Ci0gICAgICAgIHJldHVybiBnZXRPckNyZWF0ZUpTT2JqZWN0KGds
b2JhbE9iamVjdCwgdmFyaWFudC52YWx1ZS5vYmplY3RWYWx1ZSk7Ci0gICAgfQotCi0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLXZvaWQg
TlBSdW50aW1lT2JqZWN0TWFwOjpjb252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBOUFZhcmlhbnQmIHZhcmlh
bnQpCi17Ci0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBKU0xv
Y2tIb2xkZXIgbG9jayhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLQotICAgIFZPSURfVE9fTlBWQVJJ
QU5UKHZhcmlhbnQpOwotICAgIAotICAgIGlmICh2YWx1ZS5pc051bGwoKSkgewotICAgICAgICBO
VUxMX1RPX05QVkFSSUFOVCh2YXJpYW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIFZPSURfVE9fTlBWQVJJQU5UKHZh
cmlhbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHZhbHVlLmlzQm9vbGVh
bigpKSB7Ci0gICAgICAgIEJPT0xFQU5fVE9fTlBWQVJJQU5UKHZhbHVlLnRvQm9vbGVhbihsZXhp
Y2FsR2xvYmFsT2JqZWN0KSwgdmFyaWFudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAodmFsdWUuaXNOdW1iZXIoKSkgewotICAgICAgICBET1VCTEVfVE9fTlBWQVJJQU5UKHZh
bHVlLnRvTnVtYmVyKGxleGljYWxHbG9iYWxPYmplY3QpLCB2YXJpYW50KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIE5QU3Ry
aW5nIG5wU3RyaW5nID0gY3JlYXRlTlBTdHJpbmcodmFsdWUudG9TdHJpbmcobGV4aWNhbEdsb2Jh
bE9iamVjdCktPnZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QpLnV0ZjgoKSk7Ci0gICAgICAgIFNU
UklOR05fVE9fTlBWQVJJQU5UKG5wU3RyaW5nLlVURjhDaGFyYWN0ZXJzLCBucFN0cmluZy5VVEY4
TGVuZ3RoLCB2YXJpYW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh2YWx1
ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgIE5QT2JqZWN0KiBucE9iamVjdCA9IGdldE9yQ3JlYXRl
TlBPYmplY3Qodm0sIGFzT2JqZWN0KHZhbHVlKSk7Ci0gICAgICAgIE9CSkVDVF9UT19OUFZBUklB
TlQobnBPYmplY3QsIHZhcmlhbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLWJvb2wgTlBSdW50aW1lT2JqZWN0TWFwOjpldmFsdWF0
ZShOUE9iamVjdCogbnBPYmplY3QsIGNvbnN0IFN0cmluZyYgc2NyaXB0U3RyaW5nLCBOUFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICBTdHJvbmc8SlNHbG9iYWxPYmplY3Q+IGdsb2JhbE9iamVjdCh0
aGlzLT5nbG9iYWxPYmplY3QoKS0+dm0oKSwgdGhpcy0+Z2xvYmFsT2JqZWN0KCkpOwotICAgIGlm
ICghZ2xvYmFsT2JqZWN0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBKU0xvY2tIb2xk
ZXIgbG9jayhnbG9iYWxPYmplY3QuZ2V0KCkpOwotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZ2V0
T3JDcmVhdGVKU09iamVjdChnbG9iYWxPYmplY3QuZ2V0KCksIG5wT2JqZWN0KTsKLQotICAgIEpT
VmFsdWUgcmVzdWx0VmFsdWUgPSBKU0M6OmV2YWx1YXRlKGdsb2JhbE9iamVjdC5nZXQoKSwgbWFr
ZVNvdXJjZShzY3JpcHRTdHJpbmcsIHsgfSksIHRoaXNWYWx1ZSk7Ci0KLSAgICBjb252ZXJ0SlNW
YWx1ZVRvTlBWYXJpYW50KGdsb2JhbE9iamVjdC5nZXQoKSwgcmVzdWx0VmFsdWUsICpyZXN1bHQp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIE5QUnVudGltZU9iamVjdE1hcDo6aW52YWxp
ZGF0ZSgpCi17Ci0gICAgLy8gRGVhbGxvY2F0ZSBhbGwgdGhlIG9iamVjdCB3cmFwcGVycyBzbyB3
ZSB3b24ndCBsZWFrIGFueSBKYXZhU2NyaXB0IG9iamVjdHMuCi0gICAgZm9yIChhdXRvJiBucEpT
T2JqZWN0IDogY29weVRvVmVjdG9yKG1fbnBKU09iamVjdHMudmFsdWVzKCkpKQotICAgICAgICBk
ZWFsbG9jYXRlTlBPYmplY3QobnBKU09iamVjdCk7Ci0gICAgCi0gICAgLy8gV2Ugc2hvdWxkbid0
IGhhdmUgYW55IE5QSlNPYmplY3RzIGxlZnQgbm93LgotICAgIEFTU0VSVChtX25wSlNPYmplY3Rz
LmlzRW1wdHkoKSk7Ci0KLSAgICBWZWN0b3I8TlBPYmplY3QqPiBvYmplY3RzOwotCi0gICAgZm9y
IChIYXNoTWFwPE5QT2JqZWN0KiwgSlNDOjpXZWFrPEpTTlBPYmplY3Q+Pjo6aXRlcmF0b3IgcHRy
ID0gbV9qc05QT2JqZWN0cy5iZWdpbigpLCBlbmQgPSBtX2pzTlBPYmplY3RzLmVuZCgpOyBwdHIg
IT0gZW5kOyArK3B0cikgewotICAgICAgICBKU05QT2JqZWN0KiBqc05QT2JqZWN0ID0gcHRyLT52
YWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKCFqc05QT2JqZWN0KSAvLyBTa2lwIHpvbWJpZXMuCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgb2JqZWN0cy5hcHBlbmQoanNOUE9iamVjdC0+
bGVha05QT2JqZWN0KCkpOwotICAgIH0KLQotICAgIG1fanNOUE9iamVjdHMuY2xlYXIoKTsKLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0cy5zaXplKCk7ICsraSkKLSAgICAgICAg
cmVsZWFzZU5QT2JqZWN0KG9iamVjdHNbaV0pOwotICAgIAotICAgIC8vIERlYWwgd2l0aCBhbnkg
b2JqZWN0cyB0aGF0IHdlcmUgc2NoZWR1bGVkIGZvciBkZWxheWVkIGRlc3RydWN0aW9uCi0gICAg
aWYgKG1fbnBPYmplY3RzVG9GaW5hbGl6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBBU1NFUlQobV9maW5hbGl6YXRpb25UaW1lci5pc0FjdGl2ZSgpKTsKLSAgICBtX2ZpbmFsaXph
dGlvblRpbWVyLnN0b3AoKTsKLSAgICBpbnZhbGlkYXRlUXVldWVkT2JqZWN0cygpOwotfQotCi1K
U0dsb2JhbE9iamVjdCogTlBSdW50aW1lT2JqZWN0TWFwOjpnbG9iYWxPYmplY3QoKSBjb25zdAot
ewotICAgIEZyYW1lKiBmcmFtZSA9IG1fcGx1Z2luVmlldy0+ZnJhbWUoKTsKLSAgICBpZiAoIWZy
YW1lKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBmcmFtZS0+c2NyaXB0KCkuZ2xv
YmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpOwotfQotCi1zdGF0aWMgU3RyaW5nJiBnbG9iYWxFeGNl
cHRpb25TdHJpbmcoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGV4Y2Vw
dGlvblN0cmluZzsKLSAgICByZXR1cm4gZXhjZXB0aW9uU3RyaW5nOwotfQotCi12b2lkIE5QUnVu
dGltZU9iamVjdE1hcDo6c2V0R2xvYmFsRXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXhjZXB0aW9u
U3RyaW5nKQotewotICAgIGdsb2JhbEV4Y2VwdGlvblN0cmluZygpID0gZXhjZXB0aW9uU3RyaW5n
OwotfQotICAgIAotdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6Om1vdmVHbG9iYWxFeGNlcHRpb25U
b0V4ZWNTdGF0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCkKLXsKLSAgICBW
TSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmIChnbG9iYWxFeGNlcHRpb25TdHJpbmcoKS5p
c051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgewotICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayh2bSk7Ci0gICAgICAgIHRocm93RXhjZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIHNj
b3BlLCBjcmVhdGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxFeGNlcHRpb25TdHJp
bmcoKSkpOwotICAgIH0KLSAgICAKLSAgICBnbG9iYWxFeGNlcHRpb25TdHJpbmcoKSA9IFN0cmlu
ZygpOwotfQotCi12b2lkIE5QUnVudGltZU9iamVjdE1hcDo6aW52YWxpZGF0ZVF1ZXVlZE9iamVj
dHMoKQotewotICAgIEFTU0VSVChtX25wT2JqZWN0c1RvRmluYWxpemUuc2l6ZSgpKTsKLSAgICAv
LyBXZSBkZWxpYmVyYXRlbHkgcmUtcmVxdWVzdCBtX25wT2JqZWN0c1RvRmluYWxpemUuc2l6ZSgp
IGFzIGN1c3RvbSBkZWFsbG9jCi0gICAgLy8gZnVuY3Rpb25zIG1heSBleGVjdXRlIEpTIGFuZCBz
byBnZXQgbW9yZSBvYmplY3RzIGFkZGVkIHRvIHRoZSBkZWFsbG9jIHF1ZXVlCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX25wT2JqZWN0c1RvRmluYWxpemUuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIGRlYWxsb2NhdGVOUE9iamVjdChtX25wT2JqZWN0c1RvRmluYWxpemVbaV0pOwotICAgIG1f
bnBPYmplY3RzVG9GaW5hbGl6ZS5jbGVhcigpOwotfQotCi12b2lkIE5QUnVudGltZU9iamVjdE1h
cDo6YWRkVG9JbnZhbGlkYXRpb25RdWV1ZShOUE9iamVjdCogbnBPYmplY3QpCi17Ci0gICAgaWYg
KHRyeVNhZmVSZWxlYXNlTlBPYmplY3QobnBPYmplY3QpKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKG1fbnBPYmplY3RzVG9GaW5hbGl6ZS5pc0VtcHR5KCkpCi0gICAgICAgIG1fZmluYWxpemF0
aW9uVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci0gICAgQVNTRVJUKG1fZmluYWxpemF0aW9uVGlt
ZXIuaXNBY3RpdmUoKSk7Ci0gICAgbV9ucE9iamVjdHNUb0ZpbmFsaXplLmFwcGVuZChucE9iamVj
dCk7Ci19Ci0KLXZvaWQgTlBSdW50aW1lT2JqZWN0TWFwOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKLXsKLSAgICBKU05QT2JqZWN0KiBv
YmplY3QgPSBzdGF0aWNfY2FzdDxKU05QT2JqZWN0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsK
LSAgICB3ZWFrUmVtb3ZlKG1fanNOUE9iamVjdHMsIHN0YXRpY19jYXN0PE5QT2JqZWN0Kj4oY29u
dGV4dCksIG9iamVjdCk7Ci0gICAgYWRkVG9JbnZhbGlkYXRpb25RdWV1ZShvYmplY3QtPmxlYWtO
UE9iamVjdCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkNzQ5YTNiOGY3YTg5NjkyMjQxMTExNTNiZmJmMjQw
ZGI5Y2VmNTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0
TWFwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgTlBKU09iamVjdFdyYXBwZXJNYXBfaAotI2RlZmluZSBOUEpTT2JqZWN0V3JhcHBlck1hcF9o
Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1dlYWsuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9XZWFrSW5saW5lcy5oPgot
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNs
dWRlIDx3dGYvUnVuTG9vcC5oPgotCi1zdHJ1Y3QgTlBPYmplY3Q7Ci10eXBlZGVmIHN0cnVjdCBf
TlBWYXJpYW50IE5QVmFyaWFudDsKLQotbmFtZXNwYWNlIEpTQyB7Ci0gICAgY2xhc3MgQ2FsbEZy
YW1lOwotICAgIGNsYXNzIFZNOwotICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwotICAgIGNsYXNz
IEpTT2JqZWN0OwotICAgIGNsYXNzIEpTVmFsdWU7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci1jbGFzcyBKU05QT2JqZWN0OwotY2xhc3MgTlBKU09iamVjdDsKLWNsYXNzIFBsdWdpblZpZXc7
Ci0KLS8vIEEgcGVyIHBsdWctaW4gbWFwIG9mIE5QT2JqZWN0cyB0aGF0IHdyYXAgSmF2YVNjcmlw
dCBvYmplY3RzLgotY2xhc3MgTlBSdW50aW1lT2JqZWN0TWFwIDogcHJpdmF0ZSBKU0M6OldlYWtI
YW5kbGVPd25lciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgTlBSdW50aW1lT2JqZWN0TWFwKFBs
dWdpblZpZXcqKTsKLQotICAgIGNsYXNzIFBsdWdpblByb3RlY3RvciB7Ci0gICAgcHVibGljOgot
ICAgICAgICBleHBsaWNpdCBQbHVnaW5Qcm90ZWN0b3IoTlBSdW50aW1lT2JqZWN0TWFwKiBucFJ1
bnRpbWVPYmplY3RNYXApOwotICAgICAgICB+UGx1Z2luUHJvdGVjdG9yKCk7Ci0gICAgICAgIAot
ICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxQbHVnaW5WaWV3PiBtX3BsdWdpblZpZXc7Ci0g
ICAgfTsKLQotICAgIC8vIFJldHVybnMgYW4gTlBPYmplY3QgdGhhdCB3cmFwcyB0aGUgZ2l2ZW4g
SlNPYmplY3Qgb2JqZWN0LiBJZiB0aGVyZSBpcyBhbHJlYWR5IGFuIE5QT2JqZWN0IHRoYXQgd3Jh
cHMgdGhpcyBKU09iamVjdCwgaXQgd2lsbAotICAgIC8vIHJldGFpbiBpdCBhbmQgcmV0dXJuIGl0
LgotICAgIE5QT2JqZWN0KiBnZXRPckNyZWF0ZU5QT2JqZWN0KEpTQzo6Vk0mLCBKU0M6OkpTT2Jq
ZWN0Kik7Ci0gICAgdm9pZCBucEpTT2JqZWN0RGVzdHJveWVkKE5QSlNPYmplY3QqKTsKLQotICAg
IC8vIFJldHVybnMgYSBKU09iamVjdCBvYmplY3QgdGhhdCB3cmFwcyB0aGUgZ2l2ZW4gTlBPYmpl
Y3QuCi0gICAgSlNDOjpKU09iamVjdCogZ2V0T3JDcmVhdGVKU09iamVjdChKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgTlBPYmplY3QqKTsKLSAgICB2b2lkIGpzTlBPYmplY3REZXN0cm95ZWQoSlNOUE9i
amVjdCopOwotCi0gICAgdm9pZCBjb252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkpTVmFsdWUsIE5QVmFyaWFudCYpOwotICAgIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0TlBWYXJpYW50VG9KU1ZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBOUFZh
cmlhbnQmKTsKLQotICAgIGJvb2wgZXZhbHVhdGUoTlBPYmplY3QqLCBjb25zdCBTdHJpbmcmIHNj
cmlwdFN0cmluZywgTlBWYXJpYW50KiByZXN1bHQpOwotCi0gICAgLy8gQ2FsbGVkIHdoZW4gdGhl
IHBsdWctaW4gaXMgZGVzdHJveWVkLiBXaWxsIGludmFsaWRhdGUgYWxsIHRoZSBOUE9iamVjdHMu
Ci0gICAgdm9pZCBpbnZhbGlkYXRlKCk7Ci0KLSAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QoKSBjb25zdDsKLQotICAgIHN0YXRpYyB2b2lkIHNldEdsb2JhbEV4Y2VwdGlvbihj
b25zdCBTdHJpbmcmIGV4Y2VwdGlvblN0cmluZyk7Ci0gICAgc3RhdGljIHZvaWQgbW92ZUdsb2Jh
bEV4Y2VwdGlvblRvRXhlY1N0YXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLQotcHJpdmF0ZToK
LSAgICAvLyBXZWFrSGFuZGxlT3duZXIKLSAgICB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpT
Qzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIG92ZXJyaWRlOwotICAgIHZvaWQgYWRkVG9JbnZh
bGlkYXRpb25RdWV1ZShOUE9iamVjdCopOwotICAgIHZvaWQgaW52YWxpZGF0ZVF1ZXVlZE9iamVj
dHMoKTsKLQotICAgIFBsdWdpblZpZXcqIG1fcGx1Z2luVmlldzsKLSAgICBIYXNoTWFwPEpTQzo6
SlNPYmplY3QqLCBOUEpTT2JqZWN0Kj4gbV9ucEpTT2JqZWN0czsKLSAgICBIYXNoTWFwPE5QT2Jq
ZWN0KiwgSlNDOjpXZWFrPEpTTlBPYmplY3Q+PiBtX2pzTlBPYmplY3RzOwotICAgIFZlY3RvcjxO
UE9iamVjdCo+IG1fbnBPYmplY3RzVG9GaW5hbGl6ZTsKLSAgICBSdW5Mb29wOjpUaW1lcjxOUFJ1
bnRpbWVPYmplY3RNYXA+IG1fZmluYWxpemF0aW9uVGltZXI7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jZW5k
aWYgLy8gTlBKU09iamVjdFdyYXBwZXJNYXBfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lVXRpbGl0aWVzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZVV0aWxpdGllcy5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4N2E4NWU3OTgzODZhNTQyOTI1MGU2
NmE4NDU5NjBjZTVkOGVhMjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50
aW1lVXRpbGl0aWVzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5QUnVudGltZVV0aWxpdGllcy5o
IgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpbmNsdWRlIDxzdHJpbmcu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci12b2lkKiBucG5NZW1BbGxvYyh1aW50MzJfdCBzaXplKQotewotICAgIC8vIFdlIGNvdWxkIHVz
ZSBmYXN0TWFsbG9jIGhlcmUsIGJ1dCB0aGVyZSBtaWdodCBiZSBwbHVnLWlucyB0aGF0IG1peCBO
UE5fTWVtQWxsb2MvTlBOX01lbUZyZWUgd2l0aCBtYWxsb2MgYW5kIGZyZWUsCi0gICAgLy8gc28g
aGF2aW5nIHRoZW0gYmUgZXF1aXZhbGVudCBzZWVtcyBsaWtlIGEgZ29vZCBpZGVhLgotICAgIHJl
dHVybiBtYWxsb2Moc2l6ZSk7Ci19Ci0KLXZvaWQgbnBuTWVtRnJlZSh2b2lkKiBwdHIpCi17Ci0g
ICAgLy8gV2UgY291bGQgdXNlIGZhc3RGcmVlIGhlcmUsIGJ1dCB0aGVyZSBtaWdodCBiZSBwbHVn
LWlucyB0aGF0IG1peCBOUE5fTWVtQWxsb2MvTlBOX01lbUZyZWUgd2l0aCBtYWxsb2MgYW5kIGZy
ZWUsCi0gICAgLy8gc28gaGF2aW5nIHRoZW0gYmUgZXF1aXZhbGVudCBzZWVtcyBsaWtlIGEgZ29v
ZCBpZGVhLgotICAgIGZyZWUocHRyKTsKLX0KLQotTlBTdHJpbmcgY3JlYXRlTlBTdHJpbmcoY29u
c3QgQ1N0cmluZyYgc3RyaW5nKQotewotICAgIGNoYXIqIHV0ZjhDaGFyYWN0ZXJzID0gbnBuTWVt
TmV3QXJyYXk8Y2hhcj4oc3RyaW5nLmxlbmd0aCgpKTsKLSAgICBtZW1jcHkodXRmOENoYXJhY3Rl
cnMsIHN0cmluZy5kYXRhKCksIHN0cmluZy5sZW5ndGgoKSk7Ci0KLSAgICBOUFN0cmluZyBucFN0
cmluZzsKLSAgICBucFN0cmluZy5VVEY4Q2hhcmFjdGVycyA9IHV0ZjhDaGFyYWN0ZXJzOwotICAg
IG5wU3RyaW5nLlVURjhMZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICByZXR1cm4gbnBT
dHJpbmc7Ci19Ci0KLU5QT2JqZWN0KiBjcmVhdGVOUE9iamVjdChOUFAgbnBwLCBOUENsYXNzKiBu
cENsYXNzKQotewotICAgIEFTU0VSVChucENsYXNzKTsKLSAgICAKLSAgICBOUE9iamVjdCogbnBP
YmplY3Q7Ci0gICAgaWYgKG5wQ2xhc3MtPmFsbG9jYXRlKQotICAgICAgICBucE9iamVjdCA9IG5w
Q2xhc3MtPmFsbG9jYXRlKG5wcCwgbnBDbGFzcyk7Ci0gICAgZWxzZQotICAgICAgICBucE9iamVj
dCA9IG5wbk1lbU5ldzxOUE9iamVjdD4oKTsKLQotICAgIG5wT2JqZWN0LT5fY2xhc3MgPSBucENs
YXNzOwotICAgIG5wT2JqZWN0LT5yZWZlcmVuY2VDb3VudCA9IDE7Ci0gICAgCi0gICAgcmV0dXJu
IG5wT2JqZWN0OwotfQotCi12b2lkIGRlYWxsb2NhdGVOUE9iamVjdChOUE9iamVjdCogbnBPYmpl
Y3QpCi17Ci0gICAgQVNTRVJUKG5wT2JqZWN0KTsKLSAgICBpZiAoIW5wT2JqZWN0KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobnBPYmplY3QtPl9jbGFzcy0+ZGVhbGxvY2F0ZSkKLSAgICAg
ICAgbnBPYmplY3QtPl9jbGFzcy0+ZGVhbGxvY2F0ZShucE9iamVjdCk7Ci0gICAgZWxzZQotICAg
ICAgICBucG5NZW1GcmVlKG5wT2JqZWN0KTsKLX0KLQotdm9pZCByZXRhaW5OUE9iamVjdChOUE9i
amVjdCogbnBPYmplY3QpCi17Ci0gICAgQVNTRVJUKG5wT2JqZWN0KTsKLSAgICBpZiAoIW5wT2Jq
ZWN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBucE9iamVjdC0+cmVmZXJlbmNlQ291bnQrKzsK
LX0KLQotYm9vbCB0cnlTYWZlUmVsZWFzZU5QT2JqZWN0KE5QT2JqZWN0KiBucE9iamVjdCkKLXsK
LSAgICBBU1NFUlQobnBPYmplY3QpOwotICAgIGlmICghbnBPYmplY3QpCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIAotICAgIEFTU0VSVChucE9iamVjdC0+cmVmZXJlbmNlQ291bnQgPj0gMSk7
Ci0KLSAgICBucE9iamVjdC0+cmVmZXJlbmNlQ291bnQtLTsKLSAgICBpZiAobnBPYmplY3QtPnJl
ZmVyZW5jZUNvdW50KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAobnBPYmplY3QtPl9j
bGFzcy0+ZGVhbGxvY2F0ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlYWxsb2NhdGVO
UE9iamVjdChucE9iamVjdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgcmVsZWFzZU5Q
T2JqZWN0KE5QT2JqZWN0KiBucE9iamVjdCkKLXsKLSAgICBBU1NFUlQobnBPYmplY3QpOwotICAg
IGlmICghbnBPYmplY3QpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQobnBPYmpl
Y3QtPnJlZmVyZW5jZUNvdW50ID49IDEpOwotICAgIG5wT2JqZWN0LT5yZWZlcmVuY2VDb3VudC0t
OwotICAgIGlmICghbnBPYmplY3QtPnJlZmVyZW5jZUNvdW50KQotICAgICAgICBkZWFsbG9jYXRl
TlBPYmplY3QobnBPYmplY3QpOwotfQotCi12b2lkIHJlbGVhc2VOUFZhcmlhbnRWYWx1ZShOUFZh
cmlhbnQqIHZhcmlhbnQpCi17Ci0gICAgQVNTRVJUKHZhcmlhbnQpOwotICAgIAotICAgIHN3aXRj
aCAodmFyaWFudC0+dHlwZSkgewotICAgIGNhc2UgTlBWYXJpYW50VHlwZV9Wb2lkOgotICAgIGNh
c2UgTlBWYXJpYW50VHlwZV9OdWxsOgotICAgIGNhc2UgTlBWYXJpYW50VHlwZV9Cb29sOgotICAg
IGNhc2UgTlBWYXJpYW50VHlwZV9JbnQzMjoKLSAgICBjYXNlIE5QVmFyaWFudFR5cGVfRG91Ymxl
OgotICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgotICAgICAgICBicmVhazsKLSAgICAgICAgCi0g
ICAgY2FzZSBOUFZhcmlhbnRUeXBlX1N0cmluZzoKLSAgICAgICAgbnBuTWVtRnJlZShjb25zdF9j
YXN0PE5QVVRGOCo+KHZhcmlhbnQtPnZhbHVlLnN0cmluZ1ZhbHVlLlVURjhDaGFyYWN0ZXJzKSk7
Ci0gICAgICAgIHZhcmlhbnQtPnZhbHVlLnN0cmluZ1ZhbHVlLlVURjhDaGFyYWN0ZXJzID0gMDsK
LSAgICAgICAgdmFyaWFudC0+dmFsdWUuc3RyaW5nVmFsdWUuVVRGOExlbmd0aCA9IDA7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgTlBWYXJpYW50VHlwZV9PYmplY3Q6Ci0gICAgICAgIHJlbGVh
c2VOUE9iamVjdCh2YXJpYW50LT52YWx1ZS5vYmplY3RWYWx1ZSk7Ci0gICAgICAgIHZhcmlhbnQt
PnZhbHVlLm9iamVjdFZhbHVlID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgdmFy
aWFudC0+dHlwZSA9IE5QVmFyaWFudFR5cGVfVm9pZDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZVV0aWxp
dGllcy5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50
aW1lVXRpbGl0aWVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3NzVkNjI2MTkx
MGMyZmQ4ZGQ4YjgzOWU0ODNjNTRhZTA4NjA5NDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0
c2NhcGUvTlBSdW50aW1lVXRpbGl0aWVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBOUFJ1bnRpbWVVdGlsaXRpZXNfaAotI2RlZmluZSBOUFJ1
bnRpbWVVdGlsaXRpZXNfaAotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNp
bmNsdWRlIDxXZWJDb3JlL25wcnVudGltZV9pbnRlcm5hbC5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+Ci0KLXN0cnVjdCBOUENsYXNzOwotc3RydWN0IE5QT2JqZWN0OwotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotdm9pZCogbnBuTWVtQWxsb2ModWludDMyX3QpOwotdm9pZCBucG5NZW1GcmVl
KHZvaWQqKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogbnBuTWVtTmV3KCkKLXsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG5wbk1lbUFsbG9jKHNpemVvZihUKSkpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBUKiBucG5NZW1OZXdBcnJheShzaXplX3QgY291bnQpCi17Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQqPihucG5NZW1BbGxvYyhzaXplb2YoVCkgKiBjb3VudCkpOwot
fQotCi1OUFN0cmluZyBjcmVhdGVOUFN0cmluZyhjb25zdCBDU3RyaW5nJik7Ci0KLU5QT2JqZWN0
KiBjcmVhdGVOUE9iamVjdChOUFAsIE5QQ2xhc3MqKTsKLXZvaWQgZGVhbGxvY2F0ZU5QT2JqZWN0
KE5QT2JqZWN0Kik7Ci0KLXZvaWQgcmV0YWluTlBPYmplY3QoTlBPYmplY3QqKTsKLXZvaWQgcmVs
ZWFzZU5QT2JqZWN0KE5QT2JqZWN0Kik7Ci0gICAgCi0vLyBUaGlzIGZ1bmN0aW9uIGRlY3JlbWVu
dHMgdGhlIHJlZmNvdW50IG9mIHRoZSBzcGVjaWZpZWQgb2JqZWN0LiBJZiB0aGUKLS8vIHJlZmNv
dW50IHJlYWNoZXMgMCBpdCB3aWxsIGF0dGVtcHQgdG8gZGVzdHJveSB0aGUgb2JqZWN0LiBJZiB0
aGUgb2JqZWN0IGhhcwotLy8gYSBjdXN0b20gZGVhbGxvY2F0ZSBmdW5jdGlvbiBpdCB3aWxsIGZh
aWwgYW5kIHJldHVybiBmYWxzZSwgc28gaXQgd2lsbCBiZQotLy8gdXAgdG8gdGhlIGNhbGxlciB0
byBjYWxsIGRlYWxsb2NhdGVOUE9iamVjdC4KLS8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBp
bXBsZW1lbnQgdGhlIGRlbGF5ZWQgZmluYWxpemF0aW9uIG9mIE5QT2JqZWN0cwotLy8gcmVsZWFz
ZWQgZHVyaW5nIEdDLgotYm9vbCB0cnlTYWZlUmVsZWFzZU5QT2JqZWN0KE5QT2JqZWN0Kik7Ci0K
LXZvaWQgcmVsZWFzZU5QVmFyaWFudFZhbHVlKE5QVmFyaWFudCopOwotCi19Ci0KLSNlbmRpZiAv
LyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2VuZGlmIC8vIE5QUnVudGltZVV0aWxp
dGllc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OZXRzY2FwZUJyb3dzZXJGdW5jcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZUJyb3dzZXJGdW5jcy5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDNkYzkyOGRjNTdhOTdkMDJjOTI4NDUzMzExY2YzMWNiZjJiODVjMzQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVCcm93c2VyRnVuY3MuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTA0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTmV0c2NhcGVCcm93c2VyRnVuY3MuaCIKLQotI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiTlBSdW50aW1lVXRpbGl0
aWVzLmgiCi0jaW5jbHVkZSAiTmV0c2NhcGVQbHVnaW4uaCIKLSNpbmNsdWRlICJQbHVnaW5Db250
cm9sbGVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9IVFRQSGVhZGVyTWFwLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9IVFRQSGVhZGVyTmFtZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0lkZW50aWZpZXJS
ZXAuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9Qcm90ZWN0aW9uU3BhY2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5o
PgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx1dGlsaXR5PgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJD
b252ZXJzaW9uLmg+Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlIDx3dGYvTWFjaFNl
bmRSaWdodC5oPgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShYMTEpCi0jaW5jbHVkZSA8V2ViQ29y
ZS9QbGF0Zm9ybURpc3BsYXlYMTEuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi0vLyBIZWxwZXIgY2xhc3MgZm9yIGRlbGF5aW5nIGRl
c3RydWN0aW9uIG9mIGEgcGx1Zy1pbi4KLWNsYXNzIFBsdWdpbkRlc3RydWN0aW9uUHJvdGVjdG9y
IHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBQbHVnaW5EZXN0cnVjdGlvblByb3RlY3RvcihOZXRz
Y2FwZVBsdWdpbiogcGx1Z2luKQotICAgIHsKLSAgICAgICAgaWYgKHBsdWdpbikKLSAgICAgICAg
ICAgIG1fcHJvdGVjdG9yID0gbWFrZVVuaXF1ZTxQbHVnaW5Db250cm9sbGVyOjpQbHVnaW5EZXN0
cnVjdGlvblByb3RlY3Rvcj4oc3RhdGljX2Nhc3Q8UGx1Z2luKj4ocGx1Z2luKS0+Y29udHJvbGxl
cigpKTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5D
b250cm9sbGVyOjpQbHVnaW5EZXN0cnVjdGlvblByb3RlY3Rvcj4gbV9wcm90ZWN0b3I7Ci19Owot
Ci1zdGF0aWMgYm9vbCBzdGFydHNXaXRoQmxhbmtMaW5lKGNvbnN0IGNoYXIqIGJ5dGVzLCB1bnNp
Z25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIGxlbmd0aCA+IDAgJiYgYnl0ZXNbMF0gPT0gJ1xu
JzsKLX0KLQotc3RhdGljIGludCBsb2NhdGlvbkFmdGVyRmlyc3RCbGFua0xpbmUoY29uc3QgY2hh
ciogYnl0ZXMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoIC0gNDsgaSsrKSB7Ci0gICAgICAgIC8vIFN1cHBvcnQgZm9yIEFjcm9iYXQuIEl0
IHNlbmRzICJcblxuIi4KLSAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdcbicgJiYgYnl0ZXNbaSAr
IDFdID09ICdcbicpCi0gICAgICAgICAgICByZXR1cm4gaSArIDI7Ci0gICAgICAgIAotICAgICAg
ICAvLyBSZXR1cm5zIHRoZSBwb3NpdGlvbiBhZnRlciAyIENSTEYncyBvciAxIENSTEYgaWYgaXQg
aXMgdGhlIGZpcnN0IGxpbmUuCi0gICAgICAgIGlmIChieXRlc1tpXSA9PSAnXHInICYmIGJ5dGVz
W2kgKyAxXSA9PSAnXG4nKSB7Ci0gICAgICAgICAgICBpICs9IDI7Ci0gICAgICAgICAgICBpZiAo
aSA9PSAyKQotICAgICAgICAgICAgICAgIHJldHVybiBpOwotCi0gICAgICAgICAgICBpZiAoYnl0
ZXNbaV0gPT0gJ1xuJykgewotICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIERpcmVjdG9y
LiBJdCBzZW5kcyAiXHJcblxuIiAoMzg4MDM4NykuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGkg
KyAxOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAm
JiBieXRlc1tpICsgMV0gPT0gJ1xuJykgewotICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9y
IEZsYXNoLiBJdCBzZW5kcyAiXHJcblxyXG4iICgzNzU4MTEzKS4KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gaSArIDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gLTE7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBmaW5kRW5kT2ZMaW5lKGNvbnN0IGNoYXIq
IGJ5dGVzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBIVFRQ
IHNwZWNpZmljYXRpb24gRU9MIGlzIGRlZmluZWQgYXMKLSAgICAvLyBhIENSTEYgcGFpci4gVW5m
b3J0dW5hdGVseSwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNlIExGCi0gICAgLy8gaW5zdGVhZC4gV29y
c2UgeWV0LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgYSBjb21iaW5hdGlvbgotICAgIC8vIG9mIGJv
dGggKGUuZy4gPGhlYWRlcj5DUkxGTEY8Ym9keT4pLCBzbyBmaW5kRU9MIG5lZWRzCi0gICAgLy8g
dG8gYmUgbW9yZSBmb3JnaXZpbmcuIEl0IHdpbGwgbm93IGFjY2VwdCBDUkxGLCBMRiBvcgotICAg
IC8vIENSLgotICAgIC8vCi0gICAgLy8gSXQgcmV0dXJucyAwIGlmIEVPTEYgaXMgbm90IGZvdW5k
IG9yIGl0IHdpbGwgcmV0dXJuCi0gICAgLy8gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCB0ZXJtaW5h
dGluZyBjaGFyYWN0ZXIuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgIGlmIChieXRlc1tpXSA9PSAnXG4nKQotICAgICAgICAgICAgcmV0dXJuIGJ5
dGVzICsgaTsKLSAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicpIHsKLSAgICAgICAgICAgIC8v
IENoZWNrIHRvIHNlZSBpZiBzcGFubmluZyBidWZmZXIgYm91bmRzCi0gICAgICAgICAgICAvLyAo
Q1JMRiBpcyBhY3Jvc3MgcmVhZHMpLiBJZiBzbywgd2FpdCBmb3IKLSAgICAgICAgICAgIC8vIG5l
eHQgcmVhZC4KLSAgICAgICAgICAgIGlmIChpICsgMSA9PSBsZW5ndGgpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHJldHVybiBieXRlcyArIGk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIFN0cmluZyBjYXBpdGFsaXplUkZDODIy
SGVhZGVyRmllbGROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBib29sIGNhcGl0YWxp
emVDaGFyYWN0ZXIgPSB0cnVlOwotICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgcmVzdWx0
LmFwcGVuZChjYXBpdGFsaXplQ2hhcmFjdGVyID8gdG9BU0NJSVVwcGVyKG5hbWVbaV0pIDogdG9B
U0NJSUxvd2VyKG5hbWVbaV0pKTsKLSAgICAgICAgaWYgKG5hbWVbaV0gPT0gJy0nKQotICAgICAg
ICAgICAgY2FwaXRhbGl6ZUNoYXJhY3RlciA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3Vs
dC50b1N0cmluZygpOwotfQotCi1zdGF0aWMgSFRUUEhlYWRlck1hcCBwYXJzZVJGQzgyMkhlYWRl
ckZpZWxkcyhjb25zdCBjaGFyKiBieXRlcywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIFN0cmlu
ZyBsYXN0SGVhZGVyS2V5OwotICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOwotCi0gICAg
Ly8gTG9vcCBvdmVyIGxpbmVzIHVudGlsIHdlJ3JlIHBhc3QgdGhlIGhlYWRlciwgb3Igd2UgY2Fu
J3QgZmluZCBhbnkgbW9yZSBlbmQtb2YtbGluZXMKLSAgICB3aGlsZSAoY29uc3QgY2hhciogZW5k
T2ZMaW5lID0gZmluZEVuZE9mTGluZShieXRlcywgbGVuZ3RoKSkgewotICAgICAgICBjb25zdCBj
aGFyKiBsaW5lID0gYnl0ZXM7Ci0gICAgICAgIGludCBsaW5lTGVuZ3RoID0gZW5kT2ZMaW5lIC0g
Ynl0ZXM7Ci0KLSAgICAgICAgLy8gTW92ZSBieXRlcyB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRo
ZSB0ZXJtaW5hdG9yIGFzIHJldHVybmVkIGJ5IGZpbmRFbmRPZkxpbmUuCi0gICAgICAgIGJ5dGVz
ID0gZW5kT2ZMaW5lICsgMTsKLSAgICAgICAgaWYgKCgqZW5kT2ZMaW5lID09ICdccicpICYmICgq
Ynl0ZXMgPT0gJ1xuJykpCi0gICAgICAgICAgICBieXRlcysrOyAvLyBTYWZlIHNpbmNlIGZpbmRF
bmRPZkxpbmUgd29uJ3QgcmV0dXJuIGEgc3Bhbm5pbmcgQ1JMRi4KLQotICAgICAgICBsZW5ndGgg
LT0gKGJ5dGVzIC0gbGluZSk7Ci0gICAgICAgIGlmICghbGluZUxlbmd0aCkgewotICAgICAgICAg
ICAgLy8gQmxhbmsgbGluZTsgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgaGVhZGVyCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgqbGluZSA9PSAnICcgfHwgKmxp
bmUgPT0gJ1x0JykgewotICAgICAgICAgICAgLy8gQ29udGludWF0aW9uIG9mIHRoZSBwcmV2aW91
cyBoZWFkZXIKLSAgICAgICAgICAgIGlmIChsYXN0SGVhZGVyS2V5LmlzTnVsbCgpKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gbWFsZm9ybWVkIGhlYWRlcjsgaWdub3JlIGl0IGFuZCBjb250aW51ZQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfSAKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVh
ZGVyCi0gICAgICAgICAgICBTdHJpbmcgY3VycmVudFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChs
YXN0SGVhZGVyS2V5KTsKLSAgICAgICAgICAgIFN0cmluZyBuZXdWYWx1ZShsaW5lLCBsaW5lTGVu
Z3RoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0SGVh
ZGVyS2V5LCBjdXJyZW50VmFsdWUgKyBuZXdWYWx1ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBCcmFuZCBuZXcgaGVhZGVyCi0gICAgICAgICAgICBjb25zdCBjaGFyKiBjb2xv
biA9IGxpbmU7Ci0gICAgICAgICAgICB3aGlsZSAoKmNvbG9uICE9ICc6JyAmJiBjb2xvbiAhPSBl
bmRPZkxpbmUpCi0gICAgICAgICAgICAgICAgY29sb24rKzsKLQotICAgICAgICAgICAgaWYgKGNv
bG9uID09IGVuZE9mTGluZSkgewotICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7
IGlnbm9yZSBpdCBhbmQgY29udGludWUKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgbGFzdEhlYWRlcktleSA9IGNhcGl0YWxpemVSRkM4MjJI
ZWFkZXJGaWVsZE5hbWUoU3RyaW5nKGxpbmUsIGNvbG9uIC0gbGluZSkpOwotICAgICAgICAgICAg
U3RyaW5nIHZhbHVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKGNvbG9uKys7IGNv
bG9uICE9IGVuZE9mTGluZTsgY29sb24rKykgewotICAgICAgICAgICAgICAgIGlmICgqY29sb24g
IT0gJyAnICYmICpjb2xvbiAhPSAnXHQnKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjb2xvbiA9PSBlbmRPZkxpbmUpCi0gICAgICAg
ICAgICAgICAgdmFsdWUgPSBlbXB0eVN0cmluZygpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHZhbHVlID0gU3RyaW5nKGNvbG9uLCBlbmRPZkxpbmUgLSBjb2xvbik7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQo
bGFzdEhlYWRlcktleSk7Ci0gICAgICAgICAgICBpZiAoIW9sZFZhbHVlLmlzTnVsbCgpKQotICAg
ICAgICAgICAgICAgIHZhbHVlID0gb2xkVmFsdWUgKyAiLCAiICsgdmFsdWU7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGhlYWRlckZpZWxkcy5zZXQobGFzdEhlYWRlcktleSwgdmFsdWUpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGhlYWRlckZpZWxkczsKLX0KLSAgICAKLXN0
YXRpYyBOUEVycm9yIHBhcnNlUG9zdEJ1ZmZlcihib29sIGlzRmlsZSwgY29uc3QgY2hhciAqYnVm
ZmVyLCB1aW50MzJfdCBsZW5ndGgsIGJvb2wgcGFyc2VIZWFkZXJzLCBIVFRQSGVhZGVyTWFwJiBo
ZWFkZXJGaWVsZHMsIFZlY3Rvcjx1aW50OF90PiYgYm9keURhdGEpCi17Ci0gICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnRzOwotICAgIGNvbnN0IGNoYXIqIHBvc3RCdWZmZXIgPSAw
OwotICAgIHVpbnQzMl90IHBvc3RCdWZmZXJTaXplID0gMDsKLQotICAgIGlmIChpc0ZpbGUpIHsK
LSAgICAgICAgZmlsZUNvbnRlbnRzID0gU2hhcmVkQnVmZmVyOjpjcmVhdGVXaXRoQ29udGVudHNP
ZkZpbGUoU3RyaW5nOjpmcm9tVVRGOChidWZmZXIpKTsKLSAgICAgICAgaWYgKCFmaWxlQ29udGVu
dHMpCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7Ci0KLSAgICAgICAg
cG9zdEJ1ZmZlciA9IGZpbGVDb250ZW50cy0+ZGF0YUFzQ2hhclB0cigpOwotICAgICAgICBwb3N0
QnVmZmVyU2l6ZSA9IGZpbGVDb250ZW50cy0+c2l6ZSgpOwotCi0gICAgICAgIC8vIEZJWE1FOiBU
aGUgTlBBUEkgc3BlYyBzdGF0ZXMgdGhhdCB0aGUgZmlsZSBzaG91bGQgYmUgZGVsZXRlZCBoZXJl
LgotICAgIH0gZWxzZSB7Ci0gICAgICAgIHBvc3RCdWZmZXIgPSBidWZmZXI7Ci0gICAgICAgIHBv
c3RCdWZmZXJTaXplID0gbGVuZ3RoOwotICAgIH0KLQotICAgIGlmIChwYXJzZUhlYWRlcnMpIHsK
LSAgICAgICAgaWYgKHN0YXJ0c1dpdGhCbGFua0xpbmUocG9zdEJ1ZmZlciwgcG9zdEJ1ZmZlclNp
emUpKSB7Ci0gICAgICAgICAgICBwb3N0QnVmZmVyKys7Ci0gICAgICAgICAgICBwb3N0QnVmZmVy
U2l6ZS0tOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaW50IGxvY2F0aW9uID0gbG9j
YXRpb25BZnRlckZpcnN0QmxhbmtMaW5lKHBvc3RCdWZmZXIsIHBvc3RCdWZmZXJTaXplKTsKLSAg
ICAgICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgewotICAgICAgICAgICAgICAgIC8vIElmIHRo
ZSBibGFuayBsaW5lIGlzIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBidWZmZXIsIGV2
ZXJ5dGhpbmcgYmVmb3JlIGlzIHRoZSBoZWFkZXIKLSAgICAgICAgICAgICAgICBoZWFkZXJGaWVs
ZHMgPSBwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyhwb3N0QnVmZmVyLCBsb2NhdGlvbik7Ci0gICAg
ICAgICAgICAgICAgdW5zaWduZWQgZGF0YUxlbmd0aCA9IHBvc3RCdWZmZXJTaXplIC0gbG9jYXRp
b247Ci0KLSAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgcGx1Z2lucyBsaWtlIHRvIHNldCBD
b250ZW50LUxlbmd0aCB0aGVtc2VsdmVzIHdoZW4gdGhleSBwb3N0LAotICAgICAgICAgICAgICAg
IC8vIGJ1dCBXZWJGb3VuZGF0aW9uIGRvZXMgbm90IGxpa2UgdGhhdC4gU28gd2Ugd2lsbCByZW1v
dmUgdGhlIGhlYWRlcgotICAgICAgICAgICAgICAgIC8vIGFuZCBpbnN0ZWFkIHRydW5jYXRlIHRo
ZSBkYXRhIHRvIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoLgotICAgICAgICAgICAgICAgIFN0cmluZyBj
b250ZW50TGVuZ3RoID0gaGVhZGVyRmllbGRzLmdldChIVFRQSGVhZGVyTmFtZTo6Q29udGVudExl
bmd0aCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRlbnRMZW5ndGguaXNOdWxsKCkpCi0g
ICAgICAgICAgICAgICAgICAgIGRhdGFMZW5ndGggPSBzdGQ6Om1pbihwYXJzZUludGVnZXJBbGxv
d2luZ1RyYWlsaW5nSnVuazx1bnNpZ25lZD4oY29udGVudExlbmd0aCkudmFsdWVfb3IoMCksIGRh
dGFMZW5ndGgpOwotICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5yZW1vdmUoSFRUUEhlYWRl
ck5hbWU6OkNvbnRlbnRMZW5ndGgpOwotCi0gICAgICAgICAgICAgICAgcG9zdEJ1ZmZlciArPSBs
b2NhdGlvbjsKLSAgICAgICAgICAgICAgICBwb3N0QnVmZmVyU2l6ZSA9IGRhdGFMZW5ndGg7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBBU1NFUlQoYm9keURhdGEuaXNF
bXB0eSgpKTsKLSAgICBib2R5RGF0YS5hcHBlbmQocG9zdEJ1ZmZlciwgcG9zdEJ1ZmZlclNpemUp
OwotCi0gICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotfQotCi1zdGF0aWMgU3RyaW5nIG1ha2VV
UkxTdHJpbmcoY29uc3QgY2hhciogdXJsKQotewotICAgIFN0cmluZyB1cmxTdHJpbmcodXJsKTsK
LSAgICAKLSAgICAvLyBTdHJpcCByZXR1cm4gY2hhcmFjdGVycy4KLSAgICB1cmxTdHJpbmcucmVw
bGFjZVdpdGhMaXRlcmFsKCdccicsICIiKTsKLSAgICB1cmxTdHJpbmcucmVwbGFjZVdpdGhMaXRl
cmFsKCdcbicsICIiKTsKLQotICAgIHJldHVybiB1cmxTdHJpbmc7Ci19Ci0KLXN0YXRpYyBOUEVy
cm9yIE5QTl9HZXRVUkwoTlBQIG5wcCwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJn
ZXQpCi17Ci0gICAgaWYgKCF1cmwpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9S
OwotICAgIAotICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVn
aW46OmZyb21OUFAobnBwKTsKLSAgICBwbHVnaW4tPmxvYWRVUkwoIkdFVCIsIG1ha2VVUkxTdHJp
bmcodXJsKSwgdGFyZ2V0LCBIVFRQSGVhZGVyTWFwKCksIFZlY3Rvcjx1aW50OF90PigpLCBmYWxz
ZSwgMCk7Ci0gICAgCi0gICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci19Ci0KLXN0YXRp
YyBOUEVycm9yIE5QTl9Qb3N0VVJMKE5QUCBucHAsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hh
ciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpCi17
Ci0gICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHBv
c3REYXRhOwotICAgIAotICAgIC8vIE5QTl9Qb3N0VVJMIG9ubHkgYWxsb3dzIGhlYWRlcnMgaWYg
dGhlIHBvc3QgYnVmZmVyIHBvaW50cyB0byBhIGZpbGUuCi0gICAgYm9vbCBwYXJzZUhlYWRlcnMg
PSBmaWxlOwotCi0gICAgTlBFcnJvciBlcnJvciA9IHBhcnNlUG9zdEJ1ZmZlcihmaWxlLCBidWYs
IGxlbiwgcGFyc2VIZWFkZXJzLCBoZWFkZXJGaWVsZHMsIHBvc3REYXRhKTsKLSAgICBpZiAoZXJy
b3IgIT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAgIHJldHVybiBlcnJvcjsKLQotICAgIFJlZlB0
cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsK
LSAgICBwbHVnaW4tPmxvYWRVUkwoIlBPU1QiLCBtYWtlVVJMU3RyaW5nKHVybCksIHRhcmdldCwg
V1RGTW92ZShoZWFkZXJGaWVsZHMpLCBwb3N0RGF0YSwgZmFsc2UsIDApOwotICAgIHJldHVybiBO
UEVSUl9OT19FUlJPUjsKLX0KLQotc3RhdGljIE5QRXJyb3IgTlBOX1JlcXVlc3RSZWFkKE5QU3Ry
ZWFtKiwgTlBCeXRlUmFuZ2UqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci19Ci0KLXN0YXRpYyBOUEVycm9yIE5QTl9OZXdTdHJlYW0o
TlBQLCBOUE1JTUVUeXBlLCBjb25zdCBjaGFyKiwgTlBTdHJlYW0qKikKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotfQotICAgIAotc3Rh
dGljIGludDMyX3QgTlBOX1dyaXRlKE5QUCwgTlBTdHJlYW0qLCBpbnQzMl90LCB2b2lkKikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOyAgICAKLSAgICByZXR1cm4gLTE7Ci19Ci0gICAgCi1zdGF0
aWMgTlBFcnJvciBOUE5fRGVzdHJveVN0cmVhbShOUFAgbnBwLCBOUFN0cmVhbSogc3RyZWFtLCBO
UFJlYXNvbiByZWFzb24pCi17Ci0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBO
ZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotICAgIAotICAgIHJldHVybiBwbHVnaW4tPmRl
c3Ryb3lTdHJlYW0oc3RyZWFtLCByZWFzb24pOwotfQotCi1zdGF0aWMgdm9pZCBOUE5fU3RhdHVz
KE5QUCBucHAsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgU3RyaW5nIHN0YXR1c2JhclRl
eHQ7Ci0gICAgaWYgKCFtZXNzYWdlKQotICAgICAgICBzdGF0dXNiYXJUZXh0ID0gZW1wdHlTdHJp
bmcoKTsKLSAgICBlbHNlCi0gICAgICAgIHN0YXR1c2JhclRleHQgPSBTdHJpbmc6OmZyb21VVEY4
V2l0aExhdGluMUZhbGxiYWNrKG1lc3NhZ2UsIHN0cmxlbihtZXNzYWdlKSk7Ci0KLSAgICBSZWZQ
dHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7
Ci0gICAgcGx1Z2luLT5zZXRTdGF0dXNiYXJUZXh0KHN0YXR1c2JhclRleHQpOwotfQotICAgIAot
c3RhdGljIGNvbnN0IGNoYXIqIE5QTl9Vc2VyQWdlbnQoTlBQIG5wcCkKLXsKLSAgICByZXR1cm4g
TmV0c2NhcGVQbHVnaW46OnVzZXJBZ2VudChucHApOwotfQotCi1zdGF0aWMgdm9pZCogTlBOX01l
bUFsbG9jKHVpbnQzMl90IHNpemUpCi17Ci0gICAgcmV0dXJuIG5wbk1lbUFsbG9jKHNpemUpOwot
fQotCi1zdGF0aWMgdm9pZCBOUE5fTWVtRnJlZSh2b2lkKiBwdHIpCi17Ci0gICAgbnBuTWVtRnJl
ZShwdHIpOwotfQotCi1zdGF0aWMgdWludDMyX3QgTlBOX01lbUZsdXNoKHVpbnQzMl90KQotewot
ICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBOUE5fUmVsb2FkUGx1Z2lucyhOUEJvb2wp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotc3RhdGljIEpSSUVudiogTlBOX0dldEph
dmFFbnYodm9pZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQot
Ci1zdGF0aWMganJlZiBOUE5fR2V0SmF2YVBlZXIoTlBQKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBOUEVycm9yIE5QTl9HZXRVUkxOb3RpZnko
TlBQIG5wcCwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlm
eURhdGEpCi17Ci0gICAgaWYgKCF1cmwpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VS
Uk9SOwotCi0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdp
bjo6ZnJvbU5QUChucHApOwotICAgIHBsdWdpbi0+bG9hZFVSTCgiR0VUIiwgbWFrZVVSTFN0cmlu
Zyh1cmwpLCB0YXJnZXQsIEhUVFBIZWFkZXJNYXAoKSwgVmVjdG9yPHVpbnQ4X3Q+KCksIHRydWUs
IG5vdGlmeURhdGEpOwotICAgIAotICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLX0KLQotc3Rh
dGljIE5QRXJyb3IgTlBOX1Bvc3RVUkxOb3RpZnkoTlBQIG5wcCwgY29uc3QgY2hhciogdXJsLCBj
b25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wg
ZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKLXsKLSAgICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxk
czsKLSAgICBWZWN0b3I8dWludDhfdD4gcG9zdERhdGE7Ci0gICAgTlBFcnJvciBlcnJvciA9IHBh
cnNlUG9zdEJ1ZmZlcihmaWxlLCBidWYsIGxlbiwgdHJ1ZSwgaGVhZGVyRmllbGRzLCBwb3N0RGF0
YSk7Ci0gICAgaWYgKGVycm9yICE9IE5QRVJSX05PX0VSUk9SKQotICAgICAgICByZXR1cm4gZXJy
b3I7Ci0KLSAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2lu
Ojpmcm9tTlBQKG5wcCk7Ci0gICAgcGx1Z2luLT5sb2FkVVJMKCJQT1NUIiwgbWFrZVVSTFN0cmlu
Zyh1cmwpLCB0YXJnZXQsIGhlYWRlckZpZWxkcywgcG9zdERhdGEsIHRydWUsIG5vdGlmeURhdGEp
OwotICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLX0KLQotI2lmIFBMQVRGT1JNKENPQ09BKQot
Ly8gV2hldGhlciB0aGUgYnJvd3NlciBzdXBwb3J0cyBjb21wb3NpdGluZyBvZiBDb3JlIEFuaW1h
dGlvbiBwbHVnLWlucy4KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBXS05WU3VwcG9ydHNDb21wb3Np
dGluZ0NvcmVBbmltYXRpb25QbHVnaW5zQm9vbCA9IDc0NjU2OwotCi0vLyBXaGV0aGVyIHRoZSBi
cm93c2VyIGV4cGVjdHMgYSBub24tcmV0YWluZWQgQ29yZSBBbmltYXRpb24gbGF5ZXIuCi1zdGF0
aWMgY29uc3QgdW5zaWduZWQgV0tOVkV4cGVjdHNOb25yZXRhaW5lZExheWVyID0gNzQ2NTc7Ci0K
LS8vIDc0NjU4IGFuZCA3NDY1OSBhcmUgbm8gbG9uZ2VyIGltcGxlbWVudGVkLgotCi0jZW5kaWYK
LQotc3RhdGljIE5QRXJyb3IgTlBOX0dldFZhbHVlKE5QUCBucHAsIE5QTlZhcmlhYmxlIHZhcmlh
YmxlLCB2b2lkICp2YWx1ZSkKLXsKLSAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PHVuc2lnbmVkPih2
YXJpYWJsZSkpIHsKLSAgICAgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsKLSAgICAgICAg
ICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21O
UFAobnBwKTsKLSAgICAgICAgICAgIFBsdWdpbkRlc3RydWN0aW9uUHJvdGVjdG9yIHByb3RlY3Rv
cihwbHVnaW4uZ2V0KCkpOwotCi0gICAgICAgICAgICBOUE9iamVjdCogd2luZG93TlBPYmplY3Qg
PSBwbHVnaW4tPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7Ci0gICAgICAgICAgICBpZiAoIXdpbmRv
d05QT2JqZWN0KQotICAgICAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwot
Ci0gICAgICAgICAgICAqKE5QT2JqZWN0KiopdmFsdWUgPSB3aW5kb3dOUE9iamVjdDsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1lbnRO
UE9iamVjdDogewotICAgICAgICAgICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBO
ZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotICAgICAgICAgICAgUGx1Z2luRGVzdHJ1Y3Rp
b25Qcm90ZWN0b3IgcHJvdGVjdG9yKHBsdWdpbi5nZXQoKSk7Ci0KLSAgICAgICAgICAgIE5QT2Jq
ZWN0KiBwbHVnaW5FbGVtZW50TlBPYmplY3QgPSBwbHVnaW4tPnBsdWdpbkVsZW1lbnROUE9iamVj
dCgpOwotICAgICAgICAgICAgKihOUE9iamVjdCoqKXZhbHVlID0gcGx1Z2luRWxlbWVudE5QT2Jq
ZWN0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBOUE5WcHJp
dmF0ZU1vZGVCb29sOiB7Ci0gICAgICAgICAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdp
biA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0KLSAgICAgICAgICAgICooTlBCb29s
Kil2YWx1ZSA9IHBsdWdpbi0+aXNQcml2YXRlQnJvd3NpbmdFbmFibGVkKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTlBOVm11dGVBdWRpb0Jvb2w6IHsK
LSAgICAgICAgICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVn
aW46OmZyb21OUFAobnBwKTsKLSAgICAgICAgICAgICooTlBCb29sKil2YWx1ZSA9IHBsdWdpbi0+
aXNNdXRlZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSNpZiBQTEFURk9STShD
T0NPQSkKLSAgICAgICAgY2FzZSBOUE5Wc3VwcG9ydHNDb3JlR3JhcGhpY3NCb29sOgotICAgICAg
ICAgICAgLy8gQWx3YXlzIGNsYWltIHRvIHN1cHBvcnQgdGhlIENvcmUgR3JhcGhpY3MgZHJhd2lu
ZyBtb2RlbC4KLSAgICAgICAgICAgICooTlBCb29sKil2YWx1ZSA9IHRydWU7Ci0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICBjYXNlIFdLTlZTdXBwb3J0c0NvbXBvc2l0aW5nQ29yZUFuaW1h
dGlvblBsdWdpbnNCb29sOgotICAgICAgICBjYXNlIE5QTlZzdXBwb3J0c0NvcmVBbmltYXRpb25C
b29sOiB7Ci0gICAgICAgICAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNj
YXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICooTlBC
b29sKil2YWx1ZSA9IHBsdWdpbi0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBOUE5WY29udGVudHNT
Y2FsZUZhY3RvcjogewotICAgICAgICAgICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4g
PSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotCi0gICAgICAgICAgICAqKGRvdWJsZSop
dmFsdWUgPSBwbHVnaW4tPmNvbnRlbnRzU2NhbGVGYWN0b3IoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgTlBOVnN1cHBvcnRzQ29jb2FCb29sOgotICAgICAg
ICAgICAgLy8gQWx3YXlzIGNsYWltIHRvIHN1cHBvcnQgdGhlIENvY29hIGV2ZW50IG1vZGVsLgot
ICAgICAgICAgICAgKihOUEJvb2wqKXZhbHVlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIGNhc2UgTlBOVnN1cHBvcnRzVXBkYXRlZENvY29hVGV4dElucHV0Qm9vbDogewot
ICAgICAgICAgICAgLy8gVGhlIHBsdWctaW4gaXMgYXNraW5nIHdoZXRoZXIgd2Ugc3VwcG9ydCB0
aGUgdXBkYXRlZCBDb2NvYSB0ZXh0IGlucHV0IG1vZGVsLgotICAgICAgICAgICAgLy8gSWYgd2Ug
aGF2ZW4ndCB5ZXQgZGVsaXZlcmVkIGEga2V5IGRvd24gZXZlbnQgdG8gdGhlIHBsdWctaW4sIHdl
IGNhbiBvcHQgaW50byB0aGUgdXBkYXRlZAotICAgICAgICAgICAgLy8gbW9kZWwgYW5kIHNheSB0
aGF0IHdlIHN1cHBvcnQgaXQuIE90aGVyd2lzZSwgd2UnbGwganVzdCBmYWxsIGJhY2sgYW5kIHNh
eSB0aGF0IHdlIGRvbid0IHN1cHBvcnQgaXQuCi0gICAgICAgICAgICBSZWZQdHI8TmV0c2NhcGVQ
bHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0KLSAgICAgICAg
ICAgIGJvb2wgc3VwcG9ydHNVcGRhdGVkVGV4dElucHV0ID0gIXBsdWdpbi0+aGFzSGFuZGxlZEFL
ZXlEb3duRXZlbnQoKTsKLSAgICAgICAgICAgIGlmIChzdXBwb3J0c1VwZGF0ZWRUZXh0SW5wdXQp
Ci0gICAgICAgICAgICAgICAgcGx1Z2luLT5zZXRQbHVnaW5XYW50c0xlZ2FjeUNvY29hVGV4dElu
cHV0KGZhbHNlKTsKLQotICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8TlBCb29sKj4odmFs
dWUpID0gc3VwcG9ydHNVcGRhdGVkVGV4dElucHV0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLQotICAgICAgICBjYXNlIFdLTlZDQUxheWVyUmVuZGVyU2VydmVyUG9ydDogewotICAg
ICAgICAgICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6
ZnJvbU5QUChucHApOwotCi0gICAgICAgICAgICAqKG1hY2hfcG9ydF90Kil2YWx1ZSA9IHBsdWdp
bi0+Y29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0KCkuc2VuZFJpZ2h0KCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgV0tOVkV4cGVjdHNOb25yZXRhaW5l
ZExheWVyOiB7Ci0gICAgICAgICAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5l
dHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0KLSAgICAgICAgICAgIC8vIEFza2luZyBmb3Ig
dGhpcyB3aWxsIG1ha2UgdXMgZXhwZWN0IGEgbm9uLXJldGFpbmVkIGxheWVyIGZyb20gdGhlIHBs
dWctaW4uCi0gICAgICAgICAgICBwbHVnaW4tPnNldFBsdWdpblJldHVybnNOb25yZXRhaW5lZExh
eWVyKHRydWUpOwotICAgICAgICAgICAgKihOUEJvb2wqKXZhbHVlID0gdHJ1ZTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0jZWxpZiBQTEFURk9STShYMTEpCi0gICAgICAgIGNhc2Ug
TlBOVnhEaXNwbGF5OiB7Ci0gICAgICAgICAgICBpZiAoIW5wcCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAgICAgICAgIGF1dG8mIGRpc3BsYXkgPSBQ
bGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKTsKLSAgICAgICAgICAgIGlmIChkaXNwbGF5
LnR5cGUoKSAhPSBQbGF0Zm9ybURpc3BsYXk6OlR5cGU6OlgxMSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0
PERpc3BsYXkqKj4odmFsdWUpID0gZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihkaXNwbGF5
KS5uYXRpdmUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
TlBOVlN1cHBvcnRzWEVtYmVkQm9vbDoKLSAgICAgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wq
Pih2YWx1ZSkgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKS50eXBlKCkgPT0gUGxh
dGZvcm1EaXNwbGF5OjpUeXBlOjpYMTE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzOgotICAgICAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9v
bCo+KHZhbHVlKSA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgIGNhc2UgTlBO
VlRvb2xraXQ6IHsKLSAgICAgICAgICAgLy8gR3RrIGJhc2VkIHBsdWdpbnMgbmVlZCB0byBiZSBh
c3N1cmVkIGFib3V0IHRoZSB0b29sa2l0IHZlcnNpb24uCi0gICAgICAgICAgIGNvbnN0IHVpbnQz
Ml90IGV4cGVjdGVkR3RrVG9vbEtpdFZlcnNpb24gPSAyOwotICAgICAgICAgICAqcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdCo+KHZhbHVlKSA9IGV4cGVjdGVkR3RrVG9vbEtpdFZlcnNpb247Ci0g
ICAgICAgICAgIGJyZWFrOwotICAgICAgIH0KLQotICAgICAgIC8vIFRPRE86IGltcGxlbWVudCBO
UE5WbmV0c2NhcGVXaW5kb3cgb25jZSB3ZSB3YW50IHRvIHN1cHBvcnQgd2luZG93ZWQgcGx1Z2lu
cy4KLSNlbmRpZgotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgIH0KLQotICAg
IHJldHVybiBOUEVSUl9OT19FUlJPUjsKLX0KLQotc3RhdGljIE5QRXJyb3IgTlBOX1NldFZhbHVl
KE5QUCBucHAsIE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkICp2YWx1ZSkKLXsKLSAgICBzd2l0
Y2ggKHZhcmlhYmxlKSB7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgIGNhc2UgTlBQVnBs
dWdpbkRyYXdpbmdNb2RlbDogewotICAgICAgICAgICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBw
bHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBOUERyYXdpbmdNb2RlbCBkcmF3aW5nTW9kZWwgPSBzdGF0aWNfY2FzdDxOUERyYXdp
bmdNb2RlbD4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gcGx1Z2luLT5zZXREcmF3aW5nTW9kZWwoZHJhd2luZ01vZGVsKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGNhc2UgTlBQVnBsdWdpbkV2ZW50TW9kZWw6IHsKLSAgICAgICAgICAgIFJl
ZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBw
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTlBFdmVudE1vZGVsIGV2ZW50TW9kZWwgPSBz
dGF0aWNfY2FzdDxOUEV2ZW50TW9kZWw+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih2YWx1
ZSkpOwotICAgICAgICAgICAgcmV0dXJuIHBsdWdpbi0+c2V0RXZlbnRNb2RlbChldmVudE1vZGVs
KTsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgY2FzZSBOUFBWcGx1Z2luV2luZG93Qm9v
bDogewotICAgICAgICAgICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2Fw
ZVBsdWdpbjo6ZnJvbU5QUChucHApOwotICAgICAgICAgICAgcGx1Z2luLT5zZXRJc1dpbmRvd2Vk
KHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgfQot
Ci0gICAgICAgIGNhc2UgTlBQVnBsdWdpblRyYW5zcGFyZW50Qm9vbDogewotICAgICAgICAgICAg
UmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChu
cHApOwotICAgICAgICAgICAgcGx1Z2luLT5zZXRJc1RyYW5zcGFyZW50KHZhbHVlKTsKLSAgICAg
ICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2Ug
TlBQVnBsdWdpbklzUGxheWluZ0F1ZGlvOiB7Ci0gICAgICAgICAgICBSZWZQdHI8TmV0c2NhcGVQ
bHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0gICAgICAgICAg
ICBwbHVnaW4tPnNldElzUGxheWluZ0F1ZGlvKHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBO
UEVSUl9OT19FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJS
T1I7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBOUE5fSW52YWxpZGF0ZVJlY3QoTlBQIG5wcCwg
TlBSZWN0KiBpbnZhbGlkUmVjdCkKLXsKLSNpZiBQTFVHSU5fQVJDSElURUNUVVJFKFVOSVgpCi0g
ICAgLy8gTlNQbHVnaW5XcmFwcGVyLCBhIHBsdWdpbiB3cmFwcGVyIGJpbmFyeSB0aGF0IGFsbG93
cyBydW5uaW5nIDMyLWJpdCBwbHVnaW5zCi0gICAgLy8gb24gNjQtYml0IGFyY2hpdGVjdHVyZXMg
dHlwaWNhbGx5IHVzZWQgaW4gWDExLCB3aWxsIHNvbWV0aW1lcyBnaXZlIHVzIGEgbnVsbCBOUFAg
aGVyZS4KLSAgICBpZiAoIW5wcCkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0gICAgUmVmUHRy
PE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwot
ICAgIHBsdWdpbi0+aW52YWxpZGF0ZShpbnZhbGlkUmVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIE5Q
Tl9JbnZhbGlkYXRlUmVnaW9uKE5QUCBucHAsIE5QUmVnaW9uKQotewotICAgIC8vIEZJWE1FOiBX
ZSBjb3VsZCBhdCBsZWFzdCBmaWd1cmUgb3V0IHRoZSBib3VuZGluZyByZWN0YW5nbGUgb2YgdGhl
IGludmFsaWQgcmVnaW9uLgotICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0
c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsKLSAgICBwbHVnaW4tPmludmFsaWRhdGUoMCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIE5QTl9Gb3JjZVJlZHJhdyhOUFApCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotc3RhdGljIE5QSWRlbnRpZmllciBOUE5fR2V0U3RyaW5nSWRlbnRpZmllcihj
b25zdCBOUFVURjggKm5hbWUpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PE5QSWRlbnRpZmll
cj4oSWRlbnRpZmllclJlcDo6Z2V0KG5hbWUpKTsKLX0KLSAgICAKLXN0YXRpYyB2b2lkIE5QTl9H
ZXRTdHJpbmdJZGVudGlmaWVycyhjb25zdCBOUFVURjggKipuYW1lcywgaW50MzJfdCBuYW1lQ291
bnQsIE5QSWRlbnRpZmllciAqaWRlbnRpZmllcnMpCi17Ci0gICAgQVNTRVJUKG5hbWVzKTsKLSAg
ICBBU1NFUlQoaWRlbnRpZmllcnMpOwotCi0gICAgaWYgKCFuYW1lcyB8fCAhaWRlbnRpZmllcnMp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IG5hbWVDb3Vu
dDsgKytpKQotICAgICAgICBpZGVudGlmaWVyc1tpXSA9IE5QTl9HZXRTdHJpbmdJZGVudGlmaWVy
KG5hbWVzW2ldKTsKLX0KLQotc3RhdGljIE5QSWRlbnRpZmllciBOUE5fR2V0SW50SWRlbnRpZmll
cihpbnQzMl90IGludGlkKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXI+
KElkZW50aWZpZXJSZXA6OmdldChpbnRpZCkpOwotfQotCi1zdGF0aWMgYm9vbCBOUE5fSWRlbnRp
ZmllcklzU3RyaW5nKE5QSWRlbnRpZmllciBpZGVudGlmaWVyKQotewotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4oaWRlbnRpZmllciktPmlzU3RyaW5nKCk7Ci19Ci0KLXN0
YXRpYyBOUFVURjggKk5QTl9VVEY4RnJvbUlkZW50aWZpZXIoTlBJZGVudGlmaWVyIGlkZW50aWZp
ZXIpCi17Ci0gICAgY29uc3QgY2hhciogc3RyaW5nID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJl
cCo+KGlkZW50aWZpZXIpLT5zdHJpbmcoKTsKLSAgICBpZiAoIXN0cmluZykKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICB1aW50MzJfdCBzdHJpbmdMZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsKLSAg
ICBjaGFyKiB1dGY4U3RyaW5nID0gbnBuTWVtTmV3QXJyYXk8Y2hhcj4oc3RyaW5nTGVuZ3RoICsg
MSk7Ci0gICAgbWVtY3B5KHV0ZjhTdHJpbmcsIHN0cmluZywgc3RyaW5nTGVuZ3RoKTsKLSAgICB1
dGY4U3RyaW5nW3N0cmluZ0xlbmd0aF0gPSAnXDAnOwotICAgIAotICAgIHJldHVybiB1dGY4U3Ry
aW5nOwotfQotCi1zdGF0aWMgaW50MzJfdCBOUE5fSW50RnJvbUlkZW50aWZpZXIoTlBJZGVudGlm
aWVyIGlkZW50aWZpZXIpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAq
PihpZGVudGlmaWVyKS0+bnVtYmVyKCk7Ci19Ci0KLXN0YXRpYyBOUE9iamVjdCogTlBOX0NyZWF0
ZU9iamVjdChOUFAgbnBwLCBOUENsYXNzICpucENsYXNzKQotewotICAgIHJldHVybiBjcmVhdGVO
UE9iamVjdChucHAsIG5wQ2xhc3MpOwotfQotCi1zdGF0aWMgTlBPYmplY3QgKk5QTl9SZXRhaW5P
YmplY3QoTlBPYmplY3QgKm5wT2JqZWN0KQotewotICAgIHJldGFpbk5QT2JqZWN0KG5wT2JqZWN0
KTsKLSAgICByZXR1cm4gbnBPYmplY3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIE5QTl9SZWxlYXNlT2Jq
ZWN0KE5QT2JqZWN0ICpucE9iamVjdCkKLXsKLSAgICByZWxlYXNlTlBPYmplY3QobnBPYmplY3Qp
OwotfQotCi1zdGF0aWMgYm9vbCBOUE5fSW52b2tlKE5QUCBucHAsIE5QT2JqZWN0ICpucE9iamVj
dCwgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUsIGNvbnN0IE5QVmFyaWFudCogYXJndW1lbnRzLCB1
aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBSZWZQdHI8
TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0g
ICAgUGx1Z2luRGVzdHJ1Y3Rpb25Qcm90ZWN0b3IgcHJvdGVjdG9yKHBsdWdpbi5nZXQoKSk7Ci0K
LSAgICBpZiAobnBPYmplY3QtPl9jbGFzcy0+aW52b2tlKQotICAgICAgICByZXR1cm4gbnBPYmpl
Y3QtPl9jbGFzcy0+aW52b2tlKG5wT2JqZWN0LCBtZXRob2ROYW1lLCBhcmd1bWVudHMsIGFyZ3Vt
ZW50Q291bnQsIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29s
IE5QTl9JbnZva2VEZWZhdWx0KE5QUCBucHAsIE5QT2JqZWN0ICpucE9iamVjdCwgY29uc3QgTlBW
YXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVz
dWx0KQotewotICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVn
aW46OmZyb21OUFAobnBwKTsKLSAgICBQbHVnaW5EZXN0cnVjdGlvblByb3RlY3RvciBwcm90ZWN0
b3IocGx1Z2luLmdldCgpKTsKLQotICAgIGlmIChucE9iamVjdC0+X2NsYXNzLT5pbnZva2VEZWZh
dWx0KQotICAgICAgICByZXR1cm4gbnBPYmplY3QtPl9jbGFzcy0+aW52b2tlRGVmYXVsdChucE9i
amVjdCwgYXJndW1lbnRzLCBhcmd1bWVudENvdW50LCByZXN1bHQpOwotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1zdGF0aWMgYm9vbCBOUE5fRXZhbHVhdGUoTlBQIG5wcCwgTlBPYmplY3QgKm5w
T2JqZWN0LCBOUFN0cmluZyAqc2NyaXB0LCBOUFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBSZWZQ
dHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7
Ci0gICAgUGx1Z2luRGVzdHJ1Y3Rpb25Qcm90ZWN0b3IgcHJvdGVjdG9yKHBsdWdpbi5nZXQoKSk7
Ci0gICAgCi0gICAgU3RyaW5nIHNjcmlwdFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0
aW4xRmFsbGJhY2soc2NyaXB0LT5VVEY4Q2hhcmFjdGVycywgc2NyaXB0LT5VVEY4TGVuZ3RoKTsK
LSAgICAKLSAgICByZXR1cm4gcGx1Z2luLT5ldmFsdWF0ZShucE9iamVjdCwgc2NyaXB0U3RyaW5n
LCByZXN1bHQpOwotfQotCi1zdGF0aWMgYm9vbCBOUE5fR2V0UHJvcGVydHkoTlBQIG5wcCwgTlBP
YmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBOUFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1
Z2luOjpmcm9tTlBQKG5wcCk7Ci0gICAgUGx1Z2luRGVzdHJ1Y3Rpb25Qcm90ZWN0b3IgcHJvdGVj
dG9yKHBsdWdpbi5nZXQoKSk7Ci0gICAgCi0gICAgaWYgKG5wT2JqZWN0LT5fY2xhc3MtPmdldFBy
b3BlcnR5KQotICAgICAgICByZXR1cm4gbnBPYmplY3QtPl9jbGFzcy0+Z2V0UHJvcGVydHkobnBP
YmplY3QsIHByb3BlcnR5TmFtZSwgcmVzdWx0KTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXN0YXRpYyBib29sIE5QTl9TZXRQcm9wZXJ0eShOUFAgbnBwLCBOUE9iamVjdCogbnBPYmpl
Y3QsIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IE5QVmFyaWFudCogdmFsdWUpCi17
Ci0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJv
bU5QUChucHApOwotICAgIFBsdWdpbkRlc3RydWN0aW9uUHJvdGVjdG9yIHByb3RlY3RvcihwbHVn
aW4uZ2V0KCkpOwotICAgIAotICAgIGlmIChucE9iamVjdC0+X2NsYXNzLT5zZXRQcm9wZXJ0eSkK
LSAgICAgICAgcmV0dXJuIG5wT2JqZWN0LT5fY2xhc3MtPnNldFByb3BlcnR5KG5wT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHZhbHVlKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJv
b2wgTlBOX1JlbW92ZVByb3BlcnR5KE5QUCBucHAsIE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZSkKLXsKLSAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdp
biA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0gICAgUGx1Z2luRGVzdHJ1Y3Rpb25Q
cm90ZWN0b3IgcHJvdGVjdG9yKHBsdWdpbi5nZXQoKSk7Ci0gICAgCi0gICAgaWYgKG5wT2JqZWN0
LT5fY2xhc3MtPnJlbW92ZVByb3BlcnR5KQotICAgICAgICByZXR1cm4gbnBPYmplY3QtPl9jbGFz
cy0+cmVtb3ZlUHJvcGVydHkobnBPYmplY3QsIHByb3BlcnR5TmFtZSk7Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIE5QTl9IYXNQcm9wZXJ0eShOUFAgbnBwLCBOUE9iamVj
dCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgUmVmUHRyPE5l
dHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotICAg
IFBsdWdpbkRlc3RydWN0aW9uUHJvdGVjdG9yIHByb3RlY3RvcihwbHVnaW4uZ2V0KCkpOwotICAg
IAotICAgIGlmIChucE9iamVjdC0+X2NsYXNzLT5oYXNQcm9wZXJ0eSkKLSAgICAgICAgcmV0dXJu
IG5wT2JqZWN0LT5fY2xhc3MtPmhhc1Byb3BlcnR5KG5wT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBOUE5fSGFzTWV0aG9kKE5QUCBu
cHAsIE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUpCi17Ci0gICAg
UmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChu
cHApOwotICAgIFBsdWdpbkRlc3RydWN0aW9uUHJvdGVjdG9yIHByb3RlY3RvcihwbHVnaW4uZ2V0
KCkpOwotICAgIAotICAgIGlmIChucE9iamVjdC0+X2NsYXNzLT5oYXNNZXRob2QpCi0gICAgICAg
IHJldHVybiBucE9iamVjdC0+X2NsYXNzLT5oYXNNZXRob2QobnBPYmplY3QsIG1ldGhvZE5hbWUp
OwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBOUE5fUmVsZWFzZVZhcmlh
bnRWYWx1ZShOUFZhcmlhbnQqIHZhcmlhbnQpCi17Ci0gICAgcmVsZWFzZU5QVmFyaWFudFZhbHVl
KHZhcmlhbnQpOwotfQotCi1zdGF0aWMgdm9pZCBOUE5fU2V0RXhjZXB0aW9uKE5QT2JqZWN0Kiwg
Y29uc3QgTlBVVEY4KiBtZXNzYWdlKQotewotICAgIE5ldHNjYXBlUGx1Z2luOjpzZXRFeGNlcHRp
b24obWVzc2FnZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRl
KE5QUCBucHAsIE5QQm9vbCBlbmFibGVkKQotewotICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4g
cGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsKLSAgICBwbHVnaW4tPnB1c2hQ
b3B1cHNFbmFibGVkU3RhdGUoZW5hYmxlZCk7Ci19Ci0gICAgCi1zdGF0aWMgdm9pZCBOUE5fUG9w
UG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBucHApCi17Ci0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2lu
PiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotICAgIHBsdWdpbi0+cG9w
UG9wdXBzRW5hYmxlZFN0YXRlKCk7Ci19Ci0gICAgCi1zdGF0aWMgYm9vbCBOUE5fRW51bWVyYXRl
KE5QUCBucHAsIE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyKiogaWRlbnRpZmllcnMs
IHVpbnQzMl90KiBpZGVudGlmaWVyQ291bnQpCi17Ci0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2lu
PiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotICAgIFBsdWdpbkRlc3Ry
dWN0aW9uUHJvdGVjdG9yIHByb3RlY3RvcihwbHVnaW4uZ2V0KCkpOwotICAgIAotICAgIGlmIChO
UF9DTEFTU19TVFJVQ1RfVkVSU0lPTl9IQVNfRU5VTShucE9iamVjdC0+X2NsYXNzKSAmJiBucE9i
amVjdC0+X2NsYXNzLT5lbnVtZXJhdGUpCi0gICAgICAgIHJldHVybiBucE9iamVjdC0+X2NsYXNz
LT5lbnVtZXJhdGUobnBPYmplY3QsIGlkZW50aWZpZXJzLCBpZGVudGlmaWVyQ291bnQpOwotCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBOUE5fUGx1Z2luVGhyZWFkQXN5bmND
YWxsKE5QUCBucHAsIHZvaWQgKCpmdW5jdGlvbikodm9pZCopLCB2b2lkKiB1c2VyRGF0YSkKLXsK
LSAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpmcm9t
TlBQKG5wcCk7Ci0KLSAgICBwbHVnaW4tPnBsdWdpblRocmVhZEFzeW5jQ2FsbChmdW5jdGlvbiwg
dXNlckRhdGEpOwotfQotCi1zdGF0aWMgYm9vbCBOUE5fQ29uc3RydWN0KE5QUCBucHAsIE5QT2Jq
ZWN0KiBucE9iamVjdCwgY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90IGFyZ3Vt
ZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KQotewotICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdp
bj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsKLSAgICBQbHVnaW5EZXN0
cnVjdGlvblByb3RlY3RvciBwcm90ZWN0b3IocGx1Z2luLmdldCgpKTsKLSAgICAKLSAgICBpZiAo
TlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT05fSEFTX0NUT1IobnBPYmplY3QtPl9jbGFzcykgJiYgbnBP
YmplY3QtPl9jbGFzcy0+Y29uc3RydWN0KQotICAgICAgICByZXR1cm4gbnBPYmplY3QtPl9jbGFz
cy0+Y29uc3RydWN0KG5wT2JqZWN0LCBhcmd1bWVudHMsIGFyZ3VtZW50Q291bnQsIHJlc3VsdCk7
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBOUEVycm9yIGNvcHlDU3RyaW5nKGNv
bnN0IENTdHJpbmcmIHN0cmluZywgY2hhcioqIHZhbHVlLCB1aW50MzJfdCogbGVuKQotewotICAg
IEFTU0VSVCghc3RyaW5nLmlzTnVsbCgpKTsKLSAgICBBU1NFUlQodmFsdWUpOwotICAgIEFTU0VS
VChsZW4pOwotCi0gICAgKnZhbHVlID0gbnBuTWVtTmV3QXJyYXk8Y2hhcj4oc3RyaW5nLmxlbmd0
aCgpKTsKLSAgICBpZiAoISp2YWx1ZSkKLSAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJS
T1I7Ci0KLSAgICBtZW1jcHkoKnZhbHVlLCBzdHJpbmcuZGF0YSgpLCBzdHJpbmcubGVuZ3RoKCkp
OwotICAgICpsZW4gPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgcmV0dXJuIE5QRVJSX05PX0VSUk9S
OwotfQotCi1zdGF0aWMgTlBFcnJvciBOUE5fR2V0VmFsdWVGb3JVUkwoTlBQIG5wcCwgTlBOVVJM
VmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIqIHVybCwgY2hhcioqIHZhbHVlLCB1aW50MzJf
dCogbGVuKQotewotICAgIGlmICghdmFsdWUgfHwgIWxlbikKLSAgICAgICAgcmV0dXJuIE5QRVJS
X0dFTkVSSUNfRVJST1I7Ci0gICAgCi0gICAgc3dpdGNoICh2YXJpYWJsZSkgewotICAgICAgICBj
YXNlIE5QTlVSTFZDb29raWU6IHsKLSAgICAgICAgICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4g
cGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsKLSAgICAgICAgICAgIFBsdWdp
bkRlc3RydWN0aW9uUHJvdGVjdG9yIHByb3RlY3RvcihwbHVnaW4uZ2V0KCkpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBTdHJpbmcgY29va2llcyA9IHBsdWdpbi0+Y29va2llc0ZvclVSTCht
YWtlVVJMU3RyaW5nKHVybCkpOwotICAgICAgICAgICAgaWYgKGNvb2tpZXMuaXNOdWxsKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAgICAgICAgICAg
IHJldHVybiBjb3B5Q1N0cmluZyhjb29raWVzLnV0ZjgoKSwgdmFsdWUsIGxlbik7Ci0gICAgICAg
IH0KLQotICAgICAgICBjYXNlIE5QTlVSTFZQcm94eTogewotICAgICAgICAgICAgUmVmUHRyPE5l
dHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotICAg
ICAgICAgICAgUGx1Z2luRGVzdHJ1Y3Rpb25Qcm90ZWN0b3IgcHJvdGVjdG9yKHBsdWdpbi5nZXQo
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cmluZyBwcm94aWVzID0gcGx1Z2luLT5w
cm94aWVzRm9yVVJMKG1ha2VVUkxTdHJpbmcodXJsKSk7Ci0gICAgICAgICAgICBpZiAocHJveGll
cy5pc051bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsK
LQotICAgICAgICAgICAgcmV0dXJuIGNvcHlDU3RyaW5nKHByb3hpZXMudXRmOCgpLCB2YWx1ZSwg
bGVuKTsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgIH0K
LX0KLQotc3RhdGljIE5QRXJyb3IgTlBOX1NldFZhbHVlRm9yVVJMKE5QUCBucHAsIE5QTlVSTFZh
cmlhYmxlIHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHZhbHVlLCB1aW50
MzJfdCBsZW4pCi17Ci0gICAgc3dpdGNoICh2YXJpYWJsZSkgewotICAgICAgICBjYXNlIE5QTlVS
TFZDb29raWU6IHsKLSAgICAgICAgICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0g
TmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsKLSAgICAgICAgICAgIFBsdWdpbkRlc3RydWN0
aW9uUHJvdGVjdG9yIHByb3RlY3RvcihwbHVnaW4uZ2V0KCkpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBwbHVnaW4tPnNldENvb2tpZXNGb3JVUkwobWFrZVVSTFN0cmluZyh1cmwpLCBTdHJp
bmcodmFsdWUsIGxlbikpOwotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAg
ICAgICB9Ci0KLSAgICAgICAgY2FzZSBOUE5VUkxWUHJveHk6Ci0gICAgICAgICAgICAvLyBDYW4n
dCBzZXQgdGhlIHByb3h5IGZvciBhIFVSTC4KLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5F
UklDX0VSUk9SOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgfQotfQot
Ci1zdGF0aWMgYm9vbCBpbml0aWFsaXplUHJvdGVjdGlvblNwYWNlKGNvbnN0IGNoYXIqIHByb3Rv
Y29sLCBjb25zdCBjaGFyKiBob3N0LCBpbnQgcG9ydCwgY29uc3QgY2hhciogc2NoZW1lLCBjb25z
dCBjaGFyKiByZWFsbSwgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpCi17Ci0gICAg
UHJvdGVjdGlvblNwYWNlU2VydmVyVHlwZSBzZXJ2ZXJUeXBlOwotICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm90b2NvbCwgImh0dHAiKSkKLSAgICAgICAgc2VydmVyVHlw
ZSA9IFByb3RlY3Rpb25TcGFjZVNlcnZlckhUVFA7Ci0gICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UocHJvdG9jb2wsICJodHRwcyIpKQotICAgICAgICBzZXJ2ZXJUeXBl
ID0gUHJvdGVjdGlvblNwYWNlU2VydmVySFRUUFM7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIFdl
IG9ubHkgY2FyZSBhYm91dCBodHRwIGFuZCBodHRwcy4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lIGF1dGhlbnRp
Y2F0aW9uU2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVEZWZhdWx0
OwotICAgIGlmIChzZXJ2ZXJUeXBlID09IFByb3RlY3Rpb25TcGFjZVNlcnZlckhUVFApIHsKLSAg
ICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHNjaGVtZSwgImJhc2ljIikp
Ci0gICAgICAgICAgICBhdXRoZW50aWNhdGlvblNjaGVtZSA9IFByb3RlY3Rpb25TcGFjZUF1dGhl
bnRpY2F0aW9uU2NoZW1lSFRUUEJhc2ljOwotICAgICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShzY2hlbWUsICJkaWdlc3QiKSkKLSAgICAgICAgICAgIGF1dGhlbnRp
Y2F0aW9uU2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVIVFRQRGln
ZXN0OwotICAgIH0KLQotICAgIHByb3RlY3Rpb25TcGFjZSA9IFByb3RlY3Rpb25TcGFjZShob3N0
LCBwb3J0LCBzZXJ2ZXJUeXBlLCByZWFsbSwgYXV0aGVudGljYXRpb25TY2hlbWUpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1zdGF0aWMgTlBFcnJvciBOUE5fR2V0QXV0aGVudGljYXRpb25JbmZv
KE5QUCBucHAsIGNvbnN0IGNoYXIqIHByb3RvY29sLCBjb25zdCBjaGFyKiBob3N0LCBpbnQzMl90
IHBvcnQsIGNvbnN0IGNoYXIqIHNjaGVtZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlYWxtLCBjaGFyKiogdXNlcm5hbWUsIHVpbnQzMl90
KiB1c2VybmFtZUxlbmd0aCwgY2hhcioqIHBhc3N3b3JkLCB1aW50MzJfdCogcGFzc3dvcmRMZW5n
dGgpCi17Ci0gICAgaWYgKCFwcm90b2NvbCB8fCAhaG9zdCB8fCAhc2NoZW1lIHx8ICFyZWFsbSB8
fCAhdXNlcm5hbWUgfHwgIXVzZXJuYW1lTGVuZ3RoIHx8ICFwYXNzd29yZCB8fCAhcGFzc3dvcmRM
ZW5ndGgpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAgUHJvdGVj
dGlvblNwYWNlIHByb3RlY3Rpb25TcGFjZTsKLSAgICBpZiAoIWluaXRpYWxpemVQcm90ZWN0aW9u
U3BhY2UocHJvdG9jb2wsIGhvc3QsIHBvcnQsIHNjaGVtZSwgcmVhbG0sIHByb3RlY3Rpb25TcGFj
ZSkpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAgUmVmUHRyPE5l
dHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotICAg
IFN0cmluZyB1c2VybmFtZVN0cmluZzsKLSAgICBTdHJpbmcgcGFzc3dvcmRTdHJpbmc7Ci0gICAg
aWYgKCFwbHVnaW4tPmdldEF1dGhlbnRpY2F0aW9uSW5mbyhwcm90ZWN0aW9uU3BhY2UsIHVzZXJu
YW1lU3RyaW5nLCBwYXNzd29yZFN0cmluZykpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklD
X0VSUk9SOwotCi0gICAgTlBFcnJvciByZXN1bHQgPSBjb3B5Q1N0cmluZyh1c2VybmFtZVN0cmlu
Zy51dGY4KCksIHVzZXJuYW1lLCB1c2VybmFtZUxlbmd0aCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBO
UEVSUl9OT19FUlJPUikKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIHJlc3VsdCA9IGNv
cHlDU3RyaW5nKHBhc3N3b3JkU3RyaW5nLnV0ZjgoKSwgcGFzc3dvcmQsIHBhc3N3b3JkTGVuZ3Ro
KTsKLSAgICBpZiAocmVzdWx0ICE9IE5QRVJSX05PX0VSUk9SKSB7Ci0gICAgICAgIG5wbk1lbUZy
ZWUoKnVzZXJuYW1lKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICByZXR1
cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdCBOUE5fU2NoZWR1bGVUaW1l
cihOUFAgbnBwLCB1aW50MzJfdCBpbnRlcnZhbCwgTlBCb29sIHJlcGVhdCwgdm9pZCAoKnRpbWVy
RnVuYykoTlBQIG5wcCwgdWludDMyX3QgdGltZXJJRCkpCi17Ci0gICAgUmVmUHRyPE5ldHNjYXBl
UGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotCi0gICAgcmV0
dXJuIHBsdWdpbi0+c2NoZWR1bGVUaW1lcihpbnRlcnZhbCwgcmVwZWF0LCB0aW1lckZ1bmMpOwot
fQotCi1zdGF0aWMgdm9pZCBOUE5fVW5zY2hlZHVsZVRpbWVyKE5QUCBucHAsIHVpbnQzMl90IHRp
bWVySUQpCi17Ci0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBs
dWdpbjo6ZnJvbU5QUChucHApOwotCi0gICAgcGx1Z2luLT51bnNjaGVkdWxlVGltZXIodGltZXJJ
RCk7Ci19Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLXN0YXRpYyBOUEVycm9yIE5QTl9Qb3BVcENv
bnRleHRNZW51KE5QUCBucHAsIE5QTWVudSogbWVudSkKLXsKLSAgICBSZWZQdHI8TmV0c2NhcGVQ
bHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKG5wcCk7Ci0KLSAgICByZXR1
cm4gcGx1Z2luLT5wb3BVcENvbnRleHRNZW51KG1lbnUpOwotfQotCi1zdGF0aWMgTlBCb29sIE5Q
Tl9Db252ZXJ0UG9pbnQoTlBQIG5wcCwgZG91YmxlIHNvdXJjZVgsIGRvdWJsZSBzb3VyY2VZLCBO
UENvb3JkaW5hdGVTcGFjZSBzb3VyY2VTcGFjZSwgZG91YmxlKiBkZXN0WCwgZG91YmxlKiBkZXN0
WSwgTlBDb29yZGluYXRlU3BhY2UgZGVzdFNwYWNlKQotewotICAgIFJlZlB0cjxOZXRzY2FwZVBs
dWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZyb21OUFAobnBwKTsKLQotICAgIGRvdWJs
ZSBkZXN0aW5hdGlvblg7Ci0gICAgZG91YmxlIGRlc3RpbmF0aW9uWTsKLQotICAgIGJvb2wgcmV0
dXJuVmFsdWUgPSBwbHVnaW4tPmNvbnZlcnRQb2ludChzb3VyY2VYLCBzb3VyY2VZLCBzb3VyY2VT
cGFjZSwgZGVzdGluYXRpb25YLCBkZXN0aW5hdGlvblksIGRlc3RTcGFjZSk7Ci0KLSAgICBpZiAo
ZGVzdFgpCi0gICAgICAgICpkZXN0WCA9IGRlc3RpbmF0aW9uWDsKLSAgICBpZiAoZGVzdFkpCi0g
ICAgICAgICpkZXN0WSA9IGRlc3RpbmF0aW9uWTsKLQotICAgIHJldHVybiByZXR1cm5WYWx1ZTsK
LX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBOUE5fVVJMUmVkaXJlY3RSZXNwb25zZShOUFAgbnBw
LCB2b2lkKiBub3RpZnlEYXRhLCBOUEJvb2wgYWxsb3cpCi17Ci0gICAgUmVmUHRyPE5ldHNjYXBl
UGx1Z2luPiBwbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6ZnJvbU5QUChucHApOwotCi0gICAgcGx1
Z2luLT51cmxSZWRpcmVjdFJlc3BvbnNlKG5vdGlmeURhdGEsIGFsbG93KTsKLX0KLQotc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZUJyb3dzZXJGdW5jcyhOUE5ldHNjYXBlRnVuY3MgJm5ldHNjYXBlRnVu
Y3MpCi17Ci0gICAgbmV0c2NhcGVGdW5jcy5zaXplID0gc2l6ZW9mKE5QTmV0c2NhcGVGdW5jcyk7
Ci0gICAgbmV0c2NhcGVGdW5jcy52ZXJzaW9uID0gKE5QX1ZFUlNJT05fTUFKT1IgPDwgOCkgfCBO
UF9WRVJTSU9OX01JTk9SOwotICAgIAotICAgIG5ldHNjYXBlRnVuY3MuZ2V0dXJsID0gTlBOX0dl
dFVSTDsKLSAgICBuZXRzY2FwZUZ1bmNzLnBvc3R1cmwgPSBOUE5fUG9zdFVSTDsKLSAgICBuZXRz
Y2FwZUZ1bmNzLnJlcXVlc3RyZWFkID0gTlBOX1JlcXVlc3RSZWFkOwotICAgIG5ldHNjYXBlRnVu
Y3MubmV3c3RyZWFtID0gTlBOX05ld1N0cmVhbTsKLSAgICBuZXRzY2FwZUZ1bmNzLndyaXRlID0g
TlBOX1dyaXRlOwotICAgIG5ldHNjYXBlRnVuY3MuZGVzdHJveXN0cmVhbSA9IE5QTl9EZXN0cm95
U3RyZWFtOwotICAgIG5ldHNjYXBlRnVuY3Muc3RhdHVzID0gTlBOX1N0YXR1czsKLSAgICBuZXRz
Y2FwZUZ1bmNzLnVhZ2VudCA9IE5QTl9Vc2VyQWdlbnQ7Ci0gICAgbmV0c2NhcGVGdW5jcy5tZW1h
bGxvYyA9IE5QTl9NZW1BbGxvYzsKLSAgICBuZXRzY2FwZUZ1bmNzLm1lbWZyZWUgPSBOUE5fTWVt
RnJlZTsKLSAgICBuZXRzY2FwZUZ1bmNzLm1lbWZsdXNoID0gTlBOX01lbUZsdXNoOwotICAgIG5l
dHNjYXBlRnVuY3MucmVsb2FkcGx1Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5zOwotICAgIG5ldHNj
YXBlRnVuY3MuZ2V0SmF2YUVudiA9IE5QTl9HZXRKYXZhRW52OwotICAgIG5ldHNjYXBlRnVuY3Mu
Z2V0SmF2YVBlZXIgPSBOUE5fR2V0SmF2YVBlZXI7Ci0gICAgbmV0c2NhcGVGdW5jcy5nZXR1cmxu
b3RpZnkgPSBOUE5fR2V0VVJMTm90aWZ5OwotICAgIG5ldHNjYXBlRnVuY3MucG9zdHVybG5vdGlm
eSA9IE5QTl9Qb3N0VVJMTm90aWZ5OwotICAgIG5ldHNjYXBlRnVuY3MuZ2V0dmFsdWUgPSBOUE5f
R2V0VmFsdWU7Ci0gICAgbmV0c2NhcGVGdW5jcy5zZXR2YWx1ZSA9IE5QTl9TZXRWYWx1ZTsKLSAg
ICBuZXRzY2FwZUZ1bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0ludmFsaWRhdGVSZWN0OwotICAg
IG5ldHNjYXBlRnVuY3MuaW52YWxpZGF0ZXJlZ2lvbiA9IE5QTl9JbnZhbGlkYXRlUmVnaW9uOwot
ICAgIG5ldHNjYXBlRnVuY3MuZm9yY2VyZWRyYXcgPSBOUE5fRm9yY2VSZWRyYXc7Ci0gICAgCi0g
ICAgbmV0c2NhcGVGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVyID0gTlBOX0dldFN0cmluZ0lkZW50
aWZpZXI7Ci0gICAgbmV0c2NhcGVGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVycyA9IE5QTl9HZXRT
dHJpbmdJZGVudGlmaWVyczsKLSAgICBuZXRzY2FwZUZ1bmNzLmdldGludGlkZW50aWZpZXIgPSBO
UE5fR2V0SW50SWRlbnRpZmllcjsKLSAgICBuZXRzY2FwZUZ1bmNzLmlkZW50aWZpZXJpc3N0cmlu
ZyA9IE5QTl9JZGVudGlmaWVySXNTdHJpbmc7Ci0gICAgbmV0c2NhcGVGdW5jcy51dGY4ZnJvbWlk
ZW50aWZpZXIgPSBOUE5fVVRGOEZyb21JZGVudGlmaWVyOwotICAgIG5ldHNjYXBlRnVuY3MuaW50
ZnJvbWlkZW50aWZpZXIgPSBOUE5fSW50RnJvbUlkZW50aWZpZXI7Ci0gICAgbmV0c2NhcGVGdW5j
cy5jcmVhdGVvYmplY3QgPSBOUE5fQ3JlYXRlT2JqZWN0OwotICAgIG5ldHNjYXBlRnVuY3MucmV0
YWlub2JqZWN0ID0gTlBOX1JldGFpbk9iamVjdDsKLSAgICBuZXRzY2FwZUZ1bmNzLnJlbGVhc2Vv
YmplY3QgPSBOUE5fUmVsZWFzZU9iamVjdDsKLSAgICBuZXRzY2FwZUZ1bmNzLmludm9rZSA9IE5Q
Tl9JbnZva2U7Ci0gICAgbmV0c2NhcGVGdW5jcy5pbnZva2VEZWZhdWx0ID0gTlBOX0ludm9rZURl
ZmF1bHQ7Ci0gICAgbmV0c2NhcGVGdW5jcy5ldmFsdWF0ZSA9IE5QTl9FdmFsdWF0ZTsKLSAgICBu
ZXRzY2FwZUZ1bmNzLmdldHByb3BlcnR5ID0gTlBOX0dldFByb3BlcnR5OwotICAgIG5ldHNjYXBl
RnVuY3Muc2V0cHJvcGVydHkgPSBOUE5fU2V0UHJvcGVydHk7Ci0gICAgbmV0c2NhcGVGdW5jcy5y
ZW1vdmVwcm9wZXJ0eSA9IE5QTl9SZW1vdmVQcm9wZXJ0eTsKLSAgICBuZXRzY2FwZUZ1bmNzLmhh
c3Byb3BlcnR5ID0gTlBOX0hhc1Byb3BlcnR5OwotICAgIG5ldHNjYXBlRnVuY3MuaGFzbWV0aG9k
ID0gTlBOX0hhc01ldGhvZDsKLSAgICBuZXRzY2FwZUZ1bmNzLnJlbGVhc2V2YXJpYW50dmFsdWUg
PSBOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZTsKLSAgICBuZXRzY2FwZUZ1bmNzLnNldGV4Y2VwdGlv
biA9IE5QTl9TZXRFeGNlcHRpb247Ci0gICAgbmV0c2NhcGVGdW5jcy5wdXNocG9wdXBzZW5hYmxl
ZHN0YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGU7Ci0gICAgbmV0c2NhcGVGdW5jcy5w
b3Bwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlOwotICAgIG5l
dHNjYXBlRnVuY3MuZW51bWVyYXRlID0gTlBOX0VudW1lcmF0ZTsKLSAgICBuZXRzY2FwZUZ1bmNz
LnBsdWdpbnRocmVhZGFzeW5jY2FsbCA9IE5QTl9QbHVnaW5UaHJlYWRBc3luY0NhbGw7Ci0gICAg
bmV0c2NhcGVGdW5jcy5jb25zdHJ1Y3QgPSBOUE5fQ29uc3RydWN0OwotICAgIG5ldHNjYXBlRnVu
Y3MuZ2V0dmFsdWVmb3J1cmwgPSBOUE5fR2V0VmFsdWVGb3JVUkw7Ci0gICAgbmV0c2NhcGVGdW5j
cy5zZXR2YWx1ZWZvcnVybCA9IE5QTl9TZXRWYWx1ZUZvclVSTDsKLSAgICBuZXRzY2FwZUZ1bmNz
LmdldGF1dGhlbnRpY2F0aW9uaW5mbyA9IE5QTl9HZXRBdXRoZW50aWNhdGlvbkluZm87Ci0gICAg
bmV0c2NhcGVGdW5jcy5zY2hlZHVsZXRpbWVyID0gTlBOX1NjaGVkdWxlVGltZXI7Ci0gICAgbmV0
c2NhcGVGdW5jcy51bnNjaGVkdWxldGltZXIgPSBOUE5fVW5zY2hlZHVsZVRpbWVyOwotI2lmIFBM
QVRGT1JNKENPQ09BKQotICAgIG5ldHNjYXBlRnVuY3MucG9wdXBjb250ZXh0bWVudSA9IE5QTl9Q
b3BVcENvbnRleHRNZW51OwotICAgIG5ldHNjYXBlRnVuY3MuY29udmVydHBvaW50ID0gTlBOX0Nv
bnZlcnRQb2ludDsKLSNlbHNlCi0gICAgbmV0c2NhcGVGdW5jcy5wb3B1cGNvbnRleHRtZW51ID0g
MDsKLSAgICBuZXRzY2FwZUZ1bmNzLmNvbnZlcnRwb2ludCA9IDA7Ci0jZW5kaWYKLSAgICBuZXRz
Y2FwZUZ1bmNzLnVybHJlZGlyZWN0cmVzcG9uc2UgPSBOUE5fVVJMUmVkaXJlY3RSZXNwb25zZTsK
LX0KLSAgICAKLU5QTmV0c2NhcGVGdW5jcyogbmV0c2NhcGVCcm93c2VyRnVuY3MoKQotewotICAg
IHN0YXRpYyBOUE5ldHNjYXBlRnVuY3MgbmV0c2NhcGVGdW5jczsKLSAgICBzdGF0aWMgYm9vbCBp
bml0aWFsaXplZCA9IGZhbHNlOwotICAgIAotICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAg
ICAgaW5pdGlhbGl6ZUJyb3dzZXJGdW5jcyhuZXRzY2FwZUZ1bmNzKTsKLSAgICAgICAgaW5pdGlh
bGl6ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiAmbmV0c2NhcGVGdW5jczsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNj
YXBlL05ldHNjYXBlQnJvd3NlckZ1bmNzLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9OZXRzY2FwZUJyb3dzZXJGdW5jcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwN2Q0MjFmYjNkMzc4ZGY0MTQxYWNmMDAyZWZlNzE3NWVhNTcxMmJjLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlQnJvd3NlckZ1bmNzLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBOZXRzY2FwZUJy
b3dzZXJGdW5jc19oCi0jZGVmaW5lIE5ldHNjYXBlQnJvd3NlckZ1bmNzX2gKLQotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSA8V2ViQ29yZS9ucGZ1bmN0aW9ucy5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotI2lmIFBMVUdJTl9BUkNISVRFQ1RVUkUoTUFDKQot
Ly8gVGhlIENvcmUgQW5pbWF0aW9uIHJlbmRlciBzZXJ2ZXIgcG9ydC4KLXN0YXRpYyBjb25zdCB1
bnNpZ25lZCBXS05WQ0FMYXllclJlbmRlclNlcnZlclBvcnQgPSA3MTg3OTsKLSNlbmRpZgotCi1O
UE5ldHNjYXBlRnVuY3MqIG5ldHNjYXBlQnJvd3NlckZ1bmNzKCk7Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNlbmRp
ZiAvLyBOZXRzY2FwZUJyb3dzZXJGdW5jc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5N2E4NTI4YmVmYjBjNjJkZTYzNTEyMWNiMmFiYTBj
NjUxZTUzMjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4u
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5ldHNjYXBlUGx1Z2luLmgiCi0KLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIk5QUnVudGltZU9iamVjdE1hcC5oIgot
I2luY2x1ZGUgIk5QUnVudGltZVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIk5ldHNjYXBlUGx1Z2lu
U3RyZWFtLmgiCi0jaW5jbHVkZSAiUGx1Z2luQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIlNoYXJl
YWJsZUJpdG1hcC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0Lmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0hUVFBI
ZWFkZXJNYXAuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1NoYXJlZEJ1ZmZlci5oPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8d3RmL1VS
TC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIFBMVUdJTl9BUkNISVRF
Q1RVUkUoVU5JWCkKLSNpbmNsdWRlICJOZXRzY2FwZVBsdWdpblVuaXguaCIKLSNlbmRpZgotCi0j
aWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiTGF5ZXJIb3N0aW5nQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi0vLyBUaGUgcGx1Zy1pbiB0aGF0IHdlJ3JlIGN1
cnJlbnRseSBjYWxsaW5nIE5QUF9OZXcgZm9yLgotc3RhdGljIE5ldHNjYXBlUGx1Z2luKiBjdXJy
ZW50TlBQTmV3UGx1Z2luOwotCi1SZWZQdHI8TmV0c2NhcGVQbHVnaW4+IE5ldHNjYXBlUGx1Z2lu
OjpjcmVhdGUoUmVmUHRyPE5ldHNjYXBlUGx1Z2luTW9kdWxlPiYmIHBsdWdpbk1vZHVsZSkKLXsK
LSAgICBpZiAoIXBsdWdpbk1vZHVsZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXRzY2FwZVBsdWdpbihwbHVnaW5Nb2R1bGUucmVsZWFzZU5v
bk51bGwoKSkpOwotfQotICAgIAotTmV0c2NhcGVQbHVnaW46Ok5ldHNjYXBlUGx1Z2luKFJlZjxO
ZXRzY2FwZVBsdWdpbk1vZHVsZT4mJiBwbHVnaW5Nb2R1bGUpCi0gICAgOiBQbHVnaW4oTmV0c2Nh
cGVQbHVnaW5UeXBlKQotICAgICwgbV9uZXh0UmVxdWVzdElEKDApCi0gICAgLCBtX3BsdWdpbk1v
ZHVsZShXVEZNb3ZlKHBsdWdpbk1vZHVsZSkpCi0gICAgLCBtX25wV2luZG93KCkKLSAgICAsIG1f
aXNTdGFydGVkKGZhbHNlKQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICwgbV9pc1dpbmRvd2Vk
KGZhbHNlKQotI2Vsc2UKLSAgICAsIG1faXNXaW5kb3dlZCh0cnVlKQotI2VuZGlmCi0gICAgLCBt
X2lzVHJhbnNwYXJlbnQoZmFsc2UpCi0gICAgLCBtX2luTlBQTmV3KGZhbHNlKQotICAgICwgbV9z
aG91bGRVc2VNYW51YWxMb2FkZXIoZmFsc2UpCi0gICAgLCBtX2hhc0NhbGxlZFNldFdpbmRvdyhm
YWxzZSkKLSAgICAsIG1faXNWaXNpYmxlKGZhbHNlKQotICAgICwgbV9uZXh0VGltZXJJRCgwKQot
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgICwgbV9kcmF3aW5nTW9kZWwoc3RhdGljX2Nhc3Q8TlBE
cmF3aW5nTW9kZWw+KC0xKSkKLSAgICAsIG1fZXZlbnRNb2RlbChzdGF0aWNfY2FzdDxOUEV2ZW50
TW9kZWw+KC0xKSkKLSAgICAsIG1fcGx1Z2luUmV0dXJuc05vbnJldGFpbmVkTGF5ZXIoIW1fcGx1
Z2luTW9kdWxlLT5wbHVnaW5RdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya3M6OlJldHVybnNS
ZXRhaW5lZENvcmVBbmltYXRpb25MYXllcikpCi0gICAgLCBtX2xheWVySG9zdGluZ01vZGUoTGF5
ZXJIb3N0aW5nTW9kZTo6SW5Qcm9jZXNzKQotICAgICwgbV9jdXJyZW50TW91c2VFdmVudCgwKQot
ICAgICwgbV9wbHVnaW5IYXNGb2N1cyhmYWxzZSkKLSAgICAsIG1fd2luZG93SGFzRm9jdXMoZmFs
c2UpCi0gICAgLCBtX3BsdWdpbldhbnRzTGVnYWN5Q29jb2FUZXh0SW5wdXQodHJ1ZSkKLSAgICAs
IG1faXNDb21wbGV4VGV4dElucHV0RW5hYmxlZChmYWxzZSkKLSAgICAsIG1faGFzSGFuZGxlZEFL
ZXlEb3duRXZlbnQoZmFsc2UpCi0gICAgLCBtX2lnbm9yZU5leHRLZXlVcEV2ZW50Q291bnRlcigw
KQotI2VuZGlmCi17Ci0gICAgbV9ucHAubmRhdGEgPSB0aGlzOwotICAgIG1fbnBwLnBkYXRhID0g
MDsKLSAgICAKLSAgICBtX3BsdWdpbk1vZHVsZS0+aW5jcmVtZW50TG9hZENvdW50KCk7Ci19Ci0K
LU5ldHNjYXBlUGx1Z2luOjp+TmV0c2NhcGVQbHVnaW4oKQotewotICAgIEFTU0VSVCghbV9pc1N0
YXJ0ZWQpOwotICAgIEFTU0VSVChtX3RpbWVycy5pc0VtcHR5KCkpOwotCi0gICAgbV9wbHVnaW5N
b2R1bGUtPmRlY3JlbWVudExvYWRDb3VudCgpOwotfQotCi1SZWZQdHI8TmV0c2NhcGVQbHVnaW4+
IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKE5QUCBucHApCi17Ci0gICAgaWYgKCFucHApCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PE5ldHNjYXBlUGx1
Z2luKj4obnBwLT5uZGF0YSk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OmludmFsaWRhdGUo
Y29uc3QgTlBSZWN0KiBpbnZhbGlkUmVjdCkKLXsKLSAgICBJbnRSZWN0IHJlY3Q7Ci0gICAgCi0g
ICAgaWYgKCFpbnZhbGlkUmVjdCkKLSAgICAgICAgcmVjdCA9IEludFJlY3QoMCwgMCwgbV9wbHVn
aW5TaXplLndpZHRoKCksIG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSk7Ci0gICAgZWxzZQotICAgICAg
ICByZWN0ID0gSW50UmVjdChpbnZhbGlkUmVjdC0+bGVmdCwgaW52YWxpZFJlY3QtPnRvcCwgaW52
YWxpZFJlY3QtPnJpZ2h0IC0gaW52YWxpZFJlY3QtPmxlZnQsIGludmFsaWRSZWN0LT5ib3R0b20g
LSBpbnZhbGlkUmVjdC0+dG9wKTsKLSAgICAKLSAgICBpZiAocGxhdGZvcm1JbnZhbGlkYXRlKHJl
Y3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUocmVj
dCk7Ci19Ci0KLWNvbnN0IGNoYXIqIE5ldHNjYXBlUGx1Z2luOjp1c2VyQWdlbnQoTlBQIG5wcCkK
LXsKLSAgICBpZiAobnBwKQotICAgICAgICByZXR1cm4gZnJvbU5QUChucHApLT51c2VyQWdlbnQo
KTsKLQotICAgIGlmIChjdXJyZW50TlBQTmV3UGx1Z2luKQotICAgICAgICByZXR1cm4gY3VycmVu
dE5QUE5ld1BsdWdpbi0+dXNlckFnZW50KCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotY29uc3Qg
Y2hhciogTmV0c2NhcGVQbHVnaW46OnVzZXJBZ2VudCgpCi17Ci0gICAgaWYgKG1fdXNlckFnZW50
LmlzTnVsbCgpKSB7Ci0gICAgICAgIFN0cmluZyB1c2VyQWdlbnQgPSBjb250cm9sbGVyKCktPnVz
ZXJBZ2VudCgpOwotICAgICAgICBBU1NFUlQoIXVzZXJBZ2VudC5pc051bGwoKSk7Ci0KLSNpZiBQ
TFVHSU5fQVJDSElURUNUVVJFKE1BQykKLSAgICAgICAgaWYgKHF1aXJrcygpLmNvbnRhaW5zKFBs
dWdpblF1aXJrczo6QXBwZW5kVmVyc2lvbjNVc2VyQWdlbnQpKQotICAgICAgICAgICAgdXNlckFn
ZW50LmFwcGVuZCgiIFZlcnNpb24vMy4yLjEiKTsKLSNlbmRpZgotCi0gICAgICAgIG1fdXNlckFn
ZW50ID0gdXNlckFnZW50LnV0ZjgoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fdXNlckFnZW50LmRh
dGEoKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6bG9hZFVSTChjb25zdCBTdHJpbmcmIG1l
dGhvZCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25z
dCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJGaWVsZHMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaHR0
cEJvZHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VuZE5vdGlmaWNhdGlv
biwgdm9pZCogbm90aWZpY2F0aW9uRGF0YSkKLXsKLSAgICB1aW50NjRfdCByZXF1ZXN0SUQgPSAr
K21fbmV4dFJlcXVlc3RJRDsKLSAgICAKLSAgICBjb250cm9sbGVyKCktPmxvYWRVUkwocmVxdWVz
dElELCBtZXRob2QsIHVybFN0cmluZywgdGFyZ2V0LCBoZWFkZXJGaWVsZHMsIGh0dHBCb2R5LCBh
bGxvd1BvcHVwcygpKTsKLQotICAgIGlmICh0YXJnZXQuaXNOdWxsKCkpIHsKLSAgICAgICAgLy8g
VGhlIGJyb3dzZXIgaXMgZ29pbmcgdG8gc2VuZCB0aGUgZGF0YSBpbiBhIHN0cmVhbSwgY3JlYXRl
IGEgcGx1Zy1pbiBzdHJlYW0uCi0gICAgICAgIGF1dG8gcGx1Z2luU3RyZWFtID0gTmV0c2NhcGVQ
bHVnaW5TdHJlYW06OmNyZWF0ZSgqdGhpcywgcmVxdWVzdElELCB1cmxTdHJpbmcsIHNlbmROb3Rp
ZmljYXRpb24sIG5vdGlmaWNhdGlvbkRhdGEpOwotICAgICAgICBBU1NFUlQoIW1fc3RyZWFtcy5j
b250YWlucyhyZXF1ZXN0SUQpKTsKLQotICAgICAgICBtX3N0cmVhbXMuc2V0KHJlcXVlc3RJRCwg
V1RGTW92ZShwbHVnaW5TdHJlYW0pKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChzZW5kTm90aWZpY2F0aW9uKSB7Ci0gICAgICAgIC8vIEV2ZW50dWFsbHkgd2UgYXJlIGdvaW5n
IHRvIGdldCBhIGZyYW1lRGlkRmluaXNoTG9hZGluZyBvciBmcmFtZURpZEZhaWwgY2FsbCBmb3Ig
dGhpcyByZXF1ZXN0LgotICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSBub3RpZmljYXRpb24g
ZGF0YSBzbyB3ZSBjYW4gY2FsbCBOUFBfVVJMTm90aWZ5LgotICAgICAgICBBU1NFUlQoIW1fcGVu
ZGluZ1VSTE5vdGlmaWNhdGlvbnMuY29udGFpbnMocmVxdWVzdElEKSk7Ci0gICAgICAgIG1fcGVu
ZGluZ1VSTE5vdGlmaWNhdGlvbnMuc2V0KHJlcXVlc3RJRCwgc3RkOjptYWtlX3BhaXIodXJsU3Ry
aW5nLCBub3RpZmljYXRpb25EYXRhKSk7Ci0gICAgfQotfQotCi1OUEVycm9yIE5ldHNjYXBlUGx1
Z2luOjpkZXN0cm95U3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKLXsK
LSAgICBOZXRzY2FwZVBsdWdpblN0cmVhbSogcGx1Z2luU3RyZWFtID0gMDsKLQotICAgIGZvciAo
U3RyZWFtc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0cmVhbXMuYmVnaW4oKSwgZW5kID0g
bV9zdHJlYW1zLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT52YWx1
ZS0+bnBTdHJlYW0oKSA9PSBzdHJlYW0pIHsKLSAgICAgICAgICAgIHBsdWdpblN0cmVhbSA9IGl0
LT52YWx1ZS5nZXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKCFwbHVnaW5TdHJlYW0pCi0gICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX0lOU1RB
TkNFX0VSUk9SOwotCi0gICAgcmV0dXJuIHBsdWdpblN0cmVhbS0+ZGVzdHJveShyZWFzb24pOwot
fQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpzZXRJc1dpbmRvd2VkKGJvb2wgaXNXaW5kb3dlZCkK
LXsKLSAgICAvLyBPbmNlIHRoZSBwbHVnaW4gaGFzIHN0YXJ0ZWQsIGl0J3MgdG9vIGxhdGUgdG8g
Y2hhbmdlIHdoZXRoZXIgdGhlIHBsdWdpbiBpcyB3aW5kb3dlZCBvciBub3QuCi0gICAgLy8gKFRo
aXMgaXMgdHJ1ZSBpbiBGaXJlZm94IGFuZCBDaHJvbWUsIHRvby4pIERpc2FsbG93IHNldHRpbmcg
bV9pc1dpbmRvd2VkIGluIHRoYXQgY2FzZSB0bwotICAgIC8vIGtlZXAgb3VyIGludGVybmFsIHN0
YXRlIGNvbnNpc3RlbnQuCi0gICAgaWYgKG1faXNTdGFydGVkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2lzV2luZG93ZWQgPSBpc1dpbmRvd2VkOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2lu
OjpzZXRJc1RyYW5zcGFyZW50KGJvb2wgaXNUcmFuc3BhcmVudCkKLXsKLSAgICBtX2lzVHJhbnNw
YXJlbnQgPSBpc1RyYW5zcGFyZW50OwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpzZXRTdGF0
dXNiYXJUZXh0KGNvbnN0IFN0cmluZyYgc3RhdHVzYmFyVGV4dCkKLXsKLSAgICBjb250cm9sbGVy
KCktPnNldFN0YXR1c2JhclRleHQoc3RhdHVzYmFyVGV4dCk7Ci19Ci0KLXN0YXRpYyB2b2lkICgq
c2V0RXhjZXB0aW9uRnVuY3Rpb24pKGNvbnN0IFN0cmluZyYpOwotCi12b2lkIE5ldHNjYXBlUGx1
Z2luOjpzZXRTZXRFeGNlcHRpb25GdW5jdGlvbih2b2lkICgqZnVuY3Rpb24pKGNvbnN0IFN0cmlu
ZyYpKQotewotICAgIEFTU0VSVCghc2V0RXhjZXB0aW9uRnVuY3Rpb24gfHwgc2V0RXhjZXB0aW9u
RnVuY3Rpb24gPT0gZnVuY3Rpb24pOwotICAgIHNldEV4Y2VwdGlvbkZ1bmN0aW9uID0gZnVuY3Rp
b247Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OnNldEV4Y2VwdGlvbihjb25zdCBTdHJpbmcm
IGV4Y2VwdGlvblN0cmluZykKLXsKLSAgICBBU1NFUlQoc2V0RXhjZXB0aW9uRnVuY3Rpb24pOwot
ICAgIHNldEV4Y2VwdGlvbkZ1bmN0aW9uKGV4Y2VwdGlvblN0cmluZyk7Ci19Ci0KLWJvb2wgTmV0
c2NhcGVQbHVnaW46OmV2YWx1YXRlKE5QT2JqZWN0KiBucE9iamVjdCwgY29uc3QgU3RyaW5nJiBz
Y3JpcHRTdHJpbmcsIE5QVmFyaWFudCogcmVzdWx0KQotewotICAgIHJldHVybiBjb250cm9sbGVy
KCktPmV2YWx1YXRlKG5wT2JqZWN0LCBzY3JpcHRTdHJpbmcsIHJlc3VsdCwgYWxsb3dQb3B1cHMo
KSk7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46OmlzUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgp
Ci17Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXIoKS0+aXNQcml2YXRlQnJvd3NpbmdFbmFibGVkKCk7
Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46OmlzTXV0ZWQoKSBjb25zdAotewotICAgIHJldHVy
biBjb250cm9sbGVyKCktPmlzTXV0ZWQoKTsKLX0KLQotTlBPYmplY3QqIE5ldHNjYXBlUGx1Z2lu
Ojp3aW5kb3dTY3JpcHROUE9iamVjdCgpCi17Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXIoKS0+d2lu
ZG93U2NyaXB0TlBPYmplY3QoKTsKLX0KLQotTlBPYmplY3QqIE5ldHNjYXBlUGx1Z2luOjpwbHVn
aW5FbGVtZW50TlBPYmplY3QoKQotewotICAgIHJldHVybiBjb250cm9sbGVyKCktPnBsdWdpbkVs
ZW1lbnROUE9iamVjdCgpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpjYW5jZWxTdHJlYW1M
b2FkKE5ldHNjYXBlUGx1Z2luU3RyZWFtKiBwbHVnaW5TdHJlYW0pCi17Ci0gICAgaWYgKHBsdWdp
blN0cmVhbSA9PSBtX21hbnVhbFN0cmVhbSkgewotICAgICAgICBjb250cm9sbGVyKCktPmNhbmNl
bE1hbnVhbFN0cmVhbUxvYWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEFz
ayB0aGUgcGx1Zy1pbiBjb250cm9sbGVyIHRvIGNhbmNlbCB0aGlzIHN0cmVhbSBsb2FkLgotICAg
IGNvbnRyb2xsZXIoKS0+Y2FuY2VsU3RyZWFtTG9hZChwbHVnaW5TdHJlYW0tPnN0cmVhbUlEKCkp
OwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpyZW1vdmVQbHVnaW5TdHJlYW0oTmV0c2NhcGVQ
bHVnaW5TdHJlYW0qIHBsdWdpblN0cmVhbSkKLXsKLSAgICBpZiAocGx1Z2luU3RyZWFtID09IG1f
bWFudWFsU3RyZWFtKSB7Ci0gICAgICAgIG1fbWFudWFsU3RyZWFtID0gbnVsbHB0cjsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChtX3N0cmVhbXMuZ2V0KHBsdWdpblN0cmVh
bS0+c3RyZWFtSUQoKSkgPT0gcGx1Z2luU3RyZWFtKTsKLSAgICBtX3N0cmVhbXMucmVtb3ZlKHBs
dWdpblN0cmVhbS0+c3RyZWFtSUQoKSk7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46OmlzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKQotewotICAgIHJldHVybiBjb250cm9sbGVyKCkt
PmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBs
dWdpbjo6cHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShib29sIHN0YXRlKQotewotICAgIG1fcG9wdXBF
bmFibGVkU3RhdGVzLmFwcGVuZChzdGF0ZSk7Ci19Ci0gCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpw
b3BQb3B1cHNFbmFibGVkU3RhdGUoKQotewotICAgIEFTU0VSVCghbV9wb3B1cEVuYWJsZWRTdGF0
ZXMuaXNFbXB0eSgpKTsKLQotICAgIG1fcG9wdXBFbmFibGVkU3RhdGVzLnJlbW92ZUxhc3QoKTsK
LX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6cGx1Z2luVGhyZWFkQXN5bmNDYWxsKHZvaWQgKCpm
dW5jdGlvbikodm9pZCopLCB2b2lkKiB1c2VyRGF0YSkKLXsKLSAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBmdW5jdGlvbiwgdXNlckRh
dGFdIHsKLSAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5tX2lzU3RhcnRlZCkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBmdW5jdGlvbih1c2VyRGF0YSk7Ci0gICAgfSk7Ci19Ci0K
LU5ldHNjYXBlUGx1Z2luOjpUaW1lcjo6VGltZXIoTmV0c2NhcGVQbHVnaW4qIG5ldHNjYXBlUGx1
Z2luLCB1bnNpZ25lZCB0aW1lcklELCB1bnNpZ25lZCBpbnRlcnZhbCwgYm9vbCByZXBlYXQsIFRp
bWVyRnVuYyB0aW1lckZ1bmMpCi0gICAgOiBtX25ldHNjYXBlUGx1Z2luKG5ldHNjYXBlUGx1Z2lu
KQotICAgICwgbV90aW1lcklEKHRpbWVySUQpCi0gICAgLCBtX2ludGVydmFsKGludGVydmFsKQot
ICAgICwgbV9yZXBlYXQocmVwZWF0KQotICAgICwgbV90aW1lckZ1bmModGltZXJGdW5jKQotICAg
ICwgbV90aW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZUaW1lcjo6dGltZXJGaXJlZCkKLXsK
LX0KLQotTmV0c2NhcGVQbHVnaW46OlRpbWVyOjp+VGltZXIoKQotewotfQotCi12b2lkIE5ldHNj
YXBlUGx1Z2luOjpUaW1lcjo6c3RhcnQoKQotewotICAgIFNlY29uZHMgdGltZUludGVydmFsID0g
MV9tcyAqIG1faW50ZXJ2YWw7Ci0KLSAgICBpZiAobV9yZXBlYXQpCi0gICAgICAgIG1fdGltZXIu
c3RhcnRSZXBlYXRpbmcodGltZUludGVydmFsKTsKLSAgICBlbHNlCi0gICAgICAgIG1fdGltZXIu
c3RhcnRPbmVTaG90KHRpbWVJbnRlcnZhbCk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OlRp
bWVyOjpzdG9wKCkKLXsKLSAgICBtX3RpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBs
dWdpbjo6VGltZXI6OnRpbWVyRmlyZWQoKQotewotICAgIG1fdGltZXJGdW5jKCZtX25ldHNjYXBl
UGx1Z2luLT5tX25wcCwgbV90aW1lcklEKTsKLQotICAgIGlmICghbV9yZXBlYXQpCi0gICAgICAg
IG1fbmV0c2NhcGVQbHVnaW4tPnVuc2NoZWR1bGVUaW1lcihtX3RpbWVySUQpOwotfQotCi11aW50
MzJfdCBOZXRzY2FwZVBsdWdpbjo6c2NoZWR1bGVUaW1lcih1bnNpZ25lZCBpbnRlcnZhbCwgYm9v
bCByZXBlYXQsIHZvaWQgKCp0aW1lckZ1bmMpKE5QUCwgdW5zaWduZWQgdGltZXJJRCkpCi17Ci0g
ICAgaWYgKCF0aW1lckZ1bmMpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gRklYTUU6IEhh
bmRsZSB3cmFwcGluZyBhcm91bmQuCi0gICAgdW5zaWduZWQgdGltZXJJRCA9ICsrbV9uZXh0VGlt
ZXJJRDsKLQotICAgIGF1dG8gdGltZXIgPSBtYWtlVW5pcXVlPFRpbWVyPih0aGlzLCB0aW1lcklE
LCBpbnRlcnZhbCwgcmVwZWF0LCB0aW1lckZ1bmMpOwotICAgIAotICAgIC8vIEZJWE1FOiBCYXNl
ZCBvbiB0aGUgcGx1Zy1pbiB2aXNpYmlsaXR5LCBmaWd1cmUgb3V0IGlmIHdlIHNob3VsZCB0aHJv
dHRsZSB0aGUgdGltZXIsIG9yIGlmIHdlIHNob3VsZCBzdGFydCBpdCBhdCBhbGwuCi0gICAgdGlt
ZXItPnN0YXJ0KCk7Ci0gICAgbV90aW1lcnMuc2V0KHRpbWVySUQsIFdURk1vdmUodGltZXIpKTsK
LQotICAgIHJldHVybiB0aW1lcklEOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjp1bnNjaGVk
dWxlVGltZXIodW5zaWduZWQgdGltZXJJRCkKLXsKLSAgICBpZiAoYXV0byB0aW1lciA9IG1fdGlt
ZXJzLnRha2UodGltZXJJRCkpCi0gICAgICAgIHRpbWVyLT5zdG9wKCk7Ci19Ci0KLWRvdWJsZSBO
ZXRzY2FwZVBsdWdpbjo6Y29udGVudHNTY2FsZUZhY3RvcigpCi17Ci0gICAgcmV0dXJuIGNvbnRy
b2xsZXIoKS0+Y29udGVudHNTY2FsZUZhY3RvcigpOwotfQotCi1TdHJpbmcgTmV0c2NhcGVQbHVn
aW46OnByb3hpZXNGb3JVUkwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCi17Ci0gICAgcmV0dXJu
IGNvbnRyb2xsZXIoKS0+cHJveGllc0ZvclVSTCh1cmxTdHJpbmcpOwotfQotICAgIAotU3RyaW5n
IE5ldHNjYXBlUGx1Z2luOjpjb29raWVzRm9yVVJMKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQot
ewotICAgIHJldHVybiBjb250cm9sbGVyKCktPmNvb2tpZXNGb3JVUkwodXJsU3RyaW5nKTsKLX0K
LQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6c2V0Q29va2llc0ZvclVSTChjb25zdCBTdHJpbmcmIHVy
bFN0cmluZywgY29uc3QgU3RyaW5nJiBjb29raWVTdHJpbmcpCi17Ci0gICAgY29udHJvbGxlcigp
LT5zZXRDb29raWVzRm9yVVJMKHVybFN0cmluZywgY29va2llU3RyaW5nKTsKLX0KLQotYm9vbCBO
ZXRzY2FwZVBsdWdpbjo6Z2V0QXV0aGVudGljYXRpb25JbmZvKGNvbnN0IFByb3RlY3Rpb25TcGFj
ZSYgcHJvdGVjdGlvblNwYWNlLCBTdHJpbmcmIHVzZXJuYW1lLCBTdHJpbmcmIHBhc3N3b3JkKQot
ewotICAgIHJldHVybiBjb250cm9sbGVyKCktPmdldEF1dGhlbnRpY2F0aW9uSW5mbyhwcm90ZWN0
aW9uU3BhY2UsIHVzZXJuYW1lLCBwYXNzd29yZCk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46
OnJlZ2lzdGVyUmVkaXJlY3QoTmV0c2NhcGVQbHVnaW5TdHJlYW0qIHN0cmVhbSwgY29uc3QgVVJM
JiByZXF1ZXN0VVJMLCBpbnQgcmVkaXJlY3RSZXNwb25zZVN0YXR1cywgdm9pZCogbm90aWZpY2F0
aW9uRGF0YSkKLXsKLSAgICAvLyBOUFBfVVJMUmVkaXJlY3ROb3RpZnkgbWF5IHN5bmNocm9ub3Vz
bHkgcmVxdWVzdCB0aGlzIHN0cmVhbSBiYWNrIG91dCwgc28gc2V0IGl0IGZpcnN0Ci0gICAgbV9y
ZWRpcmVjdHMuc2V0KG5vdGlmaWNhdGlvbkRhdGEsIHN0ZDo6bWFrZV9wYWlyKHN0cmVhbSwgcmVx
dWVzdFVSTC5zdHJpbmcoKSkpOwotICAgIGlmICghTlBQX1VSTFJlZGlyZWN0Tm90aWZ5KHJlcXVl
c3RVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgcmVkaXJlY3RSZXNwb25zZVN0YXR1cywgbm90
aWZpY2F0aW9uRGF0YSkpIHsKLSAgICAgICAgbV9yZWRpcmVjdHMudGFrZShub3RpZmljYXRpb25E
YXRhKTsKLSAgICAgICAgY29udHJvbGxlcigpLT5jb250aW51ZVN0cmVhbUxvYWQoc3RyZWFtLT5z
dHJlYW1JRCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OnVybFJlZGlyZWN0
UmVzcG9uc2Uodm9pZCogbm90aWZ5RGF0YSwgYm9vbCBhbGxvdykKLXsKLSAgICBpZiAoIW1fcmVk
aXJlY3RzLmNvbnRhaW5zKG5vdGlmeURhdGEpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRv
IHJlZGlyZWN0ID0gbV9yZWRpcmVjdHMudGFrZShub3RpZnlEYXRhKTsKLSAgICBpZiAoIXJlZGly
ZWN0LmZpcnN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW5T
dHJlYW0+IHN0cmVhbSA9IHJlZGlyZWN0LmZpcnN0OwotICAgIGlmICghYWxsb3cpIHsKLSAgICAg
ICAgY29udHJvbGxlcigpLT5jYW5jZWxTdHJlYW1Mb2FkKHN0cmVhbS0+c3RyZWFtSUQoKSk7Ci0g
ICAgICAgIHN0cmVhbS0+c3RvcChOUFJFU19VU0VSX0JSRUFLKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBzdHJlYW0tPnNldFVSTChyZWRpcmVjdC5zZWNvbmQpOwotICAgICAgICBjb250cm9sbGVy
KCktPmNvbnRpbnVlU3RyZWFtTG9hZChzdHJlYW0tPnN0cmVhbUlEKCkpOwotICAgIH0KLX0KLQot
dm9pZCBOZXRzY2FwZVBsdWdpbjo6c2V0SXNQbGF5aW5nQXVkaW8oYm9vbCBpc1BsYXlpbmdBdWRp
bykKLXsKLSAgICBjb250cm9sbGVyKCktPnNldFBsdWdpbklzUGxheWluZ0F1ZGlvKGlzUGxheWlu
Z0F1ZGlvKTsKLX0KLQotTlBFcnJvciBOZXRzY2FwZVBsdWdpbjo6TlBQX05ldyhOUE1JTUVUeXBl
IHBsdWdpblR5cGUsIHVpbnQxNl90IG1vZGUsIGludDE2X3QgYXJnYywgY2hhciogYXJnbltdLCBj
aGFyKiBhcmd2W10sIE5QU2F2ZWREYXRhKiBzYXZlZERhdGEpCi17Ci0gICAgcmV0dXJuIG1fcGx1
Z2luTW9kdWxlLT5wbHVnaW5GdW5jcygpLm5ld3AocGx1Z2luVHlwZSwgJm1fbnBwLCBtb2RlLCBh
cmdjLCBhcmduLCBhcmd2LCBzYXZlZERhdGEpOwotfQotICAgIAotTlBFcnJvciBOZXRzY2FwZVBs
dWdpbjo6TlBQX0Rlc3Ryb3koTlBTYXZlZERhdGEqKiBzYXZlZERhdGEpCi17Ci0gICAgcmV0dXJu
IG1fcGx1Z2luTW9kdWxlLT5wbHVnaW5GdW5jcygpLmRlc3Ryb3koJm1fbnBwLCBzYXZlZERhdGEp
OwotfQotCi1OUEVycm9yIE5ldHNjYXBlUGx1Z2luOjpOUFBfU2V0V2luZG93KE5QV2luZG93KiBu
cFdpbmRvdykKLXsKLSAgICByZXR1cm4gbV9wbHVnaW5Nb2R1bGUtPnBsdWdpbkZ1bmNzKCkuc2V0
d2luZG93KCZtX25wcCwgbnBXaW5kb3cpOwotfQotCi1OUEVycm9yIE5ldHNjYXBlUGx1Z2luOjpO
UFBfTmV3U3RyZWFtKE5QTUlNRVR5cGUgbWltZVR5cGUsIE5QU3RyZWFtKiBzdHJlYW0sIE5QQm9v
bCBzZWVrYWJsZSwgdWludDE2X3QqIHN0cmVhbVR5cGUpCi17Ci0gICAgcmV0dXJuIG1fcGx1Z2lu
TW9kdWxlLT5wbHVnaW5GdW5jcygpLm5ld3N0cmVhbSgmbV9ucHAsIG1pbWVUeXBlLCBzdHJlYW0s
IHNlZWthYmxlLCBzdHJlYW1UeXBlKTsKLX0KLQotTlBFcnJvciBOZXRzY2FwZVBsdWdpbjo6TlBQ
X0Rlc3Ryb3lTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQotewotICAg
IHJldHVybiBtX3BsdWdpbk1vZHVsZS0+cGx1Z2luRnVuY3MoKS5kZXN0cm95c3RyZWFtKCZtX25w
cCwgc3RyZWFtLCByZWFzb24pOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpOUFBfU3RyZWFt
QXNGaWxlKE5QU3RyZWFtKiBzdHJlYW0sIGNvbnN0IGNoYXIqIGZpbGVuYW1lKQotewotICAgIHJl
dHVybiBtX3BsdWdpbk1vZHVsZS0+cGx1Z2luRnVuY3MoKS5hc2ZpbGUoJm1fbnBwLCBzdHJlYW0s
IGZpbGVuYW1lKTsKLX0KLQotaW50MzJfdCBOZXRzY2FwZVBsdWdpbjo6TlBQX1dyaXRlUmVhZHko
TlBTdHJlYW0qIHN0cmVhbSkKLXsKLSAgICByZXR1cm4gbV9wbHVnaW5Nb2R1bGUtPnBsdWdpbkZ1
bmNzKCkud3JpdGVyZWFkeSgmbV9ucHAsIHN0cmVhbSk7Ci19Ci0KLWludDMyX3QgTmV0c2NhcGVQ
bHVnaW46Ok5QUF9Xcml0ZShOUFN0cmVhbSogc3RyZWFtLCBpbnQzMl90IG9mZnNldCwgaW50MzJf
dCBsZW4sIHZvaWQqIGJ1ZmZlcikKLXsKLSAgICByZXR1cm4gbV9wbHVnaW5Nb2R1bGUtPnBsdWdp
bkZ1bmNzKCkud3JpdGUoJm1fbnBwLCBzdHJlYW0sIG9mZnNldCwgbGVuLCBidWZmZXIpOwotfQot
Ci1pbnQxNl90IE5ldHNjYXBlUGx1Z2luOjpOUFBfSGFuZGxlRXZlbnQodm9pZCogZXZlbnQpCi17
Ci0gICAgcmV0dXJuIG1fcGx1Z2luTW9kdWxlLT5wbHVnaW5GdW5jcygpLmV2ZW50KCZtX25wcCwg
ZXZlbnQpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpOUFBfVVJMTm90aWZ5KGNvbnN0IGNo
YXIqIHVybCwgTlBSZWFzb24gcmVhc29uLCB2b2lkKiBub3RpZnlEYXRhKQotewotICAgIG1fcGx1
Z2luTW9kdWxlLT5wbHVnaW5GdW5jcygpLnVybG5vdGlmeSgmbV9ucHAsIHVybCwgcmVhc29uLCBu
b3RpZnlEYXRhKTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6TlBQX1VSTFJlZGlyZWN0Tm90
aWZ5KGNvbnN0IGNoYXIqIHVybCwgaW50MzJfdCBzdGF0dXMsIHZvaWQqIG5vdGlmeURhdGEpCi17
Ci0gICAgaWYgKCFtX3BsdWdpbk1vZHVsZS0+cGx1Z2luRnVuY3MoKS51cmxyZWRpcmVjdG5vdGlm
eSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9wbHVnaW5Nb2R1bGUtPnBsdWdpbkZ1
bmNzKCkudXJscmVkaXJlY3Rub3RpZnkoJm1fbnBwLCB1cmwsIHN0YXR1cywgbm90aWZ5RGF0YSk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLU5QRXJyb3IgTmV0c2NhcGVQbHVnaW46Ok5QUF9HZXRW
YWx1ZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqdmFsdWUpCi17Ci0gICAgaWYgKCFtX3Bs
dWdpbk1vZHVsZS0+cGx1Z2luRnVuY3MoKS5nZXR2YWx1ZSkKLSAgICAgICAgcmV0dXJuIE5QRVJS
X0dFTkVSSUNfRVJST1I7Ci0KLSAgICByZXR1cm4gbV9wbHVnaW5Nb2R1bGUtPnBsdWdpbkZ1bmNz
KCkuZ2V0dmFsdWUoJm1fbnBwLCB2YXJpYWJsZSwgdmFsdWUpOwotfQotCi1OUEVycm9yIE5ldHNj
YXBlUGx1Z2luOjpOUFBfU2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnZhbHVl
KQotewotICAgIGlmICghbV9wbHVnaW5Nb2R1bGUtPnBsdWdpbkZ1bmNzKCkuc2V0dmFsdWUpCi0g
ICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAgcmV0dXJuIG1fcGx1Z2lu
TW9kdWxlLT5wbHVnaW5GdW5jcygpLnNldHZhbHVlKCZtX25wcCwgdmFyaWFibGUsIHZhbHVlKTsK
LX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6Y2FsbFNldFdpbmRvdygpCi17Ci0gICAgaWYgKHdh
bnRzUGx1Z2luUmVsYXRpdmVOUFdpbmRvd0Nvb3JkaW5hdGVzKCkpIHsKLSAgICAgICAgbV9ucFdp
bmRvdy54ID0gMDsKLSAgICAgICAgbV9ucFdpbmRvdy55ID0gMDsKLSAgICAgICAgbV9ucFdpbmRv
dy5jbGlwUmVjdC50b3AgPSBtX2NsaXBSZWN0LnkoKTsKLSAgICAgICAgbV9ucFdpbmRvdy5jbGlw
UmVjdC5sZWZ0ID0gbV9jbGlwUmVjdC54KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgSW50UG9p
bnQgcGx1Z2luTG9jYXRpb25JblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBjb252ZXJ0VG9Sb290Vmll
dyhJbnRQb2ludCgpKTsKLSAgICAgICAgSW50UG9pbnQgY2xpcFJlY3RJblJvb3RWaWV3Q29vcmRp
bmF0ZXMgPSBjb252ZXJ0VG9Sb290VmlldyhtX2NsaXBSZWN0LmxvY2F0aW9uKCkpOwotCi0gICAg
ICAgIG1fbnBXaW5kb3cueCA9IHBsdWdpbkxvY2F0aW9uSW5Sb290Vmlld0Nvb3JkaW5hdGVzLngo
KTsKLSAgICAgICAgbV9ucFdpbmRvdy55ID0gcGx1Z2luTG9jYXRpb25JblJvb3RWaWV3Q29vcmRp
bmF0ZXMueSgpOwotICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IGNsaXBSZWN0SW5S
b290Vmlld0Nvb3JkaW5hdGVzLnkoKTsKLSAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0
ID0gY2xpcFJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMueCgpOwotICAgIH0KLQotICAgIG1fbnBX
aW5kb3cud2lkdGggPSBtX3BsdWdpblNpemUud2lkdGgoKTsKLSAgICBtX25wV2luZG93LmhlaWdo
dCA9IG1fcGx1Z2luU2l6ZS5oZWlnaHQoKTsKLSAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0
ID0gbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ICsgbV9jbGlwUmVjdC53aWR0aCgpOwotICAgIG1f
bnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgKyBtX2Ns
aXBSZWN0LmhlaWdodCgpOwotCi0gICAgTlBQX1NldFdpbmRvdygmbV9ucFdpbmRvdyk7Ci0gICAg
bV9oYXNDYWxsZWRTZXRXaW5kb3cgPSB0cnVlOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpj
YWxsU2V0V2luZG93SW52aXNpYmxlKCkKLXsKLSAgICBOUFdpbmRvdyBpbnZpc2libGVXaW5kb3cg
PSBtX25wV2luZG93OwotICAgIAotICAgIGludmlzaWJsZVdpbmRvdy53aW5kb3cgPSAwOwotICAg
IGludmlzaWJsZVdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOwotICAgIGludmlzaWJsZVdpbmRvdy5j
bGlwUmVjdC5sZWZ0ID0gMDsKLSAgICBpbnZpc2libGVXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0g
MDsKLSAgICBpbnZpc2libGVXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSAwOwotICAgIAotICAgIE5Q
UF9TZXRXaW5kb3coJmludmlzaWJsZVdpbmRvdyk7Ci0gICAgbV9oYXNDYWxsZWRTZXRXaW5kb3cg
PSB0cnVlOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjpzaG91bGRMb2FkU3JjVVJMKCkKLXsK
LSNpZiBQTEFURk9STShYMTEpCi0gICAgLy8gRmxhc2ggY3Jhc2hlcyB3aGVuIE5QUF9HZXRWYWx1
ZSBpcyBjYWxsZWQgZm9yIE5QUFZwbHVnaW5DYW5jZWxTcmNTdHJlYW0gaW4gd2luZG93ZWQgbW9k
ZS4KLSAgICBpZiAobV9pc1dpbmRvd2VkICYmIG1fcGx1Z2luTW9kdWxlLT5wbHVnaW5RdWlya3Mo
KS5jb250YWlucyhQbHVnaW5RdWlya3M6OkRvTm90Q2FuY2VsU3JjU3RyZWFtSW5XaW5kb3dlZE1v
ZGUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotCi0gICAgLy8gQ2hlY2sgaWYgd2Ug
c2hvdWxkIGNhbmNlbCB0aGUgbG9hZAotICAgIE5QQm9vbCBjYW5jZWxTcmNTdHJlYW0gPSBmYWxz
ZTsKLQotICAgIGlmIChOUFBfR2V0VmFsdWUoTlBQVnBsdWdpbkNhbmNlbFNyY1N0cmVhbSwgJmNh
bmNlbFNyY1N0cmVhbSkgIT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgcmV0dXJuICFjYW5jZWxTcmNTdHJlYW07Ci19Ci0KLU5ldHNjYXBlUGx1Z2luU3RyZWFt
KiBOZXRzY2FwZVBsdWdpbjo6c3RyZWFtRnJvbUlEKHVpbnQ2NF90IHN0cmVhbUlEKQotewotICAg
IHJldHVybiBtX3N0cmVhbXMuZ2V0KHN0cmVhbUlEKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdp
bjo6c3RvcEFsbFN0cmVhbXMoKQotewotICAgIGZvciAoYXV0byYgc3RyZWFtIDogY29weVRvVmVj
dG9yKG1fc3RyZWFtcy52YWx1ZXMoKSkpCi0gICAgICAgIHN0cmVhbS0+c3RvcChOUFJFU19VU0VS
X0JSRUFLKTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6YWxsb3dQb3B1cHMoKSBjb25zdAot
ewotICAgIGlmIChtX3BsdWdpbk1vZHVsZS0+cGx1Z2luRnVuY3MoKS52ZXJzaW9uID49IE5QVkVS
U19IQVNfUE9QVVBTX0VOQUJMRURfU1RBVEUpIHsKLSAgICAgICAgaWYgKCFtX3BvcHVwRW5hYmxl
ZFN0YXRlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gbV9wb3B1cEVuYWJsZWRTdGF0
ZXMubGFzdCgpOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBDaGVjayBpZiB0aGUgY3VycmVudCBl
dmVudCBpcyBhIHVzZXIgZ2VzdHVyZS4KLSAgICAvLyBSZWFsbHkgb2xkIHZlcnNpb25zIG9mIEZs
YXNoIHJlcXVpcmVkIHRoaXMgZm9yIHBvcHVwcyB0byB3b3JrLCBidXQgYWxsIG5ld2VyIHZlcnNp
b25zCi0gICAgLy8gc3VwcG9ydCBOUE5fUHVzaFBvcHVwRW5hYmxlZFN0YXRlL05QTl9Qb3BQb3B1
cEVuYWJsZWRTdGF0ZS4KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNpZiBQTFVHSU5fQVJDSElU
RUNUVVJFKE1BQykKLXN0YXRpYyBib29sIGlzVHJhbnNwYXJlbnRTaWx2ZXJsaWdodEJhY2tncm91
bmRWYWx1ZShjb25zdCBTdHJpbmcmIGxvd2VyY2FzZUJhY2tncm91bmRWYWx1ZSkKLXsKLSAgICAv
LyBUaGlzIGNoZWNrcyBpZiB0aGUgYmFja2dyb3VuZCBjb2xvciB2YWx1ZSBpcyB0cmFuc3BhcmVu
dCwgYWNjb3JkaW5nIHRvCi0gICAgLy8gdGhlIGZvcm1hdCBkb2N1bWVudGVkIGF0IGh0dHA6Ly9t
c2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9jYzgzODE0OChWUy45NSkuYXNweAotICAg
IGlmIChsb3dlcmNhc2VCYWNrZ3JvdW5kVmFsdWUuc3RhcnRzV2l0aCgnIycpKSB7Ci0gICAgICAg
IGlmIChsb3dlcmNhc2VCYWNrZ3JvdW5kVmFsdWUubGVuZ3RoKCkgPT0gNSAmJiBsb3dlcmNhc2VC
YWNrZ3JvdW5kVmFsdWVbMV0gIT0gJ2YnKSB7Ci0gICAgICAgICAgICAvLyBBbiA4LWJpdCBSR0Ig
dmFsdWUgd2l0aCBhbHBoYSB0cmFuc3BhcmVuY3ksIGluIHRoZSBmb3JtICNBUkdCLgotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobG93ZXJjYXNlQmFj
a2dyb3VuZFZhbHVlLmxlbmd0aCgpID09IDkgJiYgIShsb3dlcmNhc2VCYWNrZ3JvdW5kVmFsdWVb
MV0gPT0gJ2YnICYmIGxvd2VyY2FzZUJhY2tncm91bmRWYWx1ZVsyXSA9PSAnZicpKSB7Ci0gICAg
ICAgICAgICAvLyBBIDE2LWJpdCBSR0IgdmFsdWUgd2l0aCBhbHBoYSB0cmFuc3BhcmVuY3ksIGlu
IHRoZSBmb3JtICNBQVJSR0dCQi4KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIGlmIChsb3dlcmNhc2VCYWNrZ3JvdW5kVmFsdWUuc3RhcnRzV2l0aCgic2Mj
IikpIHsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gY29tcG9uZW50cyA9IGxvd2VyY2FzZUJhY2tn
cm91bmRWYWx1ZS5zdWJzdHJpbmcoMykuc3BsaXQoJywnKTsKLQotICAgICAgICAvLyBBbiBTY1JH
QiB2YWx1ZSB3aXRoIGFscGhhIHRyYW5zcGFyZW5jeSwgaW4gdGhlIGZvcm0gc2MjQSxSLEcsQi4K
LSAgICAgICAgaWYgKGNvbXBvbmVudHMuc2l6ZSgpID09IDQpIHsKLSAgICAgICAgICAgIGlmIChj
b21wb25lbnRzWzBdLnRvRG91YmxlKCkgPCAxKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChsb3dlcmNhc2VCYWNrZ3JvdW5kVmFsdWUgPT0g
InRyYW5zcGFyZW50IikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBUaGlzIGlzIGFu
IG9wYXF1ZSBjb2xvci4KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKLQotYm9vbCBOZXRz
Y2FwZVBsdWdpbjo6aW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQotewot
ICAgIHVpbnQxNl90IG1vZGUgPSBwYXJhbWV0ZXJzLmlzRnVsbEZyYW1lUGx1Z2luID8gTlBfRlVM
TCA6IE5QX0VNQkVEOwotICAgIAotICAgIG1fc2hvdWxkVXNlTWFudWFsTG9hZGVyID0gcGFyYW1l
dGVycy5zaG91bGRVc2VNYW51YWxMb2FkZXI7Ci0KLSAgICBDU3RyaW5nIG1pbWVUeXBlQ1N0cmlu
ZyA9IHBhcmFtZXRlcnMubWltZVR5cGUudXRmOCgpOwotCi0gICAgQVNTRVJUKHBhcmFtZXRlcnMu
bmFtZXMuc2l6ZSgpID09IHBhcmFtZXRlcnMudmFsdWVzLnNpemUoKSk7Ci0KLSAgICBWZWN0b3I8
Q1N0cmluZz4gcGFyYW1OYW1lczsKLSAgICBWZWN0b3I8Q1N0cmluZz4gcGFyYW1WYWx1ZXM7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLm5hbWVzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIFN0cmluZyBwYXJhbWV0ZXJOYW1lID0gcGFyYW1ldGVycy5uYW1lc1tpXTsKLQot
I2lmIFBMVUdJTl9BUkNISVRFQ1RVUkUoTUFDKQotICAgICAgICBpZiAobV9wbHVnaW5Nb2R1bGUt
PnBsdWdpblF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrczo6V2FudHNMb3dlcmNhc2VQYXJh
bWV0ZXJOYW1lcykpCi0gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lID0gcGFyYW1ldGVyTmFtZS5j
b252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwotI2VuZGlmCi0KLSAgICAgICAgcGFyYW1OYW1lcy5h
cHBlbmQocGFyYW1ldGVyTmFtZS51dGY4KCkpOwotICAgICAgICBwYXJhbVZhbHVlcy5hcHBlbmQo
cGFyYW1ldGVycy52YWx1ZXNbaV0udXRmOCgpKTsKLSAgICB9Ci0KLSNpZiBQTEFURk9STShYMTEp
Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBhcmFtZXRlcnMubWltZVR5
cGUsICJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpKSB7Ci0gICAgICAgIHNpemVfdCB3
bW9kZUluZGV4ID0gcGFyYW1ldGVycy5uYW1lcy5maW5kKCJ3bW9kZSIpOwotICAgICAgICBpZiAo
d21vZGVJbmRleCAhPSBub3RGb3VuZCkgewotICAgICAgICAgICAgLy8gVHJhbnNwYXJlbnQgd2lu
ZG93IG1vZGUgaXMgbm90IHN1cHBvcnRlZCBieSBYMTEgYmFja2VuZC4KLSAgICAgICAgICAgIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJhbWV0ZXJzLnZhbHVlc1t3bW9kZUlu
ZGV4XSwgInRyYW5zcGFyZW50IikKLSAgICAgICAgICAgICAgICB8fCAobV9wbHVnaW5Nb2R1bGUt
PnBsdWdpblF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrczo6Rm9yY2VGbGFzaFdpbmRvd2xl
c3NNb2RlKSAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJhbWV0ZXJzLnZhbHVl
c1t3bW9kZUluZGV4XSwgIndpbmRvdyIpKSkKLSAgICAgICAgICAgICAgICBwYXJhbVZhbHVlc1t3
bW9kZUluZGV4XSA9ICJvcGFxdWUiOwotICAgICAgICB9IGVsc2UgaWYgKG1fcGx1Z2luTW9kdWxl
LT5wbHVnaW5RdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya3M6OkZvcmNlRmxhc2hXaW5kb3ds
ZXNzTW9kZSkpIHsKLSAgICAgICAgICAgIHBhcmFtTmFtZXMuYXBwZW5kKCJ3bW9kZSIpOwotICAg
ICAgICAgICAgcGFyYW1WYWx1ZXMuYXBwZW5kKCJvcGFxdWUiKTsKLSAgICAgICAgfQotICAgIH0K
LSNlbmRpZgotCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBhcmFtZXRl
cnMubWltZVR5cGUsICJhcHBsaWNhdGlvbi94LXdlYmtpdC10ZXN0LW5ldHNjYXBlIikpIHsKLSAg
ICAgICAgcGFyYW1OYW1lcy5hcHBlbmQoIndpbmRvd2VkUGx1Z2luIik7Ci0gICAgICAgIHBhcmFt
VmFsdWVzLmFwcGVuZCgiZmFsc2UiKTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgc3RyaW5ncyB0aGF0
IHRoZXNlIHBvaW50ZXJzIHBvaW50IHRvIGFyZSBrZXB0IGFsaXZlIGJ5IHBhcmFtTmFtZXMgYW5k
IHBhcmFtVmFsdWVzLgotICAgIFZlY3Rvcjxjb25zdCBjaGFyKj4gbmFtZXM7Ci0gICAgVmVjdG9y
PGNvbnN0IGNoYXIqPiB2YWx1ZXM7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbU5h
bWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIG5hbWVzLmFwcGVuZChwYXJhbU5hbWVzW2ldLmRh
dGEoKSk7Ci0gICAgICAgIHZhbHVlcy5hcHBlbmQocGFyYW1WYWx1ZXNbaV0uZGF0YSgpKTsKLSAg
ICB9Ci0KLSNpZiBQTFVHSU5fQVJDSElURUNUVVJFKE1BQykKLSAgICBpZiAobV9wbHVnaW5Nb2R1
bGUtPnBsdWdpblF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrczo6TWFrZU9wYXF1ZVVubGVz
c1RyYW5zcGFyZW50U2lsdmVybGlnaHRCYWNrZ3JvdW5kQXR0cmlidXRlRXhpc3RzKSkgewotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMubmFtZXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJhbWV0
ZXJzLm5hbWVzW2ldLCAiYmFja2dyb3VuZCIpKSB7Ci0gICAgICAgICAgICAgICAgc2V0SXNUcmFu
c3BhcmVudChpc1RyYW5zcGFyZW50U2lsdmVybGlnaHRCYWNrZ3JvdW5kVmFsdWUocGFyYW1ldGVy
cy52YWx1ZXNbaV0uY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9sYXllckhv
c3RpbmdNb2RlID0gcGFyYW1ldGVycy5sYXllckhvc3RpbmdNb2RlOwotI2VuZGlmCi0KLSAgICBw
bGF0Zm9ybVByZUluaXRpYWxpemUoKTsKLQotICAgIE5ldHNjYXBlUGx1Z2luKiBwcmV2aW91c05Q
UE5ld1BsdWdpbiA9IGN1cnJlbnROUFBOZXdQbHVnaW47Ci0gICAgCi0gICAgbV9pbk5QUE5ldyA9
IHRydWU7Ci0gICAgY3VycmVudE5QUE5ld1BsdWdpbiA9IHRoaXM7Ci0KLSAgICBOUEVycm9yIGVy
cm9yID0gTlBQX05ldyhjb25zdF9jYXN0PGNoYXIqPihtaW1lVHlwZUNTdHJpbmcuZGF0YSgpKSwg
bW9kZSwgbmFtZXMuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2Nh
c3Q8Y2hhcioqPihuYW1lcy5kYXRhKCkpLCBjb25zdF9jYXN0PGNoYXIqKj4odmFsdWVzLmRhdGEo
KSksIDApOwotCi0gICAgbV9pbk5QUE5ldyA9IGZhbHNlOwotICAgIGN1cnJlbnROUFBOZXdQbHVn
aW4gPSBwcmV2aW91c05QUE5ld1BsdWdpbjsKLQotICAgIGlmIChlcnJvciAhPSBOUEVSUl9OT19F
UlJPUikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9pc1N0YXJ0ZWQgPSB0cnVlOwot
Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IGNvcnJlY3QgaW4gYWxsIGNhc2VzLgotICAgIG1f
bnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOwotCi0gICAgaWYgKCFwbGF0Zm9y
bVBvc3RJbml0aWFsaXplKCkpIHsKLSAgICAgICAgZGVzdHJveSgpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gTG9hZCB0aGUgc3JjIFVSTCBpZiBuZWVkZWQuCi0gICAg
aWYgKCFwYXJhbWV0ZXJzLnNob3VsZFVzZU1hbnVhbExvYWRlciAmJiAhcGFyYW1ldGVycy51cmwu
aXNFbXB0eSgpICYmIHNob3VsZExvYWRTcmNVUkwoKSkKLSAgICAgICAgbG9hZFVSTCgiR0VUIiwg
cGFyYW1ldGVycy51cmwuc3RyaW5nKCksIFN0cmluZygpLCBIVFRQSGVhZGVyTWFwKCksIFZlY3Rv
cjx1aW50OF90PigpLCBmYWxzZSwgMCk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0gICAg
Ci12b2lkIE5ldHNjYXBlUGx1Z2luOjpkZXN0cm95KCkKLXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0
ZWQpOwotCi0gICAgLy8gU3RvcCBhbGwgc3RyZWFtcy4KLSAgICBzdG9wQWxsU3RyZWFtcygpOwot
Ci0jaWYgIVBMVUdJTl9BUkNISVRFQ1RVUkUoTUFDKSAmJiAhUExVR0lOX0FSQ0hJVEVDVFVSRShV
TklYKQotICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsKLSAgICBjYWxsU2V0V2luZG93KCk7Ci0j
ZW5kaWYKLQotICAgIE5QUF9EZXN0cm95KDApOwotCi0gICAgbV9pc1N0YXJ0ZWQgPSBmYWxzZTsK
LQotICAgIHBsYXRmb3JtRGVzdHJveSgpOwotCi0gICAgbV90aW1lcnMuY2xlYXIoKTsKLX0KLSAg
ICAKLXZvaWQgTmV0c2NhcGVQbHVnaW46OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7Ci0g
ICAgCi0gICAgcGxhdGZvcm1QYWludChjb250ZXh0LCBkaXJ0eVJlY3QpOwotfQotCi1SZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBOZXRzY2FwZVBsdWdpbjo6c25hcHNob3QoKQotewotICAgIGlmICgh
c3VwcG9ydHNTbmFwc2hvdHRpbmcoKSB8fCBtX3BsdWdpblNpemUuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7Ci0KLSAgICBJbnRT
aXplIGJhY2tpbmdTdG9yZVNpemUgPSBtX3BsdWdpblNpemU7Ci0gICAgYmFja2luZ1N0b3JlU2l6
ZS5zY2FsZShjb250ZW50c1NjYWxlRmFjdG9yKCkpOwotCi0gICAgYXV0byBiaXRtYXAgPSBTaGFy
ZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShiYWNraW5nU3RvcmVTaXplLCB7IH0pOwotICAg
IGF1dG8gY29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgaWYg
KCFjb250ZXh0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgcmVhbGx5IGNhbGwgYXBwbHlEZXZpY2VTY2FsZUZhY3RvciBpbnN0ZWFkIG9mIHNjYWxl
LCBidXQgdGhhdCBlbmRzIHVwIGNhbGxpbmcgaW50byBXS1NJCi0gICAgLy8gd2hpY2ggd2UgY3Vy
cmVudGx5IGRvbid0IGhhdmUgaW5pdGlhdGVkIGluIHRoZSBwbHVnLWluIHByb2Nlc3MuCi0gICAg
Y29udGV4dC0+c2NhbGUoY29udGVudHNTY2FsZUZhY3RvcigpKTsKLQotICAgIHBsYXRmb3JtUGFp
bnQoKmNvbnRleHQsIEludFJlY3QoSW50UG9pbnQoKSwgbV9wbHVnaW5TaXplKSwgdHJ1ZSk7Ci0K
LSAgICByZXR1cm4gYml0bWFwOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjppc1RyYW5zcGFy
ZW50KCkKLXsKLSAgICByZXR1cm4gbV9pc1RyYW5zcGFyZW50OwotfQotCi1ib29sIE5ldHNjYXBl
UGx1Z2luOjp3YW50c1doZWVsRXZlbnRzKCkKLXsKLSAgICByZXR1cm4gbV9wbHVnaW5Nb2R1bGUt
PnBsdWdpblF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrczo6V2FudHNXaGVlbEV2ZW50cyk7
Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46Omdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IEludFNp
emUmIHBsdWdpblNpemUsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pCi17Ci0gICAgQVNTRVJUKG1faXNTdGFy
dGVkKTsKLQotICAgIGlmIChwbHVnaW5TaXplID09IG1fcGx1Z2luU2l6ZSAmJiBtX2NsaXBSZWN0
ID09IGNsaXBSZWN0ICYmIG1fcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybSA9PSBwbHVnaW5Ub1Jv
b3RWaWV3VHJhbnNmb3JtKSB7Ci0gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCi0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBib29sIHNob3VsZENhbGxTZXRXaW5kb3cgPSB0cnVlOwotCi0g
ICAgLy8gSWYgdGhlIHBsdWctaW4gZG9lc24ndCB3YW50IHdpbmRvdyByZWxhdGl2ZSBjb29yZGlu
YXRlcywgd2UgZG9uJ3QgbmVlZCB0byBjYWxsIHNldFdpbmRvdyB1bmxlc3MgaXRzIHNpemUgb3Ig
Y2xpcCByZWN0IGNoYW5nZXMuCi0gICAgaWYgKG1faGFzQ2FsbGVkU2V0V2luZG93ICYmIHdhbnRz
UGx1Z2luUmVsYXRpdmVOUFdpbmRvd0Nvb3JkaW5hdGVzKCkgJiYgbV9wbHVnaW5TaXplID09IHBs
dWdpblNpemUgJiYgbV9jbGlwUmVjdCA9PSBjbGlwUmVjdCkKLSAgICAgICAgc2hvdWxkQ2FsbFNl
dFdpbmRvdyA9IGZhbHNlOwotCi0gICAgbV9wbHVnaW5TaXplID0gcGx1Z2luU2l6ZTsKLSAgICBt
X2NsaXBSZWN0ID0gY2xpcFJlY3Q7Ci0gICAgbV9wbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtID0g
cGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybTsKLQotI2lmIFBMVUdJTl9BUkNISVRFQ1RVUkUoVU5J
WCkKLSAgICBJbnRQb2ludCBmcmFtZVJlY3RMb2NhdGlvbkluV2luZG93Q29vcmRpbmF0ZXMgPSBt
X3BsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0ubWFwUG9pbnQoSW50UG9pbnQoKSk7Ci0gICAgbV9m
cmFtZVJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzID0gSW50UmVjdChmcmFtZVJlY3RMb2NhdGlvbklu
V2luZG93Q29vcmRpbmF0ZXMsIG1fcGx1Z2luU2l6ZSk7Ci0jZW5kaWYKLQotICAgIHBsYXRmb3Jt
R2VvbWV0cnlEaWRDaGFuZ2UoKTsKLQotICAgIGlmICghc2hvdWxkQ2FsbFNldFdpbmRvdykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgY2FsbFNldFdpbmRvdygpOwotfQotCi12b2lkIE5ldHNjYXBl
UGx1Z2luOjp2aXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wgaXNWaXNpYmxlKQotewotICAgIEFTU0VS
VChtX2lzU3RhcnRlZCk7Ci0KLSAgICBpZiAobV9pc1Zpc2libGUgPT0gaXNWaXNpYmxlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2lzVmlzaWJsZSA9IGlzVmlzaWJsZTsKLSAgICBwbGF0Zm9y
bVZpc2liaWxpdHlEaWRDaGFuZ2UoKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6ZnJhbWVE
aWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCkKLXsKLSAgICBBU1NFUlQobV9pc1N0
YXJ0ZWQpOwotICAgIAotICAgIGF1dG8gbm90aWZpY2F0aW9uID0gbV9wZW5kaW5nVVJMTm90aWZp
Y2F0aW9ucy50YWtlKHJlcXVlc3RJRCk7Ci0gICAgaWYgKG5vdGlmaWNhdGlvbi5maXJzdC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5QUF9VUkxOb3RpZnkobm90aWZpY2F0aW9u
LmZpcnN0LnV0ZjgoKS5kYXRhKCksIE5QUkVTX0RPTkUsIG5vdGlmaWNhdGlvbi5zZWNvbmQpOwot
fQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpmcmFtZURpZEZhaWwodWludDY0X3QgcmVxdWVzdElE
LCBib29sIHdhc0NhbmNlbGxlZCkKLXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwotICAgIAot
ICAgIGF1dG8gbm90aWZpY2F0aW9uID0gbV9wZW5kaW5nVVJMTm90aWZpY2F0aW9ucy50YWtlKHJl
cXVlc3RJRCk7Ci0gICAgaWYgKG5vdGlmaWNhdGlvbi5maXJzdC5pc051bGwoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIE5QUF9VUkxOb3RpZnkobm90aWZpY2F0aW9uLmZpcnN0LnV0Zjgo
KS5kYXRhKCksIHdhc0NhbmNlbGxlZCA/IE5QUkVTX1VTRVJfQlJFQUsgOiBOUFJFU19ORVRXT1JL
X0VSUiwgbm90aWZpY2F0aW9uLnNlY29uZCk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OmRp
ZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFN0cmluZyYgcmVz
dWx0KQotewotICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7Ci0gICAgCi0gICAgaWYgKE5ldHNjYXBl
UGx1Z2luU3RyZWFtKiBwbHVnaW5TdHJlYW0gPSBzdHJlYW1Gcm9tSUQocmVxdWVzdElEKSkKLSAg
ICAgICAgcGx1Z2luU3RyZWFtLT5zZW5kSmF2YVNjcmlwdFN0cmVhbShyZXN1bHQpOwotfQotCi12
b2lkIE5ldHNjYXBlUGx1Z2luOjpzdHJlYW1XaWxsU2VuZFJlcXVlc3QodWludDY0X3Qgc3RyZWFt
SUQsIGNvbnN0IFVSTCYgcmVxdWVzdFVSTCwgY29uc3QgVVJMJiByZWRpcmVjdFJlc3BvbnNlVVJM
LCBpbnQgcmVkaXJlY3RSZXNwb25zZVN0YXR1cykKLXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQp
OwotCi0gICAgaWYgKE5ldHNjYXBlUGx1Z2luU3RyZWFtKiBwbHVnaW5TdHJlYW0gPSBzdHJlYW1G
cm9tSUQoc3RyZWFtSUQpKQotICAgICAgICBwbHVnaW5TdHJlYW0tPndpbGxTZW5kUmVxdWVzdChy
ZXF1ZXN0VVJMLCByZWRpcmVjdFJlc3BvbnNlVVJMLCByZWRpcmVjdFJlc3BvbnNlU3RhdHVzKTsK
LX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6c3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKHVpbnQ2
NF90IHN0cmVhbUlELCBjb25zdCBVUkwmIHJlc3BvbnNlVVJMLCB1aW50MzJfdCBzdHJlYW1MZW5n
dGgsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmlu
ZyYgaGVhZGVycywgY29uc3QgU3RyaW5nJiAvKiBzdWdnZXN0ZWRGaWxlTmFtZSAqLykKLXsKLSAg
ICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwotICAgIAotICAgIGlmIChOZXRzY2FwZVBsdWdpblN0cmVh
bSogcGx1Z2luU3RyZWFtID0gc3RyZWFtRnJvbUlEKHN0cmVhbUlEKSkKLSAgICAgICAgcGx1Z2lu
U3RyZWFtLT5kaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2VVUkwsIHN0cmVhbUxlbmd0aCwgbGFz
dE1vZGlmaWVkVGltZSwgbWltZVR5cGUsIGhlYWRlcnMpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1
Z2luOjpzdHJlYW1EaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgdWludDhf
dCogYnl0ZXMsIGludCBsZW5ndGgpCi17Ci0gICAgQVNTRVJUKG1faXNTdGFydGVkKTsKLSAgICAK
LSAgICBpZiAoTmV0c2NhcGVQbHVnaW5TdHJlYW0qIHBsdWdpblN0cmVhbSA9IHN0cmVhbUZyb21J
RChzdHJlYW1JRCkpCi0gICAgICAgIHBsdWdpblN0cmVhbS0+ZGlkUmVjZWl2ZURhdGEoYnl0ZXMs
IGxlbmd0aCk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OnN0cmVhbURpZEZpbmlzaExvYWRp
bmcodWludDY0X3Qgc3RyZWFtSUQpCi17Ci0gICAgQVNTRVJUKG1faXNTdGFydGVkKTsKLSAgICAK
LSAgICBpZiAoTmV0c2NhcGVQbHVnaW5TdHJlYW0qIHBsdWdpblN0cmVhbSA9IHN0cmVhbUZyb21J
RChzdHJlYW1JRCkpCi0gICAgICAgIHBsdWdpblN0cmVhbS0+ZGlkRmluaXNoTG9hZGluZygpOwot
fQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpzdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0cmVhbUlE
LCBib29sIHdhc0NhbmNlbGxlZCkKLXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwotICAgIAot
ICAgIGlmIChOZXRzY2FwZVBsdWdpblN0cmVhbSogcGx1Z2luU3RyZWFtID0gc3RyZWFtRnJvbUlE
KHN0cmVhbUlEKSkKLSAgICAgICAgcGx1Z2luU3RyZWFtLT5kaWRGYWlsKHdhc0NhbmNlbGxlZCk7
Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVSZXNwb25z
ZShjb25zdCBVUkwmIHJlc3BvbnNlVVJMLCB1aW50MzJfdCBzdHJlYW1MZW5ndGgsIHVpbnQzMl90
IGxhc3RNb2RpZmllZFRpbWUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgaGVh
ZGVycywgY29uc3QgU3RyaW5nJiAvKiBzdWdnZXN0ZWRGaWxlTmFtZSAqLykKLXsKLSAgICBBU1NF
UlQobV9pc1N0YXJ0ZWQpOwotICAgIEFTU0VSVChtX3Nob3VsZFVzZU1hbnVhbExvYWRlcik7Ci0g
ICAgQVNTRVJUKCFtX21hbnVhbFN0cmVhbSk7Ci0gICAgCi0gICAgbV9tYW51YWxTdHJlYW0gPSBO
ZXRzY2FwZVBsdWdpblN0cmVhbTo6Y3JlYXRlKCp0aGlzLCAwLCByZXNwb25zZVVSTC5zdHJpbmco
KSwgZmFsc2UsIDApOwotICAgIG1fbWFudWFsU3RyZWFtLT5kaWRSZWNlaXZlUmVzcG9uc2UocmVz
cG9uc2VVUkwsIHN0cmVhbUxlbmd0aCwgbGFzdE1vZGlmaWVkVGltZSwgbWltZVR5cGUsIGhlYWRl
cnMpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjptYW51YWxTdHJlYW1EaWRSZWNlaXZlRGF0
YShjb25zdCB1aW50OF90KiBieXRlcywgaW50IGxlbmd0aCkKLXsKLSAgICBBU1NFUlQobV9pc1N0
YXJ0ZWQpOwotICAgIEFTU0VSVChtX3Nob3VsZFVzZU1hbnVhbExvYWRlcik7Ci0gICAgQVNTRVJU
KG1fbWFudWFsU3RyZWFtKTsKLQotICAgIG1fbWFudWFsU3RyZWFtLT5kaWRSZWNlaXZlRGF0YShi
eXRlcywgbGVuZ3RoKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6bWFudWFsU3RyZWFtRGlk
RmluaXNoTG9hZGluZygpCi17Ci0gICAgQVNTRVJUKG1faXNTdGFydGVkKTsKLSAgICBBU1NFUlQo
bV9zaG91bGRVc2VNYW51YWxMb2FkZXIpOwotICAgIEFTU0VSVChtX21hbnVhbFN0cmVhbSk7Ci0K
LSAgICBtX21hbnVhbFN0cmVhbS0+ZGlkRmluaXNoTG9hZGluZygpOwotfQotCi12b2lkIE5ldHNj
YXBlUGx1Z2luOjptYW51YWxTdHJlYW1EaWRGYWlsKGJvb2wgd2FzQ2FuY2VsbGVkKQotewotICAg
IEFTU0VSVChtX2lzU3RhcnRlZCk7Ci0gICAgQVNTRVJUKG1fc2hvdWxkVXNlTWFudWFsTG9hZGVy
KTsKLQotICAgIGlmICghbV9tYW51YWxTdHJlYW0pCi0gICAgICAgIHJldHVybjsKLSAgICBtX21h
bnVhbFN0cmVhbS0+ZGlkRmFpbCh3YXNDYW5jZWxsZWQpOwotfQotCi1ib29sIE5ldHNjYXBlUGx1
Z2luOjpoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCi17
Ci0gICAgQVNTRVJUKG1faXNTdGFydGVkKTsKLSAgICAKLSAgICByZXR1cm4gcGxhdGZvcm1IYW5k
bGVNb3VzZUV2ZW50KG1vdXNlRXZlbnQpOwotfQotICAgIAotYm9vbCBOZXRzY2FwZVBsdWdpbjo6
aGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQotewotICAg
IEFTU0VSVChtX2lzU3RhcnRlZCk7Ci0KLSAgICByZXR1cm4gcGxhdGZvcm1IYW5kbGVXaGVlbEV2
ZW50KHdoZWVsRXZlbnQpOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjpoYW5kbGVNb3VzZUVu
dGVyRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCkKLXsKLSAgICBBU1NFUlQo
bV9pc1N0YXJ0ZWQpOwotCi0gICAgcmV0dXJuIHBsYXRmb3JtSGFuZGxlTW91c2VFbnRlckV2ZW50
KG1vdXNlRXZlbnQpOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjpoYW5kbGVNb3VzZUxlYXZl
RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCkKLXsKLSAgICBBU1NFUlQobV9p
c1N0YXJ0ZWQpOwotCi0gICAgcmV0dXJuIHBsYXRmb3JtSGFuZGxlTW91c2VMZWF2ZUV2ZW50KG1v
dXNlRXZlbnQpOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjpoYW5kbGVDb250ZXh0TWVudUV2
ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKQotewotICAgIC8vIFdlIGRvbid0IGtub3cgaWYgdGhl
IHBsdWctaW4gaGFzIGhhbmRsZWQgbW91c2Vkb3duIGV2ZW50IGJ5IGRpc3BsYXlpbmcgYSBjb250
ZXh0IG1lbnUsIHNvIHdlIG5ldmVyIHdhbnQgV2ViS2l0IHRvIHNob3cgYSBkZWZhdWx0IG9uZS4K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6aGFuZGxlS2V5Ym9h
cmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBrZXlib2FyZEV2ZW50KQotewotICAgIEFT
U0VSVChtX2lzU3RhcnRlZCk7Ci0KLSAgICByZXR1cm4gcGxhdGZvcm1IYW5kbGVLZXlib2FyZEV2
ZW50KGtleWJvYXJkRXZlbnQpOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjpoYW5kbGVFZGl0
aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIC8qIGNvbW1hbmROYW1lICovLCBjb25zdCBTdHJpbmcm
IC8qIGFyZ3VtZW50ICovKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBOZXRzY2Fw
ZVBsdWdpbjo6aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3QgU3RyaW5nJiAvKiBjb21tYW5k
TmFtZSAqLykKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46
OnNob3VsZEFsbG93U2NyaXB0aW5nKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBO
ZXRzY2FwZVBsdWdpbjo6c2hvdWxkQWxsb3dOYXZpZ2F0aW9uRnJvbURyYWdzKCkKLXsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46OmhhbmRsZXNQYWdlU2NhbGVG
YWN0b3IoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBOZXRzY2FwZVBs
dWdpbjo6c2V0Rm9jdXMoYm9vbCBoYXNGb2N1cykKLXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQp
OwotCi0gICAgcGxhdGZvcm1TZXRGb2N1cyhoYXNGb2N1cyk7Ci19Ci0KLU5QT2JqZWN0KiBOZXRz
Y2FwZVBsdWdpbjo6cGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0KCkKLXsKLSAgICBBU1NFUlQobV9p
c1N0YXJ0ZWQpOwotICAgIE5QT2JqZWN0KiBzY3JpcHRhYmxlTlBPYmplY3QgPSAwOwotICAgIAot
ICAgIGlmIChOUFBfR2V0VmFsdWUoTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCwgJnNjcmlw
dGFibGVOUE9iamVjdCkgIT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAgIHJldHVybiAwOwotCi0j
aWYgUExVR0lOX0FSQ0hJVEVDVFVSRShNQUMpCi0gICAgaWYgKG1fcGx1Z2luTW9kdWxlLT5wbHVn
aW5RdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya3M6OlJldHVybnNOb25SZXRhaW5lZFNjcmlw
dGFibGVOUE9iamVjdCkpCi0gICAgICAgIHJldGFpbk5QT2JqZWN0KHNjcmlwdGFibGVOUE9iamVj
dCk7ICAgICAgICAKLSNlbmRpZiAgICAKLQotICAgIHJldHVybiBzY3JpcHRhYmxlTlBPYmplY3Q7
Ci19Ci0gICAgCi11bnNpZ25lZCBOZXRzY2FwZVBsdWdpbjo6Y291bnRGaW5kTWF0Y2hlcyhjb25z
dCBTdHJpbmcmLCBXZWJDb3JlOjpGaW5kT3B0aW9ucywgdW5zaWduZWQpCi17Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwg
V2ViQ29yZTo6RmluZE9wdGlvbnMsIHVuc2lnbmVkKQotewotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6Y29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQg
c2NhbGVGYWN0b3IpCi17Ci0gICAgQVNTRVJUKG1faXNTdGFydGVkKTsKLQotI2lmIFBMVUdJTl9B
UkNISVRFQ1RVUkUoTUFDKQotICAgIGRvdWJsZSBjb250ZW50c1NjYWxlRmFjdG9yID0gc2NhbGVG
YWN0b3I7Ci0gICAgTlBQX1NldFZhbHVlKE5QTlZjb250ZW50c1NjYWxlRmFjdG9yLCAmY29udGVu
dHNTY2FsZUZhY3Rvcik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzY2FsZUZhY3Rvcik7Ci0j
ZW5kaWYKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFu
Z2VkKGJvb2wgc3RvcmFnZUJsb2NraW5nRW5hYmxlZCkKLXsKLSAgICBpZiAobV9zdG9yYWdlQmxv
Y2tpbmdTdGF0ZSAhPSBzdG9yYWdlQmxvY2tpbmdFbmFibGVkKSB7Ci0gICAgICAgIG1fc3RvcmFn
ZUJsb2NraW5nU3RhdGUgPSBzdG9yYWdlQmxvY2tpbmdFbmFibGVkOwotICAgICAgICB1cGRhdGVO
UE5Qcml2YXRlTW9kZSgpOwotICAgIH0KLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6cHJpdmF0
ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkKLXsKLSAg
ICBpZiAobV9wcml2YXRlQnJvd3NpbmdTdGF0ZSAhPSBwcml2YXRlQnJvd3NpbmdFbmFibGVkKSB7
Ci0gICAgICAgIG1fcHJpdmF0ZUJyb3dzaW5nU3RhdGUgPSBwcml2YXRlQnJvd3NpbmdFbmFibGVk
OwotICAgICAgICB1cGRhdGVOUE5Qcml2YXRlTW9kZSgpOwotICAgIH0KLX0KLQotdm9pZCBOZXRz
Y2FwZVBsdWdpbjo6dXBkYXRlTlBOUHJpdmF0ZU1vZGUoKQotewotICAgIEFTU0VSVChtX2lzU3Rh
cnRlZCk7Ci0KLSAgICAvLyBGcm9tIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9QbHVnaW5zOlBy
aXZhdGVNb2RlCi0gICAgLy8gICBXaGVuIHRoZSBicm93c2VyIHR1cm5zIHByaXZhdGUgbW9kZSBv
biBvciBvZmYgaXQgd2lsbCBjYWxsIE5QUF9TZXRWYWx1ZSBmb3IgIk5QTlZwcml2YXRlTW9kZUJv
b2wiIAotICAgIC8vICAgKGFzc2lnbmVkIGVudW0gdmFsdWUgMTgpIHdpdGggYSBwb2ludGVyIHRv
IGFuIE5QQm9vbCB2YWx1ZSBvbiBhbGwgYXBwbGljYWJsZSBpbnN0YW5jZXMuCi0gICAgLy8gICBQ
bHVnaW5zIHNob3VsZCBjaGVjayB0aGUgYm9vbGVhbiB2YWx1ZSBwb2ludGVkIHRvLCBub3QgdGhl
IHBvaW50ZXIgaXRzZWxmLiAKLSAgICAvLyAgIFRoZSB2YWx1ZSB3aWxsIGJlIHRydWUgd2hlbiBw
cml2YXRlIG1vZGUgaXMgb24uCi0gICAgTlBCb29sIHZhbHVlID0gbV9wcml2YXRlQnJvd3NpbmdT
dGF0ZSB8fCBtX3N0b3JhZ2VCbG9ja2luZ1N0YXRlOwotICAgIE5QUF9TZXRWYWx1ZShOUE5WcHJp
dmF0ZU1vZGVCb29sLCAmdmFsdWUpOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjpnZXRGb3Jt
VmFsdWUoU3RyaW5nJiBmb3JtVmFsdWUpCi17Ci0gICAgQVNTRVJUKG1faXNTdGFydGVkKTsKLQot
ICAgIGNoYXIqIGZvcm1WYWx1ZVN0cmluZyA9IDA7Ci0gICAgaWYgKE5QUF9HZXRWYWx1ZShOUFBW
Zm9ybVZhbHVlLCAmZm9ybVZhbHVlU3RyaW5nKSAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgZm9ybVZhbHVlID0gU3RyaW5nOjpmcm9tVVRGOChmb3JtVmFs
dWVTdHJpbmcpOwotCi0gICAgLy8gVGhlIHBsdWctaW4gYWxsb2NhdGVzIHRoZSBmb3JtIHZhbHVl
IHN0cmluZyB3aXRoIE5QTl9NZW1BbGxvYyBzbyBpdCBuZWVkcyB0byBiZSBmcmVlZCB3aXRoIE5Q
Tl9NZW1GcmVlLgotICAgIG5wbk1lbUZyZWUoZm9ybVZhbHVlU3RyaW5nKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6aGFuZGxlU2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1TY3Jv
bGxiYXIqIE5ldHNjYXBlUGx1Z2luOjpob3Jpem9udGFsU2Nyb2xsYmFyKCkKLXsKLSAgICByZXR1
cm4gMDsKLX0KLQotU2Nyb2xsYmFyKiBOZXRzY2FwZVBsdWdpbjo6dmVydGljYWxTY3JvbGxiYXIo
KQotewotICAgIHJldHVybiAwOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjpzdXBwb3J0c1Nu
YXBzaG90dGluZygpIGNvbnN0Ci17Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgcmV0dXJuIG1f
cGx1Z2luTW9kdWxlLT5wbHVnaW5RdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya3M6OlN1cHBv
cnRzU25hcHNob3R0aW5nKTsKLSNlbmRpZgotICAgIHJldHVybiBmYWxzZTsKLX0KLQotUmVmUHRy
PFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gTmV0c2NhcGVQbHVnaW46OmxpdmVSZXNvdXJjZURhdGEo
KSBjb25zdAotewotICAgIHJldHVybiBudWxscHRyOwotfQotCi1JbnRQb2ludCBOZXRzY2FwZVBs
dWdpbjo6Y29udmVydFRvUm9vdFZpZXcoY29uc3QgSW50UG9pbnQmIHBvaW50SW5QbHVnaW5Db29y
ZGluYXRlcykgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3Jt
Lm1hcFBvaW50KHBvaW50SW5QbHVnaW5Db29yZGluYXRlcyk7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQ
bHVnaW46OmNvbnZlcnRGcm9tUm9vdFZpZXcoY29uc3QgSW50UG9pbnQmIHBvaW50SW5Sb290Vmll
d0Nvb3JkaW5hdGVzLCBJbnRQb2ludCYgcG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzKQotewotICAg
IGlmIChhdXRvIGludmVyc2UgPSBtX3BsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0uaW52ZXJzZSgp
KSB7Ci0gICAgICAgIHBvaW50SW5QbHVnaW5Db29yZGluYXRlcyA9IGludmVyc2UudmFsdWUoKS5t
YXBQb2ludChwb2ludEluUm9vdFZpZXdDb29yZGluYXRlcyk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46Om11
dGVkU3RhdGVDaGFuZ2VkKGJvb2wgbXV0ZWQpCi17Ci0gICAgTlBCb29sIHZhbHVlID0gbXV0ZWQ7
Ci0gICAgTlBQX1NldFZhbHVlKE5QTlZtdXRlQXVkaW9Cb29sLCAmdmFsdWUpOwotfQotCi0jaWYg
IVBMQVRGT1JNKENPQ09BKQotICAgIAotdm9pZCBOZXRzY2FwZVBsdWdpbjo6d2luZG93Rm9jdXND
aGFuZ2VkKGJvb2wpCi17Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OndpbmRvd1Zpc2liaWxp
dHlDaGFuZ2VkKGJvb2wpCi17Ci19Ci0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2lu
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1ODJiNjY1MmZhNTAxZDZlNzdkYzI0
MjkwNmI0MWRlYTJiMDVkYzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2Nh
cGVQbHVnaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDM4MCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0j
aW5jbHVkZSAiTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCIKLSNpbmNsdWRlICJQbHVnaW4uaCIKLSNp
bmNsdWRlIDxXZWJDb3JlL0FmZmluZVRyYW5zZm9ybS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1uYW1lc3Bh
Y2UgV1RGIHsKLWNsYXNzIE1hY2hTZW5kUmlnaHQ7Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBIVFRQSGVhZGVyTWFwOwotY2xhc3MgUHJvdGVjdGlvblNw
YWNlOwotY2xhc3MgU2hhcmVkQnVmZmVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xh
c3MgTmV0c2NhcGVQbHVnaW5TdHJlYW07Ci1jbGFzcyBOZXRzY2FwZVBsdWdpblVuaXg7Ci0KLWNs
YXNzIE5ldHNjYXBlUGx1Z2luIDogcHVibGljIFBsdWdpbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gY3JlYXRlKFJlZlB0cjxOZXRzY2FwZVBsdWdpbk1vZHVs
ZT4mJik7Ci0gICAgdmlydHVhbCB+TmV0c2NhcGVQbHVnaW4oKTsKLQotICAgIHN0YXRpYyBSZWZQ
dHI8TmV0c2NhcGVQbHVnaW4+IGZyb21OUFAoTlBQKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQot
ICAgIE5QRXJyb3Igc2V0RHJhd2luZ01vZGVsKE5QRHJhd2luZ01vZGVsKTsKLSAgICBOUEVycm9y
IHNldEV2ZW50TW9kZWwoTlBFdmVudE1vZGVsKTsKLSAgICBOUEJvb2wgY29udmVydFBvaW50KGRv
dWJsZSBzb3VyY2VYLCBkb3VibGUgc291cmNlWSwgTlBDb29yZGluYXRlU3BhY2Ugc291cmNlU3Bh
Y2UsIGRvdWJsZSYgZGVzdFgsIGRvdWJsZSYgZGVzdFksIE5QQ29vcmRpbmF0ZVNwYWNlIGRlc3RT
cGFjZSk7Ci0gICAgTlBFcnJvciBwb3BVcENvbnRleHRNZW51KE5QTWVudSopOwotCi0gICAgdm9p
ZCBzZXRQbHVnaW5SZXR1cm5zTm9ucmV0YWluZWRMYXllcihib29sIHBsdWdpblJldHVybnNOb25y
ZXRhaW5lZExheWVyKSB7IG1fcGx1Z2luUmV0dXJuc05vbnJldGFpbmVkTGF5ZXIgPSBwbHVnaW5S
ZXR1cm5zTm9ucmV0YWluZWRMYXllcjsgfQotICAgIHZvaWQgc2V0UGx1Z2luV2FudHNMZWdhY3lD
b2NvYVRleHRJbnB1dChib29sIHBsdWdpbldhbnRzTGVnYWN5Q29jb2FUZXh0SW5wdXQpIHsgbV9w
bHVnaW5XYW50c0xlZ2FjeUNvY29hVGV4dElucHV0ID0gcGx1Z2luV2FudHNMZWdhY3lDb2NvYVRl
eHRJbnB1dDsgfQotCi0gICAgYm9vbCBoYXNIYW5kbGVkQUtleURvd25FdmVudCgpIGNvbnN0IHsg
cmV0dXJuIG1faGFzSGFuZGxlZEFLZXlEb3duRXZlbnQ7IH0KLQotICAgIGNvbnN0IFdURjo6TWFj
aFNlbmRSaWdodCYgY29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0KCk7Ci0KLSAgICAvLyBDb21w
dXRlcyBhbiBhZmZpbmUgdHJhbnNmb3JtIGZyb20gdGhlIGdpdmVuIGNvb3JkaW5hdGUgc3BhY2Ug
dG8gdGhlIHNjcmVlbiBjb29yZGluYXRlIHNwYWNlLgotICAgIGJvb2wgZ2V0U2NyZWVuVHJhbnNm
b3JtKE5QQ29vcmRpbmF0ZVNwYWNlIHNvdXJjZVNwYWNlLCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zv
cm0mKTsKLSNlbmRpZgotCi0jaWYgUExVR0lOX0FSQ0hJVEVDVFVSRShVTklYKQotICAgIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIGZyYW1lUmVjdEluV2luZG93Q29vcmRpbmF0ZXMoKSBjb25zdCB7
IHJldHVybiBtX2ZyYW1lUmVjdEluV2luZG93Q29vcmRpbmF0ZXM7IH0KLSNlbmRpZgotICAgIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwUmVj
dDsgfQotICAgIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3BsdWdpblNpemU7IH0KLQotICAgIFBsdWdpblF1aXJrcyBxdWlya3MoKSBjb25zdCB7IHJldHVy
biBtX3BsdWdpbk1vZHVsZS0+cGx1Z2luUXVpcmtzKCk7IH0KLQotICAgIHZvaWQgaW52YWxpZGF0
ZShjb25zdCBOUFJlY3QqKTsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogdXNlckFnZW50KE5QUCk7
Ci0gICAgdm9pZCBsb2FkVVJMKGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBTdHJpbmcmIHVy
bFN0cmluZywgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJN
YXAmIGhlYWRlckZpZWxkcywKLSAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBodHRwQm9keSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZmljYXRpb25EYXRh
KTsKLSAgICBOUEVycm9yIGRlc3Ryb3lTdHJlYW0oTlBTdHJlYW0qLCBOUFJlYXNvbik7Ci0gICAg
dm9pZCBzZXRJc1dpbmRvd2VkKGJvb2wpOwotICAgIHZvaWQgc2V0SXNUcmFuc3BhcmVudChib29s
KTsKLSAgICB2b2lkIHNldFN0YXR1c2JhclRleHQoY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGlj
IHZvaWQgc2V0RXhjZXB0aW9uKGNvbnN0IFN0cmluZyYpOwotICAgIGJvb2wgZXZhbHVhdGUoTlBP
YmplY3QqLCBjb25zdCBTdHJpbmcmc2NyaXB0U3RyaW5nLCBOUFZhcmlhbnQqIHJlc3VsdCk7Ci0g
ICAgYm9vbCBpc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQoKTsKLSAgICBib29sIGlzTXV0ZWQoKSBj
b25zdDsKLSAgICBib29sIGlzV2luZG93ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzV2luZG93ZWQ7
IH0KLSAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNWaXNpYmxlOyB9Ci0K
LSAgICBzdGF0aWMgdm9pZCBzZXRTZXRFeGNlcHRpb25GdW5jdGlvbih2b2lkICgqKShjb25zdCBT
dHJpbmcmKSk7Ci0KLSAgICAvLyBUaGVzZSByZXR1cm4gcmV0YWluZWQgb2JqZWN0cy4KLSAgICBO
UE9iamVjdCogd2luZG93U2NyaXB0TlBPYmplY3QoKTsKLSAgICBOUE9iamVjdCogcGx1Z2luRWxl
bWVudE5QT2JqZWN0KCk7Ci0KLSAgICB2b2lkIGNhbmNlbFN0cmVhbUxvYWQoTmV0c2NhcGVQbHVn
aW5TdHJlYW0qKTsKLSAgICB2b2lkIHJlbW92ZVBsdWdpblN0cmVhbShOZXRzY2FwZVBsdWdpblN0
cmVhbSopOwotCi0gICAgYm9vbCBpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCk7Ci0K
LSAgICB2b2lkIHB1c2hQb3B1cHNFbmFibGVkU3RhdGUoYm9vbCBlbmFibGVkKTsKLSAgICB2b2lk
IHBvcFBvcHVwc0VuYWJsZWRTdGF0ZSgpOwotCi0gICAgdm9pZCBwbHVnaW5UaHJlYWRBc3luY0Nh
bGwodm9pZCAoKmZ1bmN0aW9uKSh2b2lkKiksIHZvaWQqIHVzZXJEYXRhKTsKLQotICAgIHVuc2ln
bmVkIHNjaGVkdWxlVGltZXIodW5zaWduZWQgaW50ZXJ2YWwsIGJvb2wgcmVwZWF0LCB2b2lkICgq
dGltZXJGdW5jKShOUFAsIHVuc2lnbmVkIHRpbWVySUQpKTsKLSAgICB2b2lkIHVuc2NoZWR1bGVU
aW1lcih1bnNpZ25lZCB0aW1lcklEKTsKLQotICAgIGRvdWJsZSBjb250ZW50c1NjYWxlRmFjdG9y
KCk7Ci0gICAgU3RyaW5nIHByb3hpZXNGb3JVUkwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOwot
ICAgIFN0cmluZyBjb29raWVzRm9yVVJMKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKLSAgICB2
b2lkIHNldENvb2tpZXNGb3JVUkwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgY29va2llU3RyaW5nKTsKLSAgICBib29sIGdldEF1dGhlbnRpY2F0aW9uSW5mbyhjb25zdCBX
ZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UmLCBTdHJpbmcmIHVzZXJuYW1lLCBTdHJpbmcmIHBhc3N3
b3JkKTsKLQotICAgIHZvaWQgc2V0SXNQbGF5aW5nQXVkaW8oYm9vbCk7Ci0KLSAgICB2b2lkIHJl
Z2lzdGVyUmVkaXJlY3QoTmV0c2NhcGVQbHVnaW5TdHJlYW0qLCBjb25zdCBVUkwmIHJlcXVlc3RV
UkwsIGludCByZWRpcmVjdFJlc3BvbnNlU3RhdHVzLCB2b2lkKiBub3RpZmljYXRpb25EYXRhKTsK
LSAgICB2b2lkIHVybFJlZGlyZWN0UmVzcG9uc2Uodm9pZCogbm90aWZ5RGF0YSwgYm9vbCBhbGxv
dyk7Ci0KLSAgICAvLyBNZW1iZXIgZnVuY3Rpb25zIGZvciBjYWxsaW5nIGludG8gdGhlIHBsdWct
aW4uCi0gICAgTlBFcnJvciBOUFBfTmV3KE5QTUlNRVR5cGUgcGx1Z2luVHlwZSwgdWludDE2X3Qg
bW9kZSwgaW50MTZfdCBhcmdjLCBjaGFyKiBhcmduW10sIGNoYXIqIGFyZ3ZbXSwgTlBTYXZlZERh
dGEqKTsKLSAgICBOUEVycm9yIE5QUF9EZXN0cm95KE5QU2F2ZWREYXRhKiopOwotICAgIE5QRXJy
b3IgTlBQX1NldFdpbmRvdyhOUFdpbmRvdyopOwotICAgIE5QRXJyb3IgTlBQX05ld1N0cmVhbShO
UE1JTUVUeXBlLCBOUFN0cmVhbSosIE5QQm9vbCBzZWVrYWJsZSwgdWludDE2X3QqIHN0eXBlKTsK
LSAgICBOUEVycm9yIE5QUF9EZXN0cm95U3RyZWFtKE5QU3RyZWFtKiwgTlBSZWFzb24pOwotICAg
IHZvaWQgTlBQX1N0cmVhbUFzRmlsZShOUFN0cmVhbSosIGNvbnN0IGNoYXIqIGZpbGVuYW1lKTsK
LSAgICBpbnQzMl90IE5QUF9Xcml0ZVJlYWR5KE5QU3RyZWFtKik7Ci0gICAgaW50MzJfdCBOUFBf
V3JpdGUoTlBTdHJlYW0qLCBpbnQzMl90IG9mZnNldCwgaW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZl
cik7Ci0gICAgaW50MTZfdCBOUFBfSGFuZGxlRXZlbnQodm9pZCogZXZlbnQpOwotICAgIHZvaWQg
TlBQX1VSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIE5QUmVhc29uLCB2b2lkKiBub3RpZnlEYXRh
KTsKLSAgICBib29sIE5QUF9VUkxSZWRpcmVjdE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGludDMy
X3Qgc3RhdHVzLCB2b2lkKiBub3RpZnlEYXRhKTsKLSAgICBOUEVycm9yIE5QUF9HZXRWYWx1ZShO
UFBWYXJpYWJsZSwgdm9pZCAqdmFsdWUpOwotICAgIE5QRXJyb3IgTlBQX1NldFZhbHVlKE5QTlZh
cmlhYmxlLCB2b2lkICp2YWx1ZSk7Ci0KLSAgICAvLyBDb252ZXJ0IHRoZSBnaXZlbiBwb2ludCBm
cm9tIHBsdWctaW4gY29vcmRpbmF0ZXMgdG8gcm9vdCB2aWV3IGNvb3JkaW5hdGVzLgotICAgIFdl
YkNvcmU6OkludFBvaW50IGNvbnZlcnRUb1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTmV0c2NhcGVQbHVn
aW4oUmVmPE5ldHNjYXBlUGx1Z2luTW9kdWxlPiYmKTsKLQotICAgIHZvaWQgY2FsbFNldFdpbmRv
dygpOwotICAgIHZvaWQgY2FsbFNldFdpbmRvd0ludmlzaWJsZSgpOwotICAgIGJvb2wgc2hvdWxk
TG9hZFNyY1VSTCgpOwotICAgIE5ldHNjYXBlUGx1Z2luU3RyZWFtKiBzdHJlYW1Gcm9tSUQodWlu
dDY0X3Qgc3RyZWFtSUQpOwotICAgIHZvaWQgc3RvcEFsbFN0cmVhbXMoKTsKLSAgICBib29sIGFs
bG93UG9wdXBzKCkgY29uc3Q7Ci0KLSAgICBjb25zdCBjaGFyKiB1c2VyQWdlbnQoKTsKLQotICAg
IHZvaWQgcGxhdGZvcm1QcmVJbml0aWFsaXplKCk7Ci0gICAgYm9vbCBwbGF0Zm9ybVBvc3RJbml0
aWFsaXplKCk7Ci0gICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKLSAgICBib29sIHBsYXRmb3Jt
SW52YWxpZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdm9pZCBwbGF0Zm9ybUdl
b21ldHJ5RGlkQ2hhbmdlKCk7Ci0gICAgdm9pZCBwbGF0Zm9ybVZpc2liaWxpdHlEaWRDaGFuZ2Uo
KTsKLSAgICB2b2lkIHBsYXRmb3JtUGFpbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0LCBib29sIGlzU25hcHNob3QgPSBmYWxzZSk7
Ci0KLSAgICBib29sIHBsYXRmb3JtSGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50
Jik7Ci0gICAgYm9vbCBwbGF0Zm9ybUhhbmRsZVdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVu
dCYpOwotICAgIGJvb2wgcGxhdGZvcm1IYW5kbGVNb3VzZUVudGVyRXZlbnQoY29uc3QgV2ViTW91
c2VFdmVudCYpOwotICAgIGJvb2wgcGxhdGZvcm1IYW5kbGVNb3VzZUxlYXZlRXZlbnQoY29uc3Qg
V2ViTW91c2VFdmVudCYpOwotICAgIGJvb2wgcGxhdGZvcm1IYW5kbGVLZXlib2FyZEV2ZW50KGNv
bnN0IFdlYktleWJvYXJkRXZlbnQmKTsKLSAgICB2b2lkIHBsYXRmb3JtU2V0Rm9jdXMoYm9vbCk7
Ci0KLSAgICBzdGF0aWMgYm9vbCB3YW50c1BsdWdpblJlbGF0aXZlTlBXaW5kb3dDb29yZGluYXRl
cygpOwotCi0gICAgLy8gUGx1Z2luCi0gICAgYm9vbCBpbml0aWFsaXplKGNvbnN0IFBhcmFtZXRl
cnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlc3Ryb3koKSBvdmVycmlkZTsKLSAgICB2b2lkIHBh
aW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRp
cnR5UmVjdCkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gc25hcHNob3Qo
KSBvdmVycmlkZTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBQbGF0Zm9ybUxheWVyKiBwbHVn
aW5MYXllcigpIG92ZXJyaWRlOwotI2VuZGlmCi0gICAgYm9vbCBpc1RyYW5zcGFyZW50KCkgb3Zl
cnJpZGU7Ci0gICAgYm9vbCB3YW50c1doZWVsRXZlbnRzKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBn
ZW9tZXRyeURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBwbHVnaW5TaXplLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNm
b3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKSBvdmVycmlkZTsKLSAgICB2b2lkIHZpc2li
aWxpdHlEaWRDaGFuZ2UoYm9vbCBpc1Zpc2libGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZnJhbWVE
aWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBm
cmFtZURpZEZhaWwodWludDY0X3QgcmVxdWVzdElELCBib29sIHdhc0NhbmNlbGxlZCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkaWRFdmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3QgcmVxdWVzdElELCBj
b25zdCBTdHJpbmcmIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJlYW1XaWxsU2VuZFJl
cXVlc3QodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IFVSTCYgcmVxdWVzdFVSTCwgY29uc3QgVVJM
JiByZXNwb25zZVVSTCwgaW50IHJlc3BvbnNlU3RhdHVzKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0
cmVhbURpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgVVJMJiByZXNw
b25zZVVSTCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3Rl
ZEZpbGVOYW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cmVhbURpZFJlY2VpdmVEYXRhKHVpbnQ2
NF90IHN0cmVhbUlELCBjb25zdCB1aW50OF90KiBieXRlcywgaW50IGxlbmd0aCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlEKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHN0cmVhbURpZEZhaWwodWludDY0X3Qgc3RyZWFtSUQsIGJvb2wgd2Fz
Q2FuY2VsbGVkKSBvdmVycmlkZTsKLSAgICB2b2lkIG1hbnVhbFN0cmVhbURpZFJlY2VpdmVSZXNw
b25zZShjb25zdCBVUkwmIHJlc3BvbnNlVVJMLCB1aW50MzJfdCBzdHJlYW1MZW5ndGgsIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGFz
dE1vZGlmaWVkVGltZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBoZWFk
ZXJzLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVOYW1lKSBvdmVycmlkZTsKLSAgICB2b2lk
IG1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBpbnQgbGVu
Z3RoKSBvdmVycmlkZTsKLSAgICB2b2lkIG1hbnVhbFN0cmVhbURpZEZpbmlzaExvYWRpbmcoKSBv
dmVycmlkZTsKLSAgICB2b2lkIG1hbnVhbFN0cmVhbURpZEZhaWwoYm9vbCB3YXNDYW5jZWxsZWQp
IG92ZXJyaWRlOwotICAgIAotICAgIGJvb2wgaGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3Vz
ZUV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYldo
ZWVsRXZlbnQmKSBvdmVycmlkZTsKLSAgICBib29sIGhhbmRsZU1vdXNlRW50ZXJFdmVudChjb25z
dCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYW5kbGVNb3VzZUxlYXZlRXZl
bnQoY29uc3QgV2ViTW91c2VFdmVudCYpIG92ZXJyaWRlOwotICAgIGJvb2wgaGFuZGxlQ29udGV4
dE1lbnVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYW5k
bGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKSBvdmVycmlkZTsKLSAgICB2
b2lkIHNldEZvY3VzKGJvb2wpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBoYW5kbGVFZGl0aW5nQ29t
bWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KSBv
dmVycmlkZTsKLSAgICBib29sIGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYp
IG92ZXJyaWRlOwotCi0gICAgYm9vbCBzaG91bGRBbGxvd1NjcmlwdGluZygpIG92ZXJyaWRlOwot
ICAgIGJvb2wgc2hvdWxkQWxsb3dOYXZpZ2F0aW9uRnJvbURyYWdzKCkgb3ZlcnJpZGU7Ci0gICAg
Ci0gICAgYm9vbCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAg
ICBOUE9iamVjdCogcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0KCkgb3ZlcnJpZGU7Ci0gICAgCi0g
ICAgdW5zaWduZWQgY291bnRGaW5kTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpGaW5k
T3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBmaW5k
U3RyaW5nKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhN
YXRjaENvdW50KSBvdmVycmlkZTsKLQotICAgIHZvaWQgd2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wp
IG92ZXJyaWRlOwotICAgIHZvaWQgd2luZG93VmlzaWJpbGl0eUNoYW5nZWQoYm9vbCkgb3ZlcnJp
ZGU7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICB2b2lkIHdpbmRvd0FuZFZpZXdGcmFtZXND
aGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGlu
YXRlcywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRl
cykgb3ZlcnJpZGU7Ci0KLSAgICB1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRp
ZmllcigpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc2VuZENvbXBsZXhUZXh0SW5wdXQoY29u
c3QgU3RyaW5nJiB0ZXh0SW5wdXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TGF5ZXJIb3N0aW5n
TW9kZShMYXllckhvc3RpbmdNb2RlKSBvdmVycmlkZTsKLQotICAgIHZvaWQgcGx1Z2luRm9jdXNP
cldpbmRvd0ZvY3VzQ2hhbmdlZCgpOwotICAgIHZvaWQgc2V0Q29tcGxleFRleHRJbnB1dEVuYWJs
ZWQoYm9vbCk7Ci0KLSAgICB2b2lkIHVwZGF0ZVBsdWdpbkxheWVyKCk7Ci0jZW5kaWYKLQotICAg
IHZvaWQgY29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQpIG92ZXJyaWRlOwotICAgIHZv
aWQgc3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwotICAgIHZvaWQg
cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwotICAgIGJvb2wgZ2V0
Rm9ybVZhbHVlKFN0cmluZyYgZm9ybVZhbHVlKSBvdmVycmlkZTsKLSAgICBib29sIGhhbmRsZVNj
cm9sbChXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5
KSBvdmVycmlkZTsKLSAgICBXZWJDb3JlOjpTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIo
KSBvdmVycmlkZTsKLSAgICBXZWJDb3JlOjpTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkg
b3ZlcnJpZGU7Ci0KLSAgICBib29sIHN1cHBvcnRzU25hcHNob3R0aW5nKCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0KLSAgICAvLyBDb252ZXJ0IHRoZSBnaXZlbiBwb2ludCBmcm9tIHJvb3QgdmlldyBjb29y
ZGluYXRlcyB0byBwbHVnLWluIGNvb3JkaW5hdGVzLiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwb2lu
dCBjYW4ndCBiZQotICAgIC8vIGNvbnZlcnRlZCAoaWYgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJp
eCBpc24ndCBpbnZlcnRpYmxlKS4KLSAgICBib29sIGNvbnZlcnRGcm9tUm9vdFZpZXcoY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIHBvaW50SW5Sb290Vmlld0Nvb3JkaW5hdGVzLCBXZWJDb3JlOjpJ
bnRQb2ludCYgcG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzKTsKLQotICAgIFJlZlB0cjxXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI+IGxpdmVSZXNvdXJjZURhdGEoKSBjb25zdCBvdmVycmlkZTsKLQotICAg
IGJvb2wgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgU3RyaW5nIGdldFNl
bGVjdGlvblN0cmluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAg
U3RyaW5nIGdldFNlbGVjdGlvbkZvcldvcmRBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQotICAgIGJvb2wgZXhpc3Rp
bmdTZWxlY3Rpb25Db250YWluc1BvaW50KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgdm9pZCBtdXRlZFN0YXRlQ2hhbmdl
ZChib29sKSBvdmVycmlkZTsKLQotICAgIHZvaWQgdXBkYXRlTlBOUHJpdmF0ZU1vZGUoKTsKLQot
ICAgIHVpbnQ2NF90IG1fbmV4dFJlcXVlc3RJRDsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50
NjRfdCwgc3RkOjpwYWlyPFN0cmluZywgdm9pZCo+PiBQZW5kaW5nVVJMTm90aWZ5TWFwOwotICAg
IFBlbmRpbmdVUkxOb3RpZnlNYXAgbV9wZW5kaW5nVVJMTm90aWZpY2F0aW9uczsKLQotICAgIHR5
cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPE5ldHNjYXBlUGx1Z2luU3RyZWFtPj4gU3Ry
ZWFtc01hcDsKLSAgICBTdHJlYW1zTWFwIG1fc3RyZWFtczsKLSAgICBIYXNoTWFwPHZvaWQqLCBz
dGQ6OnBhaXI8UmVmUHRyPE5ldHNjYXBlUGx1Z2luU3RyZWFtPiwgU3RyaW5nPj4gbV9yZWRpcmVj
dHM7Ci0KLSAgICBSZWY8TmV0c2NhcGVQbHVnaW5Nb2R1bGU+IG1fcGx1Z2luTW9kdWxlOwotICAg
IE5QUF90IG1fbnBwOwotICAgIE5QV2luZG93IG1fbnBXaW5kb3c7Ci0KLSAgICBXZWJDb3JlOjpJ
bnRTaXplIG1fcGx1Z2luU2l6ZTsKLQotICAgIC8vIFRoZSBjbGlwIHJlY3QgaW4gcGx1Zy1pbiBj
b29yZGluYXRlcy4KLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fY2xpcFJlY3Q7Ci0KLSAgICAvLyBB
IHRyYW5zZm9ybSB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgZnJvbSByb290IHZpZXcgY29v
cmRpbmF0ZXMgdG8gcGx1Zy1pbiBjb29yZGluYXRlcy4KLSAgICBXZWJDb3JlOjpBZmZpbmVUcmFu
c2Zvcm0gbV9wbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtOwotCi0jaWYgUExVR0lOX0FSQ0hJVEVD
VFVSRShVTklYKQotICAgIFdlYkNvcmU6OkludFJlY3QgbV9mcmFtZVJlY3RJbldpbmRvd0Nvb3Jk
aW5hdGVzOwotI2VuZGlmCi0KLSAgICBDU3RyaW5nIG1fdXNlckFnZW50OwotCi0gICAgYm9vbCBt
X2lzU3RhcnRlZDsKLSAgICBib29sIG1faXNXaW5kb3dlZDsKLSAgICBib29sIG1faXNUcmFuc3Bh
cmVudDsKLSAgICBib29sIG1faW5OUFBOZXc7Ci0gICAgYm9vbCBtX3Nob3VsZFVzZU1hbnVhbExv
YWRlcjsKLSAgICBib29sIG1faGFzQ2FsbGVkU2V0V2luZG93OwotICAgIGJvb2wgbV9pc1Zpc2li
bGU7Ci0KLSAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW5TdHJlYW0+IG1fbWFudWFsU3RyZWFtOwot
ICAgIFZlY3Rvcjxib29sLCA4PiBtX3BvcHVwRW5hYmxlZFN0YXRlczsKLQotICAgIGNsYXNzIFRp
bWVyIHsKLSAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFRpbWVyKTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiB2b2lk
ICgqVGltZXJGdW5jKShOUFAsIHVpbnQzMl90IHRpbWVySUQpOwotCi0gICAgICAgIFRpbWVyKE5l
dHNjYXBlUGx1Z2luKiwgdW5zaWduZWQgdGltZXJJRCwgdW5zaWduZWQgaW50ZXJ2YWwsIGJvb2wg
cmVwZWF0LCBUaW1lckZ1bmMpOwotICAgICAgICB+VGltZXIoKTsKLQotICAgICAgICB2b2lkIHN0
YXJ0KCk7Ci0gICAgICAgIHZvaWQgc3RvcCgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9p
ZCB0aW1lckZpcmVkKCk7Ci0KLSAgICAgICAgLy8gVGhpcyBpcyBhIHdlYWsgcG9pbnRlciBzaW5j
ZSBUaW1lciBvYmplY3RzIGFyZSBkZXN0cm95ZWQgYmVmb3JlIHRoZSBOZXRzY2FwZVBsdWdpbiBv
YmplY3QgaXRzZWxmIGlzIGRlc3Ryb3llZC4KLSAgICAgICAgTmV0c2NhcGVQbHVnaW4qIG1fbmV0
c2NhcGVQbHVnaW47Ci0KLSAgICAgICAgdW5zaWduZWQgbV90aW1lcklEOwotICAgICAgICB1bnNp
Z25lZCBtX2ludGVydmFsOwotICAgICAgICBib29sIG1fcmVwZWF0OwotICAgICAgICBUaW1lckZ1
bmMgbV90aW1lckZ1bmM7Ci0KLSAgICAgICAgUnVuTG9vcDo6VGltZXI8VGltZXI+IG1fdGltZXI7
Ci0gICAgfTsKLSAgICB0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxU
aW1lcj4+IFRpbWVyTWFwOwotICAgIFRpbWVyTWFwIG1fdGltZXJzOwotICAgIHVuc2lnbmVkIG1f
bmV4dFRpbWVySUQ7Ci0KLSAgICBib29sIG1fcHJpdmF0ZUJyb3dzaW5nU3RhdGUgeyBmYWxzZSB9
OwotICAgIGJvb2wgbV9zdG9yYWdlQmxvY2tpbmdTdGF0ZSB7IGZhbHNlIH07Ci0KLSNpZiBQTFVH
SU5fQVJDSElURUNUVVJFKE1BQykKLSAgICBOUERyYXdpbmdNb2RlbCBtX2RyYXdpbmdNb2RlbDsK
LSAgICBOUEV2ZW50TW9kZWwgbV9ldmVudE1vZGVsOwotCi0gICAgUmV0YWluUHRyPFBsYXRmb3Jt
TGF5ZXI+IG1fcGx1Z2luTGF5ZXI7Ci0gICAgYm9vbCBtX3BsdWdpblJldHVybnNOb25yZXRhaW5l
ZExheWVyOwotICAgIExheWVySG9zdGluZ01vZGUgbV9sYXllckhvc3RpbmdNb2RlOwotCi0gICAg
TlBDb2NvYUV2ZW50KiBtX2N1cnJlbnRNb3VzZUV2ZW50OwotCi0gICAgYm9vbCBtX3BsdWdpbkhh
c0ZvY3VzOwotICAgIGJvb2wgbV93aW5kb3dIYXNGb2N1czsKLQotICAgIC8vIFdoZXRoZXIgdGhl
IHBsdWctaW4gd2FudHMgdG8gdXNlIHRoZSBsZWdhY3kgQ29jb2EgdGV4dCBpbnB1dCBoYW5kbGlu
ZyB0aGF0Ci0gICAgLy8gZXhpc3RlZCBpbiBXZWJLaXQxLCBvciB0aGUgdXBkYXRlZCBDb2NvYSB0
ZXh0IGlucHV0IGhhbmRsaW5nIHNwZWNpZmllZCBvbgotICAgIC8vIGh0dHBzOi8vd2lraS5tb3pp
bGxhLm9yZy9OUEFQSTpDb2NvYUV2ZW50TW9kZWwjVGV4dF9JbnB1dAotICAgIGJvb2wgbV9wbHVn
aW5XYW50c0xlZ2FjeUNvY29hVGV4dElucHV0OwotCi0gICAgLy8gV2hldGhlciBjb21wbGV4IHRl
eHQgaW5wdXQgaXMgZW5hYmxlZC4KLSAgICBib29sIG1faXNDb21wbGV4VGV4dElucHV0RW5hYmxl
ZDsKLQotICAgIC8vIFdoZXRoZXIgdGhlIHBsdWctaW4gaGFzIGhhbmRsZWQgYSBrZXlkb3duIGV2
ZW50LiBUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lCi0gICAgLy8gaWYgd2UgY2FuIHRlbGwgdGhl
IHBsdWctaW4gdGhhdCB3ZSBzdXBwb3J0IHRoZSB1cGRhdGVkIENvY29hIHRleHQgaW5wdXQgc3Bl
Y2lmaWNhdGlvbi4KLSAgICBib29sIG1faGFzSGFuZGxlZEFLZXlEb3duRXZlbnQ7Ci0KLSAgICAv
LyBUaGUgbnVtYmVyIG9mIE5QQ29jb2FFdmVudEtleVVwIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBp
Z25vcmVkLgotICAgIHVuc2lnbmVkIG1faWdub3JlTmV4dEtleVVwRXZlbnRDb3VudGVyOwotCi0g
ICAgV2ViQ29yZTo6SW50UmVjdCBtX3dpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlczsKLSAg
ICBXZWJDb3JlOjpJbnRSZWN0IG1fdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlczsKLSNlbGlm
IFBMVUdJTl9BUkNISVRFQ1RVUkUoVU5JWCkKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0c2NhcGVQ
bHVnaW5Vbml4PiBtX2ltcGw7Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAot
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1BMVUdJTihOZXRzY2FwZVBsdWdpbiwgaXNOZXRzY2Fw
ZVBsdWdpbigpKQotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2Fw
ZVBsdWdpbk5vbmUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvTmV0c2NhcGVQbHVnaW5Ob25lLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NWVjNzU0ZTRjZTJmN2ZkYzc0NDNhYmM3ZTlhOGJjYzhkZjRmOTYxNS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbk5vbmUuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpICYmIFBMVUdJTl9BUkNISVRFQ1RV
UkUoVU5TVVBQT1JURUQpCi0KLSNpbmNsdWRlICJOZXRzY2FwZVBsdWdpbi5oIgotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi12b2lkIE5ldHNjYXBlUGx1
Z2luOjpwbGF0Zm9ybVByZUluaXRpYWxpemUoKQotewotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2lu
OjpwbGF0Zm9ybVBvc3RJbml0aWFsaXplKCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgTmV0c2NhcGVQbHVnaW46OnBsYXRmb3JtRGVzdHJveSgpCi17Ci19Ci0KLWJvb2wgTmV0c2Nh
cGVQbHVnaW46OnBsYXRmb3JtSW52YWxpZGF0ZShjb25zdCBJbnRSZWN0JikKLXsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OnBsYXRmb3JtR2VvbWV0cnlEaWRD
aGFuZ2UoKQotewotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpwbGF0Zm9ybVZpc2liaWxpdHlE
aWRDaGFuZ2UoKQotewotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpwbGF0Zm9ybVBhaW50KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmLCBib29sKQotewotfQotCi1ib29sIE5ldHNj
YXBlUGx1Z2luOjpwbGF0Zm9ybUhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYp
Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjpwbGF0Zm9y
bUhhbmRsZVdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYpCi17Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpwbGF0Zm9ybVNldEZvY3VzKGJvb2wpCi17
Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW46OnBsYXRmb3JtSGFuZGxlTW91c2VFbnRlckV2ZW50
KGNvbnN0IFdlYk1vdXNlRXZlbnQmKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBO
ZXRzY2FwZVBsdWdpbjo6cGxhdGZvcm1IYW5kbGVNb3VzZUxlYXZlRXZlbnQoY29uc3QgV2ViTW91
c2VFdmVudCYpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2lu
OjpwbGF0Zm9ybUhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYgZXZl
bnQpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjp3YW50
c1BsdWdpblJlbGF0aXZlTlBXaW5kb3dDb29yZGluYXRlcygpCi17Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpICYmIFBMVUdJTl9BUkNISVRFQ1RVUkUoVU5TVVBQT1JURUQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBs
dWdpblN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2Fw
ZS9OZXRzY2FwZVBsdWdpblN0cmVhbS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGYyNzE3ZWIxNjM2YzkwMThhZjUwNjM5M2NlOTQ2NWNmNzBlZGM1OGIuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5TdHJlYW0uY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMzc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiTmV0c2NhcGVQbHVnaW5TdHJlYW0uaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotCi0jaW5jbHVkZSAiTmV0c2NhcGVQbHVnaW4uaCIKLSNpbmNsdWRlIDx1dGlsaXR5
PgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKLQotTmV0c2NhcGVQbHVnaW5TdHJlYW06Ok5ldHNjYXBlUGx1Z2lu
U3RyZWFtKFJlZjxOZXRzY2FwZVBsdWdpbj4mJiBwbHVnaW4sIHVpbnQ2NF90IHN0cmVhbUlELCBj
b25zdCBTdHJpbmcmIHJlcXVlc3RVUkxTdHJpbmcsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9p
ZCogbm90aWZpY2F0aW9uRGF0YSkKLSAgICA6IG1fcGx1Z2luKFdURk1vdmUocGx1Z2luKSkKLSAg
ICAsIG1fc3RyZWFtSUQoc3RyZWFtSUQpCi0gICAgLCBtX3JlcXVlc3RVUkxTdHJpbmcocmVxdWVz
dFVSTFN0cmluZykKLSAgICAsIG1fc2VuZE5vdGlmaWNhdGlvbihzZW5kTm90aWZpY2F0aW9uKQot
ICAgICwgbV9ub3RpZmljYXRpb25EYXRhKG5vdGlmaWNhdGlvbkRhdGEpCi0gICAgLCBtX25wU3Ry
ZWFtKCkKLSAgICAsIG1fdHJhbnNmZXJNb2RlKE5QX05PUk1BTCkKLSAgICAsIG1fb2Zmc2V0KDAp
Ci0gICAgLCBtX2ZpbGVIYW5kbGUoRmlsZVN5c3RlbTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRs
ZSkKLSAgICAsIG1faXNTdGFydGVkKGZhbHNlKQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgLCBt
X3VybE5vdGlmeUhhc0JlZW5DYWxsZWQoZmFsc2UpCi0jZW5kaWYgICAgCi0gICAgLCBtX2RlbGl2
ZXJ5RGF0YVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJk5ldHNjYXBlUGx1Z2luU3RyZWFt
OjpkZWxpdmVyRGF0YVRvUGx1Z2luKQotICAgICwgbV9zdG9wU3RyZWFtV2hlbkRvbmVEZWxpdmVy
aW5nKGZhbHNlKQotewotfQotCi1OZXRzY2FwZVBsdWdpblN0cmVhbTo6fk5ldHNjYXBlUGx1Z2lu
U3RyZWFtKCkKLXsKLSAgICBBU1NFUlQoIW1faXNTdGFydGVkKTsKLSAgICBBU1NFUlQoIW1fc2Vu
ZE5vdGlmaWNhdGlvbiB8fCBtX3VybE5vdGlmeUhhc0JlZW5DYWxsZWQpOwotICAgIEFTU0VSVCht
X2ZpbGVIYW5kbGUgPT0gRmlsZVN5c3RlbTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSk7Ci19
Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5TdHJlYW06OndpbGxTZW5kUmVxdWVzdChjb25zdCBVUkwm
IHJlcXVlc3RVUkwsIGNvbnN0IFVSTCYgcmVkaXJlY3RSZXNwb25zZVVSTCwgaW50IHJlZGlyZWN0
UmVzcG9uc2VTdGF0dXMpCi17Ci0gICAgUmVmPE5ldHNjYXBlUGx1Z2luU3RyZWFtPiBwcm90ZWN0
KCp0aGlzKTsKLQotICAgIGlmIChyZWRpcmVjdFJlc3BvbnNlU3RhdHVzID49IDMwMCAmJiByZWRp
cmVjdFJlc3BvbnNlU3RhdHVzIDwgNDAwKQotICAgICAgICBtX3BsdWdpbi0+cmVnaXN0ZXJSZWRp
cmVjdCh0aGlzLCByZXF1ZXN0VVJMLCByZWRpcmVjdFJlc3BvbnNlU3RhdHVzLCBtX25vdGlmaWNh
dGlvbkRhdGEpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luU3RyZWFtOjpkaWRSZWNlaXZlUmVz
cG9uc2UoY29uc3QgVVJMJiByZXNwb25zZVVSTCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50
MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJp
bmcmIGhlYWRlcnMpCi17Ci0gICAgLy8gU3RhcnRpbmcgdGhlIHN0cmVhbSBjb3VsZCBjYXVzZSB0
aGUgcGx1Zy1pbiBzdHJlYW0gdG8gZ28gYXdheSBzbyB3ZSBrZWVwIGEgcmVmZXJlbmNlIHRvIGl0
IGhlcmUuCi0gICAgUmVmPE5ldHNjYXBlUGx1Z2luU3RyZWFtPiBwcm90ZWN0KCp0aGlzKTsKLQot
ICAgIHN0YXJ0KHJlc3BvbnNlVVJMLnN0cmluZygpLCBzdHJlYW1MZW5ndGgsIGxhc3RNb2RpZmll
ZFRpbWUsIG1pbWVUeXBlLCBoZWFkZXJzKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpblN0cmVh
bTo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgdWludDhfdCogYnl0ZXMsIGludCBsZW5ndGgpCi17Ci0g
ICAgLy8gRGVsaXZlcmluZyB0aGUgZGF0YSBjb3VsZCBjYXVzZSB0aGUgcGx1Zy1pbiBzdHJlYW0g
dG8gZ28gYXdheSBzbyB3ZSBrZWVwIGEgcmVmZXJlbmNlIHRvIGl0IGhlcmUuCi0gICAgUmVmPE5l
dHNjYXBlUGx1Z2luU3RyZWFtPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIGRlbGl2ZXJEYXRhKGJ5
dGVzLCBsZW5ndGgpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luU3RyZWFtOjpkaWRGaW5pc2hM
b2FkaW5nKCkKLXsKLSAgICAvLyBTdG9wcGluZyB0aGUgc3RyZWFtIGNvdWxkIGNhdXNlIHRoZSBw
bHVnLWluIHN0cmVhbSB0byBnbyBhd2F5IHNvIHdlIGtlZXAgYSByZWZlcmVuY2UgdG8gaXQgaGVy
ZS4KLSAgICBSZWY8TmV0c2NhcGVQbHVnaW5TdHJlYW0+IHByb3RlY3QoKnRoaXMpOwotCi0gICAg
c3RvcChOUFJFU19ET05FKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpblN0cmVhbTo6ZGlkRmFp
bChib29sIHdhc0NhbmNlbGxlZCkKLXsKLSAgICAvLyBTdG9wcGluZyB0aGUgc3RyZWFtIGNvdWxk
IGNhdXNlIHRoZSBwbHVnLWluIHN0cmVhbSB0byBnbyBhd2F5IHNvIHdlIGtlZXAgYSByZWZlcmVu
Y2UgdG8gaXQgaGVyZS4KLSAgICBSZWY8TmV0c2NhcGVQbHVnaW5TdHJlYW0+IHByb3RlY3QoKnRo
aXMpOwotCi0gICAgc3RvcCh3YXNDYW5jZWxsZWQgPyBOUFJFU19VU0VSX0JSRUFLIDogTlBSRVNf
TkVUV09SS19FUlIpOwotfQotICAgIAotdm9pZCBOZXRzY2FwZVBsdWdpblN0cmVhbTo6c2VuZEph
dmFTY3JpcHRTdHJlYW0oY29uc3QgU3RyaW5nJiByZXN1bHQpCi17Ci0gICAgLy8gc3RhcnRpbmcg
dGhlIHN0cmVhbSBvciBkZWxpdmVyaW5nIHRoZSBkYXRhIHRvIGl0IG1pZ2h0IGNhdXNlIHRoZSBw
bHVnLWluIHN0cmVhbSB0byBnbyBhd2F5LCBzbyB3ZSBrZWVwCi0gICAgLy8gYSByZWZlcmVuY2Ug
dG8gaXQgaGVyZS4KLSAgICBSZWY8TmV0c2NhcGVQbHVnaW5TdHJlYW0+IHByb3RlY3QoKnRoaXMp
OwotCi0gICAgQ1N0cmluZyByZXN1bHRDU3RyaW5nID0gcmVzdWx0LnV0ZjgoKTsKLSAgICBpZiAo
cmVzdWx0Q1N0cmluZy5pc051bGwoKSkgewotICAgICAgICAvLyBUaGVyZSB3YXMgYW4gZXJyb3Ig
ZXZhbHVhdGluZyB0aGUgSmF2YVNjcmlwdCwgY2FsbCBOUFBfVVJMTm90aWZ5IGlmIG5lZWRlZCBh
bmQgdGhlbiBkZXN0cm95IHRoZSBzdHJlYW0uCi0gICAgICAgIG5vdGlmeUFuZERlc3Ryb3lTdHJl
YW0oTlBSRVNfTkVUV09SS19FUlIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KCFzdGFydChtX3JlcXVlc3RVUkxTdHJpbmcsIHJlc3VsdENTdHJpbmcubGVuZ3RoKCksIDAsICJ0
ZXh0L3BsYWluIiwgIiIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkZWxpdmVyRGF0YShyZXN1
bHRDU3RyaW5nLmRhdGFBc1VJbnQ4UHRyKCksIHJlc3VsdENTdHJpbmcubGVuZ3RoKCkpOwotICAg
IHN0b3AoTlBSRVNfRE9ORSk7Ci19Ci0KLU5QRXJyb3IgTmV0c2NhcGVQbHVnaW5TdHJlYW06OmRl
c3Ryb3koTlBSZWFzb24gcmVhc29uKQotewotICAgIC8vIEl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0
byBjYWxsIE5QTl9EZXN0cm95U3RyZWFtIG9uIGEgc3RyZWFtIHRoYXQgaGFzbid0IGJlZW4gc3Rh
cnRlZCB5ZXQuCi0gICAgaWYgKCFtX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuIE5QRVJSX0dF
TkVSSUNfRVJST1I7Ci0KLSAgICAvLyBJdCBpc24ndCByZWFsbHkgdmFsaWQgZm9yIGEgcGx1Zy1p
biB0byBjYWxsIE5QTl9EZXN0cm95U3RyZWFtIHdpdGggTlBSRVNfRE9ORS4KLSAgICAvLyAoQXQg
bGVhc3Qgbm90IGZvciBicm93c2VyIGluaXRpYXRlZCBzdHJlYW1zLCBhbmQgd2UgZG9uJ3Qgc3Vw
cG9ydCBwbHVnLWluIGluaXRpYXRlZCBzdHJlYW1zKS4KLSAgICBpZiAocmVhc29uID09IE5QUkVT
X0RPTkUpCi0gICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOwotCi0gICAgY2FuY2Vs
KCk7Ci0gICAgc3RvcChyZWFzb24pOwotICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLX0KLQot
c3RhdGljIGJvb2wgaXNTdXBwb3J0ZWRUcmFuc2Zlck1vZGUodWludDE2X3QgdHJhbnNmZXJNb2Rl
KQotewotICAgIHN3aXRjaCAodHJhbnNmZXJNb2RlKSB7Ci0gICAgY2FzZSBOUF9BU0ZJTEVPTkxZ
OgotICAgIGNhc2UgTlBfQVNGSUxFOgotICAgIGNhc2UgTlBfTk9STUFMOgotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAvLyBGSVhNRTogV2UgZG9uJ3Qgc3VwcG9ydCBzZWVrYWJsZSBzdHJlYW1z
LgotICAgIGNhc2UgTlBfU0VFSzoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLSAgICAKLWJvb2wg
TmV0c2NhcGVQbHVnaW5TdHJlYW06OnN0YXJ0KGNvbnN0IFN0cmluZyYgcmVzcG9uc2VVUkxTdHJp
bmcsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBoZWFkZXJzKQotewotICAgIG1fcmVz
cG9uc2VVUkwgPSByZXNwb25zZVVSTFN0cmluZy51dGY4KCk7Ci0gICAgbV9taW1lVHlwZSA9IG1p
bWVUeXBlLnV0ZjgoKTsKLSAgICBtX2hlYWRlcnMgPSBoZWFkZXJzLnV0ZjgoKTsKLQotICAgIG1f
bnBTdHJlYW0ubmRhdGEgPSB0aGlzOwotICAgIG1fbnBTdHJlYW0udXJsID0gbV9yZXNwb25zZVVS
TC5kYXRhKCk7Ci0gICAgbV9ucFN0cmVhbS5lbmQgPSBzdHJlYW1MZW5ndGg7Ci0gICAgbV9ucFN0
cmVhbS5sYXN0bW9kaWZpZWQgPSBsYXN0TW9kaWZpZWRUaW1lOwotICAgIG1fbnBTdHJlYW0ubm90
aWZ5RGF0YSA9IG1fbm90aWZpY2F0aW9uRGF0YTsKLSAgICBtX25wU3RyZWFtLmhlYWRlcnMgPSBt
X2hlYWRlcnMubGVuZ3RoKCkgPT0gMCA/IDAgOiBtX2hlYWRlcnMuZGF0YSgpOwotCi0gICAgTlBF
cnJvciBlcnJvciA9IG1fcGx1Z2luLT5OUFBfTmV3U3RyZWFtKGNvbnN0X2Nhc3Q8Y2hhcio+KG1f
bWltZVR5cGUuZGF0YSgpKSwgJm1fbnBTdHJlYW0sIGZhbHNlLCAmbV90cmFuc2Zlck1vZGUpOwot
ICAgIGlmIChlcnJvciAhPSBOUEVSUl9OT19FUlJPUikgewotICAgICAgICAvLyBXZSBmYWlsZWQg
dG8gc3RhcnQgdGhlIHN0cmVhbSwgY2FuY2VsIHRoZSBsb2FkIGFuZCBkZXN0cm95IGl0LgotICAg
ICAgICBjYW5jZWwoKTsKLSAgICAgICAgbm90aWZ5QW5kRGVzdHJveVN0cmVhbShOUFJFU19ORVRX
T1JLX0VSUik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBXZSBzdWNj
ZXNzZnVsbHkgc3RhcnRlZCB0aGUgc3RyZWFtLgotICAgIG1faXNTdGFydGVkID0gdHJ1ZTsKLQot
ICAgIGlmICghaXNTdXBwb3J0ZWRUcmFuc2Zlck1vZGUobV90cmFuc2Zlck1vZGUpKSB7Ci0gICAg
ICAgIC8vIENhbmNlbCB0aGUgbG9hZCBhbmQgc3RvcCB0aGUgc3RyZWFtLgotICAgICAgICBjYW5j
ZWwoKTsKLSAgICAgICAgc3RvcChOUFJFU19ORVRXT1JLX0VSUik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdp
blN0cmVhbTo6ZGVsaXZlckRhdGEoY29uc3QgdWludDhfdCogYnl0ZXMsIGludCBsZW5ndGgpCi17
Ci0gICAgQVNTRVJUKG1faXNTdGFydGVkKTsKLQotICAgIGlmIChtX3RyYW5zZmVyTW9kZSAhPSBO
UF9BU0ZJTEVPTkxZKSB7Ci0gICAgICAgIGlmICghbV9kZWxpdmVyeURhdGEpCi0gICAgICAgICAg
ICBtX2RlbGl2ZXJ5RGF0YSA9IG1ha2VVbmlxdWU8VmVjdG9yPHVpbnQ4X3Q+PigpOwotCi0gICAg
ICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNlcnZlQ2FwYWNpdHkobV9kZWxpdmVyeURhdGEtPnNpemUo
KSArIGxlbmd0aCk7Ci0gICAgICAgIG1fZGVsaXZlcnlEYXRhLT5hcHBlbmQoYnl0ZXMsIGxlbmd0
aCk7Ci0gICAgICAgIAotICAgICAgICBkZWxpdmVyRGF0YVRvUGx1Z2luKCk7Ci0gICAgfQotCi0g
ICAgaWYgKG1fdHJhbnNmZXJNb2RlID09IE5QX0FTRklMRSB8fCBtX3RyYW5zZmVyTW9kZSA9PSBO
UF9BU0ZJTEVPTkxZKQotICAgICAgICBkZWxpdmVyRGF0YVRvRmlsZShieXRlcywgbGVuZ3RoKTsK
LX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpblN0cmVhbTo6ZGVsaXZlckRhdGFUb1BsdWdpbigpCi17
Ci0gICAgQVNTRVJUKG1faXNTdGFydGVkKTsKLQotICAgIGludDMyX3QgbnVtQnl0ZXNUb0RlbGl2
ZXIgPSBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpOwotICAgIGludDMyX3QgbnVtQnl0ZXNEZWxpdmVy
ZWQgPSAwOwotCi0gICAgd2hpbGUgKG51bUJ5dGVzRGVsaXZlcmVkIDwgbnVtQnl0ZXNUb0RlbGl2
ZXIpIHsKLSAgICAgICAgaW50MzJfdCBudW1CeXRlc1BsdWdpbkNhbkhhbmRsZSA9IG1fcGx1Z2lu
LT5OUFBfV3JpdGVSZWFkeSgmbV9ucFN0cmVhbSk7Ci0gICAgICAgIAotICAgICAgICAvLyBOUFBf
V3JpdGVSZWFkeSBjb3VsZCBjYWxsIE5QTl9EZXN0cm95U3RyZWFtIGFuZCBkZXN0cm95IHRoZSBz
dHJlYW0uCi0gICAgICAgIGlmICghbV9pc1N0YXJ0ZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgaWYgKG51bUJ5dGVzUGx1Z2luQ2FuSGFuZGxlIDw9IDApIHsKLSAgICAgICAgICAg
IC8vIFRoZSBwbHVnLWluIGNhbid0IGhhbmRsZSBtb3JlIGRhdGEsIHdlJ2xsIHNlbmQgdGhlIHJl
c3QgbGF0ZXIKLSAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhVGltZXIuc3RhcnRPbmVTaG90KDBf
cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZpZ3VyZSBv
dXQgaG93IG11Y2ggZGF0YSB0byBzZW5kIHRvIHRoZSBwbHVnLWluLgotICAgICAgICBpbnQzMl90
IGRhdGFMZW5ndGggPSBzdGQ6Om1pbihudW1CeXRlc1BsdWdpbkNhbkhhbmRsZSwgbnVtQnl0ZXNU
b0RlbGl2ZXIgLSBudW1CeXRlc0RlbGl2ZXJlZCk7Ci0gICAgICAgIHVpbnQ4X3QqIGRhdGEgPSBt
X2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpICsgbnVtQnl0ZXNEZWxpdmVyZWQ7Ci0KLSAgICAgICAgaW50
MzJfdCBudW1CeXRlc1dyaXR0ZW4gPSBtX3BsdWdpbi0+TlBQX1dyaXRlKCZtX25wU3RyZWFtLCBt
X29mZnNldCwgZGF0YUxlbmd0aCwgZGF0YSk7Ci0gICAgICAgIGlmIChudW1CeXRlc1dyaXR0ZW4g
PCAwKSB7Ci0gICAgICAgICAgICBjYW5jZWwoKTsKLSAgICAgICAgICAgIHN0b3AoTlBSRVNfTkVU
V09SS19FUlIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
TlBQX1dyaXRlIGNvdWxkIGNhbGwgTlBOX0Rlc3Ryb3lTdHJlYW0gYW5kIGRlc3Ryb3kgdGhlIHN0
cmVhbS4KLSAgICAgICAgaWYgKCFtX2lzU3RhcnRlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBudW1CeXRlc1dyaXR0ZW4gPSBzdGQ6Om1pbihudW1CeXRlc1dyaXR0ZW4sIGRhdGFM
ZW5ndGgpOwotICAgICAgICBtX29mZnNldCArPSBudW1CeXRlc1dyaXR0ZW47Ci0gICAgICAgIG51
bUJ5dGVzRGVsaXZlcmVkICs9IG51bUJ5dGVzV3JpdHRlbjsKLSAgICB9Ci0KLSAgICAvLyBXZSBk
aWRuJ3Qgd3JpdGUgYW55dGhpbmcuCi0gICAgaWYgKCFudW1CeXRlc0RlbGl2ZXJlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG51bUJ5dGVzRGVsaXZlcmVkIDwgbnVtQnl0ZXNUb0RlbGl2
ZXIpIHsKLSAgICAgICAgLy8gUmVtb3ZlIHRoZSBieXRlcyB0aGF0IHdlIGFjdHVhbGx5IGRlbGl2
ZXJlZC4KLSAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlbW92ZSgwLCBudW1CeXRlc0RlbGl2ZXJl
ZCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9kZWxpdmVyeURhdGEtPmNsZWFyKCk7Ci0KLSAg
ICAgICAgaWYgKG1fc3RvcFN0cmVhbVdoZW5Eb25lRGVsaXZlcmluZykKLSAgICAgICAgICAgIHN0
b3AoTlBSRVNfRE9ORSk7Ci0gICAgfQotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luU3RyZWFtOjpk
ZWxpdmVyRGF0YVRvRmlsZShjb25zdCB1aW50OF90KiBieXRlcywgaW50IGxlbmd0aCkKLXsKLSAg
ICBpZiAobV9maWxlSGFuZGxlID09IEZpbGVTeXN0ZW06OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5k
bGUgJiYgbV9maWxlUGF0aC5pc051bGwoKSkgewotICAgICAgICAvLyBDcmVhdGUgYSB0ZW1wb3Jh
cnkgZmlsZS4KLSAgICAgICAgbV9maWxlUGF0aCA9IEZpbGVTeXN0ZW06Om9wZW5UZW1wb3JhcnlG
aWxlKCJXZWJLaXRQbHVnaW5TdHJlYW0iLCBtX2ZpbGVIYW5kbGUpOwotCi0gICAgICAgIC8vIFdl
IGZhaWxlZCB0byBvcGVuIHRoZSBmaWxlLCBzdG9wIHRoZSBzdHJlYW0uCi0gICAgICAgIGlmICht
X2ZpbGVIYW5kbGUgPT0gRmlsZVN5c3RlbTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkgewot
ICAgICAgICAgICAgc3RvcChOUFJFU19ORVRXT1JLX0VSUik7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaW50IGJ5dGVDb3VudCA9IEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKG1fZmlsZUhhbmRs
ZSwgYnl0ZXMsIGxlbmd0aCk7Ci0gICAgaWYgKGJ5dGVDb3VudCAhPSBsZW5ndGgpIHsKLSAgICAg
ICAgLy8gVGhpcyBoYXBwZW5zIG9ubHkgcmFyZWx5LCB3aGVuIHdlIGFyZSBvdXQgb2YgZGlzayBz
cGFjZSBvciBoYXZlIGEgZGlzayBJL08gZXJyb3IuCi0gICAgICAgIEZpbGVTeXN0ZW06OmNsb3Nl
RmlsZShtX2ZpbGVIYW5kbGUpOwotCi0gICAgICAgIHN0b3AoTlBSRVNfTkVUV09SS19FUlIpOwot
ICAgIH0KLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpblN0cmVhbTo6c3RvcChOUFJlYXNvbiByZWFz
b24pCi17Ci0gICAgLy8gVGhlIHN0cmVhbSB3YXMgc3RvcHBlZCBiZWZvcmUgaXQgZ290IGEgY2hh
bmNlIHRvIHN0YXJ0LiBUaGlzIGNhbiBoYXBwZW4gaWYgYSBzdHJlYW0gaXMgY2FuY2VsbGVkIGJ5
Ci0gICAgLy8gV2ViS2l0IGJlZm9yZSBpdCByZWNlaXZlZCBhIHJlc3BvbnNlLgotICAgIGlmICgh
bV9pc1N0YXJ0ZWQpIHsKLSAgICAgICAgQVNTRVJUKHJlYXNvbiAhPSBOUFJFU19ET05FKTsKLSAg
ICAgICAgbm90aWZ5QW5kRGVzdHJveVN0cmVhbShyZWFzb24pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKHJlYXNvbiA9PSBOUFJFU19ET05FICYmIG1fZGVsaXZlcnlEYXRhICYm
ICFtX2RlbGl2ZXJ5RGF0YS0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFRoZXJlIGlzIHN0aWxs
IGRhdGEgbGVmdCB0aGF0IHRoZSBwbHVnLWluIGhhc24ndCBiZWVuIGFibGUgdG8gY29uc3VtZSB5
ZXQuCi0gICAgICAgIEFTU0VSVChtX2RlbGl2ZXJ5RGF0YVRpbWVyLmlzQWN0aXZlKCkpOwotICAg
ICAgICAKLSAgICAgICAgLy8gU2V0IG1fc3RvcFN0cmVhbVdoZW5Eb25lRGVsaXZlcmluZyB0byB0
cnVlIHNvIHRoYXQgdGhlIG5leHQgdGltZSB0aGUgZGVsaXZlcnkgdGltZXIgZmlyZXMKLSAgICAg
ICAgLy8gYW5kIGNhbGxzIGRlbGl2ZXJEYXRhVG9QbHVnaW4gdGhlIHN0cmVhbSB3aWxsIGJlIGNs
b3NlZCBpZiBhbGwgdGhlIHJlbWFpbmluZyBkYXRhIHdhcwotICAgICAgICAvLyBzdWNjZXNzZnVs
bHkgZGVsaXZlcmVkLgotICAgICAgICBtX3N0b3BTdHJlYW1XaGVuRG9uZURlbGl2ZXJpbmcgPSB0
cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9kZWxpdmVyeURhdGEgPSBudWxs
cHRyOwotICAgIG1fZGVsaXZlcnlEYXRhVGltZXIuc3RvcCgpOwotCi0gICAgaWYgKG1fdHJhbnNm
ZXJNb2RlID09IE5QX0FTRklMRSB8fCBtX3RyYW5zZmVyTW9kZSA9PSBOUF9BU0ZJTEVPTkxZKSB7
Ci0gICAgICAgIGlmIChyZWFzb24gPT0gTlBSRVNfRE9ORSkgewotICAgICAgICAgICAgLy8gRW5z
dXJlIHRoYXQgdGhlIGZpbGUgaXMgY3JlYXRlZC4KLSAgICAgICAgICAgIGRlbGl2ZXJEYXRhVG9G
aWxlKDAsIDApOwotICAgICAgICAgICAgaWYgKG1fZmlsZUhhbmRsZSAhPSBGaWxlU3lzdGVtOjpp
bnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKQotICAgICAgICAgICAgICAgIEZpbGVTeXN0ZW06OmNs
b3NlRmlsZShtX2ZpbGVIYW5kbGUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQo
IW1fZmlsZVBhdGguaXNOdWxsKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX3BsdWdp
bi0+TlBQX1N0cmVhbUFzRmlsZSgmbV9ucFN0cmVhbSwgbV9maWxlUGF0aC51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEp1c3QgY2xvc2UgdGhlIGZpbGUu
Ci0gICAgICAgICAgICBpZiAobV9maWxlSGFuZGxlICE9IEZpbGVTeXN0ZW06OmludmFsaWRQbGF0
Zm9ybUZpbGVIYW5kbGUpCi0gICAgICAgICAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKG1f
ZmlsZUhhbmRsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBEZWxldGUgdGhlIGZpbGUgYWZ0
ZXIgY2FsbGluZyBOUFBfU3RyZWFtQXNGaWxlKCksIGluc3RlYWQgb2YgaW4gdGhlIGRlc3RydWN0
b3IuICBJdCBzaG91bGQgYmUgT0sKLSAgICAgICAgLy8gdG8gZGVsZXRlIHRoZSBmaWxlIGhlcmUg
LS0gTlBQX1N0cmVhbUFzRmlsZSgpIGlzIGFsd2F5cyBjYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3Jl
IE5QUF9EZXN0cm95U3RyZWFtKCkKLSAgICAgICAgLy8gKHRoZSBzdHJlYW0gZGVzdHJ1Y3Rpb24g
ZnVuY3Rpb24pLCBzbyB0aGVyZSBjYW4gYmUgbm8gZXhwZWN0YXRpb24gdGhhdCBhIHBsdWdpbiB3
aWxsIHJlYWQgdGhlIHN0cmVhbQotICAgICAgICAvLyBmaWxlIGFzeW5jaHJvbm91c2x5IGFmdGVy
IE5QUF9TdHJlYW1Bc0ZpbGUoKSBpcyBjYWxsZWQuCi0gICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0
ZUZpbGUobV9maWxlUGF0aCk7Ci0gICAgICAgIG1fZmlsZVBhdGggPSBTdHJpbmcoKTsKLQotICAg
ICAgICAvLyBOUFBfU3RyZWFtQXNGaWxlIGNvdWxkIGNhbGwgTlBOX0Rlc3Ryb3lTdHJlYW0gYW5k
IGRlc3Ryb3kgdGhlIHN0cmVhbS4KLSAgICAgICAgaWYgKCFtX2lzU3RhcnRlZCkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTZXQgbV9pc1N0YXJ0ZWQgdG8gZmFsc2UgYmVm
b3JlIGNhbGxpbmcgTlBQX0Rlc3Ryb3lTdHJlYW0gaW4gY2FzZSBOUFBfRGVzdHJveVN0cmVhbSBj
YWxscyBOUE5fRGVzdHJveVN0cmVhbS4KLSAgICBtX2lzU3RhcnRlZCA9IGZhbHNlOwotCi0gICAg
bV9wbHVnaW4tPk5QUF9EZXN0cm95U3RyZWFtKCZtX25wU3RyZWFtLCByZWFzb24pOwotCi0gICAg
bm90aWZ5QW5kRGVzdHJveVN0cmVhbShyZWFzb24pOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2lu
U3RyZWFtOjpzZXRVUkwoY29uc3QgU3RyaW5nJiBuZXdVUkxTdHJpbmcpCi17Ci0gICAgbV9yZXF1
ZXN0VVJMU3RyaW5nID0gbmV3VVJMU3RyaW5nOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luU3Ry
ZWFtOjpjYW5jZWwoKQotewotICAgIG1fcGx1Z2luLT5jYW5jZWxTdHJlYW1Mb2FkKHRoaXMpOwot
fQotCi12b2lkIE5ldHNjYXBlUGx1Z2luU3RyZWFtOjpub3RpZnlBbmREZXN0cm95U3RyZWFtKE5Q
UmVhc29uIHJlYXNvbikKLXsKLSAgICBBU1NFUlQoIW1faXNTdGFydGVkKTsKLSAgICBBU1NFUlQo
IW1fZGVsaXZlcnlEYXRhVGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgQVNTRVJUKCFtX3VybE5vdGlm
eUhhc0JlZW5DYWxsZWQpOwotICAgIAotICAgIGlmIChtX3NlbmROb3RpZmljYXRpb24pIHsKLSAg
ICAgICAgbV9wbHVnaW4tPk5QUF9VUkxOb3RpZnkobV9yZXF1ZXN0VVJMU3RyaW5nLnV0ZjgoKS5k
YXRhKCksIHJlYXNvbiwgbV9ub3RpZmljYXRpb25EYXRhKTsKLSAgICAKLSNpZiBBU1NFUlRfRU5B
QkxFRAotICAgICAgICBtX3VybE5vdGlmeUhhc0JlZW5DYWxsZWQgPSB0cnVlOwotI2VuZGlmICAg
IAotICAgIH0KLQotICAgIG1fcGx1Z2luLT5yZW1vdmVQbHVnaW5TdHJlYW0odGhpcyk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OZXRzY2FwZVBsdWdpblN0cmVhbS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5TdHJlYW0uaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOWIwNzA5OTg4NDcyMDQzMWEzYjEzZTQwMWVlNDg4ODM4YmE2MjllNC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpblN0cmVhbS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSA8V2ViQ29yZS9ucHJ1
bnRpbWVfaW50ZXJuYWwuaD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL0ZpbGVT
eXN0ZW0uaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
Y2xhc3MgTmV0c2NhcGVQbHVnaW47Ci0KLWNsYXNzIE5ldHNjYXBlUGx1Z2luU3RyZWFtIDogcHVi
bGljIFJlZkNvdW50ZWQ8TmV0c2NhcGVQbHVnaW5TdHJlYW0+IHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPE5ldHNjYXBlUGx1Z2luU3RyZWFtPiBjcmVhdGUoUmVmPE5ldHNjYXBlUGx1Z2luPiYm
IHBsdWdpbiwgdWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IFN0cmluZyYgcmVxdWVzdFVSTFN0cmlu
ZywgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZmljYXRpb25EYXRhKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0c2NhcGVQbHVnaW5TdHJlYW0oV1RGTW92
ZShwbHVnaW4pLCBzdHJlYW1JRCwgcmVxdWVzdFVSTFN0cmluZywgc2VuZE5vdGlmaWNhdGlvbiwg
bm90aWZpY2F0aW9uRGF0YSkpOwotICAgIH0KLSAgICB+TmV0c2NhcGVQbHVnaW5TdHJlYW0oKTsK
LQotICAgIHVpbnQ2NF90IHN0cmVhbUlEKCkgY29uc3QgeyByZXR1cm4gbV9zdHJlYW1JRDsgfQot
ICAgIGNvbnN0IE5QU3RyZWFtKiBucFN0cmVhbSgpIGNvbnN0IHsgcmV0dXJuICZtX25wU3RyZWFt
OyB9Ci0KLSAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdChjb25zdCBVUkwmIHJlcXVlc3RVUkwsIGNv
bnN0IFVSTCYgcmVkaXJlY3RSZXNwb25zZVVSTCwgaW50IHJlZGlyZWN0UmVzcG9uc2VTdGF0dXMp
OwotICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFVSTCYgcmVzcG9uc2VVUkwsIHVp
bnQzMl90IHN0cmVhbUxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcm
IGhlYWRlcnMpOwotICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgdWludDhfdCogYnl0ZXMs
IGludCBsZW5ndGgpOwotICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZygpOwotICAgIHZvaWQgZGlk
RmFpbChib29sIHdhc0NhbmNlbGxlZCk7Ci0KLSAgICB2b2lkIHNlbmRKYXZhU2NyaXB0U3RyZWFt
KGNvbnN0IFN0cmluZyYgcmVzdWx0KTsKLQotICAgIHZvaWQgc3RvcChOUFJlYXNvbik7Ci0gICAg
TlBFcnJvciBkZXN0cm95KE5QUmVhc29uKTsKLSAgICB2b2lkIHNldFVSTChjb25zdCBTdHJpbmcm
IG5ld1VSTFN0cmluZyk7Ci0KLXByaXZhdGU6Ci0gICAgTmV0c2NhcGVQbHVnaW5TdHJlYW0oUmVm
PE5ldHNjYXBlUGx1Z2luPiYmLCB1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgU3RyaW5nJiByZXF1
ZXN0VVJMU3RyaW5nLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmaWNhdGlvbkRh
dGEpOwotCi0gICAgYm9vbCBzdGFydChjb25zdCBTdHJpbmcmIHJlc3BvbnNlVVJMU3RyaW5nLCB1
aW50MzJfdCBzdHJlYW1MZW5ndGgsIAotICAgICAgICAgICAgICAgdWludDMyX3QgbGFzdE1vZGlm
aWVkVGltZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBoZWFkZXJzKTsK
LQotICAgIHZvaWQgY2FuY2VsKCk7Ci0gICAgdm9pZCBub3RpZnlBbmREZXN0cm95U3RyZWFtKE5Q
UmVhc29uKTsKLQotICAgIHZvaWQgZGVsaXZlckRhdGEoY29uc3QgdWludDhfdCogYnl0ZXMsIGlu
dCBsZW5ndGgpOwotICAgIHZvaWQgZGVsaXZlckRhdGFUb1BsdWdpbigpOwotICAgIHZvaWQgZGVs
aXZlckRhdGFUb0ZpbGUoY29uc3QgdWludDhfdCogYnl0ZXMsIGludCBsZW5ndGgpOwotCi0gICAg
UmVmPE5ldHNjYXBlUGx1Z2luPiBtX3BsdWdpbjsKLSAgICB1aW50NjRfdCBtX3N0cmVhbUlEOwot
Ci0gICAgU3RyaW5nIG1fcmVxdWVzdFVSTFN0cmluZzsKLSAgICBib29sIG1fc2VuZE5vdGlmaWNh
dGlvbjsKLSAgICB2b2lkKiBtX25vdGlmaWNhdGlvbkRhdGE7Ci0KLSAgICBOUFN0cmVhbSBtX25w
U3RyZWFtOwotICAgIHVpbnQxNl90IG1fdHJhbnNmZXJNb2RlOwotICAgIGludDMyX3QgbV9vZmZz
ZXQ7Ci0KLSAgICBTdHJpbmcgbV9maWxlUGF0aDsKLSAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZp
bGVIYW5kbGUgbV9maWxlSGFuZGxlOwotICAgIAotICAgIC8vIFdoZXRoZXIgTlBQX05ld1N0cmVh
bSBoYXMgc3VjY2Vzc2Z1bGx5IGJlZW4gY2FsbGVkLgotICAgIGJvb2wgbV9pc1N0YXJ0ZWQ7Ci0K
LSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJvb2wgbV91cmxOb3RpZnlIYXNCZWVuQ2FsbGVkOwot
I2VuZGlmCi0KLSAgICBDU3RyaW5nIG1fcmVzcG9uc2VVUkw7Ci0gICAgQ1N0cmluZyBtX21pbWVU
eXBlOwotICAgIENTdHJpbmcgbV9oZWFkZXJzOwotCi0gICAgUnVuTG9vcDo6VGltZXI8TmV0c2Nh
cGVQbHVnaW5TdHJlYW0+IG1fZGVsaXZlcnlEYXRhVGltZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFZlY3Rvcjx1aW50OF90Pj4gbV9kZWxpdmVyeURhdGE7Ci0gICAgYm9vbCBtX3N0b3BTdHJlYW1X
aGVuRG9uZURlbGl2ZXJpbmc7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
IC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvbWFjL05ldHNjYXBlUGx1Z2luTWFjLm1tIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvbWFjL05ldHNjYXBlUGx1
Z2luTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGQ5YTE1YTM2MjI3MWZm
NTk1NjQ0NWM2ODAwOWIyMGU5MTRmNGY1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L21hYy9OZXRzY2FwZVBsdWdpbk1hYy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDc3NiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIk5ldHNjYXBl
UGx1Z2luLmgiCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2ltcG9ydCAi
TGF5ZXJUcmVlQ29udGV4dC5oIgotI2ltcG9ydCAiTmV0c2NhcGVCcm93c2VyRnVuY3MuaCIKLSNp
bXBvcnQgIlBsdWdpbkNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldlYktleWJvYXJkRXZlbnQuaCIK
LSNpbXBvcnQgIldlYk1vdXNlRXZlbnQuaCIKLSNpbXBvcnQgIldlYldoZWVsRXZlbnQuaCIKLSNp
bXBvcnQgPENhcmJvbi9DYXJib24uaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW1wb3J0IDxvYmpjL3J1
bnRpbWUuaD4KLSNpbXBvcnQgPHBhbC9zcGkvbWFjL0hJVG9vbGJveFNQSS5oPgotI2ltcG9ydCA8
cGFsL3NwaS9tYWMvTlNNZW51U1BJLmg+Ci0jaW1wb3J0IDx3dGYvTWFjaFNlbmRSaWdodC5oPgot
I2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdW
aWV3Lmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0K
LU5QRXJyb3IgTmV0c2NhcGVQbHVnaW46OnNldERyYXdpbmdNb2RlbChOUERyYXdpbmdNb2RlbCBk
cmF3aW5nTW9kZWwpCi17Ci0gICAgLy8gVGhlIGRyYXdpbmcgbW9kZWwgY2FuIG9ubHkgYmUgc2V0
IGZyb20gTlBQX05ldy4KLSAgICBpZiAoIW1faW5OUFBOZXcpCi0gICAgICAgIHJldHVybiBOUEVS
Ul9HRU5FUklDX0VSUk9SOwotCi0gICAgc3dpdGNoIChkcmF3aW5nTW9kZWwpIHsKLSAgICAgICAg
Y2FzZSBOUERyYXdpbmdNb2RlbENvcmVHcmFwaGljczoKLSAgICAgICAgY2FzZSBOUERyYXdpbmdN
b2RlbENvcmVBbmltYXRpb246Ci0gICAgICAgICAgICBtX2RyYXdpbmdNb2RlbCA9IGRyYXdpbmdN
b2RlbDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICB9Ci0KLSAgICByZXR1cm4gTlBFUlJf
Tk9fRVJST1I7Ci19Ci0gICAgCi1OUEVycm9yIE5ldHNjYXBlUGx1Z2luOjpzZXRFdmVudE1vZGVs
KE5QRXZlbnRNb2RlbCBldmVudE1vZGVsKQotewotICAgIC8vIFRoZSBldmVudCBtb2RlbCBjYW4g
b25seSBiZSBzZXQgZnJvbSBOUFBfTmV3LgotICAgIGlmICghbV9pbk5QUE5ldykKLSAgICAgICAg
cmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAgICBzd2l0Y2ggKGV2ZW50TW9kZWwpIHsK
LSAgICAgICAgY2FzZSBOUEV2ZW50TW9kZWxDb2NvYToKLSAgICAgICAgICAgIG1fZXZlbnRNb2Rl
bCA9IGV2ZW50TW9kZWw7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgfQotICAgIAotICAg
IHJldHVybiBOUEVSUl9OT19FUlJPUjsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6Z2V0U2Ny
ZWVuVHJhbnNmb3JtKE5QQ29vcmRpbmF0ZVNwYWNlIHNvdXJjZVNwYWNlLCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKLXsKLSAgICBBU1NFUlQodHJhbnNmb3JtLmlzSWRlbnRpdHkoKSk7Ci0K
LSAgICBzd2l0Y2ggKHNvdXJjZVNwYWNlKSB7Ci0gICAgICAgIGNhc2UgTlBDb29yZGluYXRlU3Bh
Y2VQbHVnaW46IHsKLSAgICAgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUobV93aW5kb3dGcmFt
ZUluU2NyZWVuQ29vcmRpbmF0ZXMueCgpLCBtX3dpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRl
cy55KCkpOwotICAgICAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShtX3ZpZXdGcmFtZUluV2lu
ZG93Q29vcmRpbmF0ZXMueCgpLCBtX3ZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMuaGVpZ2h0
KCkgKyBtX3ZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMueSgpKTsKLSAgICAgICAgICAgIHRy
YW5zZm9ybS5mbGlwWSgpOwotICAgICAgICAgICAgdHJhbnNmb3JtICo9IG1fcGx1Z2luVG9Sb290
Vmlld1RyYW5zZm9ybTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgY2FzZSBOUENvb3JkaW5hdGVTcGFjZVdpbmRvdzogewotICAgICAgICAgICAgdHJhbnNm
b3JtLnRyYW5zbGF0ZShtX3dpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcy54KCksIG1fd2lu
ZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLnkoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTlBDb29yZGluYXRlU3BhY2VGbGlwcGVkV2lu
ZG93OiB7Ci0gICAgICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKG1fd2luZG93RnJhbWVJblNj
cmVlbkNvb3JkaW5hdGVzLngoKSwgbV93aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMuaGVp
Z2h0KCkgKyBtX3dpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcy55KCkpOwotICAgICAgICAg
ICAgdHJhbnNmb3JtLmZsaXBZKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIGNhc2UgTlBDb29yZGluYXRlU3BhY2VTY3JlZW46IHsKLSAgICAgICAgICAg
IC8vIE5vdGhpbmcgdG8gZG8uCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGNhc2UgTlBDb29yZGluYXRlU3BhY2VGbGlwcGVkU2NyZWVuOiB7Ci0gICAgICAg
ICAgICBkb3VibGUgc2NyZWVuSGVpZ2h0ID0gWyhOU1NjcmVlbiAqKVtbTlNTY3JlZW4gc2NyZWVu
c10gb2JqZWN0QXRJbmRleDowXSBmcmFtZV0uc2l6ZS5oZWlnaHQ7Ci0gICAgICAgICAgICB0cmFu
c2Zvcm0udHJhbnNsYXRlKDAsIHNjcmVlbkhlaWdodCk7Ci0gICAgICAgICAgICB0cmFuc2Zvcm0u
ZmxpcFkoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLU5QQm9vbCBO
ZXRzY2FwZVBsdWdpbjo6Y29udmVydFBvaW50KGRvdWJsZSBzb3VyY2VYLCBkb3VibGUgc291cmNl
WSwgTlBDb29yZGluYXRlU3BhY2Ugc291cmNlU3BhY2UsIGRvdWJsZSYgZGVzdFgsIGRvdWJsZSYg
ZGVzdFksIE5QQ29vcmRpbmF0ZVNwYWNlIGRlc3RTcGFjZSkKLXsKLSAgICBBZmZpbmVUcmFuc2Zv
cm0gc291cmNlVHJhbnNmb3JtOwotICAgIGlmICghZ2V0U2NyZWVuVHJhbnNmb3JtKHNvdXJjZVNw
YWNlLCBzb3VyY2VUcmFuc2Zvcm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBZmZp
bmVUcmFuc2Zvcm0gZGVzdFRyYW5zZm9ybTsKLSAgICBpZiAoIWdldFNjcmVlblRyYW5zZm9ybShk
ZXN0U3BhY2UsIGRlc3RUcmFuc2Zvcm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoYXV0byBpbnZlcnNlID0gZGVzdFRyYW5zZm9ybS5pbnZlcnNlKCkpIHsKLSAgICAgICAgQWZm
aW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGludmVyc2UudmFsdWUoKSAqIHNvdXJjZVRyYW5zZm9y
bTsKLQotICAgICAgICBGbG9hdFBvaW50IGRlc3RpbmF0aW9uUG9pbnQgPSB0cmFuc2Zvcm0ubWFw
UG9pbnQoRmxvYXRQb2ludChzb3VyY2VYLCBzb3VyY2VZKSk7Ci0KLSAgICAgICAgZGVzdFggPSBk
ZXN0aW5hdGlvblBvaW50LngoKTsKLSAgICAgICAgZGVzdFkgPSBkZXN0aW5hdGlvblBvaW50Lnko
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
TlBFcnJvciBOZXRzY2FwZVBsdWdpbjo6cG9wVXBDb250ZXh0TWVudShOUE1lbnUqIG5wTWVudSkK
LXsKLSAgICBpZiAoIW1fY3VycmVudE1vdXNlRXZlbnQpCi0gICAgICAgIHJldHVybiBOUEVSUl9H
RU5FUklDX0VSUk9SOwotCi0gICAgZG91YmxlIHNjcmVlblgsIHNjcmVlblk7Ci0gICAgaWYgKCFj
b252ZXJ0UG9pbnQobV9jdXJyZW50TW91c2VFdmVudC0+ZGF0YS5tb3VzZS5wbHVnaW5YLCBtX2N1
cnJlbnRNb3VzZUV2ZW50LT5kYXRhLm1vdXNlLnBsdWdpblksIE5QQ29vcmRpbmF0ZVNwYWNlUGx1
Z2luLCBzY3JlZW5YLCBzY3JlZW5ZLCBOUENvb3JkaW5hdGVTcGFjZVNjcmVlbikpCi0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgX05TUG9wVXBDYXJib25NZW51MygoX19icmlk
Z2UgTlNNZW51ICopbnBNZW51LCBuaWwsIG5pbCwgTlNNYWtlUG9pbnQoc2NyZWVuWCwgc2NyZWVu
WSksIC0xLCBuaWwsIDAsIG5pbCwgTlNQb3BVcE1lbnVUeXBlQ29udGV4dCwgbmlsKTsKLSAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLWNvbnN0IE1hY2hTZW5kUmlnaHQmIE5ldHNjYXBl
UGx1Z2luOjpjb21wb3NpdGluZ1JlbmRlclNlcnZlclBvcnQoKQotewotI2lmIEhBVkUoT1VUX09G
X1BST0NFU1NfTEFZRVJfSE9TVElORykKLSAgICBpZiAobV9sYXllckhvc3RpbmdNb2RlID09IExh
eWVySG9zdGluZ01vZGU6Ok91dE9mUHJvY2VzcykgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8TWFjaFNlbmRSaWdodD4gc2VuZFJpZ2h0OwotCi0gICAgICAgIHJldHVybiBzZW5kUmln
aHQ7Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4gY29udHJvbGxlcigpLT5jb21wb3NpdGlu
Z1JlbmRlclNlcnZlclBvcnQoKTsKLX0KLQotc3RhdGljIHZvaWQgTlNFeGNlcHRpb25fcmVsZWFz
ZShpZCwgU0VMKQotewotICAgIC8vIERvIG5vdGhpbmcuCi19Ci0KLXZvaWQgTmV0c2NhcGVQbHVn
aW46OnBsYXRmb3JtUHJlSW5pdGlhbGl6ZSgpCi17Ci0gICAgaWYgKG1fcGx1Z2luTW9kdWxlLT5w
bHVnaW5RdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya3M6OkxlYWtBbGxUaHJvd25OU0V4Y2Vw
dGlvbnMpKSB7Ci0gICAgICAgIC8vIFBhdGNoIC1bTlNFeGNlcHRpb24gcmVsZWFzZV0gdG8gbm90
IHJlbGVhc2UgdGhlIG9iamVjdC4KLSAgICAgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNl
OwotICAgICAgICBkaXNwYXRjaF9vbmNlKCZvbmNlLCBeewotICAgICAgICAgICAgYXV0byBleGNl
cHRpb25DbGFzcyA9IFtOU0V4Y2VwdGlvbiBjbGFzc107Ci0gICAgICAgICAgICBhdXRvIHJlbGVh
c2VTZWxlY3RvciA9IHNlbF9yZWdpc3Rlck5hbWUoInJlbGVhc2UiKTsKLSAgICAgICAgICAgIGF1
dG8gZXhjZXB0aW9uUmVsZWFzZU1ldGhvZCA9IGNsYXNzX2dldEluc3RhbmNlTWV0aG9kKGV4Y2Vw
dGlvbkNsYXNzLCByZWxlYXNlU2VsZWN0b3IpOwotICAgICAgICAgICAgY2xhc3NfcmVwbGFjZU1l
dGhvZChleGNlcHRpb25DbGFzcywgcmVsZWFzZVNlbGVjdG9yLCByZWludGVycHJldF9jYXN0PElN
UD4oTlNFeGNlcHRpb25fcmVsZWFzZSksIG1ldGhvZF9nZXRUeXBlRW5jb2RpbmcoZXhjZXB0aW9u
UmVsZWFzZU1ldGhvZCkpOwotICAgICAgICB9KTsKLSAgICB9Ci19Ci0KLWJvb2wgTmV0c2NhcGVQ
bHVnaW46OnBsYXRmb3JtUG9zdEluaXRpYWxpemUoKQotewotICAgIGlmIChtX2RyYXdpbmdNb2Rl
bCA9PSBzdGF0aWNfY2FzdDxOUERyYXdpbmdNb2RlbD4oLTEpKQotICAgICAgICBtX2RyYXdpbmdN
b2RlbCA9IE5QRHJhd2luZ01vZGVsQ29yZUdyYXBoaWNzOwotICAgIAotICAgIGlmIChtX2V2ZW50
TW9kZWwgPT0gc3RhdGljX2Nhc3Q8TlBFdmVudE1vZGVsPigtMSkpCi0gICAgICAgIG1fZXZlbnRN
b2RlbCA9IE5QRXZlbnRNb2RlbENvY29hOwotCi0gICAgdXBkYXRlUGx1Z2luTGF5ZXIoKTsKLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpwbGF0Zm9ybURlc3Ry
b3koKQotewotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjpwbGF0Zm9ybUludmFsaWRhdGUoY29u
c3QgSW50UmVjdCYpCi17Ci0gICAgLy8gTlBOX0ludmFsaWRhdGVSZWN0IGlzIGp1c3QgYSBuby1v
cCBpbiB0aGUgQ29yZSBBbmltYXRpb24gZHJhd2luZyBtb2RlbC4KLSAgICBpZiAobV9kcmF3aW5n
TW9kZWwgPT0gTlBEcmF3aW5nTW9kZWxDb3JlQW5pbWF0aW9uKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6cGxhdGZv
cm1HZW9tZXRyeURpZENoYW5nZSgpCi17Ci0gICAgc3dpdGNoIChtX2V2ZW50TW9kZWwpIHsKLSAg
ICBjYXNlIE5QRXZlbnRNb2RlbENvY29hOgotICAgICAgICAvLyBOb3RoaW5nIHRvIGRvCi0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIH0KLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6cGxhdGZvcm1WaXNpYmlsaXR5RGlkQ2hh
bmdlKCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuIDxodHRwOi8vd2Via2l0Lm9y
Zy9iLzQ0MzY4Pi4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1zdGF0aWMgaW5saW5lIE5Q
Q29jb2FFdmVudCBpbml0aWFsaXplRXZlbnQoTlBDb2NvYUV2ZW50VHlwZSB0eXBlKQotewotICAg
IE5QQ29jb2FFdmVudCBldmVudDsKLSAgICAKLSAgICBldmVudC50eXBlID0gdHlwZTsKLSAgICBl
dmVudC52ZXJzaW9uID0gMDsKLSAgICAKLSAgICByZXR1cm4gZXZlbnQ7Ci19Ci0KLXZvaWQgTmV0
c2NhcGVQbHVnaW46OnBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGJvb2wgaXNTbmFwc2hvdCkKLXsKLSAgICBDR0NvbnRleHRS
ZWYgcGxhdGZvcm1Db250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIHN3
aXRjaCAobV9ldmVudE1vZGVsKSB7Ci0gICAgICAgIGNhc2UgTlBFdmVudE1vZGVsQ29jb2E6IHsK
LSAgICAgICAgICAgIC8vIERvbid0IHNlbmQgZHJhdyBldmVudHMgd2hlbiB3ZSdyZSB1c2luZyB0
aGUgQ29yZSBBbmltYXRpb24gZHJhd2luZyBtb2RlbC4KLSAgICAgICAgICAgIGlmICghaXNTbmFw
c2hvdCAmJiBtX2RyYXdpbmdNb2RlbCA9PSBOUERyYXdpbmdNb2RlbENvcmVBbmltYXRpb24pCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBOUENvY29hRXZlbnQgZXZlbnQg
PSBpbml0aWFsaXplRXZlbnQoTlBDb2NvYUV2ZW50RHJhd1JlY3QpOwotCi0gICAgICAgICAgICBl
dmVudC5kYXRhLmRyYXcuY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dDsKLSAgICAgICAgICAgIGV2
ZW50LmRhdGEuZHJhdy54ID0gZGlydHlSZWN0LngoKTsKLSAgICAgICAgICAgIGV2ZW50LmRhdGEu
ZHJhdy55ID0gZGlydHlSZWN0LnkoKTsKLSAgICAgICAgICAgIGV2ZW50LmRhdGEuZHJhdy53aWR0
aCA9IGRpcnR5UmVjdC53aWR0aCgpOwotICAgICAgICAgICAgZXZlbnQuZGF0YS5kcmF3LmhlaWdo
dCA9IGRpcnR5UmVjdC5oZWlnaHQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTlBQX0hh
bmRsZUV2ZW50KCZldmVudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19
Ci0KLXN0YXRpYyB1aW50MzJfdCBtb2RpZmllckZsYWdzKGNvbnN0IFdlYkV2ZW50JiBldmVudCkK
LXsKLSAgICB1aW50MzJfdCBtb2RpZmllcnMgPSAwOwotCi0gICAgaWYgKGV2ZW50LnNoaWZ0S2V5
KCkpCi0gICAgICAgIG1vZGlmaWVycyB8PSBOU0V2ZW50TW9kaWZpZXJGbGFnU2hpZnQ7Ci0gICAg
aWYgKGV2ZW50LmNvbnRyb2xLZXkoKSkKLSAgICAgICAgbW9kaWZpZXJzIHw9IE5TRXZlbnRNb2Rp
ZmllckZsYWdDb250cm9sOwotICAgIGlmIChldmVudC5hbHRLZXkoKSkKLSAgICAgICAgbW9kaWZp
ZXJzIHw9IE5TRXZlbnRNb2RpZmllckZsYWdPcHRpb247Ci0gICAgaWYgKGV2ZW50Lm1ldGFLZXko
KSkKLSAgICAgICAgbW9kaWZpZXJzIHw9IE5TRXZlbnRNb2RpZmllckZsYWdDb21tYW5kOwotICAg
IAotICAgIHJldHVybiBtb2RpZmllcnM7Ci19Ci0gICAgCi1zdGF0aWMgaW50MzJfdCBidXR0b25O
dW1iZXIoV2ViTW91c2VFdmVudDo6QnV0dG9uIGJ1dHRvbikKLXsKLSAgICBzd2l0Y2ggKGJ1dHRv
bikgewotICAgIGNhc2UgV2ViTW91c2VFdmVudDo6Tm9CdXR0b246Ci0gICAgY2FzZSBXZWJNb3Vz
ZUV2ZW50OjpMZWZ0QnV0dG9uOgotICAgICAgICByZXR1cm4gMDsKLSAgICBjYXNlIFdlYk1vdXNl
RXZlbnQ6OlJpZ2h0QnV0dG9uOgotICAgICAgICByZXR1cm4gMTsKLSAgICBjYXNlIFdlYk1vdXNl
RXZlbnQ6Ok1pZGRsZUJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIDI7Ci0gICAgfQotCi0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgdm9pZCBmaWxs
SW5Db2NvYUV2ZW50RnJvbU1vdXNlRXZlbnQoTlBDb2NvYUV2ZW50JiBldmVudCwgY29uc3QgV2Vi
TW91c2VFdmVudCYgbW91c2VFdmVudCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGV2ZW50UG9z
aXRpb25JblBsdWdpbkNvb3JkaW5hdGVzKQotewotICAgIGV2ZW50LmRhdGEubW91c2UubW9kaWZp
ZXJGbGFncyA9IG1vZGlmaWVyRmxhZ3MobW91c2VFdmVudCk7Ci0gICAgZXZlbnQuZGF0YS5tb3Vz
ZS5wbHVnaW5YID0gZXZlbnRQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXMueCgpOwotICAgIGV2
ZW50LmRhdGEubW91c2UucGx1Z2luWSA9IGV2ZW50UG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVz
LnkoKTsKLSAgICBldmVudC5kYXRhLm1vdXNlLmJ1dHRvbk51bWJlciA9IGJ1dHRvbk51bWJlciht
b3VzZUV2ZW50LmJ1dHRvbigpKTsKLSAgICBldmVudC5kYXRhLm1vdXNlLmNsaWNrQ291bnQgPSBt
b3VzZUV2ZW50LmNsaWNrQ291bnQoKTsKLSAgICBldmVudC5kYXRhLm1vdXNlLmRlbHRhWCA9IG1v
dXNlRXZlbnQuZGVsdGFYKCk7Ci0gICAgZXZlbnQuZGF0YS5tb3VzZS5kZWx0YVkgPSBtb3VzZUV2
ZW50LmRlbHRhWSgpOwotICAgIGV2ZW50LmRhdGEubW91c2UuZGVsdGFaID0gbW91c2VFdmVudC5k
ZWx0YVooKTsKLX0KLSAgICAKLXN0YXRpYyBOUENvY29hRXZlbnQgaW5pdGlhbGl6ZU1vdXNlRXZl
bnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIGV2ZW50UG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzKQotewotICAgIE5QQ29jb2FFdmVu
dFR5cGUgZXZlbnRUeXBlOwotCi0gICAgc3dpdGNoIChtb3VzZUV2ZW50LnR5cGUoKSkgewotICAg
IGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRG93bjoKLSAgICAgICAgZXZlbnRUeXBlID0gTlBDb2NvYUV2
ZW50TW91c2VEb3duOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVw
OgotICAgICAgICBldmVudFR5cGUgPSBOUENvY29hRXZlbnRNb3VzZVVwOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZU1vdmU6Ci0gICAgICAgIGlmIChtb3VzZUV2ZW50
LmJ1dHRvbigpID09IFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uKQotICAgICAgICAgICAgZXZlbnRU
eXBlID0gTlBDb2NvYUV2ZW50TW91c2VNb3ZlZDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
ZXZlbnRUeXBlID0gTlBDb2NvYUV2ZW50TW91c2VEcmFnZ2VkOwotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
IE5QQ29jb2FFdmVudCgpOwotICAgIH0KLQotICAgIE5QQ29jb2FFdmVudCBldmVudCA9IGluaXRp
YWxpemVFdmVudChldmVudFR5cGUpOwotICAgIGZpbGxJbkNvY29hRXZlbnRGcm9tTW91c2VFdmVu
dChldmVudCwgbW91c2VFdmVudCwgZXZlbnRQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXMpOwot
ICAgIHJldHVybiBldmVudDsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6cGxhdGZvcm1IYW5k
bGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCi17Ci0gICAgSW50
UG9pbnQgZXZlbnRQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXM7Ci0gICAgaWYgKCFjb252ZXJ0
RnJvbVJvb3RWaWV3KG1vdXNlRXZlbnQucG9zaXRpb24oKSwgZXZlbnRQb3NpdGlvbkluUGx1Z2lu
Q29vcmRpbmF0ZXMpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHN3aXRjaCAobV9ldmVu
dE1vZGVsKSB7Ci0gICAgICAgIGNhc2UgTlBFdmVudE1vZGVsQ29jb2E6IHsKLSAgICAgICAgICAg
IE5QQ29jb2FFdmVudCBldmVudCA9IGluaXRpYWxpemVNb3VzZUV2ZW50KG1vdXNlRXZlbnQsIGV2
ZW50UG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzKTsKLQotICAgICAgICAgICAgTlBDb2NvYUV2
ZW50KiBwcmV2aW91c01vdXNlRXZlbnQgPSBtX2N1cnJlbnRNb3VzZUV2ZW50OwotICAgICAgICAg
ICAgbV9jdXJyZW50TW91c2VFdmVudCA9ICZldmVudDsKLQotICAgICAgICAgICAgLy8gUHJvdGVj
dCBhZ2FpbnN0IE5QUF9IYW5kbGVFdmVudCBjYXVzaW5nIHRoZSBwbHVnLWluIHRvIGJlIGRlc3Ry
b3llZCwgc2luY2Ugd2UKLSAgICAgICAgICAgIC8vIGFjY2VzcyBtX2N1cnJlbnRNb3VzZUV2ZW50
IGFmdGVyd2FyZHMuCi0gICAgICAgICAgICBSZWY8TmV0c2NhcGVQbHVnaW4+IHByb3RlY3QoKnRo
aXMpOwotCi0gICAgICAgICAgICBOUFBfSGFuZGxlRXZlbnQoJmV2ZW50KTsKLQotICAgICAgICAg
ICAgbV9jdXJyZW50TW91c2VFdmVudCA9IHByZXZpb3VzTW91c2VFdmVudDsKLQotICAgICAgICAg
ICAgLy8gU29tZSBwbHVnLWlucyByZXR1cm4gZmFsc2UgZXZlbiBpZiB0aGUgbW91c2UgZXZlbnQg
aGFzIGJlZW4gaGFuZGxlZC4KLSAgICAgICAgICAgIC8vIFRoaXMgbGVhZHMgdG8gYnVncyBzdWNo
IGFzIDxyZGFyOi8vcHJvYmxlbS85MTY3NjExPi4gV29yayBhcm91bmQgdGhpcwotICAgICAgICAg
ICAgLy8gYnkgYWx3YXlzIHJldHVybmluZyB0cnVlLgotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIE5ldHNjYXBl
UGx1Z2luOjpwbGF0Zm9ybUhhbmRsZVdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYgd2hl
ZWxFdmVudCkKLXsKLSAgICBzd2l0Y2ggKG1fZXZlbnRNb2RlbCkgewotICAgICAgICBjYXNlIE5Q
RXZlbnRNb2RlbENvY29hOiB7Ci0gICAgICAgICAgICBJbnRQb2ludCBldmVudFBvc2l0aW9uSW5Q
bHVnaW5Db29yZGluYXRlczsKLSAgICAgICAgICAgIGlmICghY29udmVydEZyb21Sb290Vmlldyh3
aGVlbEV2ZW50LnBvc2l0aW9uKCksIGV2ZW50UG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgICAgTlBDb2NvYUV2ZW50
IGV2ZW50ID0gaW5pdGlhbGl6ZUV2ZW50KE5QQ29jb2FFdmVudFNjcm9sbFdoZWVsKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgZXZlbnQuZGF0YS5tb3VzZS5tb2RpZmllckZsYWdzID0gbW9k
aWZpZXJGbGFncyh3aGVlbEV2ZW50KTsKLSAgICAgICAgICAgIGV2ZW50LmRhdGEubW91c2UucGx1
Z2luWCA9IGV2ZW50UG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzLngoKTsKLSAgICAgICAgICAg
IGV2ZW50LmRhdGEubW91c2UucGx1Z2luWSA9IGV2ZW50UG9zaXRpb25JblBsdWdpbkNvb3JkaW5h
dGVzLnkoKTsKLSAgICAgICAgICAgIGV2ZW50LmRhdGEubW91c2UuYnV0dG9uTnVtYmVyID0gMDsK
LSAgICAgICAgICAgIGV2ZW50LmRhdGEubW91c2UuY2xpY2tDb3VudCA9IDA7Ci0gICAgICAgICAg
ICBldmVudC5kYXRhLm1vdXNlLmRlbHRhWCA9IHdoZWVsRXZlbnQuZGVsdGEoKS53aWR0aCgpOwot
ICAgICAgICAgICAgZXZlbnQuZGF0YS5tb3VzZS5kZWx0YVkgPSB3aGVlbEV2ZW50LmRlbHRhKCku
aGVpZ2h0KCk7Ci0gICAgICAgICAgICBldmVudC5kYXRhLm1vdXNlLmRlbHRhWiA9IDA7Ci0gICAg
ICAgICAgICByZXR1cm4gTlBQX0hhbmRsZUV2ZW50KCZldmVudCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luOjpwbGF0Zm9ybUhh
bmRsZU1vdXNlRW50ZXJFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQotewot
ICAgIHN3aXRjaCAobV9ldmVudE1vZGVsKSB7Ci0gICAgICAgIGNhc2UgTlBFdmVudE1vZGVsQ29j
b2E6IHsKLSAgICAgICAgICAgIE5QQ29jb2FFdmVudCBldmVudCA9IGluaXRpYWxpemVFdmVudChO
UENvY29hRXZlbnRNb3VzZUVudGVyZWQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmaWxs
SW5Db2NvYUV2ZW50RnJvbU1vdXNlRXZlbnQoZXZlbnQsIG1vdXNlRXZlbnQsIEludFBvaW50KCkp
OwotICAgICAgICAgICAgcmV0dXJuIE5QUF9IYW5kbGVFdmVudCgmZXZlbnQpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbjo6cGxh
dGZvcm1IYW5kbGVNb3VzZUxlYXZlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVu
dCkKLXsKLSAgICBzd2l0Y2ggKG1fZXZlbnRNb2RlbCkgewotICAgICAgICBjYXNlIE5QRXZlbnRN
b2RlbENvY29hOiB7Ci0gICAgICAgICAgICBOUENvY29hRXZlbnQgZXZlbnQgPSBpbml0aWFsaXpl
RXZlbnQoTlBDb2NvYUV2ZW50TW91c2VFeGl0ZWQpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBmaWxsSW5Db2NvYUV2ZW50RnJvbU1vdXNlRXZlbnQoZXZlbnQsIG1vdXNlRXZlbnQsIEludFBv
aW50KCkpOwotICAgICAgICAgICAgcmV0dXJuIE5QUF9IYW5kbGVFdmVudCgmZXZlbnQpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIG1v
ZGlmaWVyRmxhZ3MoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCkKLXsKLSAg
ICB1bnNpZ25lZCBtb2RpZmllckZsYWdzID0gMDsKLQotICAgIGlmIChrZXlib2FyZEV2ZW50LmNh
cHNMb2NrS2V5KCkpCi0gICAgICAgIG1vZGlmaWVyRmxhZ3MgfD0gTlNFdmVudE1vZGlmaWVyRmxh
Z0NhcHNMb2NrOwotICAgIGlmIChrZXlib2FyZEV2ZW50LnNoaWZ0S2V5KCkpCi0gICAgICAgIG1v
ZGlmaWVyRmxhZ3MgfD0gTlNFdmVudE1vZGlmaWVyRmxhZ1NoaWZ0OwotICAgIGlmIChrZXlib2Fy
ZEV2ZW50LmNvbnRyb2xLZXkoKSkKLSAgICAgICAgbW9kaWZpZXJGbGFncyB8PSBOU0V2ZW50TW9k
aWZpZXJGbGFnQ29udHJvbDsKLSAgICBpZiAoa2V5Ym9hcmRFdmVudC5hbHRLZXkoKSkKLSAgICAg
ICAgbW9kaWZpZXJGbGFncyB8PSBOU0V2ZW50TW9kaWZpZXJGbGFnT3B0aW9uOwotICAgIGlmIChr
ZXlib2FyZEV2ZW50Lm1ldGFLZXkoKSkKLSAgICAgICAgbW9kaWZpZXJGbGFncyB8PSBOU0V2ZW50
TW9kaWZpZXJGbGFnQ29tbWFuZDsKLQotICAgIHJldHVybiBtb2RpZmllckZsYWdzOwotfQotCi1z
dGF0aWMgYm9vbCBpc0ZsYWdzQ2hhbmdlZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmIGtl
eWJvYXJkRXZlbnQpCi17Ci0gICAgc3dpdGNoIChrZXlib2FyZEV2ZW50Lm5hdGl2ZVZpcnR1YWxL
ZXlDb2RlKCkpIHsKLSAgICBjYXNlIDU0OiAvLyBSaWdodCBDb21tYW5kCi0gICAgY2FzZSA1NTog
Ly8gTGVmdCBDb21tYW5kCi0KLSAgICBjYXNlIDU3OiAvLyBDYXBzbG9jawotCi0gICAgY2FzZSA1
NjogLy8gTGVmdCBTaGlmdAotICAgIGNhc2UgNjA6IC8vIFJpZ2h0IFNoaWZ0Ci0KLSAgICBjYXNl
IDU4OiAvLyBMZWZ0IEFsdAotICAgIGNhc2UgNjE6IC8vIFJpZ2h0IEFsdAotICAgICAgICAgICAg
Ci0gICAgY2FzZSA1OTogLy8gTGVmdCBDdHJsCi0gICAgY2FzZSA2MjogLy8gUmlnaHQgQ3RybAot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0
YXRpYyBOUE5TU3RyaW5nICpjb252ZXJ0VG9OUE5OU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5n
KQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxOUE5TU3RyaW5nKj4oc3RhdGljX2Nhc3Q8TlNT
dHJpbmcqPihzdHJpbmcpKTsKLX0KLQotc3RhdGljIE5QQ29jb2FFdmVudCBpbml0aWFsaXplS2V5
Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBrZXlib2FyZEV2ZW50KQotewotICAg
IE5QQ29jb2FFdmVudFR5cGUgZXZlbnRUeXBlOwotCi0gICAgaWYgKGlzRmxhZ3NDaGFuZ2VkRXZl
bnQoa2V5Ym9hcmRFdmVudCkpCi0gICAgICAgIGV2ZW50VHlwZSA9IE5QQ29jb2FFdmVudEZsYWdz
Q2hhbmdlZDsKLSAgICBlbHNlIHsKLSAgICAgICAgc3dpdGNoIChrZXlib2FyZEV2ZW50LnR5cGUo
KSkgewotICAgICAgICAgICAgY2FzZSBXZWJFdmVudDo6S2V5RG93bjoKLSAgICAgICAgICAgICAg
ICBldmVudFR5cGUgPSBOUENvY29hRXZlbnRLZXlEb3duOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBXZWJFdmVudDo6S2V5VXA6Ci0gICAgICAgICAgICAgICAgZXZl
bnRUeXBlID0gTlBDb2NvYUV2ZW50S2V5VXA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBOUENvY29hRXZlbnQoKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIE5QQ29jb2FFdmVudCBldmVudCA9IGluaXRpYWxpemVFdmVudChldmVudFR5cGUpOwot
ICAgIGV2ZW50LmRhdGEua2V5Lm1vZGlmaWVyRmxhZ3MgPSBtb2RpZmllckZsYWdzKGtleWJvYXJk
RXZlbnQpOwotICAgIGV2ZW50LmRhdGEua2V5LmNoYXJhY3RlcnMgPSBjb252ZXJ0VG9OUE5OU3Ry
aW5nKGtleWJvYXJkRXZlbnQudGV4dCgpKTsKLSAgICBldmVudC5kYXRhLmtleS5jaGFyYWN0ZXJz
SWdub3JpbmdNb2RpZmllcnMgPSBjb252ZXJ0VG9OUE5OU3RyaW5nKGtleWJvYXJkRXZlbnQudW5t
b2RpZmllZFRleHQoKSk7Ci0gICAgZXZlbnQuZGF0YS5rZXkuaXNBUmVwZWF0ID0ga2V5Ym9hcmRF
dmVudC5pc0F1dG9SZXBlYXQoKTsKLSAgICBldmVudC5kYXRhLmtleS5rZXlDb2RlID0ga2V5Ym9h
cmRFdmVudC5uYXRpdmVWaXJ0dWFsS2V5Q29kZSgpOwotCi0gICAgcmV0dXJuIGV2ZW50OwotfQot
Ci1ib29sIE5ldHNjYXBlUGx1Z2luOjpwbGF0Zm9ybUhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3Qg
V2ViS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCkKLXsKLSAgICBib29sIGhhbmRsZWQgPSBm
YWxzZTsKLQotICAgIHN3aXRjaCAobV9ldmVudE1vZGVsKSB7Ci0gICAgY2FzZSBOUEV2ZW50TW9k
ZWxDb2NvYTogewotICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC50eXBlKCkgPT0gV2ViRXZlbnQ6
OktleURvd24pIHsKLSAgICAgICAgICAgIG1faGFzSGFuZGxlZEFLZXlEb3duRXZlbnQgPSB0cnVl
OwotCi0gICAgICAgICAgICBpZiAoIW1fcGx1Z2luV2FudHNMZWdhY3lDb2NvYVRleHRJbnB1dCAm
JiBtX2lzQ29tcGxleFRleHRJbnB1dEVuYWJsZWQgJiYgIWtleWJvYXJkRXZlbnQuaXNBdXRvUmVw
ZWF0KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBXaGVuIGNvbXBsZXggdGV4dCBpcyBlbmFibGVk
IGluIHRoZSBuZXcgbW9kZWwsIHRoZSBwbHVnLWluIHNob3VsZCBuZXZlcgotICAgICAgICAgICAg
ICAgIC8vIHJlY2VpdmUgYW55IGtleSBkb3duIG9yIGtleSB1cCBldmVudHMgdW50aWwgdGhlIGNv
bXBvc2l0aW9uIGlzIGNvbXBsZXRlLgotICAgICAgICAgICAgICAgIG1faWdub3JlTmV4dEtleVVw
RXZlbnRDb3VudGVyKys7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoa2V5Ym9hcmRFdmVudC50eXBlKCkgPT0gV2ViRXZlbnQ6
OktleVVwICYmIG1faWdub3JlTmV4dEtleVVwRXZlbnRDb3VudGVyKSB7Ci0gICAgICAgICAgICBt
X2lnbm9yZU5leHRLZXlVcEV2ZW50Q291bnRlci0tOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLQotICAgICAgICBOUENvY29hRXZlbnQgZXZlbnQgPSBpbml0aWFsaXplS2V5
Ym9hcmRFdmVudChrZXlib2FyZEV2ZW50KTsKLSAgICAgICAgaW50MTZfdCByZXR1cm5WYWx1ZSA9
IE5QUF9IYW5kbGVFdmVudCgmZXZlbnQpOwotICAgICAgICBoYW5kbGVkID0gcmV0dXJuVmFsdWU7
Ci0KLSAgICAgICAgaWYgKCFtX3BsdWdpbldhbnRzTGVnYWN5Q29jb2FUZXh0SW5wdXQpIHsKLSAg
ICAgICAgICAgIGlmIChldmVudC50eXBlID09IE5QQ29jb2FFdmVudEtleURvd24gJiYgcmV0dXJu
VmFsdWUgPT0ga05QRXZlbnRTdGFydElNRSkgewotICAgICAgICAgICAgICAgIGlmICgha2V5Ym9h
cmRFdmVudC5pc0F1dG9SZXBlYXQoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9pZ25vcmVOZXh0
S2V5VXBFdmVudENvdW50ZXIrKzsKLSAgICAgICAgICAgICAgICBzZXRDb21wbGV4VGV4dElucHV0
RW5hYmxlZCh0cnVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIH0KLQotICAgIC8vIE1vc3QgcGx1Zy1pbnMgc2ltcGx5IHJldHVybiB0cnVlIGZvciBhbGwg
a2V5Ym9hcmQgZXZlbnRzLCBldmVuIHRob3NlIHRoYXQgYXJlbid0IGhhbmRsZWQuCi0gICAgLy8g
VGhpcyBsZWFkcyB0byBidWdzIHN1Y2ggYXMgPHJkYXI6Ly9wcm9ibGVtLzg3NDA5MjY+LiBXZSB3
b3JrIGFyb3VuZCB0aGlzIGJ5IHJldHVybmluZyBmYWxzZQotICAgIC8vIGlmIHRoZSBrZXlib2Fy
ZCBldmVudCBoYXMgdGhlIGNvbW1hbmQgbW9kaWZpZXIgcHJlc3NlZC4KLSAgICAvLyBIb3dldmVy
LCBmb3IgY29tbWFuZC1BICh0aGUgc2hvcnRjdXJ0IGZvciAnU2VsZWN0IEFsbCcgd2Ugd2lsbCBh
bHdheXMgcmV0dXJuIHRydWUsIHNpbmNlIHdlIGRvbid0Ci0gICAgLy8gd2FudCB0aGUgZW50aXJl
IHBhZ2UgdG8gYmUgc2VsZWN0ZWQgaWYgdGhlIGZvY3VzIGlzIGluIGEgcGx1Zy1pbiB0ZXh0IGZp
ZWxkIChzZWUgPHJkYXI6Ly9wcm9ibGVtLzkzMDk5MDM+KS4KLSAgICBpZiAoa2V5Ym9hcmRFdmVu
dC5tZXRhS2V5KCkpIHsKLSAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQudGV4dCgpID09ICJhIikK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gaGFuZGxlZDsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6cGxhdGZv
cm1TZXRGb2N1cyhib29sIGhhc0ZvY3VzKQotewotICAgIG1fcGx1Z2luSGFzRm9jdXMgPSBoYXNG
b2N1czsKLSAgICBwbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkKCk7Ci0KLSAgICBzd2l0
Y2ggKG1fZXZlbnRNb2RlbCkgewotICAgICAgICBjYXNlIE5QRXZlbnRNb2RlbENvY29hOiB7Ci0g
ICAgICAgICAgICBOUENvY29hRXZlbnQgZXZlbnQgPSBpbml0aWFsaXplRXZlbnQoTlBDb2NvYUV2
ZW50Rm9jdXNDaGFuZ2VkKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZXZlbnQuZGF0YS5m
b2N1cy5oYXNGb2N1cyA9IGhhc0ZvY3VzOwotICAgICAgICAgICAgTlBQX0hhbmRsZUV2ZW50KCZl
dmVudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgTmV0
c2NhcGVQbHVnaW46OndhbnRzUGx1Z2luUmVsYXRpdmVOUFdpbmRvd0Nvb3JkaW5hdGVzKCkKLXsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbjo6d2luZG93Rm9jdXND
aGFuZ2VkKGJvb2wgaGFzRm9jdXMpCi17Ci0gICAgbV93aW5kb3dIYXNGb2N1cyA9IGhhc0ZvY3Vz
OwotICAgIHBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQoKTsKLQotICAgIHN3aXRjaCAo
bV9ldmVudE1vZGVsKSB7Ci0gICAgICAgIGNhc2UgTlBFdmVudE1vZGVsQ29jb2E6IHsKLSAgICAg
ICAgICAgIE5QQ29jb2FFdmVudCBldmVudCA9IGluaXRpYWxpemVFdmVudChOUENvY29hRXZlbnRX
aW5kb3dGb2N1c0NoYW5nZWQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBldmVudC5kYXRh
LmZvY3VzLmhhc0ZvY3VzID0gaGFzRm9jdXM7Ci0gICAgICAgICAgICBOUFBfSGFuZGxlRXZlbnQo
JmV2ZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotdm9pZCBO
ZXRzY2FwZVBsdWdpbjo6d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgSW50UmVjdCYg
d2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBJbnRSZWN0JiB2aWV3RnJhbWVJ
bldpbmRvd0Nvb3JkaW5hdGVzKQotewotICAgIG1fd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5h
dGVzID0gd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzOwotICAgIG1fdmlld0ZyYW1lSW5X
aW5kb3dDb29yZGluYXRlcyA9IHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXM7Ci0KLSAgICBz
d2l0Y2ggKG1fZXZlbnRNb2RlbCkgewotICAgICAgICBjYXNlIE5QRXZlbnRNb2RlbENvY29hOgot
ICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19
Ci0gICAgCi12b2lkIE5ldHNjYXBlUGx1Z2luOjp3aW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChib29s
IHZpc2libGUpCi17Ci0gICAgaWYgKHZpc2libGUpCi0gICAgICAgIGNhbGxTZXRXaW5kb3coKTsK
LSAgICBlbHNlCi0gICAgICAgIGNhbGxTZXRXaW5kb3dJbnZpc2libGUoKTsKLX0KLQotdWludDY0
X3QgTmV0c2NhcGVQbHVnaW46OnBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyKCkgY29u
c3QKLXsKLSAgICAvLyBKdXN0IHJldHVybiBhIGR1bW15IHZhbHVlOyB0aGlzIGlzIG9ubHkgY2Fs
bGVkIGZvciBpbi1wcm9jZXNzIHBsdWctaW5zLCB3aGljaCB3ZSBkb24ndCBzdXBwb3J0IG9uIE1h
Yy4KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90Pih0aGlzKSk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OnNlbmRDb21wbGV4VGV4
dElucHV0KGNvbnN0IFN0cmluZyYgdGV4dElucHV0KQotewotICAgIGlmICghbV9wbHVnaW5XYW50
c0xlZ2FjeUNvY29hVGV4dElucHV0KSB7Ci0gICAgICAgIC8vIEluIHRoZSB1cGRhdGVkIENvY29h
IHRleHQgaW5wdXQgc3BlYywgdGV4dCBpbnB1dCBpcyBkaXNhYmxlZCB3aGVuIHRoZSB0ZXh0IGlu
cHV0IHN0cmluZyBoYXMgYmVlbiBzZW50Ci0gICAgICAgIC8vIGJ5IHRoZSBVSSBwcm9jZXNzLiBT
aW5jZSB0aGUgVUkgcHJvY2VzcyBoYXMgYWxzbyB1cGRhdGVkIGl0cyBzdGF0ZSwgd2UgY2FuIGp1
c3QgcmVzZXQgdGhlIHZhcmlhYmxlIGhlcmUKLSAgICAgICAgLy8gaW5zdGVhZCBvZiBjYWxsaW5n
IHNldENvbXBsZXhUZXh0SW5wdXRFbmFibGVkLgotICAgICAgICBtX2lzQ29tcGxleFRleHRJbnB1
dEVuYWJsZWQgPSBmYWxzZTsKLQotICAgICAgICAvLyBUaGUgVUkgcHJvY2VzcyBjYW4gYWxzbyBk
aXNhYmxlIHRleHQgaW5wdXQgYnkgc2VuZGluZyBhbiBlbXB0eSBpbnB1dCBzdHJpbmcuIEluIHRo
aXMgY2FzZSwgd2UgZG9uJ3Qgd2FudAotICAgICAgICAvLyB0byBzZW5kIGl0IHRvIHRoZSBwbHVn
LWluLgotICAgICAgICBpZiAodGV4dElucHV0LmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIHN3aXRjaCAobV9ldmVudE1vZGVsKSB7Ci0gICAgY2FzZSBOUEV2ZW50
TW9kZWxDb2NvYTogewotICAgICAgICBOUENvY29hRXZlbnQgZXZlbnQgPSBpbml0aWFsaXplRXZl
bnQoTlBDb2NvYUV2ZW50VGV4dElucHV0KTsKLSAgICAgICAgZXZlbnQuZGF0YS50ZXh0LnRleHQg
PSBjb252ZXJ0VG9OUE5OU3RyaW5nKHRleHRJbnB1dCk7Ci0gICAgICAgIE5QUF9IYW5kbGVFdmVu
dCgmZXZlbnQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luOjpz
ZXRMYXllckhvc3RpbmdNb2RlKExheWVySG9zdGluZ01vZGUgbGF5ZXJIb3N0aW5nTW9kZSkKLXsK
LSAgICBtX2xheWVySG9zdGluZ01vZGUgPSBsYXllckhvc3RpbmdNb2RlOwotCi0gICAgLy8gVGVs
bCB0aGUgcGx1Zy1pbiBhYm91dCB0aGUgbmV3IGNvbXBvc2l0aW5nIHJlbmRlciBzZXJ2ZXIgcG9y
dC4gSWYgaXQgcmV0dXJucyBPSyB3ZSdsbCBhc2sgaXQgYWdhaW4gZm9yIGEgbmV3IGxheWVyLgot
ICAgIG1hY2hfcG9ydF90IHBvcnQgPSBOZXRzY2FwZVBsdWdpbjo6Y29tcG9zaXRpbmdSZW5kZXJT
ZXJ2ZXJQb3J0KCkuc2VuZFJpZ2h0KCk7Ci0gICAgaWYgKE5QUF9TZXRWYWx1ZShzdGF0aWNfY2Fz
dDxOUE5WYXJpYWJsZT4oV0tOVkNBTGF5ZXJSZW5kZXJTZXJ2ZXJQb3J0KSwgJnBvcnQpICE9IE5Q
RVJSX05PX0VSUk9SKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BsdWdpbkxheWVyID0gbnVs
bHB0cjsKLSAgICB1cGRhdGVQbHVnaW5MYXllcigpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2lu
OjpwbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkKCkKLXsKLSAgICBib29sIHBsdWdpbkhh
c0ZvY3VzQW5kV2luZG93SGFzRm9jdXMgPSBtX3BsdWdpbkhhc0ZvY3VzICYmIG1fd2luZG93SGFz
Rm9jdXM7Ci0KLSAgICBjb250cm9sbGVyKCktPnBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5n
ZWQocGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1cyk7Ci0KLSAgICAvLyBJbiB0aGUgdXBk
YXRlZCBDb2NvYSB0ZXh0IGlucHV0IHNwZWMsIHRoZSBwbHVnLWluIHdpbGwgZW5hYmxlIGNvbXBs
ZXggdGV4dCBpbnB1dAotICAgIC8vIGJ5IHJldHVybmluZyBrTlBFdmVudFN0YXJ0SU1FIGZyb20g
aXQncyBOUENvY29hRXZlbnRLZXlEb3duIGhhbmRsZXIuCi0gICAgaWYgKCFtX3BsdWdpbldhbnRz
TGVnYWN5Q29jb2FUZXh0SW5wdXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEluIHRoZSBv
bGQgbW9kZWwsIGlmIHRoZSBwbHVnLWluIGlzIGZvY3VzZWQsIGVuYWJsZSBjb21wbGV4IHRleHQg
aW5wdXQuCi0gICAgc2V0Q29tcGxleFRleHRJbnB1dEVuYWJsZWQocGx1Z2luSGFzRm9jdXNBbmRX
aW5kb3dIYXNGb2N1cyk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OnNldENvbXBsZXhUZXh0
SW5wdXRFbmFibGVkKGJvb2wgY29tcGxleFRleHRJbnB1dEVuYWJsZWQpCi17Ci0gICAgaWYgKG1f
aXNDb21wbGV4VGV4dElucHV0RW5hYmxlZCA9PSBjb21wbGV4VGV4dElucHV0RW5hYmxlZCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9pc0NvbXBsZXhUZXh0SW5wdXRFbmFibGVkID0gY29tcGxl
eFRleHRJbnB1dEVuYWJsZWQ7Ci0KLSAgICBQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUgY29t
cGxleFRleHRJbnB1dFN0YXRlID0gUGx1Z2luQ29tcGxleFRleHRJbnB1dERpc2FibGVkOwotICAg
IGlmIChtX2lzQ29tcGxleFRleHRJbnB1dEVuYWJsZWQpCi0gICAgICAgIGNvbXBsZXhUZXh0SW5w
dXRTdGF0ZSA9IG1fcGx1Z2luV2FudHNMZWdhY3lDb2NvYVRleHRJbnB1dCA/IFBsdWdpbkNvbXBs
ZXhUZXh0SW5wdXRFbmFibGVkTGVnYWN5IDogUGx1Z2luQ29tcGxleFRleHRJbnB1dEVuYWJsZWQ7
Ci0KLSAgICBjb250cm9sbGVyKCktPnNldENvbXBsZXhUZXh0SW5wdXRTdGF0ZShjb21wbGV4VGV4
dElucHV0U3RhdGUpOwotfQotCi1QbGF0Zm9ybUxheWVyKiBOZXRzY2FwZVBsdWdpbjo6cGx1Z2lu
TGF5ZXIoKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbGF0Zm9ybUxheWVyKj4obV9wbHVn
aW5MYXllci5nZXQoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1ha2VDR0xQcmVzZW50TGF5ZXJPcGFx
dWUoQ0FMYXllciAqcGx1Z2luUm9vdExheWVyKQotewotICAgIC8vIFdlIGxvb2sgZm9yIGEgbGF5
ZXIgdGhhdCdzIHRoZSBvbmx5IHN1YmxheWVyIG9mIHRoZSByb290IGxheWVyIHRoYXQgaXMgYW4g
aW5zdGFuY2UKLSAgICAvLyBvZiB0aGUgQ0dMUHJlc2VudExheWVyIGNsYXNzIHdoaWNoIGluIHR1
cm4gaXMgYSBzdWJjbGFzcyBvZiBDQU9wZW5HTExheWVyIGFuZCBtYWtlCi0gICAgLy8gaXQgb3Bh
cXVlIGlmIGFsbCB0aGVzZSBjb25kaXRpb25zIGhvbGQuCi0KLSAgICBOU0FycmF5ICpzdWJsYXll
cnMgPSBbcGx1Z2luUm9vdExheWVyIHN1YmxheWVyc107Ci0gICAgaWYgKFtzdWJsYXllcnMgY291
bnRdICE9IDEpCi0gICAgICAgIHJldHVybjsKLQotICAgIENsYXNzIGNnbFByZXNlbnRMYXllckNs
YXNzID0gTlNDbGFzc0Zyb21TdHJpbmcoQCJDR0xQcmVzZW50TGF5ZXIiKTsKLSAgICBBTExPV19E
RVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIGlmICghW2NnbFByZXNlbnRMYXllckNs
YXNzIGlzU3ViY2xhc3NPZkNsYXNzOltDQU9wZW5HTExheWVyIGNsYXNzXV0pCi0gICAgICAgIHJl
dHVybjsKLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLQotICAgIENBTGF5
ZXIgKmxheWVyID0gW3N1YmxheWVycyBvYmplY3RBdEluZGV4OjBdOwotICAgIGlmICghW2xheWVy
IGlzS2luZE9mQ2xhc3M6Y2dsUHJlc2VudExheWVyQ2xhc3NdKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBbbGF5ZXIgc2V0T3BhcXVlOllFU107Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW46OnVw
ZGF0ZVBsdWdpbkxheWVyKCkKLXsKLSAgICBpZiAobV9kcmF3aW5nTW9kZWwgIT0gTlBEcmF3aW5n
TW9kZWxDb3JlQW5pbWF0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2b2lkKiB2YWx1ZSA9
IDA7Ci0KLSAgICAvLyBHZXQgdGhlIENvcmUgQW5pbWF0aW9uIGxheWVyLgotICAgIGlmIChOUFBf
R2V0VmFsdWUoTlBQVnBsdWdpbkNvcmVBbmltYXRpb25MYXllciwgJnZhbHVlKSAhPSBOUEVSUl9O
T19FUlJPUikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKCFtX3BsdWdpbkxheWVyKTsKLQotICAgIC8vIFRoZSBvcmlnaW5h
bCBDb3JlIEFuaW1hdGlvbiBkcmF3aW5nIG1vZGVsIHJlcXVpcmVkIHRoYXQgcGx1Zy1pbnMgcGFz
cyBhIHJldGFpbmVkIGxheWVyCi0gICAgLy8gdG8gdGhlIGJyb3dzZXIsIHdoaWNoIHRoZSBicm93
c2VyIHdvdWxkIHRoZW4gYWRvcHQuIEhvd2V2ZXIsIHRoZSBmaW5hbCBzcGVjIGNoYW5nZWQgdGhp
cwotICAgIC8vIChTZWUgaHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL05QQVBJOkNvcmVBbmltYXRp
b25EcmF3aW5nTW9kZWwgZm9yIG1vcmUgaW5mb3JtYXRpb24pCi0gICAgLy8gYWZ0ZXIgYSB2ZXJz
aW9uIG9mIFdlYktpdDEgd2l0aCB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gaGFkIHNoaXBw
ZWQsIGJ1dCB0aGF0IG5vdyBtZWFucwotICAgIC8vIHRoYXQgYW55IHBsdWctaW5zIHRoYXQgZXhw
ZWN0IHRoZSBXZWJLaXQxIGJlaGF2aW9yIHdvdWxkIGxlYWsgdGhlIENBTGF5ZXIuCi0gICAgLy8g
Rm9yIHBsdWctaW5zIHRoYXQgd2Uga25vdyByZXR1cm4gcmV0YWluZWQgbGF5ZXJzLCB3ZSBoYXZl
IHRoZSBSZXR1cm5zUmV0YWluZWRDb3JlQW5pbWF0aW9uTGF5ZXIKLSAgICAvLyBwbHVnLWluIHF1
aXJrLiBQbHVnLWlucyBjYW4gYWxzbyBjaGVjayBmb3Igd2hldGhlciB0aGUgYnJvd3NlciBleHBl
Y3RzIGEgbm9uLXJldGFpbmVkIGxheWVyIHRvCi0gICAgLy8gYmUgcmV0dXJuZWQgYnkgdXNpbmcg
TlBOX0dldFZhbHVlIGFuZCBwYXNzIHRoZSBXS05WRXhwZWN0c05vbnJldGFpbmVkTGF5ZXIgcGFy
YW1ldGVyLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
ODI4MiBkZXNjcmliZXMgdGhlIGJ1ZyB3aGVyZSBXZWJLaXQgZXhwZWN0cyByZXRhaW5lZCBsYXll
cnMuCi0gICAgaWYgKG1fcGx1Z2luUmV0dXJuc05vbnJldGFpbmVkTGF5ZXIpCi0gICAgICAgIG1f
cGx1Z2luTGF5ZXIgPSAoX19icmlkZ2UgQ0FMYXllciAqKXZhbHVlOwotICAgIGVsc2UKLSAgICAg
ICAgbV9wbHVnaW5MYXllciA9IGFkb3B0TlMoKF9fYnJpZGdlIENBTGF5ZXIgKil2YWx1ZSk7Ci0K
LSAgICBpZiAobV9wbHVnaW5Nb2R1bGUtPnBsdWdpblF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1
aXJrczo6TWFrZU9wYXF1ZVVubGVzc1RyYW5zcGFyZW50U2lsdmVybGlnaHRCYWNrZ3JvdW5kQXR0
cmlidXRlRXhpc3RzKSAmJgotICAgICAgICAhbV9pc1RyYW5zcGFyZW50KQotICAgICAgICBtYWtl
Q0dMUHJlc2VudExheWVyT3BhcXVlKG1fcGx1Z2luTGF5ZXIuZ2V0KCkpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvbWFj
L1BsdWdpblByb3h5TWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0
c2NhcGUvbWFjL1BsdWdpblByb3h5TWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3MmU4MWMwOTY4ODVlNDRmZDdjMjFiMDk1NWE4MjE1NTI5MmE1OWJiLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL21hYy9QbHVnaW5Qcm94eU1hYy5tbQorKysgL2Rldi9udWxsCkBA
IC0xLDkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiUGx1Z2luUHJveHkuaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQot
Ci0jaW1wb3J0ICJQbHVnaW5Db250cm9sbGVyLmgiCi0jaW1wb3J0ICJQbHVnaW5Db250cm9sbGVy
UHJveHlNZXNzYWdlcy5oIgotI2ltcG9ydCAiUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKLSNp
bXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3Jl
Q0FMYXllckV4dHJhcy5oPgotCi1zdGF0aWMgY29uc3RleHByIGRvdWJsZSBmYWRlSW5EdXJhdGlv
biA9IDAuNTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyB2b2lkIG1ha2VSZW5kZXJM
YXllcihDQUxheWVyICpwbHVnaW5MYXllciwgdWludDMyX3QgbGF5ZXJIb3N0aW5nQ29udGV4dElE
KQotewotICAgIENBTGF5ZXIgKnJlbmRlckxheWVyID0gW0NBTGF5ZXIgX3dlYl9yZW5kZXJMYXll
cldpdGhDb250ZXh0SUQ6bGF5ZXJIb3N0aW5nQ29udGV4dElEXTsKLSAgICBbcmVuZGVyTGF5ZXIg
c2V0RnJhbWU6W3BsdWdpbkxheWVyIGJvdW5kc11dOwotICAgIFtyZW5kZXJMYXllciBzZXRBdXRv
cmVzaXppbmdNYXNrOmtDQUxheWVyV2lkdGhTaXphYmxlIHwga0NBTGF5ZXJIZWlnaHRTaXphYmxl
XTsKLSAgICBbcGx1Z2luTGF5ZXIgc2V0U3VibGF5ZXJzOkBbcmVuZGVyTGF5ZXJdXTsKLX0KLQot
UGxhdGZvcm1MYXllciogUGx1Z2luUHJveHk6OnBsdWdpbkxheWVyKCkKLXsKLSAgICBpZiAoIW1f
cGx1Z2luTGF5ZXIgJiYgbV9yZW1vdGVMYXllckNsaWVudElEKSB7Ci0gICAgICAgIC8vIENyZWF0
ZSBhIGxheWVyIHdpdGggZmxpcHBlZCBnZW9tZXRyeSBhbmQgYWRkIHRoZSByZWFsIHBsdWctaW4g
bGF5ZXIgYXMgYSBzdWJsYXllcgotICAgICAgICAvLyBzbyB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0g
d2lsbCBtYXRjaCB0aGUgZXZlbnQgY29vcmRpbmF0ZSBzeXN0ZW0uCi0gICAgICAgIG1fcGx1Z2lu
TGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOwotICAgICAgICBbbV9wbHVn
aW5MYXllciBzZXRHZW9tZXRyeUZsaXBwZWQ6WUVTXTsKLSAgICAgICAgbWFrZVJlbmRlckxheWVy
KG1fcGx1Z2luTGF5ZXIuZ2V0KCksIG1fcmVtb3RlTGF5ZXJDbGllbnRJRCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG1fcGx1Z2luTGF5ZXIuZ2V0KCk7Ci19Ci0KLWJvb2wgUGx1Z2luUHJveHk6Om5l
ZWRzQmFja2luZ1N0b3JlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIW1fcmVtb3RlTGF5ZXJDbGll
bnRJRDsKLX0KLQotdm9pZCBQbHVnaW5Qcm94eTo6cGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hh
bmdlZChib29sIHBsdWdpbkhhc0ZvY3VzQW5kV2luZG93SGFzRm9jdXMpCi17Ci0gICAgY29udHJv
bGxlcigpLT5wbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkKHBsdWdpbkhhc0ZvY3VzQW5k
V2luZG93SGFzRm9jdXMpOwotfQotCi12b2lkIFBsdWdpblByb3h5OjpzZXRDb21wbGV4VGV4dElu
cHV0U3RhdGUodWludDY0X3QgY29tcGxleFRleHRJbnB1dFN0YXRlKQotewotICAgIGNvbnRyb2xs
ZXIoKS0+c2V0Q29tcGxleFRleHRJbnB1dFN0YXRlKHN0YXRpY19jYXN0PFBsdWdpbkNvbXBsZXhU
ZXh0SW5wdXRTdGF0ZT4oY29tcGxleFRleHRJbnB1dFN0YXRlKSk7Ci19Ci0KLXZvaWQgUGx1Z2lu
UHJveHk6OnNldExheWVySG9zdGluZ01vZGUoTGF5ZXJIb3N0aW5nTW9kZSBsYXllckhvc3RpbmdN
b2RlKQotewotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQ
bHVnaW5Db250cm9sbGVyUHJveHk6OlNldExheWVySG9zdGluZ01vZGUoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGxheWVySG9zdGluZ01vZGUpKSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLX0KLQotdm9p
ZCBQbHVnaW5Qcm94eTo6c2V0TGF5ZXJIb3N0aW5nQ29udGV4dElEKHVpbnQzMl90IGxheWVySG9z
dGluZ0NvbnRleHRJRCkKLXsKLSAgICBBU1NFUlQobV9wbHVnaW5MYXllci5nZXQoKSk7Ci0KLSAg
ICBtX3JlbW90ZUxheWVyQ2xpZW50SUQgPSBsYXllckhvc3RpbmdDb250ZXh0SUQ7Ci0gICAgbWFr
ZVJlbmRlckxheWVyKG1fcGx1Z2luTGF5ZXIuZ2V0KCksIG1fcmVtb3RlTGF5ZXJDbGllbnRJRCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS93aW4vUGx1Z2luUHJveHlXaW4uY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1BsdWdpbnMvTmV0c2NhcGUvd2luL1BsdWdpblByb3h5V2luLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggY2FhN2YyYWUxMWQ3NDdjOGMxZjFlZjllMGM5NjllNDM5MjVhMjUx
YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS93aW4vUGx1Z2luUHJveHlXaW4uY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NyBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJveHkuaCIKLQotI2lmIEVOQUJMRShQTFVH
SU5fUFJPQ0VTUykKLQotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWJvb2wgUGx1Z2luUHJveHk6Om5lZWRzQmFja2luZ1N0b3JlKCkg
Y29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShQTFVHSU5fUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbkNvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbkNvbnRyb2xs
ZXIuaAppbmRleCAzYjdhZmVkYTU3NmViMmZiYzY1NzhlNDRlNTBhY2RlZDM4MTU1ZWU5Li5mOGVk
MjczZmY4MzUwNjg3YjE0NDE5N2M5NWYzZGJhMzdlNTljNGVjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Db250cm9sbGVyLmgKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luQ29udHJvbGxlci5oCkBAIC0yOCwxMCAr
MjgsNiBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIu
aD4KIAotI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgIlBsdWdpbkNvbXBsZXhUZXh0SW5w
dXRTdGF0ZS5oIgotI2VuZGlmCi0KIHN0cnVjdCBOUE9iamVjdDsKIHR5cGVkZWYgc3RydWN0IF9O
UFZhcmlhbnQgTlBWYXJpYW50OwogdHlwZWRlZiB2b2lkKiBOUElkZW50aWZpZXI7CkBAIC03NSwy
MyArNzEsNiBAQCBwdWJsaWM6CiAgICAgLy8gQ2FuY2VscyB0aGUgbG9hZCBvZiB0aGUgbWFudWFs
IHN0cmVhbS4KICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsTWFudWFsU3RyZWFtTG9hZCgpID0gMDsK
IAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIC8vIEdldCB0aGUgTlBPYmpl
Y3QgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgd2luZG93IEphdmFTY3JpcHQgb2JqZWN0LiBSZXR1
cm5zIGEgcmV0YWluZWQgb2JqZWN0LgotICAgIHZpcnR1YWwgTlBPYmplY3QqIHdpbmRvd1Njcmlw
dE5QT2JqZWN0KCkgPSAwOwotCi0gICAgLy8gR2V0IHRoZSBOUE9iamVjdCB0aGF0IGNvcnJlc3Bv
bmRzIHRvIHRoZSBwbHVnLWluJ3MgZWxlbWVudC4gUmV0dXJucyBhIHJldGFpbmVkIG9iamVjdC4K
LSAgICB2aXJ0dWFsIE5QT2JqZWN0KiBwbHVnaW5FbGVtZW50TlBPYmplY3QoKSA9IDA7Ci0KLSAg
ICAvLyBFdmFsdWF0ZXMgdGhlIGdpdmVuIHNjcmlwdCBzdHJpbmcgaW4gdGhlIGNvbnRleHQgb2Yg
dGhlIGdpdmVuIE5QT2JqZWN0LgotICAgIHZpcnR1YWwgYm9vbCBldmFsdWF0ZShOUE9iamVjdCos
IGNvbnN0IFN0cmluZyYgc2NyaXB0U3RyaW5nLCBOUFZhcmlhbnQqIHJlc3VsdCwgYm9vbCBhbGxv
d1BvcHVwcykgPSAwOwotCi0gICAgLy8gQ2FsbGVkIGJ5IHRoZSBOZXRzY2FwZSBwbHVnLWluIHdo
ZW4gaXQgc3RhcnRzIG9yIHN0b3BzIHBsYXlpbmcgYXVkaW8uCi0gICAgdmlydHVhbCB2b2lkIHNl
dFBsdWdpbklzUGxheWluZ0F1ZGlvKGJvb2wpID0gMDsKLQotICAgIC8vIFJldHVybnMgd2hldGhl
ciB0aGUgcGx1Z2luIHNob3VsZCBiZSBtdXRlZC4KLSAgICB2aXJ0dWFsIGJvb2wgaXNNdXRlZCgp
IGNvbnN0ID0gMDsKLSNlbmRpZgotCiAgICAgLy8gU2V0IHRoZSBzdGF0dXNiYXIgdGV4dC4KICAg
ICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVzYmFyVGV4dChjb25zdCBTdHJpbmcmKSA9IDA7CiAKQEAg
LTEwNSw5ICs4NCw2IEBAIHB1YmxpYzoKICAgICAvLyBUZWxscyB0aGUgY29udHJvbGxlciB0aGF0
IHRoZSBwbHVnLWluIGZvY3VzIG9yIHdpbmRvdyBmb2N1cyBkaWQgY2hhbmdlLgogICAgIHZpcnR1
YWwgdm9pZCBwbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wpID0gMDsKIAotICAg
IC8vIFRlbGxzIHRoZSBjb250cm9sbGVyIHRoYXQgY29tcGxleCB0ZXh0IGlucHV0IGJlIGVuYWJs
ZWQgb3IgZGlzYWJsZWQgZm9yIHRoZSBwbHVnLWluLgotICAgIHZpcnR1YWwgdm9pZCBzZXRDb21w
bGV4VGV4dElucHV0U3RhdGUoUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKSA9IDA7Ci0KICAg
ICAvLyBSZXR1cm5zIHRoZSBtYWNoIHBvcnQgb2YgdGhlIGNvbXBvc2l0aW5nIHJlbmRlciBzZXJ2
ZXIuCiAgICAgdmlydHVhbCBjb25zdCBXVEY6Ok1hY2hTZW5kUmlnaHQmIGNvbXBvc2l0aW5nUmVu
ZGVyU2VydmVyUG9ydCgpID0gMDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzg5MWU5ZGJlN2I0MmE5YTY0MTcxZDZkOWRjYzRj
Zjk2N2ViNTRjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9u
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NDb25uZWN0aW9uLmgiCi0KLSNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIk5QT2JqZWN0TWVzc2Fn
ZVJlY2VpdmVyTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJOUFJlbW90ZU9iamVjdE1hcC5oIgotI2lu
Y2x1ZGUgIk5QUnVudGltZU9iamVjdE1hcC5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NDb25u
ZWN0aW9uTWFuYWdlci5oIgotI2luY2x1ZGUgIlBsdWdpblByb3h5LmgiCi0jaW5jbHVkZSAiV2Vi
UHJvY2Vzcy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246OlBsdWdp
blByb2Nlc3NDb25uZWN0aW9uKFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlciogcGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLCB1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4sIElQ
Qzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllciwgYm9vbCBzdXBw
b3J0c0FzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uKQotICAgIDogbV9wbHVnaW5Qcm9j
ZXNzQ29ubmVjdGlvbk1hbmFnZXIocGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyKQotICAg
ICwgbV9wbHVnaW5Qcm9jZXNzVG9rZW4ocGx1Z2luUHJvY2Vzc1Rva2VuKQotICAgICwgbV9zdXBw
b3J0c0FzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uKHN1cHBvcnRzQXN5bmNocm9ub3Vz
UGx1Z2luSW5pdGlhbGl6YXRpb24pCi17Ci0gICAgbV9jb25uZWN0aW9uID0gSVBDOjpDb25uZWN0
aW9uOjpjcmVhdGVDbGllbnRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZGVudGlmaWVyLCAqdGhpcyk7
Ci0KLSAgICBtX25wUmVtb3RlT2JqZWN0TWFwID0gTlBSZW1vdGVPYmplY3RNYXA6OmNyZWF0ZSht
X2Nvbm5lY3Rpb24uZ2V0KCkpOwotCi0gICAgbV9jb25uZWN0aW9uLT5vcGVuKCk7Ci19Ci0KLVBs
dWdpblByb2Nlc3NDb25uZWN0aW9uOjp+UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24oKQotewotICAg
IEFTU0VSVCghbV9jb25uZWN0aW9uKTsKLSAgICBBU1NFUlQoIW1fbnBSZW1vdGVPYmplY3RNYXAp
OwotfQotCi12b2lkIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOjphZGRQbHVnaW5Qcm94eShQbHVn
aW5Qcm94eSogcGx1Z2luKQotewotICAgIEFTU0VSVCghbV9wbHVnaW5zLmNvbnRhaW5zKHBsdWdp
bi0+cGx1Z2luSW5zdGFuY2VJRCgpKSk7Ci0gICAgbV9wbHVnaW5zLnNldChwbHVnaW4tPnBsdWdp
bkluc3RhbmNlSUQoKSwgcGx1Z2luKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlv
bjo6cmVtb3ZlUGx1Z2luUHJveHkoUGx1Z2luUHJveHkqIHBsdWdpbikKLXsKLSAgICBBU1NFUlQo
bV9wbHVnaW5zLmNvbnRhaW5zKHBsdWdpbi0+cGx1Z2luSW5zdGFuY2VJRCgpKSk7Ci0gICAgbV9w
bHVnaW5zLnJlbW92ZShwbHVnaW4tPnBsdWdpbkluc3RhbmNlSUQoKSk7Ci0KLSAgICAvLyBJbnZh
bGlkYXRlIGFsbCBvYmplY3RzIHJlbGF0ZWQgdG8gdGhpcyBwbHVnLWluLgotICAgIG1fbnBSZW1v
dGVPYmplY3RNYXAtPnBsdWdpbkRlc3Ryb3llZChwbHVnaW4pOwotCi0gICAgaWYgKCFtX3BsdWdp
bnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX25wUmVtb3RlT2JqZWN0TWFw
ID0gbnVsbHB0cjsKLQotICAgIC8vIFdlIGhhdmUgbm8gbW9yZSBwbHVnLWlucywgaW52YWxpZGF0
ZSB0aGUgY29ubmVjdGlvbiB0byB0aGUgcGx1Zy1pbiBwcm9jZXNzLgotICAgIEFTU0VSVChtX2Nv
bm5lY3Rpb24pOwotICAgIG1fY29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOwotICAgIG1fY29ubmVj
dGlvbiA9IG51bGxwdHI7Ci0KLSAgICAvLyBUaGlzIHdpbGwgY2F1c2UgdXMgdG8gYmUgZGVsZXRl
ZC4KLSAgICBtX3BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci0+cmVtb3ZlUGx1Z2luUHJv
Y2Vzc0Nvbm5lY3Rpb24odGhpcyk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246
OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNv
ZGVyJiBkZWNvZGVyKQotewotICAgIEFTU0VSVChkZWNvZGVyLmRlc3RpbmF0aW9uSUQoKSk7Ci0K
LSAgICBQbHVnaW5Qcm94eSogcGx1Z2luUHJveHkgPSBtX3BsdWdpbnMuZ2V0KGRlY29kZXIuZGVz
dGluYXRpb25JRCgpKTsKLSAgICBpZiAoIXBsdWdpblByb3h5KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBwbHVnaW5Qcm94eS0+ZGlkUmVjZWl2ZVBsdWdpblByb3h5TWVzc2FnZShjb25uZWN0aW9u
LCBkZWNvZGVyKTsKLX0KLQotYm9vbCBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2
ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBk
ZWNvZGVyLCBVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQotewotICAgIGlm
IChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6TlBPYmplY3RNZXNz
YWdlUmVjZWl2ZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkKLSAgICAgICAgcmV0dXJuIG1fbnBS
ZW1vdGVPYmplY3RNYXAtPmRpZFJlY2VpdmVTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVy
LCByZXBseUVuY29kZXIpOwotCi0gICAgdWludDY0X3QgZGVzdGluYXRpb25JRCA9IGRlY29kZXIu
ZGVzdGluYXRpb25JRCgpOwotCi0gICAgaWYgKCFkZXN0aW5hdGlvbklEKQotICAgICAgICByZXR1
cm4gZGlkUmVjZWl2ZVN5bmNQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2UoY29ubmVjdGlv
biwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKLQotICAgIFBsdWdpblByb3h5KiBwbHVnaW5Qcm94
eSA9IG1fcGx1Z2lucy5nZXQoZGVzdGluYXRpb25JRCk7Ci0gICAgaWYgKCFwbHVnaW5Qcm94eSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHBsdWdpblByb3h5LT5kaWRSZWNl
aXZlU3luY1BsdWdpblByb3h5TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29k
ZXIpOwotfQotCi12b2lkIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOjpkaWRDbG9zZShJUEM6OkNv
bm5lY3Rpb24mKQotewotICAgIC8vIFRoZSBwbHVnLWluIHByb2Nlc3MgbXVzdCBoYXZlIGNyYXNo
ZWQuCi0gICAgZm9yIChIYXNoTWFwPHVpbnQ2NF90LCBQbHVnaW5Qcm94eSo+Ojpjb25zdF9pdGVy
YXRvcjo6VmFsdWVzIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCkudmFsdWVzKCksIGVuZCA9IG1fcGx1
Z2lucy5lbmQoKS52YWx1ZXMoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFBsdWdpblBy
b3h5KiBwbHVnaW5Qcm94eSA9ICgqaXQpOwotCi0gICAgICAgIHBsdWdpblByb3h5LT5wbHVnaW5Q
cm9jZXNzQ3Jhc2hlZCgpOwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlv
bjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6TWVzc2Fn
ZU5hbWUpCi17Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246OnNldEV4Y2VwdGlv
bihjb25zdCBTdHJpbmcmIGV4Y2VwdGlvblN0cmluZywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIE5QUnVudGltZU9iamVjdE1hcDo6c2V0R2xv
YmFsRXhjZXB0aW9uKGV4Y2VwdGlvblN0cmluZyk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
LX0KLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMTk0N2NlZGYzN2ZkZjk3ZTg2YTZjMTY1M2MxMmQ5ODg1NzgyNzc3Yy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5oCisrKyAvZGV2L251bGwK
QEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb25faAotI2RlZmluZSBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbl9oCi0KLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRl
ICJQbHVnaW4uaCIKLSNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzLmgiCi0jaW5jbHVkZSAiUGx1Z2lu
UHJvY2Vzc0F0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgTlBSZW1vdGVPYmplY3RNYXA7Ci1jbGFzcyBQbHVnaW5Q
cm9jZXNzQ29ubmVjdGlvbk1hbmFnZXI7Ci1jbGFzcyBQbHVnaW5Qcm94eTsKLSAgICAKLWNsYXNz
IFBsdWdpblByb2Nlc3NDb25uZWN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb24+LCBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbj4gY3JlYXRlKFBsdWdpblByb2Nlc3NDb25u
ZWN0aW9uTWFuYWdlciogcGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLCB1aW50NjRfdCBw
bHVnaW5Qcm9jZXNzVG9rZW4sIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9u
SWRlbnRpZmllciwgYm9vbCBzdXBwb3J0c0FzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9u
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb24ocGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLCBwbHVnaW5Qcm9jZXNzVG9rZW4s
IGNvbm5lY3Rpb25JZGVudGlmaWVyLCBzdXBwb3J0c0FzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxp
emF0aW9uKSk7Ci0gICAgfQotICAgIH5QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbigpOwotCi0gICAg
dWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2VuKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5Qcm9j
ZXNzVG9rZW47IH0KLQotICAgIElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQotCi0gICAgdm9pZCBhZGRQbHVnaW5Qcm94eShQ
bHVnaW5Qcm94eSopOwotICAgIHZvaWQgcmVtb3ZlUGx1Z2luUHJveHkoUGx1Z2luUHJveHkqKTsK
LQotICAgIE5QUmVtb3RlT2JqZWN0TWFwKiBucFJlbW90ZU9iamVjdE1hcCgpIGNvbnN0IHsgcmV0
dXJuIG1fbnBSZW1vdGVPYmplY3RNYXAuZ2V0KCk7IH0KLQotICAgIGJvb2wgc3VwcG9ydHNBc3lu
Y2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3VwcG9ydHNB
c3luY2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbjsgfQotICAgIAotcHJpdmF0ZToKLSAgICBQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbihQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIqLCB1
aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4sIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBj
b25uZWN0aW9uSWRlbnRpZmllciwgYm9vbCBzdXBwb3J0c0FzeW5jaHJvbm91c0luaXRpYWxpemF0
aW9uKTsKLQotICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50Ci0gICAgdm9pZCBkaWRSZWNl
aXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKLSAg
ICBib29sIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImLCBVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkQ2xv
c2UoSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRSZWNlaXZlSW52YWxp
ZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpNZXNzYWdlTmFtZSkgb3ZlcnJpZGU7Ci0K
LSAgICAvLyBNZXNzYWdlIGhhbmRsZXJzLgotICAgIGJvb2wgZGlkUmVjZWl2ZVN5bmNQbHVnaW5Q
cm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwg
VW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mKTsKLSAgICB2b2lkIHNldEV4Y2VwdGlvbihjb25zdCBT
dHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotCi0gICAgUGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb25NYW5hZ2VyKiBtX3BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcjsKLSAg
ICB1aW50NjRfdCBtX3BsdWdpblByb2Nlc3NUb2tlbjsKLQotICAgIC8vIFRoZSBjb25uZWN0aW9u
IGZyb20gdGhlIHdlYiBwcm9jZXNzIHRvIHRoZSBwbHVnLWluIHByb2Nlc3MuCi0gICAgUmVmUHRy
PElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwotCi0gICAgLy8gVGhlIHBsdWctaW5zLiBX
ZSB1c2UgYSB3ZWFrIHJlZmVyZW5jZSB0byB0aGUgcGx1Zy1pbiBwcm94aWVzIGJlY2F1c2UgdGhl
IHBsdWctaW4gdmlldyBob2xkcyB0aGUgc3Ryb25nIHJlZmVyZW5jZS4KLSAgICBIYXNoTWFwPHVp
bnQ2NF90LCBQbHVnaW5Qcm94eSo+IG1fcGx1Z2luczsKLQotICAgIFJlZlB0cjxOUFJlbW90ZU9i
amVjdE1hcD4gbV9ucFJlbW90ZU9iamVjdE1hcDsKLSAgICAKLSAgICBib29sIG1fc3VwcG9ydHNB
c3luY2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNlbmRpZiAv
LyBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uLm1l
c3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWJkOWU4MDZiOTY2MGY1
ZDNkYjA5NTU3NjZlYjgyNDY5NzNjM2ZkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblBy
b2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBA
QAotIyBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
IwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0KLW1lc3NhZ2VzIC0+IFBsdWdpblByb2Nlc3NDb25uZWN0aW9u
IExlZ2FjeVJlY2VpdmVyIHsKLSAgICAjIFNldCBhIGdsb2JhbCBKYXZhU2NyaXB0IGV4Y2VwdGlv
bi4KLSAgICBTZXRFeGNlcHRpb24oU3RyaW5nIGV4Y2VwdGlvblN0cmluZykgLT4gKCkgU3luY2hy
b25vdXMKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYzMjg0YzY4N2FjMzEzN2NmOWE3YTk0YWEz
MmZhZTEzMmRmNmY2My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVj
dGlvbk1hbmFnZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzQ29u
bmVjdGlvbk1hbmFnZXIuaCIKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0j
aW5jbHVkZSAiRGVjb2Rlci5oIgotI2luY2x1ZGUgIkVuY29kZXIuaCIKLSNpbmNsdWRlICJQbHVn
aW5Qcm9jZXNzQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NDb25uZWN0aW9u
TWFuYWdlck1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0j
aW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eU1lc3NhZ2Vz
LmgiCi0KLSNpZiBPUyhEQVJXSU4pICYmICFVU0UoVU5JWF9ET01BSU5fU09DS0VUUykKLSNpbmNs
dWRlICJNYWNoUG9ydC5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1SZWY8UGx1
Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyPiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFn
ZXI6OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGx1Z2luUHJvY2Vzc0Nv
bm5lY3Rpb25NYW5hZ2VyKTsKLX0KLQotUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyOjpQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIoKQotICAgIDogbV9xdWV1ZShXb3JrUXVldWU6
OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIi
KSkKLXsKLX0KLQotUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyOjp+UGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb25NYW5hZ2VyKCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQot
dm9pZCBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXI6OmluaXRpYWxpemVDb25uZWN0aW9u
KElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbikKLXsKLSAgICBjb25uZWN0aW9uLT5hZGRXb3Jr
UXVldWVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFu
YWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3F1ZXVlLmdldCgpLCB0aGlzKTsKLX0KLQot
UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcjo6
Z2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24odWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2VuKQot
ewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbnMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fcGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25zW2ld
LT5wbHVnaW5Qcm9jZXNzVG9rZW4oKSA9PSBwbHVnaW5Qcm9jZXNzVG9rZW4pCi0gICAgICAgICAg
ICByZXR1cm4gbV9wbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbnNbaV0uZ2V0KCk7Ci0gICAgfQotCi0g
ICAgSVBDOjpBdHRhY2htZW50IGVuY29kZWRDb25uZWN0aW9uSWRlbnRpZmllcjsKLSAgICBib29s
IHN1cHBvcnRzQXN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb247Ci0gICAgaWYgKCFXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdl
czo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbihwbHVnaW5Qcm9j
ZXNzVG9rZW4pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRQbHVnaW5Qcm9jZXNzQ29ubmVj
dGlvbjo6UmVwbHkoZW5jb2RlZENvbm5lY3Rpb25JZGVudGlmaWVyLCBzdXBwb3J0c0FzeW5jaHJv
bm91c0luaXRpYWxpemF0aW9uKSwgMCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0jaWYg
VVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCi0gICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVy
IGNvbm5lY3Rpb25JZGVudGlmaWVyID0gZW5jb2RlZENvbm5lY3Rpb25JZGVudGlmaWVyLnJlbGVh
c2VGaWxlRGVzY3JpcHRvcigpOwotI2VsaWYgT1MoREFSV0lOKQotICAgIElQQzo6Q29ubmVjdGlv
bjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcihlbmNvZGVkQ29ubmVjdGlvbklkZW50
aWZpZXIucG9ydCgpKTsKLSNlbGlmIE9TKFdJTkRPV1MpCi0gICAgSVBDOjpDb25uZWN0aW9uOjpJ
ZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyID0gZW5jb2RlZENvbm5lY3Rpb25JZGVudGlm
aWVyLmhhbmRsZSgpOwotI2VuZGlmCi0gICAgaWYgKCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZp
ZXJJc1ZhbGlkKGNvbm5lY3Rpb25JZGVudGlmaWVyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBhdXRvIHBsdWdpblByb2Nlc3NDb25uZWN0aW9uID0gUGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb246OmNyZWF0ZSh0aGlzLCBwbHVnaW5Qcm9jZXNzVG9rZW4sIGNvbm5lY3Rpb25JZGVudGlm
aWVyLCBzdXBwb3J0c0FzeW5jaHJvbm91c0luaXRpYWxpemF0aW9uKTsKLSAgICBtX3BsdWdpblBy
b2Nlc3NDb25uZWN0aW9ucy5hcHBlbmQocGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24uY29weVJlZigp
KTsKLQotICAgIHsKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fdG9rZW5zQW5kQ29ubmVjdGlv
bnNMb2NrIH07Ci0gICAgICAgIEFTU0VSVCghbV90b2tlbnNBbmRDb25uZWN0aW9ucy5jb250YWlu
cyhwbHVnaW5Qcm9jZXNzVG9rZW4pKTsKLQotICAgICAgICBtX3Rva2Vuc0FuZENvbm5lY3Rpb25z
LnNldChwbHVnaW5Qcm9jZXNzVG9rZW4sIHBsdWdpblByb2Nlc3NDb25uZWN0aW9uLT5jb25uZWN0
aW9uKCkpOwotICAgIH0KLQotICAgIHJldHVybiBwbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5wdHIo
KTsKLX0KLQotdm9pZCBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXI6OnJlbW92ZVBsdWdp
blByb2Nlc3NDb25uZWN0aW9uKFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKiBwbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbikKLXsKLSAgICBzaXplX3QgdmVjdG9ySW5kZXggPSBtX3BsdWdpblByb2Nlc3ND
b25uZWN0aW9ucy5maW5kKHBsdWdpblByb2Nlc3NDb25uZWN0aW9uKTsKLSAgICBBU1NFUlQodmVj
dG9ySW5kZXggIT0gbm90Rm91bmQpOwotCi0gICAgewotICAgICAgICBMb2NrZXIgbG9ja2VyIHsg
bV90b2tlbnNBbmRDb25uZWN0aW9uc0xvY2sgfTsKLSAgICAgICAgQVNTRVJUKG1fdG9rZW5zQW5k
Q29ubmVjdGlvbnMuY29udGFpbnMocGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24tPnBsdWdpblByb2Nl
c3NUb2tlbigpKSk7Ci0gICAgICAgIAotICAgICAgICBtX3Rva2Vuc0FuZENvbm5lY3Rpb25zLnJl
bW92ZShwbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi0+cGx1Z2luUHJvY2Vzc1Rva2VuKCkpOwotICAg
IH0KLQotICAgIG1fcGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25zLnJlbW92ZSh2ZWN0b3JJbmRleCk7
Ci19Ci0KLXZvaWQgUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyOjpwbHVnaW5Qcm9jZXNz
Q3Jhc2hlZCh1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4pCi17Ci0gICAgTG9ja2VyIGxvY2tl
ciB7IG1fdG9rZW5zQW5kQ29ubmVjdGlvbnNMb2NrIH07Ci0gICAgSVBDOjpDb25uZWN0aW9uKiBj
b25uZWN0aW9uID0gbV90b2tlbnNBbmRDb25uZWN0aW9ucy5nZXQocGx1Z2luUHJvY2Vzc1Rva2Vu
KTsKLQotICAgIC8vIEl0J3MgT0sgZm9yIGNvbm5lY3Rpb24gdG8gYmUgbnVsbCBoZXJlOyBpdCB3
aWxsIGhhcHBlbiBpZiB0aGlzIHdlYiBwcm9jZXNzIGRvZXNuJ3Qga25vdwotICAgIC8vIGFueXRo
aW5nIGFib3V0IHRoZSBwbHVnLWluIHByb2Nlc3MuCi0gICAgaWYgKCFjb25uZWN0aW9uKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBjb25uZWN0aW9uLT5wb3N0Q29ubmVjdGlvbkRpZENsb3NlT25D
b25uZWN0aW9uV29ya1F1ZXVlKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9u
TWFuYWdlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTQ2ZGYxMTBiMDUyNDc0
ODk2MDU2MDY2YjgyNGU4NDFmOTBhMzNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblBy
b2Nlc3NDb25uZWN0aW9uTWFuYWdlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyX2gKLSNk
ZWZpbmUgUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyX2gKLQotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzcy5oIgotI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYv
TG9jay5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgotCi0vLyBNYW5hZ2VzIHBsdWctaW4gcHJvY2VzcyBjb25uZWN0aW9ucyBmb3Ig
dGhlIGdpdmVuIHdlYiBwcm9jZXNzLgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgUGx1
Z2luUHJvY2Vzc0Nvbm5lY3Rpb247Ci0gICAgICAgIAotY2xhc3MgUGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb25NYW5hZ2VyIDogcHVibGljIElQQzo6Q29ubmVjdGlvbjo6V29ya1F1ZXVlTWVzc2FnZVJl
Y2VpdmVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFBsdWdpblByb2Nlc3NDb25uZWN0aW9u
TWFuYWdlcj4gY3JlYXRlKCk7Ci0gICAgflBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcigp
OwotCi0gICAgdm9pZCBpbml0aWFsaXplQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24qKTsKLQot
ICAgIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKiBnZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbih1
aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4pOwotICAgIHZvaWQgcmVtb3ZlUGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb24oUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24qKTsKLQotcHJpdmF0ZToKLSAgICBQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIoKTsKLQotICAgIC8vIElQQzo6Q29ubmVjdGlv
bjo6V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyLgotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHBs
dWdpblByb2Nlc3NDcmFzaGVkKHVpbnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbik7Ci0KLSAgICBS
ZWY8V29ya1F1ZXVlPiBtX3F1ZXVlOwotCi0gICAgVmVjdG9yPFJlZlB0cjxQbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbj4+IG1fcGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25zOwotCi0gICAgTG9jayBtX3Rv
a2Vuc0FuZENvbm5lY3Rpb25zTG9jazsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8SVBD
OjpDb25uZWN0aW9uPj4gbV90b2tlbnNBbmRDb25uZWN0aW9ucyBXVEZfR1VBUkRFRF9CWV9MT0NL
KG1fdG9rZW5zQW5kQ29ubmVjdGlvbnNMb2NrKTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jZW5kaWYgLy8gUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rp
b25NYW5hZ2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5tZXNz
YWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQwNjc2ZDdkZmExMzgxZGVi
ZWFlNzdhYzNlZDUzYWM0NDQ2ZTdlMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9j
ZXNzQ29ubmVjdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwyOSAr
MCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0j
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotbWVzc2FnZXMgLT4gUGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb25NYW5hZ2VyIHsKLSAgICBQbHVnaW5Qcm9jZXNzQ3Jhc2hlZCh1aW50NjRfdCBwbHVnaW5Q
cm9jZXNzVG9rZW4pCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luUHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
Y2VkN2RhMDc1MDJmNjJiYWM2YWY2NzllMTYxMGQ0ZTY1OWUwN2ZmLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblByb3h5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc0NyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpblByb3h5Lmgi
Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2luY2x1ZGUgIkRhdGFSZWZl
cmVuY2UuaCIKLSNpbmNsdWRlICJOUFJlbW90ZU9iamVjdE1hcC5oIgotI2luY2x1ZGUgIk5QUnVu
dGltZVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIk5QVmFyaWFudERhdGEuaCIKLSNpbmNsdWRlICJQ
bHVnaW5Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiUGx1Z2luQ29udHJvbGxlclByb3h5TWVzc2Fn
ZXMuaCIKLSNpbmNsdWRlICJQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMuaCIKLSNpbmNsdWRlICJQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NDb25uZWN0
aW9uTWFuYWdlci5oIgotI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgotI2luY2x1ZGUgIldl
YkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIldlYktleWJvYXJkRXZlbnQuaCIKLSNp
bmNsdWRlICJXZWJNb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgotI2luY2x1
ZGUgIldlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJXaGVlbEV2
ZW50LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotCi1zdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVQbHVnaW5JbnN0YW5jZUlE
KCkKLXsKLSAgICBzdGF0aWMgdWludDY0X3QgdW5pcXVlUGx1Z2luSW5zdGFuY2VJRDsKLSAgICBy
ZXR1cm4gKyt1bmlxdWVQbHVnaW5JbnN0YW5jZUlEOwotfQotCi1SZWY8UGx1Z2luUHJveHk+IFBs
dWdpblByb3h5OjpjcmVhdGUodWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2VuKQotewotICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFBsdWdpblByb3h5KHBsdWdpblByb2Nlc3NUb2tlbikpOwotfQot
Ci1QbHVnaW5Qcm94eTo6UGx1Z2luUHJveHkodWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2VuKQot
ICAgIDogUGx1Z2luKFBsdWdpblByb3h5VHlwZSkKLSAgICAsIG1fcGx1Z2luUHJvY2Vzc1Rva2Vu
KHBsdWdpblByb2Nlc3NUb2tlbikKLSAgICAsIG1fcGx1Z2luSW5zdGFuY2VJRChnZW5lcmF0ZVBs
dWdpbkluc3RhbmNlSUQoKSkKLXsKLX0KLQotUGx1Z2luUHJveHk6On5QbHVnaW5Qcm94eSgpCi17
Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OnBsdWdpblByb2Nlc3NDcmFzaGVkKCkKLXsKLSAgICBj
b250cm9sbGVyKCktPnBsdWdpblByb2Nlc3NDcmFzaGVkKCk7Ci19Ci0KLWJvb2wgUGx1Z2luUHJv
eHk6OmluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYgcGFyYW1ldGVycykKLXsKLSAgICBBU1NF
UlQoIW1fY29ubmVjdGlvbik7Ci0gICAgbV9jb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyKCkuZ2V0UGx1Z2luUHJvY2Vzc0Nv
bm5lY3Rpb24obV9wbHVnaW5Qcm9jZXNzVG9rZW4pOwotICAgIAotICAgIGlmICghbV9jb25uZWN0
aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gQWRkIHRoZSBwbHVnLWlu
IHByb3h5IGJlZm9yZSBjcmVhdGluZyB0aGUgcGx1Zy1pbjsgaXQgbmVlZHMgdG8gYmUgaW4gdGhl
IG1hcCBiZWNhdXNlIENyZWF0ZVBsdWdpbgotICAgIC8vIGNhbiBjYWxsIGJhY2sgb3V0IHRvIHRo
ZSBwbHVnLWluIHByb3h5LgotICAgIG1fY29ubmVjdGlvbi0+YWRkUGx1Z2luUHJveHkodGhpcyk7
Ci0KLSAgICAvLyBBc2sgdGhlIHBsdWctaW4gcHJvY2VzcyB0byBjcmVhdGUgYSBwbHVnLWluLgot
ICAgIG1fcGVuZGluZ1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyA9IG1ha2VVbmlxdWU8UGx1Z2lu
Q3JlYXRpb25QYXJhbWV0ZXJzPigpOwotCi0gICAgbV9wZW5kaW5nUGx1Z2luQ3JlYXRpb25QYXJh
bWV0ZXJzLT5wbHVnaW5JbnN0YW5jZUlEID0gbV9wbHVnaW5JbnN0YW5jZUlEOwotICAgIG1fcGVu
ZGluZ1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy0+d2luZG93TlBPYmplY3RJRCA9IHdpbmRvd05Q
T2JqZWN0SUQoKTsKLSAgICBtX3BlbmRpbmdQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMtPnBhcmFt
ZXRlcnMgPSBwYXJhbWV0ZXJzOwotICAgIG1fcGVuZGluZ1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVy
cy0+dXNlckFnZW50ID0gY29udHJvbGxlcigpLT51c2VyQWdlbnQoKTsKLSAgICBtX3BlbmRpbmdQ
bHVnaW5DcmVhdGlvblBhcmFtZXRlcnMtPmNvbnRlbnRzU2NhbGVGYWN0b3IgPSBjb250ZW50c1Nj
YWxlRmFjdG9yKCk7Ci0gICAgbV9wZW5kaW5nUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLT5pc1By
aXZhdGVCcm93c2luZ0VuYWJsZWQgPSBjb250cm9sbGVyKCktPmlzUHJpdmF0ZUJyb3dzaW5nRW5h
YmxlZCgpOwotICAgIG1fcGVuZGluZ1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy0+aXNNdXRlZCA9
IGNvbnRyb2xsZXIoKS0+aXNNdXRlZCgpOwotICAgIG1fcGVuZGluZ1BsdWdpbkNyZWF0aW9uUGFy
YW1ldGVycy0+YXJ0aWZpY2lhbFBsdWdpbkluaXRpYWxpemF0aW9uRGVsYXlFbmFibGVkID0gY29u
dHJvbGxlcigpLT5hcnRpZmljaWFsUGx1Z2luSW5pdGlhbGl6YXRpb25EZWxheUVuYWJsZWQoKTsK
LSAgICBtX3BlbmRpbmdQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMtPmlzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0VuYWJsZWQgPSBjb250cm9sbGVyKCktPmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Vu
YWJsZWQoKTsKLQotICAgIGlmICghY2FuSW5pdGlhbGl6ZUFzeW5jaHJvbm91c2x5KCkpCi0gICAg
ICAgIHJldHVybiBpbml0aWFsaXplU3luY2hyb25vdXNseSgpOwotCi0gICAgLy8gUmVtZW1iZXIg
dGhhdCB3ZSB0cmllZCB0byBjcmVhdGUgdGhpcyBwbHVnLWluIGFzeW5jaHJvbm91c2x5IGluIGNh
c2Ugd2UgbmVlZCB0byBjcmVhdGUgaXQgc3luY2hyb25vdXNseSBsYXRlci4KLSAgICBtX3dhaXRp
bmdPbkFzeW5jaHJvbm91c0luaXRpYWxpemF0aW9uID0gdHJ1ZTsKLSAgICBQbHVnaW5DcmVhdGlv
blBhcmFtZXRlcnMgY3JlYXRpb25QYXJhbWV0ZXJzKCptX3BlbmRpbmdQbHVnaW5DcmVhdGlvblBh
cmFtZXRlcnMuZ2V0KCkpOwotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luQXN5bmNocm9ub3VzbHko
Y3JlYXRpb25QYXJhbWV0ZXJzKSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBQbHVnaW5Qcm94eTo6Y2FuSW5pdGlhbGl6ZUFzeW5jaHJvbm91c2x5KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gY29udHJvbGxlcigpLT5hc3luY2hyb25vdXNQbHVnaW5Jbml0
aWFsaXphdGlvbkVuYWJsZWQoKSAmJiAobV9jb25uZWN0aW9uLT5zdXBwb3J0c0FzeW5jaHJvbm91
c1BsdWdpbkluaXRpYWxpemF0aW9uKCkgfHwgY29udHJvbGxlcigpLT5hc3luY2hyb25vdXNQbHVn
aW5Jbml0aWFsaXphdGlvbkVuYWJsZWRGb3JBbGxQbHVnaW5zKCkpOwotfQotCi1ib29sIFBsdWdp
blByb3h5Ojppbml0aWFsaXplU3luY2hyb25vdXNseSgpCi17Ci0gICAgQVNTRVJUKG1fcGVuZGlu
Z1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyk7Ci0KLSAgICBtX3BlbmRpbmdQbHVnaW5DcmVhdGlv
blBhcmFtZXRlcnMtPmFzeW5jaHJvbm91c0NyZWF0aW9uSW5jb21wbGV0ZSA9IG1fd2FpdGluZ09u
QXN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb247Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAg
ICBib29sIHdhbnRzV2hlZWxFdmVudHMgPSBmYWxzZTsKLSAgICB1aW50MzJfdCByZW1vdGVMYXll
ckNsaWVudElEID0gMDsKLSAgICAKLSAgICBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1l
dGVycygqbV9wZW5kaW5nUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmdldCgpKTsKLQotICAgIGlm
ICghbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luKHBhcmFtZXRlcnMpLCBNZXNzYWdlczo6V2ViUHJv
Y2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdpbjo6UmVwbHkocmVzdWx0LCB3YW50c1doZWVsRXZl
bnRzLCByZW1vdGVMYXllckNsaWVudElEKSwgMCkgfHwgIXJlc3VsdCkKLSAgICAgICAgZGlkRmFp
bFRvQ3JlYXRlUGx1Z2luSW50ZXJuYWwoKTsKLSAgICBlbHNlCi0gICAgICAgIGRpZENyZWF0ZVBs
dWdpbkludGVybmFsKHdhbnRzV2hlZWxFdmVudHMsIHJlbW90ZUxheWVyQ2xpZW50SUQpOwotICAg
IAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OmRpZENyZWF0ZVBs
dWdpbihib29sIHdhbnRzV2hlZWxFdmVudHMsIHVpbnQzMl90IHJlbW90ZUxheWVyQ2xpZW50SUQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICAv
LyBXZSBtaWdodCBoYXZlIHRyaWVkIHRvIGNyZWF0ZSB0aGUgcGx1Zy1pbiBzeWNocm9ub3VzbHkg
d2hpbGUgd2FpdGluZyBvbiB0aGUgYXN5bmNocm9ub3VzIHJlcGx5LAotICAgIC8vIGluIHdoaWNo
IGNhc2Ugd2Ugc2hvdWxkIGlnbm9yZSB0aGlzIG1lc3NhZ2UuCi0gICAgaWYgKCFtX3dhaXRpbmdP
bkFzeW5jaHJvbm91c0luaXRpYWxpemF0aW9uKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIoKTsKLQotICAgIGRpZENyZWF0ZVBsdWdpbkludGVybmFsKHdhbnRzV2hlZWxFdmVudHMs
IHJlbW90ZUxheWVyQ2xpZW50SUQpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci19Ci0KLXZv
aWQgUGx1Z2luUHJveHk6OmRpZEZhaWxUb0NyZWF0ZVBsdWdpbihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgLy8gV2UgbWlnaHQgaGF2ZSB0cmll
ZCB0byBjcmVhdGUgdGhlIHBsdWctaW4gc3ljaHJvbm91c2x5IHdoaWxlIHdhaXRpbmcgb24gdGhl
IGFzeW5jaHJvbm91cyByZXBseSwKLSAgICAvLyBpbiB3aGljaCBjYXNlIHdlIHNob3VsZCBpZ25v
cmUgdGhpcyBtZXNzYWdlLgotICAgIGlmICghbV93YWl0aW5nT25Bc3luY2hyb25vdXNJbml0aWFs
aXphdGlvbikKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0KLSAgICBkaWRG
YWlsVG9DcmVhdGVQbHVnaW5JbnRlcm5hbCgpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci19
Ci0KLXZvaWQgUGx1Z2luUHJveHk6OmRpZENyZWF0ZVBsdWdpbkludGVybmFsKGJvb2wgd2FudHNX
aGVlbEV2ZW50cywgdWludDMyX3QgcmVtb3RlTGF5ZXJDbGllbnRJRCkKLXsKLSAgICBtX3dhbnRz
V2hlZWxFdmVudHMgPSB3YW50c1doZWVsRXZlbnRzOwotICAgIG1fcmVtb3RlTGF5ZXJDbGllbnRJ
RCA9IHJlbW90ZUxheWVyQ2xpZW50SUQ7Ci0gICAgbV9pc1N0YXJ0ZWQgPSB0cnVlOwotICAgIGNv
bnRyb2xsZXIoKS0+ZGlkSW5pdGlhbGl6ZVBsdWdpbigpOwotCi0gICAgLy8gV2hldGhlciBzeW5j
aHJvbm91c2x5IG9yIGFzeW5jaHJvbm91c2x5LCB0aGlzIHBsdWctaW4gd2FzIGNyZWF0ZWQgYW5k
IHdlIHNob3VsZG4ndCBuZWVkIHRvIHJlbWVtYmVyCi0gICAgLy8gYW55dGhpbmcgYWJvdXQgaG93
LgotICAgIG1fcGVuZGluZ1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyA9IG51bGxwdHI7Ci0gICAg
bV93YWl0aW5nT25Bc3luY2hyb25vdXNJbml0aWFsaXphdGlvbiA9IGZhbHNlOwotfQotCi12b2lk
IFBsdWdpblByb3h5OjpkaWRGYWlsVG9DcmVhdGVQbHVnaW5JbnRlcm5hbCgpCi17Ci0gICAgLy8g
Q2FsbGluZyBvdXQgdG8gdGhlIGNvbm5lY3Rpb24gYW5kIHRoZSBjb250cm9sbGVyIGNvdWxkIHBv
dGVudGlhbGx5IGNhdXNlIHRoZSBwbHVnLWluIHByb3h5IHRvIGdvIGF3YXksIHNvIHByb3RlY3Qg
aXQgaGVyZS4KLSAgICBSZWY8UGx1Z2luUHJveHk+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgbV9j
b25uZWN0aW9uLT5yZW1vdmVQbHVnaW5Qcm94eSh0aGlzKTsKLSAgICBjb250cm9sbGVyKCktPmRp
ZEZhaWxUb0luaXRpYWxpemVQbHVnaW4oKTsKLQotICAgIC8vIFdoZXRoZXIgc3luY2hyb25vdXNs
eSBvciBhc3luY2hyb25vdXNseSwgdGhpcyBwbHVnLWluIGZhaWxlZCB0byBjcmVhdGUgYW5kIHdl
IHNob3VsZG4ndCBuZWVkIHRvIHJlbWVtYmVyCi0gICAgLy8gYW55dGhpbmcgYWJvdXQgaG93Lgot
ICAgIG1fcGVuZGluZ1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyA9IG51bGxwdHI7Ci0gICAgbV93
YWl0aW5nT25Bc3luY2hyb25vdXNJbml0aWFsaXphdGlvbiA9IGZhbHNlOwotfQotCi12b2lkIFBs
dWdpblByb3h5OjpkZXN0cm95KCkKLXsKLSAgICBtX2lzU3RhcnRlZCA9IGZhbHNlOwotCi0gICAg
aWYgKCFtX2Nvbm5lY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEFsdGhvdWdoIHRo
aXMgbWVzc2FnZSBpcyBzZW50IHN5bmNocm9ub3VzbHksIHRoZSBQbHVnaW4gcHJvY2VzcyByZXBs
aWVzIGltbWVkaWF0ZWx5IChiZWZvcmUgcGVyZm9ybWluZyBhbnkgdGFza3MpIHNvIHRoaXMgaXMg
b25seSB3YWl0aW5nIGZvcgotICAgIC8vIGNvbmZpcm1hdGlvbiB0aGF0IHRoZSBQbHVnaW4gcHJv
Y2VzcyByZWNlaXZlZCB0aGUgRGVzdHJveVBsdWdpbiBtZXNzYWdlLgotICAgIG1fY29ubmVjdGlv
bi0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246
OkRlc3Ryb3lQbHVnaW4obV9wbHVnaW5JbnN0YW5jZUlELCBtX3dhaXRpbmdPbkFzeW5jaHJvbm91
c0luaXRpYWxpemF0aW9uKSwgTWVzc2FnZXM6OldlYlByb2Nlc3NDb25uZWN0aW9uOjpEZXN0cm95
UGx1Z2luOjpSZXBseSgpLCAwLCAxX3MpOwotICAgIG1fY29ubmVjdGlvbi0+cmVtb3ZlUGx1Z2lu
UHJveHkodGhpcyk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OnBhaW50KEdyYXBoaWNzQ29udGV4
dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgaWYg
KCFuZWVkc0JhY2tpbmdTdG9yZSgpIHx8ICFtX2JhY2tpbmdTdG9yZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKCFtX3BsdWdpbkJhY2tpbmdTdG9yZUNvbnRhaW5zVmFsaWREYXRhKSB7Ci0g
ICAgICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6UGx1
Z2luQ29udHJvbGxlclByb3h5OjpQYWludEVudGlyZVBsdWdpbigpLCBNZXNzYWdlczo6UGx1Z2lu
Q29udHJvbGxlclByb3h5OjpQYWludEVudGlyZVBsdWdpbjo6UmVwbHkoKSwgbV9wbHVnaW5JbnN0
YW5jZUlEKTsKLSAgICAKLSAgICAgICAgLy8gQmxpdCB0aGUgcGx1Zy1pbiBiYWNraW5nIHN0b3Jl
IGludG8gb3VyIG93biBiYWNraW5nIHN0b3JlLgotICAgICAgICBhdXRvIGdyYXBoaWNzQ29udGV4
dCA9IG1fYmFja2luZ1N0b3JlLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKLSAgICAgICAgaWYg
KGdyYXBoaWNzQ29udGV4dCkgewotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hcHBseURl
dmljZVNjYWxlRmFjdG9yKGNvbnRlbnRzU2NhbGVGYWN0b3IoKSk7Ci0gICAgICAgICAgICBncmFw
aGljc0NvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6Q29w
eSk7Ci0KLSAgICAgICAgICAgIG1fcGx1Z2luQmFja2luZ1N0b3JlLT5wYWludCgqZ3JhcGhpY3ND
b250ZXh0LCBjb250ZW50c1NjYWxlRmFjdG9yKCksIEludFBvaW50KCksIHBsdWdpbkJvdW5kcygp
KTsKLQotICAgICAgICAgICAgbV9wbHVnaW5CYWNraW5nU3RvcmVDb250YWluc1ZhbGlkRGF0YSA9
IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2JhY2tpbmdTdG9yZS0+cGFpbnQoZ3Jh
cGhpY3NDb250ZXh0LCBjb250ZW50c1NjYWxlRmFjdG9yKCksIGRpcnR5UmVjdC5sb2NhdGlvbigp
LCBkaXJ0eVJlY3QpOwotCi0gICAgaWYgKG1fd2FpdGluZ0ZvclBhaW50SW5SZXNwb25zZVRvVXBk
YXRlKSB7Ci0gICAgICAgIG1fd2FpdGluZ0ZvclBhaW50SW5SZXNwb25zZVRvVXBkYXRlID0gZmFs
c2U7Ci0gICAgICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQ
bHVnaW5Db250cm9sbGVyUHJveHk6OkRpZFVwZGF0ZSgpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwot
ICAgIH0KLX0KLQotYm9vbCBQbHVnaW5Qcm94eTo6c3VwcG9ydHNTbmFwc2hvdHRpbmcoKSBjb25z
dAotewotICAgIGlmIChtX3dhaXRpbmdPbkFzeW5jaHJvbm91c0luaXRpYWxpemF0aW9uKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIGlzU3VwcG9ydGVkID0gZmFsc2U7Ci0gICAg
aWYgKG1fY29ubmVjdGlvbiAmJiAhbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OlN1cHBvcnRzU25hcHNob3R0aW5nKCks
IE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OlN1cHBvcnRzU25hcHNob3R0aW5nOjpS
ZXBseShpc1N1cHBvcnRlZCksIG1fcGx1Z2luSW5zdGFuY2VJRCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiBpc1N1cHBvcnRlZDsKLX0KLQotUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gUGx1Z2luUHJveHk6OnNuYXBzaG90KCkKLXsKLSAgICBTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSBzbmFwc2hvdFN0b3JlSGFuZGxlOwotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpTbmFwc2hvdCgpLCBN
ZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpTbmFwc2hvdDo6UmVwbHkoc25hcHNob3RT
dG9yZUhhbmRsZSksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci0KLSAgICBpZiAoc25hcHNob3RTdG9y
ZUhhbmRsZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4g
U2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoc25hcHNob3RTdG9yZUhhbmRsZSk7Ci19Ci0KLWJvb2wg
UGx1Z2luUHJveHk6OmlzVHJhbnNwYXJlbnQoKQotewotICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVy
IGJlIGNhbGxlZCBmcm9tIHRoZSB3ZWIgcHJvY2Vzcy4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUGx1Z2luUHJveHk6OndhbnRzV2hlZWxF
dmVudHMoKQotewotICAgIHJldHVybiBtX3dhbnRzV2hlZWxFdmVudHM7Ci19Ci0KLXZvaWQgUGx1
Z2luUHJveHk6Omdlb21ldHJ5RGlkQ2hhbmdlKCkKLXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQp
OwotCi0gICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgcGx1Z2luQmFja2luZ1N0b3JlSGFuZGxl
OwotCi0gICAgaWYgKHVwZGF0ZUJhY2tpbmdTdG9yZSgpKSB7Ci0gICAgICAgIC8vIENyZWF0ZSBh
IG5ldyBwbHVnLWluIGJhY2tpbmcgc3RvcmUuCi0gICAgICAgIG1fcGx1Z2luQmFja2luZ1N0b3Jl
ID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUobV9iYWNraW5nU3RvcmUtPnNpemUo
KSwgeyB9KTsKLSAgICAgICAgaWYgKCFtX3BsdWdpbkJhY2tpbmdTdG9yZSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICAvLyBDcmVhdGUgYSBoYW5kbGUgdG8gdGhlIHBsdWctaW4gYmFj
a2luZyBzdG9yZSBzbyB3ZSBjYW4gc2VuZCBpdCBvdmVyLgotICAgICAgICBpZiAoIW1fcGx1Z2lu
QmFja2luZ1N0b3JlLT5jcmVhdGVIYW5kbGUocGx1Z2luQmFja2luZ1N0b3JlSGFuZGxlKSkgewot
ICAgICAgICAgICAgbV9wbHVnaW5CYWNraW5nU3RvcmUgPSBudWxscHRyOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9wbHVnaW5CYWNraW5nU3RvcmVDb250YWlu
c1ZhbGlkRGF0YSA9IGZhbHNlOwotICAgIH0KLQotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6Okdlb21ldHJ5RGlkQ2hh
bmdlKG1fcGx1Z2luU2l6ZSwgbV9jbGlwUmVjdCwgbV9wbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3Jt
LCBjb250ZW50c1NjYWxlRmFjdG9yKCksIHBsdWdpbkJhY2tpbmdTdG9yZUhhbmRsZSksIG1fcGx1
Z2luSW5zdGFuY2VJRCwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldh
aXRpbmdGb3JTeW5jUmVwbHkpOwotfQotCi12b2lkIFBsdWdpblByb3h5OjpnZW9tZXRyeURpZENo
YW5nZShjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKQotewotICAg
IGlmIChwbHVnaW5TaXplID09IG1fcGx1Z2luU2l6ZSAmJiBtX2NsaXBSZWN0ID09IGNsaXBSZWN0
ICYmIG1fcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybSA9PSBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNm
b3JtKSB7Ci0gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCi0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCi0gICAgbV9wbHVnaW5TaXplID0gcGx1Z2luU2l6ZTsKLSAgICBtX2NsaXBSZWN0ID0g
Y2xpcFJlY3Q7Ci0gICAgbV9wbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtID0gcGx1Z2luVG9Sb290
Vmlld1RyYW5zZm9ybTsKLQotICAgIGdlb21ldHJ5RGlkQ2hhbmdlKCk7Ci19Ci0KLXZvaWQgUGx1
Z2luUHJveHk6OnZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCBpc1Zpc2libGUpCi17Ci0gICAgQVNT
RVJUKG1faXNTdGFydGVkKTsKLSAgICBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpWaXNpYmlsaXR5RGlkQ2hhbmdlKGlzVmlz
aWJsZSksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OmZyYW1l
RGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpCi17Ci0gICAgbV9jb25uZWN0aW9u
LT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6RnJh
bWVEaWRGaW5pc2hMb2FkaW5nKHJlcXVlc3RJRCksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0K
LXZvaWQgUGx1Z2luUHJveHk6OmZyYW1lRGlkRmFpbCh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wg
d2FzQ2FuY2VsbGVkKQotewotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OkZyYW1lRGlkRmFpbChyZXF1ZXN0SUQsIHdh
c0NhbmNlbGxlZCksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6
OmRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFdURjo6U3Ry
aW5nJiByZXN1bHQpCi17Ci0gICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6RGlkRXZhbHVhdGVKYXZhU2NyaXB0KHJlcXVl
c3RJRCwgcmVzdWx0KSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm94
eTo6c3RyZWFtV2lsbFNlbmRSZXF1ZXN0KHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBVUkwmIHJl
cXVlc3RVUkwsIGNvbnN0IFVSTCYgcmVzcG9uc2VVUkwsIGludCByZXNwb25zZVN0YXR1cykKLXsK
LSAgICBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1Z2luQ29u
dHJvbGxlclByb3h5OjpTdHJlYW1XaWxsU2VuZFJlcXVlc3Qoc3RyZWFtSUQsIHJlcXVlc3RVUkwu
c3RyaW5nKCksIHJlc3BvbnNlVVJMLnN0cmluZygpLCByZXNwb25zZVN0YXR1cyksIG1fcGx1Z2lu
SW5zdGFuY2VJRCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OnN0cmVhbURpZFJlY2VpdmVSZXNw
b25zZSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgVVJMJiByZXNwb25zZVVSTCwgdWludDMyX3Qg
c3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBXVEY6OlN0cmlu
ZyYgbWltZVR5cGUsIGNvbnN0IFdURjo6U3RyaW5nJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcmIC8q
IHN1Z2dlc3RlZEZpbGVOYW1lICovKQotewotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OlN0cmVhbURpZFJlY2VpdmVS
ZXNwb25zZShzdHJlYW1JRCwgcmVzcG9uc2VVUkwuc3RyaW5nKCksIHN0cmVhbUxlbmd0aCwgbGFz
dE1vZGlmaWVkVGltZSwgbWltZVR5cGUsIGhlYWRlcnMpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwot
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotdm9pZCBQbHVn
aW5Qcm94eTo6c3RyZWFtRGlkUmVjZWl2ZURhdGEodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IHVp
bnQ4X3QqIGJ5dGVzLCBpbnQgbGVuZ3RoKQotewotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OlN0cmVhbURpZFJlY2Vp
dmVEYXRhKHN0cmVhbUlELCBJUEM6OkRhdGFSZWZlcmVuY2UoYnl0ZXMsIGxlbmd0aCkpLCBtX3Bs
dWdpbkluc3RhbmNlSUQpOwotfQotCi12b2lkIFBsdWdpblByb3h5OjpzdHJlYW1EaWRGaW5pc2hM
b2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlEKQotewotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OlN0cmVhbURpZEZpbmlz
aExvYWRpbmcoc3RyZWFtSUQpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwotfQotCi12b2lkIFBsdWdp
blByb3h5OjpzdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0cmVhbUlELCBib29sIHdhc0NhbmNlbGxl
ZCkKLXsKLSAgICBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1
Z2luQ29udHJvbGxlclByb3h5OjpTdHJlYW1EaWRGYWlsKHN0cmVhbUlELCB3YXNDYW5jZWxsZWQp
LCBtX3BsdWdpbkluc3RhbmNlSUQpOwotfQotCi12b2lkIFBsdWdpblByb3h5OjptYW51YWxTdHJl
YW1EaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgVVJMJiByZXNwb25zZVVSTCwgdWludDMyX3Qgc3Ry
ZWFtTGVuZ3RoLCAgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29uc3QgV1RGOjpTdHJpbmcm
IG1pbWVUeXBlLCBjb25zdCBXVEY6OlN0cmluZyYgaGVhZGVycywgY29uc3QgU3RyaW5nJiAvKiBz
dWdnZXN0ZWRGaWxlTmFtZSAqLykKLXsKLSAgICBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpNYW51YWxTdHJlYW1EaWRSZWNl
aXZlUmVzcG9uc2UocmVzcG9uc2VVUkwuc3RyaW5nKCksIHN0cmVhbUxlbmd0aCwgbGFzdE1vZGlm
aWVkVGltZSwgbWltZVR5cGUsIGhlYWRlcnMpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwotfQotCi12
b2lkIFBsdWdpblByb3h5OjptYW51YWxTdHJlYW1EaWRSZWNlaXZlRGF0YShjb25zdCB1aW50OF90
KiBieXRlcywgaW50IGxlbmd0aCkKLXsKLSAgICBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpNYW51YWxTdHJlYW1EaWRSZWNl
aXZlRGF0YShJUEM6OkRhdGFSZWZlcmVuY2UoYnl0ZXMsIGxlbmd0aCkpLCBtX3BsdWdpbkluc3Rh
bmNlSUQpOwotfQotCi12b2lkIFBsdWdpblByb3h5OjptYW51YWxTdHJlYW1EaWRGaW5pc2hMb2Fk
aW5nKCkKLXsKLSAgICBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
UGx1Z2luQ29udHJvbGxlclByb3h5OjpNYW51YWxTdHJlYW1EaWRGaW5pc2hMb2FkaW5nKCksIG1f
cGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6Om1hbnVhbFN0cmVhbURp
ZEZhaWwoYm9vbCB3YXNDYW5jZWxsZWQpCi17Ci0gICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6TWFudWFsU3RyZWFtRGlk
RmFpbCh3YXNDYW5jZWxsZWQpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwotfQotCi1ib29sIFBsdWdp
blByb3h5OjpoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIG1vdXNlRXZlbnQp
Ci17Ci0gICAgaWYgKG1fd2FpdGluZ09uQXN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb24pCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OkhhbmRsZU1vdXNlRXZlbnQobW91c2VF
dmVudCksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
UGx1Z2luUHJveHk6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYgd2hlZWxF
dmVudCkKLXsKLSAgICBpZiAobV93YWl0aW5nT25Bc3luY2hyb25vdXNJbml0aWFsaXphdGlvbikK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0gICAg
aWYgKCFtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OlBsdWdp
bkNvbnRyb2xsZXJQcm94eTo6SGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KSwgTWVzc2FnZXM6
OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6SGFuZGxlV2hlZWxFdmVudDo6UmVwbHkoaGFuZGxlZCks
IG1fcGx1Z2luSW5zdGFuY2VJRCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biBoYW5kbGVkOwotfQotCi1ib29sIFBsdWdpblByb3h5OjpoYW5kbGVNb3VzZUVudGVyRXZlbnQo
Y29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFbnRlckV2ZW50KQotewotICAgIGlmIChtX3dhaXRp
bmdPbkFzeW5jaHJvbm91c0luaXRpYWxpemF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKLSAgICBpZiAoIW1fY29ubmVjdGlvbi0+Y29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpIYW5kbGVN
b3VzZUVudGVyRXZlbnQobW91c2VFbnRlckV2ZW50KSwgTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xs
ZXJQcm94eTo6SGFuZGxlTW91c2VFbnRlckV2ZW50OjpSZXBseShoYW5kbGVkKSwgbV9wbHVnaW5J
bnN0YW5jZUlEKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiBoYW5k
bGVkOwotfQotCi1ib29sIFBsdWdpblByb3h5OjpoYW5kbGVNb3VzZUxlYXZlRXZlbnQoY29uc3Qg
V2ViTW91c2VFdmVudCYgbW91c2VMZWF2ZUV2ZW50KQotewotICAgIGlmIChtX3dhaXRpbmdPbkFz
eW5jaHJvbm91c0luaXRpYWxpemF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBi
b29sIGhhbmRsZWQgPSBmYWxzZTsKLSAgICBpZiAoIW1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpIYW5kbGVNb3VzZUxl
YXZlRXZlbnQobW91c2VMZWF2ZUV2ZW50KSwgTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94
eTo6SGFuZGxlTW91c2VMZWF2ZUV2ZW50OjpSZXBseShoYW5kbGVkKSwgbV9wbHVnaW5JbnN0YW5j
ZUlEKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiBoYW5kbGVkOwot
fQotCi1ib29sIFBsdWdpblByb3h5OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1v
dXNlRXZlbnQmKQotewotICAgIC8vIFdlIGRvbid0IGtub3cgaWYgdGhlIHBsdWctaW4gaGFzIGhh
bmRsZWQgbW91c2Vkb3duIGV2ZW50IGJ5IGRpc3BsYXlpbmcgYSBjb250ZXh0IG1lbnUsIHNvIHdl
IG5ldmVyIHdhbnQgV2ViS2l0IHRvIHNob3cgYSBkZWZhdWx0IG9uZS4KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBQbHVnaW5Qcm94eTo6aGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJL
ZXlib2FyZEV2ZW50JiBrZXlib2FyZEV2ZW50KQotewotICAgIGlmIChtX3dhaXRpbmdPbkFzeW5j
aHJvbm91c0luaXRpYWxpemF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29s
IGhhbmRsZWQgPSBmYWxzZTsKLSAgICBpZiAoIW1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5z
ZW5kU3luYyhNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpIYW5kbGVLZXlib2FyZEV2
ZW50KGtleWJvYXJkRXZlbnQpLCBNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpIYW5k
bGVLZXlib2FyZEV2ZW50OjpSZXBseShoYW5kbGVkKSwgbV9wbHVnaW5JbnN0YW5jZUlEKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiBoYW5kbGVkOwotfQotCi12b2lk
IFBsdWdpblByb3h5OjpzZXRGb2N1cyhib29sIGhhc0ZvY3VzKQotewotICAgIG1fY29ubmVjdGlv
bi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OlNl
dEZvY3VzKGhhc0ZvY3VzKSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLX0KLQotYm9vbCBQbHVnaW5Q
cm94eTo6aGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29u
c3QgU3RyaW5nJiBhcmd1bWVudCkKLXsKLSAgICBpZiAobV93YWl0aW5nT25Bc3luY2hyb25vdXNJ
bml0aWFsaXphdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBoYW5kbGVk
ID0gZmFsc2U7Ci0gICAgaWYgKCFtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMo
TWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6SGFuZGxlRWRpdGluZ0NvbW1hbmQoY29t
bWFuZE5hbWUsIGFyZ3VtZW50KSwgTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6SGFu
ZGxlRWRpdGluZ0NvbW1hbmQ6OlJlcGx5KGhhbmRsZWQpLCBtX3BsdWdpbkluc3RhbmNlSUQpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIGhhbmRsZWQ7Ci19Ci0gICAg
Ci1ib29sIFBsdWdpblByb3h5Ojppc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcm
IGNvbW1hbmROYW1lKQotewotICAgIGlmIChtX3dhaXRpbmdPbkFzeW5jaHJvbm91c0luaXRpYWxp
emF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIGVuYWJsZWQgPSBmYWxz
ZTsKLSAgICBpZiAoIW1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdl
czo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpJc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb21tYW5k
TmFtZSksIE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OklzRWRpdGluZ0NvbW1hbmRF
bmFibGVkOjpSZXBseShlbmFibGVkKSwgbV9wbHVnaW5JbnN0YW5jZUlEKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiBlbmFibGVkOwotfQotICAgIAotYm9vbCBQbHVn
aW5Qcm94eTo6aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fd2Fp
dGluZ09uQXN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwotICAgIGlmICghbV9jb25uZWN0aW9uLT5jb25u
ZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OkhhbmRs
ZXNQYWdlU2NhbGVGYWN0b3IoKSwgTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6SGFu
ZGxlc1BhZ2VTY2FsZUZhY3Rvcjo6UmVwbHkoaGFuZGxlZCksIG1fcGx1Z2luSW5zdGFuY2VJRCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXR1cm4gaGFuZGxlZDsKLX0KLQot
Ym9vbCBQbHVnaW5Qcm94eTo6cmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0b3IoKSBjb25zdAotewot
ICAgIGlmIChtX3dhaXRpbmdPbkFzeW5jaHJvbm91c0luaXRpYWxpemF0aW9uKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIHJlcXVpcmVkID0gZmFsc2U7Ci0gICAgaWYgKCFtX2Nv
bm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xs
ZXJQcm94eTo6UmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0b3IoKSwgTWVzc2FnZXM6OlBsdWdpbkNv
bnRyb2xsZXJQcm94eTo6UmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0b3I6OlJlcGx5KHJlcXVpcmVk
KSwgbV9wbHVnaW5JbnN0YW5jZUlEKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAg
IHJldHVybiByZXF1aXJlZDsKLX0KLQotTlBPYmplY3QqIFBsdWdpblByb3h5OjpwbHVnaW5TY3Jp
cHRhYmxlTlBPYmplY3QoKQotewotICAgIC8vIFNlbmRpbmcgdGhlIHN5bmNocm9ub3VzIE1lc3Nh
Z2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OkdldFBsdWdpblNjcmlwdGFibGVOUE9iamVjdCBt
ZXNzYWdlIGNhbiBjYXVzZSB1cyB0byBkaXNwYXRjaCBhbgotICAgIC8vIGluY29taW5nIHN5bmNo
cm9ub3VzIG1lc3NhZ2UgdGhhdCBlbmRzIHVwIGRlc3Ryb3lpbmcgdGhlIFBsdWdpblByb3h5IG9i
amVjdC4KLSAgICBQbHVnaW5Db250cm9sbGVyOjpQbHVnaW5EZXN0cnVjdGlvblByb3RlY3RvciBw
cm90ZWN0b3IoY29udHJvbGxlcigpKTsKLQotICAgIHVpbnQ2NF90IHBsdWdpblNjcmlwdGFibGVO
UE9iamVjdElEID0gMDsKLSAgICAKLSAgICBpZiAoIW1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpHZXRQbHVnaW5TY3Jp
cHRhYmxlTlBPYmplY3QoKSwgTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6R2V0UGx1
Z2luU2NyaXB0YWJsZU5QT2JqZWN0OjpSZXBseShwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3RJRCks
IG1fcGx1Z2luSW5zdGFuY2VJRCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFwbHVn
aW5TY3JpcHRhYmxlTlBPYmplY3RJRCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4g
bV9jb25uZWN0aW9uLT5ucFJlbW90ZU9iamVjdE1hcCgpLT5jcmVhdGVOUE9iamVjdFByb3h5KHBs
dWdpblNjcmlwdGFibGVOUE9iamVjdElELCB0aGlzKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm94eTo6
d2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wgaGFzRm9jdXMpCi17Ci0gICAgbV9jb25uZWN0aW9uLT5j
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6V2luZG93
Rm9jdXNDaGFuZ2VkKGhhc0ZvY3VzKSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLX0KLQotdm9pZCBQ
bHVnaW5Qcm94eTo6d2luZG93VmlzaWJpbGl0eUNoYW5nZWQoYm9vbCBpc1Zpc2libGUpCi17Ci0g
ICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpbkNvbnRy
b2xsZXJQcm94eTo6V2luZG93VmlzaWJpbGl0eUNoYW5nZWQoaXNWaXNpYmxlKSwgbV9wbHVnaW5J
bnN0YW5jZUlEKTsKLX0KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotdm9pZCBQbHVnaW5Qcm94eTo6
d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93
RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3RnJh
bWVJbldpbmRvd0Nvb3JkaW5hdGVzKQotewotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OldpbmRvd0FuZFZpZXdGcmFt
ZXNDaGFuZ2VkKHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgdmlld0ZyYW1lSW5XaW5k
b3dDb29yZGluYXRlcyksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci11aW50NjRfdCBQbHVnaW5Q
cm94eTo6cGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIoKSBjb25zdAotewotICAgIHJl
dHVybiBtX3BsdWdpbkluc3RhbmNlSUQ7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OnNlbmRDb21w
bGV4VGV4dElucHV0KGNvbnN0IFN0cmluZyYgdGV4dElucHV0KQotewotICAgIG1fY29ubmVjdGlv
bi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OlNl
bmRDb21wbGV4VGV4dElucHV0KHRleHRJbnB1dCksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0j
ZW5kaWYKLQotdm9pZCBQbHVnaW5Qcm94eTo6Y29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxv
YXQpCi17Ci0gICAgZ2VvbWV0cnlEaWRDaGFuZ2UoKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm94eTo6
c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKGJvb2wgaXNTdG9yYWdlQmxvY2tpbmdFbmFibGVk
KQotewotICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVn
aW5Db250cm9sbGVyUHJveHk6OlN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZChpc1N0b3JhZ2VC
bG9ja2luZ0VuYWJsZWQpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwotfQotCi12b2lkIFBsdWdpblBy
b3h5Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCBpc1ByaXZhdGVCcm93c2luZ0Vu
YWJsZWQpCi17Ci0gICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6UHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGlzUHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZCksIG1fcGx1Z2luSW5zdGFuY2VJRCk7Ci19Ci0KLXZvaWQgUGx1
Z2luUHJveHk6Om11dGVkU3RhdGVDaGFuZ2VkKGJvb2wgaXNNdXRlZCkKLXsKLSAgICBtX2Nvbm5l
Y3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5
OjpNdXRlZFN0YXRlQ2hhbmdlZChpc011dGVkKSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKLX0KLQot
Ym9vbCBQbHVnaW5Qcm94eTo6Z2V0Rm9ybVZhbHVlKFN0cmluZyYgZm9ybVZhbHVlKQotewotICAg
IGJvb2wgcmV0dXJuVmFsdWU7Ci0gICAgaWYgKCFtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+
c2VuZFN5bmMoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6R2V0Rm9ybVZhbHVlKCks
IE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OkdldEZvcm1WYWx1ZTo6UmVwbHkocmV0
dXJuVmFsdWUsIGZvcm1WYWx1ZSksIG1fcGx1Z2luSW5zdGFuY2VJRCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLX0KLQotYm9vbCBQbHVnaW5Qcm94
eTo6aGFuZGxlU2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkpCi17Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1TY3JvbGxiYXIqIFBsdWdpblByb3h5Ojpob3Jpem9udGFs
U2Nyb2xsYmFyKCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotU2Nyb2xsYmFyKiBQbHVnaW5Qcm94
eTo6dmVydGljYWxTY3JvbGxiYXIoKQotewotICAgIHJldHVybiAwOwotfQotCi12b2lkIFBsdWdp
blByb3h5Ojpsb2FkVVJMKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgSFRU
UEhlYWRlck1hcCYgaGVhZGVyRmllbGRzLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGh0dHBCb2R5
LCBib29sIGFsbG93UG9wdXBzKQotewotICAgIGNvbnRyb2xsZXIoKS0+bG9hZFVSTChyZXF1ZXN0
SUQsIG1ldGhvZCwgdXJsU3RyaW5nLCB0YXJnZXQsIGhlYWRlckZpZWxkcywgaHR0cEJvZHksIGFs
bG93UG9wdXBzKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm94eTo6cHJveGllc0ZvclVSTChjb25zdCBT
dHJpbmcmIHVybFN0cmluZywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQotewotICAgIGNvbXBsZXRpb25IYW5kbGVyKGNvbnRyb2xsZXIoKS0+cHJv
eGllc0ZvclVSTCh1cmxTdHJpbmcpKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm94eTo6Y29va2llc0Zv
clVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJp
bmcpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGNvbXBsZXRpb25IYW5kbGVyKGNvbnRy
b2xsZXIoKS0+Y29va2llc0ZvclVSTCh1cmxTdHJpbmcpKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm94
eTo6c2V0Q29va2llc0ZvclVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgU3RyaW5n
JiBjb29raWVTdHJpbmcpCi17Ci0gICAgY29udHJvbGxlcigpLT5zZXRDb29raWVzRm9yVVJMKHVy
bFN0cmluZywgY29va2llU3RyaW5nKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm94eTo6Z2V0QXV0aGVu
dGljYXRpb25JbmZvKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgcmV0dXJuVmFsdWUsIFN0cmluZyB1c2VybmFtZSwgU3Ry
aW5nIHBhc3N3b3JkKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBTdHJpbmcgdXNlcm5h
bWU7Ci0gICAgU3RyaW5nIHBhc3N3b3JkOwotICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBjb250cm9s
bGVyKCktPmdldEF1dGhlbnRpY2F0aW9uSW5mbyhwcm90ZWN0aW9uU3BhY2UsIHVzZXJuYW1lLCBw
YXNzd29yZCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUsIHVzZXJuYW1lLCBw
YXNzd29yZCk7Ci19Ci0KLWZsb2F0IFBsdWdpblByb3h5Ojpjb250ZW50c1NjYWxlRmFjdG9yKCkK
LXsKLSAgICByZXR1cm4gY29udHJvbGxlcigpLT5jb250ZW50c1NjYWxlRmFjdG9yKCk7Ci19Ci0K
LWJvb2wgUGx1Z2luUHJveHk6OnVwZGF0ZUJhY2tpbmdTdG9yZSgpCi17Ci0gICAgaWYgKG1fcGx1
Z2luU2l6ZS5pc0VtcHR5KCkgfHwgIW5lZWRzQmFja2luZ1N0b3JlKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IG1fcGx1Z2luU2l6ZTsK
LSAgICBiYWNraW5nU3RvcmVTaXplLnNjYWxlKGNvbnRlbnRzU2NhbGVGYWN0b3IoKSk7Ci0KLSAg
ICBpZiAobV9iYWNraW5nU3RvcmUpIHsKLSAgICAgICAgaWYgKG1fYmFja2luZ1N0b3JlLT5zaXpl
KCkgPT0gYmFja2luZ1N0b3JlU2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOyAvLyBHaXZlIG1hbGxvYyBhIGNoYW5jZSB0byBy
ZWN5Y2xlIG91ciBiYWNraW5nIHN0b3JlLgotICAgIH0KLQotICAgIG1fYmFja2luZ1N0b3JlID0g
U2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoYmFja2luZ1N0b3JlU2l6ZSwgeyB9KTsKLSAgICByZXR1
cm4gISFtX2JhY2tpbmdTdG9yZTsKLX0KLQotdWludDY0X3QgUGx1Z2luUHJveHk6OndpbmRvd05Q
T2JqZWN0SUQoKQotewotICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHROUE9iamVjdCA9IGNvbnRy
b2xsZXIoKS0+d2luZG93U2NyaXB0TlBPYmplY3QoKTsKLSAgICBpZiAoIXdpbmRvd1NjcmlwdE5Q
T2JqZWN0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHVpbnQ2NF90IHdpbmRvd05QT2JqZWN0
SUQgPSBtX2Nvbm5lY3Rpb24tPm5wUmVtb3RlT2JqZWN0TWFwKCktPnJlZ2lzdGVyTlBPYmplY3Qo
d2luZG93U2NyaXB0TlBPYmplY3QsIHRoaXMpOwotICAgIHJlbGVhc2VOUE9iamVjdCh3aW5kb3dT
Y3JpcHROUE9iamVjdCk7Ci0KLSAgICByZXR1cm4gd2luZG93TlBPYmplY3RJRDsKLX0KLQotSW50
UmVjdCBQbHVnaW5Qcm94eTo6cGx1Z2luQm91bmRzKCkKLXsKLSAgICByZXR1cm4gSW50UmVjdChJ
bnRQb2ludCgpLCBtX3BsdWdpblNpemUpOwotfQotCi12b2lkIFBsdWdpblByb3h5OjpnZXRQbHVn
aW5FbGVtZW50TlBPYmplY3QoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50NjRfdCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCi17Ci0gICAgTlBPYmplY3QqIHBsdWdpbkVsZW1lbnROUE9iamVjdCA9
IGNvbnRyb2xsZXIoKS0+cGx1Z2luRWxlbWVudE5QT2JqZWN0KCk7Ci0gICAgaWYgKCFwbHVnaW5F
bGVtZW50TlBPYmplY3QpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigwKTsKLQot
ICAgIHVpbnQ2NF90IHBsdWdpbkVsZW1lbnROUE9iamVjdElEID0gbV9jb25uZWN0aW9uLT5ucFJl
bW90ZU9iamVjdE1hcCgpLT5yZWdpc3Rlck5QT2JqZWN0KHBsdWdpbkVsZW1lbnROUE9iamVjdCwg
dGhpcyk7Ci0gICAgcmVsZWFzZU5QT2JqZWN0KHBsdWdpbkVsZW1lbnROUE9iamVjdCk7Ci0gICAg
Y29tcGxldGlvbkhhbmRsZXIocGx1Z2luRWxlbWVudE5QT2JqZWN0SUQpOwotfQotCi12b2lkIFBs
dWdpblByb3h5OjpldmFsdWF0ZShjb25zdCBOUFZhcmlhbnREYXRhJiBucE9iamVjdEFzVmFyaWFu
dERhdGEsIGNvbnN0IFN0cmluZyYgc2NyaXB0U3RyaW5nLCBib29sIGFsbG93UG9wdXBzLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgcmV0dXJuVmFsdWUsIE5QVmFyaWFudERhdGEmJiByZXN1
bHREYXRhKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBQbHVnaW5Db250cm9sbGVyOjpQ
bHVnaW5EZXN0cnVjdGlvblByb3RlY3RvciBwcm90ZWN0b3IoY29udHJvbGxlcigpKTsKLQotICAg
IE5QVmFyaWFudCBucE9iamVjdEFzVmFyaWFudCA9IG1fY29ubmVjdGlvbi0+bnBSZW1vdGVPYmpl
Y3RNYXAoKS0+bnBWYXJpYW50RGF0YVRvTlBWYXJpYW50KG5wT2JqZWN0QXNWYXJpYW50RGF0YSwg
dGhpcyk7Ci0gICAgaWYgKCFOUFZBUklBTlRfSVNfT0JKRUNUKG5wT2JqZWN0QXNWYXJpYW50KSB8
fCAhKE5QVkFSSUFOVF9UT19PQkpFQ1QobnBPYmplY3RBc1ZhcmlhbnQpKSkKLSAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlLCB7IH0pOwotCi0gICAgTlBWYXJpYW50IHJlc3Vs
dDsKLSAgICBib29sIHJldHVyblZhbHVlID0gY29udHJvbGxlcigpLT5ldmFsdWF0ZShOUFZBUklB
TlRfVE9fT0JKRUNUKG5wT2JqZWN0QXNWYXJpYW50KSwgc2NyaXB0U3RyaW5nLCAmcmVzdWx0LCBh
bGxvd1BvcHVwcyk7Ci0gICAgaWYgKCFyZXR1cm5WYWx1ZSkKLSAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb25IYW5kbGVyKGZhbHNlLCB7IH0pOwotCi0gICAgLy8gQ29udmVydCB0aGUgTlBWYXJpYW50
IHRvIGFuIE5QVmFyaWFudERhdGEuCi0gICAgTlBWYXJpYW50RGF0YSByZXN1bHREYXRhID0gbV9j
b25uZWN0aW9uLT5ucFJlbW90ZU9iamVjdE1hcCgpLT5ucFZhcmlhbnRUb05QVmFyaWFudERhdGEo
cmVzdWx0LCB0aGlzKTsKLSAgICAKLSAgICAvLyBBbmQgcmVsZWFzZSB0aGUgcmVzdWx0LgotICAg
IHJlbGVhc2VOUFZhcmlhbnRWYWx1ZSgmcmVzdWx0KTsKLSAgICByZWxlYXNlTlBWYXJpYW50VmFs
dWUoJm5wT2JqZWN0QXNWYXJpYW50KTsKLSAgICAKLSAgICBjb21wbGV0aW9uSGFuZGxlcihyZXR1
cm5WYWx1ZSwgV1RGTW92ZShyZXN1bHREYXRhKSk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OnNl
dFBsdWdpbklzUGxheWluZ0F1ZGlvKGJvb2wgcGx1Z2luSXNQbGF5aW5nQXVkaW8pCi17Ci0gICAg
Y29udHJvbGxlcigpLT5zZXRQbHVnaW5Jc1BsYXlpbmdBdWRpbyhwbHVnaW5Jc1BsYXlpbmdBdWRp
byk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OmNvbnRpbnVlU3RyZWFtTG9hZCh1aW50NjRfdCBz
dHJlYW1JRCkKLXsKLSAgICBjb250cm9sbGVyKCktPmNvbnRpbnVlU3RyZWFtTG9hZChzdHJlYW1J
RCk7Ci19Ci0KLXZvaWQgUGx1Z2luUHJveHk6OmNhbmNlbFN0cmVhbUxvYWQodWludDY0X3Qgc3Ry
ZWFtSUQpCi17Ci0gICAgY29udHJvbGxlcigpLT5jYW5jZWxTdHJlYW1Mb2FkKHN0cmVhbUlEKTsK
LX0KLQotdm9pZCBQbHVnaW5Qcm94eTo6Y2FuY2VsTWFudWFsU3RyZWFtTG9hZCgpCi17Ci0gICAg
Y29udHJvbGxlcigpLT5jYW5jZWxNYW51YWxTdHJlYW1Mb2FkKCk7Ci19Ci0KLXZvaWQgUGx1Z2lu
UHJveHk6OnNldFN0YXR1c2JhclRleHQoY29uc3QgU3RyaW5nJiBzdGF0dXNiYXJUZXh0KQotewot
ICAgIGNvbnRyb2xsZXIoKS0+c2V0U3RhdHVzYmFyVGV4dChzdGF0dXNiYXJUZXh0KTsKLX0KLQot
I2lmIFBMQVRGT1JNKFgxMSkKLXZvaWQgUGx1Z2luUHJveHk6OmNyZWF0ZVBsdWdpbkNvbnRhaW5l
cihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90IHdpbmRvd0lEKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKLXsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihjb250cm9sbGVyKCktPmNyZWF0ZVBs
dWdpbkNvbnRhaW5lcigpKTsKLX0KLQotdm9pZCBQbHVnaW5Qcm94eTo6d2luZG93ZWRQbHVnaW5H
ZW9tZXRyeURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmcmFtZVJlY3QsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0LCB1aW50NjRfdCB3aW5kb3dJRCkKLXsKLSAgICBj
b250cm9sbGVyKCktPndpbmRvd2VkUGx1Z2luR2VvbWV0cnlEaWRDaGFuZ2UoZnJhbWVSZWN0LCBj
bGlwUmVjdCwgd2luZG93SUQpOwotfQotCi12b2lkIFBsdWdpblByb3h5Ojp3aW5kb3dlZFBsdWdp
blZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCBpc1Zpc2libGUsIHVpbnQ2NF90IHdpbmRvd0lEKQot
ewotICAgIGNvbnRyb2xsZXIoKS0+d2luZG93ZWRQbHVnaW5WaXNpYmlsaXR5RGlkQ2hhbmdlKGlz
VmlzaWJsZSwgd2luZG93SUQpOwotfQotI2VuZGlmCi0KLXZvaWQgUGx1Z2luUHJveHk6OnVwZGF0
ZShjb25zdCBJbnRSZWN0JiBwYWludGVkUmVjdCkKLXsKLSAgICBpZiAocGFpbnRlZFJlY3QgPT0g
cGx1Z2luQm91bmRzKCkpCi0gICAgICAgIG1fcGx1Z2luQmFja2luZ1N0b3JlQ29udGFpbnNWYWxp
ZERhdGEgPSB0cnVlOwotCi0gICAgaWYgKG1fYmFja2luZ1N0b3JlKSB7Ci0gICAgICAgIC8vIEJs
aXQgdGhlIHBsdWctaW4gYmFja2luZyBzdG9yZSBpbnRvIG91ciBvd24gYmFja2luZyBzdG9yZS4K
LSAgICAgICAgYXV0byBncmFwaGljc0NvbnRleHQgPSBtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlR3Jh
cGhpY3NDb250ZXh0KCk7Ci0gICAgICAgIGlmIChncmFwaGljc0NvbnRleHQpIHsKLSAgICAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC0+YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihjb250ZW50c1NjYWxl
RmFjdG9yKCkpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHkpOwotICAgICAgICAgICAgbV9wbHVnaW5CYWNr
aW5nU3RvcmUtPnBhaW50KCpncmFwaGljc0NvbnRleHQsIGNvbnRlbnRzU2NhbGVGYWN0b3IoKSwg
cGFpbnRlZFJlY3QubG9jYXRpb24oKSwgcGFpbnRlZFJlY3QpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgLy8gQXNrIHRoZSBjb250cm9sbGVyIHRvIGludmFsaWRhdGUgdGhlIHJlY3QgZm9yIHVz
LgotICAgIG1fd2FpdGluZ0ZvclBhaW50SW5SZXNwb25zZVRvVXBkYXRlID0gdHJ1ZTsKLSAgICBj
b250cm9sbGVyKCktPmludmFsaWRhdGUocGFpbnRlZFJlY3QpOwotfQotCi1JbnRQb2ludCBQbHVn
aW5Qcm94eTo6Y29udmVydFRvUm9vdFZpZXcoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAot
ewotICAgIHJldHVybiBtX3BsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0ubWFwUG9pbnQocG9pbnQp
OwotfQotCi1SZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBQbHVnaW5Qcm94eTo6bGl2ZVJl
c291cmNlRGF0YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5o
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YxYjM5ZWFiN2RhZTA4MTY4ZGQzYTczOGZlZDJiMGRj
MDcxNDRiMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5oCisrKyAvZGV2L251
bGwKQEAgLTEsMjM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW5jbHVkZSAiQ29ubmVjdGlvbi5o
IgotI2luY2x1ZGUgIlBsdWdpbi5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3MuaCIKLSNpbmNs
dWRlIDxXZWJDb3JlL0FmZmluZVRyYW5zZm9ybS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVj
dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KLSNpbmNsdWRlIDxtZW1v
cnk+Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci1P
QkpDX0NMQVNTIENBTGF5ZXI7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNs
YXNzIEhUVFBIZWFkZXJNYXA7Ci0gICAgY2xhc3MgUHJvdGVjdGlvblNwYWNlOwotfQotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgU2hhcmVhYmxlQml0bWFwOwotY2xhc3MgTlBWYXJpYW50
RGF0YTsKLWNsYXNzIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOwotCi1zdHJ1Y3QgUGx1Z2luQ3Jl
YXRpb25QYXJhbWV0ZXJzOwotCi1jbGFzcyBQbHVnaW5Qcm94eSA6IHB1YmxpYyBQbHVnaW4gewot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8UGx1Z2luUHJveHk+IGNyZWF0ZSh1aW50NjRfdCBwbHVn
aW5Qcm9jZXNzVG9rZW4pOwotICAgIH5QbHVnaW5Qcm94eSgpOwotCi0gICAgdWludDY0X3QgcGx1
Z2luSW5zdGFuY2VJRCgpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luSW5zdGFuY2VJRDsgfQotICAg
IHZvaWQgcGx1Z2luUHJvY2Vzc0NyYXNoZWQoKTsKLQotICAgIHZvaWQgZGlkUmVjZWl2ZVBsdWdp
blByb3h5TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKLSAgICBib29s
IGRpZFJlY2VpdmVTeW5jUGx1Z2luUHJveHlNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYsIFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+Jik7Ci0KLXByaXZhdGU6Ci0gICAgZXhw
bGljaXQgUGx1Z2luUHJveHkodWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2VuKTsKLQotICAgIC8v
IFBsdWdpbgotICAgIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJikgb3ZlcnJpZGU7
Ci0gICAgYm9vbCBpbml0aWFsaXplU3luY2hyb25vdXNseSgpOwotCi0gICAgdm9pZCBkZXN0cm95
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpIG92ZXJyaWRlOwotICAgIGJvb2wgc3Vw
cG9ydHNTbmFwc2hvdHRpbmcoKSBjb25zdCBvdmVycmlkZTsKLSAgICBSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBzbmFwc2hvdCgpIG92ZXJyaWRlOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIFBs
YXRmb3JtTGF5ZXIqIHBsdWdpbkxheWVyKCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLSAgICBib29sIGlz
VHJhbnNwYXJlbnQoKSBvdmVycmlkZTsKLSAgICBib29sIHdhbnRzV2hlZWxFdmVudHMoKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IHBsdWdpblNpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0LCBjb25zdCBXZWJD
b3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pIG92ZXJyaWRl
OwotICAgIHZvaWQgdmlzaWJpbGl0eURpZENoYW5nZShib29sIGlzVmlzaWJsZSkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QgcmVxdWVzdElEKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGZyYW1lRGlkRmFpbCh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgd2Fz
Q2FuY2VsbGVkKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50
NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFN0cmluZyYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lk
IHN0cmVhbVdpbGxTZW5kUmVxdWVzdCh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgVVJMJiByZXF1
ZXN0VVJMLCBjb25zdCBVUkwmIHJlc3BvbnNlVVJMLCBpbnQgcmVzcG9uc2VTdGF0dXMpIG92ZXJy
aWRlOwotICAgIHZvaWQgc3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKHVpbnQ2NF90IHN0cmVhbUlE
LCBjb25zdCBVUkwmIHJlc3BvbnNlVVJMLCB1aW50MzJfdCBzdHJlYW1MZW5ndGgsIHVpbnQzMl90
IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYg
aGVhZGVycywgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlTmFtZSkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzdHJlYW1EaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgdWludDhf
dCogYnl0ZXMsIGludCBsZW5ndGgpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RyZWFtRGlkRmluaXNo
TG9hZGluZyh1aW50NjRfdCBzdHJlYW1JRCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJlYW1EaWRG
YWlsKHVpbnQ2NF90IHN0cmVhbUlELCBib29sIHdhc0NhbmNlbGxlZCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBtYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgVVJMJiByZXNwb25zZVVS
TCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25z
dCBXVEY6OlN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFdURjo6U3RyaW5nJiBoZWFkZXJzLCBjb25z
dCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVOYW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIG1hbnVhbFN0
cmVhbURpZFJlY2VpdmVEYXRhKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBpbnQgbGVuZ3RoKSBvdmVy
cmlkZTsKLSAgICB2b2lkIG1hbnVhbFN0cmVhbURpZEZpbmlzaExvYWRpbmcoKSBvdmVycmlkZTsK
LSAgICB2b2lkIG1hbnVhbFN0cmVhbURpZEZhaWwoYm9vbCB3YXNDYW5jZWxsZWQpIG92ZXJyaWRl
OwotICAgIAotICAgIGJvb2wgaGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jikg
b3ZlcnJpZGU7Ci0gICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQm
KSBvdmVycmlkZTsKLSAgICBib29sIGhhbmRsZU1vdXNlRW50ZXJFdmVudChjb25zdCBXZWJNb3Vz
ZUV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYW5kbGVNb3VzZUxlYXZlRXZlbnQoY29uc3Qg
V2ViTW91c2VFdmVudCYpIG92ZXJyaWRlOwotICAgIGJvb2wgaGFuZGxlQ29udGV4dE1lbnVFdmVu
dChjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYW5kbGVLZXlib2Fy
ZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEZv
Y3VzKGJvb2wpIG92ZXJyaWRlOwotICAgIGJvb2wgaGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3Qg
U3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkgb3ZlcnJpZGU7Ci0g
ICAgYm9vbCBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1l
KSBvdmVycmlkZTsKLSAgICBib29sIHNob3VsZEFsbG93U2NyaXB0aW5nKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIGJvb2wgc2hvdWxkQWxsb3dOYXZpZ2F0aW9uRnJvbURyYWdzKCkg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAKLSAgICBib29sIGhhbmRsZXNQYWdlU2Nh
bGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIHJlcXVpcmVzVW5pZmllZFNjYWxl
RmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgCi0gICAgTlBPYmplY3QqIHBsdWdpblNjcmlw
dGFibGVOUE9iamVjdCgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB3aW5kb3dGb2N1c0NoYW5nZWQo
Ym9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChib29sKSBv
dmVycmlkZTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHZvaWQgd2luZG93QW5kVmlld0Zy
YW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNv
b3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3Jk
aW5hdGVzKSBvdmVycmlkZTsKLSAgICB1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRl
bnRpZmllcigpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc2VuZENvbXBsZXhUZXh0SW5wdXQo
Y29uc3QgU3RyaW5nJiB0ZXh0SW5wdXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TGF5ZXJIb3N0
aW5nTW9kZShMYXllckhvc3RpbmdNb2RlKSBvdmVycmlkZTsKLSNlbmRpZgotCi0gICAgdm9pZCBj
b250ZW50c1NjYWxlRmFjdG9yQ2hhbmdlZChmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9y
YWdlQmxvY2tpbmdTdGF0ZUNoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwcml2YXRl
QnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtdXRlZFN0YXRl
Q2hhbmdlZChib29sKSBvdmVycmlkZTsKLSAgICBib29sIGdldEZvcm1WYWx1ZShTdHJpbmcmIGZv
cm1WYWx1ZSkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYW5kbGVTY3JvbGwoV2ViQ29yZTo6U2Nyb2xs
RGlyZWN0aW9uLCBXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eSkgb3ZlcnJpZGU7Ci0gICAgV2Vi
Q29yZTo6U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgb3ZlcnJpZGU7Ci0gICAgV2Vi
Q29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIG92ZXJyaWRlOwotCi0gICAgdW5z
aWduZWQgY291bnRGaW5kTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpGaW5kT3B0aW9u
cywgdW5zaWduZWQpIG92ZXJyaWRlICB7IHJldHVybiAwOyB9Ci0gICAgYm9vbCBmaW5kU3RyaW5n
KGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkZpbmRPcHRpb25zLCB1bnNpZ25lZCkgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KLQotICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRUb1Jvb3RW
aWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBSZWZQ
dHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBsaXZlUmVzb3VyY2VEYXRhKCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgYm9vbCBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICBTdHJp
bmcgZ2V0U2VsZWN0aW9uU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7
IH0KLSAgICBTdHJpbmcgZ2V0U2VsZWN0aW9uRm9yV29yZEF0UG9pbnQoY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgYm9v
bCBleGlzdGluZ1NlbGVjdGlvbkNvbnRhaW5zUG9pbnQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICBmbG9hdCBjb250ZW50
c1NjYWxlRmFjdG9yKCk7Ci0gICAgYm9vbCBuZWVkc0JhY2tpbmdTdG9yZSgpIGNvbnN0OwotICAg
IGJvb2wgdXBkYXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgdWludDY0X3Qgd2luZG93TlBPYmplY3RJ
RCgpOwotICAgIFdlYkNvcmU6OkludFJlY3QgcGx1Z2luQm91bmRzKCk7Ci0KLSAgICB2b2lkIGdl
b21ldHJ5RGlkQ2hhbmdlKCk7Ci0KLSAgICAvLyBNZXNzYWdlIGhhbmRsZXJzLgotICAgIHZvaWQg
bG9hZFVSTCh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBT
dHJpbmcmIHVybFN0cmluZywgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFdlYkNvcmU6OkhU
VFBIZWFkZXJNYXAmIGhlYWRlckZpZWxkcywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBodHRwQm9k
eSwgYm9vbCBhbGxvd1BvcHVwcyk7Ci0gICAgdm9pZCB1cGRhdGUoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgcGFpbnRlZFJlY3QpOwotICAgIHZvaWQgcHJveGllc0ZvclVSTChjb25zdCBTdHJpbmcm
IHVybFN0cmluZywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcpPiYmKTsKLSAgICB2b2lk
IGNvb2tpZXNGb3JVUkwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoU3RyaW5nKT4mJik7Ci0gICAgdm9pZCBzZXRDb29raWVzRm9yVVJMKGNvbnN0IFN0cmlu
ZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cmluZyk7Ci0gICAgdm9pZCBnZXRB
dXRoZW50aWNhdGlvbkluZm8oY29uc3QgV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlJiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sIHJldHVyblZhbHVlLCBTdHJpbmcgdXNlcm5hbWUsIFN0cmlu
ZyBwYXNzd29yZCk+JiYpOwotICAgIHZvaWQgZ2V0UGx1Z2luRWxlbWVudE5QT2JqZWN0KENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQodWludDY0X3QpPiYmKTsKLSAgICB2b2lkIGV2YWx1YXRlKGNvbnN0
IE5QVmFyaWFudERhdGEmIG5wT2JqZWN0QXNWYXJpYW50RGF0YSwgY29uc3QgU3RyaW5nJiBzY3Jp
cHRTdHJpbmcsIGJvb2wgYWxsb3dQb3B1cHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBy
ZXR1cm5WYWx1ZSwgTlBWYXJpYW50RGF0YSYmIHJlc3VsdERhdGEpPiYmKTsKLSAgICB2b2lkIHNl
dFBsdWdpbklzUGxheWluZ0F1ZGlvKGJvb2wpOwotICAgIHZvaWQgY29udGludWVTdHJlYW1Mb2Fk
KHVpbnQ2NF90IHN0cmVhbUlEKTsKLSAgICB2b2lkIGNhbmNlbFN0cmVhbUxvYWQodWludDY0X3Qg
c3RyZWFtSUQpOwotICAgIHZvaWQgY2FuY2VsTWFudWFsU3RyZWFtTG9hZCgpOwotICAgIHZvaWQg
c2V0U3RhdHVzYmFyVGV4dChjb25zdCBTdHJpbmcmIHN0YXR1c2JhclRleHQpOwotI2lmIFBMQVRG
T1JNKENPQ09BKQotICAgIHZvaWQgcGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZChib29s
KTsKLSAgICB2b2lkIHNldENvbXBsZXhUZXh0SW5wdXRTdGF0ZSh1aW50NjRfdCk7Ci0gICAgdm9p
ZCBzZXRMYXllckhvc3RpbmdDb250ZXh0SUQodWludDMyX3QpOwotI2VuZGlmCi0jaWYgUExBVEZP
Uk0oWDExKQotICAgIHZvaWQgY3JlYXRlUGx1Z2luQ29udGFpbmVyKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQodWludDY0X3Qgd2luZG93SUQpPiYmKTsKLSAgICB2b2lkIHdpbmRvd2VkUGx1Z2luR2Vv
bWV0cnlEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZnJhbWVSZWN0LCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCwgdWludDY0X3Qgd2luZG93SUQpOwotICAgIHZvaWQg
d2luZG93ZWRQbHVnaW5WaXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wgaXNWaXNpYmxlLCB1aW50NjRf
dCB3aW5kb3dJRCk7Ci0jZW5kaWYKLQotICAgIGJvb2wgY2FuSW5pdGlhbGl6ZUFzeW5jaHJvbm91
c2x5KCkgY29uc3Q7Ci0KLSAgICB2b2lkIGRpZENyZWF0ZVBsdWdpbihib29sIHdhbnRzV2hlZWxF
dmVudHMsIHVpbnQzMl90IHJlbW90ZUxheWVyQ2xpZW50SUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7Ci0gICAgdm9pZCBkaWRGYWlsVG9DcmVhdGVQbHVnaW4oQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKTsKLQotICAgIHZvaWQgZGlkQ3JlYXRlUGx1Z2luSW50ZXJuYWwoYm9vbCB3
YW50c1doZWVsRXZlbnRzLCB1aW50MzJfdCByZW1vdGVMYXllckNsaWVudElEKTsKLSAgICB2b2lk
IGRpZEZhaWxUb0NyZWF0ZVBsdWdpbkludGVybmFsKCk7Ci0KLSAgICB1aW50NjRfdCBtX3BsdWdp
blByb2Nlc3NUb2tlbiB7IDAgfTsKLQotICAgIFJlZlB0cjxQbHVnaW5Qcm9jZXNzQ29ubmVjdGlv
bj4gbV9jb25uZWN0aW9uOwotICAgIHVpbnQ2NF90IG1fcGx1Z2luSW5zdGFuY2VJRCB7IDAgfTsK
LQotICAgIFdlYkNvcmU6OkludFNpemUgbV9wbHVnaW5TaXplOwotCi0gICAgLy8gVGhlIGNsaXAg
cmVjdCBpbiBwbHVnLWluIGNvb3JkaW5hdGVzLgotICAgIFdlYkNvcmU6OkludFJlY3QgbV9jbGlw
UmVjdDsKLQotICAgIC8vIEEgdHJhbnNmb3JtIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29udmVydCBm
cm9tIHJvb3QgdmlldyBjb29yZGluYXRlcyB0byBwbHVnLWluIGNvb3JkaW5hdGVzLgotICAgIFdl
YkNvcmU6OkFmZmluZVRyYW5zZm9ybSBtX3BsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm07Ci0KLSAg
ICAvLyBUaGlzIGlzIHRoZSBiYWNraW5nIHN0b3JlIHRoYXQgd2UgcGFpbnQgd2hlbiB3ZSdyZSB0
b2xkIHRvIHBhaW50LgotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IG1fYmFja2luZ1N0b3Jl
OwotCi0gICAgLy8gVGhpcyBpcyB0aGUgc2hhcmVkIG1lbW9yeSBiYWNraW5nIHN0b3JlIHRoYXQg
dGhlIHBsdWctaW4gcGFpbnRzIGludG8uIFdoZW4gdGhlIHBsdWctaW4gdGVsbHMgdXMKLSAgICAv
LyB0aGF0IGl0J3MgcGFpbnRlZCBzb21ldGhpbmcgaW4gaXQsIHdlJ2xsIGJsaXQgZnJvbSBpdCB0
byBvdXIgb3duIGJhY2tpbmcgc3RvcmUuCi0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbV9w
bHVnaW5CYWNraW5nU3RvcmU7Ci0gICAgCi0gICAgLy8gV2hldGhlciBhbGwgb2YgdGhlIHBsdWct
aW4gYmFja2luZyBzdG9yZSBjb250YWlucyB2YWxpZCBkYXRhLgotICAgIGJvb2wgbV9wbHVnaW5C
YWNraW5nU3RvcmVDb250YWluc1ZhbGlkRGF0YSB7IGZhbHNlIH07Ci0KLSAgICBib29sIG1faXNT
dGFydGVkIHsgZmFsc2UgfTsKLQotICAgIC8vIFdoZXRoZXIgd2UncmUgY2FsbGVkIGludmFsaWRh
dGUgaW4gcmVzcG9uc2UgdG8gYW4gdXBkYXRlIGNhbGwsIGFuZCBhcmUgbm93IHdhaXRpbmcgZm9y
IGEgcGFpbnQgY2FsbC4KLSAgICBib29sIG1fd2FpdGluZ0ZvclBhaW50SW5SZXNwb25zZVRvVXBk
YXRlIHsgZmFsc2UgfTsKLQotICAgIC8vIFdoZXRoZXIgd2Ugc2hvdWxkIHNlbmQgd2hlZWwgZXZl
bnRzIHRvIHRoaXMgcGx1Zy1pbiBvciBub3QuCi0gICAgYm9vbCBtX3dhbnRzV2hlZWxFdmVudHMg
eyBmYWxzZSB9OwotCi0gICAgLy8gVGhlIGNsaWVudCBJRCBmb3IgdGhlIENBIGxheWVyIGluIHRo
ZSBwbHVnLWluIHByb2Nlc3MuIFdpbGwgYmUgMCBpZiB0aGUgcGx1Zy1pbiBpcyBub3QgYSBDQSBw
bHVnLWluLgotICAgIHVpbnQzMl90IG1fcmVtb3RlTGF5ZXJDbGllbnRJRCB7IDAgfTsKLQotICAg
IHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnM+IG1fcGVuZGluZ1BsdWdp
bkNyZWF0aW9uUGFyYW1ldGVyczsKLSAgICBib29sIG1fd2FpdGluZ09uQXN5bmNocm9ub3VzSW5p
dGlhbGl6YXRpb24geyBmYWxzZSB9OwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgUmV0YWlu
UHRyPENBTGF5ZXI+IG1fcGx1Z2luTGF5ZXI7Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1BMVUdJTihQbHVnaW5Qcm94eSwgaXNQ
bHVnaW5Qcm94eSgpKQotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5
Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJv
eHkubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0YzdhMjk5NjAw
OWQzM2UwNGQ5MWJlNTEyOGVjMTZkZDQwNzc5NGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1
Z2luUHJveHkubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0jIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMK
LSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKLQotbWVzc2FnZXMgLT4gUGx1Z2luUHJveHkgTGVnYWN5UmVjZWl2ZXIgewot
ICAgICMgQXNrcyB0aGUgd2ViIHByb2Nlc3MgdG8gbG9hZCBhIFVSTC4KLSAgICBMb2FkVVJMKHVp
bnQ2NF90IHJlcXVlc3RJRCwgU3RyaW5nIG1ldGhvZCwgU3RyaW5nIHVybFN0cmluZywgU3RyaW5n
IHRhcmdldCwgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCBoZWFkZXJGaWVsZHMsIFZlY3Rvcjx1aW50
OF90PiBodHRwQm9keSwgYm9vbCBhbGxvd1BvcHVwcyk7Ci0KLSAgICAjIENhbGxlZCB3aGVuIHRo
ZSBwbHVnLWluIGhhcyBwYWludGVkIGludG8gaXRzIGJhY2tpbmcgc3RvcmUuIFRoZSBwYWludGVk
IHJlY3QgaXMgaW4gcGx1Zy1pbiBjb29yZGluYXRlcy4KLSAgICBVcGRhdGUoV2ViQ29yZTo6SW50
UmVjdCBwYWludGVkUmVjdCkKLQotICAgICMgUmV0dXJucyBhIFBBQyBzdHlsZSBzdHJpbmcgd2l0
aCBwcm94aWVzIGZvciB0aGUgZ2l2ZW4gVVJMLgotICAgIFByb3hpZXNGb3JVUkwoU3RyaW5nIHVy
bFN0cmluZykgLT4gKFN0cmluZyBwcm94aWVzU3RyaW5nKSBTeW5jaHJvbm91cwotCi0gICAgIyBS
ZXR1cm5zIHRoZSBjb29raWVzIGZvciB0aGUgZ2l2ZW4gVVJMLgotICAgIENvb2tpZXNGb3JVUkwo
U3RyaW5nIHVybFN0cmluZykgLT4gKFN0cmluZyBjb29raWVTdHJpbmcpIFN5bmNocm9ub3VzCi0K
LSAgICAjIFNldHMgdGhlIGNvb2tpZXMgZm9yIHRoZSBnaXZlbiBVUkwuCi0gICAgU2V0Q29va2ll
c0ZvclVSTChTdHJpbmcgdXJsU3RyaW5nLCBTdHJpbmcgY29va2llU3RyaW5nKQotCi0gICAgIyBH
ZXRzIHRoZSBhdXRoZW50aWNhdGlvbiBpbmZvIGZvciB0aGUgZ2l2ZW4gcHJvdGVjdGlvbiBzcGFj
ZS4KLSAgICBHZXRBdXRoZW50aWNhdGlvbkluZm8oV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlIHBy
b3RlY3Rpb25TcGFjZSkgLT4gKGJvb2wgcmV0dXJuVmFsdWUsIFN0cmluZyB1c2VybmFtZSwgU3Ry
aW5nIHBhc3N3b3JkKSBTeW5jaHJvbm91cwotCi0gICAgIyBHZXRzIGEgcmVmZXJlbmNlIHRvIHRo
ZSBwbHVnLWluIGVsZW1lbnQgTlBPYmplY3QuCi0gICAgR2V0UGx1Z2luRWxlbWVudE5QT2JqZWN0
KCkgLT4gKHVpbnQ2NF90IHBsdWdpbkVsZW1lbnROUE9iamVjdElEKSBTeW5jaHJvbm91cwotCi0g
ICAgIyBFdmFsdWF0ZXMgdGhlIGdpdmVuIEphdmFTY3JpcHQgc3RyaW5nLgotICAgIEV2YWx1YXRl
KFdlYktpdDo6TlBWYXJpYW50RGF0YSBucE9iamVjdEFzVmFyaWFudERhdGEsIFN0cmluZyBzY3Jp
cHRTdHJpbmcsIGJvb2wgYWxsb3dQb3B1cHMpIC0+IChib29sIHJldHVyblZhbHVlLCBXZWJLaXQ6
Ok5QVmFyaWFudERhdGEgcmVzdWx0RGF0YSkgU3luY2hyb25vdXMKLQotICAgICMgQ2FuY2VscyB0
aGUgZ2l2ZW4gc3RyZWFtIGxvYWQuCi0gICAgQ2FuY2VsU3RyZWFtTG9hZCh1aW50NjRfdCBzdHJl
YW1JRCkKLQotICAgICMgQ29udGludWVzIHRoZSBnaXZlbiBzdHJlYW0gbG9hZC4KLSAgICBDb250
aW51ZVN0cmVhbUxvYWQodWludDY0X3Qgc3RyZWFtSUQpCi0KLSAgICAjIENhbmNlbCB0aGUgbWFu
dWFsIHN0cmVhbSBsb2FkLgotICAgIENhbmNlbE1hbnVhbFN0cmVhbUxvYWQoKQotCi0gICAgIyBT
ZXQgdGhlIHN0YXR1cyBiYXIgdGV4dC4KLSAgICBTZXRTdGF0dXNiYXJUZXh0KFN0cmluZyBzdGF0
dXNiYXJUZXh0KQotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgIyBDYWxsZWQgd2hlbiB0aGUg
cGx1Zy1pbidzIGZvY3VzIG9yIGl0cyBjb250YWluaW5nIHdpbmRvdyBmb2N1cyBjaGFuZ2VzLgot
ICAgIFBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQoYm9vbCBwbHVnaW5IYXNGb2N1c0Fu
ZFdpbmRvd0hhc0ZvY3VzKQotCi0gICAgIyBDaGFuZ2Ugd2hldGhlciBjb21wbGV4IHRleHQgaW5w
dXQgaXMgZW5hYmxlZCBmb3IgdGhpcyBwbHVnLWluLgotICAgIFNldENvbXBsZXhUZXh0SW5wdXRT
dGF0ZSh1aW50NjRfdCBjb21wbGV4VGV4dElucHV0U3RhdGUpCi0KLSAgICAjIFVwZGF0ZSB0aGUg
bGF5ZXIgaG9zdGluZyBjb250ZXh0IElELiBDYWxsZWQgd2hlbmV2ZXIgdGhlIGxheWVyIGhvc3Rp
bmcgc3RhdGUgY2hhbmdlcy4KLSAgICBTZXRMYXllckhvc3RpbmdDb250ZXh0SUQodWludDMyX3Qg
bGF5ZXJIb3N0aW5nQ29udGV4dElEKQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShYMTEpCi0gICAg
IyBDcmVhdGUgdGhlIHBsdWdpbiBjb250YWluZXIgZm9yIHdpbmRvd2VkIHBsdWdpbnMKLSAgICBD
cmVhdGVQbHVnaW5Db250YWluZXIoKSAtPiAodWludDY0X3Qgd2luZG93SUQpIFN5bmNocm9ub3Vz
Ci0KLSAgICAjIFVwZGF0ZSBnZW9tZXRyeSBvZiB3aW5kb3dlZCBwbHVnaW4gd2lkZ2V0Ci0gICAg
V2luZG93ZWRQbHVnaW5HZW9tZXRyeURpZENoYW5nZShXZWJDb3JlOjpJbnRSZWN0IGZyYW1lUmVj
dCwgV2ViQ29yZTo6SW50UmVjdCBjbGlwUmVjdCwgdWludDY0X3Qgd2luZG93SUQpCi0KLSAgICAj
IFVwZGF0ZSB2aXNpYmlsaXR5IG9mIHdpbmRvd2VkIHBsdWdpbiB3aWRnZXQKLSAgICBXaW5kb3dl
ZFBsdWdpblZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCBpc1Zpc2libGUsIHVpbnQ2NF90IHdpbmRv
d0lEKQotI2VuZGlmCi0KLSAgICAjIFRlbGxzIHRoZSBXZWJQcm9jZXNzIHRoYXQgdGhlIHBsdWct
aW4gd2FzIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBhc3luY2hyb25vdXNseQotICAgIERpZENy
ZWF0ZVBsdWdpbihib29sIHdhbnRzV2hlZWxFdmVudHMsIHVpbnQzMl90IHJlbW90ZUxheWVyQ2xp
ZW50SUQpIC0+ICgpIFN5bmNocm9ub3VzCi0gICAgCi0gICAgIyBUZWxscyB0aGUgV2ViUHJvY2Vz
cyB0aGF0IHRoZSBwbHVnLWluIGZhaWxlZCB0byBpbml0aWFsaXplLgotICAgIERpZEZhaWxUb0Ny
ZWF0ZVBsdWdpbigpIC0+ICgpIFN5bmNocm9ub3VzCi0KLSAgICAjIFRlbGxzIHRoZSBXZWJQcm9j
ZXNzIHRoYXQgdGhlIHBsdWctaW4gaGFzIHN0YXJ0ZWQgb3Igc3RvcHBlZCBwbGF5aW5nIGF1ZGlv
LgotICAgIFNldFBsdWdpbklzUGxheWluZ0F1ZGlvKGJvb2wgcGx1Z2luSXNQbGF5aW5nQXVkaW8p
Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcAppbmRleCBkM2FhZDZlYTI2MTY4YTIxYjgzZDUzMGU3YWI2ZGQ0N2EyNjdmMjFh
Li5kNTRmMjdmMDcwOTE0N2U5ZWRlYzA2ZGU1OGMxZThjYzEyMzFhNjc3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMjYsNyArMjYs
NiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKIAotI2lu
Y2x1ZGUgIk5QUnVudGltZVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlBsdWdpbi5oIgogI2luY2x1
ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5o
IgpAQCAtMjYwLDEwICsyNTksNiBAQCB2b2lkIFBsdWdpblZpZXc6OlN0cmVhbTo6ZGlkRmluaXNo
TG9hZGluZyhOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciopCiAgICAgLy8gQ2FsbGluZyBzdHJl
YW1EaWRGaW5pc2hMb2FkaW5nIGNvdWxkIGNhdXNlIHVzIHRvIGJlIGRlbGV0ZWQsIHNvIHdlIGhv
bGQgb24gdG8gYSByZWZlcmVuY2UgaGVyZS4KICAgICBSZWY8U3RyZWFtPiBwcm90ZWN0KCp0aGlz
KTsKIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIC8vIFByb3RlY3QgdGhl
IHBsdWctaW4gd2hpbGUgd2UncmUgY2FsbGluZyBpbnRvIGl0LgotICAgIE5QUnVudGltZU9iamVj
dE1hcDo6UGx1Z2luUHJvdGVjdG9yIHBsdWdpblByb3RlY3RvcigmbV9wbHVnaW5WaWV3LT5tX25w
UnVudGltZU9iamVjdE1hcCk7Ci0jZW5kaWYKICAgICBtX3BsdWdpblZpZXctPm1fcGx1Z2luLT5z
dHJlYW1EaWRGaW5pc2hMb2FkaW5nKG1fc3RyZWFtSUQpOwogCiAgICAgbV9wbHVnaW5WaWV3LT5y
ZW1vdmVTdHJlYW0odGhpcyk7CkBAIC0zMzUsMTEgKzMzMCw2IEBAIHZvaWQgUGx1Z2luVmlldzo6
ZGVzdHJveVBsdWdpbkFuZFJlc2V0KCkKICNlbmRpZgogICAgIH0KIAotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotICAgIC8vIEludmFsaWRhdGUgdGhlIG9iamVjdCBtYXAuCi0gICAg
bV9ucFJ1bnRpbWVPYmplY3RNYXAuaW52YWxpZGF0ZSgpOwotI2VuZGlmCi0KICAgICBjYW5jZWxB
bGxTdHJlYW1zKCk7CiB9CiAKQEAgLTU4OSwxMiArNTc5LDYgQEAgdm9pZCBQbHVnaW5WaWV3Ojpp
bml0aWFsaXplUGx1Z2luKCkKIHZvaWQgUGx1Z2luVmlldzo6ZGlkRmFpbFRvSW5pdGlhbGl6ZVBs
dWdpbigpCiB7CiAgICAgbV9wbHVnaW4gPSBudWxscHRyOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0gICAgU3RyaW5nIGZyYW1lVVJMU3RyaW5nID0gZnJhbWUoKS0+bG9hZGVy
KCkuZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9uc2VVUkwoKS5zdHJpbmcoKTsKLSAgICBTdHJpbmcg
cGFnZVVSTFN0cmluZyA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkubG9hZGVy
KCkuZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9uc2VVUkwoKS5zdHJpbmcoKTsKLSAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmFpbFRvSW5pdGlhbGl6ZVBsdWdp
bihtX3BhcmFtZXRlcnMubWltZVR5cGUsIGZyYW1lVVJMU3RyaW5nLCBwYWdlVVJMU3RyaW5nKSk7
Ci0jZW5kaWYKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjpkaWRJbml0aWFsaXplUGx1Z2luKCkKQEAg
LTY2MCwxOSArNjQ0LDggQEAgSlNPYmplY3QqIFBsdWdpblZpZXc6OnNjcmlwdE9iamVjdChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIGlmICghbV9pc0luaXRpYWxpemVkIHx8ICFt
X3BsdWdpbikKICAgICAgICAgcmV0dXJuIDA7CiAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLSAgICBOUE9iamVjdCogc2NyaXB0YWJsZU5QT2JqZWN0ID0gbV9wbHVnaW4tPnBsdWdp
blNjcmlwdGFibGVOUE9iamVjdCgpOwotICAgIGlmICghc2NyaXB0YWJsZU5QT2JqZWN0KQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IG1fbnBSdW50aW1lT2Jq
ZWN0TWFwLmdldE9yQ3JlYXRlSlNPYmplY3QoZ2xvYmFsT2JqZWN0LCBzY3JpcHRhYmxlTlBPYmpl
Y3QpOwotICAgIHJlbGVhc2VOUE9iamVjdChzY3JpcHRhYmxlTlBPYmplY3QpOwotCi0gICAgcmV0
dXJuIGpzT2JqZWN0OwotI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKICAg
ICByZXR1cm4gMDsKLSNlbmRpZgogfQogCiB2b2lkIFBsdWdpblZpZXc6OnN0b3JhZ2VCbG9ja2lu
Z1N0YXRlQ2hhbmdlZCgpCkBAIC0xMzE5LDEzICsxMjkyLDYgQEAgdm9pZCBQbHVnaW5WaWV3Ojpt
ZWRpYUNhblN0YXJ0KFdlYkNvcmU6OkRvY3VtZW50JikKIAogdm9pZCBQbHVnaW5WaWV3OjpwYWdl
TXV0ZWRTdGF0ZURpZENoYW5nZSgpCiB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0gICAgLy8gVGhlIHBsdWctaW4gY2FuIGJlIG51bGwgaGVyZSBpZiBpdCBmYWlsZWQgdG8gaW5p
dGlhbGl6ZS4KLSAgICBpZiAoIW1faXNJbml0aWFsaXplZCB8fCAhbV9wbHVnaW4pCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fcGx1Z2luLT5tdXRlZFN0YXRlQ2hhbmdlZChpc011dGVkKCkpOwot
I2VuZGlmCiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZShjb25zdCBJbnRSZWN0JiBk
aXJ0eVJlY3QpCkBAIC0xMzk1LDY4ICsxMzYxLDYgQEAgdm9pZCBQbHVnaW5WaWV3OjpjYW5jZWxN
YW51YWxTdHJlYW1Mb2FkKCkKICAgICAgICAgZG9jdW1lbnRMb2FkZXItPmNhbmNlbE1haW5SZXNv
dXJjZUxvYWQoZnJhbWUoKS0+bG9hZGVyKCkuY2FuY2VsbGVkRXJyb3IobV9wYXJhbWV0ZXJzLnVy
bCkpOwogfQogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi1OUE9iamVjdCogUGx1
Z2luVmlldzo6d2luZG93U2NyaXB0TlBPYmplY3QoKQotewotICAgIGlmICghZnJhbWUoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoIWZyYW1lKCktPnNjcmlwdCgpLmNhbkV4
ZWN1dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkgewotICAgICAgICAvLyBGSVhN
RTogSW52ZXN0aWdhdGUgaWYgb3RoZXIgYnJvd3NlcnMgYWxsb3cgcGx1Zy1pbnMgdG8gYWNjZXNz
IEphdmFTY3JpcHQgb2JqZWN0cyBldmVuIGlmIEphdmFTY3JpcHQgaXMgZGlzYWJsZWQuCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiBtX25wUnVudGltZU9iamVj
dE1hcC5nZXRPckNyZWF0ZU5QT2JqZWN0KHBsdWdpbldvcmxkKCkudm0oKSwgZnJhbWUoKS0+d2lu
ZG93UHJveHkoKS5qc1dpbmRvd1Byb3h5KHBsdWdpbldvcmxkKCkpLT53aW5kb3coKSk7Ci19Ci0K
LU5QT2JqZWN0KiBQbHVnaW5WaWV3OjpwbHVnaW5FbGVtZW50TlBPYmplY3QoKQotewotICAgIGlm
ICghZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWZyYW1lKCktPnNjcmlw
dCgpLmNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkgewotICAgICAg
ICAvLyBGSVhNRTogSW52ZXN0aWdhdGUgaWYgb3RoZXIgYnJvd3NlcnMgYWxsb3cgcGx1Zy1pbnMg
dG8gYWNjZXNzIEphdmFTY3JpcHQgb2JqZWN0cyBldmVuIGlmIEphdmFTY3JpcHQgaXMgZGlzYWJs
ZWQuCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBm
cmFtZSgpLT5zY3JpcHQoKS5qc09iamVjdEZvclBsdWdpbkVsZW1lbnQobV9wbHVnaW5FbGVtZW50
LmdldCgpKTsKLSAgICBBU1NFUlQob2JqZWN0KTsKLQotICAgIHJldHVybiBtX25wUnVudGltZU9i
amVjdE1hcC5nZXRPckNyZWF0ZU5QT2JqZWN0KHBsdWdpbldvcmxkKCkudm0oKSwgb2JqZWN0KTsK
LX0KLQotYm9vbCBQbHVnaW5WaWV3OjpldmFsdWF0ZShOUE9iamVjdCogbnBPYmplY3QsIGNvbnN0
IFN0cmluZyYgc2NyaXB0U3RyaW5nLCBOUFZhcmlhbnQqIHJlc3VsdCwgYm9vbCBhbGxvd1BvcHVw
cykKLXsKLSAgICAvLyBGSVhNRTogSXMgdGhpcyBjaGVjayBuZWNlc3Nhcnk/Ci0gICAgaWYgKCFt
X3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgLy8gQ2FsbGluZyBldmFsdWF0ZSB3aWxsIHJ1biBKYXZhU2NyaXB0IHRoYXQgY2Fu
IHBvdGVudGlhbGx5IHJlbW92ZSB0aGUgcGx1Zy1pbiBlbGVtZW50LCBzbyB3ZSBuZWVkIHRvCi0g
ICAgLy8gcHJvdGVjdCB0aGUgcGx1Zy1pbiB2aWV3IGZyb20gZGVzdHJ1Y3Rpb24uCi0gICAgTlBS
dW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcGx1Z2luUHJvdGVjdG9yKCZtX25wUnVu
dGltZU9iamVjdE1hcCk7Ci0KLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNh
dG9yKGFsbG93UG9wdXBzID8gc3RkOjpvcHRpb25hbDxQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0
ZT4oUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKSA6IHN0ZDo6bnVsbG9wdCk7Ci0gICAgcmV0dXJuIG1f
bnBSdW50aW1lT2JqZWN0TWFwLmV2YWx1YXRlKG5wT2JqZWN0LCBzY3JpcHRTdHJpbmcsIHJlc3Vs
dCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0UGx1Z2luSXNQbGF5aW5nQXVkaW8oYm9vbCBw
bHVnaW5Jc1BsYXlpbmdBdWRpbykKLXsKLSAgICBpZiAobV9wbHVnaW5Jc1BsYXlpbmdBdWRpbyA9
PSBwbHVnaW5Jc1BsYXlpbmdBdWRpbykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wbHVnaW5J
c1BsYXlpbmdBdWRpbyA9IHBsdWdpbklzUGxheWluZ0F1ZGlvOwotICAgIG1fcGx1Z2luRWxlbWVu
dC0+ZG9jdW1lbnQoKS51cGRhdGVJc1BsYXlpbmdNZWRpYSgpOwotfQotCi1ib29sIFBsdWdpblZp
ZXc6OmlzTXV0ZWQoKSBjb25zdAotewotICAgIGlmICghZnJhbWUoKSB8fCAhZnJhbWUoKS0+cGFn
ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gZnJhbWUoKS0+cGFnZSgp
LT5pc0F1ZGlvTXV0ZWQoKTsKLX0KLSNlbmRpZgotCiB2b2lkIFBsdWdpblZpZXc6OnNldFN0YXR1
c2JhclRleHQoY29uc3QgU3RyaW5nJiBzdGF0dXNiYXJUZXh0KQogewogICAgIGlmICghZnJhbWUo
KSkKQEAgLTE0OTksMTIgKzE0MDMsNiBAQCB2b2lkIFBsdWdpblZpZXc6OnBsdWdpbkZvY3VzT3JX
aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCBwbHVnaW5IYXNGb2N1c0FuZFdpbmRvd0hhcwogICAgICAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UGx1Z2luRm9jdXNPcldp
bmRvd0ZvY3VzQ2hhbmdlZChtX3BsdWdpbi0+cGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZp
ZXIoKSwgcGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1cykpOwogfQogCi12b2lkIFBsdWdp
blZpZXc6OnNldENvbXBsZXhUZXh0SW5wdXRTdGF0ZShQbHVnaW5Db21wbGV4VGV4dElucHV0U3Rh
dGUgcGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKQotewotICAgIGlmIChtX3dlYlBhZ2UpCi0g
ICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZXRQbHVnaW5D
b21wbGV4VGV4dElucHV0U3RhdGUobV9wbHVnaW4tPnBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVu
dGlmaWVyKCksIHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkpOwotfQotCiBjb25zdCBNYWNo
U2VuZFJpZ2h0JiBQbHVnaW5WaWV3Ojpjb21wb3NpdGluZ1JlbmRlclNlcnZlclBvcnQoKQogewog
ICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5jb21wb3NpdGluZ1JlbmRlclNlcnZl
clBvcnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcu
aAppbmRleCA1YWJjNDg2ZTBjNTkxMGFkZThiOGM2ZmM4ZDhmOTBhOWY5NmViNThlLi4yMTI2ZWI4
ZWRiNTU5Mzg2YjM0MjI1ZWIyYmQ1YmZjZDY4MDIzZjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oCkBAIC0yNiw3ICsyNiw2IEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKLSNpbmNsdWRlICJOUFJ1bnRp
bWVPYmplY3RNYXAuaCIKICNpbmNsdWRlICJQbHVnaW4uaCIKICNpbmNsdWRlICJQbHVnaW5Db250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKQEAgLTE5NiwxOSArMTk1LDExIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBjYW5jZWxTdHJlYW1Mb2FkKHVpbnQ2NF90IHN0cmVhbUlEKSBvdmVy
cmlkZTsKICAgICB2b2lkIGNvbnRpbnVlU3RyZWFtTG9hZCh1aW50NjRfdCBzdHJlYW1JRCkgb3Zl
cnJpZGU7CiAgICAgdm9pZCBjYW5jZWxNYW51YWxTdHJlYW1Mb2FkKCkgb3ZlcnJpZGU7Ci0jaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE5Q
T2JqZWN0KCkgb3ZlcnJpZGU7Ci0gICAgTlBPYmplY3QqIHBsdWdpbkVsZW1lbnROUE9iamVjdCgp
IG92ZXJyaWRlOwotICAgIGJvb2wgZXZhbHVhdGUoTlBPYmplY3QqLCBjb25zdCBTdHJpbmcmIHNj
cmlwdFN0cmluZywgTlBWYXJpYW50KiByZXN1bHQsIGJvb2wgYWxsb3dQb3B1cHMpIG92ZXJyaWRl
OwotICAgIHZvaWQgc2V0UGx1Z2luSXNQbGF5aW5nQXVkaW8oYm9vbCkgb3ZlcnJpZGU7Ci0gICAg
Ym9vbCBpc011dGVkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0jZW5kaWYKICAgICB2b2lkIHNldFN0YXR1
c2JhclRleHQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgYm9vbCBpc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdFbmFibGVkKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBwbHVnaW5Qcm9jZXNzQ3Jh
c2hlZCgpIG92ZXJyaWRlOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcGx1Z2luRm9j
dXNPcldpbmRvd0ZvY3VzQ2hhbmdlZChib29sIHBsdWdpbkhhc0ZvY3VzQW5kV2luZG93SGFzRm9j
dXMpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Q29tcGxleFRleHRJbnB1dFN0YXRlKFBsdWdpbkNv
bXBsZXhUZXh0SW5wdXRTdGF0ZSkgb3ZlcnJpZGU7CiAgICAgY29uc3QgV1RGOjpNYWNoU2VuZFJp
Z2h0JiBjb21wb3NpdGluZ1JlbmRlclNlcnZlclBvcnQoKSBvdmVycmlkZTsKICNlbmRpZgogICAg
IGZsb2F0IGNvbnRlbnRzU2NhbGVGYWN0b3IoKSBvdmVycmlkZTsKQEAgLTI1NCwxMSArMjQ1LDYg
QEAgcHJpdmF0ZToKICAgICAvLyBTdHJlYW1zIHRoYXQgdGhlIHBsdWctaW4gaGFzIHJlcXVlc3Rl
ZCB0byBsb2FkLiAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8U3RyZWFtPj4gbV9zdHJl
YW1zOwogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgLy8gQSBtYXAgb2Yg
YWxsIHJlbGF0ZWQgTlBPYmplY3RzIGZvciB0aGlzIHBsdWctaW4gdmlldy4KLSAgICBOUFJ1bnRp
bWVPYmplY3RNYXAgbV9ucFJ1bnRpbWVPYmplY3RNYXAgeyB0aGlzIH07Ci0jZW5kaWYKLQogICAg
IC8vIFRoZSBtYW51YWwgc3RyZWFtIHN0YXRlLiBUaGlzIGlzIHVzZWQgc28gd2UgY2FuIGRlbGl2
ZXIgYSBtYW51YWwgc3RyZWFtIHRvIGEgcGx1Zy1pbgogICAgIC8vIHdoZW4gaXQgaXMgaW5pdGlh
bGl6ZWQuCiAgICAgZW51bSBjbGFzcyBNYW51YWxTdHJlYW1TdGF0ZSB7IEluaXRpYWwsIEhhc1Jl
Y2VpdmVkUmVzcG9uc2UsIEZpbmlzaGVkLCBGYWlsZWQgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpbkluZm9Qcm92aWRlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5JbmZvUHJvdmlkZXIuY3BwCmlu
ZGV4IDcxNWIyZWE5MTJiYjc2YjM2N2I0NGMwMGIwYjEzMjM0M2UwOGI2NmEuLmU5MTUzNDI2Nzg0
YjhhNTVmY2VjZGRkZmYzN2I5YzIxODMyYjc2OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpbkluZm9Qcm92aWRlci5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luSW5mb1Byb3ZpZGVyLmNwcApAQCAt
NjcsMjMgKzY3LDExIEBAIFdlYlBsdWdpbkluZm9Qcm92aWRlcjo6fldlYlBsdWdpbkluZm9Qcm92
aWRlcigpCiAKIHZvaWQgV2ViUGx1Z2luSW5mb1Byb3ZpZGVyOjpyZWZyZXNoUGx1Z2lucygpCiB7
Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgbV9jYWNoZWRQbHVnaW5zLmNs
ZWFyKCk7Ci0gICAgbV9wbHVnaW5DYWNoZUlzUG9wdWxhdGVkID0gZmFsc2U7Ci0gICAgbV9zaG91
bGRSZWZyZXNoUGx1Z2lucyA9IHRydWU7Ci0jZW5kaWYKIH0KIAogVmVjdG9yPFBsdWdpbkluZm8+
IFdlYlBsdWdpbkluZm9Qcm92aWRlcjo6cGx1Z2luSW5mbyhQYWdlJiBwYWdlLCBzdGQ6Om9wdGlv
bmFsPFZlY3RvcjxTdXBwb3J0ZWRQbHVnaW5JZGVudGlmaWVyPj4mIHN1cHBvcnRlZFBsdWdpbklk
ZW50aWZpZXJzKQogewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHBvcHVs
YXRlUGx1Z2luQ2FjaGUocGFnZSk7Ci0KLSAgICBpZiAobV9jYWNoZWRTdXBwb3J0ZWRQbHVnaW5J
ZGVudGlmaWVycykKLSAgICAgICAgc3VwcG9ydGVkUGx1Z2luSWRlbnRpZmllcnMgPSAqbV9jYWNo
ZWRTdXBwb3J0ZWRQbHVnaW5JZGVudGlmaWVyczsKLQotICAgIHJldHVybiBwYWdlLm1haW5GcmFt
ZSgpLmFyZVBsdWdpbnNFbmFibGVkKCkgPyBtX2NhY2hlZFBsdWdpbnMgOiBtX2NhY2hlZEFwcGxp
Y2F0aW9uUGx1Z2luczsKLSNlbGlmIEVOQUJMRShQREZLSVRfUExVR0lOKQorI2lmIEVOQUJMRShQ
REZLSVRfUExVR0lOKQogICAgIFVOVVNFRF9QQVJBTShwYWdlKTsKICAgICBVTlVTRURfUEFSQU0o
c3VwcG9ydGVkUGx1Z2luSWRlbnRpZmllcnMpOwogICAgIHJldHVybiB7IFBERlBsdWdpbjo6cGx1
Z2luSW5mbygpIH07CkBAIC05MSw3ICs3OSw3IEBAIFZlY3RvcjxQbHVnaW5JbmZvPiBXZWJQbHVn
aW5JbmZvUHJvdmlkZXI6OnBsdWdpbkluZm8oUGFnZSYgcGFnZSwgc3RkOjpvcHRpb25hbDxWCiAg
ICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwogICAgIFVOVVNFRF9QQVJBTShzdXBwb3J0ZWRQbHVnaW5J
ZGVudGlmaWVycyk7CiAgICAgcmV0dXJuIHsgfTsKLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKKyNlbmRpZiAvLyBFTkFCTEUoUERGS0lUX1BMVUdJTikKIH0KIAogVmVjdG9y
PFdlYkNvcmU6OlBsdWdpbkluZm8+IFdlYlBsdWdpbkluZm9Qcm92aWRlcjo6d2ViVmlzaWJsZVBs
dWdpbkluZm8oUGFnZSYgcGFnZSwgY29uc3QgVVJMJiB1cmwpCkBAIC0xMjEsMjcgKzEwOSw0IEBA
IFZlY3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZvPiBXZWJQbHVnaW5JbmZvUHJvdmlkZXI6OndlYlZp
c2libGVQbHVnaW5JbmZvKFBhZ2UmIHBhCiAgICAgcmV0dXJuIHBsdWdpbnM7CiB9CiAKLSNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLXZvaWQgV2ViUGx1Z2luSW5mb1Byb3ZpZGVyOjpw
b3B1bGF0ZVBsdWdpbkNhY2hlKGNvbnN0IFdlYkNvcmU6OlBhZ2UmKQotewotICAgIGlmICghbV9w
bHVnaW5DYWNoZUlzUG9wdWxhdGVkKSB7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgIC8v
IEFwcGxpY2F0aW9uIHBsdWdpbnMgYXJlIG5vdCBhZmZlY3RlZCBieSBlbmFibGVQbHVnaW5zIHNl
dHRpbmcsIHNvIHdlIGFsd2F5cyBuZWVkIHRvIHNjYW4gcGx1Z2lucyB0byBnZXQgdGhlbS4KLSAg
ICAgICAgYm9vbCBzaG91bGRTY2FuUGx1Z2lucyA9IHRydWU7Ci0jZWxzZQotICAgICAgICBib29s
IHNob3VsZFNjYW5QbHVnaW5zID0gcGFnZS5tYWluRnJhbWUoKS5hcmVQbHVnaW5zRW5hYmxlZCgp
OwotI2VuZGlmCi0gICAgICAgIGlmIChzaG91bGRTY2FuUGx1Z2lucykgewotICAgICAgICAgICAg
SGFuZ0RldGVjdGlvbkRpc2FibGVyIGhhbmdEZXRlY3Rpb25EaXNhYmxlcjsKLSAgICAgICAgICAg
IGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0UGx1Z2lucyhtX3Nob3VsZFJl
ZnJlc2hQbHVnaW5zKSwKLSAgICAgICAgICAgICAgICBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5
OjpHZXRQbHVnaW5zOjpSZXBseShtX2NhY2hlZFBsdWdpbnMsIG1fY2FjaGVkQXBwbGljYXRpb25Q
bHVnaW5zLCBtX2NhY2hlZFN1cHBvcnRlZFBsdWdpbklkZW50aWZpZXJzKSwgMCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9zaG91bGRSZWZyZXNoUGx1
Z2lucyA9IGZhbHNlOwotICAgICAgICBtX3BsdWdpbkNhY2hlSXNQb3B1bGF0ZWQgPSB0cnVlOwot
ICAgIH0KLX0KLSNlbmRpZgotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvUGx1Z2lucy9XZWJQbHVnaW5JbmZvUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1dlYlBsdWdpbkluZm9Qcm92aWRlci5oCmluZGV4IDk3MDY2NmVhYzAwZGEw
ODhhZGJkZGQyZGEwZDBiYzNlZDkyZWRlNjguLjIwYmI4N2ZmNTA2YTlhNDM2YWVkNTUwZTlkZThh
NjRkODFiOWUzOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5z
L1dlYlBsdWdpbkluZm9Qcm92aWRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1dlYlBsdWdpbkluZm9Qcm92aWRlci5oCkBAIC00MywxOCArNDMsNiBAQCBwcml2YXRl
OgogICAgIFZlY3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZvPiBwbHVnaW5JbmZvKFdlYkNvcmU6OlBh
Z2UmLCBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpTdXBwb3J0ZWRQbHVnaW5JZGVudGlm
aWVyPj4mKSBmaW5hbDsKICAgICBWZWN0b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4gd2ViVmlzaWJs
ZVBsdWdpbkluZm8oV2ViQ29yZTo6UGFnZSYsIGNvbnN0IFVSTCYpIGZpbmFsOwogICAgIHZvaWQg
cmVmcmVzaFBsdWdpbnMoKSBvdmVycmlkZTsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQotICAgIHZvaWQgcG9wdWxhdGVQbHVnaW5DYWNoZShjb25zdCBXZWJDb3JlOjpQYWdlJik7
Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGJvb2wgbV9w
bHVnaW5DYWNoZUlzUG9wdWxhdGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2hvdWxkUmVmcmVz
aFBsdWdpbnMgeyBmYWxzZSB9OwotICAgIFZlY3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZvPiBtX2Nh
Y2hlZFBsdWdpbnM7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+IG1fY2FjaGVkQXBw
bGljYXRpb25QbHVnaW5zOwotICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6OlN1cHBv
cnRlZFBsdWdpbklkZW50aWZpZXI+PiBtX2NhY2hlZFN1cHBvcnRlZFBsdWdpbklkZW50aWZpZXJz
OwotI2VuZGlmCiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4IGUzNzk2YmFiNjRi
YTRlZTIwNTY2MjIzZDc5ODNkY2E0ZmYwOTU4ZDYuLjBjOGRhNjY1NzcwYmQ0NzNhZWFhYmFiM2Yx
NmFmNjAxNjBiMjc1MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC02OTMsMjMgKzY5Myw4
IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpzaG91bGRVbmF2YWlsYWJsZVBsdWdpbk1lc3NhZ2VC
ZUJ1dHRvbihSZW5kZXJFbWJlZGRlZE9iamVjCiAgICAgCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6
dW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkKEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlckVt
YmVkZGVkT2JqZWN0OjpQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiBwbHVnaW5VbmF2YWlsYWJp
bGl0eVJlYXNvbikgY29uc3QKIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAg
ICBBU1NFUlQoZWxlbWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgZWxlbWVudC5oYXNUYWdO
YW1lKGVtYmVkVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoYXBwbGV0VGFnKSk7Ci0gICAgQVNT
RVJUKHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uID09IFJlbmRlckVtYmVkZGVkT2JqZWN0OjpQ
bHVnaW5NaXNzaW5nIHx8IHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uID09IFJlbmRlckVtYmVk
ZGVkT2JqZWN0OjpJbnNlY3VyZVBsdWdpblZlcnNpb24gfHwgcGx1Z2luVW5hdmFpbGFiaWxpdHlS
ZWFzb24pOwotCi0gICAgYXV0byYgcGx1Z2luRWxlbWVudCA9IGRvd25jYXN0PEhUTUxQbHVnSW5J
bWFnZUVsZW1lbnQ+KGVsZW1lbnQpOwotCi0gICAgU3RyaW5nIGZyYW1lVVJMU3RyaW5nID0gcGx1
Z2luRWxlbWVudC5kb2N1bWVudCgpLmZyYW1lKCktPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkt
PnJlc3BvbnNlVVJMKCkuc3RyaW5nKCk7Ci0gICAgU3RyaW5nIHBhZ2VVUkxTdHJpbmcgPSBtX3Bh
Z2UubWFpbkZyYW1lKCktPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNlVVJMKCku
c3RyaW5nKCk7Ci0gICAgU3RyaW5nIHBsdWdpblVSTFN0cmluZyA9IHBsdWdpbkVsZW1lbnQuZG9j
dW1lbnQoKS5jb21wbGV0ZVVSTChwbHVnaW5FbGVtZW50LnVybCgpKS5zdHJpbmcoKTsKLSAgICBV
UkwgcGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkwgPSBwbHVnaW5FbGVtZW50LmRvY3VtZW50KCkuY29t
cGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHBsdWdpbkVsZW1lbnQu
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihwbHVnaW5zcGFnZUF0dHIpKSk7Ci0gICAg
aWYgKCFwbHVnaW5zcGFnZUF0dHJpYnV0ZVVSTC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0g
ICAgICAgIHBsdWdpbnNwYWdlQXR0cmlidXRlVVJMID0gVVJMKCk7Ci0gICAgbV9wYWdlLnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6VW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkKHBs
dWdpblVuYXZhaWxhYmlsaXR5UmVhc29uLCBwbHVnaW5FbGVtZW50LnNlcnZpY2VUeXBlKCksIHBs
dWdpblVSTFN0cmluZywgcGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkwuc3RyaW5nKCksIGZyYW1lVVJM
U3RyaW5nLCBwYWdlVVJMU3RyaW5nKSk7Ci0jZWxzZQogICAgIFVOVVNFRF9QQVJBTShlbGVtZW50
KTsKICAgICBVTlVTRURfUEFSQU0ocGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pOwotI2VuZGlm
IC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogfQogCiB2b2lkIFdlYkNocm9tZUNsaWVu
dDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJl
c3VsdCwgdW5zaWduZWQgbW9kaWZpZXJGbGFncywgY29uc3QgU3RyaW5nJiB0b29sVGlwLCBUZXh0
RGlyZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAppbmRleCA2ZWMxODkx
YzI1ZTZlOGQ5ZWU2MjIzYmY2OGViOTE4MjJjMTEwOWVjLi5hMmJlZTZjZDgyYzZmMzY5MTI5MDM1
YTFjYWNlZDRlMTg0YWY4OWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcApA
QCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNs
dWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oIgotI2luY2x1ZGUgIlBsdWdpbklu
Zm9TdG9yZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlckNvcHkuaCIKICNpbmNsdWRlICJXZWJD
b3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJFcnJvcnMuaCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggNDdkYTFmODU0MzcwMWU2
MTJhZmUzYWY4MWEwYzYyN2FjNDBhYTlkOS4uMDg5MmVkNTUyYzkwYzE3MjQ2ZTJkNjFmZDAyMDZi
OTA4YWVjNmQ0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKQEAgLTQ5LDEzICs0OSwxMCBAQAogI2luY2x1ZGUgIk1lZGlhS2V5U3lzdGVtUGVybWlz
c2lvblJlcXVlc3RNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5YmFja1N0YXRlLmgiCiAj
aW5jbHVkZSAiTWVkaWFSZWNvcmRlclByb3ZpZGVyLmgiCi0jaW5jbHVkZSAiTmV0c2NhcGVQbHVn
aW4uaCIKICNpbmNsdWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiTm90aWZp
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiUGFnZUJhbm5lci5o
IgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiUGx1Z2lu
UHJveHkuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCiAjaW5jbHVkZSAiUHJpbnRJbmZvLmgi
CiAjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCkBAIC0xMTU3LDUzICsx
MTU0LDExIEBAIHZvaWQgV2ViUGFnZTo6aW5pdGlhbGl6ZUluamVjdGVkQnVuZGxlRnVsbFNjcmVl
bkNsaWVudChXS0J1bmRsZVBhZ2VGdWxsU2NyZWVuQ2xpCiAjaWYgRU5BQkxFKFBERktJVF9QTFVH
SU4pCiBSZWZQdHI8UGx1Z2luPiBXZWJQYWdlOjpjcmVhdGVQbHVnaW4oV2ViRnJhbWUqIGZyYW1l
LCBIVE1MUGx1Z0luRWxlbWVudCogcGx1Z2luRWxlbWVudCwgY29uc3QgUGx1Z2luOjpQYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzLCBTdHJpbmcmIG5ld01JTUVUeXBlKQogewotICAgIFN0cmluZyBmcmFt
ZVVSTFN0cmluZyA9IGZyYW1lLT5jb3JlRnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIo
KS0+cmVzcG9uc2VVUkwoKS5zdHJpbmcoKTsKLSAgICBTdHJpbmcgcGFnZVVSTFN0cmluZyA9IG1f
cGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9uc2VVUkwo
KS5zdHJpbmcoKTsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGJvb2wg
YWxsb3dPbmx5QXBwbGljYXRpb25QbHVnaW5zID0gIWZyYW1lLT5jb3JlRnJhbWUoKS0+YXJlUGx1
Z2luc0VuYWJsZWQoKTsKLSNlbmRpZgotCi0gICAgdWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2Vu
IHsgMCB9OwotICAgIHVpbnQzMl90IHBsdWdpbkxvYWRQb2xpY3kgeyAwIH07Ci0gICAgU3RyaW5n
IHVuYXZhaWxhYmlsaXR5RGVzY3JpcHRpb247Ci0gICAgYm9vbCBpc1Vuc3VwcG9ydGVkIHsgZmFs
c2UgfTsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBpZiAoIXNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkZpbmRQbHVnaW4ocGFyYW1ldGVycy5taW1lVHlwZSwg
cGFyYW1ldGVycy51cmwuc3RyaW5nKCksIGZyYW1lVVJMU3RyaW5nLCBwYWdlVVJMU3RyaW5nLCBh
bGxvd09ubHlBcHBsaWNhdGlvblBsdWdpbnMpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpGaW5k
UGx1Z2luOjpSZXBseShwbHVnaW5Qcm9jZXNzVG9rZW4sIG5ld01JTUVUeXBlLCBwbHVnaW5Mb2Fk
UG9saWN5LCB1bmF2YWlsYWJpbGl0eURlc2NyaXB0aW9uLCBpc1Vuc3VwcG9ydGVkKSkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotI2VuZGlmCi0KLSAgICBQbHVnaW5Nb2R1bGVMb2FkUG9saWN5
IGxvYWRQb2xpY3kgPSBzdGF0aWNfY2FzdDxQbHVnaW5Nb2R1bGVMb2FkUG9saWN5PihwbHVnaW5M
b2FkUG9saWN5KTsKLSAgICBib29sIGlzQmxvY2tlZFBsdWdpbiA9IChsb2FkUG9saWN5ID09IFBs
dWdpbk1vZHVsZUJsb2NrZWRGb3JTZWN1cml0eSkgfHwgKGxvYWRQb2xpY3kgPT0gUGx1Z2luTW9k
dWxlQmxvY2tlZEZvckNvbXBhdGliaWxpdHkpOwotCi0gICAgaWYgKGlzVW5zdXBwb3J0ZWQgfHwg
aXNCbG9ja2VkUGx1Z2luIHx8ICFwbHVnaW5Qcm9jZXNzVG9rZW4pIHsKLSNpZiBFTkFCTEUoUERG
S0lUX1BMVUdJTikKLSAgICAgICAgaWYgKHNob3VsZFVzZVBERlBsdWdpbihwYXJhbWV0ZXJzLm1p
bWVUeXBlLCBwYXJhbWV0ZXJzLnVybC5wYXRoKCkpKQotICAgICAgICAgICAgcmV0dXJuIFBERlBs
dWdpbjo6Y3JlYXRlKCpmcmFtZSwgcGx1Z2luRWxlbWVudCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAg
ICBpZiAoaXNVbnN1cHBvcnRlZCkgewotICAgICAgICBwbHVnaW5FbGVtZW50LT5zZXRSZXBsYWNl
bWVudChSZW5kZXJFbWJlZGRlZE9iamVjdDo6VW5zdXBwb3J0ZWRQbHVnaW4sIHVuYXZhaWxhYmls
aXR5RGVzY3JpcHRpb24pOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBpZiAoaXNCbG9ja2VkUGx1Z2luKSB7Ci0g
ICAgICAgIGJvb2wgaXNSZXBsYWNlbWVudE9ic2N1cmVkID0gcGx1Z2luRWxlbWVudC0+c2V0UmVw
bGFjZW1lbnQoUmVuZGVyRW1iZWRkZWRPYmplY3Q6Okluc2VjdXJlUGx1Z2luVmVyc2lvbiwgdW5h
dmFpbGFiaWxpdHlEZXNjcmlwdGlvbik7Ci0gICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RGlkQmxvY2tJbnNlY3VyZVBsdWdpblZlcnNpb24ocGFyYW1ldGVycy5taW1lVHlwZSwg
cGFyYW1ldGVycy51cmwuc3RyaW5nKCksIGZyYW1lVVJMU3RyaW5nLCBwYWdlVVJMU3RyaW5nLCBp
c1JlcGxhY2VtZW50T2JzY3VyZWQpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
Ci0gICAgaWYgKCFwbHVnaW5Qcm9jZXNzVG9rZW4pCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgcmV0dXJuIFBsdWdpblByb3h5OjpjcmVhdGUocGx1Z2luUHJvY2Vzc1Rva2VuKTsKLSNl
bHNlCisgICAgaWYgKHNob3VsZFVzZVBERlBsdWdpbihwYXJhbWV0ZXJzLm1pbWVUeXBlLCBwYXJh
bWV0ZXJzLnVybC5wYXRoKCkpKQorICAgICAgICByZXR1cm4gUERGUGx1Z2luOjpjcmVhdGUoKmZy
YW1lLCBwbHVnaW5FbGVtZW50KTsKICAgICByZXR1cm4gbnVsbHB0cjsKLSNlbmRpZgogfQotI2Vu
ZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorI2VuZGlmIC8vIEVOQUJMRShQREZL
SVRfUExVR0lOKQogCiAjaWYgRU5BQkxFKFdFQkdMKSAmJiAhUExBVEZPUk0oTUFDKQogV2ViQ29y
ZTo6V2ViR0xMb2FkUG9saWN5IFdlYlBhZ2U6OndlYkdMUG9saWN5Rm9yVVJMKFdlYkZyYW1lKiwg
Y29uc3QgVVJMJikKQEAgLTU3ODcsMjQgKzU3NDIsOCBAQCBGcmFtZVZpZXcqIFdlYlBhZ2U6Om1h
aW5GcmFtZVZpZXcoKSBjb25zdAogCiBib29sIFdlYlBhZ2U6OmNhblBsdWdpbkhhbmRsZVJlc3Bv
bnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotICAgIHVpbnQzMl90IHBsdWdpbkxvYWRQb2xpY3k7Ci0gICAgYm9v
bCBhbGxvd09ubHlBcHBsaWNhdGlvblBsdWdpbnMgPSAhbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgp
LT5hcmVQbHVnaW5zRW5hYmxlZCgpOwotCi0gICAgdWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2Vu
OwotICAgIFN0cmluZyBuZXdNSU1FVHlwZTsKLSAgICBTdHJpbmcgdW5hdmFpbGFiaWxpdHlEZXNj
cmlwdGlvbjsKLSAgICBib29sIGlzVW5zdXBwb3J0ZWQgPSBmYWxzZTsKLSAgICBpZiAoIXNlbmRT
eW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkZpbmRQbHVnaW4ocmVzcG9uc2UubWltZVR5cGUo
KSwgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCksIHJlc3BvbnNlLnVybCgpLnN0cmluZygpLCByZXNw
b25zZS51cmwoKS5zdHJpbmcoKSwgYWxsb3dPbmx5QXBwbGljYXRpb25QbHVnaW5zKSwgTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6RmluZFBsdWdpbjo6UmVwbHkocGx1Z2luUHJvY2Vzc1Rva2VuLCBu
ZXdNSU1FVHlwZSwgcGx1Z2luTG9hZFBvbGljeSwgdW5hdmFpbGFiaWxpdHlEZXNjcmlwdGlvbiwg
aXNVbnN1cHBvcnRlZCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQoIWlz
VW5zdXBwb3J0ZWQpOwotICAgIGJvb2wgaXNCbG9ja2VkUGx1Z2luID0gKHBsdWdpbkxvYWRQb2xp
Y3kgPT0gUGx1Z2luTW9kdWxlQmxvY2tlZEZvclNlY3VyaXR5KSB8fCAocGx1Z2luTG9hZFBvbGlj
eSA9PSBQbHVnaW5Nb2R1bGVCbG9ja2VkRm9yQ29tcGF0aWJpbGl0eSk7Ci0gICAgcmV0dXJuICFp
c1Vuc3VwcG9ydGVkICYmICFpc0Jsb2NrZWRQbHVnaW4gJiYgcGx1Z2luUHJvY2Vzc1Rva2VuOwot
I2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocmVzcG9uc2UpOwogICAgIHJldHVybiBmYWxzZTsKLSNl
bmRpZgogfQogCiBib29sIFdlYlBhZ2U6OnNob3VsZFVzZUN1c3RvbUNvbnRlbnRQcm92aWRlckZv
clJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IGI0ODAyZWNiOTM3MDIzZTBlMzNhMjQzNWU4
YWFmMGZjMTI1YjA1OTguLmQ4NjI5ZTg3MjkxNGYwNzgxYzZjNDEyYzcyNTQ5YTI4YmJhZTcwZDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKQEAgLTQzLDcgKzQzLDYg
QEAKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCiAjaW5jbHVkZSAi
TmV0d29ya1Nlc3Npb24uaCIKICNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1l
dGVycy5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5oIgogI2lu
Y2x1ZGUgIlByb2Nlc3NBc3NlcnRpb24uaCIKICNpbmNsdWRlICJSZW1vdGVBdWRpb0hhcmR3YXJl
TGlzdGVuZXIuaCIKICNpbmNsdWRlICJSZW1vdGVBdWRpb1Nlc3Npb24uaCIKQEAgLTI4Miw5ICsy
ODEsNiBAQCBXZWJQcm9jZXNzOjpXZWJQcm9jZXNzKCkKICAgICAsIG1fY29va2llSmFyKFdlYkNv
b2tpZUphcjo6Y3JlYXRlKCkpCiAgICAgLCBtX3JlcG9ydGluZ0VuZHBvaW50c0NhY2hlKFJlcG9y
dGluZ0VuZHBvaW50c0NhY2hlOjpjcmVhdGUoKSkKICAgICAsIG1fZG5zUHJlZmV0Y2hIeXN0ZXJl
cmlzKFt0aGlzXShQQUw6Okh5c3RlcmVzaXNTdGF0ZSBzdGF0ZSkgeyBpZiAoc3RhdGUgPT0gUEFM
OjpIeXN0ZXJlc2lzU3RhdGU6OlN0b3BwZWQpIG1fZG5zUHJlZmV0Y2hlZEhvc3RzLmNsZWFyKCk7
IH0pCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgLCBtX3BsdWdpblByb2Nl
c3NDb25uZWN0aW9uTWFuYWdlcihQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXI6OmNyZWF0
ZSgpKQotI2VuZGlmCiAgICAgLCBtX25vblZpc2libGVQcm9jZXNzR3JhcGhpY3NDbGVhbnVwVGlt
ZXIoKnRoaXMsICZXZWJQcm9jZXNzOjpub25WaXNpYmxlUHJvY2Vzc0dyYXBoaWNzQ2xlYW51cFRp
bWVyRmlyZWQpCiAjaWYgRU5BQkxFKE5PTl9WSVNJQkxFX1dFQlBST0NFU1NfTUVNT1JZX0NMRUFO
VVBfVElNRVIpCiAgICAgLCBtX25vblZpc2libGVQcm9jZXNzTWVtb3J5Q2xlYW51cFRpbWVyKCp0
aGlzLCAmV2ViUHJvY2Vzczo6bm9uVmlzaWJsZVByb2Nlc3NNZW1vcnlDbGVhbnVwVGltZXJGaXJl
ZCkKQEAgLTM3NCwxMCArMzcwLDYgQEAgdm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplQ29ubmVj
dGlvbihJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCiAKICAgICBtX3dlYkluc3BlY3Rvcklu
dGVycnVwdERpc3BhdGNoZXItPmluaXRpYWxpemVDb25uZWN0aW9uKGNvbm5lY3Rpb24pOwogCi0j
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgbV9wbHVnaW5Qcm9jZXNzQ29ubmVj
dGlvbk1hbmFnZXItPmluaXRpYWxpemVDb25uZWN0aW9uKGNvbm5lY3Rpb24pOwotI2VuZGlmCi0K
ICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAg
ICAgICBzdXBwbGVtZW50LT5pbml0aWFsaXplQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKIApAQCAt
NzUxLDEzICs3NDMsNiBAQCB2b2lkIFdlYlByb2Nlc3M6OmZ1bGxLZXlib2FyZEFjY2Vzc01vZGVD
aGFuZ2VkKGJvb2wgZnVsbEtleWJvYXJkQWNjZXNzRW5hYmxlZCkKICAgICBtX2Z1bGxLZXlib2Fy
ZEFjY2Vzc0VuYWJsZWQgPSBmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGVkOwogfQogCi0jaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi1QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIm
IFdlYlByb2Nlc3M6OnBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcigpCi17Ci0gICAgcmV0
dXJuICptX3BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcjsKLX0KLSNlbmRpZgotCiB2b2lk
IFdlYlByb2Nlc3M6OnNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogewogICAg
IGlmIChtX2hhc1NldENhY2hlTW9kZWwgJiYgKGNhY2hlTW9kZWwgPT0gbV9jYWNoZU1vZGVsKSkK
QEAgLTk5MCw5ICs5NzUsNiBAQCB2b2lkIFdlYlByb2Nlc3M6OmlzSklURW5hYmxlZChDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogCiB2b2lkIFdlYlBy
b2Nlc3M6OnJlZnJlc2hQbHVnaW5zKCkKIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKLSAgICBXZWJQbHVnaW5JbmZvUHJvdmlkZXI6OnNpbmdsZXRvbigpLnJlZnJlc2goZmFsc2Up
OwotI2VuZGlmCiB9CiAKIHZvaWQgV2ViUHJvY2Vzczo6Z2FyYmFnZUNvbGxlY3RKYXZhU2NyaXB0
T2JqZWN0cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAppbmRleCAxZTg0ZThk
ZmYzMzljZGVhMjMyMDI0MWNiYTY1NmEzYTZmMmM3OGNlLi4yMzUzNDI1MjZlZjdhNzYxMGNiMjcy
MzIwYjRkNjM4NjRkZWUwNjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgK
QEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJBdXhpbGlhcnlQcm9jZXNzLmgiCiAjaW5jbHVk
ZSAiQ2FjaGVNb2RlbC5oIgogI2luY2x1ZGUgIklkZW50aWZpZXJUeXBlcy5oIgotI2luY2x1ZGUg
IlBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRl
bnNpb24uaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJU
ZXh0Q2hlY2tlclN0YXRlLmgiCkBAIC0yMzksMTAgKzIzOCw2IEBAIHB1YmxpYzoKICAgICAKICAg
ICBjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiB0ZXh0Q2hlY2tlclN0YXRlKCkgY29uc3QgeyByZXR1
cm4gbV90ZXh0Q2hlY2tlclN0YXRlOyB9CiAgICAgdm9pZCBzZXRUZXh0Q2hlY2tlclN0YXRlKGNv
bnN0IFRleHRDaGVja2VyU3RhdGUmKTsKLSAgICAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLSAgICBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXImIHBsdWdpblByb2Nlc3ND
b25uZWN0aW9uTWFuYWdlcigpOwotI2VuZGlmCiAKICAgICBFdmVudERpc3BhdGNoZXImIGV2ZW50
RGlzcGF0Y2hlcigpIHsgcmV0dXJuIG1fZXZlbnREaXNwYXRjaGVyLmdldCgpOyB9CiAKQEAgLTY5
MCwxMCArNjg1LDYgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJBdXRvbWF0
aW9uU2Vzc2lvblByb3h5PiBtX2F1dG9tYXRpb25TZXNzaW9uUHJveHk7CiAKLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBSZWZQdHI8UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25N
YW5hZ2VyPiBtX3BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcjsKLSNlbmRpZgotCiAjaWYg
RU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCiAgICAgYm9vbCBtX2hhc0ltYWdlU2VydmljZXMgeyBm
YWxzZSB9OwogICAgIGJvb2wgbV9oYXNTZWxlY3Rpb25TZXJ2aWNlcyB7IGZhbHNlIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9NaWdyYXRlSGVhZGVyc0Zyb21XZWJLaXRMZWdhY3ku
bWFrZSBiL1NvdXJjZS9XZWJLaXQvbWFjL01pZ3JhdGVIZWFkZXJzRnJvbVdlYktpdExlZ2FjeS5t
YWtlCmluZGV4IGJmNzFkNzc3MzY2N2UxOGQ3ODViOTY2NTdkMzEyMDMzODRlNmEwNDcuLmY2Nzg0
NDU5ZGYxNzgzZjYxNGIyZGVhYzkxNGUxNmVmYjEzYTViZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvbWFjL01pZ3JhdGVIZWFkZXJzRnJvbVdlYktpdExlZ2FjeS5tYWtlCisrKyBiL1NvdXJj
ZS9XZWJLaXQvbWFjL01pZ3JhdGVIZWFkZXJzRnJvbVdlYktpdExlZ2FjeS5tYWtlCkBAIC0xOTUs
MTAgKzE5NSw2IEBAIFdFQktJVF9QVUJMSUNfSEVBREVSUyA9IFwKICAgICBXZWJTY3JpcHRPYmpl
Y3QuaCBcCiAgICAgV2ViVUlEZWxlZ2F0ZS5oIFwKICAgICBXZWJWaWV3LmggXAotICAgIG5wYXBp
LmggXAotICAgIG5wZnVuY3Rpb25zLmggXAotICAgIG5wcnVudGltZS5oIFwKLSAgICBucHR5cGVz
LmggXAogIwogCiBXRUJLSVRfTEVHQUNZX1BVQkxJQ19IRUFERVJTID0gJChhZGRwcmVmaXggJChQ
VUJMSUNfSEVBREVSU19ESVIpLywgJChmaWx0ZXIgJChXRUJLSVRfUFVCTElDX0hFQURFUlMpLCAk
KG5vdGRpciAkKHdpbGRjYXJkICQoV0VCS0lUX0xFR0FDWV9QUklWQVRFX0hFQURFUlNfRElSKS8q
LmgpKSkgV2ViS2l0TGVnYWN5LmgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1Bs
YXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYktpdExlZ2FjeS9QbGF0Zm9ybU1hYy5jbWFrZQpp
bmRleCBiNTNlNjIyZGM2ZjMzN2NjNzQzODZmNjY2YWNjZTM3Mjc0ZGZmZmIwLi4zMDBiMDBiNDUx
NGQzNTY5MjExM2U3ZjIyMTZhYmYxMDFmNjJmNGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvUGxhdGZv
cm1NYWMuY21ha2UKQEAgLTc1LDI5ICs3NSw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdExlZ2FjeV9T
T1VSQ0VTCiAgICAgbWFjL1BhbmVscy9XZWJBdXRoZW50aWNhdGlvblBhbmVsLm0KICAgICBtYWMv
UGFuZWxzL1dlYlBhbmVsQXV0aGVudGljYXRpb25IYW5kbGVyLm0KIAotICAgIG1hYy9QbHVnaW5z
L1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0KLSAgICBtYWMvUGx1Z2lucy9XZWJOZXRzY2Fw
ZVBsdWdpbkV2ZW50SGFuZGxlci5tbQotICAgIG1hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2lu
RXZlbnRIYW5kbGVyQ29jb2EubW0KLSAgICBtYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblBh
Y2thZ2UubW0KLSAgICBtYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQotICAg
IG1hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQogICAgIG1hYy9QbHVnaW5zL1dl
YlBsdWdpblBhY2thZ2UubW0KLSAgICBtYWMvUGx1Z2lucy9XZWJQbHVnaW5SZXF1ZXN0Lm0KLSAg
ICBtYWMvUGx1Z2lucy9ucGFwaS5tbQotCi0gICAgbWFjL1BsdWdpbnMvSG9zdGVkL0hvc3RlZE5l
dHNjYXBlUGx1Z2luU3RyZWFtLm1tCi0gICAgbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1
Z2luSG9zdE1hbmFnZXIubW0KLSAgICBtYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5I
b3N0UHJveHkubW0KLSAgICBtYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5Lm1tCi0gICAgbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0KLSAgICBt
YWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlSdW50aW1lT2JqZWN0Lm1tCi0gICAgbWFjL1BsdWdpbnMv
SG9zdGVkL1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbQotICAgIG1hYy9QbHVnaW5zL0hv
c3RlZC9XZWJLaXRQbHVnaW5BZ2VudC5kZWZzCi0gICAgbWFjL1BsdWdpbnMvSG9zdGVkL1dlYktp
dFBsdWdpbkFnZW50UmVwbHkuZGVmcwotICAgIG1hYy9QbHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVn
aW5DbGllbnQuZGVmcwotICAgIG1hYy9QbHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5Ib3N0LmRl
ZnMKLSAgICBtYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luSG9zdFR5cGVzLmRlZnMKLSAg
ICBtYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlci5tCiAKICAg
ICBtYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXIubW0KICAgICBtYWMvU3RvcmFnZS9XZWJE
YXRhYmFzZU1hbmFnZXJDbGllbnQubW0KQEAgLTQ0NSwzMSArNDIzLDE1IEBAIHNldChXZWJLaXRM
ZWdhY3lfTEVHQUNZX0ZPUldBUkRJTkdfSEVBREVSU19GSUxFUwogCiAgICAgbWFjL1BsdWdpbnMv
V2ViUGx1Z2luVmlld0ZhY3RvcnlQcml2YXRlLmgKICAgICBtYWMvUGx1Z2lucy9XZWJCYXNlUGx1
Z2luUGFja2FnZS5oCi0gICAgbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3LmgKLSAg
ICBtYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hLmgKLSAgICBt
YWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5oCi0gICAgbWFjL1BsdWdpbnMvV2Vi
QmFzZU5ldHNjYXBlUGx1Z2luVmlldy5oCiAgICAgbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJv
bGxlci5oCi0gICAgbWFjL1BsdWdpbnMvSG9zdGVkL1dlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xs
ZXIuaAotICAgIG1hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5oCi0g
ICAgbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5UnVudGltZU9iamVjdC5oCi0gICAgbWFjL1BsdWdp
bnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UuaAotICAgIG1hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2Fw
ZVBsdWdpbkhvc3RNYW5hZ2VyLmgKLSAgICBtYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2lu
SG9zdFR5cGVzLmgKLSAgICBtYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2NhcGVQbHVn
aW5WaWV3LmgKLSAgICBtYWMvUGx1Z2lucy9Ib3N0ZWQvSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJl
YW0uaAotICAgIG1hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHku
aAogICAgIG1hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRhaW5lckNoZWNrLmgKICAgICBtYWMvUGx1
Z2lucy9XZWJQbHVnaW5Db250YWluZXIuaAogICAgIG1hYy9QbHVnaW5zL1dlYlBsdWdpblBhY2th
Z2VQcml2YXRlLmgKICAgICBtYWMvUGx1Z2lucy9XZWJQbHVnaW5QYWNrYWdlLmgKLSAgICBtYWMv
UGx1Z2lucy9XZWJQbHVnaW5SZXF1ZXN0LmgKLSAgICBtYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBs
dWdpbkV2ZW50SGFuZGxlci5oCiAgICAgbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udGFpbmVyUHJp
dmF0ZS5oCiAgICAgbWFjL1BsdWdpbnMvV2ViSmF2YVBsdWdJbi5oCiAgICAgbWFjL1BsdWdpbnMv
V2ViUGx1Z2luVmlld0ZhY3RvcnkuaAogICAgIG1hYy9QbHVnaW5zL1dlYlBsdWdpbkRhdGFiYXNl
LmgKLSAgICBtYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UuaAogICAgIG1hYy9Q
bHVnaW5zL1dlYlBsdWdpbi5oCiAKICAgICBtYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXJQ
cml2YXRlLmgKQEAgLTYyMSw3ICs1ODMsNiBAQCBzZXQoQzk5X0ZJTEVTCiAgICAgbWFjL01pc2Mv
V2ViTlNWaWV3RXh0cmFzLm0KICAgICBtYWMvTWlzYy9XZWJOU1dpbmRvd0V4dHJhcy5tCiAKLSAg
ICBtYWMvUGx1Z2lucy9XZWJQbHVnaW5SZXF1ZXN0Lm0KICAgICBtYWMvUGx1Z2lucy9XZWJQbHVn
aW5zUHJpdmF0ZS5tCiAKICAgICBtYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViVGV4dElucHV0V2luZG93
Q29udHJvbGxlci5tCkBAIC02NTMsNDYgKzYxNCw2IEBAIGZvcmVhY2ggKF9maWxlICR7V2ViS2l0
TGVnYWN5X0xFR0FDWV9GT1JXQVJESU5HX0hFQURFUlNfRklMRVN9KQogICAgIGVuZGlmICgpCiBl
bmRmb3JlYWNoICgpCiAKLWlmIChOT1QgRVhJU1RTICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09V
UkNFU19ESVJ9L1dlYktpdExlZ2FjeS9XZWJLaXRQbHVnaW5Ib3N0VHlwZXMuaCkKLSAgICBmaWxl
KENPUFkKLSAgICAgICAgbWFjL1BsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkFnZW50LmRlZnMK
LSAgICAgICAgbWFjL1BsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkFnZW50UmVwbHkuZGVmcwot
ICAgICAgICBtYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luQ2xpZW50LmRlZnMKLSAgICAg
ICAgbWFjL1BsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkhvc3QuZGVmcwotICAgICAgICBERVNU
SU5BVElPTiAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfSkKLSAgICBmaWxlKE1B
S0VfRElSRUNUT1JZICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L1dlYktpdExl
Z2FjeSkKLSAgICBmaWxlKENPUFkKLSAgICAgICAgbWFjL1BsdWdpbnMvSG9zdGVkL1dlYktpdFBs
dWdpbkhvc3RUeXBlcy5kZWZzCi0gICAgICAgIG1hYy9QbHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVn
aW5Ib3N0VHlwZXMuaAotICAgICAgICBERVNUSU5BVElPTiAke1dlYktpdExlZ2FjeV9ERVJJVkVE
X1NPVVJDRVNfRElSfS9XZWJLaXRMZWdhY3kpCi1lbmRpZiAoKQotCi1hZGRfY3VzdG9tX2NvbW1h
bmQoCi0gICAgT1VUUFVUCi0gICAgICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19E
SVJ9L1dlYktpdFBsdWdpbkFnZW50UmVwbHlTZXJ2ZXIuYwotICAgICAgICAke1dlYktpdExlZ2Fj
eV9ERVJJVkVEX1NPVVJDRVNfRElSfS9XZWJLaXRQbHVnaW5BZ2VudFJlcGx5VXNlci5jCi0gICAg
ICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L1dlYktpdFBsdWdpbkFnZW50
U2VydmVyLmMKLSAgICAgICAgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV2Vi
S2l0UGx1Z2luQWdlbnRVc2VyLmMKLSAgICAgICAgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VS
Q0VTX0RJUn0vV2ViS2l0UGx1Z2luSG9zdFNlcnZlci5jCi0gICAgICAgICR7V2ViS2l0TGVnYWN5
X0RFUklWRURfU09VUkNFU19ESVJ9L1dlYktpdFBsdWdpbkhvc3RVc2VyLmMKLSAgICBERVBFTkRT
IG1hYy9QbHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5BZ2VudC5kZWZzIG1hYy9QbHVnaW5zL0hv
c3RlZC9XZWJLaXRQbHVnaW5Ib3N0LmRlZnMKLSAgICBXT1JLSU5HX0RJUkVDVE9SWSAke1dlYktp
dExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfQotICAgIENPTU1BTkQgbWlnIC1JLi4gV2ViS2l0
UGx1Z2luQWdlbnQuZGVmcyBXZWJLaXRQbHVnaW5BZ2VudFJlcGx5LmRlZnMgV2ViS2l0UGx1Z2lu
SG9zdC5kZWZzCi0gICAgVkVSQkFUSU0pCi1hZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAgT1VUUFVU
Ci0gICAgICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L1dlYktpdFBsdWdp
bkNsaWVudFNlcnZlci5jCi0gICAgICAgICR7V2ViS2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19E
SVJ9L1dlYktpdFBsdWdpbkNsaWVudFVzZXIuYwotICAgIERFUEVORFMgbWFjL1BsdWdpbnMvSG9z
dGVkL1dlYktpdFBsdWdpbkNsaWVudC5kZWZzCi0gICAgV09SS0lOR19ESVJFQ1RPUlkgJHtXZWJL
aXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0KLSAgICBDT01NQU5EIG1pZyAtSS4uIC1zaGVh
ZGVyIFdlYktpdFBsdWdpbkNsaWVudFNlcnZlci5oIFdlYktpdFBsdWdpbkNsaWVudC5kZWZzCi0g
ICAgVkVSQkFUSU0pCi1saXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfU09VUkNFUwotICAgICR7V2Vi
S2l0TGVnYWN5X0RFUklWRURfU09VUkNFU19ESVJ9L1dlYktpdFBsdWdpbkFnZW50VXNlci5jCi0g
ICAgJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV2ViS2l0UGx1Z2luQ2xpZW50
U2VydmVyLmMKLSAgICAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9XZWJLaXRQ
bHVnaW5Ib3N0VXNlci5jCi0pCi0KIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICBPVVRQVVQgJHtX
ZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV2ViVmlld1ByZWZlcmVuY2VzQ2hhbmdl
ZEdlbmVyYXRlZC5tbSAke1dlYktpdExlZ2FjeV9ERVJJVkVEX1NPVVJDRVNfRElSfS9XZWJQcmVm
ZXJlbmNlc0ludGVybmFsRmVhdHVyZXMubW0gJHtXZWJLaXRMZWdhY3lfREVSSVZFRF9TT1VSQ0VT
X0RJUn0vV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWxGZWF0dXJlcy5tbSAke1dlYktpdExlZ2Fj
eV9ERVJJVkVEX1NPVVJDRVNfRElSfS9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmgKICAgICBE
RVBFTkRTICR7V2ViS2l0X1dFQl9QUkVGRVJFTkNFU19URU1QTEFURVN9ICR7V2ViS2l0X1dFQl9Q
UkVGRVJFTkNFU30gV1RGX0NvcHlQcmVmZXJlbmNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9XZWJLaXRMZWdhY3kueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvV2ViS2l0TGVnYWN5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
ZmUzYmUwYTc5MzY2ODdjYzk0MmU2YzVjMTkwMzZlNDIwM2RlZWUxMy4uZGRjNWViYmJmNWRhYzM4
NWY4N2U2ZjMwYzhmODA4OWVkNGVmZmNkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9XZWJLaXRMZWdhY3kueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L1dlYktpdExlZ2FjeS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00NCwx
MiArNDQsNiBAQAogCQkxNEQ4MjUzMDBBRjk1NTA5MDAwNEYwNTcgLyogV2ViQ2hyb21lQ2xpZW50
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREODI1
MkUwQUY5NTUwOTAwMDRGMDU3IC8qIFdlYkNocm9tZUNsaWVudC5tbSAqLzsgfTsKIAkJMUEwOEZF
RTAxRDU5Mzc2RTAwOEJBOENCIC8qIFdlYlBsdWdpbkluZm9Qcm92aWRlci5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMDhGRURFMUQ1OTM3NkUwMDhC
QThDQiAvKiBXZWJQbHVnaW5JbmZvUHJvdmlkZXIubW0gKi87IH07CiAJCTFBMDhGRUUxMUQ1OTM3
NkUwMDhCQThDQiAvKiBXZWJQbHVnaW5JbmZvUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMDhGRURGMUQ1OTM3NkUwMDhCQThDQiAvKiBX
ZWJQbHVnaW5JbmZvUHJvdmlkZXIuaCAqLzsgfTsKLQkJMUEyREJFOUYwRjI1MUUzQTAwMzZGOEE2
IC8qIFByb3h5SW5zdGFuY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBMkRCRTlEMEYyNTFFM0EwMDM2RjhBNiAvKiBQcm94eUluc3RhbmNlLmggKi87
IH07Ci0JCTFBMkRCRUEwMEYyNTFFM0EwMDM2RjhBNiAvKiBQcm94eUluc3RhbmNlLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyREJFOUUwRjI1MUUz
QTAwMzZGOEE2IC8qIFByb3h5SW5zdGFuY2UubW0gKi87IH07Ci0JCTFBNERGNTIyMEVDOEM3NEQw
MDZCRDRCNCAvKiBXZWJOZXRzY2FwZVBsdWdpblZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNERGNTIwMEVDOEM3NEQwMDZCRDRCNCAvKiBXZWJO
ZXRzY2FwZVBsdWdpblZpZXcuaCAqLzsgfTsKLQkJMUE0REY1MjMwRUM4Qzc0RDAwNkJENEI0IC8q
IFdlYk5ldHNjYXBlUGx1Z2luVmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBNERGNTIxMEVDOEM3NEQwMDZCRDRCNCAvKiBXZWJOZXRzY2FwZVBs
dWdpblZpZXcubW0gKi87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1Xbm8tZGVwcmVj
YXRlZC1kZWNsYXJhdGlvbnMiOyB9OyB9OwotCQkxQTRERjVFNDBFQzhEMTA0MDA2QkQ0QjQgLyog
V2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUE0REY1RTIwRUM4RDEwNDAwNkJENEI0IC8qIFdlYkJhc2VOZXRz
Y2FwZVBsdWdpblZpZXcuaCAqLzsgfTsKLQkJMUE0REY1RTUwRUM4RDEwNDAwNkJENEI0IC8qIFdl
YkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQTRERjVFMzBFQzhEMTA0MDA2QkQ0QjQgLyogV2ViQmFzZU5ldHNj
YXBlUGx1Z2luVmlldy5tbSAqLzsgfTsKIAkJMUE1OTFENDUxQTJFOTFCQjAwMDkwN0M0IC8qIFdl
YlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU5MUQ0MzFBMkU5MUJCMDAwOTA3QzQgLyogV2ViU3RvcmFn
ZU5hbWVzcGFjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMUE1OTFENDYxQTJFOTFCQjAwMDkwN0M0
IC8qIFdlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1OTFENDQxQTJFOTFCQjAwMDkwN0M0IC8qIFdlYlN0
b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oICovOyB9OwogCQkxQTYwNTE5MTE3NTAyQTVEMDBCQzYy
RjUgLyogQmluYXJ5UHJvcGVydHlMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBNjA1MThEMTc1MDJBNUQwMEJDNjJGNSAvKiBCaW5hcnlQcm9w
ZXJ0eUxpc3QuY3BwICovOyB9OwpAQCAtNzEsMzkgKzY1LDE3IEBACiAJCTFBNkIzMTNCMUE1MUYz
QTkwMDQyMjk3NSAvKiBTdG9yYWdlVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTZCMzEyRTFBNTFGM0E5MDA0MjI5NzUgLyogU3RvcmFn
ZVRyYWNrZXIuY3BwICovOyB9OwogCQkxQTZCMzEzQzFBNTFGM0E5MDA0MjI5NzUgLyogU3RvcmFn
ZVRyYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBNkIzMTJGMUE1MUYzQTkwMDQyMjk3NSAvKiBTdG9yYWdlVHJhY2tlci5oICovOyB9OwogCQkx
QTZCMzEzRDFBNTFGM0E5MDA0MjI5NzUgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNkIzMTMwMUE1MUYzQTkw
MDQyMjk3NSAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5oICovOyB9OwotCQkxQTc0QTI4RTBGNEY3
NTQwMDA4MkUyMjggLyogV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NEEyOEMwRjRGNzU0MDAwODJF
MjI4IC8qIFdlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaCAqLzsgfTsKLQkJMUE3NEEyOEYw
RjRGNzU0MDAwODJFMjI4IC8qIFdlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIubSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzRBMjhEMEY0Rjc1NDAw
MDgyRTIyOCAvKiBXZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLm0gKi87IH07Ci0JCTFBNzdC
MDJFMEVFNzczMDUwMEM4QTFGOSAvKiBXZWJQbHVnaW5SZXF1ZXN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc3QjAyQzBFRTc3MzA1MDBDOEExRjkg
LyogV2ViUGx1Z2luUmVxdWVzdC5oICovOyB9OwotCQkxQTc3QjAyRjBFRTc3MzA1MDBDOEExRjkg
LyogV2ViUGx1Z2luUmVxdWVzdC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUE3N0IwMkQwRUU3NzMwNTAwQzhBMUY5IC8qIFdlYlBsdWdpblJlcXVlc3Qu
bSAqLzsgfTsKIAkJMUE4NkNDRDQxQUQ0OEE2MjAwNzRCQTg5IC8qIFdlYkFwcGxpY2F0aW9uQ2Fj
aGVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUE4NkNDRDMxQUQ0OEE2MjAwNzRCQTg5IC8qIFdlYkFwcGxpY2F0aW9uQ2FjaGVJbnRlcm5h
bC5oICovOyB9OwotCQkxQThERUQ1MDBFRTg4QjhBMDBGMjUwMjIgLyogSG9zdGVkTmV0c2NhcGVQ
bHVnaW5TdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBOERFRDRFMEVFODhCOEEwMEYyNTAyMiAvKiBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVh
bS5oICovOyB9OwotCQkxQThERUQ1MTBFRTg4QjhBMDBGMjUwMjIgLyogSG9zdGVkTmV0c2NhcGVQ
bHVnaW5TdHJlYW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQThERUQ0RjBFRTg4QjhBMDBGMjUwMjIgLyogSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJl
YW0ubW0gKi87IH07CiAJCTFBOTExOUY2MURCMDQ3MEEwMDg3RDFGRCAvKiBCYWNrRm9yd2FyZExp
c3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkx
MTlGNDFEQjA0NzBBMDA4N0QxRkQgLyogQmFja0ZvcndhcmRMaXN0Lm1tICovOyB9OwogCQkxQTkx
MTlGNzFEQjA0NzBBMDA4N0QxRkQgLyogQmFja0ZvcndhcmRMaXN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkxMTlGNTFEQjA0NzBBMDA4N0QxRkQg
LyogQmFja0ZvcndhcmRMaXN0LmggKi87IH07CiAJCTFBQTgzRjgzMUE1QzRBRTQwMDAyNkVDNiAv
KiBXZWJEYXRhYmFzZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBQTgzRjgxMUE1QzRBRTQwMDAyNkVDNiAvKiBXZWJEYXRhYmFzZVBy
b3ZpZGVyLmNwcCAqLzsgfTsKIAkJMUFBODNGODQxQTVDNEFFNDAwMDI2RUM2IC8qIFdlYkRhdGFi
YXNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBQTgzRjgyMUE1QzRBRTQwMDAyNkVDNiAvKiBXZWJEYXRhYmFzZVByb3ZpZGVyLmggKi87
IH07CiAJCTFBQTg3OUI2MTFDQkU5QkYwMDNDNjY0RiAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTg3OUI0
MTFDQkU5QkYwMDNDNjY0RiAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCAqLzsgfTsKIAkJMUFB
ODc5QjcxMUNCRTlCRjAwM0M2NjRGIC8qIFdlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTg3OUI1MTFDQkU5QkYw
MDNDNjY0RiAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0gKi87IH07Ci0JCTFBQUY1Q0VBMEVE
REUxRkUwMDhEODgzRCAvKiBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUFGNUNFNDBFRERFMUZFMDA4RDg4
M0QgLyogTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5oICovOyB9OwotCQkxQUFGNUNFQjBFRERF
MUZFMDA4RDg4M0QgLyogTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUY1Q0U1MEVEREUxRkUwMDhEODgz
RCAvKiBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tICovOyB9OwotCQkxQUFGNUNFQzBFRERF
MUZFMDA4RDg4M0QgLyogTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUY1Q0U2MEVEREUxRkUwMDhEODgzRCAv
KiBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5oICovOyB9OwotCQkxQUFGNUNFRDBFRERFMUZFMDA4
RDg4M0QgLyogTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUFGNUNFNzBFRERFMUZFMDA4RDg4M0QgLyogTmV0
c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0gKi87IH07Ci0JCTFBQUY1Q0VFMEVEREUxRkUwMDhEODgz
RCAvKiBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUY1Q0U4MEVEREUxRkUwMDhEODgzRCAvKiBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHkuaCAqLzsgfTsKLQkJMUFBRjVDRUYwRURERTFGRTAwOEQ4
ODNEIC8qIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUY1Q0U5MEVEREUxRkUwMDhEODgzRCAvKiBO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0gKi87IH07Ci0JCTFBQUY1Q0YxMEVEREU1ODYw
MDhEODgzRCAvKiBXZWJLaXRQbHVnaW5Ib3N0LmRlZnMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUFGNTg4RDBFRENDRUEzMDA4RDg4M0QgLyogV2ViS2l0
UGx1Z2luSG9zdC5kZWZzICovOyB9OwotCQkxQUFGNUQwMDBFRERFNjA0MDA4RDg4M0QgLyogV2Vi
S2l0UGx1Z2luQ2xpZW50LmRlZnMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQUFGNTg4QzBFRENDRUEzMDA4RDg4M0QgLyogV2ViS2l0UGx1Z2luQ2xpZW50
LmRlZnMgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoU2VydmVyLCApOyB9OyB9OwotCQkx
QUFGNUQwOTBFRERFNzFEMDA4RDg4M0QgLyogV2ViS2l0UGx1Z2luSG9zdFR5cGVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUFGNUQwODBFRERFNzFE
MDA4RDg4M0QgLyogV2ViS2l0UGx1Z2luSG9zdFR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMUFBRjVEMEYwRURERTdBNzAwOEQ4ODNEIC8q
IFdlYktpdFBsdWdpbkFnZW50LmRlZnMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQUFGNTg4QTBFRENDRUEzMDA4RDg4M0QgLyogV2ViS2l0UGx1Z2luQWdl
bnQuZGVmcyAqLzsgfTsKLQkJMUFBRjVGQkYwRURFM0E5MjAwOEQ4ODNEIC8qIFdlYkhvc3RlZE5l
dHNjYXBlUGx1Z2luVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUFBRjVGQkQwRURFM0E5MjAwOEQ4ODNEIC8qIFdlYkhvc3RlZE5ldHNjYXBlUGx1
Z2luVmlldy5oICovOyB9OwotCQkxQUFGNUZDMDBFREUzQTkyMDA4RDg4M0QgLyogV2ViSG9zdGVk
TmV0c2NhcGVQbHVnaW5WaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUFBRjVGQkUwRURFM0E5MjAwOEQ4ODNEIC8qIFdlYkhvc3RlZE5ldHNjYXBl
UGx1Z2luVmlldy5tbSAqLzsgfTsKIAkJMUFCMUY3NkUxRDFCMjYwQjAwN0M5QkQxIC8qIFdlYlBh
eW1lbnRDb29yZGluYXRvckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUFCMUY3NkMxRDFCMjYwQjAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29y
ZGluYXRvckNsaWVudC5oICovOyB9OwogCQkxQUIxRjc2RjFEMUIyNjBCMDA3QzlCRDEgLyogV2Vi
UGF5bWVudENvb3JkaW5hdG9yQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUFCMUY3NkQxRDFCMjYwQjAwN0M5QkQxIC8qIFdlYlBheW1lbnRD
b29yZGluYXRvckNsaWVudC5tbSAqLzsgfTsKIAkJMUFDNzE3NkUxQTI2NTY4QTAwMkUzMTE1IC8q
IFdlYlZpc2l0ZWRMaW5rU3RvcmUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQUM3MTc2QzFBMjY1NjhBMDAyRTMxMTUgLyogV2ViVmlzaXRlZExpbmtT
dG9yZS5tbSAqLzsgfTsKIAkJMUFDNzE3NkYxQTI2NTY4QTAwMkUzMTE1IC8qIFdlYlZpc2l0ZWRM
aW5rU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBQzcxNzZEMUEyNjU2OEEwMDJFMzExNSAvKiBXZWJWaXNpdGVkTGlua1N0b3JlLmggKi87IH07
Ci0JCTFBRUE2NkQ0MERDNkIxRkYwMDNEMTJCRiAvKiBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFu
ZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFF
QTY2RDIwREM2QjFGRjAwM0QxMkJGIC8qIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyLmgg
Ki87IH07Ci0JCTFBRUE2NkQ1MERDNkIxRkYwMDNEMTJCRiAvKiBXZWJOZXRzY2FwZVBsdWdpbkV2
ZW50SGFuZGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBRUE2NkQzMERDNkIxRkYwMDNEMTJCRiAvKiBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFu
ZGxlci5tbSAqLzsgfTsKLQkJMUFFQTZBNTAwREM4Q0UyRjAwM0QxMkJGIC8qIFdlYk5ldHNjYXBl
UGx1Z2luRXZlbnRIYW5kbGVyQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBRUE2QTRFMERDOENFMkYwMDNEMTJCRiAvKiBXZWJOZXRzY2FwZVBs
dWdpbkV2ZW50SGFuZGxlckNvY29hLmggKi87IH07Ci0JCTFBRUE2QTUxMERDOENFMkYwMDNEMTJC
RiAvKiBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFFQTZBNEYwREM4Q0UyRjAwM0QxMkJG
IC8qIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2EubW0gKi87IH07CiAJCTFDMEQ0
MDg3MEFDMUM4RjQwMDA5QzExMyAvKiBXZWJLaXRWZXJzaW9uQ2hlY2tzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzBENDA4NTBBQzFDOEY0MDAwOUMx
MTMgLyogV2ViS2l0VmVyc2lvbkNoZWNrcy5oICovOyB9OwogCQkxQzY4RjY2RjA5NUI1RkMxMDBD
Mjk4NEUgLyogV2ViTm9kZUhpZ2hsaWdodC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUM2OEY2NjMwOTVCNUZDMTAwQzI5ODRFIC8qIFdlYk5vZGVIaWdo
bGlnaHQuaCAqLzsgfTsKIAkJMUM2OEY2NzAwOTVCNUZDMTAwQzI5ODRFIC8qIFdlYk5vZGVIaWdo
bGlnaHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QzY4RjY2NDA5NUI1RkMxMDBDMjk4NEUgLyogV2ViTm9kZUhpZ2hsaWdodC5tbSAqLzsgfTsKQEAg
LTE1OCwxMSArMTMwLDYgQEAKIAkJNTFGREM0RDMwQjBBRjVDMTAwRjg0RUIzIC8qIFdlYkhpc3Rv
cnlJdGVtUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFGREM0RDIwQjBBRjVDMTAwRjg0RUIzIC8qIFdlYkhpc3RvcnlJdGVtUHJpdmF0ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNDFB
REY1MEIxQkM0OEEwMDQwMTJCRCAvKiBXZWJDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI0MUFERjMwQjFCQzQ4QTAwNDAxMkJEIC8qIFdlYkNh
Y2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTI0MUFERjYwQjFCQzQ4QTAwNDAxMkJEIC8qIFdlYkNhY2hlLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI0MUFERjQwQjFCQzQ4QTAwNDAxMkJEIC8q
IFdlYkNhY2hlLm1tICovOyB9OwotCQk1MzVFMDhDQzIyNTQ2M0IyMDBERjAwQ0EgLyogV2ViS2l0
UGx1Z2luQWdlbnQuZGVmcyBpbiBDb3B5IE1pZyBGaWxlcyBpbnRvIFByaXZhdGUgRnJhbWV3b3Jr
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBRjU4OEEwRURD
Q0VBMzAwOEQ4ODNEIC8qIFdlYktpdFBsdWdpbkFnZW50LmRlZnMgKi87IH07Ci0JCTUzNUUwOENE
MjI1NDYzQjIwMERGMDBDQSAvKiBXZWJLaXRQbHVnaW5BZ2VudFJlcGx5LmRlZnMgaW4gQ29weSBN
aWcgRmlsZXMgaW50byBQcml2YXRlIEZyYW1ld29yayBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUY1ODhCMEVEQ0NFQTMwMDhEODgzRCAvKiBXZWJLaXRQbHVn
aW5BZ2VudFJlcGx5LmRlZnMgKi87IH07Ci0JCTUzNUUwOENFMjI1NDYzQjIwMERGMDBDQSAvKiBX
ZWJLaXRQbHVnaW5DbGllbnQuZGVmcyBpbiBDb3B5IE1pZyBGaWxlcyBpbnRvIFByaXZhdGUgRnJh
bWV3b3JrIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBRjU4
OEMwRURDQ0VBMzAwOEQ4ODNEIC8qIFdlYktpdFBsdWdpbkNsaWVudC5kZWZzICovOyB9OwotCQk1
MzVFMDhDRjIyNTQ2M0IyMDBERjAwQ0EgLyogV2ViS2l0UGx1Z2luSG9zdC5kZWZzIGluIENvcHkg
TWlnIEZpbGVzIGludG8gUHJpdmF0ZSBGcmFtZXdvcmsgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQUFGNTg4RDBFRENDRUEzMDA4RDg4M0QgLyogV2ViS2l0UGx1
Z2luSG9zdC5kZWZzICovOyB9OwotCQk1MzVFMDhEMDIyNTQ2M0IyMDBERjAwQ0EgLyogV2ViS2l0
UGx1Z2luSG9zdFR5cGVzLmRlZnMgaW4gQ29weSBNaWcgRmlsZXMgaW50byBQcml2YXRlIEZyYW1l
d29yayBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUY1ODhF
MEVEQ0NFQTMwMDhEODgzRCAvKiBXZWJLaXRQbHVnaW5Ib3N0VHlwZXMuZGVmcyAqLzsgfTsKIAkJ
NTk4QUQ5MUExMjAxQ0VDOTAwQUJBRTRFIC8qIFdlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OThBRDkxOTEy
MDFDRUM5MDBBQkFFNEUgLyogV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnQuaCAqLzsgfTsKIAkJ
NTk4QUQ5MUUxMjAxQ0VDRjAwQUJBRTRFIC8qIFdlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50Lm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTk4QUQ5MUQx
MjAxQ0VDRjAwQUJBRTRFIC8qIFdlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50Lm1tICovOyB9Owog
CQk1OThBRDkyMDEyMDFDRjA3MDBBQkFFNEUgLyogV2ViRGV2aWNlT3JpZW50YXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5OEFEOTFGMTIwMUNG
MDcwMEFCQUU0RSAvKiBXZWJEZXZpY2VPcmllbnRhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yNjQsOSArMjMxLDcgQEAKIAkJOTM5ODEw
MjcwODI0QkYwMTAwOERGMDM4IC8qIFdlYlN0cmluZ1RydW5jYXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU5NjY4QzgwMkFEMjkyMzAxODYzNUNB
IC8qIFdlYlN0cmluZ1RydW5jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTkzOTgxMDI5MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJBdXRoZW50
aWNhdGlvblBhbmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGOENBMTVCNTAyOUEzOUQ5MDEwMDAxMjIgLyogV2ViQXV0aGVudGljYXRpb25QYW5lbC5o
ICovOyB9OwogCQk5Mzk4MTAyQTA4MjRCRjAxMDA4REYwMzggLyogV2ViUGFuZWxBdXRoZW50aWNh
dGlvbkhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzMTU0RUYxMDNBNDEyNzAwMDg2MzVDRSAvKiBXZWJQYW5lbEF1dGhlbnRpY2F0aW9uSGFu
ZGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CTkzOTgxMDJCMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVBNjcyQjkwMjYz
ODY2RTAxMDAwMTAyIC8qIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLmggKi87IH07CiAJCTkzOTgx
MDJFMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJCYXNlUGx1Z2luUGFja2FnZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODNFNEFGNDYwMzY2NTIxNTAwMDBF
NTA2IC8qIFdlYkJhc2VQbHVnaW5QYWNrYWdlLmggKi87IH07Ci0JCTkzOTgxMDMxMDgyNEJGMDEw
MDhERjAzOCAvKiBXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1RjcxNzFFMDI4ODQ5M0MwMTg2MzVDQSAvKiBX
ZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UuaCAqLzsgfTsKIAkJOTM5ODEwMzUwODI0QkYwMTAwOERG
MDM4IC8qIFdlYlBsdWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODQ4REZGODQwMzY1RkU2QTAwQ0EyQUNBIC8qIFdlYlBsdWdpbi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzOTgxMDM2MDgyNEJG
MDEwMDhERjAzOCAvKiBXZWJQbHVnaW5Db250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0OERGRjg1MDM2NUZFNkEwMENBMkFDQSAvKiBXZWJQ
bHVnaW5Db250YWluZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk5Mzk4MTAzNzA4MjRCRjAxMDA4REYwMzggLyogV2ViUGx1Z2luQ29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ2NzI3
NUMwMzY3MTU4NTAwQ0EyQUNBIC8qIFdlYlBsdWdpbkNvbnRyb2xsZXIuaCAqLzsgfTsKQEAgLTM0
OCwxMCArMzEzLDcgQEAKIAkJOTM5ODEwQ0MwODI0QkYwMTAwOERGMDM4IC8qIFdlYlN0cmluZ1Ry
dW5jYXRvci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY1OTY2OEM5MDJBRDI5MjMwMTg2MzVDQSAvKiBXZWJTdHJpbmdUcnVuY2F0b3IubW0gKi87IH07
CiAJCTkzOTgxMENGMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJBdXRoZW50aWNhdGlvblBhbmVsLm0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGOENBMTVCNjAy
OUEzOUQ5MDEwMDAxMjIgLyogV2ViQXV0aGVudGljYXRpb25QYW5lbC5tICovOyB9OwogCQk5Mzk4
MTBEMDA4MjRCRjAxMDA4REYwMzggLyogV2ViUGFuZWxBdXRoZW50aWNhdGlvbkhhbmRsZXIubSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMTU0RUYyMDNB
NDEyNzAwMDg2MzVDRSAvKiBXZWJQYW5lbEF1dGhlbnRpY2F0aW9uSGFuZGxlci5tICovOyB9Owot
CQk5Mzk4MTBEMTA4MjRCRjAxMDA4REYwMzggLyogV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNUE2NzJCQTAy
NjM4NjZFMDEwMDAxMDIgLyogV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0gKi87IH07Ci0JCTkz
OTgxMEQ2MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNUY3MTcxRjAyODg0
OTNDMDE4NjM1Q0EgLyogV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm1tICovOyB9OwogCQk5Mzk4
MTBEQzA4MjRCRjAxMDA4REYwMzggLyogV2ViUGx1Z2luUGFja2FnZS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzRTRBRjRDMDM2NjU5NDQwMDAwRTUw
NiAvKiBXZWJQbHVnaW5QYWNrYWdlLm1tICovOyB9OwotCQk5Mzk4MTBERDA4MjRCRjAxMDA4REYw
MzggLyogbnBhcGkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNUY3MTcyMzAyODg0OTNDMDE4NjM1Q0EgLyogbnBhcGkubW0gKi87IH07CiAJCTkzOTgx
MEU0MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJKYXZhU2NyaXB0VGV4dElucHV0UGFuZWwubSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNDVENEVCMDM2NUM1
QjIwMDg2MzVDRSAvKiBXZWJKYXZhU2NyaXB0VGV4dElucHV0UGFuZWwubSAqLzsgfTsKIAkJOTM5
ODEwRjAwODI0QkYwMTAwOERGMDM4IC8qIFdlYkRlZmF1bHRQb2xpY3lEZWxlZ2F0ZS5tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1MkZBRTAwMzNGQzUw
NDAwQ0EyQUNEIC8qIFdlYkRlZmF1bHRQb2xpY3lEZWxlZ2F0ZS5tICovOyB9OwogCQk5Mzk4MTBG
MTA4MjRCRjAxMDA4REYwMzggLyogV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3Lm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzk0NDYwNkMwMjBGNTBFRDBF
Q0ExNzY3IC8qIFdlYkR5bmFtaWNTY3JvbGxCYXJzVmlldy5tbSAqLzsgfTsKQEAgLTY4Nyw4ICs2
NDksNiBAQAogCQlFMTNFNzgyQzFFNUE3MzY1MDAxODQ5RDEgLyogV2ViQ3JlYXRlRnJhZ21lbnRJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTEzRTc4MkIxRTVBNzM2NTAwMTg0OUQxIC8qIFdlYkNyZWF0ZUZyYWdtZW50SW50ZXJuYWwuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMTUzMUJE
ODIxODdCOTU0MDAyRTNGODEgLyogTlNVUkxEb3dubG9hZFNQSS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1MzFCRDcyMTg3QjhGMjAwMkUzRjgxIC8q
IE5TVVJMRG93bmxvYWRTUEkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlFMTU2NjMxOTBGQjYxQzFGMDBDMTk5Q0EgLyogV2ViRG93bmxvYWQubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU2NjMxODBG
QjYxQzFGMDBDMTk5Q0EgLyogV2ViRG93bmxvYWQubW0gKi87IH07Ci0JCUUxNjk4MzYyMTEzNDZE
MUIwMDg5NDExNSAvKiBQcm94eVJ1bnRpbWVPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNjk4MzYxMTEzNDZEMUIwMDg5NDExNSAvKiBQcm94
eVJ1bnRpbWVPYmplY3QuaCAqLzsgfTsKLQkJRTE2OTgzNkMxMTM0NkQ1NjAwODk0MTE1IC8qIFBy
b3h5UnVudGltZU9iamVjdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxNjk4MzZCMTEzNDZENTYwMDg5NDExNSAvKiBQcm94eVJ1bnRpbWVPYmplY3Qu
bW0gKi87IH07CiAJCUU0QUVGOTdDMUMwREY0QkMwMEIwMTcyNyAvKiBXZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0QUVGOTdBMUMwREY0QkMwMEIwMTcyNyAvKiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCAq
LzsgfTsKIAkJRUQ1Qjk1MjQxMTFCNzI1QTAwNDcyMjk4IC8qIFdlYkxvY2FsaXphYmxlU3RyaW5n
cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVENUI5
NTIzMTExQjcyNUEwMDQ3MjI5OCAvKiBXZWJMb2NhbGl6YWJsZVN0cmluZ3MubW0gKi87IH07CiAJ
CUVEN0Y2RDhCMDk4MDY4MzUwMEMyMzVFRCAvKiBXZWJOU0RhdGFFeHRyYXNQcml2YXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFRDdGNkQ4QTA5ODA2
ODM1MDBDMjM1RUQgLyogV2ViTlNEYXRhRXh0cmFzUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03MzEsMTEgKzY5MSw2IEBACiAJCQlk
c3RQYXRoID0gUHJpdmF0ZUhlYWRlcnM7CiAJCQlkc3RTdWJmb2xkZXJTcGVjID0gMTsKIAkJCWZp
bGVzID0gKAotCQkJCTUzNUUwOENDMjI1NDYzQjIwMERGMDBDQSAvKiBXZWJLaXRQbHVnaW5BZ2Vu
dC5kZWZzIGluIENvcHkgTWlnIEZpbGVzIGludG8gUHJpdmF0ZSBGcmFtZXdvcmsgSGVhZGVycyAq
LywKLQkJCQk1MzVFMDhDRDIyNTQ2M0IyMDBERjAwQ0EgLyogV2ViS2l0UGx1Z2luQWdlbnRSZXBs
eS5kZWZzIGluIENvcHkgTWlnIEZpbGVzIGludG8gUHJpdmF0ZSBGcmFtZXdvcmsgSGVhZGVycyAq
LywKLQkJCQk1MzVFMDhDRTIyNTQ2M0IyMDBERjAwQ0EgLyogV2ViS2l0UGx1Z2luQ2xpZW50LmRl
ZnMgaW4gQ29weSBNaWcgRmlsZXMgaW50byBQcml2YXRlIEZyYW1ld29yayBIZWFkZXJzICovLAot
CQkJCTUzNUUwOENGMjI1NDYzQjIwMERGMDBDQSAvKiBXZWJLaXRQbHVnaW5Ib3N0LmRlZnMgaW4g
Q29weSBNaWcgRmlsZXMgaW50byBQcml2YXRlIEZyYW1ld29yayBIZWFkZXJzICovLAotCQkJCTUz
NUUwOEQwMjI1NDYzQjIwMERGMDBDQSAvKiBXZWJLaXRQbHVnaW5Ib3N0VHlwZXMuZGVmcyBpbiBD
b3B5IE1pZyBGaWxlcyBpbnRvIFByaXZhdGUgRnJhbWV3b3JrIEhlYWRlcnMgKi8sCiAJCQkpOwog
CQkJbmFtZSA9ICJDb3B5IE1pZyBGaWxlcyBpbnRvIFByaXZhdGUgRnJhbWV3b3JrIEhlYWRlcnMi
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC03NTUsMTIg
KzcxMCw2IEBACiAJCTE0RDgyNTJFMEFGOTU1MDkwMDA0RjA1NyAvKiBXZWJDaHJvbWVDbGllbnQu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDaHJvbWVDbGll
bnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMDhGRURFMUQ1OTM3NkUwMDhC
QThDQiAvKiBXZWJQbHVnaW5JbmZvUHJvdmlkZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXZWJQbHVnaW5JbmZvUHJvdmlkZXIubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFBMDhGRURGMUQ1OTM3NkUwMDhCQThDQiAvKiBXZWJQbHVnaW5JbmZv
UHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGx1Z2luSW5m
b1Byb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMkRCRTlEMEYyNTFF
M0EwMDM2RjhBNiAvKiBQcm94eUluc3RhbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFByb3h5SW5zdGFuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUEy
REJFOUUwRjI1MUUzQTAwMzZGOEE2IC8qIFByb3h5SW5zdGFuY2UubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQcm94eUluc3RhbmNlLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkxQTRERjUyMDBFQzhDNzREMDA2QkQ0QjQgLyogV2ViTmV0c2NhcGVQ
bHVnaW5WaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYk5ldHNjYXBl
UGx1Z2luVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTRERjUyMTBFQzhD
NzREMDA2QkQ0QjQgLyogV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkxQTRERjVFMjBFQzhEMTA0MDA2QkQ0QjQgLyogV2ViQmFz
ZU5ldHNjYXBlUGx1Z2luVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTFBNERGNUUzMEVDOEQxMDQwMDZCRDRCNCAvKiBXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQmFzZU5ldHNjYXBl
UGx1Z2luVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE1OTFENDMxQTJF
OTFCQjAwMDkwN0M0IC8qIFdlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIu
Y3BwOyBwYXRoID0gLi4vLi4vU3RvcmFnZS9XZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTU5MUQ0NDFBMkU5MUJCMDAwOTA3QzQg
LyogV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oOyBwYXRoID0gLi4vLi4vU3Rv
cmFnZS9XZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUE2MDUxOEQxNzUwMkE1RDAwQkM2MkY1IC8qIEJpbmFyeVByb3BlcnR5TGlzdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaW5hcnlQcm9wZXJ0eUxp
c3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzgyLDQxICs3MzEsMTcgQEAK
IAkJMUE2QjMxMkUxQTUxRjNBOTAwNDIyOTc1IC8qIFN0b3JhZ2VUcmFja2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFN0b3JhZ2VUcmFja2VyLmNwcDsgcGF0aCA9
IFN0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07
CiAJCTFBNkIzMTJGMUE1MUYzQTkwMDQyMjk3NSAvKiBTdG9yYWdlVHJhY2tlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTdG9yYWdlVHJhY2tlci5oOyBwYXRoID0gU3RvcmFn
ZS9TdG9yYWdlVHJhY2tlci5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCTFBNkIz
MTMwMUE1MUYzQTkwMDQyMjk3NSAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBTdG9yYWdlVHJhY2tlckNsaWVudC5oOyBwYXRoID0gU3Rv
cmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07
Ci0JCTFBNzRBMjhDMEY0Rjc1NDAwMDgyRTIyOCAvKiBXZWJUZXh0SW5wdXRXaW5kb3dDb250cm9s
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlRleHRJbnB1dFdpbmRv
d0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE3NEEyOEQwRjRG
NzU0MDAwODJFMjI4IC8qIFdlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIubSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7
IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBXZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLm07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBNzdCMDJDMEVFNzczMDUwMEM4QTFGOSAv
KiBXZWJQbHVnaW5SZXF1ZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YlBsdWdpblJlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE3N0IwMkQw
RUU3NzMwNTAwQzhBMUY5IC8qIFdlYlBsdWdpblJlcXVlc3QubSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5vYmpjOyBwYXRoID0gV2ViUGx1Z2luUmVxdWVzdC5tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQTg2Q0NEMzFBRDQ4QTYyMDA3NEJBODkgLyogV2ViQXBwbGljYXRpb25DYWNo
ZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkFwcGxpY2F0
aW9uQ2FjaGVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQThERUQ0
RTBFRTg4QjhBMDBGMjUwMjIgLyogSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE4REVENEYwRUU4OEI4QTAwRjI1MDIyIC8q
IEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFBOTExOUY0MURCMDQ3MEEwMDg3RDFGRCAvKiBCYWNrRm9yd2Fy
ZExpc3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBCYWNrRm9y
d2FyZExpc3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOTExOUY1MURCMDQ3
MEEwMDg3RDFGRCAvKiBCYWNrRm9yd2FyZExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQmFja0ZvcndhcmRMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFBQTgzRjgxMUE1QzRBRTQwMDAyNkVDNiAvKiBXZWJEYXRhYmFzZVByb3ZpZGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkRhdGFiYXNlUHJvdmlkZXIuY3Bw
OyBwYXRoID0gLi4vLi4vU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBODNGODIxQTVDNEFFNDAwMDI2RUM2IC8qIFdlYkRhdGFi
YXNlUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViRGF0YWJh
c2VQcm92aWRlci5oOyBwYXRoID0gLi4vLi4vU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTg3OUI0MTFDQkU5QkYwMDNDNjY0RiAv
KiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFBQTg3OUI1MTFDQkU5QkYwMDNDNjY0RiAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQUY1ODhBMEVEQ0NFQTMwMDhE
ODgzRCAvKiBXZWJLaXRQbHVnaW5BZ2VudC5kZWZzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5taWc7
IHBhdGggPSBXZWJLaXRQbHVnaW5BZ2VudC5kZWZzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkxQUFGNTg4QjBFRENDRUEzMDA4RDg4M0QgLyogV2ViS2l0UGx1Z2luQWdlbnRSZXBseS5k
ZWZzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5taWc7IHBhdGggPSBXZWJLaXRQbHVnaW5BZ2VudFJl
cGx5LmRlZnM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQUY1ODhDMEVEQ0NFQTMw
MDhEODgzRCAvKiBXZWJLaXRQbHVnaW5DbGllbnQuZGVmcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
bWlnOyBwYXRoID0gV2ViS2l0UGx1Z2luQ2xpZW50LmRlZnM7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTFBQUY1ODhEMEVEQ0NFQTMwMDhEODgzRCAvKiBXZWJLaXRQbHVnaW5Ib3N0LmRl
ZnMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLm1pZzsgcGF0aCA9IFdlYktpdFBsdWdpbkhvc3QuZGVm
czsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBRjU4OEUwRURDQ0VBMzAwOEQ4ODNE
IC8qIFdlYktpdFBsdWdpbkhvc3RUeXBlcy5kZWZzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5taWc7
IHBhdGggPSBXZWJLaXRQbHVnaW5Ib3N0VHlwZXMuZGVmczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMUFBRjVDRTQwRURERTFGRTAwOEQ4ODNEIC8qIE5ldHNjYXBlUGx1Z2luSG9zdE1h
bmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0c2NhcGVQbHVnaW5I
b3N0TWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUFGNUNFNTBFRERF
MUZFMDA4RDg4M0QgLyogTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQUY1Q0U2MEVEREUxRkUwMDhEODgzRCAv
KiBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkxQUFGNUNFNzBFRERFMUZFMDA4RDg4M0QgLyogTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHku
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOZXRzY2FwZVBsdWdp
bkhvc3RQcm94eS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBRjVDRTgwRURE
RTFGRTAwOEQ4ODNEIC8qIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBRjVDRTkwRURERTFGRTAwOEQ4ODNEIC8qIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMUFBRjVEMDgwRURERTcxRDAwOEQ4ODNEIC8qIFdlYktpdFBsdWdp
bkhvc3RUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRQbHVn
aW5Ib3N0VHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBRjVGQkQwRURF
M0E5MjAwOEQ4ODNEIC8qIFdlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBRjVGQkUwRURFM0E5MjAwOEQ4ODNEIC8qIFdl
Ykhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUFCMUY3NkMxRDFCMjYwQjAwN0M5QkQxIC8qIFdlYlBheW1lbnRD
b29yZGluYXRvckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQ
YXltZW50Q29vcmRpbmF0b3JDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUFCMUY3NkQxRDFCMjYwQjAwN0M5QkQxIC8qIFdlYlBheW1lbnRDb29yZGluYXRvckNsaWVudC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlBheW1lbnRDb29y
ZGluYXRvckNsaWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFDNzE3NkMx
QTI2NTY4QTAwMkUzMTE1IC8qIFdlYlZpc2l0ZWRMaW5rU3RvcmUubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaXNpdGVkTGlua1N0b3JlLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQUM3MTc2RDFBMjY1NjhBMDAyRTMxMTUgLyogV2ViVmlz
aXRlZExpbmtTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaXNp
dGVkTGlua1N0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBRUE2NkQyMERD
NkIxRkYwMDNEMTJCRiAvKiBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUVBNjZEMzBEQzZCMUZGMDAzRDEyQkYg
LyogV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlci5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFFQTZBNEUwREM4Q0UyRjAwM0QxMkJGIC8qIFdl
Yk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkxQUVBNkE0RjBEQzhDRTJGMDAzRDEyQkYgLyogV2ViTmV0
c2NhcGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2EubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMEQ0MDg1MEFDMUM4RjQwMDA5QzExMyAvKiBX
ZWJLaXRWZXJzaW9uQ2hlY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YktpdFZlcnNpb25DaGVja3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM2OEY2
NjMwOTVCNUZDMTAwQzI5ODRFIC8qIFdlYk5vZGVIaWdobGlnaHQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJOb2RlSGlnaGxpZ2h0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB3cmFwc0xp
bmVzID0gMDsgfTsKIAkJMUM2OEY2NjQwOTVCNUZDMTAwQzI5ODRFIC8qIFdlYk5vZGVIaWdobGln
aHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBw
YXRoID0gV2ViTm9kZUhpZ2hsaWdodC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lk
dGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBAIC0xNTQxLDggKzE0NjYsNiBAQAogCQlFMTNFNzgy
QjFFNUE3MzY1MDAxODQ5RDEgLyogV2ViQ3JlYXRlRnJhZ21lbnRJbnRlcm5hbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5o
OyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gV2ViQ3JlYXRlRnJhZ21lbnRJbnRlcm5hbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTUzMUJENzIxODdCOEYyMDAyRTNGODEgLyog
TlNVUkxEb3dubG9hZFNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOU1VSTERvd25sb2FkU1BJLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNTY2MzE4MEZCNjFDMUYwMEMxOTlDQSAvKiBX
ZWJEb3dubG9hZC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
YkRvd25sb2FkLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMTY5ODM2MTExMzQ2
RDFCMDA4OTQxMTUgLyogUHJveHlSdW50aW1lT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFByb3h5UnVudGltZU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlFMTY5ODM2QjExMzQ2RDU2MDA4OTQxMTUgLyogUHJveHlSdW50aW1lT2JqZWN0Lm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUHJveHlSdW50aW1lT2Jq
ZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEFFRjk3OTFDMERGNEJDMDBC
MDE3MjcgLyogV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBmaWxl
RW5jb2RpbmcgPSA0OyBuYW1lID0gV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDsgcGF0aCA9
IFdlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUg
PSBTT1VSQ0VfUk9PVDsgfTsKIAkJRTRBRUY5N0ExQzBERjRCQzAwQjAxNzI3IC8qIFdlYlJlc291
cmNlTG9hZFNjaGVkdWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDsgcGF0aCA9IFdlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNl
TG9hZFNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCUVEMjFCOTgx
MDUyOEY3QUEwMDMyOTlBQyAvKiBXZWJEb2N1bWVudEludGVybmFsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRG9jdW1lbnRJbnRlcm5hbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
QEAgLTE1NzAsMTkgKzE0OTMsMTQgQEAKIAkJRjU5RUFFM0UwMjUzQzdFRTAxODYzNUNBIC8qIFdl
YkNvcmVTdGF0aXN0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViQ29yZVN0YXRpc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1OUVBRTQxMDI1M0M4REUwMTg2MzVD
QSAvKiBXZWJDb3JlU3RhdGlzdGljcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVN0YXRpc3RpY3MubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNUE1NURD
NzAyQkFBMkU4MDE4NjM1Q0MgLyogV2ViSFRNTFJlcHJlc2VudGF0aW9uUHJpdmF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkhUTUxSZXBy
ZXNlbnRhdGlvblByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1QTY3MkI5MDI2Mzg2NkUwMTAwMDEwMiAvKiBXZWJOZXRz
Y2FwZVBsdWdpblN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlGNUE2NzJCQTAyNjM4NjZF
MDEwMDAxMDIgLyogV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgZmls
ZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBwYXRoID0gV2ViTmV0c2NhcGVQbHVnaW5T
dHJlYW0ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMg
PSAwOyB9OwogCQlGNUFFQkIzRDAyNEE1Mjc2MDFDMUE1MjYgLyogV2ViUHJlZmVyZW5jZXMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBwYXRoID0g
V2ViUHJlZmVyZW5jZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
dXNlc1RhYnMgPSAwOyB9OwogCQlGNUI2NzEzMDAyM0VERjg5MDFDMUE1MjUgLyogdXJsX2ljb24u
dGlmZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGlt
YWdlLnRpZmY7IHBhdGggPSB1cmxfaWNvbi50aWZmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGNUI5MkI4MjAyMjMxOTFEMDFDMUE1MjUgLyogV2ViSGlzdG9yeVByaXZhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSGlzdG9y
eVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07CiAJCUY1QzI4MzczMDI4NDY3NkQwMTg2MzVDQSAvKiBXZWJLaXRQcmVmaXguaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJLaXRQ
cmVmaXguaDsgcGF0aCA9IG1hYy9XZWJLaXRQcmVmaXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA0OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1RTBBNzZFMDJCOEZFRTQwMUMx
QTUyNSAvKiBXZWJVUkxzV2l0aFRpdGxlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJVUkxzV2l0aFRpdGxlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjVFMEE3NkYwMkI4
RkVFNDAxQzFBNTI1IC8qIFdlYlVSTHNXaXRoVGl0bGVzLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdlYlVSTHNXaXRoVGl0bGVzLm07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlG
NUY3MTcxRTAyODg0OTNDMDE4NjM1Q0EgLyogV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViTmV0c2Nh
cGVQbHVnaW5QYWNrYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
dXNlc1RhYnMgPSAwOyB9OwotCQlGNUY3MTcxRjAyODg0OTNDMDE4NjM1Q0EgLyogV2ViTmV0c2Nh
cGVQbHVnaW5QYWNrYWdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVu
dFdpZHRoID0gNDsgcGF0aCA9IFdlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1RjcxNzIw
MDI4ODQ5M0MwMTg2MzVDQSAvKiBXZWJQbHVnaW5EYXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsdWdpbkRhdGFiYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlG
NUY3MTcyMTAyODg0OTNDMDE4NjM1Q0EgLyogV2ViUGx1Z2luRGF0YWJhc2UubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBwYXRoID0gV2ViUGx1Z2lu
RGF0YWJhc2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1Rh
YnMgPSAwOyB9OwotCQlGNUY3MTcyMzAyODg0OTNDMDE4NjM1Q0EgLyogbnBhcGkubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBwYXRoID0gbnBhcGku
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9
OwogCQlGNUY3MzJEMjAyRkY0RDRGMDFBODAxODAgLyogV2ViS2l0LmV4cCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmV4cG9ydHM7IG5hbWUgPSBXZWJLaXQuZXhwOyBwYXRoID0gbWFjL1dlYktpdC5l
eHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gNDsgdXNlc1RhYnMgPSAwOyB9
OwogCQlGNzM4QzlFOTAzRkFEM0RGMDMyMUZCRTAgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBl
ci5mcmFtZXdvcms7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUY3MzhDOUVBMDNGQUQzREYwMzIxRkJFMCAvKiBX
ZWJDb3JlLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBwYXRoID0gV2ViQ29yZS5mcmFtZXdvcms7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC0xNjgyLDQ2ICsxNjAwLDYgQEAK
IAkJCXRhYldpZHRoID0gNDsKIAkJCXVzZXNUYWJzID0gMDsKIAkJfTsKLQkJMUExRjkxNDMwRUNC
QjE2RjAwNjM1MURBIC8qIEhvc3RlZCAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hp
bGRyZW4gPSAoCi0JCQkJMUE4REVENEUwRUU4OEI4QTAwRjI1MDIyIC8qIEhvc3RlZE5ldHNjYXBl
UGx1Z2luU3RyZWFtLmggKi8sCi0JCQkJMUE4REVENEYwRUU4OEI4QTAwRjI1MDIyIC8qIEhvc3Rl
ZE5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tICovLAotCQkJCTFBQUY1Q0U0MEVEREUxRkUwMDhEODgz
RCAvKiBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLmggKi8sCi0JCQkJMUFBRjVDRTUwRURERTFG
RTAwOEQ4ODNEIC8qIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW0gKi8sCi0JCQkJMUFBRjVD
RTYwRURERTFGRTAwOEQ4ODNEIC8qIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5LmggKi8sCi0JCQkJ
MUFBRjVDRTcwRURERTFGRTAwOEQ4ODNEIC8qIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tICov
LAotCQkJCTFBQUY1Q0U4MEVEREUxRkUwMDhEODgzRCAvKiBOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHkuaCAqLywKLQkJCQkxQUFGNUNFOTBFRERFMUZFMDA4RDg4M0QgLyogTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5Lm1tICovLAotCQkJCTFBMkRCRTlEMEYyNTFFM0EwMDM2RjhBNiAvKiBQ
cm94eUluc3RhbmNlLmggKi8sCi0JCQkJMUEyREJFOUUwRjI1MUUzQTAwMzZGOEE2IC8qIFByb3h5
SW5zdGFuY2UubW0gKi8sCi0JCQkJRTE2OTgzNjExMTM0NkQxQjAwODk0MTE1IC8qIFByb3h5UnVu
dGltZU9iamVjdC5oICovLAotCQkJCUUxNjk4MzZCMTEzNDZENTYwMDg5NDExNSAvKiBQcm94eVJ1
bnRpbWVPYmplY3QubW0gKi8sCi0JCQkJMUFBRjVGQkQwRURFM0E5MjAwOEQ4ODNEIC8qIFdlYkhv
c3RlZE5ldHNjYXBlUGx1Z2luVmlldy5oICovLAotCQkJCTFBQUY1RkJFMEVERTNBOTIwMDhEODgz
RCAvKiBXZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcubW0gKi8sCi0JCQkJMUFBRjU4OEEwRURD
Q0VBMzAwOEQ4ODNEIC8qIFdlYktpdFBsdWdpbkFnZW50LmRlZnMgKi8sCi0JCQkJMUFBRjU4OEIw
RURDQ0VBMzAwOEQ4ODNEIC8qIFdlYktpdFBsdWdpbkFnZW50UmVwbHkuZGVmcyAqLywKLQkJCQkx
QUFGNTg4QzBFRENDRUEzMDA4RDg4M0QgLyogV2ViS2l0UGx1Z2luQ2xpZW50LmRlZnMgKi8sCi0J
CQkJMUFBRjU4OEQwRURDQ0VBMzAwOEQ4ODNEIC8qIFdlYktpdFBsdWdpbkhvc3QuZGVmcyAqLywK
LQkJCQkxQUFGNTg4RTBFRENDRUEzMDA4RDg4M0QgLyogV2ViS2l0UGx1Z2luSG9zdFR5cGVzLmRl
ZnMgKi8sCi0JCQkJMUFBRjVEMDgwRURERTcxRDAwOEQ4ODNEIC8qIFdlYktpdFBsdWdpbkhvc3RU
eXBlcy5oICovLAotCQkJCTFBNzRBMjhDMEY0Rjc1NDAwMDgyRTIyOCAvKiBXZWJUZXh0SW5wdXRX
aW5kb3dDb250cm9sbGVyLmggKi8sCi0JCQkJMUE3NEEyOEQwRjRGNzU0MDAwODJFMjI4IC8qIFdl
YlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIubSAqLywKLQkJCSk7Ci0JCQlwYXRoID0gSG9zdGVk
OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJMUE5Qzc4MDMwRUJCQzQ1NTAw
ODU5OUQ0IC8qIEV2ZW50cyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4g
PSAoCi0JCQkJMUFFQTY2RDIwREM2QjFGRjAwM0QxMkJGIC8qIFdlYk5ldHNjYXBlUGx1Z2luRXZl
bnRIYW5kbGVyLmggKi8sCi0JCQkJMUFFQTY2RDMwREM2QjFGRjAwM0QxMkJGIC8qIFdlYk5ldHNj
YXBlUGx1Z2luRXZlbnRIYW5kbGVyLm1tICovLAotCQkJCTFBRUE2QTRFMERDOENFMkYwMDNEMTJC
RiAvKiBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hLmggKi8sCi0JCQkJMUFFQTZB
NEYwREM4Q0UyRjAwM0QxMkJGIC8qIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2Eu
bW0gKi8sCi0JCQkpOwotCQkJbmFtZSA9IEV2ZW50czsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7Ci0JCX07CiAJCTFDNjhGNjNGMDk1QjVGOUMwMEMyOTg0RSAvKiBXZWJJbnNwZWN0b3IgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjAxOCwyNiArMTg5
Niw2IEBACiAJCQlwYXRoID0gInVuaWZpZWQtc291cmNlcyI7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwogCQl9OwotCQk4NDhERkY0MTAzNjVGNkZCMDBDQTJBQ0EgLyogTmV0c2NhcGUgUGx1
Zy1pbnMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTFB
OUM3ODAzMEVCQkM0NTUwMDg1OTlENCAvKiBFdmVudHMgKi8sCi0JCQkJMUExRjkxNDMwRUNCQjE2
RjAwNjM1MURBIC8qIEhvc3RlZCAqLywKLQkJCQlGNUY3MTcyMzAyODg0OTNDMDE4NjM1Q0EgLyog
bnBhcGkubW0gKi8sCi0JCQkJMUE0REY1RTIwRUM4RDEwNDAwNkJENEI0IC8qIFdlYkJhc2VOZXRz
Y2FwZVBsdWdpblZpZXcuaCAqLywKLQkJCQkxQTRERjVFMzBFQzhEMTA0MDA2QkQ0QjQgLyogV2Vi
QmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbSAqLywKLQkJCQlGNUY3MTcxRTAyODg0OTNDMDE4NjM1
Q0EgLyogV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLmggKi8sCi0JCQkJRjVGNzE3MUYwMjg4NDkz
QzAxODYzNUNBIC8qIFdlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5tbSAqLywKLQkJCQlGNUE2NzJC
OTAyNjM4NjZFMDEwMDAxMDIgLyogV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0uaCAqLywKLQkJCQlG
NUE2NzJCQTAyNjM4NjZFMDEwMDAxMDIgLyogV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0gKi8s
Ci0JCQkJMUE0REY1MjAwRUM4Qzc0RDAwNkJENEI0IC8qIFdlYk5ldHNjYXBlUGx1Z2luVmlldy5o
ICovLAotCQkJCTFBNERGNTIxMEVDOEM3NEQwMDZCRDRCNCAvKiBXZWJOZXRzY2FwZVBsdWdpblZp
ZXcubW0gKi8sCi0JCQkJMUE3N0IwMkMwRUU3NzMwNTAwQzhBMUY5IC8qIFdlYlBsdWdpblJlcXVl
c3QuaCAqLywKLQkJCQkxQTc3QjAyRDBFRTc3MzA1MDBDOEExRjkgLyogV2ViUGx1Z2luUmVxdWVz
dC5tICovLAotCQkJKTsKLQkJCW5hbWUgPSAiTmV0c2NhcGUgUGx1Zy1pbnMiOwotCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJODQ4REZGNDMwMzY1RjcxNTAwQ0EyQUNBIC8qIFdl
YktpdCBQbHVnLWlucyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CkBAIC0yNzE0LDcgKzI1NzIsNiBAQAogCQlGNUVCQzQ1MjAyMTM0QkI2MDFDQTE1MjAgLyogUGx1
Z2lucyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJODQ4
REZGNDEwMzY1RjZGQjAwQ0EyQUNBIC8qIE5ldHNjYXBlIFBsdWctaW5zICovLAogCQkJCTg0OERG
RjQzMDM2NUY3MTUwMENBMkFDQSAvKiBXZWJLaXQgUGx1Zy1pbnMgKi8sCiAJCQkJODNFNEFGNDYw
MzY2NTIxNTAwMDBFNTA2IC8qIFdlYkJhc2VQbHVnaW5QYWNrYWdlLmggKi8sCiAJCQkJODNFNEFG
NDcwMzY2NTIxNTAwMDBFNTA2IC8qIFdlYkJhc2VQbHVnaW5QYWNrYWdlLm1tICovLApAQCAtMjk2
MCwxMSArMjgxNyw3IEBACiAJCQkJOTNENDM3OTgxRDU3QUJFRjAwQUI4NUVBIC8qIERPTVhQYXRo
UmVzdWx0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRDQzNzk5MUQ1N0FCRUYwMEFC
ODVFQSAvKiBFeGNlcHRpb25IYW5kbGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2MDUxOTQx
NzUwMkE1RDAwQkM2MkY1IC8qIEhpc3RvcnlQcm9wZXJ0eUxpc3QuaCBpbiBIZWFkZXJzICovLAot
CQkJCTFBOERFRDUwMEVFODhCOEEwMEYyNTAyMiAvKiBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVh
bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM2NDAwNkYyMzk5NkU4MTAwMUUxODVFIC8qIEluUHJv
Y2Vzc0lEQlNlcnZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUFBRjVDRUEwRURERTFGRTAwOEQ4
ODNEIC8qIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTFB
QUY1Q0VDMEVEREUxRkUwMDhEODgzRCAvKiBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMUFBRjVDRUUwRURERTFGRTAwOEQ4ODNEIC8qIE5ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNBNDZFNzgyMUYxNDUxRDAwQ0U4
NkI0IC8qIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbk1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE1
MzFCRDgyMTg3Qjk1NDAwMkUzRjgxIC8qIE5TVVJMRG93bmxvYWRTUEkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzRDQzNzlCMUQ1N0FCRUYwMEFCODVFQSAvKiBPYmpDRXZlbnRMaXN0ZW5lci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yOTczLDggKzI4MjYsNiBAQAogCQkJCTVDRTQ0RjRBMjA2RDcwRUEw
MDNFRkQwMSAvKiBQaW5nSGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTBDMUQ1RjE4MjAz
MDBFMDAzNjg4M0EgLyogUG9wdXBNZW51SU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzAxQ0I4
NTE3MzQzNUM5MDBDNUQ4MDcgLyogUG9wdXBNZW51TWFjLmggaW4gSGVhZGVycyAqLywKLQkJCQkx
QTJEQkU5RjBGMjUxRTNBMDAzNkY4QTYgLyogUHJveHlJbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJRTE2OTgzNjIxMTM0NkQxQjAwODk0MTE1IC8qIFByb3h5UnVudGltZU9iamVjdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTEwQzFENjIxODIwMzAwRTAwMzY4ODNBIC8qIFNlYXJjaFBvcHVw
TWVudUlPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MwMUNCODcxNzM0MzVDOTAwQzVEODA3IC8q
IFNlYXJjaFBvcHVwTWVudU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2QjMxMzIxQTUxRjNB
OTAwNDIyOTc1IC8qIFN0b3JhZ2VBcmVhSW1wbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTk3LDcg
KzI4NDgsNiBAQAogCQkJCTkzOTgxMDExMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJCYWNrRm9yd2Fy
ZExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQzcxNEZCMEIyMEY3OUYwMEU1RTMzQyAvKiBX
ZWJCYWNrRm9yd2FyZExpc3RJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjJGMjE5Q0Mw
OEQyMzY3MzAwMzBFMDc4IC8qIFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTFBNERGNUU0MEVDOEQxMDQwMDZCRDRCNCAvKiBXZWJCYXNlTmV0c2NhcGVQbHVn
aW5WaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTAyRTA4MjRCRjAxMDA4REYwMzggLyog
V2ViQmFzZVBsdWdpblBhY2thZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2MDEzNUU1MjY5RkFE
MzEwMDdBOEE5NSAvKiBXZWJCcm9hZGNhc3RDaGFubmVsUmVnaXN0cnkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUyNDFBREY1MEIxQkM0OEEwMDQwMTJCRCAvKiBXZWJDYWNoZS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zMDgxLDcgKzI5MzEsNiBAQAogCQkJCTkzOTgxMDYzMDgyNEJGMDEwMDhERjAzOCAv
KiBXZWJIaXN0b3J5SXRlbUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUZEQzREMzBC
MEFGNUMxMDBGODRFQjMgLyogV2ViSGlzdG9yeUl0ZW1Qcml2YXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5Mzk4MTAxNDA4MjRCRjAxMDA4REYwMzggLyogV2ViSGlzdG9yeVByaXZhdGUuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTFBQUY1RkJGMEVERTNBOTIwMDhEODgzRCAvKiBXZWJIb3N0ZWROZXRz
Y2FwZVBsdWdpblZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDU1MDgyNEJGMDEwMDhE
RjAzOCAvKiBXZWJIVE1MUmVwcmVzZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgx
MDU2MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJIVE1MUmVwcmVzZW50YXRpb25Qcml2YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5Mzk4MTA1NzA4MjRCRjAxMDA4REYwMzggLyogV2ViSFRNTFZpZXcu
aCBpbiBIZWFkZXJzICovLApAQCAtMzEwMiw3ICsyOTUxLDYgQEAKIAkJCQlDRDhCRkNFODE1NTMx
MjI0MDA1QUZCMjUgLyogV2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5Mzk4MTAxRDA4MjRCRjAxMDA4REYwMzggLyogV2ViS2l0TG9nZ2luZy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTM5ODEwMUUwODI0QkYwMTAwOERGMDM4IC8qIFdlYktpdE5TU3RyaW5nRXh0
cmFzLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQUFGNUQwOTBFRERFNzFEMDA4RDg4M0QgLyogV2Vi
S2l0UGx1Z2luSG9zdFR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA0NzA4MjRCRjAx
MDA4REYwMzggLyogV2ViS2l0UHJlZml4LmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTAxRjA4
MjRCRjAxMDA4REYwMzggLyogV2ViS2l0U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTM5ODEwMjAwODI0QkYwMTAwOERGMDM4IC8qIFdlYktpdFN0YXRpc3RpY3NQcml2YXRlLmggaW4g
SGVhZGVycyAqLywKQEAgLTMxMTQsMTEgKzI5NjIsNiBAQAogCQkJCTA3MkU1RjQ1MUFCRjg4NzUw
MDAzQjE2NCAvKiBXZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBMTBDMUQ3MjE4MjAzMDBFMDAzNjg4M0EgLyogV2ViTUlNRVR5cGVSZWdpc3RyeS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTE4NUY2MjYxMDcxMkI4MDAwN0FBMzkzIC8qIFdlYk5hdmlnYXRp
b25EYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQUVBNjZENDBEQzZCMUZGMDAzRDEyQkYgLyog
V2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBRUE2
QTUwMERDOENFMkYwMDNEMTJCRiAvKiBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29h
LmggaW4gSGVhZGVycyAqLywKLQkJCQk5Mzk4MTAzMTA4MjRCRjAxMDA4REYwMzggLyogV2ViTmV0
c2NhcGVQbHVnaW5QYWNrYWdlLmggaW4gSGVhZGVycyAqLywKLQkJCQk5Mzk4MTAyQjA4MjRCRjAx
MDA4REYwMzggLyogV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0uaCBpbiBIZWFkZXJzICovLAotCQkJ
CTFBNERGNTIyMEVDOEM3NEQwMDZCRDRCNCAvKiBXZWJOZXRzY2FwZVBsdWdpblZpZXcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFDNjhGNjZGMDk1QjVGQzEwMEMyOTg0RSAvKiBXZWJOb2RlSGlnaGxp
Z2h0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTY4N0JEQTEzNUI3OTFBMDA3NENCQ0IgLyogV2Vi
Tm9kZUhpZ2hsaWdodGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzY4RjY3MTA5NUI1RkMxMDBD
Mjk4NEUgLyogV2ViTm9kZUhpZ2hsaWdodFZpZXcuaCBpbiBIZWFkZXJzICovLApAQCAtMzE2Miw3
ICszMDA1LDYgQEAKIAkJCQkxQTA4RkVFMTFENTkzNzZFMDA4QkE4Q0IgLyogV2ViUGx1Z2luSW5m
b1Byb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTAzOTA4MjRCRjAxMDA4REYwMzgg
LyogV2ViUGx1Z2luUGFja2FnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3QTExQjExODBEQzg0
ODAwRTU0OThDIC8qIFdlYlBsdWdpblBhY2thZ2VQcml2YXRlLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkxQTc3QjAyRTBFRTc3MzA1MDBDOEExRjkgLyogV2ViUGx1Z2luUmVxdWVzdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTM5ODEwM0EwODI0QkYwMTAwOERGMDM4IC8qIFdlYlBsdWdpblZpZXdGYWN0
b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTBBQzA4MjRCRjAxMDA4REYwMzggLyogV2Vi
UGx1Z2luVmlld0ZhY3RvcnlQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA3MjA4
MjRCRjAxMDA4REYwMzggLyogV2ViUG9saWN5RGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLApAQCAt
MzE5Nyw3ICszMDM5LDYgQEAKIAkJCQk5Mzk4MTAyNzA4MjRCRjAxMDA4REYwMzggLyogV2ViU3Ry
aW5nVHJ1bmNhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMTFFQkY0MjIxNDE5Q0NFMDBENjU5
RTcgLyogV2ViU3dpdGNoaW5nR1BVQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzZBMkRF
QTBGRDJEMDg0MDBEMzEyREIgLyogV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLywKLQkJCQkxQTc0QTI4RTBGNEY3NTQwMDA4MkUyMjggLyogV2ViVGV4dElucHV0V2lu
ZG93Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjgzNEFBRDcwRTY0QjFDNzAwRTI3
MzdDIC8qIFdlYlRleHRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwNzUwODI0
QkYwMTAwOERGMDM4IC8qIFdlYlVJRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgx
MDgzMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJVSURlbGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zNTQyLDE2ICszMzgzLDkgQEAKIAkJCQkxQTYwNTE5MTE3NTAyQTVEMDBCQzYyRjUg
LyogQmluYXJ5UHJvcGVydHlMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI4Mjk1OEQ0MTMy
NzA3RDAwMDBEMEU3OSAvKiBDb3JyZWN0aW9uUGFuZWwubW0gaW4gU291cmNlcyAqLywKIAkJCQkx
QTYwNTE5MzE3NTAyQTVEMDBCQzYyRjUgLyogSGlzdG9yeVByb3BlcnR5TGlzdC5tbSBpbiBTb3Vy
Y2VzICovLAotCQkJCTFBOERFRDUxMEVFODhCOEEwMEYyNTAyMiAvKiBIb3N0ZWROZXRzY2FwZVBs
dWdpblN0cmVhbS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzNjQwMDZFMjM5OTZFODEwMDFFMTg1
RSAvKiBJblByb2Nlc3NJREJTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUFBRjVDRUIw
RURERTFGRTAwOEQ4ODNEIC8qIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW0gaW4gU291cmNl
cyAqLywKLQkJCQkxQUFGNUNFRDBFRERFMUZFMDA4RDg4M0QgLyogTmV0c2NhcGVQbHVnaW5Ib3N0
UHJveHkubW0gaW4gU291cmNlcyAqLywKLQkJCQkxQUFGNUNFRjBFRERFMUZFMDA4RDg4M0QgLyog
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJOTM5ODEw
REQwODI0QkYwMTAwOERGMDM4IC8qIG5wYXBpLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTEwQzFE
NjAxODIwMzAwRTAwMzY4ODNBIC8qIFBvcHVwTWVudUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTVDNDBDRDIxMjJEOEY5QzAwMEU5REFENSAvKiBQb3B1cE1lbnVNYWMubW0gaW4gU291cmNlcyAq
LywKLQkJCQkxQTJEQkVBMDBGMjUxRTNBMDAzNkY4QTYgLyogUHJveHlJbnN0YW5jZS5tbSBpbiBT
b3VyY2VzICovLAotCQkJCUUxNjk4MzZDMTEzNDZENTYwMDg5NDExNSAvKiBQcm94eVJ1bnRpbWVP
YmplY3QubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTBDMUQ2MTE4MjAzMDBFMDAzNjg4M0EgLyog
U2VhcmNoUG9wdXBNZW51SU9TLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNDBDRDIyMjJEOEY5
QzMwMEU5REFENSAvKiBTZWFyY2hQb3B1cE1lbnVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkx
QTZCMzEzMTFBNTFGM0E5MDA0MjI5NzUgLyogU3RvcmFnZUFyZWFJbXBsLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMzU4OSw3ICszNDIzLDYgQEAKIAkJCQlDRURBMTJEQjE1MkNCRTY4MDBEOUUwOEQg
LyogV2ViQWx0ZXJuYXRpdmVUZXh0Q2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEx
MUQwODI0QkYwMTAwOERGMDM4IC8qIFdlYkFyY2hpdmUubW0gaW4gU291cmNlcyAqLywKIAkJCQk5
Mzk4MTBDRjA4MjRCRjAxMDA4REYwMzggLyogV2ViQXV0aGVudGljYXRpb25QYW5lbC5tIGluIFNv
dXJjZXMgKi8sCi0JCQkJMUE0REY1RTUwRUM4RDEwNDAwNkJENEI0IC8qIFdlYkJhc2VOZXRzY2Fw
ZVBsdWdpblZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MjQxQURGNjBCMUJDNDhBMDA0MDEy
QkQgLyogV2ViQ2FjaGUubW0gaW4gU291cmNlcyAqLywKIAkJCQkxNEQ4MjUzMDBBRjk1NTA5MDAw
NEYwNTcgLyogV2ViQ2hyb21lQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTEwQzFENjUx
ODIwMzAwRTAwMzY4ODNBIC8qIFdlYkNocm9tZUNsaWVudElPUy5tbSBpbiBTb3VyY2VzICovLApA
QCAtMzYzMSw3ICszNDY0LDYgQEAKIAkJCQlBMTBDMUQzNzE4MjAyRkM1MDAzNjg4M0EgLyogV2Vi
R2VvbG9jYXRpb25Qcm92aWRlcklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMTEzMDgy
NEJGMDEwMDhERjAzOCAvKiBXZWJIaXN0b3J5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEw
QkQwODI0QkYwMTAwOERGMDM4IC8qIFdlYkhpc3RvcnlJdGVtLm1tIGluIFNvdXJjZXMgKi8sCi0J
CQkJMUFBRjVGQzAwRURFM0E5MjAwOEQ4ODNEIC8qIFdlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmll
dy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMEYzMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJI
VE1MUmVwcmVzZW50YXRpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTBDMTA4MjRCRjAx
MDA4REYwMzggLyogV2ViSWNvbkRhdGFiYXNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU2MDk0
NjcxNEQ4QUQyNjAwNzk5QThBIC8qIFdlYkluZGljYXRlTGF5ZXIubW0gaW4gU291cmNlcyAqLywK
QEAgLTM2NDYsOSArMzQ3OCw2IEBACiAJCQkJOTM5ODEwQzMwODI0QkYwMTAwOERGMDM4IC8qIFdl
YktpdExvZ2dpbmcubSBpbiBTb3VyY2VzICovLAogCQkJCTFDRjE4RjQxMjZCQjcxQjcwMDRCMTcy
MiAvKiBXZWJLaXRMb2dJbml0aWFsaXphdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgx
MEM0MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJLaXROU1N0cmluZ0V4dHJhcy5tbSBpbiBTb3VyY2Vz
ICovLAotCQkJCTFBQUY1RDBGMEVEREU3QTcwMDhEODgzRCAvKiBXZWJLaXRQbHVnaW5BZ2VudC5k
ZWZzIGluIFNvdXJjZXMgKi8sCi0JCQkJMUFBRjVEMDAwRURERTYwNDAwOEQ4ODNEIC8qIFdlYktp
dFBsdWdpbkNsaWVudC5kZWZzIGluIFNvdXJjZXMgKi8sCi0JCQkJMUFBRjVDRjEwRURERTU4NjAw
OEQ4ODNEIC8qIFdlYktpdFBsdWdpbkhvc3QuZGVmcyBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgx
MEM1MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJLaXRTdGF0aXN0aWNzLm0gaW4gU291cmNlcyAqLywK
IAkJCQk1MTIwQzgyQzFFNTRDRThBMDAyNUIyNTAgLyogV2ViS2l0VmVyc2lvbkNoZWNrcy5tbSBp
biBTb3VyY2VzICovLAogCQkJCUVENUI5NTI0MTExQjcyNUEwMDQ3MjI5OCAvKiBXZWJMb2NhbGl6
YWJsZVN0cmluZ3MubW0gaW4gU291cmNlcyAqLywKQEAgLTM2NTcsMTEgKzM0ODYsNiBAQAogCQkJ
CTA3MkU1RjQ2MUFCRjg4NzUwMDAzQjE2NCAvKiBXZWJNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2Vy
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTEwQzFENzMxODIwMzAwRTAwMzY4ODNBIC8qIFdlYk1J
TUVUeXBlUmVnaXN0cnkubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTg1RjYyODEwNzEyQjk3MDA3
QUEzOTMgLyogV2ViTmF2aWdhdGlvbkRhdGEubW0gaW4gU291cmNlcyAqLywKLQkJCQkxQUVBNjZE
NTBEQzZCMUZGMDAzRDEyQkYgLyogV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXIubW0gaW4g
U291cmNlcyAqLywKLQkJCQkxQUVBNkE1MTBEQzhDRTJGMDAzRDEyQkYgLyogV2ViTmV0c2NhcGVQ
bHVnaW5FdmVudEhhbmRsZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovLAotCQkJCTkzOTgxMEQ2MDgy
NEJGMDEwMDhERjAzOCAvKiBXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UubW0gaW4gU291cmNlcyAq
LywKLQkJCQk5Mzk4MTBEMTA4MjRCRjAxMDA4REYwMzggLyogV2ViTmV0c2NhcGVQbHVnaW5TdHJl
YW0ubW0gaW4gU291cmNlcyAqLywKLQkJCQkxQTRERjUyMzBFQzhDNzREMDA2QkQ0QjQgLyogV2Vi
TmV0c2NhcGVQbHVnaW5WaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM2OEY2NzAwOTVCNUZD
MTAwQzI5ODRFIC8qIFdlYk5vZGVIaWdobGlnaHQubW0gaW4gU291cmNlcyAqLywKIAkJCQlBNTY4
N0JEQjEzNUI3OTFBMDA3NENCQ0IgLyogV2ViTm9kZUhpZ2hsaWdodGVyLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUM2OEY2NzIwOTVCNUZDMTAwQzI5ODRFIC8qIFdlYk5vZGVIaWdobGlnaHRWaWV3
Lm1tIGluIFNvdXJjZXMgKi8sCkBAIC0zNjkyLDcgKzM1MTYsNiBAQAogCQkJCTFBQTg3OUI3MTFD
QkU5QkYwMDNDNjY0RiAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0gaW4gU291cmNlcyAqLywK
IAkJCQkxQTA4RkVFMDFENTkzNzZFMDA4QkE4Q0IgLyogV2ViUGx1Z2luSW5mb1Byb3ZpZGVyLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwREMwODI0QkYwMTAwOERGMDM4IC8qIFdlYlBsdWdp
blBhY2thZ2UubW0gaW4gU291cmNlcyAqLywKLQkJCQkxQTc3QjAyRjBFRTc3MzA1MDBDOEExRjkg
LyogV2ViUGx1Z2luUmVxdWVzdC5tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODExMDgwODI0QkYw
MTAwOERGMDM4IC8qIFdlYlBvbGljeURlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5
ODEwRjgwODI0QkYwMTAwOERGMDM4IC8qIFdlYlByZWZlcmVuY2VzLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0MwMjNBMjQyNTFCQTQzRTAwQkE3QkI2IC8qIFdlYlByZWZlcmVuY2VzRGVmYXVsdFZh
bHVlcy5tbSBpbiBTb3VyY2VzICovLApAQCAtMzcwOSw3ICszNTMyLDYgQEAKIAkJCQk5Mzk4MTBD
QzA4MjRCRjAxMDA4REYwMzggLyogV2ViU3RyaW5nVHJ1bmNhdG9yLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQzExRUJGNDEyMTQxOUNDRTAwRDY1OUU3IC8qIFdlYlN3aXRjaGluZ0dQVUNsaWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzZBMkRFODBGRDJEMDgwMDBEMzEyREIgLyogV2ViVGV4
dENvbXBsZXRpb25Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMUE3NEEyOEYwRjRG
NzU0MDAwODJFMjI4IC8qIFdlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIubSBpbiBTb3VyY2Vz
ICovLAogCQkJCUY4MzRBQUQ4MEU2NEIxQzcwMEUyNzM3QyAvKiBXZWJUZXh0SXRlcmF0b3IubW0g
aW4gU291cmNlcyAqLywKIAkJCQlBMTBDMUQzRTE4MjAyRkM1MDAzNjg4M0EgLyogV2ViVUlLaXRT
dXBwb3J0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwQkUwODI0QkYwMTAwOERGMDM4IC8q
IFdlYlVSTHNXaXRoVGl0bGVzLm0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL0hvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFt
LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9Ib3N0ZWROZXRzY2Fw
ZVBsdWdpblN0cmVhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTIwMGVjZDkx
OTI2OGMzNDA3ZDkxOWMwNjY3MThjOTMyNDYxNGRhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9z
dGVkL0hvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aWYgVVNFKFBMVUdJTl9IT1NUX1BST0NFU1MpCi0KLSNpZm5kZWYgSG9zdGVkTmV0c2NhcGVQbHVn
aW5TdHJlYW1faAotI2RlZmluZSBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbV9oCi0KLSNpbmNs
dWRlIDxXZWJDb3JlL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmg+Ci0jaW5jbHVkZSA8V2Vi
S2l0TGVnYWN5L25wYXBpLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZi5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEZyYW1lTG9hZGVyOwot
ICAgIGNsYXNzIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOwotfQotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotY2xhc3MgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OwotCi1jbGFzcyBIb3N0
ZWROZXRzY2FwZVBsdWdpblN0cmVhbSA6IHB1YmxpYyBSZWZDb3VudGVkPEhvc3RlZE5ldHNjYXBl
UGx1Z2luU3RyZWFtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwcml2YXRl
IFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50IHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtPiBjcmVhdGUoTmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZSwgdWludDMyX3Qgc3RyZWFtSUQsIE5TVVJMUmVx
dWVzdCAqcmVxdWVzdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEhvc3Rl
ZE5ldHNjYXBlUGx1Z2luU3RyZWFtKGluc3RhbmNlLCBzdHJlYW1JRCwgcmVxdWVzdCkpOwotICAg
IH0KLSAgICBzdGF0aWMgUmVmPEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtPiBjcmVhdGUoTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZSwgV2ViQ29yZTo6RnJhbWVMb2FkZXIq
IGZyYW1lTG9hZGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSG9zdGVk
TmV0c2NhcGVQbHVnaW5TdHJlYW0oaW5zdGFuY2UsIGZyYW1lTG9hZGVyKSk7Ci0gICAgfQotCi0g
ICAgfkhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtKCk7Ci0KLSAgICB1aW50MzJfdCBzdHJlYW1J
RCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyZWFtSUQ7IH0KLQotICAgIHZvaWQgc3RhcnRTdHJlYW1X
aXRoUmVzcG9uc2UoTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UpOwotCi0gICAgLy8gRklYTUU6IENh
biB0aGVzZSBiZSBtYWRlIHByaXZhdGU/Ci0gICAgdm9pZCBkaWRSZWNlaXZlRGF0YShXZWJDb3Jl
OjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBpbnQg
bGVuZ3RoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoV2ViQ29yZTo6TmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEZhaWwoV2Vi
Q29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZUVycm9yJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHN0YXJ0KCk7Ci0gICAgdm9pZCBzdG9wKCk7
Ci0KLSAgICB2b2lkIGNhbmNlbExvYWQoTlBSZWFzb24gcmVhc29uKTsKLQotICAgIHN0YXRpYyBO
UFJlYXNvbiByZWFzb25Gb3JFcnJvcihOU0Vycm9yKiBlcnJvcik7Ci0KLXByaXZhdGU6Ci0gICAg
TlNFcnJvciAqZXJyb3JGb3JSZWFzb24oTlBSZWFzb24pIGNvbnN0OwotICAgIHZvaWQgY2FuY2Vs
TG9hZChOU0Vycm9yICopOwotCi0gICAgSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0oTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5KiwgdWludDMyX3Qgc3RyZWFtSUQsIE5TVVJMUmVxdWVzdCAq
KTsKLSAgICBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbShOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHkqLCBXZWJDb3JlOjpGcmFtZUxvYWRlciopOwotICAgIAotICAgIHZvaWQgc3RhcnRTdHJl
YW0oTlNVUkwgKiwgbG9uZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0aCwgTlNEYXRlICpsYXN0
TW9kaWZpZWREYXRlLCBOU1N0cmluZyAqbWltZVR5cGUsIE5TRGF0YSAqaGVhZGVycyk7Ci0KLSAg
ICBOU0Vycm9yICpwbHVnaW5DYW5jZWxsZWRDb25uZWN0aW9uRXJyb3IoKSBjb25zdDsKLQotICAg
IC8vIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50IG1ldGhvZHMuCi0gICAgdm9pZCB3
aWxsU2VuZFJlcXVlc3QoV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYg
cmVkaXJlY3RSZXNwb25zZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmJik+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdl
YkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYpIG92ZXJyaWRlOwotICAgIGJvb2wgd2FudHNBbGxTdHJlYW1zKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgCi0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eT4g
bV9pbnN0YW5jZTsKLSAgICB1aW50MzJfdCBtX3N0cmVhbUlEOwotICAgIFJldGFpblB0cjxOU011
dGFibGVVUkxSZXF1ZXN0PiBtX3JlcXVlc3Q7Ci0KLSAgICBSZXRhaW5QdHI8TlNVUkw+IG1fcmVx
dWVzdFVSTDsKLSAgICBSZXRhaW5QdHI8TlNVUkw+IG1fcmVzcG9uc2VVUkw7Ci0gICAgUmV0YWlu
UHRyPE5TU3RyaW5nPiBtX21pbWVUeXBlOwotCi0gICAgV2ViQ29yZTo6RnJhbWVMb2FkZXIqIG1f
ZnJhbWVMb2FkZXI7Ci0gICAgUmVmUHRyPFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyPiBtX2xvYWRlcjsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEhvc3RlZE5ldHNjYXBlUGx1Z2lu
U3RyZWFtX2gKLSNlbmRpZiAvLyBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL0hvc3RlZE5ldHNjYXBlUGx1
Z2luU3RyZWFtLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvSG9z
dGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDRlZmI5YWRhZjcxODMwNGFjZTYwNDU5ZDhmNmVmMmI0MWQ5YjIyNGMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
UGx1Z2lucy9Ib3N0ZWQvSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0KKysrIC9kZXYvbnVs
bApAQCAtMSwyODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaWYgVVNFKFBMVUdJTl9IT1NUX1BST0NFU1MpICYmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQotCi0jaW1wb3J0ICJIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbS5oIgot
Ci0jaW1wb3J0ICJOZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5oIgotI2ltcG9ydCAiTmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5LmgiCi0jaW1wb3J0ICJXZWJGcmFtZUludGVybmFsLmgiCi0jaW1w
b3J0ICJXZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcuaCIKLSNpbXBvcnQgIldlYktpdEVycm9y
c1ByaXZhdGUuaCIKLSNpbXBvcnQgIldlYktpdFBsdWdpbkhvc3QuaCIKLSNpbXBvcnQgIldlYk5T
VVJMRXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJOU1VSTFJlcXVlc3RFeHRyYXMuaCIKLSNpbXBvcnQg
IldlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgotI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudC5o
PgotI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9G
cmFtZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9QbGF0Zm9ybVN0cmF0ZWdpZXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4u
aD4KLSNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlQb2xpY3kuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
V2ViQ29yZVVSTFJlc3BvbnNlLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5o
PgotI2ltcG9ydCA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+Ci0jaW1wb3J0IDx3dGYvUmVmQ291
bnRlZExlYWtDb3VudGVyLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotREVGSU5FX0RFQlVHX09OTFlfR0xPQkFMKFdURjo6UmVmQ291bnRlZExl
YWtDb3VudGVyLCBob3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbUNvdW50ZXIsICgiSG9zdGVkTmV0
c2NhcGVQbHVnaW5TdHJlYW0iKSk7Ci0KLUhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtOjpIb3N0
ZWROZXRzY2FwZVBsdWdpblN0cmVhbShOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIGluc3Rh
bmNlLCB1aW50MzJfdCBzdHJlYW1JRCwgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0KQotICAgIDogbV9p
bnN0YW5jZShpbnN0YW5jZSkKLSAgICAsIG1fc3RyZWFtSUQoc3RyZWFtSUQpCi0gICAgLCBtX3Jl
cXVlc3QoYWRvcHROUyhbcmVxdWVzdCBtdXRhYmxlQ29weV0pKQotICAgICwgbV9yZXF1ZXN0VVJM
KFtyZXF1ZXN0IFVSTF0pCi0gICAgLCBtX2ZyYW1lTG9hZGVyKDApCi17Ci0gICAgU3RyaW5nIHJl
ZmVycmVyID0gU2VjdXJpdHlQb2xpY3k6OmdlbmVyYXRlUmVmZXJyZXJIZWFkZXIoY29yZShbaW5z
dGFuY2UtPnBsdWdpblZpZXcoKSB3ZWJGcmFtZV0pLT5kb2N1bWVudCgpLT5yZWZlcnJlclBvbGlj
eSgpLCBbcmVxdWVzdCBVUkxdLCBjb3JlKFtpbnN0YW5jZS0+cGx1Z2luVmlldygpIHdlYkZyYW1l
XSktPmxvYWRlcigpLm91dGdvaW5nUmVmZXJyZXIoKSk7Ci0gICAgaWYgKHJlZmVycmVyLmlzRW1w
dHkoKSkKLSAgICAgICAgW21fcmVxdWVzdC5nZXQoKSBfd2ViX3NldEhUVFBSZWZlcnJlcjpuaWxd
OwotICAgIGVsc2UKLSAgICAgICAgW21fcmVxdWVzdC5nZXQoKSBfd2ViX3NldEhUVFBSZWZlcnJl
cjpyZWZlcnJlcl07Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgaG9zdGVkTmV0c2NhcGVQbHVnaW5T
dHJlYW1Db3VudGVyLmluY3JlbWVudCgpOwotI2VuZGlmCi19Ci0KLUhvc3RlZE5ldHNjYXBlUGx1
Z2luU3RyZWFtOjpIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbShOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHkqIGluc3RhbmNlLCBXZWJDb3JlOjpGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIpCi0g
ICAgOiBtX2luc3RhbmNlKGluc3RhbmNlKQotICAgICwgbV9zdHJlYW1JRCgxKQotICAgICwgbV9m
cmFtZUxvYWRlcihmcmFtZUxvYWRlcikKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgaG9zdGVkTmV0
c2NhcGVQbHVnaW5TdHJlYW1Db3VudGVyLmluY3JlbWVudCgpOwotI2VuZGlmCi19Ci0KLUhvc3Rl
ZE5ldHNjYXBlUGx1Z2luU3RyZWFtOjp+SG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0oKQotewot
I2lmbmRlZiBOREVCVUcKLSAgICBob3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbUNvdW50ZXIuZGVj
cmVtZW50KCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbTo6
c3RhcnRTdHJlYW1XaXRoUmVzcG9uc2UoTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UpCi17Ci0gICAg
ZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIHJlc3BvbnNlKTsKLX0KLSAgICAKLXZvaWQgSG9zdGVkTmV0
c2NhcGVQbHVnaW5TdHJlYW06OnN0YXJ0U3RyZWFtKE5TVVJMICpyZXNwb25zZVVSTCwgbG9uZyBs
b25nIGV4cGVjdGVkQ29udGVudExlbmd0aCwgTlNEYXRlICpsYXN0TW9kaWZpZWREYXRlLCBOU1N0
cmluZyAqbWltZVR5cGUsIE5TRGF0YSAqaGVhZGVycykKLXsKLSAgICBtX3Jlc3BvbnNlVVJMID0g
cmVzcG9uc2VVUkw7Ci0gICAgbV9taW1lVHlwZSA9IG1pbWVUeXBlOwotCi0gICAgY2hhciogbWlt
ZVR5cGVVVEY4ID0gY29uc3RfY2FzdDxjaGFyKj4oW21pbWVUeXBlIFVURjhTdHJpbmddKTsKLSAg
ICBpbnQgbWltZVR5cGVVVEY4TGVuZ3RoID0gbWltZVR5cGVVVEY4ID8gc3RybGVuIChtaW1lVHlw
ZVVURjgpICsgMSA6IDA7Ci0gICAgCi0gICAgY29uc3QgY2hhciAqdXJsID0gW3Jlc3BvbnNlVVJM
IF93ZWJfVVJMQ1N0cmluZ107Ci0gICAgaW50IHVybExlbmd0aCA9IHVybCA/IHN0cmxlbih1cmwp
ICsgMSA6IDA7Ci0gICAgCi0gICAgX1dLUEhTdGFydFN0cmVhbShtX2luc3RhbmNlLT5ob3N0UHJv
eHkoKS0+cG9ydCgpLAotICAgICAgICAgICAgICAgICAgICAgbV9pbnN0YW5jZS0+cGx1Z2luSUQo
KSwKLSAgICAgICAgICAgICAgICAgICAgIG1fc3RyZWFtSUQsCi0gICAgICAgICAgICAgICAgICAg
ICBjb25zdF9jYXN0PGNoYXIqPih1cmwpLCB1cmxMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAg
ICBleHBlY3RlZENvbnRlbnRMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICBbbGFzdE1vZGlm
aWVkRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZTE5NzBdLAotICAgICAgICAgICAgICAgICAgICAgbWlt
ZVR5cGVVVEY4LCBtaW1lVHlwZVVURjhMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICBjb25z
dF9jYXN0PGNoYXIqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihbaGVhZGVycyBieXRl
c10pKSwgW2hlYWRlcnMgbGVuZ3RoXSk7Ci19Ci0gICAgICAgICAgICAgICAgICAgICAKLXZvaWQg
SG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW06OmRpZFJlY2VpdmVEYXRhKFdlYkNvcmU6Ok5ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgdWludDhfdCogYnl0ZXMsIGludCBsZW5ndGgp
Ci17Ci0gICAgX1dLUEhTdHJlYW1EaWRSZWNlaXZlRGF0YShtX2luc3RhbmNlLT5ob3N0UHJveHko
KS0+cG9ydCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnN0YW5jZS0+cGx1
Z2luSUQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RyZWFtSUQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PGNoYXIqPihyZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihieXRlcykpLCBsZW5ndGgpOwotfQotICAgIAotdm9pZCBIb3N0ZWRO
ZXRzY2FwZVBsdWdpblN0cmVhbTo6ZGlkRmluaXNoTG9hZGluZyhXZWJDb3JlOjpOZXRzY2FwZVBs
dWdJblN0cmVhbUxvYWRlciopCi17Ci0gICAgX1dLUEhTdHJlYW1EaWRGaW5pc2hMb2FkaW5nKG1f
aW5zdGFuY2UtPmhvc3RQcm94eSgpLT5wb3J0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5zdGFuY2UtPnBsdWdpbklEKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fc3RyZWFtSUQpOwotICAgIG1faW5zdGFuY2UtPmRpc2Nvbm5lY3RTdHJlYW0odGhp
cyk7Ci19Ci0KLXZvaWQgSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW06OndpbGxTZW5kUmVxdWVz
dChOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3Qs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYmKT4mJiBjYWxsYmFjaykKLXsKLSAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIG5vdGlmeSB0aGUgcGx1Zy1pbiB3aXRoIE5QUF9VUkxSZWRpcmVjdE5vdGlmeSBoZXJlLgot
ICAgIGNhbGxiYWNrKFdURk1vdmUocmVxdWVzdCkpOwotfQotCi12b2lkIEhvc3RlZE5ldHNjYXBl
UGx1Z2luU3RyZWFtOjpkaWRSZWNlaXZlUmVzcG9uc2UoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2Fk
ZXIqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBOU1VSTFJlc3Bv
bnNlICpyID0gcmVzcG9uc2UubnNVUkxSZXNwb25zZSgpOwotICAgIAotICAgIE5TTXV0YWJsZURh
dGEgKnRoZUhlYWRlcnMgPSBuaWw7Ci0gICAgbG9uZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0
aCA9IFtyIGV4cGVjdGVkQ29udGVudExlbmd0aF07Ci0gICAgCi0gICAgaWYgKFtyIGlzS2luZE9m
Q2xhc3M6W05TSFRUUFVSTFJlc3BvbnNlIGNsYXNzXV0pIHsKLSAgICAgICAgTlNIVFRQVVJMUmVz
cG9uc2UgKmh0dHBSZXNwb25zZSA9IChOU0hUVFBVUkxSZXNwb25zZSAqKXI7Ci0gICAgICAgIHRo
ZUhlYWRlcnMgPSBbTlNNdXRhYmxlRGF0YSBkYXRhV2l0aENhcGFjaXR5OjEwMjRdOwotICAgICAg
ICAKLSAgICAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIG5pY2UgdG8gYmUgYWJsZSB0byBnZXQg
dGhlIHJhdyBIVFRQIGhlYWRlciBibG9jay4KLSAgICAgICAgLy8gVGhpcyBpbmNsdWRlcyB0aGUg
SFRUUCB2ZXJzaW9uLCB0aGUgcmVhbCBzdGF0dXMgdGV4dCwKLSAgICAgICAgLy8gYWxsIGhlYWRl
cnMgaW4gdGhlaXIgb3JpZ2luYWwgb3JkZXIgYW5kIGluY2x1ZGluZyBkdXBsaWNhdGVzLAotICAg
ICAgICAvLyBhbmQgYWxsIG9yaWdpbmFsIGJ5dGVzIHZlcmJhdGltLCByYXRoZXIgdGhhbiBzZW50
IHRocm91Z2ggVW5pY29kZSB0cmFuc2xhdGlvbi4KLSAgICAgICAgLy8gVW5mb3J0dW5hdGVseSBO
U0hUVFBVUkxSZXNwb25zZSBkb2Vzbid0IHByb3ZpZGUgYWNjZXNzIGF0IHRoYXQgbG93IGEgbGV2
ZWwuCi0gICAgICAgIAotICAgICAgICBbdGhlSGVhZGVycyBhcHBlbmRCeXRlczoiSFRUUCAiIGxl
bmd0aDo1XTsKLSAgICAgICAgY2hhciBzdGF0dXNTdHJbMTBdOwotICAgICAgICBsb25nIHN0YXR1
c0NvZGUgPSBbaHR0cFJlc3BvbnNlIHN0YXR1c0NvZGVdOwotICAgICAgICBzbnByaW50ZihzdGF0
dXNTdHIsIHNpemVvZihzdGF0dXNTdHIpLCAiJWxkIiwgc3RhdHVzQ29kZSk7Ci0gICAgICAgIFt0
aGVIZWFkZXJzIGFwcGVuZEJ5dGVzOnN0YXR1c1N0ciBsZW5ndGg6c3RybGVuKHN0YXR1c1N0cild
OwotICAgICAgICBbdGhlSGVhZGVycyBhcHBlbmRCeXRlczoiIE9LXG4iIGxlbmd0aDo0XTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIEhBQ0s6IHBhc3MgdGhlIGhlYWRlcnMgdGhyb3VnaCBhcyBVVEYt
OC4KLSAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGludGVuZGVkIGJlaGF2aW9yOyB3ZSdyZSBz
dXBwb3NlZCB0byBwYXNzIG9yaWdpbmFsIGJ5dGVzIHZlcmJhdGltLgotICAgICAgICAvLyBCdXQg
d2UgZG9uJ3QgaGF2ZSB0aGUgb3JpZ2luYWwgYnl0ZXMsIHdlIGhhdmUgTlNTdHJpbmdzIGJ1aWx0
IGJ5IHRoZSBVUkwgbG9hZGluZyBzeXN0ZW0uCi0gICAgICAgIC8vIEl0IGhvcGVmdWxseSBzaG91
bGRuJ3QgbWF0dGVyLCBzaW5jZSBSRkMyNjE2L1JGQzgyMiByZXF1aXJlIEFTQ0lJLW9ubHkgaGVh
ZGVycywKLSAgICAgICAgLy8gYnV0IHN1cmVseSBzb21lb25lIG91dCB0aGVyZSBpcyB1c2luZyBu
b24tQVNDSUkgY2hhcmFjdGVycywgYW5kIGhvcGVmdWxseSBVVEYtOCBpcyBhZGVxdWF0ZSBoZXJl
LgotICAgICAgICAvLyBJdCBzZWVtcyBiZXR0ZXIgdGhhbiBOU0FTQ0lJU3RyaW5nRW5jb2Rpbmcs
IHdoaWNoIHdpbGwgbG9zZSBpbmZvcm1hdGlvbiBpZiBub24tQVNDSUkgaXMgdXNlZC4KLSAgICAg
ICAgCi0gICAgICAgIE5TRGljdGlvbmFyeSAqaGVhZGVyRGljdCA9IFtodHRwUmVzcG9uc2UgYWxs
SGVhZGVyRmllbGRzXTsKLSAgICAgICAgTlNBcnJheSAqa2V5cyA9IFtbaGVhZGVyRGljdCBhbGxL
ZXlzXSBzb3J0ZWRBcnJheVVzaW5nU2VsZWN0b3I6QHNlbGVjdG9yKGNhc2VJbnNlbnNpdGl2ZUNv
bXBhcmU6KV07Ci0gICAgICAgIE5TRW51bWVyYXRvciAqaSA9IFtrZXlzIG9iamVjdEVudW1lcmF0
b3JdOwotICAgICAgICBOU1N0cmluZyAqazsKLSAgICAgICAgd2hpbGUgKChrID0gW2kgbmV4dE9i
amVjdF0pICE9IG5pbCkgewotICAgICAgICAgICAgTlNTdHJpbmcgKnYgPSBbaGVhZGVyRGljdCBv
YmplY3RGb3JLZXk6a107Ci0gICAgICAgICAgICBbdGhlSGVhZGVycyBhcHBlbmREYXRhOltrIGRh
dGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07Ci0gICAgICAgICAgICBbdGhl
SGVhZGVycyBhcHBlbmRCeXRlczoiOiAiIGxlbmd0aDoyXTsKLSAgICAgICAgICAgIFt0aGVIZWFk
ZXJzIGFwcGVuZERhdGE6W3YgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rpbmdd
XTsKLSAgICAgICAgICAgIFt0aGVIZWFkZXJzIGFwcGVuZEJ5dGVzOiJcbiIgbGVuZ3RoOjFdOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB0aGUgY29udGVudCBpcyBlbmNvZGVk
IChtb3N0IGxpa2VseSBjb21wcmVzc2VkKSwgdGhlbiBkb24ndCBzZW5kIGl0cyBsZW5ndGggdG8g
dGhlIHBsdWdpbiwKLSAgICAgICAgLy8gd2hpY2ggaXMgb25seSBpbnRlcmVzdGVkIGluIHRoZSBk
ZWNvZGVkIGxlbmd0aCwgbm90IHlldCBrbm93biBhdCB0aGUgbW9tZW50LgotICAgICAgICAvLyA8
cmRhcjovL3Byb2JsZW0vNDQ3MDU5OT4gdHJhY2tzIGEgcmVxdWVzdCBmb3IgLVtOU1VSTFJlc3Bv
bnNlIGV4cGVjdGVkQ29udGVudExlbmd0aF0gdG8gaW5jb3Jwb3JhdGUgdGhpcyBsb2dpYy4KLSAg
ICAgICAgTlNTdHJpbmcgKmNvbnRlbnRFbmNvZGluZyA9IChOU1N0cmluZyAqKVtbKE5TSFRUUFVS
TFJlc3BvbnNlICopciBhbGxIZWFkZXJGaWVsZHNdIG9iamVjdEZvcktleTpAIkNvbnRlbnQtRW5j
b2RpbmciXTsKLSAgICAgICAgaWYgKGNvbnRlbnRFbmNvZGluZyAmJiAhW2NvbnRlbnRFbmNvZGlu
ZyBpc0VxdWFsVG9TdHJpbmc6QCJpZGVudGl0eSJdKQotICAgICAgICAgICAgZXhwZWN0ZWRDb250
ZW50TGVuZ3RoID0gLTE7Ci0KLSAgICAgICAgW3RoZUhlYWRlcnMgYXBwZW5kQnl0ZXM6IlwwIiBs
ZW5ndGg6MV07Ci0gICAgfQotICAgIAotICAgIHN0YXJ0U3RyZWFtKFtyIFVSTF0sIGV4cGVjdGVk
Q29udGVudExlbmd0aCwgW3IgX2xhc3RNb2RpZmllZERhdGVdLCBbciBNSU1FVHlwZV0sIHRoZUhl
YWRlcnMpOwotfQotCi1OUFJlYXNvbiBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbTo6cmVhc29u
Rm9yRXJyb3IoTlNFcnJvciAqZXJyb3IpCi17Ci0gICAgaWYgKCFlcnJvcikKLSAgICAgICAgcmV0
dXJuIE5QUkVTX0RPTkU7Ci0KLSAgICBpZiAoW1tlcnJvciBkb21haW5dIGlzRXF1YWxUb1N0cmlu
ZzpOU1VSTEVycm9yRG9tYWluXSAmJiBbZXJyb3IgY29kZV0gPT0gTlNVUkxFcnJvckNhbmNlbGxl
ZCkKLSAgICAgICAgcmV0dXJuIE5QUkVTX1VTRVJfQlJFQUs7Ci0KLSAgICByZXR1cm4gTlBSRVNf
TkVUV09SS19FUlI7Ci19Ci0KLXZvaWQgSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW06OmRpZEZh
aWwoV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZUVycm9yJiBlcnJvcikKLXsKLSAgICBpZiAoTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkq
IGhvc3RQcm94eSA9IG1faW5zdGFuY2UtPmhvc3RQcm94eSgpKQotICAgICAgICBfV0tQSFN0cmVh
bURpZEZhaWwoaG9zdFByb3h5LT5wb3J0KCksIG1faW5zdGFuY2UtPnBsdWdpbklEKCksIG1fc3Ry
ZWFtSUQsIHJlYXNvbkZvckVycm9yKGVycm9yKSk7Ci0gICAgbV9pbnN0YW5jZS0+ZGlzY29ubmVj
dFN0cmVhbSh0aGlzKTsKLX0KLQotYm9vbCBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbTo6d2Fu
dHNBbGxTdHJlYW1zKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotdm9pZCBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbTo6c3RhcnQo
KQotewotICAgIEFTU0VSVChtX3JlcXVlc3QpOwotICAgIEFTU0VSVCghbV9mcmFtZUxvYWRlcik7
Ci0gICAgQVNTRVJUKCFtX2xvYWRlcik7Ci0KLSAgICB3ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIo
KS5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoKmNvcmUoW21faW5zdGFuY2UtPnBsdWdpblZpZXco
KSB3ZWJGcmFtZV0pLCAqdGhpcywgbV9yZXF1ZXN0LmdldCgpLCBbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IFJlZiB7ICp0aGlzIH1dIChSZWZQdHI8V2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXI+JiYgbG9hZGVyKSB7Ci0gICAgICAgIG1fbG9hZGVyID0gV1RGTW92ZShsb2FkZXIpOwot
ICAgIH0pOwotfQotCi12b2lkIEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtOjpzdG9wKCkKLXsK
LSAgICBBU1NFUlQoIW1fZnJhbWVMb2FkZXIpOwotICAgIAotICAgIGlmICghbV9sb2FkZXItPmlz
RG9uZSgpKQotICAgICAgICBtX2xvYWRlci0+Y2FuY2VsKG1fbG9hZGVyLT5jYW5jZWxsZWRFcnJv
cigpKTsKLX0KLSAgICAKLXZvaWQgSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW06OmNhbmNlbExv
YWQoTlBSZWFzb24gcmVhc29uKQotewotICAgIGNhbmNlbExvYWQoZXJyb3JGb3JSZWFzb24ocmVh
c29uKSk7Ci19Ci0KLXZvaWQgSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW06OmNhbmNlbExvYWQo
TlNFcnJvciAqZXJyb3IpCi17Ci0gICAgaWYgKG1fZnJhbWVMb2FkZXIpIHsKLSAgICAgICAgQVNT
RVJUKCFtX2xvYWRlcik7Ci0gICAgICAgIAotICAgICAgICBEb2N1bWVudExvYWRlciogZG9jdW1l
bnRMb2FkZXIgPSBtX2ZyYW1lTG9hZGVyLT5hY3RpdmVEb2N1bWVudExvYWRlcigpOwotICAgICAg
ICBpZiAoZG9jdW1lbnRMb2FkZXIgJiYgZG9jdW1lbnRMb2FkZXItPmlzTG9hZGluZ01haW5SZXNv
dXJjZSgpKQotICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXItPmNhbmNlbE1haW5SZXNvdXJjZUxv
YWQoZXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX2xvYWRlci0+
aXNEb25lKCkpIHsKLSAgICAgICAgLy8gQ2FuY2VsbGluZyB0aGUgbG9hZCB3aWxsIGRpc2Nvbm5l
Y3QgdGhlIHN0cmVhbSBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gZG8gaXQgZXhwbGljaXRseS4KLSAg
ICAgICAgbV9sb2FkZXItPmNhbmNlbChlcnJvcik7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1faW5z
dGFuY2UtPmRpc2Nvbm5lY3RTdHJlYW0odGhpcyk7Ci19Ci0KLU5TRXJyb3IgKkhvc3RlZE5ldHNj
YXBlUGx1Z2luU3RyZWFtOjpwbHVnaW5DYW5jZWxsZWRDb25uZWN0aW9uRXJyb3IoKSBjb25zdAot
ewotICAgIHJldHVybiBhZG9wdE5TKFtbTlNFcnJvciBhbGxvY10gX2luaXRXaXRoUGx1Z2luRXJy
b3JDb2RlOldlYktpdEVycm9yUGx1Z0luQ2FuY2VsbGVkQ29ubmVjdGlvbgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRVUkw6bV9yZXNwb25zZVVSTCA/
IG1fcmVzcG9uc2VVUkwuZ2V0KCkgOiBtX3JlcXVlc3RVUkwuZ2V0KCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5QYWdlVVJMOm5pbAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbk5hbWU6W1ttX2luc3RhbmNlLT5w
bHVnaW5WaWV3KCkgcGx1Z2luUGFja2FnZV0gcGx1Z2luSW5mb10ubmFtZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6bV9taW1lVHlwZS5nZXQo
KV0pLmF1dG9yZWxlYXNlKCk7Ci19Ci0KLU5TRXJyb3IgKkhvc3RlZE5ldHNjYXBlUGx1Z2luU3Ry
ZWFtOjplcnJvckZvclJlYXNvbihOUFJlYXNvbiByZWFzb24pIGNvbnN0Ci17Ci0gICAgaWYgKHJl
YXNvbiA9PSBOUFJFU19ET05FKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgaWYgKHJlYXNv
biA9PSBOUFJFU19VU0VSX0JSRUFLKQotICAgICAgICByZXR1cm4gW05TRXJyb3IgX3dlYktpdEVy
cm9yV2l0aERvbWFpbjpOU1VSTEVycm9yRG9tYWluCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2RlOk5TVVJMRXJyb3JDYW5jZWxsZWQgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMOm1fcmVzcG9uc2VVUkwgPyBtX3Jlc3Bv
bnNlVVJMLmdldCgpIDogbV9yZXF1ZXN0VVJMLmdldCgpXTsKLQotICAgIHJldHVybiBwbHVnaW5D
YW5jZWxsZWRDb25uZWN0aW9uRXJyb3IoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZiAvLyBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMv
SG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOGY0NDQ5OGI3YjA4NjI2M2RmZmZmMGQ5ZGM1MTRlZTI3MDY5
ZTE5YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5h
Z2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZiBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykK
LQotI2lmbmRlZiBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyX2gKLSNkZWZpbmUgTmV0c2NhcGVQ
bHVnaW5Ib3N0TWFuYWdlcl9oCi0KLSNpbXBvcnQgPHd0Zi9IYXNoTWFwLmg+Ci0jaW1wb3J0IDx3
dGYvUmVmUHRyLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW1wb3J0IDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotQGNsYXNzIFdlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmll
dzsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTsKLWNsYXNzIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5OwotCi1jbGFzcyBOZXRzY2FwZVBs
dWdpbkhvc3RNYW5hZ2VyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgTmV0c2NhcGVQbHVnaW5Ib3N0
TWFuYWdlciYgc2luZ2xldG9uKCk7Ci0gICAgCi0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eT4gaW5zdGFudGlhdGVQbHVnaW4oY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoLCBj
cHVfdHlwZV90IHBsdWdpbkFyY2hpdGVjdHVyZSwgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlm
aWVyLCBXZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcgKiwgTlNTdHJpbmcgKm1pbWVUeXBlLCBO
U0FycmF5ICphdHRyaWJ1dGVLZXlzLCBOU0FycmF5ICphdHRyaWJ1dGVWYWx1ZXMsIE5TU3RyaW5n
ICp1c2VyQWdlbnQsIE5TVVJMICpzb3VyY2VVUkwsIGJvb2wgZnVsbEZyYW1lLCBib29sIGlzUHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZCwgYm9vbCBpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVk
LCBib29sIGhvc3RMYXllcnNJbldpbmRvd1NlcnZlcik7Ci0KLSAgICB2b2lkIHBsdWdpbkhvc3RE
aWVkKE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5Kik7Ci0KLSAgICB2b2lkIGNyZWF0ZVByb3BlcnR5
TGlzdEZpbGUoY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoLCBjcHVfdHlwZV90IHBsdWdpbkFyY2hp
dGVjdHVyZSwgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKTsKLSAgICAKLSAgICB2b2lk
IGRpZENyZWF0ZVdpbmRvdygpOwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBOZXZlckRl
c3Ryb3llZDxOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyPjsKLSAgICBOZXRzY2FwZVBsdWdpbkhv
c3RQcm94eSogaG9zdEZvclBsdWdpbihjb25zdCBTdHJpbmcmIHBsdWdpblBhdGgsIGNwdV90eXBl
X3QgcGx1Z2luQXJjaGl0ZWN0dXJlLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpOwot
Ci0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcigpOwotICAgIH5OZXRzY2FwZVBsdWdpbkhv
c3RNYW5hZ2VyKCk7Ci0gICAgCi0gICAgYm9vbCBzcGF3blBsdWdpbkhvc3QoY29uc3QgU3RyaW5n
JiBwbHVnaW5QYXRoLCBjcHVfdHlwZV90IHBsdWdpbkFyY2hpdGVjdHVyZSwgbWFjaF9wb3J0X3Qg
Y2xpZW50UG9ydCwgbWFjaF9wb3J0X3QmIHBsdWdpbkhvc3RQb3J0LCBQcm9jZXNzU2VyaWFsTnVt
YmVyJiBwbHVnaW5Ib3N0UFNOKTsKLSAgICAKLSAgICBib29sIGluaXRpYWxpemVWZW5kb3JQb3J0
KCk7Ci0gICAgCi0gICAgbWFjaF9wb3J0X3QgbV9wbHVnaW5WZW5kb3JQb3J0IHsgTUFDSF9QT1JU
X05VTEwgfTsKLSAgICAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmVhbGx5IGJlIGEgSGFz
aE1hcCBvZiBSZXRhaW5QdHJzLCBidXQgdGhhdCBkb2Vzbid0IHdvcmsgcmlnaHQgbm93LgotICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5Kj4gUGx1Z2lu
SG9zdE1hcDsKLSAgICBQbHVnaW5Ib3N0TWFwIG1fcGx1Z2luSG9zdHM7Ci19OwotICAgIAotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2Vy
X2gKLSNlbmRpZiAvLyBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFn
ZXIubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBs
dWdpbkhvc3RNYW5hZ2VyLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWI2ZDgx
OWY5ZDk3NzhhYTVhNjIxYjgwZWEzMGIxMzg1ZGU1NmRlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMv
SG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW0KKysrIC9kZXYvbnVsbApAQCAtMSwz
MjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpZiBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCi0KLSNpbXBvcnQgIk5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIuaCIKLQotI2lt
cG9ydCAiTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkuaCIKLSNpbXBvcnQgIk5ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eS5oIgotI2ltcG9ydCAiV2ViTG9jYWxpemFibGVTdHJpbmdzSW50ZXJuYWwu
aCIKLSNpbXBvcnQgIldlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5oIgotI2ltcG9ydCA8bWFjaC9t
YWNoX3BvcnQuaD4KLSNpbXBvcnQgPHBhbC9zcGkvY2YvQ0ZMb2NhbGVTUEkuaD4KLSNpbXBvcnQg
PHBhbC9zcGkvY29jb2EvUXVhcnR6Q29yZVNQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9T
ZXJ2ZXJzU1BJLmg+Ci0jaW1wb3J0IDxzcGF3bi5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMu
aD4KLSNpbXBvcnQgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KLQotZXh0ZXJuICJDIiB7Ci0jaW1wb3J0ICJXZWJLaXRQbHVnaW5BZ2VudC5oIgot
I2ltcG9ydCAiV2ViS2l0UGx1Z2luSG9zdC5oIgotfQotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLU5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXImIE5l
dHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OnNpbmdsZXRvbigpCi17Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI+IHBsdWdpbkhvc3RNYW5hZ2VyOwot
ICAgIHJldHVybiBwbHVnaW5Ib3N0TWFuYWdlcjsKLX0KLQotc3RhdGljIE5TU3RyaW5nICogY29u
c3QgcGx1Z2luSG9zdEFwcE5hbWUgPSBAIldlYktpdFBsdWdpbkhvc3QuYXBwIjsKLQotTmV0c2Nh
cGVQbHVnaW5Ib3N0TWFuYWdlcjo6TmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcigpCi0gICAgOiBt
X3BsdWdpblZlbmRvclBvcnQoTUFDSF9QT1JUX05VTEwpCi17Ci19Ci0gCi1OZXRzY2FwZVBsdWdp
bkhvc3RNYW5hZ2VyOjp+TmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcigpCi17Ci19Ci0KLU5ldHNj
YXBlUGx1Z2luSG9zdFByb3h5KiBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpob3N0Rm9yUGx1
Z2luKGNvbnN0IFdURjo6U3RyaW5nJiBwbHVnaW5QYXRoLCBjcHVfdHlwZV90IHBsdWdpbkFyY2hp
dGVjdHVyZSwgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKQotewotICAgIFBsdWdpbkhv
c3RNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3BsdWdpbkhvc3RzLmFkZChwbHVnaW5QYXRoLCBu
dWxscHRyKTsKLSAgICAKLSAgICAvLyBUaGUgcGFja2FnZSB3YXMgYWxyZWFkeSBpbiB0aGUgbWFw
LCBqdXN0IHJldHVybiBpdC4KLSAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBy
ZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgCi0gICAgbWFjaF9wb3J0X3Qg
Y2xpZW50UG9ydCA9IE1BQ0hfUE9SVF9OVUxMOwotICAgIGlmIChtYWNoX3BvcnRfYWxsb2NhdGUo
bWFjaF90YXNrX3NlbGYoKSwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZjbGllbnRQb3J0KSAh
PSBLRVJOX1NVQ0NFU1MpIHsKLSAgICAgICAgbV9wbHVnaW5Ib3N0cy5yZW1vdmUocmVzdWx0Lml0
ZXJhdG9yKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIAotICAgIG1hY2hf
cG9ydF90IHBsdWdpbkhvc3RQb3J0ID0gTUFDSF9QT1JUX05VTEw7Ci0gICAgUHJvY2Vzc1Nlcmlh
bE51bWJlciBwbHVnaW5Ib3N0UFNOOwotICAgIGlmICghc3Bhd25QbHVnaW5Ib3N0KHBsdWdpblBh
dGgsIHBsdWdpbkFyY2hpdGVjdHVyZSwgY2xpZW50UG9ydCwgcGx1Z2luSG9zdFBvcnQsIHBsdWdp
bkhvc3RQU04pKSB7Ci0gICAgICAgIG1hY2hfcG9ydF9tb2RfcmVmcyhtYWNoX3Rhc2tfc2VsZigp
LCBjbGllbnRQb3J0LCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgLTEpOwotICAgICAgICBtX3Bs
dWdpbkhvc3RzLnJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0gICAgCi0gICAgLy8gU2luY2UgRmxhc2ggTlBPYmplY3RzIGFkZCBtZXRob2Rz
IGR5bmFtaWNhbGx5LCB3ZSBkb24ndCB3YW50IHRvIGNhY2hlIHdoZW4gYSBwcm9wZXJ0eS9tZXRo
b2QgZG9lc24ndCBleGlzdAotICAgIC8vIG9uIGFuIG9iamVjdCBiZWNhdXNlIGl0IGNvdWxkIGJl
IGFkZGVkIGxhdGVyLgotICAgIGJvb2wgc2hvdWxkQ2FjaGVNaXNzaW5nUHJvcGVydGllc0FuZE1l
dGhvZHMgPSBidW5kbGVJZGVudGlmaWVyICE9ICJjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIu
cGx1Z2luIjsKLSAgICAKLSAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0g
bmV3IE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KGNsaWVudFBvcnQsIHBsdWdpbkhvc3RQb3J0LCBw
bHVnaW5Ib3N0UFNOLCBzaG91bGRDYWNoZU1pc3NpbmdQcm9wZXJ0aWVzQW5kTWV0aG9kcyk7Ci0g
ICAgCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGhvc3RQcm94eTsKLSAgICAKLSAgICBy
ZXR1cm4gaG9zdFByb3h5OwotfQotCi1zdGF0aWMgTlNTdHJpbmcgKnByZWZlcnJlZEJ1bmRsZUxv
Y2FsaXphdGlvbk5hbWUoKQotewotICAgIC8vIEZJWE1FOiBBbnkgdXNlIG9mIHRoaXMgZnVuY3Rp
b24gdG8gcGFzcyBsb2NhbGl6YXRpb25zIHRvIGFub3RoZXIKLSAgICAvLyBwcm9jZXNzIGlzIGxp
a2VseSBub3QgY29tcGxldGVseSByaWdodCwgc2luY2UgaXQgb25seSBjb25zaWRlcnMKLSAgICAv
LyBvbmUgbG9jYWxpemF0aW9uLgotICAgIE5TQXJyYXkgKnByZWZlcnJlZExvY2FsaXphdGlvbnMg
PSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIHByZWZlcnJlZExvY2FsaXphdGlvbnNdOwotICAgIGlm
ICghcHJlZmVycmVkTG9jYWxpemF0aW9ucyB8fCAhW3ByZWZlcnJlZExvY2FsaXphdGlvbnMgY291
bnRdKQotICAgICAgICByZXR1cm4gQCJlbl9VUyI7Ci0KLSAgICBOU1N0cmluZyAqbGFuZ3VhZ2Ug
PSBbcHJlZmVycmVkTG9jYWxpemF0aW9ucyBvYmplY3RBdEluZGV4OjBdOwotCi0gICAgLy8gRklY
TUU6IDxyZGFyOi8vcHJvYmxlbS8xODA4Mzg4MD4gUmVwbGFjZSB1c2Ugb2YgU2NyaXB0IE1hbmFn
ZXIKLSAgICAvLyB0byBjYW5vbmljYWxpemUgbG9jYWxlcyB3aXRoIGEgY3VzdG9tIFdlYi1zcGVj
aWZpYyB0YWJsZQotICAgIExhbmdDb2RlIGxhbmd1YWdlQ29kZTsKLSAgICBSZWdpb25Db2RlIHJl
Z2lvbkNvZGU7Ci0KLSAgICBCb29sZWFuIHN1Y2Nlc3MgPSBDRkxvY2FsZUdldExhbmd1YWdlUmVn
aW9uRW5jb2RpbmdGb3JMb2NhbGVJZGVudGlmaWVyKChfX2JyaWRnZSBDRlN0cmluZ1JlZilsYW5n
dWFnZSwgJmxhbmd1YWdlQ29kZSwgJnJlZ2lvbkNvZGUsIG51bGxwdHIsIG51bGxwdHIpOwotICAg
IGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuIEAiZW5fVVMiOwotCi0gICAgcmV0dXJuIGFk
b3B0Q0YoQ0ZMb2NhbGVDcmVhdGVDYW5vbmljYWxMb2NhbGVJZGVudGlmaWVyRnJvbVNjcmlwdE1h
bmFnZXJDb2RlcygwLCBsYW5ndWFnZUNvZGUsIHJlZ2lvbkNvZGUpKS5icmlkZ2luZ0F1dG9yZWxl
YXNlKCk7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6c3Bhd25QbHVnaW5I
b3N0KGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCwgY3B1X3R5cGVfdCBwbHVnaW5BcmNoaXRlY3R1
cmUsIG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIG1hY2hfcG9ydF90JiBwbHVnaW5Ib3N0UG9ydCwg
UHJvY2Vzc1NlcmlhbE51bWJlciYgcGx1Z2luSG9zdFBTTikKLXsKLSAgICBpZiAobV9wbHVnaW5W
ZW5kb3JQb3J0ID09IE1BQ0hfUE9SVF9OVUxMKSB7Ci0gICAgICAgIGlmICghaW5pdGlhbGl6ZVZl
bmRvclBvcnQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAo
IUNBUmVuZGVyU2VydmVyU3RhcnQoKSkKLSAgICAgICAgcmV0dXJuIE1BQ0hfUE9SVF9OVUxMOwot
Ci0gICAgbWFjaF9wb3J0X3QgcmVuZGVyU2VydmVyUG9ydCA9IENBUmVuZGVyU2VydmVyR2V0UG9y
dCgpOwotICAgIGlmICghTUFDSF9QT1JUX1ZBTElEKHJlbmRlclNlcnZlclBvcnQpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBOU1N0cmluZyAqcGx1Z2luSG9zdEFwcFBhdGggPSBbW05T
QnVuZGxlIGJ1bmRsZUZvckNsYXNzOltXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UgY2xhc3NdXSBw
YXRoRm9yQXV4aWxpYXJ5RXhlY3V0YWJsZTpwbHVnaW5Ib3N0QXBwTmFtZV07Ci0gICAgTlNTdHJp
bmcgKnBsdWdpbkhvc3RBcHBFeGVjdXRhYmxlUGF0aCA9IFtbTlNCdW5kbGUgYnVuZGxlV2l0aFBh
dGg6cGx1Z2luSG9zdEFwcFBhdGhdIGV4ZWN1dGFibGVQYXRoXTsKLQotICAgIE5TRGljdGlvbmFy
eSAqbGF1bmNoUHJvcGVydGllcyA9IEB7Ci0gICAgICAgIEAicGx1Z2luSG9zdFBhdGgiOiBwbHVn
aW5Ib3N0QXBwRXhlY3V0YWJsZVBhdGgsCi0gICAgICAgIEAiY3B1VHlwZSI6IEAocGx1Z2luQXJj
aGl0ZWN0dXJlKSwKLSAgICAgICAgQCJsb2NhbGl6YXRpb24iOiBwcmVmZXJyZWRCdW5kbGVMb2Nh
bGl6YXRpb25OYW1lKCksCi0gICAgfTsKLSAgICBOU0RhdGEgKmRhdGEgPSBbTlNQcm9wZXJ0eUxp
c3RTZXJpYWxpemF0aW9uIGRhdGFXaXRoUHJvcGVydHlMaXN0OmxhdW5jaFByb3BlcnRpZXMgZm9y
bWF0Ok5TUHJvcGVydHlMaXN0QmluYXJ5Rm9ybWF0X3YxXzAgb3B0aW9uczowIGVycm9yOm51bGxw
dHJdOwotICAgIEFTU0VSVChkYXRhKTsKLQotICAgIGtlcm5fcmV0dXJuX3Qga3IgPSBfV0tQQVNw
YXduUGx1Z2luSG9zdChtX3BsdWdpblZlbmRvclBvcnQsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KGNvbnN0X2Nhc3Q8dm9pZCo+KFtkYXRhIGJ5dGVzXSkpLCBbZGF0YSBsZW5ndGhdLCAmcGx1
Z2luSG9zdFBvcnQpOwotCi0gICAgaWYgKGtyID09IE1BQ0hfU0VORF9JTlZBTElEX0RFU1QpIHsK
LSAgICAgICAgLy8gVGhlIHBsdWctaW4gdmVuZG9yIHBvcnQgaGFzIGdvbmUgYXdheSBmb3Igc29t
ZSByZWFzb24uIFRyeSB0byByZWluaXRpYWxpemUgaXQuCi0gICAgICAgIG1fcGx1Z2luVmVuZG9y
UG9ydCA9IE1BQ0hfUE9SVF9OVUxMOwotICAgICAgICBpZiAoIWluaXRpYWxpemVWZW5kb3JQb3J0
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICAvLyBBbmQg
c3Bhd24gdGhlIHBsdWctaW4gaG9zdCBhZ2Fpbi4KLSAgICAgICAga3IgPSBfV0tQQVNwYXduUGx1
Z2luSG9zdChtX3BsdWdpblZlbmRvclBvcnQsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGNv
bnN0X2Nhc3Q8dm9pZCo+KFtkYXRhIGJ5dGVzXSkpLCBbZGF0YSBsZW5ndGhdLCAmcGx1Z2luSG9z
dFBvcnQpOwotICAgIH0KLQotICAgIGlmIChrciAhPSBLRVJOX1NVQ0NFU1MpIHsKLSAgICAgICAg
Ly8gRklYTUU6IENoZWNrIGZvciBpbnZhbGlkIGRlc3QgYW5kIHRyeSB0byByZS1zcGF3biB0aGUg
cGx1Zy1pbiBhZ2VudC4KLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc3Bhd24gcGx1Zy1p
biBob3N0LCBlcnJvciAleCIsIGtyKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICAKLSAgICBOU1N0cmluZyAqdmlzaWJsZU5hbWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpVSV9TVFJJTkdfSU5URVJOQUwoIiVAICglQCBJbnRlcm5ldCBwbHVnLWluKSIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJ2aXNpYmxlIG5hbWUgb2YgdGhlIHBsdWctaW4gaG9zdCBwcm9jZXNzLiBUaGUgZmlyc3QgYXJn
dW1lbnQgaXMgdGhlIHBsdWctaW4gbmFtZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmQgdGhlIHNlY29uZCBhcmd1
bWVudCBpcyB0aGUgYXBwbGljYXRpb24gbmFtZS4iKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgW1soTlNTdHJpbmcqKXBsdWdpblBhdGggbGFzdFBhdGhDb21wb25lbnRdIHN0cmluZ0J5
RGVsZXRpbmdQYXRoRXh0ZW5zaW9uXSwgW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBwcm9j
ZXNzTmFtZV1dOwotICAgIAotICAgIGF1dG8gaG9zdFByb3BlcnRpZXMgPSBAewotICAgICAgICBA
InZpc2libGVOYW1lIjogdmlzaWJsZU5hbWUsCi0gICAgICAgIEAiYnVuZGxlUGF0aCI6IChOU1N0
cmluZyAqKXBsdWdpblBhdGgsCi0gICAgfTsKLSAgICBkYXRhID0gW05TUHJvcGVydHlMaXN0U2Vy
aWFsaXphdGlvbiBkYXRhV2l0aFByb3BlcnR5TGlzdDpob3N0UHJvcGVydGllcyBmb3JtYXQ6TlNQ
cm9wZXJ0eUxpc3RCaW5hcnlGb3JtYXRfdjFfMCBvcHRpb25zOjAgZXJyb3I6TlVMTF07Ci0gICAg
QVNTRVJUKGRhdGEpOwotCi0gICAgUHJvY2Vzc1NlcmlhbE51bWJlciBwc247Ci0KLSAgICBBTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIEdldEN1cnJlbnRQcm9jZXNzKCZw
c24pOwotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotCi0gICAgQVNTRVJU
KE1BQ0hfUE9SVF9WQUxJRChjbGllbnRQb3J0KSk7Ci0gICAga3IgPSBfV0tQSENoZWNrSW5XaXRo
UGx1Z2luSG9zdChwbHVnaW5Ib3N0UG9ydCwgc3RhdGljX2Nhc3Q8dWludDhfdCo+KGNvbnN0X2Nh
c3Q8dm9pZCo+KFtkYXRhIGJ5dGVzXSkpLCBbZGF0YSBsZW5ndGhdLCBjbGllbnRQb3J0LCBwc24u
aGlnaExvbmdPZlBTTiwgcHNuLmxvd0xvbmdPZlBTTiwgcmVuZGVyU2VydmVyUG9ydCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwbHVnaW5Ib3N0UFNOLmhpZ2hMb25nT2ZQ
U04sICZwbHVnaW5Ib3N0UFNOLmxvd0xvbmdPZlBTTik7Ci0gICAgCi0gICAgaWYgKGtyICE9IEtF
Uk5fU1VDQ0VTUykgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjaGVjayBpbiB3aXRo
IHBsdWctaW4gaG9zdCwgZXJyb3IgJXgiLCBrcik7Ci0gICAgICAgIGRlYWxsb2NhdGVTZW5kUmln
aHRTYWZlbHkocGx1Z2luSG9zdFBvcnQpOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2Vy
Ojppbml0aWFsaXplVmVuZG9yUG9ydCgpCi17Ci0gICAgQVNTRVJUKG1fcGx1Z2luVmVuZG9yUG9y
dCA9PSBNQUNIX1BPUlRfTlVMTCk7Ci0KLSAgICAvLyBHZXQgdGhlIHBsdWctaW4gYWdlbnQgcG9y
dC4KLSAgICBtYWNoX3BvcnRfdCBwbHVnaW5BZ2VudFBvcnQgPSBNQUNIX1BPUlRfTlVMTDsKLSAg
ICBpZiAoYm9vdHN0cmFwX2xvb2tfdXAoYm9vdHN0cmFwX3BvcnQsICJjb20uYXBwbGUuV2ViS2l0
LlBsdWdpbkFnZW50IiwgJnBsdWdpbkFnZW50UG9ydCkgIT0gS0VSTl9TVUNDRVNTKSB7Ci0gICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGxvb2sgdXAgdGhlIHBsdWctaW4gYWdlbnQgcG9ydCIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIE5TRGF0YSAqYXBwTmFt
ZURhdGEgPSBbW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBwcm9jZXNzTmFtZV0gZGF0YVVz
aW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOwotICAgIAotICAgIC8vIFRlbGwgdGhl
IHBsdWctaW4gYWdlbnQgdGhhdCB3ZSBleGlzdC4KLSAgICBpZiAoX1dLUEFDaGVja0luQXBwbGlj
YXRpb24ocGx1Z2luQWdlbnRQb3J0LCBzdGF0aWNfY2FzdDx1aW50OF90Kj4oY29uc3RfY2FzdDx2
b2lkKj4oW2FwcE5hbWVEYXRhIGJ5dGVzXSkpLCBbYXBwTmFtZURhdGEgbGVuZ3RoXSwgJm1fcGx1
Z2luVmVuZG9yUG9ydCkgIT0gS0VSTl9TVUNDRVNTKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGFkZCBhIG5vdGlmaWNhdGlvbiBmb3Igd2hlbiB0aGUg
dmVuZG9yIHBvcnQgZGllcz8KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBOZXRz
Y2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpwbHVnaW5Ib3N0RGllZChOZXRzY2FwZVBsdWdpbkhvc3RQ
cm94eSogcGx1Z2luSG9zdCkKLXsKLSAgICBQbHVnaW5Ib3N0TWFwOjppdGVyYXRvciBlbmQgPSBt
X3BsdWdpbkhvc3RzLmVuZCgpOwotCi0gICAgLy8gVGhpcyBoYXMgTyhuKSBjb21wbGV4aXR5IGJ1
dCB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBwbHVnLWluIGhvc3RzIGlzIHZlcnkgc21hbGwgc28gaXQg
c2hvdWxkbid0IG1hdHRlci4KLSAgICBmb3IgKFBsdWdpbkhvc3RNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9wbHVnaW5Ib3N0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0
LT52YWx1ZSA9PSBwbHVnaW5Ib3N0KSB7Ci0gICAgICAgICAgICBtX3BsdWdpbkhvc3RzLnJlbW92
ZShpdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVJlZlB0
cjxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk+IE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6
Omluc3RhbnRpYXRlUGx1Z2luKGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCwgY3B1X3R5cGVfdCBw
bHVnaW5BcmNoaXRlY3R1cmUsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgV2ViSG9z
dGVkTmV0c2NhcGVQbHVnaW5WaWV3ICpwbHVnaW5WaWV3LCBOU1N0cmluZyAqbWltZVR5cGUsIE5T
QXJyYXkgKmF0dHJpYnV0ZUtleXMsIE5TQXJyYXkgKmF0dHJpYnV0ZVZhbHVlcywgTlNTdHJpbmcg
KnVzZXJBZ2VudCwgTlNVUkwgKnNvdXJjZVVSTCwgYm9vbCBmdWxsRnJhbWUsIGJvb2wgaXNQcml2
YXRlQnJvd3NpbmdFbmFibGVkLCBib29sIGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQs
IGJvb2wgaG9zdExheWVyc0luV2luZG93U2VydmVyKQotewotICAgIE5ldHNjYXBlUGx1Z2luSG9z
dFByb3h5KiBob3N0UHJveHkgPSBob3N0Rm9yUGx1Z2luKHBsdWdpblBhdGgsIHBsdWdpbkFyY2hp
dGVjdHVyZSwgYnVuZGxlSWRlbnRpZmllcik7Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IHBy
b3BlcnRpZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwot
ICAgIAotICAgIGlmIChtaW1lVHlwZSkKLSAgICAgICAgW3Byb3BlcnRpZXMuZ2V0KCkgc2V0T2Jq
ZWN0Om1pbWVUeXBlIGZvcktleTpAIm1pbWVUeXBlIl07Ci0KLSAgICBBU1NFUlRfQVJHKHVzZXJB
Z2VudCwgdXNlckFnZW50KTsKLSAgICBbcHJvcGVydGllcy5nZXQoKSBzZXRPYmplY3Q6dXNlckFn
ZW50IGZvcktleTpAInVzZXJBZ2VudCJdOwotICAgIAotICAgIEFTU0VSVF9BUkcoYXR0cmlidXRl
S2V5cywgYXR0cmlidXRlS2V5cyk7Ci0gICAgW3Byb3BlcnRpZXMuZ2V0KCkgc2V0T2JqZWN0OmF0
dHJpYnV0ZUtleXMgZm9yS2V5OkAiYXR0cmlidXRlS2V5cyJdOwotICAgIAotICAgIEFTU0VSVF9B
UkcoYXR0cmlidXRlVmFsdWVzLCBhdHRyaWJ1dGVWYWx1ZXMpOwotICAgIFtwcm9wZXJ0aWVzLmdl
dCgpIHNldE9iamVjdDphdHRyaWJ1dGVWYWx1ZXMgZm9yS2V5OkAiYXR0cmlidXRlVmFsdWVzIl07
Ci0KLSAgICBpZiAoc291cmNlVVJMKQotICAgICAgICBbcHJvcGVydGllcy5nZXQoKSBzZXRPYmpl
Y3Q6W3NvdXJjZVVSTCBhYnNvbHV0ZVN0cmluZ10gZm9yS2V5OkAic291cmNlVVJMIl07Ci0gICAg
Ci0gICAgW3Byb3BlcnRpZXMuZ2V0KCkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9v
bDpmdWxsRnJhbWVdIGZvcktleTpAImZ1bGxGcmFtZSJdOwotICAgIFtwcm9wZXJ0aWVzLmdldCgp
IHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6aXNQcml2YXRlQnJvd3NpbmdFbmFi
bGVkXSBmb3JLZXk6QCJwcml2YXRlQnJvd3NpbmdFbmFibGVkIl07Ci0gICAgW3Byb3BlcnRpZXMu
Z2V0KCkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDppc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdFbmFibGVkXSBmb3JLZXk6QCJhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCJd
OwotICAgIFtwcm9wZXJ0aWVzLmdldCgpIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEJv
b2w6aG9zdExheWVyc0luV2luZG93U2VydmVyXSBmb3JLZXk6QCJob3N0TGF5ZXJzSW5XaW5kb3dT
ZXJ2ZXIiXTsKLQotICAgIE5TRGF0YSAqZGF0YSA9IFtOU1Byb3BlcnR5TGlzdFNlcmlhbGl6YXRp
b24gZGF0YVdpdGhQcm9wZXJ0eUxpc3Q6cHJvcGVydGllcy5nZXQoKSBmb3JtYXQ6TlNQcm9wZXJ0
eUxpc3RCaW5hcnlGb3JtYXRfdjFfMCBvcHRpb25zOjAgZXJyb3I6bnVsbHB0cl07Ci0gICAgQVNT
RVJUKGRhdGEpOwotICAgIAotICAgIGF1dG8gaW5zdGFuY2UgPSBOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHk6OmNyZWF0ZShob3N0UHJveHksIHBsdWdpblZpZXcsIGZ1bGxGcmFtZSk7Ci0gICAg
dWludDMyX3QgcmVxdWVzdElEID0gaW5zdGFuY2UtPm5leHRSZXF1ZXN0SUQoKTsKLSAgICBrZXJu
X3JldHVybl90IGtyID0gX1dLUEhJbnN0YW50aWF0ZVBsdWdpbihob3N0UHJveHktPnBvcnQoKSwg
cmVxdWVzdElELCBzdGF0aWNfY2FzdDx1aW50OF90Kj4oY29uc3RfY2FzdDx2b2lkKj4oW2RhdGEg
Ynl0ZXNdKSksIFtkYXRhIGxlbmd0aF0sIGluc3RhbmNlLT5wbHVnaW5JRCgpKTsKLSAgICBpZiAo
a3IgPT0gTUFDSF9TRU5EX0lOVkFMSURfREVTVCkgewotICAgICAgICAvLyBJbnZhbGlkYXRlIHRo
ZSBpbnN0YW5jZS4KLSAgICAgICAgaW5zdGFuY2UtPmludmFsaWRhdGUoKTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIFRoZSBwbHVnLWluIGhvc3QgbXVzdCBoYXZlIGRpZWQsIGJ1dCB3ZSBoYXZlbid0
IHJlY2VpdmVkIHRoZSBkZWF0aCBub3RpZmljYXRpb24geWV0LgotICAgICAgICBwbHVnaW5Ib3N0
RGllZChob3N0UHJveHkpOwotCi0gICAgICAgIC8vIFRyeSB0byBzcGF3biBpdCBhZ2Fpbi4KLSAg
ICAgICAgaG9zdFByb3h5ID0gaG9zdEZvclBsdWdpbihwbHVnaW5QYXRoLCBwbHVnaW5BcmNoaXRl
Y3R1cmUsIGJ1bmRsZUlkZW50aWZpZXIpOwotICAgICAgICAKLSAgICAgICAgLy8gQ3JlYXRlIGEg
bmV3IGluc3RhbmNlLgotICAgICAgICBpbnN0YW5jZSA9IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6Y3JlYXRlKGhvc3RQcm94eSwgcGx1Z2luVmlldywgZnVsbEZyYW1lKTsKLSAgICAgICAg
cmVxdWVzdElEID0gaW5zdGFuY2UtPm5leHRSZXF1ZXN0SUQoKTsKLSAgICAgICAgX1dLUEhJbnN0
YW50aWF0ZVBsdWdpbihob3N0UHJveHktPnBvcnQoKSwgcmVxdWVzdElELCBzdGF0aWNfY2FzdDx1
aW50OF90Kj4oY29uc3RfY2FzdDx2b2lkKj4oW2RhdGEgYnl0ZXNdKSksIFtkYXRhIGxlbmd0aF0s
IGluc3RhbmNlLT5wbHVnaW5JRCgpKTsKLSAgICB9Ci0KLSAgICBhdXRvIHJlcGx5ID0gaW5zdGFu
Y2UtPndhaXRGb3JSZXBseTxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Okluc3RhbnRpYXRl
UGx1Z2luUmVwbHk+KHJlcXVlc3RJRCk7Ci0gICAgaWYgKCFyZXBseSB8fCByZXBseS0+bV9yZXN1
bHRDb2RlICE9IEtFUk5fU1VDQ0VTUykgewotICAgICAgICBpbnN0YW5jZS0+Y2xlYW51cCgpOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgCi0gICAgaW5zdGFuY2UtPnNldFJl
bmRlckNvbnRleHRJRChyZXBseS0+bV9yZW5kZXJDb250ZXh0SUQpOwotICAgIGluc3RhbmNlLT5z
ZXRSZW5kZXJlclR5cGUocmVwbHktPm1fcmVuZGVyZXJUeXBlKTsKLQotICAgIHJldHVybiBXVEZN
b3ZlKGluc3RhbmNlKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpjcmVh
dGVQcm9wZXJ0eUxpc3RGaWxlKGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCwgY3B1X3R5cGVfdCBw
bHVnaW5BcmNoaXRlY3R1cmUsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllcikKLXsKLSAg
ICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gaG9zdEZvclBsdWdpbihwbHVn
aW5QYXRoLCBwbHVnaW5BcmNoaXRlY3R1cmUsIGJ1bmRsZUlkZW50aWZpZXIpOwotICAgIGlmICgh
aG9zdFByb3h5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBfV0tQSENyZWF0ZVBsdWdpbk1JTUVU
eXBlc1ByZWZlcmVuY2VzKGhvc3RQcm94eS0+cG9ydCgpKTsKLX0KLSAgICAKLXZvaWQgTmV0c2Nh
cGVQbHVnaW5Ib3N0TWFuYWdlcjo6ZGlkQ3JlYXRlV2luZG93KCkKLXsKLSAgICAvLyBTZWUgaWYg
YW55IG9mIG91ciBob3N0cyBhcmUgaW4gZnVsbC1zY3JlZW4gbW9kZS4KLSAgICBQbHVnaW5Ib3N0
TWFwOjppdGVyYXRvciBlbmQgPSBtX3BsdWdpbkhvc3RzLmVuZCgpOwotICAgIGZvciAoUGx1Z2lu
SG9zdE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BsdWdpbkhvc3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gaXQt
PnZhbHVlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFob3N0UHJveHktPmlzTWVudUJhclZpc2li
bGUoKSkgewotICAgICAgICAgICAgLy8gTWFrZSBvdXJzZWx2ZXMgdGhlIGZyb250IHByb2Nlc3Mu
Ci0gICAgICAgICAgICBQcm9jZXNzU2VyaWFsTnVtYmVyIHBzbjsKLSAgICAgICAgICAgIEFMTE9X
X0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgICAgICAgICBHZXRDdXJyZW50UHJv
Y2VzcygmcHNuKTsKLSAgICAgICAgICAgIFNldEZyb250UHJvY2VzcygmcHNuKTsKLSAgICAgICAg
ICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
IC8vIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL05l
dHNjYXBlUGx1Z2luSG9zdFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5z
L0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4ZDBiYTZmZDUwYTE0NjY0ZjRlN2JjMWM1NWViNzdkYzlmOTg0OTJmLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5LmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNT
KQotCi0jaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQGNsYXNzIFdlYlBsYWNlaG9sZGVy
TW9kYWxXaW5kb3c7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotICAgIAotY2xhc3MgTmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5OwotCi1jbGFzcyBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSB7Ci1w
dWJsaWM6Ci0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkobWFjaF9wb3J0X3QgY2xpZW50UG9y
dCwgbWFjaF9wb3J0X3QgcGx1Z2luSG9zdFBvcnQsIGNvbnN0IFByb2Nlc3NTZXJpYWxOdW1iZXIm
IHBsdWdpbkhvc3RQU04sIGJvb2wgc2hvdWxkQ2FjaGVNaXNzaW5nUHJvcGVydGllc0FuZE1ldGhv
ZHMpOwotICAgIAotICAgIG1hY2hfcG9ydF90IHBvcnQoKSBjb25zdCB7IEFTU0VSVChmYXN0TWFs
bG9jU2l6ZSh0aGlzKSk7IHJldHVybiBtX3BsdWdpbkhvc3RQb3J0OyB9Ci0gICAgbWFjaF9wb3J0
X3QgY2xpZW50UG9ydCgpIGNvbnN0IHsgQVNTRVJUKGZhc3RNYWxsb2NTaXplKHRoaXMpKTsgcmV0
dXJuIG1fY2xpZW50UG9ydDsgfQotCi0gICAgdm9pZCBhZGRQbHVnaW5JbnN0YW5jZShOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHkqKTsKLSAgICB2b2lkIHJlbW92ZVBsdWdpbkluc3RhbmNlKE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSopOwotCi0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5KiBwbHVnaW5JbnN0YW5jZSh1aW50MzJfdCBwbHVnaW5JRCk7Ci0KLSAgICBib29sIGlz
TWVudUJhclZpc2libGUoKSBjb25zdCB7IHJldHVybiBtX21lbnVCYXJJc1Zpc2libGU7IH0KLSAg
ICB2b2lkIHNldE1lbnVCYXJWaXNpYmxlKGJvb2wpOwotCi0gICAgYm9vbCBpc0Z1bGxzY3JlZW5X
aW5kb3dTaG93aW5nKCkgY29uc3QgeyByZXR1cm4gbV9mdWxsc2NyZWVuV2luZG93SXNTaG93aW5n
OyB9Ci0gICAgdm9pZCBzZXRGdWxsc2NyZWVuV2luZG93SXNTaG93aW5nKGJvb2wpOwotCi0gICAg
dm9pZCBzZXRNb2RhbChib29sKTsKLQotICAgIHZvaWQgYXBwbGljYXRpb25EaWRCZWNvbWVBY3Rp
dmUoKTsKLSAgICAKLSAgICBib29sIHByb2Nlc3NSZXF1ZXN0cygpOwotICAgIHN0YXRpYyBib29s
IGlzUHJvY2Vzc2luZ1JlcXVlc3RzKCkgeyByZXR1cm4gc19wcm9jZXNzaW5nUmVxdWVzdHM7IH0K
LSAgICAKLSAgICBib29sIHNob3VsZENhY2hlTWlzc2luZ1Byb3BlcnRpZXNBbmRNZXRob2RzKCkg
Y29uc3QgeyByZXR1cm4gbV9zaG91bGRDYWNoZU1pc3NpbmdQcm9wZXJ0aWVzQW5kTWV0aG9kczsg
fQotCi0gICAgc3RhdGljIHZvaWQgbWFrZUN1cnJlbnRQcm9jZXNzRnJvbnRQcm9jZXNzKCk7Ci0g
ICAgdm9pZCBtYWtlUGx1Z2luSG9zdFByb2Nlc3NGcm9udFByb2Nlc3MoKSBjb25zdDsKLSAgICBi
b29sIGlzUGx1Z2luSG9zdFByb2Nlc3NGcm9udFByb2Nlc3MoKSBjb25zdDsKLQotcHJpdmF0ZToK
LQotICAgIH5OZXRzY2FwZVBsdWdpbkhvc3RQcm94eSgpOwotICAgIHZvaWQgcGx1Z2luSG9zdERp
ZWQoKTsKLQotICAgIHZvaWQgYmVnaW5Nb2RhbCgpOwotICAgIHZvaWQgZW5kTW9kYWwoKTsKLQot
ICAgIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKCkgY29uc3Q7Ci0gICAgdm9pZCBkaWRFeGl0RnVs
bHNjcmVlbigpIGNvbnN0OwotCi0gICAgc3RhdGljIHZvaWQgZGVhZE5hbWVOb3RpZmljYXRpb25D
YWxsYmFjayhDRk1hY2hQb3J0UmVmLCB2b2lkICptc2csIENGSW5kZXggc2l6ZSwgdm9pZCAqaW5m
byk7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8dWludDMyX3QsIFJlZlB0cjxOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk+PiBQbHVnaW5JbnN0YW5jZU1hcDsKLSAgICBQbHVnaW5JbnN0YW5jZU1h
cCBtX2luc3RhbmNlczsKLSAgICAKLSAgICBtYWNoX3BvcnRfdCBtX2NsaWVudFBvcnQgeyBNQUNI
X1BPUlRfTlVMTCB9OwotICAgIG1hY2hfcG9ydF90IG1fcG9ydFNldCB7IE1BQ0hfUE9SVF9OVUxM
IH07Ci0gICAgCi0gICAgUmV0YWluUHRyPENGUnVuTG9vcFNvdXJjZVJlZj4gbV9jbGllbnRQb3J0
U291cmNlOwotICAgIG1hY2hfcG9ydF90IG1fcGx1Z2luSG9zdFBvcnQgeyBNQUNIX1BPUlRfTlVM
TCB9OwotICAgIFJldGFpblB0cjxDRk1hY2hQb3J0UmVmPiBtX2RlYWROYW1lTm90aWZpY2F0aW9u
UG9ydDsKLSAgICAKLSAgICBSZXRhaW5QdHI8aWQ+IG1fYWN0aXZhdGlvbk9ic2VydmVyOwotICAg
IFJldGFpblB0cjxXZWJQbGFjZWhvbGRlck1vZGFsV2luZG93PiBtX3BsYWNlaG9sZGVyV2luZG93
OwotICAgIHVuc2lnbmVkIG1faXNNb2RhbDsKLSAgICBib29sIG1fbWVudUJhcklzVmlzaWJsZTsK
LSAgICBib29sIG1fZnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZzsKLSAgICBjb25zdCBQcm9jZXNz
U2VyaWFsTnVtYmVyIG1fcGx1Z2luSG9zdFBTTjsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBzX3By
b2Nlc3NpbmdSZXF1ZXN0czsKLQotICAgIGJvb2wgbV9zaG91bGRDYWNoZU1pc3NpbmdQcm9wZXJ0
aWVzQW5kTWV0aG9kczsKLX07Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
IC8vIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0gYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94
eS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY2ZmFkOTFkNTJhZmU1NDA5ODgy
M2Y4MjdlZTk0NjA1NTBmNTE3NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2Fw
ZVBsdWdpbkhvc3RQcm94eS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDExOTEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZiBVU0Uo
UExVR0lOX0hPU1RfUFJPQ0VTUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNp
bXBvcnQgIk5ldHNjYXBlUGx1Z2luSG9zdFByb3h5LmgiCi0KLSNpbXBvcnQgPG1hY2gvbWFjaC5o
PgotI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi0jaW1wb3J0ICJIb3N0ZWROZXRzY2Fw
ZVBsdWdpblN0cmVhbS5oIgotI2ltcG9ydCAiTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5oIgot
I2ltcG9ydCAiTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5LmgiCi0jaW1wb3J0ICJXZWJGcmFt
ZUludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcuaCIKLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0lkZW50aWZpZXJJbmxpbmVzLmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL0NvbW1vblZNLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL0lkZW50aWZpZXJSZXAuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2NyaXB0Q29udHJvbGxlci5o
PgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvSElTZXJ2aWNlc1NQSS5oPgotI2ltcG9ydCA8d3RmL05l
dmVyRGVzdHJveWVkLmg+Ci0KLWV4dGVybiAiQyIgewotI2ltcG9ydCAiV2ViS2l0UGx1Z2luSG9z
dC5oIgotI2ltcG9ydCAiV2ViS2l0UGx1Z2luQ2xpZW50U2VydmVyLmgiCi19Ci0KLXVzaW5nIG5h
bWVzcGFjZSBKU0M7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotQGludGVyZmFjZSBXZWJQ
bGFjZWhvbGRlck1vZGFsV2luZG93IDogTlNXaW5kb3cgCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlv
biBXZWJQbGFjZWhvbGRlck1vZGFsV2luZG93Ci0vLyBQcmV2ZW50IE5TQXBwIGZyb20gY2FsbGlu
ZyByZXF1ZXN0VXNlckF0dGVudGlvbjogd2hlbiB0aGUgd2luZG93IGlzIHNob3duIAotLy8gbW9k
YWxseSwgZXZlbiBpZiB0aGUgYXBwIGlzIGluYWN0aXZlLiBTZWUgNjgyMzA0OS4KLS0gKEJPT0wp
X3dhbnRzVXNlckF0dGVudGlvbgotewotICAgIHJldHVybiBOTzsgICAKLX0KLUBlbmQKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFBsdWdpbkRlc3Ryb3lEZWZlcnJlciB7Ci1wdWJsaWM6
Ci0gICAgUGx1Z2luRGVzdHJveURlZmVycmVyKE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSog
cHJveHkpCi0gICAgICAgIDogbV9wcm94eShwcm94eSkKLSAgICB7Ci0gICAgICAgIG1fcHJveHkt
PndpbGxDYWxsUGx1Z2luRnVuY3Rpb24oKTsKLSAgICB9Ci0gICAgCi0gICAgflBsdWdpbkRlc3Ry
b3lEZWZlcnJlcigpCi0gICAgewotICAgICAgICBib29sIHN0b3BwZWQ7Ci0gICAgICAgIG1fcHJv
eHktPmRpZENhbGxQbHVnaW5GdW5jdGlvbihzdG9wcGVkKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eT4gbV9wcm94eTsKLX07Ci0KLXR5
cGVkZWYgSGFzaE1hcDxtYWNoX3BvcnRfdCwgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqPiBQbHVn
aW5Qcm94eU1hcDsKLXN0YXRpYyBQbHVnaW5Qcm94eU1hcCYgcGx1Z2luUHJveHlNYXAoKQotewot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxQbHVnaW5Qcm94eU1hcD4gcGx1Z2luUHJveHlNYXA7
Ci0gICAgcmV0dXJuIHBsdWdpblByb3h5TWFwOwotfQotCi11bnNpZ25lZCBOZXRzY2FwZVBsdWdp
bkhvc3RQcm94eTo6c19wcm9jZXNzaW5nUmVxdWVzdHM7Ci0KLU5ldHNjYXBlUGx1Z2luSG9zdFBy
b3h5OjpOZXRzY2FwZVBsdWdpbkhvc3RQcm94eShtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCBtYWNo
X3BvcnRfdCBwbHVnaW5Ib3N0UG9ydCwgY29uc3QgUHJvY2Vzc1NlcmlhbE51bWJlciYgcGx1Z2lu
SG9zdFBTTiwgYm9vbCBzaG91bGRDYWNoZU1pc3NpbmdQcm9wZXJ0aWVzQW5kTWV0aG9kcykKLSAg
ICA6IG1fY2xpZW50UG9ydChjbGllbnRQb3J0KQotICAgICwgbV9wbHVnaW5Ib3N0UG9ydChwbHVn
aW5Ib3N0UG9ydCkKLSAgICAsIG1faXNNb2RhbChmYWxzZSkKLSAgICAsIG1fbWVudUJhcklzVmlz
aWJsZSh0cnVlKQotICAgICwgbV9mdWxsc2NyZWVuV2luZG93SXNTaG93aW5nKGZhbHNlKQotICAg
ICwgbV9wbHVnaW5Ib3N0UFNOKHBsdWdpbkhvc3RQU04pCi0gICAgLCBtX3Nob3VsZENhY2hlTWlz
c2luZ1Byb3BlcnRpZXNBbmRNZXRob2RzKHNob3VsZENhY2hlTWlzc2luZ1Byb3BlcnRpZXNBbmRN
ZXRob2RzKQotewotICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQobV9jbGllbnRQb3J0KSk7Ci0g
ICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJRChtX3BsdWdpbkhvc3RQb3J0KSk7Ci0KLSAgICBwbHVn
aW5Qcm94eU1hcCgpLmFkZChtX2NsaWVudFBvcnQsIHRoaXMpOwotICAgIAotICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgdXNlIGxpYmRpc3BhdGNoIGZvciB0aGlzLgotICAgIENGTWFjaFBvcnRDb250
ZXh0IGNvbnRleHQgPSB7IDAsIHRoaXMsIDAsIDAsIDAgfTsKLSAgICBtX2RlYWROYW1lTm90aWZp
Y2F0aW9uUG9ydCA9IGFkb3B0Q0YoQ0ZNYWNoUG9ydENyZWF0ZSgwLCBkZWFkTmFtZU5vdGlmaWNh
dGlvbkNhbGxiYWNrLCAmY29udGV4dCwgMCkpOwotCi0gICAgbWFjaF9wb3J0X3QgcHJldmlvdXMg
PSBNQUNIX1BPUlRfTlVMTDsKLSAgICBhdXRvIGtyID0gbWFjaF9wb3J0X3JlcXVlc3Rfbm90aWZp
Y2F0aW9uKG1hY2hfdGFza19zZWxmKCksIHBsdWdpbkhvc3RQb3J0LCBNQUNIX05PVElGWV9ERUFE
X05BTUUsIDAsCi0gICAgICAgIENGTWFjaFBvcnRHZXRQb3J0KG1fZGVhZE5hbWVOb3RpZmljYXRp
b25Qb3J0LmdldCgpKSwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkRfT05DRSwgJnByZXZpb3VzKTsK
LSAgICBBU1NFUlQocHJldmlvdXMgPT0gTUFDSF9QT1JUX05VTEwpOwotICAgIEFTU0VSVChrciA9
PSBLRVJOX1NVQ0NFU1MpOwotICAgIGlmIChrciAhPSBLRVJOX1NVQ0NFU1MpIHsKLSAgICAgICAg
Ly8gSWYgbWFjaF9wb3J0X3JlcXVlc3Rfbm90aWZpY2F0aW9uIGZhaWxzLCAncHJldmlvdXMnIHdp
bGwgYmUgdW5pbml0aWFsaXplZC4KLSAgICAgICAgTE9HX0VSUk9SKCJtYWNoX3BvcnRfcmVxdWVz
dF9ub3RpZmljYXRpb24gZmFpbGVkOiAoJXgpICVzIiwga3IsIG1hY2hfZXJyb3Jfc3RyaW5nKGty
KSk7Ci0gICAgICAgIHByZXZpb3VzID0gTUFDSF9QT1JUX05VTEw7Ci0gICAgfQotCi0gICAgUmV0
YWluUHRyPENGUnVuTG9vcFNvdXJjZVJlZj4gZGVhdGhQb3J0U291cmNlID0gYWRvcHRDRihDRk1h
Y2hQb3J0Q3JlYXRlUnVuTG9vcFNvdXJjZSgwLCBtX2RlYWROYW1lTm90aWZpY2F0aW9uUG9ydC5n
ZXQoKSwgMCkpOwotICAgIAotICAgIENGUnVuTG9vcEFkZFNvdXJjZShDRlJ1bkxvb3BHZXRDdXJy
ZW50KCksIGRlYXRoUG9ydFNvdXJjZS5nZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLSAg
ICAKLSAgICBtX2NsaWVudFBvcnRTb3VyY2UgPSBhZG9wdENGKE1TSENyZWF0ZU1JR1NlcnZlclNv
dXJjZShudWxscHRyLCAwLCByZWludGVycHJldF9jYXN0PG1pZ19zdWJzeXN0ZW1fdD4oY29uc3Rf
Y2FzdDxzdHJ1Y3QgV0tXZWJLaXRQbHVnaW5DbGllbnRfc3Vic3lzdGVtKj4oJldLV2ViS2l0UGx1
Z2luQ2xpZW50X3N1YnN5c3RlbSkpLCBrTVNIRG9Ob3RDcmVhdGVTZW5kUmlnaHRPcHRpb24sIG1f
Y2xpZW50UG9ydCwgbnVsbHB0cikpOwotICAgIENGUnVuTG9vcEFkZFNvdXJjZShDRlJ1bkxvb3BH
ZXRDdXJyZW50KCksIG1fY2xpZW50UG9ydFNvdXJjZS5nZXQoKSwga0NGUnVuTG9vcERlZmF1bHRN
b2RlKTsKLSAgICBDRlJ1bkxvb3BBZGRTb3VyY2UoQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBtX2Ns
aWVudFBvcnRTb3VyY2UuZ2V0KCksIChDRlN0cmluZ1JlZilOU0V2ZW50VHJhY2tpbmdSdW5Mb29w
TW9kZSk7Ci19Ci0KLU5ldHNjYXBlUGx1Z2luSG9zdFByb3h5Ojp+TmV0c2NhcGVQbHVnaW5Ib3N0
UHJveHkoKQotewotICAgIHBsdWdpblByb3h5TWFwKCkucmVtb3ZlKG1fY2xpZW50UG9ydCk7Ci0K
LSAgICBpZiAobV9wb3J0U2V0KSB7Ci0gICAgICAgIG1hY2hfcG9ydF9leHRyYWN0X21lbWJlciht
YWNoX3Rhc2tfc2VsZigpLCBtX2NsaWVudFBvcnQsIG1fcG9ydFNldCk7Ci0gICAgICAgIG1hY2hf
cG9ydF9leHRyYWN0X21lbWJlcihtYWNoX3Rhc2tfc2VsZigpLCBDRk1hY2hQb3J0R2V0UG9ydCht
X2RlYWROYW1lTm90aWZpY2F0aW9uUG9ydC5nZXQoKSksIG1fcG9ydFNldCk7Ci0gICAgICAgIG1h
Y2hfcG9ydF9tb2RfcmVmcyhtYWNoX3Rhc2tfc2VsZigpLCBtX3BvcnRTZXQsIE1BQ0hfUE9SVF9S
SUdIVF9QT1JUX1NFVCwgLTEpOwotICAgICAgICBtX3BvcnRTZXQgPSBNQUNIX1BPUlRfTlVMTDsK
LSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKG1fY2xpZW50UG9ydFNvdXJjZSk7Ci0gICAgQ0ZSdW5M
b29wU291cmNlSW52YWxpZGF0ZShtX2NsaWVudFBvcnRTb3VyY2UuZ2V0KCkpOwotICAgIG1fY2xp
ZW50UG9ydFNvdXJjZSA9IDA7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHk6OnBs
dWdpbkhvc3REaWVkKCkKLXsKLSAgICBQbHVnaW5JbnN0YW5jZU1hcCBpbnN0YW5jZXM7ICAgIAot
ICAgIG1faW5zdGFuY2VzLnN3YXAoaW5zdGFuY2VzKTsKLSAgCi0gICAgUGx1Z2luSW5zdGFuY2VN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGluc3RhbmNlcy5lbmQoKTsKLSAgICBmb3IgKFBsdWdp
bkluc3RhbmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGluc3RhbmNlcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT52YWx1ZS0+cGx1Z2luSG9zdERpZWQoKTsKLSAgICAK
LSAgICBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpzaW5nbGV0b24oKS5wbHVnaW5Ib3N0RGll
ZCh0aGlzKTsKLSAgICAKLSAgICAvLyBUaGUgcGx1Zy1pbiBjcmFzaGVkIHdoaWxlIGl0cyBtZW51
IGJhciB3YXMgaGlkZGVuLiBNYWtlIHN1cmUgdG8gc2hvdyBpdC4KLSAgICBpZiAoIW1fbWVudUJh
cklzVmlzaWJsZSkKLSAgICAgICAgc2V0TWVudUJhclZpc2libGUodHJ1ZSk7Ci0KLSAgICAvLyBU
aGUgcGx1Zy1pbiBjcmFzaGVkIHdoaWxlIGl0IGhhZCBhIG1vZGFsIGRpYWxvZyB1cC4KLSAgICBp
ZiAobV9pc01vZGFsKQotICAgICAgICBlbmRNb2RhbCgpOwotICAgIAotICAgIGRlbGV0ZSB0aGlz
OwotfQotICAgIAotdm9pZCBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eTo6YWRkUGx1Z2luSW5zdGFu
Y2UoTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZSkKLXsKLSAgICBBU1NFUlQo
IW1faW5zdGFuY2VzLmNvbnRhaW5zKGluc3RhbmNlLT5wbHVnaW5JRCgpKSk7Ci0gICAgCi0gICAg
bV9pbnN0YW5jZXMuc2V0KGluc3RhbmNlLT5wbHVnaW5JRCgpLCBpbnN0YW5jZSk7Ci19Ci0gICAg
Ci12b2lkIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5OjpyZW1vdmVQbHVnaW5JbnN0YW5jZShOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIGluc3RhbmNlKQotewotICAgIEFTU0VSVChtX2luc3Rh
bmNlcy5nZXQoaW5zdGFuY2UtPnBsdWdpbklEKCkpID09IGluc3RhbmNlKTsKLQotICAgIG1faW5z
dGFuY2VzLnJlbW92ZShpbnN0YW5jZS0+cGx1Z2luSUQoKSk7Ci19Ci0KLU5ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eSogTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHk6OnBsdWdpbkluc3RhbmNlKHVp
bnQzMl90IHBsdWdpbklEKQotewotICAgIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSogcmVz
dWx0ID0gbV9pbnN0YW5jZXMuZ2V0KHBsdWdpbklEKTsKLSAgICBBU1NFUlQoIXJlc3VsdCB8fCBy
ZXN1bHQtPmhvc3RQcm94eSgpID09IHRoaXMpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZv
aWQgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHk6OmRlYWROYW1lTm90aWZpY2F0aW9uQ2FsbGJhY2so
Q0ZNYWNoUG9ydFJlZiBwb3J0LCB2b2lkICptc2csIENGSW5kZXggc2l6ZSwgdm9pZCAqaW5mbykK
LXsKLSAgICBBU1NFUlQobXNnKTsKLSAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8bWFjaF9tc2dfaGVh
ZGVyX3QqPihtc2cpLT5tc2doX2lkID09IE1BQ0hfTk9USUZZX0RFQURfTkFNRSk7Ci0gICAgCi0g
ICAgc3RhdGljX2Nhc3Q8TmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqPihpbmZvKS0+cGx1Z2luSG9z
dERpZWQoKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eTo6c2V0TWVudUJhclZp
c2libGUoYm9vbCB2aXNpYmxlKQotewotICAgIG1fbWVudUJhcklzVmlzaWJsZSA9IHZpc2libGU7
Ci0KLSAgICBbTlNNZW51IHNldE1lbnVCYXJWaXNpYmxlOnZpc2libGVdOwotfQotCi12b2lkIE5l
dHNjYXBlUGx1Z2luSG9zdFByb3h5OjpkaWRFbnRlckZ1bGxzY3JlZW4oKSBjb25zdAotewotICAg
IG1ha2VQbHVnaW5Ib3N0UHJvY2Vzc0Zyb250UHJvY2VzcygpOwotfQotCi12b2lkIE5ldHNjYXBl
UGx1Z2luSG9zdFByb3h5OjpkaWRFeGl0RnVsbHNjcmVlbigpIGNvbnN0Ci17Ci0gICAgLy8gSWYg
dGhlIHBsdWctaW4gaG9zdCBpcyB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiB0aGVuIHdlIHNob3Vs
ZCBicmluZyBvdXJzZWx2ZXMgdG8gdGhlIGZyb250IHdoZW4gaXQgZXhpdHMgZnVsbC1zY3JlZW4g
bW9kZS4KLSAgICBpZiAoaXNQbHVnaW5Ib3N0UHJvY2Vzc0Zyb250UHJvY2VzcygpKQotICAgICAg
ICBtYWtlQ3VycmVudFByb2Nlc3NGcm9udFByb2Nlc3MoKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBs
dWdpbkhvc3RQcm94eTo6c2V0RnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZyhib29sIGlzU2hvd2lu
ZykKLXsKLSAgICBpZiAobV9mdWxsc2NyZWVuV2luZG93SXNTaG93aW5nID09IGlzU2hvd2luZykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9mdWxsc2NyZWVuV2luZG93SXNTaG93aW5nID0gaXNT
aG93aW5nOwotICAgIGlmIChtX2Z1bGxzY3JlZW5XaW5kb3dJc1Nob3dpbmcpCi0gICAgICAgIGRp
ZEVudGVyRnVsbHNjcmVlbigpOwotICAgIGVsc2UKLSAgICAgICAgZGlkRXhpdEZ1bGxzY3JlZW4o
KTsKLQotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5OjphcHBsaWNhdGlvbkRpZEJl
Y29tZUFjdGl2ZSgpCi17Ci0gICAgbWFrZVBsdWdpbkhvc3RQcm9jZXNzRnJvbnRQcm9jZXNzKCk7
Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHk6OmJlZ2luTW9kYWwoKQotewotICAg
IEFTU0VSVCghbV9wbGFjZWhvbGRlcldpbmRvdyk7Ci0gICAgQVNTRVJUKCFtX2FjdGl2YXRpb25P
YnNlcnZlcik7Ci0gICAgCi0gICAgbV9wbGFjZWhvbGRlcldpbmRvdyA9IGFkb3B0TlMoW1tXZWJQ
bGFjZWhvbGRlck1vZGFsV2luZG93IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0Ok5TTWFrZVJl
Y3QoMCwgMCwgMSwgMSkgc3R5bGVNYXNrOk5TV2luZG93U3R5bGVNYXNrQm9yZGVybGVzcyBiYWNr
aW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6WUVTXSk7Ci0KLSAgICBtX2FjdGl2YXRp
b25PYnNlcnZlciA9IFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2Jz
ZXJ2ZXJGb3JOYW1lOk5TQXBwbGljYXRpb25XaWxsQmVjb21lQWN0aXZlTm90aWZpY2F0aW9uIG9i
amVjdDpOU0FwcCBxdWV1ZTpuaWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZ0Jsb2NrOl4oTlNOb3Rp
ZmljYXRpb24gKil7IGFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCk7IH1dOwotICAgIAotICAg
IC8vIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBnZXQgdGhlIHNldE1vZGFsKGZhbHNlKSBjYWxsIGZy
b20gdGhlIHBsdWctaW4gaG9zdC4KLSAgICBDRlJ1bkxvb3BBZGRTb3VyY2UoQ0ZSdW5Mb29wR2V0
Q3VycmVudCgpLCBtX2NsaWVudFBvcnRTb3VyY2UuZ2V0KCksIChDRlN0cmluZ1JlZilOU01vZGFs
UGFuZWxSdW5Mb29wTW9kZSk7Ci0gICAgCi0gICAgW05TQXBwIHJ1bk1vZGFsRm9yV2luZG93Om1f
cGxhY2Vob2xkZXJXaW5kb3cuZ2V0KCldOwotICAgIAotICAgIFttX3BsYWNlaG9sZGVyV2luZG93
LmdldCgpIG9yZGVyT3V0Om5pbF07Ci0gICAgbV9wbGFjZWhvbGRlcldpbmRvdyA9IDA7Ci19Ci0g
ICAgCi12b2lkIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5OjplbmRNb2RhbCgpCi17Ci0gICAgQVNT
RVJUKG1fcGxhY2Vob2xkZXJXaW5kb3cpOwotICAgIEFTU0VSVChtX2FjdGl2YXRpb25PYnNlcnZl
cik7Ci0gICAgCi0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1v
dmVPYnNlcnZlcjptX2FjdGl2YXRpb25PYnNlcnZlci5nZXQoKV07Ci0gICAgbV9hY3RpdmF0aW9u
T2JzZXJ2ZXIgPSBuaWw7Ci0gICAgCi0gICAgQ0ZSdW5Mb29wUmVtb3ZlU291cmNlKENGUnVuTG9v
cEdldEN1cnJlbnQoKSwgbV9jbGllbnRQb3J0U291cmNlLmdldCgpLCAoQ0ZTdHJpbmdSZWYpTlNN
b2RhbFBhbmVsUnVuTG9vcE1vZGUpOwotICAgIAotICAgIFtOU0FwcCBzdG9wTW9kYWxdOwotCi0g
ICAgbWFrZUN1cnJlbnRQcm9jZXNzRnJvbnRQcm9jZXNzKCk7Ci19Ci0KLQotdm9pZCBOZXRzY2Fw
ZVBsdWdpbkhvc3RQcm94eTo6c2V0TW9kYWwoYm9vbCBtb2RhbCkKLXsKLSAgICBpZiAobW9kYWwg
PT0gbV9pc01vZGFsKSAKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1faXNNb2RhbCA9IG1v
ZGFsOwotICAgIAotICAgIGlmIChtX2lzTW9kYWwpCi0gICAgICAgIGJlZ2luTW9kYWwoKTsKLSAg
ICBlbHNlCi0gICAgICAgIGVuZE1vZGFsKCk7Ci19Ci0gICAgCi1ib29sIE5ldHNjYXBlUGx1Z2lu
SG9zdFByb3h5Ojpwcm9jZXNzUmVxdWVzdHMoKQotewotICAgIHNfcHJvY2Vzc2luZ1JlcXVlc3Rz
Kys7Ci0KLSAgICBpZiAoIW1fcG9ydFNldCkgewotICAgICAgICBhdXRvIGtyID0gbWFjaF9wb3J0
X2FsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIE1BQ0hfUE9SVF9SSUdIVF9QT1JUX1NFVCwgJm1f
cG9ydFNldCk7Ci0gICAgICAgIGlmIChrciAhPSBLRVJOX1NVQ0NFU1MpIHsKLSAgICAgICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IGFsbG9jYXRlIG1hY2ggcG9ydCwgZXJyb3IgJXg6ICVzIiwg
a3IsIG1hY2hfZXJyb3Jfc3RyaW5nKGtyKSk7Ci0gICAgICAgICAgICBDUkFTSCgpOwotICAgICAg
ICB9Ci0gICAgICAgIG1hY2hfcG9ydF9pbnNlcnRfbWVtYmVyKG1hY2hfdGFza19zZWxmKCksIG1f
Y2xpZW50UG9ydCwgbV9wb3J0U2V0KTsKLSAgICAgICAgbWFjaF9wb3J0X2luc2VydF9tZW1iZXIo
bWFjaF90YXNrX3NlbGYoKSwgQ0ZNYWNoUG9ydEdldFBvcnQobV9kZWFkTmFtZU5vdGlmaWNhdGlv
blBvcnQuZ2V0KCkpLCBtX3BvcnRTZXQpOwotICAgIH0KLSAgICAKLSAgICBjaGFyIGJ1ZmZlcls0
MDk2XTsKLSAgICAKLSAgICBtYWNoX21zZ19oZWFkZXJfdCogbXNnID0gcmVpbnRlcnByZXRfY2Fz
dDxtYWNoX21zZ19oZWFkZXJfdCo+KGJ1ZmZlcik7Ci0gICAgCi0gICAga2Vybl9yZXR1cm5fdCBr
ciA9IG1hY2hfbXNnKG1zZywgTUFDSF9SQ1ZfTVNHLCAwLCBzaXplb2YoYnVmZmVyKSwgbV9wb3J0
U2V0LCAwLCBNQUNIX1BPUlRfTlVMTCk7Ci0gICAgCi0gICAgaWYgKGtyICE9IEtFUk5fU1VDQ0VT
UykgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCByZWNlaXZlIG1hY2ggbWVzc2FnZSwg
ZXJyb3IgJXg6ICVzIiwga3IsIG1hY2hfZXJyb3Jfc3RyaW5nKGtyKSk7Ci0gICAgICAgIHNfcHJv
Y2Vzc2luZ1JlcXVlc3RzLS07Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0g
ICAgaWYgKG1zZy0+bXNnaF9sb2NhbF9wb3J0ID09IG1fY2xpZW50UG9ydCkgewotICAgICAgICBf
X1JlcGx5VW5pb25fX1dLV2ViS2l0UGx1Z2luQ2xpZW50X3N1YnN5c3RlbSByZXBseTsKLSAgICAg
ICAgbWFjaF9tc2dfaGVhZGVyX3QqIHJlcGx5SGVhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxtYWNo
X21zZ19oZWFkZXJfdCo+KCZyZXBseSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoV2ViS2l0UGx1
Z2luQ2xpZW50X3NlcnZlcihtc2csIHJlcGx5SGVhZGVyKSAmJiBNQUNIX1BPUlRfVkFMSUQocmVw
bHlIZWFkZXItPm1zZ2hfcmVtb3RlX3BvcnQpKSB7Ci0gICAgICAgICAgICBrciA9IG1hY2hfbXNn
KHJlcGx5SGVhZGVyLCBNQUNIX1NFTkRfTVNHLCByZXBseUhlYWRlci0+bXNnaF9zaXplLCAwLCBN
QUNIX1BPUlRfTlVMTCwgMCwgTUFDSF9QT1JUX05VTEwpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoa3IgIT0gS0VSTl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9S
KCJDb3VsZCBub3Qgc2VuZCBtYWNoIG1lc3NhZ2UsIGVycm9yICV4OiAlcyIsIGtyLCBtYWNoX2Vy
cm9yX3N0cmluZyhrcikpOwotICAgICAgICAgICAgICAgIHNfcHJvY2Vzc2luZ1JlcXVlc3RzLS07
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBzX3Byb2Nlc3NpbmdSZXF1ZXN0cy0tOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1zZy0+bXNnaF9sb2NhbF9wb3J0ID09IENG
TWFjaFBvcnRHZXRQb3J0KG1fZGVhZE5hbWVOb3RpZmljYXRpb25Qb3J0LmdldCgpKSkgewotICAg
ICAgICBBU1NFUlQobXNnLT5tc2doX2lkID09IE1BQ0hfTk9USUZZX0RFQURfTkFNRSk7Ci0gICAg
ICAgIHBsdWdpbkhvc3REaWVkKCk7Ci0gICAgICAgIHNfcHJvY2Vzc2luZ1JlcXVlc3RzLS07Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgc19wcm9jZXNzaW5nUmVxdWVzdHMtLTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXZvaWQgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHk6Om1ha2VDdXJyZW50UHJvY2Vzc0Zyb250UHJv
Y2VzcygpCi17Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBQ
cm9jZXNzU2VyaWFsTnVtYmVyIHBzbjsKLSAgICBHZXRDdXJyZW50UHJvY2VzcygmcHNuKTsKLSAg
ICBTZXRGcm9udFByb2Nlc3MoJnBzbik7Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElP
TlNfRU5ECi19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHk6Om1ha2VQbHVnaW5Ib3N0
UHJvY2Vzc0Zyb250UHJvY2VzcygpIGNvbnN0Ci17Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfQkVHSU4KLSAgICBTZXRGcm9udFByb2Nlc3MoJm1fcGx1Z2luSG9zdFBTTik7Ci0g
ICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi19Ci0KLWJvb2wgTmV0c2NhcGVQ
bHVnaW5Ib3N0UHJveHk6OmlzUGx1Z2luSG9zdFByb2Nlc3NGcm9udFByb2Nlc3MoKSBjb25zdAot
ewotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgUHJvY2Vzc1Nl
cmlhbE51bWJlciBmcm9udFByb2Nlc3M7Ci0gICAgR2V0RnJvbnRQcm9jZXNzKCZmcm9udFByb2Nl
c3MpOwotCi0gICAgQm9vbGVhbiBpc1NhbWVQcm9jZXNzID0gMDsKLSAgICBTYW1lUHJvY2Vzcygm
ZnJvbnRQcm9jZXNzLCAmbV9wbHVnaW5Ib3N0UFNOLCAmaXNTYW1lUHJvY2Vzcyk7Ci0gICAgQUxM
T1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0KLSAgICByZXR1cm4gaXNTYW1lUHJvY2Vz
czsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
Ci0KLS8vIEhlbHBlciBjbGFzcyBmb3IgZGVhbGxvY2F0aW5nIGRhdGEKLWNsYXNzIERhdGFEZWFs
bG9jYXRvciB7Ci1wdWJsaWM6Ci0gICAgRGF0YURlYWxsb2NhdG9yKGRhdGFfdCBkYXRhLCBtYWNo
X21zZ190eXBlX251bWJlcl90IGRhdGFMZW5ndGgpCi0gICAgICAgIDogbV9kYXRhKHJlaW50ZXJw
cmV0X2Nhc3Q8dm1fYWRkcmVzc190PihkYXRhKSkKLSAgICAgICAgLCBtX2RhdGFMZW5ndGgoZGF0
YUxlbmd0aCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIH5EYXRhRGVhbGxvY2F0b3IoKQotICAg
IHsKLSAgICAgICAgaWYgKCFtX2RhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAot
ICAgICAgICB2bV9kZWFsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIG1fZGF0YSwgbV9kYXRhTGVu
Z3RoKTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIHZtX2FkZHJlc3NfdCBtX2RhdGE7Ci0g
ICAgdm1fc2l6ZV90IG1fZGF0YUxlbmd0aDsKLX07Ci0KLS8vIE1pRyBjYWxsYmFja3MKLWtlcm5f
cmV0dXJuX3QgV0tQQ1N0YXR1c1RleHQobWFjaF9wb3J0X3QgY2xpZW50UG9ydCwgdWludDMyX3Qg
cGx1Z2luSUQsIGRhdGFfdCB0ZXh0LCBtYWNoX21zZ190eXBlX251bWJlcl90IHRleHRDbnQpCi17
Ci0gICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJRChjbGllbnRQb3J0KSk7Ci0KLSAgICBEYXRhRGVh
bGxvY2F0b3IgZGVhbGxvY2F0b3IodGV4dCwgdGV4dENudCk7Ci0gICAgCi0gICAgTmV0c2NhcGVQ
bHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IHBsdWdpblByb3h5TWFwKCkuZ2V0KGNsaWVudFBv
cnQpOwotICAgIGlmICghaG9zdFByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwot
ICAgIAotICAgIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSogaW5zdGFuY2VQcm94eSA9IGhv
c3RQcm94eS0+cGx1Z2luSW5zdGFuY2UocGx1Z2luSUQpOwotICAgIGlmICghaW5zdGFuY2VQcm94
eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBpbnN0YW5jZVByb3h5
LT5zdGF0dXModGV4dCk7Ci0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1
cm5fdCBXS1BDTG9hZFVSTChtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJfdCBwbHVnaW5J
RCwgZGF0YV90IHVybCwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCB1cmxMZW5ndGgsIGRhdGFfdCB0
YXJnZXQsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgdGFyZ2V0TGVuZ3RoLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YV90IHBvc3REYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90IHBv
c3REYXRhTGVuZ3RoLCB1aW50MzJfdCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
dWludDE2X3QqIG91dFJlc3VsdCwgdWludDMyX3QqIG91dFN0cmVhbUlEKQotewotICAgIEFTU0VS
VChNQUNIX1BPUlRfVkFMSUQoY2xpZW50UG9ydCkpOwotCi0gICAgRGF0YURlYWxsb2NhdG9yIHVy
bERlYWxsb2NhdG9yKHVybCwgdXJsTGVuZ3RoKTsKLSAgICBEYXRhRGVhbGxvY2F0b3IgdGFyZ2V0
RGVhbGxvY2F0b3IodGFyZ2V0LCB0YXJnZXRMZW5ndGgpOwotICAgIERhdGFEZWFsbG9jYXRvciBw
b3N0RGF0YURlYWxsb2NhdG9yKHBvc3REYXRhLCBwb3N0RGF0YUxlbmd0aCk7Ci0KLSAgICBOZXRz
Y2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gcGx1Z2luUHJveHlNYXAoKS5nZXQoY2xp
ZW50UG9ydCk7Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxV
UkU7Ci0gICAgCi0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZVByb3h5
ID0gaG9zdFByb3h5LT5wbHVnaW5JbnN0YW5jZShwbHVnaW5JRCk7Ci0gICAgaWYgKCFpbnN0YW5j
ZVByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAgdWludDMyX3Qgc3Ry
ZWFtSUQgPSAwOwotICAgIE5QRXJyb3IgcmVzdWx0ID0gaW5zdGFuY2VQcm94eS0+bG9hZFVSTCh1
cmwsIHRhcmdldCwgcG9zdERhdGEsIHBvc3REYXRhTGVuZ3RoLCBzdGF0aWNfY2FzdDxMb2FkVVJM
RmxhZ3M+KGZsYWdzKSwgc3RyZWFtSUQpOwotICAgIAotICAgICpvdXRSZXN1bHQgPSByZXN1bHQ7
Ci0gICAgKm91dFN0cmVhbUlEID0gc3RyZWFtSUQ7Ci0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsK
LX0KLQota2Vybl9yZXR1cm5fdCBXS1BDQ2FuY2VsTG9hZFVSTChtYWNoX3BvcnRfdCBjbGllbnRQ
b3J0LCB1aW50MzJfdCBwbHVnaW5JRCwgdWludDMyX3Qgc3RyZWFtSUQsIGludDE2X3QgcmVhc29u
KQotewotICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQoY2xpZW50UG9ydCkpOwotCi0gICAgTmV0
c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IHBsdWdpblByb3h5TWFwKCkuZ2V0KGNs
aWVudFBvcnQpOwotICAgIGlmICghaG9zdFByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlM
VVJFOwotICAgIAotICAgIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSogaW5zdGFuY2VQcm94
eSA9IGhvc3RQcm94eS0+cGx1Z2luSW5zdGFuY2UocGx1Z2luSUQpOwotICAgIGlmICghaW5zdGFu
Y2VQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBpZiAoIWlu
c3RhbmNlUHJveHktPmNhbmNlbFN0cmVhbUxvYWQoc3RyZWFtSUQsIHJlYXNvbikpCi0gICAgICAg
IHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0K
LQota2Vybl9yZXR1cm5fdCBXS1BDSW52YWxpZGF0ZVJlY3QobWFjaF9wb3J0X3QgY2xpZW50UG9y
dCwgdWludDMyX3QgcGx1Z2luSUQsIGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHdpZHRoLCBk
b3VibGUgaGVpZ2h0KQotewotICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQoY2xpZW50UG9ydCkp
OwotCi0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IHBsdWdpblByb3h5
TWFwKCkuZ2V0KGNsaWVudFBvcnQpOwotICAgIGlmICghaG9zdFByb3h5KQotICAgICAgICByZXR1
cm4gS0VSTl9TVUNDRVNTOwotCi0gICAgaWYgKCFob3N0UHJveHktPmlzUHJvY2Vzc2luZ1JlcXVl
c3RzKCkpIHsKLSAgICAgICAgaWYgKE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSogaW5zdGFu
Y2VQcm94eSA9IGhvc3RQcm94eS0+cGx1Z2luSW5zdGFuY2UocGx1Z2luSUQpKQotICAgICAgICAg
ICAgaW5zdGFuY2VQcm94eS0+aW52YWxpZGF0ZVJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0g
ICAgICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci0gICAgfQotCi0gICAgLy8gRGVmZXIgdGhlIHdv
cmsKLSAgICBDRlJ1bkxvb3BQZXJmb3JtQmxvY2soQ0ZSdW5Mb29wR2V0TWFpbigpLCBrQ0ZSdW5M
b29wRGVmYXVsdE1vZGUsIF57Ci0gICAgICAgIGlmIChOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSog
aG9zdFByb3h5ID0gcGx1Z2luUHJveHlNYXAoKS5nZXQoY2xpZW50UG9ydCkpIHsKLSAgICAgICAg
ICAgIGlmIChOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIGluc3RhbmNlUHJveHkgPSBob3N0
UHJveHktPnBsdWdpbkluc3RhbmNlKHBsdWdpbklEKSkKLSAgICAgICAgICAgICAgICBpbnN0YW5j
ZVByb3h5LT5pbnZhbGlkYXRlUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgfQot
ICAgIH0pOwotCi0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1cm5fdCBX
S1BDR2V0U2NyaXB0YWJsZU5QT2JqZWN0UmVwbHkobWFjaF9wb3J0X3QgY2xpZW50UG9ydCwgdWlu
dDMyX3QgcGx1Z2luSUQsIHVpbnQzMl90IHJlcXVlc3RJRCwgdWludDMyX3Qgb2JqZWN0SUQpCi17
Ci0gICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJRChjbGllbnRQb3J0KSk7Ci0KLSAgICBOZXRzY2Fw
ZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gcGx1Z2luUHJveHlNYXAoKS5nZXQoY2xpZW50
UG9ydCk7Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7
Ci0gICAgCi0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZVByb3h5ID0g
aG9zdFByb3h5LT5wbHVnaW5JbnN0YW5jZShwbHVnaW5JRCk7Ci0gICAgaWYgKCFpbnN0YW5jZVBy
b3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAgaW5zdGFuY2VQcm94eS0+
c2V0Q3VycmVudFJlcGx5KHJlcXVlc3RJRCwgbWFrZVVuaXF1ZTxOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHk6OkdldFNjcmlwdGFibGVOUE9iamVjdFJlcGx5PihvYmplY3RJRCkpOwotICAgIHJl
dHVybiBLRVJOX1NVQ0NFU1M7Ci19Ci0KLWtlcm5fcmV0dXJuX3QgV0tQQ0Jvb2xlYW5SZXBseSht
YWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJfdCBwbHVnaW5JRCwgdWludDMyX3QgcmVxdWVz
dElELCBib29sZWFuX3QgcmVzdWx0KQotewotICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQoY2xp
ZW50UG9ydCkpOwotCi0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IHBs
dWdpblByb3h5TWFwKCkuZ2V0KGNsaWVudFBvcnQpOwotICAgIGlmICghaG9zdFByb3h5KQotICAg
ICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAgIAotICAgIE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eSogaW5zdGFuY2VQcm94eSA9IGhvc3RQcm94eS0+cGx1Z2luSW5zdGFuY2UocGx1Z2lu
SUQpOwotICAgIGlmICghaW5zdGFuY2VQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVS
RTsKLSAgICAKLSAgICBpbnN0YW5jZVByb3h5LT5zZXRDdXJyZW50UmVwbHkocmVxdWVzdElELCBt
YWtlVW5pcXVlPE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Qm9vbGVhblJlcGx5PihyZXN1
bHQpKTsKLSAgICByZXR1cm4gS0VSTl9TVUNDRVNTOwotfQotCi1rZXJuX3JldHVybl90IFdLUENC
b29sZWFuQW5kRGF0YVJlcGx5KG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQzMl90IHBsdWdp
bklELCB1aW50MzJfdCByZXF1ZXN0SUQsIGJvb2xlYW5fdCByZXR1cm5WYWx1ZSwgZGF0YV90IHJl
c3VsdERhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgcmVzdWx0TGVuZ3RoKQotewotICAgIEFT
U0VSVChNQUNIX1BPUlRfVkFMSUQoY2xpZW50UG9ydCkpOwotCi0gICAgRGF0YURlYWxsb2NhdG9y
IGRlYWxsb2NhdG9yKHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7Ci0KLSAgICBOZXRzY2FwZVBs
dWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gcGx1Z2luUHJveHlNYXAoKS5nZXQoY2xpZW50UG9y
dCk7Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0g
ICAgCi0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZVByb3h5ID0gaG9z
dFByb3h5LT5wbHVnaW5JbnN0YW5jZShwbHVnaW5JRCk7Ci0gICAgaWYgKCFpbnN0YW5jZVByb3h5
KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAgUmV0YWluUHRyPENGRGF0YVJl
Zj4gcmVzdWx0ID0gYWRvcHRDRihDRkRhdGFDcmVhdGUoMCwgcmVpbnRlcnByZXRfY2FzdDxVSW50
OCo+KHJlc3VsdERhdGEpLCByZXN1bHRMZW5ndGgpKTsKLSAgICBpbnN0YW5jZVByb3h5LT5zZXRD
dXJyZW50UmVwbHkocmVxdWVzdElELCBtYWtlVW5pcXVlPE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6Qm9vbGVhbkFuZERhdGFSZXBseT4ocmV0dXJuVmFsdWUsIHJlc3VsdCkpOwotICAgIAot
ICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci19Ci0KLWtlcm5fcmV0dXJuX3QgV0tQQ0luc3RhbnRp
YXRlUGx1Z2luUmVwbHkobWFjaF9wb3J0X3QgY2xpZW50UG9ydCwgdWludDMyX3QgcGx1Z2luSUQs
IHVpbnQzMl90IHJlcXVlc3RJRCwga2Vybl9yZXR1cm5fdCByZXN1bHQsIHVpbnQzMl90IHJlbmRl
ckNvbnRleHRJRCwgdWludDMyX3QgcmVuZGVyZXJUeXBlKQotewotICAgIEFTU0VSVChNQUNIX1BP
UlRfVkFMSUQoY2xpZW50UG9ydCkpOwotCi0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhv
c3RQcm94eSA9IHBsdWdpblByb3h5TWFwKCkuZ2V0KGNsaWVudFBvcnQpOwotICAgIGlmICghaG9z
dFByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAgIAotICAgIE5ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eSogaW5zdGFuY2VQcm94eSA9IGhvc3RQcm94eS0+cGx1Z2luSW5z
dGFuY2UocGx1Z2luSUQpOwotICAgIGlmICghaW5zdGFuY2VQcm94eSkKLSAgICAgICAgcmV0dXJu
IEtFUk5fRkFJTFVSRTsKLQotICAgIGluc3RhbmNlUHJveHktPnNldEN1cnJlbnRSZXBseShyZXF1
ZXN0SUQsIG1ha2VVbmlxdWU8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpJbnN0YW50aWF0
ZVBsdWdpblJlcGx5PihyZXN1bHQsIHJlbmRlckNvbnRleHRJRCwgc3RhdGljX2Nhc3Q8UmVuZGVy
ZXJUeXBlPihyZW5kZXJlclR5cGUpKSk7Ci0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQot
a2Vybl9yZXR1cm5fdCBXS1BDR2V0V2luZG93TlBPYmplY3QobWFjaF9wb3J0X3QgY2xpZW50UG9y
dCwgdWludDMyX3QgcGx1Z2luSUQsIHVpbnQzMl90KiBvdXRPYmplY3RJRCkKLXsKLSAgICBBU1NF
UlQoTUFDSF9QT1JUX1ZBTElEKGNsaWVudFBvcnQpKTsKLQotICAgIE5ldHNjYXBlUGx1Z2luSG9z
dFByb3h5KiBob3N0UHJveHkgPSBwbHVnaW5Qcm94eU1hcCgpLmdldChjbGllbnRQb3J0KTsKLSAg
ICBpZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAg
ICBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIGluc3RhbmNlUHJveHkgPSBob3N0UHJveHkt
PnBsdWdpbkluc3RhbmNlKHBsdWdpbklEKTsKLSAgICBpZiAoIWluc3RhbmNlUHJveHkpCi0gICAg
ICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0KLSAgICB1aW50MzJfdCBvYmplY3RJRDsKLSAgICBp
ZiAoIWluc3RhbmNlUHJveHktPmdldFdpbmRvd05QT2JqZWN0KG9iamVjdElEKSkKLSAgICAgICAg
cmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICAqb3V0T2JqZWN0SUQgPSBvYmplY3RJRDsg
ICAgCi0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1cm5fdCBXS1BDR2V0
UGx1Z2luRWxlbWVudE5QT2JqZWN0KG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQzMl90IHBs
dWdpbklELCB1aW50MzJfdCogb3V0T2JqZWN0SUQpCi17Ci0gICAgQVNTRVJUKE1BQ0hfUE9SVF9W
QUxJRChjbGllbnRQb3J0KSk7Ci0KLSAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFBy
b3h5ID0gcGx1Z2luUHJveHlNYXAoKS5nZXQoY2xpZW50UG9ydCk7Ci0gICAgaWYgKCFob3N0UHJv
eHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAgTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZVByb3h5ID0gaG9zdFByb3h5LT5wbHVnaW5JbnN0YW5j
ZShwbHVnaW5JRCk7Ci0gICAgaWYgKCFpbnN0YW5jZVByb3h5KQotICAgICAgICByZXR1cm4gS0VS
Tl9GQUlMVVJFOwotICAgIAotICAgIHVpbnQzMl90IG9iamVjdElEOwotICAgIGlmICghaW5zdGFu
Y2VQcm94eS0+Z2V0UGx1Z2luRWxlbWVudE5QT2JqZWN0KG9iamVjdElEKSkKLSAgICAgICAgcmV0
dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICAqb3V0T2JqZWN0SUQgPSBvYmplY3RJRDsgICAg
Ci0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1cm5fdCBXS1BDRm9yZ2V0
QnJvd3Nlck9iamVjdChtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJfdCBwbHVnaW5JRCwg
dWludDMyX3Qgb2JqZWN0SUQpCi17Ci0gICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJRChjbGllbnRQ
b3J0KSk7Ci0KLSAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gcGx1Z2lu
UHJveHlNYXAoKS5nZXQoY2xpZW50UG9ydCk7Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAg
IHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5KiBpbnN0YW5jZVByb3h5ID0gaG9zdFByb3h5LT5wbHVnaW5JbnN0YW5jZShwbHVnaW5JRCk7
Ci0gICAgaWYgKCFpbnN0YW5jZVByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwot
Ci0gICAgcmV0dXJuIGluc3RhbmNlUHJveHktPmZvcmdldEJyb3dzZXJPYmplY3RJRChvYmplY3RJ
RCkgPyBLRVJOX1NVQ0NFU1MgOiBLRVJOX0ZBSUxVUkU7Ci19Ci0KLWtlcm5fcmV0dXJuX3QgV0tQ
Q0V2YWx1YXRlKG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQzMl90IHBsdWdpbklELCB1aW50
MzJfdCByZXF1ZXN0SUQsIHVpbnQzMl90IG9iamVjdElELCBkYXRhX3Qgc2NyaXB0RGF0YSwgbWFj
aF9tc2dfdHlwZV9udW1iZXJfdCBzY3JpcHRMZW5ndGgsIGJvb2xlYW5fdCBhbGxvd1BvcHVwcykK
LXsKLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKGNsaWVudFBvcnQpKTsKLQotICAgIERhdGFE
ZWFsbG9jYXRvciBkZWFsbG9jYXRvcihzY3JpcHREYXRhLCBzY3JpcHRMZW5ndGgpOwotCi0gICAg
TmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IHBsdWdpblByb3h5TWFwKCkuZ2V0
KGNsaWVudFBvcnQpOwotICAgIGlmICghaG9zdFByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9G
QUlMVVJFOwotICAgIAotICAgIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSogaW5zdGFuY2VQ
cm94eSA9IGhvc3RQcm94eS0+cGx1Z2luSW5zdGFuY2UocGx1Z2luSUQpOwotICAgIGlmICghaW5z
dGFuY2VQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLQotICAgIFBsdWdpbkRl
c3Ryb3lEZWZlcnJlciBkZWZlcnJlcihpbnN0YW5jZVByb3h5KTsKLSAgICAKLSAgICBTdHJpbmcg
c2NyaXB0ID0gc2NyaXB0TGVuZ3RoID8gU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFj
ayhzY3JpcHREYXRhLCBzY3JpcHRMZW5ndGgpIDogZW1wdHlTdHJpbmcoKTsKLSAgICAKLSAgICBk
YXRhX3QgcmVzdWx0RGF0YSA9IDA7Ci0gICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCByZXN1bHRM
ZW5ndGggPSAwOwotICAgIGJvb2xlYW5fdCByZXR1cm5WYWx1ZSA9IGluc3RhbmNlUHJveHktPmV2
YWx1YXRlKG9iamVjdElELCBzY3JpcHQsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCwgYWxsb3dQ
b3B1cHMpOwotCi0gICAgaG9zdFByb3h5ID0gaW5zdGFuY2VQcm94eS0+aG9zdFByb3h5KCk7Ci0g
ICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0KLSAgICBf
V0tQSEJvb2xlYW5BbmREYXRhUmVwbHkoaG9zdFByb3h5LT5wb3J0KCksIGluc3RhbmNlUHJveHkt
PnBsdWdpbklEKCksIHJlcXVlc3RJRCwgcmV0dXJuVmFsdWUsIHJlc3VsdERhdGEsIHJlc3VsdExl
bmd0aCk7Ci0gICAgaWYgKHJlc3VsdERhdGEpCi0gICAgICAgIG1pZ19kZWFsbG9jYXRlKHJlaW50
ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190PihyZXN1bHREYXRhKSwgcmVzdWx0TGVuZ3RoKTsKLSAg
ICAgICAgCi0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1cm5fdCBXS1BD
R2V0U3RyaW5nSWRlbnRpZmllcihtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCBkYXRhX3QgbmFtZSwg
bWFjaF9tc2dfdHlwZV9udW1iZXJfdCBuYW1lQ250LCB1aW50NjRfdCogaWRlbnRpZmllcikKLXsK
LSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKGNsaWVudFBvcnQpKTsKLQotICAgIERhdGFEZWFs
bG9jYXRvciBkZWFsbG9jYXRvcihuYW1lLCBuYW1lQ250KTsKLQotICAgIENPTVBJTEVfQVNTRVJU
KHNpemVvZigqaWRlbnRpZmllcikgPT0gc2l6ZW9mKElkZW50aWZpZXJSZXAqKSwgaWRlbnRpZmll
cl9zaXplcyk7Ci0gICAgCi0gICAgKmlkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PHVpbnQ2
NF90PihJZGVudGlmaWVyUmVwOjpnZXQobmFtZSkpOwotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7
Ci19Ci0KLWtlcm5fcmV0dXJuX3QgV0tQQ0dldEludElkZW50aWZpZXIobWFjaF9wb3J0X3QgY2xp
ZW50UG9ydCwgaW50MzJfdCB2YWx1ZSwgdWludDY0X3QqIGlkZW50aWZpZXIpCi17Ci0gICAgQVNT
RVJUKE1BQ0hfUE9SVF9WQUxJRChjbGllbnRQb3J0KSk7Ci0KLSAgICBDT01QSUxFX0FTU0VSVChz
aXplb2YoKmlkZW50aWZpZXIpID09IHNpemVvZihOUElkZW50aWZpZXIpLCBpZGVudGlmaWVyX3Np
emVzKTsKLSAgICAKLSAgICAqaWRlbnRpZmllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+
KElkZW50aWZpZXJSZXA6OmdldCh2YWx1ZSkpOwotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci19
Ci0KLXN0YXRpYyBJZGVudGlmaWVyIGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChJZGVudGlm
aWVyUmVwKiBpZGVudGlmaWVyKQotewotICAgIEFTU0VSVChJZGVudGlmaWVyUmVwOjppc1ZhbGlk
KGlkZW50aWZpZXIpKTsKLSAgICBBU1NFUlQoaWRlbnRpZmllci0+aXNTdHJpbmcoKSk7Ci0gIAot
ICAgIGNvbnN0IGNoYXIqIHN0ciA9IGlkZW50aWZpZXItPnN0cmluZygpOyAgICAKLSAgICByZXR1
cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhjb21tb25WTSgpLCBTdHJpbmc6OmZyb21VVEY4V2l0
aExhdGluMUZhbGxiYWNrKHN0ciwgc3RybGVuKHN0cikpKTsKLX0KLQota2Vybl9yZXR1cm5fdCBX
S1BDSW52b2tlKG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQzMl90IHBsdWdpbklELCB1aW50
MzJfdCByZXF1ZXN0SUQsIHVpbnQzMl90IG9iamVjdElELCB1aW50NjRfdCBzZXJ2ZXJJZGVudGlm
aWVyLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCBhcmd1bWVudHNEYXRhLCBtYWNo
X21zZ190eXBlX251bWJlcl90IGFyZ3VtZW50c0xlbmd0aCkgCi17Ci0gICAgQVNTRVJUKE1BQ0hf
UE9SVF9WQUxJRChjbGllbnRQb3J0KSk7Ci0KLSAgICBEYXRhRGVhbGxvY2F0b3IgZGVhbGxvY2F0
b3IoYXJndW1lbnRzRGF0YSwgYXJndW1lbnRzTGVuZ3RoKTsKLQotICAgIE5ldHNjYXBlUGx1Z2lu
SG9zdFByb3h5KiBob3N0UHJveHkgPSBwbHVnaW5Qcm94eU1hcCgpLmdldChjbGllbnRQb3J0KTsK
LSAgICBpZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAK
LSAgICBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIGluc3RhbmNlUHJveHkgPSBob3N0UHJv
eHktPnBsdWdpbkluc3RhbmNlKHBsdWdpbklEKTsKLSAgICBpZiAoIWluc3RhbmNlUHJveHkpCi0g
ICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0KLSAgICBQbHVnaW5EZXN0cm95RGVmZXJyZXIg
ZGVmZXJyZXIoaW5zdGFuY2VQcm94eSk7Ci0gICAgCi0gICAgSWRlbnRpZmllclJlcCogaWRlbnRp
ZmllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SWRlbnRpZmllclJlcCo+KHNlcnZlcklkZW50aWZpZXIp
OwotICAgIGlmICghSWRlbnRpZmllclJlcDo6aXNWYWxpZChpZGVudGlmaWVyKSkKLSAgICAgICAg
cmV0dXJuIEtFUk5fRkFJTFVSRTsKLQotICAgIElkZW50aWZpZXIgbWV0aG9kTmFtZUlkZW50aWZp
ZXIgPSBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAoaWRlbnRpZmllcik7Ci0KLSAgICBkYXRh
X3QgcmVzdWx0RGF0YSA9IDA7Ci0gICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCByZXN1bHRMZW5n
dGggPSAwOwotICAgIGJvb2xlYW5fdCByZXR1cm5WYWx1ZSA9IGluc3RhbmNlUHJveHktPmludm9r
ZShvYmplY3RJRCwgbWV0aG9kTmFtZUlkZW50aWZpZXIsIGFyZ3VtZW50c0RhdGEsIGFyZ3VtZW50
c0xlbmd0aCwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLQotICAgIGhvc3RQcm94eSA9IGlu
c3RhbmNlUHJveHktPmhvc3RQcm94eSgpOwotICAgIGlmICghaG9zdFByb3h5KQotICAgICAgICBy
ZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAgX1dLUEhCb29sZWFuQW5kRGF0YVJlcGx5KGhvc3RQ
cm94eS0+cG9ydCgpLCBpbnN0YW5jZVByb3h5LT5wbHVnaW5JRCgpLCByZXF1ZXN0SUQsIHJldHVy
blZhbHVlLCByZXN1bHREYXRhLCByZXN1bHRMZW5ndGgpOwotICAgIGlmIChyZXN1bHREYXRhKQot
ICAgICAgICBtaWdfZGVhbGxvY2F0ZShyZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdD4ocmVz
dWx0RGF0YSksIHJlc3VsdExlbmd0aCk7Ci0gICAgCi0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsK
LX0KLQota2Vybl9yZXR1cm5fdCBXS1BDSW52b2tlRGVmYXVsdChtYWNoX3BvcnRfdCBjbGllbnRQ
b3J0LCB1aW50MzJfdCBwbHVnaW5JRCwgdWludDMyX3QgcmVxdWVzdElELCB1aW50MzJfdCBvYmpl
Y3RJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90IGFyZ3VtZW50c0Rh
dGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgYXJndW1lbnRzTGVuZ3RoKQotewotICAgIEFTU0VS
VChNQUNIX1BPUlRfVkFMSUQoY2xpZW50UG9ydCkpOwotCi0gICAgRGF0YURlYWxsb2NhdG9yIGRl
YWxsb2NhdG9yKGFyZ3VtZW50c0RhdGEsIGFyZ3VtZW50c0xlbmd0aCk7Ci0KLSAgICBOZXRzY2Fw
ZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gcGx1Z2luUHJveHlNYXAoKS5nZXQoY2xpZW50
UG9ydCk7Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7
Ci0gICAgCi0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZVByb3h5ID0g
aG9zdFByb3h5LT5wbHVnaW5JbnN0YW5jZShwbHVnaW5JRCk7Ci0gICAgaWYgKCFpbnN0YW5jZVBy
b3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAgUGx1Z2luRGVzdHJveURl
ZmVycmVyIGRlZmVycmVyKGluc3RhbmNlUHJveHkpOwotCi0gICAgZGF0YV90IHJlc3VsdERhdGEg
PSAwOwotICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgcmVzdWx0TGVuZ3RoID0gMDsKLSAgICBi
b29sZWFuX3QgcmV0dXJuVmFsdWUgPSBpbnN0YW5jZVByb3h5LT5pbnZva2VEZWZhdWx0KG9iamVj
dElELCBhcmd1bWVudHNEYXRhLCBhcmd1bWVudHNMZW5ndGgsIHJlc3VsdERhdGEsIHJlc3VsdExl
bmd0aCk7Ci0KLSAgICBob3N0UHJveHkgPSBpbnN0YW5jZVByb3h5LT5ob3N0UHJveHkoKTsKLSAg
ICBpZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLQotICAgIF9X
S1BIQm9vbGVhbkFuZERhdGFSZXBseShob3N0UHJveHktPnBvcnQoKSwgaW5zdGFuY2VQcm94eS0+
cGx1Z2luSUQoKSwgcmVxdWVzdElELCByZXR1cm5WYWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0TGVu
Z3RoKTsKLSAgICBpZiAocmVzdWx0RGF0YSkKLSAgICAgICAgbWlnX2RlYWxsb2NhdGUocmVpbnRl
cnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KHJlc3VsdERhdGEpLCByZXN1bHRMZW5ndGgpOwotICAg
IAotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci19Ci0KLWtlcm5fcmV0dXJuX3QgV0tQQ0NvbnN0
cnVjdChtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJfdCBwbHVnaW5JRCwgdWludDMyX3Qg
b2JqZWN0SUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90IGFyZ3VtZW50c0Rh
dGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgYXJndW1lbnRzTGVuZ3RoLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sZWFuX3QqIHJldHVyblZhbHVlLCBkYXRhX3QqIHJlc3VsdERh
dGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QqIHJlc3VsdExlbmd0aCkKLXsKLSAgICBBU1NFUlQo
TUFDSF9QT1JUX1ZBTElEKGNsaWVudFBvcnQpKTsKLQotICAgIERhdGFEZWFsbG9jYXRvciBkZWFs
bG9jYXRvcihhcmd1bWVudHNEYXRhLCBhcmd1bWVudHNMZW5ndGgpOwotCi0gICAgTmV0c2NhcGVQ
bHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9IHBsdWdpblByb3h5TWFwKCkuZ2V0KGNsaWVudFBv
cnQpOwotICAgIGlmICghaG9zdFByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwot
ICAgIAotICAgIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSogaW5zdGFuY2VQcm94eSA9IGhv
c3RQcm94eS0+cGx1Z2luSW5zdGFuY2UocGx1Z2luSUQpOwotICAgIGlmICghaW5zdGFuY2VQcm94
eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLQotICAgIFBsdWdpbkRlc3Ryb3lEZWZl
cnJlciBkZWZlcnJlcihpbnN0YW5jZVByb3h5KTsKLQotICAgICpyZXR1cm5WYWx1ZSA9IGluc3Rh
bmNlUHJveHktPmNvbnN0cnVjdChvYmplY3RJRCwgYXJndW1lbnRzRGF0YSwgYXJndW1lbnRzTGVu
Z3RoLCAqcmVzdWx0RGF0YSwgKnJlc3VsdExlbmd0aCk7Ci0gICAgCi0gICAgcmV0dXJuIEtFUk5f
U1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1cm5fdCBXS1BDR2V0UHJvcGVydHkobWFjaF9wb3J0X3Qg
Y2xpZW50UG9ydCwgdWludDMyX3QgcGx1Z2luSUQsIHVpbnQzMl90IHJlcXVlc3RJRCwgdWludDMy
X3Qgb2JqZWN0SUQsIHVpbnQ2NF90IHNlcnZlcklkZW50aWZpZXIpCi17Ci0gICAgQVNTRVJUKE1B
Q0hfUE9SVF9WQUxJRChjbGllbnRQb3J0KSk7Ci0KLSAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94
eSogaG9zdFByb3h5ID0gcGx1Z2luUHJveHlNYXAoKS5nZXQoY2xpZW50UG9ydCk7Ci0gICAgaWYg
KCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZVByb3h5ID0gaG9zdFByb3h5LT5wbHVn
aW5JbnN0YW5jZShwbHVnaW5JRCk7Ci0gICAgaWYgKCFpbnN0YW5jZVByb3h5KQotICAgICAgICBy
ZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAgSWRlbnRpZmllclJlcCogaWRlbnRpZmllciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8SWRlbnRpZmllclJlcCo+KHNlcnZlcklkZW50aWZpZXIpOwotICAgIGlm
ICghSWRlbnRpZmllclJlcDo6aXNWYWxpZChpZGVudGlmaWVyKSkKLSAgICAgICAgcmV0dXJuIEtF
Uk5fRkFJTFVSRTsKLSAgICAKLSAgICBQbHVnaW5EZXN0cm95RGVmZXJyZXIgZGVmZXJyZXIoaW5z
dGFuY2VQcm94eSk7Ci0KLSAgICBkYXRhX3QgcmVzdWx0RGF0YSA9IDA7Ci0gICAgbWFjaF9tc2df
dHlwZV9udW1iZXJfdCByZXN1bHRMZW5ndGggPSAwOwotICAgIGJvb2xlYW5fdCByZXR1cm5WYWx1
ZTsKLSAgICAKLSAgICBpZiAoaWRlbnRpZmllci0+aXNTdHJpbmcoKSkgewotICAgICAgICBJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZUlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJS
ZXAoaWRlbnRpZmllcik7ICAgICAgICAKLSAgICAgICAgcmV0dXJuVmFsdWUgPSBpbnN0YW5jZVBy
b3h5LT5nZXRQcm9wZXJ0eShvYmplY3RJRCwgcHJvcGVydHlOYW1lSWRlbnRpZmllciwgcmVzdWx0
RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLSAgICB9IGVsc2UgCi0gICAgICAgIHJldHVyblZhbHVlID0g
aW5zdGFuY2VQcm94eS0+c2V0UHJvcGVydHkob2JqZWN0SUQsIGlkZW50aWZpZXItPm51bWJlcigp
LCByZXN1bHREYXRhLCByZXN1bHRMZW5ndGgpOwotCi0gICAgaG9zdFByb3h5ID0gaW5zdGFuY2VQ
cm94eS0+aG9zdFByb3h5KCk7Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBL
RVJOX0ZBSUxVUkU7Ci0KLSAgICBfV0tQSEJvb2xlYW5BbmREYXRhUmVwbHkoaG9zdFByb3h5LT5w
b3J0KCksIGluc3RhbmNlUHJveHktPnBsdWdpbklEKCksIHJlcXVlc3RJRCwgcmV0dXJuVmFsdWUs
IHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7Ci0gICAgaWYgKHJlc3VsdERhdGEpCi0gICAgICAg
IG1pZ19kZWFsbG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190PihyZXN1bHREYXRh
KSwgcmVzdWx0TGVuZ3RoKTsKLSAgICAKLSAgICByZXR1cm4gS0VSTl9TVUNDRVNTOwotfQotCi1r
ZXJuX3JldHVybl90IFdLUENTZXRQcm9wZXJ0eShtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50
MzJfdCBwbHVnaW5JRCwgdWludDMyX3QgcmVxdWVzdElELCB1aW50MzJfdCBvYmplY3RJRCwgdWlu
dDY0X3Qgc2VydmVySWRlbnRpZmllciwgZGF0YV90IHZhbHVlRGF0YSwgbWFjaF9tc2dfdHlwZV9u
dW1iZXJfdCB2YWx1ZUxlbmd0aCkKLXsKLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKGNsaWVu
dFBvcnQpKTsKLQotICAgIERhdGFEZWFsbG9jYXRvciBkZWFsbG9jYXRvcih2YWx1ZURhdGEsIHZh
bHVlTGVuZ3RoKTsKLQotICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBw
bHVnaW5Qcm94eU1hcCgpLmdldChjbGllbnRQb3J0KTsKLSAgICBpZiAoIWhvc3RQcm94eSkKLSAg
ICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHkqIGluc3RhbmNlUHJveHkgPSBob3N0UHJveHktPnBsdWdpbkluc3RhbmNlKHBsdWdp
bklEKTsKLSAgICBpZiAoIWluc3RhbmNlUHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxV
UkU7Ci0KLSAgICBQbHVnaW5EZXN0cm95RGVmZXJyZXIgZGVmZXJyZXIoaW5zdGFuY2VQcm94eSk7
Ci0KLSAgICBJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2FzdDxJZGVu
dGlmaWVyUmVwKj4oc2VydmVySWRlbnRpZmllcik7Ci0gICAgaWYgKCFJZGVudGlmaWVyUmVwOjpp
c1ZhbGlkKGlkZW50aWZpZXIpKQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAg
Ym9vbCByZXN1bHQ7Ci0gICAgaWYgKGlkZW50aWZpZXItPmlzU3RyaW5nKCkpIHsKLSAgICAgICAg
SWRlbnRpZmllciBwcm9wZXJ0eU5hbWVJZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21JZGVudGlm
aWVyUmVwKGlkZW50aWZpZXIpOyAgICAgICAgCi0gICAgICAgIHJlc3VsdCA9IGluc3RhbmNlUHJv
eHktPnNldFByb3BlcnR5KG9iamVjdElELCBwcm9wZXJ0eU5hbWVJZGVudGlmaWVyLCB2YWx1ZURh
dGEsIHZhbHVlTGVuZ3RoKTsKLSAgICB9IGVsc2UgCi0gICAgICAgIHJlc3VsdCA9IGluc3RhbmNl
UHJveHktPnNldFByb3BlcnR5KG9iamVjdElELCBpZGVudGlmaWVyLT5udW1iZXIoKSwgdmFsdWVE
YXRhLCB2YWx1ZUxlbmd0aCk7Ci0KLSAgICBob3N0UHJveHkgPSBpbnN0YW5jZVByb3h5LT5ob3N0
UHJveHkoKTsKLSAgICBpZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVS
RTsKLQotICAgIF9XS1BIQm9vbGVhblJlcGx5KGhvc3RQcm94eS0+cG9ydCgpLCBpbnN0YW5jZVBy
b3h5LT5wbHVnaW5JRCgpLCByZXF1ZXN0SUQsIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gS0VSTl9T
VUNDRVNTOwotfQotCi1rZXJuX3JldHVybl90IFdLUENSZW1vdmVQcm9wZXJ0eShtYWNoX3BvcnRf
dCBjbGllbnRQb3J0LCB1aW50MzJfdCBwbHVnaW5JRCwgdWludDMyX3QgcmVxdWVzdElELCB1aW50
MzJfdCBvYmplY3RJRCwgdWludDY0X3Qgc2VydmVySWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQo
TUFDSF9QT1JUX1ZBTElEKGNsaWVudFBvcnQpKTsKLQotICAgIE5ldHNjYXBlUGx1Z2luSG9zdFBy
b3h5KiBob3N0UHJveHkgPSBwbHVnaW5Qcm94eU1hcCgpLmdldChjbGllbnRQb3J0KTsKLSAgICBp
ZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIGluc3RhbmNlUHJveHkgPSBob3N0UHJveHktPnBs
dWdpbkluc3RhbmNlKHBsdWdpbklEKTsKLSAgICBpZiAoIWluc3RhbmNlUHJveHkpCi0gICAgICAg
IHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAgUGx1Z2luRGVzdHJveURlZmVycmVyIGRl
ZmVycmVyKGluc3RhbmNlUHJveHkpOwotCi0gICAgSWRlbnRpZmllclJlcCogaWRlbnRpZmllciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8SWRlbnRpZmllclJlcCo+KHNlcnZlcklkZW50aWZpZXIpOwotICAg
IGlmICghSWRlbnRpZmllclJlcDo6aXNWYWxpZChpZGVudGlmaWVyKSkKLSAgICAgICAgcmV0dXJu
IEtFUk5fRkFJTFVSRTsKLQotICAgIGJvb2wgcmVzdWx0OwotICAgIGlmIChpZGVudGlmaWVyLT5p
c1N0cmluZygpKSB7Ci0gICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lSWRlbnRpZmllciA9
IGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChpZGVudGlmaWVyKTsgICAgICAgIAotICAgICAg
ICByZXN1bHQgPSBpbnN0YW5jZVByb3h5LT5yZW1vdmVQcm9wZXJ0eShvYmplY3RJRCwgcHJvcGVy
dHlOYW1lSWRlbnRpZmllcik7Ci0gICAgfSBlbHNlIAotICAgICAgICByZXN1bHQgPSBpbnN0YW5j
ZVByb3h5LT5yZW1vdmVQcm9wZXJ0eShvYmplY3RJRCwgaWRlbnRpZmllci0+bnVtYmVyKCkpOwot
Ci0gICAgaG9zdFByb3h5ID0gaW5zdGFuY2VQcm94eS0+aG9zdFByb3h5KCk7Ci0gICAgaWYgKCFo
b3N0UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0KLSAgICBfV0tQSEJvb2xl
YW5SZXBseShob3N0UHJveHktPnBvcnQoKSwgaW5zdGFuY2VQcm94eS0+cGx1Z2luSUQoKSwgcmVx
dWVzdElELCByZXN1bHQpOwotCi0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9y
ZXR1cm5fdCBXS1BDSGFzUHJvcGVydHkobWFjaF9wb3J0X3QgY2xpZW50UG9ydCwgdWludDMyX3Qg
cGx1Z2luSUQsIHVpbnQzMl90IHJlcXVlc3RJRCwgdWludDMyX3Qgb2JqZWN0SUQsIHVpbnQ2NF90
IHNlcnZlcklkZW50aWZpZXIpCi17Ci0gICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJRChjbGllbnRQ
b3J0KSk7Ci0KLSAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gcGx1Z2lu
UHJveHlNYXAoKS5nZXQoY2xpZW50UG9ydCk7Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAg
IHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5KiBpbnN0YW5jZVByb3h5ID0gaG9zdFByb3h5LT5wbHVnaW5JbnN0YW5jZShwbHVnaW5JRCk7
Ci0gICAgaWYgKCFpbnN0YW5jZVByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwot
ICAgIAotICAgIFBsdWdpbkRlc3Ryb3lEZWZlcnJlciBkZWZlcnJlcihpbnN0YW5jZVByb3h5KTsK
LQotICAgIElkZW50aWZpZXJSZXAqIGlkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PElkZW50
aWZpZXJSZXAqPihzZXJ2ZXJJZGVudGlmaWVyKTsKLSAgICBpZiAoIUlkZW50aWZpZXJSZXA6Omlz
VmFsaWQoaWRlbnRpZmllcikpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0g
ICAgYm9vbGVhbl90IHJldHVyblZhbHVlOwotICAgIGlmIChpZGVudGlmaWVyLT5pc1N0cmluZygp
KSB7Ci0gICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lSWRlbnRpZmllciA9IGlkZW50aWZp
ZXJGcm9tSWRlbnRpZmllclJlcChpZGVudGlmaWVyKTsgICAgICAgIAotICAgICAgICByZXR1cm5W
YWx1ZSA9IGluc3RhbmNlUHJveHktPmhhc1Byb3BlcnR5KG9iamVjdElELCBwcm9wZXJ0eU5hbWVJ
ZGVudGlmaWVyKTsKLSAgICB9IGVsc2UgCi0gICAgICAgIHJldHVyblZhbHVlID0gaW5zdGFuY2VQ
cm94eS0+aGFzUHJvcGVydHkob2JqZWN0SUQsIGlkZW50aWZpZXItPm51bWJlcigpKTsKLQotICAg
IGhvc3RQcm94eSA9IGluc3RhbmNlUHJveHktPmhvc3RQcm94eSgpOwotICAgIGlmICghaG9zdFBy
b3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAgX1dLUEhCb29sZWFuUmVw
bHkoaG9zdFByb3h5LT5wb3J0KCksIGluc3RhbmNlUHJveHktPnBsdWdpbklEKCksIHJlcXVlc3RJ
RCwgcmV0dXJuVmFsdWUpOwotICAgIAotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci19Ci0KLWtl
cm5fcmV0dXJuX3QgV0tQQ0hhc01ldGhvZChtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJf
dCBwbHVnaW5JRCwgdWludDMyX3QgcmVxdWVzdElELCB1aW50MzJfdCBvYmplY3RJRCwgdWludDY0
X3Qgc2VydmVySWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKGNsaWVu
dFBvcnQpKTsKLQotICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBwbHVn
aW5Qcm94eU1hcCgpLmdldChjbGllbnRQb3J0KTsKLSAgICBpZiAoIWhvc3RQcm94eSkKLSAgICAg
ICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAKLSAgICBOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHkqIGluc3RhbmNlUHJveHkgPSBob3N0UHJveHktPnBsdWdpbkluc3RhbmNlKHBsdWdpbklE
KTsKLSAgICBpZiAoIWluc3RhbmNlUHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7
Ci0gICAgCi0gICAgUGx1Z2luRGVzdHJveURlZmVycmVyIGRlZmVycmVyKGluc3RhbmNlUHJveHkp
OwotCi0gICAgSWRlbnRpZmllclJlcCogaWRlbnRpZmllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SWRl
bnRpZmllclJlcCo+KHNlcnZlcklkZW50aWZpZXIpOwotICAgIGlmICghSWRlbnRpZmllclJlcDo6
aXNWYWxpZChpZGVudGlmaWVyKSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAgICAK
LSAgICBJZGVudGlmaWVyIG1ldGhvZE5hbWVJZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21JZGVu
dGlmaWVyUmVwKGlkZW50aWZpZXIpOyAgICAgICAgCi0gICAgYm9vbGVhbl90IHJldHVyblZhbHVl
ID0gaW5zdGFuY2VQcm94eS0+aGFzTWV0aG9kKG9iamVjdElELCBtZXRob2ROYW1lSWRlbnRpZmll
cik7Ci0KLSAgICBob3N0UHJveHkgPSBpbnN0YW5jZVByb3h5LT5ob3N0UHJveHkoKTsKLSAgICBp
ZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLQotICAgIF9XS1BI
Qm9vbGVhblJlcGx5KGhvc3RQcm94eS0+cG9ydCgpLCBpbnN0YW5jZVByb3h5LT5wbHVnaW5JRCgp
LCByZXF1ZXN0SUQsIHJldHVyblZhbHVlKTsKLQotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci19
Ci0KLWtlcm5fcmV0dXJuX3QgV0tQQ0lkZW50aWZpZXJJbmZvKG1hY2hfcG9ydF90IGNsaWVudFBv
cnQsIHVpbnQ2NF90IHNlcnZlcklkZW50aWZpZXIsIGRhdGFfdCogaW5mb0RhdGEsIG1hY2hfbXNn
X3R5cGVfbnVtYmVyX3QqIGluZm9MZW5ndGgpCi17Ci0gICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJ
RChjbGllbnRQb3J0KSk7Ci0KLSAgICBJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyID0gcmVpbnRl
cnByZXRfY2FzdDxJZGVudGlmaWVyUmVwKj4oc2VydmVySWRlbnRpZmllcik7Ci0gICAgaWYgKCFJ
ZGVudGlmaWVyUmVwOjppc1ZhbGlkKGlkZW50aWZpZXIpKQotICAgICAgICByZXR1cm4gS0VSTl9G
QUlMVVJFOwotICAgIAotICAgIGlkIGluZm87Ci0gICAgaWYgKGlkZW50aWZpZXItPmlzU3RyaW5n
KCkpIHsKLSAgICAgICAgY29uc3QgY2hhciogc3RyID0gaWRlbnRpZmllci0+c3RyaW5nKCk7Ci0g
ICAgICAgIGluZm8gPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXNOb0NvcHk6KHZvaWQqKXN0ciBsZW5n
dGg6c3RybGVuKHN0cikgZnJlZVdoZW5Eb25lOk5PXTsKLSAgICB9IGVsc2UgCi0gICAgICAgIGlu
Zm8gPSBAKGlkZW50aWZpZXItPm51bWJlcigpKTsKLQotICAgIE5TRGF0YSAqZGF0YSA9IFtOU1By
b3BlcnR5TGlzdFNlcmlhbGl6YXRpb24gZGF0YVdpdGhQcm9wZXJ0eUxpc3Q6aW5mbyBmb3JtYXQ6
TlNQcm9wZXJ0eUxpc3RCaW5hcnlGb3JtYXRfdjFfMCBvcHRpb25zOjAgZXJyb3I6bnVsbHB0cl07
Ci0gICAgQVNTRVJUKGRhdGEpOwotICAgIAotICAgICppbmZvTGVuZ3RoID0gZGF0YS5sZW5ndGg7
Ci0gICAgbWlnX2FsbG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190Kj4oaW5mb0Rh
dGEpLCAqaW5mb0xlbmd0aCk7Ci0gICAgCi0gICAgbWVtY3B5KCppbmZvRGF0YSwgZGF0YS5ieXRl
cywgKmluZm9MZW5ndGgpOwotICAgIAotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci19Ci0KLWtl
cm5fcmV0dXJuX3QgV0tQQ0VudW1lcmF0ZShtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJf
dCBwbHVnaW5JRCwgdWludDMyX3QgcmVxdWVzdElELCB1aW50MzJfdCBvYmplY3RJRCkKLXsKLSAg
ICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKGNsaWVudFBvcnQpKTsKLQotICAgIE5ldHNjYXBlUGx1
Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBwbHVnaW5Qcm94eU1hcCgpLmdldChjbGllbnRQb3J0
KTsKLSAgICBpZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLSAg
ICAKLSAgICBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIGluc3RhbmNlUHJveHkgPSBob3N0
UHJveHktPnBsdWdpbkluc3RhbmNlKHBsdWdpbklEKTsKLSAgICBpZiAoIWluc3RhbmNlUHJveHkp
Ci0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAgZGF0YV90IHJlc3VsdERh
dGEgPSAwOwotICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgcmVzdWx0TGVuZ3RoID0gMDsKLSAg
ICBib29sZWFuX3QgcmV0dXJuVmFsdWUgPSBpbnN0YW5jZVByb3h5LT5lbnVtZXJhdGUob2JqZWN0
SUQsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7Ci0KLSAgICBob3N0UHJveHkgPSBpbnN0YW5j
ZVByb3h5LT5ob3N0UHJveHkoKTsKLSAgICBpZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJu
IEtFUk5fRkFJTFVSRTsKLQotICAgIF9XS1BIQm9vbGVhbkFuZERhdGFSZXBseShob3N0UHJveHkt
PnBvcnQoKSwgaW5zdGFuY2VQcm94eS0+cGx1Z2luSUQoKSwgcmVxdWVzdElELCByZXR1cm5WYWx1
ZSwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLSAgICAKLSAgICBpZiAocmVzdWx0RGF0YSkK
LSAgICAgICAgbWlnX2RlYWxsb2NhdGUocmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KHJl
c3VsdERhdGEpLCByZXN1bHRMZW5ndGgpOwotICAgIAotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7
Ci19Ci0KLWtlcm5fcmV0dXJuX3QgV0tQQ1NldE1lbnVCYXJWaXNpYmxlKG1hY2hfcG9ydF90IGNs
aWVudFBvcnQsIGJvb2xlYW5fdCBtZW51QmFyVmlzaWJsZSkKLXsKLSAgICBBU1NFUlQoTUFDSF9Q
T1JUX1ZBTElEKGNsaWVudFBvcnQpKTsKLQotICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBo
b3N0UHJveHkgPSBwbHVnaW5Qcm94eU1hcCgpLmdldChjbGllbnRQb3J0KTsKLSAgICBpZiAoIWhv
c3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKLQotICAgIGhvc3RQcm94eS0+
c2V0TWVudUJhclZpc2libGUobWVudUJhclZpc2libGUpOwotCi0gICAgcmV0dXJuIEtFUk5fU1VD
Q0VTUzsKLX0KLQota2Vybl9yZXR1cm5fdCBXS1BDU2V0RnVsbHNjcmVlbldpbmRvd0lzU2hvd2lu
ZyhtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCBib29sZWFuX3QgZnVsbHNjcmVlbldpbmRvd0lzU2hv
d2luZykKLXsKLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKGNsaWVudFBvcnQpKTsKLQotICAg
IE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBwbHVnaW5Qcm94eU1hcCgpLmdl
dChjbGllbnRQb3J0KTsKLSAgICBpZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5f
RkFJTFVSRTsKLQotICAgIGhvc3RQcm94eS0+c2V0RnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZyhm
dWxsc2NyZWVuV2luZG93SXNTaG93aW5nKTsKLQotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci19
Ci0KLWtlcm5fcmV0dXJuX3QgV0tQQ1NldE1vZGFsKG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIGJv
b2xlYW5fdCBtb2RhbCkKLXsKLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKGNsaWVudFBvcnQp
KTsKLQotICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBwbHVnaW5Qcm94
eU1hcCgpLmdldChjbGllbnRQb3J0KTsKLSAgICBpZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0
dXJuIEtFUk5fRkFJTFVSRTsKLQotICAgIGlmICghaG9zdFByb3h5LT5pc1Byb2Nlc3NpbmdSZXF1
ZXN0cygpKSB7Ci0gICAgICAgIGhvc3RQcm94eS0+c2V0TW9kYWwobW9kYWwpOwotICAgICAgICBy
ZXR1cm4gS0VSTl9TVUNDRVNTOwotICAgIH0KLQotICAgIC8vIERlZmVyIHRoZSB3b3JrCi0gICAg
Q0ZSdW5Mb29wUGVyZm9ybUJsb2NrKENGUnVuTG9vcEdldE1haW4oKSwga0NGUnVuTG9vcERlZmF1
bHRNb2RlLCBeewotICAgICAgICBpZiAoTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94
eSA9IHBsdWdpblByb3h5TWFwKCkuZ2V0KGNsaWVudFBvcnQpKQotICAgICAgICAgICAgaG9zdFBy
b3h5LT5zZXRNb2RhbChtb2RhbCk7Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gS0VSTl9TVUNDRVNT
OwotfQotCi1rZXJuX3JldHVybl90IFdLUENHZXRDb29raWVzKG1hY2hfcG9ydF90IGNsaWVudFBv
cnQsIHVpbnQzMl90IHBsdWdpbklELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
X3QgdXJsRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCB1cmxMZW5ndGgsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2xlYW5fdCogcmV0dXJuVmFsdWUsIGRhdGFfdCogY29va2ll
c0RhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QqIGNvb2tpZXNMZW5ndGgpCi17Ci0gICAgQVNT
RVJUKE1BQ0hfUE9SVF9WQUxJRChjbGllbnRQb3J0KSk7Ci0KLSAgICAqY29va2llc0RhdGEgPSBu
dWxscHRyOwotICAgICpjb29raWVzTGVuZ3RoID0gMDsKLSAgICAKLSAgICBEYXRhRGVhbGxvY2F0
b3IgZGVhbGxvY2F0b3IodXJsRGF0YSwgdXJsTGVuZ3RoKTsKLSAgICAKLSAgICBOZXRzY2FwZVBs
dWdpbkhvc3RQcm94eSogaG9zdFByb3h5ID0gcGx1Z2luUHJveHlNYXAoKS5nZXQoY2xpZW50UG9y
dCk7Ci0gICAgaWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0g
ICAgCi0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZVByb3h5ID0gaG9z
dFByb3h5LT5wbHVnaW5JbnN0YW5jZShwbHVnaW5JRCk7Ci0gICAgaWYgKCFpbnN0YW5jZVByb3h5
KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAgIAotICAgICpyZXR1cm5WYWx1ZSA9
IGluc3RhbmNlUHJveHktPmdldENvb2tpZXModXJsRGF0YSwgdXJsTGVuZ3RoLCAqY29va2llc0Rh
dGEsICpjb29raWVzTGVuZ3RoKTsKLSAgICAKLSAgICByZXR1cm4gS0VSTl9TVUNDRVNTOwotfQot
Ci1rZXJuX3JldHVybl90IFdLUENHZXRQcm94eShtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50
MzJfdCBwbHVnaW5JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCB1cmxEYXRh
LCBtYWNoX21zZ190eXBlX251bWJlcl90IHVybExlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2xlYW5fdCogcmV0dXJuVmFsdWUsIGRhdGFfdCogcHJveHlEYXRhLCBtYWNoX21z
Z190eXBlX251bWJlcl90KiBwcm94eUxlbmd0aCkKLXsKLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZB
TElEKGNsaWVudFBvcnQpKTsKLQotICAgICpwcm94eURhdGEgPSBudWxscHRyOwotICAgICpwcm94
eUxlbmd0aCA9IDA7Ci0gICAgCi0gICAgRGF0YURlYWxsb2NhdG9yIGRlYWxsb2NhdG9yKHVybERh
dGEsIHVybExlbmd0aCk7Ci0gICAgCi0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQ
cm94eSA9IHBsdWdpblByb3h5TWFwKCkuZ2V0KGNsaWVudFBvcnQpOwotICAgIGlmICghaG9zdFBy
b3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAgIAotICAgIE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eSogaW5zdGFuY2VQcm94eSA9IGhvc3RQcm94eS0+cGx1Z2luSW5zdGFu
Y2UocGx1Z2luSUQpOwotICAgIGlmICghaW5zdGFuY2VQcm94eSkKLSAgICAgICAgcmV0dXJuIEtF
Uk5fRkFJTFVSRTsKLSAgICAKLSAgICAqcmV0dXJuVmFsdWUgPSBpbnN0YW5jZVByb3h5LT5nZXRQ
cm94eSh1cmxEYXRhLCB1cmxMZW5ndGgsICpwcm94eURhdGEsICpwcm94eUxlbmd0aCk7Ci0gICAg
Ci0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQota2Vybl9yZXR1cm5fdCBXS1BDU2V0Q29v
a2llcyhtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1aW50MzJfdCBwbHVnaW5JRCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YV90IHVybERhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVy
X3QgdXJsTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgY29va2ll
c0RhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgY29va2llc0xlbmd0aCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbGVhbl90KiByZXR1cm5WYWx1ZSkKLXsKLSAgICBBU1NFUlQo
TUFDSF9QT1JUX1ZBTElEKGNsaWVudFBvcnQpKTsKLQotICAgIERhdGFEZWFsbG9jYXRvciB1cmxE
ZWFsbG9jYXRvcih1cmxEYXRhLCB1cmxMZW5ndGgpOwotICAgIERhdGFEZWFsbG9jYXRvciBjb29r
aWVzRGVhbGxvY2F0b3IoY29va2llc0RhdGEsIGNvb2tpZXNMZW5ndGgpOwotIAotICAgIE5ldHNj
YXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBwbHVnaW5Qcm94eU1hcCgpLmdldChjbGll
bnRQb3J0KTsKLSAgICBpZiAoIWhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuIEtFUk5fRkFJTFVS
RTsKLSAgICAKLSAgICBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkqIGluc3RhbmNlUHJveHkg
PSBob3N0UHJveHktPnBsdWdpbkluc3RhbmNlKHBsdWdpbklEKTsKLSAgICBpZiAoIWluc3RhbmNl
UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0KLSAgICAqcmV0dXJuVmFsdWUg
PSBpbnN0YW5jZVByb3h5LT5zZXRDb29raWVzKHVybERhdGEsIHVybExlbmd0aCwgY29va2llc0Rh
dGEsIGNvb2tpZXNMZW5ndGgpOwotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci19Ci0KLWtlcm5f
cmV0dXJuX3QgV0tQQ0dldEF1dGhlbnRpY2F0aW9uSW5mbyhtYWNoX3BvcnRfdCBjbGllbnRQb3J0
LCB1aW50MzJfdCBwbHVnaW5JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhX3QgcHJvdG9jb2xEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90IHByb3RvY29s
TGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCBo
b3N0RGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCBob3N0TGVuZ3RoLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHBvcnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90IHNjaGVtZURhdGEsIG1hY2hfbXNnX3R5
cGVfbnVtYmVyX3Qgc2NoZW1lTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFfdCByZWFsbURhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgcmVhbG1M
ZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbl90
KiByZXR1cm5WYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhX3QqIHVzZXJuYW1lRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCAqdXNlcm5hbWVMZW5n
dGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90KiBwYXNz
d29yZERhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgKnBhc3N3b3JkTGVuZ3RoKQotewotICAg
IEFTU0VSVChNQUNIX1BPUlRfVkFMSUQoY2xpZW50UG9ydCkpOwotCi0gICAgRGF0YURlYWxsb2Nh
dG9yIHByb3RvY29sRGVhbGxvY2F0b3IocHJvdG9jb2xEYXRhLCBwcm90b2NvbExlbmd0aCk7Ci0g
ICAgRGF0YURlYWxsb2NhdG9yIGhvc3REZWFsbG9jYXRvcihob3N0RGF0YSwgaG9zdExlbmd0aCk7
Ci0gICAgRGF0YURlYWxsb2NhdG9yIHNjaGVtZURlYWxsb2NhdG9yKHNjaGVtZURhdGEsIHNjaGVt
ZUxlbmd0aCk7Ci0gICAgRGF0YURlYWxsb2NhdG9yIHJlYWxtRGVhbGxvY2F0b3IocmVhbG1EYXRh
LCByZWFsbUxlbmd0aCk7Ci0KLSAgICAqdXNlcm5hbWVEYXRhID0gbnVsbHB0cjsKLSAgICAqdXNl
cm5hbWVMZW5ndGggPSAwOwotICAgICpwYXNzd29yZERhdGEgPSBudWxscHRyOwotICAgICpwYXNz
d29yZExlbmd0aCA9IDA7Ci0gICAgCi0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQ
cm94eSA9IHBsdWdpblByb3h5TWFwKCkuZ2V0KGNsaWVudFBvcnQpOwotICAgIGlmICghaG9zdFBy
b3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotICAgIAotICAgIE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eSogaW5zdGFuY2VQcm94eSA9IGhvc3RQcm94eS0+cGx1Z2luSW5zdGFu
Y2UocGx1Z2luSUQpOwotICAgIGlmICghaW5zdGFuY2VQcm94eSkKLSAgICAgICAgcmV0dXJuIEtF
Uk5fRkFJTFVSRTsKLSAgICAKLSAgICAqcmV0dXJuVmFsdWUgPSBpbnN0YW5jZVByb3h5LT5nZXRB
dXRoZW50aWNhdGlvbkluZm8ocHJvdG9jb2xEYXRhLCBob3N0RGF0YSwgcG9ydCwgc2NoZW1lRGF0
YSwgcmVhbG1EYXRhLCAqdXNlcm5hbWVEYXRhLCAqdXNlcm5hbWVMZW5ndGgsICpwYXNzd29yZERh
dGEsICpwYXNzd29yZExlbmd0aCk7Ci0gICAgCi0gICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0K
LQota2Vybl9yZXR1cm5fdCBXS1BDQ29udmVydFBvaW50KG1hY2hfcG9ydF90IGNsaWVudFBvcnQs
IHVpbnQzMl90IHBsdWdpbklELCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3Vi
bGUgc291cmNlWCwgZG91YmxlIHNvdXJjZVksIHVpbnQzMl90IHNvdXJjZVNwYWNlLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkZXN0U3BhY2UsIGJvb2xlYW5fdCAq
cmV0dXJuVmFsdWUsIGRvdWJsZSAqZGVzdFgsIGRvdWJsZSAqZGVzdFkpCi17Ci0gICAgQVNTRVJU
KE1BQ0hfUE9SVF9WQUxJRChjbGllbnRQb3J0KSk7Ci0KLSAgICBOZXRzY2FwZVBsdWdpbkhvc3RQ
cm94eSogaG9zdFByb3h5ID0gcGx1Z2luUHJveHlNYXAoKS5nZXQoY2xpZW50UG9ydCk7Ci0gICAg
aWYgKCFob3N0UHJveHkpCi0gICAgICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Ci0gICAgCi0gICAg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBpbnN0YW5jZVByb3h5ID0gaG9zdFByb3h5LT5w
bHVnaW5JbnN0YW5jZShwbHVnaW5JRCk7Ci0gICAgaWYgKCFpbnN0YW5jZVByb3h5KQotICAgICAg
ICByZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAgKnJldHVyblZhbHVlID0gaW5zdGFuY2VQcm94
eS0+Y29udmVydFBvaW50KHNvdXJjZVgsIHNvdXJjZVksIHN0YXRpY19jYXN0PE5QQ29vcmRpbmF0
ZVNwYWNlPihzb3VyY2VTcGFjZSksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqZGVzdFgsICpkZXN0WSwgc3RhdGljX2Nhc3Q8TlBDb29yZGluYXRlU3Bh
Y2U+KGRlc3RTcGFjZSkpOwotICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7Ci19Ci0KLWtlcm5fcmV0
dXJuX3QgV0tQQ0xheWVySG9zdGluZ01vZGVDaGFuZ2VkKG1hY2hfcG9ydF90IGNsaWVudFBvcnQs
IHVpbnQzMl90IHBsdWdpbklELCBib29sZWFuX3QgaG9zdHNMYXllcnNJbldpbmRvd1NlcnZlciwg
dWludDMyX3QgcmVuZGVyQ29udGV4dElEKQotewotICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQo
Y2xpZW50UG9ydCkpOwotCi0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqIGhvc3RQcm94eSA9
IHBsdWdpblByb3h5TWFwKCkuZ2V0KGNsaWVudFBvcnQpOwotICAgIGlmICghaG9zdFByb3h5KQot
ICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJFOwotCi0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5KiBpbnN0YW5jZVByb3h5ID0gaG9zdFByb3h5LT5wbHVnaW5JbnN0YW5jZShwbHVnaW5J
RCk7Ci0gICAgaWYgKCFpbnN0YW5jZVByb3h5KQotICAgICAgICByZXR1cm4gS0VSTl9GQUlMVVJF
OwotCi0gICAgaW5zdGFuY2VQcm94eS0+bGF5ZXJIb3N0aW5nTW9kZUNoYW5nZWQoaG9zdHNMYXll
cnNJbldpbmRvd1NlcnZlciwgcmVuZGVyQ29udGV4dElEKTsKLSAgICByZXR1cm4gS0VSTl9TVUND
RVNTOwotfQotCi0KLWtlcm5fcmV0dXJuX3QgV0tQQ1NldEV4Y2VwdGlvbihtYWNoX3BvcnRfdCBj
bGllbnRQb3J0LCBkYXRhX3QgbWVzc2FnZSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCBtZXNzYWdl
Q250KQotewotICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQoY2xpZW50UG9ydCkpOwotCi0gICAg
RGF0YURlYWxsb2NhdG9yIGRlYWxsb2NhdG9yKG1lc3NhZ2UsIG1lc3NhZ2VDbnQpOwotCi0gICAg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRHbG9iYWxFeGNlcHRpb24oU3RyaW5nOjpm
cm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhtZXNzYWdlLCBtZXNzYWdlQ250KSk7Ci0KLSAgICBy
ZXR1cm4gS0VSTl9TVUNDRVNTOwotfQotCi0jZW5kaWYgLy8gVVNFKFBMVUdJTl9IT1NUX1BST0NF
U1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWEwNWVkMjEz
YTVjZmMyZDI4YWIyMmE3MWMwOTAzZjFiMmU0ZTBjZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hv
c3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDM2
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpZiBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykKLQotI2lmbmRlZiBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHlfaAotI2RlZmluZSBOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHlfaAotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSWRlbnRpZmllci5oPgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1ZNLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Ryb25n
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgotI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9u
cGFwaS5oPgotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVmLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVk
ZSAiV2ViS2l0UGx1Z2luSG9zdFR5cGVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotICAgIG5hbWVz
cGFjZSBCaW5kaW5ncyB7Ci0gICAgICAgIGNsYXNzIEluc3RhbmNlOwotICAgICAgICBjbGFzcyBS
b290T2JqZWN0OwotICAgIH0KLSAgICBjbGFzcyBBcmdMaXN0OwotfQotQGNsYXNzIFdlYkhvc3Rl
ZE5ldHNjYXBlUGx1Z2luVmlldzsKLUBjbGFzcyBXZWJGcmFtZTsKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLWNsYXNzIEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtOwotY2xhc3MgTmV0c2NhcGVQ
bHVnaW5Ib3N0UHJveHk7Ci1jbGFzcyBQbHVnaW5SZXF1ZXN0OwotY2xhc3MgUHJveHlJbnN0YW5j
ZTsKLSAgICAKLWNsYXNzIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSA6IHB1YmxpYyBSZWZD
b3VudGVkPE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eT4gewotcHVibGljOgotICAgIHN0YXRp
YyBSZWY8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5PiBjcmVhdGUoTmV0c2NhcGVQbHVnaW5I
b3N0UHJveHkqLCBXZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcgKiwgYm9vbCBmdWxsRnJhbWVQ
bHVnaW4pOwotICAgIH5OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkoKTsKLSAgICAKLSAgICB1
aW50MzJfdCBwbHVnaW5JRCgpIGNvbnN0IAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcGx1Z2lu
SUQpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1fcGx1Z2luSUQ7Ci0gICAgfQotICAgIHVp
bnQzMl90IHJlbmRlckNvbnRleHRJRCgpIGNvbnN0IHsgQVNTRVJUKGZhc3RNYWxsb2NTaXplKHRo
aXMpKTsgcmV0dXJuIG1fcmVuZGVyQ29udGV4dElEOyB9Ci0gICAgdm9pZCBzZXRSZW5kZXJDb250
ZXh0SUQodWludDMyX3QgcmVuZGVyQ29udGV4dElEKSB7IG1fcmVuZGVyQ29udGV4dElEID0gcmVu
ZGVyQ29udGV4dElEOyB9Ci0gICAgCi0gICAgUmVuZGVyZXJUeXBlIHJlbmRlcmVyVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVuZGVyZXJUeXBlOyB9Ci0gICAgdm9pZCBzZXRSZW5kZXJlclR5cGUo
UmVuZGVyZXJUeXBlIHJlbmRlcmVyVHlwZSkgeyBtX3JlbmRlcmVyVHlwZSA9IHJlbmRlcmVyVHlw
ZTsgfQotICAgIAotICAgIFdlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldyAqcGx1Z2luVmlldygp
IGNvbnN0IHsgQVNTRVJUKGZhc3RNYWxsb2NTaXplKHRoaXMpKTsgcmV0dXJuIG1fcGx1Z2luVmll
dzsgfQotICAgIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkoKSBjb25zdCB7IEFT
U0VSVChmYXN0TWFsbG9jU2l6ZSh0aGlzKSk7IHJldHVybiBtX3BsdWdpbkhvc3RQcm94eTsgfQot
ICAgIAotICAgIGJvb2wgY2FuY2VsU3RyZWFtTG9hZCh1aW50MzJfdCBzdHJlYW1JRCwgTlBSZWFz
b24pOwotICAgIHZvaWQgZGlzY29ubmVjdFN0cmVhbShIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVh
bSopOwotICAgIAotICAgIHZvaWQgc2V0TWFudWFsU3RyZWFtKFJlZjxIb3N0ZWROZXRzY2FwZVBs
dWdpblN0cmVhbT4mJik7Ci0gICAgSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0qIG1hbnVhbFN0
cmVhbSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFudWFsU3RyZWFtLmdldCgpOyB9Ci0gICAgCi0gICAg
dm9pZCBwbHVnaW5Ib3N0RGllZCgpOwotICAgIAotICAgIHZvaWQgcmVzaXplKE5TUmVjdCBzaXpl
LCBOU1JlY3QgY2xpcFJlY3QpOwotICAgIHZvaWQgZGVzdHJveSgpOwotICAgIHZvaWQgZm9jdXND
aGFuZ2VkKGJvb2wgaGFzRm9jdXMpOwotICAgIHZvaWQgd2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wg
aGFzRm9jdXMpOwotICAgIHZvaWQgd2luZG93RnJhbWVDaGFuZ2VkKE5TUmVjdCBmcmFtZSk7Ci0K
LSAgICB2b2lkIHNldFNob3VsZEhvc3RMYXllcnNJbldpbmRvd1NlcnZlcihib29sKTsKLSAgICB2
b2lkIGxheWVySG9zdGluZ01vZGVDaGFuZ2VkKGJvb2wgaG9zdHNMYXllcnNJbldpbmRvd1NlcnZl
ciwgdWludDMyX3QgcmVuZGVyQ29udGV4dElEKTsKLSAgICAKLSAgICB2b2lkIG1vdXNlRXZlbnQo
TlNWaWV3ICpwbHVnaW5WaWV3LCBOU0V2ZW50ICosIE5QQ29jb2FFdmVudFR5cGUpOwotICAgIHZv
aWQga2V5RXZlbnQoTlNWaWV3ICpwbHVnaW5WaWV3LCBOU0V2ZW50ICosIE5QQ29jb2FFdmVudFR5
cGUpOwotICAgIHZvaWQgaW5zZXJ0VGV4dChOU1N0cmluZyAqKTsKLSAgICBib29sIHdoZWVsRXZl
bnQoTlNWaWV3ICpwbHVnaW5WaWV3LCBOU0V2ZW50ICopOwotICAgIHZvaWQgc3ludGhldGljS2V5
RG93bldpdGhDb21tYW5kTW9kaWZpZXIoaW50IGtleUNvZGUsIGNoYXIgY2hhcmFjdGVyKTsKLSAg
ICB2b2lkIGZsYWdzQ2hhbmdlZChOU0V2ZW50ICopOwotICAgIHZvaWQgcHJpbnQoQ0dDb250ZXh0
UmVmLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKLSAgICB2b2lkIHNuYXBzaG90
KENHQ29udGV4dFJlZiwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7Ci0gICAgCi0g
ICAgdm9pZCBzdGFydFRpbWVycyhib29sIHRocm90dGxlVGltZXJzKTsKLSAgICB2b2lkIHN0b3BU
aW1lcnMoKTsKLSAgICAKLSAgICB2b2lkIGludmFsaWRhdGVSZWN0KGRvdWJsZSB4LCBkb3VibGUg
eSwgZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KTsKLSAgICAKLSAgICAvLyBOUFJ1bnRpbWUK
LSAgICBib29sIGdldFdpbmRvd05QT2JqZWN0KHVpbnQzMl90JiBvYmplY3RJRCk7Ci0gICAgYm9v
bCBnZXRQbHVnaW5FbGVtZW50TlBPYmplY3QodWludDMyX3QmIG9iamVjdElEKTsKLSAgICBib29s
IGZvcmdldEJyb3dzZXJPYmplY3RJRCh1aW50MzJfdCBvYmplY3RJRCk7IC8vIFdpbGwgZmFpbCBp
ZiB0aGUgSUQgaXMgYmVpbmcgc2VudCB0byBwbHVnLWluIHJpZ2h0IG5vdyAoaS5lLiwgcmV0YWlu
L3JlbGVhc2UgY2FsbHMgYXJlbid0IGJhbGFuY2VkKS4KLQotICAgIGJvb2wgZXZhbHVhdGUodWlu
dDMyX3Qgb2JqZWN0SUQsIGNvbnN0IFdURjo6U3RyaW5nJiBzY3JpcHQsIGRhdGFfdCYgcmVzdWx0
RGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCYgcmVzdWx0TGVuZ3RoLCBib29sIGFsbG93UG9w
dXBzKTsKLSAgICBib29sIGludm9rZSh1aW50MzJfdCBvYmplY3RJRCwgY29uc3QgSlNDOjpJZGVu
dGlmaWVyJiBtZXRob2ROYW1lLCBkYXRhX3QgYXJndW1lbnRzRGF0YSwgbWFjaF9tc2dfdHlwZV9u
dW1iZXJfdCBhcmd1bWVudHNMZW5ndGgsIGRhdGFfdCYgcmVzdWx0RGF0YSwgbWFjaF9tc2dfdHlw
ZV9udW1iZXJfdCYgcmVzdWx0TGVuZ3RoKTsKLSAgICBib29sIGludm9rZURlZmF1bHQodWludDMy
X3Qgb2JqZWN0SUQsIGRhdGFfdCBhcmd1bWVudHNEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90
IGFyZ3VtZW50c0xlbmd0aCwgZGF0YV90JiByZXN1bHREYXRhLCBtYWNoX21zZ190eXBlX251bWJl
cl90JiByZXN1bHRMZW5ndGgpOwotICAgIGJvb2wgY29uc3RydWN0KHVpbnQzMl90IG9iamVjdElE
LCBkYXRhX3QgYXJndW1lbnRzRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCBhcmd1bWVudHNM
ZW5ndGgsIGRhdGFfdCYgcmVzdWx0RGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCYgcmVzdWx0
TGVuZ3RoKTsKLSAgICBib29sIGVudW1lcmF0ZSh1aW50MzJfdCBvYmplY3RJRCwgZGF0YV90JiBy
ZXN1bHREYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90JiByZXN1bHRMZW5ndGgpOwotICAgIAot
ICAgIGJvb2wgZ2V0UHJvcGVydHkodWludDMyX3Qgb2JqZWN0SUQsIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBkYXRhX3QgJnJlc3VsdERhdGEsIG1hY2hfbXNnX3R5cGVfbnVt
YmVyX3QmIHJlc3VsdExlbmd0aCk7Ci0gICAgYm9vbCBnZXRQcm9wZXJ0eSh1aW50MzJfdCBvYmpl
Y3RJRCwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBkYXRhX3QgJnJlc3VsdERhdGEsIG1hY2hfbXNn
X3R5cGVfbnVtYmVyX3QmIHJlc3VsdExlbmd0aCk7ICAgIAotICAgIGJvb2wgc2V0UHJvcGVydHko
dWludDMyX3Qgb2JqZWN0SUQsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBk
YXRhX3QgdmFsdWVEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90IHZhbHVlTGVuZ3RoKTsKLSAg
ICBib29sIHNldFByb3BlcnR5KHVpbnQzMl90IG9iamVjdElELCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIGRhdGFfdCB2YWx1ZURhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgdmFsdWVMZW5ndGgp
OwotICAgIGJvb2wgcmVtb3ZlUHJvcGVydHkodWludDMyX3Qgb2JqZWN0SUQsIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKLSAgICBib29sIHJlbW92ZVByb3BlcnR5KHVpbnQz
Ml90IG9iamVjdElELCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwotICAgIGJvb2wgaGFzUHJvcGVy
dHkodWludDMyX3Qgb2JqZWN0SUQsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1l
KTsKLSAgICBib29sIGhhc1Byb3BlcnR5KHVpbnQzMl90IG9iamVjdElELCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUpOwotICAgIGJvb2wgaGFzTWV0aG9kKHVpbnQzMl90IG9iamVjdElELCBjb25zdCBK
U0M6OklkZW50aWZpZXImIG1ldGhvZE5hbWUpOwotICAgIAotICAgIHZvaWQgc3RhdHVzKGNvbnN0
IGNoYXIqIG1lc3NhZ2UpOwotICAgIE5QRXJyb3IgbG9hZFVSTChjb25zdCBjaGFyKiB1cmwsIGNv
bnN0IGNoYXIqIHRhcmdldCwgY29uc3QgY2hhciogcG9zdERhdGEsIHVpbnQzMl90IHBvc3REYXRh
TGVuZ3RoLCBMb2FkVVJMRmxhZ3MsIHVpbnQzMl90JiByZXF1ZXN0SUQpOwotCi0gICAgYm9vbCBn
ZXRDb29raWVzKGRhdGFfdCB1cmxEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90IHVybExlbmd0
aCwgZGF0YV90JiBjb29raWVzRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCYgY29va2llc0xl
bmd0aCk7Ci0gICAgYm9vbCBzZXRDb29raWVzKGRhdGFfdCB1cmxEYXRhLCBtYWNoX21zZ190eXBl
X251bWJlcl90IHVybExlbmd0aCwgZGF0YV90IGNvb2tpZXNEYXRhLCBtYWNoX21zZ190eXBlX251
bWJlcl90IGNvb2tpZXNMZW5ndGgpOwotICAgICAgICAgICAgIAotICAgIGJvb2wgZ2V0UHJveHko
ZGF0YV90IHVybERhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgdXJsTGVuZ3RoLCBkYXRhX3Qm
IHByb3h5RGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCYgcHJveHlMZW5ndGgpOwotICAgIGJv
b2wgZ2V0QXV0aGVudGljYXRpb25JbmZvKGRhdGFfdCBwcm90b2NvbERhdGEsIGRhdGFfdCBob3N0
RGF0YSwgdWludDMyX3QgcG9ydCwgZGF0YV90IHNjaGVtZURhdGEsIGRhdGFfdCByZWFsbURhdGEs
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCYgdXNlcm5hbWVEYXRhLCBt
YWNoX21zZ190eXBlX251bWJlcl90JiB1c2VybmFtZUxlbmd0aCwgZGF0YV90JiBwYXNzd29yZERh
dGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QmIHBhc3N3b3JkTGVuZ3RoKTsKLSAgICBib29sIGNv
bnZlcnRQb2ludChkb3VibGUgc291cmNlWCwgZG91YmxlIHNvdXJjZVksIE5QQ29vcmRpbmF0ZVNw
YWNlIHNvdXJjZVNwYWNlLCAKLSAgICAgICAgICAgICAgICAgICAgICBkb3VibGUmIGRlc3RYLCBk
b3VibGUmIGRlc3RZLCBOUENvb3JkaW5hdGVTcGFjZSBkZXN0U3BhY2UpOwotCi0gICAgUmVmUHRy
PEpTQzo6QmluZGluZ3M6Okluc3RhbmNlPiBjcmVhdGVCaW5kaW5nc0luc3RhbmNlKFJlZjxKU0M6
OkJpbmRpbmdzOjpSb290T2JqZWN0PiYmKTsKLSAgICBSZXRhaW5QdHI8TlNEYXRhPiBtYXJzaGFs
VmFsdWVzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpOwot
ICAgIHZvaWQgbWFyc2hhbFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUs
IGRhdGFfdCYgcmVzdWx0RGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCYgcmVzdWx0TGVuZ3Ro
KTsKLSAgICBKU0M6OkpTVmFsdWUgZGVtYXJzaGFsVmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCos
IGNvbnN0IGNoYXIqIHZhbHVlRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCB2YWx1ZUxlbmd0
aCk7Ci0KLSAgICAvLyBOby1vcCBpZiB0aGUgdmFsdWUgZG9lcyBub3QgY29udGFpbiBhIGxvY2Fs
IG9iamVjdC4KLSAgICB2b2lkIHJldGFpbkxvY2FsT2JqZWN0KEpTQzo6SlNWYWx1ZSk7Ci0gICAg
dm9pZCByZWxlYXNlTG9jYWxPYmplY3QoSlNDOjpKU1ZhbHVlKTsKLQotICAgIHZvaWQgYWRkSW5z
dGFuY2UoUHJveHlJbnN0YW5jZSopOwotICAgIHZvaWQgcmVtb3ZlSW5zdGFuY2UoUHJveHlJbnN0
YW5jZSopOwotICAgIAotICAgIHZvaWQgY2xlYW51cCgpOwotICAgIHZvaWQgaW52YWxpZGF0ZSgp
OwotICAgIAotICAgIHZvaWQgd2lsbENhbGxQbHVnaW5GdW5jdGlvbigpOwotICAgIHZvaWQgZGlk
Q2FsbFBsdWdpbkZ1bmN0aW9uKGJvb2wmIHN0b3BwZWQpOwotICAgIGJvb2wgc2hvdWxkU3RvcCgp
OwotICAgIAotICAgIHVpbnQzMl90IG5leHRSZXF1ZXN0SUQoKTsKLQotICAgIHZvaWQgZGlkRHJh
dygpOwotICAgIHZvaWQgcHJpdmF0ZUJyb3dzaW5nTW9kZURpZENoYW5nZShib29sIGlzUHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZCk7Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgc2V0R2xvYmFsRXhjZXB0
aW9uKGNvbnN0IFdURjo6U3RyaW5nJik7Ci0gICAgc3RhdGljIHZvaWQgbW92ZUdsb2JhbEV4Y2Vw
dGlvblRvRXhlY1N0YXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLQotICAgIC8vIFJlcGx5IHN0
cnVjdHMKLSAgICBzdHJ1Y3QgUmVwbHkgewotICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9B
TExPQ0FURUQ7Ci0gICAgICAgIGVudW0gVHlwZSB7Ci0gICAgICAgICAgICBJbnN0YW50aWF0ZVBs
dWdpbiwKLSAgICAgICAgICAgIEdldFNjcmlwdGFibGVOUE9iamVjdCwKLSAgICAgICAgICAgIEJv
b2xlYW5BbmREYXRhLAotICAgICAgICAgICAgQm9vbGVhbgotICAgICAgICB9OwotICAgICAgICAK
LSAgICAgICAgUmVwbHkoVHlwZSB0eXBlKSAKLSAgICAgICAgICAgIDogbV90eXBlKHR5cGUpCi0g
ICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdmlydHVhbCB+UmVwbHkoKSB7
IH0KLSAgICAKLSAgICAgICAgVHlwZSBtX3R5cGU7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBJbnN0
YW50aWF0ZVBsdWdpblJlcGx5IDogcHVibGljIFJlcGx5IHsKLSAgICAgICAgc3RhdGljIGNvbnN0
IGludCBSZXBseVR5cGUgPSBJbnN0YW50aWF0ZVBsdWdpbjsKLSAgICAgICAgCi0gICAgICAgIElu
c3RhbnRpYXRlUGx1Z2luUmVwbHkoa2Vybl9yZXR1cm5fdCByZXN1bHRDb2RlLCB1aW50MzJfdCBy
ZW5kZXJDb250ZXh0SUQsIFJlbmRlcmVyVHlwZSByZW5kZXJlclR5cGUpCi0gICAgICAgICAgICA6
IFJlcGx5KEluc3RhbnRpYXRlUGx1Z2luKQotICAgICAgICAgICAgLCBtX3Jlc3VsdENvZGUocmVz
dWx0Q29kZSkKLSAgICAgICAgICAgICwgbV9yZW5kZXJDb250ZXh0SUQocmVuZGVyQ29udGV4dElE
KQotICAgICAgICAgICAgLCBtX3JlbmRlcmVyVHlwZShyZW5kZXJlclR5cGUpCi0gICAgICAgIHsK
LSAgICAgICAgfQotICAgICAgICAgICAgICAgICAKLSAgICAgICAga2Vybl9yZXR1cm5fdCBtX3Jl
c3VsdENvZGU7Ci0gICAgICAgIHVpbnQzMl90IG1fcmVuZGVyQ29udGV4dElEOwotICAgICAgICBS
ZW5kZXJlclR5cGUgbV9yZW5kZXJlclR5cGU7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBHZXRTY3Jp
cHRhYmxlTlBPYmplY3RSZXBseSA6IHB1YmxpYyBSZXBseSB7Ci0gICAgICAgIHN0YXRpYyBjb25z
dCBSZXBseTo6VHlwZSBSZXBseVR5cGUgPSBHZXRTY3JpcHRhYmxlTlBPYmplY3Q7Ci0gICAgICAg
IAotICAgICAgICBHZXRTY3JpcHRhYmxlTlBPYmplY3RSZXBseSh1aW50MzJfdCBvYmplY3RJRCkK
LSAgICAgICAgICAgIDogUmVwbHkoUmVwbHlUeXBlKQotICAgICAgICAgICAgLCBtX29iamVjdElE
KG9iamVjdElEKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICB1
aW50MzJfdCBtX29iamVjdElEOwotICAgIH07Ci0gICAgCi0gICAgc3RydWN0IEJvb2xlYW5SZXBs
eSA6IHB1YmxpYyBSZXBseSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBSZXBseTo6VHlwZSBSZXBs
eVR5cGUgPSBCb29sZWFuOwotICAgICAgICAKLSAgICAgICAgQm9vbGVhblJlcGx5KGJvb2xlYW5f
dCByZXN1bHQpCi0gICAgICAgICAgICA6IFJlcGx5KFJlcGx5VHlwZSkKLSAgICAgICAgICAgICwg
bV9yZXN1bHQocmVzdWx0KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGJvb2xlYW5fdCBtX3Jlc3VsdDsKLSAgICB9OwotCi0gICAgc3RydWN0IEJvb2xlYW5BbmREYXRh
UmVwbHkgOiBwdWJsaWMgUmVwbHkgewotICAgICAgICBzdGF0aWMgY29uc3QgUmVwbHk6OlR5cGUg
UmVwbHlUeXBlID0gQm9vbGVhbkFuZERhdGE7Ci0gICAgICAgIAotICAgICAgICBCb29sZWFuQW5k
RGF0YVJlcGx5KGJvb2xlYW5fdCByZXR1cm5WYWx1ZSwgUmV0YWluUHRyPENGRGF0YVJlZj4gcmVz
dWx0KQotICAgICAgICAgICAgOiBSZXBseShSZXBseVR5cGUpCi0gICAgICAgICAgICAsIG1fcmV0
dXJuVmFsdWUocmV0dXJuVmFsdWUpCi0gICAgICAgICAgICAsIG1fcmVzdWx0KHJlc3VsdCkKLSAg
ICAgICAgewotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29sZWFuX3QgbV9yZXR1cm5W
YWx1ZTsKLSAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gbV9yZXN1bHQ7Ci0gICAgfTsKLSAg
ICAKLSAgICB2b2lkIHNldEN1cnJlbnRSZXBseSh1aW50MzJfdCByZXF1ZXN0SUQsIHN0ZDo6dW5p
cXVlX3B0cjxSZXBseT4gcmVwbHkpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1fcmVwbGllcy5j
b250YWlucyhyZXF1ZXN0SUQpKTsKLSAgICAgICAgbV9yZXBsaWVzLmFkZChyZXF1ZXN0SUQsIFdU
Rk1vdmUocmVwbHkpKTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPFQ+IHdhaXRGb3JSZXBseSh1aW50MzJfdCByZXF1ZXN0SUQpCi0g
ICAgewotICAgICAgICBSZWY8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5PiBwcm90ZWN0KCp0
aGlzKTsgLy8gUGx1Zy1pbiBob3N0IG1heSBjcmFzaCB3aGlsZSB3ZSBhcmUgd2FpdGluZyBmb3Ig
cmVwbHksIHJlbGVhc2luZyBhbGwgaW5zdGFuY2VzIHRvIHRoZSBpbnN0YW5jZSBwcm94eS4KLQot
ICAgICAgICB3aWxsQ2FsbFBsdWdpbkZ1bmN0aW9uKCk7Ci0gICAgICAgIG1fd2FpdGluZ0ZvclJl
cGx5ID0gdHJ1ZTsKLQotICAgICAgICBhdXRvIHJlcGx5ID0gcHJvY2Vzc1JlcXVlc3RzQW5kV2Fp
dEZvclJlcGx5KHJlcXVlc3RJRCk7Ci0gICAgICAgIGlmIChyZXBseSkKLSAgICAgICAgICAgIEFT
U0VSVChyZXBseS0+bV90eXBlID09IFQ6OlJlcGx5VHlwZSk7Ci0gICAgICAgIAotICAgICAgICBt
X3dhaXRpbmdGb3JSZXBseSA9IGZhbHNlOwotCi0gICAgICAgIGJvb2wgc3RvcHBlZCA9IGZhbHNl
OwotICAgICAgICBkaWRDYWxsUGx1Z2luRnVuY3Rpb24oc3RvcHBlZCk7Ci0gICAgICAgIGlmIChz
dG9wcGVkKSB7Ci0gICAgICAgICAgICAvLyBUaGUgaW5zdGFuY2UgcHJveHkgbWF5IGhhdmUgYmVl
biBkZWxldGVkIGZyb20gZGlkQ2FsbFBsdWdpbkZ1bmN0aW9uKCksIHNvIGEgbnVsbCByZXBseSBu
ZWVkcyB0byBiZSByZXR1cm5lZC4KLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxUPihzdGF0aWNfY2FzdDxUKj4o
cmVwbHkucmVsZWFzZSgpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgd2ViRnJhbWVEaWRGaW5p
c2hMb2FkV2l0aFJlYXNvbihXZWJGcmFtZSosIE5QUmVhc29uKTsKLQotcHJpdmF0ZToKLSAgICBO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkoTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkqLCBXZWJI
b3N0ZWROZXRzY2FwZVBsdWdpblZpZXcqLCBib29sIGZ1bGxGcmFtZVBsdWdpbik7Ci0KLSAgICBO
UEVycm9yIGxvYWRSZXF1ZXN0KE5TVVJMUmVxdWVzdCosIGNvbnN0IGNoYXIqIGNUYXJnZXQsIGJv
b2wgY3VycmVudEV2ZW50SXNVc2VyR2VzdHVyZSwgdWludDMyX3QmIHN0cmVhbUlEKTsKLSAgICAK
LSAgICBjbGFzcyBQbHVnaW5SZXF1ZXN0OwotICAgIHZvaWQgcGVyZm9ybVJlcXVlc3QoUGx1Z2lu
UmVxdWVzdCopOwotICAgIHZvaWQgZXZhbHVhdGVKYXZhU2NyaXB0KFBsdWdpblJlcXVlc3QqKTsK
LSAgICAKLSAgICB2b2lkIHN0b3BBbGxTdHJlYW1zKCk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJl
cGx5PiBwcm9jZXNzUmVxdWVzdHNBbmRXYWl0Rm9yUmVwbHkodWludDMyX3QgcmVxdWVzdElEKTsK
LSAgICAKLSAgICBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eSogbV9wbHVnaW5Ib3N0UHJveHk7Ci0g
ICAgV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3ICptX3BsdWdpblZpZXc7Ci0KLSAgICB2b2lk
IHJlcXVlc3RUaW1lckZpcmVkKCk7Ci0gICAgV2ViQ29yZTo6VGltZXIgbV9yZXF1ZXN0VGltZXI7
Ci0gICAgRGVxdWU8UmVmUHRyPFBsdWdpblJlcXVlc3Q+PiBtX3BsdWdpblJlcXVlc3RzOwotICAg
IAotICAgIEhhc2hNYXA8dWludDMyX3QsIFJlZlB0cjxIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVh
bT4+IG1fc3RyZWFtczsKLQotICAgIHVpbnQzMl90IG1fY3VycmVudFVSTFJlcXVlc3RJRDsKLSAg
ICAKLSAgICB1aW50MzJfdCBtX3BsdWdpbklEOwotICAgIHVpbnQzMl90IG1fcmVuZGVyQ29udGV4
dElEOwotICAgIFJlbmRlcmVyVHlwZSBtX3JlbmRlcmVyVHlwZTsKLSAgICAKLSAgICBib29sIG1f
d2FpdGluZ0ZvclJlcGx5OwotICAgIEhhc2hNYXA8dWludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxS
ZXBseT4+IG1fcmVwbGllczsKLSAgICAKLSAgICAvLyBOUFJ1bnRpbWUKLQotICAgIHZvaWQgYWRk
VmFsdWVUb0FycmF5KE5TTXV0YWJsZUFycmF5ICosIEpTQzo6SlNHbG9iYWxPYmplY3QqIGV4ZWMs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSk7Ci0gICAgCi0gICAgYm9vbCBkZW1hcnNoYWxWYWx1ZUZyb21B
cnJheShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgTlNBcnJheSAqYXJyYXksIE5TVUludGVnZXImIGlu
ZGV4LCBKU0M6OkpTVmFsdWUmIHJlc3VsdCk7Ci0gICAgdm9pZCBkZW1hcnNoYWxWYWx1ZXMoSlND
OjpKU0dsb2JhbE9iamVjdCosIGRhdGFfdCB2YWx1ZXNEYXRhLCBtYWNoX21zZ190eXBlX251bWJl
cl90IHZhbHVlc0xlbmd0aCwgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlckJhc2UmIHJlc3VsdCk7
Ci0KLSAgICBjbGFzcyBMb2NhbE9iamVjdE1hcCB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKExvY2FsT2JqZWN0TWFwKTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIExvY2FsT2JqZWN0TWFw
KCk7Ci0gICAgICAgIH5Mb2NhbE9iamVjdE1hcCgpOwotICAgICAgICB1aW50MzJfdCBpZEZvck9i
amVjdChKU0M6OlZNJiwgSlNDOjpKU09iamVjdCopOwotICAgICAgICB2b2lkIHJldGFpbihKU0M6
OkpTT2JqZWN0Kik7Ci0gICAgICAgIHZvaWQgcmVsZWFzZShKU0M6OkpTT2JqZWN0Kik7Ci0gICAg
ICAgIHZvaWQgY2xlYXIoKTsKLSAgICAgICAgYm9vbCBmb3JnZXQodWludDMyX3QpOwotICAgICAg
ICBib29sIGNvbnRhaW5zKHVpbnQzMl90KSBjb25zdDsKLSAgICAgICAgSlNDOjpKU09iamVjdCog
Z2V0KHVpbnQzMl90KSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIEhhc2hNYXA8dWlu
dDMyX3QsIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+PiBtX2lkVG9KU09iamVjdE1hcDsKLSAg
ICAgICAgLy8gVGhlIHBhaXIgY29uc2lzdHMgb2Ygb2JqZWN0IElEIGFuZCBhIHJlZmVyZW5jZSBj
b3VudC4gT25lIHJlZmVyZW5jZSBiZWxvbmdzIHRvIHJlbW90ZSBwbHVnLWluLAotICAgICAgICAv
LyBhbmQgdGhlIHByb3h5IHdpbGwgYWRkIHRyYW5zaWVudCByZWZlcmVuY2VzIGZvciBhcmd1bWVu
dHMgdGhhdCBhcmUgYmVpbmcgc2VudCBvdXQuCi0gICAgICAgIEhhc2hNYXA8SlNDOjpKU09iamVj
dCosIHN0ZDo6cGFpcjx1aW50MzJfdCwgdWludDMyX3Q+PiBtX2pzT2JqZWN0VG9JRE1hcDsKLSAg
ICAgICAgdWludDMyX3QgbV9vYmplY3RJRENvdW50ZXI7Ci0gICAgfTsKLQotICAgIExvY2FsT2Jq
ZWN0TWFwIG1fbG9jYWxPYmplY3RzOwotCi0gICAgdHlwZWRlZiBIYXNoU2V0PFByb3h5SW5zdGFu
Y2UqPiBQcm94eUluc3RhbmNlU2V0OwotICAgIFByb3h5SW5zdGFuY2VTZXQgbV9pbnN0YW5jZXM7
Ci0KLSAgICB1bnNpZ25lZCBtX3BsdWdpbkZ1bmN0aW9uQ2FsbERlcHRoOwotICAgIGJvb2wgbV9z
aG91bGRTdG9wU29vbjsKLSAgICB1aW50MzJfdCBtX2N1cnJlbnRSZXF1ZXN0SUQ7Ci0KLSAgICAv
LyBBbGwgTlBSdW50aW1lIGZ1bmN0aW9ucyB3aWxsIHJldHVybiBmYWxzZSB3aGVuIGRlc3Ryb3lp
bmcgYSBwbHVnLWluLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZXJlIG1heSBiZSB1bmhh
bmRsZWQgbWVzc2FnZXMgd2FpdGluZywKLSAgICAvLyBhbmQgc3Bpbm5pbmcgaW4gcHJvY2Vzc1Jl
cXVlc3RzKCkgd2lsbCB1bmV4cGVjdGVkbHkgZXhlY3V0ZSB0aGVtIGZyb20gaW5zaWRlIGRlc3Ry
b3koKS4gVGhhdCdzIG5vdCBhIGdvb2QgdGltZSB0byBleGVjdXRlIGFyYml0cmFyeSBKYXZhU2Ny
aXB0LAotICAgIC8vIHNpbmNlIGJvdGggbG9hZGluZyBhbmQgcmVuZGVyaW5nIGRhdGEgc3RydWN0
dXJlcyBtYXkgYmUgaW4gaW5jb25zaXN0ZW50IHN0YXRlLgotICAgIC8vIFRoaXMgc3VwcHJlc3Nl
cyBjYWxscyBmcm9tIGFsbCBwbHVnLWlucywgZXZlbiB0aG9zZSBpbiBkaWZmZXJlbnQgcGFnZXMs
IHNpbmNlIEpTIG1pZ2h0IGFmZmVjdCB0aGUgZnJhbWUgd2l0aCBwbHVnLWluIHRoYXQncyBiZWlu
ZyBzdG9wcGVkLgotICAgIC8vCi0gICAgLy8gRklYTUU6IFBsdWctaW5zIGNhbiBleGVjdXRlIGFy
Yml0cmFyeSBKUyBmcm9tIGRlc3Ryb3koKSBpbiBzYW1lIHByb2Nlc3MgY2FzZSwgYW5kIG90aGVy
IGJyb3dzZXJzIGFsc28gc3VwcG9ydCB0aGF0LgotICAgIC8vIEEgYmV0dGVyIGZpeCBtYXkgYmUg
dG8gbWFrZSBzdXJlIHRoYXQgdW5yZWxhdGVkIG1lc3NhZ2VzIGFyZSBwb3N0cG9uZWQgdW50aWwg
YWZ0ZXIgZGVzdHJveSgpIHJldHVybnMuCi0gICAgLy8gQW5vdGhlciBwb3NzaWJsZSBmaXggbWF5
IGJlIHRvIHNlbmQgZGVzdHJveSBtZXNzYWdlIGF0IGEgdGltZSB3aGVuIGludGVybmFsIHN0cnVj
dHVyZXMgYXJlIGNvbnNpc3RlbnQuCi0gICAgLy8KLSAgICAvLyBGSVhNRTogV2UgbGFjayBzaW1p
bGFyIG1lc3NhZ2Ugc3VwcHJlc3Npb24gaW4gb3RoZXIgY2FzZXMgLSByZXNpemUoKSBpcyBhbHNv
IHRyaWdnZXJlZCBieSBsYXlvdXQsIHNvIGV4ZWN1dGluZyBhcmJpdHJhcnkgSlMgaXMgYWxzbyBw
cm9ibGVtYXRpYy4KLSAgICBzdGF0aWMgYm9vbCBtX2luRGVzdHJveTsKLQotICAgIGJvb2wgbV9w
bHVnaW5Jc1dhaXRpbmdGb3JEcmF3OwotICAgIAotICAgIFJlZlB0cjxIb3N0ZWROZXRzY2FwZVBs
dWdpblN0cmVhbT4gbV9tYW51YWxTdHJlYW07Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8V2ViRnJh
bWUqLCBSZWZQdHI8UGx1Z2luUmVxdWVzdD4+IEZyYW1lTG9hZE1hcDsKLSAgICBGcmFtZUxvYWRN
YXAgbV9wZW5kaW5nRnJhbWVMb2FkczsKLX07Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmIC8vIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eV9oCi0jZW5kaWYgLy8gVVNF
KFBMVUdJTl9IT1NUX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0gYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHkubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyYTI0ODRlZWFmODZmNDZhYjE1
ZDBkZDA5ZmJjY2I4YWIyODg0MzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsMTY5MyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
IFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
LQotI2ltcG9ydCAiTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5LmgiCi0KLSNpbXBvcnQgIkhv
c3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtLmgiCi0jaW1wb3J0ICJOZXRzY2FwZVBsdWdpbkhvc3RQ
cm94eS5oIgotI2ltcG9ydCAiUHJveHlJbnN0YW5jZS5oIgotI2ltcG9ydCAiUHJveHlSdW50aW1l
T2JqZWN0LmgiCi0jaW1wb3J0ICJXZWJEYXRhU291cmNlSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldl
YkZyYW1lSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5o
IgotI2ltcG9ydCAiV2ViS2l0TlNTdHJpbmdFeHRyYXMuaCIKLSNpbXBvcnQgIldlYk5TRGF0YUV4
dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNVUkxFeHRyYXMuaCIKLSNpbXBvcnQgIldlYlBsdWdpblJl
cXVlc3QuaCIKLSNpbXBvcnQgIldlYlVJRGVsZWdhdGUuaCIKLSNpbXBvcnQgIldlYlVJRGVsZWdh
dGVQcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0NhdGNoU2NvcGUuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0NvbXBsZXRp
b24uaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0Vycm9yLmg+Ci0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0pTTG9jay5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvUHJvcGVydHlOYW1lQXJyYXkuaD4K
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL1NvdXJjZUNvZGUuaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL1N0cm9uZ0lubGluZXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ29va2llSmFyLmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50TG9h
ZGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1l
TG9hZGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVHJlZS5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9QYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL1Byb3h5U2VydmVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1NjcmlwdENv
bnRyb2xsZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KLSNpbXBvcnQg
PFdlYkNvcmUvVXNlckdlc3R1cmVJbmRpY2F0b3IuaD4KLSNpbXBvcnQgPFdlYkNvcmUvbnBydW50
aW1lX2ltcGwuaD4KLSNpbXBvcnQgPFdlYkNvcmUvcnVudGltZV9vYmplY3QuaD4KLSNpbXBvcnQg
PG1hY2gvbWFjaC5oPgotI2ltcG9ydCA8dXRpbGl0eT4KLSNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgotI2ltcG9ydCA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgotI2ltcG9ydCA8
d3RmL1VSTC5oPgotI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1leHRlcm4gIkMiIHsK
LSNpbXBvcnQgIldlYktpdFBsdWdpbkNsaWVudFNlcnZlci5oIgotI2ltcG9ydCAiV2ViS2l0UGx1
Z2luSG9zdC5oIgotfQotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotdXNpbmcgbmFtZXNwYWNlIEpT
Qzo6QmluZGluZ3M7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLWNsYXNzIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6UGx1Z2luUmVxdWVzdCA6
IHB1YmxpYyBSZWZDb3VudGVkPE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6UGx1Z2luUmVx
dWVzdD4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8UGx1Z2luUmVxdWVzdD4gY3JlYXRlKHVp
bnQzMl90IHJlcXVlc3RJRCwgTlNVUkxSZXF1ZXN0KiByZXF1ZXN0LCBOU1N0cmluZyogZnJhbWVO
YW1lLCBib29sIGFsbG93UG9wdXBzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgUGx1Z2luUmVxdWVzdChyZXF1ZXN0SUQsIHJlcXVlc3QsIGZyYW1lTmFtZSwgYWxsb3dQb3B1
cHMpKTsKLSAgICB9Ci0KLSAgICB1aW50MzJfdCByZXF1ZXN0SUQoKSBjb25zdCB7IHJldHVybiBt
X3JlcXVlc3RJRDsgfQotICAgIE5TVVJMUmVxdWVzdCogcmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVxdWVzdC5nZXQoKTsgfQotICAgIE5TU3RyaW5nKiBmcmFtZU5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX2ZyYW1lTmFtZS5nZXQoKTsgfQotICAgIGJvb2wgYWxsb3dQb3B1cHMoKSBjb25zdCB7
IHJldHVybiBtX2FsbG93UG9wdXBzOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIFBsdWdpblJlcXVl
c3QodWludDMyX3QgcmVxdWVzdElELCBOU1VSTFJlcXVlc3QqIHJlcXVlc3QsIE5TU3RyaW5nKiBm
cmFtZU5hbWUsIGJvb2wgYWxsb3dQb3B1cHMpCi0gICAgICAgIDogbV9yZXF1ZXN0SUQocmVxdWVz
dElEKQotICAgICAgICAsIG1fcmVxdWVzdChyZXF1ZXN0KQotICAgICAgICAsIG1fZnJhbWVOYW1l
KGZyYW1lTmFtZSkKLSAgICAgICAgLCBtX2FsbG93UG9wdXBzKGFsbG93UG9wdXBzKQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgdWludDMyX3QgbV9yZXF1ZXN0SUQ7Ci0gICAgUmV0YWluUHRyPE5T
VVJMUmVxdWVzdD4gbV9yZXF1ZXN0OwotICAgIFJldGFpblB0cjxOU1N0cmluZz4gbV9mcmFtZU5h
bWU7Ci0gICAgYm9vbCBtX2FsbG93UG9wdXBzOwotfTsKLQotTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6TG9jYWxPYmplY3RNYXAoKQotICAgIDogbV9vYmplY3RJ
RENvdW50ZXIoMCkKLXsKLX0KLQotTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9i
amVjdE1hcDo6fkxvY2FsT2JqZWN0TWFwKCkKLXsKLX0KLQotaW5saW5lIGJvb2wgTmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6Y29udGFpbnModWludDMyX3Qgb2Jq
ZWN0SUQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faWRUb0pTT2JqZWN0TWFwLmNvbnRhaW5zKG9i
amVjdElEKTsKLX0KLQotaW5saW5lIEpTQzo6SlNPYmplY3QqIE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OmdldCh1aW50MzJfdCBvYmplY3RJRCkgY29uc3QKLXsK
LSAgICBpZiAob2JqZWN0SUQgPT0gSGFzaFRyYWl0czx1aW50MzJfdD46OmVtcHR5VmFsdWUoKSB8
fCBIYXNoVHJhaXRzPHVpbnQzMl90Pjo6aXNEZWxldGVkVmFsdWUob2JqZWN0SUQpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBtX2lkVG9KU09iamVjdE1hcC5nZXQob2Jq
ZWN0SUQpLmdldCgpOwotfQotCi11aW50MzJfdCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OkxvY2FsT2JqZWN0TWFwOjppZEZvck9iamVjdChWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCi17
Ci0gICAgLy8gVGhpcyBtZXRob2QgY3JlYXRlcyBvYmplY3RzIHdpdGggcmVmY291bnQgb2YgMSwg
YnV0IGRvZXNuJ3QgaW5jcmVhc2UgcmVmY291bnQgd2hlbiByZXR1cm5pbmcKLSAgICAvLyBmb3Vu
ZCBvYmplY3RzLiBUaGlzIGV4dHJhIGNvdW50IGFjY291bnRzIGZvciB0aGUgbWFpbiAicmVmZXJl
bmNlIiBrZXB0IGJ5IHBsdWdpbiBwcm9jZXNzLgotCi0gICAgLy8gVG8gYXZvaWQgZXhjZXNzaXZl
IElQQywgcGx1Z2luIHByb2Nlc3MgZG9lc24ndCBzZW5kIGVhY2ggTlBPYmplY3QgcmVsZWFzZS9y
ZXRhaW4gY2FsbCB0bwotICAgIC8vIFNhZmFyaS4gSXQgb25seSBzZW5kcyBvbmUgd2hlbiB0aGUg
bGFzdCByZWZlcmVuY2UgaXMgcmVtb3ZlZCwgYW5kIGl0IGNhbiBkZXN0cm95IHRoZSBwcm94eQot
ICAgIC8vIE5QT2JqZWN0LgotCi0gICAgLy8gSG93ZXZlciwgdGhlIGJyb3dzZXIgbWF5IGJlIHNl
bmRpbmcgdGhlIHNhbWUgb2JqZWN0IG91dCB0byBwbHVnLWluIGFzIGEgZnVuY3Rpb24gY2FsbAot
ICAgIC8vIGFyZ3VtZW50IGF0IHRoZSBzYW1lIHRpbWUgLSBuZWl0aGVyIHNpZGUgY2FuIGtub3cg
d2hhdCB0aGUgb3RoZXIgb25lIGlzIGRvaW5nLiBTbywKLSAgICAvLyBpcyB0byBtYWtlIFBDRm9y
Z2V0QnJvd3Nlck9iamVjdCBjYWxsIHJldHVybiBhIGJvb2xlYW4gcmVzdWx0LCBtYWtpbmcgaXQg
cG9zc2libGUgZm9yIAotICAgIC8vIHRoZSBicm93c2VyIHRvIG1ha2UgcGx1Z2luIGhvc3Qga2Vl
cCB0aGUgcHJveHkgd2l0aCB6ZXJvIHJlZmNvdW50IGZvciBhIGxpdHRsZSBsb25nZXIuCi0KLSAg
ICB1aW50MzJfdCBvYmplY3RJRCA9IDA7Ci0gICAgCi0gICAgSGFzaE1hcDxKU0M6OkpTT2JqZWN0
Kiwgc3RkOjpwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4+OjppdGVyYXRvciBpdGVyID0gbV9qc09i
amVjdFRvSURNYXAuZmluZChvYmplY3QpOwotICAgIGlmIChpdGVyICE9IG1fanNPYmplY3RUb0lE
TWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlci0+dmFsdWUuZmlyc3Q7Ci0gICAgCi0gICAg
ZG8gewotICAgICAgICBvYmplY3RJRCA9ICsrbV9vYmplY3RJRENvdW50ZXI7Ci0gICAgfSB3aGls
ZSAoIW1fb2JqZWN0SURDb3VudGVyIHx8IG1fb2JqZWN0SURDb3VudGVyID09IHN0YXRpY19jYXN0
PHVpbnQzMl90PigtMSkgfHwgbV9pZFRvSlNPYmplY3RNYXAuY29udGFpbnMob2JqZWN0SUQpKTsK
LQotICAgIG1faWRUb0pTT2JqZWN0TWFwLnNldChvYmplY3RJRCwgU3Ryb25nPEpTT2JqZWN0Pih2
bSwgb2JqZWN0KSk7Ci0gICAgbV9qc09iamVjdFRvSURNYXAuc2V0KG9iamVjdCwgc3RkOjptYWtl
X3BhaXIob2JqZWN0SUQsIDEpKTsKLQotICAgIHJldHVybiBvYmplY3RJRDsKLX0KLQotdm9pZCBO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFwOjpyZXRhaW4oSlNDOjpK
U09iamVjdCogb2JqZWN0KQotewotICAgIEhhc2hNYXA8SlNDOjpKU09iamVjdCosIHN0ZDo6cGFp
cjx1aW50MzJfdCwgdWludDMyX3Q+Pjo6aXRlcmF0b3IgaXRlciA9IG1fanNPYmplY3RUb0lETWFw
LmZpbmQob2JqZWN0KTsKLSAgICBBU1NFUlQoaXRlciAhPSBtX2pzT2JqZWN0VG9JRE1hcC5lbmQo
KSk7Ci0KLSAgICBpdGVyLT52YWx1ZS5zZWNvbmQgPSBpdGVyLT52YWx1ZS5zZWNvbmQgKyAxOwot
fQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxPYmplY3RNYXA6OnJl
bGVhc2UoSlNDOjpKU09iamVjdCogb2JqZWN0KQotewotICAgIEhhc2hNYXA8SlNDOjpKU09iamVj
dCosIHN0ZDo6cGFpcjx1aW50MzJfdCwgdWludDMyX3Q+Pjo6aXRlcmF0b3IgaXRlciA9IG1fanNP
YmplY3RUb0lETWFwLmZpbmQob2JqZWN0KTsKLSAgICBBU1NFUlQoaXRlciAhPSBtX2pzT2JqZWN0
VG9JRE1hcC5lbmQoKSk7Ci0KLSAgICBBU1NFUlQoaXRlci0+dmFsdWUuc2Vjb25kID4gMCk7Ci0g
ICAgaXRlci0+dmFsdWUuc2Vjb25kID0gaXRlci0+dmFsdWUuc2Vjb25kIC0gMTsKLSAgICBpZiAo
IWl0ZXItPnZhbHVlLnNlY29uZCkgewotICAgICAgICBtX2lkVG9KU09iamVjdE1hcC5yZW1vdmUo
aXRlci0+dmFsdWUuZmlyc3QpOwotICAgICAgICBtX2pzT2JqZWN0VG9JRE1hcC5yZW1vdmUoaXRl
cik7Ci0gICAgfQotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9jYWxP
YmplY3RNYXA6OmNsZWFyKCkKLXsKLSAgICBtX2lkVG9KU09iamVjdE1hcC5jbGVhcigpOwotICAg
IG1fanNPYmplY3RUb0lETWFwLmNsZWFyKCk7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5OjpMb2NhbE9iamVjdE1hcDo6Zm9yZ2V0KHVpbnQzMl90IG9iamVjdElEKQotewot
ICAgIGlmIChvYmplY3RJRCA9PSBIYXNoVHJhaXRzPHVpbnQzMl90Pjo6ZW1wdHlWYWx1ZSgpIHx8
IEhhc2hUcmFpdHM8dWludDMyX3Q+Ojppc0RlbGV0ZWRWYWx1ZShvYmplY3RJRCkpIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkxvY2FsT2JqZWN0TWFw
Ojpmb3JnZXQ6IGxvY2FsIG9iamVjdCBpZCAldSBpcyBub3QgdmFsaWQuIiwgb2JqZWN0SUQpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBIYXNoTWFwPHVpbnQzMl90LCBKU0M6
OlN0cm9uZzxKU0M6OkpTT2JqZWN0Pj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2lkVG9KU09iamVjdE1h
cC5maW5kKG9iamVjdElEKTsKLSAgICBpZiAoaXRlciA9PSBtX2lkVG9KU09iamVjdE1hcC5lbmQo
KSkgewotICAgICAgICBMT0dfRVJST1IoIk5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TG9j
YWxPYmplY3RNYXA6OmZvcmdldDogbG9jYWwgb2JqZWN0ICV1IGRvZXNuJ3QgZXhpc3QuIiwgb2Jq
ZWN0SUQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBIYXNoTWFwPEpTQzo6
SlNPYmplY3QqLCBzdGQ6OnBhaXI8dWludDMyX3QsIHVpbnQzMl90Pj46Oml0ZXJhdG9yIHJJdGVy
ID0gbV9qc09iamVjdFRvSURNYXAuZmluZChpdGVyLT52YWx1ZS5nZXQoKSk7Ci0KLSAgICAvLyBJ
ZiB0aGUgb2JqZWN0IGlzIGJlaW5nIHNlbnQgdG8gcGx1Zy1pbiByaWdodCBub3csIHRoZW4gaXQn
cyBub3QgdGhlIHRpbWUgdG8gZm9yZ2V0LgotICAgIGlmIChySXRlci0+dmFsdWUuc2Vjb25kICE9
IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fanNPYmplY3RUb0lETWFwLnJlbW92
ZShySXRlcik7Ci0gICAgbV9pZFRvSlNPYmplY3RNYXAucmVtb3ZlKGl0ZXIpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1zdGF0aWMgdWludDMyX3QgcGx1Z2luSURDb3VudGVyOwotCi1ib29sIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6bV9pbkRlc3Ryb3k7Ci0KLURFRklORV9ERUJVR19P
TkxZX0dMT0JBTChXVEY6OlJlZkNvdW50ZWRMZWFrQ291bnRlciwgbmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5Q291bnRlciwgKCJOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkiKSk7Ci0KLU5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KE5l
dHNjYXBlUGx1Z2luSG9zdFByb3h5KiBwbHVnaW5Ib3N0UHJveHksIFdlYkhvc3RlZE5ldHNjYXBl
UGx1Z2luVmlldyAqcGx1Z2luVmlldywgYm9vbCBmdWxsRnJhbWVQbHVnaW4pCi0gICAgOiBtX3Bs
dWdpbkhvc3RQcm94eShwbHVnaW5Ib3N0UHJveHkpCi0gICAgLCBtX3BsdWdpblZpZXcocGx1Z2lu
VmlldykKLSAgICAsIG1fcmVxdWVzdFRpbWVyKCp0aGlzLCAmTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5OjpyZXF1ZXN0VGltZXJGaXJlZCkKLSAgICAsIG1fY3VycmVudFVSTFJlcXVlc3RJRCgw
KQotICAgICwgbV9yZW5kZXJDb250ZXh0SUQoMCkKLSAgICAsIG1fcmVuZGVyZXJUeXBlKFVzZVNv
ZnR3YXJlUmVuZGVyZXIpCi0gICAgLCBtX3dhaXRpbmdGb3JSZXBseShmYWxzZSkKLSAgICAsIG1f
cGx1Z2luRnVuY3Rpb25DYWxsRGVwdGgoMCkKLSAgICAsIG1fc2hvdWxkU3RvcFNvb24oZmFsc2Up
Ci0gICAgLCBtX2N1cnJlbnRSZXF1ZXN0SUQoMCkKLSAgICAsIG1fcGx1Z2luSXNXYWl0aW5nRm9y
RHJhdyhmYWxzZSkKLXsKLSAgICBBU1NFUlQobV9wbHVnaW5WaWV3KTsKLSAgICAKLSAgICBpZiAo
ZnVsbEZyYW1lUGx1Z2luKSB7Ci0gICAgICAgIC8vIEZvciBmdWxsIGZyYW1lIHBsdWctaW5zLCB0
aGUgZmlyc3QgcmVxdWVzdElEIHdpbGwgYWx3YXlzIGJlIHRoZSBvbmUgZm9yIHRoZSBhbHJlYWR5
Ci0gICAgICAgIC8vIG9wZW4gc3RyZWFtLgotICAgICAgICArK21fY3VycmVudFVSTFJlcXVlc3RJ
RDsKLSAgICB9Ci0gICAgCi0gICAgLy8gQXNzaWduIGEgcGx1Zy1pbiBJRC4KLSAgICBkbyB7Ci0g
ICAgICAgIG1fcGx1Z2luSUQgPSArK3BsdWdpbklEQ291bnRlcjsKLSAgICB9IHdoaWxlIChwbHVn
aW5Ib3N0UHJveHktPnBsdWdpbkluc3RhbmNlKG1fcGx1Z2luSUQpIHx8ICFtX3BsdWdpbklEKTsK
LQotI2lmbmRlZiBOREVCVUcKLSAgICBuZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHlDb3VudGVy
LmluY3JlbWVudCgpOwotI2VuZGlmCi19Ci0KLVJlZjxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk+IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y3JlYXRlKE5ldHNjYXBlUGx1Z2luSG9z
dFByb3h5KiBwbHVnaW5Ib3N0UHJveHksIFdlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldyAqcGx1
Z2luVmlldywgYm9vbCBmdWxsRnJhbWVQbHVnaW4pCi17Ci0gICAgYXV0byBwcm94eSA9IGFkb3B0
UmVmKCpuZXcgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KHBsdWdpbkhvc3RQcm94eSwgcGx1
Z2luVmlldywgZnVsbEZyYW1lUGx1Z2luKSk7Ci0gICAgcGx1Z2luSG9zdFByb3h5LT5hZGRQbHVn
aW5JbnN0YW5jZShwcm94eS5wdHIoKSk7Ci0gICAgcmV0dXJuIHByb3h5OwotfQotCi1OZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHk6On5OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkoKQotewot
ICAgIEFTU0VSVCghbV9wbHVnaW5Ib3N0UHJveHkpOwotICAgIAotICAgIG1fcGx1Z2luSUQgPSAw
OwotCi0jaWZuZGVmIE5ERUJVRwotICAgIG5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eUNvdW50
ZXIuZGVjcmVtZW50KCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6OnJlc2l6ZShOU1JlY3Qgc2l6ZSwgTlNSZWN0IGNsaXBSZWN0KQotewotICAgIHVpbnQz
Ml90IHJlcXVlc3RJRCA9IDA7Ci0gICAgCi0gICAgcmVxdWVzdElEID0gbmV4dFJlcXVlc3RJRCgp
OwotCi0gICAgX1dLUEhSZXNpemVQbHVnaW5JbnN0YW5jZShtX3BsdWdpbkhvc3RQcm94eS0+cG9y
dCgpLCBtX3BsdWdpbklELCByZXF1ZXN0SUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplLm9yaWdpbi54LCBzaXplLm9yaWdpbi55LCBzaXplLnNpemUud2lkdGgsIHNpemUuc2l6
ZS5oZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwUmVjdC5vcmlnaW4u
eCwgY2xpcFJlY3Qub3JpZ2luLnksIGNsaXBSZWN0LnNpemUud2lkdGgsIGNsaXBSZWN0LnNpemUu
aGVpZ2h0KTsKLSAgICAKLSAgICB3YWl0Rm9yUmVwbHk8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpCb29sZWFuUmVwbHk+KHJlcXVlc3RJRCk7Ci19Ci0KLQotdm9pZCBOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OnNldFNob3VsZEhvc3RMYXllcnNJbldpbmRvd1NlcnZlcihib29sIHNo
b3VsZEhvc3RMYXllcnNJbldpbmRvd1NlcnZlcikKLXsKLSAgICBfV0tQSFBsdWdpblNob3VsZEhv
c3RMYXllcnNJbldpbmRvd1NlcnZlckNoYW5nZWQobV9wbHVnaW5Ib3N0UHJveHktPnBvcnQoKSwg
bV9wbHVnaW5JRCwgc2hvdWxkSG9zdExheWVyc0luV2luZG93U2VydmVyKTsKLX0KLQotdm9pZCBO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmxheWVySG9zdGluZ01vZGVDaGFuZ2VkKGJvb2wg
aG9zdHNMYXllcnNJbldpbmRvd1NlcnZlciwgdWludDMyX3QgcmVuZGVyQ29udGV4dElEKQotewot
ICAgIHNldFJlbmRlckNvbnRleHRJRChyZW5kZXJDb250ZXh0SUQpOwotCi0gICAgW21fcGx1Z2lu
VmlldyBzZXRIb3N0c0xheWVyc0luV2luZG93U2VydmVyOmhvc3RzTGF5ZXJzSW5XaW5kb3dTZXJ2
ZXJdOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c3RvcEFsbFN0cmVh
bXMoKQotewotICAgIGZvciAoYXV0byYgc3RyZWFtIDogY29weVRvVmVjdG9yKG1fc3RyZWFtcy52
YWx1ZXMoKSkpCi0gICAgICAgIHN0cmVhbS0+c3RvcCgpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6Y2xlYW51cCgpCi17Ci0gICAgc3RvcEFsbFN0cmVhbXMoKTsKLSAg
ICAKLSAgICBtX3JlcXVlc3RUaW1lci5zdG9wKCk7Ci0gICAgCi0gICAgLy8gQ2xlYXIgdGhlIG9i
amVjdCBtYXAsIHRoaXMgd2lsbCBjYXVzZSBhbnkgb3V0c3RhbmRpbmcgSlMgb2JqZWN0cyB0aGF0
IHRoZSBwbHVnLWluIGhhZCBhIHJlZmVyZW5jZSB0byAKLSAgICAvLyB0byBnbyBhd2F5IHdoZW4g
dGhlIG5leHQgZ2FyYmFnZSBjb2xsZWN0aW9uIHRha2VzIHBsYWNlLgotICAgIG1fbG9jYWxPYmpl
Y3RzLmNsZWFyKCk7Ci0gICAgCi0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2lu
VmlldyB3ZWJGcmFtZV0pKQotICAgICAgICBmcmFtZS0+c2NyaXB0KCkuY2xlYW51cFNjcmlwdE9i
amVjdHNGb3JQbHVnaW4oKF9fYnJpZGdlIHZvaWQqKW1fcGx1Z2luVmlldyk7Ci0gICAgCi0gICAg
UHJveHlJbnN0YW5jZVNldCBpbnN0YW5jZXM7Ci0gICAgaW5zdGFuY2VzLnN3YXAobV9pbnN0YW5j
ZXMpOwotICAgIAotICAgIC8vIEludmFsaWRhdGUgYWxsIHByb3h5IGluc3RhbmNlcy4KLSAgICBQ
cm94eUluc3RhbmNlU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBpbnN0YW5jZXMuZW5kKCk7Ci0g
ICAgZm9yIChQcm94eUluc3RhbmNlU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGluc3RhbmNlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5pbnZhbGlkYXRlKCk7Ci0g
ICAgCi0gICAgbV9wbHVnaW5WaWV3ID0gbmlsOwotICAgIG1fbWFudWFsU3RyZWFtID0gbnVsbHB0
cjsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmludmFsaWRhdGUoKQot
ewotICAgIC8vIElmIHRoZSBwbHVnLWluIGhvc3QgaGFzIGRpZWQsIHRoZSBwcm94eSB3aWxsIGJl
IG51bGwuCi0gICAgaWYgKCFtX3BsdWdpbkhvc3RQcm94eSkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIG1fcGx1Z2luSG9zdFByb3h5LT5yZW1vdmVQbHVnaW5JbnN0YW5jZSh0aGlzKTsKLSAg
ICBtX3BsdWdpbkhvc3RQcm94eSA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjpkZXN0cm95KCkKLXsKLSAgICB1aW50MzJfdCByZXF1ZXN0SUQgPSBuZXh0
UmVxdWVzdElEKCk7Ci0KLSAgICBBU1NFUlQoIW1faW5EZXN0cm95KTsKLSAgICBtX2luRGVzdHJv
eSA9IHRydWU7Ci0gICAgCi0gICAgRnJhbWVMb2FkTWFwOjppdGVyYXRvciBlbmQgPSBtX3BlbmRp
bmdGcmFtZUxvYWRzLmVuZCgpOwotICAgIGZvciAoRnJhbWVMb2FkTWFwOjppdGVyYXRvciBpdCA9
IG1fcGVuZGluZ0ZyYW1lTG9hZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBb
KGl0LT5rZXkpIF9zZXRJbnRlcm5hbExvYWREZWxlZ2F0ZTpuaWxdOwotCi0gICAgX1dLUEhEZXN0
cm95UGx1Z2luSW5zdGFuY2UobV9wbHVnaW5Ib3N0UHJveHktPnBvcnQoKSwgbV9wbHVnaW5JRCwg
cmVxdWVzdElEKTsKLSAKLSAgICAvLyBJZiB0aGUgcGx1Zy1pbiBob3N0IGNyYXNoZXMgd2hpbGUg
d2UncmUgd2FpdGluZyBmb3IgYSByZXBseSwgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBpbnN0
YW5jZSBwcm94eQotICAgIC8vIHdpbGwgZ28gYXdheS4gUHJldmVudCB0aGlzIGJ5IHByb3RlY3Rp
bmcgaXQgaGVyZS4KLSAgICBSZWY8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5PiBwcm90ZWN0
KCp0aGlzKTsKLSAgICAKLSAgICAvLyBXZSBkb24ndCBjYXJlIGFib3V0IHRoZSByZXBseSBoZXJl
IC0gd2UganVzdCB3YW50IHRvIGJsb2NrIHVudGlsIHRoZSBwbHVnLWluIGluc3RhbmNlIGhhcyBi
ZWVuIHRvcm4gZG93bi4KLSAgICB3YWl0Rm9yUmVwbHk8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpCb29sZWFuUmVwbHk+KHJlcXVlc3RJRCk7Ci0KLSAgICBtX2luRGVzdHJveSA9IGZhbHNl
OwotICAgIAotICAgIGNsZWFudXAoKTsKLSAgICBpbnZhbGlkYXRlKCk7Ci19Ci0KLXZvaWQgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRNYW51YWxTdHJlYW0oUmVmPEhvc3RlZE5ldHNj
YXBlUGx1Z2luU3RyZWFtPiYmIG1hbnVhbFN0cmVhbSkKLXsKLSAgICBBU1NFUlQoIW1fbWFudWFs
U3RyZWFtKTsKLSAgICAKLSAgICBtX21hbnVhbFN0cmVhbSA9IFdURk1vdmUobWFudWFsU3RyZWFt
KTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmNhbmNlbFN0cmVhbUxv
YWQodWludDMyX3Qgc3RyZWFtSUQsIE5QUmVhc29uIHJlYXNvbikgCi17Ci0gICAgSG9zdGVkTmV0
c2NhcGVQbHVnaW5TdHJlYW0qIHN0cmVhbTsKLSAgICAKLSAgICBpZiAobV9tYW51YWxTdHJlYW0g
JiYgc3RyZWFtSUQgPT0gMSkKLSAgICAgICAgc3RyZWFtID0gbV9tYW51YWxTdHJlYW0uZ2V0KCk7
Ci0gICAgZWxzZQotICAgICAgICBzdHJlYW0gPSBtX3N0cmVhbXMuZ2V0KHN0cmVhbUlEKTsKLSAg
ICAKLSAgICBpZiAoIXN0cmVhbSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHN0
cmVhbS0+Y2FuY2VsTG9hZChyZWFzb24pOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZGlzY29ubmVjdFN0cmVhbShIb3N0ZWROZXRzY2Fw
ZVBsdWdpblN0cmVhbSogc3RyZWFtKQotewotICAgIGlmIChzdHJlYW0gPT0gbV9tYW51YWxTdHJl
YW0pIHsKLSAgICAgICAgbV9tYW51YWxTdHJlYW0gPSBudWxscHRyOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fc3RyZWFtcy5nZXQoc3RyZWFtLT5zdHJlYW1JRCgpKSA9
PSBzdHJlYW0pOwotICAgIG1fc3RyZWFtcy5yZW1vdmUoc3RyZWFtLT5zdHJlYW1JRCgpKTsKLX0K
LSAgICAKLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpwbHVnaW5Ib3N0RGllZCgp
Ci17Ci0gICAgbV9wbHVnaW5Ib3N0UHJveHkgPSBudWxscHRyOwotCi0gICAgW21fcGx1Z2luVmll
dyBwbHVnaW5Ib3N0RGllZF07Ci0KLSAgICBjbGVhbnVwKCk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5Ojpmb2N1c0NoYW5nZWQoYm9vbCBoYXNGb2N1cykKLXsKLSAgICBf
V0tQSFBsdWdpbkluc3RhbmNlRm9jdXNDaGFuZ2VkKG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0KCks
IG1fcGx1Z2luSUQsIGhhc0ZvY3VzKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6OndpbmRvd0ZvY3VzQ2hhbmdlZChib29sIGhhc0ZvY3VzKQotewotICAgIF9XS1BIUGx1
Z2luSW5zdGFuY2VXaW5kb3dGb2N1c0NoYW5nZWQobV9wbHVnaW5Ib3N0UHJveHktPnBvcnQoKSwg
bV9wbHVnaW5JRCwgaGFzRm9jdXMpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6d2luZG93RnJhbWVDaGFuZ2VkKE5TUmVjdCBmcmFtZSkKLXsKLSAgICBfV0tQSFBsdWdp
bkluc3RhbmNlV2luZG93RnJhbWVDaGFuZ2VkKG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0KCksIG1f
cGx1Z2luSUQsIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSwgZnJhbWUuc2l6ZS53aWR0
aCwgZnJhbWUuc2l6ZS5oZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOU01heFkoW1tbTlNTY3JlZW4gc2NyZWVuc10gb2JqZWN0QXRJbmRleDowXSBmcmFt
ZV0pKTsKLX0KLSAgICAKLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzdGFydFRp
bWVycyhib29sIHRocm90dGxlVGltZXJzKQotewotICAgIF9XS1BIUGx1Z2luSW5zdGFuY2VTdGFy
dFRpbWVycyhtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdpbklELCB0aHJvdHRsZVRp
bWVycyk7Ci19Ci0gICAgCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6bW91c2VF
dmVudChOU1ZpZXcgKnBsdWdpblZpZXcsIE5TRXZlbnQgKmV2ZW50LCBOUENvY29hRXZlbnRUeXBl
IHR5cGUpCi17Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBO
U1BvaW50IHNjcmVlblBvaW50ID0gW1tldmVudCB3aW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46
W2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddXTsKLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFU
SU9OU19FTkQKLSAgICBOU1BvaW50IHBsdWdpblBvaW50ID0gW3BsdWdpblZpZXcgY29udmVydFBv
aW50OltldmVudCBsb2NhdGlvbkluV2luZG93XSBmcm9tVmlldzpuaWxdOwotICAgIAotICAgIGlu
dCBjbGlja0NvdW50OwotICAgIGlmICh0eXBlID09IE5QQ29jb2FFdmVudE1vdXNlRW50ZXJlZCB8
fCB0eXBlID09IE5QQ29jb2FFdmVudE1vdXNlRXhpdGVkKQotICAgICAgICBjbGlja0NvdW50ID0g
MDsKLSAgICBlbHNlCi0gICAgICAgIGNsaWNrQ291bnQgPSBbZXZlbnQgY2xpY2tDb3VudF07Ci0g
ICAgCi0KLSAgICBfV0tQSFBsdWdpbkluc3RhbmNlTW91c2VFdmVudChtX3BsdWdpbkhvc3RQcm94
eS0+cG9ydCgpLCBtX3BsdWdpbklELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFtldmVudCB0aW1lc3RhbXBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGUsIFtldmVudCBtb2RpZmllckZsYWdzXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwbHVnaW5Qb2ludC54LCBwbHVnaW5Qb2ludC55LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNjcmVlblBvaW50LngsIHNjcmVlblBvaW50LnksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTlNNYXhZKFtbW05TU2NyZWVuIHNjcmVlbnNdIG9iamVjdEF0
SW5kZXg6MF0gZnJhbWVdKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXZl
bnQgYnV0dG9uTnVtYmVyXSwgY2xpY2tDb3VudCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgW2V2ZW50IGRlbHRhWF0sIFtldmVudCBkZWx0YVldLCBbZXZlbnQgZGVsdGFaXSk7
Ci19Ci0gICAgCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6a2V5RXZlbnQoTlNW
aWV3ICpwbHVnaW5WaWV3LCBOU0V2ZW50ICpldmVudCwgTlBDb2NvYUV2ZW50VHlwZSB0eXBlKQot
ewotICAgIE5TRGF0YSAqY2hhcmFjdGVyc0RhdGEgPSBbW2V2ZW50IGNoYXJhY3RlcnNdIGRhdGFV
c2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKLSAgICBOU0RhdGEgKmNoYXJhY3Rl
cnNJZ25vcmluZ01vZGlmaWVyc0RhdGEgPSBbW2V2ZW50IGNoYXJhY3RlcnNJZ25vcmluZ01vZGlm
aWVyc10gZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOwotICAgIAotICAg
IF9XS1BIUGx1Z2luSW5zdGFuY2VLZXlib2FyZEV2ZW50KG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0
KCksIG1fcGx1Z2luSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2V2
ZW50IHRpbWVzdGFtcF0sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGUsIFtldmVudCBtb2RpZmllckZsYWdzXSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3RfY2FzdDxjaGFyKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
W2NoYXJhY3RlcnNEYXRhIGJ5dGVzXSkpLCBbY2hhcmFjdGVyc0RhdGEgbGVuZ3RoXSwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfY2FzdDxjaGFyKj4ocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oW2NoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyc0RhdGEg
Ynl0ZXNdKSksIFtjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnNEYXRhIGxlbmd0aF0sIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtldmVudCBpc0FSZXBlYXRdLCBbZXZl
bnQga2V5Q29kZV0sIGtleUNoYXJGb3JFdmVudChldmVudCkpOwotfQotCi12b2lkIE5ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eTo6c3ludGhldGljS2V5RG93bldpdGhDb21tYW5kTW9kaWZpZXIo
aW50IGtleUNvZGUsIGNoYXIgY2hhcmFjdGVyKQotewotICAgIE5TRGF0YSAqY2hhcmFjdGVyc0Rh
dGEgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6JmNoYXJhY3RlciBsZW5ndGg6MV07Ci0KLSAgICBf
V0tQSFBsdWdpbkluc3RhbmNlS2V5Ym9hcmRFdmVudChtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgp
LCBtX3BsdWdpbklELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtOU0Rh
dGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXSwgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTlBDb2NvYUV2ZW50S2V5RG93biwgTlNFdmVudE1vZGlmaWVyRmxh
Z0NvbW1hbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfY2Fz
dDxjaGFyKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oW2NoYXJhY3RlcnNEYXRhIGJ5
dGVzXSkpLCBbY2hhcmFjdGVyc0RhdGEgbGVuZ3RoXSwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3RfY2FzdDxjaGFyKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4oW2NoYXJhY3RlcnNEYXRhIGJ5dGVzXSkpLCBbY2hhcmFjdGVyc0RhdGEgbGVuZ3RoXSwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGtleUNvZGUsIGNo
YXJhY3Rlcik7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpmbGFnc0No
YW5nZWQoTlNFdmVudCAqZXZlbnQpCi17Ci0gICAgX1dLUEhQbHVnaW5JbnN0YW5jZUtleWJvYXJk
RXZlbnQobV9wbHVnaW5Ib3N0UHJveHktPnBvcnQoKSwgbV9wbHVnaW5JRCwgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgW2V2ZW50IHRpbWVzdGFtcF0sIE5QQ29jb2FFdmVu
dEZsYWdzQ2hhbmdlZCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2V2
ZW50IG1vZGlmaWVyRmxhZ3NdLCAwLCAwLCAwLCAwLCBmYWxzZSwgW2V2ZW50IGtleUNvZGVdLCAw
KTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omluc2VydFRleHQoTlNT
dHJpbmcgKnRleHQpCi17Ci0gICAgTlNEYXRhICp0ZXh0RGF0YSA9IFt0ZXh0IGRhdGFVc2luZ0Vu
Y29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKLSAgICAKLSAgICBfV0tQSFBsdWdpbkluc3Rh
bmNlSW5zZXJ0VGV4dChtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdpbklELAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8Y2hhcio+KHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KFt0ZXh0RGF0YSBieXRlc10pKSwgW3RleHREYXRhIGxlbmd0
aF0pOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6d2hlZWxFdmVudChO
U1ZpZXcgKnBsdWdpblZpZXcsIE5TRXZlbnQgKmV2ZW50KQotewotICAgIE5TUG9pbnQgcGx1Z2lu
UG9pbnQgPSBbcGx1Z2luVmlldyBjb252ZXJ0UG9pbnQ6W2V2ZW50IGxvY2F0aW9uSW5XaW5kb3dd
IGZyb21WaWV3Om5pbF07Ci0KLSAgICB1aW50MzJfdCByZXF1ZXN0SUQgPSBuZXh0UmVxdWVzdElE
KCk7Ci0gICAgX1dLUEhQbHVnaW5JbnN0YW5jZVdoZWVsRXZlbnQobV9wbHVnaW5Ib3N0UHJveHkt
PnBvcnQoKSwgbV9wbHVnaW5JRCwgcmVxdWVzdElELAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFtldmVudCB0aW1lc3RhbXBdLCBbZXZlbnQgbW9kaWZpZXJGbGFnc10sIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpblBvaW50LngsIHBsdWdpblBvaW50
LnksIFtldmVudCBidXR0b25OdW1iZXJdLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbZXZlbnQgZGVsdGFYXSwgW2V2ZW50IGRlbHRhWV0sIFtldmVudCBkZWx0YVpdKTsKLSAg
ICAKLSAgICBhdXRvIHJlcGx5ID0gd2FpdEZvclJlcGx5PE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6Qm9vbGVhblJlcGx5PihyZXF1ZXN0SUQpOwotICAgIHJldHVybiByZXBseSAmJiByZXBs
eS0+bV9yZXN1bHQ7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpwcmlu
dChDR0NvbnRleHRSZWYgY29udGV4dCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkK
LXsKLSAgICB1aW50MzJfdCByZXF1ZXN0SUQgPSBuZXh0UmVxdWVzdElEKCk7Ci0gICAgX1dLUEhQ
bHVnaW5JbnN0YW5jZVByaW50KG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0KCksIG1fcGx1Z2luSUQs
IHJlcXVlc3RJRCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgCi0gICAgYXV0byByZXBseSA9IHdhaXRG
b3JSZXBseTxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkJvb2xlYW5BbmREYXRhUmVwbHk+
KHJlcXVlc3RJRCk7Ci0gICAgaWYgKCFyZXBseSB8fCAhcmVwbHktPm1fcmV0dXJuVmFsdWUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlcj4gZGF0YVByb3Zp
ZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhDRkRhdGEocmVwbHktPm1fcmVz
dWx0LmdldCgpKSk7Ci0gICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZSA9
IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwotICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZSh3aWR0aCwgaGVpZ2h0LCA4
LCAzMiwgd2lkdGggKiA0LCBjb2xvclNwYWNlLmdldCgpLCBrQ0dJbWFnZUFscGhhRmlyc3QsIGRh
dGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsK
LQotICAgIC8vIEZsaXAgdGhlIGNvbnRleHQgYW5kIGRyYXcgdGhlIGltYWdlLgotICAgIENHQ29u
dGV4dFNhdmVHU3RhdGUoY29udGV4dCk7Ci0gICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRl
eHQsIDAuMCwgaGVpZ2h0KTsKLSAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLjAsIC0x
LjApOwotICAgIAotICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LCBDR1JlY3RNYWtlKDAs
IDAsIHdpZHRoLCBoZWlnaHQpLCBpbWFnZS5nZXQoKSk7Ci0KLSAgICBDR0NvbnRleHRSZXN0b3Jl
R1N0YXRlKGNvbnRleHQpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6
c25hcHNob3QoQ0dDb250ZXh0UmVmIGNvbnRleHQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBo
ZWlnaHQpCi17Ci0gICAgdWludDMyX3QgcmVxdWVzdElEID0gbmV4dFJlcXVlc3RJRCgpOwotICAg
IF9XS1BIUGx1Z2luSW5zdGFuY2VTbmFwc2hvdChtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBt
X3BsdWdpbklELCByZXF1ZXN0SUQsIHdpZHRoLCBoZWlnaHQpOwotICAgIAotICAgIGF1dG8gcmVw
bHkgPSB3YWl0Rm9yUmVwbHk8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpCb29sZWFuQW5k
RGF0YVJlcGx5PihyZXF1ZXN0SUQpOwotICAgIGlmICghcmVwbHkgfHwgIXJlcGx5LT5tX3JldHVy
blZhbHVlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXI+
IGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKHJl
cGx5LT5tX3Jlc3VsdC5nZXQoKSkpOwotICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNv
bG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKLSAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUod2lkdGgs
IGhlaWdodCwgOCwgMzIsIHdpZHRoICogNCwgY29sb3JTcGFjZS5nZXQoKSwga0NHSW1hZ2VBbHBo
YVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCwgZGF0YVByb3Zp
ZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotCi0gICAg
Q0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIENHUmVjdE1ha2UoMCwgMCwgd2lkdGgsIGhlaWdo
dCksIGltYWdlLmdldCgpKTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OnN0b3BUaW1lcnMoKQotewotICAgIF9XS1BIUGx1Z2luSW5zdGFuY2VTdG9wVGltZXJzKG1fcGx1
Z2luSG9zdFByb3h5LT5wb3J0KCksIG1fcGx1Z2luSUQpOwotfQotCi12b2lkIE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6c3RhdHVzKGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgUmV0
YWluUHRyPENGU3RyaW5nUmVmPiBzdGF0dXMgPSBhZG9wdENGKENGU3RyaW5nQ3JlYXRlV2l0aENT
dHJpbmcoMCwgbWVzc2FnZSA/IG1lc3NhZ2UgOiAiIiwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KSk7
Ci0gICAgaWYgKCFzdGF0dXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYlZpZXcgKnd2ID0g
W21fcGx1Z2luVmlldyB3ZWJWaWV3XTsKLSAgICBbW3d2IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3
ZWJWaWV3Ond2IHNldFN0YXR1c1RleHQ6KF9fYnJpZGdlIE5TU3RyaW5nICopc3RhdHVzLmdldCgp
XTsKLX0KLQotTlBFcnJvciBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmxvYWRVUkwoY29u
c3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIGNvbnN0IGNoYXIqIHBvc3REYXRhLCB1
aW50MzJfdCBwb3N0TGVuLCBMb2FkVVJMRmxhZ3MgZmxhZ3MsIHVpbnQzMl90JiBzdHJlYW1JRCkK
LXsKLSAgICBpZiAoIXVybCkKLSAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07Ci0g
Ci0gICAgTlNNdXRhYmxlVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFttX3BsdWdpblZpZXcgcmVxdWVz
dFdpdGhVUkxDU3RyaW5nOnVybF07Ci0KLSAgICBpZiAoZmxhZ3MgJiBJc1Bvc3QpIHsKLSAgICAg
ICAgTlNEYXRhICpodHRwQm9keSA9IG5pbDsKLQotICAgICAgICBpZiAoZmxhZ3MgJiBQb3N0RGF0
YUlzRmlsZSkgewotICAgICAgICAgICAgLy8gSWYgd2UncmUgcG9zdGluZyBhIGZpbGUsIGJ1ZiBp
cyBlaXRoZXIgYSBmaWxlIFVSTCBvciBhIHBhdGggdG8gdGhlIGZpbGUuCi0gICAgICAgICAgICBp
ZiAoIXBvc3REYXRhKQotICAgICAgICAgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFN
OwotICAgICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBidWZTdHJpbmcgPSBhZG9wdENG
KENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcG9zdERhdGEs
IGtDRlN0cmluZ0VuY29kaW5nV2luZG93c0xhdGluMSkpOwotICAgICAgICAgICAgaWYgKCFidWZT
dHJpbmcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIE5TVVJMICpmaWxlVVJMID0gW05TVVJMIF93ZWJfVVJMV2l0
aERhdGFBc1N0cmluZzooX19icmlkZ2UgTlNTdHJpbmcgKilidWZTdHJpbmcuZ2V0KCldOwotICAg
ICAgICAgICAgTlNTdHJpbmcgKnBhdGg7Ci0gICAgICAgICAgICBpZiAoW2ZpbGVVUkwgaXNGaWxl
VVJMXSkKLSAgICAgICAgICAgICAgICBwYXRoID0gW2ZpbGVVUkwgcGF0aF07Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgcGF0aCA9IChfX2JyaWRnZSBOU1N0cmluZyAqKWJ1ZlN0
cmluZy5nZXQoKTsKLSAgICAgICAgICAgIGh0dHBCb2R5ID0gW05TRGF0YSBkYXRhV2l0aENvbnRl
bnRzT2ZGaWxlOnBhdGhdOwotICAgICAgICAgICAgaWYgKCFodHRwQm9keSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgaHR0cEJvZHkgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6cG9zdERhdGEgbGVuZ3RoOnBv
c3RMZW5dOwotCi0gICAgICAgIGlmICghW2h0dHBCb2R5IGxlbmd0aF0pCi0gICAgICAgICAgICBy
ZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKLQotICAgICAgICBbcmVxdWVzdCBzZXRIVFRQTWV0
aG9kOkAiUE9TVCJdOwotICAgICAgICAKLSAgICAgICAgaWYgKGZsYWdzICYgQWxsb3dIZWFkZXJz
SW5Qb3N0RGF0YSkgewotICAgICAgICAgICAgaWYgKFtodHRwQm9keSBfd2ViX3N0YXJ0c1dpdGhC
bGFua0xpbmVdKQotICAgICAgICAgICAgICAgIGh0dHBCb2R5ID0gW2h0dHBCb2R5IHN1YmRhdGFX
aXRoUmFuZ2U6TlNNYWtlUmFuZ2UoMSwgW2h0dHBCb2R5IGxlbmd0aF0gLSAxKV07Ci0gICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBOU0ludGVnZXIgbG9jYXRpb24gPSBbaHR0cEJv
ZHkgX3dlYl9sb2NhdGlvbkFmdGVyRmlyc3RCbGFua0xpbmVdOwotICAgICAgICAgICAgICAgIGlm
IChsb2NhdGlvbiAhPSBOU05vdEZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRo
ZSBibGFuayBsaW5lIGlzIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHBvc3REYXRhLCBldmVy
eXRoaW5nIGJlZm9yZSBpcyB0aGUgaGVhZGVyLgotICAgICAgICAgICAgICAgICAgICBOU0RhdGEg
KmhlYWRlckRhdGEgPSBbaHR0cEJvZHkgc3ViZGF0YVdpdGhSYW5nZTpOU01ha2VSYW5nZSgwLCBs
b2NhdGlvbildOwotICAgICAgICAgICAgICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpoZWFk
ZXIgPSBbaGVhZGVyRGF0YSBfd2Via2l0X3BhcnNlUkZDODIySGVhZGVyRmllbGRzXTsKLSAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgZGF0YUxlbmd0aCA9IFtodHRwQm9keSBsZW5ndGhdIC0g
bG9jYXRpb247Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gU29tZXRpbWVzIHBsdWdpbnMgbGlr
ZSB0byBzZXQgQ29udGVudC1MZW5ndGggdGhlbXNlbHZlcyB3aGVuIHRoZXkgcG9zdCwKLSAgICAg
ICAgICAgICAgICAgICAgLy8gYnV0IENGTmV0d29yayBkb2VzIG5vdCBsaWtlIHRoYXQuIFNvIHdl
IHdpbGwgcmVtb3ZlIHRoZSBoZWFkZXIKLSAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGluc3Rl
YWQgdHJ1bmNhdGUgdGhlIGRhdGEgdG8gdGhlIHJlcXVlc3RlZCBsZW5ndGguCi0gICAgICAgICAg
ICAgICAgICAgIE5TU3RyaW5nICpjb250ZW50TGVuZ3RoID0gW2hlYWRlciBvYmplY3RGb3JLZXk6
QCJDb250ZW50LUxlbmd0aCJdOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50TGVu
Z3RoKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxlbmd0aCA9IHN0ZDo6bWluKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihbY29udGVudExlbmd0aCBpbnRWYWx1ZV0pLCBkYXRhTGVuZ3RoKTsK
LSAgICAgICAgICAgICAgICAgICAgW2hlYWRlciByZW1vdmVPYmplY3RGb3JLZXk6QCJDb250ZW50
LUxlbmd0aCJdOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChbaGVhZGVyIGNvdW50XSA+IDAp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWVzdCBzZXRBbGxIVFRQSGVhZGVyRmllbGRz
OmhlYWRlcl07Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gRXZlcnl0aGluZyBhZnRlciB0aGUg
YmxhbmsgbGluZSBpcyB0aGUgYWN0dWFsIGNvbnRlbnQgb2YgdGhlIFBPU1QuCi0gICAgICAgICAg
ICAgICAgICAgIGh0dHBCb2R5ID0gW2h0dHBCb2R5IHN1YmRhdGFXaXRoUmFuZ2U6TlNNYWtlUmFu
Z2UobG9jYXRpb24sIGRhdGFMZW5ndGgpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIVtodHRwQm9keSBsZW5ndGhdKQotICAgICAg
ICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07Ci0KLSAgICAgICAgLy8gUGx1Zy1pbnMg
ZXhwZWN0IHRvIHJlY2VpdmUgdW5jYWNoZWQgZGF0YSB3aGVuIGRvaW5nIGEgUE9TVCAoMzM0NzEz
NCkuCi0gICAgICAgIFtyZXF1ZXN0IHNldENhY2hlUG9saWN5Ok5TVVJMUmVxdWVzdFJlbG9hZEln
bm9yaW5nQ2FjaGVEYXRhXTsKLSAgICAgICAgW3JlcXVlc3Qgc2V0SFRUUEJvZHk6aHR0cEJvZHld
OwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbG9hZFJlcXVlc3QocmVxdWVzdCwgdGFyZ2V0LCBm
bGFncyAmIEFsbG93UG9wdXBzLCBzdHJlYW1JRCk7Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjpwZXJmb3JtUmVxdWVzdChQbHVnaW5SZXF1ZXN0KiBwbHVnaW5SZXF1ZXN0
KQotewotICAgIC8vIExvYWRpbmcgdGhlIHJlcXVlc3QgY2FuIGNhdXNlIHRoZSBpbnN0YW5jZSBw
cm94eSB0byBnbyBhd2F5LCBzbyBwcm90ZWN0IGl0LgotICAgIFJlZjxOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgQVNTRVJUKG1fcGx1Z2luVmlldyk7
Ci0gICAgCi0gICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gcGx1Z2luUmVxdWVzdC0+cmVxdWVz
dCgpOwotICAgIE5TU3RyaW5nICpmcmFtZU5hbWUgPSBwbHVnaW5SZXF1ZXN0LT5mcmFtZU5hbWUo
KTsKLSAgICBXZWJGcmFtZSAqZnJhbWUgPSBuaWw7Ci0gICAgCi0gICAgTlNVUkwgKlVSTCA9IFty
ZXF1ZXN0IFVSTF07Ci0gICAgTlNTdHJpbmcgKkpTU3RyaW5nID0gW1VSTCBfd2Via2l0X3Njcmlw
dElmSmF2YVNjcmlwdFVSTF07Ci0gICAgCi0gICAgQVNTRVJUKGZyYW1lTmFtZSB8fCBKU1N0cmlu
Zyk7Ci0gICAgaWYgKGZyYW1lTmFtZSkgewotICAgICAgICAvLyBGSVhNRSAtIG5lZWQgdG8gZ2V0
IHJpZCBvZiB0aGlzIHdpbmRvdyBjcmVhdGlvbiB3aGljaAotICAgICAgICAvLyBieXBhc3NlcyBu
b3JtYWwgdGFyZ2V0ZWQgbGluayBoYW5kbGluZwotICAgICAgICBmcmFtZSA9IGtpdChjb3JlKFtt
X3BsdWdpblZpZXcgd2ViRnJhbWVdKS0+bG9hZGVyKCkuZmluZEZyYW1lRm9yTmF2aWdhdGlvbihm
cmFtZU5hbWUpKTsKLSAgICAgICAgaWYgKCFmcmFtZSkgewotICAgICAgICAgICAgV2ViVmlldyAq
Y3VycmVudFdlYlZpZXcgPSBbbV9wbHVnaW5WaWV3IHdlYlZpZXddOwotICAgICAgICAgICAgV2Vi
VmlldyAqbmV3V2ViVmlldyA9IFtbY3VycmVudFdlYlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJd
IHdlYlZpZXc6Y3VycmVudFdlYlZpZXcgY3JlYXRlV2ViVmlld1dpdGhSZXF1ZXN0Om5pbCB3aW5k
b3dGZWF0dXJlczpAeyB9XTsKLQotICAgICAgICAgICAgaWYgKCFuZXdXZWJWaWV3KSB7Ci0gICAg
ICAgICAgICAgICAgX1dLUEhMb2FkVVJMTm90aWZ5KG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0KCks
IG1fcGx1Z2luSUQsIHBsdWdpblJlcXVlc3QtPnJlcXVlc3RJRCgpLCBOUEVSUl9HRU5FUklDX0VS
Uk9SKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGZyYW1lID0gW25ld1dlYlZpZXcgbWFpbkZyYW1lXTsKLSAgICAgICAg
ICAgIGNvcmUoZnJhbWUpLT50cmVlKCkuc2V0TmFtZShmcmFtZU5hbWUpOwotICAgICAgICAgICAg
W1tuZXdXZWJWaWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3U2hvdzpuZXdXZWJWaWV3
XTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChKU1N0cmluZykgewotICAgICAgICBBU1NF
UlQoIWZyYW1lIHx8IFttX3BsdWdpblZpZXcgd2ViRnJhbWVdID09IGZyYW1lKTsKLSAgICAgICAg
ZXZhbHVhdGVKYXZhU2NyaXB0KHBsdWdpblJlcXVlc3QpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IFtmcmFtZSBsb2FkUmVxdWVzdDpyZXF1ZXN0XTsKLQotICAgICAgICAvLyBDaGVjayBpZiBhbm90
aGVyIHBsdWctaW4gdmlldyBvciBldmVuIHRoaXMgdmlldyBpcyB3YWl0aW5nIGZvciB0aGUgZnJh
bWUgdG8gbG9hZC4KLSAgICAgICAgLy8gSWYgaXQgaXMsIHRlbGwgaXQgdGhhdCB0aGUgbG9hZCB3
YXMgY2FuY2VsbGVkIGJlY2F1c2UgaXQgd2lsbCBiZSBhbnl3YXkuCi0gICAgICAgIFdlYkhvc3Rl
ZE5ldHNjYXBlUGx1Z2luVmlldyAqdmlldyA9IFtmcmFtZSBfaW50ZXJuYWxMb2FkRGVsZWdhdGVd
OwotICAgICAgICBpZiAodmlldyAhPSBuaWwpIHsKLSAgICAgICAgICAgIEFTU0VSVChbdmlldyBp
c0tpbmRPZkNsYXNzOltXZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcgY2xhc3NdXSk7Ci0gICAg
ICAgICAgICBbdmlldyB3ZWJGcmFtZTpmcmFtZSBkaWRGaW5pc2hMb2FkV2l0aFJlYXNvbjpOUFJF
U19VU0VSX0JSRUFLXTsKLSAgICAgICAgfQotICAgICAgICBtX3BlbmRpbmdGcmFtZUxvYWRzLnNl
dChmcmFtZSwgcGx1Z2luUmVxdWVzdCk7Ci0gICAgICAgIFtmcmFtZSBfc2V0SW50ZXJuYWxMb2Fk
RGVsZWdhdGU6bV9wbHVnaW5WaWV3XTsKLSAgICB9Ci0KLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OndlYkZyYW1lRGlkRmluaXNoTG9hZFdpdGhSZWFzb24oV2ViRnJhbWUq
IHdlYkZyYW1lLCBOUFJlYXNvbiByZWFzb24pCi17Ci0gICAgRnJhbWVMb2FkTWFwOjppdGVyYXRv
ciBpdCA9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZmluZCh3ZWJGcmFtZSk7Ci0gICAgQVNTRVJUKGl0
ICE9IG1fcGVuZGluZ0ZyYW1lTG9hZHMuZW5kKCkpOwotICAgICAgICAKLSAgICBQbHVnaW5SZXF1
ZXN0KiBwbHVnaW5SZXF1ZXN0ID0gaXQtPnZhbHVlLmdldCgpOwotICAgIF9XS1BITG9hZFVSTE5v
dGlmeShtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdpbklELCBwbHVnaW5SZXF1ZXN0
LT5yZXF1ZXN0SUQoKSwgcmVhc29uKTsKLSAKLSAgICBtX3BlbmRpbmdGcmFtZUxvYWRzLnJlbW92
ZShpdCk7Ci0KLSAgICBbd2ViRnJhbWUgX3NldEludGVybmFsTG9hZERlbGVnYXRlOm5pbF07Ci19
Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpldmFsdWF0ZUphdmFTY3JpcHQo
UGx1Z2luUmVxdWVzdCogcGx1Z2luUmVxdWVzdCkKLXsKLSAgICBOU1VSTCAqVVJMID0gW3BsdWdp
blJlcXVlc3QtPnJlcXVlc3QoKSBVUkxdOwotICAgIE5TU3RyaW5nICpKU1N0cmluZyA9IFtVUkwg
X3dlYmtpdF9zY3JpcHRJZkphdmFTY3JpcHRVUkxdOwotICAgIEFTU0VSVChKU1N0cmluZyk7Ci0K
LSAgICBSZWY8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5PiBwcm90ZWN0KCp0aGlzKTsgLy8g
RXhlY3V0aW5nIGFyYml0cmFyeSBKYXZhU2NyaXB0IGNhbiBkZXN0cm95IHRoZSBwcm94eS4KLQot
ICAgIE5TU3RyaW5nICpyZXN1bHQgPSBbW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0gX3N0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOkpTU3RyaW5nIGZvcmNlVXNlckdlc3R1cmU6
cGx1Z2luUmVxdWVzdC0+YWxsb3dQb3B1cHMoKV07Ci0gICAgCi0gICAgLy8gRG9uJ3QgY29udGlu
dWUgaWYgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmcgY2F1c2VkIHRoZSBw
bHVnLWluIHRvIHN0b3AuCi0gICAgaWYgKCFtX3BsdWdpbkhvc3RQcm94eSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKHBsdWdpblJlcXVlc3QtPmZyYW1lTmFtZSgpICE9IG5pbCkKLSAgICAg
ICAgcmV0dXJuOwotICAgICAgICAKLSAgICBpZiAoW3Jlc3VsdCBsZW5ndGhdID4gMCkgewotICAg
ICAgICAvLyBEb24ndCBjYWxsIE5QUF9OZXdTdHJlYW0gYW5kIG90aGVyIHN0cmVhbSBtZXRob2Rz
IGlmIHRoZXJlIGlzIG5vIEpTIHJlc3VsdCB0byBkZWxpdmVyLiBUaGlzIGlzIHdoYXQgTW96aWxs
YSBkb2VzLgotICAgICAgICBOU0RhdGEgKkpTRGF0YSA9IFtyZXN1bHQgZGF0YVVzaW5nRW5jb2Rp
bmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOwotICAgICAgICAKLSAgICAgICAgYXV0byBzdHJlYW0g
PSBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbTo6Y3JlYXRlKHRoaXMsIHBsdWdpblJlcXVlc3Qt
PnJlcXVlc3RJRCgpLCBwbHVnaW5SZXF1ZXN0LT5yZXF1ZXN0KCkpOwotICAgICAgICBtX3N0cmVh
bXMuYWRkKHN0cmVhbS0+c3RyZWFtSUQoKSwgc3RyZWFtLmNvcHlSZWYoKSk7Ci0gICAgICAgIAot
ICAgICAgICBSZXRhaW5QdHI8TlNVUkxSZXNwb25zZT4gcmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNV
UkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6VVJMIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN
SU1FVHlwZTpAInRleHQvcGxhaW4iIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkQ29udGVudExlbmd0aDpbSlNE
YXRhIGxlbmd0aF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRFbmNvZGluZ05hbWU6bmlsXSk7Ci0gICAgICAg
IHN0cmVhbS0+c3RhcnRTdHJlYW1XaXRoUmVzcG9uc2UocmVzcG9uc2UuZ2V0KCkpOwotICAgICAg
ICBzdHJlYW0tPmRpZFJlY2VpdmVEYXRhKDAsIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihb
SlNEYXRhIGJ5dGVzXSksIFtKU0RhdGEgbGVuZ3RoXSk7Ci0gICAgICAgIHN0cmVhbS0+ZGlkRmlu
aXNoTG9hZGluZygwKTsKLSAgICB9Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpyZXF1ZXN0VGltZXJGaXJlZCgpCi17Ci0gICAgQVNTRVJUKCFtX3BsdWdpblJlcXVlc3Rz
LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fcGx1Z2luVmlldyk7Ci0gICAgCi0gICAgUmVmUHRy
PFBsdWdpblJlcXVlc3Q+IHJlcXVlc3QgPSBtX3BsdWdpblJlcXVlc3RzLmZpcnN0KCk7Ci0gICAg
bV9wbHVnaW5SZXF1ZXN0cy5yZW1vdmVGaXJzdCgpOwotICAgIAotICAgIGlmICghbV9wbHVnaW5S
ZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgw
X3MpOwotICAgIAotICAgIHBlcmZvcm1SZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOwotfQotICAgIAot
TlBFcnJvciBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmxvYWRSZXF1ZXN0KE5TVVJMUmVx
dWVzdCAqcmVxdWVzdCwgY29uc3QgY2hhciogY1RhcmdldCwgYm9vbCBhbGxvd1BvcHVwcywgdWlu
dDMyX3QmIHJlcXVlc3RJRCkKLXsKLSAgICBOU1VSTCAqVVJMID0gW3JlcXVlc3QgVVJMXTsKLQot
ICAgIGlmICghVVJMKSAKLSAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfVVJMOwotCi0gICAg
Ly8gRG9uJ3QgYWxsb3cgcmVxdWVzdHMgdG8gYmUgbG9hZGVkIHdoZW4gdGhlIGRvY3VtZW50IGxv
YWRlciBpcyBzdG9wcGluZyBhbGwgbG9hZGVycy4KLSAgICBEb2N1bWVudExvYWRlciogZG9jdW1l
bnRMb2FkZXIgPSBbW21fcGx1Z2luVmlldyBkYXRhU291cmNlXSBfZG9jdW1lbnRMb2FkZXJdOwot
ICAgIGlmICghZG9jdW1lbnRMb2FkZXIgfHwgZG9jdW1lbnRMb2FkZXItPmlzU3RvcHBpbmcoKSkK
LSAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAgICBOU1N0cmluZyAqdGFy
Z2V0ID0gbmlsOwotICAgIGlmIChjVGFyZ2V0KSB7Ci0gICAgICAgIC8vIEZpbmQgdGhlIGZyYW1l
IGdpdmVuIHRoZSB0YXJnZXQgc3RyaW5nLgotICAgICAgICB0YXJnZXQgPSBbTlNTdHJpbmcgc3Ry
aW5nV2l0aENTdHJpbmc6Y1RhcmdldCBlbmNvZGluZzpOU0lTT0xhdGluMVN0cmluZ0VuY29kaW5n
XTsKLSAgICB9Ci0gICAgV2ViRnJhbWUgKmZyYW1lID0gW21fcGx1Z2luVmlldyB3ZWJGcmFtZV07
Ci0KLSAgICAvLyBkb24ndCBsZXQgYSBwbHVnaW4gc3RhcnQgYW55IGxvYWRzIGlmIGl0IGlzIG5v
IGxvbmdlciBwYXJ0IG9mIGEgZG9jdW1lbnQgdGhhdCBpcyBiZWluZyAKLSAgICAvLyBkaXNwbGF5
ZWQgdW5sZXNzIHRoZSBsb2FkcyBhcmUgaW4gdGhlIHNhbWUgZnJhbWUgYXMgdGhlIHBsdWdpbi4K
LSAgICBpZiAoZG9jdW1lbnRMb2FkZXIgIT0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSkt
PmxvYWRlcigpLmFjdGl2ZURvY3VtZW50TG9hZGVyKCkgJiYKLSAgICAgICAgKCFjVGFyZ2V0IHx8
IFtmcmFtZSBmaW5kRnJhbWVOYW1lZDp0YXJnZXRdICE9IGZyYW1lKSkgewotICAgICAgICByZXR1
cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsgCi0gICAgfQotICAgIAotICAgIE5TU3RyaW5nICpKU1N0
cmluZyA9IFtVUkwgX3dlYmtpdF9zY3JpcHRJZkphdmFTY3JpcHRVUkxdOwotICAgIGlmIChKU1N0
cmluZyAhPSBuaWwpIHsKLSAgICAgICAgaWYgKCFbW1ttX3BsdWdpblZpZXcgd2ViVmlld10gcHJl
ZmVyZW5jZXNdIGlzSmF2YVNjcmlwdEVuYWJsZWRdKSB7Ci0gICAgICAgICAgICAvLyBSZXR1cm4g
TlBFUlJfR0VORVJJQ19FUlJPUiBpZiBKUyBpcyBkaXNhYmxlZC4gVGhpcyBpcyB3aGF0IE1vemls
bGEgZG9lcy4KLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgICAg
ICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJh
bWVdKS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS5jYW5EaXNwbGF5KFVSTCkpCi0gICAg
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICB9Ci0gICAgCi0gICAgLy8g
RklYTUU6IEhhbmRsZSB3cmFwYXJvdW5kCi0gICAgcmVxdWVzdElEID0gKyttX2N1cnJlbnRVUkxS
ZXF1ZXN0SUQ7Ci0gICAgICAgIAotICAgIGlmIChjVGFyZ2V0IHx8IEpTU3RyaW5nKSB7Ci0gICAg
ICAgIC8vIE1ha2Ugd2hlbiB0YXJnZXRpbmcgYSBmcmFtZSBvciBldmFsdWF0aW5nIGEgSlMgc3Ry
aW5nLCBwZXJmb3JtIHRoZSByZXF1ZXN0IGFmdGVyIGEgZGVsYXkgYmVjYXVzZSB3ZSBkb24ndAot
ICAgICAgICAvLyB3YW50IHRvIHBvdGVudGlhbGx5IGtpbGwgdGhlIHBsdWctaW4gaW5zaWRlIG9m
IGl0cyBVUkwgcmVxdWVzdC4KLSAgICAgICAgCi0gICAgICAgIGlmIChKU1N0cmluZyAmJiB0YXJn
ZXQgJiYgW2ZyYW1lIGZpbmRGcmFtZU5hbWVkOnRhcmdldF0gIT0gZnJhbWUpIHsKLSAgICAgICAg
ICAgIC8vIEZvciBzZWN1cml0eSByZWFzb25zLCBvbmx5IGFsbG93IEpTIHJlcXVlc3RzIHRvIGJl
IG1hZGUgb24gdGhlIGZyYW1lIHRoYXQgY29udGFpbnMgdGhlIHBsdWctaW4uCi0gICAgICAgICAg
ICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8g
cGx1Z2luUmVxdWVzdCA9IFBsdWdpblJlcXVlc3Q6OmNyZWF0ZShyZXF1ZXN0SUQsIHJlcXVlc3Qs
IHRhcmdldCwgYWxsb3dQb3B1cHMpOwotICAgICAgICBtX3BsdWdpblJlcXVlc3RzLmFwcGVuZChX
VEZNb3ZlKHBsdWdpblJlcXVlc3QpKTsKLSAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVT
aG90KDBfcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byBzdHJlYW0gPSBIb3N0ZWROZXRz
Y2FwZVBsdWdpblN0cmVhbTo6Y3JlYXRlKHRoaXMsIHJlcXVlc3RJRCwgcmVxdWVzdCk7Ci0KLSAg
ICAgICAgQVNTRVJUKCFtX3N0cmVhbXMuY29udGFpbnMocmVxdWVzdElEKSk7Ci0gICAgICAgIG1f
c3RyZWFtcy5hZGQocmVxdWVzdElELCBzdHJlYW0uY29weVJlZigpKTsKLSAgICAgICAgc3RyZWFt
LT5zdGFydCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0K
LXN0ZDo6dW5pcXVlX3B0cjxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OlJlcGx5PiBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnByb2Nlc3NSZXF1ZXN0c0FuZFdhaXRGb3JSZXBseSh1
aW50MzJfdCByZXF1ZXN0SUQpCi17Ci0gICAgQVNTRVJUKG1fcGx1Z2luSG9zdFByb3h5KTsKLQot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXBseT4gcmVwbHk7Ci0KLSAgICB3aGlsZSAoIShyZXBseSA9
IG1fcmVwbGllcy50YWtlKHJlcXVlc3RJRCkpKSB7Ci0gICAgICAgIGlmICghbV9wbHVnaW5Ib3N0
UHJveHktPnByb2Nlc3NSZXF1ZXN0cygpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAgICAgLy8gVGhlIGhvc3QgcHJveHkgY2FuIGJlIGRlc3Ryb3llZCB3aGlsZSBleGVjdXRp
bmcgYSBuZXN0ZWQgcHJvY2Vzc1JlcXVlc3RzKCkgY2FsbCwgaW4gd2hpY2ggY2FzZSBpdCdzIG5v
cm1hbAotICAgICAgICAvLyB0byBnZXQgYSBzdWNjZXNzIHJlc3VsdCwgYnV0IGJlIHVuYWJsZSB0
byBrZWVwIGxvb3BpbmcuCi0gICAgICAgIGlmICghbV9wbHVnaW5Ib3N0UHJveHkpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVwbHk7Ci19Ci0KLS8v
IE5QUnVudGltZSBzdXBwb3J0Ci1ib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0
V2luZG93TlBPYmplY3QodWludDMyX3QmIG9iamVjdElEKQotewotICAgIEZyYW1lKiBmcmFtZSA9
IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwotICAgIGlmICghZnJhbWUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAoIWZyYW1lLT5zY3JpcHQoKS5jYW5FeGVjdXRl
U2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkpCi0gICAgICAgIG9iamVjdElEID0gMDsK
LSAgICBlbHNlCi0gICAgICAgIG9iamVjdElEID0gbV9sb2NhbE9iamVjdHMuaWRGb3JPYmplY3Qo
cGx1Z2luV29ybGQoKS52bSgpLCBmcmFtZS0+d2luZG93UHJveHkoKS5qc1dpbmRvd1Byb3h5KHBs
dWdpbldvcmxkKCkpLT53aW5kb3coKSk7Ci0gICAgICAgIAotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0UGx1Z2luRWxlbWVudE5QT2Jq
ZWN0KHVpbnQzMl90JiBvYmplY3RJRCkKLXsKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3Bs
dWdpblZpZXcgd2ViRnJhbWVdKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCi0gICAgaWYgKEpTT2JqZWN0KiBvYmplY3QgPSBmcmFtZS0+c2NyaXB0KCkuanNP
YmplY3RGb3JQbHVnaW5FbGVtZW50KFttX3BsdWdpblZpZXcgZWxlbWVudF0pKQotICAgICAgICBv
YmplY3RJRCA9IG1fbG9jYWxPYmplY3RzLmlkRm9yT2JqZWN0KHBsdWdpbldvcmxkKCkudm0oKSwg
b2JqZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIG9iamVjdElEID0gMDsKLSAgICAKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmZvcmdldEJy
b3dzZXJPYmplY3RJRCh1aW50MzJfdCBvYmplY3RJRCkKLXsKLSAgICByZXR1cm4gbV9sb2NhbE9i
amVjdHMuZm9yZ2V0KG9iamVjdElEKTsKLX0KLSAKLWJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5OjpldmFsdWF0ZSh1aW50MzJfdCBvYmplY3RJRCwgY29uc3QgU3RyaW5nJiBzY3JpcHQs
IGRhdGFfdCYgcmVzdWx0RGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCYgcmVzdWx0TGVuZ3Ro
LCBib29sIGFsbG93UG9wdXBzKQotewotICAgIHJlc3VsdERhdGEgPSBudWxscHRyOwotICAgIHJl
c3VsdExlbmd0aCA9IDA7Ci0KLSAgICBpZiAobV9pbkRlc3Ryb3kpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmICghbV9sb2NhbE9iamVjdHMuY29udGFpbnMob2JqZWN0SUQpKSB7Ci0g
ICAgICAgIExPR19FUlJPUigiTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpldmFsdWF0ZTog
bG9jYWwgb2JqZWN0ICV1IGRvZXNuJ3QgZXhpc3QuIiwgb2JqZWN0SUQpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3
IHdlYkZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKHZt
KTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0KLSAgICBTdHJv
bmc8SlNHbG9iYWxPYmplY3Q+IGdsb2JhbE9iamVjdCh2bSwgZnJhbWUtPnNjcmlwdCgpLmdsb2Jh
bE9iamVjdChwbHVnaW5Xb3JsZCgpKSk7Ci0KLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0
dXJlSW5kaWNhdG9yKGFsbG93UG9wdXBzID8gc3RkOjpvcHRpb25hbDxQcm9jZXNzaW5nVXNlckdl
c3R1cmVTdGF0ZT4oUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKSA6IHN0ZDo6bnVsbG9wdCk7Ci0gICAg
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OmV2YWx1YXRlKGdsb2JhbE9iamVjdC5nZXQoKSwg
SlNDOjptYWtlU291cmNlKHNjcmlwdCwgeyB9KSk7Ci0gICAgCi0gICAgbWFyc2hhbFZhbHVlKGds
b2JhbE9iamVjdC5nZXQoKSwgcmVzdWx0LCByZXN1bHREYXRhLCByZXN1bHRMZW5ndGgpOwotICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2UodWludDMyX3Qgb2JqZWN0SUQsIGNvbnN0
IElkZW50aWZpZXImIG1ldGhvZE5hbWUsIGRhdGFfdCBhcmd1bWVudHNEYXRhLCBtYWNoX21zZ190
eXBlX251bWJlcl90IGFyZ3VtZW50c0xlbmd0aCwgZGF0YV90JiByZXN1bHREYXRhLCBtYWNoX21z
Z190eXBlX251bWJlcl90JiByZXN1bHRMZW5ndGgpCi17Ci0gICAgcmVzdWx0RGF0YSA9IG51bGxw
dHI7Ci0gICAgcmVzdWx0TGVuZ3RoID0gMDsKLSAgICAKLSAgICBpZiAobV9pbkRlc3Ryb3kpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBKU09iamVjdCogb2JqZWN0ID0gbV9sb2Nh
bE9iamVjdHMuZ2V0KG9iamVjdElEKTsKLSAgICBpZiAoIW9iamVjdCkgewotICAgICAgICBMT0df
RVJST1IoIk5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52b2tlOiBsb2NhbCBvYmplY3Qg
JXUgZG9lc24ndCBleGlzdC4iLCBvYmplY3RJRCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1l
XSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVk0mIHZt
ID0gcGx1Z2luV29ybGQoKS52bSgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0KLSAgICBKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1
Z2luV29ybGQoKSk7Ci0gICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iamVjdC0+Z2V0KGxleGljYWxH
bG9iYWxPYmplY3QsIG1ldGhvZE5hbWUpOwotICAgIGF1dG8gY2FsbERhdGEgPSBnZXRDYWxsRGF0
YSh2bSwgZnVuY3Rpb24pOwotICAgIGlmIChjYWxsRGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBl
OjpOb25lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBhcmdMaXN0OwotICAgIGRlbWFyc2hhbFZhbHVlcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1
bWVudHNEYXRhLCBhcmd1bWVudHNMZW5ndGgsIGFyZ0xpc3QpOwotICAgIFJFTEVBU0VfQVNTRVJU
KCFhcmdMaXN0Lmhhc092ZXJmbG93ZWQoKSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbChs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwgY2FsbERhdGEsIG9iamVjdCwgYXJnTGlzdCk7
Ci0gICAgICAgIAotICAgIG1hcnNoYWxWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwg
cmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLSAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6
aW52b2tlRGVmYXVsdCh1aW50MzJfdCBvYmplY3RJRCwgZGF0YV90IGFyZ3VtZW50c0RhdGEsIG1h
Y2hfbXNnX3R5cGVfbnVtYmVyX3QgYXJndW1lbnRzTGVuZ3RoLCBkYXRhX3QmIHJlc3VsdERhdGEs
IG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QmIHJlc3VsdExlbmd0aCkKLXsKLSAgICBpZiAobV9pbkRl
c3Ryb3kpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBt
X2xvY2FsT2JqZWN0cy5nZXQob2JqZWN0SUQpOwotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAg
IExPR19FUlJPUigiTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2VEZWZhdWx0OiBs
b2NhbCBvYmplY3QgJXUgZG9lc24ndCBleGlzdC4iLCBvYmplY3RJRCk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5W
aWV3IHdlYkZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOwotICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0KLSAgICBK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGZyYW1lLT5zY3JpcHQoKS5nbG9i
YWxPYmplY3QocGx1Z2luV29ybGQoKSk7Ci0gICAgYXV0byBjYWxsRGF0YSA9IGdldENhbGxEYXRh
KHZtLCBvYmplY3QpOwotICAgIGlmIChjYWxsRGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpO
b25lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBh
cmdMaXN0OwotICAgIGRlbWFyc2hhbFZhbHVlcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dHNEYXRhLCBhcmd1bWVudHNMZW5ndGgsIGFyZ0xpc3QpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFh
cmdMaXN0Lmhhc092ZXJmbG93ZWQoKSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBvYmplY3QsIGNhbGxEYXRhLCBvYmplY3QsIGFyZ0xpc3QpOwotICAg
IAotICAgIG1hcnNoYWxWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgcmVzdWx0RGF0
YSwgcmVzdWx0TGVuZ3RoKTsKLSAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y29uc3RydWN0
KHVpbnQzMl90IG9iamVjdElELCBkYXRhX3QgYXJndW1lbnRzRGF0YSwgbWFjaF9tc2dfdHlwZV9u
dW1iZXJfdCBhcmd1bWVudHNMZW5ndGgsIGRhdGFfdCYgcmVzdWx0RGF0YSwgbWFjaF9tc2dfdHlw
ZV9udW1iZXJfdCYgcmVzdWx0TGVuZ3RoKQotewotICAgIGlmIChtX2luRGVzdHJveSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNPYmplY3QqIG9iamVjdCA9IG1fbG9jYWxPYmplY3Rz
LmdldChvYmplY3RJRCk7Ci0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmNvbnN0cnVjdDogbG9jYWwgb2JqZWN0ICV1IGRv
ZXNuJ3QgZXhpc3QuIiwgb2JqZWN0SUQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIAotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwot
ICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZNJiB2bSA9IHBs
dWdpbldvcmxkKCkudm0oKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldv
cmxkKCkpOwotCi0gICAgYXV0byBjb25zdHJ1Y3REYXRhID0gZ2V0Q29uc3RydWN0RGF0YSh2bSwg
b2JqZWN0KTsKLSAgICBpZiAoY29uc3RydWN0RGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpO
b25lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBh
cmdMaXN0OwotICAgIGRlbWFyc2hhbFZhbHVlcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dHNEYXRhLCBhcmd1bWVudHNMZW5ndGgsIGFyZ0xpc3QpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFh
cmdMaXN0Lmhhc092ZXJmbG93ZWQoKSk7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNDOjpjb25z
dHJ1Y3QobGV4aWNhbEdsb2JhbE9iamVjdCwgb2JqZWN0LCBjb25zdHJ1Y3REYXRhLCBhcmdMaXN0
KTsKLSAgICAKLSAgICBtYXJzaGFsVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIHJl
c3VsdERhdGEsIHJlc3VsdExlbmd0aCk7Ci0gICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omdl
dFByb3BlcnR5KHVpbnQzMl90IG9iamVjdElELCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGRhdGFfdCYgcmVzdWx0RGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCYgcmVzdWx0TGVu
Z3RoKQotewotICAgIGlmIChtX2luRGVzdHJveSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgSlNPYmplY3QqIG9iamVjdCA9IG1fbG9jYWxPYmplY3RzLmdldChvYmplY3RJRCk7Ci0gICAg
aWYgKCFvYmplY3QpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6OmdldFByb3BlcnR5OiBsb2NhbCBvYmplY3QgJXUgZG9lc24ndCBleGlzdC4iLCBvYmpl
Y3RJRCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgRnJhbWUqIGZy
YW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOwot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRD
SF9TQ09QRSh2bSk7Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9
IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSk7Ci0gICAgSlNWYWx1
ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7
Ci0gICAgCi0gICAgbWFyc2hhbFZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCByZXN1
bHREYXRhLCByZXN1bHRMZW5ndGgpOwotICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0gICAgCi1ib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6
Z2V0UHJvcGVydHkodWludDMyX3Qgb2JqZWN0SUQsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgZGF0
YV90JiByZXN1bHREYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90JiByZXN1bHRMZW5ndGgpCi17
Ci0gICAgSlNPYmplY3QqIG9iamVjdCA9IG1fbG9jYWxPYmplY3RzLmdldChvYmplY3RJRCk7Ci0g
ICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHk6OmdldFByb3BlcnR5OiBsb2NhbCBvYmplY3QgJXUgZG9lc24ndCBleGlzdC4iLCBv
YmplY3RJRCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgRnJhbWUq
IGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgp
OwotICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSk7Ci0gICAgSlNW
YWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSk7Ci0gICAgCi0gICAgbWFyc2hhbFZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBy
ZXN1bHREYXRhLCByZXN1bHRMZW5ndGgpOwotICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpz
ZXRQcm9wZXJ0eSh1aW50MzJfdCBvYmplY3RJRCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBkYXRhX3QgdmFsdWVEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90IHZhbHVlTGVuZ3Ro
KQotewotICAgIGlmIChtX2luRGVzdHJveSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
SlNPYmplY3QqIG9iamVjdCA9IG1fbG9jYWxPYmplY3RzLmdldChvYmplY3RJRCk7Ci0gICAgaWYg
KCFvYmplY3QpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk6OnNldFByb3BlcnR5OiBsb2NhbCBvYmplY3QgJXUgZG9lc24ndCBleGlzdC4iLCBvYmplY3RJ
RCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1l
ID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOwotICAg
IEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGZy
YW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSk7Ci0KLSAgICBKU1ZhbHVl
IHZhbHVlID0gZGVtYXJzaGFsVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWVEYXRhLCB2
YWx1ZUxlbmd0aCk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0KTsKLSAgICBvYmpl
Y3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Ci0gICAgCi0gICAgc2NvcGUuY2xlYXJFeGNlcHRpb24o
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk6OnNldFByb3BlcnR5KHVpbnQzMl90IG9iamVjdElELCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IGRhdGFfdCB2YWx1ZURhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgdmFsdWVMZW5ndGgpCi17
Ci0gICAgaWYgKG1faW5EZXN0cm95KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBKU09i
amVjdCogb2JqZWN0ID0gbV9sb2NhbE9iamVjdHMuZ2V0KG9iamVjdElEKTsKLSAgICBpZiAoIW9i
amVjdCkgewotICAgICAgICBMT0dfRVJST1IoIk5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6
c2V0UHJvcGVydHk6IGxvY2FsIG9iamVjdCAldSBkb2Vzbid0IGV4aXN0LiIsIG9iamVjdElEKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBGcmFtZSogZnJhbWUgPSBj
b3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7Ci0gICAgSlNM
b2NrSG9sZGVyIGxvY2sodm0pOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKLQotICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZnJhbWUt
PnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKTsKLSAgICAKLSAgICBKU1ZhbHVl
IHZhbHVlID0gZGVtYXJzaGFsVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWVEYXRhLCB2
YWx1ZUxlbmd0aCk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgob2Jq
ZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBmYWxzZSk7Ci0g
ICAgCi0gICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJlbW92ZVByb3BlcnR5KHVpbnQzMl90
IG9iamVjdElELCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaWYgKG1f
aW5EZXN0cm95KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBKU09iamVjdCogb2JqZWN0
ID0gbV9sb2NhbE9iamVjdHMuZ2V0KG9iamVjdElEKTsKLSAgICBpZiAoIW9iamVjdCkgewotICAg
ICAgICBMT0dfRVJST1IoIk5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6cmVtb3ZlUHJvcGVy
dHk6IGxvY2FsIG9iamVjdCAldSBkb2Vzbid0IGV4aXN0LiIsIG9iamVjdElEKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3Bs
dWdpblZpZXcgd2ViRnJhbWVdKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7Ci0gICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0pOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQot
ICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZnJhbWUtPnNjcmlwdCgp
Lmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKTsKLSAgICBpZiAoIW9iamVjdC0+aGFzUHJvcGVy
dHkobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSkgewotICAgICAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgSlND
ZWxsOjpkZWxldGVQcm9wZXJ0eShvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSk7Ci0gICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LSAgICAKLWJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZW1vdmVQcm9wZXJ0eSh1
aW50MzJfdCBvYmplY3RJRCwgdW5zaWduZWQgcHJvcGVydHlOYW1lKQotewotICAgIGlmIChtX2lu
RGVzdHJveSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNPYmplY3QqIG9iamVjdCA9
IG1fbG9jYWxPYmplY3RzLmdldChvYmplY3RJRCk7Ci0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJlbW92ZVByb3BlcnR5
OiBsb2NhbCBvYmplY3QgJXUgZG9lc24ndCBleGlzdC4iLCBvYmplY3RJRCk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVn
aW5WaWV3IHdlYkZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOwotICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0KLSAg
ICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGZyYW1lLT5zY3JpcHQoKS5n
bG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSk7Ci0gICAgaWYgKCFvYmplY3QtPmhhc1Byb3BlcnR5
KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBv
YmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KG9iamVjdCwgbGV4
aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKLSAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6aGFzUHJvcGVydHkodWludDMyX3Qgb2JqZWN0SUQsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSkKLXsKLSAgICBpZiAobV9pbkRlc3Ryb3kpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBtX2xvY2FsT2JqZWN0cy5nZXQob2JqZWN0SUQp
OwotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIExPR19FUlJPUigiTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjpoYXNQcm9wZXJ0eTogbG9jYWwgb2JqZWN0ICV1IGRvZXNuJ3QgZXhpc3Qu
Iiwgb2JqZWN0SUQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIEZy
YW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwotICAgIGlmICghZnJh
bWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCku
dm0oKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpOwotICAg
IGJvb2wgcmVzdWx0ID0gb2JqZWN0LT5oYXNQcm9wZXJ0eShsZXhpY2FsR2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUpOwotICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1ib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aGFzUHJvcGVy
dHkodWludDMyX3Qgb2JqZWN0SUQsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKLXsKLSAgICBpZiAo
bV9pbkRlc3Ryb3kpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBtX2xvY2FsT2JqZWN0cy5nZXQob2JqZWN0SUQpOwotICAgIGlmICghb2JqZWN0KSB7Ci0g
ICAgICAgIExPR19FUlJPUigiTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpoYXNQcm9wZXJ0
eTogbG9jYWwgb2JqZWN0ICV1IGRvZXNuJ3QgZXhpc3QuIiwgb2JqZWN0SUQpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1
Z2luVmlldyB3ZWJGcmFtZV0pOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKLSAgICBKU0xvY2tIb2xkZXIg
bG9jayh2bSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0g
ICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBmcmFtZS0+c2NyaXB0KCku
Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpOwotICAgIGJvb2wgcmVzdWx0ID0gb2JqZWN0LT5o
YXNQcm9wZXJ0eShsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwotICAgIHNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotICAgIAotYm9vbCBO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omhhc01ldGhvZCh1aW50MzJfdCBvYmplY3RJRCwg
Y29uc3QgSWRlbnRpZmllciYgbWV0aG9kTmFtZSkKLXsKLSAgICBpZiAobV9pbkRlc3Ryb3kpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBtX2xvY2FsT2Jq
ZWN0cy5nZXQob2JqZWN0SUQpOwotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIExPR19FUlJP
UigiTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpoYXNNZXRob2Q6IGxvY2FsIG9iamVjdCAl
dSBkb2Vzbid0IGV4aXN0LiIsIG9iamVjdElEKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwot
ICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZNJiB2bSA9IHBs
dWdpbldvcmxkKCkudm0oKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldv
cmxkKCkpOwotICAgIEpTVmFsdWUgZnVuYyA9IG9iamVjdC0+Z2V0KGxleGljYWxHbG9iYWxPYmpl
Y3QsIG1ldGhvZE5hbWUpOwotICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJu
ICFmdW5jLmlzVW5kZWZpbmVkKCk7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjplbnVtZXJhdGUodWludDMyX3Qgb2JqZWN0SUQsIGRhdGFfdCYgcmVzdWx0RGF0YSwgbWFj
aF9tc2dfdHlwZV9udW1iZXJfdCYgcmVzdWx0TGVuZ3RoKQotewotICAgIGlmIChtX2luRGVzdHJv
eSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNPYmplY3QqIG9iamVjdCA9IG1fbG9j
YWxPYmplY3RzLmdldChvYmplY3RJRCk7Ci0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmVudW1lcmF0ZTogbG9jYWwgb2Jq
ZWN0ICV1IGRvZXNuJ3QgZXhpc3QuIiwgb2JqZWN0SUQpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIAotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJG
cmFtZV0pOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZN
JiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0g
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0
KHBsdWdpbldvcmxkKCkpOwotIAotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMo
dm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRl
KTsKLSAgICBvYmplY3QtPmdldFByb3BlcnR5TmFtZXMobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7Ci0KLSAgICBSZXRh
aW5QdHI8TlNNdXRhYmxlQXJyYXk+IGFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0XSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnR5TmFtZXMu
c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgdWludDY0X3QgbWV0aG9kTmFtZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDY0X3Q+KF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcihwcm9wZXJ0eU5hbWVzW2ld
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKLQotICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2Jq
ZWN0OltOU051bWJlciBudW1iZXJXaXRoTG9uZ0xvbmc6bWV0aG9kTmFtZV1dOwotICAgIH0KLQot
ICAgIE5TRGF0YSAqZGF0YSA9IFtOU1Byb3BlcnR5TGlzdFNlcmlhbGl6YXRpb24gZGF0YVdpdGhQ
cm9wZXJ0eUxpc3Q6YXJyYXkuZ2V0KCkgZm9ybWF0Ok5TUHJvcGVydHlMaXN0QmluYXJ5Rm9ybWF0
X3YxXzAgb3B0aW9uczowIGVycm9yOm51bGxwdHJdOwotICAgIEFTU0VSVChkYXRhKTsKLQotICAg
IHJlc3VsdExlbmd0aCA9IFtkYXRhIGxlbmd0aF07Ci0gICAgbWlnX2FsbG9jYXRlKHJlaW50ZXJw
cmV0X2Nhc3Q8dm1fYWRkcmVzc190Kj4oJnJlc3VsdERhdGEpLCByZXN1bHRMZW5ndGgpOwotCi0g
ICAgbWVtY3B5KHJlc3VsdERhdGEsIFtkYXRhIGJ5dGVzXSwgcmVzdWx0TGVuZ3RoKTsKLQotICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGlj
IGJvb2wgZ2V0T2JqZWN0SUQoTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiBwbHVnaW5JbnN0
YW5jZVByb3h5LCBKU09iamVjdCogb2JqZWN0LCB1aW50NjRfdCYgb2JqZWN0SUQpCi17Ci0gICAg
SlNDOjpWTSYgdm0gPSBvYmplY3QtPnZtKCk7Ci0gICAgaWYgKG9iamVjdC0+Y2xhc3NJbmZvKHZt
KSAhPSBQcm94eVJ1bnRpbWVPYmplY3Q6OmluZm8oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgUHJveHlSdW50aW1lT2JqZWN0KiBydW50aW1lT2JqZWN0ID0gc3RhdGljX2Nhc3Q8UHJv
eHlSdW50aW1lT2JqZWN0Kj4ob2JqZWN0KTsKLSAgICBQcm94eUluc3RhbmNlKiBpbnN0YW5jZSA9
IHJ1bnRpbWVPYmplY3QtPmdldEludGVybmFsUHJveHlJbnN0YW5jZSgpOwotICAgIGlmICghaW5z
dGFuY2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChpbnN0YW5jZS0+aW5zdGFu
Y2VQcm94eSgpICE9IHBsdWdpbkluc3RhbmNlUHJveHkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIG9iamVjdElEID0gaW5zdGFuY2UtPm9iamVjdElEKCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0gICAgCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6YWRkVmFsdWVUb0Fy
cmF5KE5TTXV0YWJsZUFycmF5ICphcnJheSwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0KLSAgICBpZiAodmFsdWUuaXNT
dHJpbmcoKSkgewotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OkAoU3RyaW5nVmFsdWVUeXBlKV07
Ci0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6YXNTdHJpbmcodmFsdWUpLT52YWx1ZShsZXhpY2Fs
R2xvYmFsT2JqZWN0KV07Ci0gICAgfSBlbHNlIGlmICh2YWx1ZS5pc051bWJlcigpKSB7Ci0gICAg
ICAgIFthcnJheSBhZGRPYmplY3Q6QChEb3VibGVWYWx1ZVR5cGUpXTsKLSAgICAgICAgW2FycmF5
IGFkZE9iamVjdDpAKHZhbHVlLnRvTnVtYmVyKGxleGljYWxHbG9iYWxPYmplY3QpKV07Ci0gICAg
fSBlbHNlIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkgewotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0
OkAoQm9vbFZhbHVlVHlwZSldOwotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBu
dW1iZXJXaXRoQm9vbDp2YWx1ZS50b0Jvb2xlYW4obGV4aWNhbEdsb2JhbE9iamVjdCldXTsKLSAg
ICB9IGVsc2UgaWYgKHZhbHVlLmlzTnVsbCgpKQotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OkAo
TnVsbFZhbHVlVHlwZSldOwotICAgIGVsc2UgaWYgKHZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgdWludDY0X3Qg
b2JqZWN0SUQ7Ci0gICAgICAgIGlmIChnZXRPYmplY3RJRCh0aGlzLCBvYmplY3QsIG9iamVjdElE
KSkgewotICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpAKE5QT2JqZWN0VmFsdWVUeXBlKV07
Ci0gICAgICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OkAob2JqZWN0SUQpXTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6QChKU09iamVjdFZhbHVlVHlwZSld
OwotICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpAKG1fbG9jYWxPYmplY3RzLmlkRm9yT2Jq
ZWN0KHZtLCBvYmplY3QpKV07Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgW2FycmF5
IGFkZE9iamVjdDpAKFZvaWRWYWx1ZVR5cGUpXTsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6Om1hcnNoYWxWYWx1ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgZGF0YV90JiByZXN1bHREYXRhLCBtYWNoX21zZ190eXBlX251
bWJlcl90JiByZXN1bHRMZW5ndGgpCi17Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBh
cnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwotICAgIAotICAg
IGFkZFZhbHVlVG9BcnJheShhcnJheS5nZXQoKSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUp
OwotCi0gICAgTlNEYXRhICpkYXRhID0gW05TUHJvcGVydHlMaXN0U2VyaWFsaXphdGlvbiBkYXRh
V2l0aFByb3BlcnR5TGlzdDphcnJheS5nZXQoKSBmb3JtYXQ6TlNQcm9wZXJ0eUxpc3RCaW5hcnlG
b3JtYXRfdjFfMCBvcHRpb25zOjAgZXJyb3I6bnVsbHB0cl07Ci0gICAgQVNTRVJUKGRhdGEpOwot
ICAgIAotICAgIHJlc3VsdExlbmd0aCA9IGRhdGEubGVuZ3RoOwotICAgIG1pZ19hbGxvY2F0ZShy
ZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdCo+KCZyZXN1bHREYXRhKSwgcmVzdWx0TGVuZ3Ro
KTsKLSAgICAKLSAgICBtZW1jcHkocmVzdWx0RGF0YSwgZGF0YS5ieXRlcywgcmVzdWx0TGVuZ3Ro
KTsKLX0KLQotUmV0YWluUHRyPE5TRGF0YT4gTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpt
YXJzaGFsVmFsdWVzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBB
cmdMaXN0JiBhcmdzKQotewotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gYXJyYXkgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLQotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgaSsrKQotICAgICAgICBhZGRWYWx1ZVRvQXJyYXko
YXJyYXkuZ2V0KCksIGxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3MuYXQoaSkpOwotCi0gICAgTlNE
YXRhICpkYXRhID0gW05TUHJvcGVydHlMaXN0U2VyaWFsaXphdGlvbiBkYXRhV2l0aFByb3BlcnR5
TGlzdDphcnJheS5nZXQoKSBmb3JtYXQ6TlNQcm9wZXJ0eUxpc3RCaW5hcnlGb3JtYXRfdjFfMCBv
cHRpb25zOjAgZXJyb3I6bnVsbHB0cl07Ci0gICAgQVNTRVJUKGRhdGEpOwotCi0gICAgcmV0dXJu
IGRhdGE7Ci19ICAgIAotCi1ib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZGVtYXJz
aGFsVmFsdWVGcm9tQXJyYXkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIE5T
QXJyYXkgKmFycmF5LCBOU1VJbnRlZ2VyJiBpbmRleCwgSlNWYWx1ZSYgcmVzdWx0KQotewotICAg
IGlmIChpbmRleCA9PSBbYXJyYXkgY291bnRdKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgICAKLSAgICBpbnQgdHlwZSA9IFtbYXJyYXkgb2JqZWN0QXRJbmRleDppbmRl
eCsrXSBpbnRWYWx1ZV07Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgVm9pZFZh
bHVlVHlwZToKLSAgICAgICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBOdWxsVmFsdWVUeXBlOgotICAgICAgICAgICAg
cmVzdWx0ID0ganNOdWxsKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2Fz
ZSBCb29sVmFsdWVUeXBlOgotICAgICAgICAgICAgcmVzdWx0ID0ganNCb29sZWFuKFtbYXJyYXkg
b2JqZWN0QXRJbmRleDppbmRleCsrXSBib29sVmFsdWVdKTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICBjYXNlIERvdWJsZVZhbHVlVHlwZToKLSAgICAgICAgICAgIHJlc3VsdCA9
IGpzTnVtYmVyKFtbYXJyYXkgb2JqZWN0QXRJbmRleDppbmRleCsrXSBkb3VibGVWYWx1ZV0pOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgU3RyaW5nVmFsdWVUeXBlOiB7
Ci0gICAgICAgICAgICBOU1N0cmluZyAqc3RyaW5nID0gW2FycmF5IG9iamVjdEF0SW5kZXg6aW5k
ZXgrK107Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc3VsdCA9IGpzU3RyaW5nKGxleGlj
YWxHbG9iYWxPYmplY3QtPnZtKCksIFN0cmluZyhzdHJpbmcpKTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgSlNPYmplY3RWYWx1ZVR5cGU6IHsKLSAg
ICAgICAgICAgIHVpbnQzMl90IG9iamVjdElEID0gW1thcnJheSBvYmplY3RBdEluZGV4OmluZGV4
KytdIGludFZhbHVlXTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmVzdWx0ID0gbV9sb2Nh
bE9iamVjdHMuZ2V0KG9iamVjdElEKTsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQpOwotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBOUE9iamVjdFZh
bHVlVHlwZTogewotICAgICAgICAgICAgdWludDMyX3Qgb2JqZWN0SUQgPSBbW2FycmF5IG9iamVj
dEF0SW5kZXg6aW5kZXgrK10gaW50VmFsdWVdOwotCi0gICAgICAgICAgICBGcmFtZSogZnJhbWUg
PSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKLSAgICAgICAgICAgIGlmICghZnJhbWUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoIWZyYW1lLT5zY3JpcHQoKS5jYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0
ZVNjcmlwdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBh
dXRvIHJvb3RPYmplY3QgPSBmcmFtZS0+c2NyaXB0KCkuY3JlYXRlUm9vdE9iamVjdCgoX19icmlk
Z2Ugdm9pZCopbV9wbHVnaW5WaWV3KTsKLSAgICAgICAgICAgIHJlc3VsdCA9IFByb3h5SW5zdGFu
Y2U6OmNyZWF0ZShXVEZNb3ZlKHJvb3RPYmplY3QpLCB0aGlzLCBvYmplY3RJRCktPmNyZWF0ZVJ1
bnRpbWVPYmplY3QobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1KU1ZhbHVl
IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZGVtYXJzaGFsVmFsdWUoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IGNoYXIqIHZhbHVlRGF0YSwgbWFjaF9tc2df
dHlwZV9udW1iZXJfdCB2YWx1ZUxlbmd0aCkKLXsKLSAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRh
ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlc05vQ29weToodm9pZCopdmFs
dWVEYXRhIGxlbmd0aDp2YWx1ZUxlbmd0aCBmcmVlV2hlbkRvbmU6Tk9dKTsKLQotICAgIE5TQXJy
YXkgKmFycmF5ID0gW05TUHJvcGVydHlMaXN0U2VyaWFsaXphdGlvbiBwcm9wZXJ0eUxpc3RXaXRo
RGF0YTpkYXRhLmdldCgpIG9wdGlvbnM6TlNQcm9wZXJ0eUxpc3RJbW11dGFibGUgZm9ybWF0Om51
bGxwdHIgZXJyb3I6bnVsbHB0cl07Ci0KLSAgICBOU1VJbnRlZ2VyIHBvc2l0aW9uID0gMDsKLSAg
ICBKU1ZhbHVlIHZhbHVlOwotICAgIGJvb2wgcmVzdWx0ID0gZGVtYXJzaGFsVmFsdWVGcm9tQXJy
YXkobGV4aWNhbEdsb2JhbE9iamVjdCwgYXJyYXksIHBvc2l0aW9uLCB2YWx1ZSk7Ci0gICAgQVNT
RVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXZv
aWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpkZW1hcnNoYWxWYWx1ZXMoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIGRhdGFfdCB2YWx1ZXNEYXRhLCBtYWNoX21zZ190
eXBlX251bWJlcl90IHZhbHVlc0xlbmd0aCwgTWFya2VkQXJndW1lbnRCdWZmZXJCYXNlJiByZXN1
bHQpCi17Ci0gICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxs
b2NdIGluaXRXaXRoQnl0ZXNOb0NvcHk6dmFsdWVzRGF0YSBsZW5ndGg6dmFsdWVzTGVuZ3RoIGZy
ZWVXaGVuRG9uZTpOT10pOwotCi0gICAgTlNBcnJheSAqYXJyYXkgPSBbTlNQcm9wZXJ0eUxpc3RT
ZXJpYWxpemF0aW9uIHByb3BlcnR5TGlzdFdpdGhEYXRhOmRhdGEuZ2V0KCkgb3B0aW9uczpOU1By
b3BlcnR5TGlzdEltbXV0YWJsZSBmb3JtYXQ6bnVsbHB0ciBlcnJvcjpudWxscHRyXTsKLQotICAg
IE5TVUludGVnZXIgcG9zaXRpb24gPSAwOwotICAgIEpTVmFsdWUgdmFsdWU7Ci0gICAgd2hpbGUg
KGRlbWFyc2hhbFZhbHVlRnJvbUFycmF5KGxleGljYWxHbG9iYWxPYmplY3QsIGFycmF5LCBwb3Np
dGlvbiwgdmFsdWUpKQotICAgICAgICByZXN1bHQuYXBwZW5kKHZhbHVlKTsKLX0KLQotdm9pZCBO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJldGFpbkxvY2FsT2JqZWN0KEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLXsKLSAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkgfHwgdmFsdWUuaW5oZXJpdHM8
UHJveHlSdW50aW1lT2JqZWN0Pih2YWx1ZS5nZXRPYmplY3QoKS0+dm0oKSkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fbG9jYWxPYmplY3RzLnJldGFpbihhc09iamVjdCh2YWx1ZSkpOwotfQot
Ci12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6cmVsZWFzZUxvY2FsT2JqZWN0KEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkgfHwgdmFsdWUu
aW5oZXJpdHM8UHJveHlSdW50aW1lT2JqZWN0Pih2YWx1ZS5nZXRPYmplY3QoKS0+dm0oKSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fbG9jYWxPYmplY3RzLnJlbGVhc2UoYXNPYmplY3QodmFs
dWUpKTsKLX0KLQotUmVmUHRyPEluc3RhbmNlPiBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OmNyZWF0ZUJpbmRpbmdzSW5zdGFuY2UoUmVmPFJvb3RPYmplY3Q+JiYgcm9vdE9iamVjdCkKLXsK
LSAgICB1aW50MzJfdCByZXF1ZXN0SUQgPSBuZXh0UmVxdWVzdElEKCk7Ci0gICAgCi0gICAgaWYg
KF9XS1BIR2V0U2NyaXB0YWJsZU5QT2JqZWN0KG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0KCksIG1f
cGx1Z2luSUQsIHJlcXVlc3RJRCkgIT0gS0VSTl9TVUNDRVNTKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIGF1dG8gcmVwbHkgPSB3YWl0Rm9yUmVwbHk8R2V0U2NyaXB0YWJsZU5QT2Jq
ZWN0UmVwbHk+KHJlcXVlc3RJRCk7Ci0gICAgaWYgKCFyZXBseSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBpZiAoIXJlcGx5LT5tX29iamVjdElEKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIC8vIFNpbmNlIHRoZSByZXBseSB3YXMgbm9uLW51bGwsICJ0aGlzIiBpcyBz
dGlsbCBhIHZhbGlkIHBvaW50ZXIuCi0gICAgcmV0dXJuIFByb3h5SW5zdGFuY2U6OmNyZWF0ZShX
VEZNb3ZlKHJvb3RPYmplY3QpLCB0aGlzLCByZXBseS0+bV9vYmplY3RJRCk7Ci19Ci0KLXZvaWQg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjphZGRJbnN0YW5jZShQcm94eUluc3RhbmNlKiBp
bnN0YW5jZSkKLXsKLSAgICBBU1NFUlQoIW1faW5zdGFuY2VzLmNvbnRhaW5zKGluc3RhbmNlKSk7
Ci0gICAgCi0gICAgbV9pbnN0YW5jZXMuYWRkKGluc3RhbmNlKTsKLX0KLSAgICAKLXZvaWQgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZW1vdmVJbnN0YW5jZShQcm94eUluc3RhbmNlKiBp
bnN0YW5jZSkKLXsKLSAgICBBU1NFUlQobV9pbnN0YW5jZXMuY29udGFpbnMoaW5zdGFuY2UpKTsK
LSAgICAKLSAgICBtX2luc3RhbmNlcy5yZW1vdmUoaW5zdGFuY2UpOwotfQotIAotdm9pZCBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OndpbGxDYWxsUGx1Z2luRnVuY3Rpb24oKQotewotICAg
IG1fcGx1Z2luRnVuY3Rpb25DYWxsRGVwdGgrKzsKLX0KLSAgICAKLXZvaWQgTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5OjpkaWRDYWxsUGx1Z2luRnVuY3Rpb24oYm9vbCYgc3RvcHBlZCkKLXsK
LSAgICBBU1NFUlQobV9wbHVnaW5GdW5jdGlvbkNhbGxEZXB0aCA+IDApOwotICAgIG1fcGx1Z2lu
RnVuY3Rpb25DYWxsRGVwdGgtLTsKLSAgICAKLSAgICAvLyBJZiAtc3RvcCB3YXMgY2FsbGVkIHdo
aWxlIHdlIHdlcmUgY2FsbGluZyBpbnRvIGEgcGx1Zy1pbiBmdW5jdGlvbiwgYW5kIHdlJ3JlIG5v
IGxvbmdlcgotICAgIC8vIGluc2lkZSBhIHBsdWctaW4gZnVuY3Rpb24sIHN0b3Agbm93LgotICAg
IGlmICghbV9wbHVnaW5GdW5jdGlvbkNhbGxEZXB0aCAmJiBtX3Nob3VsZFN0b3BTb29uKSB7Ci0g
ICAgICAgIG1fc2hvdWxkU3RvcFNvb24gPSBmYWxzZTsKLSAgICAgICAgW21fcGx1Z2luVmlldyBz
dG9wXTsKLSAgICAgICAgc3RvcHBlZCA9IHRydWU7Ci0gICAgfQotfQotICAgIAotYm9vbCBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnNob3VsZFN0b3AoKQotewotICAgIGlmIChtX3BsdWdp
bkZ1bmN0aW9uQ2FsbERlcHRoKSB7Ci0gICAgICAgIG1fc2hvdWxkU3RvcFNvb24gPSB0cnVlOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwotfQot
Ci11aW50MzJfdCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Om5leHRSZXF1ZXN0SUQoKQot
ewotICAgIHVpbnQzMl90IHJlcXVlc3RJRCA9ICsrbV9jdXJyZW50UmVxdWVzdElEOwotICAgIAot
ICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcmV0dXJuIHRoZSBIYXNoTWFwIGVtcHR5L2RlbGV0ZWQg
InNwZWNpYWwga2V5cyIKLSAgICBpZiAocmVxdWVzdElEID09IDAgfHwgcmVxdWVzdElEID09IHN0
YXRpY19jYXN0PHVpbnQzMl90PigtMSkpCi0gICAgICAgIHJldHVybiBuZXh0UmVxdWVzdElEKCk7
Ci0gICAgCi0gICAgcmV0dXJuIHJlcXVlc3RJRDsKLX0KLQotdm9pZCBOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6OmludmFsaWRhdGVSZWN0KGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHdp
ZHRoLCBkb3VibGUgaGVpZ2h0KQotewotICAgIEFTU0VSVChtX3BsdWdpblZpZXcpOwotICAgIAot
ICAgIG1fcGx1Z2luSXNXYWl0aW5nRm9yRHJhdyA9IHRydWU7Ci0gICAgW21fcGx1Z2luVmlldyBp
bnZhbGlkYXRlUGx1Z2luQ29udGVudFJlY3Q6TlNNYWtlUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0
KV07Ci19Ci0KLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpkaWREcmF3KCkKLXsK
LSAgICBpZiAoIW1fcGx1Z2luSXNXYWl0aW5nRm9yRHJhdykKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIG1fcGx1Z2luSXNXYWl0aW5nRm9yRHJhdyA9IGZhbHNlOwotICAgIF9XS1BIUGx1Z2lu
SW5zdGFuY2VEaWREcmF3KG1fcGx1Z2luSG9zdFByb3h5LT5wb3J0KCksIG1fcGx1Z2luSUQpOwot
fQotICAgIAotYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmdldENvb2tpZXMoZGF0
YV90IHVybERhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgdXJsTGVuZ3RoLCBkYXRhX3QmIGNv
b2tpZXNEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90JiBjb29raWVzTGVuZ3RoKQotewotICAg
IEFTU0VSVChtX3BsdWdpblZpZXcpOwotICAgIAotICAgIE5TVVJMICp1cmwgPSBbbV9wbHVnaW5W
aWV3IFVSTFdpdGhDU3RyaW5nOnVybERhdGFdOwotICAgIGlmICghdXJsKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmll
dyB3ZWJGcmFtZV0pKSB7Ci0gICAgICAgIGF1dG8qIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50
KCk7Ci0gICAgICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIAotICAgICAgICBhdXRvKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKTsKLSAgICAgICAg
aWYgKCFwYWdlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFN0cmluZyBj
b29raWVTdHJpbmcgPSBwYWdlLT5jb29raWVKYXIoKS5jb29raWVzKCpkb2N1bWVudCwgdXJsKTsK
LSAgICAgICAgV1RGOjpDU3RyaW5nIGNvb2tpZVN0cmluZ1VURjggPSBjb29raWVTdHJpbmcudXRm
OCgpOwotICAgICAgICBpZiAoY29va2llU3RyaW5nVVRGOC5pc051bGwoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGNvb2tpZXNMZW5ndGggPSBjb29raWVT
dHJpbmdVVEY4Lmxlbmd0aCgpOwotICAgICAgICBtaWdfYWxsb2NhdGUocmVpbnRlcnByZXRfY2Fz
dDx2bV9hZGRyZXNzX3QqPigmY29va2llc0RhdGEpLCBjb29raWVzTGVuZ3RoKTsKLSAgICAgICAg
bWVtY3B5KGNvb2tpZXNEYXRhLCBjb29raWVTdHJpbmdVVEY4LmRhdGEoKSwgY29va2llc0xlbmd0
aCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0gICAgCi1ib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c2V0Q29v
a2llcyhkYXRhX3QgdXJsRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCB1cmxMZW5ndGgsIGRh
dGFfdCBjb29raWVzRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCBjb29raWVzTGVuZ3RoKQot
ewotICAgIEFTU0VSVChtX3BsdWdpblZpZXcpOwotICAgIAotICAgIE5TVVJMICp1cmwgPSBbbV9w
bHVnaW5WaWV3IFVSTFdpdGhDU3RyaW5nOnVybERhdGFdOwotICAgIGlmICghdXJsKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5W
aWV3IHdlYkZyYW1lXSkpIHsKLSAgICAgICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IFN0cmluZzo6
ZnJvbVVURjgoY29va2llc0RhdGEsIGNvb2tpZXNMZW5ndGgpOwotICAgICAgICBpZiAoIWNvb2tp
ZVN0cmluZykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBhdXRvKiBkb2N1
bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwotICAgICAgICBpZiAoIWRvY3VtZW50KQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGF1dG8qIHBhZ2UgPSBkb2N1bWVudC0+cGFn
ZSgpOwotICAgICAgICBpZiAoIXBhZ2UpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIAotICAgICAgICBwYWdlLT5jb29raWVKYXIoKS5zZXRDb29raWVzKCpkb2N1bWVudCwgdXJs
LCBjb29raWVTdHJpbmcpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRQcm94
eShkYXRhX3QgdXJsRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCB1cmxMZW5ndGgsIGRhdGFf
dCYgcHJveHlEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90JiBwcm94eUxlbmd0aCkKLXsKLSAg
ICBBU1NFUlQobV9wbHVnaW5WaWV3KTsKLSAgICAKLSAgICBOU1VSTCAqdXJsID0gW21fcGx1Z2lu
VmlldyBVUkxXaXRoQ1N0cmluZzp1cmxEYXRhXTsKLSAgICBpZiAoIXVybCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgVmVjdG9yPFByb3h5U2VydmVyPiBwcm94eVNlcnZlcnMgPSBwcm94
eVNlcnZlcnNGb3JVUkwodXJsKTsKLSAgICBXVEY6OkNTdHJpbmcgcHJveHlTdHJpbmdVVEY4ID0g
dG9TdHJpbmcocHJveHlTZXJ2ZXJzKS51dGY4KCk7Ci0KLSAgICBwcm94eUxlbmd0aCA9IHByb3h5
U3RyaW5nVVRGOC5sZW5ndGgoKTsKLSAgICBtaWdfYWxsb2NhdGUocmVpbnRlcnByZXRfY2FzdDx2
bV9hZGRyZXNzX3QqPigmcHJveHlEYXRhKSwgcHJveHlMZW5ndGgpOwotICAgIG1lbWNweShwcm94
eURhdGEsIHByb3h5U3RyaW5nVVRGOC5kYXRhKCksIHByb3h5TGVuZ3RoKTsKLSAgICAKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLSAgICAKLWJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpn
ZXRBdXRoZW50aWNhdGlvbkluZm8oZGF0YV90IHByb3RvY29sRGF0YSwgZGF0YV90IGhvc3REYXRh
LCB1aW50MzJfdCBwb3J0LCBkYXRhX3Qgc2NoZW1lRGF0YSwgZGF0YV90IHJlYWxtRGF0YSwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFfdCYgdXNlcm5hbWVEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90JiB1c2VybmFtZUxlbmd0
aCwgZGF0YV90JiBwYXNzd29yZERhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QmIHBhc3N3b3Jk
TGVuZ3RoKQotewotICAgIFdURjo6Q1N0cmluZyB1c2VybmFtZTsKLSAgICBXVEY6OkNTdHJpbmcg
cGFzc3dvcmQ7Ci0gICAgCi0gICAgaWYgKCFXZWJLaXQ6OmdldEF1dGhlbnRpY2F0aW9uSW5mbyhw
cm90b2NvbERhdGEsIGhvc3REYXRhLCBwb3J0LCBzY2hlbWVEYXRhLCByZWFsbURhdGEsIHVzZXJu
YW1lLCBwYXNzd29yZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICB1c2VybmFt
ZUxlbmd0aCA9IHVzZXJuYW1lLmxlbmd0aCgpOwotICAgIG1pZ19hbGxvY2F0ZShyZWludGVycHJl
dF9jYXN0PHZtX2FkZHJlc3NfdCo+KCZ1c2VybmFtZURhdGEpLCB1c2VybmFtZUxlbmd0aCk7Ci0g
ICAgbWVtY3B5KHVzZXJuYW1lRGF0YSwgdXNlcm5hbWUuZGF0YSgpLCB1c2VybmFtZUxlbmd0aCk7
Ci0gICAgCi0gICAgcGFzc3dvcmRMZW5ndGggPSBwYXNzd29yZC5sZW5ndGgoKTsKLSAgICBtaWdf
YWxsb2NhdGUocmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3QqPigmcGFzc3dvcmREYXRhKSwg
cGFzc3dvcmRMZW5ndGgpOwotICAgIG1lbWNweShwYXNzd29yZERhdGEsIHBhc3N3b3JkLmRhdGEo
KSwgcGFzc3dvcmRMZW5ndGgpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y29udmVydFBvaW50KGRvdWJsZSBzb3VyY2VYLCBk
b3VibGUgc291cmNlWSwgTlBDb29yZGluYXRlU3BhY2Ugc291cmNlU3BhY2UsIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUmIGRlc3RYLCBkb3Vi
bGUmIGRlc3RZLCBOUENvb3JkaW5hdGVTcGFjZSBkZXN0U3BhY2UpCi17Ci0gICAgQVNTRVJUKG1f
cGx1Z2luVmlldyk7Ci0KLSAgICByZXR1cm4gW21fcGx1Z2luVmlldyBjb252ZXJ0RnJvbVg6c291
cmNlWCBhbmRZOnNvdXJjZVkgc3BhY2U6c291cmNlU3BhY2UgdG9YOiZkZXN0WCBhbmRZOiZkZXN0
WSBzcGFjZTpkZXN0U3BhY2VdOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eTo6cHJpdmF0ZUJyb3dzaW5nTW9kZURpZENoYW5nZShib29sIGlzUHJpdmF0ZUJyb3dzaW5nRW5h
YmxlZCkKLXsKLSAgICBfV0tQSFBsdWdpbkluc3RhbmNlUHJpdmF0ZUJyb3dzaW5nTW9kZURpZENo
YW5nZShtX3BsdWdpbkhvc3RQcm94eS0+cG9ydCgpLCBtX3BsdWdpbklELCBpc1ByaXZhdGVCcm93
c2luZ0VuYWJsZWQpOwotfQotCi1zdGF0aWMgU3RyaW5nJiBnbG9iYWxFeGNlcHRpb25TdHJpbmco
KQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGV4Y2VwdGlvblN0cmluZzsK
LSAgICByZXR1cm4gZXhjZXB0aW9uU3RyaW5nOwotfQotCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6c2V0R2xvYmFsRXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXhjZXB0aW9uKQot
ewotICAgIGdsb2JhbEV4Y2VwdGlvblN0cmluZygpID0gZXhjZXB0aW9uOwotfQotCi12b2lkIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRl
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KQotewotICAgIFZNJiB2bSA9IGxl
eGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgaWYgKGdsb2JhbEV4Y2VwdGlvblN0cmluZygpLmlzTnVsbCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
LSAgICAgICAgdGhyb3dFeGNlcHRpb24obGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbEV4Y2VwdGlvblN0cmluZygpKSk7Ci0g
ICAgfQotCi0gICAgZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkgPSBTdHJpbmcoKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykg
JiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLmggYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDk0ZDlmMGRkMjM2YTVjNjNjZTk1ZjAyYzkxMDVlMjE4YWVlMjBjNWMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2lmIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKQotCi0jaWZuZGVm
IFByb3h5SW5zdGFuY2VfaAotI2RlZmluZSBQcm94eUluc3RhbmNlX2gKLQotI2ltcG9ydCAiTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5LmgiCi0jaW1wb3J0ICJXZWJLaXRQbHVnaW5Ib3N0VHlw
ZXMuaCIKLSNpbXBvcnQgPFdlYkNvcmUvQnJpZGdlSlNDLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL3J1
bnRpbWVfcm9vdC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgUHJveHlDbGFzczsK
LSAgICAKLWNsYXNzIFByb3h5SW5zdGFuY2UgOiBwdWJsaWMgSlNDOjpCaW5kaW5nczo6SW5zdGFu
Y2UgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8UHJveHlJbnN0YW5jZT4gY3JlYXRlKFJlZjxK
U0M6OkJpbmRpbmdzOjpSb290T2JqZWN0PiYmIHJvb3RPYmplY3QsIE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eSogaW5zdGFuY2VQcm94eSwgdWludDMyX3Qgb2JqZWN0SUQpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQcm94eUluc3RhbmNlKFdURk1vdmUocm9vdE9iamVj
dCksIGluc3RhbmNlUHJveHksIG9iamVjdElEKSk7Ci0gICAgfQotICAgIH5Qcm94eUluc3RhbmNl
KCk7Ci0KLSAgICBKU0M6OkJpbmRpbmdzOjpNZXRob2QqIG1ldGhvZE5hbWVkKEpTQzo6UHJvcGVy
dHlOYW1lKTsKLSAgICBKU0M6OkJpbmRpbmdzOjpGaWVsZCogZmllbGROYW1lZChKU0M6OlByb3Bl
cnR5TmFtZSk7Ci0KLSAgICBKU0M6OkpTVmFsdWUgZmllbGRWYWx1ZShKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgSlNDOjpCaW5kaW5nczo6RmllbGQqKSBjb25zdDsKLSAgICBib29sIHNldEZp
ZWxkVmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IEpTQzo6QmluZGluZ3M6OkZpZWxk
KiwgSlNDOjpKU1ZhbHVlKSBjb25zdDsKLSAgICAKLQotICAgIE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eSogaW5zdGFuY2VQcm94eSgpIHsgcmV0dXJuIG1faW5zdGFuY2VQcm94eTsgfQotCi0g
ICAgdm9pZCBpbnZhbGlkYXRlKCk7Ci0gICAgCi0gICAgdWludDMyX3Qgb2JqZWN0SUQoKSBjb25z
dCB7IHJldHVybiBtX29iamVjdElEOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIFByb3h5SW5zdGFu
Y2UoUmVmPEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+JiYsIE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eSosIHVpbnQzMl90IG9iamVjdElEKTsKLQotICAgIHZpcnR1YWwgSlNDOjpCaW5kaW5n
czo6UnVudGltZU9iamVjdCogbmV3UnVudGltZU9iamVjdChKU0M6OkpTR2xvYmFsT2JqZWN0Kik7
Ci0KLSAgICB2aXJ0dWFsIEpTQzo6QmluZGluZ3M6OkNsYXNzKiBnZXRDbGFzcygpIGNvbnN0Owot
Ci0gICAgdmlydHVhbCBKU0M6OkpTVmFsdWUgZ2V0TWV0aG9kKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OlByb3BlcnR5TmFtZSk7Ci0gICAgdmlydHVhbCBKU0M6OkpTVmFsdWUgaW52b2tlTWV0
aG9kKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSosIEpTQzo6UnVudGltZU1l
dGhvZCopOwotCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW52b2tlRGVmYXVsdE1ldGhvZCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlIGludm9rZURlZmF1bHRNZXRob2QoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNDb25zdHJ1Y3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSBpbnZv
a2VDb25zdHJ1Y3QoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKiwgY29uc3Qg
SlNDOjpBcmdMaXN0Jik7Ci0KLSAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSBkZWZhdWx0VmFsdWUo
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7
Ci0gICAgdmlydHVhbCBKU0M6OkpTVmFsdWUgdmFsdWVPZihKU0M6OkpTR2xvYmFsT2JqZWN0Kikg
Y29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmKTsKLQotICAgIEpTQzo6SlNWYWx1
ZSBzdHJpbmdWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0KikgY29uc3Q7Ci0gICAgSlNDOjpKU1Zh
bHVlIG51bWJlclZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqKSBjb25zdDsKLSAgICBKU0M6OkpT
VmFsdWUgYm9vbGVhblZhbHVlKCkgY29uc3Q7Ci0gICAgCi0gICAgSlNDOjpKU1ZhbHVlIGludm9r
ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqLCBJbnZva2VUeXBlLCB1aW50
NjRfdCBpZGVudGlmaWVyLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKLSAgICAKLSAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VD4gd2FpdEZvclJlcGx5KHVpbnQz
Ml90IHJlcXVlc3RJRCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGF1dG8gcmVwbHkgPSBtX2luc3Rh
bmNlUHJveHktPndhaXRGb3JSZXBseTxUPihyZXF1ZXN0SUQpOwotICAgICAgICAKLSAgICAgICAg
Ly8gSWYgdGhlIGluc3RhbmNlIHByb3h5IHdhcyBpbnZhbGlkYXRlZCwganVzdCByZXR1cm4gYSBu
dWxsIHJlcGx5LgotICAgICAgICBpZiAoIW1faW5zdGFuY2VQcm94eSkKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHJlcGx5OwotICAgIH0KLQot
ICAgIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSogbV9pbnN0YW5jZVByb3h5OwotICAgIHVp
bnQzMl90IG1fb2JqZWN0SUQ7Ci0gICAgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIHN0ZDo6
dW5pcXVlX3B0cjxKU0M6OkJpbmRpbmdzOjpGaWVsZD4+IG1fZmllbGRzOwotICAgIEhhc2hNYXA8
UmVmUHRyPFN0cmluZ0ltcGw+LCBzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpCaW5kaW5nczo6TWV0aG9k
Pj4gbV9tZXRob2RzOwotfTsKLSAgICAKLX0KLQotI2VuZGlmIC8vIFByb3h5SW5zdGFuY2VfaAot
I2VuZGlmIC8vIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbSBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5NWRkYmUyOGJiMDdlZWM5YTI0NTRkMGEwMGZlMmY2N2Nj
MzdiNTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQorKysg
L2Rldi9udWxsCkBAIC0xLDQ2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKSAmJiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2ltcG9ydCAiUHJveHlJbnN0YW5jZS5oIgot
Ci0jaW1wb3J0ICJOZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5oIgotI2ltcG9ydCAiUHJveHlSdW50
aW1lT2JqZWN0LmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9FcnJvci5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvUHJv
cGVydHlOYW1lQXJyYXkuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ29tbW9uVk0uaD4KLSNpbXBvcnQg
PFdlYkNvcmUvSWRlbnRpZmllclJlcC5oPgotI2ltcG9ydCA8V2ViQ29yZS9KU0RPTVdpbmRvdy5o
PgotI2ltcG9ydCA8V2ViQ29yZS9ucHJ1bnRpbWVfaW1wbC5oPgotI2ltcG9ydCA8V2ViQ29yZS9y
dW50aW1lX21ldGhvZC5oPgotI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLWV4dGVy
biAiQyIgewotI2ltcG9ydCAiV2ViS2l0UGx1Z2luSG9zdC5oIgotfQotCi11c2luZyBuYW1lc3Bh
Y2UgSlNDOwotdXNpbmcgbmFtZXNwYWNlIEpTQzo6QmluZGluZ3M7Ci11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFByb3h5Q2xhc3MgOiBwdWJs
aWMgSlNDOjpCaW5kaW5nczo6Q2xhc3MgewotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIE1ldGhvZCog
bWV0aG9kTmFtZWQoUHJvcGVydHlOYW1lLCBJbnN0YW5jZSopIGNvbnN0OwotICAgIHZpcnR1YWwg
RmllbGQqIGZpZWxkTmFtZWQoUHJvcGVydHlOYW1lLCBJbnN0YW5jZSopIGNvbnN0OwotfTsKLQot
TWV0aG9kKiBQcm94eUNsYXNzOjptZXRob2ROYW1lZChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBJbnN0YW5jZSogaW5zdGFuY2UpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFBy
b3h5SW5zdGFuY2UqPihpbnN0YW5jZSktPm1ldGhvZE5hbWVkKHByb3BlcnR5TmFtZSk7Ci19Ci0K
LUZpZWxkKiBQcm94eUNsYXNzOjpmaWVsZE5hbWVkKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEluc3RhbmNlKiBpbnN0YW5jZSkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHJv
eHlJbnN0YW5jZSo+KGluc3RhbmNlKS0+ZmllbGROYW1lZChwcm9wZXJ0eU5hbWUpOwotfQotCi1z
dGF0aWMgUHJveHlDbGFzcyogcHJveHlDbGFzcygpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFByb3h5Q2xhc3M+IHByb3h5Q2xhc3M7Ci0gICAgcmV0dXJuICZwcm94eUNsYXNzLmdldCgp
OwotfQotICAgIAotY2xhc3MgUHJveHlGaWVsZCA6IHB1YmxpYyBKU0M6OkJpbmRpbmdzOjpGaWVs
ZCB7Ci1wdWJsaWM6Ci0gICAgUHJveHlGaWVsZCh1aW50NjRfdCBzZXJ2ZXJJZGVudGlmaWVyKQot
ICAgICAgICA6IG1fc2VydmVySWRlbnRpZmllcihzZXJ2ZXJJZGVudGlmaWVyKQotICAgIHsKLSAg
ICB9Ci0gICAgCi0gICAgdWludDY0X3Qgc2VydmVySWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJu
IG1fc2VydmVySWRlbnRpZmllcjsgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgSlNWYWx1ZSB2
YWx1ZUZyb21JbnN0YW5jZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3RhbmNlKikgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIHNldFZhbHVlVG9JbnN0YW5jZShKU0dsb2JhbE9iamVjdCosIGNv
bnN0IEluc3RhbmNlKiwgSlNWYWx1ZSkgY29uc3Q7Ci0gICAgCi0gICAgdWludDY0X3QgbV9zZXJ2
ZXJJZGVudGlmaWVyOwotfTsKLQotSlNWYWx1ZSBQcm94eUZpZWxkOjp2YWx1ZUZyb21JbnN0YW5j
ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgSW5zdGFuY2UqIGlu
c3RhbmNlKSBjb25zdAotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBQcm94eUluc3Rh
bmNlKj4oaW5zdGFuY2UpLT5maWVsZFZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXMpOwot
fQotICAgIAotYm9vbCBQcm94eUZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IEluc3RhbmNlKiBpbnN0YW5jZSwgSlNWYWx1
ZSB2YWx1ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUHJveHlJbnN0
YW5jZSo+KGluc3RhbmNlKS0+c2V0RmllbGRWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
LCB2YWx1ZSk7Ci19Ci0KLWNsYXNzIFByb3h5TWV0aG9kIDogcHVibGljIEpTQzo6QmluZGluZ3M6
Ok1ldGhvZCB7Ci1wdWJsaWM6Ci0gICAgUHJveHlNZXRob2QodWludDY0X3Qgc2VydmVySWRlbnRp
ZmllcikKLSAgICAgICAgOiBtX3NlcnZlcklkZW50aWZpZXIoc2VydmVySWRlbnRpZmllcikKLSAg
ICB7Ci0gICAgfQotCi0gICAgdWludDY0X3Qgc2VydmVySWRlbnRpZmllcigpIGNvbnN0IHsgcmV0
dXJuIG1fc2VydmVySWRlbnRpZmllcjsgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgaW50IG51
bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLSAgICB1aW50NjRfdCBtX3NlcnZl
cklkZW50aWZpZXI7Ci19OwotCi1Qcm94eUluc3RhbmNlOjpQcm94eUluc3RhbmNlKFJlZjxSb290
T2JqZWN0PiYmIHJvb3RPYmplY3QsIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSogaW5zdGFu
Y2VQcm94eSwgdWludDMyX3Qgb2JqZWN0SUQpCi0gICAgOiBJbnN0YW5jZShXVEZNb3ZlKHJvb3RP
YmplY3QpKQotICAgICwgbV9pbnN0YW5jZVByb3h5KGluc3RhbmNlUHJveHkpCi0gICAgLCBtX29i
amVjdElEKG9iamVjdElEKQotewotICAgIG1faW5zdGFuY2VQcm94eS0+YWRkSW5zdGFuY2UodGhp
cyk7Ci19Ci0KLVByb3h5SW5zdGFuY2U6On5Qcm94eUluc3RhbmNlKCkKLXsKLSAgICBpZiAoIW1f
aW5zdGFuY2VQcm94eSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1faW5zdGFuY2VQcm94
eS0+cmVtb3ZlSW5zdGFuY2UodGhpcyk7Ci0KLSAgICBpbnZhbGlkYXRlKCk7Ci19Ci0gICAgCi1S
dW50aW1lT2JqZWN0KiBQcm94eUluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KQotewotICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0
RE9NU3RydWN0dXJlIHVzZXMgdGhlIHByb3RvdHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBv
YmplY3QuCi0gICAgcmV0dXJuIFByb3h5UnVudGltZU9iamVjdDo6Y3JlYXRlKGxleGljYWxHbG9i
YWxPYmplY3QtPnZtKCksIFdlYkNvcmU6OmRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8UHJveHlS
dW50aW1lT2JqZWN0PihsZXhpY2FsR2xvYmFsT2JqZWN0KSwgKnRoaXMpOwotfQotCi1KU0M6OkJp
bmRpbmdzOjpDbGFzcyogUHJveHlJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBjb25zdAotewotICAgIHJl
dHVybiBwcm94eUNsYXNzKCk7Ci19Ci0KLUpTVmFsdWUgUHJveHlJbnN0YW5jZTo6aW52b2tlKEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBj
YWxsRnJhbWUsIEludm9rZVR5cGUgdHlwZSwgdWludDY0X3QgaWRlbnRpZmllciwgY29uc3QgQXJn
TGlzdCYgYXJncykKLXsKLSAgICBpZiAoIW1faW5zdGFuY2VQcm94eSkKLSAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBSZXRhaW5QdHI8TlNEYXRhPiBhcmd1bWVudHMobV9pbnN0
YW5jZVByb3h5LT5tYXJzaGFsVmFsdWVzKGxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3MpKTsKLQot
ICAgIHVpbnQzMl90IHJlcXVlc3RJRCA9IG1faW5zdGFuY2VQcm94eS0+bmV4dFJlcXVlc3RJRCgp
OwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyBpKyspCi0gICAg
ICAgIG1faW5zdGFuY2VQcm94eS0+cmV0YWluTG9jYWxPYmplY3QoYXJncy5hdChpKSk7Ci0KLSAg
ICBpZiAoX1dLUEhOUE9iamVjdEludm9rZShtX2luc3RhbmNlUHJveHktPmhvc3RQcm94eSgpLT5w
b3J0KCksIG1faW5zdGFuY2VQcm94eS0+cGx1Z2luSUQoKSwgcmVxdWVzdElELCBtX29iamVjdElE
LCB0eXBlLCBpZGVudGlmaWVyLCBzdGF0aWNfY2FzdDxjaGFyKj4oY29uc3RfY2FzdDx2b2lkKj4o
W2FyZ3VtZW50cy5nZXQoKSBieXRlc10pKSwgW2FyZ3VtZW50cy5nZXQoKSBsZW5ndGhdKSAhPSBL
RVJOX1NVQ0NFU1MpIHsKLSAgICAgICAgaWYgKG1faW5zdGFuY2VQcm94eSkgewotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyBpKyspCi0gICAgICAgICAg
ICAgICAgbV9pbnN0YW5jZVByb3h5LT5yZWxlYXNlTG9jYWxPYmplY3QoYXJncy5hdChpKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIAotICAg
IGF1dG8gcmVwbHkgPSB3YWl0Rm9yUmVwbHk8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpC
b29sZWFuQW5kRGF0YVJlcGx5PihyZXF1ZXN0SUQpOwotICAgIE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGxleGljYWxHbG9iYWxPYmpl
Y3QpOwotCi0gICAgaWYgKG1faW5zdGFuY2VQcm94eSkgewotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYXJncy5zaXplKCk7IGkrKykKLSAgICAgICAgICAgIG1faW5zdGFuY2VQcm94
eS0+cmVsZWFzZUxvY2FsT2JqZWN0KGFyZ3MuYXQoaSkpOwotICAgIH0KLQotICAgIGlmICghcmVw
bHkgfHwgIXJlcGx5LT5tX3JldHVyblZhbHVlKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLSAgICAKLSAgICByZXR1cm4gbV9pbnN0YW5jZVByb3h5LT5kZW1hcnNoYWxWYWx1ZShsZXhp
Y2FsR2xvYmFsT2JqZWN0LCByZWludGVycHJldF9jYXN0PGNoYXIqPihjb25zdF9jYXN0PHVuc2ln
bmVkIGNoYXIqPihDRkRhdGFHZXRCeXRlUHRyKHJlcGx5LT5tX3Jlc3VsdC5nZXQoKSkpKSwgQ0ZE
YXRhR2V0TGVuZ3RoKHJlcGx5LT5tX3Jlc3VsdC5nZXQoKSkpOwotfQotCi1jbGFzcyBQcm94eVJ1
bnRpbWVNZXRob2QgZmluYWwgOiBwdWJsaWMgUnVudGltZU1ldGhvZCB7Ci1wdWJsaWM6Ci0gICAg
dXNpbmcgQmFzZSA9IFJ1bnRpbWVNZXRob2Q7Ci0KLSAgICBzdGF0aWMgUHJveHlSdW50aW1lTWV0
aG9kKiBjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgQmluZGluZ3M6Ok1ldGhv
ZCogbWV0aG9kKQotICAgIHsKLSAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwot
ICAgICAgICAvLyBGSVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZSB1c2VzIHRoZSBwcm90
b3R5cGUgb2ZmIG9mIHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0Ci0gICAgICAgIC8vIGxleGljYWxH
bG9iYWxPYmplY3Qtdm0oKSBpcyBhbHNvIGxpa2VseSB3cm9uZy4KLSAgICAgICAgU3RydWN0dXJl
KiBkb21TdHJ1Y3R1cmUgPSBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFByb3h5UnVudGltZU1l
dGhvZD4obGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgICAgIFByb3h5UnVudGltZU1ldGhvZCog
cnVudGltZU1ldGhvZCA9IG5ldyAoYWxsb2NhdGVDZWxsPFByb3h5UnVudGltZU1ldGhvZD4odm0u
aGVhcCkpIFByb3h5UnVudGltZU1ldGhvZCh2bSwgZG9tU3RydWN0dXJlLCBtZXRob2QpOwotICAg
ICAgICBydW50aW1lTWV0aG9kLT5maW5pc2hDcmVhdGlvbih2bSwgbmFtZSk7Ci0gICAgICAgIHJl
dHVybiBydW50aW1lTWV0aG9kOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSW50ZXJuYWxGdW5jdGlvblR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotCi1w
cml2YXRlOgotICAgIFByb3h5UnVudGltZU1ldGhvZChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBCaW5kaW5nczo6TWV0aG9kKiBtZXRob2QpCi0gICAgICAgIDogUnVudGltZU1ldGhvZCh2
bSwgc3RydWN0dXJlLCBtZXRob2QpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAgewotICAgICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSwgbmFtZSk7Ci0gICAgICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5m
bygpKSk7Ci0gICAgfQotfTsKLQotY29uc3QgQ2xhc3NJbmZvIFByb3h5UnVudGltZU1ldGhvZDo6
c19pbmZvID0geyAiUHJveHlSdW50aW1lTWV0aG9kIiwgJlJ1bnRpbWVNZXRob2Q6OnNfaW5mbywg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShQcm94eVJ1bnRpbWVNZXRob2Qp
IH07Ci0KLUpTVmFsdWUgUHJveHlJbnN0YW5jZTo6Z2V0TWV0aG9kKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0g
ICAgTWV0aG9kKiBtZXRob2QgPSBnZXRDbGFzcygpLT5tZXRob2ROYW1lZChwcm9wZXJ0eU5hbWUs
IHRoaXMpOwotICAgIHJldHVybiBQcm94eVJ1bnRpbWVNZXRob2Q6OmNyZWF0ZShsZXhpY2FsR2xv
YmFsT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgp
LCBtZXRob2QpOwotfQotCi1KU1ZhbHVlIFByb3h5SW5zdGFuY2U6Omludm9rZU1ldGhvZChKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSlNDOjpSdW50aW1lTWV0aG9kKiBydW50aW1lTWV0aG9kKQotewotICAgIFZNJiB2bSA9IGxl
eGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgaWYgKCFhc09iamVjdChydW50aW1lTWV0aG9kKS0+aW5oZXJpdHM8
UHJveHlSdW50aW1lTWV0aG9kPih2bSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIkF0dGVtcHQgdG8gaW52b2tlIG5vbi1wbHVnLWlu
IG1ldGhvZCBvbiBwbHVnLWluIG9iamVjdC4iX3MpOwotCi0gICAgUHJveHlNZXRob2QqIG1ldGhv
ZCA9IHN0YXRpY19jYXN0PFByb3h5TWV0aG9kKj4ocnVudGltZU1ldGhvZC0+bWV0aG9kKCkpOwot
ICAgIEFTU0VSVChtZXRob2QpOwotCi0gICAgcmV0dXJuIGludm9rZShsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUsIEludm9rZSwgbWV0aG9kLT5zZXJ2ZXJJZGVudGlmaWVyKCksIEFyZ0xp
c3QoY2FsbEZyYW1lKSk7Ci19Ci0KLWJvb2wgUHJveHlJbnN0YW5jZTo6c3VwcG9ydHNJbnZva2VE
ZWZhdWx0TWV0aG9kKCkgY29uc3QKLXsKLSAgICBpZiAoIW1faW5zdGFuY2VQcm94eSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHVpbnQzMl90IHJlcXVlc3RJRCA9IG1faW5zdGFu
Y2VQcm94eS0+bmV4dFJlcXVlc3RJRCgpOwotICAgIAotICAgIGlmIChfV0tQSE5QT2JqZWN0SGFz
SW52b2tlRGVmYXVsdE1ldGhvZChtX2luc3RhbmNlUHJveHktPmhvc3RQcm94eSgpLT5wb3J0KCks
IG1faW5zdGFuY2VQcm94eS0+cGx1Z2luSUQoKSwgcmVxdWVzdElELCBtX29iamVjdElEKSAhPSBL
RVJOX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBhdXRvIHJlcGx5
ID0gd2FpdEZvclJlcGx5PE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Qm9vbGVhblJlcGx5
PihyZXF1ZXN0SUQpOwotICAgIHJldHVybiByZXBseSAmJiByZXBseS0+bV9yZXN1bHQ7Ci19Ci0K
LUpTVmFsdWUgUHJveHlJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZChKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgcmV0
dXJuIGludm9rZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIEludm9rZURlZmF1bHQs
IDAsIEFyZ0xpc3QoY2FsbEZyYW1lKSk7Ci19Ci0KLWJvb2wgUHJveHlJbnN0YW5jZTo6c3VwcG9y
dHNDb25zdHJ1Y3QoKSBjb25zdAotewotICAgIGlmICghbV9pbnN0YW5jZVByb3h5KQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgdWludDMyX3QgcmVxdWVzdElEID0gbV9pbnN0YW5j
ZVByb3h5LT5uZXh0UmVxdWVzdElEKCk7Ci0gICAgCi0gICAgaWYgKF9XS1BITlBPYmplY3RIYXND
b25zdHJ1Y3RNZXRob2QobV9pbnN0YW5jZVByb3h5LT5ob3N0UHJveHkoKS0+cG9ydCgpLCBtX2lu
c3RhbmNlUHJveHktPnBsdWdpbklEKCksIHJlcXVlc3RJRCwgbV9vYmplY3RJRCkgIT0gS0VSTl9T
VUNDRVNTKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgYXV0byByZXBseSA9IHdh
aXRGb3JSZXBseTxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OkJvb2xlYW5SZXBseT4ocmVx
dWVzdElEKTsKLSAgICByZXR1cm4gcmVwbHkgJiYgcmVwbHktPm1fcmVzdWx0OwotfQotICAgIAot
SlNWYWx1ZSBQcm94eUluc3RhbmNlOjppbnZva2VDb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQotewotICAgIHJldHVybiBpbnZva2UobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LCBDb25zdHJ1Y3QsIDAsIGFyZ3MpOwotfQotCi1KU1ZhbHVlIFByb3h5SW5zdGFuY2U6OmRlZmF1
bHRWYWx1ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJlZmVycmVkUHJp
bWl0aXZlVHlwZSBoaW50KSBjb25zdAotewotICAgIGlmIChoaW50ID09IFByZWZlclN0cmluZykK
LSAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIGlm
IChoaW50ID09IFByZWZlck51bWJlcikKLSAgICAgICAgcmV0dXJuIG51bWJlclZhbHVlKGxleGlj
YWxHbG9iYWxPYmplY3QpOwotICAgIHJldHVybiB2YWx1ZU9mKGxleGljYWxHbG9iYWxPYmplY3Qp
OwotfQotCi1KU1ZhbHVlIFByb3h5SW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0KSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
c29tZXRoaW5nIHNlbnNpYmxlLgotICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGxleGljYWxHbG9i
YWxPYmplY3QtPnZtKCkpOwotfQotCi1KU1ZhbHVlIFByb3h5SW5zdGFuY2U6Om51bWJlclZhbHVl
KEpTR2xvYmFsT2JqZWN0KikgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHNvbWV0
aGluZyBzZW5zaWJsZS4KLSAgICByZXR1cm4ganNOdW1iZXIoMCk7Ci19Ci0KLUpTVmFsdWUgUHJv
eHlJbnN0YW5jZTo6Ym9vbGVhblZhbHVlKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHNvbWV0aGluZyBzZW5zaWJsZS4KLSAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKLX0K
LQotSlNWYWx1ZSBQcm94eUluc3RhbmNlOjp2YWx1ZU9mKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0KSBjb25zdAotewotICAgIHJldHVybiBzdHJpbmdWYWx1ZShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKLX0KLQotdm9pZCBQcm94eUluc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgbmFt
ZUFycmF5KQotewotICAgIGlmICghbV9pbnN0YW5jZVByb3h5KQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgdWludDMyX3QgcmVxdWVzdElEID0gbV9pbnN0YW5jZVByb3h5LT5uZXh0UmVxdWVz
dElEKCk7Ci0gICAgCi0gICAgaWYgKF9XS1BITlBPYmplY3RFbnVtZXJhdGUobV9pbnN0YW5jZVBy
b3h5LT5ob3N0UHJveHkoKS0+cG9ydCgpLCBtX2luc3RhbmNlUHJveHktPnBsdWdpbklEKCksIHJl
cXVlc3RJRCwgbV9vYmplY3RJRCkgIT0gS0VSTl9TVUNDRVNTKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgYXV0byByZXBseSA9IHdhaXRGb3JSZXBseTxOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6OkJvb2xlYW5BbmREYXRhUmVwbHk+KHJlcXVlc3RJRCk7Ci0gICAgTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5Ojptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUobGV4aWNhbEds
b2JhbE9iamVjdCk7Ci0gICAgaWYgKCFyZXBseSB8fCAhcmVwbHktPm1fcmV0dXJuVmFsdWUpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBOU0FycmF5ICphcnJheSA9IFtOU1Byb3BlcnR5TGlz
dFNlcmlhbGl6YXRpb24gcHJvcGVydHlMaXN0V2l0aERhdGE6KF9fYnJpZGdlIE5TRGF0YSAqKXJl
cGx5LT5tX3Jlc3VsdC5nZXQoKSBvcHRpb25zOk5TUHJvcGVydHlMaXN0SW1tdXRhYmxlIGZvcm1h
dDpudWxscHRyIGVycm9yOm51bGxwdHJdOwotICAgIAotICAgIFZNJiB2bSA9IGxleGljYWxHbG9i
YWxPYmplY3QtPnZtKCk7Ci0gICAgZm9yIChOU051bWJlciAqbnVtYmVyIGluIGFycmF5KSB7Ci0g
ICAgICAgIElkZW50aWZpZXJSZXAqIGlkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PElkZW50
aWZpZXJSZXAqPihbbnVtYmVyIGxvbmdMb25nVmFsdWVdKTsKLSAgICAgICAgaWYgKCFJZGVudGlm
aWVyUmVwOjppc1ZhbGlkKGlkZW50aWZpZXIpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgaWYgKGlkZW50aWZpZXItPmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IGNo
YXIqIHN0ciA9IGlkZW50aWZpZXItPnN0cmluZygpOwotICAgICAgICAgICAgbmFtZUFycmF5LmFk
ZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZh
bGxiYWNrKHN0ciwgc3RybGVuKHN0cikpKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
bmFtZUFycmF5LmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBpZGVudGlmaWVyLT5udW1iZXIoKSkp
OwotICAgIH0KLX0KLQotTWV0aG9kKiBQcm94eUluc3RhbmNlOjptZXRob2ROYW1lZChQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIFN0cmluZyBuYW1lKHByb3BlcnR5TmFtZS5wdWJs
aWNOYW1lKCkpOwotICAgIGlmIChuYW1lLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIGlmICghbV9pbnN0YW5jZVByb3h5KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAKLSAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgYW4gZW50cnkgaW4gdGhlIG1hcCwgdXNl
IGl0LgotICAgIGF1dG8gZXhpc3RpbmdNYXBFbnRyeSA9IG1fbWV0aG9kcy5maW5kKG5hbWUuaW1w
bCgpKTsKLSAgICBpZiAoZXhpc3RpbmdNYXBFbnRyeSAhPSBtX21ldGhvZHMuZW5kKCkpCi0gICAg
ICAgIHJldHVybiBleGlzdGluZ01hcEVudHJ5LT52YWx1ZS5nZXQoKTsKLSAgICAKLSAgICB1aW50
NjRfdCBtZXRob2ROYW1lID0gcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4oX05QTl9HZXRTdHJp
bmdJZGVudGlmaWVyKG5hbWUuYXNjaWkoKS5kYXRhKCkpKTsKLSAgICB1aW50MzJfdCByZXF1ZXN0
SUQgPSBtX2luc3RhbmNlUHJveHktPm5leHRSZXF1ZXN0SUQoKTsKLSAgICAKLSAgICBpZiAoX1dL
UEhOUE9iamVjdEhhc01ldGhvZChtX2luc3RhbmNlUHJveHktPmhvc3RQcm94eSgpLT5wb3J0KCks
IG1faW5zdGFuY2VQcm94eS0+cGx1Z2luSUQoKSwgcmVxdWVzdElELCBtX29iamVjdElELCBtZXRo
b2ROYW1lKSAhPSBLRVJOX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAot
ICAgIGF1dG8gcmVwbHkgPSB3YWl0Rm9yUmVwbHk8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
OjpCb29sZWFuUmVwbHk+KHJlcXVlc3RJRCk7Ci0gICAgaWYgKCFyZXBseSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoIXJlcGx5LT5tX3Jlc3VsdCAmJiAhbV9pbnN0YW5jZVBy
b3h5LT5ob3N0UHJveHkoKS0+c2hvdWxkQ2FjaGVNaXNzaW5nUHJvcGVydGllc0FuZE1ldGhvZHMo
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBBZGQgYSBuZXcgZW50cnkgdG8g
dGhlIG1hcCB1bmxlc3MgYW4gZW50cnkgd2FzIGFkZGVkIHdoaWxlIHdlIHdlcmUgaW4gd2FpdEZv
clJlcGx5LgotICAgIGF1dG8gbWFwQWRkUmVzdWx0ID0gbV9tZXRob2RzLmFkZChuYW1lLmltcGwo
KSwgbnVsbHB0cik7Ci0gICAgaWYgKG1hcEFkZFJlc3VsdC5pc05ld0VudHJ5ICYmIHJlcGx5LT5t
X3Jlc3VsdCkKLSAgICAgICAgbWFwQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG1ha2VVbmlx
dWU8UHJveHlNZXRob2Q+KG1ldGhvZE5hbWUpOwotCi0gICAgcmV0dXJuIG1hcEFkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWUuZ2V0KCk7Ci19Ci0KLUZpZWxkKiBQcm94eUluc3RhbmNlOjpmaWVsZE5h
bWVkKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgU3RyaW5nIG5hbWUocHJvcGVy
dHlOYW1lLnB1YmxpY05hbWUoKSk7Ci0gICAgaWYgKG5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgaWYgKCFtX2luc3RhbmNlUHJveHkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIAotICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBlbnRyeSBpbiB0
aGUgbWFwLCB1c2UgaXQuCi0gICAgYXV0byBleGlzdGluZ01hcEVudHJ5ID0gbV9maWVsZHMuZmlu
ZChuYW1lLmltcGwoKSk7Ci0gICAgaWYgKGV4aXN0aW5nTWFwRW50cnkgIT0gbV9maWVsZHMuZW5k
KCkpCi0gICAgICAgIHJldHVybiBleGlzdGluZ01hcEVudHJ5LT52YWx1ZS5nZXQoKTsKLSAgICAK
LSAgICB1aW50NjRfdCBpZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4oX05Q
Tl9HZXRTdHJpbmdJZGVudGlmaWVyKG5hbWUuYXNjaWkoKS5kYXRhKCkpKTsKLSAgICB1aW50MzJf
dCByZXF1ZXN0SUQgPSBtX2luc3RhbmNlUHJveHktPm5leHRSZXF1ZXN0SUQoKTsKLSAgICAKLSAg
ICBpZiAoX1dLUEhOUE9iamVjdEhhc1Byb3BlcnR5KG1faW5zdGFuY2VQcm94eS0+aG9zdFByb3h5
KCktPnBvcnQoKSwgbV9pbnN0YW5jZVByb3h5LT5wbHVnaW5JRCgpLCByZXF1ZXN0SUQsIG1fb2Jq
ZWN0SUQsIGlkZW50aWZpZXIpICE9IEtFUk5fU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgCi0gICAgYXV0byByZXBseSA9IHdhaXRGb3JSZXBseTxOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6OkJvb2xlYW5SZXBseT4ocmVxdWVzdElEKTsKLSAgICBpZiAoIXJlcGx5KQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBpZiAoIXJlcGx5LT5tX3Jlc3VsdCAm
JiAhbV9pbnN0YW5jZVByb3h5LT5ob3N0UHJveHkoKS0+c2hvdWxkQ2FjaGVNaXNzaW5nUHJvcGVy
dGllc0FuZE1ldGhvZHMoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgLy8g
QWRkIGEgbmV3IGVudHJ5IHRvIHRoZSBtYXAgdW5sZXNzIGFuIGVudHJ5IHdhcyBhZGRlZCB3aGls
ZSB3ZSB3ZXJlIGluIHdhaXRGb3JSZXBseS4KLSAgICBhdXRvIG1hcEFkZFJlc3VsdCA9IG1fZmll
bGRzLmFkZChuYW1lLmltcGwoKSwgbnVsbHB0cik7Ci0gICAgaWYgKG1hcEFkZFJlc3VsdC5pc05l
d0VudHJ5ICYmIHJlcGx5LT5tX3Jlc3VsdCkKLSAgICAgICAgbWFwQWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSA9IG1ha2VVbmlxdWU8UHJveHlGaWVsZD4oaWRlbnRpZmllcik7Ci0gICAgcmV0dXJu
IG1hcEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBQ
cm94eUluc3RhbmNlOjpmaWVsZFZhbHVlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjb25zdCBGaWVsZCogZmllbGQpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2luc3RhbmNlUHJv
eHkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIAotICAgIHVpbnQ2NF90IHNl
cnZlcklkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBQcm94eUZpZWxkKj4oZmllbGQpLT5z
ZXJ2ZXJJZGVudGlmaWVyKCk7Ci0gICAgdWludDMyX3QgcmVxdWVzdElEID0gbV9pbnN0YW5jZVBy
b3h5LT5uZXh0UmVxdWVzdElEKCk7Ci0gICAgCi0gICAgaWYgKF9XS1BITlBPYmplY3RHZXRQcm9w
ZXJ0eShtX2luc3RhbmNlUHJveHktPmhvc3RQcm94eSgpLT5wb3J0KCksIG1faW5zdGFuY2VQcm94
eS0+cGx1Z2luSUQoKSwgcmVxdWVzdElELCBtX29iamVjdElELCBzZXJ2ZXJJZGVudGlmaWVyKSAh
PSBLRVJOX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIAotICAg
IGF1dG8gcmVwbHkgPSB3YWl0Rm9yUmVwbHk8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpC
b29sZWFuQW5kRGF0YVJlcGx5PihyZXF1ZXN0SUQpOwotICAgIE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGxleGljYWxHbG9iYWxPYmpl
Y3QpOwotICAgIGlmICghcmVwbHkgfHwgIXJlcGx5LT5tX3JldHVyblZhbHVlKQotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAKLSAgICByZXR1cm4gbV9pbnN0YW5jZVByb3h5LT5k
ZW1hcnNoYWxWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCByZWludGVycHJldF9jYXN0PGNoYXIq
Pihjb25zdF9jYXN0PHVuc2lnbmVkIGNoYXIqPihDRkRhdGFHZXRCeXRlUHRyKHJlcGx5LT5tX3Jl
c3VsdC5nZXQoKSkpKSwgQ0ZEYXRhR2V0TGVuZ3RoKHJlcGx5LT5tX3Jlc3VsdC5nZXQoKSkpOwot
fQotICAgIAotYm9vbCBQcm94eUluc3RhbmNlOjpzZXRGaWVsZFZhbHVlKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBGaWVsZCogZmllbGQsIEpTVmFsdWUgdmFsdWUp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX2luc3RhbmNlUHJveHkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAKLSAgICB1aW50NjRfdCBzZXJ2ZXJJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29u
c3QgUHJveHlGaWVsZCo+KGZpZWxkKS0+c2VydmVySWRlbnRpZmllcigpOwotICAgIHVpbnQzMl90
IHJlcXVlc3RJRCA9IG1faW5zdGFuY2VQcm94eS0+bmV4dFJlcXVlc3RJRCgpOwotICAgIAotICAg
IGRhdGFfdCB2YWx1ZURhdGE7Ci0gICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCB2YWx1ZUxlbmd0
aDsKLQotICAgIG1faW5zdGFuY2VQcm94eS0+bWFyc2hhbFZhbHVlKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHZhbHVlLCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3RoKTsKLSAgICBtX2luc3RhbmNlUHJveHkt
PnJldGFpbkxvY2FsT2JqZWN0KHZhbHVlKTsKLSAgICBrZXJuX3JldHVybl90IGtyID0gX1dLUEhO
UE9iamVjdFNldFByb3BlcnR5KG1faW5zdGFuY2VQcm94eS0+aG9zdFByb3h5KCktPnBvcnQoKSwg
bV9pbnN0YW5jZVByb3h5LT5wbHVnaW5JRCgpLCByZXF1ZXN0SUQsIG1fb2JqZWN0SUQsIHNlcnZl
cklkZW50aWZpZXIsIHZhbHVlRGF0YSwgdmFsdWVMZW5ndGgpOwotICAgIG1pZ19kZWFsbG9jYXRl
KHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190Pih2YWx1ZURhdGEpLCB2YWx1ZUxlbmd0aCk7
Ci0gICAgaWYgKG1faW5zdGFuY2VQcm94eSkKLSAgICAgICAgbV9pbnN0YW5jZVByb3h5LT5yZWxl
YXNlTG9jYWxPYmplY3QodmFsdWUpOwotICAgIGlmIChrciAhPSBLRVJOX1NVQ0NFU1MpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICB3YWl0Rm9yUmVwbHk8TmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjpCb29sZWFuUmVwbHk+KHJlcXVlc3RJRCk7Ci0gICAgTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5Ojptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUobGV4aWNhbEds
b2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHJveHlJbnN0YW5jZTo6
aW52YWxpZGF0ZSgpCi17Ci0gICAgQVNTRVJUKG1faW5zdGFuY2VQcm94eSk7Ci0gICAgCi0gICAg
aWYgKE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5KiBob3N0UHJveHkgPSBtX2luc3RhbmNlUHJveHkt
Pmhvc3RQcm94eSgpKQotICAgICAgICBfV0tQSE5QT2JqZWN0UmVsZWFzZShob3N0UHJveHktPnBv
cnQoKSwgbV9pbnN0YW5jZVByb3h5LT5wbHVnaW5JRCgpLCBtX29iamVjdElEKTsKLSAgICBtX2lu
c3RhbmNlUHJveHkgPSBudWxscHRyOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2Vu
ZGlmIC8vIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVk
L1Byb3h5UnVudGltZU9iamVjdC5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9I
b3N0ZWQvUHJveHlSdW50aW1lT2JqZWN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGJkY2M4NTk1YmQ0NTcwOTQyM2E2MWE2Y2QxZTY0NzcyMjk4Y2ViYTIuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
UGx1Z2lucy9Ib3N0ZWQvUHJveHlSdW50aW1lT2JqZWN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpZiBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykKLQotI2lmbmRlZiBQcm94eVJ1bnRpbWVPYmpl
Y3RfaAotI2RlZmluZSBQcm94eVJ1bnRpbWVPYmplY3RfaAotCi0jaW5jbHVkZSA8V2ViQ29yZS9K
U0RPTUJpbmRpbmcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL3J1bnRpbWVfb2JqZWN0Lmg+Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBQcm94eUluc3RhbmNlOwotCi1jbGFzcyBQcm94eVJ1
bnRpbWVPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdCB7
Ci1wdWJsaWM6Ci0gICAgdXNpbmcgQmFzZSA9IEpTQzo6QmluZGluZ3M6OlJ1bnRpbWVPYmplY3Q7
Ci0KLSAgICBzdGF0aWMgUHJveHlSdW50aW1lT2JqZWN0KiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxQcm94eUluc3RhbmNlPiYmIGluc3RhbmNlKQot
ICAgIHsKLSAgICAgICAgUHJveHlSdW50aW1lT2JqZWN0KiBvYmplY3QgPSBuZXcgKEpTQzo6YWxs
b2NhdGVDZWxsPFByb3h5UnVudGltZU9iamVjdD4odm0uaGVhcCkpIFByb3h5UnVudGltZU9iamVj
dCh2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKGluc3RhbmNlKSk7Ci0gICAgICAgIG9iamVjdC0+Zmlu
aXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLQotICAgIFBy
b3h5SW5zdGFuY2UqIGdldEludGVybmFsUHJveHlJbnN0YW5jZSgpIGNvbnN0OwotCi0gICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0KLXByaXZhdGU6Ci0gICAg
UHJveHlSdW50aW1lT2JqZWN0KEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZjxQcm94eUlu
c3RhbmNlPiYmKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLX07Ci0KLX0K
LQotI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1Bs
dWdpbnMvSG9zdGVkL1Byb3h5UnVudGltZU9iamVjdC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5UnVudGltZU9iamVjdC5tbQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZWNhZTk5MGU0ODBiMjBlZDU1OGFiY2ZhNGNjZjZhNWZiYjhiODUyMy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eVJ1bnRpbWVPYmplY3QubW0KKysrIC9k
ZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpZiBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykKLQotI2ltcG9ydCAi
UHJveHlSdW50aW1lT2JqZWN0LmgiCi0KLSNpbXBvcnQgIlByb3h5SW5zdGFuY2UuaCIKLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL09iamVjdFByb3RvdHlwZS5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SlNDOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY29uc3QgQ2xhc3NJbmZvIFByb3h5UnVudGlt
ZU9iamVjdDo6c19pbmZvID0geyAiUHJveHlSdW50aW1lT2JqZWN0IiwgJlJ1bnRpbWVPYmplY3Q6
OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShQcm94eVJ1bnRp
bWVPYmplY3QpIH07Ci0KLVByb3h5UnVudGltZU9iamVjdDo6UHJveHlSdW50aW1lT2JqZWN0KFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxQcm94eUluc3RhbmNlPiYmIGluc3RhbmNl
KQotICAgIDogUnVudGltZU9iamVjdCh2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKGluc3RhbmNlKSkK
LXsKLX0KLQotdm9pZCBQcm94eVJ1bnRpbWVPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
LXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKHZt
LCAmc19pbmZvKSk7Ci19Ci0KLVByb3h5SW5zdGFuY2UqIFByb3h5UnVudGltZU9iamVjdDo6Z2V0
SW50ZXJuYWxQcm94eUluc3RhbmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UHJveHlJbnN0YW5jZSo+KGdldEludGVybmFsSW5zdGFuY2UoKSk7Ci19Ci0KLX0KLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJI
b3N0ZWROZXRzY2FwZVBsdWdpblZpZXcuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdp
bnMvSG9zdGVkL1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBiNjBjMWU1YTRlNTNlNzRlMTg0MGJmNmM1Y2NlM2U0ZmJlMzY4OTViLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5o
CisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OC0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZiBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykK
LQotI2ltcG9ydCAiV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5oIgotI2ltcG9ydCA8d3RmL1Jl
ZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIEhvc3RlZE5ldHNjYXBlUGx1Z2lu
U3RyZWFtOwotY2xhc3MgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OwotY2xhc3MgU29mdHdh
cmVDQVJlbmRlcmVyOwotfQotCi1AaW50ZXJmYWNlIFdlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmll
dyA6IFdlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXc8V2ViUGx1Z2luTWFudWFsTG9hZGVyPgotewot
ICAgIFJldGFpblB0cjxOU0FycmF5PiBfYXR0cmlidXRlS2V5czsKLSAgICBSZXRhaW5QdHI8TlNB
cnJheT4gX2F0dHJpYnV0ZVZhbHVlczsKLSAgICAKLSAgICBSZXRhaW5QdHI8Q0FMYXllcj4gX3Bs
dWdpbkxheWVyOwotICAgIEJPT0wgX2hvc3RzTGF5ZXJzSW5XaW5kb3dTZXJ2ZXI7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYktpdDo6U29mdHdhcmVDQVJlbmRlcmVyPiBfc29mdHdhcmVSZW5kZXJl
cjsKLSAgICAKLSAgICBOU1NpemUgX3ByZXZpb3VzU2l6ZTsKLSAgICBSZWZQdHI8V2ViS2l0OjpO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk+IF9wcm94eTsKLX0KLQotLSAoaWQpaW5pdFdpdGhG
cmFtZTooTlNSZWN0KXIKLSAgICAgIHBsdWdpblBhY2thZ2U6KFdlYk5ldHNjYXBlUGx1Z2luUGFj
a2FnZSAqKXRoZVBsdWdpblBhY2thZ2UKLSAgICAgICAgICAgICAgICBVUkw6KE5TVVJMICopVVJM
Ci0gICAgICAgICAgICBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwKLSAgICAgICAgICAgTUlNRVR5
cGU6KE5TU3RyaW5nICopTUlNRQotICAgICAgYXR0cmlidXRlS2V5czooTlNBcnJheSAqKWtleXMK
LSAgICBhdHRyaWJ1dGVWYWx1ZXM6KE5TQXJyYXkgKil2YWx1ZXMKLSAgICAgICBsb2FkTWFudWFs
bHk6KEJPT0wpbG9hZE1hbnVhbGx5Ci0gICAgICAgICAgICBlbGVtZW50OihSZWZQdHI8V2ViQ29y
ZTo6SFRNTFBsdWdJbkVsZW1lbnQ+JiYpZWxlbWVudDsKLQotLSAodm9pZClwbHVnaW5Ib3N0RGll
ZDsKLS0gKENBTGF5ZXIgKilwbHVnaW5MYXllcjsKLS0gKEJPT0wpZ2V0Rm9ybVZhbHVlOihOU1N0
cmluZyAqKil2YWx1ZTsKLS0gKHZvaWQpd2ViRnJhbWU6KFdlYkZyYW1lICopd2ViRnJhbWUgZGlk
RmluaXNoTG9hZFdpdGhSZWFzb246KE5QUmVhc29uKXJlYXNvbjsKLS0gKHZvaWQpc2V0SG9zdHNM
YXllcnNJbldpbmRvd1NlcnZlcjooYm9vbClob3N0c0xheWVyc0luV2luZG93U2VydmVyOwotCi1A
ZW5kCi0KLSNlbmRpZiAvLyBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2NhcGVQ
bHVnaW5WaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2Vi
SG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2NGMyNzdiNWY0M2QxNTFiZGE0MTViZWM5YjU5ZDVmM2NjZmMwODVkLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1BsdWdpbnMvSG9zdGVkL1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbQorKysgL2Rldi9u
dWxsCkBAIC0xLDU2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2lmIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKSAmJiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2ltcG9ydCAiV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5W
aWV3LmgiCi0KLSNpbXBvcnQgIkhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtLmgiCi0jaW1wb3J0
ICJOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLmgiCi0jaW1wb3J0ICJOZXRzY2FwZVBsdWdpbkhv
c3RQcm94eS5oIgotI2ltcG9ydCAiTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5LmgiCi0jaW1w
b3J0ICJXZWJGcmFtZUludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJUZXh0SW5wdXRXaW5kb3dDb250
cm9sbGVyLmgiCi0jaW1wb3J0ICJXZWJVSURlbGVnYXRlLmgiCi0jaW1wb3J0ICJXZWJWaWV3Lmgi
Ci0jaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKLQotI2ltcG9ydCA8Q29yZUZvdW5kYXRpb24v
Q29yZUZvdW5kYXRpb24uaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVUaHJl
YWRpbmcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQnJpZGdlSlNDLmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L0ZyYW1lLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxQbHVnSW5FbGVtZW50
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlckVtYmVkZGVkT2JqZWN0Lmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUNBTGF5ZXJF
eHRyYXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUpJVE9wZXJhdGlvbnMuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvcnVudGltZV9yb290Lmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NvY29hL1F1YXJ0
ekNvcmVTUEkuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvTWFp
blRocmVhZC5oPgotI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLSAg
ICAKLWNsYXNzIFNvZnR3YXJlQ0FSZW5kZXJlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgU29mdHdhcmVDQVJlbmRlcmVyKHVpbnQzMl90IGNv
bnRleHRJRCkKLSAgICAgICAgOiBtX2NvbnRleHQgeyBbQ0FDb250ZXh0IGxvY2FsQ29udGV4dF0g
fQotICAgICAgICAsIG1fcmVuZGVyQ29udGV4dCB7IENBUmVuZGVyQ0dOZXcoMCkgfQotICAgIHsK
LSAgICAgICAgW21fY29udGV4dCBzZXRMYXllcjpbQ0FMYXllciBfd2ViX3JlbmRlckxheWVyV2l0
aENvbnRleHRJRDpjb250ZXh0SURdXTsKLSAgICB9Ci0KLSAgICB+U29mdHdhcmVDQVJlbmRlcmVy
KCkKLSAgICB7Ci0gICAgICAgIENBUmVuZGVyQ0dEZXN0cm95KG1fcmVuZGVyQ29udGV4dCk7Ci0g
ICAgfQotCi0gICAgdm9pZCByZW5kZXIoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHUmVjdCByZWN0
KQotICAgIHsKLSAgICAgICAgQ0FSZW5kZXJVcGRhdGUqIHVwZGF0ZSA9IENBUmVuZGVyVXBkYXRl
QmVnaW4obnVsbHB0ciwgMCwgQ0FDdXJyZW50TWVkaWFUaW1lKCksIG51bGxwdHIsIDAsICZyZWN0
KTsKLSAgICAgICAgQ0FSZW5kZXJVcGRhdGVBZGRDb250ZXh0KHVwZGF0ZSwgW21fY29udGV4dCBy
ZW5kZXJDb250ZXh0XSk7Ci0gICAgICAgIENBUmVuZGVyVXBkYXRlQWRkUmVjdCh1cGRhdGUsICZy
ZWN0KTsKLSAgICAgICAgQ0FSZW5kZXJDR1JlbmRlcihtX3JlbmRlckNvbnRleHQsIHVwZGF0ZSwg
Y29udGV4dCk7Ci0gICAgICAgIENBUmVuZGVyVXBkYXRlRmluaXNoKHVwZGF0ZSk7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxDQUNvbnRleHQ+IG1fY29udGV4dDsKLSAgICBDQVJl
bmRlckNHQ29udGV4dCogbV9yZW5kZXJDb250ZXh0OwotfTsKLQotfQotCi1leHRlcm4gIkMiIHsK
LSNpbXBvcnQgIldlYktpdFBsdWdpbkNsaWVudFNlcnZlci5oIgotI2ltcG9ydCAiV2ViS2l0UGx1
Z2luSG9zdC5oIgotfQotCi0jaWYgSEFWRShPVVRfT0ZfUFJPQ0VTU19MQVlFUl9IT1NUSU5HKQot
QGludGVyZmFjZSBOU1dpbmRvdyAoRGV0YWlscykKLS0gKEJPT0wpX2hvc3RzTGF5ZXJzSW5XaW5k
b3dTZXJ2ZXI7Ci1AZW5kCi0jZW5kaWYKLQotQGltcGxlbWVudGF0aW9uIFdlYkhvc3RlZE5ldHNj
YXBlUGx1Z2luVmlldwotCi0rICh2b2lkKWluaXRpYWxpemUKLXsKLSNpZiAhUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLSAgICBKU0M6OmluaXRpYWxpemUoKTsKLSAgICBXVEY6OmluaXRpYWxpemVNYWlu
VGhyZWFkKCk7Ci0gICAgV2ViQ29yZTo6cG9wdWxhdGVKSVRPcGVyYXRpb25zKCk7Ci0jZW5kaWYK
LSAgICBzZW5kVXNlckNoYW5nZU5vdGlmaWNhdGlvbnMoKTsKLX0KLQotLSAoaWQpaW5pdFdpdGhG
cmFtZTooTlNSZWN0KWZyYW1lCi0gICAgICBwbHVnaW5QYWNrYWdlOihXZWJOZXRzY2FwZVBsdWdp
blBhY2thZ2UgKilwbHVnaW5QYWNrYWdlCi0gICAgICAgICAgICAgICAgVVJMOihOU1VSTCAqKVVS
TAotICAgICAgICAgICAgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMCi0gICAgICAgICAgIE1JTUVU
eXBlOihOU1N0cmluZyAqKU1JTUUKLSAgICAgIGF0dHJpYnV0ZUtleXM6KE5TQXJyYXkgKilrZXlz
Ci0gICAgYXR0cmlidXRlVmFsdWVzOihOU0FycmF5ICopdmFsdWVzCi0gICAgICAgbG9hZE1hbnVh
bGx5OihCT09MKWxvYWRNYW51YWxseQotICAgICAgICAgICAgZWxlbWVudDooUmVmUHRyPFdlYkNv
cmU6OkhUTUxQbHVnSW5FbGVtZW50PiYmKWVsZW1lbnQKLXsKLSAgICBzZWxmID0gW3N1cGVyIGlu
aXRXaXRoRnJhbWU6ZnJhbWUgcGx1Z2luUGFja2FnZTpwbHVnaW5QYWNrYWdlIFVSTDpVUkwgYmFz
ZVVSTDpiYXNlVVJMIE1JTUVUeXBlOk1JTUUgYXR0cmlidXRlS2V5czprZXlzIGF0dHJpYnV0ZVZh
bHVlczp2YWx1ZXMgbG9hZE1hbnVhbGx5OmxvYWRNYW51YWxseSBlbGVtZW50OldURk1vdmUoZWxl
bWVudCldOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBy
ZXR1cm4gc2VsZjsKLX0gICAgCi0KLS0gKHZvaWQpaGFuZGxlTW91c2VNb3ZlZDooTlNFdmVudCAq
KWV2ZW50Ci17Ci0gICAgaWYgKF9pc1N0YXJ0ZWQgJiYgX3Byb3h5KQotICAgICAgICBfcHJveHkt
Pm1vdXNlRXZlbnQoc2VsZiwgZXZlbnQsIE5QQ29jb2FFdmVudE1vdXNlTW92ZWQpOwotfQotCi0t
ICh2b2lkKXNldEF0dHJpYnV0ZUtleXM6KE5TQXJyYXkgKilrZXlzIGFuZFZhbHVlczooTlNBcnJh
eSAqKXZhbHVlcwotewotICAgIEFTU0VSVCghX2F0dHJpYnV0ZUtleXMpOwotICAgIEFTU0VSVCgh
X2F0dHJpYnV0ZVZhbHVlcyk7Ci0gICAgCi0gICAgX2F0dHJpYnV0ZUtleXMgPSBhZG9wdE5TKFtr
ZXlzIGNvcHldKTsKLSAgICBfYXR0cmlidXRlVmFsdWVzID0gYWRvcHROUyhbdmFsdWVzIGNvcHld
KTsKLX0KLQotLSAoQk9PTCl3aW5kb3dIb3N0c0xheWVyc0luV2luZG93U2VydmVyCi17Ci0jaWYg
SEFWRShPVVRfT0ZfUFJPQ0VTU19MQVlFUl9IT1NUSU5HKQotICAgIHJldHVybiBbW1tzZWxmIHdl
YlZpZXddIHdpbmRvd10gX2hvc3RzTGF5ZXJzSW5XaW5kb3dTZXJ2ZXJdOwotI2Vsc2UKLSAgICBy
ZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotLSAoQk9PTCljcmVhdGVQbHVnaW4KLXsKLSAgICBB
U1NFUlQoIV9wcm94eSk7Ci0KLSAgICBOU1N0cmluZyAqdXNlckFnZW50ID0gW1tzZWxmIHdlYlZp
ZXddIHVzZXJBZ2VudEZvclVSTDpfYmFzZVVSTC5nZXQoKV07Ci0gICAgQk9PTCBhY2NlbGVyYXRl
ZENvbXBvc2l0aW5nRW5hYmxlZCA9IGZhbHNlOwotICAgIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdF
bmFibGVkID0gW1tbc2VsZiB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gYWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0VuYWJsZWRdOwotICAgIF9ob3N0c0xheWVyc0luV2luZG93U2VydmVyID0gW3NlbGYgd2lu
ZG93SG9zdHNMYXllcnNJbldpbmRvd1NlcnZlcl07Ci0KLSAgICBfcHJveHkgPSBOZXRzY2FwZVBs
dWdpbkhvc3RNYW5hZ2VyOjpzaW5nbGV0b24oKS5pbnN0YW50aWF0ZVBsdWdpbihbX3BsdWdpblBh
Y2thZ2UuZ2V0KCkgcGF0aF0sIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5Ib3N0QXJjaGl0
ZWN0dXJlXSwgW19wbHVnaW5QYWNrYWdlLmdldCgpIGJ1bmRsZUlkZW50aWZpZXJdLCBzZWxmLCBf
TUlNRVR5cGUuZ2V0KCksIF9hdHRyaWJ1dGVLZXlzLmdldCgpLCBfYXR0cmlidXRlVmFsdWVzLmdl
dCgpLCB1c2VyQWdlbnQsIF9zb3VyY2VVUkwuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21vZGUgPT0gTlBf
RlVMTCwgX2lzUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCwgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Vu
YWJsZWQsIF9ob3N0c0xheWVyc0luV2luZG93U2VydmVyKTsKLSAgICBpZiAoIV9wcm94eSkgCi0g
ICAgICAgIHJldHVybiBOTzsKLQotICAgIGlmIChfcHJveHktPnJlbmRlcmVyVHlwZSgpID09IFVz
ZVNvZnR3YXJlUmVuZGVyZXIpCi0gICAgICAgIF9zb2Z0d2FyZVJlbmRlcmVyID0gbWFrZVVuaXF1
ZTxTb2Z0d2FyZUNBUmVuZGVyZXI+KF9wcm94eS0+cmVuZGVyQ29udGV4dElEKCkpOwotICAgIGVs
c2UKLSAgICAgICAgW3NlbGYgY3JlYXRlUGx1Z2luTGF5ZXJdOwotICAgIAotICAgIC8vIFVwZGF0
ZSB0aGUgd2luZG93IGZyYW1lLgotICAgIF9wcm94eS0+d2luZG93RnJhbWVDaGFuZ2VkKFtbc2Vs
ZiB3aW5kb3ddIGZyYW1lXSk7Ci0gICAgCi0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAodm9pZClj
cmVhdGVQbHVnaW5MYXllcgotewotICAgIEJPT0wgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJs
ZWQgPSBmYWxzZTsKLSAgICBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCA9IFtbW3NlbGYg
d2ViVmlld10gcHJlZmVyZW5jZXNdIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkXTsKLQot
ICAgIF9wbHVnaW5MYXllciA9IFtDQUxheWVyIF93ZWJfcmVuZGVyTGF5ZXJXaXRoQ29udGV4dElE
Ol9wcm94eS0+cmVuZGVyQ29udGV4dElEKCldOwotCi0gICAgaWYgKGFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdFbmFibGVkICYmIF9wcm94eS0+cmVuZGVyZXJUeXBlKCkgPT0gVXNlQWNjZWxlcmF0ZWRD
b21wb3NpdGluZykgewotICAgICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGNhbiBiZSBzaGFyZWQg
YmV0d2VlbiBXZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcgYW5kIFdlYk5ldHNjYXBlUGx1Z2lu
Vmlldy4KLSAgICAgICAgLy8gU2luY2UgdGhpcyBsYXllciBpc24ndCBnb2luZyB0byBiZSBpbnNl
cnRlZCBpbnRvIGEgdmlldywgd2UgbmVlZCB0byBjcmVhdGUgYW5vdGhlciBsYXllciBhbmQgZmxp
cCBpdHMgZ2VvbWV0cnkKLSAgICAgICAgLy8gaW4gb3JkZXIgdG8gZ2V0IHRoZSBjb29yZGluYXRl
IHN5c3RlbSByaWdodC4KLSAgICAgICAgUmV0YWluUHRyPENBTGF5ZXI+IHJlYWxQbHVnaW5MYXll
ciA9IFdURk1vdmUoX3BsdWdpbkxheWVyKTsKLQotICAgICAgICBfcGx1Z2luTGF5ZXIgPSBhZG9w
dE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOwotICAgICAgICBfcGx1Z2luTGF5ZXIuZ2V0KCku
Ym91bmRzID0gcmVhbFBsdWdpbkxheWVyLmdldCgpLmJvdW5kczsKLSAgICAgICAgX3BsdWdpbkxh
eWVyLmdldCgpLmdlb21ldHJ5RmxpcHBlZCA9IFlFUzsKLQotICAgICAgICByZWFsUGx1Z2luTGF5
ZXIuZ2V0KCkuYXV0b3Jlc2l6aW5nTWFzayA9IGtDQUxheWVyV2lkdGhTaXphYmxlIHwga0NBTGF5
ZXJIZWlnaHRTaXphYmxlOwotICAgICAgICBbX3BsdWdpbkxheWVyLmdldCgpIGFkZFN1YmxheWVy
OnJlYWxQbHVnaW5MYXllci5nZXQoKV07Ci0KLSAgICAgICAgLy8gRWFnZXJseSBlbnRlciBjb21w
b3NpdGluZyBtb2RlLCBzaW5jZSB3ZSBrbm93IHdlJ2xsIG5lZWQgaXQuIFRoaXMgYXZvaWRzIGZp
cmluZyBzZXROZWVkc1N0eWxlUmVjYWxjKCkKLSAgICAgICAgLy8gZm9yIGlmcmFtZXMgdGhhdCBj
b250YWluIGNvbXBvc2l0ZWQgcGx1Z2lucyBhdCBiYWQgdGltZXMuIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTAzMwotICAgICAgICBjb3JlKFtzZWxmIHdlYkZyYW1l
XSktPnZpZXcoKS0+ZW50ZXJDb21wb3NpdGluZ01vZGUoKTsKLSAgICAgICAgW3NlbGYgZWxlbWVu
dF0tPmludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgc2VsZi53YW50c0xheWVyID0gWUVTOwotfQotCi0tICh2b2lkKXNldEhvc3RzTGF5ZXJz
SW5XaW5kb3dTZXJ2ZXI6KGJvb2wpaG9zdHNMYXllcnNJbldpbmRvd1NlcnZlcgotewotICAgIGlm
IChfcHJveHktPnJlbmRlcmVyVHlwZSgpID09IFVzZVNvZnR3YXJlUmVuZGVyZXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFJldGFpblB0cjxDQUxheWVyPiBjdXJyZW50U3VwZXJsYXllciA9IFtf
cGx1Z2luTGF5ZXIgc3VwZXJsYXllcl07Ci0KLSAgICBfaG9zdHNMYXllcnNJbldpbmRvd1NlcnZl
ciA9IGhvc3RzTGF5ZXJzSW5XaW5kb3dTZXJ2ZXI7Ci0KLSAgICBbc2VsZiBjcmVhdGVQbHVnaW5M
YXllcl07Ci0gICAgW3NlbGYgc2V0TGF5ZXI6Y3VycmVudFN1cGVybGF5ZXIuZ2V0KCldOwotfQot
Ci0vLyBGSVhNRTogVGhpcyBtZXRob2QgaXMgYW4gaWRlYWwgY2FuZGlkYXRlIHRvIG1vdmUgdXAg
dG8gdGhlIGJhc2UgY2xhc3MKLS0gKENBTGF5ZXIgKilwbHVnaW5MYXllcgotewotICAgIHJldHVy
biBfcGx1Z2luTGF5ZXIuZ2V0KCk7Ci19Ci0KLS0gKEJPT0wpZ2V0Rm9ybVZhbHVlOihOU1N0cmlu
ZyAqKil2YWx1ZQotewotICAgIC8vIEZJWE1FOiBXZSBjYW5ub3QgaW1wbGVtZW50IHRoaXMgbWV0
aG9kIGZvciBub3cgYmVjYXVzZSBOUFBfR2V0VmFsdWUKLSAgICAvLyBpcyBub3QgY3VycmVudGx5
IGV4cG9zZWQgYnkgdGhlIHBsdWdpbiBob3N0LiBPbmNlIHdlIGhhdmUgYW4gSVBDIHJvdXRpbmUK
LSAgICAvLyB3aGljaCBhbGxvd3MgdXMgdG8gaW52b2tlIE5QUF9HZXRWYWx1ZSwgd2UgY291bGQg
aW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLSAodm9pZClz
ZXRMYXllcjooQ0FMYXllciAqKW5ld0xheWVyCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IHVzZSB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbiBhcyBXZWJOZXRzY2FwZVBsdWdpblZpZXcgKGFu
ZCBtb3ZlIHRvIHRoZSBiYXNlIGNsYXNzKS4KLSAgICBbc3VwZXIgc2V0TGF5ZXI6bmV3TGF5ZXJd
OwotICAgIAotICAgIGlmIChfcGx1Z2luTGF5ZXIpCi0gICAgICAgIFtuZXdMYXllciBhZGRTdWJs
YXllcjpfcGx1Z2luTGF5ZXIuZ2V0KCldOwotfQotCi0tICh2b2lkKXByaXZhdGVCcm93c2luZ01v
ZGVEaWRDaGFuZ2UKLXsKLSAgICBpZiAoX3Byb3h5KQotICAgICAgICBfcHJveHktPnByaXZhdGVC
cm93c2luZ01vZGVEaWRDaGFuZ2UoX2lzUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk7Ci19Ci0KLS0g
KHZvaWQpbG9hZFN0cmVhbQotewotfQotCi0tICh2b2lkKXVwZGF0ZUFuZFNldFdpbmRvdwotewot
ICAgIGlmICghX3Byb3h5KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gVGhlIGJhc2Ug
Y29vcmRpbmF0ZXMgb2YgYSB3aW5kb3cgYW5kIGl0J3MgY29udGVudFZpZXcgaGFwcGVuIHRvIGJl
IHRoZSBlcXVhbCBhdCBhIHVzZXJTcGFjZVNjYWxlRmFjdG9yCi0gICAgLy8gb2YgMS4gRm9yIG5v
bi0xLjAgc2NhbGUgZmFjdG9ycyB0aGlzIGFzc3VtcHRpb24gaXMgZmFsc2UuCi0gICAgTlNWaWV3
ICp3aW5kb3dDb250ZW50VmlldyA9IFtbc2VsZiB3aW5kb3ddIGNvbnRlbnRWaWV3XTsKLSAgICBO
U1JlY3QgYm91bmRzSW5XaW5kb3cgPSBbc2VsZiBjb252ZXJ0UmVjdDpbc2VsZiBib3VuZHNdIHRv
Vmlldzp3aW5kb3dDb250ZW50Vmlld107Ci0KLSAgICBOU1JlY3QgdmlzaWJsZVJlY3RJbldpbmRv
dzsKLSAgICAKLSAgICAvLyBDb3JlIEFuaW1hdGlvbiBwbHVnLWlucyBuZWVkIHRvIGJlIHVwZGF0
ZWQgKHdpdGggYSAwLDAsMCwwIGNsaXBSZWN0KSB3aGVuCi0gICAgLy8gbW92ZWQgdG8gYSBiYWNr
Z3JvdW5kIHRhYi4gV2UgZG9uJ3QgZG8gdGhpcyBmb3IgQ29yZSBHcmFwaGljcyBwbHVnLWlucyBh
cwotICAgIC8vIG9sZGVyIHZlcnNpb25zIG9mIEZsYXNoIGhhdmUgaGlzdG9yaWNhbCBXZWJLaXQt
c3BlY2lmaWMgY29kZSB0aGF0IGlzbid0Ci0gICAgLy8gY29tcGF0aWJsZSB3aXRoIHRoaXMgYmVo
YXZpb3IuICAgIAotICAgIEJPT0wgc2hvdWxkQ2xpcE91dFBsdWdpbiA9IF9wbHVnaW5MYXllciAm
JiBbc2VsZiBzaG91bGRDbGlwT3V0UGx1Z2luXTsKLSAgICBpZiAoIXNob3VsZENsaXBPdXRQbHVn
aW4pCi0gICAgICAgIHZpc2libGVSZWN0SW5XaW5kb3cgPSBbc2VsZiBhY3R1YWxWaXNpYmxlUmVj
dEluV2luZG93XTsKLSAgICBlbHNlCi0gICAgICAgIHZpc2libGVSZWN0SW5XaW5kb3cgPSBOU1pl
cm9SZWN0OwotICAgIAotICAgIC8vIEZsaXAgWSB0byBjb252ZXJ0IE5TV2luZG93IGNvb3JkaW5h
dGVzIHRvIHRvcC1sZWZ0LWJhc2VkIHdpbmRvdyBjb29yZGluYXRlcy4KLSAgICBmbG9hdCBib3Jk
ZXJWaWV3SGVpZ2h0ID0gW1tzZWxmIGN1cnJlbnRXaW5kb3ddIGZyYW1lXS5zaXplLmhlaWdodDsK
LSAgICBib3VuZHNJbldpbmRvdy5vcmlnaW4ueSA9IGJvcmRlclZpZXdIZWlnaHQgLSBOU01heFko
Ym91bmRzSW5XaW5kb3cpOwotICAgICAgICAKLSAgICBpZiAoIXNob3VsZENsaXBPdXRQbHVnaW4p
Ci0gICAgICAgIHZpc2libGVSZWN0SW5XaW5kb3cub3JpZ2luLnkgPSBib3JkZXJWaWV3SGVpZ2h0
IC0gTlNNYXhZKHZpc2libGVSZWN0SW5XaW5kb3cpOwotCi0gICAgX3ByZXZpb3VzU2l6ZSA9IGJv
dW5kc0luV2luZG93LnNpemU7Ci0gICAgCi0gICAgX3Byb3h5LT5yZXNpemUoYm91bmRzSW5XaW5k
b3csIHZpc2libGVSZWN0SW5XaW5kb3cpOwotCi0gICAgYm9vbCBzaG91bGRIb3N0TGF5ZXJzSW5X
aW5kb3dTZXJ2ZXIgPSBbc2VsZiB3aW5kb3dIb3N0c0xheWVyc0luV2luZG93U2VydmVyXTsKLSAg
ICBpZiAoX2hvc3RzTGF5ZXJzSW5XaW5kb3dTZXJ2ZXIgIT0gc2hvdWxkSG9zdExheWVyc0luV2lu
ZG93U2VydmVyKQotICAgICAgICBfcHJveHktPnNldFNob3VsZEhvc3RMYXllcnNJbldpbmRvd1Nl
cnZlcihzaG91bGRIb3N0TGF5ZXJzSW5XaW5kb3dTZXJ2ZXIpOwotfQotCi0tICh2b2lkKXdpbmRv
d0ZvY3VzQ2hhbmdlZDooQk9PTCloYXNGb2N1cwotewotICAgIGlmIChfcHJveHkpCi0gICAgICAg
IF9wcm94eS0+d2luZG93Rm9jdXNDaGFuZ2VkKGhhc0ZvY3VzKTsKLX0KLQotLSAoQk9PTClzaG91
bGRTdG9wCi17Ci0gICAgaWYgKCFfcHJveHkpCi0gICAgICAgIHJldHVybiBZRVM7Ci0gICAgCi0g
ICAgcmV0dXJuIF9wcm94eS0+c2hvdWxkU3RvcCgpOwotfQotCi0tICh2b2lkKWRlc3Ryb3lQbHVn
aW4KLXsKLSAgICBpZiAoX3Byb3h5KSB7Ci0gICAgICAgIF9zb2Z0d2FyZVJlbmRlcmVyID0gbnVs
bHB0cjsKLSAgICAgICAgX3Byb3h5LT5kZXN0cm95KCk7Ci0gICAgICAgIF9wcm94eSA9IG51bGxw
dHI7Ci0gICAgfQotICAgIAotICAgIF9wbHVnaW5MYXllciA9IDA7Ci19Ci0KLS0gKHZvaWQpc3Rh
cnRUaW1lcnMKLXsKLSAgICBpZiAoX3Byb3h5KQotICAgICAgICBfcHJveHktPnN0YXJ0VGltZXJz
KF9pc0NvbXBsZXRlbHlPYnNjdXJlZCk7Ci19Ci0KLS0gKHZvaWQpc3RvcFRpbWVycwotewotICAg
IGlmIChfcHJveHkpCi0gICAgICAgIF9wcm94eS0+c3RvcFRpbWVycygpOwotfQotCi0tICh2b2lk
KWZvY3VzQ2hhbmdlZAotewotICAgIGlmIChfcHJveHkpCi0gICAgICAgIF9wcm94eS0+Zm9jdXND
aGFuZ2VkKF9oYXNGb2N1cyk7Ci19Ci0KLS0gKHZvaWQpd2luZG93RnJhbWVEaWRDaGFuZ2U6KE5T
Tm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uIAotewotICAgIGlmIChfcHJveHkgJiYgW3NlbGYg
d2luZG93XSkKLSAgICAgICAgX3Byb3h5LT53aW5kb3dGcmFtZUNoYW5nZWQoW1tzZWxmIHdpbmRv
d10gZnJhbWVdKTsKLX0KLQotLSAodm9pZClhZGRXaW5kb3dPYnNlcnZlcnMKLXsKLSAgICBbc3Vw
ZXIgYWRkV2luZG93T2JzZXJ2ZXJzXTsKLSAgICAKLSAgICBBU1NFUlQoW3NlbGYgd2luZG93XSk7
Ci0gICAgCi0gICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107Ci0gICAgCi0gICAg
TlNOb3RpZmljYXRpb25DZW50ZXIgKm5vdGlmaWNhdGlvbkNlbnRlciA9IFtOU05vdGlmaWNhdGlv
bkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2Vy
dmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHdpbmRvd0ZyYW1lRGlkQ2hhbmdlOikgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTpOU1dpbmRvd0RpZE1vdmVOb3RpZmljYXRp
b24gb2JqZWN0OndpbmRvd107Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpz
ZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih3aW5kb3dGcmFtZURpZENoYW5nZTopCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZTpOU1dpbmRvd0RpZFJlc2l6ZU5vdGlmaWNhdGlvbiBv
YmplY3Q6d2luZG93XTsgICAgCi0KLSAgICBpZiAoX3Byb3h5KQotICAgICAgICBfcHJveHktPndp
bmRvd0ZyYW1lQ2hhbmdlZChbd2luZG93IGZyYW1lXSk7Ci0gICAgW3NlbGYgdXBkYXRlQW5kU2V0
V2luZG93XTsKLX0KLQotLSAodm9pZClyZW1vdmVXaW5kb3dPYnNlcnZlcnMKLXsKLSAgICBbc3Vw
ZXIgcmVtb3ZlV2luZG93T2JzZXJ2ZXJzXTsKLSAgICAKLSAgICBOU05vdGlmaWNhdGlvbkNlbnRl
ciAqbm90aWZpY2F0aW9uQ2VudGVyID0gW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50
ZXJdOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5T
V2luZG93RGlkTW92ZU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKLSAgICBbbm90aWZpY2F0aW9u
Q2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpOU1dpbmRvd0RpZFJlc2l6ZU5vdGlmaWNh
dGlvbiBvYmplY3Q6bmlsXTsKLX0KLQotLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKilldmVu
dAotewotICAgIGlmIChfaXNTdGFydGVkICYmIF9wcm94eSkKLSAgICAgICAgX3Byb3h5LT5tb3Vz
ZUV2ZW50KHNlbGYsIGV2ZW50LCBOUENvY29hRXZlbnRNb3VzZURvd24pOwotfQotCi0tICh2b2lk
KW1vdXNlVXA6KE5TRXZlbnQgKilldmVudAotewotICAgIGlmIChfaXNTdGFydGVkICYmIF9wcm94
eSkKLSAgICAgICAgX3Byb3h5LT5tb3VzZUV2ZW50KHNlbGYsIGV2ZW50LCBOUENvY29hRXZlbnRN
b3VzZVVwKTsKLX0KLQotLSAodm9pZCltb3VzZURyYWdnZWQ6KE5TRXZlbnQgKilldmVudAotewot
ICAgIGlmIChfaXNTdGFydGVkICYmIF9wcm94eSkKLSAgICAgICAgX3Byb3h5LT5tb3VzZUV2ZW50
KHNlbGYsIGV2ZW50LCBOUENvY29hRXZlbnRNb3VzZURyYWdnZWQpOwotfQotCi0tICh2b2lkKWhh
bmRsZU1vdXNlRW50ZXJlZDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgLy8gU2V0IGN1cnNvciB0
byBhcnJvdy4gUGx1Z2lucyBvZnRlbiBoYW5kbGUgY3Vyc29yIGludGVybmFsbHksIGJ1dCB0aG9z
ZSB0aGF0IGRvbid0IHdpbGwganVzdCBnZXQgdGhpcyBkZWZhdWx0IG9uZS4KLSAgICBbW05TQ3Vy
c29yIGFycm93Q3Vyc29yXSBzZXRdOwotCi0gICAgaWYgKF9pc1N0YXJ0ZWQgJiYgX3Byb3h5KQot
ICAgICAgICBfcHJveHktPm1vdXNlRXZlbnQoc2VsZiwgZXZlbnQsIE5QQ29jb2FFdmVudE1vdXNl
RW50ZXJlZCk7Ci19Ci0KLS0gKHZvaWQpaGFuZGxlTW91c2VFeGl0ZWQ6KE5TRXZlbnQgKilldmVu
dAotewotICAgIGlmIChfaXNTdGFydGVkICYmIF9wcm94eSkKLSAgICAgICAgX3Byb3h5LT5tb3Vz
ZUV2ZW50KHNlbGYsIGV2ZW50LCBOUENvY29hRXZlbnRNb3VzZUV4aXRlZCk7Ci0KLSAgICAvLyBT
ZXQgY3Vyc29yIGJhY2sgdG8gYXJyb3cgY3Vyc29yLiAgQmVjYXVzZSBOU0N1cnNvciBkb2Vzbid0
IGtub3cgYWJvdXQgY2hhbmdlcyB0aGF0IHRoZSBwbHVnaW4gbWFkZSwgd2UgY291bGQgZ2V0IGNv
bmZ1c2VkIGFib3V0IHdoYXQgd2UgdGhpbmsgdGhlCi0gICAgLy8gY3VycmVudCBjdXJzb3IgaXMg
b3RoZXJ3aXNlLiAgVGhlcmVmb3JlIHdlIGhhdmUgbm8gY2hvaWNlIGJ1dCB0byB1bmNvbmRpdGlv
bmFsbHkgcmVzZXQgdGhlIGN1cnNvciB3aGVuIHRoZSBtb3VzZSBleGl0cyB0aGUgcGx1Z2luLgot
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBqb2Igb2YgcGx1Z2luIGhvc3QsIHNlZSA8cmRh
cjovL3Byb2JsZW0vNzY1NDQzND4uCi0gICAgW1tOU0N1cnNvciBhcnJvd0N1cnNvcl0gc2V0XTsK
LX0KLQotLSAodm9pZClzY3JvbGxXaGVlbDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgYm9vbCBw
cm9jZXNzZWRFdmVudCA9IGZhbHNlOwotICAgIAotICAgIGlmIChfaXNTdGFydGVkICYmIF9wcm94
eSkKLSAgICAgICAgcHJvY2Vzc2VkRXZlbnQgPSBfcHJveHktPndoZWVsRXZlbnQoc2VsZiwgZXZl
bnQpOwotICAgIAotICAgIGlmICghcHJvY2Vzc2VkRXZlbnQpCi0gICAgICAgIFtzdXBlciBzY3Jv
bGxXaGVlbDpldmVudF07Ci19Ci0KLS0gKE5TVGV4dElucHV0Q29udGV4dCAqKWlucHV0Q29udGV4
dAotewotICAgIHJldHVybiBbW1dlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIgc2hhcmVkVGV4
dElucHV0V2luZG93Q29udHJvbGxlcl0gaW5wdXRDb250ZXh0XTsKLX0KLQotLSAodm9pZClrZXlE
b3duOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBpZiAoIV9pc1N0YXJ0ZWQgfHwgIV9wcm94eSkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIE5TU3RyaW5nICpzdHJpbmcgPSBuaWw7Ci0gICAg
aWYgKFtbV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlciBzaGFyZWRUZXh0SW5wdXRXaW5kb3dD
b250cm9sbGVyXSBpbnRlcnByZXRLZXlFdmVudDpldmVudCBzdHJpbmc6JnN0cmluZ10pIHsKLSAg
ICAgICAgaWYgKHN0cmluZykKLSAgICAgICAgICAgIF9wcm94eS0+aW5zZXJ0VGV4dChzdHJpbmcp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIF9wcm94eS0+a2V5RXZlbnQoc2Vs
ZiwgZXZlbnQsIE5QQ29jb2FFdmVudEtleURvd24pOwotfQotCi0tICh2b2lkKWtleVVwOihOU0V2
ZW50ICopZXZlbnQKLXsKLSAgICBpZiAoX2lzU3RhcnRlZCAmJiBfcHJveHkpCi0gICAgICAgIF9w
cm94eS0+a2V5RXZlbnQoc2VsZiwgZXZlbnQsIE5QQ29jb2FFdmVudEtleVVwKTsKLX0KLQotLSAo
dm9pZClmbGFnc0NoYW5nZWQ6KE5TRXZlbnQgKilldmVudAotewotICAgIGlmIChfaXNTdGFydGVk
ICYmIF9wcm94eSkKLSAgICAgICAgX3Byb3h5LT5mbGFnc0NoYW5nZWQoZXZlbnQpOwotfQotCi0t
ICh2b2lkKXNlbmRNb2RpZmllckV2ZW50V2l0aEtleUNvZGU6KGludClrZXlDb2RlIGNoYXJhY3Rl
cjooY2hhciljaGFyYWN0ZXIKLXsKLSAgICBpZiAoX2lzU3RhcnRlZCAmJiBfcHJveHkpCi0gICAg
ICAgIF9wcm94eS0+c3ludGhldGljS2V5RG93bldpdGhDb21tYW5kTW9kaWZpZXIoa2V5Q29kZSwg
Y2hhcmFjdGVyKTsKLX0KLQotLSAodm9pZClwbHVnaW5Ib3N0RGllZAotewotICAgIGlmIChpczxS
ZW5kZXJFbWJlZGRlZE9iamVjdD4oX2VsZW1lbnQtPnJlbmRlcmVyKCkpKQotICAgICAgICBkb3du
Y2FzdDxSZW5kZXJFbWJlZGRlZE9iamVjdD4oKl9lbGVtZW50LT5yZW5kZXJlcigpKS5zZXRQbHVn
aW5VbmF2YWlsYWJpbGl0eVJlYXNvbihSZW5kZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2luQ3Jhc2hl
ZCk7Ci0KLSAgICBfcGx1Z2luTGF5ZXIgPSBuaWw7Ci0gICAgX3Byb3h5ID0gbnVsbHB0cjsKLSAg
ICAKLSAgICAvLyBObyBuZWVkIGZvciB1cyB0byBiZSBsYXllciBiYWNrZWQgYW55bW9yZQotICAg
IHNlbGYud2FudHNMYXllciA9IE5POwotICAgIAotICAgIFtzZWxmIGludmFsaWRhdGVQbHVnaW5D
b250ZW50UmVjdDpbc2VsZiBib3VuZHNdXTsKLX0KLQotLSAodm9pZClkcmF3UmVjdDooTlNSZWN0
KXJlY3QKLXsKLSAgICBpZiAoX2NhY2hlZFNuYXBzaG90KSB7Ci0gICAgICAgIE5TUmVjdCBzb3Vy
Y2VSZWN0ID0geyBOU1plcm9Qb2ludCwgW19jYWNoZWRTbmFwc2hvdC5nZXQoKSBzaXplXSB9Owot
ICAgICAgICBbX2NhY2hlZFNuYXBzaG90LmdldCgpIGRyYXdJblJlY3Q6W3NlbGYgYm91bmRzXSBm
cm9tUmVjdDpzb3VyY2VSZWN0IG9wZXJhdGlvbjpOU0NvbXBvc2l0aW5nT3BlcmF0aW9uU291cmNl
T3ZlciBmcmFjdGlvbjoxXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChfcHJv
eHkpIHsKLSAgICAgICAgaWYgKF9zb2Z0d2FyZVJlbmRlcmVyKSB7Ci0gICAgICAgICAgICBpZiAo
W05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0RHJhd2luZ1RvU2NyZWVuXSkgewotICAg
ICAgICAgICAgICAgIF9zb2Z0d2FyZVJlbmRlcmVyLT5yZW5kZXIoW1tOU0dyYXBoaWNzQ29udGV4
dCBjdXJyZW50Q29udGV4dF0gQ0dDb250ZXh0XSwgTlNSZWN0VG9DR1JlY3QocmVjdCkpOwotICAg
ICAgICAgICAgICAgIF9wcm94eS0+ZGlkRHJhdygpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgX3Byb3h5LT5wcmludChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250
ZXh0XSBDR0NvbnRleHRdLCBbc2VsZiBib3VuZHNdLnNpemUud2lkdGgsIFtzZWxmIGJvdW5kc10u
c2l6ZS5oZWlnaHQpOwotICAgICAgICB9IGVsc2UgaWYgKF9zbmFwc2hvdHRpbmcgJiYgW3NlbGYg
c3VwcG9ydHNTbmFwc2hvdHRpbmddKSB7Ci0gICAgICAgICAgICBfcHJveHktPnNuYXBzaG90KFtb
TlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIENHQ29udGV4dF0sIFtzZWxmIGJvdW5k
c10uc2l6ZS53aWR0aCwgW3NlbGYgYm91bmRzXS5zaXplLmhlaWdodCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi0tIChSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5z
dGFuY2U+KWNyZWF0ZVBsdWdpbkJpbmRpbmdzSW5zdGFuY2U6KFJlZjxKU0M6OkJpbmRpbmdzOjpS
b290T2JqZWN0PiYmKXJvb3RPYmplY3QKLXsKLSAgICBpZiAoIV9wcm94eSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgcmV0dXJuIF9wcm94eS0+Y3JlYXRlQmluZGluZ3NJbnN0
YW5jZShXVEZNb3ZlKHJvb3RPYmplY3QpKTsKLX0KLQotLSAodm9pZClwbHVnaW5WaWV3OihOU1Zp
ZXcgKilwbHVnaW5WaWV3IHJlY2VpdmVkUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyZXNwb25z
ZQotewotICAgIEFTU0VSVChfbG9hZE1hbnVhbGx5KTsKLSAgICBpZiAoIV9wcm94eSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIEFTU0VSVCghX3Byb3h5LT5tYW51YWxTdHJlYW0oKSk7Ci0K
LSAgICBfcHJveHktPnNldE1hbnVhbFN0cmVhbShIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbTo6
Y3JlYXRlKF9wcm94eS5nZXQoKSwgJmNvcmUoW3NlbGYgd2ViRnJhbWVdKS0+bG9hZGVyKCkpKTsK
LSAgICBfcHJveHktPm1hbnVhbFN0cmVhbSgpLT5zdGFydFN0cmVhbVdpdGhSZXNwb25zZShyZXNw
b25zZSk7Ci19Ci0KLS0gKHZvaWQpcGx1Z2luVmlldzooTlNWaWV3ICopcGx1Z2luVmlldyByZWNl
aXZlZERhdGE6KE5TRGF0YSAqKWRhdGEKLXsKLSAgICBBU1NFUlQoX2xvYWRNYW51YWxseSk7Ci0g
ICAgaWYgKCFfcHJveHkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoSG9zdGVkTmV0
c2NhcGVQbHVnaW5TdHJlYW0qIG1hbnVhbFN0cmVhbSA9IF9wcm94eS0+bWFudWFsU3RyZWFtKCkp
Ci0gICAgICAgIG1hbnVhbFN0cmVhbS0+ZGlkUmVjZWl2ZURhdGEoMCwgc3RhdGljX2Nhc3Q8Y29u
c3QgdWludDhfdCo+KFtkYXRhIGJ5dGVzXSksIFtkYXRhIGxlbmd0aF0pOwotfQotCi0tICh2b2lk
KXBsdWdpblZpZXc6KE5TVmlldyAqKXBsdWdpblZpZXcgcmVjZWl2ZWRFcnJvcjooTlNFcnJvciAq
KWVycm9yCi17Ci0gICAgQVNTRVJUKF9sb2FkTWFudWFsbHkpOwotICAgIGlmICghX3Byb3h5KQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFt
KiBtYW51YWxTdHJlYW0gPSBfcHJveHktPm1hbnVhbFN0cmVhbSgpKQotICAgICAgICBtYW51YWxT
dHJlYW0tPmRpZEZhaWwoMCwgZXJyb3IpOwotfQotCi0tICh2b2lkKXBsdWdpblZpZXdGaW5pc2hl
ZExvYWRpbmc6KE5TVmlldyAqKXBsdWdpblZpZXcKLXsKLSAgICBBU1NFUlQoX2xvYWRNYW51YWxs
eSk7Ci0gICAgaWYgKCFfcHJveHkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoSG9z
dGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0qIG1hbnVhbFN0cmVhbSA9IF9wcm94eS0+bWFudWFsU3Ry
ZWFtKCkpCi0gICAgICAgIG1hbnVhbFN0cmVhbS0+ZGlkRmluaXNoTG9hZGluZygwKTsKLX0KLQot
LSAodm9pZCl3ZWJGcmFtZTooV2ViRnJhbWUgKil3ZWJGcmFtZSBkaWRGaW5pc2hMb2FkV2l0aFJl
YXNvbjooTlBSZWFzb24pcmVhc29uCi17Ci0gICAgaWYgKF9pc1N0YXJ0ZWQgJiYgX3Byb3h5KQot
ICAgICAgICBfcHJveHktPndlYkZyYW1lRGlkRmluaXNoTG9hZFdpdGhSZWFzb24od2ViRnJhbWUs
IHJlYXNvbik7Ci19Ci0KLS0gKHZvaWQpd2ViRnJhbWU6KFdlYkZyYW1lICopd2ViRnJhbWUgZGlk
RmluaXNoTG9hZFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yCi17Ci0gICAgTlBSZWFzb24gcmVh
c29uID0gTlBSRVNfRE9ORTsKLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIHJlYXNvbiA9IEhvc3Rl
ZE5ldHNjYXBlUGx1Z2luU3RyZWFtOjpyZWFzb25Gb3JFcnJvcihlcnJvcik7Ci0gICAgW3NlbGYg
d2ViRnJhbWU6d2ViRnJhbWUgZGlkRmluaXNoTG9hZFdpdGhSZWFzb246cmVhc29uXTsKLX0KLQot
QGVuZAotCi0jZW5kaWYgLy8gVVNFKFBMVUdJTl9IT1NUX1BST0NFU1MpICYmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1
Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luQWdlbnQuZGVmcyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1BsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkFnZW50LmRlZnMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDEzMGNmNjFmMjRlNjNlNThhYzllNDkyMjkzNWMwMTI4OWQzNDU5NTAu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luQWdlbnQuZGVmcworKysg
L2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLSAKLSNpbmNsdWRlIDxXZWJLaXRMZWdhY3kvV2ViS2l0UGx1Z2luSG9z
dFR5cGVzLmRlZnM+Ci0KLXN1YnN5c3RlbSBXZWJLaXRQbHVnaW5BZ2VudCAxMDA7Ci0KLXNlcnZl
cnByZWZpeCBXS1BBOwotdXNlcnByZWZpeCBfV0tQQTsKLQotcm91dGluZSBDaGVja0luQXBwbGlj
YXRpb24oc2VydmVyUG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBTZXJ2ZXJBdWRpdFRva2VuIHRva2VuIDphdWRpdF90b2tlbl90OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXBwbGljYXRpb25OYW1lIDphcHBsaWNhdGlvbl9uYW1lX3Q7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgcGx1Z2luVmVuZG9yUG9ydCA6bWFjaF9wb3J0X21ha2Vf
c2VuZF90KTsKLQotcm91dGluZSBTcGF3blBsdWdpbkhvc3QocGx1Z2luVmVuZG9yUG9ydCA6bWFj
aF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcmVwbHlwb3J0IF9yZXBseVBvcnQg
Om1hY2hfcG9ydF9tYWtlX3NlbmRfb25jZV90OwotICAgICAgICAgICAgICAgICAgICAgICAgb3B0
aW9ucyA6cGxpc3RfYnl0ZXNfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCBwbHVnaW5I
b3N0UG9ydDogbWFjaF9wb3J0X21vdmVfc2VuZF90KTsKLQotcm91dGluZSBDaGVja0luUGx1Z2lu
SG9zdChzZXJ2ZXJQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
cGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF9tb3ZlX3NlbmRfdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2VydmVyQXVkaXRUb2tlbiB0b2tlbiA6YXVkaXRfdG9rZW5fdCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5B
Z2VudFJlcGx5LmRlZnMgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9X
ZWJLaXRQbHVnaW5BZ2VudFJlcGx5LmRlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGVlNTU1YjNjMjk1YmIzN2FhMGUyYTllY2U1ODU3NWQ2MGQ2NmNiNTIuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
UGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luQWdlbnRSZXBseS5kZWZzCisrKyAvZGV2L251bGwK
QEAgLTEsMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotIAotI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9XZWJLaXRQbHVnaW5Ib3N0VHlwZXMuZGVm
cz4KLQotc3Vic3lzdGVtIFdlYktpdFBsdWdpbkFnZW50UmVwbHkgMjAwOwotCi1zZXJ2ZXJwcmVm
aXggV0tQQTsKLXVzZXJwcmVmaXggX1dLUEE7Ci0KLXNraXA7IC8vIENoZWNrSW5BcHBsaWNhdGlv
bgotCi1zaW1wbGVyb3V0aW5lIFNwYXduUGx1Z2luSG9zdFJlcGx5KF9yZXBseVBvcnQgOm1hY2hf
cG9ydF9tb3ZlX3NlbmRfb25jZV90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiBwbHVnaW5Ib3N0UG9ydDogbWFjaF9wb3J0X21vdmVfc2VuZF90KTsKLQotc2tpcDsgLy8g
Q2hlY2tJblBsdWdpbkhvc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1Bs
dWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkNsaWVudC5kZWZzIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luQ2xpZW50LmRlZnMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDI2ZjRhMGM5NGUzOTQwNzQzM2VhNjhiMjJmZjg2OGEzMTNiODMz
M2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luQ2xpZW50LmRlZnMK
KysrIC9kZXYvbnVsbApAQCAtMSwyMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSA8V2ViS2l0TGVnYWN5L1dlYktpdFBsdWdp
bkhvc3RUeXBlcy5kZWZzPgotCi0vLyBGSVhNRTogQ29tZSB1cCB3aXRoIGEgYmV0dGVyIG5hbWUu
Ci1zdWJzeXN0ZW0gV2ViS2l0UGx1Z2luQ2xpZW50IDMwMDsKLQotc2VydmVycHJlZml4IFdLOwot
dXNlcnByZWZpeCBfV0s7Ci0KLXNpbXBsZXJvdXRpbmUgUENTdGF0dXNUZXh0KGNsaWVudFBvcnQg
Om1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJf
dDsKLSAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0IDpkYXRhX3QpOwotCi1yb3V0aW5lIFBD
TG9hZFVSTChjbGllbnRQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICBw
bHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgdXJsIDpkYXRhX3Q7Ci0g
ICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IDpkYXRhX3Q7Ci0gICAgICAgICAgICAgICAgICAg
ICAgcG9zdERhdGEgOmRhdGFfdDsKLSAgICAgICAgICAgICAgICAgICAgICBmbGFnczogdWludDMy
X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgb3V0IHJlc3VsdENvZGUgOnVpbnQxNl90OwotICAg
ICAgICAgICAgICAgICAgICAgIG91dCByZXF1ZXN0SUQgOnVpbnQzMl90KTsKLQotc2ltcGxlcm91
dGluZSBQQ0NhbmNlbExvYWRVUkwoY2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cmVhbUlEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWFzb24gOmludDE2X3QpOwotCi1zaW1wbGVyb3V0aW5lIFBDSW52YWxpZGF0ZVJlY3QoY2xp
ZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdp
bklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA6ZG91YmxlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5IDpkb3VibGU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdpZHRoIDpkb3VibGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlaWdodCA6ZG91YmxlKTsKLQotcm91dGluZSBQQ0dldENvb2tpZXMoY2xpZW50UG9ydCA6bWFj
aF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAg
ICAgICAgICAgICAgICAgICB1cmwgOmRhdGFfdDsKLSAgICAgICAgICAgICAgICAgICAgIG91dCBy
ZXR1cm5WYWx1ZSA6Ym9vbGVhbl90OwotICAgICAgICAgICAgICAgICAgICAgb3V0IGNvb2tpZXMg
OmRhdGFfdCwgZGVhbGxvYyk7Ci0KLXJvdXRpbmUgUENTZXRDb29raWVzKGNsaWVudFBvcnQgOm1h
Y2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAg
ICAgICAgICAgICAgICAgICAgdXJsIDpkYXRhX3Q7Ci0gICAgICAgICAgICAgICAgICAgICBjb29r
aWVzIDpkYXRhX3Q7Ci0gICAgICAgICAgICAgICAgICAgICBvdXQgcmV0dXJuVmFsdWUgOmJvb2xl
YW5fdCk7Ci0KLXJvdXRpbmUgUENHZXRQcm94eShjbGllbnRQb3J0IDptYWNoX3BvcnRfdDsKLSAg
ICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAg
dXJsIDpkYXRhX3Q7Ci0gICAgICAgICAgICAgICAgICAgb3V0IHJldHVyblZhbHVlIDpib29sZWFu
X3Q7Ci0gICAgICAgICAgICAgICAgICAgb3V0IHByb3h5IDpkYXRhX3QsIGRlYWxsb2MpOwotCi1y
b3V0aW5lIFBDR2V0QXV0aGVudGljYXRpb25JbmZvKGNsaWVudFBvcnQgOm1hY2hfcG9ydF90Owot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sIDpkYXRhX3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhvc3QgOmRhdGFfdDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcG9ydCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNjaGVtZSA6ZGF0YV90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFs
bSA6ZGF0YV90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgcmV0dXJuVmFs
dWUgOmJvb2xlYW5fdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IHVzZXJu
YW1lIDpkYXRhX3QsIGRlYWxsb2M7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91
dCBwYXNzd29yZCA6ZGF0YV90LCBkZWFsbG9jKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCi1yb3V0aW5lIFBDQ29udmVydFBvaW50KGNsaWVudFBvcnQgOm1hY2hfcG9ydF90Owot
ICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAg
ICAgICAgICAgIHNvdXJjZVggOmRvdWJsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgc291cmNl
WSA6ZG91YmxlOwotICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VTcGFjZSA6dWludDMyX3Q7
Ci0gICAgICAgICAgICAgICAgICAgICAgIGRlc3RTcGFjZSA6dWludDMyX3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgIG91dCByZXR1cm5WYWx1ZSA6Ym9vbGVhbl90OwotICAgICAgICAgICAgICAg
ICAgICAgICBvdXQgZGVzdFggOmRvdWJsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgb3V0IGRl
c3RZIDpkb3VibGUpOwotCi0vLyBOUFJ1bnRpbWUKLQotcm91dGluZSBQQ0dldFN0cmluZ0lkZW50
aWZpZXIoY2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmFtZSA6ZGF0YV90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCBpZGVudGlm
aWVyIDp1aW50NjRfdCk7Ci0KLXJvdXRpbmUgUENHZXRJbnRJZGVudGlmaWVyKGNsaWVudFBvcnQg
Om1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDppbnQzMl90Owot
ICAgICAgICAgICAgICAgICAgICAgICAgIG91dCBpZGVudGlmaWVyOiB1aW50NjRfdCk7Ci0KLXJv
dXRpbmUgUENHZXRXaW5kb3dOUE9iamVjdChjbGllbnRQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXQgb2JqZWN0SUQgOnVpbnQzMl90KTsKLXJvdXRpbmUgUENHZXRQbHVnaW5F
bGVtZW50TlBPYmplY3QoY2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXQgb2JqZWN0SUQgOnVpbnQzMl90KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAKLXJvdXRpbmUgUENGb3JnZXRCcm93c2VyT2JqZWN0KGNsaWVudFBvcnQgOm1hY2hfcG9y
dF90OwotICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAg
ICAgICAgICAgICAgICBvYmplY3RJRCA6dWludDMyX3QpOwotICAgICAgICAgICAgICAgICAgICAg
IAotc2ltcGxlcm91dGluZSBQQ0V2YWx1YXRlKGNsaWVudFBvcnQgOm1hY2hfcG9ydF90OwotICAg
ICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAg
ICAgICAgIHJlcXVlc3RJRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgIG9iamVj
dElEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0IDpkYXRhX3Q7Ci0g
ICAgICAgICAgICAgICAgICAgICAgIGFsbG93UG9wdXBzIDpib29sZWFuX3QpOwotCi1zaW1wbGVy
b3V0aW5lIFBDSW52b2tlKGNsaWVudFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAg
ICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElE
IDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgIG9iamVjdElEIDp1aW50MzJfdDsKLSAg
ICAgICAgICAgICAgICAgICAgIG1ldGhvZE5hbWVJZGVudGlmaWVyIDp1aW50NjRfdDsKLSAgICAg
ICAgICAgICAgICAgICAgIGFyZ3VtZW50cyA6ZGF0YV90KTsKLQotc2ltcGxlcm91dGluZSBQQ0lu
dm9rZURlZmF1bHQoY2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICBwbHVn
aW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICByZXF1ZXN0SUQgOnVpbnQzMl90OwotICAg
ICAgICAgICAgICAgb2JqZWN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgYXJndW1lbnRz
IDpkYXRhX3QpOwotCi1yb3V0aW5lIFBDQ29uc3RydWN0KGNsaWVudFBvcnQgOm1hY2hfcG9ydF90
OwotICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAg
ICAgb2JqZWN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgYXJndW1lbnRzIDpkYXRh
X3Q7Ci0gICAgICAgICAgICAgICAgICBvdXQgcmV0dXJuVmFsdWUgOmJvb2xlYW5fdDsKLSAgICAg
ICAgICAgICAgICAgIG91dCByZXN1bHQgOmRhdGFfdCwgZGVhbGxvYyk7Ci0KLXNpbXBsZXJvdXRp
bmUgUENHZXRQcm9wZXJ0eShjbGllbnRQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVxdWVzdElEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
YmplY3RJRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lSWRlbnRpZmllciA6dWludDY0X3QpOwotCi1zaW1wbGVyb3V0aW5lIFBDU2V0UHJvcGVydHko
Y2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1
aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElEIDp1aW50MzJfdDsKLSAgICAg
ICAgICAgICAgICAgICAgb2JqZWN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICBw
cm9wZXJ0eU5hbWVJZGVudGlmaWVyIDp1aW50NjRfdDsKLSAgICAgICAgICAgICAgICAgICAgdmFs
dWUgOmRhdGFfdCk7Ci0KLXNpbXBsZXJvdXRpbmUgUENSZW1vdmVQcm9wZXJ0eShjbGllbnRQb3J0
IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90
OwotICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SUQgOnVpbnQzMl90OwotICAgICAgICAg
ICAgICAgICAgICAgICBvYmplY3RJRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5TmFtZUlkZW50aWZpZXIgOnVpbnQ2NF90KTsKLQotc2ltcGxlcm91dGluZSBQQ0hh
c1Byb3BlcnR5KGNsaWVudFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXF1ZXN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdElE
IDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVJZGVu
dGlmaWVyIDp1aW50NjRfdCk7Ci0KLXNpbXBsZXJvdXRpbmUgUENIYXNNZXRob2QoY2xpZW50UG9y
dCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWlu
dDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SUQgOnVpbnQzMl90Owot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0SUQgOnVpbnQzMl90OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWV0aG9kTmFtZUlkZW50aWZpZXIgOnVpbnQ2NF90KTsKLQotcm91
dGluZSBQQ0lkZW50aWZpZXJJbmZvKGNsaWVudFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAg
ICAgICAgICAgICAgICBpZGVudGlmaWVyIDp1aW50NjRfdDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgb3V0IGluZm8gOmRhdGFfdCwgZGVhbGxvYyk7Ci0KLXNpbXBsZXJvdXRpbmUgUENFbnVtZXJh
dGUoY2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHBs
dWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElEIDp1
aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0SUQgOnVpbnQzMl90KTsK
LQotLy8gTWlzYwotCi1zaW1wbGVyb3V0aW5lIFBDU2V0TWVudUJhclZpc2libGUoY2xpZW50UG9y
dCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGUg
OmJvb2xlYW5fdCk7Ci0KLXNpbXBsZXJvdXRpbmUgUENTZXRNb2RhbChjbGllbnRQb3J0IDptYWNo
X3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwgOmJvb2xlYW5fdCk7Ci0KLS8v
IFdhcyBQQ0NoZWNrSWZBbGxvd2VkVG9Mb2FkVVJMLgotc2tpcDsKLQotLy8gV2FzIFBDQ2FuY2Vs
Q2hlY2tJZkFsbG93ZWRUb0xvYWRVUkwuCi1za2lwOwotCi0vLyBXYXMgUENSZXNvbHZlVVJMLgot
c2tpcDsKLQotLy8gUmVwbGllcwotc2ltcGxlcm91dGluZSBQQ0luc3RhbnRpYXRlUGx1Z2luUmVw
bHkoY2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0IDprZXJuX3JldHVybl90OwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlbmRlckNvbnRleHRJRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXJUeXBlIDp1aW50MzJfdCk7Ci0KLXNpbXBs
ZXJvdXRpbmUgUENHZXRTY3JpcHRhYmxlTlBPYmplY3RSZXBseShjbGllbnRQb3J0IDptYWNoX3Bv
cnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQg
OnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1
ZXN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvYmplY3RJRCA6dWludDMyX3QpOwotCi1zaW1wbGVyb3V0aW5lIFBDQm9vbGVhblJlcGx5KGNs
aWVudFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVn
aW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCA6
dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA6Ym9vbGVhbl90
KTsKLQotc2ltcGxlcm91dGluZSBQQ0Jvb2xlYW5BbmREYXRhUmVwbHkoY2xpZW50UG9ydCA6bWFj
aF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6
dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SUQg
OnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFs
dWUgOmJvb2xlYW5fdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA6ZGF0YV90KTsgIAotCi0vLyBOZXcgUm91dGluZXMgKG11c3QgYmUgYWRkZWQgYXQgdGhlIGJv
dHRvbSBvZiB0aGUgZmlsZSkKLQotc2ltcGxlcm91dGluZSBQQ1NldEZ1bGxzY3JlZW5XaW5kb3dJ
c1Nob3dpbmcoY2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpc1Nob3dpbmcgOmJvb2xlYW5fdCk7Ci0KLXNpbXBsZXJv
dXRpbmUgUENTZXRFeGNlcHRpb24oY2xpZW50UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgOmRhdGFfdCk7Ci0KLXNpbXBsZXJvdXRpbmUgUENM
YXllckhvc3RpbmdNb2RlQ2hhbmdlZChjbGllbnRQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdHNMYXllcnNJbldpbmRvd1Nl
cnZlciA6Ym9vbGVhbl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlbmRlckNvbnRleHRJRCA6dWludDMyX3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luSG9zdC5kZWZzIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luSG9zdC5kZWZzCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDk4NDc2NDk5NGIxNmY2Nzg4MjRmZjRhZWNmZmU3
MTE5YzNkYzY5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkhvc3Qu
ZGVmcworKysgL2Rldi9udWxsCkBAIC0xLDI1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlIDxXZWJLaXRMZWdhY3kvV2ViS2l0
UGx1Z2luSG9zdFR5cGVzLmRlZnM+Ci0KLXN1YnN5c3RlbSBXZWJLaXRQbHVnaW5Ib3N0IDMwMDsK
LQotc2VydmVycHJlZml4IFdLOwotdXNlcnByZWZpeCBfV0s7Ci0KLXJvdXRpbmUgUEhDaGVja0lu
V2l0aFBsdWdpbkhvc3QocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU2VydmVyQXVkaXRUb2tlbiB0b2tlbiA6YXVkaXRfdG9rZW5fdDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgOnBsaXN0X2J5dGVzX3Q7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRQb3J0IDptYWNoX3BvcnRfbWFrZV9z
ZW5kX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRQU05IaWdoIDp1aW50
MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudFBTTkxvdyA6dWludDMy
X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJQb3J0IDptYWNoX3BvcnRf
Y29weV9zZW5kX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgcGx1Z2luSG9z
dFBTTkhpZ2ggOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IHBs
dWdpbkhvc3RQU05Mb3cgOnVpbnQzMl90KTsKLQotc2ltcGxlcm91dGluZSBQSEluc3RhbnRpYXRl
UGx1Z2luKHBsdWdpbkhvc3RQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVxdWVzdElEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3B0aW9ucyA6cGxpc3RfYnl0ZXNfdDsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCi1zaW1wbGVyb3V0aW5lIFBIUmVzaXplUGx1Z2luSW5zdGFuY2UocGx1Z2luSG9zdFBv
cnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBs
dWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVz
dElEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVn
aW5YIDpkb3VibGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2lu
WSA6ZG91YmxlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbldp
ZHRoIDpkb3VibGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2lu
SGVpZ2h0IDpkb3VibGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xp
cFggOmRvdWJsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwWSA6
ZG91YmxlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBXaWR0aCA6
ZG91YmxlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBIZWlnaHQg
OmRvdWJsZSk7Ci0KLXNpbXBsZXJvdXRpbmUgUEhQbHVnaW5JbnN0YW5jZUZvY3VzQ2hhbmdlZChw
bHVnaW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGFzRm9jdXMgOmJvb2xlYW5fdCk7Ci1zaW1wbGVyb3V0aW5lIFBI
UGx1Z2luSW5zdGFuY2VXaW5kb3dGb2N1c0NoYW5nZWQocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9y
dF90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6
dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0Zv
Y3VzIDpib29sZWFuX3QpOwotc2ltcGxlcm91dGluZSBQSFBsdWdpbkluc3RhbmNlV2luZG93RnJh
bWVDaGFuZ2VkKHBsdWdpbkhvc3RQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4IDpkb3VibGU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgOmRvdWJsZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggOmRvdWJs
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0
IDpkb3VibGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1heFNjcmVlblkgOmRvdWJsZSk7Ci0KLXNpbXBsZXJvdXRpbmUgUEhQbHVnaW5JbnN0YW5jZU1v
dXNlRXZlbnQocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wIDpkb3VibGU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGUgOnVpbnQzMl90OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJGbGFncyA6dWludDMyX3Q7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5YIDpkb3VibGU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5ZIDpkb3VibGU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JlZW5YIDpkb3VibGU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JlZW5ZIDpkb3VibGU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTY3JlZW5ZIDpkb3VibGU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25OdW1iZXIgOmlu
dDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlja0NvdW50
IDppbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFY
IDpkb3VibGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YVkg
OmRvdWJsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhWjog
ZG91YmxlKTsKLQotc2ltcGxlcm91dGluZSBQSFBsdWdpbkluc3RhbmNlS2V5Ym9hcmRFdmVudChw
bHVnaW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAgOmRvdWJsZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZSA6dWludDMyX3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllckZsYWdzIDp1aW50MzJfdDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgOmRh
dGFfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3Rl
cnNJZ25vcmluZ01vZGlmaWVycyA6ZGF0YV90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaXNBUmVwZWF0IDpib29sZWFuX3Q7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBrZXlDb2RlIDp1aW50MTZfdDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNoYXIgOnVpbnQ4X3QpOwotCi1zaW1wbGVy
b3V0aW5lIFBIUGx1Z2luSW5zdGFuY2VXaGVlbEV2ZW50KHBsdWdpbkhvc3RQb3J0IDptYWNoX3Bv
cnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQg
OnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1
ZXN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aW1lc3RhbXAgOmRvdWJsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbW9kaWZpZXJGbGFncyA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBsdWdpblggOmRvdWJsZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGx1Z2luWSA6ZG91YmxlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBidXR0b25OdW1iZXIgOmludDMyX3Q7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhWCA6ZG91YmxlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YVkgOmRvdWJsZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFaOiBkb3VibGUpOwotCi1zaW1wbGVy
b3V0aW5lIFBIUGx1Z2luSW5zdGFuY2VJbnNlcnRUZXh0KHBsdWdpbkhvc3RQb3J0IDptYWNoX3Bv
cnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQg
OnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
IDpkYXRhX3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotc2lt
cGxlcm91dGluZSBQSFBsdWdpbkluc3RhbmNlU3RhcnRUaW1lcnMocGx1Z2luSG9zdFBvcnQgOm1h
Y2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdp
bklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aHJvdHRsZVRpbWVycyA6Ym9vbGVhbl90KTsKLXNpbXBsZXJvdXRpbmUgUEhQbHVnaW5JbnN0YW5j
ZVN0b3BUaW1lcnMocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90KTsKLQotc2ltcGxlcm91
dGluZSBQSFBsdWdpbkluc3RhbmNlUHJpbnQocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90Owot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90Owot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElEIDp1aW50MzJfdDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoIDp1aW50MzJfdDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCA6dWludDMyX3QpOwotCi1z
aW1wbGVyb3V0aW5lIFBIRGVzdHJveVBsdWdpbkluc3RhbmNlKHBsdWdpbkhvc3RQb3J0IDptYWNo
X3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1
aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCA6
dWludDMyX3QpOwotCi0vLyBXYXMgUEhDaGVja0lmQWxsb3dlZFRvTG9hZFVSTFJlc3VsdC4KLXNr
aXA7Ci0KLS8vIFN0cmVhbXMKLXNpbXBsZXJvdXRpbmUgUEhTdGFydFN0cmVhbShwbHVnaW5Ib3N0
UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1
aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtSUQgOnVpbnQzMl90Owot
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVVSTCA6ZGF0YV90OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICBleHBlY3RlZENvbnRlbnRMZW5ndGggOmludDY0X3Q7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZFRpbWVJbnRlcnZhbCA6ZG91YmxlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZSA6ZGF0YV90OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICBoZWFkZXJzIDpkYXRhX3QpOwotCi1zaW1wbGVyb3V0aW5lIFBIU3RyZWFtRGlk
UmVjZWl2ZURhdGEocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cmVhbUlEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YSA6ZGF0YV90KTsKLQotc2ltcGxlcm91dGluZSBQSFN0cmVh
bURpZEZpbmlzaExvYWRpbmcocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1JRCA6dWludDMyX3QpOwotCi1zaW1w
bGVyb3V0aW5lIFBIU3RyZWFtRGlkRmFpbChwbHVnaW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cmVhbUlEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWFzb24gOmludDE2X3QpOwotCi1zaW1wbGVyb3V0aW5lIFBITG9hZFVSTE5v
dGlmeShwbHVnaW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
cXVlc3RJRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uIDpp
bnQxNl90KTsKLQotLy8gTlBSdW50aW1lCi0KLXNpbXBsZXJvdXRpbmUgUEhHZXRTY3JpcHRhYmxl
TlBPYmplY3QocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMyX3QpOwotCi1zaW1wbGVyb3V0
aW5lIFBITlBPYmplY3RIYXNQcm9wZXJ0eShwbHVnaW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMyX3Q7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0SUQgOnVpbnQzMl90OwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA6dWludDY0X3QpOwotCi1z
aW1wbGVyb3V0aW5lIFBITlBPYmplY3RIYXNNZXRob2QocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9y
dF90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMyX3Q7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdElEIDp1aW50MzJfdDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSA6dWludDY0X3QpOwotCi1zaW1w
bGVyb3V0aW5lIFBITlBPYmplY3RJbnZva2UocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90Owot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9iamVjdElEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW52b2tlVHlwZSA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1ldGhvZE5hbWUgOnVpbnQ2NF90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
cmd1bWVudHMgOmRhdGFfdCk7Ci0KLXNpbXBsZXJvdXRpbmUgUEhOUE9iamVjdEhhc0ludm9rZURl
ZmF1bHRNZXRob2QocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElEIDp1aW50MzJf
dDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdElE
IDp1aW50MzJfdCk7Ci0KLXNpbXBsZXJvdXRpbmUgUEhOUE9iamVjdEhhc0NvbnN0cnVjdE1ldGhv
ZChwbHVnaW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0SUQgOnVpbnQzMl90KTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotc2ltcGxlcm91dGluZSBQSE5QT2JqZWN0
R2V0UHJvcGVydHkocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXF1ZXN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9iamVjdElEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgOnVpbnQ2NF90KTsKLQotc2ltcGxlcm91dGluZSBQ
SE5QT2JqZWN0U2V0UHJvcGVydHkocGx1Z2luSG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SUQgOnVpbnQzMl90OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdElEIDp1aW50MzJfdDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgOnVpbnQ2NF90OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDpkYXRhX3QpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAotc2ltcGxlcm91dGluZSBQSE5QT2JqZWN0UmVsZWFzZShwbHVn
aW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
bHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RJ
RCA6dWludDMyX3QpOwotCi1zaW1wbGVyb3V0aW5lIFBITlBPYmplY3RFbnVtZXJhdGUocGx1Z2lu
SG9zdFBvcnQgOm1hY2hfcG9ydF90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXF1ZXN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9i
amVjdElEIDp1aW50MzJfdCk7Ci0KLS8vIFJlcGxpZXMKLQotc2ltcGxlcm91dGluZSBQSEJvb2xl
YW5SZXBseShjbGllbnRQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGx1Z2luSUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXF1ZXN0SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQg
OmJvb2xlYW5fdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAKLXNpbXBsZXJvdXRpbmUg
UEhCb29sZWFuQW5kRGF0YVJlcGx5KHBsdWdpbkhvc3RQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbklEIDp1aW50MzJfdDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCA6dWludDMyX3Q7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA6Ym9vbGVhbl90Owot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IDpkYXRhX3QpOwotCi0v
LyBOZXcgUm91dGluZXMgKG11c3QgYmUgYWRkZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgZmlsZSkK
LQotc2ltcGxlcm91dGluZSBQSFBsdWdpbkluc3RhbmNlRGlkRHJhdyhwbHVnaW5Ib3N0UG9ydCA6
bWFjaF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdp
bklEIDp1aW50MzJfdCk7Ci1zaW1wbGVyb3V0aW5lIFBIUGx1Z2luSW5zdGFuY2VQcml2YXRlQnJv
d3NpbmdNb2RlRGlkQ2hhbmdlKHBsdWdpbkhvc3RQb3J0IDptYWNoX3BvcnRfdDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2lu
SUQgOnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcml2YXRlQnJvd3NpbmdFbmFibGVkIDpib29sZWFuX3QpOwotCi1z
aW1wbGVyb3V0aW5lIFBIUGx1Z2luSW5zdGFuY2VTbmFwc2hvdChwbHVnaW5Ib3N0UG9ydCA6bWFj
aF9wb3J0X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5JRCA6
dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SUQg
OnVpbnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggOnVp
bnQzMl90OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0IDp1aW50
MzJfdCk7Ci0KLXJvdXRpbmUgUEhDcmVhdGVQbHVnaW5NSU1FVHlwZXNQcmVmZXJlbmNlcyhwbHVn
aW5Ib3N0UG9ydCA6bWFjaF9wb3J0X3QpOwotCi1zaW1wbGVyb3V0aW5lIFBIUGx1Z2luU2hvdWxk
SG9zdExheWVyc0luV2luZG93U2VydmVyQ2hhbmdlZChwbHVnaW5Ib3N0UG9ydCA6bWFjaF9wb3J0
X3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwbHVnaW5JRCA6dWludDMyX3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRIb3N0TGF5ZXJzSW5XaW5kb3dT
ZXJ2ZXIgOmJvb2xlYW5fdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9Q
bHVnaW5zL0hvc3RlZC9XZWJLaXRQbHVnaW5Ib3N0VHlwZXMuZGVmcyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkhvc3RUeXBlcy5kZWZzCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2I1OWEyZTRjZGQ3YTgxNTAzOGJjZWYxNWQ2Yjgz
MzU5MzlmNGFlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYktpdFBsdWdpbkhvc3RU
eXBlcy5kZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSA8bWFjaC9zdGRfdHlwZXMu
ZGVmcz4KLSNpbmNsdWRlIDxtYWNoL21hY2hfdHlwZXMuZGVmcz4KLQotaW1wb3J0IDxXZWJLaXRM
ZWdhY3kvV2ViS2l0UGx1Z2luSG9zdFR5cGVzLmg+OwotCi10eXBlIHBsaXN0X2J5dGVzX3QgPSBe
YXJyYXkgW10gb2YgdWludDhfdDsKLXR5cGUgYXBwbGljYXRpb25fbmFtZV90ID0gXmFycmF5IFtd
IG9mIHVpbnQ4X3Q7Ci10eXBlIGRhdGFfdCA9IF5hcnJheSBbXSBvZiBjaGFyOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViS2l0UGx1Z2luSG9z
dFR5cGVzLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJLaXRQ
bHVnaW5Ib3N0VHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk3MTA1NDFj
ZjlmZjVhMDNlMTY4NmE3Mzc0YTk0YWMwMzQ5ZDIzYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hv
c3RlZC9XZWJLaXRQbHVnaW5Ib3N0VHlwZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRl
ZiBXZWJLaXRQbHVnaW5Ib3N0VHlwZXNfaAotI2RlZmluZSBXZWJLaXRQbHVnaW5Ib3N0VHlwZXNf
aAotCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0KLXR5cGVkZWYgdWludDhfdCogcGxpc3RfYnl0ZXNf
dDsKLXR5cGVkZWYgdWludDhfdCogYXBwbGljYXRpb25fbmFtZV90OwotCi10eXBlZGVmIGNoYXIq
IGRhdGFfdDsKLQotI2lmbmRlZiBfX01pZ1R5cGVDaGVjawotI2RlZmluZSBfX01pZ1R5cGVDaGVj
ayAxCi0jZW5kaWYKLQotZW51bSBMb2FkVVJMRmxhZ3MgewotICAgIElzUG9zdCA9IDEgPDwgMCwK
LSAgICBQb3N0RGF0YUlzRmlsZSA9IDEgPDwgMSwgCi0gICAgQWxsb3dIZWFkZXJzSW5Qb3N0RGF0
YSA9IDEgPDwgMiwKLSAgICBBbGxvd1BvcHVwcyA9IDEgPDwgMywKLX07Ci0gCi1lbnVtIEludm9r
ZVR5cGUgewotICAgIEludm9rZSwKLSAgICBJbnZva2VEZWZhdWx0LAotICAgIENvbnN0cnVjdAot
fTsKLQotZW51bSBWYWx1ZVR5cGUgewotICAgIFZvaWRWYWx1ZVR5cGUsCi0gICAgTnVsbFZhbHVl
VHlwZSwKLSAgICBCb29sVmFsdWVUeXBlLAotICAgIERvdWJsZVZhbHVlVHlwZSwKLSAgICBTdHJp
bmdWYWx1ZVR5cGUsCi0gICAgSlNPYmplY3RWYWx1ZVR5cGUsCi0gICAgTlBPYmplY3RWYWx1ZVR5
cGUKLX07Ci0KLWVudW0gUmVuZGVyZXJUeXBlIHsKLSAgICBVc2VBY2NlbGVyYXRlZENvbXBvc2l0
aW5nLAotICAgIFVzZVNvZnR3YXJlUmVuZGVyZXIsCi0gICAgVXNlTGF5ZXJCYWNrZWRWaWV3Ci19
OwotCi0jZW5kaWYgLy8gV2ViS2l0UGx1Z2luSG9zdFR5cGVzX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYlRleHRJbnB1dFdpbmRvd0NvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYlRleHRJ
bnB1dFdpbmRvd0NvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYw
MzZlZTJiMDRlMmY4YjlhMzJmOTZlOWVkYzI3YjVjNzczODJhZi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVn
aW5zL0hvc3RlZC9XZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpZiBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykKLQotI2lmbmRlZiBXZWJUZXh0SW5w
dXRXaW5kb3dDb250cm9sbGVyX2gKLSNkZWZpbmUgV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxl
cl9oCi0KLUBjbGFzcyBXZWJUZXh0SW5wdXRQYW5lbDsKLQotQGludGVyZmFjZSBXZWJUZXh0SW5w
dXRXaW5kb3dDb250cm9sbGVyIDogTlNPYmplY3QgewotICAgIFdlYlRleHRJbnB1dFBhbmVsICpf
cGFuZWw7Ci19Ci0KLSsgKFdlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIgKilzaGFyZWRUZXh0
SW5wdXRXaW5kb3dDb250cm9sbGVyOwotCi0tIChOU1RleHRJbnB1dENvbnRleHQgKilpbnB1dENv
bnRleHQ7Ci0tIChCT09MKWludGVycHJldEtleUV2ZW50OihOU0V2ZW50ICopZXZlbnQgc3RyaW5n
OihOU1N0cmluZyAqKilzdHJpbmc7Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFdlYlRleHRJbnB1dFdp
bmRvd0NvbnRyb2xsZXJfaAotCi0jZW5kaWYgLy8gVVNFKFBMVUdJTl9IT1NUX1BST0NFU1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJUZXh0
SW5wdXRXaW5kb3dDb250cm9sbGVyLm0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5z
L0hvc3RlZC9XZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLm0KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDUwNDkyZjEwZWRmYTdlNTJhODAxYTU2OTJmNTEyYWUwMDcwMzg4YTAuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlci5t
CisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKQotCi0j
aW1wb3J0ICJXZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLmgiCi0KLSNpbXBvcnQgPHBhbC9z
eXN0ZW0vbWFjL1dlYlBhbmVsLmg+Ci0KLUBpbnRlcmZhY2UgV2ViVGV4dElucHV0VmlldyA6IE5T
VGV4dFZpZXcgewotfQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViVGV4dElucHV0Vmlldwot
Ci0tIChOU0FycmF5ICopdmFsaWRBdHRyaWJ1dGVzRm9yTWFya2VkVGV4dAotewotICAgIC8vIExl
dCBUU00ga25vdyB0aGF0IGEgYm90dG9tIGlucHV0IHdpbmRvdyB3b3VsZCBiZSBjcmVhdGVkIGZv
ciBtYXJrZWQgdGV4dC4KLSAgICBOU0FycmF5ICpyZWd1bGFyQXR0cmlidXRlcyA9IFtzdXBlciB2
YWxpZEF0dHJpYnV0ZXNGb3JNYXJrZWRUZXh0XTsKLSAgICBOU011dGFibGVBcnJheSAqZmxvYXRp
bmdXaW5kb3dBdHRyaWJ1dGVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aEFycmF5OnJlZ3Vs
YXJBdHRyaWJ1dGVzXTsKLSAgICBbZmxvYXRpbmdXaW5kb3dBdHRyaWJ1dGVzIGFkZE9iamVjdDpA
Il9fTlNVc2VzRmxvYXRpbmdJbnB1dFdpbmRvdyJdOwotICAgIHJldHVybiBmbG9hdGluZ1dpbmRv
d0F0dHJpYnV0ZXM7Ci19Ci0KLUBlbmQKLQotQGludGVyZmFjZSBXZWJUZXh0SW5wdXRQYW5lbCA6
IFdlYlBhbmVsIHsKLSAgICBOU1RleHRWaWV3ICpfaW5wdXRUZXh0VmlldzsKLX0KLQotLSAoTlNU
ZXh0SW5wdXRDb250ZXh0ICopX2lucHV0Q29udGV4dDsKLS0gKEJPT0wpX2ludGVycHJldEtleUV2
ZW50OihOU0V2ZW50ICopZXZlbnQgc3RyaW5nOihOU1N0cmluZyAqKilzdHJpbmc7Ci0KLUBlbmQK
LQotI2RlZmluZSBpbnB1dFdpbmRvd0hlaWdodCAyMAotCi1AaW1wbGVtZW50YXRpb24gV2ViVGV4
dElucHV0UGFuZWwKLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNl
bnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKLSAgICAKLSAgICBbX2lu
cHV0VGV4dFZpZXcgcmVsZWFzZV07Ci0gICAgCi0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0t
IChpZClpbml0Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgLy8gU2V0IHRoZSBmcmFtZSBzaXplLgotICAg
IE5TUmVjdCB2aXNpYmxlRnJhbWUgPSBbW05TU2NyZWVuIG1haW5TY3JlZW5dIHZpc2libGVGcmFt
ZV07Ci0gICAgTlNSZWN0IGZyYW1lID0gTlNNYWtlUmVjdCh2aXNpYmxlRnJhbWUub3JpZ2luLngs
IHZpc2libGVGcmFtZS5vcmlnaW4ueSwgdmlzaWJsZUZyYW1lLnNpemUud2lkdGgsIGlucHV0V2lu
ZG93SGVpZ2h0KTsKLSAgICAgCi0gICAgW3NlbGYgc2V0RnJhbWU6ZnJhbWUgZGlzcGxheTpOT107
Ci0gICAgICAgIAotICAgIF9pbnB1dFRleHRWaWV3ID0gW1tXZWJUZXh0SW5wdXRWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOltzZWxmLmNvbnRlbnRWaWV3IGZyYW1lXV07Ci0gICAgX2lucHV0VGV4
dFZpZXcuYXV0b3Jlc2l6aW5nTWFzayA9IE5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdo
dFNpemFibGUgfCBOU1ZpZXdNYXhYTWFyZ2luIHwgTlNWaWV3TWluWE1hcmdpbiB8IE5TVmlld01h
eFlNYXJnaW4gfCBOU1ZpZXdNaW5ZTWFyZ2luOwotICAgICAgICAKLSAgICBOU1Njcm9sbFZpZXcq
IHNjcm9sbFZpZXcgPSBbW05TU2Nyb2xsVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbc2VsZi5j
b250ZW50VmlldyBmcmFtZV1dOwotICAgIHNjcm9sbFZpZXcuZG9jdW1lbnRWaWV3ID0gX2lucHV0
VGV4dFZpZXc7Ci0gICAgc2VsZi5jb250ZW50VmlldyA9IHNjcm9sbFZpZXc7Ci0gICAgW3Njcm9s
bFZpZXcgcmVsZWFzZV07Ci0gICAgICAgIAotICAgIFtzZWxmIHNldEZsb2F0aW5nUGFuZWw6WUVT
XTsKLSAgICAKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9i
c2VydmVyOnNlbGYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGVjdG9yOkBzZWxlY3Rvcihfa2V5Ym9hcmRJbnB1dFNvdXJjZUNoYW5nZWQ6KQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6TlNUZXh0SW5w
dXRDb250ZXh0S2V5Ym9hcmRTZWxlY3Rpb25EaWRDaGFuZ2VOb3RpZmljYXRpb24KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Om5pbF07Ci0KLSAg
ICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClfa2V5Ym9hcmRJbnB1dFNvdXJjZUNoYW5nZWQ6
KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgW19pbnB1dFRleHRWaWV3IHNl
dFN0cmluZzpAIiJdOwotICAgIFtzZWxmIG9yZGVyT3V0Om5pbF07Ci19Ci0KLS0gKEJPT0wpX2lu
dGVycHJldEtleUV2ZW50OihOU0V2ZW50ICopZXZlbnQgc3RyaW5nOihOU1N0cmluZyAqKilzdHJp
bmcKLXsKLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIEJPT0wg
aGFkTWFya2VkVGV4dCA9IFtfaW5wdXRUZXh0VmlldyBoYXNNYXJrZWRUZXh0XTsKLSAgICBBTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLQotICAgICpzdHJpbmcgPSBuaWw7Ci0KLSAg
ICAvLyBMZXQgVFNNIGtub3cgdGhhdCBhIGJvdHRvbSBpbnB1dCB3aW5kb3cgd291bGQgYmUgY3Jl
YXRlZCBmb3IgbWFya2VkIHRleHQuCi0gICAgLy8gRklYTUU6IENhbiBiZSByZW1vdmVkIG9uY2Ug
d2UgY2FuIHJlbHkgb24gX19OU1VzZXNGbG9hdGluZ0lucHV0V2luZG93IChvciBhIGJldHRlciBB
UEkpIGJlaW5nIGF2YWlsYWJsZSBldmVyeXdoZXJlLgotICAgIElHTk9SRV9XQVJOSU5HU19CRUdJ
TigiY2FzdC1xdWFsIikKLSAgICBFdmVudFJlZiBjYXJib25FdmVudCA9IChFdmVudFJlZilbZXZl
bnQgZXZlbnRSZWZdOwotICAgIElHTk9SRV9XQVJOSU5HU19FTkQKLSAgICBpZiAoY2FyYm9uRXZl
bnQpIHsKLSAgICAgICAgQm9vbGVhbiBpZ25vcmVQQUggPSB0cnVlOwotICAgICAgICBTZXRFdmVu
dFBhcmFtZXRlcihjYXJib25FdmVudCwgJ2lQQUgnLCB0eXBlQm9vbGVhbiwgc2l6ZW9mKGlnbm9y
ZVBBSCksICZpZ25vcmVQQUgpOwotICAgIH0KLQotICAgIGlmICghW1tfaW5wdXRUZXh0VmlldyBp
bnB1dENvbnRleHRdIGhhbmRsZUV2ZW50OmV2ZW50XSkKLSAgICAgICAgcmV0dXJuIE5POwotICAg
IAotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgaWYgKFtfaW5w
dXRUZXh0VmlldyBoYXNNYXJrZWRUZXh0XSkgewotICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RF
Q0xBUkFUSU9OU19FTkQKLSAgICAgICAgLy8gRG9uJ3Qgc2hvdyB0aGUgaW5wdXQgbWV0aG9kIHdp
bmRvdyBmb3IgZGVhZCBrZXlzCi0gICAgICAgIGlmIChbW2V2ZW50IGNoYXJhY3RlcnNdIGxlbmd0
aF0gPiAwKQotICAgICAgICAgICAgW3NlbGYgb3JkZXJGcm9udDpuaWxdOwotCi0gICAgICAgIHJl
dHVybiBZRVM7Ci0gICAgfQotICAgIAotICAgIGlmIChoYWRNYXJrZWRUZXh0KSB7Ci0gICAgICAg
IFtzZWxmIG9yZGVyT3V0Om5pbF07Ci0KLSAgICAgICAgTlNTdHJpbmcgKnRleHQgPSBbW19pbnB1
dFRleHRWaWV3IHRleHRTdG9yYWdlXSBzdHJpbmddOwotICAgICAgICBpZiAoW3RleHQgbGVuZ3Ro
XSA+IDApCi0gICAgICAgICAgICAqc3RyaW5nID0gW1t0ZXh0IGNvcHldIGF1dG9yZWxlYXNlXTsK
LSAgICB9Ci0gICAgICAgICAgICAKLSAgICBbX2lucHV0VGV4dFZpZXcgc2V0U3RyaW5nOkAiIl07
Ci0gICAgcmV0dXJuIGhhZE1hcmtlZFRleHQ7Ci19Ci0KLS0gKE5TVGV4dElucHV0Q29udGV4dCAq
KV9pbnB1dENvbnRleHQKLXsKLSAgICByZXR1cm4gW19pbnB1dFRleHRWaWV3IGlucHV0Q29udGV4
dF07Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYlRleHRJbnB1dFdpbmRvd0NvbnRy
b2xsZXIKLQotKyAoV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlciAqKXNoYXJlZFRleHRJbnB1
dFdpbmRvd0NvbnRyb2xsZXIKLXsKLSAgICBzdGF0aWMgV2ViVGV4dElucHV0V2luZG93Q29udHJv
bGxlciAqdGV4dElucHV0V2luZG93Q29udHJvbGxlcjsKLSAgICBpZiAoIXRleHRJbnB1dFdpbmRv
d0NvbnRyb2xsZXIpCi0gICAgICAgIHRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIgPSBbW1dlYlRl
eHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdOwotICAgIAotICAgIHJldHVybiB0
ZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyOwotfQotCi0tIChpZClpbml0Ci17Ci0gICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAg
Ci0gICAgX3BhbmVsID0gW1tXZWJUZXh0SW5wdXRQYW5lbCBhbGxvY10gaW5pdF07Ci0gICAgCi0g
ICAgcmV0dXJuIHNlbGY7Ci19Ci0gICAgICAgIAotLSAoTlNUZXh0SW5wdXRDb250ZXh0ICopaW5w
dXRDb250ZXh0Ci17Ci0gICAgcmV0dXJuIFtfcGFuZWwgX2lucHV0Q29udGV4dF07Ci19Ci0KLS0g
KEJPT0wpaW50ZXJwcmV0S2V5RXZlbnQ6KE5TRXZlbnQgKilldmVudCBzdHJpbmc6KE5TU3RyaW5n
ICoqKXN0cmluZwotewotICAgIHJldHVybiBbX3BhbmVsIF9pbnRlcnByZXRLZXlFdmVudDpldmVu
dCBzdHJpbmc6c3RyaW5nXTsKLX0KLQotQGVuZAotCi0jZW5kaWYgLy8gVVNFKFBMVUdJTl9IT1NU
X1BST0NFU1MpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMv
V2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1
Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGM1YTk2MWUzNzdlZThmZTJkMDM1ODgyYWM0NTAxOWM2NTlhZGY2ZWMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3LmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSNpbXBvcnQg
PENvY29hL0NvY29hLmg+Ci0KLSNpbXBvcnQgIldlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5oIgot
I2ltcG9ydCA8d3RmL0ZvcndhcmQuaD4KLSNpbXBvcnQgPHd0Zi9OYWtlZFB0ci5oPgotI2ltcG9y
dCA8d3RmL1JlZlB0ci5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotCi1AY2xhc3MgRE9N
RWxlbWVudDsKLUBjbGFzcyBXZWJEYXRhU291cmNlOwotQGNsYXNzIFdlYkZyYW1lOwotQGNsYXNz
IFdlYlZpZXc7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBIVE1MUGx1Z0luRWxl
bWVudDsKLX0KLQotQGludGVyZmFjZSBXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3IDogTlNWaWV3
Ci17Ci0gICAgUmV0YWluUHRyPFdlYk5ldHNjYXBlUGx1Z2luUGFja2FnZT4gX3BsdWdpblBhY2th
Z2U7Ci0gICAgCi0gICAgV2ViRnJhbWUgKl93ZWJGcmFtZTsKLSAgICAKLSAgICBpbnQgX21vZGU7
Ci0gICAgCi0gICAgQk9PTCBfdHJpZWRBbmRGYWlsZWRUb0NyZWF0ZVBsdWdpbjsKLSAgICBCT09M
IF9sb2FkTWFudWFsbHk7Ci0gICAgQk9PTCBfc2hvdWxkRmlyZVRpbWVyczsKLSAgICBCT09MIF9p
c1N0YXJ0ZWQ7Ci0gICAgQk9PTCBfaGFzRm9jdXM7Ci0gICAgQk9PTCBfaXNDb21wbGV0ZWx5T2Jz
Y3VyZWQ7Ci0gICAgQk9PTCBfaXNQcml2YXRlQnJvd3NpbmdFbmFibGVkOwotICAgIEJPT0wgX3Nu
YXBzaG90dGluZzsKLSAgICAKLSAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQ+
IF9lbGVtZW50OwotICAgIFJldGFpblB0cjxOU1N0cmluZz4gX01JTUVUeXBlOwotICAgIFJldGFp
blB0cjxOU1VSTD4gX2Jhc2VVUkw7Ci0gICAgUmV0YWluUHRyPE5TVVJMPiBfc291cmNlVVJMOwot
ICAgIFJldGFpblB0cjxOU0ltYWdlPiBfY2FjaGVkU25hcHNob3Q7Ci0gICAgCi0gICAgTlNUcmFj
a2luZ1JlY3RUYWcgX3RyYWNraW5nVGFnOwotfQotCi0tIChpZClpbml0V2l0aEZyYW1lOihOU1Jl
Y3QpcgotICAgICAgcGx1Z2luUGFja2FnZTooV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlICopdGhl
UGx1Z2luUGFja2FnZQotICAgICAgICAgICAgICAgIFVSTDooTlNVUkwgKilVUkwKLSAgICAgICAg
ICAgIGJhc2VVUkw6KE5TVVJMICopYmFzZVVSTAotICAgICAgICAgICBNSU1FVHlwZTooTlNTdHJp
bmcgKilNSU1FCi0gICAgICBhdHRyaWJ1dGVLZXlzOihOU0FycmF5ICopa2V5cwotICAgIGF0dHJp
YnV0ZVZhbHVlczooTlNBcnJheSAqKXZhbHVlcwotICAgICAgIGxvYWRNYW51YWxseTooQk9PTCls
b2FkTWFudWFsbHkKLSAgICAgICAgICAgIGVsZW1lbnQ6KFJlZlB0cjxXZWJDb3JlOjpIVE1MUGx1
Z0luRWxlbWVudD4mJillbGVtZW50OwotCi0tIChXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UgKilw
bHVnaW5QYWNrYWdlOwotCi0tIChOU1VSTCAqKVVSTFdpdGhDU3RyaW5nOihjb25zdCBjaGFyICop
VVJMQ1N0cmluZzsKLS0gKE5TTXV0YWJsZVVSTFJlcXVlc3QgKilyZXF1ZXN0V2l0aFVSTENTdHJp
bmc6KGNvbnN0IGNoYXIgKilVUkxDU3RyaW5nOwotCi0vLyBTdWJjbGFzc2VzIG11c3Qgb3ZlcnJp
ZGUgdGhlc2UuCi0vLyBUaGUgImhhbmRsZSIgcHJlZml4IGlzIG5lZWRlZCB0byBhdm9pZCBvdmVy
cmlkaW5nIE5TVmlldyBtZXRob2RzLgotLSAodm9pZCloYW5kbGVNb3VzZU1vdmVkOihOU0V2ZW50
ICopZXZlbnQ7Ci0tICh2b2lkKWhhbmRsZU1vdXNlRW50ZXJlZDooTlNFdmVudCAqKWV2ZW50Owot
LSAodm9pZCloYW5kbGVNb3VzZUV4aXRlZDooTlNFdmVudCAqKWV2ZW50OwotLSAodm9pZClzZXRB
dHRyaWJ1dGVLZXlzOihOU0FycmF5ICopa2V5cyBhbmRWYWx1ZXM6KE5TQXJyYXkgKil2YWx1ZXM7
Ci0tICh2b2lkKWZvY3VzQ2hhbmdlZDsKLS0gKHZvaWQpdXBkYXRlQW5kU2V0V2luZG93OwotCi0t
IChXZWJGcmFtZSAqKXdlYkZyYW1lOwotLSAoV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2U7Ci0t
IChXZWJWaWV3ICopd2ViVmlldzsKLS0gKE5TV2luZG93ICopY3VycmVudFdpbmRvdzsKLS0gKE5h
a2VkUHRyPFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50PillbGVtZW50OwotCi0tICh2b2lkKXJl
bW92ZVRyYWNraW5nUmVjdDsKLS0gKHZvaWQpcmVzZXRUcmFja2luZ1JlY3Q7Ci0KLS0gKHZvaWQp
c3RvcFRpbWVyczsKLS0gKHZvaWQpc3RhcnRUaW1lcnM7Ci0tICh2b2lkKXJlc3RhcnRUaW1lcnM7
Ci0KLS0gKHZvaWQpc3RhcnQ7Ci0tICh2b2lkKXN0b3A7Ci0KLS0gKHZvaWQpYWRkV2luZG93T2Jz
ZXJ2ZXJzOwotLSAodm9pZClyZW1vdmVXaW5kb3dPYnNlcnZlcnM7Ci0tIChCT09MKXNob3VsZENs
aXBPdXRQbHVnaW47Ci0KLS0gKEJPT0wpc3VwcG9ydHNTbmFwc2hvdHRpbmc7Ci0tICh2b2lkKWNh
Y2hlU25hcHNob3Q7Ci0tICh2b2lkKWNsZWFyQ2FjaGVkU25hcHNob3Q7Ci0KLS0gKEJPT0wpY29u
dmVydEZyb21YOihkb3VibGUpc291cmNlWCBhbmRZOihkb3VibGUpc291cmNlWSBzcGFjZTooTlBD
b29yZGluYXRlU3BhY2Upc291cmNlU3BhY2UKLSAgICAgICAgICAgICAgICAgdG9YOihkb3VibGUg
KilkZXN0WCBhbmRZOihkb3VibGUgKilkZXN0WSBzcGFjZTooTlBDb29yZGluYXRlU3BhY2UpZGVz
dFNwYWNlOwotCi0tICh2b2lkKWludmFsaWRhdGVQbHVnaW5Db250ZW50UmVjdDooTlNSZWN0KXJl
Y3Q7Ci0KLS0gKE5TUmVjdClhY3R1YWxWaXNpYmxlUmVjdEluV2luZG93OyAvLyB0YWtlcyB0cmFu
c2Zvcm1zIGludG8gYWNjb3VudC4KLQotLSAoQ0FMYXllciAqKXBsdWdpbkxheWVyOwotCi0tIChC
T09MKWdldEZvcm1WYWx1ZTooTlNTdHJpbmcgKiopdmFsdWU7Ci0KLUBlbmQKLQotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLWJvb2wgZ2V0QXV0aGVudGljYXRpb25JbmZvKGNvbnN0IGNoYXIqIHByb3Rv
Y29sU3RyLCBjb25zdCBjaGFyKiBob3N0U3RyLCBpbnQzMl90IHBvcnQsIGNvbnN0IGNoYXIqIHNj
aGVtZVN0ciwgY29uc3QgY2hhciogcmVhbG1TdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBXVEY6OkNTdHJpbmcmIHVzZXJuYW1lLCBXVEY6OkNTdHJpbmcmIHBhc3N3b3JkKTsKLXZvaWQg
c2VuZFVzZXJDaGFuZ2VOb3RpZmljYXRpb25zKCk7Ci19IAotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5W
aWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQ
bHVnaW5WaWV3Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2I4NGIyMzQ0ZDE4
YjUyNTBiZTBjZDJlZmVkNmJhMmMzZDA5ZTY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViQmFz
ZU5ldHNjYXBlUGx1Z2luVmlldy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDkwMiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaW1wb3J0ICJXZWJCYXNlTmV0c2NhcGVQ
bHVnaW5WaWV3LmgiCi0KLSNpbXBvcnQgIk5ldHdvcmtTdG9yYWdlU2Vzc2lvbk1hcC5oIgotI2lt
cG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViS2l0TG9nZ2luZy5oIgotI2lt
cG9ydCAiV2ViS2l0TlNTdHJpbmdFeHRyYXMuaCIKLSNpbXBvcnQgIldlYk5TVVJMRXh0cmFzLmgi
Ci0jaW1wb3J0ICJXZWJOU1VSTFJlcXVlc3RFeHRyYXMuaCIKLSNpbXBvcnQgIldlYlZpZXcuaCIK
LSNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5p
dGlhbGl6ZVRocmVhZGluZy5oPgotI2ltcG9ydCA8V2ViQ29yZS9BdXRoZW50aWNhdGlvbk1hYy5o
PgotI2ltcG9ydCA8V2ViQ29yZS9CaXRtYXBJbWFnZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9DcmVk
ZW50aWFsLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0NyZWRlbnRpYWxTdG9yYWdlLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL0RvY3VtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0VsZW1lbnQuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KLSNp
bXBvcnQgPFdlYkNvcmUvSFRNTFBsdWdJbkVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTmV0
d29ya1N0b3JhZ2VTZXNzaW9uLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvUHJvdGVjdGlvblNwYWNlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlckVtYmVk
ZGVkT2JqZWN0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUpJVE9wZXJh
dGlvbnMuaD4KLSNpbXBvcnQgPFdlYktpdExlZ2FjeS9ET01Qcml2YXRlLmg+Ci0jaW1wb3J0IDxw
YWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4K
LSNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgotI2lt
cG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jZGVmaW5lIExvZ2luV2luZG93RGlkU3dpdGNo
RnJvbVVzZXJOb3RpZmljYXRpb24gICAgQCJXZWJMb2dpbldpbmRvd0RpZFN3aXRjaEZyb21Vc2Vy
Tm90aWZpY2F0aW9uIgotI2RlZmluZSBMb2dpbldpbmRvd0RpZFN3aXRjaFRvVXNlck5vdGlmaWNh
dGlvbiAgICAgIEAiV2ViTG9naW5XaW5kb3dEaWRTd2l0Y2hUb1VzZXJOb3RpZmljYXRpb24iCi0K
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1AaW1wbGVtZW50YXRpb24gV2ViQmFzZU5ldHNj
YXBlUGx1Z2luVmlldwotCi0rICh2b2lkKWluaXRpYWxpemUKLXsKLSAgICBKU0M6OmluaXRpYWxp
emUoKTsKLSAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7Ci0gICAgV2ViQ29yZTo6cG9w
dWxhdGVKSVRPcGVyYXRpb25zKCk7Ci0gICAgV2ViS2l0OjpzZW5kVXNlckNoYW5nZU5vdGlmaWNh
dGlvbnMoKTsKLX0KLQotLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lCi0gICAgICBw
bHVnaW5QYWNrYWdlOihXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UgKilwbHVnaW5QYWNrYWdlCi0g
ICAgICAgICAgICAgICAgVVJMOihOU1VSTCAqKVVSTAotICAgICAgICAgICAgYmFzZVVSTDooTlNV
UkwgKiliYXNlVVJMCi0gICAgICAgICAgIE1JTUVUeXBlOihOU1N0cmluZyAqKU1JTUUKLSAgICAg
IGF0dHJpYnV0ZUtleXM6KE5TQXJyYXkgKilrZXlzCi0gICAgYXR0cmlidXRlVmFsdWVzOihOU0Fy
cmF5ICopdmFsdWVzCi0gICAgICAgbG9hZE1hbnVhbGx5OihCT09MKWxvYWRNYW51YWxseQotICAg
ICAgICAgICAgZWxlbWVudDooUmVmUHRyPFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50PiYmKWVs
ZW1lbnQKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRXaXRoRnJhbWU6ZnJhbWVdOwotICAgIGlm
ICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBfcGx1Z2luUGFja2FnZSA9
IHBsdWdpblBhY2thZ2U7Ci0gICAgX2VsZW1lbnQgPSBXVEZNb3ZlKGVsZW1lbnQpOwotICAgIF9z
b3VyY2VVUkwgPSBhZG9wdE5TKFtVUkwgY29weV0pOwotICAgIF9iYXNlVVJMID0gYWRvcHROUyhb
YmFzZVVSTCBjb3B5XSk7Ci0gICAgX01JTUVUeXBlID0gYWRvcHROUyhbTUlNRSBjb3B5XSk7Ci0K
LSAgICBbc2VsZiBzZXRBdHRyaWJ1dGVLZXlzOmtleXMgYW5kVmFsdWVzOnZhbHVlc107Ci0KLSAg
ICBpZiAobG9hZE1hbnVhbGx5KQotICAgICAgICBfbW9kZSA9IE5QX0ZVTEw7Ci0gICAgZWxzZQot
ICAgICAgICBfbW9kZSA9IE5QX0VNQkVEOwotICAgIAotICAgIF9sb2FkTWFudWFsbHkgPSBsb2Fk
TWFudWFsbHk7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAg
IEFTU0VSVCghX2lzU3RhcnRlZCk7Ci0KLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKFdl
Yk5ldHNjYXBlUGx1Z2luUGFja2FnZSAqKXBsdWdpblBhY2thZ2UKLXsKLSAgICByZXR1cm4gX3Bs
dWdpblBhY2thZ2UuZ2V0KCk7Ci19Ci0gICAgCi0tIChCT09MKWlzRmxpcHBlZAotewotICAgIHJl
dHVybiBZRVM7Ci19Ci0KLS0gKE5TVVJMICopVVJMV2l0aENTdHJpbmc6KGNvbnN0IGNoYXIgKilj
U3RyaW5nCi17Ci0gICAgaWYgKCFjU3RyaW5nKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAot
ICAgIE5TU3RyaW5nICpzdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENTdHJpbmc6Y1N0cmlu
ZyBlbmNvZGluZzpOU0lTT0xhdGluMVN0cmluZ0VuY29kaW5nXTsKLSAgICBzdHJpbmcgPSBbc3Ry
aW5nIHN0cmluZ0J5UmVwbGFjaW5nT2NjdXJyZW5jZXNPZlN0cmluZzpAIlxyIiB3aXRoU3RyaW5n
OkAiIl07Ci0gICAgc3RyaW5nID0gW3N0cmluZyBzdHJpbmdCeVJlcGxhY2luZ09jY3VycmVuY2Vz
T2ZTdHJpbmc6QCJcbiIgd2l0aFN0cmluZzpAIiJdOwotICAgIHJldHVybiBbTlNVUkwgX3dlYl9V
UkxXaXRoRGF0YUFzU3RyaW5nOnN0cmluZyByZWxhdGl2ZVRvVVJMOl9iYXNlVVJMLmdldCgpXTsK
LX0KLQotLSAoTlNNdXRhYmxlVVJMUmVxdWVzdCAqKXJlcXVlc3RXaXRoVVJMQ1N0cmluZzooY29u
c3QgY2hhciAqKVVSTENTdHJpbmcKLXsKLSAgICBOU1VSTCAqVVJMID0gW3NlbGYgVVJMV2l0aENT
dHJpbmc6VVJMQ1N0cmluZ107Ci0gICAgaWYgKCFVUkwpCi0gICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgCi0gICAgTlNNdXRhYmxlVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtOU011dGFibGVVUkxSZXF1
ZXN0IHJlcXVlc3RXaXRoVVJMOlVSTF07Ci0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiB3
ZWJGcmFtZV0pOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgW3Jl
cXVlc3QgX3dlYl9zZXRIVFRQUmVmZXJyZXI6ZnJhbWUtPmxvYWRlcigpLm91dGdvaW5nUmVmZXJy
ZXIoKV07Ci0gICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0KLS8vIE1ldGhvZHMgdGhhdCBzdWJjbGFz
c2VzIG11c3Qgb3ZlcnJpZGUKLS0gKHZvaWQpc2V0QXR0cmlidXRlS2V5czooTlNBcnJheSAqKWtl
eXMgYW5kVmFsdWVzOihOU0FycmF5ICopdmFsdWVzCi17Ci0gICAgLy8gVGhpcyBuZWVkcyB0byBi
ZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCi19Ci0KLS0gKHZvaWQpaGFuZGxlTW91c2VNb3Zl
ZDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgLy8gVGhpcyBuZWVkcyB0byBiZSBvdmVycmlkZGVu
IGJ5IHN1YmNsYXNzZXMuCi19Ci0KLS0gKHZvaWQpaGFuZGxlTW91c2VFbnRlcmVkOihOU0V2ZW50
ICopZXZlbnQKLXsKLSAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xh
c3Nlcy4KLX0KLQotLSAodm9pZCloYW5kbGVNb3VzZUV4aXRlZDooTlNFdmVudCAqKWV2ZW50Ci17
Ci0gICAgLy8gVGhpcyBuZWVkcyB0byBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCi19Ci0K
LS0gKHZvaWQpZm9jdXNDaGFuZ2VkCi17Ci0gICAgLy8gVGhpcyBuZWVkcyB0byBiZSBvdmVycmlk
ZGVuIGJ5IHN1YmNsYXNzZXMuCi19Ci0KLS0gKHZvaWQpd2luZG93Rm9jdXNDaGFuZ2VkOihCT09M
KWhhc0ZvY3VzCi17Ci0gICAgLy8gVGhpcyBuZWVkcyB0byBiZSBvdmVycmlkZGVuIGJ5IHN1YmNs
YXNzZXMuCi19Ci0KLS0gKEJPT0wpY3JlYXRlUGx1Z2luCi17Ci0gICAgLy8gVGhpcyBuZWVkcyB0
byBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCi0gICAgcmV0dXJuIE5POwotfQotCi0tICh2
b2lkKWxvYWRTdHJlYW0KLXsKLSAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIG92ZXJyaWRkZW4gYnkg
c3ViY2xhc3Nlcy4KLX0KLQotLSAoQk9PTClzaG91bGRTdG9wCi17Ci0gICAgLy8gVGhpcyBuZWVk
cyB0byBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCi0gICAgcmV0dXJuIFlFUzsKLX0KLQot
LSAodm9pZClkZXN0cm95UGx1Z2luCi17Ci0gICAgLy8gVGhpcyBuZWVkcyB0byBiZSBvdmVycmlk
ZGVuIGJ5IHN1YmNsYXNzZXMuCi19Ci0KLS0gKHZvaWQpdXBkYXRlQW5kU2V0V2luZG93Ci17Ci0g
ICAgLy8gVGhpcyBuZWVkcyB0byBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCi19Ci0KLS0g
KHZvaWQpc2VuZE1vZGlmaWVyRXZlbnRXaXRoS2V5Q29kZTooaW50KWtleUNvZGUgY2hhcmFjdGVy
OihjaGFyKWNoYXJhY3RlcgotewotICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgb3ZlcnJpZGRlbiBi
eSBzdWJjbGFzc2VzLgotfQotCi0tICh2b2lkKXByaXZhdGVCcm93c2luZ01vZGVEaWRDaGFuZ2UK
LXsKLX0KLQotLSAodm9pZClyZW1vdmVUcmFja2luZ1JlY3QKLXsKLSAgICBpZiAoX3RyYWNraW5n
VGFnKSB7Ci0gICAgICAgIFtzZWxmIHJlbW92ZVRyYWNraW5nUmVjdDpfdHJhY2tpbmdUYWddOwot
ICAgICAgICBfdHJhY2tpbmdUYWcgPSAwOwotICAgICAgICAKLSAgICAgICAgLy8gRG8gdGhlIGZv
bGxvd2luZyBhZnRlciBzZXR0aW5nIHRyYWNraW5nVGFnIHRvIDAgc28gd2UgZG9uJ3QgcmUtZW50
ZXIuCi0gICAgICAgIAotICAgICAgICAvLyBCYWxhbmNlIHRoZSByZXRhaW4gaW4gcmVzZXRUcmFj
a2luZ1JlY3QuIFVzZSBhdXRvcmVsZWFzZSBpbiBjYXNlIHdlIGhvbGQgCi0gICAgICAgIC8vIHRo
ZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgd2luZG93IGR1cmluZyB0ZWFyLWRvd24sIHRvIGF2b2lk
IGNyYXNoaW5nIEFwcEtpdC4gCi0gICAgICAgIFtbc2VsZiB3aW5kb3ddIGF1dG9yZWxlYXNlXTsK
LSAgICB9Ci19Ci0KLS0gKHZvaWQpcmVzZXRUcmFja2luZ1JlY3QKLXsKLSAgICBbc2VsZiByZW1v
dmVUcmFja2luZ1JlY3RdOwotICAgIGlmIChfaXNTdGFydGVkKSB7Ci0gICAgICAgIC8vIFJldGFp
biB0aGUgd2luZG93IHNvIHRoYXQgcmVtb3ZlVHJhY2tpbmdSZWN0IGNhbiB3b3JrIGFmdGVyIHRo
ZSB3aW5kb3cgaXMgY2xvc2VkLgotICAgICAgICBbW3NlbGYgd2luZG93XSByZXRhaW5dOwotICAg
ICAgICBfdHJhY2tpbmdUYWcgPSBbc2VsZiBhZGRUcmFja2luZ1JlY3Q6W3NlbGYgYm91bmRzXSBv
d25lcjpzZWxmIHVzZXJEYXRhOm5pbCBhc3N1bWVJbnNpZGU6Tk9dOwotICAgIH0KLX0KLQotLSAo
dm9pZClzdG9wVGltZXJzCi17Ci0gICAgX3Nob3VsZEZpcmVUaW1lcnMgPSBOTzsKLX0KLQotLSAo
dm9pZClzdGFydFRpbWVycwotewotICAgIF9zaG91bGRGaXJlVGltZXJzID0gWUVTOwotfQotCi0t
ICh2b2lkKXJlc3RhcnRUaW1lcnMKLXsKLSAgICBbc2VsZiBzdG9wVGltZXJzXTsKLSAgICAKLSAg
ICBpZiAoIV9pc1N0YXJ0ZWQgfHwgW1tzZWxmIHdpbmRvd10gaXNNaW5pYXR1cml6ZWRdKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgW3NlbGYgc3RhcnRUaW1lcnNdOwotfQotCi0tIChOU1Jl
Y3QpX3dpbmRvd0NsaXBSZWN0Ci17Ci0gICAgYXV0byogcmVuZGVyZXIgPSBfZWxlbWVudC0+cmVu
ZGVyZXIoKTsKLSAgICBpZiAoIWlzPFJlbmRlckVtYmVkZGVkT2JqZWN0PihyZW5kZXJlcikpCi0g
ICAgICAgIHJldHVybiBOU1plcm9SZWN0OwotICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJFbWJl
ZGRlZE9iamVjdD4oKnJlbmRlcmVyKS53aW5kb3dDbGlwUmVjdCgpOwotfQotCi0tIChOU1JlY3Qp
dmlzaWJsZVJlY3QKLXsKLSAgICAvLyBXZWJDb3JlIG1heSBpbXBvc2UgYW4gYWRkaXRpb25hbCBj
bGlwICh2aWEgQ1NTIG92ZXJmbG93IG9yIGNsaXAgcHJvcGVydGllcykuICBGZXRjaAotICAgIC8v
IHRoYXQgY2xpcCBub3cuICAgIAotICAgIHJldHVybiBOU0ludGVyc2VjdGlvblJlY3QoW3NlbGYg
Y29udmVydFJlY3Q6W3NlbGYgX3dpbmRvd0NsaXBSZWN0XSBmcm9tVmlldzpuaWxdLCBbc3VwZXIg
dmlzaWJsZVJlY3RdKTsKLX0KLQotLSAoQk9PTClhY2NlcHRzRmlyc3RSZXNwb25kZXIKLXsKLSAg
ICByZXR1cm4gWUVTOwotfQotCi0tICh2b2lkKXNlbmRBY3RpdmF0ZUV2ZW50OihCT09MKWFjdGl2
YXRlCi17Ci0gICAgaWYgKCFfaXNTdGFydGVkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
W3NlbGYgd2luZG93Rm9jdXNDaGFuZ2VkOmFjdGl2YXRlXTsKLX0KLQotLSAodm9pZClzZXRIYXNG
b2N1czooQk9PTClmbGFnCi17Ci0gICAgaWYgKCFfaXNTdGFydGVkKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgaWYgKF9oYXNGb2N1cyA9PSBmbGFnKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgX2hhc0ZvY3VzID0gZmxhZzsKLSAgICAKLSAgICBbc2VsZiBmb2N1c0NoYW5nZWRdOwot
fQotCi0tICh2b2lkKWFkZFdpbmRvd09ic2VydmVycwotewotICAgIEFTU0VSVChbc2VsZiB3aW5k
b3ddKTsKLSAgICAKLSAgICBOU1dpbmRvdyAqdGhlV2luZG93ID0gW3NlbGYgd2luZG93XTsKLSAg
ICAKLSAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAqbm90aWZpY2F0aW9uQ2VudGVyID0gW05TTm90
aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIg
YWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Iod2luZG93V2lsbENsb3NlOikgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTpOU1dpbmRvd1dpbGxDbG9zZU5vdGlm
aWNhdGlvbiBvYmplY3Q6dGhlV2luZG93XTsgCi0gICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRP
YnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih3aW5kb3dCZWNhbWVLZXk6KQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6TlNXaW5kb3dEaWRCZWNvbWVLZXlOb3RpZmlj
YXRpb24gb2JqZWN0OnRoZVdpbmRvd107Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNl
cnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih3aW5kb3dSZXNpZ25lZEtleTopCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTpOU1dpbmRvd0RpZFJlc2lnbktleU5vdGlmaWNh
dGlvbiBvYmplY3Q6dGhlV2luZG93XTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2Vy
dmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHdpbmRvd0RpZE1pbmlhdHVyaXplOikKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOk5TV2luZG93RGlkTWluaWF0dXJpemVOb3Rp
ZmljYXRpb24gb2JqZWN0OnRoZVdpbmRvd107Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRP
YnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih3aW5kb3dEaWREZW1pbmlhdHVyaXplOikK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOk5TV2luZG93RGlkRGVtaW5pYXR1
cml6ZU5vdGlmaWNhdGlvbiBvYmplY3Q6dGhlV2luZG93XTsKLSAgICAKLSAgICBbbm90aWZpY2F0
aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGxvZ2luV2luZG93
RGlkU3dpdGNoRnJvbVVzZXI6KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6
TG9naW5XaW5kb3dEaWRTd2l0Y2hGcm9tVXNlck5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKLSAg
ICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9y
KGxvZ2luV2luZG93RGlkU3dpdGNoVG9Vc2VyOikKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuYW1lOkxvZ2luV2luZG93RGlkU3dpdGNoVG9Vc2VyTm90aWZpY2F0aW9uIG9iamVjdDpu
aWxdOwotfQotCi0tICh2b2lkKXJlbW92ZVdpbmRvd09ic2VydmVycwotewotICAgIE5TTm90aWZp
Y2F0aW9uQ2VudGVyICpub3RpZmljYXRpb25DZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIg
ZGVmYXVsdENlbnRlcl07Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpz
ZWxmIG5hbWU6TlNXaW5kb3dXaWxsQ2xvc2VOb3RpZmljYXRpb24gICAgICAgIG9iamVjdDpuaWxd
OyAKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpOU1dp
bmRvd0RpZEJlY29tZUtleU5vdGlmaWNhdGlvbiAgICAgb2JqZWN0Om5pbF07Ci0gICAgW25vdGlm
aWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNXaW5kb3dEaWRSZXNpZ25L
ZXlOb3RpZmljYXRpb24gICAgIG9iamVjdDpuaWxdOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIg
cmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TV2luZG93RGlkTWluaWF0dXJpemVOb3RpZmljYXRp
b24gICBvYmplY3Q6bmlsXTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVy
OnNlbGYgbmFtZTpOU1dpbmRvd0RpZERlbWluaWF0dXJpemVOb3RpZmljYXRpb24gb2JqZWN0Om5p
bF07Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6TG9n
aW5XaW5kb3dEaWRTd2l0Y2hGcm9tVXNlck5vdGlmaWNhdGlvbiAgIG9iamVjdDpuaWxdOwotICAg
IFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOkxvZ2luV2luZG93
RGlkU3dpdGNoVG9Vc2VyTm90aWZpY2F0aW9uICAgICBvYmplY3Q6bmlsXTsKLX0KLQotLSAodm9p
ZClzdGFydAotewotICAgIEFTU0VSVChbc2VsZiBjdXJyZW50V2luZG93XSk7Ci0gICAgCi0gICAg
aWYgKF9pc1N0YXJ0ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoX3RyaWVkQW5k
RmFpbGVkVG9DcmVhdGVQbHVnaW4pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQo
W3NlbGYgd2ViVmlld10pOwotICAgIAotICAgIGlmICghW1tbc2VsZiB3ZWJWaWV3XSBwcmVmZXJl
bmNlc10gYXJlUGx1Z0luc0VuYWJsZWRdKQotICAgICAgICByZXR1cm47Ci0gICAKLSAgICBGcmFt
ZSogZnJhbWUgPSBjb3JlKFtzZWxmIHdlYkZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFn
ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJvb2wgd2FzRGVmZXJyaW5nID0gcGFnZS0+
ZGVmZXJzTG9hZGluZygpOwotICAgIGlmICghd2FzRGVmZXJyaW5nKQotICAgICAgICBwYWdlLT5z
ZXREZWZlcnNMb2FkaW5nKHRydWUpOwotCi0gICAgQk9PTCByZXN1bHQgPSBbc2VsZiBjcmVhdGVQ
bHVnaW5dOwotICAgIAotICAgIGlmICghd2FzRGVmZXJyaW5nKQotICAgICAgICBwYWdlLT5zZXRE
ZWZlcnNMb2FkaW5nKGZhbHNlKTsKLQotICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIF90cmll
ZEFuZEZhaWxlZFRvQ3JlYXRlUGx1Z2luID0gWUVTOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIAotICAgIF9pc1N0YXJ0ZWQgPSBZRVM7Ci0KLSAgICBbW3NlbGYgd2ViVmlld10gYWRkUGx1
Z2luSW5zdGFuY2VWaWV3OnNlbGZdOwotCi0gICAgaWYgKFtzZWxmIGN1cnJlbnRXaW5kb3ddKQot
ICAgICAgICBbc2VsZiB1cGRhdGVBbmRTZXRXaW5kb3ddOwotCi0gICAgaWYgKFtzZWxmIHdpbmRv
d10pIHsKLSAgICAgICAgW3NlbGYgYWRkV2luZG93T2JzZXJ2ZXJzXTsKLSAgICAgICAgaWYgKFtb
c2VsZiB3aW5kb3ddIGlzS2V5V2luZG93XSkgewotICAgICAgICAgICAgW3NlbGYgc2VuZEFjdGl2
YXRlRXZlbnQ6WUVTXTsKLSAgICAgICAgfQotICAgICAgICBbc2VsZiByZXN0YXJ0VGltZXJzXTsK
LSAgICB9Ci0gICAgCi0gICAgW3NlbGYgcmVzZXRUcmFja2luZ1JlY3RdOwotICAgIAotICAgIFtz
ZWxmIGxvYWRTdHJlYW1dOwotfQotCi0tICh2b2lkKXN0b3AKLXsKLSAgICBpZiAoIVtzZWxmIHNo
b3VsZFN0b3BdKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgW3NlbGYgcmVtb3ZlVHJhY2tp
bmdSZWN0XTsKLSAgICAKLSAgICBpZiAoIV9pc1N0YXJ0ZWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIF9pc1N0YXJ0ZWQgPSBOTzsKLSAgICAKLSAgICBbW3NlbGYgd2ViVmlld10gcmVtb3ZlUGx1
Z2luSW5zdGFuY2VWaWV3OnNlbGZdOwotICAgIAotICAgIC8vIFN0b3AgdGhlIHRpbWVycwotICAg
IFtzZWxmIHN0b3BUaW1lcnNdOwotICAgIAotICAgIC8vIFN0b3Agbm90aWZpY2F0aW9ucyBhbmQg
Y2FsbGJhY2tzLgotICAgIFtzZWxmIHJlbW92ZVdpbmRvd09ic2VydmVyc107Ci0gICAgCi0gICAg
W3NlbGYgZGVzdHJveVBsdWdpbl07Ci19Ci0KLS0gKEJPT0wpc2hvdWxkQ2xpcE91dFBsdWdpbgot
ewotICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOwotICAgIHJldHVybiAhd2lu
ZG93IHx8IFt3aW5kb3cgaXNNaW5pYXR1cml6ZWRdIHx8IFtOU0FwcCBpc0hpZGRlbl0gfHwgIVtz
ZWxmIGlzRGVzY2VuZGFudE9mOltbc2VsZiB3aW5kb3ddIGNvbnRlbnRWaWV3XV0gfHwgW3NlbGYg
aXNIaWRkZW5Pckhhc0hpZGRlbkFuY2VzdG9yXTsKLX0KLQotLSAoQk9PTClzdXBwb3J0c1NuYXBz
aG90dGluZwotewotICAgIHJldHVybiBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgc3VwcG9ydHNTbmFw
c2hvdHRpbmddOwotfQotCi0tICh2b2lkKWNhY2hlU25hcHNob3QKLXsKLSAgICBOU1NpemUgYm91
bmRzU2l6ZSA9IFtzZWxmIGJvdW5kc10uc2l6ZTsKLSAgICBpZiAoIWJvdW5kc1NpemUuaGVpZ2h0
IHx8ICFib3VuZHNTaXplLndpZHRoKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHNuYXBz
aG90ID0gYWRvcHROUyhbW05TSW1hZ2UgYWxsb2NdIGluaXRXaXRoU2l6ZTpib3VuZHNTaXplXSk7
Ci0gICAgICAgIAotICAgIF9zbmFwc2hvdHRpbmcgPSBZRVM7Ci0gICAgW3NuYXBzaG90IGxvY2tG
b2N1c107Ci0gICAgW3NlbGYgZHJhd1JlY3Q6W3NlbGYgYm91bmRzXV07Ci0gICAgW3NuYXBzaG90
IHVubG9ja0ZvY3VzXTsKLSAgICBfc25hcHNob3R0aW5nID0gTk87Ci0gICAgCi0gICAgX2NhY2hl
ZFNuYXBzaG90ID0gV1RGTW92ZShzbmFwc2hvdCk7Ci19Ci0KLS0gKHZvaWQpY2xlYXJDYWNoZWRT
bmFwc2hvdAotewotICAgIF9jYWNoZWRTbmFwc2hvdC5jbGVhcigpOwotfQotCi0tICh2b2lkKXZp
ZXdXaWxsTW92ZVRvV2luZG93OihOU1dpbmRvdyAqKW5ld1dpbmRvdwotewotICAgIC8vIFdlIG11
c3QgcmVtb3ZlIHRoZSB0cmFja2luZyByZWN0IGJlZm9yZSB3ZSBtb3ZlIHRvIHRoZSBuZXcgd2lu
ZG93LgotICAgIC8vIE9uY2Ugd2UgbW92ZSB0byB0aGUgbmV3IHdpbmRvdywgaXQgd2lsbCBiZSB0
b28gbGF0ZS4KLSAgICBbc2VsZiByZW1vdmVUcmFja2luZ1JlY3RdOwotICAgIFtzZWxmIHJlbW92
ZVdpbmRvd09ic2VydmVyc107Ci0gICAgCi0gICAgLy8gV29ya2Fyb3VuZCBmb3I6IDxyZGFyOi8v
cHJvYmxlbS8zODIyODcxPiByZXNpZ25GaXJzdFJlc3BvbmRlciBpcyBub3Qgc2VudCB0byBmaXJz
dCByZXNwb25kZXIgdmlldyB3aGVuIGl0IGlzIHJlbW92ZWQgZnJvbSB0aGUgd2luZG93Ci0gICAg
W3NlbGYgc2V0SGFzRm9jdXM6Tk9dOwotICAgIAotICAgIGlmICghbmV3V2luZG93KSB7Ci0gICAg
ICAgIGlmIChbW3NlbGYgd2ViVmlld10gaG9zdFdpbmRvd10pIHsKLSAgICAgICAgICAgIC8vIFZp
ZXcgd2lsbCBiZSBtb3ZlZCBvdXQgb2YgdGhlIGFjdHVhbCB3aW5kb3cgYnV0IGl0IHN0aWxsIGhh
cyBhIGhvc3Qgd2luZG93LgotICAgICAgICAgICAgW3NlbGYgc3RvcFRpbWVyc107Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBWaWV3IHdpbGwgaGF2ZSBubyBhc3NvY2lhdGVkIHdp
bmRvd3MuCi0gICAgICAgICAgICBbc2VsZiBzdG9wXTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gU3RvcCBvYnNlcnZpbmcgV2ViUHJlZmVyZW5jZXNDaGFuZ2VkSW50ZXJuYWxOb3RpZmlj
YXRpb24gLS0gd2Ugb25seSBuZWVkIHRvIG9ic2VydmUgdGhpcyB3aGVuIGluc3RhbGxlZCBpbiB0
aGUgdmlldyBoaWVyYXJjaHkuCi0gICAgICAgICAgICAvLyBXaGVuIG5vdCBpbiB0aGUgdmlldyBo
aWVyYXJjaHksIC12aWV3V2lsbE1vdmVUb1dpbmRvdzogYW5kIC12aWV3RGlkTW92ZVRvV2luZG93
IHdpbGwgc3RhcnQvc3RvcCB0aGUgcGx1Z2luIGFzIG5lZWRlZC4KLSAgICAgICAgICAgIFtbTlNO
b3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1l
OldlYlByZWZlcmVuY2VzQ2hhbmdlZEludGVybmFsTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi0tICh2b2lkKXZpZXdXaWxsTW92ZVRvU3VwZXJ2aWV3OihO
U1ZpZXcgKiluZXdTdXBlcnZpZXcKLXsKLSAgICBpZiAoIW5ld1N1cGVydmlldykgewotICAgICAg
ICAvLyBTdG9wIHRoZSBwbHVnLWluIHdoZW4gaXQgaXMgcmVtb3ZlZCBmcm9tIGl0cyBzdXBlcnZp
ZXcuICBJdCBpcyBub3Qgc3VmZmljaWVudCB0byBkbyB0aGlzIGluIC12aWV3V2lsbE1vdmVUb1dp
bmRvdzpuaWwsIGJlY2F1c2UKLSAgICAgICAgLy8gdGhlIFdlYlZpZXcgbWlnaHQgc3RpbGwgaGFz
IGEgaG9zdFdpbmRvdyBhdCB0aGF0IHBvaW50LCB3aGljaCBwcmV2ZW50cyB0aGUgcGx1Zy1pbiBm
cm9tIGJlaW5nIGRlc3Ryb3llZC4KLSAgICAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBzdGFy
dCB0aGUgcGx1Zy1pbiB3aGVuIG1vdmluZyBpbnRvIGEgc3VwZXJ2aWV3LiAgLXZpZXdEaWRNb3Zl
VG9XaW5kb3cgdGFrZXMgY2FyZSBvZiB0aGF0LgotICAgICAgICBbc2VsZiBzdG9wXTsKLSAgICAg
ICAgCi0gICAgICAgIC8vIFN0b3Agb2JzZXJ2aW5nIFdlYlByZWZlcmVuY2VzQ2hhbmdlZEludGVy
bmFsTm90aWZpY2F0aW9uIC0tIHdlIG9ubHkgbmVlZCB0byBvYnNlcnZlIHRoaXMgd2hlbiBpbnN0
YWxsZWQgaW4gdGhlIHZpZXcgaGllcmFyY2h5LgotICAgICAgICAvLyBXaGVuIG5vdCBpbiB0aGUg
dmlldyBoaWVyYXJjaHksIC12aWV3V2lsbE1vdmVUb1dpbmRvdzogYW5kIC12aWV3RGlkTW92ZVRv
V2luZG93IHdpbGwgc3RhcnQvc3RvcCB0aGUgcGx1Z2luIGFzIG5lZWRlZC4KLSAgICAgICAgW1tO
U05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmIG5h
bWU6V2ViUHJlZmVyZW5jZXNDaGFuZ2VkSW50ZXJuYWxOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07
Ci0gICAgfQotfQotCi0tICh2b2lkKXZpZXdEaWRNb3ZlVG9XaW5kb3cKLXsKLSAgICBbc2VsZiBy
ZXNldFRyYWNraW5nUmVjdF07Ci0gICAgCi0gICAgaWYgKFtzZWxmIHdpbmRvd10pIHsKLSAgICAg
ICAgLy8gV2hpbGUgaW4gdGhlIHZpZXcgaGllcmFyY2h5LCBvYnNlcnZlIFdlYlByZWZlcmVuY2Vz
Q2hhbmdlZEludGVybmFsTm90aWZpY2F0aW9uIHNvIHRoYXQgd2UgY2FuIHN0YXJ0L3N0b3AgZGVw
ZW5kaW5nCi0gICAgICAgIC8vIG9uIHdoZXRoZXIgcGx1Z2lucyBhcmUgZW5hYmxlZC4KLSAgICAg
ICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxm
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0
b3I6QHNlbGVjdG9yKHByZWZlcmVuY2VzSGF2ZUNoYW5nZWQ6KQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOldlYlByZWZlcmVuY2VzQ2hh
bmdlZEludGVybmFsTm90aWZpY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvYmplY3Q6bmlsXTsKLQotICAgICAgICBfaXNQcml2YXRlQnJv
d3NpbmdFbmFibGVkID0gW1tbc2VsZiB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gcHJpdmF0ZUJyb3dz
aW5nRW5hYmxlZF07Ci0gICAgICAgIAotICAgICAgICAvLyBWaWV3IG1vdmVkIHRvIGFuIGFjdHVh
bCB3aW5kb3cuIFN0YXJ0IGl0IGlmIG5vdCBhbHJlYWR5IHN0YXJ0ZWQuCi0gICAgICAgIFtzZWxm
IHN0YXJ0XTsKLQotICAgICAgICAvLyBTdGFydGluZyB0aGUgcGx1Zy1pbiBjYW4gcmVzdWx0IGlu
IGl0IHJlbW92aW5nIGl0c2VsZiBmcm9tIHRoZSB3aW5kb3cgc28gd2UgbmVlZCB0byBlbnN1cmUg
dGhhdCB3ZSdyZSBzdGlsbCBpbgotICAgICAgICAvLyBwbGFjZSBiZWZvcmUgZG9pbmcgYW55dGhp
bmcgdGhhdCByZXF1aXJlcyBhIHdpbmRvdy4KLSAgICAgICAgaWYgKFtzZWxmIHdpbmRvd10pIHsK
LSAgICAgICAgICAgIFtzZWxmIHJlc3RhcnRUaW1lcnNdOwotICAgICAgICAgICAgW3NlbGYgYWRk
V2luZG93T2JzZXJ2ZXJzXTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoW1tzZWxmIHdlYlZp
ZXddIGhvc3RXaW5kb3ddKSB7Ci0gICAgICAgIC8vIFZpZXcgbW92ZWQgb3V0IG9mIGFuIGFjdHVh
bCB3aW5kb3csIGJ1dCBzdGlsbCBoYXMgYSBob3N0IHdpbmRvdy4KLSAgICAgICAgLy8gQ2FsbCBz
ZXRXaW5kb3cgdG8gZXhwbGljaXRseSAiY2xpcCBvdXQiIHRoZSBwbHVnLWluIGZyb20gc2lnaHQu
Ci0gICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIHRvIGRvIHRoaXMgd2hlcmUgd2Ug
Y2FsbCBzdG9wTnVsbEV2ZW50cyBpbiB2aWV3V2lsbE1vdmVUb1dpbmRvdy4KLSAgICAgICAgW3Nl
bGYgdXBkYXRlQW5kU2V0V2luZG93XTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpdmlld1dpbGxNb3Zl
VG9Ib3N0V2luZG93OihOU1dpbmRvdyAqKWhvc3RXaW5kb3cKLXsKLSAgICBpZiAoIWhvc3RXaW5k
b3cgJiYgIVtzZWxmIHdpbmRvd10pIHsKLSAgICAgICAgLy8gVmlldyB3aWxsIGhhdmUgbm8gYXNz
b2NpYXRlZCB3aW5kb3dzLgotICAgICAgICBbc2VsZiBzdG9wXTsKLSAgICAgICAgCi0gICAgICAg
IC8vIFJlbW92ZSBXZWJQcmVmZXJlbmNlc0NoYW5nZWRJbnRlcm5hbE5vdGlmaWNhdGlvbiBvYnNl
cnZlciAtLSB3ZSB3aWxsIG9ic2VydmUgb25jZSBhZ2FpbiB3aGVuIHdlIG1vdmUgYmFjayBpbnRv
IHRoZSB3aW5kb3cKLSAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVy
XSByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6V2ViUHJlZmVyZW5jZXNDaGFuZ2VkSW50ZXJuYWxO
b3RpZmljYXRpb24gb2JqZWN0Om5pbF07Ci0gICAgfQotfQotCi0tICh2b2lkKXZpZXdEaWRNb3Zl
VG9Ib3N0V2luZG93Ci17Ci0gICAgaWYgKFtbc2VsZiB3ZWJWaWV3XSBob3N0V2luZG93XSkgewot
ICAgICAgICAvLyBWaWV3IG5vdyBoYXMgYW4gYXNzb2NpYXRlZCB3aW5kb3cuIFN0YXJ0IGl0IGlm
IG5vdCBhbHJlYWR5IHN0YXJ0ZWQuCi0gICAgICAgIFtzZWxmIHN0YXJ0XTsKLSAgICB9Ci19Ci0K
LS8vIE1BUks6IE5PVElGSUNBVElPTlMKLQotLSAodm9pZCl3aW5kb3dXaWxsQ2xvc2U6KE5TTm90
aWZpY2F0aW9uICopbm90aWZpY2F0aW9uIAotewotICAgIFtzZWxmIHN0b3BdOyAKLX0gCi0KLS0g
KHZvaWQpd2luZG93QmVjYW1lS2V5OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewot
ICAgIFtzZWxmIHNlbmRBY3RpdmF0ZUV2ZW50OllFU107Ci0gICAgW3NlbGYgaW52YWxpZGF0ZVBs
dWdpbkNvbnRlbnRSZWN0OltzZWxmIGJvdW5kc11dOwotICAgIFtzZWxmIHJlc3RhcnRUaW1lcnNd
OwotfQotCi0tICh2b2lkKXdpbmRvd1Jlc2lnbmVkS2V5OihOU05vdGlmaWNhdGlvbiAqKW5vdGlm
aWNhdGlvbgotewotICAgIFtzZWxmIHNlbmRBY3RpdmF0ZUV2ZW50Ok5PXTsKLSAgICBbc2VsZiBp
bnZhbGlkYXRlUGx1Z2luQ29udGVudFJlY3Q6W3NlbGYgYm91bmRzXV07Ci0gICAgW3NlbGYgcmVz
dGFydFRpbWVyc107Ci19Ci0KLS0gKHZvaWQpd2luZG93RGlkTWluaWF0dXJpemU6KE5TTm90aWZp
Y2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgW3NlbGYgc3RvcFRpbWVyc107Ci19Ci0KLS0g
KHZvaWQpd2luZG93RGlkRGVtaW5pYXR1cml6ZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRp
b24KLXsKLSAgICBbc2VsZiByZXN0YXJ0VGltZXJzXTsKLX0KLQotLSAodm9pZClsb2dpbldpbmRv
d0RpZFN3aXRjaEZyb21Vc2VyOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAg
IFtzZWxmIHN0b3BUaW1lcnNdOwotfQotCi0tKHZvaWQpbG9naW5XaW5kb3dEaWRTd2l0Y2hUb1Vz
ZXI6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgW3NlbGYgcmVzdGFydFRp
bWVyc107Ci19Ci0KLS0gKHZvaWQpcHJlZmVyZW5jZXNIYXZlQ2hhbmdlZDooTlNOb3RpZmljYXRp
b24gKilub3RpZmljYXRpb24KLXsKLSAgICBXZWJQcmVmZXJlbmNlcyAqcHJlZmVyZW5jZXMgPSBb
W3NlbGYgd2ViVmlld10gcHJlZmVyZW5jZXNdOwotCi0gICAgaWYgKFtub3RpZmljYXRpb24gb2Jq
ZWN0XSAhPSBwcmVmZXJlbmNlcykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEJPT0wgYXJl
UGx1Z0luc0VuYWJsZWQgPSBbcHJlZmVyZW5jZXMgYXJlUGx1Z0luc0VuYWJsZWRdOwotICAgIGlm
IChfaXNTdGFydGVkICE9IGFyZVBsdWdJbnNFbmFibGVkKSB7Ci0gICAgICAgIGlmIChhcmVQbHVn
SW5zRW5hYmxlZCkgewotICAgICAgICAgICAgaWYgKFtzZWxmIGN1cnJlbnRXaW5kb3ddKSB7Ci0g
ICAgICAgICAgICAgICAgW3NlbGYgc3RhcnRdOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgW3NlbGYgc3RvcF07Ci0gICAgICAgICAgICBbc2VsZiBpbnZhbGlk
YXRlUGx1Z2luQ29udGVudFJlY3Q6W3NlbGYgYm91bmRzXV07Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi0gICAgQk9PTCBpc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQgPSBbcHJlZmVyZW5jZXMgcHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZF07Ci0gICAgaWYgKGlzUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCAh
PSBfaXNQcml2YXRlQnJvd3NpbmdFbmFibGVkKSB7Ci0gICAgICAgIF9pc1ByaXZhdGVCcm93c2lu
Z0VuYWJsZWQgPSBpc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQ7Ci0gICAgICAgIFtzZWxmIHByaXZh
dGVCcm93c2luZ01vZGVEaWRDaGFuZ2VdOwotICAgIH0KLX0KLQotQUxMT1dfREVQUkVDQVRFRF9J
TVBMRU1FTlRBVElPTlNfQkVHSU4KLS0gKHZvaWQpcmVuZXdHU3RhdGUKLUFMTE9XX0RFUFJFQ0FU
RURfSU1QTEVNRU5UQVRJT05TX0VORAotewotICAgIFtzdXBlciByZW5ld0dTdGF0ZV07Ci0gICAg
Ci0gICAgLy8gLXJlbmV3R1N0YXRlIGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgdmlldydzIGdlb21l
dHJ5IGNoYW5nZXMuICBJdCdzIGEgbGl0dGxlIGhhY2t5IHRvIG92ZXJyaWRlIHRoaXMgbWV0aG9k
LCBidXQKLSAgICAvLyBtdWNoIHNhZmVyIHRoYW4gd2Fsa2luZyB1cCB0aGUgdmlldyBoaWVyYXJj
aHkgYW5kIG9ic2VydmluZyBmcmFtZS9ib3VuZHMgY2hhbmdlZCBub3RpZmljYXRpb25zLCBzaW5j
ZSB5b3UgZG9uJ3QKLSAgICAvLyBoYXZlIHRvIHRyYWNrIHN1YnNlcXVlbnQgY2hhbmdlcyB0byB0
aGUgdmlldyBoaWVyYXJjaHkgYW5kIGFkZC9yZW1vdmUgbm90aWZpY2F0aW9uIG9ic2VydmVycy4K
LSAgICAvLyBOU09wZW5HTFZpZXcgdXNlcyB0aGUgZXhhY3Qgc2FtZSB0ZWNobmlxdWUgdG8gcmVz
aGFwZSBpdHMgT3BlbkdMIHN1cmZhY2UuCi0gICAgCi0gICAgLy8gQWxsIG9mIHRoZSB3b3JrIHRo
aXMgbWV0aG9kIGRvZXMgbWF5IHNhZmVseSBiZSBza2lwcGVkIGlmIHRoZSB2aWV3IGlzIG5vdCBp
biBhIHdpbmRvdy4gIFdoZW4gdGhlIHZpZXcKLSAgICAvLyBpcyBtb3ZlZCBiYWNrIGludG8gYSB3
aW5kb3csIGV2ZXJ5dGhpbmcgc2hvdWxkIGJlIHNldCB1cCBjb3JyZWN0bHkuCi0gICAgaWYgKCFb
c2VsZiB3aW5kb3ddKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgW3NlbGYgdXBkYXRlQW5k
U2V0V2luZG93XTsKLSAgICAKLSAgICBbc2VsZiByZXNldFRyYWNraW5nUmVjdF07Ci0gICAgCi0g
ICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBwbHVnaW4gdmlldyBpcyBjb21wbGV0ZWx5IG9ic2N1
cmVkIChzY3JvbGxlZCBvdXQgb2YgdmlldywgZm9yIGV4YW1wbGUpLgotICAgIC8vIEZvciBwZXJm
b3JtYW5jZSByZWFzb25zLCB3ZSBzZW5kIG51bGwgZXZlbnRzIGF0IGEgbG93ZXIgcmF0ZSB0byBw
bHVnaW5zIHdoaWNoIGFyZSBvYnNjdXJlZC4KLSAgICBCT09MIG9sZElzT2JzY3VyZWQgPSBfaXND
b21wbGV0ZWx5T2JzY3VyZWQ7Ci0gICAgX2lzQ29tcGxldGVseU9ic2N1cmVkID0gTlNJc0VtcHR5
UmVjdChbc2VsZiB2aXNpYmxlUmVjdF0pOwotICAgIGlmIChfaXNDb21wbGV0ZWx5T2JzY3VyZWQg
IT0gb2xkSXNPYnNjdXJlZCkKLSAgICAgICAgW3NlbGYgcmVzdGFydFRpbWVyc107Ci19Ci0KLS0g
KEJPT0wpYmVjb21lRmlyc3RSZXNwb25kZXIKLXsKLSAgICBbc2VsZiBzZXRIYXNGb2N1czpZRVNd
OwotICAgIHJldHVybiBZRVM7Ci19Ci0KLS0gKEJPT0wpcmVzaWduRmlyc3RSZXNwb25kZXIKLXsK
LSAgICBbc2VsZiBzZXRIYXNGb2N1czpOT107ICAgIAotICAgIHJldHVybiBZRVM7Ci19Ci0KLS0g
KFdlYkRhdGFTb3VyY2UgKilkYXRhU291cmNlCi17Ci0gICAgcmV0dXJuIFtbc2VsZiB3ZWJGcmFt
ZV0gX2RhdGFTb3VyY2VdOwotfQotCi0tIChXZWJGcmFtZSAqKXdlYkZyYW1lCi17Ci0gICAgcmV0
dXJuIGtpdChfZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpKTsKLX0KLQotLSAoV2ViVmlldyAq
KXdlYlZpZXcKLXsKLSAgICByZXR1cm4gW1tzZWxmIHdlYkZyYW1lXSB3ZWJWaWV3XTsKLX0KLQot
LSAoTlNXaW5kb3cgKiljdXJyZW50V2luZG93Ci17Ci0gICAgcmV0dXJuIFtzZWxmIHdpbmRvd10g
PyBbc2VsZiB3aW5kb3ddIDogW1tzZWxmIHdlYlZpZXddIGhvc3RXaW5kb3ddOwotfQotCi0tIChO
YWtlZFB0cjxXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudD4pZWxlbWVudAotewotICAgIHJldHVy
biBfZWxlbWVudC5nZXQoKTsKLX0KLQotLSAodm9pZCljdXQ6KGlkKXNlbmRlcgotewotICAgIFtz
ZWxmIHNlbmRNb2RpZmllckV2ZW50V2l0aEtleUNvZGU6NyBjaGFyYWN0ZXI6J3gnXTsKLX0KLQot
LSAodm9pZCljb3B5OihpZClzZW5kZXIKLXsKLSAgICBbc2VsZiBzZW5kTW9kaWZpZXJFdmVudFdp
dGhLZXlDb2RlOjggY2hhcmFjdGVyOidjJ107Ci19Ci0KLS0gKHZvaWQpcGFzdGU6KGlkKXNlbmRl
cgotewotICAgIFtzZWxmIHNlbmRNb2RpZmllckV2ZW50V2l0aEtleUNvZGU6OSBjaGFyYWN0ZXI6
J3YnXTsKLX0KLQotLSAodm9pZClzZWxlY3RBbGw6KGlkKXNlbmRlcgotewotICAgIFtzZWxmIHNl
bmRNb2RpZmllckV2ZW50V2l0aEtleUNvZGU6MCBjaGFyYWN0ZXI6J2EnXTsKLX0KLQotLy8gQXBw
S2l0IGRvZXNuJ3QgY2FsbCBtb3VzZURvd24gb3IgbW91c2VVcCBvbiByaWdodC1jbGljay4gU2lt
dWxhdGUgY29udHJvbC1jbGljawotLy8gbW91c2VEb3duIGFuZCBtb3VzZVVwIHNvIHBsdWctaW5z
IGdldCB0aGUgcmlnaHQtY2xpY2sgZXZlbnQgYXMgdGhleSBkbyBpbiBDYXJib24gKDMxMjU3NDMp
LgotLSAodm9pZClyaWdodE1vdXNlRG93bjooTlNFdmVudCAqKXRoZUV2ZW50Ci17Ci0gICAgW3Nl
bGYgbW91c2VEb3duOnRoZUV2ZW50XTsKLX0KLQotLSAodm9pZClyaWdodE1vdXNlVXA6KE5TRXZl
bnQgKil0aGVFdmVudAotewotICAgIFtzZWxmIG1vdXNlVXA6dGhlRXZlbnRdOwotfQotCi0KLS0g
KEJPT0wpY29udmVydEZyb21YOihkb3VibGUpc291cmNlWCBhbmRZOihkb3VibGUpc291cmNlWSBz
cGFjZTooTlBDb29yZGluYXRlU3BhY2Upc291cmNlU3BhY2UKLSAgICAgICAgICAgICAgICAgdG9Y
Oihkb3VibGUgKilkZXN0WCBhbmRZOihkb3VibGUgKilkZXN0WSBzcGFjZTooTlBDb29yZGluYXRl
U3BhY2UpZGVzdFNwYWNlCi17Ci0gICAgLy8gTm90aGluZyB0byBkbwotICAgIGlmIChzb3VyY2VT
cGFjZSA9PSBkZXN0U3BhY2UpIHsKLSAgICAgICAgaWYgKGRlc3RYKQotICAgICAgICAgICAgKmRl
c3RYID0gc291cmNlWDsKLSAgICAgICAgaWYgKGRlc3RZKQotICAgICAgICAgICAgKmRlc3RZID0g
c291cmNlWTsKLSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0gICAgCi0gICAgTlNQb2ludCBz
b3VyY2VQb2ludCA9IE5TTWFrZVBvaW50KHNvdXJjZVgsIHNvdXJjZVkpOwotICAgIAotICAgIE5T
UG9pbnQgc291cmNlUG9pbnRJblNjcmVlblNwYWNlOwotICAgIAotICAgIC8vIEZpcnN0IGNvbnZl
cnQgdG8gc2NyZWVuIHNwYWNlCi0gICAgc3dpdGNoIChzb3VyY2VTcGFjZSkgewotICAgICAgICBj
YXNlIE5QQ29vcmRpbmF0ZVNwYWNlUGx1Z2luOgotICAgICAgICAgICAgc291cmNlUG9pbnRJblNj
cmVlblNwYWNlID0gW3NlbGYgY29udmVydFBvaW50OnNvdXJjZVBvaW50IHRvVmlldzpuaWxdOwot
ICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICAgICAg
ICAgIHNvdXJjZVBvaW50SW5TY3JlZW5TcGFjZSA9IFtbc2VsZiBjdXJyZW50V2luZG93XSBjb252
ZXJ0QmFzZVRvU2NyZWVuOnNvdXJjZVBvaW50SW5TY3JlZW5TcGFjZV07Ci0gICAgICAgICAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgTlBDb29yZGluYXRlU3BhY2VXaW5kb3c6Ci0gICAgICAg
ICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgICAgICAgICAgc291
cmNlUG9pbnRJblNjcmVlblNwYWNlID0gW1tzZWxmIGN1cnJlbnRXaW5kb3ddIGNvbnZlcnRCYXNl
VG9TY3JlZW46c291cmNlUG9pbnRdOwotICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBj
YXNlIE5QQ29vcmRpbmF0ZVNwYWNlRmxpcHBlZFdpbmRvdzoKLSAgICAgICAgICAgIHNvdXJjZVBv
aW50LnkgPSBbW3NlbGYgY3VycmVudFdpbmRvd10gZnJhbWVdLnNpemUuaGVpZ2h0IC0gc291cmNl
UG9pbnQueTsKLSAgICAgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lO
Ci0gICAgICAgICAgICBzb3VyY2VQb2ludEluU2NyZWVuU3BhY2UgPSBbW3NlbGYgY3VycmVudFdp
bmRvd10gY29udmVydEJhc2VUb1NjcmVlbjpzb3VyY2VQb2ludF07Ci0gICAgICAgICAgICBBTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgTlBDb29yZGluYXRlU3BhY2VTY3JlZW46Ci0gICAgICAgICAg
ICBzb3VyY2VQb2ludEluU2NyZWVuU3BhY2UgPSBzb3VyY2VQb2ludDsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTlBDb29yZGluYXRlU3BhY2VGbGlwcGVk
U2NyZWVuOgotICAgICAgICAgICAgc291cmNlUG9pbnQueSA9IFsoTlNTY3JlZW4gKilbW05TU2Ny
ZWVuIHNjcmVlbnNdIG9iamVjdEF0SW5kZXg6MF0gZnJhbWVdLnNpemUuaGVpZ2h0IC0gc291cmNl
UG9pbnQueTsKLSAgICAgICAgICAgIHNvdXJjZVBvaW50SW5TY3JlZW5TcGFjZSA9IHNvdXJjZVBv
aW50OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gRkFMU0U7Ci0gICAgfQotICAgIAotICAgIE5TUG9pbnQgZGVzdFBvaW50OwotICAgIAot
ICAgIC8vIFRoZW4gY29udmVydCBiYWNrIHRvIHRoZSBkZXN0aW5hdGlvbiBzcGFjZQotICAgIHN3
aXRjaCAoZGVzdFNwYWNlKSB7Ci0gICAgICAgIGNhc2UgTlBDb29yZGluYXRlU3BhY2VQbHVnaW46
Ci0gICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgICAg
ICAgICAgZGVzdFBvaW50ID0gW1tzZWxmIGN1cnJlbnRXaW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jh
c2U6c291cmNlUG9pbnRJblNjcmVlblNwYWNlXTsKLSAgICAgICAgICAgIEFMTE9XX0RFUFJFQ0FU
RURfREVDTEFSQVRJT05TX0VORAotICAgICAgICAgICAgZGVzdFBvaW50ID0gW3NlbGYgY29udmVy
dFBvaW50OmRlc3RQb2ludCBmcm9tVmlldzpuaWxdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBOUENvb3JkaW5hdGVTcGFjZVdpbmRvdzoKLSAgICAgICAg
ICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgICAgICAgICBkZXN0
UG9pbnQgPSBbW3NlbGYgY3VycmVudFdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTpzb3VyY2VQ
b2ludEluU2NyZWVuU3BhY2VdOwotICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJB
VElPTlNfRU5ECi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IE5QQ29vcmRpbmF0ZVNwYWNlRmxpcHBlZFdpbmRvdzoKLSAgICAgICAgICAgIEFMTE9XX0RFUFJF
Q0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgICAgICAgICBkZXN0UG9pbnQgPSBbW3NlbGYg
Y3VycmVudFdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTpzb3VyY2VQb2ludEluU2NyZWVuU3Bh
Y2VdOwotICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0gICAg
ICAgICAgICBkZXN0UG9pbnQueSA9IFtbc2VsZiBjdXJyZW50V2luZG93XSBmcmFtZV0uc2l6ZS5o
ZWlnaHQgLSBkZXN0UG9pbnQueTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgTlBDb29yZGluYXRlU3BhY2VTY3JlZW46Ci0gICAgICAgICAgICBkZXN0UG9p
bnQgPSBzb3VyY2VQb2ludEluU2NyZWVuU3BhY2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIE5QQ29vcmRpbmF0ZVNwYWNlRmxpcHBlZFNjcmVlbjoKLSAg
ICAgICAgICAgIGRlc3RQb2ludCA9IHNvdXJjZVBvaW50SW5TY3JlZW5TcGFjZTsKLSAgICAgICAg
ICAgIGRlc3RQb2ludC55ID0gWyhOU1NjcmVlbiAqKVtbTlNTY3JlZW4gc2NyZWVuc10gb2JqZWN0
QXRJbmRleDowXSBmcmFtZV0uc2l6ZS5oZWlnaHQgLSBkZXN0UG9pbnQueTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1
cm4gRkFMU0U7Ci0gICAgfQotICAgIAotICAgIGlmIChkZXN0WCkKLSAgICAgICAgKmRlc3RYID0g
ZGVzdFBvaW50Lng7Ci0gICAgaWYgKGRlc3RZKQotICAgICAgICAqZGVzdFkgPSBkZXN0UG9pbnQu
eTsKLSAgICAKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotCi0tICh2b2lkKWludmFsaWRhdGVQbHVn
aW5Db250ZW50UmVjdDooTlNSZWN0KXJlY3QKLXsKLSAgICBhdXRvKiByZW5kZXJlciA9IF9lbGVt
ZW50LT5yZW5kZXJlcigpOwotICAgIGlmICghaXM8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KHJlbmRl
cmVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGF1dG8mIG9iamVjdCA9IGRvd25jYXN0PFJlbmRl
ckVtYmVkZGVkT2JqZWN0PigqcmVuZGVyZXIpOwotICAgIEludFJlY3QgY29udGVudFJlY3QocmVj
dCk7Ci0gICAgY29udGVudFJlY3QubW92ZShvYmplY3QuYm9yZGVyTGVmdCgpICsgb2JqZWN0LnBh
ZGRpbmdMZWZ0KCksIG9iamVjdC5ib3JkZXJUb3AoKSArIG9iamVjdC5wYWRkaW5nVG9wKCkpOwot
ICAgIG9iamVjdC5yZXBhaW50UmVjdGFuZ2xlKGNvbnRlbnRSZWN0KTsKLX0KLQotLSAoTlNSZWN0
KWFjdHVhbFZpc2libGVSZWN0SW5XaW5kb3cKLXsKLSAgICBhdXRvKiByZW5kZXJlciA9IF9lbGVt
ZW50LT5yZW5kZXJlcigpOwotICAgIGlmICghaXM8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KHJlbmRl
cmVyKSkKLSAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7Ci0gICAgYXV0byYgb2JqZWN0ID0gZG93
bmNhc3Q8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KCpyZW5kZXJlcik7Ci0gICAgYXV0byB3aWRnZXRS
ZWN0ID0gb2JqZWN0LnZpZXcoKS5mcmFtZVZpZXcoKS5jb250ZW50c1RvV2luZG93KG9iamVjdC5w
aXhlbFNuYXBwZWRBYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgcmV0dXJuIGlu
dGVyc2VjdGlvbihvYmplY3Qud2luZG93Q2xpcFJlY3QoKSwgd2lkZ2V0UmVjdCk7Ci19Ci0KLS0g
KENBTGF5ZXIgKilwbHVnaW5MYXllcgotewotICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgb3ZlcnJp
ZGRlbiBieSBzdWJjbGFzc2VzLgotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKEJPT0wpZ2V0Rm9y
bVZhbHVlOihOU1N0cmluZyAqKil2YWx1ZQotewotICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgb3Zl
cnJpZGRlbiBieSBzdWJjbGFzc2VzLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQotQGVuZAotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotYm9vbCBnZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgY2hh
ciogcHJvdG9jb2xTdHIsIGNvbnN0IGNoYXIqIGhvc3RTdHIsIGludDMyX3QgcG9ydCwgY29uc3Qg
Y2hhciogc2NoZW1lU3RyLCBjb25zdCBjaGFyKiByZWFsbVN0ciwgQ1N0cmluZyYgdXNlcm5hbWUs
IENTdHJpbmcmIHBhc3N3b3JkKQotewotICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UocHJvdG9jb2xTdHIsICJodHRwIikgJiYgIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHByb3RvY29sU3RyLCAiaHR0cHMiKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
TlNTdHJpbmcgKmhvc3QgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6aG9zdFN0cl07
Ci0gICAgaWYgKCFob3N0U3RyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgTlNT
dHJpbmcgKnByb3RvY29sID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnByb3RvY29s
U3RyXTsKLSAgICBpZiAoIXByb3RvY29sKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0g
ICAgTlNTdHJpbmcgKnJlYWxtID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnJlYWxt
U3RyXTsKLSAgICBpZiAoIXJlYWxtKQotICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJP
UjsKLSAgICAKLSAgICBOU1N0cmluZyAqYXV0aGVudGljYXRpb25NZXRob2QgPSBOU1VSTEF1dGhl
bnRpY2F0aW9uTWV0aG9kRGVmYXVsdDsKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UocHJvdG9jb2xTdHIsICJodHRwIikpIHsKLSAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKHNjaGVtZVN0ciwgImJhc2ljIikpCi0gICAgICAgICAgICBhdXRoZW50
aWNhdGlvbk1ldGhvZCA9IE5TVVJMQXV0aGVudGljYXRpb25NZXRob2RIVFRQQmFzaWM7Ci0gICAg
ICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHNjaGVtZVN0ciwgImRp
Z2VzdCIpKQotICAgICAgICAgICAgYXV0aGVudGljYXRpb25NZXRob2QgPSBOU1VSTEF1dGhlbnRp
Y2F0aW9uTWV0aG9kSFRUUERpZ2VzdDsKLSAgICB9Ci0gICAgCi0gICAgUmV0YWluUHRyPE5TVVJM
UHJvdGVjdGlvblNwYWNlPiBwcm90ZWN0aW9uU3BhY2UgPSBhZG9wdE5TKFtbTlNVUkxQcm90ZWN0
aW9uU3BhY2UgYWxsb2NdIGluaXRXaXRoSG9zdDpob3N0IHBvcnQ6cG9ydCBwcm90b2NvbDpwcm90
b2NvbCByZWFsbTpyZWFsbSBhdXRoZW50aWNhdGlvbk1ldGhvZDphdXRoZW50aWNhdGlvbk1ldGhv
ZF0pOwotICAgIAotICAgIE5TVVJMQ3JlZGVudGlhbCAqY3JlZGVudGlhbCA9IE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbk1hcDo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2Uo
KS5nZXQoZW1wdHlTdHJpbmcoKSwgUHJvdGVjdGlvblNwYWNlKHByb3RlY3Rpb25TcGFjZS5nZXQo
KSkpLm5zQ3JlZGVudGlhbCgpOwotICAgIGlmICghY3JlZGVudGlhbCkKLSAgICAgICAgY3JlZGVu
dGlhbCA9IFtbTlNVUkxDcmVkZW50aWFsU3RvcmFnZSBzaGFyZWRDcmVkZW50aWFsU3RvcmFnZV0g
ZGVmYXVsdENyZWRlbnRpYWxGb3JQcm90ZWN0aW9uU3BhY2U6cHJvdGVjdGlvblNwYWNlLmdldCgp
XTsKLSAgICBpZiAoIWNyZWRlbnRpYWwpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgCi0gICAg
aWYgKCFbY3JlZGVudGlhbCBoYXNQYXNzd29yZF0pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICB1c2VybmFtZSA9IFtbY3JlZGVudGlhbCB1c2VyXSBVVEY4U3RyaW5nXTsKLSAgICBw
YXNzd29yZCA9IFtbY3JlZGVudGlhbCBwYXNzd29yZF0gVVRGOFN0cmluZ107Ci0gICAgCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgc2VuZFVzZXJDaGFuZ2VOb3RpZmljYXRpb25zKCkKLXsK
LSAgICBhdXRvIGNvbnNvbGVDb25uZWN0aW9uQ2hhbmdlTm90aWZ5UHJvYyA9IFtdKENHU05vdGlm
aWNhdGlvblR5cGUgdHlwZSwgQ0dTTm90aWZpY2F0aW9uRGF0YSwgQ0dTQnl0ZUNvdW50LCBDR1NO
b3RpZmljYXRpb25BcmcpIHsKLSAgICAgICAgTlNTdHJpbmcgKm5vdGlmaWNhdGlvbk5hbWUgPSBu
aWw7Ci0gICAgICAgIGlmICh0eXBlID09IGtDR1Nlc3Npb25Db25zb2xlQ29ubmVjdCkKLSAgICAg
ICAgICAgIG5vdGlmaWNhdGlvbk5hbWUgPSBMb2dpbldpbmRvd0RpZFN3aXRjaFRvVXNlck5vdGlm
aWNhdGlvbjsKLSAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBrQ0dTZXNzaW9uQ29uc29sZURpc2Nv
bm5lY3QpCi0gICAgICAgICAgICBub3RpZmljYXRpb25OYW1lID0gTG9naW5XaW5kb3dEaWRTd2l0
Y2hGcm9tVXNlck5vdGlmaWNhdGlvbjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5hbWU6bm90aWZpY2F0aW9uTmFtZSBvYmplY3Q6bmlsXTsK
LSAgICB9OwotCi0gICAgQ0dTUmVnaXN0ZXJOb3RpZnlQcm9jKGNvbnNvbGVDb25uZWN0aW9uQ2hh
bmdlTm90aWZ5UHJvYywga0NHU2Vzc2lvbkNvbnNvbGVDb25uZWN0LCBudWxscHRyKTsKLSAgICBD
R1NSZWdpc3Rlck5vdGlmeVByb2MoY29uc29sZUNvbm5lY3Rpb25DaGFuZ2VOb3RpZnlQcm9jLCBr
Q0dTZXNzaW9uQ29uc29sZURpc2Nvbm5lY3QsIG51bGxwdHIpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKLQotI2VuZGlmIC8vICBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJCYXNlUGx1Z2luUGFj
a2FnZS5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJCYXNlUGx1Z2luUGFj
a2FnZS5oCmluZGV4IDJmNDdlYmUwNTRlOGIwMjU3NGRkMWY2Nzk1ZWVmNTIwZGU3MDZhZWYuLjVi
ZDNmYzUzMTM1ZmFkMWIwZjZjMWFlZDY0NTRmZTQ5MjUyOGZkMDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViQmFzZVBsdWdpblBhY2thZ2UuaAorKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYkJhc2VQbHVnaW5QYWNrYWdlLmgKQEAg
LTI5LDExICsyOSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KICNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotI2lt
cG9ydCA8V2ViS2l0TGVnYWN5L25wZnVuY3Rpb25zLmg+Ci0jZWxzZQogdHlwZWRlZiB2b2lkICgq
QlBfQ3JlYXRlUGx1Z2luTUlNRVR5cGVzUHJlZmVyZW5jZXNGdW5jUHRyKSh2b2lkKTsKLSNlbmRp
ZgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbXBvcnQgPFdlYkNvcmUvV0FLQXBwS2l0
U3R1YnMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2Vi
QmFzZVBsdWdpblBhY2thZ2UubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dl
YkJhc2VQbHVnaW5QYWNrYWdlLm1tCmluZGV4IGQ3Mjc5MWU5ODFkYjViMzQxOTQ0ZWM1ODIyZjE4
YzY1OTdlN2U1NTAuLjlkZjRjNDk0NThlMzljYWZlZWRhZDYxZGRlNTJlNjg1Y2NlMDBmMWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViQmFzZVBsdWdpblBh
Y2thZ2UubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJCYXNlUGx1
Z2luUGFja2FnZS5tbQpAQCAtMzAsNyArMzAsNiBAQAogCiAjaW1wb3J0ICJXZWJLaXRMb2dnaW5n
LmgiCiAjaW1wb3J0ICJXZWJLaXROU1N0cmluZ0V4dHJhcy5oIgotI2ltcG9ydCAiV2ViTmV0c2Nh
cGVQbHVnaW5QYWNrYWdlLmgiCiAjaW1wb3J0ICJXZWJQbHVnaW5QYWNrYWdlLmgiCiAjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1dlYkNvcmVKSVRPcGVyYXRpb25zLmg+CkBAIC02NywxNyArNjYsNyBAQAogCiArIChXZWJCYXNl
UGx1Z2luUGFja2FnZSAqKXBsdWdpbldpdGhQYXRoOihOU1N0cmluZyAqKXBsdWdpblBhdGgKIHsK
LSAgICBSZXRhaW5QdHI8V2ViQmFzZVBsdWdpblBhY2thZ2U+IHBsdWdpblBhY2thZ2UgPSBhZG9w
dE5TKFtbV2ViUGx1Z2luUGFja2FnZSBhbGxvY10gaW5pdFdpdGhQYXRoOnBsdWdpblBhdGhdKTsK
LQotICAgIGlmICghcGx1Z2luUGFja2FnZSkgewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQotICAgICAgICBwbHVnaW5QYWNrYWdlID0gYWRvcHROUyhbW1dlYk5ldHNjYXBlUGx1Z2lu
UGFja2FnZSBhbGxvY10gaW5pdFdpdGhQYXRoOnBsdWdpblBhdGhdKTsKLSNlbHNlCi0gICAgICAg
IHJldHVybiBuaWw7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICByZXR1cm4gcGx1Z2luUGFja2FnZS5h
dXRvcmVsZWFzZSgpOworICAgIHJldHVybiBhZG9wdE5TKFtbV2ViUGx1Z2luUGFja2FnZSBhbGxv
Y10gaW5pdFdpdGhQYXRoOnBsdWdpblBhdGhdKS5hdXRvcmVsZWFzZSgpOwogfQogCiAtIChpZClp
bml0V2l0aFBhdGg6KE5TU3RyaW5nICopcGx1Z2luUGF0aApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlci5oIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFu
ZGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGI0MWJjZmFhOWRkNjc4YzAw
OGI4YTYxZWFhMzNiZWJlNzVjYzA3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQ
bHVnaW5FdmVudEhhbmRsZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBXZWJOZXRz
Y2FwZVBsdWdpbkV2ZW50SGFuZGxlcl9oCi0jZGVmaW5lIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRI
YW5kbGVyX2gKLQotI2ltcG9ydCAiV2ViTmV0c2NhcGVQbHVnaW5WaWV3LmgiCi0KLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotQGNsYXNzIE5TRXZlbnQ7Ci1AY2xhc3MgV2ViTmV0
c2NhcGVQbHVnaW5WaWV3OwotCi1jbGFzcyBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlciB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJOZXRzY2FwZVBsdWdpbkV2
ZW50SGFuZGxlcj4gY3JlYXRlKFdlYk5ldHNjYXBlUGx1Z2luVmlldyAqKTsKLSAgICB2aXJ0dWFs
IH5XZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlcigpIHsgfQotICAgIAotICAgIHZpcnR1YWwg
dm9pZCBkcmF3UmVjdChDR0NvbnRleHRSZWYsIGNvbnN0IE5TUmVjdCYpID0gMDsKLSAgICAKLSAg
ICB2aXJ0dWFsIHZvaWQgbW91c2VEb3duKE5TRXZlbnQgKikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBtb3VzZURyYWdnZWQoTlNFdmVudCAqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlRW50
ZXJlZChOU0V2ZW50ICopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VFeGl0ZWQoTlNFdmVu
dCAqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlTW92ZWQoTlNFdmVudCAqKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIG1vdXNlVXAoTlNFdmVudCAqKSA9IDA7Ci0gICAgdmlydHVhbCBib29s
IHNjcm9sbFdoZWVsKE5TRXZlbnQgKikgPSAwOwotICAgIAotICAgIHZpcnR1YWwgdm9pZCBrZXlE
b3duKE5TRXZlbnQgKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBrZXlVcChOU0V2ZW50ICopID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgZmxhZ3NDaGFuZ2VkKE5TRXZlbnQgKikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBzeW50aGV0aWNLZXlEb3duV2l0aENvbW1hbmRNb2RpZmllcihpbnQga2V5Q29k
ZSwgY2hhciBjaGFyYWN0ZXIpID0gMDsKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgZm9jdXNDaGFu
Z2VkKGJvb2wgaGFzRm9jdXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgd2luZG93Rm9jdXNDaGFu
Z2VkKGJvb2wgaGFzRm9jdXMpID0gMDsKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRUaW1l
cnMoYm9vbCB0aHJvdHRsZVRpbWVycykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BUaW1lcnMo
KSB7IH0KLSAgICAKLSAgICAvLyBSZXR1cm5zIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyB3aW5kb3cg
dXNlZCBpbiBOUFBfU2V0V2luZG93Ci0gICAgdmlydHVhbCB2b2lkKiBwbGF0Zm9ybVdpbmRvdyhO
U1dpbmRvdyAqKSA9IDA7Ci0gICAgCi0gICAgYm9vbCBjdXJyZW50RXZlbnRJc1VzZXJHZXN0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50RXZlbnRJc1VzZXJHZXN0dXJlOyB9Ci0KLXByb3Rl
Y3RlZDoKLSAgICBleHBsaWNpdCBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlcihXZWJOZXRz
Y2FwZVBsdWdpblZpZXcgKnBsdWdpblZpZXcpCi0gICAgICAgIDogbV9wbHVnaW5WaWV3KHBsdWdp
blZpZXcpCi0gICAgICAgICwgbV9jdXJyZW50RXZlbnRJc1VzZXJHZXN0dXJlKGZhbHNlKQotICAg
IHsKLSAgICB9Ci0gICAgCi0gICAgV2ViTmV0c2NhcGVQbHVnaW5WaWV3ICptX3BsdWdpblZpZXc7
Ci0gICAgYm9vbCBtX2N1cnJlbnRFdmVudElzVXNlckdlc3R1cmU7Ci19OwotCi0jZW5kaWYgLy8g
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNlbmRpZiAvLyBXZWJOZXRzY2FwZVBsdWdp
bkV2ZW50SGFuZGxlcl9oCi0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
UGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlci5tbSBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXIubW0KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYzFiZjc5ZWUzMmEyYWMxYmJjZjdhMjFlNzNlN2Ux
ZTAxZGIxZDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFu
ZGxlci5tbQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQotCi0jaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlci5oIgotCi0jaW1w
b3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCAiV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lmgi
Ci0jaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hLmgiCi0KLXN0ZDo6
dW5pcXVlX3B0cjxXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlcj4gV2ViTmV0c2NhcGVQbHVn
aW5FdmVudEhhbmRsZXI6OmNyZWF0ZShXZWJOZXRzY2FwZVBsdWdpblZpZXcgKnBsdWdpblZpZXcp
Ci17Ci0gICAgc3dpdGNoIChbcGx1Z2luVmlldyBldmVudE1vZGVsXSkgewotICAgIGNhc2UgTlBF
dmVudE1vZGVsQ29jb2E6Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYk5ldHNjYXBlUGx1
Z2luRXZlbnRIYW5kbGVyQ29jb2E+KHBsdWdpblZpZXcpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci19
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRs
ZXJDb2NvYS5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBs
dWdpbkV2ZW50SGFuZGxlckNvY29hLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJi
ZDljNWQ1ODIxZjg1ZjY1ZWJjOGY3NzdlYzY1NTIyOWQ1ZTg5ZjQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1
Z2lucy9XZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2lmbmRlZiBXZWJOZXRz
Y2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hX2gKLSNkZWZpbmUgV2ViTmV0c2NhcGVQbHVnaW5F
dmVudEhhbmRsZXJDb2NvYV9oCi0KLSNpbmNsdWRlIDxXZWJLaXRMZWdhY3kvbnBhcGkuaD4KLSNp
bmNsdWRlICJXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlci5oIgotCi1jbGFzcyBXZWJOZXRz
Y2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hIDogcHVibGljIFdlYk5ldHNjYXBlUGx1Z2luRXZl
bnRIYW5kbGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBX
ZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hKFdlYk5ldHNjYXBlUGx1Z2luVmlldyop
OyAKLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChDR0NvbnRleHRSZWYsIGNvbnN0IE5TUmVj
dCYpOwotCi0gICAgdmlydHVhbCB2b2lkIG1vdXNlRG93bihOU0V2ZW50Kik7Ci0gICAgdmlydHVh
bCB2b2lkIG1vdXNlRHJhZ2dlZChOU0V2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlRW50
ZXJlZChOU0V2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlRXhpdGVkKE5TRXZlbnQqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgbW91c2VNb3ZlZChOU0V2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lk
IG1vdXNlVXAoTlNFdmVudCopOwotICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxXaGVlbChOU0V2ZW50
Kik7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGtleURvd24oTlNFdmVudCopOwotICAgIHZpcnR1
YWwgdm9pZCBrZXlVcChOU0V2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIGZsYWdzQ2hhbmdlZChO
U0V2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIHN5bnRoZXRpY0tleURvd25XaXRoQ29tbWFuZE1v
ZGlmaWVyKGludCBrZXlDb2RlLCBjaGFyIGNoYXJhY3Rlcik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
d2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wgaGFzRm9jdXMpOyAgICAKLSAgICB2aXJ0dWFsIHZvaWQg
Zm9jdXNDaGFuZ2VkKGJvb2wgaGFzRm9jdXMpOwotCi0gICAgdmlydHVhbCB2b2lkKiBwbGF0Zm9y
bVdpbmRvdyhOU1dpbmRvdyopOwotICAgIAotcHJpdmF0ZToKLSAgICBib29sIHNlbmRNb3VzZUV2
ZW50KE5TRXZlbnQqLCBOUENvY29hRXZlbnRUeXBlKTsKLSAgICBib29sIHNlbmRLZXlFdmVudChO
U0V2ZW50KiwgTlBDb2NvYUV2ZW50VHlwZSk7Ci0gICAgYm9vbCBzZW5kRXZlbnQoTlBDb2NvYUV2
ZW50Kik7Ci19OwotCi0jZW5kaWYgLy9XZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29h
X2gKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luRXZlbnRI
YW5kbGVyQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNj
YXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2EubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGJlN2IwZTViYjBiNGZjMjQ2N2Y4MmQ2NzAzOWU3YmYyOWI1YmM4MzcuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hLm1tCisrKyAvZGV2
L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNp
bXBvcnQgIldlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2EuaCIKLQotI2ltcG9ydCAi
V2ViTmV0c2NhcGVQbHVnaW5WaWV3LmgiCi0jaW1wb3J0IDxwYWwvc3BpL21hYy9ISVRvb2xib3hT
UEkuaD4KLSNpbXBvcnQgPHBhbC9zcGkvbWFjL05TRXZlbnRTUEkuaD4KLSNpbXBvcnQgPHd0Zi9W
ZWN0b3IuaD4KLQotV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYTo6V2ViTmV0c2Nh
cGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYShXZWJOZXRzY2FwZVBsdWdpblZpZXcqIHBsdWdpblZp
ZXcpCi0gICAgOiBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlcihwbHVnaW5WaWV3KQotewot
fQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdGlhbGl6ZUV2ZW50KE5QQ29jb2FFdmVudCogZXZl
bnQsIE5QQ29jb2FFdmVudFR5cGUgdHlwZSkKLXsKLSAgICBldmVudC0+dHlwZSA9IHR5cGU7Ci0g
ICAgZXZlbnQtPnZlcnNpb24gPSAwOwotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRI
YW5kbGVyQ29jb2E6OmRyYXdSZWN0KENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBOU1JlY3Qm
IHJlY3QpCi17Ci0gICAgTlBDb2NvYUV2ZW50IGV2ZW50OwotICAgIAotICAgIGluaXRpYWxpemVF
dmVudCgmZXZlbnQsIE5QQ29jb2FFdmVudERyYXdSZWN0KTsKLSAgICBldmVudC5kYXRhLmRyYXcu
Y29udGV4dCA9IGNvbnRleHQ7Ci0gICAgZXZlbnQuZGF0YS5kcmF3LnggPSByZWN0Lm9yaWdpbi54
OwotICAgIGV2ZW50LmRhdGEuZHJhdy55ID0gcmVjdC5vcmlnaW4ueTsKLSAgICBldmVudC5kYXRh
LmRyYXcud2lkdGggPSByZWN0LnNpemUud2lkdGg7Ci0gICAgZXZlbnQuZGF0YS5kcmF3LmhlaWdo
dCA9IHJlY3Quc2l6ZS5oZWlnaHQ7Ci0gICAgCi0gICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4g
cHJvdGVjdChjb250ZXh0KTsKLSAgICAKLSAgICBzZW5kRXZlbnQoJmV2ZW50KTsKLX0KLQotdm9p
ZCBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hOjptb3VzZURvd24oTlNFdmVudCAq
ZXZlbnQpCi17Ci0gICAgc2VuZE1vdXNlRXZlbnQoZXZlbnQsIE5QQ29jb2FFdmVudE1vdXNlRG93
bik7Ci19Ci0KLXZvaWQgV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYTo6bW91c2VE
cmFnZ2VkKE5TRXZlbnQgKmV2ZW50KQotewotICAgIHNlbmRNb3VzZUV2ZW50KGV2ZW50LCBOUENv
Y29hRXZlbnRNb3VzZURyYWdnZWQpOwotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRI
YW5kbGVyQ29jb2E6Om1vdXNlRW50ZXJlZChOU0V2ZW50ICpldmVudCkKLXsKLSAgICBzZW5kTW91
c2VFdmVudChldmVudCwgTlBDb2NvYUV2ZW50TW91c2VFbnRlcmVkKTsKLX0KLQotdm9pZCBXZWJO
ZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hOjptb3VzZUV4aXRlZChOU0V2ZW50ICpldmVu
dCkKLXsKLSAgICBzZW5kTW91c2VFdmVudChldmVudCwgTlBDb2NvYUV2ZW50TW91c2VFeGl0ZWQp
OwotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2E6Om1vdXNlTW92
ZWQoTlNFdmVudCAqZXZlbnQpCi17Ci0gICAgc2VuZE1vdXNlRXZlbnQoZXZlbnQsIE5QQ29jb2FF
dmVudE1vdXNlTW92ZWQpOwotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVy
Q29jb2E6Om1vdXNlVXAoTlNFdmVudCAqZXZlbnQpCi17Ci0gICAgc2VuZE1vdXNlRXZlbnQoZXZl
bnQsIE5QQ29jb2FFdmVudE1vdXNlVXApOwotfQotCi1ib29sIFdlYk5ldHNjYXBlUGx1Z2luRXZl
bnRIYW5kbGVyQ29jb2E6OnNjcm9sbFdoZWVsKE5TRXZlbnQqIGV2ZW50KQotewotICAgIHJldHVy
biBzZW5kTW91c2VFdmVudChldmVudCwgTlBDb2NvYUV2ZW50U2Nyb2xsV2hlZWwpOwotfQotCi1i
b29sIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2E6OnNlbmRNb3VzZUV2ZW50KE5T
RXZlbnQgKm5zRXZlbnQsIE5QQ29jb2FFdmVudFR5cGUgdHlwZSkKLXsKLSAgICBOUENvY29hRXZl
bnQgZXZlbnQ7Ci0gICAgCi0gICAgTlNQb2ludCBwb2ludCA9IFttX3BsdWdpblZpZXcgY29udmVy
dFBvaW50Oltuc0V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddIGZyb21WaWV3Om5pbF07Ci0gICAgCi0g
ICAgaW50IGNsaWNrQ291bnQ7Ci0gICAgaWYgKHR5cGUgPT0gTlBDb2NvYUV2ZW50TW91c2VFbnRl
cmVkIHx8IHR5cGUgPT0gTlBDb2NvYUV2ZW50TW91c2VFeGl0ZWQgfHwgdHlwZSA9PSBOUENvY29h
RXZlbnRTY3JvbGxXaGVlbCkKLSAgICAgICAgY2xpY2tDb3VudCA9IDA7Ci0gICAgZWxzZQotICAg
ICAgICBjbGlja0NvdW50ID0gW25zRXZlbnQgY2xpY2tDb3VudF07Ci0gICAgCi0gICAgaW5pdGlh
bGl6ZUV2ZW50KCZldmVudCwgdHlwZSk7Ci0gICAgZXZlbnQuZGF0YS5tb3VzZS5tb2RpZmllckZs
YWdzID0gW25zRXZlbnQgbW9kaWZpZXJGbGFnc107Ci0gICAgZXZlbnQuZGF0YS5tb3VzZS5idXR0
b25OdW1iZXIgPSBbbnNFdmVudCBidXR0b25OdW1iZXJdOwotICAgIGV2ZW50LmRhdGEubW91c2Uu
Y2xpY2tDb3VudCA9IGNsaWNrQ291bnQ7Ci0gICAgZXZlbnQuZGF0YS5tb3VzZS5wbHVnaW5YID0g
cG9pbnQueDsKLSAgICBldmVudC5kYXRhLm1vdXNlLnBsdWdpblkgPSBwb2ludC55OwotICAgIGV2
ZW50LmRhdGEubW91c2UuZGVsdGFYID0gW25zRXZlbnQgZGVsdGFYXTsKLSAgICBldmVudC5kYXRh
Lm1vdXNlLmRlbHRhWSA9IFtuc0V2ZW50IGRlbHRhWV07Ci0gICAgZXZlbnQuZGF0YS5tb3VzZS5k
ZWx0YVogPSBbbnNFdmVudCBkZWx0YVpdOwotICAgIAotICAgIHJldHVybiBzZW5kRXZlbnQoJmV2
ZW50KTsKLX0KLQotdm9pZCBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hOjprZXlE
b3duKE5TRXZlbnQgKmV2ZW50KQotewotICAgIGJvb2wgcmV0dmFsID0gc2VuZEtleUV2ZW50KGV2
ZW50LCBOUENvY29hRXZlbnRLZXlEb3duKTsKLSAgICBVTlVTRURfUEFSQU0ocmV0dmFsKTsKLX0K
LQotdm9pZCBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hOjprZXlVcChOU0V2ZW50
ICpldmVudCkKLXsKLSAgICBzZW5kS2V5RXZlbnQoZXZlbnQsIE5QQ29jb2FFdmVudEtleVVwKTsK
LX0KLQotdm9pZCBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hOjpmbGFnc0NoYW5n
ZWQoTlNFdmVudCAqbnNFdmVudCkKLXsKLSAgICBOUENvY29hRXZlbnQgZXZlbnQ7Ci0gICAgICAg
IAotICAgIGluaXRpYWxpemVFdmVudCgmZXZlbnQsIE5QQ29jb2FFdmVudEZsYWdzQ2hhbmdlZCk7
Ci0gICAgZXZlbnQuZGF0YS5rZXkubW9kaWZpZXJGbGFncyA9IFtuc0V2ZW50IG1vZGlmaWVyRmxh
Z3NdOwotICAgIGV2ZW50LmRhdGEua2V5LmtleUNvZGUgPSBbbnNFdmVudCBrZXlDb2RlXTsKLSAg
ICBldmVudC5kYXRhLmtleS5pc0FSZXBlYXQgPSBmYWxzZTsKLSAgICBldmVudC5kYXRhLmtleS5j
aGFyYWN0ZXJzID0gMDsKLSAgICBldmVudC5kYXRhLmtleS5jaGFyYWN0ZXJzSWdub3JpbmdNb2Rp
ZmllcnMgPSAwOwotICAgIAotICAgIHNlbmRFdmVudCgmZXZlbnQpOwotfQotCi12b2lkIFdlYk5l
dHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2E6OnN5bnRoZXRpY0tleURvd25XaXRoQ29tbWFu
ZE1vZGlmaWVyKGludCBrZXlDb2RlLCBjaGFyIGNoYXJhY3RlcikKLXsKLSAgICBjaGFyIG51bGxU
ZXJtaW5hdGVkU3RyaW5nW10gPSB7IGNoYXJhY3RlciwgJ1wwJyB9OwotICAgIAotICAgIFJldGFp
blB0cjxOU1N0cmluZz4gY2hhcmFjdGVycyA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5p
dFdpdGhVVEY4U3RyaW5nOm51bGxUZXJtaW5hdGVkU3RyaW5nXSk7Ci0gICAgCi0gICAgTlBDb2Nv
YUV2ZW50IGV2ZW50OwotICAgIGluaXRpYWxpemVFdmVudCgmZXZlbnQsIE5QQ29jb2FFdmVudEtl
eURvd24pOwotICAgIGV2ZW50LmRhdGEua2V5Lm1vZGlmaWVyRmxhZ3MgPSBOU0V2ZW50TW9kaWZp
ZXJGbGFnQ29tbWFuZDsKLSAgICBldmVudC5kYXRhLmtleS5rZXlDb2RlID0ga2V5Q29kZTsKLSAg
ICBldmVudC5kYXRhLmtleS5pc0FSZXBlYXQgPSBmYWxzZTsKLSAgICBldmVudC5kYXRhLmtleS5j
aGFyYWN0ZXJzID0gKE5QTlNTdHJpbmcgKiljaGFyYWN0ZXJzLmdldCgpOwotICAgIGV2ZW50LmRh
dGEua2V5LmNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycyA9IChOUE5TU3RyaW5nICopY2hhcmFj
dGVycy5nZXQoKTsKLQotICAgIHNlbmRFdmVudCgmZXZlbnQpOwotfQotCi1ib29sIFdlYk5ldHNj
YXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2E6OnNlbmRLZXlFdmVudChOU0V2ZW50KiBuc0V2ZW50
LCBOUENvY29hRXZlbnRUeXBlIHR5cGUpCi17Ci0gICAgTlBDb2NvYUV2ZW50IGV2ZW50OwotCi0g
ICAgaW5pdGlhbGl6ZUV2ZW50KCZldmVudCwgdHlwZSk7Ci0gICAgZXZlbnQuZGF0YS5rZXkubW9k
aWZpZXJGbGFncyA9IFtuc0V2ZW50IG1vZGlmaWVyRmxhZ3NdOwotICAgIGV2ZW50LmRhdGEua2V5
LmtleUNvZGUgPSBbbnNFdmVudCBrZXlDb2RlXTsKLSAgICBldmVudC5kYXRhLmtleS5pc0FSZXBl
YXQgPSBbbnNFdmVudCBpc0FSZXBlYXRdOwotICAgIGV2ZW50LmRhdGEua2V5LmNoYXJhY3RlcnMg
PSAoTlBOU1N0cmluZyAqKVtuc0V2ZW50IGNoYXJhY3RlcnNdOwotICAgIGV2ZW50LmRhdGEua2V5
LmNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVycyA9IChOUE5TU3RyaW5nICopW25zRXZlbnQgY2hh
cmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzXTsKLSAgICAgCi0gICAgcmV0dXJuIHNlbmRFdmVudCgm
ZXZlbnQpOwotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2E6Ondp
bmRvd0ZvY3VzQ2hhbmdlZChib29sIGhhc0ZvY3VzKQotewotICAgIE5QQ29jb2FFdmVudCBldmVu
dDsKLSAgICAKLSAgICBpbml0aWFsaXplRXZlbnQoJmV2ZW50LCBOUENvY29hRXZlbnRXaW5kb3dG
b2N1c0NoYW5nZWQpOwotICAgIGV2ZW50LmRhdGEuZm9jdXMuaGFzRm9jdXMgPSBoYXNGb2N1czsK
LSAgICAKLSAgICBzZW5kRXZlbnQoJmV2ZW50KTsKLX0KLQotdm9pZCBXZWJOZXRzY2FwZVBsdWdp
bkV2ZW50SGFuZGxlckNvY29hOjpmb2N1c0NoYW5nZWQoYm9vbCBoYXNGb2N1cykKLXsKLSAgICBO
UENvY29hRXZlbnQgZXZlbnQ7Ci0KLSAgICBpbml0aWFsaXplRXZlbnQoJmV2ZW50LCBOUENvY29h
RXZlbnRGb2N1c0NoYW5nZWQpOwotICAgIGV2ZW50LmRhdGEuZm9jdXMuaGFzRm9jdXMgPSBoYXNG
b2N1czsKLSAgICAKLSAgICBzZW5kRXZlbnQoJmV2ZW50KTsKLX0KLQotdm9pZCogV2ViTmV0c2Nh
cGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYTo6cGxhdGZvcm1XaW5kb3coTlNXaW5kb3cgKndpbmRv
dykKLXsKLSAgICByZXR1cm4gKF9fYnJpZGdlIHZvaWQqKXdpbmRvdzsKLX0KLQotYm9vbCBXZWJO
ZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hOjpzZW5kRXZlbnQoTlBDb2NvYUV2ZW50KiBl
dmVudCkKLXsKLSAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7Ci0gICAgICAgIGNhc2UgTlBDb2Nv
YUV2ZW50TW91c2VEb3duOgotICAgICAgICBjYXNlIE5QQ29jb2FFdmVudE1vdXNlVXA6Ci0gICAg
ICAgIGNhc2UgTlBDb2NvYUV2ZW50TW91c2VEcmFnZ2VkOgotICAgICAgICBjYXNlIE5QQ29jb2FF
dmVudEtleURvd246Ci0gICAgICAgIGNhc2UgTlBDb2NvYUV2ZW50S2V5VXA6Ci0gICAgICAgIGNh
c2UgTlBDb2NvYUV2ZW50RmxhZ3NDaGFuZ2VkOgotICAgICAgICBjYXNlIE5QQ29jb2FFdmVudFNj
cm9sbFdoZWVsOgotICAgICAgICAgICAgbV9jdXJyZW50RXZlbnRJc1VzZXJHZXN0dXJlID0gdHJ1
ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgbV9j
dXJyZW50RXZlbnRJc1VzZXJHZXN0dXJlID0gZmFsc2U7Ci0gICAgfQotICAgICAgICAgICAgCi0g
ICAgYm9vbCByZXN1bHQgPSBbbV9wbHVnaW5WaWV3IHNlbmRFdmVudDpldmVudCBpc0RyYXdSZWN0
OmV2ZW50LT50eXBlID09IE5QQ29jb2FFdmVudERyYXdSZWN0XTsKLSAgICAKLSAgICBtX2N1cnJl
bnRFdmVudElzVXNlckdlc3R1cmUgPSBmYWxzZTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0j
ZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5oIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNmM2M5Y2ZhNjg1MDVmNGY4ZDg1MmZmOTFh
ZjQ5OTQzYjBhN2QxNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luUGFj
a2FnZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAK
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0jaW1wb3J0ICJXZWJCYXNlUGx1Z2luUGFja2FnZS5oIgotCi0K
LUBpbnRlcmZhY2UgV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlIDogV2ViQmFzZVBsdWdpblBhY2th
Z2UKLXsKLSAgICBOUFBsdWdpbkZ1bmNzIHBsdWdpbkZ1bmNzOwotICAgIE5QTmV0c2NhcGVGdW5j
cyBicm93c2VyRnVuY3M7Ci0gICAgCi0gICAgdWludDE2X3QgcGx1Z2luU2l6ZTsKLSAgICB1aW50
MTZfdCBwbHVnaW5WZXJzaW9uOwotICAgIAotICAgIFJlc0ZpbGVSZWZOdW0gcmVzb3VyY2VSZWY7
Ci0gICAgCi0gICAgTlBQX1NodXRkb3duUHJvY1B0ciBOUF9TaHV0ZG93bjsKLQotICAgIEJPT0wg
aXNMb2FkZWQ7Ci0gICAgQk9PTCBuZWVkc1VubG9hZDsKLSAgICB1bnNpZ25lZCBpbnQgaW5zdGFu
Y2VDb3VudDsKLSAgICAgCi0jaWYgVVNFKFBMVUdJTl9IT1NUX1BST0NFU1MpCi0gICAgY3B1X3R5
cGVfdCBwbHVnaW5Ib3N0QXJjaGl0ZWN0dXJlOwotI2VuZGlmCi19Ci0KLS8vIE5ldHNjYXBlIHBs
dWctaW4gcGFja2FnZXMgbXVzdCBiZSBleHBsaWNpdGx5IG9wZW5lZCBhbmQgY2xvc2VkIGJ5IGVh
Y2ggcGx1Zy1pbiBpbnN0YW5jZS4KLS8vIFRoaXMgaXMgdG8gcHJvdGVjdCBOZXRzY2FwZSBwbHVn
LWlucyBmcm9tIGJlaW5nIHVubG9hZGVkIHdoaWxlIHRoZXkgYXJlIGluIHVzZS4KLS0gKHZvaWQp
b3BlbjsKLS0gKHZvaWQpY2xvc2U7Ci0KLS0gKE5QUGx1Z2luRnVuY3MgKilwbHVnaW5GdW5jczsK
LS0gKE5QTmV0c2NhcGVGdW5jcyAqKWJyb3dzZXJGdW5jczsKLQotLSAoQk9PTClzdXBwb3J0c1Nu
YXBzaG90dGluZzsKLQotI2lmIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKQotLSAoY3B1X3R5cGVf
dClwbHVnaW5Ib3N0QXJjaGl0ZWN0dXJlOwotI2VuZGlmCi0KLUBlbmQKLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblBh
Y2thZ2UubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1
Z2luUGFja2FnZS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2UxZmNmNjdkMmNk
Y2Y0NTVkNjM0ZjhhNWVhNDg0N2Y3ZmI4ZmFkYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5l
dHNjYXBlUGx1Z2luUGFja2FnZS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDM2NCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSNpbXBvcnQgIldlYk5ldHNjYXBl
UGx1Z2luUGFja2FnZS5oIgotCi0jaW1wb3J0ICJXZWJLaXRMb2dnaW5nLmgiCi0jaW1wb3J0ICJX
ZWJLaXROU1N0cmluZ0V4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNGaWxlTWFuYWdlckV4dHJhcy5o
IgotI2ltcG9ydCAiV2ViTlNPYmplY3RFeHRyYXMuaCIKLSNpbXBvcnQgPFdlYkNvcmUvbnBydW50
aW1lX2ltcGwuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLQotI2lmIFVTRShQTFVHSU5f
SE9TVF9QUk9DRVNTKQotI2ltcG9ydCAiTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5oIgotCi11
c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotI2VuZGlmCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwotCi1AaW50ZXJmYWNlIFdlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSAoSW50ZXJuYWwpCi0tICh2
b2lkKV91bmxvYWRXaXRoU2h1dGRvd246KEJPT0wpc2h1dGRvd247Ci1AZW5kCi0KLUBpbXBsZW1l
bnRhdGlvbiBXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UKLQotLSAoUmVzRmlsZVJlZk51bSlvcGVu
UmVzb3VyY2VGaWxlCi17Ci1BTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAg
IHJldHVybiBDRkJ1bmRsZU9wZW5CdW5kbGVSZXNvdXJjZU1hcChjZkJ1bmRsZS5nZXQoKSk7Ci1B
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLX0KLQotLSAodm9pZCljbG9zZVJlc291
cmNlRmlsZTooUmVzRmlsZVJlZk51bSlyZXNSZWYKLXsKLUFMTE9XX0RFUFJFQ0FURURfREVDTEFS
QVRJT05TX0JFR0lOCi0gICAgQ0ZCdW5kbGVDbG9zZUJ1bmRsZVJlc291cmNlTWFwKGNmQnVuZGxl
LmdldCgpLCByZXNSZWYpOwotQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi19Ci0K
LS0gKEJPT0wpX2luaXRXaXRoUGF0aDooTlNTdHJpbmcgKilwbHVnaW5QYXRoCi17Ci0gICAgcmVz
b3VyY2VSZWYgPSAtMTsKLSAgICAKLSAgICBPU1R5cGUgdHlwZSA9IDA7Ci0KLSAgICBpZiAoIWNm
QnVuZGxlKQotICAgICAgICByZXR1cm4gTk87Ci0KLSAgICBDRkJ1bmRsZUdldFBhY2thZ2VJbmZv
KGNmQnVuZGxlLmdldCgpLCAmdHlwZSwgTlVMTCk7Ci0gICAgCi0gICAgaWYgKHR5cGUgIT0gRk9V
Ul9DSEFSX0NPREUoJ0JSUEwnKSkKLSAgICAgICAgcmV0dXJuIE5POwotCi0jaWYgVVNFKFBMVUdJ
Tl9IT1NUX1BST0NFU1MpCi0gICAgYXV0byBhcmNocyA9IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5RXhl
Y3V0YWJsZUFyY2hpdGVjdHVyZXMoY2ZCdW5kbGUuZ2V0KCkpKTsKLSAgICBpZiAoWyhfX2JyaWRn
ZSBOU0FycmF5ICopYXJjaHMuZ2V0KCkgY29udGFpbnNPYmplY3Q6QChOU0J1bmRsZUV4ZWN1dGFi
bGVBcmNoaXRlY3R1cmVYODZfNjQpXSkKLSAgICAgICAgcGx1Z2luSG9zdEFyY2hpdGVjdHVyZSA9
IENQVV9UWVBFX1g4Nl82NDsKLSAgICBlbHNlIGlmIChbKF9fYnJpZGdlIE5TQXJyYXkgKilhcmNo
cy5nZXQoKSBjb250YWluc09iamVjdDpAKE5TQnVuZGxlRXhlY3V0YWJsZUFyY2hpdGVjdHVyZUkz
ODYpXSkKLSAgICAgICAgcGx1Z2luSG9zdEFyY2hpdGVjdHVyZSA9IENQVV9UWVBFX1g4NjsKLSAg
ICBlbHNlCi0gICAgICAgIHJldHVybiBOTzsKLSNlbHNlCi0gICAgUmV0YWluUHRyPENGVVJMUmVm
PiBleGVjdXRhYmxlVVJMID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlFeGVjdXRhYmxlVVJMKGNmQnVu
ZGxlLmdldCgpKSk7Ci0gICAgaWYgKCFleGVjdXRhYmxlVVJMKQotICAgICAgICByZXR1cm4gTk87
Ci0gICAgTlNGaWxlSGFuZGxlICpleGVjdXRhYmxlRmlsZSA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhh
bmRsZUZvclJlYWRpbmdBdFBhdGg6WyhOU1VSTCAqKWV4ZWN1dGFibGVVUkwuZ2V0KCkgcGF0aF1d
OwotICAgIE5TRGF0YSAqZGF0YSA9IFtleGVjdXRhYmxlRmlsZSByZWFkRGF0YU9mTGVuZ3RoOjUx
Ml07Ci0gICAgW2V4ZWN1dGFibGVGaWxlIGNsb3NlRmlsZV07Ci0KLSAgICAgaWYgKCFbc2VsZiBp
c05hdGl2ZUxpYnJhcnlEYXRhOmRhdGFdKQotICAgICAgICAgcmV0dXJuIE5POwotI2VuZGlmCi0K
LSAgICBpZiAoIVtzZWxmIGdldFBsdWdpbkluZm9Gcm9tUExpc3RzXSkKLSAgICAgICAgcmV0dXJu
IE5POwotICAgIAotICAgIHJldHVybiBZRVM7Ci19Ci0KLS0gKGlkKWluaXRXaXRoUGF0aDooTlNT
dHJpbmcgKilwbHVnaW5QYXRoCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aFBh
dGg6cGx1Z2luUGF0aF0pKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIC8vIEluaXRp
YWxpemluZyBhIHBsdWdpbiBwYWNrYWdlIGNhbiBjYXVzZSBpdCB0byBiZSBsb2FkZWQuICBJZiB0
aGVyZSB3YXMgYW4gZXJyb3IgaW5pdGlhbGl6aW5nIHRoZSBwbHVnaW4gcGFja2FnZSwKLSAgICAv
LyBlbnN1cmUgdGhhdCBpdCBpcyB1bmxvYWRlZCBiZWZvcmUgZGVhbGxvY2F0aW5nIGl0IChXZWJC
YXNlUGx1Z2luUGFja2FnZSByZXF1aXJlcyAmIGFzc2VydHMgdGhpcykuCi0gICAgaWYgKCFbc2Vs
ZiBfaW5pdFdpdGhQYXRoOnBsdWdpblBhdGhdKSB7Ci0gICAgICAgIFtzZWxmIF91bmxvYWRXaXRo
U2h1dGRvd246WUVTXTsKLSAgICAgICAgW3NlbGYgcmVsZWFzZV07Ci0gICAgICAgIHJldHVybiBu
aWw7Ci0gICAgfQotICAgICAgICAKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotI2lmIFVTRShQTFVH
SU5fSE9TVF9QUk9DRVNTKQotCi0tIChjcHVfdHlwZV90KXBsdWdpbkhvc3RBcmNoaXRlY3R1cmUK
LXsKLSAgICByZXR1cm4gcGx1Z2luSG9zdEFyY2hpdGVjdHVyZTsKLX0KLQotLSAodm9pZCljcmVh
dGVQcm9wZXJ0eUxpc3RGaWxlCi17Ci0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6c2lu
Z2xldG9uKCkuY3JlYXRlUHJvcGVydHlMaXN0RmlsZShwYXRoLCBwbHVnaW5Ib3N0QXJjaGl0ZWN0
dXJlLCBbc2VsZiBidW5kbGVJZGVudGlmaWVyXSk7Ci19Ci0KLSNlbmRpZgotCi0tICh2b2lkKXVu
bG9hZAotewotICAgIFtzZWxmIF91bmxvYWRXaXRoU2h1dGRvd246WUVTXTsKLX0KLQotLSAoQk9P
TClfdHJ5TG9hZAotewotICAgIE5QX0dldEVudHJ5UG9pbnRzRnVuY1B0ciBOUF9HZXRFbnRyeVBv
aW50cyA9IE5VTEw7Ci0gICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6ZSA9IE5V
TEw7Ci0gICAgTlBFcnJvciBucEVycjsKLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICBDRkFic29s
dXRlVGltZSBzdGFydCA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwotICAgIENGQWJzb2x1
dGVUaW1lIGN1cnJlbnRUaW1lOwotICAgIENGQWJzb2x1dGVUaW1lIGR1cmF0aW9uOwotI2VuZGlm
Ci0gICAgTE9HKFBsdWdpbnMsICIlZiBMb2FkIHRpbWluZyBzdGFydGVkIGZvcjogJUAiLCBzdGFy
dCwgKE5TU3RyaW5nICopW3NlbGYgcGx1Z2luSW5mb10ubmFtZSk7Ci0KLSAgICBpZiAoaXNMb2Fk
ZWQpCi0gICAgICAgIHJldHVybiBZRVM7Ci0gICAgCi0gICAgaWYgKCFDRkJ1bmRsZUxvYWRFeGVj
dXRhYmxlKGNmQnVuZGxlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIE5POwotI2lmICFMT0dfRElT
QUJMRUQKLSAgICBjdXJyZW50VGltZSA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwotICAg
IGR1cmF0aW9uID0gY3VycmVudFRpbWUgLSBzdGFydDsKLSNlbmRpZgotICAgIExPRyhQbHVnaW5z
LCAiJWYgQ0ZCdW5kbGVMb2FkRXhlY3V0YWJsZSB0b29rICVmIHNlY29uZHMiLCBjdXJyZW50VGlt
ZSwgZHVyYXRpb24pOwotICAgIGlzTG9hZGVkID0gWUVTOwotCi0gICAgTlBfSW5pdGlhbGl6ZSA9
IChOUF9Jbml0aWFsaXplRnVuY1B0cilDRkJ1bmRsZUdldEZ1bmN0aW9uUG9pbnRlckZvck5hbWUo
Y2ZCdW5kbGUuZ2V0KCksIENGU1RSKCJOUF9Jbml0aWFsaXplIikpOwotICAgIE5QX0dldEVudHJ5
UG9pbnRzID0gKE5QX0dldEVudHJ5UG9pbnRzRnVuY1B0cilDRkJ1bmRsZUdldEZ1bmN0aW9uUG9p
bnRlckZvck5hbWUoY2ZCdW5kbGUuZ2V0KCksIENGU1RSKCJOUF9HZXRFbnRyeVBvaW50cyIpKTsK
LSAgICBOUF9TaHV0ZG93biA9IChOUFBfU2h1dGRvd25Qcm9jUHRyKUNGQnVuZGxlR2V0RnVuY3Rp
b25Qb2ludGVyRm9yTmFtZShjZkJ1bmRsZS5nZXQoKSwgQ0ZTVFIoIk5QX1NodXRkb3duIikpOwot
ICAgIGlmICghTlBfSW5pdGlhbGl6ZSB8fCAhTlBfR2V0RW50cnlQb2ludHMgfHwgIU5QX1NodXRk
b3duKQotICAgICAgICByZXR1cm4gTk87Ci0KLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFU
SU9OU19CRUdJTgotICAgIC8vIFBsdWdpbnMgKGF0IGxlYXN0IFFUKSByZXF1aXJlIHRoYXQgeW91
IGNhbGwgVXNlUmVzRmlsZSBvbiB0aGUgcmVzb3VyY2UgZmlsZSBiZWZvcmUgbG9hZGluZyBpdC4K
LSAgICByZXNvdXJjZVJlZiA9IFtzZWxmIG9wZW5SZXNvdXJjZUZpbGVdOwotICAgIGlmIChyZXNv
dXJjZVJlZiAhPSAtMSkgewotICAgICAgICBVc2VSZXNGaWxlKHJlc291cmNlUmVmKTsKLSAgICB9
Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0KLSAgICBicm93c2VyRnVu
Y3MudmVyc2lvbiA9IE5QX1ZFUlNJT05fTUlOT1I7Ci0gICAgYnJvd3NlckZ1bmNzLnNpemUgPSBz
aXplb2YoTlBOZXRzY2FwZUZ1bmNzKTsKLSAgICBicm93c2VyRnVuY3MuZ2V0dXJsID0gTlBOX0dl
dFVSTDsKLSAgICBicm93c2VyRnVuY3MucG9zdHVybCA9IE5QTl9Qb3N0VVJMOwotICAgIGJyb3dz
ZXJGdW5jcy5yZXF1ZXN0cmVhZCA9IE5QTl9SZXF1ZXN0UmVhZDsKLSAgICBicm93c2VyRnVuY3Mu
bmV3c3RyZWFtID0gTlBOX05ld1N0cmVhbTsKLSAgICBicm93c2VyRnVuY3Mud3JpdGUgPSBOUE5f
V3JpdGU7Ci0gICAgYnJvd3NlckZ1bmNzLmRlc3Ryb3lzdHJlYW0gPSBOUE5fRGVzdHJveVN0cmVh
bTsKLSAgICBicm93c2VyRnVuY3Muc3RhdHVzID0gTlBOX1N0YXR1czsKLSAgICBicm93c2VyRnVu
Y3MudWFnZW50ID0gTlBOX1VzZXJBZ2VudDsKLSAgICBicm93c2VyRnVuY3MubWVtYWxsb2MgPSBO
UE5fTWVtQWxsb2M7Ci0gICAgYnJvd3NlckZ1bmNzLm1lbWZyZWUgPSBOUE5fTWVtRnJlZTsKLSAg
ICBicm93c2VyRnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7Ci0gICAgYnJvd3NlckZ1bmNz
LnJlbG9hZHBsdWdpbnMgPSBOUE5fUmVsb2FkUGx1Z2luczsKLSAgICBicm93c2VyRnVuY3MuZ2V0
dXJsbm90aWZ5ID0gTlBOX0dldFVSTE5vdGlmeTsKLSAgICBicm93c2VyRnVuY3MucG9zdHVybG5v
dGlmeSA9IE5QTl9Qb3N0VVJMTm90aWZ5OwotICAgIGJyb3dzZXJGdW5jcy5nZXR2YWx1ZSA9IE5Q
Tl9HZXRWYWx1ZTsKLSAgICBicm93c2VyRnVuY3Muc2V0dmFsdWUgPSBOUE5fU2V0VmFsdWU7Ci0g
ICAgYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0ludmFsaWRhdGVSZWN0OwotICAg
IGJyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVnaW9uID0gTlBOX0ludmFsaWRhdGVSZWdpb247Ci0g
ICAgYnJvd3NlckZ1bmNzLmZvcmNlcmVkcmF3ID0gTlBOX0ZvcmNlUmVkcmF3OwotICAgIGJyb3dz
ZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dldEphdmFFbnY7Ci0gICAgYnJvd3NlckZ1bmNzLmdl
dEphdmFQZWVyID0gTlBOX0dldEphdmFQZWVyOwotICAgIGJyb3dzZXJGdW5jcy5wdXNocG9wdXBz
ZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGU7Ci0gICAgYnJvd3NlckZ1
bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGU7Ci0g
ICAgYnJvd3NlckZ1bmNzLnBsdWdpbnRocmVhZGFzeW5jY2FsbCA9IE5QTl9QbHVnaW5UaHJlYWRB
c3luY0NhbGw7Ci0gICAgYnJvd3NlckZ1bmNzLmdldHZhbHVlZm9ydXJsID0gTlBOX0dldFZhbHVl
Rm9yVVJMOwotICAgIGJyb3dzZXJGdW5jcy5zZXR2YWx1ZWZvcnVybCA9IE5QTl9TZXRWYWx1ZUZv
clVSTDsKLSAgICBicm93c2VyRnVuY3MuZ2V0YXV0aGVudGljYXRpb25pbmZvID0gTlBOX0dldEF1
dGhlbnRpY2F0aW9uSW5mbzsKLSAgICBicm93c2VyRnVuY3Muc2NoZWR1bGV0aW1lciA9IE5QTl9T
Y2hlZHVsZVRpbWVyOwotICAgIGJyb3dzZXJGdW5jcy51bnNjaGVkdWxldGltZXIgPSBOUE5fVW5z
Y2hlZHVsZVRpbWVyOwotICAgIGJyb3dzZXJGdW5jcy5wb3B1cGNvbnRleHRtZW51ID0gTlBOX1Bv
cFVwQ29udGV4dE1lbnU7Ci0gICAgYnJvd3NlckZ1bmNzLmNvbnZlcnRwb2ludCA9IE5QTl9Db252
ZXJ0UG9pbnQ7Ci0KLSAgICBicm93c2VyRnVuY3MucmVsZWFzZXZhcmlhbnR2YWx1ZSA9IF9OUE5f
UmVsZWFzZVZhcmlhbnRWYWx1ZTsKLSAgICBicm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmll
ciA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcjsKLSAgICBicm93c2VyRnVuY3MuZ2V0c3RyaW5n
aWRlbnRpZmllcnMgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzOwotICAgIGJyb3dzZXJGdW5j
cy5nZXRpbnRpZGVudGlmaWVyID0gX05QTl9HZXRJbnRJZGVudGlmaWVyOwotICAgIGJyb3dzZXJG
dW5jcy5pZGVudGlmaWVyaXNzdHJpbmcgPSBfTlBOX0lkZW50aWZpZXJJc1N0cmluZzsKLSAgICBi
cm93c2VyRnVuY3MudXRmOGZyb21pZGVudGlmaWVyID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXI7
Ci0gICAgYnJvd3NlckZ1bmNzLmludGZyb21pZGVudGlmaWVyID0gX05QTl9JbnRGcm9tSWRlbnRp
ZmllcjsKLSAgICBicm93c2VyRnVuY3MuY3JlYXRlb2JqZWN0ID0gX05QTl9DcmVhdGVPYmplY3Q7
Ci0gICAgYnJvd3NlckZ1bmNzLnJldGFpbm9iamVjdCA9IF9OUE5fUmV0YWluT2JqZWN0OwotICAg
IGJyb3dzZXJGdW5jcy5yZWxlYXNlb2JqZWN0ID0gX05QTl9SZWxlYXNlT2JqZWN0OwotICAgIGJy
b3dzZXJGdW5jcy5oYXNtZXRob2QgPSBfTlBOX0hhc01ldGhvZDsKLSAgICBicm93c2VyRnVuY3Mu
aW52b2tlID0gX05QTl9JbnZva2U7Ci0gICAgYnJvd3NlckZ1bmNzLmludm9rZURlZmF1bHQgPSBf
TlBOX0ludm9rZURlZmF1bHQ7Ci0gICAgYnJvd3NlckZ1bmNzLmV2YWx1YXRlID0gX05QTl9FdmFs
dWF0ZTsKLSAgICBicm93c2VyRnVuY3MuaGFzcHJvcGVydHkgPSBfTlBOX0hhc1Byb3BlcnR5Owot
ICAgIGJyb3dzZXJGdW5jcy5nZXRwcm9wZXJ0eSA9IF9OUE5fR2V0UHJvcGVydHk7Ci0gICAgYnJv
d3NlckZ1bmNzLnNldHByb3BlcnR5ID0gX05QTl9TZXRQcm9wZXJ0eTsKLSAgICBicm93c2VyRnVu
Y3MucmVtb3ZlcHJvcGVydHkgPSBfTlBOX1JlbW92ZVByb3BlcnR5OwotICAgIGJyb3dzZXJGdW5j
cy5zZXRleGNlcHRpb24gPSBfTlBOX1NldEV4Y2VwdGlvbjsKLSAgICBicm93c2VyRnVuY3MuZW51
bWVyYXRlID0gX05QTl9FbnVtZXJhdGU7Ci0gICAgYnJvd3NlckZ1bmNzLmNvbnN0cnVjdCA9IF9O
UE5fQ29uc3RydWN0OwotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIENGQWJzb2x1dGVUaW1lIGlu
aXRpYWxpemVTdGFydCA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwotI2VuZGlmCi0gICAg
TE9HKFBsdWdpbnMsICIlZiBOUF9Jbml0aWFsaXplIHRpbWluZyBzdGFydGVkIiwgaW5pdGlhbGl6
ZVN0YXJ0KTsKLSAgICBucEVyciA9IE5QX0luaXRpYWxpemUoJmJyb3dzZXJGdW5jcyk7Ci0gICAg
aWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQotICAgICAgICByZXR1cm4gTk87Ci0jaWYgIUxP
R19ESVNBQkxFRAotICAgIGN1cnJlbnRUaW1lID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7
Ci0gICAgZHVyYXRpb24gPSBjdXJyZW50VGltZSAtIGluaXRpYWxpemVTdGFydDsKLSNlbmRpZgot
ICAgIExPRyhQbHVnaW5zLCAiJWYgTlBfSW5pdGlhbGl6ZSB0b29rICVmIHNlY29uZHMiLCBjdXJy
ZW50VGltZSwgZHVyYXRpb24pOwotCi0gICAgcGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihOUFBs
dWdpbkZ1bmNzKTsKLQotICAgIG5wRXJyID0gTlBfR2V0RW50cnlQb2ludHMoJnBsdWdpbkZ1bmNz
KTsKLSAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAgIHJldHVybiBOTzsK
LQotICAgIHBsdWdpblNpemUgPSBwbHVnaW5GdW5jcy5zaXplOwotICAgIHBsdWdpblZlcnNpb24g
PSBwbHVnaW5GdW5jcy52ZXJzaW9uOwotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIGN1cnJlbnRU
aW1lID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7Ci0gICAgZHVyYXRpb24gPSBjdXJyZW50
VGltZSAtIHN0YXJ0OwotI2VuZGlmCi0gICAgTE9HKFBsdWdpbnMsICIlZiBUb3RhbCBsb2FkIHRp
bWU6ICVmIHNlY29uZHMiLCBjdXJyZW50VGltZSwgZHVyYXRpb24pOwotCi0gICAgcmV0dXJuIFlF
UzsKLX0KLQotLSAoQk9PTClsb2FkCi17ICAgIAotICAgIGlmIChbc2VsZiBfdHJ5TG9hZF0pCi0g
ICAgICAgIHJldHVybiBbc3VwZXIgbG9hZF07Ci0KLSAgICBbc2VsZiBfdW5sb2FkV2l0aFNodXRk
b3duOk5PXTsKLSAgICByZXR1cm4gTk87Ci19Ci0KLS0gKE5QUGx1Z2luRnVuY3MgKilwbHVnaW5G
dW5jcwotewotICAgIHJldHVybiAmcGx1Z2luRnVuY3M7Ci19Ci0KLS0gKE5QTmV0c2NhcGVGdW5j
cyAqKWJyb3dzZXJGdW5jcwotewotICAgIHJldHVybiAmYnJvd3NlckZ1bmNzOwotfQotCi0tICh2
b2lkKXdhc1JlbW92ZWRGcm9tUGx1Z2luRGF0YWJhc2U6KFdlYlBsdWdpbkRhdGFiYXNlICopZGF0
YWJhc2UKLXsKLSAgICBbc3VwZXIgd2FzUmVtb3ZlZEZyb21QbHVnaW5EYXRhYmFzZTpkYXRhYmFz
ZV07Ci0gICAgCi0gICAgLy8gVW5sb2FkIHdoZW4gcmVtb3ZlZCBmcm9tIGZpbmFsIHBsdWctaW4g
ZGF0YWJhc2UKLSAgICBpZiAoW3BsdWdpbkRhdGFiYXNlcyBjb3VudF0gPT0gMCkKLSAgICAgICAg
W3NlbGYgX3VubG9hZFdpdGhTaHV0ZG93bjpZRVNdOwotfQotCi0tICh2b2lkKW9wZW4KLXsKLSAg
ICBpbnN0YW5jZUNvdW50Kys7Ci0gICAgCi0gICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGFs
bCBpbnN0YW5jZXMgY2xvc2UgYSBwbHVnLWluIHBhY2thZ2UsIGJ1dCBhbm90aGVyCi0gICAgLy8g
aW5zdGFuY2Ugb3BlbnMgdGhlIHBhY2thZ2UgYmVmb3JlIGl0IGlzIHVubG9hZGVkICh3aGljaCBv
bmx5IGhhcHBlbnMgd2hlbgotICAgIC8vIHRoZSBwbHVnLWluIGRhdGFiYXNlIGlzIHJlZnJlc2hl
ZCkKLSAgICBuZWVkc1VubG9hZCA9IE5POwotICAgIAotICAgIGlmICghaXNMb2FkZWQpIHsKLSAg
ICAgICAgLy8gU2hvdWxkIGxvYWQgd2hlbiB0aGUgZmlyc3QgaW5zdGFuY2Ugb3BlbnMgdGhlIHBs
dWctaW4gcGFja2FnZQotICAgICAgICBBU1NFUlQoaW5zdGFuY2VDb3VudCA9PSAxKTsKLSAgICAg
ICAgW3NlbGYgbG9hZF07Ci0gICAgfQotfQotCi0tICh2b2lkKWNsb3NlCi17Ci0gICAgQVNTRVJU
KGluc3RhbmNlQ291bnQgPiAwKTsKLSAgICBpbnN0YW5jZUNvdW50LS07Ci0gICAgaWYgKGluc3Rh
bmNlQ291bnQgPT0gMCAmJiBuZWVkc1VubG9hZCkKLSAgICAgICAgW3NlbGYgX3VubG9hZFdpdGhT
aHV0ZG93bjpZRVNdOwotfQotCi0KLS0gKEJPT0wpc3VwcG9ydHNTbmFwc2hvdHRpbmcKLXsKLSAg
ICBpZiAoW3NlbGYgYnVuZGxlSWRlbnRpZmllcl0gIT0gImNvbS5tYWNyb21lZGlhLkZsYXNoIFBs
YXllci5wbHVnaW4iKQotICAgICAgICByZXR1cm4gWUVTOwotICAgIAotICAgIC8vIEZsYXNoIGhh
cyBhIGJvZ3VzIEluZm8ucGxpc3QgZW50cnkgZm9yIENGQnVuZGxlVmVyc2lvblN0cmluZywgc28g
dXNlIENGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nLgotICAgIE5TU3RyaW5nICp2ZXJzaW9uU3Ry
aW5nID0gKE5TU3RyaW5nICopQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoQ0ZCdW5kbGVHZXRJbmZvRGlj
dGlvbmFyeShjZkJ1bmRsZS5nZXQoKSksIENGU1RSKCJDRkJ1bmRsZVNob3J0VmVyc2lvblN0cmlu
ZyIpKTsKLSAgICAKLSAgICBpZiAoIVt2ZXJzaW9uU3RyaW5nIGhhc1ByZWZpeDpAIjEwLjEiXSkK
LSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICAKLSAgICAvLyBTb21lIHByZXJlbGVhc2UgdmVyc2lv
bnMgb2YgRmxhc2ggMTAuMSBjcmFzaCB3aGVuIHNlbnQgYSBkcmF3UmVjdCBldmVudCB1c2luZyB0
aGUgQ0EgZHJhd2luZyBtb2RlbDogPHJkYXI6Ly9wcm9ibGVtLzc3Mzk5MjI+Ci0gICAgcmV0dXJu
IENGU3RyaW5nQ29tcGFyZSgoQ0ZTdHJpbmdSZWYpdmVyc2lvblN0cmluZywgQ0ZTVFIoIjEwLjEu
NTMuNjAiKSwga0NGQ29tcGFyZU51bWVyaWNhbGx5KSAhPSBrQ0ZDb21wYXJlTGVzc1RoYW47Ci19
Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSAoSW50
ZXJuYWwpCi0KLS0gKHZvaWQpX3VubG9hZFdpdGhTaHV0ZG93bjooQk9PTClzaHV0ZG93bgotewot
ICAgIGlmICghaXNMb2FkZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBMT0coUGx1Z2lu
cywgIlVubG9hZGluZyAlQC4uLiIsIChOU1N0cmluZyAqKXBsdWdpbkluZm8ubmFtZSk7Ci0KLSAg
ICAvLyBDYW5ub3QgdW5sb2FkIGEgcGx1Zy1pbiBwYWNrYWdlIHdoaWxlIGFuIGluc3RhbmNlIGlz
IHN0aWxsIHVzaW5nIGl0Ci0gICAgaWYgKGluc3RhbmNlQ291bnQgPiAwKSB7Ci0gICAgICAgIG5l
ZWRzVW5sb2FkID0gWUVTOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHNodXRk
b3duICYmIE5QX1NodXRkb3duKQotICAgICAgICBOUF9TaHV0ZG93bigpOwotCi0gICAgaWYgKHJl
c291cmNlUmVmICE9IC0xKQotICAgICAgICBbc2VsZiBjbG9zZVJlc291cmNlRmlsZTpyZXNvdXJj
ZVJlZl07Ci0KLSAgICBMT0coUGx1Z2lucywgIlBsdWdpbiBVbmxvYWRlZCIpOwotICAgIGlzTG9h
ZGVkID0gTk87Ci19Ci0KLUBlbmQKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5oIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAxOTM5MGI1YzAyYTc1Zjc5Zjk2NmY4MWE0MWEyZDcwNTY1Nzhm
MDg1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0uaAorKysg
L2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0j
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViQ29yZS9UaW1l
ci5oPgotI2ltcG9ydCA8V2ViQ29yZS9OZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oPgotI2lt
cG9ydCA8V2ViS2l0TGVnYWN5L25wZnVuY3Rpb25zLmg+Ci0jaW1wb3J0IDx3dGYvUmVmLmg+Ci0j
aW1wb3J0IDx3dGYvUmVmQ291bnRlZC5oPgotI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgotI2ltcG9y
dCA8d3RmL1JldGFpblB0ci5oPgotI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaW1w
b3J0ICJXZWJOZXRzY2FwZVBsdWdpblZpZXcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAg
IGNsYXNzIEZyYW1lTG9hZGVyOwotICAgIGNsYXNzIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
OwotfQotCi1AY2xhc3MgV2ViTmV0c2NhcGVQbHVnaW5WaWV3OwotQGNsYXNzIE5TVVJMUmVzcG9u
c2U7Ci0KLWNsYXNzIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtIDogcHVibGljIFJlZkNvdW50ZWQ8
V2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IHByaXZhdGUgV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQKLXsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtPiBjcmVhdGUoTlNV
UkxSZXF1ZXN0ICpyZXF1ZXN0LCBOUFAgcGx1Z2luLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZv
aWQqIG5vdGlmeURhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJO
ZXRzY2FwZVBsdWdpblN0cmVhbShyZXF1ZXN0LCBwbHVnaW4sIHNlbmROb3RpZmljYXRpb24sIG5v
dGlmeURhdGEpKTsKLSAgICB9Ci0gICAgc3RhdGljIFJlZjxXZWJOZXRzY2FwZVBsdWdpblN0cmVh
bT4gY3JlYXRlKFdlYkNvcmU6OkZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlcikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtKGZyYW1lTG9h
ZGVyKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfldlYk5ldHNjYXBlUGx1Z2luU3RyZWFtKCk7Ci0K
LSAgICBOUFAgcGx1Z2luKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW47IH0KLSAgICB2b2lkIHNl
dFBsdWdpbihOUFApOwotICAgIAotICAgIHN0YXRpYyBOUFAgb3duZXJGb3JTdHJlYW0oTlBTdHJl
YW0gKik7Ci0KLSAgICBzdGF0aWMgTlBSZWFzb24gcmVhc29uRm9yRXJyb3IoTlNFcnJvciAqKTsK
LSAgICBOU0Vycm9yICplcnJvckZvclJlYXNvbihOUFJlYXNvbikgY29uc3Q7Ci0KLSAgICB2b2lk
IGNhbmNlbExvYWRBbmREZXN0cm95U3RyZWFtV2l0aEVycm9yKE5TRXJyb3IgKik7Ci0KLSAgICB2
b2lkIHNldFJlcXVlc3RVUkwoY29uc3QgVVJMJiByZXF1ZXN0VVJMKSB7IG1fcmVxdWVzdFVSTCA9
IHJlcXVlc3RVUkw7IH0KLQotICAgIHZvaWQgc3RhcnQoKTsKLSAgICB2b2lkIHN0b3AoKTsKLSAg
ICAKLSAgICB2b2lkIHN0YXJ0U3RyZWFtV2l0aFJlc3BvbnNlKE5TVVJMUmVzcG9uc2UgKnJlc3Bv
bnNlKTsKLSAgICAKLSAgICB2b2lkIGRlc3Ryb3lTdHJlYW1XaXRoRXJyb3IoTlNFcnJvciAqKTsK
LQotICAgIC8vIEZJWE1FOiBDYW4gdGhlc2UgYmUgbWFkZSBwcml2YXRlPwotICAgIHZvaWQgZGlk
UmVjZWl2ZURhdGEoV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCB1
aW50OF90KiBieXRlcywgaW50IGxlbmd0aCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nKFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKikgb3ZlcnJpZGU7Ci0K
LXByaXZhdGU6Ci0gICAgdm9pZCBkZXN0cm95U3RyZWFtKCk7Ci0gICAgdm9pZCBjYW5jZWxMb2Fk
V2l0aEVycm9yKE5TRXJyb3IgKik7Ci0gICAgdm9pZCBkZXN0cm95U3RyZWFtV2l0aFJlYXNvbihO
UFJlYXNvbik7Ci0gICAgdm9pZCBkZWxpdmVyRGF0YVRvRmlsZShOU0RhdGEgKmRhdGEpOwotICAg
IHZvaWQgZGVsaXZlckRhdGEoKTsKLQotICAgIHZvaWQgc3RhcnRTdHJlYW0oTlNVUkwgKiwgbG9u
ZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0aCwgTlNEYXRlICpsYXN0TW9kaWZpZWREYXRlLCBj
b25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUsIE5TRGF0YSAqaGVhZGVycyk7Ci0gICAgCi0gICAg
TlNFcnJvciAqcGx1Z2luQ2FuY2VsbGVkQ29ubmVjdGlvbkVycm9yKCkgY29uc3Q7Ci0KLSAgICAv
LyBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudCBtZXRob2RzLgotICAgIHZvaWQgd2ls
bFNlbmRSZXF1ZXN0KFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJl
ZGlyZWN0UmVzcG9uc2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiYpPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXZWJD
b3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEZhaWwoV2ViQ29yZTo6TmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJikgb3ZlcnJp
ZGU7Ci0gICAgYm9vbCB3YW50c0FsbFN0cmVhbXMoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIFJl
dGFpblB0cjxOU011dGFibGVEYXRhPiBtX2RlbGl2ZXJ5RGF0YTsKLSAgICBVUkwgbV9yZXF1ZXN0
VVJMOwotICAgIFJldGFpblB0cjxOU1VSTD4gbV9yZXNwb25zZVVSTDsKLSAgICBDU3RyaW5nIG1f
bWltZVR5cGU7Ci0KLSAgICBOUFAgbV9wbHVnaW47Ci0gICAgdWludDE2X3QgbV90cmFuc2Zlck1v
ZGU7Ci0gICAgaW50MzJfdCBtX29mZnNldDsKLSAgICBOUFN0cmVhbSBtX3N0cmVhbTsKLSAgICBS
ZXRhaW5QdHI8TlNTdHJpbmc+IG1fcGF0aDsKLSAgICBpbnQgbV9maWxlRGVzY3JpcHRvcjsKLSAg
ICBCT09MIG1fc2VuZE5vdGlmaWNhdGlvbjsKLSAgICB2b2lkICptX25vdGlmeURhdGE7Ci0gICAg
Y2hhciAqbV9oZWFkZXJzOwotICAgIFJldGFpblB0cjxXZWJOZXRzY2FwZVBsdWdpblZpZXc+IG1f
cGx1Z2luVmlldzsKLSAgICBOUFJlYXNvbiBtX3JlYXNvbjsKLSAgICBib29sIG1faXNUZXJtaW5h
dGVkOwotICAgIGJvb2wgbV9uZXdTdHJlYW1TdWNjZXNzZnVsOwotICAgIAotICAgIFdlYkNvcmU6
OkZyYW1lTG9hZGVyKiBtX2ZyYW1lTG9hZGVyOwotICAgIFJlZlB0cjxXZWJDb3JlOjpOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlcj4gbV9sb2FkZXI7Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZVVS
TFJlcXVlc3Q+IG1fcmVxdWVzdDsKLSAgICBOUFBsdWdpbkZ1bmNzICptX3BsdWdpbkZ1bmNzOwot
Ci0gICAgV2ViQ29yZTo6VGltZXIgbV9kZWxpdmVyRGF0YVRpbWVyOwotICAgIAotICAgIFdlYk5l
dHNjYXBlUGx1Z2luU3RyZWFtKFdlYkNvcmU6OkZyYW1lTG9hZGVyKik7Ci0gICAgV2ViTmV0c2Nh
cGVQbHVnaW5TdHJlYW0oTlNVUkxSZXF1ZXN0ICosIE5QUCwgYm9vbCBzZW5kTm90aWZpY2F0aW9u
LCB2b2lkKiBub3RpZnlEYXRhKTsKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbSBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNGMyNTE3ZTg0Yzk2N2U4ZjdmZDM5OGY2YzVi
ZGNhNzczMDEwNzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVh
bS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDYzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLSNpbXBvcnQgIldlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLmgiCi0K
LSNpbXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYktpdEVycm9yc1ByaXZh
dGUuaCIKLSNpbXBvcnQgIldlYktpdExvZ2dpbmcuaCIKLSNpbXBvcnQgIldlYk5TT2JqZWN0RXh0
cmFzLmgiCi0jaW1wb3J0ICJXZWJOU1VSTEV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNVUkxSZXF1
ZXN0RXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UuaCIKLSNpbXBv
cnQgIldlYk5ldHNjYXBlUGx1Z2luVmlldy5oIgotI2ltcG9ydCAiV2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmgiCi0jaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJMUmVzcG9uc2UuaD4KLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgotI2ltcG9ydCA8V2ViQ29yZS9Db21tb25WTS5oPgot
I2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudExv
YWRlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9GcmFt
ZUxvYWRlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9KU0RPTVdpbmRvd0Jhc2UuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvTG9hZGVyU3RyYXRlZ3kuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TdHJh
dGVnaWVzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL1NlY3VyaXR5UG9saWN5Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVVUkxSZXNw
b25zZS5oPgotI2ltcG9ydCA8cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4KLSNpbXBvcnQgPHd0
Zi9Db21wbGV0aW9uSGFuZGxlci5oPgotI2ltcG9ydCA8d3RmL0hhc2hNYXAuaD4KLSNpbXBvcnQg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi11
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotI2RlZmluZSBXRUJfUkVBU09OX05PTkUgLTEKLQot
Y2xhc3MgUGx1Z2luU3RvcERlZmVycmVyIHsKLXB1YmxpYzoKLSAgICBQbHVnaW5TdG9wRGVmZXJy
ZXIoV2ViTmV0c2NhcGVQbHVnaW5WaWV3KiBwbHVnaW5WaWV3KQotICAgICAgICA6IG1fcGx1Z2lu
VmlldyhwbHVnaW5WaWV3KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcGx1Z2luVmlldyk7Ci0g
ICAgICAgIAotICAgICAgICBbbV9wbHVnaW5WaWV3LmdldCgpIHdpbGxDYWxsUGx1Z0luRnVuY3Rp
b25dOwotICAgIH0KLSAgICAKLSAgICB+UGx1Z2luU3RvcERlZmVycmVyKCkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX3BsdWdpblZpZXcpOwotICAgICAgICBbbV9wbHVnaW5WaWV3LmdldCgpIGRp
ZENhbGxQbHVnSW5GdW5jdGlvbl07Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBSZXRhaW5Q
dHI8V2ViTmV0c2NhcGVQbHVnaW5WaWV3PiBtX3BsdWdpblZpZXc7Ci19OwotCi10eXBlZGVmIEhh
c2hNYXA8TlBTdHJlYW0qLCBOUFA+IFN0cmVhbU1hcDsKLXN0YXRpYyBTdHJlYW1NYXAmIHN0cmVh
bXMoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJlYW1NYXA+IHN0YXRpY1N0cmVh
bXM7Ci0gICAgcmV0dXJuIHN0YXRpY1N0cmVhbXM7Ci19Ci0KLU5QUCBXZWJOZXRzY2FwZVBsdWdp
blN0cmVhbTo6b3duZXJGb3JTdHJlYW0oTlBTdHJlYW0gKnN0cmVhbSkKLXsKLSAgICByZXR1cm4g
c3RyZWFtcygpLmdldChzdHJlYW0pOwotfQotCi1OUFJlYXNvbiBXZWJOZXRzY2FwZVBsdWdpblN0
cmVhbTo6cmVhc29uRm9yRXJyb3IoTlNFcnJvciAqZXJyb3IpCi17Ci0gICAgaWYgKCFlcnJvcikK
LSAgICAgICAgcmV0dXJuIE5QUkVTX0RPTkU7Ci0KLSAgICBpZiAoW1tlcnJvciBkb21haW5dIGlz
RXF1YWxUb1N0cmluZzpOU1VSTEVycm9yRG9tYWluXSAmJiBbZXJyb3IgY29kZV0gPT0gTlNVUkxF
cnJvckNhbmNlbGxlZCkKLSAgICAgICAgcmV0dXJuIE5QUkVTX1VTRVJfQlJFQUs7Ci0KLSAgICBy
ZXR1cm4gTlBSRVNfTkVUV09SS19FUlI7Ci19Ci0KLU5TRXJyb3IgKldlYk5ldHNjYXBlUGx1Z2lu
U3RyZWFtOjpwbHVnaW5DYW5jZWxsZWRDb25uZWN0aW9uRXJyb3IoKSBjb25zdAotewotICAgIHJl
dHVybiBhZG9wdE5TKFtbTlNFcnJvciBhbGxvY10gX2luaXRXaXRoUGx1Z2luRXJyb3JDb2RlOldl
YktpdEVycm9yUGx1Z0luQ2FuY2VsbGVkQ29ubmVjdGlvbgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRVUkw6bV9yZXNwb25zZVVSTCA/IG1fcmVzcG9u
c2VVUkwuZ2V0KCkgOiAoTlNVUkwgKiltX3JlcXVlc3RVUkwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwbHVnaW5QYWdlVVJMOm5pbAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbk5hbWU6W1ttX3BsdWdpblZpZXcuZ2V0KCkg
cGx1Z2luUGFja2FnZV0gcGx1Z2luSW5mb10ubmFtZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6KE5TU3RyaW5nICopU3RyaW5nOjpmcm9tVVRG
OChtX21pbWVUeXBlLmRhdGEoKSwgbV9taW1lVHlwZS5sZW5ndGgoKSldKS5hdXRvcmVsZWFzZSgp
OwotfQotCi1OU0Vycm9yICpXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6ZXJyb3JGb3JSZWFzb24o
TlBSZWFzb24gcmVhc29uKSBjb25zdAotewotICAgIGlmIChyZWFzb24gPT0gTlBSRVNfRE9ORSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIGlmIChyZWFzb24gPT0gTlBSRVNfVVNFUl9CUkVB
SykKLSAgICAgICAgcmV0dXJuIFtOU0Vycm9yIF93ZWJLaXRFcnJvcldpdGhEb21haW46TlNVUkxF
cnJvckRvbWFpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29k
ZTpOU1VSTEVycm9yQ2FuY2VsbGVkIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVSTDptX3Jlc3BvbnNlVVJMID8gbV9yZXNwb25zZVVSTC5nZXQoKSA6IChOU1VS
TCAqKW1fcmVxdWVzdFVSTF07Ci0KLSAgICByZXR1cm4gcGx1Z2luQ2FuY2VsbGVkQ29ubmVjdGlv
bkVycm9yKCk7Ci19Ci0KLVdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpXZWJOZXRzY2FwZVBsdWdp
blN0cmVhbShGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIpCi0gICAgOiBtX3BsdWdpbigwKQotICAg
ICwgbV90cmFuc2Zlck1vZGUoMCkKLSAgICAsIG1fb2Zmc2V0KDApCi0gICAgLCBtX2ZpbGVEZXNj
cmlwdG9yKC0xKQotICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKGZhbHNlKQotICAgICwgbV9ub3Rp
ZnlEYXRhKDApCi0gICAgLCBtX2hlYWRlcnMoMCkKLSAgICAsIG1fcmVhc29uKE5QUkVTX0JBU0Up
Ci0gICAgLCBtX2lzVGVybWluYXRlZChmYWxzZSkKLSAgICAsIG1fbmV3U3RyZWFtU3VjY2Vzc2Z1
bChmYWxzZSkKLSAgICAsIG1fZnJhbWVMb2FkZXIoZnJhbWVMb2FkZXIpCi0gICAgLCBtX3BsdWdp
bkZ1bmNzKDApCi0gICAgLCBtX2RlbGl2ZXJEYXRhVGltZXIoKnRoaXMsICZXZWJOZXRzY2FwZVBs
dWdpblN0cmVhbTo6ZGVsaXZlckRhdGEpCi17Ci0gICAgbWVtc2V0KCZtX3N0cmVhbSwgMCwgc2l6
ZW9mKE5QU3RyZWFtKSk7Ci19Ci0KLVdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpXZWJOZXRzY2Fw
ZVBsdWdpblN0cmVhbShOU1VSTFJlcXVlc3QgKnJlcXVlc3QsIE5QUCBwbHVnaW4sIGJvb2wgc2Vu
ZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSkKLSAgICA6IG1fcmVxdWVzdFVSTChbcmVx
dWVzdCBVUkxdKQotICAgICwgbV9wbHVnaW4oMCkKLSAgICAsIG1fdHJhbnNmZXJNb2RlKDApCi0g
ICAgLCBtX29mZnNldCgwKQotICAgICwgbV9maWxlRGVzY3JpcHRvcigtMSkKLSAgICAsIG1fc2Vu
ZE5vdGlmaWNhdGlvbihzZW5kTm90aWZpY2F0aW9uKQotICAgICwgbV9ub3RpZnlEYXRhKG5vdGlm
eURhdGEpCi0gICAgLCBtX2hlYWRlcnMoMCkKLSAgICAsIG1fcmVhc29uKE5QUkVTX0JBU0UpCi0g
ICAgLCBtX2lzVGVybWluYXRlZChmYWxzZSkKLSAgICAsIG1fbmV3U3RyZWFtU3VjY2Vzc2Z1bChm
YWxzZSkKLSAgICAsIG1fZnJhbWVMb2FkZXIoMCkKLSAgICAsIG1fcmVxdWVzdChhZG9wdE5TKFty
ZXF1ZXN0IG11dGFibGVDb3B5XSkpCi0gICAgLCBtX3BsdWdpbkZ1bmNzKDApCi0gICAgLCBtX2Rl
bGl2ZXJEYXRhVGltZXIoKnRoaXMsICZXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6ZGVsaXZlckRh
dGEpCi17Ci0gICAgbWVtc2V0KCZtX3N0cmVhbSwgMCwgc2l6ZW9mKE5QU3RyZWFtKSk7Ci0KLSAg
ICBXZWJOZXRzY2FwZVBsdWdpblZpZXcgKnZpZXcgPSAoV2ViTmV0c2NhcGVQbHVnaW5WaWV3ICop
cGx1Z2luLT5uZGF0YTsKLSAgICAKLSAgICAvLyBUaGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4g
ZG9uZSBieSB0aGUgcGx1Zy1pbiB2aWV3LgotICAgIEFTU0VSVChjb3JlKFt2aWV3IHdlYkZyYW1l
XSktPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkuY2FuRGlzcGxheShbcmVxdWVzdCBVUkxd
KSk7Ci0gICAgCi0gICAgQVNTRVJUKFtyZXF1ZXN0IFVSTF0pOwotICAgIEFTU0VSVChwbHVnaW4p
OwotICAgIAotICAgIHNldFBsdWdpbihwbHVnaW4pOwotICAgIAotICAgIHN0cmVhbXMoKS5hZGQo
Jm1fc3RyZWFtLCBwbHVnaW4pOwotICAgIAotICAgIFN0cmluZyByZWZlcnJlciA9IFNlY3VyaXR5
UG9saWN5OjpnZW5lcmF0ZVJlZmVycmVySGVhZGVyKGNvcmUoW3ZpZXcgd2ViRnJhbWVdKS0+ZG9j
dW1lbnQoKS0+cmVmZXJyZXJQb2xpY3koKSwgW3JlcXVlc3QgVVJMXSwgY29yZShbdmlldyB3ZWJG
cmFtZV0pLT5sb2FkZXIoKS5vdXRnb2luZ1JlZmVycmVyKCkpOwotICAgIGlmIChyZWZlcnJlci5p
c0VtcHR5KCkpCi0gICAgICAgIFttX3JlcXVlc3QuZ2V0KCkgX3dlYl9zZXRIVFRQUmVmZXJyZXI6
bmlsXTsKLSAgICBlbHNlCi0gICAgICAgIFttX3JlcXVlc3QuZ2V0KCkgX3dlYl9zZXRIVFRQUmVm
ZXJyZXI6cmVmZXJyZXJdOwotfQotCi1XZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6fldlYk5ldHNj
YXBlUGx1Z2luU3RyZWFtKCkKLXsKLSAgICBBU1NFUlQoIW1fcGx1Z2luKTsKLSAgICBBU1NFUlQo
bV9pc1Rlcm1pbmF0ZWQpOwotICAgIEFTU0VSVCghbV9zdHJlYW0ubmRhdGEpOwotICAgIAotICAg
IC8vIFRoZSBzdHJlYW0gZmlsZSBzaG91bGQgaGF2ZSBiZWVuIGRlbGV0ZWQsIGFuZCB0aGUgcGF0
aCBmcmVlZCwgaW4gLV9kZXN0cm95U3RyZWFtCi0gICAgQVNTRVJUKCFtX3BhdGgpOwotICAgIEFT
U0VSVChtX2ZpbGVEZXNjcmlwdG9yID09IC0xKTsKLSAgICAKLSAgICBmcmVlKCh2b2lkICopbV9z
dHJlYW0udXJsKTsKLSAgICBmcmVlKG1faGVhZGVycyk7Ci0gICAgCi0gICAgc3RyZWFtcygpLnJl
bW92ZSgmbV9zdHJlYW0pOwotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpzZXRQ
bHVnaW4oTlBQIHBsdWdpbikKLXsKLSAgICBpZiAocGx1Z2luKSB7Ci0gICAgICAgIG1fcGx1Z2lu
ID0gcGx1Z2luOwotICAgICAgICBtX3BsdWdpblZpZXcgPSBzdGF0aWNfY2FzdDxXZWJOZXRzY2Fw
ZVBsdWdpblZpZXcgKj4obV9wbHVnaW4tPm5kYXRhKTsKLQotICAgICAgICBXZWJOZXRzY2FwZVBs
dWdpblBhY2thZ2UgKnBsdWdpblBhY2thZ2UgPSBbbV9wbHVnaW5WaWV3LmdldCgpIHBsdWdpblBh
Y2thZ2VdOwotICAgICAgICAKLSAgICAgICAgbV9wbHVnaW5GdW5jcyA9IFtwbHVnaW5QYWNrYWdl
IHBsdWdpbkZ1bmNzXTsKLSAgICB9IGVsc2UgewotICAgICAgICBXZWJOZXRzY2FwZVBsdWdpblZp
ZXcgKnZpZXcgPSBtX3BsdWdpblZpZXcuZ2V0KCk7Ci0gICAgICAgIG1fcGx1Z2luID0gMDsKLSAg
ICAgICAgbV9wbHVnaW5GdW5jcyA9IDA7Ci0gICAgICAgIAotICAgICAgICBbdmlldyBkaXNjb25u
ZWN0U3RyZWFtOnRoaXNdOwotICAgICAgICBtX3BsdWdpblZpZXcgPSAwOwotICAgIH0gICAgICAg
IAotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpzdGFydFN0cmVhbShOU1VSTCAq
dXJsLCBsb25nIGxvbmcgZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBOU0RhdGUgKmxhc3RNb2RpZmll
ZERhdGUsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE5TRGF0YSAqaGVhZGVycykKLXsKLSAgICBB
U1NFUlQoIW1faXNUZXJtaW5hdGVkKTsKLSAgICAKLSAgICBtX3Jlc3BvbnNlVVJMID0gdXJsOwot
ICAgIG1fbWltZVR5cGUgPSBtaW1lVHlwZS51dGY4KCk7Ci0gICAgCi0gICAgZnJlZSgodm9pZCAq
KW1fc3RyZWFtLnVybCk7Ci0gICAgbV9zdHJlYW0udXJsID0gc3RyZHVwKFttX3Jlc3BvbnNlVVJM
LmdldCgpIF93ZWJfVVJMQ1N0cmluZ10pOwotCi0gICAgbV9zdHJlYW0ubmRhdGEgPSB0aGlzOwot
ICAgIG1fc3RyZWFtLmVuZCA9IGV4cGVjdGVkQ29udGVudExlbmd0aCA+IDAgPyAodWludDMyX3Qp
ZXhwZWN0ZWRDb250ZW50TGVuZ3RoIDogMDsKLSAgICBtX3N0cmVhbS5sYXN0bW9kaWZpZWQgPSAo
dWludDMyX3QpW2xhc3RNb2RpZmllZERhdGUgdGltZUludGVydmFsU2luY2UxOTcwXTsKLSAgICBt
X3N0cmVhbS5ub3RpZnlEYXRhID0gbV9ub3RpZnlEYXRhOwotCi0gICAgaWYgKGhlYWRlcnMpIHsK
LSAgICAgICAgdW5zaWduZWQgbGVuID0gW2hlYWRlcnMgbGVuZ3RoXTsKLSAgICAgICAgbV9oZWFk
ZXJzID0gKGNoYXIqKSBtYWxsb2MobGVuICsgMSk7Ci0gICAgICAgIFtoZWFkZXJzIGdldEJ5dGVz
Om1faGVhZGVycyBsZW5ndGg6bGVuXTsKLSAgICAgICAgbV9oZWFkZXJzW2xlbl0gPSAwOwotICAg
ICAgICBtX3N0cmVhbS5oZWFkZXJzID0gbV9oZWFkZXJzOwotICAgIH0KLSAgICAKLSAgICBtX3Ry
YW5zZmVyTW9kZSA9IE5QX05PUk1BTDsKLSAgICBtX29mZnNldCA9IDA7Ci0gICAgbV9yZWFzb24g
PSBXRUJfUkVBU09OX05PTkU7Ci0gICAgLy8gRklYTUU6IElmIFdlYk5ldHNjYXBlUGx1Z2luU3Ry
ZWFtIGNhbGxlZCBvdXIgaW5pdGlhbGl6ZXIgd2Ugd291bGRuJ3QgaGF2ZSB0byBkbyB0aGlzIGhl
cmUuCi0gICAgbV9maWxlRGVzY3JpcHRvciA9IC0xOwotCi0gICAgLy8gRklYTUU6IE5lZWQgYSB3
YXkgdG8gY2hlY2sgaWYgc3RyZWFtIGlzIHNlZWthYmxlCi0KLSAgICBOUEVycm9yIG5wRXJyOwot
ICAgIHsKLSAgICAgICAgUGx1Z2luU3RvcERlZmVycmVyIGRlZmVycmVyKG1fcGx1Z2luVmlldy5n
ZXQoKSk7Ci0gICAgICAgIG5wRXJyID0gbV9wbHVnaW5GdW5jcy0+bmV3c3RyZWFtKG1fcGx1Z2lu
LCBtX21pbWVUeXBlLm11dGFibGVEYXRhKCksICZtX3N0cmVhbSwgTk8sICZtX3RyYW5zZmVyTW9k
ZSk7Ci0gICAgfQotCi0gICAgTE9HKFBsdWdpbnMsICJOUFBfTmV3U3RyZWFtIFVSTD0lQCBNSU1F
PSVzIGVycm9yPSVkIiwgbV9yZXNwb25zZVVSTC5nZXQoKSwgbV9taW1lVHlwZS5kYXRhKCksIG5w
RXJyKTsKLQotICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikgewotICAgICAgICBMT0df
RVJST1IoIk5QUF9OZXdTdHJlYW0gZmFpbGVkIHdpdGggZXJyb3I6ICVkIHJlc3BvbnNlVVJMOiAl
QCIsIG5wRXJyLCBtX3Jlc3BvbnNlVVJMLmdldCgpKTsKLSAgICAgICAgLy8gQ2FsbGluZyBjYW5j
ZWxMb2FkV2l0aEVycm9yOiBjYW5jZWxzIHRoZSBsb2FkLCBidXQgZG9lc24ndCBjYWxsIE5QUF9E
ZXN0cm95U3RyZWFtLgotICAgICAgICBjYW5jZWxMb2FkV2l0aEVycm9yKHBsdWdpbkNhbmNlbGxl
ZENvbm5lY3Rpb25FcnJvcigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fbmV3
U3RyZWFtU3VjY2Vzc2Z1bCA9IHRydWU7Ci0KLSAgICBzd2l0Y2ggKG1fdHJhbnNmZXJNb2RlKSB7
Ci0gICAgICAgIGNhc2UgTlBfTk9STUFMOgotICAgICAgICAgICAgTE9HKFBsdWdpbnMsICJTdHJl
YW0gdHlwZTogTlBfTk9STUFMIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBO
UF9BU0ZJTEVPTkxZOgotICAgICAgICAgICAgTE9HKFBsdWdpbnMsICJTdHJlYW0gdHlwZTogTlBf
QVNGSUxFT05MWSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTlBfQVNGSUxF
OgotICAgICAgICAgICAgTE9HKFBsdWdpbnMsICJTdHJlYW0gdHlwZTogTlBfQVNGSUxFIik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOUF9TRUVLOgotICAgICAgICAgICAgTE9H
X0VSUk9SKCJTdHJlYW0gdHlwZTogTlBfU0VFSyBub3QgeWV0IHN1cHBvcnRlZCIpOwotICAgICAg
ICAgICAgY2FuY2VsTG9hZEFuZERlc3Ryb3lTdHJlYW1XaXRoRXJyb3IocGx1Z2luQ2FuY2VsbGVk
Q29ubmVjdGlvbkVycm9yKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBMT0dfRVJST1IoInVua25vd24gc3RyZWFtIHR5cGUiKTsKLSAgICB9Ci19
Ci0KLXZvaWQgV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OnN0YXJ0KCkKLXsKLSAgICBBU1NFUlQo
bV9yZXF1ZXN0KTsKLSAgICBBU1NFUlQoIW1fZnJhbWVMb2FkZXIpOwotICAgIEFTU0VSVCghbV9s
b2FkZXIpOwotCi0gICAgd2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkuc2NoZWR1bGVQbHVnaW5T
dHJlYW1Mb2FkKCpjb3JlKFttX3BsdWdpblZpZXcuZ2V0KCkgd2ViRnJhbWVdKSwgKnRoaXMsIG1f
cmVxdWVzdC5nZXQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9XSAoUmVm
UHRyPFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiYmIGxvYWRlcikgewotICAg
ICAgICBtX2xvYWRlciA9IFdURk1vdmUobG9hZGVyKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJO
ZXRzY2FwZVBsdWdpblN0cmVhbTo6c3RvcCgpCi17Ci0gICAgQVNTRVJUKCFtX2ZyYW1lTG9hZGVy
KTsKLSAgICAKLSAgICBpZiAoIW1fbG9hZGVyLT5pc0RvbmUoKSkKLSAgICAgICAgY2FuY2VsTG9h
ZEFuZERlc3Ryb3lTdHJlYW1XaXRoRXJyb3IobV9sb2FkZXItPmNhbmNlbGxlZEVycm9yKCkpOwot
fQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjp3aWxsU2VuZFJlcXVlc3QoTmV0c2Nh
cGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmJik+JiYgY2FsbGJhY2spCi17Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3Rp
ZnkgdGhlIHBsdWctaW4gd2l0aCBOUFBfVVJMUmVkaXJlY3ROb3RpZnkgaGVyZS4KLSAgICBjYWxs
YmFjayhXVEZNb3ZlKHJlcXVlc3QpKTsKLX0KLQotdm9pZCBXZWJOZXRzY2FwZVBsdWdpblN0cmVh
bTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgTlNVUkxSZXNwb25zZSAqciA9IHJl
c3BvbnNlLm5zVVJMUmVzcG9uc2UoKTsKLSAgICAKLSAgICBOU011dGFibGVEYXRhICp0aGVIZWFk
ZXJzID0gbmlsOwotICAgIGxvbmcgbG9uZyBleHBlY3RlZENvbnRlbnRMZW5ndGggPSBbciBleHBl
Y3RlZENvbnRlbnRMZW5ndGhdOwotICAgIAotICAgIGlmIChbciBpc0tpbmRPZkNsYXNzOltOU0hU
VFBVUkxSZXNwb25zZSBjbGFzc11dKSB7Ci0gICAgICAgIE5TSFRUUFVSTFJlc3BvbnNlICpodHRw
UmVzcG9uc2UgPSAoTlNIVFRQVVJMUmVzcG9uc2UgKilyOwotICAgICAgICB0aGVIZWFkZXJzID0g
W05TTXV0YWJsZURhdGEgZGF0YVdpdGhDYXBhY2l0eToxMDI0XTsKLSAgICAgICAgCi0gICAgICAg
IC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBuaWNlIHRvIGJlIGFibGUgdG8gZ2V0IHRoZSByYXcgSFRU
UCBoZWFkZXIgYmxvY2suCi0gICAgICAgIC8vIFRoaXMgaW5jbHVkZXMgdGhlIEhUVFAgdmVyc2lv
biwgdGhlIHJlYWwgc3RhdHVzIHRleHQsCi0gICAgICAgIC8vIGFsbCBoZWFkZXJzIGluIHRoZWly
IG9yaWdpbmFsIG9yZGVyIGFuZCBpbmNsdWRpbmcgZHVwbGljYXRlcywKLSAgICAgICAgLy8gYW5k
IGFsbCBvcmlnaW5hbCBieXRlcyB2ZXJiYXRpbSwgcmF0aGVyIHRoYW4gc2VudCB0aHJvdWdoIFVu
aWNvZGUgdHJhbnNsYXRpb24uCi0gICAgICAgIC8vIFVuZm9ydHVuYXRlbHkgTlNIVFRQVVJMUmVz
cG9uc2UgZG9lc24ndCBwcm92aWRlIGFjY2VzcyBhdCB0aGF0IGxvdyBhIGxldmVsLgotICAgICAg
ICAKLSAgICAgICAgW3RoZUhlYWRlcnMgYXBwZW5kQnl0ZXM6IkhUVFAgIiBsZW5ndGg6NV07Ci0g
ICAgICAgIGNoYXIgc3RhdHVzU3RyWzEwXTsKLSAgICAgICAgbG9uZyBzdGF0dXNDb2RlID0gW2h0
dHBSZXNwb25zZSBzdGF0dXNDb2RlXTsKLSAgICAgICAgc25wcmludGYoc3RhdHVzU3RyLCBzaXpl
b2Yoc3RhdHVzU3RyKSwgIiVsZCIsIHN0YXR1c0NvZGUpOwotICAgICAgICBbdGhlSGVhZGVycyBh
cHBlbmRCeXRlczpzdGF0dXNTdHIgbGVuZ3RoOnN0cmxlbihzdGF0dXNTdHIpXTsKLSAgICAgICAg
W3RoZUhlYWRlcnMgYXBwZW5kQnl0ZXM6IiBPS1xuIiBsZW5ndGg6NF07Ci0gICAgICAgIAotICAg
ICAgICAvLyBIQUNLOiBwYXNzIHRoZSBoZWFkZXJzIHRocm91Z2ggYXMgVVRGLTguCi0gICAgICAg
IC8vIFRoaXMgaXMgbm90IHRoZSBpbnRlbmRlZCBiZWhhdmlvcjsgd2UncmUgc3VwcG9zZWQgdG8g
cGFzcyBvcmlnaW5hbCBieXRlcyB2ZXJiYXRpbS4KLSAgICAgICAgLy8gQnV0IHdlIGRvbid0IGhh
dmUgdGhlIG9yaWdpbmFsIGJ5dGVzLCB3ZSBoYXZlIE5TU3RyaW5ncyBidWlsdCBieSB0aGUgVVJM
IGxvYWRpbmcgc3lzdGVtLgotICAgICAgICAvLyBJdCBob3BlZnVsbHkgc2hvdWxkbid0IG1hdHRl
ciwgc2luY2UgUkZDMjYxNi9SRkM4MjIgcmVxdWlyZSBBU0NJSS1vbmx5IGhlYWRlcnMsCi0gICAg
ICAgIC8vIGJ1dCBzdXJlbHkgc29tZW9uZSBvdXQgdGhlcmUgaXMgdXNpbmcgbm9uLUFTQ0lJIGNo
YXJhY3RlcnMsIGFuZCBob3BlZnVsbHkgVVRGLTggaXMgYWRlcXVhdGUgaGVyZS4KLSAgICAgICAg
Ly8gSXQgc2VlbXMgYmV0dGVyIHRoYW4gTlNBU0NJSVN0cmluZ0VuY29kaW5nLCB3aGljaCB3aWxs
IGxvc2UgaW5mb3JtYXRpb24gaWYgbm9uLUFTQ0lJIGlzIHVzZWQuCi0gICAgICAgIAotICAgICAg
ICBOU0RpY3Rpb25hcnkgKmhlYWRlckRpY3QgPSBbaHR0cFJlc3BvbnNlIGFsbEhlYWRlckZpZWxk
c107Ci0gICAgICAgIE5TQXJyYXkgKmtleXMgPSBbW2hlYWRlckRpY3QgYWxsS2V5c10gc29ydGVk
QXJyYXlVc2luZ1NlbGVjdG9yOkBzZWxlY3RvcihjYXNlSW5zZW5zaXRpdmVDb21wYXJlOildOwot
ICAgICAgICBOU0VudW1lcmF0b3IgKmkgPSBba2V5cyBvYmplY3RFbnVtZXJhdG9yXTsKLSAgICAg
ICAgTlNTdHJpbmcgKms7Ci0gICAgICAgIHdoaWxlICgoayA9IFtpIG5leHRPYmplY3RdKSAhPSBu
aWwpIHsKLSAgICAgICAgICAgIE5TU3RyaW5nICp2ID0gW2hlYWRlckRpY3Qgb2JqZWN0Rm9yS2V5
OmtdOwotICAgICAgICAgICAgW3RoZUhlYWRlcnMgYXBwZW5kRGF0YTpbayBkYXRhVXNpbmdFbmNv
ZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dOwotICAgICAgICAgICAgW3RoZUhlYWRlcnMgYXBw
ZW5kQnl0ZXM6IjogIiBsZW5ndGg6Ml07Ci0gICAgICAgICAgICBbdGhlSGVhZGVycyBhcHBlbmRE
YXRhOlt2IGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07Ci0gICAgICAg
ICAgICBbdGhlSGVhZGVycyBhcHBlbmRCeXRlczoiXG4iIGxlbmd0aDoxXTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgLy8gSWYgdGhlIGNvbnRlbnQgaXMgZW5jb2RlZCAobW9zdCBsaWtl
bHkgY29tcHJlc3NlZCksIHRoZW4gZG9uJ3Qgc2VuZCBpdHMgbGVuZ3RoIHRvIHRoZSBwbHVnaW4s
Ci0gICAgICAgIC8vIHdoaWNoIGlzIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgZGVjb2RlZCBsZW5n
dGgsIG5vdCB5ZXQga25vd24gYXQgdGhlIG1vbWVudC4KLSAgICAgICAgLy8gPHJkYXI6Ly9wcm9i
bGVtLzQ0NzA1OTk+IHRyYWNrcyBhIHJlcXVlc3QgZm9yIC1bTlNVUkxSZXNwb25zZSBleHBlY3Rl
ZENvbnRlbnRMZW5ndGhdIHRvIGluY29ycG9yYXRlIHRoaXMgbG9naWMuCi0gICAgICAgIE5TU3Ry
aW5nICpjb250ZW50RW5jb2RpbmcgPSAoTlNTdHJpbmcgKilbWyhOU0hUVFBVUkxSZXNwb25zZSAq
KXIgYWxsSGVhZGVyRmllbGRzXSBvYmplY3RGb3JLZXk6QCJDb250ZW50LUVuY29kaW5nIl07Ci0g
ICAgICAgIGlmIChjb250ZW50RW5jb2RpbmcgJiYgIVtjb250ZW50RW5jb2RpbmcgaXNFcXVhbFRv
U3RyaW5nOkAiaWRlbnRpdHkiXSkKLSAgICAgICAgICAgIGV4cGVjdGVkQ29udGVudExlbmd0aCA9
IC0xOwotICAgICAgICAKLSAgICAgICAgLy8gc3RhcnRTdHJlYW1SZXNwb25zZVVSTDouLi4gd2ls
bCBudWxsLXRlcm1pbmF0ZS4KLSAgICB9Ci0gICAgCi0gICAgc3RhcnRTdHJlYW0oW3IgVVJMXSwg
ZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBbciBfbGFzdE1vZGlmaWVkRGF0ZV0sIHJlc3BvbnNlLm1p
bWVUeXBlKCksIHRoZUhlYWRlcnMpOwotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFt
OjpzdGFydFN0cmVhbVdpdGhSZXNwb25zZShOU1VSTFJlc3BvbnNlICpyZXNwb25zZSkKLXsKLSAg
ICBkaWRSZWNlaXZlUmVzcG9uc2UoMCwgcmVzcG9uc2UpOwotfQotCi1ib29sIFdlYk5ldHNjYXBl
UGx1Z2luU3RyZWFtOjp3YW50c0FsbFN0cmVhbXMoKSBjb25zdAotewotICAgIGlmICghbV9wbHVn
aW5GdW5jcy0+Z2V0dmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICB2b2lk
ICp2YWx1ZSA9IDA7Ci0gICAgTlBFcnJvciBlcnJvcjsKLSAgICB7Ci0gICAgICAgIFBsdWdpblN0
b3BEZWZlcnJlciBkZWZlcnJlcihtX3BsdWdpblZpZXcuZ2V0KCkpOwotICAgICAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKLSAgICAgICAgZXJy
b3IgPSBtX3BsdWdpbkZ1bmNzLT5nZXR2YWx1ZShtX3BsdWdpbiwgTlBQVnBsdWdpbldhbnRzQWxs
TmV0d29ya1N0cmVhbXMsICZ2YWx1ZSk7Ci0gICAgfQotICAgIGlmIChlcnJvciAhPSBOUEVSUl9O
T19FUlJPUikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiB2YWx1ZTsK
LX0KLQotdm9pZCBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6ZGVzdHJveVN0cmVhbSgpCi17Ci0g
ICAgaWYgKG1faXNUZXJtaW5hdGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWY8V2ViTmV0
c2NhcGVQbHVnaW5TdHJlYW0+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgQVNTRVJUKG1fcmVhc29u
ICE9IFdFQl9SRUFTT05fTk9ORSk7Ci0gICAgQVNTRVJUKFttX2RlbGl2ZXJ5RGF0YS5nZXQoKSBs
ZW5ndGhdID09IDApOwotICAgIAotICAgIG1fZGVsaXZlckRhdGFUaW1lci5zdG9wKCk7Ci0KLSAg
ICBpZiAobV9zdHJlYW0ubmRhdGEpIHsKLSAgICAgICAgaWYgKG1fcmVhc29uID09IE5QUkVTX0RP
TkUgJiYgKG1fdHJhbnNmZXJNb2RlID09IE5QX0FTRklMRSB8fCBtX3RyYW5zZmVyTW9kZSA9PSBO
UF9BU0ZJTEVPTkxZKSkgewotICAgICAgICAgICAgQVNTRVJUKG1fZmlsZURlc2NyaXB0b3IgPT0g
LTEpOwotICAgICAgICAgICAgQVNTRVJUKG1fcGF0aCk7Ci0KLSAgICAgICAgICAgIFBsdWdpblN0
b3BEZWZlcnJlciBkZWZlcnJlcihtX3BsdWdpblZpZXcuZ2V0KCkpOwotICAgICAgICAgICAgbV9w
bHVnaW5GdW5jcy0+YXNmaWxlKG1fcGx1Z2luLCAmbV9zdHJlYW0sIFttX3BhdGguZ2V0KCkgZmls
ZVN5c3RlbVJlcHJlc2VudGF0aW9uXSk7Ci0gICAgICAgICAgICBMT0coUGx1Z2lucywgIk5QUF9T
dHJlYW1Bc0ZpbGUgcmVzcG9uc2VVUkw9JUAgcGF0aD0lcyIsIG1fcmVzcG9uc2VVUkwuZ2V0KCks
IG1fcGF0aC5nZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9wYXRoKSB7Ci0gICAg
ICAgICAgICAvLyBEZWxldGUgdGhlIGZpbGUgYWZ0ZXIgY2FsbGluZyBOUFBfU3RyZWFtQXNGaWxl
KCksIGluc3RlYWQgb2YgaW4gLWRlYWxsb2MvLWZpbmFsaXplLiAgSXQgc2hvdWxkIGJlIE9LCi0g
ICAgICAgICAgICAvLyB0byBkZWxldGUgdGhlIGZpbGUgaGVyZSAtLSBOUFBfU3RyZWFtQXNGaWxl
KCkgaXMgYWx3YXlzIGNhbGxlZCBpbW1lZGlhdGVseSBiZWZvcmUgTlBQX0Rlc3Ryb3lTdHJlYW0o
KQotICAgICAgICAgICAgLy8gKHRoZSBzdHJlYW0gZGVzdHJ1Y3Rpb24gZnVuY3Rpb24pLCBzbyB0
aGVyZSBjYW4gYmUgbm8gZXhwZWN0YXRpb24gdGhhdCBhIHBsdWdpbiB3aWxsIHJlYWQgdGhlIHN0
cmVhbQotICAgICAgICAgICAgLy8gZmlsZSBhc3luY2hyb25vdXNseSBhZnRlciBOUFBfU3RyZWFt
QXNGaWxlKCkgaXMgY2FsbGVkLgotICAgICAgICAgICAgdW5saW5rKFttX3BhdGguZ2V0KCkgZmls
ZVN5c3RlbVJlcHJlc2VudGF0aW9uXSk7Ci0gICAgICAgICAgICBtX3BhdGggPSAwOwotCi0gICAg
ICAgICAgICBpZiAobV9pc1Rlcm1pbmF0ZWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKG1fZmlsZURlc2NyaXB0b3IgIT0gLTEpIHsKLSAgICAgICAg
ICAgIC8vIFRoZSBmaWxlIG1heSBzdGlsbCBiZSBvcGVuIGlmIHdlIGFyZSBkZXN0cm95aW5nIHRo
ZSBzdHJlYW0gYmVmb3JlIGl0IGNvbXBsZXRlZCBsb2FkaW5nLgotICAgICAgICAgICAgY2xvc2Uo
bV9maWxlRGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBtX2ZpbGVEZXNjcmlwdG9yID0gLTE7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAobV9uZXdTdHJlYW1TdWNjZXNzZnVsKSB7Ci0gICAgICAg
ICAgICBQbHVnaW5TdG9wRGVmZXJyZXIgZGVmZXJyZXIobV9wbHVnaW5WaWV3LmdldCgpKTsKLSNp
ZiAhTE9HX0RJU0FCTEVECi0gICAgICAgICAgICBOUEVycm9yIG5wRXJyID0gCi0jZW5kaWYKLSAg
ICAgICAgICAgIG1fcGx1Z2luRnVuY3MtPmRlc3Ryb3lzdHJlYW0obV9wbHVnaW4sICZtX3N0cmVh
bSwgbV9yZWFzb24pOwotICAgICAgICAgICAgTE9HKFBsdWdpbnMsICJOUFBfRGVzdHJveVN0cmVh
bSByZXNwb25zZVVSTD0lQCBlcnJvcj0lZCIsIG1fcmVzcG9uc2VVUkwuZ2V0KCksIG5wRXJyKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGZyZWUobV9oZWFkZXJzKTsKLSAgICAgICAgbV9oZWFkZXJz
ID0gTlVMTDsKLSAgICAgICAgbV9zdHJlYW0uaGVhZGVycyA9IE5VTEw7Ci0KLSAgICAgICAgbV9z
dHJlYW0ubmRhdGEgPSAwOwotCi0gICAgICAgIGlmIChtX2lzVGVybWluYXRlZCkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9zZW5kTm90aWZpY2F0aW9uKSB7Ci0gICAg
ICAgIC8vIE5QUF9VUkxOb3RpZnkgZXhwZWN0cyB0aGUgcmVxdWVzdCBVUkwsIG5vdCB0aGUgcmVz
cG9uc2UgVVJMLgotICAgICAgICBQbHVnaW5TdG9wRGVmZXJyZXIgZGVmZXJyZXIobV9wbHVnaW5W
aWV3LmdldCgpKTsKLSAgICAgICAgbV9wbHVnaW5GdW5jcy0+dXJsbm90aWZ5KG1fcGx1Z2luLCBt
X3JlcXVlc3RVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbV9yZWFzb24sIG1fbm90aWZ5RGF0
YSk7Ci0gICAgICAgIExPRyhQbHVnaW5zLCAiTlBQX1VSTE5vdGlmeSByZXF1ZXN0VVJMPSVAIHJl
YXNvbj0lZCIsIChOU1VSTCAqKW1fcmVxdWVzdFVSTCwgbV9yZWFzb24pOwotICAgIH0KLQotICAg
IG1faXNUZXJtaW5hdGVkID0gdHJ1ZTsKLQotICAgIHNldFBsdWdpbigwKTsKLX0KLQotdm9pZCBX
ZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6ZGVzdHJveVN0cmVhbVdpdGhSZWFzb24oTlBSZWFzb24g
cmVhc29uKQotewotICAgIG1fcmVhc29uID0gcmVhc29uOwotICAgIGlmIChtX3JlYXNvbiAhPSBO
UFJFU19ET05FKSB7Ci0gICAgICAgIC8vIFN0b3AgYW55IHBlbmRpbmcgZGF0YSBmcm9tIGJlaW5n
IHN0cmVhbWVkLgotICAgICAgICBbbV9kZWxpdmVyeURhdGEuZ2V0KCkgc2V0TGVuZ3RoOjBdOwot
ICAgIH0gZWxzZSBpZiAoW21fZGVsaXZlcnlEYXRhLmdldCgpIGxlbmd0aF0gPiAwKSB7Ci0gICAg
ICAgIC8vIFRoZXJlIGlzIG1vcmUgZGF0YSB0byBiZSBzdHJlYW1lZCwgZG9uJ3QgZGVzdHJveSB0
aGUgc3RyZWFtIG5vdy4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZjxXZWJOZXRz
Y2FwZVBsdWdpblN0cmVhbT4gcHJvdGVjdCgqdGhpcyk7Ci0gICAgZGVzdHJveVN0cmVhbSgpOwot
ICAgIEFTU0VSVCghbV9zdHJlYW0ubmRhdGEpOwotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2lu
U3RyZWFtOjpjYW5jZWxMb2FkV2l0aEVycm9yKE5TRXJyb3IgKmVycm9yKQotewotICAgIGlmICht
X2ZyYW1lTG9hZGVyKSB7Ci0gICAgICAgIEFTU0VSVCghbV9sb2FkZXIpOwotICAgICAgICBhdXRv
IGRvY3VtZW50TG9hZGVyID0gbV9mcmFtZUxvYWRlci0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKTsK
LSAgICAgICAgaWYgKGRvY3VtZW50TG9hZGVyICYmIGRvY3VtZW50TG9hZGVyLT5pc0xvYWRpbmdN
YWluUmVzb3VyY2UoKSkKLSAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5jYW5jZWxNYWluUmVz
b3VyY2VMb2FkKGVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW1fbG9h
ZGVyLT5pc0RvbmUoKSkKLSAgICAgICAgbV9sb2FkZXItPmNhbmNlbChlcnJvcik7Ci19Ci0KLXZv
aWQgV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OmRlc3Ryb3lTdHJlYW1XaXRoRXJyb3IoTlNFcnJv
ciAqZXJyb3IpCi17Ci0gICAgZGVzdHJveVN0cmVhbVdpdGhSZWFzb24ocmVhc29uRm9yRXJyb3Io
ZXJyb3IpKTsKLX0KLQotdm9pZCBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6ZGlkRmFpbChXZWJD
b3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
RXJyb3ImIGVycm9yKQotewotICAgIGRlc3Ryb3lTdHJlYW1XaXRoRXJyb3IoZXJyb3IpOwotfQot
Ci12b2lkIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpjYW5jZWxMb2FkQW5kRGVzdHJveVN0cmVh
bVdpdGhFcnJvcihOU0Vycm9yICplcnJvcikKLXsKLSAgICBSZWY8V2ViTmV0c2NhcGVQbHVnaW5T
dHJlYW0+IHByb3RlY3QoKnRoaXMpOwotICAgIGNhbmNlbExvYWRXaXRoRXJyb3IoZXJyb3IpOwot
ICAgIGRlc3Ryb3lTdHJlYW1XaXRoRXJyb3IoZXJyb3IpOwotICAgIHNldFBsdWdpbigwKTsKLX0g
ICAgCi0KLXZvaWQgV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OmRlbGl2ZXJEYXRhKCkKLXsKLSAg
ICBpZiAoIW1fc3RyZWFtLm5kYXRhIHx8IFttX2RlbGl2ZXJ5RGF0YS5nZXQoKSBsZW5ndGhdID09
IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZjxXZWJOZXRzY2FwZVBsdWdpblN0cmVhbT4g
cHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBpbnQzMl90IHRvdGFsQnl0ZXMgPSBbbV9kZWxpdmVyeURh
dGEuZ2V0KCkgbGVuZ3RoXTsKLSAgICBpbnQzMl90IHRvdGFsQnl0ZXNEZWxpdmVyZWQgPSAwOwot
Ci0gICAgd2hpbGUgKHRvdGFsQnl0ZXNEZWxpdmVyZWQgPCB0b3RhbEJ5dGVzKSB7Ci0gICAgICAg
IFBsdWdpblN0b3BEZWZlcnJlciBkZWZlcnJlcihtX3BsdWdpblZpZXcuZ2V0KCkpOwotICAgICAg
ICBpbnQzMl90IGRlbGl2ZXJ5Qnl0ZXMgPSBtX3BsdWdpbkZ1bmNzLT53cml0ZXJlYWR5KG1fcGx1
Z2luLCAmbV9zdHJlYW0pOwotICAgICAgICBMT0coUGx1Z2lucywgIk5QUF9Xcml0ZVJlYWR5IHJl
c3BvbnNlVVJMPSVAIGJ5dGVzPSVkIiwgbV9yZXNwb25zZVVSTC5nZXQoKSwgZGVsaXZlcnlCeXRl
cyk7Ci0KLSAgICAgICAgaWYgKG1faXNUZXJtaW5hdGVkKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIGlmIChkZWxpdmVyeUJ5dGVzIDw9IDApIHsKLSAgICAgICAgICAgIC8vIFBsdWct
aW4gY2FuJ3QgcmVjZWl2ZSBhbnltb3JlIGRhdGEgcmlnaHQgbm93LiBTZW5kIGl0IGxhdGVyLgot
ICAgICAgICAgICAgaWYgKCFtX2RlbGl2ZXJEYXRhVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAg
ICAgICAgICBtX2RlbGl2ZXJEYXRhVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBz
dGQ6Om1pbihkZWxpdmVyeUJ5dGVzLCB0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZCk7
Ci0gICAgICAgICAgICBOU0RhdGEgKnN1YmRhdGEgPSBbbV9kZWxpdmVyeURhdGEuZ2V0KCkgc3Vi
ZGF0YVdpdGhSYW5nZTpOU01ha2VSYW5nZSh0b3RhbEJ5dGVzRGVsaXZlcmVkLCBkZWxpdmVyeUJ5
dGVzKV07Ci0gICAgICAgICAgICBQbHVnaW5TdG9wRGVmZXJyZXIgZGVmZXJyZXIobV9wbHVnaW5W
aWV3LmdldCgpKTsKLSAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBtX3BsdWdpbkZ1bmNzLT53
cml0ZShtX3BsdWdpbiwgJm1fc3RyZWFtLCBtX29mZnNldCwgW3N1YmRhdGEgbGVuZ3RoXSwgY29u
c3RfY2FzdDx2b2lkKj4oW3N1YmRhdGEgYnl0ZXNdKSk7Ci0gICAgICAgICAgICBpZiAoZGVsaXZl
cnlCeXRlcyA8IDApIHsKLSAgICAgICAgICAgICAgICAvLyBOZXRzY2FwZSBkb2N1bWVudGF0aW9u
IHNheXMgdGhhdCBhIG5lZ2F0aXZlIHJlc3VsdCBmcm9tIE5QUF9Xcml0ZSBtZWFucyBjYW5jZWwg
dGhlIGxvYWQuCi0gICAgICAgICAgICAgICAgY2FuY2VsTG9hZEFuZERlc3Ryb3lTdHJlYW1XaXRo
RXJyb3IocGx1Z2luQ2FuY2VsbGVkQ29ubmVjdGlvbkVycm9yKCkpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBzdGQ6
Om1pbjxpbnQzMl90PihkZWxpdmVyeUJ5dGVzLCBbc3ViZGF0YSBsZW5ndGhdKTsKLSAgICAgICAg
ICAgIG1fb2Zmc2V0ICs9IGRlbGl2ZXJ5Qnl0ZXM7Ci0gICAgICAgICAgICB0b3RhbEJ5dGVzRGVs
aXZlcmVkICs9IGRlbGl2ZXJ5Qnl0ZXM7Ci0gICAgICAgICAgICBMT0coUGx1Z2lucywgIk5QUF9X
cml0ZSByZXNwb25zZVVSTD0lQCBieXRlcz0lZCB0b3RhbC1kZWxpdmVyZWQ9JWQvJWQiLCBtX3Jl
c3BvbnNlVVJMLmdldCgpLCBkZWxpdmVyeUJ5dGVzLCBtX29mZnNldCwgbV9zdHJlYW0uZW5kKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh0b3RhbEJ5dGVzRGVsaXZlcmVkID4gMCkgewot
ICAgICAgICBpZiAodG90YWxCeXRlc0RlbGl2ZXJlZCA8IHRvdGFsQnl0ZXMpIHsKLSAgICAgICAg
ICAgIGF1dG8gbmV3RGVsaXZlcnlEYXRhID0gYWRvcHROUyhbW05TTXV0YWJsZURhdGEgYWxsb2Nd
IGluaXRXaXRoQ2FwYWNpdHk6dG90YWxCeXRlcyAtIHRvdGFsQnl0ZXNEZWxpdmVyZWRdKTsKLSAg
ICAgICAgICAgIFtuZXdEZWxpdmVyeURhdGEgYXBwZW5kQnl0ZXM6c3RhdGljX2Nhc3Q8Y2hhcio+
KGNvbnN0X2Nhc3Q8dm9pZCo+KFttX2RlbGl2ZXJ5RGF0YS5nZXQoKSBieXRlc10pKSArIHRvdGFs
Qnl0ZXNEZWxpdmVyZWQgbGVuZ3RoOnRvdGFsQnl0ZXMgLSB0b3RhbEJ5dGVzRGVsaXZlcmVkXTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEgPSBXVEZNb3ZlKG5ld0Rl
bGl2ZXJ5RGF0YSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBbbV9kZWxpdmVyeURh
dGEuZ2V0KCkgc2V0TGVuZ3RoOjBdOwotICAgICAgICAgICAgaWYgKG1fcmVhc29uICE9IFdFQl9S
RUFTT05fTk9ORSkgCi0gICAgICAgICAgICAgICAgZGVzdHJveVN0cmVhbSgpOwotICAgICAgICB9
Ci0gICAgfQotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpkZWxpdmVyRGF0YVRv
RmlsZShOU0RhdGEgKmRhdGEpCi17Ci0gICAgaWYgKG1fZmlsZURlc2NyaXB0b3IgPT0gLTEgJiYg
IW1fcGF0aCkgewotICAgICAgICBOU1N0cmluZyAqdGVtcG9yYXJ5RmlsZU1hc2sgPSBbTlNUZW1w
b3JhcnlEaXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJXZWJLaXRQ
bHVnSW5TdHJlYW1YWFhYWFgiXTsKLSAgICAgICAgY2hhciAqdGVtcG9yYXJ5RmlsZU5hbWUgPSBz
dHJkdXAoW3RlbXBvcmFyeUZpbGVNYXNrIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbl0pOwotICAg
ICAgICBtX2ZpbGVEZXNjcmlwdG9yID0gbWtzdGVtcCh0ZW1wb3JhcnlGaWxlTmFtZSk7Ci0gICAg
ICAgIGlmIChtX2ZpbGVEZXNjcmlwdG9yID09IC0xKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1Io
IkNhbid0IGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlLiIpOwotICAgICAgICAgICAgLy8gVGhpcyBp
cyBub3QgYSBuZXR3b3JrIGVycm9yLCBidXQgdGhlIG9ubHkgZXJyb3IgY29kZXMgYXJlICJuZXR3
b3JrIGVycm9yIiBhbmQgInVzZXIgYnJlYWsiLgotICAgICAgICAgICAgZGVzdHJveVN0cmVhbVdp
dGhSZWFzb24oTlBSRVNfTkVUV09SS19FUlIpOwotICAgICAgICAgICAgZnJlZSh0ZW1wb3JhcnlG
aWxlTmFtZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBtX3Bh
dGggPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6dGVtcG9yYXJ5RmlsZU5hbWVdOwot
ICAgICAgICBmcmVlKHRlbXBvcmFyeUZpbGVOYW1lKTsKLSAgICB9Ci0KLSAgICBpbnQgZGF0YUxl
bmd0aCA9IFtkYXRhIGxlbmd0aF07Ci0gICAgaWYgKCFkYXRhTGVuZ3RoKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpbnQgYnl0ZUNvdW50ID0gd3JpdGUobV9maWxlRGVzY3JpcHRvciwgW2RhdGEg
Ynl0ZXNdLCBkYXRhTGVuZ3RoKTsKLSAgICBpZiAoYnl0ZUNvdW50ICE9IGRhdGFMZW5ndGgpIHsK
LSAgICAgICAgLy8gVGhpcyBoYXBwZW5zIG9ubHkgcmFyZWx5LCB3aGVuIHdlIGFyZSBvdXQgb2Yg
ZGlzayBzcGFjZSBvciBoYXZlIGEgZGlzayBJL08gZXJyb3IuCi0gICAgICAgIExPR19FUlJPUigi
ZXJyb3Igd3JpdGluZyB0byB0ZW1wb3JhcnkgZmlsZSwgZXJybm8gJWQiLCBlcnJubyk7Ci0gICAg
ICAgIGNsb3NlKG1fZmlsZURlc2NyaXB0b3IpOwotICAgICAgICBtX2ZpbGVEZXNjcmlwdG9yID0g
LTE7Ci0KLSAgICAgICAgLy8gVGhpcyBpcyBub3QgYSBuZXR3b3JrIGVycm9yLCBidXQgdGhlIG9u
bHkgZXJyb3IgY29kZXMgYXJlICJuZXR3b3JrIGVycm9yIiBhbmQgInVzZXIgYnJlYWsiLgotICAg
ICAgICBkZXN0cm95U3RyZWFtV2l0aFJlYXNvbihOUFJFU19ORVRXT1JLX0VSUik7Ci0gICAgICAg
IG1fcGF0aCA9IDA7Ci0gICAgfQotfQotCi12b2lkIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpk
aWRGaW5pc2hMb2FkaW5nKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKikKLXsKLSAgICBpZiAo
IW1fc3RyZWFtLm5kYXRhKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKG1fdHJhbnNm
ZXJNb2RlID09IE5QX0FTRklMRSB8fCBtX3RyYW5zZmVyTW9kZSA9PSBOUF9BU0ZJTEVPTkxZKSB7
Ci0gICAgICAgIC8vIEZha2UgdGhlIGRlbGl2ZXJ5IG9mIGFuIGVtcHR5IGRhdGEgdG8gZW5zdXJl
IHRoYXQgdGhlIGZpbGUgaGFzIGJlZW4gY3JlYXRlZAotICAgICAgICBkZWxpdmVyRGF0YVRvRmls
ZShbTlNEYXRhIGRhdGFdKTsKLSAgICAgICAgaWYgKG1fZmlsZURlc2NyaXB0b3IgIT0gLTEpCi0g
ICAgICAgICAgICBjbG9zZShtX2ZpbGVEZXNjcmlwdG9yKTsKLSAgICAgICAgbV9maWxlRGVzY3Jp
cHRvciA9IC0xOwotICAgIH0KLSAgICAKLSAgICBkZXN0cm95U3RyZWFtV2l0aFJlYXNvbihOUFJF
U19ET05FKTsKLX0KLQotdm9pZCBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6ZGlkUmVjZWl2ZURh
dGEoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCB1aW50OF90KiBieXRlcywgaW50
IGxlbmd0aCkKLXsKLSAgICBhdXRvIGRhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0
V2l0aEJ5dGVzTm9Db3B5Oih2b2lkKilieXRlcyBsZW5ndGg6bGVuZ3RoIGZyZWVXaGVuRG9uZTpO
T10pOwotCi0gICAgQVNTRVJUKFtkYXRhIGxlbmd0aF0gPiAwKTsKLSAgICAKLSAgICBpZiAobV90
cmFuc2Zlck1vZGUgIT0gTlBfQVNGSUxFT05MWSkgewotICAgICAgICBpZiAoIW1fZGVsaXZlcnlE
YXRhKQotICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGF0
YSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpbZGF0YSBsZW5ndGhdXSk7Ci0gICAgICAgIFttX2Rl
bGl2ZXJ5RGF0YS5nZXQoKSBhcHBlbmREYXRhOmRhdGEuZ2V0KCldOwotICAgICAgICBkZWxpdmVy
RGF0YSgpOwotICAgIH0KLSAgICBpZiAobV90cmFuc2Zlck1vZGUgPT0gTlBfQVNGSUxFIHx8IG1f
dHJhbnNmZXJNb2RlID09IE5QX0FTRklMRU9OTFkpCi0gICAgICAgIGRlbGl2ZXJEYXRhVG9GaWxl
KGRhdGEuZ2V0KCkpOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3LmggYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAzYWI5MTQyYTkzNTQxOTBmODU3NmZiOWIxNDhlZTBkOTUxNmUwNWEwLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3LmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
LSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNp
bXBvcnQgIldlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcuaCIKLSNpbXBvcnQgPFdlYktpdExlZ2Fj
eS9ucGZ1bmN0aW9ucy5oPgotI2ltcG9ydCA8V2ViS2l0TGVnYWN5L25wYXBpLmg+Ci0jaW1wb3J0
IDx3dGYvSGFzaE1hcC5oPgotI2ltcG9ydCA8d3RmL0hhc2hTZXQuaD4KLQotQGNsYXNzIFdlYk5l
dHNjYXBlUGx1Z2luUGFja2FnZTsKLQotY2xhc3MgUGx1Z2luVGltZXI7Ci1jbGFzcyBXZWJOZXRz
Y2FwZVBsdWdpblN0cmVhbTsKLWNsYXNzIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyOwot
Ci10eXBlZGVmIHVuaW9uIFBsdWdpblBvcnQgewotICAgIE5QX0NHQ29udGV4dCBjZ1BvcnQ7Ci19
IFBsdWdpblBvcnQ7Ci0KLS8vIEJlY2F1c2UgdGhlIEFkb2JlIDcueCBBY3JvYmF0IHBsdWctaW4g
aGFzIGEgaGFyZCBjb2RlZCBjaGVjayBmb3IgYSB2aWV3IG5hbWVkIAotLy8gIldlYk5ldHNjYXBl
UGx1Z2luRG9jdW1lbnRWaWV3IiwgdGhpcyBjbGFzcyBtdXN0IHJldGFpbiB0aGUgb2xkIG5hbWUg
aW4gb3JkZXIgCi0vLyBmb3IgdGhlIHBsdWctaW4gdG8gZnVuY3Rpb24gY29ycmVjdGx5LiAocmRh
cjovL3Byb2JsZW0vNDY5OTQ1NSkKLSNkZWZpbmUgV2ViTmV0c2NhcGVQbHVnaW5WaWV3IFdlYk5l
dHNjYXBlUGx1Z2luRG9jdW1lbnRWaWV3Ci0KLUBpbnRlcmZhY2UgV2ViTmV0c2NhcGVQbHVnaW5W
aWV3IDogV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldzxXZWJQbHVnaW5NYW51YWxMb2FkZXI+Ci17
Ci1AcGFja2FnZQotICAgIFJlZlB0cjxXZWJOZXRzY2FwZVBsdWdpblN0cmVhbT4gX21hbnVhbFN0
cmVhbTsKLSAgICBSZXRhaW5QdHI8Q0FMYXllcj4gX3BsdWdpbkxheWVyOwotICAgIHVuc2lnbmVk
IF9kYXRhTGVuZ3RoUmVjZWl2ZWQ7Ci0gICAgUmV0YWluUHRyPE5TRXJyb3I+IF9lcnJvcjsKLQot
ICAgIE5QT2JqZWN0KiBfZWxlbWVudE5QT2JqZWN0OwotCi0gICAgdW5zaWduZWQgYXJnc0NvdW50
OwotICAgIGNoYXIgKipjQXR0cmlidXRlczsKLSAgICBjaGFyICoqY1ZhbHVlczsKLSAgICAgICAg
Ci0gICAgTlBQIHBsdWdpbjsKLSAgICBOUFdpbmRvdyB3aW5kb3c7Ci0gICAgTlBXaW5kb3cgbGFz
dFNldFdpbmRvdzsKLSAgICBQbHVnaW5Qb3J0IG5Qb3J0OwotICAgIFBsdWdpblBvcnQgbGFzdFNl
dFBvcnQ7Ci0gICAgTlBEcmF3aW5nTW9kZWwgZHJhd2luZ01vZGVsOwotICAgIE5QRXZlbnRNb2Rl
bCBldmVudE1vZGVsOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYk5ldHNjYXBlUGx1Z2luRXZl
bnRIYW5kbGVyPiBfZXZlbnRIYW5kbGVyOwotICAgIAotICAgIEJPT0wgaW5TZXRXaW5kb3c7Ci0g
ICAgQk9PTCBzaG91bGRTdG9wU29vbjsKLQotICAgIHVpbnQzMl90IGN1cnJlbnRUaW1lcklEOwot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxIYXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8UGx1
Z2luVGltZXI+Pj4gdGltZXJzOwotCi0gICAgdW5zaWduZWQgcGx1Z2luRnVuY3Rpb25DYWxsRGVw
dGg7Ci0gICAgCi0gICAgaW50MzJfdCBzcGVjaWZpZWRIZWlnaHQ7Ci0gICAgaW50MzJfdCBzcGVj
aWZpZWRXaWR0aDsKLSAgICAgICAgICAgIAotICAgIEhhc2hTZXQ8UmVmUHRyPFdlYk5ldHNjYXBl
UGx1Z2luU3RyZWFtPj4gc3RyZWFtczsKLSAgICBSZXRhaW5QdHI8TlNNYXBUYWJsZT4gX3BlbmRp
bmdGcmFtZUxvYWRzOwotICAgIAotICAgIEJPT0wgX2lzRmxhc2g7Ci0gICAgQk9PTCBfaXNTaWx2
ZXJsaWdodDsKLX0KLQotKyAoV2ViTmV0c2NhcGVQbHVnaW5WaWV3ICopY3VycmVudFBsdWdpblZp
ZXc7Ci0KLQotLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KXIKLSAgICAgIHBsdWdpblBhY2th
Z2U6KFdlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSAqKXRoZVBsdWdpblBhY2thZ2UKLSAgICAgICAg
ICAgICAgICBVUkw6KE5TVVJMICopVVJMCi0gICAgICAgICAgICBiYXNlVVJMOihOU1VSTCAqKWJh
c2VVUkwKLSAgICAgICAgICAgTUlNRVR5cGU6KE5TU3RyaW5nICopTUlNRQotICAgICAgYXR0cmli
dXRlS2V5czooTlNBcnJheSAqKWtleXMKLSAgICBhdHRyaWJ1dGVWYWx1ZXM6KE5TQXJyYXkgKil2
YWx1ZXMKLSAgICAgICBsb2FkTWFudWFsbHk6KEJPT0wpbG9hZE1hbnVhbGx5Ci0gICAgICAgICAg
ICBlbGVtZW50OihSZWZQdHI8V2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQ+JiYpZWxlbWVudDsK
LQotCi0tIChOUFApcGx1Z2luOwotCi0tICh2b2lkKWRpc2Nvbm5lY3RTdHJlYW06KFdlYk5ldHNj
YXBlUGx1Z2luU3RyZWFtKilzdHJlYW07Ci0KLS8vIFJldHVybnMgdGhlIE5QT2JqZWN0IHRoYXQg
cmVwcmVzZW50cyB0aGUgcGx1Z2luIGludGVyZmFjZS4KLS8vIFRoZSByZXR1cm4gdmFsdWUgaXMg
ZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQuCi0tIChOUE9iamVjdCAqKWNyZWF0ZVBsdWdpblNjcmlw
dGFibGVPYmplY3Q7Ci0KLS8vIFJldHVybnMgdGhlIGZvcm0gdmFsdWUgYXNzb2NpYXRlZCB3aXRo
IHRoZSBwbHVnaW4gaW5zdGFuY2UuCi0tIChCT09MKWdldEZvcm1WYWx1ZTooTlNTdHJpbmcgKiop
dmFsdWU7Ci0KLS8vIC13aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGJlZm9y
ZSBjYWxsaW5nIGFueSBvZiB0aGUgTlBQXyogZnVuY3Rpb25zIGZvciB0aGlzIHZpZXcncyBwbHVn
aW4uCi0vLyBUaGlzIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCBwbHVnLWlucyBhcmUgbm90
IGRlc3Ryb3llZCB3aGlsZSBXZWJLaXQgY2FsbHMgaW50byB0aGVtLiAgU29tZSBwbHVnLWlucyAo
Rmxhc2gKLS8vIGF0IGxlYXN0KSBhcmUgd3JpdHRlbiB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQg
bm90aGluZyB0aGV5IGRvIGluIHRoZWlyIHBsdWctaW4gZnVuY3Rpb25zIGNhbiBjYXVzZSBOUFBf
RGVzdHJveSgpCi0vLyB0byBiZSBjYWxsZWQuICBVbmZvcnR1bmF0ZWx5LCB0aGlzIGlzIG5vdCB0
cnVlLCBlc3BlY2lhbGx5IGlmIHRoZSBwbHVnLWluIHVzZXMgTlBOX0ludm9rZSgpIHRvIGV4ZWN1
dGUgYQotLy8gZG9jdW1lbnQud3JpdGUoKSwgd2hpY2ggY2xlYXJzIHRoZSBkb2N1bWVudCBhbmQg
ZGVzdHJveXMgdGhlIHBsdWctaW4uCi0vLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzQ0ODA3Mzc+Lgot
LSAodm9pZCl3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uOwotCi0vLyAtZGlkQ2FsbFBsdWdJbkZ1bmN0
aW9uIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgcmV0dXJuaW5nIGZyb20gYSBwbHVnLWluIGZ1bmN0
aW9uLiAgSXQgc2hvdWxkIGJlIGNhbGxlZCBleGFjdGx5Ci0vLyBvbmNlIGZvciBldmVyeSBjYWxs
IHRvIC13aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uLgotLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS80NDgw
NzM3Pi4KLS0gKHZvaWQpZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uOwotCi0tICh2b2lkKWhhbmRsZU1v
dXNlTW92ZWQ6KE5TRXZlbnQgKilldmVudDsKLS0gKHZvaWQpaGFuZGxlTW91c2VFbnRlcmVkOihO
U0V2ZW50ICopZXZlbnQ7Ci0tICh2b2lkKWhhbmRsZU1vdXNlRXhpdGVkOihOU0V2ZW50ICopZXZl
bnQ7Ci0KLUBlbmQKLQotQGludGVyZmFjZSBXZWJOZXRzY2FwZVBsdWdpblZpZXcgKFdlYkludGVy
bmFsKQotLSAoQk9PTClzZW5kRXZlbnQ6KHZvaWQqKWV2ZW50IGlzRHJhd1JlY3Q6KEJPT0wpZXZl
bnRJc0RyYXdSZWN0OwotLSAoTlBFdmVudE1vZGVsKWV2ZW50TW9kZWw7Ci0tIChDQUxheWVyICop
cGx1Z2luTGF5ZXI7Ci0tIChOUEVycm9yKWxvYWRSZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1
ZXN0IGluVGFyZ2V0OihOU1N0cmluZyAqKXRhcmdldCB3aXRoTm90aWZ5RGF0YToodm9pZCAqKW5v
dGlmeURhdGEgc2VuZE5vdGlmaWNhdGlvbjooQk9PTClzZW5kTm90aWZpY2F0aW9uOwotLSAoTlBF
cnJvcilnZXRVUkxOb3RpZnk6KGNvbnN0IGNoYXIgKilVUkwgdGFyZ2V0Oihjb25zdCBjaGFyICop
dGFyZ2V0IG5vdGlmeURhdGE6KHZvaWQgKilub3RpZnlEYXRhOwotLSAoTlBFcnJvcilnZXRVUkw6
KGNvbnN0IGNoYXIgKilVUkwgdGFyZ2V0Oihjb25zdCBjaGFyICopdGFyZ2V0OwotLSAoTlBFcnJv
cilwb3N0VVJMTm90aWZ5Oihjb25zdCBjaGFyICopVVJMIHRhcmdldDooY29uc3QgY2hhciAqKXRh
cmdldCBsZW46KFVJbnQzMilsZW4gYnVmOihjb25zdCBjaGFyICopYnVmIGZpbGU6KE5QQm9vbClm
aWxlIG5vdGlmeURhdGE6KHZvaWQgKilub3RpZnlEYXRhOwotLSAoTlBFcnJvcilwb3N0VVJMOihj
b25zdCBjaGFyICopVVJMIHRhcmdldDooY29uc3QgY2hhciAqKXRhcmdldCBsZW46KFVJbnQzMils
ZW4gYnVmOihjb25zdCBjaGFyICopYnVmIGZpbGU6KE5QQm9vbClmaWxlOwotLSAoTlBFcnJvcilu
ZXdTdHJlYW06KE5QTUlNRVR5cGUpdHlwZSB0YXJnZXQ6KGNvbnN0IGNoYXIgKil0YXJnZXQgc3Ry
ZWFtOihOUFN0cmVhbSoqKXN0cmVhbTsKLS0gKE5QRXJyb3Ipd3JpdGU6KE5QU3RyZWFtKilzdHJl
YW0gbGVuOihTSW50MzIpbGVuIGJ1ZmZlcjoodm9pZCAqKWJ1ZmZlcjsKLS0gKE5QRXJyb3IpZGVz
dHJveVN0cmVhbTooTlBTdHJlYW0qKXN0cmVhbSByZWFzb246KE5QUmVhc29uKXJlYXNvbjsKLS0g
KHZvaWQpc3RhdHVzOihjb25zdCBjaGFyICopbWVzc2FnZTsKLS0gKGNvbnN0IGNoYXIgKil1c2Vy
QWdlbnQ7Ci0tICh2b2lkKWludmFsaWRhdGVSZWN0OihOUFJlY3QgKilpbnZhbGlkUmVjdDsKLS0g
KHZvaWQpaW52YWxpZGF0ZVJlZ2lvbjooTlBSZWdpb24paW52YWxpZGF0ZVJlZ2lvbjsKLS0gKHZv
aWQpZm9yY2VSZWRyYXc7Ci0tIChOUEVycm9yKWdldFZhcmlhYmxlOihOUE5WYXJpYWJsZSl2YXJp
YWJsZSB2YWx1ZToodm9pZCAqKXZhbHVlOwotLSAoTlBFcnJvcilzZXRWYXJpYWJsZTooTlBQVmFy
aWFibGUpdmFyaWFibGUgdmFsdWU6KHZvaWQgKil2YWx1ZTsKLS0gKHVpbnQzMl90KXNjaGVkdWxl
VGltZXJXaXRoSW50ZXJ2YWw6KHVpbnQzMl90KWludGVydmFsIHJlcGVhdDooTlBCb29sKXJlcGVh
dCB0aW1lckZ1bmM6KHZvaWQgKCopKE5QUCBucHAsIHVpbnQzMl90IHRpbWVySUQpKXRpbWVyRnVu
YzsKLS0gKHZvaWQpdW5zY2hlZHVsZVRpbWVyOih1aW50MzJfdCl0aW1lcklEOwotLSAoTlBFcnJv
cilwb3BVcENvbnRleHRNZW51OihOUE1lbnUgKiltZW51OwotLSAoTlBFcnJvcilnZXRWYXJpYWJs
ZTooTlBOVVJMVmFyaWFibGUpdmFyaWFibGUgZm9yVVJMOihjb25zdCBjaGFyKil1cmwgdmFsdWU6
KGNoYXIqKil2YWx1ZSBsZW5ndGg6KHVpbnQzMl90KilsZW5ndGg7Ci0tIChOUEVycm9yKXNldFZh
cmlhYmxlOihOUE5VUkxWYXJpYWJsZSl2YXJpYWJsZSBmb3JVUkw6KGNvbnN0IGNoYXIqKXVybCB2
YWx1ZTooY29uc3QgY2hhciopdmFsdWUgbGVuZ3RoOih1aW50MzJfdClsZW5ndGg7Ci0tIChOUEVy
cm9yKWdldEF1dGhlbnRpY2F0aW9uSW5mb1dpdGhQcm90b2NvbDooY29uc3QgY2hhciopIHByb3Rv
Y29sIGhvc3Q6KGNvbnN0IGNoYXIqKWhvc3QgcG9ydDooaW50MzJfdClwb3J0IHNjaGVtZTooY29u
c3QgY2hhciopc2NoZW1lIHJlYWxtOihjb25zdCBjaGFyKilyZWFsbQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWU6KGNoYXIqKil1c2VybmFtZSB1c2VybmFtZUxl
bmd0aDoodWludDMyX3QqKXVzZXJuYW1lTGVuZ3RoIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFzc3dvcmQ6KGNoYXIqKilwYXNzd29yZCBwYXNzd29yZExlbmd0aDoodWlu
dDMyX3QqKXBhc3N3b3JkTGVuZ3RoOwotQGVuZAotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0gYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThhMmVlODE3MWEyZGI4ZDgyYzhiYjA1YTk5
ZGQwMDQxNjllYWVkNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmll
dy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDE4NzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKLQotI2ltcG9ydCAiV2ViTmV0c2NhcGVQbHVnaW5WaWV3LmgiCi0KLSNpbXBv
cnQgIldlYkRhdGFTb3VyY2VJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViRGVmYXVsdFVJRGVsZWdh
dGUuaCIKLSNpbXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkZyYW1lVmll
dy5oIgotI2ltcG9ydCAiV2ViS2l0RXJyb3JzUHJpdmF0ZS5oIgotI2ltcG9ydCAiV2ViS2l0TG9n
Z2luZy5oIgotI2ltcG9ydCAiV2ViS2l0TlNTdHJpbmdFeHRyYXMuaCIKLSNpbXBvcnQgIldlYk5T
RGF0YUV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNEaWN0aW9uYXJ5RXh0cmFzLmgiCi0jaW1wb3J0
ICJXZWJOU09iamVjdEV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNVUkxFeHRyYXMuaCIKLSNpbXBv
cnQgIldlYk5TVVJMUmVxdWVzdEV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNWaWV3RXh0cmFzLmgi
Ci0jaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlci5oIgotI2ltcG9ydCAiV2Vi
TmV0c2NhcGVQbHVnaW5QYWNrYWdlLmgiCi0jaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpblN0cmVh
bS5oIgotI2ltcG9ydCAiV2ViUGx1Z2luUmVxdWVzdC5oIgotI2ltcG9ydCAiV2ViUHJlZmVyZW5j
ZXMuaCIKLSNpbXBvcnQgIldlYlVJRGVsZWdhdGVQcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJWaWV3
SW50ZXJuYWwuaCIKLSNpbXBvcnQgPENhcmJvbi9DYXJib24uaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pT
TG9jay5oPgotI2ltcG9ydCA8V2ViQ29yZS9Db21tb25WTS5oPgotI2ltcG9ydCA8V2ViQ29yZS9D
b29raWVKYXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvRWxlbWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgotI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZUxvYWRlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVRyZWUuaD4KLSNp
bXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxQbHVnSW5F
bGVtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL05QX2pzb2JqZWN0Lmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL1BhZ2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUHJveHlTZXJ2ZXIuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvU2NyaXB0Q29udHJvbGxlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdp
bi5oPgotI2ltcG9ydCA8V2ViQ29yZS9Vc2VyR2VzdHVyZUluZGljYXRvci5oPgotI2ltcG9ydCA8
V2ViQ29yZS9XZWJDb3JlSklUT3BlcmF0aW9ucy5oPgotI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3Jl
VVJMUmVzcG9uc2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvbnBydW50aW1lX2ltcGwuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvcnVudGltZV9yb290Lmg+Ci0jaW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9NUHJp
dmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0TGVnYWN5L1dlYlVJRGVsZWdhdGUuaD4KLSNpbXBvcnQg
PG9iamMvcnVudGltZS5oPgotI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4K
LSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgot
I2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KLSNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgotI2lt
cG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jZGVmaW5lIExvZ2luV2luZG93RGlkU3dpdGNo
RnJvbVVzZXJOb3RpZmljYXRpb24gICAgQCJXZWJMb2dpbldpbmRvd0RpZFN3aXRjaEZyb21Vc2Vy
Tm90aWZpY2F0aW9uIgotI2RlZmluZSBMb2dpbldpbmRvd0RpZFN3aXRjaFRvVXNlck5vdGlmaWNh
dGlvbiAgICAgIEAiV2ViTG9naW5XaW5kb3dEaWRTd2l0Y2hUb1VzZXJOb3RpZmljYXRpb24iCi0j
ZGVmaW5lIFdLTlZTdXBwb3J0c0NvbXBvc2l0aW5nQ29yZUFuaW1hdGlvblBsdWdpbnNCb29sIDc0
NjU2ICAvKiBUUlVFIGlmIHRoZSBicm93c2VyIHN1cHBvcnRzIGhhcmR3YXJlIGNvbXBvc2l0aW5n
IG9mIENvcmUgQW5pbWF0aW9uIHBsdWctaW5zICAqLwotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KLUBpbnRlcmZhY2UgV2ViTmV0c2NhcGVQbHVn
aW5WaWV3IChJbnRlcm5hbCkKLS0gKE5QRXJyb3IpX2NyZWF0ZVBsdWdpbjsKLS0gKHZvaWQpX2Rl
c3Ryb3lQbHVnaW47Ci0tICh2b2lkKV9yZWRlbGl2ZXJTdHJlYW07Ci0tIChCT09MKV9zaG91bGRD
YW5jZWxTcmNTdHJlYW07Ci1AZW5kCi0KLXN0YXRpYyBXZWJOZXRzY2FwZVBsdWdpblZpZXcgKmN1
cnJlbnRQbHVnaW5WaWV3ID0gbmlsOwotCi10eXBlZGVmIHN0cnVjdCBPcGFxdWVQb3J0U3RhdGUq
IFBvcnRTdGF0ZTsKLQotc3RhdGljIGNvbnN0IFNlY29uZHMgdGhyb3R0bGVkVGltZXJJbnRlcnZh
bCB7IDI1MF9tcyB9OwotCi1jbGFzcyBQbHVnaW5UaW1lciA6IHB1YmxpYyBUaW1lckJhc2Ugewot
cHVibGljOgotICAgIHR5cGVkZWYgdm9pZCAoKlRpbWVyRnVuYykoTlBQIG5wcCwgdWludDMyX3Qg
dGltZXJJRCk7Ci0gICAgCi0gICAgUGx1Z2luVGltZXIoTlBQIG5wcCwgdWludDMyX3QgdGltZXJJ
RCwgdWludDMyX3QgaW50ZXJ2YWwsIE5QQm9vbCByZXBlYXQsIFRpbWVyRnVuYyB0aW1lckZ1bmMp
Ci0gICAgICAgIDogbV9ucHAobnBwKQotICAgICAgICAsIG1fdGltZXJJRCh0aW1lcklEKQotICAg
ICAgICAsIG1faW50ZXJ2YWwoaW50ZXJ2YWwpCi0gICAgICAgICwgbV9yZXBlYXQocmVwZWF0KQot
ICAgICAgICAsIG1fdGltZXJGdW5jKHRpbWVyRnVuYykKLSAgICB7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgc3RhcnQoYm9vbCB0aHJvdHRsZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghaXNBY3Rp
dmUoKSk7Ci0KLSAgICAgICAgU2Vjb25kcyB0aW1lSW50ZXJ2YWwgPSAxX21zICogbV9pbnRlcnZh
bDsKLSAgICAgICAgCi0gICAgICAgIGlmICh0aHJvdHRsZSkKLSAgICAgICAgICAgIHRpbWVJbnRl
cnZhbCA9IHN0ZDo6bWF4KHRpbWVJbnRlcnZhbCwgdGhyb3R0bGVkVGltZXJJbnRlcnZhbCk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAobV9yZXBlYXQpCi0gICAgICAgICAgICBzdGFydFJlcGVhdGlu
ZyhTZWNvbmRzIHsgdGltZUludGVydmFsIH0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
dGFydE9uZVNob3QodGltZUludGVydmFsKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVh
bCB2b2lkIGZpcmVkKCkgCi0gICAgewotICAgICAgICBtX3RpbWVyRnVuYyhtX25wcCwgbV90aW1l
cklEKTsKLSAgICAgICAgaWYgKCFtX3JlcGVhdCkKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzOwot
ICAgIH0KLSAgICAKLSAgICBOUFAgbV9ucHA7Ci0gICAgdWludDMyX3QgbV90aW1lcklEOwotICAg
IHVpbnQzMl90IG1faW50ZXJ2YWw7Ci0gICAgTlBCb29sIG1fcmVwZWF0OwotICAgIFRpbWVyRnVu
YyBtX3RpbWVyRnVuYzsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBDR0NvbnRleHRSZWYg
Y29udGV4dDsKLX0gUG9ydFN0YXRlX0NHOwotCi1AY2xhc3MgTlNUZXh0SW5wdXRDb250ZXh0Owot
QGludGVyZmFjZSBOU1Jlc3BvbmRlciAoQXBwS2l0RGV0YWlscykKLS0gKE5TVGV4dElucHV0Q29u
dGV4dCAqKWlucHV0Q29udGV4dDsKLUBlbmQKLQotQGludGVyZmFjZSBXZWJOZXRzY2FwZVBsdWdp
blZpZXcgKEZvcndhcmREZWNsYXJhdGlvbnMpCi0tICh2b2lkKXNldFdpbmRvd0lmTmVjZXNzYXJ5
OwotLSAoTlBFcnJvcilsb2FkUmVxdWVzdDooTlNNdXRhYmxlVVJMUmVxdWVzdCAqKXJlcXVlc3Qg
aW5UYXJnZXQ6KGNvbnN0IGNoYXIgKiljVGFyZ2V0IHdpdGhOb3RpZnlEYXRhOih2b2lkICopbm90
aWZ5RGF0YSBzZW5kTm90aWZpY2F0aW9uOihCT09MKXNlbmROb3RpZmljYXRpb247Ci1AZW5kCi0K
LUBpbXBsZW1lbnRhdGlvbiBXZWJOZXRzY2FwZVBsdWdpblZpZXcKLQotKyAodm9pZClpbml0aWFs
aXplCi17Ci0gICAgSlNDOjppbml0aWFsaXplKCk7Ci0gICAgV1RGOjppbml0aWFsaXplTWFpblRo
cmVhZCgpOwotICAgIFdlYkNvcmU6OnBvcHVsYXRlSklUT3BlcmF0aW9ucygpOwotICAgIHNlbmRV
c2VyQ2hhbmdlTm90aWZpY2F0aW9ucygpOwotfQotCi0vLyBNQVJLOiBFVkVOVFMKLQotc3RhdGlj
IGlubGluZSB2b2lkIGdldE5QUmVjdChjb25zdCBOU1JlY3QmIG5yLCBOUFJlY3QmIG5wcikKLXsK
LSAgICBucHIudG9wID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KG5yLm9yaWdpbi55KTsKLSAgICBu
cHIubGVmdCA9IHN0YXRpY19jYXN0PHVpbnQxNl90Pihuci5vcmlnaW4ueCk7Ci0gICAgbnByLmJv
dHRvbSA9IHN0YXRpY19jYXN0PHVpbnQxNl90PihOU01heFkobnIpKTsKLSAgICBucHIucmlnaHQg
PSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oTlNNYXhYKG5yKSk7Ci19Ci0KLS0gKFBvcnRTdGF0ZSlz
YXZlQW5kU2V0TmV3UG9ydFN0YXRlRm9yVXBkYXRlOihCT09MKWZvclVwZGF0ZQotewotICAgIEFT
U0VSVChbc2VsZiBjdXJyZW50V2luZG93XSAhPSBuaWwpOwotICAgIAotICAgIC8vIFRoZSBiYXNl
IGNvb3JkaW5hdGVzIG9mIGEgd2luZG93IGFuZCBpdCdzIGNvbnRlbnRWaWV3IGhhcHBlbiB0byBi
ZSB0aGUgZXF1YWwgYXQgYSB1c2VyU3BhY2VTY2FsZUZhY3RvcgotICAgIC8vIG9mIDEuIEZvciBu
b24tMS4wIHNjYWxlIGZhY3RvcnMgdGhpcyBhc3N1bXB0aW9uIGlzIGZhbHNlLgotICAgIE5TVmll
dyAqd2luZG93Q29udGVudFZpZXcgPSBbW3NlbGYgd2luZG93XSBjb250ZW50Vmlld107Ci0gICAg
TlNSZWN0IGJvdW5kc0luV2luZG93ID0gW3NlbGYgY29udmVydFJlY3Q6W3NlbGYgYm91bmRzXSB0
b1ZpZXc6d2luZG93Q29udGVudFZpZXddOwotICAgIE5TUmVjdCB2aXNpYmxlUmVjdEluV2luZG93
ID0gW3NlbGYgYWN0dWFsVmlzaWJsZVJlY3RJbldpbmRvd107Ci0gICAgCi0gICAgLy8gRmxpcCBZ
IHRvIGNvbnZlcnQgLVtOU1dpbmRvdyBjb250ZW50Vmlld10gY29vcmRpbmF0ZXMgdG8gdG9wLWxl
ZnQtYmFzZWQgd2luZG93IGNvb3JkaW5hdGVzLgotICAgIGZsb2F0IGJvcmRlclZpZXdIZWlnaHQg
PSBbW3NlbGYgY3VycmVudFdpbmRvd10gZnJhbWVdLnNpemUuaGVpZ2h0OwotICAgIGJvdW5kc0lu
V2luZG93Lm9yaWdpbi55ID0gYm9yZGVyVmlld0hlaWdodCAtIE5TTWF4WShib3VuZHNJbldpbmRv
dyk7Ci0gICAgdmlzaWJsZVJlY3RJbldpbmRvdy5vcmlnaW4ueSA9IGJvcmRlclZpZXdIZWlnaHQg
LSBOU01heFkodmlzaWJsZVJlY3RJbldpbmRvdyk7Ci0gICAgCi0gICAgd2luZG93LnR5cGUgPSBO
UFdpbmRvd1R5cGVXaW5kb3c7Ci0gICAgd2luZG93LnggPSAoaW50MzJfdClib3VuZHNJbldpbmRv
dy5vcmlnaW4ueDsgCi0gICAgd2luZG93LnkgPSAoaW50MzJfdClib3VuZHNJbldpbmRvdy5vcmln
aW4ueTsKLSAgICB3aW5kb3cud2lkdGggPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oTlNXaWR0aChi
b3VuZHNJbldpbmRvdykpOwotICAgIHdpbmRvdy5oZWlnaHQgPSBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oTlNIZWlnaHQoYm91bmRzSW5XaW5kb3cpKTsKLSAgICAKLSAgICAvLyAiQ2xpcC1vdXQiIHRo
ZSBwbHVnLWluIHdoZW46Ci0gICAgLy8gMSkgaXQncyBub3QgcmVhbGx5IGluIGEgd2luZG93IG9y
IG9mZi1zY3JlZW4gb3IgaGFzIG5vIGhlaWdodCBvciB3aWR0aC4KLSAgICAvLyAyKSB3aW5kb3cu
eCBpcyBhICJiaWcgbmVnYXRpdmUgbnVtYmVyIiB3aGljaCBpcyBob3cgV2ViQ29yZSBleHByZXNz
ZXMgb2ZmLXNjcmVlbiB3aWRnZXRzLgotICAgIC8vIDMpIHRoZSB3aW5kb3cgaXMgbWluaWF0dXJp
emVkIG9yIHRoZSBhcHAgaXMgaGlkZGVuCi0gICAgLy8gNCkgd2UncmUgaW5zaWRlIG9mIHZpZXdX
aWxsTW92ZVRvV2luZG93OiB3aXRoIGEgbmlsIHdpbmRvdy4gSW4gdGhpcyBjYXNlLCBzdXBlcnZp
ZXdzIG1heSBhbHJlYWR5IGhhdmUgbmlsIAotICAgIC8vIHN1cGVydmlld3MgYW5kIG5pbCB3aW5k
b3dzIGFuZCByZXN1bHRzIGZyb20gY29udmVydFJlY3Q6dG9WaWV3OiBhcmUgaW5jb3JyZWN0Lgot
ICAgIGlmICh3aW5kb3cud2lkdGggPD0gMCB8fCB3aW5kb3cuaGVpZ2h0IDw9IDAgfHwgd2luZG93
LnggPCAtMTAwMDAwIHx8IFtzZWxmIHNob3VsZENsaXBPdXRQbHVnaW5dKSB7Ci0KLSAgICAgICAg
Ly8gVGhlIGZvbGxvd2luZyBjb2RlIHRyaWVzIHRvIGdpdmUgcGx1Zy1pbnMgdGhlIHNhbWUgc2l6
ZSB0aGV5IHdpbGwgZXZlbnR1YWxseSBoYXZlLgotICAgICAgICAvLyBUaGUgc3BlY2lmaWVkV2lk
dGggYW5kIHNwZWNpZmllZEhlaWdodCB2YXJpYWJsZXMgYXJlIHVzZWQgdG8gcHJlZGljdCB0aGUg
c2l6ZSB0aGF0Ci0gICAgICAgIC8vIFdlYkNvcmUgd2lsbCBldmVudHVhbGx5IHJlc2l6ZSB1cyB0
by4KLQotICAgICAgICAvLyBUaGUgUXVpY2tUaW1lIHBsdWctaW4gaGFzIHByb2JsZW1zIGlmIHlv
dSBnaXZlIGl0IGEgd2lkdGggb3IgaGVpZ2h0IG9mIDAuCi0gICAgICAgIC8vIFNpbmNlIG90aGVy
IHBsdWctaW5zIGFsc28gbWlnaHQgaGF2ZSB0aGUgc2FtZSBzb3J0IG9mIHRyb3VibGUsIHdlIG1h
a2Ugc3VyZQotICAgICAgICAvLyB0byBhbHdheXMgZ2l2ZSBwbHVnLWlucyBhIHNpemUgb3RoZXIg
dGhhbiAwLDAuCi0KLSAgICAgICAgaWYgKHdpbmRvdy53aWR0aCA8PSAwKQotICAgICAgICAgICAg
d2luZG93LndpZHRoID0gc3BlY2lmaWVkV2lkdGggPiAwID8gc3BlY2lmaWVkV2lkdGggOiAxMDA7
Ci0gICAgICAgIGlmICh3aW5kb3cuaGVpZ2h0IDw9IDApCi0gICAgICAgICAgICB3aW5kb3cuaGVp
Z2h0ID0gc3BlY2lmaWVkSGVpZ2h0ID4gMCA/IHNwZWNpZmllZEhlaWdodCA6IDEwMDsKLQotICAg
ICAgICB3aW5kb3cuY2xpcFJlY3QuYm90dG9tID0gd2luZG93LmNsaXBSZWN0LnRvcDsKLSAgICAg
ICAgd2luZG93LmNsaXBSZWN0LmxlZnQgPSB3aW5kb3cuY2xpcFJlY3QucmlnaHQ7Ci0gICAgICAg
IAotICAgICAgICAvLyBDb3JlIEFuaW1hdGlvbiBwbHVnLWlucyBuZWVkIHRvIGJlIHVwZGF0ZWQg
KHdpdGggYSAwLDAsMCwwIGNsaXBSZWN0KSB3aGVuCi0gICAgICAgIC8vIG1vdmVkIHRvIGEgYmFj
a2dyb3VuZCB0YWIuIFdlIGRvbid0IGRvIHRoaXMgZm9yIENvcmUgR3JhcGhpY3MgcGx1Zy1pbnMg
YXMKLSAgICAgICAgLy8gb2xkZXIgdmVyc2lvbnMgb2YgRmxhc2ggaGF2ZSBoaXN0b3JpY2FsIFdl
YktpdC1zcGVjaWZpYyBjb2RlIHRoYXQgaXNuJ3QKLSAgICAgICAgLy8gY29tcGF0aWJsZSB3aXRo
IHRoaXMgYmVoYXZpb3IuCi0gICAgICAgIGlmIChkcmF3aW5nTW9kZWwgPT0gTlBEcmF3aW5nTW9k
ZWxDb3JlQW5pbWF0aW9uKQotICAgICAgICAgICAgZ2V0TlBSZWN0KE5TWmVyb1JlY3QsIHdpbmRv
dy5jbGlwUmVjdCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZ2V0TlBSZWN0KHZpc2libGVSZWN0
SW5XaW5kb3csIHdpbmRvdy5jbGlwUmVjdCk7Ci0gICAgfQotICAgIAotICAgIC8vIFNhdmUgdGhl
IHBvcnQgc3RhdGUsIHNldCB1cCB0aGUgcG9ydCBmb3IgZW50cnkgaW50byB0aGUgcGx1Z2luCi0g
ICAgUG9ydFN0YXRlIHBvcnRTdGF0ZTsKLSAgICBzd2l0Y2ggKGRyYXdpbmdNb2RlbCkgewotICAg
ICAgICBjYXNlIE5QRHJhd2luZ01vZGVsQ29yZUdyYXBoaWNzOiB7ICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoIVtzZWxmIGNhbkRyYXddKSB7Ci0gICAgICAgICAgICAgICAgcG9ydFN0YXRl
ID0gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgQVNTRVJUKFtOU1ZpZXcgZm9jdXNWaWV3XSA9PSBzZWxmKTsKLQot
ICAgICAgICAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBbW05TR3JhcGhpY3NDb250ZXh0IGN1
cnJlbnRDb250ZXh0XSBDR0NvbnRleHRdOwotCi0gICAgICAgICAgICBQb3J0U3RhdGVfQ0cgKmNn
UG9ydFN0YXRlID0gKFBvcnRTdGF0ZV9DRyAqKW1hbGxvYyhzaXplb2YoUG9ydFN0YXRlX0NHKSk7
Ci0gICAgICAgICAgICBwb3J0U3RhdGUgPSAoUG9ydFN0YXRlKWNnUG9ydFN0YXRlOwotICAgICAg
ICAgICAgY2dQb3J0U3RhdGUtPmNvbnRleHQgPSBjb250ZXh0OwotCi0gICAgICAgICAgICAvLyBT
YXZlIGN1cnJlbnQgZ3JhcGhpY3MgY29udGV4dCdzIHN0YXRlOyB3aWxsIGJlIHJlc3RvcmVkIGJ5
IC1yZXN0b3JlUG9ydFN0YXRlOgotICAgICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250
ZXh0KTsKLQotICAgICAgICAgICAgLy8gQ2xpcCB0byB0aGUgZGlydHkgcmVnaW9uIGlmIGRyYXdp
bmcgdG8gYSB3aW5kb3cuIFdoZW4gZHJhd2luZyB0byBhbm90aGVyIGJpdG1hcCBjb250ZXh0LCBk
byBub3QgY2xpcC4KLSAgICAgICAgICAgIGlmIChbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENv
bnRleHRdID09IFtbc2VsZiBjdXJyZW50V2luZG93XSBncmFwaGljc0NvbnRleHRdKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gR2V0IGxpc3Qgb2YgZGlydHkgcmVjdHMgZnJvbSB0aGUgb3BhcXVlIGFu
Y2VzdG9yIC0tIFdlYktpdCBkb2VzIHNvbWUgdHJpY2tzIHdpdGggaW52YWxpZGF0aW9uIGFuZAot
ICAgICAgICAgICAgICAgIC8vIGRpc3BsYXkgdG8gZW5hYmxlIHotb3JkZXJpbmcgZm9yIE5TVmll
d3M7IGEgc2lkZS1lZmZlY3Qgb2YgdGhpcyBpcyB0aGF0IG9ubHkgdGhlIFdlYkhUTUxWaWV3Ci0g
ICAgICAgICAgICAgICAgLy8ga25vd3MgYWJvdXQgdGhlIHRydWUgc2V0IG9mIGRpcnR5IHJlY3Rz
LgotICAgICAgICAgICAgICAgIE5TVmlldyAqb3BhcXVlQW5jZXN0b3IgPSBbc2VsZiBvcGFxdWVB
bmNlc3Rvcl07Ci0gICAgICAgICAgICAgICAgY29uc3QgTlNSZWN0ICpkaXJ0eVJlY3RzOwotICAg
ICAgICAgICAgICAgIE5TSW50ZWdlciBjb3VudDsKLSAgICAgICAgICAgICAgICBbb3BhcXVlQW5j
ZXN0b3IgZ2V0UmVjdHNCZWluZ0RyYXduOiZkaXJ0eVJlY3RzIGNvdW50OiZjb3VudF07Ci0gICAg
ICAgICAgICAgICAgVmVjdG9yPENHUmVjdCwgMTY+IGNvbnZlcnRlZERpcnR5UmVjdHM7Ci0gICAg
ICAgICAgICAgICAgY29udmVydGVkRGlydHlSZWN0cy5ncm93KGNvdW50KTsKLSAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8TlNSZWN0Jj4oY29udmVydGVkRGlydHlSZWN0c1tpXSkgPSBbc2Vs
ZiBjb252ZXJ0UmVjdDpkaXJ0eVJlY3RzW2ldIGZyb21WaWV3Om9wYXF1ZUFuY2VzdG9yXTsKLSAg
ICAgICAgICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0cyhjb250ZXh0LCBjb252ZXJ0ZWREaXJ0
eVJlY3RzLmRhdGEoKSwgY291bnQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICBjYXNlIE5QRHJhd2luZ01vZGVsQ29y
ZUFuaW1hdGlvbjoKLSAgICAgICAgICAgIC8vIEp1c3Qgc2V0IHRoZSBwb3J0IHN0YXRlIHRvIGEg
ZHVtbXkgdmFsdWUuCi0gICAgICAgICAgICBwb3J0U3RhdGUgPSAoUG9ydFN0YXRlKTE7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHBvcnRTdGF0ZSA9IE5VTEw7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHBvcnRTdGF0ZTsKLX0KLQot
LSAoUG9ydFN0YXRlKXNhdmVBbmRTZXROZXdQb3J0U3RhdGUKLXsKLSAgICByZXR1cm4gW3NlbGYg
c2F2ZUFuZFNldE5ld1BvcnRTdGF0ZUZvclVwZGF0ZTpOT107Ci19Ci0KLS0gKHZvaWQpcmVzdG9y
ZVBvcnRTdGF0ZTooUG9ydFN0YXRlKXBvcnRTdGF0ZQotewotICAgIEFTU0VSVChbc2VsZiBjdXJy
ZW50V2luZG93XSk7Ci0gICAgQVNTRVJUKHBvcnRTdGF0ZSk7Ci0gICAgCi0gICAgc3dpdGNoIChk
cmF3aW5nTW9kZWwpIHsKLSAgICAgICAgY2FzZSBOUERyYXdpbmdNb2RlbENvcmVHcmFwaGljczog
ewotICAgICAgICAgICAgQVNTRVJUKFtOU1ZpZXcgZm9jdXNWaWV3XSA9PSBzZWxmKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSAoKFBvcnRTdGF0ZV9D
RyAqKXBvcnRTdGF0ZSktPmNvbnRleHQ7Ci0gICAgICAgICAgICBBU1NFUlQoIW5Qb3J0LmNnUG9y
dC5jb250ZXh0IHx8IChjb250ZXh0ID09IG5Qb3J0LmNnUG9ydC5jb250ZXh0KSk7Ci0gICAgICAg
ICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhc2UgTlBEcmF3aW5nTW9kZWxDb3JlQW5p
bWF0aW9uOgotICAgICAgICAgICAgQVNTRVJUKHBvcnRTdGF0ZSA9PSAoUG9ydFN0YXRlKTEpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotLSAoQk9PTClz
ZW5kRXZlbnQ6KHZvaWQqKWV2ZW50IGlzRHJhd1JlY3Q6KEJPT0wpZXZlbnRJc0RyYXdSZWN0Ci17
Ci0gICAgaWYgKCFbc2VsZiB3aW5kb3ddKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgQVNTRVJU
KGV2ZW50KTsKLSAgICAgICAKLSAgICBpZiAoIV9pc1N0YXJ0ZWQpCi0gICAgICAgIHJldHVybiBO
TzsKLQotICAgIEFTU0VSVChbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5ldmVu
dCk7Ci0gICAgCi0gICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGNhbGwgTlBQX0hhbmRsZUV2ZW50
IHdoaWxlIHdlJ3JlIGluc2lkZSBOUFBfU2V0V2luZG93LgotICAgIC8vIFdlIHByb2JhYmx5IGRv
bid0IHdhbnQgbW9yZSBnZW5lcmFsIHJlZW50cmFuY3kgcHJvdGVjdGlvbjsgd2UgYXJlIHJlYWxs
eQotICAgIC8vIHByb3RlY3Rpbmcgb25seSBhZ2FpbnN0IHRoaXMgb25lIGNhc2UsIHdoaWNoIGFj
dHVhbGx5IGNvbWVzIHVwIHdoZW4KLSAgICAvLyB5b3UgZmlyc3QgaW5zdGFsbCB0aGUgU1ZHIHZp
ZXdlciBwbHVnLWluLgotICAgIGlmIChpblNldFdpbmRvdykKLSAgICAgICAgcmV0dXJuIE5POwot
Ci0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiB3ZWJGcmFtZV0pOwotICAgIGlmICghZnJh
bWUpCi0gICAgICAgIHJldHVybiBOTzsKLSAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsK
LSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBOTzsKLQotICAgIC8vIENhbiBvbmx5IHNl
bmQgZHJhd1JlY3QgKHVwZGF0ZUV2dCkgdG8gQ29yZUdyYXBoaWNzIHBsdWdpbnMgd2hlbiBhY3R1
YWxseSBkcmF3aW5nCi0gICAgQVNTRVJUKChkcmF3aW5nTW9kZWwgIT0gTlBEcmF3aW5nTW9kZWxD
b3JlR3JhcGhpY3MpIHx8ICFldmVudElzRHJhd1JlY3QgfHwgW05TVmlldyBmb2N1c1ZpZXddID09
IHNlbGYpOwotICAgIAotICAgIFBvcnRTdGF0ZSBwb3J0U3RhdGUgPSBOVUxMOwotICAgIAotICAg
IGlmIChkcmF3aW5nTW9kZWwgIT0gTlBEcmF3aW5nTW9kZWxDb3JlQW5pbWF0aW9uICYmIGV2ZW50
SXNEcmF3UmVjdCkgewotICAgICAgICAvLyBJbiBDb3JlR3JhcGhpY3MgbW9kZSwgdGhlIHBvcnQg
c3RhdGUgb25seSBuZWVkcyB0byBiZSBzYXZlZC9zZXQgd2hlbiByZWRyYXdpbmcgdGhlIHBsdWct
aW4gdmlldy4KLSAgICAgICAgLy8gVGhlIHBsdWctaW4gaXMgbm90IGFsbG93ZWQgdG8gZHJhdyBh
dCBhbnkgb3RoZXIgdGltZS4KLSAgICAgICAgcG9ydFN0YXRlID0gW3NlbGYgc2F2ZUFuZFNldE5l
d1BvcnRTdGF0ZUZvclVwZGF0ZTpldmVudElzRHJhd1JlY3RdOwotICAgICAgICAvLyBXZSBtYXkg
aGF2ZSBjaGFuZ2VkIHRoZSB3aW5kb3csIHNvIGluZm9ybSB0aGUgcGx1Zy1pbi4KLSAgICAgICAg
W3NlbGYgc2V0V2luZG93SWZOZWNlc3NhcnldOwotICAgIH0KLQotICAgIC8vIFRlbXBvcmFyaWx5
IHJldGFpbiBzZWxmIGluIGNhc2UgdGhlIHBsdWctaW4gdmlldyBpcyByZWxlYXNlZCB3aGlsZSBz
ZW5kaW5nIGFuIGV2ZW50LiAKLSAgICBhdXRvIHN0cm9uZ1NlbGYgPSByZXRhaW5QdHIoc2VsZik7
Ci0KLSAgICBCT09MIGFjY2VwdGVkRXZlbnQ7Ci0gICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5j
dGlvbl07Ci0gICAgLy8gU2V0IHRoZSBwbHVnaW5BbGxvd1BvcHVwIGZsYWcuCi0gICAgQVNTRVJU
KF9ldmVudEhhbmRsZXIpOwotICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7Ci0gICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9y
IGdlc3R1cmVJbmRpY2F0b3IoX2V2ZW50SGFuZGxlci0+Y3VycmVudEV2ZW50SXNVc2VyR2VzdHVy
ZSgpID8gc3RkOjpvcHRpb25hbDxQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0ZT4oUHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKSA6IHN0ZDo6bnVsbG9wdCk7Ci0gICAgICAgIGFjY2VwdGVkRXZlbnQgPSBb
X3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5ldmVudChwbHVnaW4sIGV2ZW50KTsK
LSAgICB9Ci0gICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKLQotICAgIGlmIChwb3J0
U3RhdGUpIHsKLSAgICAgICAgaWYgKFtzZWxmIGN1cnJlbnRXaW5kb3ddKQotICAgICAgICAgICAg
W3NlbGYgcmVzdG9yZVBvcnRTdGF0ZTpwb3J0U3RhdGVdOwotICAgICAgICBpZiAocG9ydFN0YXRl
ICE9IChQb3J0U3RhdGUpMSkKLSAgICAgICAgICAgIGZyZWUocG9ydFN0YXRlKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gYWNjZXB0ZWRFdmVudDsKLX0KLQotLSAodm9pZCl3aW5kb3dGb2N1c0NoYW5n
ZWQ6KEJPT0wpaGFzRm9jdXMKLXsKLSAgICBfZXZlbnRIYW5kbGVyLT53aW5kb3dGb2N1c0NoYW5n
ZWQoaGFzRm9jdXMpOwotfQotCi0tICh2b2lkKXNlbmREcmF3UmVjdEV2ZW50OihOU1JlY3QpcmVj
dAotewotICAgIEFTU0VSVChfZXZlbnRIYW5kbGVyKTsKLSAgICAKLSAgICBDR0NvbnRleHRSZWYg
Y29udGV4dCA9IFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIENHQ29udGV4dF07
Ci0gICAgX2V2ZW50SGFuZGxlci0+ZHJhd1JlY3QoY29udGV4dCwgcmVjdCk7Ci19Ci0KLS0gKHZv
aWQpc3RvcFRpbWVycwotewotICAgIFtzdXBlciBzdG9wVGltZXJzXTsKLSAgICAKLSAgICBpZiAo
X2V2ZW50SGFuZGxlcikKLSAgICAgICAgX2V2ZW50SGFuZGxlci0+c3RvcFRpbWVycygpOwotICAg
IAotICAgIGlmICghdGltZXJzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGF1dG8mIGl0
OiB0aW1lcnMtPnZhbHVlcygpKQotICAgICAgICBpdC0+c3RvcCgpOwotfQotCi0tICh2b2lkKXN0
YXJ0VGltZXJzCi17Ci0gICAgW3N1cGVyIHN0YXJ0VGltZXJzXTsKLSAgICAKLSAgICAvLyBJZiB0
aGUgcGx1Z2luIGlzIGNvbXBsZXRlbHkgb2JzY3VyZWQgKHNjcm9sbGVkIG91dCBvZiB2aWV3LCBm
b3IgZXhhbXBsZSksIHRoZW4gd2Ugd2lsbAotICAgIC8vIHNlbmQgbnVsbCBldmVudHMgYXQgYSBy
ZWR1Y2VkIHJhdGUuCi0gICAgX2V2ZW50SGFuZGxlci0+c3RhcnRUaW1lcnMoX2lzQ29tcGxldGVs
eU9ic2N1cmVkKTsKLSAgICAKLSAgICBpZiAoIXRpbWVycykKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIGZvciAoYXV0byYgaXQ6IHRpbWVycy0+dmFsdWVzKCkpIHsKLSAgICAgICAgQVNTRVJU
KCFpdC0+aXNBY3RpdmUoKSk7Ci0gICAgICAgIGl0LT5zdGFydChfaXNDb21wbGV0ZWx5T2JzY3Vy
ZWQpOwotICAgIH0gICAgCi19Ci0KLS0gKHZvaWQpZm9jdXNDaGFuZ2VkCi17Ci0gICAgLy8gV2Ug
bmVlZCB0byBudWxsIGNoZWNrIHRoZSBldmVudCBoYW5kbGVyIGhlcmUgYmVjYXVzZQotICAgIC8v
IHRoZSBwbHVnLWluIHZpZXcgY2FuIHJlc2lnbiBmb2N1cyBhZnRlciBpdCdzIGJlZW4gc3RvcHBl
ZAotICAgIC8vIGFuZCB0aGUgZXZlbnQgaGFuZGxlciBoYXMgYmVlbiBkZWxldGVkLgotICAgIGlm
IChfZXZlbnRIYW5kbGVyKQotICAgICAgICBfZXZlbnRIYW5kbGVyLT5mb2N1c0NoYW5nZWQoX2hh
c0ZvY3VzKTsKLX0KLQotLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKil0aGVFdmVudAotewot
ICAgIGlmICghX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX2V2ZW50SGFuZGxl
ci0+bW91c2VEb3duKHRoZUV2ZW50KTsKLX0KLQotLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICop
dGhlRXZlbnQKLXsKLSAgICBpZiAoIV9pc1N0YXJ0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IF9ldmVudEhhbmRsZXItPm1vdXNlVXAodGhlRXZlbnQpOwotfQotCi0tICh2b2lkKWhhbmRsZU1v
dXNlRW50ZXJlZDooTlNFdmVudCAqKXRoZUV2ZW50Ci17Ci0gICAgaWYgKCFfaXNTdGFydGVkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTZXQgY3Vyc29yIHRvIGFycm93LiBQbHVnaW5zIG9m
dGVuIGhhbmRsZSBjdXJzb3IgaW50ZXJuYWxseSwgYnV0IHRob3NlIHRoYXQgZG9uJ3Qgd2lsbCBq
dXN0IGdldCB0aGlzIGRlZmF1bHQgb25lLgotICAgIFtbTlNDdXJzb3IgYXJyb3dDdXJzb3JdIHNl
dF07Ci0KLSAgICBfZXZlbnRIYW5kbGVyLT5tb3VzZUVudGVyZWQodGhlRXZlbnQpOwotfQotCi0t
ICh2b2lkKWhhbmRsZU1vdXNlRXhpdGVkOihOU0V2ZW50ICopdGhlRXZlbnQKLXsKLSAgICBpZiAo
IV9pc1N0YXJ0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9ldmVudEhhbmRsZXItPm1vdXNl
RXhpdGVkKHRoZUV2ZW50KTsKLSAgICAKLSAgICAvLyBTZXQgY3Vyc29yIGJhY2sgdG8gYXJyb3cg
Y3Vyc29yLiAgQmVjYXVzZSBOU0N1cnNvciBkb2Vzbid0IGtub3cgYWJvdXQgY2hhbmdlcyB0aGF0
IHRoZSBwbHVnaW4gbWFkZSwgd2UgY291bGQgZ2V0IGNvbmZ1c2VkIGFib3V0IHdoYXQgd2UgdGhp
bmsgdGhlCi0gICAgLy8gY3VycmVudCBjdXJzb3IgaXMgb3RoZXJ3aXNlLiAgVGhlcmVmb3JlIHdl
IGhhdmUgbm8gY2hvaWNlIGJ1dCB0byB1bmNvbmRpdGlvbmFsbHkgcmVzZXQgdGhlIGN1cnNvciB3
aGVuIHRoZSBtb3VzZSBleGl0cyB0aGUgcGx1Z2luLgotICAgIFtbTlNDdXJzb3IgYXJyb3dDdXJz
b3JdIHNldF07Ci19Ci0KLS0gKHZvaWQpaGFuZGxlTW91c2VNb3ZlZDooTlNFdmVudCAqKXRoZUV2
ZW50Ci17Ci0gICAgaWYgKCFfaXNTdGFydGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBfZXZl
bnRIYW5kbGVyLT5tb3VzZU1vdmVkKHRoZUV2ZW50KTsKLX0KLSAgICAKLS0gKHZvaWQpbW91c2VE
cmFnZ2VkOihOU0V2ZW50ICopdGhlRXZlbnQKLXsKLSAgICBpZiAoIV9pc1N0YXJ0ZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIF9ldmVudEhhbmRsZXItPm1vdXNlRHJhZ2dlZCh0aGVFdmVudCk7
Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsV2hlZWw6KE5TRXZlbnQgKil0aGVFdmVudAotewotICAgIGlm
ICghX2lzU3RhcnRlZCkgewotICAgICAgICBbc3VwZXIgc2Nyb2xsV2hlZWw6dGhlRXZlbnRdOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFfZXZlbnRIYW5kbGVyLT5zY3JvbGxX
aGVlbCh0aGVFdmVudCkpCi0gICAgICAgIFtzdXBlciBzY3JvbGxXaGVlbDp0aGVFdmVudF07Ci19
Ci0KLS0gKHZvaWQpa2V5VXA6KE5TRXZlbnQgKil0aGVFdmVudAotewotICAgIGlmICghX2lzU3Rh
cnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX2V2ZW50SGFuZGxlci0+a2V5VXAodGhlRXZl
bnQpOwotfQotCi0tICh2b2lkKWtleURvd246KE5TRXZlbnQgKil0aGVFdmVudAotewotICAgIGlm
ICghX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX2V2ZW50SGFuZGxlci0+a2V5
RG93bih0aGVFdmVudCk7Ci19Ci0KLS0gKHZvaWQpZmxhZ3NDaGFuZ2VkOihOU0V2ZW50ICopdGhl
RXZlbnQKLXsKLSAgICBpZiAoIV9pc1N0YXJ0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9l
dmVudEhhbmRsZXItPmZsYWdzQ2hhbmdlZCh0aGVFdmVudCk7Ci19Ci0KLS0gKHZvaWQpc2VuZE1v
ZGlmaWVyRXZlbnRXaXRoS2V5Q29kZTooaW50KWtleUNvZGUgY2hhcmFjdGVyOihjaGFyKWNoYXJh
Y3RlcgotewotICAgIGlmICghX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IF9ldmVudEhhbmRsZXItPnN5bnRoZXRpY0tleURvd25XaXRoQ29tbWFuZE1vZGlmaWVyKGtleUNv
ZGUsIGNoYXJhY3Rlcik7Ci19Ci0KLS0gKHZvaWQpcHJpdmF0ZUJyb3dzaW5nTW9kZURpZENoYW5n
ZQotewotICAgIGlmICghX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIE5Q
Qm9vbCB2YWx1ZSA9IF9pc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQ7Ci0KLSAgICBbc2VsZiB3aWxs
Q2FsbFBsdWdJbkZ1bmN0aW9uXTsKLSAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwotICAgICAgICBpZiAoW19wbHVnaW5QYWNr
YWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+c2V0dmFsdWUpCi0gICAgICAgICAgICBbX3BsdWdpblBh
Y2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5zZXR2YWx1ZShwbHVnaW4sIE5QTlZwcml2YXRlTW9k
ZUJvb2wsICZ2YWx1ZSk7Ci0gICAgfQotICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07
Ci19Ci0KLS8vIE1BUks6IFdFQl9ORVRTQ0FQRV9QTFVHSU4KLQotLSAoQk9PTClpc05ld1dpbmRv
d0VxdWFsVG9PbGRXaW5kb3cKLXsKLSAgICBpZiAod2luZG93LnggIT0gbGFzdFNldFdpbmRvdy54
KQotICAgICAgICByZXR1cm4gTk87Ci0gICAgaWYgKHdpbmRvdy55ICE9IGxhc3RTZXRXaW5kb3cu
eSkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIGlmICh3aW5kb3cud2lkdGggIT0gbGFzdFNldFdp
bmRvdy53aWR0aCkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIGlmICh3aW5kb3cuaGVpZ2h0ICE9
IGxhc3RTZXRXaW5kb3cuaGVpZ2h0KQotICAgICAgICByZXR1cm4gTk87Ci0gICAgaWYgKHdpbmRv
dy5jbGlwUmVjdC50b3AgIT0gbGFzdFNldFdpbmRvdy5jbGlwUmVjdC50b3ApCi0gICAgICAgIHJl
dHVybiBOTzsKLSAgICBpZiAod2luZG93LmNsaXBSZWN0LmxlZnQgIT0gbGFzdFNldFdpbmRvdy5j
bGlwUmVjdC5sZWZ0KQotICAgICAgICByZXR1cm4gTk87Ci0gICAgaWYgKHdpbmRvdy5jbGlwUmVj
dC5ib3R0b20gICE9IGxhc3RTZXRXaW5kb3cuY2xpcFJlY3QuYm90dG9tKQotICAgICAgICByZXR1
cm4gTk87Ci0gICAgaWYgKHdpbmRvdy5jbGlwUmVjdC5yaWdodCAhPSBsYXN0U2V0V2luZG93LmNs
aXBSZWN0LnJpZ2h0KQotICAgICAgICByZXR1cm4gTk87Ci0gICAgaWYgKHdpbmRvdy50eXBlICE9
IGxhc3RTZXRXaW5kb3cudHlwZSkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIAotICAgIHN3aXRj
aCAoZHJhd2luZ01vZGVsKSB7Ci0gICAgICAgIGNhc2UgTlBEcmF3aW5nTW9kZWxDb3JlR3JhcGhp
Y3M6Ci0gICAgICAgICAgICBpZiAoblBvcnQuY2dQb3J0LndpbmRvdyAhPSBsYXN0U2V0UG9ydC5j
Z1BvcnQud2luZG93KQotICAgICAgICAgICAgICAgIHJldHVybiBOTzsKLSAgICAgICAgICAgIGlm
IChuUG9ydC5jZ1BvcnQuY29udGV4dCAhPSBsYXN0U2V0UG9ydC5jZ1BvcnQuY29udGV4dCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gTk87Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBOUERyYXdpbmdNb2RlbENvcmVBbmltYXRpb246Ci0gICAgICAg
ICAgaWYgKHdpbmRvdy53aW5kb3cgIT0gbGFzdFNldFdpbmRvdy53aW5kb3cpCi0gICAgICAgICAg
ICAgIHJldHVybiBOTzsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAodm9pZCl1cGRhdGVBbmRTZXRXaW5kb3cKLXsKLSAg
ICAvLyBBIHBsdWctaW4gY2FuIG9ubHkgdXBkYXRlIGlmIGl0J3MgKDEpIGFscmVhZHkgYmVlbiBz
dGFydGVkICgyKSBpc24ndCBzdG9wcGVkCi0gICAgLy8gYW5kICgzKSBpcyBhYmxlIHRvIGRyYXcg
b24tc2NyZWVuLiBUbyBtZWV0IGNvbmRpdGlvbiAoMykgdGhlIHBsdWctaW4gbXVzdCBub3QKLSAg
ICAvLyBiZSBoaWRkZW4gYW5kIGJlIGF0dGFjaGVkIHRvIGEgd2luZG93LiBUaGVyZSBhcmUgdHdv
IGV4Y2VwdGlvbnMgdG8gdGhpcyBydWxlOgotICAgIC8vCi0gICAgLy8gRXhjZXB0aW9uIDE6IFF1
aWNrRHJhdyBwbHVnLWlucyBtdXN0IGJlIG1hbnVhbGx5IHRvbGQgd2hlbiB0byBzdG9wIHdyaXRp
bmcKLSAgICAvLyBiaXRzIHRvIHRoZSB3aW5kb3cgYmFja2luZyBzdG9yZSwgdGh1cyB0byBkbyBz
byByZXF1aXJlcyBhIG5ldyBjYWxsIHRvCi0gICAgLy8gTlBQX1NldFdpbmRvdygpIHdpdGggYW4g
ZW1wdHkgTlBXaW5kb3cgc3RydWN0LgotICAgIC8vCi0gICAgLy8gRXhjZXB0aW9uIDI6IENvcmVH
cmFwaGljcyBwbHVnLWlucyBleHBlY3QgdG8gaGF2ZSB0aGVpciBkcmF3YWJsZSBhcmVhIHVwZGF0
ZWQKLSAgICAvLyB3aGVuIHRoZXkgYXJlIG1vdmVkIHRvIGEgYmFja2dyb3VuZCB0YWIsIHZpYSBh
IE5QUF9TZXRXaW5kb3cgY2FsbC4gVGhpcyBpcwotICAgIC8vIGFjY29tcGxpc2hlZCBieSBhbGxv
d2luZyAtc2F2ZUFuZFNldE5ld1BvcnRTdGF0ZUZvclVwZGF0ZSB0byAiY2xpcC1vdXQiIHRoZSB3
aW5kb3cncwotICAgIC8vIGNsaXBSZWN0LiBGbGFzaCBpcyBjdXJlbnRseSBhbiBleGNlcHRpb24g
dG8gdGhpcy4gU2VlIDY0NTM3MzguCi0gICAgLy8KLSAgICAKLSAgICBpZiAoIV9pc1N0YXJ0ZWQp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoIVtzZWxmIGNhbkRyYXddKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBCT09MIGRpZExvY2tGb2N1cyA9IFtOU1ZpZXcgZm9jdXNWaWV3XSAh
PSBzZWxmICYmIFtzZWxmIGxvY2tGb2N1c0lmQ2FuRHJhd107Ci0KLSAgICBQb3J0U3RhdGUgcG9y
dFN0YXRlID0gW3NlbGYgc2F2ZUFuZFNldE5ld1BvcnRTdGF0ZV07Ci0gICAgaWYgKHBvcnRTdGF0
ZSkgewotICAgICAgICBbc2VsZiBzZXRXaW5kb3dJZk5lY2Vzc2FyeV07Ci0gICAgICAgIFtzZWxm
IHJlc3RvcmVQb3J0U3RhdGU6cG9ydFN0YXRlXTsKLSAgICAgICAgaWYgKHBvcnRTdGF0ZSAhPSAo
UG9ydFN0YXRlKTEpCi0gICAgICAgICAgICBmcmVlKHBvcnRTdGF0ZSk7Ci0gICAgfSBlbHNlIGlm
IChkcmF3aW5nTW9kZWwgPT0gTlBEcmF3aW5nTW9kZWxDb3JlR3JhcGhpY3MpCi0gICAgICAgIFtz
ZWxmIHNldFdpbmRvd0lmTmVjZXNzYXJ5XTsgICAgICAgIAotCi0gICAgaWYgKGRpZExvY2tGb2N1
cykKLSAgICAgICAgW3NlbGYgdW5sb2NrRm9jdXNdOwotfQotCi0tICh2b2lkKXNldFdpbmRvd0lm
TmVjZXNzYXJ5Ci17Ci0gICAgaWYgKCFfaXNTdGFydGVkKSAKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIGlmICghW3NlbGYgaXNOZXdXaW5kb3dFcXVhbFRvT2xkV2luZG93XSkgeyAgICAgICAg
Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBjYWxsIE5QUF9IYW5kbGVFdmVudCB3aGls
ZSB3ZSdyZSBpbnNpZGUgTlBQX1NldFdpbmRvdy4KLSAgICAgICAgLy8gV2UgcHJvYmFibHkgZG9u
J3Qgd2FudCBtb3JlIGdlbmVyYWwgcmVlbnRyYW5jeSBwcm90ZWN0aW9uOyB3ZSBhcmUgcmVhbGx5
Ci0gICAgICAgIC8vIHByb3RlY3Rpbmcgb25seSBhZ2FpbnN0IHRoaXMgb25lIGNhc2UsIHdoaWNo
IGFjdHVhbGx5IGNvbWVzIHVwIHdoZW4KLSAgICAgICAgLy8geW91IGZpcnN0IGluc3RhbGwgdGhl
IFNWRyB2aWV3ZXIgcGx1Zy1pbi4KLSAgICAgICAgTlBFcnJvciBucEVycjsKLSAgICAgICAgCi0g
ICAgICAgIEJPT0wgd2FzSW5TZXRXaW5kb3cgPSBpblNldFdpbmRvdzsKLSAgICAgICAgaW5TZXRX
aW5kb3cgPSBZRVM7ICAgICAgICAKLSAgICAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlv
bl07Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKGNvbW1vblZNKCkpOwotICAgICAgICAgICAgbnBFcnIgPSBbX3BsdWdpblBhY2th
Z2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5zZXR3aW5kb3cocGx1Z2luLCAmd2luZG93KTsKLSAgICAg
ICAgfQotICAgICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwotICAgICAgICBpblNl
dFdpbmRvdyA9IHdhc0luU2V0V2luZG93OwotCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICBzd2l0
Y2ggKGRyYXdpbmdNb2RlbCkgewotICAgICAgICAgICAgY2FzZSBOUERyYXdpbmdNb2RlbENvcmVH
cmFwaGljczoKLSAgICAgICAgICAgICAgICBMT0coUGx1Z2lucywgIk5QUF9TZXRXaW5kb3cgKENv
cmVHcmFwaGljcyk6ICVkLCB3aW5kb3c9JXAsIGNvbnRleHQ9JXAsIHdpbmRvdy54OiVkIHdpbmRv
dy55OiVkIHdpbmRvdy53aWR0aDolZCB3aW5kb3cuaGVpZ2h0OiVkIHdpbmRvdy5jbGlwUmVjdCBz
aXplOiVkeCVkIiwKLSAgICAgICAgICAgICAgICBucEVyciwgblBvcnQuY2dQb3J0LndpbmRvdywg
blBvcnQuY2dQb3J0LmNvbnRleHQsIChpbnQpd2luZG93LngsIChpbnQpd2luZG93LnksIChpbnQp
d2luZG93LndpZHRoLCAoaW50KXdpbmRvdy5oZWlnaHQsIAotICAgICAgICAgICAgICAgICAgICB3
aW5kb3cuY2xpcFJlY3QucmlnaHQgLSB3aW5kb3cuY2xpcFJlY3QubGVmdCwgd2luZG93LmNsaXBS
ZWN0LmJvdHRvbSAtIHdpbmRvdy5jbGlwUmVjdC50b3ApOwotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgICAgIGNhc2UgTlBEcmF3aW5nTW9kZWxDb3JlQW5pbWF0aW9uOgotICAgICAgICAg
ICAgICAgIExPRyhQbHVnaW5zLCAiTlBQX1NldFdpbmRvdyAoQ29yZUFuaW1hdGlvbik6ICVkLCB3
aW5kb3c9JXAgd2luZG93Lng6JWQgd2luZG93Lnk6JWQgd2luZG93LndpZHRoOiVkIHdpbmRvdy5o
ZWlnaHQ6JWQiLAotICAgICAgICAgICAgICAgIG5wRXJyLCB3aW5kb3cud2luZG93LCBuUG9ydC5j
Z1BvcnQuY29udGV4dCwgKGludCl3aW5kb3cueCwgKGludCl3aW5kb3cueSwgKGludCl3aW5kb3cu
d2lkdGgsIChpbnQpd2luZG93LmhlaWdodCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jZW5kaWYgLyogIWRlZmluZWQoTkRFQlVHKSAq
LwotICAgICAgICAKLSAgICAgICAgbGFzdFNldFdpbmRvdyA9IHdpbmRvdzsKLSAgICAgICAgbGFz
dFNldFBvcnQgPSBuUG9ydDsKLSAgICB9Ci19Ci0KLSsgKHZvaWQpc2V0Q3VycmVudFBsdWdpblZp
ZXc6KFdlYk5ldHNjYXBlUGx1Z2luVmlldyAqKXZpZXcKLXsKLSAgICBjdXJyZW50UGx1Z2luVmll
dyA9IHZpZXc7Ci19Ci0KLSsgKFdlYk5ldHNjYXBlUGx1Z2luVmlldyAqKWN1cnJlbnRQbHVnaW5W
aWV3Ci17Ci0gICAgcmV0dXJuIGN1cnJlbnRQbHVnaW5WaWV3OwotfQotCi0tIChCT09MKWNyZWF0
ZVBsdWdpbgotewotICAgIC8vIE9wZW4gdGhlIHBsdWctaW4gcGFja2FnZSBzbyBpdCByZW1haW5z
IGxvYWRlZCB3aGlsZSBvdXIgcGx1Z2luIHVzZXMgaXQKLSAgICBbX3BsdWdpblBhY2thZ2UuZ2V0
KCkgb3Blbl07Ci0gICAgCi0gICAgLy8gSW5pdGlhbGl6ZSBkcmF3aW5nTW9kZWwgdG8gYW4gaW52
YWxpZCB2YWx1ZSBzbyB0aGF0IHdlIGNhbiBkZXRlY3Qgd2hlbiB0aGUgcGx1Z2luIGRvZXMgbm90
IHNwZWNpZnkgYSBkcmF3aW5nTW9kZWwKLSAgICBkcmF3aW5nTW9kZWwgPSAoTlBEcmF3aW5nTW9k
ZWwpLTE7Ci0gICAgCi0gICAgLy8gSW5pdGlhbGl6ZSBldmVudE1vZGVsIHRvIGFuIGludmFsaWQg
dmFsdWUgc28gdGhhdCB3ZSBjYW4gZGV0ZWN0IHdoZW4gdGhlIHBsdWdpbiBkb2VzIG5vdCBzcGVj
aWZ5IGFuIGV2ZW50IG1vZGVsLgotICAgIGV2ZW50TW9kZWwgPSAoTlBFdmVudE1vZGVsKS0xOwot
ICAgIAotICAgIE5QRXJyb3IgbnBFcnIgPSBbc2VsZiBfY3JlYXRlUGx1Z2luXTsKLSAgICBpZiAo
bnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJOUFBfTmV3IGZh
aWxlZCB3aXRoIGVycm9yOiAlZCIsIG5wRXJyKTsKLSAgICAgICAgW3NlbGYgX2Rlc3Ryb3lQbHVn
aW5dOwotICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgY2xvc2VdOwotICAgICAgICByZXR1
cm4gTk87Ci0gICAgfQotICAgIAotICAgIGlmIChkcmF3aW5nTW9kZWwgPT0gKE5QRHJhd2luZ01v
ZGVsKS0xKQotICAgICAgICBkcmF3aW5nTW9kZWwgPSBOUERyYXdpbmdNb2RlbENvcmVHcmFwaGlj
czsKLQotICAgIGlmIChldmVudE1vZGVsID09IChOUEV2ZW50TW9kZWwpLTEpCi0gICAgICAgIGV2
ZW50TW9kZWwgPSBOUEV2ZW50TW9kZWxDb2NvYTsKLQotICAgIGlmIChkcmF3aW5nTW9kZWwgPT0g
TlBEcmF3aW5nTW9kZWxDb3JlQW5pbWF0aW9uKSB7Ci0gICAgICAgIHZvaWQgKnZhbHVlID0gMDsK
LSAgICAgICAgaWYgKFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPmdldHZhbHVl
KHBsdWdpbiwgTlBQVnBsdWdpbkNvcmVBbmltYXRpb25MYXllciwgJnZhbHVlKSA9PSBOUEVSUl9O
T19FUlJPUiAmJiB2YWx1ZSkgewotCi0gICAgICAgICAgICAvLyBUaGUgcGx1Zy1pbiBnaXZlcyB1
cyBhIHJldGFpbmVkIGxheWVyLgotICAgICAgICAgICAgX3BsdWdpbkxheWVyID0gYWRvcHROUygo
Q0FMYXllciAqKXZhbHVlKTsKLQotICAgICAgICAgICAgQk9PTCBhY2NsZXJhdGVkQ29tcG9zaXRp
bmdFbmFibGVkID0gZmFsc2U7Ci0gICAgICAgICAgICBhY2NsZXJhdGVkQ29tcG9zaXRpbmdFbmFi
bGVkID0gW1tbc2VsZiB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gYWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0VuYWJsZWRdOwotICAgICAgICAgICAgaWYgKGFjY2xlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQp
IHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGNhbiBiZSBzaGFyZWQgYmV0
d2VlbiBXZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcgYW5kIFdlYk5ldHNjYXBlUGx1Z2luVmll
dy4KLSAgICAgICAgICAgICAgICAvLyBTaW5jZSB0aGlzIGxheWVyIGlzbid0IGdvaW5nIHRvIGJl
IGluc2VydGVkIGludG8gYSB2aWV3LCB3ZSBuZWVkIHRvIGNyZWF0ZSBhbm90aGVyIGxheWVyIGFu
ZCBmbGlwIGl0cyBnZW9tZXRyeQotICAgICAgICAgICAgICAgIC8vIGluIG9yZGVyIHRvIGdldCB0
aGUgY29vcmRpbmF0ZSBzeXN0ZW0gcmlnaHQuCi0gICAgICAgICAgICAgICAgUmV0YWluUHRyPENB
TGF5ZXI+IHJlYWxQbHVnaW5MYXllciA9IFdURk1vdmUoX3BsdWdpbkxheWVyKTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBfcGx1Z2luTGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXll
ciBhbGxvY10gaW5pdF0pOwotICAgICAgICAgICAgICAgIF9wbHVnaW5MYXllci5nZXQoKS5ib3Vu
ZHMgPSByZWFsUGx1Z2luTGF5ZXIuZ2V0KCkuYm91bmRzOwotICAgICAgICAgICAgICAgIF9wbHVn
aW5MYXllci5nZXQoKS5nZW9tZXRyeUZsaXBwZWQgPSBZRVM7Ci0KLSAgICAgICAgICAgICAgICBy
ZWFsUGx1Z2luTGF5ZXIuZ2V0KCkuYXV0b3Jlc2l6aW5nTWFzayA9IGtDQUxheWVyV2lkdGhTaXph
YmxlIHwga0NBTGF5ZXJIZWlnaHRTaXphYmxlOwotICAgICAgICAgICAgICAgIFtfcGx1Z2luTGF5
ZXIuZ2V0KCkgYWRkU3VibGF5ZXI6cmVhbFBsdWdpbkxheWVyLmdldCgpXTsKLQotICAgICAgICAg
ICAgICAgIC8vIEVhZ2VybHkgZW50ZXIgY29tcG9zaXRpbmcgbW9kZSwgc2luY2Ugd2Uga25vdyB3
ZSdsbCBuZWVkIGl0LiBUaGlzIGF2b2lkcyBmaXJpbmcgaW52YWxpZGF0ZVN0eWxlKCkKLSAgICAg
ICAgICAgICAgICAvLyBmb3IgaWZyYW1lcyB0aGF0IGNvbnRhaW4gY29tcG9zaXRlZCBwbHVnaW5z
IGF0IGJhZCB0aW1lcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5
MDMzCi0gICAgICAgICAgICAgICAgY29yZShbc2VsZiB3ZWJGcmFtZV0pLT52aWV3KCktPmVudGVy
Q29tcG9zaXRpbmdNb2RlKCk7Ci0gICAgICAgICAgICAgICAgW3NlbGYgZWxlbWVudF0tPmludmFs
aWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgIFtzZWxmIHNldFdhbnRzTGF5ZXI6WUVTXTsKLQotICAgICAgICAgICAgTE9H
KFBsdWdpbnMsICIlQCBpcyB1c2luZyBDb3JlIEFuaW1hdGlvbiBkcmF3aW5nIG1vZGVsIHdpdGgg
bGF5ZXIgJUAiLCBfcGx1Z2luUGFja2FnZS5nZXQoKSwgX3BsdWdpbkxheWVyLmdldCgpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIEFTU0VSVChfcGx1Z2luTGF5ZXIpOwotICAgIH0KLSAgICAKLSAg
ICAvLyBDcmVhdGUgdGhlIGV2ZW50IGhhbmRsZXIKLSAgICBfZXZlbnRIYW5kbGVyID0gV2ViTmV0
c2NhcGVQbHVnaW5FdmVudEhhbmRsZXI6OmNyZWF0ZShzZWxmKTsKLQotICAgIHJldHVybiBZRVM7
Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIG1ldGhvZCBpcyBhbiBpZGVhbCBjYW5kaWRhdGUgdG8gbW92
ZSB1cCB0byB0aGUgYmFzZSBjbGFzcwotLSAoQ0FMYXllciAqKXBsdWdpbkxheWVyCi17Ci0gICAg
cmV0dXJuIF9wbHVnaW5MYXllci5nZXQoKTsKLX0KLQotLSAodm9pZClzZXRMYXllcjooQ0FMYXll
ciAqKW5ld0xheWVyCi17Ci0gICAgW3N1cGVyIHNldExheWVyOm5ld0xheWVyXTsKLQotICAgIGlm
IChuZXdMYXllciAmJiBfcGx1Z2luTGF5ZXIpIHsKLSAgICAgICAgX3BsdWdpbkxheWVyLmdldCgp
LmZyYW1lID0gW25ld0xheWVyIGZyYW1lXTsKLSAgICAgICAgX3BsdWdpbkxheWVyLmdldCgpLmF1
dG9yZXNpemluZ01hc2sgPSBrQ0FMYXllcldpZHRoU2l6YWJsZSB8IGtDQUxheWVySGVpZ2h0U2l6
YWJsZTsKLSAgICAgICAgW25ld0xheWVyIGFkZFN1YmxheWVyOl9wbHVnaW5MYXllci5nZXQoKV07
Ci0gICAgfQotfQotCi0tICh2b2lkKWxvYWRTdHJlYW0KLXsKLSAgICBpZiAoW3NlbGYgX3Nob3Vs
ZENhbmNlbFNyY1N0cmVhbV0pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoX2xvYWRN
YW51YWxseSkgewotICAgICAgICBbc2VsZiBfcmVkZWxpdmVyU3RyZWFtXTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAKLSAgICAvLyBJZiB0aGUgT0JKRUNUL0VNQkVEIHRhZyBoYXMgbm8g
U1JDLCB0aGUgVVJMIGlzIHBhc3NlZCB0byB1cyBhcyAiIi4KLSAgICAvLyBDaGVjayBmb3IgdGhp
cyBhbmQgZG9uJ3Qgc3RhcnQgYSBsb2FkIGluIHRoaXMgY2FzZS4KLSAgICBpZiAoX3NvdXJjZVVS
TCAmJiAhW19zb3VyY2VVUkwuZ2V0KCkgX3dlYl9pc0VtcHR5XSkgewotICAgICAgICBOU011dGFi
bGVVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW05TTXV0YWJsZVVSTFJlcXVlc3QgcmVxdWVzdFdpdGhV
Ukw6X3NvdXJjZVVSTC5nZXQoKV07Ci0gICAgICAgIFtyZXF1ZXN0IF93ZWJfc2V0SFRUUFJlZmVy
cmVyOmNvcmUoW3NlbGYgd2ViRnJhbWVdKS0+bG9hZGVyKCkub3V0Z29pbmdSZWZlcnJlcigpXTsK
LSAgICAgICAgW3NlbGYgbG9hZFJlcXVlc3Q6cmVxdWVzdCBpblRhcmdldDpuaWwgd2l0aE5vdGlm
eURhdGE6bmlsIHNlbmROb3RpZmljYXRpb246Tk9dOwotICAgIH0gCi19Ci0KLS0gKEJPT0wpc2hv
dWxkU3RvcAotewotICAgIC8vIElmIHdlJ3JlIGFscmVhZHkgY2FsbGluZyBhIHBsdWctaW4gZnVu
Y3Rpb24sIGRvIG5vdCBjYWxsIE5QUF9EZXN0cm95KCkuICBUaGUgcGx1Zy1pbiBmdW5jdGlvbiB3
ZSBhcmUgY2FsbGluZwotICAgIC8vIG1heSBhc3N1bWUgdGhhdCBpdHMgaW5zdGFuY2UtPnBkYXRh
LCBvciBvdGhlciBtZW1vcnkgZnJlZWQgYnkgTlBQX0Rlc3Ryb3koKSwgaXMgdmFsaWQgYW5kIHVu
Y2hhbmdlZCB1bnRpbCBzYWlkCi0gICAgLy8gcGx1Z2luLWZ1bmN0aW9uIHJldHVybnMuCi0gICAg
Ly8gU2VlIDxyZGFyOi8vcHJvYmxlbS80NDgwNzM3Pi4KLSAgICBpZiAocGx1Z2luRnVuY3Rpb25D
YWxsRGVwdGggPiAwKSB7Ci0gICAgICAgIHNob3VsZFN0b3BTb29uID0gWUVTOwotICAgICAgICBy
ZXR1cm4gTk87Ci0gICAgfQotCi0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAodm9pZClkZXN0cm95
UGx1Z2luCi17Ci0gICAgLy8gVG8gc3RvcCBhY3RpdmUgc3RyZWFtcyBpdCdzIG5lY2Vzc2FyeSB0
byBpbnZva2Ugc3RvcCgpIG9uIGEgY29weSAKLSAgICAvLyBvZiBzdHJlYW1zLiBUaGlzIGlzIGJl
Y2F1c2UgY2FsbGluZyBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6c3RvcCgpIGFsc28gaGFzIHRo
ZSBzaWRlIGVmZmVjdAotICAgIC8vIG9mIHJlbW92aW5nIGEgc3RyZWFtIGZyb20gdGhpcyBoYXNo
IHNldC4KLSAgICBmb3IgKGF1dG8mIHN0cmVhbSA6IGNvcHlUb1ZlY3RvcihzdHJlYW1zKSkKLSAg
ICAgICAgc3RyZWFtLT5zdG9wKCk7Ci0KLSAgICBmb3IgKFdlYkZyYW1lICpmcmFtZSBpbiBbX3Bl
bmRpbmdGcmFtZUxvYWRzIGtleUVudW1lcmF0b3JdKQotICAgICAgICBbZnJhbWUgX3NldEludGVy
bmFsTG9hZERlbGVnYXRlOm5pbF07Ci0gICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9y
bVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmXTsKLQotICAgIC8vIFNldHRpbmcgdGhlIHdpbmRvdyB0
eXBlIHRvIDAgZW5zdXJlcyB0aGF0IE5QUF9TZXRXaW5kb3cgd2lsbCBiZSBjYWxsZWQgaWYgdGhl
IHBsdWctaW4gaXMgcmVzdGFydGVkLgotICAgIGxhc3RTZXRXaW5kb3cudHlwZSA9IChOUFdpbmRv
d1R5cGUpMDsKLSAgICAKLSAgICBfcGx1Z2luTGF5ZXIgPSBuaWw7Ci0gICAgCi0gICAgW3NlbGYg
X2Rlc3Ryb3lQbHVnaW5dOwotICAgIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBjbG9zZV07Ci0gICAg
Ci0gICAgX2V2ZW50SGFuZGxlciA9IG51bGxwdHI7Ci19Ci0KLS0gKE5QRXZlbnRNb2RlbClldmVu
dE1vZGVsCi17Ci0gICAgcmV0dXJuIGV2ZW50TW9kZWw7Ci19Ci0KLS0gKE5QUClwbHVnaW4KLXsK
LSAgICByZXR1cm4gcGx1Z2luOwotfQotCi0tICh2b2lkKXNldEF0dHJpYnV0ZUtleXM6KE5TQXJy
YXkgKilrZXlzIGFuZFZhbHVlczooTlNBcnJheSAqKXZhbHVlcwotewotICAgIEFTU0VSVChba2V5
cyBjb3VudF0gPT0gW3ZhbHVlcyBjb3VudF0pOwotICAgIAotICAgIC8vIENvbnZlcnQgdGhlIGF0
dHJpYnV0ZXMgdG8gMiBDIHN0cmluZyBhcnJheXMuCi0gICAgLy8gVGhlc2UgYXJyYXlzIGFyZSBw
YXNzZWQgdG8gTlBQX05ldywgYnV0IHRoZSBzdHJpbmdzIG5lZWQgdG8gYmUKLSAgICAvLyBtb2Rp
ZmlhYmxlIGFuZCBsaXZlIHRoZSBlbnRpcmUgbGlmZSBvZiB0aGUgcGx1Z2luLgotCi0gICAgLy8g
VGhlIEphdmEgcGx1Zy1pbiByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgdGhlIGJh
c2UgVVJMCi0gICAgaWYgKFtfTUlNRVR5cGUuZ2V0KCkgaXNFcXVhbFRvU3RyaW5nOkAiYXBwbGlj
YXRpb24veC1qYXZhLWFwcGxldCJdKSB7Ci0gICAgICAgIGNBdHRyaWJ1dGVzID0gKGNoYXIgKiop
bWFsbG9jKChba2V5cyBjb3VudF0gKyAxKSAqIHNpemVvZihjaGFyICopKTsKLSAgICAgICAgY1Zh
bHVlcyA9IChjaGFyICoqKW1hbGxvYygoW3ZhbHVlcyBjb3VudF0gKyAxKSAqIHNpemVvZihjaGFy
ICopKTsKLSAgICAgICAgY0F0dHJpYnV0ZXNbMF0gPSBzdHJkdXAoIkRPQ0JBU0UiKTsKLSAgICAg
ICAgY1ZhbHVlc1swXSA9IHN0cmR1cChbX2Jhc2VVUkwuZ2V0KCkgX3dlYl9VUkxDU3RyaW5nXSk7
Ci0gICAgICAgIGFyZ3NDb3VudCsrOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNBdHRyaWJ1dGVz
ID0gKGNoYXIgKiopbWFsbG9jKFtrZXlzIGNvdW50XSAqIHNpemVvZihjaGFyICopKTsKLSAgICAg
ICAgY1ZhbHVlcyA9IChjaGFyICoqKW1hbGxvYyhbdmFsdWVzIGNvdW50XSAqIHNpemVvZihjaGFy
ICopKTsKLSAgICB9Ci0KLSAgICBCT09MIGlzV01QID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIGJ1
bmRsZUlkZW50aWZpZXJdID09ICJjb20ubWljcm9zb2Z0LldNUC5kZWZhdWx0cGx1Z2luIjsKLSAg
ICAKLSAgICB1bnNpZ25lZCBpOwotICAgIHVuc2lnbmVkIGNvdW50ID0gW2tleXMgY291bnRdOwot
ICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgIE5TU3RyaW5nICprZXkg
PSBba2V5cyBvYmplY3RBdEluZGV4OmldOwotICAgICAgICBOU1N0cmluZyAqdmFsdWUgPSBbdmFs
dWVzIG9iamVjdEF0SW5kZXg6aV07Ci0gICAgICAgIGlmIChba2V5IF93ZWJraXRfaXNDYXNlSW5z
ZW5zaXRpdmVFcXVhbFRvU3RyaW5nOkAiaGVpZ2h0Il0pIHsKLSAgICAgICAgICAgIHNwZWNpZmll
ZEhlaWdodCA9IFt2YWx1ZSBpbnRWYWx1ZV07Ci0gICAgICAgIH0gZWxzZSBpZiAoW2tleSBfd2Vi
a2l0X2lzQ2FzZUluc2Vuc2l0aXZlRXF1YWxUb1N0cmluZzpAIndpZHRoIl0pIHsKLSAgICAgICAg
ICAgIHNwZWNpZmllZFdpZHRoID0gW3ZhbHVlIGludFZhbHVlXTsKLSAgICAgICAgfQotICAgICAg
ICAvLyBBdm9pZCBXaW5kb3cgTWVkaWEgUGxheWVyIGNyYXNoIHdoZW4gdGhlc2UgYXR0cmlidXRl
cyBhcmUgcHJlc2VudC4KLSAgICAgICAgaWYgKGlzV01QICYmIChba2V5IF93ZWJraXRfaXNDYXNl
SW5zZW5zaXRpdmVFcXVhbFRvU3RyaW5nOkAiU0FNSVN0eWxlIl0gfHwgW2tleSBfd2Via2l0X2lz
Q2FzZUluc2Vuc2l0aXZlRXF1YWxUb1N0cmluZzpAIlNBTUlMYW5nIl0pKSB7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBjQXR0cmlidXRlc1thcmdzQ291bnRdID0g
c3RyZHVwKFtrZXkgVVRGOFN0cmluZ10pOwotICAgICAgICBjVmFsdWVzW2FyZ3NDb3VudF0gPSBz
dHJkdXAoW3ZhbHVlIFVURjhTdHJpbmddKTsKLSAgICAgICAgTE9HKFBsdWdpbnMsICIlQCA9ICVA
Iiwga2V5LCB2YWx1ZSk7Ci0gICAgICAgIGFyZ3NDb3VudCsrOwotICAgIH0KLX0KLQotLy8gTUFS
SzogTlNWSUVXCi0KLS0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZQotICAgICAgcGx1
Z2luUGFja2FnZTooV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlICopcGx1Z2luUGFja2FnZQotICAg
ICAgICAgICAgICAgIFVSTDooTlNVUkwgKilVUkwKLSAgICAgICAgICAgIGJhc2VVUkw6KE5TVVJM
ICopYmFzZVVSTAotICAgICAgICAgICBNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FCi0gICAgICBh
dHRyaWJ1dGVLZXlzOihOU0FycmF5ICopa2V5cwotICAgIGF0dHJpYnV0ZVZhbHVlczooTlNBcnJh
eSAqKXZhbHVlcwotICAgICAgIGxvYWRNYW51YWxseTooQk9PTClsb2FkTWFudWFsbHkKLSAgICAg
ICAgICAgIGVsZW1lbnQ6KFJlZlB0cjxXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudD4mJillbGVt
ZW50Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEZyYW1lOmZyYW1lIHBsdWdpblBhY2th
Z2U6cGx1Z2luUGFja2FnZSBVUkw6VVJMIGJhc2VVUkw6YmFzZVVSTCBNSU1FVHlwZTpNSU1FIGF0
dHJpYnV0ZUtleXM6a2V5cyBhdHRyaWJ1dGVWYWx1ZXM6dmFsdWVzIGxvYWRNYW51YWxseTpsb2Fk
TWFudWFsbHkgZWxlbWVudDpXVEZNb3ZlKGVsZW1lbnQpXTsKLSAgICBpZiAoIXNlbGYpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0KLSAgICBfcGVuZGluZ0ZyYW1lTG9hZHMgPSBhZG9wdE5TKFtbTlNN
YXBUYWJsZSBhbGxvY10gaW5pdFdpdGhLZXlPcHRpb25zOk5TUG9pbnRlckZ1bmN0aW9uc1N0cm9u
Z01lbW9yeSB2YWx1ZU9wdGlvbnM6TlNQb2ludGVyRnVuY3Rpb25zU3Ryb25nTWVtb3J5IGNhcGFj
aXR5OjBdKTsKLQotICAgIC8vIGxvYWQgdGhlIHBsdWctaW4gaWYgaXQgaXMgbm90IGFscmVhZHkg
bG9hZGVkCi0gICAgaWYgKCFbcGx1Z2luUGFja2FnZSBsb2FkXSkgewotICAgICAgICBbc2VsZiBy
ZWxlYXNlXTsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0KLSAgICByZXR1cm4gc2VsZjsK
LX0KLQotLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lCi17Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAodm9pZClmaW5pCi17Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3NDb3VudDsgaSsrKSB7Ci0gICAgICAgIGZyZWUo
Y0F0dHJpYnV0ZXNbaV0pOwotICAgICAgICBmcmVlKGNWYWx1ZXNbaV0pOwotICAgIH0KLSAgICBm
cmVlKGNBdHRyaWJ1dGVzKTsKLSAgICBmcmVlKGNWYWx1ZXMpOwotICAgIAotICAgIEFTU0VSVCgh
X2V2ZW50SGFuZGxlcik7Ci19Ci0KLS0gKHZvaWQpZGlzY29ubmVjdFN0cmVhbTooV2ViTmV0c2Nh
cGVQbHVnaW5TdHJlYW0qKXN0cmVhbQotewotICAgIHN0cmVhbXMucmVtb3ZlKHN0cmVhbSk7Ci19
Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIEFTU0VSVCghX2lzU3RhcnRlZCk7Ci0gICAgQVNT
RVJUKCFwbHVnaW4pOwotCi0gICAgW3NlbGYgZmluaV07Ci0KLSAgICBbc3VwZXIgZGVhbGxvY107
Ci19Ci0KLS0gKHZvaWQpZHJhd1JlY3Q6KE5TUmVjdClyZWN0Ci17Ci0gICAgaWYgKF9jYWNoZWRT
bmFwc2hvdCkgewotICAgICAgICBOU1JlY3Qgc291cmNlUmVjdCA9IHsgTlNaZXJvUG9pbnQsIFtf
Y2FjaGVkU25hcHNob3QuZ2V0KCkgc2l6ZV0gfTsKLSAgICAgICAgW19jYWNoZWRTbmFwc2hvdC5n
ZXQoKSBkcmF3SW5SZWN0OltzZWxmIGJvdW5kc10gZnJvbVJlY3Q6c291cmNlUmVjdCBvcGVyYXRp
b246TlNDb21wb3NpdGVTb3VyY2VPdmVyIGZyYWN0aW9uOjFdOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIAotICAgIGlmIChkcmF3aW5nTW9kZWwgPT0gTlBEcmF3aW5nTW9kZWxDb3JlQW5p
bWF0aW9uICYmICghX3NuYXBzaG90dGluZyB8fCAhW3NlbGYgc3VwcG9ydHNTbmFwc2hvdHRpbmdd
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFfaXNTdGFydGVkKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgaWYgKFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dERyYXdp
bmdUb1NjcmVlbl0gfHwgX2lzRmxhc2gpCi0gICAgICAgIFtzZWxmIHNlbmREcmF3UmVjdEV2ZW50
OnJlY3RdOwotfQotCi0tIChOUE9iamVjdCAqKWNyZWF0ZVBsdWdpblNjcmlwdGFibGVPYmplY3QK
LXsKLSAgICBpZiAoIVtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPmdldHZhbHVl
IHx8ICFfaXNTdGFydGVkKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgCi0gICAgTlBP
YmplY3QgKnZhbHVlID0gTlVMTDsKLSAgICBOUEVycm9yIGVycm9yOwotICAgIFtzZWxmIHdpbGxD
YWxsUGx1Z0luRnVuY3Rpb25dOwotICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7Ci0gICAgICAgIGVycm9yID0gW19wbHVnaW5Q
YWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+Z2V0dmFsdWUocGx1Z2luLCBOUFBWcGx1Z2luU2Ny
aXB0YWJsZU5QT2JqZWN0LCAmdmFsdWUpOwotICAgIH0KLSAgICBbc2VsZiBkaWRDYWxsUGx1Z0lu
RnVuY3Rpb25dOwotICAgIGlmIChlcnJvciAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgcmV0
dXJuIE5VTEw7Ci0gICAgCi0gICAgcmV0dXJuIHZhbHVlOwotfQotCi0tIChCT09MKWdldEZvcm1W
YWx1ZTooTlNTdHJpbmcgKiopdmFsdWUKLXsKLSAgICBpZiAoIVtfcGx1Z2luUGFja2FnZS5nZXQo
KSBwbHVnaW5GdW5jc10tPmdldHZhbHVlIHx8ICFfaXNTdGFydGVkKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgLy8gUGx1Z2lucyB3aWxsIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGJ1ZmZl
ciBieSB1c2luZyBOUE5fTWVtQWxsb2MoKS4KLSAgICBjaGFyKiBidWZmZXIgPSBOVUxMOwotICAg
IE5QRXJyb3IgZXJyb3I7Ci0gICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07Ci0gICAg
ewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25W
TSgpKTsKLSAgICAgICAgZXJyb3IgPSBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3Nd
LT5nZXR2YWx1ZShwbHVnaW4sIE5QUFZmb3JtVmFsdWUsICZidWZmZXIpOwotICAgIH0KLSAgICBb
c2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwotICAgIGlmIChlcnJvciAhPSBOUEVSUl9OT19F
UlJPUiB8fCAhYnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgKnZhbHVlID0gW1tO
U1N0cmluZyBhbGxvY10gaW5pdFdpdGhVVEY4U3RyaW5nOmJ1ZmZlcl07Ci0gICAgW19wbHVnaW5Q
YWNrYWdlLmdldCgpIGJyb3dzZXJGdW5jc10tPm1lbWZyZWUoYnVmZmVyKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotLSAodm9pZCl3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uCi17Ci0gICAgQVNTRVJU
KHBsdWdpbik7Ci0KLSAgICAvLyBDb3VsZCB0cnkgdG8gcHJldmVudCBpbmZpbml0ZSByZWN1cnNp
b24gaGVyZSwgYnV0IGl0J3MgcHJvYmFibHkgbm90IHdvcnRoIHRoZSBlZmZvcnQuCi0gICAgcGx1
Z2luRnVuY3Rpb25DYWxsRGVwdGgrKzsKLX0KLQotLSAodm9pZClkaWRDYWxsUGx1Z0luRnVuY3Rp
b24KLXsKLSAgICBBU1NFUlQocGx1Z2luRnVuY3Rpb25DYWxsRGVwdGggPiAwKTsKLSAgICBwbHVn
aW5GdW5jdGlvbkNhbGxEZXB0aC0tOwotICAgIAotICAgIC8vIElmIC1zdG9wIHdhcyBjYWxsZWQg
d2hpbGUgd2Ugd2VyZSBjYWxsaW5nIGludG8gYSBwbHVnLWluIGZ1bmN0aW9uLCBhbmQgd2UncmUg
bm8gbG9uZ2VyCi0gICAgLy8gaW5zaWRlIGEgcGx1Zy1pbiBmdW5jdGlvbiwgc3RvcCBub3cuCi0g
ICAgaWYgKHBsdWdpbkZ1bmN0aW9uQ2FsbERlcHRoID09IDAgJiYgc2hvdWxkU3RvcFNvb24pIHsK
LSAgICAgICAgc2hvdWxkU3RvcFNvb24gPSBOTzsKLSAgICAgICAgW3NlbGYgc3RvcF07Ci0gICAg
fQotfQotCi0tKHZvaWQpcGx1Z2luVmlldzooTlNWaWV3ICopcGx1Z2luVmlldyByZWNlaXZlZFJl
c3BvbnNlOihOU1VSTFJlc3BvbnNlICopcmVzcG9uc2UKLXsKLSAgICBBU1NFUlQoX2xvYWRNYW51
YWxseSk7Ci0gICAgQVNTRVJUKCFfbWFudWFsU3RyZWFtKTsKLQotICAgIF9tYW51YWxTdHJlYW0g
PSBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6Y3JlYXRlKCZjb3JlKFtzZWxmIHdlYkZyYW1lXSkt
PmxvYWRlcigpKTsKLX0KLQotLSAodm9pZClwbHVnaW5WaWV3OihOU1ZpZXcgKilwbHVnaW5WaWV3
IHJlY2VpdmVkRGF0YTooTlNEYXRhICopZGF0YQotewotICAgIEFTU0VSVChfbG9hZE1hbnVhbGx5
KTsKLSAgICBBU1NFUlQoX21hbnVhbFN0cmVhbSk7Ci0gICAgCi0gICAgX2RhdGFMZW5ndGhSZWNl
aXZlZCArPSBbZGF0YSBsZW5ndGhdOwotICAgIAotICAgIGlmICghX2lzU3RhcnRlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKCFfbWFudWFsU3RyZWFtLT5wbHVnaW4oKSkgewotICAgICAg
ICAvLyBDaGVjayBpZiB0aGUgbG9hZCBzaG91bGQgYmUgY2FuY2VsbGVkCi0gICAgICAgIGlmIChb
c2VsZiBfc2hvdWxkQ2FuY2VsU3JjU3RyZWFtXSkgewotICAgICAgICAgICAgTlNVUkxSZXNwb25z
ZSAqcmVzcG9uc2UgPSBbW3NlbGYgZGF0YVNvdXJjZV0gcmVzcG9uc2VdOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBhdXRvIGVycm9yID0gYWRvcHROUyhbW05TRXJyb3IgYWxsb2NdIF9pbml0
V2l0aFBsdWdpbkVycm9yQ29kZTpXZWJLaXRFcnJvclBsdWdJbldpbGxIYW5kbGVMb2FkCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZW50VVJMOltyZXNwb25zZSBVUkxdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5QYWdlVVJMOm5pbAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luTmFt
ZTpuaWwgLy8gRklYTUU6IEdldCB0aGlzIGZyb20gc29tZXdoZXJlCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOlty
ZXNwb25zZSBNSU1FVHlwZV1dKTsKLSAgICAgICAgICAgIFtbc2VsZiBkYXRhU291cmNlXSBfZG9j
dW1lbnRMb2FkZXJdLT5jYW5jZWxNYWluUmVzb3VyY2VMb2FkKGVycm9yLmdldCgpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgX21hbnVhbFN0cmVh
bS0+c2V0UmVxdWVzdFVSTChbW1tzZWxmIGRhdGFTb3VyY2VdIHJlcXVlc3RdIFVSTF0pOwotICAg
ICAgICBfbWFudWFsU3RyZWFtLT5zZXRQbHVnaW4oW3NlbGYgcGx1Z2luXSk7Ci0gICAgICAgIEFT
U0VSVChfbWFudWFsU3RyZWFtLT5wbHVnaW4oKSk7Ci0gICAgICAgIAotICAgICAgICBfbWFudWFs
U3RyZWFtLT5zdGFydFN0cmVhbVdpdGhSZXNwb25zZShbW3NlbGYgZGF0YVNvdXJjZV0gcmVzcG9u
c2VdKTsKLSAgICB9Ci0KLSAgICBpZiAoX21hbnVhbFN0cmVhbS0+cGx1Z2luKCkpCi0gICAgICAg
IF9tYW51YWxTdHJlYW0tPmRpZFJlY2VpdmVEYXRhKDAsIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4
X3QqPihbZGF0YSBieXRlc10pLCBbZGF0YSBsZW5ndGhdKTsKLX0KLQotLSAodm9pZClwbHVnaW5W
aWV3OihOU1ZpZXcgKilwbHVnaW5WaWV3IHJlY2VpdmVkRXJyb3I6KE5TRXJyb3IgKillcnJvcgot
ewotICAgIEFTU0VSVChfbG9hZE1hbnVhbGx5KTsKLQotICAgIF9lcnJvciA9IGVycm9yOwotICAg
IAotICAgIGlmICghX2lzU3RhcnRlZCkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
X21hbnVhbFN0cmVhbS0+ZGVzdHJveVN0cmVhbVdpdGhFcnJvcihlcnJvcik7Ci19Ci0KLS0gKHZv
aWQpcGx1Z2luVmlld0ZpbmlzaGVkTG9hZGluZzooTlNWaWV3ICopcGx1Z2luVmlldyAKLXsKLSAg
ICBBU1NFUlQoX2xvYWRNYW51YWxseSk7Ci0gICAgQVNTRVJUKF9tYW51YWxTdHJlYW0pOwotICAg
IAotICAgIGlmIChfaXNTdGFydGVkKQotICAgICAgICBfbWFudWFsU3RyZWFtLT5kaWRGaW5pc2hM
b2FkaW5nKDApOwotfQotCi0tIChOU1RleHRJbnB1dENvbnRleHQgKilpbnB1dENvbnRleHQKLXsK
LSAgICByZXR1cm4gbmlsOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJOZXRzY2Fw
ZVBsdWdpblZpZXcgKFdlYk5QUENhbGxiYWNrcykKLQotLSAodm9pZClldmFsdWF0ZUphdmFTY3Jp
cHRQbHVnaW5SZXF1ZXN0OihXZWJQbHVnaW5SZXF1ZXN0ICopSlNQbHVnaW5SZXF1ZXN0Ci17Ci0g
ICAgLy8gRklYTUU6IElzIHRoaXMgaXNTdGFydGVkIGNoZWNrIG5lZWRlZCBoZXJlPyBldmFsdWF0
ZUphdmFTY3JpcHRQbHVnaW5SZXF1ZXN0IHNob3VsZCBub3QgYmUgY2FsbGVkCi0gICAgLy8gaWYg
d2UgYXJlIHN0b3BwZWQgc2luY2UgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGFmdGVyIGEgZGVsYXkg
YW5kIHdlIGNhbGwgCi0gICAgLy8gY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFy
Z2V0IGluc2lkZSBvZiBzdG9wLgotICAgIGlmICghX2lzU3RhcnRlZCkgewotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAotICAgIE5TVVJMICpVUkwgPSBbW0pTUGx1Z2luUmVxdWVzdCByZXF1
ZXN0XSBVUkxdOwotICAgIE5TU3RyaW5nICpKU1N0cmluZyA9IFtVUkwgX3dlYmtpdF9zY3JpcHRJ
ZkphdmFTY3JpcHRVUkxdOwotICAgIEFTU0VSVChKU1N0cmluZyk7Ci0gICAgCi0gICAgTlNTdHJp
bmcgKnJlc3VsdCA9IFtbc2VsZiB3ZWJGcmFtZV0gX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHRGcm9tU3RyaW5nOkpTU3RyaW5nIGZvcmNlVXNlckdlc3R1cmU6W0pTUGx1Z2luUmVxdWVzdCBp
c0N1cnJlbnRFdmVudFVzZXJHZXN0dXJlXV07Ci0gICAgCi0gICAgLy8gRG9uJ3QgY29udGludWUg
aWYgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmcgY2F1c2VkIHRoZSBwbHVn
LWluIHRvIHN0b3AuCi0gICAgaWYgKCFfaXNTdGFydGVkKSB7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgICAgIAotICAgIGlmIChbSlNQbHVnaW5SZXF1ZXN0IGZyYW1lTmFtZV0gIT0gbmls
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgcmVzdWx0IGlzIGEgc3RyaW5nLCB3ZSBwcm9i
YWJseSB3YW50IHRvIHB1dCB0aGF0IHN0cmluZyBpbnRvIHRoZSBmcmFtZS4KLSAgICAgICAgaWYg
KFtKU1BsdWdpblJlcXVlc3Qgc2VuZE5vdGlmaWNhdGlvbl0pIHsKLSAgICAgICAgICAgIFtzZWxm
IHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwotICAg
ICAgICAgICAgICAgIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPnVybG5vdGlm
eShwbHVnaW4sIFtVUkwgX3dlYl9VUkxDU3RyaW5nXSwgTlBSRVNfRE9ORSwgW0pTUGx1Z2luUmVx
dWVzdCBub3RpZnlEYXRhXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBbc2VsZiBkaWRD
YWxsUGx1Z0luRnVuY3Rpb25dOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChbcmVzdWx0IGxl
bmd0aF0gPiAwKSB7Ci0gICAgICAgIC8vIERvbid0IGNhbGwgTlBQX05ld1N0cmVhbSBhbmQgb3Ro
ZXIgc3RyZWFtIG1ldGhvZHMgaWYgdGhlcmUgaXMgbm8gSlMgcmVzdWx0IHRvIGRlbGl2ZXIuIFRo
aXMgaXMgd2hhdCBNb3ppbGxhIGRvZXMuCi0gICAgICAgIE5TRGF0YSAqSlNEYXRhID0gW3Jlc3Vs
dCBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107Ci0gICAgICAgIAotICAg
ICAgICBhdXRvIHN0cmVhbSA9IFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpjcmVhdGUoW05TVVJM
UmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpVUkxdLCBwbHVnaW4sIFtKU1BsdWdpblJlcXVlc3Qgc2Vu
ZE5vdGlmaWNhdGlvbl0sIFtKU1BsdWdpblJlcXVlc3Qgbm90aWZ5RGF0YV0pOwotICAgICAgICAK
LSAgICAgICAgUmV0YWluUHRyPE5TVVJMUmVzcG9uc2U+IHJlc3BvbnNlID0gYWRvcHROUyhbW05T
VVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOlVSTCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TUlNRVR5cGU6QCJ0ZXh0L3BsYWluIiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZENvbnRlbnRMZW5ndGg6W0pT
RGF0YSBsZW5ndGhdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0pOwotICAgICAg
ICAKLSAgICAgICAgc3RyZWFtLT5zdGFydFN0cmVhbVdpdGhSZXNwb25zZShyZXNwb25zZS5nZXQo
KSk7Ci0gICAgICAgIHN0cmVhbS0+ZGlkUmVjZWl2ZURhdGEoMCwgc3RhdGljX2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KFtKU0RhdGEgYnl0ZXNdKSwgW0pTRGF0YSBsZW5ndGhdKTsKLSAgICAgICAgc3Ry
ZWFtLT5kaWRGaW5pc2hMb2FkaW5nKDApOwotICAgIH0KLX0KLQotLSAodm9pZCl3ZWJGcmFtZToo
V2ViRnJhbWUgKil3ZWJGcmFtZSBkaWRGaW5pc2hMb2FkV2l0aFJlYXNvbjooTlBSZWFzb24pcmVh
c29uCi17Ci0gICAgQVNTRVJUKF9pc1N0YXJ0ZWQpOwotICAgIAotICAgIFdlYlBsdWdpblJlcXVl
c3QgKnBsdWdpblJlcXVlc3QgPSBbX3BlbmRpbmdGcmFtZUxvYWRzIG9iamVjdEZvcktleTp3ZWJG
cmFtZV07Ci0gICAgQVNTRVJUKHBsdWdpblJlcXVlc3QgIT0gbmlsKTsKLSAgICBBU1NFUlQoW3Bs
dWdpblJlcXVlc3Qgc2VuZE5vdGlmaWNhdGlvbl0pOwotICAgICAgICAKLSAgICBbc2VsZiB3aWxs
Q2FsbFBsdWdJbkZ1bmN0aW9uXTsKLSAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwotICAgICAgICBbX3BsdWdpblBhY2thZ2Uu
Z2V0KCkgcGx1Z2luRnVuY3NdLT51cmxub3RpZnkocGx1Z2luLCBbW1twbHVnaW5SZXF1ZXN0IHJl
cXVlc3RdIFVSTF0gX3dlYl9VUkxDU3RyaW5nXSwgcmVhc29uLCBbcGx1Z2luUmVxdWVzdCBub3Rp
ZnlEYXRhXSk7Ci0gICAgfQotICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07Ci0gICAg
Ci0gICAgW19wZW5kaW5nRnJhbWVMb2FkcyByZW1vdmVPYmplY3RGb3JLZXk6d2ViRnJhbWVdOwot
ICAgIFt3ZWJGcmFtZSBfc2V0SW50ZXJuYWxMb2FkRGVsZWdhdGU6bmlsXTsKLX0KLQotLSAodm9p
ZCl3ZWJGcmFtZTooV2ViRnJhbWUgKil3ZWJGcmFtZSBkaWRGaW5pc2hMb2FkV2l0aEVycm9yOihO
U0Vycm9yICopZXJyb3IKLXsKLSAgICBOUFJlYXNvbiByZWFzb24gPSBOUFJFU19ET05FOwotICAg
IGlmIChlcnJvciAhPSBuaWwpCi0gICAgICAgIHJlYXNvbiA9IFdlYk5ldHNjYXBlUGx1Z2luU3Ry
ZWFtOjpyZWFzb25Gb3JFcnJvcihlcnJvcik7Ci0gICAgW3NlbGYgd2ViRnJhbWU6d2ViRnJhbWUg
ZGlkRmluaXNoTG9hZFdpdGhSZWFzb246cmVhc29uXTsKLX0KLQotLSAodm9pZClsb2FkUGx1Z2lu
UmVxdWVzdDooV2ViUGx1Z2luUmVxdWVzdCAqKXBsdWdpblJlcXVlc3QKLXsKLSAgICBOU1VSTFJl
cXVlc3QgKnJlcXVlc3QgPSBbcGx1Z2luUmVxdWVzdCByZXF1ZXN0XTsKLSAgICBOU1N0cmluZyAq
ZnJhbWVOYW1lID0gW3BsdWdpblJlcXVlc3QgZnJhbWVOYW1lXTsKLSAgICBXZWJGcmFtZSAqZnJh
bWUgPSBuaWw7Ci0gICAgCi0gICAgTlNVUkwgKlVSTCA9IFtyZXF1ZXN0IFVSTF07Ci0gICAgTlNT
dHJpbmcgKkpTU3RyaW5nID0gW1VSTCBfd2Via2l0X3NjcmlwdElmSmF2YVNjcmlwdFVSTF07Ci0g
ICAgCi0gICAgQVNTRVJUKGZyYW1lTmFtZSB8fCBKU1N0cmluZyk7Ci0gICAgCi0gICAgaWYgKGZy
YW1lTmFtZSkgewotICAgICAgICAvLyBGSVhNRSAtIG5lZWQgdG8gZ2V0IHJpZCBvZiB0aGlzIHdp
bmRvdyBjcmVhdGlvbiB3aGljaAotICAgICAgICAvLyBieXBhc3NlcyBub3JtYWwgdGFyZ2V0ZWQg
bGluayBoYW5kbGluZwotICAgICAgICBmcmFtZSA9IGtpdChjb3JlKFtzZWxmIHdlYkZyYW1lXSkt
PmxvYWRlcigpLmZpbmRGcmFtZUZvck5hdmlnYXRpb24oZnJhbWVOYW1lKSk7Ci0gICAgICAgIGlm
IChmcmFtZSA9PSBuaWwpIHsKLSAgICAgICAgICAgIFdlYlZpZXcgKmN1cnJlbnRXZWJWaWV3ID0g
W3NlbGYgd2ViVmlld107Ci0gICAgICAgICAgICBhdXRvIGZlYXR1cmVzID0gYWRvcHROUyhbW05T
RGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwotICAgICAgICAgICAgV2ViVmlldyAqbmV3V2ViVmll
dyA9IFtbY3VycmVudFdlYlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6Y3VycmVu
dFdlYlZpZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3JlYXRlV2ViVmlld1dpdGhSZXF1ZXN0Om5pbAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93RmVh
dHVyZXM6ZmVhdHVyZXMuZ2V0KCldOwotCi0gICAgICAgICAgICBpZiAoIW5ld1dlYlZpZXcpIHsK
LSAgICAgICAgICAgICAgICBpZiAoW3BsdWdpblJlcXVlc3Qgc2VuZE5vdGlmaWNhdGlvbl0pIHsK
LSAgICAgICAgICAgICAgICAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07Ci0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+dXJsbm90aWZ5KHBsdWdp
biwgW1tbcGx1Z2luUmVxdWVzdCByZXF1ZXN0XSBVUkxdIF93ZWJfVVJMQ1N0cmluZ10sIE5QRVJS
X0dFTkVSSUNfRVJST1IsIFtwbHVnaW5SZXF1ZXN0IG5vdGlmeURhdGFdKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rp
b25dOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZyYW1lID0gW25ld1dlYlZpZXcgbWFp
bkZyYW1lXTsKLSAgICAgICAgICAgIGNvcmUoZnJhbWUpLT50cmVlKCkuc2V0TmFtZShmcmFtZU5h
bWUpOwotICAgICAgICAgICAgW1tuZXdXZWJWaWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJW
aWV3U2hvdzpuZXdXZWJWaWV3XTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChKU1N0cmlu
ZykgewotICAgICAgICBBU1NFUlQoZnJhbWUgPT0gbmlsIHx8IFtzZWxmIHdlYkZyYW1lXSA9PSBm
cmFtZSk7Ci0gICAgICAgIFtzZWxmIGV2YWx1YXRlSmF2YVNjcmlwdFBsdWdpblJlcXVlc3Q6cGx1
Z2luUmVxdWVzdF07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgW2ZyYW1lIGxvYWRSZXF1ZXN0OnJl
cXVlc3RdOwotICAgICAgICBpZiAoW3BsdWdpblJlcXVlc3Qgc2VuZE5vdGlmaWNhdGlvbl0pIHsK
LSAgICAgICAgICAgIC8vIENoZWNrIGlmIGFub3RoZXIgcGx1Zy1pbiB2aWV3IG9yIGV2ZW4gdGhp
cyB2aWV3IGlzIHdhaXRpbmcgZm9yIHRoZSBmcmFtZSB0byBsb2FkLgotICAgICAgICAgICAgLy8g
SWYgaXQgaXMsIHRlbGwgaXQgdGhhdCB0aGUgbG9hZCB3YXMgY2FuY2VsbGVkIGJlY2F1c2UgaXQg
d2lsbCBiZSBhbnl3YXkuCi0gICAgICAgICAgICBXZWJOZXRzY2FwZVBsdWdpblZpZXcgKnZpZXcg
PSBbZnJhbWUgX2ludGVybmFsTG9hZERlbGVnYXRlXTsKLSAgICAgICAgICAgIGlmICh2aWV3ICE9
IG5pbCkgewotICAgICAgICAgICAgICAgIEFTU0VSVChbdmlldyBpc0tpbmRPZkNsYXNzOltXZWJO
ZXRzY2FwZVBsdWdpblZpZXcgY2xhc3NdXSk7Ci0gICAgICAgICAgICAgICAgW3ZpZXcgd2ViRnJh
bWU6ZnJhbWUgZGlkRmluaXNoTG9hZFdpdGhSZWFzb246TlBSRVNfVVNFUl9CUkVBS107Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBbX3BlbmRpbmdGcmFtZUxvYWRzIHNldE9iamVjdDpwbHVn
aW5SZXF1ZXN0IGZvcktleTpmcmFtZV07Ci0gICAgICAgICAgICBbZnJhbWUgX3NldEludGVybmFs
TG9hZERlbGVnYXRlOnNlbGZdOwotICAgICAgICB9Ci0gICAgfQotfQotCi0tIChOUEVycm9yKWxv
YWRSZXF1ZXN0OihOU011dGFibGVVUkxSZXF1ZXN0ICopcmVxdWVzdCBpblRhcmdldDooY29uc3Qg
Y2hhciAqKWNUYXJnZXQgd2l0aE5vdGlmeURhdGE6KHZvaWQgKilub3RpZnlEYXRhIHNlbmROb3Rp
ZmljYXRpb246KEJPT0wpc2VuZE5vdGlmaWNhdGlvbgotewotICAgIE5TVVJMICpVUkwgPSBbcmVx
dWVzdCBVUkxdOwotCi0gICAgaWYgKCFVUkwpIAotICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJ
RF9VUkw7Ci0KLSAgICAvLyBEb24ndCBhbGxvdyByZXF1ZXN0cyB0byBiZSBsb2FkZWQgd2hlbiB0
aGUgZG9jdW1lbnQgbG9hZGVyIGlzIHN0b3BwaW5nIGFsbCBsb2FkZXJzLgotICAgIGlmIChbW3Nl
bGYgZGF0YVNvdXJjZV0gX2RvY3VtZW50TG9hZGVyXS0+aXNTdG9wcGluZygpKQotICAgICAgICBy
ZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAKLSAgICBOU1N0cmluZyAqdGFyZ2V0ID0g
bmlsOwotICAgIGlmIChjVGFyZ2V0KSB7Ci0gICAgICAgIC8vIEZpbmQgdGhlIGZyYW1lIGdpdmVu
IHRoZSB0YXJnZXQgc3RyaW5nLgotICAgICAgICB0YXJnZXQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0
aENTdHJpbmc6Y1RhcmdldCBlbmNvZGluZzpOU0lTT0xhdGluMVN0cmluZ0VuY29kaW5nXTsKLSAg
ICB9Ci0gICAgV2ViRnJhbWUgKmZyYW1lID0gW3NlbGYgd2ViRnJhbWVdOwotCi0gICAgLy8gZG9u
J3QgbGV0IGEgcGx1Z2luIHN0YXJ0IGFueSBsb2FkcyBpZiBpdCBpcyBubyBsb25nZXIgcGFydCBv
ZiBhIGRvY3VtZW50IHRoYXQgaXMgYmVpbmcgCi0gICAgLy8gZGlzcGxheWVkIHVubGVzcyB0aGUg
bG9hZHMgYXJlIGluIHRoZSBzYW1lIGZyYW1lIGFzIHRoZSBwbHVnaW4uCi0gICAgaWYgKFtbc2Vs
ZiBkYXRhU291cmNlXSBfZG9jdW1lbnRMb2FkZXJdICE9IGNvcmUoW3NlbGYgd2ViRnJhbWVdKS0+
bG9hZGVyKCkuYWN0aXZlRG9jdW1lbnRMb2FkZXIoKSAmJgotICAgICAgICAoIWNUYXJnZXQgfHwg
W2ZyYW1lIGZpbmRGcmFtZU5hbWVkOnRhcmdldF0gIT0gZnJhbWUpKSB7Ci0gICAgICAgIHJldHVy
biBOUEVSUl9HRU5FUklDX0VSUk9SOyAKLSAgICB9Ci0gICAgCi0gICAgTlNTdHJpbmcgKkpTU3Ry
aW5nID0gW1VSTCBfd2Via2l0X3NjcmlwdElmSmF2YVNjcmlwdFVSTF07Ci0gICAgaWYgKEpTU3Ry
aW5nICE9IG5pbCkgewotICAgICAgICBpZiAoIVtbW3NlbGYgd2ViVmlld10gcHJlZmVyZW5jZXNd
IGlzSmF2YVNjcmlwdEVuYWJsZWRdKSB7Ci0gICAgICAgICAgICAvLyBSZXR1cm4gTlBFUlJfR0VO
RVJJQ19FUlJPUiBpZiBKUyBpcyBkaXNhYmxlZC4gVGhpcyBpcyB3aGF0IE1vemlsbGEgZG9lcy4K
LSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgICAgICB9IGVsc2Ug
aWYgKGNUYXJnZXQgPT0gTlVMTCAmJiBfbW9kZSA9PSBOUF9GVUxMKSB7Ci0gICAgICAgICAgICAv
LyBEb24ndCBhbGxvdyBhIEphdmFTY3JpcHQgcmVxdWVzdCBmcm9tIGEgc3RhbmRhbG9uZSBwbHVn
LWluIHRoYXQgaXMgc2VsZi10YXJnZXR0ZWQKLSAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhpcyBj
YW4gY2F1c2UgdGhlIHVzZXIgdG8gYmUgcmVkaXJlY3RlZCB0byBhIGJsYW5rIHBhZ2UgKDM0MjQw
MzkpLgotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWNvcmUoW3NlbGYgd2ViRnJhbWVdKS0+ZG9jdW1l
bnQoKS0+c2VjdXJpdHlPcmlnaW4oKS5jYW5EaXNwbGF5KFVSTCkpCi0gICAgICAgICAgICByZXR1
cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICB9Ci0gICAgICAgIAotICAgIGlmIChjVGFyZ2V0
IHx8IEpTU3RyaW5nKSB7Ci0gICAgICAgIC8vIE1ha2Ugd2hlbiB0YXJnZXRpbmcgYSBmcmFtZSBv
ciBldmFsdWF0aW5nIGEgSlMgc3RyaW5nLCBwZXJmb3JtIHRoZSByZXF1ZXN0IGFmdGVyIGEgZGVs
YXkgYmVjYXVzZSB3ZSBkb24ndAotICAgICAgICAvLyB3YW50IHRvIHBvdGVudGlhbGx5IGtpbGwg
dGhlIHBsdWctaW4gaW5zaWRlIG9mIGl0cyBVUkwgcmVxdWVzdC4KLSAgICAgICAgCi0gICAgICAg
IGlmIChKU1N0cmluZyAmJiB0YXJnZXQgJiYgW2ZyYW1lIGZpbmRGcmFtZU5hbWVkOnRhcmdldF0g
IT0gZnJhbWUpIHsKLSAgICAgICAgICAgIC8vIEZvciBzZWN1cml0eSByZWFzb25zLCBvbmx5IGFs
bG93IEpTIHJlcXVlc3RzIHRvIGJlIG1hZGUgb24gdGhlIGZyYW1lIHRoYXQgY29udGFpbnMgdGhl
IHBsdWctaW4uCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgYm9vbCBjdXJyZW50RXZlbnRJc1VzZXJHZXN0dXJlID0g
ZmFsc2U7Ci0gICAgICAgIGlmIChfZXZlbnRIYW5kbGVyKQotICAgICAgICAgICAgY3VycmVudEV2
ZW50SXNVc2VyR2VzdHVyZSA9IF9ldmVudEhhbmRsZXItPmN1cnJlbnRFdmVudElzVXNlckdlc3R1
cmUoKTsKLSAgICAgICAgCi0gICAgICAgIGF1dG8gcGx1Z2luUmVxdWVzdCA9IGFkb3B0TlMoW1tX
ZWJQbHVnaW5SZXF1ZXN0IGFsbG9jXSBpbml0V2l0aFJlcXVlc3Q6cmVxdWVzdAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmcmFtZU5hbWU6dGFyZ2V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5RGF0YTpub3Rp
ZnlEYXRhIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbmROb3RpZmljYXRpb246c2VuZE5vdGlmaWNhdGlvbgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGlkU3RhcnRGcm9tVXNlckdlc3R1cmU6Y3VycmVudEV2ZW50SXNVc2VyR2VzdHVyZV0pOwotICAg
ICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRQbHVnaW5SZXF1ZXN0Oikg
d2l0aE9iamVjdDpwbHVnaW5SZXF1ZXN0LmdldCgpIGFmdGVyRGVsYXk6MF07Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgYXV0byBzdHJlYW0gPSBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6Y3JlYXRl
KHJlcXVlc3QsIHBsdWdpbiwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSk7Ci0KLSAgICAg
ICAgc3RyZWFtcy5hZGQoc3RyZWFtLmNvcHlSZWYoKSk7Ci0gICAgICAgIHN0cmVhbS0+c3RhcnQo
KTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotfQotCi0tKE5QRXJy
b3IpZ2V0VVJMTm90aWZ5Oihjb25zdCBjaGFyICopVVJMQ1N0cmluZyB0YXJnZXQ6KGNvbnN0IGNo
YXIgKiljVGFyZ2V0IG5vdGlmeURhdGE6KHZvaWQgKilub3RpZnlEYXRhCi17Ci0gICAgTE9HKFBs
dWdpbnMsICJOUE5fR2V0VVJMTm90aWZ5OiAlcyB0YXJnZXQ6ICVzIiwgVVJMQ1N0cmluZywgY1Rh
cmdldCk7Ci0KLSAgICBOU011dGFibGVVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW3NlbGYgcmVxdWVz
dFdpdGhVUkxDU3RyaW5nOlVSTENTdHJpbmddOwotICAgIHJldHVybiBbc2VsZiBsb2FkUmVxdWVz
dDpyZXF1ZXN0IGluVGFyZ2V0OmNUYXJnZXQgd2l0aE5vdGlmeURhdGE6bm90aWZ5RGF0YSBzZW5k
Tm90aWZpY2F0aW9uOllFU107Ci19Ci0KLS0oTlBFcnJvcilnZXRVUkw6KGNvbnN0IGNoYXIgKilV
UkxDU3RyaW5nIHRhcmdldDooY29uc3QgY2hhciAqKWNUYXJnZXQKLXsKLSAgICBMT0coUGx1Z2lu
cywgIk5QTl9HZXRVUkw6ICVzIHRhcmdldDogJXMiLCBVUkxDU3RyaW5nLCBjVGFyZ2V0KTsKLQot
ICAgIE5TTXV0YWJsZVVSTFJlcXVlc3QgKnJlcXVlc3QgPSBbc2VsZiByZXF1ZXN0V2l0aFVSTENT
dHJpbmc6VVJMQ1N0cmluZ107Ci0gICAgcmV0dXJuIFtzZWxmIGxvYWRSZXF1ZXN0OnJlcXVlc3Qg
aW5UYXJnZXQ6Y1RhcmdldCB3aXRoTm90aWZ5RGF0YTpOVUxMIHNlbmROb3RpZmljYXRpb246Tk9d
OwotfQotCi0tIChOUEVycm9yKV9wb3N0VVJMOihjb25zdCBjaGFyICopVVJMQ1N0cmluZwotICAg
ICAgICAgICAgIHRhcmdldDooY29uc3QgY2hhciAqKXRhcmdldAotICAgICAgICAgICAgICAgIGxl
bjooVUludDMyKWxlbgotICAgICAgICAgICAgICAgIGJ1ZjooY29uc3QgY2hhciAqKWJ1ZgotICAg
ICAgICAgICAgICAgZmlsZTooTlBCb29sKWZpbGUKLSAgICAgICAgIG5vdGlmeURhdGE6KHZvaWQg
Kilub3RpZnlEYXRhCi0gICBzZW5kTm90aWZpY2F0aW9uOihCT09MKXNlbmROb3RpZmljYXRpb24K
LSAgICAgICBhbGxvd0hlYWRlcnM6KEJPT0wpYWxsb3dIZWFkZXJzCi17Ci0gICAgaWYgKCFVUkxD
U3RyaW5nIHx8ICFsZW4gfHwgIWJ1ZikgewotICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9Q
QVJBTTsKLSAgICB9Ci0gICAgCi0gICAgTlNEYXRhICpwb3N0RGF0YSA9IG5pbDsKLQotICAgIGlm
IChmaWxlKSB7Ci0gICAgICAgIC8vIElmIHdlJ3JlIHBvc3RpbmcgYSBmaWxlLCBidWYgaXMgZWl0
aGVyIGEgZmlsZSBVUkwgb3IgYSBwYXRoIHRvIHRoZSBmaWxlLgotICAgICAgICBhdXRvIGJ1ZlN0
cmluZyA9IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZyhrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBidWYsIGtDRlN0cmluZ0VuY29kaW5nV2luZG93c0xhdGluMSkpOwotICAgICAgICBpZiAo
IWJ1ZlN0cmluZykgewotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07Ci0g
ICAgICAgIH0KLSAgICAgICAgTlNVUkwgKmZpbGVVUkwgPSBbTlNVUkwgX3dlYl9VUkxXaXRoRGF0
YUFzU3RyaW5nOihfX2JyaWRnZSBOU1N0cmluZyAqKWJ1ZlN0cmluZy5nZXQoKV07Ci0gICAgICAg
IE5TU3RyaW5nICpwYXRoOwotICAgICAgICBpZiAoW2ZpbGVVUkwgaXNGaWxlVVJMXSkgewotICAg
ICAgICAgICAgcGF0aCA9IFtmaWxlVVJMIHBhdGhdOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgcGF0aCA9IChfX2JyaWRnZSBOU1N0cmluZyAqKWJ1ZlN0cmluZy5nZXQoKTsKLSAgICAg
ICAgfQotICAgICAgICBwb3N0RGF0YSA9IFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mRmlsZTpw
YXRoXTsKLSAgICAgICAgaWYgKCFwb3N0RGF0YSkgewotICAgICAgICAgICAgcmV0dXJuIE5QRVJS
X0ZJTEVfTk9UX0ZPVU5EOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcG9zdERh
dGEgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6YnVmIGxlbmd0aDpsZW5dOwotICAgIH0KLQotICAg
IGlmIChbcG9zdERhdGEgbGVuZ3RoXSA9PSAwKSB7Ci0gICAgICAgIHJldHVybiBOUEVSUl9JTlZB
TElEX1BBUkFNOwotICAgIH0KLQotICAgIE5TTXV0YWJsZVVSTFJlcXVlc3QgKnJlcXVlc3QgPSBb
c2VsZiByZXF1ZXN0V2l0aFVSTENTdHJpbmc6VVJMQ1N0cmluZ107Ci0gICAgW3JlcXVlc3Qgc2V0
SFRUUE1ldGhvZDpAIlBPU1QiXTsKLSAgICAKLSAgICBpZiAoYWxsb3dIZWFkZXJzKSB7Ci0gICAg
ICAgIGlmIChbcG9zdERhdGEgX3dlYl9zdGFydHNXaXRoQmxhbmtMaW5lXSkgewotICAgICAgICAg
ICAgcG9zdERhdGEgPSBbcG9zdERhdGEgc3ViZGF0YVdpdGhSYW5nZTpOU01ha2VSYW5nZSgxLCBb
cG9zdERhdGEgbGVuZ3RoXSAtIDEpXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIE5T
SW50ZWdlciBsb2NhdGlvbiA9IFtwb3N0RGF0YSBfd2ViX2xvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5r
TGluZV07Ci0gICAgICAgICAgICBpZiAobG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgewotICAgICAg
ICAgICAgICAgIC8vIElmIHRoZSBibGFuayBsaW5lIGlzIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxl
IG9mIHBvc3REYXRhLCBldmVyeXRoaW5nIGJlZm9yZSBpcyB0aGUgaGVhZGVyLgotICAgICAgICAg
ICAgICAgIE5TRGF0YSAqaGVhZGVyRGF0YSA9IFtwb3N0RGF0YSBzdWJkYXRhV2l0aFJhbmdlOk5T
TWFrZVJhbmdlKDAsIGxvY2F0aW9uKV07Ci0gICAgICAgICAgICAgICAgTlNNdXRhYmxlRGljdGlv
bmFyeSAqaGVhZGVyID0gW2hlYWRlckRhdGEgX3dlYmtpdF9wYXJzZVJGQzgyMkhlYWRlckZpZWxk
c107Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgZGF0YUxlbmd0aCA9IFtwb3N0RGF0YSBsZW5n
dGhdIC0gbG9jYXRpb247Ci0KLSAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgcGx1Z2lucyBs
aWtlIHRvIHNldCBDb250ZW50LUxlbmd0aCB0aGVtc2VsdmVzIHdoZW4gdGhleSBwb3N0LAotICAg
ICAgICAgICAgICAgIC8vIGJ1dCBXZWJGb3VuZGF0aW9uIGRvZXMgbm90IGxpa2UgdGhhdC4gU28g
d2Ugd2lsbCByZW1vdmUgdGhlIGhlYWRlcgotICAgICAgICAgICAgICAgIC8vIGFuZCBpbnN0ZWFk
IHRydW5jYXRlIHRoZSBkYXRhIHRvIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoLgotICAgICAgICAgICAg
ICAgIE5TU3RyaW5nICpjb250ZW50TGVuZ3RoID0gW2hlYWRlciBvYmplY3RGb3JLZXk6QCJDb250
ZW50LUxlbmd0aCJdOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbmls
KQotICAgICAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoID0gc3RkOjptaW48dW5zaWduZWQ+KFtj
b250ZW50TGVuZ3RoIGludFZhbHVlXSwgZGF0YUxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgW2hl
YWRlciByZW1vdmVPYmplY3RGb3JLZXk6QCJDb250ZW50LUxlbmd0aCJdOwotCi0gICAgICAgICAg
ICAgICAgaWYgKFtoZWFkZXIgY291bnRdID4gMCkgewotICAgICAgICAgICAgICAgICAgICBbcmVx
dWVzdCBzZXRBbGxIVFRQSGVhZGVyRmllbGRzOmhlYWRlcl07Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIC8vIEV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGJsYW5rIGxpbmUgaXMgdGhl
IGFjdHVhbCBjb250ZW50IG9mIHRoZSBQT1NULgotICAgICAgICAgICAgICAgIHBvc3REYXRhID0g
W3Bvc3REYXRhIHN1YmRhdGFXaXRoUmFuZ2U6TlNNYWtlUmFuZ2UobG9jYXRpb24sIGRhdGFMZW5n
dGgpXTsKLQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChbcG9zdERhdGEg
bGVuZ3RoXSA9PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFBsdWctaW5zIGV4cGVjdCB0byByZWNlaXZlIHVu
Y2FjaGVkIGRhdGEgd2hlbiBkb2luZyBhIFBPU1QgKDMzNDcxMzQpLgotICAgIFtyZXF1ZXN0IHNl
dENhY2hlUG9saWN5Ok5TVVJMUmVxdWVzdFJlbG9hZElnbm9yaW5nQ2FjaGVEYXRhXTsKLSAgICBb
cmVxdWVzdCBzZXRIVFRQQm9keTpwb3N0RGF0YV07Ci0gICAgCi0gICAgcmV0dXJuIFtzZWxmIGxv
YWRSZXF1ZXN0OnJlcXVlc3QgaW5UYXJnZXQ6dGFyZ2V0IHdpdGhOb3RpZnlEYXRhOm5vdGlmeURh
dGEgc2VuZE5vdGlmaWNhdGlvbjpzZW5kTm90aWZpY2F0aW9uXTsKLX0KLQotLSAoTlBFcnJvcilw
b3N0VVJMTm90aWZ5Oihjb25zdCBjaGFyICopVVJMQ1N0cmluZwotICAgICAgICAgICAgICAgICAg
dGFyZ2V0Oihjb25zdCBjaGFyICopdGFyZ2V0Ci0gICAgICAgICAgICAgICAgICAgICBsZW46KFVJ
bnQzMilsZW4KLSAgICAgICAgICAgICAgICAgICAgIGJ1ZjooY29uc3QgY2hhciAqKWJ1ZgotICAg
ICAgICAgICAgICAgICAgICBmaWxlOihOUEJvb2wpZmlsZQotICAgICAgICAgICAgICBub3RpZnlE
YXRhOih2b2lkICopbm90aWZ5RGF0YQotewotICAgIExPRyhQbHVnaW5zLCAiTlBOX1Bvc3RVUkxO
b3RpZnk6ICVzIiwgVVJMQ1N0cmluZyk7Ci0gICAgcmV0dXJuIFtzZWxmIF9wb3N0VVJMOlVSTENT
dHJpbmcgdGFyZ2V0OnRhcmdldCBsZW46bGVuIGJ1ZjpidWYgZmlsZTpmaWxlIG5vdGlmeURhdGE6
bm90aWZ5RGF0YSBzZW5kTm90aWZpY2F0aW9uOllFUyBhbGxvd0hlYWRlcnM6WUVTXTsKLX0KLQot
LShOUEVycm9yKXBvc3RVUkw6KGNvbnN0IGNoYXIgKilVUkxDU3RyaW5nCi0gICAgICAgICAgIHRh
cmdldDooY29uc3QgY2hhciAqKXRhcmdldAotICAgICAgICAgICAgICBsZW46KFVJbnQzMilsZW4K
LSAgICAgICAgICAgICAgYnVmOihjb25zdCBjaGFyICopYnVmCi0gICAgICAgICAgICAgZmlsZToo
TlBCb29sKWZpbGUKLXsKLSAgICBMT0coUGx1Z2lucywgIk5QTl9Qb3N0VVJMOiAlcyIsIFVSTENT
dHJpbmcpOyAgICAgICAgCi0gICAgLy8gQXMgZG9jdW1lbnRlZCwgb25seSBhbGxvdyBoZWFkZXJz
IHRvIGJlIHNwZWNpZmllZCB2aWEgTlBQX1Bvc3RVUkwgd2hlbiB1c2luZyBhIGZpbGUuCi0gICAg
cmV0dXJuIFtzZWxmIF9wb3N0VVJMOlVSTENTdHJpbmcgdGFyZ2V0OnRhcmdldCBsZW46bGVuIGJ1
ZjpidWYgZmlsZTpmaWxlIG5vdGlmeURhdGE6TlVMTCBzZW5kTm90aWZpY2F0aW9uOk5PIGFsbG93
SGVhZGVyczpmaWxlXTsKLX0KLQotLShOUEVycm9yKW5ld1N0cmVhbTooTlBNSU1FVHlwZSl0eXBl
IHRhcmdldDooY29uc3QgY2hhciAqKXRhcmdldCBzdHJlYW06KE5QU3RyZWFtKiopc3RyZWFtCi17
Ci0gICAgTE9HKFBsdWdpbnMsICJOUE5fTmV3U3RyZWFtIik7Ci0gICAgcmV0dXJuIE5QRVJSX0dF
TkVSSUNfRVJST1I7Ci19Ci0KLS0oTlBFcnJvcil3cml0ZTooTlBTdHJlYW0qKXN0cmVhbSBsZW46
KFNJbnQzMilsZW4gYnVmZmVyOih2b2lkICopYnVmZmVyCi17Ci0gICAgTE9HKFBsdWdpbnMsICJO
UE5fV3JpdGUiKTsKLSAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLX0KLQotLShOUEVy
cm9yKWRlc3Ryb3lTdHJlYW06KE5QU3RyZWFtKilzdHJlYW0gcmVhc29uOihOUFJlYXNvbilyZWFz
b24KLXsKLSAgICBMT0coUGx1Z2lucywgIk5QTl9EZXN0cm95U3RyZWFtIik7Ci0gICAgLy8gVGhp
cyBmdW5jdGlvbiBkb2VzIGEgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBOUFN0cmVh
bSBwcm92aWRlZCBhY3R1YWxseQotICAgIC8vIGJlbG9uZ3MgdG8gdGhlIHBsdWctaW4gdGhhdCBw
cm92aWRlZCBpdCwgd2hpY2ggZml4ZXMgYSBjcmFzaCBpbiB0aGUgRGl2WCAKLSAgICAvLyBwbHVn
LWluOiA8cmRhcjovL3Byb2JsZW0vNTA5Mzg2Mj4gfCBodHRwOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzIwMwotICAgIGlmICghc3RyZWFtIHx8IFdlYk5ldHNjYXBlUGx1Z2lu
U3RyZWFtOjpvd25lckZvclN0cmVhbShzdHJlYW0pICE9IHBsdWdpbikgewotICAgICAgICBMT0co
UGx1Z2lucywgIkludmFsaWQgTlBTdHJlYW0gcGFzc2VkIHRvIE5QTl9EZXN0cm95U3RyZWFtOiAl
cCIsIHN0cmVhbSk7Ci0gICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX0lOU1RBTkNFX0VSUk9S
OwotICAgIH0KLSAgICAKLSAgICBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbSogYnJvd3NlclN0cmVh
bSA9IHN0YXRpY19jYXN0PFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtKj4oc3RyZWFtLT5uZGF0YSk7
Ci0gICAgYnJvd3NlclN0cmVhbS0+Y2FuY2VsTG9hZEFuZERlc3Ryb3lTdHJlYW1XaXRoRXJyb3Io
YnJvd3NlclN0cmVhbS0+ZXJyb3JGb3JSZWFzb24ocmVhc29uKSk7Ci0gICAgCi0gICAgcmV0dXJu
IE5QRVJSX05PX0VSUk9SOwotfQotCi0tIChjb25zdCBjaGFyICopdXNlckFnZW50Ci17Ci0gICAg
TlNTdHJpbmcgKnVzZXJBZ2VudCA9IFtbc2VsZiB3ZWJWaWV3XSB1c2VyQWdlbnRGb3JVUkw6X2Jh
c2VVUkwuZ2V0KCldOwotICAgIAotICAgIGlmIChfaXNTaWx2ZXJsaWdodCkgewotICAgICAgICAv
LyBTaWx2ZXJsaWdodCBoYXMgYSB3b3JrYXJvdW5kIGZvciBhIGxlYWsgaW4gU2FmYXJpIDIuIFRo
aXMgd29ya2Fyb3VuZCBpcyAKLSAgICAgICAgLy8gYXBwbGllZCB3aGVuIHRoZSB1c2VyIGFnZW50
IGRvZXMgbm90IGNvbnRhaW4gIlZlcnNpb24vMyIgc28gd2UgYXBwZW5kIGl0Ci0gICAgICAgIC8v
IGF0IHRoZSBlbmQgb2YgdGhlIHVzZXIgYWdlbnQuCi0gICAgICAgIHVzZXJBZ2VudCA9IFt1c2Vy
QWdlbnQgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCIgVmVyc2lvbi8zLjIuMSJdOwotICAgIH0g
ICAgICAgIAotICAgICAgICAKLSAgICByZXR1cm4gW3VzZXJBZ2VudCBVVEY4U3RyaW5nXTsKLX0K
LQotLSh2b2lkKXN0YXR1czooY29uc3QgY2hhciAqKW1lc3NhZ2UKLXsgICAgCi0gICAgYXV0byBz
dGF0dXMgPSBhZG9wdENGKENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoTlVMTCwgbWVzc2FnZSA/
IG1lc3NhZ2UgOiAiIiwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KSk7Ci0gICAgaWYgKCFzdGF0dXMp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJOUE5fU3RhdHVzOiB0aGUgbWVzc2FnZSB3YXMgbm90IHZh
bGlkIFVURi04Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgTE9HKFBsdWdp
bnMsICJOUE5fU3RhdHVzOiAlQCIsIHN0YXR1cy5nZXQoKSk7Ci0gICAgV2ViVmlldyAqd3YgPSBb
c2VsZiB3ZWJWaWV3XTsKLSAgICBbW3d2IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Ond2
IHNldFN0YXR1c1RleHQ6KF9fYnJpZGdlIE5TU3RyaW5nICopc3RhdHVzLmdldCgpXTsKLX0KLQot
LSh2b2lkKWludmFsaWRhdGVSZWN0OihOUFJlY3QgKilpbnZhbGlkUmVjdAotewotICAgIExPRyhQ
bHVnaW5zLCAiTlBOX0ludmFsaWRhdGVSZWN0Iik7Ci0gICAgW3NlbGYgaW52YWxpZGF0ZVBsdWdp
bkNvbnRlbnRSZWN0Ok5TTWFrZVJlY3QoaW52YWxpZFJlY3QtPmxlZnQsIGludmFsaWRSZWN0LT50
b3AsCi0gICAgICAgIChmbG9hdClpbnZhbGlkUmVjdC0+cmlnaHQgLSBpbnZhbGlkUmVjdC0+bGVm
dCwgKGZsb2F0KWludmFsaWRSZWN0LT5ib3R0b20gLSBpbnZhbGlkUmVjdC0+dG9wKV07Ci19Ci0K
LS0gKHZvaWQpaW52YWxpZGF0ZVJlZ2lvbjooTlBSZWdpb24paW52YWxpZFJlZ2lvbgotewotICAg
IExPRyhQbHVnaW5zLCAiTlBOX0ludmFsaWRhdGVSZWdpb24iKTsKLSAgICBOU1JlY3QgaW52YWxp
ZFJlY3QgPSBOU1plcm9SZWN0OwotICAgIHN3aXRjaCAoZHJhd2luZ01vZGVsKSB7Ci0gICAgICAg
IGNhc2UgTlBEcmF3aW5nTW9kZWxDb3JlR3JhcGhpY3M6Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IENHUmVjdCBjZ1JlY3QgPSBDR1BhdGhHZXRCb3VuZGluZ0JveCgoTlBDR1JlZ2lvbilpbnZhbGlk
UmVnaW9uKTsKLSAgICAgICAgICAgIGludmFsaWRSZWN0ID0gKihOU1JlY3QqKSZjZ1JlY3Q7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAg
ICBbc2VsZiBpbnZhbGlkYXRlUGx1Z2luQ29udGVudFJlY3Q6aW52YWxpZFJlY3RdOwotfQotCi0t
KHZvaWQpZm9yY2VSZWRyYXcKLXsKLSAgICBMT0coUGx1Z2lucywgImZvcmNlUmVkcmF3Iik7Ci0g
ICAgW3NlbGYgaW52YWxpZGF0ZVBsdWdpbkNvbnRlbnRSZWN0OltzZWxmIGJvdW5kc11dOwotICAg
IFtbc2VsZiB3aW5kb3ddIGRpc3BsYXlJZk5lZWRlZF07Ci19Ci0KLS0gKE5QRXJyb3IpZ2V0VmFy
aWFibGU6KE5QTlZhcmlhYmxlKXZhcmlhYmxlIHZhbHVlOih2b2lkICopdmFsdWUKLXsKLSAgICBz
d2l0Y2ggKHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YXJpYWJsZSkpIHsKLSAgICAgICAgY2FzZSBO
UE5WV2luZG93TlBPYmplY3Q6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9
IGNvcmUoW3NlbGYgd2ViRnJhbWVdKTsKLSAgICAgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3Jp
cHRPYmplY3QgPSBmcmFtZSA/IGZyYW1lLT5zY3JpcHQoKS53aW5kb3dTY3JpcHROUE9iamVjdCgp
IDogMDsKLQotICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJl
dGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVj
dHMvcGx1Z2lucy9ucHJ1bnRpbWUuaHRtbCNicm93c2VyYWNjZXNzPgotICAgICAgICAgICAgaWYg
KHdpbmRvd1NjcmlwdE9iamVjdCkKLSAgICAgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdCh3
aW5kb3dTY3JpcHRPYmplY3QpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB2b2lkICoqdiA9
ICh2b2lkICoqKXZhbHVlOwotICAgICAgICAgICAgKnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7Ci0K
LSAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAg
IGNhc2UgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDoKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKCFfZWxlbWVudE5QT2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFfZWxlbWVudCkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAgICAg
ICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKHNlbGYud2ViRnJhbWUpOwotICAgICAgICAg
ICAgICAgIGlmICghZnJhbWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5F
UklDX0VSUk9SOwotCi0gICAgICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gZnJh
bWUtPnNjcmlwdCgpLmpzT2JqZWN0Rm9yUGx1Z2luRWxlbWVudChfZWxlbWVudC5nZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFvYmplY3QpCi0gICAgICAgICAgICAgICAgICAgIF9lbGVtZW50
TlBPYmplY3QgPSBfTlBOX0NyZWF0ZU5vU2NyaXB0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBfZWxlbWVudE5QT2JqZWN0ID0gX05QTl9DcmVhdGVT
Y3JpcHRPYmplY3QoMCwgb2JqZWN0LCBmcmFtZS0+c2NyaXB0KCkuYmluZGluZ1Jvb3RPYmplY3Qo
KSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBl
Y3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemls
bGEub3JnL3Byb2plY3RzL3BsdWdpbnMvbnBydW50aW1lLmh0bWwjYnJvd3NlcmFjY2Vzcz4KLSAg
ICAgICAgICAgIGlmIChfZWxlbWVudE5QT2JqZWN0KQotICAgICAgICAgICAgICAgIF9OUE5fUmV0
YWluT2JqZWN0KF9lbGVtZW50TlBPYmplY3QpOwotCi0gICAgICAgICAgICAqKHZvaWQgKiopdmFs
dWUgPSBfZWxlbWVudE5QT2JqZWN0OwotCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJS
T1I7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhc2UgTlBOVnBsdWdpbkRyYXdpbmdN
b2RlbDoKLSAgICAgICAgewotICAgICAgICAgICAgKihOUERyYXdpbmdNb2RlbCAqKXZhbHVlID0g
ZHJhd2luZ01vZGVsOwotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAgICAg
ICB9Ci0KLSAgICAgICAgY2FzZSBOUE5Wc3VwcG9ydHNDb3JlR3JhcGhpY3NCb29sOgotICAgICAg
ICB7Ci0gICAgICAgICAgICAqKE5QQm9vbCAqKXZhbHVlID0gVFJVRTsKLSAgICAgICAgICAgIHJl
dHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTlBOVnN1cHBv
cnRzT3BlbkdMQm9vbDoKLSAgICAgICAgewotICAgICAgICAgICAgKihOUEJvb2wgKil2YWx1ZSA9
IEZBTFNFOwotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBjYXNlIE5QTlZzdXBwb3J0c0NvcmVBbmltYXRpb25Cb29sOgotICAg
ICAgICB7Ci0gICAgICAgICAgICAqKE5QQm9vbCAqKXZhbHVlID0gVFJVRTsKLSAgICAgICAgICAg
IHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTlBOVnN1
cHBvcnRzQ29jb2FCb29sOgotICAgICAgICB7Ci0gICAgICAgICAgICAqKE5QQm9vbCAqKXZhbHVl
ID0gVFJVRTsKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgfQot
Ci0gICAgICAgIGNhc2UgTlBOVnByaXZhdGVNb2RlQm9vbDoKLSAgICAgICAgewotICAgICAgICAg
ICAgKihOUEJvb2wgKil2YWx1ZSA9IF9pc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQ7Ci0gICAgICAg
ICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIFdL
TlZTdXBwb3J0c0NvbXBvc2l0aW5nQ29yZUFuaW1hdGlvblBsdWdpbnNCb29sOgotICAgICAgICB7
Ci0gICAgICAgICAgICAqKE5QQm9vbCAqKXZhbHVlID0gW1tbc2VsZiB3ZWJWaWV3XSBwcmVmZXJl
bmNlc10gYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWRdOwotICAgICAgICAgICAgcmV0dXJu
IE5QRVJSX05PX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotfQot
Ci0tIChOUEVycm9yKXNldFZhcmlhYmxlOihOUFBWYXJpYWJsZSl2YXJpYWJsZSB2YWx1ZToodm9p
ZCAqKXZhbHVlCi17Ci0gICAgc3dpdGNoICh2YXJpYWJsZSkgewotICAgICAgICBjYXNlIE5QUFZw
bHVnaW5EcmF3aW5nTW9kZWw6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIENhbiBvbmx5IHNl
dCBkcmF3aW5nIG1vZGVsIGluc2lkZSBOUFBfTmV3KCkKLSAgICAgICAgICAgIGlmIChzZWxmICE9
IFtbc2VsZiBjbGFzc10gY3VycmVudFBsdWdpblZpZXddKQotICAgICAgICAgICAgICAgIHJldHVy
biBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBDaGVj
ayBmb3IgdmFsaWQsIHN1cHBvcnRlZCBkcmF3aW5nIG1vZGVsCi0gICAgICAgICAgICBOUERyYXdp
bmdNb2RlbCBuZXdEcmF3aW5nTW9kZWwgPSAoTlBEcmF3aW5nTW9kZWwpKHVpbnRwdHJfdCl2YWx1
ZTsKLSAgICAgICAgICAgIHN3aXRjaCAobmV3RHJhd2luZ01vZGVsKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gU3VwcG9ydGVkIGRyYXdpbmcgbW9kZWxzOgotICAgICAgICAgICAgICAgIGNhc2UgTlBE
cmF3aW5nTW9kZWxDb3JlR3JhcGhpY3M6Ci0gICAgICAgICAgICAgICAgY2FzZSBOUERyYXdpbmdN
b2RlbENvcmVBbmltYXRpb246Ci0gICAgICAgICAgICAgICAgICAgIGRyYXdpbmdNb2RlbCA9IG5l
d0RyYXdpbmdNb2RlbDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9S
OwotICAgICAgICAgICAgICAgICAgICAKLQotICAgICAgICAgICAgICAgIC8vIFVuc3VwcG9ydGVk
IChvciB1bmtub3duKSBkcmF3aW5nIG1vZGVsczoKLSAgICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdpbiAlQCB1c2VzIHVuc3VwcG9y
dGVkIGRyYXdpbmcgbW9kZWw6ICVkIiwgX2V2ZW50SGFuZGxlci5nZXQoKSwgZHJhd2luZ01vZGVs
KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhc2UgTlBQVnBsdWdpbkV2
ZW50TW9kZWw6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIENhbiBvbmx5IHNldCBldmVudCBt
b2RlbCBpbnNpZGUgTlBQX05ldygpCi0gICAgICAgICAgICBpZiAoc2VsZiAhPSBbW3NlbGYgY2xh
c3NdIGN1cnJlbnRQbHVnaW5WaWV3XSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VO
RVJJQ19FUlJPUjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHZhbGlk
LCBzdXBwb3J0ZWQgZXZlbnQgbW9kZWwKLSAgICAgICAgICAgIE5QRXZlbnRNb2RlbCBuZXdFdmVu
dE1vZGVsID0gKE5QRXZlbnRNb2RlbCkodWludHB0cl90KXZhbHVlOwotICAgICAgICAgICAgc3dp
dGNoIChuZXdFdmVudE1vZGVsKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3VwcG9ydGVkIGV2ZW50
IG1vZGVsczoKLSAgICAgICAgICAgICAgICBjYXNlIE5QRXZlbnRNb2RlbENvY29hOgotICAgICAg
ICAgICAgICAgICAgICBldmVudE1vZGVsID0gbmV3RXZlbnRNb2RlbDsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgLy8gVW5zdXBwb3J0ZWQgKG9yIHVua25vd24pIGV2ZW50IG1vZGVsczoK
LSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBMT0coUGx1Z2lu
cywgIlBsdWdpbiAlQCB1c2VzIHVuc3VwcG9ydGVkIGV2ZW50IG1vZGVsOiAlZCIsIF9ldmVudEhh
bmRsZXIuZ2V0KCksIGV2ZW50TW9kZWwpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlBF
UlJfR0VORVJJQ19FUlJPUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJP
UjsKLSAgICB9Ci19Ci0KLS0gKHVpbnQzMl90KXNjaGVkdWxlVGltZXJXaXRoSW50ZXJ2YWw6KHVp
bnQzMl90KWludGVydmFsIHJlcGVhdDooTlBCb29sKXJlcGVhdCB0aW1lckZ1bmM6KHZvaWQgKCop
KE5QUCBucHAsIHVpbnQzMl90IHRpbWVySUQpKXRpbWVyRnVuYwotewotICAgIGlmICghdGltZXJG
dW5jKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBpZiAoIXRpbWVycykKLSAgICAgICAg
dGltZXJzID0gbWFrZVVuaXF1ZTxIYXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8UGx1
Z2luVGltZXI+Pj4oKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5UaW1lcj4qIHNsb3Qg
PSBudWxscHRyOwotICAgIHVpbnQzMl90IHRpbWVySUQ7Ci0gICAgZG8KLSAgICAgICAgdGltZXJJ
RCA9ICsrY3VycmVudFRpbWVySUQ7Ci0gICAgd2hpbGUgKCF0aW1lcnMtPmlzVmFsaWRLZXkodGlt
ZXJJRCkgfHwgKihzbG90ID0gJnRpbWVycy0+YWRkKHRpbWVySUQsIG51bGxwdHIpLml0ZXJhdG9y
LT52YWx1ZSkpOwotCi0gICAgYXV0byB0aW1lciA9IG1ha2VVbmlxdWU8UGx1Z2luVGltZXI+KHBs
dWdpbiwgdGltZXJJRCwgaW50ZXJ2YWwsIHJlcGVhdCwgdGltZXJGdW5jKTsKLQotICAgIGlmIChf
c2hvdWxkRmlyZVRpbWVycykKLSAgICAgICAgdGltZXItPnN0YXJ0KF9pc0NvbXBsZXRlbHlPYnNj
dXJlZCk7Ci0gICAgCi0gICAgKnNsb3QgPSBXVEZNb3ZlKHRpbWVyKTsKLQotICAgIHJldHVybiB0
aW1lcklEOwotfQotCi0tICh2b2lkKXVuc2NoZWR1bGVUaW1lcjoodWludDMyX3QpdGltZXJJRAot
ewotICAgIGlmICghdGltZXJzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgdGltZXJzLT5y
ZW1vdmUodGltZXJJRCk7Ci19Ci0KLS0gKE5QRXJyb3IpcG9wVXBDb250ZXh0TWVudTooTlBNZW51
ICopbWVudQotewotICAgIE5TRXZlbnQgKmN1cnJlbnRFdmVudCA9IFtOU0FwcCBjdXJyZW50RXZl
bnRdOwotICAgIAotICAgIC8vIE5QTl9Qb3BVcENvbnRleHRNZW51IG11c3QgYmUgY2FsbGVkIGZy
b20gd2l0aGluIHRoZSBwbHVnLWluJ3MgTlBQX0hhbmRsZUV2ZW50LgotICAgIGlmICghY3VycmVu
dEV2ZW50KQotICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAKLSAgICBb
TlNNZW51IHBvcFVwQ29udGV4dE1lbnU6KF9fYnJpZGdlIE5TTWVudSAqKW1lbnUgd2l0aEV2ZW50
OmN1cnJlbnRFdmVudCBmb3JWaWV3OnNlbGZdOwotICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsK
LX0KLQotLSAoTlBFcnJvcilnZXRWYXJpYWJsZTooTlBOVVJMVmFyaWFibGUpdmFyaWFibGUgZm9y
VVJMOihjb25zdCBjaGFyKil1cmwgdmFsdWU6KGNoYXIqKil2YWx1ZSBsZW5ndGg6KHVpbnQzMl90
KilsZW5ndGgKLXsKLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgICAgIGNhc2UgTlBOVVJM
VkNvb2tpZTogewotICAgICAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTlNVUkwgKlVSTCA9IFtzZWxmIFVSTFdpdGhD
U3RyaW5nOnVybF07Ci0gICAgICAgICAgICBpZiAoIVVSTCkKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3Nl
bGYgd2ViRnJhbWVdKSkgewotICAgICAgICAgICAgICAgIGF1dG8qIGRvY3VtZW50ID0gZnJhbWUt
PmRvY3VtZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYXV0byog
cGFnZSA9IGRvY3VtZW50LT5wYWdlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYWdlKQotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIFN0cmluZyBjb29raWVT
dHJpbmcgPSBwYWdlLT5jb29raWVKYXIoKS5jb29raWVzKCpkb2N1bWVudCwgVVJMKTsKLSAgICAg
ICAgICAgICAgICBDU3RyaW5nIGNvb2tpZVN0cmluZ1VURjggPSBjb29raWVTdHJpbmcudXRmOCgp
OwotICAgICAgICAgICAgICAgIGlmIChjb29raWVTdHJpbmdVVEY4LmlzTnVsbCgpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLQotICAgICAgICAgICAg
ICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihOUE5fTWVtQWxsb2MoY29va2llU3RyaW5n
VVRGOC5sZW5ndGgoKSkpOwotICAgICAgICAgICAgICAgIG1lbWNweSgqdmFsdWUsIGNvb2tpZVN0
cmluZ1VURjguZGF0YSgpLCBjb29raWVTdHJpbmdVVEY4Lmxlbmd0aCgpKTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAobGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICAq
bGVuZ3RoID0gY29va2llU3RyaW5nVVRGOC5sZW5ndGgoKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIE5QTlVSTFZQcm94eTogewotICAgICAgICAgICAgaWYgKCF2
YWx1ZSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
TlNVUkwgKlVSTCA9IFtzZWxmIFVSTFdpdGhDU3RyaW5nOnVybF07Ci0gICAgICAgICAgICBpZiAo
IVVSTCkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgVmVjdG9yPFByb3h5
U2VydmVyPiBwcm94eVNlcnZlcnMgPSBwcm94eVNlcnZlcnNGb3JVUkwoVVJMKTsKLSAgICAgICAg
ICAgIENTdHJpbmcgcHJveGllc1VURjggPSB0b1N0cmluZyhwcm94eVNlcnZlcnMpLnV0ZjgoKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KE5Q
Tl9NZW1BbGxvYyhwcm94aWVzVVRGOC5sZW5ndGgoKSkpOwotICAgICAgICAgICAgbWVtY3B5KCp2
YWx1ZSwgcHJveGllc1VURjguZGF0YSgpLCBwcm94aWVzVVRGOC5sZW5ndGgoKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgaWYgKGxlbmd0aCkKLSAgICAgICAgICAgICAgICpsZW5ndGggPSBw
cm94aWVzVVRGOC5sZW5ndGgoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIE5Q
RVJSX05PX0VSUk9SOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBOUEVSUl9HRU5FUklD
X0VSUk9SOwotfQotCi0tIChOUEVycm9yKXNldFZhcmlhYmxlOihOUE5VUkxWYXJpYWJsZSl2YXJp
YWJsZSBmb3JVUkw6KGNvbnN0IGNoYXIqKXVybCB2YWx1ZTooY29uc3QgY2hhciopdmFsdWUgbGVu
Z3RoOih1aW50MzJfdClsZW5ndGgKLXsKLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgICAg
IGNhc2UgTlBOVVJMVkNvb2tpZTogewotICAgICAgICAgICAgTlNVUkwgKlVSTCA9IFtzZWxmIFVS
TFdpdGhDU3RyaW5nOnVybF07Ci0gICAgICAgICAgICBpZiAoIVVSTCkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9
IFN0cmluZzo6ZnJvbVVURjgodmFsdWUsIGxlbmd0aCk7Ci0gICAgICAgICAgICBpZiAoIWNvb2tp
ZVN0cmluZykKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgd2ViRnJhbWVdKSkgewotICAgICAgICAg
ICAgICAgIGlmIChhdXRvKiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChhdXRvKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHBhZ2UtPmNvb2tpZUphcigpLnNldENvb2tpZXMoKmRvY3VtZW50LCBV
UkwsIGNvb2tpZVN0cmluZyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJl
dHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBOUE5VUkxWUHJveHk6Ci0gICAg
ICAgICAgICAvLyBDYW4ndCBzZXQgdGhlIHByb3h5IGZvciBhIFVSTC4KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLX0KLQotLSAoTlBF
cnJvcilnZXRBdXRoZW50aWNhdGlvbkluZm9XaXRoUHJvdG9jb2w6KGNvbnN0IGNoYXIqKXByb3Rv
Y29sU3RyIGhvc3Q6KGNvbnN0IGNoYXIqKWhvc3RTdHIgcG9ydDooaW50MzJfdClwb3J0IHNjaGVt
ZTooY29uc3QgY2hhciopc2NoZW1lU3RyIHJlYWxtOihjb25zdCBjaGFyKilyZWFsbVN0cgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWU6KGNoYXIqKil1c2VybmFt
ZVN0ciB1c2VybmFtZUxlbmd0aDoodWludDMyX3QqKXVzZXJuYW1lTGVuZ3RoIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ6KGNoYXIqKilwYXNzd29yZFN0ciBw
YXNzd29yZExlbmd0aDoodWludDMyX3QqKXBhc3N3b3JkTGVuZ3RoCi17Ci0gICAgaWYgKCFwcm90
b2NvbFN0ciB8fCAhaG9zdFN0ciB8fCAhc2NoZW1lU3RyIHx8ICFyZWFsbVN0ciB8fCAhdXNlcm5h
bWVTdHIgfHwgIXVzZXJuYW1lTGVuZ3RoIHx8ICFwYXNzd29yZFN0ciB8fCAhcGFzc3dvcmRMZW5n
dGgpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAKLSAgICBDU3RyaW5n
IHVzZXJuYW1lOwotICAgIENTdHJpbmcgcGFzc3dvcmQ7Ci0gICAgaWYgKCFnZXRBdXRoZW50aWNh
dGlvbkluZm8ocHJvdG9jb2xTdHIsIGhvc3RTdHIsIHBvcnQsIHNjaGVtZVN0ciwgcmVhbG1TdHIs
IHVzZXJuYW1lLCBwYXNzd29yZCkpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9S
OwotICAgIAotICAgICp1c2VybmFtZUxlbmd0aCA9IHVzZXJuYW1lLmxlbmd0aCgpOwotICAgICp1
c2VybmFtZVN0ciA9IHN0YXRpY19jYXN0PGNoYXIqPihOUE5fTWVtQWxsb2ModXNlcm5hbWUubGVu
Z3RoKCkpKTsKLSAgICBtZW1jcHkoKnVzZXJuYW1lU3RyLCB1c2VybmFtZS5kYXRhKCksIHVzZXJu
YW1lLmxlbmd0aCgpKTsKLSAgICAKLSAgICAqcGFzc3dvcmRMZW5ndGggPSBwYXNzd29yZC5sZW5n
dGgoKTsKLSAgICAqcGFzc3dvcmRTdHIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oTlBOX01lbUFsbG9j
KHBhc3N3b3JkLmxlbmd0aCgpKSk7Ci0gICAgbWVtY3B5KCpwYXNzd29yZFN0ciwgcGFzc3dvcmQu
ZGF0YSgpLCBwYXNzd29yZC5sZW5ndGgoKSk7Ci0gICAgCi0gICAgcmV0dXJuIE5QRVJSX05PX0VS
Uk9SOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJOZXRzY2FwZVBsdWdpblZpZXcg
KEludGVybmFsKQotCi0tIChCT09MKV9zaG91bGRDYW5jZWxTcmNTdHJlYW0KLXsKLSAgICBBU1NF
UlQoX2lzU3RhcnRlZCk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgaWYgd2Ugc2hvdWxkIGNhbmNlbCB0
aGUgbG9hZAotICAgIE5QQm9vbCBjYW5jZWxTcmNTdHJlYW0gPSAwOwotICAgIGlmIChbX3BsdWdp
blBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5nZXR2YWx1ZSAmJgotICAgICAgICBbX3BsdWdp
blBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5nZXR2YWx1ZShwbHVnaW4sIE5QUFZwbHVnaW5D
YW5jZWxTcmNTdHJlYW0sICZjYW5jZWxTcmNTdHJlYW0pID09IE5QRVJSX05PX0VSUk9SICYmIGNh
bmNlbFNyY1N0cmVhbSkKLSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICAKLSAgICByZXR1cm4gTk87
Ci19Ci0KLS0gKE5QRXJyb3IpX2NyZWF0ZVBsdWdpbgotewotICAgIHBsdWdpbiA9IChOUFApY2Fs
bG9jKDEsIHNpemVvZihOUFBfdCkpOwotICAgIHBsdWdpbi0+bmRhdGEgPSBzZWxmOwotCi0gICAg
QVNTRVJUKFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPm5ld3ApOwotCi0gICAg
Ly8gTlBOX05ldygpLCB3aGljaCBjcmVhdGVzIHRoZSBwbHVnLWluIGluc3RhbmNlLCBzaG91bGQg
bmV2ZXIgYmUgY2FsbGVkIHdoaWxlIGNhbGxpbmcgYSBwbHVnLWluIGZ1bmN0aW9uIGZvciB0aGF0
IGluc3RhbmNlLgotICAgIEFTU0VSVChwbHVnaW5GdW5jdGlvbkNhbGxEZXB0aCA9PSAwKTsKLQot
ICAgIF9pc0ZsYXNoID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIGJ1bmRsZUlkZW50aWZpZXJdID09
ICJjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIucGx1Z2luIjsKLSAgICBfaXNTaWx2ZXJsaWdo
dCA9IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBidW5kbGVJZGVudGlmaWVyXSA9PSAiY29tLm1pY3Jv
c29mdC5TaWx2ZXJsaWdodFBsdWdpbiI7Ci0KLSAgICBbW3NlbGYgY2xhc3NdIHNldEN1cnJlbnRQ
bHVnaW5WaWV3OnNlbGZdOwotICAgIE5QRXJyb3IgbnBFcnIgPSBbX3BsdWdpblBhY2thZ2UuZ2V0
KCkgcGx1Z2luRnVuY3NdLT5uZXdwKGNvbnN0X2Nhc3Q8Y2hhcio+KFtfTUlNRVR5cGUuZ2V0KCkg
Y1N0cmluZ10pLCBwbHVnaW4sIF9tb2RlLCBhcmdzQ291bnQsIGNBdHRyaWJ1dGVzLCBjVmFsdWVz
LCBOVUxMKTsKLSAgICBbW3NlbGYgY2xhc3NdIHNldEN1cnJlbnRQbHVnaW5WaWV3Om5pbF07Ci0g
ICAgTE9HKFBsdWdpbnMsICJOUFBfTmV3OiAlZCIsIG5wRXJyKTsKLSAgICByZXR1cm4gbnBFcnI7
Ci19Ci0KLS0gKHZvaWQpX2Rlc3Ryb3lQbHVnaW4KLXsKLSAgICBOUEVycm9yIG5wRXJyOwotICAg
IG5wRXJyID0gIVtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPmRlc3Ryb3kocGx1
Z2luLCBOVUxMKTsKLSAgICBMT0coUGx1Z2lucywgIk5QUF9EZXN0cm95OiAlZCIsIG5wRXJyKTsK
LQotICAgIGlmIChfZWxlbWVudE5QT2JqZWN0KQotICAgICAgICBfTlBOX1JlbGVhc2VPYmplY3Qo
X2VsZW1lbnROUE9iamVjdCk7Ci0KLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiB3
ZWJGcmFtZV0pKQotICAgICAgICBmcmFtZS0+c2NyaXB0KCkuY2xlYW51cFNjcmlwdE9iamVjdHNG
b3JQbHVnaW4oc2VsZik7Ci0gICAgICAgIAotICAgIGZyZWUocGx1Z2luKTsKLSAgICBwbHVnaW4g
PSBOVUxMOwotfQotCi0tICh2b2lkKV9yZWRlbGl2ZXJTdHJlYW0KLXsKLSAgICBpZiAoW3NlbGYg
ZGF0YVNvdXJjZV0gJiYgX2lzU3RhcnRlZCkgewotICAgICAgICAvLyBEZWxpdmVyIHdoYXQgaGFz
IG5vdCBiZWVuIHBhc3NlZCB0byB0aGUgcGx1Zy1pbiB1cCB0byB0aGlzIHBvaW50LgotICAgICAg
ICBpZiAoX2RhdGFMZW5ndGhSZWNlaXZlZCA+IDApIHsKLSAgICAgICAgICAgIE5TRGF0YSAqZGF0
YSA9IFtbW3NlbGYgZGF0YVNvdXJjZV0gZGF0YV0gc3ViZGF0YVdpdGhSYW5nZTpOU01ha2VSYW5n
ZSgwLCBfZGF0YUxlbmd0aFJlY2VpdmVkKV07Ci0gICAgICAgICAgICBfZGF0YUxlbmd0aFJlY2Vp
dmVkID0gMDsKLSAgICAgICAgICAgIFtzZWxmIHBsdWdpblZpZXc6c2VsZiByZWNlaXZlZERhdGE6
ZGF0YV07Ci0gICAgICAgICAgICBpZiAoIVtbc2VsZiBkYXRhU291cmNlXSBpc0xvYWRpbmddKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKF9lcnJvcikKLSAgICAgICAgICAgICAgICAgICAgW3NlbGYg
cGx1Z2luVmlldzpzZWxmIHJlY2VpdmVkRXJyb3I6X2Vycm9yLmdldCgpXTsKLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIFtzZWxmIHBsdWdpblZpZXdGaW5pc2hlZExv
YWRpbmc6c2VsZl07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUBlbmQK
LQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dl
YlBsdWdpbkNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dl
YlBsdWdpbkNvbnRyb2xsZXIubW0KaW5kZXggOTQ4YWYzMjE5MWQwYTlhYTVjMWQ2NmExNzc1ODBm
MjMwNjk3MmZjYi4uZjcwMjVmYTQ3OGMxZjcxNTg5ZDU2NmE0ZTc2MDExM2NmM2JkYjhiMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJQbHVnaW5Db250cm9s
bGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29u
dHJvbGxlci5tbQpAQCAtMzgzLDExICszODMsNiBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplQXVk
aW9TZXNzaW9uKCkKICAgICAgICAgaWYgKF9zdGFydGVkKQogICAgICAgICAgICAgW3NlbGYgc3Rv
cE9uZVBsdWdpbjp2aWV3XTsKICAgICAgICAgW3NlbGYgZGVzdHJveU9uZVBsdWdpbjp2aWV3XTsK
LQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBpZiAoYXV0byogZnJh
bWUgPSBjb3JlKFtzZWxmIHdlYkZyYW1lXSkpCi0gICAgICAgICAgICBmcmFtZS0+c2NyaXB0KCku
Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4oc2VsZik7Ci0jZW5kaWYKICAgICAgICAgCiAg
ICAgICAgIFtwbHVnaW5WaWV3cygpIHJlbW92ZU9iamVjdDp2aWV3XTsKICNpZiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKQEAgLTQzMSwxMiArNDI2LDcgQEAgc3RhdGljIHZvaWQgY2FuY2VsT3V0c3Rh
bmRpbmdDaGVjayhjb25zdCB2b2lkICppdGVtLCB2b2lkICpjb250ZXh0KQogICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgdmlld3NDb3VudDsgaSsrKSB7CiAgICAgICAgIGlkIGFWaWV3ID0gW192aWV3
cyBvYmplY3RBdEluZGV4OmldOwogICAgICAgICBbc2VsZiBkZXN0cm95T25lUGx1Z2luOmFWaWV3
XTsKLSAgICAgICAgCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIGlm
IChhdXRvKiBmcmFtZSA9IGNvcmUoW3NlbGYgd2ViRnJhbWVdKSkKLSAgICAgICAgICAgIGZyYW1l
LT5zY3JpcHQoKS5jbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbihzZWxmKTsKLSNlbmRpZgot
ICAgICAgICAKKwogICAgICAgICBbcGx1Z2luVmlld3MoKSByZW1vdmVPYmplY3Q6YVZpZXddOwog
I2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgICAgICBbW19kb2N1bWVudFZpZXcgX3dlYlZp
ZXddIHJlbW92ZVBsdWdpbkluc3RhbmNlVmlldzphVmlld107CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYlBsdWdpbkRhdGFiYXNlLm1tIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJQbHVnaW5EYXRhYmFzZS5tbQppbmRleCAwMWMzZGZi
ODQwNzQ2OTljMDI1NDA1ZDg4NDdhY2RmZTYzZTJjNjg1Li43OTNkZjA5ZmU1YTQ1MGQzNjE3MTM3
MjYzN2Y5OTJkNGRjYTIxZDI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9Q
bHVnaW5zL1dlYlBsdWdpbkRhdGFiYXNlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1BsdWdpbnMvV2ViUGx1Z2luRGF0YWJhc2UubW0KQEAgLTI4LDcgKzI4LDYgQEAKIAogI2ltcG9y
dCAiV2ViUGx1Z2luRGF0YWJhc2UuaCIKIAotI2ltcG9ydCAiV2ViQmFzZU5ldHNjYXBlUGx1Z2lu
Vmlldy5oIgogI2ltcG9ydCAiV2ViQmFzZVBsdWdpblBhY2thZ2UuaCIKICNpbXBvcnQgIldlYkRh
dGFTb3VyY2VQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJGcmFtZS5oIgpAQCAtMzcsNyArMzYsNiBA
QAogI2ltcG9ydCAiV2ViSFRNTFZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViS2l0TG9nZ2lu
Zy5oIgogI2ltcG9ydCAiV2ViTlNGaWxlTWFuYWdlckV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTmV0
c2NhcGVQbHVnaW5QYWNrYWdlLmgiCiAjaW1wb3J0ICJXZWJQbHVnaW5Db250cm9sbGVyLmgiCiAj
aW1wb3J0ICJXZWJQbHVnaW5QYWNrYWdlLmgiCiAjaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIK
QEAgLTExMywxMyArMTExLDYgQEAgc3RydWN0IFBsdWdpblBhY2thZ2VDYW5kaWRhdGVzIHsKICAg
ICAgICAgICAgIGNoZWNrQ2FuZGlkYXRlKCZ3ZWJQbHVnaW4sICZwbHVnaW4pOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgICAgICAKLSNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKLSAgICAgICAgaWYoW3BsdWdpbiBpc0tpbmRPZkNsYXNzOltXZWJOZXRzY2Fw
ZVBsdWdpblBhY2thZ2UgY2xhc3NdXSkgewotICAgICAgICAgICAgY2hlY2tDYW5kaWRhdGUoJm5l
dHNjYXBlUGx1Z2luLCAmcGx1Z2luKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
I2VuZGlmCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKQEAgLTM1
NCwxMiArMzQ1LDggQEAgc3RhdGljIFJldGFpblB0cjxOU0FycmF5PiYgYWRkaXRpb25hbFdlYlBs
dWdJblBhdGhzKCkKICAgICBOU1ZpZXcgPFdlYkRvY3VtZW50Vmlldz4gKmRvY3VtZW50VmlldyA9
IFtbd2ViRnJhbWUgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOyAKICAgICBpZiAoW2RvY3VtZW50
VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKSB7CiAgICAgICAgIGZvciAo
TlNWaWV3ICpzdWJ2aWV3IGluIFtkb2N1bWVudFZpZXcgc3Vidmlld3NdKSB7Ci0jaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgICAgICBpZiAoW3N1YnZpZXcgaXNLaW5kT2ZD
bGFzczpbV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyBjbGFzc11dIHx8IFtXZWJQbHVnaW5Db250
cm9sbGVyIGlzUGx1Z0luVmlldzpzdWJ2aWV3XSkKLSNlbHNlCiAgICAgICAgICAgICBpZiAoW1dl
YlBsdWdpbkNvbnRyb2xsZXIgaXNQbHVnSW5WaWV3OnN1YnZpZXddKQotI2VuZGlmCi0gICAgICAg
ICAgICAgICAgW3BsdWdpbkluc3RhbmNlVmlld3MgcmVtb3ZlT2JqZWN0OnN1YnZpZXddOyAKKyAg
ICAgICAgICAgICAgICBbcGx1Z2luSW5zdGFuY2VWaWV3cyByZW1vdmVPYmplY3Q6c3Vidmlld107
CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zNzAsMTIgKzM1Nyw2IEBAIHN0YXRpYyBSZXRhaW5Q
dHI8TlNBcnJheT4mIGFkZGl0aW9uYWxXZWJQbHVnSW5QYXRocygpCiAgICAgTlNBcnJheSAqcGxp
ID0gW3BsdWdpbkluc3RhbmNlVmlld3MgYWxsT2JqZWN0c107CiAgICAgTlNFbnVtZXJhdG9yICpl
bnVtZXJhdG9yID0gW3BsaSBvYmplY3RFbnVtZXJhdG9yXTsKICAgICB3aGlsZSAoKHZpZXcgPSBb
ZW51bWVyYXRvciBuZXh0T2JqZWN0XSkgIT0gbmlsKSB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCi0gICAgICAgIGlmIChbdmlldyBpc0tpbmRPZkNsYXNzOltXZWJCYXNlTmV0c2Nh
cGVQbHVnaW5WaWV3IGNsYXNzXV0pIHsKLSAgICAgICAgICAgIEFTU0VSVChbdmlldyByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKHN0b3ApXSk7Ci0gICAgICAgICAgICBbdmlldyBwZXJmb3Jt
U2VsZWN0b3I6QHNlbGVjdG9yKHN0b3ApXTsKLSAgICAgICAgfSBlbHNlCi0jZW5kaWYKICAgICAg
ICAgaWYgKFtXZWJQbHVnaW5Db250cm9sbGVyIGlzUGx1Z0luVmlldzp2aWV3XSkgewogICAgICAg
ICAgICAgQVNTRVJUKFtbdmlldyBzdXBlcnZpZXddIGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3
IGNsYXNzXV0pOwogICAgICAgICAgICAgQVNTRVJUKFtbdmlldyBzdXBlcnZpZXddIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IoX2Rlc3Ryb3lBbGxXZWJQbHVnaW5zKV0pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJQbHVnaW5SZXF1ZXN0LmggYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYlBsdWdpblJlcXVlc3QuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIwN2M4NWNkZDEwMjBhNDRjNGY4ZTFmOTAzY2QwNDlj
MDNkMDBhOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYlBsdWdpblJlcXVlc3QuaAorKysgL2Rl
di9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQot
Ci1AaW50ZXJmYWNlIFdlYlBsdWdpblJlcXVlc3QgOiBOU09iamVjdAotewotICAgIE5TVVJMUmVx
dWVzdCAqX3JlcXVlc3Q7Ci0gICAgTlNTdHJpbmcgKl9mcmFtZU5hbWU7Ci0gICAgdm9pZCAqX25v
dGlmeURhdGE7Ci0gICAgQk9PTCBfZGlkU3RhcnRGcm9tVXNlckdlc3R1cmU7Ci0gICAgQk9PTCBf
c2VuZE5vdGlmaWNhdGlvbjsKLX0KLQotLSAoaWQpaW5pdFdpdGhSZXF1ZXN0OihOU1VSTFJlcXVl
c3QgKilyZXF1ZXN0IGZyYW1lTmFtZTooTlNTdHJpbmcgKilmcmFtZU5hbWUgbm90aWZ5RGF0YToo
dm9pZCAqKW5vdGlmeURhdGEgc2VuZE5vdGlmaWNhdGlvbjooQk9PTClzZW5kTm90aWZpY2F0aW9u
IGRpZFN0YXJ0RnJvbVVzZXJHZXN0dXJlOihCT09MKWN1cnJlbnRFdmVudElzVXNlckdlc3R1cmU7
Ci0KLS0gKE5TVVJMUmVxdWVzdCAqKXJlcXVlc3Q7Ci0tIChOU1N0cmluZyAqKWZyYW1lTmFtZTsK
LS0gKHZvaWQgKilub3RpZnlEYXRhOwotLSAoQk9PTClpc0N1cnJlbnRFdmVudFVzZXJHZXN0dXJl
OwotLSAoQk9PTClzZW5kTm90aWZpY2F0aW9uOwotCi1AZW5kCi0KLSNlbmRpZiAvLyBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1BsdWdpbnMvV2ViUGx1Z2luUmVxdWVzdC5tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1
Z2lucy9XZWJQbHVnaW5SZXF1ZXN0Lm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5
NDhiM2E0Yzk1ZDkyODBhNmFmNzI1YmY2NDRjN2RlMDU3Zjk2NzMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1
Z2lucy9XZWJQbHVnaW5SZXF1ZXN0Lm0KKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2ltcG9ydCAiV2ViUGx1Z2luUmVxdWVz
dC5oIgotCi1AaW1wbGVtZW50YXRpb24gV2ViUGx1Z2luUmVxdWVzdAotCi0tIChpZClpbml0V2l0
aFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QgZnJhbWVOYW1lOihOU1N0cmluZyAqKWZy
YW1lTmFtZSBub3RpZnlEYXRhOih2b2lkICopbm90aWZ5RGF0YSBzZW5kTm90aWZpY2F0aW9uOihC
T09MKXNlbmROb3RpZmljYXRpb24gZGlkU3RhcnRGcm9tVXNlckdlc3R1cmU6KEJPT0wpY3VycmVu
dEV2ZW50SXNVc2VyR2VzdHVyZQotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIF9kaWRTdGFydEZyb21Vc2VyR2VzdHVy
ZSA9IGN1cnJlbnRFdmVudElzVXNlckdlc3R1cmU7Ci0gICAgX3JlcXVlc3QgPSBbcmVxdWVzdCBy
ZXRhaW5dOwotICAgIF9mcmFtZU5hbWUgPSBbZnJhbWVOYW1lIHJldGFpbl07Ci0gICAgX25vdGlm
eURhdGEgPSBub3RpZnlEYXRhOwotICAgIF9zZW5kTm90aWZpY2F0aW9uID0gc2VuZE5vdGlmaWNh
dGlvbjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19y
ZXF1ZXN0IHJlbGVhc2VdOwotICAgIFtfZnJhbWVOYW1lIHJlbGVhc2VdOwotICAgIFtzdXBlciBk
ZWFsbG9jXTsKLX0KLQotLSAoTlNVUkxSZXF1ZXN0ICopcmVxdWVzdAotewotICAgIHJldHVybiBf
cmVxdWVzdDsKLX0KLQotLSAoTlNTdHJpbmcgKilmcmFtZU5hbWUKLXsKLSAgICByZXR1cm4gX2Zy
YW1lTmFtZTsKLX0KLQotLSAoQk9PTClpc0N1cnJlbnRFdmVudFVzZXJHZXN0dXJlCi17Ci0gICAg
cmV0dXJuIF9kaWRTdGFydEZyb21Vc2VyR2VzdHVyZTsKLX0KLQotLSAoQk9PTClzZW5kTm90aWZp
Y2F0aW9uCi17Ci0gICAgcmV0dXJuIF9zZW5kTm90aWZpY2F0aW9uOwotfQotCi0tICh2b2lkICop
bm90aWZ5RGF0YQotewotICAgIHJldHVybiBfbm90aWZ5RGF0YTsKLX0KLQotQGVuZAotCi0jZW5k
aWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9QbHVnaW5zL25wYXBpLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
UGx1Z2lucy9ucGFwaS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBjOWNiN2Qx
MTI1ZGZmMjQ5YmFlYmM5MWQ3YzlhODc4NDgxNWY1NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL25w
YXBpLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMjI5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLSNpbXBvcnQgPFdlYktpdExlZ2FjeS9ucGFwaS5oPgotCi0jaW1wb3J0ICJXZWJO
ZXRzY2FwZVBsdWdpblZpZXcuaCIKLSNpbXBvcnQgIldlYktpdExvZ2dpbmcuaCIKLSNpbXBvcnQg
PHd0Zi9SdW5Mb29wLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1XZWJOZXRzY2Fw
ZVBsdWdpblZpZXcgKnBsdWdpblZpZXdGb3JJbnN0YW5jZShOUFAgaW5zdGFuY2UpOwotCi0vLyBn
ZW5lcmFsIHBsdWctaW4gdG8gYnJvd3NlciBmdW5jdGlvbnMKLQotdm9pZCogTlBOX01lbUFsbG9j
KHVpbnQzMl90IHNpemUpCi17Ci0gICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKLX0KLQotdm9pZCBO
UE5fTWVtRnJlZSh2b2lkKiBwdHIpCi17Ci0gICAgZnJlZShwdHIpOwotfQotCi11aW50MzJfdCBO
UE5fTWVtRmx1c2godWludDMyX3Qgc2l6ZSkKLXsKLSAgICBMT0coUGx1Z2lucywgIk5QTl9NZW1G
bHVzaCIpOwotICAgIHJldHVybiBzaXplOwotfQotCi12b2lkIE5QTl9SZWxvYWRQbHVnaW5zKE5Q
Qm9vbCByZWxvYWRQYWdlcykKLXsKLSAgICBMT0coUGx1Z2lucywgIk5QTl9SZWxvYWRQbHVnaW5z
Iik7Ci19Ci0KLU5QRXJyb3IgTlBOX1JlcXVlc3RSZWFkKE5QU3RyZWFtKiBzdHJlYW0sIE5QQnl0
ZVJhbmdlKiByYW5nZUxpc3QpCi17Ci0gICAgTE9HKFBsdWdpbnMsICJOUE5fUmVxdWVzdFJlYWQi
KTsKLSAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLX0KLQotLy8gaW5zdGFuY2Utc3Bl
Y2lmaWMgZnVuY3Rpb25zCi0vLyBUaGUgcGx1Z2luIHZpZXcgaXMgYWx3YXlzIHRoZSBuZGF0YSBv
ZiB0aGUgaW5zdGFuY2UuIFNvbWV0aW1lcywgcGx1Zy1pbnMgd2lsbCBjYWxsIGFuIGluc3RhbmNl
LXNwZWNpZmljIGZ1bmN0aW9uCi0vLyB3aXRoIGEgTlVMTCBpbnN0YW5jZS4gVG8gd29ya2Fyb3Vu
ZCB0aGlzLCBjYWxsIHRoZSBsYXN0IHBsdWctaW4gdmlldyB0aGF0IG1hZGUgYSBjYWxsIHRvIGEg
cGx1Zy1pbi4KLS8vIEN1cnJlbnRseSwgdGhlIGN1cnJlbnQgcGx1Zy1pbiB2aWV3IGlzIG9ubHkg
c2V0IGJlZm9yZSBOUFBfTmV3IGluIFtXZWJOZXRzY2FwZVBsdWdpblZpZXcgc3RhcnRdLgotLy8g
VGhpcyBzcGVjaWZpY2FsbHkgd29ya3MgYXJvdW5kIEZsYXNoIGFuZCBTaG9ja3dhdmUuIFdoZW4g
d2UgY2FsbCBOUFBfTmV3LCB0aGV5IGNhbGwgTlBOX1VzZXJBZ2VudCB3aXRoIGEgTlVMTCBpbnN0
YW5jZS4KLVdlYk5ldHNjYXBlUGx1Z2luVmlldyAqcGx1Z2luVmlld0Zvckluc3RhbmNlKE5QUCBp
bnN0YW5jZSkKLXsKLSAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UtPm5kYXRhKQotICAgICAg
ICByZXR1cm4gKF9fYnJpZGdlIFdlYk5ldHNjYXBlUGx1Z2luVmlldyAqKWluc3RhbmNlLT5uZGF0
YTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBbV2ViTmV0c2NhcGVQbHVnaW5WaWV3IGN1cnJl
bnRQbHVnaW5WaWV3XTsKLX0KLQotTlBFcnJvciBOUE5fR2V0VVJMTm90aWZ5KE5QUCBpbnN0YW5j
ZSwgY29uc3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEp
Ci17Ci0gICAgcmV0dXJuIFtwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpIGdldFVSTE5v
dGlmeTpVUkwgdGFyZ2V0OnRhcmdldCBub3RpZnlEYXRhOm5vdGlmeURhdGFdOwotfQotCi1OUEVy
cm9yIE5QTl9HZXRVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIq
IHRhcmdldCkKLXsKLSAgICByZXR1cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkg
Z2V0VVJMOlVSTCB0YXJnZXQ6dGFyZ2V0XTsKLX0KLQotTlBFcnJvciBOUE5fUG9zdFVSTE5vdGlm
eShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50
MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEp
Ci17Ci0gICAgcmV0dXJuIFtwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpIHBvc3RVUkxO
b3RpZnk6VVJMIHRhcmdldDp0YXJnZXQgbGVuOmxlbiBidWY6YnVmIGZpbGU6ZmlsZSBub3RpZnlE
YXRhOm5vdGlmeURhdGFdOwotfQotCi1OUEVycm9yIE5QTl9Qb3N0VVJMKE5QUCBpbnN0YW5jZSwg
Y29uc3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3Qg
Y2hhciogYnVmLCBOUEJvb2wgZmlsZSkKLXsKLSAgICByZXR1cm4gW3BsdWdpblZpZXdGb3JJbnN0
YW5jZShpbnN0YW5jZSkgcG9zdFVSTDpVUkwgdGFyZ2V0OnRhcmdldCBsZW46bGVuIGJ1ZjpidWYg
ZmlsZTpmaWxlXTsKLX0KLQotTlBFcnJvciBOUE5fTmV3U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBN
SU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0YXJnZXQsIE5QU3RyZWFtKiogc3RyZWFtKQotewot
ICAgIHJldHVybiBbcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKSBuZXdTdHJlYW06dHlw
ZSB0YXJnZXQ6dGFyZ2V0IHN0cmVhbTpzdHJlYW1dOwotfQotCi1pbnQzMl90IE5QTl9Xcml0ZShO
UFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyX3QgbGVuLCB2b2lkKiBidWZmZXIp
Ci17Ci0gICAgcmV0dXJuIFtwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpIHdyaXRlOnN0
cmVhbSBsZW46bGVuIGJ1ZmZlcjpidWZmZXJdOwotfQotCi1OUEVycm9yIE5QTl9EZXN0cm95U3Ry
ZWFtKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQotewot
ICAgIHJldHVybiBbcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKSBkZXN0cm95U3RyZWFt
OnN0cmVhbSByZWFzb246cmVhc29uXTsKLX0KLQotY29uc3QgY2hhciogTlBOX1VzZXJBZ2VudChO
UFAgaW5zdGFuY2UpCi17Ci0gICAgcmV0dXJuIFtwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFu
Y2UpIHVzZXJBZ2VudF07Ci19Ci0KLXZvaWQgTlBOX1N0YXR1cyhOUFAgaW5zdGFuY2UsIGNvbnN0
IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkg
c3RhdHVzOm1lc3NhZ2VdOwotfQotCi12b2lkIE5QTl9JbnZhbGlkYXRlUmVjdChOUFAgaW5zdGFu
Y2UsIE5QUmVjdCAqaW52YWxpZFJlY3QpCi17Ci0gICAgW3BsdWdpblZpZXdGb3JJbnN0YW5jZShp
bnN0YW5jZSkgaW52YWxpZGF0ZVJlY3Q6aW52YWxpZFJlY3RdOwotfQotCi12b2lkIE5QTl9JbnZh
bGlkYXRlUmVnaW9uKE5QUCBpbnN0YW5jZSwgTlBSZWdpb24gaW52YWxpZFJlZ2lvbikKLXsKLSAg
ICBbcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKSBpbnZhbGlkYXRlUmVnaW9uOmludmFs
aWRSZWdpb25dOwotfQotCi12b2lkIE5QTl9Gb3JjZVJlZHJhdyhOUFAgaW5zdGFuY2UpCi17Ci0g
ICAgW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgZm9yY2VSZWRyYXddOwotfQotCi1O
UEVycm9yIE5QTl9HZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2
b2lkICp2YWx1ZSkKLXsKLSAgICByZXR1cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5j
ZSkgZ2V0VmFyaWFibGU6dmFyaWFibGUgdmFsdWU6dmFsdWVdOwotfQotCi1OUEVycm9yIE5QTl9T
ZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkICp2YWx1ZSkK
LXsKLSAgICByZXR1cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgc2V0VmFyaWFi
bGU6dmFyaWFibGUgdmFsdWU6dmFsdWVdOwotfQotCi0vLyBVbnN1cHBvcnRlZCBmdW5jdGlvbnMK
LQotdm9pZCogTlBOX0dldEphdmFFbnYodm9pZCkKLXsKLSAgICBMT0coUGx1Z2lucywgIk5QTl9H
ZXRKYXZhRW52Iik7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXZvaWQqIE5QTl9HZXRKYXZhUGVl
cihOUFAgaW5zdGFuY2UpCi17Ci0gICAgTE9HKFBsdWdpbnMsICJOUE5fR2V0SmF2YVBlZXIiKTsK
LSAgICByZXR1cm4gTlVMTDsKLX0KLQotdm9pZCBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShO
UFAgaW5zdGFuY2UsIE5QQm9vbCBlbmFibGVkKQotewotfQotCi12b2lkIE5QTl9Qb3BQb3B1cHNF
bmFibGVkU3RhdGUoTlBQIGluc3RhbmNlKQotewotfQotCi12b2lkIE5QTl9QbHVnaW5UaHJlYWRB
c3luY0NhbGwoTlBQIGluc3RhbmNlLCB2b2lkICgqZnVuYykgKHZvaWQgKiksIHZvaWQgKnVzZXJE
YXRhKQotewotICAgIFdlYk5ldHNjYXBlUGx1Z2luVmlldyAqcGx1Z2luVmlldyA9IHBsdWdpblZp
ZXdGb3JJbnN0YW5jZShpbnN0YW5jZSk7Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2go
W3BsdWdpblZpZXcgPSByZXRhaW5QdHIocGx1Z2luVmlldyksIHVzZXJEYXRhLCBmdW5jXSB7Ci0g
ICAgICAgIGlmICghcGx1Z2luVmlldyB8fCAhcGx1Z2luVmlldy0+cGx1Z2luKSB7Ci0gICAgICAg
ICAgICAvLyBUaGUgcGx1Zy1pbiBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZC4KLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmModXNlckRhdGEpOwotICAgIH0p
OwotfQotCi11aW50MzJfdCBOUE5fU2NoZWR1bGVUaW1lcihOUFAgaW5zdGFuY2UsIHVpbnQzMl90
IGludGVydmFsLCBOUEJvb2wgcmVwZWF0LCB2b2lkICgqdGltZXJGdW5jKShOUFAgbnBwLCB1aW50
MzJfdCB0aW1lcklEKSkKLXsKLSAgICByZXR1cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0
YW5jZSkgc2NoZWR1bGVUaW1lcldpdGhJbnRlcnZhbDppbnRlcnZhbCByZXBlYXQ6cmVwZWF0IHRp
bWVyRnVuYzp0aW1lckZ1bmNdOwotfQotCi12b2lkIE5QTl9VbnNjaGVkdWxlVGltZXIoTlBQIGlu
c3RhbmNlLCB1aW50MzJfdCB0aW1lcklEKQotewotICAgIFtwbHVnaW5WaWV3Rm9ySW5zdGFuY2Uo
aW5zdGFuY2UpIHVuc2NoZWR1bGVUaW1lcjp0aW1lcklEXTsKLX0KLQotTlBFcnJvciBOUE5fUG9w
VXBDb250ZXh0TWVudShOUFAgaW5zdGFuY2UsIE5QTWVudSAqbWVudSkKLXsKLSAgICByZXR1cm4g
W3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgcG9wVXBDb250ZXh0TWVudTptZW51XTsK
LX0KLQotTlBFcnJvciBOUE5fR2V0VmFsdWVGb3JVUkwoTlBQIGluc3RhbmNlLCBOUE5VUkxWYXJp
YWJsZSB2YXJpYWJsZSwgY29uc3QgY2hhciogdXJsLCBjaGFyKiogdmFsdWUsIHVpbnQzMl90KiBs
ZW4pCi17Ci0gICAgcmV0dXJuIFtwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpIGdldFZh
cmlhYmxlOnZhcmlhYmxlIGZvclVSTDp1cmwgdmFsdWU6dmFsdWUgbGVuZ3RoOmxlbl07Ci19Ci0K
LU5QRXJyb3IgTlBOX1NldFZhbHVlRm9yVVJMKE5QUCBpbnN0YW5jZSwgTlBOVVJMVmFyaWFibGUg
dmFyaWFibGUsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdmFsdWUsIHVpbnQzMl90IGxl
bikKLXsKLSAgICByZXR1cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgc2V0VmFy
aWFibGU6dmFyaWFibGUgZm9yVVJMOnVybCB2YWx1ZTp2YWx1ZSBsZW5ndGg6bGVuXTsKLX0KLQot
TlBFcnJvciBOUE5fR2V0QXV0aGVudGljYXRpb25JbmZvKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hh
ciogcHJvdG9jb2wsIGNvbnN0IGNoYXIqIGhvc3QsIGludDMyX3QgcG9ydCwgY29uc3QgY2hhciog
c2NoZW1lLCBjb25zdCBjaGFyICpyZWFsbSwgY2hhcioqIHVzZXJuYW1lLCB1aW50MzJfdCogdWxl
biwgY2hhcioqIHBhc3N3b3JkLCB1aW50MzJfdCogcGxlbikKLXsKLSAgICByZXR1cm4gW3BsdWdp
blZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgZ2V0QXV0aGVudGljYXRpb25JbmZvV2l0aFByb3Rv
Y29sOnByb3RvY29sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3Q6aG9zdCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwb3J0OnBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1lOnNjaGVtZQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVhbG06cmVhbG0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lOnVzZXJuYW1lIHVzZXJuYW1lTGVuZ3Ro
OnVsZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkOnBhc3N3b3JkIHBhc3N3b3JkTGVuZ3RoOnBsZW5d
OwotfQotCi1OUEJvb2wgTlBOX0NvbnZlcnRQb2ludChOUFAgaW5zdGFuY2UsIGRvdWJsZSBzb3Vy
Y2VYLCBkb3VibGUgc291cmNlWSwgTlBDb29yZGluYXRlU3BhY2Ugc291cmNlU3BhY2UsIGRvdWJs
ZSAqZGVzdFgsIGRvdWJsZSAqZGVzdFksIE5QQ29vcmRpbmF0ZVNwYWNlIGRlc3RTcGFjZSkKLXsK
LSAgICByZXR1cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgY29udmVydEZyb21Y
OnNvdXJjZVggYW5kWTpzb3VyY2VZIHNwYWNlOnNvdXJjZVNwYWNlIHRvWDpkZXN0WCBhbmRZOmRl
c3RZIHNwYWNlOmRlc3RTcGFjZV07Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCmluZGV4
IDE2OTNkODc1ZmUwMDg1NGY5MmQ1YmEzMTZkNWY3MzExZDg3ZDhhYjIuLmExNzUxYjAyOTg0Zjc3
ZTdhN2M2ZDU1YjU5NGZmYjg4MDAwOThmYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KQEAgLTkzLDEw
ICs5Myw2IEBACiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAotI2lmIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKSAmJiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLSNpbXBvcnQgIk5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIuaCIKLSNl
bmRpZgotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgRU5BQkxFKEdFT0xPQ0FUSU9OKQog
I2ltcG9ydCA8V2ViQ29yZS9HZW9sb2NhdGlvbi5oPgogI2VuZGlmCkBAIC0yNzMsMTcgKzI2OSwx
MCBAQCBQYWdlKiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVdpbmRvdyhGcmFtZSYgZnJhbWUsIGNv
bnN0IFdpbmRvd0ZlYXR1cmVzJiBmZWF0dXJlcwogICAgICAgICAgICAgW2RpY3RGZWF0dXJlcyBz
ZXRPYmplY3Q6QCgqZmVhdHVyZXMuaGVpZ2h0KSBmb3JLZXk6QCJoZWlnaHQiXTsKICAgICAgICAg
CiAgICAgICAgIG5ld1dlYlZpZXcgPSBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcsIEBzZWxlY3Rv
cih3ZWJWaWV3OmNyZWF0ZVdlYlZpZXdXaXRoUmVxdWVzdDp3aW5kb3dGZWF0dXJlczopLCBuaWws
IGRpY3RGZWF0dXJlcy5nZXQoKSk7Ci0gICAgfSBlbHNlIGlmIChmZWF0dXJlcy5kaWFsb2cgJiYg
W2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpjcmVhdGVXZWJW
aWV3TW9kYWxEaWFsb2dXaXRoUmVxdWVzdDopXSkgeworICAgIH0gZWxzZSBpZiAoZmVhdHVyZXMu
ZGlhbG9nICYmIFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6
Y3JlYXRlV2ViVmlld01vZGFsRGlhbG9nV2l0aFJlcXVlc3Q6KV0pCiAgICAgICAgIG5ld1dlYlZp
ZXcgPSBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmNyZWF0ZVdl
YlZpZXdNb2RhbERpYWxvZ1dpdGhSZXF1ZXN0OiksIG5pbCk7Ci0gICAgfSBlbHNlIHsKKyAgICBl
bHNlCiAgICAgICAgIG5ld1dlYlZpZXcgPSBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcsIEBzZWxl
Y3Rvcih3ZWJWaWV3OmNyZWF0ZVdlYlZpZXdXaXRoUmVxdWVzdDopLCBuaWwpOwotICAgIH0KLQot
I2lmIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKLSAgICBpZiAobmV3V2ViVmlldykKLSAgICAgICAgV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkhv
c3RNYW5hZ2VyOjpzaW5nbGV0b24oKS5kaWRDcmVhdGVXaW5kb3coKTsKLSNlbmRpZgotICAgIAog
ICAgIHJldHVybiBjb3JlKG5ld1dlYlZpZXcpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbSBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50
Lm1tCmluZGV4IDM1NmEzNmEyNzk1ZjM4M2JiYjRjZWZkMTgzMTc4YzdiODE4NThkZjYuLmFjOWMx
ZWY4Yjc4NDE1MDJmZTljOGY5MTBmZDViOGZjMmY4ZjU3NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVy
Q2xpZW50Lm1tCkBAIC01OCw4ICs1OCw2IEBACiAjaW1wb3J0ICJXZWJLaXRWZXJzaW9uQ2hlY2tz
LmgiCiAjaW1wb3J0ICJXZWJOU1VSTEV4dHJhcy5oIgogI2ltcG9ydCAiV2ViTmF2aWdhdGlvbkRh
dGEuaCIKLSNpbXBvcnQgIldlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5oIgotI2ltcG9ydCAiV2Vi
TmV0c2NhcGVQbHVnaW5WaWV3LmgiCiAjaW1wb3J0ICJXZWJQYW5lbEF1dGhlbnRpY2F0aW9uSGFu
ZGxlci5oIgogI2ltcG9ydCAiV2ViUGx1Z2luQ29udHJvbGxlci5oIgogI2ltcG9ydCAiV2ViUGx1
Z2luUGFja2FnZS5oIgpAQCAtMTM1LDExICsxMzMsNiBAQAogI2ltcG9ydCA8d3RmL2NvY29hL1Zl
Y3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotI2lmIFVTRShQ
TFVHSU5fSE9TVF9QUk9DRVNTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSNpbXBv
cnQgIk5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIuaCIKLSNpbXBvcnQgIldlYkhvc3RlZE5ldHNj
YXBlUGx1Z2luVmlldy5oIgotI2VuZGlmCi0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2lt
cG9ydCA8V2ViQ29yZS9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1dBS0NsaXBWaWV3Lmg+CkBAIC04NDAsMTIgKzgzMyw2IEBAIFdlYkNvcmU6OkZyYW1lKiBXZWJG
cmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hDcmVhdGVQYWdlKGNvbnN0IFdlYkNvcmU6Ok5hdmln
YXRpCiAgICAgV2ViVmlldyAqbmV3V2ViVmlldyA9IFtbY3VycmVudFdlYlZpZXcgX1VJRGVsZWdh
dGVGb3J3YXJkZXJdIHdlYlZpZXc6Y3VycmVudFdlYlZpZXcgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVXZWJWaWV3V2l0aFJlcXVlc3Q6bmls
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2luZG93RmVhdHVyZXM6ZmVhdHVyZXMuZ2V0KCldOwotICAgIAotI2lmIFVTRShQTFVHSU5f
SE9TVF9QUk9DRVNTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBpZiAobmV3
V2ViVmlldykKLSAgICAgICAgV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpzaW5n
bGV0b24oKS5kaWRDcmVhdGVXaW5kb3coKTsKLSNlbmRpZgotICAgICAgICAKICAgICByZXR1cm4g
Y29yZShbbmV3V2ViVmlldyBtYWluRnJhbWVdKTsKIH0KIApAQCAtMTc3OSw4MyArMTc2Niw2IEBA
IHB1YmxpYzoKIH07CiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi1jbGFzcyBOZXRzY2FwZVBsdWdpbldpZGdldCA6IHB1
YmxpYyBQbHVnaW5XaWRnZXQgewotcHVibGljOgotICAgIE5ldHNjYXBlUGx1Z2luV2lkZ2V0KFdl
YkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgKnZpZXcpCi0gICAgICAgIDogUGx1Z2luV2lkZ2V0KHZp
ZXcpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1M
YXllcigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gWyhXZWJCYXNlTmV0c2NhcGVQbHVn
aW5WaWV3ICopcGxhdGZvcm1XaWRnZXQoKSBwbHVnaW5MYXllcl07Ci0gICAgfQotCi0gICAgdmly
dHVhbCBib29sIGdldEZvcm1WYWx1ZShTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgTlNT
dHJpbmcqIG5zVmFsdWUgPSAwOwotICAgICAgICBpZiAoWyhXZWJCYXNlTmV0c2NhcGVQbHVnaW5W
aWV3ICopcGxhdGZvcm1XaWRnZXQoKSBnZXRGb3JtVmFsdWU6Jm5zVmFsdWVdKSB7Ci0gICAgICAg
ICAgICBpZiAoIW5zVmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgdmFsdWUgPSBTdHJpbmcoYWRvcHROUyhuc1ZhbHVlKS5nZXQoKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OkV2ZW50JiBldmVudCkKLSAg
ICB7Ci0gICAgICAgIGF1dG8qIGZyYW1lID0gV2ViQ29yZTo6RnJhbWU6OmZyYW1lRm9yV2lkZ2V0
KCp0aGlzKTsKLSAgICAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgCi0gICAgICAgIE5TRXZlbnQqIGN1cnJlbnROU0V2ZW50ID0gZnJhbWUtPmV2ZW50SGFuZGxl
cigpLmN1cnJlbnROU0V2ZW50KCk7Ci0gICAgICAgIGlmIChldmVudC50eXBlKCkgPT0gV2ViQ29y
ZTo6ZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KQotICAgICAgICAgICAgWyhXZWJCYXNlTmV0
c2NhcGVQbHVnaW5WaWV3ICopcGxhdGZvcm1XaWRnZXQoKSBoYW5kbGVNb3VzZU1vdmVkOmN1cnJl
bnROU0V2ZW50XTsKLSAgICAgICAgZWxzZSBpZiAoZXZlbnQudHlwZSgpID09IFdlYkNvcmU6OmV2
ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkKLSAgICAgICAgICAgIFsoV2ViQmFzZU5ldHNjYXBl
UGx1Z2luVmlldyAqKXBsYXRmb3JtV2lkZ2V0KCkgaGFuZGxlTW91c2VFbnRlcmVkOmN1cnJlbnRO
U0V2ZW50XTsKLSAgICAgICAgZWxzZSBpZiAoZXZlbnQudHlwZSgpID09IFdlYkNvcmU6OmV2ZW50
TmFtZXMoKS5tb3VzZW91dEV2ZW50KQotICAgICAgICAgICAgWyhXZWJCYXNlTmV0c2NhcGVQbHVn
aW5WaWV3ICopcGxhdGZvcm1XaWRnZXQoKSBoYW5kbGVNb3VzZUV4aXRlZDpjdXJyZW50TlNFdmVu
dF07Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LnR5cGUoKSA9PSBXZWJDb3JlOjpldmVudE5hbWVz
KCkuY29udGV4dG1lbnVFdmVudCkKLSAgICAgICAgICAgIGV2ZW50LnNldERlZmF1bHRIYW5kbGVk
KCk7IC8vIFdlIGRvbid0IGtub3cgaWYgdGhlIHBsdWctaW4gaGFzIGhhbmRsZWQgbW91c2Vkb3du
IGV2ZW50IGJ5IGRpc3BsYXlpbmcgYSBjb250ZXh0IG1lbnUsIHNvIHdlIG5ldmVyIHdhbnQgV2Vi
S2l0IHRvIHNob3cgYSBkZWZhdWx0IG9uZS4KLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xp
cFJlY3RDaGFuZ2VkKCkKLSAgICB7Ci0gICAgICAgIC8vIENoYW5naW5nIHRoZSBjbGlwIHJlY3Qg
ZG9lc24ndCBhZmZlY3QgdGhlIHZpZXcgaGllcmFyY2h5LCBzbyB0aGUgcGx1Z2luIG11c3QgYmUg
dG9sZCBhYm91dCB0aGUgY2hhbmdlIGRpcmVjdGx5LgotICAgICAgICBbKFdlYkJhc2VOZXRzY2Fw
ZVBsdWdpblZpZXcgKilwbGF0Zm9ybVdpZGdldCgpIHVwZGF0ZUFuZFNldFdpbmRvd107Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlXaWRnZXQoV2ViQ29yZTo6V2lk
Z2V0Tm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobm90
aWZpY2F0aW9uKSB7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6V2lsbFBhaW50RmxhdHRlbmVkOiB7
Ci0gICAgICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAgICAgICAgIFso
V2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyAqKXBsYXRmb3JtV2lkZ2V0KCkgY2FjaGVTbmFwc2hv
dF07Ci0gICAgICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYkNvcmU6OkRpZFBhaW50RmxhdHRlbmVk
OiB7Ci0gICAgICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAgICAgICAg
IFsoV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyAqKXBsYXRmb3JtV2lkZ2V0KCkgY2xlYXJDYWNo
ZWRTbmFwc2hvdF07Ci0gICAgICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfTsKLQotI2lmIFVT
RShQTFVHSU5fSE9TVF9QUk9DRVNTKQotI2RlZmluZSBORVRTQ0FQRV9QTFVHSU5fVklFVyBXZWJI
b3N0ZWROZXRzY2FwZVBsdWdpblZpZXcKLSNlbHNlCi0jZGVmaW5lIE5FVFNDQVBFX1BMVUdJTl9W
SUVXIFdlYk5ldHNjYXBlUGx1Z2luVmlldwotI2VuZGlmCi0KLSNlbmRpZiAvLyBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLQogc3RhdGljIGJvb2wgc2hvdWxkQmxvY2tQbHVnaW4oV2ViQmFz
ZVBsdWdpblBhY2thZ2UgKnBsdWdpblBhY2thZ2UpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAt
MTkzOCwyMiArMTg0OCw2IEBAIFJlZlB0cjxXZWJDb3JlOjpXaWRnZXQ+IFdlYkZyYW1lTG9hZGVy
Q2xpZW50OjpjcmVhdGVQbHVnaW4oY29uc3QgV2ViQ29yZTo6SW50U2l6CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBpZiAoW3BsdWdpblBhY2thZ2UgaXNLaW5kT2ZDbGFzczpbV2ViUGx1
Z2luUGFja2FnZSBjbGFzc11dKQogICAgICAgICAgICAgICAgIHZpZXcgPSBwbHVnaW5WaWV3KG1f
d2ViRnJhbWUuZ2V0KCksIChXZWJQbHVnaW5QYWNrYWdlICopcGx1Z2luUGFja2FnZSwgYXR0cmli
dXRlS2V5cy5nZXQoKSwgY3JlYXRlTlNBcnJheShwYXJhbVZhbHVlcykuZ2V0KCksIGJhc2VVUkws
IGtpdCgmZWxlbWVudCksIGxvYWRNYW51YWxseSk7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCi0gICAgICAgICAgICBlbHNlIGlmIChbcGx1Z2luUGFja2FnZSBpc0tpbmRPZkNsYXNz
OltXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UgY2xhc3NdXSAmJiBbd2ViVmlldy5wcmVmZXJlbmNl
cyBfYm9vbFZhbHVlRm9yS2V5OkAiV2ViS2l0TlBBUElQbHVnSW5zRW5hYmxlZEZvclRlc3RpbmdJ
bldlYktpdExlZ2FjeSJdKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBwbHVnaW5WaWV3ID0gYWRv
cHROUyhbW05FVFNDQVBFX1BMVUdJTl9WSUVXIGFsbG9jXQotICAgICAgICAgICAgICAgICAgICBp
bml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KQotICAgICAgICAgICAgICAgICAgICBwbHVnaW5QYWNrYWdlOihXZWJOZXRzY2FwZVBsdWdpblBh
Y2thZ2UgKilwbHVnaW5QYWNrYWdlCi0gICAgICAgICAgICAgICAgICAgIFVSTDpwbHVnaW5VUkwK
LSAgICAgICAgICAgICAgICAgICAgYmFzZVVSTDpiYXNlVVJMCi0gICAgICAgICAgICAgICAgICAg
IE1JTUVUeXBlOk1JTUVUeXBlCi0gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUtleXM6YXR0
cmlidXRlS2V5cy5nZXQoKQotICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXM6Y3Jl
YXRlTlNBcnJheShwYXJhbVZhbHVlcykuZ2V0KCkKLSAgICAgICAgICAgICAgICAgICAgbG9hZE1h
bnVhbGx5OmxvYWRNYW51YWxseQotICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiZlbGVtZW50
XSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE5ldHNjYXBlUGx1Z2lu
V2lkZ2V0KHBsdWdpblZpZXcuZ2V0KCkpKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZgogICAgICAg
ICB9CiAgICAgfSBlbHNlCiAgICAgICAgIGVycm9yQ29kZSA9IFdlYktpdEVycm9yQ2Fubm90Rmlu
ZFBsdWdJbjsKQEAgLTE5OTgsMTEgKzE4OTIsNiBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpyZWRpcmVjdERhdGFUb1BsdWdpbihXZWJDb3JlOjpXaWRnZXQmIHBsdWdpbldpZGdldCkKIAog
ICAgIE5TVmlldyAqcGx1Z2luVmlldyA9IHBsdWdpbldpZGdldC5wbGF0Zm9ybVdpZGdldCgpOwog
Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgaWYgKFtwbHVnaW5WaWV3IGlz
S2luZE9mQ2xhc3M6W05FVFNDQVBFX1BMVUdJTl9WSUVXIGNsYXNzXV0pCi0gICAgICAgIFtyZXBy
ZXNlbnRhdGlvbiBfcmVkaXJlY3REYXRhVG9NYW51YWxMb2FkZXI6KE5FVFNDQVBFX1BMVUdJTl9W
SUVXICopcGx1Z2luVmlldyBmb3JQbHVnaW5WaWV3OnBsdWdpblZpZXddOwotICAgIGVsc2UKLSNl
bmRpZgogICAgIHsKICAgICAgICAgV2ViSFRNTFZpZXcgKmRvY3VtZW50VmlldyA9IChXZWJIVE1M
VmlldyAqKVtbbV93ZWJGcmFtZS5nZXQoKSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CiAgICAg
ICAgIEFTU0VSVChbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNz
XV0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXgg
ZjkwNzcxMTNiN2YxYWJmYzIzMmIzNjEwNjY2NDExMGRmM2JkM2M5Yy4uNjNkNzgxOTk0ZmFiZjQ2
NWJlOGU1NTBlYThjZjhiNmM3ODJiMzI5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC0xMTMzLDI4ICsxMTMzLDYgQEAgc3RhdGljIFdlYkZyYW1l
TG9hZFR5cGUgdG9XZWJGcmFtZUxvYWRUeXBlKFdlYkNvcmU6OkZyYW1lTG9hZFR5cGUgZnJhbWVM
b2FkVHlwZSkKICAgICByZXR1cm4gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+ZG9t
V2luZG93KCktPnBlbmRpbmdVbmxvYWRFdmVudExpc3RlbmVycygpOwogfQogCi0jaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0tICh2b2lkKV9yZWN1cnNpdmVfcmVzdW1lTnVsbEV2ZW50
c0ZvckFsbE5ldHNjYXBlUGx1Z2lucwotewotICAgIGF1dG8gY29yZUZyYW1lID0gY29yZShzZWxm
KTsKLSAgICBmb3IgKGF1dG8qIGZyYW1lID0gY29yZUZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLnRyYXZlcnNlTmV4dChjb3JlRnJhbWUpKSB7Ci0gICAgICAgIE5TVmlldyA8V2Vi
RG9jdW1lbnRWaWV3PiAqZG9jdW1lbnRWaWV3ID0gW1traXQoZnJhbWUpIGZyYW1lVmlld10gZG9j
dW1lbnRWaWV3XTsKLSAgICAgICAgaWYgKFtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpbV2Vi
SFRNTFZpZXcgY2xhc3NdXSkKLSAgICAgICAgICAgIFsoV2ViSFRNTFZpZXcgKilkb2N1bWVudFZp
ZXcgX3Jlc3VtZU51bGxFdmVudHNGb3JBbGxOZXRzY2FwZVBsdWdpbnNdOwotICAgIH0KLX0KLQot
LSAodm9pZClfcmVjdXJzaXZlX3BhdXNlTnVsbEV2ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2lucwot
ewotICAgIGF1dG8gY29yZUZyYW1lID0gY29yZShzZWxmKTsKLSAgICBmb3IgKGF1dG8qIGZyYW1l
ID0gY29yZUZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dChj
b3JlRnJhbWUpKSB7Ci0gICAgICAgIE5TVmlldyA8V2ViRG9jdW1lbnRWaWV3PiAqZG9jdW1lbnRW
aWV3ID0gW1traXQoZnJhbWUpIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKLSAgICAgICAgaWYg
KFtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKLSAgICAg
ICAgICAgIFsoV2ViSFRNTFZpZXcgKilkb2N1bWVudFZpZXcgX3BhdXNlTnVsbEV2ZW50c0ZvckFs
bE5ldHNjYXBlUGx1Z2luc107Ci0gICAgfQotfQotI2VuZGlmCi0KICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQogCiAtICh2b2lkKXNldFRpbWVvdXRzUGF1c2VkOihCT09MKWZsYWcKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWVQcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lUHJpdmF0ZS5oCmluZGV4IDBj
ZGQyOGVmZTI5OGNkNzRjNTFkMDVjNzY5YTMzYTQ5MWE4YTZiMmEuLjcyNmYwNzkxZjYwODY2MDRl
NjU2YjQzNzE5MGYzOGI5MGYxODhkZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViRnJhbWVQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJGcmFtZVByaXZhdGUuaApAQCAtMjksMTIgKzI5LDYgQEAKICNpbXBvcnQg
PFdlYktpdExlZ2FjeS9XZWJGcmFtZS5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNCYXNl
Lmg+CiAKLSNpZiAhVEFSR0VUX09TX0lQSE9ORQotI2lmICFkZWZpbmVkKEVOQUJMRV9ORVRTQ0FQ
RV9QTFVHSU5fQVBJKQotI2RlZmluZSBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQSSAwCi0jZW5k
aWYKLSNlbmRpZgotCiAjaWYgVEFSR0VUX09TX0lQSE9ORQogI2ltcG9ydCA8Q29yZVRleHQvQ29y
ZVRleHQuaD4KICNpbXBvcnQgPFdlYktpdExlZ2FjeS9XQUtBcHBLaXRTdHVicy5oPgpAQCAtMjEx
LDEzICsyMDUsNiBAQCB0eXBlZGVmIGVudW0gewogCiAtICh1bnNpZ25lZClfcGVuZGluZ0ZyYW1l
VW5sb2FkRXZlbnRDb3VudDsKIAotI2lmICFUQVJHRVRfT1NfSVBIT05FCi0jaWYgRU5BQkxFX05F
VFNDQVBFX1BMVUdJTl9BUEkKLS0gKHZvaWQpX3JlY3Vyc2l2ZV9yZXN1bWVOdWxsRXZlbnRzRm9y
QWxsTmV0c2NhcGVQbHVnaW5zOwotLSAodm9pZClfcmVjdXJzaXZlX3BhdXNlTnVsbEV2ZW50c0Zv
ckFsbE5ldHNjYXBlUGx1Z2luczsKLSNlbmRpZgotI2VuZGlmCi0KIC0gKE5TU3RyaW5nICopX3N0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyB3
aXRoR2xvYmFsT2JqZWN0OihKU09iamVjdFJlZilnbG9iYWxPYmplY3QgaW5TY3JpcHRXb3JsZDoo
V2ViU2NyaXB0V29ybGQgKil3b3JsZDsKIC0gKEpTR2xvYmFsQ29udGV4dFJlZilfZ2xvYmFsQ29u
dGV4dEZvclNjcmlwdFdvcmxkOihXZWJTY3JpcHRXb3JsZCAqKXdvcmxkOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQppbmRleCBjMTc2NWNmYjRl
NjY1YzhlYTc4NzVjN2FjZDQ1ZTQ5ZTFhNTMxODI2Li44MzhlNDEzMzgxYTgwNzVhM2Q2MjQ1OTQ1
NTI2N2E1YmJiNTVhOTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViSFRNTFZpZXcubW0KQEAgLTYxLDcgKzYxLDYgQEAKICNpbXBvcnQgIldlYk5TUHJpbnRPcGVy
YXRpb25FeHRyYXMuaCIKICNpbXBvcnQgIldlYk5TVVJMRXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJO
U1ZpZXdFeHRyYXMuaCIKLSNpbXBvcnQgIldlYk5ldHNjYXBlUGx1Z2luVmlldy5oIgogI2ltcG9y
dCAiV2ViTm9kZUhpZ2hsaWdodC5oIgogI2ltcG9ydCAiV2ViUGx1Z2luQ29udHJvbGxlci5oIgog
I2ltcG9ydCAiV2ViUHJlZmVyZW5jZXMuaCIKQEAgLTY5NSwxMiArNjk0LDYgQEAgc3RhdGljIGJv
b2wgbmVlZHNDdXJzb3JSZWN0c1N1cHBvcnRBdFBvaW50KE5TV2luZG93KiB3aW5kb3csIE5TUG9p
bnQgcG9pbnQpCiAgICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNz
XV0pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQotICAgIC8vIE5laXRoZXIgZG8gTlBBUEkgcGx1Zy1pbnMuCi0gICAgaWYgKFt2aWV3IGlz
S2luZE9mQ2xhc3M6W1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgY2xhc3NdXSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotI2VuZGlmCi0KICAgICAvLyBOb24tV2ViIGNvbnRlbnQsIFdlYlBERlZp
ZXcsIGFuZCBXZWJLaXQgcGx1Zy1pbnMgdXNlIG5vcm1hbCBjdXJzb3IgaGFuZGxpbmcuCiAgICAg
cmV0dXJuIHRydWU7CiB9CkBAIC04NDksOSArODQyLDYgQEAgc3RhdGljIHZvaWQgaGFyZHdhcmVL
ZXlib2FyZEF2YWlsYWJpbGl0eUNoYW5nZWRDYWxsYmFjayhDRk5vdGlmaWNhdGlvbkNlbnRlclJl
ZiwKIC0gKHZvaWQpX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmVBbmRBZGp1c3RWaWV3U2l6
ZTsKIC0gKHZvaWQpX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2ZTsKICNlbmRpZgotI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotLSAodm9pZClfd2ViX21ha2VQbHVnaW5TdWJ2
aWV3c1BlcmZvcm1TZWxlY3RvcjooU0VMKXNlbGVjdG9yIHdpdGhPYmplY3Q6KGlkKW9iamVjdDsK
LSNlbmRpZgogQGVuZAogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMTQyMywyMSArMTQxMyw2IEBA
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogCiAjZW5kaWYgLy8gUExBVEZPUk0o
TUFDKQogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLS0gKHZvaWQpX3dlYl9t
YWtlUGx1Z2luU3Vidmlld3NQZXJmb3JtU2VsZWN0b3I6KFNFTClzZWxlY3RvciB3aXRoT2JqZWN0
OihpZClvYmplY3QKLXsKLSAgICAvLyBDb3B5IHN1YnZpZXdzIGJlY2F1c2UgW3NlbGYgc3Vidmll
d3NdIHJldHVybnMgdGhlIHZpZXcncyBtdXRhYmxlIGludGVybmFsIGFycmF5LAotICAgIC8vIGFu
ZCB3ZSBtdXN0IGF2b2lkIG11dGF0aW5nIHRoZSBhcnJheSB3aGlsZSBlbnVtZXJhdGluZyBpdC4K
LSAgICBhdXRvIHN1YnZpZXdzQ29weSA9IGFkb3B0TlMoW3NlbGYuc3Vidmlld3MgY29weV0pOwot
ICAgIGZvciAoTlNWaWV3ICp2aWV3IGluIHN1YnZpZXdzQ29weS5nZXQoKSkgewotICAgICAgICBp
ZiAoW3ZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyBjbGFzc11d
KQotICAgICAgICAgICAgW3ZpZXcgcGVyZm9ybVNlbGVjdG9yOnNlbGVjdG9yIHdpdGhPYmplY3Q6
b2JqZWN0XTsKLSAgICB9Ci19Ci0KLSNlbmRpZgotCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBX
ZWJIVE1MVmlldyAoV2ViUHJpdmF0ZSkKQEAgLTIzNjUsMjAgKzIzNDAsNiBAQCBBTExPV19ERVBS
RUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIAogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAotI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSAKLQotLSAodm9pZClfcGF1c2VOdWxsRXZlbnRz
Rm9yQWxsTmV0c2NhcGVQbHVnaW5zIAotewotICAgIFtzZWxmIF93ZWJfbWFrZVBsdWdpblN1YnZp
ZXdzUGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihzdG9wVGltZXJzKSB3aXRoT2JqZWN0Om5pbF07
Ci19Ci0KLS0gKHZvaWQpX3Jlc3VtZU51bGxFdmVudHNGb3JBbGxOZXRzY2FwZVBsdWdpbnMKLXsK
LSAgICBbc2VsZiBfd2ViX21ha2VQbHVnaW5TdWJ2aWV3c1BlcmZvcm1TZWxlY3RvcjpAc2VsZWN0
b3IocmVzdGFydFRpbWVycykgd2l0aE9iamVjdDpuaWxdOwotfQotCi0jZW5kaWYgCi0KIC0gKEJP
T0wpX2lzVXNpbmdBY2NlbGVyYXRlZENvbXBvc2l0aW5nCiB7CiAgICAgcmV0dXJuIF9wcml2YXRl
LT5sYXllckhvc3RpbmdWaWV3ICE9IG5pbDsKQEAgLTMyNTAsMTYgKzMyMTEsMTAgQEAgSUdOT1JF
X1dBUk5JTkdTX0VORAogCiAtICh2b2lkKXZpZXdXaWxsTW92ZVRvSG9zdFdpbmRvdzooTlNXaW5k
b3cgKilob3N0V2luZG93CiB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAg
W3NlbGYgX3dlYl9tYWtlUGx1Z2luU3Vidmlld3NQZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHZp
ZXdXaWxsTW92ZVRvSG9zdFdpbmRvdzopIHdpdGhPYmplY3Q6aG9zdFdpbmRvd107Ci0jZW5kaWYK
IH0KIAogLSAodm9pZCl2aWV3RGlkTW92ZVRvSG9zdFdpbmRvdwogewotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotICAgIFtzZWxmIF93ZWJfbWFrZVBsdWdpblN1YnZpZXdzUGVyZm9y
bVNlbGVjdG9yOkBzZWxlY3Rvcih2aWV3RGlkTW92ZVRvSG9zdFdpbmRvdykgd2l0aE9iamVjdDpu
aWxdOwotI2VuZGlmCiB9CiAKIC0gKHZvaWQpYWRkU3VidmlldzooTlNWaWV3ICopdmlldwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlld1ByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXdQcml2YXRl
LmgKaW5kZXggYjc1ODYyZmEwNTRlMGVjNzJlYWQ1ZTRmMTRmZGU2ZGRjZTgwMGJjNC4uZTY4NjQ5
OGVjNjhkMzU5NzEzMmEwNzViOGRmZGNjOTBhOWNiMzM0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlld1ByaXZhdGUuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3UHJpdmF0ZS5oCkBAIC0yOCwxMiAr
MjgsNiBAQAogCiAjaW1wb3J0IDxXZWJLaXRMZWdhY3kvV2ViSFRNTFZpZXcuaD4KIAotI2lmICFU
QVJHRVRfT1NfSVBIT05FCi0jaWYgIWRlZmluZWQoRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0jZGVmaW5lIEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJIDAKLSNlbmRpZgotI2VuZGlmCi0K
IEBjbGFzcyBET01Eb2N1bWVudEZyYWdtZW50OwogQGNsYXNzIERPTU5vZGU7CiBAY2xhc3MgRE9N
UmFuZ2U7CkBAIC0xMTMsMTEgKzEwNyw2IEBAIGV4dGVybiBjb25zdCBmbG9hdCBfV2ViSFRNTFZp
ZXdQcmludGluZ01heGltdW1TaHJpbmtGYWN0b3I7CiAKICNlbmRpZgogCi0jaWYgZGVmaW5lZChF
TkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQSSkgJiYgRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkK
LS0gKHZvaWQpX3Jlc3VtZU51bGxFdmVudHNGb3JBbGxOZXRzY2FwZVBsdWdpbnM7Ci0tICh2b2lk
KV9wYXVzZU51bGxFdmVudHNGb3JBbGxOZXRzY2FwZVBsdWdpbnM7Ci0jZW5kaWYKLQogLSAoQk9P
TClfaXNVc2luZ0FjY2VsZXJhdGVkQ29tcG9zaXRpbmc7CiAtIChOU1ZpZXcgKilfY29tcG9zaXRp
bmdMYXllcnNIb3N0aW5nVmlldzsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJWaWV3Lm1tCmluZGV4IDAwMmEyM2NiNmJkODkxOGJlZDk4YTg1MWM0NjM2ZmZiMjFjOWZkYzgu
LmFiYTEwNDEzY2Q4Nzg5YjdkYTMzYWM5NjNjYjgwZTMxMDIyZTM4NmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTQzLDcgKzQzLDYgQEAKICNpbXBv
cnQgIldlYkFwcGxpY2F0aW9uQ2FjaGVJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViQXJjaGl2ZS5o
IgogI2ltcG9ydCAiV2ViQmFja0ZvcndhcmRMaXN0SW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkJh
c2VOZXRzY2FwZVBsdWdpblZpZXcuaCIKICNpbXBvcnQgIldlYkJyb2FkY2FzdENoYW5uZWxSZWdp
c3RyeS5oIgogI2ltcG9ydCAiV2ViQ2FjaGUuaCIKICNpbXBvcnQgIldlYkNocm9tZUNsaWVudC5o
Igo=
</data>
<flag name="commit-queue"
          id="467357"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>