<?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>238367</bug_id>
          
          <creation_ts>2022-03-25 01:01:45 -0700</creation_ts>
          <short_desc>[WebGPU] Implement resource copying routines according to the spec</short_desc>
          <delta_ts>2022-03-27 18:47:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>MOVED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>238311</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>dino</cc>
    
    <cc>djg</cc>
    
    <cc>kkinnunen</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1855037</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-25 01:01:45 -0700</bug_when>
    <thetext>[WebGPU] Implement resource copying routines according to the spec</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855038</commentid>
    <comment_count>1</comment_count>
      <attachid>455737</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-25 01:05:55 -0700</bug_when>
    <thetext>Created attachment 455737
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855313</commentid>
    <comment_count>2</comment_count>
      <attachid>455817</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-25 19:52:22 -0700</bug_when>
    <thetext>Created attachment 455817
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855318</commentid>
    <comment_count>3</comment_count>
      <attachid>455819</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-25 20:05:23 -0700</bug_when>
    <thetext>Created attachment 455819
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855321</commentid>
    <comment_count>4</comment_count>
      <attachid>455820</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-25 20:14:19 -0700</bug_when>
    <thetext>Created attachment 455820
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855329</commentid>
    <comment_count>5</comment_count>
      <attachid>455824</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-25 21:31:00 -0700</bug_when>
    <thetext>Created attachment 455824
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855332</commentid>
    <comment_count>6</comment_count>
      <attachid>455825</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-25 21:41:09 -0700</bug_when>
    <thetext>Created attachment 455825
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855452</commentid>
    <comment_count>7</comment_count>
      <attachid>455825</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-27 10:50:29 -0700</bug_when>
    <thetext>Comment on attachment 455825
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=455825&amp;action=review

&gt; Source/WebGPU/WebGPU/CommandEncoder.mm:720
&gt; +        // &quot;and that aspect must be a valid image copy destination according to Â§â¯25.1.2 Depth-stencil formats.&quot;

**** copy source</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855469</commentid>
    <comment_count>8</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-27 18:47:44 -0700</bug_when>
    <thetext>I&apos;m going to split this patch up to make it easier to review.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>455737</attachid>
            <date>2022-03-25 01:05:55 -0700</date>
            <delta_ts>2022-03-25 19:52:19 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-238367-20220325010554.patch</filename>
            <type>text/plain</type>
            <size>64338</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxODQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCmluZGV4IDdmOGVjM2VjN2M3ZWRmMTM5
ZDY3NTM3ZDk5MjYxYjY4NGUyYmQ0M2UuLjc5NjIwNGVkMTZmMzMzNmQ4ZTBhZTA0YjgyMGI1ZWMx
NjNiNmU5YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMjItMDMtMjUgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViR1BVXSBJbXBs
ZW1lbnQgcmVzb3VyY2UgY29weWluZyByb3V0aW5lcyBhY2NvcmRpbmcgdG8gdGhlIHNwZWMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzODM2NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViR1BVL0Jp
bmRHcm91cC5tbToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVCaW5kR3JvdXApOgor
ICAgICAgICAqIFdlYkdQVS9Db21tYW5kRW5jb2Rlci5tbToKKyAgICAgICAgKFdlYkdQVTo6Q29t
bWFuZEVuY29kZXI6OmNvcHlCdWZmZXJUb0J1ZmZlcik6CisgICAgICAgIChXZWJHUFU6OnZhbGlk
YXRlSW1hZ2VDb3B5QnVmZmVyKToKKyAgICAgICAgKFdlYkdQVTo6aW1hZ2VDb3B5VGV4dHVyZVN1
YnJlc291cmNlU2l6ZSk6CisgICAgICAgIChXZWJHUFU6OnZhbGlkYXRlSW1hZ2VDb3B5VGV4dHVy
ZSk6CisgICAgICAgIChXZWJHUFU6OmlzVmFsaWRJbWFnZUNvcHlEZXN0aW5hdGlvbik6CisgICAg
ICAgIChXZWJHUFU6OnZhbGlkYXRlVGV4dHVyZUNvcHlSYW5nZSk6CisgICAgICAgIChXZWJHUFU6
OnZhbGlkYXRlTGluZWFyVGV4dHVyZURhdGEpOgorICAgICAgICAoV2ViR1BVOjp2YWxpZGF0ZUNv
cHlCdWZmZXJUb1RleHR1cmUpOgorICAgICAgICAoV2ViR1BVOjpDb21tYW5kRW5jb2Rlcjo6Y29w
eUJ1ZmZlclRvVGV4dHVyZSk6CisgICAgICAgIChXZWJHUFU6OnZhbGlkYXRlQ29weVRleHR1cmVU
b0J1ZmZlcik6CisgICAgICAgIChXZWJHUFU6OkNvbW1hbmRFbmNvZGVyOjpjb3B5VGV4dHVyZVRv
QnVmZmVyKToKKyAgICAgICAgKFdlYkdQVTo6aXNTUkdCQ29tcGF0aWJsZSk6CisgICAgICAgIChX
ZWJHUFU6OmFyZUNvcHlDb21wYXRpYmxlKToKKyAgICAgICAgKFdlYkdQVTo6dmFsaWRhdGVDb3B5
VGV4dHVyZVRvVGV4dHVyZSk6CisgICAgICAgIChXZWJHUFU6OkNvbW1hbmRFbmNvZGVyOjpjb3B5
VGV4dHVyZVRvVGV4dHVyZSk6CisgICAgICAgICogV2ViR1BVL0NvbXB1dGVQaXBlbGluZS5tbToK
KyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVDb21wdXRlUGlwZWxpbmUpOgorICAgICAg
ICAqIFdlYkdQVS9QaXBlbGluZUxheW91dC5tbToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjpj
cmVhdGVQaXBlbGluZUxheW91dCk6CisgICAgICAgICogV2ViR1BVL1NoYWRlck1vZHVsZS5tbToK
KyAgICAgICAgKFdlYkdQVTo6ZWFybHlDb21waWxlU2hhZGVyTW9kdWxlKToKKyAgICAgICAgKiBX
ZWJHUFUvVGV4dHVyZS5oOgorICAgICAgICAqIFdlYkdQVS9UZXh0dXJlLm1tOgorICAgICAgICAo
V2ViR1BVOjpUZXh0dXJlOjppc0RlcHRoT3JTdGVuY2lsRm9ybWF0KToKKyAgICAgICAgKFdlYkdQ
VTo6VGV4dHVyZTo6dGV4ZWxCbG9ja1dpZHRoKToKKyAgICAgICAgKFdlYkdQVTo6VGV4dHVyZTo6
dGV4ZWxCbG9ja0hlaWdodCk6CisgICAgICAgIChXZWJHUFU6OlRleHR1cmU6OnRleGVsQmxvY2tT
aXplKToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjp2YWxpZGF0ZUNyZWF0ZVRleHR1cmUpOgor
ICAgICAgICAoV2ViR1BVOjpUZXh0dXJlOjpwaHlzaWNhbFNpemUpOgorICAgICAgICAoV2ViR1BV
Ojppc0RlcHRoT3JTdGVuY2lsRm9ybWF0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkdQVTo6dGV4
ZWxCbG9ja1dpZHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkdQVTo6dGV4ZWxCbG9ja0hlaWdo
dCk6IERlbGV0ZWQuCisKIDIwMjItMDMtMjQgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxk
QGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViR1BVXSBGaXggdGhlIHdhdGNoT1MgYnVpbGQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0JpbmRHcm91cC5tbSBiL1NvdXJjZS9XZWJH
UFUvV2ViR1BVL0JpbmRHcm91cC5tbQppbmRleCA2M2FlY2JhZmQ3Y2FlZTU0MzczYTg1MGE4OTNk
MjU0NjBjMzQ0MmMyLi5jZDlmNjA3NjJhMDc1ZDUzOWI5NjFjYWE2M2YyNDg2MTlmYmIxZjYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9CaW5kR3JvdXAubW0KKysrIGIvU291cmNl
L1dlYkdQVS9XZWJHUFUvQmluZEdyb3VwLm1tCkBAIC01NSw3ICs1NSw3IEBAIFJlZlB0cjxCaW5k
R3JvdXA+IERldmljZTo6Y3JlYXRlQmluZEdyb3VwKGNvbnN0IFdHUFVCaW5kR3JvdXBEZXNjcmlw
dG9yJiBkZXNjcmlwCiAgICAgaWYgKGRlc2NyaXB0b3IubmV4dEluQ2hhaW4pCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgY29uc3QgQmluZEdyb3VwTGF5b3V0JiBiaW5kR3JvdXBMYXlv
dXQgPSBXZWJHUFU6OmZyb21BUEkoZGVzY3JpcHRvci5sYXlvdXQpOworICAgIGNvbnN0IEJpbmRH
cm91cExheW91dCYgYmluZEdyb3VwTGF5b3V0ID0gZnJvbUFQSShkZXNjcmlwdG9yLmxheW91dCk7
CiAKICAgICAvLyBGSVhNRShQRVJGT1JNQU5DRSk6IERvbid0IGFsbG9jYXRlIDMgbmV3IGJ1ZmZl
cnMgZm9yIGV2ZXJ5IGJpbmQgZ3JvdXAuCiAgICAgLy8gSW4gZmFjdCwgZG9uJ3QgZXZlbiBhbGxv
Y2F0ZSBhIHNpbmdsZSBuZXcgYnVmZmVyIGZvciBldmVyeSBiaW5kIGdyb3VwLgpAQCAtOTAsMTgg
KzkwLDE4IEBAIFJlZlB0cjxCaW5kR3JvdXA+IERldmljZTo6Y3JlYXRlQmluZEdyb3VwKGNvbnN0
IFdHUFVCaW5kR3JvdXBEZXNjcmlwdG9yJiBkZXNjcmlwCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgICAgICBpZiAoYnVmZmVySXNQcmVzZW50KSB7Ci0gICAgICAgICAgICBpZDxN
VExCdWZmZXI+IGJ1ZmZlciA9IFdlYkdQVTo6ZnJvbUFQSShlbnRyeS5idWZmZXIpLmJ1ZmZlcigp
OworICAgICAgICAgICAgaWQ8TVRMQnVmZmVyPiBidWZmZXIgPSBmcm9tQVBJKGVudHJ5LmJ1ZmZl
cikuYnVmZmVyKCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogVXNlIGNoZWNrZWQgY2FzdHMuCiAg
ICAgICAgICAgICBbdmVydGV4QXJndW1lbnRFbmNvZGVyIHNldEJ1ZmZlcjpidWZmZXIgb2Zmc2V0
OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KGVudHJ5Lm9mZnNldCkgYXRJbmRleDplbnRyeS5iaW5k
aW5nXTsKICAgICAgICAgICAgIFtmcmFnbWVudEFyZ3VtZW50RW5jb2RlciBzZXRCdWZmZXI6YnVm
ZmVyIG9mZnNldDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihlbnRyeS5vZmZzZXQpIGF0SW5kZXg6
ZW50cnkuYmluZGluZ107CiAgICAgICAgICAgICBbY29tcHV0ZUFyZ3VtZW50RW5jb2RlciBzZXRC
dWZmZXI6YnVmZmVyIG9mZnNldDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihlbnRyeS5vZmZzZXQp
IGF0SW5kZXg6ZW50cnkuYmluZGluZ107CiAgICAgICAgIH0gZWxzZSBpZiAoc2FtcGxlcklzUHJl
c2VudCkgewotICAgICAgICAgICAgaWQ8TVRMU2FtcGxlclN0YXRlPiBzYW1wbGVyID0gV2ViR1BV
Ojpmcm9tQVBJKGVudHJ5LnNhbXBsZXIpLnNhbXBsZXJTdGF0ZSgpOworICAgICAgICAgICAgaWQ8
TVRMU2FtcGxlclN0YXRlPiBzYW1wbGVyID0gZnJvbUFQSShlbnRyeS5zYW1wbGVyKS5zYW1wbGVy
U3RhdGUoKTsKICAgICAgICAgICAgIFt2ZXJ0ZXhBcmd1bWVudEVuY29kZXIgc2V0U2FtcGxlclN0
YXRlOnNhbXBsZXIgYXRJbmRleDplbnRyeS5iaW5kaW5nXTsKICAgICAgICAgICAgIFtmcmFnbWVu
dEFyZ3VtZW50RW5jb2RlciBzZXRTYW1wbGVyU3RhdGU6c2FtcGxlciBhdEluZGV4OmVudHJ5LmJp
bmRpbmddOwogICAgICAgICAgICAgW2NvbXB1dGVBcmd1bWVudEVuY29kZXIgc2V0U2FtcGxlclN0
YXRlOnNhbXBsZXIgYXRJbmRleDplbnRyeS5iaW5kaW5nXTsKICAgICAgICAgfSBlbHNlIGlmICh0
ZXh0dXJlVmlld0lzUHJlc2VudCkgewotICAgICAgICAgICAgaWQ8TVRMVGV4dHVyZT4gdGV4dHVy
ZSA9IFdlYkdQVTo6ZnJvbUFQSShlbnRyeS50ZXh0dXJlVmlldykudGV4dHVyZSgpOworICAgICAg
ICAgICAgaWQ8TVRMVGV4dHVyZT4gdGV4dHVyZSA9IGZyb21BUEkoZW50cnkudGV4dHVyZVZpZXcp
LnRleHR1cmUoKTsKICAgICAgICAgICAgIFt2ZXJ0ZXhBcmd1bWVudEVuY29kZXIgc2V0VGV4dHVy
ZTp0ZXh0dXJlIGF0SW5kZXg6ZW50cnkuYmluZGluZ107CiAgICAgICAgICAgICBbZnJhZ21lbnRB
cmd1bWVudEVuY29kZXIgc2V0VGV4dHVyZTp0ZXh0dXJlIGF0SW5kZXg6ZW50cnkuYmluZGluZ107
CiAgICAgICAgICAgICBbY29tcHV0ZUFyZ3VtZW50RW5jb2RlciBzZXRUZXh0dXJlOnRleHR1cmUg
YXRJbmRleDplbnRyeS5iaW5kaW5nXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BV
L0NvbW1hbmRFbmNvZGVyLm1tIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFuZEVuY29kZXIu
bW0KaW5kZXggYWU0YmFjNjA4NWI0YzVmMmVlNGNkOWM3YzNhM2UwYjAzZDc2ZDc5Mi4uMjk5ZTcx
N2FiMDIyOGQ5ZTk1MGYyZDRiZTk5YmNmN2I2NzJhYWE2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkdQVS9XZWJHUFUvQ29tbWFuZEVuY29kZXIubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUv
Q29tbWFuZEVuY29kZXIubW0KQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgIkRldmljZS5oIgog
I2ltcG9ydCAiUXVlcnlTZXQuaCIKICNpbXBvcnQgIlJlbmRlclBhc3NFbmNvZGVyLmgiCisjaW1w
b3J0ICJUZXh0dXJlLmgiCiAKIG5hbWVzcGFjZSBXZWJHUFUgewogCkBAIC0xNTUsMjggKzE1Niwx
MDc0IEBAIHZvaWQgQ29tbWFuZEVuY29kZXI6OmNvcHlCdWZmZXJUb0J1ZmZlcihjb25zdCBCdWZm
ZXImIHNvdXJjZSwgdWludDY0X3Qgc291cmNlT2ZmCiAKICAgICBlbnN1cmVCbGl0Q29tbWFuZEVu
Y29kZXIoKTsKIAotICAgIFttX2JsaXRDb21tYW5kRW5jb2RlciBjb3B5RnJvbUJ1ZmZlcjpzb3Vy
Y2UuYnVmZmVyKCkgc291cmNlT2Zmc2V0OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNvdXJjZU9m
ZnNldCkgdG9CdWZmZXI6ZGVzdGluYXRpb24uYnVmZmVyKCkgZGVzdGluYXRpb25PZmZzZXQ6c3Rh
dGljX2Nhc3Q8TlNVSW50ZWdlcj4oZGVzdGluYXRpb25PZmZzZXQpIHNpemU6c3RhdGljX2Nhc3Q8
TlNVSW50ZWdlcj4oc2l6ZSldOworICAgIFttX2JsaXRDb21tYW5kRW5jb2RlcgorICAgICAgICBj
b3B5RnJvbUJ1ZmZlcjpzb3VyY2UuYnVmZmVyKCkKKyAgICAgICAgc291cmNlT2Zmc2V0OnN0YXRp
Y19jYXN0PE5TVUludGVnZXI+KHNvdXJjZU9mZnNldCkKKyAgICAgICAgdG9CdWZmZXI6ZGVzdGlu
YXRpb24uYnVmZmVyKCkKKyAgICAgICAgZGVzdGluYXRpb25PZmZzZXQ6c3RhdGljX2Nhc3Q8TlNV
SW50ZWdlcj4oZGVzdGluYXRpb25PZmZzZXQpCisgICAgICAgIHNpemU6c3RhdGljX2Nhc3Q8TlNV
SW50ZWdlcj4oc2l6ZSldOworfQorCitzdGF0aWMgYm9vbCB2YWxpZGF0ZUltYWdlQ29weUJ1ZmZl
cihjb25zdCBXR1BVSW1hZ2VDb3B5QnVmZmVyJiBpbWFnZUNvcHlCdWZmZXIpCit7CisgICAgLy8g
aHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jYWJzdHJhY3Qtb3BkZWYtdmFsaWRhdGlu
Zy1ncHVpbWFnZWNvcHlidWZmZXIKKworICAgIC8vIEZJWE1FOiAiaW1hZ2VDb3B5QnVmZmVyLmJ1
ZmZlciBtdXN0IGJlIGEgdmFsaWQgR1BVQnVmZmVyLiIKKworICAgIC8vICJpbWFnZUNvcHlCdWZm
ZXIuYnl0ZXNQZXJSb3cgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDI1Ni4iCisgICAgaWYgKGltYWdl
Q29weUJ1ZmZlci5sYXlvdXQuYnl0ZXNQZXJSb3cgJSAyNTYpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIFdHUFVFeHRlbnQzRCBpbWFnZUNv
cHlUZXh0dXJlU3VicmVzb3VyY2VTaXplKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBpbWFn
ZUNvcHlUZXh0dXJlKQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIv
I2ltYWdlY29weXRleHR1cmUtc3VicmVzb3VyY2Utc2l6ZQorCisgICAgLy8gIkl0cyB3aWR0aCwg
aGVpZ2h0IGFuZCBkZXB0aE9yQXJyYXlMYXllcnMgYXJlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQg
ZGVwdGgsIHJlc3BlY3RpdmVseSwgb2YgdGhlIHBoeXNpY2FsIHNpemUgb2YgaW1hZ2VDb3B5VGV4
dHVyZS50ZXh0dXJlIHN1YnJlc291cmNlIGF0IG1pcG1hcCBsZXZlbCBpbWFnZUNvcHlUZXh0dXJl
Lm1pcExldmVsLiIKKyAgICByZXR1cm4gZnJvbUFQSShpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUp
LnBoeXNpY2FsU2l6ZShpbWFnZUNvcHlUZXh0dXJlLm1pcExldmVsKTsKK30KKworc3RhdGljIGJv
b2wgdmFsaWRhdGVJbWFnZUNvcHlUZXh0dXJlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBp
bWFnZUNvcHlUZXh0dXJlLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQoreworICAgIC8v
IGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2Fic3RyYWN0LW9wZGVmLXZhbGlkYXRp
bmctZ3B1aW1hZ2Vjb3B5dGV4dHVyZQorCisgICAgLy8gImJsb2NrV2lkdGggYmUgdGhlIHRleGVs
IGJsb2NrIHdpZHRoIG9mIGltYWdlQ29weVRleHR1cmUudGV4dHVyZS5bW2Rlc2NyaXB0b3JdXS5m
b3JtYXQuIgorICAgIGF1dG8gYmxvY2tXaWR0aCA9IFRleHR1cmU6OnRleGVsQmxvY2tXaWR0aChm
cm9tQVBJKGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7CisK
KyAgICAvLyAiYmxvY2tIZWlnaHQgYmUgdGhlIHRleGVsIGJsb2NrIGhlaWdodCBvZiBpbWFnZUNv
cHlUZXh0dXJlLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uZm9ybWF0LiIKKyAgICBhdXRvIGJsb2Nr
SGVpZ2h0ID0gVGV4dHVyZTo6dGV4ZWxCbG9ja0hlaWdodChmcm9tQVBJKGltYWdlQ29weVRleHR1
cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7CisKKyAgICAvLyBGSVhNRTogImltYWdl
Q29weVRleHR1cmUudGV4dHVyZSBtdXN0IGJlIGEgdmFsaWQgR1BVVGV4dHVyZS4iCisKKyAgICAv
LyAiaW1hZ2VDb3B5VGV4dHVyZS5taXBMZXZlbCBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgW1tkZXNj
cmlwdG9yXV0ubWlwTGV2ZWxDb3VudCBvZiBpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUuIgorICAg
IGlmIChpbWFnZUNvcHlUZXh0dXJlLm1pcExldmVsID49IGZyb21BUEkoaW1hZ2VDb3B5VGV4dHVy
ZS50ZXh0dXJlKS5kZXNjcmlwdG9yKCkubWlwTGV2ZWxDb3VudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gImltYWdlQ29weVRleHR1cmUub3JpZ2luLnggbXVzdCBiZSBhIG11bHRp
cGxlIG9mIGJsb2NrV2lkdGguIgorICAgIGlmIChpbWFnZUNvcHlUZXh0dXJlLm9yaWdpbi54ICUg
YmxvY2tXaWR0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gImltYWdlQ29weVRl
eHR1cmUub3JpZ2luLnkgbXVzdCBiZSBhIG11bHRpcGxlIG9mIGJsb2NrSGVpZ2h0LiIKKyAgICBp
ZiAoaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4ueSAlIGJsb2NrSGVpZ2h0KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyAiaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlLltbZGVzY3JpcHRv
cl1dLmZvcm1hdCBpcyBhIGRlcHRoLXN0ZW5jaWwgZm9ybWF0LiIKKyAgICAvLyAiaW1hZ2VDb3B5
VGV4dHVyZS50ZXh0dXJlLltbZGVzY3JpcHRvcl1dLnNhbXBsZUNvdW50IGlzIGdyZWF0ZXIgdGhh
biAxLiIKKyAgICBpZiAoVGV4dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChmcm9tQVBJKGlt
YWdlQ29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCkKKyAgICAgICAgfHwg
ZnJvbUFQSShpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUpLmRlc2NyaXB0b3IoKS5zYW1wbGVDb3Vu
dCA+IDEpIHsKKyAgICAgICAgLy8gIlRoZSBpbWFnZUNvcHlUZXh0dXJlIHN1YnJlc291cmNlIHNp
emUgb2YgaW1hZ2VDb3B5VGV4dHVyZSBpcyBlcXVhbCB0byBjb3B5U2l6ZSIKKyAgICAgICAgYXV0
byBzdWJyZXNvdXJjZVNpemUgPSBpbWFnZUNvcHlUZXh0dXJlU3VicmVzb3VyY2VTaXplKGltYWdl
Q29weVRleHR1cmUpOworICAgICAgICBpZiAoc3VicmVzb3VyY2VTaXplLndpZHRoICE9IGNvcHlT
aXplLndpZHRoCisgICAgICAgICAgICB8fCBzdWJyZXNvdXJjZVNpemUuaGVpZ2h0ICE9IGNvcHlT
aXplLmhlaWdodAorICAgICAgICAgICAgfHwgc3VicmVzb3VyY2VTaXplLmRlcHRoT3JBcnJheUxh
eWVycyAhPSBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGlzVmFs
aWRJbWFnZUNvcHlEZXN0aW5hdGlvbihXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQsIFdHUFVUZXh0
dXJlQXNwZWN0IGFzcGVjdCkKK3sKKyAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1
d2ViLyNkZXB0aC1mb3JtYXRzCisKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfVW5kZWZpbmVkOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjhVbm9y
bToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4U25vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9SOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SOFNpbnQ6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMTZVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfUjE2U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IxNkZsb2F0OgorICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkc4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SRzhTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFVpbnQ6CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUjMyRmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMzJVaW50OgorICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfUjMyU2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X1JHMTZVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkcxNlNpbnQ6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2RmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9SR0JBOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQThVbm9ybVNyZ2I6
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFNub3JtOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfUkdCQThVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQThT
aW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkdSQThVbm9ybToKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0JHUkE4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUkdCMTBBMlVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkcxMUIxMFVmbG9h
dDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQjlFNVVmbG9hdDoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X1JHMzJGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JH
MzJVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkczMlNpbnQ6CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9SR0JBMTZVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
UkdCQTE2U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkExNkZsb2F0OgorICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTMyRmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9SR0JBMzJVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTMyU2lu
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfU3Rl
bmNpbDg6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDE2VW5vcm06CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFBsdXM6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRQ
bHVzU3RlbmNpbDg6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDI0VW5vcm1TdGVu
Y2lsODoKKyAgICAgICAgcmV0dXJuIGFzcGVjdCA9PSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2ls
T25seTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMzJGbG9hdDoKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0U3Rl
bmNpbDg6CisgICAgICAgIHJldHVybiBhc3BlY3QgPT0gV0dQVVRleHR1cmVBc3BlY3RfU3RlbmNp
bE9ubHk7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm06CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfQkMyUkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMyUkdC
QVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybToKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9CQzRSVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzRS
U25vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzVSR1Vub3JtOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfQkM1UkdTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0JDNkhSR0JVZmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzZIUkdCRmxvYXQ6
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzdSR0JBVW5vcm06CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9CQzdSR0JBVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfRVRDMlJHQjhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4VW5v
cm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhBMVVub3JtOgorICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhBMVVub3JtU3JnYjoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0VUQzJSR0JBOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfRVRDMlJHQkE4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUjEx
VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FQUNSMTFTbm9ybToKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JHMTFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0VBQ1JHMTFTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM0eDRVbm9y
bToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM0eDRVbm9ybVNyZ2I6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg0VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9BU1RDNXg0VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4
NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtU3JnYjoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0FTVEM2eDVVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9B
U1RDNng2VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5vcm1Tcmdi
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NVVub3JtOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfQVNUQzh4NVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0FTVEM4eDZVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDZVbm9y
bVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg4VW5vcm06CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfQVNUQzEweDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMx
MHg1VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDZVbm9ybToK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg2VW5vcm1TcmdiOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0FTVEMxMHg4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEw
eDEwVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4MTBVbm9ybVNyZ2I6
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTBVbm9ybToKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMFVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0FTVEMxMngxMlVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEy
eDEyVW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9Gb3JjZTMyOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworc3RhdGljIGJvb2wgdmFsaWRhdGVUZXh0dXJlQ29w
eVJhbmdlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBpbWFnZUNvcHlUZXh0dXJlLCBjb25z
dCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1
Yi5pby9ncHV3ZWIvI3ZhbGlkYXRpbmctdGV4dHVyZS1jb3B5LXJhbmdlCisKKyAgICAvLyAiTGV0
IGJsb2NrV2lkdGggYmUgdGhlIHRleGVsIGJsb2NrIHdpZHRoIG9mIGltYWdlQ29weVRleHR1cmUu
dGV4dHVyZS5bW2Rlc2NyaXB0b3JdXS5mb3JtYXQuIgorICAgIGF1dG8gYmxvY2tXaWR0aCA9IFRl
eHR1cmU6OnRleGVsQmxvY2tXaWR0aChmcm9tQVBJKGltYWdlQ29weVRleHR1cmUudGV4dHVyZSku
ZGVzY3JpcHRvcigpLmZvcm1hdCk7CisKKyAgICAvLyAiTGV0IGJsb2NrSGVpZ2h0IGJlIHRoZSB0
ZXhlbCBibG9jayBoZWlnaHQgb2YgaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlLltbZGVzY3JpcHRv
cl1dLmZvcm1hdC4iCisgICAgYXV0byBibG9ja0hlaWdodCA9IFRleHR1cmU6OnRleGVsQmxvY2tI
ZWlnaHQoZnJvbUFQSShpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUpLmRlc2NyaXB0b3IoKS5mb3Jt
YXQpOworCisgICAgLy8gIkxldCBzdWJyZXNvdXJjZVNpemUgYmUgdGhlIGltYWdlQ29weVRleHR1
cmUgc3VicmVzb3VyY2Ugc2l6ZSBvZiBpbWFnZUNvcHlUZXh0dXJlLiIKKyAgICBhdXRvIHN1YnJl
c291cmNlU2l6ZSA9IGltYWdlQ29weVRleHR1cmVTdWJyZXNvdXJjZVNpemUoaW1hZ2VDb3B5VGV4
dHVyZSk7CisKKyAgICAvLyAiKGltYWdlQ29weVRleHR1cmUub3JpZ2luLnggKyBjb3B5U2l6ZS53
aWR0aCkg4omkIHN1YnJlc291cmNlU2l6ZS53aWR0aCIKKyAgICAvLyBGSVhNRTogVXNlZCBjaGVj
a2VkIGFyaXRobWV0aWMKKyAgICBpZiAoKGltYWdlQ29weVRleHR1cmUub3JpZ2luLnggKyBjb3B5
U2l6ZS53aWR0aCkgPiBzdWJyZXNvdXJjZVNpemUud2lkdGgpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vICIoaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4ueSArIGNvcHlTaXplLmhlaWdo
dCkg4omkIHN1YnJlc291cmNlU2l6ZS5oZWlnaHQiCisgICAgLy8gRklYTUU6IFVzZWQgY2hlY2tl
ZCBhcml0aG1ldGljCisgICAgaWYgKChpbWFnZUNvcHlUZXh0dXJlLm9yaWdpbi55ICsgY29weVNp
emUuaGVpZ2h0KSA+IHN1YnJlc291cmNlU2l6ZS5oZWlnaHQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vICIoaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4ueiArIGNvcHlTaXplLmRlcHRo
T3JBcnJheUxheWVycykg4omkIHN1YnJlc291cmNlU2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMiCisg
ICAgLy8gRklYTUU6IFVzZWQgY2hlY2tlZCBhcml0aG1ldGljCisgICAgaWYgKChpbWFnZUNvcHlU
ZXh0dXJlLm9yaWdpbi56ICsgY29weVNpemUuZGVwdGhPckFycmF5TGF5ZXJzKSA+IHN1YnJlc291
cmNlU2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vICJjb3B5U2l6ZS53aWR0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgYmxvY2tXaWR0aC4iCisg
ICAgaWYgKGNvcHlTaXplLndpZHRoICUgYmxvY2tXaWR0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gImNvcHlTaXplLmhlaWdodCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgYmxvY2tI
ZWlnaHQuIgorICAgIGlmIChjb3B5U2l6ZS5oZWlnaHQgJSBibG9ja0hlaWdodCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHZhbGlk
YXRlTGluZWFyVGV4dHVyZURhdGEoY29uc3QgV0dQVVRleHR1cmVEYXRhTGF5b3V0JiBsYXlvdXQs
IHVpbnQ2NF90IGJ5dGVTaXplLCBXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQsIFdHUFVFeHRlbnQz
RCBjb3B5RXh0ZW50KQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIv
I2Fic3RyYWN0LW9wZGVmLXZhbGlkYXRpbmctbGluZWFyLXRleHR1cmUtZGF0YQorCisgICAgLy8g
IkxldCBibG9ja1dpZHRoLCBibG9ja0hlaWdodCwgYW5kIGJsb2NrU2l6ZSBiZSB0aGUgdGV4ZWwg
YmxvY2sgd2lkdGgsIGhlaWdodCwgYW5kIHNpemUgb2YgZm9ybWF0LiIKKyAgICBhdXRvIGJsb2Nr
V2lkdGggPSBUZXh0dXJlOjp0ZXhlbEJsb2NrV2lkdGgoZm9ybWF0KTsKKyAgICBhdXRvIGJsb2Nr
SGVpZ2h0ID0gVGV4dHVyZTo6dGV4ZWxCbG9ja0hlaWdodChmb3JtYXQpOworICAgIGF1dG8gYmxv
Y2tTaXplID0gVGV4dHVyZTo6dGV4ZWxCbG9ja1NpemUoZm9ybWF0KTsKKyAgICBpZiAoIWJsb2Nr
U2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gIkl0IGlzIGFzc3VtZWQgdGhh
dCBjb3B5RXh0ZW50LndpZHRoIGlzIGEgbXVsdGlwbGUgb2YgYmxvY2tXaWR0aCBhbmQgY29weUV4
dGVudC5oZWlnaHQgaXMgYSBtdWx0aXBsZSBvZiBibG9ja0hlaWdodC4iCisKKyAgICAvLyAid2lk
dGhJbkJsb2NrcyBiZSBjb3B5RXh0ZW50LndpZHRoIMO3IGJsb2NrV2lkdGguIgorICAgIGF1dG8g
d2lkdGhJbkJsb2NrcyA9IGNvcHlFeHRlbnQud2lkdGggLyBibG9ja1dpZHRoOworCisgICAgLy8g
ImhlaWdodEluQmxvY2tzIGJlIGNvcHlFeHRlbnQuaGVpZ2h0IMO3IGJsb2NrSGVpZ2h0LiIKKyAg
ICBhdXRvIGhlaWdodEluQmxvY2tzID0gY29weUV4dGVudC5oZWlnaHQgLyBibG9ja0hlaWdodDsK
KworICAgIC8vICJieXRlc0luTGFzdFJvdyBiZSBibG9ja1NpemUgw5cgd2lkdGhJbkJsb2Nrcy4i
CisgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMuCisgICAgYXV0byBieXRlc0lu
TGFzdFJvdyA9ICpibG9ja1NpemUgKiB3aWR0aEluQmxvY2tzOworCisgICAgLy8gIklmIGhlaWdo
dEluQmxvY2tzID4gMSIKKyAgICBpZiAoaGVpZ2h0SW5CbG9ja3MgPiAxKSB7CisgICAgICAgIC8v
ICJsYXlvdXQuYnl0ZXNQZXJSb3cgbXVzdCBiZSBzcGVjaWZpZWQuIgorICAgICAgICBpZiAobGF5
b3V0LmJ5dGVzUGVyUm93ID09IFdHUFVfQ09QWV9TVFJJREVfVU5ERUZJTkVEKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJJZiBjb3B5RXh0ZW50LmRlcHRoT3JB
cnJheUxheWVycyA+IDEiCisgICAgaWYgKGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4g
MSkgeworICAgICAgICAvLyAibGF5b3V0LmJ5dGVzUGVyUm93IGFuZCBsYXlvdXQucm93c1Blcklt
YWdlIG11c3QgYmUgc3BlY2lmaWVkLiIKKyAgICAgICAgaWYgKGxheW91dC5ieXRlc1BlclJvdyA9
PSBXR1BVX0NPUFlfU1RSSURFX1VOREVGSU5FRCB8fCBsYXlvdXQucm93c1BlckltYWdlID09IFdH
UFVfQ09QWV9TVFJJREVfVU5ERUZJTkVEKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIC8vICJJZiBzcGVjaWZpZWQiCisgICAgaWYgKGxheW91dC5ieXRlc1BlclJvdyAh
PSBXR1BVX0NPUFlfU1RSSURFX1VOREVGSU5FRCkgeworICAgICAgICAvLyAibGF5b3V0LmJ5dGVz
UGVyUm93IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGJ5dGVzSW5MYXN0Um93LiIK
KyAgICAgICAgaWYgKGxheW91dC5ieXRlc1BlclJvdyA8PSBieXRlc0luTGFzdFJvdykKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyAiSWYgc3BlY2lmaWVkIgorICAg
IGlmIChsYXlvdXQucm93c1BlckltYWdlICE9IFdHUFVfQ09QWV9TVFJJREVfVU5ERUZJTkVEKSB7
CisgICAgICAgIC8vICJsYXlvdXQucm93c1BlckltYWdlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9y
IGVxdWFsIHRvIGhlaWdodEluQmxvY2tzLiIKKyAgICAgICAgaWYgKGxheW91dC5yb3dzUGVySW1h
Z2UgPCBoZWlnaHRJbkJsb2NrcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICAvLyAiTGV0IHJlcXVpcmVkQnl0ZXNJbkNvcHkgYmUgMC4iCisgICAgYXV0byByZXF1aXJl
ZEJ5dGVzSW5Db3B5ID0gMDsKKworICAgIC8vICJJZiBjb3B5RXh0ZW50LmRlcHRoT3JBcnJheUxh
eWVycyA+IDE6IgorICAgIGlmIChjb3B5RXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyA+IDEpIHsK
KyAgICAgICAgLy8gIkxldCBieXRlc1BlckltYWdlIGJlIGxheW91dC5ieXRlc1BlclJvdyDDlyBs
YXlvdXQucm93c1BlckltYWdlLiIKKyAgICAgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRo
bWV0aWMuCisgICAgICAgIGF1dG8gYnl0ZXNQZXJJbWFnZSA9IGxheW91dC5ieXRlc1BlclJvdyAq
IGxheW91dC5yb3dzUGVySW1hZ2U7CisKKyAgICAgICAgLy8gIkxldCBieXRlc0JlZm9yZUxhc3RJ
bWFnZSBiZSBieXRlc1BlckltYWdlIMOXIChjb3B5RXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyDi
iJIgMSkuIgorICAgICAgICBhdXRvIGJ5dGVzQmVmb3JlTGFzdEltYWdlID0gYnl0ZXNQZXJJbWFn
ZSAqIChjb3B5RXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyAtIDEpOworCisgICAgICAgIC8vICJB
ZGQgYnl0ZXNCZWZvcmVMYXN0SW1hZ2UgdG8gcmVxdWlyZWRCeXRlc0luQ29weS4iCisgICAgICAg
IHJlcXVpcmVkQnl0ZXNJbkNvcHkgKz0gYnl0ZXNCZWZvcmVMYXN0SW1hZ2U7CisgICAgfQorCisg
ICAgLy8gIklmIGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMDoiCisgICAgaWYgKGNv
cHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMCkgeworICAgICAgICAvLyAiSWYgaGVpZ2h0
SW5CbG9ja3MgPiAxIgorICAgICAgICBpZiAoaGVpZ2h0SW5CbG9ja3MgPiAxKSB7CisgICAgICAg
ICAgICAvLyAiYWRkIGxheW91dC5ieXRlc1BlclJvdyDDlyAoaGVpZ2h0SW5CbG9ja3Mg4oiSIDEp
IHRvIHJlcXVpcmVkQnl0ZXNJbkNvcHkuIgorICAgICAgICAgICAgcmVxdWlyZWRCeXRlc0luQ29w
eSArPSBsYXlvdXQuYnl0ZXNQZXJSb3cgKiAoaGVpZ2h0SW5CbG9ja3MgLSAxKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vICJJZiBoZWlnaHRJbkJsb2NrcyA+IDAiCisgICAgICAgIGlmIChoZWln
aHRJbkJsb2NrcyA+IDApIHsKKyAgICAgICAgICAgIC8vICJhZGQgYnl0ZXNJbkxhc3RSb3cgdG8g
cmVxdWlyZWRCeXRlc0luQ29weS4iCisgICAgICAgICAgICByZXF1aXJlZEJ5dGVzSW5Db3B5ICs9
IGJ5dGVzSW5MYXN0Um93OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gIkZhaWwgaWYgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBub3Qgc2F0aXNmaWVkOiIKKyAgICAvLyAibGF5b3V0
Lm9mZnNldCArIHJlcXVpcmVkQnl0ZXNJbkNvcHkg4omkIGJ5dGVTaXplLiIKKyAgICBpZiAobGF5
b3V0Lm9mZnNldCArIHJlcXVpcmVkQnl0ZXNJbkNvcHkgPiBieXRlU2l6ZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHZhbGlkYXRl
Q29weUJ1ZmZlclRvVGV4dHVyZShjb25zdCBXR1BVSW1hZ2VDb3B5QnVmZmVyJiBzb3VyY2UsIGNv
bnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBkZXN0aW5hdGlvbiwgY29uc3QgV0dQVUV4dGVudDNE
JiBjb3B5U2l6ZSkKK3sKKyAgICAvLyAiTGV0IGRzdFRleHR1cmVEZXNjIGJlIGRlc3RpbmF0aW9u
LnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uIgorICAgIGNvbnN0IGF1dG8mIGRzdFRleHR1cmVEZXNj
ID0gZnJvbUFQSShkZXN0aW5hdGlvbi50ZXh0dXJlKS5kZXNjcmlwdG9yKCk7CisKKyAgICAvLyAi
dmFsaWRhdGluZyBHUFVJbWFnZUNvcHlCdWZmZXIoc291cmNlKSByZXR1cm5zIHRydWUuIgorICAg
IGlmICghdmFsaWRhdGVJbWFnZUNvcHlCdWZmZXIoc291cmNlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gInNvdXJjZS5idWZmZXIuW1t1c2FnZV1dIGNvbnRhaW5zIENPUFlfU1JD
LiIKKyAgICBpZiAoIShmcm9tQVBJKHNvdXJjZS5idWZmZXIpLnVzYWdlKCkgJiBXR1BVQnVmZmVy
VXNhZ2VfQ29weVNyYykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJ2YWxpZGF0
aW5nIEdQVUltYWdlQ29weVRleHR1cmUoZGVzdGluYXRpb24sIGNvcHlTaXplKSByZXR1cm5zIHRy
dWUuIgorICAgIGlmICghdmFsaWRhdGVJbWFnZUNvcHlUZXh0dXJlKGRlc3RpbmF0aW9uLCBjb3B5
U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJkc3RUZXh0dXJlRGVzYy51
c2FnZSBjb250YWlucyBDT1BZX0RTVC4iCisgICAgaWYgKCEoZHN0VGV4dHVyZURlc2MudXNhZ2Ug
JiBXR1BVVGV4dHVyZVVzYWdlX0NvcHlEc3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyAiZHN0VGV4dHVyZURlc2Muc2FtcGxlQ291bnQgaXMgMS4iCisgICAgaWYgKGRzdFRleHR1
cmVEZXNjLnNhbXBsZUNvdW50ICE9IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8v
ICJJZiBkc3RUZXh0dXJlRGVzYy5mb3JtYXQgaXMgYSBkZXB0aC1vci1zdGVuY2lsIGZvcm1hdDoi
CisgICAgaWYgKFRleHR1cmU6OmlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoZHN0VGV4dHVyZURlc2Mu
Zm9ybWF0KSkgeworICAgICAgICAvLyAiZGVzdGluYXRpb24uYXNwZWN0IG11c3QgcmVmZXIgdG8g
YSBzaW5nbGUgYXNwZWN0IG9mIGRzdFRleHR1cmVEZXNjLmZvcm1hdCIKKyAgICAgICAgV0dQVVRl
eHR1cmVGb3JtYXQgc2luZ2xlQXNwZWN0Rm9ybWF0ID0gV0dQVVRleHR1cmVGb3JtYXRfVW5kZWZp
bmVkOworICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uLmFzcGVjdCkgeworICAgICAgICBjYXNl
IFdHUFVUZXh0dXJlQXNwZWN0X0FsbDoKKyAgICAgICAgICAgIGlmIChhdXRvIHN0ZW5jaWxPbmx5
QXNwZWN0Rm9ybWF0ID0gVGV4dHVyZTo6c3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQoZHN0VGV4dHVy
ZURlc2MuZm9ybWF0KSkKKyAgICAgICAgICAgICAgICBzaW5nbGVBc3BlY3RGb3JtYXQgPSAqc3Rl
bmNpbE9ubHlBc3BlY3RGb3JtYXQ7CisgICAgICAgICAgICBpZiAoYXV0byBkZXB0aE9ubHlBc3Bl
Y3RGb3JtYXQgPSBUZXh0dXJlOjpkZXB0aE9ubHlBc3BlY3RGb3JtYXQoZHN0VGV4dHVyZURlc2Mu
Zm9ybWF0KSkgeworICAgICAgICAgICAgICAgIGlmIChzaW5nbGVBc3BlY3RGb3JtYXQpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBzaW5nbGVBc3Bl
Y3RGb3JtYXQgPSAqZGVwdGhPbmx5QXNwZWN0Rm9ybWF0OworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfU3RlbmNpbE9ubHk6
CisgICAgICAgICAgICBpZiAoYXV0byBzdGVuY2lsT25seUFzcGVjdEZvcm1hdCA9IFRleHR1cmU6
OnN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0KGRzdFRleHR1cmVEZXNjLmZvcm1hdCkpCisgICAgICAg
ICAgICAgICAgc2luZ2xlQXNwZWN0Rm9ybWF0ID0gKnN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0Owor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRGVwdGhP
bmx5OgorICAgICAgICAgICAgaWYgKGF1dG8gZGVwdGhPbmx5QXNwZWN0Rm9ybWF0ID0gVGV4dHVy
ZTo6ZGVwdGhPbmx5QXNwZWN0Rm9ybWF0KGRzdFRleHR1cmVEZXNjLmZvcm1hdCkpCisgICAgICAg
ICAgICAgICAgc2luZ2xlQXNwZWN0Rm9ybWF0ID0gKmRlcHRoT25seUFzcGVjdEZvcm1hdDsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0ZvcmNlMzI6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2lu
Z2xlQXNwZWN0Rm9ybWF0ID09IFdHUFVUZXh0dXJlRm9ybWF0X1VuZGVmaW5lZCkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyAiYW5kIHRoYXQgYXNwZWN0IG11c3QgYmUg
YSB2YWxpZCBpbWFnZSBjb3B5IGRlc3RpbmF0aW9uIGFjY29yZGluZyB0byDCp+KArzI1LjEuMiBE
ZXB0aC1zdGVuY2lsIGZvcm1hdHMuIgorICAgICAgICBpZiAoIWlzVmFsaWRJbWFnZUNvcHlEZXN0
aW5hdGlvbihkc3RUZXh0dXJlRGVzYy5mb3JtYXQsIGRlc3RpbmF0aW9uLmFzcGVjdCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gInZhbGlkYXRpbmcgdGV4dHVy
ZSBjb3B5IHJhbmdlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkgcmV0dXJuIHRydWUuIgorICAgIGlm
ICghdmFsaWRhdGVUZXh0dXJlQ29weVJhbmdlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJJZiBkc3RUZXh0dXJlRGVzYy5mb3JtYXQgaXMg
bm90IGEgZGVwdGgtb3Itc3RlbmNpbCBmb3JtYXQ6IgorICAgIGlmICghVGV4dHVyZTo6aXNEZXB0
aE9yU3RlbmNpbEZvcm1hdChkc3RUZXh0dXJlRGVzYy5mb3JtYXQpKSB7CisgICAgICAgIC8vICJz
b3VyY2Uub2Zmc2V0IGlzIGEgbXVsdGlwbGUgb2YgdGhlIHRleGVsIGJsb2NrIHNpemUgb2YgZHN0
VGV4dHVyZURlc2MuZm9ybWF0LiIKKyAgICAgICAgYXV0byB0ZXhlbEJsb2NrU2l6ZSA9IFRleHR1
cmU6OnRleGVsQmxvY2tTaXplKGRzdFRleHR1cmVEZXNjLmZvcm1hdCk7CisgICAgICAgIGlmICgh
dGV4ZWxCbG9ja1NpemUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChz
b3VyY2UubGF5b3V0Lm9mZnNldCAlICp0ZXhlbEJsb2NrU2l6ZSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyAiSWYgZHN0VGV4dHVyZURlc2MuZm9ybWF0IGlzIGEg
ZGVwdGgtb3Itc3RlbmNpbCBmb3JtYXQ6IgorICAgIGlmIChUZXh0dXJlOjppc0RlcHRoT3JTdGVu
Y2lsRm9ybWF0KGRzdFRleHR1cmVEZXNjLmZvcm1hdCkpIHsKKyAgICAgICAgLy8gInNvdXJjZS5v
ZmZzZXQgaXMgYSBtdWx0aXBsZSBvZiA0LiIKKyAgICAgICAgaWYgKHNvdXJjZS5sYXlvdXQub2Zm
c2V0ICUgNCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyAidmFs
aWRhdGluZyBsaW5lYXIgdGV4dHVyZSBkYXRhKHNvdXJjZSwgc291cmNlLmJ1ZmZlci5bW3NpemVd
XSwgZHN0VGV4dHVyZURlc2MuZm9ybWF0LCBjb3B5U2l6ZSkgc3VjY2VlZHMuIgorICAgIGlmICgh
dmFsaWRhdGVMaW5lYXJUZXh0dXJlRGF0YShzb3VyY2UubGF5b3V0LCBmcm9tQVBJKHNvdXJjZS5i
dWZmZXIpLnNpemUoKSwgZHN0VGV4dHVyZURlc2MuZm9ybWF0LCBjb3B5U2l6ZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIENvbW1hbmRFbmNv
ZGVyOjpjb3B5QnVmZmVyVG9UZXh0dXJlKGNvbnN0IFdHUFVJbWFnZUNvcHlCdWZmZXImIHNvdXJj
ZSwgY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUmIGRlc3RpbmF0aW9uLCBjb25zdCBXR1BVRXh0
ZW50M0QmIGNvcHlTaXplKQogewotICAgIFVOVVNFRF9QQVJBTShzb3VyY2UpOwotICAgIFVOVVNF
RF9QQVJBTShkZXN0aW5hdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcHlTaXplKTsKKyAgICBp
ZiAoc291cmNlLm5leHRJbkNoYWluIHx8IHNvdXJjZS5sYXlvdXQubmV4dEluQ2hhaW4gfHwgZGVz
dGluYXRpb24ubmV4dEluQ2hhaW4pCisgICAgICAgIHJldHVybjsKKworICAgIC8vIGh0dHBzOi8v
Z3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2RvbS1ncHVjb21tYW5kZW5jb2Rlci1jb3B5YnVmZmVy
dG90ZXh0dXJlCisKKyAgICAvLyAiUHJlcGFyZSB0aGUgZW5jb2RlciBzdGF0ZSBvZiB0aGlzLiBJ
ZiBpdCByZXR1cm5zIGZhbHNlLCBzdG9wLiIKKyAgICBpZiAoIXByZXBhcmVUaGVFbmNvZGVyU3Rh
dGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gIklmIGFueSBvZiB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlIHVuc2F0aXNmaWVkIgorICAgIGlmICghdmFsaWRhdGVDb3B5QnVmZmVy
VG9UZXh0dXJlKHNvdXJjZSwgZGVzdGluYXRpb24sIGNvcHlTaXplKSkgeworICAgICAgICAvLyAi
Z2VuZXJhdGUgYSB2YWxpZGF0aW9uIGVycm9yIGFuZCBzdG9wLiIKKyAgICAgICAgbV9kZXZpY2Ut
PmdlbmVyYXRlQVZhbGlkYXRpb25FcnJvcigiVmFsaWRhdGlvbiBmYWlsdXJlLiIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgZW5zdXJlQmxpdENvbW1hbmRFbmNvZGVyKCk7CisKKyAg
ICBOU1VJbnRlZ2VyIHNvdXJjZUJ5dGVzUGVyUm93ID0gc291cmNlLmxheW91dC5ieXRlc1BlclJv
dzsKKworICAgIC8vIEZJWE1FOiBVc2UgY2hlY2tlZCBhcml0aG1ldGljCisgICAgTlNVSW50ZWdl
ciBzb3VyY2VCeXRlc1BlckltYWdlID0gc291cmNlLmxheW91dC5yb3dzUGVySW1hZ2UgKiBzb3Vy
Y2UubGF5b3V0LmJ5dGVzUGVyUm93OworCisgICAgTVRMQmxpdE9wdGlvbiBvcHRpb25zID0gTVRM
QmxpdE9wdGlvbk5vbmU7CisgICAgc3dpdGNoIChkZXN0aW5hdGlvbi5hc3BlY3QpIHsKKyAgICBj
YXNlIFdHUFVUZXh0dXJlQXNwZWN0X0FsbDoKKyAgICAgICAgb3B0aW9ucyA9IE1UTEJsaXRPcHRp
b25Ob25lOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X1N0ZW5j
aWxPbmx5OgorICAgICAgICBvcHRpb25zID0gTVRMQmxpdE9wdGlvblN0ZW5jaWxGcm9tRGVwdGhT
dGVuY2lsOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0RlcHRo
T25seToKKyAgICAgICAgb3B0aW9ucyA9IE1UTEJsaXRPcHRpb25EZXB0aEZyb21EZXB0aFN0ZW5j
aWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRm9yY2UzMjoK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8mIGRlc3RpbmF0aW9uRGVzY3JpcHRv
ciA9IGZyb21BUEkoZGVzdGluYXRpb24udGV4dHVyZSkuZGVzY3JpcHRvcigpOworICAgIHN3aXRj
aCAoZGVzdGluYXRpb25EZXNjcmlwdG9yLmRpbWVuc2lvbikgeworICAgIGNhc2UgV0dQVVRleHR1
cmVEaW1lbnNpb25fMUQ6IHsKKyAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29t
L2RvY3VtZW50YXRpb24vbWV0YWwvbXRsYmxpdGNvbW1hbmRlbmNvZGVyLzE0MDA3NzEtY29weWZy
b21idWZmZXI/bGFuZ3VhZ2U9b2JqYworICAgICAgICAvLyAiV2hlbiB5b3UgY29weSB0byBhIDFE
IHRleHR1cmUsIGhlaWdodCBhbmQgZGVwdGggbXVzdCBiZSAxLiIKKyAgICAgICAgYXV0byBzb3Vy
Y2VTaXplID0gTVRMU2l6ZU1ha2UoY29weVNpemUud2lkdGgsIDEsIDEpOworICAgICAgICBhdXRv
IGRlc3RpbmF0aW9uT3JpZ2luID0gTVRMT3JpZ2luTWFrZShkZXN0aW5hdGlvbi5vcmlnaW4ueCwg
MSwgMSk7CisgICAgICAgIGZvciAodWludDMyX3QgbGF5ZXIgPSAwOyBsYXllciA8IGNvcHlTaXpl
LmRlcHRoT3JBcnJheUxheWVyczsgKytsYXllcikgeworICAgICAgICAgICAgLy8gRklYTUU6IFVz
ZSBjaGVja2VkIGFyaXRobWV0aWMuCisgICAgICAgICAgICBOU1VJbnRlZ2VyIHNvdXJjZU9mZnNl
dCA9IHNvdXJjZS5sYXlvdXQub2Zmc2V0ICsgbGF5ZXIgKiBzb3VyY2VCeXRlc1BlckltYWdlOwor
ICAgICAgICAgICAgTlNVSW50ZWdlciBkZXN0aW5hdGlvblNsaWNlID0gZGVzdGluYXRpb24ub3Jp
Z2luLnogKyBsYXllcjsKKyAgICAgICAgICAgIFttX2JsaXRDb21tYW5kRW5jb2RlcgorICAgICAg
ICAgICAgICAgIGNvcHlGcm9tQnVmZmVyOmZyb21BUEkoc291cmNlLmJ1ZmZlcikuYnVmZmVyKCkK
KyAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXQ6c291cmNlT2Zmc2V0CisgICAgICAgICAgICAg
ICAgc291cmNlQnl0ZXNQZXJSb3c6c291cmNlQnl0ZXNQZXJSb3cKKyAgICAgICAgICAgICAgICBz
b3VyY2VCeXRlc1BlckltYWdlOnNvdXJjZUJ5dGVzUGVySW1hZ2UKKyAgICAgICAgICAgICAgICBz
b3VyY2VTaXplOnNvdXJjZVNpemUKKyAgICAgICAgICAgICAgICB0b1RleHR1cmU6ZnJvbUFQSShk
ZXN0aW5hdGlvbi50ZXh0dXJlKS50ZXh0dXJlKCkKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlv
blNsaWNlOmRlc3RpbmF0aW9uU2xpY2UKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkxldmVs
OmRlc3RpbmF0aW9uLm1pcExldmVsCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25PcmlnaW46
ZGVzdGluYXRpb25PcmlnaW4KKyAgICAgICAgICAgICAgICBvcHRpb25zOm9wdGlvbnNdOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5z
aW9uXzJEOiB7CisgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVu
dGF0aW9uL21ldGFsL210bGJsaXRjb21tYW5kZW5jb2Rlci8xNDAwNzcxLWNvcHlmcm9tYnVmZmVy
P2xhbmd1YWdlPW9iamMKKyAgICAgICAgLy8gIldoZW4geW91IGNvcHkgdG8gYSAyRCB0ZXh0dXJl
LCBkZXB0aCBtdXN0IGJlIDEuIgorICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBNVExTaXplTWFr
ZShjb3B5U2l6ZS53aWR0aCwgY29weVNpemUuaGVpZ2h0LCAxKTsKKyAgICAgICAgYXV0byBkZXN0
aW5hdGlvbk9yaWdpbiA9IE1UTE9yaWdpbk1ha2UoZGVzdGluYXRpb24ub3JpZ2luLngsIGRlc3Rp
bmF0aW9uLm9yaWdpbi55LCAxKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBsYXllciA9IDA7IGxh
eWVyIDwgY29weVNpemUuZGVwdGhPckFycmF5TGF5ZXJzOyArK2xheWVyKSB7CisgICAgICAgICAg
ICAvLyBGSVhNRTogVXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KKyAgICAgICAgICAgIE5TVUludGVn
ZXIgc291cmNlT2Zmc2V0ID0gc291cmNlLmxheW91dC5vZmZzZXQgKyBsYXllciAqIHNvdXJjZUJ5
dGVzUGVySW1hZ2U7CisgICAgICAgICAgICBOU1VJbnRlZ2VyIGRlc3RpbmF0aW9uU2xpY2UgPSBk
ZXN0aW5hdGlvbi5vcmlnaW4ueiArIGxheWVyOworICAgICAgICAgICAgW21fYmxpdENvbW1hbmRF
bmNvZGVyCisgICAgICAgICAgICAgICAgY29weUZyb21CdWZmZXI6ZnJvbUFQSShzb3VyY2UuYnVm
ZmVyKS5idWZmZXIoKQorICAgICAgICAgICAgICAgIHNvdXJjZU9mZnNldDpzb3VyY2VPZmZzZXQK
KyAgICAgICAgICAgICAgICBzb3VyY2VCeXRlc1BlclJvdzpzb3VyY2VCeXRlc1BlclJvdworICAg
ICAgICAgICAgICAgIHNvdXJjZUJ5dGVzUGVySW1hZ2U6c291cmNlQnl0ZXNQZXJJbWFnZQorICAg
ICAgICAgICAgICAgIHNvdXJjZVNpemU6c291cmNlU2l6ZQorICAgICAgICAgICAgICAgIHRvVGV4
dHVyZTpmcm9tQVBJKGRlc3RpbmF0aW9uLnRleHR1cmUpLnRleHR1cmUoKQorICAgICAgICAgICAg
ICAgIGRlc3RpbmF0aW9uU2xpY2U6ZGVzdGluYXRpb25TbGljZQorICAgICAgICAgICAgICAgIGRl
c3RpbmF0aW9uTGV2ZWw6ZGVzdGluYXRpb24ubWlwTGV2ZWwKKyAgICAgICAgICAgICAgICBkZXN0
aW5hdGlvbk9yaWdpbjpkZXN0aW5hdGlvbk9yaWdpbgorICAgICAgICAgICAgICAgIG9wdGlvbnM6
b3B0aW9uc107CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV0dQ
VVRleHR1cmVEaW1lbnNpb25fM0Q6IHsKKyAgICAgICAgYXV0byBzb3VyY2VTaXplID0gTVRMU2l6
ZU1ha2UoY29weVNpemUud2lkdGgsIGNvcHlTaXplLmhlaWdodCwgY29weVNpemUuZGVwdGhPckFy
cmF5TGF5ZXJzKTsKKyAgICAgICAgYXV0byBkZXN0aW5hdGlvbk9yaWdpbiA9IE1UTE9yaWdpbk1h
a2UoZGVzdGluYXRpb24ub3JpZ2luLngsIGRlc3RpbmF0aW9uLm9yaWdpbi55LCBkZXN0aW5hdGlv
bi5vcmlnaW4ueik7CisgICAgICAgIE5TVUludGVnZXIgc291cmNlT2Zmc2V0ID0gc291cmNlLmxh
eW91dC5vZmZzZXQ7CisgICAgICAgIFttX2JsaXRDb21tYW5kRW5jb2RlcgorICAgICAgICAgICAg
Y29weUZyb21CdWZmZXI6ZnJvbUFQSShzb3VyY2UuYnVmZmVyKS5idWZmZXIoKQorICAgICAgICAg
ICAgc291cmNlT2Zmc2V0OnNvdXJjZU9mZnNldAorICAgICAgICAgICAgc291cmNlQnl0ZXNQZXJS
b3c6c291cmNlQnl0ZXNQZXJSb3cKKyAgICAgICAgICAgIHNvdXJjZUJ5dGVzUGVySW1hZ2U6c291
cmNlQnl0ZXNQZXJJbWFnZQorICAgICAgICAgICAgc291cmNlU2l6ZTpzb3VyY2VTaXplCisgICAg
ICAgICAgICB0b1RleHR1cmU6ZnJvbUFQSShkZXN0aW5hdGlvbi50ZXh0dXJlKS50ZXh0dXJlKCkK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xpY2U6MAorICAgICAgICAgICAgZGVzdGluYXRpb25M
ZXZlbDpkZXN0aW5hdGlvbi5taXBMZXZlbAorICAgICAgICAgICAgZGVzdGluYXRpb25PcmlnaW46
ZGVzdGluYXRpb25PcmlnaW4KKyAgICAgICAgICAgIG9wdGlvbnM6b3B0aW9uc107CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uX0ZvcmNlMzI6Cisg
ICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIHZhbGlkYXRlQ29weVRleHR1
cmVUb0J1ZmZlcihjb25zdCBXR1BVSW1hZ2VDb3B5VGV4dHVyZSYgc291cmNlLCBjb25zdCBXR1BV
SW1hZ2VDb3B5QnVmZmVyJiBkZXN0aW5hdGlvbiwgY29uc3QgV0dQVUV4dGVudDNEJiBjb3B5U2l6
ZSkKK3sKKyAgICAvLyAiTGV0IHNyY1RleHR1cmVEZXNjIGJlIHNvdXJjZS50ZXh0dXJlLltbZGVz
Y3JpcHRvcl1dLiIKKyAgICBjb25zdCBhdXRvJiBzcmNUZXh0dXJlRGVzYyA9IGZyb21BUEkoc291
cmNlLnRleHR1cmUpLmRlc2NyaXB0b3IoKTsKKworICAgIC8vICJ2YWxpZGF0aW5nIEdQVUltYWdl
Q29weVRleHR1cmUoc291cmNlLCBjb3B5U2l6ZSkgcmV0dXJucyB0cnVlLiIKKyAgICBpZiAoIXZh
bGlkYXRlSW1hZ2VDb3B5VGV4dHVyZShzb3VyY2UsIGNvcHlTaXplKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgLy8gInNyY1RleHR1cmVEZXNjLnVzYWdlIGNvbnRhaW5zIENPUFlfU1JD
LiIKKyAgICBpZiAoIShzcmNUZXh0dXJlRGVzYy51c2FnZSAmIFdHUFVCdWZmZXJVc2FnZV9Db3B5
U3JjKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gInNyY1RleHR1cmVEZXNjLnNh
bXBsZUNvdW50IGlzIDEuIgorICAgIGlmIChzcmNUZXh0dXJlRGVzYy5zYW1wbGVDb3VudCAhPSAx
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiSWYgc3JjVGV4dHVyZURlc2MuZm9y
bWF0IGlzIGEgZGVwdGgtc3RlbmNpbCBmb3JtYXQ6IgorICAgIGlmIChUZXh0dXJlOjppc0RlcHRo
T3JTdGVuY2lsRm9ybWF0KHNyY1RleHR1cmVEZXNjLmZvcm1hdCkpIHsKKyAgICAgICAgLy8gInNv
dXJjZS5hc3BlY3QgbXVzdCByZWZlciB0byBhIHNpbmdsZSBhc3BlY3Qgb2Ygc3JjVGV4dHVyZURl
c2MuZm9ybWF0IgorICAgICAgICBXR1BVVGV4dHVyZUZvcm1hdCBzaW5nbGVBc3BlY3RGb3JtYXQg
PSBXR1BVVGV4dHVyZUZvcm1hdF9VbmRlZmluZWQ7CisgICAgICAgIHN3aXRjaCAoc291cmNlLmFz
cGVjdCkgeworICAgICAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0FsbDoKKyAgICAgICAgICAg
IGlmIChhdXRvIHN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0ID0gVGV4dHVyZTo6c3RlbmNpbE9ubHlB
c3BlY3RGb3JtYXQoc3JjVGV4dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAgICAgICAgICBzaW5n
bGVBc3BlY3RGb3JtYXQgPSAqc3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQ7CisgICAgICAgICAgICBp
ZiAoYXV0byBkZXB0aE9ubHlBc3BlY3RGb3JtYXQgPSBUZXh0dXJlOjpkZXB0aE9ubHlBc3BlY3RG
b3JtYXQoc3JjVGV4dHVyZURlc2MuZm9ybWF0KSkgeworICAgICAgICAgICAgICAgIGlmIChzaW5n
bGVBc3BlY3RGb3JtYXQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBzaW5nbGVBc3BlY3RGb3JtYXQgPSAqZGVwdGhPbmx5QXNwZWN0Rm9ybWF0Owor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1
cmVBc3BlY3RfU3RlbmNpbE9ubHk6CisgICAgICAgICAgICBpZiAoYXV0byBzdGVuY2lsT25seUFz
cGVjdEZvcm1hdCA9IFRleHR1cmU6OnN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0KHNyY1RleHR1cmVE
ZXNjLmZvcm1hdCkpCisgICAgICAgICAgICAgICAgc2luZ2xlQXNwZWN0Rm9ybWF0ID0gKnN0ZW5j
aWxPbmx5QXNwZWN0Rm9ybWF0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQ
VVRleHR1cmVBc3BlY3RfRGVwdGhPbmx5OgorICAgICAgICAgICAgaWYgKGF1dG8gZGVwdGhPbmx5
QXNwZWN0Rm9ybWF0ID0gVGV4dHVyZTo6ZGVwdGhPbmx5QXNwZWN0Rm9ybWF0KHNyY1RleHR1cmVE
ZXNjLmZvcm1hdCkpCisgICAgICAgICAgICAgICAgc2luZ2xlQXNwZWN0Rm9ybWF0ID0gKmRlcHRo
T25seUFzcGVjdEZvcm1hdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdHUFVU
ZXh0dXJlQXNwZWN0X0ZvcmNlMzI6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoc2luZ2xlQXNwZWN0Rm9ybWF0ID09IFdHUFVUZXh0dXJlRm9ybWF0
X1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyAiYW5k
IHRoYXQgYXNwZWN0IG11c3QgYmUgYSB2YWxpZCBpbWFnZSBjb3B5IGRlc3RpbmF0aW9uIGFjY29y
ZGluZyB0byDCp+KArzI1LjEuMiBEZXB0aC1zdGVuY2lsIGZvcm1hdHMuIgorICAgICAgICBpZiAo
IWlzVmFsaWRJbWFnZUNvcHlEZXN0aW5hdGlvbihzcmNUZXh0dXJlRGVzYy5mb3JtYXQsIHNvdXJj
ZS5hc3BlY3QpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJ2
YWxpZGF0aW5nIEdQVUltYWdlQ29weUJ1ZmZlcihkZXN0aW5hdGlvbikgcmV0dXJucyB0cnVlLiIK
KyAgICBpZiAoIXZhbGlkYXRlSW1hZ2VDb3B5QnVmZmVyKGRlc3RpbmF0aW9uKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gImRlc3RpbmF0aW9uLmJ1ZmZlci5bW3VzYWdlXV0gY29u
dGFpbnMgQ09QWV9EU1QuIgorICAgIGlmICghKGZyb21BUEkoZGVzdGluYXRpb24uYnVmZmVyKS51
c2FnZSgpICYgV0dQVUJ1ZmZlclVzYWdlX0NvcHlEc3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyAidmFsaWRhdGluZyB0ZXh0dXJlIGNvcHkgcmFuZ2Uoc291cmNlLCBjb3B5U2l6
ZSkgcmV0dXJucyB0cnVlLiIKKyAgICBpZiAoIXZhbGlkYXRlVGV4dHVyZUNvcHlSYW5nZShzb3Vy
Y2UsIGNvcHlTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gIklmIHNyY1Rl
eHR1cmVEZXNjLmZvcm1hdCBpcyBub3QgYSBkZXB0aC1vci1zdGVuY2lsIGZvcm1hdDoiCisgICAg
aWYgKCFUZXh0dXJlOjppc0RlcHRoT3JTdGVuY2lsRm9ybWF0KHNyY1RleHR1cmVEZXNjLmZvcm1h
dCkpIHsKKyAgICAgICAgLy8gImRlc3RpbmF0aW9uLm9mZnNldCBpcyBhIG11bHRpcGxlIG9mIHRo
ZSB0ZXhlbCBibG9jayBzaXplIG9mIHNyY1RleHR1cmVEZXNjLmZvcm1hdC4iCisgICAgICAgIGF1
dG8gdGV4ZWxCbG9ja1NpemUgPSBUZXh0dXJlOjp0ZXhlbEJsb2NrU2l6ZShzcmNUZXh0dXJlRGVz
Yy5mb3JtYXQpOworICAgICAgICBpZiAoIXRleGVsQmxvY2tTaXplKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBpZiAoZGVzdGluYXRpb24ubGF5b3V0Lm9mZnNldCAlICp0ZXhl
bEJsb2NrU2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyAi
SWYgc3JjVGV4dHVyZURlc2MuZm9ybWF0IGlzIGEgZGVwdGgtb3Itc3RlbmNpbCBmb3JtYXQ6Igor
ICAgIGlmIChUZXh0dXJlOjppc0RlcHRoT3JTdGVuY2lsRm9ybWF0KHNyY1RleHR1cmVEZXNjLmZv
cm1hdCkpIHsKKyAgICAgICAgLy8gImRlc3RpbmF0aW9uLm9mZnNldCBpcyBhIG11bHRpcGxlIG9m
IDQuIgorICAgICAgICBpZiAoZGVzdGluYXRpb24ubGF5b3V0Lm9mZnNldCAlIDQpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gInZhbGlkYXRpbmcgbGluZWFyIHRl
eHR1cmUgZGF0YShkZXN0aW5hdGlvbiwgZGVzdGluYXRpb24uYnVmZmVyLltbc2l6ZV1dLCBzcmNU
ZXh0dXJlRGVzYy5mb3JtYXQsIGNvcHlTaXplKSBzdWNjZWVkcy4iCisgICAgaWYgKCF2YWxpZGF0
ZUxpbmVhclRleHR1cmVEYXRhKGRlc3RpbmF0aW9uLmxheW91dCwgZnJvbUFQSShkZXN0aW5hdGlv
bi5idWZmZXIpLnNpemUoKSwgc3JjVGV4dHVyZURlc2MuZm9ybWF0LCBjb3B5U2l6ZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIENvbW1hbmRF
bmNvZGVyOjpjb3B5VGV4dHVyZVRvQnVmZmVyKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBz
b3VyY2UsIGNvbnN0IFdHUFVJbWFnZUNvcHlCdWZmZXImIGRlc3RpbmF0aW9uLCBjb25zdCBXR1BV
RXh0ZW50M0QmIGNvcHlTaXplKQogewotICAgIFVOVVNFRF9QQVJBTShzb3VyY2UpOwotICAgIFVO
VVNFRF9QQVJBTShkZXN0aW5hdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcHlTaXplKTsKKyAg
ICBpZiAoc291cmNlLm5leHRJbkNoYWluIHx8IGRlc3RpbmF0aW9uLm5leHRJbkNoYWluIHx8IGRl
c3RpbmF0aW9uLmxheW91dC5uZXh0SW5DaGFpbikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
aHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jZG9tLWdwdWNvbW1hbmRlbmNvZGVyLWNv
cHl0ZXh0dXJldG9idWZmZXIKKworICAgIC8vICJQcmVwYXJlIHRoZSBlbmNvZGVyIHN0YXRlIG9m
IHRoaXMuIElmIGl0IHJldHVybnMgZmFsc2UsIHN0b3AuIgorICAgIGlmICghcHJlcGFyZVRoZUVu
Y29kZXJTdGF0ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyAiSWYgYW55IG9mIHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgdW5zYXRpc2ZpZWQiCisgICAgaWYgKCF2YWxpZGF0ZUNv
cHlUZXh0dXJlVG9CdWZmZXIoc291cmNlLCBkZXN0aW5hdGlvbiwgY29weVNpemUpKSB7CisgICAg
ICAgIC8vICJnZW5lcmF0ZSBhIHZhbGlkYXRpb24gZXJyb3IgYW5kIHN0b3AuIgorICAgICAgICBt
X2RldmljZS0+Z2VuZXJhdGVBVmFsaWRhdGlvbkVycm9yKCJWYWxpZGF0aW9uIGZhaWx1cmUuIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlbnN1cmVCbGl0Q29tbWFuZEVuY29kZXIo
KTsKKworICAgIE5TVUludGVnZXIgZGVzdGluYXRpb25CeXRlc1BlclJvdyA9IGRlc3RpbmF0aW9u
LmxheW91dC5ieXRlc1BlclJvdzsKKworICAgIC8vIEZJWE1FOiBVc2UgY2hlY2tlZCBhcml0aG1l
dGljCisgICAgTlNVSW50ZWdlciBkZXN0aW5hdGlvbkJ5dGVzUGVySW1hZ2UgPSBkZXN0aW5hdGlv
bi5sYXlvdXQucm93c1BlckltYWdlICogZGVzdGluYXRpb24ubGF5b3V0LmJ5dGVzUGVyUm93Owor
CisgICAgTVRMQmxpdE9wdGlvbiBvcHRpb25zID0gTVRMQmxpdE9wdGlvbk5vbmU7CisgICAgc3dp
dGNoIChzb3VyY2UuYXNwZWN0KSB7CisgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9BbGw6Cisg
ICAgICAgIG9wdGlvbnMgPSBNVExCbGl0T3B0aW9uTm9uZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25seToKKyAgICAgICAgb3B0aW9ucyA9IE1U
TEJsaXRPcHRpb25TdGVuY2lsRnJvbURlcHRoU3RlbmNpbDsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9EZXB0aE9ubHk6CisgICAgICAgIG9wdGlvbnMgPSBNVExC
bGl0T3B0aW9uRGVwdGhGcm9tRGVwdGhTdGVuY2lsOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFdHUFVUZXh0dXJlQXNwZWN0X0ZvcmNlMzI6CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBhdXRvJiBzb3VyY2VEZXNjcmlwdG9yID0gZnJvbUFQSShzb3VyY2UudGV4dHVyZSkuZGVzY3Jp
cHRvcigpOworICAgIHN3aXRjaCAoc291cmNlRGVzY3JpcHRvci5kaW1lbnNpb24pIHsKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzFEOiB7CisgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxv
cGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL21ldGFsL210bGJsaXRjb21tYW5kZW5jb2Rlci8x
NDAwNzU2LWNvcHlmcm9tdGV4dHVyZT9sYW5ndWFnZT1vYmpjCisgICAgICAgIC8vICJXaGVuIHlv
dSBjb3B5IHRvIGEgMUQgdGV4dHVyZSwgaGVpZ2h0IGFuZCBkZXB0aCBtdXN0IGJlIDEuIgorICAg
ICAgICBhdXRvIHNvdXJjZVNpemUgPSBNVExTaXplTWFrZShjb3B5U2l6ZS53aWR0aCwgMSwgMSk7
CisgICAgICAgIGF1dG8gc291cmNlT3JpZ2luID0gTVRMT3JpZ2luTWFrZShzb3VyY2Uub3JpZ2lu
LngsIDEsIDEpOworICAgICAgICBmb3IgKHVpbnQzMl90IGxheWVyID0gMDsgbGF5ZXIgPCBjb3B5
U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnM7ICsrbGF5ZXIpIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBVc2UgY2hlY2tlZCBhcml0aG1ldGljLgorICAgICAgICAgICAgTlNVSW50ZWdlciBkZXN0aW5h
dGlvbk9mZnNldCA9IGRlc3RpbmF0aW9uLmxheW91dC5vZmZzZXQgKyBsYXllciAqIGRlc3RpbmF0
aW9uQnl0ZXNQZXJJbWFnZTsKKyAgICAgICAgICAgIE5TVUludGVnZXIgc291cmNlU2xpY2UgPSBz
b3VyY2Uub3JpZ2luLnogKyBsYXllcjsKKyAgICAgICAgICAgIFttX2JsaXRDb21tYW5kRW5jb2Rl
cgorICAgICAgICAgICAgICAgIGNvcHlGcm9tVGV4dHVyZTpmcm9tQVBJKHNvdXJjZS50ZXh0dXJl
KS50ZXh0dXJlKCkKKyAgICAgICAgICAgICAgICBzb3VyY2VTbGljZTpzb3VyY2VTbGljZQorICAg
ICAgICAgICAgICAgIHNvdXJjZUxldmVsOnNvdXJjZS5taXBMZXZlbAorICAgICAgICAgICAgICAg
IHNvdXJjZU9yaWdpbjpzb3VyY2VPcmlnaW4KKyAgICAgICAgICAgICAgICBzb3VyY2VTaXplOnNv
dXJjZVNpemUKKyAgICAgICAgICAgICAgICB0b0J1ZmZlcjpmcm9tQVBJKGRlc3RpbmF0aW9uLmJ1
ZmZlcikuYnVmZmVyKCkKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9mZnNldDpkZXN0aW5h
dGlvbk9mZnNldAorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3c6ZGVzdGlu
YXRpb25CeXRlc1BlclJvdworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uQnl0ZXNQZXJJbWFn
ZTpkZXN0aW5hdGlvbkJ5dGVzUGVySW1hZ2UKKyAgICAgICAgICAgICAgICBvcHRpb25zOm9wdGlv
bnNdOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdHUFVUZXh0
dXJlRGltZW5zaW9uXzJEOiB7CisgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNv
bS9kb2N1bWVudGF0aW9uL21ldGFsL210bGJsaXRjb21tYW5kZW5jb2Rlci8xNDAwNzU2LWNvcHlm
cm9tdGV4dHVyZT9sYW5ndWFnZT1vYmpjCisgICAgICAgIC8vICJXaGVuIHlvdSBjb3B5IHRvIGEg
MkQgdGV4dHVyZSwgZGVwdGggbXVzdCBiZSAxLiIKKyAgICAgICAgYXV0byBzb3VyY2VTaXplID0g
TVRMU2l6ZU1ha2UoY29weVNpemUud2lkdGgsIGNvcHlTaXplLmhlaWdodCwgMSk7CisgICAgICAg
IGF1dG8gc291cmNlT3JpZ2luID0gTVRMT3JpZ2luTWFrZShzb3VyY2Uub3JpZ2luLngsIHNvdXJj
ZS5vcmlnaW4ueSwgMSk7CisgICAgICAgIGZvciAodWludDMyX3QgbGF5ZXIgPSAwOyBsYXllciA8
IGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVyczsgKytsYXllcikgeworICAgICAgICAgICAgLy8g
RklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMuCisgICAgICAgICAgICBOU1VJbnRlZ2VyIGRl
c3RpbmF0aW9uT2Zmc2V0ID0gZGVzdGluYXRpb24ubGF5b3V0Lm9mZnNldCArIGxheWVyICogZGVz
dGluYXRpb25CeXRlc1BlckltYWdlOworICAgICAgICAgICAgTlNVSW50ZWdlciBzb3VyY2VTbGlj
ZSA9IHNvdXJjZS5vcmlnaW4ueiArIGxheWVyOworICAgICAgICAgICAgW21fYmxpdENvbW1hbmRF
bmNvZGVyCisgICAgICAgICAgICAgICAgY29weUZyb21UZXh0dXJlOmZyb21BUEkoc291cmNlLnRl
eHR1cmUpLnRleHR1cmUoKQorICAgICAgICAgICAgICAgIHNvdXJjZVNsaWNlOnNvdXJjZVNsaWNl
CisgICAgICAgICAgICAgICAgc291cmNlTGV2ZWw6c291cmNlLm1pcExldmVsCisgICAgICAgICAg
ICAgICAgc291cmNlT3JpZ2luOnNvdXJjZU9yaWdpbgorICAgICAgICAgICAgICAgIHNvdXJjZVNp
emU6c291cmNlU2l6ZQorICAgICAgICAgICAgICAgIHRvQnVmZmVyOmZyb21BUEkoZGVzdGluYXRp
b24uYnVmZmVyKS5idWZmZXIoKQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0OmRl
c3RpbmF0aW9uT2Zmc2V0CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25CeXRlc1BlclJvdzpk
ZXN0aW5hdGlvbkJ5dGVzUGVyUm93CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25CeXRlc1Bl
ckltYWdlOmRlc3RpbmF0aW9uQnl0ZXNQZXJJbWFnZQorICAgICAgICAgICAgICAgIG9wdGlvbnM6
b3B0aW9uc107CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV0dQ
VVRleHR1cmVEaW1lbnNpb25fM0Q6IHsKKyAgICAgICAgYXV0byBzb3VyY2VTaXplID0gTVRMU2l6
ZU1ha2UoY29weVNpemUud2lkdGgsIGNvcHlTaXplLmhlaWdodCwgY29weVNpemUuZGVwdGhPckFy
cmF5TGF5ZXJzKTsKKyAgICAgICAgYXV0byBzb3VyY2VPcmlnaW4gPSBNVExPcmlnaW5NYWtlKHNv
dXJjZS5vcmlnaW4ueCwgc291cmNlLm9yaWdpbi55LCBzb3VyY2Uub3JpZ2luLnopOworICAgICAg
ICBOU1VJbnRlZ2VyIGRlc3RpbmF0aW9uT2Zmc2V0ID0gZGVzdGluYXRpb24ubGF5b3V0Lm9mZnNl
dDsKKyAgICAgICAgICAgIFttX2JsaXRDb21tYW5kRW5jb2RlcgorICAgICAgICAgICAgICAgIGNv
cHlGcm9tVGV4dHVyZTpmcm9tQVBJKHNvdXJjZS50ZXh0dXJlKS50ZXh0dXJlKCkKKyAgICAgICAg
ICAgICAgICBzb3VyY2VTbGljZTowCisgICAgICAgICAgICAgICAgc291cmNlTGV2ZWw6c291cmNl
Lm1pcExldmVsCisgICAgICAgICAgICAgICAgc291cmNlT3JpZ2luOnNvdXJjZU9yaWdpbgorICAg
ICAgICAgICAgICAgIHNvdXJjZVNpemU6c291cmNlU2l6ZQorICAgICAgICAgICAgICAgIHRvQnVm
ZmVyOmZyb21BUEkoZGVzdGluYXRpb24uYnVmZmVyKS5idWZmZXIoKQorICAgICAgICAgICAgICAg
IGRlc3RpbmF0aW9uT2Zmc2V0OmRlc3RpbmF0aW9uT2Zmc2V0CisgICAgICAgICAgICAgICAgZGVz
dGluYXRpb25CeXRlc1BlclJvdzpkZXN0aW5hdGlvbkJ5dGVzUGVyUm93CisgICAgICAgICAgICAg
ICAgZGVzdGluYXRpb25CeXRlc1BlckltYWdlOmRlc3RpbmF0aW9uQnl0ZXNQZXJJbWFnZQorICAg
ICAgICAgICAgICAgIG9wdGlvbnM6b3B0aW9uc107CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uX0ZvcmNlMzI6CisgICAgICAgIHJldHVybjsKKyAg
ICB9Cit9CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFdHUFVUZXh0dXJlRm9ybWF0PiBpc1NSR0JD
b21wYXRpYmxlKFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1h
dCkgeworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfVW5kZWZpbmVkOgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X1I4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9S
OFNub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjhVaW50OgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfUjhTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjE2VWlu
dDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IxNlNpbnQ6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9SMTZGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFVub3Jt
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkc4U25vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9SRzhVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkc4U2ludDoK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IzMkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfUjMyVWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IzMlNpbnQ6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X1JHMTZTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkcxNkZsb2F0Ogor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
UkdCQThVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4VW5vcm1TcmdiOgor
ICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkdCQThVbm9ybTsKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X1JHQkE4U25vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9S
R0JBOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFNpbnQ6CisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CR1JBOFVu
b3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkdSQThVbm9ybVNyZ2I6CisgICAgICAg
IHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CR1JBOFVub3JtOworICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfUkdCMTBBMlVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkcxMUIx
MFVmbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQjlFNVVmbG9hdDoKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMzJGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X1JHMzJVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkczMlNpbnQ6CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMTZVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfUkdCQTE2U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkExNkZsb2F0
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTMyRmxvYXQ6CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9SR0JBMzJVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdC
QTMyU2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1N0ZW5jaWw4OgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfRGVwdGgxNlVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfRGVwdGgyNFBsdXM6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDI0UGx1c1N0
ZW5jaWw4OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFVub3JtU3RlbmNpbDg6
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDMyRmxvYXQ6CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9EZXB0aDMyRmxvYXRTdGVuY2lsODoKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDMVJHQkFVbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDMVJHQkFVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBX
R1BVVGV4dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9CQzJSR0JBVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzJSR0JBVW5vcm1T
cmdiOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkMyUkdCQVVub3JtOworICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMzUkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfQkMzUkdCQVVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9y
bWF0X0JDM1JHQkFVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNFJVbm9ybToK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNFJTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0JDNVJHVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzVSR1Nu
b3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM2SFJHQlVmbG9hdDoKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0JDNkhSR0JGbG9hdDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDN1JHQkFVbm9ybToKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0JDN1JHQkFVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BV
VGV4dHVyZUZvcm1hdF9CQzdSR0JBVW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9F
VEMyUkdCOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhVbm9ybVNy
Z2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOFVub3JtOworICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhBMVVub3JtOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfRVRDMlJHQjhBMVVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0
dXJlRm9ybWF0X0VUQzJSR0I4QTFVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VU
QzJSR0JBOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQkE4VW5vcm1T
cmdiOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQkE4VW5vcm07Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FQUNSMTFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0VBQ1IxMVNub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUkcx
MVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUkcxMVNub3JtOgorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzR4
NFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzR4NFVub3JtU3JnYjoKKyAg
ICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM0eDRVbm9ybTsKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEM1eDRVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEM1eDRVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9BU1RD
NXg0VW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg1VW5vcm06CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg1VW5vcm1TcmdiOgorICAgICAgICByZXR1cm4g
V0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfQVNUQzZ4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NVVub3Jt
U3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDVVbm9ybTsKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDZVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0FTVEM2eDZVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZv
cm1hdF9BU1RDNng2VW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg1VW5v
cm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg1VW5vcm1TcmdiOgorICAgICAg
ICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NVVub3JtOworICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzh4NlVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNU
Qzh4NlVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDZV
bm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDhVbm9ybToKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDhVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BV
VGV4dHVyZUZvcm1hdF9BU1RDOHg4VW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9B
U1RDMTB4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDVVbm9ybVNy
Z2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NVVub3JtOworICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDZVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0FTVEMxMHg2VW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzEweDZVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg4
VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4OFVub3JtU3JnYjoKKyAg
ICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg4VW5vcm07CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4MTBVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0FTVEMxMHgxMFVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEMxMHgxMFVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEyeDEwVW5v
cm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTBVbm9ybVNyZ2I6CisgICAg
ICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTBVbm9ybTsKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMlVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfQVNUQzEyeDEyVW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRf
QVNUQzEyeDEyVW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9Gb3JjZTMyOgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICB9Cit9CisKK3N0YXRpYyBib29sIGFyZUNvcHlDb21wYXRpYmxlKFdHUFVUZXh0dXJlRm9y
bWF0IGZvcm1hdDEsIFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdDIpCit7CisgICAgLy8gaHR0cHM6
Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jY29weS1jb21wYXRpYmxlCisKKyAgICAvLyAiZm9y
bWF0MSBlcXVhbHMgZm9ybWF0MiIKKyAgICBpZiAoZm9ybWF0MSA9PSBmb3JtYXQyKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIC8vICJmb3JtYXQxIGFuZCBmb3JtYXQyIGRpZmZlciBvbmx5
IGluIHdoZXRoZXIgdGhleSBhcmUgc3JnYiBmb3JtYXRzIChoYXZlIHRoZSAtc3JnYiBzdWZmaXgp
LiIKKyAgICBhdXRvIGNhbm9uaWNhbGl6ZWRGb3JtYXQxID0gaXNTUkdCQ29tcGF0aWJsZShmb3Jt
YXQxKTsKKyAgICBhdXRvIGNhbm9uaWNhbGl6ZWRGb3JtYXQyID0gaXNTUkdCQ29tcGF0aWJsZShm
b3JtYXQyKTsKKyAgICBpZiAoIWNhbm9uaWNhbGl6ZWRGb3JtYXQxIHx8ICFjYW5vbmljYWxpemVk
Rm9ybWF0MikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChjYW5vbmljYWxpemVkRm9y
bWF0MSAhPSBjYW5vbmljYWxpemVkRm9ybWF0MSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHZhbGlkYXRlQ29weVRleHR1cmVUb1Rl
eHR1cmUoY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUmIHNvdXJjZSwgY29uc3QgV0dQVUltYWdl
Q29weVRleHR1cmUmIGRlc3RpbmF0aW9uLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQor
eworICAgIC8vICJMZXQgc3JjVGV4dHVyZURlc2MgYmUgc291cmNlLnRleHR1cmUuW1tkZXNjcmlw
dG9yXV0uIgorICAgIGNvbnN0IGF1dG8mIHNyY1RleHR1cmVEZXNjID0gZnJvbUFQSShzb3VyY2Uu
dGV4dHVyZSkuZGVzY3JpcHRvcigpOworCisgICAgLy8gIkxldCBkc3RUZXh0dXJlRGVzYyBiZSBk
ZXN0aW5hdGlvbi50ZXh0dXJlLltbZGVzY3JpcHRvcl1dLiIKKyAgICBjb25zdCBhdXRvJiBkc3RU
ZXh0dXJlRGVzYyA9IGZyb21BUEkoZGVzdGluYXRpb24udGV4dHVyZSkuZGVzY3JpcHRvcigpOwor
CisgICAgLy8gInZhbGlkYXRpbmcgR1BVSW1hZ2VDb3B5VGV4dHVyZShzb3VyY2UsIGNvcHlTaXpl
KSByZXR1cm5zIHRydWUuIgorICAgIGlmICghdmFsaWRhdGVJbWFnZUNvcHlUZXh0dXJlKHNvdXJj
ZSwgY29weVNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAic3JjVGV4dHVy
ZURlc2MudXNhZ2UgY29udGFpbnMgQ09QWV9TUkMuIgorICAgIGlmICghKHNyY1RleHR1cmVEZXNj
LnVzYWdlICYgV0dQVVRleHR1cmVVc2FnZV9Db3B5U3JjKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gInZhbGlkYXRpbmcgR1BVSW1hZ2VDb3B5VGV4dHVyZShkZXN0aW5hdGlvbiwg
Y29weVNpemUpIHJldHVybnMgdHJ1ZS4iCisgICAgaWYgKCF2YWxpZGF0ZUltYWdlQ29weVRleHR1
cmUoZGVzdGluYXRpb24sIGNvcHlTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ly8gImRzdFRleHR1cmVEZXNjLnVzYWdlIGNvbnRhaW5zIENPUFlfRFNULiIKKyAgICBpZiAoIShk
c3RUZXh0dXJlRGVzYy51c2FnZSAmIFdHUFVUZXh0dXJlVXNhZ2VfQ29weURzdCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vICJzcmNUZXh0dXJlRGVzYy5zYW1wbGVDb3VudCBpcyBl
cXVhbCB0byBkc3RUZXh0dXJlRGVzYy5zYW1wbGVDb3VudC4iCisgICAgaWYgKHNyY1RleHR1cmVE
ZXNjLnNhbXBsZUNvdW50ICE9IGRzdFRleHR1cmVEZXNjLnNhbXBsZUNvdW50KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyAic3JjVGV4dHVyZURlc2MuZm9ybWF0IGFuZCBkc3RUZXh0
dXJlRGVzYy5mb3JtYXQgbXVzdCBiZSBjb3B5LWNvbXBhdGlibGUuIgorICAgIGlmICghYXJlQ29w
eUNvbXBhdGlibGUoc3JjVGV4dHVyZURlc2MuZm9ybWF0LCBkc3RUZXh0dXJlRGVzYy5mb3JtYXQp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiSWYgc3JjVGV4dHVyZURlc2MuZm9y
bWF0IGlzIGEgZGVwdGgtc3RlbmNpbCBmb3JtYXQ6IgorICAgIGlmIChUZXh0dXJlOjppc0RlcHRo
T3JTdGVuY2lsRm9ybWF0KHNyY1RleHR1cmVEZXNjLmZvcm1hdCkpIHsKKyAgICAgICAgLy8gInNv
dXJjZS5hc3BlY3QgYW5kIGRlc3RpbmF0aW9uLmFzcGVjdCBtdXN0IGJvdGggcmVmZXIgdG8gYWxs
IGFzcGVjdHMgb2Ygc3JjVGV4dHVyZURlc2MuZm9ybWF0IGFuZCBkc3RUZXh0dXJlRGVzYy5mb3Jt
YXQsIHJlc3BlY3RpdmVseS4iCisgICAgICAgIHN3aXRjaCAoc291cmNlLmFzcGVjdCkgeworICAg
ICAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0FsbDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X1N0ZW5jaWxPbmx5OgorICAgICAgICAgICAgaWYg
KCFUZXh0dXJlOjpzdGVuY2lsT25seUFzcGVjdEZvcm1hdChzcmNUZXh0dXJlRGVzYy5mb3JtYXQp
IHx8IFRleHR1cmU6OmRlcHRoT25seUFzcGVjdEZvcm1hdChzcmNUZXh0dXJlRGVzYy5mb3JtYXQp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0RlcHRoT25seToKKyAgICAgICAgICAgIGlmICgh
VGV4dHVyZTo6ZGVwdGhPbmx5QXNwZWN0Rm9ybWF0KHNyY1RleHR1cmVEZXNjLmZvcm1hdCkgfHwg
VGV4dHVyZTo6c3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQoc3JjVGV4dHVyZURlc2MuZm9ybWF0KSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9Gb3JjZTMyOgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlvbi5hc3BlY3QpIHsK
KyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9BbGw6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25seToKKyAgICAgICAgICAg
IGlmICghVGV4dHVyZTo6c3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQoZHN0VGV4dHVyZURlc2MuZm9y
bWF0KSB8fCBUZXh0dXJlOjpkZXB0aE9ubHlBc3BlY3RGb3JtYXQoZHN0VGV4dHVyZURlc2MuZm9y
bWF0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9EZXB0aE9ubHk6CisgICAgICAgICAgICBp
ZiAoIVRleHR1cmU6OmRlcHRoT25seUFzcGVjdEZvcm1hdChkc3RUZXh0dXJlRGVzYy5mb3JtYXQp
IHx8IFRleHR1cmU6OnN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0KGRzdFRleHR1cmVEZXNjLmZvcm1h
dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRm9yY2UzMjoKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vICJ2YWxpZGF0aW5nIHRleHR1cmUg
Y29weSByYW5nZShzb3VyY2UsIGNvcHlTaXplKSByZXR1cm5zIHRydWUuIgorICAgIGlmICghdmFs
aWRhdGVUZXh0dXJlQ29weVJhbmdlKHNvdXJjZSwgY29weVNpemUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyAidmFsaWRhdGluZyB0ZXh0dXJlIGNvcHkgcmFuZ2UoZGVzdGluYXRp
b24sIGNvcHlTaXplKSByZXR1cm5zIHRydWUuIgorICAgIGlmICghdmFsaWRhdGVUZXh0dXJlQ29w
eVJhbmdlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIC8vICJUaGUgc2V0IG9mIHN1YnJlc291cmNlcyBmb3IgdGV4dHVyZSBjb3B5KHNvdXJjZSwg
Y29weVNpemUpIGFuZCB0aGUgc2V0IG9mIHN1YnJlc291cmNlcyBmb3IgdGV4dHVyZSBjb3B5KGRl
c3RpbmF0aW9uLCBjb3B5U2l6ZSkgaXMgZGlzam9pbnQuIgorICAgIC8vIGh0dHBzOi8vZ3B1d2Vi
LmdpdGh1Yi5pby9ncHV3ZWIvI2Fic3RyYWN0LW9wZGVmLXNldC1vZi1zdWJyZXNvdXJjZXMtZm9y
LXRleHR1cmUtY29weQorICAgIGlmIChzb3VyY2UudGV4dHVyZSA9PSBkZXN0aW5hdGlvbi50ZXh0
dXJlKSB7CisgICAgICAgIC8vIE1pcCBsZXZlbHMgYXJlIG5ldmVyIHJhbmdlcy4KKyAgICAgICAg
aWYgKHNvdXJjZS5taXBMZXZlbCA9PSBkZXN0aW5hdGlvbi5taXBMZXZlbCkgeworICAgICAgICAg
ICAgc3dpdGNoIChmcm9tQVBJKHNvdXJjZS50ZXh0dXJlKS5kZXNjcmlwdG9yKCkuZGltZW5zaW9u
KSB7CisgICAgICAgICAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzFEOgorICAgICAgICAg
ICAgICAgIC8vICJUaGUgc3VicmVzb3VyY2Ugb2YgaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlIGF0
IG1pcG1hcCBsZXZlbCBpbWFnZUNvcHlUZXh0dXJlLm1pcExldmVsLiIKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzJE
OiB7CisgICAgICAgICAgICAgICAgLy8gIkZvciBlYWNoIGFycmF5TGF5ZXIgb2YgdGhlIGNvcHlT
aXplLmRlcHRoT3JBcnJheUxheWVycyBhcnJheSBsYXllcnMgc3RhcnRpbmcgYXQgaW1hZ2VDb3B5
VGV4dHVyZS5vcmlnaW4uejoiCisgICAgICAgICAgICAgICAgLy8gIlRoZSBzdWJyZXNvdXJjZSBv
ZiBpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUgYXQgbWlwbWFwIGxldmVsIGltYWdlQ29weVRleHR1
cmUubWlwTGV2ZWwgYW5kIGFycmF5IGxheWVyIGFycmF5TGF5ZXIuIgorICAgICAgICAgICAgICAg
IFJhbmdlPHVpbnQzMl90PiBzb3VyY2VSYW5nZShzb3VyY2Uub3JpZ2luLnosIHNvdXJjZS5vcmln
aW4ueiArIGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVycyk7CisgICAgICAgICAgICAgICAgUmFu
Z2U8dWludDMyX3Q+IGRlc3RpbmF0aW9uUmFuZ2UoZGVzdGluYXRpb24ub3JpZ2luLnosIHNvdXJj
ZS5vcmlnaW4ueiArIGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVycyk7CisgICAgICAgICAgICAg
ICAgaWYgKHNvdXJjZVJhbmdlLm92ZXJsYXBzKGRlc3RpbmF0aW9uUmFuZ2UpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzNEOgorICAgICAg
ICAgICAgICAgIC8vICJUaGUgc3VicmVzb3VyY2Ugb2YgaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJl
IGF0IG1pcG1hcCBsZXZlbCBpbWFnZUNvcHlUZXh0dXJlLm1pcExldmVsLiIKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9u
X0ZvcmNlMzI6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgQ29tbWFuZEVuY29kZXI6OmNvcHlUZXh0dXJl
VG9UZXh0dXJlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBzb3VyY2UsIGNvbnN0IFdHUFVJ
bWFnZUNvcHlUZXh0dXJlJiBkZXN0aW5hdGlvbiwgY29uc3QgV0dQVUV4dGVudDNEJiBjb3B5U2l6
ZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc291cmNlKTsKLSAgICBVTlVTRURfUEFSQU0oZGVzdGlu
YXRpb24pOwotICAgIFVOVVNFRF9QQVJBTShjb3B5U2l6ZSk7CisgICAgaWYgKHNvdXJjZS5uZXh0
SW5DaGFpbiB8fCBkZXN0aW5hdGlvbi5uZXh0SW5DaGFpbikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jZG9tLWdwdWNvbW1hbmRlbmNv
ZGVyLWNvcHl0ZXh0dXJldG90ZXh0dXJlCisKKyAgICAvLyAiUHJlcGFyZSB0aGUgZW5jb2RlciBz
dGF0ZSBvZiB0aGlzLiBJZiBpdCByZXR1cm5zIGZhbHNlLCBzdG9wLiIKKyAgICBpZiAoIXByZXBh
cmVUaGVFbmNvZGVyU3RhdGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gIklmIGFueSBv
ZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHVuc2F0aXNmaWVkIgorICAgIGlmICghdmFs
aWRhdGVDb3B5VGV4dHVyZVRvVGV4dHVyZShzb3VyY2UsIGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkp
IHsKKyAgICAgICAgLy8gImdlbmVyYXRlIGEgdmFsaWRhdGlvbiBlcnJvciBhbmQgc3RvcC4iCisg
ICAgICAgIG1fZGV2aWNlLT5nZW5lcmF0ZUFWYWxpZGF0aW9uRXJyb3IoIlZhbGlkYXRpb24gZmFp
bHVyZS4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVuc3VyZUJsaXRDb21tYW5k
RW5jb2RlcigpOworCisgICAgTVRMQmxpdE9wdGlvbiBvcHRpb25zID0gTVRMQmxpdE9wdGlvbk5v
bmU7CisgICAgc3dpdGNoIChzb3VyY2UuYXNwZWN0KSB7CisgICAgY2FzZSBXR1BVVGV4dHVyZUFz
cGVjdF9BbGw6CisgICAgICAgIG9wdGlvbnMgPSBNVExCbGl0T3B0aW9uTm9uZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25seToKKyAgICAgICAg
b3B0aW9ucyA9IE1UTEJsaXRPcHRpb25TdGVuY2lsRnJvbURlcHRoU3RlbmNpbDsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9EZXB0aE9ubHk6CisgICAgICAgIG9w
dGlvbnMgPSBNVExCbGl0T3B0aW9uRGVwdGhGcm9tRGVwdGhTdGVuY2lsOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0ZvcmNlMzI6CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBhdXRvJiBzb3VyY2VEZXNjcmlwdG9yID0gZnJvbUFQSShzb3VyY2UudGV4
dHVyZSkuZGVzY3JpcHRvcigpOworICAgIHN3aXRjaCAoc291cmNlRGVzY3JpcHRvci5kaW1lbnNp
b24pIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzFEOiB7CisgICAgICAgIC8vIGh0
dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL21ldGFsL210bGJsaXRjb21t
YW5kZW5jb2Rlci8xNDAwNzU2LWNvcHlmcm9tdGV4dHVyZT9sYW5ndWFnZT1vYmpjCisgICAgICAg
IC8vICJXaGVuIHlvdSBjb3B5IHRvIGEgMUQgdGV4dHVyZSwgaGVpZ2h0IGFuZCBkZXB0aCBtdXN0
IGJlIDEuIgorICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBNVExTaXplTWFrZShjb3B5U2l6ZS53
aWR0aCwgMSwgMSk7CisgICAgICAgIGF1dG8gc291cmNlT3JpZ2luID0gTVRMT3JpZ2luTWFrZShz
b3VyY2Uub3JpZ2luLngsIDEsIDEpOworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uT3JpZ2luID0g
TVRMT3JpZ2luTWFrZShkZXN0aW5hdGlvbi5vcmlnaW4ueCwgMSwgMSk7CisgICAgICAgIGZvciAo
dWludDMyX3QgbGF5ZXIgPSAwOyBsYXllciA8IGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVyczsg
KytsYXllcikgeworICAgICAgICAgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMu
CisgICAgICAgICAgICBOU1VJbnRlZ2VyIHNvdXJjZVNsaWNlID0gc291cmNlLm9yaWdpbi56ICsg
bGF5ZXI7CisgICAgICAgICAgICBOU1VJbnRlZ2VyIGRlc3RpbmF0aW9uU2xpY2UgPSBkZXN0aW5h
dGlvbi5vcmlnaW4ueiArIGxheWVyOworICAgICAgICAgICAgW21fYmxpdENvbW1hbmRFbmNvZGVy
CisgICAgICAgICAgICAgICAgY29weUZyb21UZXh0dXJlOmZyb21BUEkoc291cmNlLnRleHR1cmUp
LnRleHR1cmUoKQorICAgICAgICAgICAgICAgIHNvdXJjZVNsaWNlOnNvdXJjZVNsaWNlCisgICAg
ICAgICAgICAgICAgc291cmNlTGV2ZWw6c291cmNlLm1pcExldmVsCisgICAgICAgICAgICAgICAg
c291cmNlT3JpZ2luOnNvdXJjZU9yaWdpbgorICAgICAgICAgICAgICAgIHNvdXJjZVNpemU6c291
cmNlU2l6ZQorICAgICAgICAgICAgICAgIHRvVGV4dHVyZTpmcm9tQVBJKGRlc3RpbmF0aW9uLnRl
eHR1cmUpLnRleHR1cmUoKQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xpY2U6ZGVzdGlu
YXRpb25TbGljZQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uTGV2ZWw6ZGVzdGluYXRpb24u
bWlwTGV2ZWwKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9yaWdpbjpkZXN0aW5hdGlvbk9y
aWdpbl07CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV0dQVVRl
eHR1cmVEaW1lbnNpb25fMkQ6IHsKKyAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUu
Y29tL2RvY3VtZW50YXRpb24vbWV0YWwvbXRsYmxpdGNvbW1hbmRlbmNvZGVyLzE0MDA3NTYtY29w
eWZyb210ZXh0dXJlP2xhbmd1YWdlPW9iamMKKyAgICAgICAgLy8gIldoZW4geW91IGNvcHkgdG8g
YSAyRCB0ZXh0dXJlLCBkZXB0aCBtdXN0IGJlIDEuIgorICAgICAgICBhdXRvIHNvdXJjZVNpemUg
PSBNVExTaXplTWFrZShjb3B5U2l6ZS53aWR0aCwgY29weVNpemUuaGVpZ2h0LCAxKTsKKyAgICAg
ICAgYXV0byBzb3VyY2VPcmlnaW4gPSBNVExPcmlnaW5NYWtlKHNvdXJjZS5vcmlnaW4ueCwgc291
cmNlLm9yaWdpbi55LCAxKTsKKyAgICAgICAgYXV0byBkZXN0aW5hdGlvbk9yaWdpbiA9IE1UTE9y
aWdpbk1ha2UoZGVzdGluYXRpb24ub3JpZ2luLngsIGRlc3RpbmF0aW9uLm9yaWdpbi55LCAxKTsK
KyAgICAgICAgZm9yICh1aW50MzJfdCBsYXllciA9IDA7IGxheWVyIDwgY29weVNpemUuZGVwdGhP
ckFycmF5TGF5ZXJzOyArK2xheWVyKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVXNlIGNoZWNr
ZWQgYXJpdGhtZXRpYy4KKyAgICAgICAgICAgIE5TVUludGVnZXIgc291cmNlU2xpY2UgPSBzb3Vy
Y2Uub3JpZ2luLnogKyBsYXllcjsKKyAgICAgICAgICAgIE5TVUludGVnZXIgZGVzdGluYXRpb25T
bGljZSA9IGRlc3RpbmF0aW9uLm9yaWdpbi56ICsgbGF5ZXI7CisgICAgICAgICAgICBbbV9ibGl0
Q29tbWFuZEVuY29kZXIKKyAgICAgICAgICAgICAgICBjb3B5RnJvbVRleHR1cmU6ZnJvbUFQSShz
b3VyY2UudGV4dHVyZSkudGV4dHVyZSgpCisgICAgICAgICAgICAgICAgc291cmNlU2xpY2U6c291
cmNlU2xpY2UKKyAgICAgICAgICAgICAgICBzb3VyY2VMZXZlbDpzb3VyY2UubWlwTGV2ZWwKKyAg
ICAgICAgICAgICAgICBzb3VyY2VPcmlnaW46c291cmNlT3JpZ2luCisgICAgICAgICAgICAgICAg
c291cmNlU2l6ZTpzb3VyY2VTaXplCisgICAgICAgICAgICAgICAgdG9UZXh0dXJlOmZyb21BUEko
ZGVzdGluYXRpb24udGV4dHVyZSkudGV4dHVyZSgpCisgICAgICAgICAgICAgICAgZGVzdGluYXRp
b25TbGljZTpkZXN0aW5hdGlvblNsaWNlCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25MZXZl
bDpkZXN0aW5hdGlvbi5taXBMZXZlbAorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT3JpZ2lu
OmRlc3RpbmF0aW9uT3JpZ2luXTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8zRDogeworICAgICAgICBhdXRvIHNvdXJjZVNp
emUgPSBNVExTaXplTWFrZShjb3B5U2l6ZS53aWR0aCwgY29weVNpemUuaGVpZ2h0LCBjb3B5U2l6
ZS5kZXB0aE9yQXJyYXlMYXllcnMpOworICAgICAgICBhdXRvIHNvdXJjZU9yaWdpbiA9IE1UTE9y
aWdpbk1ha2Uoc291cmNlLm9yaWdpbi54LCBzb3VyY2Uub3JpZ2luLnksIHNvdXJjZS5vcmlnaW4u
eik7CisgICAgICAgIGF1dG8gZGVzdGluYXRpb25PcmlnaW4gPSBNVExPcmlnaW5NYWtlKGRlc3Rp
bmF0aW9uLm9yaWdpbi54LCBkZXN0aW5hdGlvbi5vcmlnaW4ueSwgZGVzdGluYXRpb24ub3JpZ2lu
LnopOworICAgICAgICBbbV9ibGl0Q29tbWFuZEVuY29kZXIKKyAgICAgICAgICAgIGNvcHlGcm9t
VGV4dHVyZTpmcm9tQVBJKHNvdXJjZS50ZXh0dXJlKS50ZXh0dXJlKCkKKyAgICAgICAgICAgIHNv
dXJjZVNsaWNlOjAKKyAgICAgICAgICAgIHNvdXJjZUxldmVsOnNvdXJjZS5taXBMZXZlbAorICAg
ICAgICAgICAgc291cmNlT3JpZ2luOnNvdXJjZU9yaWdpbgorICAgICAgICAgICAgc291cmNlU2l6
ZTpzb3VyY2VTaXplCisgICAgICAgICAgICB0b1RleHR1cmU6ZnJvbUFQSShkZXN0aW5hdGlvbi50
ZXh0dXJlKS50ZXh0dXJlKCkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xpY2U6MAorICAgICAg
ICAgICAgZGVzdGluYXRpb25MZXZlbDpkZXN0aW5hdGlvbi5taXBMZXZlbAorICAgICAgICAgICAg
ZGVzdGluYXRpb25PcmlnaW46ZGVzdGluYXRpb25PcmlnaW5dOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl9Gb3JjZTMyOgorICAgICAgICByZXR1
cm47CisgICAgfQogfQogCiBzdGF0aWMgYm9vbCB2YWxpZGF0ZUNsZWFyQnVmZmVyKGNvbnN0IEJ1
ZmZlciYgYnVmZmVyLCB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHNpemUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21wdXRlUGlwZWxpbmUubW0gYi9Tb3VyY2UvV2ViR1BV
L1dlYkdQVS9Db21wdXRlUGlwZWxpbmUubW0KaW5kZXggZWQ5YjhjZmY2NDE0MzAxMmU3N2IzZTIx
ZmM1ZTljYWIwNzU5MzY0Yy4uNmZhMWNlZTliYjRjNmE3Mjc2ZTIzY2NjM2JmYzMyYmY4MDRkOGY5
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tcHV0ZVBpcGVsaW5lLm1tCisr
KyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbXB1dGVQaXBlbGluZS5tbQpAQCAtMTQ2LDggKzE0
Niw4IEBAIFJlZlB0cjxDb21wdXRlUGlwZWxpbmU+IERldmljZTo6Y3JlYXRlQ29tcHV0ZVBpcGVs
aW5lKGNvbnN0IFdHUFVDb21wdXRlUGlwZWxpbmVECiAgICAgaWYgKGRlc2NyaXB0b3IubmV4dElu
Q2hhaW4gfHwgZGVzY3JpcHRvci5jb21wdXRlLm5leHRJbkNoYWluKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIGNvbnN0IFNoYWRlck1vZHVsZSYgc2hhZGVyTW9kdWxlID0gV2ViR1BV
Ojpmcm9tQVBJKGRlc2NyaXB0b3IuY29tcHV0ZS5tb2R1bGUpOwotICAgIGNvbnN0IFBpcGVsaW5l
TGF5b3V0JiBwaXBlbGluZUxheW91dCA9IFdlYkdQVTo6ZnJvbUFQSShkZXNjcmlwdG9yLmxheW91
dCk7CisgICAgY29uc3QgU2hhZGVyTW9kdWxlJiBzaGFkZXJNb2R1bGUgPSBmcm9tQVBJKGRlc2Ny
aXB0b3IuY29tcHV0ZS5tb2R1bGUpOworICAgIGNvbnN0IFBpcGVsaW5lTGF5b3V0JiBwaXBlbGlu
ZUxheW91dCA9IGZyb21BUEkoZGVzY3JpcHRvci5sYXlvdXQpOwogICAgIGF1dG8gbGFiZWwgPSBm
cm9tQVBJKGRlc2NyaXB0b3IubGFiZWwpOwogCiAgICAgYXV0byBsaWJyYXJ5Q3JlYXRpb25SZXN1
bHQgPSBjcmVhdGVMaWJyYXJ5KG1fZGV2aWNlLCBzaGFkZXJNb2R1bGUsIHBpcGVsaW5lTGF5b3V0
LCBkZXNjcmlwdG9yLmNvbXB1dGUuZW50cnlQb2ludCwgbGFiZWwpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkdQVS9XZWJHUFUvUGlwZWxpbmVMYXlvdXQubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQ
VS9QaXBlbGluZUxheW91dC5tbQppbmRleCBlZmEwZDZkNTE3YmFjYjY3Y2UyMzZkMDQxYWYxYTVm
ZjM1ODA5NmZhLi4wNjU4M2RmMGRkYWYzYzY5NjZlOTQ0ZmEzNjNlNjQwODU5MWJhYTdjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9QaXBlbGluZUxheW91dC5tbQorKysgYi9Tb3Vy
Y2UvV2ViR1BVL1dlYkdQVS9QaXBlbGluZUxheW91dC5tbQpAQCAtNDEsNyArNDEsNyBAQCBSZWZQ
dHI8UGlwZWxpbmVMYXlvdXQ+IERldmljZTo6Y3JlYXRlUGlwZWxpbmVMYXlvdXQoY29uc3QgV0dQ
VVBpcGVsaW5lTGF5b3V0RGVzYwogICAgIGJpbmRHcm91cExheW91dHMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShkZXNjcmlwdG9yLmJpbmRHcm91cExheW91dENvdW50KTsKICAgICBmb3IgKHVpbnQz
Ml90IGkgPSAwOyBpIDwgZGVzY3JpcHRvci5iaW5kR3JvdXBMYXlvdXRDb3VudDsgKytpKSB7CiAg
ICAgICAgIGF1dG8qIGJpbmRHcm91cExheW91dCA9IGRlc2NyaXB0b3IuYmluZEdyb3VwTGF5b3V0
c1tpXTsKLSAgICAgICAgYmluZEdyb3VwTGF5b3V0cy51bmNoZWNrZWRBcHBlbmQoV2ViR1BVOjpm
cm9tQVBJKGJpbmRHcm91cExheW91dCkpOworICAgICAgICBiaW5kR3JvdXBMYXlvdXRzLnVuY2hl
Y2tlZEFwcGVuZChmcm9tQVBJKGJpbmRHcm91cExheW91dCkpOwogICAgIH0KICAgICByZXR1cm4g
UGlwZWxpbmVMYXlvdXQ6OmNyZWF0ZShXVEZNb3ZlKGJpbmRHcm91cExheW91dHMpKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1NoYWRlck1vZHVsZS5tbSBiL1NvdXJjZS9X
ZWJHUFUvV2ViR1BVL1NoYWRlck1vZHVsZS5tbQppbmRleCBlMDA3NTVjZmI1NWI0YzY2YTg5Mjdk
ZDNlNWUwMmVhOTEwMTcwYzQ0Li5iNTFlNjg5NGU2MzZjY2QyZDNjMjEwNGJlNDVmMTFiZDAwODI3
NDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9TaGFkZXJNb2R1bGUubW0KKysr
IGIvU291cmNlL1dlYkdQVS9XZWJHUFUvU2hhZGVyTW9kdWxlLm1tCkBAIC04OCw4ICs4OCw4IEBA
IHN0YXRpYyBSZWZQdHI8U2hhZGVyTW9kdWxlPiBlYXJseUNvbXBpbGVTaGFkZXJNb2R1bGUoaWQ8
TVRMRGV2aWNlPiBkZXZpY2UsIHN0ZDo6CiAgICAgICAgIGNvbnN0IGF1dG8mIGhpbnQgPSBzdXBw
bGllZEhpbnRzLmhpbnRzW2ldOwogICAgICAgICBpZiAoaGludC5uZXh0SW5DaGFpbikKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBoaW50cy5hZGQoaGludC5rZXksIFdlYkdQ
VTo6ZnJvbUFQSShoaW50LmhpbnQubGF5b3V0KSk7Ci0gICAgICAgIGF1dG8gY29udmVydGVkUGlw
ZWxpbmVMYXlvdXQgPSBTaGFkZXJNb2R1bGU6OmNvbnZlcnRQaXBlbGluZUxheW91dChXZWJHUFU6
OmZyb21BUEkoaGludC5oaW50LmxheW91dCkpOworICAgICAgICBoaW50cy5hZGQoaGludC5rZXks
IGZyb21BUEkoaGludC5oaW50LmxheW91dCkpOworICAgICAgICBhdXRvIGNvbnZlcnRlZFBpcGVs
aW5lTGF5b3V0ID0gU2hhZGVyTW9kdWxlOjpjb252ZXJ0UGlwZWxpbmVMYXlvdXQoZnJvbUFQSSho
aW50LmhpbnQubGF5b3V0KSk7CiAgICAgICAgIHdnc2xIaW50cy5hZGQoaGludC5rZXksIFdURk1v
dmUoY29udmVydGVkUGlwZWxpbmVMYXlvdXQpKTsKICAgICB9CiAgICAgYXV0byBwcmVwYXJlUmVz
dWx0ID0gV0dTTDo6cHJlcGFyZShzdGQ6OmdldDxXR1NMOjpTdWNjZXNzZnVsQ2hlY2s+KGNoZWNr
UmVzdWx0KS5hc3QsIHdnc2xIaW50cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQ
VS9UZXh0dXJlLmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLmgKaW5kZXggOWE1OTc4
ZDczOTEyYzk5MWU0YjQzYmNlZDI3OWQxMWQzZWJiNzQwNS4uYzQ5ZWFlYmM3ZjdiMGQ2OWU1NjMy
NWNjOWZkZWNlMDJiYmE3YjM4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvVGV4
dHVyZS5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmUuaApAQCAtNTEsNiArNTEs
MTUgQEAgcHVibGljOgogICAgIHZvaWQgZGVzdHJveSgpOwogICAgIHZvaWQgc2V0TGFiZWwoU3Ry
aW5nJiYpOwogCisgICAgc3RhdGljIHVpbnQzMl90IHRleGVsQmxvY2tXaWR0aChXR1BVVGV4dHVy
ZUZvcm1hdCk7CisgICAgc3RhdGljIHVpbnQzMl90IHRleGVsQmxvY2tIZWlnaHQoV0dQVVRleHR1
cmVGb3JtYXQpOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiB0ZXhlbEJsb2Nr
U2l6ZShXR1BVVGV4dHVyZUZvcm1hdCk7CisgICAgc3RhdGljIGJvb2wgaXNEZXB0aE9yU3RlbmNp
bEZvcm1hdChXR1BVVGV4dHVyZUZvcm1hdCk7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V0dQ
VVRleHR1cmVGb3JtYXQ+IHN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0KFdHUFVUZXh0dXJlRm9ybWF0
KTsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxXR1BVVGV4dHVyZUZvcm1hdD4gZGVwdGhPbmx5
QXNwZWN0Rm9ybWF0KFdHUFVUZXh0dXJlRm9ybWF0KTsKKworICAgIFdHUFVFeHRlbnQzRCBwaHlz
aWNhbFNpemUodWludDMyX3QgbWlwTGV2ZWwpOworCiAgICAgaWQ8TVRMVGV4dHVyZT4gdGV4dHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZTsgfQogICAgIGNvbnN0IFdHUFVUZXh0dXJlRGVz
Y3JpcHRvciYgZGVzY3JpcHRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3JpcHRvcjsgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLm1tIGIvU291cmNlL1dlYkdQ
VS9XZWJHUFUvVGV4dHVyZS5tbQppbmRleCA4ZjU0ZmNkN2MxODgzOTNmZDZjYjVhNDY3ZDllNDQ2
NjY5Nzc5MmIyLi4yYzQ1N2QwODA0ZTExMGQ4ZWM4MThlM2EyMjM2N2YwMGZjNmI5YjNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLm1tCisrKyBiL1NvdXJjZS9XZWJH
UFUvV2ViR1BVL1RleHR1cmUubW0KQEAgLTMzLDYgKzMzLDggQEAKIAogbmFtZXNwYWNlIFdlYkdQ
VSB7CiAKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPE1UTFBpeGVsRm9ybWF0PiBwaXhlbEZvcm1hdChX
R1BVVGV4dHVyZUZvcm1hdCk7CisKIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdHUFVGZWF0dXJlTmFt
ZT4gZmVhdHVyZVJlcXVpcmVtZW50Rm9yRm9ybWF0KFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCkK
IHsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewpAQCAtMjQ3LDcgKzI0OSw3IEBAIHN0YXRpYyBib29s
IGlzQ29tcHJlc3NlZEZvcm1hdChXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQpCiAgICAgfQogfQog
Ci1zdGF0aWMgYm9vbCBpc0RlcHRoT3JTdGVuY2lsRm9ybWF0KFdHUFVUZXh0dXJlRm9ybWF0IGZv
cm1hdCkKK2Jvb2wgVGV4dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChXR1BVVGV4dHVyZUZv
cm1hdCBmb3JtYXQpCiB7CiAgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8j
ZGVwdGgtZm9ybWF0cwogICAgIC8vICJBIGRlcHRoLW9yLXN0ZW5jaWwgZm9ybWF0IGlzIGFueSBm
b3JtYXQgd2l0aCBkZXB0aCBhbmQvb3Igc3RlbmNpbCBhc3BlY3RzLiIKQEAgLTM1NCw3ICszNTYs
NyBAQCBzdGF0aWMgYm9vbCBpc0RlcHRoT3JTdGVuY2lsRm9ybWF0KFdHUFVUZXh0dXJlRm9ybWF0
IGZvcm1hdCkKICAgICB9CiB9CiAKLXN0YXRpYyB1aW50MzJfdCB0ZXhlbEJsb2NrV2lkdGgoV0dQ
VVRleHR1cmVGb3JtYXQgZm9ybWF0KQordWludDMyX3QgVGV4dHVyZTo6dGV4ZWxCbG9ja1dpZHRo
KFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCkKIHsKICAgICAvLyBodHRwczovL2dwdXdlYi5naXRo
dWIuaW8vZ3B1d2ViLyN0ZXhlbC1ibG9jay13aWR0aAogICAgIHN3aXRjaCAoZm9ybWF0KSB7CkBA
IC00NjgsNyArNDcwLDcgQEAgc3RhdGljIHVpbnQzMl90IHRleGVsQmxvY2tXaWR0aChXR1BVVGV4
dHVyZUZvcm1hdCBmb3JtYXQpCiAgICAgfQogfQogCi1zdGF0aWMgdWludDMyX3QgdGV4ZWxCbG9j
a0hlaWdodChXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQpCit1aW50MzJfdCBUZXh0dXJlOjp0ZXhl
bEJsb2NrSGVpZ2h0KFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCkKIHsKICAgICAvLyBodHRwczov
L2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyN0ZXhlbC1ibG9jay1oZWlnaHQKICAgICBzd2l0Y2gg
KGZvcm1hdCkgewpAQCAtNTg3LDYgKzU4OSwxMzcgQEAgc3RhdGljIHVpbnQzMl90IHRleGVsQmxv
Y2tIZWlnaHQoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0KQogICAgIH0KIH0KIAorc3RkOjpvcHRp
b25hbDx1aW50MzJfdD4gVGV4dHVyZTo6dGV4ZWxCbG9ja1NpemUoV0dQVVRleHR1cmVGb3JtYXQg
Zm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9VbmRlZmluZWQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4VW5vcm06CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9SOFNub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjhV
aW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjhTaW50OgorICAgICAgICByZXR1cm4g
MTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IxNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9SMTZTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjE2RmxvYXQ6
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X1JHOFNub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkc4VWludDoK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFNpbnQ6CisgICAgICAgIHJldHVybiAyOwor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjMyRmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9SMzJVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjMyU2ludDoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMTZVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfUkcxNlNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2RmxvYXQ6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfUkdCQThVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JB
OFNub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQThVaW50OgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfUkdCQThTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QkdSQThVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JHUkE4VW5vcm1TcmdiOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCMTBBMlVub3JtOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfUkcxMUIxMFVmbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JH
QjlFNVVmbG9hdDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9SRzMyRmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzMyVWludDoKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMzJTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUkdCQTE2VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkExNlNpbnQ6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMTZGbG9hdDoKKyAgICAgICAgcmV0dXJuIDg7
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJGbG9hdDoKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X1JHQkEzMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JB
MzJTaW50OgorICAgICAgICByZXR1cm4gMTY7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9T
dGVuY2lsODoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9E
ZXB0aDE2VW5vcm06CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfRGVwdGgyNFBsdXM6CisgICAgICAgIEFTU0VSVChwaXhlbEZvcm1hdChmb3JtYXQpID09IE1U
TFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0KTsKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9EZXB0aDI0UGx1c1N0ZW5jaWw4OgorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFVub3JtU3RlbmNp
bDg6CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9EZXB0aDMyRmxvYXQ6CisgICAgICAgIHJldHVybiA0OworICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfRGVwdGgzMkZsb2F0U3RlbmNpbDg6CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm06CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gODsKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDMlJHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0JDMlJHQkFVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiA4OworICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfQkMzUkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfQkMzUkdCQVVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIDE2OworICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfQkM0UlVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM0UlNu
b3JtOgorICAgICAgICByZXR1cm4gODsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNVJH
VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzVSR1Nub3JtOgorICAgICAgICBy
ZXR1cm4gMTY7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzZIUkdCVWZsb2F0OgorICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM2SFJHQkZsb2F0OgorICAgICAgICByZXR1cm4gMTY7
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzdSR0JBVW5vcm06CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9CQzdSR0JBVW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gMTY7CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfRVRDMlJHQjhVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9F
VEMyUkdCOEExVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOEExVW5v
cm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQkE4VW5vcm06CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCQThVbm9ybVNyZ2I6CisgICAgICAgIHJldHVy
biA4OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUjExVW5vcm06CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9FQUNSMTFTbm9ybToKKyAgICAgICAgcmV0dXJuIDg7CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9FQUNSRzExVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9FQUNSRzExU25vcm06CisgICAgICAgIHJldHVybiAxNjsKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0FTVEM0eDRVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM0
eDRVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg0VW5vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg0VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QVNUQzV4NVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDVVbm9y
bToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDVVbm9ybVNyZ2I6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9BU1RDNng2VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4
NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NVVub3JtU3JnYjoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDZVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0FTVEM4eDZVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9B
U1RDOHg4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg4VW5vcm1Tcmdi
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDVVbm9ybToKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg1VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzEweDZVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg2
VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDhVbm9ybToKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfQVNUQzEweDEwVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9BU1RDMTB4MTBVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4
MTBVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMFVub3JtU3JnYjoK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMlVub3JtOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfQVNUQzEyeDEyVW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gMTY7Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9Gb3JjZTMyOgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCiBzdGF0aWMgYm9vbCBpc1Jl
bmRlcmFibGVGb3JtYXQoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0KQogewogICAgIC8vIGh0dHBz
Oi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI3JlbmRlcmFibGUtZm9ybWF0CkBAIC05NzgsNyAr
MTExMSw3IEBAIGJvb2wgRGV2aWNlOjp2YWxpZGF0ZUNyZWF0ZVRleHR1cmUoY29uc3QgV0dQVVRl
eHR1cmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgICAgIC8vICJkZXNjcmlwdG9yLmZvcm1hdCBtdXN0IG5vdCBiZSBhIGNvbXByZXNzZWQg
Zm9ybWF0IG9yIGRlcHRoLW9yLXN0ZW5jaWwgZm9ybWF0LiIKLSAgICAgICAgaWYgKGlzQ29tcHJl
c3NlZEZvcm1hdChkZXNjcmlwdG9yLmZvcm1hdCkgfHwgaXNEZXB0aE9yU3RlbmNpbEZvcm1hdChk
ZXNjcmlwdG9yLmZvcm1hdCkpCisgICAgICAgIGlmIChpc0NvbXByZXNzZWRGb3JtYXQoZGVzY3Jp
cHRvci5mb3JtYXQpIHx8IFRleHR1cmU6OmlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoZGVzY3JpcHRv
ci5mb3JtYXQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzJEOgpAQCAtMTAwMCw3ICsxMTMzLDcgQEAgYm9v
bCBEZXZpY2U6OnZhbGlkYXRlQ3JlYXRlVGV4dHVyZShjb25zdCBXR1BVVGV4dHVyZURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgLy8g
ImRlc2NyaXB0b3IuZm9ybWF0IG11c3Qgbm90IGJlIGEgY29tcHJlc3NlZCBmb3JtYXQgb3IgZGVw
dGgtb3Itc3RlbmNpbCBmb3JtYXQuIgotICAgICAgICBpZiAoaXNDb21wcmVzc2VkRm9ybWF0KGRl
c2NyaXB0b3IuZm9ybWF0KSB8fCBpc0RlcHRoT3JTdGVuY2lsRm9ybWF0KGRlc2NyaXB0b3IuZm9y
bWF0KSkKKyAgICAgICAgaWYgKGlzQ29tcHJlc3NlZEZvcm1hdChkZXNjcmlwdG9yLmZvcm1hdCkg
fHwgVGV4dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChkZXNjcmlwdG9yLmZvcm1hdCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV0dQVVRl
eHR1cmVEaW1lbnNpb25fRm9yY2UzMjoKQEAgLTEwMDgsMTEgKzExNDEsMTEgQEAgYm9vbCBEZXZp
Y2U6OnZhbGlkYXRlQ3JlYXRlVGV4dHVyZShjb25zdCBXR1BVVGV4dHVyZURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IpCiAgICAgfQogCiAgICAgLy8gImRlc2NyaXB0b3Iuc2l6ZS53aWR0aCBtdXN0IGJl
IG11bHRpcGxlIG9mIHRleGVsIGJsb2NrIHdpZHRoLiIKLSAgICBpZiAoZGVzY3JpcHRvci5zaXpl
LndpZHRoICUgdGV4ZWxCbG9ja1dpZHRoKGRlc2NyaXB0b3IuZm9ybWF0KSkKKyAgICBpZiAoZGVz
Y3JpcHRvci5zaXplLndpZHRoICUgVGV4dHVyZTo6dGV4ZWxCbG9ja1dpZHRoKGRlc2NyaXB0b3Iu
Zm9ybWF0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gImRlc2NyaXB0b3Iuc2l6
ZS5oZWlnaHQgbXVzdCBiZSBtdWx0aXBsZSBvZiB0ZXhlbCBibG9jayBoZWlnaHQuIgotICAgIGlm
IChkZXNjcmlwdG9yLnNpemUuaGVpZ2h0ICUgdGV4ZWxCbG9ja0hlaWdodChkZXNjcmlwdG9yLmZv
cm1hdCkpCisgICAgaWYgKGRlc2NyaXB0b3Iuc2l6ZS5oZWlnaHQgJSBUZXh0dXJlOjp0ZXhlbEJs
b2NrSGVpZ2h0KGRlc2NyaXB0b3IuZm9ybWF0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgLy8gIklmIGRlc2NyaXB0b3Iuc2FtcGxlQ291bnQgPiAxOiIKQEAgLTE0MjQsNiArMTU1Nywx
MSBAQCB2b2lkIFRleHR1cmU6OnNldExhYmVsKFN0cmluZyYmIGxhYmVsKQogICAgIG1fdGV4dHVy
ZS5sYWJlbCA9IGxhYmVsOwogfQogCitXR1BVRXh0ZW50M0QgVGV4dHVyZTo6cGh5c2ljYWxTaXpl
KHVpbnQzMl90IG1pcExldmVsKQoreworI2Vycm9yIEltcGxlbWVudCBtZQorfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJHUFUKIAogI3ByYWdtYSBtYXJrIFdHUFUgU3R1YnMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>455817</attachid>
            <date>2022-03-25 19:52:22 -0700</date>
            <delta_ts>2022-03-25 20:05:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-238367-20220325195221.patch</filename>
            <type>text/plain</type>
            <size>71324</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxODQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCmluZGV4IDdmOGVjM2VjN2M3ZWRmMTM5
ZDY3NTM3ZDk5MjYxYjY4NGUyYmQ0M2UuLjEyZTY1YTZmZGZhYTYzYmVlNTU4ZjNkNjkzMTBhNmZh
OGIyOTRkZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMgQEAKKzIwMjItMDMtMjUgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViR1BVXSBJbXBs
ZW1lbnQgcmVzb3VyY2UgY29weWluZyByb3V0aW5lcyBhY2NvcmRpbmcgdG8gdGhlIHNwZWMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzODM2NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
aW1wbGVtZW50cyAzIHJlc291cmNlIGNvcHkgcm91dGluZXM6CisgICAgICAgIC0gY29weUJ1ZmZl
clRvVGV4dHVyZSgpCisgICAgICAgIC0gY29weVRleHR1cmVUb0J1ZmZlcigpCisgICAgICAgIC0g
Y29weVRleHR1cmVUb1RleHR1cmUoKQorICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgYWxs
IDMgYXQgb25jZSwgYmVjYXVzZSB0aGV5IGFsbCB1c2UgdGhlIHNhbWUgc2hhcmVkIGhlbHBlciBm
dW5jdGlvbnMuCisKKyAgICAgICAgVGhlc2UgYXJlIGFjdHVhbGx5IHN1cnByaXNpbmdseSBjb21w
bGljYXRlZCwgZm9yIGEgZmV3IHJlYXNvbnM6CisgICAgICAgIC0gVGV4dHVyZXMgY2FuIGJlIDEt
ZGltZW5zaW9uYWwsIDItZGltZW5zaW9uYWwsIG9yIDMtZGltZW5zaW9uYWwKKyAgICAgICAgLSBU
ZXh0dXJlcyBoYXZlIG1pcG1hcHMsIGFuZCB0aGUgc2l6ZSBvZiBlYWNoIG1pcG1hcCBpcyBkaWZm
ZXJlbnQKKyAgICAgICAgLSBUaGVyZSBhcmUgZGVwdGggdGV4dHVyZXMsIHN0ZW5jaWwgdGV4dHVy
ZXMsIGFuZCBkZXB0aC1zdGVuY2lsIHRleHR1cmVzLCBhbmQgY29weWluZworICAgICAgICAgICAg
ICBoYXMgdG8gd29yayB3aXRoIHRoZSBjb3JyZWN0ICJhc3BlY3QuIgorICAgICAgICAtIERlcGVu
ZGluZyBvbiB0aGUgdGV4dHVyZSBmb3JtYXQsIGFuIGluZGl2aWR1YWwgdGV4ZWwgbWF5IG5vdCBi
ZSBkaXJlY3RseSBhZGRyZXNzYWJsZS4KKyAgICAgICAgICAgICAgQ29tcHJlc3NlZCB0ZXh0dXJl
IGZvcm1hdHMgZW5jb2RlIGFuIGVudGlyZSBibG9jayAoZS5nLiA0eDQgb3IgOHg4KSBvZiBwaXhl
bHMgd2l0aAorICAgICAgICAgICAgICBhIHNpbmdsZSBpbmRpdmlzaWJsZSBjaHVuayBvZiBkYXRh
LgorICAgICAgICAtIENvcHlpbmcgZnJvbSBhIHJlZ2lvbiBvZiBhICJzdWJyZXNvdXJjZSIgdG8g
YSBkaWZmZXJlbnQgcmVnaW9uIG9mIHRoZSBzYW1lICJzdWJyZXNvdXJjZSIKKyAgICAgICAgICAg
ICAgaXMgZm9yYmlkZGVuLiBTbywgd2UgaGF2ZSB0byBoYXZlIGEgY29uY2VwdCBvZiAic3VicmVz
b3VyY2UiIHRvIHZhbGlkYXRlIHRoZXkgYXJlbid0CisgICAgICAgICAgICAgIGludGVyc2VjdGlu
Zy4KKyAgICAgICAgLSBBIHNpbmdsZSBvcGVyYXRpb24gaXMgc3VwcG9zZWQgdG8gYmUgYWJsZSB0
byBjb3B5IG11bHRpcGxlIHNsaWNlcyBvZiBhbiBhcnJheSB0ZXh0dXJlLAorICAgICAgICAgICAg
ICBidXQgTWV0YWwgb25seSBoYXMgZmFjaWxpdGllcyB0byBjb3B5IGEgc2luZ2xlIHNsaWNlIGF0
IGEgdGltZS4gV2UgdGhlcmVmb3JlIGhhdmUgdG8KKyAgICAgICAgICAgICAgY2FsbCBNZXRhbCBp
biBhIGxvb3AgdG8gY29weSBhbGwgdGhlIG5lY2Vzc2FyeSBzbGljZXMuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBsaW5rcyB0byB0aGUgc3BlYyB3aGVyZSByZWxldmFudCwgYW5kIHF1b3RlcyB0aGUg
c3BlYyBpbiBjb21tZW50cyB3aGVyZSByZWxldmFudC4KKworICAgICAgICBUZXN0czogYXBpL29w
ZXJhdGlvbi9jb21tYW5kX2J1ZmZlci9pbWFnZV9jb3B5LnNwZWMudHMKKyAgICAgICAgICAgICAg
IGFwaS92YWxpZGF0aW9uL2VuY29kaW5nL2NtZHMvYnVmZmVyX3RleHR1cmVfY29waWVzLnNwZWMu
dHMKKyAgICAgICAgICAgICAgIGFwaS92YWxpZGF0aW9uL2ltYWdlX2NvcHkvaW1hZ2VfY29weS50
cworCisgICAgICAgICogV2ViR1BVL0JpbmRHcm91cC5tbToKKyAgICAgICAgKFdlYkdQVTo6RGV2
aWNlOjpjcmVhdGVCaW5kR3JvdXApOgorICAgICAgICAqIFdlYkdQVS9Db21tYW5kRW5jb2Rlci5t
bToKKyAgICAgICAgKFdlYkdQVTo6Q29tbWFuZEVuY29kZXI6OmNvcHlCdWZmZXJUb0J1ZmZlcik6
CisgICAgICAgIChXZWJHUFU6OnZhbGlkYXRlSW1hZ2VDb3B5QnVmZmVyKToKKyAgICAgICAgKFdl
YkdQVTo6aW1hZ2VDb3B5VGV4dHVyZVN1YnJlc291cmNlU2l6ZSk6CisgICAgICAgIChXZWJHUFU6
OnZhbGlkYXRlSW1hZ2VDb3B5VGV4dHVyZSk6CisgICAgICAgIChXZWJHUFU6OmlzVmFsaWRJbWFn
ZUNvcHlEZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJHUFU6OnZhbGlkYXRlVGV4dHVyZUNvcHlS
YW5nZSk6CisgICAgICAgIChXZWJHUFU6OnZhbGlkYXRlTGluZWFyVGV4dHVyZURhdGEpOgorICAg
ICAgICAoV2ViR1BVOjp2YWxpZGF0ZUNvcHlCdWZmZXJUb1RleHR1cmUpOgorICAgICAgICAoV2Vi
R1BVOjpDb21tYW5kRW5jb2Rlcjo6Y29weUJ1ZmZlclRvVGV4dHVyZSk6CisgICAgICAgIChXZWJH
UFU6OnZhbGlkYXRlQ29weVRleHR1cmVUb0J1ZmZlcik6CisgICAgICAgIChXZWJHUFU6OkNvbW1h
bmRFbmNvZGVyOjpjb3B5VGV4dHVyZVRvQnVmZmVyKToKKyAgICAgICAgKFdlYkdQVTo6aXNTUkdC
Q29tcGF0aWJsZSk6CisgICAgICAgIChXZWJHUFU6OmFyZUNvcHlDb21wYXRpYmxlKToKKyAgICAg
ICAgKFdlYkdQVTo6dmFsaWRhdGVDb3B5VGV4dHVyZVRvVGV4dHVyZSk6CisgICAgICAgIChXZWJH
UFU6OkNvbW1hbmRFbmNvZGVyOjpjb3B5VGV4dHVyZVRvVGV4dHVyZSk6CisgICAgICAgICogV2Vi
R1BVL0NvbXB1dGVQaXBlbGluZS5tbToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVD
b21wdXRlUGlwZWxpbmUpOgorICAgICAgICAqIFdlYkdQVS9QaXBlbGluZUxheW91dC5tbToKKyAg
ICAgICAgKFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVQaXBlbGluZUxheW91dCk6CisgICAgICAgICog
V2ViR1BVL1NoYWRlck1vZHVsZS5tbToKKyAgICAgICAgKFdlYkdQVTo6ZWFybHlDb21waWxlU2hh
ZGVyTW9kdWxlKToKKyAgICAgICAgKiBXZWJHUFUvVGV4dHVyZS5oOgorICAgICAgICAqIFdlYkdQ
VS9UZXh0dXJlLm1tOgorICAgICAgICAoV2ViR1BVOjpUZXh0dXJlOjppc0RlcHRoT3JTdGVuY2ls
Rm9ybWF0KToKKyAgICAgICAgKFdlYkdQVTo6VGV4dHVyZTo6dGV4ZWxCbG9ja1dpZHRoKToKKyAg
ICAgICAgKFdlYkdQVTo6VGV4dHVyZTo6dGV4ZWxCbG9ja0hlaWdodCk6CisgICAgICAgIChXZWJH
UFU6OlRleHR1cmU6OnRleGVsQmxvY2tTaXplKToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjp2
YWxpZGF0ZUNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViR1BVOjpUZXh0dXJlOjpwaHlzaWNh
bFNpemUpOgorICAgICAgICAoV2ViR1BVOjppc0RlcHRoT3JTdGVuY2lsRm9ybWF0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkdQVTo6dGV4ZWxCbG9ja1dpZHRoKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkdQVTo6dGV4ZWxCbG9ja0hlaWdodCk6IERlbGV0ZWQuCisKIDIwMjItMDMtMjQgIE15bGVz
IEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViR1BVXSBG
aXggdGhlIHdhdGNoT1MgYnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0Jp
bmRHcm91cC5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0JpbmRHcm91cC5tbQppbmRleCA2M2Fl
Y2JhZmQ3Y2FlZTU0MzczYTg1MGE4OTNkMjU0NjBjMzQ0MmMyLi5jZDlmNjA3NjJhMDc1ZDUzOWI5
NjFjYWE2M2YyNDg2MTlmYmIxZjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9C
aW5kR3JvdXAubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQmluZEdyb3VwLm1tCkBAIC01
NSw3ICs1NSw3IEBAIFJlZlB0cjxCaW5kR3JvdXA+IERldmljZTo6Y3JlYXRlQmluZEdyb3VwKGNv
bnN0IFdHUFVCaW5kR3JvdXBEZXNjcmlwdG9yJiBkZXNjcmlwCiAgICAgaWYgKGRlc2NyaXB0b3Iu
bmV4dEluQ2hhaW4pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgY29uc3QgQmluZEdy
b3VwTGF5b3V0JiBiaW5kR3JvdXBMYXlvdXQgPSBXZWJHUFU6OmZyb21BUEkoZGVzY3JpcHRvci5s
YXlvdXQpOworICAgIGNvbnN0IEJpbmRHcm91cExheW91dCYgYmluZEdyb3VwTGF5b3V0ID0gZnJv
bUFQSShkZXNjcmlwdG9yLmxheW91dCk7CiAKICAgICAvLyBGSVhNRShQRVJGT1JNQU5DRSk6IERv
bid0IGFsbG9jYXRlIDMgbmV3IGJ1ZmZlcnMgZm9yIGV2ZXJ5IGJpbmQgZ3JvdXAuCiAgICAgLy8g
SW4gZmFjdCwgZG9uJ3QgZXZlbiBhbGxvY2F0ZSBhIHNpbmdsZSBuZXcgYnVmZmVyIGZvciBldmVy
eSBiaW5kIGdyb3VwLgpAQCAtOTAsMTggKzkwLDE4IEBAIFJlZlB0cjxCaW5kR3JvdXA+IERldmlj
ZTo6Y3JlYXRlQmluZEdyb3VwKGNvbnN0IFdHUFVCaW5kR3JvdXBEZXNjcmlwdG9yJiBkZXNjcmlw
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBpZiAoYnVmZmVySXNQcmVz
ZW50KSB7Ci0gICAgICAgICAgICBpZDxNVExCdWZmZXI+IGJ1ZmZlciA9IFdlYkdQVTo6ZnJvbUFQ
SShlbnRyeS5idWZmZXIpLmJ1ZmZlcigpOworICAgICAgICAgICAgaWQ8TVRMQnVmZmVyPiBidWZm
ZXIgPSBmcm9tQVBJKGVudHJ5LmJ1ZmZlcikuYnVmZmVyKCk7CiAgICAgICAgICAgICAvLyBGSVhN
RTogVXNlIGNoZWNrZWQgY2FzdHMuCiAgICAgICAgICAgICBbdmVydGV4QXJndW1lbnRFbmNvZGVy
IHNldEJ1ZmZlcjpidWZmZXIgb2Zmc2V0OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KGVudHJ5Lm9m
ZnNldCkgYXRJbmRleDplbnRyeS5iaW5kaW5nXTsKICAgICAgICAgICAgIFtmcmFnbWVudEFyZ3Vt
ZW50RW5jb2RlciBzZXRCdWZmZXI6YnVmZmVyIG9mZnNldDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2Vy
PihlbnRyeS5vZmZzZXQpIGF0SW5kZXg6ZW50cnkuYmluZGluZ107CiAgICAgICAgICAgICBbY29t
cHV0ZUFyZ3VtZW50RW5jb2RlciBzZXRCdWZmZXI6YnVmZmVyIG9mZnNldDpzdGF0aWNfY2FzdDxO
U1VJbnRlZ2VyPihlbnRyeS5vZmZzZXQpIGF0SW5kZXg6ZW50cnkuYmluZGluZ107CiAgICAgICAg
IH0gZWxzZSBpZiAoc2FtcGxlcklzUHJlc2VudCkgewotICAgICAgICAgICAgaWQ8TVRMU2FtcGxl
clN0YXRlPiBzYW1wbGVyID0gV2ViR1BVOjpmcm9tQVBJKGVudHJ5LnNhbXBsZXIpLnNhbXBsZXJT
dGF0ZSgpOworICAgICAgICAgICAgaWQ8TVRMU2FtcGxlclN0YXRlPiBzYW1wbGVyID0gZnJvbUFQ
SShlbnRyeS5zYW1wbGVyKS5zYW1wbGVyU3RhdGUoKTsKICAgICAgICAgICAgIFt2ZXJ0ZXhBcmd1
bWVudEVuY29kZXIgc2V0U2FtcGxlclN0YXRlOnNhbXBsZXIgYXRJbmRleDplbnRyeS5iaW5kaW5n
XTsKICAgICAgICAgICAgIFtmcmFnbWVudEFyZ3VtZW50RW5jb2RlciBzZXRTYW1wbGVyU3RhdGU6
c2FtcGxlciBhdEluZGV4OmVudHJ5LmJpbmRpbmddOwogICAgICAgICAgICAgW2NvbXB1dGVBcmd1
bWVudEVuY29kZXIgc2V0U2FtcGxlclN0YXRlOnNhbXBsZXIgYXRJbmRleDplbnRyeS5iaW5kaW5n
XTsKICAgICAgICAgfSBlbHNlIGlmICh0ZXh0dXJlVmlld0lzUHJlc2VudCkgewotICAgICAgICAg
ICAgaWQ8TVRMVGV4dHVyZT4gdGV4dHVyZSA9IFdlYkdQVTo6ZnJvbUFQSShlbnRyeS50ZXh0dXJl
VmlldykudGV4dHVyZSgpOworICAgICAgICAgICAgaWQ8TVRMVGV4dHVyZT4gdGV4dHVyZSA9IGZy
b21BUEkoZW50cnkudGV4dHVyZVZpZXcpLnRleHR1cmUoKTsKICAgICAgICAgICAgIFt2ZXJ0ZXhB
cmd1bWVudEVuY29kZXIgc2V0VGV4dHVyZTp0ZXh0dXJlIGF0SW5kZXg6ZW50cnkuYmluZGluZ107
CiAgICAgICAgICAgICBbZnJhZ21lbnRBcmd1bWVudEVuY29kZXIgc2V0VGV4dHVyZTp0ZXh0dXJl
IGF0SW5kZXg6ZW50cnkuYmluZGluZ107CiAgICAgICAgICAgICBbY29tcHV0ZUFyZ3VtZW50RW5j
b2RlciBzZXRUZXh0dXJlOnRleHR1cmUgYXRJbmRleDplbnRyeS5iaW5kaW5nXTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLm1tIGIvU291cmNlL1dlYkdQ
VS9XZWJHUFUvQ29tbWFuZEVuY29kZXIubW0KaW5kZXggYWU0YmFjNjA4NWI0YzVmMmVlNGNkOWM3
YzNhM2UwYjAzZDc2ZDc5Mi4uNTRkNzg2ZDA2MmU5ZWQzOTExYjljM2M2MjVlNzkzZTMwMDJlYmRk
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFuZEVuY29kZXIubW0KKysr
IGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFuZEVuY29kZXIubW0KQEAgLTMzLDYgKzMzLDcg
QEAKICNpbXBvcnQgIkRldmljZS5oIgogI2ltcG9ydCAiUXVlcnlTZXQuaCIKICNpbXBvcnQgIlJl
bmRlclBhc3NFbmNvZGVyLmgiCisjaW1wb3J0ICJUZXh0dXJlLmgiCiAKIG5hbWVzcGFjZSBXZWJH
UFUgewogCkBAIC0xNTUsMjggKzE1NiwxMDkyIEBAIHZvaWQgQ29tbWFuZEVuY29kZXI6OmNvcHlC
dWZmZXJUb0J1ZmZlcihjb25zdCBCdWZmZXImIHNvdXJjZSwgdWludDY0X3Qgc291cmNlT2ZmCiAK
ICAgICBlbnN1cmVCbGl0Q29tbWFuZEVuY29kZXIoKTsKIAotICAgIFttX2JsaXRDb21tYW5kRW5j
b2RlciBjb3B5RnJvbUJ1ZmZlcjpzb3VyY2UuYnVmZmVyKCkgc291cmNlT2Zmc2V0OnN0YXRpY19j
YXN0PE5TVUludGVnZXI+KHNvdXJjZU9mZnNldCkgdG9CdWZmZXI6ZGVzdGluYXRpb24uYnVmZmVy
KCkgZGVzdGluYXRpb25PZmZzZXQ6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oZGVzdGluYXRpb25P
ZmZzZXQpIHNpemU6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2l6ZSldOworICAgIFttX2JsaXRD
b21tYW5kRW5jb2RlcgorICAgICAgICBjb3B5RnJvbUJ1ZmZlcjpzb3VyY2UuYnVmZmVyKCkKKyAg
ICAgICAgc291cmNlT2Zmc2V0OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNvdXJjZU9mZnNldCkK
KyAgICAgICAgdG9CdWZmZXI6ZGVzdGluYXRpb24uYnVmZmVyKCkKKyAgICAgICAgZGVzdGluYXRp
b25PZmZzZXQ6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oZGVzdGluYXRpb25PZmZzZXQpCisgICAg
ICAgIHNpemU6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2l6ZSldOworfQorCitzdGF0aWMgYm9v
bCB2YWxpZGF0ZUltYWdlQ29weUJ1ZmZlcihjb25zdCBXR1BVSW1hZ2VDb3B5QnVmZmVyJiBpbWFn
ZUNvcHlCdWZmZXIpCit7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8j
YWJzdHJhY3Qtb3BkZWYtdmFsaWRhdGluZy1ncHVpbWFnZWNvcHlidWZmZXIKKworICAgIC8vIEZJ
WE1FOiAiaW1hZ2VDb3B5QnVmZmVyLmJ1ZmZlciBtdXN0IGJlIGEgdmFsaWQgR1BVQnVmZmVyLiIK
KworICAgIC8vICJpbWFnZUNvcHlCdWZmZXIuYnl0ZXNQZXJSb3cgbXVzdCBiZSBhIG11bHRpcGxl
IG9mIDI1Ni4iCisgICAgaWYgKGltYWdlQ29weUJ1ZmZlci5sYXlvdXQuYnl0ZXNQZXJSb3cgJSAy
NTYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3Rh
dGljIFdHUFVFeHRlbnQzRCBpbWFnZUNvcHlUZXh0dXJlU3VicmVzb3VyY2VTaXplKGNvbnN0IFdH
UFVJbWFnZUNvcHlUZXh0dXJlJiBpbWFnZUNvcHlUZXh0dXJlKQoreworICAgIC8vIGh0dHBzOi8v
Z3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2ltYWdlY29weXRleHR1cmUtc3VicmVzb3VyY2Utc2l6
ZQorCisgICAgLy8gIkl0cyB3aWR0aCwgaGVpZ2h0IGFuZCBkZXB0aE9yQXJyYXlMYXllcnMgYXJl
IHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgZGVwdGgsIHJlc3BlY3RpdmVseSwgb2YgdGhlIHBoeXNp
Y2FsIHNpemUgb2YgaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlIHN1YnJlc291cmNlIGF0IG1pcG1h
cCBsZXZlbCBpbWFnZUNvcHlUZXh0dXJlLm1pcExldmVsLiIKKyAgICByZXR1cm4gZnJvbUFQSShp
bWFnZUNvcHlUZXh0dXJlLnRleHR1cmUpLnBoeXNpY2FsU2l6ZShpbWFnZUNvcHlUZXh0dXJlLm1p
cExldmVsKTsKK30KKworc3RhdGljIGJvb2wgdmFsaWRhdGVJbWFnZUNvcHlUZXh0dXJlKGNvbnN0
IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBpbWFnZUNvcHlUZXh0dXJlLCBjb25zdCBXR1BVRXh0ZW50
M0QmIGNvcHlTaXplKQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIv
I2Fic3RyYWN0LW9wZGVmLXZhbGlkYXRpbmctZ3B1aW1hZ2Vjb3B5dGV4dHVyZQorCisgICAgLy8g
ImJsb2NrV2lkdGggYmUgdGhlIHRleGVsIGJsb2NrIHdpZHRoIG9mIGltYWdlQ29weVRleHR1cmUu
dGV4dHVyZS5bW2Rlc2NyaXB0b3JdXS5mb3JtYXQuIgorICAgIGF1dG8gYmxvY2tXaWR0aCA9IFRl
eHR1cmU6OnRleGVsQmxvY2tXaWR0aChmcm9tQVBJKGltYWdlQ29weVRleHR1cmUudGV4dHVyZSku
ZGVzY3JpcHRvcigpLmZvcm1hdCk7CisKKyAgICAvLyAiYmxvY2tIZWlnaHQgYmUgdGhlIHRleGVs
IGJsb2NrIGhlaWdodCBvZiBpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0u
Zm9ybWF0LiIKKyAgICBhdXRvIGJsb2NrSGVpZ2h0ID0gVGV4dHVyZTo6dGV4ZWxCbG9ja0hlaWdo
dChmcm9tQVBJKGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7
CisKKyAgICAvLyBGSVhNRTogImltYWdlQ29weVRleHR1cmUudGV4dHVyZSBtdXN0IGJlIGEgdmFs
aWQgR1BVVGV4dHVyZS4iCisKKyAgICAvLyAiaW1hZ2VDb3B5VGV4dHVyZS5taXBMZXZlbCBtdXN0
IGJlIGxlc3MgdGhhbiB0aGUgW1tkZXNjcmlwdG9yXV0ubWlwTGV2ZWxDb3VudCBvZiBpbWFnZUNv
cHlUZXh0dXJlLnRleHR1cmUuIgorICAgIGlmIChpbWFnZUNvcHlUZXh0dXJlLm1pcExldmVsID49
IGZyb21BUEkoaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlKS5kZXNjcmlwdG9yKCkubWlwTGV2ZWxD
b3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gImltYWdlQ29weVRleHR1cmUu
b3JpZ2luLnggbXVzdCBiZSBhIG11bHRpcGxlIG9mIGJsb2NrV2lkdGguIgorICAgIGlmIChpbWFn
ZUNvcHlUZXh0dXJlLm9yaWdpbi54ICUgYmxvY2tXaWR0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gImltYWdlQ29weVRleHR1cmUub3JpZ2luLnkgbXVzdCBiZSBhIG11bHRpcGxl
IG9mIGJsb2NrSGVpZ2h0LiIKKyAgICBpZiAoaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4ueSAlIGJs
b2NrSGVpZ2h0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiaW1hZ2VDb3B5VGV4
dHVyZS50ZXh0dXJlLltbZGVzY3JpcHRvcl1dLmZvcm1hdCBpcyBhIGRlcHRoLXN0ZW5jaWwgZm9y
bWF0LiIKKyAgICAvLyAiaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlLltbZGVzY3JpcHRvcl1dLnNh
bXBsZUNvdW50IGlzIGdyZWF0ZXIgdGhhbiAxLiIKKyAgICBpZiAoVGV4dHVyZTo6aXNEZXB0aE9y
U3RlbmNpbEZvcm1hdChmcm9tQVBJKGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRv
cigpLmZvcm1hdCkKKyAgICAgICAgfHwgZnJvbUFQSShpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUp
LmRlc2NyaXB0b3IoKS5zYW1wbGVDb3VudCA+IDEpIHsKKyAgICAgICAgLy8gIlRoZSBpbWFnZUNv
cHlUZXh0dXJlIHN1YnJlc291cmNlIHNpemUgb2YgaW1hZ2VDb3B5VGV4dHVyZSBpcyBlcXVhbCB0
byBjb3B5U2l6ZSIKKyAgICAgICAgYXV0byBzdWJyZXNvdXJjZVNpemUgPSBpbWFnZUNvcHlUZXh0
dXJlU3VicmVzb3VyY2VTaXplKGltYWdlQ29weVRleHR1cmUpOworICAgICAgICBpZiAoc3VicmVz
b3VyY2VTaXplLndpZHRoICE9IGNvcHlTaXplLndpZHRoCisgICAgICAgICAgICB8fCBzdWJyZXNv
dXJjZVNpemUuaGVpZ2h0ICE9IGNvcHlTaXplLmhlaWdodAorICAgICAgICAgICAgfHwgc3VicmVz
b3VyY2VTaXplLmRlcHRoT3JBcnJheUxheWVycyAhPSBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXll
cnMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3N0YXRpYyBib29sIGlzVmFsaWRJbWFnZUNvcHlEZXN0aW5hdGlvbihXR1BVVGV4dHVy
ZUZvcm1hdCBmb3JtYXQsIFdHUFVUZXh0dXJlQXNwZWN0IGFzcGVjdCkKK3sKKyAgICAvLyBodHRw
czovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNkZXB0aC1mb3JtYXRzCisKKyAgICBzd2l0Y2gg
KGZvcm1hdCkgeworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfVW5kZWZpbmVkOgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfUjhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4
U25vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SOFVpbnQ6CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9SOFNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMTZVaW50
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjE2U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X1IxNkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkc4VW5vcm06
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X1JHOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhTaW50Ogor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjMyRmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9SMzJVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjMyU2ludDoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMTZVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfUkcxNlNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2RmxvYXQ6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfUkdCQThVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JB
OFNub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQThVaW50OgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfUkdCQThTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QkdSQThVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JHUkE4VW5vcm1TcmdiOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCMTBBMlVub3JtOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfUkcxMUIxMFVmbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JH
QjlFNVVmbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMzJGbG9hdDoKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMzJVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUkczMlNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMTZVaW50OgorICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTE2U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X1JHQkExNkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTMyRmxv
YXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJVaW50OgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfUkdCQTMyU2ludDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfU3RlbmNpbDg6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9EZXB0aDE2VW5vcm06CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfRGVwdGgyNFBsdXM6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRQbHVzU3RlbmNpbDg6CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9EZXB0aDI0VW5vcm1TdGVuY2lsODoKKyAgICAgICAgcmV0dXJuIGFzcGVjdCA9PSBX
R1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25seTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0RlcHRoMzJGbG9hdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfRGVwdGgzMkZsb2F0U3RlbmNpbDg6CisgICAgICAgIHJldHVybiBhc3BlY3QgPT0g
V0dQVVRleHR1cmVBc3BlY3RfU3RlbmNpbE9ubHk7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9CQzFSR0JBVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm1T
cmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMyUkdCQVVub3JtOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfQkMyUkdCQVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0JDM1JHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFV
bm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSVW5vcm06CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSU25vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9CQzVSR1Vub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM1UkdTbm9ybToKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNkhSR0JVZmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9CQzZIUkdCRmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzdS
R0JBVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzdSR0JBVW5vcm1TcmdiOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhVbm9ybToKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X0VUQzJSR0I4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfRVRDMlJHQjhBMVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhB
MVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0JBOFVub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQkE4VW5vcm1TcmdiOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfRUFDUjExVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9FQUNSMTFTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JHMTFVbm9ybToK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JHMTFTbm9ybToKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X0FTVEM0eDRVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FT
VEM0eDRVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg0VW5vcm06
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg0VW5vcm1TcmdiOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfQVNUQzV4NVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDVV
bm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDVVbm9ybVNyZ2I6CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9BU1RDNng2VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNU
Qzh4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NVVub3JtU3JnYjoK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDZVbm9ybToKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X0FTVEM4eDZVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9BU1RDOHg4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg4VW5vcm1T
cmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDVVbm9ybToKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg1VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfQVNUQzEweDZVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMx
MHg2VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDhVbm9ybToK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg4VW5vcm1TcmdiOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDEwVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9BU1RDMTB4MTBVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RD
MTJ4MTBVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMFVub3JtU3Jn
YjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMlVub3JtOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfQVNUQzEyeDEyVW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9Gb3JjZTMyOgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworc3RhdGlj
IGJvb2wgdmFsaWRhdGVUZXh0dXJlQ29weVJhbmdlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJl
JiBpbWFnZUNvcHlUZXh0dXJlLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQoreworICAg
IC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI3ZhbGlkYXRpbmctdGV4dHVyZS1j
b3B5LXJhbmdlCisKKyAgICAvLyAiTGV0IGJsb2NrV2lkdGggYmUgdGhlIHRleGVsIGJsb2NrIHdp
ZHRoIG9mIGltYWdlQ29weVRleHR1cmUudGV4dHVyZS5bW2Rlc2NyaXB0b3JdXS5mb3JtYXQuIgor
ICAgIGF1dG8gYmxvY2tXaWR0aCA9IFRleHR1cmU6OnRleGVsQmxvY2tXaWR0aChmcm9tQVBJKGlt
YWdlQ29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7CisKKyAgICAvLyAi
TGV0IGJsb2NrSGVpZ2h0IGJlIHRoZSB0ZXhlbCBibG9jayBoZWlnaHQgb2YgaW1hZ2VDb3B5VGV4
dHVyZS50ZXh0dXJlLltbZGVzY3JpcHRvcl1dLmZvcm1hdC4iCisgICAgYXV0byBibG9ja0hlaWdo
dCA9IFRleHR1cmU6OnRleGVsQmxvY2tIZWlnaHQoZnJvbUFQSShpbWFnZUNvcHlUZXh0dXJlLnRl
eHR1cmUpLmRlc2NyaXB0b3IoKS5mb3JtYXQpOworCisgICAgLy8gIkxldCBzdWJyZXNvdXJjZVNp
emUgYmUgdGhlIGltYWdlQ29weVRleHR1cmUgc3VicmVzb3VyY2Ugc2l6ZSBvZiBpbWFnZUNvcHlU
ZXh0dXJlLiIKKyAgICBhdXRvIHN1YnJlc291cmNlU2l6ZSA9IGltYWdlQ29weVRleHR1cmVTdWJy
ZXNvdXJjZVNpemUoaW1hZ2VDb3B5VGV4dHVyZSk7CisKKyAgICAvLyAiKGltYWdlQ29weVRleHR1
cmUub3JpZ2luLnggKyBjb3B5U2l6ZS53aWR0aCkg4omkIHN1YnJlc291cmNlU2l6ZS53aWR0aCIK
KyAgICAvLyBGSVhNRTogVXNlZCBjaGVja2VkIGFyaXRobWV0aWMKKyAgICBpZiAoKGltYWdlQ29w
eVRleHR1cmUub3JpZ2luLnggKyBjb3B5U2l6ZS53aWR0aCkgPiBzdWJyZXNvdXJjZVNpemUud2lk
dGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICIoaW1hZ2VDb3B5VGV4dHVyZS5v
cmlnaW4ueSArIGNvcHlTaXplLmhlaWdodCkg4omkIHN1YnJlc291cmNlU2l6ZS5oZWlnaHQiCisg
ICAgLy8gRklYTUU6IFVzZWQgY2hlY2tlZCBhcml0aG1ldGljCisgICAgaWYgKChpbWFnZUNvcHlU
ZXh0dXJlLm9yaWdpbi55ICsgY29weVNpemUuaGVpZ2h0KSA+IHN1YnJlc291cmNlU2l6ZS5oZWln
aHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICIoaW1hZ2VDb3B5VGV4dHVyZS5v
cmlnaW4ueiArIGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVycykg4omkIHN1YnJlc291cmNlU2l6
ZS5kZXB0aE9yQXJyYXlMYXllcnMiCisgICAgLy8gRklYTUU6IFVzZWQgY2hlY2tlZCBhcml0aG1l
dGljCisgICAgaWYgKChpbWFnZUNvcHlUZXh0dXJlLm9yaWdpbi56ICsgY29weVNpemUuZGVwdGhP
ckFycmF5TGF5ZXJzKSA+IHN1YnJlc291cmNlU2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJjb3B5U2l6ZS53aWR0aCBtdXN0IGJlIGEgbXVs
dGlwbGUgb2YgYmxvY2tXaWR0aC4iCisgICAgaWYgKGNvcHlTaXplLndpZHRoICUgYmxvY2tXaWR0
aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gImNvcHlTaXplLmhlaWdodCBtdXN0
IGJlIGEgbXVsdGlwbGUgb2YgYmxvY2tIZWlnaHQuIgorICAgIGlmIChjb3B5U2l6ZS5oZWlnaHQg
JSBibG9ja0hlaWdodCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3N0YXRpYyBib29sIHZhbGlkYXRlTGluZWFyVGV4dHVyZURhdGEoY29uc3QgV0dQVVRl
eHR1cmVEYXRhTGF5b3V0JiBsYXlvdXQsIHVpbnQ2NF90IGJ5dGVTaXplLCBXR1BVVGV4dHVyZUZv
cm1hdCBmb3JtYXQsIFdHUFVFeHRlbnQzRCBjb3B5RXh0ZW50KQoreworICAgIC8vIGh0dHBzOi8v
Z3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2Fic3RyYWN0LW9wZGVmLXZhbGlkYXRpbmctbGluZWFy
LXRleHR1cmUtZGF0YQorCisgICAgLy8gIkxldCBibG9ja1dpZHRoLCBibG9ja0hlaWdodCwgYW5k
IGJsb2NrU2l6ZSBiZSB0aGUgdGV4ZWwgYmxvY2sgd2lkdGgsIGhlaWdodCwgYW5kIHNpemUgb2Yg
Zm9ybWF0LiIKKyAgICBhdXRvIGJsb2NrV2lkdGggPSBUZXh0dXJlOjp0ZXhlbEJsb2NrV2lkdGgo
Zm9ybWF0KTsKKyAgICBhdXRvIGJsb2NrSGVpZ2h0ID0gVGV4dHVyZTo6dGV4ZWxCbG9ja0hlaWdo
dChmb3JtYXQpOworICAgIGF1dG8gYmxvY2tTaXplID0gVGV4dHVyZTo6dGV4ZWxCbG9ja1NpemUo
Zm9ybWF0KTsKKyAgICBpZiAoIWJsb2NrU2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gIkl0IGlzIGFzc3VtZWQgdGhhdCBjb3B5RXh0ZW50LndpZHRoIGlzIGEgbXVsdGlwbGUg
b2YgYmxvY2tXaWR0aCBhbmQgY29weUV4dGVudC5oZWlnaHQgaXMgYSBtdWx0aXBsZSBvZiBibG9j
a0hlaWdodC4iCisKKyAgICAvLyAid2lkdGhJbkJsb2NrcyBiZSBjb3B5RXh0ZW50LndpZHRoIMO3
IGJsb2NrV2lkdGguIgorICAgIGF1dG8gd2lkdGhJbkJsb2NrcyA9IGNvcHlFeHRlbnQud2lkdGgg
LyBibG9ja1dpZHRoOworCisgICAgLy8gImhlaWdodEluQmxvY2tzIGJlIGNvcHlFeHRlbnQuaGVp
Z2h0IMO3IGJsb2NrSGVpZ2h0LiIKKyAgICBhdXRvIGhlaWdodEluQmxvY2tzID0gY29weUV4dGVu
dC5oZWlnaHQgLyBibG9ja0hlaWdodDsKKworICAgIC8vICJieXRlc0luTGFzdFJvdyBiZSBibG9j
a1NpemUgw5cgd2lkdGhJbkJsb2Nrcy4iCisgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRo
bWV0aWMuCisgICAgYXV0byBieXRlc0luTGFzdFJvdyA9ICpibG9ja1NpemUgKiB3aWR0aEluQmxv
Y2tzOworCisgICAgLy8gIklmIGhlaWdodEluQmxvY2tzID4gMSIKKyAgICBpZiAoaGVpZ2h0SW5C
bG9ja3MgPiAxKSB7CisgICAgICAgIC8vICJsYXlvdXQuYnl0ZXNQZXJSb3cgbXVzdCBiZSBzcGVj
aWZpZWQuIgorICAgICAgICBpZiAobGF5b3V0LmJ5dGVzUGVyUm93ID09IFdHUFVfQ09QWV9TVFJJ
REVfVU5ERUZJTkVEKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8v
ICJJZiBjb3B5RXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyA+IDEiCisgICAgaWYgKGNvcHlFeHRl
bnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMSkgeworICAgICAgICAvLyAibGF5b3V0LmJ5dGVzUGVy
Um93IGFuZCBsYXlvdXQucm93c1BlckltYWdlIG11c3QgYmUgc3BlY2lmaWVkLiIKKyAgICAgICAg
aWYgKGxheW91dC5ieXRlc1BlclJvdyA9PSBXR1BVX0NPUFlfU1RSSURFX1VOREVGSU5FRCB8fCBs
YXlvdXQucm93c1BlckltYWdlID09IFdHUFVfQ09QWV9TVFJJREVfVU5ERUZJTkVEKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJJZiBzcGVjaWZpZWQiCisgICAg
aWYgKGxheW91dC5ieXRlc1BlclJvdyAhPSBXR1BVX0NPUFlfU1RSSURFX1VOREVGSU5FRCkgewor
ICAgICAgICAvLyAibGF5b3V0LmJ5dGVzUGVyUm93IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVx
dWFsIHRvIGJ5dGVzSW5MYXN0Um93LiIKKyAgICAgICAgaWYgKGxheW91dC5ieXRlc1BlclJvdyA8
PSBieXRlc0luTGFzdFJvdykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICAvLyAiSWYgc3BlY2lmaWVkIgorICAgIGlmIChsYXlvdXQucm93c1BlckltYWdlICE9IFdHUFVf
Q09QWV9TVFJJREVfVU5ERUZJTkVEKSB7CisgICAgICAgIC8vICJsYXlvdXQucm93c1BlckltYWdl
IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGhlaWdodEluQmxvY2tzLiIKKyAgICAg
ICAgaWYgKGxheW91dC5yb3dzUGVySW1hZ2UgPCBoZWlnaHRJbkJsb2NrcykKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyAiTGV0IHJlcXVpcmVkQnl0ZXNJbkNvcHkg
YmUgMC4iCisgICAgYXV0byByZXF1aXJlZEJ5dGVzSW5Db3B5ID0gMDsKKworICAgIC8vICJJZiBj
b3B5RXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyA+IDE6IgorICAgIGlmIChjb3B5RXh0ZW50LmRl
cHRoT3JBcnJheUxheWVycyA+IDEpIHsKKyAgICAgICAgLy8gIkxldCBieXRlc1BlckltYWdlIGJl
IGxheW91dC5ieXRlc1BlclJvdyDDlyBsYXlvdXQucm93c1BlckltYWdlLiIKKyAgICAgICAgLy8g
RklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMuCisgICAgICAgIGF1dG8gYnl0ZXNQZXJJbWFn
ZSA9IGxheW91dC5ieXRlc1BlclJvdyAqIGxheW91dC5yb3dzUGVySW1hZ2U7CisKKyAgICAgICAg
Ly8gIkxldCBieXRlc0JlZm9yZUxhc3RJbWFnZSBiZSBieXRlc1BlckltYWdlIMOXIChjb3B5RXh0
ZW50LmRlcHRoT3JBcnJheUxheWVycyDiiJIgMSkuIgorICAgICAgICBhdXRvIGJ5dGVzQmVmb3Jl
TGFzdEltYWdlID0gYnl0ZXNQZXJJbWFnZSAqIChjb3B5RXh0ZW50LmRlcHRoT3JBcnJheUxheWVy
cyAtIDEpOworCisgICAgICAgIC8vICJBZGQgYnl0ZXNCZWZvcmVMYXN0SW1hZ2UgdG8gcmVxdWly
ZWRCeXRlc0luQ29weS4iCisgICAgICAgIHJlcXVpcmVkQnl0ZXNJbkNvcHkgKz0gYnl0ZXNCZWZv
cmVMYXN0SW1hZ2U7CisgICAgfQorCisgICAgLy8gIklmIGNvcHlFeHRlbnQuZGVwdGhPckFycmF5
TGF5ZXJzID4gMDoiCisgICAgaWYgKGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMCkg
eworICAgICAgICAvLyAiSWYgaGVpZ2h0SW5CbG9ja3MgPiAxIgorICAgICAgICBpZiAoaGVpZ2h0
SW5CbG9ja3MgPiAxKSB7CisgICAgICAgICAgICAvLyAiYWRkIGxheW91dC5ieXRlc1BlclJvdyDD
lyAoaGVpZ2h0SW5CbG9ja3Mg4oiSIDEpIHRvIHJlcXVpcmVkQnl0ZXNJbkNvcHkuIgorICAgICAg
ICAgICAgcmVxdWlyZWRCeXRlc0luQ29weSArPSBsYXlvdXQuYnl0ZXNQZXJSb3cgKiAoaGVpZ2h0
SW5CbG9ja3MgLSAxKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vICJJZiBoZWlnaHRJbkJsb2Nr
cyA+IDAiCisgICAgICAgIGlmIChoZWlnaHRJbkJsb2NrcyA+IDApIHsKKyAgICAgICAgICAgIC8v
ICJhZGQgYnl0ZXNJbkxhc3RSb3cgdG8gcmVxdWlyZWRCeXRlc0luQ29weS4iCisgICAgICAgICAg
ICByZXF1aXJlZEJ5dGVzSW5Db3B5ICs9IGJ5dGVzSW5MYXN0Um93OworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gIkZhaWwgaWYgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBub3Qgc2F0
aXNmaWVkOiIKKyAgICAvLyAibGF5b3V0Lm9mZnNldCArIHJlcXVpcmVkQnl0ZXNJbkNvcHkg4omk
IGJ5dGVTaXplLiIKKyAgICBpZiAobGF5b3V0Lm9mZnNldCArIHJlcXVpcmVkQnl0ZXNJbkNvcHkg
PiBieXRlU2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3N0YXRpYyBib29sIHZhbGlkYXRlQ29weUJ1ZmZlclRvVGV4dHVyZShjb25zdCBXR1BVSW1h
Z2VDb3B5QnVmZmVyJiBzb3VyY2UsIGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBkZXN0aW5h
dGlvbiwgY29uc3QgV0dQVUV4dGVudDNEJiBjb3B5U2l6ZSkKK3sKKyAgICAvLyAiTGV0IGRzdFRl
eHR1cmVEZXNjIGJlIGRlc3RpbmF0aW9uLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uIgorICAgIGNv
bnN0IGF1dG8mIGRzdFRleHR1cmVEZXNjID0gZnJvbUFQSShkZXN0aW5hdGlvbi50ZXh0dXJlKS5k
ZXNjcmlwdG9yKCk7CisKKyAgICAvLyAidmFsaWRhdGluZyBHUFVJbWFnZUNvcHlCdWZmZXIoc291
cmNlKSByZXR1cm5zIHRydWUuIgorICAgIGlmICghdmFsaWRhdGVJbWFnZUNvcHlCdWZmZXIoc291
cmNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gInNvdXJjZS5idWZmZXIuW1t1
c2FnZV1dIGNvbnRhaW5zIENPUFlfU1JDLiIKKyAgICBpZiAoIShmcm9tQVBJKHNvdXJjZS5idWZm
ZXIpLnVzYWdlKCkgJiBXR1BVQnVmZmVyVXNhZ2VfQ29weVNyYykpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vICJ2YWxpZGF0aW5nIEdQVUltYWdlQ29weVRleHR1cmUoZGVzdGluYXRp
b24sIGNvcHlTaXplKSByZXR1cm5zIHRydWUuIgorICAgIGlmICghdmFsaWRhdGVJbWFnZUNvcHlU
ZXh0dXJlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIC8vICJkc3RUZXh0dXJlRGVzYy51c2FnZSBjb250YWlucyBDT1BZX0RTVC4iCisgICAgaWYg
KCEoZHN0VGV4dHVyZURlc2MudXNhZ2UgJiBXR1BVVGV4dHVyZVVzYWdlX0NvcHlEc3QpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiZHN0VGV4dHVyZURlc2Muc2FtcGxlQ291bnQg
aXMgMS4iCisgICAgaWYgKGRzdFRleHR1cmVEZXNjLnNhbXBsZUNvdW50ICE9IDEpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vICJJZiBkc3RUZXh0dXJlRGVzYy5mb3JtYXQgaXMgYSBk
ZXB0aC1vci1zdGVuY2lsIGZvcm1hdDoiCisgICAgaWYgKFRleHR1cmU6OmlzRGVwdGhPclN0ZW5j
aWxGb3JtYXQoZHN0VGV4dHVyZURlc2MuZm9ybWF0KSkgeworICAgICAgICAvLyAiZGVzdGluYXRp
b24uYXNwZWN0IG11c3QgcmVmZXIgdG8gYSBzaW5nbGUgYXNwZWN0IG9mIGRzdFRleHR1cmVEZXNj
LmZvcm1hdCIKKyAgICAgICAgV0dQVVRleHR1cmVGb3JtYXQgc2luZ2xlQXNwZWN0Rm9ybWF0ID0g
V0dQVVRleHR1cmVGb3JtYXRfVW5kZWZpbmVkOworICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9u
LmFzcGVjdCkgeworICAgICAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0FsbDoKKyAgICAgICAg
ICAgIGlmIChhdXRvIHN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0ID0gVGV4dHVyZTo6c3RlbmNpbE9u
bHlBc3BlY3RGb3JtYXQoZHN0VGV4dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAgICAgICAgICBz
aW5nbGVBc3BlY3RGb3JtYXQgPSAqc3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQ7CisgICAgICAgICAg
ICBpZiAoYXV0byBkZXB0aE9ubHlBc3BlY3RGb3JtYXQgPSBUZXh0dXJlOjpkZXB0aE9ubHlBc3Bl
Y3RGb3JtYXQoZHN0VGV4dHVyZURlc2MuZm9ybWF0KSkgeworICAgICAgICAgICAgICAgIGlmIChz
aW5nbGVBc3BlY3RGb3JtYXQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBzaW5nbGVBc3BlY3RGb3JtYXQgPSAqZGVwdGhPbmx5QXNwZWN0Rm9ybWF0
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRl
eHR1cmVBc3BlY3RfU3RlbmNpbE9ubHk6CisgICAgICAgICAgICBpZiAoYXV0byBzdGVuY2lsT25s
eUFzcGVjdEZvcm1hdCA9IFRleHR1cmU6OnN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0KGRzdFRleHR1
cmVEZXNjLmZvcm1hdCkpCisgICAgICAgICAgICAgICAgc2luZ2xlQXNwZWN0Rm9ybWF0ID0gKnN0
ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
V0dQVVRleHR1cmVBc3BlY3RfRGVwdGhPbmx5OgorICAgICAgICAgICAgaWYgKGF1dG8gZGVwdGhP
bmx5QXNwZWN0Rm9ybWF0ID0gVGV4dHVyZTo6ZGVwdGhPbmx5QXNwZWN0Rm9ybWF0KGRzdFRleHR1
cmVEZXNjLmZvcm1hdCkpCisgICAgICAgICAgICAgICAgc2luZ2xlQXNwZWN0Rm9ybWF0ID0gKmRl
cHRoT25seUFzcGVjdEZvcm1hdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdH
UFVUZXh0dXJlQXNwZWN0X0ZvcmNlMzI6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoc2luZ2xlQXNwZWN0Rm9ybWF0ID09IFdHUFVUZXh0dXJlRm9y
bWF0X1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyAi
YW5kIHRoYXQgYXNwZWN0IG11c3QgYmUgYSB2YWxpZCBpbWFnZSBjb3B5IGRlc3RpbmF0aW9uIGFj
Y29yZGluZyB0byDCp+KArzI1LjEuMiBEZXB0aC1zdGVuY2lsIGZvcm1hdHMuIgorICAgICAgICBp
ZiAoIWlzVmFsaWRJbWFnZUNvcHlEZXN0aW5hdGlvbihkc3RUZXh0dXJlRGVzYy5mb3JtYXQsIGRl
c3RpbmF0aW9uLmFzcGVjdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgLy8gInZhbGlkYXRpbmcgdGV4dHVyZSBjb3B5IHJhbmdlKGRlc3RpbmF0aW9uLCBjb3B5U2l6
ZSkgcmV0dXJuIHRydWUuIgorICAgIGlmICghdmFsaWRhdGVUZXh0dXJlQ29weVJhbmdlKGRlc3Rp
bmF0aW9uLCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJJZiBk
c3RUZXh0dXJlRGVzYy5mb3JtYXQgaXMgbm90IGEgZGVwdGgtb3Itc3RlbmNpbCBmb3JtYXQ6Igor
ICAgIGlmICghVGV4dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChkc3RUZXh0dXJlRGVzYy5m
b3JtYXQpKSB7CisgICAgICAgIC8vICJzb3VyY2Uub2Zmc2V0IGlzIGEgbXVsdGlwbGUgb2YgdGhl
IHRleGVsIGJsb2NrIHNpemUgb2YgZHN0VGV4dHVyZURlc2MuZm9ybWF0LiIKKyAgICAgICAgYXV0
byB0ZXhlbEJsb2NrU2l6ZSA9IFRleHR1cmU6OnRleGVsQmxvY2tTaXplKGRzdFRleHR1cmVEZXNj
LmZvcm1hdCk7CisgICAgICAgIGlmICghdGV4ZWxCbG9ja1NpemUpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmIChzb3VyY2UubGF5b3V0Lm9mZnNldCAlICp0ZXhlbEJsb2Nr
U2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyAiSWYgZHN0
VGV4dHVyZURlc2MuZm9ybWF0IGlzIGEgZGVwdGgtb3Itc3RlbmNpbCBmb3JtYXQ6IgorICAgIGlm
IChUZXh0dXJlOjppc0RlcHRoT3JTdGVuY2lsRm9ybWF0KGRzdFRleHR1cmVEZXNjLmZvcm1hdCkp
IHsKKyAgICAgICAgLy8gInNvdXJjZS5vZmZzZXQgaXMgYSBtdWx0aXBsZSBvZiA0LiIKKyAgICAg
ICAgaWYgKHNvdXJjZS5sYXlvdXQub2Zmc2V0ICUgNCkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICAvLyAidmFsaWRhdGluZyBsaW5lYXIgdGV4dHVyZSBkYXRhKHNvdXJj
ZSwgc291cmNlLmJ1ZmZlci5bW3NpemVdXSwgZHN0VGV4dHVyZURlc2MuZm9ybWF0LCBjb3B5U2l6
ZSkgc3VjY2VlZHMuIgorICAgIGlmICghdmFsaWRhdGVMaW5lYXJUZXh0dXJlRGF0YShzb3VyY2Uu
bGF5b3V0LCBmcm9tQVBJKHNvdXJjZS5idWZmZXIpLnNpemUoKSwgZHN0VGV4dHVyZURlc2MuZm9y
bWF0LCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVl
OwogfQogCiB2b2lkIENvbW1hbmRFbmNvZGVyOjpjb3B5QnVmZmVyVG9UZXh0dXJlKGNvbnN0IFdH
UFVJbWFnZUNvcHlCdWZmZXImIHNvdXJjZSwgY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUmIGRl
c3RpbmF0aW9uLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQogewotICAgIFVOVVNFRF9Q
QVJBTShzb3VyY2UpOwotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbik7Ci0gICAgVU5VU0VE
X1BBUkFNKGNvcHlTaXplKTsKKyAgICBpZiAoc291cmNlLm5leHRJbkNoYWluIHx8IHNvdXJjZS5s
YXlvdXQubmV4dEluQ2hhaW4gfHwgZGVzdGluYXRpb24ubmV4dEluQ2hhaW4pCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2RvbS1ncHVj
b21tYW5kZW5jb2Rlci1jb3B5YnVmZmVydG90ZXh0dXJlCisKKyAgICAvLyAiUHJlcGFyZSB0aGUg
ZW5jb2RlciBzdGF0ZSBvZiB0aGlzLiBJZiBpdCByZXR1cm5zIGZhbHNlLCBzdG9wLiIKKyAgICBp
ZiAoIXByZXBhcmVUaGVFbmNvZGVyU3RhdGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
IklmIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHVuc2F0aXNmaWVkIgorICAg
IGlmICghdmFsaWRhdGVDb3B5QnVmZmVyVG9UZXh0dXJlKHNvdXJjZSwgZGVzdGluYXRpb24sIGNv
cHlTaXplKSkgeworICAgICAgICAvLyAiZ2VuZXJhdGUgYSB2YWxpZGF0aW9uIGVycm9yIGFuZCBz
dG9wLiIKKyAgICAgICAgbV9kZXZpY2UtPmdlbmVyYXRlQVZhbGlkYXRpb25FcnJvcigiVmFsaWRh
dGlvbiBmYWlsdXJlLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW5zdXJlQmxp
dENvbW1hbmRFbmNvZGVyKCk7CisKKyAgICBOU1VJbnRlZ2VyIHNvdXJjZUJ5dGVzUGVyUm93ID0g
c291cmNlLmxheW91dC5ieXRlc1BlclJvdzsKKworICAgIC8vIEZJWE1FOiBVc2UgY2hlY2tlZCBh
cml0aG1ldGljCisgICAgTlNVSW50ZWdlciBzb3VyY2VCeXRlc1BlckltYWdlID0gc291cmNlLmxh
eW91dC5yb3dzUGVySW1hZ2UgKiBzb3VyY2UubGF5b3V0LmJ5dGVzUGVyUm93OworCisgICAgTVRM
QmxpdE9wdGlvbiBvcHRpb25zID0gTVRMQmxpdE9wdGlvbk5vbmU7CisgICAgc3dpdGNoIChkZXN0
aW5hdGlvbi5hc3BlY3QpIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0FsbDoKKyAgICAg
ICAgb3B0aW9ucyA9IE1UTEJsaXRPcHRpb25Ob25lOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFdHUFVUZXh0dXJlQXNwZWN0X1N0ZW5jaWxPbmx5OgorICAgICAgICBvcHRpb25zID0gTVRMQmxp
dE9wdGlvblN0ZW5jaWxGcm9tRGVwdGhTdGVuY2lsOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFdHUFVUZXh0dXJlQXNwZWN0X0RlcHRoT25seToKKyAgICAgICAgb3B0aW9ucyA9IE1UTEJsaXRP
cHRpb25EZXB0aEZyb21EZXB0aFN0ZW5jaWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0dQ
VVRleHR1cmVBc3BlY3RfRm9yY2UzMjoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1
dG8gcGh5c2ljYWxTaXplID0gZnJvbUFQSShkZXN0aW5hdGlvbi50ZXh0dXJlKS5waHlzaWNhbFNp
emUoZGVzdGluYXRpb24ubWlwTGV2ZWwpOworICAgIGF1dG8gd2lkdGhGb3JNZXRhbCA9IHN0ZDo6
bWluKGNvcHlTaXplLndpZHRoLCBwaHlzaWNhbFNpemUud2lkdGgpOworICAgIGF1dG8gaGVpZ2h0
Rm9yTWV0YWwgPSBzdGQ6Om1pbihjb3B5U2l6ZS5oZWlnaHQsIHBoeXNpY2FsU2l6ZS5oZWlnaHQp
OworICAgIGF1dG8gZGVwdGhGb3JNZXRhbCA9IHN0ZDo6bWluKGNvcHlTaXplLmRlcHRoT3JBcnJh
eUxheWVycywgcGh5c2ljYWxTaXplLmRlcHRoT3JBcnJheUxheWVycyk7CisKKyAgICBhdXRvJiBk
ZXN0aW5hdGlvbkRlc2NyaXB0b3IgPSBmcm9tQVBJKGRlc3RpbmF0aW9uLnRleHR1cmUpLmRlc2Ny
aXB0b3IoKTsKKyAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRGVzY3JpcHRvci5kaW1lbnNpb24pIHsK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzFEOiB7CisgICAgICAgIC8vIGh0dHBzOi8v
ZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL21ldGFsL210bGJsaXRjb21tYW5kZW5j
b2Rlci8xNDAwNzcxLWNvcHlmcm9tYnVmZmVyP2xhbmd1YWdlPW9iamMKKyAgICAgICAgLy8gIldo
ZW4geW91IGNvcHkgdG8gYSAxRCB0ZXh0dXJlLCBoZWlnaHQgYW5kIGRlcHRoIG11c3QgYmUgMS4i
CisgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IE1UTFNpemVNYWtlKHdpZHRoRm9yTWV0YWwsIDEs
IDEpOworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uT3JpZ2luID0gTVRMT3JpZ2luTWFrZShkZXN0
aW5hdGlvbi5vcmlnaW4ueCwgMSwgMSk7CisgICAgICAgIGZvciAodWludDMyX3QgbGF5ZXIgPSAw
OyBsYXllciA8IGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVyczsgKytsYXllcikgeworICAgICAg
ICAgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMuCisgICAgICAgICAgICBOU1VJ
bnRlZ2VyIHNvdXJjZU9mZnNldCA9IHNvdXJjZS5sYXlvdXQub2Zmc2V0ICsgbGF5ZXIgKiBzb3Vy
Y2VCeXRlc1BlckltYWdlOworICAgICAgICAgICAgTlNVSW50ZWdlciBkZXN0aW5hdGlvblNsaWNl
ID0gZGVzdGluYXRpb24ub3JpZ2luLnogKyBsYXllcjsKKyAgICAgICAgICAgIFttX2JsaXRDb21t
YW5kRW5jb2RlcgorICAgICAgICAgICAgICAgIGNvcHlGcm9tQnVmZmVyOmZyb21BUEkoc291cmNl
LmJ1ZmZlcikuYnVmZmVyKCkKKyAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXQ6c291cmNlT2Zm
c2V0CisgICAgICAgICAgICAgICAgc291cmNlQnl0ZXNQZXJSb3c6c291cmNlQnl0ZXNQZXJSb3cK
KyAgICAgICAgICAgICAgICBzb3VyY2VCeXRlc1BlckltYWdlOnNvdXJjZUJ5dGVzUGVySW1hZ2UK
KyAgICAgICAgICAgICAgICBzb3VyY2VTaXplOnNvdXJjZVNpemUKKyAgICAgICAgICAgICAgICB0
b1RleHR1cmU6ZnJvbUFQSShkZXN0aW5hdGlvbi50ZXh0dXJlKS50ZXh0dXJlKCkKKyAgICAgICAg
ICAgICAgICBkZXN0aW5hdGlvblNsaWNlOmRlc3RpbmF0aW9uU2xpY2UKKyAgICAgICAgICAgICAg
ICBkZXN0aW5hdGlvbkxldmVsOmRlc3RpbmF0aW9uLm1pcExldmVsCisgICAgICAgICAgICAgICAg
ZGVzdGluYXRpb25PcmlnaW46ZGVzdGluYXRpb25PcmlnaW4KKyAgICAgICAgICAgICAgICBvcHRp
b25zOm9wdGlvbnNdOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IFdHUFVUZXh0dXJlRGltZW5zaW9uXzJEOiB7CisgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVy
LmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL21ldGFsL210bGJsaXRjb21tYW5kZW5jb2Rlci8xNDAw
NzcxLWNvcHlmcm9tYnVmZmVyP2xhbmd1YWdlPW9iamMKKyAgICAgICAgLy8gIldoZW4geW91IGNv
cHkgdG8gYSAyRCB0ZXh0dXJlLCBkZXB0aCBtdXN0IGJlIDEuIgorICAgICAgICBhdXRvIHNvdXJj
ZVNpemUgPSBNVExTaXplTWFrZSh3aWR0aEZvck1ldGFsLCBoZWlnaHRGb3JNZXRhbCwgMSk7Cisg
ICAgICAgIGF1dG8gZGVzdGluYXRpb25PcmlnaW4gPSBNVExPcmlnaW5NYWtlKGRlc3RpbmF0aW9u
Lm9yaWdpbi54LCBkZXN0aW5hdGlvbi5vcmlnaW4ueSwgMSk7CisgICAgICAgIGZvciAodWludDMy
X3QgbGF5ZXIgPSAwOyBsYXllciA8IGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVyczsgKytsYXll
cikgeworICAgICAgICAgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMuCisgICAg
ICAgICAgICBOU1VJbnRlZ2VyIHNvdXJjZU9mZnNldCA9IHNvdXJjZS5sYXlvdXQub2Zmc2V0ICsg
bGF5ZXIgKiBzb3VyY2VCeXRlc1BlckltYWdlOworICAgICAgICAgICAgTlNVSW50ZWdlciBkZXN0
aW5hdGlvblNsaWNlID0gZGVzdGluYXRpb24ub3JpZ2luLnogKyBsYXllcjsKKyAgICAgICAgICAg
IFttX2JsaXRDb21tYW5kRW5jb2RlcgorICAgICAgICAgICAgICAgIGNvcHlGcm9tQnVmZmVyOmZy
b21BUEkoc291cmNlLmJ1ZmZlcikuYnVmZmVyKCkKKyAgICAgICAgICAgICAgICBzb3VyY2VPZmZz
ZXQ6c291cmNlT2Zmc2V0CisgICAgICAgICAgICAgICAgc291cmNlQnl0ZXNQZXJSb3c6c291cmNl
Qnl0ZXNQZXJSb3cKKyAgICAgICAgICAgICAgICBzb3VyY2VCeXRlc1BlckltYWdlOnNvdXJjZUJ5
dGVzUGVySW1hZ2UKKyAgICAgICAgICAgICAgICBzb3VyY2VTaXplOnNvdXJjZVNpemUKKyAgICAg
ICAgICAgICAgICB0b1RleHR1cmU6ZnJvbUFQSShkZXN0aW5hdGlvbi50ZXh0dXJlKS50ZXh0dXJl
KCkKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblNsaWNlOmRlc3RpbmF0aW9uU2xpY2UKKyAg
ICAgICAgICAgICAgICBkZXN0aW5hdGlvbkxldmVsOmRlc3RpbmF0aW9uLm1pcExldmVsCisgICAg
ICAgICAgICAgICAgZGVzdGluYXRpb25PcmlnaW46ZGVzdGluYXRpb25PcmlnaW4KKyAgICAgICAg
ICAgICAgICBvcHRpb25zOm9wdGlvbnNdOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzNEOiB7CisgICAgICAgIGF1dG8gc291
cmNlU2l6ZSA9IE1UTFNpemVNYWtlKHdpZHRoRm9yTWV0YWwsIGhlaWdodEZvck1ldGFsLCBkZXB0
aEZvck1ldGFsKTsKKyAgICAgICAgYXV0byBkZXN0aW5hdGlvbk9yaWdpbiA9IE1UTE9yaWdpbk1h
a2UoZGVzdGluYXRpb24ub3JpZ2luLngsIGRlc3RpbmF0aW9uLm9yaWdpbi55LCBkZXN0aW5hdGlv
bi5vcmlnaW4ueik7CisgICAgICAgIE5TVUludGVnZXIgc291cmNlT2Zmc2V0ID0gc291cmNlLmxh
eW91dC5vZmZzZXQ7CisgICAgICAgIFttX2JsaXRDb21tYW5kRW5jb2RlcgorICAgICAgICAgICAg
Y29weUZyb21CdWZmZXI6ZnJvbUFQSShzb3VyY2UuYnVmZmVyKS5idWZmZXIoKQorICAgICAgICAg
ICAgc291cmNlT2Zmc2V0OnNvdXJjZU9mZnNldAorICAgICAgICAgICAgc291cmNlQnl0ZXNQZXJS
b3c6c291cmNlQnl0ZXNQZXJSb3cKKyAgICAgICAgICAgIHNvdXJjZUJ5dGVzUGVySW1hZ2U6c291
cmNlQnl0ZXNQZXJJbWFnZQorICAgICAgICAgICAgc291cmNlU2l6ZTpzb3VyY2VTaXplCisgICAg
ICAgICAgICB0b1RleHR1cmU6ZnJvbUFQSShkZXN0aW5hdGlvbi50ZXh0dXJlKS50ZXh0dXJlKCkK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xpY2U6MAorICAgICAgICAgICAgZGVzdGluYXRpb25M
ZXZlbDpkZXN0aW5hdGlvbi5taXBMZXZlbAorICAgICAgICAgICAgZGVzdGluYXRpb25PcmlnaW46
ZGVzdGluYXRpb25PcmlnaW4KKyAgICAgICAgICAgIG9wdGlvbnM6b3B0aW9uc107CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uX0ZvcmNlMzI6Cisg
ICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIHZhbGlkYXRlQ29weVRleHR1
cmVUb0J1ZmZlcihjb25zdCBXR1BVSW1hZ2VDb3B5VGV4dHVyZSYgc291cmNlLCBjb25zdCBXR1BV
SW1hZ2VDb3B5QnVmZmVyJiBkZXN0aW5hdGlvbiwgY29uc3QgV0dQVUV4dGVudDNEJiBjb3B5U2l6
ZSkKK3sKKyAgICAvLyAiTGV0IHNyY1RleHR1cmVEZXNjIGJlIHNvdXJjZS50ZXh0dXJlLltbZGVz
Y3JpcHRvcl1dLiIKKyAgICBjb25zdCBhdXRvJiBzcmNUZXh0dXJlRGVzYyA9IGZyb21BUEkoc291
cmNlLnRleHR1cmUpLmRlc2NyaXB0b3IoKTsKKworICAgIC8vICJ2YWxpZGF0aW5nIEdQVUltYWdl
Q29weVRleHR1cmUoc291cmNlLCBjb3B5U2l6ZSkgcmV0dXJucyB0cnVlLiIKKyAgICBpZiAoIXZh
bGlkYXRlSW1hZ2VDb3B5VGV4dHVyZShzb3VyY2UsIGNvcHlTaXplKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgLy8gInNyY1RleHR1cmVEZXNjLnVzYWdlIGNvbnRhaW5zIENPUFlfU1JD
LiIKKyAgICBpZiAoIShzcmNUZXh0dXJlRGVzYy51c2FnZSAmIFdHUFVCdWZmZXJVc2FnZV9Db3B5
U3JjKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gInNyY1RleHR1cmVEZXNjLnNh
bXBsZUNvdW50IGlzIDEuIgorICAgIGlmIChzcmNUZXh0dXJlRGVzYy5zYW1wbGVDb3VudCAhPSAx
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiSWYgc3JjVGV4dHVyZURlc2MuZm9y
bWF0IGlzIGEgZGVwdGgtc3RlbmNpbCBmb3JtYXQ6IgorICAgIGlmIChUZXh0dXJlOjppc0RlcHRo
T3JTdGVuY2lsRm9ybWF0KHNyY1RleHR1cmVEZXNjLmZvcm1hdCkpIHsKKyAgICAgICAgLy8gInNv
dXJjZS5hc3BlY3QgbXVzdCByZWZlciB0byBhIHNpbmdsZSBhc3BlY3Qgb2Ygc3JjVGV4dHVyZURl
c2MuZm9ybWF0IgorICAgICAgICBXR1BVVGV4dHVyZUZvcm1hdCBzaW5nbGVBc3BlY3RGb3JtYXQg
PSBXR1BVVGV4dHVyZUZvcm1hdF9VbmRlZmluZWQ7CisgICAgICAgIHN3aXRjaCAoc291cmNlLmFz
cGVjdCkgeworICAgICAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0FsbDoKKyAgICAgICAgICAg
IGlmIChhdXRvIHN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0ID0gVGV4dHVyZTo6c3RlbmNpbE9ubHlB
c3BlY3RGb3JtYXQoc3JjVGV4dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAgICAgICAgICBzaW5n
bGVBc3BlY3RGb3JtYXQgPSAqc3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQ7CisgICAgICAgICAgICBp
ZiAoYXV0byBkZXB0aE9ubHlBc3BlY3RGb3JtYXQgPSBUZXh0dXJlOjpkZXB0aE9ubHlBc3BlY3RG
b3JtYXQoc3JjVGV4dHVyZURlc2MuZm9ybWF0KSkgeworICAgICAgICAgICAgICAgIGlmIChzaW5n
bGVBc3BlY3RGb3JtYXQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBzaW5nbGVBc3BlY3RGb3JtYXQgPSAqZGVwdGhPbmx5QXNwZWN0Rm9ybWF0Owor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1
cmVBc3BlY3RfU3RlbmNpbE9ubHk6CisgICAgICAgICAgICBpZiAoYXV0byBzdGVuY2lsT25seUFz
cGVjdEZvcm1hdCA9IFRleHR1cmU6OnN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0KHNyY1RleHR1cmVE
ZXNjLmZvcm1hdCkpCisgICAgICAgICAgICAgICAgc2luZ2xlQXNwZWN0Rm9ybWF0ID0gKnN0ZW5j
aWxPbmx5QXNwZWN0Rm9ybWF0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQ
VVRleHR1cmVBc3BlY3RfRGVwdGhPbmx5OgorICAgICAgICAgICAgaWYgKGF1dG8gZGVwdGhPbmx5
QXNwZWN0Rm9ybWF0ID0gVGV4dHVyZTo6ZGVwdGhPbmx5QXNwZWN0Rm9ybWF0KHNyY1RleHR1cmVE
ZXNjLmZvcm1hdCkpCisgICAgICAgICAgICAgICAgc2luZ2xlQXNwZWN0Rm9ybWF0ID0gKmRlcHRo
T25seUFzcGVjdEZvcm1hdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdHUFVU
ZXh0dXJlQXNwZWN0X0ZvcmNlMzI6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoc2luZ2xlQXNwZWN0Rm9ybWF0ID09IFdHUFVUZXh0dXJlRm9ybWF0
X1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyAiYW5k
IHRoYXQgYXNwZWN0IG11c3QgYmUgYSB2YWxpZCBpbWFnZSBjb3B5IGRlc3RpbmF0aW9uIGFjY29y
ZGluZyB0byDCp+KArzI1LjEuMiBEZXB0aC1zdGVuY2lsIGZvcm1hdHMuIgorICAgICAgICBpZiAo
IWlzVmFsaWRJbWFnZUNvcHlEZXN0aW5hdGlvbihzcmNUZXh0dXJlRGVzYy5mb3JtYXQsIHNvdXJj
ZS5hc3BlY3QpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJ2
YWxpZGF0aW5nIEdQVUltYWdlQ29weUJ1ZmZlcihkZXN0aW5hdGlvbikgcmV0dXJucyB0cnVlLiIK
KyAgICBpZiAoIXZhbGlkYXRlSW1hZ2VDb3B5QnVmZmVyKGRlc3RpbmF0aW9uKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gImRlc3RpbmF0aW9uLmJ1ZmZlci5bW3VzYWdlXV0gY29u
dGFpbnMgQ09QWV9EU1QuIgorICAgIGlmICghKGZyb21BUEkoZGVzdGluYXRpb24uYnVmZmVyKS51
c2FnZSgpICYgV0dQVUJ1ZmZlclVzYWdlX0NvcHlEc3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyAidmFsaWRhdGluZyB0ZXh0dXJlIGNvcHkgcmFuZ2Uoc291cmNlLCBjb3B5U2l6
ZSkgcmV0dXJucyB0cnVlLiIKKyAgICBpZiAoIXZhbGlkYXRlVGV4dHVyZUNvcHlSYW5nZShzb3Vy
Y2UsIGNvcHlTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gIklmIHNyY1Rl
eHR1cmVEZXNjLmZvcm1hdCBpcyBub3QgYSBkZXB0aC1vci1zdGVuY2lsIGZvcm1hdDoiCisgICAg
aWYgKCFUZXh0dXJlOjppc0RlcHRoT3JTdGVuY2lsRm9ybWF0KHNyY1RleHR1cmVEZXNjLmZvcm1h
dCkpIHsKKyAgICAgICAgLy8gImRlc3RpbmF0aW9uLm9mZnNldCBpcyBhIG11bHRpcGxlIG9mIHRo
ZSB0ZXhlbCBibG9jayBzaXplIG9mIHNyY1RleHR1cmVEZXNjLmZvcm1hdC4iCisgICAgICAgIGF1
dG8gdGV4ZWxCbG9ja1NpemUgPSBUZXh0dXJlOjp0ZXhlbEJsb2NrU2l6ZShzcmNUZXh0dXJlRGVz
Yy5mb3JtYXQpOworICAgICAgICBpZiAoIXRleGVsQmxvY2tTaXplKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBpZiAoZGVzdGluYXRpb24ubGF5b3V0Lm9mZnNldCAlICp0ZXhl
bEJsb2NrU2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyAi
SWYgc3JjVGV4dHVyZURlc2MuZm9ybWF0IGlzIGEgZGVwdGgtb3Itc3RlbmNpbCBmb3JtYXQ6Igor
ICAgIGlmIChUZXh0dXJlOjppc0RlcHRoT3JTdGVuY2lsRm9ybWF0KHNyY1RleHR1cmVEZXNjLmZv
cm1hdCkpIHsKKyAgICAgICAgLy8gImRlc3RpbmF0aW9uLm9mZnNldCBpcyBhIG11bHRpcGxlIG9m
IDQuIgorICAgICAgICBpZiAoZGVzdGluYXRpb24ubGF5b3V0Lm9mZnNldCAlIDQpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gInZhbGlkYXRpbmcgbGluZWFyIHRl
eHR1cmUgZGF0YShkZXN0aW5hdGlvbiwgZGVzdGluYXRpb24uYnVmZmVyLltbc2l6ZV1dLCBzcmNU
ZXh0dXJlRGVzYy5mb3JtYXQsIGNvcHlTaXplKSBzdWNjZWVkcy4iCisgICAgaWYgKCF2YWxpZGF0
ZUxpbmVhclRleHR1cmVEYXRhKGRlc3RpbmF0aW9uLmxheW91dCwgZnJvbUFQSShkZXN0aW5hdGlv
bi5idWZmZXIpLnNpemUoKSwgc3JjVGV4dHVyZURlc2MuZm9ybWF0LCBjb3B5U2l6ZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIENvbW1hbmRF
bmNvZGVyOjpjb3B5VGV4dHVyZVRvQnVmZmVyKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBz
b3VyY2UsIGNvbnN0IFdHUFVJbWFnZUNvcHlCdWZmZXImIGRlc3RpbmF0aW9uLCBjb25zdCBXR1BV
RXh0ZW50M0QmIGNvcHlTaXplKQogewotICAgIFVOVVNFRF9QQVJBTShzb3VyY2UpOwotICAgIFVO
VVNFRF9QQVJBTShkZXN0aW5hdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcHlTaXplKTsKKyAg
ICBpZiAoc291cmNlLm5leHRJbkNoYWluIHx8IGRlc3RpbmF0aW9uLm5leHRJbkNoYWluIHx8IGRl
c3RpbmF0aW9uLmxheW91dC5uZXh0SW5DaGFpbikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
aHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jZG9tLWdwdWNvbW1hbmRlbmNvZGVyLWNv
cHl0ZXh0dXJldG9idWZmZXIKKworICAgIC8vICJQcmVwYXJlIHRoZSBlbmNvZGVyIHN0YXRlIG9m
IHRoaXMuIElmIGl0IHJldHVybnMgZmFsc2UsIHN0b3AuIgorICAgIGlmICghcHJlcGFyZVRoZUVu
Y29kZXJTdGF0ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyAiSWYgYW55IG9mIHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgdW5zYXRpc2ZpZWQiCisgICAgaWYgKCF2YWxpZGF0ZUNv
cHlUZXh0dXJlVG9CdWZmZXIoc291cmNlLCBkZXN0aW5hdGlvbiwgY29weVNpemUpKSB7CisgICAg
ICAgIC8vICJnZW5lcmF0ZSBhIHZhbGlkYXRpb24gZXJyb3IgYW5kIHN0b3AuIgorICAgICAgICBt
X2RldmljZS0+Z2VuZXJhdGVBVmFsaWRhdGlvbkVycm9yKCJWYWxpZGF0aW9uIGZhaWx1cmUuIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlbnN1cmVCbGl0Q29tbWFuZEVuY29kZXIo
KTsKKworICAgIE5TVUludGVnZXIgZGVzdGluYXRpb25CeXRlc1BlclJvdyA9IGRlc3RpbmF0aW9u
LmxheW91dC5ieXRlc1BlclJvdzsKKworICAgIC8vIEZJWE1FOiBVc2UgY2hlY2tlZCBhcml0aG1l
dGljCisgICAgTlNVSW50ZWdlciBkZXN0aW5hdGlvbkJ5dGVzUGVySW1hZ2UgPSBkZXN0aW5hdGlv
bi5sYXlvdXQucm93c1BlckltYWdlICogZGVzdGluYXRpb24ubGF5b3V0LmJ5dGVzUGVyUm93Owor
CisgICAgTVRMQmxpdE9wdGlvbiBvcHRpb25zID0gTVRMQmxpdE9wdGlvbk5vbmU7CisgICAgc3dp
dGNoIChzb3VyY2UuYXNwZWN0KSB7CisgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9BbGw6Cisg
ICAgICAgIG9wdGlvbnMgPSBNVExCbGl0T3B0aW9uTm9uZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25seToKKyAgICAgICAgb3B0aW9ucyA9IE1U
TEJsaXRPcHRpb25TdGVuY2lsRnJvbURlcHRoU3RlbmNpbDsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9EZXB0aE9ubHk6CisgICAgICAgIG9wdGlvbnMgPSBNVExC
bGl0T3B0aW9uRGVwdGhGcm9tRGVwdGhTdGVuY2lsOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFdHUFVUZXh0dXJlQXNwZWN0X0ZvcmNlMzI6CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBhdXRvIHBoeXNpY2FsU2l6ZSA9IGZyb21BUEkoc291cmNlLnRleHR1cmUpLnBoeXNpY2FsU2l6
ZShzb3VyY2UubWlwTGV2ZWwpOworICAgIGF1dG8gd2lkdGhGb3JNZXRhbCA9IHN0ZDo6bWluKGNv
cHlTaXplLndpZHRoLCBwaHlzaWNhbFNpemUud2lkdGgpOworICAgIGF1dG8gaGVpZ2h0Rm9yTWV0
YWwgPSBzdGQ6Om1pbihjb3B5U2l6ZS5oZWlnaHQsIHBoeXNpY2FsU2l6ZS5oZWlnaHQpOworICAg
IGF1dG8gZGVwdGhGb3JNZXRhbCA9IHN0ZDo6bWluKGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVy
cywgcGh5c2ljYWxTaXplLmRlcHRoT3JBcnJheUxheWVycyk7CisKKyAgICBhdXRvJiBzb3VyY2VE
ZXNjcmlwdG9yID0gZnJvbUFQSShzb3VyY2UudGV4dHVyZSkuZGVzY3JpcHRvcigpOworICAgIHN3
aXRjaCAoc291cmNlRGVzY3JpcHRvci5kaW1lbnNpb24pIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJl
RGltZW5zaW9uXzFEOiB7CisgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9k
b2N1bWVudGF0aW9uL21ldGFsL210bGJsaXRjb21tYW5kZW5jb2Rlci8xNDAwNzU2LWNvcHlmcm9t
dGV4dHVyZT9sYW5ndWFnZT1vYmpjCisgICAgICAgIC8vICJXaGVuIHlvdSBjb3B5IHRvIGEgMUQg
dGV4dHVyZSwgaGVpZ2h0IGFuZCBkZXB0aCBtdXN0IGJlIDEuIgorICAgICAgICBhdXRvIHNvdXJj
ZVNpemUgPSBNVExTaXplTWFrZSh3aWR0aEZvck1ldGFsLCAxLCAxKTsKKyAgICAgICAgYXV0byBz
b3VyY2VPcmlnaW4gPSBNVExPcmlnaW5NYWtlKHNvdXJjZS5vcmlnaW4ueCwgMSwgMSk7CisgICAg
ICAgIGZvciAodWludDMyX3QgbGF5ZXIgPSAwOyBsYXllciA8IGNvcHlTaXplLmRlcHRoT3JBcnJh
eUxheWVyczsgKytsYXllcikgeworICAgICAgICAgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFy
aXRobWV0aWMuCisgICAgICAgICAgICBOU1VJbnRlZ2VyIGRlc3RpbmF0aW9uT2Zmc2V0ID0gZGVz
dGluYXRpb24ubGF5b3V0Lm9mZnNldCArIGxheWVyICogZGVzdGluYXRpb25CeXRlc1BlckltYWdl
OworICAgICAgICAgICAgTlNVSW50ZWdlciBzb3VyY2VTbGljZSA9IHNvdXJjZS5vcmlnaW4ueiAr
IGxheWVyOworICAgICAgICAgICAgW21fYmxpdENvbW1hbmRFbmNvZGVyCisgICAgICAgICAgICAg
ICAgY29weUZyb21UZXh0dXJlOmZyb21BUEkoc291cmNlLnRleHR1cmUpLnRleHR1cmUoKQorICAg
ICAgICAgICAgICAgIHNvdXJjZVNsaWNlOnNvdXJjZVNsaWNlCisgICAgICAgICAgICAgICAgc291
cmNlTGV2ZWw6c291cmNlLm1pcExldmVsCisgICAgICAgICAgICAgICAgc291cmNlT3JpZ2luOnNv
dXJjZU9yaWdpbgorICAgICAgICAgICAgICAgIHNvdXJjZVNpemU6c291cmNlU2l6ZQorICAgICAg
ICAgICAgICAgIHRvQnVmZmVyOmZyb21BUEkoZGVzdGluYXRpb24uYnVmZmVyKS5idWZmZXIoKQor
ICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0OmRlc3RpbmF0aW9uT2Zmc2V0CisgICAg
ICAgICAgICAgICAgZGVzdGluYXRpb25CeXRlc1BlclJvdzpkZXN0aW5hdGlvbkJ5dGVzUGVyUm93
CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25CeXRlc1BlckltYWdlOmRlc3RpbmF0aW9uQnl0
ZXNQZXJJbWFnZQorICAgICAgICAgICAgICAgIG9wdGlvbnM6b3B0aW9uc107CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25fMkQ6
IHsKKyAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24v
bWV0YWwvbXRsYmxpdGNvbW1hbmRlbmNvZGVyLzE0MDA3NTYtY29weWZyb210ZXh0dXJlP2xhbmd1
YWdlPW9iamMKKyAgICAgICAgLy8gIldoZW4geW91IGNvcHkgdG8gYSAyRCB0ZXh0dXJlLCBkZXB0
aCBtdXN0IGJlIDEuIgorICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBNVExTaXplTWFrZSh3aWR0
aEZvck1ldGFsLCBoZWlnaHRGb3JNZXRhbCwgMSk7CisgICAgICAgIGF1dG8gc291cmNlT3JpZ2lu
ID0gTVRMT3JpZ2luTWFrZShzb3VyY2Uub3JpZ2luLngsIHNvdXJjZS5vcmlnaW4ueSwgMSk7Cisg
ICAgICAgIGZvciAodWludDMyX3QgbGF5ZXIgPSAwOyBsYXllciA8IGNvcHlTaXplLmRlcHRoT3JB
cnJheUxheWVyczsgKytsYXllcikgeworICAgICAgICAgICAgLy8gRklYTUU6IFVzZSBjaGVja2Vk
IGFyaXRobWV0aWMuCisgICAgICAgICAgICBOU1VJbnRlZ2VyIGRlc3RpbmF0aW9uT2Zmc2V0ID0g
ZGVzdGluYXRpb24ubGF5b3V0Lm9mZnNldCArIGxheWVyICogZGVzdGluYXRpb25CeXRlc1Blcklt
YWdlOworICAgICAgICAgICAgTlNVSW50ZWdlciBzb3VyY2VTbGljZSA9IHNvdXJjZS5vcmlnaW4u
eiArIGxheWVyOworICAgICAgICAgICAgW21fYmxpdENvbW1hbmRFbmNvZGVyCisgICAgICAgICAg
ICAgICAgY29weUZyb21UZXh0dXJlOmZyb21BUEkoc291cmNlLnRleHR1cmUpLnRleHR1cmUoKQor
ICAgICAgICAgICAgICAgIHNvdXJjZVNsaWNlOnNvdXJjZVNsaWNlCisgICAgICAgICAgICAgICAg
c291cmNlTGV2ZWw6c291cmNlLm1pcExldmVsCisgICAgICAgICAgICAgICAgc291cmNlT3JpZ2lu
OnNvdXJjZU9yaWdpbgorICAgICAgICAgICAgICAgIHNvdXJjZVNpemU6c291cmNlU2l6ZQorICAg
ICAgICAgICAgICAgIHRvQnVmZmVyOmZyb21BUEkoZGVzdGluYXRpb24uYnVmZmVyKS5idWZmZXIo
KQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0OmRlc3RpbmF0aW9uT2Zmc2V0Cisg
ICAgICAgICAgICAgICAgZGVzdGluYXRpb25CeXRlc1BlclJvdzpkZXN0aW5hdGlvbkJ5dGVzUGVy
Um93CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25CeXRlc1BlckltYWdlOmRlc3RpbmF0aW9u
Qnl0ZXNQZXJJbWFnZQorICAgICAgICAgICAgICAgIG9wdGlvbnM6b3B0aW9uc107CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25f
M0Q6IHsKKyAgICAgICAgYXV0byBzb3VyY2VTaXplID0gTVRMU2l6ZU1ha2Uod2lkdGhGb3JNZXRh
bCwgaGVpZ2h0Rm9yTWV0YWwsIGRlcHRoRm9yTWV0YWwpOworICAgICAgICBhdXRvIHNvdXJjZU9y
aWdpbiA9IE1UTE9yaWdpbk1ha2Uoc291cmNlLm9yaWdpbi54LCBzb3VyY2Uub3JpZ2luLnksIHNv
dXJjZS5vcmlnaW4ueik7CisgICAgICAgIE5TVUludGVnZXIgZGVzdGluYXRpb25PZmZzZXQgPSBk
ZXN0aW5hdGlvbi5sYXlvdXQub2Zmc2V0OworICAgICAgICAgICAgW21fYmxpdENvbW1hbmRFbmNv
ZGVyCisgICAgICAgICAgICAgICAgY29weUZyb21UZXh0dXJlOmZyb21BUEkoc291cmNlLnRleHR1
cmUpLnRleHR1cmUoKQorICAgICAgICAgICAgICAgIHNvdXJjZVNsaWNlOjAKKyAgICAgICAgICAg
ICAgICBzb3VyY2VMZXZlbDpzb3VyY2UubWlwTGV2ZWwKKyAgICAgICAgICAgICAgICBzb3VyY2VP
cmlnaW46c291cmNlT3JpZ2luCisgICAgICAgICAgICAgICAgc291cmNlU2l6ZTpzb3VyY2VTaXpl
CisgICAgICAgICAgICAgICAgdG9CdWZmZXI6ZnJvbUFQSShkZXN0aW5hdGlvbi5idWZmZXIpLmJ1
ZmZlcigpCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25PZmZzZXQ6ZGVzdGluYXRpb25PZmZz
ZXQKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93OmRlc3RpbmF0aW9uQnl0
ZXNQZXJSb3cKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkJ5dGVzUGVySW1hZ2U6ZGVzdGlu
YXRpb25CeXRlc1BlckltYWdlCisgICAgICAgICAgICAgICAgb3B0aW9uczpvcHRpb25zXTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25fRm9yY2Uz
MjoKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8V0dQ
VVRleHR1cmVGb3JtYXQ+IGlzU1JHQkNvbXBhdGlibGUoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0
KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9V
bmRlZmluZWQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjhVbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4U25vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9SOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SOFNpbnQ6CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9SMTZVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjE2
U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IxNkZsb2F0OgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfUkc4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhT
bm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFVpbnQ6CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9SRzhTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjMyRmxv
YXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMzJVaW50OgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfUjMyU2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMTZVaW50
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkcxNlNpbnQ6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9SRzE2RmxvYXQ6CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfUkdCQThVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9S
R0JBOFVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQThTbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X1JHQkE4U2ludDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0JHUkE4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9C
R1JBOFVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JHUkE4VW5v
cm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0IxMEEyVW5vcm06CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9SRzExQjEwVWZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUkdCOUU1VWZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkczMkZsb2F0Ogor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkczMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9SRzMyU2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkExNlVpbnQ6
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMTZTaW50OgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfUkdCQTE2RmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JB
MzJGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkEzMlVpbnQ6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfU3RlbmNpbDg6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDE2VW5vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDI0UGx1czoKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0RlcHRoMjRQbHVzU3RlbmNpbDg6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9EZXB0aDI0VW5vcm1TdGVuY2lsODoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRo
MzJGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMzJGbG9hdFN0ZW5jaWw4
OgorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfQkMxUkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMxUkdCQVVub3Jt
U3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JDMVJHQkFVbm9ybTsKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDMlJHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0JDMlJHQkFVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZv
cm1hdF9CQzJSR0JBVW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzNSR0JBVW5v
cm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzNSR0JBVW5vcm1TcmdiOgorICAgICAg
ICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkMzUkdCQVVub3JtOworICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfQkM0UlVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM0UlNu
b3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM1UkdVbm9ybToKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0JDNVJHU25vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9C
QzZIUkdCVWZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM2SFJHQkZsb2F0Ogor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QkM3UkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM3UkdCQVVub3JtU3Jn
YjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JDN1JHQkFVbm9ybTsKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9FVEMyUkdCOFVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9y
bWF0X0VUQzJSR0I4VW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOEEx
VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOEExVW5vcm1TcmdiOgor
ICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhBMVVub3JtOworICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQkE4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9FVEMyUkdCQThVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZv
cm1hdF9FVEMyUkdCQThVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1IxMVVu
b3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUjExU25vcm06CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9FQUNSRzExVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9FQUNSRzExU25vcm06CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDNHg0VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9BU1RDNHg0VW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQVNU
QzR4NFVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NFVub3JtOgorICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NFVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJu
IFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM1eDRVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0FTVEM1eDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM1eDVVbm9y
bVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg1VW5vcm07Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng1VW5vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9BU1RDNng1VW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzZ4NVVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NlVu
b3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NlVub3JtU3JnYjoKKyAgICAg
ICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDZVbm9ybTsKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X0FTVEM4eDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FT
VEM4eDVVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg1
VW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg2VW5vcm06CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg2VW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQ
VVRleHR1cmVGb3JtYXRfQVNUQzh4NlVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QVNUQzh4OFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4OFVub3JtU3Jn
YjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDhVbm9ybTsKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg1VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9BU1RDMTB4NVVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9y
bWF0X0FTVEMxMHg1VW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NlVu
b3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDZVbm9ybVNyZ2I6CisgICAg
ICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NlVub3JtOworICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfQVNUQzEweDhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEMxMHg4VW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQVNU
QzEweDhVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHgxMFVub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDEwVW5vcm1TcmdiOgorICAgICAgICBy
ZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDEwVW5vcm07CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9BU1RDMTJ4MTBVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FT
VEMxMngxMFVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMx
MngxMFVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEyeDEyVW5vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTJVbm9ybVNyZ2I6CisgICAgICAgIHJl
dHVybiBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTJVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0ZvcmNlMzI6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KK30KKworc3RhdGljIGJvb2wgYXJlQ29weUNv
bXBhdGlibGUoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0MSwgV0dQVVRleHR1cmVGb3JtYXQgZm9y
bWF0MikKK3sKKyAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNjb3B5LWNv
bXBhdGlibGUKKworICAgIC8vICJmb3JtYXQxIGVxdWFscyBmb3JtYXQyIgorICAgIGlmIChmb3Jt
YXQxID09IGZvcm1hdDIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gImZvcm1hdDEg
YW5kIGZvcm1hdDIgZGlmZmVyIG9ubHkgaW4gd2hldGhlciB0aGV5IGFyZSBzcmdiIGZvcm1hdHMg
KGhhdmUgdGhlIC1zcmdiIHN1ZmZpeCkuIgorICAgIGF1dG8gY2Fub25pY2FsaXplZEZvcm1hdDEg
PSBpc1NSR0JDb21wYXRpYmxlKGZvcm1hdDEpOworICAgIGF1dG8gY2Fub25pY2FsaXplZEZvcm1h
dDIgPSBpc1NSR0JDb21wYXRpYmxlKGZvcm1hdDIpOworICAgIGlmICghY2Fub25pY2FsaXplZEZv
cm1hdDEgfHwgIWNhbm9uaWNhbGl6ZWRGb3JtYXQyKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKGNhbm9uaWNhbGl6ZWRGb3JtYXQxICE9IGNhbm9uaWNhbGl6ZWRGb3JtYXQxKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wg
dmFsaWRhdGVDb3B5VGV4dHVyZVRvVGV4dHVyZShjb25zdCBXR1BVSW1hZ2VDb3B5VGV4dHVyZSYg
c291cmNlLCBjb25zdCBXR1BVSW1hZ2VDb3B5VGV4dHVyZSYgZGVzdGluYXRpb24sIGNvbnN0IFdH
UFVFeHRlbnQzRCYgY29weVNpemUpCit7CisgICAgLy8gIkxldCBzcmNUZXh0dXJlRGVzYyBiZSBz
b3VyY2UudGV4dHVyZS5bW2Rlc2NyaXB0b3JdXS4iCisgICAgY29uc3QgYXV0byYgc3JjVGV4dHVy
ZURlc2MgPSBmcm9tQVBJKHNvdXJjZS50ZXh0dXJlKS5kZXNjcmlwdG9yKCk7CisKKyAgICAvLyAi
TGV0IGRzdFRleHR1cmVEZXNjIGJlIGRlc3RpbmF0aW9uLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0u
IgorICAgIGNvbnN0IGF1dG8mIGRzdFRleHR1cmVEZXNjID0gZnJvbUFQSShkZXN0aW5hdGlvbi50
ZXh0dXJlKS5kZXNjcmlwdG9yKCk7CisKKyAgICAvLyAidmFsaWRhdGluZyBHUFVJbWFnZUNvcHlU
ZXh0dXJlKHNvdXJjZSwgY29weVNpemUpIHJldHVybnMgdHJ1ZS4iCisgICAgaWYgKCF2YWxpZGF0
ZUltYWdlQ29weVRleHR1cmUoc291cmNlLCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vICJzcmNUZXh0dXJlRGVzYy51c2FnZSBjb250YWlucyBDT1BZX1NSQy4iCisg
ICAgaWYgKCEoc3JjVGV4dHVyZURlc2MudXNhZ2UgJiBXR1BVVGV4dHVyZVVzYWdlX0NvcHlTcmMp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAidmFsaWRhdGluZyBHUFVJbWFnZUNv
cHlUZXh0dXJlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkgcmV0dXJucyB0cnVlLiIKKyAgICBpZiAo
IXZhbGlkYXRlSW1hZ2VDb3B5VGV4dHVyZShkZXN0aW5hdGlvbiwgY29weVNpemUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiZHN0VGV4dHVyZURlc2MudXNhZ2UgY29udGFpbnMg
Q09QWV9EU1QuIgorICAgIGlmICghKGRzdFRleHR1cmVEZXNjLnVzYWdlICYgV0dQVVRleHR1cmVV
c2FnZV9Db3B5RHN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gInNyY1RleHR1
cmVEZXNjLnNhbXBsZUNvdW50IGlzIGVxdWFsIHRvIGRzdFRleHR1cmVEZXNjLnNhbXBsZUNvdW50
LiIKKyAgICBpZiAoc3JjVGV4dHVyZURlc2Muc2FtcGxlQ291bnQgIT0gZHN0VGV4dHVyZURlc2Mu
c2FtcGxlQ291bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJzcmNUZXh0dXJl
RGVzYy5mb3JtYXQgYW5kIGRzdFRleHR1cmVEZXNjLmZvcm1hdCBtdXN0IGJlIGNvcHktY29tcGF0
aWJsZS4iCisgICAgaWYgKCFhcmVDb3B5Q29tcGF0aWJsZShzcmNUZXh0dXJlRGVzYy5mb3JtYXQs
IGRzdFRleHR1cmVEZXNjLmZvcm1hdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8v
ICJJZiBzcmNUZXh0dXJlRGVzYy5mb3JtYXQgaXMgYSBkZXB0aC1zdGVuY2lsIGZvcm1hdDoiCisg
ICAgaWYgKFRleHR1cmU6OmlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoc3JjVGV4dHVyZURlc2MuZm9y
bWF0KSkgeworICAgICAgICAvLyAic291cmNlLmFzcGVjdCBhbmQgZGVzdGluYXRpb24uYXNwZWN0
IG11c3QgYm90aCByZWZlciB0byBhbGwgYXNwZWN0cyBvZiBzcmNUZXh0dXJlRGVzYy5mb3JtYXQg
YW5kIGRzdFRleHR1cmVEZXNjLmZvcm1hdCwgcmVzcGVjdGl2ZWx5LiIKKyAgICAgICAgc3dpdGNo
IChzb3VyY2UuYXNwZWN0KSB7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfQWxsOgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfU3RlbmNp
bE9ubHk6CisgICAgICAgICAgICBpZiAoIVRleHR1cmU6OnN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0
KHNyY1RleHR1cmVEZXNjLmZvcm1hdCkgfHwgVGV4dHVyZTo6ZGVwdGhPbmx5QXNwZWN0Rm9ybWF0
KHNyY1RleHR1cmVEZXNjLmZvcm1hdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRGVwdGhP
bmx5OgorICAgICAgICAgICAgaWYgKCFUZXh0dXJlOjpkZXB0aE9ubHlBc3BlY3RGb3JtYXQoc3Jj
VGV4dHVyZURlc2MuZm9ybWF0KSB8fCBUZXh0dXJlOjpzdGVuY2lsT25seUFzcGVjdEZvcm1hdChz
cmNUZXh0dXJlRGVzYy5mb3JtYXQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0ZvcmNlMzI6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2gg
KGRlc3RpbmF0aW9uLmFzcGVjdCkgeworICAgICAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0Fs
bDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X1N0
ZW5jaWxPbmx5OgorICAgICAgICAgICAgaWYgKCFUZXh0dXJlOjpzdGVuY2lsT25seUFzcGVjdEZv
cm1hdChkc3RUZXh0dXJlRGVzYy5mb3JtYXQpIHx8IFRleHR1cmU6OmRlcHRoT25seUFzcGVjdEZv
cm1hdChkc3RUZXh0dXJlRGVzYy5mb3JtYXQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0Rl
cHRoT25seToKKyAgICAgICAgICAgIGlmICghVGV4dHVyZTo6ZGVwdGhPbmx5QXNwZWN0Rm9ybWF0
KGRzdFRleHR1cmVEZXNjLmZvcm1hdCkgfHwgVGV4dHVyZTo6c3RlbmNpbE9ubHlBc3BlY3RGb3Jt
YXQoZHN0VGV4dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9Gb3Jj
ZTMyOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gInZhbGlkYXRpbmcgdGV4dHVyZSBjb3B5IHJhbmdlKHNvdXJjZSwgY29weVNpemUpIHJldHVy
bnMgdHJ1ZS4iCisgICAgaWYgKCF2YWxpZGF0ZVRleHR1cmVDb3B5UmFuZ2Uoc291cmNlLCBjb3B5
U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJ2YWxpZGF0aW5nIHRleHR1
cmUgY29weSByYW5nZShkZXN0aW5hdGlvbiwgY29weVNpemUpIHJldHVybnMgdHJ1ZS4iCisgICAg
aWYgKCF2YWxpZGF0ZVRleHR1cmVDb3B5UmFuZ2UoZGVzdGluYXRpb24sIGNvcHlTaXplKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gIlRoZSBzZXQgb2Ygc3VicmVzb3VyY2VzIGZv
ciB0ZXh0dXJlIGNvcHkoc291cmNlLCBjb3B5U2l6ZSkgYW5kIHRoZSBzZXQgb2Ygc3VicmVzb3Vy
Y2VzIGZvciB0ZXh0dXJlIGNvcHkoZGVzdGluYXRpb24sIGNvcHlTaXplKSBpcyBkaXNqb2ludC4i
CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jYWJzdHJhY3Qtb3BkZWYt
c2V0LW9mLXN1YnJlc291cmNlcy1mb3ItdGV4dHVyZS1jb3B5CisgICAgaWYgKHNvdXJjZS50ZXh0
dXJlID09IGRlc3RpbmF0aW9uLnRleHR1cmUpIHsKKyAgICAgICAgLy8gTWlwIGxldmVscyBhcmUg
bmV2ZXIgcmFuZ2VzLgorICAgICAgICBpZiAoc291cmNlLm1pcExldmVsID09IGRlc3RpbmF0aW9u
Lm1pcExldmVsKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGZyb21BUEkoc291cmNlLnRleHR1cmUp
LmRlc2NyaXB0b3IoKS5kaW1lbnNpb24pIHsKKyAgICAgICAgICAgIGNhc2UgV0dQVVRleHR1cmVE
aW1lbnNpb25fMUQ6CisgICAgICAgICAgICAgICAgLy8gIlRoZSBzdWJyZXNvdXJjZSBvZiBpbWFn
ZUNvcHlUZXh0dXJlLnRleHR1cmUgYXQgbWlwbWFwIGxldmVsIGltYWdlQ29weVRleHR1cmUubWlw
TGV2ZWwuIgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2Ug
V0dQVVRleHR1cmVEaW1lbnNpb25fMkQ6IHsKKyAgICAgICAgICAgICAgICAvLyAiRm9yIGVhY2gg
YXJyYXlMYXllciBvZiB0aGUgY29weVNpemUuZGVwdGhPckFycmF5TGF5ZXJzIGFycmF5IGxheWVy
cyBzdGFydGluZyBhdCBpbWFnZUNvcHlUZXh0dXJlLm9yaWdpbi56OiIKKyAgICAgICAgICAgICAg
ICAvLyAiVGhlIHN1YnJlc291cmNlIG9mIGltYWdlQ29weVRleHR1cmUudGV4dHVyZSBhdCBtaXBt
YXAgbGV2ZWwgaW1hZ2VDb3B5VGV4dHVyZS5taXBMZXZlbCBhbmQgYXJyYXkgbGF5ZXIgYXJyYXlM
YXllci4iCisgICAgICAgICAgICAgICAgUmFuZ2U8dWludDMyX3Q+IHNvdXJjZVJhbmdlKHNvdXJj
ZS5vcmlnaW4ueiwgc291cmNlLm9yaWdpbi56ICsgY29weVNpemUuZGVwdGhPckFycmF5TGF5ZXJz
KTsKKyAgICAgICAgICAgICAgICBSYW5nZTx1aW50MzJfdD4gZGVzdGluYXRpb25SYW5nZShkZXN0
aW5hdGlvbi5vcmlnaW4ueiwgc291cmNlLm9yaWdpbi56ICsgY29weVNpemUuZGVwdGhPckFycmF5
TGF5ZXJzKTsKKyAgICAgICAgICAgICAgICBpZiAoc291cmNlUmFuZ2Uub3ZlcmxhcHMoZGVzdGlu
YXRpb25SYW5nZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgV0dQVVRleHR1
cmVEaW1lbnNpb25fM0Q6CisgICAgICAgICAgICAgICAgLy8gIlRoZSBzdWJyZXNvdXJjZSBvZiBp
bWFnZUNvcHlUZXh0dXJlLnRleHR1cmUgYXQgbWlwbWFwIGxldmVsIGltYWdlQ29weVRleHR1cmUu
bWlwTGV2ZWwuIgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNh
c2UgV0dQVVRleHR1cmVEaW1lbnNpb25fRm9yY2UzMjoKKyAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBDb21t
YW5kRW5jb2Rlcjo6Y29weVRleHR1cmVUb1RleHR1cmUoY29uc3QgV0dQVUltYWdlQ29weVRleHR1
cmUmIHNvdXJjZSwgY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUmIGRlc3RpbmF0aW9uLCBjb25z
dCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQogewotICAgIFVOVVNFRF9QQVJBTShzb3VyY2UpOwot
ICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcHlTaXpl
KTsKKyAgICBpZiAoc291cmNlLm5leHRJbkNoYWluIHx8IGRlc3RpbmF0aW9uLm5leHRJbkNoYWlu
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1
d2ViLyNkb20tZ3B1Y29tbWFuZGVuY29kZXItY29weXRleHR1cmV0b3RleHR1cmUKKworICAgIC8v
ICJQcmVwYXJlIHRoZSBlbmNvZGVyIHN0YXRlIG9mIHRoaXMuIElmIGl0IHJldHVybnMgZmFsc2Us
IHN0b3AuIgorICAgIGlmICghcHJlcGFyZVRoZUVuY29kZXJTdGF0ZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyAiSWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgdW5z
YXRpc2ZpZWQiCisgICAgaWYgKCF2YWxpZGF0ZUNvcHlUZXh0dXJlVG9UZXh0dXJlKHNvdXJjZSwg
ZGVzdGluYXRpb24sIGNvcHlTaXplKSkgeworICAgICAgICAvLyAiZ2VuZXJhdGUgYSB2YWxpZGF0
aW9uIGVycm9yIGFuZCBzdG9wLiIKKyAgICAgICAgbV9kZXZpY2UtPmdlbmVyYXRlQVZhbGlkYXRp
b25FcnJvcigiVmFsaWRhdGlvbiBmYWlsdXJlLiIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgZW5zdXJlQmxpdENvbW1hbmRFbmNvZGVyKCk7CisKKyAgICBNVExCbGl0T3B0aW9uIG9w
dGlvbnMgPSBNVExCbGl0T3B0aW9uTm9uZTsKKyAgICBzd2l0Y2ggKHNvdXJjZS5hc3BlY3QpIHsK
KyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0FsbDoKKyAgICAgICAgb3B0aW9ucyA9IE1UTEJs
aXRPcHRpb25Ob25lOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0
X1N0ZW5jaWxPbmx5OgorICAgICAgICBvcHRpb25zID0gTVRMQmxpdE9wdGlvblN0ZW5jaWxGcm9t
RGVwdGhTdGVuY2lsOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0
X0RlcHRoT25seToKKyAgICAgICAgb3B0aW9ucyA9IE1UTEJsaXRPcHRpb25EZXB0aEZyb21EZXB0
aFN0ZW5jaWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRm9y
Y2UzMjoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gc291cmNlUGh5c2ljYWxT
aXplID0gZnJvbUFQSShzb3VyY2UudGV4dHVyZSkucGh5c2ljYWxTaXplKHNvdXJjZS5taXBMZXZl
bCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBoeXNpY2FsU2l6ZSA9IGZyb21BUEkoZGVzdGluYXRp
b24udGV4dHVyZSkucGh5c2ljYWxTaXplKGRlc3RpbmF0aW9uLm1pcExldmVsKTsKKyAgICBhdXRv
IHdpZHRoRm9yTWV0YWwgPSBzdGQ6Om1pbihzdGQ6Om1pbihjb3B5U2l6ZS53aWR0aCwgc291cmNl
UGh5c2ljYWxTaXplLndpZHRoKSwgZGVzdGluYXRpb25QaHlzaWNhbFNpemUud2lkdGgpOworICAg
IGF1dG8gaGVpZ2h0Rm9yTWV0YWwgPSBzdGQ6Om1pbihzdGQ6Om1pbihjb3B5U2l6ZS5oZWlnaHQs
IHNvdXJjZVBoeXNpY2FsU2l6ZS5oZWlnaHQpLCBkZXN0aW5hdGlvblBoeXNpY2FsU2l6ZS5oZWln
aHQpOworICAgIGF1dG8gZGVwdGhGb3JNZXRhbCA9IHN0ZDo6bWluKHN0ZDo6bWluKGNvcHlTaXpl
LmRlcHRoT3JBcnJheUxheWVycywgc291cmNlUGh5c2ljYWxTaXplLmRlcHRoT3JBcnJheUxheWVy
cyksIGRlc3RpbmF0aW9uUGh5c2ljYWxTaXplLmRlcHRoT3JBcnJheUxheWVycyk7CisKKyAgICBh
dXRvJiBzb3VyY2VEZXNjcmlwdG9yID0gZnJvbUFQSShzb3VyY2UudGV4dHVyZSkuZGVzY3JpcHRv
cigpOworICAgIC8vIEZJWE1FKFBFUkZPUk1BTkNFKTogSXMgaXQgYWN0dWFsbHkgZmFzdGVyIHRv
IHVzZSB0aGUgLVtNVExCbGl0Q29tbWFuZEVuY29kZXIgY29weUZyb21UZXh0dXJlOi4uLnRvVGV4
dHVyZTouLi5sZXZlbENvdW50Ol0KKyAgICAvLyB2YXJpYW50LCB3aGVyZSBwb3NzaWJsZSwgcmF0
aGVyIHRoYW4gY2FsbGluZyB0aGUgb3RoZXIgdmFyaWFudCBpbiBhIGxvb3A/CisgICAgc3dpdGNo
IChzb3VyY2VEZXNjcmlwdG9yLmRpbWVuc2lvbikgeworICAgIGNhc2UgV0dQVVRleHR1cmVEaW1l
bnNpb25fMUQ6IHsKKyAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3Vt
ZW50YXRpb24vbWV0YWwvbXRsYmxpdGNvbW1hbmRlbmNvZGVyLzE0MDA3NTYtY29weWZyb210ZXh0
dXJlP2xhbmd1YWdlPW9iamMKKyAgICAgICAgLy8gIldoZW4geW91IGNvcHkgdG8gYSAxRCB0ZXh0
dXJlLCBoZWlnaHQgYW5kIGRlcHRoIG11c3QgYmUgMS4iCisgICAgICAgIGF1dG8gc291cmNlU2l6
ZSA9IE1UTFNpemVNYWtlKHdpZHRoRm9yTWV0YWwsIDEsIDEpOworICAgICAgICBhdXRvIHNvdXJj
ZU9yaWdpbiA9IE1UTE9yaWdpbk1ha2Uoc291cmNlLm9yaWdpbi54LCAxLCAxKTsKKyAgICAgICAg
YXV0byBkZXN0aW5hdGlvbk9yaWdpbiA9IE1UTE9yaWdpbk1ha2UoZGVzdGluYXRpb24ub3JpZ2lu
LngsIDEsIDEpOworICAgICAgICBmb3IgKHVpbnQzMl90IGxheWVyID0gMDsgbGF5ZXIgPCBjb3B5
U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnM7ICsrbGF5ZXIpIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBVc2UgY2hlY2tlZCBhcml0aG1ldGljLgorICAgICAgICAgICAgTlNVSW50ZWdlciBzb3VyY2VT
bGljZSA9IHNvdXJjZS5vcmlnaW4ueiArIGxheWVyOworICAgICAgICAgICAgTlNVSW50ZWdlciBk
ZXN0aW5hdGlvblNsaWNlID0gZGVzdGluYXRpb24ub3JpZ2luLnogKyBsYXllcjsKKyAgICAgICAg
ICAgIFttX2JsaXRDb21tYW5kRW5jb2RlcgorICAgICAgICAgICAgICAgIGNvcHlGcm9tVGV4dHVy
ZTpmcm9tQVBJKHNvdXJjZS50ZXh0dXJlKS50ZXh0dXJlKCkKKyAgICAgICAgICAgICAgICBzb3Vy
Y2VTbGljZTpzb3VyY2VTbGljZQorICAgICAgICAgICAgICAgIHNvdXJjZUxldmVsOnNvdXJjZS5t
aXBMZXZlbAorICAgICAgICAgICAgICAgIHNvdXJjZU9yaWdpbjpzb3VyY2VPcmlnaW4KKyAgICAg
ICAgICAgICAgICBzb3VyY2VTaXplOnNvdXJjZVNpemUKKyAgICAgICAgICAgICAgICB0b1RleHR1
cmU6ZnJvbUFQSShkZXN0aW5hdGlvbi50ZXh0dXJlKS50ZXh0dXJlKCkKKyAgICAgICAgICAgICAg
ICBkZXN0aW5hdGlvblNsaWNlOmRlc3RpbmF0aW9uU2xpY2UKKyAgICAgICAgICAgICAgICBkZXN0
aW5hdGlvbkxldmVsOmRlc3RpbmF0aW9uLm1pcExldmVsCisgICAgICAgICAgICAgICAgZGVzdGlu
YXRpb25PcmlnaW46ZGVzdGluYXRpb25PcmlnaW5dOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzJEOiB7CisgICAgICAgIC8v
IGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL21ldGFsL210bGJsaXRj
b21tYW5kZW5jb2Rlci8xNDAwNzU2LWNvcHlmcm9tdGV4dHVyZT9sYW5ndWFnZT1vYmpjCisgICAg
ICAgIC8vICJXaGVuIHlvdSBjb3B5IHRvIGEgMkQgdGV4dHVyZSwgZGVwdGggbXVzdCBiZSAxLiIK
KyAgICAgICAgYXV0byBzb3VyY2VTaXplID0gTVRMU2l6ZU1ha2Uod2lkdGhGb3JNZXRhbCwgaGVp
Z2h0Rm9yTWV0YWwsIDEpOworICAgICAgICBhdXRvIHNvdXJjZU9yaWdpbiA9IE1UTE9yaWdpbk1h
a2Uoc291cmNlLm9yaWdpbi54LCBzb3VyY2Uub3JpZ2luLnksIDEpOworICAgICAgICBhdXRvIGRl
c3RpbmF0aW9uT3JpZ2luID0gTVRMT3JpZ2luTWFrZShkZXN0aW5hdGlvbi5vcmlnaW4ueCwgZGVz
dGluYXRpb24ub3JpZ2luLnksIDEpOworICAgICAgICBmb3IgKHVpbnQzMl90IGxheWVyID0gMDsg
bGF5ZXIgPCBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnM7ICsrbGF5ZXIpIHsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBVc2UgY2hlY2tlZCBhcml0aG1ldGljLgorICAgICAgICAgICAgTlNVSW50
ZWdlciBzb3VyY2VTbGljZSA9IHNvdXJjZS5vcmlnaW4ueiArIGxheWVyOworICAgICAgICAgICAg
TlNVSW50ZWdlciBkZXN0aW5hdGlvblNsaWNlID0gZGVzdGluYXRpb24ub3JpZ2luLnogKyBsYXll
cjsKKyAgICAgICAgICAgIFttX2JsaXRDb21tYW5kRW5jb2RlcgorICAgICAgICAgICAgICAgIGNv
cHlGcm9tVGV4dHVyZTpmcm9tQVBJKHNvdXJjZS50ZXh0dXJlKS50ZXh0dXJlKCkKKyAgICAgICAg
ICAgICAgICBzb3VyY2VTbGljZTpzb3VyY2VTbGljZQorICAgICAgICAgICAgICAgIHNvdXJjZUxl
dmVsOnNvdXJjZS5taXBMZXZlbAorICAgICAgICAgICAgICAgIHNvdXJjZU9yaWdpbjpzb3VyY2VP
cmlnaW4KKyAgICAgICAgICAgICAgICBzb3VyY2VTaXplOnNvdXJjZVNpemUKKyAgICAgICAgICAg
ICAgICB0b1RleHR1cmU6ZnJvbUFQSShkZXN0aW5hdGlvbi50ZXh0dXJlKS50ZXh0dXJlKCkKKyAg
ICAgICAgICAgICAgICBkZXN0aW5hdGlvblNsaWNlOmRlc3RpbmF0aW9uU2xpY2UKKyAgICAgICAg
ICAgICAgICBkZXN0aW5hdGlvbkxldmVsOmRlc3RpbmF0aW9uLm1pcExldmVsCisgICAgICAgICAg
ICAgICAgZGVzdGluYXRpb25PcmlnaW46ZGVzdGluYXRpb25PcmlnaW5dOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzNEOiB7
CisgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IE1UTFNpemVNYWtlKHdpZHRoRm9yTWV0YWwsIGhl
aWdodEZvck1ldGFsLCBkZXB0aEZvck1ldGFsKTsKKyAgICAgICAgYXV0byBzb3VyY2VPcmlnaW4g
PSBNVExPcmlnaW5NYWtlKHNvdXJjZS5vcmlnaW4ueCwgc291cmNlLm9yaWdpbi55LCBzb3VyY2Uu
b3JpZ2luLnopOworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uT3JpZ2luID0gTVRMT3JpZ2luTWFr
ZShkZXN0aW5hdGlvbi5vcmlnaW4ueCwgZGVzdGluYXRpb24ub3JpZ2luLnksIGRlc3RpbmF0aW9u
Lm9yaWdpbi56KTsKKyAgICAgICAgW21fYmxpdENvbW1hbmRFbmNvZGVyCisgICAgICAgICAgICBj
b3B5RnJvbVRleHR1cmU6ZnJvbUFQSShzb3VyY2UudGV4dHVyZSkudGV4dHVyZSgpCisgICAgICAg
ICAgICBzb3VyY2VTbGljZTowCisgICAgICAgICAgICBzb3VyY2VMZXZlbDpzb3VyY2UubWlwTGV2
ZWwKKyAgICAgICAgICAgIHNvdXJjZU9yaWdpbjpzb3VyY2VPcmlnaW4KKyAgICAgICAgICAgIHNv
dXJjZVNpemU6c291cmNlU2l6ZQorICAgICAgICAgICAgdG9UZXh0dXJlOmZyb21BUEkoZGVzdGlu
YXRpb24udGV4dHVyZSkudGV4dHVyZSgpCisgICAgICAgICAgICBkZXN0aW5hdGlvblNsaWNlOjAK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uTGV2ZWw6ZGVzdGluYXRpb24ubWlwTGV2ZWwKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uT3JpZ2luOmRlc3RpbmF0aW9uT3JpZ2luXTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25fRm9yY2UzMjoKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KIH0KIAogc3RhdGljIGJvb2wgdmFsaWRhdGVDbGVhckJ1ZmZlcihj
b25zdCBCdWZmZXImIGJ1ZmZlciwgdWludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCBzaXplKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tcHV0ZVBpcGVsaW5lLm1tIGIvU291cmNl
L1dlYkdQVS9XZWJHUFUvQ29tcHV0ZVBpcGVsaW5lLm1tCmluZGV4IGVkOWI4Y2ZmNjQxNDMwMTJl
NzdiM2UyMWZjNWU5Y2FiMDc1OTM2NGMuLjZmYTFjZWU5YmI0YzZhNzI3NmUyM2NjYzNiZmMzMmJm
ODA0ZDhmOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbXB1dGVQaXBlbGlu
ZS5tbQorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21wdXRlUGlwZWxpbmUubW0KQEAgLTE0
Niw4ICsxNDYsOCBAQCBSZWZQdHI8Q29tcHV0ZVBpcGVsaW5lPiBEZXZpY2U6OmNyZWF0ZUNvbXB1
dGVQaXBlbGluZShjb25zdCBXR1BVQ29tcHV0ZVBpcGVsaW5lRAogICAgIGlmIChkZXNjcmlwdG9y
Lm5leHRJbkNoYWluIHx8IGRlc2NyaXB0b3IuY29tcHV0ZS5uZXh0SW5DaGFpbikKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICBjb25zdCBTaGFkZXJNb2R1bGUmIHNoYWRlck1vZHVsZSA9
IFdlYkdQVTo6ZnJvbUFQSShkZXNjcmlwdG9yLmNvbXB1dGUubW9kdWxlKTsKLSAgICBjb25zdCBQ
aXBlbGluZUxheW91dCYgcGlwZWxpbmVMYXlvdXQgPSBXZWJHUFU6OmZyb21BUEkoZGVzY3JpcHRv
ci5sYXlvdXQpOworICAgIGNvbnN0IFNoYWRlck1vZHVsZSYgc2hhZGVyTW9kdWxlID0gZnJvbUFQ
SShkZXNjcmlwdG9yLmNvbXB1dGUubW9kdWxlKTsKKyAgICBjb25zdCBQaXBlbGluZUxheW91dCYg
cGlwZWxpbmVMYXlvdXQgPSBmcm9tQVBJKGRlc2NyaXB0b3IubGF5b3V0KTsKICAgICBhdXRvIGxh
YmVsID0gZnJvbUFQSShkZXNjcmlwdG9yLmxhYmVsKTsKIAogICAgIGF1dG8gbGlicmFyeUNyZWF0
aW9uUmVzdWx0ID0gY3JlYXRlTGlicmFyeShtX2RldmljZSwgc2hhZGVyTW9kdWxlLCBwaXBlbGlu
ZUxheW91dCwgZGVzY3JpcHRvci5jb21wdXRlLmVudHJ5UG9pbnQsIGxhYmVsKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1BpcGVsaW5lTGF5b3V0Lm1tIGIvU291cmNlL1dlYkdQ
VS9XZWJHUFUvUGlwZWxpbmVMYXlvdXQubW0KaW5kZXggZWZhMGQ2ZDUxN2JhY2I2N2NlMjM2ZDA0
MWFmMWE1ZmYzNTgwOTZmYS4uMDY1ODNkZjBkZGFmM2M2OTY2ZTk0NGZhMzYzZTY0MDg1OTFiYWE3
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvUGlwZWxpbmVMYXlvdXQubW0KKysr
IGIvU291cmNlL1dlYkdQVS9XZWJHUFUvUGlwZWxpbmVMYXlvdXQubW0KQEAgLTQxLDcgKzQxLDcg
QEAgUmVmUHRyPFBpcGVsaW5lTGF5b3V0PiBEZXZpY2U6OmNyZWF0ZVBpcGVsaW5lTGF5b3V0KGNv
bnN0IFdHUFVQaXBlbGluZUxheW91dERlc2MKICAgICBiaW5kR3JvdXBMYXlvdXRzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci5iaW5kR3JvdXBMYXlvdXRDb3VudCk7CiAgICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IGRlc2NyaXB0b3IuYmluZEdyb3VwTGF5b3V0Q291bnQ7ICsr
aSkgewogICAgICAgICBhdXRvKiBiaW5kR3JvdXBMYXlvdXQgPSBkZXNjcmlwdG9yLmJpbmRHcm91
cExheW91dHNbaV07Ci0gICAgICAgIGJpbmRHcm91cExheW91dHMudW5jaGVja2VkQXBwZW5kKFdl
YkdQVTo6ZnJvbUFQSShiaW5kR3JvdXBMYXlvdXQpKTsKKyAgICAgICAgYmluZEdyb3VwTGF5b3V0
cy51bmNoZWNrZWRBcHBlbmQoZnJvbUFQSShiaW5kR3JvdXBMYXlvdXQpKTsKICAgICB9CiAgICAg
cmV0dXJuIFBpcGVsaW5lTGF5b3V0OjpjcmVhdGUoV1RGTW92ZShiaW5kR3JvdXBMYXlvdXRzKSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9TaGFkZXJNb2R1bGUubW0gYi9T
b3VyY2UvV2ViR1BVL1dlYkdQVS9TaGFkZXJNb2R1bGUubW0KaW5kZXggZTAwNzU1Y2ZiNTViNGM2
NmE4OTI3ZGQzZTVlMDJlYTkxMDE3MGM0NC4uYjUxZTY4OTRlNjM2Y2NkMmQzYzIxMDRiZTQ1ZjEx
YmQwMDgyNzQ3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvU2hhZGVyTW9kdWxl
Lm1tCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1NoYWRlck1vZHVsZS5tbQpAQCAtODgsOCAr
ODgsOCBAQCBzdGF0aWMgUmVmUHRyPFNoYWRlck1vZHVsZT4gZWFybHlDb21waWxlU2hhZGVyTW9k
dWxlKGlkPE1UTERldmljZT4gZGV2aWNlLCBzdGQ6OgogICAgICAgICBjb25zdCBhdXRvJiBoaW50
ID0gc3VwcGxpZWRIaW50cy5oaW50c1tpXTsKICAgICAgICAgaWYgKGhpbnQubmV4dEluQ2hhaW4p
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaGludHMuYWRkKGhpbnQua2V5
LCBXZWJHUFU6OmZyb21BUEkoaGludC5oaW50LmxheW91dCkpOwotICAgICAgICBhdXRvIGNvbnZl
cnRlZFBpcGVsaW5lTGF5b3V0ID0gU2hhZGVyTW9kdWxlOjpjb252ZXJ0UGlwZWxpbmVMYXlvdXQo
V2ViR1BVOjpmcm9tQVBJKGhpbnQuaGludC5sYXlvdXQpKTsKKyAgICAgICAgaGludHMuYWRkKGhp
bnQua2V5LCBmcm9tQVBJKGhpbnQuaGludC5sYXlvdXQpKTsKKyAgICAgICAgYXV0byBjb252ZXJ0
ZWRQaXBlbGluZUxheW91dCA9IFNoYWRlck1vZHVsZTo6Y29udmVydFBpcGVsaW5lTGF5b3V0KGZy
b21BUEkoaGludC5oaW50LmxheW91dCkpOwogICAgICAgICB3Z3NsSGludHMuYWRkKGhpbnQua2V5
LCBXVEZNb3ZlKGNvbnZlcnRlZFBpcGVsaW5lTGF5b3V0KSk7CiAgICAgfQogICAgIGF1dG8gcHJl
cGFyZVJlc3VsdCA9IFdHU0w6OnByZXBhcmUoc3RkOjpnZXQ8V0dTTDo6U3VjY2Vzc2Z1bENoZWNr
PihjaGVja1Jlc3VsdCkuYXN0LCB3Z3NsSGludHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQ
VS9XZWJHUFUvVGV4dHVyZS5oIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvVGV4dHVyZS5oCmluZGV4
IDlhNTk3OGQ3MzkxMmM5OTFlNGI0M2JjZWQyNzlkMTFkM2ViYjc0MDUuLmM0OWVhZWJjN2Y3YjBk
NjllNTYzMjVjYzlmZGVjZTAyYmJhN2IzODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2Vi
R1BVL1RleHR1cmUuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLmgKQEAgLTUx
LDYgKzUxLDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlc3Ryb3koKTsKICAgICB2b2lkIHNldExh
YmVsKFN0cmluZyYmKTsKIAorICAgIHN0YXRpYyB1aW50MzJfdCB0ZXhlbEJsb2NrV2lkdGgoV0dQ
VVRleHR1cmVGb3JtYXQpOworICAgIHN0YXRpYyB1aW50MzJfdCB0ZXhlbEJsb2NrSGVpZ2h0KFdH
UFVUZXh0dXJlRm9ybWF0KTsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gdGV4
ZWxCbG9ja1NpemUoV0dQVVRleHR1cmVGb3JtYXQpOworICAgIHN0YXRpYyBib29sIGlzRGVwdGhP
clN0ZW5jaWxGb3JtYXQoV0dQVVRleHR1cmVGb3JtYXQpOworICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPFdHUFVUZXh0dXJlRm9ybWF0PiBzdGVuY2lsT25seUFzcGVjdEZvcm1hdChXR1BVVGV4dHVy
ZUZvcm1hdCk7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V0dQVVRleHR1cmVGb3JtYXQ+IGRl
cHRoT25seUFzcGVjdEZvcm1hdChXR1BVVGV4dHVyZUZvcm1hdCk7CisKKyAgICBXR1BVRXh0ZW50
M0QgcGh5c2ljYWxTaXplKHVpbnQzMl90IG1pcExldmVsKTsKKwogICAgIGlkPE1UTFRleHR1cmU+
IHRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmU7IH0KICAgICBjb25zdCBXR1BVVGV4
dHVyZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IoKSBjb25zdCB7IHJldHVybiBtX2Rlc2NyaXB0b3I7
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvVGV4dHVyZS5tbSBiL1NvdXJj
ZS9XZWJHUFUvV2ViR1BVL1RleHR1cmUubW0KaW5kZXggOGY1NGZjZDdjMTg4MzkzZmQ2Y2I1YTQ2
N2Q5ZTQ0NjY2OTc3OTJiMi4uM2FhNDJjYjczYmZhODI0ZDc0MWU2NzljMWRlY2NmYjIxZWNhZjhj
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvVGV4dHVyZS5tbQorKysgYi9Tb3Vy
Y2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLm1tCkBAIC0zMyw2ICszMyw4IEBACiAKIG5hbWVzcGFj
ZSBXZWJHUFUgewogCitzdGF0aWMgc3RkOjpvcHRpb25hbDxNVExQaXhlbEZvcm1hdD4gcGl4ZWxG
b3JtYXQoV0dQVVRleHR1cmVGb3JtYXQpOworCiBzdGF0aWMgc3RkOjpvcHRpb25hbDxXR1BVRmVh
dHVyZU5hbWU+IGZlYXR1cmVSZXF1aXJlbWVudEZvckZvcm1hdChXR1BVVGV4dHVyZUZvcm1hdCBm
b3JtYXQpCiB7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKQEAgLTI0Nyw3ICsyNDksNyBAQCBzdGF0
aWMgYm9vbCBpc0NvbXByZXNzZWRGb3JtYXQoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0KQogICAg
IH0KIH0KIAotc3RhdGljIGJvb2wgaXNEZXB0aE9yU3RlbmNpbEZvcm1hdChXR1BVVGV4dHVyZUZv
cm1hdCBmb3JtYXQpCitib29sIFRleHR1cmU6OmlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoV0dQVVRl
eHR1cmVGb3JtYXQgZm9ybWF0KQogewogICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9n
cHV3ZWIvI2RlcHRoLWZvcm1hdHMKICAgICAvLyAiQSBkZXB0aC1vci1zdGVuY2lsIGZvcm1hdCBp
cyBhbnkgZm9ybWF0IHdpdGggZGVwdGggYW5kL29yIHN0ZW5jaWwgYXNwZWN0cy4iCkBAIC0zNTQs
NyArMzU2LDcgQEAgc3RhdGljIGJvb2wgaXNEZXB0aE9yU3RlbmNpbEZvcm1hdChXR1BVVGV4dHVy
ZUZvcm1hdCBmb3JtYXQpCiAgICAgfQogfQogCi1zdGF0aWMgdWludDMyX3QgdGV4ZWxCbG9ja1dp
ZHRoKFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCkKK3VpbnQzMl90IFRleHR1cmU6OnRleGVsQmxv
Y2tXaWR0aChXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQpCiB7CiAgICAgLy8gaHR0cHM6Ly9ncHV3
ZWIuZ2l0aHViLmlvL2dwdXdlYi8jdGV4ZWwtYmxvY2std2lkdGgKICAgICBzd2l0Y2ggKGZvcm1h
dCkgewpAQCAtNDY4LDcgKzQ3MCw3IEBAIHN0YXRpYyB1aW50MzJfdCB0ZXhlbEJsb2NrV2lkdGgo
V0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0KQogICAgIH0KIH0KIAotc3RhdGljIHVpbnQzMl90IHRl
eGVsQmxvY2tIZWlnaHQoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0KQordWludDMyX3QgVGV4dHVy
ZTo6dGV4ZWxCbG9ja0hlaWdodChXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQpCiB7CiAgICAgLy8g
aHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jdGV4ZWwtYmxvY2staGVpZ2h0CiAgICAg
c3dpdGNoIChmb3JtYXQpIHsKQEAgLTU4Nyw2ICs1ODksMTM3IEBAIHN0YXRpYyB1aW50MzJfdCB0
ZXhlbEJsb2NrSGVpZ2h0KFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCkKICAgICB9CiB9CiAKK3N0
ZDo6b3B0aW9uYWw8dWludDMyX3Q+IFRleHR1cmU6OnRleGVsQmxvY2tTaXplKFdHUFVUZXh0dXJl
Rm9ybWF0IGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfVW5kZWZpbmVkOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SOFVub3JtOgorICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjhTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X1I4VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4U2ludDoKKyAgICAgICAg
cmV0dXJuIDE7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMTZVaW50OgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfUjE2U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1Ix
NkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkc4VW5vcm06CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9SRzhTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JH
OFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhTaW50OgorICAgICAgICByZXR1
cm4gMjsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IzMkZsb2F0OgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfUjMyVWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IzMlNp
bnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2VWludDoKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X1JHMTZTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkcxNkZs
b2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQThVbm9ybToKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X1JHQkE4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUkdCQThTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4VWludDoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0JHUkE4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CR1JBOFVub3Jt
U3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQjEwQTJVbm9ybToKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X1JHMTFCMTBVZmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SR0I5RTVVZmxvYXQ6CisgICAgICAgIHJldHVybiA0OworICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfUkczMkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkczMlVpbnQ6
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzMyU2ludDoKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X1JHQkExNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMTZT
aW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTE2RmxvYXQ6CisgICAgICAgIHJl
dHVybiA4OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTMyRmxvYXQ6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUkdCQTMyU2ludDoKKyAgICAgICAgcmV0dXJuIDE2OworICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfU3RlbmNpbDg6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfRGVwdGgxNlVub3JtOgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0RlcHRoMjRQbHVzOgorICAgICAgICBBU1NFUlQocGl4ZWxGb3JtYXQoZm9ybWF0
KSA9PSBNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdCk7CisgICAgICAgIHJldHVybiA0OworICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFBsdXNTdGVuY2lsODoKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRVbm9y
bVN0ZW5jaWw4OgorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0OgorICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0RlcHRoMzJGbG9hdFN0ZW5jaWw4OgorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMxUkdCQVVub3JtOgorICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMxUkdCQVVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJu
IDg7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzJSR0JBVW5vcm06CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9CQzJSR0JBVW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gODsKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0JDM1JHQkFVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiAxNjsKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0JDNFJVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0JDNFJTbm9ybToKKyAgICAgICAgcmV0dXJuIDg7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9CQzVSR1Vub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM1UkdTbm9ybToKKyAg
ICAgICAgcmV0dXJuIDE2OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM2SFJHQlVmbG9h
dDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNkhSR0JGbG9hdDoKKyAgICAgICAgcmV0
dXJuIDE2OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM3UkdCQVVub3JtOgorICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfQkM3UkdCQVVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIDE2
OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhVbm9ybToKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfRVRDMlJHQjhBMVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJH
QjhBMVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0JBOFVub3Jt
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQkE4VW5vcm1TcmdiOgorICAgICAg
ICByZXR1cm4gODsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1IxMVVub3JtOgorICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUjExU25vcm06CisgICAgICAgIHJldHVybiA4Owor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUkcxMVVub3JtOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfRUFDUkcxMVNub3JtOgorICAgICAgICByZXR1cm4gMTY7CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDNHg0VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9BU1RDNHg0VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NFVu
b3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NFVub3JtU3JnYjoKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM1eDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0FTVEM1eDVVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RD
Nng1VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng1VW5vcm1TcmdiOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NlVub3JtOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzZ4NlVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEM4eDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDVVbm9ybVNy
Z2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg2VW5vcm06CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg2VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzh4OFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4OFVu
b3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg1VW5vcm06CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X0FTVEMxMHg2VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9B
U1RDMTB4NlVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg4VW5v
cm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4OFVub3JtU3JnYjoKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHgxMFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfQVNUQzEweDEwVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QVNUQzEyeDEwVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTBVbm9y
bVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTJVbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMlVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJu
IDE2OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRm9yY2UzMjoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwogc3RhdGljIGJv
b2wgaXNSZW5kZXJhYmxlRm9ybWF0KFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCkKIHsKICAgICAv
LyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNyZW5kZXJhYmxlLWZvcm1hdApAQCAt
OTc4LDcgKzExMTEsNyBAQCBib29sIERldmljZTo6dmFsaWRhdGVDcmVhdGVUZXh0dXJlKGNvbnN0
IFdHUFVUZXh0dXJlRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgICAgICAvLyAiZGVzY3JpcHRvci5mb3JtYXQgbXVzdCBub3QgYmUgYSBjb21w
cmVzc2VkIGZvcm1hdCBvciBkZXB0aC1vci1zdGVuY2lsIGZvcm1hdC4iCi0gICAgICAgIGlmIChp
c0NvbXByZXNzZWRGb3JtYXQoZGVzY3JpcHRvci5mb3JtYXQpIHx8IGlzRGVwdGhPclN0ZW5jaWxG
b3JtYXQoZGVzY3JpcHRvci5mb3JtYXQpKQorICAgICAgICBpZiAoaXNDb21wcmVzc2VkRm9ybWF0
KGRlc2NyaXB0b3IuZm9ybWF0KSB8fCBUZXh0dXJlOjppc0RlcHRoT3JTdGVuY2lsRm9ybWF0KGRl
c2NyaXB0b3IuZm9ybWF0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8yRDoKQEAgLTEwMDAsNyArMTEzMyw3
IEBAIGJvb2wgRGV2aWNlOjp2YWxpZGF0ZUNyZWF0ZVRleHR1cmUoY29uc3QgV0dQVVRleHR1cmVE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
ICAgIC8vICJkZXNjcmlwdG9yLmZvcm1hdCBtdXN0IG5vdCBiZSBhIGNvbXByZXNzZWQgZm9ybWF0
IG9yIGRlcHRoLW9yLXN0ZW5jaWwgZm9ybWF0LiIKLSAgICAgICAgaWYgKGlzQ29tcHJlc3NlZEZv
cm1hdChkZXNjcmlwdG9yLmZvcm1hdCkgfHwgaXNEZXB0aE9yU3RlbmNpbEZvcm1hdChkZXNjcmlw
dG9yLmZvcm1hdCkpCisgICAgICAgIGlmIChpc0NvbXByZXNzZWRGb3JtYXQoZGVzY3JpcHRvci5m
b3JtYXQpIHx8IFRleHR1cmU6OmlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoZGVzY3JpcHRvci5mb3Jt
YXQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IFdHUFVUZXh0dXJlRGltZW5zaW9uX0ZvcmNlMzI6CkBAIC0xMDA4LDExICsxMTQxLDExIEBAIGJv
b2wgRGV2aWNlOjp2YWxpZGF0ZUNyZWF0ZVRleHR1cmUoY29uc3QgV0dQVVRleHR1cmVEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yKQogICAgIH0KIAogICAgIC8vICJkZXNjcmlwdG9yLnNpemUud2lkdGgg
bXVzdCBiZSBtdWx0aXBsZSBvZiB0ZXhlbCBibG9jayB3aWR0aC4iCi0gICAgaWYgKGRlc2NyaXB0
b3Iuc2l6ZS53aWR0aCAlIHRleGVsQmxvY2tXaWR0aChkZXNjcmlwdG9yLmZvcm1hdCkpCisgICAg
aWYgKGRlc2NyaXB0b3Iuc2l6ZS53aWR0aCAlIFRleHR1cmU6OnRleGVsQmxvY2tXaWR0aChkZXNj
cmlwdG9yLmZvcm1hdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vICJkZXNjcmlw
dG9yLnNpemUuaGVpZ2h0IG11c3QgYmUgbXVsdGlwbGUgb2YgdGV4ZWwgYmxvY2sgaGVpZ2h0LiIK
LSAgICBpZiAoZGVzY3JpcHRvci5zaXplLmhlaWdodCAlIHRleGVsQmxvY2tIZWlnaHQoZGVzY3Jp
cHRvci5mb3JtYXQpKQorICAgIGlmIChkZXNjcmlwdG9yLnNpemUuaGVpZ2h0ICUgVGV4dHVyZTo6
dGV4ZWxCbG9ja0hlaWdodChkZXNjcmlwdG9yLmZvcm1hdCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIC8vICJJZiBkZXNjcmlwdG9yLnNhbXBsZUNvdW50ID4gMToiCkBAIC0xNDI0LDYg
KzE1NTcsNzkgQEAgdm9pZCBUZXh0dXJlOjpzZXRMYWJlbChTdHJpbmcmJiBsYWJlbCkKICAgICBt
X3RleHR1cmUubGFiZWwgPSBsYWJlbDsKIH0KIAorc3RhdGljIFdHUFVFeHRlbnQzRCBsb2dpY2Fs
VGV4dHVyZVN1YnJlc291cmNlRXh0ZW50KGNvbnN0IFdHUFVUZXh0dXJlRGVzY3JpcHRvciYgZGVz
Y3JpcHRvciwgdWludDMyX3QgbWlwTGV2ZWwpCit7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0
aHViLmlvL2dwdXdlYi8jYWJzdHJhY3Qtb3BkZWYtbG9naWNhbC10ZXh0dXJlLXN1YnJlc291cmNl
LWV4dGVudAorCisgICAgc3dpdGNoIChkZXNjcmlwdG9yLmRpbWVuc2lvbikgeworICAgIGNhc2Ug
V0dQVVRleHR1cmVEaW1lbnNpb25fMUQ6CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAv
LyAiU2V0IGV4dGVudC53aWR0aCB0byBtYXgoMSwgZGVzY3JpcHRvci5zaXplLndpZHRoIOKJqyBt
aXBMZXZlbCkuIgorICAgICAgICAgICAgc3RkOjptYXgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEp
LCBkZXNjcmlwdG9yLnNpemUud2lkdGggPj4gbWlwTGV2ZWwpLAorICAgICAgICAgICAgLy8gIlNl
dCBleHRlbnQuaGVpZ2h0IHRvIDEuIgorICAgICAgICAgICAgMSwKKyAgICAgICAgICAgIC8vICJT
ZXQgZXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyB0byAxLiIKKyAgICAgICAgICAgIDEgfTsKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzJEOgorICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgLy8gIlNldCBleHRlbnQud2lkdGggdG8gbWF4KDEsIGRlc2NyaXB0b3Iuc2l6ZS53aWR0
aCDiiasgbWlwTGV2ZWwpLiIKKyAgICAgICAgICAgIHN0ZDo6bWF4KHN0YXRpY19jYXN0PHVpbnQz
Ml90PigxKSwgZGVzY3JpcHRvci5zaXplLndpZHRoID4+IG1pcExldmVsKSwKKyAgICAgICAgICAg
IC8vICJTZXQgZXh0ZW50LmhlaWdodCB0byBtYXgoMSwgZGVzY3JpcHRvci5zaXplLmhlaWdodCDi
iasgbWlwTGV2ZWwpLiIKKyAgICAgICAgICAgIHN0ZDo6bWF4KHN0YXRpY19jYXN0PHVpbnQzMl90
PigxKSwgZGVzY3JpcHRvci5zaXplLmhlaWdodCA+PiBtaXBMZXZlbCksCisgICAgICAgICAgICAv
LyAiU2V0IGV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgdG8gMS4iCisgICAgICAgICAgICAxIH07
CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8zRDoKKyAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgIC8vICJTZXQgZXh0ZW50LndpZHRoIHRvIG1heCgxLCBkZXNjcmlwdG9yLnNpemUu
d2lkdGgg4omrIG1pcExldmVsKS4iCisgICAgICAgICAgICBzdGQ6Om1heChzdGF0aWNfY2FzdDx1
aW50MzJfdD4oMSksIGRlc2NyaXB0b3Iuc2l6ZS53aWR0aCA+PiBtaXBMZXZlbCksCisgICAgICAg
ICAgICAvLyAiU2V0IGV4dGVudC5oZWlnaHQgdG8gbWF4KDEsIGRlc2NyaXB0b3Iuc2l6ZS5oZWln
aHQg4omrIG1pcExldmVsKS4iCisgICAgICAgICAgICBzdGQ6Om1heChzdGF0aWNfY2FzdDx1aW50
MzJfdD4oMSksIGRlc2NyaXB0b3Iuc2l6ZS5oZWlnaHQgPj4gbWlwTGV2ZWwpLAorICAgICAgICAg
ICAgLy8gIlNldCBleHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzIHRvIG1heCgxLCBkZXNjcmlwdG9y
LnNpemUuZGVwdGhPckFycmF5TGF5ZXJzIOKJqyBtaXBMZXZlbCkuIgorICAgICAgICAgICAgc3Rk
OjptYXgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEpLCBkZXNjcmlwdG9yLnNpemUuZGVwdGhPckFy
cmF5TGF5ZXJzID4+IG1pcExldmVsKSB9OworICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25f
Rm9yY2UzMjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBX
R1BVRXh0ZW50M0QgeyB9OworICAgIH0KK30KKworV0dQVUV4dGVudDNEIFRleHR1cmU6OnBoeXNp
Y2FsU2l6ZSh1aW50MzJfdCBtaXBMZXZlbCkKK3sKKyAgICAvLyBodHRwczovL2dwdXdlYi5naXRo
dWIuaW8vZ3B1d2ViLyNhYnN0cmFjdC1vcGRlZi1waHlzaWNhbC10ZXh0dXJlLXN1YnJlc291cmNl
LWV4dGVudAorCisgICAgLy8gIkxldCBsb2dpY2FsRXh0ZW50IGJlIExvZ2ljYWwgdGV4dHVyZSBz
dWJyZXNvdXJjZSBleHRlbnQoZGVzY3JpcHRvciwgbWlwTGV2ZWwpLiIKKyAgICBhdXRvIGxvZ2lj
YWxFeHRlbnQgPSBsb2dpY2FsVGV4dHVyZVN1YnJlc291cmNlRXh0ZW50KG1fZGVzY3JpcHRvciwg
bWlwTGV2ZWwpOworCisgICAgc3dpdGNoIChtX2Rlc2NyaXB0b3IuZGltZW5zaW9uKSB7CisgICAg
Y2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8xRDoKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgIC8vICJTZXQgZXh0ZW50LndpZHRoIHRvIGxvZ2ljYWxFeHRlbnQud2lkdGggcm91bmRlZCB1
cCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiBkZXNjcmlwdG9y4oCZcyB0ZXhlbCBibG9jayB3
aWR0aC4iCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mKHRleGVsQmxvY2tXaWR0aChtX2Rlc2NyaXB0b3IuZm9ybWF0KSwgbG9naWNhbEV4
dGVudC53aWR0aCkpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuaGVpZ2h0IHRvIDEuIgor
ICAgICAgICAgICAgMSwKKyAgICAgICAgICAgIC8vICJTZXQgZXh0ZW50LmRlcHRoT3JBcnJheUxh
eWVycyB0byAxLiIKKyAgICAgICAgICAgIDEgfTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5z
aW9uXzJEOgorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgLy8gIlNldCBleHRlbnQud2lk
dGggdG8gbG9naWNhbEV4dGVudC53aWR0aCByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IG11bHRp
cGxlIG9mIGRlc2NyaXB0b3LigJlzIHRleGVsIGJsb2NrIHdpZHRoLiIKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PHVpbnQzMl90PihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2YodGV4ZWxCbG9ja1dp
ZHRoKG1fZGVzY3JpcHRvci5mb3JtYXQpLCBsb2dpY2FsRXh0ZW50LndpZHRoKSksCisgICAgICAg
ICAgICAvLyAiU2V0IGV4dGVudC5oZWlnaHQgdG8gbG9naWNhbEV4dGVudC5oZWlnaHQgcm91bmRl
ZCB1cCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiBkZXNjcmlwdG9y4oCZcyB0ZXhlbCBibG9j
ayBoZWlnaHQuIgorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZih0ZXhlbEJsb2NrSGVpZ2h0KG1fZGVzY3JpcHRvci5mb3JtYXQpLCBsb2dp
Y2FsRXh0ZW50LmhlaWdodCkpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuZGVwdGhPckFy
cmF5TGF5ZXJzIHRvIDEuIgorICAgICAgICAgICAgMSB9OworICAgIGNhc2UgV0dQVVRleHR1cmVE
aW1lbnNpb25fM0Q6CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAvLyAiU2V0IGV4dGVu
dC53aWR0aCB0byBsb2dpY2FsRXh0ZW50LndpZHRoIHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3Qg
bXVsdGlwbGUgb2YgZGVzY3JpcHRvcuKAmXMgdGV4ZWwgYmxvY2sgd2lkdGguIgorICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZih0ZXhlbEJs
b2NrV2lkdGgobV9kZXNjcmlwdG9yLmZvcm1hdCksIGxvZ2ljYWxFeHRlbnQud2lkdGgpKSwKKyAg
ICAgICAgICAgIC8vICJTZXQgZXh0ZW50LmhlaWdodCB0byBsb2dpY2FsRXh0ZW50LmhlaWdodCBy
b3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIGRlc2NyaXB0b3LigJlzIHRleGVs
IGJsb2NrIGhlaWdodC4iCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHRleGVsQmxvY2tIZWlnaHQobV9kZXNjcmlwdG9yLmZvcm1hdCks
IGxvZ2ljYWxFeHRlbnQuaGVpZ2h0KSksCisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5kZXB0
aE9yQXJyYXlMYXllcnMgdG8gbG9naWNhbEV4dGVudC5oZWlnaHQuIgorICAgICAgICAgICAgbG9n
aWNhbEV4dGVudC5oZWlnaHQgfTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uX0ZvcmNl
MzI6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gV0dQVUV4
dGVudDNEIHsgfTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkdQVQogCiAjcHJhZ21h
IG1hcmsgV0dQVSBTdHVicwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>455819</attachid>
            <date>2022-03-25 20:05:23 -0700</date>
            <delta_ts>2022-03-25 20:14:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-238367-20220325200522.patch</filename>
            <type>text/plain</type>
            <size>71475</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxODQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCmluZGV4IDdmOGVjM2VjN2M3ZWRmMTM5
ZDY3NTM3ZDk5MjYxYjY4NGUyYmQ0M2UuLjEyZTY1YTZmZGZhYTYzYmVlNTU4ZjNkNjkzMTBhNmZh
OGIyOTRkZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMgQEAKKzIwMjItMDMtMjUgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViR1BVXSBJbXBs
ZW1lbnQgcmVzb3VyY2UgY29weWluZyByb3V0aW5lcyBhY2NvcmRpbmcgdG8gdGhlIHNwZWMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzODM2NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
aW1wbGVtZW50cyAzIHJlc291cmNlIGNvcHkgcm91dGluZXM6CisgICAgICAgIC0gY29weUJ1ZmZl
clRvVGV4dHVyZSgpCisgICAgICAgIC0gY29weVRleHR1cmVUb0J1ZmZlcigpCisgICAgICAgIC0g
Y29weVRleHR1cmVUb1RleHR1cmUoKQorICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgYWxs
IDMgYXQgb25jZSwgYmVjYXVzZSB0aGV5IGFsbCB1c2UgdGhlIHNhbWUgc2hhcmVkIGhlbHBlciBm
dW5jdGlvbnMuCisKKyAgICAgICAgVGhlc2UgYXJlIGFjdHVhbGx5IHN1cnByaXNpbmdseSBjb21w
bGljYXRlZCwgZm9yIGEgZmV3IHJlYXNvbnM6CisgICAgICAgIC0gVGV4dHVyZXMgY2FuIGJlIDEt
ZGltZW5zaW9uYWwsIDItZGltZW5zaW9uYWwsIG9yIDMtZGltZW5zaW9uYWwKKyAgICAgICAgLSBU
ZXh0dXJlcyBoYXZlIG1pcG1hcHMsIGFuZCB0aGUgc2l6ZSBvZiBlYWNoIG1pcG1hcCBpcyBkaWZm
ZXJlbnQKKyAgICAgICAgLSBUaGVyZSBhcmUgZGVwdGggdGV4dHVyZXMsIHN0ZW5jaWwgdGV4dHVy
ZXMsIGFuZCBkZXB0aC1zdGVuY2lsIHRleHR1cmVzLCBhbmQgY29weWluZworICAgICAgICAgICAg
ICBoYXMgdG8gd29yayB3aXRoIHRoZSBjb3JyZWN0ICJhc3BlY3QuIgorICAgICAgICAtIERlcGVu
ZGluZyBvbiB0aGUgdGV4dHVyZSBmb3JtYXQsIGFuIGluZGl2aWR1YWwgdGV4ZWwgbWF5IG5vdCBi
ZSBkaXJlY3RseSBhZGRyZXNzYWJsZS4KKyAgICAgICAgICAgICAgQ29tcHJlc3NlZCB0ZXh0dXJl
IGZvcm1hdHMgZW5jb2RlIGFuIGVudGlyZSBibG9jayAoZS5nLiA0eDQgb3IgOHg4KSBvZiBwaXhl
bHMgd2l0aAorICAgICAgICAgICAgICBhIHNpbmdsZSBpbmRpdmlzaWJsZSBjaHVuayBvZiBkYXRh
LgorICAgICAgICAtIENvcHlpbmcgZnJvbSBhIHJlZ2lvbiBvZiBhICJzdWJyZXNvdXJjZSIgdG8g
YSBkaWZmZXJlbnQgcmVnaW9uIG9mIHRoZSBzYW1lICJzdWJyZXNvdXJjZSIKKyAgICAgICAgICAg
ICAgaXMgZm9yYmlkZGVuLiBTbywgd2UgaGF2ZSB0byBoYXZlIGEgY29uY2VwdCBvZiAic3VicmVz
b3VyY2UiIHRvIHZhbGlkYXRlIHRoZXkgYXJlbid0CisgICAgICAgICAgICAgIGludGVyc2VjdGlu
Zy4KKyAgICAgICAgLSBBIHNpbmdsZSBvcGVyYXRpb24gaXMgc3VwcG9zZWQgdG8gYmUgYWJsZSB0
byBjb3B5IG11bHRpcGxlIHNsaWNlcyBvZiBhbiBhcnJheSB0ZXh0dXJlLAorICAgICAgICAgICAg
ICBidXQgTWV0YWwgb25seSBoYXMgZmFjaWxpdGllcyB0byBjb3B5IGEgc2luZ2xlIHNsaWNlIGF0
IGEgdGltZS4gV2UgdGhlcmVmb3JlIGhhdmUgdG8KKyAgICAgICAgICAgICAgY2FsbCBNZXRhbCBp
biBhIGxvb3AgdG8gY29weSBhbGwgdGhlIG5lY2Vzc2FyeSBzbGljZXMuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBsaW5rcyB0byB0aGUgc3BlYyB3aGVyZSByZWxldmFudCwgYW5kIHF1b3RlcyB0aGUg
c3BlYyBpbiBjb21tZW50cyB3aGVyZSByZWxldmFudC4KKworICAgICAgICBUZXN0czogYXBpL29w
ZXJhdGlvbi9jb21tYW5kX2J1ZmZlci9pbWFnZV9jb3B5LnNwZWMudHMKKyAgICAgICAgICAgICAg
IGFwaS92YWxpZGF0aW9uL2VuY29kaW5nL2NtZHMvYnVmZmVyX3RleHR1cmVfY29waWVzLnNwZWMu
dHMKKyAgICAgICAgICAgICAgIGFwaS92YWxpZGF0aW9uL2ltYWdlX2NvcHkvaW1hZ2VfY29weS50
cworCisgICAgICAgICogV2ViR1BVL0JpbmRHcm91cC5tbToKKyAgICAgICAgKFdlYkdQVTo6RGV2
aWNlOjpjcmVhdGVCaW5kR3JvdXApOgorICAgICAgICAqIFdlYkdQVS9Db21tYW5kRW5jb2Rlci5t
bToKKyAgICAgICAgKFdlYkdQVTo6Q29tbWFuZEVuY29kZXI6OmNvcHlCdWZmZXJUb0J1ZmZlcik6
CisgICAgICAgIChXZWJHUFU6OnZhbGlkYXRlSW1hZ2VDb3B5QnVmZmVyKToKKyAgICAgICAgKFdl
YkdQVTo6aW1hZ2VDb3B5VGV4dHVyZVN1YnJlc291cmNlU2l6ZSk6CisgICAgICAgIChXZWJHUFU6
OnZhbGlkYXRlSW1hZ2VDb3B5VGV4dHVyZSk6CisgICAgICAgIChXZWJHUFU6OmlzVmFsaWRJbWFn
ZUNvcHlEZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJHUFU6OnZhbGlkYXRlVGV4dHVyZUNvcHlS
YW5nZSk6CisgICAgICAgIChXZWJHUFU6OnZhbGlkYXRlTGluZWFyVGV4dHVyZURhdGEpOgorICAg
ICAgICAoV2ViR1BVOjp2YWxpZGF0ZUNvcHlCdWZmZXJUb1RleHR1cmUpOgorICAgICAgICAoV2Vi
R1BVOjpDb21tYW5kRW5jb2Rlcjo6Y29weUJ1ZmZlclRvVGV4dHVyZSk6CisgICAgICAgIChXZWJH
UFU6OnZhbGlkYXRlQ29weVRleHR1cmVUb0J1ZmZlcik6CisgICAgICAgIChXZWJHUFU6OkNvbW1h
bmRFbmNvZGVyOjpjb3B5VGV4dHVyZVRvQnVmZmVyKToKKyAgICAgICAgKFdlYkdQVTo6aXNTUkdC
Q29tcGF0aWJsZSk6CisgICAgICAgIChXZWJHUFU6OmFyZUNvcHlDb21wYXRpYmxlKToKKyAgICAg
ICAgKFdlYkdQVTo6dmFsaWRhdGVDb3B5VGV4dHVyZVRvVGV4dHVyZSk6CisgICAgICAgIChXZWJH
UFU6OkNvbW1hbmRFbmNvZGVyOjpjb3B5VGV4dHVyZVRvVGV4dHVyZSk6CisgICAgICAgICogV2Vi
R1BVL0NvbXB1dGVQaXBlbGluZS5tbToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVD
b21wdXRlUGlwZWxpbmUpOgorICAgICAgICAqIFdlYkdQVS9QaXBlbGluZUxheW91dC5tbToKKyAg
ICAgICAgKFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVQaXBlbGluZUxheW91dCk6CisgICAgICAgICog
V2ViR1BVL1NoYWRlck1vZHVsZS5tbToKKyAgICAgICAgKFdlYkdQVTo6ZWFybHlDb21waWxlU2hh
ZGVyTW9kdWxlKToKKyAgICAgICAgKiBXZWJHUFUvVGV4dHVyZS5oOgorICAgICAgICAqIFdlYkdQ
VS9UZXh0dXJlLm1tOgorICAgICAgICAoV2ViR1BVOjpUZXh0dXJlOjppc0RlcHRoT3JTdGVuY2ls
Rm9ybWF0KToKKyAgICAgICAgKFdlYkdQVTo6VGV4dHVyZTo6dGV4ZWxCbG9ja1dpZHRoKToKKyAg
ICAgICAgKFdlYkdQVTo6VGV4dHVyZTo6dGV4ZWxCbG9ja0hlaWdodCk6CisgICAgICAgIChXZWJH
UFU6OlRleHR1cmU6OnRleGVsQmxvY2tTaXplKToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjp2
YWxpZGF0ZUNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViR1BVOjpUZXh0dXJlOjpwaHlzaWNh
bFNpemUpOgorICAgICAgICAoV2ViR1BVOjppc0RlcHRoT3JTdGVuY2lsRm9ybWF0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkdQVTo6dGV4ZWxCbG9ja1dpZHRoKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkdQVTo6dGV4ZWxCbG9ja0hlaWdodCk6IERlbGV0ZWQuCisKIDIwMjItMDMtMjQgIE15bGVz
IEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViR1BVXSBG
aXggdGhlIHdhdGNoT1MgYnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0Jp
bmRHcm91cC5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0JpbmRHcm91cC5tbQppbmRleCA2M2Fl
Y2JhZmQ3Y2FlZTU0MzczYTg1MGE4OTNkMjU0NjBjMzQ0MmMyLi5jZDlmNjA3NjJhMDc1ZDUzOWI5
NjFjYWE2M2YyNDg2MTlmYmIxZjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9C
aW5kR3JvdXAubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQmluZEdyb3VwLm1tCkBAIC01
NSw3ICs1NSw3IEBAIFJlZlB0cjxCaW5kR3JvdXA+IERldmljZTo6Y3JlYXRlQmluZEdyb3VwKGNv
bnN0IFdHUFVCaW5kR3JvdXBEZXNjcmlwdG9yJiBkZXNjcmlwCiAgICAgaWYgKGRlc2NyaXB0b3Iu
bmV4dEluQ2hhaW4pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgY29uc3QgQmluZEdy
b3VwTGF5b3V0JiBiaW5kR3JvdXBMYXlvdXQgPSBXZWJHUFU6OmZyb21BUEkoZGVzY3JpcHRvci5s
YXlvdXQpOworICAgIGNvbnN0IEJpbmRHcm91cExheW91dCYgYmluZEdyb3VwTGF5b3V0ID0gZnJv
bUFQSShkZXNjcmlwdG9yLmxheW91dCk7CiAKICAgICAvLyBGSVhNRShQRVJGT1JNQU5DRSk6IERv
bid0IGFsbG9jYXRlIDMgbmV3IGJ1ZmZlcnMgZm9yIGV2ZXJ5IGJpbmQgZ3JvdXAuCiAgICAgLy8g
SW4gZmFjdCwgZG9uJ3QgZXZlbiBhbGxvY2F0ZSBhIHNpbmdsZSBuZXcgYnVmZmVyIGZvciBldmVy
eSBiaW5kIGdyb3VwLgpAQCAtOTAsMTggKzkwLDE4IEBAIFJlZlB0cjxCaW5kR3JvdXA+IERldmlj
ZTo6Y3JlYXRlQmluZEdyb3VwKGNvbnN0IFdHUFVCaW5kR3JvdXBEZXNjcmlwdG9yJiBkZXNjcmlw
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBpZiAoYnVmZmVySXNQcmVz
ZW50KSB7Ci0gICAgICAgICAgICBpZDxNVExCdWZmZXI+IGJ1ZmZlciA9IFdlYkdQVTo6ZnJvbUFQ
SShlbnRyeS5idWZmZXIpLmJ1ZmZlcigpOworICAgICAgICAgICAgaWQ8TVRMQnVmZmVyPiBidWZm
ZXIgPSBmcm9tQVBJKGVudHJ5LmJ1ZmZlcikuYnVmZmVyKCk7CiAgICAgICAgICAgICAvLyBGSVhN
RTogVXNlIGNoZWNrZWQgY2FzdHMuCiAgICAgICAgICAgICBbdmVydGV4QXJndW1lbnRFbmNvZGVy
IHNldEJ1ZmZlcjpidWZmZXIgb2Zmc2V0OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KGVudHJ5Lm9m
ZnNldCkgYXRJbmRleDplbnRyeS5iaW5kaW5nXTsKICAgICAgICAgICAgIFtmcmFnbWVudEFyZ3Vt
ZW50RW5jb2RlciBzZXRCdWZmZXI6YnVmZmVyIG9mZnNldDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2Vy
PihlbnRyeS5vZmZzZXQpIGF0SW5kZXg6ZW50cnkuYmluZGluZ107CiAgICAgICAgICAgICBbY29t
cHV0ZUFyZ3VtZW50RW5jb2RlciBzZXRCdWZmZXI6YnVmZmVyIG9mZnNldDpzdGF0aWNfY2FzdDxO
U1VJbnRlZ2VyPihlbnRyeS5vZmZzZXQpIGF0SW5kZXg6ZW50cnkuYmluZGluZ107CiAgICAgICAg
IH0gZWxzZSBpZiAoc2FtcGxlcklzUHJlc2VudCkgewotICAgICAgICAgICAgaWQ8TVRMU2FtcGxl
clN0YXRlPiBzYW1wbGVyID0gV2ViR1BVOjpmcm9tQVBJKGVudHJ5LnNhbXBsZXIpLnNhbXBsZXJT
dGF0ZSgpOworICAgICAgICAgICAgaWQ8TVRMU2FtcGxlclN0YXRlPiBzYW1wbGVyID0gZnJvbUFQ
SShlbnRyeS5zYW1wbGVyKS5zYW1wbGVyU3RhdGUoKTsKICAgICAgICAgICAgIFt2ZXJ0ZXhBcmd1
bWVudEVuY29kZXIgc2V0U2FtcGxlclN0YXRlOnNhbXBsZXIgYXRJbmRleDplbnRyeS5iaW5kaW5n
XTsKICAgICAgICAgICAgIFtmcmFnbWVudEFyZ3VtZW50RW5jb2RlciBzZXRTYW1wbGVyU3RhdGU6
c2FtcGxlciBhdEluZGV4OmVudHJ5LmJpbmRpbmddOwogICAgICAgICAgICAgW2NvbXB1dGVBcmd1
bWVudEVuY29kZXIgc2V0U2FtcGxlclN0YXRlOnNhbXBsZXIgYXRJbmRleDplbnRyeS5iaW5kaW5n
XTsKICAgICAgICAgfSBlbHNlIGlmICh0ZXh0dXJlVmlld0lzUHJlc2VudCkgewotICAgICAgICAg
ICAgaWQ8TVRMVGV4dHVyZT4gdGV4dHVyZSA9IFdlYkdQVTo6ZnJvbUFQSShlbnRyeS50ZXh0dXJl
VmlldykudGV4dHVyZSgpOworICAgICAgICAgICAgaWQ8TVRMVGV4dHVyZT4gdGV4dHVyZSA9IGZy
b21BUEkoZW50cnkudGV4dHVyZVZpZXcpLnRleHR1cmUoKTsKICAgICAgICAgICAgIFt2ZXJ0ZXhB
cmd1bWVudEVuY29kZXIgc2V0VGV4dHVyZTp0ZXh0dXJlIGF0SW5kZXg6ZW50cnkuYmluZGluZ107
CiAgICAgICAgICAgICBbZnJhZ21lbnRBcmd1bWVudEVuY29kZXIgc2V0VGV4dHVyZTp0ZXh0dXJl
IGF0SW5kZXg6ZW50cnkuYmluZGluZ107CiAgICAgICAgICAgICBbY29tcHV0ZUFyZ3VtZW50RW5j
b2RlciBzZXRUZXh0dXJlOnRleHR1cmUgYXRJbmRleDplbnRyeS5iaW5kaW5nXTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLm1tIGIvU291cmNlL1dlYkdQ
VS9XZWJHUFUvQ29tbWFuZEVuY29kZXIubW0KaW5kZXggYWU0YmFjNjA4NWI0YzVmMmVlNGNkOWM3
YzNhM2UwYjAzZDc2ZDc5Mi4uMzNhODRmMzgyMjBiN2ZkYmY2NzViNWU2NGU5ZWVlNjFiMTNjM2Yx
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFuZEVuY29kZXIubW0KKysr
IGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFuZEVuY29kZXIubW0KQEAgLTMzLDYgKzMzLDcg
QEAKICNpbXBvcnQgIkRldmljZS5oIgogI2ltcG9ydCAiUXVlcnlTZXQuaCIKICNpbXBvcnQgIlJl
bmRlclBhc3NFbmNvZGVyLmgiCisjaW1wb3J0ICJUZXh0dXJlLmgiCiAKIG5hbWVzcGFjZSBXZWJH
UFUgewogCkBAIC0xNTUsMjggKzE1NiwxMDkyIEBAIHZvaWQgQ29tbWFuZEVuY29kZXI6OmNvcHlC
dWZmZXJUb0J1ZmZlcihjb25zdCBCdWZmZXImIHNvdXJjZSwgdWludDY0X3Qgc291cmNlT2ZmCiAK
ICAgICBlbnN1cmVCbGl0Q29tbWFuZEVuY29kZXIoKTsKIAotICAgIFttX2JsaXRDb21tYW5kRW5j
b2RlciBjb3B5RnJvbUJ1ZmZlcjpzb3VyY2UuYnVmZmVyKCkgc291cmNlT2Zmc2V0OnN0YXRpY19j
YXN0PE5TVUludGVnZXI+KHNvdXJjZU9mZnNldCkgdG9CdWZmZXI6ZGVzdGluYXRpb24uYnVmZmVy
KCkgZGVzdGluYXRpb25PZmZzZXQ6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oZGVzdGluYXRpb25P
ZmZzZXQpIHNpemU6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2l6ZSldOworICAgIFttX2JsaXRD
b21tYW5kRW5jb2RlcgorICAgICAgICBjb3B5RnJvbUJ1ZmZlcjpzb3VyY2UuYnVmZmVyKCkKKyAg
ICAgICAgc291cmNlT2Zmc2V0OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNvdXJjZU9mZnNldCkK
KyAgICAgICAgdG9CdWZmZXI6ZGVzdGluYXRpb24uYnVmZmVyKCkKKyAgICAgICAgZGVzdGluYXRp
b25PZmZzZXQ6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oZGVzdGluYXRpb25PZmZzZXQpCisgICAg
ICAgIHNpemU6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2l6ZSldOworfQorCitzdGF0aWMgYm9v
bCB2YWxpZGF0ZUltYWdlQ29weUJ1ZmZlcihjb25zdCBXR1BVSW1hZ2VDb3B5QnVmZmVyJiBpbWFn
ZUNvcHlCdWZmZXIpCit7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8j
YWJzdHJhY3Qtb3BkZWYtdmFsaWRhdGluZy1ncHVpbWFnZWNvcHlidWZmZXIKKworICAgIC8vIEZJ
WE1FOiAiaW1hZ2VDb3B5QnVmZmVyLmJ1ZmZlciBtdXN0IGJlIGEgdmFsaWQgR1BVQnVmZmVyLiIK
KworICAgIC8vICJpbWFnZUNvcHlCdWZmZXIuYnl0ZXNQZXJSb3cgbXVzdCBiZSBhIG11bHRpcGxl
IG9mIDI1Ni4iCisgICAgaWYgKGltYWdlQ29weUJ1ZmZlci5sYXlvdXQuYnl0ZXNQZXJSb3cgJSAy
NTYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3Rh
dGljIFdHUFVFeHRlbnQzRCBpbWFnZUNvcHlUZXh0dXJlU3VicmVzb3VyY2VTaXplKGNvbnN0IFdH
UFVJbWFnZUNvcHlUZXh0dXJlJiBpbWFnZUNvcHlUZXh0dXJlKQoreworICAgIC8vIGh0dHBzOi8v
Z3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2ltYWdlY29weXRleHR1cmUtc3VicmVzb3VyY2Utc2l6
ZQorCisgICAgLy8gIkl0cyB3aWR0aCwgaGVpZ2h0IGFuZCBkZXB0aE9yQXJyYXlMYXllcnMgYXJl
IHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgZGVwdGgsIHJlc3BlY3RpdmVseSwgb2YgdGhlIHBoeXNp
Y2FsIHNpemUgb2YgaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlIHN1YnJlc291cmNlIGF0IG1pcG1h
cCBsZXZlbCBpbWFnZUNvcHlUZXh0dXJlLm1pcExldmVsLiIKKyAgICByZXR1cm4gZnJvbUFQSShp
bWFnZUNvcHlUZXh0dXJlLnRleHR1cmUpLnBoeXNpY2FsVGV4dHVyZVN1YnJlc291cmNlRXh0ZW50
KGltYWdlQ29weVRleHR1cmUubWlwTGV2ZWwpOworfQorCitzdGF0aWMgYm9vbCB2YWxpZGF0ZUlt
YWdlQ29weVRleHR1cmUoY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUmIGltYWdlQ29weVRleHR1
cmUsIGNvbnN0IFdHUFVFeHRlbnQzRCYgY29weVNpemUpCit7CisgICAgLy8gaHR0cHM6Ly9ncHV3
ZWIuZ2l0aHViLmlvL2dwdXdlYi8jYWJzdHJhY3Qtb3BkZWYtdmFsaWRhdGluZy1ncHVpbWFnZWNv
cHl0ZXh0dXJlCisKKyAgICAvLyAiYmxvY2tXaWR0aCBiZSB0aGUgdGV4ZWwgYmxvY2sgd2lkdGgg
b2YgaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlLltbZGVzY3JpcHRvcl1dLmZvcm1hdC4iCisgICAg
YXV0byBibG9ja1dpZHRoID0gVGV4dHVyZTo6dGV4ZWxCbG9ja1dpZHRoKGZyb21BUEkoaW1hZ2VD
b3B5VGV4dHVyZS50ZXh0dXJlKS5kZXNjcmlwdG9yKCkuZm9ybWF0KTsKKworICAgIC8vICJibG9j
a0hlaWdodCBiZSB0aGUgdGV4ZWwgYmxvY2sgaGVpZ2h0IG9mIGltYWdlQ29weVRleHR1cmUudGV4
dHVyZS5bW2Rlc2NyaXB0b3JdXS5mb3JtYXQuIgorICAgIGF1dG8gYmxvY2tIZWlnaHQgPSBUZXh0
dXJlOjp0ZXhlbEJsb2NrSGVpZ2h0KGZyb21BUEkoaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlKS5k
ZXNjcmlwdG9yKCkuZm9ybWF0KTsKKworICAgIC8vIEZJWE1FOiAiaW1hZ2VDb3B5VGV4dHVyZS50
ZXh0dXJlIG11c3QgYmUgYSB2YWxpZCBHUFVUZXh0dXJlLiIKKworICAgIC8vICJpbWFnZUNvcHlU
ZXh0dXJlLm1pcExldmVsIG11c3QgYmUgbGVzcyB0aGFuIHRoZSBbW2Rlc2NyaXB0b3JdXS5taXBM
ZXZlbENvdW50IG9mIGltYWdlQ29weVRleHR1cmUudGV4dHVyZS4iCisgICAgaWYgKGltYWdlQ29w
eVRleHR1cmUubWlwTGV2ZWwgPj0gZnJvbUFQSShpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUpLmRl
c2NyaXB0b3IoKS5taXBMZXZlbENvdW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyAiaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4ueCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgYmxvY2tX
aWR0aC4iCisgICAgaWYgKGltYWdlQ29weVRleHR1cmUub3JpZ2luLnggJSBibG9ja1dpZHRoKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4u
eSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgYmxvY2tIZWlnaHQuIgorICAgIGlmIChpbWFnZUNvcHlU
ZXh0dXJlLm9yaWdpbi55ICUgYmxvY2tIZWlnaHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIC8vICJpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uZm9ybWF0IGlz
IGEgZGVwdGgtc3RlbmNpbCBmb3JtYXQuIgorICAgIC8vICJpbWFnZUNvcHlUZXh0dXJlLnRleHR1
cmUuW1tkZXNjcmlwdG9yXV0uc2FtcGxlQ291bnQgaXMgZ3JlYXRlciB0aGFuIDEuIgorICAgIGlm
IChUZXh0dXJlOjppc0RlcHRoT3JTdGVuY2lsRm9ybWF0KGZyb21BUEkoaW1hZ2VDb3B5VGV4dHVy
ZS50ZXh0dXJlKS5kZXNjcmlwdG9yKCkuZm9ybWF0KQorICAgICAgICB8fCBmcm9tQVBJKGltYWdl
Q29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLnNhbXBsZUNvdW50ID4gMSkgeworICAg
ICAgICAvLyAiVGhlIGltYWdlQ29weVRleHR1cmUgc3VicmVzb3VyY2Ugc2l6ZSBvZiBpbWFnZUNv
cHlUZXh0dXJlIGlzIGVxdWFsIHRvIGNvcHlTaXplIgorICAgICAgICBhdXRvIHN1YnJlc291cmNl
U2l6ZSA9IGltYWdlQ29weVRleHR1cmVTdWJyZXNvdXJjZVNpemUoaW1hZ2VDb3B5VGV4dHVyZSk7
CisgICAgICAgIGlmIChzdWJyZXNvdXJjZVNpemUud2lkdGggIT0gY29weVNpemUud2lkdGgKKyAg
ICAgICAgICAgIHx8IHN1YnJlc291cmNlU2l6ZS5oZWlnaHQgIT0gY29weVNpemUuaGVpZ2h0Cisg
ICAgICAgICAgICB8fCBzdWJyZXNvdXJjZVNpemUuZGVwdGhPckFycmF5TGF5ZXJzICE9IGNvcHlT
aXplLmRlcHRoT3JBcnJheUxheWVycykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgaXNWYWxpZEltYWdlQ29weURl
c3RpbmF0aW9uKFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCwgV0dQVVRleHR1cmVBc3BlY3QgYXNw
ZWN0KQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2RlcHRoLWZv
cm1hdHMKKworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9VbmRlZmluZWQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SOFVub3JtOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfUjhTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4
VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4U2ludDoKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X1IxNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMTZTaW50
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjE2RmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9SRzhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFNub3Jt
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkc4VWludDoKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X1JHOFNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMzJGbG9hdDoK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IzMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9SMzJTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkcxNlVpbnQ6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X1JHMTZGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4VW5vcm06
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFVub3JtU3JnYjoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X1JHQkE4U25vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9S
R0JBOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFNpbnQ6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9CR1JBOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfQkdSQThVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0IxMEEyVW5v
cm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzExQjEwVWZsb2F0OgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfUkdCOUU1VWZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUkczMkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkczMlVpbnQ6CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzMyU2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X1JHQkExNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMTZTaW50Ogor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTE2RmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9SR0JBMzJGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkEz
MlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJTaW50OgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9TdGVuY2lsODoKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMTZVbm9ybToKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDI0UGx1czoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFBsdXNTdGVuY2lsODoK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRVbm9ybVN0ZW5jaWw4OgorICAgICAg
ICByZXR1cm4gYXNwZWN0ID09IFdHUFVUZXh0dXJlQXNwZWN0X1N0ZW5jaWxPbmx5OworICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDMyRmxvYXRTdGVuY2lsODoKKyAgICAg
ICAgcmV0dXJuIGFzcGVjdCA9PSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25seTsKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDMVJHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0JDMVJHQkFVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzJS
R0JBVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzJSR0JBVW5vcm1TcmdiOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMzUkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfQkMzUkdCQVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0JDNFJVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNFJTbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNVJHVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9CQzVSR1Nub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM2SFJHQlVmbG9h
dDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNkhSR0JGbG9hdDoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0JDN1JHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0JDN1JHQkFVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOFVu
b3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhVbm9ybVNyZ2I6CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOEExVW5vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9FVEMyUkdCOEExVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfRVRDMlJHQkE4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCQThV
bm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FQUNSMTFVbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1IxMVNub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfRUFDUkcxMVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUkcxMVNu
b3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzR4NFVub3JtOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfQVNUQzR4NFVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0FTVEM1eDRVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM1eDRV
bm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg1VW5vcm06CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg1VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzZ4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNU
QzZ4NVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDZVbm9ybToK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDZVbm9ybVNyZ2I6CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg1VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9BU1RDOHg1VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NlVu
b3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NlVub3JtU3JnYjoKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0FTVEM4eDhVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RD
MTB4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDVVbm9ybVNyZ2I6
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NlVub3JtOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfQVNUQzEweDZVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9BU1RDMTB4OFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDhV
bm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4MTBVbm9ybToKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHgxMFVub3JtU3JnYjoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfQVNUQzEyeDEwVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEy
eDEyVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTJVbm9ybVNyZ2I6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0ZvcmNl
MzI6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCitzdGF0aWMgYm9vbCB2YWxpZGF0ZVRleHR1cmVDb3B5UmFuZ2UoY29uc3Qg
V0dQVUltYWdlQ29weVRleHR1cmUmIGltYWdlQ29weVRleHR1cmUsIGNvbnN0IFdHUFVFeHRlbnQz
RCYgY29weVNpemUpCit7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8j
dmFsaWRhdGluZy10ZXh0dXJlLWNvcHktcmFuZ2UKKworICAgIC8vICJMZXQgYmxvY2tXaWR0aCBi
ZSB0aGUgdGV4ZWwgYmxvY2sgd2lkdGggb2YgaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlLltbZGVz
Y3JpcHRvcl1dLmZvcm1hdC4iCisgICAgYXV0byBibG9ja1dpZHRoID0gVGV4dHVyZTo6dGV4ZWxC
bG9ja1dpZHRoKGZyb21BUEkoaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlKS5kZXNjcmlwdG9yKCku
Zm9ybWF0KTsKKworICAgIC8vICJMZXQgYmxvY2tIZWlnaHQgYmUgdGhlIHRleGVsIGJsb2NrIGhl
aWdodCBvZiBpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uZm9ybWF0LiIK
KyAgICBhdXRvIGJsb2NrSGVpZ2h0ID0gVGV4dHVyZTo6dGV4ZWxCbG9ja0hlaWdodChmcm9tQVBJ
KGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7CisKKyAgICAv
LyAiTGV0IHN1YnJlc291cmNlU2l6ZSBiZSB0aGUgaW1hZ2VDb3B5VGV4dHVyZSBzdWJyZXNvdXJj
ZSBzaXplIG9mIGltYWdlQ29weVRleHR1cmUuIgorICAgIGF1dG8gc3VicmVzb3VyY2VTaXplID0g
aW1hZ2VDb3B5VGV4dHVyZVN1YnJlc291cmNlU2l6ZShpbWFnZUNvcHlUZXh0dXJlKTsKKworICAg
IC8vICIoaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4ueCArIGNvcHlTaXplLndpZHRoKSDiiaQgc3Vi
cmVzb3VyY2VTaXplLndpZHRoIgorICAgIC8vIEZJWE1FOiBVc2VkIGNoZWNrZWQgYXJpdGhtZXRp
YworICAgIGlmICgoaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4ueCArIGNvcHlTaXplLndpZHRoKSA+
IHN1YnJlc291cmNlU2l6ZS53aWR0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
IihpbWFnZUNvcHlUZXh0dXJlLm9yaWdpbi55ICsgY29weVNpemUuaGVpZ2h0KSDiiaQgc3VicmVz
b3VyY2VTaXplLmhlaWdodCIKKyAgICAvLyBGSVhNRTogVXNlZCBjaGVja2VkIGFyaXRobWV0aWMK
KyAgICBpZiAoKGltYWdlQ29weVRleHR1cmUub3JpZ2luLnkgKyBjb3B5U2l6ZS5oZWlnaHQpID4g
c3VicmVzb3VyY2VTaXplLmhlaWdodCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
IihpbWFnZUNvcHlUZXh0dXJlLm9yaWdpbi56ICsgY29weVNpemUuZGVwdGhPckFycmF5TGF5ZXJz
KSDiiaQgc3VicmVzb3VyY2VTaXplLmRlcHRoT3JBcnJheUxheWVycyIKKyAgICAvLyBGSVhNRTog
VXNlZCBjaGVja2VkIGFyaXRobWV0aWMKKyAgICBpZiAoKGltYWdlQ29weVRleHR1cmUub3JpZ2lu
LnogKyBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMpID4gc3VicmVzb3VyY2VTaXplLmRlcHRo
T3JBcnJheUxheWVycykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gImNvcHlTaXpl
LndpZHRoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBibG9ja1dpZHRoLiIKKyAgICBpZiAoY29weVNp
emUud2lkdGggJSBibG9ja1dpZHRoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAi
Y29weVNpemUuaGVpZ2h0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiBibG9ja0hlaWdodC4iCisgICAg
aWYgKGNvcHlTaXplLmhlaWdodCAlIGJsb2NrSGVpZ2h0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgdmFsaWRhdGVMaW5lYXJUZXh0
dXJlRGF0YShjb25zdCBXR1BVVGV4dHVyZURhdGFMYXlvdXQmIGxheW91dCwgdWludDY0X3QgYnl0
ZVNpemUsIFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCwgV0dQVUV4dGVudDNEIGNvcHlFeHRlbnQp
Cit7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jYWJzdHJhY3Qtb3Bk
ZWYtdmFsaWRhdGluZy1saW5lYXItdGV4dHVyZS1kYXRhCisKKyAgICAvLyAiTGV0IGJsb2NrV2lk
dGgsIGJsb2NrSGVpZ2h0LCBhbmQgYmxvY2tTaXplIGJlIHRoZSB0ZXhlbCBibG9jayB3aWR0aCwg
aGVpZ2h0LCBhbmQgc2l6ZSBvZiBmb3JtYXQuIgorICAgIGF1dG8gYmxvY2tXaWR0aCA9IFRleHR1
cmU6OnRleGVsQmxvY2tXaWR0aChmb3JtYXQpOworICAgIGF1dG8gYmxvY2tIZWlnaHQgPSBUZXh0
dXJlOjp0ZXhlbEJsb2NrSGVpZ2h0KGZvcm1hdCk7CisgICAgYXV0byBibG9ja1NpemUgPSBUZXh0
dXJlOjp0ZXhlbEJsb2NrU2l6ZShmb3JtYXQpOworICAgIGlmICghYmxvY2tTaXplKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiSXQgaXMgYXNzdW1lZCB0aGF0IGNvcHlFeHRlbnQu
d2lkdGggaXMgYSBtdWx0aXBsZSBvZiBibG9ja1dpZHRoIGFuZCBjb3B5RXh0ZW50LmhlaWdodCBp
cyBhIG11bHRpcGxlIG9mIGJsb2NrSGVpZ2h0LiIKKworICAgIC8vICJ3aWR0aEluQmxvY2tzIGJl
IGNvcHlFeHRlbnQud2lkdGggw7cgYmxvY2tXaWR0aC4iCisgICAgYXV0byB3aWR0aEluQmxvY2tz
ID0gY29weUV4dGVudC53aWR0aCAvIGJsb2NrV2lkdGg7CisKKyAgICAvLyAiaGVpZ2h0SW5CbG9j
a3MgYmUgY29weUV4dGVudC5oZWlnaHQgw7cgYmxvY2tIZWlnaHQuIgorICAgIGF1dG8gaGVpZ2h0
SW5CbG9ja3MgPSBjb3B5RXh0ZW50LmhlaWdodCAvIGJsb2NrSGVpZ2h0OworCisgICAgLy8gImJ5
dGVzSW5MYXN0Um93IGJlIGJsb2NrU2l6ZSDDlyB3aWR0aEluQmxvY2tzLiIKKyAgICAvLyBGSVhN
RTogVXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KKyAgICBhdXRvIGJ5dGVzSW5MYXN0Um93ID0gKmJs
b2NrU2l6ZSAqIHdpZHRoSW5CbG9ja3M7CisKKyAgICAvLyAiSWYgaGVpZ2h0SW5CbG9ja3MgPiAx
IgorICAgIGlmIChoZWlnaHRJbkJsb2NrcyA+IDEpIHsKKyAgICAgICAgLy8gImxheW91dC5ieXRl
c1BlclJvdyBtdXN0IGJlIHNwZWNpZmllZC4iCisgICAgICAgIGlmIChsYXlvdXQuYnl0ZXNQZXJS
b3cgPT0gV0dQVV9DT1BZX1NUUklERV9VTkRFRklORUQpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgLy8gIklmIGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4g
MSIKKyAgICBpZiAoY29weUV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgPiAxKSB7CisgICAgICAg
IC8vICJsYXlvdXQuYnl0ZXNQZXJSb3cgYW5kIGxheW91dC5yb3dzUGVySW1hZ2UgbXVzdCBiZSBz
cGVjaWZpZWQuIgorICAgICAgICBpZiAobGF5b3V0LmJ5dGVzUGVyUm93ID09IFdHUFVfQ09QWV9T
VFJJREVfVU5ERUZJTkVEIHx8IGxheW91dC5yb3dzUGVySW1hZ2UgPT0gV0dQVV9DT1BZX1NUUklE
RV9VTkRFRklORUQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8g
IklmIHNwZWNpZmllZCIKKyAgICBpZiAobGF5b3V0LmJ5dGVzUGVyUm93ICE9IFdHUFVfQ09QWV9T
VFJJREVfVU5ERUZJTkVEKSB7CisgICAgICAgIC8vICJsYXlvdXQuYnl0ZXNQZXJSb3cgbXVzdCBi
ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYnl0ZXNJbkxhc3RSb3cuIgorICAgICAgICBpZiAo
bGF5b3V0LmJ5dGVzUGVyUm93IDw9IGJ5dGVzSW5MYXN0Um93KQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIC8vICJJZiBzcGVjaWZpZWQiCisgICAgaWYgKGxheW91dC5y
b3dzUGVySW1hZ2UgIT0gV0dQVV9DT1BZX1NUUklERV9VTkRFRklORUQpIHsKKyAgICAgICAgLy8g
ImxheW91dC5yb3dzUGVySW1hZ2UgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gaGVp
Z2h0SW5CbG9ja3MuIgorICAgICAgICBpZiAobGF5b3V0LnJvd3NQZXJJbWFnZSA8IGhlaWdodElu
QmxvY2tzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJMZXQg
cmVxdWlyZWRCeXRlc0luQ29weSBiZSAwLiIKKyAgICBhdXRvIHJlcXVpcmVkQnl0ZXNJbkNvcHkg
PSAwOworCisgICAgLy8gIklmIGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMToiCisg
ICAgaWYgKGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMSkgeworICAgICAgICAvLyAi
TGV0IGJ5dGVzUGVySW1hZ2UgYmUgbGF5b3V0LmJ5dGVzUGVyUm93IMOXIGxheW91dC5yb3dzUGVy
SW1hZ2UuIgorICAgICAgICAvLyBGSVhNRTogVXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KKyAgICAg
ICAgYXV0byBieXRlc1BlckltYWdlID0gbGF5b3V0LmJ5dGVzUGVyUm93ICogbGF5b3V0LnJvd3NQ
ZXJJbWFnZTsKKworICAgICAgICAvLyAiTGV0IGJ5dGVzQmVmb3JlTGFzdEltYWdlIGJlIGJ5dGVz
UGVySW1hZ2Ugw5cgKGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzIOKIkiAxKS4iCisgICAg
ICAgIGF1dG8gYnl0ZXNCZWZvcmVMYXN0SW1hZ2UgPSBieXRlc1BlckltYWdlICogKGNvcHlFeHRl
bnQuZGVwdGhPckFycmF5TGF5ZXJzIC0gMSk7CisKKyAgICAgICAgLy8gIkFkZCBieXRlc0JlZm9y
ZUxhc3RJbWFnZSB0byByZXF1aXJlZEJ5dGVzSW5Db3B5LiIKKyAgICAgICAgcmVxdWlyZWRCeXRl
c0luQ29weSArPSBieXRlc0JlZm9yZUxhc3RJbWFnZTsKKyAgICB9CisKKyAgICAvLyAiSWYgY29w
eUV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgPiAwOiIKKyAgICBpZiAoY29weUV4dGVudC5kZXB0
aE9yQXJyYXlMYXllcnMgPiAwKSB7CisgICAgICAgIC8vICJJZiBoZWlnaHRJbkJsb2NrcyA+IDEi
CisgICAgICAgIGlmIChoZWlnaHRJbkJsb2NrcyA+IDEpIHsKKyAgICAgICAgICAgIC8vICJhZGQg
bGF5b3V0LmJ5dGVzUGVyUm93IMOXIChoZWlnaHRJbkJsb2NrcyDiiJIgMSkgdG8gcmVxdWlyZWRC
eXRlc0luQ29weS4iCisgICAgICAgICAgICByZXF1aXJlZEJ5dGVzSW5Db3B5ICs9IGxheW91dC5i
eXRlc1BlclJvdyAqIChoZWlnaHRJbkJsb2NrcyAtIDEpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gIklmIGhlaWdodEluQmxvY2tzID4gMCIKKyAgICAgICAgaWYgKGhlaWdodEluQmxvY2tzID4g
MCkgeworICAgICAgICAgICAgLy8gImFkZCBieXRlc0luTGFzdFJvdyB0byByZXF1aXJlZEJ5dGVz
SW5Db3B5LiIKKyAgICAgICAgICAgIHJlcXVpcmVkQnl0ZXNJbkNvcHkgKz0gYnl0ZXNJbkxhc3RS
b3c7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAiRmFpbCBpZiB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlIG5vdCBzYXRpc2ZpZWQ6IgorICAgIC8vICJsYXlvdXQub2Zmc2V0ICsgcmVx
dWlyZWRCeXRlc0luQ29weSDiiaQgYnl0ZVNpemUuIgorICAgIGlmIChsYXlvdXQub2Zmc2V0ICsg
cmVxdWlyZWRCeXRlc0luQ29weSA+IGJ5dGVTaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgdmFsaWRhdGVDb3B5QnVmZmVyVG9U
ZXh0dXJlKGNvbnN0IFdHUFVJbWFnZUNvcHlCdWZmZXImIHNvdXJjZSwgY29uc3QgV0dQVUltYWdl
Q29weVRleHR1cmUmIGRlc3RpbmF0aW9uLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQor
eworICAgIC8vICJMZXQgZHN0VGV4dHVyZURlc2MgYmUgZGVzdGluYXRpb24udGV4dHVyZS5bW2Rl
c2NyaXB0b3JdXS4iCisgICAgY29uc3QgYXV0byYgZHN0VGV4dHVyZURlc2MgPSBmcm9tQVBJKGRl
c3RpbmF0aW9uLnRleHR1cmUpLmRlc2NyaXB0b3IoKTsKKworICAgIC8vICJ2YWxpZGF0aW5nIEdQ
VUltYWdlQ29weUJ1ZmZlcihzb3VyY2UpIHJldHVybnMgdHJ1ZS4iCisgICAgaWYgKCF2YWxpZGF0
ZUltYWdlQ29weUJ1ZmZlcihzb3VyY2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyAic291cmNlLmJ1ZmZlci5bW3VzYWdlXV0gY29udGFpbnMgQ09QWV9TUkMuIgorICAgIGlmICgh
KGZyb21BUEkoc291cmNlLmJ1ZmZlcikudXNhZ2UoKSAmIFdHUFVCdWZmZXJVc2FnZV9Db3B5U3Jj
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gInZhbGlkYXRpbmcgR1BVSW1hZ2VD
b3B5VGV4dHVyZShkZXN0aW5hdGlvbiwgY29weVNpemUpIHJldHVybnMgdHJ1ZS4iCisgICAgaWYg
KCF2YWxpZGF0ZUltYWdlQ29weVRleHR1cmUoZGVzdGluYXRpb24sIGNvcHlTaXplKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gImRzdFRleHR1cmVEZXNjLnVzYWdlIGNvbnRhaW5z
IENPUFlfRFNULiIKKyAgICBpZiAoIShkc3RUZXh0dXJlRGVzYy51c2FnZSAmIFdHUFVUZXh0dXJl
VXNhZ2VfQ29weURzdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJkc3RUZXh0
dXJlRGVzYy5zYW1wbGVDb3VudCBpcyAxLiIKKyAgICBpZiAoZHN0VGV4dHVyZURlc2Muc2FtcGxl
Q291bnQgIT0gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gIklmIGRzdFRleHR1
cmVEZXNjLmZvcm1hdCBpcyBhIGRlcHRoLW9yLXN0ZW5jaWwgZm9ybWF0OiIKKyAgICBpZiAoVGV4
dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChkc3RUZXh0dXJlRGVzYy5mb3JtYXQpKSB7Cisg
ICAgICAgIC8vICJkZXN0aW5hdGlvbi5hc3BlY3QgbXVzdCByZWZlciB0byBhIHNpbmdsZSBhc3Bl
Y3Qgb2YgZHN0VGV4dHVyZURlc2MuZm9ybWF0IgorICAgICAgICBXR1BVVGV4dHVyZUZvcm1hdCBz
aW5nbGVBc3BlY3RGb3JtYXQgPSBXR1BVVGV4dHVyZUZvcm1hdF9VbmRlZmluZWQ7CisgICAgICAg
IHN3aXRjaCAoZGVzdGluYXRpb24uYXNwZWN0KSB7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVB
c3BlY3RfQWxsOgorICAgICAgICAgICAgaWYgKGF1dG8gc3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQg
PSBUZXh0dXJlOjpzdGVuY2lsT25seUFzcGVjdEZvcm1hdChkc3RUZXh0dXJlRGVzYy5mb3JtYXQp
KQorICAgICAgICAgICAgICAgIHNpbmdsZUFzcGVjdEZvcm1hdCA9ICpzdGVuY2lsT25seUFzcGVj
dEZvcm1hdDsKKyAgICAgICAgICAgIGlmIChhdXRvIGRlcHRoT25seUFzcGVjdEZvcm1hdCA9IFRl
eHR1cmU6OmRlcHRoT25seUFzcGVjdEZvcm1hdChkc3RUZXh0dXJlRGVzYy5mb3JtYXQpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHNpbmdsZUFzcGVjdEZvcm1hdCkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHNpbmdsZUFzcGVjdEZvcm1hdCA9ICpk
ZXB0aE9ubHlBc3BlY3RGb3JtYXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25seToKKyAgICAgICAgICAg
IGlmIChhdXRvIHN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0ID0gVGV4dHVyZTo6c3RlbmNpbE9ubHlB
c3BlY3RGb3JtYXQoZHN0VGV4dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAgICAgICAgICBzaW5n
bGVBc3BlY3RGb3JtYXQgPSAqc3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQ7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9EZXB0aE9ubHk6CisgICAgICAg
ICAgICBpZiAoYXV0byBkZXB0aE9ubHlBc3BlY3RGb3JtYXQgPSBUZXh0dXJlOjpkZXB0aE9ubHlB
c3BlY3RGb3JtYXQoZHN0VGV4dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAgICAgICAgICBzaW5n
bGVBc3BlY3RGb3JtYXQgPSAqZGVwdGhPbmx5QXNwZWN0Rm9ybWF0OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRm9yY2UzMjoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaW5nbGVBc3BlY3RGb3Jt
YXQgPT0gV0dQVVRleHR1cmVGb3JtYXRfVW5kZWZpbmVkKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIC8vICJhbmQgdGhhdCBhc3BlY3QgbXVzdCBiZSBhIHZhbGlkIGltYWdl
IGNvcHkgZGVzdGluYXRpb24gYWNjb3JkaW5nIHRvIMKn4oCvMjUuMS4yIERlcHRoLXN0ZW5jaWwg
Zm9ybWF0cy4iCisgICAgICAgIGlmICghaXNWYWxpZEltYWdlQ29weURlc3RpbmF0aW9uKGRzdFRl
eHR1cmVEZXNjLmZvcm1hdCwgZGVzdGluYXRpb24uYXNwZWN0KSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyAidmFsaWRhdGluZyB0ZXh0dXJlIGNvcHkgcmFuZ2Uo
ZGVzdGluYXRpb24sIGNvcHlTaXplKSByZXR1cm4gdHJ1ZS4iCisgICAgaWYgKCF2YWxpZGF0ZVRl
eHR1cmVDb3B5UmFuZ2UoZGVzdGluYXRpb24sIGNvcHlTaXplKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gIklmIGRzdFRleHR1cmVEZXNjLmZvcm1hdCBpcyBub3QgYSBkZXB0aC1v
ci1zdGVuY2lsIGZvcm1hdDoiCisgICAgaWYgKCFUZXh0dXJlOjppc0RlcHRoT3JTdGVuY2lsRm9y
bWF0KGRzdFRleHR1cmVEZXNjLmZvcm1hdCkpIHsKKyAgICAgICAgLy8gInNvdXJjZS5vZmZzZXQg
aXMgYSBtdWx0aXBsZSBvZiB0aGUgdGV4ZWwgYmxvY2sgc2l6ZSBvZiBkc3RUZXh0dXJlRGVzYy5m
b3JtYXQuIgorICAgICAgICBhdXRvIHRleGVsQmxvY2tTaXplID0gVGV4dHVyZTo6dGV4ZWxCbG9j
a1NpemUoZHN0VGV4dHVyZURlc2MuZm9ybWF0KTsKKyAgICAgICAgaWYgKCF0ZXhlbEJsb2NrU2l6
ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHNvdXJjZS5sYXlvdXQu
b2Zmc2V0ICUgKnRleGVsQmxvY2tTaXplKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIC8vICJJZiBkc3RUZXh0dXJlRGVzYy5mb3JtYXQgaXMgYSBkZXB0aC1vci1zdGVu
Y2lsIGZvcm1hdDoiCisgICAgaWYgKFRleHR1cmU6OmlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoZHN0
VGV4dHVyZURlc2MuZm9ybWF0KSkgeworICAgICAgICAvLyAic291cmNlLm9mZnNldCBpcyBhIG11
bHRpcGxlIG9mIDQuIgorICAgICAgICBpZiAoc291cmNlLmxheW91dC5vZmZzZXQgJSA0KQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJ2YWxpZGF0aW5nIGxpbmVh
ciB0ZXh0dXJlIGRhdGEoc291cmNlLCBzb3VyY2UuYnVmZmVyLltbc2l6ZV1dLCBkc3RUZXh0dXJl
RGVzYy5mb3JtYXQsIGNvcHlTaXplKSBzdWNjZWVkcy4iCisgICAgaWYgKCF2YWxpZGF0ZUxpbmVh
clRleHR1cmVEYXRhKHNvdXJjZS5sYXlvdXQsIGZyb21BUEkoc291cmNlLmJ1ZmZlcikuc2l6ZSgp
LCBkc3RUZXh0dXJlRGVzYy5mb3JtYXQsIGNvcHlTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgQ29tbWFuZEVuY29kZXI6OmNvcHlCdWZm
ZXJUb1RleHR1cmUoY29uc3QgV0dQVUltYWdlQ29weUJ1ZmZlciYgc291cmNlLCBjb25zdCBXR1BV
SW1hZ2VDb3B5VGV4dHVyZSYgZGVzdGluYXRpb24sIGNvbnN0IFdHUFVFeHRlbnQzRCYgY29weVNp
emUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHNvdXJjZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRlc3Rp
bmF0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oY29weVNpemUpOworICAgIGlmIChzb3VyY2UubmV4
dEluQ2hhaW4gfHwgc291cmNlLmxheW91dC5uZXh0SW5DaGFpbiB8fCBkZXN0aW5hdGlvbi5uZXh0
SW5DaGFpbikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHVi
LmlvL2dwdXdlYi8jZG9tLWdwdWNvbW1hbmRlbmNvZGVyLWNvcHlidWZmZXJ0b3RleHR1cmUKKwor
ICAgIC8vICJQcmVwYXJlIHRoZSBlbmNvZGVyIHN0YXRlIG9mIHRoaXMuIElmIGl0IHJldHVybnMg
ZmFsc2UsIHN0b3AuIgorICAgIGlmICghcHJlcGFyZVRoZUVuY29kZXJTdGF0ZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyAiSWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUgdW5zYXRpc2ZpZWQiCisgICAgaWYgKCF2YWxpZGF0ZUNvcHlCdWZmZXJUb1RleHR1cmUoc291
cmNlLCBkZXN0aW5hdGlvbiwgY29weVNpemUpKSB7CisgICAgICAgIC8vICJnZW5lcmF0ZSBhIHZh
bGlkYXRpb24gZXJyb3IgYW5kIHN0b3AuIgorICAgICAgICBtX2RldmljZS0+Z2VuZXJhdGVBVmFs
aWRhdGlvbkVycm9yKCJWYWxpZGF0aW9uIGZhaWx1cmUuIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBlbnN1cmVCbGl0Q29tbWFuZEVuY29kZXIoKTsKKworICAgIE5TVUludGVnZXIg
c291cmNlQnl0ZXNQZXJSb3cgPSBzb3VyY2UubGF5b3V0LmJ5dGVzUGVyUm93OworCisgICAgLy8g
RklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMKKyAgICBOU1VJbnRlZ2VyIHNvdXJjZUJ5dGVz
UGVySW1hZ2UgPSBzb3VyY2UubGF5b3V0LnJvd3NQZXJJbWFnZSAqIHNvdXJjZS5sYXlvdXQuYnl0
ZXNQZXJSb3c7CisKKyAgICBNVExCbGl0T3B0aW9uIG9wdGlvbnMgPSBNVExCbGl0T3B0aW9uTm9u
ZTsKKyAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uLmFzcGVjdCkgeworICAgIGNhc2UgV0dQVVRleHR1
cmVBc3BlY3RfQWxsOgorICAgICAgICBvcHRpb25zID0gTVRMQmxpdE9wdGlvbk5vbmU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfU3RlbmNpbE9ubHk6CisgICAg
ICAgIG9wdGlvbnMgPSBNVExCbGl0T3B0aW9uU3RlbmNpbEZyb21EZXB0aFN0ZW5jaWw7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRGVwdGhPbmx5OgorICAgICAg
ICBvcHRpb25zID0gTVRMQmxpdE9wdGlvbkRlcHRoRnJvbURlcHRoU3RlbmNpbDsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9Gb3JjZTMyOgorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgYXV0byBsb2dpY2FsU2l6ZSA9IGZyb21BUEkoZGVzdGluYXRpb24u
dGV4dHVyZSkubG9naWNhbFRleHR1cmVTdWJyZXNvdXJjZUV4dGVudChkZXN0aW5hdGlvbi5taXBM
ZXZlbCk7CisgICAgYXV0byB3aWR0aEZvck1ldGFsID0gc3RkOjptaW4oY29weVNpemUud2lkdGgs
IGxvZ2ljYWxTaXplLndpZHRoKTsKKyAgICBhdXRvIGhlaWdodEZvck1ldGFsID0gc3RkOjptaW4o
Y29weVNpemUuaGVpZ2h0LCBsb2dpY2FsU2l6ZS5oZWlnaHQpOworICAgIGF1dG8gZGVwdGhGb3JN
ZXRhbCA9IHN0ZDo6bWluKGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVycywgbG9naWNhbFNpemUu
ZGVwdGhPckFycmF5TGF5ZXJzKTsKKworICAgIGF1dG8mIGRlc3RpbmF0aW9uRGVzY3JpcHRvciA9
IGZyb21BUEkoZGVzdGluYXRpb24udGV4dHVyZSkuZGVzY3JpcHRvcigpOworICAgIHN3aXRjaCAo
ZGVzdGluYXRpb25EZXNjcmlwdG9yLmRpbWVuc2lvbikgeworICAgIGNhc2UgV0dQVVRleHR1cmVE
aW1lbnNpb25fMUQ6IHsKKyAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2Rv
Y3VtZW50YXRpb24vbWV0YWwvbXRsYmxpdGNvbW1hbmRlbmNvZGVyLzE0MDA3NzEtY29weWZyb21i
dWZmZXI/bGFuZ3VhZ2U9b2JqYworICAgICAgICAvLyAiV2hlbiB5b3UgY29weSB0byBhIDFEIHRl
eHR1cmUsIGhlaWdodCBhbmQgZGVwdGggbXVzdCBiZSAxLiIKKyAgICAgICAgYXV0byBzb3VyY2VT
aXplID0gTVRMU2l6ZU1ha2Uod2lkdGhGb3JNZXRhbCwgMSwgMSk7CisgICAgICAgIGF1dG8gZGVz
dGluYXRpb25PcmlnaW4gPSBNVExPcmlnaW5NYWtlKGRlc3RpbmF0aW9uLm9yaWdpbi54LCAxLCAx
KTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBsYXllciA9IDA7IGxheWVyIDwgY29weVNpemUuZGVw
dGhPckFycmF5TGF5ZXJzOyArK2xheWVyKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVXNlIGNo
ZWNrZWQgYXJpdGhtZXRpYy4KKyAgICAgICAgICAgIE5TVUludGVnZXIgc291cmNlT2Zmc2V0ID0g
c291cmNlLmxheW91dC5vZmZzZXQgKyBsYXllciAqIHNvdXJjZUJ5dGVzUGVySW1hZ2U7CisgICAg
ICAgICAgICBOU1VJbnRlZ2VyIGRlc3RpbmF0aW9uU2xpY2UgPSBkZXN0aW5hdGlvbi5vcmlnaW4u
eiArIGxheWVyOworICAgICAgICAgICAgW21fYmxpdENvbW1hbmRFbmNvZGVyCisgICAgICAgICAg
ICAgICAgY29weUZyb21CdWZmZXI6ZnJvbUFQSShzb3VyY2UuYnVmZmVyKS5idWZmZXIoKQorICAg
ICAgICAgICAgICAgIHNvdXJjZU9mZnNldDpzb3VyY2VPZmZzZXQKKyAgICAgICAgICAgICAgICBz
b3VyY2VCeXRlc1BlclJvdzpzb3VyY2VCeXRlc1BlclJvdworICAgICAgICAgICAgICAgIHNvdXJj
ZUJ5dGVzUGVySW1hZ2U6c291cmNlQnl0ZXNQZXJJbWFnZQorICAgICAgICAgICAgICAgIHNvdXJj
ZVNpemU6c291cmNlU2l6ZQorICAgICAgICAgICAgICAgIHRvVGV4dHVyZTpmcm9tQVBJKGRlc3Rp
bmF0aW9uLnRleHR1cmUpLnRleHR1cmUoKQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xp
Y2U6ZGVzdGluYXRpb25TbGljZQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uTGV2ZWw6ZGVz
dGluYXRpb24ubWlwTGV2ZWwKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9yaWdpbjpkZXN0
aW5hdGlvbk9yaWdpbgorICAgICAgICAgICAgICAgIG9wdGlvbnM6b3B0aW9uc107CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25f
MkQ6IHsKKyAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRp
b24vbWV0YWwvbXRsYmxpdGNvbW1hbmRlbmNvZGVyLzE0MDA3NzEtY29weWZyb21idWZmZXI/bGFu
Z3VhZ2U9b2JqYworICAgICAgICAvLyAiV2hlbiB5b3UgY29weSB0byBhIDJEIHRleHR1cmUsIGRl
cHRoIG11c3QgYmUgMS4iCisgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IE1UTFNpemVNYWtlKHdp
ZHRoRm9yTWV0YWwsIGhlaWdodEZvck1ldGFsLCAxKTsKKyAgICAgICAgYXV0byBkZXN0aW5hdGlv
bk9yaWdpbiA9IE1UTE9yaWdpbk1ha2UoZGVzdGluYXRpb24ub3JpZ2luLngsIGRlc3RpbmF0aW9u
Lm9yaWdpbi55LCAxKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBsYXllciA9IDA7IGxheWVyIDwg
Y29weVNpemUuZGVwdGhPckFycmF5TGF5ZXJzOyArK2xheWVyKSB7CisgICAgICAgICAgICAvLyBG
SVhNRTogVXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KKyAgICAgICAgICAgIE5TVUludGVnZXIgc291
cmNlT2Zmc2V0ID0gc291cmNlLmxheW91dC5vZmZzZXQgKyBsYXllciAqIHNvdXJjZUJ5dGVzUGVy
SW1hZ2U7CisgICAgICAgICAgICBOU1VJbnRlZ2VyIGRlc3RpbmF0aW9uU2xpY2UgPSBkZXN0aW5h
dGlvbi5vcmlnaW4ueiArIGxheWVyOworICAgICAgICAgICAgW21fYmxpdENvbW1hbmRFbmNvZGVy
CisgICAgICAgICAgICAgICAgY29weUZyb21CdWZmZXI6ZnJvbUFQSShzb3VyY2UuYnVmZmVyKS5i
dWZmZXIoKQorICAgICAgICAgICAgICAgIHNvdXJjZU9mZnNldDpzb3VyY2VPZmZzZXQKKyAgICAg
ICAgICAgICAgICBzb3VyY2VCeXRlc1BlclJvdzpzb3VyY2VCeXRlc1BlclJvdworICAgICAgICAg
ICAgICAgIHNvdXJjZUJ5dGVzUGVySW1hZ2U6c291cmNlQnl0ZXNQZXJJbWFnZQorICAgICAgICAg
ICAgICAgIHNvdXJjZVNpemU6c291cmNlU2l6ZQorICAgICAgICAgICAgICAgIHRvVGV4dHVyZTpm
cm9tQVBJKGRlc3RpbmF0aW9uLnRleHR1cmUpLnRleHR1cmUoKQorICAgICAgICAgICAgICAgIGRl
c3RpbmF0aW9uU2xpY2U6ZGVzdGluYXRpb25TbGljZQorICAgICAgICAgICAgICAgIGRlc3RpbmF0
aW9uTGV2ZWw6ZGVzdGluYXRpb24ubWlwTGV2ZWwKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlv
bk9yaWdpbjpkZXN0aW5hdGlvbk9yaWdpbgorICAgICAgICAgICAgICAgIG9wdGlvbnM6b3B0aW9u
c107CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV0dQVVRleHR1
cmVEaW1lbnNpb25fM0Q6IHsKKyAgICAgICAgYXV0byBzb3VyY2VTaXplID0gTVRMU2l6ZU1ha2Uo
d2lkdGhGb3JNZXRhbCwgaGVpZ2h0Rm9yTWV0YWwsIGRlcHRoRm9yTWV0YWwpOworICAgICAgICBh
dXRvIGRlc3RpbmF0aW9uT3JpZ2luID0gTVRMT3JpZ2luTWFrZShkZXN0aW5hdGlvbi5vcmlnaW4u
eCwgZGVzdGluYXRpb24ub3JpZ2luLnksIGRlc3RpbmF0aW9uLm9yaWdpbi56KTsKKyAgICAgICAg
TlNVSW50ZWdlciBzb3VyY2VPZmZzZXQgPSBzb3VyY2UubGF5b3V0Lm9mZnNldDsKKyAgICAgICAg
W21fYmxpdENvbW1hbmRFbmNvZGVyCisgICAgICAgICAgICBjb3B5RnJvbUJ1ZmZlcjpmcm9tQVBJ
KHNvdXJjZS5idWZmZXIpLmJ1ZmZlcigpCisgICAgICAgICAgICBzb3VyY2VPZmZzZXQ6c291cmNl
T2Zmc2V0CisgICAgICAgICAgICBzb3VyY2VCeXRlc1BlclJvdzpzb3VyY2VCeXRlc1BlclJvdwor
ICAgICAgICAgICAgc291cmNlQnl0ZXNQZXJJbWFnZTpzb3VyY2VCeXRlc1BlckltYWdlCisgICAg
ICAgICAgICBzb3VyY2VTaXplOnNvdXJjZVNpemUKKyAgICAgICAgICAgIHRvVGV4dHVyZTpmcm9t
QVBJKGRlc3RpbmF0aW9uLnRleHR1cmUpLnRleHR1cmUoKQorICAgICAgICAgICAgZGVzdGluYXRp
b25TbGljZTowCisgICAgICAgICAgICBkZXN0aW5hdGlvbkxldmVsOmRlc3RpbmF0aW9uLm1pcExl
dmVsCisgICAgICAgICAgICBkZXN0aW5hdGlvbk9yaWdpbjpkZXN0aW5hdGlvbk9yaWdpbgorICAg
ICAgICAgICAgb3B0aW9uczpvcHRpb25zXTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgV0dQVVRleHR1cmVEaW1lbnNpb25fRm9yY2UzMjoKKyAgICAgICAgcmV0dXJuOworICAgIH0K
K30KKworc3RhdGljIGJvb2wgdmFsaWRhdGVDb3B5VGV4dHVyZVRvQnVmZmVyKGNvbnN0IFdHUFVJ
bWFnZUNvcHlUZXh0dXJlJiBzb3VyY2UsIGNvbnN0IFdHUFVJbWFnZUNvcHlCdWZmZXImIGRlc3Rp
bmF0aW9uLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQoreworICAgIC8vICJMZXQgc3Jj
VGV4dHVyZURlc2MgYmUgc291cmNlLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uIgorICAgIGNvbnN0
IGF1dG8mIHNyY1RleHR1cmVEZXNjID0gZnJvbUFQSShzb3VyY2UudGV4dHVyZSkuZGVzY3JpcHRv
cigpOworCisgICAgLy8gInZhbGlkYXRpbmcgR1BVSW1hZ2VDb3B5VGV4dHVyZShzb3VyY2UsIGNv
cHlTaXplKSByZXR1cm5zIHRydWUuIgorICAgIGlmICghdmFsaWRhdGVJbWFnZUNvcHlUZXh0dXJl
KHNvdXJjZSwgY29weVNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAic3Jj
VGV4dHVyZURlc2MudXNhZ2UgY29udGFpbnMgQ09QWV9TUkMuIgorICAgIGlmICghKHNyY1RleHR1
cmVEZXNjLnVzYWdlICYgV0dQVUJ1ZmZlclVzYWdlX0NvcHlTcmMpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyAic3JjVGV4dHVyZURlc2Muc2FtcGxlQ291bnQgaXMgMS4iCisgICAg
aWYgKHNyY1RleHR1cmVEZXNjLnNhbXBsZUNvdW50ICE9IDEpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vICJJZiBzcmNUZXh0dXJlRGVzYy5mb3JtYXQgaXMgYSBkZXB0aC1zdGVuY2ls
IGZvcm1hdDoiCisgICAgaWYgKFRleHR1cmU6OmlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoc3JjVGV4
dHVyZURlc2MuZm9ybWF0KSkgeworICAgICAgICAvLyAic291cmNlLmFzcGVjdCBtdXN0IHJlZmVy
IHRvIGEgc2luZ2xlIGFzcGVjdCBvZiBzcmNUZXh0dXJlRGVzYy5mb3JtYXQiCisgICAgICAgIFdH
UFVUZXh0dXJlRm9ybWF0IHNpbmdsZUFzcGVjdEZvcm1hdCA9IFdHUFVUZXh0dXJlRm9ybWF0X1Vu
ZGVmaW5lZDsKKyAgICAgICAgc3dpdGNoIChzb3VyY2UuYXNwZWN0KSB7CisgICAgICAgIGNhc2Ug
V0dQVVRleHR1cmVBc3BlY3RfQWxsOgorICAgICAgICAgICAgaWYgKGF1dG8gc3RlbmNpbE9ubHlB
c3BlY3RGb3JtYXQgPSBUZXh0dXJlOjpzdGVuY2lsT25seUFzcGVjdEZvcm1hdChzcmNUZXh0dXJl
RGVzYy5mb3JtYXQpKQorICAgICAgICAgICAgICAgIHNpbmdsZUFzcGVjdEZvcm1hdCA9ICpzdGVu
Y2lsT25seUFzcGVjdEZvcm1hdDsKKyAgICAgICAgICAgIGlmIChhdXRvIGRlcHRoT25seUFzcGVj
dEZvcm1hdCA9IFRleHR1cmU6OmRlcHRoT25seUFzcGVjdEZvcm1hdChzcmNUZXh0dXJlRGVzYy5m
b3JtYXQpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNpbmdsZUFzcGVjdEZvcm1hdCkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHNpbmdsZUFzcGVj
dEZvcm1hdCA9ICpkZXB0aE9ubHlBc3BlY3RGb3JtYXQ7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25seToK
KyAgICAgICAgICAgIGlmIChhdXRvIHN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0ID0gVGV4dHVyZTo6
c3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQoc3JjVGV4dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAg
ICAgICAgICBzaW5nbGVBc3BlY3RGb3JtYXQgPSAqc3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQ7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9EZXB0aE9u
bHk6CisgICAgICAgICAgICBpZiAoYXV0byBkZXB0aE9ubHlBc3BlY3RGb3JtYXQgPSBUZXh0dXJl
OjpkZXB0aE9ubHlBc3BlY3RGb3JtYXQoc3JjVGV4dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAg
ICAgICAgICBzaW5nbGVBc3BlY3RGb3JtYXQgPSAqZGVwdGhPbmx5QXNwZWN0Rm9ybWF0OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRm9yY2UzMjoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaW5n
bGVBc3BlY3RGb3JtYXQgPT0gV0dQVVRleHR1cmVGb3JtYXRfVW5kZWZpbmVkKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vICJhbmQgdGhhdCBhc3BlY3QgbXVzdCBiZSBh
IHZhbGlkIGltYWdlIGNvcHkgZGVzdGluYXRpb24gYWNjb3JkaW5nIHRvIMKn4oCvMjUuMS4yIERl
cHRoLXN0ZW5jaWwgZm9ybWF0cy4iCisgICAgICAgIGlmICghaXNWYWxpZEltYWdlQ29weURlc3Rp
bmF0aW9uKHNyY1RleHR1cmVEZXNjLmZvcm1hdCwgc291cmNlLmFzcGVjdCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gInZhbGlkYXRpbmcgR1BVSW1hZ2VDb3B5
QnVmZmVyKGRlc3RpbmF0aW9uKSByZXR1cm5zIHRydWUuIgorICAgIGlmICghdmFsaWRhdGVJbWFn
ZUNvcHlCdWZmZXIoZGVzdGluYXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyAiZGVzdGluYXRpb24uYnVmZmVyLltbdXNhZ2VdXSBjb250YWlucyBDT1BZX0RTVC4iCisgICAg
aWYgKCEoZnJvbUFQSShkZXN0aW5hdGlvbi5idWZmZXIpLnVzYWdlKCkgJiBXR1BVQnVmZmVyVXNh
Z2VfQ29weURzdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJ2YWxpZGF0aW5n
IHRleHR1cmUgY29weSByYW5nZShzb3VyY2UsIGNvcHlTaXplKSByZXR1cm5zIHRydWUuIgorICAg
IGlmICghdmFsaWRhdGVUZXh0dXJlQ29weVJhbmdlKHNvdXJjZSwgY29weVNpemUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiSWYgc3JjVGV4dHVyZURlc2MuZm9ybWF0IGlzIG5v
dCBhIGRlcHRoLW9yLXN0ZW5jaWwgZm9ybWF0OiIKKyAgICBpZiAoIVRleHR1cmU6OmlzRGVwdGhP
clN0ZW5jaWxGb3JtYXQoc3JjVGV4dHVyZURlc2MuZm9ybWF0KSkgeworICAgICAgICAvLyAiZGVz
dGluYXRpb24ub2Zmc2V0IGlzIGEgbXVsdGlwbGUgb2YgdGhlIHRleGVsIGJsb2NrIHNpemUgb2Yg
c3JjVGV4dHVyZURlc2MuZm9ybWF0LiIKKyAgICAgICAgYXV0byB0ZXhlbEJsb2NrU2l6ZSA9IFRl
eHR1cmU6OnRleGVsQmxvY2tTaXplKHNyY1RleHR1cmVEZXNjLmZvcm1hdCk7CisgICAgICAgIGlm
ICghdGV4ZWxCbG9ja1NpemUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
IChkZXN0aW5hdGlvbi5sYXlvdXQub2Zmc2V0ICUgKnRleGVsQmxvY2tTaXplKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJJZiBzcmNUZXh0dXJlRGVzYy5mb3Jt
YXQgaXMgYSBkZXB0aC1vci1zdGVuY2lsIGZvcm1hdDoiCisgICAgaWYgKFRleHR1cmU6OmlzRGVw
dGhPclN0ZW5jaWxGb3JtYXQoc3JjVGV4dHVyZURlc2MuZm9ybWF0KSkgeworICAgICAgICAvLyAi
ZGVzdGluYXRpb24ub2Zmc2V0IGlzIGEgbXVsdGlwbGUgb2YgNC4iCisgICAgICAgIGlmIChkZXN0
aW5hdGlvbi5sYXlvdXQub2Zmc2V0ICUgNCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICAvLyAidmFsaWRhdGluZyBsaW5lYXIgdGV4dHVyZSBkYXRhKGRlc3RpbmF0aW9u
LCBkZXN0aW5hdGlvbi5idWZmZXIuW1tzaXplXV0sIHNyY1RleHR1cmVEZXNjLmZvcm1hdCwgY29w
eVNpemUpIHN1Y2NlZWRzLiIKKyAgICBpZiAoIXZhbGlkYXRlTGluZWFyVGV4dHVyZURhdGEoZGVz
dGluYXRpb24ubGF5b3V0LCBmcm9tQVBJKGRlc3RpbmF0aW9uLmJ1ZmZlcikuc2l6ZSgpLCBzcmNU
ZXh0dXJlRGVzYy5mb3JtYXQsIGNvcHlTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgQ29tbWFuZEVuY29kZXI6OmNvcHlUZXh0dXJlVG9C
dWZmZXIoY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUmIHNvdXJjZSwgY29uc3QgV0dQVUltYWdl
Q29weUJ1ZmZlciYgZGVzdGluYXRpb24sIGNvbnN0IFdHUFVFeHRlbnQzRCYgY29weVNpemUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKHNvdXJjZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9u
KTsKLSAgICBVTlVTRURfUEFSQU0oY29weVNpemUpOworICAgIGlmIChzb3VyY2UubmV4dEluQ2hh
aW4gfHwgZGVzdGluYXRpb24ubmV4dEluQ2hhaW4gfHwgZGVzdGluYXRpb24ubGF5b3V0Lm5leHRJ
bkNoYWluKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIu
aW8vZ3B1d2ViLyNkb20tZ3B1Y29tbWFuZGVuY29kZXItY29weXRleHR1cmV0b2J1ZmZlcgorCisg
ICAgLy8gIlByZXBhcmUgdGhlIGVuY29kZXIgc3RhdGUgb2YgdGhpcy4gSWYgaXQgcmV0dXJucyBm
YWxzZSwgc3RvcC4iCisgICAgaWYgKCFwcmVwYXJlVGhlRW5jb2RlclN0YXRlKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vICJJZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZSB1bnNhdGlzZmllZCIKKyAgICBpZiAoIXZhbGlkYXRlQ29weVRleHR1cmVUb0J1ZmZlcihzb3Vy
Y2UsIGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkpIHsKKyAgICAgICAgLy8gImdlbmVyYXRlIGEgdmFs
aWRhdGlvbiBlcnJvciBhbmQgc3RvcC4iCisgICAgICAgIG1fZGV2aWNlLT5nZW5lcmF0ZUFWYWxp
ZGF0aW9uRXJyb3IoIlZhbGlkYXRpb24gZmFpbHVyZS4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGVuc3VyZUJsaXRDb21tYW5kRW5jb2RlcigpOworCisgICAgTlNVSW50ZWdlciBk
ZXN0aW5hdGlvbkJ5dGVzUGVyUm93ID0gZGVzdGluYXRpb24ubGF5b3V0LmJ5dGVzUGVyUm93Owor
CisgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMKKyAgICBOU1VJbnRlZ2VyIGRl
c3RpbmF0aW9uQnl0ZXNQZXJJbWFnZSA9IGRlc3RpbmF0aW9uLmxheW91dC5yb3dzUGVySW1hZ2Ug
KiBkZXN0aW5hdGlvbi5sYXlvdXQuYnl0ZXNQZXJSb3c7CisKKyAgICBNVExCbGl0T3B0aW9uIG9w
dGlvbnMgPSBNVExCbGl0T3B0aW9uTm9uZTsKKyAgICBzd2l0Y2ggKHNvdXJjZS5hc3BlY3QpIHsK
KyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0FsbDoKKyAgICAgICAgb3B0aW9ucyA9IE1UTEJs
aXRPcHRpb25Ob25lOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0
X1N0ZW5jaWxPbmx5OgorICAgICAgICBvcHRpb25zID0gTVRMQmxpdE9wdGlvblN0ZW5jaWxGcm9t
RGVwdGhTdGVuY2lsOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0
X0RlcHRoT25seToKKyAgICAgICAgb3B0aW9ucyA9IE1UTEJsaXRPcHRpb25EZXB0aEZyb21EZXB0
aFN0ZW5jaWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRm9y
Y2UzMjoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gbG9naWNhbFNpemUgPSBm
cm9tQVBJKHNvdXJjZS50ZXh0dXJlKS5sb2dpY2FsVGV4dHVyZVN1YnJlc291cmNlRXh0ZW50KHNv
dXJjZS5taXBMZXZlbCk7CisgICAgYXV0byB3aWR0aEZvck1ldGFsID0gc3RkOjptaW4oY29weVNp
emUud2lkdGgsIGxvZ2ljYWxTaXplLndpZHRoKTsKKyAgICBhdXRvIGhlaWdodEZvck1ldGFsID0g
c3RkOjptaW4oY29weVNpemUuaGVpZ2h0LCBsb2dpY2FsU2l6ZS5oZWlnaHQpOworICAgIGF1dG8g
ZGVwdGhGb3JNZXRhbCA9IHN0ZDo6bWluKGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVycywgbG9n
aWNhbFNpemUuZGVwdGhPckFycmF5TGF5ZXJzKTsKKworICAgIGF1dG8mIHNvdXJjZURlc2NyaXB0
b3IgPSBmcm9tQVBJKHNvdXJjZS50ZXh0dXJlKS5kZXNjcmlwdG9yKCk7CisgICAgc3dpdGNoIChz
b3VyY2VEZXNjcmlwdG9yLmRpbWVuc2lvbikgeworICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNp
b25fMUQ6IHsKKyAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50
YXRpb24vbWV0YWwvbXRsYmxpdGNvbW1hbmRlbmNvZGVyLzE0MDA3NTYtY29weWZyb210ZXh0dXJl
P2xhbmd1YWdlPW9iamMKKyAgICAgICAgLy8gIldoZW4geW91IGNvcHkgdG8gYSAxRCB0ZXh0dXJl
LCBoZWlnaHQgYW5kIGRlcHRoIG11c3QgYmUgMS4iCisgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9
IE1UTFNpemVNYWtlKHdpZHRoRm9yTWV0YWwsIDEsIDEpOworICAgICAgICBhdXRvIHNvdXJjZU9y
aWdpbiA9IE1UTE9yaWdpbk1ha2Uoc291cmNlLm9yaWdpbi54LCAxLCAxKTsKKyAgICAgICAgZm9y
ICh1aW50MzJfdCBsYXllciA9IDA7IGxheWVyIDwgY29weVNpemUuZGVwdGhPckFycmF5TGF5ZXJz
OyArK2xheWVyKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVXNlIGNoZWNrZWQgYXJpdGhtZXRp
Yy4KKyAgICAgICAgICAgIE5TVUludGVnZXIgZGVzdGluYXRpb25PZmZzZXQgPSBkZXN0aW5hdGlv
bi5sYXlvdXQub2Zmc2V0ICsgbGF5ZXIgKiBkZXN0aW5hdGlvbkJ5dGVzUGVySW1hZ2U7CisgICAg
ICAgICAgICBOU1VJbnRlZ2VyIHNvdXJjZVNsaWNlID0gc291cmNlLm9yaWdpbi56ICsgbGF5ZXI7
CisgICAgICAgICAgICBbbV9ibGl0Q29tbWFuZEVuY29kZXIKKyAgICAgICAgICAgICAgICBjb3B5
RnJvbVRleHR1cmU6ZnJvbUFQSShzb3VyY2UudGV4dHVyZSkudGV4dHVyZSgpCisgICAgICAgICAg
ICAgICAgc291cmNlU2xpY2U6c291cmNlU2xpY2UKKyAgICAgICAgICAgICAgICBzb3VyY2VMZXZl
bDpzb3VyY2UubWlwTGV2ZWwKKyAgICAgICAgICAgICAgICBzb3VyY2VPcmlnaW46c291cmNlT3Jp
Z2luCisgICAgICAgICAgICAgICAgc291cmNlU2l6ZTpzb3VyY2VTaXplCisgICAgICAgICAgICAg
ICAgdG9CdWZmZXI6ZnJvbUFQSShkZXN0aW5hdGlvbi5idWZmZXIpLmJ1ZmZlcigpCisgICAgICAg
ICAgICAgICAgZGVzdGluYXRpb25PZmZzZXQ6ZGVzdGluYXRpb25PZmZzZXQKKyAgICAgICAgICAg
ICAgICBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93OmRlc3RpbmF0aW9uQnl0ZXNQZXJSb3cKKyAgICAg
ICAgICAgICAgICBkZXN0aW5hdGlvbkJ5dGVzUGVySW1hZ2U6ZGVzdGluYXRpb25CeXRlc1Blcklt
YWdlCisgICAgICAgICAgICAgICAgb3B0aW9uczpvcHRpb25zXTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8yRDogeworICAg
ICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9tZXRhbC9t
dGxibGl0Y29tbWFuZGVuY29kZXIvMTQwMDc1Ni1jb3B5ZnJvbXRleHR1cmU/bGFuZ3VhZ2U9b2Jq
YworICAgICAgICAvLyAiV2hlbiB5b3UgY29weSB0byBhIDJEIHRleHR1cmUsIGRlcHRoIG11c3Qg
YmUgMS4iCisgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IE1UTFNpemVNYWtlKHdpZHRoRm9yTWV0
YWwsIGhlaWdodEZvck1ldGFsLCAxKTsKKyAgICAgICAgYXV0byBzb3VyY2VPcmlnaW4gPSBNVExP
cmlnaW5NYWtlKHNvdXJjZS5vcmlnaW4ueCwgc291cmNlLm9yaWdpbi55LCAxKTsKKyAgICAgICAg
Zm9yICh1aW50MzJfdCBsYXllciA9IDA7IGxheWVyIDwgY29weVNpemUuZGVwdGhPckFycmF5TGF5
ZXJzOyArK2xheWVyKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVXNlIGNoZWNrZWQgYXJpdGht
ZXRpYy4KKyAgICAgICAgICAgIE5TVUludGVnZXIgZGVzdGluYXRpb25PZmZzZXQgPSBkZXN0aW5h
dGlvbi5sYXlvdXQub2Zmc2V0ICsgbGF5ZXIgKiBkZXN0aW5hdGlvbkJ5dGVzUGVySW1hZ2U7Cisg
ICAgICAgICAgICBOU1VJbnRlZ2VyIHNvdXJjZVNsaWNlID0gc291cmNlLm9yaWdpbi56ICsgbGF5
ZXI7CisgICAgICAgICAgICBbbV9ibGl0Q29tbWFuZEVuY29kZXIKKyAgICAgICAgICAgICAgICBj
b3B5RnJvbVRleHR1cmU6ZnJvbUFQSShzb3VyY2UudGV4dHVyZSkudGV4dHVyZSgpCisgICAgICAg
ICAgICAgICAgc291cmNlU2xpY2U6c291cmNlU2xpY2UKKyAgICAgICAgICAgICAgICBzb3VyY2VM
ZXZlbDpzb3VyY2UubWlwTGV2ZWwKKyAgICAgICAgICAgICAgICBzb3VyY2VPcmlnaW46c291cmNl
T3JpZ2luCisgICAgICAgICAgICAgICAgc291cmNlU2l6ZTpzb3VyY2VTaXplCisgICAgICAgICAg
ICAgICAgdG9CdWZmZXI6ZnJvbUFQSShkZXN0aW5hdGlvbi5idWZmZXIpLmJ1ZmZlcigpCisgICAg
ICAgICAgICAgICAgZGVzdGluYXRpb25PZmZzZXQ6ZGVzdGluYXRpb25PZmZzZXQKKyAgICAgICAg
ICAgICAgICBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93OmRlc3RpbmF0aW9uQnl0ZXNQZXJSb3cKKyAg
ICAgICAgICAgICAgICBkZXN0aW5hdGlvbkJ5dGVzUGVySW1hZ2U6ZGVzdGluYXRpb25CeXRlc1Bl
ckltYWdlCisgICAgICAgICAgICAgICAgb3B0aW9uczpvcHRpb25zXTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8zRDogewor
ICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBNVExTaXplTWFrZSh3aWR0aEZvck1ldGFsLCBoZWln
aHRGb3JNZXRhbCwgZGVwdGhGb3JNZXRhbCk7CisgICAgICAgIGF1dG8gc291cmNlT3JpZ2luID0g
TVRMT3JpZ2luTWFrZShzb3VyY2Uub3JpZ2luLngsIHNvdXJjZS5vcmlnaW4ueSwgc291cmNlLm9y
aWdpbi56KTsKKyAgICAgICAgTlNVSW50ZWdlciBkZXN0aW5hdGlvbk9mZnNldCA9IGRlc3RpbmF0
aW9uLmxheW91dC5vZmZzZXQ7CisgICAgICAgICAgICBbbV9ibGl0Q29tbWFuZEVuY29kZXIKKyAg
ICAgICAgICAgICAgICBjb3B5RnJvbVRleHR1cmU6ZnJvbUFQSShzb3VyY2UudGV4dHVyZSkudGV4
dHVyZSgpCisgICAgICAgICAgICAgICAgc291cmNlU2xpY2U6MAorICAgICAgICAgICAgICAgIHNv
dXJjZUxldmVsOnNvdXJjZS5taXBMZXZlbAorICAgICAgICAgICAgICAgIHNvdXJjZU9yaWdpbjpz
b3VyY2VPcmlnaW4KKyAgICAgICAgICAgICAgICBzb3VyY2VTaXplOnNvdXJjZVNpemUKKyAgICAg
ICAgICAgICAgICB0b0J1ZmZlcjpmcm9tQVBJKGRlc3RpbmF0aW9uLmJ1ZmZlcikuYnVmZmVyKCkK
KyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9mZnNldDpkZXN0aW5hdGlvbk9mZnNldAorICAg
ICAgICAgICAgICAgIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3c6ZGVzdGluYXRpb25CeXRlc1BlclJv
dworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uQnl0ZXNQZXJJbWFnZTpkZXN0aW5hdGlvbkJ5
dGVzUGVySW1hZ2UKKyAgICAgICAgICAgICAgICBvcHRpb25zOm9wdGlvbnNdOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl9Gb3JjZTMyOgorICAg
ICAgICByZXR1cm47CisgICAgfQorfQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxXR1BVVGV4dHVy
ZUZvcm1hdD4gaXNTUkdCQ29tcGF0aWJsZShXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQpCit7Cisg
ICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1VuZGVmaW5l
ZDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SOFVub3JtOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfUjhTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4VWlu
dDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X1IxNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMTZTaW50Ogor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjE2RmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9SRzhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFNub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkc4VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X1JHOFNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMzJGbG9hdDoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IzMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SMzJTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkcxNlVpbnQ6CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X1JHMTZGbG9hdDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X1JHQkE4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9S
R0JBOFVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4VW5v
cm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFNub3JtOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfUkdCQThVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdC
QThTaW50OgorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfQkdSQThVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JHUkE4VW5v
cm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkdSQThVbm9ybTsKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQjEwQTJVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X1JHMTFCMTBVZmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0I5
RTVVZmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzMyRmxvYXQ6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzMyVWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X1JHMzJTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTE2VWludDoKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkExNlNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SR0JBMTZGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkEzMkZsb2F0
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTMyVWludDoKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X1JHQkEzMlNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9TdGVu
Y2lsODoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMTZVbm9ybToKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRQbHVzOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfRGVwdGgyNFBsdXNTdGVuY2lsODoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRo
MjRVbm9ybVN0ZW5jaWw4OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0U3RlbmNpbDg6CisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzFS
R0JBVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm1TcmdiOgor
ICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkMxUkdCQVVub3JtOworICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfQkMyUkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfQkMyUkdCQVVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JD
MlJHQkFVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybToKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybVNyZ2I6CisgICAgICAgIHJldHVy
biBXR1BVVGV4dHVyZUZvcm1hdF9CQzNSR0JBVW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9CQzRSVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSU25vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzVSR1Vub3JtOgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfQkM1UkdTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNkhSR0JV
ZmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzZIUkdCRmxvYXQ6CisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzdSR0JB
VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzdSR0JBVW5vcm1TcmdiOgorICAg
ICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkM3UkdCQVVub3JtOworICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfRVRDMlJHQjhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0VUQzJSR0I4VW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfRVRD
MlJHQjhVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4QTFVbm9ybToK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4QTFVbm9ybVNyZ2I6CisgICAgICAg
IHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOEExVW5vcm07CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9FVEMyUkdCQThVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0VUQzJSR0JBOFVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0VU
QzJSR0JBOFVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUjExVW5vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FQUNSMTFTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0VBQ1JHMTFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JH
MTFTbm9ybToKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0FTVEM0eDRVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM0
eDRVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNHg0VW5v
cm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg0VW5vcm06CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg0VW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzV4NFVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNU
QzV4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtU3JnYjoK
KyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM1eDVVbm9ybTsKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0FTVEM2eDVVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9B
U1RDNng1VW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5vcm1TcmdiOgorICAgICAgICByZXR1
cm4gV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NlVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzh4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NVVu
b3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDVVbm9ybTsK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDZVbm9ybToKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X0FTVEM4eDZVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVy
ZUZvcm1hdF9BU1RDOHg2VW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg4
VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg4VW5vcm1TcmdiOgorICAg
ICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4OFVub3JtOworICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfQVNUQzEweDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEMxMHg1VW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQVNU
QzEweDVVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg2VW5vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NlVub3JtU3JnYjoKKyAgICAgICAgcmV0
dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg2VW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9BU1RDMTB4OFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEw
eDhVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4OFVu
b3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDEwVW5vcm06CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4MTBVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4MTBVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0FTVEMxMngxMFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEyeDEw
VW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEyeDEwVW5v
cm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTJVbm9ybToKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMlVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMlVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfRm9yY2UzMjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBhcmVDb3B5Q29tcGF0aWJs
ZShXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQxLCBXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQyKQor
eworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2NvcHktY29tcGF0aWJs
ZQorCisgICAgLy8gImZvcm1hdDEgZXF1YWxzIGZvcm1hdDIiCisgICAgaWYgKGZvcm1hdDEgPT0g
Zm9ybWF0MikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyAiZm9ybWF0MSBhbmQgZm9y
bWF0MiBkaWZmZXIgb25seSBpbiB3aGV0aGVyIHRoZXkgYXJlIHNyZ2IgZm9ybWF0cyAoaGF2ZSB0
aGUgLXNyZ2Igc3VmZml4KS4iCisgICAgYXV0byBjYW5vbmljYWxpemVkRm9ybWF0MSA9IGlzU1JH
QkNvbXBhdGlibGUoZm9ybWF0MSk7CisgICAgYXV0byBjYW5vbmljYWxpemVkRm9ybWF0MiA9IGlz
U1JHQkNvbXBhdGlibGUoZm9ybWF0Mik7CisgICAgaWYgKCFjYW5vbmljYWxpemVkRm9ybWF0MSB8
fCAhY2Fub25pY2FsaXplZEZvcm1hdDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
Y2Fub25pY2FsaXplZEZvcm1hdDEgIT0gY2Fub25pY2FsaXplZEZvcm1hdDEpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCB2YWxpZGF0
ZUNvcHlUZXh0dXJlVG9UZXh0dXJlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBzb3VyY2Us
IGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBkZXN0aW5hdGlvbiwgY29uc3QgV0dQVUV4dGVu
dDNEJiBjb3B5U2l6ZSkKK3sKKyAgICAvLyAiTGV0IHNyY1RleHR1cmVEZXNjIGJlIHNvdXJjZS50
ZXh0dXJlLltbZGVzY3JpcHRvcl1dLiIKKyAgICBjb25zdCBhdXRvJiBzcmNUZXh0dXJlRGVzYyA9
IGZyb21BUEkoc291cmNlLnRleHR1cmUpLmRlc2NyaXB0b3IoKTsKKworICAgIC8vICJMZXQgZHN0
VGV4dHVyZURlc2MgYmUgZGVzdGluYXRpb24udGV4dHVyZS5bW2Rlc2NyaXB0b3JdXS4iCisgICAg
Y29uc3QgYXV0byYgZHN0VGV4dHVyZURlc2MgPSBmcm9tQVBJKGRlc3RpbmF0aW9uLnRleHR1cmUp
LmRlc2NyaXB0b3IoKTsKKworICAgIC8vICJ2YWxpZGF0aW5nIEdQVUltYWdlQ29weVRleHR1cmUo
c291cmNlLCBjb3B5U2l6ZSkgcmV0dXJucyB0cnVlLiIKKyAgICBpZiAoIXZhbGlkYXRlSW1hZ2VD
b3B5VGV4dHVyZShzb3VyY2UsIGNvcHlTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gInNyY1RleHR1cmVEZXNjLnVzYWdlIGNvbnRhaW5zIENPUFlfU1JDLiIKKyAgICBpZiAo
IShzcmNUZXh0dXJlRGVzYy51c2FnZSAmIFdHUFVUZXh0dXJlVXNhZ2VfQ29weVNyYykpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJ2YWxpZGF0aW5nIEdQVUltYWdlQ29weVRleHR1
cmUoZGVzdGluYXRpb24sIGNvcHlTaXplKSByZXR1cm5zIHRydWUuIgorICAgIGlmICghdmFsaWRh
dGVJbWFnZUNvcHlUZXh0dXJlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vICJkc3RUZXh0dXJlRGVzYy51c2FnZSBjb250YWlucyBDT1BZX0RT
VC4iCisgICAgaWYgKCEoZHN0VGV4dHVyZURlc2MudXNhZ2UgJiBXR1BVVGV4dHVyZVVzYWdlX0Nv
cHlEc3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAic3JjVGV4dHVyZURlc2Mu
c2FtcGxlQ291bnQgaXMgZXF1YWwgdG8gZHN0VGV4dHVyZURlc2Muc2FtcGxlQ291bnQuIgorICAg
IGlmIChzcmNUZXh0dXJlRGVzYy5zYW1wbGVDb3VudCAhPSBkc3RUZXh0dXJlRGVzYy5zYW1wbGVD
b3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gInNyY1RleHR1cmVEZXNjLmZv
cm1hdCBhbmQgZHN0VGV4dHVyZURlc2MuZm9ybWF0IG11c3QgYmUgY29weS1jb21wYXRpYmxlLiIK
KyAgICBpZiAoIWFyZUNvcHlDb21wYXRpYmxlKHNyY1RleHR1cmVEZXNjLmZvcm1hdCwgZHN0VGV4
dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gIklmIHNy
Y1RleHR1cmVEZXNjLmZvcm1hdCBpcyBhIGRlcHRoLXN0ZW5jaWwgZm9ybWF0OiIKKyAgICBpZiAo
VGV4dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChzcmNUZXh0dXJlRGVzYy5mb3JtYXQpKSB7
CisgICAgICAgIC8vICJzb3VyY2UuYXNwZWN0IGFuZCBkZXN0aW5hdGlvbi5hc3BlY3QgbXVzdCBi
b3RoIHJlZmVyIHRvIGFsbCBhc3BlY3RzIG9mIHNyY1RleHR1cmVEZXNjLmZvcm1hdCBhbmQgZHN0
VGV4dHVyZURlc2MuZm9ybWF0LCByZXNwZWN0aXZlbHkuIgorICAgICAgICBzd2l0Y2ggKHNvdXJj
ZS5hc3BlY3QpIHsKKyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9BbGw6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25seToK
KyAgICAgICAgICAgIGlmICghVGV4dHVyZTo6c3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQoc3JjVGV4
dHVyZURlc2MuZm9ybWF0KSB8fCBUZXh0dXJlOjpkZXB0aE9ubHlBc3BlY3RGb3JtYXQoc3JjVGV4
dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9EZXB0aE9ubHk6Cisg
ICAgICAgICAgICBpZiAoIVRleHR1cmU6OmRlcHRoT25seUFzcGVjdEZvcm1hdChzcmNUZXh0dXJl
RGVzYy5mb3JtYXQpIHx8IFRleHR1cmU6OnN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0KHNyY1RleHR1
cmVEZXNjLmZvcm1hdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRm9yY2UzMjoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoZGVzdGlu
YXRpb24uYXNwZWN0KSB7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfQWxsOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfU3RlbmNpbE9u
bHk6CisgICAgICAgICAgICBpZiAoIVRleHR1cmU6OnN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0KGRz
dFRleHR1cmVEZXNjLmZvcm1hdCkgfHwgVGV4dHVyZTo6ZGVwdGhPbmx5QXNwZWN0Rm9ybWF0KGRz
dFRleHR1cmVEZXNjLmZvcm1hdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRGVwdGhPbmx5
OgorICAgICAgICAgICAgaWYgKCFUZXh0dXJlOjpkZXB0aE9ubHlBc3BlY3RGb3JtYXQoZHN0VGV4
dHVyZURlc2MuZm9ybWF0KSB8fCBUZXh0dXJlOjpzdGVuY2lsT25seUFzcGVjdEZvcm1hdChkc3RU
ZXh0dXJlRGVzYy5mb3JtYXQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0ZvcmNlMzI6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAidmFs
aWRhdGluZyB0ZXh0dXJlIGNvcHkgcmFuZ2Uoc291cmNlLCBjb3B5U2l6ZSkgcmV0dXJucyB0cnVl
LiIKKyAgICBpZiAoIXZhbGlkYXRlVGV4dHVyZUNvcHlSYW5nZShzb3VyY2UsIGNvcHlTaXplKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gInZhbGlkYXRpbmcgdGV4dHVyZSBjb3B5
IHJhbmdlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkgcmV0dXJucyB0cnVlLiIKKyAgICBpZiAoIXZh
bGlkYXRlVGV4dHVyZUNvcHlSYW5nZShkZXN0aW5hdGlvbiwgY29weVNpemUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiVGhlIHNldCBvZiBzdWJyZXNvdXJjZXMgZm9yIHRleHR1
cmUgY29weShzb3VyY2UsIGNvcHlTaXplKSBhbmQgdGhlIHNldCBvZiBzdWJyZXNvdXJjZXMgZm9y
IHRleHR1cmUgY29weShkZXN0aW5hdGlvbiwgY29weVNpemUpIGlzIGRpc2pvaW50LiIKKyAgICAv
LyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNhYnN0cmFjdC1vcGRlZi1zZXQtb2Yt
c3VicmVzb3VyY2VzLWZvci10ZXh0dXJlLWNvcHkKKyAgICBpZiAoc291cmNlLnRleHR1cmUgPT0g
ZGVzdGluYXRpb24udGV4dHVyZSkgeworICAgICAgICAvLyBNaXAgbGV2ZWxzIGFyZSBuZXZlciBy
YW5nZXMuCisgICAgICAgIGlmIChzb3VyY2UubWlwTGV2ZWwgPT0gZGVzdGluYXRpb24ubWlwTGV2
ZWwpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoZnJvbUFQSShzb3VyY2UudGV4dHVyZSkuZGVzY3Jp
cHRvcigpLmRpbWVuc2lvbikgeworICAgICAgICAgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lv
bl8xRDoKKyAgICAgICAgICAgICAgICAvLyAiVGhlIHN1YnJlc291cmNlIG9mIGltYWdlQ29weVRl
eHR1cmUudGV4dHVyZSBhdCBtaXBtYXAgbGV2ZWwgaW1hZ2VDb3B5VGV4dHVyZS5taXBMZXZlbC4i
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBXR1BVVGV4
dHVyZURpbWVuc2lvbl8yRDogeworICAgICAgICAgICAgICAgIC8vICJGb3IgZWFjaCBhcnJheUxh
eWVyIG9mIHRoZSBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMgYXJyYXkgbGF5ZXJzIHN0YXJ0
aW5nIGF0IGltYWdlQ29weVRleHR1cmUub3JpZ2luLno6IgorICAgICAgICAgICAgICAgIC8vICJU
aGUgc3VicmVzb3VyY2Ugb2YgaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlIGF0IG1pcG1hcCBsZXZl
bCBpbWFnZUNvcHlUZXh0dXJlLm1pcExldmVsIGFuZCBhcnJheSBsYXllciBhcnJheUxheWVyLiIK
KyAgICAgICAgICAgICAgICBSYW5nZTx1aW50MzJfdD4gc291cmNlUmFuZ2Uoc291cmNlLm9yaWdp
bi56LCBzb3VyY2Uub3JpZ2luLnogKyBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMpOworICAg
ICAgICAgICAgICAgIFJhbmdlPHVpbnQzMl90PiBkZXN0aW5hdGlvblJhbmdlKGRlc3RpbmF0aW9u
Lm9yaWdpbi56LCBzb3VyY2Uub3JpZ2luLnogKyBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMp
OworICAgICAgICAgICAgICAgIGlmIChzb3VyY2VSYW5nZS5vdmVybGFwcyhkZXN0aW5hdGlvblJh
bmdlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVu
c2lvbl8zRDoKKyAgICAgICAgICAgICAgICAvLyAiVGhlIHN1YnJlc291cmNlIG9mIGltYWdlQ29w
eVRleHR1cmUudGV4dHVyZSBhdCBtaXBtYXAgbGV2ZWwgaW1hZ2VDb3B5VGV4dHVyZS5taXBMZXZl
bC4iCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBXR1BV
VGV4dHVyZURpbWVuc2lvbl9Gb3JjZTMyOgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIENvbW1hbmRFbmNv
ZGVyOjpjb3B5VGV4dHVyZVRvVGV4dHVyZShjb25zdCBXR1BVSW1hZ2VDb3B5VGV4dHVyZSYgc291
cmNlLCBjb25zdCBXR1BVSW1hZ2VDb3B5VGV4dHVyZSYgZGVzdGluYXRpb24sIGNvbnN0IFdHUFVF
eHRlbnQzRCYgY29weVNpemUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHNvdXJjZSk7Ci0gICAgVU5V
U0VEX1BBUkFNKGRlc3RpbmF0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oY29weVNpemUpOworICAg
IGlmIChzb3VyY2UubmV4dEluQ2hhaW4gfHwgZGVzdGluYXRpb24ubmV4dEluQ2hhaW4pCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2Rv
bS1ncHVjb21tYW5kZW5jb2Rlci1jb3B5dGV4dHVyZXRvdGV4dHVyZQorCisgICAgLy8gIlByZXBh
cmUgdGhlIGVuY29kZXIgc3RhdGUgb2YgdGhpcy4gSWYgaXQgcmV0dXJucyBmYWxzZSwgc3RvcC4i
CisgICAgaWYgKCFwcmVwYXJlVGhlRW5jb2RlclN0YXRlKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vICJJZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSB1bnNhdGlzZmll
ZCIKKyAgICBpZiAoIXZhbGlkYXRlQ29weVRleHR1cmVUb1RleHR1cmUoc291cmNlLCBkZXN0aW5h
dGlvbiwgY29weVNpemUpKSB7CisgICAgICAgIC8vICJnZW5lcmF0ZSBhIHZhbGlkYXRpb24gZXJy
b3IgYW5kIHN0b3AuIgorICAgICAgICBtX2RldmljZS0+Z2VuZXJhdGVBVmFsaWRhdGlvbkVycm9y
KCJWYWxpZGF0aW9uIGZhaWx1cmUuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBl
bnN1cmVCbGl0Q29tbWFuZEVuY29kZXIoKTsKKworICAgIE1UTEJsaXRPcHRpb24gb3B0aW9ucyA9
IE1UTEJsaXRPcHRpb25Ob25lOworICAgIHN3aXRjaCAoc291cmNlLmFzcGVjdCkgeworICAgIGNh
c2UgV0dQVVRleHR1cmVBc3BlY3RfQWxsOgorICAgICAgICBvcHRpb25zID0gTVRMQmxpdE9wdGlv
bk5vbmU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfU3RlbmNp
bE9ubHk6CisgICAgICAgIG9wdGlvbnMgPSBNVExCbGl0T3B0aW9uU3RlbmNpbEZyb21EZXB0aFN0
ZW5jaWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRGVwdGhP
bmx5OgorICAgICAgICBvcHRpb25zID0gTVRMQmxpdE9wdGlvbkRlcHRoRnJvbURlcHRoU3RlbmNp
bDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9Gb3JjZTMyOgor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBzb3VyY2VMb2dpY2FsU2l6ZSA9IGZy
b21BUEkoc291cmNlLnRleHR1cmUpLmxvZ2ljYWxUZXh0dXJlU3VicmVzb3VyY2VFeHRlbnQoc291
cmNlLm1pcExldmVsKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uTG9naWNhbFNpemUgPSBmcm9tQVBJ
KGRlc3RpbmF0aW9uLnRleHR1cmUpLmxvZ2ljYWxUZXh0dXJlU3VicmVzb3VyY2VFeHRlbnQoZGVz
dGluYXRpb24ubWlwTGV2ZWwpOworICAgIGF1dG8gd2lkdGhGb3JNZXRhbCA9IHN0ZDo6bWluKHN0
ZDo6bWluKGNvcHlTaXplLndpZHRoLCBzb3VyY2VMb2dpY2FsU2l6ZS53aWR0aCksIGRlc3RpbmF0
aW9uTG9naWNhbFNpemUud2lkdGgpOworICAgIGF1dG8gaGVpZ2h0Rm9yTWV0YWwgPSBzdGQ6Om1p
bihzdGQ6Om1pbihjb3B5U2l6ZS5oZWlnaHQsIHNvdXJjZUxvZ2ljYWxTaXplLmhlaWdodCksIGRl
c3RpbmF0aW9uTG9naWNhbFNpemUuaGVpZ2h0KTsKKyAgICBhdXRvIGRlcHRoRm9yTWV0YWwgPSBz
dGQ6Om1pbihzdGQ6Om1pbihjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMsIHNvdXJjZUxvZ2lj
YWxTaXplLmRlcHRoT3JBcnJheUxheWVycyksIGRlc3RpbmF0aW9uTG9naWNhbFNpemUuZGVwdGhP
ckFycmF5TGF5ZXJzKTsKKworICAgIGF1dG8mIHNvdXJjZURlc2NyaXB0b3IgPSBmcm9tQVBJKHNv
dXJjZS50ZXh0dXJlKS5kZXNjcmlwdG9yKCk7CisgICAgLy8gRklYTUUoUEVSRk9STUFOQ0UpOiBJ
cyBpdCBhY3R1YWxseSBmYXN0ZXIgdG8gdXNlIHRoZSAtW01UTEJsaXRDb21tYW5kRW5jb2RlciBj
b3B5RnJvbVRleHR1cmU6Li4udG9UZXh0dXJlOi4uLmxldmVsQ291bnQ6XQorICAgIC8vIHZhcmlh
bnQsIHdoZXJlIHBvc3NpYmxlLCByYXRoZXIgdGhhbiBjYWxsaW5nIHRoZSBvdGhlciB2YXJpYW50
IGluIGEgbG9vcD8KKyAgICBzd2l0Y2ggKHNvdXJjZURlc2NyaXB0b3IuZGltZW5zaW9uKSB7Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8xRDogeworICAgICAgICAvLyBodHRwczovL2Rl
dmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9tZXRhbC9tdGxibGl0Y29tbWFuZGVuY29k
ZXIvMTQwMDc1Ni1jb3B5ZnJvbXRleHR1cmU/bGFuZ3VhZ2U9b2JqYworICAgICAgICAvLyAiV2hl
biB5b3UgY29weSB0byBhIDFEIHRleHR1cmUsIGhlaWdodCBhbmQgZGVwdGggbXVzdCBiZSAxLiIK
KyAgICAgICAgYXV0byBzb3VyY2VTaXplID0gTVRMU2l6ZU1ha2Uod2lkdGhGb3JNZXRhbCwgMSwg
MSk7CisgICAgICAgIGF1dG8gc291cmNlT3JpZ2luID0gTVRMT3JpZ2luTWFrZShzb3VyY2Uub3Jp
Z2luLngsIDEsIDEpOworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uT3JpZ2luID0gTVRMT3JpZ2lu
TWFrZShkZXN0aW5hdGlvbi5vcmlnaW4ueCwgMSwgMSk7CisgICAgICAgIGZvciAodWludDMyX3Qg
bGF5ZXIgPSAwOyBsYXllciA8IGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVyczsgKytsYXllcikg
eworICAgICAgICAgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMuCisgICAgICAg
ICAgICBOU1VJbnRlZ2VyIHNvdXJjZVNsaWNlID0gc291cmNlLm9yaWdpbi56ICsgbGF5ZXI7Cisg
ICAgICAgICAgICBOU1VJbnRlZ2VyIGRlc3RpbmF0aW9uU2xpY2UgPSBkZXN0aW5hdGlvbi5vcmln
aW4ueiArIGxheWVyOworICAgICAgICAgICAgW21fYmxpdENvbW1hbmRFbmNvZGVyCisgICAgICAg
ICAgICAgICAgY29weUZyb21UZXh0dXJlOmZyb21BUEkoc291cmNlLnRleHR1cmUpLnRleHR1cmUo
KQorICAgICAgICAgICAgICAgIHNvdXJjZVNsaWNlOnNvdXJjZVNsaWNlCisgICAgICAgICAgICAg
ICAgc291cmNlTGV2ZWw6c291cmNlLm1pcExldmVsCisgICAgICAgICAgICAgICAgc291cmNlT3Jp
Z2luOnNvdXJjZU9yaWdpbgorICAgICAgICAgICAgICAgIHNvdXJjZVNpemU6c291cmNlU2l6ZQor
ICAgICAgICAgICAgICAgIHRvVGV4dHVyZTpmcm9tQVBJKGRlc3RpbmF0aW9uLnRleHR1cmUpLnRl
eHR1cmUoKQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xpY2U6ZGVzdGluYXRpb25TbGlj
ZQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uTGV2ZWw6ZGVzdGluYXRpb24ubWlwTGV2ZWwK
KyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9yaWdpbjpkZXN0aW5hdGlvbk9yaWdpbl07Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV0dQVVRleHR1cmVEaW1l
bnNpb25fMkQ6IHsKKyAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3Vt
ZW50YXRpb24vbWV0YWwvbXRsYmxpdGNvbW1hbmRlbmNvZGVyLzE0MDA3NTYtY29weWZyb210ZXh0
dXJlP2xhbmd1YWdlPW9iamMKKyAgICAgICAgLy8gIldoZW4geW91IGNvcHkgdG8gYSAyRCB0ZXh0
dXJlLCBkZXB0aCBtdXN0IGJlIDEuIgorICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBNVExTaXpl
TWFrZSh3aWR0aEZvck1ldGFsLCBoZWlnaHRGb3JNZXRhbCwgMSk7CisgICAgICAgIGF1dG8gc291
cmNlT3JpZ2luID0gTVRMT3JpZ2luTWFrZShzb3VyY2Uub3JpZ2luLngsIHNvdXJjZS5vcmlnaW4u
eSwgMSk7CisgICAgICAgIGF1dG8gZGVzdGluYXRpb25PcmlnaW4gPSBNVExPcmlnaW5NYWtlKGRl
c3RpbmF0aW9uLm9yaWdpbi54LCBkZXN0aW5hdGlvbi5vcmlnaW4ueSwgMSk7CisgICAgICAgIGZv
ciAodWludDMyX3QgbGF5ZXIgPSAwOyBsYXllciA8IGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVy
czsgKytsYXllcikgeworICAgICAgICAgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0
aWMuCisgICAgICAgICAgICBOU1VJbnRlZ2VyIHNvdXJjZVNsaWNlID0gc291cmNlLm9yaWdpbi56
ICsgbGF5ZXI7CisgICAgICAgICAgICBOU1VJbnRlZ2VyIGRlc3RpbmF0aW9uU2xpY2UgPSBkZXN0
aW5hdGlvbi5vcmlnaW4ueiArIGxheWVyOworICAgICAgICAgICAgW21fYmxpdENvbW1hbmRFbmNv
ZGVyCisgICAgICAgICAgICAgICAgY29weUZyb21UZXh0dXJlOmZyb21BUEkoc291cmNlLnRleHR1
cmUpLnRleHR1cmUoKQorICAgICAgICAgICAgICAgIHNvdXJjZVNsaWNlOnNvdXJjZVNsaWNlCisg
ICAgICAgICAgICAgICAgc291cmNlTGV2ZWw6c291cmNlLm1pcExldmVsCisgICAgICAgICAgICAg
ICAgc291cmNlT3JpZ2luOnNvdXJjZU9yaWdpbgorICAgICAgICAgICAgICAgIHNvdXJjZVNpemU6
c291cmNlU2l6ZQorICAgICAgICAgICAgICAgIHRvVGV4dHVyZTpmcm9tQVBJKGRlc3RpbmF0aW9u
LnRleHR1cmUpLnRleHR1cmUoKQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xpY2U6ZGVz
dGluYXRpb25TbGljZQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uTGV2ZWw6ZGVzdGluYXRp
b24ubWlwTGV2ZWwKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9yaWdpbjpkZXN0aW5hdGlv
bk9yaWdpbl07CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV0dQ
VVRleHR1cmVEaW1lbnNpb25fM0Q6IHsKKyAgICAgICAgYXV0byBzb3VyY2VTaXplID0gTVRMU2l6
ZU1ha2Uod2lkdGhGb3JNZXRhbCwgaGVpZ2h0Rm9yTWV0YWwsIGRlcHRoRm9yTWV0YWwpOworICAg
ICAgICBhdXRvIHNvdXJjZU9yaWdpbiA9IE1UTE9yaWdpbk1ha2Uoc291cmNlLm9yaWdpbi54LCBz
b3VyY2Uub3JpZ2luLnksIHNvdXJjZS5vcmlnaW4ueik7CisgICAgICAgIGF1dG8gZGVzdGluYXRp
b25PcmlnaW4gPSBNVExPcmlnaW5NYWtlKGRlc3RpbmF0aW9uLm9yaWdpbi54LCBkZXN0aW5hdGlv
bi5vcmlnaW4ueSwgZGVzdGluYXRpb24ub3JpZ2luLnopOworICAgICAgICBbbV9ibGl0Q29tbWFu
ZEVuY29kZXIKKyAgICAgICAgICAgIGNvcHlGcm9tVGV4dHVyZTpmcm9tQVBJKHNvdXJjZS50ZXh0
dXJlKS50ZXh0dXJlKCkKKyAgICAgICAgICAgIHNvdXJjZVNsaWNlOjAKKyAgICAgICAgICAgIHNv
dXJjZUxldmVsOnNvdXJjZS5taXBMZXZlbAorICAgICAgICAgICAgc291cmNlT3JpZ2luOnNvdXJj
ZU9yaWdpbgorICAgICAgICAgICAgc291cmNlU2l6ZTpzb3VyY2VTaXplCisgICAgICAgICAgICB0
b1RleHR1cmU6ZnJvbUFQSShkZXN0aW5hdGlvbi50ZXh0dXJlKS50ZXh0dXJlKCkKKyAgICAgICAg
ICAgIGRlc3RpbmF0aW9uU2xpY2U6MAorICAgICAgICAgICAgZGVzdGluYXRpb25MZXZlbDpkZXN0
aW5hdGlvbi5taXBMZXZlbAorICAgICAgICAgICAgZGVzdGluYXRpb25PcmlnaW46ZGVzdGluYXRp
b25PcmlnaW5dOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXR1BVVGV4dHVyZURp
bWVuc2lvbl9Gb3JjZTMyOgorICAgICAgICByZXR1cm47CisgICAgfQogfQogCiBzdGF0aWMgYm9v
bCB2YWxpZGF0ZUNsZWFyQnVmZmVyKGNvbnN0IEJ1ZmZlciYgYnVmZmVyLCB1aW50NjRfdCBvZmZz
ZXQsIHVpbnQ2NF90IHNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21w
dXRlUGlwZWxpbmUubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21wdXRlUGlwZWxpbmUubW0K
aW5kZXggZWQ5YjhjZmY2NDE0MzAxMmU3N2IzZTIxZmM1ZTljYWIwNzU5MzY0Yy4uNmZhMWNlZTli
YjRjNmE3Mjc2ZTIzY2NjM2JmYzMyYmY4MDRkOGY5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQ
VS9XZWJHUFUvQ29tcHV0ZVBpcGVsaW5lLm1tCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0Nv
bXB1dGVQaXBlbGluZS5tbQpAQCAtMTQ2LDggKzE0Niw4IEBAIFJlZlB0cjxDb21wdXRlUGlwZWxp
bmU+IERldmljZTo6Y3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbnN0IFdHUFVDb21wdXRlUGlwZWxp
bmVECiAgICAgaWYgKGRlc2NyaXB0b3IubmV4dEluQ2hhaW4gfHwgZGVzY3JpcHRvci5jb21wdXRl
Lm5leHRJbkNoYWluKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGNvbnN0IFNoYWRl
ck1vZHVsZSYgc2hhZGVyTW9kdWxlID0gV2ViR1BVOjpmcm9tQVBJKGRlc2NyaXB0b3IuY29tcHV0
ZS5tb2R1bGUpOwotICAgIGNvbnN0IFBpcGVsaW5lTGF5b3V0JiBwaXBlbGluZUxheW91dCA9IFdl
YkdQVTo6ZnJvbUFQSShkZXNjcmlwdG9yLmxheW91dCk7CisgICAgY29uc3QgU2hhZGVyTW9kdWxl
JiBzaGFkZXJNb2R1bGUgPSBmcm9tQVBJKGRlc2NyaXB0b3IuY29tcHV0ZS5tb2R1bGUpOworICAg
IGNvbnN0IFBpcGVsaW5lTGF5b3V0JiBwaXBlbGluZUxheW91dCA9IGZyb21BUEkoZGVzY3JpcHRv
ci5sYXlvdXQpOwogICAgIGF1dG8gbGFiZWwgPSBmcm9tQVBJKGRlc2NyaXB0b3IubGFiZWwpOwog
CiAgICAgYXV0byBsaWJyYXJ5Q3JlYXRpb25SZXN1bHQgPSBjcmVhdGVMaWJyYXJ5KG1fZGV2aWNl
LCBzaGFkZXJNb2R1bGUsIHBpcGVsaW5lTGF5b3V0LCBkZXNjcmlwdG9yLmNvbXB1dGUuZW50cnlQ
b2ludCwgbGFiZWwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvUGlwZWxpbmVM
YXlvdXQubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9QaXBlbGluZUxheW91dC5tbQppbmRleCBl
ZmEwZDZkNTE3YmFjYjY3Y2UyMzZkMDQxYWYxYTVmZjM1ODA5NmZhLi4wNjU4M2RmMGRkYWYzYzY5
NjZlOTQ0ZmEzNjNlNjQwODU5MWJhYTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQ
VS9QaXBlbGluZUxheW91dC5tbQorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9QaXBlbGluZUxh
eW91dC5tbQpAQCAtNDEsNyArNDEsNyBAQCBSZWZQdHI8UGlwZWxpbmVMYXlvdXQ+IERldmljZTo6
Y3JlYXRlUGlwZWxpbmVMYXlvdXQoY29uc3QgV0dQVVBpcGVsaW5lTGF5b3V0RGVzYwogICAgIGJp
bmRHcm91cExheW91dHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXNjcmlwdG9yLmJpbmRHcm91
cExheW91dENvdW50KTsKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgZGVzY3JpcHRvci5i
aW5kR3JvdXBMYXlvdXRDb3VudDsgKytpKSB7CiAgICAgICAgIGF1dG8qIGJpbmRHcm91cExheW91
dCA9IGRlc2NyaXB0b3IuYmluZEdyb3VwTGF5b3V0c1tpXTsKLSAgICAgICAgYmluZEdyb3VwTGF5
b3V0cy51bmNoZWNrZWRBcHBlbmQoV2ViR1BVOjpmcm9tQVBJKGJpbmRHcm91cExheW91dCkpOwor
ICAgICAgICBiaW5kR3JvdXBMYXlvdXRzLnVuY2hlY2tlZEFwcGVuZChmcm9tQVBJKGJpbmRHcm91
cExheW91dCkpOwogICAgIH0KICAgICByZXR1cm4gUGlwZWxpbmVMYXlvdXQ6OmNyZWF0ZShXVEZN
b3ZlKGJpbmRHcm91cExheW91dHMpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2Vi
R1BVL1NoYWRlck1vZHVsZS5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1NoYWRlck1vZHVsZS5t
bQppbmRleCBlMDA3NTVjZmI1NWI0YzY2YTg5MjdkZDNlNWUwMmVhOTEwMTcwYzQ0Li5iNTFlNjg5
NGU2MzZjY2QyZDNjMjEwNGJlNDVmMTFiZDAwODI3NDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
R1BVL1dlYkdQVS9TaGFkZXJNb2R1bGUubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvU2hh
ZGVyTW9kdWxlLm1tCkBAIC04OCw4ICs4OCw4IEBAIHN0YXRpYyBSZWZQdHI8U2hhZGVyTW9kdWxl
PiBlYXJseUNvbXBpbGVTaGFkZXJNb2R1bGUoaWQ8TVRMRGV2aWNlPiBkZXZpY2UsIHN0ZDo6CiAg
ICAgICAgIGNvbnN0IGF1dG8mIGhpbnQgPSBzdXBwbGllZEhpbnRzLmhpbnRzW2ldOwogICAgICAg
ICBpZiAoaGludC5uZXh0SW5DaGFpbikKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICBoaW50cy5hZGQoaGludC5rZXksIFdlYkdQVTo6ZnJvbUFQSShoaW50LmhpbnQubGF5b3V0
KSk7Ci0gICAgICAgIGF1dG8gY29udmVydGVkUGlwZWxpbmVMYXlvdXQgPSBTaGFkZXJNb2R1bGU6
OmNvbnZlcnRQaXBlbGluZUxheW91dChXZWJHUFU6OmZyb21BUEkoaGludC5oaW50LmxheW91dCkp
OworICAgICAgICBoaW50cy5hZGQoaGludC5rZXksIGZyb21BUEkoaGludC5oaW50LmxheW91dCkp
OworICAgICAgICBhdXRvIGNvbnZlcnRlZFBpcGVsaW5lTGF5b3V0ID0gU2hhZGVyTW9kdWxlOjpj
b252ZXJ0UGlwZWxpbmVMYXlvdXQoZnJvbUFQSShoaW50LmhpbnQubGF5b3V0KSk7CiAgICAgICAg
IHdnc2xIaW50cy5hZGQoaGludC5rZXksIFdURk1vdmUoY29udmVydGVkUGlwZWxpbmVMYXlvdXQp
KTsKICAgICB9CiAgICAgYXV0byBwcmVwYXJlUmVzdWx0ID0gV0dTTDo6cHJlcGFyZShzdGQ6Omdl
dDxXR1NMOjpTdWNjZXNzZnVsQ2hlY2s+KGNoZWNrUmVzdWx0KS5hc3QsIHdnc2xIaW50cyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLmggYi9Tb3VyY2UvV2ViR1BV
L1dlYkdQVS9UZXh0dXJlLmgKaW5kZXggOWE1OTc4ZDczOTEyYzk5MWU0YjQzYmNlZDI3OWQxMWQz
ZWJiNzQwNS4uMzUxZTYxZTYxYzQ0OWY3YTVkNjczNmY4ODk1ODI4ZDdmMDAxZWYxOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvVGV4dHVyZS5oCisrKyBiL1NvdXJjZS9XZWJHUFUv
V2ViR1BVL1RleHR1cmUuaApAQCAtNTEsNiArNTEsMTYgQEAgcHVibGljOgogICAgIHZvaWQgZGVz
dHJveSgpOwogICAgIHZvaWQgc2V0TGFiZWwoU3RyaW5nJiYpOwogCisgICAgc3RhdGljIHVpbnQz
Ml90IHRleGVsQmxvY2tXaWR0aChXR1BVVGV4dHVyZUZvcm1hdCk7CisgICAgc3RhdGljIHVpbnQz
Ml90IHRleGVsQmxvY2tIZWlnaHQoV0dQVVRleHR1cmVGb3JtYXQpOworICAgIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPHVpbnQzMl90PiB0ZXhlbEJsb2NrU2l6ZShXR1BVVGV4dHVyZUZvcm1hdCk7Cisg
ICAgc3RhdGljIGJvb2wgaXNEZXB0aE9yU3RlbmNpbEZvcm1hdChXR1BVVGV4dHVyZUZvcm1hdCk7
CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V0dQVVRleHR1cmVGb3JtYXQ+IHN0ZW5jaWxPbmx5
QXNwZWN0Rm9ybWF0KFdHUFVUZXh0dXJlRm9ybWF0KTsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25h
bDxXR1BVVGV4dHVyZUZvcm1hdD4gZGVwdGhPbmx5QXNwZWN0Rm9ybWF0KFdHUFVUZXh0dXJlRm9y
bWF0KTsKKworICAgIFdHUFVFeHRlbnQzRCBsb2dpY2FsVGV4dHVyZVN1YnJlc291cmNlRXh0ZW50
KHVpbnQzMl90IG1pcExldmVsKTsKKyAgICBXR1BVRXh0ZW50M0QgcGh5c2ljYWxUZXh0dXJlU3Vi
cmVzb3VyY2VFeHRlbnQodWludDMyX3QgbWlwTGV2ZWwpOworCiAgICAgaWQ8TVRMVGV4dHVyZT4g
dGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZTsgfQogICAgIGNvbnN0IFdHUFVUZXh0
dXJlRGVzY3JpcHRvciYgZGVzY3JpcHRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3JpcHRvcjsg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLm1tIGIvU291cmNl
L1dlYkdQVS9XZWJHUFUvVGV4dHVyZS5tbQppbmRleCA4ZjU0ZmNkN2MxODgzOTNmZDZjYjVhNDY3
ZDllNDQ2NjY5Nzc5MmIyLi4zYjZhNTViMzY5MWZjNGU1MTI2YmFmYWUxNmNiMjkzMjQwM2QwM2Y4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLm1tCisrKyBiL1NvdXJj
ZS9XZWJHUFUvV2ViR1BVL1RleHR1cmUubW0KQEAgLTMzLDYgKzMzLDggQEAKIAogbmFtZXNwYWNl
IFdlYkdQVSB7CiAKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPE1UTFBpeGVsRm9ybWF0PiBwaXhlbEZv
cm1hdChXR1BVVGV4dHVyZUZvcm1hdCk7CisKIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdHUFVGZWF0
dXJlTmFtZT4gZmVhdHVyZVJlcXVpcmVtZW50Rm9yRm9ybWF0KFdHUFVUZXh0dXJlRm9ybWF0IGZv
cm1hdCkKIHsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewpAQCAtMjQ3LDcgKzI0OSw3IEBAIHN0YXRp
YyBib29sIGlzQ29tcHJlc3NlZEZvcm1hdChXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQpCiAgICAg
fQogfQogCi1zdGF0aWMgYm9vbCBpc0RlcHRoT3JTdGVuY2lsRm9ybWF0KFdHUFVUZXh0dXJlRm9y
bWF0IGZvcm1hdCkKK2Jvb2wgVGV4dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChXR1BVVGV4
dHVyZUZvcm1hdCBmb3JtYXQpCiB7CiAgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dw
dXdlYi8jZGVwdGgtZm9ybWF0cwogICAgIC8vICJBIGRlcHRoLW9yLXN0ZW5jaWwgZm9ybWF0IGlz
IGFueSBmb3JtYXQgd2l0aCBkZXB0aCBhbmQvb3Igc3RlbmNpbCBhc3BlY3RzLiIKQEAgLTM1NCw3
ICszNTYsNyBAQCBzdGF0aWMgYm9vbCBpc0RlcHRoT3JTdGVuY2lsRm9ybWF0KFdHUFVUZXh0dXJl
Rm9ybWF0IGZvcm1hdCkKICAgICB9CiB9CiAKLXN0YXRpYyB1aW50MzJfdCB0ZXhlbEJsb2NrV2lk
dGgoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0KQordWludDMyX3QgVGV4dHVyZTo6dGV4ZWxCbG9j
a1dpZHRoKFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCkKIHsKICAgICAvLyBodHRwczovL2dwdXdl
Yi5naXRodWIuaW8vZ3B1d2ViLyN0ZXhlbC1ibG9jay13aWR0aAogICAgIHN3aXRjaCAoZm9ybWF0
KSB7CkBAIC00NjgsNyArNDcwLDcgQEAgc3RhdGljIHVpbnQzMl90IHRleGVsQmxvY2tXaWR0aChX
R1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQpCiAgICAgfQogfQogCi1zdGF0aWMgdWludDMyX3QgdGV4
ZWxCbG9ja0hlaWdodChXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQpCit1aW50MzJfdCBUZXh0dXJl
Ojp0ZXhlbEJsb2NrSGVpZ2h0KFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCkKIHsKICAgICAvLyBo
dHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyN0ZXhlbC1ibG9jay1oZWlnaHQKICAgICBz
d2l0Y2ggKGZvcm1hdCkgewpAQCAtNTg3LDYgKzU4OSwxMzcgQEAgc3RhdGljIHVpbnQzMl90IHRl
eGVsQmxvY2tIZWlnaHQoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0KQogICAgIH0KIH0KIAorc3Rk
OjpvcHRpb25hbDx1aW50MzJfdD4gVGV4dHVyZTo6dGV4ZWxCbG9ja1NpemUoV0dQVVRleHR1cmVG
b3JtYXQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9VbmRlZmluZWQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4VW5vcm06CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SOFNub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUjhVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjhTaW50OgorICAgICAgICBy
ZXR1cm4gMTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IxNlVpbnQ6CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9SMTZTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjE2
RmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhVbm9ybToKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X1JHOFNub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkc4
VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFNpbnQ6CisgICAgICAgIHJldHVy
biAyOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjMyRmxvYXQ6CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9SMzJVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjMyU2lu
dDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMTZVaW50OgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfUkcxNlNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2Rmxv
YXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFVub3JtOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfUkdCQThVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9SR0JBOFNub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQThVaW50OgorICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQThTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfQkdSQThVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JHUkE4VW5vcm1T
cmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCMTBBMlVub3JtOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfUkcxMUIxMFVmbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X1JHQjlFNVVmbG9hdDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9SRzMyRmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzMyVWludDoK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMzJTaW50OgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfUkdCQTE2VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkExNlNp
bnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMTZGbG9hdDoKKyAgICAgICAgcmV0
dXJuIDg7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJGbG9hdDoKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X1JHQkEzMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9SR0JBMzJTaW50OgorICAgICAgICByZXR1cm4gMTY7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9TdGVuY2lsODoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9EZXB0aDE2VW5vcm06CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfRGVwdGgyNFBsdXM6CisgICAgICAgIEFTU0VSVChwaXhlbEZvcm1hdChmb3JtYXQp
ID09IE1UTFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0KTsKKyAgICAgICAgcmV0dXJuIDQ7CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDI0UGx1c1N0ZW5jaWw4OgorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFVub3Jt
U3RlbmNpbDg6CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9EZXB0aDMyRmxvYXQ6CisgICAgICAgIHJldHVybiA0OworICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0U3RlbmNpbDg6CisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm06CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm1TcmdiOgorICAgICAgICByZXR1cm4g
ODsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDMlJHQkFVbm9ybToKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0JDMlJHQkFVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiA4OworICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMzUkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfQkMzUkdCQVVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIDE2OworICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfQkM0UlVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QkM0UlNub3JtOgorICAgICAgICByZXR1cm4gODsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0JDNVJHVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzVSR1Nub3JtOgorICAg
ICAgICByZXR1cm4gMTY7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzZIUkdCVWZsb2F0
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM2SFJHQkZsb2F0OgorICAgICAgICByZXR1
cm4gMTY7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzdSR0JBVW5vcm06CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzdSR0JBVW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gMTY7
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOFVub3JtOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfRVRDMlJHQjhVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9FVEMyUkdCOEExVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdC
OEExVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQkE4VW5vcm06
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCQThVbm9ybVNyZ2I6CisgICAgICAg
IHJldHVybiA4OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUjExVW5vcm06CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FQUNSMTFTbm9ybToKKyAgICAgICAgcmV0dXJuIDg7Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FQUNSRzExVW5vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9FQUNSRzExU25vcm06CisgICAgICAgIHJldHVybiAxNjsKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEM0eDRVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEM0eDRVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg0VW5v
cm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg0VW5vcm1TcmdiOgorICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzV4NVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2
eDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDVVbm9ybVNyZ2I6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9BU1RDNng2VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QVNUQzh4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NVVub3JtU3Jn
YjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDZVbm9ybToKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEM4eDZVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9BU1RDOHg4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg4VW5v
cm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDVVbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg1VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzEweDZVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FT
VEMxMHg2VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDhVbm9y
bToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg4VW5vcm1TcmdiOgorICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDEwVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9BU1RDMTB4MTBVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9B
U1RDMTJ4MTBVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMFVub3Jt
U3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMlVub3JtOgorICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEyeDEyVW5vcm1TcmdiOgorICAgICAgICByZXR1cm4g
MTY7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9Gb3JjZTMyOgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCiBzdGF0aWMgYm9v
bCBpc1JlbmRlcmFibGVGb3JtYXQoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0KQogewogICAgIC8v
IGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI3JlbmRlcmFibGUtZm9ybWF0CkBAIC05
NzgsNyArMTExMSw3IEBAIGJvb2wgRGV2aWNlOjp2YWxpZGF0ZUNyZWF0ZVRleHR1cmUoY29uc3Qg
V0dQVVRleHR1cmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgICAgIC8vICJkZXNjcmlwdG9yLmZvcm1hdCBtdXN0IG5vdCBiZSBhIGNvbXBy
ZXNzZWQgZm9ybWF0IG9yIGRlcHRoLW9yLXN0ZW5jaWwgZm9ybWF0LiIKLSAgICAgICAgaWYgKGlz
Q29tcHJlc3NlZEZvcm1hdChkZXNjcmlwdG9yLmZvcm1hdCkgfHwgaXNEZXB0aE9yU3RlbmNpbEZv
cm1hdChkZXNjcmlwdG9yLmZvcm1hdCkpCisgICAgICAgIGlmIChpc0NvbXByZXNzZWRGb3JtYXQo
ZGVzY3JpcHRvci5mb3JtYXQpIHx8IFRleHR1cmU6OmlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoZGVz
Y3JpcHRvci5mb3JtYXQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzJEOgpAQCAtMTAwMCw3ICsxMTMzLDcg
QEAgYm9vbCBEZXZpY2U6OnZhbGlkYXRlQ3JlYXRlVGV4dHVyZShjb25zdCBXR1BVVGV4dHVyZURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAg
ICAgLy8gImRlc2NyaXB0b3IuZm9ybWF0IG11c3Qgbm90IGJlIGEgY29tcHJlc3NlZCBmb3JtYXQg
b3IgZGVwdGgtb3Itc3RlbmNpbCBmb3JtYXQuIgotICAgICAgICBpZiAoaXNDb21wcmVzc2VkRm9y
bWF0KGRlc2NyaXB0b3IuZm9ybWF0KSB8fCBpc0RlcHRoT3JTdGVuY2lsRm9ybWF0KGRlc2NyaXB0
b3IuZm9ybWF0KSkKKyAgICAgICAgaWYgKGlzQ29tcHJlc3NlZEZvcm1hdChkZXNjcmlwdG9yLmZv
cm1hdCkgfHwgVGV4dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChkZXNjcmlwdG9yLmZvcm1h
dCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
V0dQVVRleHR1cmVEaW1lbnNpb25fRm9yY2UzMjoKQEAgLTEwMDgsMTEgKzExNDEsMTEgQEAgYm9v
bCBEZXZpY2U6OnZhbGlkYXRlQ3JlYXRlVGV4dHVyZShjb25zdCBXR1BVVGV4dHVyZURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpCiAgICAgfQogCiAgICAgLy8gImRlc2NyaXB0b3Iuc2l6ZS53aWR0aCBt
dXN0IGJlIG11bHRpcGxlIG9mIHRleGVsIGJsb2NrIHdpZHRoLiIKLSAgICBpZiAoZGVzY3JpcHRv
ci5zaXplLndpZHRoICUgdGV4ZWxCbG9ja1dpZHRoKGRlc2NyaXB0b3IuZm9ybWF0KSkKKyAgICBp
ZiAoZGVzY3JpcHRvci5zaXplLndpZHRoICUgVGV4dHVyZTo6dGV4ZWxCbG9ja1dpZHRoKGRlc2Ny
aXB0b3IuZm9ybWF0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gImRlc2NyaXB0
b3Iuc2l6ZS5oZWlnaHQgbXVzdCBiZSBtdWx0aXBsZSBvZiB0ZXhlbCBibG9jayBoZWlnaHQuIgot
ICAgIGlmIChkZXNjcmlwdG9yLnNpemUuaGVpZ2h0ICUgdGV4ZWxCbG9ja0hlaWdodChkZXNjcmlw
dG9yLmZvcm1hdCkpCisgICAgaWYgKGRlc2NyaXB0b3Iuc2l6ZS5oZWlnaHQgJSBUZXh0dXJlOjp0
ZXhlbEJsb2NrSGVpZ2h0KGRlc2NyaXB0b3IuZm9ybWF0KSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgLy8gIklmIGRlc2NyaXB0b3Iuc2FtcGxlQ291bnQgPiAxOiIKQEAgLTE0MjQsNiAr
MTU1Nyw3OSBAQCB2b2lkIFRleHR1cmU6OnNldExhYmVsKFN0cmluZyYmIGxhYmVsKQogICAgIG1f
dGV4dHVyZS5sYWJlbCA9IGxhYmVsOwogfQogCitXR1BVRXh0ZW50M0QgVGV4dHVyZTo6bG9naWNh
bFRleHR1cmVTdWJyZXNvdXJjZUV4dGVudCh1aW50MzJfdCBtaXBMZXZlbCkKK3sKKyAgICAvLyBo
dHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNhYnN0cmFjdC1vcGRlZi1sb2dpY2FsLXRl
eHR1cmUtc3VicmVzb3VyY2UtZXh0ZW50CisKKyAgICBzd2l0Y2ggKG1fZGVzY3JpcHRvci5kaW1l
bnNpb24pIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzFEOgorICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgLy8gIlNldCBleHRlbnQud2lkdGggdG8gbWF4KDEsIGRlc2NyaXB0
b3Iuc2l6ZS53aWR0aCDiiasgbWlwTGV2ZWwpLiIKKyAgICAgICAgICAgIHN0ZDo6bWF4KHN0YXRp
Y19jYXN0PHVpbnQzMl90PigxKSwgbV9kZXNjcmlwdG9yLnNpemUud2lkdGggPj4gbWlwTGV2ZWwp
LAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuaGVpZ2h0IHRvIDEuIgorICAgICAgICAgICAg
MSwKKyAgICAgICAgICAgIC8vICJTZXQgZXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyB0byAxLiIK
KyAgICAgICAgICAgIDEgfTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzJEOgorICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgLy8gIlNldCBleHRlbnQud2lkdGggdG8gbWF4KDEs
IGRlc2NyaXB0b3Iuc2l6ZS53aWR0aCDiiasgbWlwTGV2ZWwpLiIKKyAgICAgICAgICAgIHN0ZDo6
bWF4KHN0YXRpY19jYXN0PHVpbnQzMl90PigxKSwgbV9kZXNjcmlwdG9yLnNpemUud2lkdGggPj4g
bWlwTGV2ZWwpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuaGVpZ2h0IHRvIG1heCgxLCBk
ZXNjcmlwdG9yLnNpemUuaGVpZ2h0IOKJqyBtaXBMZXZlbCkuIgorICAgICAgICAgICAgc3RkOjpt
YXgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEpLCBtX2Rlc2NyaXB0b3Iuc2l6ZS5oZWlnaHQgPj4g
bWlwTGV2ZWwpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuZGVwdGhPckFycmF5TGF5ZXJz
IHRvIDEuIgorICAgICAgICAgICAgMSB9OworICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25f
M0Q6CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC53aWR0aCB0
byBtYXgoMSwgZGVzY3JpcHRvci5zaXplLndpZHRoIOKJqyBtaXBMZXZlbCkuIgorICAgICAgICAg
ICAgc3RkOjptYXgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEpLCBtX2Rlc2NyaXB0b3Iuc2l6ZS53
aWR0aCA+PiBtaXBMZXZlbCksCisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5oZWlnaHQgdG8g
bWF4KDEsIGRlc2NyaXB0b3Iuc2l6ZS5oZWlnaHQg4omrIG1pcExldmVsKS4iCisgICAgICAgICAg
ICBzdGQ6Om1heChzdGF0aWNfY2FzdDx1aW50MzJfdD4oMSksIG1fZGVzY3JpcHRvci5zaXplLmhl
aWdodCA+PiBtaXBMZXZlbCksCisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5kZXB0aE9yQXJy
YXlMYXllcnMgdG8gbWF4KDEsIGRlc2NyaXB0b3Iuc2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMg4omr
IG1pcExldmVsKS4iCisgICAgICAgICAgICBzdGQ6Om1heChzdGF0aWNfY2FzdDx1aW50MzJfdD4o
MSksIG1fZGVzY3JpcHRvci5zaXplLmRlcHRoT3JBcnJheUxheWVycyA+PiBtaXBMZXZlbCkgfTsK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uX0ZvcmNlMzI6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gV0dQVUV4dGVudDNEIHsgfTsKKyAgICB9Cit9
CisKK1dHUFVFeHRlbnQzRCBUZXh0dXJlOjpwaHlzaWNhbFRleHR1cmVTdWJyZXNvdXJjZUV4dGVu
dCh1aW50MzJfdCBtaXBMZXZlbCkKK3sKKyAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8v
Z3B1d2ViLyNhYnN0cmFjdC1vcGRlZi1waHlzaWNhbC10ZXh0dXJlLXN1YnJlc291cmNlLWV4dGVu
dAorCisgICAgLy8gIkxldCBsb2dpY2FsRXh0ZW50IGJlIExvZ2ljYWwgdGV4dHVyZSBzdWJyZXNv
dXJjZSBleHRlbnQoZGVzY3JpcHRvciwgbWlwTGV2ZWwpLiIKKyAgICBhdXRvIGxvZ2ljYWxFeHRl
bnQgPSBsb2dpY2FsVGV4dHVyZVN1YnJlc291cmNlRXh0ZW50KG1pcExldmVsKTsKKworICAgIHN3
aXRjaCAobV9kZXNjcmlwdG9yLmRpbWVuc2lvbikgeworICAgIGNhc2UgV0dQVVRleHR1cmVEaW1l
bnNpb25fMUQ6CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC53
aWR0aCB0byBsb2dpY2FsRXh0ZW50LndpZHRoIHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgbXVs
dGlwbGUgb2YgZGVzY3JpcHRvcuKAmXMgdGV4ZWwgYmxvY2sgd2lkdGguIgorICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZih0ZXhlbEJsb2Nr
V2lkdGgobV9kZXNjcmlwdG9yLmZvcm1hdCksIGxvZ2ljYWxFeHRlbnQud2lkdGgpKSwKKyAgICAg
ICAgICAgIC8vICJTZXQgZXh0ZW50LmhlaWdodCB0byAxLiIKKyAgICAgICAgICAgIDEsCisgICAg
ICAgICAgICAvLyAiU2V0IGV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgdG8gMS4iCisgICAgICAg
ICAgICAxIH07CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8yRDoKKyAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgIC8vICJTZXQgZXh0ZW50LndpZHRoIHRvIGxvZ2ljYWxFeHRlbnQu
d2lkdGggcm91bmRlZCB1cCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiBkZXNjcmlwdG9y4oCZ
cyB0ZXhlbCBibG9jayB3aWR0aC4iCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHRleGVsQmxvY2tXaWR0aChtX2Rlc2NyaXB0b3IuZm9y
bWF0KSwgbG9naWNhbEV4dGVudC53aWR0aCkpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQu
aGVpZ2h0IHRvIGxvZ2ljYWxFeHRlbnQuaGVpZ2h0IHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3Qg
bXVsdGlwbGUgb2YgZGVzY3JpcHRvcuKAmXMgdGV4ZWwgYmxvY2sgaGVpZ2h0LiIKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2YodGV4ZWxC
bG9ja0hlaWdodChtX2Rlc2NyaXB0b3IuZm9ybWF0KSwgbG9naWNhbEV4dGVudC5oZWlnaHQpKSwK
KyAgICAgICAgICAgIC8vICJTZXQgZXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyB0byAxLiIKKyAg
ICAgICAgICAgIDEgfTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzNEOgorICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgLy8gIlNldCBleHRlbnQud2lkdGggdG8gbG9naWNhbEV4
dGVudC53aWR0aCByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIGRlc2NyaXB0
b3LigJlzIHRleGVsIGJsb2NrIHdpZHRoLiIKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQz
Ml90PihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2YodGV4ZWxCbG9ja1dpZHRoKG1fZGVzY3JpcHRv
ci5mb3JtYXQpLCBsb2dpY2FsRXh0ZW50LndpZHRoKSksCisgICAgICAgICAgICAvLyAiU2V0IGV4
dGVudC5oZWlnaHQgdG8gbG9naWNhbEV4dGVudC5oZWlnaHQgcm91bmRlZCB1cCB0byB0aGUgbmVh
cmVzdCBtdWx0aXBsZSBvZiBkZXNjcmlwdG9y4oCZcyB0ZXhlbCBibG9jayBoZWlnaHQuIgorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZih0
ZXhlbEJsb2NrSGVpZ2h0KG1fZGVzY3JpcHRvci5mb3JtYXQpLCBsb2dpY2FsRXh0ZW50LmhlaWdo
dCkpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzIHRvIGxv
Z2ljYWxFeHRlbnQuaGVpZ2h0LiIKKyAgICAgICAgICAgIGxvZ2ljYWxFeHRlbnQuaGVpZ2h0IH07
CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl9Gb3JjZTMyOgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdHUFVFeHRlbnQzRCB7IH07CisgICAgfQor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJHUFUKIAogI3ByYWdtYSBtYXJrIFdHUFUgU3R1YnMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>455820</attachid>
            <date>2022-03-25 20:14:19 -0700</date>
            <delta_ts>2022-03-25 21:30:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-238367-20220325201417.patch</filename>
            <type>text/plain</type>
            <size>71023</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxODQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCmluZGV4IDdmOGVjM2VjN2M3ZWRmMTM5
ZDY3NTM3ZDk5MjYxYjY4NGUyYmQ0M2UuLjEyZTY1YTZmZGZhYTYzYmVlNTU4ZjNkNjkzMTBhNmZh
OGIyOTRkZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMgQEAKKzIwMjItMDMtMjUgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViR1BVXSBJbXBs
ZW1lbnQgcmVzb3VyY2UgY29weWluZyByb3V0aW5lcyBhY2NvcmRpbmcgdG8gdGhlIHNwZWMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzODM2NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
aW1wbGVtZW50cyAzIHJlc291cmNlIGNvcHkgcm91dGluZXM6CisgICAgICAgIC0gY29weUJ1ZmZl
clRvVGV4dHVyZSgpCisgICAgICAgIC0gY29weVRleHR1cmVUb0J1ZmZlcigpCisgICAgICAgIC0g
Y29weVRleHR1cmVUb1RleHR1cmUoKQorICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgYWxs
IDMgYXQgb25jZSwgYmVjYXVzZSB0aGV5IGFsbCB1c2UgdGhlIHNhbWUgc2hhcmVkIGhlbHBlciBm
dW5jdGlvbnMuCisKKyAgICAgICAgVGhlc2UgYXJlIGFjdHVhbGx5IHN1cnByaXNpbmdseSBjb21w
bGljYXRlZCwgZm9yIGEgZmV3IHJlYXNvbnM6CisgICAgICAgIC0gVGV4dHVyZXMgY2FuIGJlIDEt
ZGltZW5zaW9uYWwsIDItZGltZW5zaW9uYWwsIG9yIDMtZGltZW5zaW9uYWwKKyAgICAgICAgLSBU
ZXh0dXJlcyBoYXZlIG1pcG1hcHMsIGFuZCB0aGUgc2l6ZSBvZiBlYWNoIG1pcG1hcCBpcyBkaWZm
ZXJlbnQKKyAgICAgICAgLSBUaGVyZSBhcmUgZGVwdGggdGV4dHVyZXMsIHN0ZW5jaWwgdGV4dHVy
ZXMsIGFuZCBkZXB0aC1zdGVuY2lsIHRleHR1cmVzLCBhbmQgY29weWluZworICAgICAgICAgICAg
ICBoYXMgdG8gd29yayB3aXRoIHRoZSBjb3JyZWN0ICJhc3BlY3QuIgorICAgICAgICAtIERlcGVu
ZGluZyBvbiB0aGUgdGV4dHVyZSBmb3JtYXQsIGFuIGluZGl2aWR1YWwgdGV4ZWwgbWF5IG5vdCBi
ZSBkaXJlY3RseSBhZGRyZXNzYWJsZS4KKyAgICAgICAgICAgICAgQ29tcHJlc3NlZCB0ZXh0dXJl
IGZvcm1hdHMgZW5jb2RlIGFuIGVudGlyZSBibG9jayAoZS5nLiA0eDQgb3IgOHg4KSBvZiBwaXhl
bHMgd2l0aAorICAgICAgICAgICAgICBhIHNpbmdsZSBpbmRpdmlzaWJsZSBjaHVuayBvZiBkYXRh
LgorICAgICAgICAtIENvcHlpbmcgZnJvbSBhIHJlZ2lvbiBvZiBhICJzdWJyZXNvdXJjZSIgdG8g
YSBkaWZmZXJlbnQgcmVnaW9uIG9mIHRoZSBzYW1lICJzdWJyZXNvdXJjZSIKKyAgICAgICAgICAg
ICAgaXMgZm9yYmlkZGVuLiBTbywgd2UgaGF2ZSB0byBoYXZlIGEgY29uY2VwdCBvZiAic3VicmVz
b3VyY2UiIHRvIHZhbGlkYXRlIHRoZXkgYXJlbid0CisgICAgICAgICAgICAgIGludGVyc2VjdGlu
Zy4KKyAgICAgICAgLSBBIHNpbmdsZSBvcGVyYXRpb24gaXMgc3VwcG9zZWQgdG8gYmUgYWJsZSB0
byBjb3B5IG11bHRpcGxlIHNsaWNlcyBvZiBhbiBhcnJheSB0ZXh0dXJlLAorICAgICAgICAgICAg
ICBidXQgTWV0YWwgb25seSBoYXMgZmFjaWxpdGllcyB0byBjb3B5IGEgc2luZ2xlIHNsaWNlIGF0
IGEgdGltZS4gV2UgdGhlcmVmb3JlIGhhdmUgdG8KKyAgICAgICAgICAgICAgY2FsbCBNZXRhbCBp
biBhIGxvb3AgdG8gY29weSBhbGwgdGhlIG5lY2Vzc2FyeSBzbGljZXMuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBsaW5rcyB0byB0aGUgc3BlYyB3aGVyZSByZWxldmFudCwgYW5kIHF1b3RlcyB0aGUg
c3BlYyBpbiBjb21tZW50cyB3aGVyZSByZWxldmFudC4KKworICAgICAgICBUZXN0czogYXBpL29w
ZXJhdGlvbi9jb21tYW5kX2J1ZmZlci9pbWFnZV9jb3B5LnNwZWMudHMKKyAgICAgICAgICAgICAg
IGFwaS92YWxpZGF0aW9uL2VuY29kaW5nL2NtZHMvYnVmZmVyX3RleHR1cmVfY29waWVzLnNwZWMu
dHMKKyAgICAgICAgICAgICAgIGFwaS92YWxpZGF0aW9uL2ltYWdlX2NvcHkvaW1hZ2VfY29weS50
cworCisgICAgICAgICogV2ViR1BVL0JpbmRHcm91cC5tbToKKyAgICAgICAgKFdlYkdQVTo6RGV2
aWNlOjpjcmVhdGVCaW5kR3JvdXApOgorICAgICAgICAqIFdlYkdQVS9Db21tYW5kRW5jb2Rlci5t
bToKKyAgICAgICAgKFdlYkdQVTo6Q29tbWFuZEVuY29kZXI6OmNvcHlCdWZmZXJUb0J1ZmZlcik6
CisgICAgICAgIChXZWJHUFU6OnZhbGlkYXRlSW1hZ2VDb3B5QnVmZmVyKToKKyAgICAgICAgKFdl
YkdQVTo6aW1hZ2VDb3B5VGV4dHVyZVN1YnJlc291cmNlU2l6ZSk6CisgICAgICAgIChXZWJHUFU6
OnZhbGlkYXRlSW1hZ2VDb3B5VGV4dHVyZSk6CisgICAgICAgIChXZWJHUFU6OmlzVmFsaWRJbWFn
ZUNvcHlEZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJHUFU6OnZhbGlkYXRlVGV4dHVyZUNvcHlS
YW5nZSk6CisgICAgICAgIChXZWJHUFU6OnZhbGlkYXRlTGluZWFyVGV4dHVyZURhdGEpOgorICAg
ICAgICAoV2ViR1BVOjp2YWxpZGF0ZUNvcHlCdWZmZXJUb1RleHR1cmUpOgorICAgICAgICAoV2Vi
R1BVOjpDb21tYW5kRW5jb2Rlcjo6Y29weUJ1ZmZlclRvVGV4dHVyZSk6CisgICAgICAgIChXZWJH
UFU6OnZhbGlkYXRlQ29weVRleHR1cmVUb0J1ZmZlcik6CisgICAgICAgIChXZWJHUFU6OkNvbW1h
bmRFbmNvZGVyOjpjb3B5VGV4dHVyZVRvQnVmZmVyKToKKyAgICAgICAgKFdlYkdQVTo6aXNTUkdC
Q29tcGF0aWJsZSk6CisgICAgICAgIChXZWJHUFU6OmFyZUNvcHlDb21wYXRpYmxlKToKKyAgICAg
ICAgKFdlYkdQVTo6dmFsaWRhdGVDb3B5VGV4dHVyZVRvVGV4dHVyZSk6CisgICAgICAgIChXZWJH
UFU6OkNvbW1hbmRFbmNvZGVyOjpjb3B5VGV4dHVyZVRvVGV4dHVyZSk6CisgICAgICAgICogV2Vi
R1BVL0NvbXB1dGVQaXBlbGluZS5tbToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVD
b21wdXRlUGlwZWxpbmUpOgorICAgICAgICAqIFdlYkdQVS9QaXBlbGluZUxheW91dC5tbToKKyAg
ICAgICAgKFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVQaXBlbGluZUxheW91dCk6CisgICAgICAgICog
V2ViR1BVL1NoYWRlck1vZHVsZS5tbToKKyAgICAgICAgKFdlYkdQVTo6ZWFybHlDb21waWxlU2hh
ZGVyTW9kdWxlKToKKyAgICAgICAgKiBXZWJHUFUvVGV4dHVyZS5oOgorICAgICAgICAqIFdlYkdQ
VS9UZXh0dXJlLm1tOgorICAgICAgICAoV2ViR1BVOjpUZXh0dXJlOjppc0RlcHRoT3JTdGVuY2ls
Rm9ybWF0KToKKyAgICAgICAgKFdlYkdQVTo6VGV4dHVyZTo6dGV4ZWxCbG9ja1dpZHRoKToKKyAg
ICAgICAgKFdlYkdQVTo6VGV4dHVyZTo6dGV4ZWxCbG9ja0hlaWdodCk6CisgICAgICAgIChXZWJH
UFU6OlRleHR1cmU6OnRleGVsQmxvY2tTaXplKToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjp2
YWxpZGF0ZUNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViR1BVOjpUZXh0dXJlOjpwaHlzaWNh
bFNpemUpOgorICAgICAgICAoV2ViR1BVOjppc0RlcHRoT3JTdGVuY2lsRm9ybWF0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkdQVTo6dGV4ZWxCbG9ja1dpZHRoKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkdQVTo6dGV4ZWxCbG9ja0hlaWdodCk6IERlbGV0ZWQuCisKIDIwMjItMDMtMjQgIE15bGVz
IEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViR1BVXSBG
aXggdGhlIHdhdGNoT1MgYnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0Jp
bmRHcm91cC5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0JpbmRHcm91cC5tbQppbmRleCA2M2Fl
Y2JhZmQ3Y2FlZTU0MzczYTg1MGE4OTNkMjU0NjBjMzQ0MmMyLi5jZDlmNjA3NjJhMDc1ZDUzOWI5
NjFjYWE2M2YyNDg2MTlmYmIxZjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9C
aW5kR3JvdXAubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQmluZEdyb3VwLm1tCkBAIC01
NSw3ICs1NSw3IEBAIFJlZlB0cjxCaW5kR3JvdXA+IERldmljZTo6Y3JlYXRlQmluZEdyb3VwKGNv
bnN0IFdHUFVCaW5kR3JvdXBEZXNjcmlwdG9yJiBkZXNjcmlwCiAgICAgaWYgKGRlc2NyaXB0b3Iu
bmV4dEluQ2hhaW4pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgY29uc3QgQmluZEdy
b3VwTGF5b3V0JiBiaW5kR3JvdXBMYXlvdXQgPSBXZWJHUFU6OmZyb21BUEkoZGVzY3JpcHRvci5s
YXlvdXQpOworICAgIGNvbnN0IEJpbmRHcm91cExheW91dCYgYmluZEdyb3VwTGF5b3V0ID0gZnJv
bUFQSShkZXNjcmlwdG9yLmxheW91dCk7CiAKICAgICAvLyBGSVhNRShQRVJGT1JNQU5DRSk6IERv
bid0IGFsbG9jYXRlIDMgbmV3IGJ1ZmZlcnMgZm9yIGV2ZXJ5IGJpbmQgZ3JvdXAuCiAgICAgLy8g
SW4gZmFjdCwgZG9uJ3QgZXZlbiBhbGxvY2F0ZSBhIHNpbmdsZSBuZXcgYnVmZmVyIGZvciBldmVy
eSBiaW5kIGdyb3VwLgpAQCAtOTAsMTggKzkwLDE4IEBAIFJlZlB0cjxCaW5kR3JvdXA+IERldmlj
ZTo6Y3JlYXRlQmluZEdyb3VwKGNvbnN0IFdHUFVCaW5kR3JvdXBEZXNjcmlwdG9yJiBkZXNjcmlw
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBpZiAoYnVmZmVySXNQcmVz
ZW50KSB7Ci0gICAgICAgICAgICBpZDxNVExCdWZmZXI+IGJ1ZmZlciA9IFdlYkdQVTo6ZnJvbUFQ
SShlbnRyeS5idWZmZXIpLmJ1ZmZlcigpOworICAgICAgICAgICAgaWQ8TVRMQnVmZmVyPiBidWZm
ZXIgPSBmcm9tQVBJKGVudHJ5LmJ1ZmZlcikuYnVmZmVyKCk7CiAgICAgICAgICAgICAvLyBGSVhN
RTogVXNlIGNoZWNrZWQgY2FzdHMuCiAgICAgICAgICAgICBbdmVydGV4QXJndW1lbnRFbmNvZGVy
IHNldEJ1ZmZlcjpidWZmZXIgb2Zmc2V0OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KGVudHJ5Lm9m
ZnNldCkgYXRJbmRleDplbnRyeS5iaW5kaW5nXTsKICAgICAgICAgICAgIFtmcmFnbWVudEFyZ3Vt
ZW50RW5jb2RlciBzZXRCdWZmZXI6YnVmZmVyIG9mZnNldDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2Vy
PihlbnRyeS5vZmZzZXQpIGF0SW5kZXg6ZW50cnkuYmluZGluZ107CiAgICAgICAgICAgICBbY29t
cHV0ZUFyZ3VtZW50RW5jb2RlciBzZXRCdWZmZXI6YnVmZmVyIG9mZnNldDpzdGF0aWNfY2FzdDxO
U1VJbnRlZ2VyPihlbnRyeS5vZmZzZXQpIGF0SW5kZXg6ZW50cnkuYmluZGluZ107CiAgICAgICAg
IH0gZWxzZSBpZiAoc2FtcGxlcklzUHJlc2VudCkgewotICAgICAgICAgICAgaWQ8TVRMU2FtcGxl
clN0YXRlPiBzYW1wbGVyID0gV2ViR1BVOjpmcm9tQVBJKGVudHJ5LnNhbXBsZXIpLnNhbXBsZXJT
dGF0ZSgpOworICAgICAgICAgICAgaWQ8TVRMU2FtcGxlclN0YXRlPiBzYW1wbGVyID0gZnJvbUFQ
SShlbnRyeS5zYW1wbGVyKS5zYW1wbGVyU3RhdGUoKTsKICAgICAgICAgICAgIFt2ZXJ0ZXhBcmd1
bWVudEVuY29kZXIgc2V0U2FtcGxlclN0YXRlOnNhbXBsZXIgYXRJbmRleDplbnRyeS5iaW5kaW5n
XTsKICAgICAgICAgICAgIFtmcmFnbWVudEFyZ3VtZW50RW5jb2RlciBzZXRTYW1wbGVyU3RhdGU6
c2FtcGxlciBhdEluZGV4OmVudHJ5LmJpbmRpbmddOwogICAgICAgICAgICAgW2NvbXB1dGVBcmd1
bWVudEVuY29kZXIgc2V0U2FtcGxlclN0YXRlOnNhbXBsZXIgYXRJbmRleDplbnRyeS5iaW5kaW5n
XTsKICAgICAgICAgfSBlbHNlIGlmICh0ZXh0dXJlVmlld0lzUHJlc2VudCkgewotICAgICAgICAg
ICAgaWQ8TVRMVGV4dHVyZT4gdGV4dHVyZSA9IFdlYkdQVTo6ZnJvbUFQSShlbnRyeS50ZXh0dXJl
VmlldykudGV4dHVyZSgpOworICAgICAgICAgICAgaWQ8TVRMVGV4dHVyZT4gdGV4dHVyZSA9IGZy
b21BUEkoZW50cnkudGV4dHVyZVZpZXcpLnRleHR1cmUoKTsKICAgICAgICAgICAgIFt2ZXJ0ZXhB
cmd1bWVudEVuY29kZXIgc2V0VGV4dHVyZTp0ZXh0dXJlIGF0SW5kZXg6ZW50cnkuYmluZGluZ107
CiAgICAgICAgICAgICBbZnJhZ21lbnRBcmd1bWVudEVuY29kZXIgc2V0VGV4dHVyZTp0ZXh0dXJl
IGF0SW5kZXg6ZW50cnkuYmluZGluZ107CiAgICAgICAgICAgICBbY29tcHV0ZUFyZ3VtZW50RW5j
b2RlciBzZXRUZXh0dXJlOnRleHR1cmUgYXRJbmRleDplbnRyeS5iaW5kaW5nXTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLm1tIGIvU291cmNlL1dlYkdQ
VS9XZWJHUFUvQ29tbWFuZEVuY29kZXIubW0KaW5kZXggYWU0YmFjNjA4NWI0YzVmMmVlNGNkOWM3
YzNhM2UwYjAzZDc2ZDc5Mi4uMTU5YmRlYTY4MzM3MGY5YzU5NmY0YzIzMWZmYTYyMTY1ZWRmMDM4
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFuZEVuY29kZXIubW0KKysr
IGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFuZEVuY29kZXIubW0KQEAgLTMzLDYgKzMzLDcg
QEAKICNpbXBvcnQgIkRldmljZS5oIgogI2ltcG9ydCAiUXVlcnlTZXQuaCIKICNpbXBvcnQgIlJl
bmRlclBhc3NFbmNvZGVyLmgiCisjaW1wb3J0ICJUZXh0dXJlLmgiCiAKIG5hbWVzcGFjZSBXZWJH
UFUgewogCkBAIC0xNTUsMjggKzE1NiwxMDc3IEBAIHZvaWQgQ29tbWFuZEVuY29kZXI6OmNvcHlC
dWZmZXJUb0J1ZmZlcihjb25zdCBCdWZmZXImIHNvdXJjZSwgdWludDY0X3Qgc291cmNlT2ZmCiAK
ICAgICBlbnN1cmVCbGl0Q29tbWFuZEVuY29kZXIoKTsKIAotICAgIFttX2JsaXRDb21tYW5kRW5j
b2RlciBjb3B5RnJvbUJ1ZmZlcjpzb3VyY2UuYnVmZmVyKCkgc291cmNlT2Zmc2V0OnN0YXRpY19j
YXN0PE5TVUludGVnZXI+KHNvdXJjZU9mZnNldCkgdG9CdWZmZXI6ZGVzdGluYXRpb24uYnVmZmVy
KCkgZGVzdGluYXRpb25PZmZzZXQ6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oZGVzdGluYXRpb25P
ZmZzZXQpIHNpemU6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2l6ZSldOworICAgIFttX2JsaXRD
b21tYW5kRW5jb2RlcgorICAgICAgICBjb3B5RnJvbUJ1ZmZlcjpzb3VyY2UuYnVmZmVyKCkKKyAg
ICAgICAgc291cmNlT2Zmc2V0OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNvdXJjZU9mZnNldCkK
KyAgICAgICAgdG9CdWZmZXI6ZGVzdGluYXRpb24uYnVmZmVyKCkKKyAgICAgICAgZGVzdGluYXRp
b25PZmZzZXQ6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oZGVzdGluYXRpb25PZmZzZXQpCisgICAg
ICAgIHNpemU6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2l6ZSldOworfQorCitzdGF0aWMgYm9v
bCB2YWxpZGF0ZUltYWdlQ29weUJ1ZmZlcihjb25zdCBXR1BVSW1hZ2VDb3B5QnVmZmVyJiBpbWFn
ZUNvcHlCdWZmZXIpCit7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8j
YWJzdHJhY3Qtb3BkZWYtdmFsaWRhdGluZy1ncHVpbWFnZWNvcHlidWZmZXIKKworICAgIC8vIEZJ
WE1FOiAiaW1hZ2VDb3B5QnVmZmVyLmJ1ZmZlciBtdXN0IGJlIGEgdmFsaWQgR1BVQnVmZmVyLiIK
KworICAgIC8vICJpbWFnZUNvcHlCdWZmZXIuYnl0ZXNQZXJSb3cgbXVzdCBiZSBhIG11bHRpcGxl
IG9mIDI1Ni4iCisgICAgaWYgKGltYWdlQ29weUJ1ZmZlci5sYXlvdXQuYnl0ZXNQZXJSb3cgJSAy
NTYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3Rh
dGljIFdHUFVFeHRlbnQzRCBpbWFnZUNvcHlUZXh0dXJlU3VicmVzb3VyY2VTaXplKGNvbnN0IFdH
UFVJbWFnZUNvcHlUZXh0dXJlJiBpbWFnZUNvcHlUZXh0dXJlKQoreworICAgIC8vIGh0dHBzOi8v
Z3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2ltYWdlY29weXRleHR1cmUtc3VicmVzb3VyY2Utc2l6
ZQorCisgICAgLy8gIkl0cyB3aWR0aCwgaGVpZ2h0IGFuZCBkZXB0aE9yQXJyYXlMYXllcnMgYXJl
IHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgZGVwdGgsIHJlc3BlY3RpdmVseSwgb2YgdGhlIHBoeXNp
Y2FsIHNpemUgb2YgaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlIHN1YnJlc291cmNlIGF0IG1pcG1h
cCBsZXZlbCBpbWFnZUNvcHlUZXh0dXJlLm1pcExldmVsLiIKKyAgICByZXR1cm4gZnJvbUFQSShp
bWFnZUNvcHlUZXh0dXJlLnRleHR1cmUpLnBoeXNpY2FsVGV4dHVyZVN1YnJlc291cmNlRXh0ZW50
KGltYWdlQ29weVRleHR1cmUubWlwTGV2ZWwpOworfQorCitzdGF0aWMgYm9vbCB2YWxpZGF0ZUlt
YWdlQ29weVRleHR1cmUoY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUmIGltYWdlQ29weVRleHR1
cmUsIGNvbnN0IFdHUFVFeHRlbnQzRCYgY29weVNpemUpCit7CisgICAgLy8gaHR0cHM6Ly9ncHV3
ZWIuZ2l0aHViLmlvL2dwdXdlYi8jYWJzdHJhY3Qtb3BkZWYtdmFsaWRhdGluZy1ncHVpbWFnZWNv
cHl0ZXh0dXJlCisKKyAgICAvLyAiYmxvY2tXaWR0aCBiZSB0aGUgdGV4ZWwgYmxvY2sgd2lkdGgg
b2YgaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlLltbZGVzY3JpcHRvcl1dLmZvcm1hdC4iCisgICAg
YXV0byBibG9ja1dpZHRoID0gVGV4dHVyZTo6dGV4ZWxCbG9ja1dpZHRoKGZyb21BUEkoaW1hZ2VD
b3B5VGV4dHVyZS50ZXh0dXJlKS5kZXNjcmlwdG9yKCkuZm9ybWF0KTsKKworICAgIC8vICJibG9j
a0hlaWdodCBiZSB0aGUgdGV4ZWwgYmxvY2sgaGVpZ2h0IG9mIGltYWdlQ29weVRleHR1cmUudGV4
dHVyZS5bW2Rlc2NyaXB0b3JdXS5mb3JtYXQuIgorICAgIGF1dG8gYmxvY2tIZWlnaHQgPSBUZXh0
dXJlOjp0ZXhlbEJsb2NrSGVpZ2h0KGZyb21BUEkoaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlKS5k
ZXNjcmlwdG9yKCkuZm9ybWF0KTsKKworICAgIC8vIEZJWE1FOiAiaW1hZ2VDb3B5VGV4dHVyZS50
ZXh0dXJlIG11c3QgYmUgYSB2YWxpZCBHUFVUZXh0dXJlLiIKKworICAgIC8vICJpbWFnZUNvcHlU
ZXh0dXJlLm1pcExldmVsIG11c3QgYmUgbGVzcyB0aGFuIHRoZSBbW2Rlc2NyaXB0b3JdXS5taXBM
ZXZlbENvdW50IG9mIGltYWdlQ29weVRleHR1cmUudGV4dHVyZS4iCisgICAgaWYgKGltYWdlQ29w
eVRleHR1cmUubWlwTGV2ZWwgPj0gZnJvbUFQSShpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUpLmRl
c2NyaXB0b3IoKS5taXBMZXZlbENvdW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyAiaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4ueCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgYmxvY2tX
aWR0aC4iCisgICAgaWYgKGltYWdlQ29weVRleHR1cmUub3JpZ2luLnggJSBibG9ja1dpZHRoKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4u
eSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgYmxvY2tIZWlnaHQuIgorICAgIGlmIChpbWFnZUNvcHlU
ZXh0dXJlLm9yaWdpbi55ICUgYmxvY2tIZWlnaHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIC8vICJpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uZm9ybWF0IGlz
IGEgZGVwdGgtc3RlbmNpbCBmb3JtYXQuIgorICAgIC8vICJpbWFnZUNvcHlUZXh0dXJlLnRleHR1
cmUuW1tkZXNjcmlwdG9yXV0uc2FtcGxlQ291bnQgaXMgZ3JlYXRlciB0aGFuIDEuIgorICAgIGlm
IChUZXh0dXJlOjppc0RlcHRoT3JTdGVuY2lsRm9ybWF0KGZyb21BUEkoaW1hZ2VDb3B5VGV4dHVy
ZS50ZXh0dXJlKS5kZXNjcmlwdG9yKCkuZm9ybWF0KQorICAgICAgICB8fCBmcm9tQVBJKGltYWdl
Q29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLnNhbXBsZUNvdW50ID4gMSkgeworICAg
ICAgICAvLyAiVGhlIGltYWdlQ29weVRleHR1cmUgc3VicmVzb3VyY2Ugc2l6ZSBvZiBpbWFnZUNv
cHlUZXh0dXJlIGlzIGVxdWFsIHRvIGNvcHlTaXplIgorICAgICAgICBhdXRvIHN1YnJlc291cmNl
U2l6ZSA9IGltYWdlQ29weVRleHR1cmVTdWJyZXNvdXJjZVNpemUoaW1hZ2VDb3B5VGV4dHVyZSk7
CisgICAgICAgIGlmIChzdWJyZXNvdXJjZVNpemUud2lkdGggIT0gY29weVNpemUud2lkdGgKKyAg
ICAgICAgICAgIHx8IHN1YnJlc291cmNlU2l6ZS5oZWlnaHQgIT0gY29weVNpemUuaGVpZ2h0Cisg
ICAgICAgICAgICB8fCBzdWJyZXNvdXJjZVNpemUuZGVwdGhPckFycmF5TGF5ZXJzICE9IGNvcHlT
aXplLmRlcHRoT3JBcnJheUxheWVycykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgaXNWYWxpZEltYWdlQ29weURl
c3RpbmF0aW9uKFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCwgV0dQVVRleHR1cmVBc3BlY3QgYXNw
ZWN0KQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2RlcHRoLWZv
cm1hdHMKKworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9VbmRlZmluZWQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SOFVub3JtOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfUjhTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4
VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4U2ludDoKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X1IxNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMTZTaW50
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjE2RmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9SRzhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFNub3Jt
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkc4VWludDoKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X1JHOFNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMzJGbG9hdDoK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IzMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9SMzJTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkcxNlVpbnQ6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X1JHMTZGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4VW5vcm06
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFVub3JtU3JnYjoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X1JHQkE4U25vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9S
R0JBOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFNpbnQ6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9CR1JBOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfQkdSQThVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0IxMEEyVW5v
cm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzExQjEwVWZsb2F0OgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfUkdCOUU1VWZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUkczMkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkczMlVpbnQ6CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzMyU2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X1JHQkExNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMTZTaW50Ogor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTE2RmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9SR0JBMzJGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkEz
MlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJTaW50OgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9TdGVuY2lsODoKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMTZVbm9ybToKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDI0UGx1czoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFBsdXNTdGVuY2lsODoK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRVbm9ybVN0ZW5jaWw4OgorICAgICAg
ICByZXR1cm4gYXNwZWN0ID09IFdHUFVUZXh0dXJlQXNwZWN0X1N0ZW5jaWxPbmx5OworICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDMyRmxvYXRTdGVuY2lsODoKKyAgICAg
ICAgcmV0dXJuIGFzcGVjdCA9PSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25seTsKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDMVJHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0JDMVJHQkFVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzJS
R0JBVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzJSR0JBVW5vcm1TcmdiOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMzUkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfQkMzUkdCQVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0JDNFJVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNFJTbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNVJHVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9CQzVSR1Nub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM2SFJHQlVmbG9h
dDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNkhSR0JGbG9hdDoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0JDN1JHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0JDN1JHQkFVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOFVu
b3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhVbm9ybVNyZ2I6CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOEExVW5vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9FVEMyUkdCOEExVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfRVRDMlJHQkE4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCQThV
bm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FQUNSMTFVbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1IxMVNub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfRUFDUkcxMVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUkcxMVNu
b3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzR4NFVub3JtOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfQVNUQzR4NFVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0FTVEM1eDRVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM1eDRV
bm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg1VW5vcm06CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg1VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzZ4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNU
QzZ4NVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDZVbm9ybToK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDZVbm9ybVNyZ2I6CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg1VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9BU1RDOHg1VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NlVu
b3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NlVub3JtU3JnYjoKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0FTVEM4eDhVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RD
MTB4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDVVbm9ybVNyZ2I6
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NlVub3JtOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfQVNUQzEweDZVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9BU1RDMTB4OFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDhV
bm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4MTBVbm9ybToKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHgxMFVub3JtU3JnYjoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfQVNUQzEyeDEwVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEy
eDEyVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTJVbm9ybVNyZ2I6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0ZvcmNl
MzI6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCitzdGF0aWMgYm9vbCB2YWxpZGF0ZVRleHR1cmVDb3B5UmFuZ2UoY29uc3Qg
V0dQVUltYWdlQ29weVRleHR1cmUmIGltYWdlQ29weVRleHR1cmUsIGNvbnN0IFdHUFVFeHRlbnQz
RCYgY29weVNpemUpCit7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8j
dmFsaWRhdGluZy10ZXh0dXJlLWNvcHktcmFuZ2UKKworICAgIC8vICJMZXQgYmxvY2tXaWR0aCBi
ZSB0aGUgdGV4ZWwgYmxvY2sgd2lkdGggb2YgaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlLltbZGVz
Y3JpcHRvcl1dLmZvcm1hdC4iCisgICAgYXV0byBibG9ja1dpZHRoID0gVGV4dHVyZTo6dGV4ZWxC
bG9ja1dpZHRoKGZyb21BUEkoaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlKS5kZXNjcmlwdG9yKCku
Zm9ybWF0KTsKKworICAgIC8vICJMZXQgYmxvY2tIZWlnaHQgYmUgdGhlIHRleGVsIGJsb2NrIGhl
aWdodCBvZiBpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uZm9ybWF0LiIK
KyAgICBhdXRvIGJsb2NrSGVpZ2h0ID0gVGV4dHVyZTo6dGV4ZWxCbG9ja0hlaWdodChmcm9tQVBJ
KGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7CisKKyAgICAv
LyAiTGV0IHN1YnJlc291cmNlU2l6ZSBiZSB0aGUgaW1hZ2VDb3B5VGV4dHVyZSBzdWJyZXNvdXJj
ZSBzaXplIG9mIGltYWdlQ29weVRleHR1cmUuIgorICAgIGF1dG8gc3VicmVzb3VyY2VTaXplID0g
aW1hZ2VDb3B5VGV4dHVyZVN1YnJlc291cmNlU2l6ZShpbWFnZUNvcHlUZXh0dXJlKTsKKworICAg
IC8vICIoaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4ueCArIGNvcHlTaXplLndpZHRoKSDiiaQgc3Vi
cmVzb3VyY2VTaXplLndpZHRoIgorICAgIC8vIEZJWE1FOiBVc2VkIGNoZWNrZWQgYXJpdGhtZXRp
YworICAgIGlmICgoaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4ueCArIGNvcHlTaXplLndpZHRoKSA+
IHN1YnJlc291cmNlU2l6ZS53aWR0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
IihpbWFnZUNvcHlUZXh0dXJlLm9yaWdpbi55ICsgY29weVNpemUuaGVpZ2h0KSDiiaQgc3VicmVz
b3VyY2VTaXplLmhlaWdodCIKKyAgICAvLyBGSVhNRTogVXNlZCBjaGVja2VkIGFyaXRobWV0aWMK
KyAgICBpZiAoKGltYWdlQ29weVRleHR1cmUub3JpZ2luLnkgKyBjb3B5U2l6ZS5oZWlnaHQpID4g
c3VicmVzb3VyY2VTaXplLmhlaWdodCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
IihpbWFnZUNvcHlUZXh0dXJlLm9yaWdpbi56ICsgY29weVNpemUuZGVwdGhPckFycmF5TGF5ZXJz
KSDiiaQgc3VicmVzb3VyY2VTaXplLmRlcHRoT3JBcnJheUxheWVycyIKKyAgICAvLyBGSVhNRTog
VXNlZCBjaGVja2VkIGFyaXRobWV0aWMKKyAgICBpZiAoKGltYWdlQ29weVRleHR1cmUub3JpZ2lu
LnogKyBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMpID4gc3VicmVzb3VyY2VTaXplLmRlcHRo
T3JBcnJheUxheWVycykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gImNvcHlTaXpl
LndpZHRoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBibG9ja1dpZHRoLiIKKyAgICBpZiAoY29weVNp
emUud2lkdGggJSBibG9ja1dpZHRoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAi
Y29weVNpemUuaGVpZ2h0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiBibG9ja0hlaWdodC4iCisgICAg
aWYgKGNvcHlTaXplLmhlaWdodCAlIGJsb2NrSGVpZ2h0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgdmFsaWRhdGVMaW5lYXJUZXh0
dXJlRGF0YShjb25zdCBXR1BVVGV4dHVyZURhdGFMYXlvdXQmIGxheW91dCwgdWludDY0X3QgYnl0
ZVNpemUsIFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCwgV0dQVUV4dGVudDNEIGNvcHlFeHRlbnQp
Cit7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jYWJzdHJhY3Qtb3Bk
ZWYtdmFsaWRhdGluZy1saW5lYXItdGV4dHVyZS1kYXRhCisKKyAgICAvLyAiTGV0IGJsb2NrV2lk
dGgsIGJsb2NrSGVpZ2h0LCBhbmQgYmxvY2tTaXplIGJlIHRoZSB0ZXhlbCBibG9jayB3aWR0aCwg
aGVpZ2h0LCBhbmQgc2l6ZSBvZiBmb3JtYXQuIgorICAgIGF1dG8gYmxvY2tXaWR0aCA9IFRleHR1
cmU6OnRleGVsQmxvY2tXaWR0aChmb3JtYXQpOworICAgIGF1dG8gYmxvY2tIZWlnaHQgPSBUZXh0
dXJlOjp0ZXhlbEJsb2NrSGVpZ2h0KGZvcm1hdCk7CisgICAgYXV0byBibG9ja1NpemUgPSBUZXh0
dXJlOjp0ZXhlbEJsb2NrU2l6ZShmb3JtYXQpOworICAgIGlmICghYmxvY2tTaXplKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiSXQgaXMgYXNzdW1lZCB0aGF0IGNvcHlFeHRlbnQu
d2lkdGggaXMgYSBtdWx0aXBsZSBvZiBibG9ja1dpZHRoIGFuZCBjb3B5RXh0ZW50LmhlaWdodCBp
cyBhIG11bHRpcGxlIG9mIGJsb2NrSGVpZ2h0LiIKKworICAgIC8vICJ3aWR0aEluQmxvY2tzIGJl
IGNvcHlFeHRlbnQud2lkdGggw7cgYmxvY2tXaWR0aC4iCisgICAgYXV0byB3aWR0aEluQmxvY2tz
ID0gY29weUV4dGVudC53aWR0aCAvIGJsb2NrV2lkdGg7CisKKyAgICAvLyAiaGVpZ2h0SW5CbG9j
a3MgYmUgY29weUV4dGVudC5oZWlnaHQgw7cgYmxvY2tIZWlnaHQuIgorICAgIGF1dG8gaGVpZ2h0
SW5CbG9ja3MgPSBjb3B5RXh0ZW50LmhlaWdodCAvIGJsb2NrSGVpZ2h0OworCisgICAgLy8gImJ5
dGVzSW5MYXN0Um93IGJlIGJsb2NrU2l6ZSDDlyB3aWR0aEluQmxvY2tzLiIKKyAgICAvLyBGSVhN
RTogVXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KKyAgICBhdXRvIGJ5dGVzSW5MYXN0Um93ID0gKmJs
b2NrU2l6ZSAqIHdpZHRoSW5CbG9ja3M7CisKKyAgICAvLyAiSWYgaGVpZ2h0SW5CbG9ja3MgPiAx
IgorICAgIGlmIChoZWlnaHRJbkJsb2NrcyA+IDEpIHsKKyAgICAgICAgLy8gImxheW91dC5ieXRl
c1BlclJvdyBtdXN0IGJlIHNwZWNpZmllZC4iCisgICAgICAgIGlmIChsYXlvdXQuYnl0ZXNQZXJS
b3cgPT0gV0dQVV9DT1BZX1NUUklERV9VTkRFRklORUQpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgLy8gIklmIGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4g
MSIKKyAgICBpZiAoY29weUV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgPiAxKSB7CisgICAgICAg
IC8vICJsYXlvdXQuYnl0ZXNQZXJSb3cgYW5kIGxheW91dC5yb3dzUGVySW1hZ2UgbXVzdCBiZSBz
cGVjaWZpZWQuIgorICAgICAgICBpZiAobGF5b3V0LmJ5dGVzUGVyUm93ID09IFdHUFVfQ09QWV9T
VFJJREVfVU5ERUZJTkVEIHx8IGxheW91dC5yb3dzUGVySW1hZ2UgPT0gV0dQVV9DT1BZX1NUUklE
RV9VTkRFRklORUQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8g
IklmIHNwZWNpZmllZCIKKyAgICBpZiAobGF5b3V0LmJ5dGVzUGVyUm93ICE9IFdHUFVfQ09QWV9T
VFJJREVfVU5ERUZJTkVEKSB7CisgICAgICAgIC8vICJsYXlvdXQuYnl0ZXNQZXJSb3cgbXVzdCBi
ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYnl0ZXNJbkxhc3RSb3cuIgorICAgICAgICBpZiAo
bGF5b3V0LmJ5dGVzUGVyUm93IDw9IGJ5dGVzSW5MYXN0Um93KQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIC8vICJJZiBzcGVjaWZpZWQiCisgICAgaWYgKGxheW91dC5y
b3dzUGVySW1hZ2UgIT0gV0dQVV9DT1BZX1NUUklERV9VTkRFRklORUQpIHsKKyAgICAgICAgLy8g
ImxheW91dC5yb3dzUGVySW1hZ2UgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gaGVp
Z2h0SW5CbG9ja3MuIgorICAgICAgICBpZiAobGF5b3V0LnJvd3NQZXJJbWFnZSA8IGhlaWdodElu
QmxvY2tzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJMZXQg
cmVxdWlyZWRCeXRlc0luQ29weSBiZSAwLiIKKyAgICBhdXRvIHJlcXVpcmVkQnl0ZXNJbkNvcHkg
PSAwOworCisgICAgLy8gIklmIGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMToiCisg
ICAgaWYgKGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMSkgeworICAgICAgICAvLyAi
TGV0IGJ5dGVzUGVySW1hZ2UgYmUgbGF5b3V0LmJ5dGVzUGVyUm93IMOXIGxheW91dC5yb3dzUGVy
SW1hZ2UuIgorICAgICAgICAvLyBGSVhNRTogVXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KKyAgICAg
ICAgYXV0byBieXRlc1BlckltYWdlID0gbGF5b3V0LmJ5dGVzUGVyUm93ICogbGF5b3V0LnJvd3NQ
ZXJJbWFnZTsKKworICAgICAgICAvLyAiTGV0IGJ5dGVzQmVmb3JlTGFzdEltYWdlIGJlIGJ5dGVz
UGVySW1hZ2Ugw5cgKGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzIOKIkiAxKS4iCisgICAg
ICAgIGF1dG8gYnl0ZXNCZWZvcmVMYXN0SW1hZ2UgPSBieXRlc1BlckltYWdlICogKGNvcHlFeHRl
bnQuZGVwdGhPckFycmF5TGF5ZXJzIC0gMSk7CisKKyAgICAgICAgLy8gIkFkZCBieXRlc0JlZm9y
ZUxhc3RJbWFnZSB0byByZXF1aXJlZEJ5dGVzSW5Db3B5LiIKKyAgICAgICAgcmVxdWlyZWRCeXRl
c0luQ29weSArPSBieXRlc0JlZm9yZUxhc3RJbWFnZTsKKyAgICB9CisKKyAgICAvLyAiSWYgY29w
eUV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgPiAwOiIKKyAgICBpZiAoY29weUV4dGVudC5kZXB0
aE9yQXJyYXlMYXllcnMgPiAwKSB7CisgICAgICAgIC8vICJJZiBoZWlnaHRJbkJsb2NrcyA+IDEi
CisgICAgICAgIGlmIChoZWlnaHRJbkJsb2NrcyA+IDEpIHsKKyAgICAgICAgICAgIC8vICJhZGQg
bGF5b3V0LmJ5dGVzUGVyUm93IMOXIChoZWlnaHRJbkJsb2NrcyDiiJIgMSkgdG8gcmVxdWlyZWRC
eXRlc0luQ29weS4iCisgICAgICAgICAgICByZXF1aXJlZEJ5dGVzSW5Db3B5ICs9IGxheW91dC5i
eXRlc1BlclJvdyAqIChoZWlnaHRJbkJsb2NrcyAtIDEpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gIklmIGhlaWdodEluQmxvY2tzID4gMCIKKyAgICAgICAgaWYgKGhlaWdodEluQmxvY2tzID4g
MCkgeworICAgICAgICAgICAgLy8gImFkZCBieXRlc0luTGFzdFJvdyB0byByZXF1aXJlZEJ5dGVz
SW5Db3B5LiIKKyAgICAgICAgICAgIHJlcXVpcmVkQnl0ZXNJbkNvcHkgKz0gYnl0ZXNJbkxhc3RS
b3c7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAiRmFpbCBpZiB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlIG5vdCBzYXRpc2ZpZWQ6IgorICAgIC8vICJsYXlvdXQub2Zmc2V0ICsgcmVx
dWlyZWRCeXRlc0luQ29weSDiiaQgYnl0ZVNpemUuIgorICAgIGlmIChsYXlvdXQub2Zmc2V0ICsg
cmVxdWlyZWRCeXRlc0luQ29weSA+IGJ5dGVTaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgdmFsaWRhdGVDb3B5QnVmZmVyVG9U
ZXh0dXJlKGNvbnN0IFdHUFVJbWFnZUNvcHlCdWZmZXImIHNvdXJjZSwgY29uc3QgV0dQVUltYWdl
Q29weVRleHR1cmUmIGRlc3RpbmF0aW9uLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQor
eworICAgIC8vICJMZXQgZHN0VGV4dHVyZURlc2MgYmUgZGVzdGluYXRpb24udGV4dHVyZS5bW2Rl
c2NyaXB0b3JdXS4iCisgICAgY29uc3QgYXV0byYgZHN0VGV4dHVyZURlc2MgPSBmcm9tQVBJKGRl
c3RpbmF0aW9uLnRleHR1cmUpLmRlc2NyaXB0b3IoKTsKKworICAgIC8vICJ2YWxpZGF0aW5nIEdQ
VUltYWdlQ29weUJ1ZmZlcihzb3VyY2UpIHJldHVybnMgdHJ1ZS4iCisgICAgaWYgKCF2YWxpZGF0
ZUltYWdlQ29weUJ1ZmZlcihzb3VyY2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyAic291cmNlLmJ1ZmZlci5bW3VzYWdlXV0gY29udGFpbnMgQ09QWV9TUkMuIgorICAgIGlmICgh
KGZyb21BUEkoc291cmNlLmJ1ZmZlcikudXNhZ2UoKSAmIFdHUFVCdWZmZXJVc2FnZV9Db3B5U3Jj
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gInZhbGlkYXRpbmcgR1BVSW1hZ2VD
b3B5VGV4dHVyZShkZXN0aW5hdGlvbiwgY29weVNpemUpIHJldHVybnMgdHJ1ZS4iCisgICAgaWYg
KCF2YWxpZGF0ZUltYWdlQ29weVRleHR1cmUoZGVzdGluYXRpb24sIGNvcHlTaXplKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gImRzdFRleHR1cmVEZXNjLnVzYWdlIGNvbnRhaW5z
IENPUFlfRFNULiIKKyAgICBpZiAoIShkc3RUZXh0dXJlRGVzYy51c2FnZSAmIFdHUFVUZXh0dXJl
VXNhZ2VfQ29weURzdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJkc3RUZXh0
dXJlRGVzYy5zYW1wbGVDb3VudCBpcyAxLiIKKyAgICBpZiAoZHN0VGV4dHVyZURlc2Muc2FtcGxl
Q291bnQgIT0gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gIklmIGRzdFRleHR1
cmVEZXNjLmZvcm1hdCBpcyBhIGRlcHRoLW9yLXN0ZW5jaWwgZm9ybWF0OiIKKyAgICBpZiAoVGV4
dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChkc3RUZXh0dXJlRGVzYy5mb3JtYXQpKSB7Cisg
ICAgICAgIC8vICJkZXN0aW5hdGlvbi5hc3BlY3QgbXVzdCByZWZlciB0byBhIHNpbmdsZSBhc3Bl
Y3Qgb2YgZHN0VGV4dHVyZURlc2MuZm9ybWF0IgorICAgICAgICBXR1BVVGV4dHVyZUZvcm1hdCBz
aW5nbGVBc3BlY3RGb3JtYXQgPSBXR1BVVGV4dHVyZUZvcm1hdF9VbmRlZmluZWQ7CisgICAgICAg
IHN3aXRjaCAoZGVzdGluYXRpb24uYXNwZWN0KSB7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVB
c3BlY3RfQWxsOgorICAgICAgICAgICAgaWYgKGF1dG8gc3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQg
PSBUZXh0dXJlOjpzdGVuY2lsT25seUFzcGVjdEZvcm1hdChkc3RUZXh0dXJlRGVzYy5mb3JtYXQp
KQorICAgICAgICAgICAgICAgIHNpbmdsZUFzcGVjdEZvcm1hdCA9ICpzdGVuY2lsT25seUFzcGVj
dEZvcm1hdDsKKyAgICAgICAgICAgIGlmIChhdXRvIGRlcHRoT25seUFzcGVjdEZvcm1hdCA9IFRl
eHR1cmU6OmRlcHRoT25seUFzcGVjdEZvcm1hdChkc3RUZXh0dXJlRGVzYy5mb3JtYXQpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHNpbmdsZUFzcGVjdEZvcm1hdCkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHNpbmdsZUFzcGVjdEZvcm1hdCA9ICpk
ZXB0aE9ubHlBc3BlY3RGb3JtYXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25seToKKyAgICAgICAgICAg
IGlmIChhdXRvIHN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0ID0gVGV4dHVyZTo6c3RlbmNpbE9ubHlB
c3BlY3RGb3JtYXQoZHN0VGV4dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAgICAgICAgICBzaW5n
bGVBc3BlY3RGb3JtYXQgPSAqc3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQ7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9EZXB0aE9ubHk6CisgICAgICAg
ICAgICBpZiAoYXV0byBkZXB0aE9ubHlBc3BlY3RGb3JtYXQgPSBUZXh0dXJlOjpkZXB0aE9ubHlB
c3BlY3RGb3JtYXQoZHN0VGV4dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAgICAgICAgICBzaW5n
bGVBc3BlY3RGb3JtYXQgPSAqZGVwdGhPbmx5QXNwZWN0Rm9ybWF0OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRm9yY2UzMjoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaW5nbGVBc3BlY3RGb3Jt
YXQgPT0gV0dQVVRleHR1cmVGb3JtYXRfVW5kZWZpbmVkKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIC8vICJhbmQgdGhhdCBhc3BlY3QgbXVzdCBiZSBhIHZhbGlkIGltYWdl
IGNvcHkgZGVzdGluYXRpb24gYWNjb3JkaW5nIHRvIMKn4oCvMjUuMS4yIERlcHRoLXN0ZW5jaWwg
Zm9ybWF0cy4iCisgICAgICAgIGlmICghaXNWYWxpZEltYWdlQ29weURlc3RpbmF0aW9uKGRzdFRl
eHR1cmVEZXNjLmZvcm1hdCwgZGVzdGluYXRpb24uYXNwZWN0KSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyAidmFsaWRhdGluZyB0ZXh0dXJlIGNvcHkgcmFuZ2Uo
ZGVzdGluYXRpb24sIGNvcHlTaXplKSByZXR1cm4gdHJ1ZS4iCisgICAgaWYgKCF2YWxpZGF0ZVRl
eHR1cmVDb3B5UmFuZ2UoZGVzdGluYXRpb24sIGNvcHlTaXplKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gIklmIGRzdFRleHR1cmVEZXNjLmZvcm1hdCBpcyBub3QgYSBkZXB0aC1v
ci1zdGVuY2lsIGZvcm1hdDoiCisgICAgaWYgKCFUZXh0dXJlOjppc0RlcHRoT3JTdGVuY2lsRm9y
bWF0KGRzdFRleHR1cmVEZXNjLmZvcm1hdCkpIHsKKyAgICAgICAgLy8gInNvdXJjZS5vZmZzZXQg
aXMgYSBtdWx0aXBsZSBvZiB0aGUgdGV4ZWwgYmxvY2sgc2l6ZSBvZiBkc3RUZXh0dXJlRGVzYy5m
b3JtYXQuIgorICAgICAgICBhdXRvIHRleGVsQmxvY2tTaXplID0gVGV4dHVyZTo6dGV4ZWxCbG9j
a1NpemUoZHN0VGV4dHVyZURlc2MuZm9ybWF0KTsKKyAgICAgICAgaWYgKCF0ZXhlbEJsb2NrU2l6
ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHNvdXJjZS5sYXlvdXQu
b2Zmc2V0ICUgKnRleGVsQmxvY2tTaXplKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIC8vICJJZiBkc3RUZXh0dXJlRGVzYy5mb3JtYXQgaXMgYSBkZXB0aC1vci1zdGVu
Y2lsIGZvcm1hdDoiCisgICAgaWYgKFRleHR1cmU6OmlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoZHN0
VGV4dHVyZURlc2MuZm9ybWF0KSkgeworICAgICAgICAvLyAic291cmNlLm9mZnNldCBpcyBhIG11
bHRpcGxlIG9mIDQuIgorICAgICAgICBpZiAoc291cmNlLmxheW91dC5vZmZzZXQgJSA0KQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJ2YWxpZGF0aW5nIGxpbmVh
ciB0ZXh0dXJlIGRhdGEoc291cmNlLCBzb3VyY2UuYnVmZmVyLltbc2l6ZV1dLCBkc3RUZXh0dXJl
RGVzYy5mb3JtYXQsIGNvcHlTaXplKSBzdWNjZWVkcy4iCisgICAgaWYgKCF2YWxpZGF0ZUxpbmVh
clRleHR1cmVEYXRhKHNvdXJjZS5sYXlvdXQsIGZyb21BUEkoc291cmNlLmJ1ZmZlcikuc2l6ZSgp
LCBkc3RUZXh0dXJlRGVzYy5mb3JtYXQsIGNvcHlTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgQ29tbWFuZEVuY29kZXI6OmNvcHlCdWZm
ZXJUb1RleHR1cmUoY29uc3QgV0dQVUltYWdlQ29weUJ1ZmZlciYgc291cmNlLCBjb25zdCBXR1BV
SW1hZ2VDb3B5VGV4dHVyZSYgZGVzdGluYXRpb24sIGNvbnN0IFdHUFVFeHRlbnQzRCYgY29weVNp
emUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHNvdXJjZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRlc3Rp
bmF0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oY29weVNpemUpOworICAgIGlmIChzb3VyY2UubmV4
dEluQ2hhaW4gfHwgc291cmNlLmxheW91dC5uZXh0SW5DaGFpbiB8fCBkZXN0aW5hdGlvbi5uZXh0
SW5DaGFpbikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHVi
LmlvL2dwdXdlYi8jZG9tLWdwdWNvbW1hbmRlbmNvZGVyLWNvcHlidWZmZXJ0b3RleHR1cmUKKwor
ICAgIC8vICJQcmVwYXJlIHRoZSBlbmNvZGVyIHN0YXRlIG9mIHRoaXMuIElmIGl0IHJldHVybnMg
ZmFsc2UsIHN0b3AuIgorICAgIGlmICghcHJlcGFyZVRoZUVuY29kZXJTdGF0ZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyAiSWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUgdW5zYXRpc2ZpZWQiCisgICAgaWYgKCF2YWxpZGF0ZUNvcHlCdWZmZXJUb1RleHR1cmUoc291
cmNlLCBkZXN0aW5hdGlvbiwgY29weVNpemUpKSB7CisgICAgICAgIC8vICJnZW5lcmF0ZSBhIHZh
bGlkYXRpb24gZXJyb3IgYW5kIHN0b3AuIgorICAgICAgICBtX2RldmljZS0+Z2VuZXJhdGVBVmFs
aWRhdGlvbkVycm9yKCJWYWxpZGF0aW9uIGZhaWx1cmUuIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBlbnN1cmVCbGl0Q29tbWFuZEVuY29kZXIoKTsKKworICAgIE5TVUludGVnZXIg
c291cmNlQnl0ZXNQZXJSb3cgPSBzb3VyY2UubGF5b3V0LmJ5dGVzUGVyUm93OworCisgICAgLy8g
RklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMKKyAgICBOU1VJbnRlZ2VyIHNvdXJjZUJ5dGVz
UGVySW1hZ2UgPSBzb3VyY2UubGF5b3V0LnJvd3NQZXJJbWFnZSAqIHNvdXJjZS5sYXlvdXQuYnl0
ZXNQZXJSb3c7CisKKyAgICBNVExCbGl0T3B0aW9uIG9wdGlvbnMgPSBNVExCbGl0T3B0aW9uTm9u
ZTsKKyAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uLmFzcGVjdCkgeworICAgIGNhc2UgV0dQVVRleHR1
cmVBc3BlY3RfQWxsOgorICAgICAgICBvcHRpb25zID0gTVRMQmxpdE9wdGlvbk5vbmU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfU3RlbmNpbE9ubHk6CisgICAg
ICAgIG9wdGlvbnMgPSBNVExCbGl0T3B0aW9uU3RlbmNpbEZyb21EZXB0aFN0ZW5jaWw7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRGVwdGhPbmx5OgorICAgICAg
ICBvcHRpb25zID0gTVRMQmxpdE9wdGlvbkRlcHRoRnJvbURlcHRoU3RlbmNpbDsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9Gb3JjZTMyOgorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgYXV0byBsb2dpY2FsU2l6ZSA9IGZyb21BUEkoZGVzdGluYXRpb24u
dGV4dHVyZSkubG9naWNhbFRleHR1cmVTdWJyZXNvdXJjZUV4dGVudChkZXN0aW5hdGlvbi5taXBM
ZXZlbCk7CisgICAgYXV0byB3aWR0aEZvck1ldGFsID0gc3RkOjptaW4oY29weVNpemUud2lkdGgs
IGxvZ2ljYWxTaXplLndpZHRoKTsKKyAgICBhdXRvIGhlaWdodEZvck1ldGFsID0gc3RkOjptaW4o
Y29weVNpemUuaGVpZ2h0LCBsb2dpY2FsU2l6ZS5oZWlnaHQpOworICAgIGF1dG8gZGVwdGhGb3JN
ZXRhbCA9IHN0ZDo6bWluKGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVycywgbG9naWNhbFNpemUu
ZGVwdGhPckFycmF5TGF5ZXJzKTsKKworICAgIGF1dG8mIGRlc3RpbmF0aW9uRGVzY3JpcHRvciA9
IGZyb21BUEkoZGVzdGluYXRpb24udGV4dHVyZSkuZGVzY3JpcHRvcigpOworICAgIHN3aXRjaCAo
ZGVzdGluYXRpb25EZXNjcmlwdG9yLmRpbWVuc2lvbikgeworICAgIGNhc2UgV0dQVVRleHR1cmVE
aW1lbnNpb25fMUQ6IHsKKyAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2Rv
Y3VtZW50YXRpb24vbWV0YWwvbXRsYmxpdGNvbW1hbmRlbmNvZGVyLzE0MDA3NzEtY29weWZyb21i
dWZmZXI/bGFuZ3VhZ2U9b2JqYworICAgICAgICAvLyAiV2hlbiB5b3UgY29weSB0byBhIDFEIHRl
eHR1cmUsIGhlaWdodCBhbmQgZGVwdGggbXVzdCBiZSAxLiIKKyAgICAgICAgYXV0byBzb3VyY2VT
aXplID0gTVRMU2l6ZU1ha2Uod2lkdGhGb3JNZXRhbCwgMSwgMSk7CisgICAgICAgIGF1dG8gZGVz
dGluYXRpb25PcmlnaW4gPSBNVExPcmlnaW5NYWtlKGRlc3RpbmF0aW9uLm9yaWdpbi54LCAxLCAx
KTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBsYXllciA9IDA7IGxheWVyIDwgY29weVNpemUuZGVw
dGhPckFycmF5TGF5ZXJzOyArK2xheWVyKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVXNlIGNo
ZWNrZWQgYXJpdGhtZXRpYy4KKyAgICAgICAgICAgIE5TVUludGVnZXIgc291cmNlT2Zmc2V0ID0g
c291cmNlLmxheW91dC5vZmZzZXQgKyBsYXllciAqIHNvdXJjZUJ5dGVzUGVySW1hZ2U7CisgICAg
ICAgICAgICBOU1VJbnRlZ2VyIGRlc3RpbmF0aW9uU2xpY2UgPSBkZXN0aW5hdGlvbi5vcmlnaW4u
eiArIGxheWVyOworICAgICAgICAgICAgW21fYmxpdENvbW1hbmRFbmNvZGVyCisgICAgICAgICAg
ICAgICAgY29weUZyb21CdWZmZXI6ZnJvbUFQSShzb3VyY2UuYnVmZmVyKS5idWZmZXIoKQorICAg
ICAgICAgICAgICAgIHNvdXJjZU9mZnNldDpzb3VyY2VPZmZzZXQKKyAgICAgICAgICAgICAgICBz
b3VyY2VCeXRlc1BlclJvdzpzb3VyY2VCeXRlc1BlclJvdworICAgICAgICAgICAgICAgIHNvdXJj
ZUJ5dGVzUGVySW1hZ2U6c291cmNlQnl0ZXNQZXJJbWFnZQorICAgICAgICAgICAgICAgIHNvdXJj
ZVNpemU6c291cmNlU2l6ZQorICAgICAgICAgICAgICAgIHRvVGV4dHVyZTpmcm9tQVBJKGRlc3Rp
bmF0aW9uLnRleHR1cmUpLnRleHR1cmUoKQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xp
Y2U6ZGVzdGluYXRpb25TbGljZQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uTGV2ZWw6ZGVz
dGluYXRpb24ubWlwTGV2ZWwKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9yaWdpbjpkZXN0
aW5hdGlvbk9yaWdpbgorICAgICAgICAgICAgICAgIG9wdGlvbnM6b3B0aW9uc107CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25f
MkQ6IHsKKyAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRp
b24vbWV0YWwvbXRsYmxpdGNvbW1hbmRlbmNvZGVyLzE0MDA3NzEtY29weWZyb21idWZmZXI/bGFu
Z3VhZ2U9b2JqYworICAgICAgICAvLyAiV2hlbiB5b3UgY29weSB0byBhIDJEIHRleHR1cmUsIGRl
cHRoIG11c3QgYmUgMS4iCisgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IE1UTFNpemVNYWtlKHdp
ZHRoRm9yTWV0YWwsIGhlaWdodEZvck1ldGFsLCAxKTsKKyAgICAgICAgYXV0byBkZXN0aW5hdGlv
bk9yaWdpbiA9IE1UTE9yaWdpbk1ha2UoZGVzdGluYXRpb24ub3JpZ2luLngsIGRlc3RpbmF0aW9u
Lm9yaWdpbi55LCAxKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBsYXllciA9IDA7IGxheWVyIDwg
Y29weVNpemUuZGVwdGhPckFycmF5TGF5ZXJzOyArK2xheWVyKSB7CisgICAgICAgICAgICAvLyBG
SVhNRTogVXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KKyAgICAgICAgICAgIE5TVUludGVnZXIgc291
cmNlT2Zmc2V0ID0gc291cmNlLmxheW91dC5vZmZzZXQgKyBsYXllciAqIHNvdXJjZUJ5dGVzUGVy
SW1hZ2U7CisgICAgICAgICAgICBOU1VJbnRlZ2VyIGRlc3RpbmF0aW9uU2xpY2UgPSBkZXN0aW5h
dGlvbi5vcmlnaW4ueiArIGxheWVyOworICAgICAgICAgICAgW21fYmxpdENvbW1hbmRFbmNvZGVy
CisgICAgICAgICAgICAgICAgY29weUZyb21CdWZmZXI6ZnJvbUFQSShzb3VyY2UuYnVmZmVyKS5i
dWZmZXIoKQorICAgICAgICAgICAgICAgIHNvdXJjZU9mZnNldDpzb3VyY2VPZmZzZXQKKyAgICAg
ICAgICAgICAgICBzb3VyY2VCeXRlc1BlclJvdzpzb3VyY2VCeXRlc1BlclJvdworICAgICAgICAg
ICAgICAgIHNvdXJjZUJ5dGVzUGVySW1hZ2U6c291cmNlQnl0ZXNQZXJJbWFnZQorICAgICAgICAg
ICAgICAgIHNvdXJjZVNpemU6c291cmNlU2l6ZQorICAgICAgICAgICAgICAgIHRvVGV4dHVyZTpm
cm9tQVBJKGRlc3RpbmF0aW9uLnRleHR1cmUpLnRleHR1cmUoKQorICAgICAgICAgICAgICAgIGRl
c3RpbmF0aW9uU2xpY2U6ZGVzdGluYXRpb25TbGljZQorICAgICAgICAgICAgICAgIGRlc3RpbmF0
aW9uTGV2ZWw6ZGVzdGluYXRpb24ubWlwTGV2ZWwKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlv
bk9yaWdpbjpkZXN0aW5hdGlvbk9yaWdpbgorICAgICAgICAgICAgICAgIG9wdGlvbnM6b3B0aW9u
c107CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV0dQVVRleHR1
cmVEaW1lbnNpb25fM0Q6IHsKKyAgICAgICAgYXV0byBzb3VyY2VTaXplID0gTVRMU2l6ZU1ha2Uo
d2lkdGhGb3JNZXRhbCwgaGVpZ2h0Rm9yTWV0YWwsIGRlcHRoRm9yTWV0YWwpOworICAgICAgICBh
dXRvIGRlc3RpbmF0aW9uT3JpZ2luID0gTVRMT3JpZ2luTWFrZShkZXN0aW5hdGlvbi5vcmlnaW4u
eCwgZGVzdGluYXRpb24ub3JpZ2luLnksIGRlc3RpbmF0aW9uLm9yaWdpbi56KTsKKyAgICAgICAg
TlNVSW50ZWdlciBzb3VyY2VPZmZzZXQgPSBzb3VyY2UubGF5b3V0Lm9mZnNldDsKKyAgICAgICAg
W21fYmxpdENvbW1hbmRFbmNvZGVyCisgICAgICAgICAgICBjb3B5RnJvbUJ1ZmZlcjpmcm9tQVBJ
KHNvdXJjZS5idWZmZXIpLmJ1ZmZlcigpCisgICAgICAgICAgICBzb3VyY2VPZmZzZXQ6c291cmNl
T2Zmc2V0CisgICAgICAgICAgICBzb3VyY2VCeXRlc1BlclJvdzpzb3VyY2VCeXRlc1BlclJvdwor
ICAgICAgICAgICAgc291cmNlQnl0ZXNQZXJJbWFnZTpzb3VyY2VCeXRlc1BlckltYWdlCisgICAg
ICAgICAgICBzb3VyY2VTaXplOnNvdXJjZVNpemUKKyAgICAgICAgICAgIHRvVGV4dHVyZTpmcm9t
QVBJKGRlc3RpbmF0aW9uLnRleHR1cmUpLnRleHR1cmUoKQorICAgICAgICAgICAgZGVzdGluYXRp
b25TbGljZTowCisgICAgICAgICAgICBkZXN0aW5hdGlvbkxldmVsOmRlc3RpbmF0aW9uLm1pcExl
dmVsCisgICAgICAgICAgICBkZXN0aW5hdGlvbk9yaWdpbjpkZXN0aW5hdGlvbk9yaWdpbgorICAg
ICAgICAgICAgb3B0aW9uczpvcHRpb25zXTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgV0dQVVRleHR1cmVEaW1lbnNpb25fRm9yY2UzMjoKKyAgICAgICAgcmV0dXJuOworICAgIH0K
K30KKworc3RhdGljIGJvb2wgdmFsaWRhdGVDb3B5VGV4dHVyZVRvQnVmZmVyKGNvbnN0IFdHUFVJ
bWFnZUNvcHlUZXh0dXJlJiBzb3VyY2UsIGNvbnN0IFdHUFVJbWFnZUNvcHlCdWZmZXImIGRlc3Rp
bmF0aW9uLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQoreworICAgIC8vICJMZXQgc3Jj
VGV4dHVyZURlc2MgYmUgc291cmNlLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uIgorICAgIGNvbnN0
IGF1dG8mIHNyY1RleHR1cmVEZXNjID0gZnJvbUFQSShzb3VyY2UudGV4dHVyZSkuZGVzY3JpcHRv
cigpOworCisgICAgLy8gInZhbGlkYXRpbmcgR1BVSW1hZ2VDb3B5VGV4dHVyZShzb3VyY2UsIGNv
cHlTaXplKSByZXR1cm5zIHRydWUuIgorICAgIGlmICghdmFsaWRhdGVJbWFnZUNvcHlUZXh0dXJl
KHNvdXJjZSwgY29weVNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAic3Jj
VGV4dHVyZURlc2MudXNhZ2UgY29udGFpbnMgQ09QWV9TUkMuIgorICAgIGlmICghKHNyY1RleHR1
cmVEZXNjLnVzYWdlICYgV0dQVUJ1ZmZlclVzYWdlX0NvcHlTcmMpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyAic3JjVGV4dHVyZURlc2Muc2FtcGxlQ291bnQgaXMgMS4iCisgICAg
aWYgKHNyY1RleHR1cmVEZXNjLnNhbXBsZUNvdW50ICE9IDEpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vICJJZiBzcmNUZXh0dXJlRGVzYy5mb3JtYXQgaXMgYSBkZXB0aC1zdGVuY2ls
IGZvcm1hdDoiCisgICAgaWYgKFRleHR1cmU6OmlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoc3JjVGV4
dHVyZURlc2MuZm9ybWF0KSkgeworICAgICAgICAvLyAic291cmNlLmFzcGVjdCBtdXN0IHJlZmVy
IHRvIGEgc2luZ2xlIGFzcGVjdCBvZiBzcmNUZXh0dXJlRGVzYy5mb3JtYXQiCisgICAgICAgIFdH
UFVUZXh0dXJlRm9ybWF0IHNpbmdsZUFzcGVjdEZvcm1hdCA9IFdHUFVUZXh0dXJlRm9ybWF0X1Vu
ZGVmaW5lZDsKKyAgICAgICAgc3dpdGNoIChzb3VyY2UuYXNwZWN0KSB7CisgICAgICAgIGNhc2Ug
V0dQVVRleHR1cmVBc3BlY3RfQWxsOgorICAgICAgICAgICAgaWYgKGF1dG8gc3RlbmNpbE9ubHlB
c3BlY3RGb3JtYXQgPSBUZXh0dXJlOjpzdGVuY2lsT25seUFzcGVjdEZvcm1hdChzcmNUZXh0dXJl
RGVzYy5mb3JtYXQpKQorICAgICAgICAgICAgICAgIHNpbmdsZUFzcGVjdEZvcm1hdCA9ICpzdGVu
Y2lsT25seUFzcGVjdEZvcm1hdDsKKyAgICAgICAgICAgIGlmIChhdXRvIGRlcHRoT25seUFzcGVj
dEZvcm1hdCA9IFRleHR1cmU6OmRlcHRoT25seUFzcGVjdEZvcm1hdChzcmNUZXh0dXJlRGVzYy5m
b3JtYXQpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNpbmdsZUFzcGVjdEZvcm1hdCkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHNpbmdsZUFzcGVj
dEZvcm1hdCA9ICpkZXB0aE9ubHlBc3BlY3RGb3JtYXQ7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25seToK
KyAgICAgICAgICAgIGlmIChhdXRvIHN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0ID0gVGV4dHVyZTo6
c3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQoc3JjVGV4dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAg
ICAgICAgICBzaW5nbGVBc3BlY3RGb3JtYXQgPSAqc3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQ7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9EZXB0aE9u
bHk6CisgICAgICAgICAgICBpZiAoYXV0byBkZXB0aE9ubHlBc3BlY3RGb3JtYXQgPSBUZXh0dXJl
OjpkZXB0aE9ubHlBc3BlY3RGb3JtYXQoc3JjVGV4dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAg
ICAgICAgICBzaW5nbGVBc3BlY3RGb3JtYXQgPSAqZGVwdGhPbmx5QXNwZWN0Rm9ybWF0OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRm9yY2UzMjoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaW5n
bGVBc3BlY3RGb3JtYXQgPT0gV0dQVVRleHR1cmVGb3JtYXRfVW5kZWZpbmVkKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vICJhbmQgdGhhdCBhc3BlY3QgbXVzdCBiZSBh
IHZhbGlkIGltYWdlIGNvcHkgZGVzdGluYXRpb24gYWNjb3JkaW5nIHRvIMKn4oCvMjUuMS4yIERl
cHRoLXN0ZW5jaWwgZm9ybWF0cy4iCisgICAgICAgIGlmICghaXNWYWxpZEltYWdlQ29weURlc3Rp
bmF0aW9uKHNyY1RleHR1cmVEZXNjLmZvcm1hdCwgc291cmNlLmFzcGVjdCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gInZhbGlkYXRpbmcgR1BVSW1hZ2VDb3B5
QnVmZmVyKGRlc3RpbmF0aW9uKSByZXR1cm5zIHRydWUuIgorICAgIGlmICghdmFsaWRhdGVJbWFn
ZUNvcHlCdWZmZXIoZGVzdGluYXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyAiZGVzdGluYXRpb24uYnVmZmVyLltbdXNhZ2VdXSBjb250YWlucyBDT1BZX0RTVC4iCisgICAg
aWYgKCEoZnJvbUFQSShkZXN0aW5hdGlvbi5idWZmZXIpLnVzYWdlKCkgJiBXR1BVQnVmZmVyVXNh
Z2VfQ29weURzdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJ2YWxpZGF0aW5n
IHRleHR1cmUgY29weSByYW5nZShzb3VyY2UsIGNvcHlTaXplKSByZXR1cm5zIHRydWUuIgorICAg
IGlmICghdmFsaWRhdGVUZXh0dXJlQ29weVJhbmdlKHNvdXJjZSwgY29weVNpemUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiSWYgc3JjVGV4dHVyZURlc2MuZm9ybWF0IGlzIG5v
dCBhIGRlcHRoLW9yLXN0ZW5jaWwgZm9ybWF0OiIKKyAgICBpZiAoIVRleHR1cmU6OmlzRGVwdGhP
clN0ZW5jaWxGb3JtYXQoc3JjVGV4dHVyZURlc2MuZm9ybWF0KSkgeworICAgICAgICAvLyAiZGVz
dGluYXRpb24ub2Zmc2V0IGlzIGEgbXVsdGlwbGUgb2YgdGhlIHRleGVsIGJsb2NrIHNpemUgb2Yg
c3JjVGV4dHVyZURlc2MuZm9ybWF0LiIKKyAgICAgICAgYXV0byB0ZXhlbEJsb2NrU2l6ZSA9IFRl
eHR1cmU6OnRleGVsQmxvY2tTaXplKHNyY1RleHR1cmVEZXNjLmZvcm1hdCk7CisgICAgICAgIGlm
ICghdGV4ZWxCbG9ja1NpemUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
IChkZXN0aW5hdGlvbi5sYXlvdXQub2Zmc2V0ICUgKnRleGVsQmxvY2tTaXplKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJJZiBzcmNUZXh0dXJlRGVzYy5mb3Jt
YXQgaXMgYSBkZXB0aC1vci1zdGVuY2lsIGZvcm1hdDoiCisgICAgaWYgKFRleHR1cmU6OmlzRGVw
dGhPclN0ZW5jaWxGb3JtYXQoc3JjVGV4dHVyZURlc2MuZm9ybWF0KSkgeworICAgICAgICAvLyAi
ZGVzdGluYXRpb24ub2Zmc2V0IGlzIGEgbXVsdGlwbGUgb2YgNC4iCisgICAgICAgIGlmIChkZXN0
aW5hdGlvbi5sYXlvdXQub2Zmc2V0ICUgNCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICAvLyAidmFsaWRhdGluZyBsaW5lYXIgdGV4dHVyZSBkYXRhKGRlc3RpbmF0aW9u
LCBkZXN0aW5hdGlvbi5idWZmZXIuW1tzaXplXV0sIHNyY1RleHR1cmVEZXNjLmZvcm1hdCwgY29w
eVNpemUpIHN1Y2NlZWRzLiIKKyAgICBpZiAoIXZhbGlkYXRlTGluZWFyVGV4dHVyZURhdGEoZGVz
dGluYXRpb24ubGF5b3V0LCBmcm9tQVBJKGRlc3RpbmF0aW9uLmJ1ZmZlcikuc2l6ZSgpLCBzcmNU
ZXh0dXJlRGVzYy5mb3JtYXQsIGNvcHlTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgQ29tbWFuZEVuY29kZXI6OmNvcHlUZXh0dXJlVG9C
dWZmZXIoY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUmIHNvdXJjZSwgY29uc3QgV0dQVUltYWdl
Q29weUJ1ZmZlciYgZGVzdGluYXRpb24sIGNvbnN0IFdHUFVFeHRlbnQzRCYgY29weVNpemUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKHNvdXJjZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9u
KTsKLSAgICBVTlVTRURfUEFSQU0oY29weVNpemUpOworICAgIGlmIChzb3VyY2UubmV4dEluQ2hh
aW4gfHwgZGVzdGluYXRpb24ubmV4dEluQ2hhaW4gfHwgZGVzdGluYXRpb24ubGF5b3V0Lm5leHRJ
bkNoYWluKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIu
aW8vZ3B1d2ViLyNkb20tZ3B1Y29tbWFuZGVuY29kZXItY29weXRleHR1cmV0b2J1ZmZlcgorCisg
ICAgLy8gIlByZXBhcmUgdGhlIGVuY29kZXIgc3RhdGUgb2YgdGhpcy4gSWYgaXQgcmV0dXJucyBm
YWxzZSwgc3RvcC4iCisgICAgaWYgKCFwcmVwYXJlVGhlRW5jb2RlclN0YXRlKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vICJJZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZSB1bnNhdGlzZmllZCIKKyAgICBpZiAoIXZhbGlkYXRlQ29weVRleHR1cmVUb0J1ZmZlcihzb3Vy
Y2UsIGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkpIHsKKyAgICAgICAgLy8gImdlbmVyYXRlIGEgdmFs
aWRhdGlvbiBlcnJvciBhbmQgc3RvcC4iCisgICAgICAgIG1fZGV2aWNlLT5nZW5lcmF0ZUFWYWxp
ZGF0aW9uRXJyb3IoIlZhbGlkYXRpb24gZmFpbHVyZS4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGVuc3VyZUJsaXRDb21tYW5kRW5jb2RlcigpOworCisgICAgTlNVSW50ZWdlciBk
ZXN0aW5hdGlvbkJ5dGVzUGVyUm93ID0gZGVzdGluYXRpb24ubGF5b3V0LmJ5dGVzUGVyUm93Owor
CisgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMKKyAgICBOU1VJbnRlZ2VyIGRl
c3RpbmF0aW9uQnl0ZXNQZXJJbWFnZSA9IGRlc3RpbmF0aW9uLmxheW91dC5yb3dzUGVySW1hZ2Ug
KiBkZXN0aW5hdGlvbi5sYXlvdXQuYnl0ZXNQZXJSb3c7CisKKyAgICBNVExCbGl0T3B0aW9uIG9w
dGlvbnMgPSBNVExCbGl0T3B0aW9uTm9uZTsKKyAgICBzd2l0Y2ggKHNvdXJjZS5hc3BlY3QpIHsK
KyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0FsbDoKKyAgICAgICAgb3B0aW9ucyA9IE1UTEJs
aXRPcHRpb25Ob25lOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0
X1N0ZW5jaWxPbmx5OgorICAgICAgICBvcHRpb25zID0gTVRMQmxpdE9wdGlvblN0ZW5jaWxGcm9t
RGVwdGhTdGVuY2lsOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0
X0RlcHRoT25seToKKyAgICAgICAgb3B0aW9ucyA9IE1UTEJsaXRPcHRpb25EZXB0aEZyb21EZXB0
aFN0ZW5jaWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRm9y
Y2UzMjoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gbG9naWNhbFNpemUgPSBm
cm9tQVBJKHNvdXJjZS50ZXh0dXJlKS5sb2dpY2FsVGV4dHVyZVN1YnJlc291cmNlRXh0ZW50KHNv
dXJjZS5taXBMZXZlbCk7CisgICAgYXV0byB3aWR0aEZvck1ldGFsID0gc3RkOjptaW4oY29weVNp
emUud2lkdGgsIGxvZ2ljYWxTaXplLndpZHRoKTsKKyAgICBhdXRvIGhlaWdodEZvck1ldGFsID0g
c3RkOjptaW4oY29weVNpemUuaGVpZ2h0LCBsb2dpY2FsU2l6ZS5oZWlnaHQpOworICAgIGF1dG8g
ZGVwdGhGb3JNZXRhbCA9IHN0ZDo6bWluKGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVycywgbG9n
aWNhbFNpemUuZGVwdGhPckFycmF5TGF5ZXJzKTsKKworICAgIGF1dG8mIHNvdXJjZURlc2NyaXB0
b3IgPSBmcm9tQVBJKHNvdXJjZS50ZXh0dXJlKS5kZXNjcmlwdG9yKCk7CisgICAgc3dpdGNoIChz
b3VyY2VEZXNjcmlwdG9yLmRpbWVuc2lvbikgeworICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNp
b25fMUQ6IHsKKyAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50
YXRpb24vbWV0YWwvbXRsYmxpdGNvbW1hbmRlbmNvZGVyLzE0MDA3NTYtY29weWZyb210ZXh0dXJl
P2xhbmd1YWdlPW9iamMKKyAgICAgICAgLy8gIldoZW4geW91IGNvcHkgdG8gYSAxRCB0ZXh0dXJl
LCBoZWlnaHQgYW5kIGRlcHRoIG11c3QgYmUgMS4iCisgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9
IE1UTFNpemVNYWtlKHdpZHRoRm9yTWV0YWwsIDEsIDEpOworICAgICAgICBhdXRvIHNvdXJjZU9y
aWdpbiA9IE1UTE9yaWdpbk1ha2Uoc291cmNlLm9yaWdpbi54LCAxLCAxKTsKKyAgICAgICAgZm9y
ICh1aW50MzJfdCBsYXllciA9IDA7IGxheWVyIDwgY29weVNpemUuZGVwdGhPckFycmF5TGF5ZXJz
OyArK2xheWVyKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVXNlIGNoZWNrZWQgYXJpdGhtZXRp
Yy4KKyAgICAgICAgICAgIE5TVUludGVnZXIgZGVzdGluYXRpb25PZmZzZXQgPSBkZXN0aW5hdGlv
bi5sYXlvdXQub2Zmc2V0ICsgbGF5ZXIgKiBkZXN0aW5hdGlvbkJ5dGVzUGVySW1hZ2U7CisgICAg
ICAgICAgICBOU1VJbnRlZ2VyIHNvdXJjZVNsaWNlID0gc291cmNlLm9yaWdpbi56ICsgbGF5ZXI7
CisgICAgICAgICAgICBbbV9ibGl0Q29tbWFuZEVuY29kZXIKKyAgICAgICAgICAgICAgICBjb3B5
RnJvbVRleHR1cmU6ZnJvbUFQSShzb3VyY2UudGV4dHVyZSkudGV4dHVyZSgpCisgICAgICAgICAg
ICAgICAgc291cmNlU2xpY2U6c291cmNlU2xpY2UKKyAgICAgICAgICAgICAgICBzb3VyY2VMZXZl
bDpzb3VyY2UubWlwTGV2ZWwKKyAgICAgICAgICAgICAgICBzb3VyY2VPcmlnaW46c291cmNlT3Jp
Z2luCisgICAgICAgICAgICAgICAgc291cmNlU2l6ZTpzb3VyY2VTaXplCisgICAgICAgICAgICAg
ICAgdG9CdWZmZXI6ZnJvbUFQSShkZXN0aW5hdGlvbi5idWZmZXIpLmJ1ZmZlcigpCisgICAgICAg
ICAgICAgICAgZGVzdGluYXRpb25PZmZzZXQ6ZGVzdGluYXRpb25PZmZzZXQKKyAgICAgICAgICAg
ICAgICBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93OmRlc3RpbmF0aW9uQnl0ZXNQZXJSb3cKKyAgICAg
ICAgICAgICAgICBkZXN0aW5hdGlvbkJ5dGVzUGVySW1hZ2U6ZGVzdGluYXRpb25CeXRlc1Blcklt
YWdlCisgICAgICAgICAgICAgICAgb3B0aW9uczpvcHRpb25zXTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8yRDogeworICAg
ICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9tZXRhbC9t
dGxibGl0Y29tbWFuZGVuY29kZXIvMTQwMDc1Ni1jb3B5ZnJvbXRleHR1cmU/bGFuZ3VhZ2U9b2Jq
YworICAgICAgICAvLyAiV2hlbiB5b3UgY29weSB0byBhIDJEIHRleHR1cmUsIGRlcHRoIG11c3Qg
YmUgMS4iCisgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IE1UTFNpemVNYWtlKHdpZHRoRm9yTWV0
YWwsIGhlaWdodEZvck1ldGFsLCAxKTsKKyAgICAgICAgYXV0byBzb3VyY2VPcmlnaW4gPSBNVExP
cmlnaW5NYWtlKHNvdXJjZS5vcmlnaW4ueCwgc291cmNlLm9yaWdpbi55LCAxKTsKKyAgICAgICAg
Zm9yICh1aW50MzJfdCBsYXllciA9IDA7IGxheWVyIDwgY29weVNpemUuZGVwdGhPckFycmF5TGF5
ZXJzOyArK2xheWVyKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVXNlIGNoZWNrZWQgYXJpdGht
ZXRpYy4KKyAgICAgICAgICAgIE5TVUludGVnZXIgZGVzdGluYXRpb25PZmZzZXQgPSBkZXN0aW5h
dGlvbi5sYXlvdXQub2Zmc2V0ICsgbGF5ZXIgKiBkZXN0aW5hdGlvbkJ5dGVzUGVySW1hZ2U7Cisg
ICAgICAgICAgICBOU1VJbnRlZ2VyIHNvdXJjZVNsaWNlID0gc291cmNlLm9yaWdpbi56ICsgbGF5
ZXI7CisgICAgICAgICAgICBbbV9ibGl0Q29tbWFuZEVuY29kZXIKKyAgICAgICAgICAgICAgICBj
b3B5RnJvbVRleHR1cmU6ZnJvbUFQSShzb3VyY2UudGV4dHVyZSkudGV4dHVyZSgpCisgICAgICAg
ICAgICAgICAgc291cmNlU2xpY2U6c291cmNlU2xpY2UKKyAgICAgICAgICAgICAgICBzb3VyY2VM
ZXZlbDpzb3VyY2UubWlwTGV2ZWwKKyAgICAgICAgICAgICAgICBzb3VyY2VPcmlnaW46c291cmNl
T3JpZ2luCisgICAgICAgICAgICAgICAgc291cmNlU2l6ZTpzb3VyY2VTaXplCisgICAgICAgICAg
ICAgICAgdG9CdWZmZXI6ZnJvbUFQSShkZXN0aW5hdGlvbi5idWZmZXIpLmJ1ZmZlcigpCisgICAg
ICAgICAgICAgICAgZGVzdGluYXRpb25PZmZzZXQ6ZGVzdGluYXRpb25PZmZzZXQKKyAgICAgICAg
ICAgICAgICBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93OmRlc3RpbmF0aW9uQnl0ZXNQZXJSb3cKKyAg
ICAgICAgICAgICAgICBkZXN0aW5hdGlvbkJ5dGVzUGVySW1hZ2U6ZGVzdGluYXRpb25CeXRlc1Bl
ckltYWdlCisgICAgICAgICAgICAgICAgb3B0aW9uczpvcHRpb25zXTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8zRDogewor
ICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBNVExTaXplTWFrZSh3aWR0aEZvck1ldGFsLCBoZWln
aHRGb3JNZXRhbCwgZGVwdGhGb3JNZXRhbCk7CisgICAgICAgIGF1dG8gc291cmNlT3JpZ2luID0g
TVRMT3JpZ2luTWFrZShzb3VyY2Uub3JpZ2luLngsIHNvdXJjZS5vcmlnaW4ueSwgc291cmNlLm9y
aWdpbi56KTsKKyAgICAgICAgTlNVSW50ZWdlciBkZXN0aW5hdGlvbk9mZnNldCA9IGRlc3RpbmF0
aW9uLmxheW91dC5vZmZzZXQ7CisgICAgICAgICAgICBbbV9ibGl0Q29tbWFuZEVuY29kZXIKKyAg
ICAgICAgICAgICAgICBjb3B5RnJvbVRleHR1cmU6ZnJvbUFQSShzb3VyY2UudGV4dHVyZSkudGV4
dHVyZSgpCisgICAgICAgICAgICAgICAgc291cmNlU2xpY2U6MAorICAgICAgICAgICAgICAgIHNv
dXJjZUxldmVsOnNvdXJjZS5taXBMZXZlbAorICAgICAgICAgICAgICAgIHNvdXJjZU9yaWdpbjpz
b3VyY2VPcmlnaW4KKyAgICAgICAgICAgICAgICBzb3VyY2VTaXplOnNvdXJjZVNpemUKKyAgICAg
ICAgICAgICAgICB0b0J1ZmZlcjpmcm9tQVBJKGRlc3RpbmF0aW9uLmJ1ZmZlcikuYnVmZmVyKCkK
KyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9mZnNldDpkZXN0aW5hdGlvbk9mZnNldAorICAg
ICAgICAgICAgICAgIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3c6ZGVzdGluYXRpb25CeXRlc1BlclJv
dworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uQnl0ZXNQZXJJbWFnZTpkZXN0aW5hdGlvbkJ5
dGVzUGVySW1hZ2UKKyAgICAgICAgICAgICAgICBvcHRpb25zOm9wdGlvbnNdOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl9Gb3JjZTMyOgorICAg
ICAgICByZXR1cm47CisgICAgfQorfQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxXR1BVVGV4dHVy
ZUZvcm1hdD4gaXNTUkdCQ29tcGF0aWJsZShXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQpCit7Cisg
ICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1VuZGVmaW5l
ZDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SOFVub3JtOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfUjhTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4VWlu
dDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X1IxNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMTZTaW50Ogor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjE2RmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9SRzhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFNub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkc4VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X1JHOFNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMzJGbG9hdDoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IzMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SMzJTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkcxNlVpbnQ6CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X1JHMTZGbG9hdDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X1JHQkE4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9S
R0JBOFVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4VW5v
cm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFNub3JtOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfUkdCQThVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdC
QThTaW50OgorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfQkdSQThVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JHUkE4VW5v
cm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkdSQThVbm9ybTsKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQjEwQTJVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X1JHMTFCMTBVZmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0I5
RTVVZmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzMyRmxvYXQ6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzMyVWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X1JHMzJTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTE2VWludDoKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkExNlNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SR0JBMTZGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkEzMkZsb2F0
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTMyVWludDoKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X1JHQkEzMlNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9TdGVu
Y2lsODoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMTZVbm9ybToKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRQbHVzOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfRGVwdGgyNFBsdXNTdGVuY2lsODoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRo
MjRVbm9ybVN0ZW5jaWw4OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0U3RlbmNpbDg6CisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzFS
R0JBVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm1TcmdiOgor
ICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkMxUkdCQVVub3JtOworICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfQkMyUkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfQkMyUkdCQVVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JD
MlJHQkFVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybToKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybVNyZ2I6CisgICAgICAgIHJldHVy
biBXR1BVVGV4dHVyZUZvcm1hdF9CQzNSR0JBVW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9CQzRSVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSU25vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzVSR1Vub3JtOgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfQkM1UkdTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNkhSR0JV
ZmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzZIUkdCRmxvYXQ6CisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzdSR0JB
VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzdSR0JBVW5vcm1TcmdiOgorICAg
ICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkM3UkdCQVVub3JtOworICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfRVRDMlJHQjhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0VUQzJSR0I4VW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfRVRD
MlJHQjhVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4QTFVbm9ybToK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4QTFVbm9ybVNyZ2I6CisgICAgICAg
IHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOEExVW5vcm07CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9FVEMyUkdCQThVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0VUQzJSR0JBOFVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0VU
QzJSR0JBOFVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUjExVW5vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FQUNSMTFTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0VBQ1JHMTFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JH
MTFTbm9ybToKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0FTVEM0eDRVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM0
eDRVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNHg0VW5v
cm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg0VW5vcm06CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg0VW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzV4NFVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNU
QzV4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtU3JnYjoK
KyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM1eDVVbm9ybTsKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0FTVEM2eDVVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9B
U1RDNng1VW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5vcm1TcmdiOgorICAgICAgICByZXR1
cm4gV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NlVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzh4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NVVu
b3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDVVbm9ybTsK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDZVbm9ybToKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X0FTVEM4eDZVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVy
ZUZvcm1hdF9BU1RDOHg2VW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg4
VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg4VW5vcm1TcmdiOgorICAg
ICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4OFVub3JtOworICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfQVNUQzEweDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEMxMHg1VW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQVNU
QzEweDVVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg2VW5vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NlVub3JtU3JnYjoKKyAgICAgICAgcmV0
dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg2VW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9BU1RDMTB4OFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEw
eDhVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4OFVu
b3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDEwVW5vcm06CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4MTBVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4MTBVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0FTVEMxMngxMFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEyeDEw
VW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEyeDEwVW5v
cm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTJVbm9ybToKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMlVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMlVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfRm9yY2UzMjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBhcmVDb3B5Q29tcGF0aWJs
ZShXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQxLCBXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQyKQor
eworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2NvcHktY29tcGF0aWJs
ZQorCisgICAgLy8gImZvcm1hdDEgZXF1YWxzIGZvcm1hdDIiCisgICAgaWYgKGZvcm1hdDEgPT0g
Zm9ybWF0MikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyAiZm9ybWF0MSBhbmQgZm9y
bWF0MiBkaWZmZXIgb25seSBpbiB3aGV0aGVyIHRoZXkgYXJlIHNyZ2IgZm9ybWF0cyAoaGF2ZSB0
aGUgLXNyZ2Igc3VmZml4KS4iCisgICAgYXV0byBjYW5vbmljYWxpemVkRm9ybWF0MSA9IGlzU1JH
QkNvbXBhdGlibGUoZm9ybWF0MSk7CisgICAgYXV0byBjYW5vbmljYWxpemVkRm9ybWF0MiA9IGlz
U1JHQkNvbXBhdGlibGUoZm9ybWF0Mik7CisgICAgaWYgKCFjYW5vbmljYWxpemVkRm9ybWF0MSB8
fCAhY2Fub25pY2FsaXplZEZvcm1hdDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
Y2Fub25pY2FsaXplZEZvcm1hdDEgIT0gY2Fub25pY2FsaXplZEZvcm1hdDEpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCB2YWxpZGF0
ZUNvcHlUZXh0dXJlVG9UZXh0dXJlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBzb3VyY2Us
IGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBkZXN0aW5hdGlvbiwgY29uc3QgV0dQVUV4dGVu
dDNEJiBjb3B5U2l6ZSkKK3sKKyAgICAvLyAiTGV0IHNyY1RleHR1cmVEZXNjIGJlIHNvdXJjZS50
ZXh0dXJlLltbZGVzY3JpcHRvcl1dLiIKKyAgICBjb25zdCBhdXRvJiBzcmNUZXh0dXJlRGVzYyA9
IGZyb21BUEkoc291cmNlLnRleHR1cmUpLmRlc2NyaXB0b3IoKTsKKworICAgIC8vICJMZXQgZHN0
VGV4dHVyZURlc2MgYmUgZGVzdGluYXRpb24udGV4dHVyZS5bW2Rlc2NyaXB0b3JdXS4iCisgICAg
Y29uc3QgYXV0byYgZHN0VGV4dHVyZURlc2MgPSBmcm9tQVBJKGRlc3RpbmF0aW9uLnRleHR1cmUp
LmRlc2NyaXB0b3IoKTsKKworICAgIC8vICJ2YWxpZGF0aW5nIEdQVUltYWdlQ29weVRleHR1cmUo
c291cmNlLCBjb3B5U2l6ZSkgcmV0dXJucyB0cnVlLiIKKyAgICBpZiAoIXZhbGlkYXRlSW1hZ2VD
b3B5VGV4dHVyZShzb3VyY2UsIGNvcHlTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gInNyY1RleHR1cmVEZXNjLnVzYWdlIGNvbnRhaW5zIENPUFlfU1JDLiIKKyAgICBpZiAo
IShzcmNUZXh0dXJlRGVzYy51c2FnZSAmIFdHUFVUZXh0dXJlVXNhZ2VfQ29weVNyYykpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJ2YWxpZGF0aW5nIEdQVUltYWdlQ29weVRleHR1
cmUoZGVzdGluYXRpb24sIGNvcHlTaXplKSByZXR1cm5zIHRydWUuIgorICAgIGlmICghdmFsaWRh
dGVJbWFnZUNvcHlUZXh0dXJlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vICJkc3RUZXh0dXJlRGVzYy51c2FnZSBjb250YWlucyBDT1BZX0RT
VC4iCisgICAgaWYgKCEoZHN0VGV4dHVyZURlc2MudXNhZ2UgJiBXR1BVVGV4dHVyZVVzYWdlX0Nv
cHlEc3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAic3JjVGV4dHVyZURlc2Mu
c2FtcGxlQ291bnQgaXMgZXF1YWwgdG8gZHN0VGV4dHVyZURlc2Muc2FtcGxlQ291bnQuIgorICAg
IGlmIChzcmNUZXh0dXJlRGVzYy5zYW1wbGVDb3VudCAhPSBkc3RUZXh0dXJlRGVzYy5zYW1wbGVD
b3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gInNyY1RleHR1cmVEZXNjLmZv
cm1hdCBhbmQgZHN0VGV4dHVyZURlc2MuZm9ybWF0IG11c3QgYmUgY29weS1jb21wYXRpYmxlLiIK
KyAgICBpZiAoIWFyZUNvcHlDb21wYXRpYmxlKHNyY1RleHR1cmVEZXNjLmZvcm1hdCwgZHN0VGV4
dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gIklmIHNy
Y1RleHR1cmVEZXNjLmZvcm1hdCBpcyBhIGRlcHRoLXN0ZW5jaWwgZm9ybWF0OiIKKyAgICBpZiAo
VGV4dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChzcmNUZXh0dXJlRGVzYy5mb3JtYXQpKSB7
CisgICAgICAgIC8vICJzb3VyY2UuYXNwZWN0IGFuZCBkZXN0aW5hdGlvbi5hc3BlY3QgbXVzdCBi
b3RoIHJlZmVyIHRvIGFsbCBhc3BlY3RzIG9mIHNyY1RleHR1cmVEZXNjLmZvcm1hdCBhbmQgZHN0
VGV4dHVyZURlc2MuZm9ybWF0LCByZXNwZWN0aXZlbHkuIgorICAgICAgICBzd2l0Y2ggKHNvdXJj
ZS5hc3BlY3QpIHsKKyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9BbGw6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25seToK
KyAgICAgICAgICAgIGlmICghVGV4dHVyZTo6c3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQoc3JjVGV4
dHVyZURlc2MuZm9ybWF0KSB8fCBUZXh0dXJlOjpkZXB0aE9ubHlBc3BlY3RGb3JtYXQoc3JjVGV4
dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9EZXB0aE9ubHk6Cisg
ICAgICAgICAgICBpZiAoIVRleHR1cmU6OmRlcHRoT25seUFzcGVjdEZvcm1hdChzcmNUZXh0dXJl
RGVzYy5mb3JtYXQpIHx8IFRleHR1cmU6OnN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0KHNyY1RleHR1
cmVEZXNjLmZvcm1hdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRm9yY2UzMjoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoZGVzdGlu
YXRpb24uYXNwZWN0KSB7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfQWxsOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfU3RlbmNpbE9u
bHk6CisgICAgICAgICAgICBpZiAoIVRleHR1cmU6OnN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0KGRz
dFRleHR1cmVEZXNjLmZvcm1hdCkgfHwgVGV4dHVyZTo6ZGVwdGhPbmx5QXNwZWN0Rm9ybWF0KGRz
dFRleHR1cmVEZXNjLmZvcm1hdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRGVwdGhPbmx5
OgorICAgICAgICAgICAgaWYgKCFUZXh0dXJlOjpkZXB0aE9ubHlBc3BlY3RGb3JtYXQoZHN0VGV4
dHVyZURlc2MuZm9ybWF0KSB8fCBUZXh0dXJlOjpzdGVuY2lsT25seUFzcGVjdEZvcm1hdChkc3RU
ZXh0dXJlRGVzYy5mb3JtYXQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0ZvcmNlMzI6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAidmFs
aWRhdGluZyB0ZXh0dXJlIGNvcHkgcmFuZ2Uoc291cmNlLCBjb3B5U2l6ZSkgcmV0dXJucyB0cnVl
LiIKKyAgICBpZiAoIXZhbGlkYXRlVGV4dHVyZUNvcHlSYW5nZShzb3VyY2UsIGNvcHlTaXplKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gInZhbGlkYXRpbmcgdGV4dHVyZSBjb3B5
IHJhbmdlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkgcmV0dXJucyB0cnVlLiIKKyAgICBpZiAoIXZh
bGlkYXRlVGV4dHVyZUNvcHlSYW5nZShkZXN0aW5hdGlvbiwgY29weVNpemUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiVGhlIHNldCBvZiBzdWJyZXNvdXJjZXMgZm9yIHRleHR1
cmUgY29weShzb3VyY2UsIGNvcHlTaXplKSBhbmQgdGhlIHNldCBvZiBzdWJyZXNvdXJjZXMgZm9y
IHRleHR1cmUgY29weShkZXN0aW5hdGlvbiwgY29weVNpemUpIGlzIGRpc2pvaW50LiIKKyAgICAv
LyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNhYnN0cmFjdC1vcGRlZi1zZXQtb2Yt
c3VicmVzb3VyY2VzLWZvci10ZXh0dXJlLWNvcHkKKyAgICBpZiAoc291cmNlLnRleHR1cmUgPT0g
ZGVzdGluYXRpb24udGV4dHVyZSkgeworICAgICAgICAvLyBNaXAgbGV2ZWxzIGFyZSBuZXZlciBy
YW5nZXMuCisgICAgICAgIGlmIChzb3VyY2UubWlwTGV2ZWwgPT0gZGVzdGluYXRpb24ubWlwTGV2
ZWwpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoZnJvbUFQSShzb3VyY2UudGV4dHVyZSkuZGVzY3Jp
cHRvcigpLmRpbWVuc2lvbikgeworICAgICAgICAgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lv
bl8xRDoKKyAgICAgICAgICAgICAgICAvLyAiVGhlIHN1YnJlc291cmNlIG9mIGltYWdlQ29weVRl
eHR1cmUudGV4dHVyZSBhdCBtaXBtYXAgbGV2ZWwgaW1hZ2VDb3B5VGV4dHVyZS5taXBMZXZlbC4i
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBXR1BVVGV4
dHVyZURpbWVuc2lvbl8yRDogeworICAgICAgICAgICAgICAgIC8vICJGb3IgZWFjaCBhcnJheUxh
eWVyIG9mIHRoZSBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMgYXJyYXkgbGF5ZXJzIHN0YXJ0
aW5nIGF0IGltYWdlQ29weVRleHR1cmUub3JpZ2luLno6IgorICAgICAgICAgICAgICAgIC8vICJU
aGUgc3VicmVzb3VyY2Ugb2YgaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlIGF0IG1pcG1hcCBsZXZl
bCBpbWFnZUNvcHlUZXh0dXJlLm1pcExldmVsIGFuZCBhcnJheSBsYXllciBhcnJheUxheWVyLiIK
KyAgICAgICAgICAgICAgICBSYW5nZTx1aW50MzJfdD4gc291cmNlUmFuZ2Uoc291cmNlLm9yaWdp
bi56LCBzb3VyY2Uub3JpZ2luLnogKyBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMpOworICAg
ICAgICAgICAgICAgIFJhbmdlPHVpbnQzMl90PiBkZXN0aW5hdGlvblJhbmdlKGRlc3RpbmF0aW9u
Lm9yaWdpbi56LCBzb3VyY2Uub3JpZ2luLnogKyBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMp
OworICAgICAgICAgICAgICAgIGlmIChzb3VyY2VSYW5nZS5vdmVybGFwcyhkZXN0aW5hdGlvblJh
bmdlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVu
c2lvbl8zRDoKKyAgICAgICAgICAgICAgICAvLyAiVGhlIHN1YnJlc291cmNlIG9mIGltYWdlQ29w
eVRleHR1cmUudGV4dHVyZSBhdCBtaXBtYXAgbGV2ZWwgaW1hZ2VDb3B5VGV4dHVyZS5taXBMZXZl
bC4iCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBXR1BV
VGV4dHVyZURpbWVuc2lvbl9Gb3JjZTMyOgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIENvbW1hbmRFbmNv
ZGVyOjpjb3B5VGV4dHVyZVRvVGV4dHVyZShjb25zdCBXR1BVSW1hZ2VDb3B5VGV4dHVyZSYgc291
cmNlLCBjb25zdCBXR1BVSW1hZ2VDb3B5VGV4dHVyZSYgZGVzdGluYXRpb24sIGNvbnN0IFdHUFVF
eHRlbnQzRCYgY29weVNpemUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHNvdXJjZSk7Ci0gICAgVU5V
U0VEX1BBUkFNKGRlc3RpbmF0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oY29weVNpemUpOworICAg
IGlmIChzb3VyY2UubmV4dEluQ2hhaW4gfHwgZGVzdGluYXRpb24ubmV4dEluQ2hhaW4pCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2Rv
bS1ncHVjb21tYW5kZW5jb2Rlci1jb3B5dGV4dHVyZXRvdGV4dHVyZQorCisgICAgLy8gIlByZXBh
cmUgdGhlIGVuY29kZXIgc3RhdGUgb2YgdGhpcy4gSWYgaXQgcmV0dXJucyBmYWxzZSwgc3RvcC4i
CisgICAgaWYgKCFwcmVwYXJlVGhlRW5jb2RlclN0YXRlKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vICJJZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSB1bnNhdGlzZmll
ZCIKKyAgICBpZiAoIXZhbGlkYXRlQ29weVRleHR1cmVUb1RleHR1cmUoc291cmNlLCBkZXN0aW5h
dGlvbiwgY29weVNpemUpKSB7CisgICAgICAgIC8vICJnZW5lcmF0ZSBhIHZhbGlkYXRpb24gZXJy
b3IgYW5kIHN0b3AuIgorICAgICAgICBtX2RldmljZS0+Z2VuZXJhdGVBVmFsaWRhdGlvbkVycm9y
KCJWYWxpZGF0aW9uIGZhaWx1cmUuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBl
bnN1cmVCbGl0Q29tbWFuZEVuY29kZXIoKTsKKworICAgIGF1dG8gc291cmNlTG9naWNhbFNpemUg
PSBmcm9tQVBJKHNvdXJjZS50ZXh0dXJlKS5sb2dpY2FsVGV4dHVyZVN1YnJlc291cmNlRXh0ZW50
KHNvdXJjZS5taXBMZXZlbCk7CisgICAgYXV0byBkZXN0aW5hdGlvbkxvZ2ljYWxTaXplID0gZnJv
bUFQSShkZXN0aW5hdGlvbi50ZXh0dXJlKS5sb2dpY2FsVGV4dHVyZVN1YnJlc291cmNlRXh0ZW50
KGRlc3RpbmF0aW9uLm1pcExldmVsKTsKKyAgICBhdXRvIHdpZHRoRm9yTWV0YWwgPSBzdGQ6Om1p
bihzdGQ6Om1pbihjb3B5U2l6ZS53aWR0aCwgc291cmNlTG9naWNhbFNpemUud2lkdGgpLCBkZXN0
aW5hdGlvbkxvZ2ljYWxTaXplLndpZHRoKTsKKyAgICBhdXRvIGhlaWdodEZvck1ldGFsID0gc3Rk
OjptaW4oc3RkOjptaW4oY29weVNpemUuaGVpZ2h0LCBzb3VyY2VMb2dpY2FsU2l6ZS5oZWlnaHQp
LCBkZXN0aW5hdGlvbkxvZ2ljYWxTaXplLmhlaWdodCk7CisgICAgYXV0byBkZXB0aEZvck1ldGFs
ID0gc3RkOjptaW4oc3RkOjptaW4oY29weVNpemUuZGVwdGhPckFycmF5TGF5ZXJzLCBzb3VyY2VM
b2dpY2FsU2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMpLCBkZXN0aW5hdGlvbkxvZ2ljYWxTaXplLmRl
cHRoT3JBcnJheUxheWVycyk7CisKKyAgICBhdXRvJiBzb3VyY2VEZXNjcmlwdG9yID0gZnJvbUFQ
SShzb3VyY2UudGV4dHVyZSkuZGVzY3JpcHRvcigpOworICAgIC8vIEZJWE1FKFBFUkZPUk1BTkNF
KTogSXMgaXQgYWN0dWFsbHkgZmFzdGVyIHRvIHVzZSB0aGUgLVtNVExCbGl0Q29tbWFuZEVuY29k
ZXIgY29weUZyb21UZXh0dXJlOi4uLnRvVGV4dHVyZTouLi5sZXZlbENvdW50Ol0KKyAgICAvLyB2
YXJpYW50LCB3aGVyZSBwb3NzaWJsZSwgcmF0aGVyIHRoYW4gY2FsbGluZyB0aGUgb3RoZXIgdmFy
aWFudCBpbiBhIGxvb3A/CisgICAgc3dpdGNoIChzb3VyY2VEZXNjcmlwdG9yLmRpbWVuc2lvbikg
eworICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25fMUQ6IHsKKyAgICAgICAgLy8gaHR0cHM6
Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24vbWV0YWwvbXRsYmxpdGNvbW1hbmRl
bmNvZGVyLzE0MDA3NTYtY29weWZyb210ZXh0dXJlP2xhbmd1YWdlPW9iamMKKyAgICAgICAgLy8g
IldoZW4geW91IGNvcHkgdG8gYSAxRCB0ZXh0dXJlLCBoZWlnaHQgYW5kIGRlcHRoIG11c3QgYmUg
MS4iCisgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IE1UTFNpemVNYWtlKHdpZHRoRm9yTWV0YWws
IDEsIDEpOworICAgICAgICBhdXRvIHNvdXJjZU9yaWdpbiA9IE1UTE9yaWdpbk1ha2Uoc291cmNl
Lm9yaWdpbi54LCAxLCAxKTsKKyAgICAgICAgYXV0byBkZXN0aW5hdGlvbk9yaWdpbiA9IE1UTE9y
aWdpbk1ha2UoZGVzdGluYXRpb24ub3JpZ2luLngsIDEsIDEpOworICAgICAgICBmb3IgKHVpbnQz
Ml90IGxheWVyID0gMDsgbGF5ZXIgPCBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnM7ICsrbGF5
ZXIpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBVc2UgY2hlY2tlZCBhcml0aG1ldGljLgorICAg
ICAgICAgICAgTlNVSW50ZWdlciBzb3VyY2VTbGljZSA9IHNvdXJjZS5vcmlnaW4ueiArIGxheWVy
OworICAgICAgICAgICAgTlNVSW50ZWdlciBkZXN0aW5hdGlvblNsaWNlID0gZGVzdGluYXRpb24u
b3JpZ2luLnogKyBsYXllcjsKKyAgICAgICAgICAgIFttX2JsaXRDb21tYW5kRW5jb2RlcgorICAg
ICAgICAgICAgICAgIGNvcHlGcm9tVGV4dHVyZTpmcm9tQVBJKHNvdXJjZS50ZXh0dXJlKS50ZXh0
dXJlKCkKKyAgICAgICAgICAgICAgICBzb3VyY2VTbGljZTpzb3VyY2VTbGljZQorICAgICAgICAg
ICAgICAgIHNvdXJjZUxldmVsOnNvdXJjZS5taXBMZXZlbAorICAgICAgICAgICAgICAgIHNvdXJj
ZU9yaWdpbjpzb3VyY2VPcmlnaW4KKyAgICAgICAgICAgICAgICBzb3VyY2VTaXplOnNvdXJjZVNp
emUKKyAgICAgICAgICAgICAgICB0b1RleHR1cmU6ZnJvbUFQSShkZXN0aW5hdGlvbi50ZXh0dXJl
KS50ZXh0dXJlKCkKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblNsaWNlOmRlc3RpbmF0aW9u
U2xpY2UKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkxldmVsOmRlc3RpbmF0aW9uLm1pcExl
dmVsCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25PcmlnaW46ZGVzdGluYXRpb25PcmlnaW5d
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdHUFVUZXh0dXJl
RGltZW5zaW9uXzJEOiB7CisgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9k
b2N1bWVudGF0aW9uL21ldGFsL210bGJsaXRjb21tYW5kZW5jb2Rlci8xNDAwNzU2LWNvcHlmcm9t
dGV4dHVyZT9sYW5ndWFnZT1vYmpjCisgICAgICAgIC8vICJXaGVuIHlvdSBjb3B5IHRvIGEgMkQg
dGV4dHVyZSwgZGVwdGggbXVzdCBiZSAxLiIKKyAgICAgICAgYXV0byBzb3VyY2VTaXplID0gTVRM
U2l6ZU1ha2Uod2lkdGhGb3JNZXRhbCwgaGVpZ2h0Rm9yTWV0YWwsIDEpOworICAgICAgICBhdXRv
IHNvdXJjZU9yaWdpbiA9IE1UTE9yaWdpbk1ha2Uoc291cmNlLm9yaWdpbi54LCBzb3VyY2Uub3Jp
Z2luLnksIDEpOworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uT3JpZ2luID0gTVRMT3JpZ2luTWFr
ZShkZXN0aW5hdGlvbi5vcmlnaW4ueCwgZGVzdGluYXRpb24ub3JpZ2luLnksIDEpOworICAgICAg
ICBmb3IgKHVpbnQzMl90IGxheWVyID0gMDsgbGF5ZXIgPCBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlM
YXllcnM7ICsrbGF5ZXIpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBVc2UgY2hlY2tlZCBhcml0
aG1ldGljLgorICAgICAgICAgICAgTlNVSW50ZWdlciBzb3VyY2VTbGljZSA9IHNvdXJjZS5vcmln
aW4ueiArIGxheWVyOworICAgICAgICAgICAgTlNVSW50ZWdlciBkZXN0aW5hdGlvblNsaWNlID0g
ZGVzdGluYXRpb24ub3JpZ2luLnogKyBsYXllcjsKKyAgICAgICAgICAgIFttX2JsaXRDb21tYW5k
RW5jb2RlcgorICAgICAgICAgICAgICAgIGNvcHlGcm9tVGV4dHVyZTpmcm9tQVBJKHNvdXJjZS50
ZXh0dXJlKS50ZXh0dXJlKCkKKyAgICAgICAgICAgICAgICBzb3VyY2VTbGljZTpzb3VyY2VTbGlj
ZQorICAgICAgICAgICAgICAgIHNvdXJjZUxldmVsOnNvdXJjZS5taXBMZXZlbAorICAgICAgICAg
ICAgICAgIHNvdXJjZU9yaWdpbjpzb3VyY2VPcmlnaW4KKyAgICAgICAgICAgICAgICBzb3VyY2VT
aXplOnNvdXJjZVNpemUKKyAgICAgICAgICAgICAgICB0b1RleHR1cmU6ZnJvbUFQSShkZXN0aW5h
dGlvbi50ZXh0dXJlKS50ZXh0dXJlKCkKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblNsaWNl
OmRlc3RpbmF0aW9uU2xpY2UKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkxldmVsOmRlc3Rp
bmF0aW9uLm1pcExldmVsCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25PcmlnaW46ZGVzdGlu
YXRpb25PcmlnaW5dOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IFdHUFVUZXh0dXJlRGltZW5zaW9uXzNEOiB7CisgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IE1U
TFNpemVNYWtlKHdpZHRoRm9yTWV0YWwsIGhlaWdodEZvck1ldGFsLCBkZXB0aEZvck1ldGFsKTsK
KyAgICAgICAgYXV0byBzb3VyY2VPcmlnaW4gPSBNVExPcmlnaW5NYWtlKHNvdXJjZS5vcmlnaW4u
eCwgc291cmNlLm9yaWdpbi55LCBzb3VyY2Uub3JpZ2luLnopOworICAgICAgICBhdXRvIGRlc3Rp
bmF0aW9uT3JpZ2luID0gTVRMT3JpZ2luTWFrZShkZXN0aW5hdGlvbi5vcmlnaW4ueCwgZGVzdGlu
YXRpb24ub3JpZ2luLnksIGRlc3RpbmF0aW9uLm9yaWdpbi56KTsKKyAgICAgICAgW21fYmxpdENv
bW1hbmRFbmNvZGVyCisgICAgICAgICAgICBjb3B5RnJvbVRleHR1cmU6ZnJvbUFQSShzb3VyY2Uu
dGV4dHVyZSkudGV4dHVyZSgpCisgICAgICAgICAgICBzb3VyY2VTbGljZTowCisgICAgICAgICAg
ICBzb3VyY2VMZXZlbDpzb3VyY2UubWlwTGV2ZWwKKyAgICAgICAgICAgIHNvdXJjZU9yaWdpbjpz
b3VyY2VPcmlnaW4KKyAgICAgICAgICAgIHNvdXJjZVNpemU6c291cmNlU2l6ZQorICAgICAgICAg
ICAgdG9UZXh0dXJlOmZyb21BUEkoZGVzdGluYXRpb24udGV4dHVyZSkudGV4dHVyZSgpCisgICAg
ICAgICAgICBkZXN0aW5hdGlvblNsaWNlOjAKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uTGV2ZWw6
ZGVzdGluYXRpb24ubWlwTGV2ZWwKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uT3JpZ2luOmRlc3Rp
bmF0aW9uT3JpZ2luXTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV0dQVVRleHR1
cmVEaW1lbnNpb25fRm9yY2UzMjoKKyAgICAgICAgcmV0dXJuOworICAgIH0KIH0KIAogc3RhdGlj
IGJvb2wgdmFsaWRhdGVDbGVhckJ1ZmZlcihjb25zdCBCdWZmZXImIGJ1ZmZlciwgdWludDY0X3Qg
b2Zmc2V0LCB1aW50NjRfdCBzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUv
Q29tcHV0ZVBpcGVsaW5lLm1tIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tcHV0ZVBpcGVsaW5l
Lm1tCmluZGV4IGVkOWI4Y2ZmNjQxNDMwMTJlNzdiM2UyMWZjNWU5Y2FiMDc1OTM2NGMuLjZmYTFj
ZWU5YmI0YzZhNzI3NmUyM2NjYzNiZmMzMmJmODA0ZDhmOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJHUFUvV2ViR1BVL0NvbXB1dGVQaXBlbGluZS5tbQorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQ
VS9Db21wdXRlUGlwZWxpbmUubW0KQEAgLTE0Niw4ICsxNDYsOCBAQCBSZWZQdHI8Q29tcHV0ZVBp
cGVsaW5lPiBEZXZpY2U6OmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb25zdCBXR1BVQ29tcHV0ZVBp
cGVsaW5lRAogICAgIGlmIChkZXNjcmlwdG9yLm5leHRJbkNoYWluIHx8IGRlc2NyaXB0b3IuY29t
cHV0ZS5uZXh0SW5DaGFpbikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBjb25zdCBT
aGFkZXJNb2R1bGUmIHNoYWRlck1vZHVsZSA9IFdlYkdQVTo6ZnJvbUFQSShkZXNjcmlwdG9yLmNv
bXB1dGUubW9kdWxlKTsKLSAgICBjb25zdCBQaXBlbGluZUxheW91dCYgcGlwZWxpbmVMYXlvdXQg
PSBXZWJHUFU6OmZyb21BUEkoZGVzY3JpcHRvci5sYXlvdXQpOworICAgIGNvbnN0IFNoYWRlck1v
ZHVsZSYgc2hhZGVyTW9kdWxlID0gZnJvbUFQSShkZXNjcmlwdG9yLmNvbXB1dGUubW9kdWxlKTsK
KyAgICBjb25zdCBQaXBlbGluZUxheW91dCYgcGlwZWxpbmVMYXlvdXQgPSBmcm9tQVBJKGRlc2Ny
aXB0b3IubGF5b3V0KTsKICAgICBhdXRvIGxhYmVsID0gZnJvbUFQSShkZXNjcmlwdG9yLmxhYmVs
KTsKIAogICAgIGF1dG8gbGlicmFyeUNyZWF0aW9uUmVzdWx0ID0gY3JlYXRlTGlicmFyeShtX2Rl
dmljZSwgc2hhZGVyTW9kdWxlLCBwaXBlbGluZUxheW91dCwgZGVzY3JpcHRvci5jb21wdXRlLmVu
dHJ5UG9pbnQsIGxhYmVsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1BpcGVs
aW5lTGF5b3V0Lm1tIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvUGlwZWxpbmVMYXlvdXQubW0KaW5k
ZXggZWZhMGQ2ZDUxN2JhY2I2N2NlMjM2ZDA0MWFmMWE1ZmYzNTgwOTZmYS4uMDY1ODNkZjBkZGFm
M2M2OTY2ZTk0NGZhMzYzZTY0MDg1OTFiYWE3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9X
ZWJHUFUvUGlwZWxpbmVMYXlvdXQubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvUGlwZWxp
bmVMYXlvdXQubW0KQEAgLTQxLDcgKzQxLDcgQEAgUmVmUHRyPFBpcGVsaW5lTGF5b3V0PiBEZXZp
Y2U6OmNyZWF0ZVBpcGVsaW5lTGF5b3V0KGNvbnN0IFdHUFVQaXBlbGluZUxheW91dERlc2MKICAg
ICBiaW5kR3JvdXBMYXlvdXRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci5iaW5k
R3JvdXBMYXlvdXRDb3VudCk7CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGRlc2NyaXB0
b3IuYmluZEdyb3VwTGF5b3V0Q291bnQ7ICsraSkgewogICAgICAgICBhdXRvKiBiaW5kR3JvdXBM
YXlvdXQgPSBkZXNjcmlwdG9yLmJpbmRHcm91cExheW91dHNbaV07Ci0gICAgICAgIGJpbmRHcm91
cExheW91dHMudW5jaGVja2VkQXBwZW5kKFdlYkdQVTo6ZnJvbUFQSShiaW5kR3JvdXBMYXlvdXQp
KTsKKyAgICAgICAgYmluZEdyb3VwTGF5b3V0cy51bmNoZWNrZWRBcHBlbmQoZnJvbUFQSShiaW5k
R3JvdXBMYXlvdXQpKTsKICAgICB9CiAgICAgcmV0dXJuIFBpcGVsaW5lTGF5b3V0OjpjcmVhdGUo
V1RGTW92ZShiaW5kR3JvdXBMYXlvdXRzKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BV
L1dlYkdQVS9TaGFkZXJNb2R1bGUubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9TaGFkZXJNb2R1
bGUubW0KaW5kZXggZTAwNzU1Y2ZiNTViNGM2NmE4OTI3ZGQzZTVlMDJlYTkxMDE3MGM0NC4uYjUx
ZTY4OTRlNjM2Y2NkMmQzYzIxMDRiZTQ1ZjExYmQwMDgyNzQ3YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkdQVS9XZWJHUFUvU2hhZGVyTW9kdWxlLm1tCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BV
L1NoYWRlck1vZHVsZS5tbQpAQCAtODgsOCArODgsOCBAQCBzdGF0aWMgUmVmUHRyPFNoYWRlck1v
ZHVsZT4gZWFybHlDb21waWxlU2hhZGVyTW9kdWxlKGlkPE1UTERldmljZT4gZGV2aWNlLCBzdGQ6
OgogICAgICAgICBjb25zdCBhdXRvJiBoaW50ID0gc3VwcGxpZWRIaW50cy5oaW50c1tpXTsKICAg
ICAgICAgaWYgKGhpbnQubmV4dEluQ2hhaW4pCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgaGludHMuYWRkKGhpbnQua2V5LCBXZWJHUFU6OmZyb21BUEkoaGludC5oaW50Lmxh
eW91dCkpOwotICAgICAgICBhdXRvIGNvbnZlcnRlZFBpcGVsaW5lTGF5b3V0ID0gU2hhZGVyTW9k
dWxlOjpjb252ZXJ0UGlwZWxpbmVMYXlvdXQoV2ViR1BVOjpmcm9tQVBJKGhpbnQuaGludC5sYXlv
dXQpKTsKKyAgICAgICAgaGludHMuYWRkKGhpbnQua2V5LCBmcm9tQVBJKGhpbnQuaGludC5sYXlv
dXQpKTsKKyAgICAgICAgYXV0byBjb252ZXJ0ZWRQaXBlbGluZUxheW91dCA9IFNoYWRlck1vZHVs
ZTo6Y29udmVydFBpcGVsaW5lTGF5b3V0KGZyb21BUEkoaGludC5oaW50LmxheW91dCkpOwogICAg
ICAgICB3Z3NsSGludHMuYWRkKGhpbnQua2V5LCBXVEZNb3ZlKGNvbnZlcnRlZFBpcGVsaW5lTGF5
b3V0KSk7CiAgICAgfQogICAgIGF1dG8gcHJlcGFyZVJlc3VsdCA9IFdHU0w6OnByZXBhcmUoc3Rk
OjpnZXQ8V0dTTDo6U3VjY2Vzc2Z1bENoZWNrPihjaGVja1Jlc3VsdCkuYXN0LCB3Z3NsSGludHMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvVGV4dHVyZS5oIGIvU291cmNlL1dl
YkdQVS9XZWJHUFUvVGV4dHVyZS5oCmluZGV4IDlhNTk3OGQ3MzkxMmM5OTFlNGI0M2JjZWQyNzlk
MTFkM2ViYjc0MDUuLjM1MWU2MWU2MWM0NDlmN2E1ZDY3MzZmODg5NTgyOGQ3ZjAwMWVmMTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmUuaAorKysgYi9Tb3VyY2UvV2Vi
R1BVL1dlYkdQVS9UZXh0dXJlLmgKQEAgLTUxLDYgKzUxLDE2IEBAIHB1YmxpYzoKICAgICB2b2lk
IGRlc3Ryb3koKTsKICAgICB2b2lkIHNldExhYmVsKFN0cmluZyYmKTsKIAorICAgIHN0YXRpYyB1
aW50MzJfdCB0ZXhlbEJsb2NrV2lkdGgoV0dQVVRleHR1cmVGb3JtYXQpOworICAgIHN0YXRpYyB1
aW50MzJfdCB0ZXhlbEJsb2NrSGVpZ2h0KFdHUFVUZXh0dXJlRm9ybWF0KTsKKyAgICBzdGF0aWMg
c3RkOjpvcHRpb25hbDx1aW50MzJfdD4gdGV4ZWxCbG9ja1NpemUoV0dQVVRleHR1cmVGb3JtYXQp
OworICAgIHN0YXRpYyBib29sIGlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoV0dQVVRleHR1cmVGb3Jt
YXQpOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdHUFVUZXh0dXJlRm9ybWF0PiBzdGVuY2ls
T25seUFzcGVjdEZvcm1hdChXR1BVVGV4dHVyZUZvcm1hdCk7CisgICAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8V0dQVVRleHR1cmVGb3JtYXQ+IGRlcHRoT25seUFzcGVjdEZvcm1hdChXR1BVVGV4dHVy
ZUZvcm1hdCk7CisKKyAgICBXR1BVRXh0ZW50M0QgbG9naWNhbFRleHR1cmVTdWJyZXNvdXJjZUV4
dGVudCh1aW50MzJfdCBtaXBMZXZlbCk7CisgICAgV0dQVUV4dGVudDNEIHBoeXNpY2FsVGV4dHVy
ZVN1YnJlc291cmNlRXh0ZW50KHVpbnQzMl90IG1pcExldmVsKTsKKwogICAgIGlkPE1UTFRleHR1
cmU+IHRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmU7IH0KICAgICBjb25zdCBXR1BV
VGV4dHVyZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IoKSBjb25zdCB7IHJldHVybiBtX2Rlc2NyaXB0
b3I7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvVGV4dHVyZS5tbSBiL1Nv
dXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmUubW0KaW5kZXggOGY1NGZjZDdjMTg4MzkzZmQ2Y2I1
YTQ2N2Q5ZTQ0NjY2OTc3OTJiMi4uM2I2YTU1YjM2OTFmYzRlNTEyNmJhZmFlMTZjYjI5MzI0MDNk
MDNmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvVGV4dHVyZS5tbQorKysgYi9T
b3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLm1tCkBAIC0zMyw2ICszMyw4IEBACiAKIG5hbWVz
cGFjZSBXZWJHUFUgewogCitzdGF0aWMgc3RkOjpvcHRpb25hbDxNVExQaXhlbEZvcm1hdD4gcGl4
ZWxGb3JtYXQoV0dQVVRleHR1cmVGb3JtYXQpOworCiBzdGF0aWMgc3RkOjpvcHRpb25hbDxXR1BV
RmVhdHVyZU5hbWU+IGZlYXR1cmVSZXF1aXJlbWVudEZvckZvcm1hdChXR1BVVGV4dHVyZUZvcm1h
dCBmb3JtYXQpCiB7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKQEAgLTI0Nyw3ICsyNDksNyBAQCBz
dGF0aWMgYm9vbCBpc0NvbXByZXNzZWRGb3JtYXQoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0KQog
ICAgIH0KIH0KIAotc3RhdGljIGJvb2wgaXNEZXB0aE9yU3RlbmNpbEZvcm1hdChXR1BVVGV4dHVy
ZUZvcm1hdCBmb3JtYXQpCitib29sIFRleHR1cmU6OmlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoV0dQ
VVRleHR1cmVGb3JtYXQgZm9ybWF0KQogewogICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5p
by9ncHV3ZWIvI2RlcHRoLWZvcm1hdHMKICAgICAvLyAiQSBkZXB0aC1vci1zdGVuY2lsIGZvcm1h
dCBpcyBhbnkgZm9ybWF0IHdpdGggZGVwdGggYW5kL29yIHN0ZW5jaWwgYXNwZWN0cy4iCkBAIC0z
NTQsNyArMzU2LDcgQEAgc3RhdGljIGJvb2wgaXNEZXB0aE9yU3RlbmNpbEZvcm1hdChXR1BVVGV4
dHVyZUZvcm1hdCBmb3JtYXQpCiAgICAgfQogfQogCi1zdGF0aWMgdWludDMyX3QgdGV4ZWxCbG9j
a1dpZHRoKFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCkKK3VpbnQzMl90IFRleHR1cmU6OnRleGVs
QmxvY2tXaWR0aChXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQpCiB7CiAgICAgLy8gaHR0cHM6Ly9n
cHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jdGV4ZWwtYmxvY2std2lkdGgKICAgICBzd2l0Y2ggKGZv
cm1hdCkgewpAQCAtNDY4LDcgKzQ3MCw3IEBAIHN0YXRpYyB1aW50MzJfdCB0ZXhlbEJsb2NrV2lk
dGgoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0KQogICAgIH0KIH0KIAotc3RhdGljIHVpbnQzMl90
IHRleGVsQmxvY2tIZWlnaHQoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0KQordWludDMyX3QgVGV4
dHVyZTo6dGV4ZWxCbG9ja0hlaWdodChXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQpCiB7CiAgICAg
Ly8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jdGV4ZWwtYmxvY2staGVpZ2h0CiAg
ICAgc3dpdGNoIChmb3JtYXQpIHsKQEAgLTU4Nyw2ICs1ODksMTM3IEBAIHN0YXRpYyB1aW50MzJf
dCB0ZXhlbEJsb2NrSGVpZ2h0KFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCkKICAgICB9CiB9CiAK
K3N0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IFRleHR1cmU6OnRleGVsQmxvY2tTaXplKFdHUFVUZXh0
dXJlRm9ybWF0IGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfVW5kZWZpbmVkOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SOFVub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjhTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X1I4VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4U2ludDoKKyAgICAg
ICAgcmV0dXJuIDE7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMTZVaW50OgorICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfUjE2U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X1IxNkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkc4VW5vcm06CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X1JHOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhTaW50OgorICAgICAgICBy
ZXR1cm4gMjsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IzMkZsb2F0OgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfUjMyVWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1Iz
MlNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2VWludDoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X1JHMTZTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkcx
NkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQThVbm9ybToKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfUkdCQThTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4VWludDoK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0JHUkE4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CR1JBOFVu
b3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQjEwQTJVbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMTFCMTBVZmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9SR0I5RTVVZmxvYXQ6CisgICAgICAgIHJldHVybiA0OworICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfUkczMkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkczMlVp
bnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzMyU2ludDoKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X1JHQkExNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JB
MTZTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTE2RmxvYXQ6CisgICAgICAg
IHJldHVybiA4OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTMyRmxvYXQ6CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfUkdCQTMyU2ludDoKKyAgICAgICAgcmV0dXJuIDE2OworICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfU3RlbmNpbDg6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfRGVwdGgxNlVub3JtOgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X0RlcHRoMjRQbHVzOgorICAgICAgICBBU1NFUlQocGl4ZWxGb3JtYXQoZm9y
bWF0KSA9PSBNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdCk7CisgICAgICAgIHJldHVybiA0Owor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFBsdXNTdGVuY2lsODoKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRV
bm9ybVN0ZW5jaWw4OgorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0OgorICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMzJGbG9hdFN0ZW5jaWw4OgorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMxUkdCQVVub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMxUkdCQVVub3JtU3JnYjoKKyAgICAgICAgcmV0
dXJuIDg7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzJSR0JBVW5vcm06CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzJSR0JBVW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gODsK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiAxNjsKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNFJVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0JDNFJTbm9ybToKKyAgICAgICAgcmV0dXJuIDg7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9CQzVSR1Vub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM1UkdTbm9ybToK
KyAgICAgICAgcmV0dXJuIDE2OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM2SFJHQlVm
bG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNkhSR0JGbG9hdDoKKyAgICAgICAg
cmV0dXJuIDE2OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM3UkdCQVVub3JtOgorICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM3UkdCQVVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJu
IDE2OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhVbm9ybToKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfRVRDMlJHQjhBMVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRD
MlJHQjhBMVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0JBOFVu
b3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQkE4VW5vcm1TcmdiOgorICAg
ICAgICByZXR1cm4gODsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1IxMVVub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUjExU25vcm06CisgICAgICAgIHJldHVybiA4
OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUkcxMVVub3JtOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfRUFDUkcxMVNub3JtOgorICAgICAgICByZXR1cm4gMTY7CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNHg0VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9BU1RDNHg0VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4
NFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NFVub3JtU3JnYjoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM1eDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0FTVEM1eDVVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9B
U1RDNng1VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng1VW5vcm1Tcmdi
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NlVub3JtOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfQVNUQzZ4NlVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0FTVEM4eDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDVVbm9y
bVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg2VW5vcm06CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg2VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfQVNUQzh4OFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4
OFVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg1VW5vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NVVub3JtU3JnYjoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg2VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9BU1RDMTB4NlVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg4
VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4OFVub3JtU3JnYjoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHgxMFVub3JtOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzEweDEwVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfQVNUQzEyeDEwVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTBV
bm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTJVbm9ybToKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMlVub3JtU3JnYjoKKyAgICAgICAgcmV0
dXJuIDE2OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRm9yY2UzMjoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwogc3RhdGlj
IGJvb2wgaXNSZW5kZXJhYmxlRm9ybWF0KFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCkKIHsKICAg
ICAvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNyZW5kZXJhYmxlLWZvcm1hdApA
QCAtOTc4LDcgKzExMTEsNyBAQCBib29sIERldmljZTo6dmFsaWRhdGVDcmVhdGVUZXh0dXJlKGNv
bnN0IFdHUFVUZXh0dXJlRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgICAgICAvLyAiZGVzY3JpcHRvci5mb3JtYXQgbXVzdCBub3QgYmUgYSBj
b21wcmVzc2VkIGZvcm1hdCBvciBkZXB0aC1vci1zdGVuY2lsIGZvcm1hdC4iCi0gICAgICAgIGlm
IChpc0NvbXByZXNzZWRGb3JtYXQoZGVzY3JpcHRvci5mb3JtYXQpIHx8IGlzRGVwdGhPclN0ZW5j
aWxGb3JtYXQoZGVzY3JpcHRvci5mb3JtYXQpKQorICAgICAgICBpZiAoaXNDb21wcmVzc2VkRm9y
bWF0KGRlc2NyaXB0b3IuZm9ybWF0KSB8fCBUZXh0dXJlOjppc0RlcHRoT3JTdGVuY2lsRm9ybWF0
KGRlc2NyaXB0b3IuZm9ybWF0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8yRDoKQEAgLTEwMDAsNyArMTEz
Myw3IEBAIGJvb2wgRGV2aWNlOjp2YWxpZGF0ZUNyZWF0ZVRleHR1cmUoY29uc3QgV0dQVVRleHR1
cmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgIC8vICJkZXNjcmlwdG9yLmZvcm1hdCBtdXN0IG5vdCBiZSBhIGNvbXByZXNzZWQgZm9y
bWF0IG9yIGRlcHRoLW9yLXN0ZW5jaWwgZm9ybWF0LiIKLSAgICAgICAgaWYgKGlzQ29tcHJlc3Nl
ZEZvcm1hdChkZXNjcmlwdG9yLmZvcm1hdCkgfHwgaXNEZXB0aE9yU3RlbmNpbEZvcm1hdChkZXNj
cmlwdG9yLmZvcm1hdCkpCisgICAgICAgIGlmIChpc0NvbXByZXNzZWRGb3JtYXQoZGVzY3JpcHRv
ci5mb3JtYXQpIHx8IFRleHR1cmU6OmlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoZGVzY3JpcHRvci5m
b3JtYXQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uX0ZvcmNlMzI6CkBAIC0xMDA4LDExICsxMTQxLDExIEBA
IGJvb2wgRGV2aWNlOjp2YWxpZGF0ZUNyZWF0ZVRleHR1cmUoY29uc3QgV0dQVVRleHR1cmVEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yKQogICAgIH0KIAogICAgIC8vICJkZXNjcmlwdG9yLnNpemUud2lk
dGggbXVzdCBiZSBtdWx0aXBsZSBvZiB0ZXhlbCBibG9jayB3aWR0aC4iCi0gICAgaWYgKGRlc2Ny
aXB0b3Iuc2l6ZS53aWR0aCAlIHRleGVsQmxvY2tXaWR0aChkZXNjcmlwdG9yLmZvcm1hdCkpCisg
ICAgaWYgKGRlc2NyaXB0b3Iuc2l6ZS53aWR0aCAlIFRleHR1cmU6OnRleGVsQmxvY2tXaWR0aChk
ZXNjcmlwdG9yLmZvcm1hdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vICJkZXNj
cmlwdG9yLnNpemUuaGVpZ2h0IG11c3QgYmUgbXVsdGlwbGUgb2YgdGV4ZWwgYmxvY2sgaGVpZ2h0
LiIKLSAgICBpZiAoZGVzY3JpcHRvci5zaXplLmhlaWdodCAlIHRleGVsQmxvY2tIZWlnaHQoZGVz
Y3JpcHRvci5mb3JtYXQpKQorICAgIGlmIChkZXNjcmlwdG9yLnNpemUuaGVpZ2h0ICUgVGV4dHVy
ZTo6dGV4ZWxCbG9ja0hlaWdodChkZXNjcmlwdG9yLmZvcm1hdCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vICJJZiBkZXNjcmlwdG9yLnNhbXBsZUNvdW50ID4gMToiCkBAIC0xNDI0
LDYgKzE1NTcsNzkgQEAgdm9pZCBUZXh0dXJlOjpzZXRMYWJlbChTdHJpbmcmJiBsYWJlbCkKICAg
ICBtX3RleHR1cmUubGFiZWwgPSBsYWJlbDsKIH0KIAorV0dQVUV4dGVudDNEIFRleHR1cmU6Omxv
Z2ljYWxUZXh0dXJlU3VicmVzb3VyY2VFeHRlbnQodWludDMyX3QgbWlwTGV2ZWwpCit7CisgICAg
Ly8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jYWJzdHJhY3Qtb3BkZWYtbG9naWNh
bC10ZXh0dXJlLXN1YnJlc291cmNlLWV4dGVudAorCisgICAgc3dpdGNoIChtX2Rlc2NyaXB0b3Iu
ZGltZW5zaW9uKSB7CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8xRDoKKyAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgIC8vICJTZXQgZXh0ZW50LndpZHRoIHRvIG1heCgxLCBkZXNj
cmlwdG9yLnNpemUud2lkdGgg4omrIG1pcExldmVsKS4iCisgICAgICAgICAgICBzdGQ6Om1heChz
dGF0aWNfY2FzdDx1aW50MzJfdD4oMSksIG1fZGVzY3JpcHRvci5zaXplLndpZHRoID4+IG1pcExl
dmVsKSwKKyAgICAgICAgICAgIC8vICJTZXQgZXh0ZW50LmhlaWdodCB0byAxLiIKKyAgICAgICAg
ICAgIDEsCisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgdG8g
MS4iCisgICAgICAgICAgICAxIH07CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8yRDoK
KyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIC8vICJTZXQgZXh0ZW50LndpZHRoIHRvIG1h
eCgxLCBkZXNjcmlwdG9yLnNpemUud2lkdGgg4omrIG1pcExldmVsKS4iCisgICAgICAgICAgICBz
dGQ6Om1heChzdGF0aWNfY2FzdDx1aW50MzJfdD4oMSksIG1fZGVzY3JpcHRvci5zaXplLndpZHRo
ID4+IG1pcExldmVsKSwKKyAgICAgICAgICAgIC8vICJTZXQgZXh0ZW50LmhlaWdodCB0byBtYXgo
MSwgZGVzY3JpcHRvci5zaXplLmhlaWdodCDiiasgbWlwTGV2ZWwpLiIKKyAgICAgICAgICAgIHN0
ZDo6bWF4KHN0YXRpY19jYXN0PHVpbnQzMl90PigxKSwgbV9kZXNjcmlwdG9yLnNpemUuaGVpZ2h0
ID4+IG1pcExldmVsKSwKKyAgICAgICAgICAgIC8vICJTZXQgZXh0ZW50LmRlcHRoT3JBcnJheUxh
eWVycyB0byAxLiIKKyAgICAgICAgICAgIDEgfTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5z
aW9uXzNEOgorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgLy8gIlNldCBleHRlbnQud2lk
dGggdG8gbWF4KDEsIGRlc2NyaXB0b3Iuc2l6ZS53aWR0aCDiiasgbWlwTGV2ZWwpLiIKKyAgICAg
ICAgICAgIHN0ZDo6bWF4KHN0YXRpY19jYXN0PHVpbnQzMl90PigxKSwgbV9kZXNjcmlwdG9yLnNp
emUud2lkdGggPj4gbWlwTGV2ZWwpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuaGVpZ2h0
IHRvIG1heCgxLCBkZXNjcmlwdG9yLnNpemUuaGVpZ2h0IOKJqyBtaXBMZXZlbCkuIgorICAgICAg
ICAgICAgc3RkOjptYXgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEpLCBtX2Rlc2NyaXB0b3Iuc2l6
ZS5oZWlnaHQgPj4gbWlwTGV2ZWwpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuZGVwdGhP
ckFycmF5TGF5ZXJzIHRvIG1heCgxLCBkZXNjcmlwdG9yLnNpemUuZGVwdGhPckFycmF5TGF5ZXJz
IOKJqyBtaXBMZXZlbCkuIgorICAgICAgICAgICAgc3RkOjptYXgoc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KDEpLCBtX2Rlc2NyaXB0b3Iuc2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMgPj4gbWlwTGV2ZWwp
IH07CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl9Gb3JjZTMyOgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdHUFVFeHRlbnQzRCB7IH07CisgICAg
fQorfQorCitXR1BVRXh0ZW50M0QgVGV4dHVyZTo6cGh5c2ljYWxUZXh0dXJlU3VicmVzb3VyY2VF
eHRlbnQodWludDMyX3QgbWlwTGV2ZWwpCit7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHVi
LmlvL2dwdXdlYi8jYWJzdHJhY3Qtb3BkZWYtcGh5c2ljYWwtdGV4dHVyZS1zdWJyZXNvdXJjZS1l
eHRlbnQKKworICAgIC8vICJMZXQgbG9naWNhbEV4dGVudCBiZSBMb2dpY2FsIHRleHR1cmUgc3Vi
cmVzb3VyY2UgZXh0ZW50KGRlc2NyaXB0b3IsIG1pcExldmVsKS4iCisgICAgYXV0byBsb2dpY2Fs
RXh0ZW50ID0gbG9naWNhbFRleHR1cmVTdWJyZXNvdXJjZUV4dGVudChtaXBMZXZlbCk7CisKKyAg
ICBzd2l0Y2ggKG1fZGVzY3JpcHRvci5kaW1lbnNpb24pIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJl
RGltZW5zaW9uXzFEOgorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgLy8gIlNldCBleHRl
bnQud2lkdGggdG8gbG9naWNhbEV4dGVudC53aWR0aCByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0
IG11bHRpcGxlIG9mIGRlc2NyaXB0b3LigJlzIHRleGVsIGJsb2NrIHdpZHRoLiIKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2YodGV4ZWxC
bG9ja1dpZHRoKG1fZGVzY3JpcHRvci5mb3JtYXQpLCBsb2dpY2FsRXh0ZW50LndpZHRoKSksCisg
ICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5oZWlnaHQgdG8gMS4iCisgICAgICAgICAgICAxLAor
ICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzIHRvIDEuIgorICAg
ICAgICAgICAgMSB9OworICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25fMkQ6CisgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC53aWR0aCB0byBsb2dpY2FsRXh0
ZW50LndpZHRoIHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgZGVzY3JpcHRv
cuKAmXMgdGV4ZWwgYmxvY2sgd2lkdGguIgorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZih0ZXhlbEJsb2NrV2lkdGgobV9kZXNjcmlwdG9y
LmZvcm1hdCksIGxvZ2ljYWxFeHRlbnQud2lkdGgpKSwKKyAgICAgICAgICAgIC8vICJTZXQgZXh0
ZW50LmhlaWdodCB0byBsb2dpY2FsRXh0ZW50LmhlaWdodCByb3VuZGVkIHVwIHRvIHRoZSBuZWFy
ZXN0IG11bHRpcGxlIG9mIGRlc2NyaXB0b3LigJlzIHRleGVsIGJsb2NrIGhlaWdodC4iCisgICAg
ICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHRl
eGVsQmxvY2tIZWlnaHQobV9kZXNjcmlwdG9yLmZvcm1hdCksIGxvZ2ljYWxFeHRlbnQuaGVpZ2h0
KSksCisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgdG8gMS4i
CisgICAgICAgICAgICAxIH07CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8zRDoKKyAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIC8vICJTZXQgZXh0ZW50LndpZHRoIHRvIGxvZ2lj
YWxFeHRlbnQud2lkdGggcm91bmRlZCB1cCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiBkZXNj
cmlwdG9y4oCZcyB0ZXhlbCBibG9jayB3aWR0aC4iCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHRleGVsQmxvY2tXaWR0aChtX2Rlc2Ny
aXB0b3IuZm9ybWF0KSwgbG9naWNhbEV4dGVudC53aWR0aCkpLAorICAgICAgICAgICAgLy8gIlNl
dCBleHRlbnQuaGVpZ2h0IHRvIGxvZ2ljYWxFeHRlbnQuaGVpZ2h0IHJvdW5kZWQgdXAgdG8gdGhl
IG5lYXJlc3QgbXVsdGlwbGUgb2YgZGVzY3JpcHRvcuKAmXMgdGV4ZWwgYmxvY2sgaGVpZ2h0LiIK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2YodGV4ZWxCbG9ja0hlaWdodChtX2Rlc2NyaXB0b3IuZm9ybWF0KSwgbG9naWNhbEV4dGVudC5o
ZWlnaHQpKSwKKyAgICAgICAgICAgIC8vICJTZXQgZXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyB0
byBsb2dpY2FsRXh0ZW50LmhlaWdodC4iCisgICAgICAgICAgICBsb2dpY2FsRXh0ZW50LmhlaWdo
dCB9OworICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25fRm9yY2UzMjoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBXR1BVRXh0ZW50M0QgeyB9OworICAg
IH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViR1BVCiAKICNwcmFnbWEgbWFyayBXR1BVIFN0dWJz
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>455824</attachid>
            <date>2022-03-25 21:31:00 -0700</date>
            <delta_ts>2022-03-25 21:41:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-238367-20220325213058.patch</filename>
            <type>text/plain</type>
            <size>70423</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxODQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCmluZGV4IDdmOGVjM2VjN2M3ZWRmMTM5
ZDY3NTM3ZDk5MjYxYjY4NGUyYmQ0M2UuLjEyZTY1YTZmZGZhYTYzYmVlNTU4ZjNkNjkzMTBhNmZh
OGIyOTRkZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMgQEAKKzIwMjItMDMtMjUgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViR1BVXSBJbXBs
ZW1lbnQgcmVzb3VyY2UgY29weWluZyByb3V0aW5lcyBhY2NvcmRpbmcgdG8gdGhlIHNwZWMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzODM2NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
aW1wbGVtZW50cyAzIHJlc291cmNlIGNvcHkgcm91dGluZXM6CisgICAgICAgIC0gY29weUJ1ZmZl
clRvVGV4dHVyZSgpCisgICAgICAgIC0gY29weVRleHR1cmVUb0J1ZmZlcigpCisgICAgICAgIC0g
Y29weVRleHR1cmVUb1RleHR1cmUoKQorICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgYWxs
IDMgYXQgb25jZSwgYmVjYXVzZSB0aGV5IGFsbCB1c2UgdGhlIHNhbWUgc2hhcmVkIGhlbHBlciBm
dW5jdGlvbnMuCisKKyAgICAgICAgVGhlc2UgYXJlIGFjdHVhbGx5IHN1cnByaXNpbmdseSBjb21w
bGljYXRlZCwgZm9yIGEgZmV3IHJlYXNvbnM6CisgICAgICAgIC0gVGV4dHVyZXMgY2FuIGJlIDEt
ZGltZW5zaW9uYWwsIDItZGltZW5zaW9uYWwsIG9yIDMtZGltZW5zaW9uYWwKKyAgICAgICAgLSBU
ZXh0dXJlcyBoYXZlIG1pcG1hcHMsIGFuZCB0aGUgc2l6ZSBvZiBlYWNoIG1pcG1hcCBpcyBkaWZm
ZXJlbnQKKyAgICAgICAgLSBUaGVyZSBhcmUgZGVwdGggdGV4dHVyZXMsIHN0ZW5jaWwgdGV4dHVy
ZXMsIGFuZCBkZXB0aC1zdGVuY2lsIHRleHR1cmVzLCBhbmQgY29weWluZworICAgICAgICAgICAg
ICBoYXMgdG8gd29yayB3aXRoIHRoZSBjb3JyZWN0ICJhc3BlY3QuIgorICAgICAgICAtIERlcGVu
ZGluZyBvbiB0aGUgdGV4dHVyZSBmb3JtYXQsIGFuIGluZGl2aWR1YWwgdGV4ZWwgbWF5IG5vdCBi
ZSBkaXJlY3RseSBhZGRyZXNzYWJsZS4KKyAgICAgICAgICAgICAgQ29tcHJlc3NlZCB0ZXh0dXJl
IGZvcm1hdHMgZW5jb2RlIGFuIGVudGlyZSBibG9jayAoZS5nLiA0eDQgb3IgOHg4KSBvZiBwaXhl
bHMgd2l0aAorICAgICAgICAgICAgICBhIHNpbmdsZSBpbmRpdmlzaWJsZSBjaHVuayBvZiBkYXRh
LgorICAgICAgICAtIENvcHlpbmcgZnJvbSBhIHJlZ2lvbiBvZiBhICJzdWJyZXNvdXJjZSIgdG8g
YSBkaWZmZXJlbnQgcmVnaW9uIG9mIHRoZSBzYW1lICJzdWJyZXNvdXJjZSIKKyAgICAgICAgICAg
ICAgaXMgZm9yYmlkZGVuLiBTbywgd2UgaGF2ZSB0byBoYXZlIGEgY29uY2VwdCBvZiAic3VicmVz
b3VyY2UiIHRvIHZhbGlkYXRlIHRoZXkgYXJlbid0CisgICAgICAgICAgICAgIGludGVyc2VjdGlu
Zy4KKyAgICAgICAgLSBBIHNpbmdsZSBvcGVyYXRpb24gaXMgc3VwcG9zZWQgdG8gYmUgYWJsZSB0
byBjb3B5IG11bHRpcGxlIHNsaWNlcyBvZiBhbiBhcnJheSB0ZXh0dXJlLAorICAgICAgICAgICAg
ICBidXQgTWV0YWwgb25seSBoYXMgZmFjaWxpdGllcyB0byBjb3B5IGEgc2luZ2xlIHNsaWNlIGF0
IGEgdGltZS4gV2UgdGhlcmVmb3JlIGhhdmUgdG8KKyAgICAgICAgICAgICAgY2FsbCBNZXRhbCBp
biBhIGxvb3AgdG8gY29weSBhbGwgdGhlIG5lY2Vzc2FyeSBzbGljZXMuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBsaW5rcyB0byB0aGUgc3BlYyB3aGVyZSByZWxldmFudCwgYW5kIHF1b3RlcyB0aGUg
c3BlYyBpbiBjb21tZW50cyB3aGVyZSByZWxldmFudC4KKworICAgICAgICBUZXN0czogYXBpL29w
ZXJhdGlvbi9jb21tYW5kX2J1ZmZlci9pbWFnZV9jb3B5LnNwZWMudHMKKyAgICAgICAgICAgICAg
IGFwaS92YWxpZGF0aW9uL2VuY29kaW5nL2NtZHMvYnVmZmVyX3RleHR1cmVfY29waWVzLnNwZWMu
dHMKKyAgICAgICAgICAgICAgIGFwaS92YWxpZGF0aW9uL2ltYWdlX2NvcHkvaW1hZ2VfY29weS50
cworCisgICAgICAgICogV2ViR1BVL0JpbmRHcm91cC5tbToKKyAgICAgICAgKFdlYkdQVTo6RGV2
aWNlOjpjcmVhdGVCaW5kR3JvdXApOgorICAgICAgICAqIFdlYkdQVS9Db21tYW5kRW5jb2Rlci5t
bToKKyAgICAgICAgKFdlYkdQVTo6Q29tbWFuZEVuY29kZXI6OmNvcHlCdWZmZXJUb0J1ZmZlcik6
CisgICAgICAgIChXZWJHUFU6OnZhbGlkYXRlSW1hZ2VDb3B5QnVmZmVyKToKKyAgICAgICAgKFdl
YkdQVTo6aW1hZ2VDb3B5VGV4dHVyZVN1YnJlc291cmNlU2l6ZSk6CisgICAgICAgIChXZWJHUFU6
OnZhbGlkYXRlSW1hZ2VDb3B5VGV4dHVyZSk6CisgICAgICAgIChXZWJHUFU6OmlzVmFsaWRJbWFn
ZUNvcHlEZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJHUFU6OnZhbGlkYXRlVGV4dHVyZUNvcHlS
YW5nZSk6CisgICAgICAgIChXZWJHUFU6OnZhbGlkYXRlTGluZWFyVGV4dHVyZURhdGEpOgorICAg
ICAgICAoV2ViR1BVOjp2YWxpZGF0ZUNvcHlCdWZmZXJUb1RleHR1cmUpOgorICAgICAgICAoV2Vi
R1BVOjpDb21tYW5kRW5jb2Rlcjo6Y29weUJ1ZmZlclRvVGV4dHVyZSk6CisgICAgICAgIChXZWJH
UFU6OnZhbGlkYXRlQ29weVRleHR1cmVUb0J1ZmZlcik6CisgICAgICAgIChXZWJHUFU6OkNvbW1h
bmRFbmNvZGVyOjpjb3B5VGV4dHVyZVRvQnVmZmVyKToKKyAgICAgICAgKFdlYkdQVTo6aXNTUkdC
Q29tcGF0aWJsZSk6CisgICAgICAgIChXZWJHUFU6OmFyZUNvcHlDb21wYXRpYmxlKToKKyAgICAg
ICAgKFdlYkdQVTo6dmFsaWRhdGVDb3B5VGV4dHVyZVRvVGV4dHVyZSk6CisgICAgICAgIChXZWJH
UFU6OkNvbW1hbmRFbmNvZGVyOjpjb3B5VGV4dHVyZVRvVGV4dHVyZSk6CisgICAgICAgICogV2Vi
R1BVL0NvbXB1dGVQaXBlbGluZS5tbToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVD
b21wdXRlUGlwZWxpbmUpOgorICAgICAgICAqIFdlYkdQVS9QaXBlbGluZUxheW91dC5tbToKKyAg
ICAgICAgKFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVQaXBlbGluZUxheW91dCk6CisgICAgICAgICog
V2ViR1BVL1NoYWRlck1vZHVsZS5tbToKKyAgICAgICAgKFdlYkdQVTo6ZWFybHlDb21waWxlU2hh
ZGVyTW9kdWxlKToKKyAgICAgICAgKiBXZWJHUFUvVGV4dHVyZS5oOgorICAgICAgICAqIFdlYkdQ
VS9UZXh0dXJlLm1tOgorICAgICAgICAoV2ViR1BVOjpUZXh0dXJlOjppc0RlcHRoT3JTdGVuY2ls
Rm9ybWF0KToKKyAgICAgICAgKFdlYkdQVTo6VGV4dHVyZTo6dGV4ZWxCbG9ja1dpZHRoKToKKyAg
ICAgICAgKFdlYkdQVTo6VGV4dHVyZTo6dGV4ZWxCbG9ja0hlaWdodCk6CisgICAgICAgIChXZWJH
UFU6OlRleHR1cmU6OnRleGVsQmxvY2tTaXplKToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjp2
YWxpZGF0ZUNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViR1BVOjpUZXh0dXJlOjpwaHlzaWNh
bFNpemUpOgorICAgICAgICAoV2ViR1BVOjppc0RlcHRoT3JTdGVuY2lsRm9ybWF0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkdQVTo6dGV4ZWxCbG9ja1dpZHRoKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkdQVTo6dGV4ZWxCbG9ja0hlaWdodCk6IERlbGV0ZWQuCisKIDIwMjItMDMtMjQgIE15bGVz
IEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViR1BVXSBG
aXggdGhlIHdhdGNoT1MgYnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0Jp
bmRHcm91cC5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0JpbmRHcm91cC5tbQppbmRleCA2M2Fl
Y2JhZmQ3Y2FlZTU0MzczYTg1MGE4OTNkMjU0NjBjMzQ0MmMyLi5jZDlmNjA3NjJhMDc1ZDUzOWI5
NjFjYWE2M2YyNDg2MTlmYmIxZjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9C
aW5kR3JvdXAubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQmluZEdyb3VwLm1tCkBAIC01
NSw3ICs1NSw3IEBAIFJlZlB0cjxCaW5kR3JvdXA+IERldmljZTo6Y3JlYXRlQmluZEdyb3VwKGNv
bnN0IFdHUFVCaW5kR3JvdXBEZXNjcmlwdG9yJiBkZXNjcmlwCiAgICAgaWYgKGRlc2NyaXB0b3Iu
bmV4dEluQ2hhaW4pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgY29uc3QgQmluZEdy
b3VwTGF5b3V0JiBiaW5kR3JvdXBMYXlvdXQgPSBXZWJHUFU6OmZyb21BUEkoZGVzY3JpcHRvci5s
YXlvdXQpOworICAgIGNvbnN0IEJpbmRHcm91cExheW91dCYgYmluZEdyb3VwTGF5b3V0ID0gZnJv
bUFQSShkZXNjcmlwdG9yLmxheW91dCk7CiAKICAgICAvLyBGSVhNRShQRVJGT1JNQU5DRSk6IERv
bid0IGFsbG9jYXRlIDMgbmV3IGJ1ZmZlcnMgZm9yIGV2ZXJ5IGJpbmQgZ3JvdXAuCiAgICAgLy8g
SW4gZmFjdCwgZG9uJ3QgZXZlbiBhbGxvY2F0ZSBhIHNpbmdsZSBuZXcgYnVmZmVyIGZvciBldmVy
eSBiaW5kIGdyb3VwLgpAQCAtOTAsMTggKzkwLDE4IEBAIFJlZlB0cjxCaW5kR3JvdXA+IERldmlj
ZTo6Y3JlYXRlQmluZEdyb3VwKGNvbnN0IFdHUFVCaW5kR3JvdXBEZXNjcmlwdG9yJiBkZXNjcmlw
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBpZiAoYnVmZmVySXNQcmVz
ZW50KSB7Ci0gICAgICAgICAgICBpZDxNVExCdWZmZXI+IGJ1ZmZlciA9IFdlYkdQVTo6ZnJvbUFQ
SShlbnRyeS5idWZmZXIpLmJ1ZmZlcigpOworICAgICAgICAgICAgaWQ8TVRMQnVmZmVyPiBidWZm
ZXIgPSBmcm9tQVBJKGVudHJ5LmJ1ZmZlcikuYnVmZmVyKCk7CiAgICAgICAgICAgICAvLyBGSVhN
RTogVXNlIGNoZWNrZWQgY2FzdHMuCiAgICAgICAgICAgICBbdmVydGV4QXJndW1lbnRFbmNvZGVy
IHNldEJ1ZmZlcjpidWZmZXIgb2Zmc2V0OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KGVudHJ5Lm9m
ZnNldCkgYXRJbmRleDplbnRyeS5iaW5kaW5nXTsKICAgICAgICAgICAgIFtmcmFnbWVudEFyZ3Vt
ZW50RW5jb2RlciBzZXRCdWZmZXI6YnVmZmVyIG9mZnNldDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2Vy
PihlbnRyeS5vZmZzZXQpIGF0SW5kZXg6ZW50cnkuYmluZGluZ107CiAgICAgICAgICAgICBbY29t
cHV0ZUFyZ3VtZW50RW5jb2RlciBzZXRCdWZmZXI6YnVmZmVyIG9mZnNldDpzdGF0aWNfY2FzdDxO
U1VJbnRlZ2VyPihlbnRyeS5vZmZzZXQpIGF0SW5kZXg6ZW50cnkuYmluZGluZ107CiAgICAgICAg
IH0gZWxzZSBpZiAoc2FtcGxlcklzUHJlc2VudCkgewotICAgICAgICAgICAgaWQ8TVRMU2FtcGxl
clN0YXRlPiBzYW1wbGVyID0gV2ViR1BVOjpmcm9tQVBJKGVudHJ5LnNhbXBsZXIpLnNhbXBsZXJT
dGF0ZSgpOworICAgICAgICAgICAgaWQ8TVRMU2FtcGxlclN0YXRlPiBzYW1wbGVyID0gZnJvbUFQ
SShlbnRyeS5zYW1wbGVyKS5zYW1wbGVyU3RhdGUoKTsKICAgICAgICAgICAgIFt2ZXJ0ZXhBcmd1
bWVudEVuY29kZXIgc2V0U2FtcGxlclN0YXRlOnNhbXBsZXIgYXRJbmRleDplbnRyeS5iaW5kaW5n
XTsKICAgICAgICAgICAgIFtmcmFnbWVudEFyZ3VtZW50RW5jb2RlciBzZXRTYW1wbGVyU3RhdGU6
c2FtcGxlciBhdEluZGV4OmVudHJ5LmJpbmRpbmddOwogICAgICAgICAgICAgW2NvbXB1dGVBcmd1
bWVudEVuY29kZXIgc2V0U2FtcGxlclN0YXRlOnNhbXBsZXIgYXRJbmRleDplbnRyeS5iaW5kaW5n
XTsKICAgICAgICAgfSBlbHNlIGlmICh0ZXh0dXJlVmlld0lzUHJlc2VudCkgewotICAgICAgICAg
ICAgaWQ8TVRMVGV4dHVyZT4gdGV4dHVyZSA9IFdlYkdQVTo6ZnJvbUFQSShlbnRyeS50ZXh0dXJl
VmlldykudGV4dHVyZSgpOworICAgICAgICAgICAgaWQ8TVRMVGV4dHVyZT4gdGV4dHVyZSA9IGZy
b21BUEkoZW50cnkudGV4dHVyZVZpZXcpLnRleHR1cmUoKTsKICAgICAgICAgICAgIFt2ZXJ0ZXhB
cmd1bWVudEVuY29kZXIgc2V0VGV4dHVyZTp0ZXh0dXJlIGF0SW5kZXg6ZW50cnkuYmluZGluZ107
CiAgICAgICAgICAgICBbZnJhZ21lbnRBcmd1bWVudEVuY29kZXIgc2V0VGV4dHVyZTp0ZXh0dXJl
IGF0SW5kZXg6ZW50cnkuYmluZGluZ107CiAgICAgICAgICAgICBbY29tcHV0ZUFyZ3VtZW50RW5j
b2RlciBzZXRUZXh0dXJlOnRleHR1cmUgYXRJbmRleDplbnRyeS5iaW5kaW5nXTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLm1tIGIvU291cmNlL1dlYkdQ
VS9XZWJHUFUvQ29tbWFuZEVuY29kZXIubW0KaW5kZXggYWU0YmFjNjA4NWI0YzVmMmVlNGNkOWM3
YzNhM2UwYjAzZDc2ZDc5Mi4uNTkzYzA2NWFiYmZjZWIxMGVmMTc4ZWRhOTI0MzMwMTdlNmI1OThj
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFuZEVuY29kZXIubW0KKysr
IGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFuZEVuY29kZXIubW0KQEAgLTMzLDYgKzMzLDcg
QEAKICNpbXBvcnQgIkRldmljZS5oIgogI2ltcG9ydCAiUXVlcnlTZXQuaCIKICNpbXBvcnQgIlJl
bmRlclBhc3NFbmNvZGVyLmgiCisjaW1wb3J0ICJUZXh0dXJlLmgiCiAKIG5hbWVzcGFjZSBXZWJH
UFUgewogCkBAIC0xNTUsMjggKzE1NiwxMDcxIEBAIHZvaWQgQ29tbWFuZEVuY29kZXI6OmNvcHlC
dWZmZXJUb0J1ZmZlcihjb25zdCBCdWZmZXImIHNvdXJjZSwgdWludDY0X3Qgc291cmNlT2ZmCiAK
ICAgICBlbnN1cmVCbGl0Q29tbWFuZEVuY29kZXIoKTsKIAotICAgIFttX2JsaXRDb21tYW5kRW5j
b2RlciBjb3B5RnJvbUJ1ZmZlcjpzb3VyY2UuYnVmZmVyKCkgc291cmNlT2Zmc2V0OnN0YXRpY19j
YXN0PE5TVUludGVnZXI+KHNvdXJjZU9mZnNldCkgdG9CdWZmZXI6ZGVzdGluYXRpb24uYnVmZmVy
KCkgZGVzdGluYXRpb25PZmZzZXQ6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oZGVzdGluYXRpb25P
ZmZzZXQpIHNpemU6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2l6ZSldOworICAgIFttX2JsaXRD
b21tYW5kRW5jb2RlcgorICAgICAgICBjb3B5RnJvbUJ1ZmZlcjpzb3VyY2UuYnVmZmVyKCkKKyAg
ICAgICAgc291cmNlT2Zmc2V0OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNvdXJjZU9mZnNldCkK
KyAgICAgICAgdG9CdWZmZXI6ZGVzdGluYXRpb24uYnVmZmVyKCkKKyAgICAgICAgZGVzdGluYXRp
b25PZmZzZXQ6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oZGVzdGluYXRpb25PZmZzZXQpCisgICAg
ICAgIHNpemU6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2l6ZSldOworfQorCitzdGF0aWMgYm9v
bCB2YWxpZGF0ZUltYWdlQ29weUJ1ZmZlcihjb25zdCBXR1BVSW1hZ2VDb3B5QnVmZmVyJiBpbWFn
ZUNvcHlCdWZmZXIpCit7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8j
YWJzdHJhY3Qtb3BkZWYtdmFsaWRhdGluZy1ncHVpbWFnZWNvcHlidWZmZXIKKworICAgIC8vIEZJ
WE1FOiAiaW1hZ2VDb3B5QnVmZmVyLmJ1ZmZlciBtdXN0IGJlIGEgdmFsaWQgR1BVQnVmZmVyLiIK
KworICAgIC8vICJpbWFnZUNvcHlCdWZmZXIuYnl0ZXNQZXJSb3cgbXVzdCBiZSBhIG11bHRpcGxl
IG9mIDI1Ni4iCisgICAgaWYgKGltYWdlQ29weUJ1ZmZlci5sYXlvdXQuYnl0ZXNQZXJSb3cgJSAy
NTYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3Rh
dGljIFdHUFVFeHRlbnQzRCBpbWFnZUNvcHlUZXh0dXJlU3VicmVzb3VyY2VTaXplKGNvbnN0IFdH
UFVJbWFnZUNvcHlUZXh0dXJlJiBpbWFnZUNvcHlUZXh0dXJlKQoreworICAgIC8vIGh0dHBzOi8v
Z3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2ltYWdlY29weXRleHR1cmUtc3VicmVzb3VyY2Utc2l6
ZQorCisgICAgLy8gIkl0cyB3aWR0aCwgaGVpZ2h0IGFuZCBkZXB0aE9yQXJyYXlMYXllcnMgYXJl
IHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgZGVwdGgsIHJlc3BlY3RpdmVseSwgb2YgdGhlIHBoeXNp
Y2FsIHNpemUgb2YgaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlIHN1YnJlc291cmNlIGF0IG1pcG1h
cCBsZXZlbCBpbWFnZUNvcHlUZXh0dXJlLm1pcExldmVsLiIKKyAgICByZXR1cm4gZnJvbUFQSShp
bWFnZUNvcHlUZXh0dXJlLnRleHR1cmUpLnBoeXNpY2FsVGV4dHVyZVN1YnJlc291cmNlRXh0ZW50
KGltYWdlQ29weVRleHR1cmUubWlwTGV2ZWwpOworfQorCitzdGF0aWMgYm9vbCB2YWxpZGF0ZUlt
YWdlQ29weVRleHR1cmUoY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUmIGltYWdlQ29weVRleHR1
cmUsIGNvbnN0IFdHUFVFeHRlbnQzRCYgY29weVNpemUpCit7CisgICAgLy8gaHR0cHM6Ly9ncHV3
ZWIuZ2l0aHViLmlvL2dwdXdlYi8jYWJzdHJhY3Qtb3BkZWYtdmFsaWRhdGluZy1ncHVpbWFnZWNv
cHl0ZXh0dXJlCisKKyAgICAvLyAiYmxvY2tXaWR0aCBiZSB0aGUgdGV4ZWwgYmxvY2sgd2lkdGgg
b2YgaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlLltbZGVzY3JpcHRvcl1dLmZvcm1hdC4iCisgICAg
YXV0byBibG9ja1dpZHRoID0gVGV4dHVyZTo6dGV4ZWxCbG9ja1dpZHRoKGZyb21BUEkoaW1hZ2VD
b3B5VGV4dHVyZS50ZXh0dXJlKS5kZXNjcmlwdG9yKCkuZm9ybWF0KTsKKworICAgIC8vICJibG9j
a0hlaWdodCBiZSB0aGUgdGV4ZWwgYmxvY2sgaGVpZ2h0IG9mIGltYWdlQ29weVRleHR1cmUudGV4
dHVyZS5bW2Rlc2NyaXB0b3JdXS5mb3JtYXQuIgorICAgIGF1dG8gYmxvY2tIZWlnaHQgPSBUZXh0
dXJlOjp0ZXhlbEJsb2NrSGVpZ2h0KGZyb21BUEkoaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlKS5k
ZXNjcmlwdG9yKCkuZm9ybWF0KTsKKworICAgIC8vIEZJWE1FOiAiaW1hZ2VDb3B5VGV4dHVyZS50
ZXh0dXJlIG11c3QgYmUgYSB2YWxpZCBHUFVUZXh0dXJlLiIKKworICAgIC8vICJpbWFnZUNvcHlU
ZXh0dXJlLm1pcExldmVsIG11c3QgYmUgbGVzcyB0aGFuIHRoZSBbW2Rlc2NyaXB0b3JdXS5taXBM
ZXZlbENvdW50IG9mIGltYWdlQ29weVRleHR1cmUudGV4dHVyZS4iCisgICAgaWYgKGltYWdlQ29w
eVRleHR1cmUubWlwTGV2ZWwgPj0gZnJvbUFQSShpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUpLmRl
c2NyaXB0b3IoKS5taXBMZXZlbENvdW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyAiaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4ueCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgYmxvY2tX
aWR0aC4iCisgICAgaWYgKGltYWdlQ29weVRleHR1cmUub3JpZ2luLnggJSBibG9ja1dpZHRoKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4u
eSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgYmxvY2tIZWlnaHQuIgorICAgIGlmIChpbWFnZUNvcHlU
ZXh0dXJlLm9yaWdpbi55ICUgYmxvY2tIZWlnaHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIC8vICJpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uZm9ybWF0IGlz
IGEgZGVwdGgtc3RlbmNpbCBmb3JtYXQuIgorICAgIC8vICJpbWFnZUNvcHlUZXh0dXJlLnRleHR1
cmUuW1tkZXNjcmlwdG9yXV0uc2FtcGxlQ291bnQgaXMgZ3JlYXRlciB0aGFuIDEuIgorICAgIGlm
IChUZXh0dXJlOjppc0RlcHRoT3JTdGVuY2lsRm9ybWF0KGZyb21BUEkoaW1hZ2VDb3B5VGV4dHVy
ZS50ZXh0dXJlKS5kZXNjcmlwdG9yKCkuZm9ybWF0KQorICAgICAgICB8fCBmcm9tQVBJKGltYWdl
Q29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLnNhbXBsZUNvdW50ID4gMSkgeworICAg
ICAgICAvLyAiVGhlIGltYWdlQ29weVRleHR1cmUgc3VicmVzb3VyY2Ugc2l6ZSBvZiBpbWFnZUNv
cHlUZXh0dXJlIGlzIGVxdWFsIHRvIGNvcHlTaXplIgorICAgICAgICBhdXRvIHN1YnJlc291cmNl
U2l6ZSA9IGltYWdlQ29weVRleHR1cmVTdWJyZXNvdXJjZVNpemUoaW1hZ2VDb3B5VGV4dHVyZSk7
CisgICAgICAgIGlmIChzdWJyZXNvdXJjZVNpemUud2lkdGggIT0gY29weVNpemUud2lkdGgKKyAg
ICAgICAgICAgIHx8IHN1YnJlc291cmNlU2l6ZS5oZWlnaHQgIT0gY29weVNpemUuaGVpZ2h0Cisg
ICAgICAgICAgICB8fCBzdWJyZXNvdXJjZVNpemUuZGVwdGhPckFycmF5TGF5ZXJzICE9IGNvcHlT
aXplLmRlcHRoT3JBcnJheUxheWVycykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgaXNWYWxpZEltYWdlQ29weURl
c3RpbmF0aW9uKFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCwgV0dQVVRleHR1cmVBc3BlY3QgYXNw
ZWN0KQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2RlcHRoLWZv
cm1hdHMKKworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9VbmRlZmluZWQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SOFVub3JtOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfUjhTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4
VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4U2ludDoKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X1IxNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMTZTaW50
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjE2RmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9SRzhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFNub3Jt
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkc4VWludDoKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X1JHOFNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMzJGbG9hdDoK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IzMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9SMzJTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkcxNlVpbnQ6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X1JHMTZGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4VW5vcm06
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFVub3JtU3JnYjoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X1JHQkE4U25vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9S
R0JBOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFNpbnQ6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9CR1JBOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfQkdSQThVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0IxMEEyVW5v
cm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzExQjEwVWZsb2F0OgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfUkdCOUU1VWZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUkczMkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkczMlVpbnQ6CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzMyU2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X1JHQkExNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMTZTaW50Ogor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTE2RmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9SR0JBMzJGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkEz
MlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJTaW50OgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9TdGVuY2lsODoKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMTZVbm9ybToKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDI0UGx1czoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFBsdXNTdGVuY2lsODoK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRVbm9ybVN0ZW5jaWw4OgorICAgICAg
ICByZXR1cm4gYXNwZWN0ID09IFdHUFVUZXh0dXJlQXNwZWN0X1N0ZW5jaWxPbmx5OworICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDMyRmxvYXRTdGVuY2lsODoKKyAgICAg
ICAgcmV0dXJuIGFzcGVjdCA9PSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25seTsKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDMVJHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0JDMVJHQkFVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzJS
R0JBVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzJSR0JBVW5vcm1TcmdiOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMzUkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfQkMzUkdCQVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0JDNFJVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNFJTbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNVJHVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9CQzVSR1Nub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM2SFJHQlVmbG9h
dDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNkhSR0JGbG9hdDoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0JDN1JHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0JDN1JHQkFVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOFVu
b3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhVbm9ybVNyZ2I6CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOEExVW5vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9FVEMyUkdCOEExVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfRVRDMlJHQkE4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCQThV
bm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FQUNSMTFVbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1IxMVNub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfRUFDUkcxMVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUkcxMVNu
b3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzR4NFVub3JtOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfQVNUQzR4NFVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0FTVEM1eDRVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM1eDRV
bm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg1VW5vcm06CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg1VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzZ4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNU
QzZ4NVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDZVbm9ybToK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDZVbm9ybVNyZ2I6CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg1VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9BU1RDOHg1VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NlVu
b3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NlVub3JtU3JnYjoKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0FTVEM4eDhVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RD
MTB4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDVVbm9ybVNyZ2I6
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NlVub3JtOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfQVNUQzEweDZVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9BU1RDMTB4OFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDhV
bm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4MTBVbm9ybToKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHgxMFVub3JtU3JnYjoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfQVNUQzEyeDEwVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEy
eDEyVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTJVbm9ybVNyZ2I6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0ZvcmNl
MzI6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCitzdGF0aWMgYm9vbCB2YWxpZGF0ZVRleHR1cmVDb3B5UmFuZ2UoY29uc3Qg
V0dQVUltYWdlQ29weVRleHR1cmUmIGltYWdlQ29weVRleHR1cmUsIGNvbnN0IFdHUFVFeHRlbnQz
RCYgY29weVNpemUpCit7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8j
dmFsaWRhdGluZy10ZXh0dXJlLWNvcHktcmFuZ2UKKworICAgIC8vICJMZXQgYmxvY2tXaWR0aCBi
ZSB0aGUgdGV4ZWwgYmxvY2sgd2lkdGggb2YgaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlLltbZGVz
Y3JpcHRvcl1dLmZvcm1hdC4iCisgICAgYXV0byBibG9ja1dpZHRoID0gVGV4dHVyZTo6dGV4ZWxC
bG9ja1dpZHRoKGZyb21BUEkoaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlKS5kZXNjcmlwdG9yKCku
Zm9ybWF0KTsKKworICAgIC8vICJMZXQgYmxvY2tIZWlnaHQgYmUgdGhlIHRleGVsIGJsb2NrIGhl
aWdodCBvZiBpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uZm9ybWF0LiIK
KyAgICBhdXRvIGJsb2NrSGVpZ2h0ID0gVGV4dHVyZTo6dGV4ZWxCbG9ja0hlaWdodChmcm9tQVBJ
KGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7CisKKyAgICAv
LyAiTGV0IHN1YnJlc291cmNlU2l6ZSBiZSB0aGUgaW1hZ2VDb3B5VGV4dHVyZSBzdWJyZXNvdXJj
ZSBzaXplIG9mIGltYWdlQ29weVRleHR1cmUuIgorICAgIGF1dG8gc3VicmVzb3VyY2VTaXplID0g
aW1hZ2VDb3B5VGV4dHVyZVN1YnJlc291cmNlU2l6ZShpbWFnZUNvcHlUZXh0dXJlKTsKKworICAg
IC8vICIoaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4ueCArIGNvcHlTaXplLndpZHRoKSDiiaQgc3Vi
cmVzb3VyY2VTaXplLndpZHRoIgorICAgIC8vIEZJWE1FOiBVc2VkIGNoZWNrZWQgYXJpdGhtZXRp
YworICAgIGlmICgoaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4ueCArIGNvcHlTaXplLndpZHRoKSA+
IHN1YnJlc291cmNlU2l6ZS53aWR0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
IihpbWFnZUNvcHlUZXh0dXJlLm9yaWdpbi55ICsgY29weVNpemUuaGVpZ2h0KSDiiaQgc3VicmVz
b3VyY2VTaXplLmhlaWdodCIKKyAgICAvLyBGSVhNRTogVXNlZCBjaGVja2VkIGFyaXRobWV0aWMK
KyAgICBpZiAoKGltYWdlQ29weVRleHR1cmUub3JpZ2luLnkgKyBjb3B5U2l6ZS5oZWlnaHQpID4g
c3VicmVzb3VyY2VTaXplLmhlaWdodCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
IihpbWFnZUNvcHlUZXh0dXJlLm9yaWdpbi56ICsgY29weVNpemUuZGVwdGhPckFycmF5TGF5ZXJz
KSDiiaQgc3VicmVzb3VyY2VTaXplLmRlcHRoT3JBcnJheUxheWVycyIKKyAgICAvLyBGSVhNRTog
VXNlZCBjaGVja2VkIGFyaXRobWV0aWMKKyAgICBpZiAoKGltYWdlQ29weVRleHR1cmUub3JpZ2lu
LnogKyBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMpID4gc3VicmVzb3VyY2VTaXplLmRlcHRo
T3JBcnJheUxheWVycykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gImNvcHlTaXpl
LndpZHRoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBibG9ja1dpZHRoLiIKKyAgICBpZiAoY29weVNp
emUud2lkdGggJSBibG9ja1dpZHRoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAi
Y29weVNpemUuaGVpZ2h0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiBibG9ja0hlaWdodC4iCisgICAg
aWYgKGNvcHlTaXplLmhlaWdodCAlIGJsb2NrSGVpZ2h0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgdmFsaWRhdGVMaW5lYXJUZXh0
dXJlRGF0YShjb25zdCBXR1BVVGV4dHVyZURhdGFMYXlvdXQmIGxheW91dCwgdWludDY0X3QgYnl0
ZVNpemUsIFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCwgV0dQVUV4dGVudDNEIGNvcHlFeHRlbnQp
Cit7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jYWJzdHJhY3Qtb3Bk
ZWYtdmFsaWRhdGluZy1saW5lYXItdGV4dHVyZS1kYXRhCisKKyAgICAvLyAiTGV0IGJsb2NrV2lk
dGgsIGJsb2NrSGVpZ2h0LCBhbmQgYmxvY2tTaXplIGJlIHRoZSB0ZXhlbCBibG9jayB3aWR0aCwg
aGVpZ2h0LCBhbmQgc2l6ZSBvZiBmb3JtYXQuIgorICAgIGF1dG8gYmxvY2tXaWR0aCA9IFRleHR1
cmU6OnRleGVsQmxvY2tXaWR0aChmb3JtYXQpOworICAgIGF1dG8gYmxvY2tIZWlnaHQgPSBUZXh0
dXJlOjp0ZXhlbEJsb2NrSGVpZ2h0KGZvcm1hdCk7CisgICAgYXV0byBibG9ja1NpemUgPSBUZXh0
dXJlOjp0ZXhlbEJsb2NrU2l6ZShmb3JtYXQpOworICAgIGlmICghYmxvY2tTaXplKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiSXQgaXMgYXNzdW1lZCB0aGF0IGNvcHlFeHRlbnQu
d2lkdGggaXMgYSBtdWx0aXBsZSBvZiBibG9ja1dpZHRoIGFuZCBjb3B5RXh0ZW50LmhlaWdodCBp
cyBhIG11bHRpcGxlIG9mIGJsb2NrSGVpZ2h0LiIKKworICAgIC8vICJ3aWR0aEluQmxvY2tzIGJl
IGNvcHlFeHRlbnQud2lkdGggw7cgYmxvY2tXaWR0aC4iCisgICAgYXV0byB3aWR0aEluQmxvY2tz
ID0gY29weUV4dGVudC53aWR0aCAvIGJsb2NrV2lkdGg7CisKKyAgICAvLyAiaGVpZ2h0SW5CbG9j
a3MgYmUgY29weUV4dGVudC5oZWlnaHQgw7cgYmxvY2tIZWlnaHQuIgorICAgIGF1dG8gaGVpZ2h0
SW5CbG9ja3MgPSBjb3B5RXh0ZW50LmhlaWdodCAvIGJsb2NrSGVpZ2h0OworCisgICAgLy8gImJ5
dGVzSW5MYXN0Um93IGJlIGJsb2NrU2l6ZSDDlyB3aWR0aEluQmxvY2tzLiIKKyAgICAvLyBGSVhN
RTogVXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KKyAgICBhdXRvIGJ5dGVzSW5MYXN0Um93ID0gKmJs
b2NrU2l6ZSAqIHdpZHRoSW5CbG9ja3M7CisKKyAgICAvLyAiSWYgaGVpZ2h0SW5CbG9ja3MgPiAx
IgorICAgIGlmIChoZWlnaHRJbkJsb2NrcyA+IDEpIHsKKyAgICAgICAgLy8gImxheW91dC5ieXRl
c1BlclJvdyBtdXN0IGJlIHNwZWNpZmllZC4iCisgICAgICAgIGlmIChsYXlvdXQuYnl0ZXNQZXJS
b3cgPT0gV0dQVV9DT1BZX1NUUklERV9VTkRFRklORUQpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgLy8gIklmIGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4g
MSIKKyAgICBpZiAoY29weUV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgPiAxKSB7CisgICAgICAg
IC8vICJsYXlvdXQuYnl0ZXNQZXJSb3cgYW5kIGxheW91dC5yb3dzUGVySW1hZ2UgbXVzdCBiZSBz
cGVjaWZpZWQuIgorICAgICAgICBpZiAobGF5b3V0LmJ5dGVzUGVyUm93ID09IFdHUFVfQ09QWV9T
VFJJREVfVU5ERUZJTkVEIHx8IGxheW91dC5yb3dzUGVySW1hZ2UgPT0gV0dQVV9DT1BZX1NUUklE
RV9VTkRFRklORUQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8g
IklmIHNwZWNpZmllZCIKKyAgICBpZiAobGF5b3V0LmJ5dGVzUGVyUm93ICE9IFdHUFVfQ09QWV9T
VFJJREVfVU5ERUZJTkVEKSB7CisgICAgICAgIC8vICJsYXlvdXQuYnl0ZXNQZXJSb3cgbXVzdCBi
ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYnl0ZXNJbkxhc3RSb3cuIgorICAgICAgICBpZiAo
bGF5b3V0LmJ5dGVzUGVyUm93IDw9IGJ5dGVzSW5MYXN0Um93KQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIC8vICJJZiBzcGVjaWZpZWQiCisgICAgaWYgKGxheW91dC5y
b3dzUGVySW1hZ2UgIT0gV0dQVV9DT1BZX1NUUklERV9VTkRFRklORUQpIHsKKyAgICAgICAgLy8g
ImxheW91dC5yb3dzUGVySW1hZ2UgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gaGVp
Z2h0SW5CbG9ja3MuIgorICAgICAgICBpZiAobGF5b3V0LnJvd3NQZXJJbWFnZSA8IGhlaWdodElu
QmxvY2tzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJMZXQg
cmVxdWlyZWRCeXRlc0luQ29weSBiZSAwLiIKKyAgICBhdXRvIHJlcXVpcmVkQnl0ZXNJbkNvcHkg
PSAwOworCisgICAgLy8gIklmIGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMToiCisg
ICAgaWYgKGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMSkgeworICAgICAgICAvLyAi
TGV0IGJ5dGVzUGVySW1hZ2UgYmUgbGF5b3V0LmJ5dGVzUGVyUm93IMOXIGxheW91dC5yb3dzUGVy
SW1hZ2UuIgorICAgICAgICAvLyBGSVhNRTogVXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KKyAgICAg
ICAgYXV0byBieXRlc1BlckltYWdlID0gbGF5b3V0LmJ5dGVzUGVyUm93ICogbGF5b3V0LnJvd3NQ
ZXJJbWFnZTsKKworICAgICAgICAvLyAiTGV0IGJ5dGVzQmVmb3JlTGFzdEltYWdlIGJlIGJ5dGVz
UGVySW1hZ2Ugw5cgKGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzIOKIkiAxKS4iCisgICAg
ICAgIGF1dG8gYnl0ZXNCZWZvcmVMYXN0SW1hZ2UgPSBieXRlc1BlckltYWdlICogKGNvcHlFeHRl
bnQuZGVwdGhPckFycmF5TGF5ZXJzIC0gMSk7CisKKyAgICAgICAgLy8gIkFkZCBieXRlc0JlZm9y
ZUxhc3RJbWFnZSB0byByZXF1aXJlZEJ5dGVzSW5Db3B5LiIKKyAgICAgICAgcmVxdWlyZWRCeXRl
c0luQ29weSArPSBieXRlc0JlZm9yZUxhc3RJbWFnZTsKKyAgICB9CisKKyAgICAvLyAiSWYgY29w
eUV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgPiAwOiIKKyAgICBpZiAoY29weUV4dGVudC5kZXB0
aE9yQXJyYXlMYXllcnMgPiAwKSB7CisgICAgICAgIC8vICJJZiBoZWlnaHRJbkJsb2NrcyA+IDEi
CisgICAgICAgIGlmIChoZWlnaHRJbkJsb2NrcyA+IDEpIHsKKyAgICAgICAgICAgIC8vICJhZGQg
bGF5b3V0LmJ5dGVzUGVyUm93IMOXIChoZWlnaHRJbkJsb2NrcyDiiJIgMSkgdG8gcmVxdWlyZWRC
eXRlc0luQ29weS4iCisgICAgICAgICAgICByZXF1aXJlZEJ5dGVzSW5Db3B5ICs9IGxheW91dC5i
eXRlc1BlclJvdyAqIChoZWlnaHRJbkJsb2NrcyAtIDEpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gIklmIGhlaWdodEluQmxvY2tzID4gMCIKKyAgICAgICAgaWYgKGhlaWdodEluQmxvY2tzID4g
MCkgeworICAgICAgICAgICAgLy8gImFkZCBieXRlc0luTGFzdFJvdyB0byByZXF1aXJlZEJ5dGVz
SW5Db3B5LiIKKyAgICAgICAgICAgIHJlcXVpcmVkQnl0ZXNJbkNvcHkgKz0gYnl0ZXNJbkxhc3RS
b3c7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAiRmFpbCBpZiB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlIG5vdCBzYXRpc2ZpZWQ6IgorICAgIC8vICJsYXlvdXQub2Zmc2V0ICsgcmVx
dWlyZWRCeXRlc0luQ29weSDiiaQgYnl0ZVNpemUuIgorICAgIGlmIChsYXlvdXQub2Zmc2V0ICsg
cmVxdWlyZWRCeXRlc0luQ29weSA+IGJ5dGVTaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgdmFsaWRhdGVDb3B5QnVmZmVyVG9U
ZXh0dXJlKGNvbnN0IFdHUFVJbWFnZUNvcHlCdWZmZXImIHNvdXJjZSwgY29uc3QgV0dQVUltYWdl
Q29weVRleHR1cmUmIGRlc3RpbmF0aW9uLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQor
eworICAgIC8vICJMZXQgZHN0VGV4dHVyZURlc2MgYmUgZGVzdGluYXRpb24udGV4dHVyZS5bW2Rl
c2NyaXB0b3JdXS4iCisgICAgY29uc3QgYXV0byYgZHN0VGV4dHVyZURlc2MgPSBmcm9tQVBJKGRl
c3RpbmF0aW9uLnRleHR1cmUpLmRlc2NyaXB0b3IoKTsKKworICAgIC8vICJ2YWxpZGF0aW5nIEdQ
VUltYWdlQ29weUJ1ZmZlcihzb3VyY2UpIHJldHVybnMgdHJ1ZS4iCisgICAgaWYgKCF2YWxpZGF0
ZUltYWdlQ29weUJ1ZmZlcihzb3VyY2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyAic291cmNlLmJ1ZmZlci5bW3VzYWdlXV0gY29udGFpbnMgQ09QWV9TUkMuIgorICAgIGlmICgh
KGZyb21BUEkoc291cmNlLmJ1ZmZlcikudXNhZ2UoKSAmIFdHUFVCdWZmZXJVc2FnZV9Db3B5U3Jj
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gInZhbGlkYXRpbmcgR1BVSW1hZ2VD
b3B5VGV4dHVyZShkZXN0aW5hdGlvbiwgY29weVNpemUpIHJldHVybnMgdHJ1ZS4iCisgICAgaWYg
KCF2YWxpZGF0ZUltYWdlQ29weVRleHR1cmUoZGVzdGluYXRpb24sIGNvcHlTaXplKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gImRzdFRleHR1cmVEZXNjLnVzYWdlIGNvbnRhaW5z
IENPUFlfRFNULiIKKyAgICBpZiAoIShkc3RUZXh0dXJlRGVzYy51c2FnZSAmIFdHUFVUZXh0dXJl
VXNhZ2VfQ29weURzdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJkc3RUZXh0
dXJlRGVzYy5zYW1wbGVDb3VudCBpcyAxLiIKKyAgICBpZiAoZHN0VGV4dHVyZURlc2Muc2FtcGxl
Q291bnQgIT0gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gIklmIGRzdFRleHR1
cmVEZXNjLmZvcm1hdCBpcyBhIGRlcHRoLW9yLXN0ZW5jaWwgZm9ybWF0OiIKKyAgICBpZiAoVGV4
dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChkc3RUZXh0dXJlRGVzYy5mb3JtYXQpKSB7Cisg
ICAgICAgIC8vICJkZXN0aW5hdGlvbi5hc3BlY3QgbXVzdCByZWZlciB0byBhIHNpbmdsZSBhc3Bl
Y3Qgb2YgZHN0VGV4dHVyZURlc2MuZm9ybWF0IgorICAgICAgICBXR1BVVGV4dHVyZUZvcm1hdCBz
aW5nbGVBc3BlY3RGb3JtYXQgPSBXR1BVVGV4dHVyZUZvcm1hdF9VbmRlZmluZWQ7CisgICAgICAg
IHN3aXRjaCAoZGVzdGluYXRpb24uYXNwZWN0KSB7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVB
c3BlY3RfQWxsOgorICAgICAgICAgICAgaWYgKGF1dG8gc3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQg
PSBUZXh0dXJlOjpzdGVuY2lsT25seUFzcGVjdEZvcm1hdChkc3RUZXh0dXJlRGVzYy5mb3JtYXQp
KQorICAgICAgICAgICAgICAgIHNpbmdsZUFzcGVjdEZvcm1hdCA9ICpzdGVuY2lsT25seUFzcGVj
dEZvcm1hdDsKKyAgICAgICAgICAgIGlmIChhdXRvIGRlcHRoT25seUFzcGVjdEZvcm1hdCA9IFRl
eHR1cmU6OmRlcHRoT25seUFzcGVjdEZvcm1hdChkc3RUZXh0dXJlRGVzYy5mb3JtYXQpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHNpbmdsZUFzcGVjdEZvcm1hdCkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHNpbmdsZUFzcGVjdEZvcm1hdCA9ICpk
ZXB0aE9ubHlBc3BlY3RGb3JtYXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25seToKKyAgICAgICAgICAg
IGlmIChhdXRvIHN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0ID0gVGV4dHVyZTo6c3RlbmNpbE9ubHlB
c3BlY3RGb3JtYXQoZHN0VGV4dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAgICAgICAgICBzaW5n
bGVBc3BlY3RGb3JtYXQgPSAqc3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQ7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9EZXB0aE9ubHk6CisgICAgICAg
ICAgICBpZiAoYXV0byBkZXB0aE9ubHlBc3BlY3RGb3JtYXQgPSBUZXh0dXJlOjpkZXB0aE9ubHlB
c3BlY3RGb3JtYXQoZHN0VGV4dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAgICAgICAgICBzaW5n
bGVBc3BlY3RGb3JtYXQgPSAqZGVwdGhPbmx5QXNwZWN0Rm9ybWF0OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRm9yY2UzMjoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaW5nbGVBc3BlY3RGb3Jt
YXQgPT0gV0dQVVRleHR1cmVGb3JtYXRfVW5kZWZpbmVkKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIC8vICJhbmQgdGhhdCBhc3BlY3QgbXVzdCBiZSBhIHZhbGlkIGltYWdl
IGNvcHkgZGVzdGluYXRpb24gYWNjb3JkaW5nIHRvIMKn4oCvMjUuMS4yIERlcHRoLXN0ZW5jaWwg
Zm9ybWF0cy4iCisgICAgICAgIGlmICghaXNWYWxpZEltYWdlQ29weURlc3RpbmF0aW9uKGRzdFRl
eHR1cmVEZXNjLmZvcm1hdCwgZGVzdGluYXRpb24uYXNwZWN0KSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyAidmFsaWRhdGluZyB0ZXh0dXJlIGNvcHkgcmFuZ2Uo
ZGVzdGluYXRpb24sIGNvcHlTaXplKSByZXR1cm4gdHJ1ZS4iCisgICAgaWYgKCF2YWxpZGF0ZVRl
eHR1cmVDb3B5UmFuZ2UoZGVzdGluYXRpb24sIGNvcHlTaXplKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gIklmIGRzdFRleHR1cmVEZXNjLmZvcm1hdCBpcyBub3QgYSBkZXB0aC1v
ci1zdGVuY2lsIGZvcm1hdDoiCisgICAgaWYgKCFUZXh0dXJlOjppc0RlcHRoT3JTdGVuY2lsRm9y
bWF0KGRzdFRleHR1cmVEZXNjLmZvcm1hdCkpIHsKKyAgICAgICAgLy8gInNvdXJjZS5vZmZzZXQg
aXMgYSBtdWx0aXBsZSBvZiB0aGUgdGV4ZWwgYmxvY2sgc2l6ZSBvZiBkc3RUZXh0dXJlRGVzYy5m
b3JtYXQuIgorICAgICAgICBhdXRvIHRleGVsQmxvY2tTaXplID0gVGV4dHVyZTo6dGV4ZWxCbG9j
a1NpemUoZHN0VGV4dHVyZURlc2MuZm9ybWF0KTsKKyAgICAgICAgaWYgKCF0ZXhlbEJsb2NrU2l6
ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHNvdXJjZS5sYXlvdXQu
b2Zmc2V0ICUgKnRleGVsQmxvY2tTaXplKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIC8vICJJZiBkc3RUZXh0dXJlRGVzYy5mb3JtYXQgaXMgYSBkZXB0aC1vci1zdGVu
Y2lsIGZvcm1hdDoiCisgICAgaWYgKFRleHR1cmU6OmlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoZHN0
VGV4dHVyZURlc2MuZm9ybWF0KSkgeworICAgICAgICAvLyAic291cmNlLm9mZnNldCBpcyBhIG11
bHRpcGxlIG9mIDQuIgorICAgICAgICBpZiAoc291cmNlLmxheW91dC5vZmZzZXQgJSA0KQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJ2YWxpZGF0aW5nIGxpbmVh
ciB0ZXh0dXJlIGRhdGEoc291cmNlLCBzb3VyY2UuYnVmZmVyLltbc2l6ZV1dLCBkc3RUZXh0dXJl
RGVzYy5mb3JtYXQsIGNvcHlTaXplKSBzdWNjZWVkcy4iCisgICAgaWYgKCF2YWxpZGF0ZUxpbmVh
clRleHR1cmVEYXRhKHNvdXJjZS5sYXlvdXQsIGZyb21BUEkoc291cmNlLmJ1ZmZlcikuc2l6ZSgp
LCBkc3RUZXh0dXJlRGVzYy5mb3JtYXQsIGNvcHlTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgQ29tbWFuZEVuY29kZXI6OmNvcHlCdWZm
ZXJUb1RleHR1cmUoY29uc3QgV0dQVUltYWdlQ29weUJ1ZmZlciYgc291cmNlLCBjb25zdCBXR1BV
SW1hZ2VDb3B5VGV4dHVyZSYgZGVzdGluYXRpb24sIGNvbnN0IFdHUFVFeHRlbnQzRCYgY29weVNp
emUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHNvdXJjZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRlc3Rp
bmF0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oY29weVNpemUpOworICAgIGlmIChzb3VyY2UubmV4
dEluQ2hhaW4gfHwgc291cmNlLmxheW91dC5uZXh0SW5DaGFpbiB8fCBkZXN0aW5hdGlvbi5uZXh0
SW5DaGFpbikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHVi
LmlvL2dwdXdlYi8jZG9tLWdwdWNvbW1hbmRlbmNvZGVyLWNvcHlidWZmZXJ0b3RleHR1cmUKKwor
ICAgIC8vICJQcmVwYXJlIHRoZSBlbmNvZGVyIHN0YXRlIG9mIHRoaXMuIElmIGl0IHJldHVybnMg
ZmFsc2UsIHN0b3AuIgorICAgIGlmICghcHJlcGFyZVRoZUVuY29kZXJTdGF0ZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyAiSWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUgdW5zYXRpc2ZpZWQiCisgICAgaWYgKCF2YWxpZGF0ZUNvcHlCdWZmZXJUb1RleHR1cmUoc291
cmNlLCBkZXN0aW5hdGlvbiwgY29weVNpemUpKSB7CisgICAgICAgIC8vICJnZW5lcmF0ZSBhIHZh
bGlkYXRpb24gZXJyb3IgYW5kIHN0b3AuIgorICAgICAgICBtX2RldmljZS0+Z2VuZXJhdGVBVmFs
aWRhdGlvbkVycm9yKCJWYWxpZGF0aW9uIGZhaWx1cmUuIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBlbnN1cmVCbGl0Q29tbWFuZEVuY29kZXIoKTsKKworICAgIE5TVUludGVnZXIg
c291cmNlQnl0ZXNQZXJSb3cgPSBzb3VyY2UubGF5b3V0LmJ5dGVzUGVyUm93OworCisgICAgLy8g
RklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMKKyAgICBOU1VJbnRlZ2VyIHNvdXJjZUJ5dGVz
UGVySW1hZ2UgPSBzb3VyY2UubGF5b3V0LnJvd3NQZXJJbWFnZSAqIHNvdXJjZS5sYXlvdXQuYnl0
ZXNQZXJSb3c7CisKKyAgICBNVExCbGl0T3B0aW9uIG9wdGlvbnMgPSBNVExCbGl0T3B0aW9uTm9u
ZTsKKyAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uLmFzcGVjdCkgeworICAgIGNhc2UgV0dQVVRleHR1
cmVBc3BlY3RfQWxsOgorICAgICAgICBvcHRpb25zID0gTVRMQmxpdE9wdGlvbk5vbmU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfU3RlbmNpbE9ubHk6CisgICAg
ICAgIG9wdGlvbnMgPSBNVExCbGl0T3B0aW9uU3RlbmNpbEZyb21EZXB0aFN0ZW5jaWw7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRGVwdGhPbmx5OgorICAgICAg
ICBvcHRpb25zID0gTVRMQmxpdE9wdGlvbkRlcHRoRnJvbURlcHRoU3RlbmNpbDsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9Gb3JjZTMyOgorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgYXV0byBsb2dpY2FsU2l6ZSA9IGZyb21BUEkoZGVzdGluYXRpb24u
dGV4dHVyZSkubG9naWNhbFRleHR1cmVTdWJyZXNvdXJjZUV4dGVudChkZXN0aW5hdGlvbi5taXBM
ZXZlbCk7CisgICAgYXV0byB3aWR0aEZvck1ldGFsID0gc3RkOjptaW4oY29weVNpemUud2lkdGgs
IGxvZ2ljYWxTaXplLndpZHRoKTsKKyAgICBhdXRvIGhlaWdodEZvck1ldGFsID0gc3RkOjptaW4o
Y29weVNpemUuaGVpZ2h0LCBsb2dpY2FsU2l6ZS5oZWlnaHQpOworICAgIGF1dG8gZGVwdGhGb3JN
ZXRhbCA9IHN0ZDo6bWluKGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVycywgbG9naWNhbFNpemUu
ZGVwdGhPckFycmF5TGF5ZXJzKTsKKworICAgIGF1dG8mIGRlc3RpbmF0aW9uRGVzY3JpcHRvciA9
IGZyb21BUEkoZGVzdGluYXRpb24udGV4dHVyZSkuZGVzY3JpcHRvcigpOworICAgIHN3aXRjaCAo
ZGVzdGluYXRpb25EZXNjcmlwdG9yLmRpbWVuc2lvbikgeworICAgIGNhc2UgV0dQVVRleHR1cmVE
aW1lbnNpb25fMUQ6IHsKKyAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2Rv
Y3VtZW50YXRpb24vbWV0YWwvbXRsYmxpdGNvbW1hbmRlbmNvZGVyLzE0MDA3NzEtY29weWZyb21i
dWZmZXI/bGFuZ3VhZ2U9b2JqYworICAgICAgICAvLyAiV2hlbiB5b3UgY29weSB0byBhIDFEIHRl
eHR1cmUsIGhlaWdodCBhbmQgZGVwdGggbXVzdCBiZSAxLiIKKyAgICAgICAgYXV0byBzb3VyY2VT
aXplID0gTVRMU2l6ZU1ha2Uod2lkdGhGb3JNZXRhbCwgMSwgMSk7CisgICAgICAgIGF1dG8gZGVz
dGluYXRpb25PcmlnaW4gPSBNVExPcmlnaW5NYWtlKGRlc3RpbmF0aW9uLm9yaWdpbi54LCAxLCAx
KTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBsYXllciA9IDA7IGxheWVyIDwgY29weVNpemUuZGVw
dGhPckFycmF5TGF5ZXJzOyArK2xheWVyKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVXNlIGNo
ZWNrZWQgYXJpdGhtZXRpYy4KKyAgICAgICAgICAgIE5TVUludGVnZXIgc291cmNlT2Zmc2V0ID0g
c291cmNlLmxheW91dC5vZmZzZXQgKyBsYXllciAqIHNvdXJjZUJ5dGVzUGVySW1hZ2U7CisgICAg
ICAgICAgICBOU1VJbnRlZ2VyIGRlc3RpbmF0aW9uU2xpY2UgPSBkZXN0aW5hdGlvbi5vcmlnaW4u
eiArIGxheWVyOworICAgICAgICAgICAgW21fYmxpdENvbW1hbmRFbmNvZGVyCisgICAgICAgICAg
ICAgICAgY29weUZyb21CdWZmZXI6ZnJvbUFQSShzb3VyY2UuYnVmZmVyKS5idWZmZXIoKQorICAg
ICAgICAgICAgICAgIHNvdXJjZU9mZnNldDpzb3VyY2VPZmZzZXQKKyAgICAgICAgICAgICAgICBz
b3VyY2VCeXRlc1BlclJvdzpzb3VyY2VCeXRlc1BlclJvdworICAgICAgICAgICAgICAgIHNvdXJj
ZUJ5dGVzUGVySW1hZ2U6c291cmNlQnl0ZXNQZXJJbWFnZQorICAgICAgICAgICAgICAgIHNvdXJj
ZVNpemU6c291cmNlU2l6ZQorICAgICAgICAgICAgICAgIHRvVGV4dHVyZTpmcm9tQVBJKGRlc3Rp
bmF0aW9uLnRleHR1cmUpLnRleHR1cmUoKQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xp
Y2U6ZGVzdGluYXRpb25TbGljZQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uTGV2ZWw6ZGVz
dGluYXRpb24ubWlwTGV2ZWwKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9yaWdpbjpkZXN0
aW5hdGlvbk9yaWdpbgorICAgICAgICAgICAgICAgIG9wdGlvbnM6b3B0aW9uc107CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25f
MkQ6IHsKKyAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRp
b24vbWV0YWwvbXRsYmxpdGNvbW1hbmRlbmNvZGVyLzE0MDA3NzEtY29weWZyb21idWZmZXI/bGFu
Z3VhZ2U9b2JqYworICAgICAgICAvLyAiV2hlbiB5b3UgY29weSB0byBhIDJEIHRleHR1cmUsIGRl
cHRoIG11c3QgYmUgMS4iCisgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IE1UTFNpemVNYWtlKHdp
ZHRoRm9yTWV0YWwsIGhlaWdodEZvck1ldGFsLCAxKTsKKyAgICAgICAgYXV0byBkZXN0aW5hdGlv
bk9yaWdpbiA9IE1UTE9yaWdpbk1ha2UoZGVzdGluYXRpb24ub3JpZ2luLngsIGRlc3RpbmF0aW9u
Lm9yaWdpbi55LCAxKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBsYXllciA9IDA7IGxheWVyIDwg
Y29weVNpemUuZGVwdGhPckFycmF5TGF5ZXJzOyArK2xheWVyKSB7CisgICAgICAgICAgICAvLyBG
SVhNRTogVXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KKyAgICAgICAgICAgIE5TVUludGVnZXIgc291
cmNlT2Zmc2V0ID0gc291cmNlLmxheW91dC5vZmZzZXQgKyBsYXllciAqIHNvdXJjZUJ5dGVzUGVy
SW1hZ2U7CisgICAgICAgICAgICBOU1VJbnRlZ2VyIGRlc3RpbmF0aW9uU2xpY2UgPSBkZXN0aW5h
dGlvbi5vcmlnaW4ueiArIGxheWVyOworICAgICAgICAgICAgW21fYmxpdENvbW1hbmRFbmNvZGVy
CisgICAgICAgICAgICAgICAgY29weUZyb21CdWZmZXI6ZnJvbUFQSShzb3VyY2UuYnVmZmVyKS5i
dWZmZXIoKQorICAgICAgICAgICAgICAgIHNvdXJjZU9mZnNldDpzb3VyY2VPZmZzZXQKKyAgICAg
ICAgICAgICAgICBzb3VyY2VCeXRlc1BlclJvdzpzb3VyY2VCeXRlc1BlclJvdworICAgICAgICAg
ICAgICAgIHNvdXJjZUJ5dGVzUGVySW1hZ2U6c291cmNlQnl0ZXNQZXJJbWFnZQorICAgICAgICAg
ICAgICAgIHNvdXJjZVNpemU6c291cmNlU2l6ZQorICAgICAgICAgICAgICAgIHRvVGV4dHVyZTpm
cm9tQVBJKGRlc3RpbmF0aW9uLnRleHR1cmUpLnRleHR1cmUoKQorICAgICAgICAgICAgICAgIGRl
c3RpbmF0aW9uU2xpY2U6ZGVzdGluYXRpb25TbGljZQorICAgICAgICAgICAgICAgIGRlc3RpbmF0
aW9uTGV2ZWw6ZGVzdGluYXRpb24ubWlwTGV2ZWwKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlv
bk9yaWdpbjpkZXN0aW5hdGlvbk9yaWdpbgorICAgICAgICAgICAgICAgIG9wdGlvbnM6b3B0aW9u
c107CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV0dQVVRleHR1
cmVEaW1lbnNpb25fM0Q6IHsKKyAgICAgICAgYXV0byBzb3VyY2VTaXplID0gTVRMU2l6ZU1ha2Uo
d2lkdGhGb3JNZXRhbCwgaGVpZ2h0Rm9yTWV0YWwsIGRlcHRoRm9yTWV0YWwpOworICAgICAgICBh
dXRvIGRlc3RpbmF0aW9uT3JpZ2luID0gTVRMT3JpZ2luTWFrZShkZXN0aW5hdGlvbi5vcmlnaW4u
eCwgZGVzdGluYXRpb24ub3JpZ2luLnksIGRlc3RpbmF0aW9uLm9yaWdpbi56KTsKKyAgICAgICAg
TlNVSW50ZWdlciBzb3VyY2VPZmZzZXQgPSBzb3VyY2UubGF5b3V0Lm9mZnNldDsKKyAgICAgICAg
W21fYmxpdENvbW1hbmRFbmNvZGVyCisgICAgICAgICAgICBjb3B5RnJvbUJ1ZmZlcjpmcm9tQVBJ
KHNvdXJjZS5idWZmZXIpLmJ1ZmZlcigpCisgICAgICAgICAgICBzb3VyY2VPZmZzZXQ6c291cmNl
T2Zmc2V0CisgICAgICAgICAgICBzb3VyY2VCeXRlc1BlclJvdzpzb3VyY2VCeXRlc1BlclJvdwor
ICAgICAgICAgICAgc291cmNlQnl0ZXNQZXJJbWFnZTpzb3VyY2VCeXRlc1BlckltYWdlCisgICAg
ICAgICAgICBzb3VyY2VTaXplOnNvdXJjZVNpemUKKyAgICAgICAgICAgIHRvVGV4dHVyZTpmcm9t
QVBJKGRlc3RpbmF0aW9uLnRleHR1cmUpLnRleHR1cmUoKQorICAgICAgICAgICAgZGVzdGluYXRp
b25TbGljZTowCisgICAgICAgICAgICBkZXN0aW5hdGlvbkxldmVsOmRlc3RpbmF0aW9uLm1pcExl
dmVsCisgICAgICAgICAgICBkZXN0aW5hdGlvbk9yaWdpbjpkZXN0aW5hdGlvbk9yaWdpbgorICAg
ICAgICAgICAgb3B0aW9uczpvcHRpb25zXTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgV0dQVVRleHR1cmVEaW1lbnNpb25fRm9yY2UzMjoKKyAgICAgICAgcmV0dXJuOworICAgIH0K
K30KKworc3RhdGljIGJvb2wgdmFsaWRhdGVDb3B5VGV4dHVyZVRvQnVmZmVyKGNvbnN0IFdHUFVJ
bWFnZUNvcHlUZXh0dXJlJiBzb3VyY2UsIGNvbnN0IFdHUFVJbWFnZUNvcHlCdWZmZXImIGRlc3Rp
bmF0aW9uLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQoreworICAgIC8vICJMZXQgc3Jj
VGV4dHVyZURlc2MgYmUgc291cmNlLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uIgorICAgIGNvbnN0
IGF1dG8mIHNyY1RleHR1cmVEZXNjID0gZnJvbUFQSShzb3VyY2UudGV4dHVyZSkuZGVzY3JpcHRv
cigpOworCisgICAgLy8gInZhbGlkYXRpbmcgR1BVSW1hZ2VDb3B5VGV4dHVyZShzb3VyY2UsIGNv
cHlTaXplKSByZXR1cm5zIHRydWUuIgorICAgIGlmICghdmFsaWRhdGVJbWFnZUNvcHlUZXh0dXJl
KHNvdXJjZSwgY29weVNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAic3Jj
VGV4dHVyZURlc2MudXNhZ2UgY29udGFpbnMgQ09QWV9TUkMuIgorICAgIGlmICghKHNyY1RleHR1
cmVEZXNjLnVzYWdlICYgV0dQVUJ1ZmZlclVzYWdlX0NvcHlTcmMpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyAic3JjVGV4dHVyZURlc2Muc2FtcGxlQ291bnQgaXMgMS4iCisgICAg
aWYgKHNyY1RleHR1cmVEZXNjLnNhbXBsZUNvdW50ICE9IDEpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vICJJZiBzcmNUZXh0dXJlRGVzYy5mb3JtYXQgaXMgYSBkZXB0aC1zdGVuY2ls
IGZvcm1hdDoiCisgICAgaWYgKFRleHR1cmU6OmlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoc3JjVGV4
dHVyZURlc2MuZm9ybWF0KSkgeworICAgICAgICAvLyAic291cmNlLmFzcGVjdCBtdXN0IHJlZmVy
IHRvIGEgc2luZ2xlIGFzcGVjdCBvZiBzcmNUZXh0dXJlRGVzYy5mb3JtYXQiCisgICAgICAgIFdH
UFVUZXh0dXJlRm9ybWF0IHNpbmdsZUFzcGVjdEZvcm1hdCA9IFdHUFVUZXh0dXJlRm9ybWF0X1Vu
ZGVmaW5lZDsKKyAgICAgICAgc3dpdGNoIChzb3VyY2UuYXNwZWN0KSB7CisgICAgICAgIGNhc2Ug
V0dQVVRleHR1cmVBc3BlY3RfQWxsOgorICAgICAgICAgICAgaWYgKGF1dG8gc3RlbmNpbE9ubHlB
c3BlY3RGb3JtYXQgPSBUZXh0dXJlOjpzdGVuY2lsT25seUFzcGVjdEZvcm1hdChzcmNUZXh0dXJl
RGVzYy5mb3JtYXQpKQorICAgICAgICAgICAgICAgIHNpbmdsZUFzcGVjdEZvcm1hdCA9ICpzdGVu
Y2lsT25seUFzcGVjdEZvcm1hdDsKKyAgICAgICAgICAgIGlmIChhdXRvIGRlcHRoT25seUFzcGVj
dEZvcm1hdCA9IFRleHR1cmU6OmRlcHRoT25seUFzcGVjdEZvcm1hdChzcmNUZXh0dXJlRGVzYy5m
b3JtYXQpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNpbmdsZUFzcGVjdEZvcm1hdCkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHNpbmdsZUFzcGVj
dEZvcm1hdCA9ICpkZXB0aE9ubHlBc3BlY3RGb3JtYXQ7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25seToK
KyAgICAgICAgICAgIGlmIChhdXRvIHN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0ID0gVGV4dHVyZTo6
c3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQoc3JjVGV4dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAg
ICAgICAgICBzaW5nbGVBc3BlY3RGb3JtYXQgPSAqc3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQ7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9EZXB0aE9u
bHk6CisgICAgICAgICAgICBpZiAoYXV0byBkZXB0aE9ubHlBc3BlY3RGb3JtYXQgPSBUZXh0dXJl
OjpkZXB0aE9ubHlBc3BlY3RGb3JtYXQoc3JjVGV4dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAg
ICAgICAgICBzaW5nbGVBc3BlY3RGb3JtYXQgPSAqZGVwdGhPbmx5QXNwZWN0Rm9ybWF0OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRm9yY2UzMjoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaW5n
bGVBc3BlY3RGb3JtYXQgPT0gV0dQVVRleHR1cmVGb3JtYXRfVW5kZWZpbmVkKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vICJhbmQgdGhhdCBhc3BlY3QgbXVzdCBiZSBh
IHZhbGlkIGltYWdlIGNvcHkgZGVzdGluYXRpb24gYWNjb3JkaW5nIHRvIMKn4oCvMjUuMS4yIERl
cHRoLXN0ZW5jaWwgZm9ybWF0cy4iCisgICAgICAgIGlmICghaXNWYWxpZEltYWdlQ29weURlc3Rp
bmF0aW9uKHNyY1RleHR1cmVEZXNjLmZvcm1hdCwgc291cmNlLmFzcGVjdCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gInZhbGlkYXRpbmcgR1BVSW1hZ2VDb3B5
QnVmZmVyKGRlc3RpbmF0aW9uKSByZXR1cm5zIHRydWUuIgorICAgIGlmICghdmFsaWRhdGVJbWFn
ZUNvcHlCdWZmZXIoZGVzdGluYXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyAiZGVzdGluYXRpb24uYnVmZmVyLltbdXNhZ2VdXSBjb250YWlucyBDT1BZX0RTVC4iCisgICAg
aWYgKCEoZnJvbUFQSShkZXN0aW5hdGlvbi5idWZmZXIpLnVzYWdlKCkgJiBXR1BVQnVmZmVyVXNh
Z2VfQ29weURzdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJ2YWxpZGF0aW5n
IHRleHR1cmUgY29weSByYW5nZShzb3VyY2UsIGNvcHlTaXplKSByZXR1cm5zIHRydWUuIgorICAg
IGlmICghdmFsaWRhdGVUZXh0dXJlQ29weVJhbmdlKHNvdXJjZSwgY29weVNpemUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiSWYgc3JjVGV4dHVyZURlc2MuZm9ybWF0IGlzIG5v
dCBhIGRlcHRoLW9yLXN0ZW5jaWwgZm9ybWF0OiIKKyAgICBpZiAoIVRleHR1cmU6OmlzRGVwdGhP
clN0ZW5jaWxGb3JtYXQoc3JjVGV4dHVyZURlc2MuZm9ybWF0KSkgeworICAgICAgICAvLyAiZGVz
dGluYXRpb24ub2Zmc2V0IGlzIGEgbXVsdGlwbGUgb2YgdGhlIHRleGVsIGJsb2NrIHNpemUgb2Yg
c3JjVGV4dHVyZURlc2MuZm9ybWF0LiIKKyAgICAgICAgYXV0byB0ZXhlbEJsb2NrU2l6ZSA9IFRl
eHR1cmU6OnRleGVsQmxvY2tTaXplKHNyY1RleHR1cmVEZXNjLmZvcm1hdCk7CisgICAgICAgIGlm
ICghdGV4ZWxCbG9ja1NpemUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
IChkZXN0aW5hdGlvbi5sYXlvdXQub2Zmc2V0ICUgKnRleGVsQmxvY2tTaXplKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJJZiBzcmNUZXh0dXJlRGVzYy5mb3Jt
YXQgaXMgYSBkZXB0aC1vci1zdGVuY2lsIGZvcm1hdDoiCisgICAgaWYgKFRleHR1cmU6OmlzRGVw
dGhPclN0ZW5jaWxGb3JtYXQoc3JjVGV4dHVyZURlc2MuZm9ybWF0KSkgeworICAgICAgICAvLyAi
ZGVzdGluYXRpb24ub2Zmc2V0IGlzIGEgbXVsdGlwbGUgb2YgNC4iCisgICAgICAgIGlmIChkZXN0
aW5hdGlvbi5sYXlvdXQub2Zmc2V0ICUgNCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICAvLyAidmFsaWRhdGluZyBsaW5lYXIgdGV4dHVyZSBkYXRhKGRlc3RpbmF0aW9u
LCBkZXN0aW5hdGlvbi5idWZmZXIuW1tzaXplXV0sIHNyY1RleHR1cmVEZXNjLmZvcm1hdCwgY29w
eVNpemUpIHN1Y2NlZWRzLiIKKyAgICBpZiAoIXZhbGlkYXRlTGluZWFyVGV4dHVyZURhdGEoZGVz
dGluYXRpb24ubGF5b3V0LCBmcm9tQVBJKGRlc3RpbmF0aW9uLmJ1ZmZlcikuc2l6ZSgpLCBzcmNU
ZXh0dXJlRGVzYy5mb3JtYXQsIGNvcHlTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgQ29tbWFuZEVuY29kZXI6OmNvcHlUZXh0dXJlVG9C
dWZmZXIoY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUmIHNvdXJjZSwgY29uc3QgV0dQVUltYWdl
Q29weUJ1ZmZlciYgZGVzdGluYXRpb24sIGNvbnN0IFdHUFVFeHRlbnQzRCYgY29weVNpemUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKHNvdXJjZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9u
KTsKLSAgICBVTlVTRURfUEFSQU0oY29weVNpemUpOworICAgIGlmIChzb3VyY2UubmV4dEluQ2hh
aW4gfHwgZGVzdGluYXRpb24ubmV4dEluQ2hhaW4gfHwgZGVzdGluYXRpb24ubGF5b3V0Lm5leHRJ
bkNoYWluKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIu
aW8vZ3B1d2ViLyNkb20tZ3B1Y29tbWFuZGVuY29kZXItY29weXRleHR1cmV0b2J1ZmZlcgorCisg
ICAgLy8gIlByZXBhcmUgdGhlIGVuY29kZXIgc3RhdGUgb2YgdGhpcy4gSWYgaXQgcmV0dXJucyBm
YWxzZSwgc3RvcC4iCisgICAgaWYgKCFwcmVwYXJlVGhlRW5jb2RlclN0YXRlKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vICJJZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZSB1bnNhdGlzZmllZCIKKyAgICBpZiAoIXZhbGlkYXRlQ29weVRleHR1cmVUb0J1ZmZlcihzb3Vy
Y2UsIGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkpIHsKKyAgICAgICAgLy8gImdlbmVyYXRlIGEgdmFs
aWRhdGlvbiBlcnJvciBhbmQgc3RvcC4iCisgICAgICAgIG1fZGV2aWNlLT5nZW5lcmF0ZUFWYWxp
ZGF0aW9uRXJyb3IoIlZhbGlkYXRpb24gZmFpbHVyZS4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGVuc3VyZUJsaXRDb21tYW5kRW5jb2RlcigpOworCisgICAgTlNVSW50ZWdlciBk
ZXN0aW5hdGlvbkJ5dGVzUGVyUm93ID0gZGVzdGluYXRpb24ubGF5b3V0LmJ5dGVzUGVyUm93Owor
CisgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMKKyAgICBOU1VJbnRlZ2VyIGRl
c3RpbmF0aW9uQnl0ZXNQZXJJbWFnZSA9IGRlc3RpbmF0aW9uLmxheW91dC5yb3dzUGVySW1hZ2Ug
KiBkZXN0aW5hdGlvbi5sYXlvdXQuYnl0ZXNQZXJSb3c7CisKKyAgICBNVExCbGl0T3B0aW9uIG9w
dGlvbnMgPSBNVExCbGl0T3B0aW9uTm9uZTsKKyAgICBzd2l0Y2ggKHNvdXJjZS5hc3BlY3QpIHsK
KyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0FsbDoKKyAgICAgICAgb3B0aW9ucyA9IE1UTEJs
aXRPcHRpb25Ob25lOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0
X1N0ZW5jaWxPbmx5OgorICAgICAgICBvcHRpb25zID0gTVRMQmxpdE9wdGlvblN0ZW5jaWxGcm9t
RGVwdGhTdGVuY2lsOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0
X0RlcHRoT25seToKKyAgICAgICAgb3B0aW9ucyA9IE1UTEJsaXRPcHRpb25EZXB0aEZyb21EZXB0
aFN0ZW5jaWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRm9y
Y2UzMjoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gbG9naWNhbFNpemUgPSBm
cm9tQVBJKHNvdXJjZS50ZXh0dXJlKS5sb2dpY2FsVGV4dHVyZVN1YnJlc291cmNlRXh0ZW50KHNv
dXJjZS5taXBMZXZlbCk7CisgICAgYXV0byB3aWR0aEZvck1ldGFsID0gc3RkOjptaW4oY29weVNp
emUud2lkdGgsIGxvZ2ljYWxTaXplLndpZHRoKTsKKyAgICBhdXRvIGhlaWdodEZvck1ldGFsID0g
c3RkOjptaW4oY29weVNpemUuaGVpZ2h0LCBsb2dpY2FsU2l6ZS5oZWlnaHQpOworICAgIGF1dG8g
ZGVwdGhGb3JNZXRhbCA9IHN0ZDo6bWluKGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVycywgbG9n
aWNhbFNpemUuZGVwdGhPckFycmF5TGF5ZXJzKTsKKworICAgIGF1dG8mIHNvdXJjZURlc2NyaXB0
b3IgPSBmcm9tQVBJKHNvdXJjZS50ZXh0dXJlKS5kZXNjcmlwdG9yKCk7CisgICAgc3dpdGNoIChz
b3VyY2VEZXNjcmlwdG9yLmRpbWVuc2lvbikgeworICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNp
b25fMUQ6IHsKKyAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50
YXRpb24vbWV0YWwvbXRsYmxpdGNvbW1hbmRlbmNvZGVyLzE0MDA3NTYtY29weWZyb210ZXh0dXJl
P2xhbmd1YWdlPW9iamMKKyAgICAgICAgLy8gIldoZW4geW91IGNvcHkgdG8gYSAxRCB0ZXh0dXJl
LCBoZWlnaHQgYW5kIGRlcHRoIG11c3QgYmUgMS4iCisgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9
IE1UTFNpemVNYWtlKHdpZHRoRm9yTWV0YWwsIDEsIDEpOworICAgICAgICBhdXRvIHNvdXJjZU9y
aWdpbiA9IE1UTE9yaWdpbk1ha2Uoc291cmNlLm9yaWdpbi54LCAxLCAxKTsKKyAgICAgICAgZm9y
ICh1aW50MzJfdCBsYXllciA9IDA7IGxheWVyIDwgY29weVNpemUuZGVwdGhPckFycmF5TGF5ZXJz
OyArK2xheWVyKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVXNlIGNoZWNrZWQgYXJpdGhtZXRp
Yy4KKyAgICAgICAgICAgIE5TVUludGVnZXIgZGVzdGluYXRpb25PZmZzZXQgPSBkZXN0aW5hdGlv
bi5sYXlvdXQub2Zmc2V0ICsgbGF5ZXIgKiBkZXN0aW5hdGlvbkJ5dGVzUGVySW1hZ2U7CisgICAg
ICAgICAgICBOU1VJbnRlZ2VyIHNvdXJjZVNsaWNlID0gc291cmNlLm9yaWdpbi56ICsgbGF5ZXI7
CisgICAgICAgICAgICBbbV9ibGl0Q29tbWFuZEVuY29kZXIKKyAgICAgICAgICAgICAgICBjb3B5
RnJvbVRleHR1cmU6ZnJvbUFQSShzb3VyY2UudGV4dHVyZSkudGV4dHVyZSgpCisgICAgICAgICAg
ICAgICAgc291cmNlU2xpY2U6c291cmNlU2xpY2UKKyAgICAgICAgICAgICAgICBzb3VyY2VMZXZl
bDpzb3VyY2UubWlwTGV2ZWwKKyAgICAgICAgICAgICAgICBzb3VyY2VPcmlnaW46c291cmNlT3Jp
Z2luCisgICAgICAgICAgICAgICAgc291cmNlU2l6ZTpzb3VyY2VTaXplCisgICAgICAgICAgICAg
ICAgdG9CdWZmZXI6ZnJvbUFQSShkZXN0aW5hdGlvbi5idWZmZXIpLmJ1ZmZlcigpCisgICAgICAg
ICAgICAgICAgZGVzdGluYXRpb25PZmZzZXQ6ZGVzdGluYXRpb25PZmZzZXQKKyAgICAgICAgICAg
ICAgICBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93OmRlc3RpbmF0aW9uQnl0ZXNQZXJSb3cKKyAgICAg
ICAgICAgICAgICBkZXN0aW5hdGlvbkJ5dGVzUGVySW1hZ2U6ZGVzdGluYXRpb25CeXRlc1Blcklt
YWdlCisgICAgICAgICAgICAgICAgb3B0aW9uczpvcHRpb25zXTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8yRDogeworICAg
ICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9tZXRhbC9t
dGxibGl0Y29tbWFuZGVuY29kZXIvMTQwMDc1Ni1jb3B5ZnJvbXRleHR1cmU/bGFuZ3VhZ2U9b2Jq
YworICAgICAgICAvLyAiV2hlbiB5b3UgY29weSB0byBhIDJEIHRleHR1cmUsIGRlcHRoIG11c3Qg
YmUgMS4iCisgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IE1UTFNpemVNYWtlKHdpZHRoRm9yTWV0
YWwsIGhlaWdodEZvck1ldGFsLCAxKTsKKyAgICAgICAgYXV0byBzb3VyY2VPcmlnaW4gPSBNVExP
cmlnaW5NYWtlKHNvdXJjZS5vcmlnaW4ueCwgc291cmNlLm9yaWdpbi55LCAxKTsKKyAgICAgICAg
Zm9yICh1aW50MzJfdCBsYXllciA9IDA7IGxheWVyIDwgY29weVNpemUuZGVwdGhPckFycmF5TGF5
ZXJzOyArK2xheWVyKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVXNlIGNoZWNrZWQgYXJpdGht
ZXRpYy4KKyAgICAgICAgICAgIE5TVUludGVnZXIgZGVzdGluYXRpb25PZmZzZXQgPSBkZXN0aW5h
dGlvbi5sYXlvdXQub2Zmc2V0ICsgbGF5ZXIgKiBkZXN0aW5hdGlvbkJ5dGVzUGVySW1hZ2U7Cisg
ICAgICAgICAgICBOU1VJbnRlZ2VyIHNvdXJjZVNsaWNlID0gc291cmNlLm9yaWdpbi56ICsgbGF5
ZXI7CisgICAgICAgICAgICBbbV9ibGl0Q29tbWFuZEVuY29kZXIKKyAgICAgICAgICAgICAgICBj
b3B5RnJvbVRleHR1cmU6ZnJvbUFQSShzb3VyY2UudGV4dHVyZSkudGV4dHVyZSgpCisgICAgICAg
ICAgICAgICAgc291cmNlU2xpY2U6c291cmNlU2xpY2UKKyAgICAgICAgICAgICAgICBzb3VyY2VM
ZXZlbDpzb3VyY2UubWlwTGV2ZWwKKyAgICAgICAgICAgICAgICBzb3VyY2VPcmlnaW46c291cmNl
T3JpZ2luCisgICAgICAgICAgICAgICAgc291cmNlU2l6ZTpzb3VyY2VTaXplCisgICAgICAgICAg
ICAgICAgdG9CdWZmZXI6ZnJvbUFQSShkZXN0aW5hdGlvbi5idWZmZXIpLmJ1ZmZlcigpCisgICAg
ICAgICAgICAgICAgZGVzdGluYXRpb25PZmZzZXQ6ZGVzdGluYXRpb25PZmZzZXQKKyAgICAgICAg
ICAgICAgICBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93OmRlc3RpbmF0aW9uQnl0ZXNQZXJSb3cKKyAg
ICAgICAgICAgICAgICBkZXN0aW5hdGlvbkJ5dGVzUGVySW1hZ2U6ZGVzdGluYXRpb25CeXRlc1Bl
ckltYWdlCisgICAgICAgICAgICAgICAgb3B0aW9uczpvcHRpb25zXTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8zRDogewor
ICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBNVExTaXplTWFrZSh3aWR0aEZvck1ldGFsLCBoZWln
aHRGb3JNZXRhbCwgZGVwdGhGb3JNZXRhbCk7CisgICAgICAgIGF1dG8gc291cmNlT3JpZ2luID0g
TVRMT3JpZ2luTWFrZShzb3VyY2Uub3JpZ2luLngsIHNvdXJjZS5vcmlnaW4ueSwgc291cmNlLm9y
aWdpbi56KTsKKyAgICAgICAgTlNVSW50ZWdlciBkZXN0aW5hdGlvbk9mZnNldCA9IGRlc3RpbmF0
aW9uLmxheW91dC5vZmZzZXQ7CisgICAgICAgICAgICBbbV9ibGl0Q29tbWFuZEVuY29kZXIKKyAg
ICAgICAgICAgICAgICBjb3B5RnJvbVRleHR1cmU6ZnJvbUFQSShzb3VyY2UudGV4dHVyZSkudGV4
dHVyZSgpCisgICAgICAgICAgICAgICAgc291cmNlU2xpY2U6MAorICAgICAgICAgICAgICAgIHNv
dXJjZUxldmVsOnNvdXJjZS5taXBMZXZlbAorICAgICAgICAgICAgICAgIHNvdXJjZU9yaWdpbjpz
b3VyY2VPcmlnaW4KKyAgICAgICAgICAgICAgICBzb3VyY2VTaXplOnNvdXJjZVNpemUKKyAgICAg
ICAgICAgICAgICB0b0J1ZmZlcjpmcm9tQVBJKGRlc3RpbmF0aW9uLmJ1ZmZlcikuYnVmZmVyKCkK
KyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9mZnNldDpkZXN0aW5hdGlvbk9mZnNldAorICAg
ICAgICAgICAgICAgIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3c6ZGVzdGluYXRpb25CeXRlc1BlclJv
dworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uQnl0ZXNQZXJJbWFnZTpkZXN0aW5hdGlvbkJ5
dGVzUGVySW1hZ2UKKyAgICAgICAgICAgICAgICBvcHRpb25zOm9wdGlvbnNdOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl9Gb3JjZTMyOgorICAg
ICAgICByZXR1cm47CisgICAgfQorfQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxXR1BVVGV4dHVy
ZUZvcm1hdD4gaXNTUkdCQ29tcGF0aWJsZShXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQpCit7Cisg
ICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1VuZGVmaW5l
ZDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SOFVub3JtOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfUjhTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4VWlu
dDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X1IxNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMTZTaW50Ogor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjE2RmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9SRzhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFNub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkc4VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X1JHOFNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMzJGbG9hdDoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IzMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SMzJTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkcxNlVpbnQ6CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X1JHMTZGbG9hdDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X1JHQkE4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9S
R0JBOFVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4VW5v
cm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFNub3JtOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfUkdCQThVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdC
QThTaW50OgorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfQkdSQThVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JHUkE4VW5v
cm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkdSQThVbm9ybTsKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQjEwQTJVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X1JHMTFCMTBVZmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0I5
RTVVZmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzMyRmxvYXQ6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzMyVWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X1JHMzJTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTE2VWludDoKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkExNlNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SR0JBMTZGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkEzMkZsb2F0
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTMyVWludDoKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X1JHQkEzMlNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9TdGVu
Y2lsODoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMTZVbm9ybToKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRQbHVzOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfRGVwdGgyNFBsdXNTdGVuY2lsODoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRo
MjRVbm9ybVN0ZW5jaWw4OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0U3RlbmNpbDg6CisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzFS
R0JBVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm1TcmdiOgor
ICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkMxUkdCQVVub3JtOworICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfQkMyUkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfQkMyUkdCQVVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JD
MlJHQkFVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybToKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybVNyZ2I6CisgICAgICAgIHJldHVy
biBXR1BVVGV4dHVyZUZvcm1hdF9CQzNSR0JBVW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9CQzRSVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSU25vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzVSR1Vub3JtOgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfQkM1UkdTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNkhSR0JV
ZmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzZIUkdCRmxvYXQ6CisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzdSR0JB
VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzdSR0JBVW5vcm1TcmdiOgorICAg
ICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkM3UkdCQVVub3JtOworICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfRVRDMlJHQjhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0VUQzJSR0I4VW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfRVRD
MlJHQjhVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4QTFVbm9ybToK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4QTFVbm9ybVNyZ2I6CisgICAgICAg
IHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOEExVW5vcm07CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9FVEMyUkdCQThVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0VUQzJSR0JBOFVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0VU
QzJSR0JBOFVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUjExVW5vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FQUNSMTFTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0VBQ1JHMTFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JH
MTFTbm9ybToKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0FTVEM0eDRVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM0
eDRVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNHg0VW5v
cm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg0VW5vcm06CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg0VW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzV4NFVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNU
QzV4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtU3JnYjoK
KyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM1eDVVbm9ybTsKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0FTVEM2eDVVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9B
U1RDNng1VW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5vcm1TcmdiOgorICAgICAgICByZXR1
cm4gV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NlVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzh4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NVVu
b3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDVVbm9ybTsK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDZVbm9ybToKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X0FTVEM4eDZVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVy
ZUZvcm1hdF9BU1RDOHg2VW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg4
VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg4VW5vcm1TcmdiOgorICAg
ICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4OFVub3JtOworICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfQVNUQzEweDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEMxMHg1VW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQVNU
QzEweDVVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg2VW5vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NlVub3JtU3JnYjoKKyAgICAgICAgcmV0
dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg2VW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9BU1RDMTB4OFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEw
eDhVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4OFVu
b3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDEwVW5vcm06CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4MTBVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4MTBVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0FTVEMxMngxMFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEyeDEw
VW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEyeDEwVW5v
cm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTJVbm9ybToKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMlVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMlVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfRm9yY2UzMjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBhcmVDb3B5Q29tcGF0aWJs
ZShXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQxLCBXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQyKQor
eworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2NvcHktY29tcGF0aWJs
ZQorCisgICAgLy8gImZvcm1hdDEgZXF1YWxzIGZvcm1hdDIiCisgICAgaWYgKGZvcm1hdDEgPT0g
Zm9ybWF0MikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyAiZm9ybWF0MSBhbmQgZm9y
bWF0MiBkaWZmZXIgb25seSBpbiB3aGV0aGVyIHRoZXkgYXJlIHNyZ2IgZm9ybWF0cyAoaGF2ZSB0
aGUgLXNyZ2Igc3VmZml4KS4iCisgICAgYXV0byBjYW5vbmljYWxpemVkRm9ybWF0MSA9IGlzU1JH
QkNvbXBhdGlibGUoZm9ybWF0MSk7CisgICAgYXV0byBjYW5vbmljYWxpemVkRm9ybWF0MiA9IGlz
U1JHQkNvbXBhdGlibGUoZm9ybWF0Mik7CisgICAgaWYgKCFjYW5vbmljYWxpemVkRm9ybWF0MSB8
fCAhY2Fub25pY2FsaXplZEZvcm1hdDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
Y2Fub25pY2FsaXplZEZvcm1hdDEgIT0gY2Fub25pY2FsaXplZEZvcm1hdDEpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCB2YWxpZGF0
ZUNvcHlUZXh0dXJlVG9UZXh0dXJlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBzb3VyY2Us
IGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBkZXN0aW5hdGlvbiwgY29uc3QgV0dQVUV4dGVu
dDNEJiBjb3B5U2l6ZSkKK3sKKyAgICAvLyAiTGV0IHNyY1RleHR1cmVEZXNjIGJlIHNvdXJjZS50
ZXh0dXJlLltbZGVzY3JpcHRvcl1dLiIKKyAgICBjb25zdCBhdXRvJiBzcmNUZXh0dXJlRGVzYyA9
IGZyb21BUEkoc291cmNlLnRleHR1cmUpLmRlc2NyaXB0b3IoKTsKKworICAgIC8vICJMZXQgZHN0
VGV4dHVyZURlc2MgYmUgZGVzdGluYXRpb24udGV4dHVyZS5bW2Rlc2NyaXB0b3JdXS4iCisgICAg
Y29uc3QgYXV0byYgZHN0VGV4dHVyZURlc2MgPSBmcm9tQVBJKGRlc3RpbmF0aW9uLnRleHR1cmUp
LmRlc2NyaXB0b3IoKTsKKworICAgIC8vICJ2YWxpZGF0aW5nIEdQVUltYWdlQ29weVRleHR1cmUo
c291cmNlLCBjb3B5U2l6ZSkgcmV0dXJucyB0cnVlLiIKKyAgICBpZiAoIXZhbGlkYXRlSW1hZ2VD
b3B5VGV4dHVyZShzb3VyY2UsIGNvcHlTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gInNyY1RleHR1cmVEZXNjLnVzYWdlIGNvbnRhaW5zIENPUFlfU1JDLiIKKyAgICBpZiAo
IShzcmNUZXh0dXJlRGVzYy51c2FnZSAmIFdHUFVUZXh0dXJlVXNhZ2VfQ29weVNyYykpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJ2YWxpZGF0aW5nIEdQVUltYWdlQ29weVRleHR1
cmUoZGVzdGluYXRpb24sIGNvcHlTaXplKSByZXR1cm5zIHRydWUuIgorICAgIGlmICghdmFsaWRh
dGVJbWFnZUNvcHlUZXh0dXJlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vICJkc3RUZXh0dXJlRGVzYy51c2FnZSBjb250YWlucyBDT1BZX0RT
VC4iCisgICAgaWYgKCEoZHN0VGV4dHVyZURlc2MudXNhZ2UgJiBXR1BVVGV4dHVyZVVzYWdlX0Nv
cHlEc3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAic3JjVGV4dHVyZURlc2Mu
c2FtcGxlQ291bnQgaXMgZXF1YWwgdG8gZHN0VGV4dHVyZURlc2Muc2FtcGxlQ291bnQuIgorICAg
IGlmIChzcmNUZXh0dXJlRGVzYy5zYW1wbGVDb3VudCAhPSBkc3RUZXh0dXJlRGVzYy5zYW1wbGVD
b3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gInNyY1RleHR1cmVEZXNjLmZv
cm1hdCBhbmQgZHN0VGV4dHVyZURlc2MuZm9ybWF0IG11c3QgYmUgY29weS1jb21wYXRpYmxlLiIK
KyAgICBpZiAoIWFyZUNvcHlDb21wYXRpYmxlKHNyY1RleHR1cmVEZXNjLmZvcm1hdCwgZHN0VGV4
dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gIklmIHNy
Y1RleHR1cmVEZXNjLmZvcm1hdCBpcyBhIGRlcHRoLXN0ZW5jaWwgZm9ybWF0OiIKKyAgICBpZiAo
VGV4dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChzcmNUZXh0dXJlRGVzYy5mb3JtYXQpKSB7
CisgICAgICAgIC8vICJzb3VyY2UuYXNwZWN0IGFuZCBkZXN0aW5hdGlvbi5hc3BlY3QgbXVzdCBi
b3RoIHJlZmVyIHRvIGFsbCBhc3BlY3RzIG9mIHNyY1RleHR1cmVEZXNjLmZvcm1hdCBhbmQgZHN0
VGV4dHVyZURlc2MuZm9ybWF0LCByZXNwZWN0aXZlbHkuIgorICAgICAgICBzd2l0Y2ggKHNvdXJj
ZS5hc3BlY3QpIHsKKyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9BbGw6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25seToK
KyAgICAgICAgICAgIGlmICghVGV4dHVyZTo6c3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQoc3JjVGV4
dHVyZURlc2MuZm9ybWF0KSB8fCBUZXh0dXJlOjpkZXB0aE9ubHlBc3BlY3RGb3JtYXQoc3JjVGV4
dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9EZXB0aE9ubHk6Cisg
ICAgICAgICAgICBpZiAoIVRleHR1cmU6OmRlcHRoT25seUFzcGVjdEZvcm1hdChzcmNUZXh0dXJl
RGVzYy5mb3JtYXQpIHx8IFRleHR1cmU6OnN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0KHNyY1RleHR1
cmVEZXNjLmZvcm1hdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRm9yY2UzMjoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoZGVzdGlu
YXRpb24uYXNwZWN0KSB7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfQWxsOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfU3RlbmNpbE9u
bHk6CisgICAgICAgICAgICBpZiAoIVRleHR1cmU6OnN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0KGRz
dFRleHR1cmVEZXNjLmZvcm1hdCkgfHwgVGV4dHVyZTo6ZGVwdGhPbmx5QXNwZWN0Rm9ybWF0KGRz
dFRleHR1cmVEZXNjLmZvcm1hdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRGVwdGhPbmx5
OgorICAgICAgICAgICAgaWYgKCFUZXh0dXJlOjpkZXB0aE9ubHlBc3BlY3RGb3JtYXQoZHN0VGV4
dHVyZURlc2MuZm9ybWF0KSB8fCBUZXh0dXJlOjpzdGVuY2lsT25seUFzcGVjdEZvcm1hdChkc3RU
ZXh0dXJlRGVzYy5mb3JtYXQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0ZvcmNlMzI6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAidmFs
aWRhdGluZyB0ZXh0dXJlIGNvcHkgcmFuZ2Uoc291cmNlLCBjb3B5U2l6ZSkgcmV0dXJucyB0cnVl
LiIKKyAgICBpZiAoIXZhbGlkYXRlVGV4dHVyZUNvcHlSYW5nZShzb3VyY2UsIGNvcHlTaXplKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gInZhbGlkYXRpbmcgdGV4dHVyZSBjb3B5
IHJhbmdlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkgcmV0dXJucyB0cnVlLiIKKyAgICBpZiAoIXZh
bGlkYXRlVGV4dHVyZUNvcHlSYW5nZShkZXN0aW5hdGlvbiwgY29weVNpemUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiVGhlIHNldCBvZiBzdWJyZXNvdXJjZXMgZm9yIHRleHR1
cmUgY29weShzb3VyY2UsIGNvcHlTaXplKSBhbmQgdGhlIHNldCBvZiBzdWJyZXNvdXJjZXMgZm9y
IHRleHR1cmUgY29weShkZXN0aW5hdGlvbiwgY29weVNpemUpIGlzIGRpc2pvaW50LiIKKyAgICAv
LyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNhYnN0cmFjdC1vcGRlZi1zZXQtb2Yt
c3VicmVzb3VyY2VzLWZvci10ZXh0dXJlLWNvcHkKKyAgICBpZiAoc291cmNlLnRleHR1cmUgPT0g
ZGVzdGluYXRpb24udGV4dHVyZSkgeworICAgICAgICAvLyBNaXAgbGV2ZWxzIGFyZSBuZXZlciBy
YW5nZXMuCisgICAgICAgIGlmIChzb3VyY2UubWlwTGV2ZWwgPT0gZGVzdGluYXRpb24ubWlwTGV2
ZWwpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoZnJvbUFQSShzb3VyY2UudGV4dHVyZSkuZGVzY3Jp
cHRvcigpLmRpbWVuc2lvbikgeworICAgICAgICAgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lv
bl8xRDoKKyAgICAgICAgICAgICAgICAvLyAiVGhlIHN1YnJlc291cmNlIG9mIGltYWdlQ29weVRl
eHR1cmUudGV4dHVyZSBhdCBtaXBtYXAgbGV2ZWwgaW1hZ2VDb3B5VGV4dHVyZS5taXBMZXZlbC4i
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBXR1BVVGV4
dHVyZURpbWVuc2lvbl8yRDogeworICAgICAgICAgICAgICAgIC8vICJGb3IgZWFjaCBhcnJheUxh
eWVyIG9mIHRoZSBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMgYXJyYXkgbGF5ZXJzIHN0YXJ0
aW5nIGF0IGltYWdlQ29weVRleHR1cmUub3JpZ2luLno6IgorICAgICAgICAgICAgICAgIC8vICJU
aGUgc3VicmVzb3VyY2Ugb2YgaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlIGF0IG1pcG1hcCBsZXZl
bCBpbWFnZUNvcHlUZXh0dXJlLm1pcExldmVsIGFuZCBhcnJheSBsYXllciBhcnJheUxheWVyLiIK
KyAgICAgICAgICAgICAgICBSYW5nZTx1aW50MzJfdD4gc291cmNlUmFuZ2Uoc291cmNlLm9yaWdp
bi56LCBzb3VyY2Uub3JpZ2luLnogKyBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMpOworICAg
ICAgICAgICAgICAgIFJhbmdlPHVpbnQzMl90PiBkZXN0aW5hdGlvblJhbmdlKGRlc3RpbmF0aW9u
Lm9yaWdpbi56LCBzb3VyY2Uub3JpZ2luLnogKyBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMp
OworICAgICAgICAgICAgICAgIGlmIChzb3VyY2VSYW5nZS5vdmVybGFwcyhkZXN0aW5hdGlvblJh
bmdlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVu
c2lvbl8zRDoKKyAgICAgICAgICAgICAgICAvLyAiVGhlIHN1YnJlc291cmNlIG9mIGltYWdlQ29w
eVRleHR1cmUudGV4dHVyZSBhdCBtaXBtYXAgbGV2ZWwgaW1hZ2VDb3B5VGV4dHVyZS5taXBMZXZl
bC4iCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBXR1BV
VGV4dHVyZURpbWVuc2lvbl9Gb3JjZTMyOgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIENvbW1hbmRFbmNv
ZGVyOjpjb3B5VGV4dHVyZVRvVGV4dHVyZShjb25zdCBXR1BVSW1hZ2VDb3B5VGV4dHVyZSYgc291
cmNlLCBjb25zdCBXR1BVSW1hZ2VDb3B5VGV4dHVyZSYgZGVzdGluYXRpb24sIGNvbnN0IFdHUFVF
eHRlbnQzRCYgY29weVNpemUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHNvdXJjZSk7Ci0gICAgVU5V
U0VEX1BBUkFNKGRlc3RpbmF0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oY29weVNpemUpOworICAg
IGlmIChzb3VyY2UubmV4dEluQ2hhaW4gfHwgZGVzdGluYXRpb24ubmV4dEluQ2hhaW4pCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2Rv
bS1ncHVjb21tYW5kZW5jb2Rlci1jb3B5dGV4dHVyZXRvdGV4dHVyZQorCisgICAgLy8gIlByZXBh
cmUgdGhlIGVuY29kZXIgc3RhdGUgb2YgdGhpcy4gSWYgaXQgcmV0dXJucyBmYWxzZSwgc3RvcC4i
CisgICAgaWYgKCFwcmVwYXJlVGhlRW5jb2RlclN0YXRlKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vICJJZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSB1bnNhdGlzZmll
ZCIKKyAgICBpZiAoIXZhbGlkYXRlQ29weVRleHR1cmVUb1RleHR1cmUoc291cmNlLCBkZXN0aW5h
dGlvbiwgY29weVNpemUpKSB7CisgICAgICAgIC8vICJnZW5lcmF0ZSBhIHZhbGlkYXRpb24gZXJy
b3IgYW5kIHN0b3AuIgorICAgICAgICBtX2RldmljZS0+Z2VuZXJhdGVBVmFsaWRhdGlvbkVycm9y
KCJWYWxpZGF0aW9uIGZhaWx1cmUuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBl
bnN1cmVCbGl0Q29tbWFuZEVuY29kZXIoKTsKKworICAgIGF1dG8mIHNvdXJjZURlc2NyaXB0b3Ig
PSBmcm9tQVBJKHNvdXJjZS50ZXh0dXJlKS5kZXNjcmlwdG9yKCk7CisgICAgLy8gRklYTUUoUEVS
Rk9STUFOQ0UpOiBJcyBpdCBhY3R1YWxseSBmYXN0ZXIgdG8gdXNlIHRoZSAtW01UTEJsaXRDb21t
YW5kRW5jb2RlciBjb3B5RnJvbVRleHR1cmU6Li4udG9UZXh0dXJlOi4uLmxldmVsQ291bnQ6XQor
ICAgIC8vIHZhcmlhbnQsIHdoZXJlIHBvc3NpYmxlLCByYXRoZXIgdGhhbiBjYWxsaW5nIHRoZSBv
dGhlciB2YXJpYW50IGluIGEgbG9vcD8KKyAgICBzd2l0Y2ggKHNvdXJjZURlc2NyaXB0b3IuZGlt
ZW5zaW9uKSB7CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8xRDogeworICAgICAgICAv
LyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9tZXRhbC9tdGxibGl0
Y29tbWFuZGVuY29kZXIvMTQwMDc1Ni1jb3B5ZnJvbXRleHR1cmU/bGFuZ3VhZ2U9b2JqYworICAg
ICAgICAvLyAiV2hlbiB5b3UgY29weSB0byBhIDFEIHRleHR1cmUsIGhlaWdodCBhbmQgZGVwdGgg
bXVzdCBiZSAxLiIKKyAgICAgICAgYXV0byBzb3VyY2VTaXplID0gTVRMU2l6ZU1ha2UoY29weVNp
emUud2lkdGgsIDEsIDEpOworICAgICAgICBhdXRvIHNvdXJjZU9yaWdpbiA9IE1UTE9yaWdpbk1h
a2Uoc291cmNlLm9yaWdpbi54LCAxLCAxKTsKKyAgICAgICAgYXV0byBkZXN0aW5hdGlvbk9yaWdp
biA9IE1UTE9yaWdpbk1ha2UoZGVzdGluYXRpb24ub3JpZ2luLngsIDEsIDEpOworICAgICAgICBm
b3IgKHVpbnQzMl90IGxheWVyID0gMDsgbGF5ZXIgPCBjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXll
cnM7ICsrbGF5ZXIpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBVc2UgY2hlY2tlZCBhcml0aG1l
dGljLgorICAgICAgICAgICAgTlNVSW50ZWdlciBzb3VyY2VTbGljZSA9IHNvdXJjZS5vcmlnaW4u
eiArIGxheWVyOworICAgICAgICAgICAgTlNVSW50ZWdlciBkZXN0aW5hdGlvblNsaWNlID0gZGVz
dGluYXRpb24ub3JpZ2luLnogKyBsYXllcjsKKyAgICAgICAgICAgIFttX2JsaXRDb21tYW5kRW5j
b2RlcgorICAgICAgICAgICAgICAgIGNvcHlGcm9tVGV4dHVyZTpmcm9tQVBJKHNvdXJjZS50ZXh0
dXJlKS50ZXh0dXJlKCkKKyAgICAgICAgICAgICAgICBzb3VyY2VTbGljZTpzb3VyY2VTbGljZQor
ICAgICAgICAgICAgICAgIHNvdXJjZUxldmVsOnNvdXJjZS5taXBMZXZlbAorICAgICAgICAgICAg
ICAgIHNvdXJjZU9yaWdpbjpzb3VyY2VPcmlnaW4KKyAgICAgICAgICAgICAgICBzb3VyY2VTaXpl
OnNvdXJjZVNpemUKKyAgICAgICAgICAgICAgICB0b1RleHR1cmU6ZnJvbUFQSShkZXN0aW5hdGlv
bi50ZXh0dXJlKS50ZXh0dXJlKCkKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblNsaWNlOmRl
c3RpbmF0aW9uU2xpY2UKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkxldmVsOmRlc3RpbmF0
aW9uLm1pcExldmVsCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25PcmlnaW46ZGVzdGluYXRp
b25PcmlnaW5dOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdH
UFVUZXh0dXJlRGltZW5zaW9uXzJEOiB7CisgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFw
cGxlLmNvbS9kb2N1bWVudGF0aW9uL21ldGFsL210bGJsaXRjb21tYW5kZW5jb2Rlci8xNDAwNzU2
LWNvcHlmcm9tdGV4dHVyZT9sYW5ndWFnZT1vYmpjCisgICAgICAgIC8vICJXaGVuIHlvdSBjb3B5
IHRvIGEgMkQgdGV4dHVyZSwgZGVwdGggbXVzdCBiZSAxLiIKKyAgICAgICAgYXV0byBzb3VyY2VT
aXplID0gTVRMU2l6ZU1ha2UoY29weVNpemUud2lkdGgsIGNvcHlTaXplLmhlaWdodCwgMSk7Cisg
ICAgICAgIGF1dG8gc291cmNlT3JpZ2luID0gTVRMT3JpZ2luTWFrZShzb3VyY2Uub3JpZ2luLngs
IHNvdXJjZS5vcmlnaW4ueSwgMSk7CisgICAgICAgIGF1dG8gZGVzdGluYXRpb25PcmlnaW4gPSBN
VExPcmlnaW5NYWtlKGRlc3RpbmF0aW9uLm9yaWdpbi54LCBkZXN0aW5hdGlvbi5vcmlnaW4ueSwg
MSk7CisgICAgICAgIGZvciAodWludDMyX3QgbGF5ZXIgPSAwOyBsYXllciA8IGNvcHlTaXplLmRl
cHRoT3JBcnJheUxheWVyczsgKytsYXllcikgeworICAgICAgICAgICAgLy8gRklYTUU6IFVzZSBj
aGVja2VkIGFyaXRobWV0aWMuCisgICAgICAgICAgICBOU1VJbnRlZ2VyIHNvdXJjZVNsaWNlID0g
c291cmNlLm9yaWdpbi56ICsgbGF5ZXI7CisgICAgICAgICAgICBOU1VJbnRlZ2VyIGRlc3RpbmF0
aW9uU2xpY2UgPSBkZXN0aW5hdGlvbi5vcmlnaW4ueiArIGxheWVyOworICAgICAgICAgICAgW21f
YmxpdENvbW1hbmRFbmNvZGVyCisgICAgICAgICAgICAgICAgY29weUZyb21UZXh0dXJlOmZyb21B
UEkoc291cmNlLnRleHR1cmUpLnRleHR1cmUoKQorICAgICAgICAgICAgICAgIHNvdXJjZVNsaWNl
OnNvdXJjZVNsaWNlCisgICAgICAgICAgICAgICAgc291cmNlTGV2ZWw6c291cmNlLm1pcExldmVs
CisgICAgICAgICAgICAgICAgc291cmNlT3JpZ2luOnNvdXJjZU9yaWdpbgorICAgICAgICAgICAg
ICAgIHNvdXJjZVNpemU6c291cmNlU2l6ZQorICAgICAgICAgICAgICAgIHRvVGV4dHVyZTpmcm9t
QVBJKGRlc3RpbmF0aW9uLnRleHR1cmUpLnRleHR1cmUoKQorICAgICAgICAgICAgICAgIGRlc3Rp
bmF0aW9uU2xpY2U6ZGVzdGluYXRpb25TbGljZQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9u
TGV2ZWw6ZGVzdGluYXRpb24ubWlwTGV2ZWwKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9y
aWdpbjpkZXN0aW5hdGlvbk9yaWdpbl07CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25fM0Q6IHsKKyAgICAgICAgYXV0byBzb3Vy
Y2VTaXplID0gTVRMU2l6ZU1ha2UoY29weVNpemUud2lkdGgsIGNvcHlTaXplLmhlaWdodCwgY29w
eVNpemUuZGVwdGhPckFycmF5TGF5ZXJzKTsKKyAgICAgICAgYXV0byBzb3VyY2VPcmlnaW4gPSBN
VExPcmlnaW5NYWtlKHNvdXJjZS5vcmlnaW4ueCwgc291cmNlLm9yaWdpbi55LCBzb3VyY2Uub3Jp
Z2luLnopOworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uT3JpZ2luID0gTVRMT3JpZ2luTWFrZShk
ZXN0aW5hdGlvbi5vcmlnaW4ueCwgZGVzdGluYXRpb24ub3JpZ2luLnksIGRlc3RpbmF0aW9uLm9y
aWdpbi56KTsKKyAgICAgICAgW21fYmxpdENvbW1hbmRFbmNvZGVyCisgICAgICAgICAgICBjb3B5
RnJvbVRleHR1cmU6ZnJvbUFQSShzb3VyY2UudGV4dHVyZSkudGV4dHVyZSgpCisgICAgICAgICAg
ICBzb3VyY2VTbGljZTowCisgICAgICAgICAgICBzb3VyY2VMZXZlbDpzb3VyY2UubWlwTGV2ZWwK
KyAgICAgICAgICAgIHNvdXJjZU9yaWdpbjpzb3VyY2VPcmlnaW4KKyAgICAgICAgICAgIHNvdXJj
ZVNpemU6c291cmNlU2l6ZQorICAgICAgICAgICAgdG9UZXh0dXJlOmZyb21BUEkoZGVzdGluYXRp
b24udGV4dHVyZSkudGV4dHVyZSgpCisgICAgICAgICAgICBkZXN0aW5hdGlvblNsaWNlOjAKKyAg
ICAgICAgICAgIGRlc3RpbmF0aW9uTGV2ZWw6ZGVzdGluYXRpb24ubWlwTGV2ZWwKKyAgICAgICAg
ICAgIGRlc3RpbmF0aW9uT3JpZ2luOmRlc3RpbmF0aW9uT3JpZ2luXTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25fRm9yY2UzMjoKKyAgICAgICAg
cmV0dXJuOworICAgIH0KIH0KIAogc3RhdGljIGJvb2wgdmFsaWRhdGVDbGVhckJ1ZmZlcihjb25z
dCBCdWZmZXImIGJ1ZmZlciwgdWludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCBzaXplKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tcHV0ZVBpcGVsaW5lLm1tIGIvU291cmNlL1dl
YkdQVS9XZWJHUFUvQ29tcHV0ZVBpcGVsaW5lLm1tCmluZGV4IGVkOWI4Y2ZmNjQxNDMwMTJlNzdi
M2UyMWZjNWU5Y2FiMDc1OTM2NGMuLjZmYTFjZWU5YmI0YzZhNzI3NmUyM2NjYzNiZmMzMmJmODA0
ZDhmOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbXB1dGVQaXBlbGluZS5t
bQorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21wdXRlUGlwZWxpbmUubW0KQEAgLTE0Niw4
ICsxNDYsOCBAQCBSZWZQdHI8Q29tcHV0ZVBpcGVsaW5lPiBEZXZpY2U6OmNyZWF0ZUNvbXB1dGVQ
aXBlbGluZShjb25zdCBXR1BVQ29tcHV0ZVBpcGVsaW5lRAogICAgIGlmIChkZXNjcmlwdG9yLm5l
eHRJbkNoYWluIHx8IGRlc2NyaXB0b3IuY29tcHV0ZS5uZXh0SW5DaGFpbikKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICBjb25zdCBTaGFkZXJNb2R1bGUmIHNoYWRlck1vZHVsZSA9IFdl
YkdQVTo6ZnJvbUFQSShkZXNjcmlwdG9yLmNvbXB1dGUubW9kdWxlKTsKLSAgICBjb25zdCBQaXBl
bGluZUxheW91dCYgcGlwZWxpbmVMYXlvdXQgPSBXZWJHUFU6OmZyb21BUEkoZGVzY3JpcHRvci5s
YXlvdXQpOworICAgIGNvbnN0IFNoYWRlck1vZHVsZSYgc2hhZGVyTW9kdWxlID0gZnJvbUFQSShk
ZXNjcmlwdG9yLmNvbXB1dGUubW9kdWxlKTsKKyAgICBjb25zdCBQaXBlbGluZUxheW91dCYgcGlw
ZWxpbmVMYXlvdXQgPSBmcm9tQVBJKGRlc2NyaXB0b3IubGF5b3V0KTsKICAgICBhdXRvIGxhYmVs
ID0gZnJvbUFQSShkZXNjcmlwdG9yLmxhYmVsKTsKIAogICAgIGF1dG8gbGlicmFyeUNyZWF0aW9u
UmVzdWx0ID0gY3JlYXRlTGlicmFyeShtX2RldmljZSwgc2hhZGVyTW9kdWxlLCBwaXBlbGluZUxh
eW91dCwgZGVzY3JpcHRvci5jb21wdXRlLmVudHJ5UG9pbnQsIGxhYmVsKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJHUFUvV2ViR1BVL1BpcGVsaW5lTGF5b3V0Lm1tIGIvU291cmNlL1dlYkdQVS9X
ZWJHUFUvUGlwZWxpbmVMYXlvdXQubW0KaW5kZXggZWZhMGQ2ZDUxN2JhY2I2N2NlMjM2ZDA0MWFm
MWE1ZmYzNTgwOTZmYS4uMDY1ODNkZjBkZGFmM2M2OTY2ZTk0NGZhMzYzZTY0MDg1OTFiYWE3YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvUGlwZWxpbmVMYXlvdXQubW0KKysrIGIv
U291cmNlL1dlYkdQVS9XZWJHUFUvUGlwZWxpbmVMYXlvdXQubW0KQEAgLTQxLDcgKzQxLDcgQEAg
UmVmUHRyPFBpcGVsaW5lTGF5b3V0PiBEZXZpY2U6OmNyZWF0ZVBpcGVsaW5lTGF5b3V0KGNvbnN0
IFdHUFVQaXBlbGluZUxheW91dERlc2MKICAgICBiaW5kR3JvdXBMYXlvdXRzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci5iaW5kR3JvdXBMYXlvdXRDb3VudCk7CiAgICAgZm9yICh1
aW50MzJfdCBpID0gMDsgaSA8IGRlc2NyaXB0b3IuYmluZEdyb3VwTGF5b3V0Q291bnQ7ICsraSkg
ewogICAgICAgICBhdXRvKiBiaW5kR3JvdXBMYXlvdXQgPSBkZXNjcmlwdG9yLmJpbmRHcm91cExh
eW91dHNbaV07Ci0gICAgICAgIGJpbmRHcm91cExheW91dHMudW5jaGVja2VkQXBwZW5kKFdlYkdQ
VTo6ZnJvbUFQSShiaW5kR3JvdXBMYXlvdXQpKTsKKyAgICAgICAgYmluZEdyb3VwTGF5b3V0cy51
bmNoZWNrZWRBcHBlbmQoZnJvbUFQSShiaW5kR3JvdXBMYXlvdXQpKTsKICAgICB9CiAgICAgcmV0
dXJuIFBpcGVsaW5lTGF5b3V0OjpjcmVhdGUoV1RGTW92ZShiaW5kR3JvdXBMYXlvdXRzKSk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9TaGFkZXJNb2R1bGUubW0gYi9Tb3Vy
Y2UvV2ViR1BVL1dlYkdQVS9TaGFkZXJNb2R1bGUubW0KaW5kZXggZTAwNzU1Y2ZiNTViNGM2NmE4
OTI3ZGQzZTVlMDJlYTkxMDE3MGM0NC4uYjUxZTY4OTRlNjM2Y2NkMmQzYzIxMDRiZTQ1ZjExYmQw
MDgyNzQ3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvU2hhZGVyTW9kdWxlLm1t
CisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1NoYWRlck1vZHVsZS5tbQpAQCAtODgsOCArODgs
OCBAQCBzdGF0aWMgUmVmUHRyPFNoYWRlck1vZHVsZT4gZWFybHlDb21waWxlU2hhZGVyTW9kdWxl
KGlkPE1UTERldmljZT4gZGV2aWNlLCBzdGQ6OgogICAgICAgICBjb25zdCBhdXRvJiBoaW50ID0g
c3VwcGxpZWRIaW50cy5oaW50c1tpXTsKICAgICAgICAgaWYgKGhpbnQubmV4dEluQ2hhaW4pCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaGludHMuYWRkKGhpbnQua2V5LCBX
ZWJHUFU6OmZyb21BUEkoaGludC5oaW50LmxheW91dCkpOwotICAgICAgICBhdXRvIGNvbnZlcnRl
ZFBpcGVsaW5lTGF5b3V0ID0gU2hhZGVyTW9kdWxlOjpjb252ZXJ0UGlwZWxpbmVMYXlvdXQoV2Vi
R1BVOjpmcm9tQVBJKGhpbnQuaGludC5sYXlvdXQpKTsKKyAgICAgICAgaGludHMuYWRkKGhpbnQu
a2V5LCBmcm9tQVBJKGhpbnQuaGludC5sYXlvdXQpKTsKKyAgICAgICAgYXV0byBjb252ZXJ0ZWRQ
aXBlbGluZUxheW91dCA9IFNoYWRlck1vZHVsZTo6Y29udmVydFBpcGVsaW5lTGF5b3V0KGZyb21B
UEkoaGludC5oaW50LmxheW91dCkpOwogICAgICAgICB3Z3NsSGludHMuYWRkKGhpbnQua2V5LCBX
VEZNb3ZlKGNvbnZlcnRlZFBpcGVsaW5lTGF5b3V0KSk7CiAgICAgfQogICAgIGF1dG8gcHJlcGFy
ZVJlc3VsdCA9IFdHU0w6OnByZXBhcmUoc3RkOjpnZXQ8V0dTTDo6U3VjY2Vzc2Z1bENoZWNrPihj
aGVja1Jlc3VsdCkuYXN0LCB3Z3NsSGludHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9X
ZWJHUFUvVGV4dHVyZS5oIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvVGV4dHVyZS5oCmluZGV4IDlh
NTk3OGQ3MzkxMmM5OTFlNGI0M2JjZWQyNzlkMTFkM2ViYjc0MDUuLjM1MWU2MWU2MWM0NDlmN2E1
ZDY3MzZmODg5NTgyOGQ3ZjAwMWVmMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BV
L1RleHR1cmUuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLmgKQEAgLTUxLDYg
KzUxLDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlc3Ryb3koKTsKICAgICB2b2lkIHNldExhYmVs
KFN0cmluZyYmKTsKIAorICAgIHN0YXRpYyB1aW50MzJfdCB0ZXhlbEJsb2NrV2lkdGgoV0dQVVRl
eHR1cmVGb3JtYXQpOworICAgIHN0YXRpYyB1aW50MzJfdCB0ZXhlbEJsb2NrSGVpZ2h0KFdHUFVU
ZXh0dXJlRm9ybWF0KTsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gdGV4ZWxC
bG9ja1NpemUoV0dQVVRleHR1cmVGb3JtYXQpOworICAgIHN0YXRpYyBib29sIGlzRGVwdGhPclN0
ZW5jaWxGb3JtYXQoV0dQVVRleHR1cmVGb3JtYXQpOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PFdHUFVUZXh0dXJlRm9ybWF0PiBzdGVuY2lsT25seUFzcGVjdEZvcm1hdChXR1BVVGV4dHVyZUZv
cm1hdCk7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V0dQVVRleHR1cmVGb3JtYXQ+IGRlcHRo
T25seUFzcGVjdEZvcm1hdChXR1BVVGV4dHVyZUZvcm1hdCk7CisKKyAgICBXR1BVRXh0ZW50M0Qg
bG9naWNhbFRleHR1cmVTdWJyZXNvdXJjZUV4dGVudCh1aW50MzJfdCBtaXBMZXZlbCk7CisgICAg
V0dQVUV4dGVudDNEIHBoeXNpY2FsVGV4dHVyZVN1YnJlc291cmNlRXh0ZW50KHVpbnQzMl90IG1p
cExldmVsKTsKKwogICAgIGlkPE1UTFRleHR1cmU+IHRleHR1cmUoKSBjb25zdCB7IHJldHVybiBt
X3RleHR1cmU7IH0KICAgICBjb25zdCBXR1BVVGV4dHVyZURlc2NyaXB0b3ImIGRlc2NyaXB0b3Io
KSBjb25zdCB7IHJldHVybiBtX2Rlc2NyaXB0b3I7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkdQVS9XZWJHUFUvVGV4dHVyZS5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmUubW0K
aW5kZXggOGY1NGZjZDdjMTg4MzkzZmQ2Y2I1YTQ2N2Q5ZTQ0NjY2OTc3OTJiMi4uM2I2YTU1YjM2
OTFmYzRlNTEyNmJhZmFlMTZjYjI5MzI0MDNkMDNmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQ
VS9XZWJHUFUvVGV4dHVyZS5tbQorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLm1t
CkBAIC0zMyw2ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJHUFUgewogCitzdGF0aWMgc3RkOjpv
cHRpb25hbDxNVExQaXhlbEZvcm1hdD4gcGl4ZWxGb3JtYXQoV0dQVVRleHR1cmVGb3JtYXQpOwor
CiBzdGF0aWMgc3RkOjpvcHRpb25hbDxXR1BVRmVhdHVyZU5hbWU+IGZlYXR1cmVSZXF1aXJlbWVu
dEZvckZvcm1hdChXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQpCiB7CiAgICAgc3dpdGNoIChmb3Jt
YXQpIHsKQEAgLTI0Nyw3ICsyNDksNyBAQCBzdGF0aWMgYm9vbCBpc0NvbXByZXNzZWRGb3JtYXQo
V0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0KQogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgaXNEZXB0
aE9yU3RlbmNpbEZvcm1hdChXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQpCitib29sIFRleHR1cmU6
OmlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0KQogewogICAg
IC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2RlcHRoLWZvcm1hdHMKICAgICAv
LyAiQSBkZXB0aC1vci1zdGVuY2lsIGZvcm1hdCBpcyBhbnkgZm9ybWF0IHdpdGggZGVwdGggYW5k
L29yIHN0ZW5jaWwgYXNwZWN0cy4iCkBAIC0zNTQsNyArMzU2LDcgQEAgc3RhdGljIGJvb2wgaXNE
ZXB0aE9yU3RlbmNpbEZvcm1hdChXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQpCiAgICAgfQogfQog
Ci1zdGF0aWMgdWludDMyX3QgdGV4ZWxCbG9ja1dpZHRoKFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1h
dCkKK3VpbnQzMl90IFRleHR1cmU6OnRleGVsQmxvY2tXaWR0aChXR1BVVGV4dHVyZUZvcm1hdCBm
b3JtYXQpCiB7CiAgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jdGV4ZWwt
YmxvY2std2lkdGgKICAgICBzd2l0Y2ggKGZvcm1hdCkgewpAQCAtNDY4LDcgKzQ3MCw3IEBAIHN0
YXRpYyB1aW50MzJfdCB0ZXhlbEJsb2NrV2lkdGgoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0KQog
ICAgIH0KIH0KIAotc3RhdGljIHVpbnQzMl90IHRleGVsQmxvY2tIZWlnaHQoV0dQVVRleHR1cmVG
b3JtYXQgZm9ybWF0KQordWludDMyX3QgVGV4dHVyZTo6dGV4ZWxCbG9ja0hlaWdodChXR1BVVGV4
dHVyZUZvcm1hdCBmb3JtYXQpCiB7CiAgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dw
dXdlYi8jdGV4ZWwtYmxvY2staGVpZ2h0CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKQEAgLTU4Nyw2
ICs1ODksMTM3IEBAIHN0YXRpYyB1aW50MzJfdCB0ZXhlbEJsb2NrSGVpZ2h0KFdHUFVUZXh0dXJl
Rm9ybWF0IGZvcm1hdCkKICAgICB9CiB9CiAKK3N0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IFRleHR1
cmU6OnRleGVsQmxvY2tTaXplKFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCkKK3sKKyAgICBzd2l0
Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfVW5kZWZpbmVkOgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9SOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjhT
bm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4VWludDoKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X1I4U2ludDoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9SMTZVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjE2U2ludDoK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IxNkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfUkc4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhTbm9ybToK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9SRzhTaW50OgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X1IzMkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjMyVWludDoKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IzMlNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SRzE2VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMTZTaW50OgorICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkcxNkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfUkdCQThVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4VW5vcm1T
cmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQThTbm9ybToKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X1JHQkE4VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JH
QkE4U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JHUkE4VW5vcm06CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9CR1JBOFVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X1JHQjEwQTJVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMTFCMTBV
ZmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0I5RTVVZmxvYXQ6CisgICAgICAg
IHJldHVybiA0OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkczMkZsb2F0OgorICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfUkczMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9SRzMyU2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkExNlVpbnQ6CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMTZTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfUkdCQTE2RmxvYXQ6CisgICAgICAgIHJldHVybiA4OworICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfUkdCQTMyRmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJV
aW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTMyU2ludDoKKyAgICAgICAgcmV0
dXJuIDE2OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfU3RlbmNpbDg6CisgICAgICAgIHJl
dHVybiAxOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgxNlVub3JtOgorICAgICAg
ICByZXR1cm4gMjsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRQbHVzOgorICAg
ICAgICBBU1NFUlQocGl4ZWxGb3JtYXQoZm9ybWF0KSA9PSBNVExQaXhlbEZvcm1hdERlcHRoMzJG
bG9hdCk7CisgICAgICAgIHJldHVybiA0OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVw
dGgyNFBsdXNTdGVuY2lsODoKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRVbm9ybVN0ZW5jaWw4OgorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0Ogor
ICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMzJGbG9h
dFN0ZW5jaWw4OgorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfQkMxUkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMx
UkdCQVVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9CQzJSR0JBVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzJSR0JBVW5v
cm1TcmdiOgorICAgICAgICByZXR1cm4gODsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JD
M1JHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybVNyZ2I6
CisgICAgICAgIHJldHVybiAxNjsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNFJVbm9y
bToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNFJTbm9ybToKKyAgICAgICAgcmV0dXJu
IDg7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzVSR1Vub3JtOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfQkM1UkdTbm9ybToKKyAgICAgICAgcmV0dXJuIDE2OworICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfQkM2SFJHQlVmbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0JDNkhSR0JGbG9hdDoKKyAgICAgICAgcmV0dXJuIDE2OworICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfQkM3UkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM3UkdC
QVVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIDE2OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfRVRDMlJHQjhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4VW5v
cm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhBMVVub3JtOgorICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhBMVVub3JtU3JnYjoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0VUQzJSR0JBOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfRVRDMlJHQkE4VW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gODsKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X0VBQ1IxMVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFD
UjExU25vcm06CisgICAgICAgIHJldHVybiA4OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
RUFDUkcxMVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUkcxMVNub3JtOgor
ICAgICAgICByZXR1cm4gMTY7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNHg0VW5v
cm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNHg0VW5vcm1TcmdiOgorICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzV4NFVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM1
eDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM1eDVVbm9ybVNyZ2I6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng1VW5vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9BU1RDNng1VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QVNUQzZ4NlVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NlVub3JtU3Jn
YjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDVVbm9ybToKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEM4eDVVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9BU1RDOHg2VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg2VW5v
cm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4OFVub3JtOgorICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4OFVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0FTVEMxMHg1VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RD
MTB4NVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg2VW5vcm06
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NlVub3JtU3JnYjoKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9BU1RDMTB4OFVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMx
MHgxMFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDEwVW5vcm1Tcmdi
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEyeDEwVW5vcm06CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTBVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9BU1RDMTJ4MTJVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMx
MngxMlVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIDE2OworICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfRm9yY2UzMjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KK30KKwogc3RhdGljIGJvb2wgaXNSZW5kZXJhYmxlRm9ybWF0KFdHUFVU
ZXh0dXJlRm9ybWF0IGZvcm1hdCkKIHsKICAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8v
Z3B1d2ViLyNyZW5kZXJhYmxlLWZvcm1hdApAQCAtOTc4LDcgKzExMTEsNyBAQCBib29sIERldmlj
ZTo6dmFsaWRhdGVDcmVhdGVUZXh0dXJlKGNvbnN0IFdHUFVUZXh0dXJlRGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAvLyAiZGVzY3Jp
cHRvci5mb3JtYXQgbXVzdCBub3QgYmUgYSBjb21wcmVzc2VkIGZvcm1hdCBvciBkZXB0aC1vci1z
dGVuY2lsIGZvcm1hdC4iCi0gICAgICAgIGlmIChpc0NvbXByZXNzZWRGb3JtYXQoZGVzY3JpcHRv
ci5mb3JtYXQpIHx8IGlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoZGVzY3JpcHRvci5mb3JtYXQpKQor
ICAgICAgICBpZiAoaXNDb21wcmVzc2VkRm9ybWF0KGRlc2NyaXB0b3IuZm9ybWF0KSB8fCBUZXh0
dXJlOjppc0RlcHRoT3JTdGVuY2lsRm9ybWF0KGRlc2NyaXB0b3IuZm9ybWF0KSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXR1BVVGV4dHVyZURp
bWVuc2lvbl8yRDoKQEAgLTEwMDAsNyArMTEzMyw3IEBAIGJvb2wgRGV2aWNlOjp2YWxpZGF0ZUNy
ZWF0ZVRleHR1cmUoY29uc3QgV0dQVVRleHR1cmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIC8vICJkZXNjcmlwdG9yLmZvcm1hdCBt
dXN0IG5vdCBiZSBhIGNvbXByZXNzZWQgZm9ybWF0IG9yIGRlcHRoLW9yLXN0ZW5jaWwgZm9ybWF0
LiIKLSAgICAgICAgaWYgKGlzQ29tcHJlc3NlZEZvcm1hdChkZXNjcmlwdG9yLmZvcm1hdCkgfHwg
aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChkZXNjcmlwdG9yLmZvcm1hdCkpCisgICAgICAgIGlmIChp
c0NvbXByZXNzZWRGb3JtYXQoZGVzY3JpcHRvci5mb3JtYXQpIHx8IFRleHR1cmU6OmlzRGVwdGhP
clN0ZW5jaWxGb3JtYXQoZGVzY3JpcHRvci5mb3JtYXQpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uX0ZvcmNl
MzI6CkBAIC0xMDA4LDExICsxMTQxLDExIEBAIGJvb2wgRGV2aWNlOjp2YWxpZGF0ZUNyZWF0ZVRl
eHR1cmUoY29uc3QgV0dQVVRleHR1cmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogICAgIH0KIAog
ICAgIC8vICJkZXNjcmlwdG9yLnNpemUud2lkdGggbXVzdCBiZSBtdWx0aXBsZSBvZiB0ZXhlbCBi
bG9jayB3aWR0aC4iCi0gICAgaWYgKGRlc2NyaXB0b3Iuc2l6ZS53aWR0aCAlIHRleGVsQmxvY2tX
aWR0aChkZXNjcmlwdG9yLmZvcm1hdCkpCisgICAgaWYgKGRlc2NyaXB0b3Iuc2l6ZS53aWR0aCAl
IFRleHR1cmU6OnRleGVsQmxvY2tXaWR0aChkZXNjcmlwdG9yLmZvcm1hdCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIC8vICJkZXNjcmlwdG9yLnNpemUuaGVpZ2h0IG11c3QgYmUgbXVs
dGlwbGUgb2YgdGV4ZWwgYmxvY2sgaGVpZ2h0LiIKLSAgICBpZiAoZGVzY3JpcHRvci5zaXplLmhl
aWdodCAlIHRleGVsQmxvY2tIZWlnaHQoZGVzY3JpcHRvci5mb3JtYXQpKQorICAgIGlmIChkZXNj
cmlwdG9yLnNpemUuaGVpZ2h0ICUgVGV4dHVyZTo6dGV4ZWxCbG9ja0hlaWdodChkZXNjcmlwdG9y
LmZvcm1hdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vICJJZiBkZXNjcmlwdG9y
LnNhbXBsZUNvdW50ID4gMToiCkBAIC0xNDI0LDYgKzE1NTcsNzkgQEAgdm9pZCBUZXh0dXJlOjpz
ZXRMYWJlbChTdHJpbmcmJiBsYWJlbCkKICAgICBtX3RleHR1cmUubGFiZWwgPSBsYWJlbDsKIH0K
IAorV0dQVUV4dGVudDNEIFRleHR1cmU6OmxvZ2ljYWxUZXh0dXJlU3VicmVzb3VyY2VFeHRlbnQo
dWludDMyX3QgbWlwTGV2ZWwpCit7CisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dw
dXdlYi8jYWJzdHJhY3Qtb3BkZWYtbG9naWNhbC10ZXh0dXJlLXN1YnJlc291cmNlLWV4dGVudAor
CisgICAgc3dpdGNoIChtX2Rlc2NyaXB0b3IuZGltZW5zaW9uKSB7CisgICAgY2FzZSBXR1BVVGV4
dHVyZURpbWVuc2lvbl8xRDoKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIC8vICJTZXQg
ZXh0ZW50LndpZHRoIHRvIG1heCgxLCBkZXNjcmlwdG9yLnNpemUud2lkdGgg4omrIG1pcExldmVs
KS4iCisgICAgICAgICAgICBzdGQ6Om1heChzdGF0aWNfY2FzdDx1aW50MzJfdD4oMSksIG1fZGVz
Y3JpcHRvci5zaXplLndpZHRoID4+IG1pcExldmVsKSwKKyAgICAgICAgICAgIC8vICJTZXQgZXh0
ZW50LmhlaWdodCB0byAxLiIKKyAgICAgICAgICAgIDEsCisgICAgICAgICAgICAvLyAiU2V0IGV4
dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgdG8gMS4iCisgICAgICAgICAgICAxIH07CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8yRDoKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
IC8vICJTZXQgZXh0ZW50LndpZHRoIHRvIG1heCgxLCBkZXNjcmlwdG9yLnNpemUud2lkdGgg4omr
IG1pcExldmVsKS4iCisgICAgICAgICAgICBzdGQ6Om1heChzdGF0aWNfY2FzdDx1aW50MzJfdD4o
MSksIG1fZGVzY3JpcHRvci5zaXplLndpZHRoID4+IG1pcExldmVsKSwKKyAgICAgICAgICAgIC8v
ICJTZXQgZXh0ZW50LmhlaWdodCB0byBtYXgoMSwgZGVzY3JpcHRvci5zaXplLmhlaWdodCDiiasg
bWlwTGV2ZWwpLiIKKyAgICAgICAgICAgIHN0ZDo6bWF4KHN0YXRpY19jYXN0PHVpbnQzMl90Pigx
KSwgbV9kZXNjcmlwdG9yLnNpemUuaGVpZ2h0ID4+IG1pcExldmVsKSwKKyAgICAgICAgICAgIC8v
ICJTZXQgZXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyB0byAxLiIKKyAgICAgICAgICAgIDEgfTsK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzNEOgorICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgLy8gIlNldCBleHRlbnQud2lkdGggdG8gbWF4KDEsIGRlc2NyaXB0b3Iuc2l6ZS53
aWR0aCDiiasgbWlwTGV2ZWwpLiIKKyAgICAgICAgICAgIHN0ZDo6bWF4KHN0YXRpY19jYXN0PHVp
bnQzMl90PigxKSwgbV9kZXNjcmlwdG9yLnNpemUud2lkdGggPj4gbWlwTGV2ZWwpLAorICAgICAg
ICAgICAgLy8gIlNldCBleHRlbnQuaGVpZ2h0IHRvIG1heCgxLCBkZXNjcmlwdG9yLnNpemUuaGVp
Z2h0IOKJqyBtaXBMZXZlbCkuIgorICAgICAgICAgICAgc3RkOjptYXgoc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KDEpLCBtX2Rlc2NyaXB0b3Iuc2l6ZS5oZWlnaHQgPj4gbWlwTGV2ZWwpLAorICAgICAg
ICAgICAgLy8gIlNldCBleHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzIHRvIG1heCgxLCBkZXNjcmlw
dG9yLnNpemUuZGVwdGhPckFycmF5TGF5ZXJzIOKJqyBtaXBMZXZlbCkuIgorICAgICAgICAgICAg
c3RkOjptYXgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEpLCBtX2Rlc2NyaXB0b3Iuc2l6ZS5kZXB0
aE9yQXJyYXlMYXllcnMgPj4gbWlwTGV2ZWwpIH07CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVu
c2lvbl9Gb3JjZTMyOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIFdHUFVFeHRlbnQzRCB7IH07CisgICAgfQorfQorCitXR1BVRXh0ZW50M0QgVGV4dHVyZTo6
cGh5c2ljYWxUZXh0dXJlU3VicmVzb3VyY2VFeHRlbnQodWludDMyX3QgbWlwTGV2ZWwpCit7Cisg
ICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jYWJzdHJhY3Qtb3BkZWYtcGh5
c2ljYWwtdGV4dHVyZS1zdWJyZXNvdXJjZS1leHRlbnQKKworICAgIC8vICJMZXQgbG9naWNhbEV4
dGVudCBiZSBMb2dpY2FsIHRleHR1cmUgc3VicmVzb3VyY2UgZXh0ZW50KGRlc2NyaXB0b3IsIG1p
cExldmVsKS4iCisgICAgYXV0byBsb2dpY2FsRXh0ZW50ID0gbG9naWNhbFRleHR1cmVTdWJyZXNv
dXJjZUV4dGVudChtaXBMZXZlbCk7CisKKyAgICBzd2l0Y2ggKG1fZGVzY3JpcHRvci5kaW1lbnNp
b24pIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzFEOgorICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgLy8gIlNldCBleHRlbnQud2lkdGggdG8gbG9naWNhbEV4dGVudC53aWR0
aCByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIGRlc2NyaXB0b3LigJlzIHRl
eGVsIGJsb2NrIHdpZHRoLiIKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2YodGV4ZWxCbG9ja1dpZHRoKG1fZGVzY3JpcHRvci5mb3JtYXQp
LCBsb2dpY2FsRXh0ZW50LndpZHRoKSksCisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5oZWln
aHQgdG8gMS4iCisgICAgICAgICAgICAxLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuZGVw
dGhPckFycmF5TGF5ZXJzIHRvIDEuIgorICAgICAgICAgICAgMSB9OworICAgIGNhc2UgV0dQVVRl
eHR1cmVEaW1lbnNpb25fMkQ6CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAvLyAiU2V0
IGV4dGVudC53aWR0aCB0byBsb2dpY2FsRXh0ZW50LndpZHRoIHJvdW5kZWQgdXAgdG8gdGhlIG5l
YXJlc3QgbXVsdGlwbGUgb2YgZGVzY3JpcHRvcuKAmXMgdGV4ZWwgYmxvY2sgd2lkdGguIgorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZih0
ZXhlbEJsb2NrV2lkdGgobV9kZXNjcmlwdG9yLmZvcm1hdCksIGxvZ2ljYWxFeHRlbnQud2lkdGgp
KSwKKyAgICAgICAgICAgIC8vICJTZXQgZXh0ZW50LmhlaWdodCB0byBsb2dpY2FsRXh0ZW50Lmhl
aWdodCByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIGRlc2NyaXB0b3LigJlz
IHRleGVsIGJsb2NrIGhlaWdodC4iCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHRleGVsQmxvY2tIZWlnaHQobV9kZXNjcmlwdG9yLmZv
cm1hdCksIGxvZ2ljYWxFeHRlbnQuaGVpZ2h0KSksCisgICAgICAgICAgICAvLyAiU2V0IGV4dGVu
dC5kZXB0aE9yQXJyYXlMYXllcnMgdG8gMS4iCisgICAgICAgICAgICAxIH07CisgICAgY2FzZSBX
R1BVVGV4dHVyZURpbWVuc2lvbl8zRDoKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIC8v
ICJTZXQgZXh0ZW50LndpZHRoIHRvIGxvZ2ljYWxFeHRlbnQud2lkdGggcm91bmRlZCB1cCB0byB0
aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiBkZXNjcmlwdG9y4oCZcyB0ZXhlbCBibG9jayB3aWR0aC4i
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mKHRleGVsQmxvY2tXaWR0aChtX2Rlc2NyaXB0b3IuZm9ybWF0KSwgbG9naWNhbEV4dGVudC53
aWR0aCkpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuaGVpZ2h0IHRvIGxvZ2ljYWxFeHRl
bnQuaGVpZ2h0IHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgZGVzY3JpcHRv
cuKAmXMgdGV4ZWwgYmxvY2sgaGVpZ2h0LiIKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQz
Ml90PihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2YodGV4ZWxCbG9ja0hlaWdodChtX2Rlc2NyaXB0
b3IuZm9ybWF0KSwgbG9naWNhbEV4dGVudC5oZWlnaHQpKSwKKyAgICAgICAgICAgIC8vICJTZXQg
ZXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyB0byBsb2dpY2FsRXh0ZW50LmhlaWdodC4iCisgICAg
ICAgICAgICBsb2dpY2FsRXh0ZW50LmhlaWdodCB9OworICAgIGNhc2UgV0dQVVRleHR1cmVEaW1l
bnNpb25fRm9yY2UzMjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBXR1BVRXh0ZW50M0QgeyB9OworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViR1BV
CiAKICNwcmFnbWEgbWFyayBXR1BVIFN0dWJzCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>455825</attachid>
            <date>2022-03-25 21:41:09 -0700</date>
            <delta_ts>2022-03-27 10:50:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-238367-20220325214108.patch</filename>
            <type>text/plain</type>
            <size>70478</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxOTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCmluZGV4IGM1NjEwYTBlNzRjOGQwYjAx
ZTc4YTI3ZTg2N2FmMGIyOTQ3YzdlMzUuLjEwM2VmMTI1YmY4ZDM4ZmQ5YjUwODg5NmUxZmFlM2U2
Y2FmNjdlYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMgQEAKKzIwMjItMDMtMjUgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViR1BVXSBJbXBs
ZW1lbnQgcmVzb3VyY2UgY29weWluZyByb3V0aW5lcyBhY2NvcmRpbmcgdG8gdGhlIHNwZWMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzODM2NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
aW1wbGVtZW50cyAzIHJlc291cmNlIGNvcHkgcm91dGluZXM6CisgICAgICAgIC0gY29weUJ1ZmZl
clRvVGV4dHVyZSgpCisgICAgICAgIC0gY29weVRleHR1cmVUb0J1ZmZlcigpCisgICAgICAgIC0g
Y29weVRleHR1cmVUb1RleHR1cmUoKQorICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgYWxs
IDMgYXQgb25jZSwgYmVjYXVzZSB0aGV5IGFsbCB1c2UgdGhlIHNhbWUgc2hhcmVkIGhlbHBlciBm
dW5jdGlvbnMuCisKKyAgICAgICAgVGhlc2UgYXJlIGFjdHVhbGx5IHN1cnByaXNpbmdseSBjb21w
bGljYXRlZCwgZm9yIGEgZmV3IHJlYXNvbnM6CisgICAgICAgIC0gVGV4dHVyZXMgY2FuIGJlIDEt
ZGltZW5zaW9uYWwsIDItZGltZW5zaW9uYWwsIG9yIDMtZGltZW5zaW9uYWwKKyAgICAgICAgLSBU
ZXh0dXJlcyBoYXZlIG1pcG1hcHMsIGFuZCB0aGUgc2l6ZSBvZiBlYWNoIG1pcG1hcCBpcyBkaWZm
ZXJlbnQKKyAgICAgICAgLSBUaGVyZSBhcmUgZGVwdGggdGV4dHVyZXMsIHN0ZW5jaWwgdGV4dHVy
ZXMsIGFuZCBkZXB0aC1zdGVuY2lsIHRleHR1cmVzLCBhbmQgY29weWluZworICAgICAgICAgICAg
ICBoYXMgdG8gd29yayB3aXRoIHRoZSBjb3JyZWN0ICJhc3BlY3QuIgorICAgICAgICAtIERlcGVu
ZGluZyBvbiB0aGUgdGV4dHVyZSBmb3JtYXQsIGFuIGluZGl2aWR1YWwgdGV4ZWwgbWF5IG5vdCBi
ZSBkaXJlY3RseSBhZGRyZXNzYWJsZS4KKyAgICAgICAgICAgICAgQ29tcHJlc3NlZCB0ZXh0dXJl
IGZvcm1hdHMgZW5jb2RlIGFuIGVudGlyZSBibG9jayAoZS5nLiA0eDQgb3IgOHg4KSBvZiBwaXhl
bHMgd2l0aAorICAgICAgICAgICAgICBhIHNpbmdsZSBpbmRpdmlzaWJsZSBjaHVuayBvZiBkYXRh
LgorICAgICAgICAtIENvcHlpbmcgZnJvbSBhIHJlZ2lvbiBvZiBhICJzdWJyZXNvdXJjZSIgdG8g
YSBkaWZmZXJlbnQgcmVnaW9uIG9mIHRoZSBzYW1lICJzdWJyZXNvdXJjZSIKKyAgICAgICAgICAg
ICAgaXMgZm9yYmlkZGVuLiBTbywgd2UgaGF2ZSB0byBoYXZlIGEgY29uY2VwdCBvZiAic3VicmVz
b3VyY2UiIHRvIHZhbGlkYXRlIHRoZXkgYXJlbid0CisgICAgICAgICAgICAgIGludGVyc2VjdGlu
Zy4KKyAgICAgICAgLSBBIHNpbmdsZSBvcGVyYXRpb24gaXMgc3VwcG9zZWQgdG8gYmUgYWJsZSB0
byBjb3B5IG11bHRpcGxlIHNsaWNlcyBvZiBhbiBhcnJheSB0ZXh0dXJlLAorICAgICAgICAgICAg
ICBidXQgTWV0YWwgb25seSBoYXMgZmFjaWxpdGllcyB0byBjb3B5IGEgc2luZ2xlIHNsaWNlIGF0
IGEgdGltZS4gV2UgdGhlcmVmb3JlIGhhdmUgdG8KKyAgICAgICAgICAgICAgY2FsbCBNZXRhbCBp
biBhIGxvb3AgdG8gY29weSBhbGwgdGhlIG5lY2Vzc2FyeSBzbGljZXMuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBsaW5rcyB0byB0aGUgc3BlYyB3aGVyZSByZWxldmFudCwgYW5kIHF1b3RlcyB0aGUg
c3BlYyBpbiBjb21tZW50cyB3aGVyZSByZWxldmFudC4KKworICAgICAgICBUZXN0czogYXBpL29w
ZXJhdGlvbi9jb21tYW5kX2J1ZmZlci9pbWFnZV9jb3B5LnNwZWMudHMKKyAgICAgICAgICAgICAg
IGFwaS92YWxpZGF0aW9uL2VuY29kaW5nL2NtZHMvYnVmZmVyX3RleHR1cmVfY29waWVzLnNwZWMu
dHMKKyAgICAgICAgICAgICAgIGFwaS92YWxpZGF0aW9uL2ltYWdlX2NvcHkvaW1hZ2VfY29weS50
cworCisgICAgICAgICogV2ViR1BVL0JpbmRHcm91cC5tbToKKyAgICAgICAgKFdlYkdQVTo6RGV2
aWNlOjpjcmVhdGVCaW5kR3JvdXApOgorICAgICAgICAqIFdlYkdQVS9Db21tYW5kRW5jb2Rlci5t
bToKKyAgICAgICAgKFdlYkdQVTo6Q29tbWFuZEVuY29kZXI6OmNvcHlCdWZmZXJUb0J1ZmZlcik6
CisgICAgICAgIChXZWJHUFU6OnZhbGlkYXRlSW1hZ2VDb3B5QnVmZmVyKToKKyAgICAgICAgKFdl
YkdQVTo6aW1hZ2VDb3B5VGV4dHVyZVN1YnJlc291cmNlU2l6ZSk6CisgICAgICAgIChXZWJHUFU6
OnZhbGlkYXRlSW1hZ2VDb3B5VGV4dHVyZSk6CisgICAgICAgIChXZWJHUFU6OmlzVmFsaWRJbWFn
ZUNvcHlEZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJHUFU6OnZhbGlkYXRlVGV4dHVyZUNvcHlS
YW5nZSk6CisgICAgICAgIChXZWJHUFU6OnZhbGlkYXRlTGluZWFyVGV4dHVyZURhdGEpOgorICAg
ICAgICAoV2ViR1BVOjp2YWxpZGF0ZUNvcHlCdWZmZXJUb1RleHR1cmUpOgorICAgICAgICAoV2Vi
R1BVOjpDb21tYW5kRW5jb2Rlcjo6Y29weUJ1ZmZlclRvVGV4dHVyZSk6CisgICAgICAgIChXZWJH
UFU6OnZhbGlkYXRlQ29weVRleHR1cmVUb0J1ZmZlcik6CisgICAgICAgIChXZWJHUFU6OkNvbW1h
bmRFbmNvZGVyOjpjb3B5VGV4dHVyZVRvQnVmZmVyKToKKyAgICAgICAgKFdlYkdQVTo6aXNTUkdC
Q29tcGF0aWJsZSk6CisgICAgICAgIChXZWJHUFU6OmFyZUNvcHlDb21wYXRpYmxlKToKKyAgICAg
ICAgKFdlYkdQVTo6dmFsaWRhdGVDb3B5VGV4dHVyZVRvVGV4dHVyZSk6CisgICAgICAgIChXZWJH
UFU6OkNvbW1hbmRFbmNvZGVyOjpjb3B5VGV4dHVyZVRvVGV4dHVyZSk6CisgICAgICAgICogV2Vi
R1BVL0NvbXB1dGVQaXBlbGluZS5tbToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVD
b21wdXRlUGlwZWxpbmUpOgorICAgICAgICAqIFdlYkdQVS9QaXBlbGluZUxheW91dC5tbToKKyAg
ICAgICAgKFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVQaXBlbGluZUxheW91dCk6CisgICAgICAgICog
V2ViR1BVL1NoYWRlck1vZHVsZS5tbToKKyAgICAgICAgKFdlYkdQVTo6ZWFybHlDb21waWxlU2hh
ZGVyTW9kdWxlKToKKyAgICAgICAgKiBXZWJHUFUvVGV4dHVyZS5oOgorICAgICAgICAqIFdlYkdQ
VS9UZXh0dXJlLm1tOgorICAgICAgICAoV2ViR1BVOjpUZXh0dXJlOjppc0RlcHRoT3JTdGVuY2ls
Rm9ybWF0KToKKyAgICAgICAgKFdlYkdQVTo6VGV4dHVyZTo6dGV4ZWxCbG9ja1dpZHRoKToKKyAg
ICAgICAgKFdlYkdQVTo6VGV4dHVyZTo6dGV4ZWxCbG9ja0hlaWdodCk6CisgICAgICAgIChXZWJH
UFU6OlRleHR1cmU6OnRleGVsQmxvY2tTaXplKToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjp2
YWxpZGF0ZUNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViR1BVOjpUZXh0dXJlOjpwaHlzaWNh
bFNpemUpOgorICAgICAgICAoV2ViR1BVOjppc0RlcHRoT3JTdGVuY2lsRm9ybWF0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkdQVTo6dGV4ZWxCbG9ja1dpZHRoKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkdQVTo6dGV4ZWxCbG9ja0hlaWdodCk6IERlbGV0ZWQuCisKIDIwMjItMDMtMjUgIE15bGVz
IEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViR1BVXSBS
ZW1vdmUgZGVmYXVsdDogZnJvbSBzd2l0Y2ggc3RhdGVtZW50cywgaW4gZmF2b3Igb2YgZXhoYXVz
dGl2ZWx5IGxpc3RpbmcgYWxsIGNhc2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQ
VS9CaW5kR3JvdXAubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9CaW5kR3JvdXAubW0KaW5kZXgg
NjNhZWNiYWZkN2NhZWU1NDM3M2E4NTBhODkzZDI1NDYwYzM0NDJjMi4uY2Q5ZjYwNzYyYTA3NWQ1
MzliOTYxY2FhNjNmMjQ4NjE5ZmJiMWY2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJH
UFUvQmluZEdyb3VwLm1tCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0JpbmRHcm91cC5tbQpA
QCAtNTUsNyArNTUsNyBAQCBSZWZQdHI8QmluZEdyb3VwPiBEZXZpY2U6OmNyZWF0ZUJpbmRHcm91
cChjb25zdCBXR1BVQmluZEdyb3VwRGVzY3JpcHRvciYgZGVzY3JpcAogICAgIGlmIChkZXNjcmlw
dG9yLm5leHRJbkNoYWluKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGNvbnN0IEJp
bmRHcm91cExheW91dCYgYmluZEdyb3VwTGF5b3V0ID0gV2ViR1BVOjpmcm9tQVBJKGRlc2NyaXB0
b3IubGF5b3V0KTsKKyAgICBjb25zdCBCaW5kR3JvdXBMYXlvdXQmIGJpbmRHcm91cExheW91dCA9
IGZyb21BUEkoZGVzY3JpcHRvci5sYXlvdXQpOwogCiAgICAgLy8gRklYTUUoUEVSRk9STUFOQ0Up
OiBEb24ndCBhbGxvY2F0ZSAzIG5ldyBidWZmZXJzIGZvciBldmVyeSBiaW5kIGdyb3VwLgogICAg
IC8vIEluIGZhY3QsIGRvbid0IGV2ZW4gYWxsb2NhdGUgYSBzaW5nbGUgbmV3IGJ1ZmZlciBmb3Ig
ZXZlcnkgYmluZCBncm91cC4KQEAgLTkwLDE4ICs5MCwxOCBAQCBSZWZQdHI8QmluZEdyb3VwPiBE
ZXZpY2U6OmNyZWF0ZUJpbmRHcm91cChjb25zdCBXR1BVQmluZEdyb3VwRGVzY3JpcHRvciYgZGVz
Y3JpcAogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgaWYgKGJ1ZmZlcklz
UHJlc2VudCkgewotICAgICAgICAgICAgaWQ8TVRMQnVmZmVyPiBidWZmZXIgPSBXZWJHUFU6OmZy
b21BUEkoZW50cnkuYnVmZmVyKS5idWZmZXIoKTsKKyAgICAgICAgICAgIGlkPE1UTEJ1ZmZlcj4g
YnVmZmVyID0gZnJvbUFQSShlbnRyeS5idWZmZXIpLmJ1ZmZlcigpOwogICAgICAgICAgICAgLy8g
RklYTUU6IFVzZSBjaGVja2VkIGNhc3RzLgogICAgICAgICAgICAgW3ZlcnRleEFyZ3VtZW50RW5j
b2RlciBzZXRCdWZmZXI6YnVmZmVyIG9mZnNldDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihlbnRy
eS5vZmZzZXQpIGF0SW5kZXg6ZW50cnkuYmluZGluZ107CiAgICAgICAgICAgICBbZnJhZ21lbnRB
cmd1bWVudEVuY29kZXIgc2V0QnVmZmVyOmJ1ZmZlciBvZmZzZXQ6c3RhdGljX2Nhc3Q8TlNVSW50
ZWdlcj4oZW50cnkub2Zmc2V0KSBhdEluZGV4OmVudHJ5LmJpbmRpbmddOwogICAgICAgICAgICAg
W2NvbXB1dGVBcmd1bWVudEVuY29kZXIgc2V0QnVmZmVyOmJ1ZmZlciBvZmZzZXQ6c3RhdGljX2Nh
c3Q8TlNVSW50ZWdlcj4oZW50cnkub2Zmc2V0KSBhdEluZGV4OmVudHJ5LmJpbmRpbmddOwogICAg
ICAgICB9IGVsc2UgaWYgKHNhbXBsZXJJc1ByZXNlbnQpIHsKLSAgICAgICAgICAgIGlkPE1UTFNh
bXBsZXJTdGF0ZT4gc2FtcGxlciA9IFdlYkdQVTo6ZnJvbUFQSShlbnRyeS5zYW1wbGVyKS5zYW1w
bGVyU3RhdGUoKTsKKyAgICAgICAgICAgIGlkPE1UTFNhbXBsZXJTdGF0ZT4gc2FtcGxlciA9IGZy
b21BUEkoZW50cnkuc2FtcGxlcikuc2FtcGxlclN0YXRlKCk7CiAgICAgICAgICAgICBbdmVydGV4
QXJndW1lbnRFbmNvZGVyIHNldFNhbXBsZXJTdGF0ZTpzYW1wbGVyIGF0SW5kZXg6ZW50cnkuYmlu
ZGluZ107CiAgICAgICAgICAgICBbZnJhZ21lbnRBcmd1bWVudEVuY29kZXIgc2V0U2FtcGxlclN0
YXRlOnNhbXBsZXIgYXRJbmRleDplbnRyeS5iaW5kaW5nXTsKICAgICAgICAgICAgIFtjb21wdXRl
QXJndW1lbnRFbmNvZGVyIHNldFNhbXBsZXJTdGF0ZTpzYW1wbGVyIGF0SW5kZXg6ZW50cnkuYmlu
ZGluZ107CiAgICAgICAgIH0gZWxzZSBpZiAodGV4dHVyZVZpZXdJc1ByZXNlbnQpIHsKLSAgICAg
ICAgICAgIGlkPE1UTFRleHR1cmU+IHRleHR1cmUgPSBXZWJHUFU6OmZyb21BUEkoZW50cnkudGV4
dHVyZVZpZXcpLnRleHR1cmUoKTsKKyAgICAgICAgICAgIGlkPE1UTFRleHR1cmU+IHRleHR1cmUg
PSBmcm9tQVBJKGVudHJ5LnRleHR1cmVWaWV3KS50ZXh0dXJlKCk7CiAgICAgICAgICAgICBbdmVy
dGV4QXJndW1lbnRFbmNvZGVyIHNldFRleHR1cmU6dGV4dHVyZSBhdEluZGV4OmVudHJ5LmJpbmRp
bmddOwogICAgICAgICAgICAgW2ZyYWdtZW50QXJndW1lbnRFbmNvZGVyIHNldFRleHR1cmU6dGV4
dHVyZSBhdEluZGV4OmVudHJ5LmJpbmRpbmddOwogICAgICAgICAgICAgW2NvbXB1dGVBcmd1bWVu
dEVuY29kZXIgc2V0VGV4dHVyZTp0ZXh0dXJlIGF0SW5kZXg6ZW50cnkuYmluZGluZ107CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21tYW5kRW5jb2Rlci5tbSBiL1NvdXJjZS9X
ZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLm1tCmluZGV4IDk2OThjOGEwOTlmZmQ2YzA5Mzc4
NDM5NGE4MTJjMTgyZjBlYjdkNWIuLjJlMjZlNzZhYmQyOWVlN2E2MmFlNmViNjUyZTUwYTYzMzFl
MzQyZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLm1t
CisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLm1tCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW1wb3J0ICJEZXZpY2UuaCIKICNpbXBvcnQgIlF1ZXJ5U2V0LmgiCiAjaW1wb3J0
ICJSZW5kZXJQYXNzRW5jb2Rlci5oIgorI2ltcG9ydCAiVGV4dHVyZS5oIgogCiBuYW1lc3BhY2Ug
V2ViR1BVIHsKIApAQCAtMTU1LDI4ICsxNTYsMTA3MSBAQCB2b2lkIENvbW1hbmRFbmNvZGVyOjpj
b3B5QnVmZmVyVG9CdWZmZXIoY29uc3QgQnVmZmVyJiBzb3VyY2UsIHVpbnQ2NF90IHNvdXJjZU9m
ZgogCiAgICAgZW5zdXJlQmxpdENvbW1hbmRFbmNvZGVyKCk7CiAKLSAgICBbbV9ibGl0Q29tbWFu
ZEVuY29kZXIgY29weUZyb21CdWZmZXI6c291cmNlLmJ1ZmZlcigpIHNvdXJjZU9mZnNldDpzdGF0
aWNfY2FzdDxOU1VJbnRlZ2VyPihzb3VyY2VPZmZzZXQpIHRvQnVmZmVyOmRlc3RpbmF0aW9uLmJ1
ZmZlcigpIGRlc3RpbmF0aW9uT2Zmc2V0OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KGRlc3RpbmF0
aW9uT2Zmc2V0KSBzaXplOnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNpemUpXTsKKyAgICBbbV9i
bGl0Q29tbWFuZEVuY29kZXIKKyAgICAgICAgY29weUZyb21CdWZmZXI6c291cmNlLmJ1ZmZlcigp
CisgICAgICAgIHNvdXJjZU9mZnNldDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzb3VyY2VPZmZz
ZXQpCisgICAgICAgIHRvQnVmZmVyOmRlc3RpbmF0aW9uLmJ1ZmZlcigpCisgICAgICAgIGRlc3Rp
bmF0aW9uT2Zmc2V0OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KGRlc3RpbmF0aW9uT2Zmc2V0KQor
ICAgICAgICBzaXplOnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNpemUpXTsKK30KKworc3RhdGlj
IGJvb2wgdmFsaWRhdGVJbWFnZUNvcHlCdWZmZXIoY29uc3QgV0dQVUltYWdlQ29weUJ1ZmZlciYg
aW1hZ2VDb3B5QnVmZmVyKQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3
ZWIvI2Fic3RyYWN0LW9wZGVmLXZhbGlkYXRpbmctZ3B1aW1hZ2Vjb3B5YnVmZmVyCisKKyAgICAv
LyBGSVhNRTogImltYWdlQ29weUJ1ZmZlci5idWZmZXIgbXVzdCBiZSBhIHZhbGlkIEdQVUJ1ZmZl
ci4iCisKKyAgICAvLyAiaW1hZ2VDb3B5QnVmZmVyLmJ5dGVzUGVyUm93IG11c3QgYmUgYSBtdWx0
aXBsZSBvZiAyNTYuIgorICAgIGlmIChpbWFnZUNvcHlCdWZmZXIubGF5b3V0LmJ5dGVzUGVyUm93
ICUgMjU2KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3N0YXRpYyBXR1BVRXh0ZW50M0QgaW1hZ2VDb3B5VGV4dHVyZVN1YnJlc291cmNlU2l6ZShjb25z
dCBXR1BVSW1hZ2VDb3B5VGV4dHVyZSYgaW1hZ2VDb3B5VGV4dHVyZSkKK3sKKyAgICAvLyBodHRw
czovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNpbWFnZWNvcHl0ZXh0dXJlLXN1YnJlc291cmNl
LXNpemUKKworICAgIC8vICJJdHMgd2lkdGgsIGhlaWdodCBhbmQgZGVwdGhPckFycmF5TGF5ZXJz
IGFyZSB0aGUgd2lkdGgsIGhlaWdodCwgYW5kIGRlcHRoLCByZXNwZWN0aXZlbHksIG9mIHRoZSBw
aHlzaWNhbCBzaXplIG9mIGltYWdlQ29weVRleHR1cmUudGV4dHVyZSBzdWJyZXNvdXJjZSBhdCBt
aXBtYXAgbGV2ZWwgaW1hZ2VDb3B5VGV4dHVyZS5taXBMZXZlbC4iCisgICAgcmV0dXJuIGZyb21B
UEkoaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlKS5waHlzaWNhbFRleHR1cmVTdWJyZXNvdXJjZUV4
dGVudChpbWFnZUNvcHlUZXh0dXJlLm1pcExldmVsKTsKK30KKworc3RhdGljIGJvb2wgdmFsaWRh
dGVJbWFnZUNvcHlUZXh0dXJlKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBpbWFnZUNvcHlU
ZXh0dXJlLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXplKQoreworICAgIC8vIGh0dHBzOi8v
Z3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2Fic3RyYWN0LW9wZGVmLXZhbGlkYXRpbmctZ3B1aW1h
Z2Vjb3B5dGV4dHVyZQorCisgICAgLy8gImJsb2NrV2lkdGggYmUgdGhlIHRleGVsIGJsb2NrIHdp
ZHRoIG9mIGltYWdlQ29weVRleHR1cmUudGV4dHVyZS5bW2Rlc2NyaXB0b3JdXS5mb3JtYXQuIgor
ICAgIGF1dG8gYmxvY2tXaWR0aCA9IFRleHR1cmU6OnRleGVsQmxvY2tXaWR0aChmcm9tQVBJKGlt
YWdlQ29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7CisKKyAgICAvLyAi
YmxvY2tIZWlnaHQgYmUgdGhlIHRleGVsIGJsb2NrIGhlaWdodCBvZiBpbWFnZUNvcHlUZXh0dXJl
LnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uZm9ybWF0LiIKKyAgICBhdXRvIGJsb2NrSGVpZ2h0ID0g
VGV4dHVyZTo6dGV4ZWxCbG9ja0hlaWdodChmcm9tQVBJKGltYWdlQ29weVRleHR1cmUudGV4dHVy
ZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7CisKKyAgICAvLyBGSVhNRTogImltYWdlQ29weVRleHR1
cmUudGV4dHVyZSBtdXN0IGJlIGEgdmFsaWQgR1BVVGV4dHVyZS4iCisKKyAgICAvLyAiaW1hZ2VD
b3B5VGV4dHVyZS5taXBMZXZlbCBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgW1tkZXNjcmlwdG9yXV0u
bWlwTGV2ZWxDb3VudCBvZiBpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUuIgorICAgIGlmIChpbWFn
ZUNvcHlUZXh0dXJlLm1pcExldmVsID49IGZyb21BUEkoaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJl
KS5kZXNjcmlwdG9yKCkubWlwTGV2ZWxDb3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gImltYWdlQ29weVRleHR1cmUub3JpZ2luLnggbXVzdCBiZSBhIG11bHRpcGxlIG9mIGJs
b2NrV2lkdGguIgorICAgIGlmIChpbWFnZUNvcHlUZXh0dXJlLm9yaWdpbi54ICUgYmxvY2tXaWR0
aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gImltYWdlQ29weVRleHR1cmUub3Jp
Z2luLnkgbXVzdCBiZSBhIG11bHRpcGxlIG9mIGJsb2NrSGVpZ2h0LiIKKyAgICBpZiAoaW1hZ2VD
b3B5VGV4dHVyZS5vcmlnaW4ueSAlIGJsb2NrSGVpZ2h0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyAiaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlLltbZGVzY3JpcHRvcl1dLmZvcm1h
dCBpcyBhIGRlcHRoLXN0ZW5jaWwgZm9ybWF0LiIKKyAgICAvLyAiaW1hZ2VDb3B5VGV4dHVyZS50
ZXh0dXJlLltbZGVzY3JpcHRvcl1dLnNhbXBsZUNvdW50IGlzIGdyZWF0ZXIgdGhhbiAxLiIKKyAg
ICBpZiAoVGV4dHVyZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChmcm9tQVBJKGltYWdlQ29weVRl
eHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCkKKyAgICAgICAgfHwgZnJvbUFQSShp
bWFnZUNvcHlUZXh0dXJlLnRleHR1cmUpLmRlc2NyaXB0b3IoKS5zYW1wbGVDb3VudCA+IDEpIHsK
KyAgICAgICAgLy8gIlRoZSBpbWFnZUNvcHlUZXh0dXJlIHN1YnJlc291cmNlIHNpemUgb2YgaW1h
Z2VDb3B5VGV4dHVyZSBpcyBlcXVhbCB0byBjb3B5U2l6ZSIKKyAgICAgICAgYXV0byBzdWJyZXNv
dXJjZVNpemUgPSBpbWFnZUNvcHlUZXh0dXJlU3VicmVzb3VyY2VTaXplKGltYWdlQ29weVRleHR1
cmUpOworICAgICAgICBpZiAoc3VicmVzb3VyY2VTaXplLndpZHRoICE9IGNvcHlTaXplLndpZHRo
CisgICAgICAgICAgICB8fCBzdWJyZXNvdXJjZVNpemUuaGVpZ2h0ICE9IGNvcHlTaXplLmhlaWdo
dAorICAgICAgICAgICAgfHwgc3VicmVzb3VyY2VTaXplLmRlcHRoT3JBcnJheUxheWVycyAhPSBj
b3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGlzVmFsaWRJbWFnZUNv
cHlEZXN0aW5hdGlvbihXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQsIFdHUFVUZXh0dXJlQXNwZWN0
IGFzcGVjdCkKK3sKKyAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNkZXB0
aC1mb3JtYXRzCisKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfVW5kZWZpbmVkOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjhVbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4U25vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9SOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SOFNpbnQ6CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9SMTZVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjE2
U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IxNkZsb2F0OgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfUkc4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhT
bm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFVpbnQ6CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9SRzhTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjMyRmxv
YXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMzJVaW50OgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfUjMyU2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMTZVaW50
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkcxNlNpbnQ6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9SRzE2RmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFVu
b3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQThVbm9ybVNyZ2I6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFNub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUkdCQThVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQThTaW50OgorICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkdSQThVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0JHUkE4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCMTBB
MlVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkcxMUIxMFVmbG9hdDoKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQjlFNVVmbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X1JHMzJGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMzJVaW50Ogor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkczMlNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9SR0JBMTZVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTE2U2lu
dDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkExNkZsb2F0OgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfUkdCQTMyRmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9S
R0JBMzJVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTMyU2ludDoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfU3RlbmNpbDg6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDE2VW5vcm06CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFBsdXM6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRQbHVzU3RlbmNp
bDg6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDI0VW5vcm1TdGVuY2lsODoKKyAg
ICAgICAgcmV0dXJuIGFzcGVjdCA9PSBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2lsT25seTsKKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMzJGbG9hdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0U3RlbmNpbDg6Cisg
ICAgICAgIHJldHVybiBhc3BlY3QgPT0gV0dQVVRleHR1cmVBc3BlY3RfU3RlbmNpbE9ubHk7Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QkMyUkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMyUkdCQVVub3JtU3Jn
YjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybToKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9CQzRSVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSU25vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzVSR1Vub3JtOgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfQkM1UkdTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDNkhSR0JV
ZmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzZIUkdCRmxvYXQ6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzdSR0JBVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9CQzdSR0JBVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJH
QjhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4VW5vcm1TcmdiOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhBMVVub3JtOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfRVRDMlJHQjhBMVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0VUQzJSR0JBOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJH
QkE4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUjExVW5vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FQUNSMTFTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0VBQ1JHMTFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JH
MTFTbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM0eDRVbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM0eDRVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9BU1RDNXg0VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RD
NXg0VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtU3JnYjoKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEM2eDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEM2eDVVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5v
cm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5vcm1TcmdiOgorICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzh4NVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4
eDZVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDZVbm9ybVNyZ2I6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9BU1RDOHg4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QVNUQzEweDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg1VW5vcm1T
cmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDZVbm9ybToKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg2VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfQVNUQzEweDhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMx
MHg4VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDEwVW5vcm06
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4MTBVbm9ybVNyZ2I6CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTBVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0FTVEMxMngxMFVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FT
VEMxMngxMlVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEyeDEyVW5vcm1T
cmdiOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9G
b3JjZTMyOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworc3RhdGljIGJvb2wgdmFsaWRhdGVUZXh0dXJlQ29weVJhbmdlKGNv
bnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBpbWFnZUNvcHlUZXh0dXJlLCBjb25zdCBXR1BVRXh0
ZW50M0QmIGNvcHlTaXplKQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3
ZWIvI3ZhbGlkYXRpbmctdGV4dHVyZS1jb3B5LXJhbmdlCisKKyAgICAvLyAiTGV0IGJsb2NrV2lk
dGggYmUgdGhlIHRleGVsIGJsb2NrIHdpZHRoIG9mIGltYWdlQ29weVRleHR1cmUudGV4dHVyZS5b
W2Rlc2NyaXB0b3JdXS5mb3JtYXQuIgorICAgIGF1dG8gYmxvY2tXaWR0aCA9IFRleHR1cmU6OnRl
eGVsQmxvY2tXaWR0aChmcm9tQVBJKGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRv
cigpLmZvcm1hdCk7CisKKyAgICAvLyAiTGV0IGJsb2NrSGVpZ2h0IGJlIHRoZSB0ZXhlbCBibG9j
ayBoZWlnaHQgb2YgaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlLltbZGVzY3JpcHRvcl1dLmZvcm1h
dC4iCisgICAgYXV0byBibG9ja0hlaWdodCA9IFRleHR1cmU6OnRleGVsQmxvY2tIZWlnaHQoZnJv
bUFQSShpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUpLmRlc2NyaXB0b3IoKS5mb3JtYXQpOworCisg
ICAgLy8gIkxldCBzdWJyZXNvdXJjZVNpemUgYmUgdGhlIGltYWdlQ29weVRleHR1cmUgc3VicmVz
b3VyY2Ugc2l6ZSBvZiBpbWFnZUNvcHlUZXh0dXJlLiIKKyAgICBhdXRvIHN1YnJlc291cmNlU2l6
ZSA9IGltYWdlQ29weVRleHR1cmVTdWJyZXNvdXJjZVNpemUoaW1hZ2VDb3B5VGV4dHVyZSk7CisK
KyAgICAvLyAiKGltYWdlQ29weVRleHR1cmUub3JpZ2luLnggKyBjb3B5U2l6ZS53aWR0aCkg4omk
IHN1YnJlc291cmNlU2l6ZS53aWR0aCIKKyAgICAvLyBGSVhNRTogVXNlZCBjaGVja2VkIGFyaXRo
bWV0aWMKKyAgICBpZiAoKGltYWdlQ29weVRleHR1cmUub3JpZ2luLnggKyBjb3B5U2l6ZS53aWR0
aCkgPiBzdWJyZXNvdXJjZVNpemUud2lkdGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vICIoaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4ueSArIGNvcHlTaXplLmhlaWdodCkg4omkIHN1
YnJlc291cmNlU2l6ZS5oZWlnaHQiCisgICAgLy8gRklYTUU6IFVzZWQgY2hlY2tlZCBhcml0aG1l
dGljCisgICAgaWYgKChpbWFnZUNvcHlUZXh0dXJlLm9yaWdpbi55ICsgY29weVNpemUuaGVpZ2h0
KSA+IHN1YnJlc291cmNlU2l6ZS5oZWlnaHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vICIoaW1hZ2VDb3B5VGV4dHVyZS5vcmlnaW4ueiArIGNvcHlTaXplLmRlcHRoT3JBcnJheUxh
eWVycykg4omkIHN1YnJlc291cmNlU2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMiCisgICAgLy8gRklY
TUU6IFVzZWQgY2hlY2tlZCBhcml0aG1ldGljCisgICAgaWYgKChpbWFnZUNvcHlUZXh0dXJlLm9y
aWdpbi56ICsgY29weVNpemUuZGVwdGhPckFycmF5TGF5ZXJzKSA+IHN1YnJlc291cmNlU2l6ZS5k
ZXB0aE9yQXJyYXlMYXllcnMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJjb3B5
U2l6ZS53aWR0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgYmxvY2tXaWR0aC4iCisgICAgaWYgKGNv
cHlTaXplLndpZHRoICUgYmxvY2tXaWR0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ly8gImNvcHlTaXplLmhlaWdodCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgYmxvY2tIZWlnaHQuIgor
ICAgIGlmIChjb3B5U2l6ZS5oZWlnaHQgJSBibG9ja0hlaWdodCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHZhbGlkYXRlTGluZWFy
VGV4dHVyZURhdGEoY29uc3QgV0dQVVRleHR1cmVEYXRhTGF5b3V0JiBsYXlvdXQsIHVpbnQ2NF90
IGJ5dGVTaXplLCBXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQsIFdHUFVFeHRlbnQzRCBjb3B5RXh0
ZW50KQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2Fic3RyYWN0
LW9wZGVmLXZhbGlkYXRpbmctbGluZWFyLXRleHR1cmUtZGF0YQorCisgICAgLy8gIkxldCBibG9j
a1dpZHRoLCBibG9ja0hlaWdodCwgYW5kIGJsb2NrU2l6ZSBiZSB0aGUgdGV4ZWwgYmxvY2sgd2lk
dGgsIGhlaWdodCwgYW5kIHNpemUgb2YgZm9ybWF0LiIKKyAgICBhdXRvIGJsb2NrV2lkdGggPSBU
ZXh0dXJlOjp0ZXhlbEJsb2NrV2lkdGgoZm9ybWF0KTsKKyAgICBhdXRvIGJsb2NrSGVpZ2h0ID0g
VGV4dHVyZTo6dGV4ZWxCbG9ja0hlaWdodChmb3JtYXQpOworICAgIGF1dG8gYmxvY2tTaXplID0g
VGV4dHVyZTo6dGV4ZWxCbG9ja1NpemUoZm9ybWF0KTsKKyAgICBpZiAoIWJsb2NrU2l6ZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gIkl0IGlzIGFzc3VtZWQgdGhhdCBjb3B5RXh0
ZW50LndpZHRoIGlzIGEgbXVsdGlwbGUgb2YgYmxvY2tXaWR0aCBhbmQgY29weUV4dGVudC5oZWln
aHQgaXMgYSBtdWx0aXBsZSBvZiBibG9ja0hlaWdodC4iCisKKyAgICAvLyAid2lkdGhJbkJsb2Nr
cyBiZSBjb3B5RXh0ZW50LndpZHRoIMO3IGJsb2NrV2lkdGguIgorICAgIGF1dG8gd2lkdGhJbkJs
b2NrcyA9IGNvcHlFeHRlbnQud2lkdGggLyBibG9ja1dpZHRoOworCisgICAgLy8gImhlaWdodElu
QmxvY2tzIGJlIGNvcHlFeHRlbnQuaGVpZ2h0IMO3IGJsb2NrSGVpZ2h0LiIKKyAgICBhdXRvIGhl
aWdodEluQmxvY2tzID0gY29weUV4dGVudC5oZWlnaHQgLyBibG9ja0hlaWdodDsKKworICAgIC8v
ICJieXRlc0luTGFzdFJvdyBiZSBibG9ja1NpemUgw5cgd2lkdGhJbkJsb2Nrcy4iCisgICAgLy8g
RklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMuCisgICAgYXV0byBieXRlc0luTGFzdFJvdyA9
ICpibG9ja1NpemUgKiB3aWR0aEluQmxvY2tzOworCisgICAgLy8gIklmIGhlaWdodEluQmxvY2tz
ID4gMSIKKyAgICBpZiAoaGVpZ2h0SW5CbG9ja3MgPiAxKSB7CisgICAgICAgIC8vICJsYXlvdXQu
Ynl0ZXNQZXJSb3cgbXVzdCBiZSBzcGVjaWZpZWQuIgorICAgICAgICBpZiAobGF5b3V0LmJ5dGVz
UGVyUm93ID09IFdHUFVfQ09QWV9TVFJJREVfVU5ERUZJTkVEKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIC8vICJJZiBjb3B5RXh0ZW50LmRlcHRoT3JBcnJheUxheWVy
cyA+IDEiCisgICAgaWYgKGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMSkgeworICAg
ICAgICAvLyAibGF5b3V0LmJ5dGVzUGVyUm93IGFuZCBsYXlvdXQucm93c1BlckltYWdlIG11c3Qg
YmUgc3BlY2lmaWVkLiIKKyAgICAgICAgaWYgKGxheW91dC5ieXRlc1BlclJvdyA9PSBXR1BVX0NP
UFlfU1RSSURFX1VOREVGSU5FRCB8fCBsYXlvdXQucm93c1BlckltYWdlID09IFdHUFVfQ09QWV9T
VFJJREVfVU5ERUZJTkVEKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IC8vICJJZiBzcGVjaWZpZWQiCisgICAgaWYgKGxheW91dC5ieXRlc1BlclJvdyAhPSBXR1BVX0NP
UFlfU1RSSURFX1VOREVGSU5FRCkgeworICAgICAgICAvLyAibGF5b3V0LmJ5dGVzUGVyUm93IG11
c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGJ5dGVzSW5MYXN0Um93LiIKKyAgICAgICAg
aWYgKGxheW91dC5ieXRlc1BlclJvdyA8PSBieXRlc0luTGFzdFJvdykKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyAiSWYgc3BlY2lmaWVkIgorICAgIGlmIChsYXlv
dXQucm93c1BlckltYWdlICE9IFdHUFVfQ09QWV9TVFJJREVfVU5ERUZJTkVEKSB7CisgICAgICAg
IC8vICJsYXlvdXQucm93c1BlckltYWdlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRv
IGhlaWdodEluQmxvY2tzLiIKKyAgICAgICAgaWYgKGxheW91dC5yb3dzUGVySW1hZ2UgPCBoZWln
aHRJbkJsb2NrcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyAi
TGV0IHJlcXVpcmVkQnl0ZXNJbkNvcHkgYmUgMC4iCisgICAgYXV0byByZXF1aXJlZEJ5dGVzSW5D
b3B5ID0gMDsKKworICAgIC8vICJJZiBjb3B5RXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyA+IDE6
IgorICAgIGlmIChjb3B5RXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyA+IDEpIHsKKyAgICAgICAg
Ly8gIkxldCBieXRlc1BlckltYWdlIGJlIGxheW91dC5ieXRlc1BlclJvdyDDlyBsYXlvdXQucm93
c1BlckltYWdlLiIKKyAgICAgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMuCisg
ICAgICAgIGF1dG8gYnl0ZXNQZXJJbWFnZSA9IGxheW91dC5ieXRlc1BlclJvdyAqIGxheW91dC5y
b3dzUGVySW1hZ2U7CisKKyAgICAgICAgLy8gIkxldCBieXRlc0JlZm9yZUxhc3RJbWFnZSBiZSBi
eXRlc1BlckltYWdlIMOXIChjb3B5RXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyDiiJIgMSkuIgor
ICAgICAgICBhdXRvIGJ5dGVzQmVmb3JlTGFzdEltYWdlID0gYnl0ZXNQZXJJbWFnZSAqIChjb3B5
RXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyAtIDEpOworCisgICAgICAgIC8vICJBZGQgYnl0ZXNC
ZWZvcmVMYXN0SW1hZ2UgdG8gcmVxdWlyZWRCeXRlc0luQ29weS4iCisgICAgICAgIHJlcXVpcmVk
Qnl0ZXNJbkNvcHkgKz0gYnl0ZXNCZWZvcmVMYXN0SW1hZ2U7CisgICAgfQorCisgICAgLy8gIklm
IGNvcHlFeHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzID4gMDoiCisgICAgaWYgKGNvcHlFeHRlbnQu
ZGVwdGhPckFycmF5TGF5ZXJzID4gMCkgeworICAgICAgICAvLyAiSWYgaGVpZ2h0SW5CbG9ja3Mg
PiAxIgorICAgICAgICBpZiAoaGVpZ2h0SW5CbG9ja3MgPiAxKSB7CisgICAgICAgICAgICAvLyAi
YWRkIGxheW91dC5ieXRlc1BlclJvdyDDlyAoaGVpZ2h0SW5CbG9ja3Mg4oiSIDEpIHRvIHJlcXVp
cmVkQnl0ZXNJbkNvcHkuIgorICAgICAgICAgICAgcmVxdWlyZWRCeXRlc0luQ29weSArPSBsYXlv
dXQuYnl0ZXNQZXJSb3cgKiAoaGVpZ2h0SW5CbG9ja3MgLSAxKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vICJJZiBoZWlnaHRJbkJsb2NrcyA+IDAiCisgICAgICAgIGlmIChoZWlnaHRJbkJsb2Nr
cyA+IDApIHsKKyAgICAgICAgICAgIC8vICJhZGQgYnl0ZXNJbkxhc3RSb3cgdG8gcmVxdWlyZWRC
eXRlc0luQ29weS4iCisgICAgICAgICAgICByZXF1aXJlZEJ5dGVzSW5Db3B5ICs9IGJ5dGVzSW5M
YXN0Um93OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gIkZhaWwgaWYgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZSBub3Qgc2F0aXNmaWVkOiIKKyAgICAvLyAibGF5b3V0Lm9mZnNldCAr
IHJlcXVpcmVkQnl0ZXNJbkNvcHkg4omkIGJ5dGVTaXplLiIKKyAgICBpZiAobGF5b3V0Lm9mZnNl
dCArIHJlcXVpcmVkQnl0ZXNJbkNvcHkgPiBieXRlU2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHZhbGlkYXRlQ29weUJ1ZmZl
clRvVGV4dHVyZShjb25zdCBXR1BVSW1hZ2VDb3B5QnVmZmVyJiBzb3VyY2UsIGNvbnN0IFdHUFVJ
bWFnZUNvcHlUZXh0dXJlJiBkZXN0aW5hdGlvbiwgY29uc3QgV0dQVUV4dGVudDNEJiBjb3B5U2l6
ZSkKK3sKKyAgICAvLyAiTGV0IGRzdFRleHR1cmVEZXNjIGJlIGRlc3RpbmF0aW9uLnRleHR1cmUu
W1tkZXNjcmlwdG9yXV0uIgorICAgIGNvbnN0IGF1dG8mIGRzdFRleHR1cmVEZXNjID0gZnJvbUFQ
SShkZXN0aW5hdGlvbi50ZXh0dXJlKS5kZXNjcmlwdG9yKCk7CisKKyAgICAvLyAidmFsaWRhdGlu
ZyBHUFVJbWFnZUNvcHlCdWZmZXIoc291cmNlKSByZXR1cm5zIHRydWUuIgorICAgIGlmICghdmFs
aWRhdGVJbWFnZUNvcHlCdWZmZXIoc291cmNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gInNvdXJjZS5idWZmZXIuW1t1c2FnZV1dIGNvbnRhaW5zIENPUFlfU1JDLiIKKyAgICBp
ZiAoIShmcm9tQVBJKHNvdXJjZS5idWZmZXIpLnVzYWdlKCkgJiBXR1BVQnVmZmVyVXNhZ2VfQ29w
eVNyYykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJ2YWxpZGF0aW5nIEdQVUlt
YWdlQ29weVRleHR1cmUoZGVzdGluYXRpb24sIGNvcHlTaXplKSByZXR1cm5zIHRydWUuIgorICAg
IGlmICghdmFsaWRhdGVJbWFnZUNvcHlUZXh0dXJlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJkc3RUZXh0dXJlRGVzYy51c2FnZSBjb250
YWlucyBDT1BZX0RTVC4iCisgICAgaWYgKCEoZHN0VGV4dHVyZURlc2MudXNhZ2UgJiBXR1BVVGV4
dHVyZVVzYWdlX0NvcHlEc3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiZHN0
VGV4dHVyZURlc2Muc2FtcGxlQ291bnQgaXMgMS4iCisgICAgaWYgKGRzdFRleHR1cmVEZXNjLnNh
bXBsZUNvdW50ICE9IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJJZiBkc3RU
ZXh0dXJlRGVzYy5mb3JtYXQgaXMgYSBkZXB0aC1vci1zdGVuY2lsIGZvcm1hdDoiCisgICAgaWYg
KFRleHR1cmU6OmlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoZHN0VGV4dHVyZURlc2MuZm9ybWF0KSkg
eworICAgICAgICAvLyAiZGVzdGluYXRpb24uYXNwZWN0IG11c3QgcmVmZXIgdG8gYSBzaW5nbGUg
YXNwZWN0IG9mIGRzdFRleHR1cmVEZXNjLmZvcm1hdCIKKyAgICAgICAgV0dQVVRleHR1cmVGb3Jt
YXQgc2luZ2xlQXNwZWN0Rm9ybWF0ID0gV0dQVVRleHR1cmVGb3JtYXRfVW5kZWZpbmVkOworICAg
ICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uLmFzcGVjdCkgeworICAgICAgICBjYXNlIFdHUFVUZXh0
dXJlQXNwZWN0X0FsbDoKKyAgICAgICAgICAgIGlmIChhdXRvIHN0ZW5jaWxPbmx5QXNwZWN0Rm9y
bWF0ID0gVGV4dHVyZTo6c3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQoZHN0VGV4dHVyZURlc2MuZm9y
bWF0KSkKKyAgICAgICAgICAgICAgICBzaW5nbGVBc3BlY3RGb3JtYXQgPSAqc3RlbmNpbE9ubHlB
c3BlY3RGb3JtYXQ7CisgICAgICAgICAgICBpZiAoYXV0byBkZXB0aE9ubHlBc3BlY3RGb3JtYXQg
PSBUZXh0dXJlOjpkZXB0aE9ubHlBc3BlY3RGb3JtYXQoZHN0VGV4dHVyZURlc2MuZm9ybWF0KSkg
eworICAgICAgICAgICAgICAgIGlmIChzaW5nbGVBc3BlY3RGb3JtYXQpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBzaW5nbGVBc3BlY3RGb3JtYXQg
PSAqZGVwdGhPbmx5QXNwZWN0Rm9ybWF0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfU3RlbmNpbE9ubHk6CisgICAgICAg
ICAgICBpZiAoYXV0byBzdGVuY2lsT25seUFzcGVjdEZvcm1hdCA9IFRleHR1cmU6OnN0ZW5jaWxP
bmx5QXNwZWN0Rm9ybWF0KGRzdFRleHR1cmVEZXNjLmZvcm1hdCkpCisgICAgICAgICAgICAgICAg
c2luZ2xlQXNwZWN0Rm9ybWF0ID0gKnN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRGVwdGhPbmx5OgorICAg
ICAgICAgICAgaWYgKGF1dG8gZGVwdGhPbmx5QXNwZWN0Rm9ybWF0ID0gVGV4dHVyZTo6ZGVwdGhP
bmx5QXNwZWN0Rm9ybWF0KGRzdFRleHR1cmVEZXNjLmZvcm1hdCkpCisgICAgICAgICAgICAgICAg
c2luZ2xlQXNwZWN0Rm9ybWF0ID0gKmRlcHRoT25seUFzcGVjdEZvcm1hdDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0ZvcmNlMzI6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2luZ2xlQXNwZWN0
Rm9ybWF0ID09IFdHUFVUZXh0dXJlRm9ybWF0X1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICAvLyAiYW5kIHRoYXQgYXNwZWN0IG11c3QgYmUgYSB2YWxpZCBp
bWFnZSBjb3B5IGRlc3RpbmF0aW9uIGFjY29yZGluZyB0byDCp+KArzI1LjEuMiBEZXB0aC1zdGVu
Y2lsIGZvcm1hdHMuIgorICAgICAgICBpZiAoIWlzVmFsaWRJbWFnZUNvcHlEZXN0aW5hdGlvbihk
c3RUZXh0dXJlRGVzYy5mb3JtYXQsIGRlc3RpbmF0aW9uLmFzcGVjdCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gInZhbGlkYXRpbmcgdGV4dHVyZSBjb3B5IHJh
bmdlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkgcmV0dXJuIHRydWUuIgorICAgIGlmICghdmFsaWRh
dGVUZXh0dXJlQ29weVJhbmdlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vICJJZiBkc3RUZXh0dXJlRGVzYy5mb3JtYXQgaXMgbm90IGEgZGVw
dGgtb3Itc3RlbmNpbCBmb3JtYXQ6IgorICAgIGlmICghVGV4dHVyZTo6aXNEZXB0aE9yU3RlbmNp
bEZvcm1hdChkc3RUZXh0dXJlRGVzYy5mb3JtYXQpKSB7CisgICAgICAgIC8vICJzb3VyY2Uub2Zm
c2V0IGlzIGEgbXVsdGlwbGUgb2YgdGhlIHRleGVsIGJsb2NrIHNpemUgb2YgZHN0VGV4dHVyZURl
c2MuZm9ybWF0LiIKKyAgICAgICAgYXV0byB0ZXhlbEJsb2NrU2l6ZSA9IFRleHR1cmU6OnRleGVs
QmxvY2tTaXplKGRzdFRleHR1cmVEZXNjLmZvcm1hdCk7CisgICAgICAgIGlmICghdGV4ZWxCbG9j
a1NpemUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChzb3VyY2UubGF5
b3V0Lm9mZnNldCAlICp0ZXhlbEJsb2NrU2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICAvLyAiSWYgZHN0VGV4dHVyZURlc2MuZm9ybWF0IGlzIGEgZGVwdGgtb3It
c3RlbmNpbCBmb3JtYXQ6IgorICAgIGlmIChUZXh0dXJlOjppc0RlcHRoT3JTdGVuY2lsRm9ybWF0
KGRzdFRleHR1cmVEZXNjLmZvcm1hdCkpIHsKKyAgICAgICAgLy8gInNvdXJjZS5vZmZzZXQgaXMg
YSBtdWx0aXBsZSBvZiA0LiIKKyAgICAgICAgaWYgKHNvdXJjZS5sYXlvdXQub2Zmc2V0ICUgNCkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyAidmFsaWRhdGluZyBs
aW5lYXIgdGV4dHVyZSBkYXRhKHNvdXJjZSwgc291cmNlLmJ1ZmZlci5bW3NpemVdXSwgZHN0VGV4
dHVyZURlc2MuZm9ybWF0LCBjb3B5U2l6ZSkgc3VjY2VlZHMuIgorICAgIGlmICghdmFsaWRhdGVM
aW5lYXJUZXh0dXJlRGF0YShzb3VyY2UubGF5b3V0LCBmcm9tQVBJKHNvdXJjZS5idWZmZXIpLnNp
emUoKSwgZHN0VGV4dHVyZURlc2MuZm9ybWF0LCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIENvbW1hbmRFbmNvZGVyOjpjb3B5
QnVmZmVyVG9UZXh0dXJlKGNvbnN0IFdHUFVJbWFnZUNvcHlCdWZmZXImIHNvdXJjZSwgY29uc3Qg
V0dQVUltYWdlQ29weVRleHR1cmUmIGRlc3RpbmF0aW9uLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNv
cHlTaXplKQogewotICAgIFVOVVNFRF9QQVJBTShzb3VyY2UpOwotICAgIFVOVVNFRF9QQVJBTShk
ZXN0aW5hdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcHlTaXplKTsKKyAgICBpZiAoc291cmNl
Lm5leHRJbkNoYWluIHx8IHNvdXJjZS5sYXlvdXQubmV4dEluQ2hhaW4gfHwgZGVzdGluYXRpb24u
bmV4dEluQ2hhaW4pCisgICAgICAgIHJldHVybjsKKworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdp
dGh1Yi5pby9ncHV3ZWIvI2RvbS1ncHVjb21tYW5kZW5jb2Rlci1jb3B5YnVmZmVydG90ZXh0dXJl
CisKKyAgICAvLyAiUHJlcGFyZSB0aGUgZW5jb2RlciBzdGF0ZSBvZiB0aGlzLiBJZiBpdCByZXR1
cm5zIGZhbHNlLCBzdG9wLiIKKyAgICBpZiAoIXByZXBhcmVUaGVFbmNvZGVyU3RhdGUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gIklmIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlIHVuc2F0aXNmaWVkIgorICAgIGlmICghdmFsaWRhdGVDb3B5QnVmZmVyVG9UZXh0dXJl
KHNvdXJjZSwgZGVzdGluYXRpb24sIGNvcHlTaXplKSkgeworICAgICAgICAvLyAiZ2VuZXJhdGUg
YSB2YWxpZGF0aW9uIGVycm9yIGFuZCBzdG9wLiIKKyAgICAgICAgbV9kZXZpY2UtPmdlbmVyYXRl
QVZhbGlkYXRpb25FcnJvcigiVmFsaWRhdGlvbiBmYWlsdXJlLiIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgZW5zdXJlQmxpdENvbW1hbmRFbmNvZGVyKCk7CisKKyAgICBOU1VJbnRl
Z2VyIHNvdXJjZUJ5dGVzUGVyUm93ID0gc291cmNlLmxheW91dC5ieXRlc1BlclJvdzsKKworICAg
IC8vIEZJWE1FOiBVc2UgY2hlY2tlZCBhcml0aG1ldGljCisgICAgTlNVSW50ZWdlciBzb3VyY2VC
eXRlc1BlckltYWdlID0gc291cmNlLmxheW91dC5yb3dzUGVySW1hZ2UgKiBzb3VyY2UubGF5b3V0
LmJ5dGVzUGVyUm93OworCisgICAgTVRMQmxpdE9wdGlvbiBvcHRpb25zID0gTVRMQmxpdE9wdGlv
bk5vbmU7CisgICAgc3dpdGNoIChkZXN0aW5hdGlvbi5hc3BlY3QpIHsKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlQXNwZWN0X0FsbDoKKyAgICAgICAgb3B0aW9ucyA9IE1UTEJsaXRPcHRpb25Ob25lOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X1N0ZW5jaWxPbmx5Ogor
ICAgICAgICBvcHRpb25zID0gTVRMQmxpdE9wdGlvblN0ZW5jaWxGcm9tRGVwdGhTdGVuY2lsOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0RlcHRoT25seToKKyAg
ICAgICAgb3B0aW9ucyA9IE1UTEJsaXRPcHRpb25EZXB0aEZyb21EZXB0aFN0ZW5jaWw7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRm9yY2UzMjoKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGF1dG8gbG9naWNhbFNpemUgPSBmcm9tQVBJKGRlc3RpbmF0
aW9uLnRleHR1cmUpLmxvZ2ljYWxUZXh0dXJlU3VicmVzb3VyY2VFeHRlbnQoZGVzdGluYXRpb24u
bWlwTGV2ZWwpOworICAgIGF1dG8gd2lkdGhGb3JNZXRhbCA9IHN0ZDo6bWluKGNvcHlTaXplLndp
ZHRoLCBsb2dpY2FsU2l6ZS53aWR0aCk7CisgICAgYXV0byBoZWlnaHRGb3JNZXRhbCA9IHN0ZDo6
bWluKGNvcHlTaXplLmhlaWdodCwgbG9naWNhbFNpemUuaGVpZ2h0KTsKKyAgICBhdXRvIGRlcHRo
Rm9yTWV0YWwgPSBzdGQ6Om1pbihjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMsIGxvZ2ljYWxT
aXplLmRlcHRoT3JBcnJheUxheWVycyk7CisKKyAgICBhdXRvJiBkZXN0aW5hdGlvbkRlc2NyaXB0
b3IgPSBmcm9tQVBJKGRlc3RpbmF0aW9uLnRleHR1cmUpLmRlc2NyaXB0b3IoKTsKKyAgICBzd2l0
Y2ggKGRlc3RpbmF0aW9uRGVzY3JpcHRvci5kaW1lbnNpb24pIHsKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRGltZW5zaW9uXzFEOiB7CisgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNv
bS9kb2N1bWVudGF0aW9uL21ldGFsL210bGJsaXRjb21tYW5kZW5jb2Rlci8xNDAwNzcxLWNvcHlm
cm9tYnVmZmVyP2xhbmd1YWdlPW9iamMKKyAgICAgICAgLy8gIldoZW4geW91IGNvcHkgdG8gYSAx
RCB0ZXh0dXJlLCBoZWlnaHQgYW5kIGRlcHRoIG11c3QgYmUgMS4iCisgICAgICAgIGF1dG8gc291
cmNlU2l6ZSA9IE1UTFNpemVNYWtlKHdpZHRoRm9yTWV0YWwsIDEsIDEpOworICAgICAgICBhdXRv
IGRlc3RpbmF0aW9uT3JpZ2luID0gTVRMT3JpZ2luTWFrZShkZXN0aW5hdGlvbi5vcmlnaW4ueCwg
MSwgMSk7CisgICAgICAgIGZvciAodWludDMyX3QgbGF5ZXIgPSAwOyBsYXllciA8IGNvcHlTaXpl
LmRlcHRoT3JBcnJheUxheWVyczsgKytsYXllcikgeworICAgICAgICAgICAgLy8gRklYTUU6IFVz
ZSBjaGVja2VkIGFyaXRobWV0aWMuCisgICAgICAgICAgICBOU1VJbnRlZ2VyIHNvdXJjZU9mZnNl
dCA9IHNvdXJjZS5sYXlvdXQub2Zmc2V0ICsgbGF5ZXIgKiBzb3VyY2VCeXRlc1BlckltYWdlOwor
ICAgICAgICAgICAgTlNVSW50ZWdlciBkZXN0aW5hdGlvblNsaWNlID0gZGVzdGluYXRpb24ub3Jp
Z2luLnogKyBsYXllcjsKKyAgICAgICAgICAgIFttX2JsaXRDb21tYW5kRW5jb2RlcgorICAgICAg
ICAgICAgICAgIGNvcHlGcm9tQnVmZmVyOmZyb21BUEkoc291cmNlLmJ1ZmZlcikuYnVmZmVyKCkK
KyAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXQ6c291cmNlT2Zmc2V0CisgICAgICAgICAgICAg
ICAgc291cmNlQnl0ZXNQZXJSb3c6c291cmNlQnl0ZXNQZXJSb3cKKyAgICAgICAgICAgICAgICBz
b3VyY2VCeXRlc1BlckltYWdlOnNvdXJjZUJ5dGVzUGVySW1hZ2UKKyAgICAgICAgICAgICAgICBz
b3VyY2VTaXplOnNvdXJjZVNpemUKKyAgICAgICAgICAgICAgICB0b1RleHR1cmU6ZnJvbUFQSShk
ZXN0aW5hdGlvbi50ZXh0dXJlKS50ZXh0dXJlKCkKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlv
blNsaWNlOmRlc3RpbmF0aW9uU2xpY2UKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkxldmVs
OmRlc3RpbmF0aW9uLm1pcExldmVsCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25PcmlnaW46
ZGVzdGluYXRpb25PcmlnaW4KKyAgICAgICAgICAgICAgICBvcHRpb25zOm9wdGlvbnNdOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5z
aW9uXzJEOiB7CisgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVu
dGF0aW9uL21ldGFsL210bGJsaXRjb21tYW5kZW5jb2Rlci8xNDAwNzcxLWNvcHlmcm9tYnVmZmVy
P2xhbmd1YWdlPW9iamMKKyAgICAgICAgLy8gIldoZW4geW91IGNvcHkgdG8gYSAyRCB0ZXh0dXJl
LCBkZXB0aCBtdXN0IGJlIDEuIgorICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBNVExTaXplTWFr
ZSh3aWR0aEZvck1ldGFsLCBoZWlnaHRGb3JNZXRhbCwgMSk7CisgICAgICAgIGF1dG8gZGVzdGlu
YXRpb25PcmlnaW4gPSBNVExPcmlnaW5NYWtlKGRlc3RpbmF0aW9uLm9yaWdpbi54LCBkZXN0aW5h
dGlvbi5vcmlnaW4ueSwgMSk7CisgICAgICAgIGZvciAodWludDMyX3QgbGF5ZXIgPSAwOyBsYXll
ciA8IGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVyczsgKytsYXllcikgeworICAgICAgICAgICAg
Ly8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMuCisgICAgICAgICAgICBOU1VJbnRlZ2Vy
IHNvdXJjZU9mZnNldCA9IHNvdXJjZS5sYXlvdXQub2Zmc2V0ICsgbGF5ZXIgKiBzb3VyY2VCeXRl
c1BlckltYWdlOworICAgICAgICAgICAgTlNVSW50ZWdlciBkZXN0aW5hdGlvblNsaWNlID0gZGVz
dGluYXRpb24ub3JpZ2luLnogKyBsYXllcjsKKyAgICAgICAgICAgIFttX2JsaXRDb21tYW5kRW5j
b2RlcgorICAgICAgICAgICAgICAgIGNvcHlGcm9tQnVmZmVyOmZyb21BUEkoc291cmNlLmJ1ZmZl
cikuYnVmZmVyKCkKKyAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXQ6c291cmNlT2Zmc2V0Cisg
ICAgICAgICAgICAgICAgc291cmNlQnl0ZXNQZXJSb3c6c291cmNlQnl0ZXNQZXJSb3cKKyAgICAg
ICAgICAgICAgICBzb3VyY2VCeXRlc1BlckltYWdlOnNvdXJjZUJ5dGVzUGVySW1hZ2UKKyAgICAg
ICAgICAgICAgICBzb3VyY2VTaXplOnNvdXJjZVNpemUKKyAgICAgICAgICAgICAgICB0b1RleHR1
cmU6ZnJvbUFQSShkZXN0aW5hdGlvbi50ZXh0dXJlKS50ZXh0dXJlKCkKKyAgICAgICAgICAgICAg
ICBkZXN0aW5hdGlvblNsaWNlOmRlc3RpbmF0aW9uU2xpY2UKKyAgICAgICAgICAgICAgICBkZXN0
aW5hdGlvbkxldmVsOmRlc3RpbmF0aW9uLm1pcExldmVsCisgICAgICAgICAgICAgICAgZGVzdGlu
YXRpb25PcmlnaW46ZGVzdGluYXRpb25PcmlnaW4KKyAgICAgICAgICAgICAgICBvcHRpb25zOm9w
dGlvbnNdOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRGltZW5zaW9uXzNEOiB7CisgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IE1UTFNpemVN
YWtlKHdpZHRoRm9yTWV0YWwsIGhlaWdodEZvck1ldGFsLCBkZXB0aEZvck1ldGFsKTsKKyAgICAg
ICAgYXV0byBkZXN0aW5hdGlvbk9yaWdpbiA9IE1UTE9yaWdpbk1ha2UoZGVzdGluYXRpb24ub3Jp
Z2luLngsIGRlc3RpbmF0aW9uLm9yaWdpbi55LCBkZXN0aW5hdGlvbi5vcmlnaW4ueik7CisgICAg
ICAgIE5TVUludGVnZXIgc291cmNlT2Zmc2V0ID0gc291cmNlLmxheW91dC5vZmZzZXQ7CisgICAg
ICAgIFttX2JsaXRDb21tYW5kRW5jb2RlcgorICAgICAgICAgICAgY29weUZyb21CdWZmZXI6ZnJv
bUFQSShzb3VyY2UuYnVmZmVyKS5idWZmZXIoKQorICAgICAgICAgICAgc291cmNlT2Zmc2V0OnNv
dXJjZU9mZnNldAorICAgICAgICAgICAgc291cmNlQnl0ZXNQZXJSb3c6c291cmNlQnl0ZXNQZXJS
b3cKKyAgICAgICAgICAgIHNvdXJjZUJ5dGVzUGVySW1hZ2U6c291cmNlQnl0ZXNQZXJJbWFnZQor
ICAgICAgICAgICAgc291cmNlU2l6ZTpzb3VyY2VTaXplCisgICAgICAgICAgICB0b1RleHR1cmU6
ZnJvbUFQSShkZXN0aW5hdGlvbi50ZXh0dXJlKS50ZXh0dXJlKCkKKyAgICAgICAgICAgIGRlc3Rp
bmF0aW9uU2xpY2U6MAorICAgICAgICAgICAgZGVzdGluYXRpb25MZXZlbDpkZXN0aW5hdGlvbi5t
aXBMZXZlbAorICAgICAgICAgICAgZGVzdGluYXRpb25PcmlnaW46ZGVzdGluYXRpb25PcmlnaW4K
KyAgICAgICAgICAgIG9wdGlvbnM6b3B0aW9uc107CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uX0ZvcmNlMzI6CisgICAgICAgIHJldHVybjsKKyAg
ICB9Cit9CisKK3N0YXRpYyBib29sIHZhbGlkYXRlQ29weVRleHR1cmVUb0J1ZmZlcihjb25zdCBX
R1BVSW1hZ2VDb3B5VGV4dHVyZSYgc291cmNlLCBjb25zdCBXR1BVSW1hZ2VDb3B5QnVmZmVyJiBk
ZXN0aW5hdGlvbiwgY29uc3QgV0dQVUV4dGVudDNEJiBjb3B5U2l6ZSkKK3sKKyAgICAvLyAiTGV0
IHNyY1RleHR1cmVEZXNjIGJlIHNvdXJjZS50ZXh0dXJlLltbZGVzY3JpcHRvcl1dLiIKKyAgICBj
b25zdCBhdXRvJiBzcmNUZXh0dXJlRGVzYyA9IGZyb21BUEkoc291cmNlLnRleHR1cmUpLmRlc2Ny
aXB0b3IoKTsKKworICAgIC8vICJ2YWxpZGF0aW5nIEdQVUltYWdlQ29weVRleHR1cmUoc291cmNl
LCBjb3B5U2l6ZSkgcmV0dXJucyB0cnVlLiIKKyAgICBpZiAoIXZhbGlkYXRlSW1hZ2VDb3B5VGV4
dHVyZShzb3VyY2UsIGNvcHlTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
InNyY1RleHR1cmVEZXNjLnVzYWdlIGNvbnRhaW5zIENPUFlfU1JDLiIKKyAgICBpZiAoIShzcmNU
ZXh0dXJlRGVzYy51c2FnZSAmIFdHUFVCdWZmZXJVc2FnZV9Db3B5U3JjKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gInNyY1RleHR1cmVEZXNjLnNhbXBsZUNvdW50IGlzIDEuIgor
ICAgIGlmIChzcmNUZXh0dXJlRGVzYy5zYW1wbGVDb3VudCAhPSAxKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyAiSWYgc3JjVGV4dHVyZURlc2MuZm9ybWF0IGlzIGEgZGVwdGgtc3Rl
bmNpbCBmb3JtYXQ6IgorICAgIGlmIChUZXh0dXJlOjppc0RlcHRoT3JTdGVuY2lsRm9ybWF0KHNy
Y1RleHR1cmVEZXNjLmZvcm1hdCkpIHsKKyAgICAgICAgLy8gInNvdXJjZS5hc3BlY3QgbXVzdCBy
ZWZlciB0byBhIHNpbmdsZSBhc3BlY3Qgb2Ygc3JjVGV4dHVyZURlc2MuZm9ybWF0IgorICAgICAg
ICBXR1BVVGV4dHVyZUZvcm1hdCBzaW5nbGVBc3BlY3RGb3JtYXQgPSBXR1BVVGV4dHVyZUZvcm1h
dF9VbmRlZmluZWQ7CisgICAgICAgIHN3aXRjaCAoc291cmNlLmFzcGVjdCkgeworICAgICAgICBj
YXNlIFdHUFVUZXh0dXJlQXNwZWN0X0FsbDoKKyAgICAgICAgICAgIGlmIChhdXRvIHN0ZW5jaWxP
bmx5QXNwZWN0Rm9ybWF0ID0gVGV4dHVyZTo6c3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQoc3JjVGV4
dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAgICAgICAgICBzaW5nbGVBc3BlY3RGb3JtYXQgPSAq
c3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQ7CisgICAgICAgICAgICBpZiAoYXV0byBkZXB0aE9ubHlB
c3BlY3RGb3JtYXQgPSBUZXh0dXJlOjpkZXB0aE9ubHlBc3BlY3RGb3JtYXQoc3JjVGV4dHVyZURl
c2MuZm9ybWF0KSkgeworICAgICAgICAgICAgICAgIGlmIChzaW5nbGVBc3BlY3RGb3JtYXQpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBzaW5nbGVB
c3BlY3RGb3JtYXQgPSAqZGVwdGhPbmx5QXNwZWN0Rm9ybWF0OworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfU3RlbmNpbE9u
bHk6CisgICAgICAgICAgICBpZiAoYXV0byBzdGVuY2lsT25seUFzcGVjdEZvcm1hdCA9IFRleHR1
cmU6OnN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0KHNyY1RleHR1cmVEZXNjLmZvcm1hdCkpCisgICAg
ICAgICAgICAgICAgc2luZ2xlQXNwZWN0Rm9ybWF0ID0gKnN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRGVw
dGhPbmx5OgorICAgICAgICAgICAgaWYgKGF1dG8gZGVwdGhPbmx5QXNwZWN0Rm9ybWF0ID0gVGV4
dHVyZTo6ZGVwdGhPbmx5QXNwZWN0Rm9ybWF0KHNyY1RleHR1cmVEZXNjLmZvcm1hdCkpCisgICAg
ICAgICAgICAgICAgc2luZ2xlQXNwZWN0Rm9ybWF0ID0gKmRlcHRoT25seUFzcGVjdEZvcm1hdDsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0ZvcmNl
MzI6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
c2luZ2xlQXNwZWN0Rm9ybWF0ID09IFdHUFVUZXh0dXJlRm9ybWF0X1VuZGVmaW5lZCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyAiYW5kIHRoYXQgYXNwZWN0IG11c3Qg
YmUgYSB2YWxpZCBpbWFnZSBjb3B5IGRlc3RpbmF0aW9uIGFjY29yZGluZyB0byDCp+KArzI1LjEu
MiBEZXB0aC1zdGVuY2lsIGZvcm1hdHMuIgorICAgICAgICBpZiAoIWlzVmFsaWRJbWFnZUNvcHlE
ZXN0aW5hdGlvbihzcmNUZXh0dXJlRGVzYy5mb3JtYXQsIHNvdXJjZS5hc3BlY3QpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vICJ2YWxpZGF0aW5nIEdQVUltYWdl
Q29weUJ1ZmZlcihkZXN0aW5hdGlvbikgcmV0dXJucyB0cnVlLiIKKyAgICBpZiAoIXZhbGlkYXRl
SW1hZ2VDb3B5QnVmZmVyKGRlc3RpbmF0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gImRlc3RpbmF0aW9uLmJ1ZmZlci5bW3VzYWdlXV0gY29udGFpbnMgQ09QWV9EU1QuIgor
ICAgIGlmICghKGZyb21BUEkoZGVzdGluYXRpb24uYnVmZmVyKS51c2FnZSgpICYgV0dQVUJ1ZmZl
clVzYWdlX0NvcHlEc3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAidmFsaWRh
dGluZyB0ZXh0dXJlIGNvcHkgcmFuZ2Uoc291cmNlLCBjb3B5U2l6ZSkgcmV0dXJucyB0cnVlLiIK
KyAgICBpZiAoIXZhbGlkYXRlVGV4dHVyZUNvcHlSYW5nZShzb3VyY2UsIGNvcHlTaXplKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gIklmIHNyY1RleHR1cmVEZXNjLmZvcm1hdCBp
cyBub3QgYSBkZXB0aC1vci1zdGVuY2lsIGZvcm1hdDoiCisgICAgaWYgKCFUZXh0dXJlOjppc0Rl
cHRoT3JTdGVuY2lsRm9ybWF0KHNyY1RleHR1cmVEZXNjLmZvcm1hdCkpIHsKKyAgICAgICAgLy8g
ImRlc3RpbmF0aW9uLm9mZnNldCBpcyBhIG11bHRpcGxlIG9mIHRoZSB0ZXhlbCBibG9jayBzaXpl
IG9mIHNyY1RleHR1cmVEZXNjLmZvcm1hdC4iCisgICAgICAgIGF1dG8gdGV4ZWxCbG9ja1NpemUg
PSBUZXh0dXJlOjp0ZXhlbEJsb2NrU2l6ZShzcmNUZXh0dXJlRGVzYy5mb3JtYXQpOworICAgICAg
ICBpZiAoIXRleGVsQmxvY2tTaXplKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBpZiAoZGVzdGluYXRpb24ubGF5b3V0Lm9mZnNldCAlICp0ZXhlbEJsb2NrU2l6ZSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyAiSWYgc3JjVGV4dHVyZURlc2Mu
Zm9ybWF0IGlzIGEgZGVwdGgtb3Itc3RlbmNpbCBmb3JtYXQ6IgorICAgIGlmIChUZXh0dXJlOjpp
c0RlcHRoT3JTdGVuY2lsRm9ybWF0KHNyY1RleHR1cmVEZXNjLmZvcm1hdCkpIHsKKyAgICAgICAg
Ly8gImRlc3RpbmF0aW9uLm9mZnNldCBpcyBhIG11bHRpcGxlIG9mIDQuIgorICAgICAgICBpZiAo
ZGVzdGluYXRpb24ubGF5b3V0Lm9mZnNldCAlIDQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgLy8gInZhbGlkYXRpbmcgbGluZWFyIHRleHR1cmUgZGF0YShkZXN0aW5h
dGlvbiwgZGVzdGluYXRpb24uYnVmZmVyLltbc2l6ZV1dLCBzcmNUZXh0dXJlRGVzYy5mb3JtYXQs
IGNvcHlTaXplKSBzdWNjZWVkcy4iCisgICAgaWYgKCF2YWxpZGF0ZUxpbmVhclRleHR1cmVEYXRh
KGRlc3RpbmF0aW9uLmxheW91dCwgZnJvbUFQSShkZXN0aW5hdGlvbi5idWZmZXIpLnNpemUoKSwg
c3JjVGV4dHVyZURlc2MuZm9ybWF0LCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIENvbW1hbmRFbmNvZGVyOjpjb3B5VGV4dHVy
ZVRvQnVmZmVyKGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBzb3VyY2UsIGNvbnN0IFdHUFVJ
bWFnZUNvcHlCdWZmZXImIGRlc3RpbmF0aW9uLCBjb25zdCBXR1BVRXh0ZW50M0QmIGNvcHlTaXpl
KQogewotICAgIFVOVVNFRF9QQVJBTShzb3VyY2UpOwotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5h
dGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcHlTaXplKTsKKyAgICBpZiAoc291cmNlLm5leHRJ
bkNoYWluIHx8IGRlc3RpbmF0aW9uLm5leHRJbkNoYWluIHx8IGRlc3RpbmF0aW9uLmxheW91dC5u
ZXh0SW5DaGFpbikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0
aHViLmlvL2dwdXdlYi8jZG9tLWdwdWNvbW1hbmRlbmNvZGVyLWNvcHl0ZXh0dXJldG9idWZmZXIK
KworICAgIC8vICJQcmVwYXJlIHRoZSBlbmNvZGVyIHN0YXRlIG9mIHRoaXMuIElmIGl0IHJldHVy
bnMgZmFsc2UsIHN0b3AuIgorICAgIGlmICghcHJlcGFyZVRoZUVuY29kZXJTdGF0ZSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyAiSWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUgdW5zYXRpc2ZpZWQiCisgICAgaWYgKCF2YWxpZGF0ZUNvcHlUZXh0dXJlVG9CdWZmZXIo
c291cmNlLCBkZXN0aW5hdGlvbiwgY29weVNpemUpKSB7CisgICAgICAgIC8vICJnZW5lcmF0ZSBh
IHZhbGlkYXRpb24gZXJyb3IgYW5kIHN0b3AuIgorICAgICAgICBtX2RldmljZS0+Z2VuZXJhdGVB
VmFsaWRhdGlvbkVycm9yKCJWYWxpZGF0aW9uIGZhaWx1cmUuIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBlbnN1cmVCbGl0Q29tbWFuZEVuY29kZXIoKTsKKworICAgIE5TVUludGVn
ZXIgZGVzdGluYXRpb25CeXRlc1BlclJvdyA9IGRlc3RpbmF0aW9uLmxheW91dC5ieXRlc1BlclJv
dzsKKworICAgIC8vIEZJWE1FOiBVc2UgY2hlY2tlZCBhcml0aG1ldGljCisgICAgTlNVSW50ZWdl
ciBkZXN0aW5hdGlvbkJ5dGVzUGVySW1hZ2UgPSBkZXN0aW5hdGlvbi5sYXlvdXQucm93c1Blcklt
YWdlICogZGVzdGluYXRpb24ubGF5b3V0LmJ5dGVzUGVyUm93OworCisgICAgTVRMQmxpdE9wdGlv
biBvcHRpb25zID0gTVRMQmxpdE9wdGlvbk5vbmU7CisgICAgc3dpdGNoIChzb3VyY2UuYXNwZWN0
KSB7CisgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9BbGw6CisgICAgICAgIG9wdGlvbnMgPSBN
VExCbGl0T3B0aW9uTm9uZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXR1BVVGV4dHVyZUFz
cGVjdF9TdGVuY2lsT25seToKKyAgICAgICAgb3B0aW9ucyA9IE1UTEJsaXRPcHRpb25TdGVuY2ls
RnJvbURlcHRoU3RlbmNpbDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXR1BVVGV4dHVyZUFz
cGVjdF9EZXB0aE9ubHk6CisgICAgICAgIG9wdGlvbnMgPSBNVExCbGl0T3B0aW9uRGVwdGhGcm9t
RGVwdGhTdGVuY2lsOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0
X0ZvcmNlMzI6CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGxvZ2ljYWxTaXpl
ID0gZnJvbUFQSShzb3VyY2UudGV4dHVyZSkubG9naWNhbFRleHR1cmVTdWJyZXNvdXJjZUV4dGVu
dChzb3VyY2UubWlwTGV2ZWwpOworICAgIGF1dG8gd2lkdGhGb3JNZXRhbCA9IHN0ZDo6bWluKGNv
cHlTaXplLndpZHRoLCBsb2dpY2FsU2l6ZS53aWR0aCk7CisgICAgYXV0byBoZWlnaHRGb3JNZXRh
bCA9IHN0ZDo6bWluKGNvcHlTaXplLmhlaWdodCwgbG9naWNhbFNpemUuaGVpZ2h0KTsKKyAgICBh
dXRvIGRlcHRoRm9yTWV0YWwgPSBzdGQ6Om1pbihjb3B5U2l6ZS5kZXB0aE9yQXJyYXlMYXllcnMs
IGxvZ2ljYWxTaXplLmRlcHRoT3JBcnJheUxheWVycyk7CisKKyAgICBhdXRvJiBzb3VyY2VEZXNj
cmlwdG9yID0gZnJvbUFQSShzb3VyY2UudGV4dHVyZSkuZGVzY3JpcHRvcigpOworICAgIHN3aXRj
aCAoc291cmNlRGVzY3JpcHRvci5kaW1lbnNpb24pIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGlt
ZW5zaW9uXzFEOiB7CisgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1
bWVudGF0aW9uL21ldGFsL210bGJsaXRjb21tYW5kZW5jb2Rlci8xNDAwNzU2LWNvcHlmcm9tdGV4
dHVyZT9sYW5ndWFnZT1vYmpjCisgICAgICAgIC8vICJXaGVuIHlvdSBjb3B5IHRvIGEgMUQgdGV4
dHVyZSwgaGVpZ2h0IGFuZCBkZXB0aCBtdXN0IGJlIDEuIgorICAgICAgICBhdXRvIHNvdXJjZVNp
emUgPSBNVExTaXplTWFrZSh3aWR0aEZvck1ldGFsLCAxLCAxKTsKKyAgICAgICAgYXV0byBzb3Vy
Y2VPcmlnaW4gPSBNVExPcmlnaW5NYWtlKHNvdXJjZS5vcmlnaW4ueCwgMSwgMSk7CisgICAgICAg
IGZvciAodWludDMyX3QgbGF5ZXIgPSAwOyBsYXllciA8IGNvcHlTaXplLmRlcHRoT3JBcnJheUxh
eWVyczsgKytsYXllcikgeworICAgICAgICAgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRo
bWV0aWMuCisgICAgICAgICAgICBOU1VJbnRlZ2VyIGRlc3RpbmF0aW9uT2Zmc2V0ID0gZGVzdGlu
YXRpb24ubGF5b3V0Lm9mZnNldCArIGxheWVyICogZGVzdGluYXRpb25CeXRlc1BlckltYWdlOwor
ICAgICAgICAgICAgTlNVSW50ZWdlciBzb3VyY2VTbGljZSA9IHNvdXJjZS5vcmlnaW4ueiArIGxh
eWVyOworICAgICAgICAgICAgW21fYmxpdENvbW1hbmRFbmNvZGVyCisgICAgICAgICAgICAgICAg
Y29weUZyb21UZXh0dXJlOmZyb21BUEkoc291cmNlLnRleHR1cmUpLnRleHR1cmUoKQorICAgICAg
ICAgICAgICAgIHNvdXJjZVNsaWNlOnNvdXJjZVNsaWNlCisgICAgICAgICAgICAgICAgc291cmNl
TGV2ZWw6c291cmNlLm1pcExldmVsCisgICAgICAgICAgICAgICAgc291cmNlT3JpZ2luOnNvdXJj
ZU9yaWdpbgorICAgICAgICAgICAgICAgIHNvdXJjZVNpemU6c291cmNlU2l6ZQorICAgICAgICAg
ICAgICAgIHRvQnVmZmVyOmZyb21BUEkoZGVzdGluYXRpb24uYnVmZmVyKS5idWZmZXIoKQorICAg
ICAgICAgICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0OmRlc3RpbmF0aW9uT2Zmc2V0CisgICAgICAg
ICAgICAgICAgZGVzdGluYXRpb25CeXRlc1BlclJvdzpkZXN0aW5hdGlvbkJ5dGVzUGVyUm93Cisg
ICAgICAgICAgICAgICAgZGVzdGluYXRpb25CeXRlc1BlckltYWdlOmRlc3RpbmF0aW9uQnl0ZXNQ
ZXJJbWFnZQorICAgICAgICAgICAgICAgIG9wdGlvbnM6b3B0aW9uc107CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25fMkQ6IHsK
KyAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24vbWV0
YWwvbXRsYmxpdGNvbW1hbmRlbmNvZGVyLzE0MDA3NTYtY29weWZyb210ZXh0dXJlP2xhbmd1YWdl
PW9iamMKKyAgICAgICAgLy8gIldoZW4geW91IGNvcHkgdG8gYSAyRCB0ZXh0dXJlLCBkZXB0aCBt
dXN0IGJlIDEuIgorICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBNVExTaXplTWFrZSh3aWR0aEZv
ck1ldGFsLCBoZWlnaHRGb3JNZXRhbCwgMSk7CisgICAgICAgIGF1dG8gc291cmNlT3JpZ2luID0g
TVRMT3JpZ2luTWFrZShzb3VyY2Uub3JpZ2luLngsIHNvdXJjZS5vcmlnaW4ueSwgMSk7CisgICAg
ICAgIGZvciAodWludDMyX3QgbGF5ZXIgPSAwOyBsYXllciA8IGNvcHlTaXplLmRlcHRoT3JBcnJh
eUxheWVyczsgKytsYXllcikgeworICAgICAgICAgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFy
aXRobWV0aWMuCisgICAgICAgICAgICBOU1VJbnRlZ2VyIGRlc3RpbmF0aW9uT2Zmc2V0ID0gZGVz
dGluYXRpb24ubGF5b3V0Lm9mZnNldCArIGxheWVyICogZGVzdGluYXRpb25CeXRlc1BlckltYWdl
OworICAgICAgICAgICAgTlNVSW50ZWdlciBzb3VyY2VTbGljZSA9IHNvdXJjZS5vcmlnaW4ueiAr
IGxheWVyOworICAgICAgICAgICAgW21fYmxpdENvbW1hbmRFbmNvZGVyCisgICAgICAgICAgICAg
ICAgY29weUZyb21UZXh0dXJlOmZyb21BUEkoc291cmNlLnRleHR1cmUpLnRleHR1cmUoKQorICAg
ICAgICAgICAgICAgIHNvdXJjZVNsaWNlOnNvdXJjZVNsaWNlCisgICAgICAgICAgICAgICAgc291
cmNlTGV2ZWw6c291cmNlLm1pcExldmVsCisgICAgICAgICAgICAgICAgc291cmNlT3JpZ2luOnNv
dXJjZU9yaWdpbgorICAgICAgICAgICAgICAgIHNvdXJjZVNpemU6c291cmNlU2l6ZQorICAgICAg
ICAgICAgICAgIHRvQnVmZmVyOmZyb21BUEkoZGVzdGluYXRpb24uYnVmZmVyKS5idWZmZXIoKQor
ICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0OmRlc3RpbmF0aW9uT2Zmc2V0CisgICAg
ICAgICAgICAgICAgZGVzdGluYXRpb25CeXRlc1BlclJvdzpkZXN0aW5hdGlvbkJ5dGVzUGVyUm93
CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25CeXRlc1BlckltYWdlOmRlc3RpbmF0aW9uQnl0
ZXNQZXJJbWFnZQorICAgICAgICAgICAgICAgIG9wdGlvbnM6b3B0aW9uc107CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25fM0Q6
IHsKKyAgICAgICAgYXV0byBzb3VyY2VTaXplID0gTVRMU2l6ZU1ha2Uod2lkdGhGb3JNZXRhbCwg
aGVpZ2h0Rm9yTWV0YWwsIGRlcHRoRm9yTWV0YWwpOworICAgICAgICBhdXRvIHNvdXJjZU9yaWdp
biA9IE1UTE9yaWdpbk1ha2Uoc291cmNlLm9yaWdpbi54LCBzb3VyY2Uub3JpZ2luLnksIHNvdXJj
ZS5vcmlnaW4ueik7CisgICAgICAgIE5TVUludGVnZXIgZGVzdGluYXRpb25PZmZzZXQgPSBkZXN0
aW5hdGlvbi5sYXlvdXQub2Zmc2V0OworICAgICAgICAgICAgW21fYmxpdENvbW1hbmRFbmNvZGVy
CisgICAgICAgICAgICAgICAgY29weUZyb21UZXh0dXJlOmZyb21BUEkoc291cmNlLnRleHR1cmUp
LnRleHR1cmUoKQorICAgICAgICAgICAgICAgIHNvdXJjZVNsaWNlOjAKKyAgICAgICAgICAgICAg
ICBzb3VyY2VMZXZlbDpzb3VyY2UubWlwTGV2ZWwKKyAgICAgICAgICAgICAgICBzb3VyY2VPcmln
aW46c291cmNlT3JpZ2luCisgICAgICAgICAgICAgICAgc291cmNlU2l6ZTpzb3VyY2VTaXplCisg
ICAgICAgICAgICAgICAgdG9CdWZmZXI6ZnJvbUFQSShkZXN0aW5hdGlvbi5idWZmZXIpLmJ1ZmZl
cigpCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25PZmZzZXQ6ZGVzdGluYXRpb25PZmZzZXQK
KyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93OmRlc3RpbmF0aW9uQnl0ZXNQ
ZXJSb3cKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkJ5dGVzUGVySW1hZ2U6ZGVzdGluYXRp
b25CeXRlc1BlckltYWdlCisgICAgICAgICAgICAgICAgb3B0aW9uczpvcHRpb25zXTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25fRm9yY2UzMjoK
KyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8V0dQVVRl
eHR1cmVGb3JtYXQ+IGlzU1JHQkNvbXBhdGlibGUoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0KQor
eworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9VbmRl
ZmluZWQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjhVbm9ybToKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X1I4U25vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9S
OFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SOFNpbnQ6CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9SMTZVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjE2U2lu
dDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IxNkZsb2F0OgorICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfUkc4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhTbm9y
bToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9SRzhTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUjMyRmxvYXQ6
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMzJVaW50OgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfUjMyU2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMTZVaW50Ogor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkcxNlNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9SRzE2RmxvYXQ6CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUkdCQThVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SR0JB
OFVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQThTbm9ybToKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X1JHQkE4U2ludDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X0JHUkE4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CR1JB
OFVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JHUkE4VW5vcm07
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0IxMEEyVW5vcm06CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9SRzExQjEwVWZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
UkdCOUU1VWZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkczMkZsb2F0OgorICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkczMlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SRzMyU2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkExNlVpbnQ6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMTZTaW50OgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfUkdCQTE2RmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJG
bG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkEzMlVpbnQ6CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
U3RlbmNpbDg6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDE2VW5vcm06CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDI0UGx1czoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0RlcHRoMjRQbHVzU3RlbmNpbDg6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9E
ZXB0aDI0VW5vcm1TdGVuY2lsODoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMzJG
bG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMzJGbG9hdFN0ZW5jaWw4Ogor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
QkMxUkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMxUkdCQVVub3JtU3Jn
YjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JDMVJHQkFVbm9ybTsKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDMlJHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0JDMlJHQkFVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1h
dF9CQzJSR0JBVW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzNSR0JBVW5vcm06
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzNSR0JBVW5vcm1TcmdiOgorICAgICAgICBy
ZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkMzUkdCQVVub3JtOworICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfQkM0UlVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM0UlNub3Jt
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM1UkdVbm9ybToKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X0JDNVJHU25vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzZI
UkdCVWZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM2SFJHQkZsb2F0OgorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM3
UkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM3UkdCQVVub3JtU3JnYjoK
KyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JDN1JHQkFVbm9ybTsKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9FVEMyUkdCOFVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0
X0VUQzJSR0I4VW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOEExVW5v
cm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOEExVW5vcm1TcmdiOgorICAg
ICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhBMVVub3JtOworICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQkE4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9FVEMyUkdCQThVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1h
dF9FVEMyUkdCQThVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1IxMVVub3Jt
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfRUFDUjExU25vcm06CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9FQUNSRzExVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9F
QUNSRzExU25vcm06CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9BU1RDNHg0VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9B
U1RDNHg0VW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQVNUQzR4
NFVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NFVub3JtOgorICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NFVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEM1eDRVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEM1eDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM1eDVVbm9ybVNy
Z2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg1VW5vcm07CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng1VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9BU1RDNng1VW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3Jt
YXRfQVNUQzZ4NVVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NlVub3Jt
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NlVub3JtU3JnYjoKKyAgICAgICAg
cmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDZVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0FTVEM4eDVVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4
eDVVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg1VW5v
cm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg2VW5vcm06CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg2VW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzh4NlVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNU
Qzh4OFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4OFVub3JtU3JnYjoK
KyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDhVbm9ybTsKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg1VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9BU1RDMTB4NVVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEMxMHg1VW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NlVub3Jt
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDZVbm9ybVNyZ2I6CisgICAgICAg
IHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NlVub3JtOworICAgIGNhc2UgV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzEweDhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FT
VEMxMHg4VW5vcm1TcmdiOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEw
eDhVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHgxMFVub3JtOgorICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDEwVW5vcm1TcmdiOgorICAgICAgICByZXR1
cm4gV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDEwVW5vcm07CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9BU1RDMTJ4MTBVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMx
MngxMFVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngx
MFVub3JtOworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEyeDEyVW5vcm06CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTJVbm9ybVNyZ2I6CisgICAgICAgIHJldHVy
biBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTJVbm9ybTsKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0ZvcmNlMzI6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KK30KKworc3RhdGljIGJvb2wgYXJlQ29weUNvbXBh
dGlibGUoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0MSwgV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0
MikKK3sKKyAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNjb3B5LWNvbXBh
dGlibGUKKworICAgIC8vICJmb3JtYXQxIGVxdWFscyBmb3JtYXQyIgorICAgIGlmIChmb3JtYXQx
ID09IGZvcm1hdDIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gImZvcm1hdDEgYW5k
IGZvcm1hdDIgZGlmZmVyIG9ubHkgaW4gd2hldGhlciB0aGV5IGFyZSBzcmdiIGZvcm1hdHMgKGhh
dmUgdGhlIC1zcmdiIHN1ZmZpeCkuIgorICAgIGF1dG8gY2Fub25pY2FsaXplZEZvcm1hdDEgPSBp
c1NSR0JDb21wYXRpYmxlKGZvcm1hdDEpOworICAgIGF1dG8gY2Fub25pY2FsaXplZEZvcm1hdDIg
PSBpc1NSR0JDb21wYXRpYmxlKGZvcm1hdDIpOworICAgIGlmICghY2Fub25pY2FsaXplZEZvcm1h
dDEgfHwgIWNhbm9uaWNhbGl6ZWRGb3JtYXQyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKGNhbm9uaWNhbGl6ZWRGb3JtYXQxICE9IGNhbm9uaWNhbGl6ZWRGb3JtYXQxKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgdmFs
aWRhdGVDb3B5VGV4dHVyZVRvVGV4dHVyZShjb25zdCBXR1BVSW1hZ2VDb3B5VGV4dHVyZSYgc291
cmNlLCBjb25zdCBXR1BVSW1hZ2VDb3B5VGV4dHVyZSYgZGVzdGluYXRpb24sIGNvbnN0IFdHUFVF
eHRlbnQzRCYgY29weVNpemUpCit7CisgICAgLy8gIkxldCBzcmNUZXh0dXJlRGVzYyBiZSBzb3Vy
Y2UudGV4dHVyZS5bW2Rlc2NyaXB0b3JdXS4iCisgICAgY29uc3QgYXV0byYgc3JjVGV4dHVyZURl
c2MgPSBmcm9tQVBJKHNvdXJjZS50ZXh0dXJlKS5kZXNjcmlwdG9yKCk7CisKKyAgICAvLyAiTGV0
IGRzdFRleHR1cmVEZXNjIGJlIGRlc3RpbmF0aW9uLnRleHR1cmUuW1tkZXNjcmlwdG9yXV0uIgor
ICAgIGNvbnN0IGF1dG8mIGRzdFRleHR1cmVEZXNjID0gZnJvbUFQSShkZXN0aW5hdGlvbi50ZXh0
dXJlKS5kZXNjcmlwdG9yKCk7CisKKyAgICAvLyAidmFsaWRhdGluZyBHUFVJbWFnZUNvcHlUZXh0
dXJlKHNvdXJjZSwgY29weVNpemUpIHJldHVybnMgdHJ1ZS4iCisgICAgaWYgKCF2YWxpZGF0ZUlt
YWdlQ29weVRleHR1cmUoc291cmNlLCBjb3B5U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vICJzcmNUZXh0dXJlRGVzYy51c2FnZSBjb250YWlucyBDT1BZX1NSQy4iCisgICAg
aWYgKCEoc3JjVGV4dHVyZURlc2MudXNhZ2UgJiBXR1BVVGV4dHVyZVVzYWdlX0NvcHlTcmMpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAidmFsaWRhdGluZyBHUFVJbWFnZUNvcHlU
ZXh0dXJlKGRlc3RpbmF0aW9uLCBjb3B5U2l6ZSkgcmV0dXJucyB0cnVlLiIKKyAgICBpZiAoIXZh
bGlkYXRlSW1hZ2VDb3B5VGV4dHVyZShkZXN0aW5hdGlvbiwgY29weVNpemUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiZHN0VGV4dHVyZURlc2MudXNhZ2UgY29udGFpbnMgQ09Q
WV9EU1QuIgorICAgIGlmICghKGRzdFRleHR1cmVEZXNjLnVzYWdlICYgV0dQVVRleHR1cmVVc2Fn
ZV9Db3B5RHN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gInNyY1RleHR1cmVE
ZXNjLnNhbXBsZUNvdW50IGlzIGVxdWFsIHRvIGRzdFRleHR1cmVEZXNjLnNhbXBsZUNvdW50LiIK
KyAgICBpZiAoc3JjVGV4dHVyZURlc2Muc2FtcGxlQ291bnQgIT0gZHN0VGV4dHVyZURlc2Muc2Ft
cGxlQ291bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJzcmNUZXh0dXJlRGVz
Yy5mb3JtYXQgYW5kIGRzdFRleHR1cmVEZXNjLmZvcm1hdCBtdXN0IGJlIGNvcHktY29tcGF0aWJs
ZS4iCisgICAgaWYgKCFhcmVDb3B5Q29tcGF0aWJsZShzcmNUZXh0dXJlRGVzYy5mb3JtYXQsIGRz
dFRleHR1cmVEZXNjLmZvcm1hdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJJ
ZiBzcmNUZXh0dXJlRGVzYy5mb3JtYXQgaXMgYSBkZXB0aC1zdGVuY2lsIGZvcm1hdDoiCisgICAg
aWYgKFRleHR1cmU6OmlzRGVwdGhPclN0ZW5jaWxGb3JtYXQoc3JjVGV4dHVyZURlc2MuZm9ybWF0
KSkgeworICAgICAgICAvLyAic291cmNlLmFzcGVjdCBhbmQgZGVzdGluYXRpb24uYXNwZWN0IG11
c3QgYm90aCByZWZlciB0byBhbGwgYXNwZWN0cyBvZiBzcmNUZXh0dXJlRGVzYy5mb3JtYXQgYW5k
IGRzdFRleHR1cmVEZXNjLmZvcm1hdCwgcmVzcGVjdGl2ZWx5LiIKKyAgICAgICAgc3dpdGNoIChz
b3VyY2UuYXNwZWN0KSB7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfQWxsOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfU3RlbmNpbE9u
bHk6CisgICAgICAgICAgICBpZiAoIVRleHR1cmU6OnN0ZW5jaWxPbmx5QXNwZWN0Rm9ybWF0KHNy
Y1RleHR1cmVEZXNjLmZvcm1hdCkgfHwgVGV4dHVyZTo6ZGVwdGhPbmx5QXNwZWN0Rm9ybWF0KHNy
Y1RleHR1cmVEZXNjLmZvcm1hdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfRGVwdGhPbmx5
OgorICAgICAgICAgICAgaWYgKCFUZXh0dXJlOjpkZXB0aE9ubHlBc3BlY3RGb3JtYXQoc3JjVGV4
dHVyZURlc2MuZm9ybWF0KSB8fCBUZXh0dXJlOjpzdGVuY2lsT25seUFzcGVjdEZvcm1hdChzcmNU
ZXh0dXJlRGVzYy5mb3JtYXQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0ZvcmNlMzI6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGRl
c3RpbmF0aW9uLmFzcGVjdCkgeworICAgICAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0FsbDoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X1N0ZW5j
aWxPbmx5OgorICAgICAgICAgICAgaWYgKCFUZXh0dXJlOjpzdGVuY2lsT25seUFzcGVjdEZvcm1h
dChkc3RUZXh0dXJlRGVzYy5mb3JtYXQpIHx8IFRleHR1cmU6OmRlcHRoT25seUFzcGVjdEZvcm1h
dChkc3RUZXh0dXJlRGVzYy5mb3JtYXQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdHUFVUZXh0dXJlQXNwZWN0X0RlcHRo
T25seToKKyAgICAgICAgICAgIGlmICghVGV4dHVyZTo6ZGVwdGhPbmx5QXNwZWN0Rm9ybWF0KGRz
dFRleHR1cmVEZXNjLmZvcm1hdCkgfHwgVGV4dHVyZTo6c3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQo
ZHN0VGV4dHVyZURlc2MuZm9ybWF0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9Gb3JjZTMy
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g
InZhbGlkYXRpbmcgdGV4dHVyZSBjb3B5IHJhbmdlKHNvdXJjZSwgY29weVNpemUpIHJldHVybnMg
dHJ1ZS4iCisgICAgaWYgKCF2YWxpZGF0ZVRleHR1cmVDb3B5UmFuZ2Uoc291cmNlLCBjb3B5U2l6
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJ2YWxpZGF0aW5nIHRleHR1cmUg
Y29weSByYW5nZShkZXN0aW5hdGlvbiwgY29weVNpemUpIHJldHVybnMgdHJ1ZS4iCisgICAgaWYg
KCF2YWxpZGF0ZVRleHR1cmVDb3B5UmFuZ2UoZGVzdGluYXRpb24sIGNvcHlTaXplKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gIlRoZSBzZXQgb2Ygc3VicmVzb3VyY2VzIGZvciB0
ZXh0dXJlIGNvcHkoc291cmNlLCBjb3B5U2l6ZSkgYW5kIHRoZSBzZXQgb2Ygc3VicmVzb3VyY2Vz
IGZvciB0ZXh0dXJlIGNvcHkoZGVzdGluYXRpb24sIGNvcHlTaXplKSBpcyBkaXNqb2ludC4iCisg
ICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jYWJzdHJhY3Qtb3BkZWYtc2V0
LW9mLXN1YnJlc291cmNlcy1mb3ItdGV4dHVyZS1jb3B5CisgICAgaWYgKHNvdXJjZS50ZXh0dXJl
ID09IGRlc3RpbmF0aW9uLnRleHR1cmUpIHsKKyAgICAgICAgLy8gTWlwIGxldmVscyBhcmUgbmV2
ZXIgcmFuZ2VzLgorICAgICAgICBpZiAoc291cmNlLm1pcExldmVsID09IGRlc3RpbmF0aW9uLm1p
cExldmVsKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGZyb21BUEkoc291cmNlLnRleHR1cmUpLmRl
c2NyaXB0b3IoKS5kaW1lbnNpb24pIHsKKyAgICAgICAgICAgIGNhc2UgV0dQVVRleHR1cmVEaW1l
bnNpb25fMUQ6CisgICAgICAgICAgICAgICAgLy8gIlRoZSBzdWJyZXNvdXJjZSBvZiBpbWFnZUNv
cHlUZXh0dXJlLnRleHR1cmUgYXQgbWlwbWFwIGxldmVsIGltYWdlQ29weVRleHR1cmUubWlwTGV2
ZWwuIgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgV0dQ
VVRleHR1cmVEaW1lbnNpb25fMkQ6IHsKKyAgICAgICAgICAgICAgICAvLyAiRm9yIGVhY2ggYXJy
YXlMYXllciBvZiB0aGUgY29weVNpemUuZGVwdGhPckFycmF5TGF5ZXJzIGFycmF5IGxheWVycyBz
dGFydGluZyBhdCBpbWFnZUNvcHlUZXh0dXJlLm9yaWdpbi56OiIKKyAgICAgICAgICAgICAgICAv
LyAiVGhlIHN1YnJlc291cmNlIG9mIGltYWdlQ29weVRleHR1cmUudGV4dHVyZSBhdCBtaXBtYXAg
bGV2ZWwgaW1hZ2VDb3B5VGV4dHVyZS5taXBMZXZlbCBhbmQgYXJyYXkgbGF5ZXIgYXJyYXlMYXll
ci4iCisgICAgICAgICAgICAgICAgUmFuZ2U8dWludDMyX3Q+IHNvdXJjZVJhbmdlKHNvdXJjZS5v
cmlnaW4ueiwgc291cmNlLm9yaWdpbi56ICsgY29weVNpemUuZGVwdGhPckFycmF5TGF5ZXJzKTsK
KyAgICAgICAgICAgICAgICBSYW5nZTx1aW50MzJfdD4gZGVzdGluYXRpb25SYW5nZShkZXN0aW5h
dGlvbi5vcmlnaW4ueiwgc291cmNlLm9yaWdpbi56ICsgY29weVNpemUuZGVwdGhPckFycmF5TGF5
ZXJzKTsKKyAgICAgICAgICAgICAgICBpZiAoc291cmNlUmFuZ2Uub3ZlcmxhcHMoZGVzdGluYXRp
b25SYW5nZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgV0dQVVRleHR1cmVE
aW1lbnNpb25fM0Q6CisgICAgICAgICAgICAgICAgLy8gIlRoZSBzdWJyZXNvdXJjZSBvZiBpbWFn
ZUNvcHlUZXh0dXJlLnRleHR1cmUgYXQgbWlwbWFwIGxldmVsIGltYWdlQ29weVRleHR1cmUubWlw
TGV2ZWwuIgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2Ug
V0dQVVRleHR1cmVEaW1lbnNpb25fRm9yY2UzMjoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBDb21tYW5k
RW5jb2Rlcjo6Y29weVRleHR1cmVUb1RleHR1cmUoY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUm
IHNvdXJjZSwgY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUmIGRlc3RpbmF0aW9uLCBjb25zdCBX
R1BVRXh0ZW50M0QmIGNvcHlTaXplKQogewotICAgIFVOVVNFRF9QQVJBTShzb3VyY2UpOwotICAg
IFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcHlTaXplKTsK
KyAgICBpZiAoc291cmNlLm5leHRJbkNoYWluIHx8IGRlc3RpbmF0aW9uLm5leHRJbkNoYWluKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2Vi
LyNkb20tZ3B1Y29tbWFuZGVuY29kZXItY29weXRleHR1cmV0b3RleHR1cmUKKworICAgIC8vICJQ
cmVwYXJlIHRoZSBlbmNvZGVyIHN0YXRlIG9mIHRoaXMuIElmIGl0IHJldHVybnMgZmFsc2UsIHN0
b3AuIgorICAgIGlmICghcHJlcGFyZVRoZUVuY29kZXJTdGF0ZSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyAiSWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgdW5zYXRp
c2ZpZWQiCisgICAgaWYgKCF2YWxpZGF0ZUNvcHlUZXh0dXJlVG9UZXh0dXJlKHNvdXJjZSwgZGVz
dGluYXRpb24sIGNvcHlTaXplKSkgeworICAgICAgICAvLyAiZ2VuZXJhdGUgYSB2YWxpZGF0aW9u
IGVycm9yIGFuZCBzdG9wLiIKKyAgICAgICAgbV9kZXZpY2UtPmdlbmVyYXRlQVZhbGlkYXRpb25F
cnJvcigiVmFsaWRhdGlvbiBmYWlsdXJlLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgZW5zdXJlQmxpdENvbW1hbmRFbmNvZGVyKCk7CisKKyAgICBhdXRvJiBzb3VyY2VEZXNjcmlw
dG9yID0gZnJvbUFQSShzb3VyY2UudGV4dHVyZSkuZGVzY3JpcHRvcigpOworICAgIC8vIEZJWE1F
KFBFUkZPUk1BTkNFKTogSXMgaXQgYWN0dWFsbHkgZmFzdGVyIHRvIHVzZSB0aGUgLVtNVExCbGl0
Q29tbWFuZEVuY29kZXIgY29weUZyb21UZXh0dXJlOi4uLnRvVGV4dHVyZTouLi5sZXZlbENvdW50
Ol0KKyAgICAvLyB2YXJpYW50LCB3aGVyZSBwb3NzaWJsZSwgcmF0aGVyIHRoYW4gY2FsbGluZyB0
aGUgb3RoZXIgdmFyaWFudCBpbiBhIGxvb3A/CisgICAgc3dpdGNoIChzb3VyY2VEZXNjcmlwdG9y
LmRpbWVuc2lvbikgeworICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNpb25fMUQ6IHsKKyAgICAg
ICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24vbWV0YWwvbXRs
YmxpdGNvbW1hbmRlbmNvZGVyLzE0MDA3NTYtY29weWZyb210ZXh0dXJlP2xhbmd1YWdlPW9iamMK
KyAgICAgICAgLy8gIldoZW4geW91IGNvcHkgdG8gYSAxRCB0ZXh0dXJlLCBoZWlnaHQgYW5kIGRl
cHRoIG11c3QgYmUgMS4iCisgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IE1UTFNpemVNYWtlKGNv
cHlTaXplLndpZHRoLCAxLCAxKTsKKyAgICAgICAgYXV0byBzb3VyY2VPcmlnaW4gPSBNVExPcmln
aW5NYWtlKHNvdXJjZS5vcmlnaW4ueCwgMSwgMSk7CisgICAgICAgIGF1dG8gZGVzdGluYXRpb25P
cmlnaW4gPSBNVExPcmlnaW5NYWtlKGRlc3RpbmF0aW9uLm9yaWdpbi54LCAxLCAxKTsKKyAgICAg
ICAgZm9yICh1aW50MzJfdCBsYXllciA9IDA7IGxheWVyIDwgY29weVNpemUuZGVwdGhPckFycmF5
TGF5ZXJzOyArK2xheWVyKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVXNlIGNoZWNrZWQgYXJp
dGhtZXRpYy4KKyAgICAgICAgICAgIE5TVUludGVnZXIgc291cmNlU2xpY2UgPSBzb3VyY2Uub3Jp
Z2luLnogKyBsYXllcjsKKyAgICAgICAgICAgIE5TVUludGVnZXIgZGVzdGluYXRpb25TbGljZSA9
IGRlc3RpbmF0aW9uLm9yaWdpbi56ICsgbGF5ZXI7CisgICAgICAgICAgICBbbV9ibGl0Q29tbWFu
ZEVuY29kZXIKKyAgICAgICAgICAgICAgICBjb3B5RnJvbVRleHR1cmU6ZnJvbUFQSShzb3VyY2Uu
dGV4dHVyZSkudGV4dHVyZSgpCisgICAgICAgICAgICAgICAgc291cmNlU2xpY2U6c291cmNlU2xp
Y2UKKyAgICAgICAgICAgICAgICBzb3VyY2VMZXZlbDpzb3VyY2UubWlwTGV2ZWwKKyAgICAgICAg
ICAgICAgICBzb3VyY2VPcmlnaW46c291cmNlT3JpZ2luCisgICAgICAgICAgICAgICAgc291cmNl
U2l6ZTpzb3VyY2VTaXplCisgICAgICAgICAgICAgICAgdG9UZXh0dXJlOmZyb21BUEkoZGVzdGlu
YXRpb24udGV4dHVyZSkudGV4dHVyZSgpCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25TbGlj
ZTpkZXN0aW5hdGlvblNsaWNlCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25MZXZlbDpkZXN0
aW5hdGlvbi5taXBMZXZlbAorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT3JpZ2luOmRlc3Rp
bmF0aW9uT3JpZ2luXTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8yRDogeworICAgICAgICAvLyBodHRwczovL2RldmVsb3Bl
ci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9tZXRhbC9tdGxibGl0Y29tbWFuZGVuY29kZXIvMTQw
MDc1Ni1jb3B5ZnJvbXRleHR1cmU/bGFuZ3VhZ2U9b2JqYworICAgICAgICAvLyAiV2hlbiB5b3Ug
Y29weSB0byBhIDJEIHRleHR1cmUsIGRlcHRoIG11c3QgYmUgMS4iCisgICAgICAgIGF1dG8gc291
cmNlU2l6ZSA9IE1UTFNpemVNYWtlKGNvcHlTaXplLndpZHRoLCBjb3B5U2l6ZS5oZWlnaHQsIDEp
OworICAgICAgICBhdXRvIHNvdXJjZU9yaWdpbiA9IE1UTE9yaWdpbk1ha2Uoc291cmNlLm9yaWdp
bi54LCBzb3VyY2Uub3JpZ2luLnksIDEpOworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uT3JpZ2lu
ID0gTVRMT3JpZ2luTWFrZShkZXN0aW5hdGlvbi5vcmlnaW4ueCwgZGVzdGluYXRpb24ub3JpZ2lu
LnksIDEpOworICAgICAgICBmb3IgKHVpbnQzMl90IGxheWVyID0gMDsgbGF5ZXIgPCBjb3B5U2l6
ZS5kZXB0aE9yQXJyYXlMYXllcnM7ICsrbGF5ZXIpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBV
c2UgY2hlY2tlZCBhcml0aG1ldGljLgorICAgICAgICAgICAgTlNVSW50ZWdlciBzb3VyY2VTbGlj
ZSA9IHNvdXJjZS5vcmlnaW4ueiArIGxheWVyOworICAgICAgICAgICAgTlNVSW50ZWdlciBkZXN0
aW5hdGlvblNsaWNlID0gZGVzdGluYXRpb24ub3JpZ2luLnogKyBsYXllcjsKKyAgICAgICAgICAg
IFttX2JsaXRDb21tYW5kRW5jb2RlcgorICAgICAgICAgICAgICAgIGNvcHlGcm9tVGV4dHVyZTpm
cm9tQVBJKHNvdXJjZS50ZXh0dXJlKS50ZXh0dXJlKCkKKyAgICAgICAgICAgICAgICBzb3VyY2VT
bGljZTpzb3VyY2VTbGljZQorICAgICAgICAgICAgICAgIHNvdXJjZUxldmVsOnNvdXJjZS5taXBM
ZXZlbAorICAgICAgICAgICAgICAgIHNvdXJjZU9yaWdpbjpzb3VyY2VPcmlnaW4KKyAgICAgICAg
ICAgICAgICBzb3VyY2VTaXplOnNvdXJjZVNpemUKKyAgICAgICAgICAgICAgICB0b1RleHR1cmU6
ZnJvbUFQSShkZXN0aW5hdGlvbi50ZXh0dXJlKS50ZXh0dXJlKCkKKyAgICAgICAgICAgICAgICBk
ZXN0aW5hdGlvblNsaWNlOmRlc3RpbmF0aW9uU2xpY2UKKyAgICAgICAgICAgICAgICBkZXN0aW5h
dGlvbkxldmVsOmRlc3RpbmF0aW9uLm1pcExldmVsCisgICAgICAgICAgICAgICAgZGVzdGluYXRp
b25PcmlnaW46ZGVzdGluYXRpb25PcmlnaW5dOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uXzNEOiB7CisgICAgICAgIGF1dG8g
c291cmNlU2l6ZSA9IE1UTFNpemVNYWtlKGNvcHlTaXplLndpZHRoLCBjb3B5U2l6ZS5oZWlnaHQs
IGNvcHlTaXplLmRlcHRoT3JBcnJheUxheWVycyk7CisgICAgICAgIGF1dG8gc291cmNlT3JpZ2lu
ID0gTVRMT3JpZ2luTWFrZShzb3VyY2Uub3JpZ2luLngsIHNvdXJjZS5vcmlnaW4ueSwgc291cmNl
Lm9yaWdpbi56KTsKKyAgICAgICAgYXV0byBkZXN0aW5hdGlvbk9yaWdpbiA9IE1UTE9yaWdpbk1h
a2UoZGVzdGluYXRpb24ub3JpZ2luLngsIGRlc3RpbmF0aW9uLm9yaWdpbi55LCBkZXN0aW5hdGlv
bi5vcmlnaW4ueik7CisgICAgICAgIFttX2JsaXRDb21tYW5kRW5jb2RlcgorICAgICAgICAgICAg
Y29weUZyb21UZXh0dXJlOmZyb21BUEkoc291cmNlLnRleHR1cmUpLnRleHR1cmUoKQorICAgICAg
ICAgICAgc291cmNlU2xpY2U6MAorICAgICAgICAgICAgc291cmNlTGV2ZWw6c291cmNlLm1pcExl
dmVsCisgICAgICAgICAgICBzb3VyY2VPcmlnaW46c291cmNlT3JpZ2luCisgICAgICAgICAgICBz
b3VyY2VTaXplOnNvdXJjZVNpemUKKyAgICAgICAgICAgIHRvVGV4dHVyZTpmcm9tQVBJKGRlc3Rp
bmF0aW9uLnRleHR1cmUpLnRleHR1cmUoKQorICAgICAgICAgICAgZGVzdGluYXRpb25TbGljZTow
CisgICAgICAgICAgICBkZXN0aW5hdGlvbkxldmVsOmRlc3RpbmF0aW9uLm1pcExldmVsCisgICAg
ICAgICAgICBkZXN0aW5hdGlvbk9yaWdpbjpkZXN0aW5hdGlvbk9yaWdpbl07CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5zaW9uX0ZvcmNlMzI6CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiB9CiAKIHN0YXRpYyBib29sIHZhbGlkYXRlQ2xlYXJCdWZmZXIo
Y29uc3QgQnVmZmVyJiBidWZmZXIsIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbXB1dGVQaXBlbGluZS5tbSBiL1NvdXJj
ZS9XZWJHUFUvV2ViR1BVL0NvbXB1dGVQaXBlbGluZS5tbQppbmRleCBlNGFkNzdhZjk3YTNjMTM4
OTIxYjQ3ZDAyNjU5OGI4YmM3NmRhNGEzLi5hNGU4ZWY2NjNkZDM5OGMyMWQwMTZjZTU0ZDg5MDBl
MDFlYWY0N2VlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21wdXRlUGlwZWxp
bmUubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tcHV0ZVBpcGVsaW5lLm1tCkBAIC0x
NDYsOCArMTQ2LDggQEAgUmVmUHRyPENvbXB1dGVQaXBlbGluZT4gRGV2aWNlOjpjcmVhdGVDb21w
dXRlUGlwZWxpbmUoY29uc3QgV0dQVUNvbXB1dGVQaXBlbGluZUQKICAgICBpZiAoZGVzY3JpcHRv
ci5uZXh0SW5DaGFpbiB8fCBkZXNjcmlwdG9yLmNvbXB1dGUubmV4dEluQ2hhaW4pCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgY29uc3QgU2hhZGVyTW9kdWxlJiBzaGFkZXJNb2R1bGUg
PSBXZWJHUFU6OmZyb21BUEkoZGVzY3JpcHRvci5jb21wdXRlLm1vZHVsZSk7Ci0gICAgY29uc3Qg
UGlwZWxpbmVMYXlvdXQmIHBpcGVsaW5lTGF5b3V0ID0gV2ViR1BVOjpmcm9tQVBJKGRlc2NyaXB0
b3IubGF5b3V0KTsKKyAgICBjb25zdCBTaGFkZXJNb2R1bGUmIHNoYWRlck1vZHVsZSA9IGZyb21B
UEkoZGVzY3JpcHRvci5jb21wdXRlLm1vZHVsZSk7CisgICAgY29uc3QgUGlwZWxpbmVMYXlvdXQm
IHBpcGVsaW5lTGF5b3V0ID0gZnJvbUFQSShkZXNjcmlwdG9yLmxheW91dCk7CiAgICAgYXV0byBs
YWJlbCA9IGZyb21BUEkoZGVzY3JpcHRvci5sYWJlbCk7CiAKICAgICBhdXRvIGxpYnJhcnlDcmVh
dGlvblJlc3VsdCA9IGNyZWF0ZUxpYnJhcnkobV9kZXZpY2UsIHNoYWRlck1vZHVsZSwgcGlwZWxp
bmVMYXlvdXQsIFN0cmluZyB7IGRlc2NyaXB0b3IuY29tcHV0ZS5lbnRyeVBvaW50IH0sIGxhYmVs
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1BpcGVsaW5lTGF5b3V0Lm1tIGIv
U291cmNlL1dlYkdQVS9XZWJHUFUvUGlwZWxpbmVMYXlvdXQubW0KaW5kZXggZWZhMGQ2ZDUxN2Jh
Y2I2N2NlMjM2ZDA0MWFmMWE1ZmYzNTgwOTZmYS4uMDY1ODNkZjBkZGFmM2M2OTY2ZTk0NGZhMzYz
ZTY0MDg1OTFiYWE3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvUGlwZWxpbmVM
YXlvdXQubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvUGlwZWxpbmVMYXlvdXQubW0KQEAg
LTQxLDcgKzQxLDcgQEAgUmVmUHRyPFBpcGVsaW5lTGF5b3V0PiBEZXZpY2U6OmNyZWF0ZVBpcGVs
aW5lTGF5b3V0KGNvbnN0IFdHUFVQaXBlbGluZUxheW91dERlc2MKICAgICBiaW5kR3JvdXBMYXlv
dXRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci5iaW5kR3JvdXBMYXlvdXRDb3Vu
dCk7CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGRlc2NyaXB0b3IuYmluZEdyb3VwTGF5
b3V0Q291bnQ7ICsraSkgewogICAgICAgICBhdXRvKiBiaW5kR3JvdXBMYXlvdXQgPSBkZXNjcmlw
dG9yLmJpbmRHcm91cExheW91dHNbaV07Ci0gICAgICAgIGJpbmRHcm91cExheW91dHMudW5jaGVj
a2VkQXBwZW5kKFdlYkdQVTo6ZnJvbUFQSShiaW5kR3JvdXBMYXlvdXQpKTsKKyAgICAgICAgYmlu
ZEdyb3VwTGF5b3V0cy51bmNoZWNrZWRBcHBlbmQoZnJvbUFQSShiaW5kR3JvdXBMYXlvdXQpKTsK
ICAgICB9CiAgICAgcmV0dXJuIFBpcGVsaW5lTGF5b3V0OjpjcmVhdGUoV1RGTW92ZShiaW5kR3Jv
dXBMYXlvdXRzKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9TaGFkZXJN
b2R1bGUubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9TaGFkZXJNb2R1bGUubW0KaW5kZXggNjA1
ZTM3MjMzNjEwNWFlMDg3MTM3ZGI2MTY0Njk4MTEyYmNmZjg3Yi4uZTc2NTQyMjI4MmMzNDFmZTA1
MTk4NThlN2Q1ODhkZWQ4MDQ1MDM0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUv
U2hhZGVyTW9kdWxlLm1tCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1NoYWRlck1vZHVsZS5t
bQpAQCAtODksOCArODksOCBAQCBzdGF0aWMgUmVmUHRyPFNoYWRlck1vZHVsZT4gZWFybHlDb21w
aWxlU2hhZGVyTW9kdWxlKGlkPE1UTERldmljZT4gZGV2aWNlLCBzdGQ6OgogICAgICAgICBpZiAo
aGludC5uZXh0SW5DaGFpbikKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBT
dHJpbmcgaGludEtleSB7IGhpbnQua2V5IH07Ci0gICAgICAgIGhpbnRzLmFkZChoaW50S2V5LCBX
ZWJHUFU6OmZyb21BUEkoaGludC5oaW50LmxheW91dCkpOwotICAgICAgICBhdXRvIGNvbnZlcnRl
ZFBpcGVsaW5lTGF5b3V0ID0gU2hhZGVyTW9kdWxlOjpjb252ZXJ0UGlwZWxpbmVMYXlvdXQoV2Vi
R1BVOjpmcm9tQVBJKGhpbnQuaGludC5sYXlvdXQpKTsKKyAgICAgICAgaGludHMuYWRkKGhpbnRL
ZXksIGZyb21BUEkoaGludC5oaW50LmxheW91dCkpOworICAgICAgICBhdXRvIGNvbnZlcnRlZFBp
cGVsaW5lTGF5b3V0ID0gU2hhZGVyTW9kdWxlOjpjb252ZXJ0UGlwZWxpbmVMYXlvdXQoZnJvbUFQ
SShoaW50LmhpbnQubGF5b3V0KSk7CiAgICAgICAgIHdnc2xIaW50cy5hZGQoaGludEtleSwgV1RG
TW92ZShjb252ZXJ0ZWRQaXBlbGluZUxheW91dCkpOwogICAgIH0KICAgICBhdXRvIHByZXBhcmVS
ZXN1bHQgPSBXR1NMOjpwcmVwYXJlKHN0ZDo6Z2V0PFdHU0w6OlN1Y2Nlc3NmdWxDaGVjaz4oY2hl
Y2tSZXN1bHQpLmFzdCwgd2dzbEhpbnRzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2Vi
R1BVL1RleHR1cmUuaCBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmUuaAppbmRleCA5YTU5
NzhkNzM5MTJjOTkxZTRiNDNiY2VkMjc5ZDExZDNlYmI3NDA1Li4zNTFlNjFlNjFjNDQ5ZjdhNWQ2
NzM2Zjg4OTU4MjhkN2YwMDFlZjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9U
ZXh0dXJlLmgKKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvVGV4dHVyZS5oCkBAIC01MSw2ICs1
MSwxNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXN0cm95KCk7CiAgICAgdm9pZCBzZXRMYWJlbChT
dHJpbmcmJik7CiAKKyAgICBzdGF0aWMgdWludDMyX3QgdGV4ZWxCbG9ja1dpZHRoKFdHUFVUZXh0
dXJlRm9ybWF0KTsKKyAgICBzdGF0aWMgdWludDMyX3QgdGV4ZWxCbG9ja0hlaWdodChXR1BVVGV4
dHVyZUZvcm1hdCk7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IHRleGVsQmxv
Y2tTaXplKFdHUFVUZXh0dXJlRm9ybWF0KTsKKyAgICBzdGF0aWMgYm9vbCBpc0RlcHRoT3JTdGVu
Y2lsRm9ybWF0KFdHUFVUZXh0dXJlRm9ybWF0KTsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxX
R1BVVGV4dHVyZUZvcm1hdD4gc3RlbmNpbE9ubHlBc3BlY3RGb3JtYXQoV0dQVVRleHR1cmVGb3Jt
YXQpOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdHUFVUZXh0dXJlRm9ybWF0PiBkZXB0aE9u
bHlBc3BlY3RGb3JtYXQoV0dQVVRleHR1cmVGb3JtYXQpOworCisgICAgV0dQVUV4dGVudDNEIGxv
Z2ljYWxUZXh0dXJlU3VicmVzb3VyY2VFeHRlbnQodWludDMyX3QgbWlwTGV2ZWwpOworICAgIFdH
UFVFeHRlbnQzRCBwaHlzaWNhbFRleHR1cmVTdWJyZXNvdXJjZUV4dGVudCh1aW50MzJfdCBtaXBM
ZXZlbCk7CisKICAgICBpZDxNVExUZXh0dXJlPiB0ZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV90
ZXh0dXJlOyB9CiAgICAgY29uc3QgV0dQVVRleHR1cmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdG9yOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJH
UFUvV2ViR1BVL1RleHR1cmUubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLm1tCmlu
ZGV4IDhmNTRmY2Q3YzE4ODM5M2ZkNmNiNWE0NjdkOWU0NDY2Njk3NzkyYjIuLjNiNmE1NWIzNjkx
ZmM0ZTUxMjZiYWZhZTE2Y2IyOTMyNDAzZDAzZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUv
V2ViR1BVL1RleHR1cmUubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvVGV4dHVyZS5tbQpA
QCAtMzMsNiArMzMsOCBAQAogCiBuYW1lc3BhY2UgV2ViR1BVIHsKIAorc3RhdGljIHN0ZDo6b3B0
aW9uYWw8TVRMUGl4ZWxGb3JtYXQ+IHBpeGVsRm9ybWF0KFdHUFVUZXh0dXJlRm9ybWF0KTsKKwog
c3RhdGljIHN0ZDo6b3B0aW9uYWw8V0dQVUZlYXR1cmVOYW1lPiBmZWF0dXJlUmVxdWlyZW1lbnRG
b3JGb3JtYXQoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0KQogewogICAgIHN3aXRjaCAoZm9ybWF0
KSB7CkBAIC0yNDcsNyArMjQ5LDcgQEAgc3RhdGljIGJvb2wgaXNDb21wcmVzc2VkRm9ybWF0KFdH
UFVUZXh0dXJlRm9ybWF0IGZvcm1hdCkKICAgICB9CiB9CiAKLXN0YXRpYyBib29sIGlzRGVwdGhP
clN0ZW5jaWxGb3JtYXQoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0KQorYm9vbCBUZXh0dXJlOjpp
c0RlcHRoT3JTdGVuY2lsRm9ybWF0KFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCkKIHsKICAgICAv
LyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNkZXB0aC1mb3JtYXRzCiAgICAgLy8g
IkEgZGVwdGgtb3Itc3RlbmNpbCBmb3JtYXQgaXMgYW55IGZvcm1hdCB3aXRoIGRlcHRoIGFuZC9v
ciBzdGVuY2lsIGFzcGVjdHMuIgpAQCAtMzU0LDcgKzM1Niw3IEBAIHN0YXRpYyBib29sIGlzRGVw
dGhPclN0ZW5jaWxGb3JtYXQoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0KQogICAgIH0KIH0KIAot
c3RhdGljIHVpbnQzMl90IHRleGVsQmxvY2tXaWR0aChXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQp
Cit1aW50MzJfdCBUZXh0dXJlOjp0ZXhlbEJsb2NrV2lkdGgoV0dQVVRleHR1cmVGb3JtYXQgZm9y
bWF0KQogewogICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI3RleGVsLWJs
b2NrLXdpZHRoCiAgICAgc3dpdGNoIChmb3JtYXQpIHsKQEAgLTQ2OCw3ICs0NzAsNyBAQCBzdGF0
aWMgdWludDMyX3QgdGV4ZWxCbG9ja1dpZHRoKFdHUFVUZXh0dXJlRm9ybWF0IGZvcm1hdCkKICAg
ICB9CiB9CiAKLXN0YXRpYyB1aW50MzJfdCB0ZXhlbEJsb2NrSGVpZ2h0KFdHUFVUZXh0dXJlRm9y
bWF0IGZvcm1hdCkKK3VpbnQzMl90IFRleHR1cmU6OnRleGVsQmxvY2tIZWlnaHQoV0dQVVRleHR1
cmVGb3JtYXQgZm9ybWF0KQogewogICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3
ZWIvI3RleGVsLWJsb2NrLWhlaWdodAogICAgIHN3aXRjaCAoZm9ybWF0KSB7CkBAIC01ODcsNiAr
NTg5LDEzNyBAQCBzdGF0aWMgdWludDMyX3QgdGV4ZWxCbG9ja0hlaWdodChXR1BVVGV4dHVyZUZv
cm1hdCBmb3JtYXQpCiAgICAgfQogfQogCitzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBUZXh0dXJl
Ojp0ZXhlbEJsb2NrU2l6ZShXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQpCit7CisgICAgc3dpdGNo
IChmb3JtYXQpIHsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1VuZGVmaW5lZDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfUjhVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1I4U25v
cm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9SOFNpbnQ6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfUjE2VWludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IxNlNpbnQ6Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMTZGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X1JHOFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkc4U25vcm06Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzhVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfUkc4U2ludDoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SMzJGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1IzMlVpbnQ6CisgICAg
Y2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SMzJTaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfUkcxNlVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2U2ludDoKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMTZGbG9hdDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X1JHQkE4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFVub3JtU3Jn
YjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4U25vcm06CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9SR0JBOFVpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JB
OFNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CR1JBOFVub3JtOgorICAgIGNhc2Ug
V0dQVVRleHR1cmVGb3JtYXRfQkdSQThVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZv
cm1hdF9SR0IxMEEyVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SRzExQjEwVWZs
b2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCOUU1VWZsb2F0OgorICAgICAgICBy
ZXR1cm4gNDsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHMzJGbG9hdDoKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X1JHMzJVaW50OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRf
UkczMlNpbnQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMTZVaW50OgorICAgIGNh
c2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTE2U2ludDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X1JHQkExNkZsb2F0OgorICAgICAgICByZXR1cm4gODsKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X1JHQkEzMkZsb2F0OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfUkdCQTMyVWlu
dDoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkEzMlNpbnQ6CisgICAgICAgIHJldHVy
biAxNjsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X1N0ZW5jaWw4OgorICAgICAgICByZXR1
cm4gMTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMTZVbm9ybToKKyAgICAgICAg
cmV0dXJuIDI7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDI0UGx1czoKKyAgICAg
ICAgQVNTRVJUKHBpeGVsRm9ybWF0KGZvcm1hdCkgPT0gTVRMUGl4ZWxGb3JtYXREZXB0aDMyRmxv
YXQpOworICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRo
MjRQbHVzU3RlbmNpbDg6CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9EZXB0aDI0VW5vcm1TdGVuY2lsODoKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMzJGbG9hdDoKKyAg
ICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDMyRmxvYXRT
dGVuY2lsODoKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRm9ybWF0X0JDMVJHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDMVJH
QkFVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiA4OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfQkMyUkdCQVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkMyUkdCQVVub3Jt
U3JnYjoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzNS
R0JBVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzNSR0JBVW5vcm1TcmdiOgor
ICAgICAgICByZXR1cm4gMTY7CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSVW5vcm06
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSU25vcm06CisgICAgICAgIHJldHVybiA4
OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQkM1UkdVbm9ybToKKyAgICBjYXNlIFdHUFVU
ZXh0dXJlRm9ybWF0X0JDNVJHU25vcm06CisgICAgICAgIHJldHVybiAxNjsKKyAgICBjYXNlIFdH
UFVUZXh0dXJlRm9ybWF0X0JDNkhSR0JVZmxvYXQ6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1h
dF9CQzZIUkdCRmxvYXQ6CisgICAgICAgIHJldHVybiAxNjsKKyAgICBjYXNlIFdHUFVUZXh0dXJl
Rm9ybWF0X0JDN1JHQkFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0JDN1JHQkFV
bm9ybVNyZ2I6CisgICAgICAgIHJldHVybiAxNjsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0VUQzJSR0I4VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOFVub3Jt
U3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4QTFVbm9ybToKKyAgICBj
YXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4QTFVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9FVEMyUkdCQThVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0
X0VUQzJSR0JBOFVub3JtU3JnYjoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgY2FzZSBXR1BVVGV4
dHVyZUZvcm1hdF9FQUNSMTFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1Ix
MVNub3JtOgorICAgICAgICByZXR1cm4gODsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VB
Q1JHMTFVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JHMTFTbm9ybToKKyAg
ICAgICAgcmV0dXJuIDE2OworICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzR4NFVub3Jt
OgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzR4NFVub3JtU3JnYjoKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM1eDRVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0FTVEM1eDRVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg1
VW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg1VW5vcm1TcmdiOgorICAg
IGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1
cmVGb3JtYXRfQVNUQzZ4NVVub3JtU3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FT
VEM2eDZVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDZVbm9ybVNyZ2I6
CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg1VW5vcm06CisgICAgY2FzZSBXR1BV
VGV4dHVyZUZvcm1hdF9BU1RDOHg1VW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfQVNUQzh4NlVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NlVub3Jt
U3JnYjoKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDhVbm9ybToKKyAgICBjYXNl
IFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDhVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVy
ZUZvcm1hdF9BU1RDMTB4NVVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEw
eDVVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NlVub3JtOgor
ICAgIGNhc2UgV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDZVbm9ybVNyZ2I6CisgICAgY2FzZSBX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4OFVub3JtOgorICAgIGNhc2UgV0dQVVRleHR1cmVGb3Jt
YXRfQVNUQzEweDhVbm9ybVNyZ2I6CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4
MTBVbm9ybToKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHgxMFVub3JtU3JnYjoK
KyAgICBjYXNlIFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMFVub3JtOgorICAgIGNhc2UgV0dQ
VVRleHR1cmVGb3JtYXRfQVNUQzEyeDEwVW5vcm1TcmdiOgorICAgIGNhc2UgV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzEyeDEyVW5vcm06CisgICAgY2FzZSBXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4
MTJVbm9ybVNyZ2I6CisgICAgICAgIHJldHVybiAxNjsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRm9y
bWF0X0ZvcmNlMzI6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9Cit9CisKIHN0YXRpYyBib29sIGlzUmVuZGVyYWJsZUZvcm1hdChXR1BVVGV4
dHVyZUZvcm1hdCBmb3JtYXQpCiB7CiAgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dw
dXdlYi8jcmVuZGVyYWJsZS1mb3JtYXQKQEAgLTk3OCw3ICsxMTExLDcgQEAgYm9vbCBEZXZpY2U6
OnZhbGlkYXRlQ3JlYXRlVGV4dHVyZShjb25zdCBXR1BVVGV4dHVyZURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgLy8gImRlc2NyaXB0
b3IuZm9ybWF0IG11c3Qgbm90IGJlIGEgY29tcHJlc3NlZCBmb3JtYXQgb3IgZGVwdGgtb3Itc3Rl
bmNpbCBmb3JtYXQuIgotICAgICAgICBpZiAoaXNDb21wcmVzc2VkRm9ybWF0KGRlc2NyaXB0b3Iu
Zm9ybWF0KSB8fCBpc0RlcHRoT3JTdGVuY2lsRm9ybWF0KGRlc2NyaXB0b3IuZm9ybWF0KSkKKyAg
ICAgICAgaWYgKGlzQ29tcHJlc3NlZEZvcm1hdChkZXNjcmlwdG9yLmZvcm1hdCkgfHwgVGV4dHVy
ZTo6aXNEZXB0aE9yU3RlbmNpbEZvcm1hdChkZXNjcmlwdG9yLmZvcm1hdCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV0dQVVRleHR1cmVEaW1l
bnNpb25fMkQ6CkBAIC0xMDAwLDcgKzExMzMsNyBAQCBib29sIERldmljZTo6dmFsaWRhdGVDcmVh
dGVUZXh0dXJlKGNvbnN0IFdHUFVUZXh0dXJlRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAvLyAiZGVzY3JpcHRvci5mb3JtYXQgbXVz
dCBub3QgYmUgYSBjb21wcmVzc2VkIGZvcm1hdCBvciBkZXB0aC1vci1zdGVuY2lsIGZvcm1hdC4i
Ci0gICAgICAgIGlmIChpc0NvbXByZXNzZWRGb3JtYXQoZGVzY3JpcHRvci5mb3JtYXQpIHx8IGlz
RGVwdGhPclN0ZW5jaWxGb3JtYXQoZGVzY3JpcHRvci5mb3JtYXQpKQorICAgICAgICBpZiAoaXND
b21wcmVzc2VkRm9ybWF0KGRlc2NyaXB0b3IuZm9ybWF0KSB8fCBUZXh0dXJlOjppc0RlcHRoT3JT
dGVuY2lsRm9ybWF0KGRlc2NyaXB0b3IuZm9ybWF0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl9Gb3JjZTMy
OgpAQCAtMTAwOCwxMSArMTE0MSwxMSBAQCBib29sIERldmljZTo6dmFsaWRhdGVDcmVhdGVUZXh0
dXJlKGNvbnN0IFdHUFVUZXh0dXJlRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKICAgICB9CiAKICAg
ICAvLyAiZGVzY3JpcHRvci5zaXplLndpZHRoIG11c3QgYmUgbXVsdGlwbGUgb2YgdGV4ZWwgYmxv
Y2sgd2lkdGguIgotICAgIGlmIChkZXNjcmlwdG9yLnNpemUud2lkdGggJSB0ZXhlbEJsb2NrV2lk
dGgoZGVzY3JpcHRvci5mb3JtYXQpKQorICAgIGlmIChkZXNjcmlwdG9yLnNpemUud2lkdGggJSBU
ZXh0dXJlOjp0ZXhlbEJsb2NrV2lkdGgoZGVzY3JpcHRvci5mb3JtYXQpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICAvLyAiZGVzY3JpcHRvci5zaXplLmhlaWdodCBtdXN0IGJlIG11bHRp
cGxlIG9mIHRleGVsIGJsb2NrIGhlaWdodC4iCi0gICAgaWYgKGRlc2NyaXB0b3Iuc2l6ZS5oZWln
aHQgJSB0ZXhlbEJsb2NrSGVpZ2h0KGRlc2NyaXB0b3IuZm9ybWF0KSkKKyAgICBpZiAoZGVzY3Jp
cHRvci5zaXplLmhlaWdodCAlIFRleHR1cmU6OnRleGVsQmxvY2tIZWlnaHQoZGVzY3JpcHRvci5m
b3JtYXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyAiSWYgZGVzY3JpcHRvci5z
YW1wbGVDb3VudCA+IDE6IgpAQCAtMTQyNCw2ICsxNTU3LDc5IEBAIHZvaWQgVGV4dHVyZTo6c2V0
TGFiZWwoU3RyaW5nJiYgbGFiZWwpCiAgICAgbV90ZXh0dXJlLmxhYmVsID0gbGFiZWw7CiB9CiAK
K1dHUFVFeHRlbnQzRCBUZXh0dXJlOjpsb2dpY2FsVGV4dHVyZVN1YnJlc291cmNlRXh0ZW50KHVp
bnQzMl90IG1pcExldmVsKQoreworICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3
ZWIvI2Fic3RyYWN0LW9wZGVmLWxvZ2ljYWwtdGV4dHVyZS1zdWJyZXNvdXJjZS1leHRlbnQKKwor
ICAgIHN3aXRjaCAobV9kZXNjcmlwdG9yLmRpbWVuc2lvbikgeworICAgIGNhc2UgV0dQVVRleHR1
cmVEaW1lbnNpb25fMUQ6CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAvLyAiU2V0IGV4
dGVudC53aWR0aCB0byBtYXgoMSwgZGVzY3JpcHRvci5zaXplLndpZHRoIOKJqyBtaXBMZXZlbCku
IgorICAgICAgICAgICAgc3RkOjptYXgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEpLCBtX2Rlc2Ny
aXB0b3Iuc2l6ZS53aWR0aCA+PiBtaXBMZXZlbCksCisgICAgICAgICAgICAvLyAiU2V0IGV4dGVu
dC5oZWlnaHQgdG8gMS4iCisgICAgICAgICAgICAxLAorICAgICAgICAgICAgLy8gIlNldCBleHRl
bnQuZGVwdGhPckFycmF5TGF5ZXJzIHRvIDEuIgorICAgICAgICAgICAgMSB9OworICAgIGNhc2Ug
V0dQVVRleHR1cmVEaW1lbnNpb25fMkQ6CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAv
LyAiU2V0IGV4dGVudC53aWR0aCB0byBtYXgoMSwgZGVzY3JpcHRvci5zaXplLndpZHRoIOKJqyBt
aXBMZXZlbCkuIgorICAgICAgICAgICAgc3RkOjptYXgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEp
LCBtX2Rlc2NyaXB0b3Iuc2l6ZS53aWR0aCA+PiBtaXBMZXZlbCksCisgICAgICAgICAgICAvLyAi
U2V0IGV4dGVudC5oZWlnaHQgdG8gbWF4KDEsIGRlc2NyaXB0b3Iuc2l6ZS5oZWlnaHQg4omrIG1p
cExldmVsKS4iCisgICAgICAgICAgICBzdGQ6Om1heChzdGF0aWNfY2FzdDx1aW50MzJfdD4oMSks
IG1fZGVzY3JpcHRvci5zaXplLmhlaWdodCA+PiBtaXBMZXZlbCksCisgICAgICAgICAgICAvLyAi
U2V0IGV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgdG8gMS4iCisgICAgICAgICAgICAxIH07Cisg
ICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8zRDoKKyAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgIC8vICJTZXQgZXh0ZW50LndpZHRoIHRvIG1heCgxLCBkZXNjcmlwdG9yLnNpemUud2lk
dGgg4omrIG1pcExldmVsKS4iCisgICAgICAgICAgICBzdGQ6Om1heChzdGF0aWNfY2FzdDx1aW50
MzJfdD4oMSksIG1fZGVzY3JpcHRvci5zaXplLndpZHRoID4+IG1pcExldmVsKSwKKyAgICAgICAg
ICAgIC8vICJTZXQgZXh0ZW50LmhlaWdodCB0byBtYXgoMSwgZGVzY3JpcHRvci5zaXplLmhlaWdo
dCDiiasgbWlwTGV2ZWwpLiIKKyAgICAgICAgICAgIHN0ZDo6bWF4KHN0YXRpY19jYXN0PHVpbnQz
Ml90PigxKSwgbV9kZXNjcmlwdG9yLnNpemUuaGVpZ2h0ID4+IG1pcExldmVsKSwKKyAgICAgICAg
ICAgIC8vICJTZXQgZXh0ZW50LmRlcHRoT3JBcnJheUxheWVycyB0byBtYXgoMSwgZGVzY3JpcHRv
ci5zaXplLmRlcHRoT3JBcnJheUxheWVycyDiiasgbWlwTGV2ZWwpLiIKKyAgICAgICAgICAgIHN0
ZDo6bWF4KHN0YXRpY19jYXN0PHVpbnQzMl90PigxKSwgbV9kZXNjcmlwdG9yLnNpemUuZGVwdGhP
ckFycmF5TGF5ZXJzID4+IG1pcExldmVsKSB9OworICAgIGNhc2UgV0dQVVRleHR1cmVEaW1lbnNp
b25fRm9yY2UzMjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBXR1BVRXh0ZW50M0QgeyB9OworICAgIH0KK30KKworV0dQVUV4dGVudDNEIFRleHR1cmU6OnBo
eXNpY2FsVGV4dHVyZVN1YnJlc291cmNlRXh0ZW50KHVpbnQzMl90IG1pcExldmVsKQoreworICAg
IC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2Fic3RyYWN0LW9wZGVmLXBoeXNp
Y2FsLXRleHR1cmUtc3VicmVzb3VyY2UtZXh0ZW50CisKKyAgICAvLyAiTGV0IGxvZ2ljYWxFeHRl
bnQgYmUgTG9naWNhbCB0ZXh0dXJlIHN1YnJlc291cmNlIGV4dGVudChkZXNjcmlwdG9yLCBtaXBM
ZXZlbCkuIgorICAgIGF1dG8gbG9naWNhbEV4dGVudCA9IGxvZ2ljYWxUZXh0dXJlU3VicmVzb3Vy
Y2VFeHRlbnQobWlwTGV2ZWwpOworCisgICAgc3dpdGNoIChtX2Rlc2NyaXB0b3IuZGltZW5zaW9u
KSB7CisgICAgY2FzZSBXR1BVVGV4dHVyZURpbWVuc2lvbl8xRDoKKyAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgIC8vICJTZXQgZXh0ZW50LndpZHRoIHRvIGxvZ2ljYWxFeHRlbnQud2lkdGgg
cm91bmRlZCB1cCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiBkZXNjcmlwdG9y4oCZcyB0ZXhl
bCBibG9jayB3aWR0aC4iCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHRleGVsQmxvY2tXaWR0aChtX2Rlc2NyaXB0b3IuZm9ybWF0KSwg
bG9naWNhbEV4dGVudC53aWR0aCkpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQuaGVpZ2h0
IHRvIDEuIgorICAgICAgICAgICAgMSwKKyAgICAgICAgICAgIC8vICJTZXQgZXh0ZW50LmRlcHRo
T3JBcnJheUxheWVycyB0byAxLiIKKyAgICAgICAgICAgIDEgfTsKKyAgICBjYXNlIFdHUFVUZXh0
dXJlRGltZW5zaW9uXzJEOgorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgLy8gIlNldCBl
eHRlbnQud2lkdGggdG8gbG9naWNhbEV4dGVudC53aWR0aCByb3VuZGVkIHVwIHRvIHRoZSBuZWFy
ZXN0IG11bHRpcGxlIG9mIGRlc2NyaXB0b3LigJlzIHRleGVsIGJsb2NrIHdpZHRoLiIKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2YodGV4
ZWxCbG9ja1dpZHRoKG1fZGVzY3JpcHRvci5mb3JtYXQpLCBsb2dpY2FsRXh0ZW50LndpZHRoKSks
CisgICAgICAgICAgICAvLyAiU2V0IGV4dGVudC5oZWlnaHQgdG8gbG9naWNhbEV4dGVudC5oZWln
aHQgcm91bmRlZCB1cCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiBkZXNjcmlwdG9y4oCZcyB0
ZXhlbCBibG9jayBoZWlnaHQuIgorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZih0ZXhlbEJsb2NrSGVpZ2h0KG1fZGVzY3JpcHRvci5mb3Jt
YXQpLCBsb2dpY2FsRXh0ZW50LmhlaWdodCkpLAorICAgICAgICAgICAgLy8gIlNldCBleHRlbnQu
ZGVwdGhPckFycmF5TGF5ZXJzIHRvIDEuIgorICAgICAgICAgICAgMSB9OworICAgIGNhc2UgV0dQ
VVRleHR1cmVEaW1lbnNpb25fM0Q6CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAvLyAi
U2V0IGV4dGVudC53aWR0aCB0byBsb2dpY2FsRXh0ZW50LndpZHRoIHJvdW5kZWQgdXAgdG8gdGhl
IG5lYXJlc3QgbXVsdGlwbGUgb2YgZGVzY3JpcHRvcuKAmXMgdGV4ZWwgYmxvY2sgd2lkdGguIgor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
Zih0ZXhlbEJsb2NrV2lkdGgobV9kZXNjcmlwdG9yLmZvcm1hdCksIGxvZ2ljYWxFeHRlbnQud2lk
dGgpKSwKKyAgICAgICAgICAgIC8vICJTZXQgZXh0ZW50LmhlaWdodCB0byBsb2dpY2FsRXh0ZW50
LmhlaWdodCByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIGRlc2NyaXB0b3Li
gJlzIHRleGVsIGJsb2NrIGhlaWdodC4iCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHRleGVsQmxvY2tIZWlnaHQobV9kZXNjcmlwdG9y
LmZvcm1hdCksIGxvZ2ljYWxFeHRlbnQuaGVpZ2h0KSksCisgICAgICAgICAgICAvLyAiU2V0IGV4
dGVudC5kZXB0aE9yQXJyYXlMYXllcnMgdG8gbG9naWNhbEV4dGVudC5oZWlnaHQuIgorICAgICAg
ICAgICAgbG9naWNhbEV4dGVudC5oZWlnaHQgfTsKKyAgICBjYXNlIFdHUFVUZXh0dXJlRGltZW5z
aW9uX0ZvcmNlMzI6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gV0dQVUV4dGVudDNEIHsgfTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkdQVQog
CiAjcHJhZ21hIG1hcmsgV0dQVSBTdHVicwo=
</data>
<flag name="commit-queue"
          id="483916"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>